diff options
author | Alexander Smirnov <alex@ydb.tech> | 2024-05-06 12:56:16 +0000 |
---|---|---|
committer | Alexander Smirnov <alex@ydb.tech> | 2024-05-06 12:56:16 +0000 |
commit | f92674dbdb92b9e717f952166ffa8307beec4251 (patch) | |
tree | 90180e24c75a6be69d35b81d2ec58395a8380c78 | |
parent | da52d326c570ca0b3284ba4bb5f1a380360afaf5 (diff) | |
parent | 86fa90c3f199cb8af7bb07188a11da49f5e8e984 (diff) | |
download | ydb-f92674dbdb92b9e717f952166ffa8307beec4251.tar.gz |
Merge branch 'rightlib' into mergelibs-240506-1255
727 files changed, 32670 insertions, 24999 deletions
diff --git a/build/conf/bison_lex.conf b/build/conf/bison_lex.conf index 71a7218ad2..ba77b967f8 100644 --- a/build/conf/bison_lex.conf +++ b/build/conf/bison_lex.conf @@ -26,6 +26,7 @@ _CPP_BISON_SKELS=\ _BISON_GEN_EXT=.cpp _FLEX_GEN_EXT=.cpp +_BISON_HEADER_SUFFIX=.h _BISON_HEADER= _BISON_PP= _FLEX_TOOL= @@ -33,8 +34,8 @@ _FLEX_TOOL_DIR= _FLEX_HEADER= when ($_BISON_FLEX_SET_DEFAULTS == "yes") { - _BISON_HEADER=--defines=${nopath;noext;output;main;addincl;norel;suf=.h:SRC} - _BISON_PP=$YMAKE_PYTHON ${input:"build/scripts/preprocess.py"} $_ADD_HIDDEN_INPUTS($_CPP_BISON_SKELS) ${nopath;noext;tmp:SRC.h} + _BISON_HEADER=--defines=${nopath;noext;output;main;addincl;norel;suf=$_BISON_HEADER_SUFFIX:SRC} + _BISON_PP=$YMAKE_PYTHON ${input:"build/scripts/preprocess.py"} $_ADD_HIDDEN_INPUTS($_CPP_BISON_SKELS) ${nopath;noext;tmp;suf=$_BISON_HEADER_SUFFIX:SRC} _FLEX_TOOL=${tool:"contrib/tools/flex-old"} _FLEX_TOOL_DIR=contrib/tools/flex-old _FLEX_HEADER= @@ -88,7 +89,10 @@ macro FLEX_GEN_CPP() { ### ### Use SUFF (including extension) to name Bison defines header file. The default is just `.h`. macro BISON_HEADER(Suffix) { - SET(_BISON_HEADER --defines=\${nopath;noext;output;main;addincl;norel;suf=$Suffix:SRC}) + SET(_BISON_HEADER_SUFFIX $Suffix) + SET(_BISON_HEADER --defines=\${nopath;noext;output;main;addincl;norel;suf=$_BISON_HEADER_SUFFIX:SRC}) + SET(_BISON_PP $YMAKE_PYTHON \${input:"build/scripts/preprocess.py"} $_ADD_HIDDEN_INPUTS($_CPP_BISON_SKELS) \${nopath;noext;tmp;suf=$_BISON_HEADER_SUFFIX:SRC}) + } ### @usage: BISON_NO_HEADER() diff --git a/build/conf/proto.conf b/build/conf/proto.conf index 7c16a5cb7a..ebd1641b4a 100644 --- a/build/conf/proto.conf +++ b/build/conf/proto.conf @@ -1,6 +1,6 @@ # tag:tool-specific tag:proto PROTOC=${tool:"contrib/tools/protoc"} -when ($PYTHON2 == "yes") { +when ($MODULE_LANG == "py2") { PROTOC=${tool:"contrib/tools/protoc_old"} } JAVA_PROTOC=${tool:"contrib/tools/protoc"} @@ -219,13 +219,13 @@ HAS_CPP_PROTOBUF_PEERS=no CPP_PROTOBUF_PEERS= # tag:proto tag:cpp-specific -### @usage: CPP_PROTO_PLUGIN0(Name Tool DEPS <Dependencies>) +### @usage: CPP_PROTO_PLUGIN0(Name Tool [DEPS <Dependencies>] [EXTRA_OUT_FLAG <ExtraOutFlag>]) ### ### Define protoc plugin for C++ with given Name that emits code into regular outputs ### using Tool. Extra dependencies are passed via DEPS. -macro CPP_PROTO_PLUGIN0(NAME, TOOL, DEPS[]) { +macro CPP_PROTO_PLUGIN0(NAME, TOOL, DEPS[], EXTRA_OUT_FLAG="") { .SEM=target_proto_plugin $NAME ${tool;rootrel:TOOL} ${output;hide;suf=.fake.o:NAME} - SET_APPEND(CPP_PROTO_OPTS $_PROTO_PLUGIN_ARGS_BASE($NAME $TOOL)) + SET_APPEND(CPP_PROTO_OPTS $_PROTO_PLUGIN_ARGS_BASE($NAME $TOOL $EXTRA_OUT_FLAG)) # XXX fix variable expansion in plugins ENABLE(HAS_CPP_PROTOBUF_PEERS) @@ -233,23 +233,23 @@ macro CPP_PROTO_PLUGIN0(NAME, TOOL, DEPS[]) { } # tag:proto tag:cpp-specific -### @usage: CPP_PROTO_PLUGIN(Name Tool Suf DEPS <Dependencies>) +### @usage: CPP_PROTO_PLUGIN(Name Tool Suf [DEPS <Dependencies>] [EXTRA_OUT_FLAG <ExtraOutFlag>]) ### ### Define protoc plugin for C++ with given Name that emits code into 1 extra output ### using Tool. Extra dependencies are passed via DEPS. -macro CPP_PROTO_PLUGIN(NAME, TOOL, SUF, DEPS[]) { - CPP_PROTO_PLUGIN0($NAME $TOOL DEPS $DEPS) +macro CPP_PROTO_PLUGIN(NAME, TOOL, SUF, DEPS[], EXTRA_OUT_FLAG="") { + CPP_PROTO_PLUGIN0($NAME $TOOL DEPS $DEPS ${pre=EXTRA_OUT_FLAG :EXTRA_OUT_FLAG}) _ADD_CPP_PROTO_OUT($SUF) } # tag:proto tag:cpp-specific -### @usage: CPP_PROTO_PLUGIN2(Name Tool Suf1 Suf2 DEPS <Dependencies>) +### @usage: CPP_PROTO_PLUGIN2(Name Tool Suf1 Suf2 [DEPS <Dependencies>] [EXTRA_OUT_FLAG <ExtraOutFlag>]) ### ### Define protoc plugin for C++ with given Name that emits code into 2 extra outputs ### using Tool. Extra dependencies are passed via DEPS. -macro CPP_PROTO_PLUGIN2(NAME, TOOL, SUF1, SUF2, DEPS[]) { - CPP_PROTO_PLUGIN($NAME $TOOL $SUF1 DEPS $DEPS) +macro CPP_PROTO_PLUGIN2(NAME, TOOL, SUF1, SUF2, DEPS[], EXTRA_OUT_FLAG="") { + CPP_PROTO_PLUGIN($NAME $TOOL $SUF1 DEPS $DEPS ${pre=EXTRA_OUT_FLAG :EXTRA_OUT_FLAG}) _ADD_CPP_PROTO_OUT($SUF2) SET_APPEND(CPP_PROTO_OUTS_SEM \${output;hide;norel;nopath;noext;suf=$SUF2:File}) @@ -535,6 +535,8 @@ macro _JAVA_EVLOG_CMD(File) { # tag:proto tag:grpc _GRPC_ENABLED=no +_GRPC_SUF_CC=.grpc.pb.cc +_GRPC_SUF_H=.grpc.pb.h # tag:proto tag:grpc ### @usage: GRPC() @@ -545,7 +547,7 @@ macro GRPC() { ENABLE(_GRPC_ENABLED) # C++ - CPP_PROTO_PLUGIN2(grpc_cpp contrib/tools/protoc/plugins/grpc_cpp .grpc.pb.cc .grpc.pb.h DEPS contrib/libs/grpc) + CPP_PROTO_PLUGIN2(grpc_cpp contrib/tools/protoc/plugins/grpc_cpp $_GRPC_SUF_CC $_GRPC_SUF_H DEPS contrib/libs/grpc $_GRPC_GMOCK_OUTFLAG) # Python PY_PROTO_PLUGIN(grpc_py _pb2_grpc.py contrib/tools/protoc/plugins/grpc_python DEPS contrib/python/grpcio) @@ -555,6 +557,20 @@ macro GRPC() { SET_APPEND(JAVA_PROTOBUF_PEERS contrib/java/javax/annotation/javax.annotation-api/1.3.1) } +# tag:proto tag:grpc +_GRPC_GMOCK_OUTFLAG= + +# tag:proto tag:grpc +### @usage: WITH_GMOCK() +### +### Enable generating *_mock.grpc.pb.cc/h files +macro GRPC_WITH_GMOCK() { + SET(_GRPC_GMOCK_OUTFLAG EXTRA_OUT_FLAG generate_mock_code=true) + GRPC() + _ADD_CPP_PROTO_OUT(_mock$_GRPC_SUF_H) + SET_APPEND(CPP_PROTO_OUTS_SEM ${output;hide;norel;nopath;noext;suf=_mock$_GRPC_SUF_H:File}) +} + macro GO_PROTO_USE_V2() { ENABLE(GO_PROTO_V2) } diff --git a/build/conf/ts/ts_test.conf b/build/conf/ts/ts_test.conf index a940cafa66..e9dcd799b8 100644 --- a/build/conf/ts/ts_test.conf +++ b/build/conf/ts/ts_test.conf @@ -146,7 +146,7 @@ macro _SETUP_EXTRACT_OUTPUT_TARS_RECIPE(FOR_PATH) { } macro _SETUP_INSTALL_NODE_MODULES_RECIPE() { - USE_RECIPE(devtools/frontend_build_platform/nots/recipes/install_node_modules/recipe $NOTS_TOOL_BASE_ARGS) + USE_RECIPE(devtools/frontend_build_platform/nots/recipes/install_node_modules/recipe $NOTS_TOOL_BASE_ARGS --bundle no) } diff --git a/build/export_generators/gradle/generator.toml b/build/export_generators/gradle/generator.toml index ada3193233..fe8832ad94 100644 --- a/build/export_generators/gradle/generator.toml +++ b/build/export_generators/gradle/generator.toml @@ -1,3 +1,5 @@ +ignore_platforms = true + [root] template="settings.gradle.kts.jinja" copy=[ diff --git a/build/export_generators/ide-gradle/generator.toml b/build/export_generators/ide-gradle/generator.toml index ce6125e8a4..dc9b2b4ae1 100644 --- a/build/export_generators/ide-gradle/generator.toml +++ b/build/export_generators/ide-gradle/generator.toml @@ -1,4 +1,5 @@ use_managed_peers_closure = true +ignore_platforms = true [root] template="settings.gradle.kts.jinja" diff --git a/build/external_resources/yexport/resources.json b/build/external_resources/yexport/resources.json index 548dd4ada8..8335c54d64 100644 --- a/build/external_resources/yexport/resources.json +++ b/build/external_resources/yexport/resources.json @@ -1,13 +1,13 @@ { "by_platform": { "darwin": { - "uri": "sbr:6229343240" + "uri": "sbr:6264087179" }, "darwin-arm64": { - "uri": "sbr:6229342354" + "uri": "sbr:6264086927" }, "linux": { - "uri": "sbr:6229341588" + "uri": "sbr:6264086715" } } } diff --git a/build/mapping.conf.json b/build/mapping.conf.json index 7542bbed69..692b3325de 100644 --- a/build/mapping.conf.json +++ b/build/mapping.conf.json @@ -82,26 +82,31 @@ "4312063561": "https://devtools-registry.s3.yandex.net/4312063561", "6140209067": "https://devtools-registry.s3.yandex.net/6140209067", "6033368058": "https://devtools-registry.s3.yandex.net/6033368058", + "6253061593": "https://devtools-registry.s3.yandex.net/6253061593", "6156880073": "https://devtools-registry.s3.yandex.net/6156880073", "6016439034": "https://devtools-registry.s3.yandex.net/6016439034", "6023726156": "https://devtools-registry.s3.yandex.net/6023726156", "6139882607": "https://devtools-registry.s3.yandex.net/6139882607", "6033369023": "https://devtools-registry.s3.yandex.net/6033369023", + "6253043093": "https://devtools-registry.s3.yandex.net/6253043093", "6156858657": "https://devtools-registry.s3.yandex.net/6156858657", "6016474886": "https://devtools-registry.s3.yandex.net/6016474886", "6023744448": "https://devtools-registry.s3.yandex.net/6023744448", "6139820676": "https://devtools-registry.s3.yandex.net/6139820676", "6033489391": "https://devtools-registry.s3.yandex.net/6033489391", + "6253038550": "https://devtools-registry.s3.yandex.net/6253038550", "6156772751": "https://devtools-registry.s3.yandex.net/6156772751", "6016673656": "https://devtools-registry.s3.yandex.net/6016673656", "6023846084": "https://devtools-registry.s3.yandex.net/6023846084", "6139782997": "https://devtools-registry.s3.yandex.net/6139782997", "6033465229": "https://devtools-registry.s3.yandex.net/6033465229", + "6253038923": "https://devtools-registry.s3.yandex.net/6253038923", "6156782090": "https://devtools-registry.s3.yandex.net/6156782090", "6016864019": "https://devtools-registry.s3.yandex.net/6016864019", "6023877997": "https://devtools-registry.s3.yandex.net/6023877997", "6139792533": "https://devtools-registry.s3.yandex.net/6139792533", "6033421763": "https://devtools-registry.s3.yandex.net/6033421763", + "6253044822": "https://devtools-registry.s3.yandex.net/6253044822", "6156841007": "https://devtools-registry.s3.yandex.net/6156841007", "6017210355": "https://devtools-registry.s3.yandex.net/6017210355", "6024131244": "https://devtools-registry.s3.yandex.net/6024131244", @@ -198,6 +203,10 @@ "6101888639": "https://devtools-registry.s3.yandex.net/6101888639", "6178087411": "https://devtools-registry.s3.yandex.net/6178087411", "6178098368": "https://devtools-registry.s3.yandex.net/6178098368", + "6258202406": "https://devtools-registry.s3.yandex.net/6258202406", + "6258209816": "https://devtools-registry.s3.yandex.net/6258209816", + "6277088417": "https://devtools-registry.s3.yandex.net/6277088417", + "6277093604": "https://devtools-registry.s3.yandex.net/6277093604", "5486731632": "https://devtools-registry.s3.yandex.net/5486731632", "5514350352": "https://devtools-registry.s3.yandex.net/5514350352", "5514360398": "https://devtools-registry.s3.yandex.net/5514360398", @@ -254,6 +263,7 @@ "6090207712": "https://devtools-registry.s3.yandex.net/6090207712", "6222517102": "https://devtools-registry.s3.yandex.net/6222517102", "6229387247": "https://devtools-registry.s3.yandex.net/6229387247", + "6264098017": "https://devtools-registry.s3.yandex.net/6264098017", "5811823398": "https://devtools-registry.s3.yandex.net/5811823398", "5840611310": "https://devtools-registry.s3.yandex.net/5840611310", "5860185593": "https://devtools-registry.s3.yandex.net/5860185593", @@ -263,6 +273,7 @@ "6090207496": "https://devtools-registry.s3.yandex.net/6090207496", "6222515843": "https://devtools-registry.s3.yandex.net/6222515843", "6229385673": "https://devtools-registry.s3.yandex.net/6229385673", + "6264097881": "https://devtools-registry.s3.yandex.net/6264097881", "5811822876": "https://devtools-registry.s3.yandex.net/5811822876", "5840610640": "https://devtools-registry.s3.yandex.net/5840610640", "5860184285": "https://devtools-registry.s3.yandex.net/5860184285", @@ -272,6 +283,7 @@ "6090206998": "https://devtools-registry.s3.yandex.net/6090206998", "6222514531": "https://devtools-registry.s3.yandex.net/6222514531", "6229383678": "https://devtools-registry.s3.yandex.net/6229383678", + "6264097662": "https://devtools-registry.s3.yandex.net/6264097662", "5766172292": "https://devtools-registry.s3.yandex.net/5766172292", "5805431504": "https://devtools-registry.s3.yandex.net/5805431504", "5829027626": "https://devtools-registry.s3.yandex.net/5829027626", @@ -548,26 +560,31 @@ "4312063561": "black_linter for linux-aarch64", "6140209067": "clang-16-darwin-arm64-29085bdbacf3a977f3f7e0e53f553dd1445da84f", "6033368058": "clang-16-darwin-arm64-4a1002ac4598237a2d1439e314fbecda678cbb8e", + "6253061593": "clang-16-darwin-arm64-eb0f39cda82ea24f77858ef4f0d91f6d1a134cf6", "6156880073": "clang-16-darwin-arm64-eebb503c0378c36b4f84227cccb224d1bb2a79ad", "6016439034": "clang-16-darwin-arm64-f116dc6707c5baf24345777e6c4730785eff4535", "6023726156": "clang-16-darwin-arm64-f116dc6707c5baf24345777e6c4730785eff4535", "6139882607": "clang-16-darwin-x86_64-29085bdbacf3a977f3f7e0e53f553dd1445da84f", "6033369023": "clang-16-darwin-x86_64-4a1002ac4598237a2d1439e314fbecda678cbb8e", + "6253043093": "clang-16-darwin-x86_64-eb0f39cda82ea24f77858ef4f0d91f6d1a134cf6", "6156858657": "clang-16-darwin-x86_64-eebb503c0378c36b4f84227cccb224d1bb2a79ad", "6016474886": "clang-16-darwin-x86_64-f116dc6707c5baf24345777e6c4730785eff4535", "6023744448": "clang-16-darwin-x86_64-f116dc6707c5baf24345777e6c4730785eff4535", "6139820676": "clang-16-linux-aarch64-29085bdbacf3a977f3f7e0e53f553dd1445da84f", "6033489391": "clang-16-linux-aarch64-4a1002ac4598237a2d1439e314fbecda678cbb8e", + "6253038550": "clang-16-linux-aarch64-eb0f39cda82ea24f77858ef4f0d91f6d1a134cf6", "6156772751": "clang-16-linux-aarch64-eebb503c0378c36b4f84227cccb224d1bb2a79ad", "6016673656": "clang-16-linux-aarch64-f116dc6707c5baf24345777e6c4730785eff4535", "6023846084": "clang-16-linux-aarch64-f116dc6707c5baf24345777e6c4730785eff4535", "6139782997": "clang-16-linux-x86_64-29085bdbacf3a977f3f7e0e53f553dd1445da84f", "6033465229": "clang-16-linux-x86_64-4a1002ac4598237a2d1439e314fbecda678cbb8e", + "6253038923": "clang-16-linux-x86_64-eb0f39cda82ea24f77858ef4f0d91f6d1a134cf6", "6156782090": "clang-16-linux-x86_64-eebb503c0378c36b4f84227cccb224d1bb2a79ad", "6016864019": "clang-16-linux-x86_64-f116dc6707c5baf24345777e6c4730785eff4535", "6023877997": "clang-16-linux-x86_64-f116dc6707c5baf24345777e6c4730785eff4535", "6139792533": "clang-16-mingw-w64-x86_64-29085bdbacf3a977f3f7e0e53f553dd1445da84f", "6033421763": "clang-16-mingw-w64-x86_64-4a1002ac4598237a2d1439e314fbecda678cbb8e", + "6253044822": "clang-16-mingw-w64-x86_64-eb0f39cda82ea24f77858ef4f0d91f6d1a134cf6", "6156841007": "clang-16-mingw-w64-x86_64-eebb503c0378c36b4f84227cccb224d1bb2a79ad", "6017210355": "clang-16-mingw-w64-x86_64-f116dc6707c5baf24345777e6c4730785eff4535", "6024131244": "clang-16-mingw-w64-x86_64-f116dc6707c5baf24345777e6c4730785eff4535", @@ -664,6 +681,10 @@ "6101888639": "devtools/ya/test/programs/test_tool/bin/test_tool for linux", "6178087411": "devtools/ya/test/programs/test_tool/bin/test_tool for linux", "6178098368": "devtools/ya/test/programs/test_tool/bin/test_tool for linux", + "6258202406": "devtools/ya/test/programs/test_tool/bin/test_tool for linux", + "6258209816": "devtools/ya/test/programs/test_tool/bin/test_tool for linux", + "6277088417": "devtools/ya/test/programs/test_tool/bin/test_tool for linux", + "6277093604": "devtools/ya/test/programs/test_tool/bin/test_tool for linux", "5486731632": "devtools/ya/test/programs/test_tool/bin3/test_tool3 for linux", "5514350352": "devtools/ya/test/programs/test_tool/bin3/test_tool3 for linux", "5514360398": "devtools/ya/test/programs/test_tool/bin3/test_tool3 for linux", @@ -720,6 +741,7 @@ "6090207712": "devtools/yexport/bin/yexport for darwin", "6222517102": "devtools/yexport/bin/yexport for darwin", "6229387247": "devtools/yexport/bin/yexport for darwin", + "6264098017": "devtools/yexport/bin/yexport for darwin", "5811823398": "devtools/yexport/bin/yexport for darwin-arm64", "5840611310": "devtools/yexport/bin/yexport for darwin-arm64", "5860185593": "devtools/yexport/bin/yexport for darwin-arm64", @@ -729,6 +751,7 @@ "6090207496": "devtools/yexport/bin/yexport for darwin-arm64", "6222515843": "devtools/yexport/bin/yexport for darwin-arm64", "6229385673": "devtools/yexport/bin/yexport for darwin-arm64", + "6264097881": "devtools/yexport/bin/yexport for darwin-arm64", "5811822876": "devtools/yexport/bin/yexport for linux", "5840610640": "devtools/yexport/bin/yexport for linux", "5860184285": "devtools/yexport/bin/yexport for linux", @@ -738,6 +761,7 @@ "6090206998": "devtools/yexport/bin/yexport for linux", "6222514531": "devtools/yexport/bin/yexport for linux", "6229383678": "devtools/yexport/bin/yexport for linux", + "6264097662": "devtools/yexport/bin/yexport for linux", "5766172292": "devtools/ymake/bin/ymake for darwin", "5805431504": "devtools/ymake/bin/ymake for darwin", "5829027626": "devtools/ymake/bin/ymake for darwin", diff --git a/build/platform/clang/clang16.json b/build/platform/clang/clang16.json index 3415156e91..93ffdaaed7 100644 --- a/build/platform/clang/clang16.json +++ b/build/platform/clang/clang16.json @@ -1,19 +1,19 @@ { "by_platform": { "darwin-arm64": { - "uri": "sbr:6156880073" + "uri": "sbr:6253061593" }, "darwin-x86_64": { - "uri": "sbr:6156858657" + "uri": "sbr:6253043093" }, "linux-aarch64": { - "uri": "sbr:6156772751" + "uri": "sbr:6253038550" }, "linux-x86_64": { - "uri": "sbr:6156782090" + "uri": "sbr:6253038923" }, "win32-x86_64": { - "uri": "sbr:6156841007" + "uri": "sbr:6253044822" } } } diff --git a/build/platform/test_tool/host.ya.make.inc b/build/platform/test_tool/host.ya.make.inc index fbf208b66b..b0040d1f10 100644 --- a/build/platform/test_tool/host.ya.make.inc +++ b/build/platform/test_tool/host.ya.make.inc @@ -1,12 +1,12 @@ IF (HOST_OS_DARWIN AND HOST_ARCH_X86_64) - DECLARE_EXTERNAL_RESOURCE(TEST_TOOL_HOST sbr:6178086204) + DECLARE_EXTERNAL_RESOURCE(TEST_TOOL_HOST sbr:6277087625) ELSEIF (HOST_OS_DARWIN AND HOST_ARCH_ARM64) - DECLARE_EXTERNAL_RESOURCE(TEST_TOOL_HOST sbr:6178085688) + DECLARE_EXTERNAL_RESOURCE(TEST_TOOL_HOST sbr:6277087248) ELSEIF (HOST_OS_LINUX AND HOST_ARCH_X86_64) - DECLARE_EXTERNAL_RESOURCE(TEST_TOOL_HOST sbr:6178087411) + DECLARE_EXTERNAL_RESOURCE(TEST_TOOL_HOST sbr:6277088417) ELSEIF (HOST_OS_LINUX AND HOST_ARCH_AARCH64) - DECLARE_EXTERNAL_RESOURCE(TEST_TOOL_HOST sbr:6178084953) + DECLARE_EXTERNAL_RESOURCE(TEST_TOOL_HOST sbr:6277086632) ELSEIF (HOST_OS_WINDOWS AND HOST_ARCH_X86_64) - DECLARE_EXTERNAL_RESOURCE(TEST_TOOL_HOST sbr:6178086753) + DECLARE_EXTERNAL_RESOURCE(TEST_TOOL_HOST sbr:6277087917) ENDIF() diff --git a/build/platform/test_tool/host_os.ya.make.inc b/build/platform/test_tool/host_os.ya.make.inc index 58078b1f70..413e8800e7 100644 --- a/build/platform/test_tool/host_os.ya.make.inc +++ b/build/platform/test_tool/host_os.ya.make.inc @@ -1,12 +1,12 @@ IF (HOST_OS_DARWIN AND HOST_ARCH_X86_64) - DECLARE_EXTERNAL_RESOURCE(TEST_TOOL_HOST sbr:6178096241) + DECLARE_EXTERNAL_RESOURCE(TEST_TOOL_HOST sbr:6277093253) ELSEIF (HOST_OS_DARWIN AND HOST_ARCH_ARM64) - DECLARE_EXTERNAL_RESOURCE(TEST_TOOL_HOST sbr:6178095381) + DECLARE_EXTERNAL_RESOURCE(TEST_TOOL_HOST sbr:6277093131) ELSEIF (HOST_OS_LINUX AND HOST_ARCH_X86_64) - DECLARE_EXTERNAL_RESOURCE(TEST_TOOL_HOST sbr:6178098368) + DECLARE_EXTERNAL_RESOURCE(TEST_TOOL_HOST sbr:6277093604) ELSEIF (HOST_OS_LINUX AND HOST_ARCH_AARCH64) - DECLARE_EXTERNAL_RESOURCE(TEST_TOOL_HOST sbr:6178093908) + DECLARE_EXTERNAL_RESOURCE(TEST_TOOL_HOST sbr:6277092874) ELSEIF (HOST_OS_WINDOWS AND HOST_ARCH_X86_64) - DECLARE_EXTERNAL_RESOURCE(TEST_TOOL_HOST sbr:6178097157) + DECLARE_EXTERNAL_RESOURCE(TEST_TOOL_HOST sbr:6277093495) ENDIF() diff --git a/build/plugins/lib/nots/package_manager/pnpm/package_manager.py b/build/plugins/lib/nots/package_manager/pnpm/package_manager.py index 4a42093fff..da70be303f 100644 --- a/build/plugins/lib/nots/package_manager/pnpm/package_manager.py +++ b/build/plugins/lib/nots/package_manager/pnpm/package_manager.py @@ -37,7 +37,7 @@ class PnpmPackageManager(BasePackageManager): def get_local_pnpm_store(): return os.path.join(home_dir(), ".cache", "pnpm-store") - def create_node_modules(self, yatool_prebuilder_path=None, local_cli=False): + def create_node_modules(self, yatool_prebuilder_path=None, local_cli=False, bundle=True): """ Creates node_modules directory according to the lockfile. """ @@ -77,7 +77,7 @@ class PnpmPackageManager(BasePackageManager): self._run_apply_addons_if_need(yatool_prebuilder_path, virtual_store_dir) self._replace_internal_lockfile_with_original(virtual_store_dir) - if not local_cli: + if not local_cli and bundle: bundle_node_modules( build_root=self.build_root, node_modules_path=self._nm_path(), diff --git a/build/plugins/nots.py b/build/plugins/nots.py index b69b65d215..9a95643ba0 100644 --- a/build/plugins/nots.py +++ b/build/plugins/nots.py @@ -373,11 +373,12 @@ def _setup_eslint(unit): if not lint_files: return + mod_dir = unit.get("MODDIR") + unit.on_peerdir_ts_resource("eslint") user_recipes = unit.get("TEST_RECIPES_VALUE") - unit.on_setup_extract_node_modules_recipe(unit.get("MODDIR")) + unit.on_setup_install_node_modules_recipe() - mod_dir = unit.get("MODDIR") lint_files = _resolve_module_files(unit, mod_dir, lint_files) deps = _create_pm(unit).get_peers_from_package_json() test_record = { @@ -385,7 +386,7 @@ def _setup_eslint(unit): "LINT-FILE-PROCESSING-TIME": str(ESLINT_FILE_PROCESSING_TIME_DEFAULT), } - _add_test(unit, "eslint", lint_files, deps, test_record, mod_dir) + _add_test(unit, "eslint.new", lint_files, deps, test_record, mod_dir) unit.set(["TEST_RECIPES_VALUE", user_recipes]) @@ -461,7 +462,7 @@ def _add_test(unit, test_type, test_files, deps=None, test_record=None, test_cwd # Key to discover suite (see devtools/ya/test/explore/__init__.py#gen_suite) "SCRIPT-REL-PATH": test_type, # Test name as shown in PR check, should be unique inside one module - "TEST-NAME": test_type.lower(), + "TEST-NAME": test_type.lower().replace(".new", ""), "TEST-TIMEOUT": unit.get("TEST_TIMEOUT") or "", "TEST-ENV": ytest.prepare_env(unit.get("TEST_ENV_VALUE")), "TESTED-PROJECT-NAME": os.path.splitext(unit.filename())[0], diff --git a/build/sysincl/darwin.yml b/build/sysincl/darwin.yml index 1891a8f0a3..d751da1357 100644 --- a/build/sysincl/darwin.yml +++ b/build/sysincl/darwin.yml @@ -190,6 +190,7 @@ - Carbon/Carbon.h - CFNetwork/CFNetwork.h - Cocoa/Cocoa.h + - CoreBluetooth/CoreBluetooth.h - CoreData/CoreData.h - CoreFoundation/CFArray.h - CoreFoundation/CFBase.h diff --git a/build/sysincl/misc.yml b/build/sysincl/misc.yml index 977bd92d5e..66261fdcca 100644 --- a/build/sysincl/misc.yml +++ b/build/sysincl/misc.yml @@ -390,13 +390,6 @@ - lwip/stats.h - lwip/sys.h - lwip/tcpip.h - # contrib/libs/connectedhomeip/src/crypto uses boringssl on OS_DARWIN - - openssl/aead.h: - - contrib/libs/connectedhomeip/third_party/boringssl/repo/src/include/openssl/aead.h - - openssl/base.h: - - contrib/libs/connectedhomeip/third_party/boringssl/repo/src/include/openssl/base.h - - openssl/is_boringssl.h: - - contrib/libs/connectedhomeip/third_party/boringssl/repo/src/include/openssl/is_boringssl.h # contrib/libs/connectedhomeip: src/lib/support, src/inet, src/system on OS_DARWIN - nlfaultinjection.hpp: - contrib/libs/connectedhomeip/third_party/nlfaultinjection/include/nlfaultinjection.hpp diff --git a/build/ymake.core.conf b/build/ymake.core.conf index 1e400f0baf..7394c4cd60 100644 --- a/build/ymake.core.conf +++ b/build/ymake.core.conf @@ -5647,7 +5647,7 @@ when ($CUDA11) { } when ($CUDA12) { - CUDA_VERSION=12.1 + CUDA_VERSION=12.2 CUDNN_VERSION=8.6.0 TENSORRT_VERSION=8 } diff --git a/contrib/libs/clang14-rt/lib/asan-preinit/ya.make b/contrib/libs/clang14-rt/lib/asan-preinit/ya.make index d02bec9068..82b0641c48 100644 --- a/contrib/libs/clang14-rt/lib/asan-preinit/ya.make +++ b/contrib/libs/clang14-rt/lib/asan-preinit/ya.make @@ -13,7 +13,7 @@ LICENSE( LICENSE_TEXTS(.yandex_meta/licenses.list.txt) -OWNER(g:cpp-contrib) +SUBSCRIBER(g:cpp-contrib) ADDINCL( contrib/libs/clang14-rt/lib diff --git a/contrib/libs/clang14-rt/lib/asan/ya.make b/contrib/libs/clang14-rt/lib/asan/ya.make index 7d0f9ee1e4..d4707f6765 100644 --- a/contrib/libs/clang14-rt/lib/asan/ya.make +++ b/contrib/libs/clang14-rt/lib/asan/ya.make @@ -13,7 +13,7 @@ LICENSE( LICENSE_TEXTS(.yandex_meta/licenses.list.txt) -OWNER(g:cpp-contrib) +SUBSCRIBER(g:cpp-contrib) ADDINCL( contrib/libs/clang14-rt/lib diff --git a/contrib/libs/clang14-rt/lib/asan_cxx/ya.make b/contrib/libs/clang14-rt/lib/asan_cxx/ya.make index c715c1e1aa..75e602bbea 100644 --- a/contrib/libs/clang14-rt/lib/asan_cxx/ya.make +++ b/contrib/libs/clang14-rt/lib/asan_cxx/ya.make @@ -13,7 +13,7 @@ LICENSE( LICENSE_TEXTS(.yandex_meta/licenses.list.txt) -OWNER(g:cpp-contrib) +SUBSCRIBER(g:cpp-contrib) ADDINCL( contrib/libs/clang14-rt/lib diff --git a/contrib/libs/clang14-rt/lib/asan_static/ya.make b/contrib/libs/clang14-rt/lib/asan_static/ya.make index 743f196b60..697b75ed13 100644 --- a/contrib/libs/clang14-rt/lib/asan_static/ya.make +++ b/contrib/libs/clang14-rt/lib/asan_static/ya.make @@ -13,7 +13,7 @@ LICENSE( LICENSE_TEXTS(.yandex_meta/licenses.list.txt) -OWNER(g:cpp-contrib) +SUBSCRIBER(g:cpp-contrib) ADDINCL( contrib/libs/clang14-rt/lib diff --git a/contrib/libs/clang14-rt/lib/cfi/ya.make b/contrib/libs/clang14-rt/lib/cfi/ya.make index 3cc8e0d3b2..687793128c 100644 --- a/contrib/libs/clang14-rt/lib/cfi/ya.make +++ b/contrib/libs/clang14-rt/lib/cfi/ya.make @@ -13,7 +13,7 @@ LICENSE( LICENSE_TEXTS(.yandex_meta/licenses.list.txt) -OWNER(g:cpp-contrib) +SUBSCRIBER(g:cpp-contrib) ADDINCL( contrib/libs/clang14-rt/lib diff --git a/contrib/libs/clang14-rt/lib/cfi_diag/ya.make b/contrib/libs/clang14-rt/lib/cfi_diag/ya.make index 7ae13b4631..56c084cdd7 100644 --- a/contrib/libs/clang14-rt/lib/cfi_diag/ya.make +++ b/contrib/libs/clang14-rt/lib/cfi_diag/ya.make @@ -13,7 +13,7 @@ LICENSE( LICENSE_TEXTS(.yandex_meta/licenses.list.txt) -OWNER(g:cpp-contrib) +SUBSCRIBER(g:cpp-contrib) ADDINCL( contrib/libs/clang14-rt/lib diff --git a/contrib/libs/clang14-rt/lib/dd/ya.make b/contrib/libs/clang14-rt/lib/dd/ya.make index c2805b7de3..0611d06315 100644 --- a/contrib/libs/clang14-rt/lib/dd/ya.make +++ b/contrib/libs/clang14-rt/lib/dd/ya.make @@ -13,7 +13,7 @@ LICENSE( LICENSE_TEXTS(.yandex_meta/licenses.list.txt) -OWNER(g:cpp-contrib) +SUBSCRIBER(g:cpp-contrib) ADDINCL( contrib/libs/clang14-rt/lib diff --git a/contrib/libs/clang14-rt/lib/dfsan/ya.make b/contrib/libs/clang14-rt/lib/dfsan/ya.make index 33ed989b25..7ff073fee0 100644 --- a/contrib/libs/clang14-rt/lib/dfsan/ya.make +++ b/contrib/libs/clang14-rt/lib/dfsan/ya.make @@ -13,7 +13,7 @@ LICENSE( LICENSE_TEXTS(.yandex_meta/licenses.list.txt) -OWNER(g:cpp-contrib) +SUBSCRIBER(g:cpp-contrib) ADDINCL( contrib/libs/clang14-rt/lib diff --git a/contrib/libs/clang14-rt/lib/gwp_asan/ya.make b/contrib/libs/clang14-rt/lib/gwp_asan/ya.make index 5ff679beae..774dd7d0d7 100644 --- a/contrib/libs/clang14-rt/lib/gwp_asan/ya.make +++ b/contrib/libs/clang14-rt/lib/gwp_asan/ya.make @@ -13,7 +13,7 @@ LICENSE( LICENSE_TEXTS(.yandex_meta/licenses.list.txt) -OWNER(g:cpp-contrib) +SUBSCRIBER(g:cpp-contrib) ADDINCL( contrib/libs/clang14-rt/lib diff --git a/contrib/libs/clang14-rt/lib/hwasan/ya.make b/contrib/libs/clang14-rt/lib/hwasan/ya.make index 987f3977e4..fa72edfda5 100644 --- a/contrib/libs/clang14-rt/lib/hwasan/ya.make +++ b/contrib/libs/clang14-rt/lib/hwasan/ya.make @@ -13,7 +13,7 @@ LICENSE( LICENSE_TEXTS(.yandex_meta/licenses.list.txt) -OWNER(g:cpp-contrib) +SUBSCRIBER(g:cpp-contrib) ADDINCL( contrib/libs/clang14-rt/lib diff --git a/contrib/libs/clang14-rt/lib/hwasan_aliases/ya.make b/contrib/libs/clang14-rt/lib/hwasan_aliases/ya.make index cf1d31d199..8f54b752f6 100644 --- a/contrib/libs/clang14-rt/lib/hwasan_aliases/ya.make +++ b/contrib/libs/clang14-rt/lib/hwasan_aliases/ya.make @@ -13,7 +13,7 @@ LICENSE( LICENSE_TEXTS(.yandex_meta/licenses.list.txt) -OWNER(g:cpp-contrib) +SUBSCRIBER(g:cpp-contrib) ADDINCL( contrib/libs/clang14-rt/lib diff --git a/contrib/libs/clang14-rt/lib/hwasan_aliases_cxx/ya.make b/contrib/libs/clang14-rt/lib/hwasan_aliases_cxx/ya.make index ab6917e49d..44e92c0a7e 100644 --- a/contrib/libs/clang14-rt/lib/hwasan_aliases_cxx/ya.make +++ b/contrib/libs/clang14-rt/lib/hwasan_aliases_cxx/ya.make @@ -13,7 +13,7 @@ LICENSE( LICENSE_TEXTS(.yandex_meta/licenses.list.txt) -OWNER(g:cpp-contrib) +SUBSCRIBER(g:cpp-contrib) ADDINCL( contrib/libs/clang14-rt/lib diff --git a/contrib/libs/clang14-rt/lib/hwasan_cxx/ya.make b/contrib/libs/clang14-rt/lib/hwasan_cxx/ya.make index 20fb2e2352..27364578ef 100644 --- a/contrib/libs/clang14-rt/lib/hwasan_cxx/ya.make +++ b/contrib/libs/clang14-rt/lib/hwasan_cxx/ya.make @@ -13,7 +13,7 @@ LICENSE( LICENSE_TEXTS(.yandex_meta/licenses.list.txt) -OWNER(g:cpp-contrib) +SUBSCRIBER(g:cpp-contrib) ADDINCL( contrib/libs/clang14-rt/lib diff --git a/contrib/libs/clang14-rt/lib/lsan/ya.make b/contrib/libs/clang14-rt/lib/lsan/ya.make index 7d5531a6aa..682be3f307 100644 --- a/contrib/libs/clang14-rt/lib/lsan/ya.make +++ b/contrib/libs/clang14-rt/lib/lsan/ya.make @@ -13,7 +13,7 @@ LICENSE( LICENSE_TEXTS(.yandex_meta/licenses.list.txt) -OWNER(g:cpp-contrib) +SUBSCRIBER(g:cpp-contrib) ADDINCL( contrib/libs/clang14-rt/lib diff --git a/contrib/libs/clang14-rt/lib/memprof-preinit/ya.make b/contrib/libs/clang14-rt/lib/memprof-preinit/ya.make index dc6446583c..da4a4d9a49 100644 --- a/contrib/libs/clang14-rt/lib/memprof-preinit/ya.make +++ b/contrib/libs/clang14-rt/lib/memprof-preinit/ya.make @@ -13,7 +13,7 @@ LICENSE( LICENSE_TEXTS(.yandex_meta/licenses.list.txt) -OWNER(g:cpp-contrib) +SUBSCRIBER(g:cpp-contrib) ADDINCL( contrib/libs/clang14-rt/lib diff --git a/contrib/libs/clang14-rt/lib/memprof/ya.make b/contrib/libs/clang14-rt/lib/memprof/ya.make index 694d0356b4..d3e5445934 100644 --- a/contrib/libs/clang14-rt/lib/memprof/ya.make +++ b/contrib/libs/clang14-rt/lib/memprof/ya.make @@ -13,7 +13,7 @@ LICENSE( LICENSE_TEXTS(.yandex_meta/licenses.list.txt) -OWNER(g:cpp-contrib) +SUBSCRIBER(g:cpp-contrib) ADDINCL( contrib/libs/clang14-rt/include diff --git a/contrib/libs/clang14-rt/lib/memprof_cxx/ya.make b/contrib/libs/clang14-rt/lib/memprof_cxx/ya.make index 953218f275..665e1794fa 100644 --- a/contrib/libs/clang14-rt/lib/memprof_cxx/ya.make +++ b/contrib/libs/clang14-rt/lib/memprof_cxx/ya.make @@ -13,7 +13,7 @@ LICENSE( LICENSE_TEXTS(.yandex_meta/licenses.list.txt) -OWNER(g:cpp-contrib) +SUBSCRIBER(g:cpp-contrib) ADDINCL( contrib/libs/clang14-rt/lib diff --git a/contrib/libs/clang14-rt/lib/msan/ya.make b/contrib/libs/clang14-rt/lib/msan/ya.make index 9b0f0fdf2e..addedc967f 100644 --- a/contrib/libs/clang14-rt/lib/msan/ya.make +++ b/contrib/libs/clang14-rt/lib/msan/ya.make @@ -13,7 +13,7 @@ LICENSE( LICENSE_TEXTS(.yandex_meta/licenses.list.txt) -OWNER(g:cpp-contrib) +SUBSCRIBER(g:cpp-contrib) ADDINCL( contrib/libs/clang14-rt/lib diff --git a/contrib/libs/clang14-rt/lib/msan_cxx/ya.make b/contrib/libs/clang14-rt/lib/msan_cxx/ya.make index 08970f4998..783b7c903f 100644 --- a/contrib/libs/clang14-rt/lib/msan_cxx/ya.make +++ b/contrib/libs/clang14-rt/lib/msan_cxx/ya.make @@ -13,7 +13,7 @@ LICENSE( LICENSE_TEXTS(.yandex_meta/licenses.list.txt) -OWNER(g:cpp-contrib) +SUBSCRIBER(g:cpp-contrib) ADDINCL( contrib/libs/clang14-rt/lib diff --git a/contrib/libs/clang14-rt/lib/profile/ya.make b/contrib/libs/clang14-rt/lib/profile/ya.make index 0d4ccff51f..b5c81458f7 100644 --- a/contrib/libs/clang14-rt/lib/profile/ya.make +++ b/contrib/libs/clang14-rt/lib/profile/ya.make @@ -13,7 +13,7 @@ LICENSE( LICENSE_TEXTS(.yandex_meta/licenses.list.txt) -OWNER(g:cpp-contrib) +SUBSCRIBER(g:cpp-contrib) ADDINCL( contrib/libs/clang14-rt/include diff --git a/contrib/libs/clang14-rt/lib/safestack/ya.make b/contrib/libs/clang14-rt/lib/safestack/ya.make index 2518bd9b4f..4743e006b3 100644 --- a/contrib/libs/clang14-rt/lib/safestack/ya.make +++ b/contrib/libs/clang14-rt/lib/safestack/ya.make @@ -13,7 +13,7 @@ LICENSE( LICENSE_TEXTS(.yandex_meta/licenses.list.txt) -OWNER(g:cpp-contrib) +SUBSCRIBER(g:cpp-contrib) ADDINCL( contrib/libs/clang14-rt/lib diff --git a/contrib/libs/clang14-rt/lib/scudo/ya.make b/contrib/libs/clang14-rt/lib/scudo/ya.make index 8e03ffd48d..226c909441 100644 --- a/contrib/libs/clang14-rt/lib/scudo/ya.make +++ b/contrib/libs/clang14-rt/lib/scudo/ya.make @@ -13,7 +13,7 @@ LICENSE( LICENSE_TEXTS(.yandex_meta/licenses.list.txt) -OWNER(g:cpp-contrib) +SUBSCRIBER(g:cpp-contrib) ADDINCL( contrib/libs/clang14-rt/lib diff --git a/contrib/libs/clang14-rt/lib/scudo_cxx/ya.make b/contrib/libs/clang14-rt/lib/scudo_cxx/ya.make index 756749431f..9dbd4acb76 100644 --- a/contrib/libs/clang14-rt/lib/scudo_cxx/ya.make +++ b/contrib/libs/clang14-rt/lib/scudo_cxx/ya.make @@ -13,7 +13,7 @@ LICENSE( LICENSE_TEXTS(.yandex_meta/licenses.list.txt) -OWNER(g:cpp-contrib) +SUBSCRIBER(g:cpp-contrib) ADDINCL( contrib/libs/clang14-rt/lib diff --git a/contrib/libs/clang14-rt/lib/scudo_cxx_minimal/ya.make b/contrib/libs/clang14-rt/lib/scudo_cxx_minimal/ya.make index 553e170548..60190f8f6f 100644 --- a/contrib/libs/clang14-rt/lib/scudo_cxx_minimal/ya.make +++ b/contrib/libs/clang14-rt/lib/scudo_cxx_minimal/ya.make @@ -13,7 +13,7 @@ LICENSE( LICENSE_TEXTS(.yandex_meta/licenses.list.txt) -OWNER(g:cpp-contrib) +SUBSCRIBER(g:cpp-contrib) ADDINCL( contrib/libs/clang14-rt/lib diff --git a/contrib/libs/clang14-rt/lib/scudo_minimal/ya.make b/contrib/libs/clang14-rt/lib/scudo_minimal/ya.make index 37deb4cc51..dda3b7d8af 100644 --- a/contrib/libs/clang14-rt/lib/scudo_minimal/ya.make +++ b/contrib/libs/clang14-rt/lib/scudo_minimal/ya.make @@ -13,7 +13,7 @@ LICENSE( LICENSE_TEXTS(.yandex_meta/licenses.list.txt) -OWNER(g:cpp-contrib) +SUBSCRIBER(g:cpp-contrib) ADDINCL( contrib/libs/clang14-rt/lib diff --git a/contrib/libs/clang14-rt/lib/scudo_standalone/ya.make b/contrib/libs/clang14-rt/lib/scudo_standalone/ya.make index d60ec691ff..843a531795 100644 --- a/contrib/libs/clang14-rt/lib/scudo_standalone/ya.make +++ b/contrib/libs/clang14-rt/lib/scudo_standalone/ya.make @@ -13,7 +13,7 @@ LICENSE( LICENSE_TEXTS(.yandex_meta/licenses.list.txt) -OWNER(g:cpp-contrib) +SUBSCRIBER(g:cpp-contrib) ADDINCL( contrib/libs/clang14-rt/lib diff --git a/contrib/libs/clang14-rt/lib/scudo_standalone_cxx/ya.make b/contrib/libs/clang14-rt/lib/scudo_standalone_cxx/ya.make index b76eab5c9d..eacb62c325 100644 --- a/contrib/libs/clang14-rt/lib/scudo_standalone_cxx/ya.make +++ b/contrib/libs/clang14-rt/lib/scudo_standalone_cxx/ya.make @@ -13,7 +13,7 @@ LICENSE( LICENSE_TEXTS(.yandex_meta/licenses.list.txt) -OWNER(g:cpp-contrib) +SUBSCRIBER(g:cpp-contrib) ADDINCL( contrib/libs/clang14-rt/lib diff --git a/contrib/libs/clang14-rt/lib/stats/ya.make b/contrib/libs/clang14-rt/lib/stats/ya.make index f8b72a9070..915c8337dd 100644 --- a/contrib/libs/clang14-rt/lib/stats/ya.make +++ b/contrib/libs/clang14-rt/lib/stats/ya.make @@ -13,7 +13,7 @@ LICENSE( LICENSE_TEXTS(.yandex_meta/licenses.list.txt) -OWNER(g:cpp-contrib) +SUBSCRIBER(g:cpp-contrib) ADDINCL( contrib/libs/clang14-rt/lib diff --git a/contrib/libs/clang14-rt/lib/stats_client/ya.make b/contrib/libs/clang14-rt/lib/stats_client/ya.make index 7605e2c3fd..9c3bfdb015 100644 --- a/contrib/libs/clang14-rt/lib/stats_client/ya.make +++ b/contrib/libs/clang14-rt/lib/stats_client/ya.make @@ -13,7 +13,7 @@ LICENSE( LICENSE_TEXTS(.yandex_meta/licenses.list.txt) -OWNER(g:cpp-contrib) +SUBSCRIBER(g:cpp-contrib) ADDINCL( contrib/libs/clang14-rt/lib diff --git a/contrib/libs/clang14-rt/lib/tsan/ya.make b/contrib/libs/clang14-rt/lib/tsan/ya.make index 3a9931c85e..0fd75e8001 100644 --- a/contrib/libs/clang14-rt/lib/tsan/ya.make +++ b/contrib/libs/clang14-rt/lib/tsan/ya.make @@ -13,7 +13,7 @@ LICENSE( LICENSE_TEXTS(.yandex_meta/licenses.list.txt) -OWNER(g:cpp-contrib) +SUBSCRIBER(g:cpp-contrib) ADDINCL( contrib/libs/clang14-rt/lib diff --git a/contrib/libs/clang14-rt/lib/tsan_cxx/ya.make b/contrib/libs/clang14-rt/lib/tsan_cxx/ya.make index fd44d41513..15d62fed44 100644 --- a/contrib/libs/clang14-rt/lib/tsan_cxx/ya.make +++ b/contrib/libs/clang14-rt/lib/tsan_cxx/ya.make @@ -13,7 +13,7 @@ LICENSE( LICENSE_TEXTS(.yandex_meta/licenses.list.txt) -OWNER(g:cpp-contrib) +SUBSCRIBER(g:cpp-contrib) ADDINCL( contrib/libs/clang14-rt/lib diff --git a/contrib/libs/clang14-rt/lib/ubsan_minimal/ya.make b/contrib/libs/clang14-rt/lib/ubsan_minimal/ya.make index 98c2d1a57c..a57982eceb 100644 --- a/contrib/libs/clang14-rt/lib/ubsan_minimal/ya.make +++ b/contrib/libs/clang14-rt/lib/ubsan_minimal/ya.make @@ -13,7 +13,7 @@ LICENSE( LICENSE_TEXTS(.yandex_meta/licenses.list.txt) -OWNER(g:cpp-contrib) +SUBSCRIBER(g:cpp-contrib) ADDINCL( contrib/libs/clang14-rt/lib diff --git a/contrib/libs/clang14-rt/lib/ubsan_standalone/ya.make b/contrib/libs/clang14-rt/lib/ubsan_standalone/ya.make index 2a2c8e35bb..3380633668 100644 --- a/contrib/libs/clang14-rt/lib/ubsan_standalone/ya.make +++ b/contrib/libs/clang14-rt/lib/ubsan_standalone/ya.make @@ -13,7 +13,7 @@ LICENSE( LICENSE_TEXTS(.yandex_meta/licenses.list.txt) -OWNER(g:cpp-contrib) +SUBSCRIBER(g:cpp-contrib) ADDINCL( contrib/libs/clang14-rt/lib diff --git a/contrib/libs/clang14-rt/lib/ubsan_standalone_cxx/ya.make b/contrib/libs/clang14-rt/lib/ubsan_standalone_cxx/ya.make index 5552c2f11e..614b555e2c 100644 --- a/contrib/libs/clang14-rt/lib/ubsan_standalone_cxx/ya.make +++ b/contrib/libs/clang14-rt/lib/ubsan_standalone_cxx/ya.make @@ -13,7 +13,7 @@ LICENSE( LICENSE_TEXTS(.yandex_meta/licenses.list.txt) -OWNER(g:cpp-contrib) +SUBSCRIBER(g:cpp-contrib) ADDINCL( contrib/libs/clang14-rt/lib diff --git a/contrib/libs/clang14-rt/ya.make b/contrib/libs/clang14-rt/ya.make index 8d6a89db0c..fdbb03be4c 100644 --- a/contrib/libs/clang14-rt/ya.make +++ b/contrib/libs/clang14-rt/ya.make @@ -1,6 +1,6 @@ # Generated by devtools/yamaker from nixpkgs 22.05. -OWNER(g:cpp-contrib) +SUBSCRIBER(g:cpp-contrib) VERSION(14.0.6) diff --git a/contrib/libs/clang16-rt/lib/asan-preinit/ya.make b/contrib/libs/clang16-rt/lib/asan-preinit/ya.make index dda444f43a..4369dc213b 100644 --- a/contrib/libs/clang16-rt/lib/asan-preinit/ya.make +++ b/contrib/libs/clang16-rt/lib/asan-preinit/ya.make @@ -13,7 +13,7 @@ LICENSE( LICENSE_TEXTS(.yandex_meta/licenses.list.txt) -OWNER(g:cpp-contrib) +SUBSCRIBER(g:cpp-contrib) ADDINCL( contrib/libs/clang16-rt/lib diff --git a/contrib/libs/clang16-rt/lib/asan/ya.make b/contrib/libs/clang16-rt/lib/asan/ya.make index 03799ec0ef..0eae079df7 100644 --- a/contrib/libs/clang16-rt/lib/asan/ya.make +++ b/contrib/libs/clang16-rt/lib/asan/ya.make @@ -13,7 +13,7 @@ LICENSE( LICENSE_TEXTS(.yandex_meta/licenses.list.txt) -OWNER(g:cpp-contrib) +SUBSCRIBER(g:cpp-contrib) ADDINCL( contrib/libs/clang16-rt/lib diff --git a/contrib/libs/clang16-rt/lib/asan_cxx/ya.make b/contrib/libs/clang16-rt/lib/asan_cxx/ya.make index 8e5343b8c1..c5f735a70b 100644 --- a/contrib/libs/clang16-rt/lib/asan_cxx/ya.make +++ b/contrib/libs/clang16-rt/lib/asan_cxx/ya.make @@ -13,7 +13,7 @@ LICENSE( LICENSE_TEXTS(.yandex_meta/licenses.list.txt) -OWNER(g:cpp-contrib) +SUBSCRIBER(g:cpp-contrib) ADDINCL( contrib/libs/clang16-rt/lib diff --git a/contrib/libs/clang16-rt/lib/asan_static/ya.make b/contrib/libs/clang16-rt/lib/asan_static/ya.make index d837c5e884..3fd7cff6b5 100644 --- a/contrib/libs/clang16-rt/lib/asan_static/ya.make +++ b/contrib/libs/clang16-rt/lib/asan_static/ya.make @@ -13,7 +13,7 @@ LICENSE( LICENSE_TEXTS(.yandex_meta/licenses.list.txt) -OWNER(g:cpp-contrib) +SUBSCRIBER(g:cpp-contrib) ADDINCL( contrib/libs/clang16-rt/lib diff --git a/contrib/libs/clang16-rt/lib/cfi/ya.make b/contrib/libs/clang16-rt/lib/cfi/ya.make index cb1b203554..7e77f67f95 100644 --- a/contrib/libs/clang16-rt/lib/cfi/ya.make +++ b/contrib/libs/clang16-rt/lib/cfi/ya.make @@ -13,7 +13,7 @@ LICENSE( LICENSE_TEXTS(.yandex_meta/licenses.list.txt) -OWNER(g:cpp-contrib) +SUBSCRIBER(g:cpp-contrib) ADDINCL( contrib/libs/clang16-rt/lib diff --git a/contrib/libs/clang16-rt/lib/cfi_diag/ya.make b/contrib/libs/clang16-rt/lib/cfi_diag/ya.make index b54f8643bc..e070a97d15 100644 --- a/contrib/libs/clang16-rt/lib/cfi_diag/ya.make +++ b/contrib/libs/clang16-rt/lib/cfi_diag/ya.make @@ -13,7 +13,7 @@ LICENSE( LICENSE_TEXTS(.yandex_meta/licenses.list.txt) -OWNER(g:cpp-contrib) +SUBSCRIBER(g:cpp-contrib) ADDINCL( contrib/libs/clang16-rt/lib diff --git a/contrib/libs/clang16-rt/lib/dd/ya.make b/contrib/libs/clang16-rt/lib/dd/ya.make index 0bf1272898..55e6238ffe 100644 --- a/contrib/libs/clang16-rt/lib/dd/ya.make +++ b/contrib/libs/clang16-rt/lib/dd/ya.make @@ -13,7 +13,7 @@ LICENSE( LICENSE_TEXTS(.yandex_meta/licenses.list.txt) -OWNER(g:cpp-contrib) +SUBSCRIBER(g:cpp-contrib) ADDINCL( contrib/libs/clang16-rt/lib diff --git a/contrib/libs/clang16-rt/lib/dfsan/ya.make b/contrib/libs/clang16-rt/lib/dfsan/ya.make index 44e68592b6..a6a068d94a 100644 --- a/contrib/libs/clang16-rt/lib/dfsan/ya.make +++ b/contrib/libs/clang16-rt/lib/dfsan/ya.make @@ -13,7 +13,7 @@ LICENSE( LICENSE_TEXTS(.yandex_meta/licenses.list.txt) -OWNER(g:cpp-contrib) +SUBSCRIBER(g:cpp-contrib) ADDINCL( contrib/libs/clang16-rt/lib diff --git a/contrib/libs/clang16-rt/lib/gwp_asan/ya.make b/contrib/libs/clang16-rt/lib/gwp_asan/ya.make index 24f49509db..def8b62910 100644 --- a/contrib/libs/clang16-rt/lib/gwp_asan/ya.make +++ b/contrib/libs/clang16-rt/lib/gwp_asan/ya.make @@ -13,7 +13,7 @@ LICENSE( LICENSE_TEXTS(.yandex_meta/licenses.list.txt) -OWNER(g:cpp-contrib) +SUBSCRIBER(g:cpp-contrib) ADDINCL( contrib/libs/clang16-rt/lib diff --git a/contrib/libs/clang16-rt/lib/hwasan/ya.make b/contrib/libs/clang16-rt/lib/hwasan/ya.make index da9b1d285a..d3462216a3 100644 --- a/contrib/libs/clang16-rt/lib/hwasan/ya.make +++ b/contrib/libs/clang16-rt/lib/hwasan/ya.make @@ -13,7 +13,7 @@ LICENSE( LICENSE_TEXTS(.yandex_meta/licenses.list.txt) -OWNER(g:cpp-contrib) +SUBSCRIBER(g:cpp-contrib) ADDINCL( contrib/libs/clang16-rt/lib diff --git a/contrib/libs/clang16-rt/lib/hwasan_aliases/ya.make b/contrib/libs/clang16-rt/lib/hwasan_aliases/ya.make index fa8e16ee84..2abe7e45e3 100644 --- a/contrib/libs/clang16-rt/lib/hwasan_aliases/ya.make +++ b/contrib/libs/clang16-rt/lib/hwasan_aliases/ya.make @@ -13,7 +13,7 @@ LICENSE( LICENSE_TEXTS(.yandex_meta/licenses.list.txt) -OWNER(g:cpp-contrib) +SUBSCRIBER(g:cpp-contrib) ADDINCL( contrib/libs/clang16-rt/lib diff --git a/contrib/libs/clang16-rt/lib/hwasan_aliases_cxx/ya.make b/contrib/libs/clang16-rt/lib/hwasan_aliases_cxx/ya.make index b9ab7ef41b..31dc623ef9 100644 --- a/contrib/libs/clang16-rt/lib/hwasan_aliases_cxx/ya.make +++ b/contrib/libs/clang16-rt/lib/hwasan_aliases_cxx/ya.make @@ -13,7 +13,7 @@ LICENSE( LICENSE_TEXTS(.yandex_meta/licenses.list.txt) -OWNER(g:cpp-contrib) +SUBSCRIBER(g:cpp-contrib) ADDINCL( contrib/libs/clang16-rt/lib diff --git a/contrib/libs/clang16-rt/lib/hwasan_cxx/ya.make b/contrib/libs/clang16-rt/lib/hwasan_cxx/ya.make index f23203d31c..77a5ba3cdf 100644 --- a/contrib/libs/clang16-rt/lib/hwasan_cxx/ya.make +++ b/contrib/libs/clang16-rt/lib/hwasan_cxx/ya.make @@ -13,7 +13,7 @@ LICENSE( LICENSE_TEXTS(.yandex_meta/licenses.list.txt) -OWNER(g:cpp-contrib) +SUBSCRIBER(g:cpp-contrib) ADDINCL( contrib/libs/clang16-rt/lib diff --git a/contrib/libs/clang16-rt/lib/lsan/ya.make b/contrib/libs/clang16-rt/lib/lsan/ya.make index 64677c9588..791c49c61c 100644 --- a/contrib/libs/clang16-rt/lib/lsan/ya.make +++ b/contrib/libs/clang16-rt/lib/lsan/ya.make @@ -13,7 +13,7 @@ LICENSE( LICENSE_TEXTS(.yandex_meta/licenses.list.txt) -OWNER(g:cpp-contrib) +SUBSCRIBER(g:cpp-contrib) ADDINCL( contrib/libs/clang16-rt/lib diff --git a/contrib/libs/clang16-rt/lib/memprof-preinit/ya.make b/contrib/libs/clang16-rt/lib/memprof-preinit/ya.make index 7a5ada8f05..d7c185fd2c 100644 --- a/contrib/libs/clang16-rt/lib/memprof-preinit/ya.make +++ b/contrib/libs/clang16-rt/lib/memprof-preinit/ya.make @@ -13,7 +13,7 @@ LICENSE( LICENSE_TEXTS(.yandex_meta/licenses.list.txt) -OWNER(g:cpp-contrib) +SUBSCRIBER(g:cpp-contrib) ADDINCL( contrib/libs/clang16-rt/lib diff --git a/contrib/libs/clang16-rt/lib/memprof/ya.make b/contrib/libs/clang16-rt/lib/memprof/ya.make index facc1181c7..c74afecb66 100644 --- a/contrib/libs/clang16-rt/lib/memprof/ya.make +++ b/contrib/libs/clang16-rt/lib/memprof/ya.make @@ -13,7 +13,7 @@ LICENSE( LICENSE_TEXTS(.yandex_meta/licenses.list.txt) -OWNER(g:cpp-contrib) +SUBSCRIBER(g:cpp-contrib) ADDINCL( contrib/libs/clang16-rt/include diff --git a/contrib/libs/clang16-rt/lib/memprof_cxx/ya.make b/contrib/libs/clang16-rt/lib/memprof_cxx/ya.make index 9bd65a4cc9..3fa499d1e2 100644 --- a/contrib/libs/clang16-rt/lib/memprof_cxx/ya.make +++ b/contrib/libs/clang16-rt/lib/memprof_cxx/ya.make @@ -13,7 +13,7 @@ LICENSE( LICENSE_TEXTS(.yandex_meta/licenses.list.txt) -OWNER(g:cpp-contrib) +SUBSCRIBER(g:cpp-contrib) ADDINCL( contrib/libs/clang16-rt/lib diff --git a/contrib/libs/clang16-rt/lib/msan/ya.make b/contrib/libs/clang16-rt/lib/msan/ya.make index bcbdf424a3..65be22e1fc 100644 --- a/contrib/libs/clang16-rt/lib/msan/ya.make +++ b/contrib/libs/clang16-rt/lib/msan/ya.make @@ -13,7 +13,7 @@ LICENSE( LICENSE_TEXTS(.yandex_meta/licenses.list.txt) -OWNER(g:cpp-contrib) +SUBSCRIBER(g:cpp-contrib) ADDINCL( contrib/libs/clang16-rt/lib diff --git a/contrib/libs/clang16-rt/lib/msan_cxx/ya.make b/contrib/libs/clang16-rt/lib/msan_cxx/ya.make index 2bb733ce0d..af261953d6 100644 --- a/contrib/libs/clang16-rt/lib/msan_cxx/ya.make +++ b/contrib/libs/clang16-rt/lib/msan_cxx/ya.make @@ -13,7 +13,7 @@ LICENSE( LICENSE_TEXTS(.yandex_meta/licenses.list.txt) -OWNER(g:cpp-contrib) +SUBSCRIBER(g:cpp-contrib) ADDINCL( contrib/libs/clang16-rt/lib diff --git a/contrib/libs/clang16-rt/lib/profile/ya.make b/contrib/libs/clang16-rt/lib/profile/ya.make index 5403ebac4d..54a330d1fb 100644 --- a/contrib/libs/clang16-rt/lib/profile/ya.make +++ b/contrib/libs/clang16-rt/lib/profile/ya.make @@ -13,7 +13,7 @@ LICENSE( LICENSE_TEXTS(.yandex_meta/licenses.list.txt) -OWNER(g:cpp-contrib) +SUBSCRIBER(g:cpp-contrib) ADDINCL( contrib/libs/clang16-rt/include diff --git a/contrib/libs/clang16-rt/lib/safestack/ya.make b/contrib/libs/clang16-rt/lib/safestack/ya.make index 6597f95daf..e05fe7d797 100644 --- a/contrib/libs/clang16-rt/lib/safestack/ya.make +++ b/contrib/libs/clang16-rt/lib/safestack/ya.make @@ -13,7 +13,7 @@ LICENSE( LICENSE_TEXTS(.yandex_meta/licenses.list.txt) -OWNER(g:cpp-contrib) +SUBSCRIBER(g:cpp-contrib) ADDINCL( contrib/libs/clang16-rt/lib diff --git a/contrib/libs/clang16-rt/lib/scudo_standalone/ya.make b/contrib/libs/clang16-rt/lib/scudo_standalone/ya.make index e9ff600c94..7c7c81e073 100644 --- a/contrib/libs/clang16-rt/lib/scudo_standalone/ya.make +++ b/contrib/libs/clang16-rt/lib/scudo_standalone/ya.make @@ -13,7 +13,7 @@ LICENSE( LICENSE_TEXTS(.yandex_meta/licenses.list.txt) -OWNER(g:cpp-contrib) +SUBSCRIBER(g:cpp-contrib) ADDINCL( contrib/libs/clang16-rt/lib diff --git a/contrib/libs/clang16-rt/lib/scudo_standalone_cxx/ya.make b/contrib/libs/clang16-rt/lib/scudo_standalone_cxx/ya.make index 8a50fadb7e..7767bf79e9 100644 --- a/contrib/libs/clang16-rt/lib/scudo_standalone_cxx/ya.make +++ b/contrib/libs/clang16-rt/lib/scudo_standalone_cxx/ya.make @@ -13,7 +13,7 @@ LICENSE( LICENSE_TEXTS(.yandex_meta/licenses.list.txt) -OWNER(g:cpp-contrib) +SUBSCRIBER(g:cpp-contrib) ADDINCL( contrib/libs/clang16-rt/lib diff --git a/contrib/libs/clang16-rt/lib/stats/ya.make b/contrib/libs/clang16-rt/lib/stats/ya.make index 892b74b1ea..134223b676 100644 --- a/contrib/libs/clang16-rt/lib/stats/ya.make +++ b/contrib/libs/clang16-rt/lib/stats/ya.make @@ -13,7 +13,7 @@ LICENSE( LICENSE_TEXTS(.yandex_meta/licenses.list.txt) -OWNER(g:cpp-contrib) +SUBSCRIBER(g:cpp-contrib) ADDINCL( contrib/libs/clang16-rt/lib diff --git a/contrib/libs/clang16-rt/lib/stats_client/ya.make b/contrib/libs/clang16-rt/lib/stats_client/ya.make index 0d20d7eb78..f6b752bc61 100644 --- a/contrib/libs/clang16-rt/lib/stats_client/ya.make +++ b/contrib/libs/clang16-rt/lib/stats_client/ya.make @@ -13,7 +13,7 @@ LICENSE( LICENSE_TEXTS(.yandex_meta/licenses.list.txt) -OWNER(g:cpp-contrib) +SUBSCRIBER(g:cpp-contrib) ADDINCL( contrib/libs/clang16-rt/lib diff --git a/contrib/libs/clang16-rt/lib/tsan/ya.make b/contrib/libs/clang16-rt/lib/tsan/ya.make index f930e7e059..4a7fd2a241 100644 --- a/contrib/libs/clang16-rt/lib/tsan/ya.make +++ b/contrib/libs/clang16-rt/lib/tsan/ya.make @@ -13,7 +13,7 @@ LICENSE( LICENSE_TEXTS(.yandex_meta/licenses.list.txt) -OWNER(g:cpp-contrib) +SUBSCRIBER(g:cpp-contrib) ADDINCL( contrib/libs/clang16-rt/lib diff --git a/contrib/libs/clang16-rt/lib/tsan_cxx/ya.make b/contrib/libs/clang16-rt/lib/tsan_cxx/ya.make index faf3f7bd55..23d712aec8 100644 --- a/contrib/libs/clang16-rt/lib/tsan_cxx/ya.make +++ b/contrib/libs/clang16-rt/lib/tsan_cxx/ya.make @@ -13,7 +13,7 @@ LICENSE( LICENSE_TEXTS(.yandex_meta/licenses.list.txt) -OWNER(g:cpp-contrib) +SUBSCRIBER(g:cpp-contrib) ADDINCL( contrib/libs/clang16-rt/lib diff --git a/contrib/libs/clang16-rt/lib/ubsan_minimal/ya.make b/contrib/libs/clang16-rt/lib/ubsan_minimal/ya.make index b96cad8579..b2b2c0ba0f 100644 --- a/contrib/libs/clang16-rt/lib/ubsan_minimal/ya.make +++ b/contrib/libs/clang16-rt/lib/ubsan_minimal/ya.make @@ -13,7 +13,7 @@ LICENSE( LICENSE_TEXTS(.yandex_meta/licenses.list.txt) -OWNER(g:cpp-contrib) +SUBSCRIBER(g:cpp-contrib) ADDINCL( contrib/libs/clang16-rt/lib diff --git a/contrib/libs/clang16-rt/lib/ubsan_standalone/ya.make b/contrib/libs/clang16-rt/lib/ubsan_standalone/ya.make index d9d32d7658..d8b1d4d497 100644 --- a/contrib/libs/clang16-rt/lib/ubsan_standalone/ya.make +++ b/contrib/libs/clang16-rt/lib/ubsan_standalone/ya.make @@ -13,7 +13,7 @@ LICENSE( LICENSE_TEXTS(.yandex_meta/licenses.list.txt) -OWNER(g:cpp-contrib) +SUBSCRIBER(g:cpp-contrib) ADDINCL( contrib/libs/clang16-rt/lib diff --git a/contrib/libs/clang16-rt/lib/ubsan_standalone_cxx/ya.make b/contrib/libs/clang16-rt/lib/ubsan_standalone_cxx/ya.make index b3872de32d..aef3e54c80 100644 --- a/contrib/libs/clang16-rt/lib/ubsan_standalone_cxx/ya.make +++ b/contrib/libs/clang16-rt/lib/ubsan_standalone_cxx/ya.make @@ -13,7 +13,7 @@ LICENSE( LICENSE_TEXTS(.yandex_meta/licenses.list.txt) -OWNER(g:cpp-contrib) +SUBSCRIBER(g:cpp-contrib) ADDINCL( contrib/libs/clang16-rt/lib diff --git a/contrib/libs/clang16-rt/ya.make b/contrib/libs/clang16-rt/ya.make index 8559121308..1da1cf86ae 100644 --- a/contrib/libs/clang16-rt/ya.make +++ b/contrib/libs/clang16-rt/ya.make @@ -1,6 +1,6 @@ # Generated by devtools/yamaker from nixpkgs 23.05. -OWNER(g:cpp-contrib) +SUBSCRIBER(g:cpp-contrib) VERSION(16.0.6) diff --git a/contrib/libs/cxxsupp/libsan/ya.make b/contrib/libs/cxxsupp/libsan/ya.make index 5479032222..ca2a125292 100644 --- a/contrib/libs/cxxsupp/libsan/ya.make +++ b/contrib/libs/cxxsupp/libsan/ya.make @@ -10,7 +10,7 @@ NO_SANITIZE() NO_SANITIZE_COVERAGE() -OWNER(somov) +SUBSCRIBER(somov) RUN_PYTHON3( generate_symbolizer.py ${CXX_COMPILER} diff --git a/contrib/python/Flask/py3/.dist-info/METADATA b/contrib/python/Flask/py3/.dist-info/METADATA index d617f5fba8..343d75d101 100644 --- a/contrib/python/Flask/py3/.dist-info/METADATA +++ b/contrib/python/Flask/py3/.dist-info/METADATA @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: Flask -Version: 2.0.3 +Version: 2.1.3 Summary: A simple framework for building complex web applications. Home-page: https://palletsprojects.com/p/flask Author: Armin Ronacher @@ -15,7 +15,6 @@ Project-URL: Source Code, https://github.com/pallets/flask/ Project-URL: Issue Tracker, https://github.com/pallets/flask/issues/ Project-URL: Twitter, https://twitter.com/PalletsTeam Project-URL: Chat, https://discord.gg/pallets -Platform: UNKNOWN Classifier: Development Status :: 5 - Production/Stable Classifier: Environment :: Web Environment Classifier: Framework :: Flask @@ -27,13 +26,14 @@ Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content Classifier: Topic :: Internet :: WWW/HTTP :: WSGI Classifier: Topic :: Internet :: WWW/HTTP :: WSGI :: Application Classifier: Topic :: Software Development :: Libraries :: Application Frameworks -Requires-Python: >=3.6 +Requires-Python: >=3.7 Description-Content-Type: text/x-rst License-File: LICENSE.rst Requires-Dist: Werkzeug (>=2.0) Requires-Dist: Jinja2 (>=3.0) Requires-Dist: itsdangerous (>=2.0) -Requires-Dist: click (>=7.1.2) +Requires-Dist: click (>=8.0) +Requires-Dist: importlib-metadata (>=3.6.0) ; python_version < "3.10" Provides-Extra: async Requires-Dist: asgiref (>=3.2) ; extra == 'async' Provides-Extra: dotenv @@ -121,5 +121,3 @@ Links - Website: https://palletsprojects.com/p/flask/ - Twitter: https://twitter.com/PalletsTeam - Chat: https://discord.gg/pallets - - diff --git a/contrib/python/Flask/py3/flask/__init__.py b/contrib/python/Flask/py3/flask/__init__.py index feb5334c31..a970b8a1a8 100644 --- a/contrib/python/Flask/py3/flask/__init__.py +++ b/contrib/python/Flask/py3/flask/__init__.py @@ -23,7 +23,6 @@ from .helpers import flash as flash from .helpers import get_flashed_messages as get_flashed_messages from .helpers import get_template_attribute as get_template_attribute from .helpers import make_response as make_response -from .helpers import safe_join as safe_join from .helpers import send_file as send_file from .helpers import send_from_directory as send_from_directory from .helpers import stream_with_context as stream_with_context @@ -43,4 +42,4 @@ from .signals import template_rendered as template_rendered from .templating import render_template as render_template from .templating import render_template_string as render_template_string -__version__ = "2.0.3" +__version__ = "2.1.3" diff --git a/contrib/python/Flask/py3/flask/app.py b/contrib/python/Flask/py3/flask/app.py index 23b99e2ca0..6b54918887 100644 --- a/contrib/python/Flask/py3/flask/app.py +++ b/contrib/python/Flask/py3/flask/app.py @@ -16,7 +16,6 @@ from werkzeug.exceptions import BadRequest from werkzeug.exceptions import BadRequestKeyError from werkzeug.exceptions import HTTPException from werkzeug.exceptions import InternalServerError -from werkzeug.local import ContextVar from werkzeug.routing import BuildError from werkzeug.routing import Map from werkzeug.routing import MapAdapter @@ -27,6 +26,7 @@ from werkzeug.wrappers import Response as BaseResponse from . import cli from . import json +from . import typing as ft from .config import Config from .config import ConfigAttribute from .ctx import _AppCtxGlobals @@ -51,6 +51,7 @@ from .scaffold import find_package from .scaffold import Scaffold from .scaffold import setupmethod from .sessions import SecureCookieSessionInterface +from .sessions import SessionInterface from .signals import appcontext_tearing_down from .signals import got_request_exception from .signals import request_finished @@ -58,12 +59,6 @@ from .signals import request_started from .signals import request_tearing_down from .templating import DispatchingJinjaLoader from .templating import Environment -from .typing import BeforeFirstRequestCallable -from .typing import ResponseReturnValue -from .typing import TeardownCallable -from .typing import TemplateFilterCallable -from .typing import TemplateGlobalCallable -from .typing import TemplateTestCallable from .wrappers import Request from .wrappers import Response @@ -72,7 +67,6 @@ if t.TYPE_CHECKING: from .blueprints import Blueprint from .testing import FlaskClient from .testing import FlaskCliRunner - from .typing import ErrorHandlerCallable if sys.version_info >= (3, 8): iscoroutinefunction = inspect.iscoroutinefunction @@ -379,7 +373,7 @@ class Flask(Scaffold): #: :class:`~flask.sessions.SecureCookieSessionInterface` is used here. #: #: .. versionadded:: 0.8 - session_interface = SecureCookieSessionInterface() + session_interface: SessionInterface = SecureCookieSessionInterface() def __init__( self, @@ -436,7 +430,7 @@ class Flask(Scaffold): #: :meth:`before_first_request` decorator. #: #: .. versionadded:: 0.8 - self.before_first_request_funcs: t.List[BeforeFirstRequestCallable] = [] + self.before_first_request_funcs: t.List[ft.BeforeFirstRequestCallable] = [] #: A list of functions that are called when the application context #: is destroyed. Since the application context is also torn down @@ -444,7 +438,7 @@ class Flask(Scaffold): #: from databases. #: #: .. versionadded:: 0.9 - self.teardown_appcontext_funcs: t.List[TeardownCallable] = [] + self.teardown_appcontext_funcs: t.List[ft.TeardownCallable] = [] #: A list of shell context processor functions that should be run #: when a shell context is created. @@ -1039,7 +1033,7 @@ class Flask(Scaffold): self, rule: str, endpoint: t.Optional[str] = None, - view_func: t.Optional[t.Callable] = None, + view_func: t.Optional[ft.ViewCallable] = None, provide_automatic_options: t.Optional[bool] = None, **options: t.Any, ) -> None: @@ -1096,7 +1090,7 @@ class Flask(Scaffold): @setupmethod def template_filter( self, name: t.Optional[str] = None - ) -> t.Callable[[TemplateFilterCallable], TemplateFilterCallable]: + ) -> t.Callable[[ft.TemplateFilterCallable], ft.TemplateFilterCallable]: """A decorator that is used to register custom template filter. You can specify a name for the filter, otherwise the function name will be used. Example:: @@ -1109,7 +1103,7 @@ class Flask(Scaffold): function name will be used. """ - def decorator(f: TemplateFilterCallable) -> TemplateFilterCallable: + def decorator(f: ft.TemplateFilterCallable) -> ft.TemplateFilterCallable: self.add_template_filter(f, name=name) return f @@ -1117,7 +1111,7 @@ class Flask(Scaffold): @setupmethod def add_template_filter( - self, f: TemplateFilterCallable, name: t.Optional[str] = None + self, f: ft.TemplateFilterCallable, name: t.Optional[str] = None ) -> None: """Register a custom template filter. Works exactly like the :meth:`template_filter` decorator. @@ -1130,7 +1124,7 @@ class Flask(Scaffold): @setupmethod def template_test( self, name: t.Optional[str] = None - ) -> t.Callable[[TemplateTestCallable], TemplateTestCallable]: + ) -> t.Callable[[ft.TemplateTestCallable], ft.TemplateTestCallable]: """A decorator that is used to register custom template test. You can specify a name for the test, otherwise the function name will be used. Example:: @@ -1150,7 +1144,7 @@ class Flask(Scaffold): function name will be used. """ - def decorator(f: TemplateTestCallable) -> TemplateTestCallable: + def decorator(f: ft.TemplateTestCallable) -> ft.TemplateTestCallable: self.add_template_test(f, name=name) return f @@ -1158,7 +1152,7 @@ class Flask(Scaffold): @setupmethod def add_template_test( - self, f: TemplateTestCallable, name: t.Optional[str] = None + self, f: ft.TemplateTestCallable, name: t.Optional[str] = None ) -> None: """Register a custom template test. Works exactly like the :meth:`template_test` decorator. @@ -1173,7 +1167,7 @@ class Flask(Scaffold): @setupmethod def template_global( self, name: t.Optional[str] = None - ) -> t.Callable[[TemplateGlobalCallable], TemplateGlobalCallable]: + ) -> t.Callable[[ft.TemplateGlobalCallable], ft.TemplateGlobalCallable]: """A decorator that is used to register a custom template global function. You can specify a name for the global function, otherwise the function name will be used. Example:: @@ -1188,7 +1182,7 @@ class Flask(Scaffold): function name will be used. """ - def decorator(f: TemplateGlobalCallable) -> TemplateGlobalCallable: + def decorator(f: ft.TemplateGlobalCallable) -> ft.TemplateGlobalCallable: self.add_template_global(f, name=name) return f @@ -1196,7 +1190,7 @@ class Flask(Scaffold): @setupmethod def add_template_global( - self, f: TemplateGlobalCallable, name: t.Optional[str] = None + self, f: ft.TemplateGlobalCallable, name: t.Optional[str] = None ) -> None: """Register a custom template global function. Works exactly like the :meth:`template_global` decorator. @@ -1210,8 +1204,8 @@ class Flask(Scaffold): @setupmethod def before_first_request( - self, f: BeforeFirstRequestCallable - ) -> BeforeFirstRequestCallable: + self, f: ft.BeforeFirstRequestCallable + ) -> ft.BeforeFirstRequestCallable: """Registers a function to be run before the first request to this instance of the application. @@ -1224,7 +1218,7 @@ class Flask(Scaffold): return f @setupmethod - def teardown_appcontext(self, f: TeardownCallable) -> TeardownCallable: + def teardown_appcontext(self, f: ft.TeardownCallable) -> ft.TeardownCallable: """Registers a function to be called when the application context ends. These functions are typically also called when the request context is popped. @@ -1265,9 +1259,7 @@ class Flask(Scaffold): self.shell_context_processors.append(f) return f - def _find_error_handler( - self, e: Exception - ) -> t.Optional["ErrorHandlerCallable[Exception]"]: + def _find_error_handler(self, e: Exception) -> t.Optional[ft.ErrorHandlerCallable]: """Return a registered error handler for an exception in this order: blueprint handler for a specific code, app handler for a specific code, blueprint handler for an exception class, app handler for an exception @@ -1292,7 +1284,7 @@ class Flask(Scaffold): def handle_http_exception( self, e: HTTPException - ) -> t.Union[HTTPException, ResponseReturnValue]: + ) -> t.Union[HTTPException, ft.ResponseReturnValue]: """Handles an HTTP exception. By default this will invoke the registered error handlers and fall back to returning the exception as response. @@ -1362,7 +1354,7 @@ class Flask(Scaffold): def handle_user_exception( self, e: Exception - ) -> t.Union[HTTPException, ResponseReturnValue]: + ) -> t.Union[HTTPException, ft.ResponseReturnValue]: """This method is called whenever an exception occurs that should be handled. A special case is :class:`~werkzeug .exceptions.HTTPException` which is forwarded to the @@ -1432,7 +1424,7 @@ class Flask(Scaffold): raise e self.log_exception(exc_info) - server_error: t.Union[InternalServerError, ResponseReturnValue] + server_error: t.Union[InternalServerError, ft.ResponseReturnValue] server_error = InternalServerError(original_exception=e) handler = self._find_error_handler(server_error) @@ -1459,17 +1451,26 @@ class Flask(Scaffold): ) def raise_routing_exception(self, request: Request) -> "te.NoReturn": - """Exceptions that are recording during routing are reraised with - this method. During debug we are not reraising redirect requests - for non ``GET``, ``HEAD``, or ``OPTIONS`` requests and we're raising - a different error instead to help debug situations. + """Intercept routing exceptions and possibly do something else. + + In debug mode, intercept a routing redirect and replace it with + an error if the body will be discarded. + + With modern Werkzeug this shouldn't occur, since it now uses a + 308 status which tells the browser to resend the method and + body. + + .. versionchanged:: 2.1 + Don't intercept 307 and 308 redirects. + :meta private: :internal: """ if ( not self.debug or not isinstance(request.routing_exception, RequestRedirect) - or request.method in ("GET", "HEAD", "OPTIONS") + or request.routing_exception.code in {307, 308} + or request.method in {"GET", "HEAD", "OPTIONS"} ): raise request.routing_exception # type: ignore @@ -1477,7 +1478,7 @@ class Flask(Scaffold): raise FormDataRoutingRedirect(request) - def dispatch_request(self) -> ResponseReturnValue: + def dispatch_request(self) -> ft.ResponseReturnValue: """Does the request dispatching. Matches the URL and returns the return value of the view or error handler. This does not have to be a response object. In order to convert the return value to a @@ -1520,7 +1521,7 @@ class Flask(Scaffold): def finalize_request( self, - rv: t.Union[ResponseReturnValue, HTTPException], + rv: t.Union[ft.ResponseReturnValue, HTTPException], from_error_handler: bool = False, ) -> Response: """Given the return value from a view function this finalizes @@ -1621,16 +1622,9 @@ class Flask(Scaffold): "Install Flask with the 'async' extra in order to use async views." ) from None - # Check that Werkzeug isn't using its fallback ContextVar class. - if ContextVar.__module__ == "werkzeug.local": - raise RuntimeError( - "Async cannot be used with this combination of Python " - "and Greenlet versions." - ) - return asgiref_async_to_sync(func) - def make_response(self, rv: ResponseReturnValue) -> Response: + def make_response(self, rv: ft.ResponseReturnValue) -> Response: """Convert the return value from a view function to an instance of :attr:`response_class`. @@ -1681,13 +1675,13 @@ class Flask(Scaffold): # a 3-tuple is unpacked directly if len_rv == 3: - rv, status, headers = rv + rv, status, headers = rv # type: ignore[misc] # decide if a 2-tuple has status or headers elif len_rv == 2: if isinstance(rv[1], (Headers, dict, tuple, list)): rv, headers = rv else: - rv, status = rv + rv, status = rv # type: ignore[assignment,misc] # other sized tuples are not allowed else: raise TypeError( @@ -1710,7 +1704,11 @@ class Flask(Scaffold): # let the response class set the status and headers instead of # waiting to do it manually, so that the class can handle any # special logic - rv = self.response_class(rv, status=status, headers=headers) + rv = self.response_class( + rv, + status=status, + headers=headers, # type: ignore[arg-type] + ) status = headers = None elif isinstance(rv, dict): rv = jsonify(rv) @@ -1718,7 +1716,9 @@ class Flask(Scaffold): # evaluate a WSGI callable, or coerce a different response # class to the correct type try: - rv = self.response_class.force_type(rv, request.environ) # type: ignore # noqa: B950 + rv = self.response_class.force_type( + rv, request.environ # type: ignore[arg-type] + ) except TypeError as e: raise TypeError( f"{e}\nThe view function did not return a valid" @@ -1738,13 +1738,13 @@ class Flask(Scaffold): # prefer the status if it was provided if status is not None: if isinstance(status, (str, bytes, bytearray)): - rv.status = status # type: ignore + rv.status = status else: rv.status_code = status # extend existing headers with provided headers if headers: - rv.headers.update(headers) + rv.headers.update(headers) # type: ignore[arg-type] return rv @@ -1834,7 +1834,7 @@ class Flask(Scaffold): raise error - def preprocess_request(self) -> t.Optional[ResponseReturnValue]: + def preprocess_request(self) -> t.Optional[ft.ResponseReturnValue]: """Called before the request is dispatched. Calls :attr:`url_value_preprocessors` registered with the app and the current blueprint (if any). Then calls :attr:`before_request_funcs` diff --git a/contrib/python/Flask/py3/flask/blueprints.py b/contrib/python/Flask/py3/flask/blueprints.py index 5c23a735c8..87617989e0 100644 --- a/contrib/python/Flask/py3/flask/blueprints.py +++ b/contrib/python/Flask/py3/flask/blueprints.py @@ -3,23 +3,13 @@ import typing as t from collections import defaultdict from functools import update_wrapper +from . import typing as ft from .scaffold import _endpoint_from_view_func from .scaffold import _sentinel from .scaffold import Scaffold -from .typing import AfterRequestCallable -from .typing import BeforeFirstRequestCallable -from .typing import BeforeRequestCallable -from .typing import TeardownCallable -from .typing import TemplateContextProcessorCallable -from .typing import TemplateFilterCallable -from .typing import TemplateGlobalCallable -from .typing import TemplateTestCallable -from .typing import URLDefaultCallable -from .typing import URLValuePreprocessorCallable if t.TYPE_CHECKING: from .app import Flask - from .typing import ErrorHandlerCallable DeferredSetupFunction = t.Callable[["BlueprintSetupState"], t.Callable] @@ -299,24 +289,14 @@ class Blueprint(Scaffold): name = f"{name_prefix}.{self_name}".lstrip(".") if name in app.blueprints: + bp_desc = "this" if app.blueprints[name] is self else "a different" existing_at = f" '{name}'" if self_name != name else "" - if app.blueprints[name] is not self: - raise ValueError( - f"The name '{self_name}' is already registered for" - f" a different blueprint{existing_at}. Use 'name='" - " to provide a unique name." - ) - else: - import warnings - - warnings.warn( - f"The name '{self_name}' is already registered for" - f" this blueprint{existing_at}. Use 'name=' to" - " provide a unique name. This will become an error" - " in Flask 2.1.", - stacklevel=4, - ) + raise ValueError( + f"The name '{self_name}' is already registered for" + f" {bp_desc} blueprint{existing_at}. Use 'name=' to" + f" provide a unique name." + ) first_bp_registration = not any(bp is self for bp in app.blueprints.values()) first_name_registration = name not in app.blueprints @@ -404,7 +384,7 @@ class Blueprint(Scaffold): self, rule: str, endpoint: t.Optional[str] = None, - view_func: t.Optional[t.Callable] = None, + view_func: t.Optional[ft.ViewCallable] = None, provide_automatic_options: t.Optional[bool] = None, **options: t.Any, ) -> None: @@ -429,7 +409,7 @@ class Blueprint(Scaffold): def app_template_filter( self, name: t.Optional[str] = None - ) -> t.Callable[[TemplateFilterCallable], TemplateFilterCallable]: + ) -> t.Callable[[ft.TemplateFilterCallable], ft.TemplateFilterCallable]: """Register a custom template filter, available application wide. Like :meth:`Flask.template_filter` but for a blueprint. @@ -437,14 +417,14 @@ class Blueprint(Scaffold): function name will be used. """ - def decorator(f: TemplateFilterCallable) -> TemplateFilterCallable: + def decorator(f: ft.TemplateFilterCallable) -> ft.TemplateFilterCallable: self.add_app_template_filter(f, name=name) return f return decorator def add_app_template_filter( - self, f: TemplateFilterCallable, name: t.Optional[str] = None + self, f: ft.TemplateFilterCallable, name: t.Optional[str] = None ) -> None: """Register a custom template filter, available application wide. Like :meth:`Flask.add_template_filter` but for a blueprint. Works exactly @@ -461,7 +441,7 @@ class Blueprint(Scaffold): def app_template_test( self, name: t.Optional[str] = None - ) -> t.Callable[[TemplateTestCallable], TemplateTestCallable]: + ) -> t.Callable[[ft.TemplateTestCallable], ft.TemplateTestCallable]: """Register a custom template test, available application wide. Like :meth:`Flask.template_test` but for a blueprint. @@ -471,14 +451,14 @@ class Blueprint(Scaffold): function name will be used. """ - def decorator(f: TemplateTestCallable) -> TemplateTestCallable: + def decorator(f: ft.TemplateTestCallable) -> ft.TemplateTestCallable: self.add_app_template_test(f, name=name) return f return decorator def add_app_template_test( - self, f: TemplateTestCallable, name: t.Optional[str] = None + self, f: ft.TemplateTestCallable, name: t.Optional[str] = None ) -> None: """Register a custom template test, available application wide. Like :meth:`Flask.add_template_test` but for a blueprint. Works exactly @@ -497,7 +477,7 @@ class Blueprint(Scaffold): def app_template_global( self, name: t.Optional[str] = None - ) -> t.Callable[[TemplateGlobalCallable], TemplateGlobalCallable]: + ) -> t.Callable[[ft.TemplateGlobalCallable], ft.TemplateGlobalCallable]: """Register a custom template global, available application wide. Like :meth:`Flask.template_global` but for a blueprint. @@ -507,14 +487,14 @@ class Blueprint(Scaffold): function name will be used. """ - def decorator(f: TemplateGlobalCallable) -> TemplateGlobalCallable: + def decorator(f: ft.TemplateGlobalCallable) -> ft.TemplateGlobalCallable: self.add_app_template_global(f, name=name) return f return decorator def add_app_template_global( - self, f: TemplateGlobalCallable, name: t.Optional[str] = None + self, f: ft.TemplateGlobalCallable, name: t.Optional[str] = None ) -> None: """Register a custom template global, available application wide. Like :meth:`Flask.add_template_global` but for a blueprint. Works exactly @@ -531,7 +511,9 @@ class Blueprint(Scaffold): self.record_once(register_template) - def before_app_request(self, f: BeforeRequestCallable) -> BeforeRequestCallable: + def before_app_request( + self, f: ft.BeforeRequestCallable + ) -> ft.BeforeRequestCallable: """Like :meth:`Flask.before_request`. Such a function is executed before each request, even if outside of a blueprint. """ @@ -541,15 +523,15 @@ class Blueprint(Scaffold): return f def before_app_first_request( - self, f: BeforeFirstRequestCallable - ) -> BeforeFirstRequestCallable: + self, f: ft.BeforeFirstRequestCallable + ) -> ft.BeforeFirstRequestCallable: """Like :meth:`Flask.before_first_request`. Such a function is executed before the first request to the application. """ self.record_once(lambda s: s.app.before_first_request_funcs.append(f)) return f - def after_app_request(self, f: AfterRequestCallable) -> AfterRequestCallable: + def after_app_request(self, f: ft.AfterRequestCallable) -> ft.AfterRequestCallable: """Like :meth:`Flask.after_request` but for a blueprint. Such a function is executed after each request, even if outside of the blueprint. """ @@ -558,7 +540,7 @@ class Blueprint(Scaffold): ) return f - def teardown_app_request(self, f: TeardownCallable) -> TeardownCallable: + def teardown_app_request(self, f: ft.TeardownCallable) -> ft.TeardownCallable: """Like :meth:`Flask.teardown_request` but for a blueprint. Such a function is executed when tearing down each request, even if outside of the blueprint. @@ -569,8 +551,8 @@ class Blueprint(Scaffold): return f def app_context_processor( - self, f: TemplateContextProcessorCallable - ) -> TemplateContextProcessorCallable: + self, f: ft.TemplateContextProcessorCallable + ) -> ft.TemplateContextProcessorCallable: """Like :meth:`Flask.context_processor` but for a blueprint. Such a function is executed each request, even if outside of the blueprint. """ @@ -579,29 +561,29 @@ class Blueprint(Scaffold): ) return f - def app_errorhandler(self, code: t.Union[t.Type[Exception], int]) -> t.Callable: + def app_errorhandler( + self, code: t.Union[t.Type[Exception], int] + ) -> t.Callable[[ft.ErrorHandlerDecorator], ft.ErrorHandlerDecorator]: """Like :meth:`Flask.errorhandler` but for a blueprint. This handler is used for all requests, even if outside of the blueprint. """ - def decorator( - f: "ErrorHandlerCallable[Exception]", - ) -> "ErrorHandlerCallable[Exception]": + def decorator(f: ft.ErrorHandlerDecorator) -> ft.ErrorHandlerDecorator: self.record_once(lambda s: s.app.errorhandler(code)(f)) return f return decorator def app_url_value_preprocessor( - self, f: URLValuePreprocessorCallable - ) -> URLValuePreprocessorCallable: + self, f: ft.URLValuePreprocessorCallable + ) -> ft.URLValuePreprocessorCallable: """Same as :meth:`url_value_preprocessor` but application wide.""" self.record_once( lambda s: s.app.url_value_preprocessors.setdefault(None, []).append(f) ) return f - def app_url_defaults(self, f: URLDefaultCallable) -> URLDefaultCallable: + def app_url_defaults(self, f: ft.URLDefaultCallable) -> ft.URLDefaultCallable: """Same as :meth:`url_defaults` but application wide.""" self.record_once( lambda s: s.app.url_default_functions.setdefault(None, []).append(f) diff --git a/contrib/python/Flask/py3/flask/cli.py b/contrib/python/Flask/py3/flask/cli.py index 8e215322e7..77c1e25a9c 100644 --- a/contrib/python/Flask/py3/flask/cli.py +++ b/contrib/python/Flask/py3/flask/cli.py @@ -5,7 +5,6 @@ import platform import re import sys import traceback -import warnings from functools import update_wrapper from operator import attrgetter from threading import Lock @@ -19,22 +18,12 @@ from .helpers import get_debug_flag from .helpers import get_env from .helpers import get_load_dotenv -try: - import dotenv -except ImportError: - dotenv = None - -try: - import ssl -except ImportError: - ssl = None # type: ignore - class NoAppException(click.UsageError): """Raised if an application cannot be found or loaded.""" -def find_best_app(script_info, module): +def find_best_app(module): """Given a module instance this tries to find the best possible application in the module or raises an exception. """ @@ -65,7 +54,7 @@ def find_best_app(script_info, module): if inspect.isfunction(app_factory): try: - app = call_factory(script_info, app_factory) + app = app_factory() if isinstance(app, Flask): return app @@ -87,42 +76,6 @@ def find_best_app(script_info, module): ) -def call_factory(script_info, app_factory, args=None, kwargs=None): - """Takes an app factory, a ``script_info` object and optionally a tuple - of arguments. Checks for the existence of a script_info argument and calls - the app_factory depending on that and the arguments provided. - """ - sig = inspect.signature(app_factory) - args = [] if args is None else args - kwargs = {} if kwargs is None else kwargs - - if "script_info" in sig.parameters: - warnings.warn( - "The 'script_info' argument is deprecated and will not be" - " passed to the app factory function in Flask 2.1.", - DeprecationWarning, - ) - kwargs["script_info"] = script_info - - if not args and len(sig.parameters) == 1: - first_parameter = next(iter(sig.parameters.values())) - - if ( - first_parameter.default is inspect.Parameter.empty - # **kwargs is reported as an empty default, ignore it - and first_parameter.kind is not inspect.Parameter.VAR_KEYWORD - ): - warnings.warn( - "Script info is deprecated and will not be passed as the" - " single argument to the app factory function in Flask" - " 2.1.", - DeprecationWarning, - ) - args.append(script_info) - - return app_factory(*args, **kwargs) - - def _called_with_wrong_args(f): """Check whether calling a function raised a ``TypeError`` because the call failed or because something in the factory raised the @@ -149,7 +102,7 @@ def _called_with_wrong_args(f): del tb -def find_app_by_string(script_info, module, app_name): +def find_app_by_string(module, app_name): """Check if the given string is a variable name or a function. Call a function to get the app instance, or return the variable directly. """ @@ -166,7 +119,8 @@ def find_app_by_string(script_info, module, app_name): if isinstance(expr, ast.Name): name = expr.id - args = kwargs = None + args = [] + kwargs = {} elif isinstance(expr, ast.Call): # Ensure the function name is an attribute name only. if not isinstance(expr.func, ast.Name): @@ -202,7 +156,7 @@ def find_app_by_string(script_info, module, app_name): # to get the real application. if inspect.isfunction(attr): try: - app = call_factory(script_info, attr, args, kwargs) + app = attr(*args, **kwargs) except TypeError as e: if not _called_with_wrong_args(attr): raise @@ -253,7 +207,7 @@ def prepare_import(path): return ".".join(module_name[::-1]) -def locate_app(script_info, module_name, app_name, raise_if_not_found=True): +def locate_app(module_name, app_name, raise_if_not_found=True): __traceback_hide__ = True # noqa: F841 try: @@ -274,9 +228,9 @@ def locate_app(script_info, module_name, app_name, raise_if_not_found=True): module = sys.modules[module_name] if app_name is None: - return find_best_app(script_info, module) + return find_best_app(module) else: - return find_app_by_string(script_info, module, app_name) + return find_app_by_string(module, app_name) def get_version(ctx, param, value): @@ -327,9 +281,17 @@ class DispatchingApp: self._load_in_background() def _load_in_background(self): + # Store the Click context and push it in the loader thread so + # script_info is still available. + ctx = click.get_current_context(silent=True) + def _load_app(): __traceback_hide__ = True # noqa: F841 + with self._lock: + if ctx is not None: + click.globals.push_context(ctx) + try: self._load_unlocked() except Exception as e: @@ -397,18 +359,18 @@ class ScriptInfo: return self._loaded_app if self.create_app is not None: - app = call_factory(self, self.create_app) + app = self.create_app() else: if self.app_import_path: path, name = ( re.split(r":(?![\\/])", self.app_import_path, 1) + [None] )[:2] import_name = prepare_import(path) - app = locate_app(self, import_name, name) + app = locate_app(import_name, name) else: for path in ("wsgi.py", "app.py"): import_name = prepare_import(path) - app = locate_app(self, import_name, None, raise_if_not_found=False) + app = locate_app(import_name, None, raise_if_not_found=False) if app: break @@ -530,14 +492,18 @@ class FlaskGroup(AppGroup): def _load_plugin_commands(self): if self._loaded_plugin_commands: return - try: - import pkg_resources - except ImportError: - self._loaded_plugin_commands = True - return - for ep in pkg_resources.iter_entry_points("flask.commands"): + if sys.version_info >= (3, 10): + from importlib import metadata + else: + # Use a backport on Python < 3.10. We technically have + # importlib.metadata on 3.8+, but the API changed in 3.10, + # so use the backport for consistency. + import importlib_metadata as metadata + + for ep in metadata.entry_points(group="flask.commands"): self.add_command(ep.load(), ep.name) + self._loaded_plugin_commands = True def get_command(self, ctx, name): @@ -630,7 +596,9 @@ def load_dotenv(path=None): .. versionadded:: 1.0 """ - if dotenv is None: + try: + import dotenv + except ImportError: if path or os.path.isfile(".env") or os.path.isfile(".flaskenv"): click.secho( " * Tip: There are .env or .flaskenv files present." @@ -706,12 +674,14 @@ class CertParamType(click.ParamType): self.path_type = click.Path(exists=True, dir_okay=False, resolve_path=True) def convert(self, value, param, ctx): - if ssl is None: + try: + import ssl + except ImportError: raise click.BadParameter( 'Using "--cert" requires Python to be compiled with SSL support.', ctx, param, - ) + ) from None try: return self.path_type(value, param, ctx) @@ -744,7 +714,13 @@ def _validate_key(ctx, param, value): """ cert = ctx.params.get("cert") is_adhoc = cert == "adhoc" - is_context = ssl and isinstance(cert, ssl.SSLContext) + + try: + import ssl + except ImportError: + is_context = False + else: + is_context = isinstance(cert, ssl.SSLContext) if value is not None: if is_adhoc: @@ -785,7 +761,10 @@ class SeparatedPathType(click.Path): @click.option("--host", "-h", default="127.0.0.1", help="The interface to bind to.") @click.option("--port", "-p", default=5000, help="The port to bind to.") @click.option( - "--cert", type=CertParamType(), help="Specify a certificate file to use HTTPS." + "--cert", + type=CertParamType(), + help="Specify a certificate file to use HTTPS.", + is_eager=True, ) @click.option( "--key", @@ -826,9 +805,28 @@ class SeparatedPathType(click.Path): f" are separated by {os.path.pathsep!r}." ), ) +@click.option( + "--exclude-patterns", + default=None, + type=SeparatedPathType(), + help=( + "Files matching these fnmatch patterns will not trigger a reload" + " on change. Multiple patterns are separated by" + f" {os.path.pathsep!r}." + ), +) @pass_script_info def run_command( - info, host, port, reload, debugger, eager_loading, with_threads, cert, extra_files + info, + host, + port, + reload, + debugger, + eager_loading, + with_threads, + cert, + extra_files, + exclude_patterns, ): """Run a local development server. @@ -860,6 +858,7 @@ def run_command( threaded=with_threads, ssl_context=cert, extra_files=extra_files, + exclude_patterns=exclude_patterns, ) @@ -984,15 +983,7 @@ debug mode. def main() -> None: - if int(click.__version__[0]) < 8: - warnings.warn( - "Using the `flask` cli with Click 7 is deprecated and" - " will not be supported starting with Flask 2.1." - " Please upgrade to Click 8 as soon as possible.", - DeprecationWarning, - ) - # TODO omit sys.argv once https://github.com/pallets/click/issues/536 is fixed - cli.main(args=sys.argv[1:]) + cli.main() if __name__ == "__main__": diff --git a/contrib/python/Flask/py3/flask/config.py b/contrib/python/Flask/py3/flask/config.py index ca769022f6..7b6a137ada 100644 --- a/contrib/python/Flask/py3/flask/config.py +++ b/contrib/python/Flask/py3/flask/config.py @@ -1,4 +1,5 @@ import errno +import json import os import types import typing as t @@ -70,7 +71,7 @@ class Config(dict): """ def __init__(self, root_path: str, defaults: t.Optional[dict] = None) -> None: - dict.__init__(self, defaults or {}) + super().__init__(defaults or {}) self.root_path = root_path def from_envvar(self, variable_name: str, silent: bool = False) -> bool: @@ -97,6 +98,70 @@ class Config(dict): ) return self.from_pyfile(rv, silent=silent) + def from_prefixed_env( + self, prefix: str = "FLASK", *, loads: t.Callable[[str], t.Any] = json.loads + ) -> bool: + """Load any environment variables that start with ``FLASK_``, + dropping the prefix from the env key for the config key. Values + are passed through a loading function to attempt to convert them + to more specific types than strings. + + Keys are loaded in :func:`sorted` order. + + The default loading function attempts to parse values as any + valid JSON type, including dicts and lists. + + Specific items in nested dicts can be set by separating the + keys with double underscores (``__``). If an intermediate key + doesn't exist, it will be initialized to an empty dict. + + :param prefix: Load env vars that start with this prefix, + separated with an underscore (``_``). + :param loads: Pass each string value to this function and use + the returned value as the config value. If any error is + raised it is ignored and the value remains a string. The + default is :func:`json.loads`. + + .. versionadded:: 2.1 + """ + prefix = f"{prefix}_" + len_prefix = len(prefix) + + for key in sorted(os.environ): + if not key.startswith(prefix): + continue + + value = os.environ[key] + + try: + value = loads(value) + except Exception: + # Keep the value as a string if loading failed. + pass + + # Change to key.removeprefix(prefix) on Python >= 3.9. + key = key[len_prefix:] + + if "__" not in key: + # A non-nested key, set directly. + self[key] = value + continue + + # Traverse nested dictionaries with keys separated by "__". + current = self + *parts, tail = key.split("__") + + for part in parts: + # If an intermediate dict does not exist, create it. + if part not in current: + current[part] = {} + + current = current[part] + + current[tail] = value + + return True + def from_pyfile(self, filename: str, silent: bool = False) -> bool: """Updates the values in the config from a Python file. This function behaves as if the file was imported as module with the @@ -176,6 +241,9 @@ class Config(dict): .. code-block:: python + import json + app.config.from_file("config.json", load=json.load) + import toml app.config.from_file("config.toml", load=toml.load) @@ -204,32 +272,6 @@ class Config(dict): return self.from_mapping(obj) - def from_json(self, filename: str, silent: bool = False) -> bool: - """Update the values in the config from a JSON file. The loaded - data is passed to the :meth:`from_mapping` method. - - :param filename: The path to the JSON file. This can be an - absolute path or relative to the config root path. - :param silent: Ignore the file if it doesn't exist. - :return: ``True`` if the file was loaded successfully. - - .. deprecated:: 2.0.0 - Will be removed in Flask 2.1. Use :meth:`from_file` instead. - This was removed early in 2.0.0, was added back in 2.0.1. - - .. versionadded:: 0.11 - """ - import warnings - from . import json - - warnings.warn( - "'from_json' is deprecated and will be removed in Flask" - " 2.1. Use 'from_file(path, json.load)' instead.", - DeprecationWarning, - stacklevel=2, - ) - return self.from_file(filename, json.load, silent=silent) - def from_mapping( self, mapping: t.Optional[t.Mapping[str, t.Any]] = None, **kwargs: t.Any ) -> bool: diff --git a/contrib/python/Flask/py3/flask/ctx.py b/contrib/python/Flask/py3/flask/ctx.py index 47465fd4e1..e6822b2d97 100644 --- a/contrib/python/Flask/py3/flask/ctx.py +++ b/contrib/python/Flask/py3/flask/ctx.py @@ -5,11 +5,11 @@ from types import TracebackType from werkzeug.exceptions import HTTPException +from . import typing as ft from .globals import _app_ctx_stack from .globals import _request_ctx_stack from .signals import appcontext_popped from .signals import appcontext_pushed -from .typing import AfterRequestCallable if t.TYPE_CHECKING: from .app import Flask @@ -109,7 +109,7 @@ class _AppCtxGlobals: return object.__repr__(self) -def after_this_request(f: AfterRequestCallable) -> AfterRequestCallable: +def after_this_request(f: ft.AfterRequestCallable) -> ft.AfterRequestCallable: """Executes a function after this request. This is useful to modify response objects. The function is passed the response object and has to return the same or a new one. @@ -178,7 +178,7 @@ def copy_current_request_context(f: t.Callable) -> t.Callable: def wrapper(*args, **kwargs): with reqctx: - return f(*args, **kwargs) + return reqctx.app.ensure_sync(f)(*args, **kwargs) return update_wrapper(wrapper, f) @@ -267,7 +267,10 @@ class AppContext: return self def __exit__( - self, exc_type: type, exc_value: BaseException, tb: TracebackType + self, + exc_type: t.Optional[type], + exc_value: t.Optional[BaseException], + tb: t.Optional[TracebackType], ) -> None: self.pop(exc_value) @@ -338,14 +341,32 @@ class RequestContext: # Functions that should be executed after the request on the response # object. These will be called before the regular "after_request" # functions. - self._after_request_functions: t.List[AfterRequestCallable] = [] + self._after_request_functions: t.List[ft.AfterRequestCallable] = [] @property - def g(self) -> AppContext: + def g(self) -> _AppCtxGlobals: + import warnings + + warnings.warn( + "Accessing 'g' on the request context is deprecated and" + " will be removed in Flask 2.2. Access `g` directly or from" + "the application context instead.", + DeprecationWarning, + stacklevel=2, + ) return _app_ctx_stack.top.g @g.setter - def g(self, value: AppContext) -> None: + def g(self, value: _AppCtxGlobals) -> None: + import warnings + + warnings.warn( + "Setting 'g' on the request context is deprecated and" + " will be removed in Flask 2.2. Set it on the application" + " context instead.", + DeprecationWarning, + stacklevel=2, + ) _app_ctx_stack.top.g = value def copy(self) -> "RequestContext": @@ -473,7 +494,10 @@ class RequestContext: return self def __exit__( - self, exc_type: type, exc_value: BaseException, tb: TracebackType + self, + exc_type: t.Optional[type], + exc_value: t.Optional[BaseException], + tb: t.Optional[TracebackType], ) -> None: # do not pop the request stack if we are in debug mode and an # exception happened. This will allow the debugger to still diff --git a/contrib/python/Flask/py3/flask/debughelpers.py b/contrib/python/Flask/py3/flask/debughelpers.py index 212f7d7ee8..27d378c24a 100644 --- a/contrib/python/Flask/py3/flask/debughelpers.py +++ b/contrib/python/Flask/py3/flask/debughelpers.py @@ -41,53 +41,55 @@ class DebugFilesKeyError(KeyError, AssertionError): class FormDataRoutingRedirect(AssertionError): - """This exception is raised by Flask in debug mode if it detects a - redirect caused by the routing system when the request method is not - GET, HEAD or OPTIONS. Reasoning: form data will be dropped. + """This exception is raised in debug mode if a routing redirect + would cause the browser to drop the method or body. This happens + when method is not GET, HEAD or OPTIONS and the status code is not + 307 or 308. """ def __init__(self, request): exc = request.routing_exception buf = [ - f"A request was sent to this URL ({request.url}) but a" - " redirect was issued automatically by the routing system" - f" to {exc.new_url!r}." + f"A request was sent to '{request.url}', but routing issued" + f" a redirect to the canonical URL '{exc.new_url}'." ] - # In case just a slash was appended we can be extra helpful - if f"{request.base_url}/" == exc.new_url.split("?")[0]: + if f"{request.base_url}/" == exc.new_url.partition("?")[0]: buf.append( - " The URL was defined with a trailing slash so Flask" - " will automatically redirect to the URL with the" - " trailing slash if it was accessed without one." + " The URL was defined with a trailing slash. Flask" + " will redirect to the URL with a trailing slash if it" + " was accessed without one." ) buf.append( - " Make sure to directly send your" - f" {request.method}-request to this URL since we can't make" - " browsers or HTTP clients redirect with form data reliably" - " or without user interaction." + " Send requests to the canonical URL, or use 307 or 308 for" + " routing redirects. Otherwise, browsers will drop form" + " data.\n\n" + "This exception is only raised in debug mode." ) - buf.append("\n\nNote: this exception is only raised in debug mode") - AssertionError.__init__(self, "".join(buf).encode("utf-8")) + super().__init__("".join(buf)) def attach_enctype_error_multidict(request): - """Since Flask 0.8 we're monkeypatching the files object in case a - request is detected that does not use multipart form data but the files - object is accessed. + """Patch ``request.files.__getitem__`` to raise a descriptive error + about ``enctype=multipart/form-data``. + + :param request: The request to patch. + :meta private: """ oldcls = request.files.__class__ class newcls(oldcls): def __getitem__(self, key): try: - return oldcls.__getitem__(self, key) + return super().__getitem__(key) except KeyError as e: if key not in request.form: raise - raise DebugFilesKeyError(request, key) from e + raise DebugFilesKeyError(request, key).with_traceback( + e.__traceback__ + ) from None newcls.__name__ = oldcls.__name__ newcls.__module__ = oldcls.__module__ diff --git a/contrib/python/Flask/py3/flask/helpers.py b/contrib/python/Flask/py3/flask/helpers.py index 435978012f..1e0732b31a 100644 --- a/contrib/python/Flask/py3/flask/helpers.py +++ b/contrib/python/Flask/py3/flask/helpers.py @@ -5,13 +5,11 @@ import sys import typing as t import warnings from datetime import datetime -from datetime import timedelta from functools import lru_cache from functools import update_wrapper from threading import RLock import werkzeug.utils -from werkzeug.exceptions import NotFound from werkzeug.routing import BuildError from werkzeug.urls import url_quote @@ -188,7 +186,7 @@ def make_response(*args: t.Any) -> "Response": return current_app.response_class() if len(args) == 1: args = args[0] - return current_app.make_response(args) + return current_app.make_response(args) # type: ignore def url_for(endpoint: str, **values: t.Any) -> str: @@ -454,7 +452,7 @@ def _prepare_send_file_kwargs( warnings.warn( "The 'attachment_filename' parameter has been renamed to" " 'download_name'. The old name will be removed in Flask" - " 2.1.", + " 2.2.", DeprecationWarning, stacklevel=3, ) @@ -463,7 +461,7 @@ def _prepare_send_file_kwargs( if cache_timeout is not None: warnings.warn( "The 'cache_timeout' parameter has been renamed to" - " 'max_age'. The old name will be removed in Flask 2.1.", + " 'max_age'. The old name will be removed in Flask 2.2.", DeprecationWarning, stacklevel=3, ) @@ -472,7 +470,7 @@ def _prepare_send_file_kwargs( if add_etags is not None: warnings.warn( "The 'add_etags' parameter has been renamed to 'etag'. The" - " old name will be removed in Flask 2.1.", + " old name will be removed in Flask 2.2.", DeprecationWarning, stacklevel=3, ) @@ -627,29 +625,6 @@ def send_file( ) -def safe_join(directory: str, *pathnames: str) -> str: - """Safely join zero or more untrusted path components to a base - directory to avoid escaping the base directory. - - :param directory: The trusted base directory. - :param pathnames: The untrusted path components relative to the - base directory. - :return: A safe path, otherwise ``None``. - """ - warnings.warn( - "'flask.helpers.safe_join' is deprecated and will be removed in" - " Flask 2.1. Use 'werkzeug.utils.safe_join' instead.", - DeprecationWarning, - stacklevel=2, - ) - path = werkzeug.utils.safe_join(directory, *pathnames) - - if path is None: - raise NotFound() - - return path - - def send_from_directory( directory: t.Union[os.PathLike, str], path: t.Union[os.PathLike, str], @@ -674,7 +649,8 @@ def send_from_directory( If the final path does not point to an existing regular file, raises a 404 :exc:`~werkzeug.exceptions.NotFound` error. - :param directory: The directory that ``path`` must be located under. + :param directory: The directory that ``path`` must be located under, + relative to the current application's root path. :param path: The path to the file to send, relative to ``directory``. :param kwargs: Arguments to pass to :func:`send_file`. @@ -691,7 +667,7 @@ def send_from_directory( if filename is not None: warnings.warn( "The 'filename' parameter has been renamed to 'path'. The" - " old name will be removed in Flask 2.1.", + " old name will be removed in Flask 2.2.", DeprecationWarning, stacklevel=2, ) @@ -785,27 +761,6 @@ class locked_cached_property(werkzeug.utils.cached_property): super().__delete__(obj) -def total_seconds(td: timedelta) -> int: - """Returns the total seconds from a timedelta object. - - :param timedelta td: the timedelta to be converted in seconds - - :returns: number of seconds - :rtype: int - - .. deprecated:: 2.0 - Will be removed in Flask 2.1. Use - :meth:`timedelta.total_seconds` instead. - """ - warnings.warn( - "'total_seconds' is deprecated and will be removed in Flask" - " 2.1. Use 'timedelta.total_seconds' instead.", - DeprecationWarning, - stacklevel=2, - ) - return td.days * 60 * 60 * 24 + td.seconds - - def is_ip(value: str) -> bool: """Determine if the given string is an IP address. diff --git a/contrib/python/Flask/py3/flask/json/__init__.py b/contrib/python/Flask/py3/flask/json/__init__.py index ccb9efb174..adefe02dcd 100644 --- a/contrib/python/Flask/py3/flask/json/__init__.py +++ b/contrib/python/Flask/py3/flask/json/__init__.py @@ -1,9 +1,8 @@ +import dataclasses import decimal -import io import json as _json import typing as t import uuid -import warnings from datetime import date from jinja2.utils import htmlsafe_json_dumps as _jinja_htmlsafe_dumps @@ -16,12 +15,6 @@ if t.TYPE_CHECKING: from ..app import Flask from ..wrappers import Response -try: - import dataclasses -except ImportError: - # Python < 3.7 - dataclasses = None # type: ignore - class JSONEncoder(_json.JSONEncoder): """The default JSON encoder. Handles extra types compared to the @@ -30,6 +23,7 @@ class JSONEncoder(_json.JSONEncoder): - :class:`datetime.datetime` and :class:`datetime.date` are serialized to :rfc:`822` strings. This is the same as the HTTP date format. + - :class:`decimal.Decimal` is serialized to a string. - :class:`uuid.UUID` is serialized to a string. - :class:`dataclasses.dataclass` is passed to :func:`dataclasses.asdict`. @@ -135,20 +129,7 @@ def dumps(obj: t.Any, app: t.Optional["Flask"] = None, **kwargs: t.Any) -> str: context for configuration. """ _dump_arg_defaults(kwargs, app=app) - encoding = kwargs.pop("encoding", None) - rv = _json.dumps(obj, **kwargs) - - if encoding is not None: - warnings.warn( - "'encoding' is deprecated and will be removed in Flask 2.1.", - DeprecationWarning, - stacklevel=2, - ) - - if isinstance(rv, str): - return rv.encode(encoding) # type: ignore - - return rv + return _json.dumps(obj, **kwargs) def dump( @@ -170,27 +151,14 @@ def dump( deprecated and will be removed in Flask 2.1. """ _dump_arg_defaults(kwargs, app=app) - encoding = kwargs.pop("encoding", None) - show_warning = encoding is not None - - try: - fp.write("") - except TypeError: - show_warning = True - fp = io.TextIOWrapper(fp, encoding or "utf-8") # type: ignore - - if show_warning: - warnings.warn( - "Writing to a binary file, and the 'encoding' argument, is" - " deprecated and will be removed in Flask 2.1.", - DeprecationWarning, - stacklevel=2, - ) - _json.dump(obj, fp, **kwargs) -def loads(s: str, app: t.Optional["Flask"] = None, **kwargs: t.Any) -> t.Any: +def loads( + s: t.Union[str, bytes], + app: t.Optional["Flask"] = None, + **kwargs: t.Any, +) -> t.Any: """Deserialize an object from a string of JSON. Takes the same arguments as the built-in :func:`json.loads`, with @@ -210,19 +178,6 @@ def loads(s: str, app: t.Optional["Flask"] = None, **kwargs: t.Any) -> t.Any: context for configuration. """ _load_arg_defaults(kwargs, app=app) - encoding = kwargs.pop("encoding", None) - - if encoding is not None: - warnings.warn( - "'encoding' is deprecated and will be removed in Flask 2.1." - " The data must be a string or UTF-8 bytes.", - DeprecationWarning, - stacklevel=2, - ) - - if isinstance(s, bytes): - s = s.decode(encoding) - return _json.loads(s, **kwargs) @@ -242,20 +197,6 @@ def load(fp: t.IO[str], app: t.Optional["Flask"] = None, **kwargs: t.Any) -> t.A file must be text mode, or binary mode with UTF-8 bytes. """ _load_arg_defaults(kwargs, app=app) - encoding = kwargs.pop("encoding", None) - - if encoding is not None: - warnings.warn( - "'encoding' is deprecated and will be removed in Flask 2.1." - " The file must be text mode, or binary mode with UTF-8" - " bytes.", - DeprecationWarning, - stacklevel=2, - ) - - if isinstance(fp.read(0), bytes): - fp = io.TextIOWrapper(fp, encoding) # type: ignore - return _json.load(fp, **kwargs) diff --git a/contrib/python/Flask/py3/flask/scaffold.py b/contrib/python/Flask/py3/flask/scaffold.py index 8c6f8de3bb..a58941c01d 100644 --- a/contrib/python/Flask/py3/flask/scaffold.py +++ b/contrib/python/Flask/py3/flask/scaffold.py @@ -1,6 +1,7 @@ import importlib.util import mimetypes import os +import pathlib import pkgutil import sys import typing as t @@ -13,6 +14,7 @@ from jinja2 import ChoiceLoader, FileSystemLoader, ResourceLoader from werkzeug.exceptions import default_exceptions from werkzeug.exceptions import HTTPException +from . import typing as ft from .cli import AppGroup from .globals import current_app from .helpers import get_root_path @@ -20,18 +22,9 @@ from .helpers import locked_cached_property from .helpers import send_file from .helpers import send_from_directory from .templating import _default_template_ctx_processor -from .typing import AfterRequestCallable -from .typing import AppOrBlueprintKey -from .typing import BeforeRequestCallable -from .typing import GenericException -from .typing import TeardownCallable -from .typing import TemplateContextProcessorCallable -from .typing import URLDefaultCallable -from .typing import URLValuePreprocessorCallable if t.TYPE_CHECKING: from .wrappers import Response - from .typing import ErrorHandlerCallable # a singleton sentinel value for parameter defaults _sentinel = object() @@ -139,7 +132,7 @@ class Scaffold: self.view_functions: t.Dict[str, t.Callable] = {} #: A data structure of registered error handlers, in the format - #: ``{scope: {code: {class: handler}}}```. The ``scope`` key is + #: ``{scope: {code: {class: handler}}}``. The ``scope`` key is #: the name of a blueprint the handlers are active for, or #: ``None`` for all requests. The ``code`` key is the HTTP #: status code for ``HTTPException``, or ``None`` for @@ -152,11 +145,8 @@ class Scaffold: #: This data structure is internal. It should not be modified #: directly and its format may change at any time. self.error_handler_spec: t.Dict[ - AppOrBlueprintKey, - t.Dict[ - t.Optional[int], - t.Dict[t.Type[Exception], "ErrorHandlerCallable[Exception]"], - ], + ft.AppOrBlueprintKey, + t.Dict[t.Optional[int], t.Dict[t.Type[Exception], ft.ErrorHandlerCallable]], ] = defaultdict(lambda: defaultdict(dict)) #: A data structure of functions to call at the beginning of @@ -170,7 +160,7 @@ class Scaffold: #: This data structure is internal. It should not be modified #: directly and its format may change at any time. self.before_request_funcs: t.Dict[ - AppOrBlueprintKey, t.List[BeforeRequestCallable] + ft.AppOrBlueprintKey, t.List[ft.BeforeRequestCallable] ] = defaultdict(list) #: A data structure of functions to call at the end of each @@ -184,7 +174,7 @@ class Scaffold: #: This data structure is internal. It should not be modified #: directly and its format may change at any time. self.after_request_funcs: t.Dict[ - AppOrBlueprintKey, t.List[AfterRequestCallable] + ft.AppOrBlueprintKey, t.List[ft.AfterRequestCallable] ] = defaultdict(list) #: A data structure of functions to call at the end of each @@ -199,7 +189,7 @@ class Scaffold: #: This data structure is internal. It should not be modified #: directly and its format may change at any time. self.teardown_request_funcs: t.Dict[ - AppOrBlueprintKey, t.List[TeardownCallable] + ft.AppOrBlueprintKey, t.List[ft.TeardownCallable] ] = defaultdict(list) #: A data structure of functions to call to pass extra context @@ -214,7 +204,7 @@ class Scaffold: #: This data structure is internal. It should not be modified #: directly and its format may change at any time. self.template_context_processors: t.Dict[ - AppOrBlueprintKey, t.List[TemplateContextProcessorCallable] + ft.AppOrBlueprintKey, t.List[ft.TemplateContextProcessorCallable] ] = defaultdict(list, {None: [_default_template_ctx_processor]}) #: A data structure of functions to call to modify the keyword @@ -229,8 +219,8 @@ class Scaffold: #: This data structure is internal. It should not be modified #: directly and its format may change at any time. self.url_value_preprocessors: t.Dict[ - AppOrBlueprintKey, - t.List[URLValuePreprocessorCallable], + ft.AppOrBlueprintKey, + t.List[ft.URLValuePreprocessorCallable], ] = defaultdict(list) #: A data structure of functions to call to modify the keyword @@ -245,7 +235,7 @@ class Scaffold: #: This data structure is internal. It should not be modified #: directly and its format may change at any time. self.url_default_functions: t.Dict[ - AppOrBlueprintKey, t.List[URLDefaultCallable] + ft.AppOrBlueprintKey, t.List[ft.URLDefaultCallable] ] = defaultdict(list) def __repr__(self) -> str: @@ -397,48 +387,65 @@ class Scaffold: return open(os.path.join(self.root_path, resource), mode) - def _method_route(self, method: str, rule: str, options: dict) -> t.Callable: + def _method_route( + self, + method: str, + rule: str, + options: dict, + ) -> t.Callable[[ft.RouteDecorator], ft.RouteDecorator]: if "methods" in options: raise TypeError("Use the 'route' decorator to use the 'methods' argument.") return self.route(rule, methods=[method], **options) - def get(self, rule: str, **options: t.Any) -> t.Callable: + def get( + self, rule: str, **options: t.Any + ) -> t.Callable[[ft.RouteDecorator], ft.RouteDecorator]: """Shortcut for :meth:`route` with ``methods=["GET"]``. .. versionadded:: 2.0 """ return self._method_route("GET", rule, options) - def post(self, rule: str, **options: t.Any) -> t.Callable: + def post( + self, rule: str, **options: t.Any + ) -> t.Callable[[ft.RouteDecorator], ft.RouteDecorator]: """Shortcut for :meth:`route` with ``methods=["POST"]``. .. versionadded:: 2.0 """ return self._method_route("POST", rule, options) - def put(self, rule: str, **options: t.Any) -> t.Callable: + def put( + self, rule: str, **options: t.Any + ) -> t.Callable[[ft.RouteDecorator], ft.RouteDecorator]: """Shortcut for :meth:`route` with ``methods=["PUT"]``. .. versionadded:: 2.0 """ return self._method_route("PUT", rule, options) - def delete(self, rule: str, **options: t.Any) -> t.Callable: + def delete( + self, rule: str, **options: t.Any + ) -> t.Callable[[ft.RouteDecorator], ft.RouteDecorator]: """Shortcut for :meth:`route` with ``methods=["DELETE"]``. .. versionadded:: 2.0 """ return self._method_route("DELETE", rule, options) - def patch(self, rule: str, **options: t.Any) -> t.Callable: + def patch( + self, rule: str, **options: t.Any + ) -> t.Callable[[ft.RouteDecorator], ft.RouteDecorator]: """Shortcut for :meth:`route` with ``methods=["PATCH"]``. .. versionadded:: 2.0 """ return self._method_route("PATCH", rule, options) - def route(self, rule: str, **options: t.Any) -> t.Callable: + def route( + self, rule: str, **options: t.Any + ) -> t.Callable[[ft.RouteDecorator], ft.RouteDecorator]: """Decorate a view function to register it with the given URL rule and options. Calls :meth:`add_url_rule`, which has more details about the implementation. @@ -462,7 +469,7 @@ class Scaffold: :class:`~werkzeug.routing.Rule` object. """ - def decorator(f: t.Callable) -> t.Callable: + def decorator(f: ft.RouteDecorator) -> ft.RouteDecorator: endpoint = options.pop("endpoint", None) self.add_url_rule(rule, endpoint, f, **options) return f @@ -474,7 +481,7 @@ class Scaffold: self, rule: str, endpoint: t.Optional[str] = None, - view_func: t.Optional[t.Callable] = None, + view_func: t.Optional[ft.ViewCallable] = None, provide_automatic_options: t.Optional[bool] = None, **options: t.Any, ) -> None: @@ -561,7 +568,7 @@ class Scaffold: return decorator @setupmethod - def before_request(self, f: BeforeRequestCallable) -> BeforeRequestCallable: + def before_request(self, f: ft.BeforeRequestCallable) -> ft.BeforeRequestCallable: """Register a function to run before each request. For example, this can be used to open a database connection, or @@ -583,7 +590,7 @@ class Scaffold: return f @setupmethod - def after_request(self, f: AfterRequestCallable) -> AfterRequestCallable: + def after_request(self, f: ft.AfterRequestCallable) -> ft.AfterRequestCallable: """Register a function to run after each request to this object. The function is called with the response object, and must return @@ -599,7 +606,7 @@ class Scaffold: return f @setupmethod - def teardown_request(self, f: TeardownCallable) -> TeardownCallable: + def teardown_request(self, f: ft.TeardownCallable) -> ft.TeardownCallable: """Register a function to be run at the end of each request, regardless of whether there was an exception or not. These functions are executed when the request context is popped, even if not an @@ -617,10 +624,10 @@ class Scaffold: stack of active contexts. This becomes relevant if you are using such constructs in tests. - Teardown functions must avoid raising exceptions, since they . If they - execute code that might fail they - will have to surround the execution of these code by try/except - statements and log occurring errors. + Teardown functions must avoid raising exceptions. If + they execute code that might fail they + will have to surround the execution of that code with try/except + statements and log any errors. When a teardown function was called because of an exception it will be passed an error object. @@ -639,16 +646,16 @@ class Scaffold: @setupmethod def context_processor( - self, f: TemplateContextProcessorCallable - ) -> TemplateContextProcessorCallable: + self, f: ft.TemplateContextProcessorCallable + ) -> ft.TemplateContextProcessorCallable: """Registers a template context processor function.""" self.template_context_processors[None].append(f) return f @setupmethod def url_value_preprocessor( - self, f: URLValuePreprocessorCallable - ) -> URLValuePreprocessorCallable: + self, f: ft.URLValuePreprocessorCallable + ) -> ft.URLValuePreprocessorCallable: """Register a URL value preprocessor function for all view functions in the application. These functions will be called before the :meth:`before_request` functions. @@ -665,7 +672,7 @@ class Scaffold: return f @setupmethod - def url_defaults(self, f: URLDefaultCallable) -> URLDefaultCallable: + def url_defaults(self, f: ft.URLDefaultCallable) -> ft.URLDefaultCallable: """Callback function for URL defaults for all view functions of the application. It's called with the endpoint and values and should update the values passed in place. @@ -675,11 +682,8 @@ class Scaffold: @setupmethod def errorhandler( - self, code_or_exception: t.Union[t.Type[GenericException], int] - ) -> t.Callable[ - ["ErrorHandlerCallable[GenericException]"], - "ErrorHandlerCallable[GenericException]", - ]: + self, code_or_exception: t.Union[t.Type[Exception], int] + ) -> t.Callable[[ft.ErrorHandlerDecorator], ft.ErrorHandlerDecorator]: """Register a function to handle errors by code or exception class. A decorator that is used to register a function given an @@ -709,9 +713,7 @@ class Scaffold: an arbitrary exception """ - def decorator( - f: "ErrorHandlerCallable[GenericException]", - ) -> "ErrorHandlerCallable[GenericException]": + def decorator(f: ft.ErrorHandlerDecorator) -> ft.ErrorHandlerDecorator: self.register_error_handler(code_or_exception, f) return f @@ -720,8 +722,8 @@ class Scaffold: @setupmethod def register_error_handler( self, - code_or_exception: t.Union[t.Type[GenericException], int], - f: "ErrorHandlerCallable[GenericException]", + code_or_exception: t.Union[t.Type[Exception], int], + f: ft.ErrorHandlerCallable, ) -> None: """Alternative error attach function to the :meth:`errorhandler` decorator that is more straightforward to use for non decorator @@ -745,9 +747,7 @@ class Scaffold: " instead." ) from None - self.error_handler_spec[None][code][exc_class] = t.cast( - "ErrorHandlerCallable[Exception]", f - ) + self.error_handler_spec[None][code][exc_class] = f @staticmethod def _get_exc_class_and_code( @@ -809,30 +809,55 @@ def _matching_loader_thinks_module_is_package(loader, mod_name): ) -def _find_package_path(root_mod_name): +def _path_is_relative_to(path: pathlib.PurePath, base: str) -> bool: + # Path.is_relative_to doesn't exist until Python 3.9 + try: + path.relative_to(base) + return True + except ValueError: + return False + + +def _find_package_path(import_name): """Find the path that contains the package or module.""" + root_mod_name, _, _ = import_name.partition(".") + try: - spec = importlib.util.find_spec(root_mod_name) + root_spec = importlib.util.find_spec(root_mod_name) - if spec is None: + if root_spec is None: raise ValueError("not found") # ImportError: the machinery told us it does not exist # ValueError: # - the module name was invalid # - the module name is __main__ - # - *we* raised `ValueError` due to `spec` being `None` + # - *we* raised `ValueError` due to `root_spec` being `None` except (ImportError, ValueError): pass # handled below else: # namespace package - if spec.origin in {"namespace", None}: - return os.path.dirname(next(iter(spec.submodule_search_locations))) + if root_spec.origin in {"namespace", None}: + package_spec = importlib.util.find_spec(import_name) + if package_spec is not None and package_spec.submodule_search_locations: + # Pick the path in the namespace that contains the submodule. + package_path = pathlib.Path( + os.path.commonpath(package_spec.submodule_search_locations) + ) + search_locations = ( + location + for location in root_spec.submodule_search_locations + if _path_is_relative_to(package_path, location) + ) + else: + # Pick the first path. + search_locations = iter(root_spec.submodule_search_locations) + return os.path.dirname(next(search_locations)) # a package (with __init__.py) - elif spec.submodule_search_locations: - return os.path.dirname(os.path.dirname(spec.origin)) + elif root_spec.submodule_search_locations: + return os.path.dirname(os.path.dirname(root_spec.origin)) # just a normal module else: - return os.path.dirname(spec.origin) + return os.path.dirname(root_spec.origin) # we were unable to find the `package_path` using PEP 451 loaders loader = pkgutil.get_loader(root_mod_name) @@ -874,12 +899,11 @@ def find_package(import_name: str): for import. If the package is not installed, it's assumed that the package was imported from the current working directory. """ - root_mod_name, _, _ = import_name.partition(".") - package_path = _find_package_path(root_mod_name) + package_path = _find_package_path(import_name) py_prefix = os.path.abspath(sys.prefix) # installed to the system - if package_path.startswith(py_prefix): + if _path_is_relative_to(pathlib.PurePath(package_path), py_prefix): return py_prefix, package_path site_parent, site_folder = os.path.split(package_path) diff --git a/contrib/python/Flask/py3/flask/sessions.py b/contrib/python/Flask/py3/flask/sessions.py index 20648deadb..4e19270e0d 100644 --- a/contrib/python/Flask/py3/flask/sessions.py +++ b/contrib/python/Flask/py3/flask/sessions.py @@ -383,13 +383,19 @@ class SecureCookieSessionInterface(SessionInterface): path = self.get_cookie_path(app) secure = self.get_cookie_secure(app) samesite = self.get_cookie_samesite(app) + httponly = self.get_cookie_httponly(app) # If the session is modified to be empty, remove the cookie. # If the session is empty, return without setting the cookie. if not session: if session.modified: response.delete_cookie( - name, domain=domain, path=path, secure=secure, samesite=samesite + name, + domain=domain, + path=path, + secure=secure, + samesite=samesite, + httponly=httponly, ) return @@ -401,7 +407,6 @@ class SecureCookieSessionInterface(SessionInterface): if not self.should_set_cookie(app, session): return - httponly = self.get_cookie_httponly(app) expires = self.get_expiration_time(app, session) val = self.get_signing_serializer(app).dumps(dict(session)) # type: ignore response.set_cookie( diff --git a/contrib/python/Flask/py3/flask/templating.py b/contrib/python/Flask/py3/flask/templating.py index bb3e7fd5dd..507615c5cc 100644 --- a/contrib/python/Flask/py3/flask/templating.py +++ b/contrib/python/Flask/py3/flask/templating.py @@ -131,7 +131,8 @@ def _render(template: Template, context: dict, app: "Flask") -> str: def render_template( - template_name_or_list: t.Union[str, t.List[str]], **context: t.Any + template_name_or_list: t.Union[str, Template, t.List[t.Union[str, Template]]], + **context: t.Any ) -> str: """Renders a template from the template folder with the given context. @@ -143,6 +144,12 @@ def render_template( context of the template. """ ctx = _app_ctx_stack.top + + if ctx is None: + raise RuntimeError( + "This function can only be used when an application context is active." + ) + ctx.app.update_template_context(context) return _render( ctx.app.jinja_env.get_or_select_template(template_name_or_list), @@ -161,5 +168,11 @@ def render_template_string(source: str, **context: t.Any) -> str: context of the template. """ ctx = _app_ctx_stack.top + + if ctx is None: + raise RuntimeError( + "This function can only be used when an application context is active." + ) + ctx.app.update_template_context(context) return _render(ctx.app.jinja_env.from_string(source), context, ctx.app) diff --git a/contrib/python/Flask/py3/flask/testing.py b/contrib/python/Flask/py3/flask/testing.py index 1b35cc7a0b..e07e50e7a2 100644 --- a/contrib/python/Flask/py3/flask/testing.py +++ b/contrib/python/Flask/py3/flask/testing.py @@ -172,6 +172,22 @@ class FlaskClient(Client): headers = resp.get_wsgi_headers(c.request.environ) self.cookie_jar.extract_wsgi(c.request.environ, headers) + def _copy_environ(self, other): + return { + **self.environ_base, + **other, + "flask._preserve_context": self.preserve_context, + } + + def _request_from_builder_args(self, args, kwargs): + kwargs["environ_base"] = self._copy_environ(kwargs.get("environ_base", {})) + builder = EnvironBuilder(self.application, *args, **kwargs) + + try: + return builder.get_request() + finally: + builder.close() + def open( self, *args: t.Any, @@ -179,64 +195,30 @@ class FlaskClient(Client): follow_redirects: bool = False, **kwargs: t.Any, ) -> "TestResponse": - as_tuple = kwargs.pop("as_tuple", None) - - # Same logic as super.open, but apply environ_base and preserve_context. - request = None - - def copy_environ(other): - return { - **self.environ_base, - **other, - "flask._preserve_context": self.preserve_context, - } - - if not kwargs and len(args) == 1: - arg = args[0] - - if isinstance(arg, werkzeug.test.EnvironBuilder): - builder = copy(arg) - builder.environ_base = copy_environ(builder.environ_base or {}) + if args and isinstance( + args[0], (werkzeug.test.EnvironBuilder, dict, BaseRequest) + ): + if isinstance(args[0], werkzeug.test.EnvironBuilder): + builder = copy(args[0]) + builder.environ_base = self._copy_environ(builder.environ_base or {}) request = builder.get_request() - elif isinstance(arg, dict): + elif isinstance(args[0], dict): request = EnvironBuilder.from_environ( - arg, app=self.application, environ_base=copy_environ({}) + args[0], app=self.application, environ_base=self._copy_environ({}) ).get_request() - elif isinstance(arg, BaseRequest): - request = copy(arg) - request.environ = copy_environ(request.environ) - - if request is None: - kwargs["environ_base"] = copy_environ(kwargs.get("environ_base", {})) - builder = EnvironBuilder(self.application, *args, **kwargs) - - try: - request = builder.get_request() - finally: - builder.close() - - if as_tuple is not None: - import warnings - - warnings.warn( - "'as_tuple' is deprecated and will be removed in" - " Werkzeug 2.1 and Flask 2.1. Use" - " 'response.request.environ' instead.", - DeprecationWarning, - stacklevel=3, - ) - return super().open( - request, - as_tuple=as_tuple, - buffered=buffered, - follow_redirects=follow_redirects, - ) + else: + # isinstance(args[0], BaseRequest) + request = copy(args[0]) + request.environ = self._copy_environ(request.environ) else: - return super().open( - request, - buffered=buffered, - follow_redirects=follow_redirects, - ) + # request is None + request = self._request_from_builder_args(args, kwargs) + + return super().open( + request, + buffered=buffered, + follow_redirects=follow_redirects, + ) def __enter__(self) -> "FlaskClient": if self.preserve_context: @@ -245,7 +227,10 @@ class FlaskClient(Client): return self def __exit__( - self, exc_type: type, exc_value: BaseException, tb: TracebackType + self, + exc_type: t.Optional[type], + exc_value: t.Optional[BaseException], + tb: t.Optional[TracebackType], ) -> None: self.preserve_context = False diff --git a/contrib/python/Flask/py3/flask/typing.py b/contrib/python/Flask/py3/flask/typing.py index 93896f806c..e6d67f2077 100644 --- a/contrib/python/Flask/py3/flask/typing.py +++ b/contrib/python/Flask/py3/flask/typing.py @@ -1,42 +1,40 @@ import typing as t - if t.TYPE_CHECKING: from _typeshed.wsgi import WSGIApplication # noqa: F401 from werkzeug.datastructures import Headers # noqa: F401 - from .wrappers import Response # noqa: F401 + from werkzeug.wrappers import Response # noqa: F401 # The possible types that are directly convertible or are a Response object. -ResponseValue = t.Union[ - "Response", - t.AnyStr, - t.Dict[str, t.Any], # any jsonify-able dict - t.Generator[t.AnyStr, None, None], -] -StatusCode = int +ResponseValue = t.Union["Response", str, bytes, t.Dict[str, t.Any]] # the possible types for an individual HTTP header -HeaderName = str +# This should be a Union, but mypy doesn't pass unless it's a TypeVar. HeaderValue = t.Union[str, t.List[str], t.Tuple[str, ...]] # the possible types for HTTP headers HeadersValue = t.Union[ - "Headers", t.Dict[HeaderName, HeaderValue], t.List[t.Tuple[HeaderName, HeaderValue]] + "Headers", + t.Mapping[str, HeaderValue], + t.Sequence[t.Tuple[str, HeaderValue]], ] # The possible types returned by a route function. ResponseReturnValue = t.Union[ ResponseValue, t.Tuple[ResponseValue, HeadersValue], - t.Tuple[ResponseValue, StatusCode], - t.Tuple[ResponseValue, StatusCode, HeadersValue], + t.Tuple[ResponseValue, int], + t.Tuple[ResponseValue, int, HeadersValue], "WSGIApplication", ] -GenericException = t.TypeVar("GenericException", bound=Exception, contravariant=True) +# Allow any subclass of werkzeug.Response, such as the one from Flask, +# as a callback argument. Using werkzeug.Response directly makes a +# callback annotated with flask.Response fail type checking. +ResponseClass = t.TypeVar("ResponseClass", bound="Response") AppOrBlueprintKey = t.Optional[str] # The App key is None, whereas blueprints are named -AfterRequestCallable = t.Callable[["Response"], "Response"] +AfterRequestCallable = t.Callable[[ResponseClass], ResponseClass] BeforeFirstRequestCallable = t.Callable[[], None] BeforeRequestCallable = t.Callable[[], t.Optional[ResponseReturnValue]] TeardownCallable = t.Callable[[t.Optional[BaseException]], None] @@ -46,4 +44,15 @@ TemplateGlobalCallable = t.Callable[..., t.Any] TemplateTestCallable = t.Callable[..., bool] URLDefaultCallable = t.Callable[[str, dict], None] URLValuePreprocessorCallable = t.Callable[[t.Optional[str], t.Optional[dict]], None] -ErrorHandlerCallable = t.Callable[[GenericException], ResponseReturnValue] + +# This should take Exception, but that either breaks typing the argument +# with a specific exception, or decorating multiple times with different +# exceptions (and using a union type on the argument). +# https://github.com/pallets/flask/issues/4095 +# https://github.com/pallets/flask/issues/4295 +# https://github.com/pallets/flask/issues/4297 +ErrorHandlerCallable = t.Callable[[t.Any], ResponseReturnValue] +ErrorHandlerDecorator = t.TypeVar("ErrorHandlerDecorator", bound=ErrorHandlerCallable) + +ViewCallable = t.Callable[..., ResponseReturnValue] +RouteDecorator = t.TypeVar("RouteDecorator", bound=ViewCallable) diff --git a/contrib/python/Flask/py3/flask/views.py b/contrib/python/Flask/py3/flask/views.py index 1bd5c68b06..1dd560c62b 100644 --- a/contrib/python/Flask/py3/flask/views.py +++ b/contrib/python/Flask/py3/flask/views.py @@ -1,8 +1,8 @@ import typing as t +from . import typing as ft from .globals import current_app from .globals import request -from .typing import ResponseReturnValue http_method_funcs = frozenset( @@ -59,7 +59,7 @@ class View: #: .. versionadded:: 0.8 decorators: t.List[t.Callable] = [] - def dispatch_request(self) -> ResponseReturnValue: + def dispatch_request(self) -> ft.ResponseReturnValue: """Subclasses have to override this method to implement the actual view function code. This method is called with all the arguments from the URL rule. @@ -79,7 +79,7 @@ class View: constructor of the class. """ - def view(*args: t.Any, **kwargs: t.Any) -> ResponseReturnValue: + def view(*args: t.Any, **kwargs: t.Any) -> ft.ResponseReturnValue: self = view.view_class(*class_args, **class_kwargs) # type: ignore return current_app.ensure_sync(self.dispatch_request)(*args, **kwargs) @@ -146,7 +146,7 @@ class MethodView(View, metaclass=MethodViewType): app.add_url_rule('/counter', view_func=CounterAPI.as_view('counter')) """ - def dispatch_request(self, *args: t.Any, **kwargs: t.Any) -> ResponseReturnValue: + def dispatch_request(self, *args: t.Any, **kwargs: t.Any) -> ft.ResponseReturnValue: meth = getattr(self, request.method.lower(), None) # If the request method is HEAD and we don't have a handler for it diff --git a/contrib/python/Flask/py3/flask/wrappers.py b/contrib/python/Flask/py3/flask/wrappers.py index 47dbe5c8d8..7153876b8d 100644 --- a/contrib/python/Flask/py3/flask/wrappers.py +++ b/contrib/python/Flask/py3/flask/wrappers.py @@ -9,7 +9,6 @@ from .globals import current_app from .helpers import _split_blueprint_path if t.TYPE_CHECKING: - import typing_extensions as te from werkzeug.routing import Rule @@ -110,7 +109,7 @@ class Request(RequestBase): return _split_blueprint_path(name) def _load_form_data(self) -> None: - RequestBase._load_form_data(self) + super()._load_form_data() # In debug mode we're replacing the files multidict with an ad-hoc # subclass that raises a different error for key errors. @@ -124,11 +123,14 @@ class Request(RequestBase): attach_enctype_error_multidict(self) - def on_json_loading_failed(self, e: Exception) -> "te.NoReturn": - if current_app and current_app.debug: - raise BadRequest(f"Failed to decode JSON object: {e}") + def on_json_loading_failed(self, e: t.Optional[ValueError]) -> t.Any: + try: + return super().on_json_loading_failed(e) + except BadRequest as e: + if current_app and current_app.debug: + raise - raise BadRequest() + raise BadRequest() from e class Response(ResponseBase): @@ -153,6 +155,8 @@ class Response(ResponseBase): json_module = json + autocorrect_location_header = False + @property def max_cookie_size(self) -> int: # type: ignore """Read-only view of the :data:`MAX_COOKIE_SIZE` config key. diff --git a/contrib/python/Flask/py3/ya.make b/contrib/python/Flask/py3/ya.make index 1a447d7cbf..fb57b6362c 100644 --- a/contrib/python/Flask/py3/ya.make +++ b/contrib/python/Flask/py3/ya.make @@ -2,7 +2,7 @@ PY3_LIBRARY() -VERSION(2.0.3) +VERSION(2.1.3) LICENSE(BSD-3-Clause) diff --git a/contrib/python/botocore/py2/tests/ya.make b/contrib/python/botocore/py2/tests/ya.make index 6f37af111c..ccc32a5d1d 100644 --- a/contrib/python/botocore/py2/tests/ya.make +++ b/contrib/python/botocore/py2/tests/ya.make @@ -1,5 +1,7 @@ PY2TEST() +NO_LINT() + TEST_SRCS( SQS-119.py ) diff --git a/contrib/python/clickhouse-connect/.dist-info/METADATA b/contrib/python/clickhouse-connect/.dist-info/METADATA index 0d75e95b0e..a652118c3c 100644 --- a/contrib/python/clickhouse-connect/.dist-info/METADATA +++ b/contrib/python/clickhouse-connect/.dist-info/METADATA @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: clickhouse-connect -Version: 0.7.7 +Version: 0.7.8 Summary: ClickHouse Database Core Driver for Python, Pandas, and Superset Home-page: https://github.com/ClickHouse/clickhouse-connect Author: ClickHouse Inc. @@ -33,6 +33,8 @@ Provides-Extra: pandas Requires-Dist: pandas ; extra == 'pandas' Provides-Extra: sqlalchemy Requires-Dist: sqlalchemy <2.0,>1.3.21 ; extra == 'sqlalchemy' +Provides-Extra: tzlocal +Requires-Dist: tzlocal ; extra == 'tzlocal' ## ClickHouse Connect diff --git a/contrib/python/clickhouse-connect/clickhouse_connect/__version__.py b/contrib/python/clickhouse-connect/clickhouse_connect/__version__.py index 9e59d8f8e1..a83c69d4e1 100644 --- a/contrib/python/clickhouse-connect/clickhouse_connect/__version__.py +++ b/contrib/python/clickhouse-connect/clickhouse_connect/__version__.py @@ -1 +1 @@ -version = '0.7.7' +version = '0.7.8' diff --git a/contrib/python/clickhouse-connect/clickhouse_connect/driver/client.py b/contrib/python/clickhouse-connect/clickhouse_connect/driver/client.py index 3cce716372..f329b396cb 100644 --- a/contrib/python/clickhouse-connect/clickhouse_connect/driver/client.py +++ b/contrib/python/clickhouse-connect/clickhouse_connect/driver/client.py @@ -1,6 +1,6 @@ import io import logging -from datetime import tzinfo, datetime +from datetime import tzinfo import pytz @@ -12,6 +12,7 @@ from clickhouse_connect import common from clickhouse_connect.common import version from clickhouse_connect.datatypes.registry import get_from_name from clickhouse_connect.datatypes.base import ClickHouseType +from clickhouse_connect.driver import tzutil from clickhouse_connect.driver.common import dict_copy, StreamContext, coerce_int, coerce_bool from clickhouse_connect.driver.constants import CH_VERSION_WITH_PROTOCOL, PROTOCOL_VERSION_WITH_LOW_CARD from clickhouse_connect.driver.exceptions import ProgrammingError, OperationalError @@ -39,6 +40,7 @@ class Client(ABC): optional_transport_settings = set() database = None max_error_message = 0 + apply_server_timezone = False def __init__(self, database: str, @@ -56,16 +58,21 @@ class Client(ABC): self.query_limit = coerce_int(query_limit) self.query_retries = coerce_int(query_retries) self.server_host_name = server_host_name - self.server_tz = pytz.UTC + self.server_tz, dst_safe = pytz.UTC, True self.server_version, server_tz = \ tuple(self.command('SELECT version(), timezone()', use_database=False)) try: - self.server_tz = pytz.timezone(server_tz) + server_tz = pytz.timezone(server_tz) + server_tz, dst_safe = tzutil.normalize_timezone(server_tz) + if apply_server_timezone is None: + apply_server_timezone = dst_safe + self.apply_server_timezone = apply_server_timezone == 'always' or coerce_bool(apply_server_timezone) except UnknownTimeZoneError: logger.warning('Warning, server is using an unrecognized timezone %s, will use UTC default', server_tz) - offsets_differ = datetime.now().astimezone().utcoffset() != datetime.now(tz=self.server_tz).utcoffset() - self.apply_server_timezone = apply_server_timezone == 'always' or ( - coerce_bool(apply_server_timezone) and offsets_differ) + + if not self.apply_server_timezone and not tzutil.local_tz_dst_safe: + logger.warning('local timezone %s may return unexpected times due to Daylight Savings Time/' + + 'Summer Time differences', tzutil.local_tz.tzname()) readonly = 'readonly' if not self.min_version('19.17'): readonly = common.get_setting('readonly') diff --git a/contrib/python/clickhouse-connect/clickhouse_connect/driver/context.py b/contrib/python/clickhouse-connect/clickhouse_connect/driver/context.py index 7984fbeebb..ad2b0d38d1 100644 --- a/contrib/python/clickhouse-connect/clickhouse_connect/driver/context.py +++ b/contrib/python/clickhouse-connect/clickhouse_connect/driver/context.py @@ -1,10 +1,7 @@ import logging import re -from datetime import datetime from typing import Optional, Dict, Union, Any -import pytz - logger = logging.getLogger(__name__) _empty_map = {} @@ -12,7 +9,6 @@ _empty_map = {} # pylint: disable=too-many-instance-attributes class BaseQueryContext: - local_tz: pytz.timezone def __init__(self, settings: Optional[Dict[str, Any]] = None, @@ -60,13 +56,3 @@ class BaseQueryContext: if type_pattern.match(ch_type): return fmt return None - - -def _init_context_cls(): - local_tz = datetime.now().astimezone().tzinfo - if local_tz.tzname(datetime.now()) in ('UTC', 'GMT', 'Universal', 'GMT-0', 'Zulu', 'Greenwich'): - local_tz = pytz.UTC - BaseQueryContext.local_tz = local_tz - - -_init_context_cls() diff --git a/contrib/python/clickhouse-connect/clickhouse_connect/driver/httpclient.py b/contrib/python/clickhouse-connect/clickhouse_connect/driver/httpclient.py index 7202bc2ef5..a98035d839 100644 --- a/contrib/python/clickhouse-connect/clickhouse_connect/driver/httpclient.py +++ b/contrib/python/clickhouse-connect/clickhouse_connect/driver/httpclient.py @@ -68,7 +68,7 @@ class HttpClient(Client): http_proxy: Optional[str] = None, https_proxy: Optional[str] = None, server_host_name: Optional[str] = None, - apply_server_timezone: Optional[Union[str, bool]] = True): + apply_server_timezone: Optional[Union[str, bool]] = None): """ Create an HTTP ClickHouse Connect client See clickhouse_connect.get_client for parameters diff --git a/contrib/python/clickhouse-connect/clickhouse_connect/driver/npquery.py b/contrib/python/clickhouse-connect/clickhouse_connect/driver/npquery.py index 513c81a572..64199e0b24 100644 --- a/contrib/python/clickhouse-connect/clickhouse_connect/driver/npquery.py +++ b/contrib/python/clickhouse-connect/clickhouse_connect/driver/npquery.py @@ -96,10 +96,13 @@ class NumpyResult(Closable): def close_df(self): if self._block_gen is None: raise StreamClosedError - chains = [itertools.chain(b) for b in zip(*self._block_gen)] + bg = self._block_gen + chain = itertools.chain + chains = [chain(b) for b in zip(*bg)] new_df_series = [] for c in chains: - new_df_series.append(pd.concat([pd.Series(piece, copy=False) for piece in c], copy=False)) + new_df_series.append(pd.concat([pd.Series(piece, copy=False) for piece in c], + copy=False, ignore_index=True)) self._df_result = pd.DataFrame(dict(zip(self.column_names, new_df_series))) self.close() return self diff --git a/contrib/python/clickhouse-connect/clickhouse_connect/driver/query.py b/contrib/python/clickhouse-connect/clickhouse_connect/driver/query.py index 42957d8eb8..ddb413e193 100644 --- a/contrib/python/clickhouse-connect/clickhouse_connect/driver/query.py +++ b/contrib/python/clickhouse-connect/clickhouse_connect/driver/query.py @@ -12,6 +12,7 @@ from datetime import date, datetime, tzinfo from pytz.exceptions import UnknownTimeZoneError from clickhouse_connect import common +from clickhouse_connect.driver import tzutil from clickhouse_connect.driver.common import dict_copy, empty_gen, StreamContext from clickhouse_connect.driver.external import ExternalData from clickhouse_connect.driver.types import Matrix, Closable @@ -170,7 +171,7 @@ class QueryContext(BaseQueryContext): elif self.apply_server_tz: active_tz = self.server_tz else: - active_tz = self.local_tz + active_tz = tzutil.local_tz if active_tz == pytz.UTC: return None return active_tz @@ -440,8 +441,7 @@ def format_bind_value(value: Any, server_tz: tzinfo = pytz.UTC, top_level: bool return escape_str(value) return format_str(value) if isinstance(value, datetime): - if value.tzinfo is None: - value = value.replace(tzinfo=server_tz) + value = value.astimezone(server_tz) val = value.strftime('%Y-%m-%d %H:%M:%S') if top_level: return val diff --git a/contrib/python/clickhouse-connect/clickhouse_connect/driver/tzutil.py b/contrib/python/clickhouse-connect/clickhouse_connect/driver/tzutil.py new file mode 100644 index 0000000000..c27b51dd72 --- /dev/null +++ b/contrib/python/clickhouse-connect/clickhouse_connect/driver/tzutil.py @@ -0,0 +1,41 @@ +import os +from datetime import datetime +from typing import Tuple + +import pytz + +tzlocal = None +try: + import tzlocal # Maybe we can use the tzlocal module to get a safe timezone +except ImportError: + pass + +# Set the local timezone for DateTime conversions. Note in most cases we want to use either UTC or the server +# timezone, but if someone insists on using the local timezone we will try to convert. The problem is we +# never have anything but an epoch timestamp returned from ClickHouse, so attempts to convert times when the +# local timezone is "DST" aware (like 'CEST' vs 'CET') will be wrong approximately half the time +local_tz: pytz.timezone +local_tz_dst_safe: bool = False + + +def normalize_timezone(timezone: pytz.timezone) -> Tuple[pytz.timezone, bool]: + if timezone.tzname(None) in ('UTC', 'GMT', 'Universal', 'GMT-0', 'Zulu', 'Greenwich'): + return pytz.UTC, True + + if timezone.tzname(None) in pytz.common_timezones: + return timezone, True + + if tzlocal is not None: # Maybe we can use the tzlocal module to get a safe timezone + local_name = tzlocal.get_localzone_name() + if local_name in pytz.common_timezones: + return pytz.timezone(local_name), True + + return timezone, False + + +try: + local_tz = pytz.timezone(os.environ.get('TZ', '')) +except pytz.UnknownTimeZoneError: + local_tz = datetime.now().astimezone().tzinfo + +local_tz, local_tz_dst_safe = normalize_timezone(local_tz) diff --git a/contrib/python/clickhouse-connect/ya.make b/contrib/python/clickhouse-connect/ya.make index c48e09768d..58d1ae9876 100644 --- a/contrib/python/clickhouse-connect/ya.make +++ b/contrib/python/clickhouse-connect/ya.make @@ -2,7 +2,7 @@ PY3_LIBRARY() -VERSION(0.7.7) +VERSION(0.7.8) LICENSE(Apache-2.0) @@ -78,6 +78,7 @@ PY_SRCS( clickhouse_connect/driver/tools.py clickhouse_connect/driver/transform.py clickhouse_connect/driver/types.py + clickhouse_connect/driver/tzutil.py clickhouse_connect/driverc/__init__.py clickhouse_connect/entry_points.py clickhouse_connect/json_impl.py diff --git a/contrib/python/idna/py3/.dist-info/METADATA b/contrib/python/idna/py3/.dist-info/METADATA index 9be8060939..b28f6ecdd5 100644 --- a/contrib/python/idna/py3/.dist-info/METADATA +++ b/contrib/python/idna/py3/.dist-info/METADATA @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: idna -Version: 3.6 +Version: 3.7 Summary: Internationalized Domain Names in Applications (IDNA) Author-email: Kim Davies <kim+pypi@gumleaf.org> Requires-Python: >=3.5 diff --git a/contrib/python/idna/py3/LICENSE.md b/contrib/python/idna/py3/LICENSE.md index ce3670186c..19b6b45242 100644 --- a/contrib/python/idna/py3/LICENSE.md +++ b/contrib/python/idna/py3/LICENSE.md @@ -1,6 +1,6 @@ BSD 3-Clause License -Copyright (c) 2013-2023, Kim Davies and contributors. +Copyright (c) 2013-2024, Kim Davies and contributors. All rights reserved. Redistribution and use in source and binary forms, with or without diff --git a/contrib/python/idna/py3/idna/core.py b/contrib/python/idna/py3/idna/core.py index aaf7d658ba..0dae61acdb 100644 --- a/contrib/python/idna/py3/idna/core.py +++ b/contrib/python/idna/py3/idna/core.py @@ -150,9 +150,11 @@ def valid_contextj(label: str, pos: int) -> bool: joining_type = idnadata.joining_types.get(ord(label[i])) if joining_type == ord('T'): continue - if joining_type in [ord('L'), ord('D')]: + elif joining_type in [ord('L'), ord('D')]: ok = True break + else: + break if not ok: return False @@ -162,9 +164,11 @@ def valid_contextj(label: str, pos: int) -> bool: joining_type = idnadata.joining_types.get(ord(label[i])) if joining_type == ord('T'): continue - if joining_type in [ord('R'), ord('D')]: + elif joining_type in [ord('R'), ord('D')]: ok = True break + else: + break return ok if cp_value == 0x200d: @@ -236,12 +240,8 @@ def check_label(label: Union[str, bytes, bytearray]) -> None: if intranges_contain(cp_value, idnadata.codepoint_classes['PVALID']): continue elif intranges_contain(cp_value, idnadata.codepoint_classes['CONTEXTJ']): - try: - if not valid_contextj(label, pos): - raise InvalidCodepointContext('Joiner {} not allowed at position {} in {}'.format( - _unot(cp_value), pos+1, repr(label))) - except ValueError: - raise IDNAError('Unknown codepoint adjacent to joiner {} at position {} in {}'.format( + if not valid_contextj(label, pos): + raise InvalidCodepointContext('Joiner {} not allowed at position {} in {}'.format( _unot(cp_value), pos+1, repr(label))) elif intranges_contain(cp_value, idnadata.codepoint_classes['CONTEXTO']): if not valid_contexto(label, pos): @@ -262,13 +262,8 @@ def alabel(label: str) -> bytes: except UnicodeEncodeError: pass - if not label: - raise IDNAError('No Input') - - label = str(label) check_label(label) - label_bytes = _punycode(label) - label_bytes = _alabel_prefix + label_bytes + label_bytes = _alabel_prefix + _punycode(label) if not valid_label_length(label_bytes): raise IDNAError('Label too long') diff --git a/contrib/python/idna/py3/idna/idnadata.py b/contrib/python/idna/py3/idna/idnadata.py index 5cd05d9056..c61dcf977e 100644 --- a/contrib/python/idna/py3/idna/idnadata.py +++ b/contrib/python/idna/py3/idna/idnadata.py @@ -101,16 +101,190 @@ scripts = { ), } joining_types = { - 0x600: 85, - 0x601: 85, - 0x602: 85, - 0x603: 85, - 0x604: 85, - 0x605: 85, - 0x608: 85, - 0x60b: 85, + 0xad: 84, + 0x300: 84, + 0x301: 84, + 0x302: 84, + 0x303: 84, + 0x304: 84, + 0x305: 84, + 0x306: 84, + 0x307: 84, + 0x308: 84, + 0x309: 84, + 0x30a: 84, + 0x30b: 84, + 0x30c: 84, + 0x30d: 84, + 0x30e: 84, + 0x30f: 84, + 0x310: 84, + 0x311: 84, + 0x312: 84, + 0x313: 84, + 0x314: 84, + 0x315: 84, + 0x316: 84, + 0x317: 84, + 0x318: 84, + 0x319: 84, + 0x31a: 84, + 0x31b: 84, + 0x31c: 84, + 0x31d: 84, + 0x31e: 84, + 0x31f: 84, + 0x320: 84, + 0x321: 84, + 0x322: 84, + 0x323: 84, + 0x324: 84, + 0x325: 84, + 0x326: 84, + 0x327: 84, + 0x328: 84, + 0x329: 84, + 0x32a: 84, + 0x32b: 84, + 0x32c: 84, + 0x32d: 84, + 0x32e: 84, + 0x32f: 84, + 0x330: 84, + 0x331: 84, + 0x332: 84, + 0x333: 84, + 0x334: 84, + 0x335: 84, + 0x336: 84, + 0x337: 84, + 0x338: 84, + 0x339: 84, + 0x33a: 84, + 0x33b: 84, + 0x33c: 84, + 0x33d: 84, + 0x33e: 84, + 0x33f: 84, + 0x340: 84, + 0x341: 84, + 0x342: 84, + 0x343: 84, + 0x344: 84, + 0x345: 84, + 0x346: 84, + 0x347: 84, + 0x348: 84, + 0x349: 84, + 0x34a: 84, + 0x34b: 84, + 0x34c: 84, + 0x34d: 84, + 0x34e: 84, + 0x34f: 84, + 0x350: 84, + 0x351: 84, + 0x352: 84, + 0x353: 84, + 0x354: 84, + 0x355: 84, + 0x356: 84, + 0x357: 84, + 0x358: 84, + 0x359: 84, + 0x35a: 84, + 0x35b: 84, + 0x35c: 84, + 0x35d: 84, + 0x35e: 84, + 0x35f: 84, + 0x360: 84, + 0x361: 84, + 0x362: 84, + 0x363: 84, + 0x364: 84, + 0x365: 84, + 0x366: 84, + 0x367: 84, + 0x368: 84, + 0x369: 84, + 0x36a: 84, + 0x36b: 84, + 0x36c: 84, + 0x36d: 84, + 0x36e: 84, + 0x36f: 84, + 0x483: 84, + 0x484: 84, + 0x485: 84, + 0x486: 84, + 0x487: 84, + 0x488: 84, + 0x489: 84, + 0x591: 84, + 0x592: 84, + 0x593: 84, + 0x594: 84, + 0x595: 84, + 0x596: 84, + 0x597: 84, + 0x598: 84, + 0x599: 84, + 0x59a: 84, + 0x59b: 84, + 0x59c: 84, + 0x59d: 84, + 0x59e: 84, + 0x59f: 84, + 0x5a0: 84, + 0x5a1: 84, + 0x5a2: 84, + 0x5a3: 84, + 0x5a4: 84, + 0x5a5: 84, + 0x5a6: 84, + 0x5a7: 84, + 0x5a8: 84, + 0x5a9: 84, + 0x5aa: 84, + 0x5ab: 84, + 0x5ac: 84, + 0x5ad: 84, + 0x5ae: 84, + 0x5af: 84, + 0x5b0: 84, + 0x5b1: 84, + 0x5b2: 84, + 0x5b3: 84, + 0x5b4: 84, + 0x5b5: 84, + 0x5b6: 84, + 0x5b7: 84, + 0x5b8: 84, + 0x5b9: 84, + 0x5ba: 84, + 0x5bb: 84, + 0x5bc: 84, + 0x5bd: 84, + 0x5bf: 84, + 0x5c1: 84, + 0x5c2: 84, + 0x5c4: 84, + 0x5c5: 84, + 0x5c7: 84, + 0x610: 84, + 0x611: 84, + 0x612: 84, + 0x613: 84, + 0x614: 84, + 0x615: 84, + 0x616: 84, + 0x617: 84, + 0x618: 84, + 0x619: 84, + 0x61a: 84, + 0x61c: 84, 0x620: 68, - 0x621: 85, 0x622: 82, 0x623: 82, 0x624: 82, @@ -152,12 +326,33 @@ joining_types = { 0x648: 82, 0x649: 68, 0x64a: 68, + 0x64b: 84, + 0x64c: 84, + 0x64d: 84, + 0x64e: 84, + 0x64f: 84, + 0x650: 84, + 0x651: 84, + 0x652: 84, + 0x653: 84, + 0x654: 84, + 0x655: 84, + 0x656: 84, + 0x657: 84, + 0x658: 84, + 0x659: 84, + 0x65a: 84, + 0x65b: 84, + 0x65c: 84, + 0x65d: 84, + 0x65e: 84, + 0x65f: 84, 0x66e: 68, 0x66f: 68, + 0x670: 84, 0x671: 82, 0x672: 82, 0x673: 82, - 0x674: 85, 0x675: 82, 0x676: 82, 0x677: 82, @@ -254,7 +449,25 @@ joining_types = { 0x6d2: 82, 0x6d3: 82, 0x6d5: 82, - 0x6dd: 85, + 0x6d6: 84, + 0x6d7: 84, + 0x6d8: 84, + 0x6d9: 84, + 0x6da: 84, + 0x6db: 84, + 0x6dc: 84, + 0x6df: 84, + 0x6e0: 84, + 0x6e1: 84, + 0x6e2: 84, + 0x6e3: 84, + 0x6e4: 84, + 0x6e7: 84, + 0x6e8: 84, + 0x6ea: 84, + 0x6eb: 84, + 0x6ec: 84, + 0x6ed: 84, 0x6ee: 82, 0x6ef: 82, 0x6fa: 68, @@ -263,6 +476,7 @@ joining_types = { 0x6ff: 68, 0x70f: 84, 0x710: 82, + 0x711: 84, 0x712: 68, 0x713: 68, 0x714: 68, @@ -293,6 +507,33 @@ joining_types = { 0x72d: 68, 0x72e: 68, 0x72f: 82, + 0x730: 84, + 0x731: 84, + 0x732: 84, + 0x733: 84, + 0x734: 84, + 0x735: 84, + 0x736: 84, + 0x737: 84, + 0x738: 84, + 0x739: 84, + 0x73a: 84, + 0x73b: 84, + 0x73c: 84, + 0x73d: 84, + 0x73e: 84, + 0x73f: 84, + 0x740: 84, + 0x741: 84, + 0x742: 84, + 0x743: 84, + 0x744: 84, + 0x745: 84, + 0x746: 84, + 0x747: 84, + 0x748: 84, + 0x749: 84, + 0x74a: 84, 0x74d: 82, 0x74e: 68, 0x74f: 68, @@ -344,6 +585,17 @@ joining_types = { 0x77d: 68, 0x77e: 68, 0x77f: 68, + 0x7a6: 84, + 0x7a7: 84, + 0x7a8: 84, + 0x7a9: 84, + 0x7aa: 84, + 0x7ab: 84, + 0x7ac: 84, + 0x7ad: 84, + 0x7ae: 84, + 0x7af: 84, + 0x7b0: 84, 0x7ca: 68, 0x7cb: 68, 0x7cc: 68, @@ -377,7 +629,38 @@ joining_types = { 0x7e8: 68, 0x7e9: 68, 0x7ea: 68, + 0x7eb: 84, + 0x7ec: 84, + 0x7ed: 84, + 0x7ee: 84, + 0x7ef: 84, + 0x7f0: 84, + 0x7f1: 84, + 0x7f2: 84, + 0x7f3: 84, 0x7fa: 67, + 0x7fd: 84, + 0x816: 84, + 0x817: 84, + 0x818: 84, + 0x819: 84, + 0x81b: 84, + 0x81c: 84, + 0x81d: 84, + 0x81e: 84, + 0x81f: 84, + 0x820: 84, + 0x821: 84, + 0x822: 84, + 0x823: 84, + 0x825: 84, + 0x826: 84, + 0x827: 84, + 0x829: 84, + 0x82a: 84, + 0x82b: 84, + 0x82c: 84, + 0x82d: 84, 0x840: 82, 0x841: 68, 0x842: 68, @@ -403,13 +686,14 @@ joining_types = { 0x856: 82, 0x857: 82, 0x858: 82, + 0x859: 84, + 0x85a: 84, + 0x85b: 84, 0x860: 68, - 0x861: 85, 0x862: 68, 0x863: 68, 0x864: 68, 0x865: 68, - 0x866: 85, 0x867: 82, 0x868: 68, 0x869: 82, @@ -437,16 +721,20 @@ joining_types = { 0x884: 67, 0x885: 67, 0x886: 68, - 0x887: 85, - 0x888: 85, 0x889: 68, 0x88a: 68, 0x88b: 68, 0x88c: 68, 0x88d: 68, 0x88e: 82, - 0x890: 85, - 0x891: 85, + 0x898: 84, + 0x899: 84, + 0x89a: 84, + 0x89b: 84, + 0x89c: 84, + 0x89d: 84, + 0x89e: 84, + 0x89f: 84, 0x8a0: 68, 0x8a1: 68, 0x8a2: 68, @@ -460,7 +748,6 @@ joining_types = { 0x8aa: 82, 0x8ab: 82, 0x8ac: 82, - 0x8ad: 85, 0x8ae: 82, 0x8af: 68, 0x8b0: 68, @@ -488,11 +775,357 @@ joining_types = { 0x8c6: 68, 0x8c7: 68, 0x8c8: 68, - 0x8e2: 85, - 0x1806: 85, + 0x8ca: 84, + 0x8cb: 84, + 0x8cc: 84, + 0x8cd: 84, + 0x8ce: 84, + 0x8cf: 84, + 0x8d0: 84, + 0x8d1: 84, + 0x8d2: 84, + 0x8d3: 84, + 0x8d4: 84, + 0x8d5: 84, + 0x8d6: 84, + 0x8d7: 84, + 0x8d8: 84, + 0x8d9: 84, + 0x8da: 84, + 0x8db: 84, + 0x8dc: 84, + 0x8dd: 84, + 0x8de: 84, + 0x8df: 84, + 0x8e0: 84, + 0x8e1: 84, + 0x8e3: 84, + 0x8e4: 84, + 0x8e5: 84, + 0x8e6: 84, + 0x8e7: 84, + 0x8e8: 84, + 0x8e9: 84, + 0x8ea: 84, + 0x8eb: 84, + 0x8ec: 84, + 0x8ed: 84, + 0x8ee: 84, + 0x8ef: 84, + 0x8f0: 84, + 0x8f1: 84, + 0x8f2: 84, + 0x8f3: 84, + 0x8f4: 84, + 0x8f5: 84, + 0x8f6: 84, + 0x8f7: 84, + 0x8f8: 84, + 0x8f9: 84, + 0x8fa: 84, + 0x8fb: 84, + 0x8fc: 84, + 0x8fd: 84, + 0x8fe: 84, + 0x8ff: 84, + 0x900: 84, + 0x901: 84, + 0x902: 84, + 0x93a: 84, + 0x93c: 84, + 0x941: 84, + 0x942: 84, + 0x943: 84, + 0x944: 84, + 0x945: 84, + 0x946: 84, + 0x947: 84, + 0x948: 84, + 0x94d: 84, + 0x951: 84, + 0x952: 84, + 0x953: 84, + 0x954: 84, + 0x955: 84, + 0x956: 84, + 0x957: 84, + 0x962: 84, + 0x963: 84, + 0x981: 84, + 0x9bc: 84, + 0x9c1: 84, + 0x9c2: 84, + 0x9c3: 84, + 0x9c4: 84, + 0x9cd: 84, + 0x9e2: 84, + 0x9e3: 84, + 0x9fe: 84, + 0xa01: 84, + 0xa02: 84, + 0xa3c: 84, + 0xa41: 84, + 0xa42: 84, + 0xa47: 84, + 0xa48: 84, + 0xa4b: 84, + 0xa4c: 84, + 0xa4d: 84, + 0xa51: 84, + 0xa70: 84, + 0xa71: 84, + 0xa75: 84, + 0xa81: 84, + 0xa82: 84, + 0xabc: 84, + 0xac1: 84, + 0xac2: 84, + 0xac3: 84, + 0xac4: 84, + 0xac5: 84, + 0xac7: 84, + 0xac8: 84, + 0xacd: 84, + 0xae2: 84, + 0xae3: 84, + 0xafa: 84, + 0xafb: 84, + 0xafc: 84, + 0xafd: 84, + 0xafe: 84, + 0xaff: 84, + 0xb01: 84, + 0xb3c: 84, + 0xb3f: 84, + 0xb41: 84, + 0xb42: 84, + 0xb43: 84, + 0xb44: 84, + 0xb4d: 84, + 0xb55: 84, + 0xb56: 84, + 0xb62: 84, + 0xb63: 84, + 0xb82: 84, + 0xbc0: 84, + 0xbcd: 84, + 0xc00: 84, + 0xc04: 84, + 0xc3c: 84, + 0xc3e: 84, + 0xc3f: 84, + 0xc40: 84, + 0xc46: 84, + 0xc47: 84, + 0xc48: 84, + 0xc4a: 84, + 0xc4b: 84, + 0xc4c: 84, + 0xc4d: 84, + 0xc55: 84, + 0xc56: 84, + 0xc62: 84, + 0xc63: 84, + 0xc81: 84, + 0xcbc: 84, + 0xcbf: 84, + 0xcc6: 84, + 0xccc: 84, + 0xccd: 84, + 0xce2: 84, + 0xce3: 84, + 0xd00: 84, + 0xd01: 84, + 0xd3b: 84, + 0xd3c: 84, + 0xd41: 84, + 0xd42: 84, + 0xd43: 84, + 0xd44: 84, + 0xd4d: 84, + 0xd62: 84, + 0xd63: 84, + 0xd81: 84, + 0xdca: 84, + 0xdd2: 84, + 0xdd3: 84, + 0xdd4: 84, + 0xdd6: 84, + 0xe31: 84, + 0xe34: 84, + 0xe35: 84, + 0xe36: 84, + 0xe37: 84, + 0xe38: 84, + 0xe39: 84, + 0xe3a: 84, + 0xe47: 84, + 0xe48: 84, + 0xe49: 84, + 0xe4a: 84, + 0xe4b: 84, + 0xe4c: 84, + 0xe4d: 84, + 0xe4e: 84, + 0xeb1: 84, + 0xeb4: 84, + 0xeb5: 84, + 0xeb6: 84, + 0xeb7: 84, + 0xeb8: 84, + 0xeb9: 84, + 0xeba: 84, + 0xebb: 84, + 0xebc: 84, + 0xec8: 84, + 0xec9: 84, + 0xeca: 84, + 0xecb: 84, + 0xecc: 84, + 0xecd: 84, + 0xece: 84, + 0xf18: 84, + 0xf19: 84, + 0xf35: 84, + 0xf37: 84, + 0xf39: 84, + 0xf71: 84, + 0xf72: 84, + 0xf73: 84, + 0xf74: 84, + 0xf75: 84, + 0xf76: 84, + 0xf77: 84, + 0xf78: 84, + 0xf79: 84, + 0xf7a: 84, + 0xf7b: 84, + 0xf7c: 84, + 0xf7d: 84, + 0xf7e: 84, + 0xf80: 84, + 0xf81: 84, + 0xf82: 84, + 0xf83: 84, + 0xf84: 84, + 0xf86: 84, + 0xf87: 84, + 0xf8d: 84, + 0xf8e: 84, + 0xf8f: 84, + 0xf90: 84, + 0xf91: 84, + 0xf92: 84, + 0xf93: 84, + 0xf94: 84, + 0xf95: 84, + 0xf96: 84, + 0xf97: 84, + 0xf99: 84, + 0xf9a: 84, + 0xf9b: 84, + 0xf9c: 84, + 0xf9d: 84, + 0xf9e: 84, + 0xf9f: 84, + 0xfa0: 84, + 0xfa1: 84, + 0xfa2: 84, + 0xfa3: 84, + 0xfa4: 84, + 0xfa5: 84, + 0xfa6: 84, + 0xfa7: 84, + 0xfa8: 84, + 0xfa9: 84, + 0xfaa: 84, + 0xfab: 84, + 0xfac: 84, + 0xfad: 84, + 0xfae: 84, + 0xfaf: 84, + 0xfb0: 84, + 0xfb1: 84, + 0xfb2: 84, + 0xfb3: 84, + 0xfb4: 84, + 0xfb5: 84, + 0xfb6: 84, + 0xfb7: 84, + 0xfb8: 84, + 0xfb9: 84, + 0xfba: 84, + 0xfbb: 84, + 0xfbc: 84, + 0xfc6: 84, + 0x102d: 84, + 0x102e: 84, + 0x102f: 84, + 0x1030: 84, + 0x1032: 84, + 0x1033: 84, + 0x1034: 84, + 0x1035: 84, + 0x1036: 84, + 0x1037: 84, + 0x1039: 84, + 0x103a: 84, + 0x103d: 84, + 0x103e: 84, + 0x1058: 84, + 0x1059: 84, + 0x105e: 84, + 0x105f: 84, + 0x1060: 84, + 0x1071: 84, + 0x1072: 84, + 0x1073: 84, + 0x1074: 84, + 0x1082: 84, + 0x1085: 84, + 0x1086: 84, + 0x108d: 84, + 0x109d: 84, + 0x135d: 84, + 0x135e: 84, + 0x135f: 84, + 0x1712: 84, + 0x1713: 84, + 0x1714: 84, + 0x1732: 84, + 0x1733: 84, + 0x1752: 84, + 0x1753: 84, + 0x1772: 84, + 0x1773: 84, + 0x17b4: 84, + 0x17b5: 84, + 0x17b7: 84, + 0x17b8: 84, + 0x17b9: 84, + 0x17ba: 84, + 0x17bb: 84, + 0x17bc: 84, + 0x17bd: 84, + 0x17c6: 84, + 0x17c9: 84, + 0x17ca: 84, + 0x17cb: 84, + 0x17cc: 84, + 0x17cd: 84, + 0x17ce: 84, + 0x17cf: 84, + 0x17d0: 84, + 0x17d1: 84, + 0x17d2: 84, + 0x17d3: 84, + 0x17dd: 84, 0x1807: 68, 0x180a: 67, - 0x180e: 85, + 0x180b: 84, + 0x180c: 84, + 0x180d: 84, + 0x180f: 84, 0x1820: 68, 0x1821: 68, 0x1822: 68, @@ -582,11 +1215,6 @@ joining_types = { 0x1876: 68, 0x1877: 68, 0x1878: 68, - 0x1880: 85, - 0x1881: 85, - 0x1882: 85, - 0x1883: 85, - 0x1884: 85, 0x1885: 84, 0x1886: 84, 0x1887: 68, @@ -623,14 +1251,339 @@ joining_types = { 0x18a6: 68, 0x18a7: 68, 0x18a8: 68, + 0x18a9: 84, 0x18aa: 68, - 0x200c: 85, + 0x1920: 84, + 0x1921: 84, + 0x1922: 84, + 0x1927: 84, + 0x1928: 84, + 0x1932: 84, + 0x1939: 84, + 0x193a: 84, + 0x193b: 84, + 0x1a17: 84, + 0x1a18: 84, + 0x1a1b: 84, + 0x1a56: 84, + 0x1a58: 84, + 0x1a59: 84, + 0x1a5a: 84, + 0x1a5b: 84, + 0x1a5c: 84, + 0x1a5d: 84, + 0x1a5e: 84, + 0x1a60: 84, + 0x1a62: 84, + 0x1a65: 84, + 0x1a66: 84, + 0x1a67: 84, + 0x1a68: 84, + 0x1a69: 84, + 0x1a6a: 84, + 0x1a6b: 84, + 0x1a6c: 84, + 0x1a73: 84, + 0x1a74: 84, + 0x1a75: 84, + 0x1a76: 84, + 0x1a77: 84, + 0x1a78: 84, + 0x1a79: 84, + 0x1a7a: 84, + 0x1a7b: 84, + 0x1a7c: 84, + 0x1a7f: 84, + 0x1ab0: 84, + 0x1ab1: 84, + 0x1ab2: 84, + 0x1ab3: 84, + 0x1ab4: 84, + 0x1ab5: 84, + 0x1ab6: 84, + 0x1ab7: 84, + 0x1ab8: 84, + 0x1ab9: 84, + 0x1aba: 84, + 0x1abb: 84, + 0x1abc: 84, + 0x1abd: 84, + 0x1abe: 84, + 0x1abf: 84, + 0x1ac0: 84, + 0x1ac1: 84, + 0x1ac2: 84, + 0x1ac3: 84, + 0x1ac4: 84, + 0x1ac5: 84, + 0x1ac6: 84, + 0x1ac7: 84, + 0x1ac8: 84, + 0x1ac9: 84, + 0x1aca: 84, + 0x1acb: 84, + 0x1acc: 84, + 0x1acd: 84, + 0x1ace: 84, + 0x1b00: 84, + 0x1b01: 84, + 0x1b02: 84, + 0x1b03: 84, + 0x1b34: 84, + 0x1b36: 84, + 0x1b37: 84, + 0x1b38: 84, + 0x1b39: 84, + 0x1b3a: 84, + 0x1b3c: 84, + 0x1b42: 84, + 0x1b6b: 84, + 0x1b6c: 84, + 0x1b6d: 84, + 0x1b6e: 84, + 0x1b6f: 84, + 0x1b70: 84, + 0x1b71: 84, + 0x1b72: 84, + 0x1b73: 84, + 0x1b80: 84, + 0x1b81: 84, + 0x1ba2: 84, + 0x1ba3: 84, + 0x1ba4: 84, + 0x1ba5: 84, + 0x1ba8: 84, + 0x1ba9: 84, + 0x1bab: 84, + 0x1bac: 84, + 0x1bad: 84, + 0x1be6: 84, + 0x1be8: 84, + 0x1be9: 84, + 0x1bed: 84, + 0x1bef: 84, + 0x1bf0: 84, + 0x1bf1: 84, + 0x1c2c: 84, + 0x1c2d: 84, + 0x1c2e: 84, + 0x1c2f: 84, + 0x1c30: 84, + 0x1c31: 84, + 0x1c32: 84, + 0x1c33: 84, + 0x1c36: 84, + 0x1c37: 84, + 0x1cd0: 84, + 0x1cd1: 84, + 0x1cd2: 84, + 0x1cd4: 84, + 0x1cd5: 84, + 0x1cd6: 84, + 0x1cd7: 84, + 0x1cd8: 84, + 0x1cd9: 84, + 0x1cda: 84, + 0x1cdb: 84, + 0x1cdc: 84, + 0x1cdd: 84, + 0x1cde: 84, + 0x1cdf: 84, + 0x1ce0: 84, + 0x1ce2: 84, + 0x1ce3: 84, + 0x1ce4: 84, + 0x1ce5: 84, + 0x1ce6: 84, + 0x1ce7: 84, + 0x1ce8: 84, + 0x1ced: 84, + 0x1cf4: 84, + 0x1cf8: 84, + 0x1cf9: 84, + 0x1dc0: 84, + 0x1dc1: 84, + 0x1dc2: 84, + 0x1dc3: 84, + 0x1dc4: 84, + 0x1dc5: 84, + 0x1dc6: 84, + 0x1dc7: 84, + 0x1dc8: 84, + 0x1dc9: 84, + 0x1dca: 84, + 0x1dcb: 84, + 0x1dcc: 84, + 0x1dcd: 84, + 0x1dce: 84, + 0x1dcf: 84, + 0x1dd0: 84, + 0x1dd1: 84, + 0x1dd2: 84, + 0x1dd3: 84, + 0x1dd4: 84, + 0x1dd5: 84, + 0x1dd6: 84, + 0x1dd7: 84, + 0x1dd8: 84, + 0x1dd9: 84, + 0x1dda: 84, + 0x1ddb: 84, + 0x1ddc: 84, + 0x1ddd: 84, + 0x1dde: 84, + 0x1ddf: 84, + 0x1de0: 84, + 0x1de1: 84, + 0x1de2: 84, + 0x1de3: 84, + 0x1de4: 84, + 0x1de5: 84, + 0x1de6: 84, + 0x1de7: 84, + 0x1de8: 84, + 0x1de9: 84, + 0x1dea: 84, + 0x1deb: 84, + 0x1dec: 84, + 0x1ded: 84, + 0x1dee: 84, + 0x1def: 84, + 0x1df0: 84, + 0x1df1: 84, + 0x1df2: 84, + 0x1df3: 84, + 0x1df4: 84, + 0x1df5: 84, + 0x1df6: 84, + 0x1df7: 84, + 0x1df8: 84, + 0x1df9: 84, + 0x1dfa: 84, + 0x1dfb: 84, + 0x1dfc: 84, + 0x1dfd: 84, + 0x1dfe: 84, + 0x1dff: 84, + 0x200b: 84, 0x200d: 67, - 0x202f: 85, - 0x2066: 85, - 0x2067: 85, - 0x2068: 85, - 0x2069: 85, + 0x200e: 84, + 0x200f: 84, + 0x202a: 84, + 0x202b: 84, + 0x202c: 84, + 0x202d: 84, + 0x202e: 84, + 0x2060: 84, + 0x2061: 84, + 0x2062: 84, + 0x2063: 84, + 0x2064: 84, + 0x206a: 84, + 0x206b: 84, + 0x206c: 84, + 0x206d: 84, + 0x206e: 84, + 0x206f: 84, + 0x20d0: 84, + 0x20d1: 84, + 0x20d2: 84, + 0x20d3: 84, + 0x20d4: 84, + 0x20d5: 84, + 0x20d6: 84, + 0x20d7: 84, + 0x20d8: 84, + 0x20d9: 84, + 0x20da: 84, + 0x20db: 84, + 0x20dc: 84, + 0x20dd: 84, + 0x20de: 84, + 0x20df: 84, + 0x20e0: 84, + 0x20e1: 84, + 0x20e2: 84, + 0x20e3: 84, + 0x20e4: 84, + 0x20e5: 84, + 0x20e6: 84, + 0x20e7: 84, + 0x20e8: 84, + 0x20e9: 84, + 0x20ea: 84, + 0x20eb: 84, + 0x20ec: 84, + 0x20ed: 84, + 0x20ee: 84, + 0x20ef: 84, + 0x20f0: 84, + 0x2cef: 84, + 0x2cf0: 84, + 0x2cf1: 84, + 0x2d7f: 84, + 0x2de0: 84, + 0x2de1: 84, + 0x2de2: 84, + 0x2de3: 84, + 0x2de4: 84, + 0x2de5: 84, + 0x2de6: 84, + 0x2de7: 84, + 0x2de8: 84, + 0x2de9: 84, + 0x2dea: 84, + 0x2deb: 84, + 0x2dec: 84, + 0x2ded: 84, + 0x2dee: 84, + 0x2def: 84, + 0x2df0: 84, + 0x2df1: 84, + 0x2df2: 84, + 0x2df3: 84, + 0x2df4: 84, + 0x2df5: 84, + 0x2df6: 84, + 0x2df7: 84, + 0x2df8: 84, + 0x2df9: 84, + 0x2dfa: 84, + 0x2dfb: 84, + 0x2dfc: 84, + 0x2dfd: 84, + 0x2dfe: 84, + 0x2dff: 84, + 0x302a: 84, + 0x302b: 84, + 0x302c: 84, + 0x302d: 84, + 0x3099: 84, + 0x309a: 84, + 0xa66f: 84, + 0xa670: 84, + 0xa671: 84, + 0xa672: 84, + 0xa674: 84, + 0xa675: 84, + 0xa676: 84, + 0xa677: 84, + 0xa678: 84, + 0xa679: 84, + 0xa67a: 84, + 0xa67b: 84, + 0xa67c: 84, + 0xa67d: 84, + 0xa69e: 84, + 0xa69f: 84, + 0xa6f0: 84, + 0xa6f1: 84, + 0xa802: 84, + 0xa806: 84, + 0xa80b: 84, + 0xa825: 84, + 0xa826: 84, + 0xa82c: 84, 0xa840: 68, 0xa841: 68, 0xa842: 68, @@ -682,20 +1635,151 @@ joining_types = { 0xa870: 68, 0xa871: 68, 0xa872: 76, - 0xa873: 85, + 0xa8c4: 84, + 0xa8c5: 84, + 0xa8e0: 84, + 0xa8e1: 84, + 0xa8e2: 84, + 0xa8e3: 84, + 0xa8e4: 84, + 0xa8e5: 84, + 0xa8e6: 84, + 0xa8e7: 84, + 0xa8e8: 84, + 0xa8e9: 84, + 0xa8ea: 84, + 0xa8eb: 84, + 0xa8ec: 84, + 0xa8ed: 84, + 0xa8ee: 84, + 0xa8ef: 84, + 0xa8f0: 84, + 0xa8f1: 84, + 0xa8ff: 84, + 0xa926: 84, + 0xa927: 84, + 0xa928: 84, + 0xa929: 84, + 0xa92a: 84, + 0xa92b: 84, + 0xa92c: 84, + 0xa92d: 84, + 0xa947: 84, + 0xa948: 84, + 0xa949: 84, + 0xa94a: 84, + 0xa94b: 84, + 0xa94c: 84, + 0xa94d: 84, + 0xa94e: 84, + 0xa94f: 84, + 0xa950: 84, + 0xa951: 84, + 0xa980: 84, + 0xa981: 84, + 0xa982: 84, + 0xa9b3: 84, + 0xa9b6: 84, + 0xa9b7: 84, + 0xa9b8: 84, + 0xa9b9: 84, + 0xa9bc: 84, + 0xa9bd: 84, + 0xa9e5: 84, + 0xaa29: 84, + 0xaa2a: 84, + 0xaa2b: 84, + 0xaa2c: 84, + 0xaa2d: 84, + 0xaa2e: 84, + 0xaa31: 84, + 0xaa32: 84, + 0xaa35: 84, + 0xaa36: 84, + 0xaa43: 84, + 0xaa4c: 84, + 0xaa7c: 84, + 0xaab0: 84, + 0xaab2: 84, + 0xaab3: 84, + 0xaab4: 84, + 0xaab7: 84, + 0xaab8: 84, + 0xaabe: 84, + 0xaabf: 84, + 0xaac1: 84, + 0xaaec: 84, + 0xaaed: 84, + 0xaaf6: 84, + 0xabe5: 84, + 0xabe8: 84, + 0xabed: 84, + 0xfb1e: 84, + 0xfe00: 84, + 0xfe01: 84, + 0xfe02: 84, + 0xfe03: 84, + 0xfe04: 84, + 0xfe05: 84, + 0xfe06: 84, + 0xfe07: 84, + 0xfe08: 84, + 0xfe09: 84, + 0xfe0a: 84, + 0xfe0b: 84, + 0xfe0c: 84, + 0xfe0d: 84, + 0xfe0e: 84, + 0xfe0f: 84, + 0xfe20: 84, + 0xfe21: 84, + 0xfe22: 84, + 0xfe23: 84, + 0xfe24: 84, + 0xfe25: 84, + 0xfe26: 84, + 0xfe27: 84, + 0xfe28: 84, + 0xfe29: 84, + 0xfe2a: 84, + 0xfe2b: 84, + 0xfe2c: 84, + 0xfe2d: 84, + 0xfe2e: 84, + 0xfe2f: 84, + 0xfeff: 84, + 0xfff9: 84, + 0xfffa: 84, + 0xfffb: 84, + 0x101fd: 84, + 0x102e0: 84, + 0x10376: 84, + 0x10377: 84, + 0x10378: 84, + 0x10379: 84, + 0x1037a: 84, + 0x10a01: 84, + 0x10a02: 84, + 0x10a03: 84, + 0x10a05: 84, + 0x10a06: 84, + 0x10a0c: 84, + 0x10a0d: 84, + 0x10a0e: 84, + 0x10a0f: 84, + 0x10a38: 84, + 0x10a39: 84, + 0x10a3a: 84, + 0x10a3f: 84, 0x10ac0: 68, 0x10ac1: 68, 0x10ac2: 68, 0x10ac3: 68, 0x10ac4: 68, 0x10ac5: 82, - 0x10ac6: 85, 0x10ac7: 82, - 0x10ac8: 85, 0x10ac9: 82, 0x10aca: 82, - 0x10acb: 85, - 0x10acc: 85, 0x10acd: 76, 0x10ace: 82, 0x10acf: 82, @@ -717,9 +1801,9 @@ joining_types = { 0x10adf: 68, 0x10ae0: 68, 0x10ae1: 82, - 0x10ae2: 85, - 0x10ae3: 85, 0x10ae4: 82, + 0x10ae5: 84, + 0x10ae6: 84, 0x10aeb: 68, 0x10aec: 68, 0x10aed: 68, @@ -749,7 +1833,6 @@ joining_types = { 0x10bac: 82, 0x10bad: 68, 0x10bae: 68, - 0x10baf: 85, 0x10d00: 76, 0x10d01: 68, 0x10d02: 68, @@ -786,6 +1869,15 @@ joining_types = { 0x10d21: 68, 0x10d22: 82, 0x10d23: 68, + 0x10d24: 84, + 0x10d25: 84, + 0x10d26: 84, + 0x10d27: 84, + 0x10eab: 84, + 0x10eac: 84, + 0x10efd: 84, + 0x10efe: 84, + 0x10eff: 84, 0x10f30: 68, 0x10f31: 68, 0x10f32: 68, @@ -807,7 +1899,17 @@ joining_types = { 0x10f42: 68, 0x10f43: 68, 0x10f44: 68, - 0x10f45: 85, + 0x10f46: 84, + 0x10f47: 84, + 0x10f48: 84, + 0x10f49: 84, + 0x10f4a: 84, + 0x10f4b: 84, + 0x10f4c: 84, + 0x10f4d: 84, + 0x10f4e: 84, + 0x10f4f: 84, + 0x10f50: 84, 0x10f51: 68, 0x10f52: 68, 0x10f53: 68, @@ -830,14 +1932,16 @@ joining_types = { 0x10f7f: 68, 0x10f80: 68, 0x10f81: 68, + 0x10f82: 84, + 0x10f83: 84, + 0x10f84: 84, + 0x10f85: 84, 0x10fb0: 68, - 0x10fb1: 85, 0x10fb2: 68, 0x10fb3: 68, 0x10fb4: 82, 0x10fb5: 82, 0x10fb6: 82, - 0x10fb7: 85, 0x10fb8: 68, 0x10fb9: 82, 0x10fba: 82, @@ -846,20 +1950,668 @@ joining_types = { 0x10fbd: 82, 0x10fbe: 68, 0x10fbf: 68, - 0x10fc0: 85, 0x10fc1: 68, 0x10fc2: 82, 0x10fc3: 82, 0x10fc4: 68, - 0x10fc5: 85, - 0x10fc6: 85, - 0x10fc7: 85, - 0x10fc8: 85, 0x10fc9: 82, 0x10fca: 68, 0x10fcb: 76, - 0x110bd: 85, - 0x110cd: 85, + 0x11001: 84, + 0x11038: 84, + 0x11039: 84, + 0x1103a: 84, + 0x1103b: 84, + 0x1103c: 84, + 0x1103d: 84, + 0x1103e: 84, + 0x1103f: 84, + 0x11040: 84, + 0x11041: 84, + 0x11042: 84, + 0x11043: 84, + 0x11044: 84, + 0x11045: 84, + 0x11046: 84, + 0x11070: 84, + 0x11073: 84, + 0x11074: 84, + 0x1107f: 84, + 0x11080: 84, + 0x11081: 84, + 0x110b3: 84, + 0x110b4: 84, + 0x110b5: 84, + 0x110b6: 84, + 0x110b9: 84, + 0x110ba: 84, + 0x110c2: 84, + 0x11100: 84, + 0x11101: 84, + 0x11102: 84, + 0x11127: 84, + 0x11128: 84, + 0x11129: 84, + 0x1112a: 84, + 0x1112b: 84, + 0x1112d: 84, + 0x1112e: 84, + 0x1112f: 84, + 0x11130: 84, + 0x11131: 84, + 0x11132: 84, + 0x11133: 84, + 0x11134: 84, + 0x11173: 84, + 0x11180: 84, + 0x11181: 84, + 0x111b6: 84, + 0x111b7: 84, + 0x111b8: 84, + 0x111b9: 84, + 0x111ba: 84, + 0x111bb: 84, + 0x111bc: 84, + 0x111bd: 84, + 0x111be: 84, + 0x111c9: 84, + 0x111ca: 84, + 0x111cb: 84, + 0x111cc: 84, + 0x111cf: 84, + 0x1122f: 84, + 0x11230: 84, + 0x11231: 84, + 0x11234: 84, + 0x11236: 84, + 0x11237: 84, + 0x1123e: 84, + 0x11241: 84, + 0x112df: 84, + 0x112e3: 84, + 0x112e4: 84, + 0x112e5: 84, + 0x112e6: 84, + 0x112e7: 84, + 0x112e8: 84, + 0x112e9: 84, + 0x112ea: 84, + 0x11300: 84, + 0x11301: 84, + 0x1133b: 84, + 0x1133c: 84, + 0x11340: 84, + 0x11366: 84, + 0x11367: 84, + 0x11368: 84, + 0x11369: 84, + 0x1136a: 84, + 0x1136b: 84, + 0x1136c: 84, + 0x11370: 84, + 0x11371: 84, + 0x11372: 84, + 0x11373: 84, + 0x11374: 84, + 0x11438: 84, + 0x11439: 84, + 0x1143a: 84, + 0x1143b: 84, + 0x1143c: 84, + 0x1143d: 84, + 0x1143e: 84, + 0x1143f: 84, + 0x11442: 84, + 0x11443: 84, + 0x11444: 84, + 0x11446: 84, + 0x1145e: 84, + 0x114b3: 84, + 0x114b4: 84, + 0x114b5: 84, + 0x114b6: 84, + 0x114b7: 84, + 0x114b8: 84, + 0x114ba: 84, + 0x114bf: 84, + 0x114c0: 84, + 0x114c2: 84, + 0x114c3: 84, + 0x115b2: 84, + 0x115b3: 84, + 0x115b4: 84, + 0x115b5: 84, + 0x115bc: 84, + 0x115bd: 84, + 0x115bf: 84, + 0x115c0: 84, + 0x115dc: 84, + 0x115dd: 84, + 0x11633: 84, + 0x11634: 84, + 0x11635: 84, + 0x11636: 84, + 0x11637: 84, + 0x11638: 84, + 0x11639: 84, + 0x1163a: 84, + 0x1163d: 84, + 0x1163f: 84, + 0x11640: 84, + 0x116ab: 84, + 0x116ad: 84, + 0x116b0: 84, + 0x116b1: 84, + 0x116b2: 84, + 0x116b3: 84, + 0x116b4: 84, + 0x116b5: 84, + 0x116b7: 84, + 0x1171d: 84, + 0x1171e: 84, + 0x1171f: 84, + 0x11722: 84, + 0x11723: 84, + 0x11724: 84, + 0x11725: 84, + 0x11727: 84, + 0x11728: 84, + 0x11729: 84, + 0x1172a: 84, + 0x1172b: 84, + 0x1182f: 84, + 0x11830: 84, + 0x11831: 84, + 0x11832: 84, + 0x11833: 84, + 0x11834: 84, + 0x11835: 84, + 0x11836: 84, + 0x11837: 84, + 0x11839: 84, + 0x1183a: 84, + 0x1193b: 84, + 0x1193c: 84, + 0x1193e: 84, + 0x11943: 84, + 0x119d4: 84, + 0x119d5: 84, + 0x119d6: 84, + 0x119d7: 84, + 0x119da: 84, + 0x119db: 84, + 0x119e0: 84, + 0x11a01: 84, + 0x11a02: 84, + 0x11a03: 84, + 0x11a04: 84, + 0x11a05: 84, + 0x11a06: 84, + 0x11a07: 84, + 0x11a08: 84, + 0x11a09: 84, + 0x11a0a: 84, + 0x11a33: 84, + 0x11a34: 84, + 0x11a35: 84, + 0x11a36: 84, + 0x11a37: 84, + 0x11a38: 84, + 0x11a3b: 84, + 0x11a3c: 84, + 0x11a3d: 84, + 0x11a3e: 84, + 0x11a47: 84, + 0x11a51: 84, + 0x11a52: 84, + 0x11a53: 84, + 0x11a54: 84, + 0x11a55: 84, + 0x11a56: 84, + 0x11a59: 84, + 0x11a5a: 84, + 0x11a5b: 84, + 0x11a8a: 84, + 0x11a8b: 84, + 0x11a8c: 84, + 0x11a8d: 84, + 0x11a8e: 84, + 0x11a8f: 84, + 0x11a90: 84, + 0x11a91: 84, + 0x11a92: 84, + 0x11a93: 84, + 0x11a94: 84, + 0x11a95: 84, + 0x11a96: 84, + 0x11a98: 84, + 0x11a99: 84, + 0x11c30: 84, + 0x11c31: 84, + 0x11c32: 84, + 0x11c33: 84, + 0x11c34: 84, + 0x11c35: 84, + 0x11c36: 84, + 0x11c38: 84, + 0x11c39: 84, + 0x11c3a: 84, + 0x11c3b: 84, + 0x11c3c: 84, + 0x11c3d: 84, + 0x11c3f: 84, + 0x11c92: 84, + 0x11c93: 84, + 0x11c94: 84, + 0x11c95: 84, + 0x11c96: 84, + 0x11c97: 84, + 0x11c98: 84, + 0x11c99: 84, + 0x11c9a: 84, + 0x11c9b: 84, + 0x11c9c: 84, + 0x11c9d: 84, + 0x11c9e: 84, + 0x11c9f: 84, + 0x11ca0: 84, + 0x11ca1: 84, + 0x11ca2: 84, + 0x11ca3: 84, + 0x11ca4: 84, + 0x11ca5: 84, + 0x11ca6: 84, + 0x11ca7: 84, + 0x11caa: 84, + 0x11cab: 84, + 0x11cac: 84, + 0x11cad: 84, + 0x11cae: 84, + 0x11caf: 84, + 0x11cb0: 84, + 0x11cb2: 84, + 0x11cb3: 84, + 0x11cb5: 84, + 0x11cb6: 84, + 0x11d31: 84, + 0x11d32: 84, + 0x11d33: 84, + 0x11d34: 84, + 0x11d35: 84, + 0x11d36: 84, + 0x11d3a: 84, + 0x11d3c: 84, + 0x11d3d: 84, + 0x11d3f: 84, + 0x11d40: 84, + 0x11d41: 84, + 0x11d42: 84, + 0x11d43: 84, + 0x11d44: 84, + 0x11d45: 84, + 0x11d47: 84, + 0x11d90: 84, + 0x11d91: 84, + 0x11d95: 84, + 0x11d97: 84, + 0x11ef3: 84, + 0x11ef4: 84, + 0x11f00: 84, + 0x11f01: 84, + 0x11f36: 84, + 0x11f37: 84, + 0x11f38: 84, + 0x11f39: 84, + 0x11f3a: 84, + 0x11f40: 84, + 0x11f42: 84, + 0x13430: 84, + 0x13431: 84, + 0x13432: 84, + 0x13433: 84, + 0x13434: 84, + 0x13435: 84, + 0x13436: 84, + 0x13437: 84, + 0x13438: 84, + 0x13439: 84, + 0x1343a: 84, + 0x1343b: 84, + 0x1343c: 84, + 0x1343d: 84, + 0x1343e: 84, + 0x1343f: 84, + 0x13440: 84, + 0x13447: 84, + 0x13448: 84, + 0x13449: 84, + 0x1344a: 84, + 0x1344b: 84, + 0x1344c: 84, + 0x1344d: 84, + 0x1344e: 84, + 0x1344f: 84, + 0x13450: 84, + 0x13451: 84, + 0x13452: 84, + 0x13453: 84, + 0x13454: 84, + 0x13455: 84, + 0x16af0: 84, + 0x16af1: 84, + 0x16af2: 84, + 0x16af3: 84, + 0x16af4: 84, + 0x16b30: 84, + 0x16b31: 84, + 0x16b32: 84, + 0x16b33: 84, + 0x16b34: 84, + 0x16b35: 84, + 0x16b36: 84, + 0x16f4f: 84, + 0x16f8f: 84, + 0x16f90: 84, + 0x16f91: 84, + 0x16f92: 84, + 0x16fe4: 84, + 0x1bc9d: 84, + 0x1bc9e: 84, + 0x1bca0: 84, + 0x1bca1: 84, + 0x1bca2: 84, + 0x1bca3: 84, + 0x1cf00: 84, + 0x1cf01: 84, + 0x1cf02: 84, + 0x1cf03: 84, + 0x1cf04: 84, + 0x1cf05: 84, + 0x1cf06: 84, + 0x1cf07: 84, + 0x1cf08: 84, + 0x1cf09: 84, + 0x1cf0a: 84, + 0x1cf0b: 84, + 0x1cf0c: 84, + 0x1cf0d: 84, + 0x1cf0e: 84, + 0x1cf0f: 84, + 0x1cf10: 84, + 0x1cf11: 84, + 0x1cf12: 84, + 0x1cf13: 84, + 0x1cf14: 84, + 0x1cf15: 84, + 0x1cf16: 84, + 0x1cf17: 84, + 0x1cf18: 84, + 0x1cf19: 84, + 0x1cf1a: 84, + 0x1cf1b: 84, + 0x1cf1c: 84, + 0x1cf1d: 84, + 0x1cf1e: 84, + 0x1cf1f: 84, + 0x1cf20: 84, + 0x1cf21: 84, + 0x1cf22: 84, + 0x1cf23: 84, + 0x1cf24: 84, + 0x1cf25: 84, + 0x1cf26: 84, + 0x1cf27: 84, + 0x1cf28: 84, + 0x1cf29: 84, + 0x1cf2a: 84, + 0x1cf2b: 84, + 0x1cf2c: 84, + 0x1cf2d: 84, + 0x1cf30: 84, + 0x1cf31: 84, + 0x1cf32: 84, + 0x1cf33: 84, + 0x1cf34: 84, + 0x1cf35: 84, + 0x1cf36: 84, + 0x1cf37: 84, + 0x1cf38: 84, + 0x1cf39: 84, + 0x1cf3a: 84, + 0x1cf3b: 84, + 0x1cf3c: 84, + 0x1cf3d: 84, + 0x1cf3e: 84, + 0x1cf3f: 84, + 0x1cf40: 84, + 0x1cf41: 84, + 0x1cf42: 84, + 0x1cf43: 84, + 0x1cf44: 84, + 0x1cf45: 84, + 0x1cf46: 84, + 0x1d167: 84, + 0x1d168: 84, + 0x1d169: 84, + 0x1d173: 84, + 0x1d174: 84, + 0x1d175: 84, + 0x1d176: 84, + 0x1d177: 84, + 0x1d178: 84, + 0x1d179: 84, + 0x1d17a: 84, + 0x1d17b: 84, + 0x1d17c: 84, + 0x1d17d: 84, + 0x1d17e: 84, + 0x1d17f: 84, + 0x1d180: 84, + 0x1d181: 84, + 0x1d182: 84, + 0x1d185: 84, + 0x1d186: 84, + 0x1d187: 84, + 0x1d188: 84, + 0x1d189: 84, + 0x1d18a: 84, + 0x1d18b: 84, + 0x1d1aa: 84, + 0x1d1ab: 84, + 0x1d1ac: 84, + 0x1d1ad: 84, + 0x1d242: 84, + 0x1d243: 84, + 0x1d244: 84, + 0x1da00: 84, + 0x1da01: 84, + 0x1da02: 84, + 0x1da03: 84, + 0x1da04: 84, + 0x1da05: 84, + 0x1da06: 84, + 0x1da07: 84, + 0x1da08: 84, + 0x1da09: 84, + 0x1da0a: 84, + 0x1da0b: 84, + 0x1da0c: 84, + 0x1da0d: 84, + 0x1da0e: 84, + 0x1da0f: 84, + 0x1da10: 84, + 0x1da11: 84, + 0x1da12: 84, + 0x1da13: 84, + 0x1da14: 84, + 0x1da15: 84, + 0x1da16: 84, + 0x1da17: 84, + 0x1da18: 84, + 0x1da19: 84, + 0x1da1a: 84, + 0x1da1b: 84, + 0x1da1c: 84, + 0x1da1d: 84, + 0x1da1e: 84, + 0x1da1f: 84, + 0x1da20: 84, + 0x1da21: 84, + 0x1da22: 84, + 0x1da23: 84, + 0x1da24: 84, + 0x1da25: 84, + 0x1da26: 84, + 0x1da27: 84, + 0x1da28: 84, + 0x1da29: 84, + 0x1da2a: 84, + 0x1da2b: 84, + 0x1da2c: 84, + 0x1da2d: 84, + 0x1da2e: 84, + 0x1da2f: 84, + 0x1da30: 84, + 0x1da31: 84, + 0x1da32: 84, + 0x1da33: 84, + 0x1da34: 84, + 0x1da35: 84, + 0x1da36: 84, + 0x1da3b: 84, + 0x1da3c: 84, + 0x1da3d: 84, + 0x1da3e: 84, + 0x1da3f: 84, + 0x1da40: 84, + 0x1da41: 84, + 0x1da42: 84, + 0x1da43: 84, + 0x1da44: 84, + 0x1da45: 84, + 0x1da46: 84, + 0x1da47: 84, + 0x1da48: 84, + 0x1da49: 84, + 0x1da4a: 84, + 0x1da4b: 84, + 0x1da4c: 84, + 0x1da4d: 84, + 0x1da4e: 84, + 0x1da4f: 84, + 0x1da50: 84, + 0x1da51: 84, + 0x1da52: 84, + 0x1da53: 84, + 0x1da54: 84, + 0x1da55: 84, + 0x1da56: 84, + 0x1da57: 84, + 0x1da58: 84, + 0x1da59: 84, + 0x1da5a: 84, + 0x1da5b: 84, + 0x1da5c: 84, + 0x1da5d: 84, + 0x1da5e: 84, + 0x1da5f: 84, + 0x1da60: 84, + 0x1da61: 84, + 0x1da62: 84, + 0x1da63: 84, + 0x1da64: 84, + 0x1da65: 84, + 0x1da66: 84, + 0x1da67: 84, + 0x1da68: 84, + 0x1da69: 84, + 0x1da6a: 84, + 0x1da6b: 84, + 0x1da6c: 84, + 0x1da75: 84, + 0x1da84: 84, + 0x1da9b: 84, + 0x1da9c: 84, + 0x1da9d: 84, + 0x1da9e: 84, + 0x1da9f: 84, + 0x1daa1: 84, + 0x1daa2: 84, + 0x1daa3: 84, + 0x1daa4: 84, + 0x1daa5: 84, + 0x1daa6: 84, + 0x1daa7: 84, + 0x1daa8: 84, + 0x1daa9: 84, + 0x1daaa: 84, + 0x1daab: 84, + 0x1daac: 84, + 0x1daad: 84, + 0x1daae: 84, + 0x1daaf: 84, + 0x1e000: 84, + 0x1e001: 84, + 0x1e002: 84, + 0x1e003: 84, + 0x1e004: 84, + 0x1e005: 84, + 0x1e006: 84, + 0x1e008: 84, + 0x1e009: 84, + 0x1e00a: 84, + 0x1e00b: 84, + 0x1e00c: 84, + 0x1e00d: 84, + 0x1e00e: 84, + 0x1e00f: 84, + 0x1e010: 84, + 0x1e011: 84, + 0x1e012: 84, + 0x1e013: 84, + 0x1e014: 84, + 0x1e015: 84, + 0x1e016: 84, + 0x1e017: 84, + 0x1e018: 84, + 0x1e01b: 84, + 0x1e01c: 84, + 0x1e01d: 84, + 0x1e01e: 84, + 0x1e01f: 84, + 0x1e020: 84, + 0x1e021: 84, + 0x1e023: 84, + 0x1e024: 84, + 0x1e026: 84, + 0x1e027: 84, + 0x1e028: 84, + 0x1e029: 84, + 0x1e02a: 84, + 0x1e08f: 84, + 0x1e130: 84, + 0x1e131: 84, + 0x1e132: 84, + 0x1e133: 84, + 0x1e134: 84, + 0x1e135: 84, + 0x1e136: 84, + 0x1e2ae: 84, + 0x1e2ec: 84, + 0x1e2ed: 84, + 0x1e2ee: 84, + 0x1e2ef: 84, + 0x1e4ec: 84, + 0x1e4ed: 84, + 0x1e4ee: 84, + 0x1e4ef: 84, + 0x1e8d0: 84, + 0x1e8d1: 84, + 0x1e8d2: 84, + 0x1e8d3: 84, + 0x1e8d4: 84, + 0x1e8d5: 84, + 0x1e8d6: 84, 0x1e900: 68, 0x1e901: 68, 0x1e902: 68, @@ -928,7 +2680,351 @@ joining_types = { 0x1e941: 68, 0x1e942: 68, 0x1e943: 68, + 0x1e944: 84, + 0x1e945: 84, + 0x1e946: 84, + 0x1e947: 84, + 0x1e948: 84, + 0x1e949: 84, + 0x1e94a: 84, 0x1e94b: 84, + 0xe0001: 84, + 0xe0020: 84, + 0xe0021: 84, + 0xe0022: 84, + 0xe0023: 84, + 0xe0024: 84, + 0xe0025: 84, + 0xe0026: 84, + 0xe0027: 84, + 0xe0028: 84, + 0xe0029: 84, + 0xe002a: 84, + 0xe002b: 84, + 0xe002c: 84, + 0xe002d: 84, + 0xe002e: 84, + 0xe002f: 84, + 0xe0030: 84, + 0xe0031: 84, + 0xe0032: 84, + 0xe0033: 84, + 0xe0034: 84, + 0xe0035: 84, + 0xe0036: 84, + 0xe0037: 84, + 0xe0038: 84, + 0xe0039: 84, + 0xe003a: 84, + 0xe003b: 84, + 0xe003c: 84, + 0xe003d: 84, + 0xe003e: 84, + 0xe003f: 84, + 0xe0040: 84, + 0xe0041: 84, + 0xe0042: 84, + 0xe0043: 84, + 0xe0044: 84, + 0xe0045: 84, + 0xe0046: 84, + 0xe0047: 84, + 0xe0048: 84, + 0xe0049: 84, + 0xe004a: 84, + 0xe004b: 84, + 0xe004c: 84, + 0xe004d: 84, + 0xe004e: 84, + 0xe004f: 84, + 0xe0050: 84, + 0xe0051: 84, + 0xe0052: 84, + 0xe0053: 84, + 0xe0054: 84, + 0xe0055: 84, + 0xe0056: 84, + 0xe0057: 84, + 0xe0058: 84, + 0xe0059: 84, + 0xe005a: 84, + 0xe005b: 84, + 0xe005c: 84, + 0xe005d: 84, + 0xe005e: 84, + 0xe005f: 84, + 0xe0060: 84, + 0xe0061: 84, + 0xe0062: 84, + 0xe0063: 84, + 0xe0064: 84, + 0xe0065: 84, + 0xe0066: 84, + 0xe0067: 84, + 0xe0068: 84, + 0xe0069: 84, + 0xe006a: 84, + 0xe006b: 84, + 0xe006c: 84, + 0xe006d: 84, + 0xe006e: 84, + 0xe006f: 84, + 0xe0070: 84, + 0xe0071: 84, + 0xe0072: 84, + 0xe0073: 84, + 0xe0074: 84, + 0xe0075: 84, + 0xe0076: 84, + 0xe0077: 84, + 0xe0078: 84, + 0xe0079: 84, + 0xe007a: 84, + 0xe007b: 84, + 0xe007c: 84, + 0xe007d: 84, + 0xe007e: 84, + 0xe007f: 84, + 0xe0100: 84, + 0xe0101: 84, + 0xe0102: 84, + 0xe0103: 84, + 0xe0104: 84, + 0xe0105: 84, + 0xe0106: 84, + 0xe0107: 84, + 0xe0108: 84, + 0xe0109: 84, + 0xe010a: 84, + 0xe010b: 84, + 0xe010c: 84, + 0xe010d: 84, + 0xe010e: 84, + 0xe010f: 84, + 0xe0110: 84, + 0xe0111: 84, + 0xe0112: 84, + 0xe0113: 84, + 0xe0114: 84, + 0xe0115: 84, + 0xe0116: 84, + 0xe0117: 84, + 0xe0118: 84, + 0xe0119: 84, + 0xe011a: 84, + 0xe011b: 84, + 0xe011c: 84, + 0xe011d: 84, + 0xe011e: 84, + 0xe011f: 84, + 0xe0120: 84, + 0xe0121: 84, + 0xe0122: 84, + 0xe0123: 84, + 0xe0124: 84, + 0xe0125: 84, + 0xe0126: 84, + 0xe0127: 84, + 0xe0128: 84, + 0xe0129: 84, + 0xe012a: 84, + 0xe012b: 84, + 0xe012c: 84, + 0xe012d: 84, + 0xe012e: 84, + 0xe012f: 84, + 0xe0130: 84, + 0xe0131: 84, + 0xe0132: 84, + 0xe0133: 84, + 0xe0134: 84, + 0xe0135: 84, + 0xe0136: 84, + 0xe0137: 84, + 0xe0138: 84, + 0xe0139: 84, + 0xe013a: 84, + 0xe013b: 84, + 0xe013c: 84, + 0xe013d: 84, + 0xe013e: 84, + 0xe013f: 84, + 0xe0140: 84, + 0xe0141: 84, + 0xe0142: 84, + 0xe0143: 84, + 0xe0144: 84, + 0xe0145: 84, + 0xe0146: 84, + 0xe0147: 84, + 0xe0148: 84, + 0xe0149: 84, + 0xe014a: 84, + 0xe014b: 84, + 0xe014c: 84, + 0xe014d: 84, + 0xe014e: 84, + 0xe014f: 84, + 0xe0150: 84, + 0xe0151: 84, + 0xe0152: 84, + 0xe0153: 84, + 0xe0154: 84, + 0xe0155: 84, + 0xe0156: 84, + 0xe0157: 84, + 0xe0158: 84, + 0xe0159: 84, + 0xe015a: 84, + 0xe015b: 84, + 0xe015c: 84, + 0xe015d: 84, + 0xe015e: 84, + 0xe015f: 84, + 0xe0160: 84, + 0xe0161: 84, + 0xe0162: 84, + 0xe0163: 84, + 0xe0164: 84, + 0xe0165: 84, + 0xe0166: 84, + 0xe0167: 84, + 0xe0168: 84, + 0xe0169: 84, + 0xe016a: 84, + 0xe016b: 84, + 0xe016c: 84, + 0xe016d: 84, + 0xe016e: 84, + 0xe016f: 84, + 0xe0170: 84, + 0xe0171: 84, + 0xe0172: 84, + 0xe0173: 84, + 0xe0174: 84, + 0xe0175: 84, + 0xe0176: 84, + 0xe0177: 84, + 0xe0178: 84, + 0xe0179: 84, + 0xe017a: 84, + 0xe017b: 84, + 0xe017c: 84, + 0xe017d: 84, + 0xe017e: 84, + 0xe017f: 84, + 0xe0180: 84, + 0xe0181: 84, + 0xe0182: 84, + 0xe0183: 84, + 0xe0184: 84, + 0xe0185: 84, + 0xe0186: 84, + 0xe0187: 84, + 0xe0188: 84, + 0xe0189: 84, + 0xe018a: 84, + 0xe018b: 84, + 0xe018c: 84, + 0xe018d: 84, + 0xe018e: 84, + 0xe018f: 84, + 0xe0190: 84, + 0xe0191: 84, + 0xe0192: 84, + 0xe0193: 84, + 0xe0194: 84, + 0xe0195: 84, + 0xe0196: 84, + 0xe0197: 84, + 0xe0198: 84, + 0xe0199: 84, + 0xe019a: 84, + 0xe019b: 84, + 0xe019c: 84, + 0xe019d: 84, + 0xe019e: 84, + 0xe019f: 84, + 0xe01a0: 84, + 0xe01a1: 84, + 0xe01a2: 84, + 0xe01a3: 84, + 0xe01a4: 84, + 0xe01a5: 84, + 0xe01a6: 84, + 0xe01a7: 84, + 0xe01a8: 84, + 0xe01a9: 84, + 0xe01aa: 84, + 0xe01ab: 84, + 0xe01ac: 84, + 0xe01ad: 84, + 0xe01ae: 84, + 0xe01af: 84, + 0xe01b0: 84, + 0xe01b1: 84, + 0xe01b2: 84, + 0xe01b3: 84, + 0xe01b4: 84, + 0xe01b5: 84, + 0xe01b6: 84, + 0xe01b7: 84, + 0xe01b8: 84, + 0xe01b9: 84, + 0xe01ba: 84, + 0xe01bb: 84, + 0xe01bc: 84, + 0xe01bd: 84, + 0xe01be: 84, + 0xe01bf: 84, + 0xe01c0: 84, + 0xe01c1: 84, + 0xe01c2: 84, + 0xe01c3: 84, + 0xe01c4: 84, + 0xe01c5: 84, + 0xe01c6: 84, + 0xe01c7: 84, + 0xe01c8: 84, + 0xe01c9: 84, + 0xe01ca: 84, + 0xe01cb: 84, + 0xe01cc: 84, + 0xe01cd: 84, + 0xe01ce: 84, + 0xe01cf: 84, + 0xe01d0: 84, + 0xe01d1: 84, + 0xe01d2: 84, + 0xe01d3: 84, + 0xe01d4: 84, + 0xe01d5: 84, + 0xe01d6: 84, + 0xe01d7: 84, + 0xe01d8: 84, + 0xe01d9: 84, + 0xe01da: 84, + 0xe01db: 84, + 0xe01dc: 84, + 0xe01dd: 84, + 0xe01de: 84, + 0xe01df: 84, + 0xe01e0: 84, + 0xe01e1: 84, + 0xe01e2: 84, + 0xe01e3: 84, + 0xe01e4: 84, + 0xe01e5: 84, + 0xe01e6: 84, + 0xe01e7: 84, + 0xe01e8: 84, + 0xe01e9: 84, + 0xe01ea: 84, + 0xe01eb: 84, + 0xe01ec: 84, + 0xe01ed: 84, + 0xe01ee: 84, + 0xe01ef: 84, } codepoint_classes = { 'PVALID': ( @@ -2110,7 +4206,6 @@ codepoint_classes = { 0x1e01b0001e022, 0x1e0230001e025, 0x1e0260001e02b, - 0x1e0300001e06e, 0x1e08f0001e090, 0x1e1000001e12d, 0x1e1300001e13e, diff --git a/contrib/python/idna/py3/idna/package_data.py b/contrib/python/idna/py3/idna/package_data.py index c5b7220c97..ed81113363 100644 --- a/contrib/python/idna/py3/idna/package_data.py +++ b/contrib/python/idna/py3/idna/package_data.py @@ -1,2 +1,2 @@ -__version__ = '3.6' +__version__ = '3.7' diff --git a/contrib/python/idna/py3/ya.make b/contrib/python/idna/py3/ya.make index 2dfee2f16f..6d08b94b1b 100644 --- a/contrib/python/idna/py3/ya.make +++ b/contrib/python/idna/py3/ya.make @@ -2,7 +2,7 @@ PY3_LIBRARY() -VERSION(3.6) +VERSION(3.7) LICENSE(BSD-3-Clause) diff --git a/contrib/python/itsdangerous/py2/tests/__init__.py b/contrib/python/itsdangerous/py2/tests/test_itsdangerous/__init__.py index e69de29bb2..e69de29bb2 100644 --- a/contrib/python/itsdangerous/py2/tests/__init__.py +++ b/contrib/python/itsdangerous/py2/tests/test_itsdangerous/__init__.py diff --git a/contrib/python/itsdangerous/py2/tests/test_compat.py b/contrib/python/itsdangerous/py2/tests/test_itsdangerous/test_compat.py index 2043fadf5a..2043fadf5a 100644 --- a/contrib/python/itsdangerous/py2/tests/test_compat.py +++ b/contrib/python/itsdangerous/py2/tests/test_itsdangerous/test_compat.py diff --git a/contrib/python/itsdangerous/py2/tests/test_encoding.py b/contrib/python/itsdangerous/py2/tests/test_itsdangerous/test_encoding.py index d60ec173d0..d60ec173d0 100644 --- a/contrib/python/itsdangerous/py2/tests/test_encoding.py +++ b/contrib/python/itsdangerous/py2/tests/test_itsdangerous/test_encoding.py diff --git a/contrib/python/itsdangerous/py2/tests/test_jws.py b/contrib/python/itsdangerous/py2/tests/test_itsdangerous/test_jws.py index d03e6407e3..87529485eb 100644 --- a/contrib/python/itsdangerous/py2/tests/test_jws.py +++ b/contrib/python/itsdangerous/py2/tests/test_itsdangerous/test_jws.py @@ -2,8 +2,8 @@ from datetime import timedelta from functools import partial import pytest -from __tests__.test_serializer import TestSerializer -from __tests__.test_timed import TestTimedSerializer +from .test_serializer import TestSerializer +from .test_timed import TestTimedSerializer from itsdangerous.exc import BadData from itsdangerous.exc import BadHeader diff --git a/contrib/python/itsdangerous/py2/tests/test_serializer.py b/contrib/python/itsdangerous/py2/tests/test_itsdangerous/test_serializer.py index e783c20c00..e783c20c00 100644 --- a/contrib/python/itsdangerous/py2/tests/test_serializer.py +++ b/contrib/python/itsdangerous/py2/tests/test_itsdangerous/test_serializer.py diff --git a/contrib/python/itsdangerous/py2/tests/test_signer.py b/contrib/python/itsdangerous/py2/tests/test_itsdangerous/test_signer.py index 5f7fe8e159..5f7fe8e159 100644 --- a/contrib/python/itsdangerous/py2/tests/test_signer.py +++ b/contrib/python/itsdangerous/py2/tests/test_itsdangerous/test_signer.py diff --git a/contrib/python/itsdangerous/py2/tests/test_timed.py b/contrib/python/itsdangerous/py2/tests/test_itsdangerous/test_timed.py index 60a2a9c19a..3783fd4ce4 100644 --- a/contrib/python/itsdangerous/py2/tests/test_timed.py +++ b/contrib/python/itsdangerous/py2/tests/test_itsdangerous/test_timed.py @@ -4,8 +4,8 @@ from functools import partial import pytest from freezegun import freeze_time -from __tests__.test_serializer import TestSerializer -from __tests__.test_signer import TestSigner +from .test_serializer import TestSerializer +from .test_signer import TestSigner from itsdangerous import Signer from itsdangerous.exc import BadTimeSignature diff --git a/contrib/python/itsdangerous/py2/tests/test_url_safe.py b/contrib/python/itsdangerous/py2/tests/test_itsdangerous/test_url_safe.py index c9fc571492..76941201e4 100644 --- a/contrib/python/itsdangerous/py2/tests/test_url_safe.py +++ b/contrib/python/itsdangerous/py2/tests/test_itsdangerous/test_url_safe.py @@ -1,8 +1,8 @@ from functools import partial import pytest -from __tests__.test_serializer import TestSerializer -from __tests__.test_timed import TestTimedSerializer +from .test_serializer import TestSerializer +from .test_timed import TestTimedSerializer from itsdangerous import URLSafeSerializer from itsdangerous import URLSafeTimedSerializer diff --git a/contrib/python/itsdangerous/py2/tests/ya.make b/contrib/python/itsdangerous/py2/tests/ya.make index f10ca0f9b2..4f071b29ae 100644 --- a/contrib/python/itsdangerous/py2/tests/ya.make +++ b/contrib/python/itsdangerous/py2/tests/ya.make @@ -6,14 +6,14 @@ PEERDIR( ) TEST_SRCS( - __init__.py - test_compat.py - test_encoding.py - test_jws.py - test_serializer.py - test_signer.py - test_timed.py - test_url_safe.py + test_itsdangerous/__init__.py + test_itsdangerous/test_compat.py + test_itsdangerous/test_encoding.py + test_itsdangerous/test_jws.py + test_itsdangerous/test_serializer.py + test_itsdangerous/test_signer.py + test_itsdangerous/test_timed.py + test_itsdangerous/test_url_safe.py ) NO_LINT() diff --git a/contrib/python/itsdangerous/py2/ya.make b/contrib/python/itsdangerous/py2/ya.make index 31f90147c3..d4e8ea107b 100644 --- a/contrib/python/itsdangerous/py2/ya.make +++ b/contrib/python/itsdangerous/py2/ya.make @@ -1,18 +1,20 @@ -PY2_LIBRARY() +# Generated by devtools/yamaker (pypi). -LICENSE(BSD-3-Clause) +PY2_LIBRARY() VERSION(1.1.0) +LICENSE(BSD-3-Clause) + NO_LINT() PY_SRCS( TOP_LEVEL + itsdangerous/__init__.py itsdangerous/_compat.py + itsdangerous/_json.py itsdangerous/encoding.py itsdangerous/exc.py - itsdangerous/__init__.py - itsdangerous/_json.py itsdangerous/jws.py itsdangerous/serializer.py itsdangerous/signer.py diff --git a/contrib/python/itsdangerous/py3/tests/__init__.py b/contrib/python/itsdangerous/py3/tests/test_itsdangerous/__init__.py index e69de29bb2..e69de29bb2 100644 --- a/contrib/python/itsdangerous/py3/tests/__init__.py +++ b/contrib/python/itsdangerous/py3/tests/test_itsdangerous/__init__.py diff --git a/contrib/python/itsdangerous/py3/tests/test_encoding.py b/contrib/python/itsdangerous/py3/tests/test_itsdangerous/test_encoding.py index 268367e6b1..268367e6b1 100644 --- a/contrib/python/itsdangerous/py3/tests/test_encoding.py +++ b/contrib/python/itsdangerous/py3/tests/test_itsdangerous/test_encoding.py diff --git a/contrib/python/itsdangerous/py3/tests/test_serializer.py b/contrib/python/itsdangerous/py3/tests/test_itsdangerous/test_serializer.py index cdc419191c..cdc419191c 100644 --- a/contrib/python/itsdangerous/py3/tests/test_serializer.py +++ b/contrib/python/itsdangerous/py3/tests/test_itsdangerous/test_serializer.py diff --git a/contrib/python/itsdangerous/py3/tests/test_signer.py b/contrib/python/itsdangerous/py3/tests/test_itsdangerous/test_signer.py index 1e053883aa..1e053883aa 100644 --- a/contrib/python/itsdangerous/py3/tests/test_signer.py +++ b/contrib/python/itsdangerous/py3/tests/test_itsdangerous/test_signer.py diff --git a/contrib/python/itsdangerous/py3/tests/test_timed.py b/contrib/python/itsdangerous/py3/tests/test_itsdangerous/test_timed.py index a529ef93f2..576028cbbb 100644 --- a/contrib/python/itsdangerous/py3/tests/test_timed.py +++ b/contrib/python/itsdangerous/py3/tests/test_itsdangerous/test_timed.py @@ -11,8 +11,8 @@ from itsdangerous.exc import SignatureExpired from itsdangerous.signer import Signer from itsdangerous.timed import TimedSerializer from itsdangerous.timed import TimestampSigner -from __tests__.test_serializer import TestSerializer -from __tests__.test_signer import TestSigner +from .test_serializer import TestSerializer +from .test_signer import TestSigner class FreezeMixin: diff --git a/contrib/python/itsdangerous/py3/tests/test_url_safe.py b/contrib/python/itsdangerous/py3/tests/test_itsdangerous/test_url_safe.py index 6dccebedcf..f895d24b7d 100644 --- a/contrib/python/itsdangerous/py3/tests/test_url_safe.py +++ b/contrib/python/itsdangerous/py3/tests/test_itsdangerous/test_url_safe.py @@ -4,8 +4,8 @@ import pytest from itsdangerous.url_safe import URLSafeSerializer from itsdangerous.url_safe import URLSafeTimedSerializer -from __tests__.test_serializer import TestSerializer -from __tests__.test_timed import TestTimedSerializer +from .test_serializer import TestSerializer +from .test_timed import TestTimedSerializer class TestURLSafeSerializer(TestSerializer): diff --git a/contrib/python/itsdangerous/py3/tests/ya.make b/contrib/python/itsdangerous/py3/tests/ya.make index fce10ba5a0..5a03f27b80 100644 --- a/contrib/python/itsdangerous/py3/tests/ya.make +++ b/contrib/python/itsdangerous/py3/tests/ya.make @@ -6,16 +6,14 @@ PEERDIR( ) TEST_SRCS( - __init__.py - test_encoding.py - test_serializer.py - test_signer.py - test_timed.py - test_url_safe.py + test_itsdangerous/__init__.py + test_itsdangerous/test_encoding.py + test_itsdangerous/test_serializer.py + test_itsdangerous/test_signer.py + test_itsdangerous/test_timed.py + test_itsdangerous/test_url_safe.py ) NO_LINT() -REQUIREMENTS(ram:10) - END() diff --git a/contrib/python/itsdangerous/py3/ya.make b/contrib/python/itsdangerous/py3/ya.make index f2f383d0a5..e74a40e020 100644 --- a/contrib/python/itsdangerous/py3/ya.make +++ b/contrib/python/itsdangerous/py3/ya.make @@ -1,3 +1,5 @@ +# Generated by devtools/yamaker (pypi). + PY3_LIBRARY() VERSION(2.1.2) diff --git a/contrib/python/matplotlib-inline/.dist-info/METADATA b/contrib/python/matplotlib-inline/.dist-info/METADATA index 3411afd2fb..2046024a64 100644 --- a/contrib/python/matplotlib-inline/.dist-info/METADATA +++ b/contrib/python/matplotlib-inline/.dist-info/METADATA @@ -1,13 +1,58 @@ Metadata-Version: 2.1 Name: matplotlib-inline -Version: 0.1.6 +Version: 0.1.7 Summary: Inline Matplotlib backend for Jupyter -Home-page: https://github.com/ipython/matplotlib-inline -Author: IPython Development Team -Author-email: ipython-dev@scipy.org -License: BSD 3-Clause -Keywords: python,ipython,matplotlib,jupyter -Requires-Python: >=3.5 +Author-email: IPython Development Team <ipython-dev@python.org> +License: BSD 3-Clause License + + Copyright (c) 2019-2022, IPython Development Team. + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Project-URL: Homepage, https://github.com/ipython/matplotlib-inline +Keywords: ipython,jupyter,matplotlib,python +Classifier: Development Status :: 5 - Production/Stable +Classifier: Framework :: IPython +Classifier: Framework :: Jupyter +Classifier: Framework :: Jupyter :: JupyterLab +Classifier: Framework :: Jupyter :: JupyterLab :: 3 +Classifier: Framework :: Jupyter :: JupyterLab :: 4 +Classifier: Intended Audience :: Developers +Classifier: Intended Audience :: Science/Research +Classifier: License :: OSI Approved :: BSD License +Classifier: Programming Language :: Python +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3.8 +Classifier: Programming Language :: Python :: 3.9 +Classifier: Programming Language :: Python :: 3.10 +Classifier: Programming Language :: Python :: 3.11 +Classifier: Programming Language :: Python :: 3.12 +Classifier: Topic :: Multimedia :: Graphics +Requires-Python: >=3.8 Description-Content-Type: text/markdown License-File: LICENSE Requires-Dist: traitlets @@ -50,33 +95,3 @@ plt.title('A simple chirp'); ## License Licensed under the terms of the BSD 3-Clause License, by the IPython Development Team (see `LICENSE` file). - -BSD 3-Clause License - -Copyright (c) 2019-2022, IPython Development Team. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/contrib/python/matplotlib-inline/.dist-info/entry_points.txt b/contrib/python/matplotlib-inline/.dist-info/entry_points.txt new file mode 100644 index 0000000000..cc52c3383b --- /dev/null +++ b/contrib/python/matplotlib-inline/.dist-info/entry_points.txt @@ -0,0 +1,2 @@ +[matplotlib.backend] +inline = matplotlib_inline.backend_inline diff --git a/contrib/python/matplotlib-inline/matplotlib_inline/__init__.py b/contrib/python/matplotlib-inline/matplotlib_inline/__init__.py index f7ef1dd1a5..dce942f899 100644 --- a/contrib/python/matplotlib-inline/matplotlib_inline/__init__.py +++ b/contrib/python/matplotlib-inline/matplotlib_inline/__init__.py @@ -1,2 +1,2 @@ from . import backend_inline, config # noqa -__version__ = "0.1.6" # noqa +__version__ = "0.1.7" # noqa diff --git a/contrib/python/matplotlib-inline/matplotlib_inline/backend_inline.py b/contrib/python/matplotlib-inline/matplotlib_inline/backend_inline.py index 6bcc1d4a01..05554b0d22 100644 --- a/contrib/python/matplotlib-inline/matplotlib_inline/backend_inline.py +++ b/contrib/python/matplotlib-inline/matplotlib_inline/backend_inline.py @@ -176,7 +176,7 @@ def configure_inline_support(shell, backend): if cfg not in shell.configurables: shell.configurables.append(cfg) - if backend == 'module://matplotlib_inline.backend_inline': + if backend in ('inline', 'module://matplotlib_inline.backend_inline'): shell.events.register('post_execute', flush_figures) # Save rcParams that will be overwrittern @@ -211,7 +211,7 @@ def _enable_matplotlib_integration(): from matplotlib import get_backend ip = get_ipython() backend = get_backend() - if ip and backend == 'module://%s' % __name__: + if ip and backend in ('inline', 'module://matplotlib_inline.backend_inline'): from IPython.core.pylabtools import activate_matplotlib try: activate_matplotlib(backend) diff --git a/contrib/python/matplotlib-inline/ya.make b/contrib/python/matplotlib-inline/ya.make index 2d3b3148c0..0de287f135 100644 --- a/contrib/python/matplotlib-inline/ya.make +++ b/contrib/python/matplotlib-inline/ya.make @@ -2,7 +2,7 @@ PY3_LIBRARY() -VERSION(0.1.6) +VERSION(0.1.7) LICENSE(BSD-3-Clause) @@ -26,6 +26,7 @@ PY_SRCS( RESOURCE_FILES( PREFIX contrib/python/matplotlib-inline/ .dist-info/METADATA + .dist-info/entry_points.txt .dist-info/top_level.txt ) diff --git a/contrib/python/olefile/py2/.dist-info/METADATA b/contrib/python/olefile/py2/.dist-info/METADATA index fe7735d0fd..2521b75751 100644 --- a/contrib/python/olefile/py2/.dist-info/METADATA +++ b/contrib/python/olefile/py2/.dist-info/METADATA @@ -1,13 +1,12 @@ Metadata-Version: 2.1 Name: olefile -Version: 0.46 +Version: 0.47 Summary: Python package to parse, read and write Microsoft OLE2 files (Structured Storage or Compound Document, Microsoft Office) Home-page: https://www.decalage.info/python/olefileio Author: Philippe Lagadec Author-email: nospam@decalage.info License: BSD Download-URL: https://github.com/decalage2/olefile/tarball/master -Description-Content-Type: UNKNOWN Platform: UNKNOWN Classifier: Development Status :: 5 - Production/Stable Classifier: Intended Audience :: Developers @@ -20,74 +19,79 @@ Classifier: Programming Language :: Python Classifier: Programming Language :: Python :: 2 Classifier: Programming Language :: Python :: 2.7 Classifier: Programming Language :: Python :: 3 -Classifier: Programming Language :: Python :: 3.4 Classifier: Programming Language :: Python :: 3.5 Classifier: Programming Language :: Python :: 3.6 Classifier: Programming Language :: Python :: 3.7 +Classifier: Programming Language :: Python :: 3.8 +Classifier: Programming Language :: Python :: 3.9 +Classifier: Programming Language :: Python :: 3.10 +Classifier: Programming Language :: Python :: 3.11 +Classifier: Programming Language :: Python :: 3.12 Classifier: Programming Language :: Python :: Implementation :: CPython Classifier: Programming Language :: Python :: Implementation :: PyPy Classifier: Topic :: Software Development :: Libraries :: Python Modules -Requires-Python: >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.* +Requires-Python: >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.* +Description-Content-Type: text/markdown +Provides-Extra: tests +Requires-Dist: pytest ; extra == 'tests' +Requires-Dist: pytest-cov ; extra == 'tests' olefile ======= -|Build Status TravisCI| |Build Status AppVeyor| |Coverage Status| -|Documentation Status| |PyPI| |Can I Use Python 3?| |Say Thanks!| - -`olefile <https://www.decalage.info/olefile>`__ is a Python package to -parse, read and write `Microsoft OLE2 -files <http://en.wikipedia.org/wiki/Compound_File_Binary_Format>`__ -(also called Structured Storage, Compound File Binary Format or Compound -Document File Format), such as Microsoft Office 97-2003 documents, -vbaProject.bin in MS Office 2007+ files, Image Composer and FlashPix -files, Outlook messages, StickyNotes, several Microscopy file formats, -McAfee antivirus quarantine files, etc. - -**Quick links:** `Home page <https://www.decalage.info/olefile>`__ - -`Download/Install <http://olefile.readthedocs.io/en/latest/Install.html>`__ -- `Documentation <http://olefile.readthedocs.io/en/latest>`__ - `Report -Issues/Suggestions/Questions <https://github.com/decalage2/olefile/issues>`__ -- `Contact the author <https://www.decalage.info/contact>`__ - -`Repository <https://github.com/decalage2/olefile>`__ - `Updates on -Twitter <https://twitter.com/decalage2>`__ +[![Test](https://github.com/decalage2/olefile/actions/workflows/test.yml/badge.svg)](https://github.com/decalage2/olefile/actions) +[![Build Status AppVeyor](https://ci.appveyor.com/api/projects/status/github/decalage2/olefile?svg=true)](https://ci.appveyor.com/project/decalage2/olefile) +[![codecov](https://codecov.io/gh/decalage2/olefile/branch/main/graph/badge.svg)](https://codecov.io/gh/decalage2/olefile) +[![Documentation Status](http://readthedocs.org/projects/olefile/badge/?version=latest)](http://olefile.readthedocs.io/en/latest/?badge=latest) +[![PyPI](https://img.shields.io/pypi/v/olefile.svg)](https://pypi.org/project/olefile/) +[![Say Thanks!](https://img.shields.io/badge/Say%20Thanks-!-1EAEDB.svg)](https://saythanks.io/to/decalage2) + +[olefile](https://www.decalage.info/olefile) is a Python package to parse, read and write +[Microsoft OLE2 files](http://en.wikipedia.org/wiki/Compound_File_Binary_Format) +(also called Structured Storage, Compound File Binary Format or Compound Document File Format), +such as Microsoft Office 97-2003 documents, vbaProject.bin in MS Office 2007+ files, Image Composer +and FlashPix files, Outlook messages, StickyNotes, several Microscopy file formats, McAfee antivirus quarantine files, +etc. + + +**Quick links:** [Home page](https://www.decalage.info/olefile) - +[Download/Install](http://olefile.readthedocs.io/en/latest/Install.html) - +[Documentation](http://olefile.readthedocs.io/en/latest) - +[Report Issues/Suggestions/Questions](https://github.com/decalage2/olefile/issues) - +[Contact the author](https://www.decalage.info/contact) - +[Repository](https://github.com/decalage2/olefile) - +[Updates on Twitter](https://twitter.com/decalage2) + News ---- -Follow all updates and news on Twitter: https://twitter.com/decalage2 - -- **2018-09-09 v0.46**: OleFileIO can now be used as a context manager - (with...as), to close the file automatically (see - `doc <https://olefile.readthedocs.io/en/latest/Howto.html#open-an-ole-file-from-disk>`__). - Improved handling of malformed files, fixed several bugs. -- 2018-01-24 v0.45: olefile can now overwrite streams of any size, - improved handling of malformed files, fixed several - `bugs <https://github.com/decalage2/olefile/milestone/4?closed=1>`__, - end of support for Python 2.6 and 3.3. -- 2017-01-06 v0.44: several bugfixes, removed support for Python 2.5 - (olefile2), added support for incomplete streams and incorrect - directory entries (to read malformed documents), added getclsid, - improved `documentation <http://olefile.readthedocs.io/en/latest>`__ - with API reference. -- 2017-01-04: moved the documentation to - `ReadTheDocs <http://olefile.readthedocs.io/en/latest>`__ -- 2016-05-20: moved olefile repository to - `GitHub <https://github.com/decalage2/olefile>`__ -- 2016-02-02 v0.43: fixed issues - `#26 <https://github.com/decalage2/olefile/issues/26>`__ and - `#27 <https://github.com/decalage2/olefile/issues/27>`__, better - handling of malformed files, use python logging. -- see - `changelog <https://github.com/decalage2/olefile/blob/master/CHANGELOG.md>`__ - for more detailed information and the latest changes. +Follow all updates and news on Twitter: <https://twitter.com/decalage2> + +- **2023-12-01 v0.47**: now distributed as wheel package, added VT_VECTOR support for properties, + added get_userdefined_properties, fixed bugs in isOleFile and write_sect, improved file closure +- 2018-09-09 v0.46: OleFileIO can now be used as a context manager +(with...as), to close the file automatically +(see [doc](https://olefile.readthedocs.io/en/latest/Howto.html#open-an-ole-file-from-disk)). +Improved handling of malformed files, fixed several bugs. +- 2018-01-24 v0.45: olefile can now overwrite streams of any size, improved handling of malformed files, +fixed several [bugs](https://github.com/decalage2/olefile/milestone/4?closed=1), end of support for Python 2.6 and 3.3. +- 2017-01-06 v0.44: several bugfixes, removed support for Python 2.5 (olefile2), +added support for incomplete streams and incorrect directory entries (to read malformed documents), +added getclsid, improved [documentation](http://olefile.readthedocs.io/en/latest) with API reference. +- 2017-01-04: moved the documentation to [ReadTheDocs](http://olefile.readthedocs.io/en/latest) +- 2016-05-20: moved olefile repository to [GitHub](https://github.com/decalage2/olefile) +- 2016-02-02 v0.43: fixed issues [#26](https://github.com/decalage2/olefile/issues/26) + and [#27](https://github.com/decalage2/olefile/issues/27), + better handling of malformed files, use python logging. +- see [changelog](https://github.com/decalage2/olefile/blob/master/CHANGELOG.md) for more detailed information and +the latest changes. Download/Install ---------------- -If you have pip or setuptools installed (pip is included in Python -2.7.9+), you may simply run **pip install olefile** or **easy_install -olefile** for the first installation. +If you have pip or setuptools installed (pip is included in Python 2.7.9+), you may simply run **pip install olefile** +or **easy_install olefile** for the first installation. To update olefile, run **pip install -U olefile**. @@ -96,115 +100,86 @@ Otherwise, see http://olefile.readthedocs.io/en/latest/Install.html Features -------- -- Parse, read and write any OLE file such as Microsoft Office 97-2003 - legacy document formats (Word .doc, Excel .xls, PowerPoint .ppt, - Visio .vsd, Project .mpp), Image Composer and FlashPix files, Outlook - messages, StickyNotes, Zeiss AxioVision ZVI files, Olympus FluoView - OIB files, etc -- List all the streams and storages contained in an OLE file -- Open streams as files -- Parse and read property streams, containing metadata of the file -- Portable, pure Python module, no dependency +- Parse, read and write any OLE file such as Microsoft Office 97-2003 legacy document formats (Word .doc, Excel .xls, + PowerPoint .ppt, Visio .vsd, Project .mpp), MSI files, Image Composer and FlashPix files, Outlook messages, StickyNotes, + Zeiss AxioVision ZVI files, Olympus FluoView OIB files, etc +- List all the streams and storages contained in an OLE file +- Open streams as files +- Parse and read property streams, containing metadata of the file +- Portable, pure Python module, no dependency olefile can be used as an independent package or with PIL/Pillow. -olefile is mostly meant for developers. If you are looking for tools to -analyze OLE files or to extract data (especially for security purposes -such as malware analysis and forensics), then please also check my -`python-oletools <https://www.decalage.info/python/oletools>`__, which -are built upon olefile and provide a higher-level interface. +olefile is mostly meant for developers. If you are looking for tools to analyze OLE files or to extract data (especially +for security purposes such as malware analysis and forensics), then please also check my +[python-oletools](https://www.decalage.info/python/oletools), which are built upon olefile and provide a higher-level interface. + Documentation ------------- -Please see the `online -documentation <http://olefile.readthedocs.io/en/latest>`__ for more -information. +Please see the [online documentation](http://olefile.readthedocs.io/en/latest) for more information. + -Real-life examples ------------------- +## Real-life examples ## -A real-life example: `using OleFileIO_PL for malware analysis and -forensics <http://blog.gregback.net/2011/03/using-remnux-for-forensic-puzzle-6/>`__. +A real-life example: [using OleFileIO_PL for malware analysis and forensics](http://blog.gregback.net/2011/03/using-remnux-for-forensic-puzzle-6/). + +See also [this paper](https://computer-forensics.sans.org/community/papers/gcfa/grow-forensic-tools-taxonomy-python-libraries-helpful-forensic-analysis_6879) about python tools for forensics, which features olefile. -See also `this -paper <https://computer-forensics.sans.org/community/papers/gcfa/grow-forensic-tools-taxonomy-python-libraries-helpful-forensic-analysis_6879>`__ -about python tools for forensics, which features olefile. License ------- -olefile (formerly OleFileIO_PL) is copyright (c) 2005-2018 Philippe -Lagadec (https://www.decalage.info) +olefile (formerly OleFileIO_PL) is copyright (c) 2005-2023 Philippe Lagadec +([https://www.decalage.info](https://www.decalage.info)) All rights reserved. -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - -- Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. -- Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS -IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED -TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A -PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED -TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - --------------- - -olefile is based on source code from the OleFileIO module of the Python -Imaging Library (PIL) published by Fredrik Lundh under the following -license: +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +---------- + +olefile is based on source code from the OleFileIO module of the Python Imaging Library (PIL) published by Fredrik +Lundh under the following license: The Python Imaging Library (PIL) is -- Copyright (c) 1997-2009 by Secret Labs AB -- Copyright (c) 1995-2009 by Fredrik Lundh - -By obtaining, using, and/or copying this software and/or its associated -documentation, you agree that you have read, understood, and will comply -with the following terms and conditions: - -Permission to use, copy, modify, and distribute this software and its -associated documentation for any purpose and without fee is hereby -granted, provided that the above copyright notice appears in all copies, -and that both that copyright notice and this permission notice appear in -supporting documentation, and that the name of Secret Labs AB or the -author not be used in advertising or publicity pertaining to -distribution of the software without specific, written prior permission. - -SECRET LABS AB AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO -THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS. IN NO EVENT SHALL SECRET LABS AB OR THE AUTHOR BE LIABLE FOR -ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER -RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF -CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN -CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - -.. |Build Status TravisCI| image:: https://travis-ci.org/decalage2/olefile.svg?branch=master - :target: https://travis-ci.org/decalage2/olefile -.. |Build Status AppVeyor| image:: https://ci.appveyor.com/api/projects/status/github/decalage2/olefile?svg=true - :target: https://ci.appveyor.com/project/decalage2/olefile -.. |Coverage Status| image:: https://coveralls.io/repos/github/decalage2/olefile/badge.svg?branch=master - :target: https://coveralls.io/github/decalage2/olefile?branch=master -.. |Documentation Status| image:: http://readthedocs.org/projects/olefile/badge/?version=latest - :target: http://olefile.readthedocs.io/en/latest/?badge=latest -.. |PyPI| image:: https://img.shields.io/pypi/v/olefile.svg - :target: https://pypi.org/project/olefile/ -.. |Can I Use Python 3?| image:: https://caniusepython3.com/project/olefile.svg - :target: https://caniusepython3.com/project/olefile -.. |Say Thanks!| image:: https://img.shields.io/badge/Say%20Thanks-!-1EAEDB.svg - :target: https://saythanks.io/to/decalage2 +- Copyright (c) 1997-2009 by Secret Labs AB +- Copyright (c) 1995-2009 by Fredrik Lundh + +By obtaining, using, and/or copying this software and/or its associated documentation, you agree that you have read, +understood, and will comply with the following terms and conditions: + +Permission to use, copy, modify, and distribute this software and its associated documentation for any purpose and +without fee is hereby granted, provided that the above copyright notice appears in all copies, and that both that +copyright notice and this permission notice appear in supporting documentation, and that the name of Secret Labs AB or +the author not be used in advertising or publicity pertaining to distribution of the software without specific, written +prior permission. + +SECRET LABS AB AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL SECRET LABS AB OR THE AUTHOR BE LIABLE FOR ANY SPECIAL, INDIRECT OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF +CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +SOFTWARE. diff --git a/contrib/python/olefile/py2/LICENSE.txt b/contrib/python/olefile/py2/LICENSE.txt index 81dad32622..5f53714a94 100644 --- a/contrib/python/olefile/py2/LICENSE.txt +++ b/contrib/python/olefile/py2/LICENSE.txt @@ -1,6 +1,6 @@ LICENSE for the olefile package: -olefile (formerly OleFileIO_PL) is copyright (c) 2005-2018 Philippe Lagadec +olefile (formerly OleFileIO_PL) is copyright (c) 2005-2023 Philippe Lagadec (https://www.decalage.info) All rights reserved. diff --git a/contrib/python/olefile/py2/OleFileIO_PL.py b/contrib/python/olefile/py2/OleFileIO_PL.py new file mode 100644 index 0000000000..ffa4075e3b --- /dev/null +++ b/contrib/python/olefile/py2/OleFileIO_PL.py @@ -0,0 +1,37 @@ +#!/usr/local/bin/python +# -*- coding: latin-1 -*- +""" +olefile (formerly OleFileIO_PL) + +Module to read/write Microsoft OLE2 files (also called Structured Storage or +Microsoft Compound Document File Format), such as Microsoft Office 97-2003 +documents, Image Composer and FlashPix files, Outlook messages, ... +This version is compatible with Python 2.6+ and 3.x + +Project website: http://www.decalage.info/olefile + +olefile is copyright (c) 2005-2015 Philippe Lagadec (http://www.decalage.info) + +olefile is based on the OleFileIO module from the PIL library v1.1.6 +See: http://www.pythonware.com/products/pil/index.htm + +The Python Imaging Library (PIL) is + Copyright (c) 1997-2005 by Secret Labs AB + Copyright (c) 1995-2005 by Fredrik Lundh + +See source code and LICENSE.txt for information on usage and redistribution. +""" + +# The OleFileIO_PL module is for backward compatibility + +try: + # first try to import olefile for Python 2.6+/3.x + from olefile.olefile import * + # import metadata not covered by *: + from olefile.olefile import __version__, __author__, __date__ + +except: + # if it fails, fallback to the old version olefile2 for Python 2.x: + from olefile.olefile2 import * + # import metadata not covered by *: + from olefile.olefile2 import __doc__, __version__, __author__, __date__ diff --git a/contrib/python/olefile/py2/README.md b/contrib/python/olefile/py2/README.md index 8987e1b8a2..f053489a47 100644 --- a/contrib/python/olefile/py2/README.md +++ b/contrib/python/olefile/py2/README.md @@ -1,12 +1,11 @@ olefile ======= -[![Build Status TravisCI](https://travis-ci.org/decalage2/olefile.svg?branch=master)](https://travis-ci.org/decalage2/olefile) +[![Test](https://github.com/decalage2/olefile/actions/workflows/test.yml/badge.svg)](https://github.com/decalage2/olefile/actions) [![Build Status AppVeyor](https://ci.appveyor.com/api/projects/status/github/decalage2/olefile?svg=true)](https://ci.appveyor.com/project/decalage2/olefile) -[![Coverage Status](https://coveralls.io/repos/github/decalage2/olefile/badge.svg?branch=master)](https://coveralls.io/github/decalage2/olefile?branch=master) +[![codecov](https://codecov.io/gh/decalage2/olefile/branch/main/graph/badge.svg)](https://codecov.io/gh/decalage2/olefile) [![Documentation Status](http://readthedocs.org/projects/olefile/badge/?version=latest)](http://olefile.readthedocs.io/en/latest/?badge=latest) [![PyPI](https://img.shields.io/pypi/v/olefile.svg)](https://pypi.org/project/olefile/) -[![Can I Use Python 3?](https://caniusepython3.com/project/olefile.svg)](https://caniusepython3.com/project/olefile) [![Say Thanks!](https://img.shields.io/badge/Say%20Thanks-!-1EAEDB.svg)](https://saythanks.io/to/decalage2) [olefile](https://www.decalage.info/olefile) is a Python package to parse, read and write @@ -31,7 +30,9 @@ News Follow all updates and news on Twitter: <https://twitter.com/decalage2> -- **2018-09-09 v0.46**: OleFileIO can now be used as a context manager +- **2023-12-01 v0.47**: now distributed as wheel package, added VT_VECTOR support for properties, + added get_userdefined_properties, fixed bugs in isOleFile and write_sect, improved file closure +- 2018-09-09 v0.46: OleFileIO can now be used as a context manager (with...as), to close the file automatically (see [doc](https://olefile.readthedocs.io/en/latest/Howto.html#open-an-ole-file-from-disk)). Improved handling of malformed files, fixed several bugs. @@ -62,7 +63,7 @@ Features -------- - Parse, read and write any OLE file such as Microsoft Office 97-2003 legacy document formats (Word .doc, Excel .xls, - PowerPoint .ppt, Visio .vsd, Project .mpp), Image Composer and FlashPix files, Outlook messages, StickyNotes, + PowerPoint .ppt, Visio .vsd, Project .mpp), MSI files, Image Composer and FlashPix files, Outlook messages, StickyNotes, Zeiss AxioVision ZVI files, Olympus FluoView OIB files, etc - List all the streams and storages contained in an OLE file - Open streams as files @@ -92,7 +93,7 @@ See also [this paper](https://computer-forensics.sans.org/community/papers/gcfa/ License ------- -olefile (formerly OleFileIO_PL) is copyright (c) 2005-2018 Philippe Lagadec +olefile (formerly OleFileIO_PL) is copyright (c) 2005-2023 Philippe Lagadec ([https://www.decalage.info](https://www.decalage.info)) All rights reserved. diff --git a/contrib/python/olefile/py2/README.rst b/contrib/python/olefile/py2/README.rst deleted file mode 100644 index df8fb11462..0000000000 --- a/contrib/python/olefile/py2/README.rst +++ /dev/null @@ -1,177 +0,0 @@ -olefile -======= - -|Build Status TravisCI| |Build Status AppVeyor| |Coverage Status| -|Documentation Status| |PyPI| |Can I Use Python 3?| |Say Thanks!| - -`olefile <https://www.decalage.info/olefile>`__ is a Python package to -parse, read and write `Microsoft OLE2 -files <http://en.wikipedia.org/wiki/Compound_File_Binary_Format>`__ -(also called Structured Storage, Compound File Binary Format or Compound -Document File Format), such as Microsoft Office 97-2003 documents, -vbaProject.bin in MS Office 2007+ files, Image Composer and FlashPix -files, Outlook messages, StickyNotes, several Microscopy file formats, -McAfee antivirus quarantine files, etc. - -**Quick links:** `Home page <https://www.decalage.info/olefile>`__ - -`Download/Install <http://olefile.readthedocs.io/en/latest/Install.html>`__ -- `Documentation <http://olefile.readthedocs.io/en/latest>`__ - `Report -Issues/Suggestions/Questions <https://github.com/decalage2/olefile/issues>`__ -- `Contact the author <https://www.decalage.info/contact>`__ - -`Repository <https://github.com/decalage2/olefile>`__ - `Updates on -Twitter <https://twitter.com/decalage2>`__ - -News ----- - -Follow all updates and news on Twitter: https://twitter.com/decalage2 - -- **2018-09-09 v0.46**: OleFileIO can now be used as a context manager - (with...as), to close the file automatically (see - `doc <https://olefile.readthedocs.io/en/latest/Howto.html#open-an-ole-file-from-disk>`__). - Improved handling of malformed files, fixed several bugs. -- 2018-01-24 v0.45: olefile can now overwrite streams of any size, - improved handling of malformed files, fixed several - `bugs <https://github.com/decalage2/olefile/milestone/4?closed=1>`__, - end of support for Python 2.6 and 3.3. -- 2017-01-06 v0.44: several bugfixes, removed support for Python 2.5 - (olefile2), added support for incomplete streams and incorrect - directory entries (to read malformed documents), added getclsid, - improved `documentation <http://olefile.readthedocs.io/en/latest>`__ - with API reference. -- 2017-01-04: moved the documentation to - `ReadTheDocs <http://olefile.readthedocs.io/en/latest>`__ -- 2016-05-20: moved olefile repository to - `GitHub <https://github.com/decalage2/olefile>`__ -- 2016-02-02 v0.43: fixed issues - `#26 <https://github.com/decalage2/olefile/issues/26>`__ and - `#27 <https://github.com/decalage2/olefile/issues/27>`__, better - handling of malformed files, use python logging. -- see - `changelog <https://github.com/decalage2/olefile/blob/master/CHANGELOG.md>`__ - for more detailed information and the latest changes. - -Download/Install ----------------- - -If you have pip or setuptools installed (pip is included in Python -2.7.9+), you may simply run **pip install olefile** or **easy_install -olefile** for the first installation. - -To update olefile, run **pip install -U olefile**. - -Otherwise, see http://olefile.readthedocs.io/en/latest/Install.html - -Features --------- - -- Parse, read and write any OLE file such as Microsoft Office 97-2003 - legacy document formats (Word .doc, Excel .xls, PowerPoint .ppt, - Visio .vsd, Project .mpp), Image Composer and FlashPix files, Outlook - messages, StickyNotes, Zeiss AxioVision ZVI files, Olympus FluoView - OIB files, etc -- List all the streams and storages contained in an OLE file -- Open streams as files -- Parse and read property streams, containing metadata of the file -- Portable, pure Python module, no dependency - -olefile can be used as an independent package or with PIL/Pillow. - -olefile is mostly meant for developers. If you are looking for tools to -analyze OLE files or to extract data (especially for security purposes -such as malware analysis and forensics), then please also check my -`python-oletools <https://www.decalage.info/python/oletools>`__, which -are built upon olefile and provide a higher-level interface. - -Documentation -------------- - -Please see the `online -documentation <http://olefile.readthedocs.io/en/latest>`__ for more -information. - -Real-life examples ------------------- - -A real-life example: `using OleFileIO_PL for malware analysis and -forensics <http://blog.gregback.net/2011/03/using-remnux-for-forensic-puzzle-6/>`__. - -See also `this -paper <https://computer-forensics.sans.org/community/papers/gcfa/grow-forensic-tools-taxonomy-python-libraries-helpful-forensic-analysis_6879>`__ -about python tools for forensics, which features olefile. - -License -------- - -olefile (formerly OleFileIO_PL) is copyright (c) 2005-2018 Philippe -Lagadec (https://www.decalage.info) - -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - -- Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. -- Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS -IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED -TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A -PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED -TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - --------------- - -olefile is based on source code from the OleFileIO module of the Python -Imaging Library (PIL) published by Fredrik Lundh under the following -license: - -The Python Imaging Library (PIL) is - -- Copyright (c) 1997-2009 by Secret Labs AB -- Copyright (c) 1995-2009 by Fredrik Lundh - -By obtaining, using, and/or copying this software and/or its associated -documentation, you agree that you have read, understood, and will comply -with the following terms and conditions: - -Permission to use, copy, modify, and distribute this software and its -associated documentation for any purpose and without fee is hereby -granted, provided that the above copyright notice appears in all copies, -and that both that copyright notice and this permission notice appear in -supporting documentation, and that the name of Secret Labs AB or the -author not be used in advertising or publicity pertaining to -distribution of the software without specific, written prior permission. - -SECRET LABS AB AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO -THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS. IN NO EVENT SHALL SECRET LABS AB OR THE AUTHOR BE LIABLE FOR -ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER -RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF -CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN -CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - -.. |Build Status TravisCI| image:: https://travis-ci.org/decalage2/olefile.svg?branch=master - :target: https://travis-ci.org/decalage2/olefile -.. |Build Status AppVeyor| image:: https://ci.appveyor.com/api/projects/status/github/decalage2/olefile?svg=true - :target: https://ci.appveyor.com/project/decalage2/olefile -.. |Coverage Status| image:: https://coveralls.io/repos/github/decalage2/olefile/badge.svg?branch=master - :target: https://coveralls.io/github/decalage2/olefile?branch=master -.. |Documentation Status| image:: http://readthedocs.org/projects/olefile/badge/?version=latest - :target: http://olefile.readthedocs.io/en/latest/?badge=latest -.. |PyPI| image:: https://img.shields.io/pypi/v/olefile.svg - :target: https://pypi.org/project/olefile/ -.. |Can I Use Python 3?| image:: https://caniusepython3.com/project/olefile.svg - :target: https://caniusepython3.com/project/olefile -.. |Say Thanks!| image:: https://img.shields.io/badge/Say%20Thanks-!-1EAEDB.svg - :target: https://saythanks.io/to/decalage2 diff --git a/contrib/python/olefile/py2/olefile/CONTRIBUTORS.txt b/contrib/python/olefile/py2/olefile/CONTRIBUTORS.txt new file mode 100644 index 0000000000..45c56828c3 --- /dev/null +++ b/contrib/python/olefile/py2/olefile/CONTRIBUTORS.txt @@ -0,0 +1,17 @@ +CONTRIBUTORS for the olefile project +==================================== + +This is a non-exhaustive list of all the people who helped me improve the +olefile project (formerly OleFileIO_PL), in approximative chronological order. +Please contact me if I forgot to mention your name. + +A big thank you to all of them: + +- Niko Ehrenfeuchter: added support for Jython +- Niko Ehrenfeuchter, Martijn Berger and Dave Jones: helped fix 4K sector support +- Martin Panter: conversion to Python 3.x/2.6+ +- mete0r_kr: added support for file-like objects +- chuckleberryfinn: fixed bug in getproperties +- Martijn, Ben G.: bug report for 64 bits platforms +- Philippe Lagadec: main author and maintainer since 2005 +- and of course Fredrik Lundh: original author of OleFileIO from 1995 to 2005 diff --git a/contrib/python/olefile/py2/olefile/LICENSE.txt b/contrib/python/olefile/py2/olefile/LICENSE.txt new file mode 100644 index 0000000000..61ecdd96c1 --- /dev/null +++ b/contrib/python/olefile/py2/olefile/LICENSE.txt @@ -0,0 +1,56 @@ +LICENSE for the olefile package: + +olefile (formerly OleFileIO_PL) is copyright (c) 2005-2015 Philippe Lagadec +(http://www.decalage.info) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +---------- + +olefile is based on source code from the OleFileIO module of the Python +Imaging Library (PIL) published by Fredrik Lundh under the following license: + +The Python Imaging Library (PIL) is +- Copyright (c) 1997-2005 by Secret Labs AB +- Copyright (c) 1995-2005 by Fredrik Lundh + +By obtaining, using, and/or copying this software and/or its associated +documentation, you agree that you have read, understood, and will comply with +the following terms and conditions: + +Permission to use, copy, modify, and distribute this software and its +associated documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appears in all copies, and that both +that copyright notice and this permission notice appear in supporting +documentation, and that the name of Secret Labs AB or the author not be used +in advertising or publicity pertaining to distribution of the software without +specific, written prior permission. + +SECRET LABS AB AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS +SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN +NO EVENT SHALL SECRET LABS AB OR THE AUTHOR BE LIABLE FOR ANY SPECIAL, +INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. diff --git a/contrib/python/olefile/py2/olefile/README.rst b/contrib/python/olefile/py2/olefile/README.rst new file mode 100644 index 0000000000..4c5fbc4579 --- /dev/null +++ b/contrib/python/olefile/py2/olefile/README.rst @@ -0,0 +1,221 @@ +olefile (formerly OleFileIO\_PL) +================================ + +`olefile <http://www.decalage.info/olefile>`_ is a Python package to +parse, read and write `Microsoft OLE2 +files <http://en.wikipedia.org/wiki/Compound_File_Binary_Format>`_ (also +called Structured Storage, Compound File Binary Format or Compound +Document File Format), such as Microsoft Office 97-2003 documents, +vbaProject.bin in MS Office 2007+ files, Image Composer and FlashPix +files, Outlook messages, StickyNotes, several Microscopy file formats, +McAfee antivirus quarantine files, etc. + +**Quick links:** `Home page <http://www.decalage.info/olefile>`_ - +`Download/Install <https://bitbucket.org/decalage/olefileio_pl/wiki/Install>`_ +- `Documentation <https://bitbucket.org/decalage/olefileio_pl/wiki>`_ - +`Report +Issues/Suggestions/Questions <https://bitbucket.org/decalage/olefileio_pl/issues?status=new&status=open>`_ +- `Contact the author <http://decalage.info/contact>`_ - +`Repository <https://bitbucket.org/decalage/olefileio_pl>`_ - `Updates +on Twitter <https://twitter.com/decalage2>`_ + +News +---- + +Follow all updates and news on Twitter: https://twitter.com/decalage2 + +- **2015-01-25 v0.42**: improved handling of special characters in + stream/storage names on Python 2.x (using UTF-8 instead of Latin-1), + fixed bug in listdir with empty storages. +- 2014-11-25 v0.41: OleFileIO.open and isOleFile now support OLE files + stored in byte strings, fixed installer for python 3, added support + for Jython (Niko Ehrenfeuchter) +- 2014-10-01 v0.40: renamed OleFileIO\_PL to olefile, added initial + write support for streams >4K, updated doc and license, improved the + setup script. +- 2014-07-27 v0.31: fixed support for large files with 4K sectors, + thanks to Niko Ehrenfeuchter, Martijn Berger and Dave Jones. Added + test scripts from Pillow (by hugovk). Fixed setup for Python 3 + (Martin Panter) +- 2014-02-04 v0.30: now compatible with Python 3.x, thanks to Martin + Panter who did most of the hard work. +- 2013-07-24 v0.26: added methods to parse stream/storage timestamps, + improved listdir to include storages, fixed parsing of direntry + timestamps +- 2013-05-27 v0.25: improved metadata extraction, properties parsing + and exception handling, fixed `issue + #12 <https://bitbucket.org/decalage/olefileio_pl/issue/12/error-when-converting-timestamps-in-ole>`_ +- 2013-05-07 v0.24: new features to extract metadata (get\_metadata + method and OleMetadata class), improved getproperties to convert + timestamps to Python datetime +- 2012-10-09: published + `python-oletools <http://www.decalage.info/python/oletools>`_, a + package of analysis tools based on OleFileIO\_PL +- 2012-09-11 v0.23: added support for file-like objects, fixed `issue + #8 <https://bitbucket.org/decalage/olefileio_pl/issue/8/bug-with-file-object>`_ +- 2012-02-17 v0.22: fixed issues #7 (bug in getproperties) and #2 + (added close method) +- 2011-10-20: code hosted on bitbucket to ease contributions and bug + tracking +- 2010-01-24 v0.21: fixed support for big-endian CPUs, such as PowerPC + Macs. +- 2009-12-11 v0.20: small bugfix in OleFileIO.open when filename is not + plain str. +- 2009-12-10 v0.19: fixed support for 64 bits platforms (thanks to Ben + G. and Martijn for reporting the bug) +- see changelog in source code for more info. + +Download/Install +---------------- + +If you have pip or setuptools installed (pip is included in Python +2.7.9+), you may simply run **pip install olefile** or **easy\_install +olefile** for the first installation. + +To update olefile, run **pip install -U olefile**. + +Otherwise, see https://bitbucket.org/decalage/olefileio\_pl/wiki/Install + +Features +-------- + +- Parse, read and write any OLE file such as Microsoft Office 97-2003 + legacy document formats (Word .doc, Excel .xls, PowerPoint .ppt, + Visio .vsd, Project .mpp), Image Composer and FlashPix files, Outlook + messages, StickyNotes, Zeiss AxioVision ZVI files, Olympus FluoView + OIB files, etc +- List all the streams and storages contained in an OLE file +- Open streams as files +- Parse and read property streams, containing metadata of the file +- Portable, pure Python module, no dependency + +olefile can be used as an independent package or with PIL/Pillow. + +olefile is mostly meant for developers. If you are looking for tools to +analyze OLE files or to extract data (especially for security purposes +such as malware analysis and forensics), then please also check my +`python-oletools <http://www.decalage.info/python/oletools>`_, which are +built upon olefile and provide a higher-level interface. + +History +------- + +olefile is based on the OleFileIO module from +`PIL <http://www.pythonware.com/products/pil/index.htm>`_, the excellent +Python Imaging Library, created and maintained by Fredrik Lundh. The +olefile API is still compatible with PIL, but since 2005 I have improved +the internal implementation significantly, with new features, bugfixes +and a more robust design. From 2005 to 2014 the project was called +OleFileIO\_PL, and in 2014 I changed its name to olefile to celebrate +its 9 years and its new write features. + +As far as I know, olefile is the most complete and robust Python +implementation to read MS OLE2 files, portable on several operating +systems. (please tell me if you know other similar Python modules) + +Since 2014 olefile/OleFileIO\_PL has been integrated into +`Pillow <http://python-imaging.github.io/>`_, the friendly fork of PIL. +olefile will continue to be improved as a separate project, and new +versions will be merged into Pillow regularly. + +Main improvements over the original version of OleFileIO in PIL: +---------------------------------------------------------------- + +- Compatible with Python 3.x and 2.6+ +- Many bug fixes +- Support for files larger than 6.8MB +- Support for 64 bits platforms and big-endian CPUs +- Robust: many checks to detect malformed files +- Runtime option to choose if malformed files should be parsed or raise + exceptions +- Improved API +- Metadata extraction, stream/storage timestamps (e.g. for document + forensics) +- Can open file-like objects +- Added setup.py and install.bat to ease installation +- More convenient slash-based syntax for stream paths +- Write features + +Documentation +------------- + +Please see the `online +documentation <https://bitbucket.org/decalage/olefileio_pl/wiki>`_ for +more information, especially the `OLE +overview <https://bitbucket.org/decalage/olefileio_pl/wiki/OLE_Overview>`_ +and the `API +page <https://bitbucket.org/decalage/olefileio_pl/wiki/API>`_ which +describe how to use olefile in Python applications. A copy of the same +documentation is also provided in the doc subfolder of the olefile +package. + +Real-life examples +------------------ + +A real-life example: `using OleFileIO\_PL for malware analysis and +forensics <http://blog.gregback.net/2011/03/using-remnux-for-forensic-puzzle-6/>`_. + +See also `this +paper <https://computer-forensics.sans.org/community/papers/gcfa/grow-forensic-tools-taxonomy-python-libraries-helpful-forensic-analysis_6879>`_ +about python tools for forensics, which features olefile. + +License +------- + +olefile (formerly OleFileIO\_PL) is copyright (c) 2005-2015 Philippe +Lagadec (`http://www.decalage.info <http://www.decalage.info>`_) + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +- Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +- Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +-------------- + +olefile is based on source code from the OleFileIO module of the Python +Imaging Library (PIL) published by Fredrik Lundh under the following +license: + +The Python Imaging Library (PIL) is + +- Copyright (c) 1997-2005 by Secret Labs AB +- Copyright (c) 1995-2005 by Fredrik Lundh + +By obtaining, using, and/or copying this software and/or its associated +documentation, you agree that you have read, understood, and will comply +with the following terms and conditions: + +Permission to use, copy, modify, and distribute this software and its +associated documentation for any purpose and without fee is hereby +granted, provided that the above copyright notice appears in all copies, +and that both that copyright notice and this permission notice appear in +supporting documentation, and that the name of Secret Labs AB or the +author not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior permission. + +SECRET LABS AB AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO +THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL SECRET LABS AB OR THE AUTHOR BE LIABLE FOR +ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER +RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF +CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/contrib/python/olefile/py2/olefile/__init__.py b/contrib/python/olefile/py2/olefile/__init__.py index 52247f3e01..72c91df7fa 100644 --- a/contrib/python/olefile/py2/olefile/__init__.py +++ b/contrib/python/olefile/py2/olefile/__init__.py @@ -4,11 +4,11 @@ olefile (formerly OleFileIO_PL) Module to read/write Microsoft OLE2 files (also called Structured Storage or Microsoft Compound Document File Format), such as Microsoft Office 97-2003 documents, Image Composer and FlashPix files, Outlook messages, ... -This version is compatible with Python 2.7 and 3.4+ +This version is compatible with Python 2.7 and 3.5+ Project website: https://www.decalage.info/olefile -olefile is copyright (c) 2005-2018 Philippe Lagadec (https://www.decalage.info) +olefile is copyright (c) 2005-2023 Philippe Lagadec (https://www.decalage.info) olefile is based on the OleFileIO module from the PIL library v1.1.7 See: http://www.pythonware.com/products/pil/index.htm diff --git a/contrib/python/olefile/py2/olefile/olefile.py b/contrib/python/olefile/py2/olefile/olefile.py index 1bfa2a6a65..60f8963c19 100644 --- a/contrib/python/olefile/py2/olefile/olefile.py +++ b/contrib/python/olefile/py2/olefile/olefile.py @@ -4,11 +4,11 @@ olefile (formerly OleFileIO_PL) Module to read/write Microsoft OLE2 files (also called Structured Storage or Microsoft Compound Document File Format), such as Microsoft Office 97-2003 documents, Image Composer and FlashPix files, Outlook messages, ... -This version is compatible with Python 2.7 and 3.4+ +This version is compatible with Python 2.7 and 3.5+ Project website: https://www.decalage.info/olefile -olefile is copyright (c) 2005-2018 Philippe Lagadec +olefile is copyright (c) 2005-2023 Philippe Lagadec (https://www.decalage.info) olefile is based on the OleFileIO module from the PIL library v1.1.7 @@ -22,16 +22,16 @@ Copyright (c) 1995-2009 by Fredrik Lundh See source code and LICENSE.txt for information on usage and redistribution. """ -# Since OleFileIO_PL v0.45, only Python 2.7 and 3.4+ are supported +# Since olefile v0.47, only Python 2.7 and 3.5+ are supported # This import enables print() as a function rather than a keyword # (main requirement to be compatible with Python 3.x) # The comment on the line below should be printed on Python 2.5 or older: -from __future__ import print_function # This version of olefile requires Python 2.7 or 3.4+. +from __future__ import print_function # This version of olefile requires Python 2.7 or 3.5+. #--- LICENSE ------------------------------------------------------------------ -# olefile (formerly OleFileIO_PL) is copyright (c) 2005-2018 Philippe Lagadec +# olefile (formerly OleFileIO_PL) is copyright (c) 2005-2023 Philippe Lagadec # (https://www.decalage.info) # # All rights reserved. @@ -86,23 +86,24 @@ from __future__ import print_function # This version of olefile requires Pytho # OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. -__date__ = "2018-09-09" -__version__ = '0.46' +__date__ = "2023-12-01" +__version__ = '0.47' __author__ = "Philippe Lagadec" __all__ = ['isOleFile', 'OleFileIO', 'OleMetadata', 'enable_logging', - 'MAGIC', 'STGTY_EMPTY', 'KEEP_UNICODE_NAMES', + 'MAGIC', 'STGTY_EMPTY', 'STGTY_STREAM', 'STGTY_STORAGE', 'STGTY_ROOT', 'STGTY_PROPERTY', 'STGTY_LOCKBYTES', 'MINIMAL_OLEFILE_SIZE', 'DEFECT_UNSURE', 'DEFECT_POTENTIAL', 'DEFECT_INCORRECT', 'DEFECT_FATAL', 'DEFAULT_PATH_ENCODING', 'MAXREGSECT', 'DIFSECT', 'FATSECT', 'ENDOFCHAIN', 'FREESECT', - 'MAXREGSID', 'NOSTREAM', 'UNKNOWN_SIZE', 'WORD_CLSID' + 'MAXREGSID', 'NOSTREAM', 'UNKNOWN_SIZE', 'WORD_CLSID', + 'OleFileIONotClosed' ] import io import sys -import struct, array, os.path, datetime, logging +import struct, array, os.path, datetime, logging, warnings, traceback #=== COMPATIBILITY WORKAROUNDS ================================================ @@ -114,11 +115,11 @@ if str is not bytes: try: # on Python 2 we need xrange: iterrange = xrange -except: +except Exception: # no xrange, for Python 3 it was renamed as range: iterrange = range -#[PL] workaround to fix an issue with array item size on 64 bits systems: +# [PL] workaround to fix an issue with array item size on 64 bits systems: if array.array('L').itemsize == 4: # on 32 bits platforms, long integers in an array are 32 bits: UINT32 = 'L' @@ -142,17 +143,14 @@ else: raise ValueError('Need to fix a bug with 32 bit arrays, please contact author...') -#[PL] These workarounds were inspired from the Path module +# [PL] These workarounds were inspired from the Path module # (see http://www.jorendorff.com/articles/python/path/) +# TODO: remove the use of basestring, as it was removed in Python 3 try: basestring except NameError: basestring = str -#[PL] Experimental setting: if True, OLE filenames will be kept in Unicode -# if False (default PIL behaviour), all filenames are converted to Latin-1. -KEEP_UNICODE_NAMES = True - if sys.version_info[0] < 3: # On Python 2.x, the default encoding for path names is UTF-8: DEFAULT_PATH_ENCODING = 'utf-8' @@ -208,18 +206,18 @@ def enable_logging(): #: magic bytes that should be at the beginning of every OLE file: MAGIC = b'\xD0\xCF\x11\xE0\xA1\xB1\x1A\xE1' -#[PL]: added constants for Sector IDs (from AAF specifications) +# [PL]: added constants for Sector IDs (from AAF specifications) MAXREGSECT = 0xFFFFFFFA #: (-6) maximum SECT DIFSECT = 0xFFFFFFFC #: (-4) denotes a DIFAT sector in a FAT FATSECT = 0xFFFFFFFD #: (-3) denotes a FAT sector in a FAT ENDOFCHAIN = 0xFFFFFFFE #: (-2) end of a virtual stream chain FREESECT = 0xFFFFFFFF #: (-1) unallocated sector -#[PL]: added constants for Directory Entry IDs (from AAF specifications) +# [PL]: added constants for Directory Entry IDs (from AAF specifications) MAXREGSID = 0xFFFFFFFA #: (-6) maximum directory entry ID NOSTREAM = 0xFFFFFFFF #: (-1) unallocated directory entry -#[PL] object types in storage (from AAF specifications) +# [PL] object types in storage (from AAF specifications) STGTY_EMPTY = 0 #: empty directory entry STGTY_STORAGE = 1 #: element is a storage object STGTY_STREAM = 2 #: element is a stream object @@ -245,19 +243,19 @@ VT_STORED_OBJECT=69; VT_BLOB_OBJECT=70; VT_CF=71; VT_CLSID=72; VT_VECTOR=0x1000; # map property id to name (for debugging purposes) -# VT = {} -# for keyword, var in list(vars().items()): -# if keyword[:3] == "VT_": -# VT[var] = keyword +VT = {} +for keyword, var in list(vars().items()): + if keyword[:3] == "VT_": + VT[var] = keyword # # -------------------------------------------------------------------- # Some common document types (root.clsid fields) WORD_CLSID = "00020900-0000-0000-C000-000000000046" -#TODO: check Excel, PPT, ... +# TODO: check Excel, PPT, ... -#[PL]: Defect levels to classify parsing errors - see OleFileIO._raise_defect() +# [PL]: Defect levels to classify parsing errors - see OleFileIO._raise_defect() DEFECT_UNSURE = 10 # a case which looks weird, but not sure it's a defect DEFECT_POTENTIAL = 20 # a potential defect DEFECT_INCORRECT = 30 # an error according to specifications, but parsing @@ -266,37 +264,55 @@ DEFECT_FATAL = 40 # an error which cannot be ignored, parsing is # impossible # Minimal size of an empty OLE file, with 512-bytes sectors = 1536 bytes -# (this is used in isOleFile and OleFile.open) +# (this is used in isOleFile and OleFileIO.open) MINIMAL_OLEFILE_SIZE = 1536 - #=== FUNCTIONS =============================================================== -def isOleFile (filename): +def isOleFile (filename=None, data=None): """ Test if a file is an OLE container (according to the magic bytes in its header). .. note:: This function only checks the first 8 bytes of the file, not the rest of the OLE structure. + If data is provided, it also checks if the file size is above + the minimal size of an OLE file (1536 bytes). + If filename is provided with the path of the file on disk, the file is + open only to read the first 8 bytes, then closed. .. versionadded:: 0.16 :param filename: filename, contents or file-like object of the OLE file (string-like or file-like object) - - if filename is a string smaller than 1536 bytes, it is the path - of the file to open. (bytes or unicode string) - - if filename is a string longer than 1535 bytes, it is parsed + - if data is provided, filename is ignored. + - if filename is a unicode string, it is used as path of the file to open on disk. + - if filename is a bytes string smaller than 1536 bytes, it is used as path + of the file to open on disk. + - [deprecated] if filename is a bytes string longer than 1535 bytes, it is parsed as the content of an OLE file in memory. (bytes type only) + Note that this use case is deprecated and should be replaced by the new data parameter - if filename is a file-like object (with read and seek methods), it is parsed as-is. + :type filename: bytes, str, unicode or file-like object + + :param data: bytes string with the contents of the file to be checked, when the file is in memory + (added in olefile 0.47) + :type data: bytes - :type filename: bytes or str or unicode or file :returns: True if OLE, False otherwise. :rtype: bool """ + header = None + # first check if data is provided and large enough + if data is not None: + if len(data) >= MINIMAL_OLEFILE_SIZE: + header = data[:len(MAGIC)] + else: + # the file is too small, cannot be OLE + return False # check if filename is a string-like or file-like object: - if hasattr(filename, 'read'): + elif hasattr(filename, 'read') and hasattr(filename, 'seek'): # file-like object: use it directly header = filename.read(len(MAGIC)) # just in case, seek back to start of file: @@ -362,22 +378,34 @@ def _clsid(clsid): def filetime2datetime(filetime): - """ - convert FILETIME (64 bits int) to Python datetime.datetime - """ - # TODO: manage exception when microseconds is too large - # inspired from https://code.activestate.com/recipes/511425-filetime-to-datetime/ - _FILETIME_null_date = datetime.datetime(1601, 1, 1, 0, 0, 0) - #log.debug('timedelta days=%d' % (filetime//(10*1000000*3600*24))) - return _FILETIME_null_date + datetime.timedelta(microseconds=filetime//10) + """ + convert FILETIME (64 bits int) to Python datetime.datetime + """ + # TODO: manage exception when microseconds is too large + # inspired from https://code.activestate.com/recipes/511425-filetime-to-datetime/ + _FILETIME_null_date = datetime.datetime(1601, 1, 1, 0, 0, 0) + # log.debug('timedelta days=%d' % (filetime//(10*1000000*3600*24))) + return _FILETIME_null_date + datetime.timedelta(microseconds=filetime//10) #=== CLASSES ================================================================== +class OleFileError(IOError): + """ + Generic base error for this module. + """ + pass + +class NotOleFileError(OleFileError): + """ + Error raised when the opened file is not an OLE file. + """ + pass + class OleMetadata: """ - class to parse and store metadata from standard properties of OLE files. + Class to parse and store metadata from standard properties of OLE files. Available attributes: codepage, title, subject, author, keywords, comments, template, @@ -407,7 +435,7 @@ class OleMetadata: - https://msdn.microsoft.com/en-us/library/windows/desktop/aa380374%28v=vs.85%29.aspx - https://poi.apache.org/apidocs/org/apache/poi/hpsf/DocumentSummaryInformation.html - new in version 0.25 + New in version 0.25 """ # attribute names for SummaryInformation stream properties: @@ -482,33 +510,34 @@ class OleMetadata: self.language = None self.doc_version = None - - def parse_properties(self, olefile): + def parse_properties(self, ole_file): """ Parse standard properties of an OLE file, from the streams ``\\x05SummaryInformation`` and ``\\x05DocumentSummaryInformation``, if present. Properties are converted to strings, integers or python datetime objects. If a property is not present, its value is set to None. + + :param ole_file: OleFileIO object from which to parse properties """ # first set all attributes to None: for attrib in (self.SUMMARY_ATTRIBS + self.DOCSUM_ATTRIBS): setattr(self, attrib, None) - if olefile.exists("\x05SummaryInformation"): + if ole_file.exists("\x05SummaryInformation"): # get properties from the stream: # (converting timestamps to python datetime, except total_edit_time, # which is property #10) - props = olefile.getproperties("\x05SummaryInformation", - convert_time=True, no_conversion=[10]) + props = ole_file.getproperties("\x05SummaryInformation", + convert_time=True, no_conversion=[10]) # store them into this object's attributes: for i in range(len(self.SUMMARY_ATTRIBS)): # ids for standards properties start at 0x01, until 0x13 value = props.get(i+1, None) setattr(self, self.SUMMARY_ATTRIBS[i], value) - if olefile.exists("\x05DocumentSummaryInformation"): + if ole_file.exists("\x05DocumentSummaryInformation"): # get properties from the stream: - props = olefile.getproperties("\x05DocumentSummaryInformation", - convert_time=True) + props = ole_file.getproperties("\x05DocumentSummaryInformation", + convert_time=True) # store them into this object's attributes: for i in range(len(self.DOCSUM_ATTRIBS)): # ids for standards properties start at 0x01, until 0x13 @@ -522,14 +551,33 @@ class OleMetadata: print('Properties from SummaryInformation stream:') for prop in self.SUMMARY_ATTRIBS: value = getattr(self, prop) - print('- %s: %s' % (prop, repr(value))) + print('- {}: {}'.format(prop, repr(value))) print('Properties from DocumentSummaryInformation stream:') for prop in self.DOCSUM_ATTRIBS: value = getattr(self, prop) - print('- %s: %s' % (prop, repr(value))) + print('- {}: {}'.format(prop, repr(value))) +class OleFileIONotClosed(RuntimeWarning): + """ + Warning type used when OleFileIO is destructed but has open file handle. + """ + def __init__(self, stack_of_open=None): + super(OleFileIONotClosed, self).__init__() + self.stack_of_open = stack_of_open + + def __str__(self): + msg = 'Deleting OleFileIO instance with open file handle. ' \ + 'You should ensure that OleFileIO is never deleted ' \ + 'without calling close() first. Consider using '\ + '"with OleFileIO(...) as ole: ...".' + if self.stack_of_open: + return ''.join([msg, '\n', 'Stacktrace of open() call:\n'] + + self.stack_of_open.format()) + else: + return msg -#--- OleStream --------------------------------------------------------------- + +# --- OleStream --------------------------------------------------------------- class OleStream(io.BytesIO): """ @@ -537,7 +585,7 @@ class OleStream(io.BytesIO): Returns a read-only file object which can be used to read the contents of a OLE stream (instance of the BytesIO class). - To open a stream, use the openstream method in the OleFile class. + To open a stream, use the openstream method in the OleFileIO class. This function can be used with either ordinary streams, or ministreams, depending on the offset, sectorsize, and @@ -570,11 +618,11 @@ class OleStream(io.BytesIO): %(sect,sect,size,offset,sectorsize,len(fat), repr(fp))) self.ole = olefileio # this check is necessary, otherwise when attempting to open a stream - # from a closed OleFile, a stream of size zero is returned without + # from a closed OleFileIO, a stream of size zero is returned without # raising an exception. (see issue #81) if self.ole.fp.closed: raise OSError('Attempting to open a stream from a closed OLE File') - #[PL] To detect malformed documents with FAT loops, we compute the + # [PL] To detect malformed documents with FAT loops, we compute the # expected number of sectors in the stream: unknown_size = False if size == UNKNOWN_SIZE: @@ -599,7 +647,7 @@ class OleStream(io.BytesIO): if size == 0 and sect != ENDOFCHAIN: log.debug('size == 0 and sect != ENDOFCHAIN:') self.ole._raise_defect(DEFECT_INCORRECT, 'incorrect OLE sector index for empty stream') - #[PL] A fixed-length for loop is used instead of an undefined while + # [PL] A fixed-length for loop is used instead of an undefined while # loop to avoid DoS attacks: for i in range(nb_sectors): log.debug('Reading stream sector[%d] = %Xh' % (i, sect)) @@ -624,11 +672,11 @@ class OleStream(io.BytesIO): self.ole._raise_defect(DEFECT_INCORRECT, 'incorrect OLE FAT, sector index out of range') # stop reading here if the exception is ignored: break - #TODO: merge this code with OleFileIO.getsect() ? - #TODO: check if this works with 4K sectors: + # TODO: merge this code with OleFileIO.getsect() ? + # TODO: check if this works with 4K sectors: try: fp.seek(offset + sectorsize * sect) - except: + except Exception: log.debug('sect=%d, seek=%d, filesize=%d' % (sect, offset+sectorsize*sect, filesize)) self.ole._raise_defect(DEFECT_INCORRECT, 'OLE sector index out of range') @@ -653,7 +701,7 @@ class OleStream(io.BytesIO): self.ole._raise_defect(DEFECT_INCORRECT, 'incorrect OLE FAT, sector index out of range') # stop reading here if the exception is ignored: break - #[PL] Last sector should be a "end of chain" marker: + # [PL] Last sector should be a "end of chain" marker: # if sect != ENDOFCHAIN: # raise IOError('incorrect last sector index in OLE stream') data = b"".join(data) @@ -679,15 +727,12 @@ class OleStream(io.BytesIO): # Then the OleStream object can be used as a read-only file object. -#--- OleDirectoryEntry ------------------------------------------------------- +# --- OleDirectoryEntry ------------------------------------------------------- class OleDirectoryEntry: - """ - OLE2 Directory Entry + OLE2 Directory Entry pointing to a stream or a storage """ - #[PL] parsing code moved from OleFileIO.loaddirectory - # struct to parse directory entries: # <: little-endian byte order, standard sizes # (note: this should guarantee that Q returns a 64 bits int) @@ -711,19 +756,18 @@ class OleDirectoryEntry: DIRENTRY_SIZE = 128 assert struct.calcsize(STRUCT_DIRENTRY) == DIRENTRY_SIZE - - def __init__(self, entry, sid, olefile): + def __init__(self, entry, sid, ole_file): """ Constructor for an OleDirectoryEntry object. Parses a 128-bytes entry from the OLE Directory stream. - :param entry : string (must be 128 bytes long) - :param sid : index of this directory entry in the OLE file directory - :param olefile: OleFileIO containing this directory entry + :param bytes entry: bytes string (must be 128 bytes long) + :param int sid: index of this directory entry in the OLE file directory + :param OleFileIO ole_file: OleFileIO object containing this directory entry """ self.sid = sid - # ref to olefile is stored for future use - self.olefile = olefile + # ref to ole_file is stored for future use + self.olefile = ole_file # kids is a list of children entries, if this entry is a storage: # (list of OleDirectoryEntry objects) self.kids = [] @@ -752,26 +796,26 @@ class OleDirectoryEntry: self.sizeHigh ) = struct.unpack(OleDirectoryEntry.STRUCT_DIRENTRY, entry) if self.entry_type not in [STGTY_ROOT, STGTY_STORAGE, STGTY_STREAM, STGTY_EMPTY]: - olefile._raise_defect(DEFECT_INCORRECT, 'unhandled OLE storage type') + ole_file._raise_defect(DEFECT_INCORRECT, 'unhandled OLE storage type') # only first directory entry can (and should) be root: if self.entry_type == STGTY_ROOT and sid != 0: - olefile._raise_defect(DEFECT_INCORRECT, 'duplicate OLE root entry') + ole_file._raise_defect(DEFECT_INCORRECT, 'duplicate OLE root entry') if sid == 0 and self.entry_type != STGTY_ROOT: - olefile._raise_defect(DEFECT_INCORRECT, 'incorrect OLE root entry') - #log.debug(struct.unpack(fmt_entry, entry[:len_entry])) + ole_file._raise_defect(DEFECT_INCORRECT, 'incorrect OLE root entry') + # log.debug(struct.unpack(fmt_entry, entry[:len_entry])) # name should be at most 31 unicode characters + null character, # so 64 bytes in total (31*2 + 2): - if self.namelength>64: - olefile._raise_defect(DEFECT_INCORRECT, 'incorrect DirEntry name length >64 bytes') + if self.namelength > 64: + ole_file._raise_defect(DEFECT_INCORRECT, 'incorrect DirEntry name length >64 bytes') # if exception not raised, namelength is set to the maximum value: self.namelength = 64 # only characters without ending null char are kept: self.name_utf16 = self.name_raw[:(self.namelength-2)] - #TODO: check if the name is actually followed by a null unicode character ([MS-CFB] 2.6.1) - #TODO: check if the name does not contain forbidden characters: + # TODO: check if the name is actually followed by a null unicode character ([MS-CFB] 2.6.1) + # TODO: check if the name does not contain forbidden characters: # [MS-CFB] 2.6.1: "The following characters are illegal and MUST NOT be part of the name: '/', '\', ':', '!'." # name is converted from UTF-16LE to the path encoding specified in the OleFileIO: - self.name = olefile._decode_utf16_str(self.name_utf16) + self.name = ole_file._decode_utf16_str(self.name_utf16) log.debug('DirEntry SID=%d: %s' % (self.sid, repr(self.name))) log.debug(' - type: %d' % self.entry_type) @@ -782,11 +826,11 @@ class OleDirectoryEntry: # sizeHigh is only used for 4K sectors, it should be zero for 512 bytes # sectors, BUT apparently some implementations set it as 0xFFFFFFFF, 1 # or some other value so it cannot be raised as a defect in general: - if olefile.sectorsize == 512: + if ole_file.sectorsize == 512: if self.sizeHigh != 0 and self.sizeHigh != 0xFFFFFFFF: log.debug('sectorsize=%d, sizeLow=%d, sizeHigh=%d (%X)' % - (olefile.sectorsize, self.sizeLow, self.sizeHigh, self.sizeHigh)) - olefile._raise_defect(DEFECT_UNSURE, 'incorrect OLE stream size') + (ole_file.sectorsize, self.sizeLow, self.sizeHigh, self.sizeHigh)) + ole_file._raise_defect(DEFECT_UNSURE, 'incorrect OLE stream size') self.size = self.sizeLow else: self.size = self.sizeLow + (long(self.sizeHigh)<<32) @@ -796,21 +840,28 @@ class OleDirectoryEntry: # a storage should have a null size, BUT some implementations such as # Word 8 for Mac seem to allow non-null values => Potential defect: if self.entry_type == STGTY_STORAGE and self.size != 0: - olefile._raise_defect(DEFECT_POTENTIAL, 'OLE storage with size>0') + ole_file._raise_defect(DEFECT_POTENTIAL, 'OLE storage with size>0') # check if stream is not already referenced elsewhere: self.is_minifat = False if self.entry_type in (STGTY_ROOT, STGTY_STREAM) and self.size>0: - if self.size < olefile.minisectorcutoff \ + if self.size < ole_file.minisectorcutoff \ and self.entry_type==STGTY_STREAM: # only streams can be in MiniFAT # ministream object self.is_minifat = True else: self.is_minifat = False - olefile._check_duplicate_stream(self.isectStart, self.is_minifat) + ole_file._check_duplicate_stream(self.isectStart, self.is_minifat) self.sect_chain = None + def build_sect_chain(self, ole_file): + """ + Build the sector chain for a stream (from the FAT or the MiniFAT) - def build_sect_chain(self, olefile): + :param OleFileIO ole_file: OleFileIO object containing this directory entry + :return: nothing + """ + # TODO: seems to be used only from _write_mini_stream, is it useful? + # TODO: use self.olefile instead of ole_file if self.sect_chain: return if self.entry_type not in (STGTY_ROOT, STGTY_STREAM) or self.size == 0: @@ -818,16 +869,16 @@ class OleDirectoryEntry: self.sect_chain = list() - if self.is_minifat and not olefile.minifat: - olefile.loadminifat() + if self.is_minifat and not ole_file.minifat: + ole_file.loadminifat() next_sect = self.isectStart while next_sect != ENDOFCHAIN: self.sect_chain.append(next_sect) if self.is_minifat: - next_sect = olefile.minifat[next_sect] + next_sect = ole_file.minifat[next_sect] else: - next_sect = olefile.fat[next_sect] + next_sect = ole_file.fat[next_sect] def build_storage_tree(self): """ @@ -852,7 +903,6 @@ class OleDirectoryEntry: # (see rich comparison methods in this class) self.kids.sort() - def append_kids(self, child_sid): """ Walk through red-black tree of children of this directory entry to add @@ -862,7 +912,7 @@ class OleDirectoryEntry: first time for the root. (only used during recursion) """ log.debug('append_kids: child_sid=%d' % child_sid) - #[PL] this method was added to use simple recursion instead of a complex + # [PL] this method was added to use simple recursion instead of a complex # algorithm. # if this is not a storage or a leaf of the tree, nothing to do: if child_sid == NOSTREAM: @@ -899,7 +949,6 @@ class OleDirectoryEntry: # Afterwards build kid's own tree if it's also a storage: child.build_storage_tree() - def __eq__(self, other): "Compare entries by name" return self.name == other.name @@ -916,10 +965,9 @@ class OleDirectoryEntry: # Reflected __lt__() and __le__() will be used for __gt__() and __ge__() - #TODO: replace by the same function as MS implementation ? + # TODO: replace by the same function as MS implementation ? # (order by name length first, then case-insensitive order) - def dump(self, tab = 0): "Dump this entry, and all its subentries (for debug purposes only)" TYPES = ["(invalid)", "(storage)", "(stream)", "(lockbytes)", @@ -938,7 +986,6 @@ class OleDirectoryEntry: for kid in self.kids: kid.dump(tab + 2) - def getmtime(self): """ Return modification time of a directory entry. @@ -981,17 +1028,17 @@ class OleFileIO: level. The root entry should be omitted. For example, the following code extracts all image streams from a Microsoft Image Composer file:: - ole = OleFileIO("fan.mic") + with OleFileIO("fan.mic") as ole: - for entry in ole.listdir(): - if entry[1:2] == "Image": - fin = ole.openstream(entry) - fout = open(entry[0:1], "wb") - while True: - s = fin.read(8192) - if not s: - break - fout.write(s) + for entry in ole.listdir(): + if entry[1:2] == "Image": + fin = ole.openstream(entry) + fout = open(entry[0:1], "wb") + while True: + s = fin.read(8192) + if not s: + break + fout.write(s) You can use the viewer application provided with the Python Imaging Library to view the resulting files (which happens to be standard @@ -1010,7 +1057,7 @@ class OleFileIO: - if filename is a string longer than 1535 bytes, it is parsed as the content of an OLE file in memory. (bytes type only) - if filename is a file-like object (with read, seek and tell methods), - it is parsed as-is. + it is parsed as-is. The caller is responsible for closing it when done. :param raise_defects: minimal level for defects to be raised as exceptions. (use DEFECT_FATAL for a typical application, DEFECT_INCORRECT for a @@ -1071,8 +1118,22 @@ class OleFileIO: self.sector_shift = None self.sector_size = None self.transaction_signature_number = None + self.warn_if_not_closed = False + self._we_opened_fp = False + self._open_stack = None if filename: - self.open(filename, write_mode=write_mode) + # try opening, ensure fp is closed if that fails + try: + self.open(filename, write_mode=write_mode) + except Exception: + # caller has no chance of calling close() now + self._close(warn=False) + raise + + def __del__(self): + """Destructor, ensures all file handles are closed that we opened.""" + self._close(warn=True) + # super(OleFileIO, self).__del__() # there's no super-class destructor def __enter__(self): @@ -1080,13 +1141,13 @@ class OleFileIO: def __exit__(self, *args): - self.close() + self._close(warn=False) - def _raise_defect(self, defect_level, message, exception_type=IOError): + def _raise_defect(self, defect_level, message, exception_type=OleFileError): """ This method should be called for any defect found during file parsing. - It may raise an IOError exception according to the minimal level chosen + It may raise an OleFileError exception according to the minimal level chosen for the OleFileIO object. :param defect_level: defect level, possible values are: @@ -1097,7 +1158,7 @@ class OleFileIO: - DEFECT_FATAL : an error which cannot be ignored, parsing is impossible :param message: string describing the defect, used with raised exception. - :param exception_type: exception class to be raised, IOError by default + :param exception_type: exception class to be raised, OleFileError by default """ # added by [PL] if defect_level >= self._raise_defects_level: @@ -1115,9 +1176,10 @@ class OleFileIO: directory or in property streams. Return a string encoded according to the path_encoding specified for the OleFileIO object. - :param utf16_str: bytes string encoded in UTF-16 LE format - :param errors: str, see python documentation for str.decode() + :param bytes utf16_str: bytes string encoded in UTF-16 LE format + :param str errors: str, see python documentation for str.decode() :return: str, encoded according to path_encoding + :rtype: str """ unicode_str = utf16_str.decode('UTF-16LE', errors) if self.path_encoding: @@ -1140,16 +1202,16 @@ class OleFileIO: - if filename is a string longer than 1535 bytes, it is parsed as the content of an OLE file in memory. (bytes type only) - if filename is a file-like object (with read, seek and tell methods), - it is parsed as-is. + it is parsed as-is. The caller is responsible for closing it when done :param write_mode: bool, if True the file is opened in read/write mode instead of read-only by default. (ignored if filename is not a path) """ self.write_mode = write_mode - #[PL] check if filename is a string-like or file-like object: + # [PL] check if filename is a string-like or file-like object: # (it is better to check for a read() method) if hasattr(filename, 'read'): - #TODO: also check seek and tell methods? + # TODO: also check seek and tell methods? # file-like object: use it directly self.fp = filename elif isinstance(filename, bytes) and len(filename) >= MINIMAL_OLEFILE_SIZE: @@ -1160,18 +1222,20 @@ class OleFileIO: # string-like object: filename of file on disk if self.write_mode: # open file in mode 'read with update, binary' - # According to https://docs.python.org/2/library/functions.html#open + # According to https://docs.python.org/library/functions.html#open # 'w' would truncate the file, 'a' may only append on some Unixes mode = 'r+b' else: # read-only mode by default mode = 'rb' self.fp = open(filename, mode) + self._we_opened_fp = True + self._open_stack = traceback.extract_stack() # remember for warning # obtain the filesize by using seek and tell, which should work on most # file-like objects: - #TODO: do it above, using getsize with filename when possible? - #TODO: fix code to fail with clear exception when filesize cannot be obtained - filesize=0 + # TODO: do it above, using getsize with filename when possible? + # TODO: fix code to fail with clear exception when filesize cannot be obtained + filesize = 0 self.fp.seek(0, os.SEEK_END) try: filesize = self.fp.tell() @@ -1188,8 +1252,8 @@ class OleFileIO: header = self.fp.read(512) if len(header) != 512 or header[:8] != MAGIC: - log.debug('Magic = %r instead of %r' % (header[:8], MAGIC)) - self._raise_defect(DEFECT_FATAL, "not an OLE2 structured storage file") + log.debug('Magic = {!r} instead of {!r}'.format(header[:8], MAGIC)) + self._raise_defect(DEFECT_FATAL, "not an OLE2 structured storage file", NotOleFileError) # [PL] header structure according to AAF specifications: ##Header @@ -1323,13 +1387,13 @@ class OleFileIO: # (-1 because header doesn't count) self.nb_sect = ( (filesize + self.sector_size-1) // self.sector_size) - 1 log.debug( "Maximum number of sectors in the file: %d (%Xh)" % (self.nb_sect, self.nb_sect)) - #TODO: change this test, because an OLE file MAY contain other data + # TODO: change this test, because an OLE file MAY contain other data # after the last sector. # file clsid self.header_clsid = _clsid(header[8:24]) - #TODO: remove redundant attributes, and fix the code which uses them? + # TODO: remove redundant attributes, and fix the code which uses them? self.sectorsize = self.sector_size #1 << i16(header, 30) self.minisectorsize = self.mini_sector_size #1 << i16(header, 32) self.minisectorcutoff = self.mini_stream_cutoff_size # i32(header, 56) @@ -1351,13 +1415,23 @@ class OleFileIO: self.loaddirectory(self.first_dir_sector) self.minifatsect = self.first_mini_fat_sector - def close(self): """ - close the OLE file, to release the file object + close the OLE file, release the file object if we created it ourselves. + + Leaves the file handle open if it was provided by the caller. """ - self.fp.close() + self._close(warn=False) + def _close(self, warn=False): + """Implementation of close() with internal arg `warn`.""" + if self._we_opened_fp: + if warn and self.warn_if_not_closed: + # we only raise a warning if the file was not explicitly closed, + # and if the option warn_if_not_closed is enabled + warnings.warn(OleFileIONotClosed(self._open_stack)) + self.fp.close() + self._we_opened_fp = False def _check_duplicate_stream(self, first_sect, minifat=False): """ @@ -1377,14 +1451,13 @@ class OleFileIO: if first_sect in (DIFSECT,FATSECT,ENDOFCHAIN,FREESECT): return used_streams = self._used_streams_fat - #TODO: would it be more efficient using a dict or hash values, instead + # TODO: would it be more efficient using a dict or hash values, instead # of a list of long ? if first_sect in used_streams: self._raise_defect(DEFECT_INCORRECT, 'Stream referenced twice') else: used_streams.append(first_sect) - def dumpfat(self, fat, firstindex=0): """ Display a part of FAT in human-readable form for debugging purposes @@ -1421,7 +1494,6 @@ class OleFileIO: print(name, end=" ") print() - def dumpsect(self, sector, firstindex=0): """ Display a sector in a human-readable form, for debugging purposes @@ -1452,13 +1524,13 @@ class OleFileIO: convert a sector to an array of 32 bits unsigned integers, swapping bytes on big endian CPUs such as PowerPC (old Macs) """ + # TODO: make this a static function a = array.array(UINT32, sect) # if CPU is big endian, swap bytes: if sys.byteorder == 'big': a.byteswap() return a - def loadfat_sect(self, sect): """ Adds the indexes of the given sector to the FAT @@ -1494,7 +1566,6 @@ class OleFileIO: self.fat = self.fat + nextfat return isect - def loadfat(self, header): """ Load the FAT table. @@ -1507,21 +1578,21 @@ class OleFileIO: log.debug('Loading the FAT table, starting with the 1st sector after the header') sect = header[76:512] log.debug( "len(sect)=%d, so %d integers" % (len(sect), len(sect)//4) ) - #fat = [] - # [PL] FAT is an array of 32 bits unsigned ints, it's more effective + # fat = [] + # FAT is an array of 32 bits unsigned ints, it's more effective # to use an array than a list in Python. # It's initialized as empty first: self.fat = array.array(UINT32) self.loadfat_sect(sect) - #self.dumpfat(self.fat) -## for i in range(0, len(sect), 4): -## ix = i32(sect, i) -## #[PL] if ix == -2 or ix == -1: # ix == 0xFFFFFFFE or ix == 0xFFFFFFFF: -## if ix == 0xFFFFFFFE or ix == 0xFFFFFFFF: -## break -## s = self.getsect(ix) -## #fat = fat + [i32(s, i) for i in range(0, len(s), 4)] -## fat = fat + array.array(UINT32, s) + # self.dumpfat(self.fat) + # for i in range(0, len(sect), 4): + # ix = i32(sect, i) + # # [PL] if ix == -2 or ix == -1: # ix == 0xFFFFFFFE or ix == 0xFFFFFFFF: + # if ix == 0xFFFFFFFE or ix == 0xFFFFFFFF: + # break + # s = self.getsect(ix) + # # fat = fat + [i32(s, i) for i in range(0, len(s), 4)] + # fat = fat + array.array(UINT32, s) if self.num_difat_sectors != 0: log.debug('DIFAT is used, because file size > 6.8MB.') # [PL] There's a DIFAT because file is larger than 6.8MB @@ -1546,7 +1617,7 @@ class OleFileIO: isect_difat = self.first_difat_sector for i in iterrange(nb_difat): log.debug( "DIFAT block %d, sector %X" % (i, isect_difat) ) - #TODO: check if corresponding FAT SID = DIFSECT + # TODO: check if corresponding FAT SID = DIFSECT sector_difat = self.getsect(isect_difat) difat = self.sect2array(sector_difat) # Display the sector contents only if the logging level is debug: @@ -1560,10 +1631,10 @@ class OleFileIO: if isect_difat not in [ENDOFCHAIN, FREESECT]: # last DIFAT pointer value must be ENDOFCHAIN or FREESECT raise IOError('incorrect end of DIFAT') -## if len(self.fat) != self.num_fat_sectors: -## # FAT should contain num_fat_sectors blocks -## print("FAT length: %d instead of %d" % (len(self.fat), self.num_fat_sectors)) -## raise IOError('incorrect DIFAT') + # if len(self.fat) != self.num_fat_sectors: + # # FAT should contain num_fat_sectors blocks + # print("FAT length: %d instead of %d" % (len(self.fat), self.num_fat_sectors)) + # raise IOError('incorrect DIFAT') else: log.debug('No DIFAT, because file size < 6.8MB.') # since FAT is read from fixed-size sectors, it may contain more values @@ -1578,7 +1649,6 @@ class OleFileIO: log.debug('\nFAT:') self.dumpfat(self.fat) - def loadminifat(self): """ Load the MiniFAT table. @@ -1603,7 +1673,7 @@ class OleFileIO: self._raise_defect(DEFECT_INCORRECT, 'OLE MiniStream is larger than MiniFAT') # In any case, first read stream_size: s = self._open(self.minifatsect, stream_size, force_FAT=True).read() - #[PL] Old code replaced by an array: + # [PL] Old code replaced by an array: #self.minifat = [i32(s, i) for i in range(0, len(s), 4)] self.minifat = self.sect2array(s) # Then shrink the array to used size, to avoid indexes out of MiniStream: @@ -1631,11 +1701,11 @@ class OleFileIO: # [PL] the original code in PIL was wrong when sectors are 4KB instead of # 512 bytes: #self.fp.seek(512 + self.sectorsize * sect) - #[PL]: added safety checks: + # [PL]: added safety checks: #print("getsect(%X)" % sect) try: self.fp.seek(self.sectorsize * (sect+1)) - except: + except Exception: log.debug('getsect(): sect=%X, seek=%d, filesize=%d' % (sect, self.sectorsize*(sect+1), self._filesize)) self._raise_defect(DEFECT_FATAL, 'OLE sector index out of range') @@ -1646,7 +1716,6 @@ class OleFileIO: self._raise_defect(DEFECT_FATAL, 'incomplete OLE sector') return sector - def write_sect(self, sect, data, padding=b'\x00'): """ Write given sector to file on disk. @@ -1659,17 +1728,17 @@ class OleFileIO: raise TypeError("write_sect: data must be a bytes string") if not isinstance(padding, bytes) or len(padding)!=1: raise TypeError("write_sect: padding must be a bytes string of 1 char") - #TODO: we could allow padding=None for no padding at all + # TODO: we could allow padding=None for no padding at all try: self.fp.seek(self.sectorsize * (sect+1)) - except: + except Exception: log.debug('write_sect(): sect=%X, seek=%d, filesize=%d' % (sect, self.sectorsize*(sect+1), self._filesize)) self._raise_defect(DEFECT_FATAL, 'OLE sector index out of range') if len(data) < self.sectorsize: # add padding data += padding * (self.sectorsize - len(data)) - elif len(data) < self.sectorsize: + elif len(data) > self.sectorsize: raise ValueError("Data is larger than sector size") self.fp.write(data) @@ -1688,7 +1757,7 @@ class OleFileIO: try: self.fp.seek(fp_pos) - except: + except Exception: log.debug('write_mini_sect(): fp_pos=%d, filesize=%d' % (fp_pos, self._filesize)) self._raise_defect(DEFECT_FATAL, 'OLE sector index out of range') @@ -1713,21 +1782,21 @@ class OleFileIO: # (stream size is not known in advance) self.directory_fp = self._open(sect, force_FAT=True) - #[PL] to detect malformed documents and avoid DoS attacks, the maximum + # [PL] to detect malformed documents and avoid DoS attacks, the maximum # number of directory entries can be calculated: max_entries = self.directory_fp.size // 128 log.debug('loaddirectory: size=%d, max_entries=%d' % (self.directory_fp.size, max_entries)) # Create list of directory entries - #self.direntries = [] + # self.direntries = [] # We start with a list of "None" object self.direntries = [None] * max_entries -## for sid in iterrange(max_entries): -## entry = fp.read(128) -## if not entry: -## break -## self.direntries.append(OleDirectoryEntry(entry, sid, self)) + # for sid in iterrange(max_entries): + # entry = fp.read(128) + # if not entry: + # break + # self.direntries.append(OleDirectoryEntry(entry, sid, self)) # load root entry: root_entry = self._load_direntry(0) # Root entry is the first entry: @@ -1739,7 +1808,6 @@ class OleFileIO: # read and build all storage trees, starting from the root: self.root.build_storage_tree() - def _load_direntry (self, sid): """ Load a directory entry from the directory. @@ -1749,7 +1817,7 @@ class OleFileIO: :param sid: index of storage/stream in the directory. :returns: a OleDirectoryEntry object - :exception IOError: if the entry has always been referenced. + :exception OleFileError: if the entry has always been referenced. """ # check if SID is OK: if sid<0 or sid>=len(self.direntries): @@ -1765,14 +1833,12 @@ class OleFileIO: self.direntries[sid] = OleDirectoryEntry(entry, sid, self) return self.direntries[sid] - def dumpdirectory(self): """ Dump directory (for debugging only) """ self.root.dump() - def _open(self, start, size = UNKNOWN_SIZE, force_FAT=False): """ Open a stream, either in FAT or MiniFAT according to its size. @@ -1810,7 +1876,6 @@ class OleFileIO: filesize=self._filesize, olefileio=self) - def _list(self, files, prefix, node, streams=True, storages=False): """ listdir helper @@ -1839,7 +1904,6 @@ class OleFileIO: else: self._raise_defect(DEFECT_INCORRECT, 'The directory tree contains an entry which is not a stream nor a storage.') - def listdir(self, streams=True, storages=False): """ Return a list of streams and/or storages stored in this file @@ -1853,7 +1917,6 @@ class OleFileIO: self._list(files, [], self.root, streams, storages) return files - def _find(self, filename): """ Returns directory entry of given filename. (openstream helper) @@ -1885,7 +1948,6 @@ class OleFileIO: node = kid return node.sid - def openstream(self, filename): """ Open a stream as a read-only file object (BytesIO). @@ -1957,36 +2019,35 @@ class OleFileIO: nb_sectors = (size + (self.sectorsize-1)) // self.sectorsize log.debug('nb_sectors = %d' % nb_sectors) for i in range(nb_sectors): -## try: -## self.fp.seek(offset + self.sectorsize * sect) -## except: -## log.debug('sect=%d, seek=%d' % -## (sect, offset+self.sectorsize*sect)) -## raise IOError('OLE sector index out of range') + # try: + # self.fp.seek(offset + self.sectorsize * sect) + # except Exception: + # log.debug('sect=%d, seek=%d' % + # (sect, offset+self.sectorsize*sect)) + # raise IOError('OLE sector index out of range') # extract one sector from data, the last one being smaller: if i<(nb_sectors-1): data_sector = data [i*self.sectorsize : (i+1)*self.sectorsize] - #TODO: comment this if it works + # TODO: comment this if it works assert(len(data_sector)==self.sectorsize) else: data_sector = data [i*self.sectorsize:] - #TODO: comment this if it works + # TODO: comment this if it works log.debug('write_stream: size=%d sectorsize=%d data_sector=%Xh size%%sectorsize=%d' % (size, self.sectorsize, len(data_sector), size % self.sectorsize)) assert(len(data_sector) % self.sectorsize==size % self.sectorsize) self.write_sect(sect, data_sector) -## self.fp.write(data_sector) + # self.fp.write(data_sector) # jump to next sector in the FAT: try: sect = self.fat[sect] except IndexError: # [PL] if pointer is out of the FAT an exception is raised raise IOError('incorrect OLE FAT, sector index out of range') - #[PL] Last sector should be a "end of chain" marker: + # [PL] Last sector should be a "end of chain" marker: if sect != ENDOFCHAIN: raise IOError('incorrect last sector index in OLE stream') - def get_type(self, filename): """ Test if given filename exists as a stream or a storage in the OLE @@ -2003,10 +2064,9 @@ class OleFileIO: sid = self._find(filename) entry = self.direntries[sid] return entry.entry_type - except: + except Exception: return False - def getclsid(self, filename): """ Return clsid of a stream/storage. @@ -2021,7 +2081,6 @@ class OleFileIO: entry = self.direntries[sid] return entry.clsid - def getmtime(self, filename): """ Return modification time of a stream/storage. @@ -2037,7 +2096,6 @@ class OleFileIO: entry = self.direntries[sid] return entry.getmtime() - def getctime(self, filename): """ Return creation time of a stream/storage. @@ -2053,7 +2111,6 @@ class OleFileIO: entry = self.direntries[sid] return entry.getctime() - def exists(self, filename): """ Test if given filename exists as a stream or a storage in the OLE @@ -2066,10 +2123,9 @@ class OleFileIO: try: sid = self._find(filename) return True - except: + except Exception: return False - def get_size(self, filename): """ Return size of a stream in the OLE container, in bytes. @@ -2082,11 +2138,10 @@ class OleFileIO: sid = self._find(filename) entry = self.direntries[sid] if entry.entry_type != STGTY_STREAM: - #TODO: Should it return zero instead of raising an exception ? + # TODO: Should it return zero instead of raising an exception ? raise TypeError('object is not an OLE stream') return entry.size - def get_rootentry_name(self): """ Return root entry name. Should usually be 'Root Entry' or 'R' in most @@ -2094,7 +2149,6 @@ class OleFileIO: """ return self.root.name - def getproperties(self, filename, convert_time=False, no_conversion=None): """ Return properties described in substream. @@ -2114,21 +2168,16 @@ class OleFileIO: streampath = filename if not isinstance(streampath, str): streampath = '/'.join(streampath) - fp = self.openstream(filename) - data = {} - try: # header s = fp.read(28) clsid = _clsid(s[8:24]) - # format id s = fp.read(20) fmtid = _clsid(s[:16]) fp.seek(i32(s, 16)) - # get section s = b"****" + fp.read(i32(fp.read(4))-4) # number of properties: @@ -2137,14 +2186,12 @@ class OleFileIO: # catch exception while parsing property header, and only raise # a DEFECT_INCORRECT then return an empty dict, because this is not # a fatal error when parsing the whole file - msg = 'Error while parsing properties header in stream %s: %s' % ( + msg = 'Error while parsing properties header in stream {}: {}'.format( repr(streampath), exc) self._raise_defect(DEFECT_INCORRECT, msg, type(exc)) return data - # clamp num_props based on the data length num_props = min(num_props, int(len(s) / 8)) - for i in iterrange(num_props): property_id = 0 # just in case of an exception try: @@ -2152,91 +2199,10 @@ class OleFileIO: offset = i32(s, 12+i*8) property_type = i32(s, offset) - log.debug('property id=%d: type=%d offset=%X' % (property_id, property_type, offset)) - - # test for common types first (should perhaps use - # a dictionary instead?) - - if property_type == VT_I2: # 16-bit signed integer - value = i16(s, offset+4) - if value >= 32768: - value = value - 65536 - elif property_type == VT_UI2: # 2-byte unsigned integer - value = i16(s, offset+4) - elif property_type in (VT_I4, VT_INT, VT_ERROR): - # VT_I4: 32-bit signed integer - # VT_ERROR: HRESULT, similar to 32-bit signed integer, - # see https://msdn.microsoft.com/en-us/library/cc230330.aspx - value = i32(s, offset+4) - elif property_type in (VT_UI4, VT_UINT): # 4-byte unsigned integer - value = i32(s, offset+4) # FIXME - elif property_type in (VT_BSTR, VT_LPSTR): - # CodePageString, see https://msdn.microsoft.com/en-us/library/dd942354.aspx - # size is a 32 bits integer, including the null terminator, and - # possibly trailing or embedded null chars - #TODO: if codepage is unicode, the string should be converted as such - count = i32(s, offset+4) - value = s[offset+8:offset+8+count-1] - # remove all null chars: - value = value.replace(b'\x00', b'') - elif property_type == VT_BLOB: - # binary large object (BLOB) - # see https://msdn.microsoft.com/en-us/library/dd942282.aspx - count = i32(s, offset+4) - value = s[offset+8:offset+8+count] - elif property_type == VT_LPWSTR: - # UnicodeString - # see https://msdn.microsoft.com/en-us/library/dd942313.aspx - # "the string should NOT contain embedded or additional trailing - # null characters." - count = i32(s, offset+4) - value = self._decode_utf16_str(s[offset+8:offset+8+count*2]) - elif property_type == VT_FILETIME: - value = long(i32(s, offset+4)) + (long(i32(s, offset+8))<<32) - # FILETIME is a 64-bit int: "number of 100ns periods - # since Jan 1,1601". - if convert_time and property_id not in no_conversion: - log.debug('Converting property #%d to python datetime, value=%d=%fs' - %(property_id, value, float(value)/10000000)) - # convert FILETIME to Python datetime.datetime - # inspired from https://code.activestate.com/recipes/511425-filetime-to-datetime/ - _FILETIME_null_date = datetime.datetime(1601, 1, 1, 0, 0, 0) - log.debug('timedelta days=%d' % (value//(10*1000000*3600*24))) - value = _FILETIME_null_date + datetime.timedelta(microseconds=value//10) - else: - # legacy code kept for backward compatibility: returns a - # number of seconds since Jan 1,1601 - value = value // 10000000 # seconds - elif property_type == VT_UI1: # 1-byte unsigned integer - value = i8(s[offset+4]) - elif property_type == VT_CLSID: - value = _clsid(s[offset+4:offset+20]) - elif property_type == VT_CF: - # PropertyIdentifier or ClipboardData?? - # see https://msdn.microsoft.com/en-us/library/dd941945.aspx - count = i32(s, offset+4) - value = s[offset+8:offset+8+count] - elif property_type == VT_BOOL: - # VARIANT_BOOL, 16 bits bool, 0x0000=Fals, 0xFFFF=True - # see https://msdn.microsoft.com/en-us/library/cc237864.aspx - value = bool(i16(s, offset+4)) - else: - value = None # everything else yields "None" - log.debug('property id=%d: type=%d not implemented in parser yet' % (property_id, property_type)) - - # missing: VT_EMPTY, VT_NULL, VT_R4, VT_R8, VT_CY, VT_DATE, - # VT_DECIMAL, VT_I1, VT_I8, VT_UI8, - # see https://msdn.microsoft.com/en-us/library/dd942033.aspx - - # FIXME: add support for VT_VECTOR - # VT_VECTOR is a 32 uint giving the number of items, followed by - # the items in sequence. The VT_VECTOR value is combined with the - # type of items, e.g. VT_VECTOR|VT_BSTR - # see https://msdn.microsoft.com/en-us/library/dd942011.aspx - - #print("%08x" % property_id, repr(value), end=" ") - #print("(%s)" % VT[i32(s, offset) & 0xFFF]) + vt_name = VT.get(property_type, 'UNKNOWN') + log.debug('property id=%d: type=%d/%s offset=%X' % (property_id, property_type, vt_name, offset)) + value = self._parse_property(s, offset+4, property_id, property_type, convert_time, no_conversion) data[property_id] = value except BaseException as exc: # catch exception while parsing each property, and only raise @@ -2247,6 +2213,131 @@ class OleFileIO: return data + def _parse_property(self, s, offset, property_id, property_type, convert_time, no_conversion): + v = None + if property_type <= VT_BLOB or property_type in (VT_CLSID, VT_CF): + v, _ = self._parse_property_basic(s, offset, property_id, property_type, convert_time, no_conversion) + elif property_type == VT_VECTOR | VT_VARIANT: + log.debug('property_type == VT_VECTOR | VT_VARIANT') + off = 4 + count = i32(s, offset) + values = [] + for _ in range(count): + property_type = i32(s, offset + off) + v, sz = self._parse_property_basic(s, offset + off + 4, property_id, property_type, convert_time, no_conversion) + values.append(v) + off += sz + 4 + v = values + + elif property_type & VT_VECTOR: + property_type_base = property_type & ~VT_VECTOR + log.debug('property_type == VT_VECTOR | %s' % VT.get(property_type_base, 'UNKNOWN')) + off = 4 + count = i32(s, offset) + values = [] + for _ in range(count): + v, sz = self._parse_property_basic(s, offset + off, property_id, property_type & ~VT_VECTOR, convert_time, no_conversion) + values.append(v) + off += sz + v = values + else: + log.debug('property id=%d: type=%d not implemented in parser yet' % (property_id, property_type)) + return v + + def _parse_property_basic(self, s, offset, property_id, property_type, convert_time, no_conversion): + value = None + size = 0 + # test for common types first (should perhaps use + # a dictionary instead?) + + if property_type == VT_I2: # 16-bit signed integer + value = i16(s, offset) + if value >= 32768: + value = value - 65536 + size = 2 + elif property_type == VT_UI2: # 2-byte unsigned integer + value = i16(s, offset) + size = 2 + elif property_type in (VT_I4, VT_INT, VT_ERROR): + # VT_I4: 32-bit signed integer + # VT_ERROR: HRESULT, similar to 32-bit signed integer, + # see https://msdn.microsoft.com/en-us/library/cc230330.aspx + value = i32(s, offset) + size = 4 + elif property_type in (VT_UI4, VT_UINT): # 4-byte unsigned integer + value = i32(s, offset) # FIXME + size = 4 + elif property_type in (VT_BSTR, VT_LPSTR): + # CodePageString, see https://msdn.microsoft.com/en-us/library/dd942354.aspx + # size is a 32 bits integer, including the null terminator, and + # possibly trailing or embedded null chars + #TODO: if codepage is unicode, the string should be converted as such + count = i32(s, offset) + value = s[offset+4:offset+4+count-1] + # remove all null chars: + value = value.replace(b'\x00', b'') + size = 4 + count + elif property_type == VT_BLOB: + # binary large object (BLOB) + # see https://msdn.microsoft.com/en-us/library/dd942282.aspx + count = i32(s, offset) + value = s[offset+4:offset+4+count] + size = 4 + count + elif property_type == VT_LPWSTR: + # UnicodeString + # see https://msdn.microsoft.com/en-us/library/dd942313.aspx + # "the string should NOT contain embedded or additional trailing + # null characters." + count = i32(s, offset+4) + value = self._decode_utf16_str(s[offset+4:offset+4+count*2]) + size = 4 + count * 2 + elif property_type == VT_FILETIME: + value = long(i32(s, offset)) + (long(i32(s, offset+4))<<32) + # FILETIME is a 64-bit int: "number of 100ns periods + # since Jan 1,1601". + if convert_time and property_id not in no_conversion: + log.debug('Converting property #%d to python datetime, value=%d=%fs' + %(property_id, value, float(value)/10000000)) + # convert FILETIME to Python datetime.datetime + # inspired from https://code.activestate.com/recipes/511425-filetime-to-datetime/ + _FILETIME_null_date = datetime.datetime(1601, 1, 1, 0, 0, 0) + log.debug('timedelta days=%d' % (value//(10*1000000*3600*24))) + value = _FILETIME_null_date + datetime.timedelta(microseconds=value//10) + else: + # legacy code kept for backward compatibility: returns a + # number of seconds since Jan 1,1601 + value = value // 10000000 # seconds + size = 8 + elif property_type == VT_UI1: # 1-byte unsigned integer + value = i8(s[offset]) + size = 1 + elif property_type == VT_CLSID: + value = _clsid(s[offset:offset+16]) + size = 16 + elif property_type == VT_CF: + # PropertyIdentifier or ClipboardData?? + # see https://msdn.microsoft.com/en-us/library/dd941945.aspx + count = i32(s, offset) + value = s[offset+4:offset+4+count] + size = 4 + count + elif property_type == VT_BOOL: + # VARIANT_BOOL, 16 bits bool, 0x0000=Fals, 0xFFFF=True + # see https://msdn.microsoft.com/en-us/library/cc237864.aspx + value = bool(i16(s, offset)) + size = 2 + else: + value = None # everything else yields "None" + log.debug('property id=%d: type=%d not implemented in parser yet' % (property_id, property_type)) + + # missing: VT_EMPTY, VT_NULL, VT_R4, VT_R8, VT_CY, VT_DATE, + # VT_DECIMAL, VT_I1, VT_I8, VT_UI8, + # see https://msdn.microsoft.com/en-us/library/dd942033.aspx + + #print("%08x" % property_id, repr(value), end=" ") + #print("(%s)" % VT[i32(s, offset) & 0xFFF]) + return value, size + + def get_metadata(self): """ Parse standard properties streams, return an OleMetadata object @@ -2259,7 +2350,196 @@ class OleFileIO: self.metadata.parse_properties(self) return self.metadata -# + def get_userdefined_properties(self, filename, convert_time=False, no_conversion=None): + """ + Return properties described in substream. + + :param filename: path of stream in storage tree (see openstream for syntax) + :param convert_time: bool, if True timestamps will be converted to Python datetime + :param no_conversion: None or list of int, timestamps not to be converted + (for example total editing time is not a real timestamp) + + :returns: a dictionary of values indexed by id (integer) + """ + # REFERENCE: [MS-OLEPS] https://msdn.microsoft.com/en-us/library/dd942421.aspx + # REFERENCE: https://docs.microsoft.com/en-us/openspecs/office_file_formats/ms-oshared/2ea8be67-a4a0-4e2e-b42f-49a182645562 + #'D5CDD502-2E9C-101B-9397-08002B2CF9AE' + # TODO: testing the code more rigorously + # TODO: adding exception handeling + FMTID_USERDEFINED_PROPERTIES = _clsid(b'\x05\xD5\xCD\xD5\x9C\x2E\x1B\x10\x93\x97\x08\x00\x2B\x2C\xF9\xAE') + + # make sure no_conversion is a list, just to simplify code below: + if no_conversion == None: + no_conversion = [] + # stream path as a string to report exceptions: + streampath = filename + if not isinstance(streampath, str): + streampath = '/'.join(streampath) + + fp = self.openstream(filename) + + data = [] + + # header + s = fp.read(28) + clsid = _clsid(s[8:24]) + + # PropertySetStream.cSections (4 bytes starts at 1c): number of property sets in this stream + sections_count = i32(s, 24) + + section_file_pointers = [] + + try: + for i in range(sections_count): + # format id + s = fp.read(20) + fmtid = _clsid(s[:16]) + + if fmtid == FMTID_USERDEFINED_PROPERTIES: + file_pointer = i32(s, 16) + fp.seek(file_pointer) + # read saved sections + s = b"****" + fp.read(i32(fp.read(4)) - 4) + # number of properties: + num_props = i32(s, 4) + + PropertyIdentifierAndOffset = s[8: 8+8*num_props] + + # property names (dictionary) + # ref: https://docs.microsoft.com/en-us/openspecs/windows_protocols/MS-OLEPS/99127b7f-c440-4697-91a4-c853086d6b33 + index = 8+8*num_props + entry_count = i32(s[index: index+4]) + index += 4 + for i in range(entry_count): + identifier = s[index: index +4] + str_size = i32(s[index+4: index + 8]) + string = s[index+8: index+8+str_size].decode('utf_8').strip('\0') + data.append({'property_name':string, 'value':None}) + index = index+8+str_size + # clamp num_props based on the data length + num_props = min(num_props, int(len(s) / 8)) + + # property values + # ref: https://docs.microsoft.com/en-us/openspecs/windows_protocols/MS-OLEPS/f122b9d7-e5cf-4484-8466-83f6fd94b3cc + for i in iterrange(2, num_props): + property_id = 0 # just in case of an exception + try: + property_id = i32(s, 8 + i * 8) + offset = i32(s, 12 + i * 8) + property_type = i32(s, offset) + + vt_name = VT.get(property_type, 'UNKNOWN') + log.debug('property id=%d: type=%d/%s offset=%X' % (property_id, property_type, vt_name, offset)) + + # test for common types first (should perhaps use + # a dictionary instead?) + + if property_type == VT_I2: # 16-bit signed integer + value = i16(s, offset + 4) + if value >= 32768: + value = value - 65536 + elif property_type == 1: + # supposed to be VT_NULL but seems it is not NULL + str_size = i32(s, offset + 8) + value = s[offset + 12:offset + 12 + str_size - 1] + + elif property_type == VT_UI2: # 2-byte unsigned integer + value = i16(s, offset + 4) + elif property_type in (VT_I4, VT_INT, VT_ERROR): + # VT_I4: 32-bit signed integer + # VT_ERROR: HRESULT, similar to 32-bit signed integer, + # see https://msdn.microsoft.com/en-us/library/cc230330.aspx + value = i32(s, offset + 4) + elif property_type in (VT_UI4, VT_UINT): # 4-byte unsigned integer + value = i32(s, offset + 4) # FIXME + elif property_type in (VT_BSTR, VT_LPSTR): + # CodePageString, see https://msdn.microsoft.com/en-us/library/dd942354.aspx + # size is a 32 bits integer, including the null terminator, and + # possibly trailing or embedded null chars + # TODO: if codepage is unicode, the string should be converted as such + count = i32(s, offset + 4) + value = s[offset + 8:offset + 8 + count - 1] + # remove all null chars: + value = value.replace(b'\x00', b'') + elif property_type == VT_BLOB: + # binary large object (BLOB) + # see https://msdn.microsoft.com/en-us/library/dd942282.aspx + count = i32(s, offset + 4) + value = s[offset + 8:offset + 8 + count] + elif property_type == VT_LPWSTR: + # UnicodeString + # see https://msdn.microsoft.com/en-us/library/dd942313.aspx + # "the string should NOT contain embedded or additional trailing + # null characters." + count = i32(s, offset + 4) + value = self._decode_utf16_str(s[offset + 8:offset + 8 + count * 2]) + elif property_type == VT_FILETIME: + value = long(i32(s, offset + 4)) + (long(i32(s, offset + 8)) << 32) + # FILETIME is a 64-bit int: "number of 100ns periods + # since Jan 1,1601". + if convert_time and property_id not in no_conversion: + log.debug('Converting property #%d to python datetime, value=%d=%fs' + % (property_id, value, float(value) / 10000000)) + # convert FILETIME to Python datetime.datetime + # inspired from https://code.activestate.com/recipes/511425-filetime-to-datetime/ + _FILETIME_null_date = datetime.datetime(1601, 1, 1, 0, 0, 0) + log.debug('timedelta days=%d' % (value // (10 * 1000000 * 3600 * 24))) + value = _FILETIME_null_date + datetime.timedelta(microseconds=value // 10) + else: + # legacy code kept for backward compatibility: returns a + # number of seconds since Jan 1,1601 + value = value // 10000000 # seconds + elif property_type == VT_UI1: # 1-byte unsigned integer + value = i8(s[offset + 4]) + elif property_type == VT_CLSID: + value = _clsid(s[offset + 4:offset + 20]) + elif property_type == VT_CF: + # PropertyIdentifier or ClipboardData?? + # see https://msdn.microsoft.com/en-us/library/dd941945.aspx + count = i32(s, offset + 4) + value = s[offset + 8:offset + 8 + count] + elif property_type == VT_BOOL: + # VARIANT_BOOL, 16 bits bool, 0x0000=Fals, 0xFFFF=True + # see https://msdn.microsoft.com/en-us/library/cc237864.aspx + value = bool(i16(s, offset + 4)) + else: + value = None # everything else yields "None" + log.debug( + 'property id=%d: type=%d not implemented in parser yet' % (property_id, property_type)) + + # missing: VT_EMPTY, VT_NULL, VT_R4, VT_R8, VT_CY, VT_DATE, + # VT_DECIMAL, VT_I1, VT_I8, VT_UI8, + # see https://msdn.microsoft.com/en-us/library/dd942033.aspx + + # FIXME: add support for VT_VECTOR + # VT_VECTOR is a 32 uint giving the number of items, followed by + # the items in sequence. The VT_VECTOR value is combined with the + # type of items, e.g. VT_VECTOR|VT_BSTR + # see https://msdn.microsoft.com/en-us/library/dd942011.aspx + + # print("%08x" % property_id, repr(value), end=" ") + # print("(%s)" % VT[i32(s, offset) & 0xFFF]) + + data[i-2]['value']=value + except BaseException as exc: + # catch exception while parsing each property, and only raise + # a DEFECT_INCORRECT, because parsing can go on + msg = 'Error while parsing property id %d in stream %s: %s' % ( + property_id, repr(streampath), exc) + self._raise_defect(DEFECT_INCORRECT, msg, type(exc)) + + except BaseException as exc: + # catch exception while parsing property header, and only raise + # a DEFECT_INCORRECT then return an empty dict, because this is not + # a fatal error when parsing the whole file + msg = 'Error while parsing properties header in stream %s: %s' % ( + repr(streampath), exc) + self._raise_defect(DEFECT_INCORRECT, msg, type(exc)) + return data + + return data + + # -------------------------------------------------------------------- # This script can be used to dump the directory of any OLE2 structured # storage file. @@ -2283,8 +2563,11 @@ def main(): usage = 'usage: %prog [options] <filename> [filename2 ...]' parser = optparse.OptionParser(usage=usage) + parser.add_option("-c", action="store_true", dest="check_streams", help='check all streams (for debugging purposes)') + parser.add_option("-p", action="store_true", dest="extract_customprop", + help='extract all user-defined propertires') parser.add_option("-d", action="store_true", dest="debug_mode", help='debug mode, shortcut for -l debug (displays a lot of debug information, for developers only)') parser.add_option('-l', '--loglevel', dest="loglevel", action="store", default=DEFAULT_LOG_LEVEL, @@ -2292,7 +2575,7 @@ def main(): (options, args) = parser.parse_args() - print('olefile version %s %s - https://www.decalage.info/en/olefile\n' % (__version__, __date__)) + print('olefile version {} {} - https://www.decalage.info/en/olefile\n'.format(__version__, __date__)) # Print help if no arguments are passed if len(args) == 0: @@ -2323,21 +2606,33 @@ def main(): props = ole.getproperties(streamname, convert_time=True) props = sorted(props.items()) for k, v in props: - #[PL]: avoid to display too large or binary values: + # [PL]: avoid to display too large or binary values: if isinstance(v, (basestring, bytes)): if len(v) > 50: v = v[:50] if isinstance(v, bytes): # quick and dirty binary check: for c in (1,2,3,4,5,6,7,11,12,14,15,16,17,18,19,20, - 21,22,23,24,25,26,27,28,29,30,31): + 21,22,23,24,25,26,27,28,29,30,31): if c in bytearray(v): v = '(binary data)' break print(" ", k, v) - except: + except Exception: log.exception('Error while parsing property stream %r' % streamname) + try: + if options.extract_customprop: + variables = ole.get_userdefined_properties(streamname, convert_time=True) + if len(variables): + print("%r: user-defined properties" % streamname) + for index, variable in enumerate(variables): + print('\t{} {}: {}'.format(index, variable['property_name'],variable['value'])) + + except: + log.exception('Error while parsing user-defined property stream %r' % streamname) + + if options.check_streams: # Read all streams to check if there are errors: print('\nChecking streams...') @@ -2353,16 +2648,16 @@ def main(): print('NOT a stream : type=%d' % st_type) print() -## for streamname in ole.listdir(): -## # print name using repr() to convert binary chars to \xNN: -## print('-', repr('/'.join(streamname)),'-', end=' ') -## print(ole.getmtime(streamname)) -## print() + # for streamname in ole.listdir(): + # # print name using repr() to convert binary chars to \xNN: + # print('-', repr('/'.join(streamname)),'-', end=' ') + # print(ole.getmtime(streamname)) + # print() print('Modification/Creation times of all directory entries:') for entry in ole.direntries: if entry is not None: - print('- %s: mtime=%s ctime=%s' % (entry.name, + print('- {}: mtime={} ctime={}'.format(entry.name, entry.getmtime(), entry.getctime())) print() @@ -2370,10 +2665,10 @@ def main(): try: meta = ole.get_metadata() meta.dump() - except: + except Exception: log.exception('Error while parsing metadata') print() - #[PL] Test a few new methods: + # [PL] Test a few new methods: root = ole.get_rootentry_name() print('Root entry name: "%s"' % root) if ole.exists('worddocument'): @@ -2387,10 +2682,11 @@ def main(): print('\nNon-fatal issues raised during parsing:') if ole.parsing_issues: for exctype, msg in ole.parsing_issues: - print('- %s: %s' % (exctype.__name__, msg)) + print('- {}: {}'.format(exctype.__name__, msg)) else: print('None') - except: + ole.close() + except Exception: log.exception('Error while parsing file %r' % filename) diff --git a/contrib/python/olefile/py2/ya.make b/contrib/python/olefile/py2/ya.make index bf07f96669..532ba2c7a3 100644 --- a/contrib/python/olefile/py2/ya.make +++ b/contrib/python/olefile/py2/ya.make @@ -2,7 +2,7 @@ PY2_LIBRARY() -VERSION(0.46) +VERSION(0.47) LICENSE(BSD-3-Clause AND PIL) @@ -10,6 +10,7 @@ NO_LINT() PY_SRCS( TOP_LEVEL + OleFileIO_PL.py olefile/__init__.py olefile/olefile.py ) diff --git a/contrib/python/pluggy/py3/.dist-info/METADATA b/contrib/python/pluggy/py3/.dist-info/METADATA index c4c3312518..2d697b0d72 100644 --- a/contrib/python/pluggy/py3/.dist-info/METADATA +++ b/contrib/python/pluggy/py3/.dist-info/METADATA @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: pluggy -Version: 1.4.0 +Version: 1.5.0 Summary: plugin and hook calling mechanisms for python Home-page: https://github.com/pytest-dev/pluggy Author: Holger Krekel @@ -138,3 +138,18 @@ Running this directly gets us:: http://doc.devpi.net .. _read the docs: https://pluggy.readthedocs.io/en/latest/ + + +Support pluggy +-------------- + +`Open Collective`_ is an online funding platform for open and transparent communities. +It provides tools to raise money and share your finances in full transparency. + +It is the platform of choice for individuals and companies that want to make one-time or +monthly donations directly to the project. + +``pluggy`` is part of the ``pytest-dev`` project, see more details in the `pytest collective`_. + +.. _Open Collective: https://opencollective.com +.. _pytest collective: https://opencollective.com/pytest diff --git a/contrib/python/pluggy/py3/README.rst b/contrib/python/pluggy/py3/README.rst index 3496617e1e..7a58c1b9c8 100644 --- a/contrib/python/pluggy/py3/README.rst +++ b/contrib/python/pluggy/py3/README.rst @@ -99,3 +99,18 @@ Running this directly gets us:: http://doc.devpi.net .. _read the docs: https://pluggy.readthedocs.io/en/latest/ + + +Support pluggy +-------------- + +`Open Collective`_ is an online funding platform for open and transparent communities. +It provides tools to raise money and share your finances in full transparency. + +It is the platform of choice for individuals and companies that want to make one-time or +monthly donations directly to the project. + +``pluggy`` is part of the ``pytest-dev`` project, see more details in the `pytest collective`_. + +.. _Open Collective: https://opencollective.com +.. _pytest collective: https://opencollective.com/pytest diff --git a/contrib/python/pluggy/py3/pluggy/__init__.py b/contrib/python/pluggy/py3/pluggy/__init__.py index 2adf9454f8..36ce168062 100644 --- a/contrib/python/pluggy/py3/pluggy/__init__.py +++ b/contrib/python/pluggy/py3/pluggy/__init__.py @@ -22,18 +22,16 @@ __all__ = [ "PluggyTeardownRaisedWarning", ] -from ._manager import PluginManager, PluginValidationError -from ._result import HookCallError, Result -from ._hooks import ( - HookspecMarker, - HookimplMarker, - HookCaller, - HookRelay, - HookspecOpts, - HookimplOpts, - HookImpl, -) -from ._warnings import ( - PluggyWarning, - PluggyTeardownRaisedWarning, -) +from ._hooks import HookCaller +from ._hooks import HookImpl +from ._hooks import HookimplMarker +from ._hooks import HookimplOpts +from ._hooks import HookRelay +from ._hooks import HookspecMarker +from ._hooks import HookspecOpts +from ._manager import PluginManager +from ._manager import PluginValidationError +from ._result import HookCallError +from ._result import Result +from ._warnings import PluggyTeardownRaisedWarning +from ._warnings import PluggyWarning diff --git a/contrib/python/pluggy/py3/pluggy/_callers.py b/contrib/python/pluggy/py3/pluggy/_callers.py index 787f56bac2..d01f925cca 100644 --- a/contrib/python/pluggy/py3/pluggy/_callers.py +++ b/contrib/python/pluggy/py3/pluggy/_callers.py @@ -1,9 +1,9 @@ """ Call loop machinery """ + from __future__ import annotations -import warnings from typing import cast from typing import Generator from typing import Mapping @@ -11,6 +11,7 @@ from typing import NoReturn from typing import Sequence from typing import Tuple from typing import Union +import warnings from ._hooks import HookImpl from ._result import HookCallError diff --git a/contrib/python/pluggy/py3/pluggy/_hooks.py b/contrib/python/pluggy/py3/pluggy/_hooks.py index 7c8420f4de..362d791823 100644 --- a/contrib/python/pluggy/py3/pluggy/_hooks.py +++ b/contrib/python/pluggy/py3/pluggy/_hooks.py @@ -1,11 +1,11 @@ """ Internal hook annotation, representation and calling machinery. """ + from __future__ import annotations import inspect import sys -import warnings from types import ModuleType from typing import AbstractSet from typing import Any @@ -23,6 +23,7 @@ from typing import TYPE_CHECKING from typing import TypedDict from typing import TypeVar from typing import Union +import warnings from ._result import Result @@ -47,6 +48,11 @@ class HookspecOpts(TypedDict): historic: bool #: Whether the hook :ref:`warns when implemented <warn_on_impl>`. warn_on_impl: Warning | None + #: Whether the hook warns when :ref:`certain arguments are requested + #: <warn_on_impl>`. + #: + #: .. versionadded:: 1.5 + warn_on_impl_args: Mapping[str, Warning] | None class HookimplOpts(TypedDict): @@ -91,8 +97,8 @@ class HookspecMarker: firstresult: bool = False, historic: bool = False, warn_on_impl: Warning | None = None, - ) -> _F: - ... + warn_on_impl_args: Mapping[str, Warning] | None = None, + ) -> _F: ... @overload # noqa: F811 def __call__( # noqa: F811 @@ -101,8 +107,8 @@ class HookspecMarker: firstresult: bool = ..., historic: bool = ..., warn_on_impl: Warning | None = ..., - ) -> Callable[[_F], _F]: - ... + warn_on_impl_args: Mapping[str, Warning] | None = ..., + ) -> Callable[[_F], _F]: ... def __call__( # noqa: F811 self, @@ -110,6 +116,7 @@ class HookspecMarker: firstresult: bool = False, historic: bool = False, warn_on_impl: Warning | None = None, + warn_on_impl_args: Mapping[str, Warning] | None = None, ) -> _F | Callable[[_F], _F]: """If passed a function, directly sets attributes on the function which will make it discoverable to :meth:`PluginManager.add_hookspecs`. @@ -129,6 +136,13 @@ class HookspecMarker: :param warn_on_impl: If given, every implementation of this hook will trigger the given warning. See :ref:`warn_on_impl`. + + :param warn_on_impl_args: + If given, every implementation of this hook which requests one of + the arguments in the dict will trigger the corresponding warning. + See :ref:`warn_on_impl`. + + .. versionadded:: 1.5 """ def setattr_hookspec_opts(func: _F) -> _F: @@ -138,6 +152,7 @@ class HookspecMarker: "firstresult": firstresult, "historic": historic, "warn_on_impl": warn_on_impl, + "warn_on_impl_args": warn_on_impl_args, } setattr(func, self.project_name + "_spec", opts) return func @@ -172,8 +187,7 @@ class HookimplMarker: trylast: bool = ..., specname: str | None = ..., wrapper: bool = ..., - ) -> _F: - ... + ) -> _F: ... @overload # noqa: F811 def __call__( # noqa: F811 @@ -185,8 +199,7 @@ class HookimplMarker: trylast: bool = ..., specname: str | None = ..., wrapper: bool = ..., - ) -> Callable[[_F], _F]: - ... + ) -> Callable[[_F], _F]: ... def __call__( # noqa: F811 self, @@ -356,8 +369,7 @@ class HookRelay: if TYPE_CHECKING: - def __getattr__(self, name: str) -> HookCaller: - ... + def __getattr__(self, name: str) -> HookCaller: ... # Historical name (pluggy<=1.2), kept for backward compatibility. @@ -690,6 +702,7 @@ class HookSpec: "kwargnames", "opts", "warn_on_impl", + "warn_on_impl_args", ) def __init__(self, namespace: _Namespace, name: str, opts: HookspecOpts) -> None: @@ -699,3 +712,4 @@ class HookSpec: self.argnames, self.kwargnames = varnames(self.function) self.opts = opts self.warn_on_impl = opts.get("warn_on_impl") + self.warn_on_impl_args = opts.get("warn_on_impl_args") diff --git a/contrib/python/pluggy/py3/pluggy/_manager.py b/contrib/python/pluggy/py3/pluggy/_manager.py index ce1e107a60..9998dd815b 100644 --- a/contrib/python/pluggy/py3/pluggy/_manager.py +++ b/contrib/python/pluggy/py3/pluggy/_manager.py @@ -2,7 +2,6 @@ from __future__ import annotations import inspect import types -import warnings from typing import Any from typing import Callable from typing import cast @@ -11,6 +10,7 @@ from typing import Iterable from typing import Mapping from typing import Sequence from typing import TYPE_CHECKING +import warnings from . import _tracing from ._callers import _multicall @@ -26,6 +26,7 @@ from ._hooks import HookspecOpts from ._hooks import normalize_hookimpl_opts from ._result import Result + if TYPE_CHECKING: # importtlib.metadata import is slow, defer it. import importlib.metadata @@ -291,7 +292,7 @@ class PluginManager: def get_plugins(self) -> set[Any]: """Return a set of all registered plugin objects.""" - return set(self._name2plugin.values()) + return {x for x in self._name2plugin.values() if x is not None} def is_registered(self, plugin: _Plugin) -> bool: """Return whether the plugin is already registered.""" @@ -352,6 +353,12 @@ class PluginManager: ), ) + if hook.spec.warn_on_impl_args: + for hookimpl_argname in hookimpl.argnames: + argname_warning = hook.spec.warn_on_impl_args.get(hookimpl_argname) + if argname_warning is not None: + _warn_for_function(argname_warning, hookimpl.function) + if ( hookimpl.wrapper or hookimpl.hookwrapper ) and not inspect.isgeneratorfunction(hookimpl.function): diff --git a/contrib/python/pluggy/py3/pluggy/_result.py b/contrib/python/pluggy/py3/pluggy/_result.py index aa21fa1380..f9a081c4f6 100644 --- a/contrib/python/pluggy/py3/pluggy/_result.py +++ b/contrib/python/pluggy/py3/pluggy/_result.py @@ -1,6 +1,7 @@ """ Hook wrapper "result" utilities. """ + from __future__ import annotations from types import TracebackType diff --git a/contrib/python/pluggy/py3/pluggy/_tracing.py b/contrib/python/pluggy/py3/pluggy/_tracing.py index de1e13a7d3..cd238ad7e5 100644 --- a/contrib/python/pluggy/py3/pluggy/_tracing.py +++ b/contrib/python/pluggy/py3/pluggy/_tracing.py @@ -1,6 +1,7 @@ """ Tracing utils """ + from __future__ import annotations from typing import Any diff --git a/contrib/python/pluggy/py3/pluggy/_version.py b/contrib/python/pluggy/py3/pluggy/_version.py index ee6c4d7d05..c565007eec 100644 --- a/contrib/python/pluggy/py3/pluggy/_version.py +++ b/contrib/python/pluggy/py3/pluggy/_version.py @@ -12,5 +12,5 @@ __version__: str __version_tuple__: VERSION_TUPLE version_tuple: VERSION_TUPLE -__version__ = version = '1.4.0' -__version_tuple__ = version_tuple = (1, 4, 0) +__version__ = version = '1.5.0' +__version_tuple__ = version_tuple = (1, 5, 0) diff --git a/contrib/python/pluggy/py3/ya.make b/contrib/python/pluggy/py3/ya.make index 8dc442cdd1..ac57e7a2b7 100644 --- a/contrib/python/pluggy/py3/ya.make +++ b/contrib/python/pluggy/py3/ya.make @@ -2,7 +2,7 @@ PY3_LIBRARY() -VERSION(1.4.0) +VERSION(1.5.0) LICENSE(MIT) diff --git a/contrib/python/scramp/.dist-info/METADATA b/contrib/python/scramp/.dist-info/METADATA index b225463273..0058fe6943 100644 --- a/contrib/python/scramp/.dist-info/METADATA +++ b/contrib/python/scramp/.dist-info/METADATA @@ -1,35 +1,33 @@ -Metadata-Version: 2.1 +Metadata-Version: 2.3 Name: scramp -Version: 1.4.4 +Version: 1.4.5 Summary: An implementation of the SCRAM protocol. -License: MIT No Attribution Project-URL: Homepage, https://github.com/tlocke/scramp -Keywords: SCRAM,authentication,SASL +Author: The Contributors +License: MIT No Attribution +License-File: LICENSE +Keywords: SASL,SCRAM,authentication Classifier: Development Status :: 5 - Production/Stable Classifier: Intended Audience :: Developers Classifier: License :: OSI Approved :: MIT No Attribution License (MIT-0) +Classifier: Operating System :: OS Independent Classifier: Programming Language :: Python Classifier: Programming Language :: Python :: 3 -Classifier: Programming Language :: Python :: 3.7 Classifier: Programming Language :: Python :: 3.8 Classifier: Programming Language :: Python :: 3.9 Classifier: Programming Language :: Python :: 3.10 +Classifier: Programming Language :: Python :: 3.11 Classifier: Programming Language :: Python :: Implementation Classifier: Programming Language :: Python :: Implementation :: CPython Classifier: Programming Language :: Python :: Implementation :: PyPy -Classifier: Operating System :: OS Independent -Requires-Python: >=3.7 -Description-Content-Type: text/x-rst -License-File: LICENSE -Requires-Dist: asn1crypto (>=1.5.1) -Requires-Dist: importlib-metadata (>=1.0) ; python_version < "3.8" +Requires-Python: >=3.8 +Requires-Dist: asn1crypto>=1.5.1 +Description-Content-Type: text/markdown -====== -Scramp -====== +# Scramp -A Python implementation of the `SCRAM authentication protocol -<https://en.wikipedia.org/wiki/Salted_Challenge_Response_Authentication_Mechanism>`_. +A Python implementation of the [SCRAM authentication protocol]( +https://en.wikipedia.org/wiki/Salted_Challenge_Response_Authentication_Mechanism>). Scramp supports the following mechanisms: - SCRAM-SHA-1 @@ -41,27 +39,22 @@ Scramp supports the following mechanisms: - SCRAM-SHA3-512 - SCRAM-SHA3-512-PLUS -.. contents:: Table of Contents - :depth: 2 - :local: -Installation ------------- +## Installation -- Create a virtual environment: ``python3 -m venv venv`` -- Activate the virtual environment: ``source venv/bin/activate`` -- Install: ``pip install scramp`` +- Create a virtual environment: `python3 -m venv venv` +- Activate the virtual environment: `source venv/bin/activate` +- Install: `pip install scramp` -Examples --------- +## Examples -Client and Server -````````````````` +### Client and Server Here's an example using both the client and the server. It's a bit contrived as normally you'd be using either the client or server on its own. +```python >>> from scramp import ScramClient, ScramMechanism >>> >>> USERNAME = 'user' @@ -106,15 +99,16 @@ you'd be using either the client or server on its own. >>> >>> # If it all runs through without raising an exception, the authentication >>> # has succeeded +``` -Client only -``````````` +### Client only Here's an example using just the client. The client nonce is specified in order to give -a reproducible example, but in production you'd omit the ``c_nonce`` parameter and let -``ScramClient`` generate a client nonce: +a reproducible example, but in production you'd omit the `c_nonce` parameter and let +`ScramClient` generate a client nonce: +```python >>> from scramp import ScramClient >>> >>> USERNAME = 'user' @@ -147,15 +141,16 @@ c=biws,r=rOprNGfwEbeRWgbNEkqO%hvYDpWUa2RaTCAfuxFIlj)hNlF$k0,p=dHzbZapWIk4jUhN+Ut >>> >>> # If it all runs through without raising an exception, the authentication >>> # has succeeded +``` -Server only -``````````` +### Server only Here's an example using just the server. The server nonce and salt is specified in order -to give a reproducible example, but in production you'd omit the ``s_nonce`` and -``salt`` parameters and let Scramp generate them: +to give a reproducible example, but in production you'd omit the `s_nonce` and `salt` +parameters and let Scramp generate them: +```python >>> from scramp import ScramMechanism >>> >>> USERNAME = 'user' @@ -201,16 +196,17 @@ v=6rriTRBi23WpRR/wtup+mMhUZUn/dB5nLTJRsjl95G4= >>> >>> # If it all runs through without raising an exception, the authentication >>> # has succeeded +``` -Server only with passlib -```````````````````````` +### Server only with passlib -Here's an example using just the server and using the `passlib hashing library -<https://passlib.readthedocs.io/en/stable/index.html>`_. The server nonce and salt is +Here's an example using just the server and using the [passlib hashing library]( +https://passlib.readthedocs.io/en/stable/index.html). The server nonce and salt is specified in order to give a reproducible example, but in production you'd omit the -``s_nonce`` and ``salt`` parameters and let Scramp generate them: +`s_nonce` and `salt` parameters and let Scramp generate them: +```python >>> from scramp import ScramMechanism >>> from passlib.hash import scram >>> @@ -259,15 +255,16 @@ v=6rriTRBi23WpRR/wtup+mMhUZUn/dB5nLTJRsjl95G4= >>> >>> # If it all runs through without raising an exception, the authentication >>> # has succeeded +``` -Server Error -```````````` +### Server Error Here's an example of when setting a message from the client causes an error. The server nonce and salt is specified in order to give a reproducible example, but in production -you'd omit the ``s_nonce`` and ``salt`` parameters and let Scramp generate them: +you'd omit the `s_nonce` and `salt` parameters and let Scramp generate them: +```python >>> from scramp import ScramException, ScramMechanism >>> >>> USERNAME = 'user' @@ -304,307 +301,183 @@ you'd omit the ``s_nonce`` and ``salt`` parameters and let Scramp generate them: Received GS2 flag 'p' which indicates that the client requires channel binding, but the server does not: channel-binding-not-supported e=channel-binding-not-supported - -Standards ---------- - -`RFC 5802 <https://tools.ietf.org/html/rfc5802>`_ - Describes SCRAM. -`RFC 7677 <https://datatracker.ietf.org/doc/html/rfc7677>`_ - Registers SCRAM-SHA-256 and SCRAM-SHA-256-PLUS. -`draft-melnikov-scram-sha-512-02 <https://datatracker.ietf.org/doc/html/draft-melnikov-scram-sha-512>`_ - Registers SCRAM-SHA-512 and SCRAM-SHA-512-PLUS. -`draft-melnikov-scram-sha3-512 <https://datatracker.ietf.org/doc/html/draft-melnikov-scram-sha3-512>`_ - Registers SCRAM-SHA3-512 and SCRAM-SHA3-512-PLUS. -`RFC 5929 <https://datatracker.ietf.org/doc/html/rfc5929>`_ - Channel Bindings for TLS. -`draft-ietf-kitten-tls-channel-bindings-for-tls13 <https://datatracker.ietf.org/doc/html/draft-ietf-kitten-tls-channel-bindings-for-tls13>`_ - Defines the ``tls-exporter`` channel binding, which is `not yet supported by Scramp - <https://github.com/tlocke/scramp/issues/9>`_. - - -API Docs --------- +``` -scramp.MECHANISMS -````````````````` +### Standards -A tuple of the supported mechanism names. - - -scramp.ScramClient -`````````````````` - -``ScramClient(mechanisms, username, password, channel_binding=None, c_nonce=None)`` - Constructor of the ``ScramClient`` class, with the following parameters: - - ``mechanisms`` - A list or tuple of mechanism names. ScramClient will choose the most secure. If - ``cbind_data`` is ``None``, the '-PLUS' variants will be filtered out first. The - chosen mechanism is available as the property ``mechanism_name``. - - ``username`` - - ``password`` - - ``channel_binding`` - Providing a value for this parameter allows channel binding to be used (ie. it lets - you use mechanisms ending in '-PLUS'). The value for ``channel_binding`` is a tuple - consisting of the channel binding name and the channel binding data. For example, if - the channel binding name is ``tls-unique``, the ``channel_binding`` parameter would - be ``('tls-unique', data)``, where ``data`` is obtained by calling - `SSLSocket.get_channel_binding() - <https://docs.python.org/3/library/ssl.html#ssl.SSLSocket.get_channel_binding>`_. - The convenience function ``scramp.make_channel_binding()`` can be used to create a - channel binding tuple. +- [RFC 5802](https://tools.ietf.org/html/rfc5802>) Describes SCRAM. +- [RFC 7677](https://datatracker.ietf.org/doc/html/rfc7677>) Registers SCRAM-SHA-256 and SCRAM-SHA-256-PLUS. +- [draft-melnikov-scram-sha-512-02](https://datatracker.ietf.org/doc/html/draft-melnikov-scram-sha-512) Registers SCRAM-SHA-512 and SCRAM-SHA-512-PLUS. +- [draft-melnikov-scram-sha3-512](https://datatracker.ietf.org/doc/html/draft-melnikov-scram-sha3-512) Registers SCRAM-SHA3-512 and SCRAM-SHA3-512-PLUS. +- [RFC 5929](https://datatracker.ietf.org/doc/html/rfc5929) Channel Bindings for TLS. +- [draft-ietf-kitten-tls-channel-bindings-for-tls13](https://datatracker.ietf.org/doc/html/draft-ietf-kitten-tls-channel-bindings-for-tls13>) Defines the `tls-exporter` channel binding, which is [not yet supported by Scramp](https://github.com/tlocke/scramp/issues/9). - ``c_nonce`` - The client nonce. It's sometimes useful to set this when testing / debugging, but in - production this should be omitted, in which case ``ScramClient`` will generate a - client nonce. -The ``ScramClient`` object has the following methods and properties: +## API Docs -``get_client_first()`` - Get the client first message. -``set_server_first(message)`` - Set the first message from the server. -``get_client_final()`` - Get the final client message. -``set_server_final(message)`` - Set the final message from the server. -``mechanism_name`` - The mechanism chosen from the list given in the constructor. +### scramp.MECHANISMS -scramp.ScramMechanism -````````````````````` - -``ScramMechanism(mechanism='SCRAM-SHA-256')`` - Constructor of the ``ScramMechanism`` class, with the following parameter: +A tuple of the supported mechanism names. - ``mechanism`` - The SCRAM mechanism to use. -The ``ScramMechanism`` object has the following methods and properties: +### scramp.ScramClient -``make_auth_info(password, iteration_count=None, salt=None)`` - returns the tuple ``(salt, stored_key, server_key, iteration_count)`` which is stored - in the authentication database on the server side. It has the following parameters: +`ScramClient(mechanisms, username, password, channel_binding=None, c_nonce=None)` - ``password`` - The user's password as a ``str``. +Constructor of the `scramp.ScramClient` class, with the following parameters: - ``iteration_count`` - The rounds as an ``int``. If ``None`` then use the minimum associated with the - mechanism. - ``salt`` - It's sometimes useful to set this binary parameter when testing / debugging, but in - production this should be omitted, in which case a salt will be generated. +- `mechanisms` - A list or tuple of mechanism names. ScramClient will choose the most secure. If `cbind_data` is `None`, the '-PLUS' variants will be filtered out first. The chosen mechanism is available as the property `mechanism_name`. +- `username` +- `password` +- `channel_binding` - Providing a value for this parameter allows channel binding to be used (ie. it lets you use mechanisms ending in '-PLUS'). The value for `channel_binding` is a tuple consisting of the channel binding name and the channel binding data. For example, if the channel binding name is `tls-unique`, the `channel_binding` parameter would be `('tls-unique', data)`, where `data` is obtained by calling [SSLSocket.get\_channel\_binding()](https://docs.python.org/3/library/ssl.html#ssl.SSLSocket.get_channel_binding). The convenience function `scramp.make_channel_binding()` can be used to create a channel binding tuple. +- `c_nonce` - The client nonce. It's sometimes useful to set this when testing / debugging, but in production this should be omitted, in which case `ScramClient` will generate a client nonce. -``make_server(auth_fn, channel_binding=None, s_nonce=None)`` - returns a ``ScramServer`` object. It takes the following parameters: +The `ScramClient` object has the following methods and properties: - ``auth_fn`` - This is a function provided by the programmer that has one parameter, a username of - type ``str`` and returns returns the tuple ``(salt, stored_key, server_key, - iteration_count)``. Where ``salt``, ``stored_key`` and ``server_key`` are of a - binary type, and ``iteration_count`` is an ``int``. +- `get_client_first()` - Get the client first message. +- `set_server_first(message)` - Set the first message from the server. +- `get_client_final()` - Get the final client message. +- `set_server_final(message)` - Set the final message from the server. +- `mechanism_name` - The mechanism chosen from the list given in the constructor. - ``channel_binding`` - Providing a value for this parameter allows channel binding to be used (ie. it lets - you use mechanisms ending in ``-PLUS``). The value for ``channel_binding`` is a - tuple consisting of the channel binding name and the channel binding data. For - example, if the channel binding name is 'tls-unique', the ``channel_binding`` - parameter would be ``('tls-unique', data)``, where ``data`` is obtained by calling - `SSLSocket.get_channel_binding() - <https://docs.python.org/3/library/ssl.html#ssl.SSLSocket.get_channel_binding>`_. - The convenience function ``scramp.make_channel_binding()`` can be used to create a - channel binding tuple. If ``channel_binding`` is provided and the mechanism isn't a - ``-PLUS`` variant, then the server will negotiate with the client to use the - ``-PLUS`` variant if the client supports it, or otherwise to use the mechanism - without channel binding. - ``s_nonce`` - The server nonce as a ``str``. It's sometimes useful to set this when testing / - debugging, but in production this should be omitted, in which case ``ScramServer`` - will generate a server nonce. +### scramp.ScramMechanism -``make_stored_server_keys(salted_password)`` - returns ``(stored_key, server_key)`` tuple of ``bytes`` objects given a salted - password. This is useful if you want to use a separate hashing implementation from - the one provided by Scramp. It takes the following parameter: +`ScramMechanism(mechanism='SCRAM-SHA-256')` - ``salted_password`` - A binary object representing the hashed password. +Constructor of the `ScramMechanism` class, with the following parameter: -``iteration_count`` - The minimum iteration count recommended for this mechanism. +- `mechanism` - The SCRAM mechanism to use. +The `ScramMechanism` object has the following methods and properties: -scramp.ScramServer -`````````````````` +- `make_auth_info(password, iteration_count=None, salt=None)` - Returns the tuple `(salt, stored_key, server_key, iteration_count)` which is stored in the authentication database on the server side. It has the following parameters: + - `password` - The user's password as a `str`. + - `iteration_count` - The rounds as an `int`. If `None` then use the minimum associated with the mechanism. + - `salt` - It's sometimes useful to set this binary parameter when testing / debugging, but in production this should be omitted, in which case a salt will be generated. +- `make_server(auth_fn, channel_binding=None, s_nonce=None)` - returns a `ScramServer` object. It takes the following parameters: + - `auth_fn` This is a function provided by the programmer that has one parameter, a username of type `str` and returns returns the tuple `(salt, stored_key, server_key, iteration_count)`. Where `salt`, `stored_key` and `server_key` are of a binary type, and `iteration_count` is an `int`. + - `channel_binding` - Providing a value for this parameter allows channel binding to be used (ie. it lets you use mechanisms ending in `-PLUS`). The value for `channel_binding` is a tuple consisting of the channel binding name and the channel binding data. For example, if the channel binding name is 'tls-unique', the `channel_binding` parameter would be `('tls-unique', data)`, where `data` is obtained by calling [SSLSocket.get\_channel\_binding()](https://docs.python.org/3/library/ssl.html#ssl.SSLSocket.get_channel_binding>). The convenience function `scramp.make_channel_binding()` can be used to create a channel binding tuple. If `channel_binding` is provided and the mechanism isn't a `-PLUS` variant, then the server will negotiate with the client to use the `-PLUS` variant if the client supports it, or otherwise to use the mechanism without channel binding. + - `s_nonce` - The server nonce as a `str`. It's sometimes useful to set this when testing / debugging, but in production this should be omitted, in which case `ScramServer` will generate a server nonce. +- `make_stored_server_keys(salted_password)` - Returns `(stored_key, server_key)` tuple of `bytes` objects given a salted password. This is useful if you want to use a separate hashing implementation from the one provided by Scramp. It takes the following parameter: + - `salted_password` - A binary object representing the hashed password. +- `iteration_count` - The minimum iteration count recommended for this mechanism. -The ``ScramServer`` object has the following methods: -``set_client_first(message)`` - Set the first message from the client. +### scramp.ScramServer -``get_server_first()`` - Get the server first message. +The `ScramServer` object has the following methods: -``set_client_final(message)`` - Set the final client message. +- `set_client_first(message)` - Set the first message from the client. +- `get_server_first()` - Get the server first message. +- `set_client_final(message)` - Set the final client message. +- `get_server_final()` - Get the server final message. -``get_server_final()`` - Get the server final message. +### scramp.make\_channel\_binding(name, ssl\_socket) -scramp.make_channel_binding() -````````````````````````````` +A helper function that makes a `channel_binding` tuple when given a channel binding name and an SSL socket. The parameters are: +- `name` - A channel binding name such as 'tls-unique' or 'tls-server-end-point'. +- `ssl_socket` - An instance of [ssl.SSLSocket](https://docs.python.org/3/library/ssl.html#ssl.SSLSocket). -``make_channel_binding(name, ssl_socket)`` - A helper function that makes a ``channel_binding`` tuple when given a channel binding - name and an SSL socket. The parameters are: - ``name`` - A channel binding name such as 'tls-unique' or 'tls-server-end-point'. +## Testing - ``ssl_socket`` - An instance of `ssl.SSLSocket - <https://docs.python.org/3/library/ssl.html#ssl.SSLSocket>`_. +- Activate the virtual environment: `source venv/bin/activate` +- Install `tox`: `pip install tox` +- Run `tox`: `tox` -README.rst ----------- +## OpenSSF Scorecard -This file is written in the `reStructuredText -<https://docutils.sourceforge.io/docs/user/rst/quickref.html>`_ format. To generate an -HTML page from it, do: +It might be worth running the [OpenSSF Scorecard](https://securityscorecards.dev/): -- Activate the virtual environment: ``source venv/bin/activate`` -- Install ``Sphinx``: ``pip install Sphinx`` -- Run ``rst2html.py``: ``rst2html.py README.rst README.html`` +`sudo docker run -e GITHUB_AUTH_TOKEN=<auth_token> gcr.io/openssf/scorecard:stable --repo=github.com/tlocke/scramp` -Testing -------- +## Doing A Release Of Scramp -- Activate the virtual environment: ``source venv/bin/activate`` -- Install ``tox``: ``pip install tox`` -- Run ``tox``: ``tox`` +Run `tox` to make sure all tests pass, then update the release notes, then do: +- `git tag -a x.y.z -m "version x.y.z"` +- `rm -r dist` +- `python -m build` +- `twine upload dist/*` -Doing A Release Of Scramp -------------------------- -Run ``tox`` to make sure all tests pass, then update the release notes, then do:: +## Release Notes - git tag -a x.y.z -m "version x.y.z" - rm -r dist - python -m build - twine upload --sign dist/* +### Version 1.4.5, 2024-04-13 +- Drop support for Python 3.7, which means we're not dependent on `importlib-metadata` anymore. +- Various changes to build system, docs and automated testing. -Release Notes -------------- -Version 1.4.4, 2022-11-01 -````````````````````````` +### Version 1.4.4, 2022-11-01 -- Tighten up parsing of messages to make sure that a ``ScramException`` is raised if a - message is malformed. +- Tighten up parsing of messages to make sure that a `ScramException` is raised if a message is malformed. -Version 1.4.3, 2022-10-26 -````````````````````````` +### Version 1.4.3, 2022-10-26 -- The client now sends a gs2-cbind-flag of 'y' if the client supports channel - binding, but thinks the server does not. +- The client now sends a gs2-cbind-flag of 'y' if the client supports channel binding, but thinks the server does not. -Version 1.4.2, 2022-10-22 -````````````````````````` +### Version 1.4.2, 2022-10-22 - Switch to using the MIT-0 licence https://choosealicense.com/licenses/mit-0/ - -- When creating a ScramClient, allow non ``-PLUS`` variants, even if a - ``channel_binding`` parameter is provided. Previously this would raise and - exception. +- When creating a ScramClient, allow non ``-PLUS`` variants, even if a `channel_binding` parameter is provided. Previously this would raise and exception. -Version 1.4.1, 2021-08-25 -````````````````````````` +### Version 1.4.1, 2021-08-25 -- When using ``make_channel_binding()`` to create a tls-server-end-point channel - binding, support certificates with hash algorithm of sha512. +- When using `make_channel_binding()` to create a tls-server-end-point channel binding, support certificates with hash algorithm of sha512. -Version 1.4.0, 2021-03-28 -````````````````````````` +### Version 1.4.0, 2021-03-28 - Raise an exception if the client receives an error from the server. -Version 1.3.0, 2021-03-28 -````````````````````````` +### Version 1.3.0, 2021-03-28 -- As the specification allows, server errors are now sent to the client in the - ``server_final`` message, an exception is still thrown as before. +- As the specification allows, server errors are now sent to the client in the `server_final` message, an exception is still thrown as before. -Version 1.2.2, 2021-02-13 -````````````````````````` +### Version 1.2.2, 2021-02-13 -- Fix bug in generating the AuthMessage. It was incorrect when channel binding - was used. So now Scramp supports channel binding. +- Fix bug in generating the AuthMessage. It was incorrect when channel binding was used. So now Scramp supports channel binding. -Version 1.2.1, 2021-02-07 -````````````````````````` +### Version 1.2.1, 2021-02-07 - Add support for channel binding. +- Add support for SCRAM-SHA-512 and SCRAM-SHA3-512 and their channel binding variants. -- Add support for SCRAM-SHA-512 and SCRAM-SHA3-512 and their channel binding - variants. - - -Version 1.2.0, 2020-05-30 -````````````````````````` -- This is a backwardly incompatible change on the server side, the client side will - work as before. The idea of this change is to make it possible to have an - authentication database. That is, the authentication information can be stored, and - then retrieved when needed to authenticate the user. +### Version 1.2.0, 2020-05-30 -- In addition, it's now possible on the server side to use a third party hashing library - such as passlib as the hashing implementation. +- This is a backwardly incompatible change on the server side, the client side will work as before. The idea of this change is to make it possible to have an authentication database. That is, the authentication information can be stored, and then retrieved when needed to authenticate the user. +- In addition, it's now possible on the server side to use a third party hashing library such as passlib as the hashing implementation. -Version 1.1.1, 2020-03-28 -````````````````````````` +### Version 1.1.1, 2020-03-28 - Add the README and LICENCE to the distribution. -Version 1.1.0, 2019-02-24 -````````````````````````` +### Version 1.1.0, 2019-02-24 - Add support for the SCRAM-SHA-1 mechanism. -Version 1.0.0, 2019-02-17 -````````````````````````` +### Version 1.0.0, 2019-02-17 - Implement the server side as well as the client side. -Version 0.0.0, 2019-02-10 -````````````````````````` +### Version 0.0.0, 2019-02-10 -- Copied SCRAM implementation from `pg8000 <https://github.com/tlocke/pg8000>`_. The - idea is to make it a general SCRAM implemtation. Credit to the `Scrampy - <https://github.com/cagdass/scrampy>`_ project which I read through to help with this - project. Also credit to the `passlib <https://github.com/efficks/passlib>`_ project - from which I copied the ``saslprep`` function. +- Copied SCRAM implementation from [pg8000](https://github.com/tlocke/pg8000). The idea is to make it a general SCRAM implemtation. Credit to the [Scrampy](https://github.com/cagdass/scrampy) project which I read through to help with this project. Also credit to the [passlib](https://github.com/efficks/passlib) project from which I copied the `saslprep` function. diff --git a/contrib/python/scramp/README.md b/contrib/python/scramp/README.md new file mode 100644 index 0000000000..43641445be --- /dev/null +++ b/contrib/python/scramp/README.md @@ -0,0 +1,457 @@ +# Scramp + +A Python implementation of the [SCRAM authentication protocol]( +https://en.wikipedia.org/wiki/Salted_Challenge_Response_Authentication_Mechanism>). +Scramp supports the following mechanisms: + +- SCRAM-SHA-1 +- SCRAM-SHA-1-PLUS +- SCRAM-SHA-256 +- SCRAM-SHA-256-PLUS +- SCRAM-SHA-512 +- SCRAM-SHA-512-PLUS +- SCRAM-SHA3-512 +- SCRAM-SHA3-512-PLUS + + +## Installation + +- Create a virtual environment: `python3 -m venv venv` +- Activate the virtual environment: `source venv/bin/activate` +- Install: `pip install scramp` + + +## Examples + +### Client and Server + +Here's an example using both the client and the server. It's a bit contrived as normally +you'd be using either the client or server on its own. + +```python +>>> from scramp import ScramClient, ScramMechanism +>>> +>>> USERNAME = 'user' +>>> PASSWORD = 'pencil' +>>> MECHANISMS = ['SCRAM-SHA-256'] +>>> +>>> +>>> # Choose a mechanism for our server +>>> m = ScramMechanism() # Default is SCRAM-SHA-256 +>>> +>>> # On the server side we create the authentication information for each user +>>> # and store it in an authentication database. We'll use a dict: +>>> db = {} +>>> +>>> salt, stored_key, server_key, iteration_count = m.make_auth_info(PASSWORD) +>>> +>>> db[USERNAME] = salt, stored_key, server_key, iteration_count +>>> +>>> # Define your own function for retrieving the authentication information +>>> # from the database given a username +>>> +>>> def auth_fn(username): +... return db[username] +>>> +>>> # Make the SCRAM server +>>> s = m.make_server(auth_fn) +>>> +>>> # Now set up the client and carry out authentication with the server +>>> c = ScramClient(MECHANISMS, USERNAME, PASSWORD) +>>> cfirst = c.get_client_first() +>>> +>>> s.set_client_first(cfirst) +>>> sfirst = s.get_server_first() +>>> +>>> c.set_server_first(sfirst) +>>> cfinal = c.get_client_final() +>>> +>>> s.set_client_final(cfinal) +>>> sfinal = s.get_server_final() +>>> +>>> c.set_server_final(sfinal) +>>> +>>> # If it all runs through without raising an exception, the authentication +>>> # has succeeded +``` + + +### Client only + +Here's an example using just the client. The client nonce is specified in order to give +a reproducible example, but in production you'd omit the `c_nonce` parameter and let +`ScramClient` generate a client nonce: + +```python +>>> from scramp import ScramClient +>>> +>>> USERNAME = 'user' +>>> PASSWORD = 'pencil' +>>> C_NONCE = 'rOprNGfwEbeRWgbNEkqO' +>>> MECHANISMS = ['SCRAM-SHA-256'] +>>> +>>> # Normally the c_nonce would be omitted, in which case ScramClient will +>>> # generate the nonce itself. +>>> +>>> c = ScramClient(MECHANISMS, USERNAME, PASSWORD, c_nonce=C_NONCE) +>>> +>>> # Get the client first message and send it to the server +>>> cfirst = c.get_client_first() +>>> print(cfirst) +n,,n=user,r=rOprNGfwEbeRWgbNEkqO +>>> +>>> # Set the first message from the server +>>> c.set_server_first( +... 'r=rOprNGfwEbeRWgbNEkqO%hvYDpWUa2RaTCAfuxFIlj)hNlF$k0,' +... 's=W22ZaJ0SNY7soEsUEjb6gQ==,i=4096') +>>> +>>> # Get the client final message and send it to the server +>>> cfinal = c.get_client_final() +>>> print(cfinal) +c=biws,r=rOprNGfwEbeRWgbNEkqO%hvYDpWUa2RaTCAfuxFIlj)hNlF$k0,p=dHzbZapWIk4jUhN+Ute9ytag9zjfMHgsqmmiz7AndVQ= +>>> +>>> # Set the final message from the server +>>> c.set_server_final('v=6rriTRBi23WpRR/wtup+mMhUZUn/dB5nLTJRsjl95G4=') +>>> +>>> # If it all runs through without raising an exception, the authentication +>>> # has succeeded +``` + + +### Server only + +Here's an example using just the server. The server nonce and salt is specified in order +to give a reproducible example, but in production you'd omit the `s_nonce` and `salt` +parameters and let Scramp generate them: + +```python +>>> from scramp import ScramMechanism +>>> +>>> USERNAME = 'user' +>>> PASSWORD = 'pencil' +>>> S_NONCE = '%hvYDpWUa2RaTCAfuxFIlj)hNlF$k0' +>>> SALT = b'[m\x99h\x9d\x125\x8e\xec\xa0K\x14\x126\xfa\x81' +>>> +>>> db = {} +>>> +>>> m = ScramMechanism() +>>> +>>> salt, stored_key, server_key, iteration_count = m.make_auth_info( +... PASSWORD, salt=SALT) +>>> +>>> db[USERNAME] = salt, stored_key, server_key, iteration_count +>>> +>>> # Define your own function for getting a password given a username +>>> def auth_fn(username): +... return db[username] +>>> +>>> # Normally the s_nonce parameter would be omitted, in which case the +>>> # server will generate the nonce itself. +>>> +>>> s = m.make_server(auth_fn, s_nonce=S_NONCE) +>>> +>>> # Set the first message from the client +>>> s.set_client_first('n,,n=user,r=rOprNGfwEbeRWgbNEkqO') +>>> +>>> # Get the first server message, and send it to the client +>>> sfirst = s.get_server_first() +>>> print(sfirst) +r=rOprNGfwEbeRWgbNEkqO%hvYDpWUa2RaTCAfuxFIlj)hNlF$k0,s=W22ZaJ0SNY7soEsUEjb6gQ==,i=4096 +>>> +>>> # Set the final message from the client +>>> s.set_client_final( +... 'c=biws,r=rOprNGfwEbeRWgbNEkqO%hvYDpWUa2RaTCAfuxFIlj)hNlF$k0,' +... 'p=dHzbZapWIk4jUhN+Ute9ytag9zjfMHgsqmmiz7AndVQ=') +>>> +>>> # Get the final server message and send it to the client +>>> sfinal = s.get_server_final() +>>> print(sfinal) +v=6rriTRBi23WpRR/wtup+mMhUZUn/dB5nLTJRsjl95G4= +>>> +>>> # If it all runs through without raising an exception, the authentication +>>> # has succeeded +``` + + +### Server only with passlib + +Here's an example using just the server and using the [passlib hashing library]( +https://passlib.readthedocs.io/en/stable/index.html). The server nonce and salt is +specified in order to give a reproducible example, but in production you'd omit the +`s_nonce` and `salt` parameters and let Scramp generate them: + +```python +>>> from scramp import ScramMechanism +>>> from passlib.hash import scram +>>> +>>> USERNAME = 'user' +>>> PASSWORD = 'pencil' +>>> S_NONCE = '%hvYDpWUa2RaTCAfuxFIlj)hNlF$k0' +>>> SALT = b'[m\x99h\x9d\x125\x8e\xec\xa0K\x14\x126\xfa\x81' +>>> ITERATION_COUNT = 4096 +>>> +>>> db = {} +>>> hash = scram.using(salt=SALT, rounds=ITERATION_COUNT).hash(PASSWORD) +>>> +>>> salt, iteration_count, digest = scram.extract_digest_info(hash, 'sha-256') +>>> +>>> stored_key, server_key = m.make_stored_server_keys(digest) +>>> +>>> db[USERNAME] = salt, stored_key, server_key, iteration_count +>>> +>>> # Define your own function for getting a password given a username +>>> def auth_fn(username): +... return db[username] +>>> +>>> # Normally the s_nonce parameter would be omitted, in which case the +>>> # server will generate the nonce itself. +>>> +>>> m = ScramMechanism() +>>> s = m.make_server(auth_fn, s_nonce=S_NONCE) +>>> +>>> # Set the first message from the client +>>> s.set_client_first('n,,n=user,r=rOprNGfwEbeRWgbNEkqO') +>>> +>>> # Get the first server message, and send it to the client +>>> sfirst = s.get_server_first() +>>> print(sfirst) +r=rOprNGfwEbeRWgbNEkqO%hvYDpWUa2RaTCAfuxFIlj)hNlF$k0,s=W22ZaJ0SNY7soEsUEjb6gQ==,i=4096 +>>> +>>> # Set the final message from the client +>>> s.set_client_final( +... 'c=biws,r=rOprNGfwEbeRWgbNEkqO%hvYDpWUa2RaTCAfuxFIlj)hNlF$k0,' +... 'p=dHzbZapWIk4jUhN+Ute9ytag9zjfMHgsqmmiz7AndVQ=') +>>> +>>> # Get the final server message and send it to the client +>>> sfinal = s.get_server_final() +>>> print(sfinal) +v=6rriTRBi23WpRR/wtup+mMhUZUn/dB5nLTJRsjl95G4= +>>> +>>> # If it all runs through without raising an exception, the authentication +>>> # has succeeded +``` + + +### Server Error + +Here's an example of when setting a message from the client causes an error. The server +nonce and salt is specified in order to give a reproducible example, but in production +you'd omit the `s_nonce` and `salt` parameters and let Scramp generate them: + +```python +>>> from scramp import ScramException, ScramMechanism +>>> +>>> USERNAME = 'user' +>>> PASSWORD = 'pencil' +>>> S_NONCE = '%hvYDpWUa2RaTCAfuxFIlj)hNlF$k0' +>>> SALT = b'[m\x99h\x9d\x125\x8e\xec\xa0K\x14\x126\xfa\x81' +>>> +>>> db = {} +>>> +>>> m = ScramMechanism() +>>> +>>> salt, stored_key, server_key, iteration_count = m.make_auth_info( +... PASSWORD, salt=SALT) +>>> +>>> db[USERNAME] = salt, stored_key, server_key, iteration_count +>>> +>>> # Define your own function for getting a password given a username +>>> def auth_fn(username): +... return db[username] +>>> +>>> # Normally the s_nonce parameter would be omitted, in which case the +>>> # server will generate the nonce itself. +>>> +>>> s = m.make_server(auth_fn, s_nonce=S_NONCE) +>>> +>>> try: +... # Set the first message from the client +... s.set_client_first('p=tls-unique,,n=user,r=rOprNGfwEbeRWgbNEkqO') +... except ScramException as e: +... print(e) +... # Get the final server message and send it to the client +... sfinal = s.get_server_final() +... print(sfinal) +Received GS2 flag 'p' which indicates that the client requires channel binding, but the server does not: channel-binding-not-supported +e=channel-binding-not-supported + +``` + + +### Standards + +- [RFC 5802](https://tools.ietf.org/html/rfc5802>) Describes SCRAM. +- [RFC 7677](https://datatracker.ietf.org/doc/html/rfc7677>) Registers SCRAM-SHA-256 and SCRAM-SHA-256-PLUS. +- [draft-melnikov-scram-sha-512-02](https://datatracker.ietf.org/doc/html/draft-melnikov-scram-sha-512) Registers SCRAM-SHA-512 and SCRAM-SHA-512-PLUS. +- [draft-melnikov-scram-sha3-512](https://datatracker.ietf.org/doc/html/draft-melnikov-scram-sha3-512) Registers SCRAM-SHA3-512 and SCRAM-SHA3-512-PLUS. +- [RFC 5929](https://datatracker.ietf.org/doc/html/rfc5929) Channel Bindings for TLS. +- [draft-ietf-kitten-tls-channel-bindings-for-tls13](https://datatracker.ietf.org/doc/html/draft-ietf-kitten-tls-channel-bindings-for-tls13>) Defines the `tls-exporter` channel binding, which is [not yet supported by Scramp](https://github.com/tlocke/scramp/issues/9). + + +## API Docs + + +### scramp.MECHANISMS + +A tuple of the supported mechanism names. + + +### scramp.ScramClient + +`ScramClient(mechanisms, username, password, channel_binding=None, c_nonce=None)` + +Constructor of the `scramp.ScramClient` class, with the following parameters: + +- `mechanisms` - A list or tuple of mechanism names. ScramClient will choose the most secure. If `cbind_data` is `None`, the '-PLUS' variants will be filtered out first. The chosen mechanism is available as the property `mechanism_name`. +- `username` +- `password` +- `channel_binding` - Providing a value for this parameter allows channel binding to be used (ie. it lets you use mechanisms ending in '-PLUS'). The value for `channel_binding` is a tuple consisting of the channel binding name and the channel binding data. For example, if the channel binding name is `tls-unique`, the `channel_binding` parameter would be `('tls-unique', data)`, where `data` is obtained by calling [SSLSocket.get\_channel\_binding()](https://docs.python.org/3/library/ssl.html#ssl.SSLSocket.get_channel_binding). The convenience function `scramp.make_channel_binding()` can be used to create a channel binding tuple. +- `c_nonce` - The client nonce. It's sometimes useful to set this when testing / debugging, but in production this should be omitted, in which case `ScramClient` will generate a client nonce. + +The `ScramClient` object has the following methods and properties: + +- `get_client_first()` - Get the client first message. +- `set_server_first(message)` - Set the first message from the server. +- `get_client_final()` - Get the final client message. +- `set_server_final(message)` - Set the final message from the server. +- `mechanism_name` - The mechanism chosen from the list given in the constructor. + + +### scramp.ScramMechanism + +`ScramMechanism(mechanism='SCRAM-SHA-256')` + +Constructor of the `ScramMechanism` class, with the following parameter: + +- `mechanism` - The SCRAM mechanism to use. + +The `ScramMechanism` object has the following methods and properties: + +- `make_auth_info(password, iteration_count=None, salt=None)` - Returns the tuple `(salt, stored_key, server_key, iteration_count)` which is stored in the authentication database on the server side. It has the following parameters: + - `password` - The user's password as a `str`. + - `iteration_count` - The rounds as an `int`. If `None` then use the minimum associated with the mechanism. + - `salt` - It's sometimes useful to set this binary parameter when testing / debugging, but in production this should be omitted, in which case a salt will be generated. +- `make_server(auth_fn, channel_binding=None, s_nonce=None)` - returns a `ScramServer` object. It takes the following parameters: + - `auth_fn` This is a function provided by the programmer that has one parameter, a username of type `str` and returns returns the tuple `(salt, stored_key, server_key, iteration_count)`. Where `salt`, `stored_key` and `server_key` are of a binary type, and `iteration_count` is an `int`. + - `channel_binding` - Providing a value for this parameter allows channel binding to be used (ie. it lets you use mechanisms ending in `-PLUS`). The value for `channel_binding` is a tuple consisting of the channel binding name and the channel binding data. For example, if the channel binding name is 'tls-unique', the `channel_binding` parameter would be `('tls-unique', data)`, where `data` is obtained by calling [SSLSocket.get\_channel\_binding()](https://docs.python.org/3/library/ssl.html#ssl.SSLSocket.get_channel_binding>). The convenience function `scramp.make_channel_binding()` can be used to create a channel binding tuple. If `channel_binding` is provided and the mechanism isn't a `-PLUS` variant, then the server will negotiate with the client to use the `-PLUS` variant if the client supports it, or otherwise to use the mechanism without channel binding. + - `s_nonce` - The server nonce as a `str`. It's sometimes useful to set this when testing / debugging, but in production this should be omitted, in which case `ScramServer` will generate a server nonce. +- `make_stored_server_keys(salted_password)` - Returns `(stored_key, server_key)` tuple of `bytes` objects given a salted password. This is useful if you want to use a separate hashing implementation from the one provided by Scramp. It takes the following parameter: + - `salted_password` - A binary object representing the hashed password. +- `iteration_count` - The minimum iteration count recommended for this mechanism. + + +### scramp.ScramServer + +The `ScramServer` object has the following methods: + +- `set_client_first(message)` - Set the first message from the client. +- `get_server_first()` - Get the server first message. +- `set_client_final(message)` - Set the final client message. +- `get_server_final()` - Get the server final message. + + +### scramp.make\_channel\_binding(name, ssl\_socket) + +A helper function that makes a `channel_binding` tuple when given a channel binding name and an SSL socket. The parameters are: +- `name` - A channel binding name such as 'tls-unique' or 'tls-server-end-point'. +- `ssl_socket` - An instance of [ssl.SSLSocket](https://docs.python.org/3/library/ssl.html#ssl.SSLSocket). + + +## Testing + +- Activate the virtual environment: `source venv/bin/activate` +- Install `tox`: `pip install tox` +- Run `tox`: `tox` + + +## OpenSSF Scorecard + +It might be worth running the [OpenSSF Scorecard](https://securityscorecards.dev/): + +`sudo docker run -e GITHUB_AUTH_TOKEN=<auth_token> gcr.io/openssf/scorecard:stable --repo=github.com/tlocke/scramp` + + +## Doing A Release Of Scramp + +Run `tox` to make sure all tests pass, then update the release notes, then do: + +- `git tag -a x.y.z -m "version x.y.z"` +- `rm -r dist` +- `python -m build` +- `twine upload dist/*` + + +## Release Notes + +### Version 1.4.5, 2024-04-13 + +- Drop support for Python 3.7, which means we're not dependent on `importlib-metadata` anymore. +- Various changes to build system, docs and automated testing. + + +### Version 1.4.4, 2022-11-01 + +- Tighten up parsing of messages to make sure that a `ScramException` is raised if a message is malformed. + + +### Version 1.4.3, 2022-10-26 + +- The client now sends a gs2-cbind-flag of 'y' if the client supports channel binding, but thinks the server does not. + + +### Version 1.4.2, 2022-10-22 + +- Switch to using the MIT-0 licence https://choosealicense.com/licenses/mit-0/ +- When creating a ScramClient, allow non ``-PLUS`` variants, even if a `channel_binding` parameter is provided. Previously this would raise and exception. + + +### Version 1.4.1, 2021-08-25 + +- When using `make_channel_binding()` to create a tls-server-end-point channel binding, support certificates with hash algorithm of sha512. + + +### Version 1.4.0, 2021-03-28 + +- Raise an exception if the client receives an error from the server. + + +### Version 1.3.0, 2021-03-28 + +- As the specification allows, server errors are now sent to the client in the `server_final` message, an exception is still thrown as before. + + +### Version 1.2.2, 2021-02-13 + +- Fix bug in generating the AuthMessage. It was incorrect when channel binding was used. So now Scramp supports channel binding. + + +### Version 1.2.1, 2021-02-07 + +- Add support for channel binding. +- Add support for SCRAM-SHA-512 and SCRAM-SHA3-512 and their channel binding variants. + + +### Version 1.2.0, 2020-05-30 + +- This is a backwardly incompatible change on the server side, the client side will work as before. The idea of this change is to make it possible to have an authentication database. That is, the authentication information can be stored, and then retrieved when needed to authenticate the user. +- In addition, it's now possible on the server side to use a third party hashing library such as passlib as the hashing implementation. + + +### Version 1.1.1, 2020-03-28 + +- Add the README and LICENCE to the distribution. + + +### Version 1.1.0, 2019-02-24 + +- Add support for the SCRAM-SHA-1 mechanism. + + +### Version 1.0.0, 2019-02-17 + +- Implement the server side as well as the client side. + + +### Version 0.0.0, 2019-02-10 + +- Copied SCRAM implementation from [pg8000](https://github.com/tlocke/pg8000). The idea is to make it a general SCRAM implemtation. Credit to the [Scrampy](https://github.com/cagdass/scrampy) project which I read through to help with this project. Also credit to the [passlib](https://github.com/efficks/passlib) project from which I copied the `saslprep` function. diff --git a/contrib/python/scramp/README.rst b/contrib/python/scramp/README.rst deleted file mode 100644 index d9f038c070..0000000000 --- a/contrib/python/scramp/README.rst +++ /dev/null @@ -1,584 +0,0 @@ -====== -Scramp -====== - -A Python implementation of the `SCRAM authentication protocol -<https://en.wikipedia.org/wiki/Salted_Challenge_Response_Authentication_Mechanism>`_. -Scramp supports the following mechanisms: - -- SCRAM-SHA-1 -- SCRAM-SHA-1-PLUS -- SCRAM-SHA-256 -- SCRAM-SHA-256-PLUS -- SCRAM-SHA-512 -- SCRAM-SHA-512-PLUS -- SCRAM-SHA3-512 -- SCRAM-SHA3-512-PLUS - -.. contents:: Table of Contents - :depth: 2 - :local: - -Installation ------------- - -- Create a virtual environment: ``python3 -m venv venv`` -- Activate the virtual environment: ``source venv/bin/activate`` -- Install: ``pip install scramp`` - - -Examples --------- - -Client and Server -````````````````` - -Here's an example using both the client and the server. It's a bit contrived as normally -you'd be using either the client or server on its own. - ->>> from scramp import ScramClient, ScramMechanism ->>> ->>> USERNAME = 'user' ->>> PASSWORD = 'pencil' ->>> MECHANISMS = ['SCRAM-SHA-256'] ->>> ->>> ->>> # Choose a mechanism for our server ->>> m = ScramMechanism() # Default is SCRAM-SHA-256 ->>> ->>> # On the server side we create the authentication information for each user ->>> # and store it in an authentication database. We'll use a dict: ->>> db = {} ->>> ->>> salt, stored_key, server_key, iteration_count = m.make_auth_info(PASSWORD) ->>> ->>> db[USERNAME] = salt, stored_key, server_key, iteration_count ->>> ->>> # Define your own function for retrieving the authentication information ->>> # from the database given a username ->>> ->>> def auth_fn(username): -... return db[username] ->>> ->>> # Make the SCRAM server ->>> s = m.make_server(auth_fn) ->>> ->>> # Now set up the client and carry out authentication with the server ->>> c = ScramClient(MECHANISMS, USERNAME, PASSWORD) ->>> cfirst = c.get_client_first() ->>> ->>> s.set_client_first(cfirst) ->>> sfirst = s.get_server_first() ->>> ->>> c.set_server_first(sfirst) ->>> cfinal = c.get_client_final() ->>> ->>> s.set_client_final(cfinal) ->>> sfinal = s.get_server_final() ->>> ->>> c.set_server_final(sfinal) ->>> ->>> # If it all runs through without raising an exception, the authentication ->>> # has succeeded - - -Client only -``````````` - -Here's an example using just the client. The client nonce is specified in order to give -a reproducible example, but in production you'd omit the ``c_nonce`` parameter and let -``ScramClient`` generate a client nonce: - ->>> from scramp import ScramClient ->>> ->>> USERNAME = 'user' ->>> PASSWORD = 'pencil' ->>> C_NONCE = 'rOprNGfwEbeRWgbNEkqO' ->>> MECHANISMS = ['SCRAM-SHA-256'] ->>> ->>> # Normally the c_nonce would be omitted, in which case ScramClient will ->>> # generate the nonce itself. ->>> ->>> c = ScramClient(MECHANISMS, USERNAME, PASSWORD, c_nonce=C_NONCE) ->>> ->>> # Get the client first message and send it to the server ->>> cfirst = c.get_client_first() ->>> print(cfirst) -n,,n=user,r=rOprNGfwEbeRWgbNEkqO ->>> ->>> # Set the first message from the server ->>> c.set_server_first( -... 'r=rOprNGfwEbeRWgbNEkqO%hvYDpWUa2RaTCAfuxFIlj)hNlF$k0,' -... 's=W22ZaJ0SNY7soEsUEjb6gQ==,i=4096') ->>> ->>> # Get the client final message and send it to the server ->>> cfinal = c.get_client_final() ->>> print(cfinal) -c=biws,r=rOprNGfwEbeRWgbNEkqO%hvYDpWUa2RaTCAfuxFIlj)hNlF$k0,p=dHzbZapWIk4jUhN+Ute9ytag9zjfMHgsqmmiz7AndVQ= ->>> ->>> # Set the final message from the server ->>> c.set_server_final('v=6rriTRBi23WpRR/wtup+mMhUZUn/dB5nLTJRsjl95G4=') ->>> ->>> # If it all runs through without raising an exception, the authentication ->>> # has succeeded - - -Server only -``````````` - -Here's an example using just the server. The server nonce and salt is specified in order -to give a reproducible example, but in production you'd omit the ``s_nonce`` and -``salt`` parameters and let Scramp generate them: - ->>> from scramp import ScramMechanism ->>> ->>> USERNAME = 'user' ->>> PASSWORD = 'pencil' ->>> S_NONCE = '%hvYDpWUa2RaTCAfuxFIlj)hNlF$k0' ->>> SALT = b'[m\x99h\x9d\x125\x8e\xec\xa0K\x14\x126\xfa\x81' ->>> ->>> db = {} ->>> ->>> m = ScramMechanism() ->>> ->>> salt, stored_key, server_key, iteration_count = m.make_auth_info( -... PASSWORD, salt=SALT) ->>> ->>> db[USERNAME] = salt, stored_key, server_key, iteration_count ->>> ->>> # Define your own function for getting a password given a username ->>> def auth_fn(username): -... return db[username] ->>> ->>> # Normally the s_nonce parameter would be omitted, in which case the ->>> # server will generate the nonce itself. ->>> ->>> s = m.make_server(auth_fn, s_nonce=S_NONCE) ->>> ->>> # Set the first message from the client ->>> s.set_client_first('n,,n=user,r=rOprNGfwEbeRWgbNEkqO') ->>> ->>> # Get the first server message, and send it to the client ->>> sfirst = s.get_server_first() ->>> print(sfirst) -r=rOprNGfwEbeRWgbNEkqO%hvYDpWUa2RaTCAfuxFIlj)hNlF$k0,s=W22ZaJ0SNY7soEsUEjb6gQ==,i=4096 ->>> ->>> # Set the final message from the client ->>> s.set_client_final( -... 'c=biws,r=rOprNGfwEbeRWgbNEkqO%hvYDpWUa2RaTCAfuxFIlj)hNlF$k0,' -... 'p=dHzbZapWIk4jUhN+Ute9ytag9zjfMHgsqmmiz7AndVQ=') ->>> ->>> # Get the final server message and send it to the client ->>> sfinal = s.get_server_final() ->>> print(sfinal) -v=6rriTRBi23WpRR/wtup+mMhUZUn/dB5nLTJRsjl95G4= ->>> ->>> # If it all runs through without raising an exception, the authentication ->>> # has succeeded - - -Server only with passlib -```````````````````````` - -Here's an example using just the server and using the `passlib hashing library -<https://passlib.readthedocs.io/en/stable/index.html>`_. The server nonce and salt is -specified in order to give a reproducible example, but in production you'd omit the -``s_nonce`` and ``salt`` parameters and let Scramp generate them: - ->>> from scramp import ScramMechanism ->>> from passlib.hash import scram ->>> ->>> USERNAME = 'user' ->>> PASSWORD = 'pencil' ->>> S_NONCE = '%hvYDpWUa2RaTCAfuxFIlj)hNlF$k0' ->>> SALT = b'[m\x99h\x9d\x125\x8e\xec\xa0K\x14\x126\xfa\x81' ->>> ITERATION_COUNT = 4096 ->>> ->>> db = {} ->>> hash = scram.using(salt=SALT, rounds=ITERATION_COUNT).hash(PASSWORD) ->>> ->>> salt, iteration_count, digest = scram.extract_digest_info(hash, 'sha-256') ->>> ->>> stored_key, server_key = m.make_stored_server_keys(digest) ->>> ->>> db[USERNAME] = salt, stored_key, server_key, iteration_count ->>> ->>> # Define your own function for getting a password given a username ->>> def auth_fn(username): -... return db[username] ->>> ->>> # Normally the s_nonce parameter would be omitted, in which case the ->>> # server will generate the nonce itself. ->>> ->>> m = ScramMechanism() ->>> s = m.make_server(auth_fn, s_nonce=S_NONCE) ->>> ->>> # Set the first message from the client ->>> s.set_client_first('n,,n=user,r=rOprNGfwEbeRWgbNEkqO') ->>> ->>> # Get the first server message, and send it to the client ->>> sfirst = s.get_server_first() ->>> print(sfirst) -r=rOprNGfwEbeRWgbNEkqO%hvYDpWUa2RaTCAfuxFIlj)hNlF$k0,s=W22ZaJ0SNY7soEsUEjb6gQ==,i=4096 ->>> ->>> # Set the final message from the client ->>> s.set_client_final( -... 'c=biws,r=rOprNGfwEbeRWgbNEkqO%hvYDpWUa2RaTCAfuxFIlj)hNlF$k0,' -... 'p=dHzbZapWIk4jUhN+Ute9ytag9zjfMHgsqmmiz7AndVQ=') ->>> ->>> # Get the final server message and send it to the client ->>> sfinal = s.get_server_final() ->>> print(sfinal) -v=6rriTRBi23WpRR/wtup+mMhUZUn/dB5nLTJRsjl95G4= ->>> ->>> # If it all runs through without raising an exception, the authentication ->>> # has succeeded - - -Server Error -```````````` - -Here's an example of when setting a message from the client causes an error. The server -nonce and salt is specified in order to give a reproducible example, but in production -you'd omit the ``s_nonce`` and ``salt`` parameters and let Scramp generate them: - ->>> from scramp import ScramException, ScramMechanism ->>> ->>> USERNAME = 'user' ->>> PASSWORD = 'pencil' ->>> S_NONCE = '%hvYDpWUa2RaTCAfuxFIlj)hNlF$k0' ->>> SALT = b'[m\x99h\x9d\x125\x8e\xec\xa0K\x14\x126\xfa\x81' ->>> ->>> db = {} ->>> ->>> m = ScramMechanism() ->>> ->>> salt, stored_key, server_key, iteration_count = m.make_auth_info( -... PASSWORD, salt=SALT) ->>> ->>> db[USERNAME] = salt, stored_key, server_key, iteration_count ->>> ->>> # Define your own function for getting a password given a username ->>> def auth_fn(username): -... return db[username] ->>> ->>> # Normally the s_nonce parameter would be omitted, in which case the ->>> # server will generate the nonce itself. ->>> ->>> s = m.make_server(auth_fn, s_nonce=S_NONCE) ->>> ->>> try: -... # Set the first message from the client -... s.set_client_first('p=tls-unique,,n=user,r=rOprNGfwEbeRWgbNEkqO') -... except ScramException as e: -... print(e) -... # Get the final server message and send it to the client -... sfinal = s.get_server_final() -... print(sfinal) -Received GS2 flag 'p' which indicates that the client requires channel binding, but the server does not: channel-binding-not-supported -e=channel-binding-not-supported - - -Standards ---------- - -`RFC 5802 <https://tools.ietf.org/html/rfc5802>`_ - Describes SCRAM. -`RFC 7677 <https://datatracker.ietf.org/doc/html/rfc7677>`_ - Registers SCRAM-SHA-256 and SCRAM-SHA-256-PLUS. -`draft-melnikov-scram-sha-512-02 <https://datatracker.ietf.org/doc/html/draft-melnikov-scram-sha-512>`_ - Registers SCRAM-SHA-512 and SCRAM-SHA-512-PLUS. -`draft-melnikov-scram-sha3-512 <https://datatracker.ietf.org/doc/html/draft-melnikov-scram-sha3-512>`_ - Registers SCRAM-SHA3-512 and SCRAM-SHA3-512-PLUS. -`RFC 5929 <https://datatracker.ietf.org/doc/html/rfc5929>`_ - Channel Bindings for TLS. -`draft-ietf-kitten-tls-channel-bindings-for-tls13 <https://datatracker.ietf.org/doc/html/draft-ietf-kitten-tls-channel-bindings-for-tls13>`_ - Defines the ``tls-exporter`` channel binding, which is `not yet supported by Scramp - <https://github.com/tlocke/scramp/issues/9>`_. - - -API Docs --------- - - -scramp.MECHANISMS -````````````````` - -A tuple of the supported mechanism names. - - -scramp.ScramClient -`````````````````` - -``ScramClient(mechanisms, username, password, channel_binding=None, c_nonce=None)`` - Constructor of the ``ScramClient`` class, with the following parameters: - - ``mechanisms`` - A list or tuple of mechanism names. ScramClient will choose the most secure. If - ``cbind_data`` is ``None``, the '-PLUS' variants will be filtered out first. The - chosen mechanism is available as the property ``mechanism_name``. - - ``username`` - - ``password`` - - ``channel_binding`` - Providing a value for this parameter allows channel binding to be used (ie. it lets - you use mechanisms ending in '-PLUS'). The value for ``channel_binding`` is a tuple - consisting of the channel binding name and the channel binding data. For example, if - the channel binding name is ``tls-unique``, the ``channel_binding`` parameter would - be ``('tls-unique', data)``, where ``data`` is obtained by calling - `SSLSocket.get_channel_binding() - <https://docs.python.org/3/library/ssl.html#ssl.SSLSocket.get_channel_binding>`_. - The convenience function ``scramp.make_channel_binding()`` can be used to create a - channel binding tuple. - - ``c_nonce`` - The client nonce. It's sometimes useful to set this when testing / debugging, but in - production this should be omitted, in which case ``ScramClient`` will generate a - client nonce. - -The ``ScramClient`` object has the following methods and properties: - -``get_client_first()`` - Get the client first message. -``set_server_first(message)`` - Set the first message from the server. -``get_client_final()`` - Get the final client message. -``set_server_final(message)`` - Set the final message from the server. -``mechanism_name`` - The mechanism chosen from the list given in the constructor. - - -scramp.ScramMechanism -````````````````````` - -``ScramMechanism(mechanism='SCRAM-SHA-256')`` - Constructor of the ``ScramMechanism`` class, with the following parameter: - - ``mechanism`` - The SCRAM mechanism to use. - -The ``ScramMechanism`` object has the following methods and properties: - -``make_auth_info(password, iteration_count=None, salt=None)`` - returns the tuple ``(salt, stored_key, server_key, iteration_count)`` which is stored - in the authentication database on the server side. It has the following parameters: - - ``password`` - The user's password as a ``str``. - - ``iteration_count`` - The rounds as an ``int``. If ``None`` then use the minimum associated with the - mechanism. - ``salt`` - It's sometimes useful to set this binary parameter when testing / debugging, but in - production this should be omitted, in which case a salt will be generated. - -``make_server(auth_fn, channel_binding=None, s_nonce=None)`` - returns a ``ScramServer`` object. It takes the following parameters: - - ``auth_fn`` - This is a function provided by the programmer that has one parameter, a username of - type ``str`` and returns returns the tuple ``(salt, stored_key, server_key, - iteration_count)``. Where ``salt``, ``stored_key`` and ``server_key`` are of a - binary type, and ``iteration_count`` is an ``int``. - - ``channel_binding`` - Providing a value for this parameter allows channel binding to be used (ie. it lets - you use mechanisms ending in ``-PLUS``). The value for ``channel_binding`` is a - tuple consisting of the channel binding name and the channel binding data. For - example, if the channel binding name is 'tls-unique', the ``channel_binding`` - parameter would be ``('tls-unique', data)``, where ``data`` is obtained by calling - `SSLSocket.get_channel_binding() - <https://docs.python.org/3/library/ssl.html#ssl.SSLSocket.get_channel_binding>`_. - The convenience function ``scramp.make_channel_binding()`` can be used to create a - channel binding tuple. If ``channel_binding`` is provided and the mechanism isn't a - ``-PLUS`` variant, then the server will negotiate with the client to use the - ``-PLUS`` variant if the client supports it, or otherwise to use the mechanism - without channel binding. - - ``s_nonce`` - The server nonce as a ``str``. It's sometimes useful to set this when testing / - debugging, but in production this should be omitted, in which case ``ScramServer`` - will generate a server nonce. - -``make_stored_server_keys(salted_password)`` - returns ``(stored_key, server_key)`` tuple of ``bytes`` objects given a salted - password. This is useful if you want to use a separate hashing implementation from - the one provided by Scramp. It takes the following parameter: - - ``salted_password`` - A binary object representing the hashed password. - -``iteration_count`` - The minimum iteration count recommended for this mechanism. - - -scramp.ScramServer -`````````````````` - -The ``ScramServer`` object has the following methods: - -``set_client_first(message)`` - Set the first message from the client. - -``get_server_first()`` - Get the server first message. - -``set_client_final(message)`` - Set the final client message. - -``get_server_final()`` - Get the server final message. - - -scramp.make_channel_binding() -````````````````````````````` - -``make_channel_binding(name, ssl_socket)`` - A helper function that makes a ``channel_binding`` tuple when given a channel binding - name and an SSL socket. The parameters are: - - ``name`` - A channel binding name such as 'tls-unique' or 'tls-server-end-point'. - - ``ssl_socket`` - An instance of `ssl.SSLSocket - <https://docs.python.org/3/library/ssl.html#ssl.SSLSocket>`_. - - -README.rst ----------- - -This file is written in the `reStructuredText -<https://docutils.sourceforge.io/docs/user/rst/quickref.html>`_ format. To generate an -HTML page from it, do: - -- Activate the virtual environment: ``source venv/bin/activate`` -- Install ``Sphinx``: ``pip install Sphinx`` -- Run ``rst2html.py``: ``rst2html.py README.rst README.html`` - - -Testing -------- - -- Activate the virtual environment: ``source venv/bin/activate`` -- Install ``tox``: ``pip install tox`` -- Run ``tox``: ``tox`` - - -Doing A Release Of Scramp -------------------------- - -Run ``tox`` to make sure all tests pass, then update the release notes, then do:: - - git tag -a x.y.z -m "version x.y.z" - rm -r dist - python -m build - twine upload --sign dist/* - - -Release Notes -------------- - -Version 1.4.4, 2022-11-01 -````````````````````````` - -- Tighten up parsing of messages to make sure that a ``ScramException`` is raised if a - message is malformed. - - -Version 1.4.3, 2022-10-26 -````````````````````````` - -- The client now sends a gs2-cbind-flag of 'y' if the client supports channel - binding, but thinks the server does not. - - -Version 1.4.2, 2022-10-22 -````````````````````````` - -- Switch to using the MIT-0 licence https://choosealicense.com/licenses/mit-0/ - -- When creating a ScramClient, allow non ``-PLUS`` variants, even if a - ``channel_binding`` parameter is provided. Previously this would raise and - exception. - - -Version 1.4.1, 2021-08-25 -````````````````````````` - -- When using ``make_channel_binding()`` to create a tls-server-end-point channel - binding, support certificates with hash algorithm of sha512. - - -Version 1.4.0, 2021-03-28 -````````````````````````` - -- Raise an exception if the client receives an error from the server. - - -Version 1.3.0, 2021-03-28 -````````````````````````` - -- As the specification allows, server errors are now sent to the client in the - ``server_final`` message, an exception is still thrown as before. - - -Version 1.2.2, 2021-02-13 -````````````````````````` - -- Fix bug in generating the AuthMessage. It was incorrect when channel binding - was used. So now Scramp supports channel binding. - - -Version 1.2.1, 2021-02-07 -````````````````````````` - -- Add support for channel binding. - -- Add support for SCRAM-SHA-512 and SCRAM-SHA3-512 and their channel binding - variants. - - -Version 1.2.0, 2020-05-30 -````````````````````````` - -- This is a backwardly incompatible change on the server side, the client side will - work as before. The idea of this change is to make it possible to have an - authentication database. That is, the authentication information can be stored, and - then retrieved when needed to authenticate the user. - -- In addition, it's now possible on the server side to use a third party hashing library - such as passlib as the hashing implementation. - - -Version 1.1.1, 2020-03-28 -````````````````````````` - -- Add the README and LICENCE to the distribution. - - -Version 1.1.0, 2019-02-24 -````````````````````````` - -- Add support for the SCRAM-SHA-1 mechanism. - - -Version 1.0.0, 2019-02-17 -````````````````````````` - -- Implement the server side as well as the client side. - - -Version 0.0.0, 2019-02-10 -````````````````````````` - -- Copied SCRAM implementation from `pg8000 <https://github.com/tlocke/pg8000>`_. The - idea is to make it a general SCRAM implemtation. Credit to the `Scrampy - <https://github.com/cagdass/scrampy>`_ project which I read through to help with this - project. Also credit to the `passlib <https://github.com/efficks/passlib>`_ project - from which I copied the ``saslprep`` function. diff --git a/contrib/python/scramp/scramp/__init__.py b/contrib/python/scramp/scramp/__init__.py index e7a71b0eef..8bfbcd2072 100644 --- a/contrib/python/scramp/scramp/__init__.py +++ b/contrib/python/scramp/scramp/__init__.py @@ -1,3 +1,5 @@ +from importlib.metadata import version + from scramp.core import ( ScramClient, ScramException, @@ -7,9 +9,4 @@ from scramp.core import ( __all__ = [ScramClient, ScramMechanism, ScramException, make_channel_binding] -try: - from importlib.metadata import version -except ImportError: - from importlib_metadata import version - __version__ = version("scramp") diff --git a/contrib/python/scramp/scramp/core.py b/contrib/python/scramp/scramp/core.py index 0be76f59a5..6190ba922a 100644 --- a/contrib/python/scramp/scramp/core.py +++ b/contrib/python/scramp/scramp/core.py @@ -281,7 +281,6 @@ def set_error(f): class ScramServer: def __init__(self, mechanism, auth_fn, channel_binding=None, s_nonce=None): - _validate_channel_binding(channel_binding) self.channel_binding = channel_binding @@ -596,7 +595,6 @@ def _set_client_final( channel_binding, use_binding, ): - msg = _parse_message(client_final, "client final", "crp") chan_binding = msg["c"] diff --git a/contrib/python/scramp/ya.make b/contrib/python/scramp/ya.make index f2b3de220b..787e9aa7e5 100644 --- a/contrib/python/scramp/ya.make +++ b/contrib/python/scramp/ya.make @@ -2,7 +2,7 @@ PY3_LIBRARY() -VERSION(1.4.4) +VERSION(1.4.5) LICENSE(MIT-0) diff --git a/contrib/python/setuptools/py3/.dist-info/METADATA b/contrib/python/setuptools/py3/.dist-info/METADATA index 3ccc19e703..010ae0a947 100644 --- a/contrib/python/setuptools/py3/.dist-info/METADATA +++ b/contrib/python/setuptools/py3/.dist-info/METADATA @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: setuptools -Version: 69.2.0 +Version: 69.5.1 Summary: Easily download, build, install, upgrade, and uninstall Python packages Home-page: https://github.com/pypa/setuptools Author: Python Packaging Authority @@ -22,7 +22,6 @@ License-File: LICENSE Provides-Extra: certs Provides-Extra: docs Requires-Dist: sphinx >=3.5 ; extra == 'docs' -Requires-Dist: sphinx <7.2.5 ; extra == 'docs' Requires-Dist: jaraco.packaging >=9.3 ; extra == 'docs' Requires-Dist: rst.linker >=1.9 ; extra == 'docs' Requires-Dist: furo ; extra == 'docs' @@ -36,8 +35,9 @@ Requires-Dist: sphinxcontrib-towncrier ; extra == 'docs' Requires-Dist: sphinx-notfound-page <2,>=1 ; extra == 'docs' Provides-Extra: ssl Provides-Extra: testing -Requires-Dist: pytest >=6 ; extra == 'testing' +Requires-Dist: pytest !=8.1.1,>=6 ; extra == 'testing' Requires-Dist: pytest-checkdocs >=2.4 ; extra == 'testing' +Requires-Dist: pytest-mypy ; extra == 'testing' Requires-Dist: pytest-enabler >=2.2 ; extra == 'testing' Requires-Dist: virtualenv >=13.0.0 ; extra == 'testing' Requires-Dist: wheel ; extra == 'testing' @@ -68,7 +68,6 @@ Requires-Dist: build[virtualenv] >=1.0.3 ; extra == 'testing-integration' Requires-Dist: filelock >=3.4.0 ; extra == 'testing-integration' Requires-Dist: packaging >=23.2 ; extra == 'testing-integration' Requires-Dist: pytest-cov ; (platform_python_implementation != "PyPy") and extra == 'testing' -Requires-Dist: pytest-mypy >=0.9.1 ; (platform_python_implementation != "PyPy") and extra == 'testing' Requires-Dist: jaraco.develop >=7.21 ; (python_version >= "3.9" and sys_platform != "cygwin") and extra == 'testing' Requires-Dist: pytest-ruff >=0.2.1 ; (sys_platform != "cygwin") and extra == 'testing' Requires-Dist: pytest-perf ; (sys_platform != "cygwin") and extra == 'testing' diff --git a/contrib/tools/protoc_old/main.c b/contrib/python/setuptools/py3/pkg_resources/_vendor/backports/__init__.py index e69de29bb2..e69de29bb2 100644 --- a/contrib/tools/protoc_old/main.c +++ b/contrib/python/setuptools/py3/pkg_resources/_vendor/backports/__init__.py diff --git a/contrib/python/setuptools/py3/pkg_resources/_vendor/backports/tarfile.py b/contrib/python/setuptools/py3/pkg_resources/_vendor/backports/tarfile.py new file mode 100644 index 0000000000..a7a9a6e7b9 --- /dev/null +++ b/contrib/python/setuptools/py3/pkg_resources/_vendor/backports/tarfile.py @@ -0,0 +1,2900 @@ +#!/usr/bin/env python3 +#------------------------------------------------------------------- +# tarfile.py +#------------------------------------------------------------------- +# Copyright (C) 2002 Lars Gustaebel <lars@gustaebel.de> +# All rights reserved. +# +# Permission is hereby granted, free of charge, to any person +# obtaining a copy of this software and associated documentation +# files (the "Software"), to deal in the Software without +# restriction, including without limitation the rights to use, +# copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following +# conditions: +# +# The above copyright notice and this permission notice shall be +# included in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +# OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +# OTHER DEALINGS IN THE SOFTWARE. +# +"""Read from and write to tar format archives. +""" + +version = "0.9.0" +__author__ = "Lars Gust\u00e4bel (lars@gustaebel.de)" +__credits__ = "Gustavo Niemeyer, Niels Gust\u00e4bel, Richard Townsend." + +#--------- +# Imports +#--------- +from builtins import open as bltn_open +import sys +import os +import io +import shutil +import stat +import time +import struct +import copy +import re +import warnings + +try: + import pwd +except ImportError: + pwd = None +try: + import grp +except ImportError: + grp = None + +# os.symlink on Windows prior to 6.0 raises NotImplementedError +# OSError (winerror=1314) will be raised if the caller does not hold the +# SeCreateSymbolicLinkPrivilege privilege +symlink_exception = (AttributeError, NotImplementedError, OSError) + +# from tarfile import * +__all__ = ["TarFile", "TarInfo", "is_tarfile", "TarError", "ReadError", + "CompressionError", "StreamError", "ExtractError", "HeaderError", + "ENCODING", "USTAR_FORMAT", "GNU_FORMAT", "PAX_FORMAT", + "DEFAULT_FORMAT", "open","fully_trusted_filter", "data_filter", + "tar_filter", "FilterError", "AbsoluteLinkError", + "OutsideDestinationError", "SpecialFileError", "AbsolutePathError", + "LinkOutsideDestinationError"] + + +#--------------------------------------------------------- +# tar constants +#--------------------------------------------------------- +NUL = b"\0" # the null character +BLOCKSIZE = 512 # length of processing blocks +RECORDSIZE = BLOCKSIZE * 20 # length of records +GNU_MAGIC = b"ustar \0" # magic gnu tar string +POSIX_MAGIC = b"ustar\x0000" # magic posix tar string + +LENGTH_NAME = 100 # maximum length of a filename +LENGTH_LINK = 100 # maximum length of a linkname +LENGTH_PREFIX = 155 # maximum length of the prefix field + +REGTYPE = b"0" # regular file +AREGTYPE = b"\0" # regular file +LNKTYPE = b"1" # link (inside tarfile) +SYMTYPE = b"2" # symbolic link +CHRTYPE = b"3" # character special device +BLKTYPE = b"4" # block special device +DIRTYPE = b"5" # directory +FIFOTYPE = b"6" # fifo special device +CONTTYPE = b"7" # contiguous file + +GNUTYPE_LONGNAME = b"L" # GNU tar longname +GNUTYPE_LONGLINK = b"K" # GNU tar longlink +GNUTYPE_SPARSE = b"S" # GNU tar sparse file + +XHDTYPE = b"x" # POSIX.1-2001 extended header +XGLTYPE = b"g" # POSIX.1-2001 global header +SOLARIS_XHDTYPE = b"X" # Solaris extended header + +USTAR_FORMAT = 0 # POSIX.1-1988 (ustar) format +GNU_FORMAT = 1 # GNU tar format +PAX_FORMAT = 2 # POSIX.1-2001 (pax) format +DEFAULT_FORMAT = PAX_FORMAT + +#--------------------------------------------------------- +# tarfile constants +#--------------------------------------------------------- +# File types that tarfile supports: +SUPPORTED_TYPES = (REGTYPE, AREGTYPE, LNKTYPE, + SYMTYPE, DIRTYPE, FIFOTYPE, + CONTTYPE, CHRTYPE, BLKTYPE, + GNUTYPE_LONGNAME, GNUTYPE_LONGLINK, + GNUTYPE_SPARSE) + +# File types that will be treated as a regular file. +REGULAR_TYPES = (REGTYPE, AREGTYPE, + CONTTYPE, GNUTYPE_SPARSE) + +# File types that are part of the GNU tar format. +GNU_TYPES = (GNUTYPE_LONGNAME, GNUTYPE_LONGLINK, + GNUTYPE_SPARSE) + +# Fields from a pax header that override a TarInfo attribute. +PAX_FIELDS = ("path", "linkpath", "size", "mtime", + "uid", "gid", "uname", "gname") + +# Fields from a pax header that are affected by hdrcharset. +PAX_NAME_FIELDS = {"path", "linkpath", "uname", "gname"} + +# Fields in a pax header that are numbers, all other fields +# are treated as strings. +PAX_NUMBER_FIELDS = { + "atime": float, + "ctime": float, + "mtime": float, + "uid": int, + "gid": int, + "size": int +} + +#--------------------------------------------------------- +# initialization +#--------------------------------------------------------- +if os.name == "nt": + ENCODING = "utf-8" +else: + ENCODING = sys.getfilesystemencoding() + +#--------------------------------------------------------- +# Some useful functions +#--------------------------------------------------------- + +def stn(s, length, encoding, errors): + """Convert a string to a null-terminated bytes object. + """ + if s is None: + raise ValueError("metadata cannot contain None") + s = s.encode(encoding, errors) + return s[:length] + (length - len(s)) * NUL + +def nts(s, encoding, errors): + """Convert a null-terminated bytes object to a string. + """ + p = s.find(b"\0") + if p != -1: + s = s[:p] + return s.decode(encoding, errors) + +def nti(s): + """Convert a number field to a python number. + """ + # There are two possible encodings for a number field, see + # itn() below. + if s[0] in (0o200, 0o377): + n = 0 + for i in range(len(s) - 1): + n <<= 8 + n += s[i + 1] + if s[0] == 0o377: + n = -(256 ** (len(s) - 1) - n) + else: + try: + s = nts(s, "ascii", "strict") + n = int(s.strip() or "0", 8) + except ValueError: + raise InvalidHeaderError("invalid header") + return n + +def itn(n, digits=8, format=DEFAULT_FORMAT): + """Convert a python number to a number field. + """ + # POSIX 1003.1-1988 requires numbers to be encoded as a string of + # octal digits followed by a null-byte, this allows values up to + # (8**(digits-1))-1. GNU tar allows storing numbers greater than + # that if necessary. A leading 0o200 or 0o377 byte indicate this + # particular encoding, the following digits-1 bytes are a big-endian + # base-256 representation. This allows values up to (256**(digits-1))-1. + # A 0o200 byte indicates a positive number, a 0o377 byte a negative + # number. + original_n = n + n = int(n) + if 0 <= n < 8 ** (digits - 1): + s = bytes("%0*o" % (digits - 1, n), "ascii") + NUL + elif format == GNU_FORMAT and -256 ** (digits - 1) <= n < 256 ** (digits - 1): + if n >= 0: + s = bytearray([0o200]) + else: + s = bytearray([0o377]) + n = 256 ** digits + n + + for i in range(digits - 1): + s.insert(1, n & 0o377) + n >>= 8 + else: + raise ValueError("overflow in number field") + + return s + +def calc_chksums(buf): + """Calculate the checksum for a member's header by summing up all + characters except for the chksum field which is treated as if + it was filled with spaces. According to the GNU tar sources, + some tars (Sun and NeXT) calculate chksum with signed char, + which will be different if there are chars in the buffer with + the high bit set. So we calculate two checksums, unsigned and + signed. + """ + unsigned_chksum = 256 + sum(struct.unpack_from("148B8x356B", buf)) + signed_chksum = 256 + sum(struct.unpack_from("148b8x356b", buf)) + return unsigned_chksum, signed_chksum + +def copyfileobj(src, dst, length=None, exception=OSError, bufsize=None): + """Copy length bytes from fileobj src to fileobj dst. + If length is None, copy the entire content. + """ + bufsize = bufsize or 16 * 1024 + if length == 0: + return + if length is None: + shutil.copyfileobj(src, dst, bufsize) + return + + blocks, remainder = divmod(length, bufsize) + for b in range(blocks): + buf = src.read(bufsize) + if len(buf) < bufsize: + raise exception("unexpected end of data") + dst.write(buf) + + if remainder != 0: + buf = src.read(remainder) + if len(buf) < remainder: + raise exception("unexpected end of data") + dst.write(buf) + return + +def _safe_print(s): + encoding = getattr(sys.stdout, 'encoding', None) + if encoding is not None: + s = s.encode(encoding, 'backslashreplace').decode(encoding) + print(s, end=' ') + + +class TarError(Exception): + """Base exception.""" + pass +class ExtractError(TarError): + """General exception for extract errors.""" + pass +class ReadError(TarError): + """Exception for unreadable tar archives.""" + pass +class CompressionError(TarError): + """Exception for unavailable compression methods.""" + pass +class StreamError(TarError): + """Exception for unsupported operations on stream-like TarFiles.""" + pass +class HeaderError(TarError): + """Base exception for header errors.""" + pass +class EmptyHeaderError(HeaderError): + """Exception for empty headers.""" + pass +class TruncatedHeaderError(HeaderError): + """Exception for truncated headers.""" + pass +class EOFHeaderError(HeaderError): + """Exception for end of file headers.""" + pass +class InvalidHeaderError(HeaderError): + """Exception for invalid headers.""" + pass +class SubsequentHeaderError(HeaderError): + """Exception for missing and invalid extended headers.""" + pass + +#--------------------------- +# internal stream interface +#--------------------------- +class _LowLevelFile: + """Low-level file object. Supports reading and writing. + It is used instead of a regular file object for streaming + access. + """ + + def __init__(self, name, mode): + mode = { + "r": os.O_RDONLY, + "w": os.O_WRONLY | os.O_CREAT | os.O_TRUNC, + }[mode] + if hasattr(os, "O_BINARY"): + mode |= os.O_BINARY + self.fd = os.open(name, mode, 0o666) + + def close(self): + os.close(self.fd) + + def read(self, size): + return os.read(self.fd, size) + + def write(self, s): + os.write(self.fd, s) + +class _Stream: + """Class that serves as an adapter between TarFile and + a stream-like object. The stream-like object only + needs to have a read() or write() method that works with bytes, + and the method is accessed blockwise. + Use of gzip or bzip2 compression is possible. + A stream-like object could be for example: sys.stdin.buffer, + sys.stdout.buffer, a socket, a tape device etc. + + _Stream is intended to be used only internally. + """ + + def __init__(self, name, mode, comptype, fileobj, bufsize, + compresslevel): + """Construct a _Stream object. + """ + self._extfileobj = True + if fileobj is None: + fileobj = _LowLevelFile(name, mode) + self._extfileobj = False + + if comptype == '*': + # Enable transparent compression detection for the + # stream interface + fileobj = _StreamProxy(fileobj) + comptype = fileobj.getcomptype() + + self.name = name or "" + self.mode = mode + self.comptype = comptype + self.fileobj = fileobj + self.bufsize = bufsize + self.buf = b"" + self.pos = 0 + self.closed = False + + try: + if comptype == "gz": + try: + import zlib + except ImportError: + raise CompressionError("zlib module is not available") from None + self.zlib = zlib + self.crc = zlib.crc32(b"") + if mode == "r": + self.exception = zlib.error + self._init_read_gz() + else: + self._init_write_gz(compresslevel) + + elif comptype == "bz2": + try: + import bz2 + except ImportError: + raise CompressionError("bz2 module is not available") from None + if mode == "r": + self.dbuf = b"" + self.cmp = bz2.BZ2Decompressor() + self.exception = OSError + else: + self.cmp = bz2.BZ2Compressor(compresslevel) + + elif comptype == "xz": + try: + import lzma + except ImportError: + raise CompressionError("lzma module is not available") from None + if mode == "r": + self.dbuf = b"" + self.cmp = lzma.LZMADecompressor() + self.exception = lzma.LZMAError + else: + self.cmp = lzma.LZMACompressor() + + elif comptype != "tar": + raise CompressionError("unknown compression type %r" % comptype) + + except: + if not self._extfileobj: + self.fileobj.close() + self.closed = True + raise + + def __del__(self): + if hasattr(self, "closed") and not self.closed: + self.close() + + def _init_write_gz(self, compresslevel): + """Initialize for writing with gzip compression. + """ + self.cmp = self.zlib.compressobj(compresslevel, + self.zlib.DEFLATED, + -self.zlib.MAX_WBITS, + self.zlib.DEF_MEM_LEVEL, + 0) + timestamp = struct.pack("<L", int(time.time())) + self.__write(b"\037\213\010\010" + timestamp + b"\002\377") + if self.name.endswith(".gz"): + self.name = self.name[:-3] + # Honor "directory components removed" from RFC1952 + self.name = os.path.basename(self.name) + # RFC1952 says we must use ISO-8859-1 for the FNAME field. + self.__write(self.name.encode("iso-8859-1", "replace") + NUL) + + def write(self, s): + """Write string s to the stream. + """ + if self.comptype == "gz": + self.crc = self.zlib.crc32(s, self.crc) + self.pos += len(s) + if self.comptype != "tar": + s = self.cmp.compress(s) + self.__write(s) + + def __write(self, s): + """Write string s to the stream if a whole new block + is ready to be written. + """ + self.buf += s + while len(self.buf) > self.bufsize: + self.fileobj.write(self.buf[:self.bufsize]) + self.buf = self.buf[self.bufsize:] + + def close(self): + """Close the _Stream object. No operation should be + done on it afterwards. + """ + if self.closed: + return + + self.closed = True + try: + if self.mode == "w" and self.comptype != "tar": + self.buf += self.cmp.flush() + + if self.mode == "w" and self.buf: + self.fileobj.write(self.buf) + self.buf = b"" + if self.comptype == "gz": + self.fileobj.write(struct.pack("<L", self.crc)) + self.fileobj.write(struct.pack("<L", self.pos & 0xffffFFFF)) + finally: + if not self._extfileobj: + self.fileobj.close() + + def _init_read_gz(self): + """Initialize for reading a gzip compressed fileobj. + """ + self.cmp = self.zlib.decompressobj(-self.zlib.MAX_WBITS) + self.dbuf = b"" + + # taken from gzip.GzipFile with some alterations + if self.__read(2) != b"\037\213": + raise ReadError("not a gzip file") + if self.__read(1) != b"\010": + raise CompressionError("unsupported compression method") + + flag = ord(self.__read(1)) + self.__read(6) + + if flag & 4: + xlen = ord(self.__read(1)) + 256 * ord(self.__read(1)) + self.read(xlen) + if flag & 8: + while True: + s = self.__read(1) + if not s or s == NUL: + break + if flag & 16: + while True: + s = self.__read(1) + if not s or s == NUL: + break + if flag & 2: + self.__read(2) + + def tell(self): + """Return the stream's file pointer position. + """ + return self.pos + + def seek(self, pos=0): + """Set the stream's file pointer to pos. Negative seeking + is forbidden. + """ + if pos - self.pos >= 0: + blocks, remainder = divmod(pos - self.pos, self.bufsize) + for i in range(blocks): + self.read(self.bufsize) + self.read(remainder) + else: + raise StreamError("seeking backwards is not allowed") + return self.pos + + def read(self, size): + """Return the next size number of bytes from the stream.""" + assert size is not None + buf = self._read(size) + self.pos += len(buf) + return buf + + def _read(self, size): + """Return size bytes from the stream. + """ + if self.comptype == "tar": + return self.__read(size) + + c = len(self.dbuf) + t = [self.dbuf] + while c < size: + # Skip underlying buffer to avoid unaligned double buffering. + if self.buf: + buf = self.buf + self.buf = b"" + else: + buf = self.fileobj.read(self.bufsize) + if not buf: + break + try: + buf = self.cmp.decompress(buf) + except self.exception as e: + raise ReadError("invalid compressed data") from e + t.append(buf) + c += len(buf) + t = b"".join(t) + self.dbuf = t[size:] + return t[:size] + + def __read(self, size): + """Return size bytes from stream. If internal buffer is empty, + read another block from the stream. + """ + c = len(self.buf) + t = [self.buf] + while c < size: + buf = self.fileobj.read(self.bufsize) + if not buf: + break + t.append(buf) + c += len(buf) + t = b"".join(t) + self.buf = t[size:] + return t[:size] +# class _Stream + +class _StreamProxy(object): + """Small proxy class that enables transparent compression + detection for the Stream interface (mode 'r|*'). + """ + + def __init__(self, fileobj): + self.fileobj = fileobj + self.buf = self.fileobj.read(BLOCKSIZE) + + def read(self, size): + self.read = self.fileobj.read + return self.buf + + def getcomptype(self): + if self.buf.startswith(b"\x1f\x8b\x08"): + return "gz" + elif self.buf[0:3] == b"BZh" and self.buf[4:10] == b"1AY&SY": + return "bz2" + elif self.buf.startswith((b"\x5d\x00\x00\x80", b"\xfd7zXZ")): + return "xz" + else: + return "tar" + + def close(self): + self.fileobj.close() +# class StreamProxy + +#------------------------ +# Extraction file object +#------------------------ +class _FileInFile(object): + """A thin wrapper around an existing file object that + provides a part of its data as an individual file + object. + """ + + def __init__(self, fileobj, offset, size, name, blockinfo=None): + self.fileobj = fileobj + self.offset = offset + self.size = size + self.position = 0 + self.name = name + self.closed = False + + if blockinfo is None: + blockinfo = [(0, size)] + + # Construct a map with data and zero blocks. + self.map_index = 0 + self.map = [] + lastpos = 0 + realpos = self.offset + for offset, size in blockinfo: + if offset > lastpos: + self.map.append((False, lastpos, offset, None)) + self.map.append((True, offset, offset + size, realpos)) + realpos += size + lastpos = offset + size + if lastpos < self.size: + self.map.append((False, lastpos, self.size, None)) + + def flush(self): + pass + + def readable(self): + return True + + def writable(self): + return False + + def seekable(self): + return self.fileobj.seekable() + + def tell(self): + """Return the current file position. + """ + return self.position + + def seek(self, position, whence=io.SEEK_SET): + """Seek to a position in the file. + """ + if whence == io.SEEK_SET: + self.position = min(max(position, 0), self.size) + elif whence == io.SEEK_CUR: + if position < 0: + self.position = max(self.position + position, 0) + else: + self.position = min(self.position + position, self.size) + elif whence == io.SEEK_END: + self.position = max(min(self.size + position, self.size), 0) + else: + raise ValueError("Invalid argument") + return self.position + + def read(self, size=None): + """Read data from the file. + """ + if size is None: + size = self.size - self.position + else: + size = min(size, self.size - self.position) + + buf = b"" + while size > 0: + while True: + data, start, stop, offset = self.map[self.map_index] + if start <= self.position < stop: + break + else: + self.map_index += 1 + if self.map_index == len(self.map): + self.map_index = 0 + length = min(size, stop - self.position) + if data: + self.fileobj.seek(offset + (self.position - start)) + b = self.fileobj.read(length) + if len(b) != length: + raise ReadError("unexpected end of data") + buf += b + else: + buf += NUL * length + size -= length + self.position += length + return buf + + def readinto(self, b): + buf = self.read(len(b)) + b[:len(buf)] = buf + return len(buf) + + def close(self): + self.closed = True +#class _FileInFile + +class ExFileObject(io.BufferedReader): + + def __init__(self, tarfile, tarinfo): + fileobj = _FileInFile(tarfile.fileobj, tarinfo.offset_data, + tarinfo.size, tarinfo.name, tarinfo.sparse) + super().__init__(fileobj) +#class ExFileObject + + +#----------------------------- +# extraction filters (PEP 706) +#----------------------------- + +class FilterError(TarError): + pass + +class AbsolutePathError(FilterError): + def __init__(self, tarinfo): + self.tarinfo = tarinfo + super().__init__(f'member {tarinfo.name!r} has an absolute path') + +class OutsideDestinationError(FilterError): + def __init__(self, tarinfo, path): + self.tarinfo = tarinfo + self._path = path + super().__init__(f'{tarinfo.name!r} would be extracted to {path!r}, ' + + 'which is outside the destination') + +class SpecialFileError(FilterError): + def __init__(self, tarinfo): + self.tarinfo = tarinfo + super().__init__(f'{tarinfo.name!r} is a special file') + +class AbsoluteLinkError(FilterError): + def __init__(self, tarinfo): + self.tarinfo = tarinfo + super().__init__(f'{tarinfo.name!r} is a link to an absolute path') + +class LinkOutsideDestinationError(FilterError): + def __init__(self, tarinfo, path): + self.tarinfo = tarinfo + self._path = path + super().__init__(f'{tarinfo.name!r} would link to {path!r}, ' + + 'which is outside the destination') + +def _get_filtered_attrs(member, dest_path, for_data=True): + new_attrs = {} + name = member.name + dest_path = os.path.realpath(dest_path) + # Strip leading / (tar's directory separator) from filenames. + # Include os.sep (target OS directory separator) as well. + if name.startswith(('/', os.sep)): + name = new_attrs['name'] = member.path.lstrip('/' + os.sep) + if os.path.isabs(name): + # Path is absolute even after stripping. + # For example, 'C:/foo' on Windows. + raise AbsolutePathError(member) + # Ensure we stay in the destination + target_path = os.path.realpath(os.path.join(dest_path, name)) + if os.path.commonpath([target_path, dest_path]) != dest_path: + raise OutsideDestinationError(member, target_path) + # Limit permissions (no high bits, and go-w) + mode = member.mode + if mode is not None: + # Strip high bits & group/other write bits + mode = mode & 0o755 + if for_data: + # For data, handle permissions & file types + if member.isreg() or member.islnk(): + if not mode & 0o100: + # Clear executable bits if not executable by user + mode &= ~0o111 + # Ensure owner can read & write + mode |= 0o600 + elif member.isdir() or member.issym(): + # Ignore mode for directories & symlinks + mode = None + else: + # Reject special files + raise SpecialFileError(member) + if mode != member.mode: + new_attrs['mode'] = mode + if for_data: + # Ignore ownership for 'data' + if member.uid is not None: + new_attrs['uid'] = None + if member.gid is not None: + new_attrs['gid'] = None + if member.uname is not None: + new_attrs['uname'] = None + if member.gname is not None: + new_attrs['gname'] = None + # Check link destination for 'data' + if member.islnk() or member.issym(): + if os.path.isabs(member.linkname): + raise AbsoluteLinkError(member) + if member.issym(): + target_path = os.path.join(dest_path, + os.path.dirname(name), + member.linkname) + else: + target_path = os.path.join(dest_path, + member.linkname) + target_path = os.path.realpath(target_path) + if os.path.commonpath([target_path, dest_path]) != dest_path: + raise LinkOutsideDestinationError(member, target_path) + return new_attrs + +def fully_trusted_filter(member, dest_path): + return member + +def tar_filter(member, dest_path): + new_attrs = _get_filtered_attrs(member, dest_path, False) + if new_attrs: + return member.replace(**new_attrs, deep=False) + return member + +def data_filter(member, dest_path): + new_attrs = _get_filtered_attrs(member, dest_path, True) + if new_attrs: + return member.replace(**new_attrs, deep=False) + return member + +_NAMED_FILTERS = { + "fully_trusted": fully_trusted_filter, + "tar": tar_filter, + "data": data_filter, +} + +#------------------ +# Exported Classes +#------------------ + +# Sentinel for replace() defaults, meaning "don't change the attribute" +_KEEP = object() + +class TarInfo(object): + """Informational class which holds the details about an + archive member given by a tar header block. + TarInfo objects are returned by TarFile.getmember(), + TarFile.getmembers() and TarFile.gettarinfo() and are + usually created internally. + """ + + __slots__ = dict( + name = 'Name of the archive member.', + mode = 'Permission bits.', + uid = 'User ID of the user who originally stored this member.', + gid = 'Group ID of the user who originally stored this member.', + 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.'), + linkname = ('Name of the target file name, which is only present ' + 'in TarInfo objects of type LNKTYPE and SYMTYPE.'), + uname = 'User name.', + gname = 'Group name.', + devmajor = 'Device major number.', + devminor = 'Device minor number.', + 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.'), + sparse = 'Sparse member information.', + tarfile = None, + _sparse_structs = None, + _link_target = None, + ) + + def __init__(self, name=""): + """Construct a TarInfo object. name is the optional name + of the member. + """ + self.name = name # member name + self.mode = 0o644 # file permissions + self.uid = 0 # user id + self.gid = 0 # group id + self.size = 0 # file size + self.mtime = 0 # modification time + self.chksum = 0 # header checksum + self.type = REGTYPE # member type + self.linkname = "" # link name + self.uname = "" # user name + self.gname = "" # group name + self.devmajor = 0 # device major number + self.devminor = 0 # device minor number + + self.offset = 0 # the tar header starts here + self.offset_data = 0 # the file's data starts here + + self.sparse = None # sparse member information + self.pax_headers = {} # pax header information + + @property + def path(self): + 'In pax headers, "name" is called "path".' + return self.name + + @path.setter + def path(self, name): + self.name = name + + @property + def linkpath(self): + 'In pax headers, "linkname" is called "linkpath".' + return self.linkname + + @linkpath.setter + def linkpath(self, linkname): + self.linkname = linkname + + def __repr__(self): + return "<%s %r at %#x>" % (self.__class__.__name__,self.name,id(self)) + + def replace(self, *, + name=_KEEP, mtime=_KEEP, mode=_KEEP, linkname=_KEEP, + uid=_KEEP, gid=_KEEP, uname=_KEEP, gname=_KEEP, + deep=True, _KEEP=_KEEP): + """Return a deep copy of self with the given attributes replaced. + """ + if deep: + result = copy.deepcopy(self) + else: + result = copy.copy(self) + if name is not _KEEP: + result.name = name + if mtime is not _KEEP: + result.mtime = mtime + if mode is not _KEEP: + result.mode = mode + if linkname is not _KEEP: + result.linkname = linkname + if uid is not _KEEP: + result.uid = uid + if gid is not _KEEP: + result.gid = gid + if uname is not _KEEP: + result.uname = uname + if gname is not _KEEP: + result.gname = gname + return result + + def get_info(self): + """Return the TarInfo's attributes as a dictionary. + """ + if self.mode is None: + mode = None + else: + mode = self.mode & 0o7777 + info = { + "name": self.name, + "mode": mode, + "uid": self.uid, + "gid": self.gid, + "size": self.size, + "mtime": self.mtime, + "chksum": self.chksum, + "type": self.type, + "linkname": self.linkname, + "uname": self.uname, + "gname": self.gname, + "devmajor": self.devmajor, + "devminor": self.devminor + } + + if info["type"] == DIRTYPE and not info["name"].endswith("/"): + info["name"] += "/" + + return info + + def tobuf(self, format=DEFAULT_FORMAT, encoding=ENCODING, errors="surrogateescape"): + """Return a tar header as a string of 512 byte blocks. + """ + info = self.get_info() + for name, value in info.items(): + if value is None: + raise ValueError("%s may not be None" % name) + + if format == USTAR_FORMAT: + return self.create_ustar_header(info, encoding, errors) + elif format == GNU_FORMAT: + return self.create_gnu_header(info, encoding, errors) + elif format == PAX_FORMAT: + return self.create_pax_header(info, encoding) + else: + raise ValueError("invalid format") + + def create_ustar_header(self, info, encoding, errors): + """Return the object as a ustar header block. + """ + info["magic"] = POSIX_MAGIC + + if len(info["linkname"].encode(encoding, errors)) > LENGTH_LINK: + raise ValueError("linkname is too long") + + if len(info["name"].encode(encoding, errors)) > LENGTH_NAME: + info["prefix"], info["name"] = self._posix_split_name(info["name"], encoding, errors) + + return self._create_header(info, USTAR_FORMAT, encoding, errors) + + def create_gnu_header(self, info, encoding, errors): + """Return the object as a GNU header block sequence. + """ + info["magic"] = GNU_MAGIC + + buf = b"" + if len(info["linkname"].encode(encoding, errors)) > LENGTH_LINK: + buf += self._create_gnu_long_header(info["linkname"], GNUTYPE_LONGLINK, encoding, errors) + + if len(info["name"].encode(encoding, errors)) > LENGTH_NAME: + buf += self._create_gnu_long_header(info["name"], GNUTYPE_LONGNAME, encoding, errors) + + return buf + self._create_header(info, GNU_FORMAT, encoding, errors) + + def create_pax_header(self, info, encoding): + """Return the object as a ustar header block. If it cannot be + represented this way, prepend a pax extended header sequence + with supplement information. + """ + info["magic"] = POSIX_MAGIC + pax_headers = self.pax_headers.copy() + + # Test string fields for values that exceed the field length or cannot + # be represented in ASCII encoding. + for name, hname, length in ( + ("name", "path", LENGTH_NAME), ("linkname", "linkpath", LENGTH_LINK), + ("uname", "uname", 32), ("gname", "gname", 32)): + + if hname in pax_headers: + # The pax header has priority. + continue + + # Try to encode the string as ASCII. + try: + info[name].encode("ascii", "strict") + except UnicodeEncodeError: + pax_headers[hname] = info[name] + continue + + if len(info[name]) > length: + pax_headers[hname] = info[name] + + # Test number fields for values that exceed the field limit or values + # that like to be stored as float. + for name, digits in (("uid", 8), ("gid", 8), ("size", 12), ("mtime", 12)): + needs_pax = False + + val = info[name] + val_is_float = isinstance(val, float) + val_int = round(val) if val_is_float else val + if not 0 <= val_int < 8 ** (digits - 1): + # Avoid overflow. + info[name] = 0 + needs_pax = True + elif val_is_float: + # Put rounded value in ustar header, and full + # precision value in pax header. + info[name] = val_int + needs_pax = True + + # The existing pax header has priority. + if needs_pax and name not in pax_headers: + pax_headers[name] = str(val) + + # Create a pax extended header if necessary. + if pax_headers: + buf = self._create_pax_generic_header(pax_headers, XHDTYPE, encoding) + else: + buf = b"" + + return buf + self._create_header(info, USTAR_FORMAT, "ascii", "replace") + + @classmethod + def create_pax_global_header(cls, pax_headers): + """Return the object as a pax global header block sequence. + """ + return cls._create_pax_generic_header(pax_headers, XGLTYPE, "utf-8") + + def _posix_split_name(self, name, encoding, errors): + """Split a name longer than 100 chars into a prefix + and a name part. + """ + components = name.split("/") + for i in range(1, len(components)): + prefix = "/".join(components[:i]) + name = "/".join(components[i:]) + if len(prefix.encode(encoding, errors)) <= LENGTH_PREFIX and \ + len(name.encode(encoding, errors)) <= LENGTH_NAME: + break + else: + raise ValueError("name is too long") + + return prefix, name + + @staticmethod + def _create_header(info, format, encoding, errors): + """Return a header block. info is a dictionary with file + information, format must be one of the *_FORMAT constants. + """ + has_device_fields = info.get("type") in (CHRTYPE, BLKTYPE) + if has_device_fields: + devmajor = itn(info.get("devmajor", 0), 8, format) + devminor = itn(info.get("devminor", 0), 8, format) + else: + devmajor = stn("", 8, encoding, errors) + devminor = stn("", 8, encoding, errors) + + # None values in metadata should cause ValueError. + # itn()/stn() do this for all fields except type. + filetype = info.get("type", REGTYPE) + if filetype is None: + raise ValueError("TarInfo.type must not be None") + + parts = [ + stn(info.get("name", ""), 100, encoding, errors), + itn(info.get("mode", 0) & 0o7777, 8, format), + itn(info.get("uid", 0), 8, format), + itn(info.get("gid", 0), 8, format), + itn(info.get("size", 0), 12, format), + itn(info.get("mtime", 0), 12, format), + b" ", # checksum field + filetype, + stn(info.get("linkname", ""), 100, encoding, errors), + info.get("magic", POSIX_MAGIC), + stn(info.get("uname", ""), 32, encoding, errors), + stn(info.get("gname", ""), 32, encoding, errors), + devmajor, + devminor, + stn(info.get("prefix", ""), 155, encoding, errors) + ] + + buf = struct.pack("%ds" % BLOCKSIZE, b"".join(parts)) + chksum = calc_chksums(buf[-BLOCKSIZE:])[0] + buf = buf[:-364] + bytes("%06o\0" % chksum, "ascii") + buf[-357:] + return buf + + @staticmethod + def _create_payload(payload): + """Return the string payload filled with zero bytes + up to the next 512 byte border. + """ + blocks, remainder = divmod(len(payload), BLOCKSIZE) + if remainder > 0: + payload += (BLOCKSIZE - remainder) * NUL + return payload + + @classmethod + def _create_gnu_long_header(cls, name, type, encoding, errors): + """Return a GNUTYPE_LONGNAME or GNUTYPE_LONGLINK sequence + for name. + """ + name = name.encode(encoding, errors) + NUL + + info = {} + info["name"] = "././@LongLink" + info["type"] = type + info["size"] = len(name) + info["magic"] = GNU_MAGIC + + # create extended header + name blocks. + return cls._create_header(info, USTAR_FORMAT, encoding, errors) + \ + cls._create_payload(name) + + @classmethod + def _create_pax_generic_header(cls, pax_headers, type, encoding): + """Return a POSIX.1-2008 extended or global header sequence + that contains a list of keyword, value pairs. The values + must be strings. + """ + # Check if one of the fields contains surrogate characters and thereby + # forces hdrcharset=BINARY, see _proc_pax() for more information. + binary = False + for keyword, value in pax_headers.items(): + try: + value.encode("utf-8", "strict") + except UnicodeEncodeError: + binary = True + break + + records = b"" + if binary: + # Put the hdrcharset field at the beginning of the header. + records += b"21 hdrcharset=BINARY\n" + + for keyword, value in pax_headers.items(): + keyword = keyword.encode("utf-8") + if binary: + # Try to restore the original byte representation of `value'. + # Needless to say, that the encoding must match the string. + value = value.encode(encoding, "surrogateescape") + else: + value = value.encode("utf-8") + + l = len(keyword) + len(value) + 3 # ' ' + '=' + '\n' + n = p = 0 + while True: + n = l + len(str(p)) + if n == p: + break + p = n + records += bytes(str(p), "ascii") + b" " + keyword + b"=" + value + b"\n" + + # We use a hardcoded "././@PaxHeader" name like star does + # instead of the one that POSIX recommends. + info = {} + info["name"] = "././@PaxHeader" + info["type"] = type + info["size"] = len(records) + info["magic"] = POSIX_MAGIC + + # Create pax header + record blocks. + return cls._create_header(info, USTAR_FORMAT, "ascii", "replace") + \ + cls._create_payload(records) + + @classmethod + def frombuf(cls, buf, encoding, errors): + """Construct a TarInfo object from a 512 byte bytes object. + """ + if len(buf) == 0: + raise EmptyHeaderError("empty header") + if len(buf) != BLOCKSIZE: + raise TruncatedHeaderError("truncated header") + if buf.count(NUL) == BLOCKSIZE: + raise EOFHeaderError("end of file header") + + chksum = nti(buf[148:156]) + if chksum not in calc_chksums(buf): + raise InvalidHeaderError("bad checksum") + + obj = cls() + obj.name = nts(buf[0:100], encoding, errors) + obj.mode = nti(buf[100:108]) + obj.uid = nti(buf[108:116]) + obj.gid = nti(buf[116:124]) + obj.size = nti(buf[124:136]) + obj.mtime = nti(buf[136:148]) + obj.chksum = chksum + obj.type = buf[156:157] + obj.linkname = nts(buf[157:257], encoding, errors) + obj.uname = nts(buf[265:297], encoding, errors) + obj.gname = nts(buf[297:329], encoding, errors) + obj.devmajor = nti(buf[329:337]) + obj.devminor = nti(buf[337:345]) + prefix = nts(buf[345:500], encoding, errors) + + # Old V7 tar format represents a directory as a regular + # file with a trailing slash. + if obj.type == AREGTYPE and obj.name.endswith("/"): + obj.type = DIRTYPE + + # The old GNU sparse format occupies some of the unused + # space in the buffer for up to 4 sparse structures. + # Save them for later processing in _proc_sparse(). + if obj.type == GNUTYPE_SPARSE: + pos = 386 + structs = [] + for i in range(4): + try: + offset = nti(buf[pos:pos + 12]) + numbytes = nti(buf[pos + 12:pos + 24]) + except ValueError: + break + structs.append((offset, numbytes)) + pos += 24 + isextended = bool(buf[482]) + origsize = nti(buf[483:495]) + obj._sparse_structs = (structs, isextended, origsize) + + # Remove redundant slashes from directories. + if obj.isdir(): + obj.name = obj.name.rstrip("/") + + # Reconstruct a ustar longname. + if prefix and obj.type not in GNU_TYPES: + obj.name = prefix + "/" + obj.name + return obj + + @classmethod + def fromtarfile(cls, tarfile): + """Return the next TarInfo object from TarFile object + tarfile. + """ + buf = tarfile.fileobj.read(BLOCKSIZE) + obj = cls.frombuf(buf, tarfile.encoding, tarfile.errors) + obj.offset = tarfile.fileobj.tell() - BLOCKSIZE + return obj._proc_member(tarfile) + + #-------------------------------------------------------------------------- + # The following are methods that are called depending on the type of a + # member. The entry point is _proc_member() which can be overridden in a + # subclass to add custom _proc_*() methods. A _proc_*() method MUST + # implement the following + # operations: + # 1. Set self.offset_data to the position where the data blocks begin, + # if there is data that follows. + # 2. Set tarfile.offset to the position where the next member's header will + # begin. + # 3. Return self or another valid TarInfo object. + def _proc_member(self, tarfile): + """Choose the right processing method depending on + the type and call it. + """ + if self.type in (GNUTYPE_LONGNAME, GNUTYPE_LONGLINK): + return self._proc_gnulong(tarfile) + elif self.type == GNUTYPE_SPARSE: + return self._proc_sparse(tarfile) + elif self.type in (XHDTYPE, XGLTYPE, SOLARIS_XHDTYPE): + return self._proc_pax(tarfile) + else: + return self._proc_builtin(tarfile) + + def _proc_builtin(self, tarfile): + """Process a builtin type or an unknown type which + will be treated as a regular file. + """ + self.offset_data = tarfile.fileobj.tell() + offset = self.offset_data + if self.isreg() or self.type not in SUPPORTED_TYPES: + # Skip the following data blocks. + offset += self._block(self.size) + tarfile.offset = offset + + # Patch the TarInfo object with saved global + # header information. + self._apply_pax_info(tarfile.pax_headers, tarfile.encoding, tarfile.errors) + + # Remove redundant slashes from directories. This is to be consistent + # with frombuf(). + if self.isdir(): + self.name = self.name.rstrip("/") + + return self + + def _proc_gnulong(self, tarfile): + """Process the blocks that hold a GNU longname + or longlink member. + """ + buf = tarfile.fileobj.read(self._block(self.size)) + + # Fetch the next header and process it. + try: + next = self.fromtarfile(tarfile) + except HeaderError as e: + raise SubsequentHeaderError(str(e)) from None + + # Patch the TarInfo object from the next header with + # the longname information. + next.offset = self.offset + if self.type == GNUTYPE_LONGNAME: + next.name = nts(buf, tarfile.encoding, tarfile.errors) + elif self.type == GNUTYPE_LONGLINK: + next.linkname = nts(buf, tarfile.encoding, tarfile.errors) + + # Remove redundant slashes from directories. This is to be consistent + # with frombuf(). + if next.isdir(): + next.name = next.name.removesuffix("/") + + return next + + def _proc_sparse(self, tarfile): + """Process a GNU sparse header plus extra headers. + """ + # We already collected some sparse structures in frombuf(). + structs, isextended, origsize = self._sparse_structs + del self._sparse_structs + + # Collect sparse structures from extended header blocks. + while isextended: + buf = tarfile.fileobj.read(BLOCKSIZE) + pos = 0 + for i in range(21): + try: + offset = nti(buf[pos:pos + 12]) + numbytes = nti(buf[pos + 12:pos + 24]) + except ValueError: + break + if offset and numbytes: + structs.append((offset, numbytes)) + pos += 24 + isextended = bool(buf[504]) + self.sparse = structs + + self.offset_data = tarfile.fileobj.tell() + tarfile.offset = self.offset_data + self._block(self.size) + self.size = origsize + return self + + def _proc_pax(self, tarfile): + """Process an extended or global header as described in + POSIX.1-2008. + """ + # Read the header information. + buf = tarfile.fileobj.read(self._block(self.size)) + + # A pax header stores supplemental information for either + # the following file (extended) or all following files + # (global). + if self.type == XGLTYPE: + pax_headers = tarfile.pax_headers + else: + pax_headers = tarfile.pax_headers.copy() + + # Check if the pax header contains a hdrcharset field. This tells us + # the encoding of the path, linkpath, uname and gname fields. Normally, + # these fields are UTF-8 encoded but since POSIX.1-2008 tar + # implementations are allowed to store them as raw binary strings if + # the translation to UTF-8 fails. + match = re.search(br"\d+ hdrcharset=([^\n]+)\n", buf) + if match is not None: + pax_headers["hdrcharset"] = match.group(1).decode("utf-8") + + # For the time being, we don't care about anything other than "BINARY". + # The only other value that is currently allowed by the standard is + # "ISO-IR 10646 2000 UTF-8" in other words UTF-8. + hdrcharset = pax_headers.get("hdrcharset") + if hdrcharset == "BINARY": + encoding = tarfile.encoding + else: + encoding = "utf-8" + + # Parse pax header information. A record looks like that: + # "%d %s=%s\n" % (length, keyword, value). length is the size + # of the complete record including the length field itself and + # the newline. keyword and value are both UTF-8 encoded strings. + regex = re.compile(br"(\d+) ([^=]+)=") + pos = 0 + while match := regex.match(buf, pos): + length, keyword = match.groups() + length = int(length) + if length == 0: + raise InvalidHeaderError("invalid header") + value = buf[match.end(2) + 1:match.start(1) + length - 1] + + # Normally, we could just use "utf-8" as the encoding and "strict" + # as the error handler, but we better not take the risk. For + # example, GNU tar <= 1.23 is known to store filenames it cannot + # translate to UTF-8 as raw strings (unfortunately without a + # hdrcharset=BINARY header). + # We first try the strict standard encoding, and if that fails we + # fall back on the user's encoding and error handler. + keyword = self._decode_pax_field(keyword, "utf-8", "utf-8", + tarfile.errors) + if keyword in PAX_NAME_FIELDS: + value = self._decode_pax_field(value, encoding, tarfile.encoding, + tarfile.errors) + else: + value = self._decode_pax_field(value, "utf-8", "utf-8", + tarfile.errors) + + pax_headers[keyword] = value + pos += length + + # Fetch the next header. + try: + next = self.fromtarfile(tarfile) + except HeaderError as e: + raise SubsequentHeaderError(str(e)) from None + + # Process GNU sparse information. + if "GNU.sparse.map" in pax_headers: + # GNU extended sparse format version 0.1. + self._proc_gnusparse_01(next, pax_headers) + + elif "GNU.sparse.size" in pax_headers: + # GNU extended sparse format version 0.0. + self._proc_gnusparse_00(next, pax_headers, buf) + + elif pax_headers.get("GNU.sparse.major") == "1" and pax_headers.get("GNU.sparse.minor") == "0": + # GNU extended sparse format version 1.0. + self._proc_gnusparse_10(next, pax_headers, tarfile) + + if self.type in (XHDTYPE, SOLARIS_XHDTYPE): + # Patch the TarInfo object with the extended header info. + next._apply_pax_info(pax_headers, tarfile.encoding, tarfile.errors) + next.offset = self.offset + + if "size" in pax_headers: + # If the extended header replaces the size field, + # we need to recalculate the offset where the next + # header starts. + offset = next.offset_data + if next.isreg() or next.type not in SUPPORTED_TYPES: + offset += next._block(next.size) + tarfile.offset = offset + + return next + + def _proc_gnusparse_00(self, next, pax_headers, buf): + """Process a GNU tar extended sparse header, version 0.0. + """ + offsets = [] + for match in re.finditer(br"\d+ GNU.sparse.offset=(\d+)\n", buf): + offsets.append(int(match.group(1))) + numbytes = [] + for match in re.finditer(br"\d+ GNU.sparse.numbytes=(\d+)\n", buf): + numbytes.append(int(match.group(1))) + next.sparse = list(zip(offsets, numbytes)) + + def _proc_gnusparse_01(self, next, pax_headers): + """Process a GNU tar extended sparse header, version 0.1. + """ + sparse = [int(x) for x in pax_headers["GNU.sparse.map"].split(",")] + next.sparse = list(zip(sparse[::2], sparse[1::2])) + + def _proc_gnusparse_10(self, next, pax_headers, tarfile): + """Process a GNU tar extended sparse header, version 1.0. + """ + fields = None + sparse = [] + buf = tarfile.fileobj.read(BLOCKSIZE) + fields, buf = buf.split(b"\n", 1) + fields = int(fields) + while len(sparse) < fields * 2: + if b"\n" not in buf: + buf += tarfile.fileobj.read(BLOCKSIZE) + number, buf = buf.split(b"\n", 1) + sparse.append(int(number)) + next.offset_data = tarfile.fileobj.tell() + next.sparse = list(zip(sparse[::2], sparse[1::2])) + + def _apply_pax_info(self, pax_headers, encoding, errors): + """Replace fields with supplemental information from a previous + pax extended or global header. + """ + for keyword, value in pax_headers.items(): + if keyword == "GNU.sparse.name": + setattr(self, "path", value) + elif keyword == "GNU.sparse.size": + setattr(self, "size", int(value)) + elif keyword == "GNU.sparse.realsize": + setattr(self, "size", int(value)) + elif keyword in PAX_FIELDS: + if keyword in PAX_NUMBER_FIELDS: + try: + value = PAX_NUMBER_FIELDS[keyword](value) + except ValueError: + value = 0 + if keyword == "path": + value = value.rstrip("/") + setattr(self, keyword, value) + + self.pax_headers = pax_headers.copy() + + def _decode_pax_field(self, value, encoding, fallback_encoding, fallback_errors): + """Decode a single field from a pax record. + """ + try: + return value.decode(encoding, "strict") + except UnicodeDecodeError: + return value.decode(fallback_encoding, fallback_errors) + + def _block(self, count): + """Round up a byte count by BLOCKSIZE and return it, + e.g. _block(834) => 1024. + """ + blocks, remainder = divmod(count, BLOCKSIZE) + if remainder: + blocks += 1 + return blocks * BLOCKSIZE + + def isreg(self): + 'Return True if the Tarinfo object is a regular file.' + return self.type in REGULAR_TYPES + + def isfile(self): + 'Return True if the Tarinfo object is a regular file.' + return self.isreg() + + def isdir(self): + 'Return True if it is a directory.' + return self.type == DIRTYPE + + def issym(self): + 'Return True if it is a symbolic link.' + return self.type == SYMTYPE + + def islnk(self): + 'Return True if it is a hard link.' + return self.type == LNKTYPE + + def ischr(self): + 'Return True if it is a character device.' + return self.type == CHRTYPE + + def isblk(self): + 'Return True if it is a block device.' + return self.type == BLKTYPE + + def isfifo(self): + 'Return True if it is a FIFO.' + return self.type == FIFOTYPE + + def issparse(self): + return self.sparse is not None + + def isdev(self): + 'Return True if it is one of character device, block device or FIFO.' + return self.type in (CHRTYPE, BLKTYPE, FIFOTYPE) +# class TarInfo + +class TarFile(object): + """The TarFile Class provides an interface to tar archives. + """ + + debug = 0 # May be set from 0 (no msgs) to 3 (all msgs) + + dereference = False # If true, add content of linked file to the + # tar file, else the link. + + ignore_zeros = False # If true, skips empty or invalid blocks and + # continues processing. + + errorlevel = 1 # If 0, fatal errors only appear in debug + # messages (if debug >= 0). If > 0, errors + # are passed to the caller as exceptions. + + format = DEFAULT_FORMAT # The format to use when creating an archive. + + encoding = ENCODING # Encoding for 8-bit character strings. + + errors = None # Error handler for unicode conversion. + + tarinfo = TarInfo # The default TarInfo class to use. + + fileobject = ExFileObject # The file-object for extractfile(). + + extraction_filter = None # The default filter for extraction. + + def __init__(self, name=None, mode="r", fileobj=None, format=None, + tarinfo=None, dereference=None, ignore_zeros=None, encoding=None, + errors="surrogateescape", pax_headers=None, debug=None, + errorlevel=None, copybufsize=None): + """Open an (uncompressed) tar archive `name'. `mode' is either 'r' to + read from an existing archive, 'a' to append data to an existing + file or 'w' to create a new file overwriting an existing one. `mode' + defaults to 'r'. + If `fileobj' is given, it is used for reading or writing data. If it + can be determined, `mode' is overridden by `fileobj's mode. + `fileobj' is not closed, when TarFile is closed. + """ + modes = {"r": "rb", "a": "r+b", "w": "wb", "x": "xb"} + if mode not in modes: + raise ValueError("mode must be 'r', 'a', 'w' or 'x'") + self.mode = mode + self._mode = modes[mode] + + if not fileobj: + if self.mode == "a" and not os.path.exists(name): + # Create nonexistent files in append mode. + self.mode = "w" + self._mode = "wb" + fileobj = bltn_open(name, self._mode) + self._extfileobj = False + else: + if (name is None and hasattr(fileobj, "name") and + isinstance(fileobj.name, (str, bytes))): + name = fileobj.name + if hasattr(fileobj, "mode"): + self._mode = fileobj.mode + self._extfileobj = True + self.name = os.path.abspath(name) if name else None + self.fileobj = fileobj + + # Init attributes. + if format is not None: + self.format = format + if tarinfo is not None: + self.tarinfo = tarinfo + if dereference is not None: + self.dereference = dereference + if ignore_zeros is not None: + self.ignore_zeros = ignore_zeros + if encoding is not None: + self.encoding = encoding + self.errors = errors + + if pax_headers is not None and self.format == PAX_FORMAT: + self.pax_headers = pax_headers + else: + self.pax_headers = {} + + if debug is not None: + self.debug = debug + if errorlevel is not None: + self.errorlevel = errorlevel + + # Init datastructures. + self.copybufsize = copybufsize + self.closed = False + self.members = [] # list of members as TarInfo objects + self._loaded = False # flag if all members have been read + self.offset = self.fileobj.tell() + # current position in the archive file + self.inodes = {} # dictionary caching the inodes of + # archive members already added + + try: + if self.mode == "r": + self.firstmember = None + self.firstmember = self.next() + + if self.mode == "a": + # Move to the end of the archive, + # before the first empty block. + while True: + self.fileobj.seek(self.offset) + try: + tarinfo = self.tarinfo.fromtarfile(self) + self.members.append(tarinfo) + except EOFHeaderError: + self.fileobj.seek(self.offset) + break + except HeaderError as e: + raise ReadError(str(e)) from None + + if self.mode in ("a", "w", "x"): + self._loaded = True + + if self.pax_headers: + buf = self.tarinfo.create_pax_global_header(self.pax_headers.copy()) + self.fileobj.write(buf) + self.offset += len(buf) + except: + if not self._extfileobj: + self.fileobj.close() + self.closed = True + raise + + #-------------------------------------------------------------------------- + # Below are the classmethods which act as alternate constructors to the + # TarFile class. The open() method is the only one that is needed for + # public use; it is the "super"-constructor and is able to select an + # adequate "sub"-constructor for a particular compression using the mapping + # from OPEN_METH. + # + # This concept allows one to subclass TarFile without losing the comfort of + # the super-constructor. A sub-constructor is registered and made available + # by adding it to the mapping in OPEN_METH. + + @classmethod + def open(cls, name=None, mode="r", fileobj=None, bufsize=RECORDSIZE, **kwargs): + r"""Open a tar archive for reading, writing or appending. Return + an appropriate TarFile class. + + mode: + 'r' or 'r:\*' open for reading with transparent compression + 'r:' open for reading exclusively uncompressed + 'r:gz' open for reading with gzip compression + 'r:bz2' open for reading with bzip2 compression + 'r:xz' open for reading with lzma compression + 'a' or 'a:' open for appending, creating the file if necessary + 'w' or 'w:' open for writing without compression + 'w:gz' open for writing with gzip compression + 'w:bz2' open for writing with bzip2 compression + 'w:xz' open for writing with lzma compression + + 'x' or 'x:' create a tarfile exclusively without compression, raise + an exception if the file is already created + 'x:gz' create a gzip compressed tarfile, raise an exception + if the file is already created + 'x:bz2' create a bzip2 compressed tarfile, raise an exception + if the file is already created + 'x:xz' create an lzma compressed tarfile, raise an exception + if the file is already created + + 'r|\*' open a stream of tar blocks with transparent compression + 'r|' open an uncompressed stream of tar blocks for reading + 'r|gz' open a gzip compressed stream of tar blocks + 'r|bz2' open a bzip2 compressed stream of tar blocks + 'r|xz' open an lzma compressed stream of tar blocks + 'w|' open an uncompressed stream for writing + 'w|gz' open a gzip compressed stream for writing + 'w|bz2' open a bzip2 compressed stream for writing + 'w|xz' open an lzma compressed stream for writing + """ + + if not name and not fileobj: + raise ValueError("nothing to open") + + if mode in ("r", "r:*"): + # Find out which *open() is appropriate for opening the file. + def not_compressed(comptype): + return cls.OPEN_METH[comptype] == 'taropen' + error_msgs = [] + for comptype in sorted(cls.OPEN_METH, key=not_compressed): + func = getattr(cls, cls.OPEN_METH[comptype]) + if fileobj is not None: + saved_pos = fileobj.tell() + try: + return func(name, "r", fileobj, **kwargs) + except (ReadError, CompressionError) as e: + error_msgs.append(f'- method {comptype}: {e!r}') + if fileobj is not None: + fileobj.seek(saved_pos) + continue + error_msgs_summary = '\n'.join(error_msgs) + raise ReadError(f"file could not be opened successfully:\n{error_msgs_summary}") + + elif ":" in mode: + filemode, comptype = mode.split(":", 1) + filemode = filemode or "r" + comptype = comptype or "tar" + + # Select the *open() function according to + # given compression. + if comptype in cls.OPEN_METH: + func = getattr(cls, cls.OPEN_METH[comptype]) + else: + raise CompressionError("unknown compression type %r" % comptype) + return func(name, filemode, fileobj, **kwargs) + + elif "|" in mode: + filemode, comptype = mode.split("|", 1) + filemode = filemode or "r" + comptype = comptype or "tar" + + if filemode not in ("r", "w"): + raise ValueError("mode must be 'r' or 'w'") + + compresslevel = kwargs.pop("compresslevel", 9) + stream = _Stream(name, filemode, comptype, fileobj, bufsize, + compresslevel) + try: + t = cls(name, filemode, stream, **kwargs) + except: + stream.close() + raise + t._extfileobj = False + return t + + elif mode in ("a", "w", "x"): + return cls.taropen(name, mode, fileobj, **kwargs) + + raise ValueError("undiscernible mode") + + @classmethod + def taropen(cls, name, mode="r", fileobj=None, **kwargs): + """Open uncompressed tar archive name for reading or writing. + """ + if mode not in ("r", "a", "w", "x"): + raise ValueError("mode must be 'r', 'a', 'w' or 'x'") + return cls(name, mode, fileobj, **kwargs) + + @classmethod + def gzopen(cls, name, mode="r", fileobj=None, compresslevel=9, **kwargs): + """Open gzip compressed tar archive name for reading or writing. + Appending is not allowed. + """ + if mode not in ("r", "w", "x"): + raise ValueError("mode must be 'r', 'w' or 'x'") + + try: + from gzip import GzipFile + except ImportError: + raise CompressionError("gzip module is not available") from None + + try: + fileobj = GzipFile(name, mode + "b", compresslevel, fileobj) + except OSError as e: + if fileobj is not None and mode == 'r': + raise ReadError("not a gzip file") from e + raise + + try: + t = cls.taropen(name, mode, fileobj, **kwargs) + except OSError as e: + fileobj.close() + if mode == 'r': + raise ReadError("not a gzip file") from e + raise + except: + fileobj.close() + raise + t._extfileobj = False + return t + + @classmethod + def bz2open(cls, name, mode="r", fileobj=None, compresslevel=9, **kwargs): + """Open bzip2 compressed tar archive name for reading or writing. + Appending is not allowed. + """ + if mode not in ("r", "w", "x"): + raise ValueError("mode must be 'r', 'w' or 'x'") + + try: + from bz2 import BZ2File + except ImportError: + raise CompressionError("bz2 module is not available") from None + + fileobj = BZ2File(fileobj or name, mode, compresslevel=compresslevel) + + try: + t = cls.taropen(name, mode, fileobj, **kwargs) + except (OSError, EOFError) as e: + fileobj.close() + if mode == 'r': + raise ReadError("not a bzip2 file") from e + raise + except: + fileobj.close() + raise + t._extfileobj = False + return t + + @classmethod + def xzopen(cls, name, mode="r", fileobj=None, preset=None, **kwargs): + """Open lzma compressed tar archive name for reading or writing. + Appending is not allowed. + """ + if mode not in ("r", "w", "x"): + raise ValueError("mode must be 'r', 'w' or 'x'") + + try: + from lzma import LZMAFile, LZMAError + except ImportError: + raise CompressionError("lzma module is not available") from None + + fileobj = LZMAFile(fileobj or name, mode, preset=preset) + + try: + t = cls.taropen(name, mode, fileobj, **kwargs) + except (LZMAError, EOFError) as e: + fileobj.close() + if mode == 'r': + raise ReadError("not an lzma file") from e + raise + except: + fileobj.close() + raise + t._extfileobj = False + return t + + # All *open() methods are registered here. + OPEN_METH = { + "tar": "taropen", # uncompressed tar + "gz": "gzopen", # gzip compressed tar + "bz2": "bz2open", # bzip2 compressed tar + "xz": "xzopen" # lzma compressed tar + } + + #-------------------------------------------------------------------------- + # The public methods which TarFile provides: + + def close(self): + """Close the TarFile. In write-mode, two finishing zero blocks are + appended to the archive. + """ + if self.closed: + return + + self.closed = True + try: + if self.mode in ("a", "w", "x"): + self.fileobj.write(NUL * (BLOCKSIZE * 2)) + self.offset += (BLOCKSIZE * 2) + # fill up the end with zero-blocks + # (like option -b20 for tar does) + blocks, remainder = divmod(self.offset, RECORDSIZE) + if remainder > 0: + self.fileobj.write(NUL * (RECORDSIZE - remainder)) + finally: + if not self._extfileobj: + self.fileobj.close() + + def getmember(self, name): + """Return a TarInfo object for member ``name``. If ``name`` can not be + found in the archive, KeyError is raised. If a member occurs more + than once in the archive, its last occurrence is assumed to be the + most up-to-date version. + """ + tarinfo = self._getmember(name.rstrip('/')) + if tarinfo is None: + raise KeyError("filename %r not found" % name) + return tarinfo + + def getmembers(self): + """Return the members of the archive as a list of TarInfo objects. The + list has the same order as the members in the archive. + """ + self._check() + if not self._loaded: # if we want to obtain a list of + self._load() # all members, we first have to + # scan the whole archive. + return self.members + + def getnames(self): + """Return the members of the archive as a list of their names. It has + the same order as the list returned by getmembers(). + """ + return [tarinfo.name for tarinfo in self.getmembers()] + + def gettarinfo(self, name=None, arcname=None, fileobj=None): + """Create a TarInfo object from the result of os.stat or equivalent + on an existing file. The file is either named by ``name``, or + specified as a file object ``fileobj`` with a file descriptor. If + given, ``arcname`` specifies an alternative name for the file in the + archive, otherwise, the name is taken from the 'name' attribute of + 'fileobj', or the 'name' argument. The name should be a text + string. + """ + self._check("awx") + + # When fileobj is given, replace name by + # fileobj's real name. + if fileobj is not None: + name = fileobj.name + + # Building the name of the member in the archive. + # Backward slashes are converted to forward slashes, + # Absolute paths are turned to relative paths. + if arcname is None: + arcname = name + drv, arcname = os.path.splitdrive(arcname) + arcname = arcname.replace(os.sep, "/") + arcname = arcname.lstrip("/") + + # Now, fill the TarInfo object with + # information specific for the file. + tarinfo = self.tarinfo() + tarinfo.tarfile = self # Not needed + + # Use os.stat or os.lstat, depending on if symlinks shall be resolved. + if fileobj is None: + if not self.dereference: + statres = os.lstat(name) + else: + statres = os.stat(name) + else: + statres = os.fstat(fileobj.fileno()) + linkname = "" + + stmd = statres.st_mode + if stat.S_ISREG(stmd): + inode = (statres.st_ino, statres.st_dev) + if not self.dereference and statres.st_nlink > 1 and \ + inode in self.inodes and arcname != self.inodes[inode]: + # Is it a hardlink to an already + # archived file? + type = LNKTYPE + linkname = self.inodes[inode] + else: + # The inode is added only if its valid. + # For win32 it is always 0. + type = REGTYPE + if inode[0]: + self.inodes[inode] = arcname + elif stat.S_ISDIR(stmd): + type = DIRTYPE + elif stat.S_ISFIFO(stmd): + type = FIFOTYPE + elif stat.S_ISLNK(stmd): + type = SYMTYPE + linkname = os.readlink(name) + elif stat.S_ISCHR(stmd): + type = CHRTYPE + elif stat.S_ISBLK(stmd): + type = BLKTYPE + else: + return None + + # Fill the TarInfo object with all + # information we can get. + tarinfo.name = arcname + tarinfo.mode = stmd + tarinfo.uid = statres.st_uid + tarinfo.gid = statres.st_gid + if type == REGTYPE: + tarinfo.size = statres.st_size + else: + tarinfo.size = 0 + tarinfo.mtime = statres.st_mtime + tarinfo.type = type + tarinfo.linkname = linkname + if pwd: + try: + tarinfo.uname = pwd.getpwuid(tarinfo.uid)[0] + except KeyError: + pass + if grp: + try: + tarinfo.gname = grp.getgrgid(tarinfo.gid)[0] + except KeyError: + pass + + if type in (CHRTYPE, BLKTYPE): + if hasattr(os, "major") and hasattr(os, "minor"): + tarinfo.devmajor = os.major(statres.st_rdev) + tarinfo.devminor = os.minor(statres.st_rdev) + 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(). + """ + self._check() + + if members is None: + members = self + for tarinfo in members: + if verbose: + if tarinfo.mode is None: + _safe_print("??????????") + else: + _safe_print(stat.filemode(tarinfo.mode)) + _safe_print("%s/%s" % (tarinfo.uname or tarinfo.uid, + tarinfo.gname or tarinfo.gid)) + if tarinfo.ischr() or tarinfo.isblk(): + _safe_print("%10s" % + ("%d,%d" % (tarinfo.devmajor, tarinfo.devminor))) + else: + _safe_print("%10d" % tarinfo.size) + if tarinfo.mtime is None: + _safe_print("????-??-?? ??:??:??") + else: + _safe_print("%d-%02d-%02d %02d:%02d:%02d" \ + % time.localtime(tarinfo.mtime)[:6]) + + _safe_print(tarinfo.name + ("/" if tarinfo.isdir() else "")) + + if verbose: + if tarinfo.issym(): + _safe_print("-> " + tarinfo.linkname) + if tarinfo.islnk(): + _safe_print("link to " + tarinfo.linkname) + print() + + def add(self, name, arcname=None, recursive=True, *, filter=None): + """Add the file ``name`` to the archive. ``name`` may be any type of file + (directory, fifo, symbolic link, etc.). If given, ``arcname`` + specifies an alternative name for the file in the archive. + Directories are added recursively by default. This can be avoided by + setting ``recursive`` to False. ``filter`` is a function + that expects a TarInfo object argument and returns the changed + TarInfo object, if it returns None the TarInfo object will be + excluded from the archive. + """ + self._check("awx") + + if arcname is None: + arcname = name + + # Skip if somebody tries to archive the archive... + if self.name is not None and os.path.abspath(name) == self.name: + self._dbg(2, "tarfile: Skipped %r" % name) + return + + self._dbg(1, name) + + # Create a TarInfo object from the file. + tarinfo = self.gettarinfo(name, arcname) + + if tarinfo is None: + self._dbg(1, "tarfile: Unsupported type %r" % name) + return + + # Change or exclude the TarInfo object. + if filter is not None: + tarinfo = filter(tarinfo) + if tarinfo is None: + self._dbg(2, "tarfile: Excluded %r" % name) + return + + # Append the tar header and data to the archive. + if tarinfo.isreg(): + with bltn_open(name, "rb") as f: + self.addfile(tarinfo, f) + + elif tarinfo.isdir(): + self.addfile(tarinfo) + if recursive: + for f in sorted(os.listdir(name)): + self.add(os.path.join(name, f), os.path.join(arcname, f), + recursive, filter=filter) + + else: + self.addfile(tarinfo) + + def addfile(self, tarinfo, fileobj=None): + """Add the TarInfo object ``tarinfo`` to the archive. If ``fileobj`` is + given, it 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") + + tarinfo = copy.copy(tarinfo) + + buf = tarinfo.tobuf(self.format, self.encoding, self.errors) + self.fileobj.write(buf) + self.offset += len(buf) + bufsize=self.copybufsize + # If there's data to follow, append it. + if fileobj is not None: + copyfileobj(fileobj, self.fileobj, tarinfo.size, bufsize=bufsize) + blocks, remainder = divmod(tarinfo.size, BLOCKSIZE) + if remainder > 0: + self.fileobj.write(NUL * (BLOCKSIZE - remainder)) + blocks += 1 + self.offset += blocks * BLOCKSIZE + + self.members.append(tarinfo) + + def _get_filter_function(self, filter): + if filter is None: + filter = self.extraction_filter + if filter is None: + warnings.warn( + 'Python 3.14 will, by default, filter extracted tar ' + + 'archives and reject files or modify their metadata. ' + + 'Use the filter argument to control this behavior.', + DeprecationWarning) + return fully_trusted_filter + if isinstance(filter, str): + raise TypeError( + 'String names are not supported for ' + + 'TarFile.extraction_filter. Use a function such as ' + + 'tarfile.data_filter directly.') + return filter + if callable(filter): + return filter + try: + return _NAMED_FILTERS[filter] + except KeyError: + raise ValueError(f"filter {filter!r} not found") from None + + def extractall(self, path=".", members=None, *, numeric_owner=False, + filter=None): + """Extract all members from the archive to the current working + directory and set owner, modification time and permissions on + directories afterwards. `path' specifies a different directory + to extract to. `members' is optional and must be a subset of the + list returned by getmembers(). If `numeric_owner` is True, only + the numbers for user/group names are used and not the names. + + The `filter` function will be called on each member just + before extraction. + It can return a changed TarInfo or None to skip the member. + String names of common filters are accepted. + """ + directories = [] + + filter_function = self._get_filter_function(filter) + if members is None: + members = self + + for member in members: + tarinfo = self._get_extract_tarinfo(member, filter_function, path) + if tarinfo is None: + continue + if tarinfo.isdir(): + # For directories, delay setting attributes until later, + # since permissions can interfere with extraction and + # extracting contents can reset mtime. + directories.append(tarinfo) + self._extract_one(tarinfo, path, set_attrs=not tarinfo.isdir(), + numeric_owner=numeric_owner) + + # Reverse sort directories. + directories.sort(key=lambda a: a.name, reverse=True) + + # Set correct owner, mtime and filemode on directories. + for tarinfo in directories: + dirpath = os.path.join(path, tarinfo.name) + try: + self.chown(tarinfo, dirpath, numeric_owner=numeric_owner) + self.utime(tarinfo, dirpath) + self.chmod(tarinfo, dirpath) + except ExtractError as e: + self._handle_nonfatal_error(e) + + def extract(self, member, path="", set_attrs=True, *, numeric_owner=False, + filter=None): + """Extract a member from the archive to the current working directory, + using its full name. Its file information is extracted as accurately + as possible. `member' may be a filename or a TarInfo object. You can + specify a different directory using `path'. File attributes (owner, + mtime, mode) are set unless `set_attrs' is False. If `numeric_owner` + is True, only the numbers for user/group names are used and not + the names. + + The `filter` function will be called before extraction. + It can return a changed TarInfo or None to skip the member. + String names of common filters are accepted. + """ + filter_function = self._get_filter_function(filter) + tarinfo = self._get_extract_tarinfo(member, filter_function, path) + if tarinfo is not None: + self._extract_one(tarinfo, path, set_attrs, numeric_owner) + + def _get_extract_tarinfo(self, member, filter_function, path): + """Get filtered TarInfo (or None) from member, which might be a str""" + if isinstance(member, str): + tarinfo = self.getmember(member) + else: + tarinfo = member + + unfiltered = tarinfo + try: + tarinfo = filter_function(tarinfo, path) + except (OSError, FilterError) as e: + self._handle_fatal_error(e) + except ExtractError as e: + self._handle_nonfatal_error(e) + if tarinfo is None: + self._dbg(2, "tarfile: Excluded %r" % unfiltered.name) + return None + # Prepare the link target for makelink(). + if tarinfo.islnk(): + tarinfo = copy.copy(tarinfo) + tarinfo._link_target = os.path.join(path, tarinfo.linkname) + return tarinfo + + def _extract_one(self, tarinfo, path, set_attrs, numeric_owner): + """Extract from filtered tarinfo to disk""" + self._check("r") + + try: + self._extract_member(tarinfo, os.path.join(path, tarinfo.name), + set_attrs=set_attrs, + numeric_owner=numeric_owner) + except OSError as e: + self._handle_fatal_error(e) + except ExtractError as e: + self._handle_nonfatal_error(e) + + def _handle_nonfatal_error(self, e): + """Handle non-fatal error (ExtractError) according to errorlevel""" + if self.errorlevel > 1: + raise + else: + self._dbg(1, "tarfile: %s" % e) + + def _handle_fatal_error(self, e): + """Handle "fatal" error according to self.errorlevel""" + if self.errorlevel > 0: + raise + elif isinstance(e, OSError): + if e.filename is None: + self._dbg(1, "tarfile: %s" % e.strerror) + else: + self._dbg(1, "tarfile: %s %r" % (e.strerror, e.filename)) + else: + self._dbg(1, "tarfile: %s %s" % (type(e).__name__, e)) + + def extractfile(self, member): + """Extract a member from the archive as a file object. ``member`` may be + a filename or a TarInfo object. If ``member`` is a regular file or + a link, an io.BufferedReader object is returned. For all other + existing members, None is returned. If ``member`` does not appear + in the archive, KeyError is raised. + """ + self._check("r") + + if isinstance(member, str): + tarinfo = self.getmember(member) + else: + tarinfo = member + + if tarinfo.isreg() or tarinfo.type not in SUPPORTED_TYPES: + # Members with unknown types are treated as regular files. + return self.fileobject(self, tarinfo) + + elif tarinfo.islnk() or tarinfo.issym(): + if isinstance(self.fileobj, _Stream): + # A small but ugly workaround for the case that someone tries + # to extract a (sym)link as a file-object from a non-seekable + # stream of tar blocks. + raise StreamError("cannot extract (sym)link as file object") + else: + # A (sym)link's file object is its target's file object. + return self.extractfile(self._find_link_target(tarinfo)) + else: + # If there's no data associated with the member (directory, chrdev, + # blkdev, etc.), return None instead of a file object. + return None + + def _extract_member(self, tarinfo, targetpath, set_attrs=True, + numeric_owner=False): + """Extract the TarInfo object tarinfo to a physical + file called targetpath. + """ + # Fetch the TarInfo object for the given name + # and build the destination pathname, replacing + # forward slashes to platform specific separators. + targetpath = targetpath.rstrip("/") + targetpath = targetpath.replace("/", os.sep) + + # Create all upper directories. + upperdirs = os.path.dirname(targetpath) + if upperdirs and not os.path.exists(upperdirs): + # Create directories that are not part of the archive with + # default permissions. + os.makedirs(upperdirs) + + if tarinfo.islnk() or tarinfo.issym(): + self._dbg(1, "%s -> %s" % (tarinfo.name, tarinfo.linkname)) + else: + self._dbg(1, tarinfo.name) + + if tarinfo.isreg(): + self.makefile(tarinfo, targetpath) + elif tarinfo.isdir(): + self.makedir(tarinfo, targetpath) + elif tarinfo.isfifo(): + self.makefifo(tarinfo, targetpath) + elif tarinfo.ischr() or tarinfo.isblk(): + self.makedev(tarinfo, targetpath) + elif tarinfo.islnk() or tarinfo.issym(): + self.makelink(tarinfo, targetpath) + elif tarinfo.type not in SUPPORTED_TYPES: + self.makeunknown(tarinfo, targetpath) + else: + self.makefile(tarinfo, targetpath) + + if set_attrs: + self.chown(tarinfo, targetpath, numeric_owner) + if not tarinfo.issym(): + self.chmod(tarinfo, targetpath) + self.utime(tarinfo, targetpath) + + #-------------------------------------------------------------------------- + # Below are the different file methods. They are called via + # _extract_member() when extract() is called. They can be replaced in a + # subclass to implement other functionality. + + def makedir(self, tarinfo, targetpath): + """Make a directory called targetpath. + """ + try: + if tarinfo.mode is None: + # Use the system's default mode + os.mkdir(targetpath) + else: + # Use a safe mode for the directory, the real mode is set + # later in _extract_member(). + os.mkdir(targetpath, 0o700) + except FileExistsError: + if not os.path.isdir(targetpath): + raise + + def makefile(self, tarinfo, targetpath): + """Make a file called targetpath. + """ + source = self.fileobj + source.seek(tarinfo.offset_data) + bufsize = self.copybufsize + with bltn_open(targetpath, "wb") as target: + if tarinfo.sparse is not None: + for offset, size in tarinfo.sparse: + target.seek(offset) + copyfileobj(source, target, size, ReadError, bufsize) + target.seek(tarinfo.size) + target.truncate() + else: + copyfileobj(source, target, tarinfo.size, ReadError, bufsize) + + def makeunknown(self, tarinfo, targetpath): + """Make a file from a TarInfo object with an unknown type + at targetpath. + """ + self.makefile(tarinfo, targetpath) + self._dbg(1, "tarfile: Unknown file type %r, " \ + "extracted as regular file." % tarinfo.type) + + def makefifo(self, tarinfo, targetpath): + """Make a fifo called targetpath. + """ + if hasattr(os, "mkfifo"): + os.mkfifo(targetpath) + else: + raise ExtractError("fifo not supported by system") + + def makedev(self, tarinfo, targetpath): + """Make a character or block device called targetpath. + """ + if not hasattr(os, "mknod") or not hasattr(os, "makedev"): + raise ExtractError("special devices not supported by system") + + mode = tarinfo.mode + if mode is None: + # Use mknod's default + mode = 0o600 + if tarinfo.isblk(): + mode |= stat.S_IFBLK + else: + mode |= stat.S_IFCHR + + os.mknod(targetpath, mode, + os.makedev(tarinfo.devmajor, tarinfo.devminor)) + + def makelink(self, tarinfo, targetpath): + """Make a (symbolic) link called targetpath. If it cannot be created + (platform limitation), we try to make a copy of the referenced file + instead of a link. + """ + try: + # For systems that support symbolic and hard links. + if tarinfo.issym(): + if os.path.lexists(targetpath): + # Avoid FileExistsError on following os.symlink. + os.unlink(targetpath) + os.symlink(tarinfo.linkname, targetpath) + else: + if os.path.exists(tarinfo._link_target): + os.link(tarinfo._link_target, targetpath) + else: + self._extract_member(self._find_link_target(tarinfo), + targetpath) + except symlink_exception: + try: + self._extract_member(self._find_link_target(tarinfo), + targetpath) + except KeyError: + raise ExtractError("unable to resolve link inside archive") from None + + def chown(self, tarinfo, targetpath, numeric_owner): + """Set owner of targetpath according to tarinfo. If numeric_owner + is True, use .gid/.uid instead of .gname/.uname. If numeric_owner + is False, fall back to .gid/.uid when the search based on name + fails. + """ + if hasattr(os, "geteuid") and os.geteuid() == 0: + # We have to be root to do so. + g = tarinfo.gid + u = tarinfo.uid + if not numeric_owner: + try: + if grp and tarinfo.gname: + g = grp.getgrnam(tarinfo.gname)[2] + except KeyError: + pass + try: + if pwd and tarinfo.uname: + u = pwd.getpwnam(tarinfo.uname)[2] + except KeyError: + pass + if g is None: + g = -1 + if u is None: + u = -1 + try: + if tarinfo.issym() and hasattr(os, "lchown"): + os.lchown(targetpath, u, g) + else: + os.chown(targetpath, u, g) + except OSError as e: + raise ExtractError("could not change owner") from e + + def chmod(self, tarinfo, targetpath): + """Set file permissions of targetpath according to tarinfo. + """ + if tarinfo.mode is None: + return + try: + os.chmod(targetpath, tarinfo.mode) + except OSError as e: + raise ExtractError("could not change mode") from e + + def utime(self, tarinfo, targetpath): + """Set modification time of targetpath according to tarinfo. + """ + mtime = tarinfo.mtime + if mtime is None: + return + if not hasattr(os, 'utime'): + return + try: + os.utime(targetpath, (mtime, mtime)) + except OSError as e: + raise ExtractError("could not change modification time") from e + + #-------------------------------------------------------------------------- + def next(self): + """Return the next member of the archive as a TarInfo object, when + TarFile is opened for reading. Return None if there is no more + available. + """ + self._check("ra") + if self.firstmember is not None: + m = self.firstmember + self.firstmember = None + return m + + # Advance the file pointer. + if self.offset != self.fileobj.tell(): + if self.offset == 0: + return None + self.fileobj.seek(self.offset - 1) + if not self.fileobj.read(1): + raise ReadError("unexpected end of data") + + # Read the next block. + tarinfo = None + while True: + try: + tarinfo = self.tarinfo.fromtarfile(self) + except EOFHeaderError as e: + if self.ignore_zeros: + self._dbg(2, "0x%X: %s" % (self.offset, e)) + self.offset += BLOCKSIZE + continue + except InvalidHeaderError as e: + if self.ignore_zeros: + self._dbg(2, "0x%X: %s" % (self.offset, e)) + self.offset += BLOCKSIZE + continue + elif self.offset == 0: + raise ReadError(str(e)) from None + except EmptyHeaderError: + if self.offset == 0: + raise ReadError("empty file") from None + except TruncatedHeaderError as e: + if self.offset == 0: + raise ReadError(str(e)) from None + except SubsequentHeaderError as e: + raise ReadError(str(e)) from None + except Exception as e: + try: + import zlib + if isinstance(e, zlib.error): + raise ReadError(f'zlib error: {e}') from None + else: + raise e + except ImportError: + raise e + break + + if tarinfo is not None: + self.members.append(tarinfo) + else: + self._loaded = True + + return tarinfo + + #-------------------------------------------------------------------------- + # Little helper methods: + + def _getmember(self, name, tarinfo=None, normalize=False): + """Find an archive member by name from bottom to top. + If tarinfo is given, it is used as the starting point. + """ + # Ensure that all members have been loaded. + members = self.getmembers() + + # Limit the member search list up to tarinfo. + skipping = False + if tarinfo is not None: + try: + index = members.index(tarinfo) + except ValueError: + # The given starting point might be a (modified) copy. + # We'll later skip members until we find an equivalent. + skipping = True + else: + # Happy fast path + members = members[:index] + + if normalize: + name = os.path.normpath(name) + + for member in reversed(members): + if skipping: + if tarinfo.offset == member.offset: + skipping = False + continue + if normalize: + member_name = os.path.normpath(member.name) + else: + member_name = member.name + + if name == member_name: + return member + + if skipping: + # Starting point was not found + raise ValueError(tarinfo) + + def _load(self): + """Read through the entire archive file and look for readable + members. + """ + while self.next() is not None: + pass + self._loaded = True + + def _check(self, mode=None): + """Check if TarFile is still open, and if the operation's mode + corresponds to TarFile's mode. + """ + if self.closed: + raise OSError("%s is closed" % self.__class__.__name__) + if mode is not None and self.mode not in mode: + raise OSError("bad operation for mode %r" % self.mode) + + def _find_link_target(self, tarinfo): + """Find the target member of a symlink or hardlink member in the + archive. + """ + if tarinfo.issym(): + # Always search the entire archive. + linkname = "/".join(filter(None, (os.path.dirname(tarinfo.name), tarinfo.linkname))) + limit = None + else: + # Search the archive before the link, because a hard link is + # just a reference to an already archived file. + linkname = tarinfo.linkname + limit = tarinfo + + member = self._getmember(linkname, tarinfo=limit, normalize=True) + if member is None: + raise KeyError("linkname %r not found" % linkname) + return member + + def __iter__(self): + """Provide an iterator object. + """ + if self._loaded: + yield from self.members + return + + # Yield items using TarFile's next() method. + # When all members have been read, set TarFile as _loaded. + index = 0 + # Fix for SF #1100429: Under rare circumstances it can + # happen that getmembers() is called during iteration, + # which will have already exhausted the next() method. + if self.firstmember is not None: + tarinfo = self.next() + index += 1 + yield tarinfo + + while True: + if index < len(self.members): + tarinfo = self.members[index] + elif not self._loaded: + tarinfo = self.next() + if not tarinfo: + self._loaded = True + return + else: + return + index += 1 + yield tarinfo + + def _dbg(self, level, msg): + """Write debugging output to sys.stderr. + """ + if level <= self.debug: + print(msg, file=sys.stderr) + + def __enter__(self): + self._check() + return self + + def __exit__(self, type, value, traceback): + if type is None: + self.close() + else: + # An exception occurred. We must not call close() because + # it would try to write end-of-archive blocks and padding. + if not self._extfileobj: + self.fileobj.close() + self.closed = True + +#-------------------- +# exported functions +#-------------------- + +def is_tarfile(name): + """Return True if name points to a tar archive that we + are able to handle, else return False. + + 'name' should be a string, file, or file-like object. + """ + try: + if hasattr(name, "read"): + pos = name.tell() + t = open(fileobj=name) + name.seek(pos) + else: + t = open(name) + t.close() + return True + except TarError: + return False + +open = TarFile.open + + +def main(): + import argparse + + description = 'A simple command-line interface for tarfile module.' + parser = argparse.ArgumentParser(description=description) + parser.add_argument('-v', '--verbose', action='store_true', default=False, + help='Verbose output') + parser.add_argument('--filter', metavar='<filtername>', + choices=_NAMED_FILTERS, + help='Filter for extraction') + + group = parser.add_mutually_exclusive_group(required=True) + group.add_argument('-l', '--list', metavar='<tarfile>', + help='Show listing of a tarfile') + group.add_argument('-e', '--extract', nargs='+', + metavar=('<tarfile>', '<output_dir>'), + help='Extract tarfile into target dir') + group.add_argument('-c', '--create', nargs='+', + metavar=('<name>', '<file>'), + help='Create tarfile from sources') + group.add_argument('-t', '--test', metavar='<tarfile>', + help='Test if a tarfile is valid') + + args = parser.parse_args() + + if args.filter and args.extract is None: + parser.exit(1, '--filter is only valid for extraction\n') + + if args.test is not None: + src = args.test + if is_tarfile(src): + with open(src, 'r') as tar: + tar.getmembers() + print(tar.getmembers(), file=sys.stderr) + if args.verbose: + print('{!r} is a tar archive.'.format(src)) + else: + parser.exit(1, '{!r} is not a tar archive.\n'.format(src)) + + elif args.list is not None: + src = args.list + if is_tarfile(src): + with TarFile.open(src, 'r:*') as tf: + tf.list(verbose=args.verbose) + else: + parser.exit(1, '{!r} is not a tar archive.\n'.format(src)) + + elif args.extract is not None: + if len(args.extract) == 1: + src = args.extract[0] + curdir = os.curdir + elif len(args.extract) == 2: + src, curdir = args.extract + else: + parser.exit(1, parser.format_help()) + + if is_tarfile(src): + with TarFile.open(src, 'r:*') as tf: + tf.extractall(path=curdir, filter=args.filter) + if args.verbose: + if curdir == '.': + msg = '{!r} file is extracted.'.format(src) + else: + msg = ('{!r} file is extracted ' + 'into {!r} directory.').format(src, curdir) + print(msg) + else: + parser.exit(1, '{!r} is not a tar archive.\n'.format(src)) + + elif args.create is not None: + tar_name = args.create.pop(0) + _, ext = os.path.splitext(tar_name) + compressions = { + # gz + '.gz': 'gz', + '.tgz': 'gz', + # xz + '.xz': 'xz', + '.txz': 'xz', + # bz2 + '.bz2': 'bz2', + '.tbz': 'bz2', + '.tbz2': 'bz2', + '.tb2': 'bz2', + } + tar_mode = 'w:' + compressions[ext] if ext in compressions else 'w' + tar_files = args.create + + with TarFile.open(tar_name, tar_mode) as tf: + for file_name in tar_files: + tf.add(file_name) + + if args.verbose: + print('{!r} file created.'.format(tar_name)) + +if __name__ == '__main__': + main() diff --git a/contrib/python/setuptools/py3/pkg_resources/_vendor/jaraco/context.py b/contrib/python/setuptools/py3/pkg_resources/_vendor/jaraco/context.py index b0d1ef37cb..c42f6135d5 100644 --- a/contrib/python/setuptools/py3/pkg_resources/_vendor/jaraco/context.py +++ b/contrib/python/setuptools/py3/pkg_resources/_vendor/jaraco/context.py @@ -1,15 +1,26 @@ -import os -import subprocess +from __future__ import annotations + import contextlib import functools -import tempfile -import shutil import operator +import os +import shutil +import subprocess +import sys +import tempfile +import urllib.request import warnings +from typing import Iterator + + +if sys.version_info < (3, 12): + from pkg_resources.extern.backports import tarfile +else: + import tarfile @contextlib.contextmanager -def pushd(dir): +def pushd(dir: str | os.PathLike) -> Iterator[str | os.PathLike]: """ >>> tmp_path = getfixture('tmp_path') >>> with pushd(tmp_path): @@ -26,33 +37,88 @@ def pushd(dir): @contextlib.contextmanager -def tarball_context(url, target_dir=None, runner=None, pushd=pushd): +def tarball( + url, target_dir: str | os.PathLike | None = None +) -> Iterator[str | os.PathLike]: """ - Get a tarball, extract it, change to that directory, yield, then - clean up. - `runner` is the function to invoke commands. - `pushd` is a context manager for changing the directory. + Get a tarball, extract it, yield, then clean up. + + >>> import urllib.request + >>> url = getfixture('tarfile_served') + >>> target = getfixture('tmp_path') / 'out' + >>> tb = tarball(url, target_dir=target) + >>> import pathlib + >>> with tb as extracted: + ... contents = pathlib.Path(extracted, 'contents.txt').read_text(encoding='utf-8') + >>> assert not os.path.exists(extracted) """ if target_dir is None: target_dir = os.path.basename(url).replace('.tar.gz', '').replace('.tgz', '') - if runner is None: - runner = functools.partial(subprocess.check_call, shell=True) - else: - warnings.warn("runner parameter is deprecated", DeprecationWarning) # In the tar command, use --strip-components=1 to strip the first path and # then # use -C to cause the files to be extracted to {target_dir}. This ensures # that we always know where the files were extracted. - runner('mkdir {target_dir}'.format(**vars())) + os.mkdir(target_dir) try: - getter = 'wget {url} -O -' - extract = 'tar x{compression} --strip-components=1 -C {target_dir}' - cmd = ' | '.join((getter, extract)) - runner(cmd.format(compression=infer_compression(url), **vars())) - with pushd(target_dir): - yield target_dir + req = urllib.request.urlopen(url) + with tarfile.open(fileobj=req, mode='r|*') as tf: + tf.extractall(path=target_dir, filter=strip_first_component) + yield target_dir finally: - runner('rm -Rf {target_dir}'.format(**vars())) + shutil.rmtree(target_dir) + + +def strip_first_component( + member: tarfile.TarInfo, + path, +) -> tarfile.TarInfo: + _, member.name = member.name.split('/', 1) + return member + + +def _compose(*cmgrs): + """ + Compose any number of dependent context managers into a single one. + + The last, innermost context manager may take arbitrary arguments, but + each successive context manager should accept the result from the + previous as a single parameter. + + Like :func:`jaraco.functools.compose`, behavior works from right to + left, so the context manager should be indicated from outermost to + innermost. + + Example, to create a context manager to change to a temporary + directory: + + >>> temp_dir_as_cwd = _compose(pushd, temp_dir) + >>> with temp_dir_as_cwd() as dir: + ... assert os.path.samefile(os.getcwd(), dir) + """ + + def compose_two(inner, outer): + def composed(*args, **kwargs): + with inner(*args, **kwargs) as saved, outer(saved) as res: + yield res + + return contextlib.contextmanager(composed) + + return functools.reduce(compose_two, reversed(cmgrs)) + + +tarball_cwd = _compose(pushd, tarball) + + +@contextlib.contextmanager +def tarball_context(*args, **kwargs): + warnings.warn( + "tarball_context is deprecated. Use tarball or tarball_cwd instead.", + DeprecationWarning, + stacklevel=2, + ) + pushd_ctx = kwargs.pop('pushd', pushd) + with tarball(*args, **kwargs) as tball, pushd_ctx(tball) as dir: + yield dir def infer_compression(url): @@ -68,6 +134,11 @@ def infer_compression(url): >>> infer_compression('file.xz') 'J' """ + warnings.warn( + "infer_compression is deprecated with no replacement", + DeprecationWarning, + stacklevel=2, + ) # cheat and just assume it's the last two characters compression_indicator = url[-2:] mapping = dict(gz='z', bz='j', xz='J') @@ -84,7 +155,7 @@ def temp_dir(remover=shutil.rmtree): >>> import pathlib >>> with temp_dir() as the_dir: ... assert os.path.isdir(the_dir) - ... _ = pathlib.Path(the_dir).joinpath('somefile').write_text('contents') + ... _ = pathlib.Path(the_dir).joinpath('somefile').write_text('contents', encoding='utf-8') >>> assert not os.path.exists(the_dir) """ temp_dir = tempfile.mkdtemp() @@ -113,15 +184,23 @@ def repo_context(url, branch=None, quiet=True, dest_ctx=temp_dir): yield repo_dir -@contextlib.contextmanager def null(): """ A null context suitable to stand in for a meaningful context. >>> with null() as value: ... assert value is None + + This context is most useful when dealing with two or more code + branches but only some need a context. Wrap the others in a null + context to provide symmetry across all options. """ - yield + warnings.warn( + "null is deprecated. Use contextlib.nullcontext", + DeprecationWarning, + stacklevel=2, + ) + return contextlib.nullcontext() class ExceptionTrap: @@ -267,13 +346,7 @@ class on_interrupt(contextlib.ContextDecorator): ... on_interrupt('ignore')(do_interrupt)() """ - def __init__( - self, - action='error', - # py3.7 compat - # /, - code=1, - ): + def __init__(self, action='error', /, code=1): self.action = action self.code = code diff --git a/contrib/python/setuptools/py3/pkg_resources/_vendor/jaraco/functools.py b/contrib/python/setuptools/py3/pkg_resources/_vendor/jaraco/functools/__init__.py index 67aeadc353..f523099c72 100644 --- a/contrib/python/setuptools/py3/pkg_resources/_vendor/jaraco/functools.py +++ b/contrib/python/setuptools/py3/pkg_resources/_vendor/jaraco/functools/__init__.py @@ -1,18 +1,14 @@ +import collections.abc import functools -import time import inspect -import collections -import types import itertools +import operator +import time +import types import warnings import pkg_resources.extern.more_itertools -from typing import Callable, TypeVar - - -CallableT = TypeVar("CallableT", bound=Callable[..., object]) - def compose(*funcs): """ @@ -38,24 +34,6 @@ def compose(*funcs): return functools.reduce(compose_two, funcs) -def method_caller(method_name, *args, **kwargs): - """ - Return a function that will call a named method on the - target object with optional positional and keyword - arguments. - - >>> lower = method_caller('lower') - >>> lower('MyString') - 'mystring' - """ - - def call_method(target): - func = getattr(target, method_name) - return func(*args, **kwargs) - - return call_method - - def once(func): """ Decorate func so it's only ever called the first time. @@ -98,12 +76,7 @@ def once(func): return wrapper -def method_cache( - method: CallableT, - cache_wrapper: Callable[ - [CallableT], CallableT - ] = functools.lru_cache(), # type: ignore[assignment] -) -> CallableT: +def method_cache(method, cache_wrapper=functools.lru_cache()): """ Wrap lru_cache to support storing the cache data in the object instances. @@ -171,21 +144,17 @@ def method_cache( for another implementation and additional justification. """ - def wrapper(self: object, *args: object, **kwargs: object) -> object: + def wrapper(self, *args, **kwargs): # it's the first call, replace the method with a cached, bound method - bound_method: CallableT = types.MethodType( # type: ignore[assignment] - method, self - ) + bound_method = types.MethodType(method, self) cached_method = cache_wrapper(bound_method) setattr(self, method.__name__, cached_method) return cached_method(*args, **kwargs) # Support cache clear even before cache has been created. - wrapper.cache_clear = lambda: None # type: ignore[attr-defined] + wrapper.cache_clear = lambda: None - return ( # type: ignore[return-value] - _special_method_cache(method, cache_wrapper) or wrapper - ) + return _special_method_cache(method, cache_wrapper) or wrapper def _special_method_cache(method, cache_wrapper): @@ -201,12 +170,13 @@ def _special_method_cache(method, cache_wrapper): """ name = method.__name__ special_names = '__getattr__', '__getitem__' + if name not in special_names: - return + return None wrapper_name = '__cached' + name - def proxy(self, *args, **kwargs): + def proxy(self, /, *args, **kwargs): if wrapper_name not in vars(self): bound = types.MethodType(method, self) cache = cache_wrapper(bound) @@ -243,7 +213,7 @@ def result_invoke(action): r""" Decorate a function with an action function that is invoked on the results returned from the decorated - function (for its side-effect), then return the original + function (for its side effect), then return the original result. >>> @result_invoke(print) @@ -267,7 +237,7 @@ def result_invoke(action): return wrap -def invoke(f, *args, **kwargs): +def invoke(f, /, *args, **kwargs): """ Call a function for its side effect after initialization. @@ -302,25 +272,15 @@ def invoke(f, *args, **kwargs): Use functools.partial to pass parameters to the initial call >>> @functools.partial(invoke, name='bingo') - ... def func(name): print("called with", name) + ... def func(name): print('called with', name) called with bingo """ f(*args, **kwargs) return f -def call_aside(*args, **kwargs): - """ - Deprecated name for invoke. - """ - warnings.warn("call_aside is deprecated, use invoke", DeprecationWarning) - return invoke(*args, **kwargs) - - class Throttler: - """ - Rate-limit a function (or other callable) - """ + """Rate-limit a function (or other callable).""" def __init__(self, func, max_rate=float('Inf')): if isinstance(func, Throttler): @@ -337,20 +297,20 @@ class Throttler: return self.func(*args, **kwargs) def _wait(self): - "ensure at least 1/max_rate seconds from last call" + """Ensure at least 1/max_rate seconds from last call.""" elapsed = time.time() - self.last_called must_wait = 1 / self.max_rate - elapsed time.sleep(max(0, must_wait)) self.last_called = time.time() - def __get__(self, obj, type=None): + def __get__(self, obj, owner=None): return first_invoke(self._wait, functools.partial(self.func, obj)) def first_invoke(func1, func2): """ Return a function that when invoked will invoke func1 without - any parameters (for its side-effect) and then invoke func2 + any parameters (for its side effect) and then invoke func2 with whatever parameters were passed, returning its result. """ @@ -361,6 +321,17 @@ def first_invoke(func1, func2): return wrapper +method_caller = first_invoke( + lambda: warnings.warn( + '`jaraco.functools.method_caller` is deprecated, ' + 'use `operator.methodcaller` instead', + DeprecationWarning, + stacklevel=3, + ), + operator.methodcaller, +) + + def retry_call(func, cleanup=lambda: None, retries=0, trap=()): """ Given a callable func, trap the indicated exceptions @@ -369,7 +340,7 @@ def retry_call(func, cleanup=lambda: None, retries=0, trap=()): to propagate. """ attempts = itertools.count() if retries == float('inf') else range(retries) - for attempt in attempts: + for _ in attempts: try: return func() except trap: @@ -406,7 +377,7 @@ def retry(*r_args, **r_kwargs): def print_yielded(func): """ - Convert a generator into a function that prints all yielded elements + Convert a generator into a function that prints all yielded elements. >>> @print_yielded ... def x(): @@ -422,7 +393,7 @@ def print_yielded(func): def pass_none(func): """ - Wrap func so it's not called if its first param is None + Wrap func so it's not called if its first param is None. >>> print_text = pass_none(print) >>> print_text('text') @@ -431,9 +402,10 @@ def pass_none(func): """ @functools.wraps(func) - def wrapper(param, *args, **kwargs): + def wrapper(param, /, *args, **kwargs): if param is not None: return func(param, *args, **kwargs) + return None return wrapper @@ -507,7 +479,7 @@ def save_method_args(method): args_and_kwargs = collections.namedtuple('args_and_kwargs', 'args kwargs') @functools.wraps(method) - def wrapper(self, *args, **kwargs): + def wrapper(self, /, *args, **kwargs): attr_name = '_saved_' + method.__name__ attr = args_and_kwargs(args, kwargs) setattr(self, attr_name, attr) @@ -554,3 +526,108 @@ def except_(*exceptions, replace=None, use=None): return wrapper return decorate + + +def identity(x): + """ + Return the argument. + + >>> o = object() + >>> identity(o) is o + True + """ + return x + + +def bypass_when(check, *, _op=identity): + """ + Decorate a function to return its parameter when ``check``. + + >>> bypassed = [] # False + + >>> @bypass_when(bypassed) + ... def double(x): + ... return x * 2 + >>> double(2) + 4 + >>> bypassed[:] = [object()] # True + >>> double(2) + 2 + """ + + def decorate(func): + @functools.wraps(func) + def wrapper(param, /): + return param if _op(check) else func(param) + + return wrapper + + return decorate + + +def bypass_unless(check): + """ + Decorate a function to return its parameter unless ``check``. + + >>> enabled = [object()] # True + + >>> @bypass_unless(enabled) + ... def double(x): + ... return x * 2 + >>> double(2) + 4 + >>> del enabled[:] # False + >>> double(2) + 2 + """ + return bypass_when(check, _op=operator.not_) + + +@functools.singledispatch +def _splat_inner(args, func): + """Splat args to func.""" + return func(*args) + + +@_splat_inner.register +def _(args: collections.abc.Mapping, func): + """Splat kargs to func as kwargs.""" + return func(**args) + + +def splat(func): + """ + Wrap func to expect its parameters to be passed positionally in a tuple. + + Has a similar effect to that of ``itertools.starmap`` over + simple ``map``. + + >>> pairs = [(-1, 1), (0, 2)] + >>> pkg_resources.extern.more_itertools.consume(itertools.starmap(print, pairs)) + -1 1 + 0 2 + >>> pkg_resources.extern.more_itertools.consume(map(splat(print), pairs)) + -1 1 + 0 2 + + The approach generalizes to other iterators that don't have a "star" + equivalent, such as a "starfilter". + + >>> list(filter(splat(operator.add), pairs)) + [(0, 2)] + + Splat also accepts a mapping argument. + + >>> def is_nice(msg, code): + ... return "smile" in msg or code == 0 + >>> msgs = [ + ... dict(msg='smile!', code=20), + ... dict(msg='error :(', code=1), + ... dict(msg='unknown', code=0), + ... ] + >>> for msg in filter(splat(is_nice), msgs): + ... print(msg) + {'msg': 'smile!', 'code': 20} + {'msg': 'unknown', 'code': 0} + """ + return functools.wraps(func)(functools.partial(_splat_inner, func=func)) diff --git a/contrib/python/setuptools/py3/pkg_resources/_vendor/jaraco/functools/__init__.pyi b/contrib/python/setuptools/py3/pkg_resources/_vendor/jaraco/functools/__init__.pyi new file mode 100644 index 0000000000..c2b9ab1757 --- /dev/null +++ b/contrib/python/setuptools/py3/pkg_resources/_vendor/jaraco/functools/__init__.pyi @@ -0,0 +1,128 @@ +from collections.abc import Callable, Hashable, Iterator +from functools import partial +from operator import methodcaller +import sys +from typing import ( + Any, + Generic, + Protocol, + TypeVar, + overload, +) + +if sys.version_info >= (3, 10): + from typing import Concatenate, ParamSpec +else: + from typing_extensions import Concatenate, ParamSpec + +_P = ParamSpec('_P') +_R = TypeVar('_R') +_T = TypeVar('_T') +_R1 = TypeVar('_R1') +_R2 = TypeVar('_R2') +_V = TypeVar('_V') +_S = TypeVar('_S') +_R_co = TypeVar('_R_co', covariant=True) + +class _OnceCallable(Protocol[_P, _R]): + saved_result: _R + reset: Callable[[], None] + def __call__(self, *args: _P.args, **kwargs: _P.kwargs) -> _R: ... + +class _ProxyMethodCacheWrapper(Protocol[_R_co]): + cache_clear: Callable[[], None] + def __call__(self, *args: Hashable, **kwargs: Hashable) -> _R_co: ... + +class _MethodCacheWrapper(Protocol[_R_co]): + def cache_clear(self) -> None: ... + def __call__(self, *args: Hashable, **kwargs: Hashable) -> _R_co: ... + +# `compose()` overloads below will cover most use cases. + +@overload +def compose( + __func1: Callable[[_R], _T], + __func2: Callable[_P, _R], + /, +) -> Callable[_P, _T]: ... +@overload +def compose( + __func1: Callable[[_R], _T], + __func2: Callable[[_R1], _R], + __func3: Callable[_P, _R1], + /, +) -> Callable[_P, _T]: ... +@overload +def compose( + __func1: Callable[[_R], _T], + __func2: Callable[[_R2], _R], + __func3: Callable[[_R1], _R2], + __func4: Callable[_P, _R1], + /, +) -> Callable[_P, _T]: ... +def once(func: Callable[_P, _R]) -> _OnceCallable[_P, _R]: ... +def method_cache( + method: Callable[..., _R], + cache_wrapper: Callable[[Callable[..., _R]], _MethodCacheWrapper[_R]] = ..., +) -> _MethodCacheWrapper[_R] | _ProxyMethodCacheWrapper[_R]: ... +def apply( + transform: Callable[[_R], _T] +) -> Callable[[Callable[_P, _R]], Callable[_P, _T]]: ... +def result_invoke( + action: Callable[[_R], Any] +) -> Callable[[Callable[_P, _R]], Callable[_P, _R]]: ... +def invoke( + f: Callable[_P, _R], /, *args: _P.args, **kwargs: _P.kwargs +) -> Callable[_P, _R]: ... +def call_aside( + f: Callable[_P, _R], *args: _P.args, **kwargs: _P.kwargs +) -> Callable[_P, _R]: ... + +class Throttler(Generic[_R]): + last_called: float + func: Callable[..., _R] + max_rate: float + def __init__( + self, func: Callable[..., _R] | Throttler[_R], max_rate: float = ... + ) -> None: ... + def reset(self) -> None: ... + def __call__(self, *args: Any, **kwargs: Any) -> _R: ... + def __get__(self, obj: Any, owner: type[Any] | None = ...) -> Callable[..., _R]: ... + +def first_invoke( + func1: Callable[..., Any], func2: Callable[_P, _R] +) -> Callable[_P, _R]: ... + +method_caller: Callable[..., methodcaller] + +def retry_call( + func: Callable[..., _R], + cleanup: Callable[..., None] = ..., + retries: int | float = ..., + trap: type[BaseException] | tuple[type[BaseException], ...] = ..., +) -> _R: ... +def retry( + cleanup: Callable[..., None] = ..., + retries: int | float = ..., + trap: type[BaseException] | tuple[type[BaseException], ...] = ..., +) -> Callable[[Callable[..., _R]], Callable[..., _R]]: ... +def print_yielded(func: Callable[_P, Iterator[Any]]) -> Callable[_P, None]: ... +def pass_none( + func: Callable[Concatenate[_T, _P], _R] +) -> Callable[Concatenate[_T, _P], _R]: ... +def assign_params( + func: Callable[..., _R], namespace: dict[str, Any] +) -> partial[_R]: ... +def save_method_args( + method: Callable[Concatenate[_S, _P], _R] +) -> Callable[Concatenate[_S, _P], _R]: ... +def except_( + *exceptions: type[BaseException], replace: Any = ..., use: Any = ... +) -> Callable[[Callable[_P, Any]], Callable[_P, Any]]: ... +def identity(x: _T) -> _T: ... +def bypass_when( + check: _V, *, _op: Callable[[_V], Any] = ... +) -> Callable[[Callable[[_T], _R]], Callable[[_T], _T | _R]]: ... +def bypass_unless( + check: Any, +) -> Callable[[Callable[[_T], _R]], Callable[[_T], _T | _R]]: ... diff --git a/contrib/python/setuptools/py3/pkg_resources/_vendor/jaraco/functools/py.typed b/contrib/python/setuptools/py3/pkg_resources/_vendor/jaraco/functools/py.typed new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/contrib/python/setuptools/py3/pkg_resources/_vendor/jaraco/functools/py.typed diff --git a/contrib/python/setuptools/py3/pkg_resources/_vendor/more_itertools/__init__.py b/contrib/python/setuptools/py3/pkg_resources/_vendor/more_itertools/__init__.py index 66443971df..aff94a9abd 100644 --- a/contrib/python/setuptools/py3/pkg_resources/_vendor/more_itertools/__init__.py +++ b/contrib/python/setuptools/py3/pkg_resources/_vendor/more_itertools/__init__.py @@ -3,4 +3,4 @@ from .more import * # noqa from .recipes import * # noqa -__version__ = '9.1.0' +__version__ = '10.2.0' diff --git a/contrib/python/setuptools/py3/pkg_resources/_vendor/more_itertools/more.py b/contrib/python/setuptools/py3/pkg_resources/_vendor/more_itertools/more.py index e0e2d3de92..d0957681f5 100644 --- a/contrib/python/setuptools/py3/pkg_resources/_vendor/more_itertools/more.py +++ b/contrib/python/setuptools/py3/pkg_resources/_vendor/more_itertools/more.py @@ -2,7 +2,7 @@ import warnings from collections import Counter, defaultdict, deque, abc from collections.abc import Sequence -from functools import partial, reduce, wraps +from functools import cached_property, partial, reduce, wraps from heapq import heapify, heapreplace, heappop from itertools import ( chain, @@ -17,8 +17,9 @@ from itertools import ( takewhile, tee, zip_longest, + product, ) -from math import exp, factorial, floor, log +from math import exp, factorial, floor, log, perm, comb from queue import Empty, Queue from random import random, randrange, uniform from operator import itemgetter, mul, sub, gt, lt, ge, le @@ -36,6 +37,7 @@ from .recipes import ( take, unique_everseen, all_equal, + batched, ) __all__ = [ @@ -53,6 +55,7 @@ __all__ = [ 'circular_shifts', 'collapse', 'combination_index', + 'combination_with_replacement_index', 'consecutive_groups', 'constrained_batches', 'consumer', @@ -65,8 +68,10 @@ __all__ = [ 'divide', 'duplicates_everseen', 'duplicates_justseen', + 'classify_unique', 'exactly_n', 'filter_except', + 'filter_map', 'first', 'gray_product', 'groupby_transform', @@ -80,6 +85,7 @@ __all__ = [ 'is_sorted', 'islice_extended', 'iterate', + 'iter_suppress', 'last', 'locate', 'longest_common_prefix', @@ -93,10 +99,13 @@ __all__ = [ 'nth_or_last', 'nth_permutation', 'nth_product', + 'nth_combination_with_replacement', 'numeric_range', 'one', 'only', + 'outer_product', 'padded', + 'partial_product', 'partitions', 'peekable', 'permutation_index', @@ -125,6 +134,7 @@ __all__ = [ 'strictly_n', 'substrings', 'substrings_indexes', + 'takewhile_inclusive', 'time_limited', 'unique_in_window', 'unique_to_each', @@ -191,15 +201,14 @@ def first(iterable, default=_marker): ``next(iter(iterable), default)``. """ - try: - return next(iter(iterable)) - except StopIteration as e: - if default is _marker: - raise ValueError( - 'first() was called on an empty iterable, and no ' - 'default value was provided.' - ) from e - return default + for item in iterable: + return item + if default is _marker: + raise ValueError( + 'first() was called on an empty iterable, and no ' + 'default value was provided.' + ) + return default def last(iterable, default=_marker): @@ -472,7 +481,10 @@ def iterate(func, start): """ while True: yield start - start = func(start) + try: + start = func(start) + except StopIteration: + break def with_iter(context_manager): @@ -572,6 +584,9 @@ def strictly_n(iterable, n, too_short=None, too_long=None): >>> list(strictly_n(iterable, n)) ['a', 'b', 'c', 'd'] + Note that the returned iterable must be consumed in order for the check to + be made. + By default, *too_short* and *too_long* are functions that raise ``ValueError``. @@ -909,7 +924,7 @@ def substrings_indexes(seq, reverse=False): class bucket: - """Wrap *iterable* and return an object that buckets it iterable into + """Wrap *iterable* and return an object that buckets the iterable into child iterables based on a *key* function. >>> iterable = ['a1', 'b1', 'c1', 'a2', 'b2', 'c2', 'b3'] @@ -2069,7 +2084,6 @@ class numeric_range(abc.Sequence, abc.Hashable): if self._step == self._zero: raise ValueError('numeric_range() arg 3 must not be zero') self._growing = self._step > self._zero - self._init_len() def __bool__(self): if self._growing: @@ -2145,7 +2159,8 @@ class numeric_range(abc.Sequence, abc.Hashable): def __len__(self): return self._len - def _init_len(self): + @cached_property + def _len(self): if self._growing: start = self._start stop = self._stop @@ -2156,10 +2171,10 @@ class numeric_range(abc.Sequence, abc.Hashable): step = -self._step distance = stop - start if distance <= self._zero: - self._len = 0 + return 0 else: # distance > 0 and step > 0: regular euclidean division q, r = divmod(distance, step) - self._len = int(q) + int(r != self._zero) + return int(q) + int(r != self._zero) def __reduce__(self): return numeric_range, (self._start, self._stop, self._step) @@ -2699,6 +2714,9 @@ class seekable: >>> it.seek(10) >>> next(it) '10' + >>> it.relative_seek(-2) # Seeking relative to the current position + >>> next(it) + '9' >>> it.seek(20) # Seeking past the end of the source isn't a problem >>> list(it) [] @@ -2812,6 +2830,10 @@ class seekable: if remainder > 0: consume(self, remainder) + def relative_seek(self, count): + index = len(self._cache) + self.seek(max(index + count, 0)) + class run_length: """ @@ -3205,6 +3227,8 @@ class time_limited: stops if the time elapsed is greater than *limit_seconds*. If your time limit is 1 second, but it takes 2 seconds to generate the first item from the iterable, the function will run for 2 seconds and not yield anything. + As a special case, when *limit_seconds* is zero, the iterator never + returns anything. """ @@ -3220,6 +3244,9 @@ class time_limited: return self def __next__(self): + if self.limit_seconds == 0: + self.timed_out = True + raise StopIteration item = next(self._iterable) if monotonic() - self._start_time > self.limit_seconds: self.timed_out = True @@ -3339,7 +3366,7 @@ def iequals(*iterables): >>> iequals("abc", "acb") False - Not to be confused with :func:`all_equals`, which checks whether all + Not to be confused with :func:`all_equal`, which checks whether all elements of iterable are equal to each other. """ @@ -3835,7 +3862,7 @@ def nth_permutation(iterable, r, index): elif not 0 <= r < n: raise ValueError else: - c = factorial(n) // factorial(n - r) + c = perm(n, r) if index < 0: index += c @@ -3858,6 +3885,52 @@ def nth_permutation(iterable, r, index): return tuple(map(pool.pop, result)) +def nth_combination_with_replacement(iterable, r, index): + """Equivalent to + ``list(combinations_with_replacement(iterable, r))[index]``. + + + The subsequences with repetition of *iterable* that are of length *r* can + be ordered lexicographically. :func:`nth_combination_with_replacement` + computes the subsequence at sort position *index* directly, without + computing the previous subsequences with replacement. + + >>> nth_combination_with_replacement(range(5), 3, 5) + (0, 1, 1) + + ``ValueError`` will be raised If *r* is negative or greater than the length + of *iterable*. + ``IndexError`` will be raised if the given *index* is invalid. + """ + pool = tuple(iterable) + n = len(pool) + if (r < 0) or (r > n): + raise ValueError + + c = comb(n + r - 1, r) + + if index < 0: + index += c + + if (index < 0) or (index >= c): + raise IndexError + + result = [] + i = 0 + while r: + r -= 1 + while n >= 0: + num_combs = comb(n + r - 1, r) + if index < num_combs: + break + n -= 1 + i += 1 + index -= num_combs + result.append(pool[i]) + + return tuple(result) + + def value_chain(*args): """Yield all arguments passed to the function in the same order in which they were passed. If an argument itself is iterable then iterate over its @@ -3949,9 +4022,66 @@ def combination_index(element, iterable): for i, j in enumerate(reversed(indexes), start=1): j = n - j if i <= j: - index += factorial(j) // (factorial(i) * factorial(j - i)) + index += comb(j, i) + + return comb(n + 1, k + 1) - index + + +def combination_with_replacement_index(element, iterable): + """Equivalent to + ``list(combinations_with_replacement(iterable, r)).index(element)`` + + The subsequences with repetition of *iterable* that are of length *r* can + be ordered lexicographically. :func:`combination_with_replacement_index` + computes the index of the first *element*, without computing the previous + combinations with replacement. + + >>> combination_with_replacement_index('adf', 'abcdefg') + 20 + + ``ValueError`` will be raised if the given *element* isn't one of the + combinations with replacement of *iterable*. + """ + element = tuple(element) + l = len(element) + element = enumerate(element) + + k, y = next(element, (None, None)) + if k is None: + return 0 + + indexes = [] + pool = tuple(iterable) + for n, x in enumerate(pool): + while x == y: + indexes.append(n) + tmp, y = next(element, (None, None)) + if tmp is None: + break + else: + k = tmp + if y is None: + break + else: + raise ValueError( + 'element is not a combination with replacement of iterable' + ) + + n = len(pool) + occupations = [0] * n + for p in indexes: + occupations[p] += 1 + + index = 0 + cumulative_sum = 0 + for k in range(1, n): + cumulative_sum += occupations[k - 1] + j = l + n - 1 - k - cumulative_sum + i = n - k + if i <= j: + index += comb(j, i) - return factorial(n + 1) // (factorial(k + 1) * factorial(n - k)) - index + return index def permutation_index(element, iterable): @@ -4056,26 +4186,20 @@ def _chunked_even_finite(iterable, N, n): num_full = N - partial_size * num_lists num_partial = num_lists - num_full - buffer = [] - iterator = iter(iterable) - # Yield num_full lists of full_size - for x in iterator: - buffer.append(x) - if len(buffer) == full_size: - yield buffer - buffer = [] - num_full -= 1 - if num_full <= 0: - break + partial_start_idx = num_full * full_size + if full_size > 0: + for i in range(0, partial_start_idx, full_size): + yield list(islice(iterable, i, i + full_size)) # Yield num_partial lists of partial_size - for x in iterator: - buffer.append(x) - if len(buffer) == partial_size: - yield buffer - buffer = [] - num_partial -= 1 + if partial_size > 0: + for i in range( + partial_start_idx, + partial_start_idx + (num_partial * partial_size), + partial_size, + ): + yield list(islice(iterable, i, i + partial_size)) def zip_broadcast(*objects, scalar_types=(str, bytes), strict=False): @@ -4114,30 +4238,23 @@ def zip_broadcast(*objects, scalar_types=(str, bytes), strict=False): if not size: return + new_item = [None] * size iterables, iterable_positions = [], [] - scalars, scalar_positions = [], [] for i, obj in enumerate(objects): if is_scalar(obj): - scalars.append(obj) - scalar_positions.append(i) + new_item[i] = obj else: iterables.append(iter(obj)) iterable_positions.append(i) - if len(scalars) == size: + if not iterables: yield tuple(objects) return zipper = _zip_equal if strict else zip for item in zipper(*iterables): - new_item = [None] * size - - for i, elem in zip(iterable_positions, item): - new_item[i] = elem - - for i, elem in zip(scalar_positions, scalars): - new_item[i] = elem - + for i, new_item[i] in zip(iterable_positions, item): + pass yield tuple(new_item) @@ -4162,22 +4279,23 @@ def unique_in_window(iterable, n, key=None): raise ValueError('n must be greater than 0') window = deque(maxlen=n) - uniques = set() + counts = defaultdict(int) use_key = key is not None for item in iterable: - k = key(item) if use_key else item - if k in uniques: - continue - - if len(uniques) == n: - uniques.discard(window[0]) + if len(window) == n: + to_discard = window[0] + if counts[to_discard] == 1: + del counts[to_discard] + else: + counts[to_discard] -= 1 - uniques.add(k) + k = key(item) if use_key else item + if k not in counts: + yield item + counts[k] += 1 window.append(k) - yield item - def duplicates_everseen(iterable, key=None): """Yield duplicate elements after their first appearance. @@ -4187,7 +4305,7 @@ def duplicates_everseen(iterable, key=None): >>> list(duplicates_everseen('AaaBbbCccAaa', str.lower)) ['a', 'a', 'b', 'b', 'c', 'c', 'A', 'a', 'a'] - This function is analagous to :func:`unique_everseen` and is subject to + This function is analogous to :func:`unique_everseen` and is subject to the same performance considerations. """ @@ -4217,15 +4335,52 @@ def duplicates_justseen(iterable, key=None): >>> list(duplicates_justseen('AaaBbbCccAaa', str.lower)) ['a', 'a', 'b', 'b', 'c', 'c', 'a', 'a'] - This function is analagous to :func:`unique_justseen`. + This function is analogous to :func:`unique_justseen`. """ - return flatten( - map( - lambda group_tuple: islice_extended(group_tuple[1])[1:], - groupby(iterable, key), - ) - ) + return flatten(g for _, g in groupby(iterable, key) for _ in g) + + +def classify_unique(iterable, key=None): + """Classify each element in terms of its uniqueness. + + For each element in the input iterable, return a 3-tuple consisting of: + + 1. The element itself + 2. ``False`` if the element is equal to the one preceding it in the input, + ``True`` otherwise (i.e. the equivalent of :func:`unique_justseen`) + 3. ``False`` if this element has been seen anywhere in the input before, + ``True`` otherwise (i.e. the equivalent of :func:`unique_everseen`) + + >>> list(classify_unique('otto')) # doctest: +NORMALIZE_WHITESPACE + [('o', True, True), + ('t', True, True), + ('t', False, False), + ('o', True, False)] + + This function is analogous to :func:`unique_everseen` and is subject to + the same performance considerations. + + """ + seen_set = set() + seen_list = [] + use_key = key is not None + previous = None + + for i, element in enumerate(iterable): + k = key(element) if use_key else element + is_unique_justseen = not i or previous != k + previous = k + is_unique_everseen = False + try: + if k not in seen_set: + seen_set.add(k) + is_unique_everseen = True + except TypeError: + if k not in seen_list: + seen_list.append(k) + is_unique_everseen = True + yield element, is_unique_justseen, is_unique_everseen def minmax(iterable_or_value, *others, key=None, default=_marker): @@ -4389,3 +4544,112 @@ def gray_product(*iterables): o[j] = -o[j] f[j] = f[j + 1] f[j + 1] = j + 1 + + +def partial_product(*iterables): + """Yields tuples containing one item from each iterator, with subsequent + tuples changing a single item at a time by advancing each iterator until it + is exhausted. This sequence guarantees every value in each iterable is + output at least once without generating all possible combinations. + + This may be useful, for example, when testing an expensive function. + + >>> list(partial_product('AB', 'C', 'DEF')) + [('A', 'C', 'D'), ('B', 'C', 'D'), ('B', 'C', 'E'), ('B', 'C', 'F')] + """ + + iterators = list(map(iter, iterables)) + + try: + prod = [next(it) for it in iterators] + except StopIteration: + return + yield tuple(prod) + + for i, it in enumerate(iterators): + for prod[i] in it: + yield tuple(prod) + + +def takewhile_inclusive(predicate, iterable): + """A variant of :func:`takewhile` that yields one additional element. + + >>> list(takewhile_inclusive(lambda x: x < 5, [1, 4, 6, 4, 1])) + [1, 4, 6] + + :func:`takewhile` would return ``[1, 4]``. + """ + for x in iterable: + yield x + if not predicate(x): + break + + +def outer_product(func, xs, ys, *args, **kwargs): + """A generalized outer product that applies a binary function to all + pairs of items. Returns a 2D matrix with ``len(xs)`` rows and ``len(ys)`` + columns. + Also accepts ``*args`` and ``**kwargs`` that are passed to ``func``. + + Multiplication table: + + >>> list(outer_product(mul, range(1, 4), range(1, 6))) + [(1, 2, 3, 4, 5), (2, 4, 6, 8, 10), (3, 6, 9, 12, 15)] + + Cross tabulation: + + >>> xs = ['A', 'B', 'A', 'A', 'B', 'B', 'A', 'A', 'B', 'B'] + >>> ys = ['X', 'X', 'X', 'Y', 'Z', 'Z', 'Y', 'Y', 'Z', 'Z'] + >>> rows = list(zip(xs, ys)) + >>> count_rows = lambda x, y: rows.count((x, y)) + >>> list(outer_product(count_rows, sorted(set(xs)), sorted(set(ys)))) + [(2, 3, 0), (1, 0, 4)] + + Usage with ``*args`` and ``**kwargs``: + + >>> animals = ['cat', 'wolf', 'mouse'] + >>> list(outer_product(min, animals, animals, key=len)) + [('cat', 'cat', 'cat'), ('cat', 'wolf', 'wolf'), ('cat', 'wolf', 'mouse')] + """ + ys = tuple(ys) + return batched( + starmap(lambda x, y: func(x, y, *args, **kwargs), product(xs, ys)), + n=len(ys), + ) + + +def iter_suppress(iterable, *exceptions): + """Yield each of the items from *iterable*. If the iteration raises one of + the specified *exceptions*, that exception will be suppressed and iteration + will stop. + + >>> from itertools import chain + >>> def breaks_at_five(x): + ... while True: + ... if x >= 5: + ... raise RuntimeError + ... yield x + ... x += 1 + >>> it_1 = iter_suppress(breaks_at_five(1), RuntimeError) + >>> it_2 = iter_suppress(breaks_at_five(2), RuntimeError) + >>> list(chain(it_1, it_2)) + [1, 2, 3, 4, 2, 3, 4] + """ + try: + yield from iterable + except exceptions: + return + + +def filter_map(func, iterable): + """Apply *func* to every element of *iterable*, yielding only those which + are not ``None``. + + >>> elems = ['1', 'a', '2', 'b', '3'] + >>> list(filter_map(lambda s: int(s) if s.isnumeric() else None, elems)) + [1, 2, 3] + """ + for x in iterable: + y = func(x) + if y is not None: + yield y diff --git a/contrib/python/setuptools/py3/pkg_resources/_vendor/more_itertools/more.pyi b/contrib/python/setuptools/py3/pkg_resources/_vendor/more_itertools/more.pyi index 75c5232c1a..9a5fc911a3 100644 --- a/contrib/python/setuptools/py3/pkg_resources/_vendor/more_itertools/more.pyi +++ b/contrib/python/setuptools/py3/pkg_resources/_vendor/more_itertools/more.pyi @@ -29,7 +29,7 @@ _U = TypeVar('_U') _V = TypeVar('_V') _W = TypeVar('_W') _T_co = TypeVar('_T_co', covariant=True) -_GenFn = TypeVar('_GenFn', bound=Callable[..., Iterator[object]]) +_GenFn = TypeVar('_GenFn', bound=Callable[..., Iterator[Any]]) _Raisable = BaseException | Type[BaseException] @type_check_only @@ -74,7 +74,7 @@ class peekable(Generic[_T], Iterator[_T]): def __getitem__(self, index: slice) -> list[_T]: ... def consumer(func: _GenFn) -> _GenFn: ... -def ilen(iterable: Iterable[object]) -> int: ... +def ilen(iterable: Iterable[_T]) -> int: ... def iterate(func: Callable[[_T], _T], start: _T) -> Iterator[_T]: ... def with_iter( context_manager: ContextManager[Iterable[_T]], @@ -116,7 +116,7 @@ class bucket(Generic[_T, _U], Container[_U]): self, iterable: Iterable[_T], key: Callable[[_T], _U], - validator: Callable[[object], object] | None = ..., + validator: Callable[[_U], object] | None = ..., ) -> None: ... def __contains__(self, value: object) -> bool: ... def __iter__(self) -> Iterator[_U]: ... @@ -383,7 +383,7 @@ def mark_ends( iterable: Iterable[_T], ) -> Iterable[tuple[bool, bool, _T]]: ... def locate( - iterable: Iterable[object], + iterable: Iterable[_T], pred: Callable[..., Any] = ..., window_size: int | None = ..., ) -> Iterator[int]: ... @@ -440,6 +440,7 @@ class seekable(Generic[_T], Iterator[_T]): def peek(self, default: _U) -> _T | _U: ... def elements(self) -> SequenceView[_T]: ... def seek(self, index: int) -> None: ... + def relative_seek(self, count: int) -> None: ... class run_length: @staticmethod @@ -578,6 +579,9 @@ def all_unique( iterable: Iterable[_T], key: Callable[[_T], _U] | None = ... ) -> bool: ... def nth_product(index: int, *args: Iterable[_T]) -> tuple[_T, ...]: ... +def nth_combination_with_replacement( + iterable: Iterable[_T], r: int, index: int +) -> tuple[_T, ...]: ... def nth_permutation( iterable: Iterable[_T], r: int, index: int ) -> tuple[_T, ...]: ... @@ -586,6 +590,9 @@ def product_index(element: Iterable[_T], *args: Iterable[_T]) -> int: ... def combination_index( element: Iterable[_T], iterable: Iterable[_T] ) -> int: ... +def combination_with_replacement_index( + element: Iterable[_T], iterable: Iterable[_T] +) -> int: ... def permutation_index( element: Iterable[_T], iterable: Iterable[_T] ) -> int: ... @@ -611,6 +618,9 @@ def duplicates_everseen( def duplicates_justseen( iterable: Iterable[_T], key: Callable[[_T], _U] | None = ... ) -> Iterator[_T]: ... +def classify_unique( + iterable: Iterable[_T], key: Callable[[_T], _U] | None = ... +) -> Iterator[tuple[_T, bool, bool]]: ... class _SupportsLessThan(Protocol): def __lt__(self, __other: Any) -> bool: ... @@ -655,12 +665,31 @@ def minmax( def longest_common_prefix( iterables: Iterable[Iterable[_T]], ) -> Iterator[_T]: ... -def iequals(*iterables: Iterable[object]) -> bool: ... +def iequals(*iterables: Iterable[Any]) -> bool: ... def constrained_batches( - iterable: Iterable[object], + iterable: Iterable[_T], max_size: int, max_count: int | None = ..., get_len: Callable[[_T], object] = ..., strict: bool = ..., ) -> Iterator[tuple[_T]]: ... def gray_product(*iterables: Iterable[_T]) -> Iterator[tuple[_T, ...]]: ... +def partial_product(*iterables: Iterable[_T]) -> Iterator[tuple[_T, ...]]: ... +def takewhile_inclusive( + predicate: Callable[[_T], bool], iterable: Iterable[_T] +) -> Iterator[_T]: ... +def outer_product( + func: Callable[[_T, _U], _V], + xs: Iterable[_T], + ys: Iterable[_U], + *args: Any, + **kwargs: Any, +) -> Iterator[tuple[_V, ...]]: ... +def iter_suppress( + iterable: Iterable[_T], + *exceptions: Type[BaseException], +) -> Iterator[_T]: ... +def filter_map( + func: Callable[[_T], _V | None], + iterable: Iterable[_T], +) -> Iterator[_V]: ... diff --git a/contrib/python/setuptools/py3/pkg_resources/_vendor/more_itertools/recipes.py b/contrib/python/setuptools/py3/pkg_resources/_vendor/more_itertools/recipes.py index 3facc2e3a6..145e3cb5bd 100644 --- a/contrib/python/setuptools/py3/pkg_resources/_vendor/more_itertools/recipes.py +++ b/contrib/python/setuptools/py3/pkg_resources/_vendor/more_itertools/recipes.py @@ -9,11 +9,10 @@ Some backward-compatible usability improvements have been made. """ import math import operator -import warnings from collections import deque from collections.abc import Sized -from functools import reduce +from functools import partial, reduce from itertools import ( chain, combinations, @@ -52,10 +51,13 @@ __all__ = [ 'pad_none', 'pairwise', 'partition', + 'polynomial_eval', 'polynomial_from_roots', + 'polynomial_derivative', 'powerset', 'prepend', 'quantify', + 'reshape', 'random_combination_with_replacement', 'random_combination', 'random_permutation', @@ -65,9 +67,11 @@ __all__ = [ 'sieve', 'sliding_window', 'subslices', + 'sum_of_squares', 'tabulate', 'tail', 'take', + 'totient', 'transpose', 'triplewise', 'unique_everseen', @@ -77,6 +81,18 @@ __all__ = [ _marker = object() +# zip with strict is available for Python 3.10+ +try: + zip(strict=True) +except TypeError: + _zip_strict = zip +else: + _zip_strict = partial(zip, strict=True) + +# math.sumprod is available for Python 3.12+ +_sumprod = getattr(math, 'sumprod', lambda x, y: dotproduct(x, y)) + + def take(n, iterable): """Return first *n* items of the iterable as a list. @@ -293,7 +309,7 @@ def _pairwise(iterable): """ a, b = tee(iterable) next(b, None) - yield from zip(a, b) + return zip(a, b) try: @@ -303,7 +319,7 @@ except ImportError: else: def pairwise(iterable): - yield from itertools_pairwise(iterable) + return itertools_pairwise(iterable) pairwise.__doc__ = _pairwise.__doc__ @@ -334,13 +350,9 @@ def _zip_equal(*iterables): for i, it in enumerate(iterables[1:], 1): size = len(it) if size != first_size: - break - else: - # If we didn't break out, we can use the built-in zip. - return zip(*iterables) - - # If we did break out, there was a mismatch. - raise UnequalIterablesError(details=(first_size, i, size)) + raise UnequalIterablesError(details=(first_size, i, size)) + # All sizes are equal, we can use the built-in zip. + return zip(*iterables) # If any one of the iterables didn't have a length, start reading # them until one runs out. except TypeError: @@ -433,12 +445,9 @@ def partition(pred, iterable): if pred is None: pred = bool - evaluations = ((pred(x), x) for x in iterable) - t1, t2 = tee(evaluations) - return ( - (x for (cond, x) in t1 if not cond), - (x for (cond, x) in t2 if cond), - ) + t1, t2, p = tee(iterable, 3) + p1, p2 = tee(map(pred, p)) + return (compress(t1, map(operator.not_, p1)), compress(t2, p2)) def powerset(iterable): @@ -486,7 +495,7 @@ def unique_everseen(iterable, key=None): >>> list(unique_everseen(iterable, key=tuple)) # Faster [[1, 2], [2, 3]] - Similary, you may want to convert unhashable ``set`` objects with + Similarly, you may want to convert unhashable ``set`` objects with ``key=frozenset``. For ``dict`` objects, ``key=lambda x: frozenset(x.items())`` can be used. @@ -518,6 +527,9 @@ def unique_justseen(iterable, key=None): ['A', 'B', 'C', 'A', 'D'] """ + if key is None: + return map(operator.itemgetter(0), groupby(iterable)) + return map(next, map(operator.itemgetter(1), groupby(iterable, key))) @@ -712,12 +724,14 @@ def convolve(signal, kernel): is immediately consumed and stored. """ + # This implementation intentionally doesn't match the one in the itertools + # documentation. kernel = tuple(kernel)[::-1] n = len(kernel) window = deque([0], maxlen=n) * n for x in chain(signal, repeat(0, n - 1)): window.append(x) - yield sum(map(operator.mul, kernel, window)) + yield _sumprod(kernel, window) def before_and_after(predicate, it): @@ -778,9 +792,7 @@ def sliding_window(iterable, n): For a variant with more features, see :func:`windowed`. """ it = iter(iterable) - window = deque(islice(it, n), maxlen=n) - if len(window) == n: - yield tuple(window) + window = deque(islice(it, n - 1), maxlen=n) for x in it: window.append(x) yield tuple(window) @@ -807,39 +819,38 @@ def polynomial_from_roots(roots): >>> polynomial_from_roots(roots) # x^3 - 4 * x^2 - 17 * x + 60 [1, -4, -17, 60] """ - # Use math.prod for Python 3.8+, - prod = getattr(math, 'prod', lambda x: reduce(operator.mul, x, 1)) - roots = list(map(operator.neg, roots)) - return [ - sum(map(prod, combinations(roots, k))) for k in range(len(roots) + 1) - ] + factors = zip(repeat(1), map(operator.neg, roots)) + return list(reduce(convolve, factors, [1])) -def iter_index(iterable, value, start=0): +def iter_index(iterable, value, start=0, stop=None): """Yield the index of each place in *iterable* that *value* occurs, - beginning with index *start*. + beginning with index *start* and ending before index *stop*. See :func:`locate` for a more general means of finding the indexes associated with particular values. >>> list(iter_index('AABCADEAF', 'A')) [0, 1, 4, 7] + >>> list(iter_index('AABCADEAF', 'A', 1)) # start index is inclusive + [1, 4, 7] + >>> list(iter_index('AABCADEAF', 'A', 1, 7)) # stop index is not inclusive + [1, 4] """ - try: - seq_index = iterable.index - except AttributeError: + seq_index = getattr(iterable, 'index', None) + if seq_index is None: # Slow path for general iterables - it = islice(iterable, start, None) + it = islice(iterable, start, stop) for i, element in enumerate(it, start): if element is value or element == value: yield i else: # Fast path for sequences + stop = len(iterable) if stop is None else stop i = start - 1 try: while True: - i = seq_index(value, i + 1) - yield i + yield (i := seq_index(value, i + 1, stop)) except ValueError: pass @@ -850,81 +861,152 @@ def sieve(n): >>> list(sieve(30)) [2, 3, 5, 7, 11, 13, 17, 19, 23, 29] """ - isqrt = getattr(math, 'isqrt', lambda x: int(math.sqrt(x))) + if n > 2: + yield 2 + start = 3 data = bytearray((0, 1)) * (n // 2) - data[:3] = 0, 0, 0 - limit = isqrt(n) + 1 - for p in compress(range(limit), data): + limit = math.isqrt(n) + 1 + for p in iter_index(data, 1, start, limit): + yield from iter_index(data, 1, start, p * p) data[p * p : n : p + p] = bytes(len(range(p * p, n, p + p))) - data[2] = 1 - return iter_index(data, 1) if n > 2 else iter([]) + start = p * p + yield from iter_index(data, 1, start) -def batched(iterable, n): - """Batch data into lists of length *n*. The last batch may be shorter. +def _batched(iterable, n, *, strict=False): + """Batch data into tuples of length *n*. If the number of items in + *iterable* is not divisible by *n*: + * The last batch will be shorter if *strict* is ``False``. + * :exc:`ValueError` will be raised if *strict* is ``True``. >>> list(batched('ABCDEFG', 3)) - [['A', 'B', 'C'], ['D', 'E', 'F'], ['G']] + [('A', 'B', 'C'), ('D', 'E', 'F'), ('G',)] - This recipe is from the ``itertools`` docs. This library also provides - :func:`chunked`, which has a different implementation. + On Python 3.13 and above, this is an alias for :func:`itertools.batched`. """ - if hexversion >= 0x30C00A0: # Python 3.12.0a0 - warnings.warn( - ( - 'batched will be removed in a future version of ' - 'more-itertools. Use the standard library ' - 'itertools.batched function instead' - ), - DeprecationWarning, - ) - + if n < 1: + raise ValueError('n must be at least one') it = iter(iterable) - while True: - batch = list(islice(it, n)) - if not batch: - break + while batch := tuple(islice(it, n)): + if strict and len(batch) != n: + raise ValueError('batched(): incomplete batch') yield batch +if hexversion >= 0x30D00A2: + from itertools import batched as itertools_batched + + def batched(iterable, n, *, strict=False): + return itertools_batched(iterable, n, strict=strict) + +else: + batched = _batched + + batched.__doc__ = _batched.__doc__ + + def transpose(it): - """Swap the rows and columns of the input. + """Swap the rows and columns of the input matrix. >>> list(transpose([(1, 2, 3), (11, 22, 33)])) [(1, 11), (2, 22), (3, 33)] The caller should ensure that the dimensions of the input are compatible. + If the input is empty, no output will be produced. + """ + return _zip_strict(*it) + + +def reshape(matrix, cols): + """Reshape the 2-D input *matrix* to have a column count given by *cols*. + + >>> matrix = [(0, 1), (2, 3), (4, 5)] + >>> cols = 3 + >>> list(reshape(matrix, cols)) + [(0, 1, 2), (3, 4, 5)] """ - # TODO: when 3.9 goes end-of-life, add stric=True to this. - return zip(*it) + return batched(chain.from_iterable(matrix), cols) def matmul(m1, m2): """Multiply two matrices. + >>> list(matmul([(7, 5), (3, 5)], [(2, 5), (7, 9)])) - [[49, 80], [41, 60]] + [(49, 80), (41, 60)] The caller should ensure that the dimensions of the input matrices are compatible with each other. """ n = len(m2[0]) - return batched(starmap(dotproduct, product(m1, transpose(m2))), n) + return batched(starmap(_sumprod, product(m1, transpose(m2))), n) def factor(n): """Yield the prime factors of n. + >>> list(factor(360)) [2, 2, 2, 3, 3, 5] """ - isqrt = getattr(math, 'isqrt', lambda x: int(math.sqrt(x))) - for prime in sieve(isqrt(n) + 1): - while True: - quotient, remainder = divmod(n, prime) - if remainder: - break + for prime in sieve(math.isqrt(n) + 1): + while not n % prime: yield prime - n = quotient + n //= prime if n == 1: return - if n >= 2: + if n > 1: yield n + + +def polynomial_eval(coefficients, x): + """Evaluate a polynomial at a specific value. + + Example: evaluating x^3 - 4 * x^2 - 17 * x + 60 at x = 2.5: + + >>> coefficients = [1, -4, -17, 60] + >>> x = 2.5 + >>> polynomial_eval(coefficients, x) + 8.125 + """ + n = len(coefficients) + if n == 0: + return x * 0 # coerce zero to the type of x + powers = map(pow, repeat(x), reversed(range(n))) + return _sumprod(coefficients, powers) + + +def sum_of_squares(it): + """Return the sum of the squares of the input values. + + >>> sum_of_squares([10, 20, 30]) + 1400 + """ + return _sumprod(*tee(it)) + + +def polynomial_derivative(coefficients): + """Compute the first derivative of a polynomial. + + Example: evaluating the derivative of x^3 - 4 * x^2 - 17 * x + 60 + + >>> coefficients = [1, -4, -17, 60] + >>> derivative_coefficients = polynomial_derivative(coefficients) + >>> derivative_coefficients + [3, -8, -17] + """ + n = len(coefficients) + powers = reversed(range(1, n)) + return list(map(operator.mul, coefficients, powers)) + + +def totient(n): + """Return the count of natural numbers up to *n* that are coprime with *n*. + + >>> totient(9) + 6 + >>> totient(12) + 4 + """ + for p in unique_justseen(factor(n)): + n = n // p * (p - 1) + + return n diff --git a/contrib/python/setuptools/py3/pkg_resources/_vendor/more_itertools/recipes.pyi b/contrib/python/setuptools/py3/pkg_resources/_vendor/more_itertools/recipes.pyi index 0267ed569e..ed4c19db49 100644 --- a/contrib/python/setuptools/py3/pkg_resources/_vendor/more_itertools/recipes.pyi +++ b/contrib/python/setuptools/py3/pkg_resources/_vendor/more_itertools/recipes.pyi @@ -14,6 +14,8 @@ from typing import ( # Type and type variable definitions _T = TypeVar('_T') +_T1 = TypeVar('_T1') +_T2 = TypeVar('_T2') _U = TypeVar('_U') def take(n: int, iterable: Iterable[_T]) -> list[_T]: ... @@ -21,19 +23,19 @@ def tabulate( function: Callable[[int], _T], start: int = ... ) -> Iterator[_T]: ... def tail(n: int, iterable: Iterable[_T]) -> Iterator[_T]: ... -def consume(iterator: Iterable[object], n: int | None = ...) -> None: ... +def consume(iterator: Iterable[_T], n: int | None = ...) -> None: ... @overload def nth(iterable: Iterable[_T], n: int) -> _T | None: ... @overload def nth(iterable: Iterable[_T], n: int, default: _U) -> _T | _U: ... -def all_equal(iterable: Iterable[object]) -> bool: ... +def all_equal(iterable: Iterable[_T]) -> bool: ... def quantify( iterable: Iterable[_T], pred: Callable[[_T], bool] = ... ) -> int: ... def pad_none(iterable: Iterable[_T]) -> Iterator[_T | None]: ... def padnone(iterable: Iterable[_T]) -> Iterator[_T | None]: ... def ncycles(iterable: Iterable[_T], n: int) -> Iterator[_T]: ... -def dotproduct(vec1: Iterable[object], vec2: Iterable[object]) -> object: ... +def dotproduct(vec1: Iterable[_T1], vec2: Iterable[_T2]) -> Any: ... def flatten(listOfLists: Iterable[Iterable[_T]]) -> Iterator[_T]: ... def repeatfunc( func: Callable[..., _U], times: int | None = ..., *args: Any @@ -101,19 +103,26 @@ def sliding_window( iterable: Iterable[_T], n: int ) -> Iterator[tuple[_T, ...]]: ... def subslices(iterable: Iterable[_T]) -> Iterator[list[_T]]: ... -def polynomial_from_roots(roots: Sequence[int]) -> list[int]: ... +def polynomial_from_roots(roots: Sequence[_T]) -> list[_T]: ... def iter_index( - iterable: Iterable[object], + iterable: Iterable[_T], value: Any, start: int | None = ..., + stop: int | None = ..., ) -> Iterator[int]: ... def sieve(n: int) -> Iterator[int]: ... def batched( - iterable: Iterable[_T], - n: int, -) -> Iterator[list[_T]]: ... + iterable: Iterable[_T], n: int, *, strict: bool = False +) -> Iterator[tuple[_T]]: ... def transpose( it: Iterable[Iterable[_T]], -) -> tuple[Iterator[_T], ...]: ... -def matmul(m1: Sequence[_T], m2: Sequence[_T]) -> Iterator[list[_T]]: ... +) -> Iterator[tuple[_T, ...]]: ... +def reshape( + matrix: Iterable[Iterable[_T]], cols: int +) -> Iterator[tuple[_T, ...]]: ... +def matmul(m1: Sequence[_T], m2: Sequence[_T]) -> Iterator[tuple[_T]]: ... def factor(n: int) -> Iterator[int]: ... +def polynomial_eval(coefficients: Sequence[_T], x: _U) -> _U: ... +def sum_of_squares(it: Iterable[_T]) -> _T: ... +def polynomial_derivative(coefficients: Sequence[_T]) -> list[_T]: ... +def totient(n: int) -> int: ... diff --git a/contrib/python/setuptools/py3/pkg_resources/_vendor/packaging/__init__.py b/contrib/python/setuptools/py3/pkg_resources/_vendor/packaging/__init__.py index 13cadc7f04..e7c0aa12ca 100644 --- a/contrib/python/setuptools/py3/pkg_resources/_vendor/packaging/__init__.py +++ b/contrib/python/setuptools/py3/pkg_resources/_vendor/packaging/__init__.py @@ -6,10 +6,10 @@ __title__ = "packaging" __summary__ = "Core utilities for Python packages" __uri__ = "https://github.com/pypa/packaging" -__version__ = "23.1" +__version__ = "24.0" __author__ = "Donald Stufft and individual contributors" __email__ = "donald@stufft.io" __license__ = "BSD-2-Clause or Apache-2.0" -__copyright__ = "2014-2019 %s" % __author__ +__copyright__ = "2014 %s" % __author__ diff --git a/contrib/python/setuptools/py3/pkg_resources/_vendor/packaging/_manylinux.py b/contrib/python/setuptools/py3/pkg_resources/_vendor/packaging/_manylinux.py index 449c655be6..ad62505f3f 100644 --- a/contrib/python/setuptools/py3/pkg_resources/_vendor/packaging/_manylinux.py +++ b/contrib/python/setuptools/py3/pkg_resources/_vendor/packaging/_manylinux.py @@ -5,7 +5,7 @@ import os import re import sys import warnings -from typing import Dict, Generator, Iterator, NamedTuple, Optional, Tuple +from typing import Dict, Generator, Iterator, NamedTuple, Optional, Sequence, Tuple from ._elffile import EIClass, EIData, ELFFile, EMachine @@ -50,12 +50,21 @@ def _is_linux_i686(executable: str) -> bool: ) -def _have_compatible_abi(executable: str, arch: str) -> bool: - if arch == "armv7l": +def _have_compatible_abi(executable: str, archs: Sequence[str]) -> bool: + if "armv7l" in archs: return _is_linux_armhf(executable) - if arch == "i686": + if "i686" in archs: return _is_linux_i686(executable) - return arch in {"x86_64", "aarch64", "ppc64", "ppc64le", "s390x"} + allowed_archs = { + "x86_64", + "aarch64", + "ppc64", + "ppc64le", + "s390x", + "loongarch64", + "riscv64", + } + return any(arch in allowed_archs for arch in archs) # If glibc ever changes its major version, we need to know what the last @@ -81,7 +90,7 @@ def _glibc_version_string_confstr() -> Optional[str]: # https://github.com/python/cpython/blob/fcf1d003bf4f0100c/Lib/platform.py#L175-L183 try: # Should be a string like "glibc 2.17". - version_string: str = getattr(os, "confstr")("CS_GNU_LIBC_VERSION") + version_string: Optional[str] = os.confstr("CS_GNU_LIBC_VERSION") assert version_string is not None _, version = version_string.rsplit() except (AssertionError, AttributeError, OSError, ValueError): @@ -167,13 +176,13 @@ def _get_glibc_version() -> Tuple[int, int]: # From PEP 513, PEP 600 -def _is_compatible(name: str, arch: str, version: _GLibCVersion) -> bool: +def _is_compatible(arch: str, version: _GLibCVersion) -> bool: sys_glibc = _get_glibc_version() if sys_glibc < version: return False # Check for presence of _manylinux module. try: - import _manylinux # noqa + import _manylinux except ImportError: return True if hasattr(_manylinux, "manylinux_compatible"): @@ -203,12 +212,22 @@ _LEGACY_MANYLINUX_MAP = { } -def platform_tags(linux: str, arch: str) -> Iterator[str]: - if not _have_compatible_abi(sys.executable, arch): +def platform_tags(archs: Sequence[str]) -> Iterator[str]: + """Generate manylinux tags compatible to the current platform. + + :param archs: Sequence of compatible architectures. + The first one shall be the closest to the actual architecture and be the part of + platform tag after the ``linux_`` prefix, e.g. ``x86_64``. + The ``linux_`` prefix is assumed as a prerequisite for the current platform to + be manylinux-compatible. + + :returns: An iterator of compatible manylinux tags. + """ + if not _have_compatible_abi(sys.executable, archs): return # Oldest glibc to be supported regardless of architecture is (2, 17). too_old_glibc2 = _GLibCVersion(2, 16) - if arch in {"x86_64", "i686"}: + if set(archs) & {"x86_64", "i686"}: # On x86/i686 also oldest glibc to be supported is (2, 5). too_old_glibc2 = _GLibCVersion(2, 4) current_glibc = _GLibCVersion(*_get_glibc_version()) @@ -222,19 +241,20 @@ def platform_tags(linux: str, arch: str) -> Iterator[str]: for glibc_major in range(current_glibc.major - 1, 1, -1): glibc_minor = _LAST_GLIBC_MINOR[glibc_major] glibc_max_list.append(_GLibCVersion(glibc_major, glibc_minor)) - for glibc_max in glibc_max_list: - if glibc_max.major == too_old_glibc2.major: - min_minor = too_old_glibc2.minor - else: - # For other glibc major versions oldest supported is (x, 0). - min_minor = -1 - for glibc_minor in range(glibc_max.minor, min_minor, -1): - glibc_version = _GLibCVersion(glibc_max.major, glibc_minor) - tag = "manylinux_{}_{}".format(*glibc_version) - if _is_compatible(tag, arch, glibc_version): - yield linux.replace("linux", tag) - # Handle the legacy manylinux1, manylinux2010, manylinux2014 tags. - if glibc_version in _LEGACY_MANYLINUX_MAP: - legacy_tag = _LEGACY_MANYLINUX_MAP[glibc_version] - if _is_compatible(legacy_tag, arch, glibc_version): - yield linux.replace("linux", legacy_tag) + for arch in archs: + for glibc_max in glibc_max_list: + if glibc_max.major == too_old_glibc2.major: + min_minor = too_old_glibc2.minor + else: + # For other glibc major versions oldest supported is (x, 0). + min_minor = -1 + for glibc_minor in range(glibc_max.minor, min_minor, -1): + glibc_version = _GLibCVersion(glibc_max.major, glibc_minor) + tag = "manylinux_{}_{}".format(*glibc_version) + if _is_compatible(arch, glibc_version): + yield f"{tag}_{arch}" + # Handle the legacy manylinux1, manylinux2010, manylinux2014 tags. + if glibc_version in _LEGACY_MANYLINUX_MAP: + legacy_tag = _LEGACY_MANYLINUX_MAP[glibc_version] + if _is_compatible(arch, glibc_version): + yield f"{legacy_tag}_{arch}" diff --git a/contrib/python/setuptools/py3/pkg_resources/_vendor/packaging/_musllinux.py b/contrib/python/setuptools/py3/pkg_resources/_vendor/packaging/_musllinux.py index 706ba600a9..86419df9d7 100644 --- a/contrib/python/setuptools/py3/pkg_resources/_vendor/packaging/_musllinux.py +++ b/contrib/python/setuptools/py3/pkg_resources/_vendor/packaging/_musllinux.py @@ -8,7 +8,7 @@ import functools import re import subprocess import sys -from typing import Iterator, NamedTuple, Optional +from typing import Iterator, NamedTuple, Optional, Sequence from ._elffile import ELFFile @@ -47,24 +47,27 @@ def _get_musl_version(executable: str) -> Optional[_MuslVersion]: return None if ld is None or "musl" not in ld: return None - proc = subprocess.run([ld], stderr=subprocess.PIPE, universal_newlines=True) + proc = subprocess.run([ld], stderr=subprocess.PIPE, text=True) return _parse_musl_version(proc.stderr) -def platform_tags(arch: str) -> Iterator[str]: +def platform_tags(archs: Sequence[str]) -> Iterator[str]: """Generate musllinux tags compatible to the current platform. - :param arch: Should be the part of platform tag after the ``linux_`` - prefix, e.g. ``x86_64``. The ``linux_`` prefix is assumed as a - prerequisite for the current platform to be musllinux-compatible. + :param archs: Sequence of compatible architectures. + The first one shall be the closest to the actual architecture and be the part of + platform tag after the ``linux_`` prefix, e.g. ``x86_64``. + The ``linux_`` prefix is assumed as a prerequisite for the current platform to + be musllinux-compatible. :returns: An iterator of compatible musllinux tags. """ sys_musl = _get_musl_version(sys.executable) if sys_musl is None: # Python not dynamically linked against musl. return - for minor in range(sys_musl.minor, -1, -1): - yield f"musllinux_{sys_musl.major}_{minor}_{arch}" + for arch in archs: + for minor in range(sys_musl.minor, -1, -1): + yield f"musllinux_{sys_musl.major}_{minor}_{arch}" if __name__ == "__main__": # pragma: no cover diff --git a/contrib/python/setuptools/py3/pkg_resources/_vendor/packaging/_parser.py b/contrib/python/setuptools/py3/pkg_resources/_vendor/packaging/_parser.py index 5a18b758fe..684df75457 100644 --- a/contrib/python/setuptools/py3/pkg_resources/_vendor/packaging/_parser.py +++ b/contrib/python/setuptools/py3/pkg_resources/_vendor/packaging/_parser.py @@ -252,7 +252,13 @@ def _parse_version_many(tokenizer: Tokenizer) -> str: # Recursive descent parser for marker expression # -------------------------------------------------------------------------------------- def parse_marker(source: str) -> MarkerList: - return _parse_marker(Tokenizer(source, rules=DEFAULT_RULES)) + return _parse_full_marker(Tokenizer(source, rules=DEFAULT_RULES)) + + +def _parse_full_marker(tokenizer: Tokenizer) -> MarkerList: + retval = _parse_marker(tokenizer) + tokenizer.expect("END", expected="end of marker expression") + return retval def _parse_marker(tokenizer: Tokenizer) -> MarkerList: @@ -318,10 +324,7 @@ def _parse_marker_var(tokenizer: Tokenizer) -> MarkerVar: def process_env_var(env_var: str) -> Variable: - if ( - env_var == "platform_python_implementation" - or env_var == "python_implementation" - ): + if env_var in ("platform_python_implementation", "python_implementation"): return Variable("platform_python_implementation") else: return Variable(env_var) diff --git a/contrib/python/setuptools/py3/pkg_resources/_vendor/packaging/metadata.py b/contrib/python/setuptools/py3/pkg_resources/_vendor/packaging/metadata.py index e76a60c395..fb27493079 100644 --- a/contrib/python/setuptools/py3/pkg_resources/_vendor/packaging/metadata.py +++ b/contrib/python/setuptools/py3/pkg_resources/_vendor/packaging/metadata.py @@ -5,23 +5,77 @@ import email.parser import email.policy import sys import typing -from typing import Dict, List, Optional, Tuple, Union, cast - -if sys.version_info >= (3, 8): # pragma: no cover - from typing import TypedDict +from typing import ( + Any, + Callable, + Dict, + Generic, + List, + Optional, + Tuple, + Type, + Union, + cast, +) + +from . import requirements, specifiers, utils, version as version_module + +T = typing.TypeVar("T") +if sys.version_info[:2] >= (3, 8): # pragma: no cover + from typing import Literal, TypedDict else: # pragma: no cover if typing.TYPE_CHECKING: - from typing_extensions import TypedDict + from typing_extensions import Literal, TypedDict else: try: - from typing_extensions import TypedDict + from typing_extensions import Literal, TypedDict except ImportError: + class Literal: + def __init_subclass__(*_args, **_kwargs): + pass + class TypedDict: def __init_subclass__(*_args, **_kwargs): pass +try: + ExceptionGroup +except NameError: # pragma: no cover + + class ExceptionGroup(Exception): # noqa: N818 + """A minimal implementation of :external:exc:`ExceptionGroup` from Python 3.11. + + If :external:exc:`ExceptionGroup` is already defined by Python itself, + that version is used instead. + """ + + message: str + exceptions: List[Exception] + + def __init__(self, message: str, exceptions: List[Exception]) -> None: + self.message = message + self.exceptions = exceptions + + def __repr__(self) -> str: + return f"{self.__class__.__name__}({self.message!r}, {self.exceptions!r})" + +else: # pragma: no cover + ExceptionGroup = ExceptionGroup + + +class InvalidMetadata(ValueError): + """A metadata field contains invalid data.""" + + field: str + """The name of the field that contains invalid data.""" + + def __init__(self, field: str, message: str) -> None: + self.field = field + super().__init__(message) + + # The RawMetadata class attempts to make as few assumptions about the underlying # serialization formats as possible. The idea is that as long as a serialization # formats offer some very basic primitives in *some* way then we can support @@ -33,7 +87,8 @@ class RawMetadata(TypedDict, total=False): provided). The key is lower-case and underscores are used instead of dashes compared to the equivalent core metadata field. Any core metadata field that can be specified multiple times or can hold multiple values in a single - field have a key with a plural name. + field have a key with a plural name. See :class:`Metadata` whose attributes + match the keys of this dictionary. Core metadata fields that can be specified multiple times are stored as a list or dict depending on which is appropriate for the field. Any fields @@ -77,7 +132,7 @@ class RawMetadata(TypedDict, total=False): # but got stuck without ever being able to build consensus on # it and ultimately ended up withdrawn. # - # However, a number of tools had started emiting METADATA with + # However, a number of tools had started emitting METADATA with # `2.0` Metadata-Version, so for historical reasons, this version # was skipped. @@ -110,7 +165,7 @@ _STRING_FIELDS = { "version", } -_LIST_STRING_FIELDS = { +_LIST_FIELDS = { "classifiers", "dynamic", "obsoletes", @@ -125,6 +180,10 @@ _LIST_STRING_FIELDS = { "supported_platforms", } +_DICT_FIELDS = { + "project_urls", +} + def _parse_keywords(data: str) -> List[str]: """Split a string of comma-separate keyboards into a list of keywords.""" @@ -230,10 +289,11 @@ _EMAIL_TO_RAW_MAPPING = { "supported-platform": "supported_platforms", "version": "version", } +_RAW_TO_EMAIL_MAPPING = {raw: email for email, raw in _EMAIL_TO_RAW_MAPPING.items()} def parse_email(data: Union[bytes, str]) -> Tuple[RawMetadata, Dict[str, List[str]]]: - """Parse a distribution's metadata. + """Parse a distribution's metadata stored as email headers (e.g. from ``METADATA``). This function returns a two-item tuple of dicts. The first dict is of recognized fields from the core metadata specification. Fields that can be @@ -267,7 +327,7 @@ def parse_email(data: Union[bytes, str]) -> Tuple[RawMetadata, Dict[str, List[st # We use get_all() here, even for fields that aren't multiple use, # because otherwise someone could have e.g. two Name fields, and we # would just silently ignore it rather than doing something about it. - headers = parsed.get_all(name) + headers = parsed.get_all(name) or [] # The way the email module works when parsing bytes is that it # unconditionally decodes the bytes as ascii using the surrogateescape @@ -349,7 +409,7 @@ def parse_email(data: Union[bytes, str]) -> Tuple[RawMetadata, Dict[str, List[st # If this is one of our list of string fields, then we can just assign # the value, since email *only* has strings, and our get_all() call # above ensures that this is a list. - elif raw_name in _LIST_STRING_FIELDS: + elif raw_name in _LIST_FIELDS: raw[raw_name] = value # Special Case: Keywords # The keywords field is implemented in the metadata spec as a str, @@ -406,3 +466,360 @@ def parse_email(data: Union[bytes, str]) -> Tuple[RawMetadata, Dict[str, List[st # way this function is implemented, our `TypedDict` can only have valid key # names. return cast(RawMetadata, raw), unparsed + + +_NOT_FOUND = object() + + +# Keep the two values in sync. +_VALID_METADATA_VERSIONS = ["1.0", "1.1", "1.2", "2.1", "2.2", "2.3"] +_MetadataVersion = Literal["1.0", "1.1", "1.2", "2.1", "2.2", "2.3"] + +_REQUIRED_ATTRS = frozenset(["metadata_version", "name", "version"]) + + +class _Validator(Generic[T]): + """Validate a metadata field. + + All _process_*() methods correspond to a core metadata field. The method is + called with the field's raw value. If the raw value is valid it is returned + in its "enriched" form (e.g. ``version.Version`` for the ``Version`` field). + If the raw value is invalid, :exc:`InvalidMetadata` is raised (with a cause + as appropriate). + """ + + name: str + raw_name: str + added: _MetadataVersion + + def __init__( + self, + *, + added: _MetadataVersion = "1.0", + ) -> None: + self.added = added + + def __set_name__(self, _owner: "Metadata", name: str) -> None: + self.name = name + self.raw_name = _RAW_TO_EMAIL_MAPPING[name] + + def __get__(self, instance: "Metadata", _owner: Type["Metadata"]) -> T: + # With Python 3.8, the caching can be replaced with functools.cached_property(). + # No need to check the cache as attribute lookup will resolve into the + # instance's __dict__ before __get__ is called. + cache = instance.__dict__ + value = instance._raw.get(self.name) + + # To make the _process_* methods easier, we'll check if the value is None + # and if this field is NOT a required attribute, and if both of those + # things are true, we'll skip the the converter. This will mean that the + # converters never have to deal with the None union. + if self.name in _REQUIRED_ATTRS or value is not None: + try: + converter: Callable[[Any], T] = getattr(self, f"_process_{self.name}") + except AttributeError: + pass + else: + value = converter(value) + + cache[self.name] = value + try: + del instance._raw[self.name] # type: ignore[misc] + except KeyError: + pass + + return cast(T, value) + + def _invalid_metadata( + self, msg: str, cause: Optional[Exception] = None + ) -> InvalidMetadata: + exc = InvalidMetadata( + self.raw_name, msg.format_map({"field": repr(self.raw_name)}) + ) + exc.__cause__ = cause + return exc + + def _process_metadata_version(self, value: str) -> _MetadataVersion: + # Implicitly makes Metadata-Version required. + if value not in _VALID_METADATA_VERSIONS: + raise self._invalid_metadata(f"{value!r} is not a valid metadata version") + return cast(_MetadataVersion, value) + + def _process_name(self, value: str) -> str: + if not value: + raise self._invalid_metadata("{field} is a required field") + # Validate the name as a side-effect. + try: + utils.canonicalize_name(value, validate=True) + except utils.InvalidName as exc: + raise self._invalid_metadata( + f"{value!r} is invalid for {{field}}", cause=exc + ) + else: + return value + + def _process_version(self, value: str) -> version_module.Version: + if not value: + raise self._invalid_metadata("{field} is a required field") + try: + return version_module.parse(value) + except version_module.InvalidVersion as exc: + raise self._invalid_metadata( + f"{value!r} is invalid for {{field}}", cause=exc + ) + + def _process_summary(self, value: str) -> str: + """Check the field contains no newlines.""" + if "\n" in value: + raise self._invalid_metadata("{field} must be a single line") + return value + + def _process_description_content_type(self, value: str) -> str: + content_types = {"text/plain", "text/x-rst", "text/markdown"} + message = email.message.EmailMessage() + message["content-type"] = value + + content_type, parameters = ( + # Defaults to `text/plain` if parsing failed. + message.get_content_type().lower(), + message["content-type"].params, + ) + # Check if content-type is valid or defaulted to `text/plain` and thus was + # not parseable. + if content_type not in content_types or content_type not in value.lower(): + raise self._invalid_metadata( + f"{{field}} must be one of {list(content_types)}, not {value!r}" + ) + + charset = parameters.get("charset", "UTF-8") + if charset != "UTF-8": + raise self._invalid_metadata( + f"{{field}} can only specify the UTF-8 charset, not {list(charset)}" + ) + + markdown_variants = {"GFM", "CommonMark"} + variant = parameters.get("variant", "GFM") # Use an acceptable default. + if content_type == "text/markdown" and variant not in markdown_variants: + raise self._invalid_metadata( + f"valid Markdown variants for {{field}} are {list(markdown_variants)}, " + f"not {variant!r}", + ) + return value + + def _process_dynamic(self, value: List[str]) -> List[str]: + for dynamic_field in map(str.lower, value): + if dynamic_field in {"name", "version", "metadata-version"}: + raise self._invalid_metadata( + f"{value!r} is not allowed as a dynamic field" + ) + elif dynamic_field not in _EMAIL_TO_RAW_MAPPING: + raise self._invalid_metadata(f"{value!r} is not a valid dynamic field") + return list(map(str.lower, value)) + + def _process_provides_extra( + self, + value: List[str], + ) -> List[utils.NormalizedName]: + normalized_names = [] + try: + for name in value: + normalized_names.append(utils.canonicalize_name(name, validate=True)) + except utils.InvalidName as exc: + raise self._invalid_metadata( + f"{name!r} is invalid for {{field}}", cause=exc + ) + else: + return normalized_names + + def _process_requires_python(self, value: str) -> specifiers.SpecifierSet: + try: + return specifiers.SpecifierSet(value) + except specifiers.InvalidSpecifier as exc: + raise self._invalid_metadata( + f"{value!r} is invalid for {{field}}", cause=exc + ) + + def _process_requires_dist( + self, + value: List[str], + ) -> List[requirements.Requirement]: + reqs = [] + try: + for req in value: + reqs.append(requirements.Requirement(req)) + except requirements.InvalidRequirement as exc: + raise self._invalid_metadata(f"{req!r} is invalid for {{field}}", cause=exc) + else: + return reqs + + +class Metadata: + """Representation of distribution metadata. + + Compared to :class:`RawMetadata`, this class provides objects representing + metadata fields instead of only using built-in types. Any invalid metadata + will cause :exc:`InvalidMetadata` to be raised (with a + :py:attr:`~BaseException.__cause__` attribute as appropriate). + """ + + _raw: RawMetadata + + @classmethod + def from_raw(cls, data: RawMetadata, *, validate: bool = True) -> "Metadata": + """Create an instance from :class:`RawMetadata`. + + If *validate* is true, all metadata will be validated. All exceptions + related to validation will be gathered and raised as an :class:`ExceptionGroup`. + """ + ins = cls() + ins._raw = data.copy() # Mutations occur due to caching enriched values. + + if validate: + exceptions: List[Exception] = [] + try: + metadata_version = ins.metadata_version + metadata_age = _VALID_METADATA_VERSIONS.index(metadata_version) + except InvalidMetadata as metadata_version_exc: + exceptions.append(metadata_version_exc) + metadata_version = None + + # Make sure to check for the fields that are present, the required + # fields (so their absence can be reported). + fields_to_check = frozenset(ins._raw) | _REQUIRED_ATTRS + # Remove fields that have already been checked. + fields_to_check -= {"metadata_version"} + + for key in fields_to_check: + try: + if metadata_version: + # Can't use getattr() as that triggers descriptor protocol which + # will fail due to no value for the instance argument. + try: + field_metadata_version = cls.__dict__[key].added + except KeyError: + exc = InvalidMetadata(key, f"unrecognized field: {key!r}") + exceptions.append(exc) + continue + field_age = _VALID_METADATA_VERSIONS.index( + field_metadata_version + ) + if field_age > metadata_age: + field = _RAW_TO_EMAIL_MAPPING[key] + exc = InvalidMetadata( + field, + "{field} introduced in metadata version " + "{field_metadata_version}, not {metadata_version}", + ) + exceptions.append(exc) + continue + getattr(ins, key) + except InvalidMetadata as exc: + exceptions.append(exc) + + if exceptions: + raise ExceptionGroup("invalid metadata", exceptions) + + return ins + + @classmethod + def from_email( + cls, data: Union[bytes, str], *, validate: bool = True + ) -> "Metadata": + """Parse metadata from email headers. + + If *validate* is true, the metadata will be validated. All exceptions + related to validation will be gathered and raised as an :class:`ExceptionGroup`. + """ + raw, unparsed = parse_email(data) + + if validate: + exceptions: list[Exception] = [] + for unparsed_key in unparsed: + if unparsed_key in _EMAIL_TO_RAW_MAPPING: + message = f"{unparsed_key!r} has invalid data" + else: + message = f"unrecognized field: {unparsed_key!r}" + exceptions.append(InvalidMetadata(unparsed_key, message)) + + if exceptions: + raise ExceptionGroup("unparsed", exceptions) + + try: + return cls.from_raw(raw, validate=validate) + except ExceptionGroup as exc_group: + raise ExceptionGroup( + "invalid or unparsed metadata", exc_group.exceptions + ) from None + + metadata_version: _Validator[_MetadataVersion] = _Validator() + """:external:ref:`core-metadata-metadata-version` + (required; validated to be a valid metadata version)""" + name: _Validator[str] = _Validator() + """:external:ref:`core-metadata-name` + (required; validated using :func:`~packaging.utils.canonicalize_name` and its + *validate* parameter)""" + version: _Validator[version_module.Version] = _Validator() + """:external:ref:`core-metadata-version` (required)""" + dynamic: _Validator[Optional[List[str]]] = _Validator( + added="2.2", + ) + """:external:ref:`core-metadata-dynamic` + (validated against core metadata field names and lowercased)""" + platforms: _Validator[Optional[List[str]]] = _Validator() + """:external:ref:`core-metadata-platform`""" + supported_platforms: _Validator[Optional[List[str]]] = _Validator(added="1.1") + """:external:ref:`core-metadata-supported-platform`""" + summary: _Validator[Optional[str]] = _Validator() + """:external:ref:`core-metadata-summary` (validated to contain no newlines)""" + description: _Validator[Optional[str]] = _Validator() # TODO 2.1: can be in body + """:external:ref:`core-metadata-description`""" + description_content_type: _Validator[Optional[str]] = _Validator(added="2.1") + """:external:ref:`core-metadata-description-content-type` (validated)""" + keywords: _Validator[Optional[List[str]]] = _Validator() + """:external:ref:`core-metadata-keywords`""" + home_page: _Validator[Optional[str]] = _Validator() + """:external:ref:`core-metadata-home-page`""" + download_url: _Validator[Optional[str]] = _Validator(added="1.1") + """:external:ref:`core-metadata-download-url`""" + author: _Validator[Optional[str]] = _Validator() + """:external:ref:`core-metadata-author`""" + author_email: _Validator[Optional[str]] = _Validator() + """:external:ref:`core-metadata-author-email`""" + maintainer: _Validator[Optional[str]] = _Validator(added="1.2") + """:external:ref:`core-metadata-maintainer`""" + maintainer_email: _Validator[Optional[str]] = _Validator(added="1.2") + """:external:ref:`core-metadata-maintainer-email`""" + license: _Validator[Optional[str]] = _Validator() + """:external:ref:`core-metadata-license`""" + classifiers: _Validator[Optional[List[str]]] = _Validator(added="1.1") + """:external:ref:`core-metadata-classifier`""" + requires_dist: _Validator[Optional[List[requirements.Requirement]]] = _Validator( + added="1.2" + ) + """:external:ref:`core-metadata-requires-dist`""" + requires_python: _Validator[Optional[specifiers.SpecifierSet]] = _Validator( + added="1.2" + ) + """:external:ref:`core-metadata-requires-python`""" + # Because `Requires-External` allows for non-PEP 440 version specifiers, we + # don't do any processing on the values. + requires_external: _Validator[Optional[List[str]]] = _Validator(added="1.2") + """:external:ref:`core-metadata-requires-external`""" + project_urls: _Validator[Optional[Dict[str, str]]] = _Validator(added="1.2") + """:external:ref:`core-metadata-project-url`""" + # PEP 685 lets us raise an error if an extra doesn't pass `Name` validation + # regardless of metadata version. + provides_extra: _Validator[Optional[List[utils.NormalizedName]]] = _Validator( + added="2.1", + ) + """:external:ref:`core-metadata-provides-extra`""" + provides_dist: _Validator[Optional[List[str]]] = _Validator(added="1.2") + """:external:ref:`core-metadata-provides-dist`""" + obsoletes_dist: _Validator[Optional[List[str]]] = _Validator(added="1.2") + """:external:ref:`core-metadata-obsoletes-dist`""" + requires: _Validator[Optional[List[str]]] = _Validator(added="1.1") + """``Requires`` (deprecated)""" + provides: _Validator[Optional[List[str]]] = _Validator(added="1.1") + """``Provides`` (deprecated)""" + obsoletes: _Validator[Optional[List[str]]] = _Validator(added="1.1") + """``Obsoletes`` (deprecated)""" diff --git a/contrib/python/setuptools/py3/pkg_resources/_vendor/packaging/requirements.py b/contrib/python/setuptools/py3/pkg_resources/_vendor/packaging/requirements.py index f34bfa85c8..bdc43a7e98 100644 --- a/contrib/python/setuptools/py3/pkg_resources/_vendor/packaging/requirements.py +++ b/contrib/python/setuptools/py3/pkg_resources/_vendor/packaging/requirements.py @@ -2,13 +2,13 @@ # 2.0, and the BSD License. See the LICENSE file in the root of this repository # for complete details. -import urllib.parse -from typing import Any, List, Optional, Set +from typing import Any, Iterator, Optional, Set from ._parser import parse_requirement as _parse_requirement from ._tokenizer import ParserSyntaxError from .markers import Marker, _normalize_extra_values from .specifiers import SpecifierSet +from .utils import canonicalize_name class InvalidRequirement(ValueError): @@ -37,57 +37,52 @@ class Requirement: raise InvalidRequirement(str(e)) from e self.name: str = parsed.name - if parsed.url: - parsed_url = urllib.parse.urlparse(parsed.url) - if parsed_url.scheme == "file": - if urllib.parse.urlunparse(parsed_url) != parsed.url: - raise InvalidRequirement("Invalid URL given") - elif not (parsed_url.scheme and parsed_url.netloc) or ( - not parsed_url.scheme and not parsed_url.netloc - ): - raise InvalidRequirement(f"Invalid URL: {parsed.url}") - self.url: Optional[str] = parsed.url - else: - self.url = None - self.extras: Set[str] = set(parsed.extras if parsed.extras else []) + self.url: Optional[str] = parsed.url or None + self.extras: Set[str] = set(parsed.extras or []) self.specifier: SpecifierSet = SpecifierSet(parsed.specifier) self.marker: Optional[Marker] = None if parsed.marker is not None: self.marker = Marker.__new__(Marker) self.marker._markers = _normalize_extra_values(parsed.marker) - def __str__(self) -> str: - parts: List[str] = [self.name] + def _iter_parts(self, name: str) -> Iterator[str]: + yield name if self.extras: formatted_extras = ",".join(sorted(self.extras)) - parts.append(f"[{formatted_extras}]") + yield f"[{formatted_extras}]" if self.specifier: - parts.append(str(self.specifier)) + yield str(self.specifier) if self.url: - parts.append(f"@ {self.url}") + yield f"@ {self.url}" if self.marker: - parts.append(" ") + yield " " if self.marker: - parts.append(f"; {self.marker}") + yield f"; {self.marker}" - return "".join(parts) + def __str__(self) -> str: + return "".join(self._iter_parts(self.name)) def __repr__(self) -> str: return f"<Requirement('{self}')>" def __hash__(self) -> int: - return hash((self.__class__.__name__, str(self))) + return hash( + ( + self.__class__.__name__, + *self._iter_parts(canonicalize_name(self.name)), + ) + ) def __eq__(self, other: Any) -> bool: if not isinstance(other, Requirement): return NotImplemented return ( - self.name == other.name + canonicalize_name(self.name) == canonicalize_name(other.name) and self.extras == other.extras and self.specifier == other.specifier and self.url == other.url diff --git a/contrib/python/setuptools/py3/pkg_resources/_vendor/packaging/specifiers.py b/contrib/python/setuptools/py3/pkg_resources/_vendor/packaging/specifiers.py index ba8fe37b7f..2d015bab59 100644 --- a/contrib/python/setuptools/py3/pkg_resources/_vendor/packaging/specifiers.py +++ b/contrib/python/setuptools/py3/pkg_resources/_vendor/packaging/specifiers.py @@ -11,17 +11,7 @@ import abc import itertools import re -from typing import ( - Callable, - Iterable, - Iterator, - List, - Optional, - Set, - Tuple, - TypeVar, - Union, -) +from typing import Callable, Iterable, Iterator, List, Optional, Tuple, TypeVar, Union from .utils import canonicalize_version from .version import Version @@ -383,7 +373,7 @@ class Specifier(BaseSpecifier): # We want everything but the last item in the version, but we want to # ignore suffix segments. - prefix = ".".join( + prefix = _version_join( list(itertools.takewhile(_is_not_suffix, _version_split(spec)))[:-1] ) @@ -404,13 +394,13 @@ class Specifier(BaseSpecifier): ) # Get the normalized version string ignoring the trailing .* normalized_spec = canonicalize_version(spec[:-2], strip_trailing_zero=False) - # Split the spec out by dots, and pretend that there is an implicit - # dot in between a release segment and a pre-release segment. + # Split the spec out by bangs and dots, and pretend that there is + # an implicit dot in between a release segment and a pre-release segment. split_spec = _version_split(normalized_spec) - # Split the prospective version out by dots, and pretend that there - # is an implicit dot in between a release segment and a pre-release - # segment. + # Split the prospective version out by bangs and dots, and pretend + # that there is an implicit dot in between a release segment and + # a pre-release segment. split_prospective = _version_split(normalized_prospective) # 0-pad the prospective version before shortening it to get the correct @@ -644,8 +634,19 @@ _prefix_regex = re.compile(r"^([0-9]+)((?:a|b|c|rc)[0-9]+)$") def _version_split(version: str) -> List[str]: + """Split version into components. + + The split components are intended for version comparison. The logic does + not attempt to retain the original version string, so joining the + components back with :func:`_version_join` may not produce the original + version string. + """ result: List[str] = [] - for item in version.split("."): + + epoch, _, rest = version.rpartition("!") + result.append(epoch or "0") + + for item in rest.split("."): match = _prefix_regex.search(item) if match: result.extend(match.groups()) @@ -654,6 +655,17 @@ def _version_split(version: str) -> List[str]: return result +def _version_join(components: List[str]) -> str: + """Join split version components into a version string. + + This function assumes the input came from :func:`_version_split`, where the + first component must be the epoch (either empty or numeric), and all other + components numeric. + """ + epoch, *rest = components + return f"{epoch}!{'.'.join(rest)}" + + def _is_not_suffix(segment: str) -> bool: return not any( segment.startswith(prefix) for prefix in ("dev", "a", "b", "rc", "post") @@ -675,7 +687,10 @@ def _pad_version(left: List[str], right: List[str]) -> Tuple[List[str], List[str left_split.insert(1, ["0"] * max(0, len(right_split[0]) - len(left_split[0]))) right_split.insert(1, ["0"] * max(0, len(left_split[0]) - len(right_split[0]))) - return (list(itertools.chain(*left_split)), list(itertools.chain(*right_split))) + return ( + list(itertools.chain.from_iterable(left_split)), + list(itertools.chain.from_iterable(right_split)), + ) class SpecifierSet(BaseSpecifier): @@ -707,14 +722,8 @@ class SpecifierSet(BaseSpecifier): # strip each item to remove leading/trailing whitespace. split_specifiers = [s.strip() for s in specifiers.split(",") if s.strip()] - # Parsed each individual specifier, attempting first to make it a - # Specifier. - parsed: Set[Specifier] = set() - for specifier in split_specifiers: - parsed.add(Specifier(specifier)) - - # Turn our parsed specifiers into a frozen set and save them for later. - self._specs = frozenset(parsed) + # Make each individual specifier a Specifier and save in a frozen set for later. + self._specs = frozenset(map(Specifier, split_specifiers)) # Store our prereleases value so we can use it later to determine if # we accept prereleases or not. diff --git a/contrib/python/setuptools/py3/pkg_resources/_vendor/packaging/tags.py b/contrib/python/setuptools/py3/pkg_resources/_vendor/packaging/tags.py index 76d243414d..89f1926137 100644 --- a/contrib/python/setuptools/py3/pkg_resources/_vendor/packaging/tags.py +++ b/contrib/python/setuptools/py3/pkg_resources/_vendor/packaging/tags.py @@ -4,6 +4,8 @@ import logging import platform +import re +import struct import subprocess import sys import sysconfig @@ -37,7 +39,7 @@ INTERPRETER_SHORT_NAMES: Dict[str, str] = { } -_32_BIT_INTERPRETER = sys.maxsize <= 2**32 +_32_BIT_INTERPRETER = struct.calcsize("P") == 4 class Tag: @@ -123,20 +125,37 @@ def _normalize_string(string: str) -> str: return string.replace(".", "_").replace("-", "_").replace(" ", "_") -def _abi3_applies(python_version: PythonVersion) -> bool: +def _is_threaded_cpython(abis: List[str]) -> bool: + """ + Determine if the ABI corresponds to a threaded (`--disable-gil`) build. + + The threaded builds are indicated by a "t" in the abiflags. + """ + if len(abis) == 0: + return False + # expect e.g., cp313 + m = re.match(r"cp\d+(.*)", abis[0]) + if not m: + return False + abiflags = m.group(1) + return "t" in abiflags + + +def _abi3_applies(python_version: PythonVersion, threading: bool) -> bool: """ Determine if the Python version supports abi3. - PEP 384 was first implemented in Python 3.2. + PEP 384 was first implemented in Python 3.2. The threaded (`--disable-gil`) + builds do not support abi3. """ - return len(python_version) > 1 and tuple(python_version) >= (3, 2) + return len(python_version) > 1 and tuple(python_version) >= (3, 2) and not threading def _cpython_abis(py_version: PythonVersion, warn: bool = False) -> List[str]: py_version = tuple(py_version) # To allow for version comparison. abis = [] version = _version_nodot(py_version[:2]) - debug = pymalloc = ucs4 = "" + threading = debug = pymalloc = ucs4 = "" with_debug = _get_config_var("Py_DEBUG", warn) has_refcount = hasattr(sys, "gettotalrefcount") # Windows doesn't set Py_DEBUG, so checking for support of debug-compiled @@ -145,6 +164,8 @@ def _cpython_abis(py_version: PythonVersion, warn: bool = False) -> List[str]: has_ext = "_d.pyd" in EXTENSION_SUFFIXES if with_debug or (with_debug is None and (has_refcount or has_ext)): debug = "d" + if py_version >= (3, 13) and _get_config_var("Py_GIL_DISABLED", warn): + threading = "t" if py_version < (3, 8): with_pymalloc = _get_config_var("WITH_PYMALLOC", warn) if with_pymalloc or with_pymalloc is None: @@ -158,13 +179,8 @@ def _cpython_abis(py_version: PythonVersion, warn: bool = False) -> List[str]: elif debug: # Debug builds can also load "normal" extension modules. # We can also assume no UCS-4 or pymalloc requirement. - abis.append(f"cp{version}") - abis.insert( - 0, - "cp{version}{debug}{pymalloc}{ucs4}".format( - version=version, debug=debug, pymalloc=pymalloc, ucs4=ucs4 - ), - ) + abis.append(f"cp{version}{threading}") + abis.insert(0, f"cp{version}{threading}{debug}{pymalloc}{ucs4}") return abis @@ -212,11 +228,14 @@ def cpython_tags( for abi in abis: for platform_ in platforms: yield Tag(interpreter, abi, platform_) - if _abi3_applies(python_version): + + threading = _is_threaded_cpython(abis) + use_abi3 = _abi3_applies(python_version, threading) + if use_abi3: yield from (Tag(interpreter, "abi3", platform_) for platform_ in platforms) yield from (Tag(interpreter, "none", platform_) for platform_ in platforms) - if _abi3_applies(python_version): + if use_abi3: for minor_version in range(python_version[1] - 1, 1, -1): for platform_ in platforms: interpreter = "cp{version}".format( @@ -406,7 +425,7 @@ def mac_platforms( check=True, env={"SYSTEM_VERSION_COMPAT": "0"}, stdout=subprocess.PIPE, - universal_newlines=True, + text=True, ).stdout version = cast("MacVersion", tuple(map(int, version_str.split(".")[:2]))) else: @@ -469,15 +488,21 @@ def mac_platforms( def _linux_platforms(is_32bit: bool = _32_BIT_INTERPRETER) -> Iterator[str]: linux = _normalize_string(sysconfig.get_platform()) + if not linux.startswith("linux_"): + # we should never be here, just yield the sysconfig one and return + yield linux + return if is_32bit: if linux == "linux_x86_64": linux = "linux_i686" elif linux == "linux_aarch64": - linux = "linux_armv7l" + linux = "linux_armv8l" _, arch = linux.split("_", 1) - yield from _manylinux.platform_tags(linux, arch) - yield from _musllinux.platform_tags(arch) - yield linux + archs = {"armv8l": ["armv8l", "armv7l"]}.get(arch, [arch]) + yield from _manylinux.platform_tags(archs) + yield from _musllinux.platform_tags(archs) + for arch in archs: + yield f"linux_{arch}" def _generic_platforms() -> Iterator[str]: diff --git a/contrib/python/setuptools/py3/pkg_resources/_vendor/packaging/utils.py b/contrib/python/setuptools/py3/pkg_resources/_vendor/packaging/utils.py index 33c613b749..c2c2f75aa8 100644 --- a/contrib/python/setuptools/py3/pkg_resources/_vendor/packaging/utils.py +++ b/contrib/python/setuptools/py3/pkg_resources/_vendor/packaging/utils.py @@ -12,6 +12,12 @@ BuildTag = Union[Tuple[()], Tuple[int, str]] NormalizedName = NewType("NormalizedName", str) +class InvalidName(ValueError): + """ + An invalid distribution name; users should refer to the packaging user guide. + """ + + class InvalidWheelFilename(ValueError): """ An invalid wheel filename was found, users should refer to PEP 427. @@ -24,17 +30,28 @@ class InvalidSdistFilename(ValueError): """ +# Core metadata spec for `Name` +_validate_regex = re.compile( + r"^([A-Z0-9]|[A-Z0-9][A-Z0-9._-]*[A-Z0-9])$", re.IGNORECASE +) _canonicalize_regex = re.compile(r"[-_.]+") +_normalized_regex = re.compile(r"^([a-z0-9]|[a-z0-9]([a-z0-9-](?!--))*[a-z0-9])$") # PEP 427: The build number must start with a digit. _build_tag_regex = re.compile(r"(\d+)(.*)") -def canonicalize_name(name: str) -> NormalizedName: +def canonicalize_name(name: str, *, validate: bool = False) -> NormalizedName: + if validate and not _validate_regex.match(name): + raise InvalidName(f"name is invalid: {name!r}") # This is taken from PEP 503. value = _canonicalize_regex.sub("-", name).lower() return cast(NormalizedName, value) +def is_normalized_name(name: str) -> bool: + return _normalized_regex.match(name) is not None + + def canonicalize_version( version: Union[Version, str], *, strip_trailing_zero: bool = True ) -> str: @@ -100,11 +117,18 @@ def parse_wheel_filename( parts = filename.split("-", dashes - 2) name_part = parts[0] - # See PEP 427 for the rules on escaping the project name + # See PEP 427 for the rules on escaping the project name. if "__" in name_part or re.match(r"^[\w\d._]*$", name_part, re.UNICODE) is None: raise InvalidWheelFilename(f"Invalid project name: {filename}") name = canonicalize_name(name_part) - version = Version(parts[1]) + + try: + version = Version(parts[1]) + except InvalidVersion as e: + raise InvalidWheelFilename( + f"Invalid wheel filename (invalid version): {filename}" + ) from e + if dashes == 5: build_part = parts[2] build_match = _build_tag_regex.match(build_part) @@ -137,5 +161,12 @@ def parse_sdist_filename(filename: str) -> Tuple[NormalizedName, Version]: raise InvalidSdistFilename(f"Invalid sdist filename: {filename}") name = canonicalize_name(name_part) - version = Version(version_part) + + try: + version = Version(version_part) + except InvalidVersion as e: + raise InvalidSdistFilename( + f"Invalid sdist filename (invalid version): {filename}" + ) from e + return (name, version) diff --git a/contrib/python/setuptools/py3/pkg_resources/_vendor/packaging/version.py b/contrib/python/setuptools/py3/pkg_resources/_vendor/packaging/version.py index b30e8cbf84..5faab9bd0d 100644 --- a/contrib/python/setuptools/py3/pkg_resources/_vendor/packaging/version.py +++ b/contrib/python/setuptools/py3/pkg_resources/_vendor/packaging/version.py @@ -7,37 +7,39 @@ from packaging.version import parse, Version """ -import collections import itertools import re -from typing import Any, Callable, Optional, SupportsInt, Tuple, Union +from typing import Any, Callable, NamedTuple, Optional, SupportsInt, Tuple, Union from ._structures import Infinity, InfinityType, NegativeInfinity, NegativeInfinityType __all__ = ["VERSION_PATTERN", "parse", "Version", "InvalidVersion"] -InfiniteTypes = Union[InfinityType, NegativeInfinityType] -PrePostDevType = Union[InfiniteTypes, Tuple[str, int]] -SubLocalType = Union[InfiniteTypes, int, str] -LocalType = Union[ +LocalType = Tuple[Union[int, str], ...] + +CmpPrePostDevType = Union[InfinityType, NegativeInfinityType, Tuple[str, int]] +CmpLocalType = Union[ NegativeInfinityType, - Tuple[ - Union[ - SubLocalType, - Tuple[SubLocalType, str], - Tuple[NegativeInfinityType, SubLocalType], - ], - ..., - ], + Tuple[Union[Tuple[int, str], Tuple[NegativeInfinityType, Union[int, str]]], ...], ] CmpKey = Tuple[ - int, Tuple[int, ...], PrePostDevType, PrePostDevType, PrePostDevType, LocalType + int, + Tuple[int, ...], + CmpPrePostDevType, + CmpPrePostDevType, + CmpPrePostDevType, + CmpLocalType, ] VersionComparisonMethod = Callable[[CmpKey, CmpKey], bool] -_Version = collections.namedtuple( - "_Version", ["epoch", "release", "dev", "pre", "post", "local"] -) + +class _Version(NamedTuple): + epoch: int + release: Tuple[int, ...] + dev: Optional[Tuple[str, int]] + pre: Optional[Tuple[str, int]] + post: Optional[Tuple[str, int]] + local: Optional[LocalType] def parse(version: str) -> "Version": @@ -117,7 +119,7 @@ _VERSION_PATTERN = r""" (?P<release>[0-9]+(?:\.[0-9]+)*) # release segment (?P<pre> # pre-release [-_\.]? - (?P<pre_l>(a|b|c|rc|alpha|beta|pre|preview)) + (?P<pre_l>alpha|a|beta|b|preview|pre|c|rc) [-_\.]? (?P<pre_n>[0-9]+)? )? @@ -269,8 +271,7 @@ class Version(_BaseVersion): >>> Version("1!2.0.0").epoch 1 """ - _epoch: int = self._version.epoch - return _epoch + return self._version.epoch @property def release(self) -> Tuple[int, ...]: @@ -286,8 +287,7 @@ class Version(_BaseVersion): Includes trailing zeroes but not the epoch or any pre-release / development / post-release suffixes. """ - _release: Tuple[int, ...] = self._version.release - return _release + return self._version.release @property def pre(self) -> Optional[Tuple[str, int]]: @@ -302,8 +302,7 @@ class Version(_BaseVersion): >>> Version("1.2.3rc1").pre ('rc', 1) """ - _pre: Optional[Tuple[str, int]] = self._version.pre - return _pre + return self._version.pre @property def post(self) -> Optional[int]: @@ -451,7 +450,7 @@ class Version(_BaseVersion): def _parse_letter_version( - letter: str, number: Union[str, bytes, SupportsInt] + letter: Optional[str], number: Union[str, bytes, SupportsInt, None] ) -> Optional[Tuple[str, int]]: if letter: @@ -489,7 +488,7 @@ def _parse_letter_version( _local_version_separators = re.compile(r"[\._-]") -def _parse_local_version(local: str) -> Optional[LocalType]: +def _parse_local_version(local: Optional[str]) -> Optional[LocalType]: """ Takes a string like abc.1.twelve and turns it into ("abc", 1, "twelve"). """ @@ -507,7 +506,7 @@ def _cmpkey( pre: Optional[Tuple[str, int]], post: Optional[Tuple[str, int]], dev: Optional[Tuple[str, int]], - local: Optional[Tuple[SubLocalType]], + local: Optional[LocalType], ) -> CmpKey: # When we compare a release version, we want to compare it with all of the @@ -524,7 +523,7 @@ def _cmpkey( # if there is not a pre or a post segment. If we have one of those then # the normal sorting rules will handle this case correctly. if pre is None and post is None and dev is not None: - _pre: PrePostDevType = NegativeInfinity + _pre: CmpPrePostDevType = NegativeInfinity # Versions without a pre-release (except as noted above) should sort after # those with one. elif pre is None: @@ -534,21 +533,21 @@ def _cmpkey( # Versions without a post segment should sort before those with one. if post is None: - _post: PrePostDevType = NegativeInfinity + _post: CmpPrePostDevType = NegativeInfinity else: _post = post # Versions without a development segment should sort after those with one. if dev is None: - _dev: PrePostDevType = Infinity + _dev: CmpPrePostDevType = Infinity else: _dev = dev if local is None: # Versions without a local segment should sort before those with one. - _local: LocalType = NegativeInfinity + _local: CmpLocalType = NegativeInfinity else: # Versions with a local segment need that segment parsed to implement # the sorting rules in PEP440. diff --git a/contrib/python/setuptools/py3/pkg_resources/extern/__init__.py b/contrib/python/setuptools/py3/pkg_resources/extern/__init__.py index 948bcc6094..df96f7f26d 100644 --- a/contrib/python/setuptools/py3/pkg_resources/extern/__init__.py +++ b/contrib/python/setuptools/py3/pkg_resources/extern/__init__.py @@ -76,5 +76,6 @@ names = ( 'jaraco', 'importlib_resources', 'more_itertools', + 'backports', ) VendorImporter(__name__, names).install() diff --git a/contrib/python/setuptools/py3/setuptools/_core_metadata.py b/contrib/python/setuptools/py3/setuptools/_core_metadata.py index 5dd97c7719..9b4f38ded2 100644 --- a/contrib/python/setuptools/py3/setuptools/_core_metadata.py +++ b/contrib/python/setuptools/py3/setuptools/_core_metadata.py @@ -17,6 +17,7 @@ from distutils.util import rfc822_escape from . import _normalization, _reqs from .extern.packaging.markers import Marker from .extern.packaging.requirements import Requirement +from .extern.packaging.utils import canonicalize_name from .extern.packaging.version import Version from .warnings import SetuptoolsDeprecationWarning @@ -257,3 +258,11 @@ def _write_provides_extra(file, processed_extras, safe, unsafe): else: processed_extras[safe] = unsafe file.write(f"Provides-Extra: {safe}\n") + + +# from pypa/distutils#244; needed only until that logic is always available +def get_fullname(self): + return "{}-{}".format( + canonicalize_name(self.get_name()).replace('-', '_'), + self.get_version(), + ) diff --git a/contrib/python/setuptools/py3/setuptools/_distutils/__init__.py b/contrib/python/setuptools/py3/setuptools/_distutils/__init__.py index 1a188c35cb..e374d5c560 100644 --- a/contrib/python/setuptools/py3/setuptools/_distutils/__init__.py +++ b/contrib/python/setuptools/py3/setuptools/_distutils/__init__.py @@ -1,5 +1,5 @@ -import sys import importlib +import sys __version__, _, _ = sys.version.partition(' ') diff --git a/contrib/python/setuptools/py3/setuptools/_distutils/_collections.py b/contrib/python/setuptools/py3/setuptools/_distutils/_collections.py index 5ad21cc7c9..d11a83467c 100644 --- a/contrib/python/setuptools/py3/setuptools/_distutils/_collections.py +++ b/contrib/python/setuptools/py3/setuptools/_distutils/_collections.py @@ -1,7 +1,11 @@ +from __future__ import annotations + import collections import functools import itertools import operator +from collections.abc import Mapping +from typing import Any # from jaraco.collections 3.5.1 @@ -58,7 +62,7 @@ class DictStack(list, collections.abc.Mapping): return len(list(iter(self))) -# from jaraco.collections 3.7 +# from jaraco.collections 5.0.1 class RangeMap(dict): """ A dictionary-like object that uses the keys as bounds for a range. @@ -70,7 +74,7 @@ class RangeMap(dict): One may supply keyword parameters to be passed to the sort function used to sort keys (i.e. key, reverse) as sort_params. - Let's create a map that maps 1-3 -> 'a', 4-6 -> 'b' + Create a map that maps 1-3 -> 'a', 4-6 -> 'b' >>> r = RangeMap({3: 'a', 6: 'b'}) # boy, that was easy >>> r[1], r[2], r[3], r[4], r[5], r[6] @@ -82,7 +86,7 @@ class RangeMap(dict): >>> r[4.5] 'b' - But you'll notice that the way rangemap is defined, it must be open-ended + Notice that the way rangemap is defined, it must be open-ended on one side. >>> r[0] @@ -140,7 +144,12 @@ class RangeMap(dict): """ - def __init__(self, source, sort_params={}, key_match_comparator=operator.le): + def __init__( + self, + source, + sort_params: Mapping[str, Any] = {}, + key_match_comparator=operator.le, + ): dict.__init__(self, source) self.sort_params = sort_params self.match = key_match_comparator diff --git a/contrib/python/setuptools/py3/setuptools/_distutils/_itertools.py b/contrib/python/setuptools/py3/setuptools/_distutils/_itertools.py new file mode 100644 index 0000000000..85b2951186 --- /dev/null +++ b/contrib/python/setuptools/py3/setuptools/_distutils/_itertools.py @@ -0,0 +1,52 @@ +# from more_itertools 10.2 +def always_iterable(obj, base_type=(str, bytes)): + """If *obj* is iterable, return an iterator over its items:: + + >>> obj = (1, 2, 3) + >>> list(always_iterable(obj)) + [1, 2, 3] + + If *obj* is not iterable, return a one-item iterable containing *obj*:: + + >>> obj = 1 + >>> list(always_iterable(obj)) + [1] + + If *obj* is ``None``, return an empty iterable: + + >>> obj = None + >>> list(always_iterable(None)) + [] + + By default, binary and text strings are not considered iterable:: + + >>> obj = 'foo' + >>> list(always_iterable(obj)) + ['foo'] + + If *base_type* is set, objects for which ``isinstance(obj, base_type)`` + returns ``True`` won't be considered iterable. + + >>> obj = {'a': 1} + >>> list(always_iterable(obj)) # Iterate over the dict's keys + ['a'] + >>> list(always_iterable(obj, base_type=dict)) # Treat dicts as a unit + [{'a': 1}] + + Set *base_type* to ``None`` to avoid any special handling and treat objects + Python considers iterable as iterable: + + >>> obj = 'foo' + >>> list(always_iterable(obj, base_type=None)) + ['f', 'o', 'o'] + """ + if obj is None: + return iter(()) + + if (base_type is not None) and isinstance(obj, base_type): + return iter((obj,)) + + try: + return iter(obj) + except TypeError: + return iter((obj,)) diff --git a/contrib/python/setuptools/py3/setuptools/_distutils/_log.py b/contrib/python/setuptools/py3/setuptools/_distutils/_log.py index 4a2ae0acb8..0148f157ff 100644 --- a/contrib/python/setuptools/py3/setuptools/_distutils/_log.py +++ b/contrib/python/setuptools/py3/setuptools/_distutils/_log.py @@ -1,4 +1,3 @@ import logging - log = logging.getLogger() diff --git a/contrib/python/setuptools/py3/setuptools/_distutils/_macos_compat.py b/contrib/python/setuptools/py3/setuptools/_distutils/_macos_compat.py index 17769e9154..76ecb96abe 100644 --- a/contrib/python/setuptools/py3/setuptools/_distutils/_macos_compat.py +++ b/contrib/python/setuptools/py3/setuptools/_distutils/_macos_compat.py @@ -1,5 +1,5 @@ -import sys import importlib +import sys def bypass_compiler_fixup(cmd, args): diff --git a/contrib/python/setuptools/py3/setuptools/_distutils/_modified.py b/contrib/python/setuptools/py3/setuptools/_distutils/_modified.py index fbb95a8f27..78485dc25e 100644 --- a/contrib/python/setuptools/py3/setuptools/_distutils/_modified.py +++ b/contrib/python/setuptools/py3/setuptools/_distutils/_modified.py @@ -3,9 +3,9 @@ import functools import os.path +from ._functools import splat from .errors import DistutilsFileError from .py39compat import zip_strict -from ._functools import splat def _newer(source, target): diff --git a/contrib/python/setuptools/py3/setuptools/_distutils/_msvccompiler.py b/contrib/python/setuptools/py3/setuptools/_distutils/_msvccompiler.py index 4f081c7e92..a2159fef83 100644 --- a/contrib/python/setuptools/py3/setuptools/_distutils/_msvccompiler.py +++ b/contrib/python/setuptools/py3/setuptools/_distutils/_msvccompiler.py @@ -13,28 +13,28 @@ for older versions in distutils.msvc9compiler and distutils.msvccompiler. # ported to VS 2005 and VS 2008 by Christian Heimes # ported to VS 2015 by Steve Dower +import contextlib import os import subprocess -import contextlib -import warnings import unittest.mock as mock +import warnings with contextlib.suppress(ImportError): import winreg +from itertools import count + +from ._log import log +from .ccompiler import CCompiler, gen_lib_options from .errors import ( + CompileError, DistutilsExecError, DistutilsPlatformError, - CompileError, LibError, LinkError, ) -from .ccompiler import CCompiler, gen_lib_options -from ._log import log from .util import get_platform -from itertools import count - def _find_vc2015(): try: @@ -253,7 +253,7 @@ class MSVCCompiler(CCompiler): vc_env = _get_vc_env(plat_spec) if not vc_env: raise DistutilsPlatformError( - "Unable to find a compatible " "Visual Studio installation." + "Unable to find a compatible Visual Studio installation." ) self._configure(vc_env) diff --git a/contrib/python/setuptools/py3/setuptools/_distutils/archive_util.py b/contrib/python/setuptools/py3/setuptools/_distutils/archive_util.py index 7f9e1e00cc..052f6e4646 100644 --- a/contrib/python/setuptools/py3/setuptools/_distutils/archive_util.py +++ b/contrib/python/setuptools/py3/setuptools/_distutils/archive_util.py @@ -4,8 +4,8 @@ Utility functions for creating archive files (tarballs, zip files, that sort of thing).""" import os -from warnings import warn import sys +from warnings import warn try: import zipfile @@ -13,10 +13,10 @@ except ImportError: zipfile = None +from ._log import log +from .dir_util import mkpath from .errors import DistutilsExecError from .spawn import spawn -from .dir_util import mkpath -from ._log import log try: from pwd import getpwnam diff --git a/contrib/python/setuptools/py3/setuptools/_distutils/bcppcompiler.py b/contrib/python/setuptools/py3/setuptools/_distutils/bcppcompiler.py index 3c2ba15410..c1341e43cb 100644 --- a/contrib/python/setuptools/py3/setuptools/_distutils/bcppcompiler.py +++ b/contrib/python/setuptools/py3/setuptools/_distutils/bcppcompiler.py @@ -11,22 +11,20 @@ for the Borland C++ compiler. # someone should sit down and factor out the common code as # WindowsCCompiler! --GPW - import os import warnings +from ._log import log +from ._modified import newer +from .ccompiler import CCompiler, gen_preprocess_options from .errors import ( - DistutilsExecError, CompileError, + DistutilsExecError, LibError, LinkError, UnknownFileError, ) -from .ccompiler import CCompiler, gen_preprocess_options from .file_util import write_file -from ._modified import newer -from ._log import log - warnings.warn( "bcppcompiler is deprecated and slated to be removed " @@ -239,7 +237,7 @@ class BCPPCompiler(CCompiler): def_file = os.path.join(temp_dir, '%s.def' % modname) contents = ['EXPORTS'] for sym in export_symbols or []: - contents.append(' {}=_{}'.format(sym, sym)) + contents.append(f' {sym}=_{sym}') self.execute(write_file, (def_file, contents), "writing %s" % def_file) # Borland C++ has problems with '/' in paths @@ -349,9 +347,7 @@ class BCPPCompiler(CCompiler): # use normcase to make sure '.rc' is really '.rc' and not '.RC' (base, ext) = os.path.splitext(os.path.normcase(src_name)) if ext not in (self.src_extensions + ['.rc', '.res']): - raise UnknownFileError( - "unknown file type '{}' (from '{}')".format(ext, src_name) - ) + raise UnknownFileError(f"unknown file type '{ext}' (from '{src_name}')") if strip_dir: base = os.path.basename(base) if ext == '.res': diff --git a/contrib/python/setuptools/py3/setuptools/_distutils/ccompiler.py b/contrib/python/setuptools/py3/setuptools/_distutils/ccompiler.py index c1c7d5476e..8876d73098 100644 --- a/contrib/python/setuptools/py3/setuptools/_distutils/ccompiler.py +++ b/contrib/python/setuptools/py3/setuptools/_distutils/ccompiler.py @@ -3,24 +3,25 @@ Contains CCompiler, an abstract base class that defines the interface for the Distutils compiler abstraction model.""" -import sys import os import re +import sys import warnings +from ._itertools import always_iterable +from ._log import log +from ._modified import newer_group +from .dir_util import mkpath from .errors import ( CompileError, + DistutilsModuleError, + DistutilsPlatformError, LinkError, UnknownFileError, - DistutilsPlatformError, - DistutilsModuleError, ) -from .spawn import spawn from .file_util import move_file -from .dir_util import mkpath -from ._modified import newer_group -from .util import split_quoted, execute -from ._log import log +from .spawn import spawn +from .util import execute, split_quoted class CCompiler: @@ -168,8 +169,7 @@ class CCompiler: for key in kwargs: if key not in self.executables: raise ValueError( - "unknown executable '%s' for class %s" - % (key, self.__class__.__name__) + f"unknown executable '{key}' for class {self.__class__.__name__}" ) self.set_executable(key, kwargs[key]) @@ -382,7 +382,7 @@ class CCompiler: raise TypeError("'output_dir' must be a string or None") if macros is None: - macros = self.macros + macros = list(self.macros) elif isinstance(macros, list): macros = macros + (self.macros or []) else: @@ -441,14 +441,14 @@ class CCompiler: fixed versions of all arguments. """ if libraries is None: - libraries = self.libraries + libraries = list(self.libraries) elif isinstance(libraries, (list, tuple)): libraries = list(libraries) + (self.libraries or []) else: raise TypeError("'libraries' (if supplied) must be a list of strings") if library_dirs is None: - library_dirs = self.library_dirs + library_dirs = list(self.library_dirs) elif isinstance(library_dirs, (list, tuple)): library_dirs = list(library_dirs) + (self.library_dirs or []) else: @@ -458,14 +458,14 @@ class CCompiler: library_dirs += self.__class__.library_dirs if runtime_library_dirs is None: - runtime_library_dirs = self.runtime_library_dirs + runtime_library_dirs = list(self.runtime_library_dirs) elif isinstance(runtime_library_dirs, (list, tuple)): runtime_library_dirs = list(runtime_library_dirs) + ( self.runtime_library_dirs or [] ) else: raise TypeError( - "'runtime_library_dirs' (if supplied) " "must be a list of strings" + "'runtime_library_dirs' (if supplied) must be a list of strings" ) return (libraries, library_dirs, runtime_library_dirs) @@ -857,8 +857,7 @@ class CCompiler: if library_dirs is None: library_dirs = [] fd, fname = tempfile.mkstemp(".c", funcname, text=True) - f = os.fdopen(fd, "w") - try: + with os.fdopen(fd, "w", encoding='utf-8') as f: for incl in includes: f.write("""#include "%s"\n""" % incl) if not includes: @@ -887,8 +886,7 @@ int main (int argc, char **argv) { """ % funcname ) - finally: - f.close() + try: objects = self.compile([fname], include_dirs=include_dirs) except CompileError: @@ -972,9 +970,7 @@ int main (int argc, char **argv) { try: new_ext = self.out_extensions[ext] except LookupError: - raise UnknownFileError( - "unknown file type '{}' (from '{}')".format(ext, src_name) - ) + raise UnknownFileError(f"unknown file type '{ext}' (from '{src_name}')") if strip_dir: base = os.path.basename(base) return os.path.join(output_dir, base + new_ext) @@ -1004,7 +1000,11 @@ int main (int argc, char **argv) { return os.path.join(output_dir, basename + (self.exe_extension or '')) def library_filename( - self, libname, lib_type='static', strip_dir=0, output_dir='' # or 'shared' + self, + libname, + lib_type='static', + strip_dir=0, + output_dir='', # or 'shared' ): assert output_dir is not None expected = '"static", "shared", "dylib", "xcode_stub"' @@ -1056,6 +1056,7 @@ _default_compilers = ( # on a cygwin built python we can use gcc like an ordinary UNIXish # compiler ('cygwin.*', 'unix'), + ('zos', 'zos'), # OS name mappings ('posix', 'unix'), ('nt', 'msvc'), @@ -1103,6 +1104,7 @@ compiler_class = { "Mingw32 port of GNU C Compiler for Win32", ), 'bcpp': ('bcppcompiler', 'BCPPCompiler', "Borland C++ Compiler"), + 'zos': ('zosccompiler', 'zOSCCompiler', 'IBM XL C/C++ Compilers'), } @@ -1159,8 +1161,8 @@ def new_compiler(plat=None, compiler=None, verbose=0, dry_run=0, force=0): ) except KeyError: raise DistutilsModuleError( - "can't compile C/C++ code: unable to find class '%s' " - "in module '%s'" % (class_name, module_name) + f"can't compile C/C++ code: unable to find class '{class_name}' " + f"in module '{module_name}'" ) # XXX The None is necessary to preserve backwards compatibility @@ -1207,7 +1209,7 @@ def gen_preprocess_options(macros, include_dirs): # XXX *don't* need to be clever about quoting the # macro value here, because we're going to avoid the # shell at all costs when we spawn the command! - pp_opts.append("-D%s=%s" % macro) + pp_opts.append("-D{}={}".format(*macro)) for dir in include_dirs: pp_opts.append("-I%s" % dir) @@ -1227,11 +1229,7 @@ def gen_lib_options(compiler, library_dirs, runtime_library_dirs, libraries): lib_opts.append(compiler.library_dir_option(dir)) for dir in runtime_library_dirs: - opt = compiler.runtime_library_dir_option(dir) - if isinstance(opt, list): - lib_opts = lib_opts + opt - else: - lib_opts.append(opt) + lib_opts.extend(always_iterable(compiler.runtime_library_dir_option(dir))) # XXX it's important that we *not* remove redundant library mentions! # sometimes you really do have to say "-lfoo -lbar -lfoo" in order to @@ -1247,7 +1245,7 @@ def gen_lib_options(compiler, library_dirs, runtime_library_dirs, libraries): lib_opts.append(lib_file) else: compiler.warn( - "no library file corresponding to " "'%s' found (skipping)" % lib + "no library file corresponding to '%s' found (skipping)" % lib ) else: lib_opts.append(compiler.library_option(lib)) diff --git a/contrib/python/setuptools/py3/setuptools/_distutils/cmd.py b/contrib/python/setuptools/py3/setuptools/_distutils/cmd.py index 8fdcbc0ea2..02dbf165f5 100644 --- a/contrib/python/setuptools/py3/setuptools/_distutils/cmd.py +++ b/contrib/python/setuptools/py3/setuptools/_distutils/cmd.py @@ -4,14 +4,14 @@ Provides the Command class, the base class for the command classes in the distutils.command package. """ -import sys +import logging import os import re -import logging +import sys -from .errors import DistutilsOptionError -from . import util, dir_util, file_util, archive_util, _modified +from . import _modified, archive_util, dir_util, file_util, util from ._log import log +from .errors import DistutilsOptionError class Command: @@ -165,7 +165,7 @@ class Command: if option[-1] == "=": option = option[:-1] value = getattr(self, option) - self.announce(indent + "{} = {}".format(option, value), level=logging.INFO) + self.announce(indent + f"{option} = {value}", level=logging.INFO) def run(self): """A command's raison d'etre: carry out the action it exists to @@ -213,9 +213,7 @@ class Command: setattr(self, option, default) return default elif not isinstance(val, str): - raise DistutilsOptionError( - "'{}' must be a {} (got `{}`)".format(option, what, val) - ) + raise DistutilsOptionError(f"'{option}' must be a {what} (got `{val}`)") return val def ensure_string(self, option, default=None): @@ -242,7 +240,7 @@ class Command: ok = False if not ok: raise DistutilsOptionError( - "'{}' must be a list of strings (got {!r})".format(option, val) + f"'{option}' must be a list of strings (got {val!r})" ) def _ensure_tested_string(self, option, tester, what, error_fmt, default=None): diff --git a/contrib/python/setuptools/py3/setuptools/_distutils/command/_framework_compat.py b/contrib/python/setuptools/py3/setuptools/_distutils/command/_framework_compat.py index cffa27cb08..00d34bc7d8 100644 --- a/contrib/python/setuptools/py3/setuptools/_distutils/command/_framework_compat.py +++ b/contrib/python/setuptools/py3/setuptools/_distutils/command/_framework_compat.py @@ -2,15 +2,14 @@ Backward compatibility for homebrew builds on macOS. """ - -import sys -import os import functools +import os import subprocess +import sys import sysconfig -@functools.lru_cache() +@functools.lru_cache def enabled(): """ Only enabled for Python 3.9 framework homebrew builds @@ -38,7 +37,7 @@ schemes = dict( ) -@functools.lru_cache() +@functools.lru_cache def vars(): if not enabled(): return {} diff --git a/contrib/python/setuptools/py3/setuptools/_distutils/command/bdist.py b/contrib/python/setuptools/py3/setuptools/_distutils/command/bdist.py index 6329039ce4..ade98445ba 100644 --- a/contrib/python/setuptools/py3/setuptools/_distutils/command/bdist.py +++ b/contrib/python/setuptools/py3/setuptools/_distutils/command/bdist.py @@ -7,7 +7,7 @@ import os import warnings from ..core import Command -from ..errors import DistutilsPlatformError, DistutilsOptionError +from ..errors import DistutilsOptionError, DistutilsPlatformError from ..util import get_platform @@ -47,18 +47,18 @@ class bdist(Command): ( 'dist-dir=', 'd', - "directory to put final built distributions in " "[default: dist]", + "directory to put final built distributions in [default: dist]", ), ('skip-build', None, "skip rebuilding everything (for testing/debugging)"), ( 'owner=', 'u', - "Owner name used when creating a tar file" " [default: current user]", + "Owner name used when creating a tar file [default: current user]", ), ( 'group=', 'g', - "Group name used when creating a tar file" " [default: current group]", + "Group name used when creating a tar file [default: current group]", ), ] @@ -76,17 +76,15 @@ class bdist(Command): default_format = {'posix': 'gztar', 'nt': 'zip'} # Define commands in preferred order for the --help-formats option - format_commands = ListCompat( - { - 'rpm': ('bdist_rpm', "RPM distribution"), - 'gztar': ('bdist_dumb', "gzip'ed tar file"), - 'bztar': ('bdist_dumb', "bzip2'ed tar file"), - 'xztar': ('bdist_dumb', "xz'ed tar file"), - 'ztar': ('bdist_dumb', "compressed tar file"), - 'tar': ('bdist_dumb', "tar file"), - 'zip': ('bdist_dumb', "ZIP file"), - } - ) + format_commands = ListCompat({ + 'rpm': ('bdist_rpm', "RPM distribution"), + 'gztar': ('bdist_dumb', "gzip'ed tar file"), + 'bztar': ('bdist_dumb', "bzip2'ed tar file"), + 'xztar': ('bdist_dumb', "xz'ed tar file"), + 'ztar': ('bdist_dumb', "compressed tar file"), + 'tar': ('bdist_dumb', "tar file"), + 'zip': ('bdist_dumb', "ZIP file"), + }) # for compatibility until consumers only reference format_commands format_command = format_commands diff --git a/contrib/python/setuptools/py3/setuptools/_distutils/command/bdist_dumb.py b/contrib/python/setuptools/py3/setuptools/_distutils/command/bdist_dumb.py index 01dd79079b..06502d201e 100644 --- a/contrib/python/setuptools/py3/setuptools/_distutils/command/bdist_dumb.py +++ b/contrib/python/setuptools/py3/setuptools/_distutils/command/bdist_dumb.py @@ -5,12 +5,13 @@ distribution -- i.e., just an archive to be unpacked under $prefix or $exec_prefix).""" import os +from distutils._log import log + from ..core import Command -from ..util import get_platform -from ..dir_util import remove_tree, ensure_relative +from ..dir_util import ensure_relative, remove_tree from ..errors import DistutilsPlatformError from ..sysconfig import get_python_version -from distutils._log import log +from ..util import get_platform class bdist_dumb(Command): @@ -27,7 +28,7 @@ class bdist_dumb(Command): ( 'format=', 'f', - "archive format to create (tar, gztar, bztar, xztar, " "ztar, zip)", + "archive format to create (tar, gztar, bztar, xztar, ztar, zip)", ), ( 'keep-temp', @@ -40,17 +41,17 @@ class bdist_dumb(Command): ( 'relative', None, - "build the archive using relative paths " "(default: false)", + "build the archive using relative paths (default: false)", ), ( 'owner=', 'u', - "Owner name used when creating a tar file" " [default: current user]", + "Owner name used when creating a tar file [default: current user]", ), ( 'group=', 'g', - "Group name used when creating a tar file" " [default: current group]", + "Group name used when creating a tar file [default: current group]", ), ] @@ -104,9 +105,7 @@ class bdist_dumb(Command): # And make an archive relative to the root of the # pseudo-installation tree. - archive_basename = "{}.{}".format( - self.distribution.get_fullname(), self.plat_name - ) + archive_basename = f"{self.distribution.get_fullname()}.{self.plat_name}" pseudoinstall_root = os.path.join(self.dist_dir, archive_basename) if not self.relative: @@ -117,8 +116,7 @@ class bdist_dumb(Command): ): raise DistutilsPlatformError( "can't make a dumb built distribution where " - "base and platbase are different (%s, %s)" - % (repr(install.install_base), repr(install.install_platbase)) + f"base and platbase are different ({repr(install.install_base)}, {repr(install.install_platbase)})" ) else: archive_root = os.path.join( diff --git a/contrib/python/setuptools/py3/setuptools/_distutils/command/bdist_rpm.py b/contrib/python/setuptools/py3/setuptools/_distutils/command/bdist_rpm.py index 3ed608b479..649968a5eb 100644 --- a/contrib/python/setuptools/py3/setuptools/_distutils/command/bdist_rpm.py +++ b/contrib/python/setuptools/py3/setuptools/_distutils/command/bdist_rpm.py @@ -3,21 +3,21 @@ Implements the Distutils 'bdist_rpm' command (create RPM source and binary distributions).""" +import os import subprocess import sys -import os +from distutils._log import log from ..core import Command from ..debug import DEBUG -from ..file_util import write_file from ..errors import ( + DistutilsExecError, + DistutilsFileError, DistutilsOptionError, DistutilsPlatformError, - DistutilsFileError, - DistutilsExecError, ) +from ..file_util import write_file from ..sysconfig import get_python_version -from distutils._log import log class bdist_rpm(Command): @@ -34,7 +34,7 @@ class bdist_rpm(Command): ( 'dist-dir=', 'd', - "directory to put final RPM files in " "(and .spec files if --spec-only)", + "directory to put final RPM files in (and .spec files if --spec-only)", ), ( 'python=', @@ -75,7 +75,7 @@ class bdist_rpm(Command): ( 'packager=', None, - "RPM packager (eg. \"Jane Doe <jane@example.net>\") " "[default: vendor]", + "RPM packager (eg. \"Jane Doe <jane@example.net>\") [default: vendor]", ), ('doc-files=', None, "list of documentation files (space or comma-separated)"), ('changelog=', None, "RPM changelog"), @@ -214,7 +214,7 @@ class bdist_rpm(Command): if os.name != 'posix': raise DistutilsPlatformError( - "don't know how to create RPM " "distributions on platform %s" % os.name + "don't know how to create RPM distributions on platform %s" % os.name ) if self.binary_only and self.source_only: raise DistutilsOptionError( @@ -232,8 +232,7 @@ class bdist_rpm(Command): self.ensure_string('group', "Development/Libraries") self.ensure_string( 'vendor', - "%s <%s>" - % (self.distribution.get_contact(), self.distribution.get_contact_email()), + f"{self.distribution.get_contact()} <{self.distribution.get_contact_email()}>", ) self.ensure_string('packager') self.ensure_string_list('doc_files') @@ -352,11 +351,7 @@ class bdist_rpm(Command): nvr_string = "%{name}-%{version}-%{release}" src_rpm = nvr_string + ".src.rpm" non_src_rpm = "%{arch}/" + nvr_string + ".%{arch}.rpm" - q_cmd = r"rpm -q --qf '{} {}\n' --specfile '{}'".format( - src_rpm, - non_src_rpm, - spec_path, - ) + q_cmd = rf"rpm -q --qf '{src_rpm} {non_src_rpm}\n' --specfile '{spec_path}'" out = os.popen(q_cmd) try: @@ -401,9 +396,11 @@ class bdist_rpm(Command): if os.path.exists(rpm): self.move_file(rpm, self.dist_dir) filename = os.path.join(self.dist_dir, os.path.basename(rpm)) - self.distribution.dist_files.append( - ('bdist_rpm', pyversion, filename) - ) + self.distribution.dist_files.append(( + 'bdist_rpm', + pyversion, + filename, + )) def _dist_path(self, path): return os.path.join(self.dist_dir, os.path.basename(path)) @@ -428,14 +425,14 @@ class bdist_rpm(Command): # Generate a potential replacement value for __os_install_post (whilst # normalizing the whitespace to simplify the test for whether the # invocation of brp-python-bytecompile passes in __python): - vendor_hook = '\n'.join( - [' %s \\' % line.strip() for line in vendor_hook.splitlines()] - ) + vendor_hook = '\n'.join([ + ' %s \\' % line.strip() for line in vendor_hook.splitlines() + ]) problem = "brp-python-bytecompile \\\n" fixed = "brp-python-bytecompile %{__python} \\\n" fixed_hook = vendor_hook.replace(problem, fixed) if fixed_hook != vendor_hook: - spec_file.append('# Workaround for http://bugs.python.org/issue14443') + spec_file.append('# Workaround for https://bugs.python.org/issue14443') spec_file.append('%define __os_install_post ' + fixed_hook + '\n') # put locale summaries into spec file @@ -445,13 +442,11 @@ class bdist_rpm(Command): # spec_file.append('Summary(%s): %s' % (locale, # self.summaries[locale])) - spec_file.extend( - [ - 'Name: %{name}', - 'Version: %{version}', - 'Release: %{release}', - ] - ) + spec_file.extend([ + 'Name: %{name}', + 'Version: %{version}', + 'Release: %{release}', + ]) # XXX yuck! this filename is available from the "sdist" command, # but only after it has run: and we create the spec file before @@ -461,14 +456,12 @@ class bdist_rpm(Command): else: spec_file.append('Source0: %{name}-%{unmangled_version}.tar.gz') - spec_file.extend( - [ - 'License: ' + (self.distribution.get_license() or "UNKNOWN"), - 'Group: ' + self.group, - 'BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-buildroot', - 'Prefix: %{_prefix}', - ] - ) + spec_file.extend([ + 'License: ' + (self.distribution.get_license() or "UNKNOWN"), + 'Group: ' + self.group, + 'BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-buildroot', + 'Prefix: %{_prefix}', + ]) if not self.force_arch: # noarch if no extension modules @@ -489,7 +482,7 @@ class bdist_rpm(Command): if isinstance(val, list): spec_file.append('{}: {}'.format(field, ' '.join(val))) elif val is not None: - spec_file.append('{}: {}'.format(field, val)) + spec_file.append(f'{field}: {val}') if self.distribution.get_url(): spec_file.append('Url: ' + self.distribution.get_url()) @@ -506,13 +499,11 @@ class bdist_rpm(Command): if self.no_autoreq: spec_file.append('AutoReq: 0') - spec_file.extend( - [ - '', - '%description', - self.distribution.get_long_description() or "", - ] - ) + spec_file.extend([ + '', + '%description', + self.distribution.get_long_description() or "", + ]) # put locale descriptions into spec file # XXX again, suppressed because config file syntax doesn't @@ -526,7 +517,7 @@ class bdist_rpm(Command): # rpm scripts # figure out default build script - def_setup_call = "{} {}".format(self.python, os.path.basename(sys.argv[0])) + def_setup_call = f"{self.python} {os.path.basename(sys.argv[0])}" def_build = "%s build" % def_setup_call if self.use_rpm_opt_flags: def_build = 'env CFLAGS="$RPM_OPT_FLAGS" ' + def_build @@ -558,12 +549,10 @@ class bdist_rpm(Command): # use 'default' as contents of script val = getattr(self, attr) if val or default: - spec_file.extend( - [ - '', - '%' + rpm_opt, - ] - ) + spec_file.extend([ + '', + '%' + rpm_opt, + ]) if val: with open(val) as f: spec_file.extend(f.read().split('\n')) @@ -571,24 +560,20 @@ class bdist_rpm(Command): spec_file.append(default) # files section - spec_file.extend( - [ - '', - '%files -f INSTALLED_FILES', - '%defattr(-,root,root)', - ] - ) + spec_file.extend([ + '', + '%files -f INSTALLED_FILES', + '%defattr(-,root,root)', + ]) if self.doc_files: spec_file.append('%doc ' + ' '.join(self.doc_files)) if self.changelog: - spec_file.extend( - [ - '', - '%changelog', - ] - ) + spec_file.extend([ + '', + '%changelog', + ]) spec_file.extend(self.changelog) return spec_file diff --git a/contrib/python/setuptools/py3/setuptools/_distutils/command/build.py b/contrib/python/setuptools/py3/setuptools/_distutils/command/build.py index cc9b367ef9..d18ed503e3 100644 --- a/contrib/python/setuptools/py3/setuptools/_distutils/command/build.py +++ b/contrib/python/setuptools/py3/setuptools/_distutils/command/build.py @@ -2,8 +2,9 @@ Implements the Distutils 'build' command.""" -import sys import os +import sys + from ..core import Command from ..errors import DistutilsOptionError from ..util import get_platform @@ -78,7 +79,7 @@ class build(Command): "using './configure --help' on your platform)" ) - plat_specifier = ".{}-{}".format(self.plat_name, sys.implementation.cache_tag) + plat_specifier = f".{self.plat_name}-{sys.implementation.cache_tag}" # Make it so Python 2.x and Python 2.x with --with-pydebug don't # share the same build directories. Doing so confuses the build diff --git a/contrib/python/setuptools/py3/setuptools/_distutils/command/build_clib.py b/contrib/python/setuptools/py3/setuptools/_distutils/command/build_clib.py index b3f679b67d..360575d0cb 100644 --- a/contrib/python/setuptools/py3/setuptools/_distutils/command/build_clib.py +++ b/contrib/python/setuptools/py3/setuptools/_distutils/command/build_clib.py @@ -15,10 +15,11 @@ module.""" # cut 'n paste. Sigh. import os +from distutils._log import log + from ..core import Command from ..errors import DistutilsSetupError from ..sysconfig import customize_compiler -from distutils._log import log def show_compilers(): @@ -154,7 +155,7 @@ class build_clib(Command): return None lib_names = [] - for lib_name, build_info in self.libraries: + for lib_name, _build_info in self.libraries: lib_names.append(lib_name) return lib_names diff --git a/contrib/python/setuptools/py3/setuptools/_distutils/command/build_ext.py b/contrib/python/setuptools/py3/setuptools/_distutils/command/build_ext.py index b48f462626..06d949aff1 100644 --- a/contrib/python/setuptools/py3/setuptools/_distutils/command/build_ext.py +++ b/contrib/python/setuptools/py3/setuptools/_distutils/command/build_ext.py @@ -8,24 +8,22 @@ import contextlib import os import re import sys +from distutils._log import log +from site import USER_BASE + +from .._modified import newer_group from ..core import Command from ..errors import ( - DistutilsOptionError, - DistutilsSetupError, CCompilerError, - DistutilsError, CompileError, + DistutilsError, + DistutilsOptionError, DistutilsPlatformError, + DistutilsSetupError, ) -from ..sysconfig import customize_compiler, get_python_version -from ..sysconfig import get_config_h_filename -from .._modified import newer_group from ..extension import Extension +from ..sysconfig import customize_compiler, get_config_h_filename, get_python_version from ..util import get_platform -from distutils._log import log -from . import py37compat - -from site import USER_BASE # An extension name is just a dot-separated list of Python NAMEs (ie. # the same as a fully-qualified module name). @@ -130,6 +128,31 @@ class build_ext(Command): self.user = None self.parallel = None + @staticmethod + def _python_lib_dir(sysconfig): + """ + Resolve Python's library directory for building extensions + that rely on a shared Python library. + + See python/cpython#44264 and python/cpython#48686 + """ + if not sysconfig.get_config_var('Py_ENABLE_SHARED'): + return + + if sysconfig.python_build: + yield '.' + return + + if sys.platform == 'zos': + # On z/OS, a user is not required to install Python to + # a predetermined path, but can use Python portably + installed_dir = sysconfig.get_config_var('base') + lib_dir = sysconfig.get_config_var('platlibdir') + yield os.path.join(installed_dir, lib_dir) + else: + # building third party extensions + yield sysconfig.get_config_var('LIBDIR') + def finalize_options(self): # noqa: C901 from distutils import sysconfig @@ -231,16 +254,7 @@ class build_ext(Command): # building python standard extensions self.library_dirs.append('.') - # For building extensions with a shared Python library, - # Python's library directory must be appended to library_dirs - # See Issues: #1600860, #4366 - if sysconfig.get_config_var('Py_ENABLE_SHARED'): - if not sysconfig.python_build: - # building third party extensions - self.library_dirs.append(sysconfig.get_config_var('LIBDIR')) - else: - # building python standard extensions - self.library_dirs.append('.') + self.library_dirs.extend(self._python_lib_dir(sysconfig)) # The argument parsing will result in self.define being a string, but # it has to be a list of 2-tuples. All the preprocessor symbols @@ -412,9 +426,7 @@ class build_ext(Command): # Medium-easy stuff: same syntax/semantics, different names. ext.runtime_library_dirs = build_info.get('rpath') if 'def_file' in build_info: - log.warning( - "'def_file' element of build info dict " "no longer supported" - ) + log.warning("'def_file' element of build info dict no longer supported") # Non-trivial stuff: 'macros' split into 'define_macros' # and 'undef_macros'. @@ -499,7 +511,7 @@ class build_ext(Command): except (CCompilerError, DistutilsError, CompileError) as e: if not ext.optional: raise - self.warn('building extension "{}" failed: {}'.format(ext.name, e)) + self.warn(f'building extension "{ext.name}" failed: {e}') def build_extension(self, ext): sources = ext.sources @@ -785,4 +797,4 @@ class build_ext(Command): ldversion = get_config_var('LDVERSION') return ext.libraries + ['python' + ldversion] - return ext.libraries + py37compat.pythonlib() + return ext.libraries diff --git a/contrib/python/setuptools/py3/setuptools/_distutils/command/build_py.py b/contrib/python/setuptools/py3/setuptools/_distutils/command/build_py.py index d9df95922f..56e6fa2e66 100644 --- a/contrib/python/setuptools/py3/setuptools/_distutils/command/build_py.py +++ b/contrib/python/setuptools/py3/setuptools/_distutils/command/build_py.py @@ -2,15 +2,15 @@ Implements the Distutils 'build_py' command.""" -import os +import glob import importlib.util +import os import sys -import glob +from distutils._log import log from ..core import Command -from ..errors import DistutilsOptionError, DistutilsFileError +from ..errors import DistutilsFileError, DistutilsOptionError from ..util import convert_path -from distutils._log import log class build_py(Command): @@ -129,14 +129,14 @@ class build_py(Command): os.path.join(glob.escape(src_dir), convert_path(pattern)) ) # Files that match more than one pattern are only added once - files.extend( - [fn for fn in filelist if fn not in files and os.path.isfile(fn)] - ) + files.extend([ + fn for fn in filelist if fn not in files and os.path.isfile(fn) + ]) return files def build_package_data(self): """Copy data files into build directory""" - for package, src_dir, build_dir, filenames in self.data_files: + for _package, src_dir, build_dir, filenames in self.data_files: for filename in filenames: target = os.path.join(build_dir, filename) self.mkpath(os.path.dirname(target)) @@ -309,7 +309,7 @@ class build_py(Command): def get_outputs(self, include_bytecode=1): modules = self.find_all_modules() outputs = [] - for package, module, module_file in modules: + for package, module, _module_file in modules: package = package.split('.') filename = self.get_module_outfile(self.build_lib, package, module) outputs.append(filename) diff --git a/contrib/python/setuptools/py3/setuptools/_distutils/command/build_scripts.py b/contrib/python/setuptools/py3/setuptools/_distutils/command/build_scripts.py index 1a4d67f492..5f3902a027 100644 --- a/contrib/python/setuptools/py3/setuptools/_distutils/command/build_scripts.py +++ b/contrib/python/setuptools/py3/setuptools/_distutils/command/build_scripts.py @@ -4,13 +4,14 @@ Implements the Distutils 'build_scripts' command.""" import os import re -from stat import ST_MODE +import tokenize from distutils import sysconfig -from ..core import Command +from distutils._log import log +from stat import ST_MODE + from .._modified import newer +from ..core import Command from ..util import convert_path -from distutils._log import log -import tokenize shebang_pattern = re.compile('^#!.*python[0-9.]*([ \t].*)?$') """ @@ -109,8 +110,7 @@ class build_scripts(Command): else: executable = os.path.join( sysconfig.get_config_var("BINDIR"), - "python%s%s" - % ( + "python{}{}".format( sysconfig.get_config_var("VERSION"), sysconfig.get_config_var("EXE"), ), @@ -156,9 +156,7 @@ class build_scripts(Command): try: shebang.encode('utf-8') except UnicodeEncodeError: - raise ValueError( - "The shebang ({!r}) is not encodable " "to utf-8".format(shebang) - ) + raise ValueError(f"The shebang ({shebang!r}) is not encodable to utf-8") # If the script is encoded to a custom encoding (use a # #coding:xxx cookie), the shebang has to be encodable to @@ -167,6 +165,6 @@ class build_scripts(Command): shebang.encode(encoding) except UnicodeEncodeError: raise ValueError( - "The shebang ({!r}) is not encodable " - "to the script encoding ({})".format(shebang, encoding) + f"The shebang ({shebang!r}) is not encodable " + f"to the script encoding ({encoding})" ) diff --git a/contrib/python/setuptools/py3/setuptools/_distutils/command/check.py b/contrib/python/setuptools/py3/setuptools/_distutils/command/check.py index 575e49fb4b..28599e109c 100644 --- a/contrib/python/setuptools/py3/setuptools/_distutils/command/check.py +++ b/contrib/python/setuptools/py3/setuptools/_distutils/command/check.py @@ -2,16 +2,17 @@ Implements the Distutils 'check' command. """ + import contextlib from ..core import Command from ..errors import DistutilsSetupError with contextlib.suppress(ImportError): - import docutils.utils - import docutils.parsers.rst import docutils.frontend import docutils.nodes + import docutils.parsers.rst + import docutils.utils class SilentReporter(docutils.utils.Reporter): def __init__( @@ -32,7 +33,7 @@ with contextlib.suppress(ImportError): def system_message(self, level, message, *children, **kwargs): self.messages.append((level, message, children, kwargs)) return docutils.nodes.system_message( - message, level=level, type=self.levels[level], *children, **kwargs + message, *children, level=level, type=self.levels[level], **kwargs ) @@ -115,7 +116,7 @@ class check(Command): if line is None: warning = warning[1] else: - warning = '{} (line {})'.format(warning[1], line) + warning = f'{warning[1]} (line {line})' self.warn(warning) def _check_rst_data(self, data): @@ -144,8 +145,11 @@ class check(Command): try: parser.parse(data, document) except AttributeError as e: - reporter.messages.append( - (-1, 'Could not finish the parsing: %s.' % e, '', {}) - ) + reporter.messages.append(( + -1, + 'Could not finish the parsing: %s.' % e, + '', + {}, + )) return reporter.messages diff --git a/contrib/python/setuptools/py3/setuptools/_distutils/command/clean.py b/contrib/python/setuptools/py3/setuptools/_distutils/command/clean.py index 9413f7cfcb..4167a83fb3 100644 --- a/contrib/python/setuptools/py3/setuptools/_distutils/command/clean.py +++ b/contrib/python/setuptools/py3/setuptools/_distutils/command/clean.py @@ -5,9 +5,10 @@ Implements the Distutils 'clean' command.""" # contributed by Bastian Kleineidam <calvin@cs.uni-sb.de>, added 2000-03-18 import os +from distutils._log import log + from ..core import Command from ..dir_util import remove_tree -from distutils._log import log class clean(Command): diff --git a/contrib/python/setuptools/py3/setuptools/_distutils/command/config.py b/contrib/python/setuptools/py3/setuptools/_distutils/command/config.py index 494d97d16f..d4b2b0a362 100644 --- a/contrib/python/setuptools/py3/setuptools/_distutils/command/config.py +++ b/contrib/python/setuptools/py3/setuptools/_distutils/command/config.py @@ -9,13 +9,17 @@ configure-like tasks: "try to compile this C code", or "figure out where this header file lives". """ +from __future__ import annotations + import os +import pathlib import re +from collections.abc import Sequence +from distutils._log import log from ..core import Command from ..errors import DistutilsExecError from ..sysconfig import customize_compiler -from distutils._log import log LANG_EXT = {"c": ".c", "c++": ".cxx"} @@ -102,7 +106,7 @@ class config(Command): def _gen_temp_sourcefile(self, body, headers, lang): filename = "_configtest" + LANG_EXT[lang] - with open(filename, "w") as file: + with open(filename, "w", encoding='utf-8') as file: if headers: for header in headers: file.write("#include <%s>\n" % header) @@ -199,15 +203,8 @@ class config(Command): if isinstance(pattern, str): pattern = re.compile(pattern) - with open(out) as file: - match = False - while True: - line = file.readline() - if line == '': - break - if pattern.search(line): - match = True - break + with open(out, encoding='utf-8') as file: + match = any(pattern.search(line) for line in file) self._clean() return match @@ -331,7 +328,7 @@ class config(Command): library_dirs=None, headers=None, include_dirs=None, - other_libraries=[], + other_libraries: Sequence[str] = [], ): """Determine if 'library' is available to be linked against, without actually checking that any particular symbols are provided @@ -346,7 +343,7 @@ class config(Command): "int main (void) { }", headers, include_dirs, - [library] + other_libraries, + [library] + list(other_libraries), library_dirs, ) @@ -369,8 +366,4 @@ def dump_file(filename, head=None): log.info('%s', filename) else: log.info(head) - file = open(filename) - try: - log.info(file.read()) - finally: - file.close() + log.info(pathlib.Path(filename).read_text(encoding='utf-8')) diff --git a/contrib/python/setuptools/py3/setuptools/_distutils/command/install.py b/contrib/python/setuptools/py3/setuptools/_distutils/command/install.py index a7ac4e6077..8e920be4de 100644 --- a/contrib/python/setuptools/py3/setuptools/_distutils/command/install.py +++ b/contrib/python/setuptools/py3/setuptools/_distutils/command/install.py @@ -2,25 +2,22 @@ Implements the Distutils 'install' command.""" -import sys -import os import contextlib -import sysconfig import itertools - +import os +import sys +import sysconfig from distutils._log import log +from site import USER_BASE, USER_SITE + +from .. import _collections from ..core import Command from ..debug import DEBUG -from ..sysconfig import get_config_vars -from ..file_util import write_file -from ..util import convert_path, subst_vars, change_root -from ..util import get_platform from ..errors import DistutilsOptionError, DistutilsPlatformError +from ..file_util import write_file +from ..sysconfig import get_config_vars +from ..util import change_root, convert_path, get_platform, subst_vars from . import _framework_compat as fw -from .. import _collections - -from site import USER_BASE -from site import USER_SITE HAS_USER_SITE = True @@ -245,9 +242,11 @@ class install(Command): boolean_options = ['compile', 'force', 'skip-build'] if HAS_USER_SITE: - user_options.append( - ('user', None, "install in user site-package '%s'" % USER_SITE) - ) + user_options.append(( + 'user', + None, + "install in user site-package '%s'" % USER_SITE, + )) boolean_options.append('user') negative_opt = {'no-compile': 'compile'} @@ -432,9 +431,12 @@ class install(Command): local_vars['userbase'] = self.install_userbase local_vars['usersite'] = self.install_usersite - self.config_vars = _collections.DictStack( - [fw.vars(), compat_vars, sysconfig.get_config_vars(), local_vars] - ) + self.config_vars = _collections.DictStack([ + fw.vars(), + compat_vars, + sysconfig.get_config_vars(), + local_vars, + ]) self.expand_basedirs() @@ -620,16 +622,14 @@ class install(Command): def expand_dirs(self): """Calls `os.path.expanduser` on install dirs.""" - self._expand_attrs( - [ - 'install_purelib', - 'install_platlib', - 'install_lib', - 'install_headers', - 'install_scripts', - 'install_data', - ] - ) + self._expand_attrs([ + 'install_purelib', + 'install_platlib', + 'install_lib', + 'install_headers', + 'install_scripts', + 'install_data', + ]) def convert_paths(self, *names): """Call `convert_path` over `names`.""" @@ -683,7 +683,7 @@ class install(Command): if not self.user: return home = convert_path(os.path.expanduser("~")) - for name, path in self.config_vars.items(): + for _name, path in self.config_vars.items(): if str(path).startswith(home) and not os.path.isdir(path): self.debug_print("os.makedirs('%s', 0o700)" % path) os.makedirs(path, 0o700) @@ -701,7 +701,7 @@ class install(Command): # internally, and not to sys.path, so we don't check the platform # matches what we are running. if self.warn_dir and build_plat != get_platform(): - raise DistutilsPlatformError("Can't install when " "cross-compiling") + raise DistutilsPlatformError("Can't install when cross-compiling") # Run all sub-commands (at least those that need to be run) for cmd_name in self.get_sub_commands(): diff --git a/contrib/python/setuptools/py3/setuptools/_distutils/command/install_data.py b/contrib/python/setuptools/py3/setuptools/_distutils/command/install_data.py index 7ba35eef82..b63a1af25e 100644 --- a/contrib/python/setuptools/py3/setuptools/_distutils/command/install_data.py +++ b/contrib/python/setuptools/py3/setuptools/_distutils/command/install_data.py @@ -6,6 +6,7 @@ platform-independent data files.""" # contributed by Bastian Kleineidam import os + from ..core import Command from ..util import change_root, convert_path @@ -51,7 +52,7 @@ class install_data(Command): if self.warn_dir: self.warn( "setup script did not provide a directory for " - "'%s' -- installing right in '%s'" % (f, self.install_dir) + f"'{f}' -- installing right in '{self.install_dir}'" ) (out, _) = self.copy_file(f, self.install_dir) self.outfiles.append(out) diff --git a/contrib/python/setuptools/py3/setuptools/_distutils/command/install_egg_info.py b/contrib/python/setuptools/py3/setuptools/_distutils/command/install_egg_info.py index f3e8f3447d..4fbb3440ab 100644 --- a/contrib/python/setuptools/py3/setuptools/_distutils/command/install_egg_info.py +++ b/contrib/python/setuptools/py3/setuptools/_distutils/command/install_egg_info.py @@ -6,12 +6,12 @@ a package's PKG-INFO metadata. """ import os -import sys import re +import sys -from ..cmd import Command from .. import dir_util from .._log import log +from ..cmd import Command class install_egg_info(Command): diff --git a/contrib/python/setuptools/py3/setuptools/_distutils/command/install_lib.py b/contrib/python/setuptools/py3/setuptools/_distutils/command/install_lib.py index be4c243321..b1f346f018 100644 --- a/contrib/python/setuptools/py3/setuptools/_distutils/command/install_lib.py +++ b/contrib/python/setuptools/py3/setuptools/_distutils/command/install_lib.py @@ -3,14 +3,13 @@ Implements the Distutils 'install_lib' command (install all Python modules).""" -import os import importlib.util +import os import sys from ..core import Command from ..errors import DistutilsOptionError - # Extension for Python source files. PYTHON_SOURCE_EXTENSION = ".py" diff --git a/contrib/python/setuptools/py3/setuptools/_distutils/command/install_scripts.py b/contrib/python/setuptools/py3/setuptools/_distutils/command/install_scripts.py index 20f07aaa27..e66b13a16d 100644 --- a/contrib/python/setuptools/py3/setuptools/_distutils/command/install_scripts.py +++ b/contrib/python/setuptools/py3/setuptools/_distutils/command/install_scripts.py @@ -6,10 +6,11 @@ Python scripts.""" # contributed by Bastian Kleineidam import os -from ..core import Command from distutils._log import log from stat import ST_MODE +from ..core import Command + class install_scripts(Command): description = "install scripts (Python or otherwise)" diff --git a/contrib/python/setuptools/py3/setuptools/_distutils/command/py37compat.py b/contrib/python/setuptools/py3/setuptools/_distutils/command/py37compat.py deleted file mode 100644 index aa0c0a7fcd..0000000000 --- a/contrib/python/setuptools/py3/setuptools/_distutils/command/py37compat.py +++ /dev/null @@ -1,31 +0,0 @@ -import sys - - -def _pythonlib_compat(): - """ - On Python 3.7 and earlier, distutils would include the Python - library. See pypa/distutils#9. - """ - from distutils import sysconfig - - if not sysconfig.get_config_var('Py_ENABLED_SHARED'): - return - - yield 'python{}.{}{}'.format( - sys.hexversion >> 24, - (sys.hexversion >> 16) & 0xFF, - sysconfig.get_config_var('ABIFLAGS'), - ) - - -def compose(f1, f2): - return lambda *args, **kwargs: f1(f2(*args, **kwargs)) - - -pythonlib = ( - compose(list, _pythonlib_compat) - if sys.version_info < (3, 8) - and sys.platform != 'darwin' - and sys.platform[:3] != 'aix' - else list -) diff --git a/contrib/python/setuptools/py3/setuptools/_distutils/command/register.py b/contrib/python/setuptools/py3/setuptools/_distutils/command/register.py index c19aabb91f..ee6c54daba 100644 --- a/contrib/python/setuptools/py3/setuptools/_distutils/command/register.py +++ b/contrib/python/setuptools/py3/setuptools/_distutils/command/register.py @@ -10,10 +10,11 @@ import io import logging import urllib.parse import urllib.request +from distutils._log import log from warnings import warn +from .._itertools import always_iterable from ..core import PyPIRCCommand -from distutils._log import log class register(PyPIRCCommand): @@ -77,7 +78,7 @@ class register(PyPIRCCommand): check.run() def _set_config(self): - '''Reads the configuration file and set attributes.''' + """Reads the configuration file and set attributes.""" config = self._read_pypirc() if config != {}: self.username = config['username'] @@ -93,19 +94,19 @@ class register(PyPIRCCommand): self.has_config = False def classifiers(self): - '''Fetch the list of classifiers from the server.''' + """Fetch the list of classifiers from the server.""" url = self.repository + '?:action=list_classifiers' response = urllib.request.urlopen(url) log.info(self._read_pypi_response(response)) def verify_metadata(self): - '''Send the metadata to the package index server to be checked.''' + """Send the metadata to the package index server to be checked.""" # send the info to the server and report the result (code, result) = self.post_to_server(self.build_post_data('verify')) log.info('Server response (%s): %s', code, result) def send_metadata(self): # noqa: C901 - '''Send the metadata to the package index server. + """Send the metadata to the package index server. Well, do the following: 1. figure who the user is, and then @@ -131,7 +132,7 @@ class register(PyPIRCCommand): 2. register as a new user, or 3. set the password to a random string and email the user. - ''' + """ # see if we can short-cut and get the username/password from the # config if self.has_config: @@ -146,13 +147,13 @@ class register(PyPIRCCommand): choices = '1 2 3 4'.split() while choice not in choices: self.announce( - '''\ + """\ We need to know who you are, so please choose either: 1. use your existing login, 2. register as a new user, 3. have the server generate a new password for you (and email it to you), or 4. quit -Your selection [default 1]: ''', +Your selection [default 1]: """, logging.INFO, ) choice = input() @@ -174,7 +175,7 @@ Your selection [default 1]: ''', auth.add_password(self.realm, host, username, password) # send the info to the server and report the result code, result = self.post_to_server(self.build_post_data('submit'), auth) - self.announce('Server response ({}): {}'.format(code, result), logging.INFO) + self.announce(f'Server response ({code}): {result}', logging.INFO) # possibly save the login if code == 200: @@ -262,7 +263,7 @@ Your selection [default 1]: ''', return data def post_to_server(self, data, auth=None): # noqa: C901 - '''Post a query to the server, and return a string response.''' + """Post a query to the server, and return a string response.""" if 'name' in data: self.announce( 'Registering {} to {}'.format(data['name'], self.repository), @@ -273,12 +274,8 @@ Your selection [default 1]: ''', sep_boundary = '\n--' + boundary end_boundary = sep_boundary + '--' body = io.StringIO() - for key, value in data.items(): - # handle multiple entries for the same name - if type(value) not in (type([]), type(())): - value = [value] - for value in value: - value = str(value) + for key, values in data.items(): + for value in map(str, make_iterable(values)): body.write(sep_boundary) body.write('\nContent-Disposition: form-data; name="%s"' % key) body.write("\n\n") @@ -318,3 +315,9 @@ Your selection [default 1]: ''', msg = '\n'.join(('-' * 75, data, '-' * 75)) self.announce(msg, logging.INFO) return result + + +def make_iterable(values): + if values is None: + return [None] + return always_iterable(values) diff --git a/contrib/python/setuptools/py3/setuptools/_distutils/command/sdist.py b/contrib/python/setuptools/py3/setuptools/_distutils/command/sdist.py index ac489726ca..387d27c90b 100644 --- a/contrib/python/setuptools/py3/setuptools/_distutils/command/sdist.py +++ b/contrib/python/setuptools/py3/setuptools/_distutils/command/sdist.py @@ -4,26 +4,25 @@ Implements the Distutils 'sdist' command (create a source distribution).""" import os import sys +from distutils import archive_util, dir_util, file_util +from distutils._log import log from glob import glob +from itertools import filterfalse from warnings import warn from ..core import Command -from distutils import dir_util -from distutils import file_util -from distutils import archive_util -from ..text_file import TextFile +from ..errors import DistutilsOptionError, DistutilsTemplateError from ..filelist import FileList -from distutils._log import log +from ..text_file import TextFile from ..util import convert_path -from ..errors import DistutilsOptionError, DistutilsTemplateError def show_formats(): """Print all possible values for the 'formats' option (used by the "--help-formats" command-line option). """ - from ..fancy_getopt import FancyGetopt from ..archive_util import ARCHIVE_FORMATS + from ..fancy_getopt import FancyGetopt formats = [] for format in ARCHIVE_FORMATS.keys(): @@ -62,7 +61,7 @@ class sdist(Command): ( 'manifest-only', 'o', - "just regenerate the manifest and then stop " "(implies --force-manifest)", + "just regenerate the manifest and then stop (implies --force-manifest)", ), ( 'force-manifest', @@ -79,7 +78,7 @@ class sdist(Command): ( 'dist-dir=', 'd', - "directory to put the source distribution archive(s) in " "[default: dist]", + "directory to put the source distribution archive(s) in [default: dist]", ), ( 'metadata-check', @@ -309,7 +308,7 @@ class sdist(Command): # getting package_data files # (computed in build_py.data_files by build_py.finalize_options) - for pkg, src_dir, build_dir, filenames in build_py.data_files: + for _pkg, src_dir, _build_dir, filenames in build_py.data_files: for filename in filenames: self.filelist.append(os.path.join(src_dir, filename)) @@ -429,11 +428,8 @@ class sdist(Command): if not os.path.isfile(self.manifest): return False - fp = open(self.manifest) - try: - first_line = fp.readline() - finally: - fp.close() + with open(self.manifest, encoding='utf-8') as fp: + first_line = next(fp) return first_line != '# file GENERATED by distutils, do NOT edit\n' def read_manifest(self): @@ -442,13 +438,11 @@ class sdist(Command): distribution. """ log.info("reading manifest file '%s'", self.manifest) - with open(self.manifest) as manifest: - for line in manifest: + with open(self.manifest, encoding='utf-8') as lines: + self.filelist.extend( # ignore comments and blank lines - line = line.strip() - if line.startswith('#') or not line: - continue - self.filelist.append(line) + filter(None, filterfalse(is_comment, map(str.strip, lines))) + ) def make_release_tree(self, base_dir, files): """Create the directory tree that will become the source @@ -528,3 +522,7 @@ class sdist(Command): was run, or None if the command hasn't run yet. """ return self.archive_files + + +def is_comment(line): + return line.startswith('#') diff --git a/contrib/python/setuptools/py3/setuptools/_distutils/command/upload.py b/contrib/python/setuptools/py3/setuptools/_distutils/command/upload.py index caf15f04a6..cf541f8a82 100644 --- a/contrib/python/setuptools/py3/setuptools/_distutils/command/upload.py +++ b/contrib/python/setuptools/py3/setuptools/_distutils/command/upload.py @@ -5,18 +5,19 @@ Implements the Distutils 'upload' subcommand (upload package to a package index). """ -import os -import io import hashlib +import io import logging +import os from base64 import standard_b64encode -from urllib.request import urlopen, Request, HTTPError from urllib.parse import urlparse -from ..errors import DistutilsError, DistutilsOptionError +from urllib.request import HTTPError, Request, urlopen + +from .._itertools import always_iterable from ..core import PyPIRCCommand +from ..errors import DistutilsError, DistutilsOptionError from ..spawn import spawn - # PyPI Warehouse supports MD5, SHA256, and Blake2 (blake2-256) # https://bugs.python.org/issue40698 _FILE_CONTENT_DIGESTS = { @@ -151,12 +152,9 @@ class upload(PyPIRCCommand): sep_boundary = b'\r\n--' + boundary.encode('ascii') end_boundary = sep_boundary + b'--\r\n' body = io.BytesIO() - for key, value in data.items(): + for key, values in data.items(): title = '\r\nContent-Disposition: form-data; name="%s"' % key - # handle multiple entries for the same name - if not isinstance(value, list): - value = [value] - for value in value: + for value in make_iterable(values): if type(value) is tuple: title += '; filename="%s"' % value[0] value = value[1] @@ -169,7 +167,7 @@ class upload(PyPIRCCommand): body.write(end_boundary) body = body.getvalue() - msg = "Submitting {} to {}".format(filename, self.repository) + msg = f"Submitting {filename} to {self.repository}" self.announce(msg, logging.INFO) # build the Request @@ -193,14 +191,18 @@ class upload(PyPIRCCommand): raise if status == 200: - self.announce( - 'Server response ({}): {}'.format(status, reason), logging.INFO - ) + self.announce(f'Server response ({status}): {reason}', logging.INFO) if self.show_response: text = self._read_pypi_response(result) msg = '\n'.join(('-' * 75, text, '-' * 75)) self.announce(msg, logging.INFO) else: - msg = 'Upload failed ({}): {}'.format(status, reason) + msg = f'Upload failed ({status}): {reason}' self.announce(msg, logging.ERROR) raise DistutilsError(msg) + + +def make_iterable(values): + if values is None: + return [None] + return always_iterable(values, base_type=(bytes, str, tuple)) diff --git a/contrib/python/setuptools/py3/setuptools/_distutils/compat/__init__.py b/contrib/python/setuptools/py3/setuptools/_distutils/compat/__init__.py new file mode 100644 index 0000000000..b1ee3fe8b0 --- /dev/null +++ b/contrib/python/setuptools/py3/setuptools/_distutils/compat/__init__.py @@ -0,0 +1,15 @@ +from __future__ import annotations + +from .py38 import removeprefix + + +def consolidate_linker_args(args: list[str]) -> str: + """ + Ensure the return value is a string for backward compatibility. + + Retain until at least 2024-04-31. See pypa/distutils#246 + """ + + if not all(arg.startswith('-Wl,') for arg in args): + return args + return '-Wl,' + ','.join(removeprefix(arg, '-Wl,') for arg in args) diff --git a/contrib/python/setuptools/py3/setuptools/_distutils/compat/py38.py b/contrib/python/setuptools/py3/setuptools/_distutils/compat/py38.py new file mode 100644 index 0000000000..0af3814017 --- /dev/null +++ b/contrib/python/setuptools/py3/setuptools/_distutils/compat/py38.py @@ -0,0 +1,23 @@ +import sys + +if sys.version_info < (3, 9): + + def removesuffix(self, suffix): + # suffix='' should not call self[:-0]. + if suffix and self.endswith(suffix): + return self[: -len(suffix)] + else: + return self[:] + + def removeprefix(self, prefix): + if self.startswith(prefix): + return self[len(prefix) :] + else: + return self[:] +else: + + def removesuffix(self, suffix): + return self.removesuffix(suffix) + + def removeprefix(self, prefix): + return self.removeprefix(prefix) diff --git a/contrib/python/setuptools/py3/setuptools/_distutils/config.py b/contrib/python/setuptools/py3/setuptools/_distutils/config.py index 9a4044adaf..83f96a9eec 100644 --- a/contrib/python/setuptools/py3/setuptools/_distutils/config.py +++ b/contrib/python/setuptools/py3/setuptools/_distutils/config.py @@ -3,6 +3,8 @@ Provides the PyPIRCCommand class, the base class for the command classes that uses .pypirc in the distutils.command package. """ + +import email.message import os from configparser import RawConfigParser @@ -41,7 +43,8 @@ class PyPIRCCommand(Command): def _store_pypirc(self, username, password): """Creates a default .pypirc file.""" rc = self._get_rc_file() - with os.fdopen(os.open(rc, os.O_CREAT | os.O_WRONLY, 0o600), 'w') as f: + raw = os.open(rc, os.O_CREAT | os.O_WRONLY, 0o600) + with os.fdopen(raw, 'w', encoding='utf-8') as f: f.write(DEFAULT_PYPIRC % (username, password)) def _read_pypirc(self): # noqa: C901 @@ -52,7 +55,7 @@ class PyPIRCCommand(Command): repository = self.repository or self.DEFAULT_REPOSITORY config = RawConfigParser() - config.read(rc) + config.read(rc, encoding='utf-8') sections = config.sections() if 'distutils' in sections: # let's get the list of servers @@ -119,11 +122,8 @@ class PyPIRCCommand(Command): def _read_pypi_response(self, response): """Read and decode a PyPI HTTP response.""" - import cgi - content_type = response.getheader('content-type', 'text/plain') - encoding = cgi.parse_header(content_type)[1].get('charset', 'ascii') - return response.read().decode(encoding) + return response.read().decode(_extract_encoding(content_type)) def initialize_options(self): """Initialize options.""" @@ -137,3 +137,15 @@ class PyPIRCCommand(Command): self.repository = self.DEFAULT_REPOSITORY if self.realm is None: self.realm = self.DEFAULT_REALM + + +def _extract_encoding(content_type): + """ + >>> _extract_encoding('text/plain') + 'ascii' + >>> _extract_encoding('text/html; charset="utf8"') + 'utf8' + """ + msg = email.message.EmailMessage() + msg['content-type'] = content_type + return msg['content-type'].params.get('charset', 'ascii') diff --git a/contrib/python/setuptools/py3/setuptools/_distutils/core.py b/contrib/python/setuptools/py3/setuptools/_distutils/core.py index 05d2971994..309ce696fa 100644 --- a/contrib/python/setuptools/py3/setuptools/_distutils/core.py +++ b/contrib/python/setuptools/py3/setuptools/_distutils/core.py @@ -10,21 +10,20 @@ import os import sys import tokenize +from .cmd import Command +from .config import PyPIRCCommand from .debug import DEBUG + +# Mainly import these so setup scripts can "from distutils.core import" them. +from .dist import Distribution from .errors import ( - DistutilsSetupError, - DistutilsError, CCompilerError, DistutilsArgError, + DistutilsError, + DistutilsSetupError, ) - -# Mainly import these so setup scripts can "from distutils.core import" them. -from .dist import Distribution -from .cmd import Command -from .config import PyPIRCCommand from .extension import Extension - __all__ = ['Distribution', 'Command', 'PyPIRCCommand', 'Extension', 'setup'] # This is a barebones help message generated displayed when the user @@ -203,10 +202,10 @@ def run_commands(dist): raise SystemExit("interrupted") except OSError as exc: if DEBUG: - sys.stderr.write("error: {}\n".format(exc)) + sys.stderr.write(f"error: {exc}\n") raise else: - raise SystemExit("error: {}".format(exc)) + raise SystemExit(f"error: {exc}") except (DistutilsError, CCompilerError) as msg: if DEBUG: @@ -249,7 +248,7 @@ def run_setup(script_name, script_args=None, stop_after="run"): used to drive the Distutils. """ if stop_after not in ('init', 'config', 'commandline', 'run'): - raise ValueError("invalid value for 'stop_after': {!r}".format(stop_after)) + raise ValueError(f"invalid value for 'stop_after': {stop_after!r}") global _setup_stop_after, _setup_distribution _setup_stop_after = stop_after diff --git a/contrib/python/setuptools/py3/setuptools/_distutils/cygwinccompiler.py b/contrib/python/setuptools/py3/setuptools/_distutils/cygwinccompiler.py index 47efa377c5..539f09d8f3 100644 --- a/contrib/python/setuptools/py3/setuptools/_distutils/cygwinccompiler.py +++ b/contrib/python/setuptools/py3/setuptools/_distutils/cygwinccompiler.py @@ -6,25 +6,25 @@ the Mingw32CCompiler class which handles the mingw32 port of GCC (same as cygwin in no-cygwin mode). """ +import copy import os +import pathlib import re -import sys -import copy import shlex +import sys import warnings from subprocess import check_output -from .unixccompiler import UnixCCompiler -from .file_util import write_file +from ._collections import RangeMap from .errors import ( - DistutilsExecError, - DistutilsPlatformError, CCompilerError, CompileError, + DistutilsExecError, + DistutilsPlatformError, ) +from .file_util import write_file +from .unixccompiler import UnixCCompiler from .version import LooseVersion, suppress_known_deprecation -from ._collections import RangeMap - _msvcr_lookup = RangeMap.left( { @@ -87,9 +87,7 @@ class CygwinCCompiler(UnixCCompiler): super().__init__(verbose, dry_run, force) status, details = check_config_h() - self.debug_print( - "Python's GCC status: {} (details: {})".format(status, details) - ) + self.debug_print(f"Python's GCC status: {status} (details: {details})") if status is not CONFIG_H_OK: self.warn( "Python's pyconfig.h doesn't seem to support your compiler. " @@ -108,7 +106,7 @@ class CygwinCCompiler(UnixCCompiler): compiler_so='%s -mcygwin -mdll -O -Wall' % self.cc, compiler_cxx='%s -mcygwin -O -Wall' % self.cxx, linker_exe='%s -mcygwin' % self.cc, - linker_so=('{} -mcygwin {}'.format(self.linker_dll, shared_option)), + linker_so=(f'{self.linker_dll} -mcygwin {shared_option}'), ) # Include the appropriate MSVC runtime library if Python was built @@ -280,7 +278,7 @@ class Mingw32CCompiler(CygwinCCompiler): compiler_so='%s -mdll -O -Wall' % self.cc, compiler_cxx='%s -O -Wall' % self.cxx, linker_exe='%s' % self.cc, - linker_so='{} {}'.format(self.linker_dll, shared_option), + linker_so=f'{self.linker_dll} {shared_option}', ) def runtime_library_dir_option(self, dir): @@ -331,20 +329,21 @@ def check_config_h(): # let's see if __GNUC__ is mentioned in python.h fn = sysconfig.get_config_h_filename() try: - config_h = open(fn) - try: - if "__GNUC__" in config_h.read(): - return CONFIG_H_OK, "'%s' mentions '__GNUC__'" % fn - else: - return CONFIG_H_NOTOK, "'%s' does not mention '__GNUC__'" % fn - finally: - config_h.close() + config_h = pathlib.Path(fn).read_text(encoding='utf-8') + substring = '__GNUC__' + if substring in config_h: + code = CONFIG_H_OK + mention_inflected = 'mentions' + else: + code = CONFIG_H_NOTOK + mention_inflected = 'does not mention' + return code, f"{fn!r} {mention_inflected} {substring!r}" except OSError as exc: - return (CONFIG_H_UNCERTAIN, "couldn't read '{}': {}".format(fn, exc.strerror)) + return (CONFIG_H_UNCERTAIN, f"couldn't read '{fn}': {exc.strerror}") def is_cygwincc(cc): - '''Try to determine if the compiler that would be used is from cygwin.''' + """Try to determine if the compiler that would be used is from cygwin.""" out_string = check_output(shlex.split(cc) + ['-dumpmachine']) return out_string.strip().endswith(b'cygwin') diff --git a/contrib/python/setuptools/py3/setuptools/_distutils/dir_util.py b/contrib/python/setuptools/py3/setuptools/_distutils/dir_util.py index 23dc3392a2..370c6ffd49 100644 --- a/contrib/python/setuptools/py3/setuptools/_distutils/dir_util.py +++ b/contrib/python/setuptools/py3/setuptools/_distutils/dir_util.py @@ -2,10 +2,11 @@ Utility functions for manipulating directories and directory trees.""" -import os import errno -from .errors import DistutilsInternalError, DistutilsFileError +import os + from ._log import log +from .errors import DistutilsFileError, DistutilsInternalError # cache for by mkpath() -- in addition to cheapening redundant calls, # eliminates redundant "creating /foo/bar/baz" messages in dry-run mode @@ -33,9 +34,7 @@ def mkpath(name, mode=0o777, verbose=1, dry_run=0): # noqa: C901 # Detect a common bug -- name is None if not isinstance(name, str): - raise DistutilsInternalError( - "mkpath: 'name' must be a string (got {!r})".format(name) - ) + raise DistutilsInternalError(f"mkpath: 'name' must be a string (got {name!r})") # XXX what's the better way to handle verbosity? print as we create # each directory in the path (the current behaviour), or only announce @@ -76,7 +75,7 @@ def mkpath(name, mode=0o777, verbose=1, dry_run=0): # noqa: C901 except OSError as exc: if not (exc.errno == errno.EEXIST and os.path.isdir(head)): raise DistutilsFileError( - "could not create '{}': {}".format(head, exc.args[-1]) + f"could not create '{head}': {exc.args[-1]}" ) created_dirs.append(head) @@ -95,9 +94,7 @@ def create_tree(base_dir, files, mode=0o777, verbose=1, dry_run=0): 'dry_run' flags are as for 'mkpath()'. """ # First get the list of directories to create - need_dir = set() - for file in files: - need_dir.add(os.path.join(base_dir, os.path.dirname(file))) + need_dir = set(os.path.join(base_dir, os.path.dirname(file)) for file in files) # Now create them for dir in sorted(need_dir): @@ -143,9 +140,7 @@ def copy_tree( # noqa: C901 if dry_run: names = [] else: - raise DistutilsFileError( - "error listing files in '{}': {}".format(src, e.strerror) - ) + raise DistutilsFileError(f"error listing files in '{src}': {e.strerror}") if not dry_run: mkpath(dst, verbose=verbose) diff --git a/contrib/python/setuptools/py3/setuptools/_distutils/dist.py b/contrib/python/setuptools/py3/setuptools/_distutils/dist.py index 7c0f0e5b78..668ce7eb0a 100644 --- a/contrib/python/setuptools/py3/setuptools/_distutils/dist.py +++ b/contrib/python/setuptools/py3/setuptools/_distutils/dist.py @@ -4,12 +4,13 @@ Provides the Distribution class, which represents the module distribution being built/installed/distributed. """ -import sys -import os -import re -import pathlib import contextlib import logging +import os +import pathlib +import re +import sys +from collections.abc import Iterable from email import message_from_file try: @@ -17,16 +18,16 @@ try: except ImportError: warnings = None +from ._log import log +from .debug import DEBUG from .errors import ( - DistutilsOptionError, - DistutilsModuleError, DistutilsArgError, DistutilsClassError, + DistutilsModuleError, + DistutilsOptionError, ) from .fancy_getopt import FancyGetopt, translate_longopt -from .util import check_environ, strtobool, rfc822_escape -from ._log import log -from .debug import DEBUG +from .util import check_environ, rfc822_escape, strtobool # Regex to define acceptable Distutils command names. This is not *quite* # the same as a Python NAME -- I don't allow leading underscores. The fact @@ -395,7 +396,7 @@ Common commands: (see '--help-commands' for more) for filename in filenames: if DEBUG: self.announce(" reading %s" % filename) - parser.read(filename) + parser.read(filename, encoding='utf-8') for section in parser.sections(): options = parser.options(section) opt_dict = self.get_option_dict(section) @@ -414,7 +415,7 @@ Common commands: (see '--help-commands' for more) # to set Distribution options. if 'global' in self.command_options: - for opt, (src, val) in self.command_options['global'].items(): + for opt, (_src, val) in self.command_options['global'].items(): alias = self.negative_opt.get(opt) try: if alias: @@ -585,16 +586,15 @@ Common commands: (see '--help-commands' for more) cmd_class.help_options, list ): help_option_found = 0 - for help_option, short, desc, func in cmd_class.help_options: + for help_option, _short, _desc, func in cmd_class.help_options: if hasattr(opts, parser.get_attr_name(help_option)): help_option_found = 1 if callable(func): func() else: raise DistutilsClassError( - "invalid help function %r for help option '%s': " + f"invalid help function {func!r} for help option '{help_option}': " "must be a callable object (function, etc.)" - % (func, help_option) ) if help_option_found: @@ -621,7 +621,9 @@ Common commands: (see '--help-commands' for more) value = [elm.strip() for elm in value.split(',')] setattr(self.metadata, attr, value) - def _show_help(self, parser, global_options=1, display_options=1, commands=[]): + def _show_help( + self, parser, global_options=1, display_options=1, commands: Iterable = () + ): """Show help for the setup script command-line in the form of several lists of command-line options. 'parser' should be a FancyGetopt instance; do not expect it to be returned in the @@ -635,8 +637,8 @@ Common commands: (see '--help-commands' for more) in 'commands'. """ # late import because of mutual dependence between these modules - from distutils.core import gen_usage from distutils.cmd import Command + from distutils.core import gen_usage if global_options: if display_options: @@ -645,7 +647,7 @@ Common commands: (see '--help-commands' for more) options = self.global_options parser.set_option_table(options) parser.print_help(self.common_usage + "\nGlobal options:") - print('') + print() if display_options: parser.set_option_table(self.display_options) @@ -653,7 +655,7 @@ Common commands: (see '--help-commands' for more) "Information display options (just display " + "information, ignore any commands)" ) - print('') + print() for command in self.commands: if isinstance(command, type) and issubclass(command, Command): @@ -667,7 +669,7 @@ Common commands: (see '--help-commands' for more) else: parser.set_option_table(klass.user_options) parser.print_help("Options for '%s' command:" % klass.__name__) - print('') + print() print(gen_usage(self.script_name)) @@ -684,7 +686,7 @@ Common commands: (see '--help-commands' for more) # we ignore "foo bar"). if self.help_commands: self.print_commands() - print('') + print() print(gen_usage(self.script_name)) return 1 @@ -821,7 +823,7 @@ Common commands: (see '--help-commands' for more) return klass for pkgname in self.get_command_packages(): - module_name = "{}.{}".format(pkgname, command) + module_name = f"{pkgname}.{command}" klass_name = command try: @@ -834,8 +836,7 @@ Common commands: (see '--help-commands' for more) klass = getattr(module, klass_name) except AttributeError: raise DistutilsModuleError( - "invalid command '%s' (no class '%s' in module '%s')" - % (command, klass_name, module_name) + f"invalid command '{command}' (no class '{klass_name}' in module '{module_name}')" ) self.cmdclass[command] = klass @@ -889,7 +890,7 @@ Common commands: (see '--help-commands' for more) self.announce(" setting options for '%s' command:" % command_name) for option, (source, value) in option_dict.items(): if DEBUG: - self.announce(" {} = {} (from {})".format(option, value, source)) + self.announce(f" {option} = {value} (from {source})") try: bool_opts = [translate_longopt(o) for o in command_obj.boolean_options] except AttributeError: @@ -909,8 +910,7 @@ Common commands: (see '--help-commands' for more) setattr(command_obj, option, value) else: raise DistutilsOptionError( - "error in %s: command '%s' has no such option '%s'" - % (source, command_name, option) + f"error in {source}: command '{command_name}' has no such option '{option}'" ) except ValueError as msg: raise DistutilsOptionError(msg) @@ -1178,7 +1178,7 @@ class DistributionMetadata: def _write_list(self, file, name, values): values = values or [] for value in values: - file.write('{}: {}\n'.format(name, value)) + file.write(f'{name}: {value}\n') # -- Metadata query methods ---------------------------------------- @@ -1189,7 +1189,7 @@ class DistributionMetadata: return self.version or "0.0.0" def get_fullname(self): - return "{}-{}".format(self.get_name(), self.get_version()) + return f"{self.get_name()}-{self.get_version()}" def get_author(self): return self.author diff --git a/contrib/python/setuptools/py3/setuptools/_distutils/extension.py b/contrib/python/setuptools/py3/setuptools/_distutils/extension.py index 6b8575de29..94e71635d9 100644 --- a/contrib/python/setuptools/py3/setuptools/_distutils/extension.py +++ b/contrib/python/setuptools/py3/setuptools/_distutils/extension.py @@ -102,7 +102,7 @@ class Extension: depends=None, language=None, optional=None, - **kw # To catch unknown keywords + **kw, # To catch unknown keywords ): if not isinstance(name, str): raise AssertionError("'name' must be a string") @@ -134,18 +134,12 @@ class Extension: warnings.warn(msg) def __repr__(self): - return '<{}.{}({!r}) at {:#x}>'.format( - self.__class__.__module__, - self.__class__.__qualname__, - self.name, - id(self), - ) + return f'<{self.__class__.__module__}.{self.__class__.__qualname__}({self.name!r}) at {id(self):#x}>' def read_setup_file(filename): # noqa: C901 """Reads a Setup file and returns Extension instances.""" - from distutils.sysconfig import parse_makefile, expand_makefile_vars, _variable_rx - + from distutils.sysconfig import _variable_rx, expand_makefile_vars, parse_makefile from distutils.text_file import TextFile from distutils.util import split_quoted diff --git a/contrib/python/setuptools/py3/setuptools/_distutils/fancy_getopt.py b/contrib/python/setuptools/py3/setuptools/_distutils/fancy_getopt.py index 3b887dc5a4..e905aede4d 100644 --- a/contrib/python/setuptools/py3/setuptools/_distutils/fancy_getopt.py +++ b/contrib/python/setuptools/py3/setuptools/_distutils/fancy_getopt.py @@ -8,11 +8,13 @@ additional features: * options set attributes of a passed-in object """ -import sys -import string -import re import getopt -from .errors import DistutilsGetoptError, DistutilsArgError +import re +import string +import sys +from typing import Any, Sequence + +from .errors import DistutilsArgError, DistutilsGetoptError # Much like command_re in distutils.core, this is close to but not quite # the same as a Python NAME -- except, in the spirit of most GNU @@ -22,7 +24,7 @@ longopt_pat = r'[a-zA-Z](?:[a-zA-Z0-9-]*)' longopt_re = re.compile(r'^%s$' % longopt_pat) # For recognizing "negative alias" options, eg. "quiet=!verbose" -neg_alias_re = re.compile("^({})=!({})$".format(longopt_pat, longopt_pat)) +neg_alias_re = re.compile(f"^({longopt_pat})=!({longopt_pat})$") # This is used to translate long options to legitimate Python identifiers # (for use as attributes of some object). @@ -116,13 +118,11 @@ class FancyGetopt: for alias, opt in aliases.items(): if alias not in self.option_index: raise DistutilsGetoptError( - ("invalid %s '%s': " "option '%s' not defined") - % (what, alias, alias) + f"invalid {what} '{alias}': " f"option '{alias}' not defined" ) if opt not in self.option_index: raise DistutilsGetoptError( - ("invalid %s '%s': " "aliased option '%s' not defined") - % (what, alias, opt) + f"invalid {what} '{alias}': " f"aliased option '{opt}' not defined" ) def set_aliases(self, alias): @@ -157,13 +157,12 @@ class FancyGetopt: else: # the option table is part of the code, so simply # assert that it is correct - raise ValueError("invalid option tuple: {!r}".format(option)) + raise ValueError(f"invalid option tuple: {option!r}") # Type- and value-check the option names if not isinstance(long, str) or len(long) < 2: raise DistutilsGetoptError( - ("invalid long option '%s': " "must be a string of length >= 2") - % long + ("invalid long option '%s': must be a string of length >= 2") % long ) if not ((short is None) or (isinstance(short, str) and len(short) == 1)): @@ -187,8 +186,8 @@ class FancyGetopt: if alias_to is not None: if self.takes_arg[alias_to]: raise DistutilsGetoptError( - "invalid negative alias '%s': " - "aliased option '%s' takes a value" % (long, alias_to) + f"invalid negative alias '{long}': " + f"aliased option '{alias_to}' takes a value" ) self.long_opts[-1] = long # XXX redundant?! @@ -200,9 +199,9 @@ class FancyGetopt: if alias_to is not None: if self.takes_arg[long] != self.takes_arg[alias_to]: raise DistutilsGetoptError( - "invalid alias '%s': inconsistent with " - "aliased option '%s' (one of them takes a value, " - "the other doesn't" % (long, alias_to) + f"invalid alias '{long}': inconsistent with " + f"aliased option '{alias_to}' (one of them takes a value, " + "the other doesn't" ) # Now enforce some bondage on the long option name, so we can @@ -359,7 +358,7 @@ class FancyGetopt: # Case 2: we have a short option, so we have to include it # just after the long option else: - opt_names = "{} (-{})".format(long, short) + opt_names = f"{long} (-{short})" if text: lines.append(" --%-*s %s" % (max_opt, opt_names, text[0])) else: @@ -450,7 +449,7 @@ class OptionDummy: """Dummy class just used as a place to hold command-line option values as instance attributes.""" - def __init__(self, options=[]): + def __init__(self, options: Sequence[Any] = []): """Create a new OptionDummy instance. The attributes listed in 'options' will be initialized to None.""" for opt in options: diff --git a/contrib/python/setuptools/py3/setuptools/_distutils/file_util.py b/contrib/python/setuptools/py3/setuptools/_distutils/file_util.py index 3f3e21b567..960def9cf9 100644 --- a/contrib/python/setuptools/py3/setuptools/_distutils/file_util.py +++ b/contrib/python/setuptools/py3/setuptools/_distutils/file_util.py @@ -4,8 +4,9 @@ Utility functions for operating on single files. """ import os -from .errors import DistutilsFileError + from ._log import log +from .errors import DistutilsFileError # for generating verbose output in 'copy_file()' _copy_action = {None: 'copying', 'hard': 'hard linking', 'sym': 'symbolically linking'} @@ -26,30 +27,24 @@ def _copy_file_contents(src, dst, buffer_size=16 * 1024): # noqa: C901 try: fsrc = open(src, 'rb') except OSError as e: - raise DistutilsFileError("could not open '{}': {}".format(src, e.strerror)) + raise DistutilsFileError(f"could not open '{src}': {e.strerror}") if os.path.exists(dst): try: os.unlink(dst) except OSError as e: - raise DistutilsFileError( - "could not delete '{}': {}".format(dst, e.strerror) - ) + raise DistutilsFileError(f"could not delete '{dst}': {e.strerror}") try: fdst = open(dst, 'wb') except OSError as e: - raise DistutilsFileError( - "could not create '{}': {}".format(dst, e.strerror) - ) + raise DistutilsFileError(f"could not create '{dst}': {e.strerror}") while True: try: buf = fsrc.read(buffer_size) except OSError as e: - raise DistutilsFileError( - "could not read from '{}': {}".format(src, e.strerror) - ) + raise DistutilsFileError(f"could not read from '{src}': {e.strerror}") if not buf: break @@ -57,9 +52,7 @@ def _copy_file_contents(src, dst, buffer_size=16 * 1024): # noqa: C901 try: fdst.write(buf) except OSError as e: - raise DistutilsFileError( - "could not write to '{}': {}".format(dst, e.strerror) - ) + raise DistutilsFileError(f"could not write to '{dst}': {e.strerror}") finally: if fdst: fdst.close() @@ -109,7 +102,7 @@ def copy_file( # noqa: C901 # (not update) and (src newer than dst). from distutils._modified import newer - from stat import ST_ATIME, ST_MTIME, ST_MODE, S_IMODE + from stat import S_IMODE, ST_ATIME, ST_MODE, ST_MTIME if not os.path.isfile(src): raise DistutilsFileError( @@ -183,8 +176,8 @@ def move_file(src, dst, verbose=1, dry_run=0): # noqa: C901 Handles cross-device moves on Unix using 'copy_file()'. What about other systems??? """ - from os.path import exists, isfile, isdir, basename, dirname import errno + from os.path import basename, dirname, exists, isdir, isfile if verbose >= 1: log.info("moving %s -> %s", src, dst) @@ -199,12 +192,12 @@ def move_file(src, dst, verbose=1, dry_run=0): # noqa: C901 dst = os.path.join(dst, basename(src)) elif exists(dst): raise DistutilsFileError( - "can't move '{}': destination '{}' already exists".format(src, dst) + f"can't move '{src}': destination '{dst}' already exists" ) if not isdir(dirname(dst)): raise DistutilsFileError( - "can't move '{}': destination '{}' not a valid path".format(src, dst) + f"can't move '{src}': destination '{dst}' not a valid path" ) copy_it = False @@ -215,9 +208,7 @@ def move_file(src, dst, verbose=1, dry_run=0): # noqa: C901 if num == errno.EXDEV: copy_it = True else: - raise DistutilsFileError( - "couldn't move '{}' to '{}': {}".format(src, dst, msg) - ) + raise DistutilsFileError(f"couldn't move '{src}' to '{dst}': {msg}") if copy_it: copy_file(src, dst, verbose=verbose) @@ -230,8 +221,8 @@ def move_file(src, dst, verbose=1, dry_run=0): # noqa: C901 except OSError: pass raise DistutilsFileError( - "couldn't move '%s' to '%s' by copy/delete: " - "delete '%s' failed: %s" % (src, dst, src, msg) + f"couldn't move '{src}' to '{dst}' by copy/delete: " + f"delete '{src}' failed: {msg}" ) return dst @@ -240,9 +231,5 @@ def write_file(filename, contents): """Create a file with the specified name and write 'contents' (a sequence of strings without line terminators) to it. """ - f = open(filename, "w") - try: - for line in contents: - f.write(line + "\n") - finally: - f.close() + with open(filename, 'w', encoding='utf-8') as f: + f.writelines(line + '\n' for line in contents) diff --git a/contrib/python/setuptools/py3/setuptools/_distutils/filelist.py b/contrib/python/setuptools/py3/setuptools/_distutils/filelist.py index 6dadf923d7..71ffb2abe7 100644 --- a/contrib/python/setuptools/py3/setuptools/_distutils/filelist.py +++ b/contrib/python/setuptools/py3/setuptools/_distutils/filelist.py @@ -4,14 +4,14 @@ Provides the FileList class, used for poking about the filesystem and building lists of files. """ -import os -import re import fnmatch import functools +import os +import re -from .util import convert_path -from .errors import DistutilsTemplateError, DistutilsInternalError from ._log import log +from .errors import DistutilsInternalError, DistutilsTemplateError +from .util import convert_path class FileList: @@ -162,9 +162,7 @@ class FileList: self.debug_print("recursive-include {} {}".format(dir, ' '.join(patterns))) for pattern in patterns: if not self.include_pattern(pattern, prefix=dir): - msg = ( - "warning: no files found matching '%s' " "under directory '%s'" - ) + msg = "warning: no files found matching '%s' under directory '%s'" log.warning(msg, pattern, dir) elif action == 'recursive-exclude': @@ -189,7 +187,7 @@ class FileList: self.debug_print("prune " + dir_pattern) if not self.exclude_pattern(None, prefix=dir_pattern): log.warning( - ("no previously-included directories found " "matching '%s'"), + ("no previously-included directories found matching '%s'"), dir_pattern, ) else: @@ -363,9 +361,9 @@ def translate_pattern(pattern, anchor=1, prefix=None, is_regex=0): if os.sep == '\\': sep = r'\\' pattern_re = pattern_re[len(start) : len(pattern_re) - len(end)] - pattern_re = r'{}\A{}{}.*{}{}'.format(start, prefix_re, sep, pattern_re, end) + pattern_re = rf'{start}\A{prefix_re}{sep}.*{pattern_re}{end}' else: # no prefix -- respect anchor flag if anchor: - pattern_re = r'{}\A{}'.format(start, pattern_re[len(start) :]) + pattern_re = rf'{start}\A{pattern_re[len(start) :]}' return re.compile(pattern_re) diff --git a/contrib/python/setuptools/py3/setuptools/_distutils/log.py b/contrib/python/setuptools/py3/setuptools/_distutils/log.py index 239f315850..8abb09cfa2 100644 --- a/contrib/python/setuptools/py3/setuptools/_distutils/log.py +++ b/contrib/python/setuptools/py3/setuptools/_distutils/log.py @@ -9,7 +9,6 @@ import warnings from ._log import log as _global_log - DEBUG = logging.DEBUG INFO = logging.INFO WARN = logging.WARN diff --git a/contrib/python/setuptools/py3/setuptools/_distutils/msvc9compiler.py b/contrib/python/setuptools/py3/setuptools/_distutils/msvc9compiler.py index f9f9f2d844..6a0105e484 100644 --- a/contrib/python/setuptools/py3/setuptools/_distutils/msvc9compiler.py +++ b/contrib/python/setuptools/py3/setuptools/_distutils/msvc9compiler.py @@ -13,24 +13,23 @@ for older versions of VS in distutils.msvccompiler. # ported to VS2005 and VS 2008 by Christian Heimes import os +import re import subprocess import sys -import re import warnings +import winreg +from ._log import log +from .ccompiler import CCompiler, gen_lib_options from .errors import ( + CompileError, DistutilsExecError, DistutilsPlatformError, - CompileError, LibError, LinkError, ) -from .ccompiler import CCompiler, gen_lib_options -from ._log import log from .util import get_platform -import winreg - warnings.warn( "msvc9compiler is deprecated and slated to be removed " "in the future. Please discontinue use or file an issue " @@ -175,7 +174,7 @@ you can try compiling with MingW32, by passing "-c mingw32" to setup.py.""" except RegError: continue key = RegEnumKey(h, 0) - d = Reg.get_value(base, r"{}\{}".format(p, key)) + d = Reg.get_value(base, rf"{p}\{key}") self.macros["$(FrameworkVersion)"] = d["version"] def sub(self, s): @@ -281,7 +280,7 @@ def query_vcvarsall(version, arch="x86"): raise DistutilsPlatformError("Unable to find vcvarsall.bat") log.debug("Calling 'vcvarsall.bat %s' (version=%s)", arch, version) popen = subprocess.Popen( - '"{}" {} & set'.format(vcvarsall, arch), + f'"{vcvarsall}" {arch} & set', stdout=subprocess.PIPE, stderr=subprocess.PIPE, ) @@ -370,9 +369,7 @@ class MSVCCompiler(CCompiler): # sanity check for platforms to prevent obscure errors later. ok_plats = 'win32', 'win-amd64' if plat_name not in ok_plats: - raise DistutilsPlatformError( - "--plat-name must be one of {}".format(ok_plats) - ) + raise DistutilsPlatformError(f"--plat-name must be one of {ok_plats}") if ( "DISTUTILS_USE_SDK" in os.environ @@ -564,9 +561,7 @@ class MSVCCompiler(CCompiler): continue else: # how to handle this file? - raise CompileError( - "Don't know how to compile {} to {}".format(src, obj) - ) + raise CompileError(f"Don't know how to compile {src} to {obj}") output_opt = "/Fo" + obj try: @@ -687,7 +682,7 @@ class MSVCCompiler(CCompiler): mfinfo = self.manifest_get_embed_info(target_desc, ld_args) if mfinfo is not None: mffilename, mfid = mfinfo - out_arg = '-outputresource:{};{}'.format(output_filename, mfid) + out_arg = f'-outputresource:{output_filename};{mfid}' try: self.spawn(['mt.exe', '-nologo', '-manifest', mffilename, out_arg]) except DistutilsExecError as msg: @@ -698,8 +693,8 @@ class MSVCCompiler(CCompiler): def manifest_setup_ldargs(self, output_filename, build_temp, ld_args): # If we need a manifest at all, an embedded manifest is recommended. # See MSDN article titled - # "How to: Embed a Manifest Inside a C/C++ Application" - # (currently at http://msdn2.microsoft.com/en-us/library/ms235591(VS.80).aspx) + # "Understanding manifest generation for C/C++ programs" + # (currently at https://learn.microsoft.com/en-us/cpp/build/understanding-manifest-generation-for-c-cpp-programs) # Ask the linker to generate the manifest in the temp dir, so # we can check it, and possibly embed it, later. temp_manifest = os.path.join( @@ -710,7 +705,7 @@ class MSVCCompiler(CCompiler): def manifest_get_embed_info(self, target_desc, ld_args): # If a manifest should be embedded, return a tuple of # (manifest_filename, resource_id). Returns None if no manifest - # should be embedded. See http://bugs.python.org/issue7833 for why + # should be embedded. See https://bugs.python.org/issue7833 for why # we want to avoid any manifest for extension modules if we can) for arg in ld_args: if arg.startswith("/MANIFESTFILE:"): diff --git a/contrib/python/setuptools/py3/setuptools/_distutils/msvccompiler.py b/contrib/python/setuptools/py3/setuptools/_distutils/msvccompiler.py index c3823e257e..ac8b68c08c 100644 --- a/contrib/python/setuptools/py3/setuptools/_distutils/msvccompiler.py +++ b/contrib/python/setuptools/py3/setuptools/_distutils/msvccompiler.py @@ -8,18 +8,19 @@ for the Microsoft Visual Studio. # hacked by Robin Becker and Thomas Heller to do a better job of # finding DevStudio (through the registry) -import sys import os +import sys import warnings + +from ._log import log +from .ccompiler import CCompiler, gen_lib_options from .errors import ( + CompileError, DistutilsExecError, DistutilsPlatformError, - CompileError, LibError, LinkError, ) -from .ccompiler import CCompiler, gen_lib_options -from ._log import log _can_read_reg = False try: @@ -159,7 +160,7 @@ you can try compiling with MingW32, by passing "-c mingw32" to setup.py.""" except RegError: continue key = RegEnumKey(h, 0) - d = read_values(base, r"{}\{}".format(p, key)) + d = read_values(base, rf"{p}\{key}") self.macros["$(FrameworkVersion)"] = d["version"] def sub(self, s): @@ -454,9 +455,7 @@ class MSVCCompiler(CCompiler): continue else: # how to handle this file? - raise CompileError( - "Don't know how to compile {} to {}".format(src, obj) - ) + raise CompileError(f"Don't know how to compile {src} to {obj}") output_opt = "/Fo" + obj try: @@ -637,14 +636,11 @@ class MSVCCompiler(CCompiler): path = path + " dirs" if self.__version >= 7: - key = r"{}\{:0.1f}\VC\VC_OBJECTS_PLATFORM_INFO\Win32\Directories".format( - self.__root, - self.__version, - ) + key = rf"{self.__root}\{self.__version:0.1f}\VC\VC_OBJECTS_PLATFORM_INFO\Win32\Directories" else: key = ( - r"%s\6.0\Build System\Components\Platforms" - r"\Win32 (%s)\Directories" % (self.__root, platform) + rf"{self.__root}\6.0\Build System\Components\Platforms" + rf"\Win32 ({platform})\Directories" ) for base in HKEYS: @@ -686,7 +682,8 @@ class MSVCCompiler(CCompiler): if get_build_version() >= 8.0: log.debug("Importing new compiler from distutils.msvc9compiler") OldMSVCCompiler = MSVCCompiler - from distutils.msvc9compiler import MSVCCompiler - # get_build_architecture not really relevant now we support cross-compile - from distutils.msvc9compiler import MacroExpander # noqa: F811 + from distutils.msvc9compiler import ( + MacroExpander, # noqa: F811 + MSVCCompiler, + ) diff --git a/contrib/python/setuptools/py3/setuptools/_distutils/py38compat.py b/contrib/python/setuptools/py3/setuptools/_distutils/py38compat.py index 59224e71e5..ab12119fa5 100644 --- a/contrib/python/setuptools/py3/setuptools/_distutils/py38compat.py +++ b/contrib/python/setuptools/py3/setuptools/_distutils/py38compat.py @@ -5,4 +5,4 @@ def aix_platform(osname, version, release): return _aix_support.aix_platform() except ImportError: pass - return "{}-{}.{}".format(osname, version, release) + return f"{osname}-{version}.{release}" diff --git a/contrib/python/setuptools/py3/setuptools/_distutils/spawn.py b/contrib/python/setuptools/py3/setuptools/_distutils/spawn.py index afefe525ef..046b5bbb82 100644 --- a/contrib/python/setuptools/py3/setuptools/_distutils/spawn.py +++ b/contrib/python/setuptools/py3/setuptools/_distutils/spawn.py @@ -6,13 +6,13 @@ Also provides the 'find_executable()' to search the path for a given executable name. """ -import sys import os import subprocess +import sys -from .errors import DistutilsExecError -from .debug import DEBUG from ._log import log +from .debug import DEBUG +from .errors import DistutilsExecError def spawn(cmd, search_path=1, verbose=0, dry_run=0, env=None): # noqa: C901 @@ -60,16 +60,12 @@ def spawn(cmd, search_path=1, verbose=0, dry_run=0, env=None): # noqa: C901 except OSError as exc: if not DEBUG: cmd = cmd[0] - raise DistutilsExecError( - "command {!r} failed: {}".format(cmd, exc.args[-1]) - ) from exc + raise DistutilsExecError(f"command {cmd!r} failed: {exc.args[-1]}") from exc if exitcode: if not DEBUG: cmd = cmd[0] - raise DistutilsExecError( - "command {!r} failed with exit code {}".format(cmd, exitcode) - ) + raise DistutilsExecError(f"command {cmd!r} failed with exit code {exitcode}") def find_executable(executable, path=None): diff --git a/contrib/python/setuptools/py3/setuptools/_distutils/sysconfig.py b/contrib/python/setuptools/py3/setuptools/_distutils/sysconfig.py index a40a7231b3..1a38e9fa79 100644 --- a/contrib/python/setuptools/py3/setuptools/_distutils/sysconfig.py +++ b/contrib/python/setuptools/py3/setuptools/_distutils/sysconfig.py @@ -9,15 +9,16 @@ Written by: Fred L. Drake, Jr. Email: <fdrake@acm.org> """ +import functools import os +import pathlib import re import sys import sysconfig -import pathlib -from .errors import DistutilsPlatformError from . import py39compat from ._functools import pass_none +from .errors import DistutilsPlatformError IS_PYPY = '__pypy__' in sys.builtin_module_names @@ -195,12 +196,11 @@ def _get_python_inc_posix_prefix(prefix): def _get_python_inc_nt(prefix, spec_prefix, plat_specific): if python_build: - # Include both the include and PC dir to ensure we can find - # pyconfig.h + # Include both include dirs to ensure we can find pyconfig.h return ( os.path.join(prefix, "include") + os.path.pathsep - + os.path.join(prefix, "PC") + + os.path.dirname(sysconfig.get_config_h_filename()) ) return os.path.join(prefix, "include") @@ -267,6 +267,24 @@ def get_python_lib(plat_specific=0, standard_lib=0, prefix=None): ) +@functools.lru_cache +def _customize_macos(): + """ + Perform first-time customization of compiler-related + config vars on macOS. Use after a compiler is known + to be needed. This customization exists primarily to support Pythons + from binary installers. The kind and paths to build tools on + the user system may vary significantly from the system + that Python itself was built on. Also the user OS + version and build tools may not support the same set + of CPU architectures for universal builds. + """ + + sys.platform == "darwin" and __import__('_osx_support').customize_compiler( + get_config_vars() + ) + + def customize_compiler(compiler): # noqa: C901 """Do any platform-specific customization of a CCompiler instance. @@ -274,22 +292,7 @@ def customize_compiler(compiler): # noqa: C901 varies across Unices and is stored in Python's Makefile. """ if compiler.compiler_type == "unix": - if sys.platform == "darwin": - # Perform first-time customization of compiler-related - # config vars on OS X now that we know we need a compiler. - # This is primarily to support Pythons from binary - # installers. The kind and paths to build tools on - # the user system may vary significantly from the system - # that Python itself was built on. Also the user OS - # version and build tools may not support the same set - # of CPU architectures for universal builds. - global _config_vars - # Use get_config_var() to ensure _config_vars is initialized. - if not get_config_var('CUSTOMIZED_OSX_COMPILER'): - import _osx_support - - _osx_support.customize_compiler(_config_vars) - _config_vars['CUSTOMIZED_OSX_COMPILER'] = 'True' + _customize_macos() ( cc, @@ -361,14 +364,7 @@ def customize_compiler(compiler): # noqa: C901 def get_config_h_filename(): """Return full pathname of installed pyconfig.h file.""" - if python_build: - if os.name == "nt": - inc_dir = os.path.join(_sys_home or project_base, "PC") - else: - inc_dir = _sys_home or project_base - return os.path.join(inc_dir, 'pyconfig.h') - else: - return sysconfig.get_config_h_filename() + return sysconfig.get_config_h_filename() def get_makefile_filename(): diff --git a/contrib/python/setuptools/py3/setuptools/_distutils/text_file.py b/contrib/python/setuptools/py3/setuptools/_distutils/text_file.py index 36f947e51c..0f846e3c52 100644 --- a/contrib/python/setuptools/py3/setuptools/_distutils/text_file.py +++ b/contrib/python/setuptools/py3/setuptools/_distutils/text_file.py @@ -115,7 +115,7 @@ class TextFile: """Open a new file named 'filename'. This overrides both the 'filename' and 'file' arguments to the constructor.""" self.filename = filename - self.file = open(self.filename, errors=self.errors) + self.file = open(self.filename, errors=self.errors, encoding='utf-8') self.current_line = 0 def close(self): @@ -220,7 +220,7 @@ class TextFile: if self.join_lines and buildup_line: # oops: end of file if line is None: - self.warn("continuation line immediately precedes " "end-of-file") + self.warn("continuation line immediately precedes end-of-file") return buildup_line if self.collapse_join: diff --git a/contrib/python/setuptools/py3/setuptools/_distutils/unixccompiler.py b/contrib/python/setuptools/py3/setuptools/_distutils/unixccompiler.py index bd8db9ac3f..0248bde87b 100644 --- a/contrib/python/setuptools/py3/setuptools/_distutils/unixccompiler.py +++ b/contrib/python/setuptools/py3/setuptools/_distutils/unixccompiler.py @@ -13,18 +13,21 @@ the "typical" Unix-style command-line C compiler: * link shared library handled by 'cc -shared' """ +from __future__ import annotations + +import itertools import os -import sys import re import shlex -import itertools +import sys from . import sysconfig -from ._modified import newer -from .ccompiler import CCompiler, gen_preprocess_options, gen_lib_options -from .errors import DistutilsExecError, CompileError, LibError, LinkError +from .compat import consolidate_linker_args from ._log import log from ._macos_compat import compiler_fixup +from ._modified import newer +from .ccompiler import CCompiler, gen_lib_options, gen_preprocess_options +from .errors import CompileError, DistutilsExecError, LibError, LinkError # XXX Things not currently handled: # * optimization/debug/warning flags; we just use whatever's in Python's @@ -281,10 +284,9 @@ class UnixCCompiler(CCompiler): compiler = os.path.basename(shlex.split(cc_var)[0]) return "gcc" in compiler or "g++" in compiler - def runtime_library_dir_option(self, dir): + def runtime_library_dir_option(self, dir: str) -> str | list[str]: # XXX Hackish, at the very least. See Python bug #445902: - # http://sourceforge.net/tracker/index.php - # ?func=detail&aid=445902&group_id=5470&atid=105470 + # https://bugs.python.org/issue445902 # Linkers on different platforms need different options to # specify that directories need to be added to the list of # directories searched for dependencies when a dynamic library @@ -311,13 +313,14 @@ class UnixCCompiler(CCompiler): "-L" + dir, ] - # For all compilers, `-Wl` is the presumed way to - # pass a compiler option to the linker and `-R` is - # the way to pass an RPATH. + # For all compilers, `-Wl` is the presumed way to pass a + # compiler option to the linker if sysconfig.get_config_var("GNULD") == "yes": - # GNU ld needs an extra option to get a RUNPATH - # instead of just an RPATH. - return "-Wl,--enable-new-dtags,-R" + dir + return consolidate_linker_args([ + # Force RUNPATH instead of RPATH + "-Wl,--enable-new-dtags", + "-Wl,-rpath," + dir, + ]) else: return "-Wl,-R" + dir @@ -389,10 +392,7 @@ class UnixCCompiler(CCompiler): roots = map(self._library_root, dirs) - searched = ( - os.path.join(root, lib_name) - for root, lib_name in itertools.product(roots, lib_names) - ) + searched = itertools.starmap(os.path.join, itertools.product(roots, lib_names)) found = filter(os.path.exists, searched) diff --git a/contrib/python/setuptools/py3/setuptools/_distutils/util.py b/contrib/python/setuptools/py3/setuptools/_distutils/util.py index 7ae914f7ee..9ee77721b3 100644 --- a/contrib/python/setuptools/py3/setuptools/_distutils/util.py +++ b/contrib/python/setuptools/py3/setuptools/_distutils/util.py @@ -4,6 +4,7 @@ Miscellaneous utility functions -- anything that doesn't fit into one of the other *util.py modules. """ +import functools import importlib.util import os import re @@ -11,12 +12,11 @@ import string import subprocess import sys import sysconfig -import functools -from .errors import DistutilsPlatformError, DistutilsByteCompileError +from ._log import log from ._modified import newer +from .errors import DistutilsByteCompileError, DistutilsPlatformError from .spawn import spawn -from ._log import log def get_host_platform(): @@ -30,13 +30,6 @@ def get_host_platform(): # even with older Python versions when distutils was split out. # Now it delegates to stdlib sysconfig, but maintains compatibility. - if sys.version_info < (3, 8): - if os.name == 'nt': - if '(arm)' in sys.version.lower(): - return 'win-arm32' - if '(arm64)' in sys.version.lower(): - return 'win-arm64' - if sys.version_info < (3, 9): if os.name == "posix" and hasattr(os, 'uname'): osname, host, release, version, machine = os.uname() @@ -109,8 +102,8 @@ def get_macosx_target_ver(): ): my_msg = ( '$' + MACOSX_VERSION_VAR + ' mismatch: ' - 'now "%s" but "%s" during configure; ' - 'must use 10.3 or later' % (env_ver, syscfg_ver) + f'now "{env_ver}" but "{syscfg_ver}" during configure; ' + 'must use 10.3 or later' ) raise DistutilsPlatformError(my_msg) return env_ver @@ -172,7 +165,7 @@ def change_root(new_root, pathname): raise DistutilsPlatformError(f"nothing known about platform '{os.name}'") -@functools.lru_cache() +@functools.lru_cache def check_environ(): """Ensure that 'os.environ' has all the environment variables we guarantee that users can use in config files, command-line options, @@ -328,7 +321,7 @@ def execute(func, args, msg=None, verbose=0, dry_run=0): print. """ if msg is None: - msg = "{}{!r}".format(func.__name__, args) + msg = f"{func.__name__}{args!r}" if msg[-2:] == ',)': # correct for singleton tuple msg = msg[0:-2] + ')' @@ -350,7 +343,7 @@ def strtobool(val): elif val in ('n', 'no', 'f', 'false', 'off', '0'): return 0 else: - raise ValueError("invalid truth value {!r}".format(val)) + raise ValueError(f"invalid truth value {val!r}") def byte_compile( # noqa: C901 @@ -423,9 +416,9 @@ def byte_compile( # noqa: C901 log.info("writing byte-compilation script '%s'", script_name) if not dry_run: if script_fd is not None: - script = os.fdopen(script_fd, "w") - else: - script = open(script_name, "w") + script = os.fdopen(script_fd, "w", encoding='utf-8') + else: # pragma: no cover + script = open(script_name, "w", encoding='utf-8') with script: script.write( @@ -447,13 +440,12 @@ files = [ script.write(",\n".join(map(repr, py_files)) + "]\n") script.write( - """ -byte_compile(files, optimize=%r, force=%r, - prefix=%r, base_dir=%r, - verbose=%r, dry_run=0, + f""" +byte_compile(files, optimize={optimize!r}, force={force!r}, + prefix={prefix!r}, base_dir={base_dir!r}, + verbose={verbose!r}, dry_run=0, direct=1) """ - % (optimize, force, prefix, base_dir, verbose) ) cmd = [sys.executable] @@ -487,8 +479,7 @@ byte_compile(files, optimize=%r, force=%r, if prefix: if file[: len(prefix)] != prefix: raise ValueError( - "invalid prefix: filename %r doesn't start with %r" - % (file, prefix) + f"invalid prefix: filename {file!r} doesn't start with {prefix!r}" ) dfile = dfile[len(prefix) :] if base_dir: @@ -508,6 +499,12 @@ def rfc822_escape(header): """Return a version of the string escaped for inclusion in an RFC-822 header, by ensuring there are 8 spaces space after each newline. """ - lines = header.split('\n') - sep = '\n' + 8 * ' ' - return sep.join(lines) + indent = 8 * " " + lines = header.splitlines(keepends=True) + + # Emulate the behaviour of `str.split` + # (the terminal line break in `splitlines` does not result in an extra line): + ends_in_newline = lines and lines[-1].splitlines()[0] != lines[-1] + suffix = indent if ends_in_newline else "" + + return indent.join(lines) + suffix diff --git a/contrib/python/setuptools/py3/setuptools/_distutils/version.py b/contrib/python/setuptools/py3/setuptools/_distutils/version.py index 74c40d7bfd..806d233ca5 100644 --- a/contrib/python/setuptools/py3/setuptools/_distutils/version.py +++ b/contrib/python/setuptools/py3/setuptools/_distutils/version.py @@ -26,9 +26,9 @@ Every version number class implements the following interface: of the same class, thus must follow the same rules) """ +import contextlib import re import warnings -import contextlib @contextlib.contextmanager @@ -60,7 +60,7 @@ class Version: ) def __repr__(self): - return "{} ('{}')".format(self.__class__.__name__, str(self)) + return f"{self.__class__.__name__} ('{str(self)}')" def __eq__(self, other): c = self._cmp(other) @@ -111,7 +111,6 @@ class Version: class StrictVersion(Version): - """Version numbering for anal retentives and software idealists. Implements the standard interface for version number classes as described above. A version number consists of two or three @@ -179,42 +178,36 @@ class StrictVersion(Version): return vstring - def _cmp(self, other): # noqa: C901 + def _cmp(self, other): if isinstance(other, str): with suppress_known_deprecation(): other = StrictVersion(other) elif not isinstance(other, StrictVersion): return NotImplemented - if self.version != other.version: - # numeric versions don't match - # prerelease stuff doesn't matter - if self.version < other.version: - return -1 - else: - return 1 - - # have to compare prerelease - # case 1: neither has prerelease; they're equal - # case 2: self has prerelease, other doesn't; other is greater - # case 3: self doesn't have prerelease, other does: self is greater - # case 4: both have prerelease: must compare them! - - if not self.prerelease and not other.prerelease: - return 0 - elif self.prerelease and not other.prerelease: + if self.version == other.version: + # versions match; pre-release drives the comparison + return self._cmp_prerelease(other) + + return -1 if self.version < other.version else 1 + + def _cmp_prerelease(self, other): + """ + case 1: self has prerelease, other doesn't; other is greater + case 2: self doesn't have prerelease, other does: self is greater + case 3: both or neither have prerelease: compare them! + """ + if self.prerelease and not other.prerelease: return -1 elif not self.prerelease and other.prerelease: return 1 - elif self.prerelease and other.prerelease: - if self.prerelease == other.prerelease: - return 0 - elif self.prerelease < other.prerelease: - return -1 - else: - return 1 + + if self.prerelease == other.prerelease: + return 0 + elif self.prerelease < other.prerelease: + return -1 else: - assert False, "never get here" + return 1 # end class StrictVersion @@ -286,7 +279,6 @@ class StrictVersion(Version): class LooseVersion(Version): - """Version numbering for anarchists and software realists. Implements the standard interface for version number classes as described above. A version number consists of a series of numbers, diff --git a/contrib/python/setuptools/py3/setuptools/_distutils/versionpredicate.py b/contrib/python/setuptools/py3/setuptools/_distutils/versionpredicate.py index d6c0c007aa..31c420168c 100644 --- a/contrib/python/setuptools/py3/setuptools/_distutils/versionpredicate.py +++ b/contrib/python/setuptools/py3/setuptools/_distutils/versionpredicate.py @@ -1,9 +1,9 @@ -"""Module for parsing and testing package version predicate strings. -""" -import re -from . import version +"""Module for parsing and testing package version predicate strings.""" + import operator +import re +from . import version re_validPackage = re.compile(r"(?i)^\s*([a-z_]\w*(?:\.[a-z_]\w*)*)(.*)", re.ASCII) # (package) (rest) diff --git a/contrib/python/setuptools/py3/setuptools/_distutils/zosccompiler.py b/contrib/python/setuptools/py3/setuptools/_distutils/zosccompiler.py new file mode 100644 index 0000000000..c7a7ca61cf --- /dev/null +++ b/contrib/python/setuptools/py3/setuptools/_distutils/zosccompiler.py @@ -0,0 +1,229 @@ +"""distutils.zosccompiler + +Contains the selection of the c & c++ compilers on z/OS. There are several +different c compilers on z/OS, all of them are optional, so the correct +one needs to be chosen based on the users input. This is compatible with +the following compilers: + +IBM C/C++ For Open Enterprise Languages on z/OS 2.0 +IBM Open XL C/C++ 1.1 for z/OS +IBM XL C/C++ V2.4.1 for z/OS 2.4 and 2.5 +IBM z/OS XL C/C++ +""" + +import os + +from . import sysconfig +from .errors import CompileError, DistutilsExecError +from .unixccompiler import UnixCCompiler + +_cc_args = { + 'ibm-openxl': [ + '-m64', + '-fvisibility=default', + '-fzos-le-char-mode=ascii', + '-fno-short-enums', + ], + 'ibm-xlclang': [ + '-q64', + '-qexportall', + '-qascii', + '-qstrict', + '-qnocsect', + '-Wa,asa,goff', + '-Wa,xplink', + '-qgonumber', + '-qenum=int', + '-Wc,DLL', + ], + 'ibm-xlc': [ + '-q64', + '-qexportall', + '-qascii', + '-qstrict', + '-qnocsect', + '-Wa,asa,goff', + '-Wa,xplink', + '-qgonumber', + '-qenum=int', + '-Wc,DLL', + '-qlanglvl=extc99', + ], +} + +_cxx_args = { + 'ibm-openxl': [ + '-m64', + '-fvisibility=default', + '-fzos-le-char-mode=ascii', + '-fno-short-enums', + ], + 'ibm-xlclang': [ + '-q64', + '-qexportall', + '-qascii', + '-qstrict', + '-qnocsect', + '-Wa,asa,goff', + '-Wa,xplink', + '-qgonumber', + '-qenum=int', + '-Wc,DLL', + ], + 'ibm-xlc': [ + '-q64', + '-qexportall', + '-qascii', + '-qstrict', + '-qnocsect', + '-Wa,asa,goff', + '-Wa,xplink', + '-qgonumber', + '-qenum=int', + '-Wc,DLL', + '-qlanglvl=extended0x', + ], +} + +_asm_args = { + 'ibm-openxl': ['-fasm', '-fno-integrated-as', '-Wa,--ASA', '-Wa,--GOFF'], + 'ibm-xlclang': [], + 'ibm-xlc': [], +} + +_ld_args = { + 'ibm-openxl': [], + 'ibm-xlclang': ['-Wl,dll', '-q64'], + 'ibm-xlc': ['-Wl,dll', '-q64'], +} + + +# Python on z/OS is built with no compiler specific options in it's CFLAGS. +# But each compiler requires it's own specific options to build successfully, +# though some of the options are common between them +class zOSCCompiler(UnixCCompiler): + src_extensions = ['.c', '.C', '.cc', '.cxx', '.cpp', '.m', '.s'] + _cpp_extensions = ['.cc', '.cpp', '.cxx', '.C'] + _asm_extensions = ['.s'] + + def _get_zos_compiler_name(self): + zos_compiler_names = [ + os.path.basename(binary) + for envvar in ('CC', 'CXX', 'LDSHARED') + if (binary := os.environ.get(envvar, None)) + ] + if len(zos_compiler_names) == 0: + return 'ibm-openxl' + + zos_compilers = {} + for compiler in ( + 'ibm-clang', + 'ibm-clang64', + 'ibm-clang++', + 'ibm-clang++64', + 'clang', + 'clang++', + 'clang-14', + ): + zos_compilers[compiler] = 'ibm-openxl' + + for compiler in ('xlclang', 'xlclang++', 'njsc', 'njsc++'): + zos_compilers[compiler] = 'ibm-xlclang' + + for compiler in ('xlc', 'xlC', 'xlc++'): + zos_compilers[compiler] = 'ibm-xlc' + + return zos_compilers.get(zos_compiler_names[0], 'ibm-openxl') + + def __init__(self, verbose=0, dry_run=0, force=0): + super().__init__(verbose, dry_run, force) + self.zos_compiler = self._get_zos_compiler_name() + sysconfig.customize_compiler(self) + + def _compile(self, obj, src, ext, cc_args, extra_postargs, pp_opts): + local_args = [] + if ext in self._cpp_extensions: + compiler = self.compiler_cxx + local_args.extend(_cxx_args[self.zos_compiler]) + elif ext in self._asm_extensions: + compiler = self.compiler_so + local_args.extend(_cc_args[self.zos_compiler]) + local_args.extend(_asm_args[self.zos_compiler]) + else: + compiler = self.compiler_so + local_args.extend(_cc_args[self.zos_compiler]) + local_args.extend(cc_args) + + try: + self.spawn(compiler + local_args + [src, '-o', obj] + extra_postargs) + except DistutilsExecError as msg: + raise CompileError(msg) + + def runtime_library_dir_option(self, dir): + return '-L' + dir + + def link( + self, + target_desc, + objects, + output_filename, + output_dir=None, + libraries=None, + library_dirs=None, + runtime_library_dirs=None, + export_symbols=None, + debug=0, + extra_preargs=None, + extra_postargs=None, + build_temp=None, + target_lang=None, + ): + # For a built module to use functions from cpython, it needs to use Pythons + # side deck file. The side deck is located beside the libpython3.xx.so + ldversion = sysconfig.get_config_var('LDVERSION') + if sysconfig.python_build: + side_deck_path = os.path.join( + sysconfig.get_config_var('abs_builddir'), + f'libpython{ldversion}.x', + ) + else: + side_deck_path = os.path.join( + sysconfig.get_config_var('installed_base'), + sysconfig.get_config_var('platlibdir'), + f'libpython{ldversion}.x', + ) + + if os.path.exists(side_deck_path): + if extra_postargs: + extra_postargs.append(side_deck_path) + else: + extra_postargs = [side_deck_path] + + # Check and replace libraries included side deck files + if runtime_library_dirs: + for dir in runtime_library_dirs: + for library in libraries[:]: + library_side_deck = os.path.join(dir, f'{library}.x') + if os.path.exists(library_side_deck): + libraries.remove(library) + extra_postargs.append(library_side_deck) + break + + # Any required ld args for the given compiler + extra_postargs.extend(_ld_args[self.zos_compiler]) + + super().link( + target_desc, + objects, + output_filename, + output_dir, + libraries, + library_dirs, + runtime_library_dirs, + export_symbols, + debug, + extra_preargs, + extra_postargs, + build_temp, + target_lang, + ) diff --git a/contrib/python/setuptools/py3/setuptools/_vendor/backports/__init__.py b/contrib/python/setuptools/py3/setuptools/_vendor/backports/__init__.py new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/contrib/python/setuptools/py3/setuptools/_vendor/backports/__init__.py diff --git a/contrib/python/setuptools/py3/setuptools/_vendor/backports/tarfile.py b/contrib/python/setuptools/py3/setuptools/_vendor/backports/tarfile.py new file mode 100644 index 0000000000..a7a9a6e7b9 --- /dev/null +++ b/contrib/python/setuptools/py3/setuptools/_vendor/backports/tarfile.py @@ -0,0 +1,2900 @@ +#!/usr/bin/env python3 +#------------------------------------------------------------------- +# tarfile.py +#------------------------------------------------------------------- +# Copyright (C) 2002 Lars Gustaebel <lars@gustaebel.de> +# All rights reserved. +# +# Permission is hereby granted, free of charge, to any person +# obtaining a copy of this software and associated documentation +# files (the "Software"), to deal in the Software without +# restriction, including without limitation the rights to use, +# copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following +# conditions: +# +# The above copyright notice and this permission notice shall be +# included in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +# OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +# OTHER DEALINGS IN THE SOFTWARE. +# +"""Read from and write to tar format archives. +""" + +version = "0.9.0" +__author__ = "Lars Gust\u00e4bel (lars@gustaebel.de)" +__credits__ = "Gustavo Niemeyer, Niels Gust\u00e4bel, Richard Townsend." + +#--------- +# Imports +#--------- +from builtins import open as bltn_open +import sys +import os +import io +import shutil +import stat +import time +import struct +import copy +import re +import warnings + +try: + import pwd +except ImportError: + pwd = None +try: + import grp +except ImportError: + grp = None + +# os.symlink on Windows prior to 6.0 raises NotImplementedError +# OSError (winerror=1314) will be raised if the caller does not hold the +# SeCreateSymbolicLinkPrivilege privilege +symlink_exception = (AttributeError, NotImplementedError, OSError) + +# from tarfile import * +__all__ = ["TarFile", "TarInfo", "is_tarfile", "TarError", "ReadError", + "CompressionError", "StreamError", "ExtractError", "HeaderError", + "ENCODING", "USTAR_FORMAT", "GNU_FORMAT", "PAX_FORMAT", + "DEFAULT_FORMAT", "open","fully_trusted_filter", "data_filter", + "tar_filter", "FilterError", "AbsoluteLinkError", + "OutsideDestinationError", "SpecialFileError", "AbsolutePathError", + "LinkOutsideDestinationError"] + + +#--------------------------------------------------------- +# tar constants +#--------------------------------------------------------- +NUL = b"\0" # the null character +BLOCKSIZE = 512 # length of processing blocks +RECORDSIZE = BLOCKSIZE * 20 # length of records +GNU_MAGIC = b"ustar \0" # magic gnu tar string +POSIX_MAGIC = b"ustar\x0000" # magic posix tar string + +LENGTH_NAME = 100 # maximum length of a filename +LENGTH_LINK = 100 # maximum length of a linkname +LENGTH_PREFIX = 155 # maximum length of the prefix field + +REGTYPE = b"0" # regular file +AREGTYPE = b"\0" # regular file +LNKTYPE = b"1" # link (inside tarfile) +SYMTYPE = b"2" # symbolic link +CHRTYPE = b"3" # character special device +BLKTYPE = b"4" # block special device +DIRTYPE = b"5" # directory +FIFOTYPE = b"6" # fifo special device +CONTTYPE = b"7" # contiguous file + +GNUTYPE_LONGNAME = b"L" # GNU tar longname +GNUTYPE_LONGLINK = b"K" # GNU tar longlink +GNUTYPE_SPARSE = b"S" # GNU tar sparse file + +XHDTYPE = b"x" # POSIX.1-2001 extended header +XGLTYPE = b"g" # POSIX.1-2001 global header +SOLARIS_XHDTYPE = b"X" # Solaris extended header + +USTAR_FORMAT = 0 # POSIX.1-1988 (ustar) format +GNU_FORMAT = 1 # GNU tar format +PAX_FORMAT = 2 # POSIX.1-2001 (pax) format +DEFAULT_FORMAT = PAX_FORMAT + +#--------------------------------------------------------- +# tarfile constants +#--------------------------------------------------------- +# File types that tarfile supports: +SUPPORTED_TYPES = (REGTYPE, AREGTYPE, LNKTYPE, + SYMTYPE, DIRTYPE, FIFOTYPE, + CONTTYPE, CHRTYPE, BLKTYPE, + GNUTYPE_LONGNAME, GNUTYPE_LONGLINK, + GNUTYPE_SPARSE) + +# File types that will be treated as a regular file. +REGULAR_TYPES = (REGTYPE, AREGTYPE, + CONTTYPE, GNUTYPE_SPARSE) + +# File types that are part of the GNU tar format. +GNU_TYPES = (GNUTYPE_LONGNAME, GNUTYPE_LONGLINK, + GNUTYPE_SPARSE) + +# Fields from a pax header that override a TarInfo attribute. +PAX_FIELDS = ("path", "linkpath", "size", "mtime", + "uid", "gid", "uname", "gname") + +# Fields from a pax header that are affected by hdrcharset. +PAX_NAME_FIELDS = {"path", "linkpath", "uname", "gname"} + +# Fields in a pax header that are numbers, all other fields +# are treated as strings. +PAX_NUMBER_FIELDS = { + "atime": float, + "ctime": float, + "mtime": float, + "uid": int, + "gid": int, + "size": int +} + +#--------------------------------------------------------- +# initialization +#--------------------------------------------------------- +if os.name == "nt": + ENCODING = "utf-8" +else: + ENCODING = sys.getfilesystemencoding() + +#--------------------------------------------------------- +# Some useful functions +#--------------------------------------------------------- + +def stn(s, length, encoding, errors): + """Convert a string to a null-terminated bytes object. + """ + if s is None: + raise ValueError("metadata cannot contain None") + s = s.encode(encoding, errors) + return s[:length] + (length - len(s)) * NUL + +def nts(s, encoding, errors): + """Convert a null-terminated bytes object to a string. + """ + p = s.find(b"\0") + if p != -1: + s = s[:p] + return s.decode(encoding, errors) + +def nti(s): + """Convert a number field to a python number. + """ + # There are two possible encodings for a number field, see + # itn() below. + if s[0] in (0o200, 0o377): + n = 0 + for i in range(len(s) - 1): + n <<= 8 + n += s[i + 1] + if s[0] == 0o377: + n = -(256 ** (len(s) - 1) - n) + else: + try: + s = nts(s, "ascii", "strict") + n = int(s.strip() or "0", 8) + except ValueError: + raise InvalidHeaderError("invalid header") + return n + +def itn(n, digits=8, format=DEFAULT_FORMAT): + """Convert a python number to a number field. + """ + # POSIX 1003.1-1988 requires numbers to be encoded as a string of + # octal digits followed by a null-byte, this allows values up to + # (8**(digits-1))-1. GNU tar allows storing numbers greater than + # that if necessary. A leading 0o200 or 0o377 byte indicate this + # particular encoding, the following digits-1 bytes are a big-endian + # base-256 representation. This allows values up to (256**(digits-1))-1. + # A 0o200 byte indicates a positive number, a 0o377 byte a negative + # number. + original_n = n + n = int(n) + if 0 <= n < 8 ** (digits - 1): + s = bytes("%0*o" % (digits - 1, n), "ascii") + NUL + elif format == GNU_FORMAT and -256 ** (digits - 1) <= n < 256 ** (digits - 1): + if n >= 0: + s = bytearray([0o200]) + else: + s = bytearray([0o377]) + n = 256 ** digits + n + + for i in range(digits - 1): + s.insert(1, n & 0o377) + n >>= 8 + else: + raise ValueError("overflow in number field") + + return s + +def calc_chksums(buf): + """Calculate the checksum for a member's header by summing up all + characters except for the chksum field which is treated as if + it was filled with spaces. According to the GNU tar sources, + some tars (Sun and NeXT) calculate chksum with signed char, + which will be different if there are chars in the buffer with + the high bit set. So we calculate two checksums, unsigned and + signed. + """ + unsigned_chksum = 256 + sum(struct.unpack_from("148B8x356B", buf)) + signed_chksum = 256 + sum(struct.unpack_from("148b8x356b", buf)) + return unsigned_chksum, signed_chksum + +def copyfileobj(src, dst, length=None, exception=OSError, bufsize=None): + """Copy length bytes from fileobj src to fileobj dst. + If length is None, copy the entire content. + """ + bufsize = bufsize or 16 * 1024 + if length == 0: + return + if length is None: + shutil.copyfileobj(src, dst, bufsize) + return + + blocks, remainder = divmod(length, bufsize) + for b in range(blocks): + buf = src.read(bufsize) + if len(buf) < bufsize: + raise exception("unexpected end of data") + dst.write(buf) + + if remainder != 0: + buf = src.read(remainder) + if len(buf) < remainder: + raise exception("unexpected end of data") + dst.write(buf) + return + +def _safe_print(s): + encoding = getattr(sys.stdout, 'encoding', None) + if encoding is not None: + s = s.encode(encoding, 'backslashreplace').decode(encoding) + print(s, end=' ') + + +class TarError(Exception): + """Base exception.""" + pass +class ExtractError(TarError): + """General exception for extract errors.""" + pass +class ReadError(TarError): + """Exception for unreadable tar archives.""" + pass +class CompressionError(TarError): + """Exception for unavailable compression methods.""" + pass +class StreamError(TarError): + """Exception for unsupported operations on stream-like TarFiles.""" + pass +class HeaderError(TarError): + """Base exception for header errors.""" + pass +class EmptyHeaderError(HeaderError): + """Exception for empty headers.""" + pass +class TruncatedHeaderError(HeaderError): + """Exception for truncated headers.""" + pass +class EOFHeaderError(HeaderError): + """Exception for end of file headers.""" + pass +class InvalidHeaderError(HeaderError): + """Exception for invalid headers.""" + pass +class SubsequentHeaderError(HeaderError): + """Exception for missing and invalid extended headers.""" + pass + +#--------------------------- +# internal stream interface +#--------------------------- +class _LowLevelFile: + """Low-level file object. Supports reading and writing. + It is used instead of a regular file object for streaming + access. + """ + + def __init__(self, name, mode): + mode = { + "r": os.O_RDONLY, + "w": os.O_WRONLY | os.O_CREAT | os.O_TRUNC, + }[mode] + if hasattr(os, "O_BINARY"): + mode |= os.O_BINARY + self.fd = os.open(name, mode, 0o666) + + def close(self): + os.close(self.fd) + + def read(self, size): + return os.read(self.fd, size) + + def write(self, s): + os.write(self.fd, s) + +class _Stream: + """Class that serves as an adapter between TarFile and + a stream-like object. The stream-like object only + needs to have a read() or write() method that works with bytes, + and the method is accessed blockwise. + Use of gzip or bzip2 compression is possible. + A stream-like object could be for example: sys.stdin.buffer, + sys.stdout.buffer, a socket, a tape device etc. + + _Stream is intended to be used only internally. + """ + + def __init__(self, name, mode, comptype, fileobj, bufsize, + compresslevel): + """Construct a _Stream object. + """ + self._extfileobj = True + if fileobj is None: + fileobj = _LowLevelFile(name, mode) + self._extfileobj = False + + if comptype == '*': + # Enable transparent compression detection for the + # stream interface + fileobj = _StreamProxy(fileobj) + comptype = fileobj.getcomptype() + + self.name = name or "" + self.mode = mode + self.comptype = comptype + self.fileobj = fileobj + self.bufsize = bufsize + self.buf = b"" + self.pos = 0 + self.closed = False + + try: + if comptype == "gz": + try: + import zlib + except ImportError: + raise CompressionError("zlib module is not available") from None + self.zlib = zlib + self.crc = zlib.crc32(b"") + if mode == "r": + self.exception = zlib.error + self._init_read_gz() + else: + self._init_write_gz(compresslevel) + + elif comptype == "bz2": + try: + import bz2 + except ImportError: + raise CompressionError("bz2 module is not available") from None + if mode == "r": + self.dbuf = b"" + self.cmp = bz2.BZ2Decompressor() + self.exception = OSError + else: + self.cmp = bz2.BZ2Compressor(compresslevel) + + elif comptype == "xz": + try: + import lzma + except ImportError: + raise CompressionError("lzma module is not available") from None + if mode == "r": + self.dbuf = b"" + self.cmp = lzma.LZMADecompressor() + self.exception = lzma.LZMAError + else: + self.cmp = lzma.LZMACompressor() + + elif comptype != "tar": + raise CompressionError("unknown compression type %r" % comptype) + + except: + if not self._extfileobj: + self.fileobj.close() + self.closed = True + raise + + def __del__(self): + if hasattr(self, "closed") and not self.closed: + self.close() + + def _init_write_gz(self, compresslevel): + """Initialize for writing with gzip compression. + """ + self.cmp = self.zlib.compressobj(compresslevel, + self.zlib.DEFLATED, + -self.zlib.MAX_WBITS, + self.zlib.DEF_MEM_LEVEL, + 0) + timestamp = struct.pack("<L", int(time.time())) + self.__write(b"\037\213\010\010" + timestamp + b"\002\377") + if self.name.endswith(".gz"): + self.name = self.name[:-3] + # Honor "directory components removed" from RFC1952 + self.name = os.path.basename(self.name) + # RFC1952 says we must use ISO-8859-1 for the FNAME field. + self.__write(self.name.encode("iso-8859-1", "replace") + NUL) + + def write(self, s): + """Write string s to the stream. + """ + if self.comptype == "gz": + self.crc = self.zlib.crc32(s, self.crc) + self.pos += len(s) + if self.comptype != "tar": + s = self.cmp.compress(s) + self.__write(s) + + def __write(self, s): + """Write string s to the stream if a whole new block + is ready to be written. + """ + self.buf += s + while len(self.buf) > self.bufsize: + self.fileobj.write(self.buf[:self.bufsize]) + self.buf = self.buf[self.bufsize:] + + def close(self): + """Close the _Stream object. No operation should be + done on it afterwards. + """ + if self.closed: + return + + self.closed = True + try: + if self.mode == "w" and self.comptype != "tar": + self.buf += self.cmp.flush() + + if self.mode == "w" and self.buf: + self.fileobj.write(self.buf) + self.buf = b"" + if self.comptype == "gz": + self.fileobj.write(struct.pack("<L", self.crc)) + self.fileobj.write(struct.pack("<L", self.pos & 0xffffFFFF)) + finally: + if not self._extfileobj: + self.fileobj.close() + + def _init_read_gz(self): + """Initialize for reading a gzip compressed fileobj. + """ + self.cmp = self.zlib.decompressobj(-self.zlib.MAX_WBITS) + self.dbuf = b"" + + # taken from gzip.GzipFile with some alterations + if self.__read(2) != b"\037\213": + raise ReadError("not a gzip file") + if self.__read(1) != b"\010": + raise CompressionError("unsupported compression method") + + flag = ord(self.__read(1)) + self.__read(6) + + if flag & 4: + xlen = ord(self.__read(1)) + 256 * ord(self.__read(1)) + self.read(xlen) + if flag & 8: + while True: + s = self.__read(1) + if not s or s == NUL: + break + if flag & 16: + while True: + s = self.__read(1) + if not s or s == NUL: + break + if flag & 2: + self.__read(2) + + def tell(self): + """Return the stream's file pointer position. + """ + return self.pos + + def seek(self, pos=0): + """Set the stream's file pointer to pos. Negative seeking + is forbidden. + """ + if pos - self.pos >= 0: + blocks, remainder = divmod(pos - self.pos, self.bufsize) + for i in range(blocks): + self.read(self.bufsize) + self.read(remainder) + else: + raise StreamError("seeking backwards is not allowed") + return self.pos + + def read(self, size): + """Return the next size number of bytes from the stream.""" + assert size is not None + buf = self._read(size) + self.pos += len(buf) + return buf + + def _read(self, size): + """Return size bytes from the stream. + """ + if self.comptype == "tar": + return self.__read(size) + + c = len(self.dbuf) + t = [self.dbuf] + while c < size: + # Skip underlying buffer to avoid unaligned double buffering. + if self.buf: + buf = self.buf + self.buf = b"" + else: + buf = self.fileobj.read(self.bufsize) + if not buf: + break + try: + buf = self.cmp.decompress(buf) + except self.exception as e: + raise ReadError("invalid compressed data") from e + t.append(buf) + c += len(buf) + t = b"".join(t) + self.dbuf = t[size:] + return t[:size] + + def __read(self, size): + """Return size bytes from stream. If internal buffer is empty, + read another block from the stream. + """ + c = len(self.buf) + t = [self.buf] + while c < size: + buf = self.fileobj.read(self.bufsize) + if not buf: + break + t.append(buf) + c += len(buf) + t = b"".join(t) + self.buf = t[size:] + return t[:size] +# class _Stream + +class _StreamProxy(object): + """Small proxy class that enables transparent compression + detection for the Stream interface (mode 'r|*'). + """ + + def __init__(self, fileobj): + self.fileobj = fileobj + self.buf = self.fileobj.read(BLOCKSIZE) + + def read(self, size): + self.read = self.fileobj.read + return self.buf + + def getcomptype(self): + if self.buf.startswith(b"\x1f\x8b\x08"): + return "gz" + elif self.buf[0:3] == b"BZh" and self.buf[4:10] == b"1AY&SY": + return "bz2" + elif self.buf.startswith((b"\x5d\x00\x00\x80", b"\xfd7zXZ")): + return "xz" + else: + return "tar" + + def close(self): + self.fileobj.close() +# class StreamProxy + +#------------------------ +# Extraction file object +#------------------------ +class _FileInFile(object): + """A thin wrapper around an existing file object that + provides a part of its data as an individual file + object. + """ + + def __init__(self, fileobj, offset, size, name, blockinfo=None): + self.fileobj = fileobj + self.offset = offset + self.size = size + self.position = 0 + self.name = name + self.closed = False + + if blockinfo is None: + blockinfo = [(0, size)] + + # Construct a map with data and zero blocks. + self.map_index = 0 + self.map = [] + lastpos = 0 + realpos = self.offset + for offset, size in blockinfo: + if offset > lastpos: + self.map.append((False, lastpos, offset, None)) + self.map.append((True, offset, offset + size, realpos)) + realpos += size + lastpos = offset + size + if lastpos < self.size: + self.map.append((False, lastpos, self.size, None)) + + def flush(self): + pass + + def readable(self): + return True + + def writable(self): + return False + + def seekable(self): + return self.fileobj.seekable() + + def tell(self): + """Return the current file position. + """ + return self.position + + def seek(self, position, whence=io.SEEK_SET): + """Seek to a position in the file. + """ + if whence == io.SEEK_SET: + self.position = min(max(position, 0), self.size) + elif whence == io.SEEK_CUR: + if position < 0: + self.position = max(self.position + position, 0) + else: + self.position = min(self.position + position, self.size) + elif whence == io.SEEK_END: + self.position = max(min(self.size + position, self.size), 0) + else: + raise ValueError("Invalid argument") + return self.position + + def read(self, size=None): + """Read data from the file. + """ + if size is None: + size = self.size - self.position + else: + size = min(size, self.size - self.position) + + buf = b"" + while size > 0: + while True: + data, start, stop, offset = self.map[self.map_index] + if start <= self.position < stop: + break + else: + self.map_index += 1 + if self.map_index == len(self.map): + self.map_index = 0 + length = min(size, stop - self.position) + if data: + self.fileobj.seek(offset + (self.position - start)) + b = self.fileobj.read(length) + if len(b) != length: + raise ReadError("unexpected end of data") + buf += b + else: + buf += NUL * length + size -= length + self.position += length + return buf + + def readinto(self, b): + buf = self.read(len(b)) + b[:len(buf)] = buf + return len(buf) + + def close(self): + self.closed = True +#class _FileInFile + +class ExFileObject(io.BufferedReader): + + def __init__(self, tarfile, tarinfo): + fileobj = _FileInFile(tarfile.fileobj, tarinfo.offset_data, + tarinfo.size, tarinfo.name, tarinfo.sparse) + super().__init__(fileobj) +#class ExFileObject + + +#----------------------------- +# extraction filters (PEP 706) +#----------------------------- + +class FilterError(TarError): + pass + +class AbsolutePathError(FilterError): + def __init__(self, tarinfo): + self.tarinfo = tarinfo + super().__init__(f'member {tarinfo.name!r} has an absolute path') + +class OutsideDestinationError(FilterError): + def __init__(self, tarinfo, path): + self.tarinfo = tarinfo + self._path = path + super().__init__(f'{tarinfo.name!r} would be extracted to {path!r}, ' + + 'which is outside the destination') + +class SpecialFileError(FilterError): + def __init__(self, tarinfo): + self.tarinfo = tarinfo + super().__init__(f'{tarinfo.name!r} is a special file') + +class AbsoluteLinkError(FilterError): + def __init__(self, tarinfo): + self.tarinfo = tarinfo + super().__init__(f'{tarinfo.name!r} is a link to an absolute path') + +class LinkOutsideDestinationError(FilterError): + def __init__(self, tarinfo, path): + self.tarinfo = tarinfo + self._path = path + super().__init__(f'{tarinfo.name!r} would link to {path!r}, ' + + 'which is outside the destination') + +def _get_filtered_attrs(member, dest_path, for_data=True): + new_attrs = {} + name = member.name + dest_path = os.path.realpath(dest_path) + # Strip leading / (tar's directory separator) from filenames. + # Include os.sep (target OS directory separator) as well. + if name.startswith(('/', os.sep)): + name = new_attrs['name'] = member.path.lstrip('/' + os.sep) + if os.path.isabs(name): + # Path is absolute even after stripping. + # For example, 'C:/foo' on Windows. + raise AbsolutePathError(member) + # Ensure we stay in the destination + target_path = os.path.realpath(os.path.join(dest_path, name)) + if os.path.commonpath([target_path, dest_path]) != dest_path: + raise OutsideDestinationError(member, target_path) + # Limit permissions (no high bits, and go-w) + mode = member.mode + if mode is not None: + # Strip high bits & group/other write bits + mode = mode & 0o755 + if for_data: + # For data, handle permissions & file types + if member.isreg() or member.islnk(): + if not mode & 0o100: + # Clear executable bits if not executable by user + mode &= ~0o111 + # Ensure owner can read & write + mode |= 0o600 + elif member.isdir() or member.issym(): + # Ignore mode for directories & symlinks + mode = None + else: + # Reject special files + raise SpecialFileError(member) + if mode != member.mode: + new_attrs['mode'] = mode + if for_data: + # Ignore ownership for 'data' + if member.uid is not None: + new_attrs['uid'] = None + if member.gid is not None: + new_attrs['gid'] = None + if member.uname is not None: + new_attrs['uname'] = None + if member.gname is not None: + new_attrs['gname'] = None + # Check link destination for 'data' + if member.islnk() or member.issym(): + if os.path.isabs(member.linkname): + raise AbsoluteLinkError(member) + if member.issym(): + target_path = os.path.join(dest_path, + os.path.dirname(name), + member.linkname) + else: + target_path = os.path.join(dest_path, + member.linkname) + target_path = os.path.realpath(target_path) + if os.path.commonpath([target_path, dest_path]) != dest_path: + raise LinkOutsideDestinationError(member, target_path) + return new_attrs + +def fully_trusted_filter(member, dest_path): + return member + +def tar_filter(member, dest_path): + new_attrs = _get_filtered_attrs(member, dest_path, False) + if new_attrs: + return member.replace(**new_attrs, deep=False) + return member + +def data_filter(member, dest_path): + new_attrs = _get_filtered_attrs(member, dest_path, True) + if new_attrs: + return member.replace(**new_attrs, deep=False) + return member + +_NAMED_FILTERS = { + "fully_trusted": fully_trusted_filter, + "tar": tar_filter, + "data": data_filter, +} + +#------------------ +# Exported Classes +#------------------ + +# Sentinel for replace() defaults, meaning "don't change the attribute" +_KEEP = object() + +class TarInfo(object): + """Informational class which holds the details about an + archive member given by a tar header block. + TarInfo objects are returned by TarFile.getmember(), + TarFile.getmembers() and TarFile.gettarinfo() and are + usually created internally. + """ + + __slots__ = dict( + name = 'Name of the archive member.', + mode = 'Permission bits.', + uid = 'User ID of the user who originally stored this member.', + gid = 'Group ID of the user who originally stored this member.', + 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.'), + linkname = ('Name of the target file name, which is only present ' + 'in TarInfo objects of type LNKTYPE and SYMTYPE.'), + uname = 'User name.', + gname = 'Group name.', + devmajor = 'Device major number.', + devminor = 'Device minor number.', + 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.'), + sparse = 'Sparse member information.', + tarfile = None, + _sparse_structs = None, + _link_target = None, + ) + + def __init__(self, name=""): + """Construct a TarInfo object. name is the optional name + of the member. + """ + self.name = name # member name + self.mode = 0o644 # file permissions + self.uid = 0 # user id + self.gid = 0 # group id + self.size = 0 # file size + self.mtime = 0 # modification time + self.chksum = 0 # header checksum + self.type = REGTYPE # member type + self.linkname = "" # link name + self.uname = "" # user name + self.gname = "" # group name + self.devmajor = 0 # device major number + self.devminor = 0 # device minor number + + self.offset = 0 # the tar header starts here + self.offset_data = 0 # the file's data starts here + + self.sparse = None # sparse member information + self.pax_headers = {} # pax header information + + @property + def path(self): + 'In pax headers, "name" is called "path".' + return self.name + + @path.setter + def path(self, name): + self.name = name + + @property + def linkpath(self): + 'In pax headers, "linkname" is called "linkpath".' + return self.linkname + + @linkpath.setter + def linkpath(self, linkname): + self.linkname = linkname + + def __repr__(self): + return "<%s %r at %#x>" % (self.__class__.__name__,self.name,id(self)) + + def replace(self, *, + name=_KEEP, mtime=_KEEP, mode=_KEEP, linkname=_KEEP, + uid=_KEEP, gid=_KEEP, uname=_KEEP, gname=_KEEP, + deep=True, _KEEP=_KEEP): + """Return a deep copy of self with the given attributes replaced. + """ + if deep: + result = copy.deepcopy(self) + else: + result = copy.copy(self) + if name is not _KEEP: + result.name = name + if mtime is not _KEEP: + result.mtime = mtime + if mode is not _KEEP: + result.mode = mode + if linkname is not _KEEP: + result.linkname = linkname + if uid is not _KEEP: + result.uid = uid + if gid is not _KEEP: + result.gid = gid + if uname is not _KEEP: + result.uname = uname + if gname is not _KEEP: + result.gname = gname + return result + + def get_info(self): + """Return the TarInfo's attributes as a dictionary. + """ + if self.mode is None: + mode = None + else: + mode = self.mode & 0o7777 + info = { + "name": self.name, + "mode": mode, + "uid": self.uid, + "gid": self.gid, + "size": self.size, + "mtime": self.mtime, + "chksum": self.chksum, + "type": self.type, + "linkname": self.linkname, + "uname": self.uname, + "gname": self.gname, + "devmajor": self.devmajor, + "devminor": self.devminor + } + + if info["type"] == DIRTYPE and not info["name"].endswith("/"): + info["name"] += "/" + + return info + + def tobuf(self, format=DEFAULT_FORMAT, encoding=ENCODING, errors="surrogateescape"): + """Return a tar header as a string of 512 byte blocks. + """ + info = self.get_info() + for name, value in info.items(): + if value is None: + raise ValueError("%s may not be None" % name) + + if format == USTAR_FORMAT: + return self.create_ustar_header(info, encoding, errors) + elif format == GNU_FORMAT: + return self.create_gnu_header(info, encoding, errors) + elif format == PAX_FORMAT: + return self.create_pax_header(info, encoding) + else: + raise ValueError("invalid format") + + def create_ustar_header(self, info, encoding, errors): + """Return the object as a ustar header block. + """ + info["magic"] = POSIX_MAGIC + + if len(info["linkname"].encode(encoding, errors)) > LENGTH_LINK: + raise ValueError("linkname is too long") + + if len(info["name"].encode(encoding, errors)) > LENGTH_NAME: + info["prefix"], info["name"] = self._posix_split_name(info["name"], encoding, errors) + + return self._create_header(info, USTAR_FORMAT, encoding, errors) + + def create_gnu_header(self, info, encoding, errors): + """Return the object as a GNU header block sequence. + """ + info["magic"] = GNU_MAGIC + + buf = b"" + if len(info["linkname"].encode(encoding, errors)) > LENGTH_LINK: + buf += self._create_gnu_long_header(info["linkname"], GNUTYPE_LONGLINK, encoding, errors) + + if len(info["name"].encode(encoding, errors)) > LENGTH_NAME: + buf += self._create_gnu_long_header(info["name"], GNUTYPE_LONGNAME, encoding, errors) + + return buf + self._create_header(info, GNU_FORMAT, encoding, errors) + + def create_pax_header(self, info, encoding): + """Return the object as a ustar header block. If it cannot be + represented this way, prepend a pax extended header sequence + with supplement information. + """ + info["magic"] = POSIX_MAGIC + pax_headers = self.pax_headers.copy() + + # Test string fields for values that exceed the field length or cannot + # be represented in ASCII encoding. + for name, hname, length in ( + ("name", "path", LENGTH_NAME), ("linkname", "linkpath", LENGTH_LINK), + ("uname", "uname", 32), ("gname", "gname", 32)): + + if hname in pax_headers: + # The pax header has priority. + continue + + # Try to encode the string as ASCII. + try: + info[name].encode("ascii", "strict") + except UnicodeEncodeError: + pax_headers[hname] = info[name] + continue + + if len(info[name]) > length: + pax_headers[hname] = info[name] + + # Test number fields for values that exceed the field limit or values + # that like to be stored as float. + for name, digits in (("uid", 8), ("gid", 8), ("size", 12), ("mtime", 12)): + needs_pax = False + + val = info[name] + val_is_float = isinstance(val, float) + val_int = round(val) if val_is_float else val + if not 0 <= val_int < 8 ** (digits - 1): + # Avoid overflow. + info[name] = 0 + needs_pax = True + elif val_is_float: + # Put rounded value in ustar header, and full + # precision value in pax header. + info[name] = val_int + needs_pax = True + + # The existing pax header has priority. + if needs_pax and name not in pax_headers: + pax_headers[name] = str(val) + + # Create a pax extended header if necessary. + if pax_headers: + buf = self._create_pax_generic_header(pax_headers, XHDTYPE, encoding) + else: + buf = b"" + + return buf + self._create_header(info, USTAR_FORMAT, "ascii", "replace") + + @classmethod + def create_pax_global_header(cls, pax_headers): + """Return the object as a pax global header block sequence. + """ + return cls._create_pax_generic_header(pax_headers, XGLTYPE, "utf-8") + + def _posix_split_name(self, name, encoding, errors): + """Split a name longer than 100 chars into a prefix + and a name part. + """ + components = name.split("/") + for i in range(1, len(components)): + prefix = "/".join(components[:i]) + name = "/".join(components[i:]) + if len(prefix.encode(encoding, errors)) <= LENGTH_PREFIX and \ + len(name.encode(encoding, errors)) <= LENGTH_NAME: + break + else: + raise ValueError("name is too long") + + return prefix, name + + @staticmethod + def _create_header(info, format, encoding, errors): + """Return a header block. info is a dictionary with file + information, format must be one of the *_FORMAT constants. + """ + has_device_fields = info.get("type") in (CHRTYPE, BLKTYPE) + if has_device_fields: + devmajor = itn(info.get("devmajor", 0), 8, format) + devminor = itn(info.get("devminor", 0), 8, format) + else: + devmajor = stn("", 8, encoding, errors) + devminor = stn("", 8, encoding, errors) + + # None values in metadata should cause ValueError. + # itn()/stn() do this for all fields except type. + filetype = info.get("type", REGTYPE) + if filetype is None: + raise ValueError("TarInfo.type must not be None") + + parts = [ + stn(info.get("name", ""), 100, encoding, errors), + itn(info.get("mode", 0) & 0o7777, 8, format), + itn(info.get("uid", 0), 8, format), + itn(info.get("gid", 0), 8, format), + itn(info.get("size", 0), 12, format), + itn(info.get("mtime", 0), 12, format), + b" ", # checksum field + filetype, + stn(info.get("linkname", ""), 100, encoding, errors), + info.get("magic", POSIX_MAGIC), + stn(info.get("uname", ""), 32, encoding, errors), + stn(info.get("gname", ""), 32, encoding, errors), + devmajor, + devminor, + stn(info.get("prefix", ""), 155, encoding, errors) + ] + + buf = struct.pack("%ds" % BLOCKSIZE, b"".join(parts)) + chksum = calc_chksums(buf[-BLOCKSIZE:])[0] + buf = buf[:-364] + bytes("%06o\0" % chksum, "ascii") + buf[-357:] + return buf + + @staticmethod + def _create_payload(payload): + """Return the string payload filled with zero bytes + up to the next 512 byte border. + """ + blocks, remainder = divmod(len(payload), BLOCKSIZE) + if remainder > 0: + payload += (BLOCKSIZE - remainder) * NUL + return payload + + @classmethod + def _create_gnu_long_header(cls, name, type, encoding, errors): + """Return a GNUTYPE_LONGNAME or GNUTYPE_LONGLINK sequence + for name. + """ + name = name.encode(encoding, errors) + NUL + + info = {} + info["name"] = "././@LongLink" + info["type"] = type + info["size"] = len(name) + info["magic"] = GNU_MAGIC + + # create extended header + name blocks. + return cls._create_header(info, USTAR_FORMAT, encoding, errors) + \ + cls._create_payload(name) + + @classmethod + def _create_pax_generic_header(cls, pax_headers, type, encoding): + """Return a POSIX.1-2008 extended or global header sequence + that contains a list of keyword, value pairs. The values + must be strings. + """ + # Check if one of the fields contains surrogate characters and thereby + # forces hdrcharset=BINARY, see _proc_pax() for more information. + binary = False + for keyword, value in pax_headers.items(): + try: + value.encode("utf-8", "strict") + except UnicodeEncodeError: + binary = True + break + + records = b"" + if binary: + # Put the hdrcharset field at the beginning of the header. + records += b"21 hdrcharset=BINARY\n" + + for keyword, value in pax_headers.items(): + keyword = keyword.encode("utf-8") + if binary: + # Try to restore the original byte representation of `value'. + # Needless to say, that the encoding must match the string. + value = value.encode(encoding, "surrogateescape") + else: + value = value.encode("utf-8") + + l = len(keyword) + len(value) + 3 # ' ' + '=' + '\n' + n = p = 0 + while True: + n = l + len(str(p)) + if n == p: + break + p = n + records += bytes(str(p), "ascii") + b" " + keyword + b"=" + value + b"\n" + + # We use a hardcoded "././@PaxHeader" name like star does + # instead of the one that POSIX recommends. + info = {} + info["name"] = "././@PaxHeader" + info["type"] = type + info["size"] = len(records) + info["magic"] = POSIX_MAGIC + + # Create pax header + record blocks. + return cls._create_header(info, USTAR_FORMAT, "ascii", "replace") + \ + cls._create_payload(records) + + @classmethod + def frombuf(cls, buf, encoding, errors): + """Construct a TarInfo object from a 512 byte bytes object. + """ + if len(buf) == 0: + raise EmptyHeaderError("empty header") + if len(buf) != BLOCKSIZE: + raise TruncatedHeaderError("truncated header") + if buf.count(NUL) == BLOCKSIZE: + raise EOFHeaderError("end of file header") + + chksum = nti(buf[148:156]) + if chksum not in calc_chksums(buf): + raise InvalidHeaderError("bad checksum") + + obj = cls() + obj.name = nts(buf[0:100], encoding, errors) + obj.mode = nti(buf[100:108]) + obj.uid = nti(buf[108:116]) + obj.gid = nti(buf[116:124]) + obj.size = nti(buf[124:136]) + obj.mtime = nti(buf[136:148]) + obj.chksum = chksum + obj.type = buf[156:157] + obj.linkname = nts(buf[157:257], encoding, errors) + obj.uname = nts(buf[265:297], encoding, errors) + obj.gname = nts(buf[297:329], encoding, errors) + obj.devmajor = nti(buf[329:337]) + obj.devminor = nti(buf[337:345]) + prefix = nts(buf[345:500], encoding, errors) + + # Old V7 tar format represents a directory as a regular + # file with a trailing slash. + if obj.type == AREGTYPE and obj.name.endswith("/"): + obj.type = DIRTYPE + + # The old GNU sparse format occupies some of the unused + # space in the buffer for up to 4 sparse structures. + # Save them for later processing in _proc_sparse(). + if obj.type == GNUTYPE_SPARSE: + pos = 386 + structs = [] + for i in range(4): + try: + offset = nti(buf[pos:pos + 12]) + numbytes = nti(buf[pos + 12:pos + 24]) + except ValueError: + break + structs.append((offset, numbytes)) + pos += 24 + isextended = bool(buf[482]) + origsize = nti(buf[483:495]) + obj._sparse_structs = (structs, isextended, origsize) + + # Remove redundant slashes from directories. + if obj.isdir(): + obj.name = obj.name.rstrip("/") + + # Reconstruct a ustar longname. + if prefix and obj.type not in GNU_TYPES: + obj.name = prefix + "/" + obj.name + return obj + + @classmethod + def fromtarfile(cls, tarfile): + """Return the next TarInfo object from TarFile object + tarfile. + """ + buf = tarfile.fileobj.read(BLOCKSIZE) + obj = cls.frombuf(buf, tarfile.encoding, tarfile.errors) + obj.offset = tarfile.fileobj.tell() - BLOCKSIZE + return obj._proc_member(tarfile) + + #-------------------------------------------------------------------------- + # The following are methods that are called depending on the type of a + # member. The entry point is _proc_member() which can be overridden in a + # subclass to add custom _proc_*() methods. A _proc_*() method MUST + # implement the following + # operations: + # 1. Set self.offset_data to the position where the data blocks begin, + # if there is data that follows. + # 2. Set tarfile.offset to the position where the next member's header will + # begin. + # 3. Return self or another valid TarInfo object. + def _proc_member(self, tarfile): + """Choose the right processing method depending on + the type and call it. + """ + if self.type in (GNUTYPE_LONGNAME, GNUTYPE_LONGLINK): + return self._proc_gnulong(tarfile) + elif self.type == GNUTYPE_SPARSE: + return self._proc_sparse(tarfile) + elif self.type in (XHDTYPE, XGLTYPE, SOLARIS_XHDTYPE): + return self._proc_pax(tarfile) + else: + return self._proc_builtin(tarfile) + + def _proc_builtin(self, tarfile): + """Process a builtin type or an unknown type which + will be treated as a regular file. + """ + self.offset_data = tarfile.fileobj.tell() + offset = self.offset_data + if self.isreg() or self.type not in SUPPORTED_TYPES: + # Skip the following data blocks. + offset += self._block(self.size) + tarfile.offset = offset + + # Patch the TarInfo object with saved global + # header information. + self._apply_pax_info(tarfile.pax_headers, tarfile.encoding, tarfile.errors) + + # Remove redundant slashes from directories. This is to be consistent + # with frombuf(). + if self.isdir(): + self.name = self.name.rstrip("/") + + return self + + def _proc_gnulong(self, tarfile): + """Process the blocks that hold a GNU longname + or longlink member. + """ + buf = tarfile.fileobj.read(self._block(self.size)) + + # Fetch the next header and process it. + try: + next = self.fromtarfile(tarfile) + except HeaderError as e: + raise SubsequentHeaderError(str(e)) from None + + # Patch the TarInfo object from the next header with + # the longname information. + next.offset = self.offset + if self.type == GNUTYPE_LONGNAME: + next.name = nts(buf, tarfile.encoding, tarfile.errors) + elif self.type == GNUTYPE_LONGLINK: + next.linkname = nts(buf, tarfile.encoding, tarfile.errors) + + # Remove redundant slashes from directories. This is to be consistent + # with frombuf(). + if next.isdir(): + next.name = next.name.removesuffix("/") + + return next + + def _proc_sparse(self, tarfile): + """Process a GNU sparse header plus extra headers. + """ + # We already collected some sparse structures in frombuf(). + structs, isextended, origsize = self._sparse_structs + del self._sparse_structs + + # Collect sparse structures from extended header blocks. + while isextended: + buf = tarfile.fileobj.read(BLOCKSIZE) + pos = 0 + for i in range(21): + try: + offset = nti(buf[pos:pos + 12]) + numbytes = nti(buf[pos + 12:pos + 24]) + except ValueError: + break + if offset and numbytes: + structs.append((offset, numbytes)) + pos += 24 + isextended = bool(buf[504]) + self.sparse = structs + + self.offset_data = tarfile.fileobj.tell() + tarfile.offset = self.offset_data + self._block(self.size) + self.size = origsize + return self + + def _proc_pax(self, tarfile): + """Process an extended or global header as described in + POSIX.1-2008. + """ + # Read the header information. + buf = tarfile.fileobj.read(self._block(self.size)) + + # A pax header stores supplemental information for either + # the following file (extended) or all following files + # (global). + if self.type == XGLTYPE: + pax_headers = tarfile.pax_headers + else: + pax_headers = tarfile.pax_headers.copy() + + # Check if the pax header contains a hdrcharset field. This tells us + # the encoding of the path, linkpath, uname and gname fields. Normally, + # these fields are UTF-8 encoded but since POSIX.1-2008 tar + # implementations are allowed to store them as raw binary strings if + # the translation to UTF-8 fails. + match = re.search(br"\d+ hdrcharset=([^\n]+)\n", buf) + if match is not None: + pax_headers["hdrcharset"] = match.group(1).decode("utf-8") + + # For the time being, we don't care about anything other than "BINARY". + # The only other value that is currently allowed by the standard is + # "ISO-IR 10646 2000 UTF-8" in other words UTF-8. + hdrcharset = pax_headers.get("hdrcharset") + if hdrcharset == "BINARY": + encoding = tarfile.encoding + else: + encoding = "utf-8" + + # Parse pax header information. A record looks like that: + # "%d %s=%s\n" % (length, keyword, value). length is the size + # of the complete record including the length field itself and + # the newline. keyword and value are both UTF-8 encoded strings. + regex = re.compile(br"(\d+) ([^=]+)=") + pos = 0 + while match := regex.match(buf, pos): + length, keyword = match.groups() + length = int(length) + if length == 0: + raise InvalidHeaderError("invalid header") + value = buf[match.end(2) + 1:match.start(1) + length - 1] + + # Normally, we could just use "utf-8" as the encoding and "strict" + # as the error handler, but we better not take the risk. For + # example, GNU tar <= 1.23 is known to store filenames it cannot + # translate to UTF-8 as raw strings (unfortunately without a + # hdrcharset=BINARY header). + # We first try the strict standard encoding, and if that fails we + # fall back on the user's encoding and error handler. + keyword = self._decode_pax_field(keyword, "utf-8", "utf-8", + tarfile.errors) + if keyword in PAX_NAME_FIELDS: + value = self._decode_pax_field(value, encoding, tarfile.encoding, + tarfile.errors) + else: + value = self._decode_pax_field(value, "utf-8", "utf-8", + tarfile.errors) + + pax_headers[keyword] = value + pos += length + + # Fetch the next header. + try: + next = self.fromtarfile(tarfile) + except HeaderError as e: + raise SubsequentHeaderError(str(e)) from None + + # Process GNU sparse information. + if "GNU.sparse.map" in pax_headers: + # GNU extended sparse format version 0.1. + self._proc_gnusparse_01(next, pax_headers) + + elif "GNU.sparse.size" in pax_headers: + # GNU extended sparse format version 0.0. + self._proc_gnusparse_00(next, pax_headers, buf) + + elif pax_headers.get("GNU.sparse.major") == "1" and pax_headers.get("GNU.sparse.minor") == "0": + # GNU extended sparse format version 1.0. + self._proc_gnusparse_10(next, pax_headers, tarfile) + + if self.type in (XHDTYPE, SOLARIS_XHDTYPE): + # Patch the TarInfo object with the extended header info. + next._apply_pax_info(pax_headers, tarfile.encoding, tarfile.errors) + next.offset = self.offset + + if "size" in pax_headers: + # If the extended header replaces the size field, + # we need to recalculate the offset where the next + # header starts. + offset = next.offset_data + if next.isreg() or next.type not in SUPPORTED_TYPES: + offset += next._block(next.size) + tarfile.offset = offset + + return next + + def _proc_gnusparse_00(self, next, pax_headers, buf): + """Process a GNU tar extended sparse header, version 0.0. + """ + offsets = [] + for match in re.finditer(br"\d+ GNU.sparse.offset=(\d+)\n", buf): + offsets.append(int(match.group(1))) + numbytes = [] + for match in re.finditer(br"\d+ GNU.sparse.numbytes=(\d+)\n", buf): + numbytes.append(int(match.group(1))) + next.sparse = list(zip(offsets, numbytes)) + + def _proc_gnusparse_01(self, next, pax_headers): + """Process a GNU tar extended sparse header, version 0.1. + """ + sparse = [int(x) for x in pax_headers["GNU.sparse.map"].split(",")] + next.sparse = list(zip(sparse[::2], sparse[1::2])) + + def _proc_gnusparse_10(self, next, pax_headers, tarfile): + """Process a GNU tar extended sparse header, version 1.0. + """ + fields = None + sparse = [] + buf = tarfile.fileobj.read(BLOCKSIZE) + fields, buf = buf.split(b"\n", 1) + fields = int(fields) + while len(sparse) < fields * 2: + if b"\n" not in buf: + buf += tarfile.fileobj.read(BLOCKSIZE) + number, buf = buf.split(b"\n", 1) + sparse.append(int(number)) + next.offset_data = tarfile.fileobj.tell() + next.sparse = list(zip(sparse[::2], sparse[1::2])) + + def _apply_pax_info(self, pax_headers, encoding, errors): + """Replace fields with supplemental information from a previous + pax extended or global header. + """ + for keyword, value in pax_headers.items(): + if keyword == "GNU.sparse.name": + setattr(self, "path", value) + elif keyword == "GNU.sparse.size": + setattr(self, "size", int(value)) + elif keyword == "GNU.sparse.realsize": + setattr(self, "size", int(value)) + elif keyword in PAX_FIELDS: + if keyword in PAX_NUMBER_FIELDS: + try: + value = PAX_NUMBER_FIELDS[keyword](value) + except ValueError: + value = 0 + if keyword == "path": + value = value.rstrip("/") + setattr(self, keyword, value) + + self.pax_headers = pax_headers.copy() + + def _decode_pax_field(self, value, encoding, fallback_encoding, fallback_errors): + """Decode a single field from a pax record. + """ + try: + return value.decode(encoding, "strict") + except UnicodeDecodeError: + return value.decode(fallback_encoding, fallback_errors) + + def _block(self, count): + """Round up a byte count by BLOCKSIZE and return it, + e.g. _block(834) => 1024. + """ + blocks, remainder = divmod(count, BLOCKSIZE) + if remainder: + blocks += 1 + return blocks * BLOCKSIZE + + def isreg(self): + 'Return True if the Tarinfo object is a regular file.' + return self.type in REGULAR_TYPES + + def isfile(self): + 'Return True if the Tarinfo object is a regular file.' + return self.isreg() + + def isdir(self): + 'Return True if it is a directory.' + return self.type == DIRTYPE + + def issym(self): + 'Return True if it is a symbolic link.' + return self.type == SYMTYPE + + def islnk(self): + 'Return True if it is a hard link.' + return self.type == LNKTYPE + + def ischr(self): + 'Return True if it is a character device.' + return self.type == CHRTYPE + + def isblk(self): + 'Return True if it is a block device.' + return self.type == BLKTYPE + + def isfifo(self): + 'Return True if it is a FIFO.' + return self.type == FIFOTYPE + + def issparse(self): + return self.sparse is not None + + def isdev(self): + 'Return True if it is one of character device, block device or FIFO.' + return self.type in (CHRTYPE, BLKTYPE, FIFOTYPE) +# class TarInfo + +class TarFile(object): + """The TarFile Class provides an interface to tar archives. + """ + + debug = 0 # May be set from 0 (no msgs) to 3 (all msgs) + + dereference = False # If true, add content of linked file to the + # tar file, else the link. + + ignore_zeros = False # If true, skips empty or invalid blocks and + # continues processing. + + errorlevel = 1 # If 0, fatal errors only appear in debug + # messages (if debug >= 0). If > 0, errors + # are passed to the caller as exceptions. + + format = DEFAULT_FORMAT # The format to use when creating an archive. + + encoding = ENCODING # Encoding for 8-bit character strings. + + errors = None # Error handler for unicode conversion. + + tarinfo = TarInfo # The default TarInfo class to use. + + fileobject = ExFileObject # The file-object for extractfile(). + + extraction_filter = None # The default filter for extraction. + + def __init__(self, name=None, mode="r", fileobj=None, format=None, + tarinfo=None, dereference=None, ignore_zeros=None, encoding=None, + errors="surrogateescape", pax_headers=None, debug=None, + errorlevel=None, copybufsize=None): + """Open an (uncompressed) tar archive `name'. `mode' is either 'r' to + read from an existing archive, 'a' to append data to an existing + file or 'w' to create a new file overwriting an existing one. `mode' + defaults to 'r'. + If `fileobj' is given, it is used for reading or writing data. If it + can be determined, `mode' is overridden by `fileobj's mode. + `fileobj' is not closed, when TarFile is closed. + """ + modes = {"r": "rb", "a": "r+b", "w": "wb", "x": "xb"} + if mode not in modes: + raise ValueError("mode must be 'r', 'a', 'w' or 'x'") + self.mode = mode + self._mode = modes[mode] + + if not fileobj: + if self.mode == "a" and not os.path.exists(name): + # Create nonexistent files in append mode. + self.mode = "w" + self._mode = "wb" + fileobj = bltn_open(name, self._mode) + self._extfileobj = False + else: + if (name is None and hasattr(fileobj, "name") and + isinstance(fileobj.name, (str, bytes))): + name = fileobj.name + if hasattr(fileobj, "mode"): + self._mode = fileobj.mode + self._extfileobj = True + self.name = os.path.abspath(name) if name else None + self.fileobj = fileobj + + # Init attributes. + if format is not None: + self.format = format + if tarinfo is not None: + self.tarinfo = tarinfo + if dereference is not None: + self.dereference = dereference + if ignore_zeros is not None: + self.ignore_zeros = ignore_zeros + if encoding is not None: + self.encoding = encoding + self.errors = errors + + if pax_headers is not None and self.format == PAX_FORMAT: + self.pax_headers = pax_headers + else: + self.pax_headers = {} + + if debug is not None: + self.debug = debug + if errorlevel is not None: + self.errorlevel = errorlevel + + # Init datastructures. + self.copybufsize = copybufsize + self.closed = False + self.members = [] # list of members as TarInfo objects + self._loaded = False # flag if all members have been read + self.offset = self.fileobj.tell() + # current position in the archive file + self.inodes = {} # dictionary caching the inodes of + # archive members already added + + try: + if self.mode == "r": + self.firstmember = None + self.firstmember = self.next() + + if self.mode == "a": + # Move to the end of the archive, + # before the first empty block. + while True: + self.fileobj.seek(self.offset) + try: + tarinfo = self.tarinfo.fromtarfile(self) + self.members.append(tarinfo) + except EOFHeaderError: + self.fileobj.seek(self.offset) + break + except HeaderError as e: + raise ReadError(str(e)) from None + + if self.mode in ("a", "w", "x"): + self._loaded = True + + if self.pax_headers: + buf = self.tarinfo.create_pax_global_header(self.pax_headers.copy()) + self.fileobj.write(buf) + self.offset += len(buf) + except: + if not self._extfileobj: + self.fileobj.close() + self.closed = True + raise + + #-------------------------------------------------------------------------- + # Below are the classmethods which act as alternate constructors to the + # TarFile class. The open() method is the only one that is needed for + # public use; it is the "super"-constructor and is able to select an + # adequate "sub"-constructor for a particular compression using the mapping + # from OPEN_METH. + # + # This concept allows one to subclass TarFile without losing the comfort of + # the super-constructor. A sub-constructor is registered and made available + # by adding it to the mapping in OPEN_METH. + + @classmethod + def open(cls, name=None, mode="r", fileobj=None, bufsize=RECORDSIZE, **kwargs): + r"""Open a tar archive for reading, writing or appending. Return + an appropriate TarFile class. + + mode: + 'r' or 'r:\*' open for reading with transparent compression + 'r:' open for reading exclusively uncompressed + 'r:gz' open for reading with gzip compression + 'r:bz2' open for reading with bzip2 compression + 'r:xz' open for reading with lzma compression + 'a' or 'a:' open for appending, creating the file if necessary + 'w' or 'w:' open for writing without compression + 'w:gz' open for writing with gzip compression + 'w:bz2' open for writing with bzip2 compression + 'w:xz' open for writing with lzma compression + + 'x' or 'x:' create a tarfile exclusively without compression, raise + an exception if the file is already created + 'x:gz' create a gzip compressed tarfile, raise an exception + if the file is already created + 'x:bz2' create a bzip2 compressed tarfile, raise an exception + if the file is already created + 'x:xz' create an lzma compressed tarfile, raise an exception + if the file is already created + + 'r|\*' open a stream of tar blocks with transparent compression + 'r|' open an uncompressed stream of tar blocks for reading + 'r|gz' open a gzip compressed stream of tar blocks + 'r|bz2' open a bzip2 compressed stream of tar blocks + 'r|xz' open an lzma compressed stream of tar blocks + 'w|' open an uncompressed stream for writing + 'w|gz' open a gzip compressed stream for writing + 'w|bz2' open a bzip2 compressed stream for writing + 'w|xz' open an lzma compressed stream for writing + """ + + if not name and not fileobj: + raise ValueError("nothing to open") + + if mode in ("r", "r:*"): + # Find out which *open() is appropriate for opening the file. + def not_compressed(comptype): + return cls.OPEN_METH[comptype] == 'taropen' + error_msgs = [] + for comptype in sorted(cls.OPEN_METH, key=not_compressed): + func = getattr(cls, cls.OPEN_METH[comptype]) + if fileobj is not None: + saved_pos = fileobj.tell() + try: + return func(name, "r", fileobj, **kwargs) + except (ReadError, CompressionError) as e: + error_msgs.append(f'- method {comptype}: {e!r}') + if fileobj is not None: + fileobj.seek(saved_pos) + continue + error_msgs_summary = '\n'.join(error_msgs) + raise ReadError(f"file could not be opened successfully:\n{error_msgs_summary}") + + elif ":" in mode: + filemode, comptype = mode.split(":", 1) + filemode = filemode or "r" + comptype = comptype or "tar" + + # Select the *open() function according to + # given compression. + if comptype in cls.OPEN_METH: + func = getattr(cls, cls.OPEN_METH[comptype]) + else: + raise CompressionError("unknown compression type %r" % comptype) + return func(name, filemode, fileobj, **kwargs) + + elif "|" in mode: + filemode, comptype = mode.split("|", 1) + filemode = filemode or "r" + comptype = comptype or "tar" + + if filemode not in ("r", "w"): + raise ValueError("mode must be 'r' or 'w'") + + compresslevel = kwargs.pop("compresslevel", 9) + stream = _Stream(name, filemode, comptype, fileobj, bufsize, + compresslevel) + try: + t = cls(name, filemode, stream, **kwargs) + except: + stream.close() + raise + t._extfileobj = False + return t + + elif mode in ("a", "w", "x"): + return cls.taropen(name, mode, fileobj, **kwargs) + + raise ValueError("undiscernible mode") + + @classmethod + def taropen(cls, name, mode="r", fileobj=None, **kwargs): + """Open uncompressed tar archive name for reading or writing. + """ + if mode not in ("r", "a", "w", "x"): + raise ValueError("mode must be 'r', 'a', 'w' or 'x'") + return cls(name, mode, fileobj, **kwargs) + + @classmethod + def gzopen(cls, name, mode="r", fileobj=None, compresslevel=9, **kwargs): + """Open gzip compressed tar archive name for reading or writing. + Appending is not allowed. + """ + if mode not in ("r", "w", "x"): + raise ValueError("mode must be 'r', 'w' or 'x'") + + try: + from gzip import GzipFile + except ImportError: + raise CompressionError("gzip module is not available") from None + + try: + fileobj = GzipFile(name, mode + "b", compresslevel, fileobj) + except OSError as e: + if fileobj is not None and mode == 'r': + raise ReadError("not a gzip file") from e + raise + + try: + t = cls.taropen(name, mode, fileobj, **kwargs) + except OSError as e: + fileobj.close() + if mode == 'r': + raise ReadError("not a gzip file") from e + raise + except: + fileobj.close() + raise + t._extfileobj = False + return t + + @classmethod + def bz2open(cls, name, mode="r", fileobj=None, compresslevel=9, **kwargs): + """Open bzip2 compressed tar archive name for reading or writing. + Appending is not allowed. + """ + if mode not in ("r", "w", "x"): + raise ValueError("mode must be 'r', 'w' or 'x'") + + try: + from bz2 import BZ2File + except ImportError: + raise CompressionError("bz2 module is not available") from None + + fileobj = BZ2File(fileobj or name, mode, compresslevel=compresslevel) + + try: + t = cls.taropen(name, mode, fileobj, **kwargs) + except (OSError, EOFError) as e: + fileobj.close() + if mode == 'r': + raise ReadError("not a bzip2 file") from e + raise + except: + fileobj.close() + raise + t._extfileobj = False + return t + + @classmethod + def xzopen(cls, name, mode="r", fileobj=None, preset=None, **kwargs): + """Open lzma compressed tar archive name for reading or writing. + Appending is not allowed. + """ + if mode not in ("r", "w", "x"): + raise ValueError("mode must be 'r', 'w' or 'x'") + + try: + from lzma import LZMAFile, LZMAError + except ImportError: + raise CompressionError("lzma module is not available") from None + + fileobj = LZMAFile(fileobj or name, mode, preset=preset) + + try: + t = cls.taropen(name, mode, fileobj, **kwargs) + except (LZMAError, EOFError) as e: + fileobj.close() + if mode == 'r': + raise ReadError("not an lzma file") from e + raise + except: + fileobj.close() + raise + t._extfileobj = False + return t + + # All *open() methods are registered here. + OPEN_METH = { + "tar": "taropen", # uncompressed tar + "gz": "gzopen", # gzip compressed tar + "bz2": "bz2open", # bzip2 compressed tar + "xz": "xzopen" # lzma compressed tar + } + + #-------------------------------------------------------------------------- + # The public methods which TarFile provides: + + def close(self): + """Close the TarFile. In write-mode, two finishing zero blocks are + appended to the archive. + """ + if self.closed: + return + + self.closed = True + try: + if self.mode in ("a", "w", "x"): + self.fileobj.write(NUL * (BLOCKSIZE * 2)) + self.offset += (BLOCKSIZE * 2) + # fill up the end with zero-blocks + # (like option -b20 for tar does) + blocks, remainder = divmod(self.offset, RECORDSIZE) + if remainder > 0: + self.fileobj.write(NUL * (RECORDSIZE - remainder)) + finally: + if not self._extfileobj: + self.fileobj.close() + + def getmember(self, name): + """Return a TarInfo object for member ``name``. If ``name`` can not be + found in the archive, KeyError is raised. If a member occurs more + than once in the archive, its last occurrence is assumed to be the + most up-to-date version. + """ + tarinfo = self._getmember(name.rstrip('/')) + if tarinfo is None: + raise KeyError("filename %r not found" % name) + return tarinfo + + def getmembers(self): + """Return the members of the archive as a list of TarInfo objects. The + list has the same order as the members in the archive. + """ + self._check() + if not self._loaded: # if we want to obtain a list of + self._load() # all members, we first have to + # scan the whole archive. + return self.members + + def getnames(self): + """Return the members of the archive as a list of their names. It has + the same order as the list returned by getmembers(). + """ + return [tarinfo.name for tarinfo in self.getmembers()] + + def gettarinfo(self, name=None, arcname=None, fileobj=None): + """Create a TarInfo object from the result of os.stat or equivalent + on an existing file. The file is either named by ``name``, or + specified as a file object ``fileobj`` with a file descriptor. If + given, ``arcname`` specifies an alternative name for the file in the + archive, otherwise, the name is taken from the 'name' attribute of + 'fileobj', or the 'name' argument. The name should be a text + string. + """ + self._check("awx") + + # When fileobj is given, replace name by + # fileobj's real name. + if fileobj is not None: + name = fileobj.name + + # Building the name of the member in the archive. + # Backward slashes are converted to forward slashes, + # Absolute paths are turned to relative paths. + if arcname is None: + arcname = name + drv, arcname = os.path.splitdrive(arcname) + arcname = arcname.replace(os.sep, "/") + arcname = arcname.lstrip("/") + + # Now, fill the TarInfo object with + # information specific for the file. + tarinfo = self.tarinfo() + tarinfo.tarfile = self # Not needed + + # Use os.stat or os.lstat, depending on if symlinks shall be resolved. + if fileobj is None: + if not self.dereference: + statres = os.lstat(name) + else: + statres = os.stat(name) + else: + statres = os.fstat(fileobj.fileno()) + linkname = "" + + stmd = statres.st_mode + if stat.S_ISREG(stmd): + inode = (statres.st_ino, statres.st_dev) + if not self.dereference and statres.st_nlink > 1 and \ + inode in self.inodes and arcname != self.inodes[inode]: + # Is it a hardlink to an already + # archived file? + type = LNKTYPE + linkname = self.inodes[inode] + else: + # The inode is added only if its valid. + # For win32 it is always 0. + type = REGTYPE + if inode[0]: + self.inodes[inode] = arcname + elif stat.S_ISDIR(stmd): + type = DIRTYPE + elif stat.S_ISFIFO(stmd): + type = FIFOTYPE + elif stat.S_ISLNK(stmd): + type = SYMTYPE + linkname = os.readlink(name) + elif stat.S_ISCHR(stmd): + type = CHRTYPE + elif stat.S_ISBLK(stmd): + type = BLKTYPE + else: + return None + + # Fill the TarInfo object with all + # information we can get. + tarinfo.name = arcname + tarinfo.mode = stmd + tarinfo.uid = statres.st_uid + tarinfo.gid = statres.st_gid + if type == REGTYPE: + tarinfo.size = statres.st_size + else: + tarinfo.size = 0 + tarinfo.mtime = statres.st_mtime + tarinfo.type = type + tarinfo.linkname = linkname + if pwd: + try: + tarinfo.uname = pwd.getpwuid(tarinfo.uid)[0] + except KeyError: + pass + if grp: + try: + tarinfo.gname = grp.getgrgid(tarinfo.gid)[0] + except KeyError: + pass + + if type in (CHRTYPE, BLKTYPE): + if hasattr(os, "major") and hasattr(os, "minor"): + tarinfo.devmajor = os.major(statres.st_rdev) + tarinfo.devminor = os.minor(statres.st_rdev) + 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(). + """ + self._check() + + if members is None: + members = self + for tarinfo in members: + if verbose: + if tarinfo.mode is None: + _safe_print("??????????") + else: + _safe_print(stat.filemode(tarinfo.mode)) + _safe_print("%s/%s" % (tarinfo.uname or tarinfo.uid, + tarinfo.gname or tarinfo.gid)) + if tarinfo.ischr() or tarinfo.isblk(): + _safe_print("%10s" % + ("%d,%d" % (tarinfo.devmajor, tarinfo.devminor))) + else: + _safe_print("%10d" % tarinfo.size) + if tarinfo.mtime is None: + _safe_print("????-??-?? ??:??:??") + else: + _safe_print("%d-%02d-%02d %02d:%02d:%02d" \ + % time.localtime(tarinfo.mtime)[:6]) + + _safe_print(tarinfo.name + ("/" if tarinfo.isdir() else "")) + + if verbose: + if tarinfo.issym(): + _safe_print("-> " + tarinfo.linkname) + if tarinfo.islnk(): + _safe_print("link to " + tarinfo.linkname) + print() + + def add(self, name, arcname=None, recursive=True, *, filter=None): + """Add the file ``name`` to the archive. ``name`` may be any type of file + (directory, fifo, symbolic link, etc.). If given, ``arcname`` + specifies an alternative name for the file in the archive. + Directories are added recursively by default. This can be avoided by + setting ``recursive`` to False. ``filter`` is a function + that expects a TarInfo object argument and returns the changed + TarInfo object, if it returns None the TarInfo object will be + excluded from the archive. + """ + self._check("awx") + + if arcname is None: + arcname = name + + # Skip if somebody tries to archive the archive... + if self.name is not None and os.path.abspath(name) == self.name: + self._dbg(2, "tarfile: Skipped %r" % name) + return + + self._dbg(1, name) + + # Create a TarInfo object from the file. + tarinfo = self.gettarinfo(name, arcname) + + if tarinfo is None: + self._dbg(1, "tarfile: Unsupported type %r" % name) + return + + # Change or exclude the TarInfo object. + if filter is not None: + tarinfo = filter(tarinfo) + if tarinfo is None: + self._dbg(2, "tarfile: Excluded %r" % name) + return + + # Append the tar header and data to the archive. + if tarinfo.isreg(): + with bltn_open(name, "rb") as f: + self.addfile(tarinfo, f) + + elif tarinfo.isdir(): + self.addfile(tarinfo) + if recursive: + for f in sorted(os.listdir(name)): + self.add(os.path.join(name, f), os.path.join(arcname, f), + recursive, filter=filter) + + else: + self.addfile(tarinfo) + + def addfile(self, tarinfo, fileobj=None): + """Add the TarInfo object ``tarinfo`` to the archive. If ``fileobj`` is + given, it 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") + + tarinfo = copy.copy(tarinfo) + + buf = tarinfo.tobuf(self.format, self.encoding, self.errors) + self.fileobj.write(buf) + self.offset += len(buf) + bufsize=self.copybufsize + # If there's data to follow, append it. + if fileobj is not None: + copyfileobj(fileobj, self.fileobj, tarinfo.size, bufsize=bufsize) + blocks, remainder = divmod(tarinfo.size, BLOCKSIZE) + if remainder > 0: + self.fileobj.write(NUL * (BLOCKSIZE - remainder)) + blocks += 1 + self.offset += blocks * BLOCKSIZE + + self.members.append(tarinfo) + + def _get_filter_function(self, filter): + if filter is None: + filter = self.extraction_filter + if filter is None: + warnings.warn( + 'Python 3.14 will, by default, filter extracted tar ' + + 'archives and reject files or modify their metadata. ' + + 'Use the filter argument to control this behavior.', + DeprecationWarning) + return fully_trusted_filter + if isinstance(filter, str): + raise TypeError( + 'String names are not supported for ' + + 'TarFile.extraction_filter. Use a function such as ' + + 'tarfile.data_filter directly.') + return filter + if callable(filter): + return filter + try: + return _NAMED_FILTERS[filter] + except KeyError: + raise ValueError(f"filter {filter!r} not found") from None + + def extractall(self, path=".", members=None, *, numeric_owner=False, + filter=None): + """Extract all members from the archive to the current working + directory and set owner, modification time and permissions on + directories afterwards. `path' specifies a different directory + to extract to. `members' is optional and must be a subset of the + list returned by getmembers(). If `numeric_owner` is True, only + the numbers for user/group names are used and not the names. + + The `filter` function will be called on each member just + before extraction. + It can return a changed TarInfo or None to skip the member. + String names of common filters are accepted. + """ + directories = [] + + filter_function = self._get_filter_function(filter) + if members is None: + members = self + + for member in members: + tarinfo = self._get_extract_tarinfo(member, filter_function, path) + if tarinfo is None: + continue + if tarinfo.isdir(): + # For directories, delay setting attributes until later, + # since permissions can interfere with extraction and + # extracting contents can reset mtime. + directories.append(tarinfo) + self._extract_one(tarinfo, path, set_attrs=not tarinfo.isdir(), + numeric_owner=numeric_owner) + + # Reverse sort directories. + directories.sort(key=lambda a: a.name, reverse=True) + + # Set correct owner, mtime and filemode on directories. + for tarinfo in directories: + dirpath = os.path.join(path, tarinfo.name) + try: + self.chown(tarinfo, dirpath, numeric_owner=numeric_owner) + self.utime(tarinfo, dirpath) + self.chmod(tarinfo, dirpath) + except ExtractError as e: + self._handle_nonfatal_error(e) + + def extract(self, member, path="", set_attrs=True, *, numeric_owner=False, + filter=None): + """Extract a member from the archive to the current working directory, + using its full name. Its file information is extracted as accurately + as possible. `member' may be a filename or a TarInfo object. You can + specify a different directory using `path'. File attributes (owner, + mtime, mode) are set unless `set_attrs' is False. If `numeric_owner` + is True, only the numbers for user/group names are used and not + the names. + + The `filter` function will be called before extraction. + It can return a changed TarInfo or None to skip the member. + String names of common filters are accepted. + """ + filter_function = self._get_filter_function(filter) + tarinfo = self._get_extract_tarinfo(member, filter_function, path) + if tarinfo is not None: + self._extract_one(tarinfo, path, set_attrs, numeric_owner) + + def _get_extract_tarinfo(self, member, filter_function, path): + """Get filtered TarInfo (or None) from member, which might be a str""" + if isinstance(member, str): + tarinfo = self.getmember(member) + else: + tarinfo = member + + unfiltered = tarinfo + try: + tarinfo = filter_function(tarinfo, path) + except (OSError, FilterError) as e: + self._handle_fatal_error(e) + except ExtractError as e: + self._handle_nonfatal_error(e) + if tarinfo is None: + self._dbg(2, "tarfile: Excluded %r" % unfiltered.name) + return None + # Prepare the link target for makelink(). + if tarinfo.islnk(): + tarinfo = copy.copy(tarinfo) + tarinfo._link_target = os.path.join(path, tarinfo.linkname) + return tarinfo + + def _extract_one(self, tarinfo, path, set_attrs, numeric_owner): + """Extract from filtered tarinfo to disk""" + self._check("r") + + try: + self._extract_member(tarinfo, os.path.join(path, tarinfo.name), + set_attrs=set_attrs, + numeric_owner=numeric_owner) + except OSError as e: + self._handle_fatal_error(e) + except ExtractError as e: + self._handle_nonfatal_error(e) + + def _handle_nonfatal_error(self, e): + """Handle non-fatal error (ExtractError) according to errorlevel""" + if self.errorlevel > 1: + raise + else: + self._dbg(1, "tarfile: %s" % e) + + def _handle_fatal_error(self, e): + """Handle "fatal" error according to self.errorlevel""" + if self.errorlevel > 0: + raise + elif isinstance(e, OSError): + if e.filename is None: + self._dbg(1, "tarfile: %s" % e.strerror) + else: + self._dbg(1, "tarfile: %s %r" % (e.strerror, e.filename)) + else: + self._dbg(1, "tarfile: %s %s" % (type(e).__name__, e)) + + def extractfile(self, member): + """Extract a member from the archive as a file object. ``member`` may be + a filename or a TarInfo object. If ``member`` is a regular file or + a link, an io.BufferedReader object is returned. For all other + existing members, None is returned. If ``member`` does not appear + in the archive, KeyError is raised. + """ + self._check("r") + + if isinstance(member, str): + tarinfo = self.getmember(member) + else: + tarinfo = member + + if tarinfo.isreg() or tarinfo.type not in SUPPORTED_TYPES: + # Members with unknown types are treated as regular files. + return self.fileobject(self, tarinfo) + + elif tarinfo.islnk() or tarinfo.issym(): + if isinstance(self.fileobj, _Stream): + # A small but ugly workaround for the case that someone tries + # to extract a (sym)link as a file-object from a non-seekable + # stream of tar blocks. + raise StreamError("cannot extract (sym)link as file object") + else: + # A (sym)link's file object is its target's file object. + return self.extractfile(self._find_link_target(tarinfo)) + else: + # If there's no data associated with the member (directory, chrdev, + # blkdev, etc.), return None instead of a file object. + return None + + def _extract_member(self, tarinfo, targetpath, set_attrs=True, + numeric_owner=False): + """Extract the TarInfo object tarinfo to a physical + file called targetpath. + """ + # Fetch the TarInfo object for the given name + # and build the destination pathname, replacing + # forward slashes to platform specific separators. + targetpath = targetpath.rstrip("/") + targetpath = targetpath.replace("/", os.sep) + + # Create all upper directories. + upperdirs = os.path.dirname(targetpath) + if upperdirs and not os.path.exists(upperdirs): + # Create directories that are not part of the archive with + # default permissions. + os.makedirs(upperdirs) + + if tarinfo.islnk() or tarinfo.issym(): + self._dbg(1, "%s -> %s" % (tarinfo.name, tarinfo.linkname)) + else: + self._dbg(1, tarinfo.name) + + if tarinfo.isreg(): + self.makefile(tarinfo, targetpath) + elif tarinfo.isdir(): + self.makedir(tarinfo, targetpath) + elif tarinfo.isfifo(): + self.makefifo(tarinfo, targetpath) + elif tarinfo.ischr() or tarinfo.isblk(): + self.makedev(tarinfo, targetpath) + elif tarinfo.islnk() or tarinfo.issym(): + self.makelink(tarinfo, targetpath) + elif tarinfo.type not in SUPPORTED_TYPES: + self.makeunknown(tarinfo, targetpath) + else: + self.makefile(tarinfo, targetpath) + + if set_attrs: + self.chown(tarinfo, targetpath, numeric_owner) + if not tarinfo.issym(): + self.chmod(tarinfo, targetpath) + self.utime(tarinfo, targetpath) + + #-------------------------------------------------------------------------- + # Below are the different file methods. They are called via + # _extract_member() when extract() is called. They can be replaced in a + # subclass to implement other functionality. + + def makedir(self, tarinfo, targetpath): + """Make a directory called targetpath. + """ + try: + if tarinfo.mode is None: + # Use the system's default mode + os.mkdir(targetpath) + else: + # Use a safe mode for the directory, the real mode is set + # later in _extract_member(). + os.mkdir(targetpath, 0o700) + except FileExistsError: + if not os.path.isdir(targetpath): + raise + + def makefile(self, tarinfo, targetpath): + """Make a file called targetpath. + """ + source = self.fileobj + source.seek(tarinfo.offset_data) + bufsize = self.copybufsize + with bltn_open(targetpath, "wb") as target: + if tarinfo.sparse is not None: + for offset, size in tarinfo.sparse: + target.seek(offset) + copyfileobj(source, target, size, ReadError, bufsize) + target.seek(tarinfo.size) + target.truncate() + else: + copyfileobj(source, target, tarinfo.size, ReadError, bufsize) + + def makeunknown(self, tarinfo, targetpath): + """Make a file from a TarInfo object with an unknown type + at targetpath. + """ + self.makefile(tarinfo, targetpath) + self._dbg(1, "tarfile: Unknown file type %r, " \ + "extracted as regular file." % tarinfo.type) + + def makefifo(self, tarinfo, targetpath): + """Make a fifo called targetpath. + """ + if hasattr(os, "mkfifo"): + os.mkfifo(targetpath) + else: + raise ExtractError("fifo not supported by system") + + def makedev(self, tarinfo, targetpath): + """Make a character or block device called targetpath. + """ + if not hasattr(os, "mknod") or not hasattr(os, "makedev"): + raise ExtractError("special devices not supported by system") + + mode = tarinfo.mode + if mode is None: + # Use mknod's default + mode = 0o600 + if tarinfo.isblk(): + mode |= stat.S_IFBLK + else: + mode |= stat.S_IFCHR + + os.mknod(targetpath, mode, + os.makedev(tarinfo.devmajor, tarinfo.devminor)) + + def makelink(self, tarinfo, targetpath): + """Make a (symbolic) link called targetpath. If it cannot be created + (platform limitation), we try to make a copy of the referenced file + instead of a link. + """ + try: + # For systems that support symbolic and hard links. + if tarinfo.issym(): + if os.path.lexists(targetpath): + # Avoid FileExistsError on following os.symlink. + os.unlink(targetpath) + os.symlink(tarinfo.linkname, targetpath) + else: + if os.path.exists(tarinfo._link_target): + os.link(tarinfo._link_target, targetpath) + else: + self._extract_member(self._find_link_target(tarinfo), + targetpath) + except symlink_exception: + try: + self._extract_member(self._find_link_target(tarinfo), + targetpath) + except KeyError: + raise ExtractError("unable to resolve link inside archive") from None + + def chown(self, tarinfo, targetpath, numeric_owner): + """Set owner of targetpath according to tarinfo. If numeric_owner + is True, use .gid/.uid instead of .gname/.uname. If numeric_owner + is False, fall back to .gid/.uid when the search based on name + fails. + """ + if hasattr(os, "geteuid") and os.geteuid() == 0: + # We have to be root to do so. + g = tarinfo.gid + u = tarinfo.uid + if not numeric_owner: + try: + if grp and tarinfo.gname: + g = grp.getgrnam(tarinfo.gname)[2] + except KeyError: + pass + try: + if pwd and tarinfo.uname: + u = pwd.getpwnam(tarinfo.uname)[2] + except KeyError: + pass + if g is None: + g = -1 + if u is None: + u = -1 + try: + if tarinfo.issym() and hasattr(os, "lchown"): + os.lchown(targetpath, u, g) + else: + os.chown(targetpath, u, g) + except OSError as e: + raise ExtractError("could not change owner") from e + + def chmod(self, tarinfo, targetpath): + """Set file permissions of targetpath according to tarinfo. + """ + if tarinfo.mode is None: + return + try: + os.chmod(targetpath, tarinfo.mode) + except OSError as e: + raise ExtractError("could not change mode") from e + + def utime(self, tarinfo, targetpath): + """Set modification time of targetpath according to tarinfo. + """ + mtime = tarinfo.mtime + if mtime is None: + return + if not hasattr(os, 'utime'): + return + try: + os.utime(targetpath, (mtime, mtime)) + except OSError as e: + raise ExtractError("could not change modification time") from e + + #-------------------------------------------------------------------------- + def next(self): + """Return the next member of the archive as a TarInfo object, when + TarFile is opened for reading. Return None if there is no more + available. + """ + self._check("ra") + if self.firstmember is not None: + m = self.firstmember + self.firstmember = None + return m + + # Advance the file pointer. + if self.offset != self.fileobj.tell(): + if self.offset == 0: + return None + self.fileobj.seek(self.offset - 1) + if not self.fileobj.read(1): + raise ReadError("unexpected end of data") + + # Read the next block. + tarinfo = None + while True: + try: + tarinfo = self.tarinfo.fromtarfile(self) + except EOFHeaderError as e: + if self.ignore_zeros: + self._dbg(2, "0x%X: %s" % (self.offset, e)) + self.offset += BLOCKSIZE + continue + except InvalidHeaderError as e: + if self.ignore_zeros: + self._dbg(2, "0x%X: %s" % (self.offset, e)) + self.offset += BLOCKSIZE + continue + elif self.offset == 0: + raise ReadError(str(e)) from None + except EmptyHeaderError: + if self.offset == 0: + raise ReadError("empty file") from None + except TruncatedHeaderError as e: + if self.offset == 0: + raise ReadError(str(e)) from None + except SubsequentHeaderError as e: + raise ReadError(str(e)) from None + except Exception as e: + try: + import zlib + if isinstance(e, zlib.error): + raise ReadError(f'zlib error: {e}') from None + else: + raise e + except ImportError: + raise e + break + + if tarinfo is not None: + self.members.append(tarinfo) + else: + self._loaded = True + + return tarinfo + + #-------------------------------------------------------------------------- + # Little helper methods: + + def _getmember(self, name, tarinfo=None, normalize=False): + """Find an archive member by name from bottom to top. + If tarinfo is given, it is used as the starting point. + """ + # Ensure that all members have been loaded. + members = self.getmembers() + + # Limit the member search list up to tarinfo. + skipping = False + if tarinfo is not None: + try: + index = members.index(tarinfo) + except ValueError: + # The given starting point might be a (modified) copy. + # We'll later skip members until we find an equivalent. + skipping = True + else: + # Happy fast path + members = members[:index] + + if normalize: + name = os.path.normpath(name) + + for member in reversed(members): + if skipping: + if tarinfo.offset == member.offset: + skipping = False + continue + if normalize: + member_name = os.path.normpath(member.name) + else: + member_name = member.name + + if name == member_name: + return member + + if skipping: + # Starting point was not found + raise ValueError(tarinfo) + + def _load(self): + """Read through the entire archive file and look for readable + members. + """ + while self.next() is not None: + pass + self._loaded = True + + def _check(self, mode=None): + """Check if TarFile is still open, and if the operation's mode + corresponds to TarFile's mode. + """ + if self.closed: + raise OSError("%s is closed" % self.__class__.__name__) + if mode is not None and self.mode not in mode: + raise OSError("bad operation for mode %r" % self.mode) + + def _find_link_target(self, tarinfo): + """Find the target member of a symlink or hardlink member in the + archive. + """ + if tarinfo.issym(): + # Always search the entire archive. + linkname = "/".join(filter(None, (os.path.dirname(tarinfo.name), tarinfo.linkname))) + limit = None + else: + # Search the archive before the link, because a hard link is + # just a reference to an already archived file. + linkname = tarinfo.linkname + limit = tarinfo + + member = self._getmember(linkname, tarinfo=limit, normalize=True) + if member is None: + raise KeyError("linkname %r not found" % linkname) + return member + + def __iter__(self): + """Provide an iterator object. + """ + if self._loaded: + yield from self.members + return + + # Yield items using TarFile's next() method. + # When all members have been read, set TarFile as _loaded. + index = 0 + # Fix for SF #1100429: Under rare circumstances it can + # happen that getmembers() is called during iteration, + # which will have already exhausted the next() method. + if self.firstmember is not None: + tarinfo = self.next() + index += 1 + yield tarinfo + + while True: + if index < len(self.members): + tarinfo = self.members[index] + elif not self._loaded: + tarinfo = self.next() + if not tarinfo: + self._loaded = True + return + else: + return + index += 1 + yield tarinfo + + def _dbg(self, level, msg): + """Write debugging output to sys.stderr. + """ + if level <= self.debug: + print(msg, file=sys.stderr) + + def __enter__(self): + self._check() + return self + + def __exit__(self, type, value, traceback): + if type is None: + self.close() + else: + # An exception occurred. We must not call close() because + # it would try to write end-of-archive blocks and padding. + if not self._extfileobj: + self.fileobj.close() + self.closed = True + +#-------------------- +# exported functions +#-------------------- + +def is_tarfile(name): + """Return True if name points to a tar archive that we + are able to handle, else return False. + + 'name' should be a string, file, or file-like object. + """ + try: + if hasattr(name, "read"): + pos = name.tell() + t = open(fileobj=name) + name.seek(pos) + else: + t = open(name) + t.close() + return True + except TarError: + return False + +open = TarFile.open + + +def main(): + import argparse + + description = 'A simple command-line interface for tarfile module.' + parser = argparse.ArgumentParser(description=description) + parser.add_argument('-v', '--verbose', action='store_true', default=False, + help='Verbose output') + parser.add_argument('--filter', metavar='<filtername>', + choices=_NAMED_FILTERS, + help='Filter for extraction') + + group = parser.add_mutually_exclusive_group(required=True) + group.add_argument('-l', '--list', metavar='<tarfile>', + help='Show listing of a tarfile') + group.add_argument('-e', '--extract', nargs='+', + metavar=('<tarfile>', '<output_dir>'), + help='Extract tarfile into target dir') + group.add_argument('-c', '--create', nargs='+', + metavar=('<name>', '<file>'), + help='Create tarfile from sources') + group.add_argument('-t', '--test', metavar='<tarfile>', + help='Test if a tarfile is valid') + + args = parser.parse_args() + + if args.filter and args.extract is None: + parser.exit(1, '--filter is only valid for extraction\n') + + if args.test is not None: + src = args.test + if is_tarfile(src): + with open(src, 'r') as tar: + tar.getmembers() + print(tar.getmembers(), file=sys.stderr) + if args.verbose: + print('{!r} is a tar archive.'.format(src)) + else: + parser.exit(1, '{!r} is not a tar archive.\n'.format(src)) + + elif args.list is not None: + src = args.list + if is_tarfile(src): + with TarFile.open(src, 'r:*') as tf: + tf.list(verbose=args.verbose) + else: + parser.exit(1, '{!r} is not a tar archive.\n'.format(src)) + + elif args.extract is not None: + if len(args.extract) == 1: + src = args.extract[0] + curdir = os.curdir + elif len(args.extract) == 2: + src, curdir = args.extract + else: + parser.exit(1, parser.format_help()) + + if is_tarfile(src): + with TarFile.open(src, 'r:*') as tf: + tf.extractall(path=curdir, filter=args.filter) + if args.verbose: + if curdir == '.': + msg = '{!r} file is extracted.'.format(src) + else: + msg = ('{!r} file is extracted ' + 'into {!r} directory.').format(src, curdir) + print(msg) + else: + parser.exit(1, '{!r} is not a tar archive.\n'.format(src)) + + elif args.create is not None: + tar_name = args.create.pop(0) + _, ext = os.path.splitext(tar_name) + compressions = { + # gz + '.gz': 'gz', + '.tgz': 'gz', + # xz + '.xz': 'xz', + '.txz': 'xz', + # bz2 + '.bz2': 'bz2', + '.tbz': 'bz2', + '.tbz2': 'bz2', + '.tb2': 'bz2', + } + tar_mode = 'w:' + compressions[ext] if ext in compressions else 'w' + tar_files = args.create + + with TarFile.open(tar_name, tar_mode) as tf: + for file_name in tar_files: + tf.add(file_name) + + if args.verbose: + print('{!r} file created.'.format(tar_name)) + +if __name__ == '__main__': + main() diff --git a/contrib/python/setuptools/py3/setuptools/_vendor/jaraco/context.py b/contrib/python/setuptools/py3/setuptools/_vendor/jaraco/context.py index b0d1ef37cb..0322c45d4a 100644 --- a/contrib/python/setuptools/py3/setuptools/_vendor/jaraco/context.py +++ b/contrib/python/setuptools/py3/setuptools/_vendor/jaraco/context.py @@ -1,15 +1,26 @@ -import os -import subprocess +from __future__ import annotations + import contextlib import functools -import tempfile -import shutil import operator +import os +import shutil +import subprocess +import sys +import tempfile +import urllib.request import warnings +from typing import Iterator + + +if sys.version_info < (3, 12): + from setuptools.extern.backports import tarfile +else: + import tarfile @contextlib.contextmanager -def pushd(dir): +def pushd(dir: str | os.PathLike) -> Iterator[str | os.PathLike]: """ >>> tmp_path = getfixture('tmp_path') >>> with pushd(tmp_path): @@ -26,33 +37,88 @@ def pushd(dir): @contextlib.contextmanager -def tarball_context(url, target_dir=None, runner=None, pushd=pushd): +def tarball( + url, target_dir: str | os.PathLike | None = None +) -> Iterator[str | os.PathLike]: """ - Get a tarball, extract it, change to that directory, yield, then - clean up. - `runner` is the function to invoke commands. - `pushd` is a context manager for changing the directory. + Get a tarball, extract it, yield, then clean up. + + >>> import urllib.request + >>> url = getfixture('tarfile_served') + >>> target = getfixture('tmp_path') / 'out' + >>> tb = tarball(url, target_dir=target) + >>> import pathlib + >>> with tb as extracted: + ... contents = pathlib.Path(extracted, 'contents.txt').read_text(encoding='utf-8') + >>> assert not os.path.exists(extracted) """ if target_dir is None: target_dir = os.path.basename(url).replace('.tar.gz', '').replace('.tgz', '') - if runner is None: - runner = functools.partial(subprocess.check_call, shell=True) - else: - warnings.warn("runner parameter is deprecated", DeprecationWarning) # In the tar command, use --strip-components=1 to strip the first path and # then # use -C to cause the files to be extracted to {target_dir}. This ensures # that we always know where the files were extracted. - runner('mkdir {target_dir}'.format(**vars())) + os.mkdir(target_dir) try: - getter = 'wget {url} -O -' - extract = 'tar x{compression} --strip-components=1 -C {target_dir}' - cmd = ' | '.join((getter, extract)) - runner(cmd.format(compression=infer_compression(url), **vars())) - with pushd(target_dir): - yield target_dir + req = urllib.request.urlopen(url) + with tarfile.open(fileobj=req, mode='r|*') as tf: + tf.extractall(path=target_dir, filter=strip_first_component) + yield target_dir finally: - runner('rm -Rf {target_dir}'.format(**vars())) + shutil.rmtree(target_dir) + + +def strip_first_component( + member: tarfile.TarInfo, + path, +) -> tarfile.TarInfo: + _, member.name = member.name.split('/', 1) + return member + + +def _compose(*cmgrs): + """ + Compose any number of dependent context managers into a single one. + + The last, innermost context manager may take arbitrary arguments, but + each successive context manager should accept the result from the + previous as a single parameter. + + Like :func:`jaraco.functools.compose`, behavior works from right to + left, so the context manager should be indicated from outermost to + innermost. + + Example, to create a context manager to change to a temporary + directory: + + >>> temp_dir_as_cwd = _compose(pushd, temp_dir) + >>> with temp_dir_as_cwd() as dir: + ... assert os.path.samefile(os.getcwd(), dir) + """ + + def compose_two(inner, outer): + def composed(*args, **kwargs): + with inner(*args, **kwargs) as saved, outer(saved) as res: + yield res + + return contextlib.contextmanager(composed) + + return functools.reduce(compose_two, reversed(cmgrs)) + + +tarball_cwd = _compose(pushd, tarball) + + +@contextlib.contextmanager +def tarball_context(*args, **kwargs): + warnings.warn( + "tarball_context is deprecated. Use tarball or tarball_cwd instead.", + DeprecationWarning, + stacklevel=2, + ) + pushd_ctx = kwargs.pop('pushd', pushd) + with tarball(*args, **kwargs) as tball, pushd_ctx(tball) as dir: + yield dir def infer_compression(url): @@ -68,6 +134,11 @@ def infer_compression(url): >>> infer_compression('file.xz') 'J' """ + warnings.warn( + "infer_compression is deprecated with no replacement", + DeprecationWarning, + stacklevel=2, + ) # cheat and just assume it's the last two characters compression_indicator = url[-2:] mapping = dict(gz='z', bz='j', xz='J') @@ -84,7 +155,7 @@ def temp_dir(remover=shutil.rmtree): >>> import pathlib >>> with temp_dir() as the_dir: ... assert os.path.isdir(the_dir) - ... _ = pathlib.Path(the_dir).joinpath('somefile').write_text('contents') + ... _ = pathlib.Path(the_dir).joinpath('somefile').write_text('contents', encoding='utf-8') >>> assert not os.path.exists(the_dir) """ temp_dir = tempfile.mkdtemp() @@ -113,15 +184,23 @@ def repo_context(url, branch=None, quiet=True, dest_ctx=temp_dir): yield repo_dir -@contextlib.contextmanager def null(): """ A null context suitable to stand in for a meaningful context. >>> with null() as value: ... assert value is None + + This context is most useful when dealing with two or more code + branches but only some need a context. Wrap the others in a null + context to provide symmetry across all options. """ - yield + warnings.warn( + "null is deprecated. Use contextlib.nullcontext", + DeprecationWarning, + stacklevel=2, + ) + return contextlib.nullcontext() class ExceptionTrap: @@ -267,13 +346,7 @@ class on_interrupt(contextlib.ContextDecorator): ... on_interrupt('ignore')(do_interrupt)() """ - def __init__( - self, - action='error', - # py3.7 compat - # /, - code=1, - ): + def __init__(self, action='error', /, code=1): self.action = action self.code = code diff --git a/contrib/python/setuptools/py3/setuptools/_vendor/jaraco/functools.py b/contrib/python/setuptools/py3/setuptools/_vendor/jaraco/functools/__init__.py index ebf7a36137..130b87a485 100644 --- a/contrib/python/setuptools/py3/setuptools/_vendor/jaraco/functools.py +++ b/contrib/python/setuptools/py3/setuptools/_vendor/jaraco/functools/__init__.py @@ -1,18 +1,14 @@ +import collections.abc import functools -import time import inspect -import collections -import types import itertools +import operator +import time +import types import warnings import setuptools.extern.more_itertools -from typing import Callable, TypeVar - - -CallableT = TypeVar("CallableT", bound=Callable[..., object]) - def compose(*funcs): """ @@ -38,24 +34,6 @@ def compose(*funcs): return functools.reduce(compose_two, funcs) -def method_caller(method_name, *args, **kwargs): - """ - Return a function that will call a named method on the - target object with optional positional and keyword - arguments. - - >>> lower = method_caller('lower') - >>> lower('MyString') - 'mystring' - """ - - def call_method(target): - func = getattr(target, method_name) - return func(*args, **kwargs) - - return call_method - - def once(func): """ Decorate func so it's only ever called the first time. @@ -98,12 +76,7 @@ def once(func): return wrapper -def method_cache( - method: CallableT, - cache_wrapper: Callable[ - [CallableT], CallableT - ] = functools.lru_cache(), # type: ignore[assignment] -) -> CallableT: +def method_cache(method, cache_wrapper=functools.lru_cache()): """ Wrap lru_cache to support storing the cache data in the object instances. @@ -171,21 +144,17 @@ def method_cache( for another implementation and additional justification. """ - def wrapper(self: object, *args: object, **kwargs: object) -> object: + def wrapper(self, *args, **kwargs): # it's the first call, replace the method with a cached, bound method - bound_method: CallableT = types.MethodType( # type: ignore[assignment] - method, self - ) + bound_method = types.MethodType(method, self) cached_method = cache_wrapper(bound_method) setattr(self, method.__name__, cached_method) return cached_method(*args, **kwargs) # Support cache clear even before cache has been created. - wrapper.cache_clear = lambda: None # type: ignore[attr-defined] + wrapper.cache_clear = lambda: None - return ( # type: ignore[return-value] - _special_method_cache(method, cache_wrapper) or wrapper - ) + return _special_method_cache(method, cache_wrapper) or wrapper def _special_method_cache(method, cache_wrapper): @@ -201,12 +170,13 @@ def _special_method_cache(method, cache_wrapper): """ name = method.__name__ special_names = '__getattr__', '__getitem__' + if name not in special_names: - return + return None wrapper_name = '__cached' + name - def proxy(self, *args, **kwargs): + def proxy(self, /, *args, **kwargs): if wrapper_name not in vars(self): bound = types.MethodType(method, self) cache = cache_wrapper(bound) @@ -243,7 +213,7 @@ def result_invoke(action): r""" Decorate a function with an action function that is invoked on the results returned from the decorated - function (for its side-effect), then return the original + function (for its side effect), then return the original result. >>> @result_invoke(print) @@ -267,7 +237,7 @@ def result_invoke(action): return wrap -def invoke(f, *args, **kwargs): +def invoke(f, /, *args, **kwargs): """ Call a function for its side effect after initialization. @@ -302,25 +272,15 @@ def invoke(f, *args, **kwargs): Use functools.partial to pass parameters to the initial call >>> @functools.partial(invoke, name='bingo') - ... def func(name): print("called with", name) + ... def func(name): print('called with', name) called with bingo """ f(*args, **kwargs) return f -def call_aside(*args, **kwargs): - """ - Deprecated name for invoke. - """ - warnings.warn("call_aside is deprecated, use invoke", DeprecationWarning) - return invoke(*args, **kwargs) - - class Throttler: - """ - Rate-limit a function (or other callable) - """ + """Rate-limit a function (or other callable).""" def __init__(self, func, max_rate=float('Inf')): if isinstance(func, Throttler): @@ -337,20 +297,20 @@ class Throttler: return self.func(*args, **kwargs) def _wait(self): - "ensure at least 1/max_rate seconds from last call" + """Ensure at least 1/max_rate seconds from last call.""" elapsed = time.time() - self.last_called must_wait = 1 / self.max_rate - elapsed time.sleep(max(0, must_wait)) self.last_called = time.time() - def __get__(self, obj, type=None): + def __get__(self, obj, owner=None): return first_invoke(self._wait, functools.partial(self.func, obj)) def first_invoke(func1, func2): """ Return a function that when invoked will invoke func1 without - any parameters (for its side-effect) and then invoke func2 + any parameters (for its side effect) and then invoke func2 with whatever parameters were passed, returning its result. """ @@ -361,6 +321,17 @@ def first_invoke(func1, func2): return wrapper +method_caller = first_invoke( + lambda: warnings.warn( + '`jaraco.functools.method_caller` is deprecated, ' + 'use `operator.methodcaller` instead', + DeprecationWarning, + stacklevel=3, + ), + operator.methodcaller, +) + + def retry_call(func, cleanup=lambda: None, retries=0, trap=()): """ Given a callable func, trap the indicated exceptions @@ -369,7 +340,7 @@ def retry_call(func, cleanup=lambda: None, retries=0, trap=()): to propagate. """ attempts = itertools.count() if retries == float('inf') else range(retries) - for attempt in attempts: + for _ in attempts: try: return func() except trap: @@ -406,7 +377,7 @@ def retry(*r_args, **r_kwargs): def print_yielded(func): """ - Convert a generator into a function that prints all yielded elements + Convert a generator into a function that prints all yielded elements. >>> @print_yielded ... def x(): @@ -422,7 +393,7 @@ def print_yielded(func): def pass_none(func): """ - Wrap func so it's not called if its first param is None + Wrap func so it's not called if its first param is None. >>> print_text = pass_none(print) >>> print_text('text') @@ -431,9 +402,10 @@ def pass_none(func): """ @functools.wraps(func) - def wrapper(param, *args, **kwargs): + def wrapper(param, /, *args, **kwargs): if param is not None: return func(param, *args, **kwargs) + return None return wrapper @@ -507,7 +479,7 @@ def save_method_args(method): args_and_kwargs = collections.namedtuple('args_and_kwargs', 'args kwargs') @functools.wraps(method) - def wrapper(self, *args, **kwargs): + def wrapper(self, /, *args, **kwargs): attr_name = '_saved_' + method.__name__ attr = args_and_kwargs(args, kwargs) setattr(self, attr_name, attr) @@ -554,3 +526,108 @@ def except_(*exceptions, replace=None, use=None): return wrapper return decorate + + +def identity(x): + """ + Return the argument. + + >>> o = object() + >>> identity(o) is o + True + """ + return x + + +def bypass_when(check, *, _op=identity): + """ + Decorate a function to return its parameter when ``check``. + + >>> bypassed = [] # False + + >>> @bypass_when(bypassed) + ... def double(x): + ... return x * 2 + >>> double(2) + 4 + >>> bypassed[:] = [object()] # True + >>> double(2) + 2 + """ + + def decorate(func): + @functools.wraps(func) + def wrapper(param, /): + return param if _op(check) else func(param) + + return wrapper + + return decorate + + +def bypass_unless(check): + """ + Decorate a function to return its parameter unless ``check``. + + >>> enabled = [object()] # True + + >>> @bypass_unless(enabled) + ... def double(x): + ... return x * 2 + >>> double(2) + 4 + >>> del enabled[:] # False + >>> double(2) + 2 + """ + return bypass_when(check, _op=operator.not_) + + +@functools.singledispatch +def _splat_inner(args, func): + """Splat args to func.""" + return func(*args) + + +@_splat_inner.register +def _(args: collections.abc.Mapping, func): + """Splat kargs to func as kwargs.""" + return func(**args) + + +def splat(func): + """ + Wrap func to expect its parameters to be passed positionally in a tuple. + + Has a similar effect to that of ``itertools.starmap`` over + simple ``map``. + + >>> pairs = [(-1, 1), (0, 2)] + >>> setuptools.extern.more_itertools.consume(itertools.starmap(print, pairs)) + -1 1 + 0 2 + >>> setuptools.extern.more_itertools.consume(map(splat(print), pairs)) + -1 1 + 0 2 + + The approach generalizes to other iterators that don't have a "star" + equivalent, such as a "starfilter". + + >>> list(filter(splat(operator.add), pairs)) + [(0, 2)] + + Splat also accepts a mapping argument. + + >>> def is_nice(msg, code): + ... return "smile" in msg or code == 0 + >>> msgs = [ + ... dict(msg='smile!', code=20), + ... dict(msg='error :(', code=1), + ... dict(msg='unknown', code=0), + ... ] + >>> for msg in filter(splat(is_nice), msgs): + ... print(msg) + {'msg': 'smile!', 'code': 20} + {'msg': 'unknown', 'code': 0} + """ + return functools.wraps(func)(functools.partial(_splat_inner, func=func)) diff --git a/contrib/python/setuptools/py3/setuptools/_vendor/jaraco/functools/__init__.pyi b/contrib/python/setuptools/py3/setuptools/_vendor/jaraco/functools/__init__.pyi new file mode 100644 index 0000000000..c2b9ab1757 --- /dev/null +++ b/contrib/python/setuptools/py3/setuptools/_vendor/jaraco/functools/__init__.pyi @@ -0,0 +1,128 @@ +from collections.abc import Callable, Hashable, Iterator +from functools import partial +from operator import methodcaller +import sys +from typing import ( + Any, + Generic, + Protocol, + TypeVar, + overload, +) + +if sys.version_info >= (3, 10): + from typing import Concatenate, ParamSpec +else: + from typing_extensions import Concatenate, ParamSpec + +_P = ParamSpec('_P') +_R = TypeVar('_R') +_T = TypeVar('_T') +_R1 = TypeVar('_R1') +_R2 = TypeVar('_R2') +_V = TypeVar('_V') +_S = TypeVar('_S') +_R_co = TypeVar('_R_co', covariant=True) + +class _OnceCallable(Protocol[_P, _R]): + saved_result: _R + reset: Callable[[], None] + def __call__(self, *args: _P.args, **kwargs: _P.kwargs) -> _R: ... + +class _ProxyMethodCacheWrapper(Protocol[_R_co]): + cache_clear: Callable[[], None] + def __call__(self, *args: Hashable, **kwargs: Hashable) -> _R_co: ... + +class _MethodCacheWrapper(Protocol[_R_co]): + def cache_clear(self) -> None: ... + def __call__(self, *args: Hashable, **kwargs: Hashable) -> _R_co: ... + +# `compose()` overloads below will cover most use cases. + +@overload +def compose( + __func1: Callable[[_R], _T], + __func2: Callable[_P, _R], + /, +) -> Callable[_P, _T]: ... +@overload +def compose( + __func1: Callable[[_R], _T], + __func2: Callable[[_R1], _R], + __func3: Callable[_P, _R1], + /, +) -> Callable[_P, _T]: ... +@overload +def compose( + __func1: Callable[[_R], _T], + __func2: Callable[[_R2], _R], + __func3: Callable[[_R1], _R2], + __func4: Callable[_P, _R1], + /, +) -> Callable[_P, _T]: ... +def once(func: Callable[_P, _R]) -> _OnceCallable[_P, _R]: ... +def method_cache( + method: Callable[..., _R], + cache_wrapper: Callable[[Callable[..., _R]], _MethodCacheWrapper[_R]] = ..., +) -> _MethodCacheWrapper[_R] | _ProxyMethodCacheWrapper[_R]: ... +def apply( + transform: Callable[[_R], _T] +) -> Callable[[Callable[_P, _R]], Callable[_P, _T]]: ... +def result_invoke( + action: Callable[[_R], Any] +) -> Callable[[Callable[_P, _R]], Callable[_P, _R]]: ... +def invoke( + f: Callable[_P, _R], /, *args: _P.args, **kwargs: _P.kwargs +) -> Callable[_P, _R]: ... +def call_aside( + f: Callable[_P, _R], *args: _P.args, **kwargs: _P.kwargs +) -> Callable[_P, _R]: ... + +class Throttler(Generic[_R]): + last_called: float + func: Callable[..., _R] + max_rate: float + def __init__( + self, func: Callable[..., _R] | Throttler[_R], max_rate: float = ... + ) -> None: ... + def reset(self) -> None: ... + def __call__(self, *args: Any, **kwargs: Any) -> _R: ... + def __get__(self, obj: Any, owner: type[Any] | None = ...) -> Callable[..., _R]: ... + +def first_invoke( + func1: Callable[..., Any], func2: Callable[_P, _R] +) -> Callable[_P, _R]: ... + +method_caller: Callable[..., methodcaller] + +def retry_call( + func: Callable[..., _R], + cleanup: Callable[..., None] = ..., + retries: int | float = ..., + trap: type[BaseException] | tuple[type[BaseException], ...] = ..., +) -> _R: ... +def retry( + cleanup: Callable[..., None] = ..., + retries: int | float = ..., + trap: type[BaseException] | tuple[type[BaseException], ...] = ..., +) -> Callable[[Callable[..., _R]], Callable[..., _R]]: ... +def print_yielded(func: Callable[_P, Iterator[Any]]) -> Callable[_P, None]: ... +def pass_none( + func: Callable[Concatenate[_T, _P], _R] +) -> Callable[Concatenate[_T, _P], _R]: ... +def assign_params( + func: Callable[..., _R], namespace: dict[str, Any] +) -> partial[_R]: ... +def save_method_args( + method: Callable[Concatenate[_S, _P], _R] +) -> Callable[Concatenate[_S, _P], _R]: ... +def except_( + *exceptions: type[BaseException], replace: Any = ..., use: Any = ... +) -> Callable[[Callable[_P, Any]], Callable[_P, Any]]: ... +def identity(x: _T) -> _T: ... +def bypass_when( + check: _V, *, _op: Callable[[_V], Any] = ... +) -> Callable[[Callable[[_T], _R]], Callable[[_T], _T | _R]]: ... +def bypass_unless( + check: Any, +) -> Callable[[Callable[[_T], _R]], Callable[[_T], _T | _R]]: ... diff --git a/contrib/python/setuptools/py3/setuptools/_vendor/jaraco/functools/py.typed b/contrib/python/setuptools/py3/setuptools/_vendor/jaraco/functools/py.typed new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/contrib/python/setuptools/py3/setuptools/_vendor/jaraco/functools/py.typed diff --git a/contrib/python/setuptools/py3/setuptools/_vendor/packaging/__init__.py b/contrib/python/setuptools/py3/setuptools/_vendor/packaging/__init__.py index 13cadc7f04..e7c0aa12ca 100644 --- a/contrib/python/setuptools/py3/setuptools/_vendor/packaging/__init__.py +++ b/contrib/python/setuptools/py3/setuptools/_vendor/packaging/__init__.py @@ -6,10 +6,10 @@ __title__ = "packaging" __summary__ = "Core utilities for Python packages" __uri__ = "https://github.com/pypa/packaging" -__version__ = "23.1" +__version__ = "24.0" __author__ = "Donald Stufft and individual contributors" __email__ = "donald@stufft.io" __license__ = "BSD-2-Clause or Apache-2.0" -__copyright__ = "2014-2019 %s" % __author__ +__copyright__ = "2014 %s" % __author__ diff --git a/contrib/python/setuptools/py3/setuptools/_vendor/packaging/_manylinux.py b/contrib/python/setuptools/py3/setuptools/_vendor/packaging/_manylinux.py index 449c655be6..ad62505f3f 100644 --- a/contrib/python/setuptools/py3/setuptools/_vendor/packaging/_manylinux.py +++ b/contrib/python/setuptools/py3/setuptools/_vendor/packaging/_manylinux.py @@ -5,7 +5,7 @@ import os import re import sys import warnings -from typing import Dict, Generator, Iterator, NamedTuple, Optional, Tuple +from typing import Dict, Generator, Iterator, NamedTuple, Optional, Sequence, Tuple from ._elffile import EIClass, EIData, ELFFile, EMachine @@ -50,12 +50,21 @@ def _is_linux_i686(executable: str) -> bool: ) -def _have_compatible_abi(executable: str, arch: str) -> bool: - if arch == "armv7l": +def _have_compatible_abi(executable: str, archs: Sequence[str]) -> bool: + if "armv7l" in archs: return _is_linux_armhf(executable) - if arch == "i686": + if "i686" in archs: return _is_linux_i686(executable) - return arch in {"x86_64", "aarch64", "ppc64", "ppc64le", "s390x"} + allowed_archs = { + "x86_64", + "aarch64", + "ppc64", + "ppc64le", + "s390x", + "loongarch64", + "riscv64", + } + return any(arch in allowed_archs for arch in archs) # If glibc ever changes its major version, we need to know what the last @@ -81,7 +90,7 @@ def _glibc_version_string_confstr() -> Optional[str]: # https://github.com/python/cpython/blob/fcf1d003bf4f0100c/Lib/platform.py#L175-L183 try: # Should be a string like "glibc 2.17". - version_string: str = getattr(os, "confstr")("CS_GNU_LIBC_VERSION") + version_string: Optional[str] = os.confstr("CS_GNU_LIBC_VERSION") assert version_string is not None _, version = version_string.rsplit() except (AssertionError, AttributeError, OSError, ValueError): @@ -167,13 +176,13 @@ def _get_glibc_version() -> Tuple[int, int]: # From PEP 513, PEP 600 -def _is_compatible(name: str, arch: str, version: _GLibCVersion) -> bool: +def _is_compatible(arch: str, version: _GLibCVersion) -> bool: sys_glibc = _get_glibc_version() if sys_glibc < version: return False # Check for presence of _manylinux module. try: - import _manylinux # noqa + import _manylinux except ImportError: return True if hasattr(_manylinux, "manylinux_compatible"): @@ -203,12 +212,22 @@ _LEGACY_MANYLINUX_MAP = { } -def platform_tags(linux: str, arch: str) -> Iterator[str]: - if not _have_compatible_abi(sys.executable, arch): +def platform_tags(archs: Sequence[str]) -> Iterator[str]: + """Generate manylinux tags compatible to the current platform. + + :param archs: Sequence of compatible architectures. + The first one shall be the closest to the actual architecture and be the part of + platform tag after the ``linux_`` prefix, e.g. ``x86_64``. + The ``linux_`` prefix is assumed as a prerequisite for the current platform to + be manylinux-compatible. + + :returns: An iterator of compatible manylinux tags. + """ + if not _have_compatible_abi(sys.executable, archs): return # Oldest glibc to be supported regardless of architecture is (2, 17). too_old_glibc2 = _GLibCVersion(2, 16) - if arch in {"x86_64", "i686"}: + if set(archs) & {"x86_64", "i686"}: # On x86/i686 also oldest glibc to be supported is (2, 5). too_old_glibc2 = _GLibCVersion(2, 4) current_glibc = _GLibCVersion(*_get_glibc_version()) @@ -222,19 +241,20 @@ def platform_tags(linux: str, arch: str) -> Iterator[str]: for glibc_major in range(current_glibc.major - 1, 1, -1): glibc_minor = _LAST_GLIBC_MINOR[glibc_major] glibc_max_list.append(_GLibCVersion(glibc_major, glibc_minor)) - for glibc_max in glibc_max_list: - if glibc_max.major == too_old_glibc2.major: - min_minor = too_old_glibc2.minor - else: - # For other glibc major versions oldest supported is (x, 0). - min_minor = -1 - for glibc_minor in range(glibc_max.minor, min_minor, -1): - glibc_version = _GLibCVersion(glibc_max.major, glibc_minor) - tag = "manylinux_{}_{}".format(*glibc_version) - if _is_compatible(tag, arch, glibc_version): - yield linux.replace("linux", tag) - # Handle the legacy manylinux1, manylinux2010, manylinux2014 tags. - if glibc_version in _LEGACY_MANYLINUX_MAP: - legacy_tag = _LEGACY_MANYLINUX_MAP[glibc_version] - if _is_compatible(legacy_tag, arch, glibc_version): - yield linux.replace("linux", legacy_tag) + for arch in archs: + for glibc_max in glibc_max_list: + if glibc_max.major == too_old_glibc2.major: + min_minor = too_old_glibc2.minor + else: + # For other glibc major versions oldest supported is (x, 0). + min_minor = -1 + for glibc_minor in range(glibc_max.minor, min_minor, -1): + glibc_version = _GLibCVersion(glibc_max.major, glibc_minor) + tag = "manylinux_{}_{}".format(*glibc_version) + if _is_compatible(arch, glibc_version): + yield f"{tag}_{arch}" + # Handle the legacy manylinux1, manylinux2010, manylinux2014 tags. + if glibc_version in _LEGACY_MANYLINUX_MAP: + legacy_tag = _LEGACY_MANYLINUX_MAP[glibc_version] + if _is_compatible(arch, glibc_version): + yield f"{legacy_tag}_{arch}" diff --git a/contrib/python/setuptools/py3/setuptools/_vendor/packaging/_musllinux.py b/contrib/python/setuptools/py3/setuptools/_vendor/packaging/_musllinux.py index 706ba600a9..86419df9d7 100644 --- a/contrib/python/setuptools/py3/setuptools/_vendor/packaging/_musllinux.py +++ b/contrib/python/setuptools/py3/setuptools/_vendor/packaging/_musllinux.py @@ -8,7 +8,7 @@ import functools import re import subprocess import sys -from typing import Iterator, NamedTuple, Optional +from typing import Iterator, NamedTuple, Optional, Sequence from ._elffile import ELFFile @@ -47,24 +47,27 @@ def _get_musl_version(executable: str) -> Optional[_MuslVersion]: return None if ld is None or "musl" not in ld: return None - proc = subprocess.run([ld], stderr=subprocess.PIPE, universal_newlines=True) + proc = subprocess.run([ld], stderr=subprocess.PIPE, text=True) return _parse_musl_version(proc.stderr) -def platform_tags(arch: str) -> Iterator[str]: +def platform_tags(archs: Sequence[str]) -> Iterator[str]: """Generate musllinux tags compatible to the current platform. - :param arch: Should be the part of platform tag after the ``linux_`` - prefix, e.g. ``x86_64``. The ``linux_`` prefix is assumed as a - prerequisite for the current platform to be musllinux-compatible. + :param archs: Sequence of compatible architectures. + The first one shall be the closest to the actual architecture and be the part of + platform tag after the ``linux_`` prefix, e.g. ``x86_64``. + The ``linux_`` prefix is assumed as a prerequisite for the current platform to + be musllinux-compatible. :returns: An iterator of compatible musllinux tags. """ sys_musl = _get_musl_version(sys.executable) if sys_musl is None: # Python not dynamically linked against musl. return - for minor in range(sys_musl.minor, -1, -1): - yield f"musllinux_{sys_musl.major}_{minor}_{arch}" + for arch in archs: + for minor in range(sys_musl.minor, -1, -1): + yield f"musllinux_{sys_musl.major}_{minor}_{arch}" if __name__ == "__main__": # pragma: no cover diff --git a/contrib/python/setuptools/py3/setuptools/_vendor/packaging/_parser.py b/contrib/python/setuptools/py3/setuptools/_vendor/packaging/_parser.py index 5a18b758fe..684df75457 100644 --- a/contrib/python/setuptools/py3/setuptools/_vendor/packaging/_parser.py +++ b/contrib/python/setuptools/py3/setuptools/_vendor/packaging/_parser.py @@ -252,7 +252,13 @@ def _parse_version_many(tokenizer: Tokenizer) -> str: # Recursive descent parser for marker expression # -------------------------------------------------------------------------------------- def parse_marker(source: str) -> MarkerList: - return _parse_marker(Tokenizer(source, rules=DEFAULT_RULES)) + return _parse_full_marker(Tokenizer(source, rules=DEFAULT_RULES)) + + +def _parse_full_marker(tokenizer: Tokenizer) -> MarkerList: + retval = _parse_marker(tokenizer) + tokenizer.expect("END", expected="end of marker expression") + return retval def _parse_marker(tokenizer: Tokenizer) -> MarkerList: @@ -318,10 +324,7 @@ def _parse_marker_var(tokenizer: Tokenizer) -> MarkerVar: def process_env_var(env_var: str) -> Variable: - if ( - env_var == "platform_python_implementation" - or env_var == "python_implementation" - ): + if env_var in ("platform_python_implementation", "python_implementation"): return Variable("platform_python_implementation") else: return Variable(env_var) diff --git a/contrib/python/setuptools/py3/setuptools/_vendor/packaging/metadata.py b/contrib/python/setuptools/py3/setuptools/_vendor/packaging/metadata.py index e76a60c395..fb27493079 100644 --- a/contrib/python/setuptools/py3/setuptools/_vendor/packaging/metadata.py +++ b/contrib/python/setuptools/py3/setuptools/_vendor/packaging/metadata.py @@ -5,23 +5,77 @@ import email.parser import email.policy import sys import typing -from typing import Dict, List, Optional, Tuple, Union, cast - -if sys.version_info >= (3, 8): # pragma: no cover - from typing import TypedDict +from typing import ( + Any, + Callable, + Dict, + Generic, + List, + Optional, + Tuple, + Type, + Union, + cast, +) + +from . import requirements, specifiers, utils, version as version_module + +T = typing.TypeVar("T") +if sys.version_info[:2] >= (3, 8): # pragma: no cover + from typing import Literal, TypedDict else: # pragma: no cover if typing.TYPE_CHECKING: - from typing_extensions import TypedDict + from typing_extensions import Literal, TypedDict else: try: - from typing_extensions import TypedDict + from typing_extensions import Literal, TypedDict except ImportError: + class Literal: + def __init_subclass__(*_args, **_kwargs): + pass + class TypedDict: def __init_subclass__(*_args, **_kwargs): pass +try: + ExceptionGroup +except NameError: # pragma: no cover + + class ExceptionGroup(Exception): # noqa: N818 + """A minimal implementation of :external:exc:`ExceptionGroup` from Python 3.11. + + If :external:exc:`ExceptionGroup` is already defined by Python itself, + that version is used instead. + """ + + message: str + exceptions: List[Exception] + + def __init__(self, message: str, exceptions: List[Exception]) -> None: + self.message = message + self.exceptions = exceptions + + def __repr__(self) -> str: + return f"{self.__class__.__name__}({self.message!r}, {self.exceptions!r})" + +else: # pragma: no cover + ExceptionGroup = ExceptionGroup + + +class InvalidMetadata(ValueError): + """A metadata field contains invalid data.""" + + field: str + """The name of the field that contains invalid data.""" + + def __init__(self, field: str, message: str) -> None: + self.field = field + super().__init__(message) + + # The RawMetadata class attempts to make as few assumptions about the underlying # serialization formats as possible. The idea is that as long as a serialization # formats offer some very basic primitives in *some* way then we can support @@ -33,7 +87,8 @@ class RawMetadata(TypedDict, total=False): provided). The key is lower-case and underscores are used instead of dashes compared to the equivalent core metadata field. Any core metadata field that can be specified multiple times or can hold multiple values in a single - field have a key with a plural name. + field have a key with a plural name. See :class:`Metadata` whose attributes + match the keys of this dictionary. Core metadata fields that can be specified multiple times are stored as a list or dict depending on which is appropriate for the field. Any fields @@ -77,7 +132,7 @@ class RawMetadata(TypedDict, total=False): # but got stuck without ever being able to build consensus on # it and ultimately ended up withdrawn. # - # However, a number of tools had started emiting METADATA with + # However, a number of tools had started emitting METADATA with # `2.0` Metadata-Version, so for historical reasons, this version # was skipped. @@ -110,7 +165,7 @@ _STRING_FIELDS = { "version", } -_LIST_STRING_FIELDS = { +_LIST_FIELDS = { "classifiers", "dynamic", "obsoletes", @@ -125,6 +180,10 @@ _LIST_STRING_FIELDS = { "supported_platforms", } +_DICT_FIELDS = { + "project_urls", +} + def _parse_keywords(data: str) -> List[str]: """Split a string of comma-separate keyboards into a list of keywords.""" @@ -230,10 +289,11 @@ _EMAIL_TO_RAW_MAPPING = { "supported-platform": "supported_platforms", "version": "version", } +_RAW_TO_EMAIL_MAPPING = {raw: email for email, raw in _EMAIL_TO_RAW_MAPPING.items()} def parse_email(data: Union[bytes, str]) -> Tuple[RawMetadata, Dict[str, List[str]]]: - """Parse a distribution's metadata. + """Parse a distribution's metadata stored as email headers (e.g. from ``METADATA``). This function returns a two-item tuple of dicts. The first dict is of recognized fields from the core metadata specification. Fields that can be @@ -267,7 +327,7 @@ def parse_email(data: Union[bytes, str]) -> Tuple[RawMetadata, Dict[str, List[st # We use get_all() here, even for fields that aren't multiple use, # because otherwise someone could have e.g. two Name fields, and we # would just silently ignore it rather than doing something about it. - headers = parsed.get_all(name) + headers = parsed.get_all(name) or [] # The way the email module works when parsing bytes is that it # unconditionally decodes the bytes as ascii using the surrogateescape @@ -349,7 +409,7 @@ def parse_email(data: Union[bytes, str]) -> Tuple[RawMetadata, Dict[str, List[st # If this is one of our list of string fields, then we can just assign # the value, since email *only* has strings, and our get_all() call # above ensures that this is a list. - elif raw_name in _LIST_STRING_FIELDS: + elif raw_name in _LIST_FIELDS: raw[raw_name] = value # Special Case: Keywords # The keywords field is implemented in the metadata spec as a str, @@ -406,3 +466,360 @@ def parse_email(data: Union[bytes, str]) -> Tuple[RawMetadata, Dict[str, List[st # way this function is implemented, our `TypedDict` can only have valid key # names. return cast(RawMetadata, raw), unparsed + + +_NOT_FOUND = object() + + +# Keep the two values in sync. +_VALID_METADATA_VERSIONS = ["1.0", "1.1", "1.2", "2.1", "2.2", "2.3"] +_MetadataVersion = Literal["1.0", "1.1", "1.2", "2.1", "2.2", "2.3"] + +_REQUIRED_ATTRS = frozenset(["metadata_version", "name", "version"]) + + +class _Validator(Generic[T]): + """Validate a metadata field. + + All _process_*() methods correspond to a core metadata field. The method is + called with the field's raw value. If the raw value is valid it is returned + in its "enriched" form (e.g. ``version.Version`` for the ``Version`` field). + If the raw value is invalid, :exc:`InvalidMetadata` is raised (with a cause + as appropriate). + """ + + name: str + raw_name: str + added: _MetadataVersion + + def __init__( + self, + *, + added: _MetadataVersion = "1.0", + ) -> None: + self.added = added + + def __set_name__(self, _owner: "Metadata", name: str) -> None: + self.name = name + self.raw_name = _RAW_TO_EMAIL_MAPPING[name] + + def __get__(self, instance: "Metadata", _owner: Type["Metadata"]) -> T: + # With Python 3.8, the caching can be replaced with functools.cached_property(). + # No need to check the cache as attribute lookup will resolve into the + # instance's __dict__ before __get__ is called. + cache = instance.__dict__ + value = instance._raw.get(self.name) + + # To make the _process_* methods easier, we'll check if the value is None + # and if this field is NOT a required attribute, and if both of those + # things are true, we'll skip the the converter. This will mean that the + # converters never have to deal with the None union. + if self.name in _REQUIRED_ATTRS or value is not None: + try: + converter: Callable[[Any], T] = getattr(self, f"_process_{self.name}") + except AttributeError: + pass + else: + value = converter(value) + + cache[self.name] = value + try: + del instance._raw[self.name] # type: ignore[misc] + except KeyError: + pass + + return cast(T, value) + + def _invalid_metadata( + self, msg: str, cause: Optional[Exception] = None + ) -> InvalidMetadata: + exc = InvalidMetadata( + self.raw_name, msg.format_map({"field": repr(self.raw_name)}) + ) + exc.__cause__ = cause + return exc + + def _process_metadata_version(self, value: str) -> _MetadataVersion: + # Implicitly makes Metadata-Version required. + if value not in _VALID_METADATA_VERSIONS: + raise self._invalid_metadata(f"{value!r} is not a valid metadata version") + return cast(_MetadataVersion, value) + + def _process_name(self, value: str) -> str: + if not value: + raise self._invalid_metadata("{field} is a required field") + # Validate the name as a side-effect. + try: + utils.canonicalize_name(value, validate=True) + except utils.InvalidName as exc: + raise self._invalid_metadata( + f"{value!r} is invalid for {{field}}", cause=exc + ) + else: + return value + + def _process_version(self, value: str) -> version_module.Version: + if not value: + raise self._invalid_metadata("{field} is a required field") + try: + return version_module.parse(value) + except version_module.InvalidVersion as exc: + raise self._invalid_metadata( + f"{value!r} is invalid for {{field}}", cause=exc + ) + + def _process_summary(self, value: str) -> str: + """Check the field contains no newlines.""" + if "\n" in value: + raise self._invalid_metadata("{field} must be a single line") + return value + + def _process_description_content_type(self, value: str) -> str: + content_types = {"text/plain", "text/x-rst", "text/markdown"} + message = email.message.EmailMessage() + message["content-type"] = value + + content_type, parameters = ( + # Defaults to `text/plain` if parsing failed. + message.get_content_type().lower(), + message["content-type"].params, + ) + # Check if content-type is valid or defaulted to `text/plain` and thus was + # not parseable. + if content_type not in content_types or content_type not in value.lower(): + raise self._invalid_metadata( + f"{{field}} must be one of {list(content_types)}, not {value!r}" + ) + + charset = parameters.get("charset", "UTF-8") + if charset != "UTF-8": + raise self._invalid_metadata( + f"{{field}} can only specify the UTF-8 charset, not {list(charset)}" + ) + + markdown_variants = {"GFM", "CommonMark"} + variant = parameters.get("variant", "GFM") # Use an acceptable default. + if content_type == "text/markdown" and variant not in markdown_variants: + raise self._invalid_metadata( + f"valid Markdown variants for {{field}} are {list(markdown_variants)}, " + f"not {variant!r}", + ) + return value + + def _process_dynamic(self, value: List[str]) -> List[str]: + for dynamic_field in map(str.lower, value): + if dynamic_field in {"name", "version", "metadata-version"}: + raise self._invalid_metadata( + f"{value!r} is not allowed as a dynamic field" + ) + elif dynamic_field not in _EMAIL_TO_RAW_MAPPING: + raise self._invalid_metadata(f"{value!r} is not a valid dynamic field") + return list(map(str.lower, value)) + + def _process_provides_extra( + self, + value: List[str], + ) -> List[utils.NormalizedName]: + normalized_names = [] + try: + for name in value: + normalized_names.append(utils.canonicalize_name(name, validate=True)) + except utils.InvalidName as exc: + raise self._invalid_metadata( + f"{name!r} is invalid for {{field}}", cause=exc + ) + else: + return normalized_names + + def _process_requires_python(self, value: str) -> specifiers.SpecifierSet: + try: + return specifiers.SpecifierSet(value) + except specifiers.InvalidSpecifier as exc: + raise self._invalid_metadata( + f"{value!r} is invalid for {{field}}", cause=exc + ) + + def _process_requires_dist( + self, + value: List[str], + ) -> List[requirements.Requirement]: + reqs = [] + try: + for req in value: + reqs.append(requirements.Requirement(req)) + except requirements.InvalidRequirement as exc: + raise self._invalid_metadata(f"{req!r} is invalid for {{field}}", cause=exc) + else: + return reqs + + +class Metadata: + """Representation of distribution metadata. + + Compared to :class:`RawMetadata`, this class provides objects representing + metadata fields instead of only using built-in types. Any invalid metadata + will cause :exc:`InvalidMetadata` to be raised (with a + :py:attr:`~BaseException.__cause__` attribute as appropriate). + """ + + _raw: RawMetadata + + @classmethod + def from_raw(cls, data: RawMetadata, *, validate: bool = True) -> "Metadata": + """Create an instance from :class:`RawMetadata`. + + If *validate* is true, all metadata will be validated. All exceptions + related to validation will be gathered and raised as an :class:`ExceptionGroup`. + """ + ins = cls() + ins._raw = data.copy() # Mutations occur due to caching enriched values. + + if validate: + exceptions: List[Exception] = [] + try: + metadata_version = ins.metadata_version + metadata_age = _VALID_METADATA_VERSIONS.index(metadata_version) + except InvalidMetadata as metadata_version_exc: + exceptions.append(metadata_version_exc) + metadata_version = None + + # Make sure to check for the fields that are present, the required + # fields (so their absence can be reported). + fields_to_check = frozenset(ins._raw) | _REQUIRED_ATTRS + # Remove fields that have already been checked. + fields_to_check -= {"metadata_version"} + + for key in fields_to_check: + try: + if metadata_version: + # Can't use getattr() as that triggers descriptor protocol which + # will fail due to no value for the instance argument. + try: + field_metadata_version = cls.__dict__[key].added + except KeyError: + exc = InvalidMetadata(key, f"unrecognized field: {key!r}") + exceptions.append(exc) + continue + field_age = _VALID_METADATA_VERSIONS.index( + field_metadata_version + ) + if field_age > metadata_age: + field = _RAW_TO_EMAIL_MAPPING[key] + exc = InvalidMetadata( + field, + "{field} introduced in metadata version " + "{field_metadata_version}, not {metadata_version}", + ) + exceptions.append(exc) + continue + getattr(ins, key) + except InvalidMetadata as exc: + exceptions.append(exc) + + if exceptions: + raise ExceptionGroup("invalid metadata", exceptions) + + return ins + + @classmethod + def from_email( + cls, data: Union[bytes, str], *, validate: bool = True + ) -> "Metadata": + """Parse metadata from email headers. + + If *validate* is true, the metadata will be validated. All exceptions + related to validation will be gathered and raised as an :class:`ExceptionGroup`. + """ + raw, unparsed = parse_email(data) + + if validate: + exceptions: list[Exception] = [] + for unparsed_key in unparsed: + if unparsed_key in _EMAIL_TO_RAW_MAPPING: + message = f"{unparsed_key!r} has invalid data" + else: + message = f"unrecognized field: {unparsed_key!r}" + exceptions.append(InvalidMetadata(unparsed_key, message)) + + if exceptions: + raise ExceptionGroup("unparsed", exceptions) + + try: + return cls.from_raw(raw, validate=validate) + except ExceptionGroup as exc_group: + raise ExceptionGroup( + "invalid or unparsed metadata", exc_group.exceptions + ) from None + + metadata_version: _Validator[_MetadataVersion] = _Validator() + """:external:ref:`core-metadata-metadata-version` + (required; validated to be a valid metadata version)""" + name: _Validator[str] = _Validator() + """:external:ref:`core-metadata-name` + (required; validated using :func:`~packaging.utils.canonicalize_name` and its + *validate* parameter)""" + version: _Validator[version_module.Version] = _Validator() + """:external:ref:`core-metadata-version` (required)""" + dynamic: _Validator[Optional[List[str]]] = _Validator( + added="2.2", + ) + """:external:ref:`core-metadata-dynamic` + (validated against core metadata field names and lowercased)""" + platforms: _Validator[Optional[List[str]]] = _Validator() + """:external:ref:`core-metadata-platform`""" + supported_platforms: _Validator[Optional[List[str]]] = _Validator(added="1.1") + """:external:ref:`core-metadata-supported-platform`""" + summary: _Validator[Optional[str]] = _Validator() + """:external:ref:`core-metadata-summary` (validated to contain no newlines)""" + description: _Validator[Optional[str]] = _Validator() # TODO 2.1: can be in body + """:external:ref:`core-metadata-description`""" + description_content_type: _Validator[Optional[str]] = _Validator(added="2.1") + """:external:ref:`core-metadata-description-content-type` (validated)""" + keywords: _Validator[Optional[List[str]]] = _Validator() + """:external:ref:`core-metadata-keywords`""" + home_page: _Validator[Optional[str]] = _Validator() + """:external:ref:`core-metadata-home-page`""" + download_url: _Validator[Optional[str]] = _Validator(added="1.1") + """:external:ref:`core-metadata-download-url`""" + author: _Validator[Optional[str]] = _Validator() + """:external:ref:`core-metadata-author`""" + author_email: _Validator[Optional[str]] = _Validator() + """:external:ref:`core-metadata-author-email`""" + maintainer: _Validator[Optional[str]] = _Validator(added="1.2") + """:external:ref:`core-metadata-maintainer`""" + maintainer_email: _Validator[Optional[str]] = _Validator(added="1.2") + """:external:ref:`core-metadata-maintainer-email`""" + license: _Validator[Optional[str]] = _Validator() + """:external:ref:`core-metadata-license`""" + classifiers: _Validator[Optional[List[str]]] = _Validator(added="1.1") + """:external:ref:`core-metadata-classifier`""" + requires_dist: _Validator[Optional[List[requirements.Requirement]]] = _Validator( + added="1.2" + ) + """:external:ref:`core-metadata-requires-dist`""" + requires_python: _Validator[Optional[specifiers.SpecifierSet]] = _Validator( + added="1.2" + ) + """:external:ref:`core-metadata-requires-python`""" + # Because `Requires-External` allows for non-PEP 440 version specifiers, we + # don't do any processing on the values. + requires_external: _Validator[Optional[List[str]]] = _Validator(added="1.2") + """:external:ref:`core-metadata-requires-external`""" + project_urls: _Validator[Optional[Dict[str, str]]] = _Validator(added="1.2") + """:external:ref:`core-metadata-project-url`""" + # PEP 685 lets us raise an error if an extra doesn't pass `Name` validation + # regardless of metadata version. + provides_extra: _Validator[Optional[List[utils.NormalizedName]]] = _Validator( + added="2.1", + ) + """:external:ref:`core-metadata-provides-extra`""" + provides_dist: _Validator[Optional[List[str]]] = _Validator(added="1.2") + """:external:ref:`core-metadata-provides-dist`""" + obsoletes_dist: _Validator[Optional[List[str]]] = _Validator(added="1.2") + """:external:ref:`core-metadata-obsoletes-dist`""" + requires: _Validator[Optional[List[str]]] = _Validator(added="1.1") + """``Requires`` (deprecated)""" + provides: _Validator[Optional[List[str]]] = _Validator(added="1.1") + """``Provides`` (deprecated)""" + obsoletes: _Validator[Optional[List[str]]] = _Validator(added="1.1") + """``Obsoletes`` (deprecated)""" diff --git a/contrib/python/setuptools/py3/setuptools/_vendor/packaging/requirements.py b/contrib/python/setuptools/py3/setuptools/_vendor/packaging/requirements.py index f34bfa85c8..bdc43a7e98 100644 --- a/contrib/python/setuptools/py3/setuptools/_vendor/packaging/requirements.py +++ b/contrib/python/setuptools/py3/setuptools/_vendor/packaging/requirements.py @@ -2,13 +2,13 @@ # 2.0, and the BSD License. See the LICENSE file in the root of this repository # for complete details. -import urllib.parse -from typing import Any, List, Optional, Set +from typing import Any, Iterator, Optional, Set from ._parser import parse_requirement as _parse_requirement from ._tokenizer import ParserSyntaxError from .markers import Marker, _normalize_extra_values from .specifiers import SpecifierSet +from .utils import canonicalize_name class InvalidRequirement(ValueError): @@ -37,57 +37,52 @@ class Requirement: raise InvalidRequirement(str(e)) from e self.name: str = parsed.name - if parsed.url: - parsed_url = urllib.parse.urlparse(parsed.url) - if parsed_url.scheme == "file": - if urllib.parse.urlunparse(parsed_url) != parsed.url: - raise InvalidRequirement("Invalid URL given") - elif not (parsed_url.scheme and parsed_url.netloc) or ( - not parsed_url.scheme and not parsed_url.netloc - ): - raise InvalidRequirement(f"Invalid URL: {parsed.url}") - self.url: Optional[str] = parsed.url - else: - self.url = None - self.extras: Set[str] = set(parsed.extras if parsed.extras else []) + self.url: Optional[str] = parsed.url or None + self.extras: Set[str] = set(parsed.extras or []) self.specifier: SpecifierSet = SpecifierSet(parsed.specifier) self.marker: Optional[Marker] = None if parsed.marker is not None: self.marker = Marker.__new__(Marker) self.marker._markers = _normalize_extra_values(parsed.marker) - def __str__(self) -> str: - parts: List[str] = [self.name] + def _iter_parts(self, name: str) -> Iterator[str]: + yield name if self.extras: formatted_extras = ",".join(sorted(self.extras)) - parts.append(f"[{formatted_extras}]") + yield f"[{formatted_extras}]" if self.specifier: - parts.append(str(self.specifier)) + yield str(self.specifier) if self.url: - parts.append(f"@ {self.url}") + yield f"@ {self.url}" if self.marker: - parts.append(" ") + yield " " if self.marker: - parts.append(f"; {self.marker}") + yield f"; {self.marker}" - return "".join(parts) + def __str__(self) -> str: + return "".join(self._iter_parts(self.name)) def __repr__(self) -> str: return f"<Requirement('{self}')>" def __hash__(self) -> int: - return hash((self.__class__.__name__, str(self))) + return hash( + ( + self.__class__.__name__, + *self._iter_parts(canonicalize_name(self.name)), + ) + ) def __eq__(self, other: Any) -> bool: if not isinstance(other, Requirement): return NotImplemented return ( - self.name == other.name + canonicalize_name(self.name) == canonicalize_name(other.name) and self.extras == other.extras and self.specifier == other.specifier and self.url == other.url diff --git a/contrib/python/setuptools/py3/setuptools/_vendor/packaging/specifiers.py b/contrib/python/setuptools/py3/setuptools/_vendor/packaging/specifiers.py index ba8fe37b7f..2d015bab59 100644 --- a/contrib/python/setuptools/py3/setuptools/_vendor/packaging/specifiers.py +++ b/contrib/python/setuptools/py3/setuptools/_vendor/packaging/specifiers.py @@ -11,17 +11,7 @@ import abc import itertools import re -from typing import ( - Callable, - Iterable, - Iterator, - List, - Optional, - Set, - Tuple, - TypeVar, - Union, -) +from typing import Callable, Iterable, Iterator, List, Optional, Tuple, TypeVar, Union from .utils import canonicalize_version from .version import Version @@ -383,7 +373,7 @@ class Specifier(BaseSpecifier): # We want everything but the last item in the version, but we want to # ignore suffix segments. - prefix = ".".join( + prefix = _version_join( list(itertools.takewhile(_is_not_suffix, _version_split(spec)))[:-1] ) @@ -404,13 +394,13 @@ class Specifier(BaseSpecifier): ) # Get the normalized version string ignoring the trailing .* normalized_spec = canonicalize_version(spec[:-2], strip_trailing_zero=False) - # Split the spec out by dots, and pretend that there is an implicit - # dot in between a release segment and a pre-release segment. + # Split the spec out by bangs and dots, and pretend that there is + # an implicit dot in between a release segment and a pre-release segment. split_spec = _version_split(normalized_spec) - # Split the prospective version out by dots, and pretend that there - # is an implicit dot in between a release segment and a pre-release - # segment. + # Split the prospective version out by bangs and dots, and pretend + # that there is an implicit dot in between a release segment and + # a pre-release segment. split_prospective = _version_split(normalized_prospective) # 0-pad the prospective version before shortening it to get the correct @@ -644,8 +634,19 @@ _prefix_regex = re.compile(r"^([0-9]+)((?:a|b|c|rc)[0-9]+)$") def _version_split(version: str) -> List[str]: + """Split version into components. + + The split components are intended for version comparison. The logic does + not attempt to retain the original version string, so joining the + components back with :func:`_version_join` may not produce the original + version string. + """ result: List[str] = [] - for item in version.split("."): + + epoch, _, rest = version.rpartition("!") + result.append(epoch or "0") + + for item in rest.split("."): match = _prefix_regex.search(item) if match: result.extend(match.groups()) @@ -654,6 +655,17 @@ def _version_split(version: str) -> List[str]: return result +def _version_join(components: List[str]) -> str: + """Join split version components into a version string. + + This function assumes the input came from :func:`_version_split`, where the + first component must be the epoch (either empty or numeric), and all other + components numeric. + """ + epoch, *rest = components + return f"{epoch}!{'.'.join(rest)}" + + def _is_not_suffix(segment: str) -> bool: return not any( segment.startswith(prefix) for prefix in ("dev", "a", "b", "rc", "post") @@ -675,7 +687,10 @@ def _pad_version(left: List[str], right: List[str]) -> Tuple[List[str], List[str left_split.insert(1, ["0"] * max(0, len(right_split[0]) - len(left_split[0]))) right_split.insert(1, ["0"] * max(0, len(left_split[0]) - len(right_split[0]))) - return (list(itertools.chain(*left_split)), list(itertools.chain(*right_split))) + return ( + list(itertools.chain.from_iterable(left_split)), + list(itertools.chain.from_iterable(right_split)), + ) class SpecifierSet(BaseSpecifier): @@ -707,14 +722,8 @@ class SpecifierSet(BaseSpecifier): # strip each item to remove leading/trailing whitespace. split_specifiers = [s.strip() for s in specifiers.split(",") if s.strip()] - # Parsed each individual specifier, attempting first to make it a - # Specifier. - parsed: Set[Specifier] = set() - for specifier in split_specifiers: - parsed.add(Specifier(specifier)) - - # Turn our parsed specifiers into a frozen set and save them for later. - self._specs = frozenset(parsed) + # Make each individual specifier a Specifier and save in a frozen set for later. + self._specs = frozenset(map(Specifier, split_specifiers)) # Store our prereleases value so we can use it later to determine if # we accept prereleases or not. diff --git a/contrib/python/setuptools/py3/setuptools/_vendor/packaging/tags.py b/contrib/python/setuptools/py3/setuptools/_vendor/packaging/tags.py index 76d243414d..89f1926137 100644 --- a/contrib/python/setuptools/py3/setuptools/_vendor/packaging/tags.py +++ b/contrib/python/setuptools/py3/setuptools/_vendor/packaging/tags.py @@ -4,6 +4,8 @@ import logging import platform +import re +import struct import subprocess import sys import sysconfig @@ -37,7 +39,7 @@ INTERPRETER_SHORT_NAMES: Dict[str, str] = { } -_32_BIT_INTERPRETER = sys.maxsize <= 2**32 +_32_BIT_INTERPRETER = struct.calcsize("P") == 4 class Tag: @@ -123,20 +125,37 @@ def _normalize_string(string: str) -> str: return string.replace(".", "_").replace("-", "_").replace(" ", "_") -def _abi3_applies(python_version: PythonVersion) -> bool: +def _is_threaded_cpython(abis: List[str]) -> bool: + """ + Determine if the ABI corresponds to a threaded (`--disable-gil`) build. + + The threaded builds are indicated by a "t" in the abiflags. + """ + if len(abis) == 0: + return False + # expect e.g., cp313 + m = re.match(r"cp\d+(.*)", abis[0]) + if not m: + return False + abiflags = m.group(1) + return "t" in abiflags + + +def _abi3_applies(python_version: PythonVersion, threading: bool) -> bool: """ Determine if the Python version supports abi3. - PEP 384 was first implemented in Python 3.2. + PEP 384 was first implemented in Python 3.2. The threaded (`--disable-gil`) + builds do not support abi3. """ - return len(python_version) > 1 and tuple(python_version) >= (3, 2) + return len(python_version) > 1 and tuple(python_version) >= (3, 2) and not threading def _cpython_abis(py_version: PythonVersion, warn: bool = False) -> List[str]: py_version = tuple(py_version) # To allow for version comparison. abis = [] version = _version_nodot(py_version[:2]) - debug = pymalloc = ucs4 = "" + threading = debug = pymalloc = ucs4 = "" with_debug = _get_config_var("Py_DEBUG", warn) has_refcount = hasattr(sys, "gettotalrefcount") # Windows doesn't set Py_DEBUG, so checking for support of debug-compiled @@ -145,6 +164,8 @@ def _cpython_abis(py_version: PythonVersion, warn: bool = False) -> List[str]: has_ext = "_d.pyd" in EXTENSION_SUFFIXES if with_debug or (with_debug is None and (has_refcount or has_ext)): debug = "d" + if py_version >= (3, 13) and _get_config_var("Py_GIL_DISABLED", warn): + threading = "t" if py_version < (3, 8): with_pymalloc = _get_config_var("WITH_PYMALLOC", warn) if with_pymalloc or with_pymalloc is None: @@ -158,13 +179,8 @@ def _cpython_abis(py_version: PythonVersion, warn: bool = False) -> List[str]: elif debug: # Debug builds can also load "normal" extension modules. # We can also assume no UCS-4 or pymalloc requirement. - abis.append(f"cp{version}") - abis.insert( - 0, - "cp{version}{debug}{pymalloc}{ucs4}".format( - version=version, debug=debug, pymalloc=pymalloc, ucs4=ucs4 - ), - ) + abis.append(f"cp{version}{threading}") + abis.insert(0, f"cp{version}{threading}{debug}{pymalloc}{ucs4}") return abis @@ -212,11 +228,14 @@ def cpython_tags( for abi in abis: for platform_ in platforms: yield Tag(interpreter, abi, platform_) - if _abi3_applies(python_version): + + threading = _is_threaded_cpython(abis) + use_abi3 = _abi3_applies(python_version, threading) + if use_abi3: yield from (Tag(interpreter, "abi3", platform_) for platform_ in platforms) yield from (Tag(interpreter, "none", platform_) for platform_ in platforms) - if _abi3_applies(python_version): + if use_abi3: for minor_version in range(python_version[1] - 1, 1, -1): for platform_ in platforms: interpreter = "cp{version}".format( @@ -406,7 +425,7 @@ def mac_platforms( check=True, env={"SYSTEM_VERSION_COMPAT": "0"}, stdout=subprocess.PIPE, - universal_newlines=True, + text=True, ).stdout version = cast("MacVersion", tuple(map(int, version_str.split(".")[:2]))) else: @@ -469,15 +488,21 @@ def mac_platforms( def _linux_platforms(is_32bit: bool = _32_BIT_INTERPRETER) -> Iterator[str]: linux = _normalize_string(sysconfig.get_platform()) + if not linux.startswith("linux_"): + # we should never be here, just yield the sysconfig one and return + yield linux + return if is_32bit: if linux == "linux_x86_64": linux = "linux_i686" elif linux == "linux_aarch64": - linux = "linux_armv7l" + linux = "linux_armv8l" _, arch = linux.split("_", 1) - yield from _manylinux.platform_tags(linux, arch) - yield from _musllinux.platform_tags(arch) - yield linux + archs = {"armv8l": ["armv8l", "armv7l"]}.get(arch, [arch]) + yield from _manylinux.platform_tags(archs) + yield from _musllinux.platform_tags(archs) + for arch in archs: + yield f"linux_{arch}" def _generic_platforms() -> Iterator[str]: diff --git a/contrib/python/setuptools/py3/setuptools/_vendor/packaging/utils.py b/contrib/python/setuptools/py3/setuptools/_vendor/packaging/utils.py index 33c613b749..c2c2f75aa8 100644 --- a/contrib/python/setuptools/py3/setuptools/_vendor/packaging/utils.py +++ b/contrib/python/setuptools/py3/setuptools/_vendor/packaging/utils.py @@ -12,6 +12,12 @@ BuildTag = Union[Tuple[()], Tuple[int, str]] NormalizedName = NewType("NormalizedName", str) +class InvalidName(ValueError): + """ + An invalid distribution name; users should refer to the packaging user guide. + """ + + class InvalidWheelFilename(ValueError): """ An invalid wheel filename was found, users should refer to PEP 427. @@ -24,17 +30,28 @@ class InvalidSdistFilename(ValueError): """ +# Core metadata spec for `Name` +_validate_regex = re.compile( + r"^([A-Z0-9]|[A-Z0-9][A-Z0-9._-]*[A-Z0-9])$", re.IGNORECASE +) _canonicalize_regex = re.compile(r"[-_.]+") +_normalized_regex = re.compile(r"^([a-z0-9]|[a-z0-9]([a-z0-9-](?!--))*[a-z0-9])$") # PEP 427: The build number must start with a digit. _build_tag_regex = re.compile(r"(\d+)(.*)") -def canonicalize_name(name: str) -> NormalizedName: +def canonicalize_name(name: str, *, validate: bool = False) -> NormalizedName: + if validate and not _validate_regex.match(name): + raise InvalidName(f"name is invalid: {name!r}") # This is taken from PEP 503. value = _canonicalize_regex.sub("-", name).lower() return cast(NormalizedName, value) +def is_normalized_name(name: str) -> bool: + return _normalized_regex.match(name) is not None + + def canonicalize_version( version: Union[Version, str], *, strip_trailing_zero: bool = True ) -> str: @@ -100,11 +117,18 @@ def parse_wheel_filename( parts = filename.split("-", dashes - 2) name_part = parts[0] - # See PEP 427 for the rules on escaping the project name + # See PEP 427 for the rules on escaping the project name. if "__" in name_part or re.match(r"^[\w\d._]*$", name_part, re.UNICODE) is None: raise InvalidWheelFilename(f"Invalid project name: {filename}") name = canonicalize_name(name_part) - version = Version(parts[1]) + + try: + version = Version(parts[1]) + except InvalidVersion as e: + raise InvalidWheelFilename( + f"Invalid wheel filename (invalid version): {filename}" + ) from e + if dashes == 5: build_part = parts[2] build_match = _build_tag_regex.match(build_part) @@ -137,5 +161,12 @@ def parse_sdist_filename(filename: str) -> Tuple[NormalizedName, Version]: raise InvalidSdistFilename(f"Invalid sdist filename: {filename}") name = canonicalize_name(name_part) - version = Version(version_part) + + try: + version = Version(version_part) + except InvalidVersion as e: + raise InvalidSdistFilename( + f"Invalid sdist filename (invalid version): {filename}" + ) from e + return (name, version) diff --git a/contrib/python/setuptools/py3/setuptools/_vendor/packaging/version.py b/contrib/python/setuptools/py3/setuptools/_vendor/packaging/version.py index b30e8cbf84..5faab9bd0d 100644 --- a/contrib/python/setuptools/py3/setuptools/_vendor/packaging/version.py +++ b/contrib/python/setuptools/py3/setuptools/_vendor/packaging/version.py @@ -7,37 +7,39 @@ from packaging.version import parse, Version """ -import collections import itertools import re -from typing import Any, Callable, Optional, SupportsInt, Tuple, Union +from typing import Any, Callable, NamedTuple, Optional, SupportsInt, Tuple, Union from ._structures import Infinity, InfinityType, NegativeInfinity, NegativeInfinityType __all__ = ["VERSION_PATTERN", "parse", "Version", "InvalidVersion"] -InfiniteTypes = Union[InfinityType, NegativeInfinityType] -PrePostDevType = Union[InfiniteTypes, Tuple[str, int]] -SubLocalType = Union[InfiniteTypes, int, str] -LocalType = Union[ +LocalType = Tuple[Union[int, str], ...] + +CmpPrePostDevType = Union[InfinityType, NegativeInfinityType, Tuple[str, int]] +CmpLocalType = Union[ NegativeInfinityType, - Tuple[ - Union[ - SubLocalType, - Tuple[SubLocalType, str], - Tuple[NegativeInfinityType, SubLocalType], - ], - ..., - ], + Tuple[Union[Tuple[int, str], Tuple[NegativeInfinityType, Union[int, str]]], ...], ] CmpKey = Tuple[ - int, Tuple[int, ...], PrePostDevType, PrePostDevType, PrePostDevType, LocalType + int, + Tuple[int, ...], + CmpPrePostDevType, + CmpPrePostDevType, + CmpPrePostDevType, + CmpLocalType, ] VersionComparisonMethod = Callable[[CmpKey, CmpKey], bool] -_Version = collections.namedtuple( - "_Version", ["epoch", "release", "dev", "pre", "post", "local"] -) + +class _Version(NamedTuple): + epoch: int + release: Tuple[int, ...] + dev: Optional[Tuple[str, int]] + pre: Optional[Tuple[str, int]] + post: Optional[Tuple[str, int]] + local: Optional[LocalType] def parse(version: str) -> "Version": @@ -117,7 +119,7 @@ _VERSION_PATTERN = r""" (?P<release>[0-9]+(?:\.[0-9]+)*) # release segment (?P<pre> # pre-release [-_\.]? - (?P<pre_l>(a|b|c|rc|alpha|beta|pre|preview)) + (?P<pre_l>alpha|a|beta|b|preview|pre|c|rc) [-_\.]? (?P<pre_n>[0-9]+)? )? @@ -269,8 +271,7 @@ class Version(_BaseVersion): >>> Version("1!2.0.0").epoch 1 """ - _epoch: int = self._version.epoch - return _epoch + return self._version.epoch @property def release(self) -> Tuple[int, ...]: @@ -286,8 +287,7 @@ class Version(_BaseVersion): Includes trailing zeroes but not the epoch or any pre-release / development / post-release suffixes. """ - _release: Tuple[int, ...] = self._version.release - return _release + return self._version.release @property def pre(self) -> Optional[Tuple[str, int]]: @@ -302,8 +302,7 @@ class Version(_BaseVersion): >>> Version("1.2.3rc1").pre ('rc', 1) """ - _pre: Optional[Tuple[str, int]] = self._version.pre - return _pre + return self._version.pre @property def post(self) -> Optional[int]: @@ -451,7 +450,7 @@ class Version(_BaseVersion): def _parse_letter_version( - letter: str, number: Union[str, bytes, SupportsInt] + letter: Optional[str], number: Union[str, bytes, SupportsInt, None] ) -> Optional[Tuple[str, int]]: if letter: @@ -489,7 +488,7 @@ def _parse_letter_version( _local_version_separators = re.compile(r"[\._-]") -def _parse_local_version(local: str) -> Optional[LocalType]: +def _parse_local_version(local: Optional[str]) -> Optional[LocalType]: """ Takes a string like abc.1.twelve and turns it into ("abc", 1, "twelve"). """ @@ -507,7 +506,7 @@ def _cmpkey( pre: Optional[Tuple[str, int]], post: Optional[Tuple[str, int]], dev: Optional[Tuple[str, int]], - local: Optional[Tuple[SubLocalType]], + local: Optional[LocalType], ) -> CmpKey: # When we compare a release version, we want to compare it with all of the @@ -524,7 +523,7 @@ def _cmpkey( # if there is not a pre or a post segment. If we have one of those then # the normal sorting rules will handle this case correctly. if pre is None and post is None and dev is not None: - _pre: PrePostDevType = NegativeInfinity + _pre: CmpPrePostDevType = NegativeInfinity # Versions without a pre-release (except as noted above) should sort after # those with one. elif pre is None: @@ -534,21 +533,21 @@ def _cmpkey( # Versions without a post segment should sort before those with one. if post is None: - _post: PrePostDevType = NegativeInfinity + _post: CmpPrePostDevType = NegativeInfinity else: _post = post # Versions without a development segment should sort after those with one. if dev is None: - _dev: PrePostDevType = Infinity + _dev: CmpPrePostDevType = Infinity else: _dev = dev if local is None: # Versions without a local segment should sort before those with one. - _local: LocalType = NegativeInfinity + _local: CmpLocalType = NegativeInfinity else: # Versions with a local segment need that segment parsed to implement # the sorting rules in PEP440. diff --git a/contrib/python/setuptools/py3/setuptools/command/easy_install.py b/contrib/python/setuptools/py3/setuptools/command/easy_install.py index 858fb20f83..87a68c292a 100644 --- a/contrib/python/setuptools/py3/setuptools/command/easy_install.py +++ b/contrib/python/setuptools/py3/setuptools/command/easy_install.py @@ -565,7 +565,7 @@ class easy_install(Command): msg += '\n' + self.__access_msg raise DistutilsError(msg) - def check_pth_processing(self): + def check_pth_processing(self): # noqa: C901 """Empirically verify whether .pth files are supported in inst. dir""" instdir = self.install_dir log.info("Checking .pth file support in %s", instdir) diff --git a/contrib/python/setuptools/py3/setuptools/extern/__init__.py b/contrib/python/setuptools/py3/setuptools/extern/__init__.py index 67c4a4552f..427b27cb80 100644 --- a/contrib/python/setuptools/py3/setuptools/extern/__init__.py +++ b/contrib/python/setuptools/py3/setuptools/extern/__init__.py @@ -80,5 +80,6 @@ names = ( 'jaraco', 'typing_extensions', 'tomli', + 'backports', ) VendorImporter(__name__, names, 'setuptools._vendor').install() diff --git a/contrib/python/setuptools/py3/setuptools/monkey.py b/contrib/python/setuptools/py3/setuptools/monkey.py index fd07d91dec..1f8d8ffe0f 100644 --- a/contrib/python/setuptools/py3/setuptools/monkey.py +++ b/contrib/python/setuptools/py3/setuptools/monkey.py @@ -95,6 +95,7 @@ def _patch_distribution_metadata(): 'write_pkg_file', 'read_pkg_file', 'get_metadata_version', + 'get_fullname', ): new_val = getattr(_core_metadata, attr) setattr(distutils.dist.DistributionMetadata, attr, new_val) diff --git a/contrib/python/setuptools/py3/ya.make b/contrib/python/setuptools/py3/ya.make index 4e2b62dbce..a3a05780af 100644 --- a/contrib/python/setuptools/py3/ya.make +++ b/contrib/python/setuptools/py3/ya.make @@ -2,7 +2,7 @@ PY3_LIBRARY() -VERSION(69.2.0) +VERSION(69.5.1) LICENSE(MIT) @@ -24,6 +24,8 @@ PY_SRCS( _distutils_hack/override.py pkg_resources/__init__.py pkg_resources/_vendor/__init__.py + pkg_resources/_vendor/backports/__init__.py + pkg_resources/_vendor/backports/tarfile.py pkg_resources/_vendor/importlib_resources/__init__.py pkg_resources/_vendor/importlib_resources/_adapters.py pkg_resources/_vendor/importlib_resources/_common.py @@ -35,7 +37,8 @@ PY_SRCS( pkg_resources/_vendor/importlib_resources/simple.py pkg_resources/_vendor/jaraco/__init__.py pkg_resources/_vendor/jaraco/context.py - pkg_resources/_vendor/jaraco/functools.py + pkg_resources/_vendor/jaraco/functools/__init__.py + pkg_resources/_vendor/jaraco/functools/__init__.pyi pkg_resources/_vendor/jaraco/text/__init__.py pkg_resources/_vendor/more_itertools/__init__.py pkg_resources/_vendor/more_itertools/__init__.pyi @@ -73,6 +76,7 @@ PY_SRCS( setuptools/_distutils/__init__.py setuptools/_distutils/_collections.py setuptools/_distutils/_functools.py + setuptools/_distutils/_itertools.py setuptools/_distutils/_log.py setuptools/_distutils/_macos_compat.py setuptools/_distutils/_modified.py @@ -100,10 +104,11 @@ PY_SRCS( setuptools/_distutils/command/install_headers.py setuptools/_distutils/command/install_lib.py setuptools/_distutils/command/install_scripts.py - setuptools/_distutils/command/py37compat.py setuptools/_distutils/command/register.py setuptools/_distutils/command/sdist.py setuptools/_distutils/command/upload.py + setuptools/_distutils/compat/__init__.py + setuptools/_distutils/compat/py38.py setuptools/_distutils/config.py setuptools/_distutils/core.py setuptools/_distutils/cygwinccompiler.py @@ -128,6 +133,7 @@ PY_SRCS( setuptools/_distutils/util.py setuptools/_distutils/version.py setuptools/_distutils/versionpredicate.py + setuptools/_distutils/zosccompiler.py setuptools/_entry_points.py setuptools/_imp.py setuptools/_importlib.py @@ -136,6 +142,8 @@ PY_SRCS( setuptools/_path.py setuptools/_reqs.py setuptools/_vendor/__init__.py + setuptools/_vendor/backports/__init__.py + setuptools/_vendor/backports/tarfile.py setuptools/_vendor/importlib_metadata/__init__.py setuptools/_vendor/importlib_metadata/_adapters.py setuptools/_vendor/importlib_metadata/_collections.py @@ -156,7 +164,8 @@ PY_SRCS( setuptools/_vendor/importlib_resources/simple.py setuptools/_vendor/jaraco/__init__.py setuptools/_vendor/jaraco/context.py - setuptools/_vendor/jaraco/functools.py + setuptools/_vendor/jaraco/functools/__init__.py + setuptools/_vendor/jaraco/functools/__init__.pyi setuptools/_vendor/jaraco/text/__init__.py setuptools/_vendor/more_itertools/__init__.py setuptools/_vendor/more_itertools/__init__.pyi @@ -258,11 +267,13 @@ RESOURCE_FILES( .dist-info/entry_points.txt .dist-info/top_level.txt pkg_resources/_vendor/importlib_resources/py.typed + pkg_resources/_vendor/jaraco/functools/py.typed pkg_resources/_vendor/more_itertools/py.typed pkg_resources/_vendor/packaging/py.typed pkg_resources/_vendor/platformdirs/py.typed setuptools/_vendor/importlib_metadata/py.typed setuptools/_vendor/importlib_resources/py.typed + setuptools/_vendor/jaraco/functools/py.typed setuptools/_vendor/more_itertools/py.typed setuptools/_vendor/packaging/py.typed setuptools/_vendor/tomli/py.typed diff --git a/contrib/python/simplejson/py3/.dist-info/METADATA b/contrib/python/simplejson/py3/.dist-info/METADATA index 030823c2a1..ba887cf80b 100644 --- a/contrib/python/simplejson/py3/.dist-info/METADATA +++ b/contrib/python/simplejson/py3/.dist-info/METADATA @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: simplejson -Version: 3.18.4 +Version: 3.19.2 Summary: Simple, fast, extensible JSON encoder/decoder for Python Home-page: https://github.com/simplejson/simplejson Author: Bob Ippolito @@ -26,6 +26,7 @@ Classifier: Programming Language :: Python :: 3.8 Classifier: Programming Language :: Python :: 3.9 Classifier: Programming Language :: Python :: 3.10 Classifier: Programming Language :: Python :: 3.11 +Classifier: Programming Language :: Python :: 3.12 Classifier: Programming Language :: Python :: Implementation :: CPython Classifier: Programming Language :: Python :: Implementation :: PyPy Classifier: Topic :: Software Development :: Libraries :: Python Modules diff --git a/contrib/python/simplejson/py3/simplejson/__init__.py b/contrib/python/simplejson/py3/simplejson/__init__.py index 47e49a318d..2d1900d8c4 100644 --- a/contrib/python/simplejson/py3/simplejson/__init__.py +++ b/contrib/python/simplejson/py3/simplejson/__init__.py @@ -118,7 +118,7 @@ Serializing multiple objects to JSON lines (newline-delimited JSON):: """ from __future__ import absolute_import -__version__ = '3.18.4' +__version__ = '3.19.2' __all__ = [ 'dump', 'dumps', 'load', 'loads', 'JSONDecoder', 'JSONDecodeError', 'JSONEncoder', @@ -149,28 +149,10 @@ def _import_c_make_encoder(): except ImportError: return None -_default_encoder = JSONEncoder( - skipkeys=False, - ensure_ascii=True, - check_circular=True, - allow_nan=True, - indent=None, - separators=None, - encoding='utf-8', - default=None, - use_decimal=True, - namedtuple_as_object=True, - tuple_as_array=True, - iterable_as_array=False, - bigint_as_string=False, - item_sort_key=None, - for_json=False, - ignore_nan=False, - int_as_string_bitcount=None, -) +_default_encoder = JSONEncoder() def dump(obj, fp, skipkeys=False, ensure_ascii=True, check_circular=True, - allow_nan=True, cls=None, indent=None, separators=None, + allow_nan=False, cls=None, indent=None, separators=None, encoding='utf-8', default=None, use_decimal=True, namedtuple_as_object=True, tuple_as_array=True, bigint_as_string=False, sort_keys=False, item_sort_key=None, @@ -187,10 +169,10 @@ def dump(obj, fp, skipkeys=False, ensure_ascii=True, check_circular=True, contain non-ASCII characters, so long as they do not need to be escaped by JSON. When it is true, all non-ASCII characters are escaped. - If *allow_nan* is false, then it will be a ``ValueError`` to - serialize out of range ``float`` values (``nan``, ``inf``, ``-inf``) - in strict compliance of the original JSON specification, instead of using - the JavaScript equivalents (``NaN``, ``Infinity``, ``-Infinity``). See + If *allow_nan* is true (default: ``False``), then out of range ``float`` + values (``nan``, ``inf``, ``-inf``) will be serialized to + their JavaScript equivalents (``NaN``, ``Infinity``, ``-Infinity``) + instead of raising a ValueError. See *ignore_nan* for ECMA-262 compliant behavior. If *indent* is a string, then JSON array elements and object members @@ -258,7 +240,7 @@ def dump(obj, fp, skipkeys=False, ensure_ascii=True, check_circular=True, """ # cached encoder if (not skipkeys and ensure_ascii and - check_circular and allow_nan and + check_circular and not allow_nan and cls is None and indent is None and separators is None and encoding == 'utf-8' and default is None and use_decimal and namedtuple_as_object and tuple_as_array and not iterable_as_array @@ -292,7 +274,7 @@ def dump(obj, fp, skipkeys=False, ensure_ascii=True, check_circular=True, def dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True, - allow_nan=True, cls=None, indent=None, separators=None, + allow_nan=False, cls=None, indent=None, separators=None, encoding='utf-8', default=None, use_decimal=True, namedtuple_as_object=True, tuple_as_array=True, bigint_as_string=False, sort_keys=False, item_sort_key=None, @@ -312,10 +294,11 @@ def dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True, for container types will be skipped and a circular reference will result in an ``OverflowError`` (or worse). - If ``allow_nan`` is false, then it will be a ``ValueError`` to - serialize out of range ``float`` values (``nan``, ``inf``, ``-inf``) in - strict compliance of the JSON specification, instead of using the - JavaScript equivalents (``NaN``, ``Infinity``, ``-Infinity``). + If *allow_nan* is true (default: ``False``), then out of range ``float`` + values (``nan``, ``inf``, ``-inf``) will be serialized to + their JavaScript equivalents (``NaN``, ``Infinity``, ``-Infinity``) + instead of raising a ValueError. See + *ignore_nan* for ECMA-262 compliant behavior. If ``indent`` is a string, then JSON array elements and object members will be pretty-printed with a newline followed by that string repeated @@ -383,7 +366,7 @@ def dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True, """ # cached encoder if (not skipkeys and ensure_ascii and - check_circular and allow_nan and + check_circular and not allow_nan and cls is None and indent is None and separators is None and encoding == 'utf-8' and default is None and use_decimal and namedtuple_as_object and tuple_as_array and not iterable_as_array @@ -412,14 +395,12 @@ def dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True, **kw).encode(obj) -_default_decoder = JSONDecoder(encoding=None, object_hook=None, - object_pairs_hook=None) +_default_decoder = JSONDecoder() def load(fp, encoding=None, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, - use_decimal=False, namedtuple_as_object=True, tuple_as_array=True, - **kw): + use_decimal=False, allow_nan=False, **kw): """Deserialize ``fp`` (a ``.read()``-supporting file-like object containing a JSON document as `str` or `bytes`) to a Python object. @@ -442,23 +423,27 @@ def load(fp, encoding=None, cls=None, object_hook=None, parse_float=None, takes priority. *parse_float*, if specified, will be called with the string of every - JSON float to be decoded. By default, this is equivalent to + JSON float to be decoded. By default, this is equivalent to ``float(num_str)``. This can be used to use another datatype or parser for JSON floats (e.g. :class:`decimal.Decimal`). *parse_int*, if specified, will be called with the string of every - JSON int to be decoded. By default, this is equivalent to + JSON int to be decoded. By default, this is equivalent to ``int(num_str)``. This can be used to use another datatype or parser for JSON integers (e.g. :class:`float`). - *parse_constant*, if specified, will be called with one of the - following strings: ``'-Infinity'``, ``'Infinity'``, ``'NaN'``. This - can be used to raise an exception if invalid JSON numbers are - encountered. + *allow_nan*, if True (default false), will allow the parser to + accept the non-standard floats ``NaN``, ``Infinity``, and ``-Infinity`` + and enable the use of the deprecated *parse_constant*. If *use_decimal* is true (default: ``False``) then it implies parse_float=decimal.Decimal for parity with ``dump``. + *parse_constant*, if specified, will be + called with one of the following strings: ``'-Infinity'``, + ``'Infinity'``, ``'NaN'``. It is not recommended to use this feature, + as it is rare to parse non-compliant JSON containing these values. + To use a custom ``JSONDecoder`` subclass, specify it with the ``cls`` kwarg. NOTE: You should use *object_hook* or *object_pairs_hook* instead of subclassing whenever possible. @@ -468,12 +453,12 @@ def load(fp, encoding=None, cls=None, object_hook=None, parse_float=None, encoding=encoding, cls=cls, object_hook=object_hook, parse_float=parse_float, parse_int=parse_int, parse_constant=parse_constant, object_pairs_hook=object_pairs_hook, - use_decimal=use_decimal, **kw) + use_decimal=use_decimal, allow_nan=allow_nan, **kw) def loads(s, encoding=None, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, - use_decimal=False, **kw): + use_decimal=False, allow_nan=False, **kw): """Deserialize ``s`` (a ``str`` or ``unicode`` instance containing a JSON document) to a Python object. @@ -505,14 +490,18 @@ def loads(s, encoding=None, cls=None, object_hook=None, parse_float=None, ``int(num_str)``. This can be used to use another datatype or parser for JSON integers (e.g. :class:`float`). - *parse_constant*, if specified, will be called with one of the - following strings: ``'-Infinity'``, ``'Infinity'``, ``'NaN'``. This - can be used to raise an exception if invalid JSON numbers are - encountered. + *allow_nan*, if True (default false), will allow the parser to + accept the non-standard floats ``NaN``, ``Infinity``, and ``-Infinity`` + and enable the use of the deprecated *parse_constant*. If *use_decimal* is true (default: ``False``) then it implies parse_float=decimal.Decimal for parity with ``dump``. + *parse_constant*, if specified, will be + called with one of the following strings: ``'-Infinity'``, + ``'Infinity'``, ``'NaN'``. It is not recommended to use this feature, + as it is rare to parse non-compliant JSON containing these values. + To use a custom ``JSONDecoder`` subclass, specify it with the ``cls`` kwarg. NOTE: You should use *object_hook* or *object_pairs_hook* instead of subclassing whenever possible. @@ -521,7 +510,7 @@ def loads(s, encoding=None, cls=None, object_hook=None, parse_float=None, if (cls is None and encoding is None and object_hook is None and parse_int is None and parse_float is None and parse_constant is None and object_pairs_hook is None - and not use_decimal and not kw): + and not use_decimal and not allow_nan and not kw): return _default_decoder.decode(s) if cls is None: cls = JSONDecoder @@ -539,6 +528,8 @@ def loads(s, encoding=None, cls=None, object_hook=None, parse_float=None, if parse_float is not None: raise TypeError("use_decimal=True implies parse_float=Decimal") kw['parse_float'] = Decimal + if allow_nan: + kw['allow_nan'] = True return cls(encoding=encoding, **kw).decode(s) @@ -560,22 +551,9 @@ def _toggle_speedups(enabled): scan.make_scanner = scan.py_make_scanner dec.make_scanner = scan.make_scanner global _default_decoder - _default_decoder = JSONDecoder( - encoding=None, - object_hook=None, - object_pairs_hook=None, - ) + _default_decoder = JSONDecoder() global _default_encoder - _default_encoder = JSONEncoder( - skipkeys=False, - ensure_ascii=True, - check_circular=True, - allow_nan=True, - indent=None, - separators=None, - encoding='utf-8', - default=None, - ) + _default_encoder = JSONEncoder() def simple_first(kv): """Helper function to pass to item_sort_key to sort simple diff --git a/contrib/python/simplejson/py3/simplejson/_speedups.c b/contrib/python/simplejson/py3/simplejson/_speedups.c index ec054c7293..bd56b4dc87 100644 --- a/contrib/python/simplejson/py3/simplejson/_speedups.c +++ b/contrib/python/simplejson/py3/simplejson/_speedups.c @@ -1843,7 +1843,7 @@ bail: } static PyObject * -_parse_constant(PyScannerObject *s, PyObject *constant, Py_ssize_t idx, Py_ssize_t *next_idx_ptr) +_parse_constant(PyScannerObject *s, PyObject *pystr, PyObject *constant, Py_ssize_t idx, Py_ssize_t *next_idx_ptr) { /* Read a JSON constant from PyString pystr. constant is the Python string that was found @@ -1855,6 +1855,10 @@ _parse_constant(PyScannerObject *s, PyObject *constant, Py_ssize_t idx, Py_ssize Returns the result of parse_constant */ PyObject *rval; + if (s->parse_constant == Py_None) { + raise_errmsg(ERR_EXPECTING_VALUE, pystr, idx); + return NULL; + } /* rval = parse_constant(constant) */ rval = PyObject_CallOneArg(s->parse_constant, constant); @@ -1886,7 +1890,7 @@ _match_number_str(PyScannerObject *s, PyObject *pystr, Py_ssize_t start, Py_ssiz /* read a sign if it's there, make sure it's not the end of the string */ if (str[idx] == '-') { if (idx >= end_idx) { - raise_errmsg(ERR_EXPECTING_VALUE, pystr, idx); + raise_errmsg(ERR_EXPECTING_VALUE, pystr, start); return NULL; } idx++; @@ -1903,7 +1907,7 @@ _match_number_str(PyScannerObject *s, PyObject *pystr, Py_ssize_t start, Py_ssiz } /* no integer digits, error */ else { - raise_errmsg(ERR_EXPECTING_VALUE, pystr, idx); + raise_errmsg(ERR_EXPECTING_VALUE, pystr, start); return NULL; } @@ -1949,8 +1953,10 @@ _match_number_str(PyScannerObject *s, PyObject *pystr, Py_ssize_t start, Py_ssiz /* rval = PyFloat_FromDouble(PyOS_ascii_atof(PyString_AS_STRING(numstr))); */ double d = PyOS_string_to_double(PyString_AS_STRING(numstr), NULL, NULL); - if (d == -1.0 && PyErr_Occurred()) + if (d == -1.0 && PyErr_Occurred()) { + Py_DECREF(numstr); return NULL; + } rval = PyFloat_FromDouble(d); } } @@ -1993,7 +1999,7 @@ _match_number_unicode(PyScannerObject *s, PyObject *pystr, Py_ssize_t start, Py_ /* read a sign if it's there, make sure it's not the end of the string */ if (PyUnicode_READ(kind, str, idx) == '-') { if (idx >= end_idx) { - raise_errmsg(ERR_EXPECTING_VALUE, pystr, idx); + raise_errmsg(ERR_EXPECTING_VALUE, pystr, start); return NULL; } idx++; @@ -2013,7 +2019,7 @@ _match_number_unicode(PyScannerObject *s, PyObject *pystr, Py_ssize_t start, Py_ } else { /* no integer digits, error */ - raise_errmsg(ERR_EXPECTING_VALUE, pystr, idx); + raise_errmsg(ERR_EXPECTING_VALUE, pystr, start); return NULL; } @@ -2156,7 +2162,7 @@ scan_once_str(PyScannerObject *s, PyObject *pystr, Py_ssize_t idx, Py_ssize_t *n case 'N': /* NaN */ if ((idx + 2 < length) && str[idx + 1] == 'a' && str[idx + 2] == 'N') { - rval = _parse_constant(s, JSON_NaN, idx, next_idx_ptr); + rval = _parse_constant(s, pystr, JSON_NaN, idx, next_idx_ptr); } else fallthrough = 1; @@ -2164,7 +2170,7 @@ scan_once_str(PyScannerObject *s, PyObject *pystr, Py_ssize_t idx, Py_ssize_t *n case 'I': /* Infinity */ if ((idx + 7 < length) && str[idx + 1] == 'n' && str[idx + 2] == 'f' && str[idx + 3] == 'i' && str[idx + 4] == 'n' && str[idx + 5] == 'i' && str[idx + 6] == 't' && str[idx + 7] == 'y') { - rval = _parse_constant(s, JSON_Infinity, idx, next_idx_ptr); + rval = _parse_constant(s, pystr, JSON_Infinity, idx, next_idx_ptr); } else fallthrough = 1; @@ -2172,7 +2178,7 @@ scan_once_str(PyScannerObject *s, PyObject *pystr, Py_ssize_t idx, Py_ssize_t *n case '-': /* -Infinity */ if ((idx + 8 < length) && str[idx + 1] == 'I' && str[idx + 2] == 'n' && str[idx + 3] == 'f' && str[idx + 4] == 'i' && str[idx + 5] == 'n' && str[idx + 6] == 'i' && str[idx + 7] == 't' && str[idx + 8] == 'y') { - rval = _parse_constant(s, JSON_NegInfinity, idx, next_idx_ptr); + rval = _parse_constant(s, pystr, JSON_NegInfinity, idx, next_idx_ptr); } else fallthrough = 1; @@ -2275,7 +2281,7 @@ scan_once_unicode(PyScannerObject *s, PyObject *pystr, Py_ssize_t idx, Py_ssize_ if ((idx + 2 < length) && PyUnicode_READ(kind, str, idx + 1) == 'a' && PyUnicode_READ(kind, str, idx + 2) == 'N') { - rval = _parse_constant(s, JSON_NaN, idx, next_idx_ptr); + rval = _parse_constant(s, pystr, JSON_NaN, idx, next_idx_ptr); } else fallthrough = 1; @@ -2290,7 +2296,7 @@ scan_once_unicode(PyScannerObject *s, PyObject *pystr, Py_ssize_t idx, Py_ssize_ PyUnicode_READ(kind, str, idx + 5) == 'i' && PyUnicode_READ(kind, str, idx + 6) == 't' && PyUnicode_READ(kind, str, idx + 7) == 'y') { - rval = _parse_constant(s, JSON_Infinity, idx, next_idx_ptr); + rval = _parse_constant(s, pystr, JSON_Infinity, idx, next_idx_ptr); } else fallthrough = 1; @@ -2306,7 +2312,7 @@ scan_once_unicode(PyScannerObject *s, PyObject *pystr, Py_ssize_t idx, Py_ssize_ PyUnicode_READ(kind, str, idx + 6) == 'i' && PyUnicode_READ(kind, str, idx + 7) == 't' && PyUnicode_READ(kind, str, idx + 8) == 'y') { - rval = _parse_constant(s, JSON_NegInfinity, idx, next_idx_ptr); + rval = _parse_constant(s, pystr, JSON_NegInfinity, idx, next_idx_ptr); } else fallthrough = 1; diff --git a/contrib/python/simplejson/py3/simplejson/decoder.py b/contrib/python/simplejson/py3/simplejson/decoder.py index 1a8f772f13..c99a976d84 100644 --- a/contrib/python/simplejson/py3/simplejson/decoder.py +++ b/contrib/python/simplejson/py3/simplejson/decoder.py @@ -46,9 +46,35 @@ BACKSLASH = { DEFAULT_ENCODING = "utf-8" +if hasattr(sys, 'get_int_max_str_digits'): + bounded_int = int +else: + def bounded_int(s, INT_MAX_STR_DIGITS=4300): + """Backport of the integer string length conversion limitation + + https://docs.python.org/3/library/stdtypes.html#int-max-str-digits + """ + if len(s) > INT_MAX_STR_DIGITS: + raise ValueError("Exceeds the limit (%s) for integer string conversion: value has %s digits" % (INT_MAX_STR_DIGITS, len(s))) + return int(s) + + +def scan_four_digit_hex(s, end, _m=re.compile(r'^[0-9a-fA-F]{4}$').match): + """Scan a four digit hex number from s[end:end + 4] + """ + msg = "Invalid \\uXXXX escape sequence" + esc = s[end:end + 4] + if not _m(esc): + raise JSONDecodeError(msg, s, end - 2) + try: + return int(esc, 16), end + 4 + except ValueError: + raise JSONDecodeError(msg, s, end - 2) + def py_scanstring(s, end, encoding=None, strict=True, _b=BACKSLASH, _m=STRINGCHUNK.match, _join=u''.join, - _PY3=PY3, _maxunicode=sys.maxunicode): + _PY3=PY3, _maxunicode=sys.maxunicode, + _scan_four_digit_hex=scan_four_digit_hex): """Scan the string s for a JSON string. End is the index of the character in s after the quote that started the JSON string. Unescapes all valid JSON string escape sequences and raises ValueError @@ -67,6 +93,7 @@ def py_scanstring(s, end, encoding=None, strict=True, if chunk is None: raise JSONDecodeError( "Unterminated string starting at", s, begin) + prev_end = end end = chunk.end() content, terminator = chunk.groups() # Content is contains zero or more unescaped string characters @@ -81,7 +108,7 @@ def py_scanstring(s, end, encoding=None, strict=True, elif terminator != '\\': if strict: msg = "Invalid control character %r at" - raise JSONDecodeError(msg, s, end) + raise JSONDecodeError(msg, s, prev_end) else: _append(terminator) continue @@ -100,35 +127,18 @@ def py_scanstring(s, end, encoding=None, strict=True, end += 1 else: # Unicode escape sequence - msg = "Invalid \\uXXXX escape sequence" - esc = s[end + 1:end + 5] - escX = esc[1:2] - if len(esc) != 4 or escX == 'x' or escX == 'X': - raise JSONDecodeError(msg, s, end - 1) - try: - uni = int(esc, 16) - except ValueError: - raise JSONDecodeError(msg, s, end - 1) - if uni < 0 or uni > _maxunicode: - raise JSONDecodeError(msg, s, end - 1) - end += 5 + uni, end = _scan_four_digit_hex(s, end + 1) # Check for surrogate pair on UCS-4 systems # Note that this will join high/low surrogate pairs # but will also pass unpaired surrogates through if (_maxunicode > 65535 and uni & 0xfc00 == 0xd800 and s[end:end + 2] == '\\u'): - esc2 = s[end + 2:end + 6] - escX = esc2[1:2] - if len(esc2) == 4 and not (escX == 'x' or escX == 'X'): - try: - uni2 = int(esc2, 16) - except ValueError: - raise JSONDecodeError(msg, s, end) - if uni2 & 0xfc00 == 0xdc00: - uni = 0x10000 + (((uni - 0xd800) << 10) | - (uni2 - 0xdc00)) - end += 6 + uni2, end2 = _scan_four_digit_hex(s, end + 2) + if uni2 & 0xfc00 == 0xdc00: + uni = 0x10000 + (((uni - 0xd800) << 10) | + (uni2 - 0xdc00)) + end = end2 char = unichr(uni) # Append the unescaped character _append(char) @@ -169,7 +179,7 @@ def JSONObject(state, encoding, strict, scan_once, object_hook, return pairs, end + 1 elif nextchar != '"': raise JSONDecodeError( - "Expecting property name enclosed in double quotes", + "Expecting property name enclosed in double quotes or '}'", s, end) end += 1 while True: @@ -296,14 +306,15 @@ class JSONDecoder(object): | null | None | +---------------+-------------------+ - It also understands ``NaN``, ``Infinity``, and ``-Infinity`` as + When allow_nan=True, it also understands + ``NaN``, ``Infinity``, and ``-Infinity`` as their corresponding ``float`` values, which is outside the JSON spec. """ def __init__(self, encoding=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, strict=True, - object_pairs_hook=None): + object_pairs_hook=None, allow_nan=False): """ *encoding* determines the encoding used to interpret any :class:`str` objects decoded by this instance (``'utf-8'`` by @@ -336,10 +347,13 @@ class JSONDecoder(object): ``int(num_str)``. This can be used to use another datatype or parser for JSON integers (e.g. :class:`float`). - *parse_constant*, if specified, will be called with one of the - following strings: ``'-Infinity'``, ``'Infinity'``, ``'NaN'``. This - can be used to raise an exception if invalid JSON numbers are - encountered. + *allow_nan*, if True (default false), will allow the parser to + accept the non-standard floats ``NaN``, ``Infinity``, and ``-Infinity``. + + *parse_constant*, if specified, will be + called with one of the following strings: ``'-Infinity'``, + ``'Infinity'``, ``'NaN'``. It is not recommended to use this feature, + as it is rare to parse non-compliant JSON containing these values. *strict* controls the parser's behavior when it encounters an invalid control character in a string. The default setting of @@ -353,8 +367,8 @@ class JSONDecoder(object): self.object_hook = object_hook self.object_pairs_hook = object_pairs_hook self.parse_float = parse_float or float - self.parse_int = parse_int or int - self.parse_constant = parse_constant or _CONSTANTS.__getitem__ + self.parse_int = parse_int or bounded_int + self.parse_constant = parse_constant or (allow_nan and _CONSTANTS.__getitem__ or None) self.strict = strict self.parse_object = JSONObject self.parse_array = JSONArray diff --git a/contrib/python/simplejson/py3/simplejson/encoder.py b/contrib/python/simplejson/py3/simplejson/encoder.py index e93fe43f42..661ff361bf 100644 --- a/contrib/python/simplejson/py3/simplejson/encoder.py +++ b/contrib/python/simplejson/py3/simplejson/encoder.py @@ -5,7 +5,7 @@ import re from operator import itemgetter # Do not import Decimal directly to avoid reload issues import decimal -from .compat import unichr, binary_type, text_type, string_types, integer_types, PY3 +from .compat import binary_type, text_type, string_types, integer_types, PY3 def _import_speedups(): try: from . import _speedups @@ -140,7 +140,7 @@ class JSONEncoder(object): key_separator = ': ' def __init__(self, skipkeys=False, ensure_ascii=True, - check_circular=True, allow_nan=True, sort_keys=False, + check_circular=True, allow_nan=False, sort_keys=False, indent=None, separators=None, encoding='utf-8', default=None, use_decimal=True, namedtuple_as_object=True, tuple_as_array=True, bigint_as_string=False, @@ -161,10 +161,11 @@ class JSONEncoder(object): prevent an infinite recursion (which would cause an OverflowError). Otherwise, no such check takes place. - If allow_nan is true, then NaN, Infinity, and -Infinity will be - encoded as such. This behavior is not JSON specification compliant, - but is consistent with most JavaScript based encoders and decoders. - Otherwise, it will be a ValueError to encode such floats. + If allow_nan is true (default: False), then out of range float + values (nan, inf, -inf) will be serialized to + their JavaScript equivalents (NaN, Infinity, -Infinity) + instead of raising a ValueError. See + ignore_nan for ECMA-262 compliant behavior. If sort_keys is true, then the output of dictionaries will be sorted by key; this is useful for regression tests to ensure @@ -294,7 +295,7 @@ class JSONEncoder(object): # This doesn't pass the iterator directly to ''.join() because the # exceptions aren't as detailed. The list call should be roughly # equivalent to the PySequence_Fast that ''.join() would do. - chunks = self.iterencode(o, _one_shot=True) + chunks = self.iterencode(o) if not isinstance(chunks, (list, tuple)): chunks = list(chunks) if self.ensure_ascii: @@ -302,7 +303,7 @@ class JSONEncoder(object): else: return u''.join(chunks) - def iterencode(self, o, _one_shot=False): + def iterencode(self, o): """Encode the given object and yield each string representation as available. @@ -356,8 +357,7 @@ class JSONEncoder(object): key_memo = {} int_as_string_bitcount = ( 53 if self.bigint_as_string else self.int_as_string_bitcount) - if (_one_shot and c_make_encoder is not None - and self.indent is None): + if (c_make_encoder is not None and self.indent is None): _iterencode = c_make_encoder( markers, self.default, _encoder, self.indent, self.key_separator, self.item_separator, self.sort_keys, @@ -370,7 +370,7 @@ class JSONEncoder(object): _iterencode = _make_iterencode( markers, self.default, _encoder, self.indent, floatstr, self.key_separator, self.item_separator, self.sort_keys, - self.skipkeys, _one_shot, self.use_decimal, + self.skipkeys, self.use_decimal, self.namedtuple_as_object, self.tuple_as_array, int_as_string_bitcount, self.item_sort_key, self.encoding, self.for_json, @@ -398,14 +398,14 @@ class JSONEncoderForHTML(JSONEncoder): def encode(self, o): # Override JSONEncoder.encode because it has hacks for # performance that make things more complicated. - chunks = self.iterencode(o, True) + chunks = self.iterencode(o) if self.ensure_ascii: return ''.join(chunks) else: return u''.join(chunks) - def iterencode(self, o, _one_shot=False): - chunks = super(JSONEncoderForHTML, self).iterencode(o, _one_shot) + def iterencode(self, o): + chunks = super(JSONEncoderForHTML, self).iterencode(o) for chunk in chunks: chunk = chunk.replace('&', '\\u0026') chunk = chunk.replace('<', '\\u003c') @@ -419,7 +419,7 @@ class JSONEncoderForHTML(JSONEncoder): def _make_iterencode(markers, _default, _encoder, _indent, _floatstr, - _key_separator, _item_separator, _sort_keys, _skipkeys, _one_shot, + _key_separator, _item_separator, _sort_keys, _skipkeys, _use_decimal, _namedtuple_as_object, _tuple_as_array, _int_as_string_bitcount, _item_sort_key, _encoding,_for_json, diff --git a/contrib/python/simplejson/py3/simplejson/scanner.py b/contrib/python/simplejson/py3/simplejson/scanner.py index 85e385e147..34710d68c6 100644 --- a/contrib/python/simplejson/py3/simplejson/scanner.py +++ b/contrib/python/simplejson/py3/simplejson/scanner.py @@ -60,11 +60,11 @@ def py_make_scanner(context): else: res = parse_int(integer) return res, m.end() - elif nextchar == 'N' and string[idx:idx + 3] == 'NaN': + elif parse_constant and nextchar == 'N' and string[idx:idx + 3] == 'NaN': return parse_constant('NaN'), idx + 3 - elif nextchar == 'I' and string[idx:idx + 8] == 'Infinity': + elif parse_constant and nextchar == 'I' and string[idx:idx + 8] == 'Infinity': return parse_constant('Infinity'), idx + 8 - elif nextchar == '-' and string[idx:idx + 9] == '-Infinity': + elif parse_constant and nextchar == '-' and string[idx:idx + 9] == '-Infinity': return parse_constant('-Infinity'), idx + 9 else: raise JSONDecodeError(errmsg, string, idx) diff --git a/contrib/python/simplejson/py3/simplejson/tests/test_decode.py b/contrib/python/simplejson/py3/simplejson/tests/test_decode.py index 6960ee58ba..317b4f98d5 100644 --- a/contrib/python/simplejson/py3/simplejson/tests/test_decode.py +++ b/contrib/python/simplejson/py3/simplejson/tests/test_decode.py @@ -2,6 +2,7 @@ from __future__ import absolute_import import decimal from unittest import TestCase +import sys import simplejson as json from simplejson.compat import StringIO, b, binary_type from simplejson import OrderedDict @@ -117,3 +118,10 @@ class TestDecode(TestCase): diff = id(x) - id(y) self.assertRaises(ValueError, j.scan_once, y, diff) self.assertRaises(ValueError, j.raw_decode, y, i) + + def test_bounded_int(self): + # SJ-PT-23-03, limit quadratic number parsing per Python 3.11 + max_str_digits = getattr(sys, 'get_int_max_str_digits', lambda: 4300)() + s = '1' + '0' * (max_str_digits - 1) + self.assertEqual(json.loads(s), int(s)) + self.assertRaises(ValueError, json.loads, s + '0') diff --git a/contrib/python/simplejson/py3/simplejson/tests/test_fail.py b/contrib/python/simplejson/py3/simplejson/tests/test_fail.py index 788f3a525b..5f9a8f698c 100644 --- a/contrib/python/simplejson/py3/simplejson/tests/test_fail.py +++ b/contrib/python/simplejson/py3/simplejson/tests/test_fail.py @@ -145,7 +145,7 @@ class TestFail(TestCase): ('["spam', 'Unterminated string starting at', 1), ('["spam"', "Expecting ',' delimiter", 7), ('["spam",', 'Expecting value', 8), - ('{', 'Expecting property name enclosed in double quotes', 1), + ('{', "Expecting property name enclosed in double quotes or '}'", 1), ('{"', 'Unterminated string starting at', 1), ('{"spam', 'Unterminated string starting at', 1), ('{"spam"', "Expecting ':' delimiter", 7), @@ -156,6 +156,8 @@ class TestFail(TestCase): ('"', 'Unterminated string starting at', 0), ('"spam', 'Unterminated string starting at', 0), ('[,', "Expecting value", 1), + ('--', 'Expecting value', 0), + ('"\x18d', "Invalid control character %r", 1), ] for data, msg, idx in test_cases: try: diff --git a/contrib/python/simplejson/py3/simplejson/tests/test_float.py b/contrib/python/simplejson/py3/simplejson/tests/test_float.py index e382ec21ab..a977969472 100644 --- a/contrib/python/simplejson/py3/simplejson/tests/test_float.py +++ b/contrib/python/simplejson/py3/simplejson/tests/test_float.py @@ -7,9 +7,9 @@ from simplejson.decoder import NaN, PosInf, NegInf class TestFloat(TestCase): def test_degenerates_allow(self): for inf in (PosInf, NegInf): - self.assertEqual(json.loads(json.dumps(inf)), inf) + self.assertEqual(json.loads(json.dumps(inf, allow_nan=True), allow_nan=True), inf) # Python 2.5 doesn't have math.isnan - nan = json.loads(json.dumps(NaN)) + nan = json.loads(json.dumps(NaN, allow_nan=True), allow_nan=True) self.assertTrue((0 + nan) != nan) def test_degenerates_ignore(self): @@ -19,6 +19,9 @@ class TestFloat(TestCase): def test_degenerates_deny(self): for f in (PosInf, NegInf, NaN): self.assertRaises(ValueError, json.dumps, f, allow_nan=False) + for s in ('Infinity', '-Infinity', 'NaN'): + self.assertRaises(ValueError, json.loads, s, allow_nan=False) + self.assertRaises(ValueError, json.loads, s) def test_floats(self): for num in [1617161771.7650001, math.pi, math.pi**100, diff --git a/contrib/python/simplejson/py3/simplejson/tests/test_scanstring.py b/contrib/python/simplejson/py3/simplejson/tests/test_scanstring.py index c6c53b81aa..1f54483420 100644 --- a/contrib/python/simplejson/py3/simplejson/tests/test_scanstring.py +++ b/contrib/python/simplejson/py3/simplejson/tests/test_scanstring.py @@ -132,7 +132,9 @@ class TestScanString(TestCase): self.assertRaises(ValueError, scanstring, '\\ud834\\x0123"', 0, None, True) - self.assertRaises(json.JSONDecodeError, scanstring, "\\u-123", 0, None, True) + self.assertRaises(json.JSONDecodeError, scanstring, '\\u-123"', 0, None, True) + # SJ-PT-23-01: Invalid Handling of Broken Unicode Escape Sequences + self.assertRaises(json.JSONDecodeError, scanstring, '\\u EDD"', 0, None, True) def test_issue3623(self): self.assertRaises(ValueError, json.decoder.scanstring, "xxx", 1, diff --git a/contrib/python/simplejson/py3/ya.make b/contrib/python/simplejson/py3/ya.make index cb9c7478a1..18f54d4abd 100644 --- a/contrib/python/simplejson/py3/ya.make +++ b/contrib/python/simplejson/py3/ya.make @@ -2,7 +2,7 @@ PY3_LIBRARY() -VERSION(3.18.4) +VERSION(3.19.2) LICENSE(MIT) diff --git a/contrib/python/traitlets/py3/.dist-info/METADATA b/contrib/python/traitlets/py3/.dist-info/METADATA index caa3b5c529..777822558d 100644 --- a/contrib/python/traitlets/py3/.dist-info/METADATA +++ b/contrib/python/traitlets/py3/.dist-info/METADATA @@ -1,6 +1,6 @@ -Metadata-Version: 2.1 +Metadata-Version: 2.3 Name: traitlets -Version: 5.14.2 +Version: 5.14.3 Summary: Traitlets Python configuration system Project-URL: Homepage, https://github.com/ipython/traitlets Project-URL: Documentation, https://traitlets.readthedocs.io @@ -60,7 +60,7 @@ Requires-Dist: mypy>=1.7.0; extra == 'test' Requires-Dist: pre-commit; extra == 'test' Requires-Dist: pytest-mock; extra == 'test' Requires-Dist: pytest-mypy-testing; extra == 'test' -Requires-Dist: pytest<8.1,>=7.0; extra == 'test' +Requires-Dist: pytest<8.2,>=7.0; extra == 'test' Description-Content-Type: text/markdown # Traitlets diff --git a/contrib/python/traitlets/py3/tests/test_traitlets.py b/contrib/python/traitlets/py3/tests/test_traitlets.py index dfcf3f0f4b..f9f623b4ae 100644 --- a/contrib/python/traitlets/py3/tests/test_traitlets.py +++ b/contrib/python/traitlets/py3/tests/test_traitlets.py @@ -1658,6 +1658,24 @@ class TestList(TraitTestBase): return value +class SetTrait(HasTraits): + value = Set(Unicode()) + + +class TestSet(TraitTestBase): + obj = SetTrait() + + _default_value: t.Set[str] = set() + _good_values = [{"a", "b"}, "ab"] + _bad_values = [1] + + def coerce(self, value): + if isinstance(value, str): + # compatibility handling: convert string to set containing string + value = {value} + return value + + class Foo: pass diff --git a/contrib/python/traitlets/py3/traitlets/_version.py b/contrib/python/traitlets/py3/traitlets/_version.py index 936ce75810..fea66b5e0a 100644 --- a/contrib/python/traitlets/py3/traitlets/_version.py +++ b/contrib/python/traitlets/py3/traitlets/_version.py @@ -7,7 +7,7 @@ import re from typing import List # Version string must appear intact for hatch versioning -__version__ = "5.14.2" +__version__ = "5.14.3" # Build up version_info tuple for backwards compatibility pattern = r"(?P<major>\d+).(?P<minor>\d+).(?P<patch>\d+)(?P<rest>.*)" diff --git a/contrib/python/traitlets/py3/traitlets/traitlets.py b/contrib/python/traitlets/py3/traitlets/traitlets.py index 1d1675ab0c..ecd0d7cc39 100644 --- a/contrib/python/traitlets/py3/traitlets/traitlets.py +++ b/contrib/python/traitlets/py3/traitlets/traitlets.py @@ -3698,12 +3698,7 @@ class Set(Container[t.Set[t.Any]]): def set(self, obj: t.Any, value: t.Any) -> None: if isinstance(value, str): - return super().set( - obj, - set( - value, - ), - ) + return super().set(obj, {value}) else: return super().set(obj, value) diff --git a/contrib/python/traitlets/py3/ya.make b/contrib/python/traitlets/py3/ya.make index 2cd21a7996..ed5c06a2c0 100644 --- a/contrib/python/traitlets/py3/ya.make +++ b/contrib/python/traitlets/py3/ya.make @@ -4,7 +4,7 @@ PY3_LIBRARY() PROVIDES(python_traitlets) -VERSION(5.14.2) +VERSION(5.14.3) LICENSE(BSD-3-Clause) diff --git a/contrib/python/ydb/py3/.dist-info/METADATA b/contrib/python/ydb/py3/.dist-info/METADATA index 6db8a9f068..9842d0216b 100644 --- a/contrib/python/ydb/py3/.dist-info/METADATA +++ b/contrib/python/ydb/py3/.dist-info/METADATA @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: ydb -Version: 3.11.1 +Version: 3.11.3 Summary: YDB Python SDK Home-page: http://github.com/ydb-platform/ydb-python-sdk Author: Yandex LLC diff --git a/contrib/python/ydb/py3/ya.make b/contrib/python/ydb/py3/ya.make index bc2089bef2..b9639b750d 100644 --- a/contrib/python/ydb/py3/ya.make +++ b/contrib/python/ydb/py3/ya.make @@ -2,7 +2,7 @@ PY3_LIBRARY() -VERSION(3.11.1) +VERSION(3.11.3) LICENSE(Apache-2.0) diff --git a/contrib/python/ydb/py3/ydb/_topic_reader/topic_reader_asyncio.py b/contrib/python/ydb/py3/ydb/_topic_reader/topic_reader_asyncio.py index 50684f7cf9..7b3d1cfa10 100644 --- a/contrib/python/ydb/py3/ydb/_topic_reader/topic_reader_asyncio.py +++ b/contrib/python/ydb/py3/ydb/_topic_reader/topic_reader_asyncio.py @@ -8,6 +8,7 @@ from asyncio import Task from collections import deque from typing import Optional, Set, Dict, Union, Callable +import ydb from .. import _apis, issues from .._utilities import AtomicCounter from ..aio import Driver @@ -35,7 +36,7 @@ class TopicReaderError(YdbError): pass -class TopicReaderUnexpectedCodec(YdbError): +class PublicTopicReaderUnexpectedCodecError(YdbError): pass @@ -222,9 +223,7 @@ class ReaderReconnector: async def close(self, flush: bool): if self._stream_reader: - if flush: - await self.flush() - await self._stream_reader.close() + await self._stream_reader.close(flush) for task in self._background_tasks: task.cancel() @@ -339,9 +338,12 @@ class ReaderStream: self._update_token_event.set() self._background_tasks.add(asyncio.create_task(self._read_messages_loop(), name="read_messages_loop")) - self._background_tasks.add(asyncio.create_task(self._decode_batches_loop())) + self._background_tasks.add(asyncio.create_task(self._decode_batches_loop(), name="decode_batches")) if self._get_token_function: self._background_tasks.add(asyncio.create_task(self._update_token_loop(), name="update_token_loop")) + self._background_tasks.add( + asyncio.create_task(self._handle_background_errors(), name="handle_background_errors") + ) async def wait_error(self): raise await self._first_error @@ -411,6 +413,17 @@ class ReaderStream: return waiter + async def _handle_background_errors(self): + done, _ = await asyncio.wait(self._background_tasks, return_when=asyncio.FIRST_EXCEPTION) + for f in done: + f = f # type: asyncio.Future + err = f.exception() + if not isinstance(err, ydb.Error): + old_err = err + err = ydb.Error("Background process failed unexpected") + err.__cause__ = old_err + self._set_first_error(err) + async def _read_messages_loop(self): try: self._stream.write( @@ -602,7 +615,7 @@ class ReaderStream: try: decode_func = self._decoders[batch._codec] except KeyError: - raise TopicReaderUnexpectedCodec("Receive message with unexpected codec: %s" % batch._codec) + raise PublicTopicReaderUnexpectedCodecError("Receive message with unexpected codec: %s" % batch._codec) decode_data_futures = [] for message in batch.messages: @@ -628,9 +641,6 @@ class ReaderStream: return self._first_error.result() async def flush(self): - if self._closed: - raise RuntimeError("Flush on closed Stream") - futures = [] for session in self._partition_sessions.values(): futures.extend(w.future for w in session._ack_waiters) @@ -638,12 +648,15 @@ class ReaderStream: if futures: await asyncio.wait(futures) - async def close(self): + async def close(self, flush: bool): if self._closed: return self._closed = True + if flush: + await self.flush() + self._set_first_error(TopicReaderStreamClosedError()) self._state_changed.set() self._stream.close() diff --git a/contrib/python/ydb/py3/ydb/topic.py b/contrib/python/ydb/py3/ydb/topic.py index 2175af47f7..948bcff4cf 100644 --- a/contrib/python/ydb/py3/ydb/topic.py +++ b/contrib/python/ydb/py3/ydb/topic.py @@ -15,6 +15,7 @@ __all__ = [ "TopicReaderMessage", "TopicReaderSelector", "TopicReaderSettings", + "TopicReaderUnexpectedCodecError", "TopicReaderPartitionExpiredError", "TopicStatWindow", "TopicWriteResult", @@ -49,6 +50,7 @@ from ._topic_reader.topic_reader_sync import TopicReaderSync as TopicReader from ._topic_reader.topic_reader_asyncio import ( PublicAsyncIOReader as TopicReaderAsyncIO, PublicTopicReaderPartitionExpiredError as TopicReaderPartitionExpiredError, + PublicTopicReaderUnexpectedCodecError as TopicReaderUnexpectedCodecError, ) from ._topic_writer.topic_writer import ( # noqa: F401 diff --git a/contrib/python/ydb/py3/ydb/types.py b/contrib/python/ydb/py3/ydb/types.py index f9c6f93645..49792ed39e 100644 --- a/contrib/python/ydb/py3/ydb/types.py +++ b/contrib/python/ydb/py3/ydb/types.py @@ -5,7 +5,7 @@ import abc import enum import json from . import _utilities, _apis -from datetime import date, datetime, timedelta +from datetime import date, datetime, timedelta, timezone import typing import uuid import struct @@ -22,6 +22,7 @@ except ImportError: _SECONDS_IN_DAY = 60 * 60 * 24 _EPOCH = datetime(1970, 1, 1) +_EPOCH_UTC = datetime(1970, 1, 1, tzinfo=timezone.utc) def _from_date(x: ydb_value_pb2.Value, table_client_settings: table.TableClientSettings) -> typing.Union[date, int]: @@ -89,7 +90,11 @@ def _from_timestamp( def _to_timestamp(pb: ydb_value_pb2.Value, value: typing.Union[datetime, int]): if isinstance(value, datetime): - pb.uint64_value = _timedelta_to_microseconds(value - _EPOCH) + if value.tzinfo: + epoch = _EPOCH_UTC + else: + epoch = _EPOCH + pb.uint64_value = _timedelta_to_microseconds(value - epoch) else: pb.uint64_value = value diff --git a/contrib/python/ydb/py3/ydb/ydb_version.py b/contrib/python/ydb/py3/ydb/ydb_version.py index 03dc246c4e..7504dfd9c1 100644 --- a/contrib/python/ydb/py3/ydb/ydb_version.py +++ b/contrib/python/ydb/py3/ydb/ydb_version.py @@ -1 +1 @@ -VERSION = "3.11.1" +VERSION = "3.11.3" diff --git a/contrib/python/zope.interface/py3/.dist-info/METADATA b/contrib/python/zope.interface/py3/.dist-info/METADATA index 551c582ac8..90aae5b9d9 100644 --- a/contrib/python/zope.interface/py3/.dist-info/METADATA +++ b/contrib/python/zope.interface/py3/.dist-info/METADATA @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: zope.interface -Version: 6.2 +Version: 6.3 Summary: Interfaces for Python Home-page: https://github.com/zopefoundation/zope.interface Author: Zope Foundation and Contributors @@ -75,6 +75,12 @@ For detailed documentation, please see https://zopeinterface.readthedocs.io/en/l Changes ========= +6.3 (2024-04-12) +================ + +- Add preliminary support for Python 3.13 as of 3.13a6. + + 6.2 (2024-02-16) ================ diff --git a/contrib/python/zope.interface/py3/ya.make b/contrib/python/zope.interface/py3/ya.make index 514772e2ba..1bc58aab0a 100644 --- a/contrib/python/zope.interface/py3/ya.make +++ b/contrib/python/zope.interface/py3/ya.make @@ -2,7 +2,7 @@ PY3_LIBRARY() -VERSION(6.2) +VERSION(6.3) LICENSE(ZPL-2.1) diff --git a/contrib/python/zope.interface/py3/zope/interface/interface.py b/contrib/python/zope.interface/py3/zope/interface/interface.py index 8143daf3dd..733e3954fe 100644 --- a/contrib/python/zope.interface/py3/zope/interface/interface.py +++ b/contrib/python/zope.interface/py3/zope/interface/interface.py @@ -799,6 +799,9 @@ class InterfaceClass(_InterfaceClassBase): '__qualname__', # __annotations__: PEP 3107 (Python 3.0+) '__annotations__', + # __static_attributes__: Python 3.13a6+ + # https://github.com/python/cpython/pull/115913 + '__static_attributes__', ) and aval is not _decorator_non_return } diff --git a/contrib/restricted/boost/any/include/boost/any.hpp b/contrib/restricted/boost/any/include/boost/any.hpp index f7812eef9f..483498b10e 100644 --- a/contrib/restricted/boost/any/include/boost/any.hpp +++ b/contrib/restricted/boost/any/include/boost/any.hpp @@ -358,7 +358,7 @@ namespace boost } // Copyright Kevlin Henney, 2000, 2001, 2002. All rights reserved. -// Copyright Antony Polukhin, 2013-2023. +// Copyright Antony Polukhin, 2013-2024. // // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at diff --git a/contrib/restricted/boost/any/include/boost/any/bad_any_cast.hpp b/contrib/restricted/boost/any/include/boost/any/bad_any_cast.hpp index ed456021a3..309b8a0b9e 100644 --- a/contrib/restricted/boost/any/include/boost/any/bad_any_cast.hpp +++ b/contrib/restricted/boost/any/include/boost/any/bad_any_cast.hpp @@ -1,4 +1,4 @@ -// Copyright Antony Polukhin, 2020-2023. +// Copyright Antony Polukhin, 2020-2024. // // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at diff --git a/contrib/restricted/boost/any/include/boost/any/detail/placeholder.hpp b/contrib/restricted/boost/any/include/boost/any/detail/placeholder.hpp index 360d78cb08..bf7395c172 100644 --- a/contrib/restricted/boost/any/include/boost/any/detail/placeholder.hpp +++ b/contrib/restricted/boost/any/include/boost/any/detail/placeholder.hpp @@ -1,4 +1,4 @@ -// Copyright Antony Polukhin, 2021-2023. +// Copyright Antony Polukhin, 2021-2024. // // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at diff --git a/contrib/restricted/boost/any/include/boost/any/fwd.hpp b/contrib/restricted/boost/any/include/boost/any/fwd.hpp index 752f3aceff..be70d6008c 100644 --- a/contrib/restricted/boost/any/include/boost/any/fwd.hpp +++ b/contrib/restricted/boost/any/include/boost/any/fwd.hpp @@ -1,4 +1,4 @@ -// Copyright Antony Polukhin, 2021-2023. +// Copyright Antony Polukhin, 2021-2024. // // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at diff --git a/contrib/restricted/boost/any/ya.make b/contrib/restricted/boost/any/ya.make index 4b831e73c3..f2648ff609 100644 --- a/contrib/restricted/boost/any/ya.make +++ b/contrib/restricted/boost/any/ya.make @@ -6,9 +6,9 @@ LICENSE(BSL-1.0) LICENSE_TEXTS(.yandex_meta/licenses.list.txt) -VERSION(1.84.0) +VERSION(1.85.0) -ORIGINAL_SOURCE(https://github.com/boostorg/any/archive/boost-1.84.0.tar.gz) +ORIGINAL_SOURCE(https://github.com/boostorg/any/archive/boost-1.85.0.tar.gz) PEERDIR( contrib/restricted/boost/config diff --git a/contrib/restricted/boost/array/ya.make b/contrib/restricted/boost/array/ya.make index 7e18e9c6af..1c990965fe 100644 --- a/contrib/restricted/boost/array/ya.make +++ b/contrib/restricted/boost/array/ya.make @@ -6,9 +6,9 @@ LICENSE(BSL-1.0) LICENSE_TEXTS(.yandex_meta/licenses.list.txt) -VERSION(1.84.0) +VERSION(1.85.0) -ORIGINAL_SOURCE(https://github.com/boostorg/array/archive/boost-1.84.0.tar.gz) +ORIGINAL_SOURCE(https://github.com/boostorg/array/archive/boost-1.85.0.tar.gz) PEERDIR( contrib/restricted/boost/assert diff --git a/contrib/restricted/boost/assert/include/boost/assert/source_location.hpp b/contrib/restricted/boost/assert/include/boost/assert/source_location.hpp index a265ad5cb8..c4d5f1b173 100644 --- a/contrib/restricted/boost/assert/include/boost/assert/source_location.hpp +++ b/contrib/restricted/boost/assert/include/boost/assert/source_location.hpp @@ -144,6 +144,10 @@ template<class E, class T> std::basic_ostream<E, T> & operator<<( std::basic_ost # define BOOST_CURRENT_LOCATION ::boost::source_location() +#elif defined(BOOST_MSVC) && BOOST_MSVC >= 1935 + +# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCSIG(), __builtin_COLUMN()) + #elif defined(BOOST_MSVC) && BOOST_MSVC >= 1926 // std::source_location::current() is available in -std:c++20, but fails with consteval errors before 19.31, and doesn't produce diff --git a/contrib/restricted/boost/assert/ya.make b/contrib/restricted/boost/assert/ya.make index 46ab40f809..62b683cdd1 100644 --- a/contrib/restricted/boost/assert/ya.make +++ b/contrib/restricted/boost/assert/ya.make @@ -6,9 +6,9 @@ LICENSE(BSL-1.0) LICENSE_TEXTS(.yandex_meta/licenses.list.txt) -VERSION(1.84.0) +VERSION(1.85.0) -ORIGINAL_SOURCE(https://github.com/boostorg/assert/archive/boost-1.84.0.tar.gz) +ORIGINAL_SOURCE(https://github.com/boostorg/assert/archive/boost-1.85.0.tar.gz) PEERDIR( contrib/restricted/boost/config diff --git a/contrib/restricted/boost/atomic/include/boost/atomic/detail/pause.hpp b/contrib/restricted/boost/atomic/include/boost/atomic/detail/pause.hpp index efdfb62b6a..0d47c927aa 100644 --- a/contrib/restricted/boost/atomic/include/boost/atomic/detail/pause.hpp +++ b/contrib/restricted/boost/atomic/include/boost/atomic/detail/pause.hpp @@ -48,6 +48,13 @@ BOOST_FORCEINLINE void pause() BOOST_NOEXCEPT __asm__ __volatile__("pause;" : : : "memory"); #elif (defined(__ARM_ARCH) && __ARM_ARCH >= 8) || defined(__ARM_ARCH_8A__) || defined(__aarch64__) __asm__ __volatile__("yield;" : : : "memory"); +#elif defined(__riscv) && __riscv_xlen == 64 +#if defined(__riscv_zihintpause) + __asm__ __volatile__("pause" : : : "memory"); +#else + /* Encoding of the pause instruction */ + __asm__ __volatile__ (".4byte 0x100000F"); +#endif #endif #endif } diff --git a/contrib/restricted/boost/atomic/ya.make b/contrib/restricted/boost/atomic/ya.make index beac80ecb1..8151509c51 100644 --- a/contrib/restricted/boost/atomic/ya.make +++ b/contrib/restricted/boost/atomic/ya.make @@ -6,9 +6,9 @@ LICENSE(BSL-1.0) LICENSE_TEXTS(.yandex_meta/licenses.list.txt) -VERSION(1.84.0) +VERSION(1.85.0) -ORIGINAL_SOURCE(https://github.com/boostorg/atomic/archive/boost-1.84.0.tar.gz) +ORIGINAL_SOURCE(https://github.com/boostorg/atomic/archive/boost-1.85.0.tar.gz) PEERDIR( contrib/restricted/boost/align diff --git a/contrib/restricted/boost/bind/include/boost/bind/bind.hpp b/contrib/restricted/boost/bind/include/boost/bind/bind.hpp index fd0ee144fd..2d5b454e90 100644 --- a/contrib/restricted/boost/bind/include/boost/bind/bind.hpp +++ b/contrib/restricted/boost/bind/include/boost/bind/bind.hpp @@ -8,46 +8,33 @@ #endif // -// bind.hpp - binds function objects to arguments +// bind.hpp - binds function objects to arguments // -// Copyright (c) 2001-2004 Peter Dimov and Multi Media Ltd. -// Copyright (c) 2001 David Abrahams -// Copyright (c) 2005 Peter Dimov +// Copyright 2001-2005, 2024 Peter Dimov +// Copyright 2001 David Abrahams // // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // -// See http://www.boost.org/libs/bind/bind.html for documentation. +// See http://www.boost.org/libs/bind for documentation. // -#include <boost/bind/detail/requires_cxx11.hpp> -#include <boost/config.hpp> #include <boost/bind/mem_fn.hpp> -#include <boost/type.hpp> -#include <boost/is_placeholder.hpp> #include <boost/bind/arg.hpp> -#include <boost/bind/detail/result_traits.hpp> #include <boost/bind/std_placeholders.hpp> -#include <boost/config/workaround.hpp> +#include <boost/bind/detail/result_traits.hpp> +#include <boost/bind/detail/tuple_for_each.hpp> +#include <boost/bind/detail/integer_sequence.hpp> #include <boost/visit_each.hpp> +#include <boost/is_placeholder.hpp> +#include <boost/type.hpp> #include <boost/core/ref.hpp> -#include <boost/core/enable_if.hpp> -#include <boost/bind/detail/is_same.hpp> - -#if !defined( BOOST_NO_CXX11_RVALUE_REFERENCES ) -#include <utility> // std::forward -#endif - -// Borland-specific bug, visit_each() silently fails to produce code - -#if defined(BOOST_BORLANDC) -# define BOOST_BIND_VISIT_EACH boost::visit_each -#else -# define BOOST_BIND_VISIT_EACH visit_each -#endif - -#include <boost/bind/storage.hpp> +#include <boost/config.hpp> +#include <boost/config/workaround.hpp> +#include <utility> +#include <type_traits> +#include <tuple> #ifdef BOOST_MSVC # pragma warning(push) @@ -64,22 +51,22 @@ namespace _bi // implementation details // ref_compare -template<class T> bool ref_compare( T const & a, T const & b, long ) +template<class T> bool ref_compare( T const & a, T const & b ) { return a == b; } -template<int I> bool ref_compare( arg<I> const &, arg<I> const &, int ) +template<int I> bool ref_compare( arg<I> const &, arg<I> const & ) { return true; } -template<int I> bool ref_compare( arg<I> (*) (), arg<I> (*) (), int ) +template<int I> bool ref_compare( arg<I> (*) (), arg<I> (*) () ) { return true; } -template<class T> bool ref_compare( reference_wrapper<T> const & a, reference_wrapper<T> const & b, int ) +template<class T> bool ref_compare( reference_wrapper<T> const & a, reference_wrapper<T> const & b ) { return a.get_pointer() == b.get_pointer(); } @@ -88,7 +75,7 @@ template<class T> bool ref_compare( reference_wrapper<T> const & a, reference_wr template<class R, class F, class L> class bind_t; -template<class R, class F, class L> bool ref_compare( bind_t<R, F, L> const & a, bind_t<R, F, L> const & b, int ) +template<class R, class F, class L> bool ref_compare( bind_t<R, F, L> const & a, bind_t<R, F, L> const & b ) { return a.compare( b ); } @@ -116,7 +103,7 @@ private: // ref_compare for weak_ptr -template<class T> bool ref_compare( value< weak_ptr<T> > const & a, value< weak_ptr<T> > const & b, int ) +template<class T> bool ref_compare( value< weak_ptr<T> > const & a, value< weak_ptr<T> > const & b ) { return !(a.get() < b.get()) && !(b.get() < a.get()); } @@ -145,1110 +132,170 @@ template<class F> struct unwrapper } }; -// listN +// list -class list0 +template<class V> struct accept_lambda { -public: - - list0() {} - - template<class T> T & operator[] (_bi::value<T> & v) const { return v.get(); } - - template<class T> T const & operator[] (_bi::value<T> const & v) const { return v.get(); } - - template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); } - - template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); } - - template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); } + V& v_; - template<class R, class F, class A> R operator()(type<R>, F & f, A &, long) - { - return unwrapper<F>::unwrap(f, 0)(); - } - - template<class R, class F, class A> R operator()(type<R>, F const & f, A &, long) const - { - return unwrapper<F const>::unwrap(f, 0)(); - } - - template<class F, class A> void operator()(type<void>, F & f, A &, int) - { - unwrapper<F>::unwrap(f, 0)(); - } - - template<class F, class A> void operator()(type<void>, F const & f, A &, int) const - { - unwrapper<F const>::unwrap(f, 0)(); - } - - template<class V> void accept(V &) const - { - } + explicit accept_lambda( V& v ): v_( v ) {} - bool operator==(list0 const &) const + template<class A> void operator()( A& a ) const { - return true; + visit_each( v_, a, 0 ); } }; -#ifdef BOOST_MSVC -// MSVC is bright enough to realise that the parameter rhs -// in operator==may be unused for some template argument types: -#pragma warning(push) -#pragma warning(disable:4100) -#endif - -template< class A1 > class list1: private storage1< A1 > +struct equal_lambda { -private: - - typedef storage1< A1 > base_type; - -public: - - explicit list1( A1 a1 ): base_type( a1 ) {} - - A1 operator[] (boost::arg<1>) const { return base_type::a1_; } + bool result; - A1 operator[] (boost::arg<1> (*) ()) const { return base_type::a1_; } + equal_lambda(): result( true ) {} - template<class T> T & operator[] ( _bi::value<T> & v ) const { return v.get(); } - - template<class T> T const & operator[] ( _bi::value<T> const & v ) const { return v.get(); } - - template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); } - - template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); } - - template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); } - - template<class R, class F, class A> R operator()(type<R>, F & f, A & a, long) - { - return unwrapper<F>::unwrap(f, 0)(a[base_type::a1_]); - } - - template<class R, class F, class A> R operator()(type<R>, F const & f, A & a, long) const - { - return unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_]); - } - - template<class F, class A> void operator()(type<void>, F & f, A & a, int) - { - unwrapper<F>::unwrap(f, 0)(a[base_type::a1_]); - } - - template<class F, class A> void operator()(type<void>, F const & f, A & a, int) const - { - unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_]); - } - - template<class V> void accept(V & v) const - { - base_type::accept(v); - } - - bool operator==(list1 const & rhs) const + template<class A1, class A2> void operator()( A1& a1, A2& a2 ) { - return ref_compare(base_type::a1_, rhs.a1_, 0); + result = result && ref_compare( a1, a2 ); } }; struct logical_and; struct logical_or; -template< class A1, class A2 > class list2: private storage2< A1, A2 > -{ -private: - - typedef storage2< A1, A2 > base_type; - -public: - - list2( A1 a1, A2 a2 ): base_type( a1, a2 ) {} - - A1 operator[] (boost::arg<1>) const { return base_type::a1_; } - A2 operator[] (boost::arg<2>) const { return base_type::a2_; } - - A1 operator[] (boost::arg<1> (*) ()) const { return base_type::a1_; } - A2 operator[] (boost::arg<2> (*) ()) const { return base_type::a2_; } - - template<class T> T & operator[] (_bi::value<T> & v) const { return v.get(); } - - template<class T> T const & operator[] (_bi::value<T> const & v) const { return v.get(); } - - template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); } - - template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); } - - template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); } - - template<class R, class F, class A> R operator()(type<R>, F & f, A & a, long) - { - return unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_]); - } - - template<class R, class F, class A> R operator()(type<R>, F const & f, A & a, long) const - { - return unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_]); - } - - template<class F, class A> void operator()(type<void>, F & f, A & a, int) - { - unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_]); - } - - template<class F, class A> void operator()(type<void>, F const & f, A & a, int) const - { - unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_]); - } - - template<class A> bool operator()( type<bool>, logical_and & /*f*/, A & a, int ) - { - return a[ base_type::a1_ ] && a[ base_type::a2_ ]; - } - - template<class A> bool operator()( type<bool>, logical_and const & /*f*/, A & a, int ) const - { - return a[ base_type::a1_ ] && a[ base_type::a2_ ]; - } - - template<class A> bool operator()( type<bool>, logical_or & /*f*/, A & a, int ) - { - return a[ base_type::a1_ ] || a[ base_type::a2_ ]; - } - - template<class A> bool operator()( type<bool>, logical_or const & /*f*/, A & a, int ) const - { - return a[ base_type::a1_ ] || a[ base_type::a2_ ]; - } - - template<class V> void accept(V & v) const - { - base_type::accept(v); - } - - bool operator==(list2 const & rhs) const - { - return ref_compare(base_type::a1_, rhs.a1_, 0) && ref_compare(base_type::a2_, rhs.a2_, 0); - } -}; - -template< class A1, class A2, class A3 > class list3: private storage3< A1, A2, A3 > -{ -private: - - typedef storage3< A1, A2, A3 > base_type; - -public: - - list3( A1 a1, A2 a2, A3 a3 ): base_type( a1, a2, a3 ) {} - - A1 operator[] (boost::arg<1>) const { return base_type::a1_; } - A2 operator[] (boost::arg<2>) const { return base_type::a2_; } - A3 operator[] (boost::arg<3>) const { return base_type::a3_; } - - A1 operator[] (boost::arg<1> (*) ()) const { return base_type::a1_; } - A2 operator[] (boost::arg<2> (*) ()) const { return base_type::a2_; } - A3 operator[] (boost::arg<3> (*) ()) const { return base_type::a3_; } - - template<class T> T & operator[] (_bi::value<T> & v) const { return v.get(); } - - template<class T> T const & operator[] (_bi::value<T> const & v) const { return v.get(); } - - template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); } - - template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); } - - template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); } - - template<class R, class F, class A> R operator()(type<R>, F & f, A & a, long) - { - return unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_]); - } - - template<class R, class F, class A> R operator()(type<R>, F const & f, A & a, long) const - { - return unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_]); - } - - template<class F, class A> void operator()(type<void>, F & f, A & a, int) - { - unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_]); - } - - template<class F, class A> void operator()(type<void>, F const & f, A & a, int) const - { - unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_]); - } - - template<class V> void accept(V & v) const - { - base_type::accept(v); - } - - bool operator==(list3 const & rhs) const - { - return - - ref_compare( base_type::a1_, rhs.a1_, 0 ) && - ref_compare( base_type::a2_, rhs.a2_, 0 ) && - ref_compare( base_type::a3_, rhs.a3_, 0 ); - } -}; - -template< class A1, class A2, class A3, class A4 > class list4: private storage4< A1, A2, A3, A4 > -{ -private: - - typedef storage4< A1, A2, A3, A4 > base_type; - -public: - - list4( A1 a1, A2 a2, A3 a3, A4 a4 ): base_type( a1, a2, a3, a4 ) {} - - A1 operator[] (boost::arg<1>) const { return base_type::a1_; } - A2 operator[] (boost::arg<2>) const { return base_type::a2_; } - A3 operator[] (boost::arg<3>) const { return base_type::a3_; } - A4 operator[] (boost::arg<4>) const { return base_type::a4_; } - - A1 operator[] (boost::arg<1> (*) ()) const { return base_type::a1_; } - A2 operator[] (boost::arg<2> (*) ()) const { return base_type::a2_; } - A3 operator[] (boost::arg<3> (*) ()) const { return base_type::a3_; } - A4 operator[] (boost::arg<4> (*) ()) const { return base_type::a4_; } - - template<class T> T & operator[] (_bi::value<T> & v) const { return v.get(); } - - template<class T> T const & operator[] (_bi::value<T> const & v) const { return v.get(); } - - template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); } - - template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); } - - template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); } - - template<class R, class F, class A> R operator()(type<R>, F & f, A & a, long) - { - return unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_]); - } - - template<class R, class F, class A> R operator()(type<R>, F const & f, A & a, long) const - { - return unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_]); - } - - template<class F, class A> void operator()(type<void>, F & f, A & a, int) - { - unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_]); - } - - template<class F, class A> void operator()(type<void>, F const & f, A & a, int) const - { - unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_]); - } - - template<class V> void accept(V & v) const - { - base_type::accept(v); - } - - bool operator==(list4 const & rhs) const - { - return - - ref_compare( base_type::a1_, rhs.a1_, 0 ) && - ref_compare( base_type::a2_, rhs.a2_, 0 ) && - ref_compare( base_type::a3_, rhs.a3_, 0 ) && - ref_compare( base_type::a4_, rhs.a4_, 0 ); - } -}; - -template< class A1, class A2, class A3, class A4, class A5 > class list5: private storage5< A1, A2, A3, A4, A5 > -{ -private: - - typedef storage5< A1, A2, A3, A4, A5 > base_type; - -public: - - list5( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5 ): base_type( a1, a2, a3, a4, a5 ) {} - - A1 operator[] (boost::arg<1>) const { return base_type::a1_; } - A2 operator[] (boost::arg<2>) const { return base_type::a2_; } - A3 operator[] (boost::arg<3>) const { return base_type::a3_; } - A4 operator[] (boost::arg<4>) const { return base_type::a4_; } - A5 operator[] (boost::arg<5>) const { return base_type::a5_; } - - A1 operator[] (boost::arg<1> (*) ()) const { return base_type::a1_; } - A2 operator[] (boost::arg<2> (*) ()) const { return base_type::a2_; } - A3 operator[] (boost::arg<3> (*) ()) const { return base_type::a3_; } - A4 operator[] (boost::arg<4> (*) ()) const { return base_type::a4_; } - A5 operator[] (boost::arg<5> (*) ()) const { return base_type::a5_; } - - template<class T> T & operator[] (_bi::value<T> & v) const { return v.get(); } - - template<class T> T const & operator[] (_bi::value<T> const & v) const { return v.get(); } - - template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); } - - template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); } - - template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); } - - template<class R, class F, class A> R operator()(type<R>, F & f, A & a, long) - { - return unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_]); - } - - template<class R, class F, class A> R operator()(type<R>, F const & f, A & a, long) const - { - return unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_]); - } - - template<class F, class A> void operator()(type<void>, F & f, A & a, int) - { - unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_]); - } - - template<class F, class A> void operator()(type<void>, F const & f, A & a, int) const - { - unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_]); - } - - template<class V> void accept(V & v) const - { - base_type::accept(v); - } - - bool operator==(list5 const & rhs) const - { - return - - ref_compare( base_type::a1_, rhs.a1_, 0 ) && - ref_compare( base_type::a2_, rhs.a2_, 0 ) && - ref_compare( base_type::a3_, rhs.a3_, 0 ) && - ref_compare( base_type::a4_, rhs.a4_, 0 ) && - ref_compare( base_type::a5_, rhs.a5_, 0 ); - } -}; - -template<class A1, class A2, class A3, class A4, class A5, class A6> class list6: private storage6< A1, A2, A3, A4, A5, A6 > -{ -private: - - typedef storage6< A1, A2, A3, A4, A5, A6 > base_type; - -public: - - list6( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6 ): base_type( a1, a2, a3, a4, a5, a6 ) {} - - A1 operator[] (boost::arg<1>) const { return base_type::a1_; } - A2 operator[] (boost::arg<2>) const { return base_type::a2_; } - A3 operator[] (boost::arg<3>) const { return base_type::a3_; } - A4 operator[] (boost::arg<4>) const { return base_type::a4_; } - A5 operator[] (boost::arg<5>) const { return base_type::a5_; } - A6 operator[] (boost::arg<6>) const { return base_type::a6_; } - - A1 operator[] (boost::arg<1> (*) ()) const { return base_type::a1_; } - A2 operator[] (boost::arg<2> (*) ()) const { return base_type::a2_; } - A3 operator[] (boost::arg<3> (*) ()) const { return base_type::a3_; } - A4 operator[] (boost::arg<4> (*) ()) const { return base_type::a4_; } - A5 operator[] (boost::arg<5> (*) ()) const { return base_type::a5_; } - A6 operator[] (boost::arg<6> (*) ()) const { return base_type::a6_; } - - template<class T> T & operator[] (_bi::value<T> & v) const { return v.get(); } - - template<class T> T const & operator[] (_bi::value<T> const & v) const { return v.get(); } - - template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); } - - template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); } - - template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); } - - template<class R, class F, class A> R operator()(type<R>, F & f, A & a, long) - { - return unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_]); - } - - template<class R, class F, class A> R operator()(type<R>, F const & f, A & a, long) const - { - return unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_]); - } - - template<class F, class A> void operator()(type<void>, F & f, A & a, int) - { - unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_]); - } - - template<class F, class A> void operator()(type<void>, F const & f, A & a, int) const - { - unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_]); - } - - template<class V> void accept(V & v) const - { - base_type::accept(v); - } - - bool operator==(list6 const & rhs) const - { - return - - ref_compare( base_type::a1_, rhs.a1_, 0 ) && - ref_compare( base_type::a2_, rhs.a2_, 0 ) && - ref_compare( base_type::a3_, rhs.a3_, 0 ) && - ref_compare( base_type::a4_, rhs.a4_, 0 ) && - ref_compare( base_type::a5_, rhs.a5_, 0 ) && - ref_compare( base_type::a6_, rhs.a6_, 0 ); - } -}; - -template<class A1, class A2, class A3, class A4, class A5, class A6, class A7> class list7: private storage7< A1, A2, A3, A4, A5, A6, A7 > -{ -private: - - typedef storage7< A1, A2, A3, A4, A5, A6, A7 > base_type; - -public: - - list7( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7 ): base_type( a1, a2, a3, a4, a5, a6, a7 ) {} - - A1 operator[] (boost::arg<1>) const { return base_type::a1_; } - A2 operator[] (boost::arg<2>) const { return base_type::a2_; } - A3 operator[] (boost::arg<3>) const { return base_type::a3_; } - A4 operator[] (boost::arg<4>) const { return base_type::a4_; } - A5 operator[] (boost::arg<5>) const { return base_type::a5_; } - A6 operator[] (boost::arg<6>) const { return base_type::a6_; } - A7 operator[] (boost::arg<7>) const { return base_type::a7_; } - - A1 operator[] (boost::arg<1> (*) ()) const { return base_type::a1_; } - A2 operator[] (boost::arg<2> (*) ()) const { return base_type::a2_; } - A3 operator[] (boost::arg<3> (*) ()) const { return base_type::a3_; } - A4 operator[] (boost::arg<4> (*) ()) const { return base_type::a4_; } - A5 operator[] (boost::arg<5> (*) ()) const { return base_type::a5_; } - A6 operator[] (boost::arg<6> (*) ()) const { return base_type::a6_; } - A7 operator[] (boost::arg<7> (*) ()) const { return base_type::a7_; } - - template<class T> T & operator[] (_bi::value<T> & v) const { return v.get(); } - - template<class T> T const & operator[] (_bi::value<T> const & v) const { return v.get(); } - - template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); } - - template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); } - - template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); } - - template<class R, class F, class A> R operator()(type<R>, F & f, A & a, long) - { - return unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_], a[base_type::a7_]); - } - - template<class R, class F, class A> R operator()(type<R>, F const & f, A & a, long) const - { - return unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_], a[base_type::a7_]); - } - - template<class F, class A> void operator()(type<void>, F & f, A & a, int) - { - unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_], a[base_type::a7_]); - } - - template<class F, class A> void operator()(type<void>, F const & f, A & a, int) const - { - unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_], a[base_type::a7_]); - } - - template<class V> void accept(V & v) const - { - base_type::accept(v); - } - - bool operator==(list7 const & rhs) const - { - return - - ref_compare( base_type::a1_, rhs.a1_, 0 ) && - ref_compare( base_type::a2_, rhs.a2_, 0 ) && - ref_compare( base_type::a3_, rhs.a3_, 0 ) && - ref_compare( base_type::a4_, rhs.a4_, 0 ) && - ref_compare( base_type::a5_, rhs.a5_, 0 ) && - ref_compare( base_type::a6_, rhs.a6_, 0 ) && - ref_compare( base_type::a7_, rhs.a7_, 0 ); - } -}; - -template< class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8 > class list8: private storage8< A1, A2, A3, A4, A5, A6, A7, A8 > -{ -private: - - typedef storage8< A1, A2, A3, A4, A5, A6, A7, A8 > base_type; - -public: - - list8( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8 ): base_type( a1, a2, a3, a4, a5, a6, a7, a8 ) {} - - A1 operator[] (boost::arg<1>) const { return base_type::a1_; } - A2 operator[] (boost::arg<2>) const { return base_type::a2_; } - A3 operator[] (boost::arg<3>) const { return base_type::a3_; } - A4 operator[] (boost::arg<4>) const { return base_type::a4_; } - A5 operator[] (boost::arg<5>) const { return base_type::a5_; } - A6 operator[] (boost::arg<6>) const { return base_type::a6_; } - A7 operator[] (boost::arg<7>) const { return base_type::a7_; } - A8 operator[] (boost::arg<8>) const { return base_type::a8_; } - - A1 operator[] (boost::arg<1> (*) ()) const { return base_type::a1_; } - A2 operator[] (boost::arg<2> (*) ()) const { return base_type::a2_; } - A3 operator[] (boost::arg<3> (*) ()) const { return base_type::a3_; } - A4 operator[] (boost::arg<4> (*) ()) const { return base_type::a4_; } - A5 operator[] (boost::arg<5> (*) ()) const { return base_type::a5_; } - A6 operator[] (boost::arg<6> (*) ()) const { return base_type::a6_; } - A7 operator[] (boost::arg<7> (*) ()) const { return base_type::a7_; } - A8 operator[] (boost::arg<8> (*) ()) const { return base_type::a8_; } - - template<class T> T & operator[] (_bi::value<T> & v) const { return v.get(); } - - template<class T> T const & operator[] (_bi::value<T> const & v) const { return v.get(); } - - template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); } - - template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); } - - template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); } - - template<class R, class F, class A> R operator()(type<R>, F & f, A & a, long) - { - return unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_], a[base_type::a7_], a[base_type::a8_]); - } - - template<class R, class F, class A> R operator()(type<R>, F const & f, A & a, long) const - { - return unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_], a[base_type::a7_], a[base_type::a8_]); - } - - template<class F, class A> void operator()(type<void>, F & f, A & a, int) - { - unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_], a[base_type::a7_], a[base_type::a8_]); - } - - template<class F, class A> void operator()(type<void>, F const & f, A & a, int) const - { - unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_], a[base_type::a7_], a[base_type::a8_]); - } - - template<class V> void accept(V & v) const - { - base_type::accept(v); - } - - bool operator==(list8 const & rhs) const - { - return - - ref_compare( base_type::a1_, rhs.a1_, 0 ) && - ref_compare( base_type::a2_, rhs.a2_, 0 ) && - ref_compare( base_type::a3_, rhs.a3_, 0 ) && - ref_compare( base_type::a4_, rhs.a4_, 0 ) && - ref_compare( base_type::a5_, rhs.a5_, 0 ) && - ref_compare( base_type::a6_, rhs.a6_, 0 ) && - ref_compare( base_type::a7_, rhs.a7_, 0 ) && - ref_compare( base_type::a8_, rhs.a8_, 0 ); - } -}; - -template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> class list9: private storage9< A1, A2, A3, A4, A5, A6, A7, A8, A9 > +template<class... A> class list { private: - typedef storage9< A1, A2, A3, A4, A5, A6, A7, A8, A9 > base_type; + typedef std::tuple<A...> data_type; + data_type data_; public: - list9( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9 ): base_type( a1, a2, a3, a4, a5, a6, a7, a8, a9 ) {} - - A1 operator[] (boost::arg<1>) const { return base_type::a1_; } - A2 operator[] (boost::arg<2>) const { return base_type::a2_; } - A3 operator[] (boost::arg<3>) const { return base_type::a3_; } - A4 operator[] (boost::arg<4>) const { return base_type::a4_; } - A5 operator[] (boost::arg<5>) const { return base_type::a5_; } - A6 operator[] (boost::arg<6>) const { return base_type::a6_; } - A7 operator[] (boost::arg<7>) const { return base_type::a7_; } - A8 operator[] (boost::arg<8>) const { return base_type::a8_; } - A9 operator[] (boost::arg<9>) const { return base_type::a9_; } - - A1 operator[] (boost::arg<1> (*) ()) const { return base_type::a1_; } - A2 operator[] (boost::arg<2> (*) ()) const { return base_type::a2_; } - A3 operator[] (boost::arg<3> (*) ()) const { return base_type::a3_; } - A4 operator[] (boost::arg<4> (*) ()) const { return base_type::a4_; } - A5 operator[] (boost::arg<5> (*) ()) const { return base_type::a5_; } - A6 operator[] (boost::arg<6> (*) ()) const { return base_type::a6_; } - A7 operator[] (boost::arg<7> (*) ()) const { return base_type::a7_; } - A8 operator[] (boost::arg<8> (*) ()) const { return base_type::a8_; } - A9 operator[] (boost::arg<9> (*) ()) const { return base_type::a9_; } - - template<class T> T & operator[] (_bi::value<T> & v) const { return v.get(); } - - template<class T> T const & operator[] (_bi::value<T> const & v) const { return v.get(); } - - template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); } - - template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); } + list( A... a ): data_( a... ) {} - template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); } - - template<class R, class F, class A> R operator()(type<R>, F & f, A & a, long) - { - return unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_], a[base_type::a7_], a[base_type::a8_], a[base_type::a9_]); - } - - template<class R, class F, class A> R operator()(type<R>, F const & f, A & a, long) const - { - return unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_], a[base_type::a7_], a[base_type::a8_], a[base_type::a9_]); - } +#if defined(BOOST_MSVC) +# pragma warning( push ) +# pragma warning( disable: 4100 ) // unreferenced formal parameter 'a2' +#endif - template<class F, class A> void operator()(type<void>, F & f, A & a, int) + template<class R, class F, class A2, std::size_t... I> R call_impl( type<R>, F & f, A2 & a2, _bi::index_sequence<I...> ) { - unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_], a[base_type::a7_], a[base_type::a8_], a[base_type::a9_]); + return unwrapper<F>::unwrap( f, 0 )( a2[ std::get<I>( data_ ) ]... ); } - template<class F, class A> void operator()(type<void>, F const & f, A & a, int) const + template<class R, class F, class A2, std::size_t... I> R call_impl( type<R>, F & f, A2 & a2, _bi::index_sequence<I...> ) const { - unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_], a[base_type::a7_], a[base_type::a8_], a[base_type::a9_]); + return unwrapper<F>::unwrap( f, 0 )( a2[ std::get<I>( data_ ) ]... ); } - template<class V> void accept(V & v) const + template<class F, class A2, std::size_t... I> void call_impl( type<void>, F & f, A2 & a2, _bi::index_sequence<I...> ) { - base_type::accept(v); + unwrapper<F>::unwrap( f, 0 )( a2[ std::get<I>( data_ ) ]... ); } - bool operator==(list9 const & rhs) const + template<class F, class A2, std::size_t... I> void call_impl( type<void>, F & f, A2 & a2, _bi::index_sequence<I...> ) const { - return - - ref_compare( base_type::a1_, rhs.a1_, 0 ) && - ref_compare( base_type::a2_, rhs.a2_, 0 ) && - ref_compare( base_type::a3_, rhs.a3_, 0 ) && - ref_compare( base_type::a4_, rhs.a4_, 0 ) && - ref_compare( base_type::a5_, rhs.a5_, 0 ) && - ref_compare( base_type::a6_, rhs.a6_, 0 ) && - ref_compare( base_type::a7_, rhs.a7_, 0 ) && - ref_compare( base_type::a8_, rhs.a8_, 0 ) && - ref_compare( base_type::a9_, rhs.a9_, 0 ); + unwrapper<F>::unwrap( f, 0 )( a2[ std::get<I>( data_ ) ]... ); } -}; -#ifdef BOOST_MSVC -#pragma warning(pop) +#if defined(BOOST_MSVC) +# pragma warning( pop ) #endif -// bind_t - -#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) && !(defined(BOOST_GCC) && BOOST_GCC < 40600) - -template< class A1 > class rrlist1 -{ -private: - - A1 & a1_; // not A1&& because of msvc-10.0 - -public: - - explicit rrlist1( A1 & a1 ): a1_( a1 ) {} - - A1 && operator[] (boost::arg<1>) const { return std::forward<A1>( a1_ ); } // not static_cast because of g++ 4.9 - - A1 && operator[] (boost::arg<1> (*) ()) const { return std::forward<A1>( a1_ ); } - - template<class T> T & operator[] ( _bi::value<T> & v ) const { return v.get(); } - - template<class T> T const & operator[] ( _bi::value<T> const & v ) const { return v.get(); } - - template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); } - - template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const - { - rrlist1<A1&> a( a1_ ); - return b.eval( a ); - } - - template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const - { - rrlist1<A1&> a( a1_ ); - return b.eval( a ); - } -}; - -template< class A1, class A2 > class rrlist2 -{ -private: - - A1 & a1_; - A2 & a2_; - -public: - - rrlist2( A1 & a1, A2 & a2 ): a1_( a1 ), a2_( a2 ) {} - - A1 && operator[] (boost::arg<1>) const { return std::forward<A1>( a1_ ); } - A2 && operator[] (boost::arg<2>) const { return std::forward<A2>( a2_ ); } - - A1 && operator[] (boost::arg<1> (*) ()) const { return std::forward<A1>( a1_ ); } - A2 && operator[] (boost::arg<2> (*) ()) const { return std::forward<A2>( a2_ ); } - - template<class T> T & operator[] ( _bi::value<T> & v ) const { return v.get(); } - - template<class T> T const & operator[] ( _bi::value<T> const & v ) const { return v.get(); } - - template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); } + // - template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const + template<class R, class F, class A2> R operator()( type<R>, F & f, A2 & a2 ) { - rrlist2<A1&, A2&> a( a1_, a2_ ); - return b.eval( a ); + return call_impl( type<R>(), f, a2, _bi::index_sequence_for<A...>() ); } - template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const + template<class R, class F, class A2> R operator()( type<R>, F & f, A2 & a2 ) const { - rrlist2<A1&, A2&> a( a1_, a2_ ); - return b.eval( a ); + return call_impl( type<R>(), f, a2, _bi::index_sequence_for<A...>() ); } -}; - -template< class A1, class A2, class A3 > class rrlist3 -{ -private: - - A1 & a1_; - A2 & a2_; - A3 & a3_; - -public: - - rrlist3( A1 & a1, A2 & a2, A3 & a3 ): a1_( a1 ), a2_( a2 ), a3_( a3 ) {} - - A1 && operator[] (boost::arg<1>) const { return std::forward<A1>( a1_ ); } - A2 && operator[] (boost::arg<2>) const { return std::forward<A2>( a2_ ); } - A3 && operator[] (boost::arg<3>) const { return std::forward<A3>( a3_ ); } - - A1 && operator[] (boost::arg<1> (*) ()) const { return std::forward<A1>( a1_ ); } - A2 && operator[] (boost::arg<2> (*) ()) const { return std::forward<A2>( a2_ ); } - A3 && operator[] (boost::arg<3> (*) ()) const { return std::forward<A3>( a3_ ); } - - template<class T> T & operator[] ( _bi::value<T> & v ) const { return v.get(); } - - template<class T> T const & operator[] ( _bi::value<T> const & v ) const { return v.get(); } - template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); } + // - template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const + template<class A2> bool operator()( type<bool>, logical_and & /*f*/, A2 & a2 ) { - rrlist3<A1&, A2&, A3&> a( a1_, a2_, a3_ ); - return b.eval( a ); + static_assert( sizeof...(A) == 2, "operator&& must have two arguments" ); + return a2[ std::get<0>( data_ ) ] && a2[ std::get<1>( data_ ) ]; } - template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const + template<class A2> bool operator()( type<bool>, logical_and const & /*f*/, A2 & a2 ) const { - rrlist3<A1&, A2&, A3&> a( a1_, a2_, a3_ ); - return b.eval( a ); + static_assert( sizeof...(A) == 2, "operator&& must have two arguments" ); + return a2[ std::get<0>( data_ ) ] && a2[ std::get<1>( data_ ) ]; } -}; - -template< class A1, class A2, class A3, class A4 > class rrlist4 -{ -private: - - A1 & a1_; - A2 & a2_; - A3 & a3_; - A4 & a4_; - -public: - - rrlist4( A1 & a1, A2 & a2, A3 & a3, A4 & a4 ): a1_( a1 ), a2_( a2 ), a3_( a3 ), a4_( a4 ) {} - A1 && operator[] (boost::arg<1>) const { return std::forward<A1>( a1_ ); } - A2 && operator[] (boost::arg<2>) const { return std::forward<A2>( a2_ ); } - A3 && operator[] (boost::arg<3>) const { return std::forward<A3>( a3_ ); } - A4 && operator[] (boost::arg<4>) const { return std::forward<A4>( a4_ ); } - - A1 && operator[] (boost::arg<1> (*) ()) const { return std::forward<A1>( a1_ ); } - A2 && operator[] (boost::arg<2> (*) ()) const { return std::forward<A2>( a2_ ); } - A3 && operator[] (boost::arg<3> (*) ()) const { return std::forward<A3>( a3_ ); } - A4 && operator[] (boost::arg<4> (*) ()) const { return std::forward<A4>( a4_ ); } - - template<class T> T & operator[] ( _bi::value<T> & v ) const { return v.get(); } - - template<class T> T const & operator[] ( _bi::value<T> const & v ) const { return v.get(); } - - template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); } - - template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const + template<class A2> bool operator()( type<bool>, logical_or & /*f*/, A2 & a2 ) { - rrlist4<A1&, A2&, A3&, A4&> a( a1_, a2_, a3_, a4_ ); - return b.eval( a ); + static_assert( sizeof...(A) == 2, "operator|| must have two arguments" ); + return a2[ std::get<0>( data_ ) ] || a2[ std::get<1>( data_ ) ]; } - template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const + template<class A2> bool operator()( type<bool>, logical_or const & /*f*/, A2 & a2 ) const { - rrlist4<A1&, A2&, A3&, A4&> a( a1_, a2_, a3_, a4_ ); - return b.eval( a ); + static_assert( sizeof...(A) == 2, "operator|| must have two arguments" ); + return a2[ std::get<0>( data_ ) ] || a2[ std::get<1>( data_ ) ]; } -}; - -template< class A1, class A2, class A3, class A4, class A5 > class rrlist5 -{ -private: - - A1 & a1_; - A2 & a2_; - A3 & a3_; - A4 & a4_; - A5 & a5_; -public: - - rrlist5( A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5 ): a1_( a1 ), a2_( a2 ), a3_( a3 ), a4_( a4 ), a5_( a5 ) {} - - A1 && operator[] (boost::arg<1>) const { return std::forward<A1>( a1_ ); } - A2 && operator[] (boost::arg<2>) const { return std::forward<A2>( a2_ ); } - A3 && operator[] (boost::arg<3>) const { return std::forward<A3>( a3_ ); } - A4 && operator[] (boost::arg<4>) const { return std::forward<A4>( a4_ ); } - A5 && operator[] (boost::arg<5>) const { return std::forward<A5>( a5_ ); } - - A1 && operator[] (boost::arg<1> (*) ()) const { return std::forward<A1>( a1_ ); } - A2 && operator[] (boost::arg<2> (*) ()) const { return std::forward<A2>( a2_ ); } - A3 && operator[] (boost::arg<3> (*) ()) const { return std::forward<A3>( a3_ ); } - A4 && operator[] (boost::arg<4> (*) ()) const { return std::forward<A4>( a4_ ); } - A5 && operator[] (boost::arg<5> (*) ()) const { return std::forward<A5>( a5_ ); } - - template<class T> T & operator[] ( _bi::value<T> & v ) const { return v.get(); } - - template<class T> T const & operator[] ( _bi::value<T> const & v ) const { return v.get(); } - - template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); } + // - template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const + template<class V> void accept( V & v ) const { - rrlist5<A1&, A2&, A3&, A4&, A5&> a( a1_, a2_, a3_, a4_, a5_ ); - return b.eval( a ); + _bi::tuple_for_each( accept_lambda<V>( v ), data_ ); } - template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const + bool operator==( list const & rhs ) const { - rrlist5<A1&, A2&, A3&, A4&, A5&> a( a1_, a2_, a3_, a4_, a5_ ); - return b.eval( a ); + return _bi::tuple_for_each( equal_lambda(), data_, rhs.data_ ).result; } }; -template< class A1, class A2, class A3, class A4, class A5, class A6 > class rrlist6 -{ -private: - - A1 & a1_; - A2 & a2_; - A3 & a3_; - A4 & a4_; - A5 & a5_; - A6 & a6_; - -public: - - rrlist6( A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6 ): a1_( a1 ), a2_( a2 ), a3_( a3 ), a4_( a4 ), a5_( a5 ), a6_( a6 ) {} - - A1 && operator[] (boost::arg<1>) const { return std::forward<A1>( a1_ ); } - A2 && operator[] (boost::arg<2>) const { return std::forward<A2>( a2_ ); } - A3 && operator[] (boost::arg<3>) const { return std::forward<A3>( a3_ ); } - A4 && operator[] (boost::arg<4>) const { return std::forward<A4>( a4_ ); } - A5 && operator[] (boost::arg<5>) const { return std::forward<A5>( a5_ ); } - A6 && operator[] (boost::arg<6>) const { return std::forward<A6>( a6_ ); } - - A1 && operator[] (boost::arg<1> (*) ()) const { return std::forward<A1>( a1_ ); } - A2 && operator[] (boost::arg<2> (*) ()) const { return std::forward<A2>( a2_ ); } - A3 && operator[] (boost::arg<3> (*) ()) const { return std::forward<A3>( a3_ ); } - A4 && operator[] (boost::arg<4> (*) ()) const { return std::forward<A4>( a4_ ); } - A5 && operator[] (boost::arg<5> (*) ()) const { return std::forward<A5>( a5_ ); } - A6 && operator[] (boost::arg<6> (*) ()) const { return std::forward<A6>( a6_ ); } - - template<class T> T & operator[] ( _bi::value<T> & v ) const { return v.get(); } - - template<class T> T const & operator[] ( _bi::value<T> const & v ) const { return v.get(); } - - template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); } - - template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const - { - rrlist6<A1&, A2&, A3&, A4&, A5&, A6&> a( a1_, a2_, a3_, a4_, a5_, a6_ ); - return b.eval( a ); - } - - template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const - { - rrlist6<A1&, A2&, A3&, A4&, A5&, A6&> a( a1_, a2_, a3_, a4_, a5_, a6_ ); - return b.eval( a ); - } -}; +// bind_t -template< class A1, class A2, class A3, class A4, class A5, class A6, class A7 > class rrlist7 +template<class... A> class rrlist { private: - A1 & a1_; - A2 & a2_; - A3 & a3_; - A4 & a4_; - A5 & a5_; - A6 & a6_; - A7 & a7_; - -public: - - rrlist7( A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7 ): a1_( a1 ), a2_( a2 ), a3_( a3 ), a4_( a4 ), a5_( a5 ), a6_( a6 ), a7_( a7 ) {} - - A1 && operator[] (boost::arg<1>) const { return std::forward<A1>( a1_ ); } - A2 && operator[] (boost::arg<2>) const { return std::forward<A2>( a2_ ); } - A3 && operator[] (boost::arg<3>) const { return std::forward<A3>( a3_ ); } - A4 && operator[] (boost::arg<4>) const { return std::forward<A4>( a4_ ); } - A5 && operator[] (boost::arg<5>) const { return std::forward<A5>( a5_ ); } - A6 && operator[] (boost::arg<6>) const { return std::forward<A6>( a6_ ); } - A7 && operator[] (boost::arg<7>) const { return std::forward<A7>( a7_ ); } + using args_type = std::tuple<A...>; - A1 && operator[] (boost::arg<1> (*) ()) const { return std::forward<A1>( a1_ ); } - A2 && operator[] (boost::arg<2> (*) ()) const { return std::forward<A2>( a2_ ); } - A3 && operator[] (boost::arg<3> (*) ()) const { return std::forward<A3>( a3_ ); } - A4 && operator[] (boost::arg<4> (*) ()) const { return std::forward<A4>( a4_ ); } - A5 && operator[] (boost::arg<5> (*) ()) const { return std::forward<A5>( a5_ ); } - A6 && operator[] (boost::arg<6> (*) ()) const { return std::forward<A6>( a6_ ); } - A7 && operator[] (boost::arg<7> (*) ()) const { return std::forward<A7>( a7_ ); } + using data_type = std::tuple<A&...>; + data_type data_; - template<class T> T & operator[] ( _bi::value<T> & v ) const { return v.get(); } - - template<class T> T const & operator[] ( _bi::value<T> const & v ) const { return v.get(); } - - template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); } - - template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const - { - rrlist7<A1&, A2&, A3&, A4&, A5&, A6&, A7&> a( a1_, a2_, a3_, a4_, a5_, a6_, a7_ ); - return b.eval( a ); - } - - template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const - { - rrlist7<A1&, A2&, A3&, A4&, A5&, A6&, A7&> a( a1_, a2_, a3_, a4_, a5_, a6_, a7_ ); - return b.eval( a ); - } -}; - -template< class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8 > class rrlist8 -{ -private: - - A1 & a1_; - A2 & a2_; - A3 & a3_; - A4 & a4_; - A5 & a5_; - A6 & a6_; - A7 & a7_; - A8 & a8_; + template<class...> friend class rrlist; public: - rrlist8( A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7, A8 & a8 ): a1_( a1 ), a2_( a2 ), a3_( a3 ), a4_( a4 ), a5_( a5 ), a6_( a6 ), a7_( a7 ), a8_( a8 ) {} - - A1 && operator[] (boost::arg<1>) const { return std::forward<A1>( a1_ ); } - A2 && operator[] (boost::arg<2>) const { return std::forward<A2>( a2_ ); } - A3 && operator[] (boost::arg<3>) const { return std::forward<A3>( a3_ ); } - A4 && operator[] (boost::arg<4>) const { return std::forward<A4>( a4_ ); } - A5 && operator[] (boost::arg<5>) const { return std::forward<A5>( a5_ ); } - A6 && operator[] (boost::arg<6>) const { return std::forward<A6>( a6_ ); } - A7 && operator[] (boost::arg<7>) const { return std::forward<A7>( a7_ ); } - A8 && operator[] (boost::arg<8>) const { return std::forward<A8>( a8_ ); } - - A1 && operator[] (boost::arg<1> (*) ()) const { return std::forward<A1>( a1_ ); } - A2 && operator[] (boost::arg<2> (*) ()) const { return std::forward<A2>( a2_ ); } - A3 && operator[] (boost::arg<3> (*) ()) const { return std::forward<A3>( a3_ ); } - A4 && operator[] (boost::arg<4> (*) ()) const { return std::forward<A4>( a4_ ); } - A5 && operator[] (boost::arg<5> (*) ()) const { return std::forward<A5>( a5_ ); } - A6 && operator[] (boost::arg<6> (*) ()) const { return std::forward<A6>( a6_ ); } - A7 && operator[] (boost::arg<7> (*) ()) const { return std::forward<A7>( a7_ ); } - A8 && operator[] (boost::arg<8> (*) ()) const { return std::forward<A8>( a8_ ); } - - template<class T> T & operator[] ( _bi::value<T> & v ) const { return v.get(); } - - template<class T> T const & operator[] ( _bi::value<T> const & v ) const { return v.get(); } - - template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); } + explicit rrlist( A&... a ): data_( a... ) {} + template<class... B> explicit rrlist( rrlist<B...> const& r ): data_( r.data_ ) {} - template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const + template<int I> typename std::tuple_element<I-1, args_type>::type&& operator[] ( boost::arg<I> ) const { - rrlist8<A1&, A2&, A3&, A4&, A5&, A6&, A7&, A8&> a( a1_, a2_, a3_, a4_, a5_, a6_, a7_, a8_ ); - return b.eval( a ); + return std::forward<typename std::tuple_element<I-1, args_type>::type>( std::get<I-1>( data_ ) ); } - template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const + template<int I> typename std::tuple_element<I-1, args_type>::type&& operator[] ( boost::arg<I>(*)() ) const { - rrlist8<A1&, A2&, A3&, A4&, A5&, A6&, A7&, A8&> a( a1_, a2_, a3_, a4_, a5_, a6_, a7_, a8_ ); - return b.eval( a ); + return std::forward<typename std::tuple_element<I-1, args_type>::type>( std::get<I-1>( data_ ) ); } -}; - -template< class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9 > class rrlist9 -{ -private: - - A1 & a1_; - A2 & a2_; - A3 & a3_; - A4 & a4_; - A5 & a5_; - A6 & a6_; - A7 & a7_; - A8 & a8_; - A9 & a9_; - -public: - - rrlist9( A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7, A8 & a8, A9 & a9 ): a1_( a1 ), a2_( a2 ), a3_( a3 ), a4_( a4 ), a5_( a5 ), a6_( a6 ), a7_( a7 ), a8_( a8 ), a9_( a9 ) {} - - A1 && operator[] (boost::arg<1>) const { return std::forward<A1>( a1_ ); } - A2 && operator[] (boost::arg<2>) const { return std::forward<A2>( a2_ ); } - A3 && operator[] (boost::arg<3>) const { return std::forward<A3>( a3_ ); } - A4 && operator[] (boost::arg<4>) const { return std::forward<A4>( a4_ ); } - A5 && operator[] (boost::arg<5>) const { return std::forward<A5>( a5_ ); } - A6 && operator[] (boost::arg<6>) const { return std::forward<A6>( a6_ ); } - A7 && operator[] (boost::arg<7>) const { return std::forward<A7>( a7_ ); } - A8 && operator[] (boost::arg<8>) const { return std::forward<A8>( a8_ ); } - A9 && operator[] (boost::arg<9>) const { return std::forward<A9>( a9_ ); } - - A1 && operator[] (boost::arg<1> (*) ()) const { return std::forward<A1>( a1_ ); } - A2 && operator[] (boost::arg<2> (*) ()) const { return std::forward<A2>( a2_ ); } - A3 && operator[] (boost::arg<3> (*) ()) const { return std::forward<A3>( a3_ ); } - A4 && operator[] (boost::arg<4> (*) ()) const { return std::forward<A4>( a4_ ); } - A5 && operator[] (boost::arg<5> (*) ()) const { return std::forward<A5>( a5_ ); } - A6 && operator[] (boost::arg<6> (*) ()) const { return std::forward<A6>( a6_ ); } - A7 && operator[] (boost::arg<7> (*) ()) const { return std::forward<A7>( a7_ ); } - A8 && operator[] (boost::arg<8> (*) ()) const { return std::forward<A8>( a8_ ); } - A9 && operator[] (boost::arg<9> (*) ()) const { return std::forward<A9>( a9_ ); } template<class T> T & operator[] ( _bi::value<T> & v ) const { return v.get(); } template<class T> T const & operator[] ( _bi::value<T> const & v ) const { return v.get(); } - template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); } + template<class T> T & operator[] ( reference_wrapper<T> const & v ) const { return v.get(); } - template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const + template<class R, class F, class L> typename result_traits<R, F>::type operator[] ( bind_t<R, F, L> & b ) const { - rrlist9<A1&, A2&, A3&, A4&, A5&, A6&, A7&, A8&, A9&> a( a1_, a2_, a3_, a4_, a5_, a6_, a7_, a8_, a9_ ); - return b.eval( a ); + rrlist<A&...> a2( *this ); + return b.eval( a2 ); } - template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const + template<class R, class F, class L> typename result_traits<R, F>::type operator[] ( bind_t<R, F, L> const & b ) const { - rrlist9<A1&, A2&, A3&, A4&, A5&, A6&, A7&, A8&, A9&> a( a1_, a2_, a3_, a4_, a5_, a6_, a7_, a8_, a9_ ); - return b.eval( a ); + rrlist<A&...> a2( *this ); + return b.eval( a2 ); } }; @@ -1264,290 +311,56 @@ public: typedef typename result_traits<R, F>::type result_type; typedef bind_t this_type; - bind_t( F f, L const & l ): f_( f ), l_( l ) {} + bind_t( F f, L const & l ): f_( std::move(f) ), l_( l ) {} // - result_type operator()() - { - list0 a; - return l_( type<result_type>(), f_, a, 0 ); - } - - result_type operator()() const - { - list0 a; - return l_( type<result_type>(), f_, a, 0 ); - } - - template<class A1> result_type operator()( A1 && a1 ) - { - rrlist1< A1 > a( a1 ); - return l_( type<result_type>(), f_, a, 0 ); - } - - template<class A1> result_type operator()( A1 && a1 ) const - { - rrlist1< A1 > a( a1 ); - return l_(type<result_type>(), f_, a, 0); - } - - template<class A1, class A2> result_type operator()( A1 && a1, A2 && a2 ) - { - rrlist2< A1, A2 > a( a1, a2 ); - return l_( type<result_type>(), f_, a, 0 ); - } - - template<class A1, class A2> result_type operator()( A1 && a1, A2 && a2 ) const - { - rrlist2< A1, A2 > a( a1, a2 ); - return l_( type<result_type>(), f_, a, 0 ); - } - - template<class A1, class A2, class A3> result_type operator()( A1 && a1, A2 && a2, A3 && a3 ) - { - rrlist3< A1, A2, A3 > a( a1, a2, a3 ); - return l_( type<result_type>(), f_, a, 0 ); - } - - template<class A1, class A2, class A3> result_type operator()( A1 && a1, A2 && a2, A3 && a3 ) const - { - rrlist3< A1, A2, A3 > a( a1, a2, a3 ); - return l_( type<result_type>(), f_, a, 0 ); - } - - template<class A1, class A2, class A3, class A4> result_type operator()( A1 && a1, A2 && a2, A3 && a3, A4 && a4 ) - { - rrlist4< A1, A2, A3, A4 > a( a1, a2, a3, a4 ); - return l_( type<result_type>(), f_, a, 0 ); - } - - template<class A1, class A2, class A3, class A4> result_type operator()( A1 && a1, A2 && a2, A3 && a3, A4 && a4 ) const - { - rrlist4< A1, A2, A3, A4 > a( a1, a2, a3, a4 ); - return l_( type<result_type>(), f_, a, 0 ); - } - - template<class A1, class A2, class A3, class A4, class A5> result_type operator()( A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5 ) - { - rrlist5< A1, A2, A3, A4, A5 > a( a1, a2, a3, a4, a5 ); - return l_( type<result_type>(), f_, a, 0 ); - } - - template<class A1, class A2, class A3, class A4, class A5> result_type operator()( A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5 ) const - { - rrlist5< A1, A2, A3, A4, A5 > a( a1, a2, a3, a4, a5 ); - return l_( type<result_type>(), f_, a, 0 ); - } - - template<class A1, class A2, class A3, class A4, class A5, class A6> result_type operator()( A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6 ) - { - rrlist6< A1, A2, A3, A4, A5, A6 > a( a1, a2, a3, a4, a5, a6 ); - return l_( type<result_type>(), f_, a, 0 ); - } - - template<class A1, class A2, class A3, class A4, class A5, class A6> result_type operator()( A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6 ) const - { - rrlist6< A1, A2, A3, A4, A5, A6 > a( a1, a2, a3, a4, a5, a6 ); - return l_( type<result_type>(), f_, a, 0 ); - } - - template<class A1, class A2, class A3, class A4, class A5, class A6, class A7> result_type operator()( A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6, A7 && a7 ) - { - rrlist7< A1, A2, A3, A4, A5, A6, A7 > a( a1, a2, a3, a4, a5, a6, a7 ); - return l_( type<result_type>(), f_, a, 0 ); - } - - template<class A1, class A2, class A3, class A4, class A5, class A6, class A7> result_type operator()( A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6, A7 && a7 ) const - { - rrlist7< A1, A2, A3, A4, A5, A6, A7 > a( a1, a2, a3, a4, a5, a6, a7 ); - return l_( type<result_type>(), f_, a, 0 ); - } - - template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> result_type operator()( A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6, A7 && a7, A8 && a8 ) - { - rrlist8< A1, A2, A3, A4, A5, A6, A7, A8 > a( a1, a2, a3, a4, a5, a6, a7, a8 ); - return l_( type<result_type>(), f_, a, 0 ); - } - - template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> result_type operator()( A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6, A7 && a7, A8 && a8 ) const - { - rrlist8< A1, A2, A3, A4, A5, A6, A7, A8 > a( a1, a2, a3, a4, a5, a6, a7, a8 ); - return l_( type<result_type>(), f_, a, 0 ); - } - - template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> result_type operator()( A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6, A7 && a7, A8 && a8, A9 && a9 ) + template<class... A> result_type operator()( A&&... a ) { - rrlist9< A1, A2, A3, A4, A5, A6, A7, A8, A9 > a( a1, a2, a3, a4, a5, a6, a7, a8, a9 ); - return l_( type<result_type>(), f_, a, 0 ); + rrlist<A...> a2( a... ); + return l_( type<result_type>(), f_, a2 ); } - template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> result_type operator()( A1 && a1, A2 && a2, A3 && a3, A4 && a4, A5 && a5, A6 && a6, A7 && a7, A8 && a8, A9 && a9 ) const + template<class... A> result_type operator()( A&&... a ) const { - rrlist9< A1, A2, A3, A4, A5, A6, A7, A8, A9 > a( a1, a2, a3, a4, a5, a6, a7, a8, a9 ); - return l_( type<result_type>(), f_, a, 0 ); + rrlist<A...> a2( a... ); + return l_( type<result_type>(), f_, a2 ); } // template<class A> result_type eval( A & a ) { - return l_( type<result_type>(), f_, a, 0 ); + return l_( type<result_type>(), f_, a ); } template<class A> result_type eval( A & a ) const { - return l_( type<result_type>(), f_, a, 0 ); + return l_( type<result_type>(), f_, a ); } template<class V> void accept( V & v ) const { -#if !defined( BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP ) && !defined( BOOST_BORLANDC ) using boost::visit_each; -#endif - - BOOST_BIND_VISIT_EACH( v, f_, 0 ); + visit_each( v, f_, 0 ); l_.accept( v ); } bool compare( this_type const & rhs ) const { - return ref_compare( f_, rhs.f_, 0 ) && l_ == rhs.l_; + return ref_compare( f_, rhs.f_ ) && l_ == rhs.l_; } }; -#elif !defined( BOOST_NO_VOID_RETURNS ) - -template<class R, class F, class L> class bind_t -{ -public: - - typedef bind_t this_type; - - bind_t(F f, L const & l): f_(f), l_(l) {} - -#define BOOST_BIND_RETURN return -#include <boost/bind/bind_template.hpp> -#undef BOOST_BIND_RETURN - -}; - -#else // no void returns - -template<class R> struct bind_t_generator -{ - -template<class F, class L> class implementation -{ -public: - - typedef implementation this_type; - - implementation(F f, L const & l): f_(f), l_(l) {} - -#define BOOST_BIND_RETURN return -#include <boost/bind/bind_template.hpp> -#undef BOOST_BIND_RETURN - -}; - -}; - -template<> struct bind_t_generator<void> -{ - -template<class F, class L> class implementation -{ -private: - - typedef void R; - -public: - - typedef implementation this_type; - - implementation(F f, L const & l): f_(f), l_(l) {} - -#define BOOST_BIND_RETURN -#include <boost/bind/bind_template.hpp> -#undef BOOST_BIND_RETURN - -}; - -}; - -template<class R2, class F, class L> class bind_t: public bind_t_generator<R2>::BOOST_NESTED_TEMPLATE implementation<F, L> -{ -public: - - bind_t(F f, L const & l): bind_t_generator<R2>::BOOST_NESTED_TEMPLATE implementation<F, L>(f, l) {} - -}; - -#endif - // function_equal -#ifndef BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP - -// put overloads in _bi, rely on ADL - -# ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING - template<class R, class F, class L> bool function_equal( bind_t<R, F, L> const & a, bind_t<R, F, L> const & b ) { return a.compare(b); } -# else - -template<class R, class F, class L> bool function_equal_impl( bind_t<R, F, L> const & a, bind_t<R, F, L> const & b, int ) -{ - return a.compare(b); -} - -# endif // #ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING - -#else // BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP - -// put overloads in boost - -} // namespace _bi - -# ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING - -template<class R, class F, class L> bool function_equal( _bi::bind_t<R, F, L> const & a, _bi::bind_t<R, F, L> const & b ) -{ - return a.compare(b); -} - -# else - -template<class R, class F, class L> bool function_equal_impl( _bi::bind_t<R, F, L> const & a, _bi::bind_t<R, F, L> const & b, int ) -{ - return a.compare(b); -} - -# endif // #ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING - -namespace _bi -{ - -#endif // BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP - // add_value -#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) || (__SUNPRO_CC >= 0x530) - -#if defined( BOOST_BORLANDC ) && BOOST_WORKAROUND( BOOST_BORLANDC, BOOST_TESTED_AT(0x582) ) - -template<class T> struct add_value -{ - typedef _bi::value<T> type; -}; - -#else - template< class T, int I > struct add_value_2 { typedef boost::arg<I> type; @@ -1563,8 +376,6 @@ template<class T> struct add_value typedef typename add_value_2< T, boost::is_placeholder< T >::value >::type type; }; -#endif - template<class T> struct add_value< value<T> > { typedef _bi::value<T> type; @@ -1590,135 +401,11 @@ template<class R, class F, class L> struct add_value< bind_t<R, F, L> > typedef bind_t<R, F, L> type; }; -#else - -template<int I> struct _avt_0; +// list_av -template<> struct _avt_0<1> +template<class... A> struct list_av { - template<class T> struct inner - { - typedef T type; - }; -}; - -template<> struct _avt_0<2> -{ - template<class T> struct inner - { - typedef value<T> type; - }; -}; - -typedef char (&_avt_r1) [1]; -typedef char (&_avt_r2) [2]; - -template<class T> _avt_r1 _avt_f(value<T>); -template<class T> _avt_r1 _avt_f(reference_wrapper<T>); -template<int I> _avt_r1 _avt_f(arg<I>); -template<int I> _avt_r1 _avt_f(arg<I> (*) ()); -template<class R, class F, class L> _avt_r1 _avt_f(bind_t<R, F, L>); - -_avt_r2 _avt_f(...); - -template<class T> struct add_value -{ - static T t(); - typedef typename _avt_0<sizeof(_avt_f(t()))>::template inner<T>::type type; -}; - -#endif - -// list_av_N - -template<class A1> struct list_av_1 -{ - typedef typename add_value<A1>::type B1; - typedef list1<B1> type; -}; - -template<class A1, class A2> struct list_av_2 -{ - typedef typename add_value<A1>::type B1; - typedef typename add_value<A2>::type B2; - typedef list2<B1, B2> type; -}; - -template<class A1, class A2, class A3> struct list_av_3 -{ - typedef typename add_value<A1>::type B1; - typedef typename add_value<A2>::type B2; - typedef typename add_value<A3>::type B3; - typedef list3<B1, B2, B3> type; -}; - -template<class A1, class A2, class A3, class A4> struct list_av_4 -{ - typedef typename add_value<A1>::type B1; - typedef typename add_value<A2>::type B2; - typedef typename add_value<A3>::type B3; - typedef typename add_value<A4>::type B4; - typedef list4<B1, B2, B3, B4> type; -}; - -template<class A1, class A2, class A3, class A4, class A5> struct list_av_5 -{ - typedef typename add_value<A1>::type B1; - typedef typename add_value<A2>::type B2; - typedef typename add_value<A3>::type B3; - typedef typename add_value<A4>::type B4; - typedef typename add_value<A5>::type B5; - typedef list5<B1, B2, B3, B4, B5> type; -}; - -template<class A1, class A2, class A3, class A4, class A5, class A6> struct list_av_6 -{ - typedef typename add_value<A1>::type B1; - typedef typename add_value<A2>::type B2; - typedef typename add_value<A3>::type B3; - typedef typename add_value<A4>::type B4; - typedef typename add_value<A5>::type B5; - typedef typename add_value<A6>::type B6; - typedef list6<B1, B2, B3, B4, B5, B6> type; -}; - -template<class A1, class A2, class A3, class A4, class A5, class A6, class A7> struct list_av_7 -{ - typedef typename add_value<A1>::type B1; - typedef typename add_value<A2>::type B2; - typedef typename add_value<A3>::type B3; - typedef typename add_value<A4>::type B4; - typedef typename add_value<A5>::type B5; - typedef typename add_value<A6>::type B6; - typedef typename add_value<A7>::type B7; - typedef list7<B1, B2, B3, B4, B5, B6, B7> type; -}; - -template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> struct list_av_8 -{ - typedef typename add_value<A1>::type B1; - typedef typename add_value<A2>::type B2; - typedef typename add_value<A3>::type B3; - typedef typename add_value<A4>::type B4; - typedef typename add_value<A5>::type B5; - typedef typename add_value<A6>::type B6; - typedef typename add_value<A7>::type B7; - typedef typename add_value<A8>::type B8; - typedef list8<B1, B2, B3, B4, B5, B6, B7, B8> type; -}; - -template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> struct list_av_9 -{ - typedef typename add_value<A1>::type B1; - typedef typename add_value<A2>::type B2; - typedef typename add_value<A3>::type B3; - typedef typename add_value<A4>::type B4; - typedef typename add_value<A5>::type B5; - typedef typename add_value<A6>::type B6; - typedef typename add_value<A7>::type B7; - typedef typename add_value<A8>::type B8; - typedef typename add_value<A9>::type B9; - typedef list9<B1, B2, B3, B4, B5, B6, B7, B8, B9> type; + typedef list< typename add_value<A>::type... > type; }; // operator! @@ -1729,10 +416,10 @@ struct logical_not }; template<class R, class F, class L> - bind_t< bool, logical_not, list1< bind_t<R, F, L> > > + bind_t< bool, logical_not, list< bind_t<R, F, L> > > operator! (bind_t<R, F, L> const & f) { - typedef list1< bind_t<R, F, L> > list_type; + typedef list< bind_t<R, F, L> > list_type; return bind_t<bool, logical_not, list_type> ( logical_not(), list_type(f) ); } @@ -1746,11 +433,11 @@ struct name \ }; \ \ template<class R, class F, class L, class A2> \ - bind_t< bool, name, list2< bind_t<R, F, L>, typename add_value<A2>::type > > \ + bind_t< bool, name, list< bind_t<R, F, L>, typename add_value<A2>::type > > \ operator op (bind_t<R, F, L> const & f, A2 a2) \ { \ typedef typename add_value<A2>::type B2; \ - typedef list2< bind_t<R, F, L>, B2> list_type; \ + typedef list< bind_t<R, F, L>, B2> list_type; \ return bind_t<bool, name, list_type> ( name(), list_type(f, a2) ); \ } @@ -1768,36 +455,12 @@ BOOST_BIND_OPERATOR( ||, logical_or ) #undef BOOST_BIND_OPERATOR -#if defined(__GNUC__) && BOOST_WORKAROUND(__GNUC__, < 3) - -// resolve ambiguity with rel_ops - -#define BOOST_BIND_OPERATOR( op, name ) \ -\ -template<class R, class F, class L> \ - bind_t< bool, name, list2< bind_t<R, F, L>, bind_t<R, F, L> > > \ - operator op (bind_t<R, F, L> const & f, bind_t<R, F, L> const & g) \ -{ \ - typedef list2< bind_t<R, F, L>, bind_t<R, F, L> > list_type; \ - return bind_t<bool, name, list_type> ( name(), list_type(f, g) ); \ -} - -BOOST_BIND_OPERATOR( !=, not_equal ) -BOOST_BIND_OPERATOR( <=, less_equal ) -BOOST_BIND_OPERATOR( >, greater ) -BOOST_BIND_OPERATOR( >=, greater_equal ) - -#endif - -// visit_each, ADL - -#if !defined( BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP ) && !defined( BOOST_BORLANDC ) \ - && !(defined(__GNUC__) && __GNUC__ == 3 && __GNUC_MINOR__ <= 3) +// visit_each template<class V, class T> void visit_each( V & v, value<T> const & t, int ) { using boost::visit_each; - BOOST_BIND_VISIT_EACH( v, t.get(), 0 ); + visit_each( v, t.get(), 0 ); } template<class V, class R, class F, class L> void visit_each( V & v, bind_t<R, F, L> const & t, int ) @@ -1805,27 +468,8 @@ template<class V, class R, class F, class L> void visit_each( V & v, bind_t<R, F t.accept( v ); } -#endif - } // namespace _bi -// visit_each, no ADL - -#if defined( BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP ) || defined( BOOST_BORLANDC ) \ - || (defined(__GNUC__) && __GNUC__ == 3 && __GNUC_MINOR__ <= 3) - -template<class V, class T> void visit_each( V & v, _bi::value<T> const & t, int ) -{ - BOOST_BIND_VISIT_EACH( v, t.get(), 0 ); -} - -template<class V, class R, class F, class L> void visit_each( V & v, _bi::bind_t<R, F, L> const & t, int ) -{ - t.accept( v ); -} - -#endif - // is_bind_expression template< class T > struct is_bind_expression @@ -1833,15 +477,11 @@ template< class T > struct is_bind_expression enum _vt { value = 0 }; }; -#if !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION ) - template< class R, class F, class L > struct is_bind_expression< _bi::bind_t< R, F, L > > { enum _vt { value = 1 }; }; -#endif - // bind #ifndef BOOST_BIND @@ -1850,266 +490,135 @@ template< class R, class F, class L > struct is_bind_expression< _bi::bind_t< R, // generic function objects -template<class R, class F> - _bi::bind_t<R, F, _bi::list0> - BOOST_BIND(F f) -{ - typedef _bi::list0 list_type; - return _bi::bind_t<R, F, list_type> (f, list_type()); -} - -template<class R, class F, class A1> - _bi::bind_t<R, F, typename _bi::list_av_1<A1>::type> - BOOST_BIND(F f, A1 a1) -{ - typedef typename _bi::list_av_1<A1>::type list_type; - return _bi::bind_t<R, F, list_type> (f, list_type(a1)); -} - -template<class R, class F, class A1, class A2> - _bi::bind_t<R, F, typename _bi::list_av_2<A1, A2>::type> - BOOST_BIND(F f, A1 a1, A2 a2) -{ - typedef typename _bi::list_av_2<A1, A2>::type list_type; - return _bi::bind_t<R, F, list_type> (f, list_type(a1, a2)); -} - -template<class R, class F, class A1, class A2, class A3> - _bi::bind_t<R, F, typename _bi::list_av_3<A1, A2, A3>::type> - BOOST_BIND(F f, A1 a1, A2 a2, A3 a3) -{ - typedef typename _bi::list_av_3<A1, A2, A3>::type list_type; - return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3)); -} - -template<class R, class F, class A1, class A2, class A3, class A4> - _bi::bind_t<R, F, typename _bi::list_av_4<A1, A2, A3, A4>::type> - BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4) -{ - typedef typename _bi::list_av_4<A1, A2, A3, A4>::type list_type; - return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4)); -} - -template<class R, class F, class A1, class A2, class A3, class A4, class A5> - _bi::bind_t<R, F, typename _bi::list_av_5<A1, A2, A3, A4, A5>::type> - BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) -{ - typedef typename _bi::list_av_5<A1, A2, A3, A4, A5>::type list_type; - return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5)); -} - -template<class R, class F, class A1, class A2, class A3, class A4, class A5, class A6> - _bi::bind_t<R, F, typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type> - BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) -{ - typedef typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type list_type; - return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6)); -} +#if !BOOST_WORKAROUND(__GNUC__, < 6) -template<class R, class F, class A1, class A2, class A3, class A4, class A5, class A6, class A7> - _bi::bind_t<R, F, typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type> - BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) +template<class R, class F, class... A> + _bi::bind_t<R, F, typename _bi::list_av<A...>::type> + BOOST_BIND( F f, A... a ) { - typedef typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type list_type; - return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6, a7)); + typedef typename _bi::list_av<A...>::type list_type; + return _bi::bind_t<R, F, list_type>( std::move(f), list_type( a... ) ); } -template<class R, class F, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> - _bi::bind_t<R, F, typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type> - BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) -{ - typedef typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type list_type; - return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6, a7, a8)); -} - -template<class R, class F, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> - _bi::bind_t<R, F, typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type> - BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9) -{ - typedef typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type list_type; - return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6, a7, a8, a9)); -} +#else -// generic function objects, alternative syntax +// g++ 4.x (and some 5.x) consider boost::bind<void>( &X::f ) +// ambiguous if the variadic form above is used template<class R, class F> - _bi::bind_t<R, F, _bi::list0> - BOOST_BIND(boost::type<R>, F f) + _bi::bind_t<R, F, typename _bi::list_av<>::type> + BOOST_BIND( F f ) { - typedef _bi::list0 list_type; - return _bi::bind_t<R, F, list_type> (f, list_type()); + typedef typename _bi::list_av<>::type list_type; + return _bi::bind_t<R, F, list_type>( std::move(f), list_type() ); } template<class R, class F, class A1> - _bi::bind_t<R, F, typename _bi::list_av_1<A1>::type> - BOOST_BIND(boost::type<R>, F f, A1 a1) + _bi::bind_t<R, F, typename _bi::list_av<A1>::type> + BOOST_BIND( F f, A1 a1 ) { - typedef typename _bi::list_av_1<A1>::type list_type; - return _bi::bind_t<R, F, list_type> (f, list_type(a1)); + typedef typename _bi::list_av<A1>::type list_type; + return _bi::bind_t<R, F, list_type>( std::move(f), list_type( a1 ) ); } template<class R, class F, class A1, class A2> - _bi::bind_t<R, F, typename _bi::list_av_2<A1, A2>::type> - BOOST_BIND(boost::type<R>, F f, A1 a1, A2 a2) + _bi::bind_t<R, F, typename _bi::list_av<A1, A2>::type> + BOOST_BIND( F f, A1 a1, A2 a2 ) { - typedef typename _bi::list_av_2<A1, A2>::type list_type; - return _bi::bind_t<R, F, list_type> (f, list_type(a1, a2)); + typedef typename _bi::list_av<A1, A2>::type list_type; + return _bi::bind_t<R, F, list_type>( std::move(f), list_type( a1, a2 ) ); } template<class R, class F, class A1, class A2, class A3> - _bi::bind_t<R, F, typename _bi::list_av_3<A1, A2, A3>::type> - BOOST_BIND(boost::type<R>, F f, A1 a1, A2 a2, A3 a3) + _bi::bind_t<R, F, typename _bi::list_av<A1, A2, A3>::type> + BOOST_BIND( F f, A1 a1, A2 a2, A3 a3 ) { - typedef typename _bi::list_av_3<A1, A2, A3>::type list_type; - return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3)); + typedef typename _bi::list_av<A1, A2, A3>::type list_type; + return _bi::bind_t<R, F, list_type>( std::move(f), list_type( a1, a2, a3 ) ); } template<class R, class F, class A1, class A2, class A3, class A4> - _bi::bind_t<R, F, typename _bi::list_av_4<A1, A2, A3, A4>::type> - BOOST_BIND(boost::type<R>, F f, A1 a1, A2 a2, A3 a3, A4 a4) + _bi::bind_t<R, F, typename _bi::list_av<A1, A2, A3, A4>::type> + BOOST_BIND( F f, A1 a1, A2 a2, A3 a3, A4 a4 ) { - typedef typename _bi::list_av_4<A1, A2, A3, A4>::type list_type; - return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4)); + typedef typename _bi::list_av<A1, A2, A3, A4>::type list_type; + return _bi::bind_t<R, F, list_type>( std::move(f), list_type( a1, a2, a3, a4 ) ); } template<class R, class F, class A1, class A2, class A3, class A4, class A5> - _bi::bind_t<R, F, typename _bi::list_av_5<A1, A2, A3, A4, A5>::type> - BOOST_BIND(boost::type<R>, F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) + _bi::bind_t<R, F, typename _bi::list_av<A1, A2, A3, A4, A5>::type> + BOOST_BIND( F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5 ) { - typedef typename _bi::list_av_5<A1, A2, A3, A4, A5>::type list_type; - return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5)); + typedef typename _bi::list_av<A1, A2, A3, A4, A5>::type list_type; + return _bi::bind_t<R, F, list_type>( std::move(f), list_type( a1, a2, a3, a4, a5 ) ); } template<class R, class F, class A1, class A2, class A3, class A4, class A5, class A6> - _bi::bind_t<R, F, typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type> - BOOST_BIND(boost::type<R>, F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) + _bi::bind_t<R, F, typename _bi::list_av<A1, A2, A3, A4, A5, A6>::type> + BOOST_BIND( F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6 ) { - typedef typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type list_type; - return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6)); + typedef typename _bi::list_av<A1, A2, A3, A4, A5, A6>::type list_type; + return _bi::bind_t<R, F, list_type>( std::move(f), list_type( a1, a2, a3, a4, a5, a6 ) ); } template<class R, class F, class A1, class A2, class A3, class A4, class A5, class A6, class A7> - _bi::bind_t<R, F, typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type> - BOOST_BIND(boost::type<R>, F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) + _bi::bind_t<R, F, typename _bi::list_av<A1, A2, A3, A4, A5, A6, A7>::type> + BOOST_BIND( F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7 ) { - typedef typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type list_type; - return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6, a7)); + typedef typename _bi::list_av<A1, A2, A3, A4, A5, A6, A7>::type list_type; + return _bi::bind_t<R, F, list_type>( std::move(f), list_type( a1, a2, a3, a4, a5, a6, a7 ) ); } template<class R, class F, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> - _bi::bind_t<R, F, typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type> - BOOST_BIND(boost::type<R>, F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) + _bi::bind_t<R, F, typename _bi::list_av<A1, A2, A3, A4, A5, A6, A7, A8>::type> + BOOST_BIND( F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8 ) { - typedef typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type list_type; - return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6, a7, a8)); + typedef typename _bi::list_av<A1, A2, A3, A4, A5, A6, A7, A8>::type list_type; + return _bi::bind_t<R, F, list_type>( std::move(f), list_type( a1, a2, a3, a4, a5, a6, a7, a8 ) ); } template<class R, class F, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> - _bi::bind_t<R, F, typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type> - BOOST_BIND(boost::type<R>, F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9) -{ - typedef typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type list_type; - return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6, a7, a8, a9)); -} - -#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) - -// adaptable function objects - -template<class F> - _bi::bind_t<_bi::unspecified, F, _bi::list0> - BOOST_BIND(F f) -{ - typedef _bi::list0 list_type; - return _bi::bind_t<_bi::unspecified, F, list_type> (f, list_type()); -} - -template<class F, class A1> - _bi::bind_t<_bi::unspecified, F, typename _bi::list_av_1<A1>::type> - BOOST_BIND(F f, A1 a1) -{ - typedef typename _bi::list_av_1<A1>::type list_type; - return _bi::bind_t<_bi::unspecified, F, list_type> (f, list_type(a1)); -} - -template<class F, class A1, class A2> - _bi::bind_t<_bi::unspecified, F, typename _bi::list_av_2<A1, A2>::type> - BOOST_BIND(F f, A1 a1, A2 a2) -{ - typedef typename _bi::list_av_2<A1, A2>::type list_type; - return _bi::bind_t<_bi::unspecified, F, list_type> (f, list_type(a1, a2)); -} - -template<class F, class A1, class A2, class A3> - _bi::bind_t<_bi::unspecified, F, typename _bi::list_av_3<A1, A2, A3>::type> - BOOST_BIND(F f, A1 a1, A2 a2, A3 a3) + _bi::bind_t<R, F, typename _bi::list_av<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type> + BOOST_BIND( F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9 ) { - typedef typename _bi::list_av_3<A1, A2, A3>::type list_type; - return _bi::bind_t<_bi::unspecified, F, list_type>(f, list_type(a1, a2, a3)); + typedef typename _bi::list_av<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type list_type; + return _bi::bind_t<R, F, list_type>( std::move(f), list_type( a1, a2, a3, a4, a5, a6, a7, a8, a9 ) ); } -template<class F, class A1, class A2, class A3, class A4> - _bi::bind_t<_bi::unspecified, F, typename _bi::list_av_4<A1, A2, A3, A4>::type> - BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4) -{ - typedef typename _bi::list_av_4<A1, A2, A3, A4>::type list_type; - return _bi::bind_t<_bi::unspecified, F, list_type>(f, list_type(a1, a2, a3, a4)); -} - -template<class F, class A1, class A2, class A3, class A4, class A5> - _bi::bind_t<_bi::unspecified, F, typename _bi::list_av_5<A1, A2, A3, A4, A5>::type> - BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) -{ - typedef typename _bi::list_av_5<A1, A2, A3, A4, A5>::type list_type; - return _bi::bind_t<_bi::unspecified, F, list_type>(f, list_type(a1, a2, a3, a4, a5)); -} +#endif -template<class F, class A1, class A2, class A3, class A4, class A5, class A6> - _bi::bind_t<_bi::unspecified, F, typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type> - BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) -{ - typedef typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type list_type; - return _bi::bind_t<_bi::unspecified, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6)); -} +// generic function objects, alternative syntax -template<class F, class A1, class A2, class A3, class A4, class A5, class A6, class A7> - _bi::bind_t<_bi::unspecified, F, typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type> - BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) +template<class R, class F, class... A> + _bi::bind_t<R, F, typename _bi::list_av<A...>::type> + BOOST_BIND( boost::type<R>, F f, A... a ) { - typedef typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type list_type; - return _bi::bind_t<_bi::unspecified, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6, a7)); + typedef typename _bi::list_av<A...>::type list_type; + return _bi::bind_t<R, F, list_type>( std::move(f), list_type( a... ) ); } -template<class F, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> - _bi::bind_t<_bi::unspecified, F, typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type> - BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) -{ - typedef typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type list_type; - return _bi::bind_t<_bi::unspecified, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6, a7, a8)); -} +// adaptable function objects -template<class F, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> - _bi::bind_t<_bi::unspecified, F, typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type> - BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9) +template<class F, class... A> + _bi::bind_t<_bi::unspecified, F, typename _bi::list_av<A...>::type> + BOOST_BIND( F f, A... a ) { - typedef typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type list_type; - return _bi::bind_t<_bi::unspecified, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6, a7, a8, a9)); + typedef typename _bi::list_av<A...>::type list_type; + return _bi::bind_t<_bi::unspecified, F, list_type>( std::move(f), list_type( a... ) ); } -#endif // !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) - // function pointers #define BOOST_BIND_CC #define BOOST_BIND_ST #define BOOST_BIND_NOEXCEPT -#include <boost/bind/bind_cc.hpp> +#include <boost/bind/detail/bind_cc.hpp> # if defined( __cpp_noexcept_function_type ) || defined( _NOEXCEPT_TYPES_SUPPORTED ) # undef BOOST_BIND_NOEXCEPT # define BOOST_BIND_NOEXCEPT noexcept -# include <boost/bind/bind_cc.hpp> +# include <boost/bind/detail/bind_cc.hpp> # endif #undef BOOST_BIND_CC @@ -2122,7 +631,7 @@ template<class F, class A1, class A2, class A3, class A4, class A5, class A6, cl #define BOOST_BIND_ST #define BOOST_BIND_NOEXCEPT -#include <boost/bind/bind_cc.hpp> +#include <boost/bind/detail/bind_cc.hpp> #undef BOOST_BIND_CC #undef BOOST_BIND_ST @@ -2136,7 +645,7 @@ template<class F, class A1, class A2, class A3, class A4, class A5, class A6, cl #define BOOST_BIND_ST #define BOOST_BIND_NOEXCEPT -#include <boost/bind/bind_cc.hpp> +#include <boost/bind/detail/bind_cc.hpp> #undef BOOST_BIND_CC #undef BOOST_BIND_ST @@ -2150,7 +659,7 @@ template<class F, class A1, class A2, class A3, class A4, class A5, class A6, cl #define BOOST_BIND_CC #define BOOST_BIND_NOEXCEPT -#include <boost/bind/bind_cc.hpp> +#include <boost/bind/detail/bind_cc.hpp> #undef BOOST_BIND_ST #undef BOOST_BIND_CC @@ -2164,14 +673,14 @@ template<class F, class A1, class A2, class A3, class A4, class A5, class A6, cl #define BOOST_BIND_MF_CC #define BOOST_BIND_MF_NOEXCEPT -#include <boost/bind/bind_mf_cc.hpp> -#include <boost/bind/bind_mf2_cc.hpp> +#include <boost/bind/detail/bind_mf_cc.hpp> +#include <boost/bind/detail/bind_mf2_cc.hpp> # if defined( __cpp_noexcept_function_type ) || defined( _NOEXCEPT_TYPES_SUPPORTED ) # undef BOOST_BIND_MF_NOEXCEPT # define BOOST_BIND_MF_NOEXCEPT noexcept -# include <boost/bind/bind_mf_cc.hpp> -# include <boost/bind/bind_mf2_cc.hpp> +# include <boost/bind/detail/bind_mf_cc.hpp> +# include <boost/bind/detail/bind_mf2_cc.hpp> # endif #undef BOOST_BIND_MF_NAME @@ -2184,8 +693,8 @@ template<class F, class A1, class A2, class A3, class A4, class A5, class A6, cl #define BOOST_BIND_MF_CC __cdecl #define BOOST_BIND_MF_NOEXCEPT -#include <boost/bind/bind_mf_cc.hpp> -#include <boost/bind/bind_mf2_cc.hpp> +#include <boost/bind/detail/bind_mf_cc.hpp> +#include <boost/bind/detail/bind_mf2_cc.hpp> #undef BOOST_BIND_MF_NAME #undef BOOST_BIND_MF_CC @@ -2199,8 +708,8 @@ template<class F, class A1, class A2, class A3, class A4, class A5, class A6, cl #define BOOST_BIND_MF_CC __stdcall #define BOOST_BIND_MF_NOEXCEPT -#include <boost/bind/bind_mf_cc.hpp> -#include <boost/bind/bind_mf2_cc.hpp> +#include <boost/bind/detail/bind_mf_cc.hpp> +#include <boost/bind/detail/bind_mf2_cc.hpp> #undef BOOST_BIND_MF_NAME #undef BOOST_BIND_MF_CC @@ -2214,8 +723,8 @@ template<class F, class A1, class A2, class A3, class A4, class A5, class A6, cl #define BOOST_BIND_MF_CC __fastcall #define BOOST_BIND_MF_NOEXCEPT -#include <boost/bind/bind_mf_cc.hpp> -#include <boost/bind/bind_mf2_cc.hpp> +#include <boost/bind/detail/bind_mf_cc.hpp> +#include <boost/bind/detail/bind_mf2_cc.hpp> #undef BOOST_BIND_MF_NAME #undef BOOST_BIND_MF_CC @@ -2225,20 +734,6 @@ template<class F, class A1, class A2, class A3, class A4, class A5, class A6, cl // data member pointers -#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) || defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) \ - || ( defined(BOOST_BORLANDC) && BOOST_WORKAROUND( BOOST_BORLANDC, BOOST_TESTED_AT( 0x620 ) ) ) - -template<class R, class T, class A1> -_bi::bind_t< R, _mfi::dm<R, T>, typename _bi::list_av_1<A1>::type > - BOOST_BIND(R T::*f, A1 a1) -{ - typedef _mfi::dm<R, T> F; - typedef typename _bi::list_av_1<A1>::type list_type; - return _bi::bind_t<R, F, list_type>( F(f), list_type(a1) ); -} - -#else - namespace _bi { @@ -2266,8 +761,6 @@ template< class R, class T > struct add_cref< R (T::*) (), 1 > typedef void type; }; -#if !defined(__IBMCPP__) || __IBMCPP_FUNC_CV_TMPL_ARG_DEDUCTION - template< class R, class T > struct add_cref< R (T::*) () const, 1 > { typedef void type; @@ -2282,8 +775,6 @@ template< class R, class T > struct add_cref< R (T::*) () const noexcept, 1 > #endif // __cpp_noexcept_function_type -#endif // __IBMCPP__ - template<class R> struct isref { enum value_type { value = 0 }; @@ -2317,19 +808,17 @@ template< class A1, class M, class T > _bi::bind_t< typename _bi::dm_result< M T::*, A1 >::type, _mfi::dm<M, T>, - typename _bi::list_av_1<A1>::type + typename _bi::list_av<A1>::type > BOOST_BIND( M T::*f, A1 a1 ) { typedef typename _bi::dm_result< M T::*, A1 >::type result_type; typedef _mfi::dm<M, T> F; - typedef typename _bi::list_av_1<A1>::type list_type; + typedef typename _bi::list_av<A1>::type list_type; return _bi::bind_t< result_type, F, list_type >( F( f ), list_type( a1 ) ); } -#endif - } // namespace boost #ifndef BOOST_BIND_NO_PLACEHOLDERS diff --git a/contrib/restricted/boost/bind/include/boost/bind/bind_mf2_cc.hpp b/contrib/restricted/boost/bind/include/boost/bind/bind_mf2_cc.hpp deleted file mode 100644 index be20b1d907..0000000000 --- a/contrib/restricted/boost/bind/include/boost/bind/bind_mf2_cc.hpp +++ /dev/null @@ -1,228 +0,0 @@ -// -// bind/bind_mf2_cc.hpp - member functions, type<> syntax -// -// Do not include this header directly. -// -// Copyright (c) 2001 Peter Dimov and Multi Media Ltd. -// Copyright (c) 2008 Peter Dimov -// -// Distributed under the Boost Software License, Version 1.0. -// See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt -// -// See http://www.boost.org/libs/bind/bind.html for documentation. -// - -// 0 - -template<class Rt2, class R, class T, - class A1> - _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(mf0)<R, T>, typename _bi::list_av_1<A1>::type> - BOOST_BIND(boost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) () BOOST_BIND_MF_NOEXCEPT, A1 a1) -{ - typedef _mfi::BOOST_BIND_MF_NAME(mf0)<R, T> F; - typedef typename _bi::list_av_1<A1>::type list_type; - return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1)); -} - -template<class Rt2, class R, class T, - class A1> - _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(cmf0)<R, T>, typename _bi::list_av_1<A1>::type> - BOOST_BIND(boost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) () const BOOST_BIND_MF_NOEXCEPT, A1 a1) -{ - typedef _mfi::BOOST_BIND_MF_NAME(cmf0)<R, T> F; - typedef typename _bi::list_av_1<A1>::type list_type; - return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1)); -} - -// 1 - -template<class Rt2, class R, class T, - class B1, - class A1, class A2> - _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(mf1)<R, T, B1>, typename _bi::list_av_2<A1, A2>::type> - BOOST_BIND(boost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) (B1) BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2) -{ - typedef _mfi::BOOST_BIND_MF_NAME(mf1)<R, T, B1> F; - typedef typename _bi::list_av_2<A1, A2>::type list_type; - return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2)); -} - -template<class Rt2, class R, class T, - class B1, - class A1, class A2> - _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(cmf1)<R, T, B1>, typename _bi::list_av_2<A1, A2>::type> - BOOST_BIND(boost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) (B1) const BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2) -{ - typedef _mfi::BOOST_BIND_MF_NAME(cmf1)<R, T, B1> F; - typedef typename _bi::list_av_2<A1, A2>::type list_type; - return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2)); -} - -// 2 - -template<class Rt2, class R, class T, - class B1, class B2, - class A1, class A2, class A3> - _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(mf2)<R, T, B1, B2>, typename _bi::list_av_3<A1, A2, A3>::type> - BOOST_BIND(boost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) (B1, B2) BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3) -{ - typedef _mfi::BOOST_BIND_MF_NAME(mf2)<R, T, B1, B2> F; - typedef typename _bi::list_av_3<A1, A2, A3>::type list_type; - return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2, a3)); -} - -template<class Rt2, class R, class T, - class B1, class B2, - class A1, class A2, class A3> - _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(cmf2)<R, T, B1, B2>, typename _bi::list_av_3<A1, A2, A3>::type> - BOOST_BIND(boost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) (B1, B2) const BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3) -{ - typedef _mfi::BOOST_BIND_MF_NAME(cmf2)<R, T, B1, B2> F; - typedef typename _bi::list_av_3<A1, A2, A3>::type list_type; - return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2, a3)); -} - -// 3 - -template<class Rt2, class R, class T, - class B1, class B2, class B3, - class A1, class A2, class A3, class A4> - _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(mf3)<R, T, B1, B2, B3>, typename _bi::list_av_4<A1, A2, A3, A4>::type> - BOOST_BIND(boost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3) BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4) -{ - typedef _mfi::BOOST_BIND_MF_NAME(mf3)<R, T, B1, B2, B3> F; - typedef typename _bi::list_av_4<A1, A2, A3, A4>::type list_type; - return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2, a3, a4)); -} - -template<class Rt2, class R, class T, - class B1, class B2, class B3, - class A1, class A2, class A3, class A4> - _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(cmf3)<R, T, B1, B2, B3>, typename _bi::list_av_4<A1, A2, A3, A4>::type> - BOOST_BIND(boost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3) const BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4) -{ - typedef _mfi::BOOST_BIND_MF_NAME(cmf3)<R, T, B1, B2, B3> F; - typedef typename _bi::list_av_4<A1, A2, A3, A4>::type list_type; - return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2, a3, a4)); -} - -// 4 - -template<class Rt2, class R, class T, - class B1, class B2, class B3, class B4, - class A1, class A2, class A3, class A4, class A5> - _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(mf4)<R, T, B1, B2, B3, B4>, typename _bi::list_av_5<A1, A2, A3, A4, A5>::type> - BOOST_BIND(boost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4) BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) -{ - typedef _mfi::BOOST_BIND_MF_NAME(mf4)<R, T, B1, B2, B3, B4> F; - typedef typename _bi::list_av_5<A1, A2, A3, A4, A5>::type list_type; - return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5)); -} - -template<class Rt2, class R, class T, - class B1, class B2, class B3, class B4, - class A1, class A2, class A3, class A4, class A5> - _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(cmf4)<R, T, B1, B2, B3, B4>, typename _bi::list_av_5<A1, A2, A3, A4, A5>::type> - BOOST_BIND(boost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4) const BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) -{ - typedef _mfi::BOOST_BIND_MF_NAME(cmf4)<R, T, B1, B2, B3, B4> F; - typedef typename _bi::list_av_5<A1, A2, A3, A4, A5>::type list_type; - return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5)); -} - -// 5 - -template<class Rt2, class R, class T, - class B1, class B2, class B3, class B4, class B5, - class A1, class A2, class A3, class A4, class A5, class A6> - _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(mf5)<R, T, B1, B2, B3, B4, B5>, typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type> - BOOST_BIND(boost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5) BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) -{ - typedef _mfi::BOOST_BIND_MF_NAME(mf5)<R, T, B1, B2, B3, B4, B5> F; - typedef typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type list_type; - return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6)); -} - -template<class Rt2, class R, class T, - class B1, class B2, class B3, class B4, class B5, - class A1, class A2, class A3, class A4, class A5, class A6> - _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(cmf5)<R, T, B1, B2, B3, B4, B5>, typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type> - BOOST_BIND(boost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5) const BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) -{ - typedef _mfi::BOOST_BIND_MF_NAME(cmf5)<R, T, B1, B2, B3, B4, B5> F; - typedef typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type list_type; - return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6)); -} - -// 6 - -template<class Rt2, class R, class T, - class B1, class B2, class B3, class B4, class B5, class B6, - class A1, class A2, class A3, class A4, class A5, class A6, class A7> - _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(mf6)<R, T, B1, B2, B3, B4, B5, B6>, typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type> - BOOST_BIND(boost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6) BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) -{ - typedef _mfi::BOOST_BIND_MF_NAME(mf6)<R, T, B1, B2, B3, B4, B5, B6> F; - typedef typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type list_type; - return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6, a7)); -} - -template<class Rt2, class R, class T, - class B1, class B2, class B3, class B4, class B5, class B6, - class A1, class A2, class A3, class A4, class A5, class A6, class A7> - _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(cmf6)<R, T, B1, B2, B3, B4, B5, B6>, typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type> - BOOST_BIND(boost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6) const BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) -{ - typedef _mfi::BOOST_BIND_MF_NAME(cmf6)<R, T, B1, B2, B3, B4, B5, B6> F; - typedef typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type list_type; - return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6, a7)); -} - -// 7 - -template<class Rt2, class R, class T, - class B1, class B2, class B3, class B4, class B5, class B6, class B7, - class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> - _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(mf7)<R, T, B1, B2, B3, B4, B5, B6, B7>, typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type> - BOOST_BIND(boost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6, B7) BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) -{ - typedef _mfi::BOOST_BIND_MF_NAME(mf7)<R, T, B1, B2, B3, B4, B5, B6, B7> F; - typedef typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type list_type; - return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6, a7, a8)); -} - -template<class Rt2, class R, class T, - class B1, class B2, class B3, class B4, class B5, class B6, class B7, - class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> - _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(cmf7)<R, T, B1, B2, B3, B4, B5, B6, B7>, typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type> - BOOST_BIND(boost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6, B7) const BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) -{ - typedef _mfi::BOOST_BIND_MF_NAME(cmf7)<R, T, B1, B2, B3, B4, B5, B6, B7> F; - typedef typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type list_type; - return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6, a7, a8)); -} - -// 8 - -template<class Rt2, class R, class T, - class B1, class B2, class B3, class B4, class B5, class B6, class B7, class B8, - class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> - _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(mf8)<R, T, B1, B2, B3, B4, B5, B6, B7, B8>, typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type> - BOOST_BIND(boost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6, B7, B8) BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9) -{ - typedef _mfi::BOOST_BIND_MF_NAME(mf8)<R, T, B1, B2, B3, B4, B5, B6, B7, B8> F; - typedef typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type list_type; - return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6, a7, a8, a9)); -} - -template<class Rt2, class R, class T, - class B1, class B2, class B3, class B4, class B5, class B6, class B7, class B8, - class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> - _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(cmf8)<R, T, B1, B2, B3, B4, B5, B6, B7, B8>, typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type> - BOOST_BIND(boost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6, B7, B8) const BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9) -{ - typedef _mfi::BOOST_BIND_MF_NAME(cmf8)<R, T, B1, B2, B3, B4, B5, B6, B7, B8> F; - typedef typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type list_type; - return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6, a7, a8, a9)); -} diff --git a/contrib/restricted/boost/bind/include/boost/bind/bind_mf_cc.hpp b/contrib/restricted/boost/bind/include/boost/bind/bind_mf_cc.hpp deleted file mode 100644 index 5a1610b42a..0000000000 --- a/contrib/restricted/boost/bind/include/boost/bind/bind_mf_cc.hpp +++ /dev/null @@ -1,441 +0,0 @@ -// -// bind/bind_mf_cc.hpp - support for different calling conventions -// -// Do not include this header directly. -// -// Copyright (c) 2001 Peter Dimov and Multi Media Ltd. -// -// Distributed under the Boost Software License, Version 1.0. (See -// accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) -// -// See http://www.boost.org/libs/bind/bind.html for documentation. -// - -// 0 - -template<class R, class T, - class A1> - _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(mf0)<R, T>, typename _bi::list_av_1<A1>::type> - BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) () BOOST_BIND_MF_NOEXCEPT, A1 a1) -{ - typedef _mfi::BOOST_BIND_MF_NAME(mf0)<R, T> F; - typedef typename _bi::list_av_1<A1>::type list_type; - return _bi::bind_t<R, F, list_type>(F(f), list_type(a1)); -} - -template<class R, class T, - class A1> - _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(cmf0)<R, T>, typename _bi::list_av_1<A1>::type> - BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) () const BOOST_BIND_MF_NOEXCEPT, A1 a1) -{ - typedef _mfi::BOOST_BIND_MF_NAME(cmf0)<R, T> F; - typedef typename _bi::list_av_1<A1>::type list_type; - return _bi::bind_t<R, F, list_type>(F(f), list_type(a1)); -} - -template<class Rt2, class R, class T, - class A1> - typename boost::enable_if_c<!_bi::is_same<Rt2, R>::value, - _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(mf0)<R, T>, typename _bi::list_av_1<A1>::type> - >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) () BOOST_BIND_MF_NOEXCEPT, A1 a1) -{ - typedef _mfi::BOOST_BIND_MF_NAME(mf0)<R, T> F; - typedef typename _bi::list_av_1<A1>::type list_type; - return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1)); -} - -template<class Rt2, class R, class T, - class A1> - typename boost::enable_if_c<!_bi::is_same<Rt2, R>::value, - _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(cmf0)<R, T>, typename _bi::list_av_1<A1>::type> - >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) () const BOOST_BIND_MF_NOEXCEPT, A1 a1) -{ - typedef _mfi::BOOST_BIND_MF_NAME(cmf0)<R, T> F; - typedef typename _bi::list_av_1<A1>::type list_type; - return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1)); -} - -// 1 - -template<class R, class T, - class B1, - class A1, class A2> - _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(mf1)<R, T, B1>, typename _bi::list_av_2<A1, A2>::type> - BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1) BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2) -{ - typedef _mfi::BOOST_BIND_MF_NAME(mf1)<R, T, B1> F; - typedef typename _bi::list_av_2<A1, A2>::type list_type; - return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2)); -} - -template<class R, class T, - class B1, - class A1, class A2> - _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(cmf1)<R, T, B1>, typename _bi::list_av_2<A1, A2>::type> - BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1) const BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2) -{ - typedef _mfi::BOOST_BIND_MF_NAME(cmf1)<R, T, B1> F; - typedef typename _bi::list_av_2<A1, A2>::type list_type; - return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2)); -} - -template<class Rt2, class R, class T, - class B1, - class A1, class A2> - typename boost::enable_if_c<!_bi::is_same<Rt2, R>::value, - _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(mf1)<R, T, B1>, typename _bi::list_av_2<A1, A2>::type> - >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1) BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2) -{ - typedef _mfi::BOOST_BIND_MF_NAME(mf1)<R, T, B1> F; - typedef typename _bi::list_av_2<A1, A2>::type list_type; - return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2)); -} - -template<class Rt2, class R, class T, - class B1, - class A1, class A2> - typename boost::enable_if_c<!_bi::is_same<Rt2, R>::value, - _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(cmf1)<R, T, B1>, typename _bi::list_av_2<A1, A2>::type> - >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1) const BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2) -{ - typedef _mfi::BOOST_BIND_MF_NAME(cmf1)<R, T, B1> F; - typedef typename _bi::list_av_2<A1, A2>::type list_type; - return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2)); -} - -// 2 - -template<class R, class T, - class B1, class B2, - class A1, class A2, class A3> - _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(mf2)<R, T, B1, B2>, typename _bi::list_av_3<A1, A2, A3>::type> - BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2) BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3) -{ - typedef _mfi::BOOST_BIND_MF_NAME(mf2)<R, T, B1, B2> F; - typedef typename _bi::list_av_3<A1, A2, A3>::type list_type; - return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2, a3)); -} - -template<class R, class T, - class B1, class B2, - class A1, class A2, class A3> - _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(cmf2)<R, T, B1, B2>, typename _bi::list_av_3<A1, A2, A3>::type> - BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2) const BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3) -{ - typedef _mfi::BOOST_BIND_MF_NAME(cmf2)<R, T, B1, B2> F; - typedef typename _bi::list_av_3<A1, A2, A3>::type list_type; - return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2, a3)); -} - -template<class Rt2, class R, class T, - class B1, class B2, - class A1, class A2, class A3> - typename boost::enable_if_c<!_bi::is_same<Rt2, R>::value, - _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(mf2)<R, T, B1, B2>, typename _bi::list_av_3<A1, A2, A3>::type> - >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2) BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3) -{ - typedef _mfi::BOOST_BIND_MF_NAME(mf2)<R, T, B1, B2> F; - typedef typename _bi::list_av_3<A1, A2, A3>::type list_type; - return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2, a3)); -} - -template<class Rt2, class R, class T, - class B1, class B2, - class A1, class A2, class A3> - typename boost::enable_if_c<!_bi::is_same<Rt2, R>::value, - _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(cmf2)<R, T, B1, B2>, typename _bi::list_av_3<A1, A2, A3>::type> - >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2) const BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3) -{ - typedef _mfi::BOOST_BIND_MF_NAME(cmf2)<R, T, B1, B2> F; - typedef typename _bi::list_av_3<A1, A2, A3>::type list_type; - return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2, a3)); -} - -// 3 - -template<class R, class T, - class B1, class B2, class B3, - class A1, class A2, class A3, class A4> - _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(mf3)<R, T, B1, B2, B3>, typename _bi::list_av_4<A1, A2, A3, A4>::type> - BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3) BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4) -{ - typedef _mfi::BOOST_BIND_MF_NAME(mf3)<R, T, B1, B2, B3> F; - typedef typename _bi::list_av_4<A1, A2, A3, A4>::type list_type; - return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2, a3, a4)); -} - -template<class R, class T, - class B1, class B2, class B3, - class A1, class A2, class A3, class A4> - _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(cmf3)<R, T, B1, B2, B3>, typename _bi::list_av_4<A1, A2, A3, A4>::type> - BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3) const BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4) -{ - typedef _mfi::BOOST_BIND_MF_NAME(cmf3)<R, T, B1, B2, B3> F; - typedef typename _bi::list_av_4<A1, A2, A3, A4>::type list_type; - return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2, a3, a4)); -} - -template<class Rt2, class R, class T, - class B1, class B2, class B3, - class A1, class A2, class A3, class A4> - typename boost::enable_if_c<!_bi::is_same<Rt2, R>::value, - _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(mf3)<R, T, B1, B2, B3>, typename _bi::list_av_4<A1, A2, A3, A4>::type> - >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3) BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4) -{ - typedef _mfi::BOOST_BIND_MF_NAME(mf3)<R, T, B1, B2, B3> F; - typedef typename _bi::list_av_4<A1, A2, A3, A4>::type list_type; - return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2, a3, a4)); -} - -template<class Rt2, class R, class T, - class B1, class B2, class B3, - class A1, class A2, class A3, class A4> - typename boost::enable_if_c<!_bi::is_same<Rt2, R>::value, - _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(cmf3)<R, T, B1, B2, B3>, typename _bi::list_av_4<A1, A2, A3, A4>::type> - >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3) const BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4) -{ - typedef _mfi::BOOST_BIND_MF_NAME(cmf3)<R, T, B1, B2, B3> F; - typedef typename _bi::list_av_4<A1, A2, A3, A4>::type list_type; - return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2, a3, a4)); -} - -// 4 - -template<class R, class T, - class B1, class B2, class B3, class B4, - class A1, class A2, class A3, class A4, class A5> - _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(mf4)<R, T, B1, B2, B3, B4>, typename _bi::list_av_5<A1, A2, A3, A4, A5>::type> - BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4) BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) -{ - typedef _mfi::BOOST_BIND_MF_NAME(mf4)<R, T, B1, B2, B3, B4> F; - typedef typename _bi::list_av_5<A1, A2, A3, A4, A5>::type list_type; - return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5)); -} - -template<class R, class T, - class B1, class B2, class B3, class B4, - class A1, class A2, class A3, class A4, class A5> - _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(cmf4)<R, T, B1, B2, B3, B4>, typename _bi::list_av_5<A1, A2, A3, A4, A5>::type> - BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4) const BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) -{ - typedef _mfi::BOOST_BIND_MF_NAME(cmf4)<R, T, B1, B2, B3, B4> F; - typedef typename _bi::list_av_5<A1, A2, A3, A4, A5>::type list_type; - return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5)); -} - -template<class Rt2, class R, class T, - class B1, class B2, class B3, class B4, - class A1, class A2, class A3, class A4, class A5> - typename boost::enable_if_c<!_bi::is_same<Rt2, R>::value, - _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(mf4)<R, T, B1, B2, B3, B4>, typename _bi::list_av_5<A1, A2, A3, A4, A5>::type> - >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4) BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) -{ - typedef _mfi::BOOST_BIND_MF_NAME(mf4)<R, T, B1, B2, B3, B4> F; - typedef typename _bi::list_av_5<A1, A2, A3, A4, A5>::type list_type; - return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5)); -} - -template<class Rt2, class R, class T, - class B1, class B2, class B3, class B4, - class A1, class A2, class A3, class A4, class A5> - typename boost::enable_if_c<!_bi::is_same<Rt2, R>::value, - _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(cmf4)<R, T, B1, B2, B3, B4>, typename _bi::list_av_5<A1, A2, A3, A4, A5>::type> - >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4) const BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) -{ - typedef _mfi::BOOST_BIND_MF_NAME(cmf4)<R, T, B1, B2, B3, B4> F; - typedef typename _bi::list_av_5<A1, A2, A3, A4, A5>::type list_type; - return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5)); -} - -// 5 - -template<class R, class T, - class B1, class B2, class B3, class B4, class B5, - class A1, class A2, class A3, class A4, class A5, class A6> - _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(mf5)<R, T, B1, B2, B3, B4, B5>, typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type> - BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5) BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) -{ - typedef _mfi::BOOST_BIND_MF_NAME(mf5)<R, T, B1, B2, B3, B4, B5> F; - typedef typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type list_type; - return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6)); -} - -template<class R, class T, - class B1, class B2, class B3, class B4, class B5, - class A1, class A2, class A3, class A4, class A5, class A6> - _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(cmf5)<R, T, B1, B2, B3, B4, B5>, typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type> - BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5) const BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) -{ - typedef _mfi::BOOST_BIND_MF_NAME(cmf5)<R, T, B1, B2, B3, B4, B5> F; - typedef typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type list_type; - return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6)); -} - -template<class Rt2, class R, class T, - class B1, class B2, class B3, class B4, class B5, - class A1, class A2, class A3, class A4, class A5, class A6> - typename boost::enable_if_c<!_bi::is_same<Rt2, R>::value, - _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(mf5)<R, T, B1, B2, B3, B4, B5>, typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type> - >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5) BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) -{ - typedef _mfi::BOOST_BIND_MF_NAME(mf5)<R, T, B1, B2, B3, B4, B5> F; - typedef typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type list_type; - return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6)); -} - -template<class Rt2, class R, class T, - class B1, class B2, class B3, class B4, class B5, - class A1, class A2, class A3, class A4, class A5, class A6> - typename boost::enable_if_c<!_bi::is_same<Rt2, R>::value, - _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(cmf5)<R, T, B1, B2, B3, B4, B5>, typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type> - >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5) const BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) -{ - typedef _mfi::BOOST_BIND_MF_NAME(cmf5)<R, T, B1, B2, B3, B4, B5> F; - typedef typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type list_type; - return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6)); -} - -// 6 - -template<class R, class T, - class B1, class B2, class B3, class B4, class B5, class B6, - class A1, class A2, class A3, class A4, class A5, class A6, class A7> - _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(mf6)<R, T, B1, B2, B3, B4, B5, B6>, typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type> - BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6) BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) -{ - typedef _mfi::BOOST_BIND_MF_NAME(mf6)<R, T, B1, B2, B3, B4, B5, B6> F; - typedef typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type list_type; - return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6, a7)); -} - -template<class R, class T, - class B1, class B2, class B3, class B4, class B5, class B6, - class A1, class A2, class A3, class A4, class A5, class A6, class A7> - _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(cmf6)<R, T, B1, B2, B3, B4, B5, B6>, typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type> - BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6) const BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) -{ - typedef _mfi::BOOST_BIND_MF_NAME(cmf6)<R, T, B1, B2, B3, B4, B5, B6> F; - typedef typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type list_type; - return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6, a7)); -} - -template<class Rt2, class R, class T, - class B1, class B2, class B3, class B4, class B5, class B6, - class A1, class A2, class A3, class A4, class A5, class A6, class A7> - typename boost::enable_if_c<!_bi::is_same<Rt2, R>::value, - _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(mf6)<R, T, B1, B2, B3, B4, B5, B6>, typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type> - >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6) BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) -{ - typedef _mfi::BOOST_BIND_MF_NAME(mf6)<R, T, B1, B2, B3, B4, B5, B6> F; - typedef typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type list_type; - return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6, a7)); -} - -template<class Rt2, class R, class T, - class B1, class B2, class B3, class B4, class B5, class B6, - class A1, class A2, class A3, class A4, class A5, class A6, class A7> - typename boost::enable_if_c<!_bi::is_same<Rt2, R>::value, - _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(cmf6)<R, T, B1, B2, B3, B4, B5, B6>, typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type> - >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6) const BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) -{ - typedef _mfi::BOOST_BIND_MF_NAME(cmf6)<R, T, B1, B2, B3, B4, B5, B6> F; - typedef typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type list_type; - return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6, a7)); -} - -// 7 - -template<class R, class T, - class B1, class B2, class B3, class B4, class B5, class B6, class B7, - class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> - _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(mf7)<R, T, B1, B2, B3, B4, B5, B6, B7>, typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type> - BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6, B7) BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) -{ - typedef _mfi::BOOST_BIND_MF_NAME(mf7)<R, T, B1, B2, B3, B4, B5, B6, B7> F; - typedef typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type list_type; - return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6, a7, a8)); -} - -template<class R, class T, - class B1, class B2, class B3, class B4, class B5, class B6, class B7, - class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> - _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(cmf7)<R, T, B1, B2, B3, B4, B5, B6, B7>, typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type> - BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6, B7) const BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) -{ - typedef _mfi::BOOST_BIND_MF_NAME(cmf7)<R, T, B1, B2, B3, B4, B5, B6, B7> F; - typedef typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type list_type; - return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6, a7, a8)); -} - -template<class Rt2, class R, class T, - class B1, class B2, class B3, class B4, class B5, class B6, class B7, - class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> - typename boost::enable_if_c<!_bi::is_same<Rt2, R>::value, - _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(mf7)<R, T, B1, B2, B3, B4, B5, B6, B7>, typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type> - >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6, B7) BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) -{ - typedef _mfi::BOOST_BIND_MF_NAME(mf7)<R, T, B1, B2, B3, B4, B5, B6, B7> F; - typedef typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type list_type; - return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6, a7, a8)); -} - -template<class Rt2, class R, class T, - class B1, class B2, class B3, class B4, class B5, class B6, class B7, - class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> - typename boost::enable_if_c<!_bi::is_same<Rt2, R>::value, - _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(cmf7)<R, T, B1, B2, B3, B4, B5, B6, B7>, typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type> - >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6, B7) const BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) -{ - typedef _mfi::BOOST_BIND_MF_NAME(cmf7)<R, T, B1, B2, B3, B4, B5, B6, B7> F; - typedef typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type list_type; - return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6, a7, a8)); -} - -// 8 - -template<class R, class T, - class B1, class B2, class B3, class B4, class B5, class B6, class B7, class B8, - class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> - _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(mf8)<R, T, B1, B2, B3, B4, B5, B6, B7, B8>, typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type> - BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6, B7, B8) BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9) -{ - typedef _mfi::BOOST_BIND_MF_NAME(mf8)<R, T, B1, B2, B3, B4, B5, B6, B7, B8> F; - typedef typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type list_type; - return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6, a7, a8, a9)); -} - -template<class R, class T, - class B1, class B2, class B3, class B4, class B5, class B6, class B7, class B8, - class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> - _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(cmf8)<R, T, B1, B2, B3, B4, B5, B6, B7, B8>, typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type> - BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6, B7, B8) const BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9) -{ - typedef _mfi::BOOST_BIND_MF_NAME(cmf8)<R, T, B1, B2, B3, B4, B5, B6, B7, B8> F; - typedef typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type list_type; - return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6, a7, a8, a9)); -} - -template<class Rt2, class R, class T, - class B1, class B2, class B3, class B4, class B5, class B6, class B7, class B8, - class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> - typename boost::enable_if_c<!_bi::is_same<Rt2, R>::value, - _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(mf8)<R, T, B1, B2, B3, B4, B5, B6, B7, B8>, typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type> - >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6, B7, B8) BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9) -{ - typedef _mfi::BOOST_BIND_MF_NAME(mf8)<R, T, B1, B2, B3, B4, B5, B6, B7, B8> F; - typedef typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type list_type; - return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6, a7, a8, a9)); -} - -template<class Rt2, class R, class T, - class B1, class B2, class B3, class B4, class B5, class B6, class B7, class B8, - class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> - typename boost::enable_if_c<!_bi::is_same<Rt2, R>::value, - _bi::bind_t<Rt2, _mfi::BOOST_BIND_MF_NAME(cmf8)<R, T, B1, B2, B3, B4, B5, B6, B7, B8>, typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type> - >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6, B7, B8) const BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9) -{ - typedef _mfi::BOOST_BIND_MF_NAME(cmf8)<R, T, B1, B2, B3, B4, B5, B6, B7, B8> F; - typedef typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type list_type; - return _bi::bind_t<Rt2, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6, a7, a8, a9)); -} diff --git a/contrib/restricted/boost/bind/include/boost/bind/bind_template.hpp b/contrib/restricted/boost/bind/include/boost/bind/bind_template.hpp deleted file mode 100644 index 212ced7fa7..0000000000 --- a/contrib/restricted/boost/bind/include/boost/bind/bind_template.hpp +++ /dev/null @@ -1,345 +0,0 @@ -// -// bind/bind_template.hpp -// -// Do not include this header directly. -// -// Copyright (c) 2001-2004 Peter Dimov and Multi Media Ltd. -// -// Distributed under the Boost Software License, Version 1.0. (See -// accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) -// -// See http://www.boost.org/libs/bind/bind.html for documentation. -// - - typedef typename result_traits<R, F>::type result_type; - - result_type operator()() - { - list0 a; - BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0); - } - - result_type operator()() const - { - list0 a; - BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0); - } - - template<class A1> result_type operator()(A1 & a1) - { - list1<A1 &> a(a1); - BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0); - } - - template<class A1> result_type operator()(A1 & a1) const - { - list1<A1 &> a(a1); - BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0); - } - -#if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) \ - && !BOOST_WORKAROUND(__EDG_VERSION__, <= 238) - - template<class A1> result_type operator()(A1 const & a1) - { - list1<A1 const &> a(a1); - BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0); - } - - template<class A1> result_type operator()(A1 const & a1) const - { - list1<A1 const &> a(a1); - BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0); - } - -#endif - - template<class A1, class A2> result_type operator()(A1 & a1, A2 & a2) - { - list2<A1 &, A2 &> a(a1, a2); - BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0); - } - - template<class A1, class A2> result_type operator()(A1 & a1, A2 & a2) const - { - list2<A1 &, A2 &> a(a1, a2); - BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0); - } - -#if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) \ - && !BOOST_WORKAROUND(__EDG_VERSION__, <= 238) - - template<class A1, class A2> result_type operator()(A1 const & a1, A2 & a2) - { - list2<A1 const &, A2 &> a(a1, a2); - BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0); - } - - template<class A1, class A2> result_type operator()(A1 const & a1, A2 & a2) const - { - list2<A1 const &, A2 &> a(a1, a2); - BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0); - } - - - template<class A1, class A2> result_type operator()(A1 & a1, A2 const & a2) - { - list2<A1 &, A2 const &> a(a1, a2); - BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0); - } - - template<class A1, class A2> result_type operator()(A1 & a1, A2 const & a2) const - { - list2<A1 &, A2 const &> a(a1, a2); - BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0); - } - - - template<class A1, class A2> result_type operator()(A1 const & a1, A2 const & a2) - { - list2<A1 const &, A2 const &> a(a1, a2); - BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0); - } - - template<class A1, class A2> result_type operator()(A1 const & a1, A2 const & a2) const - { - list2<A1 const &, A2 const &> a(a1, a2); - BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0); - } - -#endif - - template<class A1, class A2, class A3> result_type operator()(A1 & a1, A2 & a2, A3 & a3) - { - list3<A1 &, A2 &, A3 &> a(a1, a2, a3); - BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0); - } - - template<class A1, class A2, class A3> result_type operator()(A1 & a1, A2 & a2, A3 & a3) const - { - list3<A1 &, A2 &, A3 &> a(a1, a2, a3); - BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0); - } - -#if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) \ - && !BOOST_WORKAROUND(__EDG_VERSION__, <= 238) - - template<class A1, class A2, class A3> result_type operator()(A1 const & a1, A2 const & a2, A3 const & a3) - { - list3<A1 const &, A2 const &, A3 const &> a(a1, a2, a3); - BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0); - } - - template<class A1, class A2, class A3> result_type operator()(A1 const & a1, A2 const & a2, A3 const & a3) const - { - list3<A1 const &, A2 const &, A3 const &> a(a1, a2, a3); - BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0); - } - -#endif - - template<class A1, class A2, class A3, class A4> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4) - { - list4<A1 &, A2 &, A3 &, A4 &> a(a1, a2, a3, a4); - BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0); - } - - template<class A1, class A2, class A3, class A4> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4) const - { - list4<A1 &, A2 &, A3 &, A4 &> a(a1, a2, a3, a4); - BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0); - } - -#if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) \ - && !BOOST_WORKAROUND(__EDG_VERSION__, <= 238) - - template<class A1, class A2, class A3, class A4> result_type operator()(A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4) - { - list4<A1 const &, A2 const &, A3 const &, A4 const &> a(a1, a2, a3, a4); - BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0); - } - - template<class A1, class A2, class A3, class A4> result_type operator()(A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4) const - { - list4<A1 const &, A2 const &, A3 const &, A4 const &> a(a1, a2, a3, a4); - BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0); - } - -#endif - - template<class A1, class A2, class A3, class A4, class A5> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5) - { - list5<A1 &, A2 &, A3 &, A4 &, A5 &> a(a1, a2, a3, a4, a5); - BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0); - } - - template<class A1, class A2, class A3, class A4, class A5> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5) const - { - list5<A1 &, A2 &, A3 &, A4 &, A5 &> a(a1, a2, a3, a4, a5); - BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0); - } - -#if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) \ - && !BOOST_WORKAROUND(__EDG_VERSION__, <= 238) - - template<class A1, class A2, class A3, class A4, class A5> result_type operator()(A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5) - { - list5<A1 const &, A2 const &, A3 const &, A4 const &, A5 const &> a(a1, a2, a3, a4, a5); - BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0); - } - - template<class A1, class A2, class A3, class A4, class A5> result_type operator()(A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5) const - { - list5<A1 const &, A2 const &, A3 const &, A4 const &, A5 const &> a(a1, a2, a3, a4, a5); - BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0); - } - -#endif - - template<class A1, class A2, class A3, class A4, class A5, class A6> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6) - { - list6<A1 &, A2 &, A3 &, A4 &, A5 &, A6 &> a(a1, a2, a3, a4, a5, a6); - BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0); - } - - template<class A1, class A2, class A3, class A4, class A5, class A6> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6) const - { - list6<A1 &, A2 &, A3 &, A4 &, A5 &, A6 &> a(a1, a2, a3, a4, a5, a6); - BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0); - } - -#if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) \ - && !BOOST_WORKAROUND(__EDG_VERSION__, <= 238) - - template<class A1, class A2, class A3, class A4, class A5, class A6> result_type operator()(A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6) - { - list6<A1 const &, A2 const &, A3 const &, A4 const &, A5 const &, A6 const &> a(a1, a2, a3, a4, a5, a6); - BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0); - } - - template<class A1, class A2, class A3, class A4, class A5, class A6> result_type operator()(A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6) const - { - list6<A1 const &, A2 const &, A3 const &, A4 const &, A5 const &, A6 const &> a(a1, a2, a3, a4, a5, a6); - BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0); - } - -#endif - - template<class A1, class A2, class A3, class A4, class A5, class A6, class A7> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7) - { - list7<A1 &, A2 &, A3 &, A4 &, A5 &, A6 &, A7 &> a(a1, a2, a3, a4, a5, a6, a7); - BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0); - } - - template<class A1, class A2, class A3, class A4, class A5, class A6, class A7> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7) const - { - list7<A1 &, A2 &, A3 &, A4 &, A5 &, A6 &, A7 &> a(a1, a2, a3, a4, a5, a6, a7); - BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0); - } - -#if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) \ - && !BOOST_WORKAROUND(__EDG_VERSION__, <= 238) - - template<class A1, class A2, class A3, class A4, class A5, class A6, class A7> result_type operator()(A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6, A7 const & a7) - { - list7<A1 const &, A2 const &, A3 const &, A4 const &, A5 const &, A6 const &, A7 const &> a(a1, a2, a3, a4, a5, a6, a7); - BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0); - } - - template<class A1, class A2, class A3, class A4, class A5, class A6, class A7> result_type operator()(A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6, A7 const & a7) const - { - list7<A1 const &, A2 const &, A3 const &, A4 const &, A5 const &, A6 const &, A7 const &> a(a1, a2, a3, a4, a5, a6, a7); - BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0); - } - -#endif - - template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7, A8 & a8) - { - list8<A1 &, A2 &, A3 &, A4 &, A5 &, A6 &, A7 &, A8 &> a(a1, a2, a3, a4, a5, a6, a7, a8); - BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0); - } - - template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7, A8 & a8) const - { - list8<A1 &, A2 &, A3 &, A4 &, A5 &, A6 &, A7 &, A8 &> a(a1, a2, a3, a4, a5, a6, a7, a8); - BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0); - } - -#if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) \ - && !BOOST_WORKAROUND(__EDG_VERSION__, <= 238) - - template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> result_type operator()(A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6, A7 const & a7, A8 const & a8) - { - list8<A1 const &, A2 const &, A3 const &, A4 const &, A5 const &, A6 const &, A7 const &, A8 const &> a(a1, a2, a3, a4, a5, a6, a7, a8); - BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0); - } - - template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> result_type operator()(A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6, A7 const & a7, A8 const & a8) const - { - list8<A1 const &, A2 const &, A3 const &, A4 const &, A5 const &, A6 const &, A7 const &, A8 const &> a(a1, a2, a3, a4, a5, a6, a7, a8); - BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0); - } - -#endif - - template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7, A8 & a8, A9 & a9) - { - list9<A1 &, A2 &, A3 &, A4 &, A5 &, A6 &, A7 &, A8 &, A9 &> a(a1, a2, a3, a4, a5, a6, a7, a8, a9); - BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0); - } - - template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7, A8 & a8, A9 & a9) const - { - list9<A1 &, A2 &, A3 &, A4 &, A5 &, A6 &, A7 &, A8 &, A9 &> a(a1, a2, a3, a4, a5, a6, a7, a8, a9); - BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0); - } - -#if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) \ - && !BOOST_WORKAROUND(__EDG_VERSION__, <= 238) - - template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> result_type operator()(A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6, A7 const & a7, A8 const & a8, A9 const & a9) - { - list9<A1 const &, A2 const &, A3 const &, A4 const &, A5 const &, A6 const &, A7 const &, A8 const &, A9 const &> a(a1, a2, a3, a4, a5, a6, a7, a8, a9); - BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0); - } - - template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> result_type operator()(A1 const & a1, A2 const & a2, A3 const & a3, A4 const & a4, A5 const & a5, A6 const & a6, A7 const & a7, A8 const & a8, A9 const & a9) const - { - list9<A1 const &, A2 const &, A3 const &, A4 const &, A5 const &, A6 const &, A7 const &, A8 const &, A9 const &> a(a1, a2, a3, a4, a5, a6, a7, a8, a9); - BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0); - } - -#endif - - template<class A> result_type eval(A & a) - { - BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0); - } - - template<class A> result_type eval(A & a) const - { - BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0); - } - - template<class V> void accept(V & v) const - { -#if !defined( BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP ) && !defined( BOOST_BORLANDC ) - - using boost::visit_each; - -#endif - BOOST_BIND_VISIT_EACH(v, f_, 0); - l_.accept(v); - } - - bool compare(this_type const & rhs) const - { - return ref_compare(f_, rhs.f_, 0) && l_ == rhs.l_; - } - -private: - - F f_; - L l_; diff --git a/contrib/restricted/boost/bind/include/boost/bind/bind_cc.hpp b/contrib/restricted/boost/bind/include/boost/bind/detail/bind_cc.hpp index 278aa9a2a8..fec86d4e0d 100644 --- a/contrib/restricted/boost/bind/include/boost/bind/bind_cc.hpp +++ b/contrib/restricted/boost/bind/include/boost/bind/detail/bind_cc.hpp @@ -13,105 +13,105 @@ // template<class R> - _bi::bind_t<R, BOOST_BIND_ST R (BOOST_BIND_CC *) () BOOST_BIND_NOEXCEPT, _bi::list0> +_bi::bind_t<R, BOOST_BIND_ST R (BOOST_BIND_CC *) () BOOST_BIND_NOEXCEPT, typename _bi::list_av<>::type> BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) () BOOST_BIND_NOEXCEPT) { typedef BOOST_BIND_ST R (BOOST_BIND_CC *F) () BOOST_BIND_NOEXCEPT; - typedef _bi::list0 list_type; + typedef typename _bi::list_av<>::type list_type; return _bi::bind_t<R, F, list_type> (f, list_type()); } template<class R, class B1, class A1> - _bi::bind_t<R, BOOST_BIND_ST R (BOOST_BIND_CC *) (B1) BOOST_BIND_NOEXCEPT, typename _bi::list_av_1<A1>::type> + _bi::bind_t<R, BOOST_BIND_ST R (BOOST_BIND_CC *) (B1) BOOST_BIND_NOEXCEPT, typename _bi::list_av<A1>::type> BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) (B1) BOOST_BIND_NOEXCEPT, A1 a1) { typedef BOOST_BIND_ST R (BOOST_BIND_CC *F) (B1) BOOST_BIND_NOEXCEPT; - typedef typename _bi::list_av_1<A1>::type list_type; + typedef typename _bi::list_av<A1>::type list_type; return _bi::bind_t<R, F, list_type> (f, list_type(a1)); } template<class R, class B1, class B2, class A1, class A2> - _bi::bind_t<R, BOOST_BIND_ST R (BOOST_BIND_CC *) (B1, B2) BOOST_BIND_NOEXCEPT, typename _bi::list_av_2<A1, A2>::type> + _bi::bind_t<R, BOOST_BIND_ST R (BOOST_BIND_CC *) (B1, B2) BOOST_BIND_NOEXCEPT, typename _bi::list_av<A1, A2>::type> BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) (B1, B2) BOOST_BIND_NOEXCEPT, A1 a1, A2 a2) { typedef BOOST_BIND_ST R (BOOST_BIND_CC *F) (B1, B2) BOOST_BIND_NOEXCEPT; - typedef typename _bi::list_av_2<A1, A2>::type list_type; + typedef typename _bi::list_av<A1, A2>::type list_type; return _bi::bind_t<R, F, list_type> (f, list_type(a1, a2)); } template<class R, class B1, class B2, class B3, class A1, class A2, class A3> - _bi::bind_t<R, BOOST_BIND_ST R (BOOST_BIND_CC *) (B1, B2, B3) BOOST_BIND_NOEXCEPT, typename _bi::list_av_3<A1, A2, A3>::type> + _bi::bind_t<R, BOOST_BIND_ST R (BOOST_BIND_CC *) (B1, B2, B3) BOOST_BIND_NOEXCEPT, typename _bi::list_av<A1, A2, A3>::type> BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) (B1, B2, B3) BOOST_BIND_NOEXCEPT, A1 a1, A2 a2, A3 a3) { typedef BOOST_BIND_ST R (BOOST_BIND_CC *F) (B1, B2, B3) BOOST_BIND_NOEXCEPT; - typedef typename _bi::list_av_3<A1, A2, A3>::type list_type; + typedef typename _bi::list_av<A1, A2, A3>::type list_type; return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3)); } template<class R, class B1, class B2, class B3, class B4, class A1, class A2, class A3, class A4> - _bi::bind_t<R, BOOST_BIND_ST R (BOOST_BIND_CC *) (B1, B2, B3, B4) BOOST_BIND_NOEXCEPT, typename _bi::list_av_4<A1, A2, A3, A4>::type> + _bi::bind_t<R, BOOST_BIND_ST R (BOOST_BIND_CC *) (B1, B2, B3, B4) BOOST_BIND_NOEXCEPT, typename _bi::list_av<A1, A2, A3, A4>::type> BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) (B1, B2, B3, B4) BOOST_BIND_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4) { typedef BOOST_BIND_ST R (BOOST_BIND_CC *F) (B1, B2, B3, B4) BOOST_BIND_NOEXCEPT; - typedef typename _bi::list_av_4<A1, A2, A3, A4>::type list_type; + typedef typename _bi::list_av<A1, A2, A3, A4>::type list_type; return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4)); } template<class R, class B1, class B2, class B3, class B4, class B5, class A1, class A2, class A3, class A4, class A5> - _bi::bind_t<R, BOOST_BIND_ST R (BOOST_BIND_CC *) (B1, B2, B3, B4, B5) BOOST_BIND_NOEXCEPT, typename _bi::list_av_5<A1, A2, A3, A4, A5>::type> + _bi::bind_t<R, BOOST_BIND_ST R (BOOST_BIND_CC *) (B1, B2, B3, B4, B5) BOOST_BIND_NOEXCEPT, typename _bi::list_av<A1, A2, A3, A4, A5>::type> BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) (B1, B2, B3, B4, B5) BOOST_BIND_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) { typedef BOOST_BIND_ST R (BOOST_BIND_CC *F) (B1, B2, B3, B4, B5) BOOST_BIND_NOEXCEPT; - typedef typename _bi::list_av_5<A1, A2, A3, A4, A5>::type list_type; + typedef typename _bi::list_av<A1, A2, A3, A4, A5>::type list_type; return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5)); } template<class R, class B1, class B2, class B3, class B4, class B5, class B6, class A1, class A2, class A3, class A4, class A5, class A6> - _bi::bind_t<R, BOOST_BIND_ST R (BOOST_BIND_CC *) (B1, B2, B3, B4, B5, B6) BOOST_BIND_NOEXCEPT, typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type> + _bi::bind_t<R, BOOST_BIND_ST R (BOOST_BIND_CC *) (B1, B2, B3, B4, B5, B6) BOOST_BIND_NOEXCEPT, typename _bi::list_av<A1, A2, A3, A4, A5, A6>::type> BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) (B1, B2, B3, B4, B5, B6) BOOST_BIND_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) { typedef BOOST_BIND_ST R (BOOST_BIND_CC *F) (B1, B2, B3, B4, B5, B6) BOOST_BIND_NOEXCEPT; - typedef typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type list_type; + typedef typename _bi::list_av<A1, A2, A3, A4, A5, A6>::type list_type; return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6)); } template<class R, class B1, class B2, class B3, class B4, class B5, class B6, class B7, class A1, class A2, class A3, class A4, class A5, class A6, class A7> - _bi::bind_t<R, BOOST_BIND_ST R (BOOST_BIND_CC *) (B1, B2, B3, B4, B5, B6, B7) BOOST_BIND_NOEXCEPT, typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type> + _bi::bind_t<R, BOOST_BIND_ST R (BOOST_BIND_CC *) (B1, B2, B3, B4, B5, B6, B7) BOOST_BIND_NOEXCEPT, typename _bi::list_av<A1, A2, A3, A4, A5, A6, A7>::type> BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) (B1, B2, B3, B4, B5, B6, B7) BOOST_BIND_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) { typedef BOOST_BIND_ST R (BOOST_BIND_CC *F) (B1, B2, B3, B4, B5, B6, B7) BOOST_BIND_NOEXCEPT; - typedef typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type list_type; + typedef typename _bi::list_av<A1, A2, A3, A4, A5, A6, A7>::type list_type; return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6, a7)); } template<class R, class B1, class B2, class B3, class B4, class B5, class B6, class B7, class B8, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> - _bi::bind_t<R, BOOST_BIND_ST R (BOOST_BIND_CC *) (B1, B2, B3, B4, B5, B6, B7, B8) BOOST_BIND_NOEXCEPT, typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type> + _bi::bind_t<R, BOOST_BIND_ST R (BOOST_BIND_CC *) (B1, B2, B3, B4, B5, B6, B7, B8) BOOST_BIND_NOEXCEPT, typename _bi::list_av<A1, A2, A3, A4, A5, A6, A7, A8>::type> BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) (B1, B2, B3, B4, B5, B6, B7, B8) BOOST_BIND_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) { typedef BOOST_BIND_ST R (BOOST_BIND_CC *F) (B1, B2, B3, B4, B5, B6, B7, B8) BOOST_BIND_NOEXCEPT; - typedef typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type list_type; + typedef typename _bi::list_av<A1, A2, A3, A4, A5, A6, A7, A8>::type list_type; return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6, a7, a8)); } template<class R, class B1, class B2, class B3, class B4, class B5, class B6, class B7, class B8, class B9, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> - _bi::bind_t<R, BOOST_BIND_ST R (BOOST_BIND_CC *) (B1, B2, B3, B4, B5, B6, B7, B8, B9) BOOST_BIND_NOEXCEPT, typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type> + _bi::bind_t<R, BOOST_BIND_ST R (BOOST_BIND_CC *) (B1, B2, B3, B4, B5, B6, B7, B8, B9) BOOST_BIND_NOEXCEPT, typename _bi::list_av<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type> BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) (B1, B2, B3, B4, B5, B6, B7, B8, B9) BOOST_BIND_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9) { typedef BOOST_BIND_ST R (BOOST_BIND_CC *F) (B1, B2, B3, B4, B5, B6, B7, B8, B9) BOOST_BIND_NOEXCEPT; - typedef typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type list_type; + typedef typename _bi::list_av<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type list_type; return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6, a7, a8, a9)); } diff --git a/contrib/restricted/boost/bind/include/boost/bind/detail/bind_mf2_cc.hpp b/contrib/restricted/boost/bind/include/boost/bind/detail/bind_mf2_cc.hpp new file mode 100644 index 0000000000..284f24172a --- /dev/null +++ b/contrib/restricted/boost/bind/include/boost/bind/detail/bind_mf2_cc.hpp @@ -0,0 +1,210 @@ +// +// bind/bind_mf2_cc.hpp - member functions, type<> syntax +// +// Do not include this header directly. +// +// Copyright (c) 2001 Peter Dimov and Multi Media Ltd. +// Copyright (c) 2008 Peter Dimov +// +// Distributed under the Boost Software License, Version 1.0. +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +// +// See http://www.boost.org/libs/bind/bind.html for documentation. +// + +// 0 + +template<class Rt2, class R, class T, + class A1> + auto + BOOST_BIND(boost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) () BOOST_BIND_MF_NOEXCEPT, A1 a1) + -> decltype( boost::BOOST_BIND( boost::type<Rt2>(), boost::mem_fn( f ), a1 ) ) +{ + return boost::BOOST_BIND( boost::type<Rt2>(), boost::mem_fn( f ), a1 ); +} + +template<class Rt2, class R, class T, + class A1> + auto + BOOST_BIND(boost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) () const BOOST_BIND_MF_NOEXCEPT, A1 a1) + -> decltype( boost::BOOST_BIND( boost::type<Rt2>(), boost::mem_fn( f ), a1 ) ) +{ + return boost::BOOST_BIND( boost::type<Rt2>(), boost::mem_fn( f ), a1 ); +} + +// 1 + +template<class Rt2, class R, class T, + class B1, + class A1, class A2> + auto + BOOST_BIND(boost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) (B1) BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2) + -> decltype( boost::BOOST_BIND( boost::type<Rt2>(), boost::mem_fn( f ), a1, a2 ) ) +{ + return boost::BOOST_BIND( boost::type<Rt2>(), boost::mem_fn( f ), a1, a2 ); +} + +template<class Rt2, class R, class T, + class B1, + class A1, class A2> + auto + BOOST_BIND(boost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) (B1) const BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2) + -> decltype( boost::BOOST_BIND( boost::type<Rt2>(), boost::mem_fn( f ), a1, a2 ) ) +{ + return boost::BOOST_BIND( boost::type<Rt2>(), boost::mem_fn( f ), a1, a2 ); +} + +// 2 + +template<class Rt2, class R, class T, + class B1, class B2, + class A1, class A2, class A3> + auto + BOOST_BIND(boost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) (B1, B2) BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3) + -> decltype( boost::BOOST_BIND( boost::type<Rt2>(), boost::mem_fn( f ), a1, a2, a3 ) ) +{ + return boost::BOOST_BIND( boost::type<Rt2>(), boost::mem_fn( f ), a1, a2, a3 ); +} + +template<class Rt2, class R, class T, + class B1, class B2, + class A1, class A2, class A3> + auto + BOOST_BIND(boost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) (B1, B2) const BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3) + -> decltype( boost::BOOST_BIND( boost::type<Rt2>(), boost::mem_fn( f ), a1, a2, a3 ) ) +{ + return boost::BOOST_BIND( boost::type<Rt2>(), boost::mem_fn( f ), a1, a2, a3 ); +} + +// 3 + +template<class Rt2, class R, class T, + class B1, class B2, class B3, + class A1, class A2, class A3, class A4> + auto + BOOST_BIND(boost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3) BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4) + -> decltype( boost::BOOST_BIND( boost::type<Rt2>(), boost::mem_fn( f ), a1, a2, a3, a4 ) ) +{ + return boost::BOOST_BIND( boost::type<Rt2>(), boost::mem_fn( f ), a1, a2, a3, a4 ); +} + +template<class Rt2, class R, class T, + class B1, class B2, class B3, + class A1, class A2, class A3, class A4> + auto + BOOST_BIND(boost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3) const BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4) + -> decltype( boost::BOOST_BIND( boost::type<Rt2>(), boost::mem_fn( f ), a1, a2, a3, a4 ) ) +{ + return boost::BOOST_BIND( boost::type<Rt2>(), boost::mem_fn( f ), a1, a2, a3, a4 ); +} + +// 4 + +template<class Rt2, class R, class T, + class B1, class B2, class B3, class B4, + class A1, class A2, class A3, class A4, class A5> + auto + BOOST_BIND(boost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4) BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) + -> decltype( boost::BOOST_BIND( boost::type<Rt2>(), boost::mem_fn( f ), a1, a2, a3, a4, a5 ) ) +{ + return boost::BOOST_BIND( boost::type<Rt2>(), boost::mem_fn( f ), a1, a2, a3, a4, a5 ); +} + +template<class Rt2, class R, class T, + class B1, class B2, class B3, class B4, + class A1, class A2, class A3, class A4, class A5> + auto + BOOST_BIND(boost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4) const BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) + -> decltype( boost::BOOST_BIND( boost::type<Rt2>(), boost::mem_fn( f ), a1, a2, a3, a4, a5 ) ) +{ + return boost::BOOST_BIND( boost::type<Rt2>(), boost::mem_fn( f ), a1, a2, a3, a4, a5 ); +} + +// 5 + +template<class Rt2, class R, class T, + class B1, class B2, class B3, class B4, class B5, + class A1, class A2, class A3, class A4, class A5, class A6> + auto + BOOST_BIND(boost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5) BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) + -> decltype( boost::BOOST_BIND( boost::type<Rt2>(), boost::mem_fn( f ), a1, a2, a3, a4, a5, a6 ) ) +{ + return boost::BOOST_BIND( boost::type<Rt2>(), boost::mem_fn( f ), a1, a2, a3, a4, a5, a6 ); +} + +template<class Rt2, class R, class T, + class B1, class B2, class B3, class B4, class B5, + class A1, class A2, class A3, class A4, class A5, class A6> + auto + BOOST_BIND(boost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5) const BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) + -> decltype( boost::BOOST_BIND( boost::type<Rt2>(), boost::mem_fn( f ), a1, a2, a3, a4, a5, a6 ) ) +{ + return boost::BOOST_BIND( boost::type<Rt2>(), boost::mem_fn( f ), a1, a2, a3, a4, a5, a6 ); +} + +// 6 + +template<class Rt2, class R, class T, + class B1, class B2, class B3, class B4, class B5, class B6, + class A1, class A2, class A3, class A4, class A5, class A6, class A7> + auto + BOOST_BIND(boost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6) BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) + -> decltype( boost::BOOST_BIND( boost::type<Rt2>(), boost::mem_fn( f ), a1, a2, a3, a4, a5, a6, a7 ) ) +{ + return boost::BOOST_BIND( boost::type<Rt2>(), boost::mem_fn( f ), a1, a2, a3, a4, a5, a6, a7 ); +} + +template<class Rt2, class R, class T, + class B1, class B2, class B3, class B4, class B5, class B6, + class A1, class A2, class A3, class A4, class A5, class A6, class A7> + auto + BOOST_BIND(boost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6) const BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) + -> decltype( boost::BOOST_BIND( boost::type<Rt2>(), boost::mem_fn( f ), a1, a2, a3, a4, a5, a6, a7 ) ) +{ + return boost::BOOST_BIND( boost::type<Rt2>(), boost::mem_fn( f ), a1, a2, a3, a4, a5, a6, a7 ); +} + +// 7 + +template<class Rt2, class R, class T, + class B1, class B2, class B3, class B4, class B5, class B6, class B7, + class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> + auto + BOOST_BIND(boost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6, B7) BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) + -> decltype( boost::BOOST_BIND( boost::type<Rt2>(), boost::mem_fn( f ), a1, a2, a3, a4, a5, a6, a7, a8 ) ) +{ + return boost::BOOST_BIND( boost::type<Rt2>(), boost::mem_fn( f ), a1, a2, a3, a4, a5, a6, a7, a8 ); +} + +template<class Rt2, class R, class T, + class B1, class B2, class B3, class B4, class B5, class B6, class B7, + class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> + auto + BOOST_BIND(boost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6, B7) const BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) + -> decltype( boost::BOOST_BIND( boost::type<Rt2>(), boost::mem_fn( f ), a1, a2, a3, a4, a5, a6, a7, a8 ) ) +{ + return boost::BOOST_BIND( boost::type<Rt2>(), boost::mem_fn( f ), a1, a2, a3, a4, a5, a6, a7, a8 ); +} + +// 8 + +template<class Rt2, class R, class T, + class B1, class B2, class B3, class B4, class B5, class B6, class B7, class B8, + class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> + auto + BOOST_BIND(boost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6, B7, B8) BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9) + -> decltype( boost::BOOST_BIND( boost::type<Rt2>(), boost::mem_fn( f ), a1, a2, a3, a4, a5, a6, a7, a8, a9 ) ) +{ + return boost::BOOST_BIND( boost::type<Rt2>(), boost::mem_fn( f ), a1, a2, a3, a4, a5, a6, a7, a8, a9 ); +} + +template<class Rt2, class R, class T, + class B1, class B2, class B3, class B4, class B5, class B6, class B7, class B8, + class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> + auto + BOOST_BIND(boost::type<Rt2>, R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6, B7, B8) const BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9) + -> decltype( boost::BOOST_BIND( boost::type<Rt2>(), boost::mem_fn( f ), a1, a2, a3, a4, a5, a6, a7, a8, a9 ) ) +{ + return boost::BOOST_BIND( boost::type<Rt2>(), boost::mem_fn( f ), a1, a2, a3, a4, a5, a6, a7, a8, a9 ); +} diff --git a/contrib/restricted/boost/bind/include/boost/bind/detail/bind_mf_cc.hpp b/contrib/restricted/boost/bind/include/boost/bind/detail/bind_mf_cc.hpp new file mode 100644 index 0000000000..2336ca204c --- /dev/null +++ b/contrib/restricted/boost/bind/include/boost/bind/detail/bind_mf_cc.hpp @@ -0,0 +1,405 @@ +// +// bind/bind_mf_cc.hpp - support for different calling conventions +// +// Do not include this header directly. +// +// Copyright (c) 2001 Peter Dimov and Multi Media Ltd. +// +// Distributed under the Boost Software License, Version 1.0. (See +// accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/bind/bind.html for documentation. +// + +// 0 + +template<class R, class T, + class A1> + auto + BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) () BOOST_BIND_MF_NOEXCEPT, A1 a1) + -> decltype( boost::BOOST_BIND( boost::mem_fn( f ), a1 ) ) +{ + return boost::BOOST_BIND( boost::mem_fn( f ), a1 ); +} + +template<class R, class T, + class A1> + auto + BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) () const BOOST_BIND_MF_NOEXCEPT, A1 a1) + -> decltype( boost::BOOST_BIND( boost::mem_fn( f ), a1 ) ) +{ + return boost::BOOST_BIND( boost::mem_fn( f ), a1 ); +} + +template<class Rt2, class R, class T, + class A1, + class En = typename std::enable_if< !std::is_same<Rt2, R>::value >::type> + auto + BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) () BOOST_BIND_MF_NOEXCEPT, A1 a1) + -> decltype( boost::BOOST_BIND<Rt2>( boost::mem_fn( f ), a1 ) ) +{ + return boost::BOOST_BIND<Rt2>( boost::mem_fn( f ), a1 ); +} + +template<class Rt2, class R, class T, + class A1, + class En = typename std::enable_if< !std::is_same<Rt2, R>::value >::type> + auto + BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) () const BOOST_BIND_MF_NOEXCEPT, A1 a1) + -> decltype( boost::BOOST_BIND<Rt2>( boost::mem_fn( f ), a1 ) ) +{ + return boost::BOOST_BIND<Rt2>( boost::mem_fn( f ), a1 ); +} + +// 1 + +template<class R, class T, + class B1, + class A1, class A2> + auto + BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1) BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2) + -> decltype( boost::BOOST_BIND( boost::mem_fn( f ), a1, a2 ) ) +{ + return boost::BOOST_BIND( boost::mem_fn( f ), a1, a2 ); +} + +template<class R, class T, + class B1, + class A1, class A2> + auto + BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1) const BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2) + -> decltype( boost::BOOST_BIND( boost::mem_fn( f ), a1, a2 ) ) +{ + return boost::BOOST_BIND( boost::mem_fn( f ), a1, a2 ); +} + +template<class Rt2, class R, class T, + class B1, + class A1, class A2, + class En = typename std::enable_if< !std::is_same<Rt2, R>::value >::type> + auto + BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1) BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2) + -> decltype( boost::BOOST_BIND<Rt2>( boost::mem_fn( f ), a1, a2 ) ) +{ + return boost::BOOST_BIND<Rt2>( boost::mem_fn( f ), a1, a2 ); +} + +template<class Rt2, class R, class T, + class B1, + class A1, class A2, + class En = typename std::enable_if< !std::is_same<Rt2, R>::value >::type> + auto + BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1) const BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2) + -> decltype( boost::BOOST_BIND<Rt2>( boost::mem_fn( f ), a1, a2 ) ) +{ + return boost::BOOST_BIND<Rt2>( boost::mem_fn( f ), a1, a2 ); +} + +// 2 + +template<class R, class T, + class B1, class B2, + class A1, class A2, class A3> + auto + BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2) BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3) + -> decltype( boost::BOOST_BIND( boost::mem_fn( f ), a1, a2, a3 ) ) +{ + return boost::BOOST_BIND( boost::mem_fn( f ), a1, a2, a3 ); +} + +template<class R, class T, + class B1, class B2, + class A1, class A2, class A3> + auto + BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2) const BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3) + -> decltype( boost::BOOST_BIND( boost::mem_fn( f ), a1, a2, a3 ) ) +{ + return boost::BOOST_BIND( boost::mem_fn( f ), a1, a2, a3 ); +} + +template<class Rt2, class R, class T, + class B1, class B2, + class A1, class A2, class A3, + class En = typename std::enable_if< !std::is_same<Rt2, R>::value >::type> + auto + BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2) BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3) + -> decltype( boost::BOOST_BIND<Rt2>( boost::mem_fn( f ), a1, a2, a3 ) ) +{ + return boost::BOOST_BIND<Rt2>( boost::mem_fn( f ), a1, a2, a3 ); +} + +template<class Rt2, class R, class T, + class B1, class B2, + class A1, class A2, class A3, + class En = typename std::enable_if< !std::is_same<Rt2, R>::value >::type> + auto + BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2) const BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3) + -> decltype( boost::BOOST_BIND<Rt2>( boost::mem_fn( f ), a1, a2, a3 ) ) +{ + return boost::BOOST_BIND<Rt2>( boost::mem_fn( f ), a1, a2, a3 ); +} + +// 3 + +template<class R, class T, + class B1, class B2, class B3, + class A1, class A2, class A3, class A4> + auto + BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3) BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4) + -> decltype( boost::BOOST_BIND( boost::mem_fn( f ), a1, a2, a3, a4 ) ) +{ + return boost::BOOST_BIND( boost::mem_fn( f ), a1, a2, a3, a4 ); +} + +template<class R, class T, + class B1, class B2, class B3, + class A1, class A2, class A3, class A4> + auto + BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3) const BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4) + -> decltype( boost::BOOST_BIND( boost::mem_fn( f ), a1, a2, a3, a4 ) ) +{ + return boost::BOOST_BIND( boost::mem_fn( f ), a1, a2, a3, a4 ); +} + +template<class Rt2, class R, class T, + class B1, class B2, class B3, + class A1, class A2, class A3, class A4, + class En = typename std::enable_if< !std::is_same<Rt2, R>::value >::type> + auto + BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3) BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4) + -> decltype( boost::BOOST_BIND<Rt2>( boost::mem_fn( f ), a1, a2, a3, a4 ) ) +{ + return boost::BOOST_BIND<Rt2>( boost::mem_fn( f ), a1, a2, a3, a4 ); +} + +template<class Rt2, class R, class T, + class B1, class B2, class B3, + class A1, class A2, class A3, class A4, + class En = typename std::enable_if< !std::is_same<Rt2, R>::value >::type> + auto + BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3) const BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4) + -> decltype( boost::BOOST_BIND<Rt2>( boost::mem_fn( f ), a1, a2, a3, a4 ) ) +{ + return boost::BOOST_BIND<Rt2>( boost::mem_fn( f ), a1, a2, a3, a4 ); +} + +// 4 + +template<class R, class T, + class B1, class B2, class B3, class B4, + class A1, class A2, class A3, class A4, class A5> + auto + BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4) BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) + -> decltype( boost::BOOST_BIND( boost::mem_fn( f ), a1, a2, a3, a4, a5 ) ) +{ + return boost::BOOST_BIND( boost::mem_fn( f ), a1, a2, a3, a4, a5 ); +} + +template<class R, class T, + class B1, class B2, class B3, class B4, + class A1, class A2, class A3, class A4, class A5> + auto + BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4) const BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) + -> decltype( boost::BOOST_BIND( boost::mem_fn( f ), a1, a2, a3, a4, a5 ) ) +{ + return boost::BOOST_BIND( boost::mem_fn( f ), a1, a2, a3, a4, a5 ); +} + +template<class Rt2, class R, class T, + class B1, class B2, class B3, class B4, + class A1, class A2, class A3, class A4, class A5, + class En = typename std::enable_if< !std::is_same<Rt2, R>::value >::type> + auto + BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4) BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) + -> decltype( boost::BOOST_BIND<Rt2>( boost::mem_fn( f ), a1, a2, a3, a4, a5 ) ) +{ + return boost::BOOST_BIND<Rt2>( boost::mem_fn( f ), a1, a2, a3, a4, a5 ); +} + +template<class Rt2, class R, class T, + class B1, class B2, class B3, class B4, + class A1, class A2, class A3, class A4, class A5, + class En = typename std::enable_if< !std::is_same<Rt2, R>::value >::type> + auto + BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4) const BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) + -> decltype( boost::BOOST_BIND<Rt2>( boost::mem_fn( f ), a1, a2, a3, a4, a5 ) ) +{ + return boost::BOOST_BIND<Rt2>( boost::mem_fn( f ), a1, a2, a3, a4, a5 ); +} + +// 5 + +template<class R, class T, + class B1, class B2, class B3, class B4, class B5, + class A1, class A2, class A3, class A4, class A5, class A6> + auto + BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5) BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) + -> decltype( boost::BOOST_BIND( boost::mem_fn( f ), a1, a2, a3, a4, a5, a6 ) ) +{ + return boost::BOOST_BIND( boost::mem_fn( f ), a1, a2, a3, a4, a5, a6 ); +} + +template<class R, class T, + class B1, class B2, class B3, class B4, class B5, + class A1, class A2, class A3, class A4, class A5, class A6> + auto + BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5) const BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) + -> decltype( boost::BOOST_BIND( boost::mem_fn( f ), a1, a2, a3, a4, a5, a6 ) ) +{ + return boost::BOOST_BIND( boost::mem_fn( f ), a1, a2, a3, a4, a5, a6 ); +} + +template<class Rt2, class R, class T, + class B1, class B2, class B3, class B4, class B5, + class A1, class A2, class A3, class A4, class A5, class A6, + class En = typename std::enable_if< !std::is_same<Rt2, R>::value >::type> + auto + BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5) BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) + -> decltype( boost::BOOST_BIND<Rt2>( boost::mem_fn( f ), a1, a2, a3, a4, a5, a6 ) ) +{ + return boost::BOOST_BIND<Rt2>( boost::mem_fn( f ), a1, a2, a3, a4, a5, a6 ); +} + +template<class Rt2, class R, class T, + class B1, class B2, class B3, class B4, class B5, + class A1, class A2, class A3, class A4, class A5, class A6, + class En = typename std::enable_if< !std::is_same<Rt2, R>::value >::type> + auto + BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5) const BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) + -> decltype( boost::BOOST_BIND<Rt2>( boost::mem_fn( f ), a1, a2, a3, a4, a5, a6 ) ) +{ + return boost::BOOST_BIND<Rt2>( boost::mem_fn( f ), a1, a2, a3, a4, a5, a6 ); +} + +// 6 + +template<class R, class T, + class B1, class B2, class B3, class B4, class B5, class B6, + class A1, class A2, class A3, class A4, class A5, class A6, class A7> + auto + BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6) BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) + -> decltype( boost::BOOST_BIND( boost::mem_fn( f ), a1, a2, a3, a4, a5, a6, a7 ) ) +{ + return boost::BOOST_BIND( boost::mem_fn( f ), a1, a2, a3, a4, a5, a6, a7 ); +} + +template<class R, class T, + class B1, class B2, class B3, class B4, class B5, class B6, + class A1, class A2, class A3, class A4, class A5, class A6, class A7> + auto + BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6) const BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) + -> decltype( boost::BOOST_BIND( boost::mem_fn( f ), a1, a2, a3, a4, a5, a6, a7 ) ) +{ + return boost::BOOST_BIND( boost::mem_fn( f ), a1, a2, a3, a4, a5, a6, a7 ); +} + +template<class Rt2, class R, class T, + class B1, class B2, class B3, class B4, class B5, class B6, + class A1, class A2, class A3, class A4, class A5, class A6, class A7, + class En = typename std::enable_if< !std::is_same<Rt2, R>::value >::type> + auto + BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6) BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) + -> decltype( boost::BOOST_BIND<Rt2>( boost::mem_fn( f ), a1, a2, a3, a4, a5, a6, a7 ) ) +{ + return boost::BOOST_BIND<Rt2>( boost::mem_fn( f ), a1, a2, a3, a4, a5, a6, a7 ); +} + +template<class Rt2, class R, class T, + class B1, class B2, class B3, class B4, class B5, class B6, + class A1, class A2, class A3, class A4, class A5, class A6, class A7, + class En = typename std::enable_if< !std::is_same<Rt2, R>::value >::type> + auto + BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6) const BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) + -> decltype( boost::BOOST_BIND<Rt2>( boost::mem_fn( f ), a1, a2, a3, a4, a5, a6, a7 ) ) +{ + return boost::BOOST_BIND<Rt2>( boost::mem_fn( f ), a1, a2, a3, a4, a5, a6, a7 ); +} + +// 7 + +template<class R, class T, + class B1, class B2, class B3, class B4, class B5, class B6, class B7, + class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> + auto + BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6, B7) BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) + -> decltype( boost::BOOST_BIND( boost::mem_fn( f ), a1, a2, a3, a4, a5, a6, a7, a8 ) ) +{ + return boost::BOOST_BIND( boost::mem_fn( f ), a1, a2, a3, a4, a5, a6, a7, a8 ); +} + +template<class R, class T, + class B1, class B2, class B3, class B4, class B5, class B6, class B7, + class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> + auto + BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6, B7) const BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) + -> decltype( boost::BOOST_BIND( boost::mem_fn( f ), a1, a2, a3, a4, a5, a6, a7, a8 ) ) +{ + return boost::BOOST_BIND( boost::mem_fn( f ), a1, a2, a3, a4, a5, a6, a7, a8 ); +} + +template<class Rt2, class R, class T, + class B1, class B2, class B3, class B4, class B5, class B6, class B7, + class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, + class En = typename std::enable_if< !std::is_same<Rt2, R>::value >::type> + auto + BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6, B7) BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) + -> decltype( boost::BOOST_BIND<Rt2>( boost::mem_fn( f ), a1, a2, a3, a4, a5, a6, a7, a8 ) ) +{ + return boost::BOOST_BIND<Rt2>( boost::mem_fn( f ), a1, a2, a3, a4, a5, a6, a7, a8 ); +} + +template<class Rt2, class R, class T, + class B1, class B2, class B3, class B4, class B5, class B6, class B7, + class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, + class En = typename std::enable_if< !std::is_same<Rt2, R>::value >::type> + auto + BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6, B7) const BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) + -> decltype( boost::BOOST_BIND<Rt2>( boost::mem_fn( f ), a1, a2, a3, a4, a5, a6, a7, a8 ) ) +{ + return boost::BOOST_BIND<Rt2>( boost::mem_fn( f ), a1, a2, a3, a4, a5, a6, a7, a8 ); +} + +// 8 + +template<class R, class T, + class B1, class B2, class B3, class B4, class B5, class B6, class B7, class B8, + class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> + auto + BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6, B7, B8) BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9) + -> decltype( boost::BOOST_BIND( boost::mem_fn( f ), a1, a2, a3, a4, a5, a6, a7, a8, a9 ) ) +{ + return boost::BOOST_BIND( boost::mem_fn( f ), a1, a2, a3, a4, a5, a6, a7, a8, a9 ); +} + +template<class R, class T, + class B1, class B2, class B3, class B4, class B5, class B6, class B7, class B8, + class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> + auto + BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6, B7, B8) const BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9) + -> decltype( boost::BOOST_BIND( boost::mem_fn( f ), a1, a2, a3, a4, a5, a6, a7, a8, a9 ) ) +{ + return boost::BOOST_BIND( boost::mem_fn( f ), a1, a2, a3, a4, a5, a6, a7, a8, a9 ); +} + +template<class Rt2, class R, class T, + class B1, class B2, class B3, class B4, class B5, class B6, class B7, class B8, + class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, + class En = typename std::enable_if< !std::is_same<Rt2, R>::value >::type> + auto + BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6, B7, B8) BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9) + -> decltype( boost::BOOST_BIND<Rt2>( boost::mem_fn( f ), a1, a2, a3, a4, a5, a6, a7, a8, a9 ) ) +{ + return boost::BOOST_BIND<Rt2>( boost::mem_fn( f ), a1, a2, a3, a4, a5, a6, a7, a8, a9 ); +} + +template<class Rt2, class R, class T, + class B1, class B2, class B3, class B4, class B5, class B6, class B7, class B8, + class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9, + class En = typename std::enable_if< !std::is_same<Rt2, R>::value >::type> + auto + BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6, B7, B8) const BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9) + -> decltype( boost::BOOST_BIND<Rt2>( boost::mem_fn( f ), a1, a2, a3, a4, a5, a6, a7, a8, a9 ) ) +{ + return boost::BOOST_BIND<Rt2>( boost::mem_fn( f ), a1, a2, a3, a4, a5, a6, a7, a8, a9 ); +} diff --git a/contrib/restricted/boost/bind/include/boost/bind/detail/integer_sequence.hpp b/contrib/restricted/boost/bind/include/boost/bind/detail/integer_sequence.hpp new file mode 100644 index 0000000000..ce2c2b0168 --- /dev/null +++ b/contrib/restricted/boost/bind/include/boost/bind/detail/integer_sequence.hpp @@ -0,0 +1,111 @@ +#ifndef BOOST_BIND_DETAIL_INTEGER_SEQUENCE_HPP_INCLUDED +#define BOOST_BIND_DETAIL_INTEGER_SEQUENCE_HPP_INCLUDED + +// Copyright 2015, 2017, 2019 Peter Dimov. +// +// Distributed under the Boost Software License, Version 1.0. +// +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt + +#include <cstddef> + +#if defined(__has_builtin) +# if __has_builtin(__make_integer_seq) +# define BOOST_BIND_DETAIL_HAS_MAKE_INTEGER_SEQ +# endif +#endif + +namespace boost +{ +namespace _bi +{ + +// integer_sequence +template<class T, T... I> struct integer_sequence +{ +}; + +#if defined(BOOST_BIND_DETAIL_HAS_MAKE_INTEGER_SEQ) + +template<class T, T N> using make_integer_sequence = __make_integer_seq<integer_sequence, T, N>; + +#else + +// detail::make_integer_sequence_impl +namespace detail +{ + +// iseq_if_c +template<bool C, class T, class E> struct iseq_if_c_impl; + +template<class T, class E> struct iseq_if_c_impl<true, T, E> +{ + using type = T; +}; + +template<class T, class E> struct iseq_if_c_impl<false, T, E> +{ + using type = E; +}; + +template<bool C, class T, class E> using iseq_if_c = typename iseq_if_c_impl<C, T, E>::type; + +// iseq_identity +template<class T> struct iseq_identity +{ + using type = T; +}; + +template<class S1, class S2> struct append_integer_sequence; + +template<class T, T... I, T... J> struct append_integer_sequence<integer_sequence<T, I...>, integer_sequence<T, J...>> +{ + using type = integer_sequence< T, I..., ( J + sizeof...(I) )... >; +}; + +template<class T, T N> struct make_integer_sequence_impl; + +template<class T, T N> struct make_integer_sequence_impl_ +{ +private: + + static_assert( N >= 0, "make_integer_sequence<T, N>: N must not be negative" ); + + static T const M = N / 2; + static T const R = N % 2; + + using S1 = typename make_integer_sequence_impl<T, M>::type; + using S2 = typename append_integer_sequence<S1, S1>::type; + using S3 = typename make_integer_sequence_impl<T, R>::type; + using S4 = typename append_integer_sequence<S2, S3>::type; + +public: + + using type = S4; +}; + +template<class T, T N> struct make_integer_sequence_impl: iseq_if_c<N == 0, iseq_identity<integer_sequence<T>>, iseq_if_c<N == 1, iseq_identity<integer_sequence<T, 0>>, make_integer_sequence_impl_<T, N> > > +{ +}; + +} // namespace detail + +// make_integer_sequence +template<class T, T N> using make_integer_sequence = typename detail::make_integer_sequence_impl<T, N>::type; + +#endif // defined(BOOST_BIND_DETAIL_HAS_MAKE_INTEGER_SEQ) + +// index_sequence +template<std::size_t... I> using index_sequence = integer_sequence<std::size_t, I...>; + +// make_index_sequence +template<std::size_t N> using make_index_sequence = make_integer_sequence<std::size_t, N>; + +// index_sequence_for +template<class... T> using index_sequence_for = make_integer_sequence<std::size_t, sizeof...(T)>; + +} // namespace _bi +} // namespace boost + +#endif // #ifndef BOOST_BIND_DETAIL_INTEGER_SEQUENCE_HPP_INCLUDED diff --git a/contrib/restricted/boost/bind/include/boost/bind/detail/is_same.hpp b/contrib/restricted/boost/bind/include/boost/bind/detail/is_same.hpp deleted file mode 100644 index 995b39f4e6..0000000000 --- a/contrib/restricted/boost/bind/include/boost/bind/detail/is_same.hpp +++ /dev/null @@ -1,36 +0,0 @@ -#ifndef BOOST_BIND_DETAIL_IS_SAME_HPP_INCLUDED -#define BOOST_BIND_DETAIL_IS_SAME_HPP_INCLUDED - -// is_same<T1,T2>::value is true when T1 == T2 -// -// Copyright 2014 Peter Dimov -// -// Distributed under the Boost Software License, Version 1.0. -// See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt - -#include <boost/config.hpp> - -#if defined(BOOST_HAS_PRAGMA_ONCE) -# pragma once -#endif - -namespace boost -{ -namespace _bi -{ - -template< class T1, class T2 > struct is_same -{ - BOOST_STATIC_CONSTANT( bool, value = false ); -}; - -template< class T > struct is_same< T, T > -{ - BOOST_STATIC_CONSTANT( bool, value = true ); -}; - -} // namespace _bi -} // namespace boost - -#endif // #ifndef BOOST_BIND_DETAIL_IS_SAME_HPP_INCLUDED diff --git a/contrib/restricted/boost/bind/include/boost/bind/detail/tuple_for_each.hpp b/contrib/restricted/boost/bind/include/boost/bind/detail/tuple_for_each.hpp new file mode 100644 index 0000000000..d1eabff87a --- /dev/null +++ b/contrib/restricted/boost/bind/include/boost/bind/detail/tuple_for_each.hpp @@ -0,0 +1,64 @@ +#ifndef BOOST_BIND_DETAIL_TUPLE_FOR_EACH_HPP_INCLUDED +#define BOOST_BIND_DETAIL_TUPLE_FOR_EACH_HPP_INCLUDED + +// Copyright 2015-2020, 2024 Peter Dimov. +// +// Distributed under the Boost Software License, Version 1.0. +// +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt + +#include <boost/bind/detail/integer_sequence.hpp> +#include <boost/config.hpp> +#include <utility> +#include <type_traits> +#include <cstddef> + +#if defined(BOOST_MSVC) +# pragma warning( push ) +# pragma warning( disable: 4100 ) // unreferenced formal parameter 'tp' +#endif + +namespace boost +{ +namespace _bi +{ + +// tuple_for_each( f, tp ) + +template<class F, class Tp, std::size_t... J> F tuple_for_each_impl( F&& f, Tp&& tp, integer_sequence<std::size_t, J...> ) +{ + using A = int[ 1 + sizeof...(J) ]; + using std::get; + return (void)A{ 0, ((void)f(get<J>(std::forward<Tp>(tp))), 0)... }, std::forward<F>(f); +} + +template<class F, class Tp> F tuple_for_each( F&& f, Tp&& tp ) +{ + using seq = make_index_sequence<std::tuple_size<typename std::remove_reference<Tp>::type>::value>; + return _bi::tuple_for_each_impl( std::forward<F>(f), std::forward<Tp>(tp), seq() ); +} + +// tuple_for_each( f, tp1, tp2 ) + +template<class F, class Tp1, class Tp2, std::size_t... J> F tuple_for_each_impl( F&& f, Tp1&& tp1, Tp2&& tp2, integer_sequence<std::size_t, J...> ) +{ + using A = int[ 1 + sizeof...(J) ]; + using std::get; + return (void)A{ 0, ((void)f( get<J>(std::forward<Tp1>(tp1)), get<J>(std::forward<Tp2>(tp2)) ), 0)... }, std::forward<F>(f); +} + +template<class F, class Tp1, class Tp2> F tuple_for_each( F&& f, Tp1&& tp1, Tp2&& tp2 ) +{ + using seq = make_index_sequence<std::tuple_size<typename std::remove_reference<Tp1>::type>::value>; + return _bi::tuple_for_each_impl( std::forward<F>(f), std::forward<Tp1>(tp1), std::forward<Tp2>(tp2), seq() ); +} + +} // namespace _bi +} // namespace boost + +#if defined(BOOST_MSVC) +# pragma warning( pop ) +#endif + +#endif // #ifndef BOOST_BIND_DETAIL_TUPLE_FOR_EACH_HPP_INCLUDED diff --git a/contrib/restricted/boost/bind/include/boost/bind/mem_fn.hpp b/contrib/restricted/boost/bind/include/boost/bind/mem_fn.hpp index 1078e7c5a9..5cfbb99e69 100644 --- a/contrib/restricted/boost/bind/include/boost/bind/mem_fn.hpp +++ b/contrib/restricted/boost/bind/include/boost/bind/mem_fn.hpp @@ -8,318 +8,162 @@ #endif // -// mem_fn.hpp - a generalization of std::mem_fun[_ref] +// mem_fn.hpp - a generalization of std::mem_fun[_ref] // -// Copyright (c) 2001, 2002 Peter Dimov and Multi Media Ltd. -// Copyright (c) 2001 David Abrahams -// Copyright (c) 2003-2005 Peter Dimov +// Copyright 2001-2005, 2024 Peter Dimov +// Copyright 2001 David Abrahams // // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // -// See http://www.boost.org/libs/bind/mem_fn.html for documentation. +// See http://www.boost.org/libs/bind/mem_fn.html for documentation. // -#include <boost/bind/detail/requires_cxx11.hpp> #include <boost/get_pointer.hpp> #include <boost/config.hpp> #include <boost/config/workaround.hpp> +#include <type_traits> namespace boost { -#if defined(BOOST_NO_VOID_RETURNS) - -#define BOOST_MEM_FN_CLASS_F , class F -#define BOOST_MEM_FN_TYPEDEF(X) - -namespace _mfi // mem_fun_impl +namespace _mfi { -template<class V> struct mf +template<class T> struct remove_cvref: std::remove_cv< typename std::remove_reference<T>::type > { +}; -#define BOOST_MEM_FN_RETURN return - -#define BOOST_MEM_FN_NAME(X) inner_##X -#define BOOST_MEM_FN_CC - -#include <boost/bind/mem_fn_template.hpp> - -#undef BOOST_MEM_FN_CC -#undef BOOST_MEM_FN_NAME - -#if defined(BOOST_MEM_FN_ENABLE_CDECL) && !defined(_M_X64) - -#define BOOST_MEM_FN_NAME(X) inner_##X##_cdecl -#define BOOST_MEM_FN_CC __cdecl - -#include <boost/bind/mem_fn_template.hpp> - -#undef BOOST_MEM_FN_CC -#undef BOOST_MEM_FN_NAME - -#endif - -#if defined(BOOST_MEM_FN_ENABLE_STDCALL) && !defined(_M_X64) - -#define BOOST_MEM_FN_NAME(X) inner_##X##_stdcall -#define BOOST_MEM_FN_CC __stdcall - -#include <boost/bind/mem_fn_template.hpp> - -#undef BOOST_MEM_FN_CC -#undef BOOST_MEM_FN_NAME - -#endif - -#if defined(BOOST_MEM_FN_ENABLE_FASTCALL) && !defined(_M_X64) - -#define BOOST_MEM_FN_NAME(X) inner_##X##_fastcall -#define BOOST_MEM_FN_CC __fastcall - -#include <boost/bind/mem_fn_template.hpp> - -#undef BOOST_MEM_FN_CC -#undef BOOST_MEM_FN_NAME - -#endif - -#undef BOOST_MEM_FN_RETURN - -}; // struct mf<V> - -template<> struct mf<void> +template<class Pm, class R, class T, class... A> class mf { +public: -#define BOOST_MEM_FN_RETURN - -#define BOOST_MEM_FN_NAME(X) inner_##X -#define BOOST_MEM_FN_CC - -#include <boost/bind/mem_fn_template.hpp> - -#undef BOOST_MEM_FN_CC -#undef BOOST_MEM_FN_NAME - -#if defined(BOOST_MEM_FN_ENABLE_CDECL) && !defined(_M_X64) - -#define BOOST_MEM_FN_NAME(X) inner_##X##_cdecl -#define BOOST_MEM_FN_CC __cdecl - -#include <boost/bind/mem_fn_template.hpp> - -#undef BOOST_MEM_FN_CC -#undef BOOST_MEM_FN_NAME - -#endif - -#ifdef BOOST_MEM_FN_ENABLE_STDCALL - -#define BOOST_MEM_FN_NAME(X) inner_##X##_stdcall -#define BOOST_MEM_FN_CC __stdcall - -#include <boost/bind/mem_fn_template.hpp> - -#undef BOOST_MEM_FN_CC -#undef BOOST_MEM_FN_NAME - -#endif - -#ifdef BOOST_MEM_FN_ENABLE_FASTCALL - -#define BOOST_MEM_FN_NAME(X) inner_##X##_fastcall -#define BOOST_MEM_FN_CC __fastcall - -#include <boost/bind/mem_fn_template.hpp> - -#undef BOOST_MEM_FN_CC -#undef BOOST_MEM_FN_NAME - -#endif - -#undef BOOST_MEM_FN_RETURN - -}; // struct mf<void> - -#undef BOOST_MEM_FN_CLASS_F -#undef BOOST_MEM_FN_TYPEDEF_F - -#define BOOST_MEM_FN_NAME(X) X -#define BOOST_MEM_FN_NAME2(X) inner_##X -#define BOOST_MEM_FN_CC - -#include <boost/bind/mem_fn_vw.hpp> - -#undef BOOST_MEM_FN_NAME -#undef BOOST_MEM_FN_NAME2 -#undef BOOST_MEM_FN_CC - -#if defined(BOOST_MEM_FN_ENABLE_CDECL) && !defined(_M_X64) - -#define BOOST_MEM_FN_NAME(X) X##_cdecl -#define BOOST_MEM_FN_NAME2(X) inner_##X##_cdecl -#define BOOST_MEM_FN_CC __cdecl - -#include <boost/bind/mem_fn_vw.hpp> - -#undef BOOST_MEM_FN_NAME -#undef BOOST_MEM_FN_NAME2 -#undef BOOST_MEM_FN_CC - -#endif + typedef R result_type; -#ifdef BOOST_MEM_FN_ENABLE_STDCALL +private: -#define BOOST_MEM_FN_NAME(X) X##_stdcall -#define BOOST_MEM_FN_NAME2(X) inner_##X##_stdcall -#define BOOST_MEM_FN_CC __stdcall + Pm pm_; -#include <boost/bind/mem_fn_vw.hpp> +public: -#undef BOOST_MEM_FN_NAME -#undef BOOST_MEM_FN_NAME2 -#undef BOOST_MEM_FN_CC + mf( Pm pm ): pm_( pm ) {} -#endif + template<class U, + class Ud = typename _mfi::remove_cvref<U>::type, + class En = typename std::enable_if< + std::is_same<T, Ud>::value || std::is_base_of<T, Ud>::value + >::type + > -#ifdef BOOST_MEM_FN_ENABLE_FASTCALL + R operator()( U&& u, A... a ) const + { + return (std::forward<U>( u ).*pm_)( std::forward<A>( a )... ); + } -#define BOOST_MEM_FN_NAME(X) X##_fastcall -#define BOOST_MEM_FN_NAME2(X) inner_##X##_fastcall -#define BOOST_MEM_FN_CC __fastcall + template<class U, + class Ud = typename _mfi::remove_cvref<U>::type, + class E1 = void, + class En = typename std::enable_if< + !(std::is_same<T, Ud>::value || std::is_base_of<T, Ud>::value) + >::type + > -#include <boost/bind/mem_fn_vw.hpp> + R operator()( U&& u, A... a ) const + { + return (get_pointer( std::forward<U>( u ) )->*pm_)( std::forward<A>( a )... ); + } -#undef BOOST_MEM_FN_NAME -#undef BOOST_MEM_FN_NAME2 -#undef BOOST_MEM_FN_CC + bool operator==( mf const & rhs ) const + { + return pm_ == rhs.pm_; + } -#endif + bool operator!=( mf const & rhs ) const + { + return pm_ != rhs.pm_; + } +}; } // namespace _mfi -#else // #ifdef BOOST_NO_VOID_RETURNS - -#define BOOST_MEM_FN_CLASS_F -#define BOOST_MEM_FN_TYPEDEF(X) typedef X; +// -namespace _mfi +template<class R, class T, class... A> +auto mem_fn( R (T::*pmf) (A...) ) -> _mfi::mf<decltype(pmf), R, T, A...> { + return pmf; +} -#define BOOST_MEM_FN_RETURN return - -#define BOOST_MEM_FN_NAME(X) X -#define BOOST_MEM_FN_CC - -#include <boost/bind/mem_fn_template.hpp> - -#undef BOOST_MEM_FN_CC -#undef BOOST_MEM_FN_NAME - -#if defined(BOOST_MEM_FN_ENABLE_CDECL) && !defined(_M_X64) - -#define BOOST_MEM_FN_NAME(X) X##_cdecl -#define BOOST_MEM_FN_CC __cdecl - -#include <boost/bind/mem_fn_template.hpp> - -#undef BOOST_MEM_FN_CC -#undef BOOST_MEM_FN_NAME - -#endif - -#if defined(BOOST_MEM_FN_ENABLE_STDCALL) && !defined(_M_X64) - -#define BOOST_MEM_FN_NAME(X) X##_stdcall -#define BOOST_MEM_FN_CC __stdcall - -#include <boost/bind/mem_fn_template.hpp> - -#undef BOOST_MEM_FN_CC -#undef BOOST_MEM_FN_NAME - -#endif - -#if defined(BOOST_MEM_FN_ENABLE_FASTCALL) && !defined(_M_X64) - -#define BOOST_MEM_FN_NAME(X) X##_fastcall -#define BOOST_MEM_FN_CC __fastcall - -#include <boost/bind/mem_fn_template.hpp> - -#undef BOOST_MEM_FN_CC -#undef BOOST_MEM_FN_NAME - -#endif - -#undef BOOST_MEM_FN_RETURN - -} // namespace _mfi - -#undef BOOST_MEM_FN_CLASS_F -#undef BOOST_MEM_FN_TYPEDEF - -#endif // #ifdef BOOST_NO_VOID_RETURNS +template<class R, class T, class... A> +auto mem_fn( R (T::*pmf) (A...) const ) -> _mfi::mf<decltype(pmf), R, T, A...> +{ + return pmf; +} -#define BOOST_MEM_FN_NAME(X) X -#define BOOST_MEM_FN_CC -#define BOOST_MEM_FN_NOEXCEPT +#if defined( __cpp_noexcept_function_type ) || defined( _NOEXCEPT_TYPES_SUPPORTED ) -#include <boost/bind/mem_fn_cc.hpp> +template<class R, class T, class... A> +auto mem_fn( R (T::*pmf) (A...) noexcept ) -> _mfi::mf<decltype(pmf), R, T, A...> +{ + return pmf; +} -#if defined( __cpp_noexcept_function_type ) || defined( _NOEXCEPT_TYPES_SUPPORTED ) -# undef BOOST_MEM_FN_NOEXCEPT -# define BOOST_MEM_FN_NOEXCEPT noexcept -# include <boost/bind/mem_fn_cc.hpp> -#endif +template<class R, class T, class... A> +auto mem_fn( R (T::*pmf) (A...) const noexcept ) -> _mfi::mf<decltype(pmf), R, T, A...> +{ + return pmf; +} -#undef BOOST_MEM_FN_NAME -#undef BOOST_MEM_FN_CC -#undef BOOST_MEM_FN_NOEXCEPT +#endif // #if defined( __cpp_noexcept_function_type ) || defined( _NOEXCEPT_TYPES_SUPPORTED ) #if defined(BOOST_MEM_FN_ENABLE_CDECL) && !defined(_M_X64) -#define BOOST_MEM_FN_NAME(X) X##_cdecl -#define BOOST_MEM_FN_CC __cdecl -#define BOOST_MEM_FN_NOEXCEPT +template<class R, class T, class... A> +auto mem_fn( R (__cdecl T::*pmf) (A...) ) -> _mfi::mf<decltype(pmf), R, T, A...> +{ + return pmf; +} -#include <boost/bind/mem_fn_cc.hpp> +template<class R, class T, class... A> +auto mem_fn( R (__cdecl T::*pmf) (A...) const ) -> _mfi::mf<decltype(pmf), R, T, A...> +{ + return pmf; +} -#undef BOOST_MEM_FN_NAME -#undef BOOST_MEM_FN_CC -#undef BOOST_MEM_FN_NOEXCEPT - -#endif +#endif // #if defined(BOOST_MEM_FN_ENABLE_CDECL) && !defined(_M_X64) #if defined(BOOST_MEM_FN_ENABLE_STDCALL) && !defined(_M_X64) -#define BOOST_MEM_FN_NAME(X) X##_stdcall -#define BOOST_MEM_FN_CC __stdcall -#define BOOST_MEM_FN_NOEXCEPT - -#include <boost/bind/mem_fn_cc.hpp> +template<class R, class T, class... A> +auto mem_fn( R (__stdcall T::*pmf) (A...) ) -> _mfi::mf<decltype(pmf), R, T, A...> +{ + return pmf; +} -#undef BOOST_MEM_FN_NAME -#undef BOOST_MEM_FN_CC -#undef BOOST_MEM_FN_NOEXCEPT +template<class R, class T, class... A> +auto mem_fn( R (__stdcall T::*pmf) (A...) const ) -> _mfi::mf<decltype(pmf), R, T, A...> +{ + return pmf; +} -#endif +#endif // #if defined(BOOST_MEM_FN_ENABLE_STDCALL) && !defined(_M_X64) #if defined(BOOST_MEM_FN_ENABLE_FASTCALL) && !defined(_M_X64) -#define BOOST_MEM_FN_NAME(X) X##_fastcall -#define BOOST_MEM_FN_CC __fastcall -#define BOOST_MEM_FN_NOEXCEPT - -#include <boost/bind/mem_fn_cc.hpp> +template<class R, class T, class... A> +auto mem_fn( R (__fastcall T::*pmf) (A...) ) -> _mfi::mf<decltype(pmf), R, T, A...> +{ + return pmf; +} -#undef BOOST_MEM_FN_NAME -#undef BOOST_MEM_FN_CC -#undef BOOST_MEM_FN_NOEXCEPT +template<class R, class T, class... A> +auto mem_fn( R (__fastcall T::*pmf) (A...) const ) -> _mfi::mf<decltype(pmf), R, T, A...> +{ + return pmf; +} -#endif +#endif // #if defined(BOOST_MEM_FN_ENABLE_FASTCALL) && !defined(_M_X64) // data member support @@ -334,69 +178,74 @@ public: typedef T const * argument_type; private: - - typedef R (T::*F); - F f_; - template<class U> R const & call(U & u, T const *) const - { - return (u.*f_); - } - - template<class U> R const & call(U & u, void const *) const - { - return (get_pointer(u)->*f_); - } + typedef R (T::*Pm); + Pm pm_; public: - - explicit dm(F f): f_(f) {} - R & operator()(T * p) const - { - return (p->*f_); - } + dm( Pm pm ): pm_( pm ) {} - R const & operator()(T const * p) const + template<class U, + class Ud = typename _mfi::remove_cvref<U>::type, + class En = typename std::enable_if< + std::is_same<T, Ud>::value || std::is_base_of<T, Ud>::value + >::type + > + + auto operator()( U&& u ) const -> decltype( std::forward<U>( u ).*pm_ ) { - return (p->*f_); + return std::forward<U>( u ).*pm_; } - template<class U> R const & operator()(U const & u) const + template<class U, + class Ud = typename _mfi::remove_cvref<U>::type, + class E1 = void, + class En = typename std::enable_if< + !(std::is_same<T, Ud>::value || std::is_base_of<T, Ud>::value) + >::type + > + + auto operator()( U&& u ) const -> decltype( get_pointer( std::forward<U>( u ) )->*pm_ ) { - return call(u, &u); + return get_pointer( std::forward<U>( u ) )->*pm_; } -#if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) && !BOOST_WORKAROUND(__MWERKS__, < 0x3200) +#if BOOST_WORKAROUND(BOOST_MSVC, < 1910) - R & operator()(T & t) const + template<class U> + R& operator()( U* u ) const { - return (t.*f_); + return u->*pm_; } - R const & operator()(T const & t) const + template<class U> + R const& operator()( U const* u ) const { - return (t.*f_); + return u->*pm_; } #endif - bool operator==(dm const & rhs) const + bool operator==( dm const & rhs ) const { - return f_ == rhs.f_; + return pm_ == rhs.pm_; } - bool operator!=(dm const & rhs) const + bool operator!=( dm const & rhs ) const { - return f_ != rhs.f_; + return pm_ != rhs.pm_; } }; } // namespace _mfi -template<class R, class T> _mfi::dm<R, T> mem_fn(R T::*f) +template<class R, class T, + class E = typename std::enable_if< !std::is_function<R>::value >::type +> +_mfi::dm<R, T> mem_fn( R T::*pm ) { - return _mfi::dm<R, T>(f); + return pm; } } // namespace boost diff --git a/contrib/restricted/boost/bind/include/boost/bind/mem_fn_cc.hpp b/contrib/restricted/boost/bind/include/boost/bind/mem_fn_cc.hpp deleted file mode 100644 index 03e38300a5..0000000000 --- a/contrib/restricted/boost/bind/include/boost/bind/mem_fn_cc.hpp +++ /dev/null @@ -1,103 +0,0 @@ -// -// bind/mem_fn_cc.hpp - support for different calling conventions -// -// Do not include this header directly. -// -// Copyright (c) 2001 Peter Dimov and Multi Media Ltd. -// -// Distributed under the Boost Software License, Version 1.0. (See -// accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) -// -// See http://www.boost.org/libs/bind/mem_fn.html for documentation. -// - -template<class R, class T> _mfi::BOOST_MEM_FN_NAME(mf0)<R, T> mem_fn(R (BOOST_MEM_FN_CC T::*f) () BOOST_MEM_FN_NOEXCEPT) -{ - return _mfi::BOOST_MEM_FN_NAME(mf0)<R, T>(f); -} - -template<class R, class T> _mfi::BOOST_MEM_FN_NAME(cmf0)<R, T> mem_fn(R (BOOST_MEM_FN_CC T::*f) () const BOOST_MEM_FN_NOEXCEPT) -{ - return _mfi::BOOST_MEM_FN_NAME(cmf0)<R, T>(f); -} - -template<class R, class T, class A1> _mfi::BOOST_MEM_FN_NAME(mf1)<R, T, A1> mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1) BOOST_MEM_FN_NOEXCEPT) -{ - return _mfi::BOOST_MEM_FN_NAME(mf1)<R, T, A1>(f); -} - -template<class R, class T, class A1> _mfi::BOOST_MEM_FN_NAME(cmf1)<R, T, A1> mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1) const BOOST_MEM_FN_NOEXCEPT) -{ - return _mfi::BOOST_MEM_FN_NAME(cmf1)<R, T, A1>(f); -} - -template<class R, class T, class A1, class A2> _mfi::BOOST_MEM_FN_NAME(mf2)<R, T, A1, A2> mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1, A2) BOOST_MEM_FN_NOEXCEPT) -{ - return _mfi::BOOST_MEM_FN_NAME(mf2)<R, T, A1, A2>(f); -} - -template<class R, class T, class A1, class A2> _mfi::BOOST_MEM_FN_NAME(cmf2)<R, T, A1, A2> mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1, A2) const BOOST_MEM_FN_NOEXCEPT) -{ - return _mfi::BOOST_MEM_FN_NAME(cmf2)<R, T, A1, A2>(f); -} - -template<class R, class T, class A1, class A2, class A3> _mfi::BOOST_MEM_FN_NAME(mf3)<R, T, A1, A2, A3> mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1, A2, A3) BOOST_MEM_FN_NOEXCEPT) -{ - return _mfi::BOOST_MEM_FN_NAME(mf3)<R, T, A1, A2, A3>(f); -} - -template<class R, class T, class A1, class A2, class A3> _mfi::BOOST_MEM_FN_NAME(cmf3)<R, T, A1, A2, A3> mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1, A2, A3) const BOOST_MEM_FN_NOEXCEPT) -{ - return _mfi::BOOST_MEM_FN_NAME(cmf3)<R, T, A1, A2, A3>(f); -} - -template<class R, class T, class A1, class A2, class A3, class A4> _mfi::BOOST_MEM_FN_NAME(mf4)<R, T, A1, A2, A3, A4> mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1, A2, A3, A4) BOOST_MEM_FN_NOEXCEPT) -{ - return _mfi::BOOST_MEM_FN_NAME(mf4)<R, T, A1, A2, A3, A4>(f); -} - -template<class R, class T, class A1, class A2, class A3, class A4> _mfi::BOOST_MEM_FN_NAME(cmf4)<R, T, A1, A2, A3, A4> mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1, A2, A3, A4) const BOOST_MEM_FN_NOEXCEPT) -{ - return _mfi::BOOST_MEM_FN_NAME(cmf4)<R, T, A1, A2, A3, A4>(f); -} - -template<class R, class T, class A1, class A2, class A3, class A4, class A5> _mfi::BOOST_MEM_FN_NAME(mf5)<R, T, A1, A2, A3, A4, A5> mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1, A2, A3, A4, A5) BOOST_MEM_FN_NOEXCEPT) -{ - return _mfi::BOOST_MEM_FN_NAME(mf5)<R, T, A1, A2, A3, A4, A5>(f); -} - -template<class R, class T, class A1, class A2, class A3, class A4, class A5> _mfi::BOOST_MEM_FN_NAME(cmf5)<R, T, A1, A2, A3, A4, A5> mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1, A2, A3, A4, A5) const BOOST_MEM_FN_NOEXCEPT) -{ - return _mfi::BOOST_MEM_FN_NAME(cmf5)<R, T, A1, A2, A3, A4, A5>(f); -} - -template<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6> _mfi::BOOST_MEM_FN_NAME(mf6)<R, T, A1, A2, A3, A4, A5, A6> mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1, A2, A3, A4, A5, A6) BOOST_MEM_FN_NOEXCEPT) -{ - return _mfi::BOOST_MEM_FN_NAME(mf6)<R, T, A1, A2, A3, A4, A5, A6>(f); -} - -template<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6> _mfi::BOOST_MEM_FN_NAME(cmf6)<R, T, A1, A2, A3, A4, A5, A6> mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1, A2, A3, A4, A5, A6) const BOOST_MEM_FN_NOEXCEPT) -{ - return _mfi::BOOST_MEM_FN_NAME(cmf6)<R, T, A1, A2, A3, A4, A5, A6>(f); -} - -template<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7> _mfi::BOOST_MEM_FN_NAME(mf7)<R, T, A1, A2, A3, A4, A5, A6, A7> mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1, A2, A3, A4, A5, A6, A7) BOOST_MEM_FN_NOEXCEPT) -{ - return _mfi::BOOST_MEM_FN_NAME(mf7)<R, T, A1, A2, A3, A4, A5, A6, A7>(f); -} - -template<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7> _mfi::BOOST_MEM_FN_NAME(cmf7)<R, T, A1, A2, A3, A4, A5, A6, A7> mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1, A2, A3, A4, A5, A6, A7) const BOOST_MEM_FN_NOEXCEPT) -{ - return _mfi::BOOST_MEM_FN_NAME(cmf7)<R, T, A1, A2, A3, A4, A5, A6, A7>(f); -} - -template<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> _mfi::BOOST_MEM_FN_NAME(mf8)<R, T, A1, A2, A3, A4, A5, A6, A7, A8> mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1, A2, A3, A4, A5, A6, A7, A8) BOOST_MEM_FN_NOEXCEPT) -{ - return _mfi::BOOST_MEM_FN_NAME(mf8)<R, T, A1, A2, A3, A4, A5, A6, A7, A8>(f); -} - -template<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> _mfi::BOOST_MEM_FN_NAME(cmf8)<R, T, A1, A2, A3, A4, A5, A6, A7, A8> mem_fn(R (BOOST_MEM_FN_CC T::*f) (A1, A2, A3, A4, A5, A6, A7, A8) const BOOST_MEM_FN_NOEXCEPT) -{ - return _mfi::BOOST_MEM_FN_NAME(cmf8)<R, T, A1, A2, A3, A4, A5, A6, A7, A8>(f); -} diff --git a/contrib/restricted/boost/bind/include/boost/bind/mem_fn_template.hpp b/contrib/restricted/boost/bind/include/boost/bind/mem_fn_template.hpp deleted file mode 100644 index b26d585dbc..0000000000 --- a/contrib/restricted/boost/bind/include/boost/bind/mem_fn_template.hpp +++ /dev/null @@ -1,1047 +0,0 @@ -// -// bind/mem_fn_template.hpp -// -// Do not include this header directly -// -// Copyright (c) 2001 Peter Dimov and Multi Media Ltd. -// -// Distributed under the Boost Software License, Version 1.0. (See -// accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) -// -// See http://www.boost.org/libs/bind/mem_fn.html for documentation. -// - -#if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) -# define BOOST_MEM_FN_ENABLE_CONST_OVERLOADS -#endif - -// mf0 - -template<class R, class T BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(mf0) -{ -public: - - typedef R result_type; - typedef T * argument_type; - -private: - - BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) ()) - F f_; - - template<class U> R call(U & u, T const *) const - { - BOOST_MEM_FN_RETURN (u.*f_)(); - } - - template<class U> R call(U & u, void const *) const - { - BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(); - } - -public: - - explicit BOOST_MEM_FN_NAME(mf0)(F f): f_(f) {} - - R operator()(T * p) const - { - BOOST_MEM_FN_RETURN (p->*f_)(); - } - - template<class U> R operator()(U & u) const - { - U const * p = 0; - BOOST_MEM_FN_RETURN call(u, p); - } - -#ifdef BOOST_MEM_FN_ENABLE_CONST_OVERLOADS - - template<class U> R operator()(U const & u) const - { - U const * p = 0; - BOOST_MEM_FN_RETURN call(u, p); - } - -#endif - - R operator()(T & t) const - { - BOOST_MEM_FN_RETURN (t.*f_)(); - } - - bool operator==(BOOST_MEM_FN_NAME(mf0) const & rhs) const - { - return f_ == rhs.f_; - } - - bool operator!=(BOOST_MEM_FN_NAME(mf0) const & rhs) const - { - return f_ != rhs.f_; - } -}; - -// cmf0 - -template<class R, class T BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(cmf0) -{ -public: - - typedef R result_type; - typedef T const * argument_type; - -private: - - BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) () const) - F f_; - - template<class U> R call(U & u, T const *) const - { - BOOST_MEM_FN_RETURN (u.*f_)(); - } - - template<class U> R call(U & u, void const *) const - { - BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(); - } - -public: - - explicit BOOST_MEM_FN_NAME(cmf0)(F f): f_(f) {} - - template<class U> R operator()(U const & u) const - { - U const * p = 0; - BOOST_MEM_FN_RETURN call(u, p); - } - - R operator()(T const & t) const - { - BOOST_MEM_FN_RETURN (t.*f_)(); - } - - bool operator==(BOOST_MEM_FN_NAME(cmf0) const & rhs) const - { - return f_ == rhs.f_; - } - - bool operator!=(BOOST_MEM_FN_NAME(cmf0) const & rhs) const - { - return f_ != rhs.f_; - } -}; - -// mf1 - -template<class R, class T, class A1 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(mf1) -{ -public: - - typedef R result_type; - typedef T * first_argument_type; - typedef A1 second_argument_type; - -private: - - BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1)) - F f_; - - template<class U, class B1> R call(U & u, T const *, B1 & b1) const - { - BOOST_MEM_FN_RETURN (u.*f_)(b1); - } - - template<class U, class B1> R call(U & u, void const *, B1 & b1) const - { - BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1); - } - -public: - - explicit BOOST_MEM_FN_NAME(mf1)(F f): f_(f) {} - - R operator()(T * p, A1 a1) const - { - BOOST_MEM_FN_RETURN (p->*f_)(a1); - } - - template<class U> R operator()(U & u, A1 a1) const - { - U const * p = 0; - BOOST_MEM_FN_RETURN call(u, p, a1); - } - -#ifdef BOOST_MEM_FN_ENABLE_CONST_OVERLOADS - - template<class U> R operator()(U const & u, A1 a1) const - { - U const * p = 0; - BOOST_MEM_FN_RETURN call(u, p, a1); - } - -#endif - - R operator()(T & t, A1 a1) const - { - BOOST_MEM_FN_RETURN (t.*f_)(a1); - } - - bool operator==(BOOST_MEM_FN_NAME(mf1) const & rhs) const - { - return f_ == rhs.f_; - } - - bool operator!=(BOOST_MEM_FN_NAME(mf1) const & rhs) const - { - return f_ != rhs.f_; - } -}; - -// cmf1 - -template<class R, class T, class A1 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(cmf1) -{ -public: - - typedef R result_type; - typedef T const * first_argument_type; - typedef A1 second_argument_type; - -private: - - BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1) const) - F f_; - - template<class U, class B1> R call(U & u, T const *, B1 & b1) const - { - BOOST_MEM_FN_RETURN (u.*f_)(b1); - } - - template<class U, class B1> R call(U & u, void const *, B1 & b1) const - { - BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1); - } - -public: - - explicit BOOST_MEM_FN_NAME(cmf1)(F f): f_(f) {} - - template<class U> R operator()(U const & u, A1 a1) const - { - U const * p = 0; - BOOST_MEM_FN_RETURN call(u, p, a1); - } - - R operator()(T const & t, A1 a1) const - { - BOOST_MEM_FN_RETURN (t.*f_)(a1); - } - - bool operator==(BOOST_MEM_FN_NAME(cmf1) const & rhs) const - { - return f_ == rhs.f_; - } - - bool operator!=(BOOST_MEM_FN_NAME(cmf1) const & rhs) const - { - return f_ != rhs.f_; - } -}; - -// mf2 - -template<class R, class T, class A1, class A2 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(mf2) -{ -public: - - typedef R result_type; - -private: - - BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2)) - F f_; - - template<class U, class B1, class B2> R call(U & u, T const *, B1 & b1, B2 & b2) const - { - BOOST_MEM_FN_RETURN (u.*f_)(b1, b2); - } - - template<class U, class B1, class B2> R call(U & u, void const *, B1 & b1, B2 & b2) const - { - BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2); - } - -public: - - explicit BOOST_MEM_FN_NAME(mf2)(F f): f_(f) {} - - R operator()(T * p, A1 a1, A2 a2) const - { - BOOST_MEM_FN_RETURN (p->*f_)(a1, a2); - } - - template<class U> R operator()(U & u, A1 a1, A2 a2) const - { - U const * p = 0; - BOOST_MEM_FN_RETURN call(u, p, a1, a2); - } - -#ifdef BOOST_MEM_FN_ENABLE_CONST_OVERLOADS - - template<class U> R operator()(U const & u, A1 a1, A2 a2) const - { - U const * p = 0; - BOOST_MEM_FN_RETURN call(u, p, a1, a2); - } - -#endif - - R operator()(T & t, A1 a1, A2 a2) const - { - BOOST_MEM_FN_RETURN (t.*f_)(a1, a2); - } - - bool operator==(BOOST_MEM_FN_NAME(mf2) const & rhs) const - { - return f_ == rhs.f_; - } - - bool operator!=(BOOST_MEM_FN_NAME(mf2) const & rhs) const - { - return f_ != rhs.f_; - } -}; - -// cmf2 - -template<class R, class T, class A1, class A2 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(cmf2) -{ -public: - - typedef R result_type; - -private: - - BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2) const) - F f_; - - template<class U, class B1, class B2> R call(U & u, T const *, B1 & b1, B2 & b2) const - { - BOOST_MEM_FN_RETURN (u.*f_)(b1, b2); - } - - template<class U, class B1, class B2> R call(U & u, void const *, B1 & b1, B2 & b2) const - { - BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2); - } - -public: - - explicit BOOST_MEM_FN_NAME(cmf2)(F f): f_(f) {} - - template<class U> R operator()(U const & u, A1 a1, A2 a2) const - { - U const * p = 0; - BOOST_MEM_FN_RETURN call(u, p, a1, a2); - } - - R operator()(T const & t, A1 a1, A2 a2) const - { - BOOST_MEM_FN_RETURN (t.*f_)(a1, a2); - } - - bool operator==(BOOST_MEM_FN_NAME(cmf2) const & rhs) const - { - return f_ == rhs.f_; - } - - bool operator!=(BOOST_MEM_FN_NAME(cmf2) const & rhs) const - { - return f_ != rhs.f_; - } -}; - -// mf3 - -template<class R, class T, class A1, class A2, class A3 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(mf3) -{ -public: - - typedef R result_type; - -private: - - BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3)) - F f_; - - template<class U, class B1, class B2, class B3> R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3) const - { - BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3); - } - - template<class U, class B1, class B2, class B3> R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3) const - { - BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3); - } - -public: - - explicit BOOST_MEM_FN_NAME(mf3)(F f): f_(f) {} - - R operator()(T * p, A1 a1, A2 a2, A3 a3) const - { - BOOST_MEM_FN_RETURN (p->*f_)(a1, a2, a3); - } - - template<class U> R operator()(U & u, A1 a1, A2 a2, A3 a3) const - { - U const * p = 0; - BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3); - } - -#ifdef BOOST_MEM_FN_ENABLE_CONST_OVERLOADS - - template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3) const - { - U const * p = 0; - BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3); - } - -#endif - - R operator()(T & t, A1 a1, A2 a2, A3 a3) const - { - BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3); - } - - bool operator==(BOOST_MEM_FN_NAME(mf3) const & rhs) const - { - return f_ == rhs.f_; - } - - bool operator!=(BOOST_MEM_FN_NAME(mf3) const & rhs) const - { - return f_ != rhs.f_; - } -}; - -// cmf3 - -template<class R, class T, class A1, class A2, class A3 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(cmf3) -{ -public: - - typedef R result_type; - -private: - - BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3) const) - F f_; - - template<class U, class B1, class B2, class B3> R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3) const - { - BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3); - } - - template<class U, class B1, class B2, class B3> R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3) const - { - BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3); - } - -public: - - explicit BOOST_MEM_FN_NAME(cmf3)(F f): f_(f) {} - - template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3) const - { - U const * p = 0; - BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3); - } - - R operator()(T const & t, A1 a1, A2 a2, A3 a3) const - { - BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3); - } - - bool operator==(BOOST_MEM_FN_NAME(cmf3) const & rhs) const - { - return f_ == rhs.f_; - } - - bool operator!=(BOOST_MEM_FN_NAME(cmf3) const & rhs) const - { - return f_ != rhs.f_; - } -}; - -// mf4 - -template<class R, class T, class A1, class A2, class A3, class A4 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(mf4) -{ -public: - - typedef R result_type; - -private: - - BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4)) - F f_; - - template<class U, class B1, class B2, class B3, class B4> R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4) const - { - BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4); - } - - template<class U, class B1, class B2, class B3, class B4> R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4) const - { - BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4); - } - -public: - - explicit BOOST_MEM_FN_NAME(mf4)(F f): f_(f) {} - - R operator()(T * p, A1 a1, A2 a2, A3 a3, A4 a4) const - { - BOOST_MEM_FN_RETURN (p->*f_)(a1, a2, a3, a4); - } - - template<class U> R operator()(U & u, A1 a1, A2 a2, A3 a3, A4 a4) const - { - U const * p = 0; - BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3, a4); - } - -#ifdef BOOST_MEM_FN_ENABLE_CONST_OVERLOADS - - template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4) const - { - U const * p = 0; - BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3, a4); - } - -#endif - - R operator()(T & t, A1 a1, A2 a2, A3 a3, A4 a4) const - { - BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4); - } - - bool operator==(BOOST_MEM_FN_NAME(mf4) const & rhs) const - { - return f_ == rhs.f_; - } - - bool operator!=(BOOST_MEM_FN_NAME(mf4) const & rhs) const - { - return f_ != rhs.f_; - } -}; - -// cmf4 - -template<class R, class T, class A1, class A2, class A3, class A4 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(cmf4) -{ -public: - - typedef R result_type; - -private: - - BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4) const) - F f_; - - template<class U, class B1, class B2, class B3, class B4> R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4) const - { - BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4); - } - - template<class U, class B1, class B2, class B3, class B4> R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4) const - { - BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4); - } - -public: - - explicit BOOST_MEM_FN_NAME(cmf4)(F f): f_(f) {} - - template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4) const - { - U const * p = 0; - BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3, a4); - } - - R operator()(T const & t, A1 a1, A2 a2, A3 a3, A4 a4) const - { - BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4); - } - - bool operator==(BOOST_MEM_FN_NAME(cmf4) const & rhs) const - { - return f_ == rhs.f_; - } - - bool operator!=(BOOST_MEM_FN_NAME(cmf4) const & rhs) const - { - return f_ != rhs.f_; - } -}; - -// mf5 - -template<class R, class T, class A1, class A2, class A3, class A4, class A5 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(mf5) -{ -public: - - typedef R result_type; - -private: - - BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5)) - F f_; - - template<class U, class B1, class B2, class B3, class B4, class B5> R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5) const - { - BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4, b5); - } - - template<class U, class B1, class B2, class B3, class B4, class B5> R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5) const - { - BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4, b5); - } - -public: - - explicit BOOST_MEM_FN_NAME(mf5)(F f): f_(f) {} - - R operator()(T * p, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) const - { - BOOST_MEM_FN_RETURN (p->*f_)(a1, a2, a3, a4, a5); - } - - template<class U> R operator()(U & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) const - { - U const * p = 0; - BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3, a4, a5); - } - -#ifdef BOOST_MEM_FN_ENABLE_CONST_OVERLOADS - - template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) const - { - U const * p = 0; - BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3, a4, a5); - } - -#endif - - R operator()(T & t, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) const - { - BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4, a5); - } - - bool operator==(BOOST_MEM_FN_NAME(mf5) const & rhs) const - { - return f_ == rhs.f_; - } - - bool operator!=(BOOST_MEM_FN_NAME(mf5) const & rhs) const - { - return f_ != rhs.f_; - } -}; - -// cmf5 - -template<class R, class T, class A1, class A2, class A3, class A4, class A5 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(cmf5) -{ -public: - - typedef R result_type; - -private: - - BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5) const) - F f_; - - template<class U, class B1, class B2, class B3, class B4, class B5> R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5) const - { - BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4, b5); - } - - template<class U, class B1, class B2, class B3, class B4, class B5> R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5) const - { - BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4, b5); - } - -public: - - explicit BOOST_MEM_FN_NAME(cmf5)(F f): f_(f) {} - - template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) const - { - U const * p = 0; - BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3, a4, a5); - } - - R operator()(T const & t, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) const - { - BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4, a5); - } - - bool operator==(BOOST_MEM_FN_NAME(cmf5) const & rhs) const - { - return f_ == rhs.f_; - } - - bool operator!=(BOOST_MEM_FN_NAME(cmf5) const & rhs) const - { - return f_ != rhs.f_; - } -}; - -// mf6 - -template<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(mf6) -{ -public: - - typedef R result_type; - -private: - - BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5, A6)) - F f_; - - template<class U, class B1, class B2, class B3, class B4, class B5, class B6> R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6) const - { - BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4, b5, b6); - } - - template<class U, class B1, class B2, class B3, class B4, class B5, class B6> R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6) const - { - BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4, b5, b6); - } - -public: - - explicit BOOST_MEM_FN_NAME(mf6)(F f): f_(f) {} - - R operator()(T * p, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) const - { - BOOST_MEM_FN_RETURN (p->*f_)(a1, a2, a3, a4, a5, a6); - } - - template<class U> R operator()(U & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) const - { - U const * p = 0; - BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3, a4, a5, a6); - } - -#ifdef BOOST_MEM_FN_ENABLE_CONST_OVERLOADS - - template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) const - { - U const * p = 0; - BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3, a4, a5, a6); - } - -#endif - - R operator()(T & t, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) const - { - BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4, a5, a6); - } - - bool operator==(BOOST_MEM_FN_NAME(mf6) const & rhs) const - { - return f_ == rhs.f_; - } - - bool operator!=(BOOST_MEM_FN_NAME(mf6) const & rhs) const - { - return f_ != rhs.f_; - } -}; - -// cmf6 - -template<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(cmf6) -{ -public: - - typedef R result_type; - -private: - - BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5, A6) const) - F f_; - - template<class U, class B1, class B2, class B3, class B4, class B5, class B6> R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6) const - { - BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4, b5, b6); - } - - template<class U, class B1, class B2, class B3, class B4, class B5, class B6> R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6) const - { - BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4, b5, b6); - } - -public: - - explicit BOOST_MEM_FN_NAME(cmf6)(F f): f_(f) {} - - template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) const - { - U const * p = 0; - BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3, a4, a5, a6); - } - - R operator()(T const & t, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) const - { - BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4, a5, a6); - } - - bool operator==(BOOST_MEM_FN_NAME(cmf6) const & rhs) const - { - return f_ == rhs.f_; - } - - bool operator!=(BOOST_MEM_FN_NAME(cmf6) const & rhs) const - { - return f_ != rhs.f_; - } -}; - -// mf7 - -template<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(mf7) -{ -public: - - typedef R result_type; - -private: - - BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5, A6, A7)) - F f_; - - template<class U, class B1, class B2, class B3, class B4, class B5, class B6, class B7> R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6, B7 & b7) const - { - BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4, b5, b6, b7); - } - - template<class U, class B1, class B2, class B3, class B4, class B5, class B6, class B7> R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6, B7 & b7) const - { - BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4, b5, b6, b7); - } - -public: - - explicit BOOST_MEM_FN_NAME(mf7)(F f): f_(f) {} - - R operator()(T * p, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) const - { - BOOST_MEM_FN_RETURN (p->*f_)(a1, a2, a3, a4, a5, a6, a7); - } - - template<class U> R operator()(U & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) const - { - U const * p = 0; - BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3, a4, a5, a6, a7); - } - -#ifdef BOOST_MEM_FN_ENABLE_CONST_OVERLOADS - - template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) const - { - U const * p = 0; - BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3, a4, a5, a6, a7); - } - -#endif - - R operator()(T & t, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) const - { - BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4, a5, a6, a7); - } - - bool operator==(BOOST_MEM_FN_NAME(mf7) const & rhs) const - { - return f_ == rhs.f_; - } - - bool operator!=(BOOST_MEM_FN_NAME(mf7) const & rhs) const - { - return f_ != rhs.f_; - } -}; - -// cmf7 - -template<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(cmf7) -{ -public: - - typedef R result_type; - -private: - - BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5, A6, A7) const) - F f_; - - template<class U, class B1, class B2, class B3, class B4, class B5, class B6, class B7> R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6, B7 & b7) const - { - BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4, b5, b6, b7); - } - - template<class U, class B1, class B2, class B3, class B4, class B5, class B6, class B7> R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6, B7 & b7) const - { - BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4, b5, b6, b7); - } - -public: - - explicit BOOST_MEM_FN_NAME(cmf7)(F f): f_(f) {} - - template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) const - { - U const * p = 0; - BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3, a4, a5, a6, a7); - } - - R operator()(T const & t, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) const - { - BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4, a5, a6, a7); - } - - bool operator==(BOOST_MEM_FN_NAME(cmf7) const & rhs) const - { - return f_ == rhs.f_; - } - - bool operator!=(BOOST_MEM_FN_NAME(cmf7) const & rhs) const - { - return f_ != rhs.f_; - } -}; - -// mf8 - -template<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(mf8) -{ -public: - - typedef R result_type; - -private: - - BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5, A6, A7, A8)) - F f_; - - template<class U, class B1, class B2, class B3, class B4, class B5, class B6, class B7, class B8> R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6, B7 & b7, B8 & b8) const - { - BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4, b5, b6, b7, b8); - } - - template<class U, class B1, class B2, class B3, class B4, class B5, class B6, class B7, class B8> R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6, B7 & b7, B8 & b8) const - { - BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4, b5, b6, b7, b8); - } - -public: - - explicit BOOST_MEM_FN_NAME(mf8)(F f): f_(f) {} - - R operator()(T * p, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) const - { - BOOST_MEM_FN_RETURN (p->*f_)(a1, a2, a3, a4, a5, a6, a7, a8); - } - - template<class U> R operator()(U & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) const - { - U const * p = 0; - BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3, a4, a5, a6, a7, a8); - } - -#ifdef BOOST_MEM_FN_ENABLE_CONST_OVERLOADS - - template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) const - { - U const * p = 0; - BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3, a4, a5, a6, a7, a8); - } - -#endif - - R operator()(T & t, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) const - { - BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4, a5, a6, a7, a8); - } - - bool operator==(BOOST_MEM_FN_NAME(mf8) const & rhs) const - { - return f_ == rhs.f_; - } - - bool operator!=(BOOST_MEM_FN_NAME(mf8) const & rhs) const - { - return f_ != rhs.f_; - } -}; - -// cmf8 - -template<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8 BOOST_MEM_FN_CLASS_F> class BOOST_MEM_FN_NAME(cmf8) -{ -public: - - typedef R result_type; - -private: - - BOOST_MEM_FN_TYPEDEF(R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5, A6, A7, A8) const) - F f_; - - template<class U, class B1, class B2, class B3, class B4, class B5, class B6, class B7, class B8> R call(U & u, T const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6, B7 & b7, B8 & b8) const - { - BOOST_MEM_FN_RETURN (u.*f_)(b1, b2, b3, b4, b5, b6, b7, b8); - } - - template<class U, class B1, class B2, class B3, class B4, class B5, class B6, class B7, class B8> R call(U & u, void const *, B1 & b1, B2 & b2, B3 & b3, B4 & b4, B5 & b5, B6 & b6, B7 & b7, B8 & b8) const - { - BOOST_MEM_FN_RETURN (get_pointer(u)->*f_)(b1, b2, b3, b4, b5, b6, b7, b8); - } - -public: - - explicit BOOST_MEM_FN_NAME(cmf8)(F f): f_(f) {} - - R operator()(T const * p, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) const - { - BOOST_MEM_FN_RETURN (p->*f_)(a1, a2, a3, a4, a5, a6, a7, a8); - } - - template<class U> R operator()(U const & u, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) const - { - U const * p = 0; - BOOST_MEM_FN_RETURN call(u, p, a1, a2, a3, a4, a5, a6, a7, a8); - } - - R operator()(T const & t, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) const - { - BOOST_MEM_FN_RETURN (t.*f_)(a1, a2, a3, a4, a5, a6, a7, a8); - } - - bool operator==(BOOST_MEM_FN_NAME(cmf8) const & rhs) const - { - return f_ == rhs.f_; - } - - bool operator!=(BOOST_MEM_FN_NAME(cmf8) const & rhs) const - { - return f_ != rhs.f_; - } -}; - -#undef BOOST_MEM_FN_ENABLE_CONST_OVERLOADS diff --git a/contrib/restricted/boost/bind/include/boost/bind/mem_fn_vw.hpp b/contrib/restricted/boost/bind/include/boost/bind/mem_fn_vw.hpp deleted file mode 100644 index f3fc58db04..0000000000 --- a/contrib/restricted/boost/bind/include/boost/bind/mem_fn_vw.hpp +++ /dev/null @@ -1,130 +0,0 @@ -// -// bind/mem_fn_vw.hpp - void return helper wrappers -// -// Do not include this header directly -// -// Copyright (c) 2001 Peter Dimov and Multi Media Ltd. -// -// Distributed under the Boost Software License, Version 1.0. (See -// accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) -// -// See http://www.boost.org/libs/bind/mem_fn.html for documentation. -// - -template<class R, class T> struct BOOST_MEM_FN_NAME(mf0): public mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(mf0)<R, T, R (BOOST_MEM_FN_CC T::*) ()> -{ - typedef R (BOOST_MEM_FN_CC T::*F) (); - explicit BOOST_MEM_FN_NAME(mf0)(F f): mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(mf0)<R, T, F>(f) {} -}; - -template<class R, class T> struct BOOST_MEM_FN_NAME(cmf0): public mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(cmf0)<R, T, R (BOOST_MEM_FN_CC T::*) () const> -{ - typedef R (BOOST_MEM_FN_CC T::*F) () const; - explicit BOOST_MEM_FN_NAME(cmf0)(F f): mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(cmf0)<R, T, F>(f) {} -}; - - -template<class R, class T, class A1> struct BOOST_MEM_FN_NAME(mf1): public mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(mf1)<R, T, A1, R (BOOST_MEM_FN_CC T::*) (A1)> -{ - typedef R (BOOST_MEM_FN_CC T::*F) (A1); - explicit BOOST_MEM_FN_NAME(mf1)(F f): mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(mf1)<R, T, A1, F>(f) {} -}; - -template<class R, class T, class A1> struct BOOST_MEM_FN_NAME(cmf1): public mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(cmf1)<R, T, A1, R (BOOST_MEM_FN_CC T::*) (A1) const> -{ - typedef R (BOOST_MEM_FN_CC T::*F) (A1) const; - explicit BOOST_MEM_FN_NAME(cmf1)(F f): mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(cmf1)<R, T, A1, F>(f) {} -}; - - -template<class R, class T, class A1, class A2> struct BOOST_MEM_FN_NAME(mf2): public mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(mf2)<R, T, A1, A2, R (BOOST_MEM_FN_CC T::*) (A1, A2)> -{ - typedef R (BOOST_MEM_FN_CC T::*F) (A1, A2); - explicit BOOST_MEM_FN_NAME(mf2)(F f): mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(mf2)<R, T, A1, A2, F>(f) {} -}; - -template<class R, class T, class A1, class A2> struct BOOST_MEM_FN_NAME(cmf2): public mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(cmf2)<R, T, A1, A2, R (BOOST_MEM_FN_CC T::*) (A1, A2) const> -{ - typedef R (BOOST_MEM_FN_CC T::*F) (A1, A2) const; - explicit BOOST_MEM_FN_NAME(cmf2)(F f): mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(cmf2)<R, T, A1, A2, F>(f) {} -}; - - -template<class R, class T, class A1, class A2, class A3> struct BOOST_MEM_FN_NAME(mf3): public mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(mf3)<R, T, A1, A2, A3, R (BOOST_MEM_FN_CC T::*) (A1, A2, A3)> -{ - typedef R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3); - explicit BOOST_MEM_FN_NAME(mf3)(F f): mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(mf3)<R, T, A1, A2, A3, F>(f) {} -}; - -template<class R, class T, class A1, class A2, class A3> struct BOOST_MEM_FN_NAME(cmf3): public mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(cmf3)<R, T, A1, A2, A3, R (BOOST_MEM_FN_CC T::*) (A1, A2, A3) const> -{ - typedef R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3) const; - explicit BOOST_MEM_FN_NAME(cmf3)(F f): mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(cmf3)<R, T, A1, A2, A3, F>(f) {} -}; - - -template<class R, class T, class A1, class A2, class A3, class A4> struct BOOST_MEM_FN_NAME(mf4): public mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(mf4)<R, T, A1, A2, A3, A4, R (BOOST_MEM_FN_CC T::*) (A1, A2, A3, A4)> -{ - typedef R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4); - explicit BOOST_MEM_FN_NAME(mf4)(F f): mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(mf4)<R, T, A1, A2, A3, A4, F>(f) {} -}; - -template<class R, class T, class A1, class A2, class A3, class A4> struct BOOST_MEM_FN_NAME(cmf4): public mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(cmf4)<R, T, A1, A2, A3, A4, R (BOOST_MEM_FN_CC T::*) (A1, A2, A3, A4) const> -{ - typedef R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4) const; - explicit BOOST_MEM_FN_NAME(cmf4)(F f): mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(cmf4)<R, T, A1, A2, A3, A4, F>(f) {} -}; - - -template<class R, class T, class A1, class A2, class A3, class A4, class A5> struct BOOST_MEM_FN_NAME(mf5): public mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(mf5)<R, T, A1, A2, A3, A4, A5, R (BOOST_MEM_FN_CC T::*) (A1, A2, A3, A4, A5)> -{ - typedef R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5); - explicit BOOST_MEM_FN_NAME(mf5)(F f): mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(mf5)<R, T, A1, A2, A3, A4, A5, F>(f) {} -}; - -template<class R, class T, class A1, class A2, class A3, class A4, class A5> struct BOOST_MEM_FN_NAME(cmf5): public mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(cmf5)<R, T, A1, A2, A3, A4, A5, R (BOOST_MEM_FN_CC T::*) (A1, A2, A3, A4, A5) const> -{ - typedef R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5) const; - explicit BOOST_MEM_FN_NAME(cmf5)(F f): mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(cmf5)<R, T, A1, A2, A3, A4, A5, F>(f) {} -}; - - -template<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6> struct BOOST_MEM_FN_NAME(mf6): public mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(mf6)<R, T, A1, A2, A3, A4, A5, A6, R (BOOST_MEM_FN_CC T::*) (A1, A2, A3, A4, A5, A6)> -{ - typedef R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5, A6); - explicit BOOST_MEM_FN_NAME(mf6)(F f): mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(mf6)<R, T, A1, A2, A3, A4, A5, A6, F>(f) {} -}; - -template<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6> struct BOOST_MEM_FN_NAME(cmf6): public mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(cmf6)<R, T, A1, A2, A3, A4, A5, A6, R (BOOST_MEM_FN_CC T::*) (A1, A2, A3, A4, A5, A6) const> -{ - typedef R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5, A6) const; - explicit BOOST_MEM_FN_NAME(cmf6)(F f): mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(cmf6)<R, T, A1, A2, A3, A4, A5, A6, F>(f) {} -}; - - -template<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7> struct BOOST_MEM_FN_NAME(mf7): public mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(mf7)<R, T, A1, A2, A3, A4, A5, A6, A7, R (BOOST_MEM_FN_CC T::*) (A1, A2, A3, A4, A5, A6, A7)> -{ - typedef R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5, A6, A7); - explicit BOOST_MEM_FN_NAME(mf7)(F f): mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(mf7)<R, T, A1, A2, A3, A4, A5, A6, A7, F>(f) {} -}; - -template<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7> struct BOOST_MEM_FN_NAME(cmf7): public mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(cmf7)<R, T, A1, A2, A3, A4, A5, A6, A7, R (BOOST_MEM_FN_CC T::*) (A1, A2, A3, A4, A5, A6, A7) const> -{ - typedef R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5, A6, A7) const; - explicit BOOST_MEM_FN_NAME(cmf7)(F f): mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(cmf7)<R, T, A1, A2, A3, A4, A5, A6, A7, F>(f) {} -}; - - -template<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> struct BOOST_MEM_FN_NAME(mf8): public mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(mf8)<R, T, A1, A2, A3, A4, A5, A6, A7, A8, R (BOOST_MEM_FN_CC T::*) (A1, A2, A3, A4, A5, A6, A7, A8)> -{ - typedef R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5, A6, A7, A8); - explicit BOOST_MEM_FN_NAME(mf8)(F f): mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(mf8)<R, T, A1, A2, A3, A4, A5, A6, A7, A8, F>(f) {} -}; - -template<class R, class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> struct BOOST_MEM_FN_NAME(cmf8): public mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(cmf8)<R, T, A1, A2, A3, A4, A5, A6, A7, A8, R (BOOST_MEM_FN_CC T::*) (A1, A2, A3, A4, A5, A6, A7, A8) const> -{ - typedef R (BOOST_MEM_FN_CC T::*F) (A1, A2, A3, A4, A5, A6, A7, A8) const; - explicit BOOST_MEM_FN_NAME(cmf8)(F f): mf<R>::BOOST_NESTED_TEMPLATE BOOST_MEM_FN_NAME2(cmf8)<R, T, A1, A2, A3, A4, A5, A6, A7, A8, F>(f) {} -}; - diff --git a/contrib/restricted/boost/bind/include/boost/bind/placeholders.hpp b/contrib/restricted/boost/bind/include/boost/bind/placeholders.hpp index 5e4b96d8d5..2daba9e94c 100644 --- a/contrib/restricted/boost/bind/include/boost/bind/placeholders.hpp +++ b/contrib/restricted/boost/bind/include/boost/bind/placeholders.hpp @@ -10,14 +10,13 @@ // // bind/placeholders.hpp - _N definitions // -// Copyright (c) 2002 Peter Dimov and Multi Media Ltd. -// Copyright 2015 Peter Dimov +// Copyright 2002, 2015, 2024 Peter Dimov // // Distributed under the Boost Software License, Version 1.0. // See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt // -// See http://www.boost.org/libs/bind/bind.html for documentation. +// See http://www.boost.org/libs/bind for documentation. // #include <boost/bind/arg.hpp> @@ -29,19 +28,7 @@ namespace boost namespace placeholders { -#if defined(BOOST_BORLANDC) || defined(__GNUC__) && (__GNUC__ < 4) - -inline boost::arg<1> _1() { return boost::arg<1>(); } -inline boost::arg<2> _2() { return boost::arg<2>(); } -inline boost::arg<3> _3() { return boost::arg<3>(); } -inline boost::arg<4> _4() { return boost::arg<4>(); } -inline boost::arg<5> _5() { return boost::arg<5>(); } -inline boost::arg<6> _6() { return boost::arg<6>(); } -inline boost::arg<7> _7() { return boost::arg<7>(); } -inline boost::arg<8> _8() { return boost::arg<8>(); } -inline boost::arg<9> _9() { return boost::arg<9>(); } - -#elif !defined(BOOST_NO_CXX17_INLINE_VARIABLES) +#if !defined(BOOST_NO_CXX17_INLINE_VARIABLES) BOOST_INLINE_CONSTEXPR boost::arg<1> _1; BOOST_INLINE_CONSTEXPR boost::arg<2> _2; diff --git a/contrib/restricted/boost/bind/include/boost/bind/std_placeholders.hpp b/contrib/restricted/boost/bind/include/boost/bind/std_placeholders.hpp index 125ff24052..36cfed6877 100644 --- a/contrib/restricted/boost/bind/include/boost/bind/std_placeholders.hpp +++ b/contrib/restricted/boost/bind/include/boost/bind/std_placeholders.hpp @@ -11,12 +11,7 @@ // Distributed under the Boost Software License, Version 1.0. // https://www.boost.org/LICENSE_1_0.txt -#include <boost/bind/detail/requires_cxx11.hpp> #include <boost/is_placeholder.hpp> -#include <boost/config.hpp> - -#if !defined(BOOST_NO_CXX11_HDR_FUNCTIONAL) && !defined(BOOST_NO_CXX11_DECLTYPE) && !defined(BOOST_NO_CXX11_HDR_TYPE_TRAITS) - #include <functional> #include <type_traits> @@ -35,6 +30,4 @@ template<> struct is_placeholder< typename std::decay<decltype(std::placeholders } // namespace boost -#endif - #endif // #ifndef BOOST_BIND_STD_PLACEHOLDERS_HPP_INCLUDED diff --git a/contrib/restricted/boost/bind/include/boost/bind/storage.hpp b/contrib/restricted/boost/bind/include/boost/bind/storage.hpp deleted file mode 100644 index 2ab0db185e..0000000000 --- a/contrib/restricted/boost/bind/include/boost/bind/storage.hpp +++ /dev/null @@ -1,476 +0,0 @@ -#ifndef BOOST_BIND_STORAGE_HPP_INCLUDED -#define BOOST_BIND_STORAGE_HPP_INCLUDED - -// MS compatible compilers support #pragma once - -#if defined(_MSC_VER) && (_MSC_VER >= 1020) -# pragma once -#endif - -// -// bind/storage.hpp -// -// boost/bind.hpp support header, optimized storage -// -// Copyright (c) 2006 Peter Dimov -// -// Distributed under the Boost Software License, Version 1.0. -// See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt -// -// See http://www.boost.org/libs/bind/bind.html for documentation. -// - -#include <boost/bind/detail/requires_cxx11.hpp> -#include <boost/config.hpp> -#include <boost/bind/arg.hpp> - -#ifdef BOOST_MSVC -# pragma warning(push) -# pragma warning(disable: 4512) // assignment operator could not be generated -#endif - -namespace boost -{ - -namespace _bi -{ - -// 1 - -template<class A1> struct storage1 -{ - explicit storage1( A1 a1 ): a1_( a1 ) {} - - template<class V> void accept(V & v) const - { - BOOST_BIND_VISIT_EACH(v, a1_, 0); - } - - A1 a1_; -}; - -#if !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION ) && !defined( BOOST_BORLANDC ) - -template<int I> struct storage1< boost::arg<I> > -{ - explicit storage1( boost::arg<I> ) {} - - template<class V> void accept(V &) const { } - - static boost::arg<I> a1_() { return boost::arg<I>(); } -}; - -template<int I> struct storage1< boost::arg<I> (*) () > -{ - explicit storage1( boost::arg<I> (*) () ) {} - - template<class V> void accept(V &) const { } - - static boost::arg<I> a1_() { return boost::arg<I>(); } -}; - -#endif - -// 2 - -template<class A1, class A2> struct storage2: public storage1<A1> -{ - typedef storage1<A1> inherited; - - storage2( A1 a1, A2 a2 ): storage1<A1>( a1 ), a2_( a2 ) {} - - template<class V> void accept(V & v) const - { - inherited::accept(v); - BOOST_BIND_VISIT_EACH(v, a2_, 0); - } - - A2 a2_; -}; - -#if !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION ) - -template<class A1, int I> struct storage2< A1, boost::arg<I> >: public storage1<A1> -{ - typedef storage1<A1> inherited; - - storage2( A1 a1, boost::arg<I> ): storage1<A1>( a1 ) {} - - template<class V> void accept(V & v) const - { - inherited::accept(v); - } - - static boost::arg<I> a2_() { return boost::arg<I>(); } -}; - -template<class A1, int I> struct storage2< A1, boost::arg<I> (*) () >: public storage1<A1> -{ - typedef storage1<A1> inherited; - - storage2( A1 a1, boost::arg<I> (*) () ): storage1<A1>( a1 ) {} - - template<class V> void accept(V & v) const - { - inherited::accept(v); - } - - static boost::arg<I> a2_() { return boost::arg<I>(); } -}; - -#endif - -// 3 - -template<class A1, class A2, class A3> struct storage3: public storage2< A1, A2 > -{ - typedef storage2<A1, A2> inherited; - - storage3( A1 a1, A2 a2, A3 a3 ): storage2<A1, A2>( a1, a2 ), a3_( a3 ) {} - - template<class V> void accept(V & v) const - { - inherited::accept(v); - BOOST_BIND_VISIT_EACH(v, a3_, 0); - } - - A3 a3_; -}; - -#if !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION ) - -template<class A1, class A2, int I> struct storage3< A1, A2, boost::arg<I> >: public storage2< A1, A2 > -{ - typedef storage2<A1, A2> inherited; - - storage3( A1 a1, A2 a2, boost::arg<I> ): storage2<A1, A2>( a1, a2 ) {} - - template<class V> void accept(V & v) const - { - inherited::accept(v); - } - - static boost::arg<I> a3_() { return boost::arg<I>(); } -}; - -template<class A1, class A2, int I> struct storage3< A1, A2, boost::arg<I> (*) () >: public storage2< A1, A2 > -{ - typedef storage2<A1, A2> inherited; - - storage3( A1 a1, A2 a2, boost::arg<I> (*) () ): storage2<A1, A2>( a1, a2 ) {} - - template<class V> void accept(V & v) const - { - inherited::accept(v); - } - - static boost::arg<I> a3_() { return boost::arg<I>(); } -}; - -#endif - -// 4 - -template<class A1, class A2, class A3, class A4> struct storage4: public storage3< A1, A2, A3 > -{ - typedef storage3<A1, A2, A3> inherited; - - storage4( A1 a1, A2 a2, A3 a3, A4 a4 ): storage3<A1, A2, A3>( a1, a2, a3 ), a4_( a4 ) {} - - template<class V> void accept(V & v) const - { - inherited::accept(v); - BOOST_BIND_VISIT_EACH(v, a4_, 0); - } - - A4 a4_; -}; - -#if !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION ) - -template<class A1, class A2, class A3, int I> struct storage4< A1, A2, A3, boost::arg<I> >: public storage3< A1, A2, A3 > -{ - typedef storage3<A1, A2, A3> inherited; - - storage4( A1 a1, A2 a2, A3 a3, boost::arg<I> ): storage3<A1, A2, A3>( a1, a2, a3 ) {} - - template<class V> void accept(V & v) const - { - inherited::accept(v); - } - - static boost::arg<I> a4_() { return boost::arg<I>(); } -}; - -template<class A1, class A2, class A3, int I> struct storage4< A1, A2, A3, boost::arg<I> (*) () >: public storage3< A1, A2, A3 > -{ - typedef storage3<A1, A2, A3> inherited; - - storage4( A1 a1, A2 a2, A3 a3, boost::arg<I> (*) () ): storage3<A1, A2, A3>( a1, a2, a3 ) {} - - template<class V> void accept(V & v) const - { - inherited::accept(v); - } - - static boost::arg<I> a4_() { return boost::arg<I>(); } -}; - -#endif - -// 5 - -template<class A1, class A2, class A3, class A4, class A5> struct storage5: public storage4< A1, A2, A3, A4 > -{ - typedef storage4<A1, A2, A3, A4> inherited; - - storage5( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5 ): storage4<A1, A2, A3, A4>( a1, a2, a3, a4 ), a5_( a5 ) {} - - template<class V> void accept(V & v) const - { - inherited::accept(v); - BOOST_BIND_VISIT_EACH(v, a5_, 0); - } - - A5 a5_; -}; - -#if !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION ) - -template<class A1, class A2, class A3, class A4, int I> struct storage5< A1, A2, A3, A4, boost::arg<I> >: public storage4< A1, A2, A3, A4 > -{ - typedef storage4<A1, A2, A3, A4> inherited; - - storage5( A1 a1, A2 a2, A3 a3, A4 a4, boost::arg<I> ): storage4<A1, A2, A3, A4>( a1, a2, a3, a4 ) {} - - template<class V> void accept(V & v) const - { - inherited::accept(v); - } - - static boost::arg<I> a5_() { return boost::arg<I>(); } -}; - -template<class A1, class A2, class A3, class A4, int I> struct storage5< A1, A2, A3, A4, boost::arg<I> (*) () >: public storage4< A1, A2, A3, A4 > -{ - typedef storage4<A1, A2, A3, A4> inherited; - - storage5( A1 a1, A2 a2, A3 a3, A4 a4, boost::arg<I> (*) () ): storage4<A1, A2, A3, A4>( a1, a2, a3, a4 ) {} - - template<class V> void accept(V & v) const - { - inherited::accept(v); - } - - static boost::arg<I> a5_() { return boost::arg<I>(); } -}; - -#endif - -// 6 - -template<class A1, class A2, class A3, class A4, class A5, class A6> struct storage6: public storage5< A1, A2, A3, A4, A5 > -{ - typedef storage5<A1, A2, A3, A4, A5> inherited; - - storage6( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6 ): storage5<A1, A2, A3, A4, A5>( a1, a2, a3, a4, a5 ), a6_( a6 ) {} - - template<class V> void accept(V & v) const - { - inherited::accept(v); - BOOST_BIND_VISIT_EACH(v, a6_, 0); - } - - A6 a6_; -}; - -#if !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION ) - -template<class A1, class A2, class A3, class A4, class A5, int I> struct storage6< A1, A2, A3, A4, A5, boost::arg<I> >: public storage5< A1, A2, A3, A4, A5 > -{ - typedef storage5<A1, A2, A3, A4, A5> inherited; - - storage6( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, boost::arg<I> ): storage5<A1, A2, A3, A4, A5>( a1, a2, a3, a4, a5 ) {} - - template<class V> void accept(V & v) const - { - inherited::accept(v); - } - - static boost::arg<I> a6_() { return boost::arg<I>(); } -}; - -template<class A1, class A2, class A3, class A4, class A5, int I> struct storage6< A1, A2, A3, A4, A5, boost::arg<I> (*) () >: public storage5< A1, A2, A3, A4, A5 > -{ - typedef storage5<A1, A2, A3, A4, A5> inherited; - - storage6( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, boost::arg<I> (*) () ): storage5<A1, A2, A3, A4, A5>( a1, a2, a3, a4, a5 ) {} - - template<class V> void accept(V & v) const - { - inherited::accept(v); - } - - static boost::arg<I> a6_() { return boost::arg<I>(); } -}; - -#endif - -// 7 - -template<class A1, class A2, class A3, class A4, class A5, class A6, class A7> struct storage7: public storage6< A1, A2, A3, A4, A5, A6 > -{ - typedef storage6<A1, A2, A3, A4, A5, A6> inherited; - - storage7( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7 ): storage6<A1, A2, A3, A4, A5, A6>( a1, a2, a3, a4, a5, a6 ), a7_( a7 ) {} - - template<class V> void accept(V & v) const - { - inherited::accept(v); - BOOST_BIND_VISIT_EACH(v, a7_, 0); - } - - A7 a7_; -}; - -#if !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION ) - -template<class A1, class A2, class A3, class A4, class A5, class A6, int I> struct storage7< A1, A2, A3, A4, A5, A6, boost::arg<I> >: public storage6< A1, A2, A3, A4, A5, A6 > -{ - typedef storage6<A1, A2, A3, A4, A5, A6> inherited; - - storage7( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, boost::arg<I> ): storage6<A1, A2, A3, A4, A5, A6>( a1, a2, a3, a4, a5, a6 ) {} - - template<class V> void accept(V & v) const - { - inherited::accept(v); - } - - static boost::arg<I> a7_() { return boost::arg<I>(); } -}; - -template<class A1, class A2, class A3, class A4, class A5, class A6, int I> struct storage7< A1, A2, A3, A4, A5, A6, boost::arg<I> (*) () >: public storage6< A1, A2, A3, A4, A5, A6 > -{ - typedef storage6<A1, A2, A3, A4, A5, A6> inherited; - - storage7( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, boost::arg<I> (*) () ): storage6<A1, A2, A3, A4, A5, A6>( a1, a2, a3, a4, a5, a6 ) {} - - template<class V> void accept(V & v) const - { - inherited::accept(v); - } - - static boost::arg<I> a7_() { return boost::arg<I>(); } -}; - -#endif - -// 8 - -template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> struct storage8: public storage7< A1, A2, A3, A4, A5, A6, A7 > -{ - typedef storage7<A1, A2, A3, A4, A5, A6, A7> inherited; - - storage8( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8 ): storage7<A1, A2, A3, A4, A5, A6, A7>( a1, a2, a3, a4, a5, a6, a7 ), a8_( a8 ) {} - - template<class V> void accept(V & v) const - { - inherited::accept(v); - BOOST_BIND_VISIT_EACH(v, a8_, 0); - } - - A8 a8_; -}; - -#if !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION ) - -template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, int I> struct storage8< A1, A2, A3, A4, A5, A6, A7, boost::arg<I> >: public storage7< A1, A2, A3, A4, A5, A6, A7 > -{ - typedef storage7<A1, A2, A3, A4, A5, A6, A7> inherited; - - storage8( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, boost::arg<I> ): storage7<A1, A2, A3, A4, A5, A6, A7>( a1, a2, a3, a4, a5, a6, a7 ) {} - - template<class V> void accept(V & v) const - { - inherited::accept(v); - } - - static boost::arg<I> a8_() { return boost::arg<I>(); } -}; - -template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, int I> struct storage8< A1, A2, A3, A4, A5, A6, A7, boost::arg<I> (*) () >: public storage7< A1, A2, A3, A4, A5, A6, A7 > -{ - typedef storage7<A1, A2, A3, A4, A5, A6, A7> inherited; - - storage8( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, boost::arg<I> (*) () ): storage7<A1, A2, A3, A4, A5, A6, A7>( a1, a2, a3, a4, a5, a6, a7 ) {} - - template<class V> void accept(V & v) const - { - inherited::accept(v); - } - - static boost::arg<I> a8_() { return boost::arg<I>(); } -}; - -#endif - -// 9 - -template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> struct storage9: public storage8< A1, A2, A3, A4, A5, A6, A7, A8 > -{ - typedef storage8<A1, A2, A3, A4, A5, A6, A7, A8> inherited; - - storage9( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9 ): storage8<A1, A2, A3, A4, A5, A6, A7, A8>( a1, a2, a3, a4, a5, a6, a7, a8 ), a9_( a9 ) {} - - template<class V> void accept(V & v) const - { - inherited::accept(v); - BOOST_BIND_VISIT_EACH(v, a9_, 0); - } - - A9 a9_; -}; - -#if !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION ) - -template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, int I> struct storage9< A1, A2, A3, A4, A5, A6, A7, A8, boost::arg<I> >: public storage8< A1, A2, A3, A4, A5, A6, A7, A8 > -{ - typedef storage8<A1, A2, A3, A4, A5, A6, A7, A8> inherited; - - storage9( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, boost::arg<I> ): storage8<A1, A2, A3, A4, A5, A6, A7, A8>( a1, a2, a3, a4, a5, a6, a7, a8 ) {} - - template<class V> void accept(V & v) const - { - inherited::accept(v); - } - - static boost::arg<I> a9_() { return boost::arg<I>(); } -}; - -template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, int I> struct storage9< A1, A2, A3, A4, A5, A6, A7, A8, boost::arg<I> (*) () >: public storage8< A1, A2, A3, A4, A5, A6, A7, A8 > -{ - typedef storage8<A1, A2, A3, A4, A5, A6, A7, A8> inherited; - - storage9( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, boost::arg<I> (*) () ): storage8<A1, A2, A3, A4, A5, A6, A7, A8>( a1, a2, a3, a4, a5, a6, a7, a8 ) {} - - template<class V> void accept(V & v) const - { - inherited::accept(v); - } - - static boost::arg<I> a9_() { return boost::arg<I>(); } -}; - -#endif - -} // namespace _bi - -} // namespace boost - -#ifdef BOOST_MSVC -# pragma warning(default: 4512) // assignment operator could not be generated -# pragma warning(pop) -#endif - -#endif // #ifndef BOOST_BIND_STORAGE_HPP_INCLUDED diff --git a/contrib/restricted/boost/bind/ya.make b/contrib/restricted/boost/bind/ya.make index 800fbedbaf..9e146d94a6 100644 --- a/contrib/restricted/boost/bind/ya.make +++ b/contrib/restricted/boost/bind/ya.make @@ -6,9 +6,9 @@ LICENSE(BSL-1.0) LICENSE_TEXTS(.yandex_meta/licenses.list.txt) -VERSION(1.84.0) +VERSION(1.85.0) -ORIGINAL_SOURCE(https://github.com/boostorg/bind/archive/boost-1.84.0.tar.gz) +ORIGINAL_SOURCE(https://github.com/boostorg/bind/archive/boost-1.85.0.tar.gz) PEERDIR( contrib/restricted/boost/config diff --git a/contrib/restricted/boost/chrono/ya.make b/contrib/restricted/boost/chrono/ya.make index 0bb9d82d02..f3ac96992b 100644 --- a/contrib/restricted/boost/chrono/ya.make +++ b/contrib/restricted/boost/chrono/ya.make @@ -10,9 +10,9 @@ LICENSE( LICENSE_TEXTS(.yandex_meta/licenses.list.txt) -VERSION(1.84.0) +VERSION(1.85.0) -ORIGINAL_SOURCE(https://github.com/boostorg/chrono/archive/boost-1.84.0.tar.gz) +ORIGINAL_SOURCE(https://github.com/boostorg/chrono/archive/boost-1.85.0.tar.gz) PEERDIR( contrib/restricted/boost/assert diff --git a/contrib/restricted/boost/config/include/boost/config/compiler/borland.hpp b/contrib/restricted/boost/config/include/boost/config/compiler/borland.hpp index 567636c5b8..51d5188693 100644 --- a/contrib/restricted/boost/config/include/boost/config/compiler/borland.hpp +++ b/contrib/restricted/boost/config/include/boost/config/compiler/borland.hpp @@ -245,6 +245,9 @@ #if !defined(__cpp_if_constexpr) || (__cpp_if_constexpr < 201606) # define BOOST_NO_CXX17_IF_CONSTEXPR #endif +#if !defined(__cpp_nontype_template_parameter_auto) || (__cpp_nontype_template_parameter_auto < 201606) +# define BOOST_NO_CXX17_AUTO_NONTYPE_TEMPLATE_PARAMS +#endif #if __BORLANDC__ >= 0x590 # define BOOST_HAS_TR1_HASH diff --git a/contrib/restricted/boost/config/include/boost/config/compiler/clang.hpp b/contrib/restricted/boost/config/include/boost/config/compiler/clang.hpp index 696fc6b611..b9ca5977da 100644 --- a/contrib/restricted/boost/config/include/boost/config/compiler/clang.hpp +++ b/contrib/restricted/boost/config/include/boost/config/compiler/clang.hpp @@ -327,6 +327,10 @@ # define BOOST_NO_CXX17_FOLD_EXPRESSIONS #endif +#if (__clang_major__ < 4) || (__cplusplus < 201406L) /* non-standard value that is greater than 201402, which is reported by clang 4.0.0 for C++1z */ +# define BOOST_NO_CXX17_AUTO_NONTYPE_TEMPLATE_PARAMS +#endif + #if __cplusplus < 201103L #define BOOST_NO_CXX11_SFINAE_EXPR #endif diff --git a/contrib/restricted/boost/config/include/boost/config/compiler/codegear.hpp b/contrib/restricted/boost/config/include/boost/config/compiler/codegear.hpp index 4d3f42aefb..49f934c028 100644 --- a/contrib/restricted/boost/config/include/boost/config/compiler/codegear.hpp +++ b/contrib/restricted/boost/config/include/boost/config/compiler/codegear.hpp @@ -316,6 +316,10 @@ # define BOOST_NO_CXX17_IF_CONSTEXPR #endif +#if !defined(__cpp_nontype_template_parameter_auto) || (__cpp_nontype_template_parameter_auto < 201606) +# define BOOST_NO_CXX17_AUTO_NONTYPE_TEMPLATE_PARAMS +#endif + // // TR1 macros: // diff --git a/contrib/restricted/boost/config/include/boost/config/compiler/common_edg.hpp b/contrib/restricted/boost/config/include/boost/config/compiler/common_edg.hpp index dc049893cd..0d59ae0e67 100644 --- a/contrib/restricted/boost/config/include/boost/config/compiler/common_edg.hpp +++ b/contrib/restricted/boost/config/include/boost/config/compiler/common_edg.hpp @@ -171,10 +171,12 @@ #if !defined(__cpp_fold_expressions) || (__cpp_fold_expressions < 201603) # define BOOST_NO_CXX17_FOLD_EXPRESSIONS #endif - #if !defined(__cpp_if_constexpr) || (__cpp_if_constexpr < 201606) # define BOOST_NO_CXX17_IF_CONSTEXPR #endif +#if !defined(__cpp_nontype_template_parameter_auto) || (__cpp_nontype_template_parameter_auto < 201606) +# define BOOST_NO_CXX17_AUTO_NONTYPE_TEMPLATE_PARAMS +#endif #ifdef c_plusplus // EDG has "long long" in non-strict mode diff --git a/contrib/restricted/boost/config/include/boost/config/compiler/digitalmars.hpp b/contrib/restricted/boost/config/include/boost/config/compiler/digitalmars.hpp index bb56ff6c06..4fa347ab88 100644 --- a/contrib/restricted/boost/config/include/boost/config/compiler/digitalmars.hpp +++ b/contrib/restricted/boost/config/include/boost/config/compiler/digitalmars.hpp @@ -130,6 +130,9 @@ #if !defined(__cpp_if_constexpr) || (__cpp_if_constexpr < 201606) # define BOOST_NO_CXX17_IF_CONSTEXPR #endif +#if !defined(__cpp_nontype_template_parameter_auto) || (__cpp_nontype_template_parameter_auto < 201606) +# define BOOST_NO_CXX17_AUTO_NONTYPE_TEMPLATE_PARAMS +#endif #if (__DMC__ <= 0x840) #error "Compiler not supported or configured - please reconfigure" diff --git a/contrib/restricted/boost/config/include/boost/config/compiler/gcc.hpp b/contrib/restricted/boost/config/include/boost/config/compiler/gcc.hpp index 2f1fe5508b..fc05a91860 100644 --- a/contrib/restricted/boost/config/include/boost/config/compiler/gcc.hpp +++ b/contrib/restricted/boost/config/include/boost/config/compiler/gcc.hpp @@ -319,6 +319,9 @@ #if !defined(__cpp_if_constexpr) || (__cpp_if_constexpr < 201606) # define BOOST_NO_CXX17_IF_CONSTEXPR #endif +#if (__GNUC__ < 7) || (__cplusplus < 201703L) +# define BOOST_NO_CXX17_AUTO_NONTYPE_TEMPLATE_PARAMS +#endif #if __GNUC__ >= 7 # define BOOST_FALLTHROUGH __attribute__((fallthrough)) diff --git a/contrib/restricted/boost/config/include/boost/config/compiler/gcc_xml.hpp b/contrib/restricted/boost/config/include/boost/config/compiler/gcc_xml.hpp index 75cac44e9f..e23b14d0f1 100644 --- a/contrib/restricted/boost/config/include/boost/config/compiler/gcc_xml.hpp +++ b/contrib/restricted/boost/config/include/boost/config/compiler/gcc_xml.hpp @@ -108,7 +108,8 @@ #if !defined(__cpp_if_constexpr) || (__cpp_if_constexpr < 201606) # define BOOST_NO_CXX17_IF_CONSTEXPR #endif +#if !defined(__cpp_nontype_template_parameter_auto) || (__cpp_nontype_template_parameter_auto < 201606) +# define BOOST_NO_CXX17_AUTO_NONTYPE_TEMPLATE_PARAMS +#endif #define BOOST_COMPILER "GCC-XML C++ version " __GCCXML__ - - diff --git a/contrib/restricted/boost/config/include/boost/config/compiler/hp_acc.hpp b/contrib/restricted/boost/config/include/boost/config/compiler/hp_acc.hpp index 25636324bf..42e35e553e 100644 --- a/contrib/restricted/boost/config/include/boost/config/compiler/hp_acc.hpp +++ b/contrib/restricted/boost/config/include/boost/config/compiler/hp_acc.hpp @@ -137,6 +137,10 @@ #define BOOST_NO_CXX11_VARIADIC_MACROS #endif +#if !defined(__cpp_nontype_template_parameter_auto) || (__cpp_nontype_template_parameter_auto < 201606) +# define BOOST_NO_CXX17_AUTO_NONTYPE_TEMPLATE_PARAMS +#endif + #endif // diff --git a/contrib/restricted/boost/config/include/boost/config/compiler/metrowerks.hpp b/contrib/restricted/boost/config/include/boost/config/compiler/metrowerks.hpp index 448ab67bc3..c38efb3213 100644 --- a/contrib/restricted/boost/config/include/boost/config/compiler/metrowerks.hpp +++ b/contrib/restricted/boost/config/include/boost/config/compiler/metrowerks.hpp @@ -173,6 +173,9 @@ #if !defined(__cpp_if_constexpr) || (__cpp_if_constexpr < 201606) # define BOOST_NO_CXX17_IF_CONSTEXPR #endif +#if !defined(__cpp_nontype_template_parameter_auto) || (__cpp_nontype_template_parameter_auto < 201606) +# define BOOST_NO_CXX17_AUTO_NONTYPE_TEMPLATE_PARAMS +#endif #define BOOST_COMPILER "Metrowerks CodeWarrior C++ version " BOOST_STRINGIZE(BOOST_COMPILER_VERSION) diff --git a/contrib/restricted/boost/config/include/boost/config/compiler/mpw.hpp b/contrib/restricted/boost/config/include/boost/config/compiler/mpw.hpp index 8433f37195..3adb61221d 100644 --- a/contrib/restricted/boost/config/include/boost/config/compiler/mpw.hpp +++ b/contrib/restricted/boost/config/include/boost/config/compiler/mpw.hpp @@ -122,6 +122,9 @@ #if !defined(__cpp_if_constexpr) || (__cpp_if_constexpr < 201606) # define BOOST_NO_CXX17_IF_CONSTEXPR #endif +#if !defined(__cpp_nontype_template_parameter_auto) || (__cpp_nontype_template_parameter_auto < 201606) +# define BOOST_NO_CXX17_AUTO_NONTYPE_TEMPLATE_PARAMS +#endif // // versions check: diff --git a/contrib/restricted/boost/config/include/boost/config/compiler/nvcc.hpp b/contrib/restricted/boost/config/include/boost/config/compiler/nvcc.hpp index 419dd724ac..147f75dbf6 100644 --- a/contrib/restricted/boost/config/include/boost/config/compiler/nvcc.hpp +++ b/contrib/restricted/boost/config/include/boost/config/compiler/nvcc.hpp @@ -57,5 +57,8 @@ # define BOOST_NO_CXX11_NOEXCEPT #endif +#if !defined(__cpp_nontype_template_parameter_auto) || (__cpp_nontype_template_parameter_auto < 201606) +# define BOOST_NO_CXX17_AUTO_NONTYPE_TEMPLATE_PARAMS #endif +#endif diff --git a/contrib/restricted/boost/config/include/boost/config/compiler/pathscale.hpp b/contrib/restricted/boost/config/include/boost/config/compiler/pathscale.hpp index 5348cf7f72..59ab9b0077 100644 --- a/contrib/restricted/boost/config/include/boost/config/compiler/pathscale.hpp +++ b/contrib/restricted/boost/config/include/boost/config/compiler/pathscale.hpp @@ -135,4 +135,7 @@ #if !defined(__cpp_if_constexpr) || (__cpp_if_constexpr < 201606) # define BOOST_NO_CXX17_IF_CONSTEXPR #endif +#if !defined(__cpp_nontype_template_parameter_auto) || (__cpp_nontype_template_parameter_auto < 201606) +# define BOOST_NO_CXX17_AUTO_NONTYPE_TEMPLATE_PARAMS +#endif #endif diff --git a/contrib/restricted/boost/config/include/boost/config/compiler/sunpro_cc.hpp b/contrib/restricted/boost/config/include/boost/config/compiler/sunpro_cc.hpp index 490dc76dc8..334b604bb4 100644 --- a/contrib/restricted/boost/config/include/boost/config/compiler/sunpro_cc.hpp +++ b/contrib/restricted/boost/config/include/boost/config/compiler/sunpro_cc.hpp @@ -194,6 +194,9 @@ #if !defined(__cpp_if_constexpr) || (__cpp_if_constexpr < 201606) # define BOOST_NO_CXX17_IF_CONSTEXPR #endif +#if !defined(__cpp_nontype_template_parameter_auto) || (__cpp_nontype_template_parameter_auto < 201606) +# define BOOST_NO_CXX17_AUTO_NONTYPE_TEMPLATE_PARAMS +#endif // Turn on threading support for Solaris 12. // Ticket #11972 diff --git a/contrib/restricted/boost/config/include/boost/config/compiler/vacpp.hpp b/contrib/restricted/boost/config/include/boost/config/compiler/vacpp.hpp index 9cfa1adf85..3794d3601c 100644 --- a/contrib/restricted/boost/config/include/boost/config/compiler/vacpp.hpp +++ b/contrib/restricted/boost/config/include/boost/config/compiler/vacpp.hpp @@ -184,3 +184,6 @@ #if !defined(__cpp_if_constexpr) || (__cpp_if_constexpr < 201606) # define BOOST_NO_CXX17_IF_CONSTEXPR #endif +#if !defined(__cpp_nontype_template_parameter_auto) || (__cpp_nontype_template_parameter_auto < 201606) +# define BOOST_NO_CXX17_AUTO_NONTYPE_TEMPLATE_PARAMS +#endif diff --git a/contrib/restricted/boost/config/include/boost/config/compiler/visualc.hpp b/contrib/restricted/boost/config/include/boost/config/compiler/visualc.hpp index c0ada098aa..ce0fc15e33 100644 --- a/contrib/restricted/boost/config/include/boost/config/compiler/visualc.hpp +++ b/contrib/restricted/boost/config/include/boost/config/compiler/visualc.hpp @@ -263,6 +263,9 @@ #define BOOST_NO_CXX17_INLINE_VARIABLES #define BOOST_NO_CXX17_FOLD_EXPRESSIONS #endif +#if (_MSC_VER < 1914) || (_MSVC_LANG < 201703) +#define BOOST_NO_CXX17_AUTO_NONTYPE_TEMPLATE_PARAMS +#endif // // Things that don't work in clr mode: diff --git a/contrib/restricted/boost/config/include/boost/config/compiler/xlcpp.hpp b/contrib/restricted/boost/config/include/boost/config/compiler/xlcpp.hpp index 99b8b24558..4a4477d9d3 100644 --- a/contrib/restricted/boost/config/include/boost/config/compiler/xlcpp.hpp +++ b/contrib/restricted/boost/config/include/boost/config/compiler/xlcpp.hpp @@ -265,6 +265,10 @@ # define BOOST_NO_CXX17_FOLD_EXPRESSIONS #endif +#if !defined(__cpp_nontype_template_parameter_auto) || (__cpp_nontype_template_parameter_auto < 201606) +# define BOOST_NO_CXX17_AUTO_NONTYPE_TEMPLATE_PARAMS +#endif + #if !__has_feature(cxx_thread_local) # define BOOST_NO_CXX11_THREAD_LOCAL #endif diff --git a/contrib/restricted/boost/config/include/boost/config/compiler/xlcpp_zos.hpp b/contrib/restricted/boost/config/include/boost/config/compiler/xlcpp_zos.hpp index 9a177f1bb9..0b288a880f 100644 --- a/contrib/restricted/boost/config/include/boost/config/compiler/xlcpp_zos.hpp +++ b/contrib/restricted/boost/config/include/boost/config/compiler/xlcpp_zos.hpp @@ -157,6 +157,7 @@ #define BOOST_NO_CXX17_INLINE_VARIABLES #define BOOST_NO_CXX17_FOLD_EXPRESSIONS #define BOOST_NO_CXX17_IF_CONSTEXPR +#define BOOST_NO_CXX17_AUTO_NONTYPE_TEMPLATE_PARAMS // ------------------------------------- diff --git a/contrib/restricted/boost/config/include/boost/config/detail/cxx_composite.hpp b/contrib/restricted/boost/config/include/boost/config/detail/cxx_composite.hpp index 9c2c01ead7..acd8e84960 100644 --- a/contrib/restricted/boost/config/include/boost/config/detail/cxx_composite.hpp +++ b/contrib/restricted/boost/config/include/boost/config/detail/cxx_composite.hpp @@ -164,6 +164,7 @@ #endif #if defined(BOOST_NO_CXX14)\ + || defined(BOOST_NO_CXX17_AUTO_NONTYPE_TEMPLATE_PARAMS)\ || defined(BOOST_NO_CXX17_DEDUCTION_GUIDES)\ || defined(BOOST_NO_CXX17_FOLD_EXPRESSIONS)\ || defined(BOOST_NO_CXX17_HDR_ANY)\ diff --git a/contrib/restricted/boost/config/include/boost/version.hpp b/contrib/restricted/boost/config/include/boost/version.hpp index 6cd7e9aa32..989f25fa37 100644 --- a/contrib/restricted/boost/config/include/boost/version.hpp +++ b/contrib/restricted/boost/config/include/boost/version.hpp @@ -19,7 +19,7 @@ // BOOST_VERSION / 100 % 1000 is the minor version // BOOST_VERSION / 100000 is the major version -#define BOOST_VERSION 108400 +#define BOOST_VERSION 108500 // // BOOST_LIB_VERSION must be defined to be the same as BOOST_VERSION @@ -27,6 +27,6 @@ // number, y is the minor version number, and z is the patch level if not 0. // This is used by <config/auto_link.hpp> to select which library version to link to. -#define BOOST_LIB_VERSION "1_84" +#define BOOST_LIB_VERSION "1_85" #endif diff --git a/contrib/restricted/boost/config/ya.make b/contrib/restricted/boost/config/ya.make index 19f057176e..4acbd9a6f0 100644 --- a/contrib/restricted/boost/config/ya.make +++ b/contrib/restricted/boost/config/ya.make @@ -6,9 +6,9 @@ LICENSE(BSL-1.0) LICENSE_TEXTS(.yandex_meta/licenses.list.txt) -VERSION(1.84.0) +VERSION(1.85.0) -ORIGINAL_SOURCE(https://github.com/boostorg/config/archive/boost-1.84.0.tar.gz) +ORIGINAL_SOURCE(https://github.com/boostorg/config/archive/boost-1.85.0.tar.gz) ADDINCL( GLOBAL contrib/restricted/boost/config/include diff --git a/contrib/restricted/boost/container/include/boost/container/allocator_traits.hpp b/contrib/restricted/boost/container/include/boost/container/allocator_traits.hpp index f5f73efa50..cdb6683e88 100644 --- a/contrib/restricted/boost/container/include/boost/container/allocator_traits.hpp +++ b/contrib/restricted/boost/container/include/boost/container/allocator_traits.hpp @@ -44,8 +44,6 @@ #if defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) #include <boost/move/detail/fwd_macros.hpp> #endif -// other boost -#include <boost/static_assert.hpp> #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED @@ -298,18 +296,18 @@ struct allocator_traits //! <b>Returns</b>: <code>a.allocate(n)</code> //! - BOOST_CONTAINER_FORCEINLINE static pointer allocate(Allocator &a, size_type n) + inline static pointer allocate(Allocator &a, size_type n) { return a.allocate(n); } //! <b>Returns</b>: <code>a.deallocate(p, n)</code> //! //! <b>Throws</b>: Nothing - BOOST_CONTAINER_FORCEINLINE static void deallocate(Allocator &a, pointer p, size_type n) + inline static void deallocate(Allocator &a, pointer p, size_type n) { a.deallocate(p, n); } //! <b>Effects</b>: calls <code>a.allocate(n, p)</code> if that call is well-formed; //! otherwise, invokes <code>a.allocate(n)</code> - BOOST_CONTAINER_FORCEINLINE static pointer allocate(Allocator &a, size_type n, const_void_pointer p) + inline static pointer allocate(Allocator &a, size_type n, const_void_pointer p) { const bool value = boost::container::dtl:: has_member_function_callable_with_allocate @@ -321,7 +319,7 @@ struct allocator_traits //! <b>Effects</b>: calls <code>a.destroy(p)</code> if that call is well-formed; //! otherwise, invokes <code>p->~T()</code>. template<class T> - BOOST_CONTAINER_FORCEINLINE static void destroy(Allocator &a, T*p) BOOST_NOEXCEPT_OR_NOTHROW + inline static void destroy(Allocator &a, T*p) BOOST_NOEXCEPT_OR_NOTHROW { typedef T* destroy_pointer; const bool value = boost::container::dtl:: @@ -333,7 +331,7 @@ struct allocator_traits //! <b>Returns</b>: <code>a.max_size()</code> if that expression is well-formed; otherwise, //! <code>numeric_limits<size_type>::max()</code>. - BOOST_CONTAINER_FORCEINLINE static size_type max_size(const Allocator &a) BOOST_NOEXCEPT_OR_NOTHROW + inline static size_type max_size(const Allocator &a) BOOST_NOEXCEPT_OR_NOTHROW { const bool value = allocator_traits_detail::has_max_size<Allocator, size_type (Allocator::*)() const>::value; dtl::bool_<value> flag; @@ -342,7 +340,7 @@ struct allocator_traits //! <b>Returns</b>: <code>a.select_on_container_copy_construction()</code> if that expression is well-formed; //! otherwise, a. - BOOST_CONTAINER_FORCEINLINE static BOOST_CONTAINER_DOC1ST(Allocator, + inline static BOOST_CONTAINER_DOC1ST(Allocator, typename dtl::if_c < allocator_traits_detail::has_select_on_container_copy_construction<Allocator BOOST_MOVE_I Allocator (Allocator::*)() const>::value BOOST_MOVE_I Allocator BOOST_MOVE_I const Allocator & >::type) @@ -358,7 +356,7 @@ struct allocator_traits //! <b>Effects</b>: calls <code>a.construct(p, std::forward<Args>(args)...)</code> if that call is well-formed; //! otherwise, invokes <code>`placement new` (static_cast<void*>(p)) T(std::forward<Args>(args)...)</code> template <class T, class ...Args> - BOOST_CONTAINER_FORCEINLINE static void construct(Allocator & a, T* p, BOOST_FWD_REF(Args)... args) + inline static void construct(Allocator & a, T* p, BOOST_FWD_REF(Args)... args) { static const bool value = ::boost::move_detail::and_ < dtl::is_not_std_allocator<Allocator> @@ -372,7 +370,7 @@ struct allocator_traits //! <b>Returns</b>: <code>a.storage_is_unpropagable(p)</code> if is_partially_propagable::value is true; otherwise, //! <code>false</code>. - BOOST_CONTAINER_FORCEINLINE static bool storage_is_unpropagable(const Allocator &a, pointer p) BOOST_NOEXCEPT_OR_NOTHROW + inline static bool storage_is_unpropagable(const Allocator &a, pointer p) BOOST_NOEXCEPT_OR_NOTHROW { dtl::bool_<is_partially_propagable::value> flag; return allocator_traits::priv_storage_is_unpropagable(flag, a, p); @@ -380,7 +378,7 @@ struct allocator_traits //! <b>Returns</b>: <code>true</code> if <code>is_always_equal::value == true</code>, otherwise, //! <code>a == b</code>. - BOOST_CONTAINER_FORCEINLINE static bool equal(const Allocator &a, const Allocator &b) BOOST_NOEXCEPT_OR_NOTHROW + inline static bool equal(const Allocator &a, const Allocator &b) BOOST_NOEXCEPT_OR_NOTHROW { dtl::bool_<is_always_equal::value> flag; return allocator_traits::priv_equal(flag, a, b); @@ -388,46 +386,46 @@ struct allocator_traits #if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED) private: - BOOST_CONTAINER_FORCEINLINE static pointer priv_allocate(dtl::true_type, Allocator &a, size_type n, const_void_pointer p) + inline static pointer priv_allocate(dtl::true_type, Allocator &a, size_type n, const_void_pointer p) { return a.allocate(n, p); } - BOOST_CONTAINER_FORCEINLINE static pointer priv_allocate(dtl::false_type, Allocator &a, size_type n, const_void_pointer) + inline static pointer priv_allocate(dtl::false_type, Allocator &a, size_type n, const_void_pointer) { return a.allocate(n); } template<class T> - BOOST_CONTAINER_FORCEINLINE static void priv_destroy(dtl::true_type, Allocator &a, T* p) BOOST_NOEXCEPT_OR_NOTHROW + inline static void priv_destroy(dtl::true_type, Allocator &a, T* p) BOOST_NOEXCEPT_OR_NOTHROW { a.destroy(p); } template<class T> - BOOST_CONTAINER_FORCEINLINE static void priv_destroy(dtl::false_type, Allocator &, T* p) BOOST_NOEXCEPT_OR_NOTHROW + inline static void priv_destroy(dtl::false_type, Allocator &, T* p) BOOST_NOEXCEPT_OR_NOTHROW { p->~T(); (void)p; } - BOOST_CONTAINER_FORCEINLINE static size_type priv_max_size(dtl::true_type, const Allocator &a) BOOST_NOEXCEPT_OR_NOTHROW + inline static size_type priv_max_size(dtl::true_type, const Allocator &a) BOOST_NOEXCEPT_OR_NOTHROW { return a.max_size(); } - BOOST_CONTAINER_FORCEINLINE static size_type priv_max_size(dtl::false_type, const Allocator &) BOOST_NOEXCEPT_OR_NOTHROW + inline static size_type priv_max_size(dtl::false_type, const Allocator &) BOOST_NOEXCEPT_OR_NOTHROW { return size_type(-1)/sizeof(value_type); } - BOOST_CONTAINER_FORCEINLINE static Allocator priv_select_on_container_copy_construction(dtl::true_type, const Allocator &a) + inline static Allocator priv_select_on_container_copy_construction(dtl::true_type, const Allocator &a) { return a.select_on_container_copy_construction(); } - BOOST_CONTAINER_FORCEINLINE static const Allocator &priv_select_on_container_copy_construction(dtl::false_type, const Allocator &a) BOOST_NOEXCEPT_OR_NOTHROW + inline static const Allocator &priv_select_on_container_copy_construction(dtl::false_type, const Allocator &a) BOOST_NOEXCEPT_OR_NOTHROW { return a; } #if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) template<class T, class ...Args> - BOOST_CONTAINER_FORCEINLINE static void priv_construct(dtl::true_type, Allocator &a, T *p, BOOST_FWD_REF(Args) ...args) + inline static void priv_construct(dtl::true_type, Allocator &a, T *p, BOOST_FWD_REF(Args) ...args) { a.construct( p, ::boost::forward<Args>(args)...); } template<class T, class ...Args> - BOOST_CONTAINER_FORCEINLINE static void priv_construct(dtl::false_type, Allocator &, T *p, BOOST_FWD_REF(Args) ...args) + inline static void priv_construct(dtl::false_type, Allocator &, T *p, BOOST_FWD_REF(Args) ...args) { ::new((void*)p, boost_container_new_t()) T(::boost::forward<Args>(args)...); } #else // #if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) public: #define BOOST_CONTAINER_ALLOCATOR_TRAITS_CONSTRUCT_IMPL(N) \ template<class T BOOST_MOVE_I##N BOOST_MOVE_CLASS##N >\ - BOOST_CONTAINER_FORCEINLINE static void construct(Allocator &a, T *p BOOST_MOVE_I##N BOOST_MOVE_UREF##N)\ + inline static void construct(Allocator &a, T *p BOOST_MOVE_I##N BOOST_MOVE_UREF##N)\ {\ static const bool value = ::boost::move_detail::and_ \ < dtl::is_not_std_allocator<Allocator> \ @@ -447,11 +445,11 @@ struct allocator_traits ///////////////////////////////// #define BOOST_CONTAINER_ALLOCATOR_TRAITS_PRIV_CONSTRUCT_IMPL(N) \ template<class T BOOST_MOVE_I##N BOOST_MOVE_CLASS##N >\ - BOOST_CONTAINER_FORCEINLINE static void priv_construct(dtl::true_type, Allocator &a, T *p BOOST_MOVE_I##N BOOST_MOVE_UREF##N)\ + inline static void priv_construct(dtl::true_type, Allocator &a, T *p BOOST_MOVE_I##N BOOST_MOVE_UREF##N)\ { a.construct( p BOOST_MOVE_I##N BOOST_MOVE_FWD##N ); }\ \ template<class T BOOST_MOVE_I##N BOOST_MOVE_CLASS##N >\ - BOOST_CONTAINER_FORCEINLINE static void priv_construct(dtl::false_type, Allocator &, T *p BOOST_MOVE_I##N BOOST_MOVE_UREF##N)\ + inline static void priv_construct(dtl::false_type, Allocator &, T *p BOOST_MOVE_I##N BOOST_MOVE_UREF##N)\ { ::new((void*)p, boost_container_new_t()) T(BOOST_MOVE_FWD##N); }\ // BOOST_MOVE_ITERATE_0TO8(BOOST_CONTAINER_ALLOCATOR_TRAITS_PRIV_CONSTRUCT_IMPL) @@ -460,19 +458,19 @@ struct allocator_traits #endif // #if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) template<class T> - BOOST_CONTAINER_FORCEINLINE static void priv_construct(dtl::false_type, Allocator &, T *p, const ::boost::container::default_init_t&) + inline static void priv_construct(dtl::false_type, Allocator &, T *p, const ::boost::container::default_init_t&) { ::new((void*)p, boost_container_new_t()) T; } - BOOST_CONTAINER_FORCEINLINE static bool priv_storage_is_unpropagable(dtl::true_type, const Allocator &a, pointer p) + inline static bool priv_storage_is_unpropagable(dtl::true_type, const Allocator &a, pointer p) { return a.storage_is_unpropagable(p); } - BOOST_CONTAINER_FORCEINLINE static bool priv_storage_is_unpropagable(dtl::false_type, const Allocator &, pointer) + inline static bool priv_storage_is_unpropagable(dtl::false_type, const Allocator &, pointer) { return false; } - BOOST_CONTAINER_FORCEINLINE static bool priv_equal(dtl::true_type, const Allocator &, const Allocator &) + inline static bool priv_equal(dtl::true_type, const Allocator &, const Allocator &) { return true; } - BOOST_CONTAINER_FORCEINLINE static bool priv_equal(dtl::false_type, const Allocator &a, const Allocator &b) + inline static bool priv_equal(dtl::false_type, const Allocator &a, const Allocator &b) { return a == b; } #endif //#if defined(BOOST_CONTAINER_DOXYGEN_INVOKED) diff --git a/contrib/restricted/boost/container/include/boost/container/detail/advanced_insert_int.hpp b/contrib/restricted/boost/container/include/boost/container/detail/advanced_insert_int.hpp index 0238805db2..bc6801adb4 100644 --- a/contrib/restricted/boost/container/include/boost/container/detail/advanced_insert_int.hpp +++ b/contrib/restricted/boost/container/include/boost/container/detail/advanced_insert_int.hpp @@ -49,19 +49,19 @@ struct move_insert_range_proxy { typedef typename allocator_traits<Allocator>::value_type value_type; - BOOST_CONTAINER_FORCEINLINE explicit move_insert_range_proxy(FwdIt first) + inline explicit move_insert_range_proxy(FwdIt first) : first_(first) {} template<class Iterator> - BOOST_CONTAINER_FORCEINLINE void uninitialized_copy_n_and_update(Allocator &a, Iterator p, std::size_t n) + inline void uninitialized_copy_n_and_update(Allocator &a, Iterator p, std::size_t n) { this->first_ = ::boost::container::uninitialized_move_alloc_n_source (a, this->first_, n, p); } template<class Iterator> - BOOST_CONTAINER_FORCEINLINE void copy_n_and_update(Allocator &, Iterator p, std::size_t n) + inline void copy_n_and_update(Allocator &, Iterator p, std::size_t n) { this->first_ = ::boost::container::move_n_source(this->first_, n, p); } @@ -75,18 +75,18 @@ struct insert_range_proxy { typedef typename allocator_traits<Allocator>::value_type value_type; - BOOST_CONTAINER_FORCEINLINE explicit insert_range_proxy(FwdIt first) + inline explicit insert_range_proxy(FwdIt first) : first_(first) {} template<class Iterator> - BOOST_CONTAINER_FORCEINLINE void uninitialized_copy_n_and_update(Allocator &a, Iterator p, std::size_t n) + inline void uninitialized_copy_n_and_update(Allocator &a, Iterator p, std::size_t n) { this->first_ = ::boost::container::uninitialized_copy_alloc_n_source(a, this->first_, n, p); } template<class Iterator> - BOOST_CONTAINER_FORCEINLINE void copy_n_and_update(Allocator &, Iterator p, std::size_t n) + inline void copy_n_and_update(Allocator &, Iterator p, std::size_t n) { this->first_ = ::boost::container::copy_n_source(this->first_, n, p); } @@ -100,16 +100,16 @@ struct insert_n_copies_proxy { typedef typename allocator_traits<Allocator>::value_type value_type; - BOOST_CONTAINER_FORCEINLINE explicit insert_n_copies_proxy(const value_type &v) + inline explicit insert_n_copies_proxy(const value_type &v) : v_(v) {} template<class Iterator> - BOOST_CONTAINER_FORCEINLINE void uninitialized_copy_n_and_update(Allocator &a, Iterator p, std::size_t n) const + inline void uninitialized_copy_n_and_update(Allocator &a, Iterator p, std::size_t n) const { boost::container::uninitialized_fill_alloc_n(a, v_, n, p); } template<class Iterator> - BOOST_CONTAINER_FORCEINLINE void copy_n_and_update(Allocator &, Iterator p, std::size_t n) const + inline void copy_n_and_update(Allocator &, Iterator p, std::size_t n) const { while (n){ --n; @@ -129,7 +129,7 @@ struct insert_value_initialized_n_proxy typedef typename dtl::aligned_storage<sizeof(value_type), dtl::alignment_of<value_type>::value>::type storage_t; template<class Iterator> - BOOST_CONTAINER_FORCEINLINE void uninitialized_copy_n_and_update(Allocator &a, Iterator p, std::size_t n) const + inline void uninitialized_copy_n_and_update(Allocator &a, Iterator p, std::size_t n) const { boost::container::uninitialized_value_init_alloc_n(a, n, p); } template<class Iterator> @@ -155,7 +155,7 @@ struct insert_default_initialized_n_proxy typedef typename dtl::aligned_storage<sizeof(value_type), dtl::alignment_of<value_type>::value>::type storage_t; template<class Iterator> - BOOST_CONTAINER_FORCEINLINE void uninitialized_copy_n_and_update(Allocator &a, Iterator p, std::size_t n) const + inline void uninitialized_copy_n_and_update(Allocator &a, Iterator p, std::size_t n) const { boost::container::uninitialized_default_init_alloc_n(a, n, p); } template<class Iterator> @@ -183,19 +183,19 @@ struct insert_copy_proxy static const bool single_value = true; - BOOST_CONTAINER_FORCEINLINE explicit insert_copy_proxy(const value_type &v) + inline explicit insert_copy_proxy(const value_type &v) : v_(v) {} template<class Iterator> - BOOST_CONTAINER_FORCEINLINE void uninitialized_copy_n_and_update(Allocator &a, Iterator p, std::size_t n) const + inline void uninitialized_copy_n_and_update(Allocator &a, Iterator p, std::size_t n) const { BOOST_ASSERT(n == 1); (void)n; alloc_traits::construct( a, boost::movelib::iterator_to_raw_pointer(p), v_); } template<class Iterator> - BOOST_CONTAINER_FORCEINLINE void copy_n_and_update(Allocator &, Iterator p, std::size_t n) const + inline void copy_n_and_update(Allocator &, Iterator p, std::size_t n) const { BOOST_ASSERT(n == 1); (void)n; *p = v_; @@ -213,19 +213,19 @@ struct insert_move_proxy static const bool single_value = true; - BOOST_CONTAINER_FORCEINLINE explicit insert_move_proxy(value_type &v) + inline explicit insert_move_proxy(value_type &v) : v_(v) {} template<class Iterator> - BOOST_CONTAINER_FORCEINLINE void uninitialized_copy_n_and_update(Allocator &a, Iterator p, std::size_t n) const + inline void uninitialized_copy_n_and_update(Allocator &a, Iterator p, std::size_t n) const { BOOST_ASSERT(n == 1); (void)n; alloc_traits::construct( a, boost::movelib::iterator_to_raw_pointer(p), ::boost::move(v_) ); } template<class Iterator> - BOOST_CONTAINER_FORCEINLINE void copy_n_and_update(Allocator &, Iterator p, std::size_t n) const + inline void copy_n_and_update(Allocator &, Iterator p, std::size_t n) const { BOOST_ASSERT(n == 1); (void)n; *p = ::boost::move(v_); @@ -235,13 +235,13 @@ struct insert_move_proxy }; template<class It, class Allocator> -BOOST_CONTAINER_FORCEINLINE insert_move_proxy<Allocator> get_insert_value_proxy(BOOST_RV_REF(typename boost::container::iterator_traits<It>::value_type) v) +inline insert_move_proxy<Allocator> get_insert_value_proxy(BOOST_RV_REF(typename boost::container::iterator_traits<It>::value_type) v) { return insert_move_proxy<Allocator>(v); } template<class It, class Allocator> -BOOST_CONTAINER_FORCEINLINE insert_copy_proxy<Allocator> get_insert_value_proxy(const typename boost::container::iterator_traits<It>::value_type &v) +inline insert_copy_proxy<Allocator> get_insert_value_proxy(const typename boost::container::iterator_traits<It>::value_type &v) { return insert_copy_proxy<Allocator>(v); } @@ -266,17 +266,17 @@ struct insert_nonmovable_emplace_proxy static const bool single_value = true; - BOOST_CONTAINER_FORCEINLINE explicit insert_nonmovable_emplace_proxy(BOOST_FWD_REF(Args)... args) + inline explicit insert_nonmovable_emplace_proxy(BOOST_FWD_REF(Args)... args) : args_(args...) {} template<class Iterator> - BOOST_CONTAINER_FORCEINLINE void uninitialized_copy_n_and_update(Allocator &a, Iterator p, std::size_t n) + inline void uninitialized_copy_n_and_update(Allocator &a, Iterator p, std::size_t n) { this->priv_uninitialized_copy_some_and_update(a, index_tuple_t(), p, n); } private: template<std::size_t ...IdxPack, class Iterator> - BOOST_CONTAINER_FORCEINLINE void priv_uninitialized_copy_some_and_update(Allocator &a, const index_tuple<IdxPack...>&, Iterator p, std::size_t n) + inline void priv_uninitialized_copy_some_and_update(Allocator &a, const index_tuple<IdxPack...>&, Iterator p, std::size_t n) { BOOST_ASSERT(n == 1); (void)n; alloc_traits::construct( a, boost::movelib::iterator_to_raw_pointer(p), ::boost::forward<Args>(get<IdxPack>(this->args_))... ); @@ -297,18 +297,18 @@ struct insert_emplace_proxy static const bool single_value = true; - BOOST_CONTAINER_FORCEINLINE explicit insert_emplace_proxy(BOOST_FWD_REF(Args)... args) + inline explicit insert_emplace_proxy(BOOST_FWD_REF(Args)... args) : base_t(::boost::forward<Args>(args)...) {} template<class Iterator> - BOOST_CONTAINER_FORCEINLINE void copy_n_and_update(Allocator &a, Iterator p, std::size_t n) + inline void copy_n_and_update(Allocator &a, Iterator p, std::size_t n) { this->priv_copy_some_and_update(a, index_tuple_t(), p, n); } private: template<std::size_t ...IdxPack, class Iterator> - BOOST_CONTAINER_FORCEINLINE void priv_copy_some_and_update(Allocator &a, const index_tuple<IdxPack...>&, Iterator p, std::size_t n) + inline void priv_copy_some_and_update(Allocator &a, const index_tuple<IdxPack...>&, Iterator p, std::size_t n) { BOOST_ASSERT(n ==1); (void)n; typename dtl::aligned_storage<sizeof(value_type), dtl::alignment_of<value_type>::value>::type v; @@ -333,7 +333,7 @@ struct insert_emplace_proxy<Allocator, typename boost::container::allocator_trai { static const bool single_value = true; - BOOST_CONTAINER_FORCEINLINE explicit insert_emplace_proxy(typename boost::container::allocator_traits<Allocator>::value_type &&v) + inline explicit insert_emplace_proxy(typename boost::container::allocator_traits<Allocator>::value_type &&v) : insert_move_proxy<Allocator>(v) {} }; @@ -350,7 +350,7 @@ struct insert_emplace_proxy<Allocator static const bool single_value = true; - BOOST_CONTAINER_FORCEINLINE explicit insert_emplace_proxy(const typename boost::container::allocator_traits<Allocator>::value_type &v) + inline explicit insert_emplace_proxy(const typename boost::container::allocator_traits<Allocator>::value_type &v) : insert_copy_proxy<Allocator>(v) {} }; @@ -361,7 +361,7 @@ struct insert_emplace_proxy<Allocator, typename boost::container::allocator_trai { static const bool single_value = true; - BOOST_CONTAINER_FORCEINLINE explicit insert_emplace_proxy(const typename boost::container::allocator_traits<Allocator>::value_type &v) + inline explicit insert_emplace_proxy(const typename boost::container::allocator_traits<Allocator>::value_type &v) : insert_copy_proxy<Allocator>(v) {} }; @@ -374,7 +374,7 @@ struct insert_emplace_proxy<Allocator { static const bool single_value = true; - BOOST_CONTAINER_FORCEINLINE explicit insert_emplace_proxy(const typename boost::container::allocator_traits<Allocator>::value_type &v) + inline explicit insert_emplace_proxy(const typename boost::container::allocator_traits<Allocator>::value_type &v) : insert_copy_proxy<Allocator>(v) {} }; @@ -398,18 +398,18 @@ struct insert_nonmovable_emplace_proxy##N\ \ static const bool single_value = true;\ \ - BOOST_CONTAINER_FORCEINLINE explicit insert_nonmovable_emplace_proxy##N(BOOST_MOVE_UREF##N)\ + inline explicit insert_nonmovable_emplace_proxy##N(BOOST_MOVE_UREF##N)\ BOOST_MOVE_COLON##N BOOST_MOVE_FWD_INIT##N {}\ \ template<class Iterator>\ - BOOST_CONTAINER_FORCEINLINE void uninitialized_copy_n_and_update(Allocator &a, Iterator p, std::size_t n)\ + inline void uninitialized_copy_n_and_update(Allocator &a, Iterator p, std::size_t n)\ {\ BOOST_ASSERT(n == 1); (void)n;\ alloc_traits::construct(a, boost::movelib::iterator_to_raw_pointer(p) BOOST_MOVE_I##N BOOST_MOVE_MFWD##N);\ }\ \ template<class Iterator>\ - BOOST_CONTAINER_FORCEINLINE void copy_n_and_update(Allocator &, Iterator, std::size_t)\ + inline void copy_n_and_update(Allocator &, Iterator, std::size_t)\ { BOOST_ASSERT(false); }\ \ protected:\ @@ -427,11 +427,11 @@ struct insert_emplace_proxy_arg##N\ \ static const bool single_value = true;\ \ - BOOST_CONTAINER_FORCEINLINE explicit insert_emplace_proxy_arg##N(BOOST_MOVE_UREF##N)\ + inline explicit insert_emplace_proxy_arg##N(BOOST_MOVE_UREF##N)\ : base_t(BOOST_MOVE_FWD##N){}\ \ template<class Iterator>\ - BOOST_CONTAINER_FORCEINLINE void copy_n_and_update(Allocator &a, Iterator p, std::size_t n)\ + inline void copy_n_and_update(Allocator &a, Iterator p, std::size_t n)\ {\ BOOST_ASSERT(n == 1); (void)n;\ typename dtl::aligned_storage<sizeof(value_type), dtl::alignment_of<value_type>::value>::type v;\ @@ -461,7 +461,7 @@ struct insert_emplace_proxy_arg1<Allocator, ::boost::rv<typename boost::containe { static const bool single_value = true; - BOOST_CONTAINER_FORCEINLINE explicit insert_emplace_proxy_arg1(typename boost::container::allocator_traits<Allocator>::value_type &v) + inline explicit insert_emplace_proxy_arg1(typename boost::container::allocator_traits<Allocator>::value_type &v) : insert_move_proxy<Allocator>(v) {} }; @@ -472,7 +472,7 @@ struct insert_emplace_proxy_arg1<Allocator, typename boost::container::allocator { static const bool single_value = true; - BOOST_CONTAINER_FORCEINLINE explicit insert_emplace_proxy_arg1(const typename boost::container::allocator_traits<Allocator>::value_type &v) + inline explicit insert_emplace_proxy_arg1(const typename boost::container::allocator_traits<Allocator>::value_type &v) : insert_copy_proxy<Allocator>(v) {} }; @@ -486,7 +486,7 @@ struct insert_emplace_proxy_arg1<Allocator, typename boost::container::allocator { static const bool single_value = true; - BOOST_CONTAINER_FORCEINLINE explicit insert_emplace_proxy_arg1(typename boost::container::allocator_traits<Allocator>::value_type &&v) + inline explicit insert_emplace_proxy_arg1(typename boost::container::allocator_traits<Allocator>::value_type &&v) : insert_move_proxy<Allocator>(v) {} }; @@ -502,7 +502,7 @@ struct insert_emplace_proxy_arg1<Allocator { static const bool single_value = true; - BOOST_CONTAINER_FORCEINLINE explicit insert_emplace_proxy_arg1(const typename boost::container::allocator_traits<Allocator>::value_type &v) + inline explicit insert_emplace_proxy_arg1(const typename boost::container::allocator_traits<Allocator>::value_type &v) : insert_copy_proxy<Allocator>(v) {} }; @@ -513,7 +513,7 @@ struct insert_emplace_proxy_arg1<Allocator, typename boost::container::allocator { static const bool single_value = true; - BOOST_CONTAINER_FORCEINLINE explicit insert_emplace_proxy_arg1(const typename boost::container::allocator_traits<Allocator>::value_type &v) + inline explicit insert_emplace_proxy_arg1(const typename boost::container::allocator_traits<Allocator>::value_type &v) : insert_copy_proxy<Allocator>(v) {} }; @@ -526,7 +526,7 @@ struct insert_emplace_proxy_arg1<Allocator { static const bool single_value = true; - BOOST_CONTAINER_FORCEINLINE explicit insert_emplace_proxy_arg1(const typename boost::container::allocator_traits<Allocator>::value_type &v) + inline explicit insert_emplace_proxy_arg1(const typename boost::container::allocator_traits<Allocator>::value_type &v) : insert_copy_proxy<Allocator>(v) {} }; diff --git a/contrib/restricted/boost/container/include/boost/container/detail/alloc_helpers.hpp b/contrib/restricted/boost/container/include/boost/container/detail/alloc_helpers.hpp index 5ca2ca727d..57c59e46c1 100644 --- a/contrib/restricted/boost/container/include/boost/container/detail/alloc_helpers.hpp +++ b/contrib/restricted/boost/container/include/boost/container/detail/alloc_helpers.hpp @@ -27,30 +27,30 @@ namespace container { namespace dtl { template<class AllocatorType> -BOOST_CONTAINER_FORCEINLINE void swap_alloc(AllocatorType &, AllocatorType &, dtl::false_type) +inline void swap_alloc(AllocatorType &, AllocatorType &, dtl::false_type) BOOST_NOEXCEPT_OR_NOTHROW {} template<class AllocatorType> -BOOST_CONTAINER_FORCEINLINE void swap_alloc(AllocatorType &l, AllocatorType &r, dtl::true_type) +inline void swap_alloc(AllocatorType &l, AllocatorType &r, dtl::true_type) { boost::adl_move_swap(l, r); } template<class AllocatorType> -BOOST_CONTAINER_FORCEINLINE void assign_alloc(AllocatorType &, const AllocatorType &, dtl::false_type) +inline void assign_alloc(AllocatorType &, const AllocatorType &, dtl::false_type) BOOST_NOEXCEPT_OR_NOTHROW {} template<class AllocatorType> -BOOST_CONTAINER_FORCEINLINE void assign_alloc(AllocatorType &l, const AllocatorType &r, dtl::true_type) +inline void assign_alloc(AllocatorType &l, const AllocatorType &r, dtl::true_type) { l = r; } template<class AllocatorType> -BOOST_CONTAINER_FORCEINLINE void move_alloc(AllocatorType &, AllocatorType &, dtl::false_type) +inline void move_alloc(AllocatorType &, AllocatorType &, dtl::false_type) BOOST_NOEXCEPT_OR_NOTHROW {} template<class AllocatorType> -BOOST_CONTAINER_FORCEINLINE void move_alloc(AllocatorType &l, AllocatorType &r, dtl::true_type) +inline void move_alloc(AllocatorType &l, AllocatorType &r, dtl::true_type) { l = ::boost::move(r); } } //namespace dtl { diff --git a/contrib/restricted/boost/container/include/boost/container/detail/allocator_version_traits.hpp b/contrib/restricted/boost/container/include/boost/container/detail/allocator_version_traits.hpp index 391f4666cc..4e83d213b1 100644 --- a/contrib/restricted/boost/container/include/boost/container/detail/allocator_version_traits.hpp +++ b/contrib/restricted/boost/container/include/boost/container/detail/allocator_version_traits.hpp @@ -46,19 +46,19 @@ struct allocator_version_traits typedef typename boost::container::allocator_traits<Allocator>::size_type size_type; //Node allocation interface - BOOST_CONTAINER_FORCEINLINE static pointer allocate_one(Allocator &a) + inline static pointer allocate_one(Allocator &a) { return a.allocate_one(); } - BOOST_CONTAINER_FORCEINLINE static void deallocate_one(Allocator &a, const pointer &p) + inline static void deallocate_one(Allocator &a, const pointer &p) { a.deallocate_one(p); } - BOOST_CONTAINER_FORCEINLINE static void allocate_individual(Allocator &a, size_type n, multiallocation_chain &m) + inline static void allocate_individual(Allocator &a, size_type n, multiallocation_chain &m) { return a.allocate_individual(n, m); } - BOOST_CONTAINER_FORCEINLINE static void deallocate_individual(Allocator &a, multiallocation_chain &holder) + inline static void deallocate_individual(Allocator &a, multiallocation_chain &holder) { a.deallocate_individual(holder); } - BOOST_CONTAINER_FORCEINLINE static pointer allocation_command(Allocator &a, allocation_type command, + inline static pointer allocation_command(Allocator &a, allocation_type command, size_type limit_size, size_type &prefer_in_recvd_out_size, pointer &reuse) { return a.allocation_command(command, limit_size, prefer_in_recvd_out_size, reuse); } }; @@ -82,10 +82,10 @@ struct allocator_version_traits<Allocator, 1> < multialloc_cached_counted, value_type> multiallocation_chain; //Node allocation interface - BOOST_CONTAINER_FORCEINLINE static pointer allocate_one(Allocator &a) + inline static pointer allocate_one(Allocator &a) { return a.allocate(1); } - BOOST_CONTAINER_FORCEINLINE static void deallocate_one(Allocator &a, const pointer &p) + inline static void deallocate_one(Allocator &a, const pointer &p) { a.deallocate(p, 1); } static void deallocate_individual(Allocator &a, multiallocation_chain &holder) @@ -102,17 +102,17 @@ struct allocator_version_traits<Allocator, 1> struct allocate_individual_rollback { - BOOST_CONTAINER_FORCEINLINE allocate_individual_rollback(Allocator &a, multiallocation_chain &chain) + inline allocate_individual_rollback(Allocator &a, multiallocation_chain &chain) : mr_a(a), mp_chain(&chain) {} - BOOST_CONTAINER_FORCEINLINE ~allocate_individual_rollback() + inline ~allocate_individual_rollback() { if(mp_chain) allocator_version_traits::deallocate_individual(mr_a, *mp_chain); } - BOOST_CONTAINER_FORCEINLINE void release() + inline void release() { mp_chain = 0; } diff --git a/contrib/restricted/boost/container/include/boost/container/detail/compare_functors.hpp b/contrib/restricted/boost/container/include/boost/container/detail/compare_functors.hpp index ae4ffcea9d..9a35274024 100644 --- a/contrib/restricted/boost/container/include/boost/container/detail/compare_functors.hpp +++ b/contrib/restricted/boost/container/include/boost/container/detail/compare_functors.hpp @@ -32,11 +32,11 @@ class equal_to_value const value_type &t_; public: - BOOST_CONTAINER_FORCEINLINE explicit equal_to_value(const value_type &t) + inline explicit equal_to_value(const value_type &t) : t_(t) {} - BOOST_CONTAINER_FORCEINLINE bool operator()(const value_type &t)const + inline bool operator()(const value_type &t)const { return t_ == t; } }; @@ -47,39 +47,39 @@ struct value_to_node_compare typedef Pred predicate_type; typedef Node node_type; - BOOST_CONTAINER_FORCEINLINE value_to_node_compare() + inline value_to_node_compare() : Pred() {} - BOOST_CONTAINER_FORCEINLINE explicit value_to_node_compare(Pred pred) + inline explicit value_to_node_compare(Pred pred) : Pred(pred) {} - BOOST_CONTAINER_FORCEINLINE Ret operator()(const Node &a, const Node &b) const + inline Ret operator()(const Node &a, const Node &b) const { return static_cast<const Pred&>(*this)(a.get_data(), b.get_data()); } - BOOST_CONTAINER_FORCEINLINE Ret operator()(const Node &a) const + inline Ret operator()(const Node &a) const { return static_cast<const Pred&>(*this)(a.get_data()); } - BOOST_CONTAINER_FORCEINLINE Ret operator()(const Node &a, const Node &b) + inline Ret operator()(const Node &a, const Node &b) { return static_cast<Pred&>(*this)(a.get_data(), b.get_data()); } - BOOST_CONTAINER_FORCEINLINE Ret operator()(const Node &a) + inline Ret operator()(const Node &a) { return static_cast<Pred&>(*this)(a.get_data()); } - BOOST_CONTAINER_FORCEINLINE predicate_type & predicate() { return static_cast<predicate_type&>(*this); } - BOOST_CONTAINER_FORCEINLINE const predicate_type & predicate() const { return static_cast<predicate_type&>(*this); } + inline predicate_type & predicate() { return static_cast<predicate_type&>(*this); } + inline const predicate_type & predicate() const { return static_cast<predicate_type&>(*this); } }; template<class KeyPred, class KeyOfValue, class Node, class Ret = bool> struct key_node_pred : public boost::intrusive::detail::ebo_functor_holder<KeyPred> { - BOOST_CONTAINER_FORCEINLINE explicit key_node_pred(const KeyPred &comp) + inline explicit key_node_pred(const KeyPred &comp) : base_t(comp) {} - BOOST_CONTAINER_FORCEINLINE explicit key_node_pred() + inline explicit key_node_pred() {} typedef boost::intrusive::detail::ebo_functor_holder<KeyPred> base_t; @@ -88,42 +88,42 @@ struct key_node_pred typedef typename KeyOfValue::type key_type; - BOOST_CONTAINER_FORCEINLINE static const key_type &key_from(const Node &n) + inline static const key_type &key_from(const Node &n) { return key_of_value()(n.get_data()); } template <class T> - BOOST_CONTAINER_FORCEINLINE static const T & + inline static const T & key_from(const T &t) { return t; } - BOOST_CONTAINER_FORCEINLINE const key_predicate &key_pred() const + inline const key_predicate &key_pred() const { return static_cast<const key_predicate &>(*this); } - BOOST_CONTAINER_FORCEINLINE key_predicate &key_pred() + inline key_predicate &key_pred() { return static_cast<key_predicate &>(*this); } - BOOST_CONTAINER_FORCEINLINE Ret operator()(const key_type &key) const + inline Ret operator()(const key_type &key) const { return this->key_pred()(key); } template<class U> - BOOST_CONTAINER_FORCEINLINE Ret operator()(const U &nonkey) const + inline Ret operator()(const U &nonkey) const { return this->key_pred()(this->key_from(nonkey)); } - BOOST_CONTAINER_FORCEINLINE bool operator()(const key_type &key1, const key_type &key2) const + inline bool operator()(const key_type &key1, const key_type &key2) const { return this->key_pred()(key1, key2); } template<class U> - BOOST_CONTAINER_FORCEINLINE bool operator()(const key_type &key1, const U &nonkey2) const + inline bool operator()(const key_type &key1, const U &nonkey2) const { return this->key_pred()(key1, this->key_from(nonkey2)); } template<class U> - BOOST_CONTAINER_FORCEINLINE bool operator()(const U &nonkey1, const key_type &key2) const + inline bool operator()(const U &nonkey1, const key_type &key2) const { return this->key_pred()(this->key_from(nonkey1), key2); } template<class U, class V> - BOOST_CONTAINER_FORCEINLINE bool operator()(const U &nonkey1, const V &nonkey2) const + inline bool operator()(const U &nonkey1, const V &nonkey2) const { return this->key_pred()(this->key_from(nonkey1), this->key_from(nonkey2)); } }; diff --git a/contrib/restricted/boost/container/include/boost/container/detail/copy_move_algo.hpp b/contrib/restricted/boost/container/include/boost/container/detail/copy_move_algo.hpp index 8729b307bb..105faf606d 100644 --- a/contrib/restricted/boost/container/include/boost/container/detail/copy_move_algo.hpp +++ b/contrib/restricted/boost/container/include/boost/container/detail/copy_move_algo.hpp @@ -46,7 +46,12 @@ # endif //GCC 8 seems a bit confused about array access error with static_vector //when out of bound exceptions are being thrown. -# if defined(BOOST_GCC) && (BOOST_GCC >= 80000) && (BOOST_GCC < 80200) +# if defined(BOOST_GCC) && ((BOOST_GCC >= 80000) && (BOOST_GCC < 80200)) +# pragma GCC diagnostic ignored "-Wstringop-overflow" +# endif +//GCC 12 seems a bit confused about array access error with small_vector +# if defined(BOOST_GCC) && ((BOOST_GCC >= 120000) && (BOOST_GCC < 130000)) +# pragma GCC diagnostic ignored "-Wstringop-overread" # pragma GCC diagnostic ignored "-Wstringop-overflow" # endif # pragma GCC diagnostic ignored "-Warray-bounds" @@ -214,7 +219,7 @@ struct disable_if_single_value_proxy template <typename I, // I models InputIterator typename F> // F models ForwardIterator -BOOST_CONTAINER_FORCEINLINE F memmove(I f, I l, F r) BOOST_NOEXCEPT_OR_NOTHROW +inline F memmove(I f, I l, F r) BOOST_NOEXCEPT_OR_NOTHROW { typedef typename boost::container::iter_value<I>::type value_type; typedef typename boost::container::iterator_traits<F>::difference_type r_difference_type; @@ -232,7 +237,7 @@ BOOST_CONTAINER_FORCEINLINE F memmove(I f, I l, F r) BOOST_NOEXCEPT_OR_NOTHROW template <typename I, // I models InputIterator typename F> // F models ForwardIterator -BOOST_CONTAINER_FORCEINLINE F memmove_n(I f, std::size_t n, F r) BOOST_NOEXCEPT_OR_NOTHROW +inline F memmove_n(I f, std::size_t n, F r) BOOST_NOEXCEPT_OR_NOTHROW { typedef typename boost::container::iter_value<I>::type value_type; typedef typename boost::container::iterator_traits<F>::difference_type r_difference_type; @@ -250,7 +255,7 @@ BOOST_CONTAINER_FORCEINLINE F memmove_n(I f, std::size_t n, F r) BOOST_NOEXCEPT_ template <typename I, // I models InputIterator typename F> // F models ForwardIterator -BOOST_CONTAINER_FORCEINLINE I memmove_n_source(I f, std::size_t n, F r) BOOST_NOEXCEPT_OR_NOTHROW +inline I memmove_n_source(I f, std::size_t n, F r) BOOST_NOEXCEPT_OR_NOTHROW { if(BOOST_LIKELY(n != 0)){ typedef typename boost::container::iter_value<I>::type value_type; @@ -267,7 +272,7 @@ BOOST_CONTAINER_FORCEINLINE I memmove_n_source(I f, std::size_t n, F r) BOOST_NO template <typename I, // I models InputIterator typename F> // F models ForwardIterator -BOOST_CONTAINER_FORCEINLINE I memmove_n_source_dest(I f, std::size_t n, F &r) BOOST_NOEXCEPT_OR_NOTHROW +inline I memmove_n_source_dest(I f, std::size_t n, F &r) BOOST_NOEXCEPT_OR_NOTHROW { typedef typename boost::container::iter_value<I>::type value_type; typedef typename boost::container::iterator_traits<F>::difference_type i_difference_type; @@ -367,7 +372,7 @@ template <typename Allocator, typename I, // I models InputIterator typename F> // F models ForwardIterator -BOOST_CONTAINER_FORCEINLINE typename dtl::enable_if_memtransfer_copy_constructible<I, F, F>::type +inline typename dtl::enable_if_memtransfer_copy_constructible<I, F, F>::type uninitialized_move_alloc(Allocator &, I f, I l, F r) BOOST_NOEXCEPT_OR_NOTHROW { return dtl::memmove(f, l, r); } @@ -413,7 +418,7 @@ template <typename Allocator, typename I, // I models InputIterator typename F> // F models ForwardIterator -BOOST_CONTAINER_FORCEINLINE typename dtl::enable_if_memtransfer_copy_constructible<I, F, F>::type +inline typename dtl::enable_if_memtransfer_copy_constructible<I, F, F>::type uninitialized_move_alloc_n(Allocator &, I f, std::size_t n, F r) BOOST_NOEXCEPT_OR_NOTHROW { return dtl::memmove_n(f, n, r); } @@ -459,7 +464,7 @@ template <typename Allocator, typename I, // I models InputIterator typename F> // F models ForwardIterator -BOOST_CONTAINER_FORCEINLINE typename dtl::enable_if_memtransfer_copy_constructible<I, F, I>::type +inline typename dtl::enable_if_memtransfer_copy_constructible<I, F, I>::type uninitialized_move_alloc_n_source(Allocator &, I f, std::size_t n, F r) BOOST_NOEXCEPT_OR_NOTHROW { return dtl::memmove_n_source(f, n, r); } @@ -504,7 +509,7 @@ template <typename Allocator, typename I, // I models InputIterator typename F> // F models ForwardIterator -BOOST_CONTAINER_FORCEINLINE typename dtl::enable_if_memtransfer_copy_constructible<I, F, F>::type +inline typename dtl::enable_if_memtransfer_copy_constructible<I, F, F>::type uninitialized_copy_alloc(Allocator &, I f, I l, F r) BOOST_NOEXCEPT_OR_NOTHROW { return dtl::memmove(f, l, r); } @@ -550,7 +555,7 @@ template <typename Allocator, typename I, // I models InputIterator typename F> // F models ForwardIterator -BOOST_CONTAINER_FORCEINLINE typename dtl::enable_if_memtransfer_copy_constructible<I, F, F>::type +inline typename dtl::enable_if_memtransfer_copy_constructible<I, F, F>::type uninitialized_copy_alloc_n(Allocator &, I f, std::size_t n, F r) BOOST_NOEXCEPT_OR_NOTHROW { return dtl::memmove_n(f, n, r); } @@ -595,7 +600,7 @@ template <typename Allocator, typename I, // I models InputIterator typename F> // F models ForwardIterator -BOOST_CONTAINER_FORCEINLINE typename dtl::enable_if_memtransfer_copy_constructible<I, F, I>::type +inline typename dtl::enable_if_memtransfer_copy_constructible<I, F, I>::type uninitialized_copy_alloc_n_source(Allocator &, I f, std::size_t n, F r) BOOST_NOEXCEPT_OR_NOTHROW { return dtl::memmove_n_source(f, n, r); } @@ -639,7 +644,7 @@ inline typename dtl::disable_if_memzero_initializable<F, F>::type template <typename Allocator, typename F> // F models ForwardIterator -BOOST_CONTAINER_FORCEINLINE typename dtl::enable_if_memzero_initializable<F, F>::type +inline typename dtl::enable_if_memzero_initializable<F, F>::type uninitialized_value_init_alloc_n(Allocator &, std::size_t n, F r) { typedef typename boost::container::iterator_traits<F>::value_type value_type; @@ -812,7 +817,7 @@ template <typename I, // I models InputIterator typename U, // U models unsigned integral constant typename F> // F models ForwardIterator -BOOST_CONTAINER_FORCEINLINE typename dtl::enable_if_memtransfer_copy_assignable<I, F, F>::type +inline typename dtl::enable_if_memtransfer_copy_assignable<I, F, F>::type copy_n(I f, U n, F r) BOOST_NOEXCEPT_OR_NOTHROW { return dtl::memmove_n(f, n, r); } @@ -840,7 +845,7 @@ inline typename dtl::disable_if_memtransfer_copy_assignable<I, F, I>::type template <typename I, // I models InputIterator typename F> // F models ForwardIterator -BOOST_CONTAINER_FORCEINLINE typename dtl::enable_if_memtransfer_copy_assignable<I, F, I>::type +inline typename dtl::enable_if_memtransfer_copy_assignable<I, F, I>::type copy_n_source(I f, std::size_t n, F r) BOOST_NOEXCEPT_OR_NOTHROW { return dtl::memmove_n_source(f, n, r); } @@ -867,7 +872,7 @@ inline typename dtl::disable_if_memtransfer_copy_assignable<I, F, I>::type template <typename I, // I models InputIterator typename F> // F models ForwardIterator -BOOST_CONTAINER_FORCEINLINE typename dtl::enable_if_memtransfer_copy_assignable<I, F, I>::type +inline typename dtl::enable_if_memtransfer_copy_assignable<I, F, I>::type copy_n_source_dest(I f, std::size_t n, F &r) BOOST_NOEXCEPT_OR_NOTHROW { return dtl::memmove_n_source_dest(f, n, r); } @@ -922,7 +927,7 @@ template <typename I, // I models InputIterator typename U, // U models unsigned integral constant typename F> // F models ForwardIterator -BOOST_CONTAINER_FORCEINLINE typename dtl::enable_if_memtransfer_copy_assignable<I, F, F>::type +inline typename dtl::enable_if_memtransfer_copy_assignable<I, F, F>::type move_n(I f, U n, F r) BOOST_NOEXCEPT_OR_NOTHROW { return dtl::memmove_n(f, n, r); } @@ -949,7 +954,7 @@ inline typename dtl::disable_if_memtransfer_copy_assignable<I, F, F>::type template <typename I, // I models InputIterator typename F> // F models ForwardIterator -BOOST_CONTAINER_FORCEINLINE typename dtl::enable_if_memtransfer_copy_assignable<I, F, F>::type +inline typename dtl::enable_if_memtransfer_copy_assignable<I, F, F>::type move_backward(I f, I l, F r) BOOST_NOEXCEPT_OR_NOTHROW { typedef typename boost::container::iter_value<I>::type value_type; @@ -985,7 +990,7 @@ inline typename dtl::disable_if_memtransfer_copy_assignable<I, F, I>::type template <typename I // I models InputIterator ,typename F> // F models ForwardIterator -BOOST_CONTAINER_FORCEINLINE typename dtl::enable_if_memtransfer_copy_assignable<I, F, I>::type +inline typename dtl::enable_if_memtransfer_copy_assignable<I, F, I>::type move_n_source_dest(I f, std::size_t n, F &r) BOOST_NOEXCEPT_OR_NOTHROW { return dtl::memmove_n_source_dest(f, n, r); } @@ -1013,18 +1018,18 @@ inline typename dtl::disable_if_memtransfer_copy_assignable<I, F, I>::type template <typename I // I models InputIterator ,typename F> // F models ForwardIterator -BOOST_CONTAINER_FORCEINLINE typename dtl::enable_if_memtransfer_copy_assignable<I, F, I>::type +inline typename dtl::enable_if_memtransfer_copy_assignable<I, F, I>::type move_n_source(I f, std::size_t n, F r) BOOST_NOEXCEPT_OR_NOTHROW { return dtl::memmove_n_source(f, n, r); } template<typename F> // F models ForwardIterator -BOOST_CONTAINER_FORCEINLINE F move_forward_overlapping(F f, F l, F r) +inline F move_forward_overlapping(F f, F l, F r) { return (f != r) ? (move)(f, l, r) : l; } template<typename B> // B models BidirIterator -BOOST_CONTAINER_FORCEINLINE B move_backward_overlapping(B f, B l, B rl) +inline B move_backward_overlapping(B f, B l, B rl) { return (l != rl) ? (move_backward)(f, l, rl) : f; } @@ -1054,7 +1059,7 @@ template <typename Allocator ,typename I // I models InputIterator ,typename U> // U models unsigned integral constant -BOOST_CONTAINER_FORCEINLINE typename dtl::enable_if_trivially_destructible<I, void>::type +inline typename dtl::enable_if_trivially_destructible<I, void>::type destroy_alloc_n(Allocator &, I, U) {} @@ -1079,7 +1084,7 @@ inline typename dtl::disable_if_trivially_destructible<I, void>::type template <typename Allocator ,typename I > // I models InputIterator -BOOST_CONTAINER_FORCEINLINE typename dtl::enable_if_trivially_destructible<I, void>::type +inline typename dtl::enable_if_trivially_destructible<I, void>::type destroy_alloc(Allocator &, I, I) {} @@ -1458,7 +1463,7 @@ template , typename F // F models ForwardIterator , typename InsertionProxy > -BOOST_CONTAINER_FORCEINLINE void expand_forward_and_insert_alloc +inline void expand_forward_and_insert_alloc ( Allocator& a , F pos , F last @@ -1780,7 +1785,7 @@ template , typename B // B models BidirIterator , typename InsertionProxy > -BOOST_CONTAINER_FORCEINLINE void expand_backward_forward_and_insert_alloc_move_forward +inline void expand_backward_forward_and_insert_alloc_move_forward ( B const old_start , std::size_t const old_size , B const new_start diff --git a/contrib/restricted/boost/container/include/boost/container/detail/destroyers.hpp b/contrib/restricted/boost/container/include/boost/container/detail/destroyers.hpp index f00ac6d6ed..38ff874344 100644 --- a/contrib/restricted/boost/container/include/boost/container/detail/destroyers.hpp +++ b/contrib/restricted/boost/container/include/boost/container/detail/destroyers.hpp @@ -180,23 +180,23 @@ struct scoped_destructor_n typedef Ptr pointer; typedef typename AllocTraits::value_type value_type; - BOOST_CONTAINER_FORCEINLINE scoped_destructor_n(Ptr p, Allocator& a, std::size_t n) + inline scoped_destructor_n(Ptr p, Allocator& a, std::size_t n) : m_p(p), m_n(n), m_a(a) {} - BOOST_CONTAINER_FORCEINLINE void release() + inline void release() { m_p = Ptr(); m_n = 0; } - BOOST_CONTAINER_FORCEINLINE void increment_size(std::size_t inc) + inline void increment_size(std::size_t inc) { m_n += inc; } - BOOST_CONTAINER_FORCEINLINE void increment_size_backwards(std::size_t inc) + inline void increment_size_backwards(std::size_t inc) { m_n += inc; m_p -= std::ptrdiff_t(inc); } - BOOST_CONTAINER_FORCEINLINE void shrink_forward(std::size_t inc) + inline void shrink_forward(std::size_t inc) { m_n -= inc; m_p += std::ptrdiff_t(inc); } - BOOST_CONTAINER_FORCEINLINE void set_size(std::size_t sz) + inline void set_size(std::size_t sz) { m_n = sz; } ~scoped_destructor_n() @@ -225,22 +225,22 @@ struct null_scoped_destructor_n typedef boost::container::allocator_traits<Allocator> AllocTraits; typedef Ptr pointer; - BOOST_CONTAINER_FORCEINLINE null_scoped_destructor_n(Ptr, Allocator&, std::size_t) + inline null_scoped_destructor_n(Ptr, Allocator&, std::size_t) {} - BOOST_CONTAINER_FORCEINLINE void increment_size(std::size_t) + inline void increment_size(std::size_t) {} - BOOST_CONTAINER_FORCEINLINE void increment_size_backwards(std::size_t) + inline void increment_size_backwards(std::size_t) {} - BOOST_CONTAINER_FORCEINLINE void set_size(std::size_t ) + inline void set_size(std::size_t ) {} - BOOST_CONTAINER_FORCEINLINE void shrink_forward(std::size_t) + inline void shrink_forward(std::size_t) {} - BOOST_CONTAINER_FORCEINLINE void release() + inline void release() {} }; @@ -254,20 +254,20 @@ struct scoped_destructor_range typedef typename AllocTraits::pointer pointer; typedef typename AllocTraits::value_type value_type; - BOOST_CONTAINER_FORCEINLINE scoped_destructor_range(pointer p, pointer e, Allocator& a) + inline scoped_destructor_range(pointer p, pointer e, Allocator& a) : m_p(p), m_e(e), m_a(a) {} - BOOST_CONTAINER_FORCEINLINE void release() + inline void release() { m_p = pointer(); m_e = pointer(); } - BOOST_CONTAINER_FORCEINLINE void set_end(pointer e) + inline void set_end(pointer e) { m_e = e; } - BOOST_CONTAINER_FORCEINLINE void set_begin(pointer b) + inline void set_begin(pointer b) { m_p = b; } - BOOST_CONTAINER_FORCEINLINE void set_range(pointer b, pointer e) + inline void set_range(pointer b, pointer e) { m_p = b; m_e = e; } ~scoped_destructor_range() @@ -293,19 +293,19 @@ struct null_scoped_destructor_range typedef boost::container::allocator_traits<Allocator> AllocTraits; typedef typename AllocTraits::pointer pointer; - BOOST_CONTAINER_FORCEINLINE null_scoped_destructor_range(pointer, pointer, Allocator&) + inline null_scoped_destructor_range(pointer, pointer, Allocator&) {} - BOOST_CONTAINER_FORCEINLINE void release() + inline void release() {} - BOOST_CONTAINER_FORCEINLINE void set_end(pointer) + inline void set_end(pointer) {} - BOOST_CONTAINER_FORCEINLINE void set_begin(pointer) + inline void set_begin(pointer) {} - BOOST_CONTAINER_FORCEINLINE void set_range(pointer, pointer) + inline void set_range(pointer, pointer) {} }; @@ -316,24 +316,24 @@ class scoped_destructor typedef boost::container::allocator_traits<Allocator> AllocTraits; public: typedef typename Allocator::value_type value_type; - BOOST_CONTAINER_FORCEINLINE scoped_destructor(Allocator &a, value_type *pv) + inline scoped_destructor(Allocator &a, value_type *pv) : pv_(pv), a_(a) {} - BOOST_CONTAINER_FORCEINLINE ~scoped_destructor() + inline ~scoped_destructor() { if(pv_){ AllocTraits::destroy(a_, pv_); } } - BOOST_CONTAINER_FORCEINLINE void release() + inline void release() { pv_ = 0; } - BOOST_CONTAINER_FORCEINLINE void set(value_type *ptr) { pv_ = ptr; } + inline void set(value_type *ptr) { pv_ = ptr; } - BOOST_CONTAINER_FORCEINLINE value_type *get() const { return pv_; } + inline value_type *get() const { return pv_; } private: value_type *pv_; @@ -346,18 +346,18 @@ class null_scoped_destructor typedef boost::container::allocator_traits<Allocator> AllocTraits; public: typedef typename Allocator::value_type value_type; - BOOST_CONTAINER_FORCEINLINE null_scoped_destructor(Allocator &, value_type *) + inline null_scoped_destructor(Allocator &, value_type *) {} - BOOST_CONTAINER_FORCEINLINE ~null_scoped_destructor() + inline ~null_scoped_destructor() {} - BOOST_CONTAINER_FORCEINLINE void release() + inline void release() {} - BOOST_CONTAINER_FORCEINLINE void set(value_type *) { } + inline void set(value_type *) { } - BOOST_CONTAINER_FORCEINLINE value_type *get() const { return 0; } + inline value_type *get() const { return 0; } }; @@ -368,11 +368,11 @@ class value_destructor typedef boost::container::allocator_traits<Allocator> AllocTraits; public: typedef Value value_type; - BOOST_CONTAINER_FORCEINLINE value_destructor(Allocator &a, value_type &rv) + inline value_destructor(Allocator &a, value_type &rv) : rv_(rv), a_(a) {} - BOOST_CONTAINER_FORCEINLINE ~value_destructor() + inline ~value_destructor() { AllocTraits::destroy(a_, &rv_); } @@ -396,18 +396,18 @@ class allocator_node_destroyer Allocator & a_; private: - BOOST_CONTAINER_FORCEINLINE void priv_deallocate(const pointer &p, version_1) + inline void priv_deallocate(const pointer &p, version_1) { AllocTraits::deallocate(a_,p, 1); } - BOOST_CONTAINER_FORCEINLINE void priv_deallocate(const pointer &p, version_2) + inline void priv_deallocate(const pointer &p, version_2) { a_.deallocate_one(p); } public: - BOOST_CONTAINER_FORCEINLINE explicit allocator_node_destroyer(Allocator &a) + inline explicit allocator_node_destroyer(Allocator &a) : a_(a) {} - BOOST_CONTAINER_FORCEINLINE void operator()(const pointer &p) + inline void operator()(const pointer &p) { boost::movelib::to_raw_pointer(p)->destructor(a_); this->priv_deallocate(p, alloc_version()); @@ -420,24 +420,24 @@ class scoped_node_destructor typedef boost::container::allocator_traits<Allocator> AllocTraits; public: typedef typename Allocator::value_type value_type; - BOOST_CONTAINER_FORCEINLINE scoped_node_destructor(Allocator &a, value_type *pv) + inline scoped_node_destructor(Allocator &a, value_type *pv) : pv_(pv), a_(a) {} - BOOST_CONTAINER_FORCEINLINE ~scoped_node_destructor() + inline ~scoped_node_destructor() { if(pv_){ pv_->destructor(a_); } } - BOOST_CONTAINER_FORCEINLINE void release() + inline void release() { pv_ = 0; } - BOOST_CONTAINER_FORCEINLINE void set(value_type *ptr) { pv_ = ptr; } + inline void set(value_type *ptr) { pv_ = ptr; } - BOOST_CONTAINER_FORCEINLINE value_type *get() const { return pv_; } + inline value_type *get() const { return pv_; } private: value_type *pv_; @@ -457,11 +457,11 @@ class allocator_node_destroyer_and_chain_builder multiallocation_chain &c_; public: - BOOST_CONTAINER_FORCEINLINE allocator_node_destroyer_and_chain_builder(Allocator &a, multiallocation_chain &c) + inline allocator_node_destroyer_and_chain_builder(Allocator &a, multiallocation_chain &c) : a_(a), c_(c) {} - BOOST_CONTAINER_FORCEINLINE void operator()(const typename Allocator::pointer &p) + inline void operator()(const typename Allocator::pointer &p) { boost::movelib::to_raw_pointer(p)->destructor(a_); c_.push_back(p); @@ -480,14 +480,14 @@ class allocator_multialloc_chain_node_deallocator multiallocation_chain c_; public: - BOOST_CONTAINER_FORCEINLINE allocator_multialloc_chain_node_deallocator(Allocator &a) + inline allocator_multialloc_chain_node_deallocator(Allocator &a) : a_(a), c_() {} - BOOST_CONTAINER_FORCEINLINE chain_builder get_chain_builder() + inline chain_builder get_chain_builder() { return chain_builder(a_, c_); } - BOOST_CONTAINER_FORCEINLINE ~allocator_multialloc_chain_node_deallocator() + inline ~allocator_multialloc_chain_node_deallocator() { a_.deallocate_individual(c_); } diff --git a/contrib/restricted/boost/container/include/boost/container/detail/dispatch_uses_allocator.hpp b/contrib/restricted/boost/container/include/boost/container/detail/dispatch_uses_allocator.hpp index 42fd4f4fd7..5bb7687d5a 100644 --- a/contrib/restricted/boost/container/include/boost/container/detail/dispatch_uses_allocator.hpp +++ b/contrib/restricted/boost/container/include/boost/container/detail/dispatch_uses_allocator.hpp @@ -110,7 +110,7 @@ template < typename ConstructAlloc , typename T , class ...Args > -BOOST_CONTAINER_FORCEINLINE typename dtl::enable_if_and +inline typename dtl::enable_if_and < void , dtl::is_not_pair<T> , dtl::not_< uses_allocator<T, typename remove_cvref<ArgAlloc>::type > > @@ -127,7 +127,7 @@ template < typename ConstructAlloc , typename T , class ...Args > -BOOST_CONTAINER_FORCEINLINE typename dtl::enable_if_and +inline typename dtl::enable_if_and < void , dtl::is_not_pair<T> , uses_allocator<T, typename remove_cvref<ArgAlloc>::type> @@ -146,7 +146,7 @@ template < typename ConstructAlloc , typename T , class ...Args > -BOOST_CONTAINER_FORCEINLINE typename dtl::enable_if_and +inline typename dtl::enable_if_and < void , dtl::is_not_pair<T> , uses_allocator<T, typename remove_cvref<ArgAlloc>::type> @@ -162,7 +162,7 @@ BOOST_CONTAINER_FORCEINLINE typename dtl::enable_if_and #define BOOST_CONTAINER_SCOPED_ALLOCATOR_DISPATCH_USES_ALLOCATOR_CODE(N) \ template <typename ConstructAlloc, typename ArgAlloc, typename T BOOST_MOVE_I##N BOOST_MOVE_CLASS##N >\ - BOOST_CONTAINER_FORCEINLINE typename dtl::enable_if_and\ + inline typename dtl::enable_if_and\ < void\ , dtl::is_not_pair<T>\ , dtl::not_<uses_allocator<T, typename remove_cvref<ArgAlloc>::type> >\ @@ -179,7 +179,7 @@ BOOST_MOVE_ITERATE_0TO9(BOOST_CONTAINER_SCOPED_ALLOCATOR_DISPATCH_USES_ALLOCATOR #define BOOST_CONTAINER_SCOPED_ALLOCATOR_DISPATCH_USES_ALLOCATOR_CODE(N) \ template < typename ConstructAlloc, typename ArgAlloc, typename T BOOST_MOVE_I##N BOOST_MOVE_CLASS##N >\ - BOOST_CONTAINER_FORCEINLINE typename dtl::enable_if_and\ + inline typename dtl::enable_if_and\ < void\ , dtl::is_not_pair<T>\ , uses_allocator<T, typename remove_cvref<ArgAlloc>::type>\ @@ -197,7 +197,7 @@ BOOST_MOVE_ITERATE_0TO9(BOOST_CONTAINER_SCOPED_ALLOCATOR_DISPATCH_USES_ALLOCATOR #define BOOST_CONTAINER_SCOPED_ALLOCATOR_DISPATCH_USES_ALLOCATOR_CODE(N) \ template < typename ConstructAlloc, typename ArgAlloc, typename T BOOST_MOVE_I##N BOOST_MOVE_CLASS##N >\ - BOOST_CONTAINER_FORCEINLINE typename dtl::enable_if_and\ + inline typename dtl::enable_if_and\ < void\ , dtl::is_not_pair<T>\ , uses_allocator<T, typename remove_cvref<ArgAlloc>::type>\ diff --git a/contrib/restricted/boost/container/include/boost/container/detail/iterators.hpp b/contrib/restricted/boost/container/include/boost/container/detail/iterators.hpp index c503916a96..57ffb0ced4 100644 --- a/contrib/restricted/boost/container/include/boost/container/detail/iterators.hpp +++ b/contrib/restricted/boost/container/include/boost/container/detail/iterators.hpp @@ -27,7 +27,6 @@ #include <boost/container/allocator_traits.hpp> #include <boost/container/detail/type_traits.hpp> #include <boost/container/detail/value_init.hpp> -#include <boost/static_assert.hpp> #include <boost/move/utility_core.hpp> #include <boost/intrusive/detail/reverse_iterator.hpp> @@ -49,125 +48,125 @@ class constant_iterator typedef constant_iterator<T> this_type; public: - BOOST_CONTAINER_FORCEINLINE explicit constant_iterator(const T &ref, std::size_t range_size) + inline explicit constant_iterator(const T &ref, std::size_t range_size) : m_ptr(&ref), m_num(range_size){} //Constructors - BOOST_CONTAINER_FORCEINLINE constant_iterator() + inline constant_iterator() : m_ptr(0), m_num(0){} - BOOST_CONTAINER_FORCEINLINE constant_iterator& operator++() + inline constant_iterator& operator++() { increment(); return *this; } - BOOST_CONTAINER_FORCEINLINE constant_iterator operator++(int) + inline constant_iterator operator++(int) { constant_iterator result (*this); increment(); return result; } - BOOST_CONTAINER_FORCEINLINE constant_iterator& operator--() + inline constant_iterator& operator--() { decrement(); return *this; } - BOOST_CONTAINER_FORCEINLINE constant_iterator operator--(int) + inline constant_iterator operator--(int) { constant_iterator result (*this); decrement(); return result; } - BOOST_CONTAINER_FORCEINLINE friend bool operator== (const constant_iterator& i, const constant_iterator& i2) + inline friend bool operator== (const constant_iterator& i, const constant_iterator& i2) { return i.equal(i2); } - BOOST_CONTAINER_FORCEINLINE friend bool operator!= (const constant_iterator& i, const constant_iterator& i2) + inline friend bool operator!= (const constant_iterator& i, const constant_iterator& i2) { return !(i == i2); } - BOOST_CONTAINER_FORCEINLINE friend bool operator< (const constant_iterator& i, const constant_iterator& i2) + inline friend bool operator< (const constant_iterator& i, const constant_iterator& i2) { return i.less(i2); } - BOOST_CONTAINER_FORCEINLINE friend bool operator> (const constant_iterator& i, const constant_iterator& i2) + inline friend bool operator> (const constant_iterator& i, const constant_iterator& i2) { return i2 < i; } - BOOST_CONTAINER_FORCEINLINE friend bool operator<= (const constant_iterator& i, const constant_iterator& i2) + inline friend bool operator<= (const constant_iterator& i, const constant_iterator& i2) { return !(i > i2); } - BOOST_CONTAINER_FORCEINLINE friend bool operator>= (const constant_iterator& i, const constant_iterator& i2) + inline friend bool operator>= (const constant_iterator& i, const constant_iterator& i2) { return !(i < i2); } - BOOST_CONTAINER_FORCEINLINE friend std::ptrdiff_t operator- (const constant_iterator& i, const constant_iterator& i2) + inline friend std::ptrdiff_t operator- (const constant_iterator& i, const constant_iterator& i2) { return i2.distance_to(i); } //Arithmetic signed - BOOST_CONTAINER_FORCEINLINE constant_iterator& operator+=(std::ptrdiff_t off) + inline constant_iterator& operator+=(std::ptrdiff_t off) { this->advance(off); return *this; } - BOOST_CONTAINER_FORCEINLINE constant_iterator operator+(std::ptrdiff_t off) const + inline constant_iterator operator+(std::ptrdiff_t off) const { constant_iterator other(*this); other.advance(off); return other; } - BOOST_CONTAINER_FORCEINLINE friend constant_iterator operator+(std::ptrdiff_t off, const constant_iterator& right) + inline friend constant_iterator operator+(std::ptrdiff_t off, const constant_iterator& right) { return right + off; } - BOOST_CONTAINER_FORCEINLINE constant_iterator& operator-=(std::ptrdiff_t off) + inline constant_iterator& operator-=(std::ptrdiff_t off) { this->advance(-off); return *this; } - BOOST_CONTAINER_FORCEINLINE constant_iterator operator-(std::ptrdiff_t off) const + inline constant_iterator operator-(std::ptrdiff_t off) const { return *this + (-off); } - BOOST_CONTAINER_FORCEINLINE const T& operator[] (std::ptrdiff_t ) const + inline const T& operator[] (std::ptrdiff_t ) const { return dereference(); } - BOOST_CONTAINER_FORCEINLINE const T& operator*() const + inline const T& operator*() const { return dereference(); } - BOOST_CONTAINER_FORCEINLINE const T* operator->() const + inline const T* operator->() const { return &(dereference()); } //Arithmetic unsigned - BOOST_CONTAINER_FORCEINLINE constant_iterator& operator+=(std::size_t off) + inline constant_iterator& operator+=(std::size_t off) { return *this += std::ptrdiff_t(off); } - BOOST_CONTAINER_FORCEINLINE constant_iterator operator+(std::size_t off) const + inline constant_iterator operator+(std::size_t off) const { return *this + std::ptrdiff_t(off); } - BOOST_CONTAINER_FORCEINLINE friend constant_iterator operator+(std::size_t off, const constant_iterator& right) + inline friend constant_iterator operator+(std::size_t off, const constant_iterator& right) { return std::ptrdiff_t(off) + right; } - BOOST_CONTAINER_FORCEINLINE constant_iterator& operator-=(std::size_t off) + inline constant_iterator& operator-=(std::size_t off) { return *this -= std::ptrdiff_t(off); } - BOOST_CONTAINER_FORCEINLINE constant_iterator operator-(std::size_t off) const + inline constant_iterator operator-(std::size_t off) const { return *this - std::ptrdiff_t(off); } - BOOST_CONTAINER_FORCEINLINE const T& operator[] (std::size_t off) const + inline const T& operator[] (std::size_t off) const { return (*this)[std::ptrdiff_t(off)]; } private: const T * m_ptr; std::size_t m_num; - BOOST_CONTAINER_FORCEINLINE void increment() + inline void increment() { --m_num; } - BOOST_CONTAINER_FORCEINLINE void decrement() + inline void decrement() { ++m_num; } - BOOST_CONTAINER_FORCEINLINE bool equal(const this_type &other) const + inline bool equal(const this_type &other) const { return m_num == other.m_num; } - BOOST_CONTAINER_FORCEINLINE bool less(const this_type &other) const + inline bool less(const this_type &other) const { return other.m_num < m_num; } - BOOST_CONTAINER_FORCEINLINE const T & dereference() const + inline const T & dereference() const { return *m_ptr; } - BOOST_CONTAINER_FORCEINLINE void advance(std::ptrdiff_t n) + inline void advance(std::ptrdiff_t n) { m_num = std::size_t(std::ptrdiff_t(m_num) - n); } - BOOST_CONTAINER_FORCEINLINE std::ptrdiff_t distance_to(const this_type &other)const + inline std::ptrdiff_t distance_to(const this_type &other)const { return std::ptrdiff_t(m_num - other.m_num); } }; @@ -179,72 +178,72 @@ class value_init_construct_iterator typedef value_init_construct_iterator<T> this_type; public: - BOOST_CONTAINER_FORCEINLINE explicit value_init_construct_iterator(std::size_t range_size) + inline explicit value_init_construct_iterator(std::size_t range_size) : m_num(range_size){} //Constructors - BOOST_CONTAINER_FORCEINLINE value_init_construct_iterator() + inline value_init_construct_iterator() : m_num(0){} - BOOST_CONTAINER_FORCEINLINE value_init_construct_iterator& operator++() + inline value_init_construct_iterator& operator++() { increment(); return *this; } - BOOST_CONTAINER_FORCEINLINE value_init_construct_iterator operator++(int) + inline value_init_construct_iterator operator++(int) { value_init_construct_iterator result (*this); increment(); return result; } - BOOST_CONTAINER_FORCEINLINE value_init_construct_iterator& operator--() + inline value_init_construct_iterator& operator--() { decrement(); return *this; } - BOOST_CONTAINER_FORCEINLINE value_init_construct_iterator operator--(int) + inline value_init_construct_iterator operator--(int) { value_init_construct_iterator result (*this); decrement(); return result; } - BOOST_CONTAINER_FORCEINLINE friend bool operator== (const value_init_construct_iterator& i, const value_init_construct_iterator& i2) + inline friend bool operator== (const value_init_construct_iterator& i, const value_init_construct_iterator& i2) { return i.equal(i2); } - BOOST_CONTAINER_FORCEINLINE friend bool operator!= (const value_init_construct_iterator& i, const value_init_construct_iterator& i2) + inline friend bool operator!= (const value_init_construct_iterator& i, const value_init_construct_iterator& i2) { return !(i == i2); } - BOOST_CONTAINER_FORCEINLINE friend bool operator< (const value_init_construct_iterator& i, const value_init_construct_iterator& i2) + inline friend bool operator< (const value_init_construct_iterator& i, const value_init_construct_iterator& i2) { return i.less(i2); } - BOOST_CONTAINER_FORCEINLINE friend bool operator> (const value_init_construct_iterator& i, const value_init_construct_iterator& i2) + inline friend bool operator> (const value_init_construct_iterator& i, const value_init_construct_iterator& i2) { return i2 < i; } - BOOST_CONTAINER_FORCEINLINE friend bool operator<= (const value_init_construct_iterator& i, const value_init_construct_iterator& i2) + inline friend bool operator<= (const value_init_construct_iterator& i, const value_init_construct_iterator& i2) { return !(i > i2); } - BOOST_CONTAINER_FORCEINLINE friend bool operator>= (const value_init_construct_iterator& i, const value_init_construct_iterator& i2) + inline friend bool operator>= (const value_init_construct_iterator& i, const value_init_construct_iterator& i2) { return !(i < i2); } - BOOST_CONTAINER_FORCEINLINE friend std::ptrdiff_t operator- (const value_init_construct_iterator& i, const value_init_construct_iterator& i2) + inline friend std::ptrdiff_t operator- (const value_init_construct_iterator& i, const value_init_construct_iterator& i2) { return i2.distance_to(i); } //Arithmetic - BOOST_CONTAINER_FORCEINLINE value_init_construct_iterator& operator+=(std::ptrdiff_t off) + inline value_init_construct_iterator& operator+=(std::ptrdiff_t off) { this->advance(off); return *this; } - BOOST_CONTAINER_FORCEINLINE value_init_construct_iterator operator+(std::ptrdiff_t off) const + inline value_init_construct_iterator operator+(std::ptrdiff_t off) const { value_init_construct_iterator other(*this); other.advance(off); return other; } - BOOST_CONTAINER_FORCEINLINE friend value_init_construct_iterator operator+(std::ptrdiff_t off, const value_init_construct_iterator& right) + inline friend value_init_construct_iterator operator+(std::ptrdiff_t off, const value_init_construct_iterator& right) { return right + off; } - BOOST_CONTAINER_FORCEINLINE value_init_construct_iterator& operator-=(std::ptrdiff_t off) + inline value_init_construct_iterator& operator-=(std::ptrdiff_t off) { this->advance(-off); return *this; } - BOOST_CONTAINER_FORCEINLINE value_init_construct_iterator operator-(std::ptrdiff_t off) const + inline value_init_construct_iterator operator-(std::ptrdiff_t off) const { return *this + (-off); } //This pseudo-iterator's dereference operations have no sense since value is not @@ -257,28 +256,28 @@ class value_init_construct_iterator private: std::size_t m_num; - BOOST_CONTAINER_FORCEINLINE void increment() + inline void increment() { --m_num; } - BOOST_CONTAINER_FORCEINLINE void decrement() + inline void decrement() { ++m_num; } - BOOST_CONTAINER_FORCEINLINE bool equal(const this_type &other) const + inline bool equal(const this_type &other) const { return m_num == other.m_num; } - BOOST_CONTAINER_FORCEINLINE bool less(const this_type &other) const + inline bool less(const this_type &other) const { return other.m_num < m_num; } - BOOST_CONTAINER_FORCEINLINE const T & dereference() const + inline const T & dereference() const { static T dummy; return dummy; } - BOOST_CONTAINER_FORCEINLINE void advance(std::ptrdiff_t n) + inline void advance(std::ptrdiff_t n) { m_num = std::size_t(std::ptrdiff_t(m_num) - n); } - BOOST_CONTAINER_FORCEINLINE std::ptrdiff_t distance_to(const this_type &other)const + inline std::ptrdiff_t distance_to(const this_type &other)const { return std::ptrdiff_t(m_num - other.m_num); } }; @@ -290,72 +289,72 @@ class default_init_construct_iterator typedef default_init_construct_iterator<T> this_type; public: - BOOST_CONTAINER_FORCEINLINE explicit default_init_construct_iterator(std::size_t range_size) + inline explicit default_init_construct_iterator(std::size_t range_size) : m_num(range_size){} //Constructors - BOOST_CONTAINER_FORCEINLINE default_init_construct_iterator() + inline default_init_construct_iterator() : m_num(0){} - BOOST_CONTAINER_FORCEINLINE default_init_construct_iterator& operator++() + inline default_init_construct_iterator& operator++() { increment(); return *this; } - BOOST_CONTAINER_FORCEINLINE default_init_construct_iterator operator++(int) + inline default_init_construct_iterator operator++(int) { default_init_construct_iterator result (*this); increment(); return result; } - BOOST_CONTAINER_FORCEINLINE default_init_construct_iterator& operator--() + inline default_init_construct_iterator& operator--() { decrement(); return *this; } - BOOST_CONTAINER_FORCEINLINE default_init_construct_iterator operator--(int) + inline default_init_construct_iterator operator--(int) { default_init_construct_iterator result (*this); decrement(); return result; } - BOOST_CONTAINER_FORCEINLINE friend bool operator== (const default_init_construct_iterator& i, const default_init_construct_iterator& i2) + inline friend bool operator== (const default_init_construct_iterator& i, const default_init_construct_iterator& i2) { return i.equal(i2); } - BOOST_CONTAINER_FORCEINLINE friend bool operator!= (const default_init_construct_iterator& i, const default_init_construct_iterator& i2) + inline friend bool operator!= (const default_init_construct_iterator& i, const default_init_construct_iterator& i2) { return !(i == i2); } - BOOST_CONTAINER_FORCEINLINE friend bool operator< (const default_init_construct_iterator& i, const default_init_construct_iterator& i2) + inline friend bool operator< (const default_init_construct_iterator& i, const default_init_construct_iterator& i2) { return i.less(i2); } - BOOST_CONTAINER_FORCEINLINE friend bool operator> (const default_init_construct_iterator& i, const default_init_construct_iterator& i2) + inline friend bool operator> (const default_init_construct_iterator& i, const default_init_construct_iterator& i2) { return i2 < i; } - BOOST_CONTAINER_FORCEINLINE friend bool operator<= (const default_init_construct_iterator& i, const default_init_construct_iterator& i2) + inline friend bool operator<= (const default_init_construct_iterator& i, const default_init_construct_iterator& i2) { return !(i > i2); } - BOOST_CONTAINER_FORCEINLINE friend bool operator>= (const default_init_construct_iterator& i, const default_init_construct_iterator& i2) + inline friend bool operator>= (const default_init_construct_iterator& i, const default_init_construct_iterator& i2) { return !(i < i2); } - BOOST_CONTAINER_FORCEINLINE friend std::ptrdiff_t operator- (const default_init_construct_iterator& i, const default_init_construct_iterator& i2) + inline friend std::ptrdiff_t operator- (const default_init_construct_iterator& i, const default_init_construct_iterator& i2) { return i2.distance_to(i); } //Arithmetic - BOOST_CONTAINER_FORCEINLINE default_init_construct_iterator& operator+=(std::ptrdiff_t off) + inline default_init_construct_iterator& operator+=(std::ptrdiff_t off) { this->advance(off); return *this; } - BOOST_CONTAINER_FORCEINLINE default_init_construct_iterator operator+(std::ptrdiff_t off) const + inline default_init_construct_iterator operator+(std::ptrdiff_t off) const { default_init_construct_iterator other(*this); other.advance(off); return other; } - BOOST_CONTAINER_FORCEINLINE friend default_init_construct_iterator operator+(std::ptrdiff_t off, const default_init_construct_iterator& right) + inline friend default_init_construct_iterator operator+(std::ptrdiff_t off, const default_init_construct_iterator& right) { return right + off; } - BOOST_CONTAINER_FORCEINLINE default_init_construct_iterator& operator-=(std::ptrdiff_t off) + inline default_init_construct_iterator& operator-=(std::ptrdiff_t off) { this->advance(-off); return *this; } - BOOST_CONTAINER_FORCEINLINE default_init_construct_iterator operator-(std::ptrdiff_t off) const + inline default_init_construct_iterator operator-(std::ptrdiff_t off) const { return *this + (-off); } //This pseudo-iterator's dereference operations have no sense since value is not @@ -368,28 +367,28 @@ class default_init_construct_iterator private: std::size_t m_num; - BOOST_CONTAINER_FORCEINLINE void increment() + inline void increment() { --m_num; } - BOOST_CONTAINER_FORCEINLINE void decrement() + inline void decrement() { ++m_num; } - BOOST_CONTAINER_FORCEINLINE bool equal(const this_type &other) const + inline bool equal(const this_type &other) const { return m_num == other.m_num; } - BOOST_CONTAINER_FORCEINLINE bool less(const this_type &other) const + inline bool less(const this_type &other) const { return other.m_num < m_num; } - BOOST_CONTAINER_FORCEINLINE const T & dereference() const + inline const T & dereference() const { static T dummy; return dummy; } - BOOST_CONTAINER_FORCEINLINE void advance(std::ptrdiff_t n) + inline void advance(std::ptrdiff_t n) { m_num = std::size_t(std::ptrdiff_t(m_num) - n); } - BOOST_CONTAINER_FORCEINLINE std::ptrdiff_t distance_to(const this_type &other) const + inline std::ptrdiff_t distance_to(const this_type &other) const { return std::ptrdiff_t(m_num - other.m_num); } }; @@ -401,106 +400,106 @@ class repeat_iterator { typedef repeat_iterator<T> this_type; public: - BOOST_CONTAINER_FORCEINLINE explicit repeat_iterator(T &ref, std::size_t range_size) + inline explicit repeat_iterator(T &ref, std::size_t range_size) : m_ptr(&ref), m_num(range_size){} //Constructors - BOOST_CONTAINER_FORCEINLINE repeat_iterator() + inline repeat_iterator() : m_ptr(0), m_num(0){} - BOOST_CONTAINER_FORCEINLINE this_type& operator++() + inline this_type& operator++() { increment(); return *this; } - BOOST_CONTAINER_FORCEINLINE this_type operator++(int) + inline this_type operator++(int) { this_type result (*this); increment(); return result; } - BOOST_CONTAINER_FORCEINLINE this_type& operator--() + inline this_type& operator--() { increment(); return *this; } - BOOST_CONTAINER_FORCEINLINE this_type operator--(int) + inline this_type operator--(int) { this_type result (*this); increment(); return result; } - BOOST_CONTAINER_FORCEINLINE friend bool operator== (const this_type& i, const this_type& i2) + inline friend bool operator== (const this_type& i, const this_type& i2) { return i.equal(i2); } - BOOST_CONTAINER_FORCEINLINE friend bool operator!= (const this_type& i, const this_type& i2) + inline friend bool operator!= (const this_type& i, const this_type& i2) { return !(i == i2); } - BOOST_CONTAINER_FORCEINLINE friend bool operator< (const this_type& i, const this_type& i2) + inline friend bool operator< (const this_type& i, const this_type& i2) { return i.less(i2); } - BOOST_CONTAINER_FORCEINLINE friend bool operator> (const this_type& i, const this_type& i2) + inline friend bool operator> (const this_type& i, const this_type& i2) { return i2 < i; } - BOOST_CONTAINER_FORCEINLINE friend bool operator<= (const this_type& i, const this_type& i2) + inline friend bool operator<= (const this_type& i, const this_type& i2) { return !(i > i2); } - BOOST_CONTAINER_FORCEINLINE friend bool operator>= (const this_type& i, const this_type& i2) + inline friend bool operator>= (const this_type& i, const this_type& i2) { return !(i < i2); } - BOOST_CONTAINER_FORCEINLINE friend std::ptrdiff_t operator- (const this_type& i, const this_type& i2) + inline friend std::ptrdiff_t operator- (const this_type& i, const this_type& i2) { return i2.distance_to(i); } //Arithmetic - BOOST_CONTAINER_FORCEINLINE this_type& operator+=(std::ptrdiff_t off) + inline this_type& operator+=(std::ptrdiff_t off) { this->advance(off); return *this; } - BOOST_CONTAINER_FORCEINLINE this_type operator+(std::ptrdiff_t off) const + inline this_type operator+(std::ptrdiff_t off) const { this_type other(*this); other.advance(off); return other; } - BOOST_CONTAINER_FORCEINLINE friend this_type operator+(std::ptrdiff_t off, const this_type& right) + inline friend this_type operator+(std::ptrdiff_t off, const this_type& right) { return right + off; } - BOOST_CONTAINER_FORCEINLINE this_type& operator-=(std::ptrdiff_t off) + inline this_type& operator-=(std::ptrdiff_t off) { this->advance(-off); return *this; } - BOOST_CONTAINER_FORCEINLINE this_type operator-(std::ptrdiff_t off) const + inline this_type operator-(std::ptrdiff_t off) const { return *this + (-off); } - BOOST_CONTAINER_FORCEINLINE T& operator*() const + inline T& operator*() const { return dereference(); } - BOOST_CONTAINER_FORCEINLINE T& operator[] (std::ptrdiff_t ) const + inline T& operator[] (std::ptrdiff_t ) const { return dereference(); } - BOOST_CONTAINER_FORCEINLINE T *operator->() const + inline T *operator->() const { return &(dereference()); } private: T * m_ptr; std::size_t m_num; - BOOST_CONTAINER_FORCEINLINE void increment() + inline void increment() { --m_num; } - BOOST_CONTAINER_FORCEINLINE void decrement() + inline void decrement() { ++m_num; } - BOOST_CONTAINER_FORCEINLINE bool equal(const this_type &other) const + inline bool equal(const this_type &other) const { return m_num == other.m_num; } - BOOST_CONTAINER_FORCEINLINE bool less(const this_type &other) const + inline bool less(const this_type &other) const { return other.m_num < m_num; } - BOOST_CONTAINER_FORCEINLINE T & dereference() const + inline T & dereference() const { return *m_ptr; } - BOOST_CONTAINER_FORCEINLINE void advance(std::ptrdiff_t n) + inline void advance(std::ptrdiff_t n) { m_num = std::size_t(std::ptrdiff_t(m_num - n)); } - BOOST_CONTAINER_FORCEINLINE std::ptrdiff_t distance_to(const this_type &other)const + inline std::ptrdiff_t distance_to(const this_type &other)const { return std::ptrdiff_t(m_num - other.m_num); } }; @@ -513,71 +512,71 @@ class emplace_iterator public: typedef std::ptrdiff_t difference_type; - BOOST_CONTAINER_FORCEINLINE explicit emplace_iterator(EmplaceFunctor&e) + inline explicit emplace_iterator(EmplaceFunctor&e) : m_num(1), m_pe(&e){} - BOOST_CONTAINER_FORCEINLINE emplace_iterator() + inline emplace_iterator() : m_num(0), m_pe(0){} - BOOST_CONTAINER_FORCEINLINE this_type& operator++() + inline this_type& operator++() { increment(); return *this; } - BOOST_CONTAINER_FORCEINLINE this_type operator++(int) + inline this_type operator++(int) { this_type result (*this); increment(); return result; } - BOOST_CONTAINER_FORCEINLINE this_type& operator--() + inline this_type& operator--() { decrement(); return *this; } - BOOST_CONTAINER_FORCEINLINE this_type operator--(int) + inline this_type operator--(int) { this_type result (*this); decrement(); return result; } - BOOST_CONTAINER_FORCEINLINE friend bool operator== (const this_type& i, const this_type& i2) + inline friend bool operator== (const this_type& i, const this_type& i2) { return i.equal(i2); } - BOOST_CONTAINER_FORCEINLINE friend bool operator!= (const this_type& i, const this_type& i2) + inline friend bool operator!= (const this_type& i, const this_type& i2) { return !(i == i2); } - BOOST_CONTAINER_FORCEINLINE friend bool operator< (const this_type& i, const this_type& i2) + inline friend bool operator< (const this_type& i, const this_type& i2) { return i.less(i2); } - BOOST_CONTAINER_FORCEINLINE friend bool operator> (const this_type& i, const this_type& i2) + inline friend bool operator> (const this_type& i, const this_type& i2) { return i2 < i; } - BOOST_CONTAINER_FORCEINLINE friend bool operator<= (const this_type& i, const this_type& i2) + inline friend bool operator<= (const this_type& i, const this_type& i2) { return !(i > i2); } - BOOST_CONTAINER_FORCEINLINE friend bool operator>= (const this_type& i, const this_type& i2) + inline friend bool operator>= (const this_type& i, const this_type& i2) { return !(i < i2); } - BOOST_CONTAINER_FORCEINLINE friend difference_type operator- (const this_type& i, const this_type& i2) + inline friend difference_type operator- (const this_type& i, const this_type& i2) { return i2.distance_to(i); } //Arithmetic - BOOST_CONTAINER_FORCEINLINE this_type& operator+=(difference_type off) + inline this_type& operator+=(difference_type off) { this->advance(off); return *this; } - BOOST_CONTAINER_FORCEINLINE this_type operator+(difference_type off) const + inline this_type operator+(difference_type off) const { this_type other(*this); other.advance(off); return other; } - BOOST_CONTAINER_FORCEINLINE friend this_type operator+(difference_type off, const this_type& right) + inline friend this_type operator+(difference_type off, const this_type& right) { return right + off; } - BOOST_CONTAINER_FORCEINLINE this_type& operator-=(difference_type off) + inline this_type& operator-=(difference_type off) { this->advance(-off); return *this; } - BOOST_CONTAINER_FORCEINLINE this_type operator-(difference_type off) const + inline this_type operator-(difference_type off) const { return *this + (-off); } private: @@ -590,39 +589,39 @@ class emplace_iterator public: template<class Allocator> - BOOST_CONTAINER_FORCEINLINE void construct_in_place(Allocator &a, T* ptr) + inline void construct_in_place(Allocator &a, T* ptr) { (*m_pe)(a, ptr); } template<class DestIt> - BOOST_CONTAINER_FORCEINLINE void assign_in_place(DestIt dest) + inline void assign_in_place(DestIt dest) { (*m_pe)(dest); } private: std::size_t m_num; EmplaceFunctor * m_pe; - BOOST_CONTAINER_FORCEINLINE void increment() + inline void increment() { --m_num; } - BOOST_CONTAINER_FORCEINLINE void decrement() + inline void decrement() { ++m_num; } - BOOST_CONTAINER_FORCEINLINE bool equal(const this_type &other) const + inline bool equal(const this_type &other) const { return m_num == other.m_num; } - BOOST_CONTAINER_FORCEINLINE bool less(const this_type &other) const + inline bool less(const this_type &other) const { return other.m_num < m_num; } - BOOST_CONTAINER_FORCEINLINE const T & dereference() const + inline const T & dereference() const { static T dummy; return dummy; } - BOOST_CONTAINER_FORCEINLINE void advance(difference_type n) + inline void advance(difference_type n) { m_num -= n; } - BOOST_CONTAINER_FORCEINLINE difference_type distance_to(const this_type &other)const + inline difference_type distance_to(const this_type &other)const { return difference_type(m_num - other.m_num); } }; @@ -633,28 +632,28 @@ struct emplace_functor { typedef typename dtl::build_number_seq<sizeof...(Args)>::type index_tuple_t; - BOOST_CONTAINER_FORCEINLINE emplace_functor(BOOST_FWD_REF(Args)... args) + inline emplace_functor(BOOST_FWD_REF(Args)... args) : args_(args...) {} template<class Allocator, class T> - BOOST_CONTAINER_FORCEINLINE void operator()(Allocator &a, T *ptr) + inline void operator()(Allocator &a, T *ptr) { emplace_functor::inplace_impl(a, ptr, index_tuple_t()); } template<class DestIt> - BOOST_CONTAINER_FORCEINLINE void operator()(DestIt dest) + inline void operator()(DestIt dest) { emplace_functor::inplace_impl(dest, index_tuple_t()); } private: template<class Allocator, class T, std::size_t ...IdxPack> - BOOST_CONTAINER_FORCEINLINE void inplace_impl(Allocator &a, T* ptr, const dtl::index_tuple<IdxPack...>&) + inline void inplace_impl(Allocator &a, T* ptr, const dtl::index_tuple<IdxPack...>&) { allocator_traits<Allocator>::construct (a, ptr, ::boost::forward<Args>(dtl::get<IdxPack>(args_))...); } template<class DestIt, std::size_t ...IdxPack> - BOOST_CONTAINER_FORCEINLINE void inplace_impl(DestIt dest, const dtl::index_tuple<IdxPack...>&) + inline void inplace_impl(DestIt dest, const dtl::index_tuple<IdxPack...>&) { typedef typename boost::container::iterator_traits<DestIt>::value_type value_type; value_type && tmp= value_type(::boost::forward<Args>(dtl::get<IdxPack>(args_))...); @@ -680,15 +679,15 @@ struct emplace_functor_type; BOOST_MOVE_TMPL_LT##N BOOST_MOVE_CLASS##N BOOST_MOVE_GT##N \ struct emplace_functor##N\ {\ - BOOST_CONTAINER_FORCEINLINE explicit emplace_functor##N( BOOST_MOVE_UREF##N )\ + inline explicit emplace_functor##N( BOOST_MOVE_UREF##N )\ BOOST_MOVE_COLON##N BOOST_MOVE_FWD_INIT##N{}\ \ template<class Allocator, class T>\ - BOOST_CONTAINER_FORCEINLINE void operator()(Allocator &a, T *ptr)\ + inline void operator()(Allocator &a, T *ptr)\ { allocator_traits<Allocator>::construct(a, ptr BOOST_MOVE_I##N BOOST_MOVE_MFWD##N); }\ \ template<class DestIt>\ - BOOST_CONTAINER_FORCEINLINE void operator()(DestIt dest)\ + inline void operator()(DestIt dest)\ {\ typedef typename boost::container::iterator_traits<DestIt>::value_type value_type;\ BOOST_MOVE_IF(N, value_type tmp(BOOST_MOVE_MFWD##N), dtl::value_init<value_type> tmp) ;\ @@ -836,62 +835,62 @@ class iterator_from_iiterator typedef typename types_t::iterator_category iterator_category; typedef typename types_t::value_type value_type; - BOOST_CONTAINER_FORCEINLINE iterator_from_iiterator() + inline iterator_from_iiterator() : m_iit() {} - BOOST_CONTAINER_FORCEINLINE explicit iterator_from_iiterator(IIterator iit) BOOST_NOEXCEPT_OR_NOTHROW + inline explicit iterator_from_iiterator(IIterator iit) BOOST_NOEXCEPT_OR_NOTHROW : m_iit(iit) {} - BOOST_CONTAINER_FORCEINLINE iterator_from_iiterator(const iterator_from_iiterator& other) BOOST_NOEXCEPT_OR_NOTHROW + inline iterator_from_iiterator(const iterator_from_iiterator& other) BOOST_NOEXCEPT_OR_NOTHROW : m_iit(other.get()) {} - BOOST_CONTAINER_FORCEINLINE iterator_from_iiterator(const nonconst_iterator& other) BOOST_NOEXCEPT_OR_NOTHROW + inline iterator_from_iiterator(const nonconst_iterator& other) BOOST_NOEXCEPT_OR_NOTHROW : m_iit(other.get()) {} - BOOST_CONTAINER_FORCEINLINE iterator_from_iiterator& operator=(const iterator_from_iiterator& other) BOOST_NOEXCEPT_OR_NOTHROW + inline iterator_from_iiterator& operator=(const iterator_from_iiterator& other) BOOST_NOEXCEPT_OR_NOTHROW { m_iit = other.get(); return *this; } - BOOST_CONTAINER_FORCEINLINE iterator_from_iiterator& operator++() BOOST_NOEXCEPT_OR_NOTHROW + inline iterator_from_iiterator& operator++() BOOST_NOEXCEPT_OR_NOTHROW { ++this->m_iit; return *this; } - BOOST_CONTAINER_FORCEINLINE iterator_from_iiterator operator++(int) BOOST_NOEXCEPT_OR_NOTHROW + inline iterator_from_iiterator operator++(int) BOOST_NOEXCEPT_OR_NOTHROW { iterator_from_iiterator result (*this); ++this->m_iit; return result; } - BOOST_CONTAINER_FORCEINLINE iterator_from_iiterator& operator--() BOOST_NOEXCEPT_OR_NOTHROW + inline iterator_from_iiterator& operator--() BOOST_NOEXCEPT_OR_NOTHROW { //If the iterator_from_iiterator is not a bidirectional iterator, operator-- should not exist - BOOST_STATIC_ASSERT((is_bidirectional_iterator<iterator_from_iiterator>::value)); + BOOST_CONTAINER_STATIC_ASSERT((is_bidirectional_iterator<iterator_from_iiterator>::value)); --this->m_iit; return *this; } - BOOST_CONTAINER_FORCEINLINE iterator_from_iiterator operator--(int) BOOST_NOEXCEPT_OR_NOTHROW + inline iterator_from_iiterator operator--(int) BOOST_NOEXCEPT_OR_NOTHROW { iterator_from_iiterator result (*this); --this->m_iit; return result; } - BOOST_CONTAINER_FORCEINLINE friend bool operator== (const iterator_from_iiterator& l, const iterator_from_iiterator& r) BOOST_NOEXCEPT_OR_NOTHROW + inline friend bool operator== (const iterator_from_iiterator& l, const iterator_from_iiterator& r) BOOST_NOEXCEPT_OR_NOTHROW { return l.m_iit == r.m_iit; } - BOOST_CONTAINER_FORCEINLINE friend bool operator!= (const iterator_from_iiterator& l, const iterator_from_iiterator& r) BOOST_NOEXCEPT_OR_NOTHROW + inline friend bool operator!= (const iterator_from_iiterator& l, const iterator_from_iiterator& r) BOOST_NOEXCEPT_OR_NOTHROW { return l.m_iit != r.m_iit; } - BOOST_CONTAINER_FORCEINLINE reference operator*() const BOOST_NOEXCEPT_OR_NOTHROW + inline reference operator*() const BOOST_NOEXCEPT_OR_NOTHROW { return this->m_iit->get_data(); } - BOOST_CONTAINER_FORCEINLINE pointer operator->() const BOOST_NOEXCEPT_OR_NOTHROW + inline pointer operator->() const BOOST_NOEXCEPT_OR_NOTHROW { return ::boost::intrusive::pointer_traits<pointer>::pointer_to(this->operator*()); } - BOOST_CONTAINER_FORCEINLINE const IIterator &get() const BOOST_NOEXCEPT_OR_NOTHROW + inline const IIterator &get() const BOOST_NOEXCEPT_OR_NOTHROW { return this->m_iit; } private: diff --git a/contrib/restricted/boost/container/include/boost/container/detail/next_capacity.hpp b/contrib/restricted/boost/container/include/boost/container/detail/next_capacity.hpp index 9777b1473b..76bf0a0e7d 100644 --- a/contrib/restricted/boost/container/include/boost/container/detail/next_capacity.hpp +++ b/contrib/restricted/boost/container/include/boost/container/detail/next_capacity.hpp @@ -26,8 +26,6 @@ // container/detail #include <boost/container/detail/min_max.hpp> -#include <boost/static_assert.hpp> - namespace boost { namespace container { namespace dtl { @@ -35,10 +33,10 @@ namespace dtl { template<unsigned Minimum, unsigned Numerator, unsigned Denominator> struct grow_factor_ratio { - BOOST_STATIC_ASSERT(Numerator > Denominator); - BOOST_STATIC_ASSERT(Numerator < 100); - BOOST_STATIC_ASSERT(Denominator < 100); - BOOST_STATIC_ASSERT(Denominator == 1 || (0 != Numerator % Denominator)); + BOOST_CONTAINER_STATIC_ASSERT(Numerator > Denominator); + BOOST_CONTAINER_STATIC_ASSERT(Numerator < 100); + BOOST_CONTAINER_STATIC_ASSERT(Denominator < 100); + BOOST_CONTAINER_STATIC_ASSERT(Denominator == 1 || (0 != Numerator % Denominator)); template<class SizeType> SizeType operator()(const SizeType cur_cap, const SizeType add_min_cap, const SizeType max_cap) const @@ -80,11 +78,11 @@ struct growth_factor_100 {}; template<class SizeType> -BOOST_CONTAINER_FORCEINLINE void clamp_by_stored_size_type(SizeType &, SizeType) +inline void clamp_by_stored_size_type(SizeType &, SizeType) {} template<class SizeType, class SomeStoredSizeType> -BOOST_CONTAINER_FORCEINLINE void clamp_by_stored_size_type(SizeType &s, SomeStoredSizeType) +inline void clamp_by_stored_size_type(SizeType &s, SomeStoredSizeType) { if (s >= SomeStoredSizeType(-1) ) s = SomeStoredSizeType(-1); diff --git a/contrib/restricted/boost/container/include/boost/container/detail/node_alloc_holder.hpp b/contrib/restricted/boost/container/include/boost/container/detail/node_alloc_holder.hpp index 8db384e4f6..1ebf21ad84 100644 --- a/contrib/restricted/boost/container/include/boost/container/detail/node_alloc_holder.hpp +++ b/contrib/restricted/boost/container/include/boost/container/detail/node_alloc_holder.hpp @@ -118,16 +118,16 @@ struct base_node ::boost::container::construct_in_place(a, &this->get_real_data(), it); } - BOOST_CONTAINER_FORCEINLINE T &get_data() + inline T &get_data() { return *move_detail::force_ptr<T*>(this->m_storage.data); } - BOOST_CONTAINER_FORCEINLINE const T &get_data() const + inline const T &get_data() const { return *move_detail::force_ptr<const T*>(this->m_storage.data); } - BOOST_CONTAINER_FORCEINLINE internal_type &get_real_data() + inline internal_type &get_real_data() { return *move_detail::force_ptr<internal_type*>(this->m_storage.data); } - BOOST_CONTAINER_FORCEINLINE const internal_type &get_real_data() const + inline const internal_type &get_real_data() const { return *move_detail::force_ptr<const internal_type*>(this->m_storage.data); } #if defined(BOOST_CONTAINER_DISABLE_ALIASING_WARNING) @@ -136,7 +136,7 @@ struct base_node # endif template<class Alloc> - BOOST_CONTAINER_FORCEINLINE void destructor(Alloc &a) BOOST_NOEXCEPT + inline void destructor(Alloc &a) BOOST_NOEXCEPT { allocator_traits<Alloc>::destroy (a, &this->get_real_data()); @@ -144,7 +144,7 @@ struct base_node } template<class Pair> - BOOST_CONTAINER_FORCEINLINE + inline typename dtl::enable_if< dtl::is_pair<Pair>, void >::type do_assign(const Pair &p) { @@ -154,13 +154,13 @@ struct base_node } template<class V> - BOOST_CONTAINER_FORCEINLINE + inline typename dtl::disable_if< dtl::is_pair<V>, void >::type do_assign(const V &v) { this->get_real_data() = v; } template<class Pair> - BOOST_CONTAINER_FORCEINLINE + inline typename dtl::enable_if< dtl::is_pair<Pair>, void >::type do_move_assign(Pair &p) { @@ -170,7 +170,7 @@ struct base_node } template<class V> - BOOST_CONTAINER_FORCEINLINE + inline typename dtl::disable_if< dtl::is_pair<V>, void >::type do_move_assign(V &v) { this->get_real_data() = ::boost::move(v); } @@ -178,7 +178,7 @@ struct base_node private: base_node(); - BOOST_CONTAINER_FORCEINLINE ~base_node() + inline ~base_node() { } }; @@ -256,7 +256,7 @@ struct node_alloc_holder public: //Constructors for sequence containers - BOOST_CONTAINER_FORCEINLINE node_alloc_holder() + inline node_alloc_holder() {} explicit node_alloc_holder(const intrusive_bucket_traits& bt) @@ -339,30 +339,30 @@ struct node_alloc_holder , typename ICont::key_equal(eql)) { this->icont().swap(BOOST_MOVE_TO_LV(x).icont()); } - BOOST_CONTAINER_FORCEINLINE void copy_assign_alloc(const node_alloc_holder &x) + inline void copy_assign_alloc(const node_alloc_holder &x) { dtl::bool_<allocator_traits_type::propagate_on_container_copy_assignment::value> flag; dtl::assign_alloc( static_cast<NodeAlloc &>(*this) , static_cast<const NodeAlloc &>(x), flag); } - BOOST_CONTAINER_FORCEINLINE void move_assign_alloc( node_alloc_holder &x) + inline void move_assign_alloc( node_alloc_holder &x) { dtl::bool_<allocator_traits_type::propagate_on_container_move_assignment::value> flag; dtl::move_alloc( static_cast<NodeAlloc &>(*this) , static_cast<NodeAlloc &>(x), flag); } - BOOST_CONTAINER_FORCEINLINE ~node_alloc_holder() + inline ~node_alloc_holder() { this->clear(alloc_version()); } - BOOST_CONTAINER_FORCEINLINE size_type max_size() const + inline size_type max_size() const { return allocator_traits_type::max_size(this->node_alloc()); } - BOOST_CONTAINER_FORCEINLINE NodePtr allocate_one() + inline NodePtr allocate_one() { return AllocVersionTraits::allocate_one(this->node_alloc()); } - BOOST_CONTAINER_FORCEINLINE void deallocate_one(const NodePtr &p) + inline void deallocate_one(const NodePtr &p) { AllocVersionTraits::deallocate_one(this->node_alloc(), p); } #if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) @@ -497,7 +497,7 @@ struct node_alloc_holder } } - BOOST_CONTAINER_FORCEINLINE void clear(version_1) + inline void clear(version_1) { this->icont().clear_and_dispose(Destroyer(this->node_alloc())); } void clear(version_2) @@ -505,7 +505,7 @@ struct node_alloc_holder typename NodeAlloc::multiallocation_chain chain; allocator_node_destroyer_and_chain_builder<NodeAlloc> builder(this->node_alloc(), chain); this->icont().clear_and_dispose(builder); - //BOOST_STATIC_ASSERT((::boost::has_move_emulation_enabled<typename NodeAlloc::multiallocation_chain>::value == true)); + //BOOST_CONTAINER_STATIC_ASSERT((::boost::has_move_emulation_enabled<typename NodeAlloc::multiallocation_chain>::value == true)); if(!chain.empty()) this->node_alloc().deallocate_individual(chain); } @@ -524,11 +524,11 @@ struct node_alloc_holder } template<class Key> - BOOST_CONTAINER_FORCEINLINE size_type erase_key(const Key& k, version_1) + inline size_type erase_key(const Key& k, version_1) { return this->icont().erase_and_dispose(k, Destroyer(this->node_alloc())); } template<class Key> - BOOST_CONTAINER_FORCEINLINE size_type erase_key(const Key& k, version_2) + inline size_type erase_key(const Key& k, version_2) { allocator_multialloc_chain_node_deallocator<NodeAlloc> chain_holder(this->node_alloc()); return this->icont().erase_and_dispose(k, chain_holder.get_chain_builder()); @@ -537,11 +537,11 @@ struct node_alloc_holder protected: struct cloner { - BOOST_CONTAINER_FORCEINLINE explicit cloner(node_alloc_holder &holder) + inline explicit cloner(node_alloc_holder &holder) : m_holder(holder) {} - BOOST_CONTAINER_FORCEINLINE NodePtr operator()(const Node &other) const + inline NodePtr operator()(const Node &other) const { return m_holder.create_node(other.get_real_data()); } node_alloc_holder &m_holder; @@ -549,11 +549,11 @@ struct node_alloc_holder struct move_cloner { - BOOST_CONTAINER_FORCEINLINE move_cloner(node_alloc_holder &holder) + inline move_cloner(node_alloc_holder &holder) : m_holder(holder) {} - BOOST_CONTAINER_FORCEINLINE NodePtr operator()(Node &other) + inline NodePtr operator()(Node &other) { //Use get_real_data() instead of get_real_data to allow moving const key in [multi]map return m_holder.create_node(::boost::move(other.get_real_data())); } @@ -561,20 +561,20 @@ struct node_alloc_holder node_alloc_holder &m_holder; }; - BOOST_CONTAINER_FORCEINLINE ICont &non_const_icont() const + inline ICont &non_const_icont() const { return const_cast<ICont&>(this->m_icont); } - BOOST_CONTAINER_FORCEINLINE NodeAlloc &node_alloc() + inline NodeAlloc &node_alloc() { return static_cast<NodeAlloc &>(*this); } - BOOST_CONTAINER_FORCEINLINE const NodeAlloc &node_alloc() const + inline const NodeAlloc &node_alloc() const { return static_cast<const NodeAlloc &>(*this); } public: - BOOST_CONTAINER_FORCEINLINE ICont &icont() + inline ICont &icont() { return this->m_icont; } - BOOST_CONTAINER_FORCEINLINE const ICont &icont() const + inline const ICont &icont() const { return this->m_icont; } protected: @@ -587,10 +587,10 @@ struct key_of_node : KeyOfValue { typedef typename KeyOfValue::type type; - BOOST_CONTAINER_FORCEINLINE key_of_node() + inline key_of_node() {} - BOOST_CONTAINER_FORCEINLINE const type& operator()(const Node& x) const + inline const type& operator()(const Node& x) const { return this->KeyOfValue::operator()(x.get_data()); } }; diff --git a/contrib/restricted/boost/container/include/boost/container/detail/pair.hpp b/contrib/restricted/boost/container/include/boost/container/detail/pair.hpp index 56b2fb8311..58e560817a 100644 --- a/contrib/restricted/boost/container/include/boost/container/detail/pair.hpp +++ b/contrib/restricted/boost/container/include/boost/container/detail/pair.hpp @@ -25,7 +25,6 @@ #include <boost/container/container_fwd.hpp> #include <boost/container/detail/workaround.hpp> -#include <boost/static_assert.hpp> #include <boost/container/detail/mpl.hpp> #include <boost/container/detail/type_traits.hpp> #include <boost/container/detail/mpl.hpp> @@ -166,35 +165,35 @@ struct pair pair() : first(), second() { - BOOST_STATIC_ASSERT((sizeof(std::pair<T1, T2>) == sizeof(pair<T1, T2>))); + BOOST_CONTAINER_STATIC_ASSERT((sizeof(std::pair<T1, T2>) == sizeof(pair<T1, T2>))); } //pair copy assignment pair(const pair& x) : first(x.first), second(x.second) { - BOOST_STATIC_ASSERT((sizeof(std::pair<T1, T2>) == sizeof(pair<T1, T2>))); + BOOST_CONTAINER_STATIC_ASSERT((sizeof(std::pair<T1, T2>) == sizeof(pair<T1, T2>))); } //pair move constructor pair(BOOST_RV_REF(pair) p) : first(::boost::move(BOOST_MOVE_TO_LV(p).first)), second(::boost::move(BOOST_MOVE_TO_LV(p).second)) { - BOOST_STATIC_ASSERT((sizeof(std::pair<T1, T2>) == sizeof(pair<T1, T2>))); + BOOST_CONTAINER_STATIC_ASSERT((sizeof(std::pair<T1, T2>) == sizeof(pair<T1, T2>))); } template <class D, class S> pair(const pair<D, S> &p) : first(p.first), second(p.second) { - BOOST_STATIC_ASSERT((sizeof(std::pair<T1, T2>) == sizeof(pair<T1, T2>))); + BOOST_CONTAINER_STATIC_ASSERT((sizeof(std::pair<T1, T2>) == sizeof(pair<T1, T2>))); } template <class D, class S> pair(BOOST_RV_REF_BEG pair<D, S> BOOST_RV_REF_END p) : first(::boost::move(BOOST_MOVE_TO_LV(p).first)), second(::boost::move(BOOST_MOVE_TO_LV(p).second)) { - BOOST_STATIC_ASSERT((sizeof(std::pair<T1, T2>) == sizeof(pair<T1, T2>))); + BOOST_CONTAINER_STATIC_ASSERT((sizeof(std::pair<T1, T2>) == sizeof(pair<T1, T2>))); } //pair from two values @@ -202,7 +201,7 @@ struct pair : first(t1) , second(t2) { - BOOST_STATIC_ASSERT((sizeof(std::pair<T1, T2>) == sizeof(pair<T1, T2>))); + BOOST_CONTAINER_STATIC_ASSERT((sizeof(std::pair<T1, T2>) == sizeof(pair<T1, T2>))); } template<class U, class V> @@ -210,34 +209,34 @@ struct pair : first(::boost::forward<U>(u)) , second(::boost::forward<V>(v)) { - BOOST_STATIC_ASSERT((sizeof(std::pair<T1, T2>) == sizeof(pair<T1, T2>))); + BOOST_CONTAINER_STATIC_ASSERT((sizeof(std::pair<T1, T2>) == sizeof(pair<T1, T2>))); } //And now compatibility with std::pair pair(const std::pair<T1, T2>& x) : first(x.first), second(x.second) { - BOOST_STATIC_ASSERT((sizeof(std::pair<T1, T2>) == sizeof(pair<T1, T2>))); + BOOST_CONTAINER_STATIC_ASSERT((sizeof(std::pair<T1, T2>) == sizeof(pair<T1, T2>))); } template <class D, class S> pair(const std::pair<D, S>& p) : first(p.first), second(p.second) { - BOOST_STATIC_ASSERT((sizeof(std::pair<T1, T2>) == sizeof(pair<T1, T2>))); + BOOST_CONTAINER_STATIC_ASSERT((sizeof(std::pair<T1, T2>) == sizeof(pair<T1, T2>))); } pair(BOOST_RV_REF_BEG std::pair<T1, T2> BOOST_RV_REF_END p) : first(::boost::move(BOOST_MOVE_TO_LV(p).first)), second(::boost::move(BOOST_MOVE_TO_LV(p).second)) { - BOOST_STATIC_ASSERT((sizeof(std::pair<T1, T2>) == sizeof(pair<T1, T2>))); + BOOST_CONTAINER_STATIC_ASSERT((sizeof(std::pair<T1, T2>) == sizeof(pair<T1, T2>))); } template <class D, class S> pair(BOOST_RV_REF_BEG std::pair<D, S> BOOST_RV_REF_END p) : first(::boost::move(BOOST_MOVE_TO_LV(p).first)), second(::boost::move(BOOST_MOVE_TO_LV(p).second)) { - BOOST_STATIC_ASSERT((sizeof(std::pair<T1, T2>) == sizeof(pair<T1, T2>))); + BOOST_CONTAINER_STATIC_ASSERT((sizeof(std::pair<T1, T2>) == sizeof(pair<T1, T2>))); } #if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) @@ -245,7 +244,7 @@ struct pair pair(try_emplace_t, BOOST_FWD_REF(KeyType) k, Args && ...args) : first(boost::forward<KeyType>(k)), second(::boost::forward<Args>(args)...)\ { - BOOST_STATIC_ASSERT((sizeof(std::pair<T1, T2>) == sizeof(pair<T1, T2>))); + BOOST_CONTAINER_STATIC_ASSERT((sizeof(std::pair<T1, T2>) == sizeof(pair<T1, T2>))); } #else @@ -255,7 +254,7 @@ struct pair pair( try_emplace_t, BOOST_FWD_REF(KeyType) k BOOST_MOVE_I##N BOOST_MOVE_UREF##N )\ : first(boost::forward<KeyType>(k)), second(BOOST_MOVE_FWD##N)\ {\ - BOOST_STATIC_ASSERT((sizeof(std::pair<T1, T2>) == sizeof(pair<T1, T2>)));\ + BOOST_CONTAINER_STATIC_ASSERT((sizeof(std::pair<T1, T2>) == sizeof(pair<T1, T2>)));\ }\ // BOOST_MOVE_ITERATE_0TO9(BOOST_PAIR_TRY_EMPLACE_CONSTRUCT_CODE) @@ -277,7 +276,7 @@ struct pair )\ : first(BOOST_MOVE_TMPL_GET##N), second(BOOST_MOVE_TMPL_GETQ##M)\ { (void)p; (void)q;\ - BOOST_STATIC_ASSERT((sizeof(std::pair<T1, T2>) == sizeof(pair<T1, T2>)));\ + BOOST_CONTAINER_STATIC_ASSERT((sizeof(std::pair<T1, T2>) == sizeof(pair<T1, T2>)));\ }\ // BOOST_MOVE_ITER2D_0TOMAX(9, BOOST_PAIR_PIECEWISE_CONSTRUCT_BOOST_TUPLE_CODE) @@ -299,7 +298,7 @@ struct pair pair(piecewise_construct_t, Tuple<Args1...> t1, Tuple<Args2...> t2) : pair(t1, t2, typename build_number_seq<sizeof...(Args1)>::type(), typename build_number_seq<sizeof...(Args2)>::type()) { - BOOST_STATIC_ASSERT((sizeof(std::pair<T1, T2>) == sizeof(pair<T1, T2>))); + BOOST_CONTAINER_STATIC_ASSERT((sizeof(std::pair<T1, T2>) == sizeof(pair<T1, T2>))); } # else //piecewise construction from variadic tuple (suboptimal, without delegating constructors) @@ -319,7 +318,7 @@ struct pair : first (build_from_args<first_type> (::boost::move(t1))) , second (build_from_args<second_type>(::boost::move(t2))) { - BOOST_STATIC_ASSERT((sizeof(std::pair<T1, T2>) == sizeof(pair<T1, T2>))); + BOOST_CONTAINER_STATIC_ASSERT((sizeof(std::pair<T1, T2>) == sizeof(pair<T1, T2>))); } # endif //BOOST_NO_CXX11_VARIADIC_TEMPLATES #elif defined(BOOST_MSVC) && (_CPPLIB_VER == 520) @@ -332,7 +331,7 @@ struct pair , StdTuple<BOOST_MOVE_TARGQ##M BOOST_MOVE_I##M BOOST_MOVE_REPEAT(BOOST_MOVE_SUB(10,M),::std::tr1::_Nil)> q)\ : first(BOOST_MOVE_GET_IDX##N), second(BOOST_MOVE_GET_IDXQ##M)\ { (void)p; (void)q;\ - BOOST_STATIC_ASSERT((sizeof(std::pair<T1, T2>) == sizeof(pair<T1, T2>)));\ + BOOST_CONTAINER_STATIC_ASSERT((sizeof(std::pair<T1, T2>) == sizeof(pair<T1, T2>)));\ }\ // BOOST_MOVE_ITER2D_0TOMAX(9, BOOST_PAIR_PIECEWISE_CONSTRUCT_MSVC2010_TUPLE_CODE) @@ -353,7 +352,7 @@ struct pair , StdTuple<BOOST_MOVE_TARGQ##M BOOST_MOVE_I##M BOOST_MOVE_REPEAT(BOOST_MOVE_SUB(BOOST_MOVE_ADD(_VARIADIC_MAX, 3),M),::std::_Nil) > q)\ : first(BOOST_MOVE_GET_IDX##N), second(BOOST_MOVE_GET_IDXQ##M)\ { (void)p; (void)q;\ - BOOST_STATIC_ASSERT((sizeof(std::pair<T1, T2>) == sizeof(pair<T1, T2>)));\ + BOOST_CONTAINER_STATIC_ASSERT((sizeof(std::pair<T1, T2>) == sizeof(pair<T1, T2>)));\ }\ // BOOST_MOVE_ITER2D_0TOMAX(BOOST_PAIR_PIECEWISE_CONSTRUCT_MSVC2012_TUPLE_MAX_IT, BOOST_PAIR_PIECEWISE_CONSTRUCT_MSVC2012_TUPLE_CODE) diff --git a/contrib/restricted/boost/container/include/boost/container/detail/transform_iterator.hpp b/contrib/restricted/boost/container/include/boost/container/detail/transform_iterator.hpp index 5c7bbf2dd0..35b64b85fe 100644 --- a/contrib/restricted/boost/container/include/boost/container/detail/transform_iterator.hpp +++ b/contrib/restricted/boost/container/include/boost/container/detail/transform_iterator.hpp @@ -33,13 +33,13 @@ namespace container { template <class PseudoReference> struct operator_arrow_proxy { - BOOST_CONTAINER_FORCEINLINE operator_arrow_proxy(const PseudoReference &px) + inline operator_arrow_proxy(const PseudoReference &px) : m_value(px) {} typedef PseudoReference element_type; - BOOST_CONTAINER_FORCEINLINE PseudoReference* operator->() const { return &m_value; } + inline PseudoReference* operator->() const { return &m_value; } mutable PseudoReference m_value; }; @@ -47,13 +47,13 @@ struct operator_arrow_proxy template <class T> struct operator_arrow_proxy<T&> { - BOOST_CONTAINER_FORCEINLINE operator_arrow_proxy(T &px) + inline operator_arrow_proxy(T &px) : m_value(px) {} typedef T element_type; - BOOST_CONTAINER_FORCEINLINE T* operator->() const { return const_cast<T*>(&m_value); } + inline T* operator->() const { return const_cast<T*>(&m_value); } T &m_value; }; @@ -69,29 +69,29 @@ class transform_iterator , typename UnaryFunction::result_type> { public: - BOOST_CONTAINER_FORCEINLINE explicit transform_iterator(const Iterator &it, const UnaryFunction &f = UnaryFunction()) + inline explicit transform_iterator(const Iterator &it, const UnaryFunction &f = UnaryFunction()) : UnaryFunction(f), m_it(it) {} - BOOST_CONTAINER_FORCEINLINE explicit transform_iterator() + inline explicit transform_iterator() : UnaryFunction(), m_it() {} //Constructors - BOOST_CONTAINER_FORCEINLINE transform_iterator& operator++() + inline transform_iterator& operator++() { increment(); return *this; } - BOOST_CONTAINER_FORCEINLINE transform_iterator operator++(int) + inline transform_iterator operator++(int) { transform_iterator result (*this); increment(); return result; } - BOOST_CONTAINER_FORCEINLINE friend bool operator== (const transform_iterator& i, const transform_iterator& i2) + inline friend bool operator== (const transform_iterator& i, const transform_iterator& i2) { return i.equal(i2); } - BOOST_CONTAINER_FORCEINLINE friend bool operator!= (const transform_iterator& i, const transform_iterator& i2) + inline friend bool operator!= (const transform_iterator& i, const transform_iterator& i2) { return !(i == i2); } /* @@ -104,69 +104,69 @@ class transform_iterator friend bool operator>= (const transform_iterator& i, const transform_iterator& i2) { return !(i < i2); } */ - BOOST_CONTAINER_FORCEINLINE friend typename Iterator::difference_type operator- (const transform_iterator& i, const transform_iterator& i2) + inline friend typename Iterator::difference_type operator- (const transform_iterator& i, const transform_iterator& i2) { return i2.distance_to(i); } //Arithmetic - BOOST_CONTAINER_FORCEINLINE transform_iterator& operator+=(typename Iterator::difference_type off) + inline transform_iterator& operator+=(typename Iterator::difference_type off) { this->advance(off); return *this; } - BOOST_CONTAINER_FORCEINLINE transform_iterator operator+(typename Iterator::difference_type off) const + inline transform_iterator operator+(typename Iterator::difference_type off) const { transform_iterator other(*this); other.advance(off); return other; } - BOOST_CONTAINER_FORCEINLINE friend transform_iterator operator+(typename Iterator::difference_type off, const transform_iterator& right) + inline friend transform_iterator operator+(typename Iterator::difference_type off, const transform_iterator& right) { return right + off; } - BOOST_CONTAINER_FORCEINLINE transform_iterator& operator-=(typename Iterator::difference_type off) + inline transform_iterator& operator-=(typename Iterator::difference_type off) { this->advance(-off); return *this; } - BOOST_CONTAINER_FORCEINLINE transform_iterator operator-(typename Iterator::difference_type off) const + inline transform_iterator operator-(typename Iterator::difference_type off) const { return *this + (-off); } - BOOST_CONTAINER_FORCEINLINE typename UnaryFunction::result_type operator*() const + inline typename UnaryFunction::result_type operator*() const { return dereference(); } - BOOST_CONTAINER_FORCEINLINE operator_arrow_proxy<typename UnaryFunction::result_type> + inline operator_arrow_proxy<typename UnaryFunction::result_type> operator->() const { return operator_arrow_proxy<typename UnaryFunction::result_type>(dereference()); } - BOOST_CONTAINER_FORCEINLINE Iterator & base() + inline Iterator & base() { return m_it; } - BOOST_CONTAINER_FORCEINLINE const Iterator & base() const + inline const Iterator & base() const { return m_it; } private: Iterator m_it; - BOOST_CONTAINER_FORCEINLINE void increment() + inline void increment() { ++m_it; } - BOOST_CONTAINER_FORCEINLINE void decrement() + inline void decrement() { --m_it; } - BOOST_CONTAINER_FORCEINLINE bool equal(const transform_iterator &other) const + inline bool equal(const transform_iterator &other) const { return m_it == other.m_it; } - BOOST_CONTAINER_FORCEINLINE bool less(const transform_iterator &other) const + inline bool less(const transform_iterator &other) const { return other.m_it < m_it; } - BOOST_CONTAINER_FORCEINLINE typename UnaryFunction::result_type dereference() const + inline typename UnaryFunction::result_type dereference() const { return UnaryFunction::operator()(*m_it); } - BOOST_CONTAINER_FORCEINLINE void advance(typename Iterator::difference_type n) + inline void advance(typename Iterator::difference_type n) { boost::container::iterator_advance(m_it, n); } - BOOST_CONTAINER_FORCEINLINE typename Iterator::difference_type distance_to(const transform_iterator &other)const + inline typename Iterator::difference_type distance_to(const transform_iterator &other)const { return boost::container::iterator_distance(other.m_it, m_it); } }; template <class Iterator, class UnaryFunc> -BOOST_CONTAINER_FORCEINLINE transform_iterator<Iterator, UnaryFunc> +inline transform_iterator<Iterator, UnaryFunc> make_transform_iterator(Iterator it, UnaryFunc fun) { return transform_iterator<Iterator, UnaryFunc>(it, fun); diff --git a/contrib/restricted/boost/container/include/boost/container/detail/tree.hpp b/contrib/restricted/boost/container/include/boost/container/detail/tree.hpp index 843ad3cb78..f4a27b200e 100644 --- a/contrib/restricted/boost/container/include/boost/container/detail/tree.hpp +++ b/contrib/restricted/boost/container/include/boost/container/detail/tree.hpp @@ -131,11 +131,11 @@ class insert_equal_end_hint_functor Icont &icont_; public: - BOOST_CONTAINER_FORCEINLINE insert_equal_end_hint_functor(Icont &icont) + inline insert_equal_end_hint_functor(Icont &icont) : icont_(icont) {} - BOOST_CONTAINER_FORCEINLINE void operator()(Node &n) + inline void operator()(Node &n) { this->icont_.insert_equal(this->icont_.cend(), n); } }; @@ -145,11 +145,11 @@ class push_back_functor Icont &icont_; public: - BOOST_CONTAINER_FORCEINLINE push_back_functor(Icont &icont) + inline push_back_functor(Icont &icont) : icont_(icont) {} - BOOST_CONTAINER_FORCEINLINE void operator()(Node &n) + inline void operator()(Node &n) { this->icont_.push_back(n); } }; @@ -267,14 +267,14 @@ template< boost::container::tree_type_enum tree_type_value struct intrusive_tree_proxy { template<class Icont> - BOOST_CONTAINER_FORCEINLINE static void rebalance(Icont &) {} + inline static void rebalance(Icont &) {} }; template<boost::container::tree_type_enum tree_type_value> struct intrusive_tree_proxy<tree_type_value, true> { template<class Icont> - BOOST_CONTAINER_FORCEINLINE static void rebalance(Icont &c) + inline static void rebalance(Icont &c) { c.rebalance(); } }; @@ -298,10 +298,10 @@ class RecyclingCloner : m_holder(holder), m_icont(itree) {} - BOOST_CONTAINER_FORCEINLINE static void do_assign(node_ptr_type p, node_t &other, bool_<true>) + inline static void do_assign(node_ptr_type p, node_t &other, bool_<true>) { p->do_move_assign(other.get_real_data()); } - BOOST_CONTAINER_FORCEINLINE static void do_assign(node_ptr_type p, const node_t &other, bool_<false>) + inline static void do_assign(node_ptr_type p, const node_t &other, bool_<false>) { p->do_assign(other.get_real_data()); } node_ptr_type operator() @@ -461,19 +461,19 @@ class tree public: - BOOST_CONTAINER_FORCEINLINE tree() + inline tree() : AllocHolder() {} - BOOST_CONTAINER_FORCEINLINE explicit tree(const key_compare& comp) + inline explicit tree(const key_compare& comp) : AllocHolder(ValComp(comp)) {} - BOOST_CONTAINER_FORCEINLINE explicit tree(const key_compare& comp, const allocator_type& a) + inline explicit tree(const key_compare& comp, const allocator_type& a) : AllocHolder(ValComp(comp), a) {} - BOOST_CONTAINER_FORCEINLINE explicit tree(const allocator_type& a) + inline explicit tree(const allocator_type& a) : AllocHolder(a) {} @@ -616,19 +616,19 @@ class tree public: - BOOST_CONTAINER_FORCEINLINE tree(const tree& x) + inline tree(const tree& x) : AllocHolder(x, x.value_comp()) { this->icont().clone_from (x.icont(), typename AllocHolder::cloner(*this), Destroyer(this->node_alloc())); } - BOOST_CONTAINER_FORCEINLINE tree(BOOST_RV_REF(tree) x) + inline tree(BOOST_RV_REF(tree) x) BOOST_NOEXCEPT_IF(boost::container::dtl::is_nothrow_move_constructible<Compare>::value) : AllocHolder(BOOST_MOVE_BASE(AllocHolder, x), x.value_comp()) {} - BOOST_CONTAINER_FORCEINLINE tree(const tree& x, const allocator_type &a) + inline tree(const tree& x, const allocator_type &a) : AllocHolder(x.value_comp(), a) { this->icont().clone_from @@ -649,7 +649,7 @@ class tree //AllocHolder clears in case of exception } - BOOST_CONTAINER_FORCEINLINE ~tree() + inline ~tree() {} //AllocHolder clears the tree tree& operator=(BOOST_COPY_ASSIGN_REF(tree) x) @@ -729,56 +729,56 @@ class tree public: // accessors: - BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE + BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline value_compare value_comp() const { return value_compare(this->key_comp()); } - BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE + BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline key_compare key_comp() const { return this->icont().key_comp(); } - BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE + BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline allocator_type get_allocator() const { return allocator_type(this->node_alloc()); } - BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE + BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline const stored_allocator_type &get_stored_allocator() const { return this->node_alloc(); } - BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE + BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline stored_allocator_type &get_stored_allocator() { return this->node_alloc(); } - BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE + BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline iterator begin() { return iterator(this->icont().begin()); } - BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE + BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline const_iterator begin() const { return this->cbegin(); } - BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE + BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline iterator end() { return iterator(this->icont().end()); } - BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE + BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline const_iterator end() const { return this->cend(); } - BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE + BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline reverse_iterator rbegin() { return reverse_iterator(end()); } - BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE + BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline const_reverse_iterator rbegin() const { return this->crbegin(); } - BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE + BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline reverse_iterator rend() { return reverse_iterator(begin()); } - BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE + BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline const_reverse_iterator rend() const { return this->crend(); } @@ -787,7 +787,7 @@ class tree //! <b>Throws</b>: Nothing. //! //! <b>Complexity</b>: Constant. - BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE + BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline const_iterator cbegin() const { return const_iterator(this->non_const_icont().begin()); } @@ -796,7 +796,7 @@ class tree //! <b>Throws</b>: Nothing. //! //! <b>Complexity</b>: Constant. - BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE + BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline const_iterator cend() const { return const_iterator(this->non_const_icont().end()); } @@ -806,7 +806,7 @@ class tree //! <b>Throws</b>: Nothing. //! //! <b>Complexity</b>: Constant. - BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE + BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline const_reverse_iterator crbegin() const { return const_reverse_iterator(cend()); } @@ -816,23 +816,23 @@ class tree //! <b>Throws</b>: Nothing. //! //! <b>Complexity</b>: Constant. - BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE + BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline const_reverse_iterator crend() const { return const_reverse_iterator(cbegin()); } - BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE + BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline bool empty() const { return !this->size(); } - BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE + BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline size_type size() const { return this->icont().size(); } - BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE + BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline size_type max_size() const { return AllocHolder::max_size(); } - BOOST_CONTAINER_FORCEINLINE void swap(ThisType& x) + inline void swap(ThisType& x) BOOST_NOEXCEPT_IF( allocator_traits_type::is_always_equal::value && boost::container::dtl::is_nothrow_swappable<Compare>::value ) { AllocHolder::swap(x); } @@ -962,11 +962,11 @@ class tree #if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) template <class... Args> - BOOST_CONTAINER_FORCEINLINE std::pair<iterator, bool> emplace_unique(BOOST_FWD_REF(Args)... args) + inline std::pair<iterator, bool> emplace_unique(BOOST_FWD_REF(Args)... args) { return this->emplace_unique_node(AllocHolder::create_node(boost::forward<Args>(args)...)); } template <class... Args> - BOOST_CONTAINER_FORCEINLINE iterator emplace_hint_unique(const_iterator hint, BOOST_FWD_REF(Args)... args) + inline iterator emplace_hint_unique(const_iterator hint, BOOST_FWD_REF(Args)... args) { return this->emplace_hint_unique_node(hint, AllocHolder::create_node(boost::forward<Args>(args)...)); } template <class... Args> @@ -991,7 +991,7 @@ class tree } template <class KeyType, class... Args> - BOOST_CONTAINER_FORCEINLINE std::pair<iterator, bool> try_emplace + inline std::pair<iterator, bool> try_emplace (const_iterator hint, BOOST_FWD_REF(KeyType) key, BOOST_FWD_REF(Args)... args) { insert_commit_data data; @@ -1039,7 +1039,7 @@ class tree }\ \ template <class KeyType BOOST_MOVE_I##N BOOST_MOVE_CLASS##N>\ - BOOST_CONTAINER_FORCEINLINE std::pair<iterator, bool>\ + inline std::pair<iterator, bool>\ try_emplace(const_iterator hint, BOOST_FWD_REF(KeyType) key BOOST_MOVE_I##N BOOST_MOVE_UREF##N)\ {\ insert_commit_data data;\ @@ -1122,7 +1122,7 @@ class tree return iterator(this->icont().erase_and_dispose(position.get(), Destroyer(this->node_alloc()))); } - BOOST_CONTAINER_FORCEINLINE size_type erase(const key_type& k) + inline size_type erase(const key_type& k) { return AllocHolder::erase_key(k, alloc_version()); } size_type erase_unique(const key_type& k) @@ -1209,105 +1209,105 @@ class tree } template<class C2> - BOOST_CONTAINER_FORCEINLINE void merge_unique(tree<T, KeyOfValue, C2, Allocator, Options>& source) + inline void merge_unique(tree<T, KeyOfValue, C2, Allocator, Options>& source) { return this->icont().merge_unique(source.icont()); } template<class C2> - BOOST_CONTAINER_FORCEINLINE void merge_equal(tree<T, KeyOfValue, C2, Allocator, Options>& source) + inline void merge_equal(tree<T, KeyOfValue, C2, Allocator, Options>& source) { return this->icont().merge_equal(source.icont()); } - BOOST_CONTAINER_FORCEINLINE void clear() + inline void clear() { AllocHolder::clear(alloc_version()); } // search operations. Const and non-const overloads even if no iterator is returned // so splay implementations can to their rebalancing when searching in non-const versions - BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE + BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline iterator find(const key_type& k) { return iterator(this->icont().find(k)); } - BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE + BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline const_iterator find(const key_type& k) const { return const_iterator(this->non_const_icont().find(k)); } template <class K> - BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE + BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline typename dtl::enable_if_transparent<key_compare, K, iterator>::type find(const K& k) { return iterator(this->icont().find(k, KeyNodeCompare())); } template <class K> - BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE + BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline typename dtl::enable_if_transparent<key_compare, K, const_iterator>::type find(const K& k) const { return const_iterator(this->non_const_icont().find(k, KeyNodeCompare())); } - BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE + BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline size_type count(const key_type& k) const { return size_type(this->icont().count(k)); } template <class K> - BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE + BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline typename dtl::enable_if_transparent<key_compare, K, size_type>::type count(const K& k) const { return size_type(this->icont().count(k, KeyNodeCompare())); } - BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE + BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline bool contains(const key_type& x) const { return this->find(x) != this->cend(); } template<typename K> - BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE + BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline typename dtl::enable_if_transparent<key_compare, K, bool>::type contains(const K& x) const { return this->find(x) != this->cend(); } - BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE + BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline iterator lower_bound(const key_type& k) { return iterator(this->icont().lower_bound(k)); } - BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE + BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline const_iterator lower_bound(const key_type& k) const { return const_iterator(this->non_const_icont().lower_bound(k)); } template <class K> - BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE + BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline typename dtl::enable_if_transparent<key_compare, K, iterator>::type lower_bound(const K& k) { return iterator(this->icont().lower_bound(k, KeyNodeCompare())); } template <class K> - BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE + BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline typename dtl::enable_if_transparent<key_compare, K, const_iterator>::type lower_bound(const K& k) const { return const_iterator(this->non_const_icont().lower_bound(k, KeyNodeCompare())); } - BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE + BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline iterator upper_bound(const key_type& k) { return iterator(this->icont().upper_bound(k)); } - BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE + BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline const_iterator upper_bound(const key_type& k) const { return const_iterator(this->non_const_icont().upper_bound(k)); } template <class K> - BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE + BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline typename dtl::enable_if_transparent<key_compare, K, iterator>::type upper_bound(const K& k) { return iterator(this->icont().upper_bound(k, KeyNodeCompare())); } template <class K> - BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE + BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline typename dtl::enable_if_transparent<key_compare, K, const_iterator>::type upper_bound(const K& k) const { return const_iterator(this->non_const_icont().upper_bound(k, KeyNodeCompare())); } - BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE + BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline std::pair<iterator,iterator> equal_range(const key_type& k) { std::pair<iiterator, iiterator> ret = this->icont().equal_range(k); return std::pair<iterator,iterator>(iterator(ret.first), iterator(ret.second)); } - BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE + BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline std::pair<const_iterator, const_iterator> equal_range(const key_type& k) const { std::pair<iiterator, iiterator> ret = @@ -1317,7 +1317,7 @@ class tree } template <class K> - BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE + BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline typename dtl::enable_if_transparent<key_compare, K, std::pair<iterator,iterator> >::type equal_range(const K& k) { @@ -1327,7 +1327,7 @@ class tree } template <class K> - BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE + BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline typename dtl::enable_if_transparent<key_compare, K, std::pair<const_iterator, const_iterator> >::type equal_range(const K& k) const { @@ -1337,7 +1337,7 @@ class tree (const_iterator(ret.first), const_iterator(ret.second)); } - BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE + BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline std::pair<iterator,iterator> lower_bound_range(const key_type& k) { std::pair<iiterator, iiterator> ret = @@ -1345,7 +1345,7 @@ class tree return std::pair<iterator,iterator>(iterator(ret.first), iterator(ret.second)); } - BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE + BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline std::pair<const_iterator, const_iterator> lower_bound_range(const key_type& k) const { std::pair<iiterator, iiterator> ret = @@ -1355,7 +1355,7 @@ class tree } template <class K> - BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE + BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline typename dtl::enable_if_transparent<key_compare, K, std::pair<iterator,iterator> >::type lower_bound_range(const K& k) { @@ -1365,7 +1365,7 @@ class tree } template <class K> - BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE + BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline typename dtl::enable_if_transparent<key_compare, K, std::pair<const_iterator, const_iterator> >::type lower_bound_range(const K& k) const { @@ -1375,34 +1375,34 @@ class tree (const_iterator(ret.first), const_iterator(ret.second)); } - BOOST_CONTAINER_FORCEINLINE void rebalance() + inline void rebalance() { intrusive_tree_proxy_t::rebalance(this->icont()); } - BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE + BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline friend bool operator==(const tree& x, const tree& y) { return x.size() == y.size() && ::boost::container::algo_equal(x.begin(), x.end(), y.begin()); } - BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE + BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline friend bool operator<(const tree& x, const tree& y) { return ::boost::container::algo_lexicographical_compare(x.begin(), x.end(), y.begin(), y.end()); } - BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE + BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline friend bool operator!=(const tree& x, const tree& y) { return !(x == y); } - BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE + BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline friend bool operator>(const tree& x, const tree& y) { return y < x; } - BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE + BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline friend bool operator<=(const tree& x, const tree& y) { return !(y < x); } - BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE + BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline friend bool operator>=(const tree& x, const tree& y) { return !(x < y); } - BOOST_CONTAINER_FORCEINLINE friend void swap(tree& x, tree& y) + inline friend void swap(tree& x, tree& y) BOOST_NOEXCEPT_IF( allocator_traits_type::is_always_equal::value && boost::container::dtl::is_nothrow_swappable<Compare>::value ) { x.swap(y); } diff --git a/contrib/restricted/boost/container/include/boost/container/detail/value_init.hpp b/contrib/restricted/boost/container/include/boost/container/detail/value_init.hpp index 35b0aa11d3..08a1f84121 100644 --- a/contrib/restricted/boost/container/include/boost/container/detail/value_init.hpp +++ b/contrib/restricted/boost/container/include/boost/container/detail/value_init.hpp @@ -31,13 +31,13 @@ namespace dtl { template<class T> struct value_init { - value_init() + BOOST_CONTAINER_FORCEINLINE value_init() : m_t() {} - operator T &() { return m_t; } + BOOST_CONTAINER_FORCEINLINE operator T &() { return m_t; } - T &get() { return m_t; } + BOOST_CONTAINER_FORCEINLINE T &get() { return m_t; } T m_t; }; diff --git a/contrib/restricted/boost/container/include/boost/container/detail/workaround.hpp b/contrib/restricted/boost/container/include/boost/container/detail/workaround.hpp index 64daa0c1d9..23342bb0d1 100644 --- a/contrib/restricted/boost/container/include/boost/container/detail/workaround.hpp +++ b/contrib/restricted/boost/container/include/boost/container/detail/workaround.hpp @@ -101,8 +101,11 @@ #elif defined(BOOST_MSVC) && (_MSC_VER <= 1900 || defined(_DEBUG)) //"__forceinline" and MSVC seems to have some bugs in old versions and in debug mode #define BOOST_CONTAINER_FORCEINLINE inline -#elif defined(BOOST_GCC) && ((__GNUC__ <= 5) || defined(__MINGW32__)) +#elif defined(BOOST_CLANG) || (defined(BOOST_GCC) && ((__GNUC__ <= 5) || defined(__MINGW32__))) //Older GCCs and MinGw have problems with forceinline + //Clang can have code bloat issues with forceinline, see + //https://lists.boost.org/boost-users/2023/04/91445.php and + //https://github.com/llvm/llvm-project/issues/62202 #define BOOST_CONTAINER_FORCEINLINE inline #else #define BOOST_CONTAINER_FORCEINLINE BOOST_FORCEINLINE @@ -187,4 +190,44 @@ BOOST_FORCEINLINE BOOST_CXX14_CONSTEXPR void ignore(T1 const&) # define BOOST_CONTAINER_CATCH_END } #endif +#ifndef BOOST_NO_CXX11_STATIC_ASSERT +# ifndef BOOST_NO_CXX11_VARIADIC_MACROS +# define BOOST_CONTAINER_STATIC_ASSERT( ... ) static_assert(__VA_ARGS__, #__VA_ARGS__) +# else +# define BOOST_CONTAINER_STATIC_ASSERT( B ) static_assert(B, #B) +# endif +#else +namespace boost { + namespace container { + namespace dtl { + + template<bool B> + struct STATIC_ASSERTION_FAILURE; + + template<> + struct STATIC_ASSERTION_FAILURE<true> {}; + + template<unsigned> struct static_assert_test {}; + + } + } +} + +#define BOOST_CONTAINER_STATIC_ASSERT(B) \ + typedef ::boost::container::dtl::static_assert_test<\ + (unsigned)sizeof(::boost::container::dtl::STATIC_ASSERTION_FAILURE<bool(B)>)>\ + BOOST_JOIN(boost_container_static_assert_typedef_, __LINE__) BOOST_ATTRIBUTE_UNUSED + +#endif + +#ifndef BOOST_NO_CXX11_STATIC_ASSERT +# ifndef BOOST_NO_CXX11_VARIADIC_MACROS +# define BOOST_CONTAINER_STATIC_ASSERT_MSG( ... ) static_assert(__VA_ARGS__) +# else +# define BOOST_CONTAINER_STATIC_ASSERT_MSG( B, Msg ) static_assert( B, Msg ) +# endif +#else +# define BOOST_CONTAINER_STATIC_ASSERT_MSG( B, Msg ) BOOST_CONTAINER_STATIC_ASSERT( B ) +#endif + #endif //#ifndef BOOST_CONTAINER_DETAIL_WORKAROUND_HPP diff --git a/contrib/restricted/boost/container/include/boost/container/new_allocator.hpp b/contrib/restricted/boost/container/include/boost/container/new_allocator.hpp index 82c42a957c..b01b9ba8f2 100644 --- a/contrib/restricted/boost/container/include/boost/container/new_allocator.hpp +++ b/contrib/restricted/boost/container/include/boost/container/new_allocator.hpp @@ -129,25 +129,23 @@ class new_allocator //!Default constructor //!Never throws - new_allocator() BOOST_NOEXCEPT_OR_NOTHROW + inline new_allocator() BOOST_NOEXCEPT_OR_NOTHROW {} //!Constructor from other new_allocator. //!Never throws - new_allocator(const new_allocator &) BOOST_NOEXCEPT_OR_NOTHROW + inline new_allocator(const new_allocator &) BOOST_NOEXCEPT_OR_NOTHROW {} //!Copy assignment operator from other new_allocator. //!Never throws - new_allocator& operator=(const new_allocator &) BOOST_NOEXCEPT_OR_NOTHROW - { - return *this; - } + inline new_allocator& operator=(const new_allocator &) BOOST_NOEXCEPT_OR_NOTHROW + { return *this; } //!Constructor from related new_allocator. //!Never throws template<class T2> - new_allocator(const new_allocator<T2> &) BOOST_NOEXCEPT_OR_NOTHROW + inline new_allocator(const new_allocator<T2> &) BOOST_NOEXCEPT_OR_NOTHROW {} //!Allocates memory for an array of count elements. @@ -174,22 +172,22 @@ class new_allocator //!Returns the maximum number of elements that could be allocated. //!Never throws - size_type max_size() const BOOST_NOEXCEPT_OR_NOTHROW + inline size_type max_size() const BOOST_NOEXCEPT_OR_NOTHROW { return std::size_t(-1)/(2*sizeof(T)); } //!Swaps two allocators, does nothing //!because this new_allocator is stateless - friend void swap(new_allocator &, new_allocator &) BOOST_NOEXCEPT_OR_NOTHROW + inline friend void swap(new_allocator &, new_allocator &) BOOST_NOEXCEPT_OR_NOTHROW {} //!An new_allocator always compares to true, as memory allocated with one //!instance can be deallocated by another instance - friend bool operator==(const new_allocator &, const new_allocator &) BOOST_NOEXCEPT_OR_NOTHROW + inline friend bool operator==(const new_allocator &, const new_allocator &) BOOST_NOEXCEPT_OR_NOTHROW { return true; } //!An new_allocator always compares to false, as memory allocated with one //!instance can be deallocated by another instance - friend bool operator!=(const new_allocator &, const new_allocator &) BOOST_NOEXCEPT_OR_NOTHROW + inline friend bool operator!=(const new_allocator &, const new_allocator &) BOOST_NOEXCEPT_OR_NOTHROW { return false; } }; diff --git a/contrib/restricted/boost/container/include/boost/container/node_handle.hpp b/contrib/restricted/boost/container/include/boost/container/node_handle.hpp index 323b79c348..41bea974c3 100644 --- a/contrib/restricted/boost/container/include/boost/container/node_handle.hpp +++ b/contrib/restricted/boost/container/include/boost/container/node_handle.hpp @@ -21,7 +21,6 @@ #include <boost/container/detail/config_begin.hpp> #include <boost/container/detail/workaround.hpp> -#include <boost/static_assert.hpp> #include <boost/container/detail/placement_new.hpp> #include <boost/move/detail/to_raw_pointer.hpp> #include <boost/container/allocator_traits.hpp> @@ -33,6 +32,12 @@ #include <boost/container/detail/mpl.hpp> #include <boost/assert.hpp> +//GCC 12 is confused about maybe uninitialized allocators +#if defined(BOOST_GCC) && (BOOST_GCC >= 120000) && (BOOST_GCC < 130000) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wmaybe-uninitialized" +#endif + //!\file @@ -60,11 +65,11 @@ class node_handle_friend public: template<class NH> - BOOST_CONTAINER_FORCEINLINE static void destroy_alloc(NH &nh) BOOST_NOEXCEPT + inline static void destroy_alloc(NH &nh) BOOST_NOEXCEPT { nh.destroy_alloc(); } template<class NH> - BOOST_CONTAINER_FORCEINLINE static typename NH::node_pointer &get_node_pointer(NH &nh) BOOST_NOEXCEPT + inline static typename NH::node_pointer &get_node_pointer(NH &nh) BOOST_NOEXCEPT { return nh.get_node_pointer(); } }; @@ -252,7 +257,7 @@ class node_handle //! <b>Throws</b>: Nothing. value_type& value() const BOOST_NOEXCEPT { - BOOST_STATIC_ASSERT((dtl::is_same<KeyMapped, void>::value)); + BOOST_CONTAINER_STATIC_ASSERT((dtl::is_same<KeyMapped, void>::value)); BOOST_ASSERT(!empty()); return m_ptr->get_data(); } @@ -267,7 +272,7 @@ class node_handle //! <b>Requires</b>: Modifying the key through the returned reference is permitted. key_type& key() const BOOST_NOEXCEPT { - BOOST_STATIC_ASSERT((!dtl::is_same<KeyMapped, void>::value)); + BOOST_CONTAINER_STATIC_ASSERT((!dtl::is_same<KeyMapped, void>::value)); BOOST_ASSERT(!empty()); return const_cast<key_type &>(KeyMapped().key_of_value(m_ptr->get_data())); } @@ -280,7 +285,7 @@ class node_handle //! <b>Throws</b>: Nothing. mapped_type& mapped() const BOOST_NOEXCEPT { - BOOST_STATIC_ASSERT((!dtl::is_same<KeyMapped, void>::value)); + BOOST_CONTAINER_STATIC_ASSERT((!dtl::is_same<KeyMapped, void>::value)); BOOST_ASSERT(!empty()); return KeyMapped().mapped_of_value(m_ptr->get_data()); } @@ -299,10 +304,10 @@ class node_handle //! <b>Returns</b>: m_ptr != nullptr. //! #ifdef BOOST_CONTAINER_DOXYGEN_INVOKED - BOOST_CONTAINER_FORCEINLINE explicit operator bool + inline explicit operator bool #else private: struct bool_conversion {int for_bool; int for_arg(); }; typedef int bool_conversion::* explicit_bool_arg; - public: BOOST_CONTAINER_FORCEINLINE operator explicit_bool_arg + public: inline operator explicit_bool_arg #endif ()const BOOST_NOEXCEPT { return m_ptr ? &bool_conversion::for_bool : explicit_bool_arg(0); } @@ -343,6 +348,7 @@ class node_handle nh.move_construct_alloc(this->node_alloc()); this->destroy_alloc(); } + ::boost::adl_move_swap(m_ptr, nh.m_ptr); } @@ -440,6 +446,10 @@ struct insert_return_type_base } //namespace container { } //namespace boost { +#if defined(BOOST_GCC) && (BOOST_GCC >= 120000) && (BOOST_GCC < 130000) +#pragma GCC diagnostic pop +#endif + #include <boost/container/detail/config_end.hpp> #endif //BOOST_CONTAINER_NODE_HANDLE_HPP diff --git a/contrib/restricted/boost/container/include/boost/container/options.hpp b/contrib/restricted/boost/container/include/boost/container/options.hpp index c58ff82a22..48edd38197 100644 --- a/contrib/restricted/boost/container/include/boost/container/options.hpp +++ b/contrib/restricted/boost/container/include/boost/container/options.hpp @@ -23,8 +23,8 @@ #include <boost/container/detail/config_begin.hpp> #include <boost/container/container_fwd.hpp> +#include <boost/container/detail/workaround.hpp> #include <boost/intrusive/pack_options.hpp> -#include <boost/static_assert.hpp> namespace boost { namespace container { @@ -608,7 +608,7 @@ struct deque_opt { static const std::size_t block_bytes = BlockBytes; static const std::size_t block_size = BlockSize; - BOOST_STATIC_ASSERT_MSG(!(block_bytes && block_size), "block_bytes and block_size can't be specified at the same time"); + BOOST_CONTAINER_STATIC_ASSERT_MSG(!(block_bytes && block_size), "block_bytes and block_size can't be specified at the same time"); }; typedef deque_opt<0u, 0u> deque_null_opt; diff --git a/contrib/restricted/boost/container/include/boost/container/scoped_allocator.hpp b/contrib/restricted/boost/container/include/boost/container/scoped_allocator.hpp index 3e9c6847a2..a979ad658a 100644 --- a/contrib/restricted/boost/container/include/boost/container/scoped_allocator.hpp +++ b/contrib/restricted/boost/container/include/boost/container/scoped_allocator.hpp @@ -77,10 +77,10 @@ struct outermost_allocator_imp { typedef MaybeScopedAlloc type; - BOOST_CONTAINER_FORCEINLINE static type &get(MaybeScopedAlloc &a) + inline static type &get(MaybeScopedAlloc &a) { return a; } - BOOST_CONTAINER_FORCEINLINE static const type &get(const MaybeScopedAlloc &a) + inline static const type &get(const MaybeScopedAlloc &a) { return a; } }; @@ -90,10 +90,10 @@ struct outermost_allocator_imp<MaybeScopedAlloc, true> typedef typename MaybeScopedAlloc::outer_allocator_type outer_type; typedef typename outermost_allocator_type_impl<outer_type>::type type; - BOOST_CONTAINER_FORCEINLINE static type &get(MaybeScopedAlloc &a) + inline static type &get(MaybeScopedAlloc &a) { return outermost_allocator_imp<outer_type>::get(a.outer_allocator()); } - BOOST_CONTAINER_FORCEINLINE static const type &get(const MaybeScopedAlloc &a) + inline static const type &get(const MaybeScopedAlloc &a) { return outermost_allocator_imp<outer_type>::get(a.outer_allocator()); } }; @@ -110,12 +110,12 @@ struct outermost_allocator {}; template <typename Allocator> -BOOST_CONTAINER_FORCEINLINE typename outermost_allocator<Allocator>::type & +inline typename outermost_allocator<Allocator>::type & get_outermost_allocator(Allocator &a) { return outermost_allocator<Allocator>::get(a); } template <typename Allocator> -BOOST_CONTAINER_FORCEINLINE const typename outermost_allocator<Allocator>::type & +inline const typename outermost_allocator<Allocator>::type & get_outermost_allocator(const Allocator &a) { return outermost_allocator<Allocator>::get(a); } @@ -159,34 +159,34 @@ class scoped_allocator_adaptor_base inner_allocator_type::is_always_equal::value > is_always_equal; - BOOST_CONTAINER_FORCEINLINE scoped_allocator_adaptor_base() + inline scoped_allocator_adaptor_base() {} template <class OuterA2> - BOOST_CONTAINER_FORCEINLINE scoped_allocator_adaptor_base(BOOST_FWD_REF(OuterA2) outerAlloc, const InnerAllocs &...args) + inline scoped_allocator_adaptor_base(BOOST_FWD_REF(OuterA2) outerAlloc, const InnerAllocs &...args) : outer_allocator_type(::boost::forward<OuterA2>(outerAlloc)) , m_inner(args...) {} - BOOST_CONTAINER_FORCEINLINE scoped_allocator_adaptor_base(const scoped_allocator_adaptor_base& other) + inline scoped_allocator_adaptor_base(const scoped_allocator_adaptor_base& other) : outer_allocator_type(other.outer_allocator()) , m_inner(other.inner_allocator()) {} - BOOST_CONTAINER_FORCEINLINE scoped_allocator_adaptor_base(BOOST_RV_REF(scoped_allocator_adaptor_base) other) + inline scoped_allocator_adaptor_base(BOOST_RV_REF(scoped_allocator_adaptor_base) other) : outer_allocator_type(::boost::move(other.outer_allocator())) , m_inner(::boost::move(other.inner_allocator())) {} template <class OuterA2> - BOOST_CONTAINER_FORCEINLINE scoped_allocator_adaptor_base + inline scoped_allocator_adaptor_base (const scoped_allocator_adaptor_base<OuterA2, InnerAllocs...>& other) : outer_allocator_type(other.outer_allocator()) , m_inner(other.inner_allocator()) {} template <class OuterA2> - BOOST_CONTAINER_FORCEINLINE scoped_allocator_adaptor_base + inline scoped_allocator_adaptor_base (BOOST_RV_REF_BEG scoped_allocator_adaptor_base <OuterA2, InnerAllocs...> BOOST_RV_REF_END other) : outer_allocator_type(other.outer_allocator()) @@ -197,7 +197,7 @@ class scoped_allocator_adaptor_base struct internal_type_t{}; template <class OuterA2> - BOOST_CONTAINER_FORCEINLINE scoped_allocator_adaptor_base + inline scoped_allocator_adaptor_base ( internal_type_t , BOOST_FWD_REF(OuterA2) outerAlloc , const inner_allocator_type &inner) @@ -207,7 +207,7 @@ class scoped_allocator_adaptor_base public: - BOOST_CONTAINER_FORCEINLINE scoped_allocator_adaptor_base &operator= + inline scoped_allocator_adaptor_base &operator= (BOOST_COPY_ASSIGN_REF(scoped_allocator_adaptor_base) other) { outer_allocator_type::operator=(other.outer_allocator()); @@ -215,35 +215,35 @@ class scoped_allocator_adaptor_base return *this; } - BOOST_CONTAINER_FORCEINLINE scoped_allocator_adaptor_base &operator=(BOOST_RV_REF(scoped_allocator_adaptor_base) other) + inline scoped_allocator_adaptor_base &operator=(BOOST_RV_REF(scoped_allocator_adaptor_base) other) { outer_allocator_type::operator=(boost::move(other.outer_allocator())); m_inner = ::boost::move(other.inner_allocator()); return *this; } - BOOST_CONTAINER_FORCEINLINE void swap(scoped_allocator_adaptor_base &r) + inline void swap(scoped_allocator_adaptor_base &r) { boost::adl_move_swap(this->outer_allocator(), r.outer_allocator()); boost::adl_move_swap(this->m_inner, r.inner_allocator()); } - BOOST_CONTAINER_FORCEINLINE friend void swap(scoped_allocator_adaptor_base &l, scoped_allocator_adaptor_base &r) + inline friend void swap(scoped_allocator_adaptor_base &l, scoped_allocator_adaptor_base &r) { l.swap(r); } - BOOST_CONTAINER_FORCEINLINE inner_allocator_type& inner_allocator() BOOST_NOEXCEPT_OR_NOTHROW + inline inner_allocator_type& inner_allocator() BOOST_NOEXCEPT_OR_NOTHROW { return m_inner; } - BOOST_CONTAINER_FORCEINLINE inner_allocator_type const& inner_allocator() const BOOST_NOEXCEPT_OR_NOTHROW + inline inner_allocator_type const& inner_allocator() const BOOST_NOEXCEPT_OR_NOTHROW { return m_inner; } - BOOST_CONTAINER_FORCEINLINE outer_allocator_type & outer_allocator() BOOST_NOEXCEPT_OR_NOTHROW + inline outer_allocator_type & outer_allocator() BOOST_NOEXCEPT_OR_NOTHROW { return static_cast<outer_allocator_type&>(*this); } - BOOST_CONTAINER_FORCEINLINE const outer_allocator_type &outer_allocator() const BOOST_NOEXCEPT_OR_NOTHROW + inline const outer_allocator_type &outer_allocator() const BOOST_NOEXCEPT_OR_NOTHROW { return static_cast<const outer_allocator_type&>(*this); } - BOOST_CONTAINER_FORCEINLINE scoped_allocator_type select_on_container_copy_construction() const + inline scoped_allocator_type select_on_container_copy_construction() const { return scoped_allocator_type (internal_type_t() @@ -302,33 +302,33 @@ class scoped_allocator_adaptor_base<OuterAlloc, true, BOOST_MOVE_TARG##N>\ inner_allocator_type::is_always_equal::value\ > is_always_equal;\ \ - BOOST_CONTAINER_FORCEINLINE scoped_allocator_adaptor_base(){}\ + inline scoped_allocator_adaptor_base(){}\ \ template <class OuterA2>\ - BOOST_CONTAINER_FORCEINLINE scoped_allocator_adaptor_base(BOOST_FWD_REF(OuterA2) outerAlloc, BOOST_MOVE_CREF##N)\ + inline scoped_allocator_adaptor_base(BOOST_FWD_REF(OuterA2) outerAlloc, BOOST_MOVE_CREF##N)\ : outer_allocator_type(::boost::forward<OuterA2>(outerAlloc))\ , m_inner(BOOST_MOVE_ARG##N)\ {}\ \ - BOOST_CONTAINER_FORCEINLINE scoped_allocator_adaptor_base(const scoped_allocator_adaptor_base& other)\ + inline scoped_allocator_adaptor_base(const scoped_allocator_adaptor_base& other)\ : outer_allocator_type(other.outer_allocator())\ , m_inner(other.inner_allocator())\ {}\ \ - BOOST_CONTAINER_FORCEINLINE scoped_allocator_adaptor_base(BOOST_RV_REF(scoped_allocator_adaptor_base) other)\ + inline scoped_allocator_adaptor_base(BOOST_RV_REF(scoped_allocator_adaptor_base) other)\ : outer_allocator_type(::boost::move(other.outer_allocator()))\ , m_inner(::boost::move(other.inner_allocator()))\ {}\ \ template <class OuterA2>\ - BOOST_CONTAINER_FORCEINLINE scoped_allocator_adaptor_base\ + inline scoped_allocator_adaptor_base\ (const scoped_allocator_adaptor_base<OuterA2, true, BOOST_MOVE_TARG##N>& other)\ : outer_allocator_type(other.outer_allocator())\ , m_inner(other.inner_allocator())\ {}\ \ template <class OuterA2>\ - BOOST_CONTAINER_FORCEINLINE scoped_allocator_adaptor_base\ + inline scoped_allocator_adaptor_base\ (BOOST_RV_REF_BEG scoped_allocator_adaptor_base<OuterA2, true, BOOST_MOVE_TARG##N> BOOST_RV_REF_END other)\ : outer_allocator_type(other.outer_allocator())\ , m_inner(other.inner_allocator())\ @@ -338,14 +338,14 @@ class scoped_allocator_adaptor_base<OuterAlloc, true, BOOST_MOVE_TARG##N>\ struct internal_type_t{};\ \ template <class OuterA2>\ - BOOST_CONTAINER_FORCEINLINE scoped_allocator_adaptor_base\ + inline scoped_allocator_adaptor_base\ ( internal_type_t, BOOST_FWD_REF(OuterA2) outerAlloc, const inner_allocator_type &inner)\ : outer_allocator_type(::boost::forward<OuterA2>(outerAlloc))\ , m_inner(inner)\ {}\ \ public:\ - BOOST_CONTAINER_FORCEINLINE scoped_allocator_adaptor_base &operator=\ + inline scoped_allocator_adaptor_base &operator=\ (BOOST_COPY_ASSIGN_REF(scoped_allocator_adaptor_base) other)\ {\ outer_allocator_type::operator=(other.outer_allocator());\ @@ -353,35 +353,35 @@ class scoped_allocator_adaptor_base<OuterAlloc, true, BOOST_MOVE_TARG##N>\ return *this;\ }\ \ - BOOST_CONTAINER_FORCEINLINE scoped_allocator_adaptor_base &operator=(BOOST_RV_REF(scoped_allocator_adaptor_base) other)\ + inline scoped_allocator_adaptor_base &operator=(BOOST_RV_REF(scoped_allocator_adaptor_base) other)\ {\ outer_allocator_type::operator=(boost::move(other.outer_allocator()));\ m_inner = ::boost::move(other.inner_allocator());\ return *this;\ }\ \ - BOOST_CONTAINER_FORCEINLINE void swap(scoped_allocator_adaptor_base &r)\ + inline void swap(scoped_allocator_adaptor_base &r)\ {\ boost::adl_move_swap(this->outer_allocator(), r.outer_allocator());\ boost::adl_move_swap(this->m_inner, r.inner_allocator());\ }\ \ - BOOST_CONTAINER_FORCEINLINE friend void swap(scoped_allocator_adaptor_base &l, scoped_allocator_adaptor_base &r)\ + inline friend void swap(scoped_allocator_adaptor_base &l, scoped_allocator_adaptor_base &r)\ { l.swap(r); }\ \ - BOOST_CONTAINER_FORCEINLINE inner_allocator_type& inner_allocator()\ + inline inner_allocator_type& inner_allocator()\ { return m_inner; }\ \ - BOOST_CONTAINER_FORCEINLINE inner_allocator_type const& inner_allocator() const\ + inline inner_allocator_type const& inner_allocator() const\ { return m_inner; }\ \ - BOOST_CONTAINER_FORCEINLINE outer_allocator_type & outer_allocator()\ + inline outer_allocator_type & outer_allocator()\ { return static_cast<outer_allocator_type&>(*this); }\ \ - BOOST_CONTAINER_FORCEINLINE const outer_allocator_type &outer_allocator() const\ + inline const outer_allocator_type &outer_allocator() const\ { return static_cast<const outer_allocator_type&>(*this); }\ \ - BOOST_CONTAINER_FORCEINLINE scoped_allocator_type select_on_container_copy_construction() const\ + inline scoped_allocator_type select_on_container_copy_construction() const\ {\ return scoped_allocator_type\ (internal_type_t()\ @@ -438,30 +438,30 @@ class scoped_allocator_adaptor_base< OuterAlloc BOOST_CONTAINER_SCOPEDALLOC_DUMM typedef typename outer_traits_type:: is_always_equal is_always_equal; - BOOST_CONTAINER_FORCEINLINE scoped_allocator_adaptor_base() + inline scoped_allocator_adaptor_base() {} template <class OuterA2> - BOOST_CONTAINER_FORCEINLINE scoped_allocator_adaptor_base(BOOST_FWD_REF(OuterA2) outerAlloc) + inline scoped_allocator_adaptor_base(BOOST_FWD_REF(OuterA2) outerAlloc) : outer_allocator_type(::boost::forward<OuterA2>(outerAlloc)) {} - BOOST_CONTAINER_FORCEINLINE scoped_allocator_adaptor_base(const scoped_allocator_adaptor_base& other) + inline scoped_allocator_adaptor_base(const scoped_allocator_adaptor_base& other) : outer_allocator_type(other.outer_allocator()) {} - BOOST_CONTAINER_FORCEINLINE scoped_allocator_adaptor_base(BOOST_RV_REF(scoped_allocator_adaptor_base) other) + inline scoped_allocator_adaptor_base(BOOST_RV_REF(scoped_allocator_adaptor_base) other) : outer_allocator_type(::boost::move(other.outer_allocator())) {} template <class OuterA2> - BOOST_CONTAINER_FORCEINLINE scoped_allocator_adaptor_base + inline scoped_allocator_adaptor_base (const scoped_allocator_adaptor_base<OuterA2 BOOST_CONTAINER_SCOPEDALLOC_DUMMYTRUE>& other) : outer_allocator_type(other.outer_allocator()) {} template <class OuterA2> - BOOST_CONTAINER_FORCEINLINE scoped_allocator_adaptor_base + inline scoped_allocator_adaptor_base (BOOST_RV_REF_BEG scoped_allocator_adaptor_base<OuterA2 BOOST_CONTAINER_SCOPEDALLOC_DUMMYTRUE> BOOST_RV_REF_END other) : outer_allocator_type(other.outer_allocator()) {} @@ -470,44 +470,44 @@ class scoped_allocator_adaptor_base< OuterAlloc BOOST_CONTAINER_SCOPEDALLOC_DUMM struct internal_type_t{}; template <class OuterA2> - BOOST_CONTAINER_FORCEINLINE scoped_allocator_adaptor_base(internal_type_t, BOOST_FWD_REF(OuterA2) outerAlloc, const inner_allocator_type &) + inline scoped_allocator_adaptor_base(internal_type_t, BOOST_FWD_REF(OuterA2) outerAlloc, const inner_allocator_type &) : outer_allocator_type(::boost::forward<OuterA2>(outerAlloc)) {} public: - BOOST_CONTAINER_FORCEINLINE scoped_allocator_adaptor_base &operator=(BOOST_COPY_ASSIGN_REF(scoped_allocator_adaptor_base) other) + inline scoped_allocator_adaptor_base &operator=(BOOST_COPY_ASSIGN_REF(scoped_allocator_adaptor_base) other) { outer_allocator_type::operator=(other.outer_allocator()); return *this; } - BOOST_CONTAINER_FORCEINLINE scoped_allocator_adaptor_base &operator=(BOOST_RV_REF(scoped_allocator_adaptor_base) other) + inline scoped_allocator_adaptor_base &operator=(BOOST_RV_REF(scoped_allocator_adaptor_base) other) { outer_allocator_type::operator=(boost::move(other.outer_allocator())); return *this; } - BOOST_CONTAINER_FORCEINLINE void swap(scoped_allocator_adaptor_base &r) + inline void swap(scoped_allocator_adaptor_base &r) { boost::adl_move_swap(this->outer_allocator(), r.outer_allocator()); } - BOOST_CONTAINER_FORCEINLINE friend void swap(scoped_allocator_adaptor_base &l, scoped_allocator_adaptor_base &r) + inline friend void swap(scoped_allocator_adaptor_base &l, scoped_allocator_adaptor_base &r) { l.swap(r); } - BOOST_CONTAINER_FORCEINLINE inner_allocator_type& inner_allocator() + inline inner_allocator_type& inner_allocator() { return static_cast<inner_allocator_type&>(*this); } - BOOST_CONTAINER_FORCEINLINE inner_allocator_type const& inner_allocator() const + inline inner_allocator_type const& inner_allocator() const { return static_cast<const inner_allocator_type&>(*this); } - BOOST_CONTAINER_FORCEINLINE outer_allocator_type & outer_allocator() + inline outer_allocator_type & outer_allocator() { return static_cast<outer_allocator_type&>(*this); } - BOOST_CONTAINER_FORCEINLINE const outer_allocator_type &outer_allocator() const + inline const outer_allocator_type &outer_allocator() const { return static_cast<const outer_allocator_type&>(*this); } - BOOST_CONTAINER_FORCEINLINE scoped_allocator_type select_on_container_copy_construction() const + inline scoped_allocator_type select_on_container_copy_construction() const { return scoped_allocator_type (internal_type_t() @@ -639,21 +639,21 @@ class scoped_allocator_adaptor //! <b>Effects</b>: value-initializes the OuterAlloc base class //! and the inner allocator object. - BOOST_CONTAINER_FORCEINLINE scoped_allocator_adaptor() + inline scoped_allocator_adaptor() {} - BOOST_CONTAINER_FORCEINLINE ~scoped_allocator_adaptor() + inline ~scoped_allocator_adaptor() {} //! <b>Effects</b>: initializes each allocator within the adaptor with //! the corresponding allocator from other. - BOOST_CONTAINER_FORCEINLINE scoped_allocator_adaptor(const scoped_allocator_adaptor& other) + inline scoped_allocator_adaptor(const scoped_allocator_adaptor& other) : base_type(other.base()) {} //! <b>Effects</b>: move constructs each allocator within the adaptor with //! the corresponding allocator from other. - BOOST_CONTAINER_FORCEINLINE scoped_allocator_adaptor(BOOST_RV_REF(scoped_allocator_adaptor) other) + inline scoped_allocator_adaptor(BOOST_RV_REF(scoped_allocator_adaptor) other) : base_type(::boost::move(other.base())) {} @@ -665,14 +665,14 @@ class scoped_allocator_adaptor //! with innerAllocs...(hence recursively initializing each allocator within the adaptor with the //! corresponding allocator from the argument list). template <class OuterA2> - BOOST_CONTAINER_FORCEINLINE scoped_allocator_adaptor(BOOST_FWD_REF(OuterA2) outerAlloc, const InnerAllocs & ...innerAllocs) + inline scoped_allocator_adaptor(BOOST_FWD_REF(OuterA2) outerAlloc, const InnerAllocs & ...innerAllocs) : base_type(::boost::forward<OuterA2>(outerAlloc), innerAllocs...) {} #else // #if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED) #define BOOST_CONTAINER_SCOPED_ALLOCATOR_ADAPTOR_RELATED_ALLOCATOR_CONSTRUCTOR_CODE(N)\ template <class OuterA2>\ - BOOST_CONTAINER_FORCEINLINE scoped_allocator_adaptor(BOOST_FWD_REF(OuterA2) outerAlloc BOOST_MOVE_I##N BOOST_MOVE_CREF##N)\ + inline scoped_allocator_adaptor(BOOST_FWD_REF(OuterA2) outerAlloc BOOST_MOVE_I##N BOOST_MOVE_CREF##N)\ : base_type(::boost::forward<OuterA2>(outerAlloc) BOOST_MOVE_I##N BOOST_MOVE_ARG##N)\ {}\ // @@ -685,7 +685,7 @@ class scoped_allocator_adaptor //! //! <b>Effects</b>: initializes each allocator within the adaptor with the corresponding allocator from other. template <class OuterA2> - BOOST_CONTAINER_FORCEINLINE scoped_allocator_adaptor(const scoped_allocator_adaptor<OuterA2, BOOST_CONTAINER_SCOPEDALLOC_ALLINNER> &other) + inline scoped_allocator_adaptor(const scoped_allocator_adaptor<OuterA2, BOOST_CONTAINER_SCOPEDALLOC_ALLINNER> &other) : base_type(other.base()) {} @@ -694,15 +694,15 @@ class scoped_allocator_adaptor //! <b>Effects</b>: initializes each allocator within the adaptor with the corresponding allocator //! rvalue from other. template <class OuterA2> - BOOST_CONTAINER_FORCEINLINE scoped_allocator_adaptor(BOOST_RV_REF_BEG scoped_allocator_adaptor + inline scoped_allocator_adaptor(BOOST_RV_REF_BEG scoped_allocator_adaptor <OuterA2, BOOST_CONTAINER_SCOPEDALLOC_ALLINNER> BOOST_RV_REF_END other) : base_type(::boost::move(other.base())) {} - BOOST_CONTAINER_FORCEINLINE scoped_allocator_adaptor &operator=(BOOST_COPY_ASSIGN_REF(scoped_allocator_adaptor) other) + inline scoped_allocator_adaptor &operator=(BOOST_COPY_ASSIGN_REF(scoped_allocator_adaptor) other) { return static_cast<scoped_allocator_adaptor&>(base_type::operator=(static_cast<const base_type &>(other))); } - BOOST_CONTAINER_FORCEINLINE scoped_allocator_adaptor &operator=(BOOST_RV_REF(scoped_allocator_adaptor) other) + inline scoped_allocator_adaptor &operator=(BOOST_RV_REF(scoped_allocator_adaptor) other) { return static_cast<scoped_allocator_adaptor&>(base_type::operator=(boost::move(other.base()))); } #ifdef BOOST_CONTAINER_DOXYGEN_INVOKED @@ -734,13 +734,13 @@ class scoped_allocator_adaptor //! <b>Returns</b>: //! <code>allocator_traits<OuterAlloc>:: max_size(outer_allocator())</code>. - BOOST_CONTAINER_FORCEINLINE size_type max_size() const BOOST_NOEXCEPT_OR_NOTHROW + inline size_type max_size() const BOOST_NOEXCEPT_OR_NOTHROW { return outer_traits_type::max_size(this->outer_allocator()); } //! <b>Effects</b>: //! calls <code>OUTERMOST_ALLOC_TRAITS(*this):: destroy(OUTERMOST(*this), p)</code>. template <class T> - BOOST_CONTAINER_FORCEINLINE void destroy(T* p) BOOST_NOEXCEPT_OR_NOTHROW + inline void destroy(T* p) BOOST_NOEXCEPT_OR_NOTHROW { allocator_traits<typename outermost_allocator<OuterAlloc>::type> ::destroy(get_outermost_allocator(this->outer_allocator()), p); @@ -748,17 +748,17 @@ class scoped_allocator_adaptor //! <b>Returns</b>: //! <code>allocator_traits<OuterAlloc>::allocate(outer_allocator(), n)</code>. - BOOST_CONTAINER_FORCEINLINE pointer allocate(size_type n) + inline pointer allocate(size_type n) { return outer_traits_type::allocate(this->outer_allocator(), n); } //! <b>Returns</b>: //! <code>allocator_traits<OuterAlloc>::allocate(outer_allocator(), n, hint)</code>. - BOOST_CONTAINER_FORCEINLINE pointer allocate(size_type n, const_void_pointer hint) + inline pointer allocate(size_type n, const_void_pointer hint) { return outer_traits_type::allocate(this->outer_allocator(), n, hint); } //! <b>Effects</b>: //! <code>allocator_traits<OuterAlloc>::deallocate(outer_allocator(), p, n)</code>. - BOOST_CONTAINER_FORCEINLINE void deallocate(pointer p, size_type n) + inline void deallocate(pointer p, size_type n) { outer_traits_type::deallocate(this->outer_allocator(), p, n); } #ifdef BOOST_CONTAINER_DOXYGEN_INVOKED @@ -770,9 +770,9 @@ class scoped_allocator_adaptor #endif //BOOST_CONTAINER_DOXYGEN_INVOKED #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED - BOOST_CONTAINER_FORCEINLINE base_type &base() { return *this; } + inline base_type &base() { return *this; } - BOOST_CONTAINER_FORCEINLINE const base_type &base() const { return *this; } + inline const base_type &base() const { return *this; } #endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED #if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED) @@ -806,7 +806,7 @@ class scoped_allocator_adaptor //! to true but the specific constructor does not take an allocator. This definition prevents a silent //! failure to pass an inner allocator to a contained element. -end note] template < typename T, class ...Args> - BOOST_CONTAINER_FORCEINLINE void construct(T* p, BOOST_FWD_REF(Args)...args) + inline void construct(T* p, BOOST_FWD_REF(Args)...args) { dtl::dispatch_uses_allocator ( (get_outermost_allocator)(this->outer_allocator()) @@ -819,7 +819,7 @@ class scoped_allocator_adaptor //overload selection problems when the first parameter is a pair. #define BOOST_CONTAINER_SCOPED_ALLOCATOR_CONSTRUCT_CODE(N) \ template < typename T BOOST_MOVE_I##N BOOST_MOVE_CLASSQ##N >\ - BOOST_CONTAINER_FORCEINLINE void construct(T* p BOOST_MOVE_I##N BOOST_MOVE_UREFQ##N)\ + inline void construct(T* p BOOST_MOVE_I##N BOOST_MOVE_UREFQ##N)\ {\ dtl::dispatch_uses_allocator\ ( (get_outermost_allocator)(this->outer_allocator())\ @@ -836,7 +836,7 @@ class scoped_allocator_adaptor public: //Internal function template <class OuterA2> - BOOST_CONTAINER_FORCEINLINE scoped_allocator_adaptor(internal_type_t, BOOST_FWD_REF(OuterA2) outer, const inner_allocator_type& inner) + inline scoped_allocator_adaptor(internal_type_t, BOOST_FWD_REF(OuterA2) outer, const inner_allocator_type& inner) : base_type(internal_type_t(), ::boost::forward<OuterA2>(outer), inner) {} @@ -851,17 +851,17 @@ struct scoped_allocator_operator_equal //Optimize equal outer allocator types with //allocator_traits::equal which uses is_always_equal template<class IA> - BOOST_CONTAINER_FORCEINLINE static bool equal_outer(const IA &l, const IA &r) + inline static bool equal_outer(const IA &l, const IA &r) { return allocator_traits<IA>::equal(l, r); } //Otherwise compare it normally template<class IA1, class IA2> - BOOST_CONTAINER_FORCEINLINE static bool equal_outer(const IA1 &l, const IA2 &r) + inline static bool equal_outer(const IA1 &l, const IA2 &r) { return l == r; } //Otherwise compare it normally template<class IA> - BOOST_CONTAINER_FORCEINLINE static bool equal_inner(const IA &l, const IA &r) + inline static bool equal_inner(const IA &l, const IA &r) { return allocator_traits<IA>::equal(l, r); } }; @@ -873,14 +873,14 @@ struct scoped_allocator_operator_equal<true> //inner_allocator_type is the same as outer_allocator_type //so both types can be different in operator== template<class IA1, class IA2> - BOOST_CONTAINER_FORCEINLINE static bool equal_inner(const IA1 &, const IA2 &) + inline static bool equal_inner(const IA1 &, const IA2 &) { return true; } }; /// @endcond template <typename OuterA1, typename OuterA2, BOOST_CONTAINER_SCOPEDALLOC_ALLINNERCLASS> -BOOST_CONTAINER_FORCEINLINE bool operator==(const scoped_allocator_adaptor<OuterA1, BOOST_CONTAINER_SCOPEDALLOC_ALLINNER>& a +inline bool operator==(const scoped_allocator_adaptor<OuterA1, BOOST_CONTAINER_SCOPEDALLOC_ALLINNER>& a ,const scoped_allocator_adaptor<OuterA2, BOOST_CONTAINER_SCOPEDALLOC_ALLINNER>& b) { #if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED) @@ -894,7 +894,7 @@ BOOST_CONTAINER_FORCEINLINE bool operator==(const scoped_allocator_adaptor<Outer } template <typename OuterA1, typename OuterA2, BOOST_CONTAINER_SCOPEDALLOC_ALLINNERCLASS> -BOOST_CONTAINER_FORCEINLINE bool operator!=(const scoped_allocator_adaptor<OuterA1, BOOST_CONTAINER_SCOPEDALLOC_ALLINNER>& a +inline bool operator!=(const scoped_allocator_adaptor<OuterA1, BOOST_CONTAINER_SCOPEDALLOC_ALLINNER>& a ,const scoped_allocator_adaptor<OuterA2, BOOST_CONTAINER_SCOPEDALLOC_ALLINNER>& b) { return !(a == b); } diff --git a/contrib/restricted/boost/container/include/boost/container/set.hpp b/contrib/restricted/boost/container/include/boost/container/set.hpp index f8a2efad2f..1aef8ff002 100644 --- a/contrib/restricted/boost/container/include/boost/container/set.hpp +++ b/contrib/restricted/boost/container/include/boost/container/set.hpp @@ -113,7 +113,7 @@ class set //! //! <b>Complexity</b>: Constant. - BOOST_CONTAINER_FORCEINLINE set() + inline set() BOOST_NOEXCEPT_IF(dtl::is_nothrow_default_constructible<allocator_type>::value && dtl::is_nothrow_default_constructible<Compare>::value) : base_t() @@ -122,14 +122,14 @@ class set //! <b>Effects</b>: Constructs an empty set using the specified allocator object. //! //! <b>Complexity</b>: Constant. - BOOST_CONTAINER_FORCEINLINE explicit set(const allocator_type& a) + inline explicit set(const allocator_type& a) : base_t(a) {} //! <b>Effects</b>: Constructs an empty set using the specified comparison object. //! //! <b>Complexity</b>: Constant. - BOOST_CONTAINER_FORCEINLINE explicit set(const Compare& comp) + inline explicit set(const Compare& comp) : base_t(comp) {} @@ -137,7 +137,7 @@ class set //! and allocator. //! //! <b>Complexity</b>: Constant. - BOOST_CONTAINER_FORCEINLINE set(const Compare& comp, const allocator_type& a) + inline set(const Compare& comp, const allocator_type& a) : base_t(comp, a) {} @@ -147,7 +147,7 @@ class set //! <b>Complexity</b>: Linear in N if the range [first ,last ) is already sorted using //! the predicate and otherwise N logN, where N is last - first. template <class InputIterator> - BOOST_CONTAINER_FORCEINLINE set(InputIterator first, InputIterator last) + inline set(InputIterator first, InputIterator last) : base_t(true, first, last) {} @@ -157,7 +157,7 @@ class set //! <b>Complexity</b>: Linear in N if the range [first ,last ) is already sorted using //! the predicate and otherwise N logN, where N is last - first. template <class InputIterator> - BOOST_CONTAINER_FORCEINLINE set(InputIterator first, InputIterator last, const allocator_type& a) + inline set(InputIterator first, InputIterator last, const allocator_type& a) : base_t(true, first, last, key_compare(), a) {} @@ -167,7 +167,7 @@ class set //! <b>Complexity</b>: Linear in N if the range [first ,last ) is already sorted using //! the predicate and otherwise N logN, where N is last - first. template <class InputIterator> - BOOST_CONTAINER_FORCEINLINE set(InputIterator first, InputIterator last, const Compare& comp) + inline set(InputIterator first, InputIterator last, const Compare& comp) : base_t(true, first, last, comp) {} @@ -177,7 +177,7 @@ class set //! <b>Complexity</b>: Linear in N if the range [first ,last ) is already sorted using //! the predicate and otherwise N logN, where N is last - first. template <class InputIterator> - BOOST_CONTAINER_FORCEINLINE set(InputIterator first, InputIterator last, const Compare& comp, const allocator_type& a) + inline set(InputIterator first, InputIterator last, const Compare& comp, const allocator_type& a) : base_t(true, first, last, comp, a) {} @@ -192,7 +192,7 @@ class set //! //! <b>Note</b>: Non-standard extension. template <class InputIterator> - BOOST_CONTAINER_FORCEINLINE set( ordered_unique_range_t, InputIterator first, InputIterator last) + inline set( ordered_unique_range_t, InputIterator first, InputIterator last) : base_t(ordered_range, first, last) {} @@ -207,7 +207,7 @@ class set //! //! <b>Note</b>: Non-standard extension. template <class InputIterator> - BOOST_CONTAINER_FORCEINLINE set( ordered_unique_range_t, InputIterator first, InputIterator last, const Compare& comp ) + inline set( ordered_unique_range_t, InputIterator first, InputIterator last, const Compare& comp ) : base_t(ordered_range, first, last, comp) {} @@ -222,7 +222,7 @@ class set //! //! <b>Note</b>: Non-standard extension. template <class InputIterator> - BOOST_CONTAINER_FORCEINLINE set( ordered_unique_range_t, InputIterator first, InputIterator last + inline set( ordered_unique_range_t, InputIterator first, InputIterator last , const Compare& comp, const allocator_type& a) : base_t(ordered_range, first, last, comp, a) {} @@ -238,7 +238,7 @@ class set //! //! <b>Note</b>: Non-standard extension. template <class InputIterator> - BOOST_CONTAINER_FORCEINLINE set(ordered_unique_range_t, InputIterator first, InputIterator last, const allocator_type& a) + inline set(ordered_unique_range_t, InputIterator first, InputIterator last, const allocator_type& a) : base_t(ordered_range, first, last, Compare(), a) {} @@ -248,7 +248,7 @@ class set //! //! <b>Complexity</b>: Linear in N if the range [il.begin(), il.end()) is already sorted using //! the predicate and otherwise N logN, where N is il.begin() - il.end(). - BOOST_CONTAINER_FORCEINLINE set(std::initializer_list<value_type> il) + inline set(std::initializer_list<value_type> il) : base_t(true, il.begin(), il.end()) {} @@ -257,7 +257,7 @@ class set //! //! <b>Complexity</b>: Linear in N if the range [il.begin(), il.end()) is already sorted using //! the predicate and otherwise N logN, where N is il.begin() - il.end(). - BOOST_CONTAINER_FORCEINLINE set(std::initializer_list<value_type> il, const allocator_type& a) + inline set(std::initializer_list<value_type> il, const allocator_type& a) : base_t(true, il.begin(), il.end(), Compare(), a) {} @@ -266,7 +266,7 @@ class set //! //! <b>Complexity</b>: Linear in N if the range [il.begin(), il.end()) is already sorted using //! the predicate and otherwise N logN, where N is il.begin() - il.end(). - BOOST_CONTAINER_FORCEINLINE set(std::initializer_list<value_type> il, const Compare& comp ) + inline set(std::initializer_list<value_type> il, const Compare& comp ) : base_t(true, il.begin(), il.end(), comp) {} @@ -275,7 +275,7 @@ class set //! //! <b>Complexity</b>: Linear in N if the range [il.begin(), il.end()) is already sorted using //! the predicate and otherwise N logN, where N is il.begin() - il.end(). - BOOST_CONTAINER_FORCEINLINE set(std::initializer_list<value_type> il, const Compare& comp, const allocator_type& a) + inline set(std::initializer_list<value_type> il, const Compare& comp, const allocator_type& a) : base_t(true, il.begin(), il.end(), comp, a) {} @@ -289,7 +289,7 @@ class set //! <b>Complexity</b>: Linear in N. //! //! <b>Note</b>: Non-standard extension. - BOOST_CONTAINER_FORCEINLINE set( ordered_unique_range_t, std::initializer_list<value_type> il) + inline set( ordered_unique_range_t, std::initializer_list<value_type> il) : base_t(ordered_range, il.begin(), il.end()) {} @@ -303,7 +303,7 @@ class set //! <b>Complexity</b>: Linear in N. //! //! <b>Note</b>: Non-standard extension. - BOOST_CONTAINER_FORCEINLINE set( ordered_unique_range_t, std::initializer_list<value_type> il, const Compare& comp) + inline set( ordered_unique_range_t, std::initializer_list<value_type> il, const Compare& comp) : base_t(ordered_range, il.begin(), il.end(), comp) {} @@ -317,7 +317,7 @@ class set //! <b>Complexity</b>: Linear in N. //! //! <b>Note</b>: Non-standard extension. - BOOST_CONTAINER_FORCEINLINE set( ordered_unique_range_t, std::initializer_list<value_type> il, const Compare& comp, const allocator_type& a) + inline set( ordered_unique_range_t, std::initializer_list<value_type> il, const Compare& comp, const allocator_type& a) : base_t(ordered_range, il.begin(), il.end(), comp, a) {} #endif @@ -325,7 +325,7 @@ class set //! <b>Effects</b>: Copy constructs a set. //! //! <b>Complexity</b>: Linear in x.size(). - BOOST_CONTAINER_FORCEINLINE set(const set& x) + inline set(const set& x) : base_t(static_cast<const base_t&>(x)) {} @@ -334,7 +334,7 @@ class set //! <b>Complexity</b>: Constant. //! //! <b>Postcondition</b>: x is emptied. - BOOST_CONTAINER_FORCEINLINE set(BOOST_RV_REF(set) x) + inline set(BOOST_RV_REF(set) x) BOOST_NOEXCEPT_IF(boost::container::dtl::is_nothrow_move_constructible<Compare>::value) : base_t(BOOST_MOVE_BASE(base_t, x)) {} @@ -342,7 +342,7 @@ class set //! <b>Effects</b>: Copy constructs a set using the specified allocator. //! //! <b>Complexity</b>: Linear in x.size(). - BOOST_CONTAINER_FORCEINLINE set(const set& x, const allocator_type &a) + inline set(const set& x, const allocator_type &a) : base_t(static_cast<const base_t&>(x), a) {} @@ -350,14 +350,14 @@ class set //! Constructs *this using x's resources. //! //! <b>Complexity</b>: Constant if a == x.get_allocator(), linear otherwise. - BOOST_CONTAINER_FORCEINLINE set(BOOST_RV_REF(set) x, const allocator_type &a) + inline set(BOOST_RV_REF(set) x, const allocator_type &a) : base_t(BOOST_MOVE_BASE(base_t, x), a) {} //! <b>Effects</b>: Makes *this a copy of x. //! //! <b>Complexity</b>: Linear in x.size(). - BOOST_CONTAINER_FORCEINLINE set& operator=(BOOST_COPY_ASSIGN_REF(set) x) + inline set& operator=(BOOST_COPY_ASSIGN_REF(set) x) { return static_cast<set&>(this->base_t::operator=(static_cast<const base_t&>(x))); } //! <b>Effects</b>: this->swap(x.get()). @@ -368,7 +368,7 @@ class set //! <b>Complexity</b>: Constant if allocator_traits_type:: //! propagate_on_container_move_assignment is true or //! this->get>allocator() == x.get_allocator(). Linear otherwise. - BOOST_CONTAINER_FORCEINLINE set& operator=(BOOST_RV_REF(set) x) + inline set& operator=(BOOST_RV_REF(set) x) BOOST_NOEXCEPT_IF( (allocator_traits_type::propagate_on_container_move_assignment::value || allocator_traits_type::is_always_equal::value) && boost::container::dtl::is_nothrow_move_assignable<Compare>::value) @@ -541,7 +541,7 @@ class set //! //! <b>Complexity</b>: Logarithmic. template <class... Args> - BOOST_CONTAINER_FORCEINLINE std::pair<iterator,bool> emplace(BOOST_FWD_REF(Args)... args) + inline std::pair<iterator,bool> emplace(BOOST_FWD_REF(Args)... args) { return this->base_t::emplace_unique(boost::forward<Args>(args)...); } //! <b>Effects</b>: Inserts an object of type Key constructed with @@ -554,18 +554,18 @@ class set //! //! <b>Complexity</b>: Logarithmic. template <class... Args> - BOOST_CONTAINER_FORCEINLINE iterator emplace_hint(const_iterator p, BOOST_FWD_REF(Args)... args) + inline iterator emplace_hint(const_iterator p, BOOST_FWD_REF(Args)... args) { return this->base_t::emplace_hint_unique(p, boost::forward<Args>(args)...); } #else // !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) #define BOOST_CONTAINER_SET_EMPLACE_CODE(N) \ BOOST_MOVE_TMPL_LT##N BOOST_MOVE_CLASS##N BOOST_MOVE_GT##N \ - BOOST_CONTAINER_FORCEINLINE std::pair<iterator,bool> emplace(BOOST_MOVE_UREF##N)\ + inline std::pair<iterator,bool> emplace(BOOST_MOVE_UREF##N)\ { return this->base_t::emplace_unique(BOOST_MOVE_FWD##N); }\ \ BOOST_MOVE_TMPL_LT##N BOOST_MOVE_CLASS##N BOOST_MOVE_GT##N \ - BOOST_CONTAINER_FORCEINLINE iterator emplace_hint(const_iterator hint BOOST_MOVE_I##N BOOST_MOVE_UREF##N)\ + inline iterator emplace_hint(const_iterator hint BOOST_MOVE_I##N BOOST_MOVE_UREF##N)\ { return this->base_t::emplace_hint_unique(hint BOOST_MOVE_I##N BOOST_MOVE_FWD##N); }\ // BOOST_MOVE_ITERATE_0TO9(BOOST_CONTAINER_SET_EMPLACE_CODE) @@ -632,7 +632,7 @@ class set //! //! <b>Complexity</b>: At most N log(size()+N) (N is the distance from first to last) template <class InputIterator> - BOOST_CONTAINER_FORCEINLINE void insert(InputIterator first, InputIterator last) + inline void insert(InputIterator first, InputIterator last) { this->base_t::insert_unique_range(first, last); } #if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST) @@ -640,21 +640,21 @@ class set //! if there is no element with key equivalent to the key of that element. //! //! <b>Complexity</b>: At most N log(size()+N) (N is the distance from il.begin() to il.end()) - BOOST_CONTAINER_FORCEINLINE void insert(std::initializer_list<value_type> il) + inline void insert(std::initializer_list<value_type> il) { this->base_t::insert_unique_range(il.begin(), il.end()); } #endif //! @copydoc ::boost::container::map::insert(node_type&&) - BOOST_CONTAINER_FORCEINLINE insert_return_type insert(BOOST_RV_REF_BEG_IF_CXX11 node_type BOOST_RV_REF_END_IF_CXX11 nh) + inline insert_return_type insert(BOOST_RV_REF_BEG_IF_CXX11 node_type BOOST_RV_REF_END_IF_CXX11 nh) { return this->base_t::insert_unique_node(boost::move(nh)); } //! @copydoc ::boost::container::map::insert(const_iterator, node_type&&) - BOOST_CONTAINER_FORCEINLINE insert_return_type insert(const_iterator hint, BOOST_RV_REF_BEG_IF_CXX11 node_type BOOST_RV_REF_END_IF_CXX11 nh) + inline insert_return_type insert(const_iterator hint, BOOST_RV_REF_BEG_IF_CXX11 node_type BOOST_RV_REF_END_IF_CXX11 nh) { return this->base_t::insert_unique_node(hint, boost::move(nh)); } //! @copydoc ::boost::container::map::merge(map<Key, T, C2, Allocator, Options>&) template<class C2> - BOOST_CONTAINER_FORCEINLINE void merge(set<Key, C2, Allocator, Options>& source) + inline void merge(set<Key, C2, Allocator, Options>& source) { typedef dtl::tree <Key, void, C2, Allocator, Options> base2_t; @@ -663,12 +663,12 @@ class set //! @copydoc ::boost::container::set::merge(set<Key, C2, Allocator, Options>&) template<class C2> - BOOST_CONTAINER_FORCEINLINE void merge(BOOST_RV_REF_BEG set<Key, C2, Allocator, Options> BOOST_RV_REF_END source) + inline void merge(BOOST_RV_REF_BEG set<Key, C2, Allocator, Options> BOOST_RV_REF_END source) { return this->merge(static_cast<set<Key, C2, Allocator, Options>&>(source)); } //! @copydoc ::boost::container::map::merge(multimap<Key, T, C2, Allocator, Options>&) template<class C2> - BOOST_CONTAINER_FORCEINLINE void merge(multiset<Key, C2, Allocator, Options>& source) + inline void merge(multiset<Key, C2, Allocator, Options>& source) { typedef dtl::tree <Key, void, C2, Allocator, Options> base2_t; @@ -677,7 +677,7 @@ class set //! @copydoc ::boost::container::set::merge(multiset<Key, C2, Allocator, Options>&) template<class C2> - BOOST_CONTAINER_FORCEINLINE void merge(BOOST_RV_REF_BEG multiset<Key, C2, Allocator, Options> BOOST_RV_REF_END source) + inline void merge(BOOST_RV_REF_BEG multiset<Key, C2, Allocator, Options> BOOST_RV_REF_END source) { return this->merge(static_cast<multiset<Key, C2, Allocator, Options>&>(source)); } //! <b>Effects</b>: If present, erases the element in the container with key equivalent to x. @@ -685,7 +685,7 @@ class set //! <b>Returns</b>: Returns the number of erased elements (0/1). //! //! <b>Complexity</b>: log(size()) + count(k) - BOOST_CONTAINER_FORCEINLINE size_type erase(const key_type& x) + inline size_type erase(const key_type& x) { return this->base_t::erase_unique(x); } #if defined(BOOST_CONTAINER_DOXYGEN_INVOKED) @@ -779,7 +779,7 @@ class set //! <b>Returns</b>: The number of elements with key equivalent to x. //! //! <b>Complexity</b>: log(size())+count(k) - BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE + BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline size_type count(const key_type& x) const { return static_cast<size_type>(this->base_t::find(x) != this->base_t::cend()); } @@ -790,7 +790,7 @@ class set //! //! <b>Complexity</b>: log(size())+count(k) template<typename K> - BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE + BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline size_type count(const K& x) const { return static_cast<size_type>(this->find(x) != this->cend()); } @@ -881,13 +881,13 @@ class set //! <b>Effects</b>: Equivalent to std::make_pair(this->lower_bound(k), this->upper_bound(k)). //! //! <b>Complexity</b>: Logarithmic - BOOST_CONTAINER_FORCEINLINE std::pair<iterator,iterator> equal_range(const key_type& x) + inline std::pair<iterator,iterator> equal_range(const key_type& x) { return this->base_t::lower_bound_range(x); } //! <b>Effects</b>: Equivalent to std::make_pair(this->lower_bound(k), this->upper_bound(k)). //! //! <b>Complexity</b>: Logarithmic - BOOST_CONTAINER_FORCEINLINE std::pair<const_iterator, const_iterator> equal_range(const key_type& x) const + inline std::pair<const_iterator, const_iterator> equal_range(const key_type& x) const { return this->base_t::lower_bound_range(x); } //! <b>Requires</b>: This overload is available only if @@ -897,7 +897,7 @@ class set //! //! <b>Complexity</b>: Logarithmic template<typename K> - BOOST_CONTAINER_FORCEINLINE std::pair<iterator,iterator> equal_range(const K& x) + inline std::pair<iterator,iterator> equal_range(const K& x) { return this->base_t::lower_bound_range(x); } //! <b>Requires</b>: This overload is available only if @@ -907,7 +907,7 @@ class set //! //! <b>Complexity</b>: Logarithmic template<typename K> - BOOST_CONTAINER_FORCEINLINE std::pair<const_iterator,const_iterator> equal_range(const K& x) const + inline std::pair<const_iterator,const_iterator> equal_range(const K& x) const { return this->base_t::lower_bound_range(x); } #if defined(BOOST_CONTAINER_DOXYGEN_INVOKED) @@ -1097,48 +1097,48 @@ class multiset ////////////////////////////////////////////// //! @copydoc ::boost::container::set::set() - BOOST_CONTAINER_FORCEINLINE multiset() + inline multiset() BOOST_NOEXCEPT_IF(dtl::is_nothrow_default_constructible<allocator_type>::value && dtl::is_nothrow_default_constructible<Compare>::value) : base_t() {} //! @copydoc ::boost::container::set::set(const allocator_type&) - BOOST_CONTAINER_FORCEINLINE explicit multiset(const allocator_type& a) + inline explicit multiset(const allocator_type& a) : base_t(a) {} //! @copydoc ::boost::container::set::set(const Compare&) - BOOST_CONTAINER_FORCEINLINE explicit multiset(const Compare& comp) + inline explicit multiset(const Compare& comp) : base_t(comp) {} //! @copydoc ::boost::container::set::set(const Compare&, const allocator_type&) - BOOST_CONTAINER_FORCEINLINE multiset(const Compare& comp, const allocator_type& a) + inline multiset(const Compare& comp, const allocator_type& a) : base_t(comp, a) {} //! @copydoc ::boost::container::set::set(InputIterator, InputIterator) template <class InputIterator> - BOOST_CONTAINER_FORCEINLINE multiset(InputIterator first, InputIterator last) + inline multiset(InputIterator first, InputIterator last) : base_t(false, first, last) {} //! @copydoc ::boost::container::set::set(InputIterator, InputIterator, const allocator_type&) template <class InputIterator> - BOOST_CONTAINER_FORCEINLINE multiset(InputIterator first, InputIterator last, const allocator_type& a) + inline multiset(InputIterator first, InputIterator last, const allocator_type& a) : base_t(false, first, last, key_compare(), a) {} //! @copydoc ::boost::container::set::set(InputIterator, InputIterator, const Compare&) template <class InputIterator> - BOOST_CONTAINER_FORCEINLINE multiset(InputIterator first, InputIterator last, const Compare& comp) + inline multiset(InputIterator first, InputIterator last, const Compare& comp) : base_t(false, first, last, comp) {} //! @copydoc ::boost::container::set::set(InputIterator, InputIterator, const Compare&, const allocator_type&) template <class InputIterator> - BOOST_CONTAINER_FORCEINLINE multiset(InputIterator first, InputIterator last, const Compare& comp, const allocator_type& a) + inline multiset(InputIterator first, InputIterator last, const Compare& comp, const allocator_type& a) : base_t(false, first, last, comp, a) {} @@ -1152,7 +1152,7 @@ class multiset //! //! <b>Note</b>: Non-standard extension. template <class InputIterator> - BOOST_CONTAINER_FORCEINLINE multiset( ordered_range_t, InputIterator first, InputIterator last ) + inline multiset( ordered_range_t, InputIterator first, InputIterator last ) : base_t(ordered_range, first, last) {} @@ -1166,7 +1166,7 @@ class multiset //! //! <b>Note</b>: Non-standard extension. template <class InputIterator> - BOOST_CONTAINER_FORCEINLINE multiset( ordered_range_t, InputIterator first, InputIterator last, const Compare& comp) + inline multiset( ordered_range_t, InputIterator first, InputIterator last, const Compare& comp) : base_t(ordered_range, first, last, comp) {} @@ -1180,7 +1180,7 @@ class multiset //! //! <b>Note</b>: Non-standard extension. template <class InputIterator> - BOOST_CONTAINER_FORCEINLINE multiset( ordered_range_t, InputIterator first, InputIterator last, const Compare& comp, const allocator_type& a) + inline multiset( ordered_range_t, InputIterator first, InputIterator last, const Compare& comp, const allocator_type& a) : base_t(ordered_range, first, last, comp, a) {} @@ -1194,74 +1194,74 @@ class multiset //! //! <b>Note</b>: Non-standard extension. template <class InputIterator> - BOOST_CONTAINER_FORCEINLINE multiset(ordered_range_t, InputIterator first, InputIterator last, const allocator_type &a) + inline multiset(ordered_range_t, InputIterator first, InputIterator last, const allocator_type &a) : base_t(ordered_range, first, last, Compare(), a) {} #if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST) //! @copydoc ::boost::container::set::set(std::initializer_list<value_type>) - BOOST_CONTAINER_FORCEINLINE multiset(std::initializer_list<value_type> il) + inline multiset(std::initializer_list<value_type> il) : base_t(false, il.begin(), il.end()) {} //! @copydoc ::boost::container::set::set(std::initializer_list<value_type>, const allocator_type&) - BOOST_CONTAINER_FORCEINLINE multiset(std::initializer_list<value_type> il, const allocator_type& a) + inline multiset(std::initializer_list<value_type> il, const allocator_type& a) : base_t(false, il.begin(), il.end(), Compare(), a) {} //! @copydoc ::boost::container::set::set(std::initializer_list<value_type>, const Compare&) - BOOST_CONTAINER_FORCEINLINE multiset(std::initializer_list<value_type> il, const Compare& comp) + inline multiset(std::initializer_list<value_type> il, const Compare& comp) : base_t(false, il.begin(), il.end(), comp) {} //! @copydoc ::boost::container::set::set(std::initializer_list<value_type>, const Compare&, const allocator_type&) - BOOST_CONTAINER_FORCEINLINE multiset(std::initializer_list<value_type> il, const Compare& comp, const allocator_type& a) + inline multiset(std::initializer_list<value_type> il, const Compare& comp, const allocator_type& a) : base_t(false, il.begin(), il.end(), comp, a) {} //! @copydoc ::boost::container::set::set(ordered_unique_range_t, std::initializer_list<value_type>) - BOOST_CONTAINER_FORCEINLINE multiset(ordered_range_t, std::initializer_list<value_type> il) + inline multiset(ordered_range_t, std::initializer_list<value_type> il) : base_t(ordered_range, il.begin(), il.end()) {} //! @copydoc ::boost::container::set::set(ordered_unique_range_t, std::initializer_list<value_type>, const Compare&) - BOOST_CONTAINER_FORCEINLINE multiset(ordered_range_t, std::initializer_list<value_type> il, const Compare& comp) + inline multiset(ordered_range_t, std::initializer_list<value_type> il, const Compare& comp) : base_t(ordered_range, il.begin(), il.end(), comp) {} //! @copydoc ::boost::container::set::set(ordered_unique_range_t, std::initializer_list<value_type>, const Compare&, const allocator_type&) - BOOST_CONTAINER_FORCEINLINE multiset(ordered_range_t, std::initializer_list<value_type> il, const Compare& comp, const allocator_type& a) + inline multiset(ordered_range_t, std::initializer_list<value_type> il, const Compare& comp, const allocator_type& a) : base_t(ordered_range, il.begin(), il.end(), comp, a) {} #endif //! @copydoc ::boost::container::set::set(const set &) - BOOST_CONTAINER_FORCEINLINE multiset(const multiset& x) + inline multiset(const multiset& x) : base_t(static_cast<const base_t&>(x)) {} //! @copydoc ::boost::container::set::set(set &&) - BOOST_CONTAINER_FORCEINLINE multiset(BOOST_RV_REF(multiset) x) + inline multiset(BOOST_RV_REF(multiset) x) BOOST_NOEXCEPT_IF(boost::container::dtl::is_nothrow_move_constructible<Compare>::value) : base_t(BOOST_MOVE_BASE(base_t, x)) {} //! @copydoc ::boost::container::set::set(const set &, const allocator_type &) - BOOST_CONTAINER_FORCEINLINE multiset(const multiset& x, const allocator_type &a) + inline multiset(const multiset& x, const allocator_type &a) : base_t(static_cast<const base_t&>(x), a) {} //! @copydoc ::boost::container::set::set(set &&, const allocator_type &) - BOOST_CONTAINER_FORCEINLINE multiset(BOOST_RV_REF(multiset) x, const allocator_type &a) + inline multiset(BOOST_RV_REF(multiset) x, const allocator_type &a) : base_t(BOOST_MOVE_BASE(base_t, x), a) {} //! @copydoc ::boost::container::set::operator=(const set &) - BOOST_CONTAINER_FORCEINLINE multiset& operator=(BOOST_COPY_ASSIGN_REF(multiset) x) + inline multiset& operator=(BOOST_COPY_ASSIGN_REF(multiset) x) { return static_cast<multiset&>(this->base_t::operator=(static_cast<const base_t&>(x))); } //! @copydoc ::boost::container::set::operator=(set &&) - BOOST_CONTAINER_FORCEINLINE multiset& operator=(BOOST_RV_REF(multiset) x) + inline multiset& operator=(BOOST_RV_REF(multiset) x) BOOST_NOEXCEPT_IF( (allocator_traits_type::propagate_on_container_move_assignment::value || allocator_traits_type::is_always_equal::value) && boost::container::dtl::is_nothrow_move_assignable<Compare>::value) @@ -1342,7 +1342,7 @@ class multiset //! //! <b>Complexity</b>: Logarithmic. template <class... Args> - BOOST_CONTAINER_FORCEINLINE iterator emplace(BOOST_FWD_REF(Args)... args) + inline iterator emplace(BOOST_FWD_REF(Args)... args) { return this->base_t::emplace_equal(boost::forward<Args>(args)...); } //! <b>Effects</b>: Inserts an object of type Key constructed with @@ -1354,18 +1354,18 @@ class multiset //! <b>Complexity</b>: Logarithmic in general, but amortized constant if t //! is inserted right before p. template <class... Args> - BOOST_CONTAINER_FORCEINLINE iterator emplace_hint(const_iterator p, BOOST_FWD_REF(Args)... args) + inline iterator emplace_hint(const_iterator p, BOOST_FWD_REF(Args)... args) { return this->base_t::emplace_hint_equal(p, boost::forward<Args>(args)...); } #else // !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) #define BOOST_CONTAINER_MULTISET_EMPLACE_CODE(N) \ BOOST_MOVE_TMPL_LT##N BOOST_MOVE_CLASS##N BOOST_MOVE_GT##N \ - BOOST_CONTAINER_FORCEINLINE iterator emplace(BOOST_MOVE_UREF##N)\ + inline iterator emplace(BOOST_MOVE_UREF##N)\ { return this->base_t::emplace_equal(BOOST_MOVE_FWD##N); }\ \ BOOST_MOVE_TMPL_LT##N BOOST_MOVE_CLASS##N BOOST_MOVE_GT##N \ - BOOST_CONTAINER_FORCEINLINE iterator emplace_hint(const_iterator hint BOOST_MOVE_I##N BOOST_MOVE_UREF##N)\ + inline iterator emplace_hint(const_iterator hint BOOST_MOVE_I##N BOOST_MOVE_UREF##N)\ { return this->base_t::emplace_hint_equal(hint BOOST_MOVE_I##N BOOST_MOVE_FWD##N); }\ // BOOST_MOVE_ITERATE_0TO9(BOOST_CONTAINER_MULTISET_EMPLACE_CODE) @@ -1423,26 +1423,26 @@ class multiset //! //! <b>Complexity</b>: At most N log(size()+N) (N is the distance from first to last) template <class InputIterator> - BOOST_CONTAINER_FORCEINLINE void insert(InputIterator first, InputIterator last) + inline void insert(InputIterator first, InputIterator last) { this->base_t::insert_equal_range(first, last); } #if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST) //! @copydoc ::boost::container::set::insert(std::initializer_list<value_type>) - BOOST_CONTAINER_FORCEINLINE void insert(std::initializer_list<value_type> il) + inline void insert(std::initializer_list<value_type> il) { this->base_t::insert_equal_range(il.begin(), il.end()); } #endif //! @copydoc ::boost::container::multimap::insert(node_type&&) - BOOST_CONTAINER_FORCEINLINE iterator insert(BOOST_RV_REF_BEG_IF_CXX11 node_type BOOST_RV_REF_END_IF_CXX11 nh) + inline iterator insert(BOOST_RV_REF_BEG_IF_CXX11 node_type BOOST_RV_REF_END_IF_CXX11 nh) { return this->base_t::insert_equal_node(boost::move(nh)); } //! @copydoc ::boost::container::multimap::insert(const_iterator, node_type&&) - BOOST_CONTAINER_FORCEINLINE iterator insert(const_iterator hint, BOOST_RV_REF_BEG_IF_CXX11 node_type BOOST_RV_REF_END_IF_CXX11 nh) + inline iterator insert(const_iterator hint, BOOST_RV_REF_BEG_IF_CXX11 node_type BOOST_RV_REF_END_IF_CXX11 nh) { return this->base_t::insert_equal_node(hint, boost::move(nh)); } //! @copydoc ::boost::container::multimap::merge(multimap<Key, T, C2, Allocator, Options>&) template<class C2> - BOOST_CONTAINER_FORCEINLINE void merge(multiset<Key, C2, Allocator, Options>& source) + inline void merge(multiset<Key, C2, Allocator, Options>& source) { typedef dtl::tree <Key, void, C2, Allocator, Options> base2_t; @@ -1451,12 +1451,12 @@ class multiset //! @copydoc ::boost::container::multiset::merge(multiset<Key, C2, Allocator, Options>&) template<class C2> - BOOST_CONTAINER_FORCEINLINE void merge(BOOST_RV_REF_BEG multiset<Key, C2, Allocator, Options> BOOST_RV_REF_END source) + inline void merge(BOOST_RV_REF_BEG multiset<Key, C2, Allocator, Options> BOOST_RV_REF_END source) { return this->merge(static_cast<multiset<Key, C2, Allocator, Options>&>(source)); } //! @copydoc ::boost::container::multimap::merge(map<Key, T, C2, Allocator, Options>&) template<class C2> - BOOST_CONTAINER_FORCEINLINE void merge(set<Key, C2, Allocator, Options>& source) + inline void merge(set<Key, C2, Allocator, Options>& source) { typedef dtl::tree <Key, void, C2, Allocator, Options> base2_t; @@ -1465,7 +1465,7 @@ class multiset //! @copydoc ::boost::container::multiset::merge(set<Key, C2, Allocator, Options>&) template<class C2> - BOOST_CONTAINER_FORCEINLINE void merge(BOOST_RV_REF_BEG set<Key, C2, Allocator, Options> BOOST_RV_REF_END source) + inline void merge(BOOST_RV_REF_BEG set<Key, C2, Allocator, Options> BOOST_RV_REF_END source) { return this->merge(static_cast<set<Key, C2, Allocator, Options>&>(source)); } #if defined(BOOST_CONTAINER_DOXYGEN_INVOKED) diff --git a/contrib/restricted/boost/container/include/boost/container/small_vector.hpp b/contrib/restricted/boost/container/include/boost/container/small_vector.hpp index 66b31954d7..28adc46b88 100644 --- a/contrib/restricted/boost/container/include/boost/container/small_vector.hpp +++ b/contrib/restricted/boost/container/include/boost/container/small_vector.hpp @@ -46,6 +46,8 @@ #include <initializer_list> //for std::initializer_list #endif +#include <cstddef> //offsetof + namespace boost { namespace container { @@ -130,10 +132,10 @@ class small_vector_allocator BOOST_COPYABLE_AND_MOVABLE(small_vector_allocator) - BOOST_CONTAINER_FORCEINLINE const allocator_type &as_base() const BOOST_NOEXCEPT + inline const allocator_type &as_base() const BOOST_NOEXCEPT { return static_cast<const allocator_type&>(*this); } - BOOST_CONTAINER_FORCEINLINE allocator_type &as_base() BOOST_NOEXCEPT + inline allocator_type &as_base() BOOST_NOEXCEPT { return static_cast<allocator_type&>(*this); } #endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED @@ -171,19 +173,19 @@ class small_vector_allocator typedef typename allocator_traits<allocator_type>::template portable_rebind_alloc<T2>::type other; }; - BOOST_CONTAINER_FORCEINLINE small_vector_allocator() BOOST_NOEXCEPT_IF(dtl::is_nothrow_default_constructible<allocator_type>::value) + inline small_vector_allocator() BOOST_NOEXCEPT_IF(dtl::is_nothrow_default_constructible<allocator_type>::value) {} //!Constructor from other small_vector_allocator. //!Never throws - BOOST_CONTAINER_FORCEINLINE small_vector_allocator + inline small_vector_allocator (const small_vector_allocator &other) BOOST_NOEXCEPT_OR_NOTHROW : allocator_type(other.as_base()) {} //!Move constructor from small_vector_allocator. //!Never throws - BOOST_CONTAINER_FORCEINLINE small_vector_allocator + inline small_vector_allocator (BOOST_RV_REF(small_vector_allocator) other) BOOST_NOEXCEPT_OR_NOTHROW : allocator_type(::boost::move(other.as_base())) {} @@ -191,7 +193,7 @@ class small_vector_allocator //!Constructor from related small_vector_allocator. //!Never throws template<class U, class OtherVoidAllocator, class OtherOptions> - BOOST_CONTAINER_FORCEINLINE small_vector_allocator + inline small_vector_allocator (const small_vector_allocator<U, OtherVoidAllocator, OtherOptions> &other) BOOST_NOEXCEPT_OR_NOTHROW : allocator_type(other.as_base()) {} @@ -199,52 +201,52 @@ class small_vector_allocator //!Move constructor from related small_vector_allocator. //!Never throws template<class U, class OtherVoidAllocator, class OtherOptions> - BOOST_CONTAINER_FORCEINLINE small_vector_allocator + inline small_vector_allocator (BOOST_RV_REF(small_vector_allocator<U BOOST_MOVE_I OtherVoidAllocator BOOST_MOVE_I OtherOptions>) other) BOOST_NOEXCEPT_OR_NOTHROW : allocator_type(::boost::move(other.as_base())) {} //!Constructor from allocator_type. //!Never throws - BOOST_CONTAINER_FORCEINLINE explicit small_vector_allocator + inline explicit small_vector_allocator (const allocator_type &other) BOOST_NOEXCEPT_OR_NOTHROW : allocator_type(other) {} //!Assignment from other small_vector_allocator. //!Never throws - BOOST_CONTAINER_FORCEINLINE small_vector_allocator & + inline small_vector_allocator & operator=(BOOST_COPY_ASSIGN_REF(small_vector_allocator) other) BOOST_NOEXCEPT_OR_NOTHROW { return static_cast<small_vector_allocator&>(this->allocator_type::operator=(other.as_base())); } //!Move assignment from other small_vector_allocator. //!Never throws - BOOST_CONTAINER_FORCEINLINE small_vector_allocator & + inline small_vector_allocator & operator=(BOOST_RV_REF(small_vector_allocator) other) BOOST_NOEXCEPT_OR_NOTHROW { return static_cast<small_vector_allocator&>(this->allocator_type::operator=(::boost::move(other.as_base()))); } //!Assignment from related small_vector_allocator. //!Never throws template<class U, class OtherVoidAllocator> - BOOST_CONTAINER_FORCEINLINE small_vector_allocator & + inline small_vector_allocator & operator=(BOOST_COPY_ASSIGN_REF(small_vector_allocator<U BOOST_MOVE_I OtherVoidAllocator BOOST_MOVE_I Options>) other) BOOST_NOEXCEPT_OR_NOTHROW { return static_cast<small_vector_allocator&>(this->allocator_type::operator=(other.as_base())); } //!Move assignment from related small_vector_allocator. //!Never throws template<class U, class OtherVoidAllocator> - BOOST_CONTAINER_FORCEINLINE small_vector_allocator & + inline small_vector_allocator & operator=(BOOST_RV_REF(small_vector_allocator<U BOOST_MOVE_I OtherVoidAllocator BOOST_MOVE_I Options>) other) BOOST_NOEXCEPT_OR_NOTHROW { return static_cast<small_vector_allocator&>(this->allocator_type::operator=(::boost::move(other.as_base()))); } //!Move assignment from allocator_type. //!Never throws - BOOST_CONTAINER_FORCEINLINE small_vector_allocator & + inline small_vector_allocator & operator=(const allocator_type &other) BOOST_NOEXCEPT_OR_NOTHROW { return static_cast<small_vector_allocator&>(this->allocator_type::operator=(other)); } //!Allocates storage from the standard-conforming allocator - BOOST_CONTAINER_FORCEINLINE pointer allocate(size_type count, const_void_pointer hint = const_void_pointer()) + inline pointer allocate(size_type count, const_void_pointer hint = const_void_pointer()) { return allocator_traits_type::allocate(this->as_base(), count, hint); } //!Deallocates previously allocated memory. @@ -257,7 +259,7 @@ class small_vector_allocator //!Returns the maximum number of elements that could be allocated. //!Never throws - BOOST_CONTAINER_FORCEINLINE size_type max_size() const BOOST_NOEXCEPT_OR_NOTHROW + inline size_type max_size() const BOOST_NOEXCEPT_OR_NOTHROW { return allocator_traits_type::max_size(this->as_base()); } small_vector_allocator select_on_container_copy_construction() const @@ -268,17 +270,17 @@ class small_vector_allocator //!Swaps two allocators, does nothing //!because this small_vector_allocator is stateless - BOOST_CONTAINER_FORCEINLINE friend void swap(small_vector_allocator &l, small_vector_allocator &r) BOOST_NOEXCEPT_OR_NOTHROW + inline friend void swap(small_vector_allocator &l, small_vector_allocator &r) BOOST_NOEXCEPT_OR_NOTHROW { boost::adl_move_swap(l.as_base(), r.as_base()); } //!An small_vector_allocator always compares to true, as memory allocated with one //!instance can be deallocated by another instance (except for unpropagable storage) - BOOST_CONTAINER_FORCEINLINE friend bool operator==(const small_vector_allocator &l, const small_vector_allocator &r) BOOST_NOEXCEPT_OR_NOTHROW + inline friend bool operator==(const small_vector_allocator &l, const small_vector_allocator &r) BOOST_NOEXCEPT_OR_NOTHROW { return allocator_traits_type::equal(l.as_base(), r.as_base()); } //!An small_vector_allocator always compares to false, as memory allocated with one //!instance can be deallocated by another instance - BOOST_CONTAINER_FORCEINLINE friend bool operator!=(const small_vector_allocator &l, const small_vector_allocator &r) BOOST_NOEXCEPT_OR_NOTHROW + inline friend bool operator!=(const small_vector_allocator &l, const small_vector_allocator &r) BOOST_NOEXCEPT_OR_NOTHROW { return !(l == r); } #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED @@ -288,12 +290,12 @@ class small_vector_allocator typedef typename dtl::vector_for_small_vector <value_type, allocator_type, Options>::type vector_type; - BOOST_CONTAINER_FORCEINLINE bool is_internal_storage(const_pointer p) const + inline bool is_internal_storage(const_pointer p) const { return this->internal_storage() == p; } public: - BOOST_CONTAINER_FORCEINLINE const_pointer internal_storage() const BOOST_NOEXCEPT_OR_NOTHROW; - BOOST_CONTAINER_FORCEINLINE pointer internal_storage() BOOST_NOEXCEPT_OR_NOTHROW; + inline const_pointer internal_storage() const BOOST_NOEXCEPT_OR_NOTHROW; + inline pointer internal_storage() BOOST_NOEXCEPT_OR_NOTHROW; #endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED }; @@ -345,28 +347,28 @@ class small_vector_base public: //Make it public as it will be inherited by small_vector and container //must have this public member - typedef typename real_allocator<T, SecAlloc>::type secondary_allocator_t; - typedef typename allocator_traits<secondary_allocator_t>:: - template portable_rebind_alloc<void>::type void_allocator_t; - typedef typename dtl::get_small_vector_opt<Options>::type options_t; + typedef typename real_allocator<T, SecAlloc>::type allocator_type; + typedef typename allocator_traits<allocator_type>:: + template portable_rebind_alloc<void>::type void_allocator_t; + typedef typename dtl::get_small_vector_opt<Options>::type options_t; typedef typename dtl::vector_for_small_vector - <T, SecAlloc, Options>::type base_type; - typedef typename allocator_traits<secondary_allocator_t>::pointer pointer; - typedef typename allocator_traits<secondary_allocator_t>::const_pointer const_pointer; - typedef typename allocator_traits<secondary_allocator_t>::void_pointer void_pointer; - typedef typename allocator_traits<secondary_allocator_t>::const_void_pointer const_void_pointer; - typedef small_vector_allocator<T, void_allocator_t, Options> allocator_type; + <T, SecAlloc, Options>::type base_type; + typedef typename allocator_traits<allocator_type>::pointer pointer; + typedef typename allocator_traits<allocator_type>::const_pointer const_pointer; + typedef typename allocator_traits<allocator_type>::void_pointer void_pointer; + typedef typename allocator_traits<allocator_type>::const_void_pointer const_void_pointer; + typedef small_vector_allocator<T, void_allocator_t, Options> small_allocator_type; private: BOOST_COPYABLE_AND_MOVABLE(small_vector_base) friend class small_vector_allocator<T, void_allocator_t, Options>; - BOOST_CONTAINER_FORCEINLINE + inline const_pointer internal_storage() const BOOST_NOEXCEPT_OR_NOTHROW { return this->base_type::get_stored_allocator().internal_storage(); } - BOOST_CONTAINER_FORCEINLINE + inline pointer internal_storage() BOOST_NOEXCEPT_OR_NOTHROW { return this->base_type::get_stored_allocator().internal_storage(); } @@ -378,16 +380,16 @@ class small_vector_base protected: - BOOST_CONTAINER_FORCEINLINE explicit small_vector_base(initial_capacity_t, std::size_t initial_capacity) + inline explicit small_vector_base(initial_capacity_t, std::size_t initial_capacity) : base_type(initial_capacity_t(), this->internal_storage(), initial_capacity) {} template<class AllocFwd> - BOOST_CONTAINER_FORCEINLINE explicit small_vector_base(initial_capacity_t, std::size_t capacity, BOOST_FWD_REF(AllocFwd) a) + inline explicit small_vector_base(initial_capacity_t, std::size_t capacity, BOOST_FWD_REF(AllocFwd) a) : base_type(initial_capacity_t(), this->internal_storage(), capacity, ::boost::forward<AllocFwd>(a)) {} - BOOST_CONTAINER_FORCEINLINE explicit small_vector_base(maybe_initial_capacity_t, std::size_t initial_capacity, std::size_t initial_size) + inline explicit small_vector_base(maybe_initial_capacity_t, std::size_t initial_capacity, std::size_t initial_size) : base_type( maybe_initial_capacity_t() , (initial_capacity >= initial_size) ? this->internal_storage() : pointer() , (initial_capacity >= initial_size) ? initial_capacity : initial_size @@ -395,7 +397,7 @@ class small_vector_base {} template<class AllocFwd> - BOOST_CONTAINER_FORCEINLINE explicit small_vector_base(maybe_initial_capacity_t, std::size_t initial_capacity, std::size_t initial_size, BOOST_FWD_REF(AllocFwd) a) + inline explicit small_vector_base(maybe_initial_capacity_t, std::size_t initial_capacity, std::size_t initial_size, BOOST_FWD_REF(AllocFwd) a) : base_type(maybe_initial_capacity_t() , (initial_capacity >= initial_size) ? this->internal_storage() : pointer() , (initial_capacity >= initial_size) ? initial_capacity : initial_size @@ -409,20 +411,20 @@ class small_vector_base #endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED public: - BOOST_CONTAINER_FORCEINLINE small_vector_base& operator=(BOOST_COPY_ASSIGN_REF(small_vector_base) other) + inline small_vector_base& operator=(BOOST_COPY_ASSIGN_REF(small_vector_base) other) { return static_cast<small_vector_base&>(this->base_type::operator=(static_cast<base_type const&>(other))); } - BOOST_CONTAINER_FORCEINLINE small_vector_base& operator=(BOOST_RV_REF(small_vector_base) other) + inline small_vector_base& operator=(BOOST_RV_REF(small_vector_base) other) { return static_cast<small_vector_base&>(this->base_type::operator=(BOOST_MOVE_BASE(base_type, other))); } - BOOST_CONTAINER_FORCEINLINE void swap(small_vector_base &other) + inline void swap(small_vector_base &other) { return this->base_type::swap(other); } #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED protected: - void move_construct_impl(base_type &x, const allocator_type &a) + void move_construct_impl(base_type &x) { - if(base_type::is_propagable_from(x.get_stored_allocator(), x.data(), a, true)){ + if(base_type::is_propagable_from(x.get_stored_allocator(), x.data(), this->base_type::get_stored_allocator(), true)){ this->steal_resources(x); } else{ @@ -452,61 +454,65 @@ struct small_vector_storage_definer typedef small_vector_storage<T, N, final_alignment> type; }; + +/// Figure out the offset of the first element. Idea taken from LLVM's SmallVector template <class T, class SecAlloc, class Options> -struct small_vector_storage_strawman - : public small_vector_base<T, SecAlloc, Options> - , public small_vector_storage_definer<T, 1, Options>::type +struct small_vector_storage_offset { - typedef typename small_vector_storage_definer<T, 1, Options>::type sm_storage_t; + typedef small_vector_base<T, SecAlloc, Options> base_type; + typedef typename small_vector_storage_definer<T, 1, Options>::type storage_type; + typename dtl::aligned_storage + < sizeof(base_type), dtl::alignment_of<base_type>::value + >::type base; + + typename dtl::aligned_storage + < sizeof(storage_type), dtl::alignment_of<storage_type>::value + > ::type storage; }; +template <class T, class SecAlloc, class Options> +inline std::size_t get_small_vector_storage_offset() +{ + typedef small_vector_storage_offset<T, SecAlloc, Options> struct_type; + return offsetof(struct_type, storage); +} + +#if defined(BOOST_GCC) && (BOOST_GCC >= 40600) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wcast-align" +#pragma GCC diagnostic ignored "-Wstrict-aliasing" +#endif + //Internal storage hack template<class T, class VoidAlloc, class Options> -BOOST_CONTAINER_FORCEINLINE typename small_vector_allocator<T, VoidAlloc, Options>::const_pointer +inline typename small_vector_allocator<T, VoidAlloc, Options>::const_pointer small_vector_allocator<T, VoidAlloc, Options>::internal_storage() const BOOST_NOEXCEPT_OR_NOTHROW { - typedef small_vector_storage_strawman<T, allocator_type, Options> strawman_t; - typedef typename strawman_t::sm_storage_t sm_storage_t; - - //These warnings are false positives, as we know the alignment is correct - //and aligned storage is allowed to hold any type - #if defined(BOOST_GCC) && (BOOST_GCC >= 40600) - #pragma GCC diagnostic push - #pragma GCC diagnostic ignored "-Wcast-align" - #pragma GCC diagnostic ignored "-Wstrict-aliasing" - #endif const vector_type& v = reinterpret_cast<const vector_type&>(*this); - BOOST_ASSERT((std::size_t(this) % dtl::alignment_of<strawman_t>::value) == 0); - const strawman_t &straw = static_cast<const strawman_t&>(v); - const sm_storage_t& stor = static_cast<const sm_storage_t&>(straw); - return boost::intrusive::pointer_traits<const_pointer>::pointer_to(*((const T*)stor.m_storage.data)); - #if defined(BOOST_GCC) && (BOOST_GCC >= 40600) - #pragma GCC diagnostic pop - #endif + BOOST_ASSERT((std::size_t(this) % dtl::alignment_of< small_vector_storage_offset<T, allocator_type, Options> >::value) == 0); + const char *addr = reinterpret_cast<const char*>(&v); + typedef typename boost::intrusive::pointer_traits<pointer>::template rebind_pointer<const char>::type const_char_pointer; + const_void_pointer vptr = boost::intrusive::pointer_traits<const_char_pointer>::pointer_to(*addr) + + get_small_vector_storage_offset<T, allocator_type, Options>(); + return boost::intrusive::pointer_traits<const_pointer>::static_cast_from(vptr); } template <class T, class VoidAlloc, class Options> -BOOST_CONTAINER_FORCEINLINE typename small_vector_allocator<T, VoidAlloc, Options>::pointer +inline typename small_vector_allocator<T, VoidAlloc, Options>::pointer small_vector_allocator<T, VoidAlloc, Options>::internal_storage() BOOST_NOEXCEPT_OR_NOTHROW { - typedef small_vector_storage_strawman<T, allocator_type, Options> strawman_t; - typedef typename strawman_t::sm_storage_t sm_storage_t; - - #if defined(BOOST_GCC) && (BOOST_GCC >= 40600) - #pragma GCC diagnostic push - #pragma GCC diagnostic ignored "-Wcast-align" - #pragma GCC diagnostic ignored "-Wstrict-aliasing" - #endif vector_type& v = reinterpret_cast<vector_type&>(*this); - BOOST_ASSERT((std::size_t(this) % dtl::alignment_of<strawman_t>::value) == 0); - strawman_t &straw = static_cast<strawman_t&>(v); - sm_storage_t& stor = static_cast<sm_storage_t&>(straw); - return boost::intrusive::pointer_traits<pointer>::pointer_to(*((T*)stor.m_storage.data)); - #if defined(BOOST_GCC) && (BOOST_GCC >= 40600) - #pragma GCC diagnostic pop - #endif + BOOST_ASSERT((std::size_t(this) % dtl::alignment_of< small_vector_storage_offset<T, allocator_type, Options> >::value) == 0); + char* addr = reinterpret_cast<char*>(&v); + typedef typename boost::intrusive::pointer_traits<pointer>::template rebind_pointer<char>::type char_pointer; + void_pointer vptr = boost::intrusive::pointer_traits<char_pointer>::pointer_to(*addr) + + get_small_vector_storage_offset<T, allocator_type, Options>(); + return boost::intrusive::pointer_traits<pointer>::static_cast_from(vptr); } +#if defined(BOOST_GCC) && (BOOST_GCC >= 40600) +#pragma GCC diagnostic pop +#endif #endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED @@ -540,11 +546,11 @@ class small_vector public: typedef small_vector_base<T, Allocator, Options> base_type; - typedef typename base_type::allocator_type allocator_type; - typedef typename base_type::size_type size_type; - typedef typename base_type::value_type value_type; + typedef typename base_type::allocator_type allocator_type; + typedef typename base_type::size_type size_type; + typedef typename base_type::value_type value_type; - BOOST_CONTAINER_FORCEINLINE static std::size_t internal_capacity() + inline static std::size_t internal_capacity() { return static_capacity; } typedef allocator_traits<typename base_type::allocator_type> allocator_traits_type; @@ -555,41 +561,41 @@ class small_vector static const size_type static_capacity = small_vector_storage_definer<T, N, Options>::type::sms_size; public: - BOOST_CONTAINER_FORCEINLINE small_vector() + inline small_vector() BOOST_NOEXCEPT_IF(dtl::is_nothrow_default_constructible<allocator_type>::value) : base_type(initial_capacity_t(), internal_capacity()) {} - BOOST_CONTAINER_FORCEINLINE explicit small_vector(const allocator_type &a) + inline explicit small_vector(const allocator_type &a) : base_type(initial_capacity_t(), internal_capacity(), a) {} - BOOST_CONTAINER_FORCEINLINE explicit small_vector(size_type n) + inline explicit small_vector(size_type n) : base_type(maybe_initial_capacity_t(), internal_capacity(), n) { this->protected_init_n(n, value_init); } - BOOST_CONTAINER_FORCEINLINE small_vector(size_type n, const allocator_type &a) + inline small_vector(size_type n, const allocator_type &a) : base_type(maybe_initial_capacity_t(), internal_capacity(), n, a) { this->protected_init_n(n, value_init); } - BOOST_CONTAINER_FORCEINLINE small_vector(size_type n, default_init_t) + inline small_vector(size_type n, default_init_t) : base_type(maybe_initial_capacity_t(), internal_capacity(), n) { this->protected_init_n(n, default_init_t()); } - BOOST_CONTAINER_FORCEINLINE small_vector(size_type n, default_init_t, const allocator_type &a) + inline small_vector(size_type n, default_init_t, const allocator_type &a) : base_type(maybe_initial_capacity_t(), internal_capacity(), n, a) { this->protected_init_n(n, default_init_t()); } - BOOST_CONTAINER_FORCEINLINE small_vector(size_type n, const value_type &v) + inline small_vector(size_type n, const value_type &v) : base_type(maybe_initial_capacity_t(), internal_capacity(), n) { this->protected_init_n(n, v); } - BOOST_CONTAINER_FORCEINLINE small_vector(size_type n, const value_type &v, const allocator_type &a) + inline small_vector(size_type n, const value_type &v, const allocator_type &a) : base_type(maybe_initial_capacity_t(), internal_capacity(), n, a) { this->protected_init_n(n, v); } template <class InIt> - BOOST_CONTAINER_FORCEINLINE small_vector(InIt first, InIt last + inline small_vector(InIt first, InIt last BOOST_CONTAINER_DOCIGN(BOOST_MOVE_I typename dtl::disable_if_c < dtl::is_convertible<InIt BOOST_MOVE_I size_type>::value BOOST_MOVE_I dtl::nat >::type * = 0) @@ -598,7 +604,7 @@ class small_vector { this->assign(first, last); } template <class InIt> - BOOST_CONTAINER_FORCEINLINE small_vector(InIt first, InIt last, const allocator_type& a + inline small_vector(InIt first, InIt last, const allocator_type& a BOOST_CONTAINER_DOCIGN(BOOST_MOVE_I typename dtl::disable_if_c < dtl::is_convertible<InIt BOOST_MOVE_I size_type>::value BOOST_MOVE_I dtl::nat >::type * = 0) @@ -606,57 +612,57 @@ class small_vector : base_type(initial_capacity_t(), internal_capacity(), a) { this->assign(first, last); } - BOOST_CONTAINER_FORCEINLINE small_vector(const small_vector &other) + inline small_vector(const small_vector &other) : base_type( initial_capacity_t(), internal_capacity() , allocator_traits_type::select_on_container_copy_construction(other.get_stored_allocator())) { this->assign(other.cbegin(), other.cend()); } - BOOST_CONTAINER_FORCEINLINE small_vector(const small_vector &other, const allocator_type &a) + inline small_vector(const small_vector &other, const allocator_type &a) : base_type(initial_capacity_t(), internal_capacity(), a) { this->assign(other.cbegin(), other.cend()); } - BOOST_CONTAINER_FORCEINLINE explicit small_vector(const base_type &other) + inline explicit small_vector(const base_type &other) : base_type( initial_capacity_t(), internal_capacity() , allocator_traits_type::select_on_container_copy_construction(other.get_stored_allocator())) { this->assign(other.cbegin(), other.cend()); } - BOOST_CONTAINER_FORCEINLINE explicit small_vector(BOOST_RV_REF(base_type) other) + inline explicit small_vector(BOOST_RV_REF(base_type) other) : base_type(initial_capacity_t(), internal_capacity(), ::boost::move(other.get_stored_allocator())) - { this->move_construct_impl(other, other.get_stored_allocator()); } + { this->base_type::move_construct_impl(other); } - BOOST_CONTAINER_FORCEINLINE small_vector(BOOST_RV_REF(small_vector) other) + inline small_vector(BOOST_RV_REF(small_vector) other) BOOST_NOEXCEPT_IF(boost::container::dtl::is_nothrow_move_constructible<value_type>::value) : base_type(initial_capacity_t(), internal_capacity(), ::boost::move(other.get_stored_allocator())) - { this->move_construct_impl(other, other.get_stored_allocator()); } + { this->base_type::move_construct_impl(other); } - BOOST_CONTAINER_FORCEINLINE small_vector(BOOST_RV_REF(small_vector) other, const allocator_type &a) + inline small_vector(BOOST_RV_REF(small_vector) other, const allocator_type &a) : base_type(initial_capacity_t(), internal_capacity(), a) - { this->move_construct_impl(other, a); } + { this->base_type::move_construct_impl(other); } #if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST) - BOOST_CONTAINER_FORCEINLINE small_vector(std::initializer_list<value_type> il, const allocator_type& a = allocator_type()) + inline small_vector(std::initializer_list<value_type> il, const allocator_type& a = allocator_type()) : base_type(initial_capacity_t(), internal_capacity(), a) { this->assign(il.begin(), il.end()); } #endif - BOOST_CONTAINER_FORCEINLINE small_vector& operator=(BOOST_COPY_ASSIGN_REF(small_vector) other) + inline small_vector& operator=(BOOST_COPY_ASSIGN_REF(small_vector) other) { return static_cast<small_vector&>(this->base_type::operator=(static_cast<base_type const&>(other))); } - BOOST_CONTAINER_FORCEINLINE small_vector& operator=(BOOST_RV_REF(small_vector) other) + inline small_vector& operator=(BOOST_RV_REF(small_vector) other) BOOST_NOEXCEPT_IF(boost::container::dtl::is_nothrow_move_assignable<value_type>::value && (allocator_traits_type::propagate_on_container_move_assignment::value || allocator_traits_type::is_always_equal::value)) { return static_cast<small_vector&>(this->base_type::operator=(BOOST_MOVE_BASE(base_type, other))); } - BOOST_CONTAINER_FORCEINLINE small_vector& operator=(const base_type &other) + inline small_vector& operator=(const base_type &other) { return static_cast<small_vector&>(this->base_type::operator=(other)); } - BOOST_CONTAINER_FORCEINLINE small_vector& operator=(BOOST_RV_REF(base_type) other) + inline small_vector& operator=(BOOST_RV_REF(base_type) other) { return static_cast<small_vector&>(this->base_type::operator=(boost::move(other))); } - BOOST_CONTAINER_FORCEINLINE void swap(small_vector &other) + inline void swap(small_vector &other) { return this->base_type::swap(other); } }; diff --git a/contrib/restricted/boost/container/include/boost/container/vector.hpp b/contrib/restricted/boost/container/include/boost/container/vector.hpp index d5d2f1eacb..503a80ba3d 100644 --- a/contrib/restricted/boost/container/include/boost/container/vector.hpp +++ b/contrib/restricted/boost/container/include/boost/container/vector.hpp @@ -120,15 +120,15 @@ class vec_iterator , nat>::type nonconst_iterator; public: - BOOST_CONTAINER_FORCEINLINE + inline const Pointer &get_ptr() const BOOST_NOEXCEPT_OR_NOTHROW { return m_ptr; } - BOOST_CONTAINER_FORCEINLINE + inline Pointer &get_ptr() BOOST_NOEXCEPT_OR_NOTHROW { return m_ptr; } - BOOST_CONTAINER_FORCEINLINE explicit vec_iterator(Pointer ptr) BOOST_NOEXCEPT_OR_NOTHROW + inline explicit vec_iterator(Pointer ptr) BOOST_NOEXCEPT_OR_NOTHROW : m_ptr(ptr) {} #endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED @@ -136,93 +136,93 @@ class vec_iterator public: //Constructors - BOOST_CONTAINER_FORCEINLINE vec_iterator() BOOST_NOEXCEPT_OR_NOTHROW + inline vec_iterator() BOOST_NOEXCEPT_OR_NOTHROW : m_ptr() //Value initialization to achieve "null iterators" (N3644) {} - BOOST_CONTAINER_FORCEINLINE vec_iterator(const vec_iterator& other) BOOST_NOEXCEPT_OR_NOTHROW + inline vec_iterator(const vec_iterator& other) BOOST_NOEXCEPT_OR_NOTHROW : m_ptr(other.get_ptr()) {} - BOOST_CONTAINER_FORCEINLINE vec_iterator(const nonconst_iterator &other) BOOST_NOEXCEPT_OR_NOTHROW + inline vec_iterator(const nonconst_iterator &other) BOOST_NOEXCEPT_OR_NOTHROW : m_ptr(other.get_ptr()) {} - BOOST_CONTAINER_FORCEINLINE vec_iterator & operator=(const vec_iterator& other) BOOST_NOEXCEPT_OR_NOTHROW + inline vec_iterator & operator=(const vec_iterator& other) BOOST_NOEXCEPT_OR_NOTHROW { m_ptr = other.get_ptr(); return *this; } //Pointer like operators - BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE + BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline reference operator*() const BOOST_NOEXCEPT_OR_NOTHROW { BOOST_ASSERT(!!m_ptr); return *m_ptr; } - BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE + BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline pointer operator->() const BOOST_NOEXCEPT_OR_NOTHROW { return m_ptr; } - BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE + BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline reference operator[](difference_type off) const BOOST_NOEXCEPT_OR_NOTHROW { BOOST_ASSERT(!!m_ptr); return m_ptr[off]; } //Increment / Decrement - BOOST_CONTAINER_FORCEINLINE vec_iterator& operator++() BOOST_NOEXCEPT_OR_NOTHROW + inline vec_iterator& operator++() BOOST_NOEXCEPT_OR_NOTHROW { BOOST_ASSERT(!!m_ptr); ++m_ptr; return *this; } - BOOST_CONTAINER_FORCEINLINE vec_iterator operator++(int) BOOST_NOEXCEPT_OR_NOTHROW + inline vec_iterator operator++(int) BOOST_NOEXCEPT_OR_NOTHROW { BOOST_ASSERT(!!m_ptr); return vec_iterator(m_ptr++); } - BOOST_CONTAINER_FORCEINLINE vec_iterator& operator--() BOOST_NOEXCEPT_OR_NOTHROW + inline vec_iterator& operator--() BOOST_NOEXCEPT_OR_NOTHROW { BOOST_ASSERT(!!m_ptr); --m_ptr; return *this; } - BOOST_CONTAINER_FORCEINLINE vec_iterator operator--(int) BOOST_NOEXCEPT_OR_NOTHROW + inline vec_iterator operator--(int) BOOST_NOEXCEPT_OR_NOTHROW { BOOST_ASSERT(!!m_ptr); return vec_iterator(m_ptr--); } //Arithmetic - BOOST_CONTAINER_FORCEINLINE vec_iterator& operator+=(difference_type off) BOOST_NOEXCEPT_OR_NOTHROW + inline vec_iterator& operator+=(difference_type off) BOOST_NOEXCEPT_OR_NOTHROW { BOOST_ASSERT(m_ptr || !off); m_ptr += off; return *this; } - BOOST_CONTAINER_FORCEINLINE vec_iterator& operator-=(difference_type off) BOOST_NOEXCEPT_OR_NOTHROW + inline vec_iterator& operator-=(difference_type off) BOOST_NOEXCEPT_OR_NOTHROW { BOOST_ASSERT(m_ptr || !off); m_ptr -= off; return *this; } - BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE + BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline friend vec_iterator operator+(const vec_iterator &x, difference_type off) BOOST_NOEXCEPT_OR_NOTHROW { BOOST_ASSERT(x.m_ptr || !off); return vec_iterator(x.m_ptr+off); } - BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE + BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline friend vec_iterator operator+(difference_type off, vec_iterator right) BOOST_NOEXCEPT_OR_NOTHROW { BOOST_ASSERT(right.m_ptr || !off); right.m_ptr += off; return right; } - BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE + BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline friend vec_iterator operator-(vec_iterator left, difference_type off) BOOST_NOEXCEPT_OR_NOTHROW { BOOST_ASSERT(left.m_ptr || !off); left.m_ptr -= off; return left; } //Difference - BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE + BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline friend difference_type operator-(const vec_iterator &left, const vec_iterator& right) BOOST_NOEXCEPT_OR_NOTHROW { return left.m_ptr - right.m_ptr; } //Comparison operators - BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE + BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline friend bool operator== (const vec_iterator& l, const vec_iterator& r) BOOST_NOEXCEPT_OR_NOTHROW { return l.m_ptr == r.m_ptr; } - BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE + BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline friend bool operator!= (const vec_iterator& l, const vec_iterator& r) BOOST_NOEXCEPT_OR_NOTHROW { return l.m_ptr != r.m_ptr; } - BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE + BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline friend bool operator< (const vec_iterator& l, const vec_iterator& r) BOOST_NOEXCEPT_OR_NOTHROW { return l.m_ptr < r.m_ptr; } - BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE + BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline friend bool operator<= (const vec_iterator& l, const vec_iterator& r) BOOST_NOEXCEPT_OR_NOTHROW { return l.m_ptr <= r.m_ptr; } - BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE + BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline friend bool operator> (const vec_iterator& l, const vec_iterator& r) BOOST_NOEXCEPT_OR_NOTHROW { return l.m_ptr > r.m_ptr; } - BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE + BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline friend bool operator>= (const vec_iterator& l, const vec_iterator& r) BOOST_NOEXCEPT_OR_NOTHROW { return l.m_ptr >= r.m_ptr; } }; @@ -233,7 +233,7 @@ struct vector_insert_ordered_cursor typedef typename iterator_traits<BiDirPosConstIt>::value_type size_type; typedef typename iterator_traits<BiDirValueIt>::reference reference; - BOOST_CONTAINER_FORCEINLINE vector_insert_ordered_cursor(BiDirPosConstIt posit, BiDirValueIt valueit) + inline vector_insert_ordered_cursor(BiDirPosConstIt posit, BiDirValueIt valueit) : last_position_it(posit), last_value_it(valueit) {} @@ -247,10 +247,10 @@ struct vector_insert_ordered_cursor } } - BOOST_CONTAINER_FORCEINLINE size_type get_pos() const + inline size_type get_pos() const { return *last_position_it; } - BOOST_CONTAINER_FORCEINLINE reference get_val() + inline reference get_val() { return *last_value_it; } BiDirPosConstIt last_position_it; @@ -258,11 +258,11 @@ struct vector_insert_ordered_cursor }; template<class Pointer, bool IsConst> -BOOST_CONTAINER_FORCEINLINE const Pointer &vector_iterator_get_ptr(const vec_iterator<Pointer, IsConst> &it) BOOST_NOEXCEPT_OR_NOTHROW +inline const Pointer &vector_iterator_get_ptr(const vec_iterator<Pointer, IsConst> &it) BOOST_NOEXCEPT_OR_NOTHROW { return it.get_ptr(); } template<class Pointer, bool IsConst> -BOOST_CONTAINER_FORCEINLINE Pointer &get_ptr(vec_iterator<Pointer, IsConst> &it) BOOST_NOEXCEPT_OR_NOTHROW +inline Pointer &get_ptr(vec_iterator<Pointer, IsConst> &it) BOOST_NOEXCEPT_OR_NOTHROW { return it.get_ptr(); } struct initial_capacity_t {}; @@ -351,7 +351,7 @@ struct vector_alloc_holder public: - BOOST_CONTAINER_FORCEINLINE + inline static bool is_propagable_from(const allocator_type &from_alloc, pointer p, const allocator_type &to_alloc, bool const propagate_allocator) { (void)propagate_allocator; (void)p; (void)to_alloc; (void)from_alloc; @@ -361,7 +361,7 @@ struct vector_alloc_holder (propagate_allocator || allocator_traits_type::is_always_equal::value || allocator_traits_type::equal(from_alloc, to_alloc)); } - BOOST_CONTAINER_FORCEINLINE + inline static bool are_swap_propagable(const allocator_type &l_a, pointer l_p, const allocator_type &r_a, pointer r_p, bool const propagate_allocator) { (void)propagate_allocator; (void)l_p; (void)r_p; (void)l_a; (void)r_a; @@ -446,33 +446,33 @@ struct vector_alloc_holder holder.m_size = holder.m_capacity = 0; } - BOOST_CONTAINER_FORCEINLINE ~vector_alloc_holder() BOOST_NOEXCEPT_OR_NOTHROW + inline ~vector_alloc_holder() BOOST_NOEXCEPT_OR_NOTHROW { if(this->m_capacity){ this->deallocate(this->m_start, this->m_capacity); } } - BOOST_CONTAINER_FORCEINLINE void set_stored_size(size_type s) BOOST_NOEXCEPT_OR_NOTHROW + inline void set_stored_size(size_type s) BOOST_NOEXCEPT_OR_NOTHROW { this->m_size = static_cast<stored_size_type>(s); } - BOOST_CONTAINER_FORCEINLINE void dec_stored_size(size_type s) BOOST_NOEXCEPT_OR_NOTHROW + inline void dec_stored_size(size_type s) BOOST_NOEXCEPT_OR_NOTHROW { this->m_size = static_cast<stored_size_type>(this->m_size - s); } - BOOST_CONTAINER_FORCEINLINE void inc_stored_size(size_type s) BOOST_NOEXCEPT_OR_NOTHROW + inline void inc_stored_size(size_type s) BOOST_NOEXCEPT_OR_NOTHROW { this->m_size = static_cast<stored_size_type>(this->m_size + s); } - BOOST_CONTAINER_FORCEINLINE void set_stored_capacity(size_type c) BOOST_NOEXCEPT_OR_NOTHROW + inline void set_stored_capacity(size_type c) BOOST_NOEXCEPT_OR_NOTHROW { this->m_capacity = static_cast<stored_size_type>(c); } - BOOST_CONTAINER_FORCEINLINE pointer allocation_command(boost::container::allocation_type command, + inline pointer allocation_command(boost::container::allocation_type command, size_type limit_size, size_type &prefer_in_recvd_out_size, pointer &reuse) { typedef typename dtl::version<allocator_type>::type alloc_version; return this->priv_allocation_command(alloc_version(), command, limit_size, prefer_in_recvd_out_size, reuse); } - BOOST_CONTAINER_FORCEINLINE pointer allocate(size_type n) + inline pointer allocate(size_type n) { const size_type max_alloc = allocator_traits_type::max_size(this->alloc()); const size_type max = max_alloc <= stored_size_type(-1) ? max_alloc : stored_size_type(-1); @@ -482,7 +482,7 @@ struct vector_alloc_holder return allocator_traits_type::allocate(this->alloc(), n); } - BOOST_CONTAINER_FORCEINLINE void deallocate(const pointer &p, size_type n) + inline void deallocate(const pointer &p, size_type n) { allocator_traits_type::deallocate(this->alloc(), p, n); } @@ -539,22 +539,22 @@ struct vector_alloc_holder x.m_size = x.m_capacity = 0; } - BOOST_CONTAINER_FORCEINLINE allocator_type &alloc() BOOST_NOEXCEPT_OR_NOTHROW + inline allocator_type &alloc() BOOST_NOEXCEPT_OR_NOTHROW { return *this; } - BOOST_CONTAINER_FORCEINLINE const allocator_type &alloc() const BOOST_NOEXCEPT_OR_NOTHROW + inline const allocator_type &alloc() const BOOST_NOEXCEPT_OR_NOTHROW { return *this; } - BOOST_CONTAINER_FORCEINLINE const pointer &start() const BOOST_NOEXCEPT_OR_NOTHROW + inline const pointer &start() const BOOST_NOEXCEPT_OR_NOTHROW { return m_start; } - BOOST_CONTAINER_FORCEINLINE size_type capacity() const BOOST_NOEXCEPT_OR_NOTHROW + inline size_type capacity() const BOOST_NOEXCEPT_OR_NOTHROW { return m_capacity; } - BOOST_CONTAINER_FORCEINLINE void start(const pointer &p) BOOST_NOEXCEPT_OR_NOTHROW + inline void start(const pointer &p) BOOST_NOEXCEPT_OR_NOTHROW { m_start = p; } - BOOST_CONTAINER_FORCEINLINE void capacity(const size_type &c) BOOST_NOEXCEPT_OR_NOTHROW + inline void capacity(const size_type &c) BOOST_NOEXCEPT_OR_NOTHROW { BOOST_ASSERT( c <= stored_size_type(-1)); this->set_stored_capacity(c); } - static BOOST_CONTAINER_FORCEINLINE void on_capacity_overflow() + static inline void on_capacity_overflow() { } private: @@ -680,26 +680,26 @@ struct vector_alloc_holder<Allocator, StoredSizeType, version_0> (this->alloc(), boost::movelib::to_raw_pointer(holder.start()), n, boost::movelib::to_raw_pointer(this->start())); } - static BOOST_CONTAINER_FORCEINLINE void on_capacity_overflow() + static inline void on_capacity_overflow() { allocator_type::on_capacity_overflow(); } - BOOST_CONTAINER_FORCEINLINE void set_stored_size(size_type s) BOOST_NOEXCEPT_OR_NOTHROW + inline void set_stored_size(size_type s) BOOST_NOEXCEPT_OR_NOTHROW { this->m_size = static_cast<stored_size_type>(s); } - BOOST_CONTAINER_FORCEINLINE void dec_stored_size(size_type s) BOOST_NOEXCEPT_OR_NOTHROW + inline void dec_stored_size(size_type s) BOOST_NOEXCEPT_OR_NOTHROW { this->m_size = static_cast<stored_size_type>(this->m_size - s); } - BOOST_CONTAINER_FORCEINLINE void inc_stored_size(size_type s) BOOST_NOEXCEPT_OR_NOTHROW + inline void inc_stored_size(size_type s) BOOST_NOEXCEPT_OR_NOTHROW { this->m_size = static_cast<stored_size_type>(this->m_size + s); } - BOOST_CONTAINER_FORCEINLINE void priv_first_allocation(size_type cap) + inline void priv_first_allocation(size_type cap) { if(cap > allocator_type::internal_capacity){ on_capacity_overflow(); } } - BOOST_CONTAINER_FORCEINLINE void deep_swap(vector_alloc_holder &x) + inline void deep_swap(vector_alloc_holder &x) { this->priv_deep_swap(x); } template<class OtherAllocator, class OtherStoredSizeType, class OtherAllocatorVersion> @@ -712,29 +712,29 @@ struct vector_alloc_holder<Allocator, StoredSizeType, version_0> this->priv_deep_swap(x); } - BOOST_CONTAINER_FORCEINLINE void swap_resources(vector_alloc_holder &) BOOST_NOEXCEPT_OR_NOTHROW + inline void swap_resources(vector_alloc_holder &) BOOST_NOEXCEPT_OR_NOTHROW { //Containers with version 0 allocators can't be moved without moving elements one by one on_capacity_overflow(); } - BOOST_CONTAINER_FORCEINLINE void steal_resources(vector_alloc_holder &) + inline void steal_resources(vector_alloc_holder &) { //Containers with version 0 allocators can't be moved without moving elements one by one on_capacity_overflow(); } - BOOST_CONTAINER_FORCEINLINE allocator_type &alloc() BOOST_NOEXCEPT_OR_NOTHROW + inline allocator_type &alloc() BOOST_NOEXCEPT_OR_NOTHROW { return *this; } - BOOST_CONTAINER_FORCEINLINE const allocator_type &alloc() const BOOST_NOEXCEPT_OR_NOTHROW + inline const allocator_type &alloc() const BOOST_NOEXCEPT_OR_NOTHROW { return *this; } - BOOST_CONTAINER_FORCEINLINE bool try_expand_fwd(size_type at_least) + inline bool try_expand_fwd(size_type at_least) { return !at_least; } - BOOST_CONTAINER_FORCEINLINE pointer start() const BOOST_NOEXCEPT_OR_NOTHROW + inline pointer start() const BOOST_NOEXCEPT_OR_NOTHROW { return allocator_type::internal_storage(); } - BOOST_CONTAINER_FORCEINLINE size_type capacity() const BOOST_NOEXCEPT_OR_NOTHROW + inline size_type capacity() const BOOST_NOEXCEPT_OR_NOTHROW { return allocator_type::internal_capacity; } stored_size_type m_size; @@ -822,7 +822,7 @@ private: typedef value_less<T> value_less_t; //If provided the stored_size option must specify a type that is equal or a type that is smaller. - BOOST_STATIC_ASSERT( (sizeof(stored_size_type) < sizeof(alloc_size_type) || + BOOST_CONTAINER_STATIC_ASSERT( (sizeof(stored_size_type) < sizeof(alloc_size_type) || dtl::is_same<stored_size_type, alloc_size_type>::value) ); typedef typename dtl::version<allocator_type>::type alloc_version; @@ -837,11 +837,11 @@ private: protected: - BOOST_CONTAINER_FORCEINLINE + inline static bool is_propagable_from(const allocator_type &from_alloc, pointer p, const allocator_type &to_alloc, bool const propagate_allocator) { return alloc_holder_t::is_propagable_from(from_alloc, p, to_alloc, propagate_allocator); } - BOOST_CONTAINER_FORCEINLINE + inline static bool are_swap_propagable( const allocator_type &l_a, pointer l_p , const allocator_type &r_a, pointer r_p, bool const propagate_allocator) { return alloc_holder_t::are_swap_propagable(l_a, l_p, r_a, r_p, propagate_allocator); } @@ -855,23 +855,23 @@ private: protected: - BOOST_CONTAINER_FORCEINLINE void steal_resources(vector &x) + inline void steal_resources(vector &x) { return this->m_holder.steal_resources(x.m_holder); } - BOOST_CONTAINER_FORCEINLINE void protected_set_size(size_type n) + inline void protected_set_size(size_type n) { this->m_holder.m_size = static_cast<stored_size_type>(n); } template<class AllocFwd> - BOOST_CONTAINER_FORCEINLINE vector(initial_capacity_t, pointer initial_memory, size_type cap, BOOST_FWD_REF(AllocFwd) a) + inline vector(initial_capacity_t, pointer initial_memory, size_type cap, BOOST_FWD_REF(AllocFwd) a) : m_holder(initial_capacity_t(), initial_memory, cap, ::boost::forward<AllocFwd>(a)) {} - BOOST_CONTAINER_FORCEINLINE vector(initial_capacity_t, pointer initial_memory, size_type cap) + inline vector(initial_capacity_t, pointer initial_memory, size_type cap) : m_holder(initial_capacity_t(), initial_memory, cap) {} template<class SizeType, class AllocFwd> - BOOST_CONTAINER_FORCEINLINE vector(maybe_initial_capacity_t, pointer p, SizeType initial_capacity, BOOST_FWD_REF(AllocFwd) a) + inline vector(maybe_initial_capacity_t, pointer p, SizeType initial_capacity, BOOST_FWD_REF(AllocFwd) a) : m_holder(maybe_initial_capacity_t(), p, initial_capacity, ::boost::forward<AllocFwd>(a)) { #ifdef BOOST_CONTAINER_VECTOR_ALLOC_STATS @@ -880,7 +880,7 @@ private: } template<class SizeType> - BOOST_CONTAINER_FORCEINLINE vector(maybe_initial_capacity_t, pointer p, SizeType initial_capacity) + inline vector(maybe_initial_capacity_t, pointer p, SizeType initial_capacity) : m_holder(maybe_initial_capacity_t(), p, initial_capacity) { #ifdef BOOST_CONTAINER_VECTOR_ALLOC_STATS @@ -1094,7 +1094,7 @@ private: //! <b>Complexity</b>: Constant. vector(BOOST_RV_REF(vector) x) BOOST_NOEXCEPT_OR_NOTHROW : m_holder(boost::move(x.m_holder)) - { BOOST_STATIC_ASSERT((!allocator_traits_type::is_partially_propagable::value)); } + { BOOST_CONTAINER_STATIC_ASSERT((!allocator_traits_type::is_partially_propagable::value)); } #if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST) //! <b>Effects</b>: Constructs a vector that will use a copy of allocator a @@ -1202,7 +1202,7 @@ private: //! <b>Throws</b>: If memory allocation throws or T's copy/move constructor/assignment throws. //! //! <b>Complexity</b>: Linear to the number of elements in x. - BOOST_CONTAINER_FORCEINLINE vector& operator=(BOOST_COPY_ASSIGN_REF(vector) x) + inline vector& operator=(BOOST_COPY_ASSIGN_REF(vector) x) { if (BOOST_LIKELY(&x != this)){ this->priv_copy_assign(x); @@ -1214,7 +1214,7 @@ private: //! <b>Effects</b>: Make *this container contains elements from il. //! //! <b>Complexity</b>: Linear to the range [il.begin(), il.end()). - BOOST_CONTAINER_FORCEINLINE vector& operator=(std::initializer_list<value_type> il) + inline vector& operator=(std::initializer_list<value_type> il) { this->assign(il.begin(), il.end()); return *this; @@ -1232,7 +1232,7 @@ private: //! <b>Complexity</b>: Constant if allocator_traits_type:: //! propagate_on_container_move_assignment is true or //! this->get>allocator() == x.get_allocator(). Linear otherwise. - BOOST_CONTAINER_FORCEINLINE vector& operator=(BOOST_RV_REF(vector) x) + inline vector& operator=(BOOST_RV_REF(vector) x) BOOST_NOEXCEPT_IF(allocator_traits_type::propagate_on_container_move_assignment::value || allocator_traits_type::is_always_equal::value) { @@ -1255,7 +1255,7 @@ private: //! //! <b>Note</b>: Non-standard extension to support static_vector template<class OtherA> - BOOST_CONTAINER_FORCEINLINE typename dtl::enable_if_and + inline typename dtl::enable_if_and < vector& , dtl::is_version<typename real_allocator<T, OtherA>::type, 0> , dtl::is_different<typename real_allocator<T, OtherA>::type, allocator_type> @@ -1277,7 +1277,7 @@ private: //! //! <b>Note</b>: Non-standard extension to support static_vector template<class OtherA> - BOOST_CONTAINER_FORCEINLINE typename dtl::enable_if_and + inline typename dtl::enable_if_and < vector& , dtl::is_version<typename real_allocator<T, OtherA>::type, 0> , dtl::is_different<typename real_allocator<T, OtherA>::type, allocator_type> @@ -1334,7 +1334,7 @@ private: //! <b>Throws</b>: If memory allocation throws or //! T's constructor from dereferencing iniializer_list iterator throws. //! - BOOST_CONTAINER_FORCEINLINE void assign(std::initializer_list<T> il) + inline void assign(std::initializer_list<T> il) { this->assign(il.begin(), il.end()); } @@ -1405,7 +1405,7 @@ private: //! T's copy/move constructor/assignment throws. //! //! <b>Complexity</b>: Linear to n. - BOOST_CONTAINER_FORCEINLINE void assign(size_type n, const value_type& val) + inline void assign(size_type n, const value_type& val) { this->assign(cvalue_iterator(val, n), cvalue_iterator()); } //! <b>Effects</b>: Returns a copy of the internal allocator. @@ -1413,7 +1413,7 @@ private: //! <b>Throws</b>: If allocator's copy constructor throws. //! //! <b>Complexity</b>: Constant. - BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE allocator_type get_allocator() const BOOST_NOEXCEPT_OR_NOTHROW + BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline allocator_type get_allocator() const BOOST_NOEXCEPT_OR_NOTHROW { return this->m_holder.alloc(); } //! <b>Effects</b>: Returns a reference to the internal allocator. @@ -1423,7 +1423,7 @@ private: //! <b>Complexity</b>: Constant. //! //! <b>Note</b>: Non-standard extension. - BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE + BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline stored_allocator_type &get_stored_allocator() BOOST_NOEXCEPT_OR_NOTHROW { return this->m_holder.alloc(); } @@ -1434,7 +1434,7 @@ private: //! <b>Complexity</b>: Constant. //! //! <b>Note</b>: Non-standard extension. - BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE + BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline const stored_allocator_type &get_stored_allocator() const BOOST_NOEXCEPT_OR_NOTHROW { return this->m_holder.alloc(); } @@ -1449,7 +1449,7 @@ private: //! <b>Throws</b>: Nothing. //! //! <b>Complexity</b>: Constant. - BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE iterator begin() BOOST_NOEXCEPT_OR_NOTHROW + BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline iterator begin() BOOST_NOEXCEPT_OR_NOTHROW { return iterator(this->m_holder.start()); } //! <b>Effects</b>: Returns a const_iterator to the first element contained in the vector. @@ -1457,7 +1457,7 @@ private: //! <b>Throws</b>: Nothing. //! //! <b>Complexity</b>: Constant. - BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE const_iterator begin() const BOOST_NOEXCEPT_OR_NOTHROW + BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline const_iterator begin() const BOOST_NOEXCEPT_OR_NOTHROW { return const_iterator(this->m_holder.start()); } //! <b>Effects</b>: Returns an iterator to the end of the vector. @@ -1465,7 +1465,7 @@ private: //! <b>Throws</b>: Nothing. //! //! <b>Complexity</b>: Constant. - BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE iterator end() BOOST_NOEXCEPT_OR_NOTHROW + BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline iterator end() BOOST_NOEXCEPT_OR_NOTHROW { iterator it (this->m_holder.start()); it += difference_type(this->m_holder.m_size); @@ -1477,7 +1477,7 @@ private: //! <b>Throws</b>: Nothing. //! //! <b>Complexity</b>: Constant. - BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE const_iterator end() const BOOST_NOEXCEPT_OR_NOTHROW + BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline const_iterator end() const BOOST_NOEXCEPT_OR_NOTHROW { return this->cend(); } //! <b>Effects</b>: Returns a reverse_iterator pointing to the beginning @@ -1486,7 +1486,7 @@ private: //! <b>Throws</b>: Nothing. //! //! <b>Complexity</b>: Constant. - BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE reverse_iterator rbegin() BOOST_NOEXCEPT_OR_NOTHROW + BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline reverse_iterator rbegin() BOOST_NOEXCEPT_OR_NOTHROW { return reverse_iterator(this->end()); } //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the beginning @@ -1495,7 +1495,7 @@ private: //! <b>Throws</b>: Nothing. //! //! <b>Complexity</b>: Constant. - BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE const_reverse_iterator rbegin() const BOOST_NOEXCEPT_OR_NOTHROW + BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline const_reverse_iterator rbegin() const BOOST_NOEXCEPT_OR_NOTHROW { return this->crbegin(); } //! <b>Effects</b>: Returns a reverse_iterator pointing to the end @@ -1504,7 +1504,7 @@ private: //! <b>Throws</b>: Nothing. //! //! <b>Complexity</b>: Constant. - BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE reverse_iterator rend() BOOST_NOEXCEPT_OR_NOTHROW + BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline reverse_iterator rend() BOOST_NOEXCEPT_OR_NOTHROW { return reverse_iterator(this->begin()); } //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the end @@ -1513,7 +1513,7 @@ private: //! <b>Throws</b>: Nothing. //! //! <b>Complexity</b>: Constant. - BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE const_reverse_iterator rend() const BOOST_NOEXCEPT_OR_NOTHROW + BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline const_reverse_iterator rend() const BOOST_NOEXCEPT_OR_NOTHROW { return this->crend(); } //! <b>Effects</b>: Returns a const_iterator to the first element contained in the vector. @@ -1521,7 +1521,7 @@ private: //! <b>Throws</b>: Nothing. //! //! <b>Complexity</b>: Constant. - BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE const_iterator cbegin() const BOOST_NOEXCEPT_OR_NOTHROW + BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline const_iterator cbegin() const BOOST_NOEXCEPT_OR_NOTHROW { return const_iterator(this->m_holder.start()); } //! <b>Effects</b>: Returns a const_iterator to the end of the vector. @@ -1529,7 +1529,7 @@ private: //! <b>Throws</b>: Nothing. //! //! <b>Complexity</b>: Constant. - BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE const_iterator cend() const BOOST_NOEXCEPT_OR_NOTHROW + BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline const_iterator cend() const BOOST_NOEXCEPT_OR_NOTHROW { const_iterator it (this->m_holder.start()); it += difference_type(this->m_holder.m_size); @@ -1542,7 +1542,7 @@ private: //! <b>Throws</b>: Nothing. //! //! <b>Complexity</b>: Constant. - BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE const_reverse_iterator crbegin() const BOOST_NOEXCEPT_OR_NOTHROW + BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline const_reverse_iterator crbegin() const BOOST_NOEXCEPT_OR_NOTHROW { return const_reverse_iterator(this->end());} //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the end @@ -1551,7 +1551,7 @@ private: //! <b>Throws</b>: Nothing. //! //! <b>Complexity</b>: Constant. - BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE const_reverse_iterator crend() const BOOST_NOEXCEPT_OR_NOTHROW + BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline const_reverse_iterator crend() const BOOST_NOEXCEPT_OR_NOTHROW { return const_reverse_iterator(this->begin()); } ////////////////////////////////////////////// @@ -1565,7 +1565,7 @@ private: //! <b>Throws</b>: Nothing. //! //! <b>Complexity</b>: Constant. - BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE bool empty() const BOOST_NOEXCEPT_OR_NOTHROW + BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline bool empty() const BOOST_NOEXCEPT_OR_NOTHROW { return !this->m_holder.m_size; } //! <b>Effects</b>: Returns the number of the elements contained in the vector. @@ -1573,7 +1573,7 @@ private: //! <b>Throws</b>: Nothing. //! //! <b>Complexity</b>: Constant. - BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE size_type size() const BOOST_NOEXCEPT_OR_NOTHROW + BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline size_type size() const BOOST_NOEXCEPT_OR_NOTHROW { return this->m_holder.m_size; } //! <b>Effects</b>: Returns the largest possible size of the vector. @@ -1581,7 +1581,7 @@ private: //! <b>Throws</b>: Nothing. //! //! <b>Complexity</b>: Constant. - BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE size_type max_size() const BOOST_NOEXCEPT_OR_NOTHROW + BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline size_type max_size() const BOOST_NOEXCEPT_OR_NOTHROW { return allocator_traits_type::max_size(this->m_holder.alloc()); } //! <b>Effects</b>: Inserts or erases elements at the end such that @@ -1590,7 +1590,7 @@ private: //! <b>Throws</b>: If memory allocation throws, or T's copy/move or value initialization throws. //! //! <b>Complexity</b>: Linear to the difference between size() and new_size. - BOOST_CONTAINER_FORCEINLINE void resize(size_type new_size) + inline void resize(size_type new_size) { this->priv_resize(new_size, value_init, alloc_version()); } //! <b>Effects</b>: Inserts or erases elements at the end such that @@ -1601,7 +1601,7 @@ private: //! <b>Complexity</b>: Linear to the difference between size() and new_size. //! //! <b>Note</b>: Non-standard extension - BOOST_CONTAINER_FORCEINLINE void resize(size_type new_size, default_init_t) + inline void resize(size_type new_size, default_init_t) { this->priv_resize(new_size, default_init, alloc_version()); } //! <b>Effects</b>: Inserts or erases elements at the end such that @@ -1610,7 +1610,7 @@ private: //! <b>Throws</b>: If memory allocation throws, or T's copy/move constructor throws. //! //! <b>Complexity</b>: Linear to the difference between size() and new_size. - BOOST_CONTAINER_FORCEINLINE void resize(size_type new_size, const T& x) + inline void resize(size_type new_size, const T& x) { this->priv_resize(new_size, x, alloc_version()); } //! <b>Effects</b>: Number of elements for which memory has been allocated. @@ -1619,7 +1619,7 @@ private: //! <b>Throws</b>: Nothing. //! //! <b>Complexity</b>: Constant. - BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE size_type capacity() const BOOST_NOEXCEPT_OR_NOTHROW + BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline size_type capacity() const BOOST_NOEXCEPT_OR_NOTHROW { return this->m_holder.capacity(); } //! <b>Effects</b>: If n is less than or equal to capacity(), this call has no @@ -1628,7 +1628,7 @@ private: //! n; otherwise, capacity() is unchanged. In either case, size() is unchanged. //! //! <b>Throws</b>: If memory allocation allocation throws or T's copy/move constructor throws. - BOOST_CONTAINER_FORCEINLINE void reserve(size_type new_cap) + inline void reserve(size_type new_cap) { if (this->capacity() < new_cap){ this->priv_move_to_new_buffer(new_cap, alloc_version()); @@ -1641,7 +1641,7 @@ private: //! <b>Throws</b>: If memory allocation throws, or T's copy/move constructor throws. //! //! <b>Complexity</b>: Linear to size(). - BOOST_CONTAINER_FORCEINLINE void shrink_to_fit() + inline void shrink_to_fit() { this->priv_shrink_to_fit(alloc_version()); } ////////////////////////////////////////////// @@ -1658,7 +1658,7 @@ private: //! <b>Throws</b>: Nothing. //! //! <b>Complexity</b>: Constant. - BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE reference front() BOOST_NOEXCEPT_OR_NOTHROW + BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline reference front() BOOST_NOEXCEPT_OR_NOTHROW { BOOST_ASSERT(!this->empty()); return *this->m_holder.start(); @@ -1672,7 +1672,7 @@ private: //! <b>Throws</b>: Nothing. //! //! <b>Complexity</b>: Constant. - BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE const_reference front() const BOOST_NOEXCEPT_OR_NOTHROW + BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline const_reference front() const BOOST_NOEXCEPT_OR_NOTHROW { BOOST_ASSERT(!this->empty()); return *this->m_holder.start(); @@ -1686,7 +1686,7 @@ private: //! <b>Throws</b>: Nothing. //! //! <b>Complexity</b>: Constant. - BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE reference back() BOOST_NOEXCEPT_OR_NOTHROW + BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline reference back() BOOST_NOEXCEPT_OR_NOTHROW { BOOST_ASSERT(!this->empty()); return this->m_holder.start()[difference_type(this->m_holder.m_size - 1u)]; @@ -1700,7 +1700,7 @@ private: //! <b>Throws</b>: Nothing. //! //! <b>Complexity</b>: Constant. - BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE const_reference back() const BOOST_NOEXCEPT_OR_NOTHROW + BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline const_reference back() const BOOST_NOEXCEPT_OR_NOTHROW { BOOST_ASSERT(!this->empty()); return this->m_holder.start()[this->m_holder.m_size - 1]; @@ -1714,7 +1714,7 @@ private: //! <b>Throws</b>: Nothing. //! //! <b>Complexity</b>: Constant. - BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE reference operator[](size_type n) BOOST_NOEXCEPT_OR_NOTHROW + BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline reference operator[](size_type n) BOOST_NOEXCEPT_OR_NOTHROW { BOOST_ASSERT(this->m_holder.m_size > n); return this->m_holder.start()[difference_type(n)]; @@ -1728,7 +1728,7 @@ private: //! <b>Throws</b>: Nothing. //! //! <b>Complexity</b>: Constant. - BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE + BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline const_reference operator[](size_type n) const BOOST_NOEXCEPT_OR_NOTHROW { BOOST_ASSERT(this->m_holder.m_size > n); @@ -1746,7 +1746,7 @@ private: //! <b>Complexity</b>: Constant. //! //! <b>Note</b>: Non-standard extension - BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE + BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline iterator nth(size_type n) BOOST_NOEXCEPT_OR_NOTHROW { BOOST_ASSERT(this->m_holder.m_size >= n); @@ -1764,7 +1764,7 @@ private: //! <b>Complexity</b>: Constant. //! //! <b>Note</b>: Non-standard extension - BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE + BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline const_iterator nth(size_type n) const BOOST_NOEXCEPT_OR_NOTHROW { BOOST_ASSERT(this->m_holder.m_size >= n); @@ -1781,7 +1781,7 @@ private: //! <b>Complexity</b>: Constant. //! //! <b>Note</b>: Non-standard extension - BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE + BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline size_type index_of(iterator p) BOOST_NOEXCEPT_OR_NOTHROW { //Range check assert done in priv_index_of @@ -1798,7 +1798,7 @@ private: //! <b>Complexity</b>: Constant. //! //! <b>Note</b>: Non-standard extension - BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE + BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline size_type index_of(const_iterator p) const BOOST_NOEXCEPT_OR_NOTHROW { //Range check assert done in priv_index_of @@ -1813,7 +1813,7 @@ private: //! <b>Throws</b>: range_error if n >= size() //! //! <b>Complexity</b>: Constant. - BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE reference at(size_type n) + BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline reference at(size_type n) { this->priv_throw_if_out_of_range(n); return this->m_holder.start()[difference_type(n)]; @@ -1827,7 +1827,7 @@ private: //! <b>Throws</b>: range_error if n >= size() //! //! <b>Complexity</b>: Constant. - BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE const_reference at(size_type n) const + BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline const_reference at(size_type n) const { this->priv_throw_if_out_of_range(n); return this->m_holder.start()[n]; @@ -1845,7 +1845,7 @@ private: //! <b>Throws</b>: Nothing. //! //! <b>Complexity</b>: Constant. - BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE T* data() BOOST_NOEXCEPT_OR_NOTHROW + BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline T* data() BOOST_NOEXCEPT_OR_NOTHROW { return this->priv_raw_begin(); } //! <b>Returns</b>: A pointer such that [data(),data() + size()) is a valid range. @@ -1854,7 +1854,7 @@ private: //! <b>Throws</b>: Nothing. //! //! <b>Complexity</b>: Constant. - BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE const T * data() const BOOST_NOEXCEPT_OR_NOTHROW + BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline const T * data() const BOOST_NOEXCEPT_OR_NOTHROW { return this->priv_raw_begin(); } ////////////////////////////////////////////// @@ -1874,7 +1874,7 @@ private: //! //! <b>Complexity</b>: Amortized constant time. template<class ...Args> - BOOST_CONTAINER_FORCEINLINE reference emplace_back(BOOST_FWD_REF(Args)...args) + inline reference emplace_back(BOOST_FWD_REF(Args)...args) { T* const p = this->priv_raw_end(); if (BOOST_LIKELY(this->room_enough())){ @@ -1899,7 +1899,7 @@ private: //! //! <b>Note</b>: Non-standard extension. template<class ...Args> - BOOST_CONTAINER_FORCEINLINE bool stable_emplace_back(BOOST_FWD_REF(Args)...args) + inline bool stable_emplace_back(BOOST_FWD_REF(Args)...args) { const bool is_room_enough = this->room_enough() || (alloc_version::value == 2 && this->m_holder.try_expand_fwd(1u)); if (BOOST_LIKELY(is_room_enough)){ @@ -1921,7 +1921,7 @@ private: //! <b>Complexity</b>: If position is end(), amortized constant time //! Linear time otherwise. template<class ...Args> - BOOST_CONTAINER_FORCEINLINE iterator emplace(const_iterator position, BOOST_FWD_REF(Args) ...args) + inline iterator emplace(const_iterator position, BOOST_FWD_REF(Args) ...args) { BOOST_ASSERT(this->priv_in_range_or_end(position)); //Just call more general insert(pos, size, value) and return iterator @@ -1934,7 +1934,7 @@ private: #define BOOST_CONTAINER_VECTOR_EMPLACE_CODE(N) \ BOOST_MOVE_TMPL_LT##N BOOST_MOVE_CLASS##N BOOST_MOVE_GT##N \ - BOOST_CONTAINER_FORCEINLINE reference emplace_back(BOOST_MOVE_UREF##N)\ + inline reference emplace_back(BOOST_MOVE_UREF##N)\ {\ T* const p = this->priv_raw_end();\ if (BOOST_LIKELY(this->room_enough())){\ @@ -1951,7 +1951,7 @@ private: }\ \ BOOST_MOVE_TMPL_LT##N BOOST_MOVE_CLASS##N BOOST_MOVE_GT##N \ - BOOST_CONTAINER_FORCEINLINE bool stable_emplace_back(BOOST_MOVE_UREF##N)\ + inline bool stable_emplace_back(BOOST_MOVE_UREF##N)\ {\ const bool is_room_enough = this->room_enough() || (alloc_version::value == 2 && this->m_holder.try_expand_fwd(1u));\ if (BOOST_LIKELY(is_room_enough)){\ @@ -1963,7 +1963,7 @@ private: }\ \ BOOST_MOVE_TMPL_LT##N BOOST_MOVE_CLASS##N BOOST_MOVE_GT##N \ - BOOST_CONTAINER_FORCEINLINE iterator emplace(const_iterator pos BOOST_MOVE_I##N BOOST_MOVE_UREF##N)\ + inline iterator emplace(const_iterator pos BOOST_MOVE_I##N BOOST_MOVE_UREF##N)\ {\ BOOST_ASSERT(this->priv_in_range_or_end(pos));\ typedef dtl::insert_emplace_proxy_arg##N<allocator_type BOOST_MOVE_I##N BOOST_MOVE_TARG##N> proxy_t;\ @@ -2029,7 +2029,7 @@ private: //! <b>Throws</b>: If memory allocation throws or T's copy/move constructor throws. //! //! <b>Complexity</b>: Linear to n. - BOOST_CONTAINER_FORCEINLINE iterator insert(const_iterator p, size_type n, const T& x) + inline iterator insert(const_iterator p, size_type n, const T& x) { BOOST_ASSERT(this->priv_in_range_or_end(p)); dtl::insert_n_copies_proxy<allocator_type> proxy(x); @@ -2069,7 +2069,7 @@ private: #if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED) template <class FwdIt> - BOOST_CONTAINER_FORCEINLINE iterator insert(const_iterator pos, FwdIt first, FwdIt last + inline iterator insert(const_iterator pos, FwdIt first, FwdIt last , typename dtl::disable_if_or < void , dtl::is_convertible<FwdIt, size_type> @@ -2106,7 +2106,7 @@ private: //! a non-standard extension. #if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED) template <class InIt> - BOOST_CONTAINER_FORCEINLINE iterator insert(const_iterator pos, size_type num, InIt first, InIt last) + inline iterator insert(const_iterator pos, size_type num, InIt first, InIt last) { BOOST_ASSERT(this->priv_in_range_or_end(pos)); BOOST_ASSERT(dtl::is_input_iterator<InIt>::value || @@ -2125,7 +2125,7 @@ private: //! <b>Returns</b>: an iterator to the first inserted element or position if first == last. //! //! <b>Complexity</b>: Linear to the range [il.begin(), il.end()). - BOOST_CONTAINER_FORCEINLINE iterator insert(const_iterator position, std::initializer_list<value_type> il) + inline iterator insert(const_iterator position, std::initializer_list<value_type> il) { //Assertion done in insert() return this->insert(position, il.begin(), il.end()); @@ -2137,7 +2137,7 @@ private: //! <b>Throws</b>: Nothing. //! //! <b>Complexity</b>: Constant time. - BOOST_CONTAINER_FORCEINLINE void pop_back() BOOST_NOEXCEPT_OR_NOTHROW + inline void pop_back() BOOST_NOEXCEPT_OR_NOTHROW { BOOST_ASSERT(!this->empty()); //Destroy last element @@ -2199,7 +2199,7 @@ private: //! <b>Throws</b>: Nothing. //! //! <b>Complexity</b>: Constant. - BOOST_CONTAINER_FORCEINLINE void swap(vector& x) + inline void swap(vector& x) BOOST_NOEXCEPT_IF( ((allocator_traits_type::propagate_on_container_swap::value || allocator_traits_type::is_always_equal::value) && !dtl::is_version<allocator_type, 0>::value)) @@ -2217,7 +2217,7 @@ private: //! //! <b>Note</b>: Non-standard extension to support static_vector template<class OtherA> - BOOST_CONTAINER_FORCEINLINE void swap(vector<T, OtherA, Options> & x + inline void swap(vector<T, OtherA, Options> & x , typename dtl::enable_if_and < void , dtl::is_version<typename real_allocator<T, OtherA>::type, 0> @@ -2233,19 +2233,19 @@ private: //! <b>Throws</b>: Nothing. //! //! <b>Complexity</b>: Linear to the number of elements in the container. - BOOST_CONTAINER_FORCEINLINE void clear() BOOST_NOEXCEPT_OR_NOTHROW + inline void clear() BOOST_NOEXCEPT_OR_NOTHROW { this->priv_destroy_all(); } //! <b>Effects</b>: Returns true if x and y are equal //! //! <b>Complexity</b>: Linear to the number of elements in the container. - BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE friend bool operator==(const vector& x, const vector& y) + BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline friend bool operator==(const vector& x, const vector& y) { return x.size() == y.size() && ::boost::container::algo_equal(x.begin(), x.end(), y.begin()); } //! <b>Effects</b>: Returns true if x and y are unequal //! //! <b>Complexity</b>: Linear to the number of elements in the container. - BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE friend bool operator!=(const vector& x, const vector& y) + BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline friend bool operator!=(const vector& x, const vector& y) { return !(x == y); } //! <b>Effects</b>: Returns true if x is less than y @@ -2257,25 +2257,25 @@ private: //! <b>Effects</b>: Returns true if x is greater than y //! //! <b>Complexity</b>: Linear to the number of elements in the container. - BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE friend bool operator>(const vector& x, const vector& y) + BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline friend bool operator>(const vector& x, const vector& y) { return y < x; } //! <b>Effects</b>: Returns true if x is equal or less than y //! //! <b>Complexity</b>: Linear to the number of elements in the container. - BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE friend bool operator<=(const vector& x, const vector& y) + BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline friend bool operator<=(const vector& x, const vector& y) { return !(y < x); } //! <b>Effects</b>: Returns true if x is equal or greater than y //! //! <b>Complexity</b>: Linear to the number of elements in the container. - BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE friend bool operator>=(const vector& x, const vector& y) + BOOST_CONTAINER_ATTRIBUTE_NODISCARD inline friend bool operator>=(const vector& x, const vector& y) { return !(x < y); } //! <b>Effects</b>: x.swap(y) //! //! <b>Complexity</b>: Constant. - BOOST_CONTAINER_FORCEINLINE friend void swap(vector& x, vector& y) + inline friend void swap(vector& x, vector& y) BOOST_NOEXCEPT_IF(BOOST_NOEXCEPT(x.swap(y))) { x.swap(y); } @@ -2297,18 +2297,18 @@ private: //Absolutely experimental. This function might change, disappear or simply crash! template<class BiDirPosConstIt, class BiDirValueIt> - BOOST_CONTAINER_FORCEINLINE void insert_ordered_at(const size_type element_count, BiDirPosConstIt last_position_it, BiDirValueIt last_value_it) + inline void insert_ordered_at(const size_type element_count, BiDirPosConstIt last_position_it, BiDirValueIt last_value_it) { typedef vector_insert_ordered_cursor<BiDirPosConstIt, BiDirValueIt> inserter_t; return this->priv_insert_ordered_at(element_count, inserter_t(last_position_it, last_value_it)); } template<class InputIt> - BOOST_CONTAINER_FORCEINLINE void merge(InputIt first, InputIt last) + inline void merge(InputIt first, InputIt last) { this->merge(first, last, value_less_t()); } template<class InputIt, class Compare> - BOOST_CONTAINER_FORCEINLINE void merge(InputIt first, InputIt last, Compare comp) + inline void merge(InputIt first, InputIt last, Compare comp) { size_type const s = this->size(); size_type const c = this->capacity(); @@ -2329,11 +2329,11 @@ private: } template<class InputIt> - BOOST_CONTAINER_FORCEINLINE void merge_unique(InputIt first, InputIt last) + inline void merge_unique(InputIt first, InputIt last) { this->merge_unique(first, last, value_less_t()); } template<class InputIt, class Compare> - BOOST_CONTAINER_FORCEINLINE void merge_unique(InputIt first, InputIt last, Compare comp) + inline void merge_unique(InputIt first, InputIt last, Compare comp) { size_type const old_size = this->size(); this->priv_set_difference_back(first, last, comp); @@ -2436,7 +2436,7 @@ private: } template<class FwdIt, class Compare> - BOOST_CONTAINER_FORCEINLINE void priv_merge_in_new_buffer(FwdIt, size_type, Compare, version_0) + inline void priv_merge_in_new_buffer(FwdIt, size_type, Compare, version_0) { alloc_holder_t::on_capacity_overflow(); } @@ -2498,13 +2498,13 @@ private: new_values_destroyer.release(); } - BOOST_CONTAINER_FORCEINLINE bool room_enough() const + inline bool room_enough() const { return this->m_holder.m_size != this->m_holder.capacity(); } - BOOST_CONTAINER_FORCEINLINE pointer back_ptr() const + inline pointer back_ptr() const { return this->m_holder.start() + difference_type(this->m_holder.m_size); } - BOOST_CONTAINER_FORCEINLINE size_type priv_index_of(pointer p) const + inline size_type priv_index_of(pointer p) const { BOOST_ASSERT(this->m_holder.start() <= p); BOOST_ASSERT(p <= (this->m_holder.start()+difference_type(this->size()))); @@ -2607,7 +2607,7 @@ private: } template<class Vector> //Template it to avoid it in explicit instantiations - BOOST_CONTAINER_FORCEINLINE void priv_swap(Vector &x, dtl::true_type) //version_0 + inline void priv_swap(Vector &x, dtl::true_type) //version_0 { this->m_holder.deep_swap(x.m_holder); } template<class Vector> //Template it to avoid it in explicit instantiations @@ -2653,16 +2653,16 @@ private: dtl::swap_alloc(this->m_holder.alloc(), x.m_holder.alloc(), dtl::bool_<propagate_alloc>()); } - BOOST_CONTAINER_FORCEINLINE void priv_move_to_new_buffer(size_type, version_0) + inline void priv_move_to_new_buffer(size_type, version_0) { alloc_holder_t::on_capacity_overflow(); } - BOOST_CONTAINER_FORCEINLINE dtl::insert_range_proxy<allocator_type, boost::move_iterator<T*> > priv_dummy_empty_proxy() + inline dtl::insert_range_proxy<allocator_type, boost::move_iterator<T*> > priv_dummy_empty_proxy() { return dtl::insert_range_proxy<allocator_type, boost::move_iterator<T*> > (::boost::make_move_iterator((T *)0)); } - BOOST_CONTAINER_FORCEINLINE void priv_move_to_new_buffer(size_type new_cap, version_1) + inline void priv_move_to_new_buffer(size_type new_cap, version_1) { //There is not enough memory, allocate a new buffer //Pass the hint so that allocators can take advantage of this. @@ -2735,34 +2735,34 @@ private: } template<class U> - BOOST_CONTAINER_FORCEINLINE iterator priv_insert(const const_iterator &p, BOOST_FWD_REF(U) u) + inline iterator priv_insert(const const_iterator &p, BOOST_FWD_REF(U) u) { return this->emplace(p, ::boost::forward<U>(u)); } template <class U> - BOOST_CONTAINER_FORCEINLINE void priv_push_back(BOOST_FWD_REF(U) u) + inline void priv_push_back(BOOST_FWD_REF(U) u) { this->emplace_back(::boost::forward<U>(u)); } //Overload to support compiler errors that instantiate too much - BOOST_CONTAINER_FORCEINLINE void priv_push_back(::boost::move_detail::nat) + inline void priv_push_back(::boost::move_detail::nat) {} - BOOST_CONTAINER_FORCEINLINE iterator priv_insert(const_iterator, ::boost::move_detail::nat) + inline iterator priv_insert(const_iterator, ::boost::move_detail::nat) { return iterator(); } - BOOST_CONTAINER_FORCEINLINE dtl::insert_n_copies_proxy<allocator_type> priv_resize_proxy(const T &x) + inline dtl::insert_n_copies_proxy<allocator_type> priv_resize_proxy(const T &x) { return dtl::insert_n_copies_proxy<allocator_type>(x); } - BOOST_CONTAINER_FORCEINLINE dtl::insert_default_initialized_n_proxy<allocator_type> priv_resize_proxy(default_init_t) + inline dtl::insert_default_initialized_n_proxy<allocator_type> priv_resize_proxy(default_init_t) { return dtl::insert_default_initialized_n_proxy<allocator_type>(); } - BOOST_CONTAINER_FORCEINLINE dtl::insert_value_initialized_n_proxy<allocator_type> priv_resize_proxy(value_init_t) + inline dtl::insert_value_initialized_n_proxy<allocator_type> priv_resize_proxy(value_init_t) { return dtl::insert_value_initialized_n_proxy<allocator_type>(); } - BOOST_CONTAINER_FORCEINLINE void priv_shrink_to_fit(version_0) BOOST_NOEXCEPT_OR_NOTHROW + inline void priv_shrink_to_fit(version_0) BOOST_NOEXCEPT_OR_NOTHROW {} void priv_shrink_to_fit(version_1) @@ -2808,7 +2808,7 @@ private: } template <class InsertionProxy> - BOOST_CONTAINER_FORCEINLINE iterator priv_insert_forward_range_no_capacity + inline iterator priv_insert_forward_range_no_capacity (T * const, const size_type, const InsertionProxy , version_0) { return alloc_holder_t::on_capacity_overflow(), iterator(); @@ -2879,7 +2879,7 @@ private: } template <class InsertionProxy> - BOOST_CONTAINER_FORCEINLINE iterator priv_insert_forward_range + inline iterator priv_insert_forward_range (const pointer &pos, const size_type n, const InsertionProxy insert_range_proxy) { BOOST_ASSERT(this->m_holder.capacity() >= this->m_holder.m_size); @@ -3017,14 +3017,14 @@ private: } private: - BOOST_CONTAINER_FORCEINLINE T *priv_raw_begin() const + inline T *priv_raw_begin() const { return boost::movelib::to_raw_pointer(m_holder.start()); } - BOOST_CONTAINER_FORCEINLINE T* priv_raw_end() const + inline T* priv_raw_end() const { return this->priv_raw_begin() + this->m_holder.m_size; } template <class InsertionProxy> //inline single-element version as it is significantly smaller - BOOST_CONTAINER_FORCEINLINE void priv_insert_forward_range_expand_forward + inline void priv_insert_forward_range_expand_forward (T* const raw_pos, const size_type, InsertionProxy insert_range_proxy, dtl::true_type) { BOOST_ASSERT(this->room_enough()); @@ -3051,7 +3051,7 @@ private: } template <class InsertionProxy> - BOOST_CONTAINER_FORCEINLINE void priv_insert_forward_range_expand_forward + inline void priv_insert_forward_range_expand_forward (T* const raw_pos, const size_type n, InsertionProxy insert_range_proxy, dtl::false_type) { //There is enough memory @@ -3113,12 +3113,12 @@ private: } } - BOOST_CONTAINER_FORCEINLINE bool priv_in_range(const_iterator pos) const + inline bool priv_in_range(const_iterator pos) const { return (this->begin() <= pos) && (pos < this->end()); } - BOOST_CONTAINER_FORCEINLINE bool priv_in_range_or_end(const_iterator pos) const + inline bool priv_in_range_or_end(const_iterator pos) const { return (this->begin() <= pos) && (pos <= this->end()); } diff --git a/contrib/restricted/boost/container/src/dlmalloc_2_8_6.c b/contrib/restricted/boost/container/src/dlmalloc_2_8_6.c index 3424f59b17..63ef0d3fb8 100644 --- a/contrib/restricted/boost/container/src/dlmalloc_2_8_6.c +++ b/contrib/restricted/boost/container/src/dlmalloc_2_8_6.c @@ -4013,6 +4013,7 @@ static void add_segment(mstate m, char* tbase, size_t tsize, flag_t mmapped) { break; } assert(nfences >= 2); + (void) nfences; //Added by iG to silence warning about unused nfences /* Insert the rest of old top into a bin as an ordinary free chunk */ if (csp != old_top) { diff --git a/contrib/restricted/boost/container/src/dlmalloc_ext_2_8_6.c b/contrib/restricted/boost/container/src/dlmalloc_ext_2_8_6.c index 2bdd3afdf7..778dd88247 100644 --- a/contrib/restricted/boost/container/src/dlmalloc_ext_2_8_6.c +++ b/contrib/restricted/boost/container/src/dlmalloc_ext_2_8_6.c @@ -1224,14 +1224,12 @@ size_t boost_cont_allocated_memory() if (is_initialized(m)) { size_t nfree = SIZE_T_ONE; /* top always free */ size_t mfree = m->topsize + TOP_FOOT_SIZE; - size_t sum = mfree; msegmentptr s = &m->seg; while (s != 0) { mchunkptr q = align_as_chunk(s->base); while (segment_holds(s, q) && q != m->top && q->head != FENCEPOST_HEAD) { size_t sz = chunksize(q); - sum += sz; if (!is_inuse(q)) { mfree += sz; ++nfree; diff --git a/contrib/restricted/boost/container/src/pool_resource.cpp b/contrib/restricted/boost/container/src/pool_resource.cpp index 631c9d8f4c..512f414a76 100644 --- a/contrib/restricted/boost/container/src/pool_resource.cpp +++ b/contrib/restricted/boost/container/src/pool_resource.cpp @@ -20,7 +20,6 @@ #include <boost/container/detail/placement_new.hpp> #include <boost/intrusive/linear_slist_algorithms.hpp> #include <boost/intrusive/detail/math.hpp> -#include <boost/static_assert.hpp> #include <cstddef> @@ -96,10 +95,10 @@ class pool_data_t //pool_resource //Detect overflow in ceil_pow2 -BOOST_STATIC_ASSERT(pool_options_default_max_blocks_per_chunk <= (std::size_t(-1)/2u+1u)); +BOOST_CONTAINER_STATIC_ASSERT(pool_options_default_max_blocks_per_chunk <= (std::size_t(-1)/2u+1u)); //Sanity checks -BOOST_STATIC_ASSERT(bi::detail::static_is_pow2<pool_options_default_max_blocks_per_chunk>::value); -BOOST_STATIC_ASSERT(bi::detail::static_is_pow2<pool_options_minimum_largest_required_pool_block>::value); +BOOST_CONTAINER_STATIC_ASSERT(bi::detail::static_is_pow2<pool_options_default_max_blocks_per_chunk>::value); +BOOST_CONTAINER_STATIC_ASSERT(bi::detail::static_is_pow2<pool_options_minimum_largest_required_pool_block>::value); //unsynchronized_pool_resource diff --git a/contrib/restricted/boost/container/ya.make b/contrib/restricted/boost/container/ya.make index b2617bbe88..37dd4b3f04 100644 --- a/contrib/restricted/boost/container/ya.make +++ b/contrib/restricted/boost/container/ya.make @@ -9,9 +9,9 @@ LICENSE( LICENSE_TEXTS(.yandex_meta/licenses.list.txt) -VERSION(1.84.0) +VERSION(1.85.0) -ORIGINAL_SOURCE(https://github.com/boostorg/container/archive/boost-1.84.0.tar.gz) +ORIGINAL_SOURCE(https://github.com/boostorg/container/archive/boost-1.85.0.tar.gz) PEERDIR( contrib/restricted/boost/assert diff --git a/contrib/restricted/boost/container_hash/include/boost/container_hash/is_range.hpp b/contrib/restricted/boost/container_hash/include/boost/container_hash/is_range.hpp index f0b067ff8c..e6adbce565 100644 --- a/contrib/restricted/boost/container_hash/include/boost/container_hash/is_range.hpp +++ b/contrib/restricted/boost/container_hash/include/boost/container_hash/is_range.hpp @@ -14,8 +14,12 @@ namespace boost namespace hash_detail { +template<class T> struct iterator_traits: std::iterator_traits<T> {}; +template<> struct iterator_traits< void* > {}; +template<> struct iterator_traits< void const* > {}; + template<class T, class It> - std::integral_constant< bool, !std::is_same<typename std::remove_cv<T>::type, typename std::iterator_traits<It>::value_type>::value > + std::integral_constant< bool, !std::is_same<typename std::remove_cv<T>::type, typename iterator_traits<It>::value_type>::value > is_range_check( It first, It last ); template<class T> decltype( is_range_check<T>( std::declval<T const&>().begin(), std::declval<T const&>().end() ) ) is_range_( int ); diff --git a/contrib/restricted/boost/container_hash/include/boost/container_hash/is_tuple_like.hpp b/contrib/restricted/boost/container_hash/include/boost/container_hash/is_tuple_like.hpp index 48728cd90b..bd34ee8c74 100644 --- a/contrib/restricted/boost/container_hash/include/boost/container_hash/is_tuple_like.hpp +++ b/contrib/restricted/boost/container_hash/include/boost/container_hash/is_tuple_like.hpp @@ -26,7 +26,7 @@ template<class T> struct is_tuple_like_<T, std::integral_constant<bool, std::tup namespace container_hash { -template<class T> struct is_tuple_like: hash_detail::is_tuple_like_<T> +template<class T> struct is_tuple_like: hash_detail::is_tuple_like_< typename std::remove_cv<T>::type > { }; diff --git a/contrib/restricted/boost/container_hash/ya.make b/contrib/restricted/boost/container_hash/ya.make index 94eb38f62f..5c516aa57c 100644 --- a/contrib/restricted/boost/container_hash/ya.make +++ b/contrib/restricted/boost/container_hash/ya.make @@ -6,9 +6,9 @@ LICENSE(BSL-1.0) LICENSE_TEXTS(.yandex_meta/licenses.list.txt) -VERSION(1.84.0) +VERSION(1.85.0) -ORIGINAL_SOURCE(https://github.com/boostorg/container_hash/archive/boost-1.84.0.tar.gz) +ORIGINAL_SOURCE(https://github.com/boostorg/container_hash/archive/boost-1.85.0.tar.gz) PEERDIR( contrib/restricted/boost/config diff --git a/contrib/restricted/boost/context/fcontext_impl/ya.make b/contrib/restricted/boost/context/fcontext_impl/ya.make index 07d98b1b86..48eed3e403 100644 --- a/contrib/restricted/boost/context/fcontext_impl/ya.make +++ b/contrib/restricted/boost/context/fcontext_impl/ya.make @@ -4,9 +4,9 @@ LIBRARY() WITHOUT_LICENSE_TEXTS() -VERSION(1.84.0) +VERSION(1.85.0) -ORIGINAL_SOURCE(https://github.com/boostorg/context/archive/boost-1.84.0.tar.gz) +ORIGINAL_SOURCE(https://github.com/boostorg/context/archive/boost-1.85.0.tar.gz) LICENSE(BSL-1.0) diff --git a/contrib/restricted/boost/context/impl_common/ya.make b/contrib/restricted/boost/context/impl_common/ya.make index 462fd5312a..4724feba1c 100644 --- a/contrib/restricted/boost/context/impl_common/ya.make +++ b/contrib/restricted/boost/context/impl_common/ya.make @@ -4,9 +4,9 @@ LIBRARY() WITHOUT_LICENSE_TEXTS() -VERSION(1.84.0) +VERSION(1.85.0) -ORIGINAL_SOURCE(https://github.com/boostorg/context/archive/boost-1.84.0.tar.gz) +ORIGINAL_SOURCE(https://github.com/boostorg/context/archive/boost-1.85.0.tar.gz) LICENSE(BSL-1.0) diff --git a/contrib/restricted/boost/context/src/asm/jump_i386_sysv_elf_gas.S b/contrib/restricted/boost/context/src/asm/jump_i386_sysv_elf_gas.S new file mode 100644 index 0000000000..ed83717ce2 --- /dev/null +++ b/contrib/restricted/boost/context/src/asm/jump_i386_sysv_elf_gas.S @@ -0,0 +1,99 @@ +/* + Copyright Oliver Kowalke 2009. + Distributed under the Boost Software License, Version 1.0. + (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt) +*/ + +/**************************************************************************************** + * * + * ---------------------------------------------------------------------------------- * + * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | * + * ---------------------------------------------------------------------------------- * + * | 0x0 | 0x4 | 0x8 | 0xc | 0x10 | 0x14 | 0x18 | 0x1c | * + * ---------------------------------------------------------------------------------- * + * | fc_mxcsr|fc_x87_cw| guard | EDI | ESI | EBX | EBP | EIP | * + * ---------------------------------------------------------------------------------- * + * ---------------------------------------------------------------------------------- * + * | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | * + * ---------------------------------------------------------------------------------- * + * | 0x20 | 0x24 | 0x28 | | * + * ---------------------------------------------------------------------------------- * + * | hidden | to | data | | * + * ---------------------------------------------------------------------------------- * + * * + ****************************************************************************************/ + +#ifdef __x86_64__ +#include "jump_x86_64_sysv_elf_gas.S" +#else + +.file "jump_i386_sysv_elf_gas.S" +.text +.globl jump_fcontext +.align 2 +.type jump_fcontext,@function +jump_fcontext: + leal -0x1c(%esp), %esp /* prepare stack */ + +#if !defined(BOOST_USE_TSX) + stmxcsr (%esp) /* save MMX control- and status-word */ + fnstcw 0x4(%esp) /* save x87 control-word */ +#endif + +#if defined(BOOST_CONTEXT_TLS_STACK_PROTECTOR) + movl %gs:0x14, %ecx /* read stack guard from TLS record */ + movl %ecx, 0x8(%esp) /* save stack guard */ +#endif + + movl %edi, 0xc(%esp) /* save EDI */ + movl %esi, 0x10(%esp) /* save ESI */ + movl %ebx, 0x14(%esp) /* save EBX */ + movl %ebp, 0x18(%esp) /* save EBP */ + + /* store ESP (pointing to context-data) in ECX */ + movl %esp, %ecx + + /* first arg of jump_fcontext() == fcontext to jump to */ + movl 0x24(%esp), %eax + + /* second arg of jump_fcontext() == data to be transferred */ + movl 0x28(%esp), %edx + + /* restore ESP (pointing to context-data) from EAX */ + movl %eax, %esp + + /* address of returned transport_t */ + movl 0x20(%esp), %eax + /* return parent fcontext_t */ + movl %ecx, (%eax) + /* return data */ + movl %edx, 0x4(%eax) + + movl 0x1c(%esp), %ecx /* restore EIP */ + +#if !defined(BOOST_USE_TSX) + ldmxcsr (%esp) /* restore MMX control- and status-word */ + fldcw 0x4(%esp) /* restore x87 control-word */ +#endif + +#if defined(BOOST_CONTEXT_TLS_STACK_PROTECTOR) + movl 0x8(%esp), %edx /* load stack guard */ + movl %edx, %gs:0x14 /* restore stack guard to TLS record */ +#endif + + movl 0xc(%esp), %edi /* restore EDI */ + movl 0x10(%esp), %esi /* restore ESI */ + movl 0x14(%esp), %ebx /* restore EBX */ + movl 0x18(%esp), %ebp /* restore EBP */ + + leal 0x24(%esp), %esp /* prepare stack */ + + /* jump to context */ + jmp *%ecx +.size jump_fcontext,.-jump_fcontext + +/* Mark that we don't need executable stack. */ +.section .note.GNU-stack,"",%progbits + +#endif diff --git a/contrib/restricted/boost/context/src/asm/jump_x86_64_sysv_elf_gas.S b/contrib/restricted/boost/context/src/asm/jump_x86_64_sysv_elf_gas.S index 58f0e241d7..be264bdc2e 100644 --- a/contrib/restricted/boost/context/src/asm/jump_x86_64_sysv_elf_gas.S +++ b/contrib/restricted/boost/context/src/asm/jump_x86_64_sysv_elf_gas.S @@ -31,13 +31,16 @@ * * ****************************************************************************************/ -# if defined __CET__ -# include <cet.h> -# define SHSTK_ENABLED (__CET__ & 0x2) -# define BOOST_CONTEXT_SHADOW_STACK (SHSTK_ENABLED && SHADOW_STACK_SYSCALL) +# ifdef __i386__ +# include "jump_i386_sysv_elf_gas.S" # else -# define _CET_ENDBR -# endif +# if defined __CET__ +# include <cet.h> +# define SHSTK_ENABLED (__CET__ & 0x2) +# define BOOST_CONTEXT_SHADOW_STACK (SHSTK_ENABLED && SHADOW_STACK_SYSCALL) +# else +# define _CET_ENDBR +# endif .file "jump_x86_64_sysv_elf_gas.S" .text .globl jump_fcontext @@ -72,6 +75,14 @@ jump_fcontext: movq %rcx, (%rsp) #endif +#if BOOST_CONTEXT_SHADOW_STACK + /* grow the stack to reserve space for shadow stack pointer(SSP) */ + leaq -0x8(%rsp), %rsp + /* read the current SSP and store it */ + rdsspq %rcx + movq %rcx, (%rsp) +# endif + /* store RSP (pointing to context-data) in RAX */ movq %rsp, %rax @@ -140,3 +151,4 @@ jump_fcontext: /* Mark that we don't need executable stack. */ .section .note.GNU-stack,"",%progbits +# endif diff --git a/contrib/restricted/boost/context/src/asm/make_i386_sysv_elf_gas.S b/contrib/restricted/boost/context/src/asm/make_i386_sysv_elf_gas.S new file mode 100644 index 0000000000..c6e0b36558 --- /dev/null +++ b/contrib/restricted/boost/context/src/asm/make_i386_sysv_elf_gas.S @@ -0,0 +1,119 @@ +/* + Copyright Oliver Kowalke 2009. + Distributed under the Boost Software License, Version 1.0. + (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt) +*/ + +/**************************************************************************************** + * * + * ---------------------------------------------------------------------------------- * + * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | * + * ---------------------------------------------------------------------------------- * + * | 0x0 | 0x4 | 0x8 | 0xc | 0x10 | 0x14 | 0x18 | 0x1c | * + * ---------------------------------------------------------------------------------- * + * | fc_mxcsr|fc_x87_cw| guard | EDI | ESI | EBX | EBP | EIP | * + * ---------------------------------------------------------------------------------- * + * ---------------------------------------------------------------------------------- * + * | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | * + * ---------------------------------------------------------------------------------- * + * | 0x20 | 0x24 | 0x28 | | * + * ---------------------------------------------------------------------------------- * + * | hidden | to | data | | * + * ---------------------------------------------------------------------------------- * + * * + ****************************************************************************************/ + +#ifdef __x86_64__ +#include "make_x86_64_sysv_elf_gas.S" +#else + +.file "make_i386_sysv_elf_gas.S" +.text +.globl make_fcontext +.align 2 +.type make_fcontext,@function +make_fcontext: + /* first arg of make_fcontext() == top of context-stack */ + movl 0x4(%esp), %eax + + /* reserve space for first argument of context-function + eax might already point to a 16byte border */ + leal -0x8(%eax), %eax + + /* shift address in EAX to lower 16 byte boundary */ + andl $-16, %eax + + /* reserve space for context-data on context-stack, and align the stack */ + leal -0x34(%eax), %eax + + /* third arg of make_fcontext() == address of context-function */ + /* stored in EBX */ + movl 0xc(%esp), %ecx + movl %ecx, 0x14(%eax) + + /* save MMX control- and status-word */ + stmxcsr (%eax) + /* save x87 control-word */ + fnstcw 0x4(%eax) + +#if defined(BOOST_CONTEXT_TLS_STACK_PROTECTOR) + /* save stack guard */ + movl %gs:0x14, %ecx /* read stack guard from TLS record */ + movl %ecx, 0x8(%eax) /* save stack guard */ +#endif + + /* return transport_t */ + /* FCTX == EDI, DATA == ESI */ + leal 0xc(%eax), %ecx + movl %ecx, 0x20(%eax) + + /* compute abs address of label trampoline */ + call 1f + /* address of trampoline 1 */ +1: popl %ecx + /* compute abs address of label trampoline */ + addl $trampoline-1b, %ecx + /* save address of trampoline as return address */ + /* will be entered after calling jump_fcontext() first time */ + movl %ecx, 0x1c(%eax) + + /* compute abs address of label finish */ + call 2f + /* address of label 2 */ +2: popl %ecx + /* compute abs address of label finish */ + addl $finish-2b, %ecx + /* save address of finish as return-address for context-function */ + /* will be entered after context-function returns */ + movl %ecx, 0x18(%eax) + + ret /* return pointer to context-data */ + +trampoline: + /* move transport_t for entering context-function */ + movl %edi, (%esp) + movl %esi, 0x4(%esp) + pushl %ebp + /* jump to context-function */ + jmp *%ebx + +finish: + call 3f + /* address of label 3 */ +3: popl %ebx + /* compute address of GOT and store it in EBX */ + addl $_GLOBAL_OFFSET_TABLE_+[.-3b], %ebx + + /* exit code is zero */ + xorl %eax, %eax + movl %eax, (%esp) + /* exit application */ + call _exit@PLT + hlt +.size make_fcontext,.-make_fcontext + +/* Mark that we don't need executable stack. */ +.section .note.GNU-stack,"",%progbits + +#endif diff --git a/contrib/restricted/boost/context/src/asm/make_x86_64_sysv_elf_gas.S b/contrib/restricted/boost/context/src/asm/make_x86_64_sysv_elf_gas.S index 4294398a2e..b0d0c0341e 100644 --- a/contrib/restricted/boost/context/src/asm/make_x86_64_sysv_elf_gas.S +++ b/contrib/restricted/boost/context/src/asm/make_x86_64_sysv_elf_gas.S @@ -31,13 +31,16 @@ * * ****************************************************************************************/ -# if defined __CET__ -# include <cet.h> -# define SHSTK_ENABLED (__CET__ & 0x2) -# define BOOST_CONTEXT_SHADOW_STACK (SHSTK_ENABLED && SHADOW_STACK_SYSCALL) +# ifdef __i386__ +# include "make_i386_sysv_elf_gas.S" # else -# define _CET_ENDBR -# endif +# if defined __CET__ +# include <cet.h> +# define SHSTK_ENABLED (__CET__ & 0x2) +# define BOOST_CONTEXT_SHADOW_STACK (SHSTK_ENABLED && SHADOW_STACK_SYSCALL) +# else +# define _CET_ENDBR +# endif .file "make_x86_64_sysv_elf_gas.S" .text .globl make_fcontext @@ -45,6 +48,7 @@ .align 16 make_fcontext: _CET_ENDBR + #if BOOST_CONTEXT_SHADOW_STACK /* the new shadow stack pointer (SSP) */ movq -0x8(%rdi), %r9 @@ -116,12 +120,50 @@ make_fcontext: movq %r9, (%rax) #endif +#if BOOST_CONTEXT_SHADOW_STACK + /* Populate the shadow stack */ + + /* get original SSP */ + rdsspq %r8 + /* restore new shadow stack */ + rstorssp -0x8(%r9) + /* save the restore token on the original shadow stack */ + saveprevssp + /* push the address of "jmp trampoline" to the new shadow stack */ + /* as well as the stack */ + call 1f + jmp trampoline +1: + /* save address of "jmp trampoline" as return-address */ + /* for context-function */ + pop 0x38(%rax) + /* Get the new SSP. */ + rdsspq %r9 + /* restore original shadow stack */ + rstorssp -0x8(%r8) + /* save the restore token on the new shadow stack. */ + saveprevssp + + /* now the new shadow stack looks like: + base-> +------------------------------+ + | address of "jmp trampoline" | + SSP-> +------------------------------+ + | restore token | + +------------------------------+ + */ + + /* reserve space for the new SSP */ + leaq -0x8(%rax), %rax + /* save the new SSP to this fcontext */ + movq %r9, (%rax) +#endif + ret /* return pointer to context-data */ trampoline: - _CET_ENDBR /* store return address on stack */ /* fix stack alignment */ + _CET_ENDBR #if BOOST_CONTEXT_SHADOW_STACK /* save address of "jmp *%rbp" as return-address */ /* on stack and shadow stack */ @@ -145,3 +187,4 @@ finish: /* Mark that we don't need executable stack. */ .section .note.GNU-stack,"",%progbits +# endif diff --git a/contrib/restricted/boost/conversion/ya.make b/contrib/restricted/boost/conversion/ya.make index 5346d3939d..9b695a91ba 100644 --- a/contrib/restricted/boost/conversion/ya.make +++ b/contrib/restricted/boost/conversion/ya.make @@ -6,9 +6,9 @@ LICENSE(BSL-1.0) LICENSE_TEXTS(.yandex_meta/licenses.list.txt) -VERSION(1.84.0) +VERSION(1.85.0) -ORIGINAL_SOURCE(https://github.com/boostorg/conversion/archive/boost-1.84.0.tar.gz) +ORIGINAL_SOURCE(https://github.com/boostorg/conversion/archive/boost-1.85.0.tar.gz) PEERDIR( contrib/restricted/boost/assert diff --git a/contrib/restricted/boost/describe/ya.make b/contrib/restricted/boost/describe/ya.make index b7a25b04a7..3c01126fd0 100644 --- a/contrib/restricted/boost/describe/ya.make +++ b/contrib/restricted/boost/describe/ya.make @@ -6,9 +6,9 @@ LICENSE(BSL-1.0) LICENSE_TEXTS(.yandex_meta/licenses.list.txt) -VERSION(1.84.0) +VERSION(1.85.0) -ORIGINAL_SOURCE(https://github.com/boostorg/describe/archive/boost-1.84.0.tar.gz) +ORIGINAL_SOURCE(https://github.com/boostorg/describe/archive/boost-1.85.0.tar.gz) PEERDIR( contrib/restricted/boost/mp11 diff --git a/contrib/restricted/boost/detail/ya.make b/contrib/restricted/boost/detail/ya.make index fd9fd5a9bc..97d62e70f6 100644 --- a/contrib/restricted/boost/detail/ya.make +++ b/contrib/restricted/boost/detail/ya.make @@ -9,9 +9,9 @@ LICENSE( LICENSE_TEXTS(.yandex_meta/licenses.list.txt) -VERSION(1.84.0) +VERSION(1.85.0) -ORIGINAL_SOURCE(https://github.com/boostorg/detail/archive/boost-1.84.0.tar.gz) +ORIGINAL_SOURCE(https://github.com/boostorg/detail/archive/boost-1.85.0.tar.gz) PEERDIR( contrib/restricted/boost/config diff --git a/contrib/restricted/boost/exception/include/boost/exception/current_exception_cast.hpp b/contrib/restricted/boost/exception/include/boost/exception/current_exception_cast.hpp index 950eeff171..ddcfd27ef0 100644 --- a/contrib/restricted/boost/exception/include/boost/exception/current_exception_cast.hpp +++ b/contrib/restricted/boost/exception/include/boost/exception/current_exception_cast.hpp @@ -7,7 +7,7 @@ #define BOOST_EXCEPTION_7E83C166200811DE885E826156D89593 #ifndef BOOST_EXCEPTION_ENABLE_WARNINGS -#if __GNUC__*100+__GNUC_MINOR__>301 +#if defined(__GNUC__) && __GNUC__*100+__GNUC_MINOR__>301 #pragma GCC system_header #endif #ifdef __clang__ diff --git a/contrib/restricted/boost/exception/include/boost/exception/detail/clone_current_exception.hpp b/contrib/restricted/boost/exception/include/boost/exception/detail/clone_current_exception.hpp index 5c953c1a19..d560f1cb80 100644 --- a/contrib/restricted/boost/exception/include/boost/exception/detail/clone_current_exception.hpp +++ b/contrib/restricted/boost/exception/include/boost/exception/detail/clone_current_exception.hpp @@ -7,7 +7,7 @@ #define BOOST_EXCEPTION_81522C0EB56511DFAB613DB0DFD72085 #ifndef BOOST_EXCEPTION_ENABLE_WARNINGS -#if __GNUC__*100+__GNUC_MINOR__>301 +#if defined(__GNUC__) && __GNUC__*100+__GNUC_MINOR__>301 #pragma GCC system_header #endif #ifdef __clang__ diff --git a/contrib/restricted/boost/exception/include/boost/exception/detail/error_info_impl.hpp b/contrib/restricted/boost/exception/include/boost/exception/detail/error_info_impl.hpp index 30ccffd148..d97c6f3518 100644 --- a/contrib/restricted/boost/exception/include/boost/exception/detail/error_info_impl.hpp +++ b/contrib/restricted/boost/exception/include/boost/exception/detail/error_info_impl.hpp @@ -14,7 +14,7 @@ #include <string> #ifndef BOOST_EXCEPTION_ENABLE_WARNINGS -#if __GNUC__*100+__GNUC_MINOR__>301 +#if defined(__GNUC__) && __GNUC__*100+__GNUC_MINOR__>301 #pragma GCC system_header #endif #ifdef __clang__ diff --git a/contrib/restricted/boost/exception/include/boost/exception/detail/exception_ptr.hpp b/contrib/restricted/boost/exception/include/boost/exception/detail/exception_ptr.hpp index cdfc3bed34..ebacd363c1 100644 --- a/contrib/restricted/boost/exception/include/boost/exception/detail/exception_ptr.hpp +++ b/contrib/restricted/boost/exception/include/boost/exception/detail/exception_ptr.hpp @@ -7,7 +7,7 @@ #ifndef BOOST_EXCEPTION_618474C2DE1511DEB74A388C56D89593 #define BOOST_EXCEPTION_618474C2DE1511DEB74A388C56D89593 -#include <boost/config.hpp> +#include <boost/exception/detail/requires_cxx11.hpp> #include <boost/exception/exception.hpp> #include <boost/exception/info.hpp> #include <boost/exception/diagnostic_information.hpp> @@ -26,7 +26,7 @@ #include <stdlib.h> #ifndef BOOST_EXCEPTION_ENABLE_WARNINGS -#if __GNUC__*100+__GNUC_MINOR__>301 +#if defined(__GNUC__) && __GNUC__*100+__GNUC_MINOR__>301 #pragma GCC system_header #endif #ifdef __clang__ diff --git a/contrib/restricted/boost/exception/include/boost/exception/detail/is_output_streamable.hpp b/contrib/restricted/boost/exception/include/boost/exception/detail/is_output_streamable.hpp index a61f986bc9..980cddc09f 100644 --- a/contrib/restricted/boost/exception/include/boost/exception/detail/is_output_streamable.hpp +++ b/contrib/restricted/boost/exception/include/boost/exception/detail/is_output_streamable.hpp @@ -9,7 +9,7 @@ #include <ostream> #ifndef BOOST_EXCEPTION_ENABLE_WARNINGS -#if __GNUC__*100+__GNUC_MINOR__>301 +#if defined(__GNUC__) && __GNUC__*100+__GNUC_MINOR__>301 #pragma GCC system_header #endif #ifdef __clang__ diff --git a/contrib/restricted/boost/exception/include/boost/exception/detail/object_hex_dump.hpp b/contrib/restricted/boost/exception/include/boost/exception/detail/object_hex_dump.hpp index c195de50d9..42d517b811 100644 --- a/contrib/restricted/boost/exception/include/boost/exception/detail/object_hex_dump.hpp +++ b/contrib/restricted/boost/exception/include/boost/exception/detail/object_hex_dump.hpp @@ -14,7 +14,7 @@ #include <cstdlib> #ifndef BOOST_EXCEPTION_ENABLE_WARNINGS -#if __GNUC__*100+__GNUC_MINOR__>301 +#if defined(__GNUC__) && __GNUC__*100+__GNUC_MINOR__>301 #pragma GCC system_header #endif #ifdef __clang__ diff --git a/contrib/restricted/boost/bind/include/boost/bind/detail/requires_cxx11.hpp b/contrib/restricted/boost/exception/include/boost/exception/detail/requires_cxx11.hpp index 600f58ff19..85ab2a3765 100644 --- a/contrib/restricted/boost/bind/include/boost/bind/detail/requires_cxx11.hpp +++ b/contrib/restricted/boost/exception/include/boost/exception/detail/requires_cxx11.hpp @@ -1,7 +1,8 @@ -#ifndef BOOST_BIND_DETAIL_REQUIRES_CXX11_HPP_INCLUDED -#define BOOST_BIND_DETAIL_REQUIRES_CXX11_HPP_INCLUDED +#ifndef BOOST_EXCEPTION_DETAIL_REQUIRES_CXX11_HPP_INCLUDED +#define BOOST_EXCEPTION_DETAIL_REQUIRES_CXX11_HPP_INCLUDED // Copyright 2023 Peter Dimov +// Copyright 2024 Emil Dotchevski // Distributed under the Boost Software License, Version 1.0. // https://www.boost.org/LICENSE_1_0.txt @@ -13,10 +14,11 @@ defined(BOOST_NO_CXX11_DECLTYPE) || \ defined(BOOST_NO_CXX11_CONSTEXPR) || \ defined(BOOST_NO_CXX11_NOEXCEPT) || \ - defined(BOOST_NO_CXX11_HDR_FUNCTIONAL) + defined(BOOST_NO_CXX11_NULLPTR) || \ + defined(BOOST_NO_CXX11_SMART_PTR) -BOOST_PRAGMA_MESSAGE("C++03 support was deprecated in Boost.Bind 1.82 and will be removed in Boost.Bind 1.85.") +BOOST_PRAGMA_MESSAGE("C++03 support was deprecated in Boost.Exception 1.85 and will be removed in Boost.Exception 1.87.") #endif -#endif // #ifndef BOOST_BIND_DETAIL_REQUIRES_CXX11_HPP_INCLUDED +#endif
\ No newline at end of file diff --git a/contrib/restricted/boost/exception/include/boost/exception/detail/type_info.hpp b/contrib/restricted/boost/exception/include/boost/exception/detail/type_info.hpp index 0d46fd6e87..72716b52b1 100644 --- a/contrib/restricted/boost/exception/include/boost/exception/detail/type_info.hpp +++ b/contrib/restricted/boost/exception/include/boost/exception/detail/type_info.hpp @@ -14,7 +14,7 @@ #include <string.h> #ifndef BOOST_EXCEPTION_ENABLE_WARNINGS -#if __GNUC__*100+__GNUC_MINOR__>301 +#if defined(__GNUC__) && __GNUC__*100+__GNUC_MINOR__>301 #pragma GCC system_header #endif #ifdef __clang__ diff --git a/contrib/restricted/boost/exception/include/boost/exception/diagnostic_information.hpp b/contrib/restricted/boost/exception/include/boost/exception/diagnostic_information.hpp index 145fbe5b01..b26c502db6 100644 --- a/contrib/restricted/boost/exception/include/boost/exception/diagnostic_information.hpp +++ b/contrib/restricted/boost/exception/include/boost/exception/diagnostic_information.hpp @@ -21,7 +21,7 @@ #endif #ifndef BOOST_EXCEPTION_ENABLE_WARNINGS -#if __GNUC__*100+__GNUC_MINOR__>301 +#if defined(__GNUC__) && __GNUC__*100+__GNUC_MINOR__>301 #pragma GCC system_header #endif #ifdef __clang__ diff --git a/contrib/restricted/boost/exception/include/boost/exception/get_error_info.hpp b/contrib/restricted/boost/exception/include/boost/exception/get_error_info.hpp index 09a224aa53..efe093eeda 100644 --- a/contrib/restricted/boost/exception/include/boost/exception/get_error_info.hpp +++ b/contrib/restricted/boost/exception/include/boost/exception/get_error_info.hpp @@ -14,7 +14,7 @@ #include <boost/assert.hpp> #ifndef BOOST_EXCEPTION_ENABLE_WARNINGS -#if __GNUC__*100+__GNUC_MINOR__>301 +#if defined(__GNUC__) && __GNUC__*100+__GNUC_MINOR__>301 #pragma GCC system_header #endif #ifdef __clang__ diff --git a/contrib/restricted/boost/exception/include/boost/exception/info.hpp b/contrib/restricted/boost/exception/include/boost/exception/info.hpp index 3fd6681f5c..f6a350f63a 100644 --- a/contrib/restricted/boost/exception/include/boost/exception/info.hpp +++ b/contrib/restricted/boost/exception/include/boost/exception/info.hpp @@ -14,7 +14,7 @@ #include <map> #ifndef BOOST_EXCEPTION_ENABLE_WARNINGS -#if __GNUC__*100+__GNUC_MINOR__>301 +#if defined(__GNUC__) && __GNUC__*100+__GNUC_MINOR__>301 #pragma GCC system_header #endif #ifdef __clang__ diff --git a/contrib/restricted/boost/exception/include/boost/exception/to_string.hpp b/contrib/restricted/boost/exception/include/boost/exception/to_string.hpp index 49f1b18d06..513c87471b 100644 --- a/contrib/restricted/boost/exception/include/boost/exception/to_string.hpp +++ b/contrib/restricted/boost/exception/include/boost/exception/to_string.hpp @@ -11,7 +11,7 @@ #include <sstream> #ifndef BOOST_EXCEPTION_ENABLE_WARNINGS -#if __GNUC__*100+__GNUC_MINOR__>301 +#if defined(__GNUC__) && __GNUC__*100+__GNUC_MINOR__>301 #pragma GCC system_header #endif #ifdef __clang__ diff --git a/contrib/restricted/boost/exception/include/boost/exception/to_string_stub.hpp b/contrib/restricted/boost/exception/include/boost/exception/to_string_stub.hpp index 5fbfba7ec2..151b38e5de 100644 --- a/contrib/restricted/boost/exception/include/boost/exception/to_string_stub.hpp +++ b/contrib/restricted/boost/exception/include/boost/exception/to_string_stub.hpp @@ -11,7 +11,7 @@ #include <boost/assert.hpp> #ifndef BOOST_EXCEPTION_ENABLE_WARNINGS -#if __GNUC__*100+__GNUC_MINOR__>301 +#if defined(__GNUC__) && __GNUC__*100+__GNUC_MINOR__>301 #pragma GCC system_header #endif #ifdef __clang__ diff --git a/contrib/restricted/boost/exception/ya.make b/contrib/restricted/boost/exception/ya.make index 9865ec9897..86b169edef 100644 --- a/contrib/restricted/boost/exception/ya.make +++ b/contrib/restricted/boost/exception/ya.make @@ -6,9 +6,9 @@ LICENSE(BSL-1.0) LICENSE_TEXTS(.yandex_meta/licenses.list.txt) -VERSION(1.84.0) +VERSION(1.85.0) -ORIGINAL_SOURCE(https://github.com/boostorg/exception/archive/boost-1.84.0.tar.gz) +ORIGINAL_SOURCE(https://github.com/boostorg/exception/archive/boost-1.85.0.tar.gz) PEERDIR( contrib/restricted/boost/assert diff --git a/contrib/restricted/boost/integer/ya.make b/contrib/restricted/boost/integer/ya.make index 1365104ddb..02417ff194 100644 --- a/contrib/restricted/boost/integer/ya.make +++ b/contrib/restricted/boost/integer/ya.make @@ -6,9 +6,9 @@ LICENSE(BSL-1.0) LICENSE_TEXTS(.yandex_meta/licenses.list.txt) -VERSION(1.84.0) +VERSION(1.85.0) -ORIGINAL_SOURCE(https://github.com/boostorg/integer/archive/boost-1.84.0.tar.gz) +ORIGINAL_SOURCE(https://github.com/boostorg/integer/archive/boost-1.85.0.tar.gz) PEERDIR( contrib/restricted/boost/assert diff --git a/contrib/restricted/boost/interprocess/include/boost/interprocess/detail/workaround.hpp b/contrib/restricted/boost/interprocess/include/boost/interprocess/detail/workaround.hpp index 01b6c6eb05..328616e1e8 100644 --- a/contrib/restricted/boost/interprocess/include/boost/interprocess/detail/workaround.hpp +++ b/contrib/restricted/boost/interprocess/include/boost/interprocess/detail/workaround.hpp @@ -37,7 +37,7 @@ ////////////////////////////////////////////////////// //Check for XSI shared memory objects. They are available in nearly all UNIX platforms ////////////////////////////////////////////////////// - #if !defined(__QNXNTO__) && !defined(__ANDROID__) && !defined(__HAIKU__) && !(__VXWORKS__) + #if !defined(__QNXNTO__) && !defined(__ANDROID__) && !defined(__HAIKU__) && !(__VXWORKS__) && !(__EMSCRIPTEN__) #define BOOST_INTERPROCESS_XSI_SHARED_MEMORY_OBJECTS #endif @@ -226,8 +226,11 @@ #elif defined(BOOST_MSVC) && (_MSC_VER < 1900 || defined(_DEBUG)) //"__forceinline" and MSVC seems to have some bugs in old versions and in debug mode #define BOOST_INTERPROCESS_FORCEINLINE inline -#elif defined(BOOST_GCC) && (__GNUC__ <= 5) +#elif defined(BOOST_CLANG) || (defined(BOOST_GCC) && ((__GNUC__ <= 5) || defined(__MINGW32__))) //Older GCCs have problems with forceinline + //Clang can have code bloat issues with forceinline, see + //https://lists.boost.org/boost-users/2023/04/91445.php and + //https://github.com/llvm/llvm-project/issues/62202 #define BOOST_INTERPROCESS_FORCEINLINE inline #else #define BOOST_INTERPROCESS_FORCEINLINE BOOST_FORCEINLINE diff --git a/contrib/restricted/boost/interprocess/ya.make b/contrib/restricted/boost/interprocess/ya.make index 78346f1c86..60b2727bfa 100644 --- a/contrib/restricted/boost/interprocess/ya.make +++ b/contrib/restricted/boost/interprocess/ya.make @@ -9,9 +9,9 @@ LICENSE( LICENSE_TEXTS(.yandex_meta/licenses.list.txt) -VERSION(1.84.0) +VERSION(1.85.0) -ORIGINAL_SOURCE(https://github.com/boostorg/interprocess/archive/boost-1.84.0.tar.gz) +ORIGINAL_SOURCE(https://github.com/boostorg/interprocess/archive/boost-1.85.0.tar.gz) PEERDIR( contrib/restricted/boost/assert diff --git a/contrib/restricted/boost/iterator/ya.make b/contrib/restricted/boost/iterator/ya.make index ae30b7ee04..67c090140c 100644 --- a/contrib/restricted/boost/iterator/ya.make +++ b/contrib/restricted/boost/iterator/ya.make @@ -6,9 +6,9 @@ LICENSE(BSL-1.0) LICENSE_TEXTS(.yandex_meta/licenses.list.txt) -VERSION(1.84.0) +VERSION(1.85.0) -ORIGINAL_SOURCE(https://github.com/boostorg/iterator/archive/boost-1.84.0.tar.gz) +ORIGINAL_SOURCE(https://github.com/boostorg/iterator/archive/boost-1.85.0.tar.gz) PEERDIR( contrib/restricted/boost/assert diff --git a/contrib/restricted/boost/math/README.md b/contrib/restricted/boost/math/README.md index 07c6c4604b..a20120e8ab 100644 --- a/contrib/restricted/boost/math/README.md +++ b/contrib/restricted/boost/math/README.md @@ -1,10 +1,24 @@ -Boost Math Library -[![Build Status](https://drone.cpp.al/api/badges/boostorg/math/status.svg)](https://drone.cpp.al/boostorg/math)[![Build Status](https://github.com/boostorg/math/workflows/CI/badge.svg?branch=develop)](https://github.com/boostorg/math/actions) -================== +Boost Math Library +============================ ->ANNOUNCEMENT: This library now requires a compliant C++14 compiler. +>ANNOUNCEMENT: This library requires a compliant C++14 compiler. -This library is divided into several interconnected parts: +| | Master | Develop | +|------------------|----------|-------------| +| Drone | [![Build Status](https://drone.cpp.al/api/badges/boostorg/math/status.svg?ref=refs/heads/master)](https://drone.cpp.al/boostorg/math) | [![Build Status](https://drone.cpp.al/api/badges/boostorg/math/status.svg)](https://drone.cpp.al/boostorg/math) | +| Github Actions | [![Build Status](https://github.com/boostorg/math/workflows/CI/badge.svg?branch=master)](https://github.com/boostorg/math/actions) | [![Build Status](https://github.com/boostorg/math/workflows/CI/badge.svg?branch=develop)](https://github.com/boostorg/math/actions) | +| Codecov | [![codecov](https://codecov.io/gh/boostorg/math/branch/master/graph/badge.svg)](https://codecov.io/gh/boostorg/math/branch/master) | [![codecov](https://codecov.io/gh/boostorg/math/branch/develop/graph/badge.svg)](https://codecov.io/gh/boostorg/math/branch/develop) | + + +The Math library provides numerous advanced mathematical functions +implemented in modern C++. The library strives to deliver the utmost +in numerical and syntactical correctness while still +maintaining high-performance. + +All code is header-only, facilitating easy client setup +and use throughout the entire diverse collection of functions. + +The library is divided into several interconnected parts: ### Floating Point Utilities @@ -30,19 +44,33 @@ A comprehensive tutorial is provided, along with a series of worked examples ill ### Special Functions -Provides a small number of high quality special functions; initially these were concentrated on functions used in statistical applications along with those in the Technical Report on C++ Library Extensions. +Provides a wide range of high quality special functions; initially these were concentrated +on functions used in statistical applications along with those in the Technical Report +on C++ Library Extensions. -The function families currently implemented are the gamma, beta & error functions along with the incomplete gamma and beta functions (four variants of each) and all the possible inverses of these, plus the digamma, various factorial functions, Bessel functions, elliptic integrals, hypergeometrics, sinus cardinals (along with their hyperbolic variants), inverse hyperbolic functions, Legrendre/Laguerre/Hermite/Chebyshev polynomials and various special power and logarithmic functions. +The function families currently implemented are the gamma, beta and error functions +along with the incomplete gamma and beta functions (four variants of each) +and all the possible inverses of these, plus the digamma, various factorial +functions, Bessel functions, elliptic integrals, hypergeometrics, sinus cardinals +(along with their hyperbolic variants), inverse hyperbolic functions, +Legrendre/Laguerre/Hermite/Chebyshev polynomials +and various special power and logarithmic functions. -All the implementations are fully generic and support the use of arbitrary "real-number" types, including Boost.Multiprecision, although they are optimised for use with types with known significand (or mantissa) sizes: typically float, double or long double. +All the implementations are fully generic and support the use of arbitrary "real-number" types, +including those in [Boost.Multiprecision](https://github.com/boostorg/multiprecision). +Most functions are, however, optimized for use with types with known significand (or mantissa) sizes: +typically built-in `float`, `double` or `long double`. -These functions also provide the basis of support for the TR1 special functions. +These functions also provide the basis of support for the TR1 special functions, +many of which became standardized in [C++17](https://en.cppreference.com/w/cpp/numeric/special_functions). -### Root Finding and Function Minimisation +### Root Finding A comprehensive set of root-finding algorithms over the real line, both with derivatives and derivative free. -Also function minimisation via Brent's Method. +### Optimization + +Minimization of cost functions via Brent's method and differential evolution. ### Polynomials and Rational Functions @@ -50,11 +78,17 @@ Tools for manipulating polynomials and for efficient evaluation of rationals or ### Interpolation -Function interpolation via barycentric rational interpolation, compactly supported quadratic, cubic, and quintic B-splines, the Chebyshev transform, trigonometric polynomials, Makima, pchip, cubic Hermite splines, and bilinear interpolation. +Function interpolation via barycentric rational interpolation, +compactly supported quadratic, cubic, and quintic B-splines, +the Chebyshev transform, trigonometric polynomials, Makima, +pchip, cubic Hermite splines, and bilinear interpolation. ### Numerical Integration and Differentiation -A reasonably comprehensive set of routines for integration (trapezoidal, Gauss-Legendre, Gauss-Kronrod, Gauss-Chebyshev, double-exponential, and Monte-Carlo) and differentiation (Chebyshev transform, finite difference, the complex step derivative, and forward-mode automatic differentiation). +A reasonably comprehensive set of routines for integration +(trapezoidal, Gauss-Legendre, Gauss-Kronrod, Gauss-Chebyshev, double-exponential, and Monte-Carlo) +and differentiation (Chebyshev transform, finite difference, the complex step derivative, +and forward-mode automatic differentiation). The integration routines are usable for functions returning complex results - and hence can be used for computation of contour integrals. @@ -66,25 +100,20 @@ The full documentation is available on [boost.org](http://www.boost.org/doc/libs ### Standalone Mode -Defining BOOST_MATH_STANDALONE allows Boost.Math to be used without any Boost dependencies. Some functionality is reduced in this mode. A static_assert message will alert you if a particular feature has been disabled by standalone mode. +Defining BOOST_MATH_STANDALONE allows Boost.Math to be used without any Boost dependencies. +Some functionality is reduced in this mode. A static_assert message will alert you +if a particular feature has been disabled by standalone mode. Standalone mode is not designed to +be used with the rest of boost, and may result in compiler errors. ## Supported Compilers ## -The following compilers are tested with the CI system, and are known to work. Starting with Boost 1.76 (April 2021 Release) a compiler that is fully compliant with C++11 is required to use Boost.Math. +The following compilers are tested with the CI system, and are known to work. +Currently a compiler that is fully compliant with C++14 is required to use Boost.Math. * g++ 5 or later * clang++ 5 or later * Visual Studio 2015 (14.0) or later -## Build Status ## - -| | Master | Develop | -|------------------|----------|-------------| -| Github Actions | [![Build Status](https://github.com/boostorg/math/workflows/CI/badge.svg?branch=master)](https://github.com/boostorg/math/actions) | [![Build Status](https://github.com/boostorg/math/workflows/CI/badge.svg?branch=develop)](https://github.com/boostorg/math/actions) | -|Drone | [![Build Status](https://drone.cpp.al/api/badges/boostorg/math/status.svg?ref=refs/heads/master)](https://drone.cpp.al/boostorg/math) | [![Build Status](https://drone.cpp.al/api/badges/boostorg/math/status.svg)](https://drone.cpp.al/boostorg/math) | - - - ## Support, bugs and feature requests ## Bugs and feature requests can be reported through the [GitHub issue tracker](https://github.com/boostorg/math/issues) diff --git a/contrib/restricted/boost/math/include/boost/math/policies/policy.hpp b/contrib/restricted/boost/math/include/boost/math/policies/policy.hpp index 6daebaa64f..eb09682e32 100644 --- a/contrib/restricted/boost/math/include/boost/math/policies/policy.hpp +++ b/contrib/restricted/boost/math/include/boost/math/policies/policy.hpp @@ -35,7 +35,7 @@ namespace policies{ // // Special cases for exceptions disabled first: // -#ifdef BOOST_NO_EXCEPTIONS +#ifdef BOOST_MATH_NO_EXCEPTIONS # ifndef BOOST_MATH_DOMAIN_ERROR_POLICY # define BOOST_MATH_DOMAIN_ERROR_POLICY errno_on_error # endif diff --git a/contrib/restricted/boost/math/include/boost/math/special_functions/detail/fp_traits.hpp b/contrib/restricted/boost/math/include/boost/math/special_functions/detail/fp_traits.hpp index 975052b52e..2947a32a21 100644 --- a/contrib/restricted/boost/math/include/boost/math/special_functions/detail/fp_traits.hpp +++ b/contrib/restricted/boost/math/include/boost/math/special_functions/detail/fp_traits.hpp @@ -34,16 +34,6 @@ With these techniques, the code could be simplified. #define BOOST_MATH_ENDIAN_BIG_BYTE BOOST_ENDIAN_BIG_BYTE #define BOOST_MATH_ENDIAN_LITTLE_BYTE BOOST_ENDIAN_LITTLE_BYTE -#elif (__cplusplus >= 202002L || _MSVC_LANG >= 202002L) - -#if __has_include(<bit>) -#include <bit> -#define BOOST_MATH_ENDIAN_BIG_BYTE (std::endian::native == std::endian::big) -#define BOOST_MATH_ENDIAN_LITTLE_BYTE (std::endian::native == std::endian::little) -#else -#error Missing <bit> header. Please disable standalone mode, and file an issue at https://github.com/boostorg/math -#endif - #elif defined(_WIN32) #define BOOST_MATH_ENDIAN_BIG_BYTE 0 diff --git a/contrib/restricted/boost/math/include/boost/math/special_functions/math_fwd.hpp b/contrib/restricted/boost/math/include/boost/math/special_functions/math_fwd.hpp index 7b99651402..3e5d6a7625 100644 --- a/contrib/restricted/boost/math/include/boost/math/special_functions/math_fwd.hpp +++ b/contrib/restricted/boost/math/include/boost/math/special_functions/math_fwd.hpp @@ -1087,10 +1087,10 @@ namespace boost // pow: template <int N, typename T, class Policy> - BOOST_CXX14_CONSTEXPR tools::promote_args_t<T> pow(T base, const Policy& policy); + BOOST_MATH_CXX14_CONSTEXPR tools::promote_args_t<T> pow(T base, const Policy& policy); template <int N, typename T> - BOOST_CXX14_CONSTEXPR tools::promote_args_t<T> pow(T base); + BOOST_MATH_CXX14_CONSTEXPR tools::promote_args_t<T> pow(T base); // next: template <class T, class U, class Policy> diff --git a/contrib/restricted/boost/math/include/boost/math/tools/config.hpp b/contrib/restricted/boost/math/include/boost/math/tools/config.hpp index 584cbd5485..110edc06b7 100644 --- a/contrib/restricted/boost/math/include/boost/math/tools/config.hpp +++ b/contrib/restricted/boost/math/include/boost/math/tools/config.hpp @@ -16,20 +16,73 @@ // Minimum language standard transition #ifdef _MSVC_LANG # if _MSVC_LANG < 201402L -# pragma warning("The minimum language standard to use Boost.Math will be C++14 starting in July 2023 (Boost 1.82 release)"); +# pragma message("Boost.Math requires C++14"); +# endif +# if _MSC_VER == 1900 +# pragma message("MSVC 14.0 has broken C++14 constexpr support. Support for this compiler will be removed in Boost 1.86") # endif #else # if __cplusplus < 201402L -# warning "The minimum language standard to use Boost.Math will be C++14 starting in July 2023 (Boost 1.82 release)" +# warning "Boost.Math requires C++14" # endif #endif #ifndef BOOST_MATH_STANDALONE #include <boost/config.hpp> + +// The following are all defined as standalone macros as well +// If Boost.Config is available just use those definitions because they are more fine-grained + +// Could be defined in TR1 +#ifndef BOOST_MATH_PREVENT_MACRO_SUBSTITUTION +# define BOOST_MATH_PREVENT_MACRO_SUBSTITUTION BOOST_PREVENT_MACRO_SUBSTITUTION +#endif + +#define BOOST_MATH_CXX14_CONSTEXPR BOOST_CXX14_CONSTEXPR +#ifdef BOOST_NO_CXX14_CONSTEXPR +# define BOOST_MATH_NO_CXX14_CONSTEXPR +#endif + +#define BOOST_MATH_IF_CONSTEXPR BOOST_IF_CONSTEXPR +#ifdef BOOST_NO_CXX17_IF_CONSTEXPR +# define BOOST_MATH_NO_CXX17_IF_CONSTEXPR +#endif + +#ifdef BOOST_NO_CXX17_HDR_EXECUTION +# define BOOST_MATH_NO_CXX17_HDR_EXECUTION +#endif + +#ifdef BOOST_HAS_THREADS +# define BOOST_MATH_HAS_THREADS +#endif +#ifdef BOOST_DISABLE_THREADS +# define BOOST_MATH_DISABLE_THREADS +#endif +#ifdef BOOST_NO_CXX11_THREAD_LOCAL +# define BOOST_MATH_NO_CXX11_THREAD_LOCAL +#endif + +#ifdef BOOST_NO_EXCEPTIONS +# define BOOST_MATH_NO_EXCEPTIONS +#endif + +#ifdef BOOST_NO_TYPEID +# define BOOST_MATH_NO_TYPEID +#endif +#ifdef BOOST_NO_RTTI +# define BOOST_MATH_NO_RTTI +#endif + +#define BOOST_MATH_NOINLINE BOOST_NOINLINE +#define BOOST_MATH_FORCEINLINE BOOST_FORCEINLINE + +#define BOOST_MATH_JOIN(X, Y) BOOST_JOIN(X, Y) +#define BOOST_MATH_STRINGIZE(X) BOOST_STRINGIZE(X) + #else // Things from boost/config that are required, and easy to replicate -#define BOOST_PREVENT_MACRO_SUBSTITUTION +#define BOOST_MATH_PREVENT_MACRO_SUBSTITUTION #define BOOST_MATH_NO_REAL_CONCEPT_TESTS #define BOOST_MATH_NO_DISTRIBUTION_CONCEPT_TESTS #define BOOST_MATH_NO_LEXICAL_CAST @@ -38,59 +91,56 @@ #define BOOST_MATH_NO_MP_TESTS #if (__cplusplus > 201400L || _MSVC_LANG > 201400L) -#define BOOST_CXX14_CONSTEXPR constexpr +#define BOOST_MATH_CXX14_CONSTEXPR constexpr #else -#define BOOST_CXX14_CONSTEXPR -#define BOOST_NO_CXX14_CONSTEXPR -#endif // BOOST_CXX14_CONSTEXPR +#define BOOST_MATH_CXX14_CONSTEXPR +#define BOOST_MATH_NO_CXX14_CONSTEXPR +#endif // BOOST_MATH_CXX14_CONSTEXPR #if (__cplusplus > 201700L || _MSVC_LANG > 201700L) -#define BOOST_IF_CONSTEXPR if constexpr +#define BOOST_MATH_IF_CONSTEXPR if constexpr // Clang on mac provides the execution header with none of the functionality. TODO: Check back on this // https://en.cppreference.com/w/cpp/compiler_support "Standardization of Parallelism TS" -#if !__has_include(<execution>) || (defined(__APPLE__) && defined(__clang__)) -#define BOOST_NO_CXX17_HDR_EXECUTION -#endif +# if !__has_include(<execution>) || (defined(__APPLE__) && defined(__clang__)) +# define BOOST_MATH_NO_CXX17_HDR_EXECUTION +# endif #else -#define BOOST_IF_CONSTEXPR if -#define BOOST_NO_CXX17_IF_CONSTEXPR -#define BOOST_NO_CXX17_HDR_EXECUTION +# define BOOST_MATH_IF_CONSTEXPR if +# define BOOST_MATH_NO_CXX17_IF_CONSTEXPR +# define BOOST_MATH_NO_CXX17_HDR_EXECUTION #endif #if __cpp_lib_gcd_lcm >= 201606L #define BOOST_MATH_HAS_CXX17_NUMERIC #endif -#define BOOST_JOIN(X, Y) BOOST_DO_JOIN(X, Y) -#define BOOST_DO_JOIN(X, Y) BOOST_DO_JOIN2(X,Y) -#define BOOST_DO_JOIN2(X, Y) X##Y +#define BOOST_MATH_JOIN(X, Y) BOOST_MATH_DO_JOIN(X, Y) +#define BOOST_MATH_DO_JOIN(X, Y) BOOST_MATH_DO_JOIN2(X,Y) +#define BOOST_MATH_DO_JOIN2(X, Y) X##Y -#define BOOST_STRINGIZE(X) BOOST_DO_STRINGIZE(X) -#define BOOST_DO_STRINGIZE(X) #X +#define BOOST_MATH_STRINGIZE(X) BOOST_MATH_DO_STRINGIZE(X) +#define BOOST_MATH_DO_STRINGIZE(X) #X -#ifdef BOOST_DISABLE_THREADS // No threads, do nothing +#ifdef BOOST_MATH_DISABLE_THREADS // No threads, do nothing // Detect thread support via STL implementation #elif defined(__has_include) # if !__has_include(<thread>) || !__has_include(<mutex>) || !__has_include(<future>) || !__has_include(<atomic>) -# define BOOST_DISABLE_THREADS +# define BOOST_MATH_DISABLE_THREADS # else -# define BOOST_HAS_THREADS +# define BOOST_MATH_HAS_THREADS # endif #else -# define BOOST_HAS_THREADS // The default assumption is that the machine has threads +# define BOOST_MATH_HAS_THREADS // The default assumption is that the machine has threads #endif // Thread Support -#ifdef BOOST_DISABLE_THREADS -# define BOOST_NO_CXX11_HDR_ATOMIC -# define BOOST_NO_CXX11_HDR_FUTURE -# define BOOST_NO_CXX11_HDR_THREAD -# define BOOST_NO_CXX11_THREAD_LOCAL -#endif // BOOST_DISABLE_THREADS +#ifdef BOOST_MATH_DISABLE_THREADS +# define BOOST_MATH_NO_CXX11_THREAD_LOCAL +#endif // BOOST_MATH_DISABLE_THREADS #ifdef __GNUC__ -# if !defined(__EXCEPTIONS) && !defined(BOOST_NO_EXCEPTIONS) -# define BOOST_NO_EXCEPTIONS +# if !defined(__EXCEPTIONS) && !defined(BOOST_MATH_NO_EXCEPTIONS) +# define BOOST_MATH_NO_EXCEPTIONS # endif // // Make sure we have some std lib headers included so we can detect __GXX_RTTI: @@ -98,43 +148,43 @@ # include <algorithm> // for min and max # include <limits> # ifndef __GXX_RTTI -# ifndef BOOST_NO_TYPEID -# define BOOST_NO_TYPEID +# ifndef BOOST_MATH_NO_TYPEID +# define BOOST_MATH_NO_TYPEID # endif -# ifndef BOOST_NO_RTTI -# define BOOST_NO_RTTI +# ifndef BOOST_MATH_NO_RTTI +# define BOOST_MATH_NO_RTTI # endif # endif #endif -#if !defined(BOOST_NOINLINE) +#if !defined(BOOST_MATH_NOINLINE) # if defined(_MSC_VER) -# define BOOST_NOINLINE __declspec(noinline) +# define BOOST_MATH_NOINLINE __declspec(noinline) # elif defined(__GNUC__) && __GNUC__ > 3 // Clang also defines __GNUC__ (as 4) # if defined(__CUDACC__) // nvcc doesn't always parse __noinline__, // see: https://svn.boost.org/trac/boost/ticket/9392 -# define BOOST_NOINLINE __attribute__ ((noinline)) +# define BOOST_MATH_NOINLINE __attribute__ ((noinline)) # elif defined(__HIP__) // See https://github.com/boostorg/config/issues/392 -# define BOOST_NOINLINE __attribute__ ((noinline)) +# define BOOST_MATH_NOINLINE __attribute__ ((noinline)) # else -# define BOOST_NOINLINE __attribute__ ((__noinline__)) +# define BOOST_MATH_NOINLINE __attribute__ ((__noinline__)) # endif # else -# define BOOST_NOINLINE +# define BOOST_MATH_NOINLINE # endif #endif -#if !defined(BOOST_FORCEINLINE) +#if !defined(BOOST_MATH_FORCEINLINE) # if defined(_MSC_VER) -# define BOOST_FORCEINLINE __forceinline +# define BOOST_MATH_FORCEINLINE __forceinline # elif defined(__GNUC__) && __GNUC__ > 3 // Clang also defines __GNUC__ (as 4) -# define BOOST_FORCEINLINE inline __attribute__ ((__always_inline__)) +# define BOOST_MATH_FORCEINLINE inline __attribute__ ((__always_inline__)) # else -# define BOOST_FORCEINLINE inline +# define BOOST_MATH_FORCEINLINE inline # endif #endif @@ -142,7 +192,7 @@ // Support compilers with P0024R2 implemented without linking TBB // https://en.cppreference.com/w/cpp/compiler_support -#if !defined(BOOST_NO_CXX17_HDR_EXECUTION) && defined(BOOST_HAS_THREADS) +#if !defined(BOOST_MATH_NO_CXX17_HDR_EXECUTION) && defined(BOOST_MATH_HAS_THREADS) # define BOOST_MATH_EXEC_COMPATIBLE #endif @@ -461,13 +511,13 @@ namespace tools { template <class T> -inline T max BOOST_PREVENT_MACRO_SUBSTITUTION(T a, T b, T c) BOOST_MATH_NOEXCEPT(T) +inline T max BOOST_MATH_PREVENT_MACRO_SUBSTITUTION(T a, T b, T c) BOOST_MATH_NOEXCEPT(T) { return (std::max)((std::max)(a, b), c); } template <class T> -inline T max BOOST_PREVENT_MACRO_SUBSTITUTION(T a, T b, T c, T d) BOOST_MATH_NOEXCEPT(T) +inline T max BOOST_MATH_PREVENT_MACRO_SUBSTITUTION(T a, T b, T c, T d) BOOST_MATH_NOEXCEPT(T) { return (std::max)((std::max)(a, b), (std::max)(c, d)); } @@ -565,7 +615,7 @@ namespace boost{ namespace math{ // // Thread local storage: // -#ifndef BOOST_DISABLE_THREADS +#ifndef BOOST_MATH_DISABLE_THREADS # define BOOST_MATH_THREAD_LOCAL thread_local #else # define BOOST_MATH_THREAD_LOCAL @@ -583,7 +633,7 @@ namespace boost{ namespace math{ // // Can we have constexpr tables? // -#if (!defined(BOOST_NO_CXX14_CONSTEXPR)) || (defined(_MSC_VER) && _MSC_VER >= 1910) +#if (!defined(BOOST_MATH_NO_CXX14_CONSTEXPR)) || (defined(_MSC_VER) && _MSC_VER >= 1910) #define BOOST_MATH_HAVE_CONSTEXPR_TABLES #define BOOST_MATH_CONSTEXPR_TABLE_FUNCTION constexpr #else diff --git a/contrib/restricted/boost/math/include/boost/math/tools/mp.hpp b/contrib/restricted/boost/math/include/boost/math/tools/mp.hpp index 3100a0bb67..55aac1b092 100644 --- a/contrib/restricted/boost/math/include/boost/math/tools/mp.hpp +++ b/contrib/restricted/boost/math/include/boost/math/tools/mp.hpp @@ -168,11 +168,11 @@ struct mp_at_c<L<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T...>, 1 }; } -template<typename L, std::size_t I> -using mp_at_c = typename detail::mp_at_c<L, I>::type; +template<typename L, std::size_t Index> +using mp_at_c = typename detail::mp_at_c<L, Index>::type; -template<typename L, typename I> -using mp_at = typename detail::mp_at_c<L, I::value>::type; +template<typename L, typename Index> +using mp_at = typename detail::mp_at_c<L, Index::value>::type; // Back template<typename L> @@ -339,8 +339,8 @@ using mp_remove_if_q = mp_remove_if<L, Q::template fn>; // Index sequence // Use C++14 index sequence if available #if defined(__cpp_lib_integer_sequence) && (__cpp_lib_integer_sequence >= 201304) -template<std::size_t... I> -using index_sequence = std::index_sequence<I...>; +template<std::size_t... Index> +using index_sequence = std::index_sequence<Index...>; template<std::size_t N> using make_index_sequence = std::make_index_sequence<N>; @@ -350,11 +350,11 @@ using index_sequence_for = std::index_sequence_for<T...>; #else -template<typename T, T... I> +template<typename T, T... Index> struct integer_sequence {}; -template<std::size_t... I> -using index_sequence = integer_sequence<std::size_t, I...>; +template<std::size_t... Index> +using index_sequence = integer_sequence<std::size_t, Index...>; namespace detail { @@ -385,10 +385,10 @@ struct iseq_identity template<typename T1, typename T2> struct append_integer_sequence {}; -template<typename T, T... I, T... J> -struct append_integer_sequence<integer_sequence<T, I...>, integer_sequence<T, J...>> +template<typename T, T... Index, T... J> +struct append_integer_sequence<integer_sequence<T, Index...>, integer_sequence<T, J...>> { - using type = integer_sequence<T, I..., (J + sizeof...(I))...>; + using type = integer_sequence<T, Index..., (J + sizeof...(Index))...>; }; template<typename T, T N> diff --git a/contrib/restricted/boost/math/ya.make b/contrib/restricted/boost/math/ya.make index 660c3ca286..b4bef35c73 100644 --- a/contrib/restricted/boost/math/ya.make +++ b/contrib/restricted/boost/math/ya.make @@ -6,9 +6,9 @@ LICENSE(BSL-1.0) LICENSE_TEXTS(.yandex_meta/licenses.list.txt) -VERSION(1.84.0) +VERSION(1.85.0) -ORIGINAL_SOURCE(https://github.com/boostorg/math/archive/boost-1.84.0.tar.gz) +ORIGINAL_SOURCE(https://github.com/boostorg/math/archive/boost-1.85.0.tar.gz) PEERDIR( contrib/restricted/boost/assert diff --git a/contrib/restricted/boost/move/include/boost/move/adl_move_swap.hpp b/contrib/restricted/boost/move/include/boost/move/adl_move_swap.hpp index d9096e36c3..63ad7888e7 100644 --- a/contrib/restricted/boost/move/include/boost/move/adl_move_swap.hpp +++ b/contrib/restricted/boost/move/include/boost/move/adl_move_swap.hpp @@ -155,7 +155,7 @@ struct and_op_not {}; template<class T> -BOOST_MOVE_FORCEINLINE void swap_proxy(T& x, T& y, typename boost::move_detail::enable_if_c<!boost::move_detail::has_move_emulation_enabled_impl<T>::value>::type* = 0) +inline void swap_proxy(T& x, T& y, typename boost::move_detail::enable_if_c<!boost::move_detail::has_move_emulation_enabled_impl<T>::value>::type* = 0) { //use std::swap if argument dependent lookup fails //Use using directive ("using namespace xxx;") instead as some older compilers @@ -165,14 +165,14 @@ BOOST_MOVE_FORCEINLINE void swap_proxy(T& x, T& y, typename boost::move_detail:: } template<class T> -BOOST_MOVE_FORCEINLINE void swap_proxy(T& x, T& y +void swap_proxy(T& x, T& y , typename boost::move_detail::enable_if< and_op_not_impl<boost::move_detail::has_move_emulation_enabled_impl<T> , boost_move_member_swap::has_member_swap<T> > >::type* = 0) { T t(::boost::move(x)); x = ::boost::move(y); y = ::boost::move(t); } template<class T> -BOOST_MOVE_FORCEINLINE void swap_proxy(T& x, T& y +inline void swap_proxy(T& x, T& y , typename boost::move_detail::enable_if< and_op_impl< boost::move_detail::has_move_emulation_enabled_impl<T> , boost_move_member_swap::has_member_swap<T> > >::type* = 0) @@ -185,7 +185,7 @@ BOOST_MOVE_FORCEINLINE void swap_proxy(T& x, T& y namespace boost_move_adl_swap{ template<class T> -BOOST_MOVE_FORCEINLINE void swap_proxy(T& x, T& y) +inline void swap_proxy(T& x, T& y) { using std::swap; swap(x, y); @@ -222,7 +222,7 @@ namespace boost{ //! - Otherwise a move-based swap is called, equivalent to: //! <code>T t(::boost::move(x)); x = ::boost::move(y); y = ::boost::move(t);</code>. template<class T> -BOOST_MOVE_FORCEINLINE void adl_move_swap(T& x, T& y) +inline void adl_move_swap(T& x, T& y) { ::boost_move_adl_swap::swap_proxy(x, y); } diff --git a/contrib/restricted/boost/move/include/boost/move/algo/adaptive_merge.hpp b/contrib/restricted/boost/move/include/boost/move/algo/adaptive_merge.hpp index bba41bd2ad..5261d72963 100644 --- a/contrib/restricted/boost/move/include/boost/move/algo/adaptive_merge.hpp +++ b/contrib/restricted/boost/move/include/boost/move/algo/adaptive_merge.hpp @@ -19,6 +19,7 @@ #if defined(BOOST_CLANG) || (defined(BOOST_GCC) && (BOOST_GCC >= 40600)) #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wsign-conversion" +#pragma GCC diagnostic ignored "-Wconversion" #endif namespace boost { diff --git a/contrib/restricted/boost/move/include/boost/move/algo/detail/adaptive_sort_merge.hpp b/contrib/restricted/boost/move/include/boost/move/algo/detail/adaptive_sort_merge.hpp index 79c46996e0..2b45407d35 100644 --- a/contrib/restricted/boost/move/include/boost/move/algo/detail/adaptive_sort_merge.hpp +++ b/contrib/restricted/boost/move/include/boost/move/algo/detail/adaptive_sort_merge.hpp @@ -60,6 +60,7 @@ #if defined(BOOST_CLANG) || (defined(BOOST_GCC) && (BOOST_GCC >= 40600)) #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wsign-conversion" +#pragma GCC diagnostic ignored "-Wconversion" #endif #ifndef BOOST_MOVE_ADAPTIVE_SORT_STATS_LEVEL @@ -93,26 +94,12 @@ #define BOOST_MOVE_ADAPTIVE_SORT_INVARIANT(L) #endif -namespace boost { -namespace movelib { - #if defined(BOOST_MOVE_ADAPTIVE_SORT_INVARIANTS) +#include <boost/move/algo/detail/is_sorted.hpp> +#endif -bool is_sorted(::order_perf_type *first, ::order_perf_type *last, ::order_type_less) -{ - if (first != last) { - const order_perf_type *next = first, *cur(first); - while (++next != last) { - if (!(cur->key < next->key || (cur->key == next->key && cur->val < next->val))) - return false; - cur = next; - } - } - return true; -} - -#endif //BOOST_MOVE_ADAPTIVE_SORT_INVARIANTS - +namespace boost { +namespace movelib { namespace detail_adaptive { static const std::size_t AdaptiveSortInsertionSortThreshold = 16; @@ -1320,7 +1307,6 @@ void op_merge_blocks_with_buf //swap_and_update_key(key_next, key_range2, key_mid, first2, last2, first_min); buffer_end = buffer_and_update_key(key_next, key_range2, key_mid, first2, last2, first_min, buffer = buf_first, op); BOOST_MOVE_ADAPTIVE_SORT_PRINT_L2(" merge_blocks_w_swp: ", len); - BOOST_MOVE_ADAPTIVE_SORT_INVARIANT(boost::movelib::is_sorted(first2, last2, comp)); BOOST_MOVE_ADAPTIVE_SORT_INVARIANT(boost::movelib::is_sorted(first_min, last_min, comp)); first1 = first2; BOOST_MOVE_ADAPTIVE_SORT_INVARIANT(boost::movelib::is_sorted(first, first1, comp)); diff --git a/contrib/restricted/boost/move/include/boost/move/algo/detail/basic_op.hpp b/contrib/restricted/boost/move/include/boost/move/algo/detail/basic_op.hpp index 144280b3fc..43ae68d175 100644 --- a/contrib/restricted/boost/move/include/boost/move/algo/detail/basic_op.hpp +++ b/contrib/restricted/boost/move/include/boost/move/algo/detail/basic_op.hpp @@ -36,19 +36,19 @@ struct four_way_t{}; struct move_op { template <class SourceIt, class DestinationIt> - BOOST_MOVE_FORCEINLINE void operator()(SourceIt source, DestinationIt dest) + inline void operator()(SourceIt source, DestinationIt dest) { *dest = ::boost::move(*source); } template <class SourceIt, class DestinationIt> - BOOST_MOVE_FORCEINLINE DestinationIt operator()(forward_t, SourceIt first, SourceIt last, DestinationIt dest_begin) + inline DestinationIt operator()(forward_t, SourceIt first, SourceIt last, DestinationIt dest_begin) { return ::boost::move(first, last, dest_begin); } template <class SourceIt, class DestinationIt> - BOOST_MOVE_FORCEINLINE DestinationIt operator()(backward_t, SourceIt first, SourceIt last, DestinationIt dest_last) + inline DestinationIt operator()(backward_t, SourceIt first, SourceIt last, DestinationIt dest_last) { return ::boost::move_backward(first, last, dest_last); } template <class SourceIt, class DestinationIt1, class DestinationIt2> - BOOST_MOVE_FORCEINLINE void operator()(three_way_t, SourceIt srcit, DestinationIt1 dest1it, DestinationIt2 dest2it) + inline void operator()(three_way_t, SourceIt srcit, DestinationIt1 dest1it, DestinationIt2 dest2it) { *dest2it = boost::move(*dest1it); *dest1it = boost::move(*srcit); @@ -65,7 +65,7 @@ struct move_op } template <class SourceIt, class DestinationIt1, class DestinationIt2, class DestinationIt3> - BOOST_MOVE_FORCEINLINE void operator()(four_way_t, SourceIt srcit, DestinationIt1 dest1it, DestinationIt2 dest2it, DestinationIt3 dest3it) + inline void operator()(four_way_t, SourceIt srcit, DestinationIt1 dest1it, DestinationIt2 dest2it, DestinationIt3 dest3it) { *dest3it = boost::move(*dest2it); *dest2it = boost::move(*dest1it); @@ -76,19 +76,19 @@ struct move_op struct swap_op { template <class SourceIt, class DestinationIt> - BOOST_MOVE_FORCEINLINE void operator()(SourceIt source, DestinationIt dest) + inline void operator()(SourceIt source, DestinationIt dest) { boost::adl_move_swap(*dest, *source); } template <class SourceIt, class DestinationIt> - BOOST_MOVE_FORCEINLINE DestinationIt operator()(forward_t, SourceIt first, SourceIt last, DestinationIt dest_begin) + inline DestinationIt operator()(forward_t, SourceIt first, SourceIt last, DestinationIt dest_begin) { return boost::adl_move_swap_ranges(first, last, dest_begin); } template <class SourceIt, class DestinationIt> - BOOST_MOVE_FORCEINLINE DestinationIt operator()(backward_t, SourceIt first, SourceIt last, DestinationIt dest_begin) + inline DestinationIt operator()(backward_t, SourceIt first, SourceIt last, DestinationIt dest_begin) { return boost::adl_move_swap_ranges_backward(first, last, dest_begin); } template <class SourceIt, class DestinationIt1, class DestinationIt2> - BOOST_MOVE_FORCEINLINE void operator()(three_way_t, SourceIt srcit, DestinationIt1 dest1it, DestinationIt2 dest2it) + inline void operator()(three_way_t, SourceIt srcit, DestinationIt1 dest1it, DestinationIt2 dest2it) { typename ::boost::movelib::iterator_traits<SourceIt>::value_type tmp(boost::move(*dest2it)); *dest2it = boost::move(*dest1it); @@ -106,7 +106,7 @@ struct swap_op } template <class SourceIt, class DestinationIt1, class DestinationIt2, class DestinationIt3> - BOOST_MOVE_FORCEINLINE void operator()(four_way_t, SourceIt srcit, DestinationIt1 dest1it, DestinationIt2 dest2it, DestinationIt3 dest3it) + inline void operator()(four_way_t, SourceIt srcit, DestinationIt1 dest1it, DestinationIt2 dest2it, DestinationIt3 dest3it) { typename ::boost::movelib::iterator_traits<SourceIt>::value_type tmp(boost::move(*dest3it)); *dest3it = boost::move(*dest2it); diff --git a/contrib/restricted/boost/move/include/boost/move/algo/detail/heap_sort.hpp b/contrib/restricted/boost/move/include/boost/move/algo/detail/heap_sort.hpp index 60db353ed8..4ed5a1c7a6 100644 --- a/contrib/restricted/boost/move/include/boost/move/algo/detail/heap_sort.hpp +++ b/contrib/restricted/boost/move/include/boost/move/algo/detail/heap_sort.hpp @@ -106,7 +106,7 @@ class heap_sort_helper }; template <class RandomAccessIterator, class Compare> -BOOST_MOVE_FORCEINLINE void heap_sort(RandomAccessIterator first, RandomAccessIterator last, Compare comp) +inline void heap_sort(RandomAccessIterator first, RandomAccessIterator last, Compare comp) { heap_sort_helper<RandomAccessIterator, Compare>::sort(first, last, comp); } diff --git a/contrib/restricted/boost/move/include/boost/move/algo/detail/merge.hpp b/contrib/restricted/boost/move/include/boost/move/algo/detail/merge.hpp index ad260046ab..f9f12757e1 100644 --- a/contrib/restricted/boost/move/include/boost/move/algo/detail/merge.hpp +++ b/contrib/restricted/boost/move/include/boost/move/algo/detail/merge.hpp @@ -43,11 +43,11 @@ class adaptive_xbuf typedef RandRawIt iterator; typedef SizeType size_type; - BOOST_MOVE_FORCEINLINE adaptive_xbuf() + inline adaptive_xbuf() : m_ptr(), m_size(0), m_capacity(0) {} - BOOST_MOVE_FORCEINLINE adaptive_xbuf(RandRawIt raw_memory, size_type cap) + inline adaptive_xbuf(RandRawIt raw_memory, size_type cap) : m_ptr(raw_memory), m_size(0), m_capacity(cap) {} @@ -102,7 +102,7 @@ class adaptive_xbuf } } - BOOST_MOVE_FORCEINLINE void set_size(size_type sz) + inline void set_size(size_type sz) { m_size = sz; } @@ -144,12 +144,12 @@ class adaptive_xbuf private: template<class RIt> - BOOST_MOVE_FORCEINLINE static bool is_raw_ptr(RIt) + inline static bool is_raw_ptr(RIt) { return false; } - BOOST_MOVE_FORCEINLINE static bool is_raw_ptr(T*) + inline static bool is_raw_ptr(T*) { return true; } @@ -168,43 +168,43 @@ class adaptive_xbuf } template<class U> - BOOST_MOVE_FORCEINLINE U *aligned_trailing() const + inline U *aligned_trailing() const { return this->aligned_trailing<U>(this->size()); } template<class U> - BOOST_MOVE_FORCEINLINE U *aligned_trailing(size_type pos) const + inline U *aligned_trailing(size_type pos) const { uintptr_t u_addr = uintptr_t(&*(this->data()+pos)); u_addr = ((u_addr + sizeof(U)-1)/sizeof(U))*sizeof(U); return (U*)u_addr; } - BOOST_MOVE_FORCEINLINE ~adaptive_xbuf() + inline ~adaptive_xbuf() { this->clear(); } - BOOST_MOVE_FORCEINLINE size_type capacity() const + inline size_type capacity() const { return m_capacity; } - BOOST_MOVE_FORCEINLINE iterator data() const + inline iterator data() const { return m_ptr; } - BOOST_MOVE_FORCEINLINE iterator begin() const + inline iterator begin() const { return m_ptr; } - BOOST_MOVE_FORCEINLINE iterator end() const + inline iterator end() const { return m_ptr+m_size; } - BOOST_MOVE_FORCEINLINE size_type size() const + inline size_type size() const { return m_size; } - BOOST_MOVE_FORCEINLINE bool empty() const + inline bool empty() const { return !m_size; } - BOOST_MOVE_FORCEINLINE void clear() + inline void clear() { this->shrink_to_fit(0u); } diff --git a/contrib/restricted/boost/move/include/boost/move/algo/predicate.hpp b/contrib/restricted/boost/move/include/boost/move/algo/predicate.hpp index 58a4d620c3..023066a129 100644 --- a/contrib/restricted/boost/move/include/boost/move/algo/predicate.hpp +++ b/contrib/restricted/boost/move/include/boost/move/algo/predicate.hpp @@ -24,19 +24,19 @@ namespace movelib { template<class Comp> struct antistable { - BOOST_MOVE_FORCEINLINE explicit antistable(Comp &comp) + inline explicit antistable(Comp &comp) : m_comp(comp) {} - BOOST_MOVE_FORCEINLINE antistable(const antistable & other) + inline antistable(const antistable & other) : m_comp(other.m_comp) {} template<class U, class V> - BOOST_MOVE_FORCEINLINE bool operator()(const U &u, const V & v) + inline bool operator()(const U &u, const V & v) { return !m_comp(v, u); } - BOOST_MOVE_FORCEINLINE const Comp &get() const + inline const Comp &get() const { return m_comp; } private: @@ -56,15 +56,15 @@ template <class Comp> class negate { public: - BOOST_MOVE_FORCEINLINE negate() + inline negate() {} - BOOST_MOVE_FORCEINLINE explicit negate(Comp comp) + inline explicit negate(Comp comp) : m_comp(comp) {} template <class T1, class T2> - BOOST_MOVE_FORCEINLINE bool operator()(const T1& l, const T2& r) + inline bool operator()(const T1& l, const T2& r) { return !m_comp(l, r); } @@ -78,15 +78,15 @@ template <class Comp> class inverse { public: - BOOST_MOVE_FORCEINLINE inverse() + inline inverse() {} - BOOST_MOVE_FORCEINLINE explicit inverse(Comp comp) + inline explicit inverse(Comp comp) : m_comp(comp) {} template <class T1, class T2> - BOOST_MOVE_FORCEINLINE bool operator()(const T1& l, const T2& r) + inline bool operator()(const T1& l, const T2& r) { return m_comp(r, l); } diff --git a/contrib/restricted/boost/move/include/boost/move/core.hpp b/contrib/restricted/boost/move/include/boost/move/core.hpp index 68f8f2a126..79205d6526 100644 --- a/contrib/restricted/boost/move/include/boost/move/core.hpp +++ b/contrib/restricted/boost/move/include/boost/move/core.hpp @@ -262,12 +262,12 @@ #define BOOST_COPYABLE_AND_MOVABLE(TYPE)\ public:\ - BOOST_MOVE_FORCEINLINE TYPE& operator=(TYPE &t)\ + inline TYPE& operator=(TYPE &t)\ { this->operator=(const_cast<const TYPE&>(t)); return *this;}\ public:\ - BOOST_MOVE_FORCEINLINE operator ::boost::rv<TYPE>&() \ + inline operator ::boost::rv<TYPE>&() \ { return *BOOST_MOVE_TO_RV_CAST(::boost::rv<TYPE>*, this); }\ - BOOST_MOVE_FORCEINLINE operator const ::boost::rv<TYPE>&() const \ + inline operator const ::boost::rv<TYPE>&() const \ { return *BOOST_MOVE_TO_RV_CAST(const ::boost::rv<TYPE>*, this); }\ private:\ // diff --git a/contrib/restricted/boost/move/include/boost/move/detail/iterator_to_raw_pointer.hpp b/contrib/restricted/boost/move/include/boost/move/detail/iterator_to_raw_pointer.hpp index 67afd6c1ef..97ee3a6595 100644 --- a/contrib/restricted/boost/move/include/boost/move/detail/iterator_to_raw_pointer.hpp +++ b/contrib/restricted/boost/move/include/boost/move/detail/iterator_to_raw_pointer.hpp @@ -27,11 +27,11 @@ namespace movelib { namespace detail { template <class T> -BOOST_MOVE_FORCEINLINE T* iterator_to_pointer(T* i) +inline T* iterator_to_pointer(T* i) { return i; } template <class Iterator> -BOOST_MOVE_FORCEINLINE typename boost::movelib::iterator_traits<Iterator>::pointer +inline typename boost::movelib::iterator_traits<Iterator>::pointer iterator_to_pointer(const Iterator &i) { return i.operator->(); } @@ -46,7 +46,7 @@ struct iterator_to_element_ptr } //namespace detail { template <class Iterator> -BOOST_MOVE_FORCEINLINE typename boost::movelib::detail::iterator_to_element_ptr<Iterator>::type +inline typename boost::movelib::detail::iterator_to_element_ptr<Iterator>::type iterator_to_raw_pointer(const Iterator &i) { return ::boost::movelib::to_raw_pointer diff --git a/contrib/restricted/boost/move/include/boost/move/detail/meta_utils.hpp b/contrib/restricted/boost/move/include/boost/move/detail/meta_utils.hpp index 7c90de287e..ad5654a395 100644 --- a/contrib/restricted/boost/move/include/boost/move/detail/meta_utils.hpp +++ b/contrib/restricted/boost/move/include/boost/move/detail/meta_utils.hpp @@ -57,8 +57,8 @@ struct apply template< bool C_ > struct bool_ : integral_constant<bool, C_> { - BOOST_MOVE_FORCEINLINE operator bool() const { return C_; } - BOOST_MOVE_FORCEINLINE bool operator()() const { return C_; } + inline operator bool() const { return C_; } + inline bool operator()() const { return C_; } }; typedef bool_<true> true_; diff --git a/contrib/restricted/boost/move/include/boost/move/detail/move_helpers.hpp b/contrib/restricted/boost/move/include/boost/move/detail/move_helpers.hpp index 17138444d1..89c73a090b 100644 --- a/contrib/restricted/boost/move/include/boost/move/detail/move_helpers.hpp +++ b/contrib/restricted/boost/move/include/boost/move/detail/move_helpers.hpp @@ -69,13 +69,13 @@ {}; #define BOOST_MOVE_CONVERSION_AWARE_CATCH_COMMON(PUB_FUNCTION, TYPE, RETURN_VALUE, FWD_FUNCTION)\ - BOOST_MOVE_FORCEINLINE RETURN_VALUE PUB_FUNCTION(BOOST_MOVE_CATCH_CONST(TYPE) x)\ + inline RETURN_VALUE PUB_FUNCTION(BOOST_MOVE_CATCH_CONST(TYPE) x)\ { return FWD_FUNCTION(static_cast<const TYPE&>(x)); }\ \ - BOOST_MOVE_FORCEINLINE RETURN_VALUE PUB_FUNCTION(BOOST_MOVE_CATCH_RVALUE(TYPE) x) \ + inline RETURN_VALUE PUB_FUNCTION(BOOST_MOVE_CATCH_RVALUE(TYPE) x) \ { return FWD_FUNCTION(::boost::move(x)); }\ \ - BOOST_MOVE_FORCEINLINE RETURN_VALUE PUB_FUNCTION(TYPE &x)\ + inline RETURN_VALUE PUB_FUNCTION(TYPE &x)\ { return FWD_FUNCTION(const_cast<const TYPE &>(x)); }\ // #if defined(BOOST_MOVE_HELPERS_RETURN_SFINAE_BROKEN) @@ -83,12 +83,12 @@ BOOST_MOVE_CONVERSION_AWARE_CATCH_COMMON(PUB_FUNCTION, TYPE, RETURN_VALUE, FWD_FUNCTION)\ \ template<class BOOST_MOVE_TEMPL_PARAM>\ - BOOST_MOVE_FORCEINLINE RETURN_VALUE PUB_FUNCTION(const BOOST_MOVE_TEMPL_PARAM &u,\ + inline RETURN_VALUE PUB_FUNCTION(const BOOST_MOVE_TEMPL_PARAM &u,\ typename boost_move_conversion_aware_catch_1< ::boost::move_detail::nat, BOOST_MOVE_TEMPL_PARAM, TYPE>::type* = 0)\ { return FWD_FUNCTION(u); }\ \ template<class BOOST_MOVE_TEMPL_PARAM>\ - BOOST_MOVE_FORCEINLINE RETURN_VALUE PUB_FUNCTION(const BOOST_MOVE_TEMPL_PARAM &u,\ + inline RETURN_VALUE PUB_FUNCTION(const BOOST_MOVE_TEMPL_PARAM &u,\ typename boost_move_conversion_aware_catch_2< ::boost::move_detail::nat, BOOST_MOVE_TEMPL_PARAM, TYPE>::type* = 0)\ {\ TYPE t((u));\ @@ -100,12 +100,12 @@ BOOST_MOVE_CONVERSION_AWARE_CATCH_COMMON(PUB_FUNCTION, TYPE, RETURN_VALUE, FWD_FUNCTION)\ \ template<class BOOST_MOVE_TEMPL_PARAM>\ - BOOST_MOVE_FORCEINLINE typename boost_move_conversion_aware_catch_1<RETURN_VALUE, BOOST_MOVE_TEMPL_PARAM, TYPE>::type\ + inline typename boost_move_conversion_aware_catch_1<RETURN_VALUE, BOOST_MOVE_TEMPL_PARAM, TYPE>::type\ PUB_FUNCTION(const BOOST_MOVE_TEMPL_PARAM &u)\ { return FWD_FUNCTION(u); }\ \ template<class BOOST_MOVE_TEMPL_PARAM>\ - BOOST_MOVE_FORCEINLINE typename boost_move_conversion_aware_catch_2<RETURN_VALUE, BOOST_MOVE_TEMPL_PARAM, TYPE>::type\ + inline typename boost_move_conversion_aware_catch_2<RETURN_VALUE, BOOST_MOVE_TEMPL_PARAM, TYPE>::type\ PUB_FUNCTION(const BOOST_MOVE_TEMPL_PARAM &u)\ {\ TYPE t((u));\ @@ -116,14 +116,14 @@ #elif (defined(_MSC_VER) && (_MSC_VER == 1600)) #define BOOST_MOVE_CONVERSION_AWARE_CATCH(PUB_FUNCTION, TYPE, RETURN_VALUE, FWD_FUNCTION)\ - BOOST_MOVE_FORCEINLINE RETURN_VALUE PUB_FUNCTION(BOOST_MOVE_CATCH_CONST(TYPE) x)\ + inline RETURN_VALUE PUB_FUNCTION(BOOST_MOVE_CATCH_CONST(TYPE) x)\ { return FWD_FUNCTION(static_cast<const TYPE&>(x)); }\ \ - BOOST_MOVE_FORCEINLINE RETURN_VALUE PUB_FUNCTION(BOOST_MOVE_CATCH_RVALUE(TYPE) x) \ + inline RETURN_VALUE PUB_FUNCTION(BOOST_MOVE_CATCH_RVALUE(TYPE) x) \ { return FWD_FUNCTION(::boost::move(x)); }\ \ template<class BOOST_MOVE_TEMPL_PARAM>\ - BOOST_MOVE_FORCEINLINE typename ::boost::move_detail::enable_if_c\ + inline typename ::boost::move_detail::enable_if_c\ < !::boost::move_detail::is_same<TYPE, BOOST_MOVE_TEMPL_PARAM>::value\ , RETURN_VALUE >::type\ PUB_FUNCTION(const BOOST_MOVE_TEMPL_PARAM &u)\ @@ -136,10 +136,10 @@ #else //BOOST_NO_CXX11_RVALUE_REFERENCES #define BOOST_MOVE_CONVERSION_AWARE_CATCH(PUB_FUNCTION, TYPE, RETURN_VALUE, FWD_FUNCTION)\ - BOOST_MOVE_FORCEINLINE RETURN_VALUE PUB_FUNCTION(BOOST_MOVE_CATCH_CONST(TYPE) x)\ + inline RETURN_VALUE PUB_FUNCTION(BOOST_MOVE_CATCH_CONST(TYPE) x)\ { return FWD_FUNCTION(x); }\ \ - BOOST_MOVE_FORCEINLINE RETURN_VALUE PUB_FUNCTION(BOOST_MOVE_CATCH_RVALUE(TYPE) x) \ + inline RETURN_VALUE PUB_FUNCTION(BOOST_MOVE_CATCH_RVALUE(TYPE) x) \ { return FWD_FUNCTION(::boost::move(x)); }\ // @@ -174,13 +174,13 @@ {}; #define BOOST_MOVE_CONVERSION_AWARE_CATCH_1ARG_COMMON(PUB_FUNCTION, TYPE, RETURN_VALUE, FWD_FUNCTION, ARG1, UNLESS_CONVERTIBLE_TO)\ - BOOST_MOVE_FORCEINLINE RETURN_VALUE PUB_FUNCTION(ARG1 arg1, BOOST_MOVE_CATCH_CONST(TYPE) x)\ + inline RETURN_VALUE PUB_FUNCTION(ARG1 arg1, BOOST_MOVE_CATCH_CONST(TYPE) x)\ { return FWD_FUNCTION(arg1, static_cast<const TYPE&>(x)); }\ \ - BOOST_MOVE_FORCEINLINE RETURN_VALUE PUB_FUNCTION(ARG1 arg1, BOOST_MOVE_CATCH_RVALUE(TYPE) x) \ + inline RETURN_VALUE PUB_FUNCTION(ARG1 arg1, BOOST_MOVE_CATCH_RVALUE(TYPE) x) \ { return FWD_FUNCTION(arg1, ::boost::move(x)); }\ \ - BOOST_MOVE_FORCEINLINE RETURN_VALUE PUB_FUNCTION(ARG1 arg1, TYPE &x)\ + inline RETURN_VALUE PUB_FUNCTION(ARG1 arg1, TYPE &x)\ { return FWD_FUNCTION(arg1, const_cast<const TYPE &>(x)); }\ // #if defined(BOOST_MOVE_HELPERS_RETURN_SFINAE_BROKEN) @@ -188,12 +188,12 @@ BOOST_MOVE_CONVERSION_AWARE_CATCH_1ARG_COMMON(PUB_FUNCTION, TYPE, RETURN_VALUE, FWD_FUNCTION, ARG1, UNLESS_CONVERTIBLE_TO)\ \ template<class BOOST_MOVE_TEMPL_PARAM>\ - BOOST_MOVE_FORCEINLINE RETURN_VALUE PUB_FUNCTION(ARG1 arg1, const BOOST_MOVE_TEMPL_PARAM &u,\ + inline RETURN_VALUE PUB_FUNCTION(ARG1 arg1, const BOOST_MOVE_TEMPL_PARAM &u,\ typename boost_move_conversion_aware_catch_1arg_1<void, BOOST_MOVE_TEMPL_PARAM, UNLESS_CONVERTIBLE_TO, TYPE>::type* = 0)\ { return FWD_FUNCTION(arg1, u); }\ \ template<class BOOST_MOVE_TEMPL_PARAM>\ - BOOST_MOVE_FORCEINLINE RETURN_VALUE PUB_FUNCTION(ARG1 arg1, const BOOST_MOVE_TEMPL_PARAM &u,\ + inline RETURN_VALUE PUB_FUNCTION(ARG1 arg1, const BOOST_MOVE_TEMPL_PARAM &u,\ typename boost_move_conversion_aware_catch_1arg_2<void, BOOST_MOVE_TEMPL_PARAM, UNLESS_CONVERTIBLE_TO, TYPE>::type* = 0)\ {\ TYPE t((u));\ @@ -205,12 +205,12 @@ BOOST_MOVE_CONVERSION_AWARE_CATCH_1ARG_COMMON(PUB_FUNCTION, TYPE, RETURN_VALUE, FWD_FUNCTION, ARG1, UNLESS_CONVERTIBLE_TO)\ \ template<class BOOST_MOVE_TEMPL_PARAM>\ - BOOST_MOVE_FORCEINLINE typename boost_move_conversion_aware_catch_1arg_1<RETURN_VALUE, BOOST_MOVE_TEMPL_PARAM, UNLESS_CONVERTIBLE_TO, TYPE>::type\ + inline typename boost_move_conversion_aware_catch_1arg_1<RETURN_VALUE, BOOST_MOVE_TEMPL_PARAM, UNLESS_CONVERTIBLE_TO, TYPE>::type\ PUB_FUNCTION(ARG1 arg1, const BOOST_MOVE_TEMPL_PARAM &u)\ { return FWD_FUNCTION(arg1, u); }\ \ template<class BOOST_MOVE_TEMPL_PARAM>\ - BOOST_MOVE_FORCEINLINE typename boost_move_conversion_aware_catch_1arg_2<RETURN_VALUE, BOOST_MOVE_TEMPL_PARAM, UNLESS_CONVERTIBLE_TO, TYPE>::type\ + inline typename boost_move_conversion_aware_catch_1arg_2<RETURN_VALUE, BOOST_MOVE_TEMPL_PARAM, UNLESS_CONVERTIBLE_TO, TYPE>::type\ PUB_FUNCTION(ARG1 arg1, const BOOST_MOVE_TEMPL_PARAM &u)\ {\ TYPE t((u));\ @@ -222,14 +222,14 @@ #elif (defined(_MSC_VER) && (_MSC_VER == 1600)) #define BOOST_MOVE_CONVERSION_AWARE_CATCH_1ARG(PUB_FUNCTION, TYPE, RETURN_VALUE, FWD_FUNCTION, ARG1, UNLESS_CONVERTIBLE_TO)\ - BOOST_MOVE_FORCEINLINE RETURN_VALUE PUB_FUNCTION(ARG1 arg1, BOOST_MOVE_CATCH_CONST(TYPE) x)\ + inline RETURN_VALUE PUB_FUNCTION(ARG1 arg1, BOOST_MOVE_CATCH_CONST(TYPE) x)\ { return FWD_FUNCTION(arg1, static_cast<const TYPE&>(x)); }\ \ - BOOST_MOVE_FORCEINLINE RETURN_VALUE PUB_FUNCTION(ARG1 arg1, BOOST_MOVE_CATCH_RVALUE(TYPE) x) \ + inline RETURN_VALUE PUB_FUNCTION(ARG1 arg1, BOOST_MOVE_CATCH_RVALUE(TYPE) x) \ { return FWD_FUNCTION(arg1, ::boost::move(x)); }\ \ template<class BOOST_MOVE_TEMPL_PARAM>\ - BOOST_MOVE_FORCEINLINE typename ::boost::move_detail::disable_if_or\ + inline typename ::boost::move_detail::disable_if_or\ < RETURN_VALUE \ , ::boost::move_detail::is_same<TYPE, BOOST_MOVE_TEMPL_PARAM> \ , ::boost::move_detail::is_same_or_convertible<BOOST_MOVE_TEMPL_PARAM, UNLESS_CONVERTIBLE_TO> \ @@ -244,10 +244,10 @@ #else #define BOOST_MOVE_CONVERSION_AWARE_CATCH_1ARG(PUB_FUNCTION, TYPE, RETURN_VALUE, FWD_FUNCTION, ARG1, UNLESS_CONVERTIBLE_TO)\ - BOOST_MOVE_FORCEINLINE RETURN_VALUE PUB_FUNCTION(ARG1 arg1, BOOST_MOVE_CATCH_CONST(TYPE) x)\ + inline RETURN_VALUE PUB_FUNCTION(ARG1 arg1, BOOST_MOVE_CATCH_CONST(TYPE) x)\ { return FWD_FUNCTION(arg1, static_cast<const TYPE&>(x)); }\ \ - BOOST_MOVE_FORCEINLINE RETURN_VALUE PUB_FUNCTION(ARG1 arg1, BOOST_MOVE_CATCH_RVALUE(TYPE) x) \ + inline RETURN_VALUE PUB_FUNCTION(ARG1 arg1, BOOST_MOVE_CATCH_RVALUE(TYPE) x) \ { return FWD_FUNCTION(arg1, ::boost::move(x)); }\ // diff --git a/contrib/restricted/boost/move/include/boost/move/detail/reverse_iterator.hpp b/contrib/restricted/boost/move/include/boost/move/detail/reverse_iterator.hpp index 7fda6edf0d..19fb2877c6 100644 --- a/contrib/restricted/boost/move/include/boost/move/detail/reverse_iterator.hpp +++ b/contrib/restricted/boost/move/include/boost/move/detail/reverse_iterator.hpp @@ -29,7 +29,7 @@ namespace boost { namespace movelib { template<class I> -BOOST_MOVE_FORCEINLINE typename iterator_traits<I>::pointer iterator_arrow_result(const I &i) +inline typename iterator_traits<I>::pointer iterator_arrow_result(const I &i) { return i.operator->(); } template<class T> @@ -49,38 +49,38 @@ class reverse_iterator typedef It iterator_type; - BOOST_MOVE_FORCEINLINE reverse_iterator() + inline reverse_iterator() : m_current() //Value initialization to achieve "null iterators" (N3644) {} - BOOST_MOVE_FORCEINLINE explicit reverse_iterator(It r) + inline explicit reverse_iterator(It r) : m_current(r) {} - BOOST_MOVE_FORCEINLINE reverse_iterator(const reverse_iterator& r) + inline reverse_iterator(const reverse_iterator& r) : m_current(r.base()) {} template<class OtherIt> - BOOST_MOVE_FORCEINLINE + inline reverse_iterator( const reverse_iterator<OtherIt>& r , typename boost::move_detail::enable_if_convertible<OtherIt, It>::type* =0 ) : m_current(r.base()) {} - BOOST_MOVE_FORCEINLINE reverse_iterator & operator=( const reverse_iterator& r) + inline reverse_iterator & operator=( const reverse_iterator& r) { m_current = r.base(); return *this; } template<class OtherIt> - BOOST_MOVE_FORCEINLINE typename boost::move_detail::enable_if_convertible<OtherIt, It, reverse_iterator &>::type + inline typename boost::move_detail::enable_if_convertible<OtherIt, It, reverse_iterator &>::type operator=( const reverse_iterator<OtherIt>& r) { m_current = r.base(); return *this; } - BOOST_MOVE_FORCEINLINE It base() const + inline It base() const { return m_current; } - BOOST_MOVE_FORCEINLINE reference operator*() const + inline reference operator*() const { It temp(m_current); --temp; @@ -88,78 +88,78 @@ class reverse_iterator return r; } - BOOST_MOVE_FORCEINLINE pointer operator->() const + inline pointer operator->() const { It temp(m_current); --temp; return (iterator_arrow_result)(temp); } - BOOST_MOVE_FORCEINLINE reference operator[](difference_type off) const + inline reference operator[](difference_type off) const { return this->m_current[difference_type(-off - 1)]; } - BOOST_MOVE_FORCEINLINE reverse_iterator& operator++() + inline reverse_iterator& operator++() { --m_current; return *this; } - BOOST_MOVE_FORCEINLINE reverse_iterator operator++(int) + inline reverse_iterator operator++(int) { reverse_iterator temp((*this)); --m_current; return temp; } - BOOST_MOVE_FORCEINLINE reverse_iterator& operator--() + inline reverse_iterator& operator--() { ++m_current; return *this; } - BOOST_MOVE_FORCEINLINE reverse_iterator operator--(int) + inline reverse_iterator operator--(int) { reverse_iterator temp((*this)); ++m_current; return temp; } - BOOST_MOVE_FORCEINLINE friend bool operator==(const reverse_iterator& l, const reverse_iterator& r) + inline friend bool operator==(const reverse_iterator& l, const reverse_iterator& r) { return l.m_current == r.m_current; } - BOOST_MOVE_FORCEINLINE friend bool operator!=(const reverse_iterator& l, const reverse_iterator& r) + inline friend bool operator!=(const reverse_iterator& l, const reverse_iterator& r) { return l.m_current != r.m_current; } - BOOST_MOVE_FORCEINLINE friend bool operator<(const reverse_iterator& l, const reverse_iterator& r) + inline friend bool operator<(const reverse_iterator& l, const reverse_iterator& r) { return l.m_current > r.m_current; } - BOOST_MOVE_FORCEINLINE friend bool operator<=(const reverse_iterator& l, const reverse_iterator& r) + inline friend bool operator<=(const reverse_iterator& l, const reverse_iterator& r) { return l.m_current >= r.m_current; } - BOOST_MOVE_FORCEINLINE friend bool operator>(const reverse_iterator& l, const reverse_iterator& r) + inline friend bool operator>(const reverse_iterator& l, const reverse_iterator& r) { return l.m_current < r.m_current; } - BOOST_MOVE_FORCEINLINE friend bool operator>=(const reverse_iterator& l, const reverse_iterator& r) + inline friend bool operator>=(const reverse_iterator& l, const reverse_iterator& r) { return l.m_current <= r.m_current; } - BOOST_MOVE_FORCEINLINE reverse_iterator& operator+=(difference_type off) + inline reverse_iterator& operator+=(difference_type off) { m_current -= off; return *this; } - BOOST_MOVE_FORCEINLINE reverse_iterator& operator-=(difference_type off) + inline reverse_iterator& operator-=(difference_type off) { m_current += off; return *this; } - BOOST_MOVE_FORCEINLINE friend reverse_iterator operator+(reverse_iterator l, difference_type off) + inline friend reverse_iterator operator+(reverse_iterator l, difference_type off) { return (l += off); } - BOOST_MOVE_FORCEINLINE friend reverse_iterator operator+(difference_type off, reverse_iterator r) + inline friend reverse_iterator operator+(difference_type off, reverse_iterator r) { return (r += off); } - BOOST_MOVE_FORCEINLINE friend reverse_iterator operator-(reverse_iterator l, difference_type off) + inline friend reverse_iterator operator-(reverse_iterator l, difference_type off) { return (l-= off); } - BOOST_MOVE_FORCEINLINE friend difference_type operator-(const reverse_iterator& l, const reverse_iterator& r) + inline friend difference_type operator-(const reverse_iterator& l, const reverse_iterator& r) { return r.m_current - l.m_current; } private: @@ -167,7 +167,7 @@ class reverse_iterator }; template< class Iterator > -BOOST_MOVE_FORCEINLINE reverse_iterator<Iterator> make_reverse_iterator( Iterator i ) +inline reverse_iterator<Iterator> make_reverse_iterator( Iterator i ) { return reverse_iterator<Iterator>(i); } } //namespace movelib { diff --git a/contrib/restricted/boost/move/include/boost/move/detail/to_raw_pointer.hpp b/contrib/restricted/boost/move/include/boost/move/detail/to_raw_pointer.hpp index 7e89beb4db..06beb2d42c 100644 --- a/contrib/restricted/boost/move/include/boost/move/detail/to_raw_pointer.hpp +++ b/contrib/restricted/boost/move/include/boost/move/detail/to_raw_pointer.hpp @@ -33,7 +33,7 @@ BOOST_MOVE_FORCEINLINE T* to_raw_pointer(T* p) { return p; } template <class Pointer> -BOOST_MOVE_FORCEINLINE typename boost::movelib::pointer_element<Pointer>::type* +inline typename boost::movelib::pointer_element<Pointer>::type* to_raw_pointer(const Pointer &p) { return ::boost::movelib::to_raw_pointer(p.operator->()); } diff --git a/contrib/restricted/boost/move/include/boost/move/detail/type_traits.hpp b/contrib/restricted/boost/move/include/boost/move/detail/type_traits.hpp index 5a093186cb..84dcbceb73 100644 --- a/contrib/restricted/boost/move/include/boost/move/detail/type_traits.hpp +++ b/contrib/restricted/boost/move/include/boost/move/detail/type_traits.hpp @@ -582,6 +582,28 @@ struct remove_cvref }; ////////////////////////// +// is_unsigned +////////////////////////// +template<class T> struct is_unsigned_cv { static const bool value = true; }; +template <> struct is_unsigned_cv<signed char> { static const bool value = false; }; +template <> struct is_unsigned_cv<signed short> { static const bool value = false; }; +template <> struct is_unsigned_cv<signed int> { static const bool value = false; }; +template <> struct is_unsigned_cv<signed long> { static const bool value = false; }; +#ifdef BOOST_HAS_LONG_LONG +template <> struct is_unsigned_cv< ::boost::long_long_type > { static const bool value = false; }; +#endif + +#ifdef BOOST_HAS_INT128 +template <> struct is_unsigned_cv< ::boost::int128_type > { static const bool value = false; }; +#endif + +template <class T> +struct is_unsigned + : is_unsigned_cv<typename remove_cv<T>::type> +{}; + + +////////////////////////// // make_unsigned ////////////////////////// template <class T> @@ -594,6 +616,11 @@ template <> struct make_unsigned_impl<signed long> { typedef uns template <> struct make_unsigned_impl< ::boost::long_long_type > { typedef ::boost::ulong_long_type type; }; #endif +#ifdef BOOST_HAS_INT128 +template <> struct make_unsigned_impl< ::boost::int128_type > { typedef ::boost::uint128_type type; }; +#endif + + template <class T> struct make_unsigned : make_unsigned_impl<typename remove_cv<T>::type> @@ -639,6 +666,13 @@ template<> struct is_integral_cv< unsigned long>{ static const bool template<> struct is_integral_cv< ::boost:: long_long_type>{ static const bool value = true; }; template<> struct is_integral_cv< ::boost::ulong_long_type>{ static const bool value = true; }; #endif +#ifdef BOOST_HAS_INT128 +template <> struct is_integral_cv< ::boost::int128_type > { static const bool value = true; }; +template <> struct is_integral_cv< ::boost::uint128_type > { static const bool value = true; }; +#endif +#if defined(__cpp_char8_t) && __cpp_char8_t >= 201811L +template<> struct is_integral_cv<char8_t> { static const bool value = true; }; +#endif template<class T> struct is_integral @@ -661,13 +695,6 @@ struct remove_all_extents<T[N]> { typedef typename remove_all_extents<T>::type type;}; ////////////////////////// -// is_scalar -////////////////////////// -template<class T> -struct is_scalar -{ static const bool value = is_integral<T>::value || is_floating_point<T>::value; }; - -////////////////////////// // is_void ////////////////////////// template<class T> @@ -732,6 +759,11 @@ struct is_nullptr_t : is_nullptr_t_cv<typename remove_cv<T>::type> {}; +template <class T> +struct is_null_pointer + : is_nullptr_t_cv<typename remove_cv<T>::type> +{}; + ////////////////////////////////////// // is_function ////////////////////////////////////// @@ -802,6 +834,7 @@ struct is_arithmetic is_integral<T>::value; }; + ////////////////////////////////////// // is_member_function_pointer ////////////////////////////////////// @@ -829,21 +862,38 @@ struct is_member_function_pointer template <class T> struct is_enum_nonintrinsic { - static const bool value = !is_arithmetic<T>::value && - !is_reference<T>::value && - !is_class_or_union<T>::value && - !is_array<T>::value && - !is_void<T>::value && - !is_nullptr_t<T>::value && - !is_member_pointer<T>::value && - !is_pointer<T>::value && - !is_function<T>::value; + static const bool value = !is_arithmetic<T>::value && + !is_reference<T>::value && + !is_class_or_union<T>::value && + !is_array<T>::value && + !is_void<T>::value && + !is_nullptr_t<T>::value && + !is_member_pointer<T>::value && + !is_pointer<T>::value && + !is_function<T>::value; }; #endif template <class T> struct is_enum -{ static const bool value = BOOST_MOVE_IS_ENUM_IMPL(T); }; +{ + static const bool value = BOOST_MOVE_IS_ENUM_IMPL(T); +}; + + +////////////////////////// +// is_scalar +////////////////////////// +template<class T> +struct is_scalar +{ + static const bool value = is_arithmetic<T>::value || + is_enum<T>::value || + is_pointer<T>::value || + is_member_pointer<T>::value || + is_null_pointer<T>::value; +}; + ////////////////////////////////////// // is_pod diff --git a/contrib/restricted/boost/move/include/boost/move/detail/workaround.hpp b/contrib/restricted/boost/move/include/boost/move/detail/workaround.hpp index 2fcd027d8d..5edfcee1f2 100644 --- a/contrib/restricted/boost/move/include/boost/move/detail/workaround.hpp +++ b/contrib/restricted/boost/move/include/boost/move/detail/workaround.hpp @@ -61,8 +61,11 @@ #elif defined(BOOST_MSVC) && (_MSC_VER < 1900 || defined(_DEBUG)) //"__forceinline" and MSVC seems to have some bugs in old versions and in debug mode #define BOOST_MOVE_FORCEINLINE inline -#elif defined(BOOST_GCC) && (__GNUC__ <= 5) +#elif defined(BOOST_CLANG) || (defined(BOOST_GCC) && ((__GNUC__ <= 5) || defined(__MINGW32__))) //Older GCCs have problems with forceinline + //Clang can have code bloat issues with forceinline, see + //https://lists.boost.org/boost-users/2023/04/91445.php and + //https://github.com/llvm/llvm-project/issues/62202 #define BOOST_MOVE_FORCEINLINE inline #else #define BOOST_MOVE_FORCEINLINE BOOST_FORCEINLINE @@ -126,7 +129,7 @@ template<unsigned> struct static_assert_test {}; #define BOOST_MOVE_STATIC_ASSERT(B) \ typedef ::boost::move_detail::static_assert_test<\ (unsigned)sizeof(::boost::move_detail::STATIC_ASSERTION_FAILURE<bool(B)>)>\ - BOOST_JOIN(boost_static_assert_typedef_, __LINE__) BOOST_ATTRIBUTE_UNUSED + BOOST_JOIN(boost_move_static_assert_typedef_, __LINE__) BOOST_ATTRIBUTE_UNUSED #endif diff --git a/contrib/restricted/boost/move/include/boost/move/iterator.hpp b/contrib/restricted/boost/move/include/boost/move/iterator.hpp index c289c08364..7d1636e050 100644 --- a/contrib/restricted/boost/move/include/boost/move/iterator.hpp +++ b/contrib/restricted/boost/move/include/boost/move/iterator.hpp @@ -58,20 +58,20 @@ class move_iterator typedef typename boost::movelib::iterator_traits<iterator_type>::difference_type difference_type; typedef typename boost::movelib::iterator_traits<iterator_type>::iterator_category iterator_category; - BOOST_MOVE_FORCEINLINE move_iterator() + inline move_iterator() : m_it() {} - BOOST_MOVE_FORCEINLINE explicit move_iterator(const It &i) + inline explicit move_iterator(const It &i) : m_it(i) {} template <class U> - BOOST_MOVE_FORCEINLINE move_iterator(const move_iterator<U>& u) + inline move_iterator(const move_iterator<U>& u) : m_it(u.m_it) {} - BOOST_MOVE_FORCEINLINE reference operator*() const + inline reference operator*() const { #if defined(BOOST_NO_CXX11_RVALUE_REFERENCES) || defined(BOOST_MOVE_OLD_RVALUE_REF_BINDING_RULES) return *m_it; @@ -80,34 +80,34 @@ class move_iterator #endif } - BOOST_MOVE_FORCEINLINE pointer operator->() const + inline pointer operator->() const { return m_it; } - BOOST_MOVE_FORCEINLINE move_iterator& operator++() + inline move_iterator& operator++() { ++m_it; return *this; } - BOOST_MOVE_FORCEINLINE move_iterator<iterator_type> operator++(int) + inline move_iterator<iterator_type> operator++(int) { move_iterator<iterator_type> tmp(*this); ++(*this); return tmp; } - BOOST_MOVE_FORCEINLINE move_iterator& operator--() + inline move_iterator& operator--() { --m_it; return *this; } - BOOST_MOVE_FORCEINLINE move_iterator<iterator_type> operator--(int) + inline move_iterator<iterator_type> operator--(int) { move_iterator<iterator_type> tmp(*this); --(*this); return tmp; } move_iterator<iterator_type> operator+ (difference_type n) const { return move_iterator<iterator_type>(m_it + n); } - BOOST_MOVE_FORCEINLINE move_iterator& operator+=(difference_type n) + inline move_iterator& operator+=(difference_type n) { m_it += n; return *this; } - BOOST_MOVE_FORCEINLINE move_iterator<iterator_type> operator- (difference_type n) const + inline move_iterator<iterator_type> operator- (difference_type n) const { return move_iterator<iterator_type>(m_it - n); } - BOOST_MOVE_FORCEINLINE move_iterator& operator-=(difference_type n) + inline move_iterator& operator-=(difference_type n) { m_it -= n; return *this; } - BOOST_MOVE_FORCEINLINE reference operator[](difference_type n) const + inline reference operator[](difference_type n) const { #if defined(BOOST_NO_CXX11_RVALUE_REFERENCES) || defined(BOOST_MOVE_OLD_RVALUE_REF_BINDING_RULES) return m_it[n]; @@ -116,28 +116,28 @@ class move_iterator #endif } - BOOST_MOVE_FORCEINLINE friend bool operator==(const move_iterator& x, const move_iterator& y) + inline friend bool operator==(const move_iterator& x, const move_iterator& y) { return x.m_it == y.m_it; } - BOOST_MOVE_FORCEINLINE friend bool operator!=(const move_iterator& x, const move_iterator& y) + inline friend bool operator!=(const move_iterator& x, const move_iterator& y) { return x.m_it != y.m_it; } - BOOST_MOVE_FORCEINLINE friend bool operator< (const move_iterator& x, const move_iterator& y) + inline friend bool operator< (const move_iterator& x, const move_iterator& y) { return x.m_it < y.m_it; } - BOOST_MOVE_FORCEINLINE friend bool operator<=(const move_iterator& x, const move_iterator& y) + inline friend bool operator<=(const move_iterator& x, const move_iterator& y) { return x.m_it <= y.m_it; } - BOOST_MOVE_FORCEINLINE friend bool operator> (const move_iterator& x, const move_iterator& y) + inline friend bool operator> (const move_iterator& x, const move_iterator& y) { return x.m_it > y.m_it; } - BOOST_MOVE_FORCEINLINE friend bool operator>=(const move_iterator& x, const move_iterator& y) + inline friend bool operator>=(const move_iterator& x, const move_iterator& y) { return x.m_it >= y.m_it; } - BOOST_MOVE_FORCEINLINE friend difference_type operator-(const move_iterator& x, const move_iterator& y) + inline friend difference_type operator-(const move_iterator& x, const move_iterator& y) { return x.m_it - y.m_it; } - BOOST_MOVE_FORCEINLINE friend move_iterator operator+(difference_type n, const move_iterator& x) + inline friend move_iterator operator+(difference_type n, const move_iterator& x) { return move_iterator(x.m_it + n); } private: @@ -170,7 +170,7 @@ struct is_move_iterator< ::boost::move_iterator<I> > //! //! <b>Returns</b>: move_iterator<It>(i). template<class It> -BOOST_MOVE_FORCEINLINE move_iterator<It> make_move_iterator(const It &it) +inline move_iterator<It> make_move_iterator(const It &it) { return move_iterator<It>(it); } ////////////////////////////////////////////////////////////////////////////// diff --git a/contrib/restricted/boost/move/include/boost/move/unique_ptr.hpp b/contrib/restricted/boost/move/include/boost/move/unique_ptr.hpp index 2102872285..6a9bb67a94 100644 --- a/contrib/restricted/boost/move/include/boost/move/unique_ptr.hpp +++ b/contrib/restricted/boost/move/include/boost/move/unique_ptr.hpp @@ -92,25 +92,25 @@ struct unique_ptr_data typedef typename deleter_types<D>::del_ref del_ref; typedef typename deleter_types<D>::del_cref del_cref; - BOOST_MOVE_FORCEINLINE unique_ptr_data() BOOST_NOEXCEPT + inline unique_ptr_data() BOOST_NOEXCEPT : m_p(), d() {} - BOOST_MOVE_FORCEINLINE explicit unique_ptr_data(P p) BOOST_NOEXCEPT + inline explicit unique_ptr_data(P p) BOOST_NOEXCEPT : m_p(p), d() {} - BOOST_MOVE_FORCEINLINE unique_ptr_data(P p, deleter_arg_type1 d1) BOOST_NOEXCEPT + inline unique_ptr_data(P p, deleter_arg_type1 d1) BOOST_NOEXCEPT : m_p(p), d(d1) {} template <class U> - BOOST_MOVE_FORCEINLINE unique_ptr_data(P p, BOOST_FWD_REF(U) d1) BOOST_NOEXCEPT + inline unique_ptr_data(P p, BOOST_FWD_REF(U) d1) BOOST_NOEXCEPT : m_p(p), d(::boost::forward<U>(d1)) {} - BOOST_MOVE_FORCEINLINE del_ref deleter() { return d; } - BOOST_MOVE_FORCEINLINE del_cref deleter() const{ return d; } + inline del_ref deleter() { return d; } + inline del_cref deleter() const{ return d; } P m_p; D d; @@ -128,25 +128,25 @@ struct unique_ptr_data<P, D, false> typedef typename deleter_types<D>::del_ref del_ref; typedef typename deleter_types<D>::del_cref del_cref; - BOOST_MOVE_FORCEINLINE unique_ptr_data() BOOST_NOEXCEPT + inline unique_ptr_data() BOOST_NOEXCEPT : D(), m_p() {} - BOOST_MOVE_FORCEINLINE explicit unique_ptr_data(P p) BOOST_NOEXCEPT + inline explicit unique_ptr_data(P p) BOOST_NOEXCEPT : D(), m_p(p) {} - BOOST_MOVE_FORCEINLINE unique_ptr_data(P p, deleter_arg_type1 d1) BOOST_NOEXCEPT + inline unique_ptr_data(P p, deleter_arg_type1 d1) BOOST_NOEXCEPT : D(d1), m_p(p) {} template <class U> - BOOST_MOVE_FORCEINLINE unique_ptr_data(P p, BOOST_FWD_REF(U) d) BOOST_NOEXCEPT + inline unique_ptr_data(P p, BOOST_FWD_REF(U) d) BOOST_NOEXCEPT : D(::boost::forward<U>(d)), m_p(p) {} - BOOST_MOVE_FORCEINLINE del_ref deleter() BOOST_NOEXCEPT { return static_cast<del_ref>(*this); } - BOOST_MOVE_FORCEINLINE del_cref deleter() const BOOST_NOEXCEPT { return static_cast<del_cref>(*this); } + inline del_ref deleter() BOOST_NOEXCEPT { return static_cast<del_ref>(*this); } + inline del_cref deleter() const BOOST_NOEXCEPT { return static_cast<del_cref>(*this); } P m_p; @@ -388,7 +388,7 @@ class unique_ptr //! //! <b>Remarks</b>: If this constructor is instantiated with a pointer type or reference type //! for the template argument D, the program is ill-formed. - BOOST_MOVE_FORCEINLINE BOOST_CONSTEXPR unique_ptr() BOOST_NOEXCEPT + inline BOOST_CONSTEXPR unique_ptr() BOOST_NOEXCEPT : m_data() { //If this constructor is instantiated with a pointer type or reference type @@ -399,7 +399,7 @@ class unique_ptr //! <b>Effects</b>: Same as <tt>unique_ptr()</tt> (default constructor). //! - BOOST_MOVE_FORCEINLINE BOOST_CONSTEXPR unique_ptr(BOOST_MOVE_DOC0PTR(bmupd::nullptr_type)) BOOST_NOEXCEPT + inline BOOST_CONSTEXPR unique_ptr(BOOST_MOVE_DOC0PTR(bmupd::nullptr_type)) BOOST_NOEXCEPT : m_data() { //If this constructor is instantiated with a pointer type or reference type @@ -422,7 +422,7 @@ class unique_ptr //! - If T is not an array type and Pointer is implicitly convertible to pointer. //! - If T is an array type and Pointer is a more CV qualified pointer to element_type. template<class Pointer> - BOOST_MOVE_FORCEINLINE explicit unique_ptr(Pointer p + inline explicit unique_ptr(Pointer p BOOST_MOVE_DOCIGN(BOOST_MOVE_I typename bmupd::enable_up_ptr<T BOOST_MOVE_I Pointer BOOST_MOVE_I pointer>::type* =0) ) BOOST_NOEXCEPT : m_data(p) @@ -460,7 +460,7 @@ class unique_ptr //! - If T is not an array type and Pointer is implicitly convertible to pointer. //! - If T is an array type and Pointer is a more CV qualified pointer to element_type. template<class Pointer> - BOOST_MOVE_FORCEINLINE unique_ptr(Pointer p, BOOST_MOVE_SEEDOC(deleter_arg_type1) d1 + inline unique_ptr(Pointer p, BOOST_MOVE_SEEDOC(deleter_arg_type1) d1 BOOST_MOVE_DOCIGN(BOOST_MOVE_I typename bmupd::enable_up_ptr<T BOOST_MOVE_I Pointer BOOST_MOVE_I pointer>::type* =0) ) BOOST_NOEXCEPT : m_data(p, d1) @@ -473,7 +473,7 @@ class unique_ptr //! <b>Effects</b>: Same effects as <tt>template<class Pointer> unique_ptr(Pointer p, deleter_arg_type1 d1)</tt> //! and additionally <tt>get() == nullptr</tt> - BOOST_MOVE_FORCEINLINE unique_ptr(BOOST_MOVE_DOC0PTR(bmupd::nullptr_type), BOOST_MOVE_SEEDOC(deleter_arg_type1) d1) BOOST_NOEXCEPT + inline unique_ptr(BOOST_MOVE_DOC0PTR(bmupd::nullptr_type), BOOST_MOVE_SEEDOC(deleter_arg_type1) d1) BOOST_NOEXCEPT : m_data(pointer(), d1) {} @@ -498,7 +498,7 @@ class unique_ptr //! - If T is not an array type and Pointer is implicitly convertible to pointer. //! - If T is an array type and Pointer is a more CV qualified pointer to element_type. template<class Pointer> - BOOST_MOVE_FORCEINLINE unique_ptr(Pointer p, BOOST_MOVE_SEEDOC(deleter_arg_type2) d2 + inline unique_ptr(Pointer p, BOOST_MOVE_SEEDOC(deleter_arg_type2) d2 BOOST_MOVE_DOCIGN(BOOST_MOVE_I typename bmupd::enable_up_ptr<T BOOST_MOVE_I Pointer BOOST_MOVE_I pointer>::type* =0) ) BOOST_NOEXCEPT : m_data(p, ::boost::move(d2)) @@ -511,7 +511,7 @@ class unique_ptr //! <b>Effects</b>: Same effects as <tt>template<class Pointer> unique_ptr(Pointer p, deleter_arg_type2 d2)</tt> //! and additionally <tt>get() == nullptr</tt> - BOOST_MOVE_FORCEINLINE unique_ptr(BOOST_MOVE_DOC0PTR(bmupd::nullptr_type), BOOST_MOVE_SEEDOC(deleter_arg_type2) d2) BOOST_NOEXCEPT + inline unique_ptr(BOOST_MOVE_DOC0PTR(bmupd::nullptr_type), BOOST_MOVE_SEEDOC(deleter_arg_type2) d2) BOOST_NOEXCEPT : m_data(pointer(), ::boost::move(d2)) {} @@ -525,7 +525,7 @@ class unique_ptr //! <b>Postconditions</b>: <tt>get()</tt> yields the value u.get() yielded before the construction. <tt>get_deleter()</tt> //! returns a reference to the stored deleter that was constructed from u.get_deleter(). If D is a //! reference type then <tt>get_deleter()</tt> and <tt>u.get_deleter()</tt> both reference the same lvalue deleter. - BOOST_MOVE_FORCEINLINE unique_ptr(BOOST_RV_REF(unique_ptr) u) BOOST_NOEXCEPT + inline unique_ptr(BOOST_RV_REF(unique_ptr) u) BOOST_NOEXCEPT : m_data(u.release(), ::boost::move_if_not_lvalue_reference<D>(u.get_deleter())) {} @@ -545,7 +545,7 @@ class unique_ptr //! <b>Postconditions</b>: <tt>get()</tt> yields the value <tt>u.get()</tt> yielded before the construction. <tt>get_deleter()</tt> //! returns a reference to the stored deleter that was constructed from <tt>u.get_deleter()</tt>. template <class U, class E> - BOOST_MOVE_FORCEINLINE unique_ptr( BOOST_RV_REF_BEG_IF_CXX11 unique_ptr<U, E> BOOST_RV_REF_END_IF_CXX11 u + inline unique_ptr( BOOST_RV_REF_BEG_IF_CXX11 unique_ptr<U, E> BOOST_RV_REF_END_IF_CXX11 u BOOST_MOVE_DOCIGN(BOOST_MOVE_I typename bmupd::enable_up_moveconv_constr<T BOOST_MOVE_I D BOOST_MOVE_I U BOOST_MOVE_I E>::type* =0) ) BOOST_NOEXCEPT : m_data(u.release(), ::boost::move_if_not_lvalue_reference<E>(u.get_deleter())) @@ -628,7 +628,7 @@ class unique_ptr //! <b>Returns</b>: <tt>get()[i]</tt>. //! //! <b>Remarks</b: If T is not an array type, the program is ill-formed. - BOOST_MOVE_FORCEINLINE BOOST_MOVE_DOC1ST(element_type&, typename bmupmu::add_lvalue_reference<element_type>::type) + inline BOOST_MOVE_DOC1ST(element_type&, typename bmupmu::add_lvalue_reference<element_type>::type) operator[](std::size_t i) const BOOST_NOEXCEPT { assert( bmupmu::extent<T>::value == 0 || i < bmupmu::extent<T>::value ); @@ -643,7 +643,7 @@ class unique_ptr //! <b>Note</b>: use typically requires that T be a complete type. //! //! <b>Remarks</b: If T is an array type, the program is ill-formed. - BOOST_MOVE_FORCEINLINE pointer operator->() const BOOST_NOEXCEPT + inline pointer operator->() const BOOST_NOEXCEPT { BOOST_MOVE_STATIC_ASSERT((!bmupmu::is_array<T>::value)); assert(m_data.m_p); @@ -652,27 +652,27 @@ class unique_ptr //! <b>Returns</b>: The stored pointer. //! - BOOST_MOVE_FORCEINLINE pointer get() const BOOST_NOEXCEPT + inline pointer get() const BOOST_NOEXCEPT { return m_data.m_p; } //! <b>Returns</b>: A reference to the stored deleter. //! - BOOST_MOVE_FORCEINLINE BOOST_MOVE_DOC1ST(D&, typename bmupmu::add_lvalue_reference<D>::type) + inline BOOST_MOVE_DOC1ST(D&, typename bmupmu::add_lvalue_reference<D>::type) get_deleter() BOOST_NOEXCEPT { return m_data.deleter(); } //! <b>Returns</b>: A reference to the stored deleter. //! - BOOST_MOVE_FORCEINLINE BOOST_MOVE_DOC1ST(const D&, typename bmupmu::add_const_lvalue_reference<D>::type) + inline BOOST_MOVE_DOC1ST(const D&, typename bmupmu::add_const_lvalue_reference<D>::type) get_deleter() const BOOST_NOEXCEPT { return m_data.deleter(); } #ifdef BOOST_MOVE_DOXYGEN_INVOKED //! <b>Returns</b>: Returns: get() != nullptr. //! - BOOST_MOVE_FORCEINLINE explicit operator bool + inline explicit operator bool #else - BOOST_MOVE_FORCEINLINE operator bmupd::explicit_bool_arg + inline operator bmupd::explicit_bool_arg #endif ()const BOOST_NOEXCEPT { @@ -684,7 +684,7 @@ class unique_ptr //! <b>Postcondition</b>: <tt>get() == nullptr</tt>. //! //! <b>Returns</b>: The value <tt>get()</tt> had at the start of the call to release. - BOOST_MOVE_FORCEINLINE pointer release() BOOST_NOEXCEPT + inline pointer release() BOOST_NOEXCEPT { const pointer tmp = m_data.m_p; m_data.m_p = pointer(); @@ -747,19 +747,19 @@ class unique_ptr //! <b>Effects</b>: Calls <tt>x.swap(y)</tt>. //! template <class T, class D> -BOOST_MOVE_FORCEINLINE void swap(unique_ptr<T, D> &x, unique_ptr<T, D> &y) BOOST_NOEXCEPT +inline void swap(unique_ptr<T, D> &x, unique_ptr<T, D> &y) BOOST_NOEXCEPT { x.swap(y); } //! <b>Returns</b>: <tt>x.get() == y.get()</tt>. //! template <class T1, class D1, class T2, class D2> -BOOST_MOVE_FORCEINLINE bool operator==(const unique_ptr<T1, D1> &x, const unique_ptr<T2, D2> &y) +inline bool operator==(const unique_ptr<T1, D1> &x, const unique_ptr<T2, D2> &y) { return x.get() == y.get(); } //! <b>Returns</b>: <tt>x.get() != y.get()</tt>. //! template <class T1, class D1, class T2, class D2> -BOOST_MOVE_FORCEINLINE bool operator!=(const unique_ptr<T1, D1> &x, const unique_ptr<T2, D2> &y) +inline bool operator!=(const unique_ptr<T1, D1> &x, const unique_ptr<T2, D2> &y) { return x.get() != y.get(); } //! <b>Returns</b>: x.get() < y.get(). @@ -767,99 +767,99 @@ BOOST_MOVE_FORCEINLINE bool operator!=(const unique_ptr<T1, D1> &x, const unique //! <b>Remarks</b>: This comparison shall induce a //! strict weak ordering betwen pointers. template <class T1, class D1, class T2, class D2> -BOOST_MOVE_FORCEINLINE bool operator<(const unique_ptr<T1, D1> &x, const unique_ptr<T2, D2> &y) +inline bool operator<(const unique_ptr<T1, D1> &x, const unique_ptr<T2, D2> &y) { return x.get() < y.get(); } //! <b>Returns</b>: !(y < x). //! template <class T1, class D1, class T2, class D2> -BOOST_MOVE_FORCEINLINE bool operator<=(const unique_ptr<T1, D1> &x, const unique_ptr<T2, D2> &y) +inline bool operator<=(const unique_ptr<T1, D1> &x, const unique_ptr<T2, D2> &y) { return !(y < x); } //! <b>Returns</b>: y < x. //! template <class T1, class D1, class T2, class D2> -BOOST_MOVE_FORCEINLINE bool operator>(const unique_ptr<T1, D1> &x, const unique_ptr<T2, D2> &y) +inline bool operator>(const unique_ptr<T1, D1> &x, const unique_ptr<T2, D2> &y) { return y < x; } //! <b>Returns</b>:!(x < y). //! template <class T1, class D1, class T2, class D2> -BOOST_MOVE_FORCEINLINE bool operator>=(const unique_ptr<T1, D1> &x, const unique_ptr<T2, D2> &y) +inline bool operator>=(const unique_ptr<T1, D1> &x, const unique_ptr<T2, D2> &y) { return !(x < y); } //! <b>Returns</b>:!x. //! template <class T, class D> -BOOST_MOVE_FORCEINLINE bool operator==(const unique_ptr<T, D> &x, BOOST_MOVE_DOC0PTR(bmupd::nullptr_type)) BOOST_NOEXCEPT +inline bool operator==(const unique_ptr<T, D> &x, BOOST_MOVE_DOC0PTR(bmupd::nullptr_type)) BOOST_NOEXCEPT { return !x; } //! <b>Returns</b>:!x. //! template <class T, class D> -BOOST_MOVE_FORCEINLINE bool operator==(BOOST_MOVE_DOC0PTR(bmupd::nullptr_type), const unique_ptr<T, D> &x) BOOST_NOEXCEPT +inline bool operator==(BOOST_MOVE_DOC0PTR(bmupd::nullptr_type), const unique_ptr<T, D> &x) BOOST_NOEXCEPT { return !x; } //! <b>Returns</b>: (bool)x. //! template <class T, class D> -BOOST_MOVE_FORCEINLINE bool operator!=(const unique_ptr<T, D> &x, BOOST_MOVE_DOC0PTR(bmupd::nullptr_type)) BOOST_NOEXCEPT +inline bool operator!=(const unique_ptr<T, D> &x, BOOST_MOVE_DOC0PTR(bmupd::nullptr_type)) BOOST_NOEXCEPT { return !!x; } //! <b>Returns</b>: (bool)x. //! template <class T, class D> -BOOST_MOVE_FORCEINLINE bool operator!=(BOOST_MOVE_DOC0PTR(bmupd::nullptr_type), const unique_ptr<T, D> &x) BOOST_NOEXCEPT +inline bool operator!=(BOOST_MOVE_DOC0PTR(bmupd::nullptr_type), const unique_ptr<T, D> &x) BOOST_NOEXCEPT { return !!x; } //! <b>Requires</b>: <tt>operator </tt> shall induce a strict weak ordering on unique_ptr<T, D>::pointer values. //! //! <b>Returns</b>: Returns <tt>x.get() < pointer()</tt>. template <class T, class D> -BOOST_MOVE_FORCEINLINE bool operator<(const unique_ptr<T, D> &x, BOOST_MOVE_DOC0PTR(bmupd::nullptr_type)) +inline bool operator<(const unique_ptr<T, D> &x, BOOST_MOVE_DOC0PTR(bmupd::nullptr_type)) { return x.get() < typename unique_ptr<T, D>::pointer(); } //! <b>Requires</b>: <tt>operator </tt> shall induce a strict weak ordering on unique_ptr<T, D>::pointer values. //! //! <b>Returns</b>: Returns <tt>pointer() < x.get()</tt>. template <class T, class D> -BOOST_MOVE_FORCEINLINE bool operator<(BOOST_MOVE_DOC0PTR(bmupd::nullptr_type), const unique_ptr<T, D> &x) +inline bool operator<(BOOST_MOVE_DOC0PTR(bmupd::nullptr_type), const unique_ptr<T, D> &x) { return typename unique_ptr<T, D>::pointer() < x.get(); } //! <b>Returns</b>: <tt>nullptr < x</tt>. //! template <class T, class D> -BOOST_MOVE_FORCEINLINE bool operator>(const unique_ptr<T, D> &x, BOOST_MOVE_DOC0PTR(bmupd::nullptr_type)) +inline bool operator>(const unique_ptr<T, D> &x, BOOST_MOVE_DOC0PTR(bmupd::nullptr_type)) { return x.get() > typename unique_ptr<T, D>::pointer(); } //! <b>Returns</b>: <tt>x < nullptr</tt>. //! template <class T, class D> -BOOST_MOVE_FORCEINLINE bool operator>(BOOST_MOVE_DOC0PTR(bmupd::nullptr_type), const unique_ptr<T, D> &x) +inline bool operator>(BOOST_MOVE_DOC0PTR(bmupd::nullptr_type), const unique_ptr<T, D> &x) { return typename unique_ptr<T, D>::pointer() > x.get(); } //! <b>Returns</b>: <tt>!(nullptr < x)</tt>. //! template <class T, class D> -BOOST_MOVE_FORCEINLINE bool operator<=(const unique_ptr<T, D> &x, BOOST_MOVE_DOC0PTR(bmupd::nullptr_type)) +inline bool operator<=(const unique_ptr<T, D> &x, BOOST_MOVE_DOC0PTR(bmupd::nullptr_type)) { return !(bmupd::nullptr_type() < x); } //! <b>Returns</b>: <tt>!(x < nullptr)</tt>. //! template <class T, class D> -BOOST_MOVE_FORCEINLINE bool operator<=(BOOST_MOVE_DOC0PTR(bmupd::nullptr_type), const unique_ptr<T, D> &x) +inline bool operator<=(BOOST_MOVE_DOC0PTR(bmupd::nullptr_type), const unique_ptr<T, D> &x) { return !(x < bmupd::nullptr_type()); } //! <b>Returns</b>: <tt>!(x < nullptr)</tt>. //! template <class T, class D> -BOOST_MOVE_FORCEINLINE bool operator>=(const unique_ptr<T, D> &x, BOOST_MOVE_DOC0PTR(bmupd::nullptr_type)) +inline bool operator>=(const unique_ptr<T, D> &x, BOOST_MOVE_DOC0PTR(bmupd::nullptr_type)) { return !(x < bmupd::nullptr_type()); } //! <b>Returns</b>: <tt>!(nullptr < x)</tt>. //! template <class T, class D> -BOOST_MOVE_FORCEINLINE bool operator>=(BOOST_MOVE_DOC0PTR(bmupd::nullptr_type), const unique_ptr<T, D> &x) +inline bool operator>=(BOOST_MOVE_DOC0PTR(bmupd::nullptr_type), const unique_ptr<T, D> &x) { return !(bmupd::nullptr_type() < x); } } //namespace movelib { diff --git a/contrib/restricted/boost/move/ya.make b/contrib/restricted/boost/move/ya.make index 1612adde42..a78230607b 100644 --- a/contrib/restricted/boost/move/ya.make +++ b/contrib/restricted/boost/move/ya.make @@ -9,9 +9,9 @@ LICENSE( LICENSE_TEXTS(.yandex_meta/licenses.list.txt) -VERSION(1.84.0) +VERSION(1.85.0) -ORIGINAL_SOURCE(https://github.com/boostorg/move/archive/boost-1.84.0.tar.gz) +ORIGINAL_SOURCE(https://github.com/boostorg/move/archive/boost-1.85.0.tar.gz) PEERDIR( contrib/restricted/boost/config diff --git a/contrib/restricted/boost/mp11/include/boost/mp11/algorithm.hpp b/contrib/restricted/boost/mp11/include/boost/mp11/algorithm.hpp index be377f5a6c..8f802440ae 100644 --- a/contrib/restricted/boost/mp11/include/boost/mp11/algorithm.hpp +++ b/contrib/restricted/boost/mp11/include/boost/mp11/algorithm.hpp @@ -26,6 +26,11 @@ #include <type_traits> #include <utility> +#if defined(_MSC_VER) || defined(__GNUC__) +# pragma push_macro( "I" ) +# undef I +#endif + namespace boost { namespace mp11 @@ -84,6 +89,25 @@ template<template<class...> class F, template<class...> class L1, class... T1, t #endif }; +#if defined(BOOST_MP11_HAS_TEMPLATE_AUTO) + +template<template<class...> class F, template<auto...> class L, auto... A> struct mp_transform_impl<F, L<A...>> +{ + using type = L< F< mp_value<A> >::value... >; +}; + +template<template<class...> class F, template<auto...> class L1, auto... A1, template<auto...> class L2, auto... A2> struct mp_transform_impl<F, L1<A1...>, L2<A2...>> +{ + using type = L1< F< mp_value<A1>, mp_value<A2> >::value... >; +}; + +template<template<class...> class F, template<auto...> class L1, auto... A1, template<auto...> class L2, auto... A2, template<auto...> class L3, auto... A3> struct mp_transform_impl<F, L1<A1...>, L2<A2...>, L3<A3...>> +{ + using type = L1< F< mp_value<A1>, mp_value<A2>, mp_value<A3> >::value... >; +}; + +#endif + #if BOOST_MP11_WORKAROUND( BOOST_MP11_MSVC, == 1900 ) || BOOST_MP11_WORKAROUND( BOOST_MP11_GCC, < 40800 ) template<class... L> using mp_same_size_1 = mp_same<mp_size<L>...>; @@ -473,6 +497,10 @@ struct mp_take_c_impl<N, L<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T...>, typen template<class L, std::size_t N> using mp_take_c = mp_assign<L, typename detail::mp_take_c_impl<N, mp_rename<L, mp_list>>::type>; template<class L, class N> using mp_take = mp_take_c<L, std::size_t{ N::value }>; +// mp_slice(_c)<L, I, J> +template<class L, std::size_t I, std::size_t J> using mp_slice_c = mp_drop_c< mp_take_c<L, J>, I >; +template<class L, class I, class J> using mp_slice = mp_drop< mp_take<L, J>, I >; + // mp_back<L> template<class L> using mp_back = mp_at_c<L, mp_size<L>::value - 1>; @@ -1261,6 +1289,33 @@ template<class L, class Q> using mp_pairwise_fold_impl = mp_transform_q<Q, mp_po template<class L, class Q> using mp_pairwise_fold_q = mp_eval_if<mp_empty<L>, mp_clear<L>, detail::mp_pairwise_fold_impl, L, Q>; template<class L, template<class...> class F> using mp_pairwise_fold = mp_pairwise_fold_q<L, mp_quote<F>>; +// mp_sliding_fold<L, N, F> +namespace detail +{ + +template<class C, class L, class Q, class S> struct mp_sliding_fold_impl; + +template<class L, class N, class Q> struct mp_sliding_fold_impl<mp_true, L, N, Q> +{ + static const std::size_t M = mp_size<L>::value - N::value + 1; + + template<class I> using F = mp_slice_c<L, I::value, I::value + M>; + + using J = mp_transform<F, mp_iota<N>>; + + using type = mp_apply<mp_transform_q, mp_push_front<J, Q>>; +}; + +template<class L, class N, class Q> struct mp_sliding_fold_impl<mp_false, L, N, Q> +{ + using type = mp_clear<L>; +}; + +} // namespace detail + +template<class L, class N, class Q> using mp_sliding_fold_q = typename detail::mp_sliding_fold_impl<mp_bool<(mp_size<L>::value >= N::value)>, L, N, Q>::type; +template<class L, class N, template<class...> class F> using mp_sliding_fold = mp_sliding_fold_q<L, N, mp_quote<F>>; + // mp_intersperse<L, S> namespace detail { @@ -1324,4 +1379,8 @@ template<class L, class S> using mp_join = mp_apply<mp_append, mp_intersperse<L, } // namespace mp11 } // namespace boost +#if defined(_MSC_VER) || defined(__GNUC__) +# pragma pop_macro( "I" ) +#endif + #endif // #ifndef BOOST_MP11_ALGORITHM_HPP_INCLUDED diff --git a/contrib/restricted/boost/mp11/include/boost/mp11/bind.hpp b/contrib/restricted/boost/mp11/include/boost/mp11/bind.hpp index bbdecd2208..289b073f6a 100644 --- a/contrib/restricted/boost/mp11/include/boost/mp11/bind.hpp +++ b/contrib/restricted/boost/mp11/include/boost/mp11/bind.hpp @@ -12,6 +12,11 @@ #include <boost/mp11/utility.hpp> #include <cstddef> +#if defined(_MSC_VER) || defined(__GNUC__) +# pragma push_macro( "I" ) +# undef I +#endif + namespace boost { namespace mp11 @@ -108,4 +113,8 @@ template<class Q, class... T> using mp_bind_q = mp_bind<Q::template fn, T...>; } // namespace mp11 } // namespace boost +#if defined(_MSC_VER) || defined(__GNUC__) +# pragma pop_macro( "I" ) +#endif + #endif // #ifndef BOOST_MP11_BIND_HPP_INCLUDED diff --git a/contrib/restricted/boost/mp11/include/boost/mp11/detail/mp_fold.hpp b/contrib/restricted/boost/mp11/include/boost/mp11/detail/mp_fold.hpp index 266d9c18f0..e2c464c99d 100644 --- a/contrib/restricted/boost/mp11/include/boost/mp11/detail/mp_fold.hpp +++ b/contrib/restricted/boost/mp11/include/boost/mp11/detail/mp_fold.hpp @@ -10,6 +10,8 @@ #include <boost/mp11/detail/config.hpp> #include <boost/mp11/detail/mp_defer.hpp> +#include <boost/mp11/detail/mp_rename.hpp> +#include <boost/mp11/detail/mp_list.hpp> namespace boost { @@ -155,7 +157,7 @@ struct mp_fold_impl<L<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T...>, V, F> } // namespace detail -template<class L, class V, template<class...> class F> using mp_fold = typename detail::mp_fold_impl<L, V, F>::type; +template<class L, class V, template<class...> class F> using mp_fold = typename detail::mp_fold_impl<mp_rename<L, mp_list>, V, F>::type; template<class L, class V, class Q> using mp_fold_q = mp_fold<L, V, Q::template fn>; } // namespace mp11 diff --git a/contrib/restricted/boost/mp11/include/boost/mp11/integer_sequence.hpp b/contrib/restricted/boost/mp11/include/boost/mp11/integer_sequence.hpp index 83e24501ba..013991fa56 100644 --- a/contrib/restricted/boost/mp11/include/boost/mp11/integer_sequence.hpp +++ b/contrib/restricted/boost/mp11/include/boost/mp11/integer_sequence.hpp @@ -11,6 +11,11 @@ #include <boost/mp11/version.hpp> #include <cstddef> +#if defined(_MSC_VER) || defined(__GNUC__) +# pragma push_macro( "I" ) +# undef I +#endif + #if defined(__has_builtin) # if __has_builtin(__make_integer_seq) # define BOOST_MP11_HAS_MAKE_INTEGER_SEQ @@ -109,4 +114,8 @@ template<class... T> using index_sequence_for = make_integer_sequence<std::size_ } // namespace mp11 } // namespace boost +#if defined(_MSC_VER) || defined(__GNUC__) +# pragma pop_macro( "I" ) +#endif + #endif // #ifndef BOOST_MP11_INTEGER_SEQUENCE_HPP_INCLUDED diff --git a/contrib/restricted/boost/mp11/include/boost/mp11/integral.hpp b/contrib/restricted/boost/mp11/include/boost/mp11/integral.hpp index 1b4fea3e2b..4848ac80e4 100644 --- a/contrib/restricted/boost/mp11/include/boost/mp11/integral.hpp +++ b/contrib/restricted/boost/mp11/include/boost/mp11/integral.hpp @@ -13,6 +13,11 @@ #include <type_traits> #include <cstddef> +#if defined(_MSC_VER) || defined(__GNUC__) +# pragma push_macro( "I" ) +# undef I +#endif + namespace boost { namespace mp11 @@ -39,4 +44,8 @@ template<std::size_t N> using mp_size_t = std::integral_constant<std::size_t, N> } // namespace mp11 } // namespace boost +#if defined(_MSC_VER) || defined(__GNUC__) +# pragma pop_macro( "I" ) +#endif + #endif // #ifndef BOOST_MP11_INTEGRAL_HPP_INCLUDED diff --git a/contrib/restricted/boost/mp11/include/boost/mp11/list.hpp b/contrib/restricted/boost/mp11/include/boost/mp11/list.hpp index 364676445f..46b5605360 100644 --- a/contrib/restricted/boost/mp11/include/boost/mp11/list.hpp +++ b/contrib/restricted/boost/mp11/include/boost/mp11/list.hpp @@ -19,6 +19,11 @@ #include <boost/mp11/detail/config.hpp> #include <type_traits> +#if defined(_MSC_VER) || defined(__GNUC__) +# pragma push_macro( "I" ) +# undef I +#endif + namespace boost { namespace mp11 @@ -469,4 +474,8 @@ template<class L, class Q> using mp_transform_third_q = mp_transform_third<L, Q: } // namespace mp11 } // namespace boost +#if defined(_MSC_VER) || defined(__GNUC__) +# pragma pop_macro( "I" ) +#endif + #endif // #ifndef BOOST_MP11_LIST_HPP_INCLUDED diff --git a/contrib/restricted/boost/mp11/include/boost/mp11/version.hpp b/contrib/restricted/boost/mp11/include/boost/mp11/version.hpp index ab5e09c390..aba1fb1ca7 100644 --- a/contrib/restricted/boost/mp11/include/boost/mp11/version.hpp +++ b/contrib/restricted/boost/mp11/include/boost/mp11/version.hpp @@ -11,6 +11,6 @@ // Same format as BOOST_VERSION: // major * 100000 + minor * 100 + patch -#define BOOST_MP11_VERSION 108400 +#define BOOST_MP11_VERSION 108500 #endif // #ifndef BOOST_MP11_VERSION_HPP_INCLUDED diff --git a/contrib/restricted/boost/mp11/ya.make b/contrib/restricted/boost/mp11/ya.make index e725d8e913..6e699be6a8 100644 --- a/contrib/restricted/boost/mp11/ya.make +++ b/contrib/restricted/boost/mp11/ya.make @@ -6,9 +6,9 @@ LICENSE(BSL-1.0) LICENSE_TEXTS(.yandex_meta/licenses.list.txt) -VERSION(1.84.0) +VERSION(1.85.0) -ORIGINAL_SOURCE(https://github.com/boostorg/mp11/archive/boost-1.84.0.tar.gz) +ORIGINAL_SOURCE(https://github.com/boostorg/mp11/archive/boost-1.85.0.tar.gz) ADDINCL( GLOBAL contrib/restricted/boost/mp11/include diff --git a/contrib/restricted/boost/parameter/ya.make b/contrib/restricted/boost/parameter/ya.make index 2233cc1e16..1b6fddb441 100644 --- a/contrib/restricted/boost/parameter/ya.make +++ b/contrib/restricted/boost/parameter/ya.make @@ -6,9 +6,9 @@ LICENSE(BSL-1.0) LICENSE_TEXTS(.yandex_meta/licenses.list.txt) -VERSION(1.84.0) +VERSION(1.85.0) -ORIGINAL_SOURCE(https://github.com/boostorg/parameter/archive/boost-1.84.0.tar.gz) +ORIGINAL_SOURCE(https://github.com/boostorg/parameter/archive/boost-1.85.0.tar.gz) PEERDIR( contrib/restricted/boost/config diff --git a/contrib/restricted/boost/pool/include/boost/pool/pool.hpp b/contrib/restricted/boost/pool/include/boost/pool/pool.hpp index 12728a7aea..f6d9e6c82f 100644 --- a/contrib/restricted/boost/pool/include/boost/pool/pool.hpp +++ b/contrib/restricted/boost/pool/include/boost/pool/pool.hpp @@ -360,7 +360,7 @@ class pool: protected simple_segregated_storage < typename UserAllocator::size_t size_type max_chunks() const { //! Calculated maximum number of memory chunks that can be allocated in a single call by this Pool. size_type POD_size = integer::static_lcm<sizeof(size_type), sizeof(void *)>::value + sizeof(size_type); - return (std::numeric_limits<size_type>::max() - POD_size) / alloc_size(); + return ((std::numeric_limits<size_type>::max)() - POD_size) / alloc_size(); } static void * & nextof(void * const ptr) diff --git a/contrib/restricted/boost/pool/ya.make b/contrib/restricted/boost/pool/ya.make index eea44c0f9b..0dd8306e5d 100644 --- a/contrib/restricted/boost/pool/ya.make +++ b/contrib/restricted/boost/pool/ya.make @@ -6,9 +6,9 @@ LICENSE(BSL-1.0) LICENSE_TEXTS(.yandex_meta/licenses.list.txt) -VERSION(1.84.0) +VERSION(1.85.0) -ORIGINAL_SOURCE(https://github.com/boostorg/pool/archive/boost-1.84.0.tar.gz) +ORIGINAL_SOURCE(https://github.com/boostorg/pool/archive/boost-1.85.0.tar.gz) PEERDIR( contrib/restricted/boost/assert diff --git a/contrib/restricted/boost/preprocessor/include/boost/preprocessor/variadic/has_opt.hpp b/contrib/restricted/boost/preprocessor/include/boost/preprocessor/variadic/has_opt.hpp index 7054e9455e..bb40e3787f 100644 --- a/contrib/restricted/boost/preprocessor/include/boost/preprocessor/variadic/has_opt.hpp +++ b/contrib/restricted/boost/preprocessor/include/boost/preprocessor/variadic/has_opt.hpp @@ -19,6 +19,8 @@ # if defined(__cplusplus) && __cplusplus > 201703L # if defined(__GNUC__) && !defined(__clang__) && __GNUC__ >= 8 && __GNUC__ < 10 # define BOOST_PP_VARIADIC_HAS_OPT() 0 +# elif defined(__clang__) && __clang_major__ < 9 +# define BOOST_PP_VARIADIC_HAS_OPT() 0 # else # include <boost/preprocessor/variadic/detail/has_opt.hpp> # define BOOST_PP_VARIADIC_HAS_OPT() \ diff --git a/contrib/restricted/boost/preprocessor/ya.make b/contrib/restricted/boost/preprocessor/ya.make index bbe986b111..b29bd03d9d 100644 --- a/contrib/restricted/boost/preprocessor/ya.make +++ b/contrib/restricted/boost/preprocessor/ya.make @@ -6,9 +6,9 @@ LICENSE(BSL-1.0) LICENSE_TEXTS(.yandex_meta/licenses.list.txt) -VERSION(1.84.0) +VERSION(1.85.0) -ORIGINAL_SOURCE(https://github.com/boostorg/preprocessor/archive/boost-1.84.0.tar.gz) +ORIGINAL_SOURCE(https://github.com/boostorg/preprocessor/archive/boost-1.85.0.tar.gz) ADDINCL( GLOBAL contrib/restricted/boost/preprocessor/include diff --git a/contrib/restricted/boost/random/ya.make b/contrib/restricted/boost/random/ya.make index 4494e451ca..8cd82ab19c 100644 --- a/contrib/restricted/boost/random/ya.make +++ b/contrib/restricted/boost/random/ya.make @@ -6,9 +6,9 @@ LICENSE(BSL-1.0) LICENSE_TEXTS(.yandex_meta/licenses.list.txt) -VERSION(1.84.0) +VERSION(1.85.0) -ORIGINAL_SOURCE(https://github.com/boostorg/random/archive/boost-1.84.0.tar.gz) +ORIGINAL_SOURCE(https://github.com/boostorg/random/archive/boost-1.85.0.tar.gz) PEERDIR( contrib/restricted/boost/array diff --git a/contrib/restricted/boost/range/ya.make b/contrib/restricted/boost/range/ya.make index 3cdd2034dc..c5a9ea8ef5 100644 --- a/contrib/restricted/boost/range/ya.make +++ b/contrib/restricted/boost/range/ya.make @@ -6,9 +6,9 @@ LICENSE(BSL-1.0) LICENSE_TEXTS(.yandex_meta/licenses.list.txt) -VERSION(1.84.0) +VERSION(1.85.0) -ORIGINAL_SOURCE(https://github.com/boostorg/range/archive/boost-1.84.0.tar.gz) +ORIGINAL_SOURCE(https://github.com/boostorg/range/archive/boost-1.85.0.tar.gz) PEERDIR( contrib/restricted/boost/array diff --git a/contrib/restricted/boost/smart_ptr/include/boost/smart_ptr/detail/requires_cxx11.hpp b/contrib/restricted/boost/smart_ptr/include/boost/smart_ptr/detail/requires_cxx11.hpp index fd719c877c..f860bef568 100644 --- a/contrib/restricted/boost/smart_ptr/include/boost/smart_ptr/detail/requires_cxx11.hpp +++ b/contrib/restricted/boost/smart_ptr/include/boost/smart_ptr/detail/requires_cxx11.hpp @@ -16,7 +16,7 @@ defined(BOOST_NO_CXX11_NULLPTR) || \ defined(BOOST_NO_CXX11_SMART_PTR) -BOOST_PRAGMA_MESSAGE("C++03 support was deprecated in Boost.SmartPtr 1.82 and will be removed in Boost.SmartPtr 1.85.") +BOOST_PRAGMA_MESSAGE("C++03 support was deprecated in Boost.SmartPtr 1.82 and will be removed in Boost.SmartPtr 1.86.") #endif diff --git a/contrib/restricted/boost/smart_ptr/include/boost/smart_ptr/intrusive_ptr.hpp b/contrib/restricted/boost/smart_ptr/include/boost/smart_ptr/intrusive_ptr.hpp index 733be391fb..a0a325ea73 100644 --- a/contrib/restricted/boost/smart_ptr/include/boost/smart_ptr/intrusive_ptr.hpp +++ b/contrib/restricted/boost/smart_ptr/include/boost/smart_ptr/intrusive_ptr.hpp @@ -247,17 +247,6 @@ template<class T, class U> inline bool operator!=(T * a, intrusive_ptr<U> const return a != b.get(); } -#if defined(__GNUC__) && __GNUC__ == 2 && __GNUC_MINOR__ <= 96 - -// Resolve the ambiguity between our op!= and the one in rel_ops - -template<class T> inline bool operator!=(intrusive_ptr<T> const & a, intrusive_ptr<T> const & b) BOOST_SP_NOEXCEPT -{ - return a.get() != b.get(); -} - -#endif - #if !defined( BOOST_NO_CXX11_NULLPTR ) template<class T> inline bool operator==( intrusive_ptr<T> const & p, boost::detail::sp_nullptr_t ) BOOST_SP_NOEXCEPT diff --git a/contrib/restricted/boost/smart_ptr/include/boost/smart_ptr/shared_ptr.hpp b/contrib/restricted/boost/smart_ptr/include/boost/smart_ptr/shared_ptr.hpp index e5993aa7e3..efd06bc322 100644 --- a/contrib/restricted/boost/smart_ptr/include/boost/smart_ptr/shared_ptr.hpp +++ b/contrib/restricted/boost/smart_ptr/include/boost/smart_ptr/shared_ptr.hpp @@ -895,17 +895,6 @@ template<class T, class U> inline bool operator!=(shared_ptr<T> const & a, share return a.get() != b.get(); } -#if __GNUC__ == 2 && __GNUC_MINOR__ <= 96 - -// Resolve the ambiguity between our op!= and the one in rel_ops - -template<class T> inline bool operator!=(shared_ptr<T> const & a, shared_ptr<T> const & b) BOOST_SP_NOEXCEPT -{ - return a.get() != b.get(); -} - -#endif - #if !defined( BOOST_NO_CXX11_NULLPTR ) template<class T> inline bool operator==( shared_ptr<T> const & p, boost::detail::sp_nullptr_t ) BOOST_SP_NOEXCEPT diff --git a/contrib/restricted/boost/smart_ptr/ya.make b/contrib/restricted/boost/smart_ptr/ya.make index 573b7b0316..f815f37a57 100644 --- a/contrib/restricted/boost/smart_ptr/ya.make +++ b/contrib/restricted/boost/smart_ptr/ya.make @@ -6,9 +6,9 @@ LICENSE(BSL-1.0) LICENSE_TEXTS(.yandex_meta/licenses.list.txt) -VERSION(1.84.0) +VERSION(1.85.0) -ORIGINAL_SOURCE(https://github.com/boostorg/smart_ptr/archive/boost-1.84.0.tar.gz) +ORIGINAL_SOURCE(https://github.com/boostorg/smart_ptr/archive/boost-1.85.0.tar.gz) PEERDIR( contrib/restricted/boost/assert diff --git a/contrib/restricted/boost/spirit/ya.make b/contrib/restricted/boost/spirit/ya.make index 364b88da08..df049b6ba7 100644 --- a/contrib/restricted/boost/spirit/ya.make +++ b/contrib/restricted/boost/spirit/ya.make @@ -6,9 +6,9 @@ LICENSE(BSL-1.0) LICENSE_TEXTS(.yandex_meta/licenses.list.txt) -VERSION(1.84.0) +VERSION(1.85.0) -ORIGINAL_SOURCE(https://github.com/boostorg/spirit/archive/boost-1.84.0.tar.gz) +ORIGINAL_SOURCE(https://github.com/boostorg/spirit/archive/boost-1.85.0.tar.gz) PEERDIR( contrib/restricted/boost/array diff --git a/contrib/restricted/boost/system/include/boost/system/detail/config.hpp b/contrib/restricted/boost/system/include/boost/system/detail/config.hpp index 1231291414..c231f0de91 100644 --- a/contrib/restricted/boost/system/include/boost/system/detail/config.hpp +++ b/contrib/restricted/boost/system/include/boost/system/detail/config.hpp @@ -8,26 +8,19 @@ // // See http://www.boost.org/libs/system for documentation. -#include <boost/system/detail/requires_cxx11.hpp> #include <boost/config.hpp> #include <boost/config/workaround.hpp> -// BOOST_SYSTEM_HAS_SYSTEM_ERROR -// // The macro BOOST_SYSTEM_DISABLE_THREADS can be defined on configurations // that provide <system_error> and <atomic>, but not <mutex>, such as the // single-threaded libstdc++. // // https://github.com/boostorg/system/issues/92 -#if !defined(BOOST_NO_CXX11_HDR_SYSTEM_ERROR) && !defined(BOOST_NO_CXX11_HDR_ATOMIC) && ( !defined(BOOST_NO_CXX11_HDR_MUTEX) || defined(BOOST_SYSTEM_DISABLE_THREADS) ) -# define BOOST_SYSTEM_HAS_SYSTEM_ERROR -#endif - // BOOST_SYSTEM_NOEXCEPT // Retained for backward compatibility -#define BOOST_SYSTEM_NOEXCEPT BOOST_NOEXCEPT +#define BOOST_SYSTEM_NOEXCEPT noexcept // BOOST_SYSTEM_HAS_CONSTEXPR diff --git a/contrib/restricted/boost/system/include/boost/system/detail/enable_if.hpp b/contrib/restricted/boost/system/include/boost/system/detail/enable_if.hpp index 7f3d70bae3..5e78c4887c 100644 --- a/contrib/restricted/boost/system/include/boost/system/detail/enable_if.hpp +++ b/contrib/restricted/boost/system/include/boost/system/detail/enable_if.hpp @@ -5,28 +5,19 @@ // Distributed under the Boost Software License, Version 1.0 // http://www.boost.org/LICENSE_1_0.txt +#include <type_traits> + namespace boost { - namespace system { - namespace detail { -template<bool C, class T = void> struct enable_if -{ - typedef T type; -}; - -template<class T> struct enable_if<false, T> -{ -}; +using std::enable_if; } // namespace detail - } // namespace system - } // namespace boost #endif // #ifndef BOOST_SYSTEM_DETAIL_ENABLE_IF_HPP_INCLUDED diff --git a/contrib/restricted/boost/system/include/boost/system/detail/error_category.hpp b/contrib/restricted/boost/system/include/boost/system/detail/error_category.hpp index acc349435d..e704221399 100644 --- a/contrib/restricted/boost/system/include/boost/system/detail/error_category.hpp +++ b/contrib/restricted/boost/system/include/boost/system/detail/error_category.hpp @@ -17,11 +17,8 @@ #include <string> #include <functional> #include <cstddef> - -#if defined(BOOST_SYSTEM_HAS_SYSTEM_ERROR) -# include <system_error> -# include <atomic> -#endif +#include <system_error> +#include <atomic> namespace boost { @@ -64,20 +61,11 @@ private: friend class error_code; friend class error_condition; -#if !defined(BOOST_NO_CXX11_DELETED_FUNCTIONS) public: error_category( error_category const & ) = delete; error_category& operator=( error_category const & ) = delete; -#else -private: - - error_category( error_category const & ); - error_category& operator=( error_category const & ); - -#endif - private: boost::ulong_long_type id_; @@ -90,75 +78,47 @@ private: void const* stdcat_align_; }; -#if defined(BOOST_SYSTEM_HAS_SYSTEM_ERROR) - mutable std::atomic< unsigned > sc_init_; -#else - - unsigned sc_init_; - -#endif - protected: -#if !defined(BOOST_NO_CXX11_DEFAULTED_FUNCTIONS) && !defined(BOOST_NO_CXX11_NON_PUBLIC_DEFAULTED_FUNCTIONS) - ~error_category() = default; -#else - - // We'd like to make the destructor protected, to make code that deletes - // an error_category* not compile; unfortunately, doing the below makes - // the destructor user-provided and hence breaks use after main, as the - // categories may get destroyed before code that uses them - - // ~error_category() {} - -#endif - -#if !BOOST_WORKAROUND(BOOST_GCC, < 40800) - BOOST_CONSTEXPR -#endif - error_category() BOOST_NOEXCEPT: id_( 0 ), stdcat_(), sc_init_() + constexpr error_category() noexcept: id_( 0 ), stdcat_(), sc_init_() { } - explicit -#if !BOOST_WORKAROUND(BOOST_GCC, < 40800) - BOOST_CONSTEXPR -#endif - error_category( boost::ulong_long_type id ) BOOST_NOEXCEPT: id_( id ), stdcat_(), sc_init_() + explicit constexpr error_category( boost::ulong_long_type id ) noexcept: id_( id ), stdcat_(), sc_init_() { } public: - virtual const char * name() const BOOST_NOEXCEPT = 0; + virtual const char * name() const noexcept = 0; - virtual error_condition default_error_condition( int ev ) const BOOST_NOEXCEPT; - virtual bool equivalent( int code, const error_condition & condition ) const BOOST_NOEXCEPT; - virtual bool equivalent( const error_code & code, int condition ) const BOOST_NOEXCEPT; + virtual error_condition default_error_condition( int ev ) const noexcept; + virtual bool equivalent( int code, const error_condition & condition ) const noexcept; + virtual bool equivalent( const error_code & code, int condition ) const noexcept; virtual std::string message( int ev ) const = 0; - virtual char const * message( int ev, char * buffer, std::size_t len ) const BOOST_NOEXCEPT; + virtual char const * message( int ev, char * buffer, std::size_t len ) const noexcept; - virtual bool failed( int ev ) const BOOST_NOEXCEPT + virtual bool failed( int ev ) const noexcept { return ev != 0; } - friend BOOST_SYSTEM_CONSTEXPR bool operator==( error_category const & lhs, error_category const & rhs ) BOOST_NOEXCEPT + friend BOOST_SYSTEM_CONSTEXPR bool operator==( error_category const & lhs, error_category const & rhs ) noexcept { return rhs.id_ == 0? &lhs == &rhs: lhs.id_ == rhs.id_; } - friend BOOST_SYSTEM_CONSTEXPR bool operator!=( error_category const & lhs, error_category const & rhs ) BOOST_NOEXCEPT + friend BOOST_SYSTEM_CONSTEXPR bool operator!=( error_category const & lhs, error_category const & rhs ) noexcept { return !( lhs == rhs ); } - friend BOOST_SYSTEM_CONSTEXPR bool operator<( error_category const & lhs, error_category const & rhs ) BOOST_NOEXCEPT + friend BOOST_SYSTEM_CONSTEXPR bool operator<( error_category const & lhs, error_category const & rhs ) noexcept { if( lhs.id_ < rhs.id_ ) { @@ -178,8 +138,6 @@ public: return std::less<error_category const *>()( &lhs, &rhs ); } -#if defined(BOOST_SYSTEM_HAS_SYSTEM_ERROR) - void init_stdcat() const; # if defined(__SUNPRO_CC) // trailing __global is not supported @@ -187,8 +145,6 @@ public: # else operator std::error_category const & () const BOOST_SYMBOL_VISIBLE; # endif - -#endif }; #if defined(BOOST_MSVC) && BOOST_MSVC < 1900 diff --git a/contrib/restricted/boost/system/include/boost/system/detail/error_category_impl.hpp b/contrib/restricted/boost/system/include/boost/system/detail/error_category_impl.hpp index 2005397a46..7d69f71dbb 100644 --- a/contrib/restricted/boost/system/include/boost/system/detail/error_category_impl.hpp +++ b/contrib/restricted/boost/system/include/boost/system/detail/error_category_impl.hpp @@ -26,22 +26,22 @@ namespace system // error_category default implementation -inline error_condition error_category::default_error_condition( int ev ) const BOOST_NOEXCEPT +inline error_condition error_category::default_error_condition( int ev ) const noexcept { return error_condition( ev, *this ); } -inline bool error_category::equivalent( int code, const error_condition & condition ) const BOOST_NOEXCEPT +inline bool error_category::equivalent( int code, const error_condition & condition ) const noexcept { return default_error_condition( code ) == condition; } -inline bool error_category::equivalent( const error_code & code, int condition ) const BOOST_NOEXCEPT +inline bool error_category::equivalent( const error_code & code, int condition ) const noexcept { return code.equals( condition, *this ); } -inline char const * error_category::message( int ev, char * buffer, std::size_t len ) const BOOST_NOEXCEPT +inline char const * error_category::message( int ev, char * buffer, std::size_t len ) const noexcept { if( len == 0 ) { @@ -58,27 +58,7 @@ inline char const * error_category::message( int ev, char * buffer, std::size_t try #endif { - std::string m = this->message( ev ); - -# if defined( BOOST_MSVC ) -# pragma warning( push ) -# pragma warning( disable: 4996 ) -# elif defined(__clang__) && defined(__has_warning) -# pragma clang diagnostic push -# if __has_warning("-Wdeprecated-declarations") -# pragma clang diagnostic ignored "-Wdeprecated-declarations" -# endif -# endif - - std::strncpy( buffer, m.c_str(), len - 1 ); - buffer[ len-1 ] = 0; - -# if defined( BOOST_MSVC ) -# pragma warning( pop ) -# elif defined(__clang__) && defined(__has_warning) -# pragma clang diagnostic pop -# endif - + detail::snprintf( buffer, len, "%s", this->message( ev ).c_str() ); return buffer; } #if !defined(BOOST_NO_EXCEPTIONS) @@ -95,8 +75,6 @@ inline char const * error_category::message( int ev, char * buffer, std::size_t // interoperability with std::error_code, std::error_condition -#if defined(BOOST_SYSTEM_HAS_SYSTEM_ERROR) - #include <boost/system/detail/std_category_impl.hpp> #include <boost/system/detail/mutex.hpp> #include <new> @@ -185,6 +163,4 @@ inline BOOST_NOINLINE error_category::operator std::error_category const & () co } // namespace system } // namespace boost -#endif // #if defined(BOOST_SYSTEM_HAS_SYSTEM_ERROR) - #endif // #ifndef BOOST_SYSTEM_DETAIL_ERROR_CATEGORY_IMPL_HPP_INCLUDED diff --git a/contrib/restricted/boost/system/include/boost/system/detail/error_code.hpp b/contrib/restricted/boost/system/include/boost/system/detail/error_code.hpp index 2b387fb60a..a395c8181d 100644 --- a/contrib/restricted/boost/system/include/boost/system/detail/error_code.hpp +++ b/contrib/restricted/boost/system/include/boost/system/detail/error_code.hpp @@ -21,11 +21,7 @@ #include <boost/system/detail/append_int.hpp> #include <boost/system/detail/snprintf.hpp> #include <boost/system/detail/config.hpp> - -#if defined(BOOST_SYSTEM_HAS_SYSTEM_ERROR) -# include <boost/system/detail/std_category.hpp> -#endif - +#include <boost/system/detail/std_category.hpp> #include <boost/assert/source_location.hpp> #include <boost/cstdint.hpp> #include <boost/config.hpp> @@ -33,10 +29,7 @@ #include <ostream> #include <new> #include <cstdio> - -#if defined(BOOST_SYSTEM_HAS_SYSTEM_ERROR) -# include <system_error> -#endif +#include <system_error> #if defined(BOOST_GCC) && BOOST_GCC >= 40600 && BOOST_GCC < 70000 # pragma GCC diagnostic push @@ -58,14 +51,14 @@ namespace system // and error_code containing a pointer to an object of a type derived // from error_category. -bool operator==( const error_code & code, const error_condition & condition ) BOOST_NOEXCEPT; +bool operator==( const error_code & code, const error_condition & condition ) noexcept; std::size_t hash_value( error_code const & ec ); class error_code { private: - friend bool operator==( const error_code & code, const error_condition & condition ) BOOST_NOEXCEPT; + friend bool operator==( const error_code & code, const error_condition & condition ) noexcept; friend std::size_t hash_value( error_code const & ec ); private: @@ -79,9 +72,7 @@ private: union { data d1_; -#if defined(BOOST_SYSTEM_HAS_SYSTEM_ERROR) unsigned char d2_[ sizeof(std::error_code) ]; -#endif }; // 0: default constructed, d1_ value initialized @@ -93,7 +84,7 @@ private: private: - char const* category_name() const BOOST_NOEXCEPT + char const* category_name() const noexcept { // return category().name(); @@ -117,22 +108,19 @@ public: // constructors: -#if !BOOST_WORKAROUND(BOOST_GCC, < 40800) - BOOST_CONSTEXPR -#endif - error_code() BOOST_NOEXCEPT: + constexpr error_code() noexcept: d1_(), lc_flags_( 0 ) { } - BOOST_SYSTEM_CONSTEXPR error_code( int val, const error_category & cat ) BOOST_NOEXCEPT: + BOOST_SYSTEM_CONSTEXPR error_code( int val, const error_category & cat ) noexcept: d1_(), lc_flags_( 2 + detail::failed_impl( val, cat ) ) { d1_.val_ = val; d1_.cat_ = &cat; } - error_code( int val, const error_category & cat, source_location const * loc ) BOOST_NOEXCEPT: + error_code( int val, const error_category & cat, source_location const * loc ) noexcept: d1_(), lc_flags_( ( loc? reinterpret_cast<boost::uintptr_t>( loc ): 2 ) | +detail::failed_impl( val, cat ) ) { d1_.val_ = val; @@ -142,15 +130,13 @@ public: template<class ErrorCodeEnum> BOOST_SYSTEM_CONSTEXPR error_code( ErrorCodeEnum e, typename detail::enable_if< is_error_code_enum<ErrorCodeEnum>::value -#if defined(BOOST_SYSTEM_HAS_SYSTEM_ERROR) || std::is_error_code_enum<ErrorCodeEnum>::value -#endif - >::type* = 0 ) BOOST_NOEXCEPT: d1_(), lc_flags_( 0 ) + >::type* = 0 ) noexcept: d1_(), lc_flags_( 0 ) { *this = make_error_code( e ); } - error_code( error_code const& ec, source_location const * loc ) BOOST_NOEXCEPT: + error_code( error_code const& ec, source_location const * loc ) noexcept: d1_(), lc_flags_( 0 ) { *this = ec; @@ -161,9 +147,7 @@ public: } } -#if defined(BOOST_SYSTEM_HAS_SYSTEM_ERROR) - - error_code( std::error_code const& ec ) BOOST_NOEXCEPT: + error_code( std::error_code const& ec ) noexcept: d1_(), lc_flags_( 0 ) { #ifndef BOOST_NO_RTTI @@ -181,41 +165,39 @@ public: } } -#endif - // modifiers: - BOOST_SYSTEM_CONSTEXPR void assign( int val, const error_category & cat ) BOOST_NOEXCEPT + BOOST_SYSTEM_CONSTEXPR void assign( int val, const error_category & cat ) noexcept { *this = error_code( val, cat ); } - void assign( int val, const error_category & cat, source_location const * loc ) BOOST_NOEXCEPT + void assign( int val, const error_category & cat, source_location const * loc ) noexcept { *this = error_code( val, cat, loc ); } - void assign( error_code const& ec, source_location const * loc ) BOOST_NOEXCEPT + void assign( error_code const& ec, source_location const * loc ) noexcept { *this = error_code( ec, loc ); } template<typename ErrorCodeEnum> BOOST_SYSTEM_CONSTEXPR typename detail::enable_if<is_error_code_enum<ErrorCodeEnum>::value, error_code>::type & - operator=( ErrorCodeEnum val ) BOOST_NOEXCEPT + operator=( ErrorCodeEnum val ) noexcept { *this = make_error_code( val ); return *this; } - BOOST_SYSTEM_CONSTEXPR void clear() BOOST_NOEXCEPT + BOOST_SYSTEM_CONSTEXPR void clear() noexcept { *this = error_code(); } // observers: - BOOST_SYSTEM_CONSTEXPR int value() const BOOST_NOEXCEPT + BOOST_SYSTEM_CONSTEXPR int value() const noexcept { if( lc_flags_ != 1 ) { @@ -223,22 +205,16 @@ public: } else { -#if defined(BOOST_SYSTEM_HAS_SYSTEM_ERROR) - std::error_code const& ec = *reinterpret_cast<std::error_code const*>( d2_ ); unsigned cv = static_cast<unsigned>( ec.value() ); unsigned ch = static_cast<unsigned>( reinterpret_cast<boost::uintptr_t>( &ec.category() ) % 2097143 ); // 2^21-9, prime return static_cast<int>( cv + 1000 * ch ); -#else - - return -1; -#endif } } - BOOST_SYSTEM_CONSTEXPR const error_category & category() const BOOST_NOEXCEPT + BOOST_SYSTEM_CONSTEXPR const error_category & category() const noexcept { if( lc_flags_ == 0 ) { @@ -255,24 +231,19 @@ public: } // deprecated? - error_condition default_error_condition() const BOOST_NOEXCEPT + error_condition default_error_condition() const noexcept { return category().default_error_condition( value() ); } std::string message() const { -#if defined(BOOST_SYSTEM_HAS_SYSTEM_ERROR) - if( lc_flags_ == 1 ) { std::error_code const& ec = *reinterpret_cast<std::error_code const*>( d2_ ); return ec.message(); } - -#endif - - if( lc_flags_ == 0 ) + else if( lc_flags_ == 0 ) { return detail::system_error_category_message( value() ); } @@ -282,9 +253,8 @@ public: } } - char const * message( char * buffer, std::size_t len ) const BOOST_NOEXCEPT + char const * message( char * buffer, std::size_t len ) const noexcept { -#if defined(BOOST_SYSTEM_HAS_SYSTEM_ERROR) if( lc_flags_ == 1 ) { std::error_code const& ec = *reinterpret_cast<std::error_code const*>( d2_ ); @@ -304,9 +274,7 @@ public: } #endif } -#endif - - if( lc_flags_ == 0 ) + else if( lc_flags_ == 0 ) { return detail::system_error_category_message( value(), buffer, len ); } @@ -316,17 +284,16 @@ public: } } - BOOST_SYSTEM_CONSTEXPR bool failed() const BOOST_NOEXCEPT + BOOST_SYSTEM_CONSTEXPR bool failed() const noexcept { if( lc_flags_ & 1 ) { -#if defined(BOOST_SYSTEM_HAS_SYSTEM_ERROR) if( lc_flags_ == 1 ) { std::error_code const& ec = *reinterpret_cast<std::error_code const*>( d2_ ); return ec.value() != 0; } -#endif + return true; } else @@ -335,36 +302,17 @@ public: } } -#if !defined(BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS) - - BOOST_SYSTEM_CONSTEXPR explicit operator bool() const BOOST_NOEXCEPT // true if error + BOOST_SYSTEM_CONSTEXPR explicit operator bool() const noexcept // true if error { return failed(); } -#else - - typedef void (*unspecified_bool_type)(); - static void unspecified_bool_true() {} - - BOOST_SYSTEM_CONSTEXPR operator unspecified_bool_type() const BOOST_NOEXCEPT // true if error - { - return failed()? unspecified_bool_true: 0; - } - - BOOST_SYSTEM_CONSTEXPR bool operator!() const BOOST_NOEXCEPT // true if no error - { - return !failed(); - } - -#endif - - bool has_location() const BOOST_NOEXCEPT + bool has_location() const noexcept { return lc_flags_ >= 4; } - source_location const & location() const BOOST_NOEXCEPT + source_location const & location() const noexcept { BOOST_STATIC_CONSTEXPR source_location loc; return lc_flags_ >= 4? *reinterpret_cast<source_location const*>( lc_flags_ &~ static_cast<boost::uintptr_t>( 1 ) ): loc; @@ -378,7 +326,7 @@ private: friend class error_category; - BOOST_SYSTEM_CONSTEXPR bool equals( int val, error_category const& cat ) const BOOST_NOEXCEPT + BOOST_SYSTEM_CONSTEXPR bool equals( int val, error_category const& cat ) const noexcept { if( lc_flags_ == 0 ) { @@ -399,10 +347,8 @@ public: // the more symmetrical non-member syntax allows enum // conversions work for both rhs and lhs. - BOOST_SYSTEM_CONSTEXPR inline friend bool operator==( const error_code & lhs, const error_code & rhs ) BOOST_NOEXCEPT + BOOST_SYSTEM_CONSTEXPR inline friend bool operator==( const error_code & lhs, const error_code & rhs ) noexcept { -#if defined(BOOST_SYSTEM_HAS_SYSTEM_ERROR) - bool s1 = lhs.lc_flags_ == 1; bool s2 = rhs.lc_flags_ == 1; @@ -416,16 +362,13 @@ public: return e1 == e2; } else -#endif { return lhs.value() == rhs.value() && lhs.category() == rhs.category(); } } - BOOST_SYSTEM_CONSTEXPR inline friend bool operator<( const error_code & lhs, const error_code & rhs ) BOOST_NOEXCEPT + BOOST_SYSTEM_CONSTEXPR inline friend bool operator<( const error_code & lhs, const error_code & rhs ) noexcept { -#if defined(BOOST_SYSTEM_HAS_SYSTEM_ERROR) - bool s1 = lhs.lc_flags_ == 1; bool s2 = rhs.lc_flags_ == 1; @@ -440,35 +383,32 @@ public: return e1 < e2; } else -#endif { return lhs.category() < rhs.category() || (lhs.category() == rhs.category() && lhs.value() < rhs.value()); } } - BOOST_SYSTEM_CONSTEXPR inline friend bool operator!=( const error_code & lhs, const error_code & rhs ) BOOST_NOEXCEPT + BOOST_SYSTEM_CONSTEXPR inline friend bool operator!=( const error_code & lhs, const error_code & rhs ) noexcept { return !( lhs == rhs ); } -#if defined(BOOST_SYSTEM_HAS_SYSTEM_ERROR) - - inline friend bool operator==( std::error_code const & lhs, error_code const & rhs ) BOOST_NOEXCEPT + inline friend bool operator==( std::error_code const & lhs, error_code const & rhs ) noexcept { return lhs == static_cast< std::error_code >( rhs ); } - inline friend bool operator==( error_code const & lhs, std::error_code const & rhs ) BOOST_NOEXCEPT + inline friend bool operator==( error_code const & lhs, std::error_code const & rhs ) noexcept { return static_cast< std::error_code >( lhs ) == rhs; } - inline friend bool operator!=( std::error_code const & lhs, error_code const & rhs ) BOOST_NOEXCEPT + inline friend bool operator!=( std::error_code const & lhs, error_code const & rhs ) noexcept { return !( lhs == rhs ); } - inline friend bool operator!=( error_code const & lhs, std::error_code const & rhs ) BOOST_NOEXCEPT + inline friend bool operator!=( error_code const & lhs, std::error_code const & rhs ) noexcept { return !( lhs == rhs ); } @@ -476,25 +416,25 @@ public: // template<class E, class N = typename detail::enable_if<std::is_error_condition_enum<E>::value>::type> - inline friend bool operator==( error_code const & lhs, E rhs ) BOOST_NOEXCEPT + inline friend bool operator==( error_code const & lhs, E rhs ) noexcept { return lhs == make_error_condition( rhs ); } template<class E, class N = typename detail::enable_if<std::is_error_condition_enum<E>::value>::type> - inline friend bool operator==( E lhs, error_code const & rhs ) BOOST_NOEXCEPT + inline friend bool operator==( E lhs, error_code const & rhs ) noexcept { return make_error_condition( lhs ) == rhs; } template<class E, class N = typename detail::enable_if<std::is_error_condition_enum<E>::value>::type> - inline friend bool operator!=( error_code const & lhs, E rhs ) BOOST_NOEXCEPT + inline friend bool operator!=( error_code const & lhs, E rhs ) noexcept { return !( lhs == rhs ); } template<class E, class N = typename detail::enable_if<std::is_error_condition_enum<E>::value>::type> - inline friend bool operator!=( E lhs, error_code const & rhs ) BOOST_NOEXCEPT + inline friend bool operator!=( E lhs, error_code const & rhs ) noexcept { return !( lhs == rhs ); } @@ -502,47 +442,47 @@ public: // template<class E, class N1 = void, class N2 = typename detail::enable_if<std::is_error_code_enum<E>::value>::type> - BOOST_SYSTEM_CONSTEXPR inline friend bool operator==( error_code const & lhs, E rhs ) BOOST_NOEXCEPT + BOOST_SYSTEM_CONSTEXPR inline friend bool operator==( error_code const & lhs, E rhs ) noexcept { return lhs == make_error_code( rhs ); } template<class E, class N1 = void, class N2 = typename detail::enable_if<std::is_error_code_enum<E>::value>::type> - BOOST_SYSTEM_CONSTEXPR inline friend bool operator==( E lhs, error_code const & rhs ) BOOST_NOEXCEPT + BOOST_SYSTEM_CONSTEXPR inline friend bool operator==( E lhs, error_code const & rhs ) noexcept { return make_error_code( lhs ) == rhs; } template<class E, class N1 = void, class N2 = typename detail::enable_if<std::is_error_code_enum<E>::value>::type> - BOOST_SYSTEM_CONSTEXPR inline friend bool operator!=( error_code const & lhs, E rhs ) BOOST_NOEXCEPT + BOOST_SYSTEM_CONSTEXPR inline friend bool operator!=( error_code const & lhs, E rhs ) noexcept { return !( lhs == rhs ); } template<class E, class N1 = void, class N2 = typename detail::enable_if<std::is_error_code_enum<E>::value>::type> - BOOST_SYSTEM_CONSTEXPR inline friend bool operator!=( E lhs, error_code const & rhs ) BOOST_NOEXCEPT + BOOST_SYSTEM_CONSTEXPR inline friend bool operator!=( E lhs, error_code const & rhs ) noexcept { return !( lhs == rhs ); } #if defined(BOOST_SYSTEM_CLANG_6) - inline friend bool operator==( error_code const & lhs, std::error_condition const & rhs ) BOOST_NOEXCEPT + inline friend bool operator==( error_code const & lhs, std::error_condition const & rhs ) noexcept { return static_cast< std::error_code >( lhs ) == rhs; } - inline friend bool operator==( std::error_condition const & lhs, error_code const & rhs ) BOOST_NOEXCEPT + inline friend bool operator==( std::error_condition const & lhs, error_code const & rhs ) noexcept { return lhs == static_cast< std::error_code >( rhs ); } - inline friend bool operator!=( error_code const & lhs, std::error_condition const & rhs ) BOOST_NOEXCEPT + inline friend bool operator!=( error_code const & lhs, std::error_condition const & rhs ) noexcept { return !( lhs == rhs ); } - inline friend bool operator!=( std::error_condition const & lhs, error_code const & rhs ) BOOST_NOEXCEPT + inline friend bool operator!=( std::error_condition const & lhs, error_code const & rhs ) noexcept { return !( lhs == rhs ); } @@ -603,12 +543,8 @@ public: #endif -#endif - std::string to_string() const { -#if defined(BOOST_SYSTEM_HAS_SYSTEM_ERROR) - if( lc_flags_ == 1 ) { std::error_code const& e2 = *reinterpret_cast<std::error_code const*>( d2_ ); @@ -620,7 +556,6 @@ public: return r; } else -#endif { std::string r = category_name(); detail::append_int( r, value() ); @@ -653,49 +588,41 @@ public: } }; -inline bool operator==( const error_code & code, const error_condition & condition ) BOOST_NOEXCEPT +inline bool operator==( const error_code & code, const error_condition & condition ) noexcept { -#if defined(BOOST_SYSTEM_HAS_SYSTEM_ERROR) - if( code.lc_flags_ == 1 ) { return static_cast<std::error_code>( code ) == static_cast<std::error_condition>( condition ); } else - -#endif { return code.category().equivalent( code.value(), condition ) || condition.category().equivalent( code, condition.value() ); } } -inline bool operator==( const error_condition & condition, const error_code & code ) BOOST_NOEXCEPT +inline bool operator==( const error_condition & condition, const error_code & code ) noexcept { return code == condition; } -inline bool operator!=( const error_code & lhs, const error_condition & rhs ) BOOST_NOEXCEPT +inline bool operator!=( const error_code & lhs, const error_condition & rhs ) noexcept { return !( lhs == rhs ); } -inline bool operator!=( const error_condition & lhs, const error_code & rhs ) BOOST_NOEXCEPT +inline bool operator!=( const error_condition & lhs, const error_code & rhs ) noexcept { return !( lhs == rhs ); } inline std::size_t hash_value( error_code const & ec ) { -#if defined(BOOST_SYSTEM_HAS_SYSTEM_ERROR) - if( ec.lc_flags_ == 1 ) { std::error_code const& e2 = *reinterpret_cast<std::error_code const*>( ec.d2_ ); return std::hash<std::error_code>()( e2 ); } -#endif - error_category const & cat = ec.category(); boost::ulong_long_type id_ = cat.id_; diff --git a/contrib/restricted/boost/system/include/boost/system/detail/error_condition.hpp b/contrib/restricted/boost/system/include/boost/system/detail/error_condition.hpp index b2da2811bf..6aeb9506a6 100644 --- a/contrib/restricted/boost/system/include/boost/system/detail/error_condition.hpp +++ b/contrib/restricted/boost/system/include/boost/system/detail/error_condition.hpp @@ -50,7 +50,7 @@ private: private: - boost::ulong_long_type cat_id() const BOOST_NOEXCEPT + boost::ulong_long_type cat_id() const noexcept { return cat_? cat_->id_: detail::generic_category_id; } @@ -59,17 +59,17 @@ public: // constructors: - BOOST_SYSTEM_CONSTEXPR error_condition() BOOST_NOEXCEPT: + BOOST_SYSTEM_CONSTEXPR error_condition() noexcept: val_( 0 ), cat_( 0 ) { } - BOOST_SYSTEM_CONSTEXPR error_condition( int val, const error_category & cat ) BOOST_NOEXCEPT: + BOOST_SYSTEM_CONSTEXPR error_condition( int val, const error_category & cat ) noexcept: val_( val ), cat_( &cat ) { } - BOOST_SYSTEM_CONSTEXPR explicit error_condition( boost::system::detail::generic_value_tag vt ) BOOST_NOEXCEPT: + BOOST_SYSTEM_CONSTEXPR explicit error_condition( boost::system::detail::generic_value_tag vt ) noexcept: val_( vt.value ), cat_( 0 ) { } @@ -77,20 +77,20 @@ public: template<class ErrorConditionEnum> BOOST_SYSTEM_CONSTEXPR error_condition( ErrorConditionEnum e, typename detail::enable_if< is_error_condition_enum<ErrorConditionEnum>::value && !boost::system::detail::is_same<ErrorConditionEnum, errc::errc_t>::value - >::type* = 0) BOOST_NOEXCEPT + >::type* = 0) noexcept { *this = make_error_condition( e ); } template<class ErrorConditionEnum> BOOST_SYSTEM_CONSTEXPR error_condition( ErrorConditionEnum e, - typename detail::enable_if<boost::system::detail::is_same<ErrorConditionEnum, errc::errc_t>::value>::type* = 0) BOOST_NOEXCEPT: + typename detail::enable_if<boost::system::detail::is_same<ErrorConditionEnum, errc::errc_t>::value>::type* = 0) noexcept: val_( e ), cat_( 0 ) { } // modifiers: - BOOST_SYSTEM_CONSTEXPR void assign( int val, const error_category & cat ) BOOST_NOEXCEPT + BOOST_SYSTEM_CONSTEXPR void assign( int val, const error_category & cat ) noexcept { val_ = val; cat_ = &cat; @@ -98,13 +98,13 @@ public: template<typename ErrorConditionEnum> BOOST_SYSTEM_CONSTEXPR typename detail::enable_if<is_error_condition_enum<ErrorConditionEnum>::value, error_condition>::type & - operator=( ErrorConditionEnum val ) BOOST_NOEXCEPT + operator=( ErrorConditionEnum val ) noexcept { *this = error_condition( val ); return *this; } - BOOST_SYSTEM_CONSTEXPR void clear() BOOST_NOEXCEPT + BOOST_SYSTEM_CONSTEXPR void clear() noexcept { val_ = 0; cat_ = 0; @@ -112,12 +112,12 @@ public: // observers: - BOOST_SYSTEM_CONSTEXPR int value() const BOOST_NOEXCEPT + BOOST_SYSTEM_CONSTEXPR int value() const noexcept { return val_; } - BOOST_SYSTEM_CONSTEXPR const error_category & category() const BOOST_NOEXCEPT + BOOST_SYSTEM_CONSTEXPR const error_category & category() const noexcept { return cat_? *cat_: generic_category(); } @@ -134,7 +134,7 @@ public: } } - char const * message( char * buffer, std::size_t len ) const BOOST_NOEXCEPT + char const * message( char * buffer, std::size_t len ) const noexcept { if( cat_ ) { @@ -146,7 +146,7 @@ public: } } - BOOST_SYSTEM_CONSTEXPR bool failed() const BOOST_NOEXCEPT + BOOST_SYSTEM_CONSTEXPR bool failed() const noexcept { if( cat_ ) { @@ -158,35 +158,16 @@ public: } } -#if !defined(BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS) - - BOOST_SYSTEM_CONSTEXPR explicit operator bool() const BOOST_NOEXCEPT // true if error + BOOST_SYSTEM_CONSTEXPR explicit operator bool() const noexcept // true if error { return failed(); } -#else - - typedef void (*unspecified_bool_type)(); - static void unspecified_bool_true() {} - - BOOST_SYSTEM_CONSTEXPR operator unspecified_bool_type() const BOOST_NOEXCEPT // true if error - { - return failed()? unspecified_bool_true: 0; - } - - BOOST_SYSTEM_CONSTEXPR bool operator!() const BOOST_NOEXCEPT // true if no error - { - return !failed(); - } - -#endif - // relationals: // the more symmetrical non-member syntax allows enum // conversions work for both rhs and lhs. - BOOST_SYSTEM_CONSTEXPR inline friend bool operator==( const error_condition & lhs, const error_condition & rhs ) BOOST_NOEXCEPT + BOOST_SYSTEM_CONSTEXPR inline friend bool operator==( const error_condition & lhs, const error_condition & rhs ) noexcept { if( lhs.val_ != rhs.val_ ) { @@ -206,20 +187,18 @@ public: } } - BOOST_SYSTEM_CONSTEXPR inline friend bool operator<( const error_condition & lhs, const error_condition & rhs ) BOOST_NOEXCEPT + BOOST_SYSTEM_CONSTEXPR inline friend bool operator<( const error_condition & lhs, const error_condition & rhs ) noexcept { error_category const& lcat = lhs.category(); error_category const& rcat = rhs.category(); return lcat < rcat || ( lcat == rcat && lhs.val_ < rhs.val_ ); } - BOOST_SYSTEM_CONSTEXPR inline friend bool operator!=( const error_condition & lhs, const error_condition & rhs ) BOOST_NOEXCEPT + BOOST_SYSTEM_CONSTEXPR inline friend bool operator!=( const error_condition & lhs, const error_condition & rhs ) noexcept { return !( lhs == rhs ); } -#if defined(BOOST_SYSTEM_HAS_SYSTEM_ERROR) - operator std::error_condition () const { // This condition must be the same as the one in error_category_impl.hpp @@ -241,22 +220,22 @@ public: #endif } - inline friend bool operator==( std::error_code const & lhs, error_condition const & rhs ) BOOST_NOEXCEPT + inline friend bool operator==( std::error_code const & lhs, error_condition const & rhs ) noexcept { return lhs == static_cast< std::error_condition >( rhs ); } - inline friend bool operator==( error_condition const & lhs, std::error_code const & rhs ) BOOST_NOEXCEPT + inline friend bool operator==( error_condition const & lhs, std::error_code const & rhs ) noexcept { return static_cast< std::error_condition >( lhs ) == rhs; } - inline friend bool operator!=( std::error_code const & lhs, error_condition const & rhs ) BOOST_NOEXCEPT + inline friend bool operator!=( std::error_code const & lhs, error_condition const & rhs ) noexcept { return !( lhs == rhs ); } - inline friend bool operator!=( error_condition const & lhs, std::error_code const & rhs ) BOOST_NOEXCEPT + inline friend bool operator!=( error_condition const & lhs, std::error_code const & rhs ) noexcept { return !( lhs == rhs ); } @@ -264,25 +243,25 @@ public: // template<class E, class N = typename detail::enable_if<std::is_error_condition_enum<E>::value>::type> - BOOST_SYSTEM_CONSTEXPR inline friend bool operator==( error_condition const & lhs, E rhs ) BOOST_NOEXCEPT + BOOST_SYSTEM_CONSTEXPR inline friend bool operator==( error_condition const & lhs, E rhs ) noexcept { return lhs == make_error_condition( rhs ); } template<class E, class N = typename detail::enable_if<std::is_error_condition_enum<E>::value>::type> - BOOST_SYSTEM_CONSTEXPR inline friend bool operator==( E lhs, error_condition const & rhs ) BOOST_NOEXCEPT + BOOST_SYSTEM_CONSTEXPR inline friend bool operator==( E lhs, error_condition const & rhs ) noexcept { return make_error_condition( lhs ) == rhs; } template<class E, class N = typename detail::enable_if<std::is_error_condition_enum<E>::value>::type> - BOOST_SYSTEM_CONSTEXPR inline friend bool operator!=( error_condition const & lhs, E rhs ) BOOST_NOEXCEPT + BOOST_SYSTEM_CONSTEXPR inline friend bool operator!=( error_condition const & lhs, E rhs ) noexcept { return !( lhs == rhs ); } template<class E, class N = typename detail::enable_if<std::is_error_condition_enum<E>::value>::type> - BOOST_SYSTEM_CONSTEXPR inline friend bool operator!=( E lhs, error_condition const & rhs ) BOOST_NOEXCEPT + BOOST_SYSTEM_CONSTEXPR inline friend bool operator!=( E lhs, error_condition const & rhs ) noexcept { return !( lhs == rhs ); } @@ -290,31 +269,29 @@ public: // template<class E, class N1 = void, class N2 = typename detail::enable_if<std::is_error_code_enum<E>::value>::type> - inline friend bool operator==( error_condition const & lhs, E rhs ) BOOST_NOEXCEPT + inline friend bool operator==( error_condition const & lhs, E rhs ) noexcept { return lhs == make_error_code( rhs ); } template<class E, class N1 = void, class N2 = typename detail::enable_if<std::is_error_code_enum<E>::value>::type> - inline friend bool operator==( E lhs, error_condition const & rhs ) BOOST_NOEXCEPT + inline friend bool operator==( E lhs, error_condition const & rhs ) noexcept { return make_error_code( lhs ) == rhs; } template<class E, class N1 = void, class N2 = typename detail::enable_if<std::is_error_code_enum<E>::value>::type> - inline friend bool operator!=( error_condition const & lhs, E rhs ) BOOST_NOEXCEPT + inline friend bool operator!=( error_condition const & lhs, E rhs ) noexcept { return !( lhs == rhs ); } template<class E, class N1 = void, class N2 = typename detail::enable_if<std::is_error_code_enum<E>::value>::type> - inline friend bool operator!=( E lhs, error_condition const & rhs ) BOOST_NOEXCEPT + inline friend bool operator!=( E lhs, error_condition const & rhs ) noexcept { return !( lhs == rhs ); } -#endif - std::string to_string() const { std::string r( "cond:" ); diff --git a/contrib/restricted/boost/system/include/boost/system/detail/generic_category.hpp b/contrib/restricted/boost/system/include/boost/system/detail/generic_category.hpp index 0a41b67773..6a1a058169 100644 --- a/contrib/restricted/boost/system/include/boost/system/detail/generic_category.hpp +++ b/contrib/restricted/boost/system/include/boost/system/detail/generic_category.hpp @@ -35,18 +35,18 @@ class BOOST_SYMBOL_VISIBLE generic_error_category: public error_category { public: - BOOST_SYSTEM_CONSTEXPR generic_error_category() BOOST_NOEXCEPT: + BOOST_SYSTEM_CONSTEXPR generic_error_category() noexcept: error_category( detail::generic_category_id ) { } - const char * name() const BOOST_NOEXCEPT BOOST_OVERRIDE + const char * name() const noexcept BOOST_OVERRIDE { return "generic"; } std::string message( int ev ) const BOOST_OVERRIDE; - char const * message( int ev, char * buffer, std::size_t len ) const BOOST_NOEXCEPT BOOST_OVERRIDE; + char const * message( int ev, char * buffer, std::size_t len ) const noexcept BOOST_OVERRIDE; }; #if ( defined( BOOST_GCC ) && BOOST_GCC >= 40600 ) || defined( BOOST_CLANG ) @@ -55,7 +55,7 @@ public: // generic_error_category::message -inline char const * generic_error_category::message( int ev, char * buffer, std::size_t len ) const BOOST_NOEXCEPT +inline char const * generic_error_category::message( int ev, char * buffer, std::size_t len ) const noexcept { return generic_error_category_message( ev, buffer, len ); } @@ -86,7 +86,7 @@ template<class T> constexpr generic_error_category generic_cat_holder<T>::instan } // namespace detail -constexpr error_category const & generic_category() BOOST_NOEXCEPT +constexpr error_category const & generic_category() noexcept { return detail::generic_cat_holder<void>::instance; } @@ -94,10 +94,10 @@ constexpr error_category const & generic_category() BOOST_NOEXCEPT #else // #if defined(BOOST_SYSTEM_HAS_CONSTEXPR) #if !defined(__SUNPRO_CC) // trailing __global is not supported -inline error_category const & generic_category() BOOST_NOEXCEPT BOOST_SYMBOL_VISIBLE; +inline error_category const & generic_category() noexcept BOOST_SYMBOL_VISIBLE; #endif -inline error_category const & generic_category() BOOST_NOEXCEPT +inline error_category const & generic_category() noexcept { static const detail::generic_error_category instance; return instance; diff --git a/contrib/restricted/boost/system/include/boost/system/detail/generic_category_message.hpp b/contrib/restricted/boost/system/include/boost/system/detail/generic_category_message.hpp index fbdb41a3c3..ded2db6331 100644 --- a/contrib/restricted/boost/system/include/boost/system/detail/generic_category_message.hpp +++ b/contrib/restricted/boost/system/include/boost/system/detail/generic_category_message.hpp @@ -27,17 +27,17 @@ namespace detail // glibc has two incompatible strerror_r definitions -inline char const * strerror_r_helper( char const * r, char const * ) BOOST_NOEXCEPT +inline char const * strerror_r_helper( char const * r, char const * ) noexcept { return r; } -inline char const * strerror_r_helper( int r, char const * buffer ) BOOST_NOEXCEPT +inline char const * strerror_r_helper( int r, char const * buffer ) noexcept { return r == 0? buffer: "Unknown error"; } -inline char const * generic_error_category_message( int ev, char * buffer, std::size_t len ) BOOST_NOEXCEPT +inline char const * generic_error_category_message( int ev, char * buffer, std::size_t len ) noexcept { return strerror_r_helper( strerror_r( ev, buffer, len ), buffer ); } @@ -68,7 +68,7 @@ inline std::string generic_error_category_message( int ev ) return m? m: "Unknown error"; } -inline char const * generic_error_category_message( int ev, char * buffer, std::size_t len ) BOOST_NOEXCEPT +inline char const * generic_error_category_message( int ev, char * buffer, std::size_t len ) noexcept { if( len == 0 ) { diff --git a/contrib/restricted/boost/system/include/boost/system/detail/interop_category.hpp b/contrib/restricted/boost/system/include/boost/system/detail/interop_category.hpp index 9755ad5a59..418c69183d 100644 --- a/contrib/restricted/boost/system/include/boost/system/detail/interop_category.hpp +++ b/contrib/restricted/boost/system/include/boost/system/detail/interop_category.hpp @@ -35,25 +35,25 @@ class BOOST_SYMBOL_VISIBLE interop_error_category: public error_category { public: - BOOST_SYSTEM_CONSTEXPR interop_error_category() BOOST_NOEXCEPT: + BOOST_SYSTEM_CONSTEXPR interop_error_category() noexcept: error_category( detail::interop_category_id ) { } - const char * name() const BOOST_NOEXCEPT BOOST_OVERRIDE + const char * name() const noexcept BOOST_OVERRIDE { return "std:unknown"; } std::string message( int ev ) const BOOST_OVERRIDE; - char const * message( int ev, char * buffer, std::size_t len ) const BOOST_NOEXCEPT BOOST_OVERRIDE; + char const * message( int ev, char * buffer, std::size_t len ) const noexcept BOOST_OVERRIDE; }; #if ( defined( BOOST_GCC ) && BOOST_GCC >= 40600 ) || defined( BOOST_CLANG ) #pragma GCC diagnostic pop #endif -inline char const * interop_error_category::message( int ev, char * buffer, std::size_t len ) const BOOST_NOEXCEPT +inline char const * interop_error_category::message( int ev, char * buffer, std::size_t len ) const noexcept { detail::snprintf( buffer, len, "Unknown interop error %d", ev ); return buffer; @@ -79,7 +79,7 @@ template<class T> struct BOOST_SYMBOL_VISIBLE interop_cat_holder template<class T> constexpr interop_error_category interop_cat_holder<T>::instance; #endif -constexpr error_category const & interop_category() BOOST_NOEXCEPT +constexpr error_category const & interop_category() noexcept { return interop_cat_holder<void>::instance; } @@ -87,10 +87,10 @@ constexpr error_category const & interop_category() BOOST_NOEXCEPT #else // #if defined(BOOST_SYSTEM_HAS_CONSTEXPR) #if !defined(__SUNPRO_CC) // trailing __global is not supported -inline error_category const & interop_category() BOOST_NOEXCEPT BOOST_SYMBOL_VISIBLE; +inline error_category const & interop_category() noexcept BOOST_SYMBOL_VISIBLE; #endif -inline error_category const & interop_category() BOOST_NOEXCEPT +inline error_category const & interop_category() noexcept { static const detail::interop_error_category instance; return instance; diff --git a/contrib/restricted/boost/system/include/boost/system/detail/is_same.hpp b/contrib/restricted/boost/system/include/boost/system/detail/is_same.hpp index dc466f8ee3..12c1e585a4 100644 --- a/contrib/restricted/boost/system/include/boost/system/detail/is_same.hpp +++ b/contrib/restricted/boost/system/include/boost/system/detail/is_same.hpp @@ -5,29 +5,19 @@ // Distributed under the Boost Software License, Version 1.0 // http://www.boost.org/LICENSE_1_0.txt +#include <type_traits> + namespace boost { - namespace system { - namespace detail { -template<class T1, class T2> struct is_same -{ - enum _vt { value = 0 }; -}; - -template<class T> struct is_same<T, T> -{ - enum _vt { value = 1 }; -}; +using std::is_same; } // namespace detail - } // namespace system - } // namespace boost #endif // #ifndef BOOST_SYSTEM_DETAIL_IS_SAME_HPP_INCLUDED diff --git a/contrib/restricted/boost/system/include/boost/system/detail/requires_cxx11.hpp b/contrib/restricted/boost/system/include/boost/system/detail/requires_cxx11.hpp deleted file mode 100644 index 016791c086..0000000000 --- a/contrib/restricted/boost/system/include/boost/system/detail/requires_cxx11.hpp +++ /dev/null @@ -1,21 +0,0 @@ -#ifndef BOOST_SYSTEM_DETAIL_REQUIRES_CXX11_HPP_INCLUDED -#define BOOST_SYSTEM_DETAIL_REQUIRES_CXX11_HPP_INCLUDED - -// Copyright 2023 Peter Dimov -// Distributed under the Boost Software License, Version 1.0. -// https://www.boost.org/LICENSE_1_0.txt - -#include <boost/config.hpp> -#include <boost/config/pragma_message.hpp> - -#if defined(BOOST_NO_CXX11_CONSTEXPR) || \ - defined(BOOST_NO_CXX11_NOEXCEPT) || \ - defined(BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS) || \ - defined(BOOST_NO_CXX11_DEFAULTED_FUNCTIONS) || \ - defined(BOOST_NO_CXX11_HDR_SYSTEM_ERROR) - -BOOST_PRAGMA_MESSAGE("C++03 support was deprecated in Boost.System 1.82 and will be removed in Boost.System 1.85.") - -#endif - -#endif // #ifndef BOOST_SYSTEM_DETAIL_REQUIRES_CXX11_HPP_INCLUDED diff --git a/contrib/restricted/boost/system/include/boost/system/detail/snprintf.hpp b/contrib/restricted/boost/system/include/boost/system/detail/snprintf.hpp index f54a3514ff..b999dd9c99 100644 --- a/contrib/restricted/boost/system/include/boost/system/detail/snprintf.hpp +++ b/contrib/restricted/boost/system/include/boost/system/detail/snprintf.hpp @@ -8,66 +8,21 @@ // // See library home page at http://www.boost.org/libs/system -#include <boost/config.hpp> #include <cstdio> -#include <cstdarg> // namespace boost { - namespace system { - namespace detail { -#if ( defined(_MSC_VER) && _MSC_VER < 1900 ) || ( defined(__MINGW32__) && !defined(__MINGW64_VERSION_MAJOR) ) - -inline void snprintf( char * buffer, std::size_t len, char const * format, ... ) -{ -# if defined( BOOST_MSVC ) -# pragma warning( push ) -# pragma warning( disable: 4996 ) -# endif - - if( len == 0 ) return; - - va_list args; - va_start( args, format ); - - _vsnprintf( buffer, len - 1, format, args ); - buffer[ len - 1 ] = 0; - - va_end( args ); - -# if defined( BOOST_MSVC ) -# pragma warning( pop ) -# endif -} - -#else - -#if defined(__GNUC__) && __GNUC__ >= 3 -__attribute__((__format__ (__printf__, 3, 4))) -#endif -inline void snprintf( char * buffer, std::size_t len, char const * format, ... ) -{ - va_list args; - va_start( args, format ); - - std::vsnprintf( buffer, len, format, args ); - - va_end( args ); -} - -#endif +using std::snprintf; } // namespace detail - } // namespace system - } // namespace boost #endif // #ifndef BOOST_SYSTEM_DETAIL_SNPRINTF_HPP_INCLUDED diff --git a/contrib/restricted/boost/system/include/boost/system/detail/std_category.hpp b/contrib/restricted/boost/system/include/boost/system/detail/std_category.hpp index 68073c1b92..6aabc28149 100644 --- a/contrib/restricted/boost/system/include/boost/system/detail/std_category.hpp +++ b/contrib/restricted/boost/system/include/boost/system/detail/std_category.hpp @@ -35,7 +35,7 @@ private: public: - boost::system::error_category const & original_category() const BOOST_NOEXCEPT + boost::system::error_category const & original_category() const noexcept { return *pc_; } @@ -51,16 +51,12 @@ public: // here when Id != 0, but this should never happen now because this code // path is no longer used -#if !defined(BOOST_NO_CXX11_STATIC_ASSERT) - static_assert( Id == 0, "This constructor should only be called with Id == 0 under MS STL 14.0+" ); #endif - -#endif } - const char * name() const BOOST_NOEXCEPT BOOST_OVERRIDE + const char * name() const noexcept BOOST_OVERRIDE { return pc_->name(); } @@ -70,13 +66,13 @@ public: return pc_->message( ev ); } - std::error_condition default_error_condition( int ev ) const BOOST_NOEXCEPT BOOST_OVERRIDE + std::error_condition default_error_condition( int ev ) const noexcept BOOST_OVERRIDE { return pc_->default_error_condition( ev ); } - inline bool equivalent( int code, const std::error_condition & condition ) const BOOST_NOEXCEPT BOOST_OVERRIDE; - inline bool equivalent( const std::error_code & code, int condition ) const BOOST_NOEXCEPT BOOST_OVERRIDE; + inline bool equivalent( int code, const std::error_condition & condition ) const noexcept BOOST_OVERRIDE; + inline bool equivalent( const std::error_code & code, int condition ) const noexcept BOOST_OVERRIDE; }; } // namespace detail diff --git a/contrib/restricted/boost/system/include/boost/system/detail/std_category_impl.hpp b/contrib/restricted/boost/system/include/boost/system/detail/std_category_impl.hpp index 9dee5e7980..3843bd343c 100644 --- a/contrib/restricted/boost/system/include/boost/system/detail/std_category_impl.hpp +++ b/contrib/restricted/boost/system/include/boost/system/detail/std_category_impl.hpp @@ -26,7 +26,7 @@ namespace system namespace detail { -inline bool std_category::equivalent( int code, const std::error_condition & condition ) const BOOST_NOEXCEPT +inline bool std_category::equivalent( int code, const std::error_condition & condition ) const noexcept { if( condition.category() == *this ) { @@ -55,7 +55,7 @@ inline bool std_category::equivalent( int code, const std::error_condition & con } } -inline bool std_category::equivalent( const std::error_code & code, int condition ) const BOOST_NOEXCEPT +inline bool std_category::equivalent( const std::error_code & code, int condition ) const noexcept { if( code.category() == *this ) { diff --git a/contrib/restricted/boost/system/include/boost/system/detail/system_category.hpp b/contrib/restricted/boost/system/include/boost/system/detail/system_category.hpp index ae8c9530e0..260894d4f3 100644 --- a/contrib/restricted/boost/system/include/boost/system/detail/system_category.hpp +++ b/contrib/restricted/boost/system/include/boost/system/detail/system_category.hpp @@ -34,20 +34,20 @@ class BOOST_SYMBOL_VISIBLE system_error_category: public error_category { public: - BOOST_SYSTEM_CONSTEXPR system_error_category() BOOST_NOEXCEPT: + BOOST_SYSTEM_CONSTEXPR system_error_category() noexcept: error_category( detail::system_category_id ) { } - const char * name() const BOOST_NOEXCEPT BOOST_OVERRIDE + const char * name() const noexcept BOOST_OVERRIDE { return "system"; } - error_condition default_error_condition( int ev ) const BOOST_NOEXCEPT BOOST_OVERRIDE; + error_condition default_error_condition( int ev ) const noexcept BOOST_OVERRIDE; std::string message( int ev ) const BOOST_OVERRIDE; - char const * message( int ev, char * buffer, std::size_t len ) const BOOST_NOEXCEPT BOOST_OVERRIDE; + char const * message( int ev, char * buffer, std::size_t len ) const noexcept BOOST_OVERRIDE; }; #if ( defined( BOOST_GCC ) && BOOST_GCC >= 40600 ) || defined( BOOST_CLANG ) @@ -75,7 +75,7 @@ template<class T> constexpr system_error_category system_cat_holder<T>::instance } // namespace detail -constexpr error_category const & system_category() BOOST_NOEXCEPT +constexpr error_category const & system_category() noexcept { return detail::system_cat_holder<void>::instance; } @@ -83,10 +83,10 @@ constexpr error_category const & system_category() BOOST_NOEXCEPT #else // #if defined(BOOST_SYSTEM_HAS_CONSTEXPR) #if !defined(__SUNPRO_CC) // trailing __global is not supported -inline error_category const & system_category() BOOST_NOEXCEPT BOOST_SYMBOL_VISIBLE; +inline error_category const & system_category() noexcept BOOST_SYMBOL_VISIBLE; #endif -inline error_category const & system_category() BOOST_NOEXCEPT +inline error_category const & system_category() noexcept { static const detail::system_error_category instance; return instance; diff --git a/contrib/restricted/boost/system/include/boost/system/detail/system_category_condition_win32.hpp b/contrib/restricted/boost/system/include/boost/system/detail/system_category_condition_win32.hpp index 446a351942..a43d676662 100644 --- a/contrib/restricted/boost/system/include/boost/system/detail/system_category_condition_win32.hpp +++ b/contrib/restricted/boost/system/include/boost/system/detail/system_category_condition_win32.hpp @@ -25,7 +25,7 @@ namespace system namespace detail { -inline int system_category_condition_win32( int ev ) BOOST_NOEXCEPT +inline int system_category_condition_win32( int ev ) noexcept { // When using the Windows Runtime, most system errors are reported as HRESULTs. // We want to map the common Win32 errors to their equivalent error condition, diff --git a/contrib/restricted/boost/system/include/boost/system/detail/system_category_impl.hpp b/contrib/restricted/boost/system/include/boost/system/detail/system_category_impl.hpp index fc3933e2fd..5da83f0b20 100644 --- a/contrib/restricted/boost/system/include/boost/system/detail/system_category_impl.hpp +++ b/contrib/restricted/boost/system/include/boost/system/detail/system_category_impl.hpp @@ -25,7 +25,7 @@ #include <boost/system/detail/system_category_condition_win32.hpp> -inline boost::system::error_condition boost::system::detail::system_error_category::default_error_condition( int ev ) const BOOST_NOEXCEPT +inline boost::system::error_condition boost::system::detail::system_error_category::default_error_condition( int ev ) const noexcept { int e2 = system_category_condition_win32( ev ); @@ -41,7 +41,7 @@ inline boost::system::error_condition boost::system::detail::system_error_catego #else // #if defined(BOOST_WINDOWS_API) -inline boost::system::error_condition boost::system::detail::system_error_category::default_error_condition( int ev ) const BOOST_NOEXCEPT +inline boost::system::error_condition boost::system::detail::system_error_category::default_error_condition( int ev ) const noexcept { return error_condition( boost::system::detail::generic_value_tag( ev ) ); } @@ -53,7 +53,7 @@ inline std::string boost::system::detail::system_error_category::message( int ev return system_error_category_message( ev ); } -inline char const * boost::system::detail::system_error_category::message( int ev, char * buffer, std::size_t len ) const BOOST_NOEXCEPT +inline char const * boost::system::detail::system_error_category::message( int ev, char * buffer, std::size_t len ) const noexcept { return system_error_category_message( ev, buffer, len ); } diff --git a/contrib/restricted/boost/system/include/boost/system/detail/system_category_message.hpp b/contrib/restricted/boost/system/include/boost/system/detail/system_category_message.hpp index 203e75aa9e..cd1437b004 100644 --- a/contrib/restricted/boost/system/include/boost/system/detail/system_category_message.hpp +++ b/contrib/restricted/boost/system/include/boost/system/detail/system_category_message.hpp @@ -32,7 +32,7 @@ inline std::string system_error_category_message( int ev ) return system_category_message_win32( ev ); } -inline char const * system_error_category_message( int ev, char * buffer, std::size_t len ) BOOST_NOEXCEPT +inline char const * system_error_category_message( int ev, char * buffer, std::size_t len ) noexcept { return system_category_message_win32( ev, buffer, len ); } @@ -57,7 +57,7 @@ inline std::string system_error_category_message( int ev ) return generic_error_category_message( ev ); } -inline char const * system_error_category_message( int ev, char * buffer, std::size_t len ) BOOST_NOEXCEPT +inline char const * system_error_category_message( int ev, char * buffer, std::size_t len ) noexcept { return generic_error_category_message( ev, buffer, len ); } diff --git a/contrib/restricted/boost/system/include/boost/system/detail/system_category_message_win32.hpp b/contrib/restricted/boost/system/include/boost/system/detail/system_category_message_win32.hpp index e5f544ccd9..73ff8947bc 100644 --- a/contrib/restricted/boost/system/include/boost/system/detail/system_category_message_win32.hpp +++ b/contrib/restricted/boost/system/include/boost/system/detail/system_category_message_win32.hpp @@ -47,7 +47,7 @@ inline boost::winapi::UINT_ message_cp_win32() #endif } -inline char const * system_category_message_win32( int ev, char * buffer, std::size_t len ) BOOST_NOEXCEPT +inline char const * system_category_message_win32( int ev, char * buffer, std::size_t len ) noexcept { if( len == 0 ) { diff --git a/contrib/restricted/boost/system/include/boost/system/errc.hpp b/contrib/restricted/boost/system/include/boost/system/errc.hpp index 2b642cd764..3e7cfc8d4b 100644 --- a/contrib/restricted/boost/system/include/boost/system/errc.hpp +++ b/contrib/restricted/boost/system/include/boost/system/errc.hpp @@ -31,19 +31,19 @@ namespace errc { // explicit conversion: -BOOST_SYSTEM_CONSTEXPR inline error_code make_error_code( errc_t e ) BOOST_NOEXCEPT +BOOST_SYSTEM_CONSTEXPR inline error_code make_error_code( errc_t e ) noexcept { return error_code( e, generic_category() ); } // explicit conversion: -inline error_code make_error_code( errc_t e, boost::source_location const * loc ) BOOST_NOEXCEPT +inline error_code make_error_code( errc_t e, boost::source_location const * loc ) noexcept { return error_code( e, generic_category(), loc ); } // implicit conversion: -BOOST_SYSTEM_CONSTEXPR inline error_condition make_error_condition( errc_t e ) BOOST_NOEXCEPT +BOOST_SYSTEM_CONSTEXPR inline error_condition make_error_condition( errc_t e ) noexcept { return error_condition( e, generic_category() ); } diff --git a/contrib/restricted/boost/system/include/boost/system/system_error.hpp b/contrib/restricted/boost/system/include/boost/system/system_error.hpp index 09d65e2ac6..7d6d8b60b7 100644 --- a/contrib/restricted/boost/system/include/boost/system/system_error.hpp +++ b/contrib/restricted/boost/system/include/boost/system/system_error.hpp @@ -43,7 +43,7 @@ public: system_error( int ev, error_category const & ecat, char const * prefix ): std::runtime_error( std::string( prefix ) + ": " + error_code( ev, ecat ).what() ), code_( ev, ecat ) {} - error_code code() const BOOST_NOEXCEPT + error_code code() const noexcept { return code_; } diff --git a/contrib/restricted/boost/system/ya.make b/contrib/restricted/boost/system/ya.make index 483476895f..9582ac8e7d 100644 --- a/contrib/restricted/boost/system/ya.make +++ b/contrib/restricted/boost/system/ya.make @@ -6,9 +6,9 @@ LICENSE(BSL-1.0) LICENSE_TEXTS(.yandex_meta/licenses.list.txt) -VERSION(1.84.0) +VERSION(1.85.0) -ORIGINAL_SOURCE(https://github.com/boostorg/system/archive/boost-1.84.0.tar.gz) +ORIGINAL_SOURCE(https://github.com/boostorg/system/archive/boost-1.85.0.tar.gz) PEERDIR( contrib/restricted/boost/assert diff --git a/contrib/restricted/boost/throw_exception/include/boost/exception/exception.hpp b/contrib/restricted/boost/throw_exception/include/boost/exception/exception.hpp index ca8d83359a..4ec18d7d39 100644 --- a/contrib/restricted/boost/throw_exception/include/boost/exception/exception.hpp +++ b/contrib/restricted/boost/throw_exception/include/boost/exception/exception.hpp @@ -19,7 +19,7 @@ namespace boost { namespace exception_detail { using boost::shared_ptr; } } #endif #if !defined(BOOST_EXCEPTION_ENABLE_WARNINGS) -#if __GNUC__*100+__GNUC_MINOR__>301 +#if defined(__GNUC__) && __GNUC__*100+__GNUC_MINOR__>301 #pragma GCC system_header #endif #ifdef __clang__ diff --git a/contrib/restricted/boost/throw_exception/ya.make b/contrib/restricted/boost/throw_exception/ya.make index 97e7af4761..19a60acdb0 100644 --- a/contrib/restricted/boost/throw_exception/ya.make +++ b/contrib/restricted/boost/throw_exception/ya.make @@ -6,9 +6,9 @@ LICENSE(BSL-1.0) LICENSE_TEXTS(.yandex_meta/licenses.list.txt) -VERSION(1.84.0) +VERSION(1.85.0) -ORIGINAL_SOURCE(https://github.com/boostorg/throw_exception/archive/boost-1.84.0.tar.gz) +ORIGINAL_SOURCE(https://github.com/boostorg/throw_exception/archive/boost-1.85.0.tar.gz) PEERDIR( contrib/restricted/boost/assert diff --git a/contrib/restricted/boost/type_index/include/boost/type_index.hpp b/contrib/restricted/boost/type_index/include/boost/type_index.hpp index a37d0e16ee..593f33c056 100644 --- a/contrib/restricted/boost/type_index/include/boost/type_index.hpp +++ b/contrib/restricted/boost/type_index/include/boost/type_index.hpp @@ -1,5 +1,5 @@ // -// Copyright 2012-2023 Antony Polukhin. +// Copyright 2012-2024 Antony Polukhin. // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/contrib/restricted/boost/type_index/include/boost/type_index/ctti_type_index.hpp b/contrib/restricted/boost/type_index/include/boost/type_index/ctti_type_index.hpp index d6717f3b8c..f54a4faf90 100644 --- a/contrib/restricted/boost/type_index/include/boost/type_index/ctti_type_index.hpp +++ b/contrib/restricted/boost/type_index/include/boost/type_index/ctti_type_index.hpp @@ -1,5 +1,5 @@ // -// Copyright 2013-2023 Antony Polukhin. +// Copyright 2013-2024 Antony Polukhin. // // // Distributed under the Boost Software License, Version 1.0. (See accompanying diff --git a/contrib/restricted/boost/type_index/include/boost/type_index/detail/compile_time_type_info.hpp b/contrib/restricted/boost/type_index/include/boost/type_index/detail/compile_time_type_info.hpp index 9d6129a8d0..236c4ab79b 100644 --- a/contrib/restricted/boost/type_index/include/boost/type_index/detail/compile_time_type_info.hpp +++ b/contrib/restricted/boost/type_index/include/boost/type_index/detail/compile_time_type_info.hpp @@ -1,5 +1,5 @@ // -// Copyright 2012-2023 Antony Polukhin. +// Copyright 2012-2024 Antony Polukhin. // // // Distributed under the Boost Software License, Version 1.0. (See accompanying diff --git a/contrib/restricted/boost/type_index/include/boost/type_index/detail/ctti_register_class.hpp b/contrib/restricted/boost/type_index/include/boost/type_index/detail/ctti_register_class.hpp index 9c69d49c6a..57e55d9c64 100644 --- a/contrib/restricted/boost/type_index/include/boost/type_index/detail/ctti_register_class.hpp +++ b/contrib/restricted/boost/type_index/include/boost/type_index/detail/ctti_register_class.hpp @@ -1,5 +1,5 @@ // -// Copyright 2013-2023 Antony Polukhin. +// Copyright 2013-2024 Antony Polukhin. // // // Distributed under the Boost Software License, Version 1.0. (See accompanying diff --git a/contrib/restricted/boost/type_index/include/boost/type_index/detail/stl_register_class.hpp b/contrib/restricted/boost/type_index/include/boost/type_index/detail/stl_register_class.hpp index 20eb818af9..ee4a64f064 100644 --- a/contrib/restricted/boost/type_index/include/boost/type_index/detail/stl_register_class.hpp +++ b/contrib/restricted/boost/type_index/include/boost/type_index/detail/stl_register_class.hpp @@ -1,5 +1,5 @@ // -// Copyright 2013-2023 Antony Polukhin. +// Copyright 2013-2024 Antony Polukhin. // // // Distributed under the Boost Software License, Version 1.0. (See accompanying diff --git a/contrib/restricted/boost/type_index/include/boost/type_index/stl_type_index.hpp b/contrib/restricted/boost/type_index/include/boost/type_index/stl_type_index.hpp index 66d66e238e..3e86e04a27 100644 --- a/contrib/restricted/boost/type_index/include/boost/type_index/stl_type_index.hpp +++ b/contrib/restricted/boost/type_index/include/boost/type_index/stl_type_index.hpp @@ -1,5 +1,5 @@ // -// Copyright 2013-2023 Antony Polukhin. +// Copyright 2013-2024 Antony Polukhin. // // // Distributed under the Boost Software License, Version 1.0. (See accompanying diff --git a/contrib/restricted/boost/type_index/include/boost/type_index/type_index_facade.hpp b/contrib/restricted/boost/type_index/include/boost/type_index/type_index_facade.hpp index e4691af80b..421e06b1cb 100644 --- a/contrib/restricted/boost/type_index/include/boost/type_index/type_index_facade.hpp +++ b/contrib/restricted/boost/type_index/include/boost/type_index/type_index_facade.hpp @@ -1,5 +1,5 @@ // -// Copyright 2013-2023 Antony Polukhin. +// Copyright 2013-2024 Antony Polukhin. // // // Distributed under the Boost Software License, Version 1.0. (See accompanying diff --git a/contrib/restricted/boost/type_index/ya.make b/contrib/restricted/boost/type_index/ya.make index ca4428511a..aec020ea0c 100644 --- a/contrib/restricted/boost/type_index/ya.make +++ b/contrib/restricted/boost/type_index/ya.make @@ -6,9 +6,9 @@ LICENSE(BSL-1.0) LICENSE_TEXTS(.yandex_meta/licenses.list.txt) -VERSION(1.84.0) +VERSION(1.85.0) -ORIGINAL_SOURCE(https://github.com/boostorg/type_index/archive/boost-1.84.0.tar.gz) +ORIGINAL_SOURCE(https://github.com/boostorg/type_index/archive/boost-1.85.0.tar.gz) PEERDIR( contrib/restricted/boost/config diff --git a/contrib/restricted/boost/utility/ya.make b/contrib/restricted/boost/utility/ya.make index c4ef4db25c..94da4d7347 100644 --- a/contrib/restricted/boost/utility/ya.make +++ b/contrib/restricted/boost/utility/ya.make @@ -6,9 +6,9 @@ LICENSE(BSL-1.0) LICENSE_TEXTS(.yandex_meta/licenses.list.txt) -VERSION(1.84.0) +VERSION(1.85.0) -ORIGINAL_SOURCE(https://github.com/boostorg/utility/archive/boost-1.84.0.tar.gz) +ORIGINAL_SOURCE(https://github.com/boostorg/utility/archive/boost-1.85.0.tar.gz) PEERDIR( contrib/restricted/boost/config diff --git a/contrib/restricted/boost/variant/include/boost/variant/detail/apply_visitor_binary.hpp b/contrib/restricted/boost/variant/include/boost/variant/detail/apply_visitor_binary.hpp index 32c128bf42..1b1016c684 100644 --- a/contrib/restricted/boost/variant/include/boost/variant/detail/apply_visitor_binary.hpp +++ b/contrib/restricted/boost/variant/include/boost/variant/detail/apply_visitor_binary.hpp @@ -4,7 +4,7 @@ //----------------------------------------------------------------------------- // // Copyright (c) 2002-2003 Eric Friedman -// Copyright (c) 2014-2023 Antony Polukhin +// Copyright (c) 2014-2024 Antony Polukhin // // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at diff --git a/contrib/restricted/boost/variant/include/boost/variant/detail/apply_visitor_unary.hpp b/contrib/restricted/boost/variant/include/boost/variant/detail/apply_visitor_unary.hpp index c34c0e9b36..dc73f90af2 100644 --- a/contrib/restricted/boost/variant/include/boost/variant/detail/apply_visitor_unary.hpp +++ b/contrib/restricted/boost/variant/include/boost/variant/detail/apply_visitor_unary.hpp @@ -4,7 +4,7 @@ //----------------------------------------------------------------------------- // // Copyright (c) 2002-2003 Eric Friedman -// Copyright (c) 2014-2023 Antony Polukhin +// Copyright (c) 2014-2024 Antony Polukhin // // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at diff --git a/contrib/restricted/boost/variant/include/boost/variant/detail/config.hpp b/contrib/restricted/boost/variant/include/boost/variant/detail/config.hpp index da76fe2a65..236cc982f2 100644 --- a/contrib/restricted/boost/variant/include/boost/variant/detail/config.hpp +++ b/contrib/restricted/boost/variant/include/boost/variant/detail/config.hpp @@ -4,7 +4,7 @@ //----------------------------------------------------------------------------- // // Copyright (c) 2003 Eric Friedman -// Copyright (c) 2016-2023 Antony Polukhin +// Copyright (c) 2016-2024 Antony Polukhin // // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at diff --git a/contrib/restricted/boost/variant/include/boost/variant/detail/element_index.hpp b/contrib/restricted/boost/variant/include/boost/variant/detail/element_index.hpp index 06cf06d773..8b529cb702 100644 --- a/contrib/restricted/boost/variant/include/boost/variant/detail/element_index.hpp +++ b/contrib/restricted/boost/variant/include/boost/variant/detail/element_index.hpp @@ -3,7 +3,7 @@ // See http://www.boost.org for updates, documentation, and revision history. //----------------------------------------------------------------------------- // -// Copyright (c) 2014-2023 Antony Polukhin +// Copyright (c) 2014-2024 Antony Polukhin // // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at diff --git a/contrib/restricted/boost/variant/include/boost/variant/detail/forced_return.hpp b/contrib/restricted/boost/variant/include/boost/variant/detail/forced_return.hpp index 6d8911b109..75904f8458 100644 --- a/contrib/restricted/boost/variant/include/boost/variant/detail/forced_return.hpp +++ b/contrib/restricted/boost/variant/include/boost/variant/detail/forced_return.hpp @@ -4,7 +4,7 @@ //----------------------------------------------------------------------------- // // Copyright (c) 2003 Eric Friedman -// Copyright (c) 2015-2023 Antony Polukhin +// Copyright (c) 2015-2024 Antony Polukhin // // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at diff --git a/contrib/restricted/boost/variant/include/boost/variant/detail/has_result_type.hpp b/contrib/restricted/boost/variant/include/boost/variant/detail/has_result_type.hpp index e1ca5b4023..973b36d2f2 100644 --- a/contrib/restricted/boost/variant/include/boost/variant/detail/has_result_type.hpp +++ b/contrib/restricted/boost/variant/include/boost/variant/detail/has_result_type.hpp @@ -3,7 +3,7 @@ // See http://www.boost.org for updates, documentation, and revision history. //----------------------------------------------------------------------------- // -// Copyright (c) 2014-2023 Antony Polukhin +// Copyright (c) 2014-2024 Antony Polukhin // // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at diff --git a/contrib/restricted/boost/variant/include/boost/variant/detail/hash_variant.hpp b/contrib/restricted/boost/variant/include/boost/variant/detail/hash_variant.hpp index 4eb8377213..469bc81b02 100644 --- a/contrib/restricted/boost/variant/include/boost/variant/detail/hash_variant.hpp +++ b/contrib/restricted/boost/variant/include/boost/variant/detail/hash_variant.hpp @@ -3,7 +3,7 @@ // See http://www.boost.org for updates, documentation, and revision history. //----------------------------------------------------------------------------- // -// Copyright (c) 2011-2023 Antony Polukhin +// Copyright (c) 2011-2024 Antony Polukhin // // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at diff --git a/contrib/restricted/boost/variant/include/boost/variant/detail/initializer.hpp b/contrib/restricted/boost/variant/include/boost/variant/detail/initializer.hpp index 4a54c273c2..331f375b7c 100644 --- a/contrib/restricted/boost/variant/include/boost/variant/detail/initializer.hpp +++ b/contrib/restricted/boost/variant/include/boost/variant/detail/initializer.hpp @@ -22,7 +22,6 @@ #include <boost/variant/recursive_wrapper_fwd.hpp> #include <boost/variant/detail/move.hpp> -#if !defined(BOOST_NO_USING_DECLARATION_OVERLOADS_FROM_TYPENAME_BASE) # include <boost/mpl/aux_/value_wknd.hpp> # include <boost/mpl/int.hpp> # include <boost/mpl/iter_fold.hpp> @@ -30,12 +29,7 @@ # include <boost/mpl/deref.hpp> # include <boost/mpl/pair.hpp> # include <boost/mpl/protect.hpp> -#else -# include <boost/variant/variant_fwd.hpp> -# include <boost/preprocessor/cat.hpp> -# include <boost/preprocessor/enum.hpp> -# include <boost/preprocessor/repeat.hpp> -#endif + namespace boost { namespace detail { namespace variant { @@ -53,8 +47,6 @@ namespace detail { namespace variant { // size of the variant's psuedo-variadic template parameter list. // -#if !defined(BOOST_NO_USING_DECLARATION_OVERLOADS_FROM_TYPENAME_BASE) - // (detail) quoted metafunction make_initializer_node // // Exposes a pair whose first type is a node in the initializer hierarchy. @@ -81,7 +73,6 @@ struct make_initializer_node typedef typename unwrap_recursive<recursive_enabled_T>::type public_T; -#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES typedef boost::is_reference<public_T> is_reference_content_t; @@ -92,10 +83,6 @@ struct make_initializer_node typedef typename boost::mpl::if_<is_reference_content_t, disable_overload<public_T>, public_T&& >::type param2_T; -#else - typedef typename call_traits<public_T>::param_type - param_T; -#endif public: // static functions @@ -111,7 +98,6 @@ struct make_initializer_node return BOOST_MPL_AUX_VALUE_WKND(index)::value; // which } -#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES static int initialize(void* dest, param2_T operand) { // This assert must newer trigger, because all the reference contents are @@ -122,7 +108,6 @@ struct make_initializer_node new(dest) value_T( boost::detail::variant::move(operand) ); return BOOST_MPL_AUX_VALUE_WKND(index)::value; // which } -#endif }; friend class initializer_node; @@ -150,61 +135,6 @@ public: // static functions }; -#else // defined(BOOST_NO_USING_DECLARATION_OVERLOADS_FROM_TYPENAME_BASE) - - // Obsolete. Remove. - #define BOOST_VARIANT_AUX_PP_INITIALIZER_TEMPLATE_PARAMS \ - BOOST_VARIANT_ENUM_PARAMS(typename recursive_enabled_T) \ - /**/ - - // Obsolete. Remove. - #define BOOST_VARIANT_AUX_PP_INITIALIZER_DEFINE_PARAM_T(N) \ - typedef typename unwrap_recursive< \ - BOOST_PP_CAT(recursive_enabled_T,N) \ - >::type BOOST_PP_CAT(public_T,N); \ - typedef typename call_traits< \ - BOOST_PP_CAT(public_T,N) \ - >::param_type BOOST_PP_CAT(param_T,N); \ - /**/ - -template < BOOST_VARIANT_ENUM_PARAMS(typename recursive_enabled_T) > -struct preprocessor_list_initializer -{ -public: // static functions - - #define BOOST_VARIANT_AUX_PP_INITIALIZE_FUNCTION(z,N,_) \ - typedef typename unwrap_recursive< \ - BOOST_PP_CAT(recursive_enabled_T,N) \ - >::type BOOST_PP_CAT(public_T,N); \ - typedef typename call_traits< \ - BOOST_PP_CAT(public_T,N) \ - >::param_type BOOST_PP_CAT(param_T,N); \ - static int initialize( \ - void* dest \ - , BOOST_PP_CAT(param_T,N) operand \ - ) \ - { \ - typedef typename boost::detail::make_reference_content< \ - BOOST_PP_CAT(recursive_enabled_T,N) \ - >::type internal_T; \ - \ - new(dest) internal_T(operand); \ - return (N); /*which*/ \ - } \ - /**/ - - BOOST_PP_REPEAT( - BOOST_VARIANT_LIMIT_TYPES - , BOOST_VARIANT_AUX_PP_INITIALIZE_FUNCTION - , _ - ) - - #undef BOOST_VARIANT_AUX_PP_INITIALIZE_FUNCTION - -}; - -#endif // BOOST_NO_USING_DECLARATION_OVERLOADS_FROM_TYPENAME_BASE workaround - }} // namespace detail::variant } // namespace boost @@ -216,8 +146,6 @@ public: // static functions // most appropriate to the current compiler. // -#if !defined(BOOST_NO_USING_DECLARATION_OVERLOADS_FROM_TYPENAME_BASE) - #define BOOST_VARIANT_AUX_INITIALIZER_T( mpl_seq, typename_base ) \ ::boost::mpl::iter_fold< \ mpl_seq \ @@ -231,19 +159,4 @@ public: // static functions >::type::first \ /**/ -#else // defined(BOOST_NO_USING_DECLARATION_OVERLOADS_FROM_TYPENAME_BASE) - - // Obsolete. Remove. - #define BOOST_VARIANT_AUX_PP_INITIALIZER_TEMPLATE_ARGS(typename_base) \ - BOOST_VARIANT_ENUM_PARAMS(typename_base) \ - /**/ - -#define BOOST_VARIANT_AUX_INITIALIZER_T( mpl_seq, typename_base ) \ - ::boost::detail::variant::preprocessor_list_initializer< \ - BOOST_VARIANT_ENUM_PARAMS(typename_base) \ - > \ - /**/ - -#endif // BOOST_NO_USING_DECLARATION_OVERLOADS_FROM_TYPENAME_BASE workaround - #endif // BOOST_VARIANT_DETAIL_INITIALIZER_HPP diff --git a/contrib/restricted/boost/variant/include/boost/variant/detail/make_variant_list.hpp b/contrib/restricted/boost/variant/include/boost/variant/detail/make_variant_list.hpp index d6ad8e99a8..eafe1cb787 100644 --- a/contrib/restricted/boost/variant/include/boost/variant/detail/make_variant_list.hpp +++ b/contrib/restricted/boost/variant/include/boost/variant/detail/make_variant_list.hpp @@ -4,7 +4,7 @@ //----------------------------------------------------------------------------- // // Copyright (c) 2002-2003 Eric Friedman, Itay Maman -// Copyright (c) 2013-2023 Antony Polukhin +// Copyright (c) 2013-2024 Antony Polukhin // // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at diff --git a/contrib/restricted/boost/variant/include/boost/variant/detail/move.hpp b/contrib/restricted/boost/variant/include/boost/variant/detail/move.hpp index b8eafd64cd..9788e1331e 100644 --- a/contrib/restricted/boost/variant/include/boost/variant/detail/move.hpp +++ b/contrib/restricted/boost/variant/include/boost/variant/detail/move.hpp @@ -5,7 +5,7 @@ // // Copyright (c) 2002-2003 Eric Friedman // Copyright (c) 2002 by Andrei Alexandrescu -// Copyright (c) 2013-2023 Antony Polukhin +// Copyright (c) 2013-2024 Antony Polukhin // // Use, modification and distribution are subject to the // Boost Software License, Version 1.0. (See accompanying file diff --git a/contrib/restricted/boost/variant/include/boost/variant/detail/std_hash.hpp b/contrib/restricted/boost/variant/include/boost/variant/detail/std_hash.hpp index 3e05c5c900..7335902e71 100644 --- a/contrib/restricted/boost/variant/include/boost/variant/detail/std_hash.hpp +++ b/contrib/restricted/boost/variant/include/boost/variant/detail/std_hash.hpp @@ -3,7 +3,7 @@ // See http://www.boost.org for updates, documentation, and revision history. //----------------------------------------------------------------------------- // -// Copyright (c) 2018-2023 Antony Polukhin +// Copyright (c) 2018-2024 Antony Polukhin // // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at diff --git a/contrib/restricted/boost/variant/include/boost/variant/detail/substitute.hpp b/contrib/restricted/boost/variant/include/boost/variant/detail/substitute.hpp index f8c05b8a27..213259d72a 100644 --- a/contrib/restricted/boost/variant/include/boost/variant/detail/substitute.hpp +++ b/contrib/restricted/boost/variant/include/boost/variant/detail/substitute.hpp @@ -22,10 +22,7 @@ #include <boost/mpl/aux_/preprocessor/repeat.hpp> #include <boost/mpl/int_fwd.hpp> #include <boost/mpl/limits/arity.hpp> -#include <boost/preprocessor/cat.hpp> #include <boost/preprocessor/empty.hpp> -#include <boost/preprocessor/arithmetic/inc.hpp> -#include <boost/preprocessor/iterate.hpp> namespace boost { namespace detail { namespace variant { diff --git a/contrib/restricted/boost/variant/include/boost/variant/detail/variant_io.hpp b/contrib/restricted/boost/variant/include/boost/variant/detail/variant_io.hpp index 63df74f24b..9e560f4e51 100644 --- a/contrib/restricted/boost/variant/include/boost/variant/detail/variant_io.hpp +++ b/contrib/restricted/boost/variant/include/boost/variant/detail/variant_io.hpp @@ -16,8 +16,6 @@ #include <iosfwd> // for std::basic_ostream forward declare #include <boost/variant/variant_fwd.hpp> - -#include <boost/detail/templated_streams.hpp> #include <boost/variant/static_visitor.hpp> namespace boost { @@ -29,14 +27,9 @@ namespace boost { // // forward declare (allows output of embedded variant< variant< ... >, ... >) -template < - BOOST_TEMPLATED_STREAM_ARGS(E,T) - BOOST_TEMPLATED_STREAM_COMMA - BOOST_VARIANT_ENUM_PARAMS(typename U) - > -inline BOOST_TEMPLATED_STREAM(ostream, E,T)& operator<<( - BOOST_TEMPLATED_STREAM(ostream, E,T)& out - , const variant< BOOST_VARIANT_ENUM_PARAMS(U) >& rhs +template <class CharT, class Trait, typename... U> +inline std::basic_ostream<CharT, Trait>& operator<<( + std::basic_ostream<CharT, Trait>& out, const variant<U...>& rhs ); namespace detail { namespace variant { @@ -71,18 +64,13 @@ private: }} // namespace detail::variant -template < - BOOST_TEMPLATED_STREAM_ARGS(E,T) - BOOST_TEMPLATED_STREAM_COMMA - BOOST_VARIANT_ENUM_PARAMS(typename U) - > -inline BOOST_TEMPLATED_STREAM(ostream, E,T)& operator<<( - BOOST_TEMPLATED_STREAM(ostream, E,T)& out - , const variant< BOOST_VARIANT_ENUM_PARAMS(U) >& rhs +template <class CharT, class Trait, typename... U> +inline std::basic_ostream<CharT, Trait>& operator<<( + std::basic_ostream<CharT, Trait>& out, const variant<U...>& rhs ) { detail::variant::printer< - BOOST_TEMPLATED_STREAM(ostream, E,T) + std::basic_ostream<CharT, Trait> > visitor(out); rhs.apply_visitor(visitor); diff --git a/contrib/restricted/boost/variant/include/boost/variant/detail/visitation_impl.hpp b/contrib/restricted/boost/variant/include/boost/variant/detail/visitation_impl.hpp index 862d839800..13fa9214d3 100644 --- a/contrib/restricted/boost/variant/include/boost/variant/detail/visitation_impl.hpp +++ b/contrib/restricted/boost/variant/include/boost/variant/detail/visitation_impl.hpp @@ -53,13 +53,6 @@ #endif -// Define a compiler generic null pointer value -#if defined(BOOST_NO_CXX11_NULLPTR) -#define BOOST_VARIANT_NULL 0 -#else -#define BOOST_VARIANT_NULL nullptr -#endif - namespace boost { namespace detail { namespace variant { @@ -179,7 +172,7 @@ inline typename Visitor::result_type visitation_impl( int, int, Visitor&, VPCV , mpl::true_ // is_apply_visitor_unrolled - , NBF, W* = BOOST_VARIANT_NULL, S* = BOOST_VARIANT_NULL + , NBF, W* = nullptr, S* = nullptr ) { // should never be here at runtime! @@ -198,7 +191,7 @@ visitation_impl( , Visitor& visitor, VoidPtrCV storage , mpl::false_ // is_apply_visitor_unrolled , NoBackupFlag no_backup_flag - , Which* = BOOST_VARIANT_NULL, step0* = BOOST_VARIANT_NULL + , Which* = nullptr, step0* = nullptr ) { // Typedef apply_visitor_unrolled steps and associated types... diff --git a/contrib/restricted/boost/variant/include/boost/variant/get.hpp b/contrib/restricted/boost/variant/include/boost/variant/get.hpp index 62fca60c9e..085c6f23d5 100644 --- a/contrib/restricted/boost/variant/include/boost/variant/get.hpp +++ b/contrib/restricted/boost/variant/include/boost/variant/get.hpp @@ -4,7 +4,7 @@ //----------------------------------------------------------------------------- // // Copyright (c) 2003 Eric Friedman, Itay Maman -// Copyright (c) 2014-2023 Antony Polukhin +// Copyright (c) 2014-2024 Antony Polukhin // // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at diff --git a/contrib/restricted/boost/variant/include/boost/variant/recursive_variant.hpp b/contrib/restricted/boost/variant/include/boost/variant/recursive_variant.hpp index 96ae087460..d68e202da4 100644 --- a/contrib/restricted/boost/variant/include/boost/variant/recursive_variant.hpp +++ b/contrib/restricted/boost/variant/include/boost/variant/recursive_variant.hpp @@ -4,7 +4,7 @@ //----------------------------------------------------------------------------- // // Copyright (c) 2003 Eric Friedman -// Copyright (c) 2013-2023 Antony Polukhin +// Copyright (c) 2013-2024 Antony Polukhin // // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at diff --git a/contrib/restricted/boost/variant/include/boost/variant/recursive_wrapper_fwd.hpp b/contrib/restricted/boost/variant/include/boost/variant/recursive_wrapper_fwd.hpp index b5d7e71952..b8b59ee600 100644 --- a/contrib/restricted/boost/variant/include/boost/variant/recursive_wrapper_fwd.hpp +++ b/contrib/restricted/boost/variant/include/boost/variant/recursive_wrapper_fwd.hpp @@ -4,7 +4,7 @@ //----------------------------------------------------------------------------- // // Copyright (c) 2002 Eric Friedman, Itay Maman -// Copyright (c) 2016-2023 Antony Polukhin +// Copyright (c) 2016-2024 Antony Polukhin // // Portions Copyright (C) 2002 David Abrahams // diff --git a/contrib/restricted/boost/variant/include/boost/variant/variant.hpp b/contrib/restricted/boost/variant/include/boost/variant/variant.hpp index 44657f0e5f..f28a012049 100644 --- a/contrib/restricted/boost/variant/include/boost/variant/variant.hpp +++ b/contrib/restricted/boost/variant/include/boost/variant/variant.hpp @@ -4,7 +4,7 @@ //----------------------------------------------------------------------------- // // Copyright (c) 2002-2003 Eric Friedman, Itay Maman -// Copyright (c) 2012-2023 Antony Polukhin +// Copyright (c) 2012-2024 Antony Polukhin // // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at @@ -40,8 +40,6 @@ #include <boost/blank.hpp> #include <boost/integer/common_factor_ct.hpp> #include <boost/static_assert.hpp> -#include <boost/preprocessor/cat.hpp> -#include <boost/preprocessor/repeat.hpp> #include <boost/type_traits/aligned_storage.hpp> #include <boost/type_traits/alignment_of.hpp> #include <boost/type_traits/add_const.hpp> @@ -1096,8 +1094,6 @@ private: // helpers, for typedefs (below) { }; -#if !defined(BOOST_VARIANT_NO_TYPE_SEQUENCE_SUPPORT) - private: // helpers, for typedefs (below) typedef typename mpl::eval_if< @@ -1141,82 +1137,6 @@ private: // internal typedefs internal_types >::type internal_T0; -#else // defined(BOOST_VARIANT_NO_TYPE_SEQUENCE_SUPPORT) - -private: // helpers, for typedefs (below) - - typedef unwrapped_T0_ T0; - - #define BOOST_VARIANT_AUX_ENABLE_RECURSIVE_TYPEDEFS(z,N,_) \ - typedef typename mpl::eval_if< \ - is_recursive_ \ - , detail::variant::enable_recursive< \ - BOOST_PP_CAT(T,N) \ - , wknd_self_t \ - > \ - , mpl::identity< BOOST_PP_CAT(T,N) > \ - >::type BOOST_PP_CAT(recursive_enabled_T,N); \ - /**/ - - BOOST_PP_REPEAT( - BOOST_VARIANT_LIMIT_TYPES - , BOOST_VARIANT_AUX_ENABLE_RECURSIVE_TYPEDEFS - , _ - ) - - #undef BOOST_VARIANT_AUX_ENABLE_RECURSIVE_TYPEDEFS - - #define BOOST_VARIANT_AUX_UNWRAP_RECURSIVE_TYPEDEFS(z,N,_) \ - typedef typename unwrap_recursive< \ - BOOST_PP_CAT(recursive_enabled_T,N) \ - >::type BOOST_PP_CAT(public_T,N); \ - /**/ - - BOOST_PP_REPEAT( - BOOST_VARIANT_LIMIT_TYPES - , BOOST_VARIANT_AUX_UNWRAP_RECURSIVE_TYPEDEFS - , _ - ) - - #undef BOOST_VARIANT_AUX_UNWRAP_RECURSIVE_TYPEDEFS - -public: // public typedefs - - typedef typename detail::variant::make_variant_list< - BOOST_VARIANT_ENUM_PARAMS(public_T) - >::type types; - -private: // helpers, for internal typedefs (below) - - #define BOOST_VARIANT_AUX_MAKE_REFERENCE_CONTENT_TYPEDEFS(z,N,_) \ - typedef detail::make_reference_content< \ - BOOST_PP_CAT(recursive_enabled_T,N) \ - >::type BOOST_PP_CAT(internal_T,N); \ - /**/ - - BOOST_PP_REPEAT( - BOOST_VARIANT_LIMIT_TYPES - , BOOST_VARIANT_AUX_MAKE_REFERENCE_CONTENT_TYPEDEFS - , _ - ) - - #undef BOOST_VARIANT_AUX_MAKE_REFERENCE_CONTENT_TYPEDEFS - -private: // internal typedefs - - typedef typename detail::variant::make_variant_list< - BOOST_VARIANT_ENUM_PARAMS(internal_T) - >::type internal_types; - -private: // static precondition assertions - - // NOTE TO USER : - // variant< type-sequence > syntax is not supported on this compiler! - // - BOOST_MPL_ASSERT_NOT(( is_sequence_based_ )); - -#endif // BOOST_VARIANT_NO_TYPE_SEQUENCE_SUPPORT workaround - private: // helpers, for representation (below) typedef typename detail::variant::find_fallback_type< diff --git a/contrib/restricted/boost/variant/include/boost/variant/variant_fwd.hpp b/contrib/restricted/boost/variant/include/boost/variant/variant_fwd.hpp index 1484f204d9..c5f8002431 100644 --- a/contrib/restricted/boost/variant/include/boost/variant/variant_fwd.hpp +++ b/contrib/restricted/boost/variant/include/boost/variant/variant_fwd.hpp @@ -4,7 +4,7 @@ //----------------------------------------------------------------------------- // // Copyright (c) 2003 Eric Friedman, Itay Maman -// Copyright (c) 2013-2023 Antony Polukhin +// Copyright (c) 2013-2024 Antony Polukhin // // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at @@ -26,15 +26,6 @@ #include <boost/preprocessor/repeat.hpp> /////////////////////////////////////////////////////////////////////////////// -// macro BOOST_VARIANT_NO_TYPE_SEQUENCE_SUPPORT -// -// Defined if variant does not support make_variant_over (see below). -// -#if defined(BOOST_NO_USING_DECLARATION_OVERLOADS_FROM_TYPENAME_BASE) -# define BOOST_VARIANT_NO_TYPE_SEQUENCE_SUPPORT -#endif - -/////////////////////////////////////////////////////////////////////////////// // macro BOOST_VARIANT_NO_FULL_RECURSIVE_VARIANT_SUPPORT // // Defined if make_recursive_variant cannot be supported as documented. @@ -118,40 +109,6 @@ struct convert_void< void_ > typedef mpl::na type; }; -/////////////////////////////////////////////////////////////////////////////// -// (workaround) BOOST_NO_USING_DECLARATION_OVERLOADS_FROM_TYPENAME_BASE -// -// Needed to work around compilers that don't support using-declaration -// overloads. (See the variant::initializer workarounds below.) -// - -#if defined(BOOST_NO_USING_DECLARATION_OVERLOADS_FROM_TYPENAME_BASE) -// (detail) tags voidNN -- NN defined on [0, BOOST_VARIANT_LIMIT_TYPES) -// -// Defines void types that are each unique and specializations of -// convert_void that yields mpl::na for each voidNN type. -// - -#define BOOST_VARIANT_DETAIL_DEFINE_VOID_N(z,N,_) \ - struct BOOST_PP_CAT(void,N); \ - \ - template <> \ - struct convert_void< BOOST_PP_CAT(void,N) > \ - { \ - typedef mpl::na type; \ - }; \ - /**/ - -BOOST_PP_REPEAT( - BOOST_VARIANT_LIMIT_TYPES - , BOOST_VARIANT_DETAIL_DEFINE_VOID_N - , _ - ) - -#undef BOOST_VARIANT_DETAIL_DEFINE_VOID_N - -#endif // BOOST_NO_USING_DECLARATION_OVERLOADS_FROM_TYPENAME_BASE workaround - }} // namespace detail::variant #define BOOST_VARIANT_AUX_DECLARE_PARAMS BOOST_VARIANT_ENUM_PARAMS(typename T) diff --git a/contrib/restricted/boost/variant/ya.make b/contrib/restricted/boost/variant/ya.make index 3560dc18f1..3bb083267a 100644 --- a/contrib/restricted/boost/variant/ya.make +++ b/contrib/restricted/boost/variant/ya.make @@ -6,9 +6,9 @@ LICENSE(BSL-1.0) LICENSE_TEXTS(.yandex_meta/licenses.list.txt) -VERSION(1.84.0) +VERSION(1.85.0) -ORIGINAL_SOURCE(https://github.com/boostorg/variant/archive/boost-1.84.0.tar.gz) +ORIGINAL_SOURCE(https://github.com/boostorg/variant/archive/boost-1.85.0.tar.gz) PEERDIR( contrib/restricted/boost/assert diff --git a/contrib/restricted/boost/variant2/ya.make b/contrib/restricted/boost/variant2/ya.make index 76920a5d60..c1a34411e5 100644 --- a/contrib/restricted/boost/variant2/ya.make +++ b/contrib/restricted/boost/variant2/ya.make @@ -6,9 +6,9 @@ LICENSE(BSL-1.0) LICENSE_TEXTS(.yandex_meta/licenses.list.txt) -VERSION(1.84.0) +VERSION(1.85.0) -ORIGINAL_SOURCE(https://github.com/boostorg/variant2/archive/boost-1.84.0.tar.gz) +ORIGINAL_SOURCE(https://github.com/boostorg/variant2/archive/boost-1.85.0.tar.gz) PEERDIR( contrib/restricted/boost/assert diff --git a/contrib/tools/cython/Cython/ya.make b/contrib/tools/cython/Cython/ya.make index 084b2bf945..1bbc2d4804 100644 --- a/contrib/tools/cython/Cython/ya.make +++ b/contrib/tools/cython/Cython/ya.make @@ -6,7 +6,7 @@ LICENSE_TEXTS(.yandex_meta/licenses.list.txt) WITHOUT_LICENSE_TEXTS() -OWNER(g:yatool) +SUBSCRIBER(g:yatool) NO_LINT() diff --git a/contrib/tools/cython/ya.make b/contrib/tools/cython/ya.make index 4546638bd5..3e215be0c7 100644 --- a/contrib/tools/cython/ya.make +++ b/contrib/tools/cython/ya.make @@ -9,7 +9,7 @@ LICENSE( LICENSE_TEXTS(.yandex_meta/licenses.list.txt) -OWNER(g:python-contrib) +SUBSCRIBER(g:python-contrib) VERSION(0.29.37) diff --git a/contrib/tools/protoc_old/resources.json b/contrib/tools/protoc_old/resources.json deleted file mode 100644 index 78e8cf3696..0000000000 --- a/contrib/tools/protoc_old/resources.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "by_platform": { - "darwin": { - "uri": "sbr:5841615385" - }, - "darwin-arm64": { - "uri": "sbr:5841614302" - }, - "linux": { - "uri": "sbr:5841616607" - }, - "win32": { - "uri": "sbr:5841613390" - } - } -} diff --git a/contrib/tools/protoc_old/ya.make b/contrib/tools/protoc_old/ya.make deleted file mode 100644 index 97296084ee..0000000000 --- a/contrib/tools/protoc_old/ya.make +++ /dev/null @@ -1 +0,0 @@ -INCLUDE(ya.make.prebuilt) diff --git a/contrib/tools/protoc_old/ya.make.induced_deps b/contrib/tools/protoc_old/ya.make.induced_deps deleted file mode 100644 index 55ede44772..0000000000 --- a/contrib/tools/protoc_old/ya.make.induced_deps +++ /dev/null @@ -1,30 +0,0 @@ -INDUCED_DEPS(cpp - ${ARCADIA_ROOT}/contrib/libs/protobuf/src/google/protobuf/descriptor.h - ${ARCADIA_ROOT}/contrib/libs/protobuf/src/google/protobuf/generated_message_reflection.h - ${ARCADIA_ROOT}/contrib/libs/protobuf/src/google/protobuf/io/coded_stream.h - ${ARCADIA_ROOT}/contrib/libs/protobuf/src/google/protobuf/reflection_ops.h - ${ARCADIA_ROOT}/contrib/libs/protobuf/src/google/protobuf/stubs/common.h - ${ARCADIA_ROOT}/contrib/libs/protobuf/src/google/protobuf/stubs/once.h - ${ARCADIA_ROOT}/contrib/libs/protobuf/src/google/protobuf/stubs/port.h - ${ARCADIA_ROOT}/contrib/libs/protobuf/src/google/protobuf/wire_format.h -) -INDUCED_DEPS(h+cpp - ${ARCADIA_ROOT}/contrib/libs/protobuf/src/google/protobuf/arena.h - ${ARCADIA_ROOT}/contrib/libs/protobuf/src/google/protobuf/arenastring.h - ${ARCADIA_ROOT}/contrib/libs/protobuf/src/google/protobuf/extension_set.h - ${ARCADIA_ROOT}/contrib/libs/protobuf/src/google/protobuf/generated_enum_reflection.h - ${ARCADIA_ROOT}/contrib/libs/protobuf/src/google/protobuf/generated_message_bases.h - ${ARCADIA_ROOT}/contrib/libs/protobuf/src/google/protobuf/generated_message_table_driven.h - ${ARCADIA_ROOT}/contrib/libs/protobuf/src/google/protobuf/generated_message_util.h - ${ARCADIA_ROOT}/contrib/libs/protobuf/src/google/protobuf/io/coded_stream.h - ${ARCADIA_ROOT}/contrib/libs/protobuf/src/google/protobuf/map.h - ${ARCADIA_ROOT}/contrib/libs/protobuf/src/google/protobuf/map_entry.h - ${ARCADIA_ROOT}/contrib/libs/protobuf/src/google/protobuf/map_field_inl.h - ${ARCADIA_ROOT}/contrib/libs/protobuf/src/google/protobuf/message.h - ${ARCADIA_ROOT}/contrib/libs/protobuf/src/google/protobuf/metadata_lite.h - ${ARCADIA_ROOT}/contrib/libs/protobuf/src/google/protobuf/port_def.inc - ${ARCADIA_ROOT}/contrib/libs/protobuf/src/google/protobuf/port_undef.inc - ${ARCADIA_ROOT}/contrib/libs/protobuf/src/google/protobuf/repeated_field.h - ${ARCADIA_ROOT}/contrib/libs/protobuf/src/google/protobuf/stubs/common.h - ${ARCADIA_ROOT}/contrib/libs/protobuf/src/google/protobuf/unknown_field_set.h -) diff --git a/contrib/tools/protoc_old/ya.make.prebuilt b/contrib/tools/protoc_old/ya.make.prebuilt deleted file mode 100644 index a0677fbf82..0000000000 --- a/contrib/tools/protoc_old/ya.make.prebuilt +++ /dev/null @@ -1,20 +0,0 @@ -SET_RESOURCE_URI_FROM_JSON(SANDBOX_RESOURCE_URI resources.json) - -IF (SANDBOX_RESOURCE_URI != "") - ENABLE(PREBUILT) - - PREBUILT_PROGRAM() - - DECLARE_EXTERNAL_RESOURCE(PROTOC ${SANDBOX_RESOURCE_URI}) - - PRIMARY_OUTPUT(${PROTOC_RESOURCE_GLOBAL}/protoc${MODULE_SUFFIX}) - - INCLUDE(ya.make.induced_deps) - - END() -ELSE() - PROGRAM(protoc) - SRCS(main.c) - INCLUDE(ya.make.induced_deps) - END() -ENDIF() diff --git a/contrib/tools/python3/Include/Python.h b/contrib/tools/python3/Include/Python.h index 52a7aac6ba..5eddda6336 100644 --- a/contrib/tools/python3/Include/Python.h +++ b/contrib/tools/python3/Include/Python.h @@ -49,6 +49,9 @@ #include "bytearrayobject.h" #include "bytesobject.h" #include "unicodeobject.h" +#include "cpython/initconfig.h" +#include "pystate.h" +#include "pyerrors.h" #include "longobject.h" #include "cpython/longintrepr.h" #include "boolobject.h" @@ -74,8 +77,6 @@ #include "sliceobject.h" #include "cpython/cellobject.h" #include "iterobject.h" -#include "cpython/initconfig.h" -#include "pystate.h" #include "cpython/genobject.h" #include "descrobject.h" #include "genericaliasobject.h" @@ -85,7 +86,6 @@ #include "cpython/picklebufobject.h" #include "cpython/pytime.h" #include "codecs.h" -#include "pyerrors.h" #include "pythread.h" #include "cpython/context.h" #include "modsupport.h" diff --git a/contrib/tools/python3/Include/cpython/code.h b/contrib/tools/python3/Include/cpython/code.h index 03834b20c3..311cffec11 100644 --- a/contrib/tools/python3/Include/cpython/code.h +++ b/contrib/tools/python3/Include/cpython/code.h @@ -75,7 +75,7 @@ typedef struct { PyObject *_co_freevars; } _PyCoCached; -/* Ancilliary data structure used for instrumentation. +/* Ancillary data structure used for instrumentation. Line instrumentation creates an array of these. One entry per code unit.*/ typedef struct { diff --git a/contrib/tools/python3/Include/cpython/longintrepr.h b/contrib/tools/python3/Include/cpython/longintrepr.h index 692c69ba76..78ac79a7cb 100644 --- a/contrib/tools/python3/Include/cpython/longintrepr.h +++ b/contrib/tools/python3/Include/cpython/longintrepr.h @@ -116,9 +116,10 @@ _PyLong_IsCompact(const PyLongObject* op) { static inline Py_ssize_t _PyLong_CompactValue(const PyLongObject *op) { + Py_ssize_t sign; assert(PyType_HasFeature((op)->ob_base.ob_type, Py_TPFLAGS_LONG_SUBCLASS)); assert(PyUnstable_Long_IsCompact(op)); - Py_ssize_t sign = 1 - (op->long_value.lv_tag & _PyLong_SIGN_MASK); + sign = 1 - (op->long_value.lv_tag & _PyLong_SIGN_MASK); return sign * (Py_ssize_t)op->long_value.ob_digit[0]; } diff --git a/contrib/tools/python3/Include/cpython/pystate.h b/contrib/tools/python3/Include/cpython/pystate.h index 628f2e0996..32789e17bd 100644 --- a/contrib/tools/python3/Include/cpython/pystate.h +++ b/contrib/tools/python3/Include/cpython/pystate.h @@ -251,13 +251,25 @@ struct _ts { /* WASI has limited call stack. Python's recursion limit depends on code layout, optimization, and WASI runtime. Wasmtime can handle about 700 recursions, sometimes less. 500 is a more conservative limit. */ -#ifndef C_RECURSION_LIMIT -# ifdef __wasi__ -# define C_RECURSION_LIMIT 500 +#ifdef Py_DEBUG +# if defined(__wasi__) +# define C_RECURSION_LIMIT 150 # else - // This value is duplicated in Lib/test/support/__init__.py # define C_RECURSION_LIMIT 1500 # endif +#else +# if defined(__wasi__) +# define C_RECURSION_LIMIT 500 +# elif defined(__s390x__) +# define C_RECURSION_LIMIT 800 +# elif defined(_WIN32) +# define C_RECURSION_LIMIT 3000 +# elif defined(_Py_ADDRESS_SANITIZER) +# define C_RECURSION_LIMIT 4000 +# else + // This value is duplicated in Lib/test/support/__init__.py +# define C_RECURSION_LIMIT 10000 +# endif #endif /* other API */ diff --git a/contrib/tools/python3/Include/internal/pycore_instruments.h b/contrib/tools/python3/Include/internal/pycore_instruments.h index 87f70d2dc0..b8591563d7 100644 --- a/contrib/tools/python3/Include/internal/pycore_instruments.h +++ b/contrib/tools/python3/Include/internal/pycore_instruments.h @@ -40,7 +40,7 @@ extern "C" { #define PY_MONITORING_EVENT_RERAISE 14 -/* Ancilliary events */ +/* Ancillary events */ #define PY_MONITORING_EVENT_C_RETURN 15 #define PY_MONITORING_EVENT_C_RAISE 16 diff --git a/contrib/tools/python3/Include/internal/pycore_symtable.h b/contrib/tools/python3/Include/internal/pycore_symtable.h index c8e0578a23..b2fef17720 100644 --- a/contrib/tools/python3/Include/internal/pycore_symtable.h +++ b/contrib/tools/python3/Include/internal/pycore_symtable.h @@ -109,18 +109,18 @@ extern PyObject* _Py_Mangle(PyObject *p, PyObject *name); /* Flags for def-use information */ -#define DEF_GLOBAL 1 /* global stmt */ -#define DEF_LOCAL 2 /* assignment in code block */ -#define DEF_PARAM 2<<1 /* formal parameter */ -#define DEF_NONLOCAL 2<<2 /* nonlocal stmt */ -#define USE 2<<3 /* name is used */ -#define DEF_FREE 2<<4 /* name used but not defined in nested block */ -#define DEF_FREE_CLASS 2<<5 /* free variable from class's method */ -#define DEF_IMPORT 2<<6 /* assignment occurred via import */ -#define DEF_ANNOT 2<<7 /* this name is annotated */ -#define DEF_COMP_ITER 2<<8 /* this name is a comprehension iteration variable */ -#define DEF_TYPE_PARAM 2<<9 /* this name is a type parameter */ -#define DEF_COMP_CELL 2<<10 /* this name is a cell in an inlined comprehension */ +#define DEF_GLOBAL 1 /* global stmt */ +#define DEF_LOCAL 2 /* assignment in code block */ +#define DEF_PARAM (2<<1) /* formal parameter */ +#define DEF_NONLOCAL (2<<2) /* nonlocal stmt */ +#define USE (2<<3) /* name is used */ +#define DEF_FREE (2<<4) /* name used but not defined in nested block */ +#define DEF_FREE_CLASS (2<<5) /* free variable from class's method */ +#define DEF_IMPORT (2<<6) /* assignment occurred via import */ +#define DEF_ANNOT (2<<7) /* this name is annotated */ +#define DEF_COMP_ITER (2<<8) /* this name is a comprehension iteration variable */ +#define DEF_TYPE_PARAM (2<<9) /* this name is a type parameter */ +#define DEF_COMP_CELL (2<<10) /* this name is a cell in an inlined comprehension */ #define DEF_BOUND (DEF_LOCAL | DEF_PARAM | DEF_IMPORT) diff --git a/contrib/tools/python3/Include/longobject.h b/contrib/tools/python3/Include/longobject.h index e090dd024a..c8b7497353 100644 --- a/contrib/tools/python3/Include/longobject.h +++ b/contrib/tools/python3/Include/longobject.h @@ -34,7 +34,24 @@ PyAPI_FUNC(PyObject *) PyLong_GetInfo(void); #if !defined(SIZEOF_PID_T) || SIZEOF_PID_T == SIZEOF_INT #define _Py_PARSE_PID "i" #define PyLong_FromPid PyLong_FromLong -#define PyLong_AsPid PyLong_AsLong +# ifndef Py_LIMITED_API +# define PyLong_AsPid _PyLong_AsInt +# elif SIZEOF_INT == SIZEOF_LONG +# define PyLong_AsPid PyLong_AsLong +# else +static inline int +PyLong_AsPid(PyObject *obj) +{ + int overflow; + long result = PyLong_AsLongAndOverflow(obj, &overflow); + if (overflow || result > INT_MAX || result < INT_MIN) { + PyErr_SetString(PyExc_OverflowError, + "Python int too large to convert to C int"); + return -1; + } + return (int)result; +} +# endif #elif SIZEOF_PID_T == SIZEOF_LONG #define _Py_PARSE_PID "l" #define PyLong_FromPid PyLong_FromLong diff --git a/contrib/tools/python3/Include/object.h b/contrib/tools/python3/Include/object.h index 5c30c77bc2..0d94cf8255 100644 --- a/contrib/tools/python3/Include/object.h +++ b/contrib/tools/python3/Include/object.h @@ -230,8 +230,7 @@ PyAPI_DATA(PyTypeObject) PyBool_Type; static inline Py_ssize_t Py_SIZE(PyObject *ob) { assert(ob->ob_type != &PyLong_Type); assert(ob->ob_type != &PyBool_Type); - PyVarObject *var_ob = _PyVarObject_CAST(ob); - return var_ob->ob_size; + return _PyVarObject_CAST(ob)->ob_size; } #if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000 # define Py_SIZE(ob) Py_SIZE(_PyObject_CAST(ob)) diff --git a/contrib/tools/python3/Include/patchlevel.h b/contrib/tools/python3/Include/patchlevel.h index e7316df367..24e6579dbb 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 12 -#define PY_MICRO_VERSION 2 +#define PY_MICRO_VERSION 3 #define PY_RELEASE_LEVEL PY_RELEASE_LEVEL_FINAL #define PY_RELEASE_SERIAL 0 /* Version as a string */ -#define PY_VERSION "3.12.2" +#define PY_VERSION "3.12.3" /*--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 07020b5dc9..9824d099c3 100644 --- a/contrib/tools/python3/Include/pyexpat.h +++ b/contrib/tools/python3/Include/pyexpat.h @@ -48,8 +48,10 @@ struct PyExpat_CAPI enum XML_Status (*SetEncoding)(XML_Parser parser, const XML_Char *encoding); int (*DefaultUnknownEncodingHandler)( void *encodingHandlerData, const XML_Char *name, XML_Encoding *info); - /* might be none for expat < 2.1.0 */ + /* might be NULL for expat < 2.1.0 */ int (*SetHashSalt)(XML_Parser parser, unsigned long hash_salt); + /* might be NULL for expat < 2.6.0 */ + XML_Bool (*SetReparseDeferralEnabled)(XML_Parser parser, XML_Bool enabled); /* always add new stuff to the end! */ }; diff --git a/contrib/tools/python3/Include/pyport.h b/contrib/tools/python3/Include/pyport.h index 35eca7234c..30b9c8ebc4 100644 --- a/contrib/tools/python3/Include/pyport.h +++ b/contrib/tools/python3/Include/pyport.h @@ -748,6 +748,11 @@ extern char * _getpty(int *, int, mode_t, int); # define _Py_ADDRESS_SANITIZER # endif # endif +# if __has_feature(thread_sanitizer) +# if !defined(_Py_THREAD_SANITIZER) +# define _Py_THREAD_SANITIZER +# endif +# endif #elif defined(__GNUC__) # if defined(__SANITIZE_ADDRESS__) # define _Py_ADDRESS_SANITIZER diff --git a/contrib/tools/python3/Lib/_pyio.py b/contrib/tools/python3/Lib/_pyio.py index 9641d43101..687076fbe9 100644 --- a/contrib/tools/python3/Lib/_pyio.py +++ b/contrib/tools/python3/Lib/_pyio.py @@ -1209,7 +1209,8 @@ class BufferedReader(_BufferedIOMixin): return written def tell(self): - return _BufferedIOMixin.tell(self) - len(self._read_buf) + self._read_pos + # GH-95782: Keep return value non-negative + return max(_BufferedIOMixin.tell(self) - len(self._read_buf) + self._read_pos, 0) def seek(self, pos, whence=0): if whence not in valid_seek_flags: diff --git a/contrib/tools/python3/Lib/argparse.py b/contrib/tools/python3/Lib/argparse.py index 484a1efde4..120cb6c845 100644 --- a/contrib/tools/python3/Lib/argparse.py +++ b/contrib/tools/python3/Lib/argparse.py @@ -225,7 +225,8 @@ class HelpFormatter(object): # add the heading if the section was non-empty if self.heading is not SUPPRESS and self.heading is not None: current_indent = self.formatter._current_indent - heading = '%*s%s:\n' % (current_indent, '', self.heading) + heading_text = _('%(heading)s:') % dict(heading=self.heading) + heading = '%*s%s\n' % (current_indent, '', heading_text) else: heading = '' @@ -415,6 +416,8 @@ class HelpFormatter(object): suppressed_actions_count += 1 exposed_actions_count = group_action_count - suppressed_actions_count + if not exposed_actions_count: + continue if not group.required: if start in inserts: @@ -720,7 +723,7 @@ class ArgumentDefaultsHelpFormatter(HelpFormatter): if action.default is not SUPPRESS: defaulting_nargs = [OPTIONAL, ZERO_OR_MORE] if action.option_strings or action.nargs in defaulting_nargs: - help += ' (default: %(default)s)' + help += _(' (default: %(default)s)') return help @@ -1149,7 +1152,9 @@ class _VersionAction(Action): version=None, dest=SUPPRESS, default=SUPPRESS, - help="show program's version number and exit"): + help=None): + if help is None: + help = _("show program's version number and exit") super(_VersionAction, self).__init__( option_strings=option_strings, dest=dest, @@ -2004,7 +2009,7 @@ class ArgumentParser(_AttributeHolder, _ActionsContainer): # get the optional identified at this index option_tuple = option_string_indices[start_index] - action, option_string, explicit_arg = option_tuple + action, option_string, sep, explicit_arg = option_tuple # identify additional optionals in the same arg string # (e.g. -xyz is the same as -x -y -z if no args are required) @@ -2031,18 +2036,27 @@ class ArgumentParser(_AttributeHolder, _ActionsContainer): and option_string[1] not in chars and explicit_arg != '' ): + if sep or explicit_arg[0] in chars: + msg = _('ignored explicit argument %r') + raise ArgumentError(action, msg % explicit_arg) action_tuples.append((action, [], option_string)) char = option_string[0] option_string = char + explicit_arg[0] - new_explicit_arg = explicit_arg[1:] or None optionals_map = self._option_string_actions if option_string in optionals_map: action = optionals_map[option_string] - explicit_arg = new_explicit_arg + explicit_arg = explicit_arg[1:] + if not explicit_arg: + sep = explicit_arg = None + elif explicit_arg[0] == '=': + sep = '=' + explicit_arg = explicit_arg[1:] + else: + sep = '' else: - msg = _('ignored explicit argument %r') - raise ArgumentError(action, msg % explicit_arg) - + extras.append(char + explicit_arg) + stop = start_index + 1 + break # if the action expect exactly one argument, we've # successfully matched the option; exit the loop elif arg_count == 1: @@ -2262,18 +2276,17 @@ class ArgumentParser(_AttributeHolder, _ActionsContainer): # if the option string is present in the parser, return the action if arg_string in self._option_string_actions: action = self._option_string_actions[arg_string] - return action, arg_string, None + return action, arg_string, None, None # if it's just a single character, it was meant to be positional if len(arg_string) == 1: return None # if the option string before the "=" is present, return the action - if '=' in arg_string: - option_string, explicit_arg = arg_string.split('=', 1) - if option_string in self._option_string_actions: - action = self._option_string_actions[option_string] - return action, option_string, explicit_arg + option_string, sep, explicit_arg = arg_string.partition('=') + if sep and option_string in self._option_string_actions: + action = self._option_string_actions[option_string] + return action, option_string, sep, explicit_arg # search through all possible prefixes of the option string # and all actions in the parser for possible interpretations @@ -2282,7 +2295,7 @@ class ArgumentParser(_AttributeHolder, _ActionsContainer): # if multiple actions match, the option string was ambiguous if len(option_tuples) > 1: options = ', '.join([option_string - for action, option_string, explicit_arg in option_tuples]) + for action, option_string, sep, explicit_arg in option_tuples]) args = {'option': arg_string, 'matches': options} msg = _('ambiguous option: %(option)s could match %(matches)s') self.error(msg % args) @@ -2306,7 +2319,7 @@ class ArgumentParser(_AttributeHolder, _ActionsContainer): # it was meant to be an optional but there is no such option # in this parser (though it might be a valid option in a subparser) - return None, arg_string, None + return None, arg_string, None, None def _get_option_tuples(self, option_string): result = [] @@ -2316,15 +2329,13 @@ class ArgumentParser(_AttributeHolder, _ActionsContainer): chars = self.prefix_chars if option_string[0] in chars and option_string[1] in chars: if self.allow_abbrev: - if '=' in option_string: - option_prefix, explicit_arg = option_string.split('=', 1) - else: - option_prefix = option_string - explicit_arg = None + option_prefix, sep, explicit_arg = option_string.partition('=') + if not sep: + sep = explicit_arg = None for option_string in self._option_string_actions: if option_string.startswith(option_prefix): action = self._option_string_actions[option_string] - tup = action, option_string, explicit_arg + tup = action, option_string, sep, explicit_arg result.append(tup) # single character options can be concatenated with their arguments @@ -2332,18 +2343,17 @@ class ArgumentParser(_AttributeHolder, _ActionsContainer): # separate elif option_string[0] in chars and option_string[1] not in chars: option_prefix = option_string - explicit_arg = None short_option_prefix = option_string[:2] short_explicit_arg = option_string[2:] for option_string in self._option_string_actions: if option_string == short_option_prefix: action = self._option_string_actions[option_string] - tup = action, option_string, short_explicit_arg + tup = action, option_string, '', short_explicit_arg result.append(tup) elif option_string.startswith(option_prefix): action = self._option_string_actions[option_string] - tup = action, option_string, explicit_arg + tup = action, option_string, None, None result.append(tup) # shouldn't ever get here diff --git a/contrib/tools/python3/Lib/ast.py b/contrib/tools/python3/Lib/ast.py index de940d2e9c..b0995fa7f1 100644 --- a/contrib/tools/python3/Lib/ast.py +++ b/contrib/tools/python3/Lib/ast.py @@ -1268,14 +1268,18 @@ class _Unparser(NodeVisitor): quote_type = quote_types[0] self.write(f"{quote_type}{value}{quote_type}") - def _write_fstring_inner(self, node, scape_newlines=False): + def _write_fstring_inner(self, node, is_format_spec=False): if isinstance(node, JoinedStr): # for both the f-string itself, and format_spec for value in node.values: - self._write_fstring_inner(value, scape_newlines=scape_newlines) + self._write_fstring_inner(value, is_format_spec=is_format_spec) elif isinstance(node, Constant) and isinstance(node.value, str): value = node.value.replace("{", "{{").replace("}", "}}") - if scape_newlines: + + if is_format_spec: + value = value.replace("\\", "\\\\") + value = value.replace("'", "\\'") + value = value.replace('"', '\\"') value = value.replace("\n", "\\n") self.write(value) elif isinstance(node, FormattedValue): @@ -1299,10 +1303,7 @@ class _Unparser(NodeVisitor): self.write(f"!{chr(node.conversion)}") if node.format_spec: self.write(":") - self._write_fstring_inner( - node.format_spec, - scape_newlines=True - ) + self._write_fstring_inner(node.format_spec, is_format_spec=True) def visit_Name(self, node): self.write(node.id) diff --git a/contrib/tools/python3/Lib/asyncio/base_events.py b/contrib/tools/python3/Lib/asyncio/base_events.py index c16c445bde..29eff0499c 100644 --- a/contrib/tools/python3/Lib/asyncio/base_events.py +++ b/contrib/tools/python3/Lib/asyncio/base_events.py @@ -45,6 +45,7 @@ from . import protocols from . import sslproto from . import staggered from . import tasks +from . import timeouts from . import transports from . import trsock from .log import logger @@ -596,23 +597,24 @@ class BaseEventLoop(events.AbstractEventLoop): thread = threading.Thread(target=self._do_shutdown, args=(future,)) thread.start() try: - await future - finally: - thread.join(timeout) - - if thread.is_alive(): + async with timeouts.timeout(timeout): + await future + except TimeoutError: warnings.warn("The executor did not finishing joining " - f"its threads within {timeout} seconds.", - RuntimeWarning, stacklevel=2) + f"its threads within {timeout} seconds.", + RuntimeWarning, stacklevel=2) self._default_executor.shutdown(wait=False) + else: + thread.join() def _do_shutdown(self, future): try: self._default_executor.shutdown(wait=True) if not self.is_closed(): - self.call_soon_threadsafe(future.set_result, None) + self.call_soon_threadsafe(futures._set_result_unless_cancelled, + future, None) except Exception as ex: - if not self.is_closed(): + if not self.is_closed() and not future.cancelled(): self.call_soon_threadsafe(future.set_exception, ex) def _check_running(self): diff --git a/contrib/tools/python3/Lib/asyncio/tasks.py b/contrib/tools/python3/Lib/asyncio/tasks.py index 65f2a6ef80..0b22e28d8e 100644 --- a/contrib/tools/python3/Lib/asyncio/tasks.py +++ b/contrib/tools/python3/Lib/asyncio/tasks.py @@ -480,7 +480,7 @@ async def wait_for(fut, timeout): If the wait is cancelled, the task is also cancelled. - If the task supresses the cancellation and returns a value instead, + If the task suppresses the cancellation and returns a value instead, that value is returned. This function is a coroutine. diff --git a/contrib/tools/python3/Lib/asyncio/windows_events.py b/contrib/tools/python3/Lib/asyncio/windows_events.py index c9a5fb841c..cb613451a5 100644 --- a/contrib/tools/python3/Lib/asyncio/windows_events.py +++ b/contrib/tools/python3/Lib/asyncio/windows_events.py @@ -8,6 +8,7 @@ if sys.platform != 'win32': # pragma: no cover import _overlapped import _winapi import errno +from functools import partial import math import msvcrt import socket @@ -323,13 +324,13 @@ class ProactorEventLoop(proactor_events.BaseProactorEventLoop): if self._self_reading_future is not None: ov = self._self_reading_future._ov self._self_reading_future.cancel() - # self_reading_future was just cancelled so if it hasn't been - # finished yet, it never will be (it's possible that it has - # already finished and its callback is waiting in the queue, - # where it could still happen if the event loop is restarted). - # Unregister it otherwise IocpProactor.close will wait for it - # forever - if ov is not None: + # self_reading_future always uses IOCP, so even though it's + # been cancelled, we need to make sure that the IOCP message + # is received so that the kernel is not holding on to the + # memory, possibly causing memory corruption later. Only + # unregister it if IO is complete in all respects. Otherwise + # we need another _poll() later to complete the IO. + if ov is not None and not ov.pending: self._proactor._unregister(ov) self._self_reading_future = None @@ -466,6 +467,18 @@ class IocpProactor: else: raise + @classmethod + def _finish_recvfrom(cls, trans, key, ov, *, empty_result): + try: + return cls.finish_socket_func(trans, key, ov) + except OSError as exc: + # WSARecvFrom will report ERROR_PORT_UNREACHABLE when the same + # socket is used to send to an address that is not listening. + if exc.winerror == _overlapped.ERROR_PORT_UNREACHABLE: + return empty_result, None + else: + raise + def recv(self, conn, nbytes, flags=0): self._register_with_iocp(conn) ov = _overlapped.Overlapped(NULL) @@ -500,7 +513,8 @@ class IocpProactor: except BrokenPipeError: return self._result((b'', None)) - return self._register(ov, conn, self.finish_socket_func) + return self._register(ov, conn, partial(self._finish_recvfrom, + empty_result=b'')) def recvfrom_into(self, conn, buf, flags=0): self._register_with_iocp(conn) @@ -510,17 +524,8 @@ class IocpProactor: except BrokenPipeError: return self._result((0, None)) - def finish_recv(trans, key, ov): - try: - return ov.getresult() - except OSError as exc: - if exc.winerror in (_overlapped.ERROR_NETNAME_DELETED, - _overlapped.ERROR_OPERATION_ABORTED): - raise ConnectionResetError(*exc.args) - else: - raise - - return self._register(ov, conn, finish_recv) + return self._register(ov, conn, partial(self._finish_recvfrom, + empty_result=0)) def sendto(self, conn, buf, flags=0, addr=None): self._register_with_iocp(conn) diff --git a/contrib/tools/python3/Lib/collections/__init__.py b/contrib/tools/python3/Lib/collections/__init__.py index 8652dc8a4e..5f000b5f2c 100644 --- a/contrib/tools/python3/Lib/collections/__init__.py +++ b/contrib/tools/python3/Lib/collections/__init__.py @@ -638,7 +638,8 @@ class Counter(dict): >>> sorted(c.elements()) ['A', 'A', 'B', 'B', 'C', 'C'] - # Knuth's example for prime factors of 1836: 2**2 * 3**3 * 17**1 + Knuth's example for prime factors of 1836: 2**2 * 3**3 * 17**1 + >>> import math >>> prime_factors = Counter({2: 2, 3: 3, 17: 1}) >>> math.prod(prime_factors.elements()) @@ -679,7 +680,7 @@ class Counter(dict): ''' # The regular dict.update() operation makes no sense here because the - # replace behavior results in the some of original untouched counts + # replace behavior results in some of the original untouched counts # being mixed-in with all of the other counts for a mismash that # doesn't have a straight-forward interpretation in most counting # contexts. Instead, we implement straight-addition. Both the inputs diff --git a/contrib/tools/python3/Lib/configparser.py b/contrib/tools/python3/Lib/configparser.py index e8aae21794..f96704eb45 100644 --- a/contrib/tools/python3/Lib/configparser.py +++ b/contrib/tools/python3/Lib/configparser.py @@ -995,100 +995,102 @@ class RawConfigParser(MutableMapping): lineno = 0 indent_level = 0 e = None # None, or an exception - for lineno, line in enumerate(fp, start=1): - comment_start = sys.maxsize - # strip inline comments - inline_prefixes = {p: -1 for p in self._inline_comment_prefixes} - while comment_start == sys.maxsize and inline_prefixes: - next_prefixes = {} - for prefix, index in inline_prefixes.items(): - index = line.find(prefix, index+1) - if index == -1: - continue - next_prefixes[prefix] = index - if index == 0 or (index > 0 and line[index-1].isspace()): - comment_start = min(comment_start, index) - inline_prefixes = next_prefixes - # strip full line comments - for prefix in self._comment_prefixes: - if line.strip().startswith(prefix): - comment_start = 0 - break - if comment_start == sys.maxsize: - comment_start = None - value = line[:comment_start].strip() - if not value: - if self._empty_lines_in_values: - # add empty line to the value, but only if there was no - # comment on the line - if (comment_start is None and - cursect is not None and - optname and - cursect[optname] is not None): - cursect[optname].append('') # newlines added at join - else: - # empty line marks end of value - indent_level = sys.maxsize - continue - # continuation line? - first_nonspace = self.NONSPACECRE.search(line) - cur_indent_level = first_nonspace.start() if first_nonspace else 0 - if (cursect is not None and optname and - cur_indent_level > indent_level): - cursect[optname].append(value) - # a section header or option header? - else: - indent_level = cur_indent_level - # is it a section header? - mo = self.SECTCRE.match(value) - if mo: - sectname = mo.group('header') - if sectname in self._sections: - if self._strict and sectname in elements_added: - raise DuplicateSectionError(sectname, fpname, - lineno) - cursect = self._sections[sectname] - elements_added.add(sectname) - elif sectname == self.default_section: - cursect = self._defaults + try: + for lineno, line in enumerate(fp, start=1): + comment_start = sys.maxsize + # strip inline comments + inline_prefixes = {p: -1 for p in self._inline_comment_prefixes} + while comment_start == sys.maxsize and inline_prefixes: + next_prefixes = {} + for prefix, index in inline_prefixes.items(): + index = line.find(prefix, index+1) + if index == -1: + continue + next_prefixes[prefix] = index + if index == 0 or (index > 0 and line[index-1].isspace()): + comment_start = min(comment_start, index) + inline_prefixes = next_prefixes + # strip full line comments + for prefix in self._comment_prefixes: + if line.strip().startswith(prefix): + comment_start = 0 + break + if comment_start == sys.maxsize: + comment_start = None + value = line[:comment_start].strip() + if not value: + if self._empty_lines_in_values: + # add empty line to the value, but only if there was no + # comment on the line + if (comment_start is None and + cursect is not None and + optname and + cursect[optname] is not None): + cursect[optname].append('') # newlines added at join else: - cursect = self._dict() - self._sections[sectname] = cursect - self._proxies[sectname] = SectionProxy(self, sectname) - elements_added.add(sectname) - # So sections can't start with a continuation line - optname = None - # no section header in the file? - elif cursect is None: - raise MissingSectionHeaderError(fpname, lineno, line) - # an option line? + # empty line marks end of value + indent_level = sys.maxsize + continue + # continuation line? + first_nonspace = self.NONSPACECRE.search(line) + cur_indent_level = first_nonspace.start() if first_nonspace else 0 + if (cursect is not None and optname and + cur_indent_level > indent_level): + cursect[optname].append(value) + # a section header or option header? else: - mo = self._optcre.match(value) + indent_level = cur_indent_level + # is it a section header? + mo = self.SECTCRE.match(value) if mo: - optname, vi, optval = mo.group('option', 'vi', 'value') - if not optname: - e = self._handle_error(e, fpname, lineno, line) - optname = self.optionxform(optname.rstrip()) - if (self._strict and - (sectname, optname) in elements_added): - raise DuplicateOptionError(sectname, optname, - fpname, lineno) - elements_added.add((sectname, optname)) - # This check is fine because the OPTCRE cannot - # match if it would set optval to None - if optval is not None: - optval = optval.strip() - cursect[optname] = [optval] + sectname = mo.group('header') + if sectname in self._sections: + if self._strict and sectname in elements_added: + raise DuplicateSectionError(sectname, fpname, + lineno) + cursect = self._sections[sectname] + elements_added.add(sectname) + elif sectname == self.default_section: + cursect = self._defaults else: - # valueless option handling - cursect[optname] = None + cursect = self._dict() + self._sections[sectname] = cursect + self._proxies[sectname] = SectionProxy(self, sectname) + elements_added.add(sectname) + # So sections can't start with a continuation line + optname = None + # no section header in the file? + elif cursect is None: + raise MissingSectionHeaderError(fpname, lineno, line) + # an option line? else: - # a non-fatal parsing error occurred. set up the - # exception but keep going. the exception will be - # raised at the end of the file and will contain a - # list of all bogus lines - e = self._handle_error(e, fpname, lineno, line) - self._join_multiline_values() + mo = self._optcre.match(value) + if mo: + optname, vi, optval = mo.group('option', 'vi', 'value') + if not optname: + e = self._handle_error(e, fpname, lineno, line) + optname = self.optionxform(optname.rstrip()) + if (self._strict and + (sectname, optname) in elements_added): + raise DuplicateOptionError(sectname, optname, + fpname, lineno) + elements_added.add((sectname, optname)) + # This check is fine because the OPTCRE cannot + # match if it would set optval to None + if optval is not None: + optval = optval.strip() + cursect[optname] = [optval] + else: + # valueless option handling + cursect[optname] = None + else: + # a non-fatal parsing error occurred. set up the + # exception but keep going. the exception will be + # raised at the end of the file and will contain a + # list of all bogus lines + e = self._handle_error(e, fpname, lineno, line) + finally: + self._join_multiline_values() # if any parsing errors occurred, raise an exception if e: raise e diff --git a/contrib/tools/python3/Lib/dataclasses.py b/contrib/tools/python3/Lib/dataclasses.py index 3eacba840d..12b2dfd145 100644 --- a/contrib/tools/python3/Lib/dataclasses.py +++ b/contrib/tools/python3/Lib/dataclasses.py @@ -1168,8 +1168,10 @@ def _dataclass_setstate(self, state): def _get_slots(cls): match cls.__dict__.get('__slots__'): + # A class which does not define __slots__ at all is equivalent + # to a class defining __slots__ = ('__dict__', '__weakref__') case None: - return + yield from ('__dict__', '__weakref__') case str(slot): yield slot # Slots may be any iterable, but we cannot handle an iterator diff --git a/contrib/tools/python3/Lib/doctest.py b/contrib/tools/python3/Lib/doctest.py index 087c52327f..ee48622031 100644 --- a/contrib/tools/python3/Lib/doctest.py +++ b/contrib/tools/python3/Lib/doctest.py @@ -1127,7 +1127,7 @@ class DocTestFinder: obj = obj.fget if inspect.isfunction(obj) and getattr(obj, '__doc__', None): # We don't use `docstring` var here, because `obj` can be changed. - obj = obj.__code__ + obj = inspect.unwrap(obj).__code__ if inspect.istraceback(obj): obj = obj.tb_frame if inspect.isframe(obj): obj = obj.f_code if inspect.iscode(obj): @@ -2206,13 +2206,13 @@ class DocTestCase(unittest.TestCase): unittest.TestCase.__init__(self) self._dt_optionflags = optionflags self._dt_checker = checker - self._dt_globs = test.globs.copy() self._dt_test = test self._dt_setUp = setUp self._dt_tearDown = tearDown def setUp(self): test = self._dt_test + self._dt_globs = test.globs.copy() if self._dt_setUp is not None: self._dt_setUp(test) diff --git a/contrib/tools/python3/Lib/email/_header_value_parser.py b/contrib/tools/python3/Lib/email/_header_value_parser.py index 5b653f66c1..e4a342d446 100644 --- a/contrib/tools/python3/Lib/email/_header_value_parser.py +++ b/contrib/tools/python3/Lib/email/_header_value_parser.py @@ -949,6 +949,7 @@ class _InvalidEwError(errors.HeaderParseError): # up other parse trees. Maybe should have tests for that, too. DOT = ValueTerminal('.', 'dot') ListSeparator = ValueTerminal(',', 'list-separator') +ListSeparator.as_ew_allowed = False RouteComponentMarker = ValueTerminal('@', 'route-component-marker') # @@ -2022,7 +2023,7 @@ def get_address_list(value): address_list.defects.append(errors.InvalidHeaderDefect( "invalid address in address-list")) if value: # Must be a , at this point. - address_list.append(ValueTerminal(',', 'list-separator')) + address_list.append(ListSeparator) value = value[1:] return address_list, value diff --git a/contrib/tools/python3/Lib/email/generator.py b/contrib/tools/python3/Lib/email/generator.py index 7ccbe10eb7..c8056ad47b 100644 --- a/contrib/tools/python3/Lib/email/generator.py +++ b/contrib/tools/python3/Lib/email/generator.py @@ -243,7 +243,7 @@ class Generator: # existing message. msg = deepcopy(msg) del msg['content-transfer-encoding'] - msg.set_payload(payload, charset) + msg.set_payload(msg._payload, charset) payload = msg.get_payload() self._munge_cte = (msg['content-transfer-encoding'], msg['content-type']) diff --git a/contrib/tools/python3/Lib/email/message.py b/contrib/tools/python3/Lib/email/message.py index fe769580fe..a14cca56b3 100644 --- a/contrib/tools/python3/Lib/email/message.py +++ b/contrib/tools/python3/Lib/email/message.py @@ -340,7 +340,7 @@ class Message: return if not isinstance(charset, Charset): charset = Charset(charset) - payload = payload.encode(charset.output_charset) + payload = payload.encode(charset.output_charset, 'surrogateescape') if hasattr(payload, 'decode'): self._payload = payload.decode('ascii', 'surrogateescape') else: diff --git a/contrib/tools/python3/Lib/enum.py b/contrib/tools/python3/Lib/enum.py index 1502bfe915..af5613838d 100644 --- a/contrib/tools/python3/Lib/enum.py +++ b/contrib/tools/python3/Lib/enum.py @@ -166,6 +166,11 @@ def _dedent(text): lines[j] = l[i:] return '\n'.join(lines) +class _not_given: + def __repr__(self): + return('<not given>') +_not_given = _not_given() + class _auto_null: def __repr__(self): return '_auto_null' @@ -283,9 +288,10 @@ class _proto_member: enum_member._sort_order_ = len(enum_class._member_names_) if Flag is not None and issubclass(enum_class, Flag): - enum_class._flag_mask_ |= value - if _is_single_bit(value): - enum_class._singles_mask_ |= value + if isinstance(value, int): + enum_class._flag_mask_ |= value + if _is_single_bit(value): + enum_class._singles_mask_ |= value enum_class._all_bits_ = 2 ** ((enum_class._flag_mask_).bit_length()) - 1 # If another member with the same value was already defined, the @@ -313,6 +319,7 @@ class _proto_member: elif ( Flag is not None and issubclass(enum_class, Flag) + and isinstance(value, int) and _is_single_bit(value) ): # no other instances found, record this member in _member_names_ @@ -457,10 +464,11 @@ class _EnumDict(dict): if isinstance(value, auto): single = True value = (value, ) - if type(value) is tuple and any(isinstance(v, auto) for v in value): + if isinstance(value, tuple) and any(isinstance(v, auto) for v in value): # insist on an actual tuple, no subclasses, in keeping with only supporting # top-level auto() usage (not contained in any other data structure) auto_valued = [] + t = type(value) for v in value: if isinstance(v, auto): non_auto_store = False @@ -475,7 +483,12 @@ class _EnumDict(dict): if single: value = auto_valued[0] else: - value = tuple(auto_valued) + try: + # accepts iterable as multiple arguments? + value = t(auto_valued) + except TypeError: + # then pass them in singlely + value = t(*auto_valued) self._member_names[key] = None if non_auto_store: self._last_values.append(value) @@ -710,7 +723,7 @@ class EnumType(type): """ return True - def __call__(cls, value, names=None, *values, module=None, qualname=None, type=None, start=1, boundary=None): + def __call__(cls, value, names=_not_given, *values, module=None, qualname=None, type=None, start=1, boundary=None): """ Either returns an existing member, or creates a new enum class. @@ -739,18 +752,18 @@ class EnumType(type): """ if cls._member_map_: # simple value lookup if members exist - if names: + if names is not _not_given: value = (value, names) + values return cls.__new__(cls, value) # otherwise, functional API: we're creating a new Enum type - if names is None and type is None: + if names is _not_given and type is None: # no body? no data-type? possibly wrong usage raise TypeError( f"{cls} has no members; specify `names=()` if you meant to create a new, empty, enum" ) return cls._create_( class_name=value, - names=names, + names=None if names is _not_given else names, module=module, qualname=qualname, type=type, @@ -1528,37 +1541,50 @@ class Flag(Enum, boundary=STRICT): def __bool__(self): return bool(self._value_) + def _get_value(self, flag): + if isinstance(flag, self.__class__): + return flag._value_ + elif self._member_type_ is not object and isinstance(flag, self._member_type_): + return flag + return NotImplemented + def __or__(self, other): - if isinstance(other, self.__class__): - other = other._value_ - elif self._member_type_ is not object and isinstance(other, self._member_type_): - other = other - else: + other_value = self._get_value(other) + if other_value is NotImplemented: return NotImplemented + + for flag in self, other: + if self._get_value(flag) is None: + raise TypeError(f"'{flag}' cannot be combined with other flags with |") value = self._value_ - return self.__class__(value | other) + return self.__class__(value | other_value) def __and__(self, other): - if isinstance(other, self.__class__): - other = other._value_ - elif self._member_type_ is not object and isinstance(other, self._member_type_): - other = other - else: + other_value = self._get_value(other) + if other_value is NotImplemented: return NotImplemented + + for flag in self, other: + if self._get_value(flag) is None: + raise TypeError(f"'{flag}' cannot be combined with other flags with &") value = self._value_ - return self.__class__(value & other) + return self.__class__(value & other_value) def __xor__(self, other): - if isinstance(other, self.__class__): - other = other._value_ - elif self._member_type_ is not object and isinstance(other, self._member_type_): - other = other - else: + other_value = self._get_value(other) + if other_value is NotImplemented: return NotImplemented + + for flag in self, other: + if self._get_value(flag) is None: + raise TypeError(f"'{flag}' cannot be combined with other flags with ^") value = self._value_ - return self.__class__(value ^ other) + return self.__class__(value ^ other_value) def __invert__(self): + if self._get_value(self) is None: + raise TypeError(f"'{self}' cannot be inverted") + if self._inverted_ is None: if self._boundary_ in (EJECT, KEEP): self._inverted_ = self.__class__(~self._value_) @@ -1625,7 +1651,7 @@ def global_flag_repr(self): cls_name = self.__class__.__name__ if self._name_ is None: return "%s.%s(%r)" % (module, cls_name, self._value_) - if _is_single_bit(self): + if _is_single_bit(self._value_): return '%s.%s' % (module, self._name_) if self._boundary_ is not FlagBoundary.KEEP: return '|'.join(['%s.%s' % (module, name) for name in self.name.split('|')]) diff --git a/contrib/tools/python3/Lib/glob.py b/contrib/tools/python3/Lib/glob.py index a7256422d5..50beef37f4 100644 --- a/contrib/tools/python3/Lib/glob.py +++ b/contrib/tools/python3/Lib/glob.py @@ -132,7 +132,8 @@ def glob1(dirname, pattern): def _glob2(dirname, pattern, dir_fd, dironly, include_hidden=False): assert _isrecursive(pattern) - yield pattern[:0] + if not dirname or _isdir(dirname, dir_fd): + yield pattern[:0] yield from _rlistdir(dirname, dir_fd, dironly, include_hidden=include_hidden) diff --git a/contrib/tools/python3/Lib/http/client.py b/contrib/tools/python3/Lib/http/client.py index 5eebfccafb..a353716a85 100644 --- a/contrib/tools/python3/Lib/http/client.py +++ b/contrib/tools/python3/Lib/http/client.py @@ -936,17 +936,23 @@ class HTTPConnection: host = host[:i] else: port = self.default_port - if host and host[0] == '[' and host[-1] == ']': - host = host[1:-1] + if host and host[0] == '[' and host[-1] == ']': + host = host[1:-1] return (host, port) def set_debuglevel(self, level): self.debuglevel = level + def _wrap_ipv6(self, ip): + if b':' in ip and ip[0] != b'['[0]: + return b"[" + ip + b"]" + return ip + def _tunnel(self): connect = b"CONNECT %s:%d %s\r\n" % ( - self._tunnel_host.encode("idna"), self._tunnel_port, + 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(): @@ -1221,9 +1227,8 @@ class HTTPConnection: # As per RFC 273, IPv6 address should be wrapped with [] # when used as Host header - + host_enc = self._wrap_ipv6(host_enc) if ":" in host: - host_enc = b'[' + host_enc + b']' host_enc = _strip_ipv6_iface(host_enc) if port == self.default_port: diff --git a/contrib/tools/python3/Lib/importlib/_bootstrap_external.py b/contrib/tools/python3/Lib/importlib/_bootstrap_external.py index e6f75a9f6f..61dafc0f4c 100644 --- a/contrib/tools/python3/Lib/importlib/_bootstrap_external.py +++ b/contrib/tools/python3/Lib/importlib/_bootstrap_external.py @@ -1450,6 +1450,9 @@ class PathFinder: # https://bugs.python.org/issue45703 _NamespacePath._epoch += 1 + from importlib.metadata import MetadataPathFinder + MetadataPathFinder.invalidate_caches() + @staticmethod def _path_hooks(path): """Search sys.path_hooks for a finder for 'path'.""" diff --git a/contrib/tools/python3/Lib/importlib/metadata/__init__.py b/contrib/tools/python3/Lib/importlib/metadata/__init__.py index 82e0ce1b28..54156e93af 100644 --- a/contrib/tools/python3/Lib/importlib/metadata/__init__.py +++ b/contrib/tools/python3/Lib/importlib/metadata/__init__.py @@ -795,6 +795,7 @@ class MetadataPathFinder(DistributionFinder): path.search(prepared) for path in map(FastPath, paths) ) + @classmethod def invalidate_caches(cls): FastPath.__new__.cache_clear() diff --git a/contrib/tools/python3/Lib/importlib/resources/simple.py b/contrib/tools/python3/Lib/importlib/resources/simple.py index 7770c922c8..96f117fec6 100644 --- a/contrib/tools/python3/Lib/importlib/resources/simple.py +++ b/contrib/tools/python3/Lib/importlib/resources/simple.py @@ -88,7 +88,7 @@ class ResourceHandle(Traversable): def open(self, mode='r', *args, **kwargs): stream = self.parent.reader.open_binary(self.name) if 'b' not in mode: - stream = io.TextIOWrapper(*args, **kwargs) + stream = io.TextIOWrapper(stream, *args, **kwargs) return stream def joinpath(self, name): diff --git a/contrib/tools/python3/Lib/importlib/util.py b/contrib/tools/python3/Lib/importlib/util.py index f4d6e82331..3743e6aa91 100644 --- a/contrib/tools/python3/Lib/importlib/util.py +++ b/contrib/tools/python3/Lib/importlib/util.py @@ -13,6 +13,7 @@ from ._bootstrap_external import spec_from_file_location import _imp import sys +import threading import types @@ -145,7 +146,7 @@ class _incompatible_extension_module_restrictions: You can get the same effect as this function by implementing the basic interface of multi-phase init (PEP 489) and lying about - support for mulitple interpreters (or per-interpreter GIL). + support for multiple interpreters (or per-interpreter GIL). """ def __init__(self, *, disable_check): @@ -171,36 +172,53 @@ class _LazyModule(types.ModuleType): def __getattribute__(self, attr): """Trigger the load of the module and return the attribute.""" - # All module metadata must be garnered from __spec__ in order to avoid - # using mutated values. - # Stop triggering this method. - self.__class__ = types.ModuleType - # Get the original name to make sure no object substitution occurred - # in sys.modules. - original_name = self.__spec__.name - # Figure out exactly what attributes were mutated between the creation - # of the module and now. - attrs_then = self.__spec__.loader_state['__dict__'] - attrs_now = self.__dict__ - attrs_updated = {} - for key, value in attrs_now.items(): - # Code that set the attribute may have kept a reference to the - # assigned object, making identity more important than equality. - if key not in attrs_then: - attrs_updated[key] = value - elif id(attrs_now[key]) != id(attrs_then[key]): - attrs_updated[key] = value - self.__spec__.loader.exec_module(self) - # If exec_module() was used directly there is no guarantee the module - # object was put into sys.modules. - if original_name in sys.modules: - if id(self) != id(sys.modules[original_name]): - raise ValueError(f"module object for {original_name!r} " - "substituted in sys.modules during a lazy " - "load") - # Update after loading since that's what would happen in an eager - # loading situation. - self.__dict__.update(attrs_updated) + __spec__ = object.__getattribute__(self, '__spec__') + loader_state = __spec__.loader_state + with loader_state['lock']: + # Only the first thread to get the lock should trigger the load + # and reset the module's class. The rest can now getattr(). + if object.__getattribute__(self, '__class__') is _LazyModule: + # Reentrant calls from the same thread must be allowed to proceed without + # triggering the load again. + # exec_module() and self-referential imports are the primary ways this can + # happen, but in any case we must return something to avoid deadlock. + if loader_state['is_loading']: + return object.__getattribute__(self, attr) + loader_state['is_loading'] = True + + __dict__ = object.__getattribute__(self, '__dict__') + + # All module metadata must be gathered from __spec__ in order to avoid + # using mutated values. + # Get the original name to make sure no object substitution occurred + # in sys.modules. + original_name = __spec__.name + # Figure out exactly what attributes were mutated between the creation + # of the module and now. + attrs_then = loader_state['__dict__'] + attrs_now = __dict__ + attrs_updated = {} + for key, value in attrs_now.items(): + # Code that set an attribute may have kept a reference to the + # assigned object, making identity more important than equality. + if key not in attrs_then: + attrs_updated[key] = value + elif id(attrs_now[key]) != id(attrs_then[key]): + attrs_updated[key] = value + __spec__.loader.exec_module(self) + # If exec_module() was used directly there is no guarantee the module + # object was put into sys.modules. + if original_name in sys.modules: + if id(self) != id(sys.modules[original_name]): + raise ValueError(f"module object for {original_name!r} " + "substituted in sys.modules during a lazy " + "load") + # Update after loading since that's what would happen in an eager + # loading situation. + __dict__.update(attrs_updated) + # Finally, stop triggering this method. + self.__class__ = types.ModuleType + return getattr(self, attr) def __delattr__(self, attr): @@ -244,5 +262,7 @@ class LazyLoader(Loader): loader_state = {} loader_state['__dict__'] = module.__dict__.copy() loader_state['__class__'] = module.__class__ + loader_state['lock'] = threading.RLock() + loader_state['is_loading'] = False module.__spec__.loader_state = loader_state module.__class__ = _LazyModule diff --git a/contrib/tools/python3/Lib/inspect.py b/contrib/tools/python3/Lib/inspect.py index a550202bb0..819ce940ee 100644 --- a/contrib/tools/python3/Lib/inspect.py +++ b/contrib/tools/python3/Lib/inspect.py @@ -760,18 +760,14 @@ def unwrap(func, *, stop=None): :exc:`ValueError` is raised if a cycle is encountered. """ - if stop is None: - def _is_wrapper(f): - return hasattr(f, '__wrapped__') - else: - def _is_wrapper(f): - return hasattr(f, '__wrapped__') and not stop(f) f = func # remember the original func for error reporting # Memoise by id to tolerate non-hashable objects, but store objects to # ensure they aren't destroyed, which would allow their IDs to be reused. memo = {id(f): f} recursion_limit = sys.getrecursionlimit() - while _is_wrapper(func): + while not isinstance(func, type) and hasattr(func, '__wrapped__'): + if stop is not None and stop(func): + break func = func.__wrapped__ id_func = id(func) if (id_func in memo) or (len(memo) >= recursion_limit): @@ -2007,15 +2003,17 @@ def _signature_get_user_defined_method(cls, method_name): named ``method_name`` and returns it only if it is a pure python function. """ - try: - meth = getattr(cls, method_name) - except AttributeError: - return + if method_name == '__new__': + meth = getattr(cls, method_name, None) else: - if not isinstance(meth, _NonUserDefinedCallables): - # Once '__signature__' will be added to 'C'-level - # callables, this check won't be necessary - return meth + meth = getattr_static(cls, method_name, None) + if meth is None or isinstance(meth, _NonUserDefinedCallables): + # Once '__signature__' will be added to 'C'-level + # callables, this check won't be necessary + return None + if method_name != '__new__': + meth = _descriptor_get(meth, cls) + return meth def _signature_get_partial(wrapped_sig, partial, extra_args=()): @@ -2460,6 +2458,15 @@ def _signature_from_function(cls, func, skip_bound_arg=True, __validate_parameters__=is_duck_function) +def _descriptor_get(descriptor, obj): + if isclass(descriptor): + return descriptor + get = getattr(type(descriptor), '__get__', _sentinel) + if get is _sentinel: + return descriptor + return get(descriptor, obj, type(obj)) + + def _signature_from_callable(obj, *, follow_wrapper_chains=True, skip_bound_arg=True, @@ -2568,7 +2575,6 @@ def _signature_from_callable(obj, *, wrapped_sig = _get_signature_of(obj.func) return _signature_get_partial(wrapped_sig, obj) - sig = None if isinstance(obj, type): # obj is a class or a metaclass @@ -2576,88 +2582,65 @@ def _signature_from_callable(obj, *, # in its metaclass call = _signature_get_user_defined_method(type(obj), '__call__') if call is not None: - sig = _get_signature_of(call) - else: - factory_method = None - new = _signature_get_user_defined_method(obj, '__new__') - init = _signature_get_user_defined_method(obj, '__init__') - - # Go through the MRO and see if any class has user-defined - # pure Python __new__ or __init__ method - for base in obj.__mro__: - # Now we check if the 'obj' class has an own '__new__' method - if new is not None and '__new__' in base.__dict__: - factory_method = new - break - # or an own '__init__' method - elif init is not None and '__init__' in base.__dict__: - factory_method = init - break + return _get_signature_of(call) - if factory_method is not None: - sig = _get_signature_of(factory_method) - - if sig is None: - # At this point we know, that `obj` is a class, with no user- - # defined '__init__', '__new__', or class-level '__call__' - - for base in obj.__mro__[:-1]: - # Since '__text_signature__' is implemented as a - # descriptor that extracts text signature from the - # class docstring, if 'obj' is derived from a builtin - # class, its own '__text_signature__' may be 'None'. - # Therefore, we go through the MRO (except the last - # class in there, which is 'object') to find the first - # class with non-empty text signature. - try: - text_sig = base.__text_signature__ - except AttributeError: - pass - else: - if text_sig: - # If 'base' class has a __text_signature__ attribute: - # return a signature based on it - return _signature_fromstr(sigcls, base, text_sig) - - # No '__text_signature__' was found for the 'obj' class. - # Last option is to check if its '__init__' is - # object.__init__ or type.__init__. - if type not in obj.__mro__: - # We have a class (not metaclass), but no user-defined - # __init__ or __new__ for it - if (obj.__init__ is object.__init__ and - obj.__new__ is object.__new__): - # Return a signature of 'object' builtin. - return sigcls.from_callable(object) - else: - raise ValueError( - 'no signature found for builtin type {!r}'.format(obj)) + new = _signature_get_user_defined_method(obj, '__new__') + init = _signature_get_user_defined_method(obj, '__init__') - elif not isinstance(obj, _NonUserDefinedCallables): - # An object with __call__ - # We also check that the 'obj' is not an instance of - # types.WrapperDescriptorType or types.MethodWrapperType to avoid - # infinite recursion (and even potential segfault) - call = _signature_get_user_defined_method(type(obj), '__call__') - if call is not None: + # Go through the MRO and see if any class has user-defined + # pure Python __new__ or __init__ method + for base in obj.__mro__: + # Now we check if the 'obj' class has an own '__new__' method + if new is not None and '__new__' in base.__dict__: + sig = _get_signature_of(new) + if skip_bound_arg: + sig = _signature_bound_method(sig) + return sig + # or an own '__init__' method + elif init is not None and '__init__' in base.__dict__: + return _get_signature_of(init) + + # At this point we know, that `obj` is a class, with no user- + # defined '__init__', '__new__', or class-level '__call__' + + for base in obj.__mro__[:-1]: + # Since '__text_signature__' is implemented as a + # descriptor that extracts text signature from the + # class docstring, if 'obj' is derived from a builtin + # class, its own '__text_signature__' may be 'None'. + # Therefore, we go through the MRO (except the last + # class in there, which is 'object') to find the first + # class with non-empty text signature. try: - sig = _get_signature_of(call) - except ValueError as ex: - msg = 'no signature found for {!r}'.format(obj) - raise ValueError(msg) from ex - - if sig is not None: - # For classes and objects we skip the first parameter of their - # __call__, __new__, or __init__ methods - if skip_bound_arg: - return _signature_bound_method(sig) - else: - return sig + text_sig = base.__text_signature__ + except AttributeError: + pass + else: + if text_sig: + # If 'base' class has a __text_signature__ attribute: + # return a signature based on it + return _signature_fromstr(sigcls, base, text_sig) + + # No '__text_signature__' was found for the 'obj' class. + # Last option is to check if its '__init__' is + # object.__init__ or type.__init__. + if type not in obj.__mro__: + # We have a class (not metaclass), but no user-defined + # __init__ or __new__ for it + if (obj.__init__ is object.__init__ and + obj.__new__ is object.__new__): + # Return a signature of 'object' builtin. + return sigcls.from_callable(object) + else: + raise ValueError( + 'no signature found for builtin type {!r}'.format(obj)) - if isinstance(obj, types.BuiltinFunctionType): - # Raise a nicer error message for builtins - msg = 'no signature found for builtin function {!r}'.format(obj) - raise ValueError(msg) + else: + # An object with __call__ + call = getattr_static(type(obj), '__call__', None) + if call is not None: + call = _descriptor_get(call, obj) + return _get_signature_of(call) raise ValueError('callable {!r} is not supported by signature'.format(obj)) diff --git a/contrib/tools/python3/Lib/json/encoder.py b/contrib/tools/python3/Lib/json/encoder.py index 45f5477418..597849eca0 100644 --- a/contrib/tools/python3/Lib/json/encoder.py +++ b/contrib/tools/python3/Lib/json/encoder.py @@ -174,7 +174,7 @@ class JSONEncoder(object): else: return list(iterable) # Let the base class default method raise the TypeError - return JSONEncoder.default(self, o) + return super().default(o) """ raise TypeError(f'Object of type {o.__class__.__name__} ' diff --git a/contrib/tools/python3/Lib/linecache.py b/contrib/tools/python3/Lib/linecache.py index b164e727c6..5585216d2b 100644 --- a/contrib/tools/python3/Lib/linecache.py +++ b/contrib/tools/python3/Lib/linecache.py @@ -178,13 +178,11 @@ def lazycache(filename, module_globals): return False # Try for a __loader__, if available if module_globals and '__name__' in module_globals: - name = module_globals['__name__'] - if (loader := module_globals.get('__loader__')) is None: - if spec := module_globals.get('__spec__'): - try: - loader = spec.loader - except AttributeError: - pass + spec = module_globals.get('__spec__') + name = getattr(spec, 'name', None) or module_globals['__name__'] + loader = getattr(spec, 'loader', None) + if loader is None: + loader = module_globals.get('__loader__') get_source = getattr(loader, 'get_source', None) if name and get_source: diff --git a/contrib/tools/python3/Lib/logging/__init__.py b/contrib/tools/python3/Lib/logging/__init__.py index 056380fb22..22d3198332 100644 --- a/contrib/tools/python3/Lib/logging/__init__.py +++ b/contrib/tools/python3/Lib/logging/__init__.py @@ -1521,7 +1521,7 @@ class Logger(Filterer): To pass exception information, use the keyword argument exc_info with a true value, e.g. - logger.debug("Houston, we have a %s", "thorny problem", exc_info=1) + logger.debug("Houston, we have a %s", "thorny problem", exc_info=True) """ if self.isEnabledFor(DEBUG): self._log(DEBUG, msg, args, **kwargs) @@ -1533,7 +1533,7 @@ class Logger(Filterer): To pass exception information, use the keyword argument exc_info with a true value, e.g. - logger.info("Houston, we have a %s", "notable problem", exc_info=1) + logger.info("Houston, we have a %s", "notable problem", exc_info=True) """ if self.isEnabledFor(INFO): self._log(INFO, msg, args, **kwargs) @@ -1545,7 +1545,7 @@ class Logger(Filterer): To pass exception information, use the keyword argument exc_info with a true value, e.g. - logger.warning("Houston, we have a %s", "bit of a problem", exc_info=1) + logger.warning("Houston, we have a %s", "bit of a problem", exc_info=True) """ if self.isEnabledFor(WARNING): self._log(WARNING, msg, args, **kwargs) @@ -1562,7 +1562,7 @@ class Logger(Filterer): To pass exception information, use the keyword argument exc_info with a true value, e.g. - logger.error("Houston, we have a %s", "major problem", exc_info=1) + logger.error("Houston, we have a %s", "major problem", exc_info=True) """ if self.isEnabledFor(ERROR): self._log(ERROR, msg, args, **kwargs) @@ -1580,7 +1580,7 @@ class Logger(Filterer): To pass exception information, use the keyword argument exc_info with a true value, e.g. - logger.critical("Houston, we have a %s", "major disaster", exc_info=1) + logger.critical("Houston, we have a %s", "major disaster", exc_info=True) """ if self.isEnabledFor(CRITICAL): self._log(CRITICAL, msg, args, **kwargs) @@ -1598,7 +1598,7 @@ class Logger(Filterer): To pass exception information, use the keyword argument exc_info with a true value, e.g. - logger.log(level, "We have a %s", "mysterious problem", exc_info=1) + logger.log(level, "We have a %s", "mysterious problem", exc_info=True) """ if not isinstance(level, int): if raiseExceptions: @@ -1985,18 +1985,11 @@ class LoggerAdapter(object): """ return self.logger.hasHandlers() - def _log(self, level, msg, args, exc_info=None, extra=None, stack_info=False): + def _log(self, level, msg, args, **kwargs): """ Low-level log implementation, proxied to allow nested logger adapters. """ - return self.logger._log( - level, - msg, - args, - exc_info=exc_info, - extra=extra, - stack_info=stack_info, - ) + return self.logger._log(level, msg, args, **kwargs) @property def manager(self): @@ -2056,7 +2049,7 @@ def basicConfig(**kwargs): that this argument is incompatible with 'filename' - if both are present, 'stream' is ignored. handlers If specified, this should be an iterable of already created - handlers, which will be added to the root handler. Any handler + handlers, which will be added to the root logger. Any handler in the list which does not have a formatter assigned will be assigned the formatter created in this function. force If this keyword is specified as true, any existing handlers diff --git a/contrib/tools/python3/Lib/logging/handlers.py b/contrib/tools/python3/Lib/logging/handlers.py index 6e88184b51..1ae6bb8443 100644 --- a/contrib/tools/python3/Lib/logging/handlers.py +++ b/contrib/tools/python3/Lib/logging/handlers.py @@ -232,19 +232,19 @@ class TimedRotatingFileHandler(BaseRotatingHandler): if self.when == 'S': self.interval = 1 # one second self.suffix = "%Y-%m-%d_%H-%M-%S" - self.extMatch = r"^\d{4}-\d{2}-\d{2}_\d{2}-\d{2}-\d{2}(\.\w+)?$" + extMatch = r"(?<!\d)\d{4}-\d{2}-\d{2}_\d{2}-\d{2}-\d{2}(?!\d)" elif self.when == 'M': self.interval = 60 # one minute self.suffix = "%Y-%m-%d_%H-%M" - self.extMatch = r"^\d{4}-\d{2}-\d{2}_\d{2}-\d{2}(\.\w+)?$" + extMatch = r"(?<!\d)\d{4}-\d{2}-\d{2}_\d{2}-\d{2}(?!\d)" elif self.when == 'H': self.interval = 60 * 60 # one hour self.suffix = "%Y-%m-%d_%H" - self.extMatch = r"^\d{4}-\d{2}-\d{2}_\d{2}(\.\w+)?$" + extMatch = r"(?<!\d)\d{4}-\d{2}-\d{2}_\d{2}(?!\d)" elif self.when == 'D' or self.when == 'MIDNIGHT': self.interval = 60 * 60 * 24 # one day self.suffix = "%Y-%m-%d" - self.extMatch = r"^\d{4}-\d{2}-\d{2}(\.\w+)?$" + extMatch = r"(?<!\d)\d{4}-\d{2}-\d{2}(?!\d)" elif self.when.startswith('W'): self.interval = 60 * 60 * 24 * 7 # one week if len(self.when) != 2: @@ -253,11 +253,17 @@ class TimedRotatingFileHandler(BaseRotatingHandler): raise ValueError("Invalid day specified for weekly rollover: %s" % self.when) self.dayOfWeek = int(self.when[1]) self.suffix = "%Y-%m-%d" - self.extMatch = r"^\d{4}-\d{2}-\d{2}(\.\w+)?$" + extMatch = r"(?<!\d)\d{4}-\d{2}-\d{2}(?!\d)" else: raise ValueError("Invalid rollover interval specified: %s" % self.when) - self.extMatch = re.compile(self.extMatch, re.ASCII) + # extMatch is a pattern for matching a datetime suffix in a file name. + # After custom naming, it is no longer guaranteed to be separated by + # periods from other parts of the filename. The lookup statements + # (?<!\d) and (?!\d) ensure that the datetime suffix (which itself + # starts and ends with digits) is not preceded or followed by digits. + # This reduces the number of false matches and improves performance. + self.extMatch = re.compile(extMatch, re.ASCII) self.interval = self.interval * interval # multiply by units requested # The following line added because the filename passed in could be a # path object (see Issue #27493), but self.baseFilename will be a string @@ -299,7 +305,7 @@ class TimedRotatingFileHandler(BaseRotatingHandler): r = rotate_ts - ((currentHour * 60 + currentMinute) * 60 + currentSecond) - if r < 0: + if r <= 0: # Rotate time is before the current time (for example when # self.rotateAt is 13:45 and it now 14:15), rotation is # tomorrow. @@ -328,17 +334,21 @@ class TimedRotatingFileHandler(BaseRotatingHandler): daysToWait = self.dayOfWeek - day else: daysToWait = 6 - day + self.dayOfWeek + 1 - newRolloverAt = result + (daysToWait * (60 * 60 * 24)) - if not self.utc: - dstNow = t[-1] - dstAtRollover = time.localtime(newRolloverAt)[-1] - if dstNow != dstAtRollover: - if not dstNow: # DST kicks in before next rollover, so we need to deduct an hour - addend = -3600 - else: # DST bows out before next rollover, so we need to add an hour - addend = 3600 - newRolloverAt += addend - result = newRolloverAt + result += daysToWait * _MIDNIGHT + result += self.interval - _MIDNIGHT * 7 + else: + result += self.interval - _MIDNIGHT + if not self.utc: + dstNow = t[-1] + dstAtRollover = time.localtime(result)[-1] + if dstNow != dstAtRollover: + if not dstNow: # DST kicks in before next rollover, so we need to deduct an hour + addend = -3600 + if not time.localtime(result-3600)[-1]: + addend = 0 + else: # DST bows out before next rollover, so we need to add an hour + addend = 3600 + result += addend return result def shouldRollover(self, record): @@ -369,32 +379,28 @@ class TimedRotatingFileHandler(BaseRotatingHandler): dirName, baseName = os.path.split(self.baseFilename) fileNames = os.listdir(dirName) result = [] - # See bpo-44753: Don't use the extension when computing the prefix. - n, e = os.path.splitext(baseName) - prefix = n + '.' - plen = len(prefix) - for fileName in fileNames: - if self.namer is None: - # Our files will always start with baseName - if not fileName.startswith(baseName): - continue - else: - # Our files could be just about anything after custom naming, but - # likely candidates are of the form - # foo.log.DATETIME_SUFFIX or foo.DATETIME_SUFFIX.log - if (not fileName.startswith(baseName) and fileName.endswith(e) and - len(fileName) > (plen + 1) and not fileName[plen+1].isdigit()): - continue - - if fileName[:plen] == prefix: - suffix = fileName[plen:] - # See bpo-45628: The date/time suffix could be anywhere in the - # filename - parts = suffix.split('.') - for part in parts: - if self.extMatch.match(part): + if self.namer is None: + prefix = baseName + '.' + plen = len(prefix) + for fileName in fileNames: + if fileName[:plen] == prefix: + suffix = fileName[plen:] + if self.extMatch.fullmatch(suffix): + result.append(os.path.join(dirName, fileName)) + else: + for fileName in fileNames: + # Our files could be just about anything after custom naming, + # but they should contain the datetime suffix. + # Try to find the datetime suffix in the file name and verify + # that the file name can be generated by this handler. + m = self.extMatch.search(fileName) + while m: + dfn = self.namer(self.baseFilename + "." + m[0]) + if os.path.basename(dfn) == fileName: result.append(os.path.join(dirName, fileName)) break + m = self.extMatch.search(fileName, m.start() + 1) + if len(result) < self.backupCount: result = [] else: @@ -410,17 +416,14 @@ class TimedRotatingFileHandler(BaseRotatingHandler): then we have to get a list of matching filenames, sort them and remove the one with the oldest suffix. """ - if self.stream: - self.stream.close() - self.stream = None # get the time that this sequence started at and make it a TimeTuple currentTime = int(time.time()) - dstNow = time.localtime(currentTime)[-1] t = self.rolloverAt - self.interval if self.utc: timeTuple = time.gmtime(t) else: timeTuple = time.localtime(t) + dstNow = time.localtime(currentTime)[-1] dstThen = timeTuple[-1] if dstNow != dstThen: if dstNow: @@ -431,26 +434,19 @@ class TimedRotatingFileHandler(BaseRotatingHandler): dfn = self.rotation_filename(self.baseFilename + "." + time.strftime(self.suffix, timeTuple)) if os.path.exists(dfn): - os.remove(dfn) + # Already rolled over. + return + + if self.stream: + self.stream.close() + self.stream = None self.rotate(self.baseFilename, dfn) if self.backupCount > 0: for s in self.getFilesToDelete(): os.remove(s) if not self.delay: self.stream = self._open() - newRolloverAt = self.computeRollover(currentTime) - while newRolloverAt <= currentTime: - newRolloverAt = newRolloverAt + self.interval - #If DST changes and midnight or weekly rollover, adjust for this. - if (self.when == 'MIDNIGHT' or self.when.startswith('W')) and not self.utc: - dstAtRollover = time.localtime(newRolloverAt)[-1] - if dstNow != dstAtRollover: - if not dstNow: # DST kicks in before next rollover, so we need to deduct an hour - addend = -3600 - else: # DST bows out before next rollover, so we need to add an hour - addend = 3600 - newRolloverAt += addend - self.rolloverAt = newRolloverAt + self.rolloverAt = self.computeRollover(currentTime) class WatchedFileHandler(logging.FileHandler): """ diff --git a/contrib/tools/python3/Lib/mailbox.py b/contrib/tools/python3/Lib/mailbox.py index c8b3444f64..c7f060ce52 100644 --- a/contrib/tools/python3/Lib/mailbox.py +++ b/contrib/tools/python3/Lib/mailbox.py @@ -698,9 +698,13 @@ class _singlefileMailbox(Mailbox): _sync_close(new_file) # self._file is about to get replaced, so no need to sync. self._file.close() - # Make sure the new file's mode is the same as the old file's - mode = os.stat(self._path).st_mode - os.chmod(new_file.name, mode) + # Make sure the new file's mode and owner are the same as the old file's + info = os.stat(self._path) + os.chmod(new_file.name, info.st_mode) + try: + os.chown(new_file.name, info.st_uid, info.st_gid) + except (AttributeError, OSError): + pass try: os.rename(new_file.name, self._path) except FileExistsError: diff --git a/contrib/tools/python3/Lib/mimetypes.py b/contrib/tools/python3/Lib/mimetypes.py index 37228de482..3cc027aa36 100644 --- a/contrib/tools/python3/Lib/mimetypes.py +++ b/contrib/tools/python3/Lib/mimetypes.py @@ -120,7 +120,13 @@ class MimeTypes: but non-standard types. """ url = os.fspath(url) - scheme, url = urllib.parse._splittype(url) + p = urllib.parse.urlparse(url) + if p.scheme and len(p.scheme) > 1: + scheme = p.scheme + url = p.path + else: + scheme = None + url = os.path.splitdrive(url)[1] if scheme == 'data': # syntax of data URLs: # dataurl := "data:" [ mediatype ] [ ";base64" ] "," data diff --git a/contrib/tools/python3/Lib/multiprocessing/connection.py b/contrib/tools/python3/Lib/multiprocessing/connection.py index dbbf106f68..d0582e3cd5 100644 --- a/contrib/tools/python3/Lib/multiprocessing/connection.py +++ b/contrib/tools/python3/Lib/multiprocessing/connection.py @@ -476,8 +476,9 @@ class Listener(object): ''' if self._listener is None: raise OSError('listener is closed') + c = self._listener.accept() - if self._authkey: + if self._authkey is not None: deliver_challenge(c, self._authkey) answer_challenge(c, self._authkey) return c diff --git a/contrib/tools/python3/Lib/os.py b/contrib/tools/python3/Lib/os.py index 598c9e5023..7ee7d695d9 100644 --- a/contrib/tools/python3/Lib/os.py +++ b/contrib/tools/python3/Lib/os.py @@ -473,7 +473,7 @@ if {open, stat} <= supports_dir_fd and {scandir, stat} <= supports_fd: # lstat()/open()/fstat() trick. if not follow_symlinks: orig_st = stat(top, follow_symlinks=False, dir_fd=dir_fd) - topfd = open(top, O_RDONLY, dir_fd=dir_fd) + topfd = open(top, O_RDONLY | O_NONBLOCK, dir_fd=dir_fd) try: if (follow_symlinks or (st.S_ISDIR(orig_st.st_mode) and path.samestat(orig_st, stat(topfd)))): @@ -522,7 +522,7 @@ if {open, stat} <= supports_dir_fd and {scandir, stat} <= supports_fd: assert entries is not None name, entry = name orig_st = entry.stat(follow_symlinks=False) - dirfd = open(name, O_RDONLY, dir_fd=topfd) + dirfd = open(name, O_RDONLY | O_NONBLOCK, dir_fd=topfd) except OSError as err: if onerror is not None: onerror(err) diff --git a/contrib/tools/python3/Lib/pdb.py b/contrib/tools/python3/Lib/pdb.py index a838a26b03..225c9f253e 100755 --- a/contrib/tools/python3/Lib/pdb.py +++ b/contrib/tools/python3/Lib/pdb.py @@ -154,6 +154,7 @@ class _ScriptTarget(str): __name__='__main__', __file__=self, __builtins__=__builtins__, + __spec__=None, ) @property @@ -298,26 +299,13 @@ class Pdb(bdb.Bdb, cmd.Cmd): # cache it here to ensure that modifications are not overwritten. self.curframe_locals = self.curframe.f_locals self.set_convenience_variable(self.curframe, '_frame', self.curframe) - return self.execRcLines() - # Can be executed earlier than 'setup' if desired - def execRcLines(self): - if not self.rcLines: - return - # local copy because of recursion - rcLines = self.rcLines - rcLines.reverse() - # execute every line only once - self.rcLines = [] - while rcLines: - line = rcLines.pop().strip() - if line and line[0] != '#': - if self.onecmd(line): - # if onecmd returns True, the command wants to exit - # from the interaction, save leftover rc lines - # to execute before next interaction - self.rcLines += reversed(rcLines) - return True + if self.rcLines: + self.cmdqueue = [ + line for line in self.rcLines + if line.strip() and not line.strip().startswith("#") + ] + self.rcLines = [] # Override Bdb methods @@ -430,12 +418,10 @@ class Pdb(bdb.Bdb, cmd.Cmd): pass else: Pdb._previous_sigint_handler = None - if self.setup(frame, traceback): - # no interaction desired at this time (happens if .pdbrc contains - # a command like "continue") - self.forget() - return - self.print_stack_entry(self.stack[self.curindex]) + self.setup(frame, traceback) + # if we have more commands to process, do not show the stack entry + if not self.cmdqueue: + self.print_stack_entry(self.stack[self.curindex]) self._cmdloop() self.forget() @@ -522,7 +508,7 @@ class Pdb(bdb.Bdb, cmd.Cmd): if marker >= 0: # queue up everything after marker next = line[marker+2:].lstrip() - self.cmdqueue.append(next) + self.cmdqueue.insert(0, next) line = line[:marker].rstrip() # Replace all the convenience variables @@ -546,13 +532,12 @@ class Pdb(bdb.Bdb, cmd.Cmd): """Handles one command line during command list definition.""" cmd, arg, line = self.parseline(line) if not cmd: - return + return False if cmd == 'silent': self.commands_silent[self.commands_bnum] = True - return # continue to handle other cmd def in the cmd list + return False # continue to handle other cmd def in the cmd list elif cmd == 'end': - self.cmdqueue = [] - return 1 # end of cmd list + return True # end of cmd list cmdlist = self.commands[self.commands_bnum] if arg: cmdlist.append(cmd+' '+arg) @@ -566,9 +551,8 @@ class Pdb(bdb.Bdb, cmd.Cmd): # one of the resuming commands if func.__name__ in self.commands_resuming: self.commands_doprompt[self.commands_bnum] = False - self.cmdqueue = [] - return 1 - return + return True + return False # interface abstraction functions diff --git a/contrib/tools/python3/Lib/pickletools.py b/contrib/tools/python3/Lib/pickletools.py index 95a77aeb2a..51ee4a7a26 100644 --- a/contrib/tools/python3/Lib/pickletools.py +++ b/contrib/tools/python3/Lib/pickletools.py @@ -1253,7 +1253,7 @@ opcodes = [ stack_before=[], stack_after=[pyint], proto=2, - doc="""Long integer using found-byte length. + doc="""Long integer using four-byte length. A more efficient encoding of a Python long; the long4 encoding says it all."""), diff --git a/contrib/tools/python3/Lib/pydoc.py b/contrib/tools/python3/Lib/pydoc.py index 84bbf588dc..9a8812392a 100755 --- a/contrib/tools/python3/Lib/pydoc.py +++ b/contrib/tools/python3/Lib/pydoc.py @@ -204,6 +204,19 @@ def classname(object, modname): name = object.__module__ + '.' + name return name +def parentname(object, modname): + """Get a name of the enclosing class (qualified it with a module name + if necessary) or module.""" + if '.' in object.__qualname__: + name = object.__qualname__.rpartition('.')[0] + if object.__module__ != modname: + return object.__module__ + '.' + name + else: + return name + else: + if object.__module__ != modname: + return object.__module__ + def isdata(object): """Check if an object is of a type that probably means it's data.""" return not (inspect.ismodule(object) or inspect.isclass(object) or @@ -298,13 +311,15 @@ def visiblename(name, all=None, obj=None): return not name.startswith('_') def classify_class_attrs(object): - """Wrap inspect.classify_class_attrs, with fixup for data descriptors.""" + """Wrap inspect.classify_class_attrs, with fixup for data descriptors and bound methods.""" results = [] for (name, kind, cls, value) in inspect.classify_class_attrs(object): if inspect.isdatadescriptor(value): kind = 'data descriptor' if isinstance(value, property) and value.fset is None: kind = 'readonly property' + elif kind == 'method' and _is_bound_method(value): + kind = 'static method' results.append((name, kind, cls, value)) return results @@ -514,7 +529,7 @@ class Doc: '_thread', 'zipimport') or (file.startswith(basedir) and not file.startswith(os.path.join(basedir, 'site-packages')))) and - object.__name__ not in ('xml.etree', 'test.pydoc_mod')): + object.__name__ not in ('xml.etree', 'test.test_pydoc.pydoc_mod')): if docloc.startswith(("http://", "https://")): docloc = "{}/{}.html".format(docloc.rstrip("/"), object.__name__.lower()) else: @@ -658,6 +673,25 @@ class HTMLDoc(Doc): module.__name__, name, classname(object, modname)) return classname(object, modname) + def parentlink(self, object, modname): + """Make a link for the enclosing class or module.""" + link = None + name, module = object.__name__, sys.modules.get(object.__module__) + if hasattr(module, name) and getattr(module, name) is object: + if '.' in object.__qualname__: + name = object.__qualname__.rpartition('.')[0] + if object.__module__ != modname: + link = '%s.html#%s' % (module.__name__, name) + else: + link = '#%s' % name + else: + if object.__module__ != modname: + link = '%s.html' % module.__name__ + if link: + return '<a href="%s">%s</a>' % (link, parentname(object, modname)) + else: + return parentname(object, modname) + def modulelink(self, object): """Make a link for a module.""" return '<a href="%s.html">%s</a>' % (object.__name__, object.__name__) @@ -902,7 +936,7 @@ class HTMLDoc(Doc): push(self.docdata(value, name, mod)) else: push(self.document(value, name, mod, - funcs, classes, mdict, object)) + funcs, classes, mdict, object, homecls)) push('\n') return attrs @@ -1025,24 +1059,44 @@ class HTMLDoc(Doc): return self.grey('=' + self.repr(object)) def docroutine(self, object, name=None, mod=None, - funcs={}, classes={}, methods={}, cl=None): + funcs={}, classes={}, methods={}, cl=None, homecls=None): """Produce HTML documentation for a function or method object.""" realname = object.__name__ name = name or realname - anchor = (cl and cl.__name__ or '') + '-' + name + if homecls is None: + homecls = cl + anchor = ('' if cl is None else cl.__name__) + '-' + name note = '' - skipdocs = 0 + skipdocs = False + imfunc = None if _is_bound_method(object): - imclass = object.__self__.__class__ - if cl: - if imclass is not cl: - note = ' from ' + self.classlink(imclass, mod) + imself = object.__self__ + if imself is cl: + imfunc = getattr(object, '__func__', None) + elif inspect.isclass(imself): + note = ' class method of %s' % self.classlink(imself, mod) else: - if object.__self__ is not None: - note = ' method of %s instance' % self.classlink( - object.__self__.__class__, mod) - else: - note = ' unbound %s method' % self.classlink(imclass,mod) + note = ' method of %s instance' % self.classlink( + imself.__class__, mod) + elif (inspect.ismethoddescriptor(object) or + inspect.ismethodwrapper(object)): + try: + objclass = object.__objclass__ + except AttributeError: + pass + else: + if cl is None: + note = ' unbound %s method' % self.classlink(objclass, mod) + elif objclass is not homecls: + note = ' from ' + self.classlink(objclass, mod) + else: + imfunc = object + if inspect.isfunction(imfunc) and homecls is not None and ( + imfunc.__module__ != homecls.__module__ or + imfunc.__qualname__ != homecls.__qualname__ + '.' + realname): + pname = self.parentlink(imfunc, mod) + if pname: + note = ' from %s' % pname if (inspect.iscoroutinefunction(object) or inspect.isasyncgenfunction(object)): @@ -1053,10 +1107,13 @@ class HTMLDoc(Doc): if name == realname: title = '<a name="%s"><strong>%s</strong></a>' % (anchor, realname) else: - if cl and inspect.getattr_static(cl, realname, []) is object: + if (cl is not None and + inspect.getattr_static(cl, realname, []) is object): reallink = '<a href="#%s">%s</a>' % ( cl.__name__ + '-' + realname, realname) - skipdocs = 1 + skipdocs = True + if note.startswith(' from '): + note = '' else: reallink = realname title = '<a name="%s"><strong>%s</strong></a> = %s' % ( @@ -1074,7 +1131,8 @@ class HTMLDoc(Doc): # XXX lambda's won't usually have func_annotations['return'] # since the syntax doesn't support but it is possible. # So removing parentheses isn't truly safe. - argspec = argspec[1:-1] # remove parentheses + if not object.__annotations__: + argspec = argspec[1:-1] # remove parentheses if not argspec: argspec = '(...)' @@ -1089,7 +1147,7 @@ class HTMLDoc(Doc): doc = doc and '<dd><span class="code">%s</span></dd>' % doc return '<dl><dt>%s</dt>%s</dl>\n' % (decl, doc) - def docdata(self, object, name=None, mod=None, cl=None): + def docdata(self, object, name=None, mod=None, cl=None, *ignored): """Produce html documentation for a data descriptor.""" results = [] push = results.append @@ -1200,7 +1258,7 @@ class TextDoc(Doc): entry, modname, c, prefix + ' ') return result - def docmodule(self, object, name=None, mod=None): + def docmodule(self, object, name=None, mod=None, *ignored): """Produce text documentation for a given module object.""" name = object.__name__ # ignore the passed-in name synop, desc = splitdoc(getdoc(object)) @@ -1384,7 +1442,7 @@ location listed above. push(self.docdata(value, name, mod)) else: push(self.document(value, - name, mod, object)) + name, mod, object, homecls)) return attrs def spilldescriptors(msg, attrs, predicate): @@ -1459,23 +1517,43 @@ location listed above. """Format an argument default value as text.""" return '=' + self.repr(object) - def docroutine(self, object, name=None, mod=None, cl=None): + def docroutine(self, object, name=None, mod=None, cl=None, homecls=None): """Produce text documentation for a function or method object.""" realname = object.__name__ name = name or realname + if homecls is None: + homecls = cl note = '' - skipdocs = 0 + skipdocs = False + imfunc = None if _is_bound_method(object): - imclass = object.__self__.__class__ - if cl: - if imclass is not cl: - note = ' from ' + classname(imclass, mod) + imself = object.__self__ + if imself is cl: + imfunc = getattr(object, '__func__', None) + elif inspect.isclass(imself): + note = ' class method of %s' % classname(imself, mod) else: - if object.__self__ is not None: - note = ' method of %s instance' % classname( - object.__self__.__class__, mod) - else: - note = ' unbound %s method' % classname(imclass,mod) + note = ' method of %s instance' % classname( + imself.__class__, mod) + elif (inspect.ismethoddescriptor(object) or + inspect.ismethodwrapper(object)): + try: + objclass = object.__objclass__ + except AttributeError: + pass + else: + if cl is None: + note = ' unbound %s method' % classname(objclass, mod) + elif objclass is not homecls: + note = ' from ' + classname(objclass, mod) + else: + imfunc = object + if inspect.isfunction(imfunc) and homecls is not None and ( + imfunc.__module__ != homecls.__module__ or + imfunc.__qualname__ != homecls.__qualname__ + '.' + realname): + pname = parentname(imfunc, mod) + if pname: + note = ' from %s' % pname if (inspect.iscoroutinefunction(object) or inspect.isasyncgenfunction(object)): @@ -1486,8 +1564,11 @@ location listed above. if name == realname: title = self.bold(realname) else: - if cl and inspect.getattr_static(cl, realname, []) is object: - skipdocs = 1 + if (cl is not None and + inspect.getattr_static(cl, realname, []) is object): + skipdocs = True + if note.startswith(' from '): + note = '' title = self.bold(name) + ' = ' + realname argspec = None @@ -1503,7 +1584,8 @@ location listed above. # XXX lambda's won't usually have func_annotations['return'] # since the syntax doesn't support but it is possible. # So removing parentheses isn't truly safe. - argspec = argspec[1:-1] # remove parentheses + if not object.__annotations__: + argspec = argspec[1:-1] # remove parentheses if not argspec: argspec = '(...)' decl = asyncqualifier + title + argspec + note @@ -1514,7 +1596,7 @@ location listed above. doc = getdoc(object) or '' return decl + '\n' + (doc and self.indent(doc).rstrip() + '\n') - def docdata(self, object, name=None, mod=None, cl=None): + def docdata(self, object, name=None, mod=None, cl=None, *ignored): """Produce text documentation for a data descriptor.""" results = [] push = results.append @@ -1530,7 +1612,8 @@ location listed above. docproperty = docdata - def docother(self, object, name=None, mod=None, parent=None, maxlen=None, doc=None): + def docother(self, object, name=None, mod=None, parent=None, *ignored, + maxlen=None, doc=None): """Produce text documentation for a data object.""" repr = self.repr(object) if maxlen: @@ -2410,6 +2493,7 @@ def _start_server(urlhandler, hostname, port): threading.Thread.__init__(self) self.serving = False self.error = None + self.docserver = None def run(self): """Start the server.""" @@ -2442,9 +2526,9 @@ def _start_server(urlhandler, hostname, port): thread = ServerThread(urlhandler, hostname, port) thread.start() - # Wait until thread.serving is True to make sure we are - # really up before returning. - while not thread.error and not thread.serving: + # Wait until thread.serving is True and thread.docserver is set + # to make sure we are really up before returning. + while not thread.error and not (thread.serving and thread.docserver): time.sleep(.01) return thread diff --git a/contrib/tools/python3/Lib/pydoc_data/topics.py b/contrib/tools/python3/Lib/pydoc_data/topics.py index e97e543a87..0eb0e7dce5 100644 --- a/contrib/tools/python3/Lib/pydoc_data/topics.py +++ b/contrib/tools/python3/Lib/pydoc_data/topics.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Autogenerated by Sphinx on Tue Feb 6 21:16:37 2024 +# Autogenerated by Sphinx on Tue Apr 9 09:17:41 2024 # as part of the release process. topics = {'assert': 'The "assert" statement\n' '**********************\n' @@ -722,9 +722,9 @@ topics = {'assert': 'The "assert" statement\n' '\n' 'object.__dir__(self)\n' '\n' - ' Called when "dir()" is called on the object. A ' - 'sequence must be\n' - ' returned. "dir()" converts the returned sequence to a ' + ' Called when "dir()" is called on the object. An ' + 'iterable must be\n' + ' returned. "dir()" converts the returned iterable to a ' 'list and\n' ' sorts it.\n' '\n' @@ -751,8 +751,8 @@ topics = {'assert': 'The "assert" statement\n' 'returned.\n' '\n' 'The "__dir__" function should accept no arguments, and ' - 'return a\n' - 'sequence of strings that represents the names accessible ' + 'return an\n' + 'iterable of strings that represents the names accessible ' 'on module. If\n' 'present, this function overrides the standard "dir()" ' 'search on a\n' @@ -4724,7 +4724,7 @@ topics = {'assert': 'The "assert" statement\n' 'reflection,\n' ' and "__eq__()" and "__ne__()" are their own reflection. ' 'If the\n' - ' operands are of different types, and right operand’s ' + ' operands are of different types, and the right operand’s ' 'type is a\n' ' direct or indirect subclass of the left operand’s type, ' 'the\n' @@ -4734,6 +4734,11 @@ topics = {'assert': 'The "assert" statement\n' 'is not\n' ' considered.\n' '\n' + ' When no appropriate method returns any value other than\n' + ' "NotImplemented", the "==" and "!=" operators will fall ' + 'back to\n' + ' "is" and "is not", respectively.\n' + '\n' 'object.__hash__(self)\n' '\n' ' Called by built-in function "hash()" and for operations ' @@ -5212,22 +5217,23 @@ topics = {'assert': 'The "assert" statement\n' 'the\n' 'current directory, it is read with "\'utf-8\'" encoding and ' 'executed as\n' - 'if it had been typed at the debugger prompt. This is ' - 'particularly\n' - 'useful for aliases. If both files exist, the one in the home\n' - 'directory is read first and aliases defined there can be ' - 'overridden by\n' - 'the local file.\n' - '\n' - 'Changed in version 3.11: ".pdbrc" is now read with "\'utf-8\'" ' - 'encoding.\n' - 'Previously, it was read with the system locale encoding.\n' + 'if it had been typed at the debugger prompt, with the exception ' + 'that\n' + 'empty lines and lines starting with "#" are ignored. This is\n' + 'particularly useful for aliases. If both files exist, the one ' + 'in the\n' + 'home directory is read first and aliases defined there can be\n' + 'overridden by the local file.\n' '\n' 'Changed in version 3.2: ".pdbrc" can now contain commands that\n' 'continue debugging, such as "continue" or "next". Previously, ' 'these\n' 'commands had no effect.\n' '\n' + 'Changed in version 3.11: ".pdbrc" is now read with "\'utf-8\'" ' + 'encoding.\n' + 'Previously, it was read with the system locale encoding.\n' + '\n' 'h(elp) [command]\n' '\n' ' Without argument, print the list of available commands. With ' @@ -8559,32 +8565,36 @@ topics = {'assert': 'The "assert" statement\n' '\n' ' nonlocal_stmt ::= "nonlocal" identifier ("," identifier)*\n' '\n' - 'The "nonlocal" statement causes the listed identifiers to refer ' - 'to\n' - 'previously bound variables in the nearest enclosing scope ' - 'excluding\n' - 'globals. This is important because the default behavior for ' - 'binding is\n' - 'to search the local namespace first. The statement allows\n' - 'encapsulated code to rebind variables outside of the local ' - 'scope\n' - 'besides the global (module) scope.\n' - '\n' - 'Names listed in a "nonlocal" statement, unlike those listed in ' - 'a\n' - '"global" statement, must refer to pre-existing bindings in an\n' - 'enclosing scope (the scope in which a new binding should be ' - 'created\n' - 'cannot be determined unambiguously).\n' - '\n' - 'Names listed in a "nonlocal" statement must not collide with ' - 'pre-\n' - 'existing bindings in the local scope.\n' + 'When the definition of a function or class is nested (enclosed) ' + 'within\n' + 'the definitions of other functions, its nonlocal scopes are the ' + 'local\n' + 'scopes of the enclosing functions. The "nonlocal" statement ' + 'causes the\n' + 'listed identifiers to refer to names previously bound in ' + 'nonlocal\n' + 'scopes. It allows encapsulated code to rebind such nonlocal\n' + 'identifiers. If a name is bound in more than one nonlocal ' + 'scope, the\n' + 'nearest binding is used. If a name is not bound in any nonlocal ' + 'scope,\n' + 'or if there is no nonlocal scope, a "SyntaxError" is raised.\n' + '\n' + 'The nonlocal statement applies to the entire scope of a function ' + 'or\n' + 'class body. A "SyntaxError" is raised if a variable is used or\n' + 'assigned to prior to its nonlocal declaration in the scope.\n' '\n' 'See also:\n' '\n' ' **PEP 3104** - Access to Names in Outer Scopes\n' - ' The specification for the "nonlocal" statement.\n', + ' The specification for the "nonlocal" statement.\n' + '\n' + '**Programmer’s note:** "nonlocal" is a directive to the parser ' + 'and\n' + 'applies only to code parsed along with it. See the note for ' + 'the\n' + '"global" statement.\n', 'numbers': 'Numeric literals\n' '****************\n' '\n' @@ -8680,7 +8690,7 @@ topics = {'assert': 'The "assert" statement\n' '"__rsub__()"\n' ' method, "type(y).__rsub__(y, x)" is called if ' '"type(x).__sub__(x,\n' - ' y)" returns *NotImplemented*.\n' + ' y)" returns "NotImplemented".\n' '\n' ' Note that ternary "pow()" will not try calling ' '"__rpow__()" (the\n' @@ -8723,14 +8733,18 @@ topics = {'assert': 'The "assert" statement\n' 'the result\n' ' (which could be, but does not have to be, *self*). If a ' 'specific\n' - ' method is not defined, the augmented assignment falls ' - 'back to the\n' - ' normal methods. For instance, if *x* is an instance of ' - 'a class\n' - ' with an "__iadd__()" method, "x += y" is equivalent to ' - '"x =\n' - ' x.__iadd__(y)" . Otherwise, "x.__add__(y)" and ' - '"y.__radd__(x)" are\n' + ' method is not defined, or if that method returns ' + '"NotImplemented",\n' + ' the augmented assignment falls back to the normal ' + 'methods. For\n' + ' instance, if *x* is an instance of a class with an ' + '"__iadd__()"\n' + ' method, "x += y" is equivalent to "x = x.__iadd__(y)" . ' + 'If\n' + ' "__iadd__()" does not exist, or if "x.__iadd__(y)" ' + 'returns\n' + ' "NotImplemented", "x.__add__(y)" and "y.__radd__(x)" ' + 'are\n' ' considered, as with the evaluation of "x + y". In ' 'certain\n' ' situations, augmented assignment can result in ' @@ -8811,7 +8825,7 @@ topics = {'assert': 'The "assert" statement\n' 'Every object has an identity, a type and a value. An object’s\n' '*identity* never changes once it has been created; you may think ' 'of it\n' - 'as the object’s address in memory. The ‘"is"’ operator compares ' + 'as the object’s address in memory. The "is" operator compares ' 'the\n' 'identity of two objects; the "id()" function returns an integer\n' 'representing its identity.\n' @@ -8876,7 +8890,7 @@ topics = {'assert': 'The "assert" statement\n' 'Note that the use of the implementation’s tracing or debugging\n' 'facilities may keep objects alive that would normally be ' 'collectable.\n' - 'Also note that catching an exception with a ‘"try"…"except"’ ' + 'Also note that catching an exception with a "try"…"except" ' 'statement\n' 'may keep objects alive.\n' '\n' @@ -8891,8 +8905,9 @@ topics = {'assert': 'The "assert" statement\n' 'release the external resource, usually a "close()" method. ' 'Programs\n' 'are strongly recommended to explicitly close such objects. The\n' - '‘"try"…"finally"’ statement and the ‘"with"’ statement provide\n' - 'convenient ways to do this.\n' + '"try"…"finally" statement and the "with" statement provide ' + 'convenient\n' + 'ways to do this.\n' '\n' 'Some objects contain references to other objects; these are ' 'called\n' @@ -9269,10 +9284,7 @@ topics = {'assert': 'The "assert" statement\n' 'The try statement.\n' '\n' 'Changed in version 3.3: "None" is now permitted as "Y" in "raise X\n' - 'from Y".\n' - '\n' - 'New in version 3.3: The "__suppress_context__" attribute to ' - 'suppress\n' + 'from Y".Added the "__suppress_context__" attribute to suppress\n' 'automatic display of the exception context.\n' '\n' 'Changed in version 3.11: If the traceback of the active exception ' @@ -10057,8 +10069,8 @@ topics = {'assert': 'The "assert" statement\n' 'reflection,\n' ' and "__eq__()" and "__ne__()" are their own reflection. ' 'If the\n' - ' operands are of different types, and right operand’s type ' - 'is a\n' + ' operands are of different types, and the right operand’s ' + 'type is a\n' ' direct or indirect subclass of the left operand’s type, ' 'the\n' ' reflected method of the right operand has priority, ' @@ -10067,6 +10079,11 @@ topics = {'assert': 'The "assert" statement\n' 'is not\n' ' considered.\n' '\n' + ' When no appropriate method returns any value other than\n' + ' "NotImplemented", the "==" and "!=" operators will fall ' + 'back to\n' + ' "is" and "is not", respectively.\n' + '\n' 'object.__hash__(self)\n' '\n' ' Called by built-in function "hash()" and for operations ' @@ -10308,9 +10325,9 @@ topics = {'assert': 'The "assert" statement\n' '\n' 'object.__dir__(self)\n' '\n' - ' Called when "dir()" is called on the object. A sequence ' + ' Called when "dir()" is called on the object. An iterable ' 'must be\n' - ' returned. "dir()" converts the returned sequence to a ' + ' returned. "dir()" converts the returned iterable to a ' 'list and\n' ' sorts it.\n' '\n' @@ -10337,8 +10354,8 @@ topics = {'assert': 'The "assert" statement\n' 'returned.\n' '\n' 'The "__dir__" function should accept no arguments, and ' - 'return a\n' - 'sequence of strings that represents the names accessible on ' + 'return an\n' + 'iterable of strings that represents the names accessible on ' 'module. If\n' 'present, this function overrides the standard "dir()" search ' 'on a\n' @@ -11606,7 +11623,7 @@ topics = {'assert': 'The "assert" statement\n' '"__rsub__()"\n' ' method, "type(y).__rsub__(y, x)" is called if ' '"type(x).__sub__(x,\n' - ' y)" returns *NotImplemented*.\n' + ' y)" returns "NotImplemented".\n' '\n' ' Note that ternary "pow()" will not try calling ' '"__rpow__()" (the\n' @@ -11649,14 +11666,17 @@ topics = {'assert': 'The "assert" statement\n' 'the result\n' ' (which could be, but does not have to be, *self*). If a ' 'specific\n' - ' method is not defined, the augmented assignment falls ' - 'back to the\n' - ' normal methods. For instance, if *x* is an instance of a ' - 'class\n' - ' with an "__iadd__()" method, "x += y" is equivalent to "x ' - '=\n' - ' x.__iadd__(y)" . Otherwise, "x.__add__(y)" and ' - '"y.__radd__(x)" are\n' + ' method is not defined, or if that method returns ' + '"NotImplemented",\n' + ' the augmented assignment falls back to the normal ' + 'methods. For\n' + ' instance, if *x* is an instance of a class with an ' + '"__iadd__()"\n' + ' method, "x += y" is equivalent to "x = x.__iadd__(y)" . ' + 'If\n' + ' "__iadd__()" does not exist, or if "x.__iadd__(y)" ' + 'returns\n' + ' "NotImplemented", "x.__add__(y)" and "y.__radd__(x)" are\n' ' considered, as with the evaluation of "x + y". In ' 'certain\n' ' situations, augmented assignment can result in unexpected ' @@ -12998,9 +13018,8 @@ topics = {'assert': 'The "assert" statement\n' '\n' 'New in version 3.3: The "\'rb\'" prefix of raw bytes literals has ' 'been\n' - 'added as a synonym of "\'br\'".\n' - '\n' - 'New in version 3.3: Support for the unicode legacy literal\n' + 'added as a synonym of "\'br\'".Support for the unicode legacy ' + 'literal\n' '("u\'value\'") was reintroduced to simplify the maintenance of ' 'dual\n' 'Python 2.x and 3.x codebases. See **PEP 414** for more ' @@ -13709,14 +13728,18 @@ topics = {'assert': 'The "assert" statement\n' 'contains\n' 'the numbers 0, 1, …, *n*-1. Item *i* of sequence *a* is selected ' 'by\n' - '"a[i]".\n' + '"a[i]". Some sequences, including built-in sequences, interpret\n' + 'negative subscripts by adding the sequence length. For example,\n' + '"a[-2]" equals "a[n-2]", the second to last item of sequence a ' + 'with\n' + 'length "n".\n' '\n' 'Sequences also support slicing: "a[i:j]" selects all items with ' 'index\n' '*k* such that *i* "<=" *k* "<" *j*. When used as an expression, a\n' - 'slice is a sequence of the same type. This implies that the index ' - 'set\n' - 'is renumbered so that it starts at 0.\n' + 'slice is a sequence of the same type. The comment above about ' + 'negative\n' + 'indexes also applies to negative slice positions.\n' '\n' 'Some sequences also support “extended slicing” with a third “step”\n' 'parameter: "a[i:j:k]" selects all items of *a* with index *x* where ' @@ -14461,7 +14484,9 @@ topics = {'assert': 'The "assert" statement\n' 'name |\n' '+----------------------------------------------------+----------------------------------------------------+\n' '| codeobject.co_qualname | The fully ' - 'qualified function name |\n' + 'qualified function name New in version |\n' + '| | ' + '3.11. |\n' '+----------------------------------------------------+----------------------------------------------------+\n' '| codeobject.co_argcount | The total ' 'number of positional *parameters* |\n' @@ -14681,6 +14706,14 @@ topics = {'assert': 'The "assert" statement\n' 'tools.\n' ' The PEP that introduced the "co_lines()" method.\n' '\n' + 'codeobject.replace(**kwargs)\n' + '\n' + ' Return a copy of the code object with new values for the ' + 'specified\n' + ' fields.\n' + '\n' + ' New in version 3.8.\n' + '\n' '\n' 'Frame objects\n' '-------------\n' @@ -16019,7 +16052,7 @@ topics = {'assert': 'The "assert" statement\n' '\n' ' For sorting examples and a brief sorting tutorial, see ' 'Sorting\n' - ' HOW TO.\n' + ' Techniques.\n' '\n' ' **CPython implementation detail:** While a list is being ' 'sorted,\n' @@ -16234,9 +16267,8 @@ topics = {'assert': 'The "assert" statement\n' 'objects\n' 'based on the sequence of values they define (instead of ' 'comparing\n' - 'based on object identity).\n' - '\n' - 'New in version 3.3: The "start", "stop" and "step" attributes.\n' + 'based on object identity).Added the "start", "stop" and "step"\n' + 'attributes.\n' '\n' 'See also:\n' '\n' diff --git a/contrib/tools/python3/Lib/shutil.py b/contrib/tools/python3/Lib/shutil.py index 96463007d1..3a2b6be39b 100644 --- a/contrib/tools/python3/Lib/shutil.py +++ b/contrib/tools/python3/Lib/shutil.py @@ -676,7 +676,7 @@ def _rmtree_safe_fd(topfd, path, onexc): continue if is_dir: try: - dirfd = os.open(entry.name, os.O_RDONLY, dir_fd=topfd) + dirfd = os.open(entry.name, os.O_RDONLY | os.O_NONBLOCK, dir_fd=topfd) dirfd_closed = False except OSError as err: onexc(os.open, fullname, err) @@ -775,7 +775,7 @@ def rmtree(path, ignore_errors=False, onerror=None, *, onexc=None, dir_fd=None): onexc(os.lstat, path, err) return try: - fd = os.open(path, os.O_RDONLY, dir_fd=dir_fd) + fd = os.open(path, os.O_RDONLY | os.O_NONBLOCK, dir_fd=dir_fd) fd_closed = False except Exception as err: onexc(os.open, path, err) diff --git a/contrib/tools/python3/Lib/subprocess.py b/contrib/tools/python3/Lib/subprocess.py index 3264d9afc7..1d17ae3608 100644 --- a/contrib/tools/python3/Lib/subprocess.py +++ b/contrib/tools/python3/Lib/subprocess.py @@ -1581,6 +1581,8 @@ class Popen: """Internal implementation of wait() on Windows.""" if timeout is None: timeout_millis = _winapi.INFINITE + elif timeout <= 0: + timeout_millis = 0 else: timeout_millis = int(timeout * 1000) if self.returncode is None: diff --git a/contrib/tools/python3/Lib/tokenize.py b/contrib/tools/python3/Lib/tokenize.py index 49e8144edd..7af7a5cc1c 100644 --- a/contrib/tools/python3/Lib/tokenize.py +++ b/contrib/tools/python3/Lib/tokenize.py @@ -170,6 +170,7 @@ class Untokenizer: self.tokens = [] self.prev_row = 1 self.prev_col = 0 + self.prev_type = None self.encoding = None def add_whitespace(self, start): @@ -185,6 +186,29 @@ class Untokenizer: if col_offset: self.tokens.append(" " * col_offset) + def escape_brackets(self, token): + characters = [] + consume_until_next_bracket = False + for character in token: + if character == "}": + if consume_until_next_bracket: + consume_until_next_bracket = False + else: + characters.append(character) + if character == "{": + n_backslashes = sum( + 1 for char in _itertools.takewhile( + "\\".__eq__, + characters[-2::-1] + ) + ) + if n_backslashes % 2 == 0: + characters.append(character) + else: + consume_until_next_bracket = True + characters.append(character) + return "".join(characters) + def untokenize(self, iterable): it = iter(iterable) indents = [] @@ -216,11 +240,13 @@ class Untokenizer: startline = False elif tok_type == FSTRING_MIDDLE: if '{' in token or '}' in token: + token = self.escape_brackets(token) + last_line = token.splitlines()[-1] end_line, end_col = end - end = (end_line, end_col + token.count('{') + token.count('}')) - token = re.sub('{', '{{', token) - token = re.sub('}', '}}', token) - + extra_chars = last_line.count("{{") + last_line.count("}}") + end = (end_line, end_col + extra_chars) + elif tok_type in (STRING, FSTRING_START) and self.prev_type in (STRING, FSTRING_END): + self.tokens.append(" ") self.add_whitespace(start) self.tokens.append(token) @@ -228,6 +254,7 @@ class Untokenizer: if tok_type in (NEWLINE, NL): self.prev_row += 1 self.prev_col = 0 + self.prev_type = tok_type return "".join(self.tokens) def compat(self, token, iterable): @@ -235,6 +262,7 @@ class Untokenizer: toks_append = self.tokens.append startline = token[0] in (NEWLINE, NL) prevstring = False + in_fstring = 0 for tok in _itertools.chain([token], iterable): toknum, tokval = tok[:2] @@ -253,6 +281,10 @@ class Untokenizer: else: prevstring = False + if toknum == FSTRING_START: + in_fstring += 1 + elif toknum == FSTRING_END: + in_fstring -= 1 if toknum == INDENT: indents.append(tokval) continue @@ -265,11 +297,18 @@ class Untokenizer: toks_append(indents[-1]) startline = False elif toknum == FSTRING_MIDDLE: - if '{' in tokval or '}' in tokval: - tokval = re.sub('{', '{{', tokval) - tokval = re.sub('}', '}}', tokval) + tokval = self.escape_brackets(tokval) + + # Insert a space between two consecutive brackets if we are in an f-string + if tokval in {"{", "}"} and self.tokens and self.tokens[-1] == tokval and in_fstring: + tokval = ' ' + tokval + + # Insert a space between two consecutive f-strings + if toknum in (STRING, FSTRING_START) and self.prev_type in (STRING, FSTRING_END): + self.tokens.append(" ") toks_append(tokval) + self.prev_type = toknum def untokenize(iterable): diff --git a/contrib/tools/python3/Lib/typing.py b/contrib/tools/python3/Lib/typing.py index ffe7ce8d8a..b58c2d3064 100644 --- a/contrib/tools/python3/Lib/typing.py +++ b/contrib/tools/python3/Lib/typing.py @@ -314,19 +314,33 @@ def _unpack_args(args): newargs.append(arg) return newargs -def _deduplicate(params): +def _deduplicate(params, *, unhashable_fallback=False): # Weed out strict duplicates, preserving the first of each occurrence. - all_params = set(params) - if len(all_params) < len(params): - new_params = [] - for t in params: - if t in all_params: - new_params.append(t) - all_params.remove(t) - params = new_params - assert not all_params, all_params - return params - + try: + return dict.fromkeys(params) + except TypeError: + if not unhashable_fallback: + raise + # Happens for cases like `Annotated[dict, {'x': IntValidator()}]` + return _deduplicate_unhashable(params) + +def _deduplicate_unhashable(unhashable_params): + new_unhashable = [] + for t in unhashable_params: + if t not in new_unhashable: + new_unhashable.append(t) + return new_unhashable + +def _compare_args_orderless(first_args, second_args): + first_unhashable = _deduplicate_unhashable(first_args) + second_unhashable = _deduplicate_unhashable(second_args) + t = list(second_unhashable) + try: + for elem in first_unhashable: + t.remove(elem) + except ValueError: + return False + return not t def _remove_dups_flatten(parameters): """Internal helper for Union creation and substitution. @@ -341,7 +355,7 @@ def _remove_dups_flatten(parameters): else: params.append(p) - return tuple(_deduplicate(params)) + return tuple(_deduplicate(params, unhashable_fallback=True)) def _flatten_literal_params(parameters): @@ -530,7 +544,7 @@ class Any(metaclass=_AnyMeta): def __new__(cls, *args, **kwargs): if cls is Any: raise TypeError("Any cannot be instantiated") - return super().__new__(cls, *args, **kwargs) + return super().__new__(cls) @_SpecialForm @@ -832,22 +846,25 @@ def TypeGuard(self, parameters): 2. If the return value is ``True``, the type of its argument is the type inside ``TypeGuard``. - For example:: + For example:: + + def is_str_list(val: list[object]) -> TypeGuard[list[str]]: + '''Determines whether all objects in the list are strings''' + return all(isinstance(x, str) for x in val) - def is_str(val: Union[str, float]): - # "isinstance" type guard - if isinstance(val, str): - # Type of ``val`` is narrowed to ``str`` - ... - else: - # Else, type of ``val`` is narrowed to ``float``. - ... + def func1(val: list[object]): + if is_str_list(val): + # Type of ``val`` is narrowed to ``list[str]``. + print(" ".join(val)) + else: + # Type of ``val`` remains as ``list[object]``. + print("Not a list of strings!") Strict type narrowing is not enforced -- ``TypeB`` need not be a narrower form of ``TypeA`` (it can even be a wider form) and this may lead to type-unsafe results. The main reason is to allow for things like - narrowing ``List[object]`` to ``List[str]`` even though the latter is not - a subtype of the former, since ``List`` is invariant. The responsibility of + narrowing ``list[object]`` to ``list[str]`` even though the latter is not + a subtype of the former, since ``list`` is invariant. The responsibility of writing type-safe type guards is left to the user. ``TypeGuard`` also works with type variables. For more information, see @@ -872,7 +889,7 @@ class ForwardRef(_Final, _root=True): # If we do `def f(*args: *Ts)`, then we'll have `arg = '*Ts'`. # Unfortunately, this isn't a valid expression on its own, so we # do the unpacking manually. - if arg[0] == '*': + if arg.startswith('*'): arg_to_compile = f'({arg},)[0]' # E.g. (*Ts,)[0] or (*tuple[int, int],)[0] else: arg_to_compile = arg @@ -1140,7 +1157,9 @@ class _BaseGenericAlias(_Final, _root=True): result = self.__origin__(*args, **kwargs) try: result.__orig_class__ = self - except AttributeError: + # Some objects raise TypeError (or something even more exotic) + # if you try to set attributes on them; we guard against that here + except Exception: pass return result @@ -1546,7 +1565,10 @@ class _UnionGenericAlias(_NotIterable, _GenericAlias, _root=True): def __eq__(self, other): if not isinstance(other, (_UnionGenericAlias, types.UnionType)): return NotImplemented - return set(self.__args__) == set(other.__args__) + try: # fast path + return set(self.__args__) == set(other.__args__) + except TypeError: # not hashable, slow path + return _compare_args_orderless(self.__args__, other.__args__) def __hash__(self): return hash(frozenset(self.__args__)) @@ -3254,11 +3276,11 @@ class TextIO(IO[str]): class _DeprecatedType(type): def __getattribute__(cls, name): - if name not in ("__dict__", "__module__") and name in cls.__dict__: + if name not in {"__dict__", "__module__", "__doc__"} and name in cls.__dict__: warnings.warn( f"{cls.__name__} is deprecated, import directly " f"from typing instead. {cls.__name__} will be removed " - "in Python 3.12.", + "in Python 3.13.", DeprecationWarning, stacklevel=2, ) diff --git a/contrib/tools/python3/Lib/unittest/mock.py b/contrib/tools/python3/Lib/unittest/mock.py index a2187580af..0e1b9ace7b 100644 --- a/contrib/tools/python3/Lib/unittest/mock.py +++ b/contrib/tools/python3/Lib/unittest/mock.py @@ -543,7 +543,7 @@ class NonCallableMock(Base): if self._mock_delegate is not None: ret = self._mock_delegate.return_value - if ret is DEFAULT: + if ret is DEFAULT and self._mock_wraps is None: ret = self._get_child_mock( _new_parent=self, _new_name='()' ) @@ -1204,6 +1204,9 @@ class CallableMixin(Base): if self._mock_return_value is not DEFAULT: return self.return_value + if self._mock_delegate and self._mock_delegate.return_value is not DEFAULT: + return self.return_value + if self._mock_wraps is not None: return self._mock_wraps(*args, **kwargs) @@ -2754,9 +2757,12 @@ def create_autospec(spec, spec_set=False, instance=False, _parent=None, if _parent is not None and not instance: _parent._mock_children[_name] = mock + wrapped = kwargs.get('wraps') + if is_type and not instance and 'return_value' not in kwargs: mock.return_value = create_autospec(spec, spec_set, instance=True, - _name='()', _parent=mock) + _name='()', _parent=mock, + wraps=wrapped) for entry in dir(spec): if _is_magic(entry): @@ -2778,6 +2784,9 @@ def create_autospec(spec, spec_set=False, instance=False, _parent=None, continue kwargs = {'spec': original} + # Wrap child attributes also. + if wrapped and hasattr(wrapped, entry): + kwargs.update(wraps=original) if spec_set: kwargs = {'spec_set': original} diff --git a/contrib/tools/python3/Lib/urllib/parse.py b/contrib/tools/python3/Lib/urllib/parse.py index c129b0d797..fc9e7c99f2 100644 --- a/contrib/tools/python3/Lib/urllib/parse.py +++ b/contrib/tools/python3/Lib/urllib/parse.py @@ -763,42 +763,48 @@ def parse_qsl(qs, keep_blank_values=False, strict_parsing=False, Returns a list, as G-d intended. """ - qs, _coerce_result = _coerce_args(qs) - separator, _ = _coerce_args(separator) - if not separator or (not isinstance(separator, (str, bytes))): + if not separator or not isinstance(separator, (str, bytes)): raise ValueError("Separator must be of type string or bytes.") + if isinstance(qs, str): + if not isinstance(separator, str): + separator = str(separator, 'ascii') + eq = '=' + def _unquote(s): + return unquote_plus(s, encoding=encoding, errors=errors) + else: + if not qs: + return [] + # Use memoryview() to reject integers and iterables, + # acceptable by the bytes constructor. + qs = bytes(memoryview(qs)) + if isinstance(separator, str): + separator = bytes(separator, 'ascii') + eq = b'=' + def _unquote(s): + return unquote_to_bytes(s.replace(b'+', b' ')) + + if not qs: + return [] # If max_num_fields is defined then check that the number of fields # is less than max_num_fields. This prevents a memory exhaustion DOS # attack via post bodies with many fields. if max_num_fields is not None: - num_fields = 1 + qs.count(separator) if qs else 0 + num_fields = 1 + qs.count(separator) if max_num_fields < num_fields: raise ValueError('Max number of fields exceeded') r = [] - query_args = qs.split(separator) if qs else [] - for name_value in query_args: - if not name_value and not strict_parsing: - continue - nv = name_value.split('=', 1) - if len(nv) != 2: - if strict_parsing: + for name_value in qs.split(separator): + if name_value or strict_parsing: + name, has_eq, value = name_value.partition(eq) + if not has_eq and strict_parsing: raise ValueError("bad query field: %r" % (name_value,)) - # Handle case of a control-name with no equal sign - if keep_blank_values: - nv.append('') - else: - continue - if len(nv[1]) or keep_blank_values: - name = nv[0].replace('+', ' ') - name = unquote(name, encoding=encoding, errors=errors) - name = _coerce_result(name) - value = nv[1].replace('+', ' ') - value = unquote(value, encoding=encoding, errors=errors) - value = _coerce_result(value) - r.append((name, value)) + if value or keep_blank_values: + name = _unquote(name) + value = _unquote(value) + r.append((name, value)) return r def unquote_plus(string, encoding='utf-8', errors='replace'): diff --git a/contrib/tools/python3/Lib/urllib/request.py b/contrib/tools/python3/Lib/urllib/request.py index 5314b3f260..7228a35534 100644 --- a/contrib/tools/python3/Lib/urllib/request.py +++ b/contrib/tools/python3/Lib/urllib/request.py @@ -2589,6 +2589,7 @@ def _proxy_bypass_macosx_sysconf(host, proxy_settings): } """ from fnmatch import fnmatch + from ipaddress import AddressValueError, IPv4Address hostonly, port = _splitport(host) @@ -2605,20 +2606,17 @@ def _proxy_bypass_macosx_sysconf(host, proxy_settings): return True hostIP = None + try: + hostIP = int(IPv4Address(hostonly)) + except AddressValueError: + pass for value in proxy_settings.get('exceptions', ()): # Items in the list are strings like these: *.local, 169.254/16 if not value: continue m = re.match(r"(\d+(?:\.\d+)*)(/\d+)?", value) - if m is not None: - if hostIP is None: - try: - hostIP = socket.gethostbyname(hostonly) - hostIP = ip2num(hostIP) - except OSError: - continue - + if m is not None and hostIP is not None: base = ip2num(m.group(1)) mask = m.group(2) if mask is None: @@ -2641,6 +2639,31 @@ def _proxy_bypass_macosx_sysconf(host, proxy_settings): return False +# Same as _proxy_bypass_macosx_sysconf, testable on all platforms +def _proxy_bypass_winreg_override(host, override): + """Return True if the host should bypass the proxy server. + + The proxy override list is obtained from the Windows + Internet settings proxy override registry value. + + An example of a proxy override value is: + "www.example.com;*.example.net; 192.168.0.1" + """ + from fnmatch import fnmatch + + host, _ = _splitport(host) + proxy_override = override.split(';') + for test in proxy_override: + test = test.strip() + # "<local>" should bypass the proxy server for all intranet addresses + if test == '<local>': + if '.' not in host: + return True + elif fnmatch(host, test): + return True + return False + + if sys.platform == 'darwin': from _scproxy import _get_proxy_settings, _get_proxies @@ -2739,7 +2762,7 @@ elif os.name == 'nt': import winreg except ImportError: # Std modules, so should be around - but you never know! - return 0 + return False try: internetSettings = winreg.OpenKey(winreg.HKEY_CURRENT_USER, r'Software\Microsoft\Windows\CurrentVersion\Internet Settings') @@ -2749,40 +2772,10 @@ elif os.name == 'nt': 'ProxyOverride')[0]) # ^^^^ Returned as Unicode but problems if not converted to ASCII except OSError: - return 0 + return False if not proxyEnable or not proxyOverride: - return 0 - # try to make a host list from name and IP address. - rawHost, port = _splitport(host) - host = [rawHost] - try: - addr = socket.gethostbyname(rawHost) - if addr != rawHost: - host.append(addr) - except OSError: - pass - try: - fqdn = socket.getfqdn(rawHost) - if fqdn != rawHost: - host.append(fqdn) - except OSError: - pass - # make a check value list from the registry entry: replace the - # '<local>' string by the localhost entry and the corresponding - # canonical entry. - proxyOverride = proxyOverride.split(';') - # now check if we match one of the registry values. - for test in proxyOverride: - if test == '<local>': - if '.' not in rawHost: - return 1 - test = test.replace(".", r"\.") # mask dots - test = test.replace("*", r".*") # change glob sequence - test = test.replace("?", r".") # change glob char - for val in host: - if re.match(test, val, re.I): - return 1 - return 0 + return False + return _proxy_bypass_winreg_override(host, proxyOverride) def proxy_bypass(host): """Return True, if host should be bypassed. diff --git a/contrib/tools/python3/Lib/xml/etree/ElementTree.py b/contrib/tools/python3/Lib/xml/etree/ElementTree.py index bb7362d163..fd2cc8704e 100644 --- a/contrib/tools/python3/Lib/xml/etree/ElementTree.py +++ b/contrib/tools/python3/Lib/xml/etree/ElementTree.py @@ -1313,6 +1313,11 @@ class XMLPullParser: else: yield event + def flush(self): + if self._parser is None: + raise ValueError("flush() called after end of stream") + self._parser.flush() + def XML(text, parser=None): """Parse XML document from string constant. @@ -1719,6 +1724,15 @@ class XMLParser: del self.parser, self._parser del self.target, self._target + def flush(self): + was_enabled = self.parser.GetReparseDeferralEnabled() + try: + self.parser.SetReparseDeferralEnabled(False) + self.parser.Parse(b"", False) + except self._error as v: + self._raiseerror(v) + finally: + self.parser.SetReparseDeferralEnabled(was_enabled) # -------------------------------------------------------------------- # C14N 2.0 diff --git a/contrib/tools/python3/Lib/xml/sax/expatreader.py b/contrib/tools/python3/Lib/xml/sax/expatreader.py index b9ad52692d..ba3c1e9851 100644 --- a/contrib/tools/python3/Lib/xml/sax/expatreader.py +++ b/contrib/tools/python3/Lib/xml/sax/expatreader.py @@ -214,6 +214,20 @@ class ExpatParser(xmlreader.IncrementalParser, xmlreader.Locator): # FIXME: when to invoke error()? self._err_handler.fatalError(exc) + def flush(self): + if self._parser is None: + return + + was_enabled = self._parser.GetReparseDeferralEnabled() + try: + self._parser.SetReparseDeferralEnabled(False) + self._parser.Parse(b"", False) + except expat.error as e: + exc = SAXParseException(expat.ErrorString(e.code), e, self) + self._err_handler.fatalError(exc) + finally: + self._parser.SetReparseDeferralEnabled(was_enabled) + def _close_source(self): source = self._source try: diff --git a/contrib/tools/python3/Lib/ya.make b/contrib/tools/python3/Lib/ya.make index 407fd45aaf..81d0f7ca7d 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.12.2) +VERSION(3.12.3) -ORIGINAL_SOURCE(https://github.com/python/cpython/archive/v3.12.2.tar.gz) +ORIGINAL_SOURCE(https://github.com/python/cpython/archive/v3.12.3.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 8918484207..91358156bc 100644 --- a/contrib/tools/python3/Lib/zipfile/__init__.py +++ b/contrib/tools/python3/Lib/zipfile/__init__.py @@ -582,7 +582,15 @@ class ZipInfo (object): def is_dir(self): """Return True if this archive member is a directory.""" - return self.filename.endswith('/') + if self.filename.endswith('/'): + return True + # The ZIP format specification requires to use forward slashes + # as the directory separator, but in practice some ZIP files + # created on Windows can use backward slashes. For compatibility + # with the extraction code which already handles this: + if os.path.altsep: + return self.filename.endswith((os.path.sep, os.path.altsep)) + return False # ZIP encryption uses the CRC32 one-byte primitive for scrambling some @@ -1554,7 +1562,8 @@ class ZipFile: self._didModify = True def read(self, name, pwd=None): - """Return file bytes for name.""" + """Return file bytes for name. 'pwd' is the password to decrypt + encrypted files.""" with self.open(name, "r", pwd) as fp: return fp.read() @@ -1706,7 +1715,8 @@ class ZipFile: """Extract a member from the archive to the current working directory, using its full name. Its file information is extracted as accurately as possible. `member' may be a filename or a ZipInfo object. You can - specify a different directory using `path'. + specify a different directory using `path'. You can specify the + password to decrypt the file using 'pwd'. """ if path is None: path = os.getcwd() @@ -1719,7 +1729,8 @@ class ZipFile: """Extract all members from the archive to the current working directory. `path' specifies a different directory to extract to. `members' is optional and must be a subset of the list returned - by namelist(). + by namelist(). You can specify the password to decrypt all files + using 'pwd'. """ if members is None: members = self.namelist() diff --git a/contrib/tools/python3/Modules/_collectionsmodule.c b/contrib/tools/python3/Modules/_collectionsmodule.c index 9a81531bdf..4e195f0d5f 100644 --- a/contrib/tools/python3/Modules/_collectionsmodule.c +++ b/contrib/tools/python3/Modules/_collectionsmodule.c @@ -1116,8 +1116,9 @@ deque_index(dequeobject *deque, PyObject *const *args, Py_ssize_t nargs) n = stop - i; while (--n >= 0) { CHECK_NOT_END(b); - item = b->data[index]; + item = Py_NewRef(b->data[index]); cmp = PyObject_RichCompareBool(item, v, Py_EQ); + Py_DECREF(item); if (cmp > 0) return PyLong_FromSsize_t(stop - n - 1); if (cmp < 0) diff --git a/contrib/tools/python3/Modules/_csv.c b/contrib/tools/python3/Modules/_csv.c index 91cb63628a..d63eac1bf7 100644 --- a/contrib/tools/python3/Modules/_csv.c +++ b/contrib/tools/python3/Modules/_csv.c @@ -1109,6 +1109,8 @@ join_append_data(WriterObj *self, int field_kind, const void *field_data, if (c == dialect->delimiter || c == dialect->escapechar || c == dialect->quotechar || + c == '\n' || + c == '\r' || PyUnicode_FindChar( dialect->lineterminator, c, 0, PyUnicode_GET_LENGTH(dialect->lineterminator), 1) >= 0) { @@ -1180,6 +1182,7 @@ join_check_rec_size(WriterObj *self, Py_ssize_t rec_len) static int join_append(WriterObj *self, PyObject *field, int quoted) { + DialectObj *dialect = self->dialect; int field_kind = -1; const void *field_data = NULL; Py_ssize_t field_len = 0; @@ -1192,6 +1195,19 @@ join_append(WriterObj *self, PyObject *field, int quoted) field_data = PyUnicode_DATA(field); field_len = PyUnicode_GET_LENGTH(field); } + if (!field_len && dialect->delimiter == ' ' && dialect->skipinitialspace) { + if (dialect->quoting == QUOTE_NONE || + (field == NULL && + (dialect->quoting == QUOTE_STRINGS || + dialect->quoting == QUOTE_NOTNULL))) + { + PyErr_Format(self->error_obj, + "empty field must be quoted if delimiter is a space " + "and skipinitialspace is true"); + return 0; + } + quoted = 1; + } rec_len = join_append_data(self, field_kind, field_data, field_len, "ed, 0); if (rec_len < 0) @@ -1243,6 +1259,7 @@ csv_writerow(WriterObj *self, PyObject *seq) { DialectObj *dialect = self->dialect; PyObject *iter, *field, *line, *result; + bool null_field = false; iter = PyObject_GetIter(seq); if (iter == NULL) { @@ -1279,11 +1296,12 @@ csv_writerow(WriterObj *self, PyObject *seq) break; } + null_field = (field == Py_None); if (PyUnicode_Check(field)) { append_ok = join_append(self, field, quoted); Py_DECREF(field); } - else if (field == Py_None) { + else if (null_field) { append_ok = join_append(self, NULL, quoted); Py_DECREF(field); } @@ -1309,7 +1327,11 @@ csv_writerow(WriterObj *self, PyObject *seq) return NULL; if (self->num_fields > 0 && self->rec_len == 0) { - if (dialect->quoting == QUOTE_NONE) { + if (dialect->quoting == QUOTE_NONE || + (null_field && + (dialect->quoting == QUOTE_STRINGS || + dialect->quoting == QUOTE_NOTNULL))) + { PyErr_Format(self->error_obj, "single empty field record must be quoted"); return NULL; diff --git a/contrib/tools/python3/Modules/_decimal/_decimal.c b/contrib/tools/python3/Modules/_decimal/_decimal.c index 70b13982bb..1a195816fe 100644 --- a/contrib/tools/python3/Modules/_decimal/_decimal.c +++ b/contrib/tools/python3/Modules/_decimal/_decimal.c @@ -143,6 +143,8 @@ static PyObject *default_context_template = NULL; static PyObject *basic_context_template = NULL; static PyObject *extended_context_template = NULL; +/* Invariant: NULL or pointer to _pydecimal.Decimal */ +static PyObject *PyDecimal = NULL; /* Error codes for functions that return signals or conditions */ #define DEC_INVALID_SIGNALS (MPD_Max_status+1U) @@ -3219,56 +3221,6 @@ dotsep_as_utf8(const char *s) return utf8; } -/* copy of libmpdec _mpd_round() */ -static void -_mpd_round(mpd_t *result, const mpd_t *a, mpd_ssize_t prec, - const mpd_context_t *ctx, uint32_t *status) -{ - mpd_ssize_t exp = a->exp + a->digits - prec; - - if (prec <= 0) { - mpd_seterror(result, MPD_Invalid_operation, status); - return; - } - if (mpd_isspecial(a) || mpd_iszero(a)) { - mpd_qcopy(result, a, status); - return; - } - - mpd_qrescale_fmt(result, a, exp, ctx, status); - if (result->digits > prec) { - mpd_qrescale_fmt(result, result, exp+1, ctx, status); - } -} - -/* Locate negative zero "z" option within a UTF-8 format spec string. - * Returns pointer to "z", else NULL. - * The portion of the spec we're working with is [[fill]align][sign][z] */ -static const char * -format_spec_z_search(char const *fmt, Py_ssize_t size) { - char const *pos = fmt; - char const *fmt_end = fmt + size; - /* skip over [[fill]align] (fill may be multi-byte character) */ - pos += 1; - while (pos < fmt_end && *pos & 0x80) { - pos += 1; - } - if (pos < fmt_end && strchr("<>=^", *pos) != NULL) { - pos += 1; - } else { - /* fill not present-- skip over [align] */ - pos = fmt; - if (pos < fmt_end && strchr("<>=^", *pos) != NULL) { - pos += 1; - } - } - /* skip over [sign] */ - if (pos < fmt_end && strchr("+- ", *pos) != NULL) { - pos += 1; - } - return pos < fmt_end && *pos == 'z' ? pos : NULL; -} - static int dict_get_item_string(PyObject *dict, const char *key, PyObject **valueobj, const char **valuestr) { @@ -3294,6 +3246,48 @@ dict_get_item_string(PyObject *dict, const char *key, PyObject **valueobj, const return 0; } +/* + * Fallback _pydecimal formatting for new format specifiers that mpdecimal does + * not yet support. As documented, libmpdec follows the PEP-3101 format language: + * https://www.bytereef.org/mpdecimal/doc/libmpdec/assign-convert.html#to-string + */ +static PyObject * +pydec_format(PyObject *dec, PyObject *context, PyObject *fmt) +{ + PyObject *result; + PyObject *pydec; + PyObject *u; + + if (PyDecimal == NULL) { + PyDecimal = _PyImport_GetModuleAttrString("_pydecimal", "Decimal"); + if (PyDecimal == NULL) { + return NULL; + } + } + + u = dec_str(dec); + if (u == NULL) { + return NULL; + } + + pydec = PyObject_CallOneArg(PyDecimal, u); + Py_DECREF(u); + if (pydec == NULL) { + return NULL; + } + + result = PyObject_CallMethod(pydec, "__format__", "(OO)", fmt, context); + Py_DECREF(pydec); + + if (result == NULL && PyErr_ExceptionMatches(PyExc_ValueError)) { + /* Do not confuse users with the _pydecimal exception */ + PyErr_Clear(); + PyErr_SetString(PyExc_ValueError, "invalid format string"); + } + + return result; +} + /* Formatted representation of a PyDecObject. */ static PyObject * dec_format(PyObject *dec, PyObject *args) @@ -3306,16 +3300,11 @@ dec_format(PyObject *dec, PyObject *args) PyObject *fmtarg; PyObject *context; mpd_spec_t spec; - char const *fmt; - char *fmt_copy = NULL; + char *fmt; char *decstring = NULL; uint32_t status = 0; int replace_fillchar = 0; - int no_neg_0 = 0; Py_ssize_t size; - mpd_t *mpd = MPD(dec); - mpd_uint_t dt[MPD_MINALLOC_MAX]; - mpd_t tmp = {MPD_STATIC|MPD_STATIC_DATA,0,0,0,MPD_MINALLOC_MAX,dt}; CURRENT_CONTEXT(context); @@ -3324,39 +3313,20 @@ dec_format(PyObject *dec, PyObject *args) } if (PyUnicode_Check(fmtarg)) { - fmt = PyUnicode_AsUTF8AndSize(fmtarg, &size); + fmt = (char *)PyUnicode_AsUTF8AndSize(fmtarg, &size); if (fmt == NULL) { return NULL; } - /* NOTE: If https://github.com/python/cpython/pull/29438 lands, the - * format string manipulation below can be eliminated by enhancing - * the forked mpd_parse_fmt_str(). */ + if (size > 0 && fmt[0] == '\0') { /* NUL fill character: must be replaced with a valid UTF-8 char before calling mpd_parse_fmt_str(). */ replace_fillchar = 1; - fmt = fmt_copy = dec_strdup(fmt, size); - if (fmt_copy == NULL) { + fmt = dec_strdup(fmt, size); + if (fmt == NULL) { return NULL; } - fmt_copy[0] = '_'; - } - /* Strip 'z' option, which isn't understood by mpd_parse_fmt_str(). - * NOTE: fmt is always null terminated by PyUnicode_AsUTF8AndSize() */ - char const *z_position = format_spec_z_search(fmt, size); - if (z_position != NULL) { - no_neg_0 = 1; - size_t z_index = z_position - fmt; - if (fmt_copy == NULL) { - fmt = fmt_copy = dec_strdup(fmt, size); - if (fmt_copy == NULL) { - return NULL; - } - } - /* Shift characters (including null terminator) left, - overwriting the 'z' option. */ - memmove(fmt_copy + z_index, fmt_copy + z_index + 1, size - z_index); - size -= 1; + fmt[0] = '_'; } } else { @@ -3366,10 +3336,13 @@ dec_format(PyObject *dec, PyObject *args) } if (!mpd_parse_fmt_str(&spec, fmt, CtxCaps(context))) { - PyErr_SetString(PyExc_ValueError, - "invalid format string"); - goto finish; + if (replace_fillchar) { + PyMem_Free(fmt); + } + + return pydec_format(dec, context, fmtarg); } + if (replace_fillchar) { /* In order to avoid clobbering parts of UTF-8 thousands separators or decimal points when the substitution is reversed later, the actual @@ -3422,45 +3395,8 @@ dec_format(PyObject *dec, PyObject *args) } } - if (no_neg_0 && mpd_isnegative(mpd) && !mpd_isspecial(mpd)) { - /* Round into a temporary (carefully mirroring the rounding - of mpd_qformat_spec()), and check if the result is negative zero. - If so, clear the sign and format the resulting positive zero. */ - mpd_ssize_t prec; - mpd_qcopy(&tmp, mpd, &status); - if (spec.prec >= 0) { - switch (spec.type) { - case 'f': - mpd_qrescale(&tmp, &tmp, -spec.prec, CTX(context), &status); - break; - case '%': - tmp.exp += 2; - mpd_qrescale(&tmp, &tmp, -spec.prec, CTX(context), &status); - break; - case 'g': - prec = (spec.prec == 0) ? 1 : spec.prec; - if (tmp.digits > prec) { - _mpd_round(&tmp, &tmp, prec, CTX(context), &status); - } - break; - case 'e': - if (!mpd_iszero(&tmp)) { - _mpd_round(&tmp, &tmp, spec.prec+1, CTX(context), &status); - } - break; - } - } - if (status & MPD_Errors) { - PyErr_SetString(PyExc_ValueError, "unexpected error when rounding"); - goto finish; - } - if (mpd_iszero(&tmp)) { - mpd_set_positive(&tmp); - mpd = &tmp; - } - } - decstring = mpd_qformat_spec(mpd, &spec, CTX(context), &status); + decstring = mpd_qformat_spec(MPD(dec), &spec, CTX(context), &status); if (decstring == NULL) { if (status & MPD_Malloc_error) { PyErr_NoMemory(); @@ -3483,7 +3419,7 @@ finish: Py_XDECREF(grouping); Py_XDECREF(sep); Py_XDECREF(dot); - if (fmt_copy) PyMem_Free(fmt_copy); + if (replace_fillchar) PyMem_Free(fmt); if (decstring) mpd_free(decstring); return result; } @@ -5893,6 +5829,9 @@ PyInit__decimal(void) /* Create the module */ ASSIGN_PTR(m, PyModule_Create(&_decimal_module)); + /* For format specifiers not yet supported by libmpdec */ + PyDecimal = NULL; + /* Add types to the module */ CHECK_INT(PyModule_AddObjectRef(m, "Decimal", (PyObject *)&PyDec_Type)); CHECK_INT(PyModule_AddObjectRef(m, "Context", (PyObject *)&PyDecContext_Type)); diff --git a/contrib/tools/python3/Modules/_elementtree.c b/contrib/tools/python3/Modules/_elementtree.c index 620de8bb4c..fcd4be9338 100644 --- a/contrib/tools/python3/Modules/_elementtree.c +++ b/contrib/tools/python3/Modules/_elementtree.c @@ -3896,6 +3896,40 @@ _elementtree_XMLParser_close_impl(XMLParserObject *self) } /*[clinic input] +_elementtree.XMLParser.flush + +[clinic start generated code]*/ + +static PyObject * +_elementtree_XMLParser_flush_impl(XMLParserObject *self) +/*[clinic end generated code: output=42fdb8795ca24509 input=effbecdb28715949]*/ +{ + if (!_check_xmlparser(self)) { + return NULL; + } + + elementtreestate *st = self->state; + + if (EXPAT(st, SetReparseDeferralEnabled) == NULL) { + Py_RETURN_NONE; + } + + // NOTE: The Expat parser in the C implementation of ElementTree is not + // exposed to the outside; as a result we known that reparse deferral + // is currently enabled, or we would not even have access to function + // XML_SetReparseDeferralEnabled in the first place (which we checked + // for, a few lines up). + + EXPAT(st, SetReparseDeferralEnabled)(self->parser, XML_FALSE); + + PyObject *res = expat_parse(st, self, "", 0, XML_FALSE); + + EXPAT(st, SetReparseDeferralEnabled)(self->parser, XML_TRUE); + + return res; +} + +/*[clinic input] _elementtree.XMLParser.feed data: object @@ -4289,6 +4323,7 @@ static PyType_Spec treebuilder_spec = { static PyMethodDef xmlparser_methods[] = { _ELEMENTTREE_XMLPARSER_FEED_METHODDEF _ELEMENTTREE_XMLPARSER_CLOSE_METHODDEF + _ELEMENTTREE_XMLPARSER_FLUSH_METHODDEF _ELEMENTTREE_XMLPARSER__PARSE_WHOLE_METHODDEF _ELEMENTTREE_XMLPARSER__SETEVENTS_METHODDEF {NULL, NULL} diff --git a/contrib/tools/python3/Modules/_hacl/Hacl_Hash_MD5.c b/contrib/tools/python3/Modules/_hacl/Hacl_Hash_MD5.c index 222ac824f0..ed294839ed 100644 --- a/contrib/tools/python3/Modules/_hacl/Hacl_Hash_MD5.c +++ b/contrib/tools/python3/Modules/_hacl/Hacl_Hash_MD5.c @@ -25,37 +25,29 @@ #include "internal/Hacl_Hash_MD5.h" -static uint32_t -_h0[4U] = - { (uint32_t)0x67452301U, (uint32_t)0xefcdab89U, (uint32_t)0x98badcfeU, (uint32_t)0x10325476U }; +static uint32_t _h0[4U] = { 0x67452301U, 0xefcdab89U, 0x98badcfeU, 0x10325476U }; static uint32_t _t[64U] = { - (uint32_t)0xd76aa478U, (uint32_t)0xe8c7b756U, (uint32_t)0x242070dbU, (uint32_t)0xc1bdceeeU, - (uint32_t)0xf57c0fafU, (uint32_t)0x4787c62aU, (uint32_t)0xa8304613U, (uint32_t)0xfd469501U, - (uint32_t)0x698098d8U, (uint32_t)0x8b44f7afU, (uint32_t)0xffff5bb1U, (uint32_t)0x895cd7beU, - (uint32_t)0x6b901122U, (uint32_t)0xfd987193U, (uint32_t)0xa679438eU, (uint32_t)0x49b40821U, - (uint32_t)0xf61e2562U, (uint32_t)0xc040b340U, (uint32_t)0x265e5a51U, (uint32_t)0xe9b6c7aaU, - (uint32_t)0xd62f105dU, (uint32_t)0x02441453U, (uint32_t)0xd8a1e681U, (uint32_t)0xe7d3fbc8U, - (uint32_t)0x21e1cde6U, (uint32_t)0xc33707d6U, (uint32_t)0xf4d50d87U, (uint32_t)0x455a14edU, - (uint32_t)0xa9e3e905U, (uint32_t)0xfcefa3f8U, (uint32_t)0x676f02d9U, (uint32_t)0x8d2a4c8aU, - (uint32_t)0xfffa3942U, (uint32_t)0x8771f681U, (uint32_t)0x6d9d6122U, (uint32_t)0xfde5380cU, - (uint32_t)0xa4beea44U, (uint32_t)0x4bdecfa9U, (uint32_t)0xf6bb4b60U, (uint32_t)0xbebfbc70U, - (uint32_t)0x289b7ec6U, (uint32_t)0xeaa127faU, (uint32_t)0xd4ef3085U, (uint32_t)0x4881d05U, - (uint32_t)0xd9d4d039U, (uint32_t)0xe6db99e5U, (uint32_t)0x1fa27cf8U, (uint32_t)0xc4ac5665U, - (uint32_t)0xf4292244U, (uint32_t)0x432aff97U, (uint32_t)0xab9423a7U, (uint32_t)0xfc93a039U, - (uint32_t)0x655b59c3U, (uint32_t)0x8f0ccc92U, (uint32_t)0xffeff47dU, (uint32_t)0x85845dd1U, - (uint32_t)0x6fa87e4fU, (uint32_t)0xfe2ce6e0U, (uint32_t)0xa3014314U, (uint32_t)0x4e0811a1U, - (uint32_t)0xf7537e82U, (uint32_t)0xbd3af235U, (uint32_t)0x2ad7d2bbU, (uint32_t)0xeb86d391U + 0xd76aa478U, 0xe8c7b756U, 0x242070dbU, 0xc1bdceeeU, 0xf57c0fafU, 0x4787c62aU, 0xa8304613U, + 0xfd469501U, 0x698098d8U, 0x8b44f7afU, 0xffff5bb1U, 0x895cd7beU, 0x6b901122U, 0xfd987193U, + 0xa679438eU, 0x49b40821U, 0xf61e2562U, 0xc040b340U, 0x265e5a51U, 0xe9b6c7aaU, 0xd62f105dU, + 0x02441453U, 0xd8a1e681U, 0xe7d3fbc8U, 0x21e1cde6U, 0xc33707d6U, 0xf4d50d87U, 0x455a14edU, + 0xa9e3e905U, 0xfcefa3f8U, 0x676f02d9U, 0x8d2a4c8aU, 0xfffa3942U, 0x8771f681U, 0x6d9d6122U, + 0xfde5380cU, 0xa4beea44U, 0x4bdecfa9U, 0xf6bb4b60U, 0xbebfbc70U, 0x289b7ec6U, 0xeaa127faU, + 0xd4ef3085U, 0x4881d05U, 0xd9d4d039U, 0xe6db99e5U, 0x1fa27cf8U, 0xc4ac5665U, 0xf4292244U, + 0x432aff97U, 0xab9423a7U, 0xfc93a039U, 0x655b59c3U, 0x8f0ccc92U, 0xffeff47dU, 0x85845dd1U, + 0x6fa87e4fU, 0xfe2ce6e0U, 0xa3014314U, 0x4e0811a1U, 0xf7537e82U, 0xbd3af235U, 0x2ad7d2bbU, + 0xeb86d391U }; -void Hacl_Hash_Core_MD5_legacy_init(uint32_t *s) +void Hacl_Hash_MD5_init(uint32_t *s) { - KRML_MAYBE_FOR4(i, (uint32_t)0U, (uint32_t)4U, (uint32_t)1U, s[i] = _h0[i];); + KRML_MAYBE_FOR4(i, 0U, 4U, 1U, s[i] = _h0[i];); } -static void legacy_update(uint32_t *abcd, uint8_t *x) +static void update(uint32_t *abcd, uint8_t *x) { uint32_t aa = abcd[0U]; uint32_t bb = abcd[1U]; @@ -74,14 +66,14 @@ static void legacy_update(uint32_t *abcd, uint8_t *x) vb0 + ((va + ((vb0 & vc0) | (~vb0 & vd0)) + xk + ti0) - << (uint32_t)7U - | (va + ((vb0 & vc0) | (~vb0 & vd0)) + xk + ti0) >> (uint32_t)25U); + << 7U + | (va + ((vb0 & vc0) | (~vb0 & vd0)) + xk + ti0) >> 25U); abcd[0U] = v; uint32_t va0 = abcd[3U]; uint32_t vb1 = abcd[0U]; uint32_t vc1 = abcd[1U]; uint32_t vd1 = abcd[2U]; - uint8_t *b1 = x + (uint32_t)4U; + uint8_t *b1 = x + 4U; uint32_t u0 = load32_le(b1); uint32_t xk0 = u0; uint32_t ti1 = _t[1U]; @@ -90,14 +82,14 @@ static void legacy_update(uint32_t *abcd, uint8_t *x) vb1 + ((va0 + ((vb1 & vc1) | (~vb1 & vd1)) + xk0 + ti1) - << (uint32_t)12U - | (va0 + ((vb1 & vc1) | (~vb1 & vd1)) + xk0 + ti1) >> (uint32_t)20U); + << 12U + | (va0 + ((vb1 & vc1) | (~vb1 & vd1)) + xk0 + ti1) >> 20U); abcd[3U] = v0; uint32_t va1 = abcd[2U]; uint32_t vb2 = abcd[3U]; uint32_t vc2 = abcd[0U]; uint32_t vd2 = abcd[1U]; - uint8_t *b2 = x + (uint32_t)8U; + uint8_t *b2 = x + 8U; uint32_t u1 = load32_le(b2); uint32_t xk1 = u1; uint32_t ti2 = _t[2U]; @@ -106,14 +98,14 @@ static void legacy_update(uint32_t *abcd, uint8_t *x) vb2 + ((va1 + ((vb2 & vc2) | (~vb2 & vd2)) + xk1 + ti2) - << (uint32_t)17U - | (va1 + ((vb2 & vc2) | (~vb2 & vd2)) + xk1 + ti2) >> (uint32_t)15U); + << 17U + | (va1 + ((vb2 & vc2) | (~vb2 & vd2)) + xk1 + ti2) >> 15U); abcd[2U] = v1; uint32_t va2 = abcd[1U]; uint32_t vb3 = abcd[2U]; uint32_t vc3 = abcd[3U]; uint32_t vd3 = abcd[0U]; - uint8_t *b3 = x + (uint32_t)12U; + uint8_t *b3 = x + 12U; uint32_t u2 = load32_le(b3); uint32_t xk2 = u2; uint32_t ti3 = _t[3U]; @@ -122,14 +114,14 @@ static void legacy_update(uint32_t *abcd, uint8_t *x) vb3 + ((va2 + ((vb3 & vc3) | (~vb3 & vd3)) + xk2 + ti3) - << (uint32_t)22U - | (va2 + ((vb3 & vc3) | (~vb3 & vd3)) + xk2 + ti3) >> (uint32_t)10U); + << 22U + | (va2 + ((vb3 & vc3) | (~vb3 & vd3)) + xk2 + ti3) >> 10U); abcd[1U] = v2; uint32_t va3 = abcd[0U]; uint32_t vb4 = abcd[1U]; uint32_t vc4 = abcd[2U]; uint32_t vd4 = abcd[3U]; - uint8_t *b4 = x + (uint32_t)16U; + uint8_t *b4 = x + 16U; uint32_t u3 = load32_le(b4); uint32_t xk3 = u3; uint32_t ti4 = _t[4U]; @@ -138,14 +130,14 @@ static void legacy_update(uint32_t *abcd, uint8_t *x) vb4 + ((va3 + ((vb4 & vc4) | (~vb4 & vd4)) + xk3 + ti4) - << (uint32_t)7U - | (va3 + ((vb4 & vc4) | (~vb4 & vd4)) + xk3 + ti4) >> (uint32_t)25U); + << 7U + | (va3 + ((vb4 & vc4) | (~vb4 & vd4)) + xk3 + ti4) >> 25U); abcd[0U] = v3; uint32_t va4 = abcd[3U]; uint32_t vb5 = abcd[0U]; uint32_t vc5 = abcd[1U]; uint32_t vd5 = abcd[2U]; - uint8_t *b5 = x + (uint32_t)20U; + uint8_t *b5 = x + 20U; uint32_t u4 = load32_le(b5); uint32_t xk4 = u4; uint32_t ti5 = _t[5U]; @@ -154,14 +146,14 @@ static void legacy_update(uint32_t *abcd, uint8_t *x) vb5 + ((va4 + ((vb5 & vc5) | (~vb5 & vd5)) + xk4 + ti5) - << (uint32_t)12U - | (va4 + ((vb5 & vc5) | (~vb5 & vd5)) + xk4 + ti5) >> (uint32_t)20U); + << 12U + | (va4 + ((vb5 & vc5) | (~vb5 & vd5)) + xk4 + ti5) >> 20U); abcd[3U] = v4; uint32_t va5 = abcd[2U]; uint32_t vb6 = abcd[3U]; uint32_t vc6 = abcd[0U]; uint32_t vd6 = abcd[1U]; - uint8_t *b6 = x + (uint32_t)24U; + uint8_t *b6 = x + 24U; uint32_t u5 = load32_le(b6); uint32_t xk5 = u5; uint32_t ti6 = _t[6U]; @@ -170,14 +162,14 @@ static void legacy_update(uint32_t *abcd, uint8_t *x) vb6 + ((va5 + ((vb6 & vc6) | (~vb6 & vd6)) + xk5 + ti6) - << (uint32_t)17U - | (va5 + ((vb6 & vc6) | (~vb6 & vd6)) + xk5 + ti6) >> (uint32_t)15U); + << 17U + | (va5 + ((vb6 & vc6) | (~vb6 & vd6)) + xk5 + ti6) >> 15U); abcd[2U] = v5; uint32_t va6 = abcd[1U]; uint32_t vb7 = abcd[2U]; uint32_t vc7 = abcd[3U]; uint32_t vd7 = abcd[0U]; - uint8_t *b7 = x + (uint32_t)28U; + uint8_t *b7 = x + 28U; uint32_t u6 = load32_le(b7); uint32_t xk6 = u6; uint32_t ti7 = _t[7U]; @@ -186,14 +178,14 @@ static void legacy_update(uint32_t *abcd, uint8_t *x) vb7 + ((va6 + ((vb7 & vc7) | (~vb7 & vd7)) + xk6 + ti7) - << (uint32_t)22U - | (va6 + ((vb7 & vc7) | (~vb7 & vd7)) + xk6 + ti7) >> (uint32_t)10U); + << 22U + | (va6 + ((vb7 & vc7) | (~vb7 & vd7)) + xk6 + ti7) >> 10U); abcd[1U] = v6; uint32_t va7 = abcd[0U]; uint32_t vb8 = abcd[1U]; uint32_t vc8 = abcd[2U]; uint32_t vd8 = abcd[3U]; - uint8_t *b8 = x + (uint32_t)32U; + uint8_t *b8 = x + 32U; uint32_t u7 = load32_le(b8); uint32_t xk7 = u7; uint32_t ti8 = _t[8U]; @@ -202,14 +194,14 @@ static void legacy_update(uint32_t *abcd, uint8_t *x) vb8 + ((va7 + ((vb8 & vc8) | (~vb8 & vd8)) + xk7 + ti8) - << (uint32_t)7U - | (va7 + ((vb8 & vc8) | (~vb8 & vd8)) + xk7 + ti8) >> (uint32_t)25U); + << 7U + | (va7 + ((vb8 & vc8) | (~vb8 & vd8)) + xk7 + ti8) >> 25U); abcd[0U] = v7; uint32_t va8 = abcd[3U]; uint32_t vb9 = abcd[0U]; uint32_t vc9 = abcd[1U]; uint32_t vd9 = abcd[2U]; - uint8_t *b9 = x + (uint32_t)36U; + uint8_t *b9 = x + 36U; uint32_t u8 = load32_le(b9); uint32_t xk8 = u8; uint32_t ti9 = _t[9U]; @@ -218,14 +210,14 @@ static void legacy_update(uint32_t *abcd, uint8_t *x) vb9 + ((va8 + ((vb9 & vc9) | (~vb9 & vd9)) + xk8 + ti9) - << (uint32_t)12U - | (va8 + ((vb9 & vc9) | (~vb9 & vd9)) + xk8 + ti9) >> (uint32_t)20U); + << 12U + | (va8 + ((vb9 & vc9) | (~vb9 & vd9)) + xk8 + ti9) >> 20U); abcd[3U] = v8; uint32_t va9 = abcd[2U]; uint32_t vb10 = abcd[3U]; uint32_t vc10 = abcd[0U]; uint32_t vd10 = abcd[1U]; - uint8_t *b10 = x + (uint32_t)40U; + uint8_t *b10 = x + 40U; uint32_t u9 = load32_le(b10); uint32_t xk9 = u9; uint32_t ti10 = _t[10U]; @@ -234,14 +226,14 @@ static void legacy_update(uint32_t *abcd, uint8_t *x) vb10 + ((va9 + ((vb10 & vc10) | (~vb10 & vd10)) + xk9 + ti10) - << (uint32_t)17U - | (va9 + ((vb10 & vc10) | (~vb10 & vd10)) + xk9 + ti10) >> (uint32_t)15U); + << 17U + | (va9 + ((vb10 & vc10) | (~vb10 & vd10)) + xk9 + ti10) >> 15U); abcd[2U] = v9; uint32_t va10 = abcd[1U]; uint32_t vb11 = abcd[2U]; uint32_t vc11 = abcd[3U]; uint32_t vd11 = abcd[0U]; - uint8_t *b11 = x + (uint32_t)44U; + uint8_t *b11 = x + 44U; uint32_t u10 = load32_le(b11); uint32_t xk10 = u10; uint32_t ti11 = _t[11U]; @@ -250,14 +242,14 @@ static void legacy_update(uint32_t *abcd, uint8_t *x) vb11 + ((va10 + ((vb11 & vc11) | (~vb11 & vd11)) + xk10 + ti11) - << (uint32_t)22U - | (va10 + ((vb11 & vc11) | (~vb11 & vd11)) + xk10 + ti11) >> (uint32_t)10U); + << 22U + | (va10 + ((vb11 & vc11) | (~vb11 & vd11)) + xk10 + ti11) >> 10U); abcd[1U] = v10; uint32_t va11 = abcd[0U]; uint32_t vb12 = abcd[1U]; uint32_t vc12 = abcd[2U]; uint32_t vd12 = abcd[3U]; - uint8_t *b12 = x + (uint32_t)48U; + uint8_t *b12 = x + 48U; uint32_t u11 = load32_le(b12); uint32_t xk11 = u11; uint32_t ti12 = _t[12U]; @@ -266,14 +258,14 @@ static void legacy_update(uint32_t *abcd, uint8_t *x) vb12 + ((va11 + ((vb12 & vc12) | (~vb12 & vd12)) + xk11 + ti12) - << (uint32_t)7U - | (va11 + ((vb12 & vc12) | (~vb12 & vd12)) + xk11 + ti12) >> (uint32_t)25U); + << 7U + | (va11 + ((vb12 & vc12) | (~vb12 & vd12)) + xk11 + ti12) >> 25U); abcd[0U] = v11; uint32_t va12 = abcd[3U]; uint32_t vb13 = abcd[0U]; uint32_t vc13 = abcd[1U]; uint32_t vd13 = abcd[2U]; - uint8_t *b13 = x + (uint32_t)52U; + uint8_t *b13 = x + 52U; uint32_t u12 = load32_le(b13); uint32_t xk12 = u12; uint32_t ti13 = _t[13U]; @@ -282,14 +274,14 @@ static void legacy_update(uint32_t *abcd, uint8_t *x) vb13 + ((va12 + ((vb13 & vc13) | (~vb13 & vd13)) + xk12 + ti13) - << (uint32_t)12U - | (va12 + ((vb13 & vc13) | (~vb13 & vd13)) + xk12 + ti13) >> (uint32_t)20U); + << 12U + | (va12 + ((vb13 & vc13) | (~vb13 & vd13)) + xk12 + ti13) >> 20U); abcd[3U] = v12; uint32_t va13 = abcd[2U]; uint32_t vb14 = abcd[3U]; uint32_t vc14 = abcd[0U]; uint32_t vd14 = abcd[1U]; - uint8_t *b14 = x + (uint32_t)56U; + uint8_t *b14 = x + 56U; uint32_t u13 = load32_le(b14); uint32_t xk13 = u13; uint32_t ti14 = _t[14U]; @@ -298,14 +290,14 @@ static void legacy_update(uint32_t *abcd, uint8_t *x) vb14 + ((va13 + ((vb14 & vc14) | (~vb14 & vd14)) + xk13 + ti14) - << (uint32_t)17U - | (va13 + ((vb14 & vc14) | (~vb14 & vd14)) + xk13 + ti14) >> (uint32_t)15U); + << 17U + | (va13 + ((vb14 & vc14) | (~vb14 & vd14)) + xk13 + ti14) >> 15U); abcd[2U] = v13; uint32_t va14 = abcd[1U]; uint32_t vb15 = abcd[2U]; uint32_t vc15 = abcd[3U]; uint32_t vd15 = abcd[0U]; - uint8_t *b15 = x + (uint32_t)60U; + uint8_t *b15 = x + 60U; uint32_t u14 = load32_le(b15); uint32_t xk14 = u14; uint32_t ti15 = _t[15U]; @@ -314,14 +306,14 @@ static void legacy_update(uint32_t *abcd, uint8_t *x) vb15 + ((va14 + ((vb15 & vc15) | (~vb15 & vd15)) + xk14 + ti15) - << (uint32_t)22U - | (va14 + ((vb15 & vc15) | (~vb15 & vd15)) + xk14 + ti15) >> (uint32_t)10U); + << 22U + | (va14 + ((vb15 & vc15) | (~vb15 & vd15)) + xk14 + ti15) >> 10U); abcd[1U] = v14; uint32_t va15 = abcd[0U]; uint32_t vb16 = abcd[1U]; uint32_t vc16 = abcd[2U]; uint32_t vd16 = abcd[3U]; - uint8_t *b16 = x + (uint32_t)4U; + uint8_t *b16 = x + 4U; uint32_t u15 = load32_le(b16); uint32_t xk15 = u15; uint32_t ti16 = _t[16U]; @@ -330,14 +322,14 @@ static void legacy_update(uint32_t *abcd, uint8_t *x) vb16 + ((va15 + ((vb16 & vd16) | (vc16 & ~vd16)) + xk15 + ti16) - << (uint32_t)5U - | (va15 + ((vb16 & vd16) | (vc16 & ~vd16)) + xk15 + ti16) >> (uint32_t)27U); + << 5U + | (va15 + ((vb16 & vd16) | (vc16 & ~vd16)) + xk15 + ti16) >> 27U); abcd[0U] = v15; uint32_t va16 = abcd[3U]; uint32_t vb17 = abcd[0U]; uint32_t vc17 = abcd[1U]; uint32_t vd17 = abcd[2U]; - uint8_t *b17 = x + (uint32_t)24U; + uint8_t *b17 = x + 24U; uint32_t u16 = load32_le(b17); uint32_t xk16 = u16; uint32_t ti17 = _t[17U]; @@ -346,14 +338,14 @@ static void legacy_update(uint32_t *abcd, uint8_t *x) vb17 + ((va16 + ((vb17 & vd17) | (vc17 & ~vd17)) + xk16 + ti17) - << (uint32_t)9U - | (va16 + ((vb17 & vd17) | (vc17 & ~vd17)) + xk16 + ti17) >> (uint32_t)23U); + << 9U + | (va16 + ((vb17 & vd17) | (vc17 & ~vd17)) + xk16 + ti17) >> 23U); abcd[3U] = v16; uint32_t va17 = abcd[2U]; uint32_t vb18 = abcd[3U]; uint32_t vc18 = abcd[0U]; uint32_t vd18 = abcd[1U]; - uint8_t *b18 = x + (uint32_t)44U; + uint8_t *b18 = x + 44U; uint32_t u17 = load32_le(b18); uint32_t xk17 = u17; uint32_t ti18 = _t[18U]; @@ -362,8 +354,8 @@ static void legacy_update(uint32_t *abcd, uint8_t *x) vb18 + ((va17 + ((vb18 & vd18) | (vc18 & ~vd18)) + xk17 + ti18) - << (uint32_t)14U - | (va17 + ((vb18 & vd18) | (vc18 & ~vd18)) + xk17 + ti18) >> (uint32_t)18U); + << 14U + | (va17 + ((vb18 & vd18) | (vc18 & ~vd18)) + xk17 + ti18) >> 18U); abcd[2U] = v17; uint32_t va18 = abcd[1U]; uint32_t vb19 = abcd[2U]; @@ -378,14 +370,14 @@ static void legacy_update(uint32_t *abcd, uint8_t *x) vb19 + ((va18 + ((vb19 & vd19) | (vc19 & ~vd19)) + xk18 + ti19) - << (uint32_t)20U - | (va18 + ((vb19 & vd19) | (vc19 & ~vd19)) + xk18 + ti19) >> (uint32_t)12U); + << 20U + | (va18 + ((vb19 & vd19) | (vc19 & ~vd19)) + xk18 + ti19) >> 12U); abcd[1U] = v18; uint32_t va19 = abcd[0U]; uint32_t vb20 = abcd[1U]; uint32_t vc20 = abcd[2U]; uint32_t vd20 = abcd[3U]; - uint8_t *b20 = x + (uint32_t)20U; + uint8_t *b20 = x + 20U; uint32_t u19 = load32_le(b20); uint32_t xk19 = u19; uint32_t ti20 = _t[20U]; @@ -394,14 +386,14 @@ static void legacy_update(uint32_t *abcd, uint8_t *x) vb20 + ((va19 + ((vb20 & vd20) | (vc20 & ~vd20)) + xk19 + ti20) - << (uint32_t)5U - | (va19 + ((vb20 & vd20) | (vc20 & ~vd20)) + xk19 + ti20) >> (uint32_t)27U); + << 5U + | (va19 + ((vb20 & vd20) | (vc20 & ~vd20)) + xk19 + ti20) >> 27U); abcd[0U] = v19; uint32_t va20 = abcd[3U]; uint32_t vb21 = abcd[0U]; uint32_t vc21 = abcd[1U]; uint32_t vd21 = abcd[2U]; - uint8_t *b21 = x + (uint32_t)40U; + uint8_t *b21 = x + 40U; uint32_t u20 = load32_le(b21); uint32_t xk20 = u20; uint32_t ti21 = _t[21U]; @@ -410,14 +402,14 @@ static void legacy_update(uint32_t *abcd, uint8_t *x) vb21 + ((va20 + ((vb21 & vd21) | (vc21 & ~vd21)) + xk20 + ti21) - << (uint32_t)9U - | (va20 + ((vb21 & vd21) | (vc21 & ~vd21)) + xk20 + ti21) >> (uint32_t)23U); + << 9U + | (va20 + ((vb21 & vd21) | (vc21 & ~vd21)) + xk20 + ti21) >> 23U); abcd[3U] = v20; uint32_t va21 = abcd[2U]; uint32_t vb22 = abcd[3U]; uint32_t vc22 = abcd[0U]; uint32_t vd22 = abcd[1U]; - uint8_t *b22 = x + (uint32_t)60U; + uint8_t *b22 = x + 60U; uint32_t u21 = load32_le(b22); uint32_t xk21 = u21; uint32_t ti22 = _t[22U]; @@ -426,14 +418,14 @@ static void legacy_update(uint32_t *abcd, uint8_t *x) vb22 + ((va21 + ((vb22 & vd22) | (vc22 & ~vd22)) + xk21 + ti22) - << (uint32_t)14U - | (va21 + ((vb22 & vd22) | (vc22 & ~vd22)) + xk21 + ti22) >> (uint32_t)18U); + << 14U + | (va21 + ((vb22 & vd22) | (vc22 & ~vd22)) + xk21 + ti22) >> 18U); abcd[2U] = v21; uint32_t va22 = abcd[1U]; uint32_t vb23 = abcd[2U]; uint32_t vc23 = abcd[3U]; uint32_t vd23 = abcd[0U]; - uint8_t *b23 = x + (uint32_t)16U; + uint8_t *b23 = x + 16U; uint32_t u22 = load32_le(b23); uint32_t xk22 = u22; uint32_t ti23 = _t[23U]; @@ -442,14 +434,14 @@ static void legacy_update(uint32_t *abcd, uint8_t *x) vb23 + ((va22 + ((vb23 & vd23) | (vc23 & ~vd23)) + xk22 + ti23) - << (uint32_t)20U - | (va22 + ((vb23 & vd23) | (vc23 & ~vd23)) + xk22 + ti23) >> (uint32_t)12U); + << 20U + | (va22 + ((vb23 & vd23) | (vc23 & ~vd23)) + xk22 + ti23) >> 12U); abcd[1U] = v22; uint32_t va23 = abcd[0U]; uint32_t vb24 = abcd[1U]; uint32_t vc24 = abcd[2U]; uint32_t vd24 = abcd[3U]; - uint8_t *b24 = x + (uint32_t)36U; + uint8_t *b24 = x + 36U; uint32_t u23 = load32_le(b24); uint32_t xk23 = u23; uint32_t ti24 = _t[24U]; @@ -458,14 +450,14 @@ static void legacy_update(uint32_t *abcd, uint8_t *x) vb24 + ((va23 + ((vb24 & vd24) | (vc24 & ~vd24)) + xk23 + ti24) - << (uint32_t)5U - | (va23 + ((vb24 & vd24) | (vc24 & ~vd24)) + xk23 + ti24) >> (uint32_t)27U); + << 5U + | (va23 + ((vb24 & vd24) | (vc24 & ~vd24)) + xk23 + ti24) >> 27U); abcd[0U] = v23; uint32_t va24 = abcd[3U]; uint32_t vb25 = abcd[0U]; uint32_t vc25 = abcd[1U]; uint32_t vd25 = abcd[2U]; - uint8_t *b25 = x + (uint32_t)56U; + uint8_t *b25 = x + 56U; uint32_t u24 = load32_le(b25); uint32_t xk24 = u24; uint32_t ti25 = _t[25U]; @@ -474,14 +466,14 @@ static void legacy_update(uint32_t *abcd, uint8_t *x) vb25 + ((va24 + ((vb25 & vd25) | (vc25 & ~vd25)) + xk24 + ti25) - << (uint32_t)9U - | (va24 + ((vb25 & vd25) | (vc25 & ~vd25)) + xk24 + ti25) >> (uint32_t)23U); + << 9U + | (va24 + ((vb25 & vd25) | (vc25 & ~vd25)) + xk24 + ti25) >> 23U); abcd[3U] = v24; uint32_t va25 = abcd[2U]; uint32_t vb26 = abcd[3U]; uint32_t vc26 = abcd[0U]; uint32_t vd26 = abcd[1U]; - uint8_t *b26 = x + (uint32_t)12U; + uint8_t *b26 = x + 12U; uint32_t u25 = load32_le(b26); uint32_t xk25 = u25; uint32_t ti26 = _t[26U]; @@ -490,14 +482,14 @@ static void legacy_update(uint32_t *abcd, uint8_t *x) vb26 + ((va25 + ((vb26 & vd26) | (vc26 & ~vd26)) + xk25 + ti26) - << (uint32_t)14U - | (va25 + ((vb26 & vd26) | (vc26 & ~vd26)) + xk25 + ti26) >> (uint32_t)18U); + << 14U + | (va25 + ((vb26 & vd26) | (vc26 & ~vd26)) + xk25 + ti26) >> 18U); abcd[2U] = v25; uint32_t va26 = abcd[1U]; uint32_t vb27 = abcd[2U]; uint32_t vc27 = abcd[3U]; uint32_t vd27 = abcd[0U]; - uint8_t *b27 = x + (uint32_t)32U; + uint8_t *b27 = x + 32U; uint32_t u26 = load32_le(b27); uint32_t xk26 = u26; uint32_t ti27 = _t[27U]; @@ -506,14 +498,14 @@ static void legacy_update(uint32_t *abcd, uint8_t *x) vb27 + ((va26 + ((vb27 & vd27) | (vc27 & ~vd27)) + xk26 + ti27) - << (uint32_t)20U - | (va26 + ((vb27 & vd27) | (vc27 & ~vd27)) + xk26 + ti27) >> (uint32_t)12U); + << 20U + | (va26 + ((vb27 & vd27) | (vc27 & ~vd27)) + xk26 + ti27) >> 12U); abcd[1U] = v26; uint32_t va27 = abcd[0U]; uint32_t vb28 = abcd[1U]; uint32_t vc28 = abcd[2U]; uint32_t vd28 = abcd[3U]; - uint8_t *b28 = x + (uint32_t)52U; + uint8_t *b28 = x + 52U; uint32_t u27 = load32_le(b28); uint32_t xk27 = u27; uint32_t ti28 = _t[28U]; @@ -522,14 +514,14 @@ static void legacy_update(uint32_t *abcd, uint8_t *x) vb28 + ((va27 + ((vb28 & vd28) | (vc28 & ~vd28)) + xk27 + ti28) - << (uint32_t)5U - | (va27 + ((vb28 & vd28) | (vc28 & ~vd28)) + xk27 + ti28) >> (uint32_t)27U); + << 5U + | (va27 + ((vb28 & vd28) | (vc28 & ~vd28)) + xk27 + ti28) >> 27U); abcd[0U] = v27; uint32_t va28 = abcd[3U]; uint32_t vb29 = abcd[0U]; uint32_t vc29 = abcd[1U]; uint32_t vd29 = abcd[2U]; - uint8_t *b29 = x + (uint32_t)8U; + uint8_t *b29 = x + 8U; uint32_t u28 = load32_le(b29); uint32_t xk28 = u28; uint32_t ti29 = _t[29U]; @@ -538,14 +530,14 @@ static void legacy_update(uint32_t *abcd, uint8_t *x) vb29 + ((va28 + ((vb29 & vd29) | (vc29 & ~vd29)) + xk28 + ti29) - << (uint32_t)9U - | (va28 + ((vb29 & vd29) | (vc29 & ~vd29)) + xk28 + ti29) >> (uint32_t)23U); + << 9U + | (va28 + ((vb29 & vd29) | (vc29 & ~vd29)) + xk28 + ti29) >> 23U); abcd[3U] = v28; uint32_t va29 = abcd[2U]; uint32_t vb30 = abcd[3U]; uint32_t vc30 = abcd[0U]; uint32_t vd30 = abcd[1U]; - uint8_t *b30 = x + (uint32_t)28U; + uint8_t *b30 = x + 28U; uint32_t u29 = load32_le(b30); uint32_t xk29 = u29; uint32_t ti30 = _t[30U]; @@ -554,14 +546,14 @@ static void legacy_update(uint32_t *abcd, uint8_t *x) vb30 + ((va29 + ((vb30 & vd30) | (vc30 & ~vd30)) + xk29 + ti30) - << (uint32_t)14U - | (va29 + ((vb30 & vd30) | (vc30 & ~vd30)) + xk29 + ti30) >> (uint32_t)18U); + << 14U + | (va29 + ((vb30 & vd30) | (vc30 & ~vd30)) + xk29 + ti30) >> 18U); abcd[2U] = v29; uint32_t va30 = abcd[1U]; uint32_t vb31 = abcd[2U]; uint32_t vc31 = abcd[3U]; uint32_t vd31 = abcd[0U]; - uint8_t *b31 = x + (uint32_t)48U; + uint8_t *b31 = x + 48U; uint32_t u30 = load32_le(b31); uint32_t xk30 = u30; uint32_t ti31 = _t[31U]; @@ -570,14 +562,14 @@ static void legacy_update(uint32_t *abcd, uint8_t *x) vb31 + ((va30 + ((vb31 & vd31) | (vc31 & ~vd31)) + xk30 + ti31) - << (uint32_t)20U - | (va30 + ((vb31 & vd31) | (vc31 & ~vd31)) + xk30 + ti31) >> (uint32_t)12U); + << 20U + | (va30 + ((vb31 & vd31) | (vc31 & ~vd31)) + xk30 + ti31) >> 12U); abcd[1U] = v30; uint32_t va31 = abcd[0U]; uint32_t vb32 = abcd[1U]; uint32_t vc32 = abcd[2U]; uint32_t vd32 = abcd[3U]; - uint8_t *b32 = x + (uint32_t)20U; + uint8_t *b32 = x + 20U; uint32_t u31 = load32_le(b32); uint32_t xk31 = u31; uint32_t ti32 = _t[32U]; @@ -586,14 +578,14 @@ static void legacy_update(uint32_t *abcd, uint8_t *x) vb32 + ((va31 + (vb32 ^ (vc32 ^ vd32)) + xk31 + ti32) - << (uint32_t)4U - | (va31 + (vb32 ^ (vc32 ^ vd32)) + xk31 + ti32) >> (uint32_t)28U); + << 4U + | (va31 + (vb32 ^ (vc32 ^ vd32)) + xk31 + ti32) >> 28U); abcd[0U] = v31; uint32_t va32 = abcd[3U]; uint32_t vb33 = abcd[0U]; uint32_t vc33 = abcd[1U]; uint32_t vd33 = abcd[2U]; - uint8_t *b33 = x + (uint32_t)32U; + uint8_t *b33 = x + 32U; uint32_t u32 = load32_le(b33); uint32_t xk32 = u32; uint32_t ti33 = _t[33U]; @@ -602,14 +594,14 @@ static void legacy_update(uint32_t *abcd, uint8_t *x) vb33 + ((va32 + (vb33 ^ (vc33 ^ vd33)) + xk32 + ti33) - << (uint32_t)11U - | (va32 + (vb33 ^ (vc33 ^ vd33)) + xk32 + ti33) >> (uint32_t)21U); + << 11U + | (va32 + (vb33 ^ (vc33 ^ vd33)) + xk32 + ti33) >> 21U); abcd[3U] = v32; uint32_t va33 = abcd[2U]; uint32_t vb34 = abcd[3U]; uint32_t vc34 = abcd[0U]; uint32_t vd34 = abcd[1U]; - uint8_t *b34 = x + (uint32_t)44U; + uint8_t *b34 = x + 44U; uint32_t u33 = load32_le(b34); uint32_t xk33 = u33; uint32_t ti34 = _t[34U]; @@ -618,14 +610,14 @@ static void legacy_update(uint32_t *abcd, uint8_t *x) vb34 + ((va33 + (vb34 ^ (vc34 ^ vd34)) + xk33 + ti34) - << (uint32_t)16U - | (va33 + (vb34 ^ (vc34 ^ vd34)) + xk33 + ti34) >> (uint32_t)16U); + << 16U + | (va33 + (vb34 ^ (vc34 ^ vd34)) + xk33 + ti34) >> 16U); abcd[2U] = v33; uint32_t va34 = abcd[1U]; uint32_t vb35 = abcd[2U]; uint32_t vc35 = abcd[3U]; uint32_t vd35 = abcd[0U]; - uint8_t *b35 = x + (uint32_t)56U; + uint8_t *b35 = x + 56U; uint32_t u34 = load32_le(b35); uint32_t xk34 = u34; uint32_t ti35 = _t[35U]; @@ -634,14 +626,14 @@ static void legacy_update(uint32_t *abcd, uint8_t *x) vb35 + ((va34 + (vb35 ^ (vc35 ^ vd35)) + xk34 + ti35) - << (uint32_t)23U - | (va34 + (vb35 ^ (vc35 ^ vd35)) + xk34 + ti35) >> (uint32_t)9U); + << 23U + | (va34 + (vb35 ^ (vc35 ^ vd35)) + xk34 + ti35) >> 9U); abcd[1U] = v34; uint32_t va35 = abcd[0U]; uint32_t vb36 = abcd[1U]; uint32_t vc36 = abcd[2U]; uint32_t vd36 = abcd[3U]; - uint8_t *b36 = x + (uint32_t)4U; + uint8_t *b36 = x + 4U; uint32_t u35 = load32_le(b36); uint32_t xk35 = u35; uint32_t ti36 = _t[36U]; @@ -650,14 +642,14 @@ static void legacy_update(uint32_t *abcd, uint8_t *x) vb36 + ((va35 + (vb36 ^ (vc36 ^ vd36)) + xk35 + ti36) - << (uint32_t)4U - | (va35 + (vb36 ^ (vc36 ^ vd36)) + xk35 + ti36) >> (uint32_t)28U); + << 4U + | (va35 + (vb36 ^ (vc36 ^ vd36)) + xk35 + ti36) >> 28U); abcd[0U] = v35; uint32_t va36 = abcd[3U]; uint32_t vb37 = abcd[0U]; uint32_t vc37 = abcd[1U]; uint32_t vd37 = abcd[2U]; - uint8_t *b37 = x + (uint32_t)16U; + uint8_t *b37 = x + 16U; uint32_t u36 = load32_le(b37); uint32_t xk36 = u36; uint32_t ti37 = _t[37U]; @@ -666,14 +658,14 @@ static void legacy_update(uint32_t *abcd, uint8_t *x) vb37 + ((va36 + (vb37 ^ (vc37 ^ vd37)) + xk36 + ti37) - << (uint32_t)11U - | (va36 + (vb37 ^ (vc37 ^ vd37)) + xk36 + ti37) >> (uint32_t)21U); + << 11U + | (va36 + (vb37 ^ (vc37 ^ vd37)) + xk36 + ti37) >> 21U); abcd[3U] = v36; uint32_t va37 = abcd[2U]; uint32_t vb38 = abcd[3U]; uint32_t vc38 = abcd[0U]; uint32_t vd38 = abcd[1U]; - uint8_t *b38 = x + (uint32_t)28U; + uint8_t *b38 = x + 28U; uint32_t u37 = load32_le(b38); uint32_t xk37 = u37; uint32_t ti38 = _t[38U]; @@ -682,14 +674,14 @@ static void legacy_update(uint32_t *abcd, uint8_t *x) vb38 + ((va37 + (vb38 ^ (vc38 ^ vd38)) + xk37 + ti38) - << (uint32_t)16U - | (va37 + (vb38 ^ (vc38 ^ vd38)) + xk37 + ti38) >> (uint32_t)16U); + << 16U + | (va37 + (vb38 ^ (vc38 ^ vd38)) + xk37 + ti38) >> 16U); abcd[2U] = v37; uint32_t va38 = abcd[1U]; uint32_t vb39 = abcd[2U]; uint32_t vc39 = abcd[3U]; uint32_t vd39 = abcd[0U]; - uint8_t *b39 = x + (uint32_t)40U; + uint8_t *b39 = x + 40U; uint32_t u38 = load32_le(b39); uint32_t xk38 = u38; uint32_t ti39 = _t[39U]; @@ -698,14 +690,14 @@ static void legacy_update(uint32_t *abcd, uint8_t *x) vb39 + ((va38 + (vb39 ^ (vc39 ^ vd39)) + xk38 + ti39) - << (uint32_t)23U - | (va38 + (vb39 ^ (vc39 ^ vd39)) + xk38 + ti39) >> (uint32_t)9U); + << 23U + | (va38 + (vb39 ^ (vc39 ^ vd39)) + xk38 + ti39) >> 9U); abcd[1U] = v38; uint32_t va39 = abcd[0U]; uint32_t vb40 = abcd[1U]; uint32_t vc40 = abcd[2U]; uint32_t vd40 = abcd[3U]; - uint8_t *b40 = x + (uint32_t)52U; + uint8_t *b40 = x + 52U; uint32_t u39 = load32_le(b40); uint32_t xk39 = u39; uint32_t ti40 = _t[40U]; @@ -714,8 +706,8 @@ static void legacy_update(uint32_t *abcd, uint8_t *x) vb40 + ((va39 + (vb40 ^ (vc40 ^ vd40)) + xk39 + ti40) - << (uint32_t)4U - | (va39 + (vb40 ^ (vc40 ^ vd40)) + xk39 + ti40) >> (uint32_t)28U); + << 4U + | (va39 + (vb40 ^ (vc40 ^ vd40)) + xk39 + ti40) >> 28U); abcd[0U] = v39; uint32_t va40 = abcd[3U]; uint32_t vb41 = abcd[0U]; @@ -730,14 +722,14 @@ static void legacy_update(uint32_t *abcd, uint8_t *x) vb41 + ((va40 + (vb41 ^ (vc41 ^ vd41)) + xk40 + ti41) - << (uint32_t)11U - | (va40 + (vb41 ^ (vc41 ^ vd41)) + xk40 + ti41) >> (uint32_t)21U); + << 11U + | (va40 + (vb41 ^ (vc41 ^ vd41)) + xk40 + ti41) >> 21U); abcd[3U] = v40; uint32_t va41 = abcd[2U]; uint32_t vb42 = abcd[3U]; uint32_t vc42 = abcd[0U]; uint32_t vd42 = abcd[1U]; - uint8_t *b42 = x + (uint32_t)12U; + uint8_t *b42 = x + 12U; uint32_t u41 = load32_le(b42); uint32_t xk41 = u41; uint32_t ti42 = _t[42U]; @@ -746,14 +738,14 @@ static void legacy_update(uint32_t *abcd, uint8_t *x) vb42 + ((va41 + (vb42 ^ (vc42 ^ vd42)) + xk41 + ti42) - << (uint32_t)16U - | (va41 + (vb42 ^ (vc42 ^ vd42)) + xk41 + ti42) >> (uint32_t)16U); + << 16U + | (va41 + (vb42 ^ (vc42 ^ vd42)) + xk41 + ti42) >> 16U); abcd[2U] = v41; uint32_t va42 = abcd[1U]; uint32_t vb43 = abcd[2U]; uint32_t vc43 = abcd[3U]; uint32_t vd43 = abcd[0U]; - uint8_t *b43 = x + (uint32_t)24U; + uint8_t *b43 = x + 24U; uint32_t u42 = load32_le(b43); uint32_t xk42 = u42; uint32_t ti43 = _t[43U]; @@ -762,14 +754,14 @@ static void legacy_update(uint32_t *abcd, uint8_t *x) vb43 + ((va42 + (vb43 ^ (vc43 ^ vd43)) + xk42 + ti43) - << (uint32_t)23U - | (va42 + (vb43 ^ (vc43 ^ vd43)) + xk42 + ti43) >> (uint32_t)9U); + << 23U + | (va42 + (vb43 ^ (vc43 ^ vd43)) + xk42 + ti43) >> 9U); abcd[1U] = v42; uint32_t va43 = abcd[0U]; uint32_t vb44 = abcd[1U]; uint32_t vc44 = abcd[2U]; uint32_t vd44 = abcd[3U]; - uint8_t *b44 = x + (uint32_t)36U; + uint8_t *b44 = x + 36U; uint32_t u43 = load32_le(b44); uint32_t xk43 = u43; uint32_t ti44 = _t[44U]; @@ -778,14 +770,14 @@ static void legacy_update(uint32_t *abcd, uint8_t *x) vb44 + ((va43 + (vb44 ^ (vc44 ^ vd44)) + xk43 + ti44) - << (uint32_t)4U - | (va43 + (vb44 ^ (vc44 ^ vd44)) + xk43 + ti44) >> (uint32_t)28U); + << 4U + | (va43 + (vb44 ^ (vc44 ^ vd44)) + xk43 + ti44) >> 28U); abcd[0U] = v43; uint32_t va44 = abcd[3U]; uint32_t vb45 = abcd[0U]; uint32_t vc45 = abcd[1U]; uint32_t vd45 = abcd[2U]; - uint8_t *b45 = x + (uint32_t)48U; + uint8_t *b45 = x + 48U; uint32_t u44 = load32_le(b45); uint32_t xk44 = u44; uint32_t ti45 = _t[45U]; @@ -794,14 +786,14 @@ static void legacy_update(uint32_t *abcd, uint8_t *x) vb45 + ((va44 + (vb45 ^ (vc45 ^ vd45)) + xk44 + ti45) - << (uint32_t)11U - | (va44 + (vb45 ^ (vc45 ^ vd45)) + xk44 + ti45) >> (uint32_t)21U); + << 11U + | (va44 + (vb45 ^ (vc45 ^ vd45)) + xk44 + ti45) >> 21U); abcd[3U] = v44; uint32_t va45 = abcd[2U]; uint32_t vb46 = abcd[3U]; uint32_t vc46 = abcd[0U]; uint32_t vd46 = abcd[1U]; - uint8_t *b46 = x + (uint32_t)60U; + uint8_t *b46 = x + 60U; uint32_t u45 = load32_le(b46); uint32_t xk45 = u45; uint32_t ti46 = _t[46U]; @@ -810,14 +802,14 @@ static void legacy_update(uint32_t *abcd, uint8_t *x) vb46 + ((va45 + (vb46 ^ (vc46 ^ vd46)) + xk45 + ti46) - << (uint32_t)16U - | (va45 + (vb46 ^ (vc46 ^ vd46)) + xk45 + ti46) >> (uint32_t)16U); + << 16U + | (va45 + (vb46 ^ (vc46 ^ vd46)) + xk45 + ti46) >> 16U); abcd[2U] = v45; uint32_t va46 = abcd[1U]; uint32_t vb47 = abcd[2U]; uint32_t vc47 = abcd[3U]; uint32_t vd47 = abcd[0U]; - uint8_t *b47 = x + (uint32_t)8U; + uint8_t *b47 = x + 8U; uint32_t u46 = load32_le(b47); uint32_t xk46 = u46; uint32_t ti47 = _t[47U]; @@ -826,8 +818,8 @@ static void legacy_update(uint32_t *abcd, uint8_t *x) vb47 + ((va46 + (vb47 ^ (vc47 ^ vd47)) + xk46 + ti47) - << (uint32_t)23U - | (va46 + (vb47 ^ (vc47 ^ vd47)) + xk46 + ti47) >> (uint32_t)9U); + << 23U + | (va46 + (vb47 ^ (vc47 ^ vd47)) + xk46 + ti47) >> 9U); abcd[1U] = v46; uint32_t va47 = abcd[0U]; uint32_t vb48 = abcd[1U]; @@ -842,14 +834,14 @@ static void legacy_update(uint32_t *abcd, uint8_t *x) vb48 + ((va47 + (vc48 ^ (vb48 | ~vd48)) + xk47 + ti48) - << (uint32_t)6U - | (va47 + (vc48 ^ (vb48 | ~vd48)) + xk47 + ti48) >> (uint32_t)26U); + << 6U + | (va47 + (vc48 ^ (vb48 | ~vd48)) + xk47 + ti48) >> 26U); abcd[0U] = v47; uint32_t va48 = abcd[3U]; uint32_t vb49 = abcd[0U]; uint32_t vc49 = abcd[1U]; uint32_t vd49 = abcd[2U]; - uint8_t *b49 = x + (uint32_t)28U; + uint8_t *b49 = x + 28U; uint32_t u48 = load32_le(b49); uint32_t xk48 = u48; uint32_t ti49 = _t[49U]; @@ -858,14 +850,14 @@ static void legacy_update(uint32_t *abcd, uint8_t *x) vb49 + ((va48 + (vc49 ^ (vb49 | ~vd49)) + xk48 + ti49) - << (uint32_t)10U - | (va48 + (vc49 ^ (vb49 | ~vd49)) + xk48 + ti49) >> (uint32_t)22U); + << 10U + | (va48 + (vc49 ^ (vb49 | ~vd49)) + xk48 + ti49) >> 22U); abcd[3U] = v48; uint32_t va49 = abcd[2U]; uint32_t vb50 = abcd[3U]; uint32_t vc50 = abcd[0U]; uint32_t vd50 = abcd[1U]; - uint8_t *b50 = x + (uint32_t)56U; + uint8_t *b50 = x + 56U; uint32_t u49 = load32_le(b50); uint32_t xk49 = u49; uint32_t ti50 = _t[50U]; @@ -874,14 +866,14 @@ static void legacy_update(uint32_t *abcd, uint8_t *x) vb50 + ((va49 + (vc50 ^ (vb50 | ~vd50)) + xk49 + ti50) - << (uint32_t)15U - | (va49 + (vc50 ^ (vb50 | ~vd50)) + xk49 + ti50) >> (uint32_t)17U); + << 15U + | (va49 + (vc50 ^ (vb50 | ~vd50)) + xk49 + ti50) >> 17U); abcd[2U] = v49; uint32_t va50 = abcd[1U]; uint32_t vb51 = abcd[2U]; uint32_t vc51 = abcd[3U]; uint32_t vd51 = abcd[0U]; - uint8_t *b51 = x + (uint32_t)20U; + uint8_t *b51 = x + 20U; uint32_t u50 = load32_le(b51); uint32_t xk50 = u50; uint32_t ti51 = _t[51U]; @@ -890,14 +882,14 @@ static void legacy_update(uint32_t *abcd, uint8_t *x) vb51 + ((va50 + (vc51 ^ (vb51 | ~vd51)) + xk50 + ti51) - << (uint32_t)21U - | (va50 + (vc51 ^ (vb51 | ~vd51)) + xk50 + ti51) >> (uint32_t)11U); + << 21U + | (va50 + (vc51 ^ (vb51 | ~vd51)) + xk50 + ti51) >> 11U); abcd[1U] = v50; uint32_t va51 = abcd[0U]; uint32_t vb52 = abcd[1U]; uint32_t vc52 = abcd[2U]; uint32_t vd52 = abcd[3U]; - uint8_t *b52 = x + (uint32_t)48U; + uint8_t *b52 = x + 48U; uint32_t u51 = load32_le(b52); uint32_t xk51 = u51; uint32_t ti52 = _t[52U]; @@ -906,14 +898,14 @@ static void legacy_update(uint32_t *abcd, uint8_t *x) vb52 + ((va51 + (vc52 ^ (vb52 | ~vd52)) + xk51 + ti52) - << (uint32_t)6U - | (va51 + (vc52 ^ (vb52 | ~vd52)) + xk51 + ti52) >> (uint32_t)26U); + << 6U + | (va51 + (vc52 ^ (vb52 | ~vd52)) + xk51 + ti52) >> 26U); abcd[0U] = v51; uint32_t va52 = abcd[3U]; uint32_t vb53 = abcd[0U]; uint32_t vc53 = abcd[1U]; uint32_t vd53 = abcd[2U]; - uint8_t *b53 = x + (uint32_t)12U; + uint8_t *b53 = x + 12U; uint32_t u52 = load32_le(b53); uint32_t xk52 = u52; uint32_t ti53 = _t[53U]; @@ -922,14 +914,14 @@ static void legacy_update(uint32_t *abcd, uint8_t *x) vb53 + ((va52 + (vc53 ^ (vb53 | ~vd53)) + xk52 + ti53) - << (uint32_t)10U - | (va52 + (vc53 ^ (vb53 | ~vd53)) + xk52 + ti53) >> (uint32_t)22U); + << 10U + | (va52 + (vc53 ^ (vb53 | ~vd53)) + xk52 + ti53) >> 22U); abcd[3U] = v52; uint32_t va53 = abcd[2U]; uint32_t vb54 = abcd[3U]; uint32_t vc54 = abcd[0U]; uint32_t vd54 = abcd[1U]; - uint8_t *b54 = x + (uint32_t)40U; + uint8_t *b54 = x + 40U; uint32_t u53 = load32_le(b54); uint32_t xk53 = u53; uint32_t ti54 = _t[54U]; @@ -938,14 +930,14 @@ static void legacy_update(uint32_t *abcd, uint8_t *x) vb54 + ((va53 + (vc54 ^ (vb54 | ~vd54)) + xk53 + ti54) - << (uint32_t)15U - | (va53 + (vc54 ^ (vb54 | ~vd54)) + xk53 + ti54) >> (uint32_t)17U); + << 15U + | (va53 + (vc54 ^ (vb54 | ~vd54)) + xk53 + ti54) >> 17U); abcd[2U] = v53; uint32_t va54 = abcd[1U]; uint32_t vb55 = abcd[2U]; uint32_t vc55 = abcd[3U]; uint32_t vd55 = abcd[0U]; - uint8_t *b55 = x + (uint32_t)4U; + uint8_t *b55 = x + 4U; uint32_t u54 = load32_le(b55); uint32_t xk54 = u54; uint32_t ti55 = _t[55U]; @@ -954,14 +946,14 @@ static void legacy_update(uint32_t *abcd, uint8_t *x) vb55 + ((va54 + (vc55 ^ (vb55 | ~vd55)) + xk54 + ti55) - << (uint32_t)21U - | (va54 + (vc55 ^ (vb55 | ~vd55)) + xk54 + ti55) >> (uint32_t)11U); + << 21U + | (va54 + (vc55 ^ (vb55 | ~vd55)) + xk54 + ti55) >> 11U); abcd[1U] = v54; uint32_t va55 = abcd[0U]; uint32_t vb56 = abcd[1U]; uint32_t vc56 = abcd[2U]; uint32_t vd56 = abcd[3U]; - uint8_t *b56 = x + (uint32_t)32U; + uint8_t *b56 = x + 32U; uint32_t u55 = load32_le(b56); uint32_t xk55 = u55; uint32_t ti56 = _t[56U]; @@ -970,14 +962,14 @@ static void legacy_update(uint32_t *abcd, uint8_t *x) vb56 + ((va55 + (vc56 ^ (vb56 | ~vd56)) + xk55 + ti56) - << (uint32_t)6U - | (va55 + (vc56 ^ (vb56 | ~vd56)) + xk55 + ti56) >> (uint32_t)26U); + << 6U + | (va55 + (vc56 ^ (vb56 | ~vd56)) + xk55 + ti56) >> 26U); abcd[0U] = v55; uint32_t va56 = abcd[3U]; uint32_t vb57 = abcd[0U]; uint32_t vc57 = abcd[1U]; uint32_t vd57 = abcd[2U]; - uint8_t *b57 = x + (uint32_t)60U; + uint8_t *b57 = x + 60U; uint32_t u56 = load32_le(b57); uint32_t xk56 = u56; uint32_t ti57 = _t[57U]; @@ -986,14 +978,14 @@ static void legacy_update(uint32_t *abcd, uint8_t *x) vb57 + ((va56 + (vc57 ^ (vb57 | ~vd57)) + xk56 + ti57) - << (uint32_t)10U - | (va56 + (vc57 ^ (vb57 | ~vd57)) + xk56 + ti57) >> (uint32_t)22U); + << 10U + | (va56 + (vc57 ^ (vb57 | ~vd57)) + xk56 + ti57) >> 22U); abcd[3U] = v56; uint32_t va57 = abcd[2U]; uint32_t vb58 = abcd[3U]; uint32_t vc58 = abcd[0U]; uint32_t vd58 = abcd[1U]; - uint8_t *b58 = x + (uint32_t)24U; + uint8_t *b58 = x + 24U; uint32_t u57 = load32_le(b58); uint32_t xk57 = u57; uint32_t ti58 = _t[58U]; @@ -1002,14 +994,14 @@ static void legacy_update(uint32_t *abcd, uint8_t *x) vb58 + ((va57 + (vc58 ^ (vb58 | ~vd58)) + xk57 + ti58) - << (uint32_t)15U - | (va57 + (vc58 ^ (vb58 | ~vd58)) + xk57 + ti58) >> (uint32_t)17U); + << 15U + | (va57 + (vc58 ^ (vb58 | ~vd58)) + xk57 + ti58) >> 17U); abcd[2U] = v57; uint32_t va58 = abcd[1U]; uint32_t vb59 = abcd[2U]; uint32_t vc59 = abcd[3U]; uint32_t vd59 = abcd[0U]; - uint8_t *b59 = x + (uint32_t)52U; + uint8_t *b59 = x + 52U; uint32_t u58 = load32_le(b59); uint32_t xk58 = u58; uint32_t ti59 = _t[59U]; @@ -1018,14 +1010,14 @@ static void legacy_update(uint32_t *abcd, uint8_t *x) vb59 + ((va58 + (vc59 ^ (vb59 | ~vd59)) + xk58 + ti59) - << (uint32_t)21U - | (va58 + (vc59 ^ (vb59 | ~vd59)) + xk58 + ti59) >> (uint32_t)11U); + << 21U + | (va58 + (vc59 ^ (vb59 | ~vd59)) + xk58 + ti59) >> 11U); abcd[1U] = v58; uint32_t va59 = abcd[0U]; uint32_t vb60 = abcd[1U]; uint32_t vc60 = abcd[2U]; uint32_t vd60 = abcd[3U]; - uint8_t *b60 = x + (uint32_t)16U; + uint8_t *b60 = x + 16U; uint32_t u59 = load32_le(b60); uint32_t xk59 = u59; uint32_t ti60 = _t[60U]; @@ -1034,14 +1026,14 @@ static void legacy_update(uint32_t *abcd, uint8_t *x) vb60 + ((va59 + (vc60 ^ (vb60 | ~vd60)) + xk59 + ti60) - << (uint32_t)6U - | (va59 + (vc60 ^ (vb60 | ~vd60)) + xk59 + ti60) >> (uint32_t)26U); + << 6U + | (va59 + (vc60 ^ (vb60 | ~vd60)) + xk59 + ti60) >> 26U); abcd[0U] = v59; uint32_t va60 = abcd[3U]; uint32_t vb61 = abcd[0U]; uint32_t vc61 = abcd[1U]; uint32_t vd61 = abcd[2U]; - uint8_t *b61 = x + (uint32_t)44U; + uint8_t *b61 = x + 44U; uint32_t u60 = load32_le(b61); uint32_t xk60 = u60; uint32_t ti61 = _t[61U]; @@ -1050,14 +1042,14 @@ static void legacy_update(uint32_t *abcd, uint8_t *x) vb61 + ((va60 + (vc61 ^ (vb61 | ~vd61)) + xk60 + ti61) - << (uint32_t)10U - | (va60 + (vc61 ^ (vb61 | ~vd61)) + xk60 + ti61) >> (uint32_t)22U); + << 10U + | (va60 + (vc61 ^ (vb61 | ~vd61)) + xk60 + ti61) >> 22U); abcd[3U] = v60; uint32_t va61 = abcd[2U]; uint32_t vb62 = abcd[3U]; uint32_t vc62 = abcd[0U]; uint32_t vd62 = abcd[1U]; - uint8_t *b62 = x + (uint32_t)8U; + uint8_t *b62 = x + 8U; uint32_t u61 = load32_le(b62); uint32_t xk61 = u61; uint32_t ti62 = _t[62U]; @@ -1066,14 +1058,14 @@ static void legacy_update(uint32_t *abcd, uint8_t *x) vb62 + ((va61 + (vc62 ^ (vb62 | ~vd62)) + xk61 + ti62) - << (uint32_t)15U - | (va61 + (vc62 ^ (vb62 | ~vd62)) + xk61 + ti62) >> (uint32_t)17U); + << 15U + | (va61 + (vc62 ^ (vb62 | ~vd62)) + xk61 + ti62) >> 17U); abcd[2U] = v61; uint32_t va62 = abcd[1U]; uint32_t vb = abcd[2U]; uint32_t vc = abcd[3U]; uint32_t vd = abcd[0U]; - uint8_t *b63 = x + (uint32_t)36U; + uint8_t *b63 = x + 36U; uint32_t u62 = load32_le(b63); uint32_t xk62 = u62; uint32_t ti = _t[63U]; @@ -1082,8 +1074,8 @@ static void legacy_update(uint32_t *abcd, uint8_t *x) vb + ((va62 + (vc ^ (vb | ~vd)) + xk62 + ti) - << (uint32_t)21U - | (va62 + (vc ^ (vb | ~vd)) + xk62 + ti) >> (uint32_t)11U); + << 21U + | (va62 + (vc ^ (vb | ~vd)) + xk62 + ti) >> 11U); abcd[1U] = v62; uint32_t a = abcd[0U]; uint32_t b = abcd[1U]; @@ -1095,98 +1087,69 @@ static void legacy_update(uint32_t *abcd, uint8_t *x) abcd[3U] = d + dd; } -static void legacy_pad(uint64_t len, uint8_t *dst) +static void pad(uint64_t len, uint8_t *dst) { uint8_t *dst1 = dst; - dst1[0U] = (uint8_t)0x80U; - uint8_t *dst2 = dst + (uint32_t)1U; - for - (uint32_t - i = (uint32_t)0U; - i - < ((uint32_t)128U - ((uint32_t)9U + (uint32_t)(len % (uint64_t)(uint32_t)64U))) % (uint32_t)64U; - i++) + dst1[0U] = 0x80U; + uint8_t *dst2 = dst + 1U; + for (uint32_t i = 0U; i < (128U - (9U + (uint32_t)(len % (uint64_t)64U))) % 64U; i++) { - dst2[i] = (uint8_t)0U; + dst2[i] = 0U; } - uint8_t - *dst3 = - dst - + - (uint32_t)1U - + - ((uint32_t)128U - ((uint32_t)9U + (uint32_t)(len % (uint64_t)(uint32_t)64U))) - % (uint32_t)64U; - store64_le(dst3, len << (uint32_t)3U); + uint8_t *dst3 = dst + 1U + (128U - (9U + (uint32_t)(len % (uint64_t)64U))) % 64U; + store64_le(dst3, len << 3U); } -void Hacl_Hash_Core_MD5_legacy_finish(uint32_t *s, uint8_t *dst) +void Hacl_Hash_MD5_finish(uint32_t *s, uint8_t *dst) { - KRML_MAYBE_FOR4(i, - (uint32_t)0U, - (uint32_t)4U, - (uint32_t)1U, - store32_le(dst + i * (uint32_t)4U, s[i]);); + KRML_MAYBE_FOR4(i, 0U, 4U, 1U, store32_le(dst + i * 4U, s[i]);); } -void Hacl_Hash_MD5_legacy_update_multi(uint32_t *s, uint8_t *blocks, uint32_t n_blocks) +void Hacl_Hash_MD5_update_multi(uint32_t *s, uint8_t *blocks, uint32_t n_blocks) { - for (uint32_t i = (uint32_t)0U; i < n_blocks; i++) + for (uint32_t i = 0U; i < n_blocks; i++) { - uint32_t sz = (uint32_t)64U; + uint32_t sz = 64U; uint8_t *block = blocks + sz * i; - legacy_update(s, block); + update(s, block); } } void -Hacl_Hash_MD5_legacy_update_last( - uint32_t *s, - uint64_t prev_len, - uint8_t *input, - uint32_t input_len -) +Hacl_Hash_MD5_update_last(uint32_t *s, uint64_t prev_len, uint8_t *input, uint32_t input_len) { - uint32_t blocks_n = input_len / (uint32_t)64U; - uint32_t blocks_len = blocks_n * (uint32_t)64U; + uint32_t blocks_n = input_len / 64U; + uint32_t blocks_len = blocks_n * 64U; uint8_t *blocks = input; uint32_t rest_len = input_len - blocks_len; uint8_t *rest = input + blocks_len; - Hacl_Hash_MD5_legacy_update_multi(s, blocks, blocks_n); + Hacl_Hash_MD5_update_multi(s, blocks, blocks_n); uint64_t total_input_len = prev_len + (uint64_t)input_len; - uint32_t - pad_len = - (uint32_t)1U - + - ((uint32_t)128U - ((uint32_t)9U + (uint32_t)(total_input_len % (uint64_t)(uint32_t)64U))) - % (uint32_t)64U - + (uint32_t)8U; + uint32_t pad_len = 1U + (128U - (9U + (uint32_t)(total_input_len % (uint64_t)64U))) % 64U + 8U; uint32_t tmp_len = rest_len + pad_len; uint8_t tmp_twoblocks[128U] = { 0U }; uint8_t *tmp = tmp_twoblocks; uint8_t *tmp_rest = tmp; uint8_t *tmp_pad = tmp + rest_len; memcpy(tmp_rest, rest, rest_len * sizeof (uint8_t)); - legacy_pad(total_input_len, tmp_pad); - Hacl_Hash_MD5_legacy_update_multi(s, tmp, tmp_len / (uint32_t)64U); + pad(total_input_len, tmp_pad); + Hacl_Hash_MD5_update_multi(s, tmp, tmp_len / 64U); } -void Hacl_Hash_MD5_legacy_hash(uint8_t *input, uint32_t input_len, uint8_t *dst) +void Hacl_Hash_MD5_hash_oneshot(uint8_t *output, uint8_t *input, uint32_t input_len) { - uint32_t - s[4U] = - { (uint32_t)0x67452301U, (uint32_t)0xefcdab89U, (uint32_t)0x98badcfeU, (uint32_t)0x10325476U }; - uint32_t blocks_n0 = input_len / (uint32_t)64U; + uint32_t s[4U] = { 0x67452301U, 0xefcdab89U, 0x98badcfeU, 0x10325476U }; + uint32_t blocks_n0 = input_len / 64U; uint32_t blocks_n1; - if (input_len % (uint32_t)64U == (uint32_t)0U && blocks_n0 > (uint32_t)0U) + if (input_len % 64U == 0U && blocks_n0 > 0U) { - blocks_n1 = blocks_n0 - (uint32_t)1U; + blocks_n1 = blocks_n0 - 1U; } else { blocks_n1 = blocks_n0; } - uint32_t blocks_len0 = blocks_n1 * (uint32_t)64U; + uint32_t blocks_len0 = blocks_n1 * 64U; uint8_t *blocks0 = input; uint32_t rest_len0 = input_len - blocks_len0; uint8_t *rest0 = input + blocks_len0; @@ -1195,75 +1158,75 @@ void Hacl_Hash_MD5_legacy_hash(uint8_t *input, uint32_t input_len, uint8_t *dst) uint8_t *blocks = blocks0; uint32_t rest_len = rest_len0; uint8_t *rest = rest0; - Hacl_Hash_MD5_legacy_update_multi(s, blocks, blocks_n); - Hacl_Hash_MD5_legacy_update_last(s, (uint64_t)blocks_len, rest, rest_len); - Hacl_Hash_Core_MD5_legacy_finish(s, dst); + Hacl_Hash_MD5_update_multi(s, blocks, blocks_n); + Hacl_Hash_MD5_update_last(s, (uint64_t)blocks_len, rest, rest_len); + Hacl_Hash_MD5_finish(s, output); } -Hacl_Streaming_MD_state_32 *Hacl_Streaming_MD5_legacy_create_in(void) +Hacl_Streaming_MD_state_32 *Hacl_Hash_MD5_malloc(void) { - uint8_t *buf = (uint8_t *)KRML_HOST_CALLOC((uint32_t)64U, sizeof (uint8_t)); - uint32_t *block_state = (uint32_t *)KRML_HOST_CALLOC((uint32_t)4U, sizeof (uint32_t)); + uint8_t *buf = (uint8_t *)KRML_HOST_CALLOC(64U, sizeof (uint8_t)); + uint32_t *block_state = (uint32_t *)KRML_HOST_CALLOC(4U, sizeof (uint32_t)); Hacl_Streaming_MD_state_32 - s = { .block_state = block_state, .buf = buf, .total_len = (uint64_t)(uint32_t)0U }; + s = { .block_state = block_state, .buf = buf, .total_len = (uint64_t)0U }; Hacl_Streaming_MD_state_32 *p = (Hacl_Streaming_MD_state_32 *)KRML_HOST_MALLOC(sizeof (Hacl_Streaming_MD_state_32)); p[0U] = s; - Hacl_Hash_Core_MD5_legacy_init(block_state); + Hacl_Hash_MD5_init(block_state); return p; } -void Hacl_Streaming_MD5_legacy_init(Hacl_Streaming_MD_state_32 *s) +void Hacl_Hash_MD5_reset(Hacl_Streaming_MD_state_32 *state) { - Hacl_Streaming_MD_state_32 scrut = *s; + Hacl_Streaming_MD_state_32 scrut = *state; uint8_t *buf = scrut.buf; uint32_t *block_state = scrut.block_state; - Hacl_Hash_Core_MD5_legacy_init(block_state); + Hacl_Hash_MD5_init(block_state); Hacl_Streaming_MD_state_32 - tmp = { .block_state = block_state, .buf = buf, .total_len = (uint64_t)(uint32_t)0U }; - s[0U] = tmp; + tmp = { .block_state = block_state, .buf = buf, .total_len = (uint64_t)0U }; + state[0U] = tmp; } /** 0 = success, 1 = max length exceeded */ Hacl_Streaming_Types_error_code -Hacl_Streaming_MD5_legacy_update(Hacl_Streaming_MD_state_32 *p, uint8_t *data, uint32_t len) +Hacl_Hash_MD5_update(Hacl_Streaming_MD_state_32 *state, uint8_t *chunk, uint32_t chunk_len) { - Hacl_Streaming_MD_state_32 s = *p; + Hacl_Streaming_MD_state_32 s = *state; uint64_t total_len = s.total_len; - if ((uint64_t)len > (uint64_t)2305843009213693951U - total_len) + if ((uint64_t)chunk_len > 2305843009213693951ULL - total_len) { return Hacl_Streaming_Types_MaximumLengthExceeded; } uint32_t sz; - if (total_len % (uint64_t)(uint32_t)64U == (uint64_t)0U && total_len > (uint64_t)0U) + if (total_len % (uint64_t)64U == 0ULL && total_len > 0ULL) { - sz = (uint32_t)64U; + sz = 64U; } else { - sz = (uint32_t)(total_len % (uint64_t)(uint32_t)64U); + sz = (uint32_t)(total_len % (uint64_t)64U); } - if (len <= (uint32_t)64U - sz) + if (chunk_len <= 64U - sz) { - Hacl_Streaming_MD_state_32 s1 = *p; + Hacl_Streaming_MD_state_32 s1 = *state; uint32_t *block_state1 = s1.block_state; uint8_t *buf = s1.buf; uint64_t total_len1 = s1.total_len; uint32_t sz1; - if (total_len1 % (uint64_t)(uint32_t)64U == (uint64_t)0U && total_len1 > (uint64_t)0U) + if (total_len1 % (uint64_t)64U == 0ULL && total_len1 > 0ULL) { - sz1 = (uint32_t)64U; + sz1 = 64U; } else { - sz1 = (uint32_t)(total_len1 % (uint64_t)(uint32_t)64U); + sz1 = (uint32_t)(total_len1 % (uint64_t)64U); } uint8_t *buf2 = buf + sz1; - memcpy(buf2, data, len * sizeof (uint8_t)); - uint64_t total_len2 = total_len1 + (uint64_t)len; - *p + memcpy(buf2, chunk, chunk_len * sizeof (uint8_t)); + uint64_t total_len2 = total_len1 + (uint64_t)chunk_len; + *state = ( (Hacl_Streaming_MD_state_32){ @@ -1273,74 +1236,74 @@ Hacl_Streaming_MD5_legacy_update(Hacl_Streaming_MD_state_32 *p, uint8_t *data, u } ); } - else if (sz == (uint32_t)0U) + else if (sz == 0U) { - Hacl_Streaming_MD_state_32 s1 = *p; + Hacl_Streaming_MD_state_32 s1 = *state; uint32_t *block_state1 = s1.block_state; uint8_t *buf = s1.buf; uint64_t total_len1 = s1.total_len; uint32_t sz1; - if (total_len1 % (uint64_t)(uint32_t)64U == (uint64_t)0U && total_len1 > (uint64_t)0U) + if (total_len1 % (uint64_t)64U == 0ULL && total_len1 > 0ULL) { - sz1 = (uint32_t)64U; + sz1 = 64U; } else { - sz1 = (uint32_t)(total_len1 % (uint64_t)(uint32_t)64U); + sz1 = (uint32_t)(total_len1 % (uint64_t)64U); } - if (!(sz1 == (uint32_t)0U)) + if (!(sz1 == 0U)) { - Hacl_Hash_MD5_legacy_update_multi(block_state1, buf, (uint32_t)1U); + Hacl_Hash_MD5_update_multi(block_state1, buf, 1U); } uint32_t ite; - if ((uint64_t)len % (uint64_t)(uint32_t)64U == (uint64_t)0U && (uint64_t)len > (uint64_t)0U) + if ((uint64_t)chunk_len % (uint64_t)64U == 0ULL && (uint64_t)chunk_len > 0ULL) { - ite = (uint32_t)64U; + ite = 64U; } else { - ite = (uint32_t)((uint64_t)len % (uint64_t)(uint32_t)64U); + ite = (uint32_t)((uint64_t)chunk_len % (uint64_t)64U); } - uint32_t n_blocks = (len - ite) / (uint32_t)64U; - uint32_t data1_len = n_blocks * (uint32_t)64U; - uint32_t data2_len = len - data1_len; - uint8_t *data1 = data; - uint8_t *data2 = data + data1_len; - Hacl_Hash_MD5_legacy_update_multi(block_state1, data1, data1_len / (uint32_t)64U); + uint32_t n_blocks = (chunk_len - ite) / 64U; + uint32_t data1_len = n_blocks * 64U; + uint32_t data2_len = chunk_len - data1_len; + uint8_t *data1 = chunk; + uint8_t *data2 = chunk + data1_len; + Hacl_Hash_MD5_update_multi(block_state1, data1, data1_len / 64U); uint8_t *dst = buf; memcpy(dst, data2, data2_len * sizeof (uint8_t)); - *p + *state = ( (Hacl_Streaming_MD_state_32){ .block_state = block_state1, .buf = buf, - .total_len = total_len1 + (uint64_t)len + .total_len = total_len1 + (uint64_t)chunk_len } ); } else { - uint32_t diff = (uint32_t)64U - sz; - uint8_t *data1 = data; - uint8_t *data2 = data + diff; - Hacl_Streaming_MD_state_32 s1 = *p; + uint32_t diff = 64U - sz; + uint8_t *chunk1 = chunk; + uint8_t *chunk2 = chunk + diff; + Hacl_Streaming_MD_state_32 s1 = *state; uint32_t *block_state10 = s1.block_state; uint8_t *buf0 = s1.buf; uint64_t total_len10 = s1.total_len; uint32_t sz10; - if (total_len10 % (uint64_t)(uint32_t)64U == (uint64_t)0U && total_len10 > (uint64_t)0U) + if (total_len10 % (uint64_t)64U == 0ULL && total_len10 > 0ULL) { - sz10 = (uint32_t)64U; + sz10 = 64U; } else { - sz10 = (uint32_t)(total_len10 % (uint64_t)(uint32_t)64U); + sz10 = (uint32_t)(total_len10 % (uint64_t)64U); } uint8_t *buf2 = buf0 + sz10; - memcpy(buf2, data1, diff * sizeof (uint8_t)); + memcpy(buf2, chunk1, diff * sizeof (uint8_t)); uint64_t total_len2 = total_len10 + (uint64_t)diff; - *p + *state = ( (Hacl_Streaming_MD_state_32){ @@ -1349,114 +1312,109 @@ Hacl_Streaming_MD5_legacy_update(Hacl_Streaming_MD_state_32 *p, uint8_t *data, u .total_len = total_len2 } ); - Hacl_Streaming_MD_state_32 s10 = *p; + Hacl_Streaming_MD_state_32 s10 = *state; uint32_t *block_state1 = s10.block_state; uint8_t *buf = s10.buf; uint64_t total_len1 = s10.total_len; uint32_t sz1; - if (total_len1 % (uint64_t)(uint32_t)64U == (uint64_t)0U && total_len1 > (uint64_t)0U) + if (total_len1 % (uint64_t)64U == 0ULL && total_len1 > 0ULL) { - sz1 = (uint32_t)64U; + sz1 = 64U; } else { - sz1 = (uint32_t)(total_len1 % (uint64_t)(uint32_t)64U); + sz1 = (uint32_t)(total_len1 % (uint64_t)64U); } - if (!(sz1 == (uint32_t)0U)) + if (!(sz1 == 0U)) { - Hacl_Hash_MD5_legacy_update_multi(block_state1, buf, (uint32_t)1U); + Hacl_Hash_MD5_update_multi(block_state1, buf, 1U); } uint32_t ite; if - ( - (uint64_t)(len - diff) - % (uint64_t)(uint32_t)64U - == (uint64_t)0U - && (uint64_t)(len - diff) > (uint64_t)0U - ) + ((uint64_t)(chunk_len - diff) % (uint64_t)64U == 0ULL && (uint64_t)(chunk_len - diff) > 0ULL) { - ite = (uint32_t)64U; + ite = 64U; } else { - ite = (uint32_t)((uint64_t)(len - diff) % (uint64_t)(uint32_t)64U); + ite = (uint32_t)((uint64_t)(chunk_len - diff) % (uint64_t)64U); } - uint32_t n_blocks = (len - diff - ite) / (uint32_t)64U; - uint32_t data1_len = n_blocks * (uint32_t)64U; - uint32_t data2_len = len - diff - data1_len; - uint8_t *data11 = data2; - uint8_t *data21 = data2 + data1_len; - Hacl_Hash_MD5_legacy_update_multi(block_state1, data11, data1_len / (uint32_t)64U); + uint32_t n_blocks = (chunk_len - diff - ite) / 64U; + uint32_t data1_len = n_blocks * 64U; + uint32_t data2_len = chunk_len - diff - data1_len; + uint8_t *data1 = chunk2; + uint8_t *data2 = chunk2 + data1_len; + Hacl_Hash_MD5_update_multi(block_state1, data1, data1_len / 64U); uint8_t *dst = buf; - memcpy(dst, data21, data2_len * sizeof (uint8_t)); - *p + memcpy(dst, data2, data2_len * sizeof (uint8_t)); + *state = ( (Hacl_Streaming_MD_state_32){ .block_state = block_state1, .buf = buf, - .total_len = total_len1 + (uint64_t)(len - diff) + .total_len = total_len1 + (uint64_t)(chunk_len - diff) } ); } return Hacl_Streaming_Types_Success; } -void Hacl_Streaming_MD5_legacy_finish(Hacl_Streaming_MD_state_32 *p, uint8_t *dst) +void Hacl_Hash_MD5_digest(Hacl_Streaming_MD_state_32 *state, uint8_t *output) { - Hacl_Streaming_MD_state_32 scrut = *p; + Hacl_Streaming_MD_state_32 scrut = *state; uint32_t *block_state = scrut.block_state; uint8_t *buf_ = scrut.buf; uint64_t total_len = scrut.total_len; uint32_t r; - if (total_len % (uint64_t)(uint32_t)64U == (uint64_t)0U && total_len > (uint64_t)0U) + if (total_len % (uint64_t)64U == 0ULL && total_len > 0ULL) { - r = (uint32_t)64U; + r = 64U; } else { - r = (uint32_t)(total_len % (uint64_t)(uint32_t)64U); + r = (uint32_t)(total_len % (uint64_t)64U); } uint8_t *buf_1 = buf_; uint32_t tmp_block_state[4U] = { 0U }; - memcpy(tmp_block_state, block_state, (uint32_t)4U * sizeof (uint32_t)); + memcpy(tmp_block_state, block_state, 4U * sizeof (uint32_t)); uint32_t ite; - if (r % (uint32_t)64U == (uint32_t)0U && r > (uint32_t)0U) + if (r % 64U == 0U && r > 0U) { - ite = (uint32_t)64U; + ite = 64U; } else { - ite = r % (uint32_t)64U; + ite = r % 64U; } uint8_t *buf_last = buf_1 + r - ite; uint8_t *buf_multi = buf_1; - Hacl_Hash_MD5_legacy_update_multi(tmp_block_state, buf_multi, (uint32_t)0U); + Hacl_Hash_MD5_update_multi(tmp_block_state, buf_multi, 0U); uint64_t prev_len_last = total_len - (uint64_t)r; - Hacl_Hash_MD5_legacy_update_last(tmp_block_state, prev_len_last, buf_last, r); - Hacl_Hash_Core_MD5_legacy_finish(tmp_block_state, dst); + Hacl_Hash_MD5_update_last(tmp_block_state, prev_len_last, buf_last, r); + Hacl_Hash_MD5_finish(tmp_block_state, output); } -void Hacl_Streaming_MD5_legacy_free(Hacl_Streaming_MD_state_32 *s) +void Hacl_Hash_MD5_free(Hacl_Streaming_MD_state_32 *state) { - Hacl_Streaming_MD_state_32 scrut = *s; + Hacl_Streaming_MD_state_32 scrut = *state; uint8_t *buf = scrut.buf; uint32_t *block_state = scrut.block_state; KRML_HOST_FREE(block_state); KRML_HOST_FREE(buf); - KRML_HOST_FREE(s); + KRML_HOST_FREE(state); } -Hacl_Streaming_MD_state_32 *Hacl_Streaming_MD5_legacy_copy(Hacl_Streaming_MD_state_32 *s0) +Hacl_Streaming_MD_state_32 *Hacl_Hash_MD5_copy(Hacl_Streaming_MD_state_32 *state) { - Hacl_Streaming_MD_state_32 scrut = *s0; + Hacl_Streaming_MD_state_32 scrut = *state; uint32_t *block_state0 = scrut.block_state; uint8_t *buf0 = scrut.buf; uint64_t total_len0 = scrut.total_len; - uint8_t *buf = (uint8_t *)KRML_HOST_CALLOC((uint32_t)64U, sizeof (uint8_t)); - memcpy(buf, buf0, (uint32_t)64U * sizeof (uint8_t)); - uint32_t *block_state = (uint32_t *)KRML_HOST_CALLOC((uint32_t)4U, sizeof (uint32_t)); - memcpy(block_state, block_state0, (uint32_t)4U * sizeof (uint32_t)); + uint8_t *buf = (uint8_t *)KRML_HOST_CALLOC(64U, sizeof (uint8_t)); + memcpy(buf, buf0, 64U * sizeof (uint8_t)); + uint32_t *block_state = (uint32_t *)KRML_HOST_CALLOC(4U, sizeof (uint32_t)); + memcpy(block_state, block_state0, 4U * sizeof (uint32_t)); Hacl_Streaming_MD_state_32 s = { .block_state = block_state, .buf = buf, .total_len = total_len0 }; Hacl_Streaming_MD_state_32 @@ -1465,8 +1423,8 @@ Hacl_Streaming_MD_state_32 *Hacl_Streaming_MD5_legacy_copy(Hacl_Streaming_MD_sta return p; } -void Hacl_Streaming_MD5_legacy_hash(uint8_t *input, uint32_t input_len, uint8_t *dst) +void Hacl_Hash_MD5_hash(uint8_t *output, uint8_t *input, uint32_t input_len) { - Hacl_Hash_MD5_legacy_hash(input, input_len, dst); + Hacl_Hash_MD5_hash_oneshot(output, input, input_len); } diff --git a/contrib/tools/python3/Modules/_hacl/Hacl_Hash_MD5.h b/contrib/tools/python3/Modules/_hacl/Hacl_Hash_MD5.h index 13c19fd40f..f69d6e5a81 100644 --- a/contrib/tools/python3/Modules/_hacl/Hacl_Hash_MD5.h +++ b/contrib/tools/python3/Modules/_hacl/Hacl_Hash_MD5.h @@ -31,31 +31,32 @@ extern "C" { #endif #include <string.h> +#include "python_hacl_namespaces.h" #include "krml/types.h" #include "krml/lowstar_endianness.h" #include "krml/internal/target.h" #include "Hacl_Streaming_Types.h" -typedef Hacl_Streaming_MD_state_32 Hacl_Streaming_MD5_state; +typedef Hacl_Streaming_MD_state_32 Hacl_Hash_MD5_state_t; -Hacl_Streaming_MD_state_32 *Hacl_Streaming_MD5_legacy_create_in(void); +Hacl_Streaming_MD_state_32 *Hacl_Hash_MD5_malloc(void); -void Hacl_Streaming_MD5_legacy_init(Hacl_Streaming_MD_state_32 *s); +void Hacl_Hash_MD5_reset(Hacl_Streaming_MD_state_32 *state); /** 0 = success, 1 = max length exceeded */ Hacl_Streaming_Types_error_code -Hacl_Streaming_MD5_legacy_update(Hacl_Streaming_MD_state_32 *p, uint8_t *data, uint32_t len); +Hacl_Hash_MD5_update(Hacl_Streaming_MD_state_32 *state, uint8_t *chunk, uint32_t chunk_len); -void Hacl_Streaming_MD5_legacy_finish(Hacl_Streaming_MD_state_32 *p, uint8_t *dst); +void Hacl_Hash_MD5_digest(Hacl_Streaming_MD_state_32 *state, uint8_t *output); -void Hacl_Streaming_MD5_legacy_free(Hacl_Streaming_MD_state_32 *s); +void Hacl_Hash_MD5_free(Hacl_Streaming_MD_state_32 *state); -Hacl_Streaming_MD_state_32 *Hacl_Streaming_MD5_legacy_copy(Hacl_Streaming_MD_state_32 *s0); +Hacl_Streaming_MD_state_32 *Hacl_Hash_MD5_copy(Hacl_Streaming_MD_state_32 *state); -void Hacl_Streaming_MD5_legacy_hash(uint8_t *input, uint32_t input_len, uint8_t *dst); +void Hacl_Hash_MD5_hash(uint8_t *output, uint8_t *input, uint32_t input_len); #if defined(__cplusplus) } diff --git a/contrib/tools/python3/Modules/_hacl/Hacl_Hash_SHA1.c b/contrib/tools/python3/Modules/_hacl/Hacl_Hash_SHA1.c index 5ecb3c0b3a..1a8b09b171 100644 --- a/contrib/tools/python3/Modules/_hacl/Hacl_Hash_SHA1.c +++ b/contrib/tools/python3/Modules/_hacl/Hacl_Hash_SHA1.c @@ -25,19 +25,14 @@ #include "internal/Hacl_Hash_SHA1.h" -static uint32_t -_h0[5U] = - { - (uint32_t)0x67452301U, (uint32_t)0xefcdab89U, (uint32_t)0x98badcfeU, (uint32_t)0x10325476U, - (uint32_t)0xc3d2e1f0U - }; +static uint32_t _h0[5U] = { 0x67452301U, 0xefcdab89U, 0x98badcfeU, 0x10325476U, 0xc3d2e1f0U }; -void Hacl_Hash_Core_SHA1_legacy_init(uint32_t *s) +void Hacl_Hash_SHA1_init(uint32_t *s) { - KRML_MAYBE_FOR5(i, (uint32_t)0U, (uint32_t)5U, (uint32_t)1U, s[i] = _h0[i];); + KRML_MAYBE_FOR5(i, 0U, 5U, 1U, s[i] = _h0[i];); } -static void legacy_update(uint32_t *h, uint8_t *l) +static void update(uint32_t *h, uint8_t *l) { uint32_t ha = h[0U]; uint32_t hb = h[1U]; @@ -45,29 +40,26 @@ static void legacy_update(uint32_t *h, uint8_t *l) uint32_t hd = h[3U]; uint32_t he = h[4U]; uint32_t _w[80U] = { 0U }; - for (uint32_t i = (uint32_t)0U; i < (uint32_t)80U; i++) + for (uint32_t i = 0U; i < 80U; i++) { uint32_t v; - if (i < (uint32_t)16U) + if (i < 16U) { - uint8_t *b = l + i * (uint32_t)4U; + uint8_t *b = l + i * 4U; uint32_t u = load32_be(b); v = u; } else { - uint32_t wmit3 = _w[i - (uint32_t)3U]; - uint32_t wmit8 = _w[i - (uint32_t)8U]; - uint32_t wmit14 = _w[i - (uint32_t)14U]; - uint32_t wmit16 = _w[i - (uint32_t)16U]; - v = - (wmit3 ^ (wmit8 ^ (wmit14 ^ wmit16))) - << (uint32_t)1U - | (wmit3 ^ (wmit8 ^ (wmit14 ^ wmit16))) >> (uint32_t)31U; + uint32_t wmit3 = _w[i - 3U]; + uint32_t wmit8 = _w[i - 8U]; + uint32_t wmit14 = _w[i - 14U]; + uint32_t wmit16 = _w[i - 16U]; + v = (wmit3 ^ (wmit8 ^ (wmit14 ^ wmit16))) << 1U | (wmit3 ^ (wmit8 ^ (wmit14 ^ wmit16))) >> 31U; } _w[i] = v; } - for (uint32_t i = (uint32_t)0U; i < (uint32_t)80U; i++) + for (uint32_t i = 0U; i < 80U; i++) { uint32_t _a = h[0U]; uint32_t _b = h[1U]; @@ -76,11 +68,11 @@ static void legacy_update(uint32_t *h, uint8_t *l) uint32_t _e = h[4U]; uint32_t wmit = _w[i]; uint32_t ite0; - if (i < (uint32_t)20U) + if (i < 20U) { ite0 = (_b & _c) ^ (~_b & _d); } - else if ((uint32_t)39U < i && i < (uint32_t)60U) + else if (39U < i && i < 60U) { ite0 = (_b & _c) ^ ((_b & _d) ^ (_c & _d)); } @@ -89,32 +81,32 @@ static void legacy_update(uint32_t *h, uint8_t *l) ite0 = _b ^ (_c ^ _d); } uint32_t ite; - if (i < (uint32_t)20U) + if (i < 20U) { - ite = (uint32_t)0x5a827999U; + ite = 0x5a827999U; } - else if (i < (uint32_t)40U) + else if (i < 40U) { - ite = (uint32_t)0x6ed9eba1U; + ite = 0x6ed9eba1U; } - else if (i < (uint32_t)60U) + else if (i < 60U) { - ite = (uint32_t)0x8f1bbcdcU; + ite = 0x8f1bbcdcU; } else { - ite = (uint32_t)0xca62c1d6U; + ite = 0xca62c1d6U; } - uint32_t _T = (_a << (uint32_t)5U | _a >> (uint32_t)27U) + ite0 + _e + ite + wmit; + uint32_t _T = (_a << 5U | _a >> 27U) + ite0 + _e + ite + wmit; h[0U] = _T; h[1U] = _a; - h[2U] = _b << (uint32_t)30U | _b >> (uint32_t)2U; + h[2U] = _b << 30U | _b >> 2U; h[3U] = _c; h[4U] = _d; } - for (uint32_t i = (uint32_t)0U; i < (uint32_t)80U; i++) + for (uint32_t i = 0U; i < 80U; i++) { - _w[i] = (uint32_t)0U; + _w[i] = 0U; } uint32_t sta = h[0U]; uint32_t stb = h[1U]; @@ -128,101 +120,69 @@ static void legacy_update(uint32_t *h, uint8_t *l) h[4U] = ste + he; } -static void legacy_pad(uint64_t len, uint8_t *dst) +static void pad(uint64_t len, uint8_t *dst) { uint8_t *dst1 = dst; - dst1[0U] = (uint8_t)0x80U; - uint8_t *dst2 = dst + (uint32_t)1U; - for - (uint32_t - i = (uint32_t)0U; - i - < ((uint32_t)128U - ((uint32_t)9U + (uint32_t)(len % (uint64_t)(uint32_t)64U))) % (uint32_t)64U; - i++) + dst1[0U] = 0x80U; + uint8_t *dst2 = dst + 1U; + for (uint32_t i = 0U; i < (128U - (9U + (uint32_t)(len % (uint64_t)64U))) % 64U; i++) { - dst2[i] = (uint8_t)0U; + dst2[i] = 0U; } - uint8_t - *dst3 = - dst - + - (uint32_t)1U - + - ((uint32_t)128U - ((uint32_t)9U + (uint32_t)(len % (uint64_t)(uint32_t)64U))) - % (uint32_t)64U; - store64_be(dst3, len << (uint32_t)3U); + uint8_t *dst3 = dst + 1U + (128U - (9U + (uint32_t)(len % (uint64_t)64U))) % 64U; + store64_be(dst3, len << 3U); } -void Hacl_Hash_Core_SHA1_legacy_finish(uint32_t *s, uint8_t *dst) +void Hacl_Hash_SHA1_finish(uint32_t *s, uint8_t *dst) { - KRML_MAYBE_FOR5(i, - (uint32_t)0U, - (uint32_t)5U, - (uint32_t)1U, - store32_be(dst + i * (uint32_t)4U, s[i]);); + KRML_MAYBE_FOR5(i, 0U, 5U, 1U, store32_be(dst + i * 4U, s[i]);); } -void Hacl_Hash_SHA1_legacy_update_multi(uint32_t *s, uint8_t *blocks, uint32_t n_blocks) +void Hacl_Hash_SHA1_update_multi(uint32_t *s, uint8_t *blocks, uint32_t n_blocks) { - for (uint32_t i = (uint32_t)0U; i < n_blocks; i++) + for (uint32_t i = 0U; i < n_blocks; i++) { - uint32_t sz = (uint32_t)64U; + uint32_t sz = 64U; uint8_t *block = blocks + sz * i; - legacy_update(s, block); + update(s, block); } } void -Hacl_Hash_SHA1_legacy_update_last( - uint32_t *s, - uint64_t prev_len, - uint8_t *input, - uint32_t input_len -) +Hacl_Hash_SHA1_update_last(uint32_t *s, uint64_t prev_len, uint8_t *input, uint32_t input_len) { - uint32_t blocks_n = input_len / (uint32_t)64U; - uint32_t blocks_len = blocks_n * (uint32_t)64U; + uint32_t blocks_n = input_len / 64U; + uint32_t blocks_len = blocks_n * 64U; uint8_t *blocks = input; uint32_t rest_len = input_len - blocks_len; uint8_t *rest = input + blocks_len; - Hacl_Hash_SHA1_legacy_update_multi(s, blocks, blocks_n); + Hacl_Hash_SHA1_update_multi(s, blocks, blocks_n); uint64_t total_input_len = prev_len + (uint64_t)input_len; - uint32_t - pad_len = - (uint32_t)1U - + - ((uint32_t)128U - ((uint32_t)9U + (uint32_t)(total_input_len % (uint64_t)(uint32_t)64U))) - % (uint32_t)64U - + (uint32_t)8U; + uint32_t pad_len = 1U + (128U - (9U + (uint32_t)(total_input_len % (uint64_t)64U))) % 64U + 8U; uint32_t tmp_len = rest_len + pad_len; uint8_t tmp_twoblocks[128U] = { 0U }; uint8_t *tmp = tmp_twoblocks; uint8_t *tmp_rest = tmp; uint8_t *tmp_pad = tmp + rest_len; memcpy(tmp_rest, rest, rest_len * sizeof (uint8_t)); - legacy_pad(total_input_len, tmp_pad); - Hacl_Hash_SHA1_legacy_update_multi(s, tmp, tmp_len / (uint32_t)64U); + pad(total_input_len, tmp_pad); + Hacl_Hash_SHA1_update_multi(s, tmp, tmp_len / 64U); } -void Hacl_Hash_SHA1_legacy_hash(uint8_t *input, uint32_t input_len, uint8_t *dst) +void Hacl_Hash_SHA1_hash_oneshot(uint8_t *output, uint8_t *input, uint32_t input_len) { - uint32_t - s[5U] = - { - (uint32_t)0x67452301U, (uint32_t)0xefcdab89U, (uint32_t)0x98badcfeU, (uint32_t)0x10325476U, - (uint32_t)0xc3d2e1f0U - }; - uint32_t blocks_n0 = input_len / (uint32_t)64U; + uint32_t s[5U] = { 0x67452301U, 0xefcdab89U, 0x98badcfeU, 0x10325476U, 0xc3d2e1f0U }; + uint32_t blocks_n0 = input_len / 64U; uint32_t blocks_n1; - if (input_len % (uint32_t)64U == (uint32_t)0U && blocks_n0 > (uint32_t)0U) + if (input_len % 64U == 0U && blocks_n0 > 0U) { - blocks_n1 = blocks_n0 - (uint32_t)1U; + blocks_n1 = blocks_n0 - 1U; } else { blocks_n1 = blocks_n0; } - uint32_t blocks_len0 = blocks_n1 * (uint32_t)64U; + uint32_t blocks_len0 = blocks_n1 * 64U; uint8_t *blocks0 = input; uint32_t rest_len0 = input_len - blocks_len0; uint8_t *rest0 = input + blocks_len0; @@ -231,75 +191,75 @@ void Hacl_Hash_SHA1_legacy_hash(uint8_t *input, uint32_t input_len, uint8_t *dst uint8_t *blocks = blocks0; uint32_t rest_len = rest_len0; uint8_t *rest = rest0; - Hacl_Hash_SHA1_legacy_update_multi(s, blocks, blocks_n); - Hacl_Hash_SHA1_legacy_update_last(s, (uint64_t)blocks_len, rest, rest_len); - Hacl_Hash_Core_SHA1_legacy_finish(s, dst); + Hacl_Hash_SHA1_update_multi(s, blocks, blocks_n); + Hacl_Hash_SHA1_update_last(s, (uint64_t)blocks_len, rest, rest_len); + Hacl_Hash_SHA1_finish(s, output); } -Hacl_Streaming_MD_state_32 *Hacl_Streaming_SHA1_legacy_create_in(void) +Hacl_Streaming_MD_state_32 *Hacl_Hash_SHA1_malloc(void) { - uint8_t *buf = (uint8_t *)KRML_HOST_CALLOC((uint32_t)64U, sizeof (uint8_t)); - uint32_t *block_state = (uint32_t *)KRML_HOST_CALLOC((uint32_t)5U, sizeof (uint32_t)); + uint8_t *buf = (uint8_t *)KRML_HOST_CALLOC(64U, sizeof (uint8_t)); + uint32_t *block_state = (uint32_t *)KRML_HOST_CALLOC(5U, sizeof (uint32_t)); Hacl_Streaming_MD_state_32 - s = { .block_state = block_state, .buf = buf, .total_len = (uint64_t)(uint32_t)0U }; + s = { .block_state = block_state, .buf = buf, .total_len = (uint64_t)0U }; Hacl_Streaming_MD_state_32 *p = (Hacl_Streaming_MD_state_32 *)KRML_HOST_MALLOC(sizeof (Hacl_Streaming_MD_state_32)); p[0U] = s; - Hacl_Hash_Core_SHA1_legacy_init(block_state); + Hacl_Hash_SHA1_init(block_state); return p; } -void Hacl_Streaming_SHA1_legacy_init(Hacl_Streaming_MD_state_32 *s) +void Hacl_Hash_SHA1_reset(Hacl_Streaming_MD_state_32 *state) { - Hacl_Streaming_MD_state_32 scrut = *s; + Hacl_Streaming_MD_state_32 scrut = *state; uint8_t *buf = scrut.buf; uint32_t *block_state = scrut.block_state; - Hacl_Hash_Core_SHA1_legacy_init(block_state); + Hacl_Hash_SHA1_init(block_state); Hacl_Streaming_MD_state_32 - tmp = { .block_state = block_state, .buf = buf, .total_len = (uint64_t)(uint32_t)0U }; - s[0U] = tmp; + tmp = { .block_state = block_state, .buf = buf, .total_len = (uint64_t)0U }; + state[0U] = tmp; } /** 0 = success, 1 = max length exceeded */ Hacl_Streaming_Types_error_code -Hacl_Streaming_SHA1_legacy_update(Hacl_Streaming_MD_state_32 *p, uint8_t *data, uint32_t len) +Hacl_Hash_SHA1_update(Hacl_Streaming_MD_state_32 *state, uint8_t *chunk, uint32_t chunk_len) { - Hacl_Streaming_MD_state_32 s = *p; + Hacl_Streaming_MD_state_32 s = *state; uint64_t total_len = s.total_len; - if ((uint64_t)len > (uint64_t)2305843009213693951U - total_len) + if ((uint64_t)chunk_len > 2305843009213693951ULL - total_len) { return Hacl_Streaming_Types_MaximumLengthExceeded; } uint32_t sz; - if (total_len % (uint64_t)(uint32_t)64U == (uint64_t)0U && total_len > (uint64_t)0U) + if (total_len % (uint64_t)64U == 0ULL && total_len > 0ULL) { - sz = (uint32_t)64U; + sz = 64U; } else { - sz = (uint32_t)(total_len % (uint64_t)(uint32_t)64U); + sz = (uint32_t)(total_len % (uint64_t)64U); } - if (len <= (uint32_t)64U - sz) + if (chunk_len <= 64U - sz) { - Hacl_Streaming_MD_state_32 s1 = *p; + Hacl_Streaming_MD_state_32 s1 = *state; uint32_t *block_state1 = s1.block_state; uint8_t *buf = s1.buf; uint64_t total_len1 = s1.total_len; uint32_t sz1; - if (total_len1 % (uint64_t)(uint32_t)64U == (uint64_t)0U && total_len1 > (uint64_t)0U) + if (total_len1 % (uint64_t)64U == 0ULL && total_len1 > 0ULL) { - sz1 = (uint32_t)64U; + sz1 = 64U; } else { - sz1 = (uint32_t)(total_len1 % (uint64_t)(uint32_t)64U); + sz1 = (uint32_t)(total_len1 % (uint64_t)64U); } uint8_t *buf2 = buf + sz1; - memcpy(buf2, data, len * sizeof (uint8_t)); - uint64_t total_len2 = total_len1 + (uint64_t)len; - *p + memcpy(buf2, chunk, chunk_len * sizeof (uint8_t)); + uint64_t total_len2 = total_len1 + (uint64_t)chunk_len; + *state = ( (Hacl_Streaming_MD_state_32){ @@ -309,74 +269,74 @@ Hacl_Streaming_SHA1_legacy_update(Hacl_Streaming_MD_state_32 *p, uint8_t *data, } ); } - else if (sz == (uint32_t)0U) + else if (sz == 0U) { - Hacl_Streaming_MD_state_32 s1 = *p; + Hacl_Streaming_MD_state_32 s1 = *state; uint32_t *block_state1 = s1.block_state; uint8_t *buf = s1.buf; uint64_t total_len1 = s1.total_len; uint32_t sz1; - if (total_len1 % (uint64_t)(uint32_t)64U == (uint64_t)0U && total_len1 > (uint64_t)0U) + if (total_len1 % (uint64_t)64U == 0ULL && total_len1 > 0ULL) { - sz1 = (uint32_t)64U; + sz1 = 64U; } else { - sz1 = (uint32_t)(total_len1 % (uint64_t)(uint32_t)64U); + sz1 = (uint32_t)(total_len1 % (uint64_t)64U); } - if (!(sz1 == (uint32_t)0U)) + if (!(sz1 == 0U)) { - Hacl_Hash_SHA1_legacy_update_multi(block_state1, buf, (uint32_t)1U); + Hacl_Hash_SHA1_update_multi(block_state1, buf, 1U); } uint32_t ite; - if ((uint64_t)len % (uint64_t)(uint32_t)64U == (uint64_t)0U && (uint64_t)len > (uint64_t)0U) + if ((uint64_t)chunk_len % (uint64_t)64U == 0ULL && (uint64_t)chunk_len > 0ULL) { - ite = (uint32_t)64U; + ite = 64U; } else { - ite = (uint32_t)((uint64_t)len % (uint64_t)(uint32_t)64U); + ite = (uint32_t)((uint64_t)chunk_len % (uint64_t)64U); } - uint32_t n_blocks = (len - ite) / (uint32_t)64U; - uint32_t data1_len = n_blocks * (uint32_t)64U; - uint32_t data2_len = len - data1_len; - uint8_t *data1 = data; - uint8_t *data2 = data + data1_len; - Hacl_Hash_SHA1_legacy_update_multi(block_state1, data1, data1_len / (uint32_t)64U); + uint32_t n_blocks = (chunk_len - ite) / 64U; + uint32_t data1_len = n_blocks * 64U; + uint32_t data2_len = chunk_len - data1_len; + uint8_t *data1 = chunk; + uint8_t *data2 = chunk + data1_len; + Hacl_Hash_SHA1_update_multi(block_state1, data1, data1_len / 64U); uint8_t *dst = buf; memcpy(dst, data2, data2_len * sizeof (uint8_t)); - *p + *state = ( (Hacl_Streaming_MD_state_32){ .block_state = block_state1, .buf = buf, - .total_len = total_len1 + (uint64_t)len + .total_len = total_len1 + (uint64_t)chunk_len } ); } else { - uint32_t diff = (uint32_t)64U - sz; - uint8_t *data1 = data; - uint8_t *data2 = data + diff; - Hacl_Streaming_MD_state_32 s1 = *p; + uint32_t diff = 64U - sz; + uint8_t *chunk1 = chunk; + uint8_t *chunk2 = chunk + diff; + Hacl_Streaming_MD_state_32 s1 = *state; uint32_t *block_state10 = s1.block_state; uint8_t *buf0 = s1.buf; uint64_t total_len10 = s1.total_len; uint32_t sz10; - if (total_len10 % (uint64_t)(uint32_t)64U == (uint64_t)0U && total_len10 > (uint64_t)0U) + if (total_len10 % (uint64_t)64U == 0ULL && total_len10 > 0ULL) { - sz10 = (uint32_t)64U; + sz10 = 64U; } else { - sz10 = (uint32_t)(total_len10 % (uint64_t)(uint32_t)64U); + sz10 = (uint32_t)(total_len10 % (uint64_t)64U); } uint8_t *buf2 = buf0 + sz10; - memcpy(buf2, data1, diff * sizeof (uint8_t)); + memcpy(buf2, chunk1, diff * sizeof (uint8_t)); uint64_t total_len2 = total_len10 + (uint64_t)diff; - *p + *state = ( (Hacl_Streaming_MD_state_32){ @@ -385,114 +345,109 @@ Hacl_Streaming_SHA1_legacy_update(Hacl_Streaming_MD_state_32 *p, uint8_t *data, .total_len = total_len2 } ); - Hacl_Streaming_MD_state_32 s10 = *p; + Hacl_Streaming_MD_state_32 s10 = *state; uint32_t *block_state1 = s10.block_state; uint8_t *buf = s10.buf; uint64_t total_len1 = s10.total_len; uint32_t sz1; - if (total_len1 % (uint64_t)(uint32_t)64U == (uint64_t)0U && total_len1 > (uint64_t)0U) + if (total_len1 % (uint64_t)64U == 0ULL && total_len1 > 0ULL) { - sz1 = (uint32_t)64U; + sz1 = 64U; } else { - sz1 = (uint32_t)(total_len1 % (uint64_t)(uint32_t)64U); + sz1 = (uint32_t)(total_len1 % (uint64_t)64U); } - if (!(sz1 == (uint32_t)0U)) + if (!(sz1 == 0U)) { - Hacl_Hash_SHA1_legacy_update_multi(block_state1, buf, (uint32_t)1U); + Hacl_Hash_SHA1_update_multi(block_state1, buf, 1U); } uint32_t ite; if - ( - (uint64_t)(len - diff) - % (uint64_t)(uint32_t)64U - == (uint64_t)0U - && (uint64_t)(len - diff) > (uint64_t)0U - ) + ((uint64_t)(chunk_len - diff) % (uint64_t)64U == 0ULL && (uint64_t)(chunk_len - diff) > 0ULL) { - ite = (uint32_t)64U; + ite = 64U; } else { - ite = (uint32_t)((uint64_t)(len - diff) % (uint64_t)(uint32_t)64U); + ite = (uint32_t)((uint64_t)(chunk_len - diff) % (uint64_t)64U); } - uint32_t n_blocks = (len - diff - ite) / (uint32_t)64U; - uint32_t data1_len = n_blocks * (uint32_t)64U; - uint32_t data2_len = len - diff - data1_len; - uint8_t *data11 = data2; - uint8_t *data21 = data2 + data1_len; - Hacl_Hash_SHA1_legacy_update_multi(block_state1, data11, data1_len / (uint32_t)64U); + uint32_t n_blocks = (chunk_len - diff - ite) / 64U; + uint32_t data1_len = n_blocks * 64U; + uint32_t data2_len = chunk_len - diff - data1_len; + uint8_t *data1 = chunk2; + uint8_t *data2 = chunk2 + data1_len; + Hacl_Hash_SHA1_update_multi(block_state1, data1, data1_len / 64U); uint8_t *dst = buf; - memcpy(dst, data21, data2_len * sizeof (uint8_t)); - *p + memcpy(dst, data2, data2_len * sizeof (uint8_t)); + *state = ( (Hacl_Streaming_MD_state_32){ .block_state = block_state1, .buf = buf, - .total_len = total_len1 + (uint64_t)(len - diff) + .total_len = total_len1 + (uint64_t)(chunk_len - diff) } ); } return Hacl_Streaming_Types_Success; } -void Hacl_Streaming_SHA1_legacy_finish(Hacl_Streaming_MD_state_32 *p, uint8_t *dst) +void Hacl_Hash_SHA1_digest(Hacl_Streaming_MD_state_32 *state, uint8_t *output) { - Hacl_Streaming_MD_state_32 scrut = *p; + Hacl_Streaming_MD_state_32 scrut = *state; uint32_t *block_state = scrut.block_state; uint8_t *buf_ = scrut.buf; uint64_t total_len = scrut.total_len; uint32_t r; - if (total_len % (uint64_t)(uint32_t)64U == (uint64_t)0U && total_len > (uint64_t)0U) + if (total_len % (uint64_t)64U == 0ULL && total_len > 0ULL) { - r = (uint32_t)64U; + r = 64U; } else { - r = (uint32_t)(total_len % (uint64_t)(uint32_t)64U); + r = (uint32_t)(total_len % (uint64_t)64U); } uint8_t *buf_1 = buf_; uint32_t tmp_block_state[5U] = { 0U }; - memcpy(tmp_block_state, block_state, (uint32_t)5U * sizeof (uint32_t)); + memcpy(tmp_block_state, block_state, 5U * sizeof (uint32_t)); uint32_t ite; - if (r % (uint32_t)64U == (uint32_t)0U && r > (uint32_t)0U) + if (r % 64U == 0U && r > 0U) { - ite = (uint32_t)64U; + ite = 64U; } else { - ite = r % (uint32_t)64U; + ite = r % 64U; } uint8_t *buf_last = buf_1 + r - ite; uint8_t *buf_multi = buf_1; - Hacl_Hash_SHA1_legacy_update_multi(tmp_block_state, buf_multi, (uint32_t)0U); + Hacl_Hash_SHA1_update_multi(tmp_block_state, buf_multi, 0U); uint64_t prev_len_last = total_len - (uint64_t)r; - Hacl_Hash_SHA1_legacy_update_last(tmp_block_state, prev_len_last, buf_last, r); - Hacl_Hash_Core_SHA1_legacy_finish(tmp_block_state, dst); + Hacl_Hash_SHA1_update_last(tmp_block_state, prev_len_last, buf_last, r); + Hacl_Hash_SHA1_finish(tmp_block_state, output); } -void Hacl_Streaming_SHA1_legacy_free(Hacl_Streaming_MD_state_32 *s) +void Hacl_Hash_SHA1_free(Hacl_Streaming_MD_state_32 *state) { - Hacl_Streaming_MD_state_32 scrut = *s; + Hacl_Streaming_MD_state_32 scrut = *state; uint8_t *buf = scrut.buf; uint32_t *block_state = scrut.block_state; KRML_HOST_FREE(block_state); KRML_HOST_FREE(buf); - KRML_HOST_FREE(s); + KRML_HOST_FREE(state); } -Hacl_Streaming_MD_state_32 *Hacl_Streaming_SHA1_legacy_copy(Hacl_Streaming_MD_state_32 *s0) +Hacl_Streaming_MD_state_32 *Hacl_Hash_SHA1_copy(Hacl_Streaming_MD_state_32 *state) { - Hacl_Streaming_MD_state_32 scrut = *s0; + Hacl_Streaming_MD_state_32 scrut = *state; uint32_t *block_state0 = scrut.block_state; uint8_t *buf0 = scrut.buf; uint64_t total_len0 = scrut.total_len; - uint8_t *buf = (uint8_t *)KRML_HOST_CALLOC((uint32_t)64U, sizeof (uint8_t)); - memcpy(buf, buf0, (uint32_t)64U * sizeof (uint8_t)); - uint32_t *block_state = (uint32_t *)KRML_HOST_CALLOC((uint32_t)5U, sizeof (uint32_t)); - memcpy(block_state, block_state0, (uint32_t)5U * sizeof (uint32_t)); + uint8_t *buf = (uint8_t *)KRML_HOST_CALLOC(64U, sizeof (uint8_t)); + memcpy(buf, buf0, 64U * sizeof (uint8_t)); + uint32_t *block_state = (uint32_t *)KRML_HOST_CALLOC(5U, sizeof (uint32_t)); + memcpy(block_state, block_state0, 5U * sizeof (uint32_t)); Hacl_Streaming_MD_state_32 s = { .block_state = block_state, .buf = buf, .total_len = total_len0 }; Hacl_Streaming_MD_state_32 @@ -501,8 +456,8 @@ Hacl_Streaming_MD_state_32 *Hacl_Streaming_SHA1_legacy_copy(Hacl_Streaming_MD_st return p; } -void Hacl_Streaming_SHA1_legacy_hash(uint8_t *input, uint32_t input_len, uint8_t *dst) +void Hacl_Hash_SHA1_hash(uint8_t *output, uint8_t *input, uint32_t input_len) { - Hacl_Hash_SHA1_legacy_hash(input, input_len, dst); + Hacl_Hash_SHA1_hash_oneshot(output, input, input_len); } diff --git a/contrib/tools/python3/Modules/_hacl/Hacl_Hash_SHA1.h b/contrib/tools/python3/Modules/_hacl/Hacl_Hash_SHA1.h index dc50aa6f6d..ad1e8e72a7 100644 --- a/contrib/tools/python3/Modules/_hacl/Hacl_Hash_SHA1.h +++ b/contrib/tools/python3/Modules/_hacl/Hacl_Hash_SHA1.h @@ -31,31 +31,32 @@ extern "C" { #endif #include <string.h> +#include "python_hacl_namespaces.h" #include "krml/types.h" #include "krml/lowstar_endianness.h" #include "krml/internal/target.h" #include "Hacl_Streaming_Types.h" -typedef Hacl_Streaming_MD_state_32 Hacl_Streaming_SHA1_state; +typedef Hacl_Streaming_MD_state_32 Hacl_Hash_SHA1_state_t; -Hacl_Streaming_MD_state_32 *Hacl_Streaming_SHA1_legacy_create_in(void); +Hacl_Streaming_MD_state_32 *Hacl_Hash_SHA1_malloc(void); -void Hacl_Streaming_SHA1_legacy_init(Hacl_Streaming_MD_state_32 *s); +void Hacl_Hash_SHA1_reset(Hacl_Streaming_MD_state_32 *state); /** 0 = success, 1 = max length exceeded */ Hacl_Streaming_Types_error_code -Hacl_Streaming_SHA1_legacy_update(Hacl_Streaming_MD_state_32 *p, uint8_t *data, uint32_t len); +Hacl_Hash_SHA1_update(Hacl_Streaming_MD_state_32 *state, uint8_t *chunk, uint32_t chunk_len); -void Hacl_Streaming_SHA1_legacy_finish(Hacl_Streaming_MD_state_32 *p, uint8_t *dst); +void Hacl_Hash_SHA1_digest(Hacl_Streaming_MD_state_32 *state, uint8_t *output); -void Hacl_Streaming_SHA1_legacy_free(Hacl_Streaming_MD_state_32 *s); +void Hacl_Hash_SHA1_free(Hacl_Streaming_MD_state_32 *state); -Hacl_Streaming_MD_state_32 *Hacl_Streaming_SHA1_legacy_copy(Hacl_Streaming_MD_state_32 *s0); +Hacl_Streaming_MD_state_32 *Hacl_Hash_SHA1_copy(Hacl_Streaming_MD_state_32 *state); -void Hacl_Streaming_SHA1_legacy_hash(uint8_t *input, uint32_t input_len, uint8_t *dst); +void Hacl_Hash_SHA1_hash(uint8_t *output, uint8_t *input, uint32_t input_len); #if defined(__cplusplus) } diff --git a/contrib/tools/python3/Modules/_hacl/Hacl_Hash_SHA2.c b/contrib/tools/python3/Modules/_hacl/Hacl_Hash_SHA2.c index 08e3f7edbf..4b6af5fc78 100644 --- a/contrib/tools/python3/Modules/_hacl/Hacl_Hash_SHA2.c +++ b/contrib/tools/python3/Modules/_hacl/Hacl_Hash_SHA2.c @@ -27,14 +27,14 @@ -void Hacl_SHA2_Scalar32_sha256_init(uint32_t *hash) +void Hacl_Hash_SHA2_sha256_init(uint32_t *hash) { KRML_MAYBE_FOR8(i, - (uint32_t)0U, - (uint32_t)8U, - (uint32_t)1U, + 0U, + 8U, + 1U, uint32_t *os = hash; - uint32_t x = Hacl_Impl_SHA2_Generic_h256[i]; + uint32_t x = Hacl_Hash_SHA2_h256[i]; os[i] = x;); } @@ -42,49 +42,49 @@ static inline void sha256_update(uint8_t *b, uint32_t *hash) { uint32_t hash_old[8U] = { 0U }; uint32_t ws[16U] = { 0U }; - memcpy(hash_old, hash, (uint32_t)8U * sizeof (uint32_t)); + memcpy(hash_old, hash, 8U * sizeof (uint32_t)); uint8_t *b10 = b; uint32_t u = load32_be(b10); ws[0U] = u; - uint32_t u0 = load32_be(b10 + (uint32_t)4U); + uint32_t u0 = load32_be(b10 + 4U); ws[1U] = u0; - uint32_t u1 = load32_be(b10 + (uint32_t)8U); + uint32_t u1 = load32_be(b10 + 8U); ws[2U] = u1; - uint32_t u2 = load32_be(b10 + (uint32_t)12U); + uint32_t u2 = load32_be(b10 + 12U); ws[3U] = u2; - uint32_t u3 = load32_be(b10 + (uint32_t)16U); + uint32_t u3 = load32_be(b10 + 16U); ws[4U] = u3; - uint32_t u4 = load32_be(b10 + (uint32_t)20U); + uint32_t u4 = load32_be(b10 + 20U); ws[5U] = u4; - uint32_t u5 = load32_be(b10 + (uint32_t)24U); + uint32_t u5 = load32_be(b10 + 24U); ws[6U] = u5; - uint32_t u6 = load32_be(b10 + (uint32_t)28U); + uint32_t u6 = load32_be(b10 + 28U); ws[7U] = u6; - uint32_t u7 = load32_be(b10 + (uint32_t)32U); + uint32_t u7 = load32_be(b10 + 32U); ws[8U] = u7; - uint32_t u8 = load32_be(b10 + (uint32_t)36U); + uint32_t u8 = load32_be(b10 + 36U); ws[9U] = u8; - uint32_t u9 = load32_be(b10 + (uint32_t)40U); + uint32_t u9 = load32_be(b10 + 40U); ws[10U] = u9; - uint32_t u10 = load32_be(b10 + (uint32_t)44U); + uint32_t u10 = load32_be(b10 + 44U); ws[11U] = u10; - uint32_t u11 = load32_be(b10 + (uint32_t)48U); + uint32_t u11 = load32_be(b10 + 48U); ws[12U] = u11; - uint32_t u12 = load32_be(b10 + (uint32_t)52U); + uint32_t u12 = load32_be(b10 + 52U); ws[13U] = u12; - uint32_t u13 = load32_be(b10 + (uint32_t)56U); + uint32_t u13 = load32_be(b10 + 56U); ws[14U] = u13; - uint32_t u14 = load32_be(b10 + (uint32_t)60U); + uint32_t u14 = load32_be(b10 + 60U); ws[15U] = u14; KRML_MAYBE_FOR4(i0, - (uint32_t)0U, - (uint32_t)4U, - (uint32_t)1U, + 0U, + 4U, + 1U, KRML_MAYBE_FOR16(i, - (uint32_t)0U, - (uint32_t)16U, - (uint32_t)1U, - uint32_t k_t = Hacl_Impl_SHA2_Generic_k224_256[(uint32_t)16U * i0 + i]; + 0U, + 16U, + 1U, + uint32_t k_t = Hacl_Hash_SHA2_k224_256[16U * i0 + i]; uint32_t ws_t = ws[i]; uint32_t a0 = hash[0U]; uint32_t b0 = hash[1U]; @@ -98,20 +98,13 @@ static inline void sha256_update(uint8_t *b, uint32_t *hash) uint32_t t1 = h02 - + - ((e0 << (uint32_t)26U | e0 >> (uint32_t)6U) - ^ - ((e0 << (uint32_t)21U | e0 >> (uint32_t)11U) - ^ (e0 << (uint32_t)7U | e0 >> (uint32_t)25U))) + + ((e0 << 26U | e0 >> 6U) ^ ((e0 << 21U | e0 >> 11U) ^ (e0 << 7U | e0 >> 25U))) + ((e0 & f0) ^ (~e0 & g0)) + k_e_t + ws_t; uint32_t t2 = - ((a0 << (uint32_t)30U | a0 >> (uint32_t)2U) - ^ - ((a0 << (uint32_t)19U | a0 >> (uint32_t)13U) - ^ (a0 << (uint32_t)10U | a0 >> (uint32_t)22U))) + ((a0 << 30U | a0 >> 2U) ^ ((a0 << 19U | a0 >> 13U) ^ (a0 << 10U | a0 >> 22U))) + ((a0 & b0) ^ ((a0 & c0) ^ (b0 & c0))); uint32_t a1 = t1 + t2; uint32_t b1 = a0; @@ -129,74 +122,63 @@ static inline void sha256_update(uint8_t *b, uint32_t *hash) hash[5U] = f1; hash[6U] = g1; hash[7U] = h12;); - if (i0 < (uint32_t)3U) + if (i0 < 3U) { KRML_MAYBE_FOR16(i, - (uint32_t)0U, - (uint32_t)16U, - (uint32_t)1U, + 0U, + 16U, + 1U, uint32_t t16 = ws[i]; - uint32_t t15 = ws[(i + (uint32_t)1U) % (uint32_t)16U]; - uint32_t t7 = ws[(i + (uint32_t)9U) % (uint32_t)16U]; - uint32_t t2 = ws[(i + (uint32_t)14U) % (uint32_t)16U]; - uint32_t - s1 = - (t2 << (uint32_t)15U | t2 >> (uint32_t)17U) - ^ ((t2 << (uint32_t)13U | t2 >> (uint32_t)19U) ^ t2 >> (uint32_t)10U); - uint32_t - s0 = - (t15 << (uint32_t)25U | t15 >> (uint32_t)7U) - ^ ((t15 << (uint32_t)14U | t15 >> (uint32_t)18U) ^ t15 >> (uint32_t)3U); + uint32_t t15 = ws[(i + 1U) % 16U]; + uint32_t t7 = ws[(i + 9U) % 16U]; + uint32_t t2 = ws[(i + 14U) % 16U]; + uint32_t s1 = (t2 << 15U | t2 >> 17U) ^ ((t2 << 13U | t2 >> 19U) ^ t2 >> 10U); + uint32_t s0 = (t15 << 25U | t15 >> 7U) ^ ((t15 << 14U | t15 >> 18U) ^ t15 >> 3U); ws[i] = s1 + t7 + s0 + t16;); }); KRML_MAYBE_FOR8(i, - (uint32_t)0U, - (uint32_t)8U, - (uint32_t)1U, + 0U, + 8U, + 1U, uint32_t *os = hash; uint32_t x = hash[i] + hash_old[i]; os[i] = x;); } -void Hacl_SHA2_Scalar32_sha256_update_nblocks(uint32_t len, uint8_t *b, uint32_t *st) +void Hacl_Hash_SHA2_sha256_update_nblocks(uint32_t len, uint8_t *b, uint32_t *st) { - uint32_t blocks = len / (uint32_t)64U; - for (uint32_t i = (uint32_t)0U; i < blocks; i++) + uint32_t blocks = len / 64U; + for (uint32_t i = 0U; i < blocks; i++) { uint8_t *b0 = b; - uint8_t *mb = b0 + i * (uint32_t)64U; + uint8_t *mb = b0 + i * 64U; sha256_update(mb, st); } } void -Hacl_SHA2_Scalar32_sha256_update_last( - uint64_t totlen, - uint32_t len, - uint8_t *b, - uint32_t *hash -) +Hacl_Hash_SHA2_sha256_update_last(uint64_t totlen, uint32_t len, uint8_t *b, uint32_t *hash) { uint32_t blocks; - if (len + (uint32_t)8U + (uint32_t)1U <= (uint32_t)64U) + if (len + 8U + 1U <= 64U) { - blocks = (uint32_t)1U; + blocks = 1U; } else { - blocks = (uint32_t)2U; + blocks = 2U; } - uint32_t fin = blocks * (uint32_t)64U; + uint32_t fin = blocks * 64U; uint8_t last[128U] = { 0U }; uint8_t totlen_buf[8U] = { 0U }; - uint64_t total_len_bits = totlen << (uint32_t)3U; + uint64_t total_len_bits = totlen << 3U; store64_be(totlen_buf, total_len_bits); uint8_t *b0 = b; memcpy(last, b0, len * sizeof (uint8_t)); - last[len] = (uint8_t)0x80U; - memcpy(last + fin - (uint32_t)8U, totlen_buf, (uint32_t)8U * sizeof (uint8_t)); + last[len] = 0x80U; + memcpy(last + fin - 8U, totlen_buf, 8U * sizeof (uint8_t)); uint8_t *last00 = last; - uint8_t *last10 = last + (uint32_t)64U; + uint8_t *last10 = last + 64U; uint8_t *l0 = last00; uint8_t *l1 = last10; uint8_t *lb0 = l0; @@ -204,65 +186,56 @@ Hacl_SHA2_Scalar32_sha256_update_last( uint8_t *last0 = lb0; uint8_t *last1 = lb1; sha256_update(last0, hash); - if (blocks > (uint32_t)1U) + if (blocks > 1U) { sha256_update(last1, hash); return; } } -void Hacl_SHA2_Scalar32_sha256_finish(uint32_t *st, uint8_t *h) +void Hacl_Hash_SHA2_sha256_finish(uint32_t *st, uint8_t *h) { uint8_t hbuf[32U] = { 0U }; - KRML_MAYBE_FOR8(i, - (uint32_t)0U, - (uint32_t)8U, - (uint32_t)1U, - store32_be(hbuf + i * (uint32_t)4U, st[i]);); - memcpy(h, hbuf, (uint32_t)32U * sizeof (uint8_t)); + KRML_MAYBE_FOR8(i, 0U, 8U, 1U, store32_be(hbuf + i * 4U, st[i]);); + memcpy(h, hbuf, 32U * sizeof (uint8_t)); } -void Hacl_SHA2_Scalar32_sha224_init(uint32_t *hash) +void Hacl_Hash_SHA2_sha224_init(uint32_t *hash) { KRML_MAYBE_FOR8(i, - (uint32_t)0U, - (uint32_t)8U, - (uint32_t)1U, + 0U, + 8U, + 1U, uint32_t *os = hash; - uint32_t x = Hacl_Impl_SHA2_Generic_h224[i]; + uint32_t x = Hacl_Hash_SHA2_h224[i]; os[i] = x;); } static inline void sha224_update_nblocks(uint32_t len, uint8_t *b, uint32_t *st) { - Hacl_SHA2_Scalar32_sha256_update_nblocks(len, b, st); + Hacl_Hash_SHA2_sha256_update_nblocks(len, b, st); } -void -Hacl_SHA2_Scalar32_sha224_update_last(uint64_t totlen, uint32_t len, uint8_t *b, uint32_t *st) +void Hacl_Hash_SHA2_sha224_update_last(uint64_t totlen, uint32_t len, uint8_t *b, uint32_t *st) { - Hacl_SHA2_Scalar32_sha256_update_last(totlen, len, b, st); + Hacl_Hash_SHA2_sha256_update_last(totlen, len, b, st); } -void Hacl_SHA2_Scalar32_sha224_finish(uint32_t *st, uint8_t *h) +void Hacl_Hash_SHA2_sha224_finish(uint32_t *st, uint8_t *h) { uint8_t hbuf[32U] = { 0U }; - KRML_MAYBE_FOR8(i, - (uint32_t)0U, - (uint32_t)8U, - (uint32_t)1U, - store32_be(hbuf + i * (uint32_t)4U, st[i]);); - memcpy(h, hbuf, (uint32_t)28U * sizeof (uint8_t)); + KRML_MAYBE_FOR8(i, 0U, 8U, 1U, store32_be(hbuf + i * 4U, st[i]);); + memcpy(h, hbuf, 28U * sizeof (uint8_t)); } -void Hacl_SHA2_Scalar32_sha512_init(uint64_t *hash) +void Hacl_Hash_SHA2_sha512_init(uint64_t *hash) { KRML_MAYBE_FOR8(i, - (uint32_t)0U, - (uint32_t)8U, - (uint32_t)1U, + 0U, + 8U, + 1U, uint64_t *os = hash; - uint64_t x = Hacl_Impl_SHA2_Generic_h512[i]; + uint64_t x = Hacl_Hash_SHA2_h512[i]; os[i] = x;); } @@ -270,49 +243,49 @@ static inline void sha512_update(uint8_t *b, uint64_t *hash) { uint64_t hash_old[8U] = { 0U }; uint64_t ws[16U] = { 0U }; - memcpy(hash_old, hash, (uint32_t)8U * sizeof (uint64_t)); + memcpy(hash_old, hash, 8U * sizeof (uint64_t)); uint8_t *b10 = b; uint64_t u = load64_be(b10); ws[0U] = u; - uint64_t u0 = load64_be(b10 + (uint32_t)8U); + uint64_t u0 = load64_be(b10 + 8U); ws[1U] = u0; - uint64_t u1 = load64_be(b10 + (uint32_t)16U); + uint64_t u1 = load64_be(b10 + 16U); ws[2U] = u1; - uint64_t u2 = load64_be(b10 + (uint32_t)24U); + uint64_t u2 = load64_be(b10 + 24U); ws[3U] = u2; - uint64_t u3 = load64_be(b10 + (uint32_t)32U); + uint64_t u3 = load64_be(b10 + 32U); ws[4U] = u3; - uint64_t u4 = load64_be(b10 + (uint32_t)40U); + uint64_t u4 = load64_be(b10 + 40U); ws[5U] = u4; - uint64_t u5 = load64_be(b10 + (uint32_t)48U); + uint64_t u5 = load64_be(b10 + 48U); ws[6U] = u5; - uint64_t u6 = load64_be(b10 + (uint32_t)56U); + uint64_t u6 = load64_be(b10 + 56U); ws[7U] = u6; - uint64_t u7 = load64_be(b10 + (uint32_t)64U); + uint64_t u7 = load64_be(b10 + 64U); ws[8U] = u7; - uint64_t u8 = load64_be(b10 + (uint32_t)72U); + uint64_t u8 = load64_be(b10 + 72U); ws[9U] = u8; - uint64_t u9 = load64_be(b10 + (uint32_t)80U); + uint64_t u9 = load64_be(b10 + 80U); ws[10U] = u9; - uint64_t u10 = load64_be(b10 + (uint32_t)88U); + uint64_t u10 = load64_be(b10 + 88U); ws[11U] = u10; - uint64_t u11 = load64_be(b10 + (uint32_t)96U); + uint64_t u11 = load64_be(b10 + 96U); ws[12U] = u11; - uint64_t u12 = load64_be(b10 + (uint32_t)104U); + uint64_t u12 = load64_be(b10 + 104U); ws[13U] = u12; - uint64_t u13 = load64_be(b10 + (uint32_t)112U); + uint64_t u13 = load64_be(b10 + 112U); ws[14U] = u13; - uint64_t u14 = load64_be(b10 + (uint32_t)120U); + uint64_t u14 = load64_be(b10 + 120U); ws[15U] = u14; KRML_MAYBE_FOR5(i0, - (uint32_t)0U, - (uint32_t)5U, - (uint32_t)1U, + 0U, + 5U, + 1U, KRML_MAYBE_FOR16(i, - (uint32_t)0U, - (uint32_t)16U, - (uint32_t)1U, - uint64_t k_t = Hacl_Impl_SHA2_Generic_k384_512[(uint32_t)16U * i0 + i]; + 0U, + 16U, + 1U, + uint64_t k_t = Hacl_Hash_SHA2_k384_512[16U * i0 + i]; uint64_t ws_t = ws[i]; uint64_t a0 = hash[0U]; uint64_t b0 = hash[1U]; @@ -326,20 +299,13 @@ static inline void sha512_update(uint8_t *b, uint64_t *hash) uint64_t t1 = h02 - + - ((e0 << (uint32_t)50U | e0 >> (uint32_t)14U) - ^ - ((e0 << (uint32_t)46U | e0 >> (uint32_t)18U) - ^ (e0 << (uint32_t)23U | e0 >> (uint32_t)41U))) + + ((e0 << 50U | e0 >> 14U) ^ ((e0 << 46U | e0 >> 18U) ^ (e0 << 23U | e0 >> 41U))) + ((e0 & f0) ^ (~e0 & g0)) + k_e_t + ws_t; uint64_t t2 = - ((a0 << (uint32_t)36U | a0 >> (uint32_t)28U) - ^ - ((a0 << (uint32_t)30U | a0 >> (uint32_t)34U) - ^ (a0 << (uint32_t)25U | a0 >> (uint32_t)39U))) + ((a0 << 36U | a0 >> 28U) ^ ((a0 << 30U | a0 >> 34U) ^ (a0 << 25U | a0 >> 39U))) + ((a0 & b0) ^ ((a0 & c0) ^ (b0 & c0))); uint64_t a1 = t1 + t2; uint64_t b1 = a0; @@ -357,48 +323,42 @@ static inline void sha512_update(uint8_t *b, uint64_t *hash) hash[5U] = f1; hash[6U] = g1; hash[7U] = h12;); - if (i0 < (uint32_t)4U) + if (i0 < 4U) { KRML_MAYBE_FOR16(i, - (uint32_t)0U, - (uint32_t)16U, - (uint32_t)1U, + 0U, + 16U, + 1U, uint64_t t16 = ws[i]; - uint64_t t15 = ws[(i + (uint32_t)1U) % (uint32_t)16U]; - uint64_t t7 = ws[(i + (uint32_t)9U) % (uint32_t)16U]; - uint64_t t2 = ws[(i + (uint32_t)14U) % (uint32_t)16U]; - uint64_t - s1 = - (t2 << (uint32_t)45U | t2 >> (uint32_t)19U) - ^ ((t2 << (uint32_t)3U | t2 >> (uint32_t)61U) ^ t2 >> (uint32_t)6U); - uint64_t - s0 = - (t15 << (uint32_t)63U | t15 >> (uint32_t)1U) - ^ ((t15 << (uint32_t)56U | t15 >> (uint32_t)8U) ^ t15 >> (uint32_t)7U); + uint64_t t15 = ws[(i + 1U) % 16U]; + uint64_t t7 = ws[(i + 9U) % 16U]; + uint64_t t2 = ws[(i + 14U) % 16U]; + uint64_t s1 = (t2 << 45U | t2 >> 19U) ^ ((t2 << 3U | t2 >> 61U) ^ t2 >> 6U); + uint64_t s0 = (t15 << 63U | t15 >> 1U) ^ ((t15 << 56U | t15 >> 8U) ^ t15 >> 7U); ws[i] = s1 + t7 + s0 + t16;); }); KRML_MAYBE_FOR8(i, - (uint32_t)0U, - (uint32_t)8U, - (uint32_t)1U, + 0U, + 8U, + 1U, uint64_t *os = hash; uint64_t x = hash[i] + hash_old[i]; os[i] = x;); } -void Hacl_SHA2_Scalar32_sha512_update_nblocks(uint32_t len, uint8_t *b, uint64_t *st) +void Hacl_Hash_SHA2_sha512_update_nblocks(uint32_t len, uint8_t *b, uint64_t *st) { - uint32_t blocks = len / (uint32_t)128U; - for (uint32_t i = (uint32_t)0U; i < blocks; i++) + uint32_t blocks = len / 128U; + for (uint32_t i = 0U; i < blocks; i++) { uint8_t *b0 = b; - uint8_t *mb = b0 + i * (uint32_t)128U; + uint8_t *mb = b0 + i * 128U; sha512_update(mb, st); } } void -Hacl_SHA2_Scalar32_sha512_update_last( +Hacl_Hash_SHA2_sha512_update_last( FStar_UInt128_uint128 totlen, uint32_t len, uint8_t *b, @@ -406,25 +366,25 @@ Hacl_SHA2_Scalar32_sha512_update_last( ) { uint32_t blocks; - if (len + (uint32_t)16U + (uint32_t)1U <= (uint32_t)128U) + if (len + 16U + 1U <= 128U) { - blocks = (uint32_t)1U; + blocks = 1U; } else { - blocks = (uint32_t)2U; + blocks = 2U; } - uint32_t fin = blocks * (uint32_t)128U; + uint32_t fin = blocks * 128U; uint8_t last[256U] = { 0U }; uint8_t totlen_buf[16U] = { 0U }; - FStar_UInt128_uint128 total_len_bits = FStar_UInt128_shift_left(totlen, (uint32_t)3U); + FStar_UInt128_uint128 total_len_bits = FStar_UInt128_shift_left(totlen, 3U); store128_be(totlen_buf, total_len_bits); uint8_t *b0 = b; memcpy(last, b0, len * sizeof (uint8_t)); - last[len] = (uint8_t)0x80U; - memcpy(last + fin - (uint32_t)16U, totlen_buf, (uint32_t)16U * sizeof (uint8_t)); + last[len] = 0x80U; + memcpy(last + fin - 16U, totlen_buf, 16U * sizeof (uint8_t)); uint8_t *last00 = last; - uint8_t *last10 = last + (uint32_t)128U; + uint8_t *last10 = last + 128U; uint8_t *l0 = last00; uint8_t *l1 = last10; uint8_t *lb0 = l0; @@ -432,76 +392,68 @@ Hacl_SHA2_Scalar32_sha512_update_last( uint8_t *last0 = lb0; uint8_t *last1 = lb1; sha512_update(last0, hash); - if (blocks > (uint32_t)1U) + if (blocks > 1U) { sha512_update(last1, hash); return; } } -void Hacl_SHA2_Scalar32_sha512_finish(uint64_t *st, uint8_t *h) +void Hacl_Hash_SHA2_sha512_finish(uint64_t *st, uint8_t *h) { uint8_t hbuf[64U] = { 0U }; - KRML_MAYBE_FOR8(i, - (uint32_t)0U, - (uint32_t)8U, - (uint32_t)1U, - store64_be(hbuf + i * (uint32_t)8U, st[i]);); - memcpy(h, hbuf, (uint32_t)64U * sizeof (uint8_t)); + KRML_MAYBE_FOR8(i, 0U, 8U, 1U, store64_be(hbuf + i * 8U, st[i]);); + memcpy(h, hbuf, 64U * sizeof (uint8_t)); } -void Hacl_SHA2_Scalar32_sha384_init(uint64_t *hash) +void Hacl_Hash_SHA2_sha384_init(uint64_t *hash) { KRML_MAYBE_FOR8(i, - (uint32_t)0U, - (uint32_t)8U, - (uint32_t)1U, + 0U, + 8U, + 1U, uint64_t *os = hash; - uint64_t x = Hacl_Impl_SHA2_Generic_h384[i]; + uint64_t x = Hacl_Hash_SHA2_h384[i]; os[i] = x;); } -void Hacl_SHA2_Scalar32_sha384_update_nblocks(uint32_t len, uint8_t *b, uint64_t *st) +void Hacl_Hash_SHA2_sha384_update_nblocks(uint32_t len, uint8_t *b, uint64_t *st) { - Hacl_SHA2_Scalar32_sha512_update_nblocks(len, b, st); + Hacl_Hash_SHA2_sha512_update_nblocks(len, b, st); } void -Hacl_SHA2_Scalar32_sha384_update_last( +Hacl_Hash_SHA2_sha384_update_last( FStar_UInt128_uint128 totlen, uint32_t len, uint8_t *b, uint64_t *st ) { - Hacl_SHA2_Scalar32_sha512_update_last(totlen, len, b, st); + Hacl_Hash_SHA2_sha512_update_last(totlen, len, b, st); } -void Hacl_SHA2_Scalar32_sha384_finish(uint64_t *st, uint8_t *h) +void Hacl_Hash_SHA2_sha384_finish(uint64_t *st, uint8_t *h) { uint8_t hbuf[64U] = { 0U }; - KRML_MAYBE_FOR8(i, - (uint32_t)0U, - (uint32_t)8U, - (uint32_t)1U, - store64_be(hbuf + i * (uint32_t)8U, st[i]);); - memcpy(h, hbuf, (uint32_t)48U * sizeof (uint8_t)); + KRML_MAYBE_FOR8(i, 0U, 8U, 1U, store64_be(hbuf + i * 8U, st[i]);); + memcpy(h, hbuf, 48U * sizeof (uint8_t)); } /** Allocate initial state for the SHA2_256 hash. The state is to be freed by calling `free_256`. */ -Hacl_Streaming_MD_state_32 *Hacl_Streaming_SHA2_create_in_256(void) +Hacl_Streaming_MD_state_32 *Hacl_Hash_SHA2_malloc_256(void) { - uint8_t *buf = (uint8_t *)KRML_HOST_CALLOC((uint32_t)64U, sizeof (uint8_t)); - uint32_t *block_state = (uint32_t *)KRML_HOST_CALLOC((uint32_t)8U, sizeof (uint32_t)); + uint8_t *buf = (uint8_t *)KRML_HOST_CALLOC(64U, sizeof (uint8_t)); + uint32_t *block_state = (uint32_t *)KRML_HOST_CALLOC(8U, sizeof (uint32_t)); Hacl_Streaming_MD_state_32 - s = { .block_state = block_state, .buf = buf, .total_len = (uint64_t)(uint32_t)0U }; + s = { .block_state = block_state, .buf = buf, .total_len = (uint64_t)0U }; Hacl_Streaming_MD_state_32 *p = (Hacl_Streaming_MD_state_32 *)KRML_HOST_MALLOC(sizeof (Hacl_Streaming_MD_state_32)); p[0U] = s; - Hacl_SHA2_Scalar32_sha256_init(block_state); + Hacl_Hash_SHA2_sha256_init(block_state); return p; } @@ -511,16 +463,16 @@ The state is to be freed by calling `free_256`. Cloning the state this way is useful, for instance, if your control-flow diverges and you need to feed more (different) data into the hash in each branch. */ -Hacl_Streaming_MD_state_32 *Hacl_Streaming_SHA2_copy_256(Hacl_Streaming_MD_state_32 *s0) +Hacl_Streaming_MD_state_32 *Hacl_Hash_SHA2_copy_256(Hacl_Streaming_MD_state_32 *state) { - Hacl_Streaming_MD_state_32 scrut = *s0; + Hacl_Streaming_MD_state_32 scrut = *state; uint32_t *block_state0 = scrut.block_state; uint8_t *buf0 = scrut.buf; uint64_t total_len0 = scrut.total_len; - uint8_t *buf = (uint8_t *)KRML_HOST_CALLOC((uint32_t)64U, sizeof (uint8_t)); - memcpy(buf, buf0, (uint32_t)64U * sizeof (uint8_t)); - uint32_t *block_state = (uint32_t *)KRML_HOST_CALLOC((uint32_t)8U, sizeof (uint32_t)); - memcpy(block_state, block_state0, (uint32_t)8U * sizeof (uint32_t)); + uint8_t *buf = (uint8_t *)KRML_HOST_CALLOC(64U, sizeof (uint8_t)); + memcpy(buf, buf0, 64U * sizeof (uint8_t)); + uint32_t *block_state = (uint32_t *)KRML_HOST_CALLOC(8U, sizeof (uint32_t)); + memcpy(block_state, block_state0, 8U * sizeof (uint32_t)); Hacl_Streaming_MD_state_32 s = { .block_state = block_state, .buf = buf, .total_len = total_len0 }; Hacl_Streaming_MD_state_32 @@ -532,54 +484,54 @@ Hacl_Streaming_MD_state_32 *Hacl_Streaming_SHA2_copy_256(Hacl_Streaming_MD_state /** Reset an existing state to the initial hash state with empty data. */ -void Hacl_Streaming_SHA2_init_256(Hacl_Streaming_MD_state_32 *s) +void Hacl_Hash_SHA2_reset_256(Hacl_Streaming_MD_state_32 *state) { - Hacl_Streaming_MD_state_32 scrut = *s; + Hacl_Streaming_MD_state_32 scrut = *state; uint8_t *buf = scrut.buf; uint32_t *block_state = scrut.block_state; - Hacl_SHA2_Scalar32_sha256_init(block_state); + Hacl_Hash_SHA2_sha256_init(block_state); Hacl_Streaming_MD_state_32 - tmp = { .block_state = block_state, .buf = buf, .total_len = (uint64_t)(uint32_t)0U }; - s[0U] = tmp; + tmp = { .block_state = block_state, .buf = buf, .total_len = (uint64_t)0U }; + state[0U] = tmp; } static inline Hacl_Streaming_Types_error_code -update_224_256(Hacl_Streaming_MD_state_32 *p, uint8_t *data, uint32_t len) +update_224_256(Hacl_Streaming_MD_state_32 *state, uint8_t *chunk, uint32_t chunk_len) { - Hacl_Streaming_MD_state_32 s = *p; + Hacl_Streaming_MD_state_32 s = *state; uint64_t total_len = s.total_len; - if ((uint64_t)len > (uint64_t)2305843009213693951U - total_len) + if ((uint64_t)chunk_len > 2305843009213693951ULL - total_len) { return Hacl_Streaming_Types_MaximumLengthExceeded; } uint32_t sz; - if (total_len % (uint64_t)(uint32_t)64U == (uint64_t)0U && total_len > (uint64_t)0U) + if (total_len % (uint64_t)64U == 0ULL && total_len > 0ULL) { - sz = (uint32_t)64U; + sz = 64U; } else { - sz = (uint32_t)(total_len % (uint64_t)(uint32_t)64U); + sz = (uint32_t)(total_len % (uint64_t)64U); } - if (len <= (uint32_t)64U - sz) + if (chunk_len <= 64U - sz) { - Hacl_Streaming_MD_state_32 s1 = *p; + Hacl_Streaming_MD_state_32 s1 = *state; uint32_t *block_state1 = s1.block_state; uint8_t *buf = s1.buf; uint64_t total_len1 = s1.total_len; uint32_t sz1; - if (total_len1 % (uint64_t)(uint32_t)64U == (uint64_t)0U && total_len1 > (uint64_t)0U) + if (total_len1 % (uint64_t)64U == 0ULL && total_len1 > 0ULL) { - sz1 = (uint32_t)64U; + sz1 = 64U; } else { - sz1 = (uint32_t)(total_len1 % (uint64_t)(uint32_t)64U); + sz1 = (uint32_t)(total_len1 % (uint64_t)64U); } uint8_t *buf2 = buf + sz1; - memcpy(buf2, data, len * sizeof (uint8_t)); - uint64_t total_len2 = total_len1 + (uint64_t)len; - *p + memcpy(buf2, chunk, chunk_len * sizeof (uint8_t)); + uint64_t total_len2 = total_len1 + (uint64_t)chunk_len; + *state = ( (Hacl_Streaming_MD_state_32){ @@ -589,76 +541,74 @@ update_224_256(Hacl_Streaming_MD_state_32 *p, uint8_t *data, uint32_t len) } ); } - else if (sz == (uint32_t)0U) + else if (sz == 0U) { - Hacl_Streaming_MD_state_32 s1 = *p; + Hacl_Streaming_MD_state_32 s1 = *state; uint32_t *block_state1 = s1.block_state; uint8_t *buf = s1.buf; uint64_t total_len1 = s1.total_len; uint32_t sz1; - if (total_len1 % (uint64_t)(uint32_t)64U == (uint64_t)0U && total_len1 > (uint64_t)0U) + if (total_len1 % (uint64_t)64U == 0ULL && total_len1 > 0ULL) { - sz1 = (uint32_t)64U; + sz1 = 64U; } else { - sz1 = (uint32_t)(total_len1 % (uint64_t)(uint32_t)64U); + sz1 = (uint32_t)(total_len1 % (uint64_t)64U); } - if (!(sz1 == (uint32_t)0U)) + if (!(sz1 == 0U)) { - Hacl_SHA2_Scalar32_sha256_update_nblocks((uint32_t)64U, buf, block_state1); + Hacl_Hash_SHA2_sha256_update_nblocks(64U, buf, block_state1); } uint32_t ite; - if ((uint64_t)len % (uint64_t)(uint32_t)64U == (uint64_t)0U && (uint64_t)len > (uint64_t)0U) + if ((uint64_t)chunk_len % (uint64_t)64U == 0ULL && (uint64_t)chunk_len > 0ULL) { - ite = (uint32_t)64U; + ite = 64U; } else { - ite = (uint32_t)((uint64_t)len % (uint64_t)(uint32_t)64U); + ite = (uint32_t)((uint64_t)chunk_len % (uint64_t)64U); } - uint32_t n_blocks = (len - ite) / (uint32_t)64U; - uint32_t data1_len = n_blocks * (uint32_t)64U; - uint32_t data2_len = len - data1_len; - uint8_t *data1 = data; - uint8_t *data2 = data + data1_len; - Hacl_SHA2_Scalar32_sha256_update_nblocks(data1_len / (uint32_t)64U * (uint32_t)64U, - data1, - block_state1); + uint32_t n_blocks = (chunk_len - ite) / 64U; + uint32_t data1_len = n_blocks * 64U; + uint32_t data2_len = chunk_len - data1_len; + uint8_t *data1 = chunk; + uint8_t *data2 = chunk + data1_len; + Hacl_Hash_SHA2_sha256_update_nblocks(data1_len / 64U * 64U, data1, block_state1); uint8_t *dst = buf; memcpy(dst, data2, data2_len * sizeof (uint8_t)); - *p + *state = ( (Hacl_Streaming_MD_state_32){ .block_state = block_state1, .buf = buf, - .total_len = total_len1 + (uint64_t)len + .total_len = total_len1 + (uint64_t)chunk_len } ); } else { - uint32_t diff = (uint32_t)64U - sz; - uint8_t *data1 = data; - uint8_t *data2 = data + diff; - Hacl_Streaming_MD_state_32 s1 = *p; + uint32_t diff = 64U - sz; + uint8_t *chunk1 = chunk; + uint8_t *chunk2 = chunk + diff; + Hacl_Streaming_MD_state_32 s1 = *state; uint32_t *block_state10 = s1.block_state; uint8_t *buf0 = s1.buf; uint64_t total_len10 = s1.total_len; uint32_t sz10; - if (total_len10 % (uint64_t)(uint32_t)64U == (uint64_t)0U && total_len10 > (uint64_t)0U) + if (total_len10 % (uint64_t)64U == 0ULL && total_len10 > 0ULL) { - sz10 = (uint32_t)64U; + sz10 = 64U; } else { - sz10 = (uint32_t)(total_len10 % (uint64_t)(uint32_t)64U); + sz10 = (uint32_t)(total_len10 % (uint64_t)64U); } uint8_t *buf2 = buf0 + sz10; - memcpy(buf2, data1, diff * sizeof (uint8_t)); + memcpy(buf2, chunk1, diff * sizeof (uint8_t)); uint64_t total_len2 = total_len10 + (uint64_t)diff; - *p + *state = ( (Hacl_Streaming_MD_state_32){ @@ -667,55 +617,48 @@ update_224_256(Hacl_Streaming_MD_state_32 *p, uint8_t *data, uint32_t len) .total_len = total_len2 } ); - Hacl_Streaming_MD_state_32 s10 = *p; + Hacl_Streaming_MD_state_32 s10 = *state; uint32_t *block_state1 = s10.block_state; uint8_t *buf = s10.buf; uint64_t total_len1 = s10.total_len; uint32_t sz1; - if (total_len1 % (uint64_t)(uint32_t)64U == (uint64_t)0U && total_len1 > (uint64_t)0U) + if (total_len1 % (uint64_t)64U == 0ULL && total_len1 > 0ULL) { - sz1 = (uint32_t)64U; + sz1 = 64U; } else { - sz1 = (uint32_t)(total_len1 % (uint64_t)(uint32_t)64U); + sz1 = (uint32_t)(total_len1 % (uint64_t)64U); } - if (!(sz1 == (uint32_t)0U)) + if (!(sz1 == 0U)) { - Hacl_SHA2_Scalar32_sha256_update_nblocks((uint32_t)64U, buf, block_state1); + Hacl_Hash_SHA2_sha256_update_nblocks(64U, buf, block_state1); } uint32_t ite; if - ( - (uint64_t)(len - diff) - % (uint64_t)(uint32_t)64U - == (uint64_t)0U - && (uint64_t)(len - diff) > (uint64_t)0U - ) + ((uint64_t)(chunk_len - diff) % (uint64_t)64U == 0ULL && (uint64_t)(chunk_len - diff) > 0ULL) { - ite = (uint32_t)64U; + ite = 64U; } else { - ite = (uint32_t)((uint64_t)(len - diff) % (uint64_t)(uint32_t)64U); + ite = (uint32_t)((uint64_t)(chunk_len - diff) % (uint64_t)64U); } - uint32_t n_blocks = (len - diff - ite) / (uint32_t)64U; - uint32_t data1_len = n_blocks * (uint32_t)64U; - uint32_t data2_len = len - diff - data1_len; - uint8_t *data11 = data2; - uint8_t *data21 = data2 + data1_len; - Hacl_SHA2_Scalar32_sha256_update_nblocks(data1_len / (uint32_t)64U * (uint32_t)64U, - data11, - block_state1); + uint32_t n_blocks = (chunk_len - diff - ite) / 64U; + uint32_t data1_len = n_blocks * 64U; + uint32_t data2_len = chunk_len - diff - data1_len; + uint8_t *data1 = chunk2; + uint8_t *data2 = chunk2 + data1_len; + Hacl_Hash_SHA2_sha256_update_nblocks(data1_len / 64U * 64U, data1, block_state1); uint8_t *dst = buf; - memcpy(dst, data21, data2_len * sizeof (uint8_t)); - *p + memcpy(dst, data2, data2_len * sizeof (uint8_t)); + *state = ( (Hacl_Streaming_MD_state_32){ .block_state = block_state1, .buf = buf, - .total_len = total_len1 + (uint64_t)(len - diff) + .total_len = total_len1 + (uint64_t)(chunk_len - diff) } ); } @@ -725,209 +668,203 @@ update_224_256(Hacl_Streaming_MD_state_32 *p, uint8_t *data, uint32_t len) /** Feed an arbitrary amount of data into the hash. This function returns 0 for success, or 1 if the combined length of all of the data passed to `update_256` -(since the last call to `init_256`) exceeds 2^61-1 bytes. +(since the last call to `reset_256`) exceeds 2^61-1 bytes. This function is identical to the update function for SHA2_224. */ Hacl_Streaming_Types_error_code -Hacl_Streaming_SHA2_update_256( - Hacl_Streaming_MD_state_32 *p, +Hacl_Hash_SHA2_update_256( + Hacl_Streaming_MD_state_32 *state, uint8_t *input, uint32_t input_len ) { - return update_224_256(p, input, input_len); + return update_224_256(state, input, input_len); } /** -Write the resulting hash into `dst`, an array of 32 bytes. The state remains -valid after a call to `finish_256`, meaning the user may feed more data into -the hash via `update_256`. (The finish_256 function operates on an internal copy of +Write the resulting hash into `output`, an array of 32 bytes. The state remains +valid after a call to `digest_256`, meaning the user may feed more data into +the hash via `update_256`. (The digest_256 function operates on an internal copy of the state and therefore does not invalidate the client-held state `p`.) */ -void Hacl_Streaming_SHA2_finish_256(Hacl_Streaming_MD_state_32 *p, uint8_t *dst) +void Hacl_Hash_SHA2_digest_256(Hacl_Streaming_MD_state_32 *state, uint8_t *output) { - Hacl_Streaming_MD_state_32 scrut = *p; + Hacl_Streaming_MD_state_32 scrut = *state; uint32_t *block_state = scrut.block_state; uint8_t *buf_ = scrut.buf; uint64_t total_len = scrut.total_len; uint32_t r; - if (total_len % (uint64_t)(uint32_t)64U == (uint64_t)0U && total_len > (uint64_t)0U) + if (total_len % (uint64_t)64U == 0ULL && total_len > 0ULL) { - r = (uint32_t)64U; + r = 64U; } else { - r = (uint32_t)(total_len % (uint64_t)(uint32_t)64U); + r = (uint32_t)(total_len % (uint64_t)64U); } uint8_t *buf_1 = buf_; uint32_t tmp_block_state[8U] = { 0U }; - memcpy(tmp_block_state, block_state, (uint32_t)8U * sizeof (uint32_t)); + memcpy(tmp_block_state, block_state, 8U * sizeof (uint32_t)); uint32_t ite; - if (r % (uint32_t)64U == (uint32_t)0U && r > (uint32_t)0U) + if (r % 64U == 0U && r > 0U) { - ite = (uint32_t)64U; + ite = 64U; } else { - ite = r % (uint32_t)64U; + ite = r % 64U; } uint8_t *buf_last = buf_1 + r - ite; uint8_t *buf_multi = buf_1; - Hacl_SHA2_Scalar32_sha256_update_nblocks((uint32_t)0U, buf_multi, tmp_block_state); + Hacl_Hash_SHA2_sha256_update_nblocks(0U, buf_multi, tmp_block_state); uint64_t prev_len_last = total_len - (uint64_t)r; - Hacl_SHA2_Scalar32_sha256_update_last(prev_len_last + (uint64_t)r, - r, - buf_last, - tmp_block_state); - Hacl_SHA2_Scalar32_sha256_finish(tmp_block_state, dst); + Hacl_Hash_SHA2_sha256_update_last(prev_len_last + (uint64_t)r, r, buf_last, tmp_block_state); + Hacl_Hash_SHA2_sha256_finish(tmp_block_state, output); } /** -Free a state allocated with `create_in_256`. +Free a state allocated with `malloc_256`. This function is identical to the free function for SHA2_224. */ -void Hacl_Streaming_SHA2_free_256(Hacl_Streaming_MD_state_32 *s) +void Hacl_Hash_SHA2_free_256(Hacl_Streaming_MD_state_32 *state) { - Hacl_Streaming_MD_state_32 scrut = *s; + Hacl_Streaming_MD_state_32 scrut = *state; uint8_t *buf = scrut.buf; uint32_t *block_state = scrut.block_state; KRML_HOST_FREE(block_state); KRML_HOST_FREE(buf); - KRML_HOST_FREE(s); + KRML_HOST_FREE(state); } /** -Hash `input`, of len `input_len`, into `dst`, an array of 32 bytes. +Hash `input`, of len `input_len`, into `output`, an array of 32 bytes. */ -void Hacl_Streaming_SHA2_hash_256(uint8_t *input, uint32_t input_len, uint8_t *dst) +void Hacl_Hash_SHA2_hash_256(uint8_t *output, uint8_t *input, uint32_t input_len) { uint8_t *ib = input; - uint8_t *rb = dst; + uint8_t *rb = output; uint32_t st[8U] = { 0U }; - Hacl_SHA2_Scalar32_sha256_init(st); - uint32_t rem = input_len % (uint32_t)64U; + Hacl_Hash_SHA2_sha256_init(st); + uint32_t rem = input_len % 64U; uint64_t len_ = (uint64_t)input_len; - Hacl_SHA2_Scalar32_sha256_update_nblocks(input_len, ib, st); - uint32_t rem1 = input_len % (uint32_t)64U; + Hacl_Hash_SHA2_sha256_update_nblocks(input_len, ib, st); + uint32_t rem1 = input_len % 64U; uint8_t *b0 = ib; uint8_t *lb = b0 + input_len - rem1; - Hacl_SHA2_Scalar32_sha256_update_last(len_, rem, lb, st); - Hacl_SHA2_Scalar32_sha256_finish(st, rb); + Hacl_Hash_SHA2_sha256_update_last(len_, rem, lb, st); + Hacl_Hash_SHA2_sha256_finish(st, rb); } -Hacl_Streaming_MD_state_32 *Hacl_Streaming_SHA2_create_in_224(void) +Hacl_Streaming_MD_state_32 *Hacl_Hash_SHA2_malloc_224(void) { - uint8_t *buf = (uint8_t *)KRML_HOST_CALLOC((uint32_t)64U, sizeof (uint8_t)); - uint32_t *block_state = (uint32_t *)KRML_HOST_CALLOC((uint32_t)8U, sizeof (uint32_t)); + uint8_t *buf = (uint8_t *)KRML_HOST_CALLOC(64U, sizeof (uint8_t)); + uint32_t *block_state = (uint32_t *)KRML_HOST_CALLOC(8U, sizeof (uint32_t)); Hacl_Streaming_MD_state_32 - s = { .block_state = block_state, .buf = buf, .total_len = (uint64_t)(uint32_t)0U }; + s = { .block_state = block_state, .buf = buf, .total_len = (uint64_t)0U }; Hacl_Streaming_MD_state_32 *p = (Hacl_Streaming_MD_state_32 *)KRML_HOST_MALLOC(sizeof (Hacl_Streaming_MD_state_32)); p[0U] = s; - Hacl_SHA2_Scalar32_sha224_init(block_state); + Hacl_Hash_SHA2_sha224_init(block_state); return p; } -void Hacl_Streaming_SHA2_init_224(Hacl_Streaming_MD_state_32 *s) +void Hacl_Hash_SHA2_reset_224(Hacl_Streaming_MD_state_32 *state) { - Hacl_Streaming_MD_state_32 scrut = *s; + Hacl_Streaming_MD_state_32 scrut = *state; uint8_t *buf = scrut.buf; uint32_t *block_state = scrut.block_state; - Hacl_SHA2_Scalar32_sha224_init(block_state); + Hacl_Hash_SHA2_sha224_init(block_state); Hacl_Streaming_MD_state_32 - tmp = { .block_state = block_state, .buf = buf, .total_len = (uint64_t)(uint32_t)0U }; - s[0U] = tmp; + tmp = { .block_state = block_state, .buf = buf, .total_len = (uint64_t)0U }; + state[0U] = tmp; } Hacl_Streaming_Types_error_code -Hacl_Streaming_SHA2_update_224( - Hacl_Streaming_MD_state_32 *p, +Hacl_Hash_SHA2_update_224( + Hacl_Streaming_MD_state_32 *state, uint8_t *input, uint32_t input_len ) { - return update_224_256(p, input, input_len); + return update_224_256(state, input, input_len); } /** -Write the resulting hash into `dst`, an array of 28 bytes. The state remains -valid after a call to `finish_224`, meaning the user may feed more data into +Write the resulting hash into `output`, an array of 28 bytes. The state remains +valid after a call to `digest_224`, meaning the user may feed more data into the hash via `update_224`. */ -void Hacl_Streaming_SHA2_finish_224(Hacl_Streaming_MD_state_32 *p, uint8_t *dst) +void Hacl_Hash_SHA2_digest_224(Hacl_Streaming_MD_state_32 *state, uint8_t *output) { - Hacl_Streaming_MD_state_32 scrut = *p; + Hacl_Streaming_MD_state_32 scrut = *state; uint32_t *block_state = scrut.block_state; uint8_t *buf_ = scrut.buf; uint64_t total_len = scrut.total_len; uint32_t r; - if (total_len % (uint64_t)(uint32_t)64U == (uint64_t)0U && total_len > (uint64_t)0U) + if (total_len % (uint64_t)64U == 0ULL && total_len > 0ULL) { - r = (uint32_t)64U; + r = 64U; } else { - r = (uint32_t)(total_len % (uint64_t)(uint32_t)64U); + r = (uint32_t)(total_len % (uint64_t)64U); } uint8_t *buf_1 = buf_; uint32_t tmp_block_state[8U] = { 0U }; - memcpy(tmp_block_state, block_state, (uint32_t)8U * sizeof (uint32_t)); + memcpy(tmp_block_state, block_state, 8U * sizeof (uint32_t)); uint32_t ite; - if (r % (uint32_t)64U == (uint32_t)0U && r > (uint32_t)0U) + if (r % 64U == 0U && r > 0U) { - ite = (uint32_t)64U; + ite = 64U; } else { - ite = r % (uint32_t)64U; + ite = r % 64U; } uint8_t *buf_last = buf_1 + r - ite; uint8_t *buf_multi = buf_1; - sha224_update_nblocks((uint32_t)0U, buf_multi, tmp_block_state); + sha224_update_nblocks(0U, buf_multi, tmp_block_state); uint64_t prev_len_last = total_len - (uint64_t)r; - Hacl_SHA2_Scalar32_sha224_update_last(prev_len_last + (uint64_t)r, - r, - buf_last, - tmp_block_state); - Hacl_SHA2_Scalar32_sha224_finish(tmp_block_state, dst); + Hacl_Hash_SHA2_sha224_update_last(prev_len_last + (uint64_t)r, r, buf_last, tmp_block_state); + Hacl_Hash_SHA2_sha224_finish(tmp_block_state, output); } -void Hacl_Streaming_SHA2_free_224(Hacl_Streaming_MD_state_32 *p) +void Hacl_Hash_SHA2_free_224(Hacl_Streaming_MD_state_32 *state) { - Hacl_Streaming_SHA2_free_256(p); + Hacl_Hash_SHA2_free_256(state); } /** -Hash `input`, of len `input_len`, into `dst`, an array of 28 bytes. +Hash `input`, of len `input_len`, into `output`, an array of 28 bytes. */ -void Hacl_Streaming_SHA2_hash_224(uint8_t *input, uint32_t input_len, uint8_t *dst) +void Hacl_Hash_SHA2_hash_224(uint8_t *output, uint8_t *input, uint32_t input_len) { uint8_t *ib = input; - uint8_t *rb = dst; + uint8_t *rb = output; uint32_t st[8U] = { 0U }; - Hacl_SHA2_Scalar32_sha224_init(st); - uint32_t rem = input_len % (uint32_t)64U; + Hacl_Hash_SHA2_sha224_init(st); + uint32_t rem = input_len % 64U; uint64_t len_ = (uint64_t)input_len; sha224_update_nblocks(input_len, ib, st); - uint32_t rem1 = input_len % (uint32_t)64U; + uint32_t rem1 = input_len % 64U; uint8_t *b0 = ib; uint8_t *lb = b0 + input_len - rem1; - Hacl_SHA2_Scalar32_sha224_update_last(len_, rem, lb, st); - Hacl_SHA2_Scalar32_sha224_finish(st, rb); + Hacl_Hash_SHA2_sha224_update_last(len_, rem, lb, st); + Hacl_Hash_SHA2_sha224_finish(st, rb); } -Hacl_Streaming_MD_state_64 *Hacl_Streaming_SHA2_create_in_512(void) +Hacl_Streaming_MD_state_64 *Hacl_Hash_SHA2_malloc_512(void) { - uint8_t *buf = (uint8_t *)KRML_HOST_CALLOC((uint32_t)128U, sizeof (uint8_t)); - uint64_t *block_state = (uint64_t *)KRML_HOST_CALLOC((uint32_t)8U, sizeof (uint64_t)); + uint8_t *buf = (uint8_t *)KRML_HOST_CALLOC(128U, sizeof (uint8_t)); + uint64_t *block_state = (uint64_t *)KRML_HOST_CALLOC(8U, sizeof (uint64_t)); Hacl_Streaming_MD_state_64 - s = { .block_state = block_state, .buf = buf, .total_len = (uint64_t)(uint32_t)0U }; + s = { .block_state = block_state, .buf = buf, .total_len = (uint64_t)0U }; Hacl_Streaming_MD_state_64 *p = (Hacl_Streaming_MD_state_64 *)KRML_HOST_MALLOC(sizeof (Hacl_Streaming_MD_state_64)); p[0U] = s; - Hacl_SHA2_Scalar32_sha512_init(block_state); + Hacl_Hash_SHA2_sha512_init(block_state); return p; } @@ -937,16 +874,16 @@ The state is to be freed by calling `free_512`. Cloning the state this way is useful, for instance, if your control-flow diverges and you need to feed more (different) data into the hash in each branch. */ -Hacl_Streaming_MD_state_64 *Hacl_Streaming_SHA2_copy_512(Hacl_Streaming_MD_state_64 *s0) +Hacl_Streaming_MD_state_64 *Hacl_Hash_SHA2_copy_512(Hacl_Streaming_MD_state_64 *state) { - Hacl_Streaming_MD_state_64 scrut = *s0; + Hacl_Streaming_MD_state_64 scrut = *state; uint64_t *block_state0 = scrut.block_state; uint8_t *buf0 = scrut.buf; uint64_t total_len0 = scrut.total_len; - uint8_t *buf = (uint8_t *)KRML_HOST_CALLOC((uint32_t)128U, sizeof (uint8_t)); - memcpy(buf, buf0, (uint32_t)128U * sizeof (uint8_t)); - uint64_t *block_state = (uint64_t *)KRML_HOST_CALLOC((uint32_t)8U, sizeof (uint64_t)); - memcpy(block_state, block_state0, (uint32_t)8U * sizeof (uint64_t)); + uint8_t *buf = (uint8_t *)KRML_HOST_CALLOC(128U, sizeof (uint8_t)); + memcpy(buf, buf0, 128U * sizeof (uint8_t)); + uint64_t *block_state = (uint64_t *)KRML_HOST_CALLOC(8U, sizeof (uint64_t)); + memcpy(block_state, block_state0, 8U * sizeof (uint64_t)); Hacl_Streaming_MD_state_64 s = { .block_state = block_state, .buf = buf, .total_len = total_len0 }; Hacl_Streaming_MD_state_64 @@ -955,54 +892,54 @@ Hacl_Streaming_MD_state_64 *Hacl_Streaming_SHA2_copy_512(Hacl_Streaming_MD_state return p; } -void Hacl_Streaming_SHA2_init_512(Hacl_Streaming_MD_state_64 *s) +void Hacl_Hash_SHA2_reset_512(Hacl_Streaming_MD_state_64 *state) { - Hacl_Streaming_MD_state_64 scrut = *s; + Hacl_Streaming_MD_state_64 scrut = *state; uint8_t *buf = scrut.buf; uint64_t *block_state = scrut.block_state; - Hacl_SHA2_Scalar32_sha512_init(block_state); + Hacl_Hash_SHA2_sha512_init(block_state); Hacl_Streaming_MD_state_64 - tmp = { .block_state = block_state, .buf = buf, .total_len = (uint64_t)(uint32_t)0U }; - s[0U] = tmp; + tmp = { .block_state = block_state, .buf = buf, .total_len = (uint64_t)0U }; + state[0U] = tmp; } static inline Hacl_Streaming_Types_error_code -update_384_512(Hacl_Streaming_MD_state_64 *p, uint8_t *data, uint32_t len) +update_384_512(Hacl_Streaming_MD_state_64 *state, uint8_t *chunk, uint32_t chunk_len) { - Hacl_Streaming_MD_state_64 s = *p; + Hacl_Streaming_MD_state_64 s = *state; uint64_t total_len = s.total_len; - if ((uint64_t)len > (uint64_t)18446744073709551615U - total_len) + if ((uint64_t)chunk_len > 18446744073709551615ULL - total_len) { return Hacl_Streaming_Types_MaximumLengthExceeded; } uint32_t sz; - if (total_len % (uint64_t)(uint32_t)128U == (uint64_t)0U && total_len > (uint64_t)0U) + if (total_len % (uint64_t)128U == 0ULL && total_len > 0ULL) { - sz = (uint32_t)128U; + sz = 128U; } else { - sz = (uint32_t)(total_len % (uint64_t)(uint32_t)128U); + sz = (uint32_t)(total_len % (uint64_t)128U); } - if (len <= (uint32_t)128U - sz) + if (chunk_len <= 128U - sz) { - Hacl_Streaming_MD_state_64 s1 = *p; + Hacl_Streaming_MD_state_64 s1 = *state; uint64_t *block_state1 = s1.block_state; uint8_t *buf = s1.buf; uint64_t total_len1 = s1.total_len; uint32_t sz1; - if (total_len1 % (uint64_t)(uint32_t)128U == (uint64_t)0U && total_len1 > (uint64_t)0U) + if (total_len1 % (uint64_t)128U == 0ULL && total_len1 > 0ULL) { - sz1 = (uint32_t)128U; + sz1 = 128U; } else { - sz1 = (uint32_t)(total_len1 % (uint64_t)(uint32_t)128U); + sz1 = (uint32_t)(total_len1 % (uint64_t)128U); } uint8_t *buf2 = buf + sz1; - memcpy(buf2, data, len * sizeof (uint8_t)); - uint64_t total_len2 = total_len1 + (uint64_t)len; - *p + memcpy(buf2, chunk, chunk_len * sizeof (uint8_t)); + uint64_t total_len2 = total_len1 + (uint64_t)chunk_len; + *state = ( (Hacl_Streaming_MD_state_64){ @@ -1012,76 +949,74 @@ update_384_512(Hacl_Streaming_MD_state_64 *p, uint8_t *data, uint32_t len) } ); } - else if (sz == (uint32_t)0U) + else if (sz == 0U) { - Hacl_Streaming_MD_state_64 s1 = *p; + Hacl_Streaming_MD_state_64 s1 = *state; uint64_t *block_state1 = s1.block_state; uint8_t *buf = s1.buf; uint64_t total_len1 = s1.total_len; uint32_t sz1; - if (total_len1 % (uint64_t)(uint32_t)128U == (uint64_t)0U && total_len1 > (uint64_t)0U) + if (total_len1 % (uint64_t)128U == 0ULL && total_len1 > 0ULL) { - sz1 = (uint32_t)128U; + sz1 = 128U; } else { - sz1 = (uint32_t)(total_len1 % (uint64_t)(uint32_t)128U); + sz1 = (uint32_t)(total_len1 % (uint64_t)128U); } - if (!(sz1 == (uint32_t)0U)) + if (!(sz1 == 0U)) { - Hacl_SHA2_Scalar32_sha512_update_nblocks((uint32_t)128U, buf, block_state1); + Hacl_Hash_SHA2_sha512_update_nblocks(128U, buf, block_state1); } uint32_t ite; - if ((uint64_t)len % (uint64_t)(uint32_t)128U == (uint64_t)0U && (uint64_t)len > (uint64_t)0U) + if ((uint64_t)chunk_len % (uint64_t)128U == 0ULL && (uint64_t)chunk_len > 0ULL) { - ite = (uint32_t)128U; + ite = 128U; } else { - ite = (uint32_t)((uint64_t)len % (uint64_t)(uint32_t)128U); + ite = (uint32_t)((uint64_t)chunk_len % (uint64_t)128U); } - uint32_t n_blocks = (len - ite) / (uint32_t)128U; - uint32_t data1_len = n_blocks * (uint32_t)128U; - uint32_t data2_len = len - data1_len; - uint8_t *data1 = data; - uint8_t *data2 = data + data1_len; - Hacl_SHA2_Scalar32_sha512_update_nblocks(data1_len / (uint32_t)128U * (uint32_t)128U, - data1, - block_state1); + uint32_t n_blocks = (chunk_len - ite) / 128U; + uint32_t data1_len = n_blocks * 128U; + uint32_t data2_len = chunk_len - data1_len; + uint8_t *data1 = chunk; + uint8_t *data2 = chunk + data1_len; + Hacl_Hash_SHA2_sha512_update_nblocks(data1_len / 128U * 128U, data1, block_state1); uint8_t *dst = buf; memcpy(dst, data2, data2_len * sizeof (uint8_t)); - *p + *state = ( (Hacl_Streaming_MD_state_64){ .block_state = block_state1, .buf = buf, - .total_len = total_len1 + (uint64_t)len + .total_len = total_len1 + (uint64_t)chunk_len } ); } else { - uint32_t diff = (uint32_t)128U - sz; - uint8_t *data1 = data; - uint8_t *data2 = data + diff; - Hacl_Streaming_MD_state_64 s1 = *p; + uint32_t diff = 128U - sz; + uint8_t *chunk1 = chunk; + uint8_t *chunk2 = chunk + diff; + Hacl_Streaming_MD_state_64 s1 = *state; uint64_t *block_state10 = s1.block_state; uint8_t *buf0 = s1.buf; uint64_t total_len10 = s1.total_len; uint32_t sz10; - if (total_len10 % (uint64_t)(uint32_t)128U == (uint64_t)0U && total_len10 > (uint64_t)0U) + if (total_len10 % (uint64_t)128U == 0ULL && total_len10 > 0ULL) { - sz10 = (uint32_t)128U; + sz10 = 128U; } else { - sz10 = (uint32_t)(total_len10 % (uint64_t)(uint32_t)128U); + sz10 = (uint32_t)(total_len10 % (uint64_t)128U); } uint8_t *buf2 = buf0 + sz10; - memcpy(buf2, data1, diff * sizeof (uint8_t)); + memcpy(buf2, chunk1, diff * sizeof (uint8_t)); uint64_t total_len2 = total_len10 + (uint64_t)diff; - *p + *state = ( (Hacl_Streaming_MD_state_64){ @@ -1090,55 +1025,48 @@ update_384_512(Hacl_Streaming_MD_state_64 *p, uint8_t *data, uint32_t len) .total_len = total_len2 } ); - Hacl_Streaming_MD_state_64 s10 = *p; + Hacl_Streaming_MD_state_64 s10 = *state; uint64_t *block_state1 = s10.block_state; uint8_t *buf = s10.buf; uint64_t total_len1 = s10.total_len; uint32_t sz1; - if (total_len1 % (uint64_t)(uint32_t)128U == (uint64_t)0U && total_len1 > (uint64_t)0U) + if (total_len1 % (uint64_t)128U == 0ULL && total_len1 > 0ULL) { - sz1 = (uint32_t)128U; + sz1 = 128U; } else { - sz1 = (uint32_t)(total_len1 % (uint64_t)(uint32_t)128U); + sz1 = (uint32_t)(total_len1 % (uint64_t)128U); } - if (!(sz1 == (uint32_t)0U)) + if (!(sz1 == 0U)) { - Hacl_SHA2_Scalar32_sha512_update_nblocks((uint32_t)128U, buf, block_state1); + Hacl_Hash_SHA2_sha512_update_nblocks(128U, buf, block_state1); } uint32_t ite; if - ( - (uint64_t)(len - diff) - % (uint64_t)(uint32_t)128U - == (uint64_t)0U - && (uint64_t)(len - diff) > (uint64_t)0U - ) + ((uint64_t)(chunk_len - diff) % (uint64_t)128U == 0ULL && (uint64_t)(chunk_len - diff) > 0ULL) { - ite = (uint32_t)128U; + ite = 128U; } else { - ite = (uint32_t)((uint64_t)(len - diff) % (uint64_t)(uint32_t)128U); + ite = (uint32_t)((uint64_t)(chunk_len - diff) % (uint64_t)128U); } - uint32_t n_blocks = (len - diff - ite) / (uint32_t)128U; - uint32_t data1_len = n_blocks * (uint32_t)128U; - uint32_t data2_len = len - diff - data1_len; - uint8_t *data11 = data2; - uint8_t *data21 = data2 + data1_len; - Hacl_SHA2_Scalar32_sha512_update_nblocks(data1_len / (uint32_t)128U * (uint32_t)128U, - data11, - block_state1); + uint32_t n_blocks = (chunk_len - diff - ite) / 128U; + uint32_t data1_len = n_blocks * 128U; + uint32_t data2_len = chunk_len - diff - data1_len; + uint8_t *data1 = chunk2; + uint8_t *data2 = chunk2 + data1_len; + Hacl_Hash_SHA2_sha512_update_nblocks(data1_len / 128U * 128U, data1, block_state1); uint8_t *dst = buf; - memcpy(dst, data21, data2_len * sizeof (uint8_t)); - *p + memcpy(dst, data2, data2_len * sizeof (uint8_t)); + *state = ( (Hacl_Streaming_MD_state_64){ .block_state = block_state1, .buf = buf, - .total_len = total_len1 + (uint64_t)(len - diff) + .total_len = total_len1 + (uint64_t)(chunk_len - diff) } ); } @@ -1148,198 +1076,198 @@ update_384_512(Hacl_Streaming_MD_state_64 *p, uint8_t *data, uint32_t len) /** Feed an arbitrary amount of data into the hash. This function returns 0 for success, or 1 if the combined length of all of the data passed to `update_512` -(since the last call to `init_512`) exceeds 2^125-1 bytes. +(since the last call to `reset_512`) exceeds 2^125-1 bytes. This function is identical to the update function for SHA2_384. */ Hacl_Streaming_Types_error_code -Hacl_Streaming_SHA2_update_512( - Hacl_Streaming_MD_state_64 *p, +Hacl_Hash_SHA2_update_512( + Hacl_Streaming_MD_state_64 *state, uint8_t *input, uint32_t input_len ) { - return update_384_512(p, input, input_len); + return update_384_512(state, input, input_len); } /** -Write the resulting hash into `dst`, an array of 64 bytes. The state remains -valid after a call to `finish_512`, meaning the user may feed more data into -the hash via `update_512`. (The finish_512 function operates on an internal copy of +Write the resulting hash into `output`, an array of 64 bytes. The state remains +valid after a call to `digest_512`, meaning the user may feed more data into +the hash via `update_512`. (The digest_512 function operates on an internal copy of the state and therefore does not invalidate the client-held state `p`.) */ -void Hacl_Streaming_SHA2_finish_512(Hacl_Streaming_MD_state_64 *p, uint8_t *dst) +void Hacl_Hash_SHA2_digest_512(Hacl_Streaming_MD_state_64 *state, uint8_t *output) { - Hacl_Streaming_MD_state_64 scrut = *p; + Hacl_Streaming_MD_state_64 scrut = *state; uint64_t *block_state = scrut.block_state; uint8_t *buf_ = scrut.buf; uint64_t total_len = scrut.total_len; uint32_t r; - if (total_len % (uint64_t)(uint32_t)128U == (uint64_t)0U && total_len > (uint64_t)0U) + if (total_len % (uint64_t)128U == 0ULL && total_len > 0ULL) { - r = (uint32_t)128U; + r = 128U; } else { - r = (uint32_t)(total_len % (uint64_t)(uint32_t)128U); + r = (uint32_t)(total_len % (uint64_t)128U); } uint8_t *buf_1 = buf_; uint64_t tmp_block_state[8U] = { 0U }; - memcpy(tmp_block_state, block_state, (uint32_t)8U * sizeof (uint64_t)); + memcpy(tmp_block_state, block_state, 8U * sizeof (uint64_t)); uint32_t ite; - if (r % (uint32_t)128U == (uint32_t)0U && r > (uint32_t)0U) + if (r % 128U == 0U && r > 0U) { - ite = (uint32_t)128U; + ite = 128U; } else { - ite = r % (uint32_t)128U; + ite = r % 128U; } uint8_t *buf_last = buf_1 + r - ite; uint8_t *buf_multi = buf_1; - Hacl_SHA2_Scalar32_sha512_update_nblocks((uint32_t)0U, buf_multi, tmp_block_state); + Hacl_Hash_SHA2_sha512_update_nblocks(0U, buf_multi, tmp_block_state); uint64_t prev_len_last = total_len - (uint64_t)r; - Hacl_SHA2_Scalar32_sha512_update_last(FStar_UInt128_add(FStar_UInt128_uint64_to_uint128(prev_len_last), + Hacl_Hash_SHA2_sha512_update_last(FStar_UInt128_add(FStar_UInt128_uint64_to_uint128(prev_len_last), FStar_UInt128_uint64_to_uint128((uint64_t)r)), r, buf_last, tmp_block_state); - Hacl_SHA2_Scalar32_sha512_finish(tmp_block_state, dst); + Hacl_Hash_SHA2_sha512_finish(tmp_block_state, output); } /** -Free a state allocated with `create_in_512`. +Free a state allocated with `malloc_512`. This function is identical to the free function for SHA2_384. */ -void Hacl_Streaming_SHA2_free_512(Hacl_Streaming_MD_state_64 *s) +void Hacl_Hash_SHA2_free_512(Hacl_Streaming_MD_state_64 *state) { - Hacl_Streaming_MD_state_64 scrut = *s; + Hacl_Streaming_MD_state_64 scrut = *state; uint8_t *buf = scrut.buf; uint64_t *block_state = scrut.block_state; KRML_HOST_FREE(block_state); KRML_HOST_FREE(buf); - KRML_HOST_FREE(s); + KRML_HOST_FREE(state); } /** -Hash `input`, of len `input_len`, into `dst`, an array of 64 bytes. +Hash `input`, of len `input_len`, into `output`, an array of 64 bytes. */ -void Hacl_Streaming_SHA2_hash_512(uint8_t *input, uint32_t input_len, uint8_t *dst) +void Hacl_Hash_SHA2_hash_512(uint8_t *output, uint8_t *input, uint32_t input_len) { uint8_t *ib = input; - uint8_t *rb = dst; + uint8_t *rb = output; uint64_t st[8U] = { 0U }; - Hacl_SHA2_Scalar32_sha512_init(st); - uint32_t rem = input_len % (uint32_t)128U; + Hacl_Hash_SHA2_sha512_init(st); + uint32_t rem = input_len % 128U; FStar_UInt128_uint128 len_ = FStar_UInt128_uint64_to_uint128((uint64_t)input_len); - Hacl_SHA2_Scalar32_sha512_update_nblocks(input_len, ib, st); - uint32_t rem1 = input_len % (uint32_t)128U; + Hacl_Hash_SHA2_sha512_update_nblocks(input_len, ib, st); + uint32_t rem1 = input_len % 128U; uint8_t *b0 = ib; uint8_t *lb = b0 + input_len - rem1; - Hacl_SHA2_Scalar32_sha512_update_last(len_, rem, lb, st); - Hacl_SHA2_Scalar32_sha512_finish(st, rb); + Hacl_Hash_SHA2_sha512_update_last(len_, rem, lb, st); + Hacl_Hash_SHA2_sha512_finish(st, rb); } -Hacl_Streaming_MD_state_64 *Hacl_Streaming_SHA2_create_in_384(void) +Hacl_Streaming_MD_state_64 *Hacl_Hash_SHA2_malloc_384(void) { - uint8_t *buf = (uint8_t *)KRML_HOST_CALLOC((uint32_t)128U, sizeof (uint8_t)); - uint64_t *block_state = (uint64_t *)KRML_HOST_CALLOC((uint32_t)8U, sizeof (uint64_t)); + uint8_t *buf = (uint8_t *)KRML_HOST_CALLOC(128U, sizeof (uint8_t)); + uint64_t *block_state = (uint64_t *)KRML_HOST_CALLOC(8U, sizeof (uint64_t)); Hacl_Streaming_MD_state_64 - s = { .block_state = block_state, .buf = buf, .total_len = (uint64_t)(uint32_t)0U }; + s = { .block_state = block_state, .buf = buf, .total_len = (uint64_t)0U }; Hacl_Streaming_MD_state_64 *p = (Hacl_Streaming_MD_state_64 *)KRML_HOST_MALLOC(sizeof (Hacl_Streaming_MD_state_64)); p[0U] = s; - Hacl_SHA2_Scalar32_sha384_init(block_state); + Hacl_Hash_SHA2_sha384_init(block_state); return p; } -void Hacl_Streaming_SHA2_init_384(Hacl_Streaming_MD_state_64 *s) +void Hacl_Hash_SHA2_reset_384(Hacl_Streaming_MD_state_64 *state) { - Hacl_Streaming_MD_state_64 scrut = *s; + Hacl_Streaming_MD_state_64 scrut = *state; uint8_t *buf = scrut.buf; uint64_t *block_state = scrut.block_state; - Hacl_SHA2_Scalar32_sha384_init(block_state); + Hacl_Hash_SHA2_sha384_init(block_state); Hacl_Streaming_MD_state_64 - tmp = { .block_state = block_state, .buf = buf, .total_len = (uint64_t)(uint32_t)0U }; - s[0U] = tmp; + tmp = { .block_state = block_state, .buf = buf, .total_len = (uint64_t)0U }; + state[0U] = tmp; } Hacl_Streaming_Types_error_code -Hacl_Streaming_SHA2_update_384( - Hacl_Streaming_MD_state_64 *p, +Hacl_Hash_SHA2_update_384( + Hacl_Streaming_MD_state_64 *state, uint8_t *input, uint32_t input_len ) { - return update_384_512(p, input, input_len); + return update_384_512(state, input, input_len); } /** -Write the resulting hash into `dst`, an array of 48 bytes. The state remains -valid after a call to `finish_384`, meaning the user may feed more data into +Write the resulting hash into `output`, an array of 48 bytes. The state remains +valid after a call to `digest_384`, meaning the user may feed more data into the hash via `update_384`. */ -void Hacl_Streaming_SHA2_finish_384(Hacl_Streaming_MD_state_64 *p, uint8_t *dst) +void Hacl_Hash_SHA2_digest_384(Hacl_Streaming_MD_state_64 *state, uint8_t *output) { - Hacl_Streaming_MD_state_64 scrut = *p; + Hacl_Streaming_MD_state_64 scrut = *state; uint64_t *block_state = scrut.block_state; uint8_t *buf_ = scrut.buf; uint64_t total_len = scrut.total_len; uint32_t r; - if (total_len % (uint64_t)(uint32_t)128U == (uint64_t)0U && total_len > (uint64_t)0U) + if (total_len % (uint64_t)128U == 0ULL && total_len > 0ULL) { - r = (uint32_t)128U; + r = 128U; } else { - r = (uint32_t)(total_len % (uint64_t)(uint32_t)128U); + r = (uint32_t)(total_len % (uint64_t)128U); } uint8_t *buf_1 = buf_; uint64_t tmp_block_state[8U] = { 0U }; - memcpy(tmp_block_state, block_state, (uint32_t)8U * sizeof (uint64_t)); + memcpy(tmp_block_state, block_state, 8U * sizeof (uint64_t)); uint32_t ite; - if (r % (uint32_t)128U == (uint32_t)0U && r > (uint32_t)0U) + if (r % 128U == 0U && r > 0U) { - ite = (uint32_t)128U; + ite = 128U; } else { - ite = r % (uint32_t)128U; + ite = r % 128U; } uint8_t *buf_last = buf_1 + r - ite; uint8_t *buf_multi = buf_1; - Hacl_SHA2_Scalar32_sha384_update_nblocks((uint32_t)0U, buf_multi, tmp_block_state); + Hacl_Hash_SHA2_sha384_update_nblocks(0U, buf_multi, tmp_block_state); uint64_t prev_len_last = total_len - (uint64_t)r; - Hacl_SHA2_Scalar32_sha384_update_last(FStar_UInt128_add(FStar_UInt128_uint64_to_uint128(prev_len_last), + Hacl_Hash_SHA2_sha384_update_last(FStar_UInt128_add(FStar_UInt128_uint64_to_uint128(prev_len_last), FStar_UInt128_uint64_to_uint128((uint64_t)r)), r, buf_last, tmp_block_state); - Hacl_SHA2_Scalar32_sha384_finish(tmp_block_state, dst); + Hacl_Hash_SHA2_sha384_finish(tmp_block_state, output); } -void Hacl_Streaming_SHA2_free_384(Hacl_Streaming_MD_state_64 *p) +void Hacl_Hash_SHA2_free_384(Hacl_Streaming_MD_state_64 *state) { - Hacl_Streaming_SHA2_free_512(p); + Hacl_Hash_SHA2_free_512(state); } /** -Hash `input`, of len `input_len`, into `dst`, an array of 48 bytes. +Hash `input`, of len `input_len`, into `output`, an array of 48 bytes. */ -void Hacl_Streaming_SHA2_hash_384(uint8_t *input, uint32_t input_len, uint8_t *dst) +void Hacl_Hash_SHA2_hash_384(uint8_t *output, uint8_t *input, uint32_t input_len) { uint8_t *ib = input; - uint8_t *rb = dst; + uint8_t *rb = output; uint64_t st[8U] = { 0U }; - Hacl_SHA2_Scalar32_sha384_init(st); - uint32_t rem = input_len % (uint32_t)128U; + Hacl_Hash_SHA2_sha384_init(st); + uint32_t rem = input_len % 128U; FStar_UInt128_uint128 len_ = FStar_UInt128_uint64_to_uint128((uint64_t)input_len); - Hacl_SHA2_Scalar32_sha384_update_nblocks(input_len, ib, st); - uint32_t rem1 = input_len % (uint32_t)128U; + Hacl_Hash_SHA2_sha384_update_nblocks(input_len, ib, st); + uint32_t rem1 = input_len % 128U; uint8_t *b0 = ib; uint8_t *lb = b0 + input_len - rem1; - Hacl_SHA2_Scalar32_sha384_update_last(len_, rem, lb, st); - Hacl_SHA2_Scalar32_sha384_finish(st, rb); + Hacl_Hash_SHA2_sha384_update_last(len_, rem, lb, st); + Hacl_Hash_SHA2_sha384_finish(st, rb); } diff --git a/contrib/tools/python3/Modules/_hacl/Hacl_Hash_SHA2.h b/contrib/tools/python3/Modules/_hacl/Hacl_Hash_SHA2.h index a0e731094d..d8204b504b 100644 --- a/contrib/tools/python3/Modules/_hacl/Hacl_Hash_SHA2.h +++ b/contrib/tools/python3/Modules/_hacl/Hacl_Hash_SHA2.h @@ -39,19 +39,19 @@ extern "C" { #include "Hacl_Streaming_Types.h" -typedef Hacl_Streaming_MD_state_32 Hacl_Streaming_SHA2_state_sha2_224; +typedef Hacl_Streaming_MD_state_32 Hacl_Hash_SHA2_state_t_224; -typedef Hacl_Streaming_MD_state_32 Hacl_Streaming_SHA2_state_sha2_256; +typedef Hacl_Streaming_MD_state_32 Hacl_Hash_SHA2_state_t_256; -typedef Hacl_Streaming_MD_state_64 Hacl_Streaming_SHA2_state_sha2_384; +typedef Hacl_Streaming_MD_state_64 Hacl_Hash_SHA2_state_t_384; -typedef Hacl_Streaming_MD_state_64 Hacl_Streaming_SHA2_state_sha2_512; +typedef Hacl_Streaming_MD_state_64 Hacl_Hash_SHA2_state_t_512; /** Allocate initial state for the SHA2_256 hash. The state is to be freed by calling `free_256`. */ -Hacl_Streaming_MD_state_32 *Hacl_Streaming_SHA2_create_in_256(void); +Hacl_Streaming_MD_state_32 *Hacl_Hash_SHA2_malloc_256(void); /** Copies the state passed as argument into a newly allocated state (deep copy). @@ -59,73 +59,73 @@ The state is to be freed by calling `free_256`. Cloning the state this way is useful, for instance, if your control-flow diverges and you need to feed more (different) data into the hash in each branch. */ -Hacl_Streaming_MD_state_32 *Hacl_Streaming_SHA2_copy_256(Hacl_Streaming_MD_state_32 *s0); +Hacl_Streaming_MD_state_32 *Hacl_Hash_SHA2_copy_256(Hacl_Streaming_MD_state_32 *state); /** Reset an existing state to the initial hash state with empty data. */ -void Hacl_Streaming_SHA2_init_256(Hacl_Streaming_MD_state_32 *s); +void Hacl_Hash_SHA2_reset_256(Hacl_Streaming_MD_state_32 *state); /** Feed an arbitrary amount of data into the hash. This function returns 0 for success, or 1 if the combined length of all of the data passed to `update_256` -(since the last call to `init_256`) exceeds 2^61-1 bytes. +(since the last call to `reset_256`) exceeds 2^61-1 bytes. This function is identical to the update function for SHA2_224. */ Hacl_Streaming_Types_error_code -Hacl_Streaming_SHA2_update_256( - Hacl_Streaming_MD_state_32 *p, +Hacl_Hash_SHA2_update_256( + Hacl_Streaming_MD_state_32 *state, uint8_t *input, uint32_t input_len ); /** -Write the resulting hash into `dst`, an array of 32 bytes. The state remains -valid after a call to `finish_256`, meaning the user may feed more data into -the hash via `update_256`. (The finish_256 function operates on an internal copy of +Write the resulting hash into `output`, an array of 32 bytes. The state remains +valid after a call to `digest_256`, meaning the user may feed more data into +the hash via `update_256`. (The digest_256 function operates on an internal copy of the state and therefore does not invalidate the client-held state `p`.) */ -void Hacl_Streaming_SHA2_finish_256(Hacl_Streaming_MD_state_32 *p, uint8_t *dst); +void Hacl_Hash_SHA2_digest_256(Hacl_Streaming_MD_state_32 *state, uint8_t *output); /** -Free a state allocated with `create_in_256`. +Free a state allocated with `malloc_256`. This function is identical to the free function for SHA2_224. */ -void Hacl_Streaming_SHA2_free_256(Hacl_Streaming_MD_state_32 *s); +void Hacl_Hash_SHA2_free_256(Hacl_Streaming_MD_state_32 *state); /** -Hash `input`, of len `input_len`, into `dst`, an array of 32 bytes. +Hash `input`, of len `input_len`, into `output`, an array of 32 bytes. */ -void Hacl_Streaming_SHA2_hash_256(uint8_t *input, uint32_t input_len, uint8_t *dst); +void Hacl_Hash_SHA2_hash_256(uint8_t *output, uint8_t *input, uint32_t input_len); -Hacl_Streaming_MD_state_32 *Hacl_Streaming_SHA2_create_in_224(void); +Hacl_Streaming_MD_state_32 *Hacl_Hash_SHA2_malloc_224(void); -void Hacl_Streaming_SHA2_init_224(Hacl_Streaming_MD_state_32 *s); +void Hacl_Hash_SHA2_reset_224(Hacl_Streaming_MD_state_32 *state); Hacl_Streaming_Types_error_code -Hacl_Streaming_SHA2_update_224( - Hacl_Streaming_MD_state_32 *p, +Hacl_Hash_SHA2_update_224( + Hacl_Streaming_MD_state_32 *state, uint8_t *input, uint32_t input_len ); /** -Write the resulting hash into `dst`, an array of 28 bytes. The state remains -valid after a call to `finish_224`, meaning the user may feed more data into +Write the resulting hash into `output`, an array of 28 bytes. The state remains +valid after a call to `digest_224`, meaning the user may feed more data into the hash via `update_224`. */ -void Hacl_Streaming_SHA2_finish_224(Hacl_Streaming_MD_state_32 *p, uint8_t *dst); +void Hacl_Hash_SHA2_digest_224(Hacl_Streaming_MD_state_32 *state, uint8_t *output); -void Hacl_Streaming_SHA2_free_224(Hacl_Streaming_MD_state_32 *p); +void Hacl_Hash_SHA2_free_224(Hacl_Streaming_MD_state_32 *state); /** -Hash `input`, of len `input_len`, into `dst`, an array of 28 bytes. +Hash `input`, of len `input_len`, into `output`, an array of 28 bytes. */ -void Hacl_Streaming_SHA2_hash_224(uint8_t *input, uint32_t input_len, uint8_t *dst); +void Hacl_Hash_SHA2_hash_224(uint8_t *output, uint8_t *input, uint32_t input_len); -Hacl_Streaming_MD_state_64 *Hacl_Streaming_SHA2_create_in_512(void); +Hacl_Streaming_MD_state_64 *Hacl_Hash_SHA2_malloc_512(void); /** Copies the state passed as argument into a newly allocated state (deep copy). @@ -133,68 +133,68 @@ The state is to be freed by calling `free_512`. Cloning the state this way is useful, for instance, if your control-flow diverges and you need to feed more (different) data into the hash in each branch. */ -Hacl_Streaming_MD_state_64 *Hacl_Streaming_SHA2_copy_512(Hacl_Streaming_MD_state_64 *s0); +Hacl_Streaming_MD_state_64 *Hacl_Hash_SHA2_copy_512(Hacl_Streaming_MD_state_64 *state); -void Hacl_Streaming_SHA2_init_512(Hacl_Streaming_MD_state_64 *s); +void Hacl_Hash_SHA2_reset_512(Hacl_Streaming_MD_state_64 *state); /** Feed an arbitrary amount of data into the hash. This function returns 0 for success, or 1 if the combined length of all of the data passed to `update_512` -(since the last call to `init_512`) exceeds 2^125-1 bytes. +(since the last call to `reset_512`) exceeds 2^125-1 bytes. This function is identical to the update function for SHA2_384. */ Hacl_Streaming_Types_error_code -Hacl_Streaming_SHA2_update_512( - Hacl_Streaming_MD_state_64 *p, +Hacl_Hash_SHA2_update_512( + Hacl_Streaming_MD_state_64 *state, uint8_t *input, uint32_t input_len ); /** -Write the resulting hash into `dst`, an array of 64 bytes. The state remains -valid after a call to `finish_512`, meaning the user may feed more data into -the hash via `update_512`. (The finish_512 function operates on an internal copy of +Write the resulting hash into `output`, an array of 64 bytes. The state remains +valid after a call to `digest_512`, meaning the user may feed more data into +the hash via `update_512`. (The digest_512 function operates on an internal copy of the state and therefore does not invalidate the client-held state `p`.) */ -void Hacl_Streaming_SHA2_finish_512(Hacl_Streaming_MD_state_64 *p, uint8_t *dst); +void Hacl_Hash_SHA2_digest_512(Hacl_Streaming_MD_state_64 *state, uint8_t *output); /** -Free a state allocated with `create_in_512`. +Free a state allocated with `malloc_512`. This function is identical to the free function for SHA2_384. */ -void Hacl_Streaming_SHA2_free_512(Hacl_Streaming_MD_state_64 *s); +void Hacl_Hash_SHA2_free_512(Hacl_Streaming_MD_state_64 *state); /** -Hash `input`, of len `input_len`, into `dst`, an array of 64 bytes. +Hash `input`, of len `input_len`, into `output`, an array of 64 bytes. */ -void Hacl_Streaming_SHA2_hash_512(uint8_t *input, uint32_t input_len, uint8_t *dst); +void Hacl_Hash_SHA2_hash_512(uint8_t *output, uint8_t *input, uint32_t input_len); -Hacl_Streaming_MD_state_64 *Hacl_Streaming_SHA2_create_in_384(void); +Hacl_Streaming_MD_state_64 *Hacl_Hash_SHA2_malloc_384(void); -void Hacl_Streaming_SHA2_init_384(Hacl_Streaming_MD_state_64 *s); +void Hacl_Hash_SHA2_reset_384(Hacl_Streaming_MD_state_64 *state); Hacl_Streaming_Types_error_code -Hacl_Streaming_SHA2_update_384( - Hacl_Streaming_MD_state_64 *p, +Hacl_Hash_SHA2_update_384( + Hacl_Streaming_MD_state_64 *state, uint8_t *input, uint32_t input_len ); /** -Write the resulting hash into `dst`, an array of 48 bytes. The state remains -valid after a call to `finish_384`, meaning the user may feed more data into +Write the resulting hash into `output`, an array of 48 bytes. The state remains +valid after a call to `digest_384`, meaning the user may feed more data into the hash via `update_384`. */ -void Hacl_Streaming_SHA2_finish_384(Hacl_Streaming_MD_state_64 *p, uint8_t *dst); +void Hacl_Hash_SHA2_digest_384(Hacl_Streaming_MD_state_64 *state, uint8_t *output); -void Hacl_Streaming_SHA2_free_384(Hacl_Streaming_MD_state_64 *p); +void Hacl_Hash_SHA2_free_384(Hacl_Streaming_MD_state_64 *state); /** -Hash `input`, of len `input_len`, into `dst`, an array of 48 bytes. +Hash `input`, of len `input_len`, into `output`, an array of 48 bytes. */ -void Hacl_Streaming_SHA2_hash_384(uint8_t *input, uint32_t input_len, uint8_t *dst); +void Hacl_Hash_SHA2_hash_384(uint8_t *output, uint8_t *input, uint32_t input_len); #if defined(__cplusplus) } diff --git a/contrib/tools/python3/Modules/_hacl/Hacl_Hash_SHA3.c b/contrib/tools/python3/Modules/_hacl/Hacl_Hash_SHA3.c index b3febdfeb2..4f502866fe 100644 --- a/contrib/tools/python3/Modules/_hacl/Hacl_Hash_SHA3.c +++ b/contrib/tools/python3/Modules/_hacl/Hacl_Hash_SHA3.c @@ -31,27 +31,27 @@ static uint32_t block_len(Spec_Hash_Definitions_hash_alg a) { case Spec_Hash_Definitions_SHA3_224: { - return (uint32_t)144U; + return 144U; } case Spec_Hash_Definitions_SHA3_256: { - return (uint32_t)136U; + return 136U; } case Spec_Hash_Definitions_SHA3_384: { - return (uint32_t)104U; + return 104U; } case Spec_Hash_Definitions_SHA3_512: { - return (uint32_t)72U; + return 72U; } case Spec_Hash_Definitions_Shake128: { - return (uint32_t)168U; + return 168U; } case Spec_Hash_Definitions_Shake256: { - return (uint32_t)136U; + return 136U; } default: { @@ -67,19 +67,19 @@ static uint32_t hash_len(Spec_Hash_Definitions_hash_alg a) { case Spec_Hash_Definitions_SHA3_224: { - return (uint32_t)28U; + return 28U; } case Spec_Hash_Definitions_SHA3_256: { - return (uint32_t)32U; + return 32U; } case Spec_Hash_Definitions_SHA3_384: { - return (uint32_t)48U; + return 48U; } case Spec_Hash_Definitions_SHA3_512: { - return (uint32_t)64U; + return 64U; } default: { @@ -97,10 +97,10 @@ Hacl_Hash_SHA3_update_multi_sha3( uint32_t n_blocks ) { - for (uint32_t i = (uint32_t)0U; i < n_blocks; i++) + for (uint32_t i = 0U; i < n_blocks; i++) { uint8_t *block = blocks + i * block_len(a); - Hacl_Impl_SHA3_absorb_inner(block_len(a), block, s); + Hacl_Hash_SHA3_absorb_inner(block_len(a), block, s); } } @@ -115,139 +115,139 @@ Hacl_Hash_SHA3_update_last_sha3( uint8_t suffix; if (a == Spec_Hash_Definitions_Shake128 || a == Spec_Hash_Definitions_Shake256) { - suffix = (uint8_t)0x1fU; + suffix = 0x1fU; } else { - suffix = (uint8_t)0x06U; + suffix = 0x06U; } uint32_t len = block_len(a); if (input_len == len) { - Hacl_Impl_SHA3_absorb_inner(len, input, s); - uint8_t *uu____0 = input + input_len; + Hacl_Hash_SHA3_absorb_inner(len, input, s); uint8_t lastBlock_[200U] = { 0U }; uint8_t *lastBlock = lastBlock_; - memcpy(lastBlock, uu____0, (uint32_t)0U * sizeof (uint8_t)); + memcpy(lastBlock, input + input_len, 0U * sizeof (uint8_t)); lastBlock[0U] = suffix; - Hacl_Impl_SHA3_loadState(len, lastBlock, s); - if (!((suffix & (uint8_t)0x80U) == (uint8_t)0U) && (uint32_t)0U == len - (uint32_t)1U) + Hacl_Hash_SHA3_loadState(len, lastBlock, s); + if (!(((uint32_t)suffix & 0x80U) == 0U) && 0U == len - 1U) { - Hacl_Impl_SHA3_state_permute(s); + Hacl_Hash_SHA3_state_permute(s); } uint8_t nextBlock_[200U] = { 0U }; uint8_t *nextBlock = nextBlock_; - nextBlock[len - (uint32_t)1U] = (uint8_t)0x80U; - Hacl_Impl_SHA3_loadState(len, nextBlock, s); - Hacl_Impl_SHA3_state_permute(s); + nextBlock[len - 1U] = 0x80U; + Hacl_Hash_SHA3_loadState(len, nextBlock, s); + Hacl_Hash_SHA3_state_permute(s); return; } uint8_t lastBlock_[200U] = { 0U }; uint8_t *lastBlock = lastBlock_; memcpy(lastBlock, input, input_len * sizeof (uint8_t)); lastBlock[input_len] = suffix; - Hacl_Impl_SHA3_loadState(len, lastBlock, s); - if (!((suffix & (uint8_t)0x80U) == (uint8_t)0U) && input_len == len - (uint32_t)1U) + Hacl_Hash_SHA3_loadState(len, lastBlock, s); + if (!(((uint32_t)suffix & 0x80U) == 0U) && input_len == len - 1U) { - Hacl_Impl_SHA3_state_permute(s); + Hacl_Hash_SHA3_state_permute(s); } uint8_t nextBlock_[200U] = { 0U }; uint8_t *nextBlock = nextBlock_; - nextBlock[len - (uint32_t)1U] = (uint8_t)0x80U; - Hacl_Impl_SHA3_loadState(len, nextBlock, s); - Hacl_Impl_SHA3_state_permute(s); + nextBlock[len - 1U] = 0x80U; + Hacl_Hash_SHA3_loadState(len, nextBlock, s); + Hacl_Hash_SHA3_state_permute(s); } typedef struct hash_buf2_s { - Hacl_Streaming_Keccak_hash_buf fst; - Hacl_Streaming_Keccak_hash_buf snd; + Hacl_Hash_SHA3_hash_buf fst; + Hacl_Hash_SHA3_hash_buf snd; } hash_buf2; -Spec_Hash_Definitions_hash_alg Hacl_Streaming_Keccak_get_alg(Hacl_Streaming_Keccak_state *s) +Spec_Hash_Definitions_hash_alg Hacl_Hash_SHA3_get_alg(Hacl_Hash_SHA3_state_t *s) { - Hacl_Streaming_Keccak_state scrut = *s; - Hacl_Streaming_Keccak_hash_buf block_state = scrut.block_state; + Hacl_Hash_SHA3_hash_buf block_state = (*s).block_state; return block_state.fst; } -Hacl_Streaming_Keccak_state *Hacl_Streaming_Keccak_malloc(Spec_Hash_Definitions_hash_alg a) +Hacl_Hash_SHA3_state_t *Hacl_Hash_SHA3_malloc(Spec_Hash_Definitions_hash_alg a) { KRML_CHECK_SIZE(sizeof (uint8_t), block_len(a)); uint8_t *buf0 = (uint8_t *)KRML_HOST_CALLOC(block_len(a), sizeof (uint8_t)); - uint64_t *buf = (uint64_t *)KRML_HOST_CALLOC((uint32_t)25U, sizeof (uint64_t)); - Hacl_Streaming_Keccak_hash_buf block_state = { .fst = a, .snd = buf }; - Hacl_Streaming_Keccak_state - s = { .block_state = block_state, .buf = buf0, .total_len = (uint64_t)(uint32_t)0U }; - Hacl_Streaming_Keccak_state - *p = (Hacl_Streaming_Keccak_state *)KRML_HOST_MALLOC(sizeof (Hacl_Streaming_Keccak_state)); + uint64_t *buf = (uint64_t *)KRML_HOST_CALLOC(25U, sizeof (uint64_t)); + Hacl_Hash_SHA3_hash_buf block_state = { .fst = a, .snd = buf }; + Hacl_Hash_SHA3_state_t + s = { .block_state = block_state, .buf = buf0, .total_len = (uint64_t)0U }; + Hacl_Hash_SHA3_state_t + *p = (Hacl_Hash_SHA3_state_t *)KRML_HOST_MALLOC(sizeof (Hacl_Hash_SHA3_state_t)); p[0U] = s; uint64_t *s1 = block_state.snd; - memset(s1, 0U, (uint32_t)25U * sizeof (uint64_t)); + memset(s1, 0U, 25U * sizeof (uint64_t)); return p; } -void Hacl_Streaming_Keccak_free(Hacl_Streaming_Keccak_state *s) +void Hacl_Hash_SHA3_free(Hacl_Hash_SHA3_state_t *state) { - Hacl_Streaming_Keccak_state scrut = *s; + Hacl_Hash_SHA3_state_t scrut = *state; uint8_t *buf = scrut.buf; - Hacl_Streaming_Keccak_hash_buf block_state = scrut.block_state; - uint64_t *s1 = block_state.snd; - KRML_HOST_FREE(s1); - KRML_HOST_FREE(buf); + Hacl_Hash_SHA3_hash_buf block_state = scrut.block_state; + uint64_t *s = block_state.snd; KRML_HOST_FREE(s); + KRML_HOST_FREE(buf); + KRML_HOST_FREE(state); } -Hacl_Streaming_Keccak_state *Hacl_Streaming_Keccak_copy(Hacl_Streaming_Keccak_state *s0) +Hacl_Hash_SHA3_state_t *Hacl_Hash_SHA3_copy(Hacl_Hash_SHA3_state_t *state) { - Hacl_Streaming_Keccak_state scrut0 = *s0; - Hacl_Streaming_Keccak_hash_buf block_state0 = scrut0.block_state; + Hacl_Hash_SHA3_state_t scrut0 = *state; + Hacl_Hash_SHA3_hash_buf block_state0 = scrut0.block_state; uint8_t *buf0 = scrut0.buf; uint64_t total_len0 = scrut0.total_len; Spec_Hash_Definitions_hash_alg i = block_state0.fst; KRML_CHECK_SIZE(sizeof (uint8_t), block_len(i)); uint8_t *buf1 = (uint8_t *)KRML_HOST_CALLOC(block_len(i), sizeof (uint8_t)); memcpy(buf1, buf0, block_len(i) * sizeof (uint8_t)); - uint64_t *buf = (uint64_t *)KRML_HOST_CALLOC((uint32_t)25U, sizeof (uint64_t)); - Hacl_Streaming_Keccak_hash_buf block_state = { .fst = i, .snd = buf }; + uint64_t *buf = (uint64_t *)KRML_HOST_CALLOC(25U, sizeof (uint64_t)); + Hacl_Hash_SHA3_hash_buf block_state = { .fst = i, .snd = buf }; hash_buf2 scrut = { .fst = block_state0, .snd = block_state }; uint64_t *s_dst = scrut.snd.snd; uint64_t *s_src = scrut.fst.snd; - memcpy(s_dst, s_src, (uint32_t)25U * sizeof (uint64_t)); - Hacl_Streaming_Keccak_state + memcpy(s_dst, s_src, 25U * sizeof (uint64_t)); + Hacl_Hash_SHA3_state_t s = { .block_state = block_state, .buf = buf1, .total_len = total_len0 }; - Hacl_Streaming_Keccak_state - *p = (Hacl_Streaming_Keccak_state *)KRML_HOST_MALLOC(sizeof (Hacl_Streaming_Keccak_state)); + Hacl_Hash_SHA3_state_t + *p = (Hacl_Hash_SHA3_state_t *)KRML_HOST_MALLOC(sizeof (Hacl_Hash_SHA3_state_t)); p[0U] = s; return p; } -void Hacl_Streaming_Keccak_reset(Hacl_Streaming_Keccak_state *s) +void Hacl_Hash_SHA3_reset(Hacl_Hash_SHA3_state_t *state) { - Hacl_Streaming_Keccak_state scrut = *s; + Hacl_Hash_SHA3_state_t scrut = *state; uint8_t *buf = scrut.buf; - Hacl_Streaming_Keccak_hash_buf block_state = scrut.block_state; - uint64_t *s1 = block_state.snd; - memset(s1, 0U, (uint32_t)25U * sizeof (uint64_t)); - Hacl_Streaming_Keccak_state - tmp = { .block_state = block_state, .buf = buf, .total_len = (uint64_t)(uint32_t)0U }; - s[0U] = tmp; + Hacl_Hash_SHA3_hash_buf block_state = scrut.block_state; + Spec_Hash_Definitions_hash_alg i = block_state.fst; + KRML_MAYBE_UNUSED_VAR(i); + uint64_t *s = block_state.snd; + memset(s, 0U, 25U * sizeof (uint64_t)); + Hacl_Hash_SHA3_state_t + tmp = { .block_state = block_state, .buf = buf, .total_len = (uint64_t)0U }; + state[0U] = tmp; } Hacl_Streaming_Types_error_code -Hacl_Streaming_Keccak_update(Hacl_Streaming_Keccak_state *p, uint8_t *data, uint32_t len) +Hacl_Hash_SHA3_update(Hacl_Hash_SHA3_state_t *state, uint8_t *chunk, uint32_t chunk_len) { - Hacl_Streaming_Keccak_state s = *p; - Hacl_Streaming_Keccak_hash_buf block_state = s.block_state; + Hacl_Hash_SHA3_state_t s = *state; + Hacl_Hash_SHA3_hash_buf block_state = s.block_state; uint64_t total_len = s.total_len; Spec_Hash_Definitions_hash_alg i = block_state.fst; - if ((uint64_t)len > (uint64_t)0xFFFFFFFFFFFFFFFFU - total_len) + if ((uint64_t)chunk_len > 0xFFFFFFFFFFFFFFFFULL - total_len) { return Hacl_Streaming_Types_MaximumLengthExceeded; } uint32_t sz; - if (total_len % (uint64_t)block_len(i) == (uint64_t)0U && total_len > (uint64_t)0U) + if (total_len % (uint64_t)block_len(i) == 0ULL && total_len > 0ULL) { sz = block_len(i); } @@ -255,14 +255,14 @@ Hacl_Streaming_Keccak_update(Hacl_Streaming_Keccak_state *p, uint8_t *data, uint { sz = (uint32_t)(total_len % (uint64_t)block_len(i)); } - if (len <= block_len(i) - sz) + if (chunk_len <= block_len(i) - sz) { - Hacl_Streaming_Keccak_state s1 = *p; - Hacl_Streaming_Keccak_hash_buf block_state1 = s1.block_state; + Hacl_Hash_SHA3_state_t s1 = *state; + Hacl_Hash_SHA3_hash_buf block_state1 = s1.block_state; uint8_t *buf = s1.buf; uint64_t total_len1 = s1.total_len; uint32_t sz1; - if (total_len1 % (uint64_t)block_len(i) == (uint64_t)0U && total_len1 > (uint64_t)0U) + if (total_len1 % (uint64_t)block_len(i) == 0ULL && total_len1 > 0ULL) { sz1 = block_len(i); } @@ -271,26 +271,20 @@ Hacl_Streaming_Keccak_update(Hacl_Streaming_Keccak_state *p, uint8_t *data, uint sz1 = (uint32_t)(total_len1 % (uint64_t)block_len(i)); } uint8_t *buf2 = buf + sz1; - memcpy(buf2, data, len * sizeof (uint8_t)); - uint64_t total_len2 = total_len1 + (uint64_t)len; - *p + memcpy(buf2, chunk, chunk_len * sizeof (uint8_t)); + uint64_t total_len2 = total_len1 + (uint64_t)chunk_len; + *state = - ( - (Hacl_Streaming_Keccak_state){ - .block_state = block_state1, - .buf = buf, - .total_len = total_len2 - } - ); + ((Hacl_Hash_SHA3_state_t){ .block_state = block_state1, .buf = buf, .total_len = total_len2 }); } - else if (sz == (uint32_t)0U) + else if (sz == 0U) { - Hacl_Streaming_Keccak_state s1 = *p; - Hacl_Streaming_Keccak_hash_buf block_state1 = s1.block_state; + Hacl_Hash_SHA3_state_t s1 = *state; + Hacl_Hash_SHA3_hash_buf block_state1 = s1.block_state; uint8_t *buf = s1.buf; uint64_t total_len1 = s1.total_len; uint32_t sz1; - if (total_len1 % (uint64_t)block_len(i) == (uint64_t)0U && total_len1 > (uint64_t)0U) + if (total_len1 % (uint64_t)block_len(i) == 0ULL && total_len1 > 0ULL) { sz1 = block_len(i); } @@ -298,52 +292,52 @@ Hacl_Streaming_Keccak_update(Hacl_Streaming_Keccak_state *p, uint8_t *data, uint { sz1 = (uint32_t)(total_len1 % (uint64_t)block_len(i)); } - if (!(sz1 == (uint32_t)0U)) + if (!(sz1 == 0U)) { Spec_Hash_Definitions_hash_alg a1 = block_state1.fst; uint64_t *s2 = block_state1.snd; Hacl_Hash_SHA3_update_multi_sha3(a1, s2, buf, block_len(i) / block_len(a1)); } uint32_t ite; - if ((uint64_t)len % (uint64_t)block_len(i) == (uint64_t)0U && (uint64_t)len > (uint64_t)0U) + if ((uint64_t)chunk_len % (uint64_t)block_len(i) == 0ULL && (uint64_t)chunk_len > 0ULL) { ite = block_len(i); } else { - ite = (uint32_t)((uint64_t)len % (uint64_t)block_len(i)); + ite = (uint32_t)((uint64_t)chunk_len % (uint64_t)block_len(i)); } - uint32_t n_blocks = (len - ite) / block_len(i); + uint32_t n_blocks = (chunk_len - ite) / block_len(i); uint32_t data1_len = n_blocks * block_len(i); - uint32_t data2_len = len - data1_len; - uint8_t *data1 = data; - uint8_t *data2 = data + data1_len; + uint32_t data2_len = chunk_len - data1_len; + uint8_t *data1 = chunk; + uint8_t *data2 = chunk + data1_len; Spec_Hash_Definitions_hash_alg a1 = block_state1.fst; uint64_t *s2 = block_state1.snd; Hacl_Hash_SHA3_update_multi_sha3(a1, s2, data1, data1_len / block_len(a1)); uint8_t *dst = buf; memcpy(dst, data2, data2_len * sizeof (uint8_t)); - *p + *state = ( - (Hacl_Streaming_Keccak_state){ + (Hacl_Hash_SHA3_state_t){ .block_state = block_state1, .buf = buf, - .total_len = total_len1 + (uint64_t)len + .total_len = total_len1 + (uint64_t)chunk_len } ); } else { uint32_t diff = block_len(i) - sz; - uint8_t *data1 = data; - uint8_t *data2 = data + diff; - Hacl_Streaming_Keccak_state s1 = *p; - Hacl_Streaming_Keccak_hash_buf block_state10 = s1.block_state; + uint8_t *chunk1 = chunk; + uint8_t *chunk2 = chunk + diff; + Hacl_Hash_SHA3_state_t s1 = *state; + Hacl_Hash_SHA3_hash_buf block_state10 = s1.block_state; uint8_t *buf0 = s1.buf; uint64_t total_len10 = s1.total_len; uint32_t sz10; - if (total_len10 % (uint64_t)block_len(i) == (uint64_t)0U && total_len10 > (uint64_t)0U) + if (total_len10 % (uint64_t)block_len(i) == 0ULL && total_len10 > 0ULL) { sz10 = block_len(i); } @@ -352,23 +346,23 @@ Hacl_Streaming_Keccak_update(Hacl_Streaming_Keccak_state *p, uint8_t *data, uint sz10 = (uint32_t)(total_len10 % (uint64_t)block_len(i)); } uint8_t *buf2 = buf0 + sz10; - memcpy(buf2, data1, diff * sizeof (uint8_t)); + memcpy(buf2, chunk1, diff * sizeof (uint8_t)); uint64_t total_len2 = total_len10 + (uint64_t)diff; - *p + *state = ( - (Hacl_Streaming_Keccak_state){ + (Hacl_Hash_SHA3_state_t){ .block_state = block_state10, .buf = buf0, .total_len = total_len2 } ); - Hacl_Streaming_Keccak_state s10 = *p; - Hacl_Streaming_Keccak_hash_buf block_state1 = s10.block_state; + Hacl_Hash_SHA3_state_t s10 = *state; + Hacl_Hash_SHA3_hash_buf block_state1 = s10.block_state; uint8_t *buf = s10.buf; uint64_t total_len1 = s10.total_len; uint32_t sz1; - if (total_len1 % (uint64_t)block_len(i) == (uint64_t)0U && total_len1 > (uint64_t)0U) + if (total_len1 % (uint64_t)block_len(i) == 0ULL && total_len1 > 0ULL) { sz1 = block_len(i); } @@ -376,7 +370,7 @@ Hacl_Streaming_Keccak_update(Hacl_Streaming_Keccak_state *p, uint8_t *data, uint { sz1 = (uint32_t)(total_len1 % (uint64_t)block_len(i)); } - if (!(sz1 == (uint32_t)0U)) + if (!(sz1 == 0U)) { Spec_Hash_Definitions_hash_alg a1 = block_state1.fst; uint64_t *s2 = block_state1.snd; @@ -385,35 +379,35 @@ Hacl_Streaming_Keccak_update(Hacl_Streaming_Keccak_state *p, uint8_t *data, uint uint32_t ite; if ( - (uint64_t)(len - diff) + (uint64_t)(chunk_len - diff) % (uint64_t)block_len(i) - == (uint64_t)0U - && (uint64_t)(len - diff) > (uint64_t)0U + == 0ULL + && (uint64_t)(chunk_len - diff) > 0ULL ) { ite = block_len(i); } else { - ite = (uint32_t)((uint64_t)(len - diff) % (uint64_t)block_len(i)); + ite = (uint32_t)((uint64_t)(chunk_len - diff) % (uint64_t)block_len(i)); } - uint32_t n_blocks = (len - diff - ite) / block_len(i); + uint32_t n_blocks = (chunk_len - diff - ite) / block_len(i); uint32_t data1_len = n_blocks * block_len(i); - uint32_t data2_len = len - diff - data1_len; - uint8_t *data11 = data2; - uint8_t *data21 = data2 + data1_len; + uint32_t data2_len = chunk_len - diff - data1_len; + uint8_t *data1 = chunk2; + uint8_t *data2 = chunk2 + data1_len; Spec_Hash_Definitions_hash_alg a1 = block_state1.fst; uint64_t *s2 = block_state1.snd; - Hacl_Hash_SHA3_update_multi_sha3(a1, s2, data11, data1_len / block_len(a1)); + Hacl_Hash_SHA3_update_multi_sha3(a1, s2, data1, data1_len / block_len(a1)); uint8_t *dst = buf; - memcpy(dst, data21, data2_len * sizeof (uint8_t)); - *p + memcpy(dst, data2, data2_len * sizeof (uint8_t)); + *state = ( - (Hacl_Streaming_Keccak_state){ + (Hacl_Hash_SHA3_state_t){ .block_state = block_state1, .buf = buf, - .total_len = total_len1 + (uint64_t)(len - diff) + .total_len = total_len1 + (uint64_t)(chunk_len - diff) } ); } @@ -421,19 +415,19 @@ Hacl_Streaming_Keccak_update(Hacl_Streaming_Keccak_state *p, uint8_t *data, uint } static void -finish_( +digest_( Spec_Hash_Definitions_hash_alg a, - Hacl_Streaming_Keccak_state *p, - uint8_t *dst, + Hacl_Hash_SHA3_state_t *state, + uint8_t *output, uint32_t l ) { - Hacl_Streaming_Keccak_state scrut0 = *p; - Hacl_Streaming_Keccak_hash_buf block_state = scrut0.block_state; + Hacl_Hash_SHA3_state_t scrut0 = *state; + Hacl_Hash_SHA3_hash_buf block_state = scrut0.block_state; uint8_t *buf_ = scrut0.buf; uint64_t total_len = scrut0.total_len; uint32_t r; - if (total_len % (uint64_t)block_len(a) == (uint64_t)0U && total_len > (uint64_t)0U) + if (total_len % (uint64_t)block_len(a) == 0ULL && total_len > 0ULL) { r = block_len(a); } @@ -443,25 +437,25 @@ finish_( } uint8_t *buf_1 = buf_; uint64_t buf[25U] = { 0U }; - Hacl_Streaming_Keccak_hash_buf tmp_block_state = { .fst = a, .snd = buf }; + Hacl_Hash_SHA3_hash_buf tmp_block_state = { .fst = a, .snd = buf }; hash_buf2 scrut = { .fst = block_state, .snd = tmp_block_state }; uint64_t *s_dst = scrut.snd.snd; uint64_t *s_src = scrut.fst.snd; - memcpy(s_dst, s_src, (uint32_t)25U * sizeof (uint64_t)); - uint32_t ite0; - if (r % block_len(a) == (uint32_t)0U && r > (uint32_t)0U) + memcpy(s_dst, s_src, 25U * sizeof (uint64_t)); + uint32_t ite; + if (r % block_len(a) == 0U && r > 0U) { - ite0 = block_len(a); + ite = block_len(a); } else { - ite0 = r % block_len(a); + ite = r % block_len(a); } - uint8_t *buf_last = buf_1 + r - ite0; + uint8_t *buf_last = buf_1 + r - ite; uint8_t *buf_multi = buf_1; Spec_Hash_Definitions_hash_alg a1 = tmp_block_state.fst; uint64_t *s0 = tmp_block_state.snd; - Hacl_Hash_SHA3_update_multi_sha3(a1, s0, buf_multi, (uint32_t)0U / block_len(a1)); + Hacl_Hash_SHA3_update_multi_sha3(a1, s0, buf_multi, 0U / block_len(a1)); Spec_Hash_Definitions_hash_alg a10 = tmp_block_state.fst; uint64_t *s1 = tmp_block_state.snd; Hacl_Hash_SHA3_update_last_sha3(a10, s1, buf_last, r); @@ -469,267 +463,182 @@ finish_( uint64_t *s = tmp_block_state.snd; if (a11 == Spec_Hash_Definitions_Shake128 || a11 == Spec_Hash_Definitions_Shake256) { - uint32_t ite; - if (a11 == Spec_Hash_Definitions_Shake128 || a11 == Spec_Hash_Definitions_Shake256) - { - ite = l; - } - else - { - ite = hash_len(a11); - } - Hacl_Impl_SHA3_squeeze(s, block_len(a11), ite, dst); + Hacl_Hash_SHA3_squeeze0(s, block_len(a11), l, output); return; } - Hacl_Impl_SHA3_squeeze(s, block_len(a11), hash_len(a11), dst); + Hacl_Hash_SHA3_squeeze0(s, block_len(a11), hash_len(a11), output); } Hacl_Streaming_Types_error_code -Hacl_Streaming_Keccak_finish(Hacl_Streaming_Keccak_state *s, uint8_t *dst) +Hacl_Hash_SHA3_digest(Hacl_Hash_SHA3_state_t *state, uint8_t *output) { - Spec_Hash_Definitions_hash_alg a1 = Hacl_Streaming_Keccak_get_alg(s); + Spec_Hash_Definitions_hash_alg a1 = Hacl_Hash_SHA3_get_alg(state); if (a1 == Spec_Hash_Definitions_Shake128 || a1 == Spec_Hash_Definitions_Shake256) { return Hacl_Streaming_Types_InvalidAlgorithm; } - finish_(a1, s, dst, hash_len(a1)); + digest_(a1, state, output, hash_len(a1)); return Hacl_Streaming_Types_Success; } Hacl_Streaming_Types_error_code -Hacl_Streaming_Keccak_squeeze(Hacl_Streaming_Keccak_state *s, uint8_t *dst, uint32_t l) +Hacl_Hash_SHA3_squeeze(Hacl_Hash_SHA3_state_t *s, uint8_t *dst, uint32_t l) { - Spec_Hash_Definitions_hash_alg a1 = Hacl_Streaming_Keccak_get_alg(s); + Spec_Hash_Definitions_hash_alg a1 = Hacl_Hash_SHA3_get_alg(s); if (!(a1 == Spec_Hash_Definitions_Shake128 || a1 == Spec_Hash_Definitions_Shake256)) { return Hacl_Streaming_Types_InvalidAlgorithm; } - if (l == (uint32_t)0U) + if (l == 0U) { return Hacl_Streaming_Types_InvalidLength; } - finish_(a1, s, dst, l); + digest_(a1, s, dst, l); return Hacl_Streaming_Types_Success; } -uint32_t Hacl_Streaming_Keccak_block_len(Hacl_Streaming_Keccak_state *s) +uint32_t Hacl_Hash_SHA3_block_len(Hacl_Hash_SHA3_state_t *s) { - Spec_Hash_Definitions_hash_alg a1 = Hacl_Streaming_Keccak_get_alg(s); + Spec_Hash_Definitions_hash_alg a1 = Hacl_Hash_SHA3_get_alg(s); return block_len(a1); } -uint32_t Hacl_Streaming_Keccak_hash_len(Hacl_Streaming_Keccak_state *s) +uint32_t Hacl_Hash_SHA3_hash_len(Hacl_Hash_SHA3_state_t *s) { - Spec_Hash_Definitions_hash_alg a1 = Hacl_Streaming_Keccak_get_alg(s); + Spec_Hash_Definitions_hash_alg a1 = Hacl_Hash_SHA3_get_alg(s); return hash_len(a1); } -bool Hacl_Streaming_Keccak_is_shake(Hacl_Streaming_Keccak_state *s) +bool Hacl_Hash_SHA3_is_shake(Hacl_Hash_SHA3_state_t *s) { - Spec_Hash_Definitions_hash_alg uu____0 = Hacl_Streaming_Keccak_get_alg(s); + Spec_Hash_Definitions_hash_alg uu____0 = Hacl_Hash_SHA3_get_alg(s); return uu____0 == Spec_Hash_Definitions_Shake128 || uu____0 == Spec_Hash_Definitions_Shake256; } void -Hacl_SHA3_shake128_hacl( +Hacl_Hash_SHA3_shake128_hacl( uint32_t inputByteLen, uint8_t *input, uint32_t outputByteLen, uint8_t *output ) { - Hacl_Impl_SHA3_keccak((uint32_t)1344U, - (uint32_t)256U, - inputByteLen, - input, - (uint8_t)0x1FU, - outputByteLen, - output); + Hacl_Hash_SHA3_keccak(1344U, 256U, inputByteLen, input, 0x1FU, outputByteLen, output); } void -Hacl_SHA3_shake256_hacl( +Hacl_Hash_SHA3_shake256_hacl( uint32_t inputByteLen, uint8_t *input, uint32_t outputByteLen, uint8_t *output ) { - Hacl_Impl_SHA3_keccak((uint32_t)1088U, - (uint32_t)512U, - inputByteLen, - input, - (uint8_t)0x1FU, - outputByteLen, - output); + Hacl_Hash_SHA3_keccak(1088U, 512U, inputByteLen, input, 0x1FU, outputByteLen, output); } -void Hacl_SHA3_sha3_224(uint32_t inputByteLen, uint8_t *input, uint8_t *output) +void Hacl_Hash_SHA3_sha3_224(uint8_t *output, uint8_t *input, uint32_t input_len) { - Hacl_Impl_SHA3_keccak((uint32_t)1152U, - (uint32_t)448U, - inputByteLen, - input, - (uint8_t)0x06U, - (uint32_t)28U, - output); + Hacl_Hash_SHA3_keccak(1152U, 448U, input_len, input, 0x06U, 28U, output); } -void Hacl_SHA3_sha3_256(uint32_t inputByteLen, uint8_t *input, uint8_t *output) +void Hacl_Hash_SHA3_sha3_256(uint8_t *output, uint8_t *input, uint32_t input_len) { - Hacl_Impl_SHA3_keccak((uint32_t)1088U, - (uint32_t)512U, - inputByteLen, - input, - (uint8_t)0x06U, - (uint32_t)32U, - output); + Hacl_Hash_SHA3_keccak(1088U, 512U, input_len, input, 0x06U, 32U, output); } -void Hacl_SHA3_sha3_384(uint32_t inputByteLen, uint8_t *input, uint8_t *output) +void Hacl_Hash_SHA3_sha3_384(uint8_t *output, uint8_t *input, uint32_t input_len) { - Hacl_Impl_SHA3_keccak((uint32_t)832U, - (uint32_t)768U, - inputByteLen, - input, - (uint8_t)0x06U, - (uint32_t)48U, - output); + Hacl_Hash_SHA3_keccak(832U, 768U, input_len, input, 0x06U, 48U, output); } -void Hacl_SHA3_sha3_512(uint32_t inputByteLen, uint8_t *input, uint8_t *output) +void Hacl_Hash_SHA3_sha3_512(uint8_t *output, uint8_t *input, uint32_t input_len) { - Hacl_Impl_SHA3_keccak((uint32_t)576U, - (uint32_t)1024U, - inputByteLen, - input, - (uint8_t)0x06U, - (uint32_t)64U, - output); + Hacl_Hash_SHA3_keccak(576U, 1024U, input_len, input, 0x06U, 64U, output); } static const uint32_t keccak_rotc[24U] = { - (uint32_t)1U, (uint32_t)3U, (uint32_t)6U, (uint32_t)10U, (uint32_t)15U, (uint32_t)21U, - (uint32_t)28U, (uint32_t)36U, (uint32_t)45U, (uint32_t)55U, (uint32_t)2U, (uint32_t)14U, - (uint32_t)27U, (uint32_t)41U, (uint32_t)56U, (uint32_t)8U, (uint32_t)25U, (uint32_t)43U, - (uint32_t)62U, (uint32_t)18U, (uint32_t)39U, (uint32_t)61U, (uint32_t)20U, (uint32_t)44U + 1U, 3U, 6U, 10U, 15U, 21U, 28U, 36U, 45U, 55U, 2U, 14U, 27U, 41U, 56U, 8U, 25U, 43U, 62U, 18U, + 39U, 61U, 20U, 44U }; static const uint32_t keccak_piln[24U] = { - (uint32_t)10U, (uint32_t)7U, (uint32_t)11U, (uint32_t)17U, (uint32_t)18U, (uint32_t)3U, - (uint32_t)5U, (uint32_t)16U, (uint32_t)8U, (uint32_t)21U, (uint32_t)24U, (uint32_t)4U, - (uint32_t)15U, (uint32_t)23U, (uint32_t)19U, (uint32_t)13U, (uint32_t)12U, (uint32_t)2U, - (uint32_t)20U, (uint32_t)14U, (uint32_t)22U, (uint32_t)9U, (uint32_t)6U, (uint32_t)1U + 10U, 7U, 11U, 17U, 18U, 3U, 5U, 16U, 8U, 21U, 24U, 4U, 15U, 23U, 19U, 13U, 12U, 2U, 20U, 14U, + 22U, 9U, 6U, 1U }; static const uint64_t keccak_rndc[24U] = { - (uint64_t)0x0000000000000001U, (uint64_t)0x0000000000008082U, (uint64_t)0x800000000000808aU, - (uint64_t)0x8000000080008000U, (uint64_t)0x000000000000808bU, (uint64_t)0x0000000080000001U, - (uint64_t)0x8000000080008081U, (uint64_t)0x8000000000008009U, (uint64_t)0x000000000000008aU, - (uint64_t)0x0000000000000088U, (uint64_t)0x0000000080008009U, (uint64_t)0x000000008000000aU, - (uint64_t)0x000000008000808bU, (uint64_t)0x800000000000008bU, (uint64_t)0x8000000000008089U, - (uint64_t)0x8000000000008003U, (uint64_t)0x8000000000008002U, (uint64_t)0x8000000000000080U, - (uint64_t)0x000000000000800aU, (uint64_t)0x800000008000000aU, (uint64_t)0x8000000080008081U, - (uint64_t)0x8000000000008080U, (uint64_t)0x0000000080000001U, (uint64_t)0x8000000080008008U + 0x0000000000000001ULL, 0x0000000000008082ULL, 0x800000000000808aULL, 0x8000000080008000ULL, + 0x000000000000808bULL, 0x0000000080000001ULL, 0x8000000080008081ULL, 0x8000000000008009ULL, + 0x000000000000008aULL, 0x0000000000000088ULL, 0x0000000080008009ULL, 0x000000008000000aULL, + 0x000000008000808bULL, 0x800000000000008bULL, 0x8000000000008089ULL, 0x8000000000008003ULL, + 0x8000000000008002ULL, 0x8000000000000080ULL, 0x000000000000800aULL, 0x800000008000000aULL, + 0x8000000080008081ULL, 0x8000000000008080ULL, 0x0000000080000001ULL, 0x8000000080008008ULL }; -void Hacl_Impl_SHA3_state_permute(uint64_t *s) +void Hacl_Hash_SHA3_state_permute(uint64_t *s) { - for (uint32_t i0 = (uint32_t)0U; i0 < (uint32_t)24U; i0++) + for (uint32_t i0 = 0U; i0 < 24U; i0++) { uint64_t _C[5U] = { 0U }; KRML_MAYBE_FOR5(i, - (uint32_t)0U, - (uint32_t)5U, - (uint32_t)1U, - _C[i] = - s[i - + (uint32_t)0U] - ^ - (s[i - + (uint32_t)5U] - ^ (s[i + (uint32_t)10U] ^ (s[i + (uint32_t)15U] ^ s[i + (uint32_t)20U])));); + 0U, + 5U, + 1U, + _C[i] = s[i + 0U] ^ (s[i + 5U] ^ (s[i + 10U] ^ (s[i + 15U] ^ s[i + 20U])));); KRML_MAYBE_FOR5(i1, - (uint32_t)0U, - (uint32_t)5U, - (uint32_t)1U, - uint64_t uu____0 = _C[(i1 + (uint32_t)1U) % (uint32_t)5U]; - uint64_t - _D = - _C[(i1 + (uint32_t)4U) - % (uint32_t)5U] - ^ (uu____0 << (uint32_t)1U | uu____0 >> (uint32_t)63U); - KRML_MAYBE_FOR5(i, - (uint32_t)0U, - (uint32_t)5U, - (uint32_t)1U, - s[i1 + (uint32_t)5U * i] = s[i1 + (uint32_t)5U * i] ^ _D;);); + 0U, + 5U, + 1U, + uint64_t uu____0 = _C[(i1 + 1U) % 5U]; + uint64_t _D = _C[(i1 + 4U) % 5U] ^ (uu____0 << 1U | uu____0 >> 63U); + KRML_MAYBE_FOR5(i, 0U, 5U, 1U, s[i1 + 5U * i] = s[i1 + 5U * i] ^ _D;);); uint64_t x = s[1U]; uint64_t current = x; - for (uint32_t i = (uint32_t)0U; i < (uint32_t)24U; i++) + for (uint32_t i = 0U; i < 24U; i++) { uint32_t _Y = keccak_piln[i]; uint32_t r = keccak_rotc[i]; uint64_t temp = s[_Y]; uint64_t uu____1 = current; - s[_Y] = uu____1 << r | uu____1 >> ((uint32_t)64U - r); + s[_Y] = uu____1 << r | uu____1 >> (64U - r); current = temp; } KRML_MAYBE_FOR5(i, - (uint32_t)0U, - (uint32_t)5U, - (uint32_t)1U, - uint64_t - v0 = - s[(uint32_t)0U - + (uint32_t)5U * i] - ^ (~s[(uint32_t)1U + (uint32_t)5U * i] & s[(uint32_t)2U + (uint32_t)5U * i]); - uint64_t - v1 = - s[(uint32_t)1U - + (uint32_t)5U * i] - ^ (~s[(uint32_t)2U + (uint32_t)5U * i] & s[(uint32_t)3U + (uint32_t)5U * i]); - uint64_t - v2 = - s[(uint32_t)2U - + (uint32_t)5U * i] - ^ (~s[(uint32_t)3U + (uint32_t)5U * i] & s[(uint32_t)4U + (uint32_t)5U * i]); - uint64_t - v3 = - s[(uint32_t)3U - + (uint32_t)5U * i] - ^ (~s[(uint32_t)4U + (uint32_t)5U * i] & s[(uint32_t)0U + (uint32_t)5U * i]); - uint64_t - v4 = - s[(uint32_t)4U - + (uint32_t)5U * i] - ^ (~s[(uint32_t)0U + (uint32_t)5U * i] & s[(uint32_t)1U + (uint32_t)5U * i]); - s[(uint32_t)0U + (uint32_t)5U * i] = v0; - s[(uint32_t)1U + (uint32_t)5U * i] = v1; - s[(uint32_t)2U + (uint32_t)5U * i] = v2; - s[(uint32_t)3U + (uint32_t)5U * i] = v3; - s[(uint32_t)4U + (uint32_t)5U * i] = v4;); + 0U, + 5U, + 1U, + uint64_t v0 = s[0U + 5U * i] ^ (~s[1U + 5U * i] & s[2U + 5U * i]); + uint64_t v1 = s[1U + 5U * i] ^ (~s[2U + 5U * i] & s[3U + 5U * i]); + uint64_t v2 = s[2U + 5U * i] ^ (~s[3U + 5U * i] & s[4U + 5U * i]); + uint64_t v3 = s[3U + 5U * i] ^ (~s[4U + 5U * i] & s[0U + 5U * i]); + uint64_t v4 = s[4U + 5U * i] ^ (~s[0U + 5U * i] & s[1U + 5U * i]); + s[0U + 5U * i] = v0; + s[1U + 5U * i] = v1; + s[2U + 5U * i] = v2; + s[3U + 5U * i] = v3; + s[4U + 5U * i] = v4;); uint64_t c = keccak_rndc[i0]; s[0U] = s[0U] ^ c; } } -void Hacl_Impl_SHA3_loadState(uint32_t rateInBytes, uint8_t *input, uint64_t *s) +void Hacl_Hash_SHA3_loadState(uint32_t rateInBytes, uint8_t *input, uint64_t *s) { uint8_t block[200U] = { 0U }; memcpy(block, input, rateInBytes * sizeof (uint8_t)); - for (uint32_t i = (uint32_t)0U; i < (uint32_t)25U; i++) + for (uint32_t i = 0U; i < 25U; i++) { - uint64_t u = load64_le(block + i * (uint32_t)8U); + uint64_t u = load64_le(block + i * 8U); uint64_t x = u; s[i] = s[i] ^ x; } @@ -738,18 +647,18 @@ void Hacl_Impl_SHA3_loadState(uint32_t rateInBytes, uint8_t *input, uint64_t *s) static void storeState(uint32_t rateInBytes, uint64_t *s, uint8_t *res) { uint8_t block[200U] = { 0U }; - for (uint32_t i = (uint32_t)0U; i < (uint32_t)25U; i++) + for (uint32_t i = 0U; i < 25U; i++) { uint64_t sj = s[i]; - store64_le(block + i * (uint32_t)8U, sj); + store64_le(block + i * 8U, sj); } memcpy(res, block, rateInBytes * sizeof (uint8_t)); } -void Hacl_Impl_SHA3_absorb_inner(uint32_t rateInBytes, uint8_t *block, uint64_t *s) +void Hacl_Hash_SHA3_absorb_inner(uint32_t rateInBytes, uint8_t *block, uint64_t *s) { - Hacl_Impl_SHA3_loadState(rateInBytes, block, s); - Hacl_Impl_SHA3_state_permute(s); + Hacl_Hash_SHA3_loadState(rateInBytes, block, s); + Hacl_Hash_SHA3_state_permute(s); } static void @@ -763,30 +672,30 @@ absorb( { uint32_t n_blocks = inputByteLen / rateInBytes; uint32_t rem = inputByteLen % rateInBytes; - for (uint32_t i = (uint32_t)0U; i < n_blocks; i++) + for (uint32_t i = 0U; i < n_blocks; i++) { uint8_t *block = input + i * rateInBytes; - Hacl_Impl_SHA3_absorb_inner(rateInBytes, block, s); + Hacl_Hash_SHA3_absorb_inner(rateInBytes, block, s); } uint8_t *last = input + n_blocks * rateInBytes; uint8_t lastBlock_[200U] = { 0U }; uint8_t *lastBlock = lastBlock_; memcpy(lastBlock, last, rem * sizeof (uint8_t)); lastBlock[rem] = delimitedSuffix; - Hacl_Impl_SHA3_loadState(rateInBytes, lastBlock, s); - if (!((delimitedSuffix & (uint8_t)0x80U) == (uint8_t)0U) && rem == rateInBytes - (uint32_t)1U) + Hacl_Hash_SHA3_loadState(rateInBytes, lastBlock, s); + if (!(((uint32_t)delimitedSuffix & 0x80U) == 0U) && rem == rateInBytes - 1U) { - Hacl_Impl_SHA3_state_permute(s); + Hacl_Hash_SHA3_state_permute(s); } uint8_t nextBlock_[200U] = { 0U }; uint8_t *nextBlock = nextBlock_; - nextBlock[rateInBytes - (uint32_t)1U] = (uint8_t)0x80U; - Hacl_Impl_SHA3_loadState(rateInBytes, nextBlock, s); - Hacl_Impl_SHA3_state_permute(s); + nextBlock[rateInBytes - 1U] = 0x80U; + Hacl_Hash_SHA3_loadState(rateInBytes, nextBlock, s); + Hacl_Hash_SHA3_state_permute(s); } void -Hacl_Impl_SHA3_squeeze( +Hacl_Hash_SHA3_squeeze0( uint64_t *s, uint32_t rateInBytes, uint32_t outputByteLen, @@ -797,16 +706,16 @@ Hacl_Impl_SHA3_squeeze( uint32_t remOut = outputByteLen % rateInBytes; uint8_t *last = output + outputByteLen - remOut; uint8_t *blocks = output; - for (uint32_t i = (uint32_t)0U; i < outBlocks; i++) + for (uint32_t i = 0U; i < outBlocks; i++) { storeState(rateInBytes, s, blocks + i * rateInBytes); - Hacl_Impl_SHA3_state_permute(s); + Hacl_Hash_SHA3_state_permute(s); } storeState(remOut, s, last); } void -Hacl_Impl_SHA3_keccak( +Hacl_Hash_SHA3_keccak( uint32_t rate, uint32_t capacity, uint32_t inputByteLen, @@ -816,9 +725,10 @@ Hacl_Impl_SHA3_keccak( uint8_t *output ) { - uint32_t rateInBytes = rate / (uint32_t)8U; + KRML_MAYBE_UNUSED_VAR(capacity); + uint32_t rateInBytes = rate / 8U; uint64_t s[25U] = { 0U }; absorb(s, rateInBytes, inputByteLen, input, delimitedSuffix); - Hacl_Impl_SHA3_squeeze(s, rateInBytes, outputByteLen, output); + Hacl_Hash_SHA3_squeeze0(s, rateInBytes, outputByteLen, output); } diff --git a/contrib/tools/python3/Modules/_hacl/Hacl_Hash_SHA3.h b/contrib/tools/python3/Modules/_hacl/Hacl_Hash_SHA3.h index 681b6af4a8..678e9f2fbe 100644 --- a/contrib/tools/python3/Modules/_hacl/Hacl_Hash_SHA3.h +++ b/contrib/tools/python3/Modules/_hacl/Hacl_Hash_SHA3.h @@ -31,54 +31,55 @@ extern "C" { #endif #include <string.h> +#include "python_hacl_namespaces.h" #include "krml/types.h" #include "krml/lowstar_endianness.h" #include "krml/internal/target.h" #include "Hacl_Streaming_Types.h" -typedef struct Hacl_Streaming_Keccak_hash_buf_s +typedef struct Hacl_Hash_SHA3_hash_buf_s { Spec_Hash_Definitions_hash_alg fst; uint64_t *snd; } -Hacl_Streaming_Keccak_hash_buf; +Hacl_Hash_SHA3_hash_buf; -typedef struct Hacl_Streaming_Keccak_state_s +typedef struct Hacl_Hash_SHA3_state_t_s { - Hacl_Streaming_Keccak_hash_buf block_state; + Hacl_Hash_SHA3_hash_buf block_state; uint8_t *buf; uint64_t total_len; } -Hacl_Streaming_Keccak_state; +Hacl_Hash_SHA3_state_t; -Spec_Hash_Definitions_hash_alg Hacl_Streaming_Keccak_get_alg(Hacl_Streaming_Keccak_state *s); +Spec_Hash_Definitions_hash_alg Hacl_Hash_SHA3_get_alg(Hacl_Hash_SHA3_state_t *s); -Hacl_Streaming_Keccak_state *Hacl_Streaming_Keccak_malloc(Spec_Hash_Definitions_hash_alg a); +Hacl_Hash_SHA3_state_t *Hacl_Hash_SHA3_malloc(Spec_Hash_Definitions_hash_alg a); -void Hacl_Streaming_Keccak_free(Hacl_Streaming_Keccak_state *s); +void Hacl_Hash_SHA3_free(Hacl_Hash_SHA3_state_t *state); -Hacl_Streaming_Keccak_state *Hacl_Streaming_Keccak_copy(Hacl_Streaming_Keccak_state *s0); +Hacl_Hash_SHA3_state_t *Hacl_Hash_SHA3_copy(Hacl_Hash_SHA3_state_t *state); -void Hacl_Streaming_Keccak_reset(Hacl_Streaming_Keccak_state *s); +void Hacl_Hash_SHA3_reset(Hacl_Hash_SHA3_state_t *state); Hacl_Streaming_Types_error_code -Hacl_Streaming_Keccak_update(Hacl_Streaming_Keccak_state *p, uint8_t *data, uint32_t len); +Hacl_Hash_SHA3_update(Hacl_Hash_SHA3_state_t *state, uint8_t *chunk, uint32_t chunk_len); Hacl_Streaming_Types_error_code -Hacl_Streaming_Keccak_finish(Hacl_Streaming_Keccak_state *s, uint8_t *dst); +Hacl_Hash_SHA3_digest(Hacl_Hash_SHA3_state_t *state, uint8_t *output); Hacl_Streaming_Types_error_code -Hacl_Streaming_Keccak_squeeze(Hacl_Streaming_Keccak_state *s, uint8_t *dst, uint32_t l); +Hacl_Hash_SHA3_squeeze(Hacl_Hash_SHA3_state_t *s, uint8_t *dst, uint32_t l); -uint32_t Hacl_Streaming_Keccak_block_len(Hacl_Streaming_Keccak_state *s); +uint32_t Hacl_Hash_SHA3_block_len(Hacl_Hash_SHA3_state_t *s); -uint32_t Hacl_Streaming_Keccak_hash_len(Hacl_Streaming_Keccak_state *s); +uint32_t Hacl_Hash_SHA3_hash_len(Hacl_Hash_SHA3_state_t *s); -bool Hacl_Streaming_Keccak_is_shake(Hacl_Streaming_Keccak_state *s); +bool Hacl_Hash_SHA3_is_shake(Hacl_Hash_SHA3_state_t *s); void -Hacl_SHA3_shake128_hacl( +Hacl_Hash_SHA3_shake128_hacl( uint32_t inputByteLen, uint8_t *input, uint32_t outputByteLen, @@ -86,25 +87,25 @@ Hacl_SHA3_shake128_hacl( ); void -Hacl_SHA3_shake256_hacl( +Hacl_Hash_SHA3_shake256_hacl( uint32_t inputByteLen, uint8_t *input, uint32_t outputByteLen, uint8_t *output ); -void Hacl_SHA3_sha3_224(uint32_t inputByteLen, uint8_t *input, uint8_t *output); +void Hacl_Hash_SHA3_sha3_224(uint8_t *output, uint8_t *input, uint32_t input_len); -void Hacl_SHA3_sha3_256(uint32_t inputByteLen, uint8_t *input, uint8_t *output); +void Hacl_Hash_SHA3_sha3_256(uint8_t *output, uint8_t *input, uint32_t input_len); -void Hacl_SHA3_sha3_384(uint32_t inputByteLen, uint8_t *input, uint8_t *output); +void Hacl_Hash_SHA3_sha3_384(uint8_t *output, uint8_t *input, uint32_t input_len); -void Hacl_SHA3_sha3_512(uint32_t inputByteLen, uint8_t *input, uint8_t *output); +void Hacl_Hash_SHA3_sha3_512(uint8_t *output, uint8_t *input, uint32_t input_len); -void Hacl_Impl_SHA3_absorb_inner(uint32_t rateInBytes, uint8_t *block, uint64_t *s); +void Hacl_Hash_SHA3_absorb_inner(uint32_t rateInBytes, uint8_t *block, uint64_t *s); void -Hacl_Impl_SHA3_squeeze( +Hacl_Hash_SHA3_squeeze0( uint64_t *s, uint32_t rateInBytes, uint32_t outputByteLen, @@ -112,7 +113,7 @@ Hacl_Impl_SHA3_squeeze( ); void -Hacl_Impl_SHA3_keccak( +Hacl_Hash_SHA3_keccak( uint32_t rate, uint32_t capacity, uint32_t inputByteLen, diff --git a/contrib/tools/python3/Modules/_hacl/include/krml/FStar_UInt128_Verified.h b/contrib/tools/python3/Modules/_hacl/include/krml/FStar_UInt128_Verified.h index 3d36d44073..bdf25898f2 100644 --- a/contrib/tools/python3/Modules/_hacl/include/krml/FStar_UInt128_Verified.h +++ b/contrib/tools/python3/Modules/_hacl/include/krml/FStar_UInt128_Verified.h @@ -15,7 +15,7 @@ static inline uint64_t FStar_UInt128_constant_time_carry(uint64_t a, uint64_t b) { - return (a ^ ((a ^ b) | ((a - b) ^ b))) >> (uint32_t)63U; + return (a ^ ((a ^ b) | ((a - b) ^ b))) >> 63U; } static inline uint64_t FStar_UInt128_carry(uint64_t a, uint64_t b) @@ -118,7 +118,7 @@ static inline FStar_UInt128_uint128 FStar_UInt128_lognot(FStar_UInt128_uint128 a return lit; } -static uint32_t FStar_UInt128_u32_64 = (uint32_t)64U; +static uint32_t FStar_UInt128_u32_64 = 64U; static inline uint64_t FStar_UInt128_add_u64_shift_left(uint64_t hi, uint64_t lo, uint32_t s) { @@ -134,7 +134,7 @@ FStar_UInt128_add_u64_shift_left_respec(uint64_t hi, uint64_t lo, uint32_t s) static inline FStar_UInt128_uint128 FStar_UInt128_shift_left_small(FStar_UInt128_uint128 a, uint32_t s) { - if (s == (uint32_t)0U) + if (s == 0U) { return a; } @@ -151,7 +151,7 @@ static inline FStar_UInt128_uint128 FStar_UInt128_shift_left_large(FStar_UInt128_uint128 a, uint32_t s) { FStar_UInt128_uint128 lit; - lit.low = (uint64_t)0U; + lit.low = 0ULL; lit.high = a.low << (s - FStar_UInt128_u32_64); return lit; } @@ -183,7 +183,7 @@ FStar_UInt128_add_u64_shift_right_respec(uint64_t hi, uint64_t lo, uint32_t s) static inline FStar_UInt128_uint128 FStar_UInt128_shift_right_small(FStar_UInt128_uint128 a, uint32_t s) { - if (s == (uint32_t)0U) + if (s == 0U) { return a; } @@ -201,7 +201,7 @@ FStar_UInt128_shift_right_large(FStar_UInt128_uint128 a, uint32_t s) { FStar_UInt128_uint128 lit; lit.low = a.high >> (s - FStar_UInt128_u32_64); - lit.high = (uint64_t)0U; + lit.high = 0ULL; return lit; } @@ -269,7 +269,7 @@ static inline FStar_UInt128_uint128 FStar_UInt128_uint64_to_uint128(uint64_t a) { FStar_UInt128_uint128 lit; lit.low = a; - lit.high = (uint64_t)0U; + lit.high = 0ULL; return lit; } @@ -280,10 +280,10 @@ static inline uint64_t FStar_UInt128_uint128_to_uint64(FStar_UInt128_uint128 a) static inline uint64_t FStar_UInt128_u64_mod_32(uint64_t a) { - return a & (uint64_t)0xffffffffU; + return a & 0xffffffffULL; } -static uint32_t FStar_UInt128_u32_32 = (uint32_t)32U; +static uint32_t FStar_UInt128_u32_32 = 32U; static inline uint64_t FStar_UInt128_u32_combine(uint64_t hi, uint64_t lo) { diff --git a/contrib/tools/python3/Modules/_hacl/include/krml/FStar_UInt_8_16_32_64.h b/contrib/tools/python3/Modules/_hacl/include/krml/FStar_UInt_8_16_32_64.h index a56c7d6134..1bdec972a2 100644 --- a/contrib/tools/python3/Modules/_hacl/include/krml/FStar_UInt_8_16_32_64.h +++ b/contrib/tools/python3/Modules/_hacl/include/krml/FStar_UInt_8_16_32_64.h @@ -14,16 +14,16 @@ #include "krml/types.h" #include "krml/internal/target.h" -static inline uint64_t FStar_UInt64_eq_mask(uint64_t a, uint64_t b) +static KRML_NOINLINE uint64_t FStar_UInt64_eq_mask(uint64_t a, uint64_t b) { uint64_t x = a ^ b; - uint64_t minus_x = ~x + (uint64_t)1U; + uint64_t minus_x = ~x + 1ULL; uint64_t x_or_minus_x = x | minus_x; - uint64_t xnx = x_or_minus_x >> (uint32_t)63U; - return xnx - (uint64_t)1U; + uint64_t xnx = x_or_minus_x >> 63U; + return xnx - 1ULL; } -static inline uint64_t FStar_UInt64_gte_mask(uint64_t a, uint64_t b) +static KRML_NOINLINE uint64_t FStar_UInt64_gte_mask(uint64_t a, uint64_t b) { uint64_t x = a; uint64_t y = b; @@ -32,20 +32,20 @@ static inline uint64_t FStar_UInt64_gte_mask(uint64_t a, uint64_t b) uint64_t x_sub_y_xor_y = x_sub_y ^ y; uint64_t q = x_xor_y | x_sub_y_xor_y; uint64_t x_xor_q = x ^ q; - uint64_t x_xor_q_ = x_xor_q >> (uint32_t)63U; - return x_xor_q_ - (uint64_t)1U; + uint64_t x_xor_q_ = x_xor_q >> 63U; + return x_xor_q_ - 1ULL; } -static inline uint32_t FStar_UInt32_eq_mask(uint32_t a, uint32_t b) +static KRML_NOINLINE uint32_t FStar_UInt32_eq_mask(uint32_t a, uint32_t b) { uint32_t x = a ^ b; - uint32_t minus_x = ~x + (uint32_t)1U; + uint32_t minus_x = ~x + 1U; uint32_t x_or_minus_x = x | minus_x; - uint32_t xnx = x_or_minus_x >> (uint32_t)31U; - return xnx - (uint32_t)1U; + uint32_t xnx = x_or_minus_x >> 31U; + return xnx - 1U; } -static inline uint32_t FStar_UInt32_gte_mask(uint32_t a, uint32_t b) +static KRML_NOINLINE uint32_t FStar_UInt32_gte_mask(uint32_t a, uint32_t b) { uint32_t x = a; uint32_t y = b; @@ -54,52 +54,52 @@ static inline uint32_t FStar_UInt32_gte_mask(uint32_t a, uint32_t b) uint32_t x_sub_y_xor_y = x_sub_y ^ y; uint32_t q = x_xor_y | x_sub_y_xor_y; uint32_t x_xor_q = x ^ q; - uint32_t x_xor_q_ = x_xor_q >> (uint32_t)31U; - return x_xor_q_ - (uint32_t)1U; + uint32_t x_xor_q_ = x_xor_q >> 31U; + return x_xor_q_ - 1U; } -static inline uint16_t FStar_UInt16_eq_mask(uint16_t a, uint16_t b) +static KRML_NOINLINE uint16_t FStar_UInt16_eq_mask(uint16_t a, uint16_t b) { - uint16_t x = a ^ b; - uint16_t minus_x = ~x + (uint16_t)1U; - uint16_t x_or_minus_x = x | minus_x; - uint16_t xnx = x_or_minus_x >> (uint32_t)15U; - return xnx - (uint16_t)1U; + uint16_t x = (uint32_t)a ^ (uint32_t)b; + uint16_t minus_x = (uint32_t)~x + 1U; + uint16_t x_or_minus_x = (uint32_t)x | (uint32_t)minus_x; + uint16_t xnx = (uint32_t)x_or_minus_x >> 15U; + return (uint32_t)xnx - 1U; } -static inline uint16_t FStar_UInt16_gte_mask(uint16_t a, uint16_t b) +static KRML_NOINLINE uint16_t FStar_UInt16_gte_mask(uint16_t a, uint16_t b) { uint16_t x = a; uint16_t y = b; - uint16_t x_xor_y = x ^ y; - uint16_t x_sub_y = x - y; - uint16_t x_sub_y_xor_y = x_sub_y ^ y; - uint16_t q = x_xor_y | x_sub_y_xor_y; - uint16_t x_xor_q = x ^ q; - uint16_t x_xor_q_ = x_xor_q >> (uint32_t)15U; - return x_xor_q_ - (uint16_t)1U; + uint16_t x_xor_y = (uint32_t)x ^ (uint32_t)y; + uint16_t x_sub_y = (uint32_t)x - (uint32_t)y; + uint16_t x_sub_y_xor_y = (uint32_t)x_sub_y ^ (uint32_t)y; + uint16_t q = (uint32_t)x_xor_y | (uint32_t)x_sub_y_xor_y; + uint16_t x_xor_q = (uint32_t)x ^ (uint32_t)q; + uint16_t x_xor_q_ = (uint32_t)x_xor_q >> 15U; + return (uint32_t)x_xor_q_ - 1U; } -static inline uint8_t FStar_UInt8_eq_mask(uint8_t a, uint8_t b) +static KRML_NOINLINE uint8_t FStar_UInt8_eq_mask(uint8_t a, uint8_t b) { - uint8_t x = a ^ b; - uint8_t minus_x = ~x + (uint8_t)1U; - uint8_t x_or_minus_x = x | minus_x; - uint8_t xnx = x_or_minus_x >> (uint32_t)7U; - return xnx - (uint8_t)1U; + uint8_t x = (uint32_t)a ^ (uint32_t)b; + uint8_t minus_x = (uint32_t)~x + 1U; + uint8_t x_or_minus_x = (uint32_t)x | (uint32_t)minus_x; + uint8_t xnx = (uint32_t)x_or_minus_x >> 7U; + return (uint32_t)xnx - 1U; } -static inline uint8_t FStar_UInt8_gte_mask(uint8_t a, uint8_t b) +static KRML_NOINLINE uint8_t FStar_UInt8_gte_mask(uint8_t a, uint8_t b) { uint8_t x = a; uint8_t y = b; - uint8_t x_xor_y = x ^ y; - uint8_t x_sub_y = x - y; - uint8_t x_sub_y_xor_y = x_sub_y ^ y; - uint8_t q = x_xor_y | x_sub_y_xor_y; - uint8_t x_xor_q = x ^ q; - uint8_t x_xor_q_ = x_xor_q >> (uint32_t)7U; - return x_xor_q_ - (uint8_t)1U; + uint8_t x_xor_y = (uint32_t)x ^ (uint32_t)y; + uint8_t x_sub_y = (uint32_t)x - (uint32_t)y; + uint8_t x_sub_y_xor_y = (uint32_t)x_sub_y ^ (uint32_t)y; + uint8_t q = (uint32_t)x_xor_y | (uint32_t)x_sub_y_xor_y; + uint8_t x_xor_q = (uint32_t)x ^ (uint32_t)q; + uint8_t x_xor_q_ = (uint32_t)x_xor_q >> 7U; + return (uint32_t)x_xor_q_ - 1U; } diff --git a/contrib/tools/python3/Modules/_hacl/include/krml/internal/target.h b/contrib/tools/python3/Modules/_hacl/include/krml/internal/target.h index 5a2f94eb2e..c7fcc0151e 100644 --- a/contrib/tools/python3/Modules/_hacl/include/krml/internal/target.h +++ b/contrib/tools/python3/Modules/_hacl/include/krml/internal/target.h @@ -4,13 +4,13 @@ #ifndef __KRML_TARGET_H #define __KRML_TARGET_H -#include <stdlib.h> -#include <stddef.h> -#include <stdio.h> -#include <stdbool.h> +#include <assert.h> #include <inttypes.h> #include <limits.h> -#include <assert.h> +#include <stdbool.h> +#include <stddef.h> +#include <stdio.h> +#include <stdlib.h> /* Since KaRaMeL emits the inline keyword unconditionally, we follow the * guidelines at https://gcc.gnu.org/onlinedocs/gcc/Inline.html and make this @@ -57,6 +57,31 @@ # define KRML_HOST_IGNORE(x) (void)(x) #endif +#ifndef KRML_MAYBE_UNUSED_VAR +# define KRML_MAYBE_UNUSED_VAR(x) KRML_HOST_IGNORE(x) +#endif + +#ifndef KRML_MAYBE_UNUSED +# if defined(__GNUC__) +# define KRML_MAYBE_UNUSED __attribute__((unused)) +# else +# define KRML_MAYBE_UNUSED +# endif +#endif + +#ifndef KRML_NOINLINE +# if defined(_MSC_VER) +# define KRML_NOINLINE __declspec(noinline) +# elif defined (__GNUC__) +# define KRML_NOINLINE __attribute__((noinline,unused)) +# else +# define KRML_NOINLINE +# warning "The KRML_NOINLINE macro is not defined for this toolchain!" +# warning "The compiler may defeat side-channel resistance with optimizations." +# warning "Please locate target.h and try to fill it out with a suitable definition for this compiler." +# endif +#endif + /* In FStar.Buffer.fst, the size of arrays is uint32_t, but it's a number of * *elements*. Do an ugly, run-time check (some of which KaRaMeL can eliminate). */ @@ -83,184 +108,186 @@ #define KRML_LOOP1(i, n, x) { \ x \ i += n; \ + (void) i; \ } -#define KRML_LOOP2(i, n, x) \ - KRML_LOOP1(i, n, x) \ +#define KRML_LOOP2(i, n, x) \ + KRML_LOOP1(i, n, x) \ KRML_LOOP1(i, n, x) -#define KRML_LOOP3(i, n, x) \ - KRML_LOOP2(i, n, x) \ +#define KRML_LOOP3(i, n, x) \ + KRML_LOOP2(i, n, x) \ KRML_LOOP1(i, n, x) -#define KRML_LOOP4(i, n, x) \ - KRML_LOOP2(i, n, x) \ +#define KRML_LOOP4(i, n, x) \ + KRML_LOOP2(i, n, x) \ KRML_LOOP2(i, n, x) -#define KRML_LOOP5(i, n, x) \ - KRML_LOOP4(i, n, x) \ +#define KRML_LOOP5(i, n, x) \ + KRML_LOOP4(i, n, x) \ KRML_LOOP1(i, n, x) -#define KRML_LOOP6(i, n, x) \ - KRML_LOOP4(i, n, x) \ +#define KRML_LOOP6(i, n, x) \ + KRML_LOOP4(i, n, x) \ KRML_LOOP2(i, n, x) -#define KRML_LOOP7(i, n, x) \ - KRML_LOOP4(i, n, x) \ +#define KRML_LOOP7(i, n, x) \ + KRML_LOOP4(i, n, x) \ KRML_LOOP3(i, n, x) -#define KRML_LOOP8(i, n, x) \ - KRML_LOOP4(i, n, x) \ +#define KRML_LOOP8(i, n, x) \ + KRML_LOOP4(i, n, x) \ KRML_LOOP4(i, n, x) -#define KRML_LOOP9(i, n, x) \ - KRML_LOOP8(i, n, x) \ +#define KRML_LOOP9(i, n, x) \ + KRML_LOOP8(i, n, x) \ KRML_LOOP1(i, n, x) -#define KRML_LOOP10(i, n, x) \ - KRML_LOOP8(i, n, x) \ +#define KRML_LOOP10(i, n, x) \ + KRML_LOOP8(i, n, x) \ KRML_LOOP2(i, n, x) -#define KRML_LOOP11(i, n, x) \ - KRML_LOOP8(i, n, x) \ +#define KRML_LOOP11(i, n, x) \ + KRML_LOOP8(i, n, x) \ KRML_LOOP3(i, n, x) -#define KRML_LOOP12(i, n, x) \ - KRML_LOOP8(i, n, x) \ +#define KRML_LOOP12(i, n, x) \ + KRML_LOOP8(i, n, x) \ KRML_LOOP4(i, n, x) -#define KRML_LOOP13(i, n, x) \ - KRML_LOOP8(i, n, x) \ +#define KRML_LOOP13(i, n, x) \ + KRML_LOOP8(i, n, x) \ KRML_LOOP5(i, n, x) -#define KRML_LOOP14(i, n, x) \ - KRML_LOOP8(i, n, x) \ +#define KRML_LOOP14(i, n, x) \ + KRML_LOOP8(i, n, x) \ KRML_LOOP6(i, n, x) -#define KRML_LOOP15(i, n, x) \ - KRML_LOOP8(i, n, x) \ +#define KRML_LOOP15(i, n, x) \ + KRML_LOOP8(i, n, x) \ KRML_LOOP7(i, n, x) -#define KRML_LOOP16(i, n, x) \ - KRML_LOOP8(i, n, x) \ +#define KRML_LOOP16(i, n, x) \ + KRML_LOOP8(i, n, x) \ KRML_LOOP8(i, n, x) -#define KRML_UNROLL_FOR(i, z, n, k, x) do { \ - uint32_t i = z; \ - KRML_LOOP##n(i, k, x) \ -} while (0) +#define KRML_UNROLL_FOR(i, z, n, k, x) \ + do { \ + uint32_t i = z; \ + KRML_LOOP##n(i, k, x) \ + } while (0) -#define KRML_ACTUAL_FOR(i, z, n, k, x) \ - do { \ - for (uint32_t i = z; i < n; i += k) { \ - x \ - } \ +#define KRML_ACTUAL_FOR(i, z, n, k, x) \ + do { \ + for (uint32_t i = z; i < n; i += k) { \ + x \ + } \ } while (0) #ifndef KRML_UNROLL_MAX -#define KRML_UNROLL_MAX 16 +# define KRML_UNROLL_MAX 16 #endif /* 1 is the number of loop iterations, i.e. (n - z)/k as evaluated by krml */ #if 0 <= KRML_UNROLL_MAX -#define KRML_MAYBE_FOR0(i, z, n, k, x) +# define KRML_MAYBE_FOR0(i, z, n, k, x) #else -#define KRML_MAYBE_FOR0(i, z, n, k, x) KRML_ACTUAL_FOR(i, z, n, k, x) +# define KRML_MAYBE_FOR0(i, z, n, k, x) KRML_ACTUAL_FOR(i, z, n, k, x) #endif #if 1 <= KRML_UNROLL_MAX -#define KRML_MAYBE_FOR1(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 1, k, x) +# define KRML_MAYBE_FOR1(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 1, k, x) #else -#define KRML_MAYBE_FOR1(i, z, n, k, x) KRML_ACTUAL_FOR(i, z, n, k, x) +# define KRML_MAYBE_FOR1(i, z, n, k, x) KRML_ACTUAL_FOR(i, z, n, k, x) #endif #if 2 <= KRML_UNROLL_MAX -#define KRML_MAYBE_FOR2(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 2, k, x) +# define KRML_MAYBE_FOR2(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 2, k, x) #else -#define KRML_MAYBE_FOR2(i, z, n, k, x) KRML_ACTUAL_FOR(i, z, n, k, x) +# define KRML_MAYBE_FOR2(i, z, n, k, x) KRML_ACTUAL_FOR(i, z, n, k, x) #endif #if 3 <= KRML_UNROLL_MAX -#define KRML_MAYBE_FOR3(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 3, k, x) +# define KRML_MAYBE_FOR3(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 3, k, x) #else -#define KRML_MAYBE_FOR3(i, z, n, k, x) KRML_ACTUAL_FOR(i, z, n, k, x) +# define KRML_MAYBE_FOR3(i, z, n, k, x) KRML_ACTUAL_FOR(i, z, n, k, x) #endif #if 4 <= KRML_UNROLL_MAX -#define KRML_MAYBE_FOR4(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 4, k, x) +# define KRML_MAYBE_FOR4(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 4, k, x) #else -#define KRML_MAYBE_FOR4(i, z, n, k, x) KRML_ACTUAL_FOR(i, z, n, k, x) +# define KRML_MAYBE_FOR4(i, z, n, k, x) KRML_ACTUAL_FOR(i, z, n, k, x) #endif #if 5 <= KRML_UNROLL_MAX -#define KRML_MAYBE_FOR5(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 5, k, x) +# define KRML_MAYBE_FOR5(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 5, k, x) #else -#define KRML_MAYBE_FOR5(i, z, n, k, x) KRML_ACTUAL_FOR(i, z, n, k, x) +# define KRML_MAYBE_FOR5(i, z, n, k, x) KRML_ACTUAL_FOR(i, z, n, k, x) #endif #if 6 <= KRML_UNROLL_MAX -#define KRML_MAYBE_FOR6(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 6, k, x) +# define KRML_MAYBE_FOR6(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 6, k, x) #else -#define KRML_MAYBE_FOR6(i, z, n, k, x) KRML_ACTUAL_FOR(i, z, n, k, x) +# define KRML_MAYBE_FOR6(i, z, n, k, x) KRML_ACTUAL_FOR(i, z, n, k, x) #endif #if 7 <= KRML_UNROLL_MAX -#define KRML_MAYBE_FOR7(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 7, k, x) +# define KRML_MAYBE_FOR7(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 7, k, x) #else -#define KRML_MAYBE_FOR7(i, z, n, k, x) KRML_ACTUAL_FOR(i, z, n, k, x) +# define KRML_MAYBE_FOR7(i, z, n, k, x) KRML_ACTUAL_FOR(i, z, n, k, x) #endif #if 8 <= KRML_UNROLL_MAX -#define KRML_MAYBE_FOR8(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 8, k, x) +# define KRML_MAYBE_FOR8(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 8, k, x) #else -#define KRML_MAYBE_FOR8(i, z, n, k, x) KRML_ACTUAL_FOR(i, z, n, k, x) +# define KRML_MAYBE_FOR8(i, z, n, k, x) KRML_ACTUAL_FOR(i, z, n, k, x) #endif #if 9 <= KRML_UNROLL_MAX -#define KRML_MAYBE_FOR9(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 9, k, x) +# define KRML_MAYBE_FOR9(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 9, k, x) #else -#define KRML_MAYBE_FOR9(i, z, n, k, x) KRML_ACTUAL_FOR(i, z, n, k, x) +# define KRML_MAYBE_FOR9(i, z, n, k, x) KRML_ACTUAL_FOR(i, z, n, k, x) #endif #if 10 <= KRML_UNROLL_MAX -#define KRML_MAYBE_FOR10(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 10, k, x) +# define KRML_MAYBE_FOR10(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 10, k, x) #else -#define KRML_MAYBE_FOR10(i, z, n, k, x) KRML_ACTUAL_FOR(i, z, n, k, x) +# define KRML_MAYBE_FOR10(i, z, n, k, x) KRML_ACTUAL_FOR(i, z, n, k, x) #endif #if 11 <= KRML_UNROLL_MAX -#define KRML_MAYBE_FOR11(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 11, k, x) +# define KRML_MAYBE_FOR11(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 11, k, x) #else -#define KRML_MAYBE_FOR11(i, z, n, k, x) KRML_ACTUAL_FOR(i, z, n, k, x) +# define KRML_MAYBE_FOR11(i, z, n, k, x) KRML_ACTUAL_FOR(i, z, n, k, x) #endif #if 12 <= KRML_UNROLL_MAX -#define KRML_MAYBE_FOR12(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 12, k, x) +# define KRML_MAYBE_FOR12(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 12, k, x) #else -#define KRML_MAYBE_FOR12(i, z, n, k, x) KRML_ACTUAL_FOR(i, z, n, k, x) +# define KRML_MAYBE_FOR12(i, z, n, k, x) KRML_ACTUAL_FOR(i, z, n, k, x) #endif #if 13 <= KRML_UNROLL_MAX -#define KRML_MAYBE_FOR13(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 13, k, x) +# define KRML_MAYBE_FOR13(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 13, k, x) #else -#define KRML_MAYBE_FOR13(i, z, n, k, x) KRML_ACTUAL_FOR(i, z, n, k, x) +# define KRML_MAYBE_FOR13(i, z, n, k, x) KRML_ACTUAL_FOR(i, z, n, k, x) #endif #if 14 <= KRML_UNROLL_MAX -#define KRML_MAYBE_FOR14(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 14, k, x) +# define KRML_MAYBE_FOR14(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 14, k, x) #else -#define KRML_MAYBE_FOR14(i, z, n, k, x) KRML_ACTUAL_FOR(i, z, n, k, x) +# define KRML_MAYBE_FOR14(i, z, n, k, x) KRML_ACTUAL_FOR(i, z, n, k, x) #endif #if 15 <= KRML_UNROLL_MAX -#define KRML_MAYBE_FOR15(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 15, k, x) +# define KRML_MAYBE_FOR15(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 15, k, x) #else -#define KRML_MAYBE_FOR15(i, z, n, k, x) KRML_ACTUAL_FOR(i, z, n, k, x) +# define KRML_MAYBE_FOR15(i, z, n, k, x) KRML_ACTUAL_FOR(i, z, n, k, x) #endif #if 16 <= KRML_UNROLL_MAX -#define KRML_MAYBE_FOR16(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 16, k, x) +# define KRML_MAYBE_FOR16(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 16, k, x) #else -#define KRML_MAYBE_FOR16(i, z, n, k, x) KRML_ACTUAL_FOR(i, z, n, k, x) +# define KRML_MAYBE_FOR16(i, z, n, k, x) KRML_ACTUAL_FOR(i, z, n, k, x) #endif #endif diff --git a/contrib/tools/python3/Modules/_hacl/internal/Hacl_Hash_MD5.h b/contrib/tools/python3/Modules/_hacl/internal/Hacl_Hash_MD5.h index 87ad4cf228..a50ec407f5 100644 --- a/contrib/tools/python3/Modules/_hacl/internal/Hacl_Hash_MD5.h +++ b/contrib/tools/python3/Modules/_hacl/internal/Hacl_Hash_MD5.h @@ -37,21 +37,16 @@ extern "C" { #include "../Hacl_Hash_MD5.h" -void Hacl_Hash_Core_MD5_legacy_init(uint32_t *s); +void Hacl_Hash_MD5_init(uint32_t *s); -void Hacl_Hash_Core_MD5_legacy_finish(uint32_t *s, uint8_t *dst); +void Hacl_Hash_MD5_finish(uint32_t *s, uint8_t *dst); -void Hacl_Hash_MD5_legacy_update_multi(uint32_t *s, uint8_t *blocks, uint32_t n_blocks); +void Hacl_Hash_MD5_update_multi(uint32_t *s, uint8_t *blocks, uint32_t n_blocks); void -Hacl_Hash_MD5_legacy_update_last( - uint32_t *s, - uint64_t prev_len, - uint8_t *input, - uint32_t input_len -); - -void Hacl_Hash_MD5_legacy_hash(uint8_t *input, uint32_t input_len, uint8_t *dst); +Hacl_Hash_MD5_update_last(uint32_t *s, uint64_t prev_len, uint8_t *input, uint32_t input_len); + +void Hacl_Hash_MD5_hash_oneshot(uint8_t *output, uint8_t *input, uint32_t input_len); #if defined(__cplusplus) } diff --git a/contrib/tools/python3/Modules/_hacl/internal/Hacl_Hash_SHA1.h b/contrib/tools/python3/Modules/_hacl/internal/Hacl_Hash_SHA1.h index d2d9df44c6..b39bad3f3b 100644 --- a/contrib/tools/python3/Modules/_hacl/internal/Hacl_Hash_SHA1.h +++ b/contrib/tools/python3/Modules/_hacl/internal/Hacl_Hash_SHA1.h @@ -37,21 +37,16 @@ extern "C" { #include "../Hacl_Hash_SHA1.h" -void Hacl_Hash_Core_SHA1_legacy_init(uint32_t *s); +void Hacl_Hash_SHA1_init(uint32_t *s); -void Hacl_Hash_Core_SHA1_legacy_finish(uint32_t *s, uint8_t *dst); +void Hacl_Hash_SHA1_finish(uint32_t *s, uint8_t *dst); -void Hacl_Hash_SHA1_legacy_update_multi(uint32_t *s, uint8_t *blocks, uint32_t n_blocks); +void Hacl_Hash_SHA1_update_multi(uint32_t *s, uint8_t *blocks, uint32_t n_blocks); void -Hacl_Hash_SHA1_legacy_update_last( - uint32_t *s, - uint64_t prev_len, - uint8_t *input, - uint32_t input_len -); - -void Hacl_Hash_SHA1_legacy_hash(uint8_t *input, uint32_t input_len, uint8_t *dst); +Hacl_Hash_SHA1_update_last(uint32_t *s, uint64_t prev_len, uint8_t *input, uint32_t input_len); + +void Hacl_Hash_SHA1_hash_oneshot(uint8_t *output, uint8_t *input, uint32_t input_len); #if defined(__cplusplus) } diff --git a/contrib/tools/python3/Modules/_hacl/internal/Hacl_Hash_SHA2.h b/contrib/tools/python3/Modules/_hacl/internal/Hacl_Hash_SHA2.h index 851f7dc60c..0127f4373f 100644 --- a/contrib/tools/python3/Modules/_hacl/internal/Hacl_Hash_SHA2.h +++ b/contrib/tools/python3/Modules/_hacl/internal/Hacl_Hash_SHA2.h @@ -40,141 +40,121 @@ extern "C" { static const uint32_t -Hacl_Impl_SHA2_Generic_h224[8U] = +Hacl_Hash_SHA2_h224[8U] = { - (uint32_t)0xc1059ed8U, (uint32_t)0x367cd507U, (uint32_t)0x3070dd17U, (uint32_t)0xf70e5939U, - (uint32_t)0xffc00b31U, (uint32_t)0x68581511U, (uint32_t)0x64f98fa7U, (uint32_t)0xbefa4fa4U + 0xc1059ed8U, 0x367cd507U, 0x3070dd17U, 0xf70e5939U, 0xffc00b31U, 0x68581511U, 0x64f98fa7U, + 0xbefa4fa4U }; static const uint32_t -Hacl_Impl_SHA2_Generic_h256[8U] = +Hacl_Hash_SHA2_h256[8U] = { - (uint32_t)0x6a09e667U, (uint32_t)0xbb67ae85U, (uint32_t)0x3c6ef372U, (uint32_t)0xa54ff53aU, - (uint32_t)0x510e527fU, (uint32_t)0x9b05688cU, (uint32_t)0x1f83d9abU, (uint32_t)0x5be0cd19U + 0x6a09e667U, 0xbb67ae85U, 0x3c6ef372U, 0xa54ff53aU, 0x510e527fU, 0x9b05688cU, 0x1f83d9abU, + 0x5be0cd19U }; static const uint64_t -Hacl_Impl_SHA2_Generic_h384[8U] = +Hacl_Hash_SHA2_h384[8U] = { - (uint64_t)0xcbbb9d5dc1059ed8U, (uint64_t)0x629a292a367cd507U, (uint64_t)0x9159015a3070dd17U, - (uint64_t)0x152fecd8f70e5939U, (uint64_t)0x67332667ffc00b31U, (uint64_t)0x8eb44a8768581511U, - (uint64_t)0xdb0c2e0d64f98fa7U, (uint64_t)0x47b5481dbefa4fa4U + 0xcbbb9d5dc1059ed8ULL, 0x629a292a367cd507ULL, 0x9159015a3070dd17ULL, 0x152fecd8f70e5939ULL, + 0x67332667ffc00b31ULL, 0x8eb44a8768581511ULL, 0xdb0c2e0d64f98fa7ULL, 0x47b5481dbefa4fa4ULL }; static const uint64_t -Hacl_Impl_SHA2_Generic_h512[8U] = +Hacl_Hash_SHA2_h512[8U] = { - (uint64_t)0x6a09e667f3bcc908U, (uint64_t)0xbb67ae8584caa73bU, (uint64_t)0x3c6ef372fe94f82bU, - (uint64_t)0xa54ff53a5f1d36f1U, (uint64_t)0x510e527fade682d1U, (uint64_t)0x9b05688c2b3e6c1fU, - (uint64_t)0x1f83d9abfb41bd6bU, (uint64_t)0x5be0cd19137e2179U + 0x6a09e667f3bcc908ULL, 0xbb67ae8584caa73bULL, 0x3c6ef372fe94f82bULL, 0xa54ff53a5f1d36f1ULL, + 0x510e527fade682d1ULL, 0x9b05688c2b3e6c1fULL, 0x1f83d9abfb41bd6bULL, 0x5be0cd19137e2179ULL }; static const uint32_t -Hacl_Impl_SHA2_Generic_k224_256[64U] = +Hacl_Hash_SHA2_k224_256[64U] = { - (uint32_t)0x428a2f98U, (uint32_t)0x71374491U, (uint32_t)0xb5c0fbcfU, (uint32_t)0xe9b5dba5U, - (uint32_t)0x3956c25bU, (uint32_t)0x59f111f1U, (uint32_t)0x923f82a4U, (uint32_t)0xab1c5ed5U, - (uint32_t)0xd807aa98U, (uint32_t)0x12835b01U, (uint32_t)0x243185beU, (uint32_t)0x550c7dc3U, - (uint32_t)0x72be5d74U, (uint32_t)0x80deb1feU, (uint32_t)0x9bdc06a7U, (uint32_t)0xc19bf174U, - (uint32_t)0xe49b69c1U, (uint32_t)0xefbe4786U, (uint32_t)0x0fc19dc6U, (uint32_t)0x240ca1ccU, - (uint32_t)0x2de92c6fU, (uint32_t)0x4a7484aaU, (uint32_t)0x5cb0a9dcU, (uint32_t)0x76f988daU, - (uint32_t)0x983e5152U, (uint32_t)0xa831c66dU, (uint32_t)0xb00327c8U, (uint32_t)0xbf597fc7U, - (uint32_t)0xc6e00bf3U, (uint32_t)0xd5a79147U, (uint32_t)0x06ca6351U, (uint32_t)0x14292967U, - (uint32_t)0x27b70a85U, (uint32_t)0x2e1b2138U, (uint32_t)0x4d2c6dfcU, (uint32_t)0x53380d13U, - (uint32_t)0x650a7354U, (uint32_t)0x766a0abbU, (uint32_t)0x81c2c92eU, (uint32_t)0x92722c85U, - (uint32_t)0xa2bfe8a1U, (uint32_t)0xa81a664bU, (uint32_t)0xc24b8b70U, (uint32_t)0xc76c51a3U, - (uint32_t)0xd192e819U, (uint32_t)0xd6990624U, (uint32_t)0xf40e3585U, (uint32_t)0x106aa070U, - (uint32_t)0x19a4c116U, (uint32_t)0x1e376c08U, (uint32_t)0x2748774cU, (uint32_t)0x34b0bcb5U, - (uint32_t)0x391c0cb3U, (uint32_t)0x4ed8aa4aU, (uint32_t)0x5b9cca4fU, (uint32_t)0x682e6ff3U, - (uint32_t)0x748f82eeU, (uint32_t)0x78a5636fU, (uint32_t)0x84c87814U, (uint32_t)0x8cc70208U, - (uint32_t)0x90befffaU, (uint32_t)0xa4506cebU, (uint32_t)0xbef9a3f7U, (uint32_t)0xc67178f2U + 0x428a2f98U, 0x71374491U, 0xb5c0fbcfU, 0xe9b5dba5U, 0x3956c25bU, 0x59f111f1U, 0x923f82a4U, + 0xab1c5ed5U, 0xd807aa98U, 0x12835b01U, 0x243185beU, 0x550c7dc3U, 0x72be5d74U, 0x80deb1feU, + 0x9bdc06a7U, 0xc19bf174U, 0xe49b69c1U, 0xefbe4786U, 0x0fc19dc6U, 0x240ca1ccU, 0x2de92c6fU, + 0x4a7484aaU, 0x5cb0a9dcU, 0x76f988daU, 0x983e5152U, 0xa831c66dU, 0xb00327c8U, 0xbf597fc7U, + 0xc6e00bf3U, 0xd5a79147U, 0x06ca6351U, 0x14292967U, 0x27b70a85U, 0x2e1b2138U, 0x4d2c6dfcU, + 0x53380d13U, 0x650a7354U, 0x766a0abbU, 0x81c2c92eU, 0x92722c85U, 0xa2bfe8a1U, 0xa81a664bU, + 0xc24b8b70U, 0xc76c51a3U, 0xd192e819U, 0xd6990624U, 0xf40e3585U, 0x106aa070U, 0x19a4c116U, + 0x1e376c08U, 0x2748774cU, 0x34b0bcb5U, 0x391c0cb3U, 0x4ed8aa4aU, 0x5b9cca4fU, 0x682e6ff3U, + 0x748f82eeU, 0x78a5636fU, 0x84c87814U, 0x8cc70208U, 0x90befffaU, 0xa4506cebU, 0xbef9a3f7U, + 0xc67178f2U }; static const uint64_t -Hacl_Impl_SHA2_Generic_k384_512[80U] = +Hacl_Hash_SHA2_k384_512[80U] = { - (uint64_t)0x428a2f98d728ae22U, (uint64_t)0x7137449123ef65cdU, (uint64_t)0xb5c0fbcfec4d3b2fU, - (uint64_t)0xe9b5dba58189dbbcU, (uint64_t)0x3956c25bf348b538U, (uint64_t)0x59f111f1b605d019U, - (uint64_t)0x923f82a4af194f9bU, (uint64_t)0xab1c5ed5da6d8118U, (uint64_t)0xd807aa98a3030242U, - (uint64_t)0x12835b0145706fbeU, (uint64_t)0x243185be4ee4b28cU, (uint64_t)0x550c7dc3d5ffb4e2U, - (uint64_t)0x72be5d74f27b896fU, (uint64_t)0x80deb1fe3b1696b1U, (uint64_t)0x9bdc06a725c71235U, - (uint64_t)0xc19bf174cf692694U, (uint64_t)0xe49b69c19ef14ad2U, (uint64_t)0xefbe4786384f25e3U, - (uint64_t)0x0fc19dc68b8cd5b5U, (uint64_t)0x240ca1cc77ac9c65U, (uint64_t)0x2de92c6f592b0275U, - (uint64_t)0x4a7484aa6ea6e483U, (uint64_t)0x5cb0a9dcbd41fbd4U, (uint64_t)0x76f988da831153b5U, - (uint64_t)0x983e5152ee66dfabU, (uint64_t)0xa831c66d2db43210U, (uint64_t)0xb00327c898fb213fU, - (uint64_t)0xbf597fc7beef0ee4U, (uint64_t)0xc6e00bf33da88fc2U, (uint64_t)0xd5a79147930aa725U, - (uint64_t)0x06ca6351e003826fU, (uint64_t)0x142929670a0e6e70U, (uint64_t)0x27b70a8546d22ffcU, - (uint64_t)0x2e1b21385c26c926U, (uint64_t)0x4d2c6dfc5ac42aedU, (uint64_t)0x53380d139d95b3dfU, - (uint64_t)0x650a73548baf63deU, (uint64_t)0x766a0abb3c77b2a8U, (uint64_t)0x81c2c92e47edaee6U, - (uint64_t)0x92722c851482353bU, (uint64_t)0xa2bfe8a14cf10364U, (uint64_t)0xa81a664bbc423001U, - (uint64_t)0xc24b8b70d0f89791U, (uint64_t)0xc76c51a30654be30U, (uint64_t)0xd192e819d6ef5218U, - (uint64_t)0xd69906245565a910U, (uint64_t)0xf40e35855771202aU, (uint64_t)0x106aa07032bbd1b8U, - (uint64_t)0x19a4c116b8d2d0c8U, (uint64_t)0x1e376c085141ab53U, (uint64_t)0x2748774cdf8eeb99U, - (uint64_t)0x34b0bcb5e19b48a8U, (uint64_t)0x391c0cb3c5c95a63U, (uint64_t)0x4ed8aa4ae3418acbU, - (uint64_t)0x5b9cca4f7763e373U, (uint64_t)0x682e6ff3d6b2b8a3U, (uint64_t)0x748f82ee5defb2fcU, - (uint64_t)0x78a5636f43172f60U, (uint64_t)0x84c87814a1f0ab72U, (uint64_t)0x8cc702081a6439ecU, - (uint64_t)0x90befffa23631e28U, (uint64_t)0xa4506cebde82bde9U, (uint64_t)0xbef9a3f7b2c67915U, - (uint64_t)0xc67178f2e372532bU, (uint64_t)0xca273eceea26619cU, (uint64_t)0xd186b8c721c0c207U, - (uint64_t)0xeada7dd6cde0eb1eU, (uint64_t)0xf57d4f7fee6ed178U, (uint64_t)0x06f067aa72176fbaU, - (uint64_t)0x0a637dc5a2c898a6U, (uint64_t)0x113f9804bef90daeU, (uint64_t)0x1b710b35131c471bU, - (uint64_t)0x28db77f523047d84U, (uint64_t)0x32caab7b40c72493U, (uint64_t)0x3c9ebe0a15c9bebcU, - (uint64_t)0x431d67c49c100d4cU, (uint64_t)0x4cc5d4becb3e42b6U, (uint64_t)0x597f299cfc657e2aU, - (uint64_t)0x5fcb6fab3ad6faecU, (uint64_t)0x6c44198c4a475817U + 0x428a2f98d728ae22ULL, 0x7137449123ef65cdULL, 0xb5c0fbcfec4d3b2fULL, 0xe9b5dba58189dbbcULL, + 0x3956c25bf348b538ULL, 0x59f111f1b605d019ULL, 0x923f82a4af194f9bULL, 0xab1c5ed5da6d8118ULL, + 0xd807aa98a3030242ULL, 0x12835b0145706fbeULL, 0x243185be4ee4b28cULL, 0x550c7dc3d5ffb4e2ULL, + 0x72be5d74f27b896fULL, 0x80deb1fe3b1696b1ULL, 0x9bdc06a725c71235ULL, 0xc19bf174cf692694ULL, + 0xe49b69c19ef14ad2ULL, 0xefbe4786384f25e3ULL, 0x0fc19dc68b8cd5b5ULL, 0x240ca1cc77ac9c65ULL, + 0x2de92c6f592b0275ULL, 0x4a7484aa6ea6e483ULL, 0x5cb0a9dcbd41fbd4ULL, 0x76f988da831153b5ULL, + 0x983e5152ee66dfabULL, 0xa831c66d2db43210ULL, 0xb00327c898fb213fULL, 0xbf597fc7beef0ee4ULL, + 0xc6e00bf33da88fc2ULL, 0xd5a79147930aa725ULL, 0x06ca6351e003826fULL, 0x142929670a0e6e70ULL, + 0x27b70a8546d22ffcULL, 0x2e1b21385c26c926ULL, 0x4d2c6dfc5ac42aedULL, 0x53380d139d95b3dfULL, + 0x650a73548baf63deULL, 0x766a0abb3c77b2a8ULL, 0x81c2c92e47edaee6ULL, 0x92722c851482353bULL, + 0xa2bfe8a14cf10364ULL, 0xa81a664bbc423001ULL, 0xc24b8b70d0f89791ULL, 0xc76c51a30654be30ULL, + 0xd192e819d6ef5218ULL, 0xd69906245565a910ULL, 0xf40e35855771202aULL, 0x106aa07032bbd1b8ULL, + 0x19a4c116b8d2d0c8ULL, 0x1e376c085141ab53ULL, 0x2748774cdf8eeb99ULL, 0x34b0bcb5e19b48a8ULL, + 0x391c0cb3c5c95a63ULL, 0x4ed8aa4ae3418acbULL, 0x5b9cca4f7763e373ULL, 0x682e6ff3d6b2b8a3ULL, + 0x748f82ee5defb2fcULL, 0x78a5636f43172f60ULL, 0x84c87814a1f0ab72ULL, 0x8cc702081a6439ecULL, + 0x90befffa23631e28ULL, 0xa4506cebde82bde9ULL, 0xbef9a3f7b2c67915ULL, 0xc67178f2e372532bULL, + 0xca273eceea26619cULL, 0xd186b8c721c0c207ULL, 0xeada7dd6cde0eb1eULL, 0xf57d4f7fee6ed178ULL, + 0x06f067aa72176fbaULL, 0x0a637dc5a2c898a6ULL, 0x113f9804bef90daeULL, 0x1b710b35131c471bULL, + 0x28db77f523047d84ULL, 0x32caab7b40c72493ULL, 0x3c9ebe0a15c9bebcULL, 0x431d67c49c100d4cULL, + 0x4cc5d4becb3e42b6ULL, 0x597f299cfc657e2aULL, 0x5fcb6fab3ad6faecULL, 0x6c44198c4a475817ULL }; -void Hacl_SHA2_Scalar32_sha256_init(uint32_t *hash); +void Hacl_Hash_SHA2_sha256_init(uint32_t *hash); -void Hacl_SHA2_Scalar32_sha256_update_nblocks(uint32_t len, uint8_t *b, uint32_t *st); +void Hacl_Hash_SHA2_sha256_update_nblocks(uint32_t len, uint8_t *b, uint32_t *st); void -Hacl_SHA2_Scalar32_sha256_update_last( - uint64_t totlen, - uint32_t len, - uint8_t *b, - uint32_t *hash -); +Hacl_Hash_SHA2_sha256_update_last(uint64_t totlen, uint32_t len, uint8_t *b, uint32_t *hash); -void Hacl_SHA2_Scalar32_sha256_finish(uint32_t *st, uint8_t *h); +void Hacl_Hash_SHA2_sha256_finish(uint32_t *st, uint8_t *h); -void Hacl_SHA2_Scalar32_sha224_init(uint32_t *hash); +void Hacl_Hash_SHA2_sha224_init(uint32_t *hash); void -Hacl_SHA2_Scalar32_sha224_update_last(uint64_t totlen, uint32_t len, uint8_t *b, uint32_t *st); +Hacl_Hash_SHA2_sha224_update_last(uint64_t totlen, uint32_t len, uint8_t *b, uint32_t *st); -void Hacl_SHA2_Scalar32_sha224_finish(uint32_t *st, uint8_t *h); +void Hacl_Hash_SHA2_sha224_finish(uint32_t *st, uint8_t *h); -void Hacl_SHA2_Scalar32_sha512_init(uint64_t *hash); +void Hacl_Hash_SHA2_sha512_init(uint64_t *hash); -void Hacl_SHA2_Scalar32_sha512_update_nblocks(uint32_t len, uint8_t *b, uint64_t *st); +void Hacl_Hash_SHA2_sha512_update_nblocks(uint32_t len, uint8_t *b, uint64_t *st); void -Hacl_SHA2_Scalar32_sha512_update_last( +Hacl_Hash_SHA2_sha512_update_last( FStar_UInt128_uint128 totlen, uint32_t len, uint8_t *b, uint64_t *hash ); -void Hacl_SHA2_Scalar32_sha512_finish(uint64_t *st, uint8_t *h); +void Hacl_Hash_SHA2_sha512_finish(uint64_t *st, uint8_t *h); -void Hacl_SHA2_Scalar32_sha384_init(uint64_t *hash); +void Hacl_Hash_SHA2_sha384_init(uint64_t *hash); -void Hacl_SHA2_Scalar32_sha384_update_nblocks(uint32_t len, uint8_t *b, uint64_t *st); +void Hacl_Hash_SHA2_sha384_update_nblocks(uint32_t len, uint8_t *b, uint64_t *st); void -Hacl_SHA2_Scalar32_sha384_update_last( +Hacl_Hash_SHA2_sha384_update_last( FStar_UInt128_uint128 totlen, uint32_t len, uint8_t *b, uint64_t *st ); -void Hacl_SHA2_Scalar32_sha384_finish(uint64_t *st, uint8_t *h); +void Hacl_Hash_SHA2_sha384_finish(uint64_t *st, uint8_t *h); #if defined(__cplusplus) } diff --git a/contrib/tools/python3/Modules/_hacl/internal/Hacl_Hash_SHA3.h b/contrib/tools/python3/Modules/_hacl/internal/Hacl_Hash_SHA3.h index 1c9808b8dd..b80e81fafb 100644 --- a/contrib/tools/python3/Modules/_hacl/internal/Hacl_Hash_SHA3.h +++ b/contrib/tools/python3/Modules/_hacl/internal/Hacl_Hash_SHA3.h @@ -53,9 +53,9 @@ Hacl_Hash_SHA3_update_last_sha3( uint32_t input_len ); -void Hacl_Impl_SHA3_state_permute(uint64_t *s); +void Hacl_Hash_SHA3_state_permute(uint64_t *s); -void Hacl_Impl_SHA3_loadState(uint32_t rateInBytes, uint8_t *input, uint64_t *s); +void Hacl_Hash_SHA3_loadState(uint32_t rateInBytes, uint8_t *input, uint64_t *s); #if defined(__cplusplus) } diff --git a/contrib/tools/python3/Modules/_hacl/python_hacl_namespaces.h b/contrib/tools/python3/Modules/_hacl/python_hacl_namespaces.h index 0df236282a..684e7fd2fb 100644 --- a/contrib/tools/python3/Modules/_hacl/python_hacl_namespaces.h +++ b/contrib/tools/python3/Modules/_hacl/python_hacl_namespaces.h @@ -5,59 +5,61 @@ * C's excuse for namespaces: Use globally unique names to avoid linkage * conflicts with builds linking or dynamically loading other code potentially * using HACL* libraries. + * + * To make sure this is effective: cd Modules && nm -a *.o | grep Hacl */ -#define Hacl_Streaming_SHA2_state_sha2_224_s python_hashlib_Hacl_Streaming_SHA2_state_sha2_224_s -#define Hacl_Streaming_SHA2_state_sha2_224 python_hashlib_Hacl_Streaming_SHA2_state_sha2_224 -#define Hacl_Streaming_SHA2_state_sha2_256 python_hashlib_Hacl_Streaming_SHA2_state_sha2_256 -#define Hacl_Streaming_SHA2_state_sha2_384_s python_hashlib_Hacl_Streaming_SHA2_state_sha2_384_s -#define Hacl_Streaming_SHA2_state_sha2_384 python_hashlib_Hacl_Streaming_SHA2_state_sha2_384 -#define Hacl_Streaming_SHA2_state_sha2_512 python_hashlib_Hacl_Streaming_SHA2_state_sha2_512 -#define Hacl_Streaming_SHA2_create_in_256 python_hashlib_Hacl_Streaming_SHA2_create_in_256 -#define Hacl_Streaming_SHA2_create_in_224 python_hashlib_Hacl_Streaming_SHA2_create_in_224 -#define Hacl_Streaming_SHA2_create_in_512 python_hashlib_Hacl_Streaming_SHA2_create_in_512 -#define Hacl_Streaming_SHA2_create_in_384 python_hashlib_Hacl_Streaming_SHA2_create_in_384 -#define Hacl_Streaming_SHA2_copy_256 python_hashlib_Hacl_Streaming_SHA2_copy_256 -#define Hacl_Streaming_SHA2_copy_224 python_hashlib_Hacl_Streaming_SHA2_copy_224 -#define Hacl_Streaming_SHA2_copy_512 python_hashlib_Hacl_Streaming_SHA2_copy_512 -#define Hacl_Streaming_SHA2_copy_384 python_hashlib_Hacl_Streaming_SHA2_copy_384 -#define Hacl_Streaming_SHA2_init_256 python_hashlib_Hacl_Streaming_SHA2_init_256 -#define Hacl_Streaming_SHA2_init_224 python_hashlib_Hacl_Streaming_SHA2_init_224 -#define Hacl_Streaming_SHA2_init_512 python_hashlib_Hacl_Streaming_SHA2_init_512 -#define Hacl_Streaming_SHA2_init_384 python_hashlib_Hacl_Streaming_SHA2_init_384 +#define Hacl_Hash_SHA2_state_sha2_224_s python_hashlib_Hacl_Hash_SHA2_state_sha2_224_s +#define Hacl_Hash_SHA2_state_sha2_224 python_hashlib_Hacl_Hash_SHA2_state_sha2_224 +#define Hacl_Hash_SHA2_state_sha2_256 python_hashlib_Hacl_Hash_SHA2_state_sha2_256 +#define Hacl_Hash_SHA2_state_sha2_384_s python_hashlib_Hacl_Hash_SHA2_state_sha2_384_s +#define Hacl_Hash_SHA2_state_sha2_384 python_hashlib_Hacl_Hash_SHA2_state_sha2_384 +#define Hacl_Hash_SHA2_state_sha2_512 python_hashlib_Hacl_Hash_SHA2_state_sha2_512 +#define Hacl_Hash_SHA2_malloc_256 python_hashlib_Hacl_Hash_SHA2_malloc_256 +#define Hacl_Hash_SHA2_malloc_224 python_hashlib_Hacl_Hash_SHA2_malloc_224 +#define Hacl_Hash_SHA2_malloc_512 python_hashlib_Hacl_Hash_SHA2_malloc_512 +#define Hacl_Hash_SHA2_malloc_384 python_hashlib_Hacl_Hash_SHA2_malloc_384 +#define Hacl_Hash_SHA2_copy_256 python_hashlib_Hacl_Hash_SHA2_copy_256 +#define Hacl_Hash_SHA2_copy_224 python_hashlib_Hacl_Hash_SHA2_copy_224 +#define Hacl_Hash_SHA2_copy_512 python_hashlib_Hacl_Hash_SHA2_copy_512 +#define Hacl_Hash_SHA2_copy_384 python_hashlib_Hacl_Hash_SHA2_copy_384 +#define Hacl_Hash_SHA2_init_256 python_hashlib_Hacl_Hash_SHA2_init_256 +#define Hacl_Hash_SHA2_init_224 python_hashlib_Hacl_Hash_SHA2_init_224 +#define Hacl_Hash_SHA2_init_512 python_hashlib_Hacl_Hash_SHA2_init_512 +#define Hacl_Hash_SHA2_init_384 python_hashlib_Hacl_Hash_SHA2_init_384 #define Hacl_SHA2_Scalar32_sha512_init python_hashlib_Hacl_SHA2_Scalar32_sha512_init -#define Hacl_Streaming_SHA2_update_256 python_hashlib_Hacl_Streaming_SHA2_update_256 -#define Hacl_Streaming_SHA2_update_224 python_hashlib_Hacl_Streaming_SHA2_update_224 -#define Hacl_Streaming_SHA2_update_512 python_hashlib_Hacl_Streaming_SHA2_update_512 -#define Hacl_Streaming_SHA2_update_384 python_hashlib_Hacl_Streaming_SHA2_update_384 -#define Hacl_Streaming_SHA2_finish_256 python_hashlib_Hacl_Streaming_SHA2_finish_256 -#define Hacl_Streaming_SHA2_finish_224 python_hashlib_Hacl_Streaming_SHA2_finish_224 -#define Hacl_Streaming_SHA2_finish_512 python_hashlib_Hacl_Streaming_SHA2_finish_512 -#define Hacl_Streaming_SHA2_finish_384 python_hashlib_Hacl_Streaming_SHA2_finish_384 -#define Hacl_Streaming_SHA2_free_256 python_hashlib_Hacl_Streaming_SHA2_free_256 -#define Hacl_Streaming_SHA2_free_224 python_hashlib_Hacl_Streaming_SHA2_free_224 -#define Hacl_Streaming_SHA2_free_512 python_hashlib_Hacl_Streaming_SHA2_free_512 -#define Hacl_Streaming_SHA2_free_384 python_hashlib_Hacl_Streaming_SHA2_free_384 -#define Hacl_Streaming_SHA2_sha256 python_hashlib_Hacl_Streaming_SHA2_sha256 -#define Hacl_Streaming_SHA2_sha224 python_hashlib_Hacl_Streaming_SHA2_sha224 -#define Hacl_Streaming_SHA2_sha512 python_hashlib_Hacl_Streaming_SHA2_sha512 -#define Hacl_Streaming_SHA2_sha384 python_hashlib_Hacl_Streaming_SHA2_sha384 +#define Hacl_Hash_SHA2_update_256 python_hashlib_Hacl_Hash_SHA2_update_256 +#define Hacl_Hash_SHA2_update_224 python_hashlib_Hacl_Hash_SHA2_update_224 +#define Hacl_Hash_SHA2_update_512 python_hashlib_Hacl_Hash_SHA2_update_512 +#define Hacl_Hash_SHA2_update_384 python_hashlib_Hacl_Hash_SHA2_update_384 +#define Hacl_Hash_SHA2_digest_256 python_hashlib_Hacl_Hash_SHA2_digest_256 +#define Hacl_Hash_SHA2_digest_224 python_hashlib_Hacl_Hash_SHA2_digest_224 +#define Hacl_Hash_SHA2_digest_512 python_hashlib_Hacl_Hash_SHA2_digest_512 +#define Hacl_Hash_SHA2_digest_384 python_hashlib_Hacl_Hash_SHA2_digest_384 +#define Hacl_Hash_SHA2_free_256 python_hashlib_Hacl_Hash_SHA2_free_256 +#define Hacl_Hash_SHA2_free_224 python_hashlib_Hacl_Hash_SHA2_free_224 +#define Hacl_Hash_SHA2_free_512 python_hashlib_Hacl_Hash_SHA2_free_512 +#define Hacl_Hash_SHA2_free_384 python_hashlib_Hacl_Hash_SHA2_free_384 +#define Hacl_Hash_SHA2_sha256 python_hashlib_Hacl_Hash_SHA2_sha256 +#define Hacl_Hash_SHA2_sha224 python_hashlib_Hacl_Hash_SHA2_sha224 +#define Hacl_Hash_SHA2_sha512 python_hashlib_Hacl_Hash_SHA2_sha512 +#define Hacl_Hash_SHA2_sha384 python_hashlib_Hacl_Hash_SHA2_sha384 -#define Hacl_Streaming_MD5_legacy_create_in python_hashlib_Hacl_Streaming_MD5_legacy_create_in -#define Hacl_Streaming_MD5_legacy_init python_hashlib_Hacl_Streaming_MD5_legacy_init -#define Hacl_Streaming_MD5_legacy_update python_hashlib_Hacl_Streaming_MD5_legacy_update -#define Hacl_Streaming_MD5_legacy_finish python_hashlib_Hacl_Streaming_MD5_legacy_finish -#define Hacl_Streaming_MD5_legacy_free python_hashlib_Hacl_Streaming_MD5_legacy_free -#define Hacl_Streaming_MD5_legacy_copy python_hashlib_Hacl_Streaming_MD5_legacy_copy -#define Hacl_Streaming_MD5_legacy_hash python_hashlib_Hacl_Streaming_MD5_legacy_hash +#define Hacl_Hash_MD5_malloc python_hashlib_Hacl_Hash_MD5_malloc +#define Hacl_Hash_MD5_init python_hashlib_Hacl_Hash_MD5_init +#define Hacl_Hash_MD5_update python_hashlib_Hacl_Hash_MD5_update +#define Hacl_Hash_MD5_digest python_hashlib_Hacl_Hash_MD5_digest +#define Hacl_Hash_MD5_free python_hashlib_Hacl_Hash_MD5_free +#define Hacl_Hash_MD5_copy python_hashlib_Hacl_Hash_MD5_copy +#define Hacl_Hash_MD5_hash python_hashlib_Hacl_Hash_MD5_hash -#define Hacl_Streaming_SHA1_legacy_create_in python_hashlib_Hacl_Streaming_SHA1_legacy_create_in -#define Hacl_Streaming_SHA1_legacy_init python_hashlib_Hacl_Streaming_SHA1_legacy_init -#define Hacl_Streaming_SHA1_legacy_update python_hashlib_Hacl_Streaming_SHA1_legacy_update -#define Hacl_Streaming_SHA1_legacy_finish python_hashlib_Hacl_Streaming_SHA1_legacy_finish -#define Hacl_Streaming_SHA1_legacy_free python_hashlib_Hacl_Streaming_SHA1_legacy_free -#define Hacl_Streaming_SHA1_legacy_copy python_hashlib_Hacl_Streaming_SHA1_legacy_copy -#define Hacl_Streaming_SHA1_legacy_hash python_hashlib_Hacl_Streaming_SHA1_legacy_hash +#define Hacl_Hash_SHA1_malloc python_hashlib_Hacl_Hash_SHA1_malloc +#define Hacl_Hash_SHA1_init python_hashlib_Hacl_Hash_SHA1_init +#define Hacl_Hash_SHA1_update python_hashlib_Hacl_Hash_SHA1_update +#define Hacl_Hash_SHA1_digest python_hashlib_Hacl_Hash_SHA1_digest +#define Hacl_Hash_SHA1_free python_hashlib_Hacl_Hash_SHA1_free +#define Hacl_Hash_SHA1_copy python_hashlib_Hacl_Hash_SHA1_copy +#define Hacl_Hash_SHA1_hash python_hashlib_Hacl_Hash_SHA1_hash #define Hacl_Hash_SHA3_update_last_sha3 python_hashlib_Hacl_Hash_SHA3_update_last_sha3 #define Hacl_Hash_SHA3_update_multi_sha3 python_hashlib_Hacl_Hash_SHA3_update_multi_sha3 @@ -72,15 +74,16 @@ #define Hacl_SHA3_sha3_512 python_hashlib_Hacl_SHA3_sha3_512 #define Hacl_SHA3_shake128_hacl python_hashlib_Hacl_SHA3_shake128_hacl #define Hacl_SHA3_shake256_hacl python_hashlib_Hacl_SHA3_shake256_hacl -#define Hacl_Streaming_Keccak_block_len python_hashlib_Hacl_Streaming_Keccak_block_len -#define Hacl_Streaming_Keccak_copy python_hashlib_Hacl_Streaming_Keccak_copy -#define Hacl_Streaming_Keccak_finish python_hashlib_Hacl_Streaming_Keccak_finish -#define Hacl_Streaming_Keccak_free python_hashlib_Hacl_Streaming_Keccak_free -#define Hacl_Streaming_Keccak_get_alg python_hashlib_Hacl_Streaming_Keccak_get_alg -#define Hacl_Streaming_Keccak_hash_len python_hashlib_Hacl_Streaming_Keccak_hash_len -#define Hacl_Streaming_Keccak_is_shake python_hashlib_Hacl_Streaming_Keccak_is_shake -#define Hacl_Streaming_Keccak_malloc python_hashlib_Hacl_Streaming_Keccak_malloc -#define Hacl_Streaming_Keccak_reset python_hashlib_Hacl_Streaming_Keccak_reset -#define Hacl_Streaming_Keccak_update python_hashlib_Hacl_Streaming_Keccak_update +#define Hacl_Hash_SHA3_block_len python_hashlib_Hacl_Hash_SHA3_block_len +#define Hacl_Hash_SHA3_copy python_hashlib_Hacl_Hash_SHA3_copy +#define Hacl_Hash_SHA3_digest python_hashlib_Hacl_Hash_SHA3_digest +#define Hacl_Hash_SHA3_free python_hashlib_Hacl_Hash_SHA3_free +#define Hacl_Hash_SHA3_get_alg python_hashlib_Hacl_Hash_SHA3_get_alg +#define Hacl_Hash_SHA3_hash_len python_hashlib_Hacl_Hash_SHA3_hash_len +#define Hacl_Hash_SHA3_is_shake python_hashlib_Hacl_Hash_SHA3_is_shake +#define Hacl_Hash_SHA3_malloc python_hashlib_Hacl_Hash_SHA3_malloc +#define Hacl_Hash_SHA3_reset python_hashlib_Hacl_Hash_SHA3_reset +#define Hacl_Hash_SHA3_update python_hashlib_Hacl_Hash_SHA3_update +#define Hacl_Hash_SHA3_squeeze python_hashlib_Hacl_Hash_SHA3_squeeze #endif // _PYTHON_HACL_NAMESPACES_H diff --git a/contrib/tools/python3/Modules/_io/bufferedio.c b/contrib/tools/python3/Modules/_io/bufferedio.c index f30d54a5e1..e87d04bd07 100644 --- a/contrib/tools/python3/Modules/_io/bufferedio.c +++ b/contrib/tools/python3/Modules/_io/bufferedio.c @@ -1015,6 +1015,16 @@ _io__Buffered_read1_impl(buffered *self, Py_ssize_t n) Py_DECREF(res); return NULL; } + /* Flush the write buffer if necessary */ + if (self->writable) { + PyObject *r = buffered_flush_and_rewind_unlocked(self); + if (r == NULL) { + LEAVE_BUFFERED(self) + Py_DECREF(res); + return NULL; + } + Py_DECREF(r); + } _bufferedreader_reset_buf(self); r = _bufferedreader_raw_read(self, PyBytes_AS_STRING(res), n); LEAVE_BUFFERED(self) @@ -1276,7 +1286,11 @@ _io__Buffered_tell_impl(buffered *self) if (pos == -1) return NULL; pos -= RAW_OFFSET(self); - /* TODO: sanity check (pos >= 0) */ + + // GH-95782 + if (pos < 0) + pos = 0; + return PyLong_FromOff_t(pos); } @@ -1345,6 +1359,11 @@ _io__Buffered_seek_impl(buffered *self, PyObject *targetobj, int whence) offset = target; if (offset >= -self->pos && offset <= avail) { self->pos += offset; + + // GH-95782 + if (current - avail + offset < 0) + return PyLong_FromOff_t(0); + return PyLong_FromOff_t(current - avail + offset); } } diff --git a/contrib/tools/python3/Modules/_multiprocessing/posixshmem.c b/contrib/tools/python3/Modules/_multiprocessing/posixshmem.c index 88c93fe313..7af995b396 100644 --- a/contrib/tools/python3/Modules/_multiprocessing/posixshmem.c +++ b/contrib/tools/python3/Modules/_multiprocessing/posixshmem.c @@ -42,10 +42,15 @@ _posixshmem_shm_open_impl(PyObject *module, PyObject *path, int flags, { int fd; int async_err = 0; - const char *name = PyUnicode_AsUTF8(path); + Py_ssize_t name_size; + const char *name = PyUnicode_AsUTF8AndSize(path, &name_size); if (name == NULL) { return -1; } + if (strlen(name) != (size_t)name_size) { + PyErr_SetString(PyExc_ValueError, "embedded null character"); + return -1; + } do { Py_BEGIN_ALLOW_THREADS fd = shm_open(name, flags, mode); @@ -81,10 +86,15 @@ _posixshmem_shm_unlink_impl(PyObject *module, PyObject *path) { int rv; int async_err = 0; - const char *name = PyUnicode_AsUTF8(path); + Py_ssize_t name_size; + const char *name = PyUnicode_AsUTF8AndSize(path, &name_size); if (name == NULL) { return NULL; } + if (strlen(name) != (size_t)name_size) { + PyErr_SetString(PyExc_ValueError, "embedded null character"); + return NULL; + } do { Py_BEGIN_ALLOW_THREADS rv = shm_unlink(name); diff --git a/contrib/tools/python3/Modules/_posixsubprocess.c b/contrib/tools/python3/Modules/_posixsubprocess.c index d75bb92757..35ea2ac306 100644 --- a/contrib/tools/python3/Modules/_posixsubprocess.c +++ b/contrib/tools/python3/Modules/_posixsubprocess.c @@ -946,7 +946,9 @@ subprocess_fork_exec_impl(PyObject *module, PyObject *process_args, Py_ssize_t fds_to_keep_len = PyTuple_GET_SIZE(py_fds_to_keep); PyInterpreterState *interp = PyInterpreterState_Get(); - if ((preexec_fn != Py_None) && interp->finalizing) { + if ((preexec_fn != Py_None) && + _PyInterpreterState_GetFinalizing(interp) != NULL) + { PyErr_SetString(PyExc_RuntimeError, "preexec_fn not supported at interpreter shutdown"); return NULL; diff --git a/contrib/tools/python3/Modules/_sqlite/ya.make b/contrib/tools/python3/Modules/_sqlite/ya.make index c8e770686f..49635c2d57 100644 --- a/contrib/tools/python3/Modules/_sqlite/ya.make +++ b/contrib/tools/python3/Modules/_sqlite/ya.make @@ -2,9 +2,9 @@ LIBRARY() -VERSION(3.12.2) +VERSION(3.12.3) -ORIGINAL_SOURCE(https://github.com/python/cpython/archive/v3.12.2.tar.gz) +ORIGINAL_SOURCE(https://github.com/python/cpython/archive/v3.12.3.tar.gz) LICENSE(Python-2.0) diff --git a/contrib/tools/python3/Modules/_ssl.c b/contrib/tools/python3/Modules/_ssl.c index 7b4e9b5d69..e72675c6b5 100644 --- a/contrib/tools/python3/Modules/_ssl.c +++ b/contrib/tools/python3/Modules/_ssl.c @@ -3143,7 +3143,6 @@ _ssl__SSLContext_impl(PyTypeObject *type, int proto_version) result = SSL_CTX_set_cipher_list(ctx, "HIGH:!aNULL:!eNULL"); } if (result == 0) { - Py_DECREF(self); ERR_clear_error(); PyErr_SetString(get_state_ctx(self)->PySSLErrorObject, "No cipher can be selected."); @@ -4520,6 +4519,50 @@ set_sni_callback(PySSLContext *self, PyObject *arg, void *c) return 0; } +#if OPENSSL_VERSION_NUMBER < 0x30300000L +static X509_OBJECT *x509_object_dup(const X509_OBJECT *obj) +{ + int ok; + X509_OBJECT *ret = X509_OBJECT_new(); + if (ret == NULL) { + return NULL; + } + switch (X509_OBJECT_get_type(obj)) { + case X509_LU_X509: + ok = X509_OBJECT_set1_X509(ret, X509_OBJECT_get0_X509(obj)); + break; + case X509_LU_CRL: + /* X509_OBJECT_get0_X509_CRL was not const-correct prior to 3.0.*/ + ok = X509_OBJECT_set1_X509_CRL( + ret, X509_OBJECT_get0_X509_CRL((X509_OBJECT *)obj)); + break; + default: + /* We cannot duplicate unrecognized types in a polyfill, but it is + * safe to leave an empty object. The caller will ignore it. */ + ok = 1; + break; + } + if (!ok) { + X509_OBJECT_free(ret); + return NULL; + } + return ret; +} + +static STACK_OF(X509_OBJECT) * +X509_STORE_get1_objects(X509_STORE *store) +{ + STACK_OF(X509_OBJECT) *ret; + if (!X509_STORE_lock(store)) { + return NULL; + } + ret = sk_X509_OBJECT_deep_copy(X509_STORE_get0_objects(store), + x509_object_dup, X509_OBJECT_free); + X509_STORE_unlock(store); + return ret; +} +#endif + PyDoc_STRVAR(PySSLContext_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\ @@ -4549,7 +4592,12 @@ _ssl__SSLContext_cert_store_stats_impl(PySSLContext *self) int x509 = 0, crl = 0, ca = 0, i; store = SSL_CTX_get_cert_store(self->ctx); - objs = X509_STORE_get0_objects(store); + objs = X509_STORE_get1_objects(store); + if (objs == NULL) { + PyErr_SetString(PyExc_MemoryError, "failed to query cert store"); + return NULL; + } + for (i = 0; i < sk_X509_OBJECT_num(objs); i++) { obj = sk_X509_OBJECT_value(objs, i); switch (X509_OBJECT_get_type(obj)) { @@ -4563,12 +4611,11 @@ _ssl__SSLContext_cert_store_stats_impl(PySSLContext *self) crl++; break; default: - /* Ignore X509_LU_FAIL, X509_LU_RETRY, X509_LU_PKEY. - * As far as I can tell they are internal states and never - * stored in a cert store */ + /* Ignore unrecognized types. */ break; } } + sk_X509_OBJECT_pop_free(objs, X509_OBJECT_free); return Py_BuildValue("{sisisi}", "x509", x509, "crl", crl, "x509_ca", ca); } @@ -4600,7 +4647,12 @@ _ssl__SSLContext_get_ca_certs_impl(PySSLContext *self, int binary_form) } store = SSL_CTX_get_cert_store(self->ctx); - objs = X509_STORE_get0_objects(store); + objs = X509_STORE_get1_objects(store); + if (objs == NULL) { + PyErr_SetString(PyExc_MemoryError, "failed to query cert store"); + goto error; + } + for (i = 0; i < sk_X509_OBJECT_num(objs); i++) { X509_OBJECT *obj; X509 *cert; @@ -4628,9 +4680,11 @@ _ssl__SSLContext_get_ca_certs_impl(PySSLContext *self, int binary_form) } Py_CLEAR(ci); } + sk_X509_OBJECT_pop_free(objs, X509_OBJECT_free); return rlist; error: + sk_X509_OBJECT_pop_free(objs, X509_OBJECT_free); Py_XDECREF(ci); Py_XDECREF(rlist); return NULL; diff --git a/contrib/tools/python3/Modules/_threadmodule.c b/contrib/tools/python3/Modules/_threadmodule.c index 568fe8375d..365f446008 100644 --- a/contrib/tools/python3/Modules/_threadmodule.c +++ b/contrib/tools/python3/Modules/_threadmodule.c @@ -1190,7 +1190,7 @@ thread_PyThread_start_new_thread(PyObject *self, PyObject *fargs) "thread is not supported for isolated subinterpreters"); return NULL; } - if (interp->finalizing) { + if (_PyInterpreterState_GetFinalizing(interp) != NULL) { PyErr_SetString(PyExc_RuntimeError, "can't create new thread at interpreter shutdown"); return NULL; diff --git a/contrib/tools/python3/Modules/arraymodule.c b/contrib/tools/python3/Modules/arraymodule.c index 6680820d8e..19ee83d24c 100644 --- a/contrib/tools/python3/Modules/arraymodule.c +++ b/contrib/tools/python3/Modules/arraymodule.c @@ -244,7 +244,7 @@ BB_setitem(arrayobject *ap, Py_ssize_t i, PyObject *v) if (!PyArg_Parse(v, "b;array item must be integer", &x)) return -1; if (i >= 0) - ((char *)ap->ob_item)[i] = x; + ((unsigned char *)ap->ob_item)[i] = x; return 0; } diff --git a/contrib/tools/python3/Modules/clinic/_elementtree.c.h b/contrib/tools/python3/Modules/clinic/_elementtree.c.h index 0b3a86159c..d635d33d85 100644 --- a/contrib/tools/python3/Modules/clinic/_elementtree.c.h +++ b/contrib/tools/python3/Modules/clinic/_elementtree.c.h @@ -1168,6 +1168,23 @@ _elementtree_XMLParser_close(XMLParserObject *self, PyObject *Py_UNUSED(ignored) return _elementtree_XMLParser_close_impl(self); } +PyDoc_STRVAR(_elementtree_XMLParser_flush__doc__, +"flush($self, /)\n" +"--\n" +"\n"); + +#define _ELEMENTTREE_XMLPARSER_FLUSH_METHODDEF \ + {"flush", (PyCFunction)_elementtree_XMLParser_flush, METH_NOARGS, _elementtree_XMLParser_flush__doc__}, + +static PyObject * +_elementtree_XMLParser_flush_impl(XMLParserObject *self); + +static PyObject * +_elementtree_XMLParser_flush(XMLParserObject *self, PyObject *Py_UNUSED(ignored)) +{ + return _elementtree_XMLParser_flush_impl(self); +} + PyDoc_STRVAR(_elementtree_XMLParser_feed__doc__, "feed($self, data, /)\n" "--\n" @@ -1218,4 +1235,4 @@ skip_optional: exit: return return_value; } -/*[clinic end generated code: output=31c4780c4df68441 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=ec30550fd83b2791 input=a9049054013a1b77]*/ diff --git a/contrib/tools/python3/Modules/clinic/pyexpat.c.h b/contrib/tools/python3/Modules/clinic/pyexpat.c.h index 34937c5d59..20a28dc6a7 100644 --- a/contrib/tools/python3/Modules/clinic/pyexpat.c.h +++ b/contrib/tools/python3/Modules/clinic/pyexpat.c.h @@ -8,6 +8,53 @@ preserve #endif +PyDoc_STRVAR(pyexpat_xmlparser_SetReparseDeferralEnabled__doc__, +"SetReparseDeferralEnabled($self, enabled, /)\n" +"--\n" +"\n" +"Enable/Disable reparse deferral; enabled by default with Expat >=2.6.0."); + +#define PYEXPAT_XMLPARSER_SETREPARSEDEFERRALENABLED_METHODDEF \ + {"SetReparseDeferralEnabled", (PyCFunction)pyexpat_xmlparser_SetReparseDeferralEnabled, METH_O, pyexpat_xmlparser_SetReparseDeferralEnabled__doc__}, + +static PyObject * +pyexpat_xmlparser_SetReparseDeferralEnabled_impl(xmlparseobject *self, + int enabled); + +static PyObject * +pyexpat_xmlparser_SetReparseDeferralEnabled(xmlparseobject *self, PyObject *arg) +{ + PyObject *return_value = NULL; + int enabled; + + enabled = PyObject_IsTrue(arg); + if (enabled < 0) { + goto exit; + } + return_value = pyexpat_xmlparser_SetReparseDeferralEnabled_impl(self, enabled); + +exit: + return return_value; +} + +PyDoc_STRVAR(pyexpat_xmlparser_GetReparseDeferralEnabled__doc__, +"GetReparseDeferralEnabled($self, /)\n" +"--\n" +"\n" +"Retrieve reparse deferral enabled status; always returns false with Expat <2.6.0."); + +#define PYEXPAT_XMLPARSER_GETREPARSEDEFERRALENABLED_METHODDEF \ + {"GetReparseDeferralEnabled", (PyCFunction)pyexpat_xmlparser_GetReparseDeferralEnabled, METH_NOARGS, pyexpat_xmlparser_GetReparseDeferralEnabled__doc__}, + +static PyObject * +pyexpat_xmlparser_GetReparseDeferralEnabled_impl(xmlparseobject *self); + +static PyObject * +pyexpat_xmlparser_GetReparseDeferralEnabled(xmlparseobject *self, PyObject *Py_UNUSED(ignored)) +{ + return pyexpat_xmlparser_GetReparseDeferralEnabled_impl(self); +} + PyDoc_STRVAR(pyexpat_xmlparser_Parse__doc__, "Parse($self, data, isfinal=False, /)\n" "--\n" @@ -498,4 +545,4 @@ exit: #ifndef PYEXPAT_XMLPARSER_USEFOREIGNDTD_METHODDEF #define PYEXPAT_XMLPARSER_USEFOREIGNDTD_METHODDEF #endif /* !defined(PYEXPAT_XMLPARSER_USEFOREIGNDTD_METHODDEF) */ -/*[clinic end generated code: output=63efc62e24a7b5a7 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=8625852bb44a5e56 input=a9049054013a1b77]*/ diff --git a/contrib/tools/python3/Modules/gcmodule.c b/contrib/tools/python3/Modules/gcmodule.c index b7cb30ab7e..5f2820c848 100644 --- a/contrib/tools/python3/Modules/gcmodule.c +++ b/contrib/tools/python3/Modules/gcmodule.c @@ -2290,6 +2290,9 @@ void _Py_RunGC(PyThreadState *tstate) { GCState *gcstate = &tstate->interp->gc; + if (!gcstate->enabled) { + return; + } gcstate->collecting = 1; gc_collect_generations(tstate); gcstate->collecting = 0; diff --git a/contrib/tools/python3/Modules/getpath.c b/contrib/tools/python3/Modules/getpath.c index bd6920cf06..9dbe2c2505 100644 --- a/contrib/tools/python3/Modules/getpath.c +++ b/contrib/tools/python3/Modules/getpath.c @@ -260,6 +260,10 @@ getpath_joinpath(PyObject *Py_UNUSED(self), PyObject *args) } /* Convert all parts to wchar and accumulate max final length */ wchar_t **parts = (wchar_t **)PyMem_Malloc(n * sizeof(wchar_t *)); + if (parts == NULL) { + PyErr_NoMemory(); + return NULL; + } memset(parts, 0, n * sizeof(wchar_t *)); Py_ssize_t cchFinal = 0; Py_ssize_t first = 0; diff --git a/contrib/tools/python3/Modules/itertoolsmodule.c b/contrib/tools/python3/Modules/itertoolsmodule.c index 24e77c485d..d42f9dd076 100644 --- a/contrib/tools/python3/Modules/itertoolsmodule.c +++ b/contrib/tools/python3/Modules/itertoolsmodule.c @@ -810,10 +810,9 @@ teedataobject_traverse(teedataobject *tdo, visitproc visit, void * arg) } static void -teedataobject_safe_decref(PyObject *obj, PyTypeObject *tdo_type) +teedataobject_safe_decref(PyObject *obj) { - while (obj && Py_IS_TYPE(obj, tdo_type) && - Py_REFCNT(obj) == 1) { + while (obj && Py_REFCNT(obj) == 1) { PyObject *nextlink = ((teedataobject *)obj)->nextlink; ((teedataobject *)obj)->nextlink = NULL; Py_SETREF(obj, nextlink); @@ -832,8 +831,7 @@ teedataobject_clear(teedataobject *tdo) Py_CLEAR(tdo->values[i]); tmp = tdo->nextlink; tdo->nextlink = NULL; - itertools_state *state = get_module_state_by_cls(Py_TYPE(tdo)); - teedataobject_safe_decref(tmp, state->teedataobject_type); + teedataobject_safe_decref(tmp); return 0; } @@ -4618,15 +4616,15 @@ batched(p, n) --> [p0, p1, ..., p_n-1], [p_n, p_n+1, ..., p_2n-1], ...\n\ chain(p, q, ...) --> p0, p1, ... plast, q0, q1, ...\n\ chain.from_iterable([p, q, ...]) --> p0, p1, ... plast, q0, q1, ...\n\ compress(data, selectors) --> (d[0] if s[0]), (d[1] if s[1]), ...\n\ -dropwhile(pred, seq) --> seq[n], seq[n+1], starting when pred fails\n\ +dropwhile(predicate, seq) --> seq[n], seq[n+1], starting when predicate fails\n\ groupby(iterable[, keyfunc]) --> sub-iterators grouped by value of keyfunc(v)\n\ -filterfalse(pred, seq) --> elements of seq where pred(elem) is False\n\ +filterfalse(predicate, seq) --> elements of seq where predicate(elem) is False\n\ islice(seq, [start,] stop [, step]) --> elements from\n\ seq[start:stop:step]\n\ pairwise(s) --> (s[0],s[1]), (s[1],s[2]), (s[2], s[3]), ...\n\ starmap(fun, seq) --> fun(*seq[0]), fun(*seq[1]), ...\n\ tee(it, n=2) --> (it1, it2 , ... itn) splits one iterator into n\n\ -takewhile(pred, seq) --> seq[0], seq[1], until pred fails\n\ +takewhile(predicate, seq) --> seq[0], seq[1], until predicate fails\n\ zip_longest(p, q, ...) --> (p[0], q[0]), (p[1], q[1]), ...\n\ \n\ Combinatoric generators:\n\ diff --git a/contrib/tools/python3/Modules/md5module.c b/contrib/tools/python3/Modules/md5module.c index 2122f8b18b..dcc9da38d7 100644 --- a/contrib/tools/python3/Modules/md5module.c +++ b/contrib/tools/python3/Modules/md5module.c @@ -52,7 +52,7 @@ typedef struct { // Prevents undefined behavior via multiple threads entering the C API. // The lock will be NULL before threaded access has been enabled. PyThread_type_lock lock; - Hacl_Streaming_MD5_state *hash_state; + Hacl_Hash_MD5_state_t *hash_state; } MD5object; #include "clinic/md5module.c.h" @@ -90,11 +90,11 @@ MD5_traverse(PyObject *ptr, visitproc visit, void *arg) static void MD5_dealloc(MD5object *ptr) { - Hacl_Streaming_MD5_legacy_free(ptr->hash_state); + Hacl_Hash_MD5_free(ptr->hash_state); if (ptr->lock != NULL) { PyThread_free_lock(ptr->lock); } - PyTypeObject *tp = Py_TYPE(ptr); + PyTypeObject *tp = Py_TYPE((PyObject*)ptr); PyObject_GC_UnTrack(ptr); PyObject_GC_Del(ptr); Py_DECREF(tp); @@ -122,7 +122,7 @@ MD5Type_copy_impl(MD5object *self, PyTypeObject *cls) return NULL; ENTER_HASHLIB(self); - newobj->hash_state = Hacl_Streaming_MD5_legacy_copy(self->hash_state); + newobj->hash_state = Hacl_Hash_MD5_copy(self->hash_state); LEAVE_HASHLIB(self); return (PyObject *)newobj; } @@ -139,7 +139,7 @@ MD5Type_digest_impl(MD5object *self) { unsigned char digest[MD5_DIGESTSIZE]; ENTER_HASHLIB(self); - Hacl_Streaming_MD5_legacy_finish(self->hash_state, digest); + Hacl_Hash_MD5_digest(self->hash_state, digest); LEAVE_HASHLIB(self); return PyBytes_FromStringAndSize((const char *)digest, MD5_DIGESTSIZE); } @@ -156,20 +156,20 @@ MD5Type_hexdigest_impl(MD5object *self) { unsigned char digest[MD5_DIGESTSIZE]; ENTER_HASHLIB(self); - Hacl_Streaming_MD5_legacy_finish(self->hash_state, digest); + Hacl_Hash_MD5_digest(self->hash_state, digest); LEAVE_HASHLIB(self); return _Py_strhex((const char*)digest, MD5_DIGESTSIZE); } -static void update(Hacl_Streaming_MD5_state *state, uint8_t *buf, Py_ssize_t len) { +static void update(Hacl_Hash_MD5_state_t *state, uint8_t *buf, Py_ssize_t len) { #if PY_SSIZE_T_MAX > UINT32_MAX while (len > UINT32_MAX) { - Hacl_Streaming_MD5_legacy_update(state, buf, UINT32_MAX); + Hacl_Hash_MD5_update(state, buf, UINT32_MAX); len -= UINT32_MAX; buf += UINT32_MAX; } #endif - Hacl_Streaming_MD5_legacy_update(state, buf, (uint32_t) len); + Hacl_Hash_MD5_update(state, buf, (uint32_t) len); } /*[clinic input] @@ -293,7 +293,7 @@ _md5_md5_impl(PyObject *module, PyObject *string, int usedforsecurity) return NULL; } - new->hash_state = Hacl_Streaming_MD5_legacy_create_in(); + new->hash_state = Hacl_Hash_MD5_malloc(); if (PyErr_Occurred()) { Py_DECREF(new); diff --git a/contrib/tools/python3/Modules/overlapped.c b/contrib/tools/python3/Modules/overlapped.c index afdd78d1bc..686ecf8b33 100644 --- a/contrib/tools/python3/Modules/overlapped.c +++ b/contrib/tools/python3/Modules/overlapped.c @@ -719,6 +719,24 @@ Overlapped_dealloc(OverlappedObject *self) if (!HasOverlappedIoCompleted(&self->overlapped) && self->type != TYPE_NOT_STARTED) { + // NOTE: We should not get here, if we do then something is wrong in + // the IocpProactor or ProactorEventLoop. Since everything uses IOCP if + // the overlapped IO hasn't completed yet then we should not be + // deallocating! + // + // The problem is likely that this OverlappedObject was removed from + // the IocpProactor._cache before it was complete. The _cache holds a + // reference while IO is pending so that it does not get deallocated + // while the kernel has retained the OVERLAPPED structure. + // + // CancelIoEx (likely called from self.cancel()) may have successfully + // completed, but the OVERLAPPED is still in use until either + // HasOverlappedIoCompleted() is true or GetQueuedCompletionStatus has + // returned this OVERLAPPED object. + // + // NOTE: Waiting when IOCP is in use can hang indefinitely, but this + // CancelIoEx is superfluous in that self.cancel() was already called, + // so I've only ever seen this return FALSE with GLE=ERROR_NOT_FOUND Py_BEGIN_ALLOW_THREADS if (CancelIoEx(self->handle, &self->overlapped)) wait = TRUE; @@ -2039,6 +2057,7 @@ overlapped_exec(PyObject *module) WINAPI_CONSTANT(F_DWORD, ERROR_OPERATION_ABORTED); WINAPI_CONSTANT(F_DWORD, ERROR_SEM_TIMEOUT); WINAPI_CONSTANT(F_DWORD, ERROR_PIPE_BUSY); + WINAPI_CONSTANT(F_DWORD, ERROR_PORT_UNREACHABLE); WINAPI_CONSTANT(F_DWORD, INFINITE); WINAPI_CONSTANT(F_HANDLE, INVALID_HANDLE_VALUE); WINAPI_CONSTANT(F_HANDLE, NULL); diff --git a/contrib/tools/python3/Modules/posixmodule.c b/contrib/tools/python3/Modules/posixmodule.c index c99c69d018..8fb0d3ceda 100644 --- a/contrib/tools/python3/Modules/posixmodule.c +++ b/contrib/tools/python3/Modules/posixmodule.c @@ -7664,7 +7664,7 @@ os_fork1_impl(PyObject *module) pid_t pid; PyInterpreterState *interp = _PyInterpreterState_GET(); - if (interp->finalizing) { + if (_PyInterpreterState_GetFinalizing(interp) != NULL) { PyErr_SetString(PyExc_RuntimeError, "can't fork at interpreter shutdown"); return NULL; @@ -7708,7 +7708,7 @@ os_fork_impl(PyObject *module) { pid_t pid; PyInterpreterState *interp = _PyInterpreterState_GET(); - if (interp->finalizing) { + if (_PyInterpreterState_GetFinalizing(interp) != NULL) { PyErr_SetString(PyExc_RuntimeError, "can't fork at interpreter shutdown"); return NULL; @@ -8395,7 +8395,7 @@ os_forkpty_impl(PyObject *module) pid_t pid; PyInterpreterState *interp = _PyInterpreterState_GET(); - if (interp->finalizing) { + if (_PyInterpreterState_GetFinalizing(interp) != NULL) { PyErr_SetString(PyExc_RuntimeError, "can't fork at interpreter shutdown"); return NULL; @@ -9249,36 +9249,39 @@ wait_helper(PyObject *module, pid_t pid, int status, struct rusage *ru) if (!result) return NULL; + int pos = 0; + #ifndef doubletime #define doubletime(TV) ((double)(TV).tv_sec + (TV).tv_usec * 0.000001) #endif - PyStructSequence_SET_ITEM(result, 0, - PyFloat_FromDouble(doubletime(ru->ru_utime))); - PyStructSequence_SET_ITEM(result, 1, - PyFloat_FromDouble(doubletime(ru->ru_stime))); -#define SET_INT(result, index, value)\ - PyStructSequence_SET_ITEM(result, index, PyLong_FromLong(value)) - SET_INT(result, 2, ru->ru_maxrss); - SET_INT(result, 3, ru->ru_ixrss); - SET_INT(result, 4, ru->ru_idrss); - SET_INT(result, 5, ru->ru_isrss); - SET_INT(result, 6, ru->ru_minflt); - SET_INT(result, 7, ru->ru_majflt); - SET_INT(result, 8, ru->ru_nswap); - SET_INT(result, 9, ru->ru_inblock); - SET_INT(result, 10, ru->ru_oublock); - SET_INT(result, 11, ru->ru_msgsnd); - SET_INT(result, 12, ru->ru_msgrcv); - SET_INT(result, 13, ru->ru_nsignals); - SET_INT(result, 14, ru->ru_nvcsw); - SET_INT(result, 15, ru->ru_nivcsw); -#undef SET_INT - - if (PyErr_Occurred()) { - Py_DECREF(result); - return NULL; - } +#define SET_RESULT(CALL) \ + do { \ + PyObject *item = (CALL); \ + if (item == NULL) { \ + Py_DECREF(result); \ + return NULL; \ + } \ + PyStructSequence_SET_ITEM(result, pos++, item); \ + } while(0) + + SET_RESULT(PyFloat_FromDouble(doubletime(ru->ru_utime))); + SET_RESULT(PyFloat_FromDouble(doubletime(ru->ru_stime))); + SET_RESULT(PyLong_FromLong(ru->ru_maxrss)); + SET_RESULT(PyLong_FromLong(ru->ru_ixrss)); + SET_RESULT(PyLong_FromLong(ru->ru_idrss)); + SET_RESULT(PyLong_FromLong(ru->ru_isrss)); + SET_RESULT(PyLong_FromLong(ru->ru_minflt)); + SET_RESULT(PyLong_FromLong(ru->ru_majflt)); + SET_RESULT(PyLong_FromLong(ru->ru_nswap)); + SET_RESULT(PyLong_FromLong(ru->ru_inblock)); + SET_RESULT(PyLong_FromLong(ru->ru_oublock)); + SET_RESULT(PyLong_FromLong(ru->ru_msgsnd)); + SET_RESULT(PyLong_FromLong(ru->ru_msgrcv)); + SET_RESULT(PyLong_FromLong(ru->ru_nsignals)); + SET_RESULT(PyLong_FromLong(ru->ru_nvcsw)); + SET_RESULT(PyLong_FromLong(ru->ru_nivcsw)); +#undef SET_RESULT return Py_BuildValue("NiN", PyLong_FromPid(pid), status, result); } @@ -9401,15 +9404,25 @@ os_waitid_impl(PyObject *module, idtype_t idtype, id_t id, int options) if (!result) return NULL; - PyStructSequence_SET_ITEM(result, 0, PyLong_FromPid(si.si_pid)); - PyStructSequence_SET_ITEM(result, 1, _PyLong_FromUid(si.si_uid)); - PyStructSequence_SET_ITEM(result, 2, PyLong_FromLong((long)(si.si_signo))); - PyStructSequence_SET_ITEM(result, 3, PyLong_FromLong((long)(si.si_status))); - PyStructSequence_SET_ITEM(result, 4, PyLong_FromLong((long)(si.si_code))); - if (PyErr_Occurred()) { - Py_DECREF(result); - return NULL; - } + int pos = 0; + +#define SET_RESULT(CALL) \ + do { \ + PyObject *item = (CALL); \ + if (item == NULL) { \ + Py_DECREF(result); \ + return NULL; \ + } \ + PyStructSequence_SET_ITEM(result, pos++, item); \ + } while(0) + + SET_RESULT(PyLong_FromPid(si.si_pid)); + SET_RESULT(_PyLong_FromUid(si.si_uid)); + SET_RESULT(PyLong_FromLong((long)(si.si_signo))); + SET_RESULT(PyLong_FromLong((long)(si.si_status))); + SET_RESULT(PyLong_FromLong((long)(si.si_code))); + +#undef SET_RESULT return result; } @@ -12362,46 +12375,50 @@ _pystatvfs_fromstructstatvfs(PyObject *module, struct statvfs st) { if (v == NULL) return NULL; + int pos = 0; + +#define SET_RESULT(CALL) \ + do { \ + PyObject *item = (CALL); \ + if (item == NULL) { \ + Py_DECREF(v); \ + return NULL; \ + } \ + PyStructSequence_SET_ITEM(v, pos++, item); \ + } while(0) + #if !defined(HAVE_LARGEFILE_SUPPORT) - PyStructSequence_SET_ITEM(v, 0, PyLong_FromLong((long) st.f_bsize)); - PyStructSequence_SET_ITEM(v, 1, PyLong_FromLong((long) st.f_frsize)); - PyStructSequence_SET_ITEM(v, 2, PyLong_FromLong((long) st.f_blocks)); - PyStructSequence_SET_ITEM(v, 3, PyLong_FromLong((long) st.f_bfree)); - PyStructSequence_SET_ITEM(v, 4, PyLong_FromLong((long) st.f_bavail)); - PyStructSequence_SET_ITEM(v, 5, PyLong_FromLong((long) st.f_files)); - PyStructSequence_SET_ITEM(v, 6, PyLong_FromLong((long) st.f_ffree)); - PyStructSequence_SET_ITEM(v, 7, PyLong_FromLong((long) st.f_favail)); - PyStructSequence_SET_ITEM(v, 8, PyLong_FromLong((long) st.f_flag)); - PyStructSequence_SET_ITEM(v, 9, PyLong_FromLong((long) st.f_namemax)); + SET_RESULT(PyLong_FromLong((long) st.f_bsize)); + SET_RESULT(PyLong_FromLong((long) st.f_frsize)); + SET_RESULT(PyLong_FromLong((long) st.f_blocks)); + SET_RESULT(PyLong_FromLong((long) st.f_bfree)); + SET_RESULT(PyLong_FromLong((long) st.f_bavail)); + SET_RESULT(PyLong_FromLong((long) st.f_files)); + SET_RESULT(PyLong_FromLong((long) st.f_ffree)); + SET_RESULT(PyLong_FromLong((long) st.f_favail)); + SET_RESULT(PyLong_FromLong((long) st.f_flag)); + SET_RESULT(PyLong_FromLong((long) st.f_namemax)); #else - PyStructSequence_SET_ITEM(v, 0, PyLong_FromLong((long) st.f_bsize)); - PyStructSequence_SET_ITEM(v, 1, PyLong_FromLong((long) st.f_frsize)); - PyStructSequence_SET_ITEM(v, 2, - PyLong_FromLongLong((long long) st.f_blocks)); - PyStructSequence_SET_ITEM(v, 3, - PyLong_FromLongLong((long long) st.f_bfree)); - PyStructSequence_SET_ITEM(v, 4, - PyLong_FromLongLong((long long) st.f_bavail)); - PyStructSequence_SET_ITEM(v, 5, - PyLong_FromLongLong((long long) st.f_files)); - PyStructSequence_SET_ITEM(v, 6, - PyLong_FromLongLong((long long) st.f_ffree)); - PyStructSequence_SET_ITEM(v, 7, - PyLong_FromLongLong((long long) st.f_favail)); - PyStructSequence_SET_ITEM(v, 8, PyLong_FromLong((long) st.f_flag)); - PyStructSequence_SET_ITEM(v, 9, PyLong_FromLong((long) st.f_namemax)); + SET_RESULT(PyLong_FromLong((long) st.f_bsize)); + SET_RESULT(PyLong_FromLong((long) st.f_frsize)); + SET_RESULT(PyLong_FromLongLong((long long) st.f_blocks)); + SET_RESULT(PyLong_FromLongLong((long long) st.f_bfree)); + SET_RESULT(PyLong_FromLongLong((long long) st.f_bavail)); + SET_RESULT(PyLong_FromLongLong((long long) st.f_files)); + SET_RESULT(PyLong_FromLongLong((long long) st.f_ffree)); + SET_RESULT(PyLong_FromLongLong((long long) st.f_favail)); + SET_RESULT(PyLong_FromLong((long) st.f_flag)); + SET_RESULT(PyLong_FromLong((long) st.f_namemax)); #endif /* The _ALL_SOURCE feature test macro defines f_fsid as a structure * (issue #32390). */ #if defined(_AIX) && defined(_ALL_SOURCE) - PyStructSequence_SET_ITEM(v, 10, PyLong_FromUnsignedLong(st.f_fsid.val[0])); + SET_RESULT(PyLong_FromUnsignedLong(st.f_fsid.val[0])); #else - PyStructSequence_SET_ITEM(v, 10, PyLong_FromUnsignedLong(st.f_fsid)); + SET_RESULT(PyLong_FromUnsignedLong(st.f_fsid)); #endif - if (PyErr_Occurred()) { - Py_DECREF(v); - return NULL; - } + +#undef SET_RESULT return v; } @@ -14331,12 +14348,23 @@ os_get_terminal_size_impl(PyObject *module, int fd) termsize = PyStructSequence_New((PyTypeObject *)TerminalSizeType); if (termsize == NULL) return NULL; - PyStructSequence_SET_ITEM(termsize, 0, PyLong_FromLong(columns)); - PyStructSequence_SET_ITEM(termsize, 1, PyLong_FromLong(lines)); - if (PyErr_Occurred()) { - Py_DECREF(termsize); - return NULL; - } + + int pos = 0; + +#define SET_TERMSIZE(CALL) \ + do { \ + PyObject *item = (CALL); \ + if (item == NULL) { \ + Py_DECREF(termsize); \ + return NULL; \ + } \ + PyStructSequence_SET_ITEM(termsize, pos++, item); \ + } while(0) + + SET_TERMSIZE(PyLong_FromLong(columns)); + SET_TERMSIZE(PyLong_FromLong(lines)); +#undef SET_TERMSIZE + return termsize; } #endif /* defined(TERMSIZE_USE_CONIO) || defined(TERMSIZE_USE_IOCTL) */ @@ -15026,6 +15054,10 @@ DirEntry_from_find_data(PyObject *module, path_t *path, WIN32_FIND_DATAW *dataW) find_data_to_file_info(dataW, &file_info, &reparse_tag); _Py_attribute_data_to_stat(&file_info, reparse_tag, NULL, NULL, &entry->win32_lstat); + /* ctime is only deprecated from 3.12, so we copy birthtime across */ + entry->win32_lstat.st_ctime = entry->win32_lstat.st_birthtime; + entry->win32_lstat.st_ctime_nsec = entry->win32_lstat.st_birthtime_nsec; + return (PyObject *)entry; error: diff --git a/contrib/tools/python3/Modules/pwdmodule.c b/contrib/tools/python3/Modules/pwdmodule.c index cc2e2a4389..920259a62c 100644 --- a/contrib/tools/python3/Modules/pwdmodule.c +++ b/contrib/tools/python3/Modules/pwdmodule.c @@ -63,53 +63,52 @@ static struct PyModuleDef pwdmodule; #define DEFAULT_BUFFER_SIZE 1024 -static void -sets(PyObject *v, int i, const char* val) -{ - if (val) { - PyObject *o = PyUnicode_DecodeFSDefault(val); - PyStructSequence_SET_ITEM(v, i, o); - } - else { - PyStructSequence_SET_ITEM(v, i, Py_None); - Py_INCREF(Py_None); - } -} - static PyObject * mkpwent(PyObject *module, struct passwd *p) { - int setIndex = 0; PyObject *v = PyStructSequence_New(get_pwd_state(module)->StructPwdType); - if (v == NULL) + if (v == NULL) { return NULL; + } + + int setIndex = 0; + +#define SET_STRING(VAL) \ + SET_RESULT((VAL) ? PyUnicode_DecodeFSDefault((VAL)) : Py_NewRef(Py_None)) -#define SETS(i,val) sets(v, i, val) +#define SET_RESULT(CALL) \ + do { \ + PyObject *item = (CALL); \ + if (item == NULL) { \ + goto error; \ + } \ + PyStructSequence_SET_ITEM(v, setIndex++, item); \ + } while(0) - SETS(setIndex++, p->pw_name); + SET_STRING(p->pw_name); #if defined(HAVE_STRUCT_PASSWD_PW_PASSWD) && !defined(__ANDROID__) - SETS(setIndex++, p->pw_passwd); + SET_STRING(p->pw_passwd); #else - SETS(setIndex++, ""); + SET_STRING(""); #endif - PyStructSequence_SET_ITEM(v, setIndex++, _PyLong_FromUid(p->pw_uid)); - PyStructSequence_SET_ITEM(v, setIndex++, _PyLong_FromGid(p->pw_gid)); + SET_RESULT(_PyLong_FromUid(p->pw_uid)); + SET_RESULT(_PyLong_FromGid(p->pw_gid)); #if defined(HAVE_STRUCT_PASSWD_PW_GECOS) - SETS(setIndex++, p->pw_gecos); + SET_STRING(p->pw_gecos); #else - SETS(setIndex++, ""); + SET_STRING(""); #endif - SETS(setIndex++, p->pw_dir); - SETS(setIndex++, p->pw_shell); - -#undef SETS + SET_STRING(p->pw_dir); + SET_STRING(p->pw_shell); - if (PyErr_Occurred()) { - Py_XDECREF(v); - return NULL; - } +#undef SET_STRING +#undef SET_RESULT return v; + +error: + Py_DECREF(v); + return NULL; } /*[clinic input] diff --git a/contrib/tools/python3/Modules/pyexpat.c b/contrib/tools/python3/Modules/pyexpat.c index b21360419d..be31c637fc 100644 --- a/contrib/tools/python3/Modules/pyexpat.c +++ b/contrib/tools/python3/Modules/pyexpat.c @@ -1,6 +1,7 @@ #include "Python.h" #include <ctype.h> +#include <stdbool.h> #include "structmember.h" // PyMemberDef #include "expat.h" @@ -76,6 +77,12 @@ typedef struct { /* NULL if not enabled */ int buffer_size; /* Size of buffer, in XML_Char units */ int buffer_used; /* Buffer units in use */ + bool reparse_deferral_enabled; /* Whether to defer reparsing of + unfinished XML tokens; a de-facto cache of + what Expat has the authority on, for lack + of a getter API function + "XML_GetReparseDeferralEnabled" in Expat + 2.6.0 */ PyObject *intern; /* Dictionary to intern strings */ PyObject **handlers; } xmlparseobject; @@ -706,6 +713,40 @@ get_parse_result(pyexpat_state *state, xmlparseobject *self, int rv) #define MAX_CHUNK_SIZE (1 << 20) /*[clinic input] +pyexpat.xmlparser.SetReparseDeferralEnabled + + enabled: bool + / + +Enable/Disable reparse deferral; enabled by default with Expat >=2.6.0. +[clinic start generated code]*/ + +static PyObject * +pyexpat_xmlparser_SetReparseDeferralEnabled_impl(xmlparseobject *self, + int enabled) +/*[clinic end generated code: output=5ec539e3b63c8c49 input=021eb9e0bafc32c5]*/ +{ +#if XML_COMBINED_VERSION >= 20600 + XML_SetReparseDeferralEnabled(self->itself, enabled ? XML_TRUE : XML_FALSE); + self->reparse_deferral_enabled = (bool)enabled; +#endif + Py_RETURN_NONE; +} + +/*[clinic input] +pyexpat.xmlparser.GetReparseDeferralEnabled + +Retrieve reparse deferral enabled status; always returns false with Expat <2.6.0. +[clinic start generated code]*/ + +static PyObject * +pyexpat_xmlparser_GetReparseDeferralEnabled_impl(xmlparseobject *self) +/*[clinic end generated code: output=4e91312e88a595a8 input=54b5f11d32b20f3e]*/ +{ + return PyBool_FromLong(self->reparse_deferral_enabled); +} + +/*[clinic input] pyexpat.xmlparser.Parse cls: defining_class @@ -1065,6 +1106,8 @@ static struct PyMethodDef xmlparse_methods[] = { #if XML_COMBINED_VERSION >= 19505 PYEXPAT_XMLPARSER_USEFOREIGNDTD_METHODDEF #endif + PYEXPAT_XMLPARSER_SETREPARSEDEFERRALENABLED_METHODDEF + PYEXPAT_XMLPARSER_GETREPARSEDEFERRALENABLED_METHODDEF {NULL, NULL} /* sentinel */ }; @@ -1160,6 +1203,11 @@ newxmlparseobject(pyexpat_state *state, const char *encoding, self->ns_prefixes = 0; self->handlers = NULL; self->intern = Py_XNewRef(intern); +#if XML_COMBINED_VERSION >= 20600 + self->reparse_deferral_enabled = true; +#else + self->reparse_deferral_enabled = false; +#endif /* namespace_separator is either NULL or contains one char + \0 */ self->itself = XML_ParserCreate_MM(encoding, &ExpatMemoryHandler, @@ -2028,6 +2076,11 @@ pyexpat_exec(PyObject *mod) #else capi->SetHashSalt = NULL; #endif +#if XML_COMBINED_VERSION >= 20600 + capi->SetReparseDeferralEnabled = XML_SetReparseDeferralEnabled; +#else + capi->SetReparseDeferralEnabled = 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 b7c6b1b539..97f1db20f6 100644 --- a/contrib/tools/python3/Modules/selectmodule.c +++ b/contrib/tools/python3/Modules/selectmodule.c @@ -818,10 +818,10 @@ static int devpoll_flush(devpollObject *self) ** clear what to do if a partial write occurred. For now, raise ** an exception and see if we actually found this problem in ** the wild. - ** See http://bugs.python.org/issue6397. + ** See https://github.com/python/cpython/issues/50646. */ PyErr_Format(PyExc_OSError, "failed to write all pollfds. " - "Please, report at http://bugs.python.org/. " + "Please, report at https://github.com/python/cpython/issues/. " "Data to report: Size tried: %d, actual size written: %d.", size, n); return -1; diff --git a/contrib/tools/python3/Modules/sha1module.c b/contrib/tools/python3/Modules/sha1module.c index c66269b5f5..624dc57b0a 100644 --- a/contrib/tools/python3/Modules/sha1module.c +++ b/contrib/tools/python3/Modules/sha1module.c @@ -51,7 +51,7 @@ typedef struct { // Prevents undefined behavior via multiple threads entering the C API. // The lock will be NULL before threaded access has been enabled. PyThread_type_lock lock; - Hacl_Streaming_SHA1_state *hash_state; + Hacl_Hash_SHA1_state_t *hash_state; } SHA1object; #include "clinic/sha1module.c.h" @@ -90,7 +90,7 @@ SHA1_traverse(PyObject *ptr, visitproc visit, void *arg) static void SHA1_dealloc(SHA1object *ptr) { - Hacl_Streaming_SHA1_legacy_free(ptr->hash_state); + Hacl_Hash_SHA1_free(ptr->hash_state); if (ptr->lock != NULL) { PyThread_free_lock(ptr->lock); } @@ -122,7 +122,7 @@ SHA1Type_copy_impl(SHA1object *self, PyTypeObject *cls) return NULL; ENTER_HASHLIB(self); - newobj->hash_state = Hacl_Streaming_SHA1_legacy_copy(self->hash_state); + newobj->hash_state = Hacl_Hash_SHA1_copy(self->hash_state); LEAVE_HASHLIB(self); return (PyObject *)newobj; } @@ -139,7 +139,7 @@ SHA1Type_digest_impl(SHA1object *self) { unsigned char digest[SHA1_DIGESTSIZE]; ENTER_HASHLIB(self); - Hacl_Streaming_SHA1_legacy_finish(self->hash_state, digest); + Hacl_Hash_SHA1_digest(self->hash_state, digest); LEAVE_HASHLIB(self); return PyBytes_FromStringAndSize((const char *)digest, SHA1_DIGESTSIZE); } @@ -156,20 +156,20 @@ SHA1Type_hexdigest_impl(SHA1object *self) { unsigned char digest[SHA1_DIGESTSIZE]; ENTER_HASHLIB(self); - Hacl_Streaming_SHA1_legacy_finish(self->hash_state, digest); + Hacl_Hash_SHA1_digest(self->hash_state, digest); LEAVE_HASHLIB(self); return _Py_strhex((const char *)digest, SHA1_DIGESTSIZE); } -static void update(Hacl_Streaming_SHA1_state *state, uint8_t *buf, Py_ssize_t len) { +static void update(Hacl_Hash_SHA1_state_t *state, uint8_t *buf, Py_ssize_t len) { #if PY_SSIZE_T_MAX > UINT32_MAX while (len > UINT32_MAX) { - Hacl_Streaming_SHA1_legacy_update(state, buf, UINT32_MAX); + Hacl_Hash_SHA1_update(state, buf, UINT32_MAX); len -= UINT32_MAX; buf += UINT32_MAX; } #endif - Hacl_Streaming_SHA1_legacy_update(state, buf, (uint32_t) len); + Hacl_Hash_SHA1_update(state, buf, (uint32_t) len); } /*[clinic input] @@ -293,7 +293,7 @@ _sha1_sha1_impl(PyObject *module, PyObject *string, int usedforsecurity) return NULL; } - new->hash_state = Hacl_Streaming_SHA1_legacy_create_in(); + new->hash_state = Hacl_Hash_SHA1_malloc(); if (PyErr_Occurred()) { Py_DECREF(new); diff --git a/contrib/tools/python3/Modules/sha2module.c b/contrib/tools/python3/Modules/sha2module.c index db3774c81e..f5dab39a8c 100644 --- a/contrib/tools/python3/Modules/sha2module.c +++ b/contrib/tools/python3/Modules/sha2module.c @@ -55,7 +55,7 @@ typedef struct { // Prevents undefined behavior via multiple threads entering the C API. // The lock will be NULL before threaded access has been enabled. PyThread_type_lock lock; - Hacl_Streaming_SHA2_state_sha2_256 *state; + Hacl_Hash_SHA2_state_t_256 *state; } SHA256object; typedef struct { @@ -64,7 +64,7 @@ typedef struct { // Prevents undefined behavior via multiple threads entering the C API. // The lock will be NULL before threaded access has been enabled. PyThread_type_lock lock; - Hacl_Streaming_SHA2_state_sha2_512 *state; + Hacl_Hash_SHA2_state_t_512 *state; } SHA512object; #include "clinic/sha2module.c.h" @@ -89,13 +89,13 @@ sha2_get_state(PyObject *module) static void SHA256copy(SHA256object *src, SHA256object *dest) { dest->digestsize = src->digestsize; - dest->state = Hacl_Streaming_SHA2_copy_256(src->state); + dest->state = Hacl_Hash_SHA2_copy_256(src->state); } static void SHA512copy(SHA512object *src, SHA512object *dest) { dest->digestsize = src->digestsize; - dest->state = Hacl_Streaming_SHA2_copy_512(src->state); + dest->state = Hacl_Hash_SHA2_copy_512(src->state); } static SHA256object * @@ -162,7 +162,7 @@ SHA2_traverse(PyObject *ptr, visitproc visit, void *arg) static void SHA256_dealloc(SHA256object *ptr) { - Hacl_Streaming_SHA2_free_256(ptr->state); + Hacl_Hash_SHA2_free_256(ptr->state); if (ptr->lock != NULL) { PyThread_free_lock(ptr->lock); } @@ -175,7 +175,7 @@ SHA256_dealloc(SHA256object *ptr) static void SHA512_dealloc(SHA512object *ptr) { - Hacl_Streaming_SHA2_free_512(ptr->state); + Hacl_Hash_SHA2_free_512(ptr->state); if (ptr->lock != NULL) { PyThread_free_lock(ptr->lock); } @@ -188,34 +188,34 @@ SHA512_dealloc(SHA512object *ptr) /* HACL* takes a uint32_t for the length of its parameter, but Py_ssize_t can be * 64 bits so we loop in <4gig chunks when needed. */ -static void update_256(Hacl_Streaming_SHA2_state_sha2_256 *state, uint8_t *buf, Py_ssize_t len) { +static void update_256(Hacl_Hash_SHA2_state_t_256 *state, uint8_t *buf, Py_ssize_t len) { /* Note: we explicitly ignore the error code on the basis that it would take > * 1 billion years to overflow the maximum admissible length for SHA2-256 * (namely, 2^61-1 bytes). */ #if PY_SSIZE_T_MAX > UINT32_MAX while (len > UINT32_MAX) { - Hacl_Streaming_SHA2_update_256(state, buf, UINT32_MAX); + Hacl_Hash_SHA2_update_256(state, buf, UINT32_MAX); len -= UINT32_MAX; buf += UINT32_MAX; } #endif /* Cast to uint32_t is safe: len <= UINT32_MAX at this point. */ - Hacl_Streaming_SHA2_update_256(state, buf, (uint32_t) len); + Hacl_Hash_SHA2_update_256(state, buf, (uint32_t) len); } -static void update_512(Hacl_Streaming_SHA2_state_sha2_512 *state, uint8_t *buf, Py_ssize_t len) { +static void update_512(Hacl_Hash_SHA2_state_t_512 *state, uint8_t *buf, Py_ssize_t len) { /* Note: we explicitly ignore the error code on the basis that it would take > * 1 billion years to overflow the maximum admissible length for this API * (namely, 2^64-1 bytes). */ #if PY_SSIZE_T_MAX > UINT32_MAX while (len > UINT32_MAX) { - Hacl_Streaming_SHA2_update_512(state, buf, UINT32_MAX); + Hacl_Hash_SHA2_update_512(state, buf, UINT32_MAX); len -= UINT32_MAX; buf += UINT32_MAX; } #endif /* Cast to uint32_t is safe: len <= UINT32_MAX at this point. */ - Hacl_Streaming_SHA2_update_512(state, buf, (uint32_t) len); + Hacl_Hash_SHA2_update_512(state, buf, (uint32_t) len); } @@ -298,7 +298,7 @@ SHA256Type_digest_impl(SHA256object *self) ENTER_HASHLIB(self); // HACL* performs copies under the hood so that self->state remains valid // after this call. - Hacl_Streaming_SHA2_finish_256(self->state, digest); + Hacl_Hash_SHA2_digest_256(self->state, digest); LEAVE_HASHLIB(self); return PyBytes_FromStringAndSize((const char *)digest, self->digestsize); } @@ -318,7 +318,7 @@ SHA512Type_digest_impl(SHA512object *self) ENTER_HASHLIB(self); // HACL* performs copies under the hood so that self->state remains valid // after this call. - Hacl_Streaming_SHA2_finish_512(self->state, digest); + Hacl_Hash_SHA2_digest_512(self->state, digest); LEAVE_HASHLIB(self); return PyBytes_FromStringAndSize((const char *)digest, self->digestsize); } @@ -336,7 +336,7 @@ SHA256Type_hexdigest_impl(SHA256object *self) uint8_t digest[SHA256_DIGESTSIZE]; assert(self->digestsize <= SHA256_DIGESTSIZE); ENTER_HASHLIB(self); - Hacl_Streaming_SHA2_finish_256(self->state, digest); + Hacl_Hash_SHA2_digest_256(self->state, digest); LEAVE_HASHLIB(self); return _Py_strhex((const char *)digest, self->digestsize); } @@ -354,7 +354,7 @@ SHA512Type_hexdigest_impl(SHA512object *self) uint8_t digest[SHA512_DIGESTSIZE]; assert(self->digestsize <= SHA512_DIGESTSIZE); ENTER_HASHLIB(self); - Hacl_Streaming_SHA2_finish_512(self->state, digest); + Hacl_Hash_SHA2_digest_512(self->state, digest); LEAVE_HASHLIB(self); return _Py_strhex((const char *)digest, self->digestsize); } @@ -599,7 +599,7 @@ _sha2_sha256_impl(PyObject *module, PyObject *string, int usedforsecurity) return NULL; } - new->state = Hacl_Streaming_SHA2_create_in_256(); + new->state = Hacl_Hash_SHA2_malloc_256(); new->digestsize = 32; if (PyErr_Occurred()) { @@ -653,7 +653,7 @@ _sha2_sha224_impl(PyObject *module, PyObject *string, int usedforsecurity) return NULL; } - new->state = Hacl_Streaming_SHA2_create_in_224(); + new->state = Hacl_Hash_SHA2_malloc_224(); new->digestsize = 28; if (PyErr_Occurred()) { @@ -707,7 +707,7 @@ _sha2_sha512_impl(PyObject *module, PyObject *string, int usedforsecurity) return NULL; } - new->state = Hacl_Streaming_SHA2_create_in_512(); + new->state = Hacl_Hash_SHA2_malloc_512(); new->digestsize = 64; if (PyErr_Occurred()) { @@ -760,7 +760,7 @@ _sha2_sha384_impl(PyObject *module, PyObject *string, int usedforsecurity) return NULL; } - new->state = Hacl_Streaming_SHA2_create_in_384(); + new->state = Hacl_Hash_SHA2_malloc_384(); new->digestsize = 48; if (PyErr_Occurred()) { diff --git a/contrib/tools/python3/Modules/sha3module.c b/contrib/tools/python3/Modules/sha3module.c index 558d2005cf..f3c6a7fced 100644 --- a/contrib/tools/python3/Modules/sha3module.c +++ b/contrib/tools/python3/Modules/sha3module.c @@ -63,7 +63,7 @@ typedef struct { // Prevents undefined behavior via multiple threads entering the C API. // The lock will be NULL before threaded access has been enabled. PyThread_type_lock lock; - Hacl_Streaming_Keccak_state *hash_state; + Hacl_Hash_SHA3_state_t *hash_state; } SHA3object; #include "clinic/sha3module.c.h" @@ -80,18 +80,18 @@ newSHA3object(PyTypeObject *type) return newobj; } -static void sha3_update(Hacl_Streaming_Keccak_state *state, uint8_t *buf, Py_ssize_t len) { +static void sha3_update(Hacl_Hash_SHA3_state_t *state, uint8_t *buf, Py_ssize_t len) { /* Note: we explicitly ignore the error code on the basis that it would take > * 1 billion years to hash more than 2^64 bytes. */ #if PY_SSIZE_T_MAX > UINT32_MAX while (len > UINT32_MAX) { - Hacl_Streaming_Keccak_update(state, buf, UINT32_MAX); + Hacl_Hash_SHA3_update(state, buf, UINT32_MAX); len -= UINT32_MAX; buf += UINT32_MAX; } #endif /* Cast to uint32_t is safe: len <= UINT32_MAX at this point. */ - Hacl_Streaming_Keccak_update(state, buf, (uint32_t) len); + Hacl_Hash_SHA3_update(state, buf, (uint32_t) len); } /*[clinic input] @@ -119,17 +119,17 @@ py_sha3_new_impl(PyTypeObject *type, PyObject *data, int usedforsecurity) assert(state != NULL); if (type == state->sha3_224_type) { - self->hash_state = Hacl_Streaming_Keccak_malloc(Spec_Hash_Definitions_SHA3_224); + self->hash_state = Hacl_Hash_SHA3_malloc(Spec_Hash_Definitions_SHA3_224); } else if (type == state->sha3_256_type) { - self->hash_state = Hacl_Streaming_Keccak_malloc(Spec_Hash_Definitions_SHA3_256); + self->hash_state = Hacl_Hash_SHA3_malloc(Spec_Hash_Definitions_SHA3_256); } else if (type == state->sha3_384_type) { - self->hash_state = Hacl_Streaming_Keccak_malloc(Spec_Hash_Definitions_SHA3_384); + self->hash_state = Hacl_Hash_SHA3_malloc(Spec_Hash_Definitions_SHA3_384); } else if (type == state->sha3_512_type) { - self->hash_state = Hacl_Streaming_Keccak_malloc(Spec_Hash_Definitions_SHA3_512); + self->hash_state = Hacl_Hash_SHA3_malloc(Spec_Hash_Definitions_SHA3_512); } else if (type == state->shake_128_type) { - self->hash_state = Hacl_Streaming_Keccak_malloc(Spec_Hash_Definitions_Shake128); + self->hash_state = Hacl_Hash_SHA3_malloc(Spec_Hash_Definitions_Shake128); } else if (type == state->shake_256_type) { - self->hash_state = Hacl_Streaming_Keccak_malloc(Spec_Hash_Definitions_Shake256); + self->hash_state = Hacl_Hash_SHA3_malloc(Spec_Hash_Definitions_Shake256); } else { PyErr_BadInternalCall(); goto error; @@ -168,7 +168,7 @@ py_sha3_new_impl(PyTypeObject *type, PyObject *data, int usedforsecurity) static void SHA3_dealloc(SHA3object *self) { - Hacl_Streaming_Keccak_free(self->hash_state); + Hacl_Hash_SHA3_free(self->hash_state); if (self->lock != NULL) { PyThread_free_lock(self->lock); } @@ -197,7 +197,7 @@ _sha3_sha3_224_copy_impl(SHA3object *self) return NULL; } ENTER_HASHLIB(self); - newobj->hash_state = Hacl_Streaming_Keccak_copy(self->hash_state); + newobj->hash_state = Hacl_Hash_SHA3_copy(self->hash_state); LEAVE_HASHLIB(self); return (PyObject *)newobj; } @@ -217,10 +217,10 @@ _sha3_sha3_224_digest_impl(SHA3object *self) // This function errors out if the algorithm is Shake. Here, we know this // not to be the case, and therefore do not perform error checking. ENTER_HASHLIB(self); - Hacl_Streaming_Keccak_finish(self->hash_state, digest); + Hacl_Hash_SHA3_digest(self->hash_state, digest); LEAVE_HASHLIB(self); return PyBytes_FromStringAndSize((const char *)digest, - Hacl_Streaming_Keccak_hash_len(self->hash_state)); + Hacl_Hash_SHA3_hash_len(self->hash_state)); } @@ -236,10 +236,10 @@ _sha3_sha3_224_hexdigest_impl(SHA3object *self) { unsigned char digest[SHA3_MAX_DIGESTSIZE]; ENTER_HASHLIB(self); - Hacl_Streaming_Keccak_finish(self->hash_state, digest); + Hacl_Hash_SHA3_digest(self->hash_state, digest); LEAVE_HASHLIB(self); return _Py_strhex((const char *)digest, - Hacl_Streaming_Keccak_hash_len(self->hash_state)); + Hacl_Hash_SHA3_hash_len(self->hash_state)); } @@ -287,7 +287,7 @@ static PyMethodDef SHA3_methods[] = { static PyObject * SHA3_get_block_size(SHA3object *self, void *closure) { - uint32_t rate = Hacl_Streaming_Keccak_block_len(self->hash_state); + uint32_t rate = Hacl_Hash_SHA3_block_len(self->hash_state); return PyLong_FromLong(rate); } @@ -323,17 +323,17 @@ static PyObject * SHA3_get_digest_size(SHA3object *self, void *closure) { // Preserving previous behavior: variable-length algorithms return 0 - if (Hacl_Streaming_Keccak_is_shake(self->hash_state)) + if (Hacl_Hash_SHA3_is_shake(self->hash_state)) return PyLong_FromLong(0); else - return PyLong_FromLong(Hacl_Streaming_Keccak_hash_len(self->hash_state)); + return PyLong_FromLong(Hacl_Hash_SHA3_hash_len(self->hash_state)); } static PyObject * SHA3_get_capacity_bits(SHA3object *self, void *closure) { - uint32_t rate = Hacl_Streaming_Keccak_block_len(self->hash_state) * 8; + uint32_t rate = Hacl_Hash_SHA3_block_len(self->hash_state) * 8; int capacity = 1600 - rate; return PyLong_FromLong(capacity); } @@ -342,7 +342,7 @@ SHA3_get_capacity_bits(SHA3object *self, void *closure) static PyObject * SHA3_get_rate_bits(SHA3object *self, void *closure) { - uint32_t rate = Hacl_Streaming_Keccak_block_len(self->hash_state) * 8; + uint32_t rate = Hacl_Hash_SHA3_block_len(self->hash_state) * 8; return PyLong_FromLong(rate); } @@ -435,7 +435,7 @@ _SHAKE_digest(SHA3object *self, unsigned long digestlen, int hex) * - the output length is zero -- we follow the existing behavior and return * an empty digest, without raising an error */ if (digestlen > 0) { - Hacl_Streaming_Keccak_squeeze(self->hash_state, digest, digestlen); + Hacl_Hash_SHA3_squeeze(self->hash_state, digest, digestlen); } if (hex) { result = _Py_strhex((const char *)digest, digestlen); diff --git a/contrib/tools/python3/Objects/descrobject.c b/contrib/tools/python3/Objects/descrobject.c index d5e88dcf1c..55c0491cfd 100644 --- a/contrib/tools/python3/Objects/descrobject.c +++ b/contrib/tools/python3/Objects/descrobject.c @@ -1697,15 +1697,12 @@ property_copy(PyObject *old, PyObject *get, PyObject *set, PyObject *del) return NULL; if (get == NULL || get == Py_None) { - Py_XDECREF(get); get = pold->prop_get ? pold->prop_get : Py_None; } if (set == NULL || set == Py_None) { - Py_XDECREF(set); set = pold->prop_set ? pold->prop_set : Py_None; } if (del == NULL || del == Py_None) { - Py_XDECREF(del); del = pold->prop_del ? pold->prop_del : Py_None; } if (pold->getter_doc && get != Py_None) { diff --git a/contrib/tools/python3/Objects/floatobject.c b/contrib/tools/python3/Objects/floatobject.c index 83a263c0d9..7a882bfd88 100644 --- a/contrib/tools/python3/Objects/floatobject.c +++ b/contrib/tools/python3/Objects/floatobject.c @@ -101,10 +101,18 @@ PyFloat_GetInfo(void) return NULL; } -#define SetIntFlag(flag) \ - PyStructSequence_SET_ITEM(floatinfo, pos++, PyLong_FromLong(flag)) -#define SetDblFlag(flag) \ - PyStructSequence_SET_ITEM(floatinfo, pos++, PyFloat_FromDouble(flag)) +#define SetFlag(CALL) \ + do { \ + PyObject *flag = (CALL); \ + if (flag == NULL) { \ + Py_CLEAR(floatinfo); \ + return NULL; \ + } \ + PyStructSequence_SET_ITEM(floatinfo, pos++, flag); \ + } while (0) + +#define SetIntFlag(FLAG) SetFlag(PyLong_FromLong((FLAG))) +#define SetDblFlag(FLAG) SetFlag(PyFloat_FromDouble((FLAG))) SetDblFlag(DBL_MAX); SetIntFlag(DBL_MAX_EXP); @@ -119,11 +127,8 @@ PyFloat_GetInfo(void) SetIntFlag(FLT_ROUNDS); #undef SetIntFlag #undef SetDblFlag +#undef SetFlag - if (PyErr_Occurred()) { - Py_CLEAR(floatinfo); - return NULL; - } return floatinfo; } diff --git a/contrib/tools/python3/Objects/genobject.c b/contrib/tools/python3/Objects/genobject.c index 3b9e4a6036..bc58409c18 100644 --- a/contrib/tools/python3/Objects/genobject.c +++ b/contrib/tools/python3/Objects/genobject.c @@ -374,7 +374,6 @@ static PyObject * gen_close(PyGenObject *gen, PyObject *args) { PyObject *retval; - PyObject *yf = _PyGen_yf(gen); int err = 0; if (gen->gi_frame_state == FRAME_CREATED) { @@ -384,6 +383,7 @@ gen_close(PyGenObject *gen, PyObject *args) if (gen->gi_frame_state >= FRAME_COMPLETED) { Py_RETURN_NONE; } + PyObject *yf = _PyGen_yf(gen); if (yf) { PyFrameState state = gen->gi_frame_state; gen->gi_frame_state = FRAME_EXECUTING; @@ -396,12 +396,13 @@ gen_close(PyGenObject *gen, PyObject *args) * YIELD_VALUE if the debugger has changed the lineno. */ if (err == 0 && is_yield(frame->prev_instr)) { assert(is_resume(frame->prev_instr + 1)); - int exception_handler_depth = frame->prev_instr[0].op.code; + int exception_handler_depth = frame->prev_instr[0].op.arg; assert(exception_handler_depth > 0); /* We can safely ignore the outermost try block * as it automatically generated to handle * StopIteration. */ if (exception_handler_depth == 1) { + gen->gi_frame_state = FRAME_COMPLETED; Py_RETURN_NONE; } } diff --git a/contrib/tools/python3/Objects/listobject.c b/contrib/tools/python3/Objects/listobject.c index f1edfb3a9a..f59abe2e64 100644 --- a/contrib/tools/python3/Objects/listobject.c +++ b/contrib/tools/python3/Objects/listobject.c @@ -3441,6 +3441,7 @@ static PyObject * listiter_reduce_general(void *_it, int forward) { PyObject *list; + PyObject *iter; /* _PyEval_GetBuiltin can invoke arbitrary code, * call must be before access of iterator pointers. @@ -3448,7 +3449,7 @@ listiter_reduce_general(void *_it, int forward) /* the objects are not the same, index is of different types! */ if (forward) { - PyObject *iter = _PyEval_GetBuiltin(&_Py_ID(iter)); + iter = _PyEval_GetBuiltin(&_Py_ID(iter)); if (!iter) { return NULL; } @@ -3456,21 +3457,19 @@ listiter_reduce_general(void *_it, int forward) if (it->it_seq) { return Py_BuildValue("N(O)n", iter, it->it_seq, it->it_index); } - Py_DECREF(iter); } else { - PyObject *reversed = _PyEval_GetBuiltin(&_Py_ID(reversed)); - if (!reversed) { + iter = _PyEval_GetBuiltin(&_Py_ID(reversed)); + if (!iter) { return NULL; } listreviterobject *it = (listreviterobject *)_it; if (it->it_seq) { - return Py_BuildValue("N(O)n", reversed, it->it_seq, it->it_index); + return Py_BuildValue("N(O)n", iter, it->it_seq, it->it_index); } - Py_DECREF(reversed); } /* empty iterator, create an empty list */ list = PyList_New(0); if (list == NULL) return NULL; - return Py_BuildValue("N(N)", _PyEval_GetBuiltin(&_Py_ID(iter)), list); + return Py_BuildValue("N(N)", iter, list); } diff --git a/contrib/tools/python3/Objects/longobject.c b/contrib/tools/python3/Objects/longobject.c index 5d9b413861..c72e1643c9 100644 --- a/contrib/tools/python3/Objects/longobject.c +++ b/contrib/tools/python3/Objects/longobject.c @@ -1766,7 +1766,9 @@ long_to_decimal_string_internal(PyObject *aa, digit *pout, *pin, rem, tenpow; int negative; int d; - int kind; + + // writer or bytes_writer can be used, but not both at the same time. + assert(writer == NULL || bytes_writer == NULL); a = (PyLongObject *)aa; if (a == NULL || !PyLong_Check(a)) { @@ -1879,7 +1881,6 @@ long_to_decimal_string_internal(PyObject *aa, Py_DECREF(scratch); return -1; } - kind = writer->kind; } else if (bytes_writer) { *bytes_str = _PyBytesWriter_Prepare(bytes_writer, *bytes_str, strlen); @@ -1894,7 +1895,6 @@ long_to_decimal_string_internal(PyObject *aa, Py_DECREF(scratch); return -1; } - kind = PyUnicode_KIND(str); } #define WRITE_DIGITS(p) \ @@ -1942,19 +1942,23 @@ long_to_decimal_string_internal(PyObject *aa, WRITE_DIGITS(p); assert(p == *bytes_str); } - else if (kind == PyUnicode_1BYTE_KIND) { - Py_UCS1 *p; - WRITE_UNICODE_DIGITS(Py_UCS1); - } - else if (kind == PyUnicode_2BYTE_KIND) { - Py_UCS2 *p; - WRITE_UNICODE_DIGITS(Py_UCS2); - } else { - Py_UCS4 *p; - assert (kind == PyUnicode_4BYTE_KIND); - WRITE_UNICODE_DIGITS(Py_UCS4); + int kind = writer ? writer->kind : PyUnicode_KIND(str); + if (kind == PyUnicode_1BYTE_KIND) { + Py_UCS1 *p; + WRITE_UNICODE_DIGITS(Py_UCS1); + } + else if (kind == PyUnicode_2BYTE_KIND) { + Py_UCS2 *p; + WRITE_UNICODE_DIGITS(Py_UCS2); + } + else { + assert (kind == PyUnicode_4BYTE_KIND); + Py_UCS4 *p; + WRITE_UNICODE_DIGITS(Py_UCS4); + } } + #undef WRITE_DIGITS #undef WRITE_UNICODE_DIGITS @@ -1995,11 +1999,12 @@ long_format_binary(PyObject *aa, int base, int alternate, PyObject *v = NULL; Py_ssize_t sz; Py_ssize_t size_a; - int kind; int negative; int bits; assert(base == 2 || base == 8 || base == 16); + // writer or bytes_writer can be used, but not both at the same time. + assert(writer == NULL || bytes_writer == NULL); if (a == NULL || !PyLong_Check(a)) { PyErr_BadInternalCall(); return -1; @@ -2047,7 +2052,6 @@ long_format_binary(PyObject *aa, int base, int alternate, if (writer) { if (_PyUnicodeWriter_Prepare(writer, sz, 'x') == -1) return -1; - kind = writer->kind; } else if (bytes_writer) { *bytes_str = _PyBytesWriter_Prepare(bytes_writer, *bytes_str, sz); @@ -2058,7 +2062,6 @@ long_format_binary(PyObject *aa, int base, int alternate, v = PyUnicode_New(sz, 'x'); if (v == NULL) return -1; - kind = PyUnicode_KIND(v); } #define WRITE_DIGITS(p) \ @@ -2119,19 +2122,23 @@ long_format_binary(PyObject *aa, int base, int alternate, WRITE_DIGITS(p); assert(p == *bytes_str); } - else if (kind == PyUnicode_1BYTE_KIND) { - Py_UCS1 *p; - WRITE_UNICODE_DIGITS(Py_UCS1); - } - else if (kind == PyUnicode_2BYTE_KIND) { - Py_UCS2 *p; - WRITE_UNICODE_DIGITS(Py_UCS2); - } else { - Py_UCS4 *p; - assert (kind == PyUnicode_4BYTE_KIND); - WRITE_UNICODE_DIGITS(Py_UCS4); + int kind = writer ? writer->kind : PyUnicode_KIND(v); + if (kind == PyUnicode_1BYTE_KIND) { + Py_UCS1 *p; + WRITE_UNICODE_DIGITS(Py_UCS1); + } + else if (kind == PyUnicode_2BYTE_KIND) { + Py_UCS2 *p; + WRITE_UNICODE_DIGITS(Py_UCS2); + } + else { + assert (kind == PyUnicode_4BYTE_KIND); + Py_UCS4 *p; + WRITE_UNICODE_DIGITS(Py_UCS4); + } } + #undef WRITE_DIGITS #undef WRITE_UNICODE_DIGITS diff --git a/contrib/tools/python3/Objects/typeobject.c b/contrib/tools/python3/Objects/typeobject.c index 8aa07d8528..0c9a876f70 100644 --- a/contrib/tools/python3/Objects/typeobject.c +++ b/contrib/tools/python3/Objects/typeobject.c @@ -6269,6 +6269,7 @@ reduce_newobj(PyObject *obj) } else { /* args == NULL */ + Py_DECREF(copyreg); Py_DECREF(kwargs); PyErr_BadInternalCall(); return NULL; diff --git a/contrib/tools/python3/Objects/unicodeobject.c b/contrib/tools/python3/Objects/unicodeobject.c index f6787c8f8a..ad6defb629 100644 --- a/contrib/tools/python3/Objects/unicodeobject.c +++ b/contrib/tools/python3/Objects/unicodeobject.c @@ -516,7 +516,7 @@ unicode_check_encoding_errors(const char *encoding, const char *errors) /* Disable checks during Python finalization. For example, it allows to call _PyObject_Dump() during finalization for debugging purpose. */ - if (interp->finalizing) { + if (_PyInterpreterState_GetFinalizing(interp) != NULL) { return 0; } diff --git a/contrib/tools/python3/Parser/parser.c b/contrib/tools/python3/Parser/parser.c index 25b4ead781..a413486708 100644 --- a/contrib/tools/python3/Parser/parser.c +++ b/contrib/tools/python3/Parser/parser.c @@ -472,8 +472,8 @@ static char *soft_keywords[] = { #define _gather_147_type 1391 #define _tmp_149_type 1392 #define _tmp_150_type 1393 -#define _tmp_151_type 1394 -#define _tmp_152_type 1395 +#define _loop0_152_type 1394 +#define _gather_151_type 1395 #define _tmp_153_type 1396 #define _tmp_154_type 1397 #define _tmp_155_type 1398 @@ -482,50 +482,50 @@ static char *soft_keywords[] = { #define _tmp_158_type 1401 #define _tmp_159_type 1402 #define _tmp_160_type 1403 -#define _loop0_161_type 1404 -#define _loop0_162_type 1405 +#define _tmp_161_type 1404 +#define _tmp_162_type 1405 #define _loop0_163_type 1406 -#define _tmp_164_type 1407 -#define _tmp_165_type 1408 +#define _loop0_164_type 1407 +#define _loop0_165_type 1408 #define _tmp_166_type 1409 #define _tmp_167_type 1410 #define _tmp_168_type 1411 -#define _loop0_169_type 1412 -#define _loop0_170_type 1413 +#define _tmp_169_type 1412 +#define _tmp_170_type 1413 #define _loop0_171_type 1414 -#define _loop1_172_type 1415 -#define _tmp_173_type 1416 -#define _loop0_174_type 1417 +#define _loop0_172_type 1415 +#define _loop0_173_type 1416 +#define _loop1_174_type 1417 #define _tmp_175_type 1418 #define _loop0_176_type 1419 -#define _loop1_177_type 1420 -#define _tmp_178_type 1421 -#define _tmp_179_type 1422 +#define _tmp_177_type 1420 +#define _loop0_178_type 1421 +#define _loop1_179_type 1422 #define _tmp_180_type 1423 -#define _loop0_181_type 1424 +#define _tmp_181_type 1424 #define _tmp_182_type 1425 -#define _tmp_183_type 1426 -#define _loop1_184_type 1427 +#define _loop0_183_type 1426 +#define _tmp_184_type 1427 #define _tmp_185_type 1428 -#define _loop0_186_type 1429 -#define _loop0_187_type 1430 +#define _loop1_186_type 1429 +#define _tmp_187_type 1430 #define _loop0_188_type 1431 -#define _loop0_190_type 1432 -#define _gather_189_type 1433 -#define _tmp_191_type 1434 -#define _loop0_192_type 1435 +#define _loop0_189_type 1432 +#define _loop0_190_type 1433 +#define _loop0_192_type 1434 +#define _gather_191_type 1435 #define _tmp_193_type 1436 #define _loop0_194_type 1437 -#define _loop1_195_type 1438 -#define _loop1_196_type 1439 -#define _tmp_197_type 1440 -#define _tmp_198_type 1441 -#define _loop0_199_type 1442 +#define _tmp_195_type 1438 +#define _loop0_196_type 1439 +#define _loop1_197_type 1440 +#define _loop1_198_type 1441 +#define _tmp_199_type 1442 #define _tmp_200_type 1443 -#define _tmp_201_type 1444 +#define _loop0_201_type 1444 #define _tmp_202_type 1445 -#define _loop0_204_type 1446 -#define _gather_203_type 1447 +#define _tmp_203_type 1446 +#define _tmp_204_type 1447 #define _loop0_206_type 1448 #define _gather_205_type 1449 #define _loop0_208_type 1450 @@ -534,14 +534,14 @@ static char *soft_keywords[] = { #define _gather_209_type 1453 #define _loop0_212_type 1454 #define _gather_211_type 1455 -#define _tmp_213_type 1456 -#define _loop0_214_type 1457 -#define _loop1_215_type 1458 -#define _tmp_216_type 1459 -#define _loop0_217_type 1460 -#define _loop1_218_type 1461 -#define _tmp_219_type 1462 -#define _tmp_220_type 1463 +#define _loop0_214_type 1456 +#define _gather_213_type 1457 +#define _tmp_215_type 1458 +#define _loop0_216_type 1459 +#define _loop1_217_type 1460 +#define _tmp_218_type 1461 +#define _loop0_219_type 1462 +#define _loop1_220_type 1463 #define _tmp_221_type 1464 #define _tmp_222_type 1465 #define _tmp_223_type 1466 @@ -550,10 +550,10 @@ static char *soft_keywords[] = { #define _tmp_226_type 1469 #define _tmp_227_type 1470 #define _tmp_228_type 1471 -#define _loop0_230_type 1472 -#define _gather_229_type 1473 -#define _tmp_231_type 1474 -#define _tmp_232_type 1475 +#define _tmp_229_type 1472 +#define _tmp_230_type 1473 +#define _loop0_232_type 1474 +#define _gather_231_type 1475 #define _tmp_233_type 1476 #define _tmp_234_type 1477 #define _tmp_235_type 1478 @@ -565,9 +565,9 @@ static char *soft_keywords[] = { #define _tmp_241_type 1484 #define _tmp_242_type 1485 #define _tmp_243_type 1486 -#define _loop0_244_type 1487 +#define _tmp_244_type 1487 #define _tmp_245_type 1488 -#define _tmp_246_type 1489 +#define _loop0_246_type 1489 #define _tmp_247_type 1490 #define _tmp_248_type 1491 #define _tmp_249_type 1492 @@ -595,14 +595,17 @@ static char *soft_keywords[] = { #define _tmp_271_type 1514 #define _tmp_272_type 1515 #define _tmp_273_type 1516 -#define _loop0_275_type 1517 -#define _gather_274_type 1518 +#define _tmp_274_type 1517 +#define _tmp_275_type 1518 #define _tmp_276_type 1519 -#define _tmp_277_type 1520 -#define _tmp_278_type 1521 +#define _loop0_278_type 1520 +#define _gather_277_type 1521 #define _tmp_279_type 1522 #define _tmp_280_type 1523 #define _tmp_281_type 1524 +#define _tmp_282_type 1525 +#define _tmp_283_type 1526 +#define _tmp_284_type 1527 static mod_ty file_rule(Parser *p); static mod_ty interactive_rule(Parser *p); @@ -998,8 +1001,8 @@ static asdl_seq *_loop0_148_rule(Parser *p); static asdl_seq *_gather_147_rule(Parser *p); static void *_tmp_149_rule(Parser *p); static void *_tmp_150_rule(Parser *p); -static void *_tmp_151_rule(Parser *p); -static void *_tmp_152_rule(Parser *p); +static asdl_seq *_loop0_152_rule(Parser *p); +static asdl_seq *_gather_151_rule(Parser *p); static void *_tmp_153_rule(Parser *p); static void *_tmp_154_rule(Parser *p); static void *_tmp_155_rule(Parser *p); @@ -1008,50 +1011,50 @@ static void *_tmp_157_rule(Parser *p); static void *_tmp_158_rule(Parser *p); static void *_tmp_159_rule(Parser *p); static void *_tmp_160_rule(Parser *p); -static asdl_seq *_loop0_161_rule(Parser *p); -static asdl_seq *_loop0_162_rule(Parser *p); +static void *_tmp_161_rule(Parser *p); +static void *_tmp_162_rule(Parser *p); static asdl_seq *_loop0_163_rule(Parser *p); -static void *_tmp_164_rule(Parser *p); -static void *_tmp_165_rule(Parser *p); +static asdl_seq *_loop0_164_rule(Parser *p); +static asdl_seq *_loop0_165_rule(Parser *p); static void *_tmp_166_rule(Parser *p); static void *_tmp_167_rule(Parser *p); static void *_tmp_168_rule(Parser *p); -static asdl_seq *_loop0_169_rule(Parser *p); -static asdl_seq *_loop0_170_rule(Parser *p); +static void *_tmp_169_rule(Parser *p); +static void *_tmp_170_rule(Parser *p); static asdl_seq *_loop0_171_rule(Parser *p); -static asdl_seq *_loop1_172_rule(Parser *p); -static void *_tmp_173_rule(Parser *p); -static asdl_seq *_loop0_174_rule(Parser *p); +static asdl_seq *_loop0_172_rule(Parser *p); +static asdl_seq *_loop0_173_rule(Parser *p); +static asdl_seq *_loop1_174_rule(Parser *p); static void *_tmp_175_rule(Parser *p); static asdl_seq *_loop0_176_rule(Parser *p); -static asdl_seq *_loop1_177_rule(Parser *p); -static void *_tmp_178_rule(Parser *p); -static void *_tmp_179_rule(Parser *p); +static void *_tmp_177_rule(Parser *p); +static asdl_seq *_loop0_178_rule(Parser *p); +static asdl_seq *_loop1_179_rule(Parser *p); static void *_tmp_180_rule(Parser *p); -static asdl_seq *_loop0_181_rule(Parser *p); +static void *_tmp_181_rule(Parser *p); static void *_tmp_182_rule(Parser *p); -static void *_tmp_183_rule(Parser *p); -static asdl_seq *_loop1_184_rule(Parser *p); +static asdl_seq *_loop0_183_rule(Parser *p); +static void *_tmp_184_rule(Parser *p); static void *_tmp_185_rule(Parser *p); -static asdl_seq *_loop0_186_rule(Parser *p); -static asdl_seq *_loop0_187_rule(Parser *p); +static asdl_seq *_loop1_186_rule(Parser *p); +static void *_tmp_187_rule(Parser *p); static asdl_seq *_loop0_188_rule(Parser *p); +static asdl_seq *_loop0_189_rule(Parser *p); static asdl_seq *_loop0_190_rule(Parser *p); -static asdl_seq *_gather_189_rule(Parser *p); -static void *_tmp_191_rule(Parser *p); static asdl_seq *_loop0_192_rule(Parser *p); +static asdl_seq *_gather_191_rule(Parser *p); static void *_tmp_193_rule(Parser *p); static asdl_seq *_loop0_194_rule(Parser *p); -static asdl_seq *_loop1_195_rule(Parser *p); -static asdl_seq *_loop1_196_rule(Parser *p); -static void *_tmp_197_rule(Parser *p); -static void *_tmp_198_rule(Parser *p); -static asdl_seq *_loop0_199_rule(Parser *p); +static void *_tmp_195_rule(Parser *p); +static asdl_seq *_loop0_196_rule(Parser *p); +static asdl_seq *_loop1_197_rule(Parser *p); +static asdl_seq *_loop1_198_rule(Parser *p); +static void *_tmp_199_rule(Parser *p); static void *_tmp_200_rule(Parser *p); -static void *_tmp_201_rule(Parser *p); +static asdl_seq *_loop0_201_rule(Parser *p); static void *_tmp_202_rule(Parser *p); -static asdl_seq *_loop0_204_rule(Parser *p); -static asdl_seq *_gather_203_rule(Parser *p); +static void *_tmp_203_rule(Parser *p); +static void *_tmp_204_rule(Parser *p); static asdl_seq *_loop0_206_rule(Parser *p); static asdl_seq *_gather_205_rule(Parser *p); static asdl_seq *_loop0_208_rule(Parser *p); @@ -1060,14 +1063,14 @@ static asdl_seq *_loop0_210_rule(Parser *p); static asdl_seq *_gather_209_rule(Parser *p); static asdl_seq *_loop0_212_rule(Parser *p); static asdl_seq *_gather_211_rule(Parser *p); -static void *_tmp_213_rule(Parser *p); static asdl_seq *_loop0_214_rule(Parser *p); -static asdl_seq *_loop1_215_rule(Parser *p); -static void *_tmp_216_rule(Parser *p); -static asdl_seq *_loop0_217_rule(Parser *p); -static asdl_seq *_loop1_218_rule(Parser *p); -static void *_tmp_219_rule(Parser *p); -static void *_tmp_220_rule(Parser *p); +static asdl_seq *_gather_213_rule(Parser *p); +static void *_tmp_215_rule(Parser *p); +static asdl_seq *_loop0_216_rule(Parser *p); +static asdl_seq *_loop1_217_rule(Parser *p); +static void *_tmp_218_rule(Parser *p); +static asdl_seq *_loop0_219_rule(Parser *p); +static asdl_seq *_loop1_220_rule(Parser *p); static void *_tmp_221_rule(Parser *p); static void *_tmp_222_rule(Parser *p); static void *_tmp_223_rule(Parser *p); @@ -1076,10 +1079,10 @@ static void *_tmp_225_rule(Parser *p); static void *_tmp_226_rule(Parser *p); static void *_tmp_227_rule(Parser *p); static void *_tmp_228_rule(Parser *p); -static asdl_seq *_loop0_230_rule(Parser *p); -static asdl_seq *_gather_229_rule(Parser *p); -static void *_tmp_231_rule(Parser *p); -static void *_tmp_232_rule(Parser *p); +static void *_tmp_229_rule(Parser *p); +static void *_tmp_230_rule(Parser *p); +static asdl_seq *_loop0_232_rule(Parser *p); +static asdl_seq *_gather_231_rule(Parser *p); static void *_tmp_233_rule(Parser *p); static void *_tmp_234_rule(Parser *p); static void *_tmp_235_rule(Parser *p); @@ -1091,9 +1094,9 @@ static void *_tmp_240_rule(Parser *p); static void *_tmp_241_rule(Parser *p); static void *_tmp_242_rule(Parser *p); static void *_tmp_243_rule(Parser *p); -static asdl_seq *_loop0_244_rule(Parser *p); +static void *_tmp_244_rule(Parser *p); static void *_tmp_245_rule(Parser *p); -static void *_tmp_246_rule(Parser *p); +static asdl_seq *_loop0_246_rule(Parser *p); static void *_tmp_247_rule(Parser *p); static void *_tmp_248_rule(Parser *p); static void *_tmp_249_rule(Parser *p); @@ -1121,14 +1124,17 @@ static void *_tmp_270_rule(Parser *p); static void *_tmp_271_rule(Parser *p); static void *_tmp_272_rule(Parser *p); static void *_tmp_273_rule(Parser *p); -static asdl_seq *_loop0_275_rule(Parser *p); -static asdl_seq *_gather_274_rule(Parser *p); +static void *_tmp_274_rule(Parser *p); +static void *_tmp_275_rule(Parser *p); static void *_tmp_276_rule(Parser *p); -static void *_tmp_277_rule(Parser *p); -static void *_tmp_278_rule(Parser *p); +static asdl_seq *_loop0_278_rule(Parser *p); +static asdl_seq *_gather_277_rule(Parser *p); static void *_tmp_279_rule(Parser *p); static void *_tmp_280_rule(Parser *p); static void *_tmp_281_rule(Parser *p); +static void *_tmp_282_rule(Parser *p); +static void *_tmp_283_rule(Parser *p); +static void *_tmp_284_rule(Parser *p); // file: statements? $ @@ -6566,7 +6572,7 @@ with_stmt_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = CHECK_VERSION ( stmt_ty , 9 , "Parenthesized context managers are" , _PyAST_With ( a , b , NULL , EXTRA ) ); + _res = _PyAST_With ( a , b , NULL , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; p->level--; @@ -17564,7 +17570,7 @@ kwargs_rule(Parser *p) return _res; } -// starred_expression: invalid_starred_expression | '*' expression +// starred_expression: invalid_starred_expression | '*' expression | '*' static expr_ty starred_expression_rule(Parser *p) { @@ -17641,6 +17647,30 @@ starred_expression_rule(Parser *p) D(fprintf(stderr, "%*c%s starred_expression[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'*' expression")); } + { // '*' + if (p->error_indicator) { + p->level--; + return NULL; + } + D(fprintf(stderr, "%*c> starred_expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*'")); + Token * _literal; + if ( + (_literal = _PyPegen_expect_token(p, 16)) // token='*' + ) + { + D(fprintf(stderr, "%*c+ starred_expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*'")); + _res = RAISE_SYNTAX_ERROR ( "Invalid star expression" ); + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + p->level--; + return NULL; + } + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s starred_expression[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'*'")); + } _res = NULL; done: p->level--; @@ -19719,7 +19749,7 @@ func_type_comment_rule(Parser *p) } // invalid_arguments: -// | ((','.(starred_expression | (assignment_expression | expression !':=') !'=')+ ',' kwargs) | kwargs) ',' '*' +// | ((','.(starred_expression | (assignment_expression | expression !':=') !'=')+ ',' kwargs) | kwargs) ',' ','.(starred_expression !'=')+ // | expression for_if_clauses ',' [args | expression for_if_clauses] // | NAME '=' expression for_if_clauses // | [(args ',')] NAME '=' &(',' | ')') @@ -19738,25 +19768,25 @@ invalid_arguments_rule(Parser *p) } void * _res = NULL; int _mark = p->mark; - { // ((','.(starred_expression | (assignment_expression | expression !':=') !'=')+ ',' kwargs) | kwargs) ',' '*' + { // ((','.(starred_expression | (assignment_expression | expression !':=') !'=')+ ',' kwargs) | kwargs) ',' ','.(starred_expression !'=')+ if (p->error_indicator) { p->level--; return NULL; } - D(fprintf(stderr, "%*c> invalid_arguments[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "((','.(starred_expression | (assignment_expression | expression !':=') !'=')+ ',' kwargs) | kwargs) ',' '*'")); - Token * _literal; + D(fprintf(stderr, "%*c> invalid_arguments[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "((','.(starred_expression | (assignment_expression | expression !':=') !'=')+ ',' kwargs) | kwargs) ',' ','.(starred_expression !'=')+")); + asdl_seq * _gather_151_var; void *_tmp_150_var; - Token * b; + Token * a; if ( (_tmp_150_var = _tmp_150_rule(p)) // (','.(starred_expression | (assignment_expression | expression !':=') !'=')+ ',' kwargs) | kwargs && - (_literal = _PyPegen_expect_token(p, 12)) // token=',' + (a = _PyPegen_expect_token(p, 12)) // token=',' && - (b = _PyPegen_expect_token(p, 16)) // token='*' + (_gather_151_var = _gather_151_rule(p)) // ','.(starred_expression !'=')+ ) { - D(fprintf(stderr, "%*c+ invalid_arguments[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "((','.(starred_expression | (assignment_expression | expression !':=') !'=')+ ',' kwargs) | kwargs) ',' '*'")); - _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( b , "iterable argument unpacking follows keyword argument unpacking" ); + D(fprintf(stderr, "%*c+ invalid_arguments[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "((','.(starred_expression | (assignment_expression | expression !':=') !'=')+ ',' kwargs) | kwargs) ',' ','.(starred_expression !'=')+")); + _res = RAISE_SYNTAX_ERROR_STARTING_FROM ( a , "iterable argument unpacking follows keyword argument unpacking" ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; p->level--; @@ -19766,7 +19796,7 @@ invalid_arguments_rule(Parser *p) } p->mark = _mark; D(fprintf(stderr, "%*c%s invalid_arguments[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "((','.(starred_expression | (assignment_expression | expression !':=') !'=')+ ',' kwargs) | kwargs) ',' '*'")); + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "((','.(starred_expression | (assignment_expression | expression !':=') !'=')+ ',' kwargs) | kwargs) ',' ','.(starred_expression !'=')+")); } { // expression for_if_clauses ',' [args | expression for_if_clauses] if (p->error_indicator) { @@ -19786,7 +19816,7 @@ invalid_arguments_rule(Parser *p) && (_literal = _PyPegen_expect_token(p, 12)) // token=',' && - (_opt_var = _tmp_151_rule(p), !p->error_indicator) // [args | expression for_if_clauses] + (_opt_var = _tmp_153_rule(p), !p->error_indicator) // [args | expression for_if_clauses] ) { D(fprintf(stderr, "%*c+ invalid_arguments[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression for_if_clauses ',' [args | expression for_if_clauses]")); @@ -19846,13 +19876,13 @@ invalid_arguments_rule(Parser *p) expr_ty a; Token * b; if ( - (_opt_var = _tmp_152_rule(p), !p->error_indicator) // [(args ',')] + (_opt_var = _tmp_154_rule(p), !p->error_indicator) // [(args ',')] && (a = _PyPegen_name_token(p)) // NAME && (b = _PyPegen_expect_token(p, 22)) // token='=' && - _PyPegen_lookahead(1, _tmp_153_rule, p) + _PyPegen_lookahead(1, _tmp_155_rule, p) ) { D(fprintf(stderr, "%*c+ invalid_arguments[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "[(args ',')] NAME '=' &(',' | ')')")); @@ -19990,7 +20020,7 @@ invalid_kwarg_rule(Parser *p) Token* a; Token * b; if ( - (a = (Token*)_tmp_154_rule(p)) // 'True' | 'False' | 'None' + (a = (Token*)_tmp_156_rule(p)) // 'True' | 'False' | 'None' && (b = _PyPegen_expect_token(p, 22)) // token='=' ) @@ -20050,7 +20080,7 @@ invalid_kwarg_rule(Parser *p) expr_ty a; Token * b; if ( - _PyPegen_lookahead(0, _tmp_155_rule, p) + _PyPegen_lookahead(0, _tmp_157_rule, p) && (a = expression_rule(p)) // expression && @@ -20306,7 +20336,7 @@ invalid_expression_rule(Parser *p) expr_ty a; expr_ty b; if ( - _PyPegen_lookahead(0, _tmp_156_rule, p) + _PyPegen_lookahead(0, _tmp_158_rule, p) && (a = disjunction_rule(p)) // disjunction && @@ -20342,7 +20372,7 @@ invalid_expression_rule(Parser *p) && (b = disjunction_rule(p)) // disjunction && - _PyPegen_lookahead(0, _tmp_157_rule, p) + _PyPegen_lookahead(0, _tmp_159_rule, p) ) { D(fprintf(stderr, "%*c+ invalid_expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "disjunction 'if' disjunction !('else' | ':')")); @@ -20463,7 +20493,7 @@ invalid_named_expression_rule(Parser *p) && (b = bitwise_or_rule(p)) // bitwise_or && - _PyPegen_lookahead(0, _tmp_158_rule, p) + _PyPegen_lookahead(0, _tmp_160_rule, p) ) { D(fprintf(stderr, "%*c+ invalid_named_expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME '=' bitwise_or !('=' | ':=')")); @@ -20489,7 +20519,7 @@ invalid_named_expression_rule(Parser *p) Token * b; expr_ty bitwise_or_var; if ( - _PyPegen_lookahead(0, _tmp_159_rule, p) + _PyPegen_lookahead(0, _tmp_161_rule, p) && (a = bitwise_or_rule(p)) // bitwise_or && @@ -20497,7 +20527,7 @@ invalid_named_expression_rule(Parser *p) && (bitwise_or_var = bitwise_or_rule(p)) // bitwise_or && - _PyPegen_lookahead(0, _tmp_160_rule, p) + _PyPegen_lookahead(0, _tmp_162_rule, p) ) { D(fprintf(stderr, "%*c+ invalid_named_expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "!(list | tuple | genexp | 'True' | 'None' | 'False') bitwise_or '=' bitwise_or !('=' | ':=')")); @@ -20577,7 +20607,7 @@ invalid_assignment_rule(Parser *p) D(fprintf(stderr, "%*c> invalid_assignment[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_named_expression ',' star_named_expressions* ':' expression")); Token * _literal; Token * _literal_1; - asdl_seq * _loop0_161_var; + asdl_seq * _loop0_163_var; expr_ty a; expr_ty expression_var; if ( @@ -20585,7 +20615,7 @@ invalid_assignment_rule(Parser *p) && (_literal = _PyPegen_expect_token(p, 12)) // token=',' && - (_loop0_161_var = _loop0_161_rule(p)) // star_named_expressions* + (_loop0_163_var = _loop0_163_rule(p)) // star_named_expressions* && (_literal_1 = _PyPegen_expect_token(p, 11)) // token=':' && @@ -20642,10 +20672,10 @@ invalid_assignment_rule(Parser *p) } D(fprintf(stderr, "%*c> invalid_assignment[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "((star_targets '='))* star_expressions '='")); Token * _literal; - asdl_seq * _loop0_162_var; + asdl_seq * _loop0_164_var; expr_ty a; if ( - (_loop0_162_var = _loop0_162_rule(p)) // ((star_targets '='))* + (_loop0_164_var = _loop0_164_rule(p)) // ((star_targets '='))* && (a = star_expressions_rule(p)) // star_expressions && @@ -20672,10 +20702,10 @@ invalid_assignment_rule(Parser *p) } D(fprintf(stderr, "%*c> invalid_assignment[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "((star_targets '='))* yield_expr '='")); Token * _literal; - asdl_seq * _loop0_163_var; + asdl_seq * _loop0_165_var; expr_ty a; if ( - (_loop0_163_var = _loop0_163_rule(p)) // ((star_targets '='))* + (_loop0_165_var = _loop0_165_rule(p)) // ((star_targets '='))* && (a = yield_expr_rule(p)) // yield_expr && @@ -20701,7 +20731,7 @@ invalid_assignment_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> invalid_assignment[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_expressions augassign (yield_expr | star_expressions)")); - void *_tmp_164_var; + void *_tmp_166_var; expr_ty a; AugOperator* augassign_var; if ( @@ -20709,7 +20739,7 @@ invalid_assignment_rule(Parser *p) && (augassign_var = augassign_rule(p)) // augassign && - (_tmp_164_var = _tmp_164_rule(p)) // yield_expr | star_expressions + (_tmp_166_var = _tmp_166_rule(p)) // yield_expr | star_expressions ) { D(fprintf(stderr, "%*c+ invalid_assignment[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_expressions augassign (yield_expr | star_expressions)")); @@ -20931,11 +20961,11 @@ invalid_comprehension_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> invalid_comprehension[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('[' | '(' | '{') starred_expression for_if_clauses")); - void *_tmp_165_var; + void *_tmp_167_var; expr_ty a; asdl_comprehension_seq* for_if_clauses_var; if ( - (_tmp_165_var = _tmp_165_rule(p)) // '[' | '(' | '{' + (_tmp_167_var = _tmp_167_rule(p)) // '[' | '(' | '{' && (a = starred_expression_rule(p)) // starred_expression && @@ -20962,12 +20992,12 @@ invalid_comprehension_rule(Parser *p) } D(fprintf(stderr, "%*c> invalid_comprehension[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('[' | '{') star_named_expression ',' star_named_expressions for_if_clauses")); Token * _literal; - void *_tmp_166_var; + void *_tmp_168_var; expr_ty a; asdl_expr_seq* b; asdl_comprehension_seq* for_if_clauses_var; if ( - (_tmp_166_var = _tmp_166_rule(p)) // '[' | '{' + (_tmp_168_var = _tmp_168_rule(p)) // '[' | '{' && (a = star_named_expression_rule(p)) // star_named_expression && @@ -20997,12 +21027,12 @@ invalid_comprehension_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> invalid_comprehension[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('[' | '{') star_named_expression ',' for_if_clauses")); - void *_tmp_167_var; + void *_tmp_169_var; expr_ty a; Token * b; asdl_comprehension_seq* for_if_clauses_var; if ( - (_tmp_167_var = _tmp_167_rule(p)) // '[' | '{' + (_tmp_169_var = _tmp_169_rule(p)) // '[' | '{' && (a = star_named_expression_rule(p)) // star_named_expression && @@ -21137,13 +21167,13 @@ invalid_parameters_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> invalid_parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(slash_no_default | slash_with_default) param_maybe_default* '/'")); - asdl_seq * _loop0_169_var; - void *_tmp_168_var; + asdl_seq * _loop0_171_var; + void *_tmp_170_var; Token * a; if ( - (_tmp_168_var = _tmp_168_rule(p)) // slash_no_default | slash_with_default + (_tmp_170_var = _tmp_170_rule(p)) // slash_no_default | slash_with_default && - (_loop0_169_var = _loop0_169_rule(p)) // param_maybe_default* + (_loop0_171_var = _loop0_171_rule(p)) // param_maybe_default* && (a = _PyPegen_expect_token(p, 17)) // token='/' ) @@ -21167,7 +21197,7 @@ invalid_parameters_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> invalid_parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "slash_no_default? param_no_default* invalid_parameters_helper param_no_default")); - asdl_seq * _loop0_170_var; + asdl_seq * _loop0_172_var; void *_opt_var; UNUSED(_opt_var); // Silence compiler warnings arg_ty a; @@ -21175,7 +21205,7 @@ invalid_parameters_rule(Parser *p) if ( (_opt_var = slash_no_default_rule(p), !p->error_indicator) // slash_no_default? && - (_loop0_170_var = _loop0_170_rule(p)) // param_no_default* + (_loop0_172_var = _loop0_172_rule(p)) // param_no_default* && (invalid_parameters_helper_var = invalid_parameters_helper_rule(p)) // invalid_parameters_helper && @@ -21201,18 +21231,18 @@ invalid_parameters_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> invalid_parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default* '(' param_no_default+ ','? ')'")); - asdl_seq * _loop0_171_var; - asdl_seq * _loop1_172_var; + asdl_seq * _loop0_173_var; + asdl_seq * _loop1_174_var; void *_opt_var; UNUSED(_opt_var); // Silence compiler warnings Token * a; Token * b; if ( - (_loop0_171_var = _loop0_171_rule(p)) // param_no_default* + (_loop0_173_var = _loop0_173_rule(p)) // param_no_default* && (a = _PyPegen_expect_token(p, 7)) // token='(' && - (_loop1_172_var = _loop1_172_rule(p)) // param_no_default+ + (_loop1_174_var = _loop1_174_rule(p)) // param_no_default+ && (_opt_var = _PyPegen_expect_token(p, 12), !p->error_indicator) // ','? && @@ -21239,22 +21269,22 @@ invalid_parameters_rule(Parser *p) } D(fprintf(stderr, "%*c> invalid_parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "[(slash_no_default | slash_with_default)] param_maybe_default* '*' (',' | param_no_default) param_maybe_default* '/'")); Token * _literal; - asdl_seq * _loop0_174_var; asdl_seq * _loop0_176_var; + asdl_seq * _loop0_178_var; void *_opt_var; UNUSED(_opt_var); // Silence compiler warnings - void *_tmp_175_var; + void *_tmp_177_var; Token * a; if ( - (_opt_var = _tmp_173_rule(p), !p->error_indicator) // [(slash_no_default | slash_with_default)] + (_opt_var = _tmp_175_rule(p), !p->error_indicator) // [(slash_no_default | slash_with_default)] && - (_loop0_174_var = _loop0_174_rule(p)) // param_maybe_default* + (_loop0_176_var = _loop0_176_rule(p)) // param_maybe_default* && (_literal = _PyPegen_expect_token(p, 16)) // token='*' && - (_tmp_175_var = _tmp_175_rule(p)) // ',' | param_no_default + (_tmp_177_var = _tmp_177_rule(p)) // ',' | param_no_default && - (_loop0_176_var = _loop0_176_rule(p)) // param_maybe_default* + (_loop0_178_var = _loop0_178_rule(p)) // param_maybe_default* && (a = _PyPegen_expect_token(p, 17)) // token='/' ) @@ -21279,10 +21309,10 @@ invalid_parameters_rule(Parser *p) } D(fprintf(stderr, "%*c> invalid_parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_maybe_default+ '/' '*'")); Token * _literal; - asdl_seq * _loop1_177_var; + asdl_seq * _loop1_179_var; Token * a; if ( - (_loop1_177_var = _loop1_177_rule(p)) // param_maybe_default+ + (_loop1_179_var = _loop1_179_rule(p)) // param_maybe_default+ && (_literal = _PyPegen_expect_token(p, 17)) // token='/' && @@ -21331,7 +21361,7 @@ invalid_default_rule(Parser *p) if ( (a = _PyPegen_expect_token(p, 22)) // token='=' && - _PyPegen_lookahead(1, _tmp_178_rule, p) + _PyPegen_lookahead(1, _tmp_180_rule, p) ) { D(fprintf(stderr, "%*c+ invalid_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'=' &(')' | ',')")); @@ -21376,12 +21406,12 @@ invalid_star_etc_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> invalid_star_etc[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' (')' | ',' (')' | '**'))")); - void *_tmp_179_var; + void *_tmp_181_var; Token * a; if ( (a = _PyPegen_expect_token(p, 16)) // token='*' && - (_tmp_179_var = _tmp_179_rule(p)) // ')' | ',' (')' | '**') + (_tmp_181_var = _tmp_181_rule(p)) // ')' | ',' (')' | '**') ) { D(fprintf(stderr, "%*c+ invalid_star_etc[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' (')' | ',' (')' | '**'))")); @@ -21464,20 +21494,20 @@ invalid_star_etc_rule(Parser *p) } D(fprintf(stderr, "%*c> invalid_star_etc[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' (param_no_default | ',') param_maybe_default* '*' (param_no_default | ',')")); Token * _literal; - asdl_seq * _loop0_181_var; - void *_tmp_180_var; + asdl_seq * _loop0_183_var; void *_tmp_182_var; + void *_tmp_184_var; Token * a; if ( (_literal = _PyPegen_expect_token(p, 16)) // token='*' && - (_tmp_180_var = _tmp_180_rule(p)) // param_no_default | ',' + (_tmp_182_var = _tmp_182_rule(p)) // param_no_default | ',' && - (_loop0_181_var = _loop0_181_rule(p)) // param_maybe_default* + (_loop0_183_var = _loop0_183_rule(p)) // param_maybe_default* && (a = _PyPegen_expect_token(p, 16)) // token='*' && - (_tmp_182_var = _tmp_182_rule(p)) // param_no_default | ',' + (_tmp_184_var = _tmp_184_rule(p)) // param_no_default | ',' ) { D(fprintf(stderr, "%*c+ invalid_star_etc[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' (param_no_default | ',') param_maybe_default* '*' (param_no_default | ',')")); @@ -21592,7 +21622,7 @@ invalid_kwds_rule(Parser *p) && (_literal_1 = _PyPegen_expect_token(p, 12)) // token=',' && - (a = (Token*)_tmp_183_rule(p)) // '*' | '**' | '/' + (a = (Token*)_tmp_185_rule(p)) // '*' | '**' | '/' ) { D(fprintf(stderr, "%*c+ invalid_kwds[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**' param ',' ('*' | '**' | '/')")); @@ -21657,13 +21687,13 @@ invalid_parameters_helper_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> invalid_parameters_helper[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_with_default+")); - asdl_seq * _loop1_184_var; + asdl_seq * _loop1_186_var; if ( - (_loop1_184_var = _loop1_184_rule(p)) // param_with_default+ + (_loop1_186_var = _loop1_186_rule(p)) // param_with_default+ ) { D(fprintf(stderr, "%*c+ invalid_parameters_helper[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "param_with_default+")); - _res = _loop1_184_var; + _res = _loop1_186_var; goto done; } p->mark = _mark; @@ -21728,13 +21758,13 @@ invalid_lambda_parameters_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> invalid_lambda_parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(lambda_slash_no_default | lambda_slash_with_default) lambda_param_maybe_default* '/'")); - asdl_seq * _loop0_186_var; - void *_tmp_185_var; + asdl_seq * _loop0_188_var; + void *_tmp_187_var; Token * a; if ( - (_tmp_185_var = _tmp_185_rule(p)) // lambda_slash_no_default | lambda_slash_with_default + (_tmp_187_var = _tmp_187_rule(p)) // lambda_slash_no_default | lambda_slash_with_default && - (_loop0_186_var = _loop0_186_rule(p)) // lambda_param_maybe_default* + (_loop0_188_var = _loop0_188_rule(p)) // lambda_param_maybe_default* && (a = _PyPegen_expect_token(p, 17)) // token='/' ) @@ -21758,7 +21788,7 @@ invalid_lambda_parameters_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> invalid_lambda_parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_slash_no_default? lambda_param_no_default* invalid_lambda_parameters_helper lambda_param_no_default")); - asdl_seq * _loop0_187_var; + asdl_seq * _loop0_189_var; void *_opt_var; UNUSED(_opt_var); // Silence compiler warnings arg_ty a; @@ -21766,7 +21796,7 @@ invalid_lambda_parameters_rule(Parser *p) if ( (_opt_var = lambda_slash_no_default_rule(p), !p->error_indicator) // lambda_slash_no_default? && - (_loop0_187_var = _loop0_187_rule(p)) // lambda_param_no_default* + (_loop0_189_var = _loop0_189_rule(p)) // lambda_param_no_default* && (invalid_lambda_parameters_helper_var = invalid_lambda_parameters_helper_rule(p)) // invalid_lambda_parameters_helper && @@ -21792,18 +21822,18 @@ invalid_lambda_parameters_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> invalid_lambda_parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default* '(' ','.lambda_param+ ','? ')'")); - asdl_seq * _gather_189_var; - asdl_seq * _loop0_188_var; + asdl_seq * _gather_191_var; + asdl_seq * _loop0_190_var; void *_opt_var; UNUSED(_opt_var); // Silence compiler warnings Token * a; Token * b; if ( - (_loop0_188_var = _loop0_188_rule(p)) // lambda_param_no_default* + (_loop0_190_var = _loop0_190_rule(p)) // lambda_param_no_default* && (a = _PyPegen_expect_token(p, 7)) // token='(' && - (_gather_189_var = _gather_189_rule(p)) // ','.lambda_param+ + (_gather_191_var = _gather_191_rule(p)) // ','.lambda_param+ && (_opt_var = _PyPegen_expect_token(p, 12), !p->error_indicator) // ','? && @@ -21830,22 +21860,22 @@ invalid_lambda_parameters_rule(Parser *p) } D(fprintf(stderr, "%*c> invalid_lambda_parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "[(lambda_slash_no_default | lambda_slash_with_default)] lambda_param_maybe_default* '*' (',' | lambda_param_no_default) lambda_param_maybe_default* '/'")); Token * _literal; - asdl_seq * _loop0_192_var; asdl_seq * _loop0_194_var; + asdl_seq * _loop0_196_var; void *_opt_var; UNUSED(_opt_var); // Silence compiler warnings - void *_tmp_193_var; + void *_tmp_195_var; Token * a; if ( - (_opt_var = _tmp_191_rule(p), !p->error_indicator) // [(lambda_slash_no_default | lambda_slash_with_default)] + (_opt_var = _tmp_193_rule(p), !p->error_indicator) // [(lambda_slash_no_default | lambda_slash_with_default)] && - (_loop0_192_var = _loop0_192_rule(p)) // lambda_param_maybe_default* + (_loop0_194_var = _loop0_194_rule(p)) // lambda_param_maybe_default* && (_literal = _PyPegen_expect_token(p, 16)) // token='*' && - (_tmp_193_var = _tmp_193_rule(p)) // ',' | lambda_param_no_default + (_tmp_195_var = _tmp_195_rule(p)) // ',' | lambda_param_no_default && - (_loop0_194_var = _loop0_194_rule(p)) // lambda_param_maybe_default* + (_loop0_196_var = _loop0_196_rule(p)) // lambda_param_maybe_default* && (a = _PyPegen_expect_token(p, 17)) // token='/' ) @@ -21870,10 +21900,10 @@ invalid_lambda_parameters_rule(Parser *p) } D(fprintf(stderr, "%*c> invalid_lambda_parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_maybe_default+ '/' '*'")); Token * _literal; - asdl_seq * _loop1_195_var; + asdl_seq * _loop1_197_var; Token * a; if ( - (_loop1_195_var = _loop1_195_rule(p)) // lambda_param_maybe_default+ + (_loop1_197_var = _loop1_197_rule(p)) // lambda_param_maybe_default+ && (_literal = _PyPegen_expect_token(p, 17)) // token='/' && @@ -21944,13 +21974,13 @@ invalid_lambda_parameters_helper_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> invalid_lambda_parameters_helper[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_with_default+")); - asdl_seq * _loop1_196_var; + asdl_seq * _loop1_198_var; if ( - (_loop1_196_var = _loop1_196_rule(p)) // lambda_param_with_default+ + (_loop1_198_var = _loop1_198_rule(p)) // lambda_param_with_default+ ) { D(fprintf(stderr, "%*c+ invalid_lambda_parameters_helper[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_param_with_default+")); - _res = _loop1_196_var; + _res = _loop1_198_var; goto done; } p->mark = _mark; @@ -21986,11 +22016,11 @@ invalid_lambda_star_etc_rule(Parser *p) } D(fprintf(stderr, "%*c> invalid_lambda_star_etc[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' (':' | ',' (':' | '**'))")); Token * _literal; - void *_tmp_197_var; + void *_tmp_199_var; if ( (_literal = _PyPegen_expect_token(p, 16)) // token='*' && - (_tmp_197_var = _tmp_197_rule(p)) // ':' | ',' (':' | '**') + (_tmp_199_var = _tmp_199_rule(p)) // ':' | ',' (':' | '**') ) { D(fprintf(stderr, "%*c+ invalid_lambda_star_etc[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' (':' | ',' (':' | '**'))")); @@ -22043,20 +22073,20 @@ invalid_lambda_star_etc_rule(Parser *p) } D(fprintf(stderr, "%*c> invalid_lambda_star_etc[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' (lambda_param_no_default | ',') lambda_param_maybe_default* '*' (lambda_param_no_default | ',')")); Token * _literal; - asdl_seq * _loop0_199_var; - void *_tmp_198_var; + asdl_seq * _loop0_201_var; void *_tmp_200_var; + void *_tmp_202_var; Token * a; if ( (_literal = _PyPegen_expect_token(p, 16)) // token='*' && - (_tmp_198_var = _tmp_198_rule(p)) // lambda_param_no_default | ',' + (_tmp_200_var = _tmp_200_rule(p)) // lambda_param_no_default | ',' && - (_loop0_199_var = _loop0_199_rule(p)) // lambda_param_maybe_default* + (_loop0_201_var = _loop0_201_rule(p)) // lambda_param_maybe_default* && (a = _PyPegen_expect_token(p, 16)) // token='*' && - (_tmp_200_var = _tmp_200_rule(p)) // lambda_param_no_default | ',' + (_tmp_202_var = _tmp_202_rule(p)) // lambda_param_no_default | ',' ) { D(fprintf(stderr, "%*c+ invalid_lambda_star_etc[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' (lambda_param_no_default | ',') lambda_param_maybe_default* '*' (lambda_param_no_default | ',')")); @@ -22174,7 +22204,7 @@ invalid_lambda_kwds_rule(Parser *p) && (_literal_1 = _PyPegen_expect_token(p, 12)) // token=',' && - (a = (Token*)_tmp_201_rule(p)) // '*' | '**' | '/' + (a = (Token*)_tmp_203_rule(p)) // '*' | '**' | '/' ) { D(fprintf(stderr, "%*c+ invalid_lambda_kwds[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**' lambda_param ',' ('*' | '**' | '/')")); @@ -22280,7 +22310,7 @@ invalid_with_item_rule(Parser *p) && (a = expression_rule(p)) // expression && - _PyPegen_lookahead(1, _tmp_202_rule, p) + _PyPegen_lookahead(1, _tmp_204_rule, p) ) { D(fprintf(stderr, "%*c+ invalid_with_item[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression 'as' expression &(',' | ')' | ':')")); @@ -22453,14 +22483,14 @@ invalid_import_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> invalid_import[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'import' ','.dotted_name+ 'from' dotted_name")); - asdl_seq * _gather_203_var; + asdl_seq * _gather_205_var; Token * _keyword; Token * a; expr_ty dotted_name_var; if ( (a = _PyPegen_expect_token(p, 607)) // token='import' && - (_gather_203_var = _gather_203_rule(p)) // ','.dotted_name+ + (_gather_205_var = _gather_205_rule(p)) // ','.dotted_name+ && (_keyword = _PyPegen_expect_token(p, 608)) // token='from' && @@ -22556,7 +22586,7 @@ invalid_with_stmt_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> invalid_with_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "ASYNC? 'with' ','.(expression ['as' star_target])+ NEWLINE")); - asdl_seq * _gather_205_var; + asdl_seq * _gather_207_var; Token * _keyword; void *_opt_var; UNUSED(_opt_var); // Silence compiler warnings @@ -22566,7 +22596,7 @@ invalid_with_stmt_rule(Parser *p) && (_keyword = _PyPegen_expect_token(p, 615)) // token='with' && - (_gather_205_var = _gather_205_rule(p)) // ','.(expression ['as' star_target])+ + (_gather_207_var = _gather_207_rule(p)) // ','.(expression ['as' star_target])+ && (newline_var = _PyPegen_expect_token(p, NEWLINE)) // token='NEWLINE' ) @@ -22590,7 +22620,7 @@ invalid_with_stmt_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> invalid_with_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "ASYNC? 'with' '(' ','.(expressions ['as' star_target])+ ','? ')' NEWLINE")); - asdl_seq * _gather_207_var; + asdl_seq * _gather_209_var; Token * _keyword; Token * _literal; Token * _literal_1; @@ -22606,7 +22636,7 @@ invalid_with_stmt_rule(Parser *p) && (_literal = _PyPegen_expect_token(p, 7)) // token='(' && - (_gather_207_var = _gather_207_rule(p)) // ','.(expressions ['as' star_target])+ + (_gather_209_var = _gather_209_rule(p)) // ','.(expressions ['as' star_target])+ && (_opt_var_1 = _PyPegen_expect_token(p, 12), !p->error_indicator) // ','? && @@ -22655,7 +22685,7 @@ invalid_with_stmt_indent_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> invalid_with_stmt_indent[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "ASYNC? 'with' ','.(expression ['as' star_target])+ ':' NEWLINE !INDENT")); - asdl_seq * _gather_209_var; + asdl_seq * _gather_211_var; Token * _literal; void *_opt_var; UNUSED(_opt_var); // Silence compiler warnings @@ -22666,7 +22696,7 @@ invalid_with_stmt_indent_rule(Parser *p) && (a = _PyPegen_expect_token(p, 615)) // token='with' && - (_gather_209_var = _gather_209_rule(p)) // ','.(expression ['as' star_target])+ + (_gather_211_var = _gather_211_rule(p)) // ','.(expression ['as' star_target])+ && (_literal = _PyPegen_expect_token(p, 11)) // token=':' && @@ -22694,7 +22724,7 @@ invalid_with_stmt_indent_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> invalid_with_stmt_indent[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "ASYNC? 'with' '(' ','.(expressions ['as' star_target])+ ','? ')' ':' NEWLINE !INDENT")); - asdl_seq * _gather_211_var; + asdl_seq * _gather_213_var; Token * _literal; Token * _literal_1; Token * _literal_2; @@ -22711,7 +22741,7 @@ invalid_with_stmt_indent_rule(Parser *p) && (_literal = _PyPegen_expect_token(p, 7)) // token='(' && - (_gather_211_var = _gather_211_rule(p)) // ','.(expressions ['as' star_target])+ + (_gather_213_var = _gather_213_rule(p)) // ','.(expressions ['as' star_target])+ && (_opt_var_1 = _PyPegen_expect_token(p, 12), !p->error_indicator) // ','? && @@ -22808,7 +22838,7 @@ invalid_try_stmt_rule(Parser *p) && (block_var = block_rule(p)) // block && - _PyPegen_lookahead(0, _tmp_213_rule, p) + _PyPegen_lookahead(0, _tmp_215_rule, p) ) { D(fprintf(stderr, "%*c+ invalid_try_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'try' ':' block !('except' | 'finally')")); @@ -22833,8 +22863,8 @@ invalid_try_stmt_rule(Parser *p) Token * _keyword; Token * _literal; Token * _literal_1; - asdl_seq * _loop0_214_var; - asdl_seq * _loop1_215_var; + asdl_seq * _loop0_216_var; + asdl_seq * _loop1_217_var; void *_opt_var; UNUSED(_opt_var); // Silence compiler warnings Token * a; @@ -22845,9 +22875,9 @@ invalid_try_stmt_rule(Parser *p) && (_literal = _PyPegen_expect_token(p, 11)) // token=':' && - (_loop0_214_var = _loop0_214_rule(p)) // block* + (_loop0_216_var = _loop0_216_rule(p)) // block* && - (_loop1_215_var = _loop1_215_rule(p)) // except_block+ + (_loop1_217_var = _loop1_217_rule(p)) // except_block+ && (a = _PyPegen_expect_token(p, 637)) // token='except' && @@ -22855,7 +22885,7 @@ invalid_try_stmt_rule(Parser *p) && (expression_var = expression_rule(p)) // expression && - (_opt_var = _tmp_216_rule(p), !p->error_indicator) // ['as' NAME] + (_opt_var = _tmp_218_rule(p), !p->error_indicator) // ['as' NAME] && (_literal_1 = _PyPegen_expect_token(p, 11)) // token=':' ) @@ -22882,8 +22912,8 @@ invalid_try_stmt_rule(Parser *p) Token * _keyword; Token * _literal; Token * _literal_1; - asdl_seq * _loop0_217_var; - asdl_seq * _loop1_218_var; + asdl_seq * _loop0_219_var; + asdl_seq * _loop1_220_var; void *_opt_var; UNUSED(_opt_var); // Silence compiler warnings Token * a; @@ -22892,13 +22922,13 @@ invalid_try_stmt_rule(Parser *p) && (_literal = _PyPegen_expect_token(p, 11)) // token=':' && - (_loop0_217_var = _loop0_217_rule(p)) // block* + (_loop0_219_var = _loop0_219_rule(p)) // block* && - (_loop1_218_var = _loop1_218_rule(p)) // except_star_block+ + (_loop1_220_var = _loop1_220_rule(p)) // except_star_block+ && (a = _PyPegen_expect_token(p, 637)) // token='except' && - (_opt_var = _tmp_219_rule(p), !p->error_indicator) // [expression ['as' NAME]] + (_opt_var = _tmp_221_rule(p), !p->error_indicator) // [expression ['as' NAME]] && (_literal_1 = _PyPegen_expect_token(p, 11)) // token=':' ) @@ -22965,7 +22995,7 @@ invalid_except_stmt_rule(Parser *p) && (expressions_var = expressions_rule(p)) // expressions && - (_opt_var_1 = _tmp_220_rule(p), !p->error_indicator) // ['as' NAME] + (_opt_var_1 = _tmp_222_rule(p), !p->error_indicator) // ['as' NAME] && (_literal_1 = _PyPegen_expect_token(p, 11)) // token=':' ) @@ -23003,7 +23033,7 @@ invalid_except_stmt_rule(Parser *p) && (expression_var = expression_rule(p)) // expression && - (_opt_var_1 = _tmp_221_rule(p), !p->error_indicator) // ['as' NAME] + (_opt_var_1 = _tmp_223_rule(p), !p->error_indicator) // ['as' NAME] && (newline_var = _PyPegen_expect_token(p, NEWLINE)) // token='NEWLINE' ) @@ -23055,14 +23085,14 @@ invalid_except_stmt_rule(Parser *p) } D(fprintf(stderr, "%*c> invalid_except_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'except' '*' (NEWLINE | ':')")); Token * _literal; - void *_tmp_222_var; + void *_tmp_224_var; Token * a; if ( (a = _PyPegen_expect_token(p, 637)) // token='except' && (_literal = _PyPegen_expect_token(p, 16)) // token='*' && - (_tmp_222_var = _tmp_222_rule(p)) // NEWLINE | ':' + (_tmp_224_var = _tmp_224_rule(p)) // NEWLINE | ':' ) { D(fprintf(stderr, "%*c+ invalid_except_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'except' '*' (NEWLINE | ':')")); @@ -23167,7 +23197,7 @@ invalid_except_stmt_indent_rule(Parser *p) && (expression_var = expression_rule(p)) // expression && - (_opt_var = _tmp_223_rule(p), !p->error_indicator) // ['as' NAME] + (_opt_var = _tmp_225_rule(p), !p->error_indicator) // ['as' NAME] && (_literal = _PyPegen_expect_token(p, 11)) // token=':' && @@ -23261,7 +23291,7 @@ invalid_except_star_stmt_indent_rule(Parser *p) && (expression_var = expression_rule(p)) // expression && - (_opt_var = _tmp_224_rule(p), !p->error_indicator) // ['as' NAME] + (_opt_var = _tmp_226_rule(p), !p->error_indicator) // ['as' NAME] && (_literal_1 = _PyPegen_expect_token(p, 11)) // token=':' && @@ -23625,7 +23655,7 @@ invalid_class_argument_pattern_rule(Parser *p) asdl_pattern_seq* a; asdl_seq* keyword_patterns_var; if ( - (_opt_var = _tmp_225_rule(p), !p->error_indicator) // [positional_patterns ','] + (_opt_var = _tmp_227_rule(p), !p->error_indicator) // [positional_patterns ','] && (keyword_patterns_var = keyword_patterns_rule(p)) // keyword_patterns && @@ -24117,7 +24147,7 @@ invalid_def_raw_rule(Parser *p) && (_literal_1 = _PyPegen_expect_token(p, 8)) // token=')' && - (_opt_var_3 = _tmp_226_rule(p), !p->error_indicator) // ['->' expression] + (_opt_var_3 = _tmp_228_rule(p), !p->error_indicator) // ['->' expression] && (_literal_2 = _PyPegen_expect_token(p, 11)) // token=':' && @@ -24180,7 +24210,7 @@ invalid_class_def_raw_rule(Parser *p) && (_opt_var = type_params_rule(p), !p->error_indicator) // type_params? && - (_opt_var_1 = _tmp_227_rule(p), !p->error_indicator) // ['(' arguments? ')'] + (_opt_var_1 = _tmp_229_rule(p), !p->error_indicator) // ['(' arguments? ')'] && (newline_var = _PyPegen_expect_token(p, NEWLINE)) // token='NEWLINE' ) @@ -24219,7 +24249,7 @@ invalid_class_def_raw_rule(Parser *p) && (_opt_var = type_params_rule(p), !p->error_indicator) // type_params? && - (_opt_var_1 = _tmp_228_rule(p), !p->error_indicator) // ['(' arguments? ')'] + (_opt_var_1 = _tmp_230_rule(p), !p->error_indicator) // ['(' arguments? ')'] && (_literal = _PyPegen_expect_token(p, 11)) // token=':' && @@ -24269,11 +24299,11 @@ invalid_double_starred_kvpairs_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> invalid_double_starred_kvpairs[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.double_starred_kvpair+ ',' invalid_kvpair")); - asdl_seq * _gather_229_var; + asdl_seq * _gather_231_var; Token * _literal; void *invalid_kvpair_var; if ( - (_gather_229_var = _gather_229_rule(p)) // ','.double_starred_kvpair+ + (_gather_231_var = _gather_231_rule(p)) // ','.double_starred_kvpair+ && (_literal = _PyPegen_expect_token(p, 12)) // token=',' && @@ -24281,7 +24311,7 @@ invalid_double_starred_kvpairs_rule(Parser *p) ) { D(fprintf(stderr, "%*c+ invalid_double_starred_kvpairs[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.double_starred_kvpair+ ',' invalid_kvpair")); - _res = _PyPegen_dummy_name(p, _gather_229_var, _literal, invalid_kvpair_var); + _res = _PyPegen_dummy_name(p, _gather_231_var, _literal, invalid_kvpair_var); goto done; } p->mark = _mark; @@ -24334,7 +24364,7 @@ invalid_double_starred_kvpairs_rule(Parser *p) && (a = _PyPegen_expect_token(p, 11)) // token=':' && - _PyPegen_lookahead(1, _tmp_231_rule, p) + _PyPegen_lookahead(1, _tmp_233_rule, p) ) { D(fprintf(stderr, "%*c+ invalid_double_starred_kvpairs[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression ':' &('}' | ',')")); @@ -24444,7 +24474,7 @@ invalid_kvpair_rule(Parser *p) && (a = _PyPegen_expect_token(p, 11)) // token=':' && - _PyPegen_lookahead(1, _tmp_232_rule, p) + _PyPegen_lookahead(1, _tmp_234_rule, p) ) { D(fprintf(stderr, "%*c+ invalid_kvpair[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression ':' &('}' | ',')")); @@ -24660,7 +24690,7 @@ invalid_replacement_field_rule(Parser *p) if ( (_literal = _PyPegen_expect_token(p, 25)) // token='{' && - _PyPegen_lookahead(0, _tmp_233_rule, p) + _PyPegen_lookahead(0, _tmp_235_rule, p) ) { D(fprintf(stderr, "%*c+ invalid_replacement_field[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' !(yield_expr | star_expressions)")); @@ -24683,13 +24713,13 @@ invalid_replacement_field_rule(Parser *p) } D(fprintf(stderr, "%*c> invalid_replacement_field[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' (yield_expr | star_expressions) !('=' | '!' | ':' | '}')")); Token * _literal; - void *_tmp_234_var; + void *_tmp_236_var; if ( (_literal = _PyPegen_expect_token(p, 25)) // token='{' && - (_tmp_234_var = _tmp_234_rule(p)) // yield_expr | star_expressions + (_tmp_236_var = _tmp_236_rule(p)) // yield_expr | star_expressions && - _PyPegen_lookahead(0, _tmp_235_rule, p) + _PyPegen_lookahead(0, _tmp_237_rule, p) ) { D(fprintf(stderr, "%*c+ invalid_replacement_field[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' (yield_expr | star_expressions) !('=' | '!' | ':' | '}')")); @@ -24713,15 +24743,15 @@ invalid_replacement_field_rule(Parser *p) D(fprintf(stderr, "%*c> invalid_replacement_field[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' (yield_expr | star_expressions) '=' !('!' | ':' | '}')")); Token * _literal; Token * _literal_1; - void *_tmp_236_var; + void *_tmp_238_var; if ( (_literal = _PyPegen_expect_token(p, 25)) // token='{' && - (_tmp_236_var = _tmp_236_rule(p)) // yield_expr | star_expressions + (_tmp_238_var = _tmp_238_rule(p)) // yield_expr | star_expressions && (_literal_1 = _PyPegen_expect_token(p, 22)) // token='=' && - _PyPegen_lookahead(0, _tmp_237_rule, p) + _PyPegen_lookahead(0, _tmp_239_rule, p) ) { D(fprintf(stderr, "%*c+ invalid_replacement_field[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' (yield_expr | star_expressions) '=' !('!' | ':' | '}')")); @@ -24746,12 +24776,12 @@ invalid_replacement_field_rule(Parser *p) Token * _literal; void *_opt_var; UNUSED(_opt_var); // Silence compiler warnings - void *_tmp_238_var; + void *_tmp_240_var; void *invalid_conversion_character_var; if ( (_literal = _PyPegen_expect_token(p, 25)) // token='{' && - (_tmp_238_var = _tmp_238_rule(p)) // yield_expr | star_expressions + (_tmp_240_var = _tmp_240_rule(p)) // yield_expr | star_expressions && (_opt_var = _PyPegen_expect_token(p, 22), !p->error_indicator) // '='? && @@ -24759,7 +24789,7 @@ invalid_replacement_field_rule(Parser *p) ) { D(fprintf(stderr, "%*c+ invalid_replacement_field[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' (yield_expr | star_expressions) '='? invalid_conversion_character")); - _res = _PyPegen_dummy_name(p, _literal, _tmp_238_var, _opt_var, invalid_conversion_character_var); + _res = _PyPegen_dummy_name(p, _literal, _tmp_240_var, _opt_var, invalid_conversion_character_var); goto done; } p->mark = _mark; @@ -24777,17 +24807,17 @@ invalid_replacement_field_rule(Parser *p) UNUSED(_opt_var); // Silence compiler warnings void *_opt_var_1; UNUSED(_opt_var_1); // Silence compiler warnings - void *_tmp_239_var; + void *_tmp_241_var; if ( (_literal = _PyPegen_expect_token(p, 25)) // token='{' && - (_tmp_239_var = _tmp_239_rule(p)) // yield_expr | star_expressions + (_tmp_241_var = _tmp_241_rule(p)) // yield_expr | star_expressions && (_opt_var = _PyPegen_expect_token(p, 22), !p->error_indicator) // '='? && - (_opt_var_1 = _tmp_240_rule(p), !p->error_indicator) // ['!' NAME] + (_opt_var_1 = _tmp_242_rule(p), !p->error_indicator) // ['!' NAME] && - _PyPegen_lookahead(0, _tmp_241_rule, p) + _PyPegen_lookahead(0, _tmp_243_rule, p) ) { D(fprintf(stderr, "%*c+ invalid_replacement_field[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' (yield_expr | star_expressions) '='? ['!' NAME] !(':' | '}')")); @@ -24811,24 +24841,24 @@ invalid_replacement_field_rule(Parser *p) D(fprintf(stderr, "%*c> invalid_replacement_field[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' (yield_expr | star_expressions) '='? ['!' NAME] ':' fstring_format_spec* !'}'")); Token * _literal; Token * _literal_1; - asdl_seq * _loop0_244_var; + asdl_seq * _loop0_246_var; void *_opt_var; UNUSED(_opt_var); // Silence compiler warnings void *_opt_var_1; UNUSED(_opt_var_1); // Silence compiler warnings - void *_tmp_242_var; + void *_tmp_244_var; if ( (_literal = _PyPegen_expect_token(p, 25)) // token='{' && - (_tmp_242_var = _tmp_242_rule(p)) // yield_expr | star_expressions + (_tmp_244_var = _tmp_244_rule(p)) // yield_expr | star_expressions && (_opt_var = _PyPegen_expect_token(p, 22), !p->error_indicator) // '='? && - (_opt_var_1 = _tmp_243_rule(p), !p->error_indicator) // ['!' NAME] + (_opt_var_1 = _tmp_245_rule(p), !p->error_indicator) // ['!' NAME] && (_literal_1 = _PyPegen_expect_token(p, 11)) // token=':' && - (_loop0_244_var = _loop0_244_rule(p)) // fstring_format_spec* + (_loop0_246_var = _loop0_246_rule(p)) // fstring_format_spec* && _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, 26) // token='}' ) @@ -24857,15 +24887,15 @@ invalid_replacement_field_rule(Parser *p) UNUSED(_opt_var); // Silence compiler warnings void *_opt_var_1; UNUSED(_opt_var_1); // Silence compiler warnings - void *_tmp_245_var; + void *_tmp_247_var; if ( (_literal = _PyPegen_expect_token(p, 25)) // token='{' && - (_tmp_245_var = _tmp_245_rule(p)) // yield_expr | star_expressions + (_tmp_247_var = _tmp_247_rule(p)) // yield_expr | star_expressions && (_opt_var = _PyPegen_expect_token(p, 22), !p->error_indicator) // '='? && - (_opt_var_1 = _tmp_246_rule(p), !p->error_indicator) // ['!' NAME] + (_opt_var_1 = _tmp_248_rule(p), !p->error_indicator) // ['!' NAME] && _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, 26) // token='}' ) @@ -24912,7 +24942,7 @@ invalid_conversion_character_rule(Parser *p) if ( (_literal = _PyPegen_expect_token(p, 54)) // token='!' && - _PyPegen_lookahead(1, _tmp_247_rule, p) + _PyPegen_lookahead(1, _tmp_249_rule, p) ) { D(fprintf(stderr, "%*c+ invalid_conversion_character[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'!' &(':' | '}')")); @@ -25775,12 +25805,12 @@ _loop1_14_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> _loop1_14[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(star_targets '=')")); - void *_tmp_248_var; + void *_tmp_250_var; while ( - (_tmp_248_var = _tmp_248_rule(p)) // star_targets '=' + (_tmp_250_var = _tmp_250_rule(p)) // star_targets '=' ) { - _res = _tmp_248_var; + _res = _tmp_250_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -26344,12 +26374,12 @@ _loop0_24_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> _loop0_24[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('.' | '...')")); - void *_tmp_249_var; + void *_tmp_251_var; while ( - (_tmp_249_var = _tmp_249_rule(p)) // '.' | '...' + (_tmp_251_var = _tmp_251_rule(p)) // '.' | '...' ) { - _res = _tmp_249_var; + _res = _tmp_251_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -26411,12 +26441,12 @@ _loop1_25_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> _loop1_25[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('.' | '...')")); - void *_tmp_250_var; + void *_tmp_252_var; while ( - (_tmp_250_var = _tmp_250_rule(p)) // '.' | '...' + (_tmp_252_var = _tmp_252_rule(p)) // '.' | '...' ) { - _res = _tmp_250_var; + _res = _tmp_252_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -26809,12 +26839,12 @@ _loop1_32_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> _loop1_32[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('@' named_expression NEWLINE)")); - void *_tmp_251_var; + void *_tmp_253_var; while ( - (_tmp_251_var = _tmp_251_rule(p)) // '@' named_expression NEWLINE + (_tmp_253_var = _tmp_253_rule(p)) // '@' named_expression NEWLINE ) { - _res = _tmp_251_var; + _res = _tmp_253_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -29939,12 +29969,12 @@ _loop1_82_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> _loop1_82[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(',' expression)")); - void *_tmp_252_var; + void *_tmp_254_var; while ( - (_tmp_252_var = _tmp_252_rule(p)) // ',' expression + (_tmp_254_var = _tmp_254_rule(p)) // ',' expression ) { - _res = _tmp_252_var; + _res = _tmp_254_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -30011,12 +30041,12 @@ _loop1_83_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> _loop1_83[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(',' star_expression)")); - void *_tmp_253_var; + void *_tmp_255_var; while ( - (_tmp_253_var = _tmp_253_rule(p)) // ',' star_expression + (_tmp_255_var = _tmp_255_rule(p)) // ',' star_expression ) { - _res = _tmp_253_var; + _res = _tmp_255_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -30200,12 +30230,12 @@ _loop1_86_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> _loop1_86[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('or' conjunction)")); - void *_tmp_254_var; + void *_tmp_256_var; while ( - (_tmp_254_var = _tmp_254_rule(p)) // 'or' conjunction + (_tmp_256_var = _tmp_256_rule(p)) // 'or' conjunction ) { - _res = _tmp_254_var; + _res = _tmp_256_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -30272,12 +30302,12 @@ _loop1_87_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> _loop1_87[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('and' inversion)")); - void *_tmp_255_var; + void *_tmp_257_var; while ( - (_tmp_255_var = _tmp_255_rule(p)) // 'and' inversion + (_tmp_257_var = _tmp_257_rule(p)) // 'and' inversion ) { - _res = _tmp_255_var; + _res = _tmp_257_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -30464,7 +30494,7 @@ _loop0_91_rule(Parser *p) while ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' && - (elem = _tmp_256_rule(p)) // slice | starred_expression + (elem = _tmp_258_rule(p)) // slice | starred_expression ) { _res = elem; @@ -30529,7 +30559,7 @@ _gather_90_rule(Parser *p) void *elem; asdl_seq * seq; if ( - (elem = _tmp_256_rule(p)) // slice | starred_expression + (elem = _tmp_258_rule(p)) // slice | starred_expression && (seq = _loop0_91_rule(p)) // _loop0_91 ) @@ -32128,12 +32158,12 @@ _loop1_115_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> _loop1_115[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(fstring | string)")); - void *_tmp_257_var; + void *_tmp_259_var; while ( - (_tmp_257_var = _tmp_257_rule(p)) // fstring | string + (_tmp_259_var = _tmp_259_rule(p)) // fstring | string ) { - _res = _tmp_257_var; + _res = _tmp_259_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -32438,12 +32468,12 @@ _loop0_120_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> _loop0_120[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('if' disjunction)")); - void *_tmp_258_var; + void *_tmp_260_var; while ( - (_tmp_258_var = _tmp_258_rule(p)) // 'if' disjunction + (_tmp_260_var = _tmp_260_rule(p)) // 'if' disjunction ) { - _res = _tmp_258_var; + _res = _tmp_260_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -32505,12 +32535,12 @@ _loop0_121_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> _loop0_121[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('if' disjunction)")); - void *_tmp_259_var; + void *_tmp_261_var; while ( - (_tmp_259_var = _tmp_259_rule(p)) // 'if' disjunction + (_tmp_261_var = _tmp_261_rule(p)) // 'if' disjunction ) { - _res = _tmp_259_var; + _res = _tmp_261_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -32636,7 +32666,7 @@ _loop0_124_rule(Parser *p) while ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' && - (elem = _tmp_260_rule(p)) // starred_expression | (assignment_expression | expression !':=') !'=' + (elem = _tmp_262_rule(p)) // starred_expression | (assignment_expression | expression !':=') !'=' ) { _res = elem; @@ -32702,7 +32732,7 @@ _gather_123_rule(Parser *p) void *elem; asdl_seq * seq; if ( - (elem = _tmp_260_rule(p)) // starred_expression | (assignment_expression | expression !':=') !'=' + (elem = _tmp_262_rule(p)) // starred_expression | (assignment_expression | expression !':=') !'=' && (seq = _loop0_124_rule(p)) // _loop0_124 ) @@ -33263,12 +33293,12 @@ _loop0_134_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> _loop0_134[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(',' star_target)")); - void *_tmp_261_var; + void *_tmp_263_var; while ( - (_tmp_261_var = _tmp_261_rule(p)) // ',' star_target + (_tmp_263_var = _tmp_263_rule(p)) // ',' star_target ) { - _res = _tmp_261_var; + _res = _tmp_263_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -33447,12 +33477,12 @@ _loop1_137_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> _loop1_137[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(',' star_target)")); - void *_tmp_262_var; + void *_tmp_264_var; while ( - (_tmp_262_var = _tmp_262_rule(p)) // ',' star_target + (_tmp_264_var = _tmp_264_rule(p)) // ',' star_target ) { - _res = _tmp_262_var; + _res = _tmp_264_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -34178,13 +34208,13 @@ _tmp_150_rule(Parser *p) return NULL; } D(fprintf(stderr, "%*c> _tmp_150[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(','.(starred_expression | (assignment_expression | expression !':=') !'=')+ ',' kwargs)")); - void *_tmp_263_var; + void *_tmp_265_var; if ( - (_tmp_263_var = _tmp_263_rule(p)) // ','.(starred_expression | (assignment_expression | expression !':=') !'=')+ ',' kwargs + (_tmp_265_var = _tmp_265_rule(p)) // ','.(starred_expression | (assignment_expression | expression !':=') !'=')+ ',' kwargs ) { D(fprintf(stderr, "%*c+ _tmp_150[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "(','.(starred_expression | (assignment_expression | expression !':=') !'=')+ ',' kwargs)")); - _res = _tmp_263_var; + _res = _tmp_265_var; goto done; } p->mark = _mark; @@ -34216,9 +34246,126 @@ _tmp_150_rule(Parser *p) return _res; } -// _tmp_151: args | expression for_if_clauses +// _loop0_152: ',' (starred_expression !'=') +static asdl_seq * +_loop0_152_rule(Parser *p) +{ + if (p->level++ == MAXSTACK) { + _Pypegen_stack_overflow(p); + } + if (p->error_indicator) { + p->level--; + return NULL; + } + void *_res = NULL; + int _mark = p->mark; + void **_children = PyMem_Malloc(sizeof(void *)); + if (!_children) { + p->error_indicator = 1; + PyErr_NoMemory(); + p->level--; + return NULL; + } + Py_ssize_t _children_capacity = 1; + Py_ssize_t _n = 0; + { // ',' (starred_expression !'=') + if (p->error_indicator) { + p->level--; + return NULL; + } + D(fprintf(stderr, "%*c> _loop0_152[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (starred_expression !'=')")); + Token * _literal; + void *elem; + while ( + (_literal = _PyPegen_expect_token(p, 12)) // token=',' + && + (elem = _tmp_266_rule(p)) // starred_expression !'=' + ) + { + _res = elem; + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + PyMem_Free(_children); + p->level--; + return NULL; + } + if (_n == _children_capacity) { + _children_capacity *= 2; + void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); + if (!_new_children) { + PyMem_Free(_children); + p->error_indicator = 1; + PyErr_NoMemory(); + p->level--; + return NULL; + } + _children = _new_children; + } + _children[_n++] = _res; + _mark = p->mark; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s _loop0_152[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' (starred_expression !'=')")); + } + asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); + if (!_seq) { + PyMem_Free(_children); + p->error_indicator = 1; + PyErr_NoMemory(); + p->level--; + return NULL; + } + for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); + PyMem_Free(_children); + p->level--; + return _seq; +} + +// _gather_151: (starred_expression !'=') _loop0_152 +static asdl_seq * +_gather_151_rule(Parser *p) +{ + if (p->level++ == MAXSTACK) { + _Pypegen_stack_overflow(p); + } + if (p->error_indicator) { + p->level--; + return NULL; + } + asdl_seq * _res = NULL; + int _mark = p->mark; + { // (starred_expression !'=') _loop0_152 + if (p->error_indicator) { + p->level--; + return NULL; + } + D(fprintf(stderr, "%*c> _gather_151[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(starred_expression !'=') _loop0_152")); + void *elem; + asdl_seq * seq; + if ( + (elem = _tmp_266_rule(p)) // starred_expression !'=' + && + (seq = _loop0_152_rule(p)) // _loop0_152 + ) + { + D(fprintf(stderr, "%*c+ _gather_151[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "(starred_expression !'=') _loop0_152")); + _res = _PyPegen_seq_insert_in_front(p, elem, seq); + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s _gather_151[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(starred_expression !'=') _loop0_152")); + } + _res = NULL; + done: + p->level--; + return _res; +} + +// _tmp_153: args | expression for_if_clauses static void * -_tmp_151_rule(Parser *p) +_tmp_153_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -34234,18 +34381,18 @@ _tmp_151_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_151[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "args")); + D(fprintf(stderr, "%*c> _tmp_153[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "args")); expr_ty args_var; if ( (args_var = args_rule(p)) // args ) { - D(fprintf(stderr, "%*c+ _tmp_151[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "args")); + D(fprintf(stderr, "%*c+ _tmp_153[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "args")); _res = args_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_151[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_153[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "args")); } { // expression for_if_clauses @@ -34253,7 +34400,7 @@ _tmp_151_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_151[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression for_if_clauses")); + D(fprintf(stderr, "%*c> _tmp_153[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression for_if_clauses")); expr_ty expression_var; asdl_comprehension_seq* for_if_clauses_var; if ( @@ -34262,12 +34409,12 @@ _tmp_151_rule(Parser *p) (for_if_clauses_var = for_if_clauses_rule(p)) // for_if_clauses ) { - D(fprintf(stderr, "%*c+ _tmp_151[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression for_if_clauses")); + D(fprintf(stderr, "%*c+ _tmp_153[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression for_if_clauses")); _res = _PyPegen_dummy_name(p, expression_var, for_if_clauses_var); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_151[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_153[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression for_if_clauses")); } _res = NULL; @@ -34276,9 +34423,9 @@ _tmp_151_rule(Parser *p) return _res; } -// _tmp_152: args ',' +// _tmp_154: args ',' static void * -_tmp_152_rule(Parser *p) +_tmp_154_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -34294,7 +34441,7 @@ _tmp_152_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_152[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "args ','")); + D(fprintf(stderr, "%*c> _tmp_154[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "args ','")); Token * _literal; expr_ty args_var; if ( @@ -34303,12 +34450,12 @@ _tmp_152_rule(Parser *p) (_literal = _PyPegen_expect_token(p, 12)) // token=',' ) { - D(fprintf(stderr, "%*c+ _tmp_152[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "args ','")); + D(fprintf(stderr, "%*c+ _tmp_154[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "args ','")); _res = _PyPegen_dummy_name(p, args_var, _literal); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_152[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_154[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "args ','")); } _res = NULL; @@ -34317,9 +34464,9 @@ _tmp_152_rule(Parser *p) return _res; } -// _tmp_153: ',' | ')' +// _tmp_155: ',' | ')' static void * -_tmp_153_rule(Parser *p) +_tmp_155_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -34335,18 +34482,18 @@ _tmp_153_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_153[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','")); + D(fprintf(stderr, "%*c> _tmp_155[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' ) { - D(fprintf(stderr, "%*c+ _tmp_153[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','")); + D(fprintf(stderr, "%*c+ _tmp_155[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_153[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_155[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','")); } { // ')' @@ -34354,18 +34501,18 @@ _tmp_153_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_153[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "')'")); + D(fprintf(stderr, "%*c> _tmp_155[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "')'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 8)) // token=')' ) { - D(fprintf(stderr, "%*c+ _tmp_153[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "')'")); + D(fprintf(stderr, "%*c+ _tmp_155[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "')'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_153[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_155[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "')'")); } _res = NULL; @@ -34374,9 +34521,9 @@ _tmp_153_rule(Parser *p) return _res; } -// _tmp_154: 'True' | 'False' | 'None' +// _tmp_156: 'True' | 'False' | 'None' static void * -_tmp_154_rule(Parser *p) +_tmp_156_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -34392,18 +34539,18 @@ _tmp_154_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_154[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'True'")); + D(fprintf(stderr, "%*c> _tmp_156[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'True'")); Token * _keyword; if ( (_keyword = _PyPegen_expect_token(p, 601)) // token='True' ) { - D(fprintf(stderr, "%*c+ _tmp_154[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'True'")); + D(fprintf(stderr, "%*c+ _tmp_156[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'True'")); _res = _keyword; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_154[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_156[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'True'")); } { // 'False' @@ -34411,18 +34558,18 @@ _tmp_154_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_154[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'False'")); + D(fprintf(stderr, "%*c> _tmp_156[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'False'")); Token * _keyword; if ( (_keyword = _PyPegen_expect_token(p, 603)) // token='False' ) { - D(fprintf(stderr, "%*c+ _tmp_154[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'False'")); + D(fprintf(stderr, "%*c+ _tmp_156[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'False'")); _res = _keyword; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_154[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_156[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'False'")); } { // 'None' @@ -34430,18 +34577,18 @@ _tmp_154_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_154[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'None'")); + D(fprintf(stderr, "%*c> _tmp_156[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'None'")); Token * _keyword; if ( (_keyword = _PyPegen_expect_token(p, 602)) // token='None' ) { - D(fprintf(stderr, "%*c+ _tmp_154[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'None'")); + D(fprintf(stderr, "%*c+ _tmp_156[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'None'")); _res = _keyword; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_154[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_156[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'None'")); } _res = NULL; @@ -34450,9 +34597,9 @@ _tmp_154_rule(Parser *p) return _res; } -// _tmp_155: NAME '=' +// _tmp_157: NAME '=' static void * -_tmp_155_rule(Parser *p) +_tmp_157_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -34468,7 +34615,7 @@ _tmp_155_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_155[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME '='")); + D(fprintf(stderr, "%*c> _tmp_157[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME '='")); Token * _literal; expr_ty name_var; if ( @@ -34477,12 +34624,12 @@ _tmp_155_rule(Parser *p) (_literal = _PyPegen_expect_token(p, 22)) // token='=' ) { - D(fprintf(stderr, "%*c+ _tmp_155[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME '='")); + D(fprintf(stderr, "%*c+ _tmp_157[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME '='")); _res = _PyPegen_dummy_name(p, name_var, _literal); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_155[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_157[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NAME '='")); } _res = NULL; @@ -34491,9 +34638,9 @@ _tmp_155_rule(Parser *p) return _res; } -// _tmp_156: NAME STRING | SOFT_KEYWORD +// _tmp_158: NAME STRING | SOFT_KEYWORD static void * -_tmp_156_rule(Parser *p) +_tmp_158_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -34509,7 +34656,7 @@ _tmp_156_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_156[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME STRING")); + D(fprintf(stderr, "%*c> _tmp_158[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME STRING")); expr_ty name_var; expr_ty string_var; if ( @@ -34518,12 +34665,12 @@ _tmp_156_rule(Parser *p) (string_var = _PyPegen_string_token(p)) // STRING ) { - D(fprintf(stderr, "%*c+ _tmp_156[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME STRING")); + D(fprintf(stderr, "%*c+ _tmp_158[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME STRING")); _res = _PyPegen_dummy_name(p, name_var, string_var); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_156[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_158[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NAME STRING")); } { // SOFT_KEYWORD @@ -34531,18 +34678,18 @@ _tmp_156_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_156[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "SOFT_KEYWORD")); + D(fprintf(stderr, "%*c> _tmp_158[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "SOFT_KEYWORD")); expr_ty soft_keyword_var; if ( (soft_keyword_var = _PyPegen_soft_keyword_token(p)) // SOFT_KEYWORD ) { - D(fprintf(stderr, "%*c+ _tmp_156[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "SOFT_KEYWORD")); + D(fprintf(stderr, "%*c+ _tmp_158[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "SOFT_KEYWORD")); _res = soft_keyword_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_156[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_158[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "SOFT_KEYWORD")); } _res = NULL; @@ -34551,9 +34698,9 @@ _tmp_156_rule(Parser *p) return _res; } -// _tmp_157: 'else' | ':' +// _tmp_159: 'else' | ':' static void * -_tmp_157_rule(Parser *p) +_tmp_159_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -34569,18 +34716,18 @@ _tmp_157_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_157[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'else'")); + D(fprintf(stderr, "%*c> _tmp_159[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'else'")); Token * _keyword; if ( (_keyword = _PyPegen_expect_token(p, 645)) // token='else' ) { - D(fprintf(stderr, "%*c+ _tmp_157[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'else'")); + D(fprintf(stderr, "%*c+ _tmp_159[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'else'")); _res = _keyword; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_157[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_159[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'else'")); } { // ':' @@ -34588,18 +34735,18 @@ _tmp_157_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_157[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':'")); + D(fprintf(stderr, "%*c> _tmp_159[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 11)) // token=':' ) { - D(fprintf(stderr, "%*c+ _tmp_157[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':'")); + D(fprintf(stderr, "%*c+ _tmp_159[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_157[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_159[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "':'")); } _res = NULL; @@ -34608,9 +34755,9 @@ _tmp_157_rule(Parser *p) return _res; } -// _tmp_158: '=' | ':=' +// _tmp_160: '=' | ':=' static void * -_tmp_158_rule(Parser *p) +_tmp_160_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -34626,18 +34773,18 @@ _tmp_158_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_158[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'='")); + D(fprintf(stderr, "%*c> _tmp_160[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'='")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 22)) // token='=' ) { - D(fprintf(stderr, "%*c+ _tmp_158[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'='")); + D(fprintf(stderr, "%*c+ _tmp_160[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'='")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_158[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_160[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'='")); } { // ':=' @@ -34645,18 +34792,18 @@ _tmp_158_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_158[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':='")); + D(fprintf(stderr, "%*c> _tmp_160[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':='")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 53)) // token=':=' ) { - D(fprintf(stderr, "%*c+ _tmp_158[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':='")); + D(fprintf(stderr, "%*c+ _tmp_160[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':='")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_158[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_160[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "':='")); } _res = NULL; @@ -34665,9 +34812,9 @@ _tmp_158_rule(Parser *p) return _res; } -// _tmp_159: list | tuple | genexp | 'True' | 'None' | 'False' +// _tmp_161: list | tuple | genexp | 'True' | 'None' | 'False' static void * -_tmp_159_rule(Parser *p) +_tmp_161_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -34683,18 +34830,18 @@ _tmp_159_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_159[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "list")); + D(fprintf(stderr, "%*c> _tmp_161[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "list")); expr_ty list_var; if ( (list_var = list_rule(p)) // list ) { - D(fprintf(stderr, "%*c+ _tmp_159[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "list")); + D(fprintf(stderr, "%*c+ _tmp_161[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "list")); _res = list_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_159[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_161[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "list")); } { // tuple @@ -34702,18 +34849,18 @@ _tmp_159_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_159[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "tuple")); + D(fprintf(stderr, "%*c> _tmp_161[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "tuple")); expr_ty tuple_var; if ( (tuple_var = tuple_rule(p)) // tuple ) { - D(fprintf(stderr, "%*c+ _tmp_159[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "tuple")); + D(fprintf(stderr, "%*c+ _tmp_161[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "tuple")); _res = tuple_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_159[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_161[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "tuple")); } { // genexp @@ -34721,18 +34868,18 @@ _tmp_159_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_159[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "genexp")); + D(fprintf(stderr, "%*c> _tmp_161[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "genexp")); expr_ty genexp_var; if ( (genexp_var = genexp_rule(p)) // genexp ) { - D(fprintf(stderr, "%*c+ _tmp_159[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "genexp")); + D(fprintf(stderr, "%*c+ _tmp_161[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "genexp")); _res = genexp_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_159[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_161[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "genexp")); } { // 'True' @@ -34740,18 +34887,18 @@ _tmp_159_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_159[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'True'")); + D(fprintf(stderr, "%*c> _tmp_161[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'True'")); Token * _keyword; if ( (_keyword = _PyPegen_expect_token(p, 601)) // token='True' ) { - D(fprintf(stderr, "%*c+ _tmp_159[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'True'")); + D(fprintf(stderr, "%*c+ _tmp_161[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'True'")); _res = _keyword; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_159[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_161[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'True'")); } { // 'None' @@ -34759,18 +34906,18 @@ _tmp_159_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_159[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'None'")); + D(fprintf(stderr, "%*c> _tmp_161[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'None'")); Token * _keyword; if ( (_keyword = _PyPegen_expect_token(p, 602)) // token='None' ) { - D(fprintf(stderr, "%*c+ _tmp_159[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'None'")); + D(fprintf(stderr, "%*c+ _tmp_161[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'None'")); _res = _keyword; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_159[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_161[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'None'")); } { // 'False' @@ -34778,18 +34925,18 @@ _tmp_159_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_159[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'False'")); + D(fprintf(stderr, "%*c> _tmp_161[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'False'")); Token * _keyword; if ( (_keyword = _PyPegen_expect_token(p, 603)) // token='False' ) { - D(fprintf(stderr, "%*c+ _tmp_159[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'False'")); + D(fprintf(stderr, "%*c+ _tmp_161[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'False'")); _res = _keyword; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_159[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_161[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'False'")); } _res = NULL; @@ -34798,9 +34945,9 @@ _tmp_159_rule(Parser *p) return _res; } -// _tmp_160: '=' | ':=' +// _tmp_162: '=' | ':=' static void * -_tmp_160_rule(Parser *p) +_tmp_162_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -34816,18 +34963,18 @@ _tmp_160_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_160[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'='")); + D(fprintf(stderr, "%*c> _tmp_162[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'='")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 22)) // token='=' ) { - D(fprintf(stderr, "%*c+ _tmp_160[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'='")); + D(fprintf(stderr, "%*c+ _tmp_162[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'='")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_160[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_162[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'='")); } { // ':=' @@ -34835,18 +34982,18 @@ _tmp_160_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_160[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':='")); + D(fprintf(stderr, "%*c> _tmp_162[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':='")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 53)) // token=':=' ) { - D(fprintf(stderr, "%*c+ _tmp_160[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':='")); + D(fprintf(stderr, "%*c+ _tmp_162[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':='")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_160[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_162[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "':='")); } _res = NULL; @@ -34855,9 +35002,9 @@ _tmp_160_rule(Parser *p) return _res; } -// _loop0_161: star_named_expressions +// _loop0_163: star_named_expressions static asdl_seq * -_loop0_161_rule(Parser *p) +_loop0_163_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -34882,7 +35029,7 @@ _loop0_161_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_161[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_named_expressions")); + D(fprintf(stderr, "%*c> _loop0_163[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_named_expressions")); asdl_expr_seq* star_named_expressions_var; while ( (star_named_expressions_var = star_named_expressions_rule(p)) // star_named_expressions @@ -34905,7 +35052,7 @@ _loop0_161_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_161[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_163[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_named_expressions")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -34922,9 +35069,9 @@ _loop0_161_rule(Parser *p) return _seq; } -// _loop0_162: (star_targets '=') +// _loop0_164: (star_targets '=') static asdl_seq * -_loop0_162_rule(Parser *p) +_loop0_164_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -34949,13 +35096,13 @@ _loop0_162_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_162[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(star_targets '=')")); - void *_tmp_264_var; + D(fprintf(stderr, "%*c> _loop0_164[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(star_targets '=')")); + void *_tmp_267_var; while ( - (_tmp_264_var = _tmp_264_rule(p)) // star_targets '=' + (_tmp_267_var = _tmp_267_rule(p)) // star_targets '=' ) { - _res = _tmp_264_var; + _res = _tmp_267_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -34972,7 +35119,7 @@ _loop0_162_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_162[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_164[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(star_targets '=')")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -34989,9 +35136,9 @@ _loop0_162_rule(Parser *p) return _seq; } -// _loop0_163: (star_targets '=') +// _loop0_165: (star_targets '=') static asdl_seq * -_loop0_163_rule(Parser *p) +_loop0_165_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -35016,13 +35163,13 @@ _loop0_163_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_163[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(star_targets '=')")); - void *_tmp_265_var; + D(fprintf(stderr, "%*c> _loop0_165[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(star_targets '=')")); + void *_tmp_268_var; while ( - (_tmp_265_var = _tmp_265_rule(p)) // star_targets '=' + (_tmp_268_var = _tmp_268_rule(p)) // star_targets '=' ) { - _res = _tmp_265_var; + _res = _tmp_268_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -35039,7 +35186,7 @@ _loop0_163_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_163[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_165[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(star_targets '=')")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -35056,9 +35203,9 @@ _loop0_163_rule(Parser *p) return _seq; } -// _tmp_164: yield_expr | star_expressions +// _tmp_166: yield_expr | star_expressions static void * -_tmp_164_rule(Parser *p) +_tmp_166_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -35074,18 +35221,18 @@ _tmp_164_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_164[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "yield_expr")); + D(fprintf(stderr, "%*c> _tmp_166[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "yield_expr")); expr_ty yield_expr_var; if ( (yield_expr_var = yield_expr_rule(p)) // yield_expr ) { - D(fprintf(stderr, "%*c+ _tmp_164[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "yield_expr")); + D(fprintf(stderr, "%*c+ _tmp_166[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "yield_expr")); _res = yield_expr_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_164[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_166[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "yield_expr")); } { // star_expressions @@ -35093,18 +35240,18 @@ _tmp_164_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_164[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_expressions")); + D(fprintf(stderr, "%*c> _tmp_166[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_expressions")); expr_ty star_expressions_var; if ( (star_expressions_var = star_expressions_rule(p)) // star_expressions ) { - D(fprintf(stderr, "%*c+ _tmp_164[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_expressions")); + D(fprintf(stderr, "%*c+ _tmp_166[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_expressions")); _res = star_expressions_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_164[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_166[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_expressions")); } _res = NULL; @@ -35113,9 +35260,9 @@ _tmp_164_rule(Parser *p) return _res; } -// _tmp_165: '[' | '(' | '{' +// _tmp_167: '[' | '(' | '{' static void * -_tmp_165_rule(Parser *p) +_tmp_167_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -35131,18 +35278,18 @@ _tmp_165_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_165[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'['")); + D(fprintf(stderr, "%*c> _tmp_167[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'['")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 9)) // token='[' ) { - D(fprintf(stderr, "%*c+ _tmp_165[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'['")); + D(fprintf(stderr, "%*c+ _tmp_167[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'['")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_165[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_167[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'['")); } { // '(' @@ -35150,18 +35297,18 @@ _tmp_165_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_165[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'('")); + D(fprintf(stderr, "%*c> _tmp_167[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'('")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 7)) // token='(' ) { - D(fprintf(stderr, "%*c+ _tmp_165[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'('")); + D(fprintf(stderr, "%*c+ _tmp_167[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'('")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_165[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_167[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'('")); } { // '{' @@ -35169,18 +35316,18 @@ _tmp_165_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_165[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{'")); + D(fprintf(stderr, "%*c> _tmp_167[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 25)) // token='{' ) { - D(fprintf(stderr, "%*c+ _tmp_165[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{'")); + D(fprintf(stderr, "%*c+ _tmp_167[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_165[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_167[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{'")); } _res = NULL; @@ -35189,9 +35336,9 @@ _tmp_165_rule(Parser *p) return _res; } -// _tmp_166: '[' | '{' +// _tmp_168: '[' | '{' static void * -_tmp_166_rule(Parser *p) +_tmp_168_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -35207,18 +35354,18 @@ _tmp_166_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_166[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'['")); + D(fprintf(stderr, "%*c> _tmp_168[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'['")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 9)) // token='[' ) { - D(fprintf(stderr, "%*c+ _tmp_166[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'['")); + D(fprintf(stderr, "%*c+ _tmp_168[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'['")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_166[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_168[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'['")); } { // '{' @@ -35226,18 +35373,18 @@ _tmp_166_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_166[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{'")); + D(fprintf(stderr, "%*c> _tmp_168[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 25)) // token='{' ) { - D(fprintf(stderr, "%*c+ _tmp_166[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{'")); + D(fprintf(stderr, "%*c+ _tmp_168[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_166[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_168[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{'")); } _res = NULL; @@ -35246,9 +35393,9 @@ _tmp_166_rule(Parser *p) return _res; } -// _tmp_167: '[' | '{' +// _tmp_169: '[' | '{' static void * -_tmp_167_rule(Parser *p) +_tmp_169_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -35264,18 +35411,18 @@ _tmp_167_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_167[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'['")); + D(fprintf(stderr, "%*c> _tmp_169[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'['")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 9)) // token='[' ) { - D(fprintf(stderr, "%*c+ _tmp_167[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'['")); + D(fprintf(stderr, "%*c+ _tmp_169[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'['")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_167[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_169[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'['")); } { // '{' @@ -35283,18 +35430,18 @@ _tmp_167_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_167[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{'")); + D(fprintf(stderr, "%*c> _tmp_169[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 25)) // token='{' ) { - D(fprintf(stderr, "%*c+ _tmp_167[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{'")); + D(fprintf(stderr, "%*c+ _tmp_169[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_167[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_169[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{'")); } _res = NULL; @@ -35303,9 +35450,9 @@ _tmp_167_rule(Parser *p) return _res; } -// _tmp_168: slash_no_default | slash_with_default +// _tmp_170: slash_no_default | slash_with_default static void * -_tmp_168_rule(Parser *p) +_tmp_170_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -35321,18 +35468,18 @@ _tmp_168_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_168[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "slash_no_default")); + D(fprintf(stderr, "%*c> _tmp_170[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "slash_no_default")); asdl_arg_seq* slash_no_default_var; if ( (slash_no_default_var = slash_no_default_rule(p)) // slash_no_default ) { - D(fprintf(stderr, "%*c+ _tmp_168[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "slash_no_default")); + D(fprintf(stderr, "%*c+ _tmp_170[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "slash_no_default")); _res = slash_no_default_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_168[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_170[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "slash_no_default")); } { // slash_with_default @@ -35340,18 +35487,18 @@ _tmp_168_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_168[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "slash_with_default")); + D(fprintf(stderr, "%*c> _tmp_170[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "slash_with_default")); SlashWithDefault* slash_with_default_var; if ( (slash_with_default_var = slash_with_default_rule(p)) // slash_with_default ) { - D(fprintf(stderr, "%*c+ _tmp_168[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "slash_with_default")); + D(fprintf(stderr, "%*c+ _tmp_170[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "slash_with_default")); _res = slash_with_default_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_168[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_170[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "slash_with_default")); } _res = NULL; @@ -35360,9 +35507,9 @@ _tmp_168_rule(Parser *p) return _res; } -// _loop0_169: param_maybe_default +// _loop0_171: param_maybe_default static asdl_seq * -_loop0_169_rule(Parser *p) +_loop0_171_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -35387,7 +35534,7 @@ _loop0_169_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_169[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_maybe_default")); + D(fprintf(stderr, "%*c> _loop0_171[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_maybe_default")); NameDefaultPair* param_maybe_default_var; while ( (param_maybe_default_var = param_maybe_default_rule(p)) // param_maybe_default @@ -35410,7 +35557,7 @@ _loop0_169_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_169[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_171[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_maybe_default")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -35427,9 +35574,9 @@ _loop0_169_rule(Parser *p) return _seq; } -// _loop0_170: param_no_default +// _loop0_172: param_no_default static asdl_seq * -_loop0_170_rule(Parser *p) +_loop0_172_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -35454,7 +35601,7 @@ _loop0_170_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_170[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default")); + D(fprintf(stderr, "%*c> _loop0_172[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default")); arg_ty param_no_default_var; while ( (param_no_default_var = param_no_default_rule(p)) // param_no_default @@ -35477,7 +35624,7 @@ _loop0_170_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_170[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_172[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_no_default")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -35494,9 +35641,9 @@ _loop0_170_rule(Parser *p) return _seq; } -// _loop0_171: param_no_default +// _loop0_173: param_no_default static asdl_seq * -_loop0_171_rule(Parser *p) +_loop0_173_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -35521,7 +35668,7 @@ _loop0_171_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_171[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default")); + D(fprintf(stderr, "%*c> _loop0_173[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default")); arg_ty param_no_default_var; while ( (param_no_default_var = param_no_default_rule(p)) // param_no_default @@ -35544,7 +35691,7 @@ _loop0_171_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_171[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_173[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_no_default")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -35561,9 +35708,9 @@ _loop0_171_rule(Parser *p) return _seq; } -// _loop1_172: param_no_default +// _loop1_174: param_no_default static asdl_seq * -_loop1_172_rule(Parser *p) +_loop1_174_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -35588,7 +35735,7 @@ _loop1_172_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop1_172[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default")); + D(fprintf(stderr, "%*c> _loop1_174[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default")); arg_ty param_no_default_var; while ( (param_no_default_var = param_no_default_rule(p)) // param_no_default @@ -35611,7 +35758,7 @@ _loop1_172_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop1_172[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop1_174[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_no_default")); } if (_n == 0 || p->error_indicator) { @@ -35633,9 +35780,9 @@ _loop1_172_rule(Parser *p) return _seq; } -// _tmp_173: slash_no_default | slash_with_default +// _tmp_175: slash_no_default | slash_with_default static void * -_tmp_173_rule(Parser *p) +_tmp_175_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -35651,18 +35798,18 @@ _tmp_173_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_173[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "slash_no_default")); + D(fprintf(stderr, "%*c> _tmp_175[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "slash_no_default")); asdl_arg_seq* slash_no_default_var; if ( (slash_no_default_var = slash_no_default_rule(p)) // slash_no_default ) { - D(fprintf(stderr, "%*c+ _tmp_173[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "slash_no_default")); + D(fprintf(stderr, "%*c+ _tmp_175[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "slash_no_default")); _res = slash_no_default_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_173[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_175[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "slash_no_default")); } { // slash_with_default @@ -35670,18 +35817,18 @@ _tmp_173_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_173[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "slash_with_default")); + D(fprintf(stderr, "%*c> _tmp_175[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "slash_with_default")); SlashWithDefault* slash_with_default_var; if ( (slash_with_default_var = slash_with_default_rule(p)) // slash_with_default ) { - D(fprintf(stderr, "%*c+ _tmp_173[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "slash_with_default")); + D(fprintf(stderr, "%*c+ _tmp_175[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "slash_with_default")); _res = slash_with_default_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_173[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_175[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "slash_with_default")); } _res = NULL; @@ -35690,9 +35837,9 @@ _tmp_173_rule(Parser *p) return _res; } -// _loop0_174: param_maybe_default +// _loop0_176: param_maybe_default static asdl_seq * -_loop0_174_rule(Parser *p) +_loop0_176_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -35717,7 +35864,7 @@ _loop0_174_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_174[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_maybe_default")); + D(fprintf(stderr, "%*c> _loop0_176[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_maybe_default")); NameDefaultPair* param_maybe_default_var; while ( (param_maybe_default_var = param_maybe_default_rule(p)) // param_maybe_default @@ -35740,7 +35887,7 @@ _loop0_174_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_174[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_176[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_maybe_default")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -35757,9 +35904,9 @@ _loop0_174_rule(Parser *p) return _seq; } -// _tmp_175: ',' | param_no_default +// _tmp_177: ',' | param_no_default static void * -_tmp_175_rule(Parser *p) +_tmp_177_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -35775,18 +35922,18 @@ _tmp_175_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_175[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','")); + D(fprintf(stderr, "%*c> _tmp_177[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' ) { - D(fprintf(stderr, "%*c+ _tmp_175[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','")); + D(fprintf(stderr, "%*c+ _tmp_177[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_175[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_177[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','")); } { // param_no_default @@ -35794,18 +35941,18 @@ _tmp_175_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_175[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default")); + D(fprintf(stderr, "%*c> _tmp_177[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default")); arg_ty param_no_default_var; if ( (param_no_default_var = param_no_default_rule(p)) // param_no_default ) { - D(fprintf(stderr, "%*c+ _tmp_175[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "param_no_default")); + D(fprintf(stderr, "%*c+ _tmp_177[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "param_no_default")); _res = param_no_default_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_175[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_177[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_no_default")); } _res = NULL; @@ -35814,9 +35961,9 @@ _tmp_175_rule(Parser *p) return _res; } -// _loop0_176: param_maybe_default +// _loop0_178: param_maybe_default static asdl_seq * -_loop0_176_rule(Parser *p) +_loop0_178_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -35841,7 +35988,7 @@ _loop0_176_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_176[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_maybe_default")); + D(fprintf(stderr, "%*c> _loop0_178[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_maybe_default")); NameDefaultPair* param_maybe_default_var; while ( (param_maybe_default_var = param_maybe_default_rule(p)) // param_maybe_default @@ -35864,7 +36011,7 @@ _loop0_176_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_176[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_178[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_maybe_default")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -35881,9 +36028,9 @@ _loop0_176_rule(Parser *p) return _seq; } -// _loop1_177: param_maybe_default +// _loop1_179: param_maybe_default static asdl_seq * -_loop1_177_rule(Parser *p) +_loop1_179_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -35908,7 +36055,7 @@ _loop1_177_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop1_177[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_maybe_default")); + D(fprintf(stderr, "%*c> _loop1_179[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_maybe_default")); NameDefaultPair* param_maybe_default_var; while ( (param_maybe_default_var = param_maybe_default_rule(p)) // param_maybe_default @@ -35931,7 +36078,7 @@ _loop1_177_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop1_177[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop1_179[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_maybe_default")); } if (_n == 0 || p->error_indicator) { @@ -35953,9 +36100,9 @@ _loop1_177_rule(Parser *p) return _seq; } -// _tmp_178: ')' | ',' +// _tmp_180: ')' | ',' static void * -_tmp_178_rule(Parser *p) +_tmp_180_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -35971,18 +36118,18 @@ _tmp_178_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_178[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "')'")); + D(fprintf(stderr, "%*c> _tmp_180[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "')'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 8)) // token=')' ) { - D(fprintf(stderr, "%*c+ _tmp_178[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "')'")); + D(fprintf(stderr, "%*c+ _tmp_180[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "')'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_178[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_180[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "')'")); } { // ',' @@ -35990,18 +36137,18 @@ _tmp_178_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_178[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','")); + D(fprintf(stderr, "%*c> _tmp_180[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' ) { - D(fprintf(stderr, "%*c+ _tmp_178[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','")); + D(fprintf(stderr, "%*c+ _tmp_180[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_178[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_180[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','")); } _res = NULL; @@ -36010,9 +36157,9 @@ _tmp_178_rule(Parser *p) return _res; } -// _tmp_179: ')' | ',' (')' | '**') +// _tmp_181: ')' | ',' (')' | '**') static void * -_tmp_179_rule(Parser *p) +_tmp_181_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -36028,18 +36175,18 @@ _tmp_179_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_179[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "')'")); + D(fprintf(stderr, "%*c> _tmp_181[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "')'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 8)) // token=')' ) { - D(fprintf(stderr, "%*c+ _tmp_179[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "')'")); + D(fprintf(stderr, "%*c+ _tmp_181[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "')'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_179[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_181[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "')'")); } { // ',' (')' | '**') @@ -36047,21 +36194,21 @@ _tmp_179_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_179[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (')' | '**')")); + D(fprintf(stderr, "%*c> _tmp_181[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (')' | '**')")); Token * _literal; - void *_tmp_266_var; + void *_tmp_269_var; if ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' && - (_tmp_266_var = _tmp_266_rule(p)) // ')' | '**' + (_tmp_269_var = _tmp_269_rule(p)) // ')' | '**' ) { - D(fprintf(stderr, "%*c+ _tmp_179[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' (')' | '**')")); - _res = _PyPegen_dummy_name(p, _literal, _tmp_266_var); + D(fprintf(stderr, "%*c+ _tmp_181[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' (')' | '**')")); + _res = _PyPegen_dummy_name(p, _literal, _tmp_269_var); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_179[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_181[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' (')' | '**')")); } _res = NULL; @@ -36070,9 +36217,9 @@ _tmp_179_rule(Parser *p) return _res; } -// _tmp_180: param_no_default | ',' +// _tmp_182: param_no_default | ',' static void * -_tmp_180_rule(Parser *p) +_tmp_182_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -36088,18 +36235,18 @@ _tmp_180_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_180[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default")); + D(fprintf(stderr, "%*c> _tmp_182[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default")); arg_ty param_no_default_var; if ( (param_no_default_var = param_no_default_rule(p)) // param_no_default ) { - D(fprintf(stderr, "%*c+ _tmp_180[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "param_no_default")); + D(fprintf(stderr, "%*c+ _tmp_182[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "param_no_default")); _res = param_no_default_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_180[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_182[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_no_default")); } { // ',' @@ -36107,18 +36254,18 @@ _tmp_180_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_180[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','")); + D(fprintf(stderr, "%*c> _tmp_182[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' ) { - D(fprintf(stderr, "%*c+ _tmp_180[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','")); + D(fprintf(stderr, "%*c+ _tmp_182[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_180[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_182[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','")); } _res = NULL; @@ -36127,9 +36274,9 @@ _tmp_180_rule(Parser *p) return _res; } -// _loop0_181: param_maybe_default +// _loop0_183: param_maybe_default static asdl_seq * -_loop0_181_rule(Parser *p) +_loop0_183_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -36154,7 +36301,7 @@ _loop0_181_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_181[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_maybe_default")); + D(fprintf(stderr, "%*c> _loop0_183[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_maybe_default")); NameDefaultPair* param_maybe_default_var; while ( (param_maybe_default_var = param_maybe_default_rule(p)) // param_maybe_default @@ -36177,7 +36324,7 @@ _loop0_181_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_181[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_183[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_maybe_default")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -36194,9 +36341,9 @@ _loop0_181_rule(Parser *p) return _seq; } -// _tmp_182: param_no_default | ',' +// _tmp_184: param_no_default | ',' static void * -_tmp_182_rule(Parser *p) +_tmp_184_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -36212,18 +36359,18 @@ _tmp_182_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_182[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default")); + D(fprintf(stderr, "%*c> _tmp_184[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default")); arg_ty param_no_default_var; if ( (param_no_default_var = param_no_default_rule(p)) // param_no_default ) { - D(fprintf(stderr, "%*c+ _tmp_182[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "param_no_default")); + D(fprintf(stderr, "%*c+ _tmp_184[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "param_no_default")); _res = param_no_default_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_182[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_184[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_no_default")); } { // ',' @@ -36231,18 +36378,18 @@ _tmp_182_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_182[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','")); + D(fprintf(stderr, "%*c> _tmp_184[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' ) { - D(fprintf(stderr, "%*c+ _tmp_182[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','")); + D(fprintf(stderr, "%*c+ _tmp_184[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_182[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_184[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','")); } _res = NULL; @@ -36251,9 +36398,9 @@ _tmp_182_rule(Parser *p) return _res; } -// _tmp_183: '*' | '**' | '/' +// _tmp_185: '*' | '**' | '/' static void * -_tmp_183_rule(Parser *p) +_tmp_185_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -36269,18 +36416,18 @@ _tmp_183_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_183[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*'")); + D(fprintf(stderr, "%*c> _tmp_185[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 16)) // token='*' ) { - D(fprintf(stderr, "%*c+ _tmp_183[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*'")); + D(fprintf(stderr, "%*c+ _tmp_185[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_183[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_185[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'*'")); } { // '**' @@ -36288,18 +36435,18 @@ _tmp_183_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_183[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**'")); + D(fprintf(stderr, "%*c> _tmp_185[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 35)) // token='**' ) { - D(fprintf(stderr, "%*c+ _tmp_183[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**'")); + D(fprintf(stderr, "%*c+ _tmp_185[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_183[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_185[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'**'")); } { // '/' @@ -36307,18 +36454,18 @@ _tmp_183_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_183[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'/'")); + D(fprintf(stderr, "%*c> _tmp_185[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'/'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 17)) // token='/' ) { - D(fprintf(stderr, "%*c+ _tmp_183[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'/'")); + D(fprintf(stderr, "%*c+ _tmp_185[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'/'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_183[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_185[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'/'")); } _res = NULL; @@ -36327,9 +36474,9 @@ _tmp_183_rule(Parser *p) return _res; } -// _loop1_184: param_with_default +// _loop1_186: param_with_default static asdl_seq * -_loop1_184_rule(Parser *p) +_loop1_186_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -36354,7 +36501,7 @@ _loop1_184_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop1_184[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_with_default")); + D(fprintf(stderr, "%*c> _loop1_186[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_with_default")); NameDefaultPair* param_with_default_var; while ( (param_with_default_var = param_with_default_rule(p)) // param_with_default @@ -36377,7 +36524,7 @@ _loop1_184_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop1_184[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop1_186[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_with_default")); } if (_n == 0 || p->error_indicator) { @@ -36399,9 +36546,9 @@ _loop1_184_rule(Parser *p) return _seq; } -// _tmp_185: lambda_slash_no_default | lambda_slash_with_default +// _tmp_187: lambda_slash_no_default | lambda_slash_with_default static void * -_tmp_185_rule(Parser *p) +_tmp_187_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -36417,18 +36564,18 @@ _tmp_185_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_185[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_slash_no_default")); + D(fprintf(stderr, "%*c> _tmp_187[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_slash_no_default")); asdl_arg_seq* lambda_slash_no_default_var; if ( (lambda_slash_no_default_var = lambda_slash_no_default_rule(p)) // lambda_slash_no_default ) { - D(fprintf(stderr, "%*c+ _tmp_185[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_slash_no_default")); + D(fprintf(stderr, "%*c+ _tmp_187[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_slash_no_default")); _res = lambda_slash_no_default_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_185[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_187[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_slash_no_default")); } { // lambda_slash_with_default @@ -36436,18 +36583,18 @@ _tmp_185_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_185[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_slash_with_default")); + D(fprintf(stderr, "%*c> _tmp_187[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_slash_with_default")); SlashWithDefault* lambda_slash_with_default_var; if ( (lambda_slash_with_default_var = lambda_slash_with_default_rule(p)) // lambda_slash_with_default ) { - D(fprintf(stderr, "%*c+ _tmp_185[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_slash_with_default")); + D(fprintf(stderr, "%*c+ _tmp_187[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_slash_with_default")); _res = lambda_slash_with_default_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_185[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_187[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_slash_with_default")); } _res = NULL; @@ -36456,9 +36603,9 @@ _tmp_185_rule(Parser *p) return _res; } -// _loop0_186: lambda_param_maybe_default +// _loop0_188: lambda_param_maybe_default static asdl_seq * -_loop0_186_rule(Parser *p) +_loop0_188_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -36483,7 +36630,7 @@ _loop0_186_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_186[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_maybe_default")); + D(fprintf(stderr, "%*c> _loop0_188[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_maybe_default")); NameDefaultPair* lambda_param_maybe_default_var; while ( (lambda_param_maybe_default_var = lambda_param_maybe_default_rule(p)) // lambda_param_maybe_default @@ -36506,7 +36653,7 @@ _loop0_186_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_186[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_188[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_maybe_default")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -36523,9 +36670,9 @@ _loop0_186_rule(Parser *p) return _seq; } -// _loop0_187: lambda_param_no_default +// _loop0_189: lambda_param_no_default static asdl_seq * -_loop0_187_rule(Parser *p) +_loop0_189_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -36550,7 +36697,7 @@ _loop0_187_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_187[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default")); + D(fprintf(stderr, "%*c> _loop0_189[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default")); arg_ty lambda_param_no_default_var; while ( (lambda_param_no_default_var = lambda_param_no_default_rule(p)) // lambda_param_no_default @@ -36573,7 +36720,7 @@ _loop0_187_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_187[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_189[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_no_default")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -36590,9 +36737,9 @@ _loop0_187_rule(Parser *p) return _seq; } -// _loop0_188: lambda_param_no_default +// _loop0_190: lambda_param_no_default static asdl_seq * -_loop0_188_rule(Parser *p) +_loop0_190_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -36617,7 +36764,7 @@ _loop0_188_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_188[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default")); + D(fprintf(stderr, "%*c> _loop0_190[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default")); arg_ty lambda_param_no_default_var; while ( (lambda_param_no_default_var = lambda_param_no_default_rule(p)) // lambda_param_no_default @@ -36640,7 +36787,7 @@ _loop0_188_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_188[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_190[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_no_default")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -36657,9 +36804,9 @@ _loop0_188_rule(Parser *p) return _seq; } -// _loop0_190: ',' lambda_param +// _loop0_192: ',' lambda_param static asdl_seq * -_loop0_190_rule(Parser *p) +_loop0_192_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -36684,7 +36831,7 @@ _loop0_190_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_190[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' lambda_param")); + D(fprintf(stderr, "%*c> _loop0_192[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' lambda_param")); Token * _literal; arg_ty elem; while ( @@ -36716,7 +36863,7 @@ _loop0_190_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_190[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_192[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' lambda_param")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -36733,9 +36880,9 @@ _loop0_190_rule(Parser *p) return _seq; } -// _gather_189: lambda_param _loop0_190 +// _gather_191: lambda_param _loop0_192 static asdl_seq * -_gather_189_rule(Parser *p) +_gather_191_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -36746,27 +36893,27 @@ _gather_189_rule(Parser *p) } asdl_seq * _res = NULL; int _mark = p->mark; - { // lambda_param _loop0_190 + { // lambda_param _loop0_192 if (p->error_indicator) { p->level--; return NULL; } - D(fprintf(stderr, "%*c> _gather_189[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param _loop0_190")); + D(fprintf(stderr, "%*c> _gather_191[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param _loop0_192")); arg_ty elem; asdl_seq * seq; if ( (elem = lambda_param_rule(p)) // lambda_param && - (seq = _loop0_190_rule(p)) // _loop0_190 + (seq = _loop0_192_rule(p)) // _loop0_192 ) { - D(fprintf(stderr, "%*c+ _gather_189[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_param _loop0_190")); + D(fprintf(stderr, "%*c+ _gather_191[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_param _loop0_192")); _res = _PyPegen_seq_insert_in_front(p, elem, seq); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _gather_189[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param _loop0_190")); + D(fprintf(stderr, "%*c%s _gather_191[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param _loop0_192")); } _res = NULL; done: @@ -36774,9 +36921,9 @@ _gather_189_rule(Parser *p) return _res; } -// _tmp_191: lambda_slash_no_default | lambda_slash_with_default +// _tmp_193: lambda_slash_no_default | lambda_slash_with_default static void * -_tmp_191_rule(Parser *p) +_tmp_193_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -36792,18 +36939,18 @@ _tmp_191_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_191[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_slash_no_default")); + D(fprintf(stderr, "%*c> _tmp_193[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_slash_no_default")); asdl_arg_seq* lambda_slash_no_default_var; if ( (lambda_slash_no_default_var = lambda_slash_no_default_rule(p)) // lambda_slash_no_default ) { - D(fprintf(stderr, "%*c+ _tmp_191[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_slash_no_default")); + D(fprintf(stderr, "%*c+ _tmp_193[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_slash_no_default")); _res = lambda_slash_no_default_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_191[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_193[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_slash_no_default")); } { // lambda_slash_with_default @@ -36811,18 +36958,18 @@ _tmp_191_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_191[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_slash_with_default")); + D(fprintf(stderr, "%*c> _tmp_193[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_slash_with_default")); SlashWithDefault* lambda_slash_with_default_var; if ( (lambda_slash_with_default_var = lambda_slash_with_default_rule(p)) // lambda_slash_with_default ) { - D(fprintf(stderr, "%*c+ _tmp_191[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_slash_with_default")); + D(fprintf(stderr, "%*c+ _tmp_193[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_slash_with_default")); _res = lambda_slash_with_default_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_191[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_193[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_slash_with_default")); } _res = NULL; @@ -36831,9 +36978,9 @@ _tmp_191_rule(Parser *p) return _res; } -// _loop0_192: lambda_param_maybe_default +// _loop0_194: lambda_param_maybe_default static asdl_seq * -_loop0_192_rule(Parser *p) +_loop0_194_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -36858,7 +37005,7 @@ _loop0_192_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_192[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_maybe_default")); + D(fprintf(stderr, "%*c> _loop0_194[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_maybe_default")); NameDefaultPair* lambda_param_maybe_default_var; while ( (lambda_param_maybe_default_var = lambda_param_maybe_default_rule(p)) // lambda_param_maybe_default @@ -36881,7 +37028,7 @@ _loop0_192_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_192[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_194[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_maybe_default")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -36898,9 +37045,9 @@ _loop0_192_rule(Parser *p) return _seq; } -// _tmp_193: ',' | lambda_param_no_default +// _tmp_195: ',' | lambda_param_no_default static void * -_tmp_193_rule(Parser *p) +_tmp_195_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -36916,18 +37063,18 @@ _tmp_193_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_193[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','")); + D(fprintf(stderr, "%*c> _tmp_195[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' ) { - D(fprintf(stderr, "%*c+ _tmp_193[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','")); + D(fprintf(stderr, "%*c+ _tmp_195[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_193[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_195[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','")); } { // lambda_param_no_default @@ -36935,18 +37082,18 @@ _tmp_193_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_193[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default")); + D(fprintf(stderr, "%*c> _tmp_195[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default")); arg_ty lambda_param_no_default_var; if ( (lambda_param_no_default_var = lambda_param_no_default_rule(p)) // lambda_param_no_default ) { - D(fprintf(stderr, "%*c+ _tmp_193[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default")); + D(fprintf(stderr, "%*c+ _tmp_195[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default")); _res = lambda_param_no_default_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_193[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_195[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_no_default")); } _res = NULL; @@ -36955,9 +37102,9 @@ _tmp_193_rule(Parser *p) return _res; } -// _loop0_194: lambda_param_maybe_default +// _loop0_196: lambda_param_maybe_default static asdl_seq * -_loop0_194_rule(Parser *p) +_loop0_196_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -36982,7 +37129,7 @@ _loop0_194_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_194[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_maybe_default")); + D(fprintf(stderr, "%*c> _loop0_196[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_maybe_default")); NameDefaultPair* lambda_param_maybe_default_var; while ( (lambda_param_maybe_default_var = lambda_param_maybe_default_rule(p)) // lambda_param_maybe_default @@ -37005,7 +37152,7 @@ _loop0_194_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_194[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_196[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_maybe_default")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -37022,9 +37169,9 @@ _loop0_194_rule(Parser *p) return _seq; } -// _loop1_195: lambda_param_maybe_default +// _loop1_197: lambda_param_maybe_default static asdl_seq * -_loop1_195_rule(Parser *p) +_loop1_197_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -37049,7 +37196,7 @@ _loop1_195_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop1_195[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_maybe_default")); + D(fprintf(stderr, "%*c> _loop1_197[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_maybe_default")); NameDefaultPair* lambda_param_maybe_default_var; while ( (lambda_param_maybe_default_var = lambda_param_maybe_default_rule(p)) // lambda_param_maybe_default @@ -37072,7 +37219,7 @@ _loop1_195_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop1_195[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop1_197[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_maybe_default")); } if (_n == 0 || p->error_indicator) { @@ -37094,9 +37241,9 @@ _loop1_195_rule(Parser *p) return _seq; } -// _loop1_196: lambda_param_with_default +// _loop1_198: lambda_param_with_default static asdl_seq * -_loop1_196_rule(Parser *p) +_loop1_198_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -37121,7 +37268,7 @@ _loop1_196_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop1_196[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_with_default")); + D(fprintf(stderr, "%*c> _loop1_198[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_with_default")); NameDefaultPair* lambda_param_with_default_var; while ( (lambda_param_with_default_var = lambda_param_with_default_rule(p)) // lambda_param_with_default @@ -37144,7 +37291,7 @@ _loop1_196_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop1_196[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop1_198[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_with_default")); } if (_n == 0 || p->error_indicator) { @@ -37166,9 +37313,9 @@ _loop1_196_rule(Parser *p) return _seq; } -// _tmp_197: ':' | ',' (':' | '**') +// _tmp_199: ':' | ',' (':' | '**') static void * -_tmp_197_rule(Parser *p) +_tmp_199_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -37184,18 +37331,18 @@ _tmp_197_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_197[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':'")); + D(fprintf(stderr, "%*c> _tmp_199[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 11)) // token=':' ) { - D(fprintf(stderr, "%*c+ _tmp_197[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':'")); + D(fprintf(stderr, "%*c+ _tmp_199[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_197[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_199[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "':'")); } { // ',' (':' | '**') @@ -37203,21 +37350,21 @@ _tmp_197_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_197[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (':' | '**')")); + D(fprintf(stderr, "%*c> _tmp_199[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (':' | '**')")); Token * _literal; - void *_tmp_267_var; + void *_tmp_270_var; if ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' && - (_tmp_267_var = _tmp_267_rule(p)) // ':' | '**' + (_tmp_270_var = _tmp_270_rule(p)) // ':' | '**' ) { - D(fprintf(stderr, "%*c+ _tmp_197[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' (':' | '**')")); - _res = _PyPegen_dummy_name(p, _literal, _tmp_267_var); + D(fprintf(stderr, "%*c+ _tmp_199[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' (':' | '**')")); + _res = _PyPegen_dummy_name(p, _literal, _tmp_270_var); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_197[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_199[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' (':' | '**')")); } _res = NULL; @@ -37226,9 +37373,9 @@ _tmp_197_rule(Parser *p) return _res; } -// _tmp_198: lambda_param_no_default | ',' +// _tmp_200: lambda_param_no_default | ',' static void * -_tmp_198_rule(Parser *p) +_tmp_200_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -37244,18 +37391,18 @@ _tmp_198_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_198[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default")); + D(fprintf(stderr, "%*c> _tmp_200[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default")); arg_ty lambda_param_no_default_var; if ( (lambda_param_no_default_var = lambda_param_no_default_rule(p)) // lambda_param_no_default ) { - D(fprintf(stderr, "%*c+ _tmp_198[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default")); + D(fprintf(stderr, "%*c+ _tmp_200[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default")); _res = lambda_param_no_default_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_198[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_200[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_no_default")); } { // ',' @@ -37263,18 +37410,18 @@ _tmp_198_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_198[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','")); + D(fprintf(stderr, "%*c> _tmp_200[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' ) { - D(fprintf(stderr, "%*c+ _tmp_198[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','")); + D(fprintf(stderr, "%*c+ _tmp_200[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_198[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_200[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','")); } _res = NULL; @@ -37283,9 +37430,9 @@ _tmp_198_rule(Parser *p) return _res; } -// _loop0_199: lambda_param_maybe_default +// _loop0_201: lambda_param_maybe_default static asdl_seq * -_loop0_199_rule(Parser *p) +_loop0_201_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -37310,7 +37457,7 @@ _loop0_199_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_199[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_maybe_default")); + D(fprintf(stderr, "%*c> _loop0_201[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_maybe_default")); NameDefaultPair* lambda_param_maybe_default_var; while ( (lambda_param_maybe_default_var = lambda_param_maybe_default_rule(p)) // lambda_param_maybe_default @@ -37333,7 +37480,7 @@ _loop0_199_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_199[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_201[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_maybe_default")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -37350,9 +37497,9 @@ _loop0_199_rule(Parser *p) return _seq; } -// _tmp_200: lambda_param_no_default | ',' +// _tmp_202: lambda_param_no_default | ',' static void * -_tmp_200_rule(Parser *p) +_tmp_202_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -37368,18 +37515,18 @@ _tmp_200_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_200[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default")); + D(fprintf(stderr, "%*c> _tmp_202[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default")); arg_ty lambda_param_no_default_var; if ( (lambda_param_no_default_var = lambda_param_no_default_rule(p)) // lambda_param_no_default ) { - D(fprintf(stderr, "%*c+ _tmp_200[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default")); + D(fprintf(stderr, "%*c+ _tmp_202[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default")); _res = lambda_param_no_default_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_200[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_202[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_no_default")); } { // ',' @@ -37387,18 +37534,18 @@ _tmp_200_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_200[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','")); + D(fprintf(stderr, "%*c> _tmp_202[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' ) { - D(fprintf(stderr, "%*c+ _tmp_200[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','")); + D(fprintf(stderr, "%*c+ _tmp_202[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_200[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_202[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','")); } _res = NULL; @@ -37407,9 +37554,9 @@ _tmp_200_rule(Parser *p) return _res; } -// _tmp_201: '*' | '**' | '/' +// _tmp_203: '*' | '**' | '/' static void * -_tmp_201_rule(Parser *p) +_tmp_203_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -37425,18 +37572,18 @@ _tmp_201_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_201[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*'")); + D(fprintf(stderr, "%*c> _tmp_203[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 16)) // token='*' ) { - D(fprintf(stderr, "%*c+ _tmp_201[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*'")); + D(fprintf(stderr, "%*c+ _tmp_203[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_201[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_203[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'*'")); } { // '**' @@ -37444,18 +37591,18 @@ _tmp_201_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_201[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**'")); + D(fprintf(stderr, "%*c> _tmp_203[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 35)) // token='**' ) { - D(fprintf(stderr, "%*c+ _tmp_201[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**'")); + D(fprintf(stderr, "%*c+ _tmp_203[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_201[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_203[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'**'")); } { // '/' @@ -37463,18 +37610,18 @@ _tmp_201_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_201[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'/'")); + D(fprintf(stderr, "%*c> _tmp_203[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'/'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 17)) // token='/' ) { - D(fprintf(stderr, "%*c+ _tmp_201[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'/'")); + D(fprintf(stderr, "%*c+ _tmp_203[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'/'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_201[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_203[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'/'")); } _res = NULL; @@ -37483,9 +37630,9 @@ _tmp_201_rule(Parser *p) return _res; } -// _tmp_202: ',' | ')' | ':' +// _tmp_204: ',' | ')' | ':' static void * -_tmp_202_rule(Parser *p) +_tmp_204_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -37501,18 +37648,18 @@ _tmp_202_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_202[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','")); + D(fprintf(stderr, "%*c> _tmp_204[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' ) { - D(fprintf(stderr, "%*c+ _tmp_202[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','")); + D(fprintf(stderr, "%*c+ _tmp_204[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_202[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_204[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','")); } { // ')' @@ -37520,18 +37667,18 @@ _tmp_202_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_202[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "')'")); + D(fprintf(stderr, "%*c> _tmp_204[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "')'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 8)) // token=')' ) { - D(fprintf(stderr, "%*c+ _tmp_202[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "')'")); + D(fprintf(stderr, "%*c+ _tmp_204[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "')'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_202[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_204[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "')'")); } { // ':' @@ -37539,18 +37686,18 @@ _tmp_202_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_202[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':'")); + D(fprintf(stderr, "%*c> _tmp_204[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 11)) // token=':' ) { - D(fprintf(stderr, "%*c+ _tmp_202[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':'")); + D(fprintf(stderr, "%*c+ _tmp_204[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_202[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_204[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "':'")); } _res = NULL; @@ -37559,9 +37706,9 @@ _tmp_202_rule(Parser *p) return _res; } -// _loop0_204: ',' dotted_name +// _loop0_206: ',' dotted_name static asdl_seq * -_loop0_204_rule(Parser *p) +_loop0_206_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -37586,7 +37733,7 @@ _loop0_204_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_204[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' dotted_name")); + D(fprintf(stderr, "%*c> _loop0_206[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' dotted_name")); Token * _literal; expr_ty elem; while ( @@ -37618,7 +37765,7 @@ _loop0_204_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_204[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_206[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' dotted_name")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -37635,9 +37782,9 @@ _loop0_204_rule(Parser *p) return _seq; } -// _gather_203: dotted_name _loop0_204 +// _gather_205: dotted_name _loop0_206 static asdl_seq * -_gather_203_rule(Parser *p) +_gather_205_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -37648,27 +37795,27 @@ _gather_203_rule(Parser *p) } asdl_seq * _res = NULL; int _mark = p->mark; - { // dotted_name _loop0_204 + { // dotted_name _loop0_206 if (p->error_indicator) { p->level--; return NULL; } - D(fprintf(stderr, "%*c> _gather_203[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "dotted_name _loop0_204")); + D(fprintf(stderr, "%*c> _gather_205[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "dotted_name _loop0_206")); expr_ty elem; asdl_seq * seq; if ( (elem = dotted_name_rule(p)) // dotted_name && - (seq = _loop0_204_rule(p)) // _loop0_204 + (seq = _loop0_206_rule(p)) // _loop0_206 ) { - D(fprintf(stderr, "%*c+ _gather_203[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "dotted_name _loop0_204")); + D(fprintf(stderr, "%*c+ _gather_205[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "dotted_name _loop0_206")); _res = _PyPegen_seq_insert_in_front(p, elem, seq); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _gather_203[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "dotted_name _loop0_204")); + D(fprintf(stderr, "%*c%s _gather_205[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "dotted_name _loop0_206")); } _res = NULL; done: @@ -37676,9 +37823,9 @@ _gather_203_rule(Parser *p) return _res; } -// _loop0_206: ',' (expression ['as' star_target]) +// _loop0_208: ',' (expression ['as' star_target]) static asdl_seq * -_loop0_206_rule(Parser *p) +_loop0_208_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -37703,13 +37850,13 @@ _loop0_206_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_206[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (expression ['as' star_target])")); + D(fprintf(stderr, "%*c> _loop0_208[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (expression ['as' star_target])")); Token * _literal; void *elem; while ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' && - (elem = _tmp_268_rule(p)) // expression ['as' star_target] + (elem = _tmp_271_rule(p)) // expression ['as' star_target] ) { _res = elem; @@ -37735,7 +37882,7 @@ _loop0_206_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_206[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_208[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' (expression ['as' star_target])")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -37752,9 +37899,9 @@ _loop0_206_rule(Parser *p) return _seq; } -// _gather_205: (expression ['as' star_target]) _loop0_206 +// _gather_207: (expression ['as' star_target]) _loop0_208 static asdl_seq * -_gather_205_rule(Parser *p) +_gather_207_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -37765,27 +37912,27 @@ _gather_205_rule(Parser *p) } asdl_seq * _res = NULL; int _mark = p->mark; - { // (expression ['as' star_target]) _loop0_206 + { // (expression ['as' star_target]) _loop0_208 if (p->error_indicator) { p->level--; return NULL; } - D(fprintf(stderr, "%*c> _gather_205[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(expression ['as' star_target]) _loop0_206")); + D(fprintf(stderr, "%*c> _gather_207[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(expression ['as' star_target]) _loop0_208")); void *elem; asdl_seq * seq; if ( - (elem = _tmp_268_rule(p)) // expression ['as' star_target] + (elem = _tmp_271_rule(p)) // expression ['as' star_target] && - (seq = _loop0_206_rule(p)) // _loop0_206 + (seq = _loop0_208_rule(p)) // _loop0_208 ) { - D(fprintf(stderr, "%*c+ _gather_205[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "(expression ['as' star_target]) _loop0_206")); + D(fprintf(stderr, "%*c+ _gather_207[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "(expression ['as' star_target]) _loop0_208")); _res = _PyPegen_seq_insert_in_front(p, elem, seq); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _gather_205[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(expression ['as' star_target]) _loop0_206")); + D(fprintf(stderr, "%*c%s _gather_207[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(expression ['as' star_target]) _loop0_208")); } _res = NULL; done: @@ -37793,9 +37940,9 @@ _gather_205_rule(Parser *p) return _res; } -// _loop0_208: ',' (expressions ['as' star_target]) +// _loop0_210: ',' (expressions ['as' star_target]) static asdl_seq * -_loop0_208_rule(Parser *p) +_loop0_210_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -37820,13 +37967,13 @@ _loop0_208_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_208[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (expressions ['as' star_target])")); + D(fprintf(stderr, "%*c> _loop0_210[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (expressions ['as' star_target])")); Token * _literal; void *elem; while ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' && - (elem = _tmp_269_rule(p)) // expressions ['as' star_target] + (elem = _tmp_272_rule(p)) // expressions ['as' star_target] ) { _res = elem; @@ -37852,7 +37999,7 @@ _loop0_208_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_208[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_210[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' (expressions ['as' star_target])")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -37869,9 +38016,9 @@ _loop0_208_rule(Parser *p) return _seq; } -// _gather_207: (expressions ['as' star_target]) _loop0_208 +// _gather_209: (expressions ['as' star_target]) _loop0_210 static asdl_seq * -_gather_207_rule(Parser *p) +_gather_209_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -37882,27 +38029,27 @@ _gather_207_rule(Parser *p) } asdl_seq * _res = NULL; int _mark = p->mark; - { // (expressions ['as' star_target]) _loop0_208 + { // (expressions ['as' star_target]) _loop0_210 if (p->error_indicator) { p->level--; return NULL; } - D(fprintf(stderr, "%*c> _gather_207[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(expressions ['as' star_target]) _loop0_208")); + D(fprintf(stderr, "%*c> _gather_209[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(expressions ['as' star_target]) _loop0_210")); void *elem; asdl_seq * seq; if ( - (elem = _tmp_269_rule(p)) // expressions ['as' star_target] + (elem = _tmp_272_rule(p)) // expressions ['as' star_target] && - (seq = _loop0_208_rule(p)) // _loop0_208 + (seq = _loop0_210_rule(p)) // _loop0_210 ) { - D(fprintf(stderr, "%*c+ _gather_207[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "(expressions ['as' star_target]) _loop0_208")); + D(fprintf(stderr, "%*c+ _gather_209[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "(expressions ['as' star_target]) _loop0_210")); _res = _PyPegen_seq_insert_in_front(p, elem, seq); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _gather_207[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(expressions ['as' star_target]) _loop0_208")); + D(fprintf(stderr, "%*c%s _gather_209[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(expressions ['as' star_target]) _loop0_210")); } _res = NULL; done: @@ -37910,9 +38057,9 @@ _gather_207_rule(Parser *p) return _res; } -// _loop0_210: ',' (expression ['as' star_target]) +// _loop0_212: ',' (expression ['as' star_target]) static asdl_seq * -_loop0_210_rule(Parser *p) +_loop0_212_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -37937,13 +38084,13 @@ _loop0_210_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_210[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (expression ['as' star_target])")); + D(fprintf(stderr, "%*c> _loop0_212[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (expression ['as' star_target])")); Token * _literal; void *elem; while ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' && - (elem = _tmp_270_rule(p)) // expression ['as' star_target] + (elem = _tmp_273_rule(p)) // expression ['as' star_target] ) { _res = elem; @@ -37969,7 +38116,7 @@ _loop0_210_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_210[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_212[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' (expression ['as' star_target])")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -37986,9 +38133,9 @@ _loop0_210_rule(Parser *p) return _seq; } -// _gather_209: (expression ['as' star_target]) _loop0_210 +// _gather_211: (expression ['as' star_target]) _loop0_212 static asdl_seq * -_gather_209_rule(Parser *p) +_gather_211_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -37999,27 +38146,27 @@ _gather_209_rule(Parser *p) } asdl_seq * _res = NULL; int _mark = p->mark; - { // (expression ['as' star_target]) _loop0_210 + { // (expression ['as' star_target]) _loop0_212 if (p->error_indicator) { p->level--; return NULL; } - D(fprintf(stderr, "%*c> _gather_209[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(expression ['as' star_target]) _loop0_210")); + D(fprintf(stderr, "%*c> _gather_211[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(expression ['as' star_target]) _loop0_212")); void *elem; asdl_seq * seq; if ( - (elem = _tmp_270_rule(p)) // expression ['as' star_target] + (elem = _tmp_273_rule(p)) // expression ['as' star_target] && - (seq = _loop0_210_rule(p)) // _loop0_210 + (seq = _loop0_212_rule(p)) // _loop0_212 ) { - D(fprintf(stderr, "%*c+ _gather_209[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "(expression ['as' star_target]) _loop0_210")); + D(fprintf(stderr, "%*c+ _gather_211[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "(expression ['as' star_target]) _loop0_212")); _res = _PyPegen_seq_insert_in_front(p, elem, seq); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _gather_209[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(expression ['as' star_target]) _loop0_210")); + D(fprintf(stderr, "%*c%s _gather_211[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(expression ['as' star_target]) _loop0_212")); } _res = NULL; done: @@ -38027,9 +38174,9 @@ _gather_209_rule(Parser *p) return _res; } -// _loop0_212: ',' (expressions ['as' star_target]) +// _loop0_214: ',' (expressions ['as' star_target]) static asdl_seq * -_loop0_212_rule(Parser *p) +_loop0_214_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -38054,13 +38201,13 @@ _loop0_212_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_212[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (expressions ['as' star_target])")); + D(fprintf(stderr, "%*c> _loop0_214[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (expressions ['as' star_target])")); Token * _literal; void *elem; while ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' && - (elem = _tmp_271_rule(p)) // expressions ['as' star_target] + (elem = _tmp_274_rule(p)) // expressions ['as' star_target] ) { _res = elem; @@ -38086,7 +38233,7 @@ _loop0_212_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_212[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_214[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' (expressions ['as' star_target])")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -38103,9 +38250,9 @@ _loop0_212_rule(Parser *p) return _seq; } -// _gather_211: (expressions ['as' star_target]) _loop0_212 +// _gather_213: (expressions ['as' star_target]) _loop0_214 static asdl_seq * -_gather_211_rule(Parser *p) +_gather_213_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -38116,27 +38263,27 @@ _gather_211_rule(Parser *p) } asdl_seq * _res = NULL; int _mark = p->mark; - { // (expressions ['as' star_target]) _loop0_212 + { // (expressions ['as' star_target]) _loop0_214 if (p->error_indicator) { p->level--; return NULL; } - D(fprintf(stderr, "%*c> _gather_211[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(expressions ['as' star_target]) _loop0_212")); + D(fprintf(stderr, "%*c> _gather_213[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(expressions ['as' star_target]) _loop0_214")); void *elem; asdl_seq * seq; if ( - (elem = _tmp_271_rule(p)) // expressions ['as' star_target] + (elem = _tmp_274_rule(p)) // expressions ['as' star_target] && - (seq = _loop0_212_rule(p)) // _loop0_212 + (seq = _loop0_214_rule(p)) // _loop0_214 ) { - D(fprintf(stderr, "%*c+ _gather_211[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "(expressions ['as' star_target]) _loop0_212")); + D(fprintf(stderr, "%*c+ _gather_213[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "(expressions ['as' star_target]) _loop0_214")); _res = _PyPegen_seq_insert_in_front(p, elem, seq); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _gather_211[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(expressions ['as' star_target]) _loop0_212")); + D(fprintf(stderr, "%*c%s _gather_213[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(expressions ['as' star_target]) _loop0_214")); } _res = NULL; done: @@ -38144,9 +38291,9 @@ _gather_211_rule(Parser *p) return _res; } -// _tmp_213: 'except' | 'finally' +// _tmp_215: 'except' | 'finally' static void * -_tmp_213_rule(Parser *p) +_tmp_215_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -38162,18 +38309,18 @@ _tmp_213_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_213[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'except'")); + D(fprintf(stderr, "%*c> _tmp_215[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'except'")); Token * _keyword; if ( (_keyword = _PyPegen_expect_token(p, 637)) // token='except' ) { - D(fprintf(stderr, "%*c+ _tmp_213[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'except'")); + D(fprintf(stderr, "%*c+ _tmp_215[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'except'")); _res = _keyword; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_213[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_215[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'except'")); } { // 'finally' @@ -38181,18 +38328,18 @@ _tmp_213_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_213[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'finally'")); + D(fprintf(stderr, "%*c> _tmp_215[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'finally'")); Token * _keyword; if ( (_keyword = _PyPegen_expect_token(p, 633)) // token='finally' ) { - D(fprintf(stderr, "%*c+ _tmp_213[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'finally'")); + D(fprintf(stderr, "%*c+ _tmp_215[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'finally'")); _res = _keyword; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_213[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_215[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'finally'")); } _res = NULL; @@ -38201,9 +38348,9 @@ _tmp_213_rule(Parser *p) return _res; } -// _loop0_214: block +// _loop0_216: block static asdl_seq * -_loop0_214_rule(Parser *p) +_loop0_216_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -38228,7 +38375,7 @@ _loop0_214_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_214[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "block")); + D(fprintf(stderr, "%*c> _loop0_216[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "block")); asdl_stmt_seq* block_var; while ( (block_var = block_rule(p)) // block @@ -38251,7 +38398,7 @@ _loop0_214_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_214[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_216[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "block")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -38268,9 +38415,9 @@ _loop0_214_rule(Parser *p) return _seq; } -// _loop1_215: except_block +// _loop1_217: except_block static asdl_seq * -_loop1_215_rule(Parser *p) +_loop1_217_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -38295,7 +38442,7 @@ _loop1_215_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop1_215[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "except_block")); + D(fprintf(stderr, "%*c> _loop1_217[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "except_block")); excepthandler_ty except_block_var; while ( (except_block_var = except_block_rule(p)) // except_block @@ -38318,7 +38465,7 @@ _loop1_215_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop1_215[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop1_217[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "except_block")); } if (_n == 0 || p->error_indicator) { @@ -38340,9 +38487,9 @@ _loop1_215_rule(Parser *p) return _seq; } -// _tmp_216: 'as' NAME +// _tmp_218: 'as' NAME static void * -_tmp_216_rule(Parser *p) +_tmp_218_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -38358,7 +38505,7 @@ _tmp_216_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_216[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' NAME")); + D(fprintf(stderr, "%*c> _tmp_218[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' NAME")); Token * _keyword; expr_ty name_var; if ( @@ -38367,12 +38514,12 @@ _tmp_216_rule(Parser *p) (name_var = _PyPegen_name_token(p)) // NAME ) { - D(fprintf(stderr, "%*c+ _tmp_216[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' NAME")); + D(fprintf(stderr, "%*c+ _tmp_218[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' NAME")); _res = _PyPegen_dummy_name(p, _keyword, name_var); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_216[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_218[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'as' NAME")); } _res = NULL; @@ -38381,9 +38528,9 @@ _tmp_216_rule(Parser *p) return _res; } -// _loop0_217: block +// _loop0_219: block static asdl_seq * -_loop0_217_rule(Parser *p) +_loop0_219_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -38408,7 +38555,7 @@ _loop0_217_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_217[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "block")); + D(fprintf(stderr, "%*c> _loop0_219[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "block")); asdl_stmt_seq* block_var; while ( (block_var = block_rule(p)) // block @@ -38431,7 +38578,7 @@ _loop0_217_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_217[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_219[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "block")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -38448,9 +38595,9 @@ _loop0_217_rule(Parser *p) return _seq; } -// _loop1_218: except_star_block +// _loop1_220: except_star_block static asdl_seq * -_loop1_218_rule(Parser *p) +_loop1_220_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -38475,7 +38622,7 @@ _loop1_218_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop1_218[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "except_star_block")); + D(fprintf(stderr, "%*c> _loop1_220[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "except_star_block")); excepthandler_ty except_star_block_var; while ( (except_star_block_var = except_star_block_rule(p)) // except_star_block @@ -38498,7 +38645,7 @@ _loop1_218_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop1_218[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop1_220[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "except_star_block")); } if (_n == 0 || p->error_indicator) { @@ -38520,9 +38667,9 @@ _loop1_218_rule(Parser *p) return _seq; } -// _tmp_219: expression ['as' NAME] +// _tmp_221: expression ['as' NAME] static void * -_tmp_219_rule(Parser *p) +_tmp_221_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -38538,22 +38685,22 @@ _tmp_219_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_219[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression ['as' NAME]")); + D(fprintf(stderr, "%*c> _tmp_221[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression ['as' NAME]")); void *_opt_var; UNUSED(_opt_var); // Silence compiler warnings expr_ty expression_var; if ( (expression_var = expression_rule(p)) // expression && - (_opt_var = _tmp_272_rule(p), !p->error_indicator) // ['as' NAME] + (_opt_var = _tmp_275_rule(p), !p->error_indicator) // ['as' NAME] ) { - D(fprintf(stderr, "%*c+ _tmp_219[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression ['as' NAME]")); + D(fprintf(stderr, "%*c+ _tmp_221[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression ['as' NAME]")); _res = _PyPegen_dummy_name(p, expression_var, _opt_var); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_219[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_221[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression ['as' NAME]")); } _res = NULL; @@ -38562,9 +38709,9 @@ _tmp_219_rule(Parser *p) return _res; } -// _tmp_220: 'as' NAME +// _tmp_222: 'as' NAME static void * -_tmp_220_rule(Parser *p) +_tmp_222_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -38580,7 +38727,7 @@ _tmp_220_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_220[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' NAME")); + D(fprintf(stderr, "%*c> _tmp_222[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' NAME")); Token * _keyword; expr_ty name_var; if ( @@ -38589,12 +38736,12 @@ _tmp_220_rule(Parser *p) (name_var = _PyPegen_name_token(p)) // NAME ) { - D(fprintf(stderr, "%*c+ _tmp_220[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' NAME")); + D(fprintf(stderr, "%*c+ _tmp_222[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' NAME")); _res = _PyPegen_dummy_name(p, _keyword, name_var); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_220[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_222[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'as' NAME")); } _res = NULL; @@ -38603,9 +38750,9 @@ _tmp_220_rule(Parser *p) return _res; } -// _tmp_221: 'as' NAME +// _tmp_223: 'as' NAME static void * -_tmp_221_rule(Parser *p) +_tmp_223_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -38621,7 +38768,7 @@ _tmp_221_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_221[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' NAME")); + D(fprintf(stderr, "%*c> _tmp_223[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' NAME")); Token * _keyword; expr_ty name_var; if ( @@ -38630,12 +38777,12 @@ _tmp_221_rule(Parser *p) (name_var = _PyPegen_name_token(p)) // NAME ) { - D(fprintf(stderr, "%*c+ _tmp_221[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' NAME")); + D(fprintf(stderr, "%*c+ _tmp_223[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' NAME")); _res = _PyPegen_dummy_name(p, _keyword, name_var); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_221[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_223[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'as' NAME")); } _res = NULL; @@ -38644,9 +38791,9 @@ _tmp_221_rule(Parser *p) return _res; } -// _tmp_222: NEWLINE | ':' +// _tmp_224: NEWLINE | ':' static void * -_tmp_222_rule(Parser *p) +_tmp_224_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -38662,18 +38809,18 @@ _tmp_222_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_222[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NEWLINE")); + D(fprintf(stderr, "%*c> _tmp_224[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NEWLINE")); Token * newline_var; if ( (newline_var = _PyPegen_expect_token(p, NEWLINE)) // token='NEWLINE' ) { - D(fprintf(stderr, "%*c+ _tmp_222[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NEWLINE")); + D(fprintf(stderr, "%*c+ _tmp_224[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NEWLINE")); _res = newline_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_222[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_224[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NEWLINE")); } { // ':' @@ -38681,18 +38828,18 @@ _tmp_222_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_222[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':'")); + D(fprintf(stderr, "%*c> _tmp_224[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 11)) // token=':' ) { - D(fprintf(stderr, "%*c+ _tmp_222[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':'")); + D(fprintf(stderr, "%*c+ _tmp_224[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_222[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_224[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "':'")); } _res = NULL; @@ -38701,9 +38848,9 @@ _tmp_222_rule(Parser *p) return _res; } -// _tmp_223: 'as' NAME +// _tmp_225: 'as' NAME static void * -_tmp_223_rule(Parser *p) +_tmp_225_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -38719,7 +38866,7 @@ _tmp_223_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_223[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' NAME")); + D(fprintf(stderr, "%*c> _tmp_225[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' NAME")); Token * _keyword; expr_ty name_var; if ( @@ -38728,12 +38875,12 @@ _tmp_223_rule(Parser *p) (name_var = _PyPegen_name_token(p)) // NAME ) { - D(fprintf(stderr, "%*c+ _tmp_223[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' NAME")); + D(fprintf(stderr, "%*c+ _tmp_225[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' NAME")); _res = _PyPegen_dummy_name(p, _keyword, name_var); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_223[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_225[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'as' NAME")); } _res = NULL; @@ -38742,9 +38889,9 @@ _tmp_223_rule(Parser *p) return _res; } -// _tmp_224: 'as' NAME +// _tmp_226: 'as' NAME static void * -_tmp_224_rule(Parser *p) +_tmp_226_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -38760,7 +38907,7 @@ _tmp_224_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_224[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' NAME")); + D(fprintf(stderr, "%*c> _tmp_226[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' NAME")); Token * _keyword; expr_ty name_var; if ( @@ -38769,12 +38916,12 @@ _tmp_224_rule(Parser *p) (name_var = _PyPegen_name_token(p)) // NAME ) { - D(fprintf(stderr, "%*c+ _tmp_224[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' NAME")); + D(fprintf(stderr, "%*c+ _tmp_226[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' NAME")); _res = _PyPegen_dummy_name(p, _keyword, name_var); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_224[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_226[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'as' NAME")); } _res = NULL; @@ -38783,9 +38930,9 @@ _tmp_224_rule(Parser *p) return _res; } -// _tmp_225: positional_patterns ',' +// _tmp_227: positional_patterns ',' static void * -_tmp_225_rule(Parser *p) +_tmp_227_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -38801,7 +38948,7 @@ _tmp_225_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_225[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "positional_patterns ','")); + D(fprintf(stderr, "%*c> _tmp_227[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "positional_patterns ','")); Token * _literal; asdl_pattern_seq* positional_patterns_var; if ( @@ -38810,12 +38957,12 @@ _tmp_225_rule(Parser *p) (_literal = _PyPegen_expect_token(p, 12)) // token=',' ) { - D(fprintf(stderr, "%*c+ _tmp_225[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "positional_patterns ','")); + D(fprintf(stderr, "%*c+ _tmp_227[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "positional_patterns ','")); _res = _PyPegen_dummy_name(p, positional_patterns_var, _literal); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_225[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_227[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "positional_patterns ','")); } _res = NULL; @@ -38824,9 +38971,9 @@ _tmp_225_rule(Parser *p) return _res; } -// _tmp_226: '->' expression +// _tmp_228: '->' expression static void * -_tmp_226_rule(Parser *p) +_tmp_228_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -38842,7 +38989,7 @@ _tmp_226_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_226[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'->' expression")); + D(fprintf(stderr, "%*c> _tmp_228[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'->' expression")); Token * _literal; expr_ty expression_var; if ( @@ -38851,12 +38998,12 @@ _tmp_226_rule(Parser *p) (expression_var = expression_rule(p)) // expression ) { - D(fprintf(stderr, "%*c+ _tmp_226[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'->' expression")); + D(fprintf(stderr, "%*c+ _tmp_228[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'->' expression")); _res = _PyPegen_dummy_name(p, _literal, expression_var); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_226[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_228[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'->' expression")); } _res = NULL; @@ -38865,9 +39012,9 @@ _tmp_226_rule(Parser *p) return _res; } -// _tmp_227: '(' arguments? ')' +// _tmp_229: '(' arguments? ')' static void * -_tmp_227_rule(Parser *p) +_tmp_229_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -38883,7 +39030,7 @@ _tmp_227_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_227[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' arguments? ')'")); + D(fprintf(stderr, "%*c> _tmp_229[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' arguments? ')'")); Token * _literal; Token * _literal_1; void *_opt_var; @@ -38896,12 +39043,12 @@ _tmp_227_rule(Parser *p) (_literal_1 = _PyPegen_expect_token(p, 8)) // token=')' ) { - D(fprintf(stderr, "%*c+ _tmp_227[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'(' arguments? ')'")); + D(fprintf(stderr, "%*c+ _tmp_229[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'(' arguments? ')'")); _res = _PyPegen_dummy_name(p, _literal, _opt_var, _literal_1); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_227[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_229[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'(' arguments? ')'")); } _res = NULL; @@ -38910,9 +39057,9 @@ _tmp_227_rule(Parser *p) return _res; } -// _tmp_228: '(' arguments? ')' +// _tmp_230: '(' arguments? ')' static void * -_tmp_228_rule(Parser *p) +_tmp_230_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -38928,7 +39075,7 @@ _tmp_228_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_228[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' arguments? ')'")); + D(fprintf(stderr, "%*c> _tmp_230[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' arguments? ')'")); Token * _literal; Token * _literal_1; void *_opt_var; @@ -38941,12 +39088,12 @@ _tmp_228_rule(Parser *p) (_literal_1 = _PyPegen_expect_token(p, 8)) // token=')' ) { - D(fprintf(stderr, "%*c+ _tmp_228[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'(' arguments? ')'")); + D(fprintf(stderr, "%*c+ _tmp_230[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'(' arguments? ')'")); _res = _PyPegen_dummy_name(p, _literal, _opt_var, _literal_1); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_228[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_230[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'(' arguments? ')'")); } _res = NULL; @@ -38955,9 +39102,9 @@ _tmp_228_rule(Parser *p) return _res; } -// _loop0_230: ',' double_starred_kvpair +// _loop0_232: ',' double_starred_kvpair static asdl_seq * -_loop0_230_rule(Parser *p) +_loop0_232_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -38982,7 +39129,7 @@ _loop0_230_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_230[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' double_starred_kvpair")); + D(fprintf(stderr, "%*c> _loop0_232[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' double_starred_kvpair")); Token * _literal; KeyValuePair* elem; while ( @@ -39014,7 +39161,7 @@ _loop0_230_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_230[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_232[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' double_starred_kvpair")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -39031,9 +39178,9 @@ _loop0_230_rule(Parser *p) return _seq; } -// _gather_229: double_starred_kvpair _loop0_230 +// _gather_231: double_starred_kvpair _loop0_232 static asdl_seq * -_gather_229_rule(Parser *p) +_gather_231_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -39044,27 +39191,27 @@ _gather_229_rule(Parser *p) } asdl_seq * _res = NULL; int _mark = p->mark; - { // double_starred_kvpair _loop0_230 + { // double_starred_kvpair _loop0_232 if (p->error_indicator) { p->level--; return NULL; } - D(fprintf(stderr, "%*c> _gather_229[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "double_starred_kvpair _loop0_230")); + D(fprintf(stderr, "%*c> _gather_231[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "double_starred_kvpair _loop0_232")); KeyValuePair* elem; asdl_seq * seq; if ( (elem = double_starred_kvpair_rule(p)) // double_starred_kvpair && - (seq = _loop0_230_rule(p)) // _loop0_230 + (seq = _loop0_232_rule(p)) // _loop0_232 ) { - D(fprintf(stderr, "%*c+ _gather_229[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "double_starred_kvpair _loop0_230")); + D(fprintf(stderr, "%*c+ _gather_231[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "double_starred_kvpair _loop0_232")); _res = _PyPegen_seq_insert_in_front(p, elem, seq); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _gather_229[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "double_starred_kvpair _loop0_230")); + D(fprintf(stderr, "%*c%s _gather_231[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "double_starred_kvpair _loop0_232")); } _res = NULL; done: @@ -39072,9 +39219,9 @@ _gather_229_rule(Parser *p) return _res; } -// _tmp_231: '}' | ',' +// _tmp_233: '}' | ',' static void * -_tmp_231_rule(Parser *p) +_tmp_233_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -39090,18 +39237,18 @@ _tmp_231_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_231[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'}'")); + D(fprintf(stderr, "%*c> _tmp_233[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'}'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 26)) // token='}' ) { - D(fprintf(stderr, "%*c+ _tmp_231[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'}'")); + D(fprintf(stderr, "%*c+ _tmp_233[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'}'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_231[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_233[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'}'")); } { // ',' @@ -39109,18 +39256,18 @@ _tmp_231_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_231[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','")); + D(fprintf(stderr, "%*c> _tmp_233[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' ) { - D(fprintf(stderr, "%*c+ _tmp_231[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','")); + D(fprintf(stderr, "%*c+ _tmp_233[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_231[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_233[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','")); } _res = NULL; @@ -39129,9 +39276,9 @@ _tmp_231_rule(Parser *p) return _res; } -// _tmp_232: '}' | ',' +// _tmp_234: '}' | ',' static void * -_tmp_232_rule(Parser *p) +_tmp_234_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -39147,18 +39294,18 @@ _tmp_232_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_232[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'}'")); + D(fprintf(stderr, "%*c> _tmp_234[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'}'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 26)) // token='}' ) { - D(fprintf(stderr, "%*c+ _tmp_232[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'}'")); + D(fprintf(stderr, "%*c+ _tmp_234[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'}'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_232[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_234[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'}'")); } { // ',' @@ -39166,18 +39313,18 @@ _tmp_232_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_232[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','")); + D(fprintf(stderr, "%*c> _tmp_234[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' ) { - D(fprintf(stderr, "%*c+ _tmp_232[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','")); + D(fprintf(stderr, "%*c+ _tmp_234[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_232[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_234[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','")); } _res = NULL; @@ -39186,9 +39333,9 @@ _tmp_232_rule(Parser *p) return _res; } -// _tmp_233: yield_expr | star_expressions +// _tmp_235: yield_expr | star_expressions static void * -_tmp_233_rule(Parser *p) +_tmp_235_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -39204,18 +39351,18 @@ _tmp_233_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_233[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "yield_expr")); + D(fprintf(stderr, "%*c> _tmp_235[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "yield_expr")); expr_ty yield_expr_var; if ( (yield_expr_var = yield_expr_rule(p)) // yield_expr ) { - D(fprintf(stderr, "%*c+ _tmp_233[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "yield_expr")); + D(fprintf(stderr, "%*c+ _tmp_235[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "yield_expr")); _res = yield_expr_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_233[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_235[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "yield_expr")); } { // star_expressions @@ -39223,18 +39370,18 @@ _tmp_233_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_233[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_expressions")); + D(fprintf(stderr, "%*c> _tmp_235[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_expressions")); expr_ty star_expressions_var; if ( (star_expressions_var = star_expressions_rule(p)) // star_expressions ) { - D(fprintf(stderr, "%*c+ _tmp_233[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_expressions")); + D(fprintf(stderr, "%*c+ _tmp_235[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_expressions")); _res = star_expressions_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_233[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_235[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_expressions")); } _res = NULL; @@ -39243,9 +39390,9 @@ _tmp_233_rule(Parser *p) return _res; } -// _tmp_234: yield_expr | star_expressions +// _tmp_236: yield_expr | star_expressions static void * -_tmp_234_rule(Parser *p) +_tmp_236_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -39261,18 +39408,18 @@ _tmp_234_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_234[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "yield_expr")); + D(fprintf(stderr, "%*c> _tmp_236[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "yield_expr")); expr_ty yield_expr_var; if ( (yield_expr_var = yield_expr_rule(p)) // yield_expr ) { - D(fprintf(stderr, "%*c+ _tmp_234[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "yield_expr")); + D(fprintf(stderr, "%*c+ _tmp_236[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "yield_expr")); _res = yield_expr_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_234[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_236[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "yield_expr")); } { // star_expressions @@ -39280,18 +39427,18 @@ _tmp_234_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_234[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_expressions")); + D(fprintf(stderr, "%*c> _tmp_236[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_expressions")); expr_ty star_expressions_var; if ( (star_expressions_var = star_expressions_rule(p)) // star_expressions ) { - D(fprintf(stderr, "%*c+ _tmp_234[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_expressions")); + D(fprintf(stderr, "%*c+ _tmp_236[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_expressions")); _res = star_expressions_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_234[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_236[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_expressions")); } _res = NULL; @@ -39300,9 +39447,9 @@ _tmp_234_rule(Parser *p) return _res; } -// _tmp_235: '=' | '!' | ':' | '}' +// _tmp_237: '=' | '!' | ':' | '}' static void * -_tmp_235_rule(Parser *p) +_tmp_237_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -39318,18 +39465,18 @@ _tmp_235_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_235[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'='")); + D(fprintf(stderr, "%*c> _tmp_237[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'='")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 22)) // token='=' ) { - D(fprintf(stderr, "%*c+ _tmp_235[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'='")); + D(fprintf(stderr, "%*c+ _tmp_237[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'='")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_235[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_237[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'='")); } { // '!' @@ -39337,18 +39484,18 @@ _tmp_235_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_235[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'!'")); + D(fprintf(stderr, "%*c> _tmp_237[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'!'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 54)) // token='!' ) { - D(fprintf(stderr, "%*c+ _tmp_235[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'!'")); + D(fprintf(stderr, "%*c+ _tmp_237[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'!'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_235[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_237[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'!'")); } { // ':' @@ -39356,18 +39503,18 @@ _tmp_235_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_235[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':'")); + D(fprintf(stderr, "%*c> _tmp_237[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 11)) // token=':' ) { - D(fprintf(stderr, "%*c+ _tmp_235[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':'")); + D(fprintf(stderr, "%*c+ _tmp_237[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_235[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_237[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "':'")); } { // '}' @@ -39375,18 +39522,18 @@ _tmp_235_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_235[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'}'")); + D(fprintf(stderr, "%*c> _tmp_237[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'}'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 26)) // token='}' ) { - D(fprintf(stderr, "%*c+ _tmp_235[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'}'")); + D(fprintf(stderr, "%*c+ _tmp_237[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'}'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_235[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_237[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'}'")); } _res = NULL; @@ -39395,9 +39542,9 @@ _tmp_235_rule(Parser *p) return _res; } -// _tmp_236: yield_expr | star_expressions +// _tmp_238: yield_expr | star_expressions static void * -_tmp_236_rule(Parser *p) +_tmp_238_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -39413,18 +39560,18 @@ _tmp_236_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_236[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "yield_expr")); + D(fprintf(stderr, "%*c> _tmp_238[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "yield_expr")); expr_ty yield_expr_var; if ( (yield_expr_var = yield_expr_rule(p)) // yield_expr ) { - D(fprintf(stderr, "%*c+ _tmp_236[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "yield_expr")); + D(fprintf(stderr, "%*c+ _tmp_238[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "yield_expr")); _res = yield_expr_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_236[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_238[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "yield_expr")); } { // star_expressions @@ -39432,18 +39579,18 @@ _tmp_236_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_236[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_expressions")); + D(fprintf(stderr, "%*c> _tmp_238[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_expressions")); expr_ty star_expressions_var; if ( (star_expressions_var = star_expressions_rule(p)) // star_expressions ) { - D(fprintf(stderr, "%*c+ _tmp_236[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_expressions")); + D(fprintf(stderr, "%*c+ _tmp_238[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_expressions")); _res = star_expressions_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_236[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_238[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_expressions")); } _res = NULL; @@ -39452,9 +39599,9 @@ _tmp_236_rule(Parser *p) return _res; } -// _tmp_237: '!' | ':' | '}' +// _tmp_239: '!' | ':' | '}' static void * -_tmp_237_rule(Parser *p) +_tmp_239_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -39470,18 +39617,18 @@ _tmp_237_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_237[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'!'")); + D(fprintf(stderr, "%*c> _tmp_239[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'!'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 54)) // token='!' ) { - D(fprintf(stderr, "%*c+ _tmp_237[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'!'")); + D(fprintf(stderr, "%*c+ _tmp_239[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'!'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_237[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_239[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'!'")); } { // ':' @@ -39489,18 +39636,18 @@ _tmp_237_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_237[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':'")); + D(fprintf(stderr, "%*c> _tmp_239[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 11)) // token=':' ) { - D(fprintf(stderr, "%*c+ _tmp_237[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':'")); + D(fprintf(stderr, "%*c+ _tmp_239[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_237[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_239[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "':'")); } { // '}' @@ -39508,18 +39655,18 @@ _tmp_237_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_237[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'}'")); + D(fprintf(stderr, "%*c> _tmp_239[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'}'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 26)) // token='}' ) { - D(fprintf(stderr, "%*c+ _tmp_237[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'}'")); + D(fprintf(stderr, "%*c+ _tmp_239[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'}'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_237[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_239[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'}'")); } _res = NULL; @@ -39528,9 +39675,9 @@ _tmp_237_rule(Parser *p) return _res; } -// _tmp_238: yield_expr | star_expressions +// _tmp_240: yield_expr | star_expressions static void * -_tmp_238_rule(Parser *p) +_tmp_240_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -39546,18 +39693,18 @@ _tmp_238_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_238[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "yield_expr")); + D(fprintf(stderr, "%*c> _tmp_240[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "yield_expr")); expr_ty yield_expr_var; if ( (yield_expr_var = yield_expr_rule(p)) // yield_expr ) { - D(fprintf(stderr, "%*c+ _tmp_238[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "yield_expr")); + D(fprintf(stderr, "%*c+ _tmp_240[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "yield_expr")); _res = yield_expr_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_238[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_240[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "yield_expr")); } { // star_expressions @@ -39565,18 +39712,18 @@ _tmp_238_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_238[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_expressions")); + D(fprintf(stderr, "%*c> _tmp_240[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_expressions")); expr_ty star_expressions_var; if ( (star_expressions_var = star_expressions_rule(p)) // star_expressions ) { - D(fprintf(stderr, "%*c+ _tmp_238[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_expressions")); + D(fprintf(stderr, "%*c+ _tmp_240[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_expressions")); _res = star_expressions_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_238[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_240[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_expressions")); } _res = NULL; @@ -39585,9 +39732,9 @@ _tmp_238_rule(Parser *p) return _res; } -// _tmp_239: yield_expr | star_expressions +// _tmp_241: yield_expr | star_expressions static void * -_tmp_239_rule(Parser *p) +_tmp_241_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -39603,18 +39750,18 @@ _tmp_239_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_239[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "yield_expr")); + D(fprintf(stderr, "%*c> _tmp_241[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "yield_expr")); expr_ty yield_expr_var; if ( (yield_expr_var = yield_expr_rule(p)) // yield_expr ) { - D(fprintf(stderr, "%*c+ _tmp_239[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "yield_expr")); + D(fprintf(stderr, "%*c+ _tmp_241[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "yield_expr")); _res = yield_expr_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_239[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_241[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "yield_expr")); } { // star_expressions @@ -39622,18 +39769,18 @@ _tmp_239_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_239[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_expressions")); + D(fprintf(stderr, "%*c> _tmp_241[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_expressions")); expr_ty star_expressions_var; if ( (star_expressions_var = star_expressions_rule(p)) // star_expressions ) { - D(fprintf(stderr, "%*c+ _tmp_239[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_expressions")); + D(fprintf(stderr, "%*c+ _tmp_241[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_expressions")); _res = star_expressions_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_239[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_241[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_expressions")); } _res = NULL; @@ -39642,9 +39789,9 @@ _tmp_239_rule(Parser *p) return _res; } -// _tmp_240: '!' NAME +// _tmp_242: '!' NAME static void * -_tmp_240_rule(Parser *p) +_tmp_242_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -39660,7 +39807,7 @@ _tmp_240_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_240[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'!' NAME")); + D(fprintf(stderr, "%*c> _tmp_242[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'!' NAME")); Token * _literal; expr_ty name_var; if ( @@ -39669,12 +39816,12 @@ _tmp_240_rule(Parser *p) (name_var = _PyPegen_name_token(p)) // NAME ) { - D(fprintf(stderr, "%*c+ _tmp_240[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'!' NAME")); + D(fprintf(stderr, "%*c+ _tmp_242[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'!' NAME")); _res = _PyPegen_dummy_name(p, _literal, name_var); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_240[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_242[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'!' NAME")); } _res = NULL; @@ -39683,9 +39830,9 @@ _tmp_240_rule(Parser *p) return _res; } -// _tmp_241: ':' | '}' +// _tmp_243: ':' | '}' static void * -_tmp_241_rule(Parser *p) +_tmp_243_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -39701,18 +39848,18 @@ _tmp_241_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_241[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':'")); + D(fprintf(stderr, "%*c> _tmp_243[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 11)) // token=':' ) { - D(fprintf(stderr, "%*c+ _tmp_241[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':'")); + D(fprintf(stderr, "%*c+ _tmp_243[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_241[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_243[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "':'")); } { // '}' @@ -39720,18 +39867,18 @@ _tmp_241_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_241[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'}'")); + D(fprintf(stderr, "%*c> _tmp_243[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'}'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 26)) // token='}' ) { - D(fprintf(stderr, "%*c+ _tmp_241[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'}'")); + D(fprintf(stderr, "%*c+ _tmp_243[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'}'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_241[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_243[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'}'")); } _res = NULL; @@ -39740,9 +39887,9 @@ _tmp_241_rule(Parser *p) return _res; } -// _tmp_242: yield_expr | star_expressions +// _tmp_244: yield_expr | star_expressions static void * -_tmp_242_rule(Parser *p) +_tmp_244_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -39758,18 +39905,18 @@ _tmp_242_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_242[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "yield_expr")); + D(fprintf(stderr, "%*c> _tmp_244[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "yield_expr")); expr_ty yield_expr_var; if ( (yield_expr_var = yield_expr_rule(p)) // yield_expr ) { - D(fprintf(stderr, "%*c+ _tmp_242[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "yield_expr")); + D(fprintf(stderr, "%*c+ _tmp_244[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "yield_expr")); _res = yield_expr_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_242[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_244[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "yield_expr")); } { // star_expressions @@ -39777,18 +39924,18 @@ _tmp_242_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_242[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_expressions")); + D(fprintf(stderr, "%*c> _tmp_244[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_expressions")); expr_ty star_expressions_var; if ( (star_expressions_var = star_expressions_rule(p)) // star_expressions ) { - D(fprintf(stderr, "%*c+ _tmp_242[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_expressions")); + D(fprintf(stderr, "%*c+ _tmp_244[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_expressions")); _res = star_expressions_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_242[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_244[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_expressions")); } _res = NULL; @@ -39797,9 +39944,9 @@ _tmp_242_rule(Parser *p) return _res; } -// _tmp_243: '!' NAME +// _tmp_245: '!' NAME static void * -_tmp_243_rule(Parser *p) +_tmp_245_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -39815,7 +39962,7 @@ _tmp_243_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_243[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'!' NAME")); + D(fprintf(stderr, "%*c> _tmp_245[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'!' NAME")); Token * _literal; expr_ty name_var; if ( @@ -39824,12 +39971,12 @@ _tmp_243_rule(Parser *p) (name_var = _PyPegen_name_token(p)) // NAME ) { - D(fprintf(stderr, "%*c+ _tmp_243[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'!' NAME")); + D(fprintf(stderr, "%*c+ _tmp_245[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'!' NAME")); _res = _PyPegen_dummy_name(p, _literal, name_var); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_243[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_245[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'!' NAME")); } _res = NULL; @@ -39838,9 +39985,9 @@ _tmp_243_rule(Parser *p) return _res; } -// _loop0_244: fstring_format_spec +// _loop0_246: fstring_format_spec static asdl_seq * -_loop0_244_rule(Parser *p) +_loop0_246_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -39865,7 +40012,7 @@ _loop0_244_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_244[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "fstring_format_spec")); + D(fprintf(stderr, "%*c> _loop0_246[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "fstring_format_spec")); expr_ty fstring_format_spec_var; while ( (fstring_format_spec_var = fstring_format_spec_rule(p)) // fstring_format_spec @@ -39888,7 +40035,7 @@ _loop0_244_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_244[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_246[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "fstring_format_spec")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -39905,9 +40052,9 @@ _loop0_244_rule(Parser *p) return _seq; } -// _tmp_245: yield_expr | star_expressions +// _tmp_247: yield_expr | star_expressions static void * -_tmp_245_rule(Parser *p) +_tmp_247_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -39923,18 +40070,18 @@ _tmp_245_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_245[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "yield_expr")); + D(fprintf(stderr, "%*c> _tmp_247[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "yield_expr")); expr_ty yield_expr_var; if ( (yield_expr_var = yield_expr_rule(p)) // yield_expr ) { - D(fprintf(stderr, "%*c+ _tmp_245[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "yield_expr")); + D(fprintf(stderr, "%*c+ _tmp_247[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "yield_expr")); _res = yield_expr_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_245[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_247[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "yield_expr")); } { // star_expressions @@ -39942,18 +40089,18 @@ _tmp_245_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_245[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_expressions")); + D(fprintf(stderr, "%*c> _tmp_247[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_expressions")); expr_ty star_expressions_var; if ( (star_expressions_var = star_expressions_rule(p)) // star_expressions ) { - D(fprintf(stderr, "%*c+ _tmp_245[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_expressions")); + D(fprintf(stderr, "%*c+ _tmp_247[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_expressions")); _res = star_expressions_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_245[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_247[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_expressions")); } _res = NULL; @@ -39962,9 +40109,9 @@ _tmp_245_rule(Parser *p) return _res; } -// _tmp_246: '!' NAME +// _tmp_248: '!' NAME static void * -_tmp_246_rule(Parser *p) +_tmp_248_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -39980,7 +40127,7 @@ _tmp_246_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_246[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'!' NAME")); + D(fprintf(stderr, "%*c> _tmp_248[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'!' NAME")); Token * _literal; expr_ty name_var; if ( @@ -39989,12 +40136,12 @@ _tmp_246_rule(Parser *p) (name_var = _PyPegen_name_token(p)) // NAME ) { - D(fprintf(stderr, "%*c+ _tmp_246[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'!' NAME")); + D(fprintf(stderr, "%*c+ _tmp_248[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'!' NAME")); _res = _PyPegen_dummy_name(p, _literal, name_var); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_246[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_248[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'!' NAME")); } _res = NULL; @@ -40003,9 +40150,9 @@ _tmp_246_rule(Parser *p) return _res; } -// _tmp_247: ':' | '}' +// _tmp_249: ':' | '}' static void * -_tmp_247_rule(Parser *p) +_tmp_249_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -40021,18 +40168,18 @@ _tmp_247_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_247[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':'")); + D(fprintf(stderr, "%*c> _tmp_249[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 11)) // token=':' ) { - D(fprintf(stderr, "%*c+ _tmp_247[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':'")); + D(fprintf(stderr, "%*c+ _tmp_249[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_247[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_249[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "':'")); } { // '}' @@ -40040,18 +40187,18 @@ _tmp_247_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_247[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'}'")); + D(fprintf(stderr, "%*c> _tmp_249[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'}'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 26)) // token='}' ) { - D(fprintf(stderr, "%*c+ _tmp_247[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'}'")); + D(fprintf(stderr, "%*c+ _tmp_249[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'}'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_247[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_249[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'}'")); } _res = NULL; @@ -40060,9 +40207,9 @@ _tmp_247_rule(Parser *p) return _res; } -// _tmp_248: star_targets '=' +// _tmp_250: star_targets '=' static void * -_tmp_248_rule(Parser *p) +_tmp_250_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -40078,7 +40225,7 @@ _tmp_248_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_248[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_targets '='")); + D(fprintf(stderr, "%*c> _tmp_250[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_targets '='")); Token * _literal; expr_ty z; if ( @@ -40087,7 +40234,7 @@ _tmp_248_rule(Parser *p) (_literal = _PyPegen_expect_token(p, 22)) // token='=' ) { - D(fprintf(stderr, "%*c+ _tmp_248[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_targets '='")); + D(fprintf(stderr, "%*c+ _tmp_250[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_targets '='")); _res = z; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -40097,7 +40244,7 @@ _tmp_248_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_248[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_250[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_targets '='")); } _res = NULL; @@ -40106,9 +40253,9 @@ _tmp_248_rule(Parser *p) return _res; } -// _tmp_249: '.' | '...' +// _tmp_251: '.' | '...' static void * -_tmp_249_rule(Parser *p) +_tmp_251_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -40124,18 +40271,18 @@ _tmp_249_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_249[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'.'")); + D(fprintf(stderr, "%*c> _tmp_251[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'.'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 23)) // token='.' ) { - D(fprintf(stderr, "%*c+ _tmp_249[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'.'")); + D(fprintf(stderr, "%*c+ _tmp_251[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'.'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_249[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_251[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'.'")); } { // '...' @@ -40143,18 +40290,18 @@ _tmp_249_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_249[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'...'")); + D(fprintf(stderr, "%*c> _tmp_251[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'...'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 52)) // token='...' ) { - D(fprintf(stderr, "%*c+ _tmp_249[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'...'")); + D(fprintf(stderr, "%*c+ _tmp_251[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'...'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_249[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_251[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'...'")); } _res = NULL; @@ -40163,9 +40310,9 @@ _tmp_249_rule(Parser *p) return _res; } -// _tmp_250: '.' | '...' +// _tmp_252: '.' | '...' static void * -_tmp_250_rule(Parser *p) +_tmp_252_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -40181,18 +40328,18 @@ _tmp_250_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_250[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'.'")); + D(fprintf(stderr, "%*c> _tmp_252[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'.'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 23)) // token='.' ) { - D(fprintf(stderr, "%*c+ _tmp_250[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'.'")); + D(fprintf(stderr, "%*c+ _tmp_252[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'.'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_250[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_252[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'.'")); } { // '...' @@ -40200,18 +40347,18 @@ _tmp_250_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_250[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'...'")); + D(fprintf(stderr, "%*c> _tmp_252[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'...'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 52)) // token='...' ) { - D(fprintf(stderr, "%*c+ _tmp_250[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'...'")); + D(fprintf(stderr, "%*c+ _tmp_252[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'...'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_250[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_252[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'...'")); } _res = NULL; @@ -40220,9 +40367,9 @@ _tmp_250_rule(Parser *p) return _res; } -// _tmp_251: '@' named_expression NEWLINE +// _tmp_253: '@' named_expression NEWLINE static void * -_tmp_251_rule(Parser *p) +_tmp_253_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -40238,7 +40385,7 @@ _tmp_251_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_251[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'@' named_expression NEWLINE")); + D(fprintf(stderr, "%*c> _tmp_253[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'@' named_expression NEWLINE")); Token * _literal; expr_ty f; Token * newline_var; @@ -40250,7 +40397,7 @@ _tmp_251_rule(Parser *p) (newline_var = _PyPegen_expect_token(p, NEWLINE)) // token='NEWLINE' ) { - D(fprintf(stderr, "%*c+ _tmp_251[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'@' named_expression NEWLINE")); + D(fprintf(stderr, "%*c+ _tmp_253[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'@' named_expression NEWLINE")); _res = f; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -40260,7 +40407,7 @@ _tmp_251_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_251[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_253[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'@' named_expression NEWLINE")); } _res = NULL; @@ -40269,9 +40416,9 @@ _tmp_251_rule(Parser *p) return _res; } -// _tmp_252: ',' expression +// _tmp_254: ',' expression static void * -_tmp_252_rule(Parser *p) +_tmp_254_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -40287,7 +40434,7 @@ _tmp_252_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_252[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' expression")); + D(fprintf(stderr, "%*c> _tmp_254[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' expression")); Token * _literal; expr_ty c; if ( @@ -40296,7 +40443,7 @@ _tmp_252_rule(Parser *p) (c = expression_rule(p)) // expression ) { - D(fprintf(stderr, "%*c+ _tmp_252[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' expression")); + D(fprintf(stderr, "%*c+ _tmp_254[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' expression")); _res = c; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -40306,7 +40453,7 @@ _tmp_252_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_252[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_254[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' expression")); } _res = NULL; @@ -40315,9 +40462,9 @@ _tmp_252_rule(Parser *p) return _res; } -// _tmp_253: ',' star_expression +// _tmp_255: ',' star_expression static void * -_tmp_253_rule(Parser *p) +_tmp_255_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -40333,7 +40480,7 @@ _tmp_253_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_253[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' star_expression")); + D(fprintf(stderr, "%*c> _tmp_255[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' star_expression")); Token * _literal; expr_ty c; if ( @@ -40342,7 +40489,7 @@ _tmp_253_rule(Parser *p) (c = star_expression_rule(p)) // star_expression ) { - D(fprintf(stderr, "%*c+ _tmp_253[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' star_expression")); + D(fprintf(stderr, "%*c+ _tmp_255[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' star_expression")); _res = c; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -40352,7 +40499,7 @@ _tmp_253_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_253[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_255[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' star_expression")); } _res = NULL; @@ -40361,9 +40508,9 @@ _tmp_253_rule(Parser *p) return _res; } -// _tmp_254: 'or' conjunction +// _tmp_256: 'or' conjunction static void * -_tmp_254_rule(Parser *p) +_tmp_256_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -40379,7 +40526,7 @@ _tmp_254_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_254[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'or' conjunction")); + D(fprintf(stderr, "%*c> _tmp_256[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'or' conjunction")); Token * _keyword; expr_ty c; if ( @@ -40388,7 +40535,7 @@ _tmp_254_rule(Parser *p) (c = conjunction_rule(p)) // conjunction ) { - D(fprintf(stderr, "%*c+ _tmp_254[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'or' conjunction")); + D(fprintf(stderr, "%*c+ _tmp_256[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'or' conjunction")); _res = c; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -40398,7 +40545,7 @@ _tmp_254_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_254[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_256[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'or' conjunction")); } _res = NULL; @@ -40407,9 +40554,9 @@ _tmp_254_rule(Parser *p) return _res; } -// _tmp_255: 'and' inversion +// _tmp_257: 'and' inversion static void * -_tmp_255_rule(Parser *p) +_tmp_257_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -40425,7 +40572,7 @@ _tmp_255_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_255[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'and' inversion")); + D(fprintf(stderr, "%*c> _tmp_257[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'and' inversion")); Token * _keyword; expr_ty c; if ( @@ -40434,7 +40581,7 @@ _tmp_255_rule(Parser *p) (c = inversion_rule(p)) // inversion ) { - D(fprintf(stderr, "%*c+ _tmp_255[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'and' inversion")); + D(fprintf(stderr, "%*c+ _tmp_257[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'and' inversion")); _res = c; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -40444,7 +40591,7 @@ _tmp_255_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_255[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_257[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'and' inversion")); } _res = NULL; @@ -40453,9 +40600,9 @@ _tmp_255_rule(Parser *p) return _res; } -// _tmp_256: slice | starred_expression +// _tmp_258: slice | starred_expression static void * -_tmp_256_rule(Parser *p) +_tmp_258_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -40471,18 +40618,18 @@ _tmp_256_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_256[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "slice")); + D(fprintf(stderr, "%*c> _tmp_258[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "slice")); expr_ty slice_var; if ( (slice_var = slice_rule(p)) // slice ) { - D(fprintf(stderr, "%*c+ _tmp_256[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "slice")); + D(fprintf(stderr, "%*c+ _tmp_258[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "slice")); _res = slice_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_256[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_258[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "slice")); } { // starred_expression @@ -40490,18 +40637,18 @@ _tmp_256_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_256[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "starred_expression")); + D(fprintf(stderr, "%*c> _tmp_258[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "starred_expression")); expr_ty starred_expression_var; if ( (starred_expression_var = starred_expression_rule(p)) // starred_expression ) { - D(fprintf(stderr, "%*c+ _tmp_256[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "starred_expression")); + D(fprintf(stderr, "%*c+ _tmp_258[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "starred_expression")); _res = starred_expression_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_256[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_258[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "starred_expression")); } _res = NULL; @@ -40510,9 +40657,9 @@ _tmp_256_rule(Parser *p) return _res; } -// _tmp_257: fstring | string +// _tmp_259: fstring | string static void * -_tmp_257_rule(Parser *p) +_tmp_259_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -40528,18 +40675,18 @@ _tmp_257_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_257[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "fstring")); + D(fprintf(stderr, "%*c> _tmp_259[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "fstring")); expr_ty fstring_var; if ( (fstring_var = fstring_rule(p)) // fstring ) { - D(fprintf(stderr, "%*c+ _tmp_257[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "fstring")); + D(fprintf(stderr, "%*c+ _tmp_259[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "fstring")); _res = fstring_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_257[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_259[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "fstring")); } { // string @@ -40547,18 +40694,18 @@ _tmp_257_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_257[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "string")); + D(fprintf(stderr, "%*c> _tmp_259[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "string")); expr_ty string_var; if ( (string_var = string_rule(p)) // string ) { - D(fprintf(stderr, "%*c+ _tmp_257[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "string")); + D(fprintf(stderr, "%*c+ _tmp_259[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "string")); _res = string_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_257[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_259[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "string")); } _res = NULL; @@ -40567,9 +40714,9 @@ _tmp_257_rule(Parser *p) return _res; } -// _tmp_258: 'if' disjunction +// _tmp_260: 'if' disjunction static void * -_tmp_258_rule(Parser *p) +_tmp_260_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -40585,7 +40732,7 @@ _tmp_258_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_258[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'if' disjunction")); + D(fprintf(stderr, "%*c> _tmp_260[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'if' disjunction")); Token * _keyword; expr_ty z; if ( @@ -40594,7 +40741,7 @@ _tmp_258_rule(Parser *p) (z = disjunction_rule(p)) // disjunction ) { - D(fprintf(stderr, "%*c+ _tmp_258[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'if' disjunction")); + D(fprintf(stderr, "%*c+ _tmp_260[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'if' disjunction")); _res = z; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -40604,7 +40751,7 @@ _tmp_258_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_258[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_260[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'if' disjunction")); } _res = NULL; @@ -40613,9 +40760,9 @@ _tmp_258_rule(Parser *p) return _res; } -// _tmp_259: 'if' disjunction +// _tmp_261: 'if' disjunction static void * -_tmp_259_rule(Parser *p) +_tmp_261_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -40631,7 +40778,7 @@ _tmp_259_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_259[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'if' disjunction")); + D(fprintf(stderr, "%*c> _tmp_261[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'if' disjunction")); Token * _keyword; expr_ty z; if ( @@ -40640,7 +40787,7 @@ _tmp_259_rule(Parser *p) (z = disjunction_rule(p)) // disjunction ) { - D(fprintf(stderr, "%*c+ _tmp_259[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'if' disjunction")); + D(fprintf(stderr, "%*c+ _tmp_261[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'if' disjunction")); _res = z; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -40650,7 +40797,7 @@ _tmp_259_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_259[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_261[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'if' disjunction")); } _res = NULL; @@ -40659,9 +40806,9 @@ _tmp_259_rule(Parser *p) return _res; } -// _tmp_260: starred_expression | (assignment_expression | expression !':=') !'=' +// _tmp_262: starred_expression | (assignment_expression | expression !':=') !'=' static void * -_tmp_260_rule(Parser *p) +_tmp_262_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -40677,18 +40824,18 @@ _tmp_260_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_260[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "starred_expression")); + D(fprintf(stderr, "%*c> _tmp_262[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "starred_expression")); expr_ty starred_expression_var; if ( (starred_expression_var = starred_expression_rule(p)) // starred_expression ) { - D(fprintf(stderr, "%*c+ _tmp_260[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "starred_expression")); + D(fprintf(stderr, "%*c+ _tmp_262[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "starred_expression")); _res = starred_expression_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_260[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_262[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "starred_expression")); } { // (assignment_expression | expression !':=') !'=' @@ -40696,20 +40843,20 @@ _tmp_260_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_260[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(assignment_expression | expression !':=') !'='")); - void *_tmp_273_var; + D(fprintf(stderr, "%*c> _tmp_262[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(assignment_expression | expression !':=') !'='")); + void *_tmp_276_var; if ( - (_tmp_273_var = _tmp_273_rule(p)) // assignment_expression | expression !':=' + (_tmp_276_var = _tmp_276_rule(p)) // assignment_expression | expression !':=' && _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, 22) // token='=' ) { - D(fprintf(stderr, "%*c+ _tmp_260[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "(assignment_expression | expression !':=') !'='")); - _res = _tmp_273_var; + D(fprintf(stderr, "%*c+ _tmp_262[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "(assignment_expression | expression !':=') !'='")); + _res = _tmp_276_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_260[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_262[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(assignment_expression | expression !':=') !'='")); } _res = NULL; @@ -40718,9 +40865,9 @@ _tmp_260_rule(Parser *p) return _res; } -// _tmp_261: ',' star_target +// _tmp_263: ',' star_target static void * -_tmp_261_rule(Parser *p) +_tmp_263_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -40736,7 +40883,7 @@ _tmp_261_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_261[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' star_target")); + D(fprintf(stderr, "%*c> _tmp_263[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' star_target")); Token * _literal; expr_ty c; if ( @@ -40745,7 +40892,7 @@ _tmp_261_rule(Parser *p) (c = star_target_rule(p)) // star_target ) { - D(fprintf(stderr, "%*c+ _tmp_261[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' star_target")); + D(fprintf(stderr, "%*c+ _tmp_263[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' star_target")); _res = c; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -40755,7 +40902,7 @@ _tmp_261_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_261[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_263[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' star_target")); } _res = NULL; @@ -40764,9 +40911,9 @@ _tmp_261_rule(Parser *p) return _res; } -// _tmp_262: ',' star_target +// _tmp_264: ',' star_target static void * -_tmp_262_rule(Parser *p) +_tmp_264_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -40782,7 +40929,7 @@ _tmp_262_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_262[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' star_target")); + D(fprintf(stderr, "%*c> _tmp_264[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' star_target")); Token * _literal; expr_ty c; if ( @@ -40791,7 +40938,7 @@ _tmp_262_rule(Parser *p) (c = star_target_rule(p)) // star_target ) { - D(fprintf(stderr, "%*c+ _tmp_262[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' star_target")); + D(fprintf(stderr, "%*c+ _tmp_264[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' star_target")); _res = c; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -40801,7 +40948,7 @@ _tmp_262_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_262[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_264[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' star_target")); } _res = NULL; @@ -40810,10 +40957,10 @@ _tmp_262_rule(Parser *p) return _res; } -// _tmp_263: +// _tmp_265: // | ','.(starred_expression | (assignment_expression | expression !':=') !'=')+ ',' kwargs static void * -_tmp_263_rule(Parser *p) +_tmp_265_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -40829,24 +40976,24 @@ _tmp_263_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_263[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.(starred_expression | (assignment_expression | expression !':=') !'=')+ ',' kwargs")); - asdl_seq * _gather_274_var; + D(fprintf(stderr, "%*c> _tmp_265[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.(starred_expression | (assignment_expression | expression !':=') !'=')+ ',' kwargs")); + asdl_seq * _gather_277_var; Token * _literal; asdl_seq* kwargs_var; if ( - (_gather_274_var = _gather_274_rule(p)) // ','.(starred_expression | (assignment_expression | expression !':=') !'=')+ + (_gather_277_var = _gather_277_rule(p)) // ','.(starred_expression | (assignment_expression | expression !':=') !'=')+ && (_literal = _PyPegen_expect_token(p, 12)) // token=',' && (kwargs_var = kwargs_rule(p)) // kwargs ) { - D(fprintf(stderr, "%*c+ _tmp_263[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.(starred_expression | (assignment_expression | expression !':=') !'=')+ ',' kwargs")); - _res = _PyPegen_dummy_name(p, _gather_274_var, _literal, kwargs_var); + D(fprintf(stderr, "%*c+ _tmp_265[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.(starred_expression | (assignment_expression | expression !':=') !'=')+ ',' kwargs")); + _res = _PyPegen_dummy_name(p, _gather_277_var, _literal, kwargs_var); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_263[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_265[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','.(starred_expression | (assignment_expression | expression !':=') !'=')+ ',' kwargs")); } _res = NULL; @@ -40855,9 +41002,49 @@ _tmp_263_rule(Parser *p) return _res; } -// _tmp_264: star_targets '=' +// _tmp_266: starred_expression !'=' static void * -_tmp_264_rule(Parser *p) +_tmp_266_rule(Parser *p) +{ + if (p->level++ == MAXSTACK) { + _Pypegen_stack_overflow(p); + } + if (p->error_indicator) { + p->level--; + return NULL; + } + void * _res = NULL; + int _mark = p->mark; + { // starred_expression !'=' + if (p->error_indicator) { + p->level--; + return NULL; + } + D(fprintf(stderr, "%*c> _tmp_266[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "starred_expression !'='")); + expr_ty starred_expression_var; + if ( + (starred_expression_var = starred_expression_rule(p)) // starred_expression + && + _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, 22) // token='=' + ) + { + D(fprintf(stderr, "%*c+ _tmp_266[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "starred_expression !'='")); + _res = starred_expression_var; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s _tmp_266[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "starred_expression !'='")); + } + _res = NULL; + done: + p->level--; + return _res; +} + +// _tmp_267: star_targets '=' +static void * +_tmp_267_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -40873,7 +41060,7 @@ _tmp_264_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_264[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_targets '='")); + D(fprintf(stderr, "%*c> _tmp_267[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_targets '='")); Token * _literal; expr_ty star_targets_var; if ( @@ -40882,12 +41069,12 @@ _tmp_264_rule(Parser *p) (_literal = _PyPegen_expect_token(p, 22)) // token='=' ) { - D(fprintf(stderr, "%*c+ _tmp_264[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_targets '='")); + D(fprintf(stderr, "%*c+ _tmp_267[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_targets '='")); _res = _PyPegen_dummy_name(p, star_targets_var, _literal); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_264[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_267[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_targets '='")); } _res = NULL; @@ -40896,9 +41083,9 @@ _tmp_264_rule(Parser *p) return _res; } -// _tmp_265: star_targets '=' +// _tmp_268: star_targets '=' static void * -_tmp_265_rule(Parser *p) +_tmp_268_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -40914,7 +41101,7 @@ _tmp_265_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_265[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_targets '='")); + D(fprintf(stderr, "%*c> _tmp_268[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_targets '='")); Token * _literal; expr_ty star_targets_var; if ( @@ -40923,12 +41110,12 @@ _tmp_265_rule(Parser *p) (_literal = _PyPegen_expect_token(p, 22)) // token='=' ) { - D(fprintf(stderr, "%*c+ _tmp_265[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_targets '='")); + D(fprintf(stderr, "%*c+ _tmp_268[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_targets '='")); _res = _PyPegen_dummy_name(p, star_targets_var, _literal); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_265[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_268[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_targets '='")); } _res = NULL; @@ -40937,9 +41124,9 @@ _tmp_265_rule(Parser *p) return _res; } -// _tmp_266: ')' | '**' +// _tmp_269: ')' | '**' static void * -_tmp_266_rule(Parser *p) +_tmp_269_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -40955,18 +41142,18 @@ _tmp_266_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_266[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "')'")); + D(fprintf(stderr, "%*c> _tmp_269[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "')'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 8)) // token=')' ) { - D(fprintf(stderr, "%*c+ _tmp_266[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "')'")); + D(fprintf(stderr, "%*c+ _tmp_269[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "')'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_266[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_269[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "')'")); } { // '**' @@ -40974,18 +41161,18 @@ _tmp_266_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_266[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**'")); + D(fprintf(stderr, "%*c> _tmp_269[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 35)) // token='**' ) { - D(fprintf(stderr, "%*c+ _tmp_266[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**'")); + D(fprintf(stderr, "%*c+ _tmp_269[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_266[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_269[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'**'")); } _res = NULL; @@ -40994,9 +41181,9 @@ _tmp_266_rule(Parser *p) return _res; } -// _tmp_267: ':' | '**' +// _tmp_270: ':' | '**' static void * -_tmp_267_rule(Parser *p) +_tmp_270_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -41012,18 +41199,18 @@ _tmp_267_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_267[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':'")); + D(fprintf(stderr, "%*c> _tmp_270[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 11)) // token=':' ) { - D(fprintf(stderr, "%*c+ _tmp_267[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':'")); + D(fprintf(stderr, "%*c+ _tmp_270[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_267[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_270[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "':'")); } { // '**' @@ -41031,18 +41218,18 @@ _tmp_267_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_267[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**'")); + D(fprintf(stderr, "%*c> _tmp_270[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**'")); Token * _literal; if ( (_literal = _PyPegen_expect_token(p, 35)) // token='**' ) { - D(fprintf(stderr, "%*c+ _tmp_267[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**'")); + D(fprintf(stderr, "%*c+ _tmp_270[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**'")); _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_267[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_270[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'**'")); } _res = NULL; @@ -41051,9 +41238,9 @@ _tmp_267_rule(Parser *p) return _res; } -// _tmp_268: expression ['as' star_target] +// _tmp_271: expression ['as' star_target] static void * -_tmp_268_rule(Parser *p) +_tmp_271_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -41069,22 +41256,22 @@ _tmp_268_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_268[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression ['as' star_target]")); + D(fprintf(stderr, "%*c> _tmp_271[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression ['as' star_target]")); void *_opt_var; UNUSED(_opt_var); // Silence compiler warnings expr_ty expression_var; if ( (expression_var = expression_rule(p)) // expression && - (_opt_var = _tmp_276_rule(p), !p->error_indicator) // ['as' star_target] + (_opt_var = _tmp_279_rule(p), !p->error_indicator) // ['as' star_target] ) { - D(fprintf(stderr, "%*c+ _tmp_268[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression ['as' star_target]")); + D(fprintf(stderr, "%*c+ _tmp_271[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression ['as' star_target]")); _res = _PyPegen_dummy_name(p, expression_var, _opt_var); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_268[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_271[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression ['as' star_target]")); } _res = NULL; @@ -41093,9 +41280,9 @@ _tmp_268_rule(Parser *p) return _res; } -// _tmp_269: expressions ['as' star_target] +// _tmp_272: expressions ['as' star_target] static void * -_tmp_269_rule(Parser *p) +_tmp_272_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -41111,22 +41298,22 @@ _tmp_269_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_269[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expressions ['as' star_target]")); + D(fprintf(stderr, "%*c> _tmp_272[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expressions ['as' star_target]")); void *_opt_var; UNUSED(_opt_var); // Silence compiler warnings expr_ty expressions_var; if ( (expressions_var = expressions_rule(p)) // expressions && - (_opt_var = _tmp_277_rule(p), !p->error_indicator) // ['as' star_target] + (_opt_var = _tmp_280_rule(p), !p->error_indicator) // ['as' star_target] ) { - D(fprintf(stderr, "%*c+ _tmp_269[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expressions ['as' star_target]")); + D(fprintf(stderr, "%*c+ _tmp_272[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expressions ['as' star_target]")); _res = _PyPegen_dummy_name(p, expressions_var, _opt_var); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_269[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_272[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expressions ['as' star_target]")); } _res = NULL; @@ -41135,9 +41322,9 @@ _tmp_269_rule(Parser *p) return _res; } -// _tmp_270: expression ['as' star_target] +// _tmp_273: expression ['as' star_target] static void * -_tmp_270_rule(Parser *p) +_tmp_273_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -41153,22 +41340,22 @@ _tmp_270_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_270[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression ['as' star_target]")); + D(fprintf(stderr, "%*c> _tmp_273[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression ['as' star_target]")); void *_opt_var; UNUSED(_opt_var); // Silence compiler warnings expr_ty expression_var; if ( (expression_var = expression_rule(p)) // expression && - (_opt_var = _tmp_278_rule(p), !p->error_indicator) // ['as' star_target] + (_opt_var = _tmp_281_rule(p), !p->error_indicator) // ['as' star_target] ) { - D(fprintf(stderr, "%*c+ _tmp_270[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression ['as' star_target]")); + D(fprintf(stderr, "%*c+ _tmp_273[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression ['as' star_target]")); _res = _PyPegen_dummy_name(p, expression_var, _opt_var); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_270[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_273[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression ['as' star_target]")); } _res = NULL; @@ -41177,9 +41364,9 @@ _tmp_270_rule(Parser *p) return _res; } -// _tmp_271: expressions ['as' star_target] +// _tmp_274: expressions ['as' star_target] static void * -_tmp_271_rule(Parser *p) +_tmp_274_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -41195,22 +41382,22 @@ _tmp_271_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_271[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expressions ['as' star_target]")); + D(fprintf(stderr, "%*c> _tmp_274[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expressions ['as' star_target]")); void *_opt_var; UNUSED(_opt_var); // Silence compiler warnings expr_ty expressions_var; if ( (expressions_var = expressions_rule(p)) // expressions && - (_opt_var = _tmp_279_rule(p), !p->error_indicator) // ['as' star_target] + (_opt_var = _tmp_282_rule(p), !p->error_indicator) // ['as' star_target] ) { - D(fprintf(stderr, "%*c+ _tmp_271[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expressions ['as' star_target]")); + D(fprintf(stderr, "%*c+ _tmp_274[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expressions ['as' star_target]")); _res = _PyPegen_dummy_name(p, expressions_var, _opt_var); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_271[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_274[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expressions ['as' star_target]")); } _res = NULL; @@ -41219,9 +41406,9 @@ _tmp_271_rule(Parser *p) return _res; } -// _tmp_272: 'as' NAME +// _tmp_275: 'as' NAME static void * -_tmp_272_rule(Parser *p) +_tmp_275_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -41237,7 +41424,7 @@ _tmp_272_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_272[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' NAME")); + D(fprintf(stderr, "%*c> _tmp_275[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' NAME")); Token * _keyword; expr_ty name_var; if ( @@ -41246,12 +41433,12 @@ _tmp_272_rule(Parser *p) (name_var = _PyPegen_name_token(p)) // NAME ) { - D(fprintf(stderr, "%*c+ _tmp_272[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' NAME")); + D(fprintf(stderr, "%*c+ _tmp_275[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' NAME")); _res = _PyPegen_dummy_name(p, _keyword, name_var); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_272[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_275[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'as' NAME")); } _res = NULL; @@ -41260,9 +41447,9 @@ _tmp_272_rule(Parser *p) return _res; } -// _tmp_273: assignment_expression | expression !':=' +// _tmp_276: assignment_expression | expression !':=' static void * -_tmp_273_rule(Parser *p) +_tmp_276_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -41278,18 +41465,18 @@ _tmp_273_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_273[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "assignment_expression")); + D(fprintf(stderr, "%*c> _tmp_276[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "assignment_expression")); expr_ty assignment_expression_var; if ( (assignment_expression_var = assignment_expression_rule(p)) // assignment_expression ) { - D(fprintf(stderr, "%*c+ _tmp_273[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "assignment_expression")); + D(fprintf(stderr, "%*c+ _tmp_276[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "assignment_expression")); _res = assignment_expression_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_273[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_276[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "assignment_expression")); } { // expression !':=' @@ -41297,7 +41484,7 @@ _tmp_273_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_273[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression !':='")); + D(fprintf(stderr, "%*c> _tmp_276[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression !':='")); expr_ty expression_var; if ( (expression_var = expression_rule(p)) // expression @@ -41305,12 +41492,12 @@ _tmp_273_rule(Parser *p) _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, 53) // token=':=' ) { - D(fprintf(stderr, "%*c+ _tmp_273[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression !':='")); + D(fprintf(stderr, "%*c+ _tmp_276[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression !':='")); _res = expression_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_273[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_276[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression !':='")); } _res = NULL; @@ -41319,9 +41506,9 @@ _tmp_273_rule(Parser *p) return _res; } -// _loop0_275: ',' (starred_expression | (assignment_expression | expression !':=') !'=') +// _loop0_278: ',' (starred_expression | (assignment_expression | expression !':=') !'=') static asdl_seq * -_loop0_275_rule(Parser *p) +_loop0_278_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -41346,13 +41533,13 @@ _loop0_275_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _loop0_275[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (starred_expression | (assignment_expression | expression !':=') !'=')")); + D(fprintf(stderr, "%*c> _loop0_278[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (starred_expression | (assignment_expression | expression !':=') !'=')")); Token * _literal; void *elem; while ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' && - (elem = _tmp_280_rule(p)) // starred_expression | (assignment_expression | expression !':=') !'=' + (elem = _tmp_283_rule(p)) // starred_expression | (assignment_expression | expression !':=') !'=' ) { _res = elem; @@ -41378,7 +41565,7 @@ _loop0_275_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_275[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop0_278[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' (starred_expression | (assignment_expression | expression !':=') !'=')")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); @@ -41395,10 +41582,10 @@ _loop0_275_rule(Parser *p) return _seq; } -// _gather_274: -// | (starred_expression | (assignment_expression | expression !':=') !'=') _loop0_275 +// _gather_277: +// | (starred_expression | (assignment_expression | expression !':=') !'=') _loop0_278 static asdl_seq * -_gather_274_rule(Parser *p) +_gather_277_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -41409,27 +41596,27 @@ _gather_274_rule(Parser *p) } asdl_seq * _res = NULL; int _mark = p->mark; - { // (starred_expression | (assignment_expression | expression !':=') !'=') _loop0_275 + { // (starred_expression | (assignment_expression | expression !':=') !'=') _loop0_278 if (p->error_indicator) { p->level--; return NULL; } - D(fprintf(stderr, "%*c> _gather_274[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(starred_expression | (assignment_expression | expression !':=') !'=') _loop0_275")); + D(fprintf(stderr, "%*c> _gather_277[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(starred_expression | (assignment_expression | expression !':=') !'=') _loop0_278")); void *elem; asdl_seq * seq; if ( - (elem = _tmp_280_rule(p)) // starred_expression | (assignment_expression | expression !':=') !'=' + (elem = _tmp_283_rule(p)) // starred_expression | (assignment_expression | expression !':=') !'=' && - (seq = _loop0_275_rule(p)) // _loop0_275 + (seq = _loop0_278_rule(p)) // _loop0_278 ) { - D(fprintf(stderr, "%*c+ _gather_274[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "(starred_expression | (assignment_expression | expression !':=') !'=') _loop0_275")); + D(fprintf(stderr, "%*c+ _gather_277[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "(starred_expression | (assignment_expression | expression !':=') !'=') _loop0_278")); _res = _PyPegen_seq_insert_in_front(p, elem, seq); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _gather_274[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(starred_expression | (assignment_expression | expression !':=') !'=') _loop0_275")); + D(fprintf(stderr, "%*c%s _gather_277[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(starred_expression | (assignment_expression | expression !':=') !'=') _loop0_278")); } _res = NULL; done: @@ -41437,9 +41624,9 @@ _gather_274_rule(Parser *p) return _res; } -// _tmp_276: 'as' star_target +// _tmp_279: 'as' star_target static void * -_tmp_276_rule(Parser *p) +_tmp_279_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -41455,7 +41642,7 @@ _tmp_276_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_276[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' star_target")); + D(fprintf(stderr, "%*c> _tmp_279[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' star_target")); Token * _keyword; expr_ty star_target_var; if ( @@ -41464,12 +41651,12 @@ _tmp_276_rule(Parser *p) (star_target_var = star_target_rule(p)) // star_target ) { - D(fprintf(stderr, "%*c+ _tmp_276[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' star_target")); + D(fprintf(stderr, "%*c+ _tmp_279[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' star_target")); _res = _PyPegen_dummy_name(p, _keyword, star_target_var); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_276[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_279[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'as' star_target")); } _res = NULL; @@ -41478,9 +41665,9 @@ _tmp_276_rule(Parser *p) return _res; } -// _tmp_277: 'as' star_target +// _tmp_280: 'as' star_target static void * -_tmp_277_rule(Parser *p) +_tmp_280_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -41496,7 +41683,7 @@ _tmp_277_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_277[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' star_target")); + D(fprintf(stderr, "%*c> _tmp_280[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' star_target")); Token * _keyword; expr_ty star_target_var; if ( @@ -41505,12 +41692,12 @@ _tmp_277_rule(Parser *p) (star_target_var = star_target_rule(p)) // star_target ) { - D(fprintf(stderr, "%*c+ _tmp_277[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' star_target")); + D(fprintf(stderr, "%*c+ _tmp_280[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' star_target")); _res = _PyPegen_dummy_name(p, _keyword, star_target_var); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_277[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_280[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'as' star_target")); } _res = NULL; @@ -41519,9 +41706,9 @@ _tmp_277_rule(Parser *p) return _res; } -// _tmp_278: 'as' star_target +// _tmp_281: 'as' star_target static void * -_tmp_278_rule(Parser *p) +_tmp_281_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -41537,7 +41724,7 @@ _tmp_278_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_278[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' star_target")); + D(fprintf(stderr, "%*c> _tmp_281[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' star_target")); Token * _keyword; expr_ty star_target_var; if ( @@ -41546,12 +41733,12 @@ _tmp_278_rule(Parser *p) (star_target_var = star_target_rule(p)) // star_target ) { - D(fprintf(stderr, "%*c+ _tmp_278[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' star_target")); + D(fprintf(stderr, "%*c+ _tmp_281[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' star_target")); _res = _PyPegen_dummy_name(p, _keyword, star_target_var); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_278[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_281[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'as' star_target")); } _res = NULL; @@ -41560,9 +41747,9 @@ _tmp_278_rule(Parser *p) return _res; } -// _tmp_279: 'as' star_target +// _tmp_282: 'as' star_target static void * -_tmp_279_rule(Parser *p) +_tmp_282_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -41578,7 +41765,7 @@ _tmp_279_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_279[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' star_target")); + D(fprintf(stderr, "%*c> _tmp_282[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' star_target")); Token * _keyword; expr_ty star_target_var; if ( @@ -41587,12 +41774,12 @@ _tmp_279_rule(Parser *p) (star_target_var = star_target_rule(p)) // star_target ) { - D(fprintf(stderr, "%*c+ _tmp_279[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' star_target")); + D(fprintf(stderr, "%*c+ _tmp_282[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' star_target")); _res = _PyPegen_dummy_name(p, _keyword, star_target_var); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_279[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_282[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'as' star_target")); } _res = NULL; @@ -41601,9 +41788,9 @@ _tmp_279_rule(Parser *p) return _res; } -// _tmp_280: starred_expression | (assignment_expression | expression !':=') !'=' +// _tmp_283: starred_expression | (assignment_expression | expression !':=') !'=' static void * -_tmp_280_rule(Parser *p) +_tmp_283_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -41619,18 +41806,18 @@ _tmp_280_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_280[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "starred_expression")); + D(fprintf(stderr, "%*c> _tmp_283[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "starred_expression")); expr_ty starred_expression_var; if ( (starred_expression_var = starred_expression_rule(p)) // starred_expression ) { - D(fprintf(stderr, "%*c+ _tmp_280[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "starred_expression")); + D(fprintf(stderr, "%*c+ _tmp_283[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "starred_expression")); _res = starred_expression_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_280[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_283[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "starred_expression")); } { // (assignment_expression | expression !':=') !'=' @@ -41638,20 +41825,20 @@ _tmp_280_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_280[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(assignment_expression | expression !':=') !'='")); - void *_tmp_281_var; + D(fprintf(stderr, "%*c> _tmp_283[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(assignment_expression | expression !':=') !'='")); + void *_tmp_284_var; if ( - (_tmp_281_var = _tmp_281_rule(p)) // assignment_expression | expression !':=' + (_tmp_284_var = _tmp_284_rule(p)) // assignment_expression | expression !':=' && _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, 22) // token='=' ) { - D(fprintf(stderr, "%*c+ _tmp_280[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "(assignment_expression | expression !':=') !'='")); - _res = _tmp_281_var; + D(fprintf(stderr, "%*c+ _tmp_283[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "(assignment_expression | expression !':=') !'='")); + _res = _tmp_284_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_280[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_283[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(assignment_expression | expression !':=') !'='")); } _res = NULL; @@ -41660,9 +41847,9 @@ _tmp_280_rule(Parser *p) return _res; } -// _tmp_281: assignment_expression | expression !':=' +// _tmp_284: assignment_expression | expression !':=' static void * -_tmp_281_rule(Parser *p) +_tmp_284_rule(Parser *p) { if (p->level++ == MAXSTACK) { _Pypegen_stack_overflow(p); @@ -41678,18 +41865,18 @@ _tmp_281_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_281[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "assignment_expression")); + D(fprintf(stderr, "%*c> _tmp_284[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "assignment_expression")); expr_ty assignment_expression_var; if ( (assignment_expression_var = assignment_expression_rule(p)) // assignment_expression ) { - D(fprintf(stderr, "%*c+ _tmp_281[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "assignment_expression")); + D(fprintf(stderr, "%*c+ _tmp_284[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "assignment_expression")); _res = assignment_expression_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_281[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_284[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "assignment_expression")); } { // expression !':=' @@ -41697,7 +41884,7 @@ _tmp_281_rule(Parser *p) p->level--; return NULL; } - D(fprintf(stderr, "%*c> _tmp_281[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression !':='")); + D(fprintf(stderr, "%*c> _tmp_284[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression !':='")); expr_ty expression_var; if ( (expression_var = expression_rule(p)) // expression @@ -41705,12 +41892,12 @@ _tmp_281_rule(Parser *p) _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, 53) // token=':=' ) { - D(fprintf(stderr, "%*c+ _tmp_281[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression !':='")); + D(fprintf(stderr, "%*c+ _tmp_284[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression !':='")); _res = expression_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_281[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _tmp_284[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression !':='")); } _res = NULL; diff --git a/contrib/tools/python3/Parser/pegen_errors.c b/contrib/tools/python3/Parser/pegen_errors.c index cefec5d275..72f1349897 100644 --- a/contrib/tools/python3/Parser/pegen_errors.c +++ b/contrib/tools/python3/Parser/pegen_errors.c @@ -367,20 +367,18 @@ _PyPegen_raise_error_known_location(Parser *p, PyObject *errtype, Py_ssize_t col_number = col_offset; Py_ssize_t end_col_number = end_col_offset; - if (p->tok->encoding != NULL) { - col_number = _PyPegen_byte_offset_to_character_offset(error_line, col_offset); - if (col_number < 0) { + col_number = _PyPegen_byte_offset_to_character_offset(error_line, col_offset); + if (col_number < 0) { + goto error; + } + + if (end_col_offset > 0) { + end_col_number = _PyPegen_byte_offset_to_character_offset(error_line, end_col_offset); + if (end_col_number < 0) { goto error; } - if (end_col_number > 0) { - Py_ssize_t end_col_offset = _PyPegen_byte_offset_to_character_offset(error_line, end_col_number); - if (end_col_offset < 0) { - goto error; - } else { - end_col_number = end_col_offset; - } - } } + tmp = Py_BuildValue("(OnnNnn)", p->tok->filename, lineno, col_number, error_line, end_lineno, end_col_number); if (!tmp) { goto error; diff --git a/contrib/tools/python3/Python/Python-ast.c b/contrib/tools/python3/Python/Python-ast.c index 6c95f07c38..ecaff2041f 100644 --- a/contrib/tools/python3/Python/Python-ast.c +++ b/contrib/tools/python3/Python/Python-ast.c @@ -13152,15 +13152,14 @@ PyObject* PyAST_mod2obj(mod_ty t) int starting_recursion_depth; /* Be careful here to prevent overflow. */ - int COMPILER_STACK_FRAME_SCALE = 2; PyThreadState *tstate = _PyThreadState_GET(); if (!tstate) { return NULL; } struct validator vstate; - vstate.recursion_limit = C_RECURSION_LIMIT * COMPILER_STACK_FRAME_SCALE; + vstate.recursion_limit = C_RECURSION_LIMIT; int recursion_depth = C_RECURSION_LIMIT - tstate->c_recursion_remaining; - starting_recursion_depth = recursion_depth * COMPILER_STACK_FRAME_SCALE; + starting_recursion_depth = recursion_depth; vstate.recursion_depth = starting_recursion_depth; PyObject *result = ast2obj_mod(state, &vstate, t); diff --git a/contrib/tools/python3/Python/ast.c b/contrib/tools/python3/Python/ast.c index 82d7beec0e..76f6556ded 100644 --- a/contrib/tools/python3/Python/ast.c +++ b/contrib/tools/python3/Python/ast.c @@ -1038,9 +1038,6 @@ validate_type_params(struct validator *state, asdl_type_param_seq *tps) } -/* See comments in symtable.c. */ -#define COMPILER_STACK_FRAME_SCALE 2 - int _PyAST_Validate(mod_ty mod) { @@ -1057,9 +1054,9 @@ _PyAST_Validate(mod_ty mod) } /* Be careful here to prevent overflow. */ int recursion_depth = C_RECURSION_LIMIT - tstate->c_recursion_remaining; - starting_recursion_depth = recursion_depth * COMPILER_STACK_FRAME_SCALE; + starting_recursion_depth = recursion_depth; state.recursion_depth = starting_recursion_depth; - state.recursion_limit = C_RECURSION_LIMIT * COMPILER_STACK_FRAME_SCALE; + state.recursion_limit = C_RECURSION_LIMIT; switch (mod->kind) { case Module_kind: diff --git a/contrib/tools/python3/Python/ast_opt.c b/contrib/tools/python3/Python/ast_opt.c index f8c4a95132..e881b7fe2d 100644 --- a/contrib/tools/python3/Python/ast_opt.c +++ b/contrib/tools/python3/Python/ast_opt.c @@ -1102,9 +1102,6 @@ astfold_type_param(type_param_ty node_, PyArena *ctx_, _PyASTOptimizeState *stat #undef CALL_OPT #undef CALL_SEQ -/* See comments in symtable.c. */ -#define COMPILER_STACK_FRAME_SCALE 2 - int _PyAST_Optimize(mod_ty mod, PyArena *arena, _PyASTOptimizeState *state) { @@ -1118,9 +1115,9 @@ _PyAST_Optimize(mod_ty mod, PyArena *arena, _PyASTOptimizeState *state) } /* Be careful here to prevent overflow. */ int recursion_depth = C_RECURSION_LIMIT - tstate->c_recursion_remaining; - starting_recursion_depth = recursion_depth * COMPILER_STACK_FRAME_SCALE; + starting_recursion_depth = recursion_depth; state->recursion_depth = starting_recursion_depth; - state->recursion_limit = C_RECURSION_LIMIT * COMPILER_STACK_FRAME_SCALE; + state->recursion_limit = C_RECURSION_LIMIT; int ret = astfold_mod(mod, arena, state); assert(ret || PyErr_Occurred()); diff --git a/contrib/tools/python3/Python/compile.c b/contrib/tools/python3/Python/compile.c index ddd7b5c795..a871e9c417 100644 --- a/contrib/tools/python3/Python/compile.c +++ b/contrib/tools/python3/Python/compile.c @@ -3883,7 +3883,7 @@ compiler_assert(struct compiler *c, stmt_ty s) VISIT(c, expr, s->v.Assert.msg); ADDOP_I(c, LOC(s), CALL, 0); } - ADDOP_I(c, LOC(s), RAISE_VARARGS, 1); + ADDOP_I(c, LOC(s->v.Assert.test), RAISE_VARARGS, 1); USE_LABEL(c, end); return SUCCESS; diff --git a/contrib/tools/python3/Python/deepfreeze/deepfreeze.c b/contrib/tools/python3/Python/deepfreeze/deepfreeze.c index d6ce3426b4..e7d2f1bcff 100644 --- a/contrib/tools/python3/Python/deepfreeze/deepfreeze.c +++ b/contrib/tools/python3/Python/deepfreeze/deepfreeze.c @@ -4746,7 +4746,7 @@ static struct { PyObject_VAR_HEAD Py_hash_t ob_shash; - char ob_sval[169]; + char ob_sval[172]; } importlib__bootstrap_toplevel_consts_14_consts_5_linetable = { .ob_base = { @@ -4754,10 +4754,10 @@ importlib__bootstrap_toplevel_consts_14_consts_5_linetable = { .ob_refcnt = _Py_IMMORTAL_REFCNT, .ob_type = &PyBytes_Type, }, - .ob_size = 168, + .ob_size = 171, }, .ob_shash = -1, - .ob_sval = "\x80\x00\xdc\x0e\x15\xd7\x0e\x1f\xd1\x0e\x1f\xd3\x0e\x21\x88\x03\xd8\x0d\x11\x8f\x59\x89\x59\xf1\x00\x09\x09\x2a\xd8\x0f\x13\x8f\x7a\x89\x7a\x98\x53\xd2\x0f\x20\xdc\x16\x22\xd0\x23\x44\xd3\x16\x45\xd0\x10\x45\xdc\x13\x16\x90\x74\x97\x7a\x91\x7a\x93\x3f\xa0\x51\xd2\x13\x26\xd1\x0c\x26\xd8\x0c\x10\x8f\x4a\x89\x4a\x8f\x4e\x89\x4e\xd4\x0c\x1c\xdc\x13\x16\x90\x74\x97\x7a\x91\x7a\x94\x3f\xd8\x1d\x21\x90\x04\x94\x0a\xdc\x13\x16\x90\x74\x97\x7c\x91\x7c\xd3\x13\x24\xa0\x71\xd2\x13\x28\xd8\x14\x18\x97\x4c\x91\x4c\xd7\x14\x24\xd1\x14\x24\xd4\x14\x26\xd8\x14\x18\x97\x4b\x91\x4b\xd7\x14\x27\xd1\x14\x27\xd4\x14\x29\xf7\x13\x09\x09\x2a\xf7\x00\x09\x09\x2a\xf1\x00\x09\x09\x2a\xfa", + .ob_sval = "\x80\x00\xdc\x0e\x15\xd7\x0e\x1f\xd1\x0e\x1f\xd3\x0e\x21\x88\x03\xd8\x0d\x11\x8f\x59\x89\x59\xf1\x00\x09\x09\x2a\xd8\x0f\x13\x8f\x7a\x89\x7a\x98\x53\xd2\x0f\x20\xdc\x16\x22\xd0\x23\x44\xd3\x16\x45\xd0\x10\x45\xdc\x13\x16\x90\x74\x97\x7a\x91\x7a\x93\x3f\xa0\x51\xd2\x13\x26\xd0\x0c\x26\xd0\x13\x26\xd8\x0c\x10\x8f\x4a\x89\x4a\x8f\x4e\x89\x4e\xd4\x0c\x1c\xdc\x13\x16\x90\x74\x97\x7a\x91\x7a\x94\x3f\xd8\x1d\x21\x90\x04\x94\x0a\xdc\x13\x16\x90\x74\x97\x7c\x91\x7c\xd3\x13\x24\xa0\x71\xd2\x13\x28\xd8\x14\x18\x97\x4c\x91\x4c\xd7\x14\x24\xd1\x14\x24\xd4\x14\x26\xd8\x14\x18\x97\x4b\x91\x4b\xd7\x14\x27\xd1\x14\x27\xd4\x14\x29\xf7\x13\x09\x09\x2a\xf7\x00\x09\x09\x2a\xf1\x00\x09\x09\x2a\xfa", }; static struct { @@ -14172,7 +14172,7 @@ static struct { PyObject_VAR_HEAD Py_hash_t ob_shash; - char ob_sval[725]; + char ob_sval[780]; } importlib__bootstrap_toplevel_consts_46_consts_3_linetable = { .ob_base = { @@ -14180,10 +14180,10 @@ importlib__bootstrap_toplevel_consts_46_consts_3_linetable = { .ob_refcnt = _Py_IMMORTAL_REFCNT, .ob_type = &PyBytes_Type, }, - .ob_size = 724, + .ob_size = 779, }, .ob_shash = -1, - .ob_sval = "\x80\x00\xe0\x0f\x15\x8f\x7f\x89\x7f\x88\x04\xd8\x10\x14\xd7\x10\x21\xd1\x10\x21\x88\x05\xd8\x0b\x10\x89\x3d\xf4\x08\x00\x18\x1c\x98\x46\x93\x7c\xd7\x17\x27\xd1\x17\x27\xa8\x0e\xb8\x04\xd3\x17\x3d\x88\x48\xd9\x13\x1b\xd0\x0c\x46\xd0\x1d\x46\xd4\x0c\x46\xdc\x14\x1b\x98\x46\xa0\x4a\xd3\x14\x2f\x88\x45\xdc\x13\x17\xd7\x13\x29\xd1\x13\x29\xa8\x26\xaf\x2f\xa9\x2f\xd3\x13\x3a\xb8\x65\xd2\x13\x43\xd0\x0c\x4a\xc0\x55\xd4\x0c\x4a\xd8\x1f\x22\xd7\x1f\x34\xd1\x1f\x34\xb0\x58\xb8\x74\xbf\x79\xb9\x79\xc8\x25\xd3\x1f\x50\xd1\x0c\x1c\x88\x48\x90\x66\xd8\x20\x38\xa4\x04\xa4\x53\xd7\x25\x37\xd1\x25\x37\xd3\x20\x38\xd8\x19\x21\xd8\x19\x21\xf4\x05\x03\x21\x0e\x88\x44\xd4\x0c\x1d\xf0\x08\x00\x18\x1c\xd7\x17\x36\xd1\x17\x36\x88\x48\xd9\x0f\x14\xd8\x17\x1f\xa0\x32\x92\x7e\xd0\x10\x2f\xa0\x78\xd4\x10\x2f\xd9\x13\x19\xd8\x14\x18\xd7\x14\x33\xd1\x14\x33\xd7\x14\x3a\xd1\x14\x3a\xb8\x31\xb8\x66\xd5\x14\x45\xe0\x17\x1f\xd0\x17\x27\xd0\x10\x31\xa8\x18\xd4\x10\x31\xf4\x06\x00\x18\x1f\x98\x76\xa0\x7a\xd4\x17\x32\xd0\x0c\x43\xb0\x46\xb7\x4f\xb1\x4f\xd4\x0c\x43\xd9\x0f\x17\xf0\x02\x03\x11\x19\xd8\x26\x2e\x90\x46\x94\x4f\xf2\x06\x00\x10\x15\xd8\x13\x19\x97\x3f\x91\x3f\xa0\x68\xd3\x13\x2e\xd8\x1b\x21\x9f\x3f\x99\x3f\xa8\x62\xd2\x1b\x30\xd0\x14\x41\xb0\x26\xb7\x2f\xb1\x2f\xd4\x14\x41\xd8\x14\x1a\x97\x4f\x91\x4f\xd7\x14\x2a\xd1\x14\x2a\xa8\x38\xd6\x14\x34\xf0\x08\x00\x18\x1c\xd7\x17\x36\xd1\x17\x36\x88\x48\xd8\x14\x1c\xa0\x44\xd0\x14\x28\x88\x45\xe4\x13\x19\x9c\x24\x98\x75\x9b\x2b\xd3\x13\x26\xa8\x3a\xb0\x7a\xd0\x2a\x42\xd2\x13\x42\xd0\x0c\x49\xc0\x45\xd4\x0c\x49\xd8\x0f\x14\x8f\x7e\x8a\x7e\xf0\x06\x00\x16\x19\xd7\x15\x2a\xd1\x15\x2a\xa8\x35\xaf\x3e\xa9\x3e\xb8\x34\xbf\x39\xb9\x39\xc0\x65\xd3\x15\x4c\xf1\x03\x01\x11\x13\x90\x18\x98\x36\xe0\x17\x1c\x97\x7e\x91\x7e\xa8\x18\xd2\x17\x31\xd0\x10\x4d\xb0\x45\xb7\x4e\xb1\x4e\xc0\x48\xd0\x33\x4d\xd4\x10\x4d\xd9\x13\x19\xd8\x1b\x23\xa8\x06\xa0\x78\xd2\x1b\x2f\xd0\x14\x43\xb0\x28\xb8\x46\xd0\x31\x43\xd4\x14\x43\xe0\x1b\x23\xa9\x65\xa9\x02\xb8\x14\xd2\x1b\x3e\xd0\x14\x48\xc0\x08\xd4\x14\x48\xe0\x1b\x1f\x90\x08\xd8\x17\x1c\x97\x7e\x91\x7e\xd0\x17\x2d\xd0\x10\x3d\xa8\x75\xaf\x7e\xa9\x7e\xd4\x10\x3d\xd8\x17\x1f\xa9\x25\xa1\x42\xb0\x54\xd2\x17\x3a\xd0\x10\x44\xb8\x48\xd4\x10\x44\xe1\x0f\x17\xdc\x17\x1e\x98\x76\xa0\x7a\xd4\x17\x32\xd1\x10\x32\xd8\x17\x1d\x97\x7f\x91\x7f\xa8\x28\xd2\x17\x32\xd0\x10\x4f\xb0\x56\xb7\x5f\xb1\x5f\xc0\x68\xd0\x34\x4f\xd4\x10\x4f\xe4\x1b\x22\xa0\x36\xa8\x3a\xd4\x1b\x36\xd0\x10\x47\xb8\x06\xbf\x0f\xb9\x0f\xd4\x10\x47\xd9\x0f\x14\xdc\x17\x1e\x98\x76\xa0\x7a\xd4\x17\x32\xd1\x10\x32\xd8\x17\x1d\x97\x7f\x91\x7f\xa8\x28\xd2\x17\x32\xd0\x10\x4f\xb0\x56\xb7\x5f\xb1\x5f\xc0\x68\xd0\x34\x4f\xd4\x10\x4f\xe4\x1b\x22\xa0\x36\xa8\x3a\xd4\x1b\x36\xd0\x10\x47\xb8\x06\xbf\x0f\xb9\x0f\xd4\x10\x47\xd8\x13\x17\xd7\x13\x24\xd2\x13\x24\xd1\x08\x24\xd0\x13\x24\xf8\xf4\x4b\x01\x00\x18\x26\xf2\x00\x01\x11\x19\xda\x14\x18\xf0\x03\x01\x11\x19\xfa", + .ob_sval = "\x80\x00\xe0\x0f\x15\x8f\x7f\x89\x7f\x88\x04\xd8\x10\x14\xd7\x10\x21\xd1\x10\x21\x88\x05\xd8\x0b\x10\x89\x3d\xf4\x08\x00\x18\x1c\x98\x46\x93\x7c\xd7\x17\x27\xd1\x17\x27\xa8\x0e\xb8\x04\xd3\x17\x3d\x88\x48\xd9\x13\x1b\xd0\x0c\x46\xd0\x1d\x46\xd3\x0c\x46\x90\x38\xdc\x14\x1b\x98\x46\xa0\x4a\xd3\x14\x2f\x88\x45\xdc\x13\x17\xd7\x13\x29\xd1\x13\x29\xa8\x26\xaf\x2f\xa9\x2f\xd3\x13\x3a\xb8\x65\xd2\x13\x43\xd0\x0c\x4a\xc0\x55\xd3\x0c\x4a\xd0\x13\x43\xd8\x1f\x22\xd7\x1f\x34\xd1\x1f\x34\xb0\x58\xb8\x74\xbf\x79\xb9\x79\xc8\x25\xd3\x1f\x50\xd1\x0c\x1c\x88\x48\x90\x66\xd8\x20\x38\xa4\x04\xa4\x53\xd7\x25\x37\xd1\x25\x37\xd3\x20\x38\xd8\x19\x21\xd8\x19\x21\xf4\x05\x03\x21\x0e\x88\x44\xd4\x0c\x1d\xf0\x08\x00\x18\x1c\xd7\x17\x36\xd1\x17\x36\x88\x48\xd9\x0f\x14\xd8\x17\x1f\xa0\x32\x92\x7e\xd0\x10\x2f\xa0\x78\xd3\x10\x2f\x90\x7e\xd9\x13\x19\xd8\x14\x18\xd7\x14\x33\xd1\x14\x33\xd7\x14\x3a\xd1\x14\x3a\xb8\x31\xb8\x66\xd5\x14\x45\xe0\x17\x1f\xd0\x17\x27\xd0\x10\x31\xa8\x18\xd3\x10\x31\xd0\x17\x27\xf4\x06\x00\x18\x1f\x98\x76\xa0\x7a\xd4\x17\x32\xd0\x0c\x43\xb0\x46\xb7\x4f\xb1\x4f\xd3\x0c\x43\xd0\x13\x32\xd9\x0f\x17\xf0\x02\x03\x11\x19\xd8\x26\x2e\x90\x46\x94\x4f\xf2\x06\x00\x10\x15\xd8\x13\x19\x97\x3f\x91\x3f\xa0\x68\xd3\x13\x2e\xd8\x1b\x21\x9f\x3f\x99\x3f\xa8\x62\xd2\x1b\x30\xd0\x14\x41\xb0\x26\xb7\x2f\xb1\x2f\xd3\x14\x41\xd0\x1b\x30\xd8\x14\x1a\x97\x4f\x91\x4f\xd7\x14\x2a\xd1\x14\x2a\xa8\x38\xd6\x14\x34\xf0\x08\x00\x18\x1c\xd7\x17\x36\xd1\x17\x36\x88\x48\xd8\x14\x1c\xa0\x44\xd0\x14\x28\x88\x45\xe4\x13\x19\x9c\x24\x98\x75\x9b\x2b\xd3\x13\x26\xa8\x3a\xb0\x7a\xd0\x2a\x42\xd2\x13\x42\xd0\x0c\x49\xc0\x45\xd3\x0c\x49\xd0\x13\x42\xd8\x0f\x14\x8f\x7e\x8a\x7e\xf0\x06\x00\x16\x19\xd7\x15\x2a\xd1\x15\x2a\xa8\x35\xaf\x3e\xa9\x3e\xb8\x34\xbf\x39\xb9\x39\xc0\x65\xd3\x15\x4c\xf1\x03\x01\x11\x13\x90\x18\x98\x36\xe0\x17\x1c\x97\x7e\x91\x7e\xa8\x18\xd2\x17\x31\xd0\x10\x4d\xb0\x45\xb7\x4e\xb1\x4e\xc0\x48\xd0\x33\x4d\xd3\x10\x4d\xd0\x17\x31\xd9\x13\x19\xd8\x1b\x23\xa8\x06\xa0\x78\xd2\x1b\x2f\xd0\x14\x43\xb0\x28\xb8\x46\xd0\x31\x43\xd3\x14\x43\xd0\x1b\x2f\xe0\x1b\x23\xa9\x65\xa9\x02\xb8\x14\xd2\x1b\x3e\xd0\x14\x48\xc0\x08\xd3\x14\x48\xd0\x1b\x3e\xe0\x1b\x1f\x90\x08\xd8\x17\x1c\x97\x7e\x91\x7e\xd0\x17\x2d\xd0\x10\x3d\xa8\x75\xaf\x7e\xa9\x7e\xd3\x10\x3d\xd0\x17\x2d\xd8\x17\x1f\xa9\x25\xa1\x42\xb0\x54\xd2\x17\x3a\xd0\x10\x44\xb8\x48\xd3\x10\x44\xd0\x17\x3a\xe1\x0f\x17\xdc\x17\x1e\x98\x76\xa0\x7a\xd4\x17\x32\xd0\x10\x32\xd0\x17\x32\xd8\x17\x1d\x97\x7f\x91\x7f\xa8\x28\xd2\x17\x32\xd0\x10\x4f\xb0\x56\xb7\x5f\xb1\x5f\xc0\x68\xd0\x34\x4f\xd3\x10\x4f\xd0\x17\x32\xe4\x1b\x22\xa0\x36\xa8\x3a\xd4\x1b\x36\xd0\x10\x47\xb8\x06\xbf\x0f\xb9\x0f\xd3\x10\x47\xd0\x17\x36\xd9\x0f\x14\xdc\x17\x1e\x98\x76\xa0\x7a\xd4\x17\x32\xd0\x10\x32\xd0\x17\x32\xd8\x17\x1d\x97\x7f\x91\x7f\xa8\x28\xd2\x17\x32\xd0\x10\x4f\xb0\x56\xb7\x5f\xb1\x5f\xc0\x68\xd0\x34\x4f\xd3\x10\x4f\xd0\x17\x32\xe4\x1b\x22\xa0\x36\xa8\x3a\xd4\x1b\x36\xd0\x10\x47\xb8\x06\xbf\x0f\xb9\x0f\xd3\x10\x47\xd0\x17\x36\xd8\x13\x17\xd7\x13\x24\xd2\x13\x24\xd0\x08\x24\xd0\x0f\x24\xd0\x13\x24\xf8\xf4\x4b\x01\x00\x18\x26\xf2\x00\x01\x11\x19\xda\x14\x18\xf0\x03\x01\x11\x19\xfa", }; static struct { @@ -15393,7 +15393,7 @@ static struct { PyObject_VAR_HEAD Py_hash_t ob_shash; - char ob_sval[111]; + char ob_sval[114]; } importlib__bootstrap_toplevel_consts_46_consts_9_linetable = { .ob_base = { @@ -15401,10 +15401,10 @@ importlib__bootstrap_toplevel_consts_46_consts_9_linetable = { .ob_refcnt = _Py_IMMORTAL_REFCNT, .ob_type = &PyBytes_Type, }, - .ob_size = 110, + .ob_size = 113, }, .ob_shash = -1, - .ob_sval = "\x80\x00\xf4\x10\x00\x12\x23\xa0\x33\xa8\x08\xd3\x11\x31\x88\x06\xdc\x0f\x13\xd7\x0f\x1f\xd1\x0f\x1f\xa0\x08\xd3\x0f\x29\x88\x04\xd8\x0f\x13\xd0\x0f\x1f\xd1\x08\x1f\xd8\x1d\x21\xd1\x08\x1a\x88\x01\x88\x35\x90\x28\xd8\x1e\x26\x88\x06\xd4\x08\x1b\xdc\x08\x0c\x88\x56\x8b\x0c\xd7\x08\x18\xd1\x08\x18\x98\x1a\xa0\x54\xd4\x08\x2a\xd9\x0b\x10\xd8\x1e\x20\x88\x46\x8c\x4f\xd8\x08\x0b\xd7\x08\x1a\xd1\x08\x1a\x98\x36\xd4\x08\x22\xd8\x0f\x15\x88\x0d", + .ob_sval = "\x80\x00\xf4\x10\x00\x12\x23\xa0\x33\xa8\x08\xd3\x11\x31\x88\x06\xdc\x0f\x13\xd7\x0f\x1f\xd1\x0f\x1f\xa0\x08\xd3\x0f\x29\x88\x04\xd8\x0f\x13\xd0\x0f\x1f\xd0\x08\x1f\xd0\x0f\x1f\xd8\x1d\x21\xd1\x08\x1a\x88\x01\x88\x35\x90\x28\xd8\x1e\x26\x88\x06\xd4\x08\x1b\xdc\x08\x0c\x88\x56\x8b\x0c\xd7\x08\x18\xd1\x08\x18\x98\x1a\xa0\x54\xd4\x08\x2a\xd9\x0b\x10\xd8\x1e\x20\x88\x46\x8c\x4f\xd8\x08\x0b\xd7\x08\x1a\xd1\x08\x1a\x98\x36\xd4\x08\x22\xd8\x0f\x15\x88\x0d", }; static struct { @@ -21506,7 +21506,7 @@ static struct { PyObject_VAR_HEAD Py_hash_t ob_shash; - char ob_sval[34]; + char ob_sval[36]; } importlib__bootstrap_external_toplevel_consts_13_linetable = { .ob_base = { @@ -21514,10 +21514,10 @@ importlib__bootstrap_external_toplevel_consts_13_linetable = { .ob_refcnt = _Py_IMMORTAL_REFCNT, .ob_type = &PyBytes_Type, }, - .ob_size = 33, + .ob_size = 35, }, .ob_shash = -1, - .ob_sval = "\x80\x00\xe4\x0b\x0e\x88\x74\x8b\x39\x98\x01\x8a\x3e\xd1\x04\x19\xdc\x0b\x0e\x8f\x3e\x89\x3e\x98\x24\xa0\x08\xd3\x0b\x29\xd0\x04\x29", + .ob_sval = "\x80\x00\xe4\x0b\x0e\x88\x74\x8b\x39\x98\x01\x8a\x3e\xd0\x04\x19\x88\x3e\xdc\x0b\x0e\x8f\x3e\x89\x3e\x98\x24\xa0\x08\xd3\x0b\x29\xd0\x04\x29", }; static struct { @@ -28195,7 +28195,7 @@ static struct { PyObject_VAR_HEAD Py_hash_t ob_shash; - char ob_sval[98]; + char ob_sval[101]; } importlib__bootstrap_external_toplevel_consts_47_linetable = { .ob_base = { @@ -28203,10 +28203,10 @@ importlib__bootstrap_external_toplevel_consts_47_linetable = { .ob_refcnt = _Py_IMMORTAL_REFCNT, .ob_type = &PyBytes_Type, }, - .ob_size = 97, + .ob_size = 100, }, .ob_shash = -1, - .ob_sval = "\x80\x00\xe4\x0b\x14\x94\x5c\xd3\x0b\x22\x80\x44\xd8\x0c\x0f\x90\x27\x98\x51\x91\x2c\xd1\x0c\x1e\x80\x45\xd8\x04\x08\x87\x4b\x81\x4b\x94\x0c\x98\x55\xd3\x10\x23\xd4\x04\x24\xdc\x0b\x0e\x88\x7b\xd3\x0b\x1b\x98\x71\xd2\x0b\x20\xd1\x04\x20\xd8\x04\x08\x87\x4b\x81\x4b\x90\x0b\xd4\x04\x1c\xd8\x04\x08\x87\x4b\x81\x4b\x94\x07\x97\x0d\x91\x0d\x98\x64\xd3\x10\x23\xd4\x04\x24\xd8\x0b\x0f\x80\x4b", + .ob_sval = "\x80\x00\xe4\x0b\x14\x94\x5c\xd3\x0b\x22\x80\x44\xd8\x0c\x0f\x90\x27\x98\x51\x91\x2c\xd1\x0c\x1e\x80\x45\xd8\x04\x08\x87\x4b\x81\x4b\x94\x0c\x98\x55\xd3\x10\x23\xd4\x04\x24\xdc\x0b\x0e\x88\x7b\xd3\x0b\x1b\x98\x71\xd2\x0b\x20\xd0\x04\x20\xd0\x0b\x20\xd8\x04\x08\x87\x4b\x81\x4b\x90\x0b\xd4\x04\x1c\xd8\x04\x08\x87\x4b\x81\x4b\x94\x07\x97\x0d\x91\x0d\x98\x64\xd3\x10\x23\xd4\x04\x24\xd8\x0b\x0f\x80\x4b", }; static struct { @@ -29071,7 +29071,7 @@ static struct { PyObject_VAR_HEAD Py_hash_t ob_shash; - char ob_sval[230]; + char ob_sval[233]; } importlib__bootstrap_external_toplevel_consts_51_linetable = { .ob_base = { @@ -29079,10 +29079,10 @@ importlib__bootstrap_external_toplevel_consts_51_linetable = { .ob_refcnt = _Py_IMMORTAL_REFCNT, .ob_type = &PyBytes_Type, }, - .ob_size = 229, + .ob_size = 232, }, .ob_shash = -1, - .ob_sval = "\x80\x00\xf4\x18\x00\x0c\x16\x90\x6e\xa4\x64\xd4\x0b\x2b\xd8\x0f\x13\xe4\x0e\x14\x8b\x68\x80\x47\xd8\x0d\x1b\xd7\x0d\x1f\xd1\x0d\x1f\xa0\x0c\xa8\x64\xd3\x0d\x33\x80\x46\xd8\x0b\x19\xd7\x0b\x1d\xd1\x0b\x1d\x98\x6a\xa8\x27\xd3\x0b\x32\x80\x44\xe0\x07\x0d\x80\x7e\xd8\x0b\x0f\x90\x37\x89\x3f\xf0\x06\x00\x14\x18\xd8\x0d\x11\x88\x5c\xdc\x12\x1c\xd0\x1d\x4a\xd3\x12\x4b\xd0\x0c\x4b\xe4\x12\x19\x98\x24\xa0\x08\xa8\x27\xd3\x12\x32\x80\x4b\xe0\x07\x12\x90\x77\xa0\x04\x90\x6f\xd1\x07\x25\xd8\x0b\x11\x88\x3e\xd8\x24\x2f\xb0\x37\xd1\x24\x3a\x95\x2e\xc4\x0a\x88\x43\xd9\x12\x15\xd0\x16\x43\xd3\x12\x44\xd0\x0c\x44\xdc\x08\x11\x8f\x0e\x89\x0e\xd8\x0c\x39\xdc\x0c\x1e\xf4\x05\x02\x09\x20\xf0\x06\x00\x17\x1d\x88\x0b\xe0\x0b\x16\xd0\x0b\x22\xd1\x04\x22\xd8\x07\x0d\xd0\x07\x19\x98\x66\xa8\x0b\xd2\x1e\x33\xdc\x08\x11\x8f\x0e\x89\x0e\xd8\x0c\x3b\xdc\x0c\x1e\xf4\x05\x02\x09\x20\xf0\x06\x00\x10\x16\x88\x0d\xe0\x0b\x16\xd0\x04\x16", + .ob_sval = "\x80\x00\xf4\x18\x00\x0c\x16\x90\x6e\xa4\x64\xd4\x0b\x2b\xd8\x0f\x13\xe4\x0e\x14\x8b\x68\x80\x47\xd8\x0d\x1b\xd7\x0d\x1f\xd1\x0d\x1f\xa0\x0c\xa8\x64\xd3\x0d\x33\x80\x46\xd8\x0b\x19\xd7\x0b\x1d\xd1\x0b\x1d\x98\x6a\xa8\x27\xd3\x0b\x32\x80\x44\xe0\x07\x0d\x80\x7e\xd8\x0b\x0f\x90\x37\x89\x3f\xf0\x06\x00\x14\x18\xd8\x0d\x11\x88\x5c\xdc\x12\x1c\xd0\x1d\x4a\xd3\x12\x4b\xd0\x0c\x4b\xe4\x12\x19\x98\x24\xa0\x08\xa8\x27\xd3\x12\x32\x80\x4b\xe0\x07\x12\x90\x77\xa0\x04\x90\x6f\xd1\x07\x25\xd8\x0b\x11\x88\x3e\xd8\x24\x2f\xb0\x37\xd1\x24\x3a\x95\x2e\xc4\x0a\x88\x43\xd9\x12\x15\xd0\x16\x43\xd3\x12\x44\xd0\x0c\x44\xdc\x08\x11\x8f\x0e\x89\x0e\xd8\x0c\x39\xdc\x0c\x1e\xf4\x05\x02\x09\x20\xf0\x06\x00\x17\x1d\x88\x0b\xe0\x0b\x16\xd0\x0b\x22\xd0\x04\x22\xd0\x0b\x22\xd8\x07\x0d\xd0\x07\x19\x98\x66\xa8\x0b\xd2\x1e\x33\xdc\x08\x11\x8f\x0e\x89\x0e\xd8\x0c\x3b\xdc\x0c\x1e\xf4\x05\x02\x09\x20\xf0\x06\x00\x10\x16\x88\x0d\xe0\x0b\x16\xd0\x04\x16", }; static struct { @@ -40035,10 +40035,54 @@ const_str_invalidate_caches = { }; static struct { + PyASCIIObject _ascii; + uint8_t _data[19]; + } +const_str_MetadataPathFinder = { + ._ascii = { + .ob_base = { + .ob_refcnt = _Py_IMMORTAL_REFCNT, + .ob_type = &PyUnicode_Type, + }, + .length = 18, + .hash = -1, + .state = { + .kind = 1, + .compact = 1, + .ascii = 1, + .statically_allocated = 1, + }, + }, + ._data = "MetadataPathFinder", +}; +static + struct { PyGC_Head _gc_head; struct { PyObject_VAR_HEAD - PyObject *ob_item[4]; + PyObject *ob_item[1]; + }_object; + } +importlib__bootstrap_external_toplevel_consts_70_consts_2_consts_5 = { + ._object = { + .ob_base = { + .ob_base = { + .ob_refcnt = _Py_IMMORTAL_REFCNT, + .ob_type = &PyTuple_Type, + }, + .ob_size = 1, + }, + .ob_item = { + & const_str_MetadataPathFinder._ascii.ob_base, + }, + }, +}; +static + struct { + PyGC_Head _gc_head; + struct { + PyObject_VAR_HEAD + PyObject *ob_item[6]; }_object; } importlib__bootstrap_external_toplevel_consts_70_consts_2_consts = { @@ -40048,13 +40092,15 @@ importlib__bootstrap_external_toplevel_consts_70_consts_2_consts = { .ob_refcnt = _Py_IMMORTAL_REFCNT, .ob_type = &PyTuple_Type, }, - .ob_size = 4, + .ob_size = 6, }, .ob_item = { & importlib__bootstrap_external_toplevel_consts_70_consts_2_consts_0._ascii.ob_base, Py_None, & const_str_invalidate_caches._ascii.ob_base, (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS + 1], + (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS + 0], + & importlib__bootstrap_external_toplevel_consts_70_consts_2_consts_5._object.ob_base.ob_base, }, }, }; @@ -40082,10 +40128,32 @@ const_str_path_importer_cache = { }; static struct { + PyASCIIObject _ascii; + uint8_t _data[19]; + } +importlib__bootstrap_external_toplevel_consts_70_consts_2_names_9 = { + ._ascii = { + .ob_base = { + .ob_refcnt = _Py_IMMORTAL_REFCNT, + .ob_type = &PyUnicode_Type, + }, + .length = 18, + .hash = -1, + .state = { + .kind = 1, + .compact = 1, + .ascii = 1, + .statically_allocated = 1, + }, + }, + ._data = "importlib.metadata", +}; +static + struct { PyGC_Head _gc_head; struct { PyObject_VAR_HEAD - PyObject *ob_item[9]; + PyObject *ob_item[11]; }_object; } importlib__bootstrap_external_toplevel_consts_70_consts_2_names = { @@ -40095,7 +40163,7 @@ importlib__bootstrap_external_toplevel_consts_70_consts_2_names = { .ob_refcnt = _Py_IMMORTAL_REFCNT, .ob_type = &PyTuple_Type, }, - .ob_size = 9, + .ob_size = 11, }, .ob_item = { & const_str_list._ascii.ob_base, @@ -40107,6 +40175,8 @@ importlib__bootstrap_external_toplevel_consts_70_consts_2_names = { & const_str_invalidate_caches._ascii.ob_base, & const_str__NamespacePath._ascii.ob_base, & const_str__epoch._ascii.ob_base, + & importlib__bootstrap_external_toplevel_consts_70_consts_2_names_9._ascii.ob_base, + & const_str_MetadataPathFinder._ascii.ob_base, }, }, }; @@ -40136,7 +40206,7 @@ static struct { PyObject_VAR_HEAD Py_hash_t ob_shash; - char ob_sval[114]; + char ob_sval[129]; } importlib__bootstrap_external_toplevel_consts_70_consts_2_linetable = { .ob_base = { @@ -40144,17 +40214,17 @@ importlib__bootstrap_external_toplevel_consts_70_consts_2_linetable = { .ob_refcnt = _Py_IMMORTAL_REFCNT, .ob_type = &PyBytes_Type, }, - .ob_size = 113, + .ob_size = 128, }, .ob_shash = -1, - .ob_sval = "\x80\x00\xf4\x08\x00\x1d\x21\xa4\x13\xd7\x21\x38\xd1\x21\x38\xd7\x21\x3e\xd1\x21\x3e\xd3\x21\x40\xd3\x1c\x41\xf2\x00\x06\x09\x2b\x89\x4c\x88\x44\x90\x26\xf0\x06\x00\x10\x16\x88\x7e\xa4\x5b\xb0\x14\xd4\x25\x36\xdc\x14\x17\xd7\x14\x2b\xd1\x14\x2b\xa8\x44\xd1\x14\x31\xdc\x11\x18\x98\x16\xd0\x21\x34\xd5\x11\x35\xd8\x10\x16\xd7\x10\x28\xd1\x10\x28\xd5\x10\x2a\xf0\x0d\x06\x09\x2b\xf4\x12\x00\x09\x17\xd7\x08\x1d\xd2\x08\x1d\xa0\x11\xd1\x08\x22\xd6\x08\x1d", + .ob_sval = "\x80\x00\xf4\x08\x00\x1d\x21\xa4\x13\xd7\x21\x38\xd1\x21\x38\xd7\x21\x3e\xd1\x21\x3e\xd3\x21\x40\xd3\x1c\x41\xf2\x00\x06\x09\x2b\x89\x4c\x88\x44\x90\x26\xf0\x06\x00\x10\x16\x88\x7e\xa4\x5b\xb0\x14\xd4\x25\x36\xdc\x14\x17\xd7\x14\x2b\xd1\x14\x2b\xa8\x44\xd1\x14\x31\xdc\x11\x18\x98\x16\xd0\x21\x34\xd5\x11\x35\xd8\x10\x16\xd7\x10\x28\xd1\x10\x28\xd5\x10\x2a\xf0\x0d\x06\x09\x2b\xf4\x12\x00\x09\x17\xd7\x08\x1d\xd2\x08\x1d\xa0\x11\xd1\x08\x22\xd5\x08\x1d\xe5\x08\x39\xd8\x08\x1a\xd7\x08\x2c\xd1\x08\x2c\xd5\x08\x2e", }; static struct { PyGC_Head _gc_head; struct { PyObject_VAR_HEAD - PyObject *ob_item[2]; + PyObject *ob_item[3]; }_object; } importlib__bootstrap_external_toplevel_consts_70_consts_2_localsplusnames = { @@ -40164,23 +40234,24 @@ importlib__bootstrap_external_toplevel_consts_70_consts_2_localsplusnames = { .ob_refcnt = _Py_IMMORTAL_REFCNT, .ob_type = &PyTuple_Type, }, - .ob_size = 2, + .ob_size = 3, }, .ob_item = { &_Py_ID(name), & const_str_finder._ascii.ob_base, + & const_str_MetadataPathFinder._ascii.ob_base, }, }, }; static - struct _PyCode_DEF(268) + struct _PyCode_DEF(312) importlib__bootstrap_external_toplevel_consts_70_consts_2 = { .ob_base = { .ob_base = { .ob_refcnt = _Py_IMMORTAL_REFCNT, .ob_type = &PyCode_Type, }, - .ob_size = 134, + .ob_size = 156, }, .co_consts = & importlib__bootstrap_external_toplevel_consts_70_consts_2_consts._object.ob_base.ob_base, .co_names = & importlib__bootstrap_external_toplevel_consts_70_consts_2_names._object.ob_base.ob_base, @@ -40189,22 +40260,22 @@ importlib__bootstrap_external_toplevel_consts_70_consts_2 = { .co_argcount = 0, .co_posonlyargcount = 0, .co_kwonlyargcount = 0, - .co_framesize = 7 + FRAME_SPECIALS_SIZE, + .co_framesize = 8 + FRAME_SPECIALS_SIZE, .co_stacksize = 5, .co_firstlineno = 1438, - .co_nlocalsplus = 2, - .co_nlocals = 2, + .co_nlocalsplus = 3, + .co_nlocals = 3, .co_ncellvars = 0, .co_nfreevars = 0, .co_version = 199, .co_localsplusnames = & importlib__bootstrap_external_toplevel_consts_70_consts_2_localsplusnames._object.ob_base.ob_base, - .co_localspluskinds = & importlib__bootstrap_toplevel_consts_14_consts_2_localspluskinds.ob_base.ob_base, + .co_localspluskinds = & importlib__bootstrap_toplevel_consts_3_localspluskinds.ob_base.ob_base, .co_filename = & importlib__bootstrap_external_toplevel_consts_6_filename._ascii.ob_base, .co_name = & const_str_invalidate_caches._ascii.ob_base, .co_qualname = & importlib__bootstrap_external_toplevel_consts_70_consts_2_qualname._ascii.ob_base, .co_linetable = & importlib__bootstrap_external_toplevel_consts_70_consts_2_linetable.ob_base.ob_base, ._co_cached = NULL, - .co_code_adaptive = "\x97\x00\x74\x01\x00\x00\x00\x00\x00\x00\x00\x00\x74\x02\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xab\x00\x00\x00\x00\x00\x00\x00\xab\x01\x00\x00\x00\x00\x00\x00\x44\x00\x5d\x41\x00\x00\x5c\x02\x00\x00\x7d\x00\x7d\x01\x7c\x01\x81\x0b\x74\x09\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x00\xab\x01\x00\x00\x00\x00\x00\x00\x73\x12\x74\x02\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x00\x3d\x00\x8c\x25\x74\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x01\x64\x02\xab\x02\x00\x00\x00\x00\x00\x00\x73\x01\x8c\x32\x7c\x01\x6a\x0d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xab\x00\x00\x00\x00\x00\x00\x00\x01\x00\x8c\x43\x04\x00\x74\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x78\x01\x6a\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x64\x03\x7a\x0d\x00\x00\x63\x02\x5f\x08\x00\x00\x00\x00\x00\x00\x00\x00\x79\x01", + .co_code_adaptive = "\x97\x00\x74\x01\x00\x00\x00\x00\x00\x00\x00\x00\x74\x02\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xab\x00\x00\x00\x00\x00\x00\x00\xab\x01\x00\x00\x00\x00\x00\x00\x44\x00\x5d\x41\x00\x00\x5c\x02\x00\x00\x7d\x00\x7d\x01\x7c\x01\x81\x0b\x74\x09\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x00\xab\x01\x00\x00\x00\x00\x00\x00\x73\x12\x74\x02\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x00\x3d\x00\x8c\x25\x74\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x01\x64\x02\xab\x02\x00\x00\x00\x00\x00\x00\x73\x01\x8c\x32\x7c\x01\x6a\x0d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xab\x00\x00\x00\x00\x00\x00\x00\x01\x00\x8c\x43\x04\x00\x74\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x78\x01\x6a\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x64\x03\x7a\x0d\x00\x00\x63\x02\x5f\x08\x00\x00\x00\x00\x00\x00\x00\x00\x64\x04\x64\x05\x6c\x09\x6d\x0a\x7d\x02\x01\x00\x7c\x02\x6a\x0d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xab\x00\x00\x00\x00\x00\x00\x00\x01\x00\x79\x01", ._co_firsttraceable = 0, }; static @@ -40444,7 +40515,7 @@ importlib__bootstrap_external_toplevel_consts_70_consts_3 = { .co_kwonlyargcount = 0, .co_framesize = 7 + FRAME_SPECIALS_SIZE, .co_stacksize = 5, - .co_firstlineno = 1453, + .co_firstlineno = 1456, .co_nlocalsplus = 2, .co_nlocals = 2, .co_ncellvars = 0, @@ -40677,7 +40748,7 @@ importlib__bootstrap_external_toplevel_consts_70_consts_4 = { .co_kwonlyargcount = 0, .co_framesize = 7 + FRAME_SPECIALS_SIZE, .co_stacksize = 4, - .co_firstlineno = 1466, + .co_firstlineno = 1469, .co_nlocalsplus = 3, .co_nlocals = 3, .co_ncellvars = 0, @@ -40968,7 +41039,7 @@ importlib__bootstrap_external_toplevel_consts_70_consts_6 = { .co_kwonlyargcount = 0, .co_framesize = 14 + FRAME_SPECIALS_SIZE, .co_stacksize = 5, - .co_firstlineno = 1488, + .co_firstlineno = 1491, .co_nlocalsplus = 9, .co_nlocals = 9, .co_ncellvars = 0, @@ -41142,7 +41213,7 @@ importlib__bootstrap_external_toplevel_consts_70_consts_7 = { .co_kwonlyargcount = 0, .co_framesize = 11 + FRAME_SPECIALS_SIZE, .co_stacksize = 5, - .co_firstlineno = 1517, + .co_firstlineno = 1520, .co_nlocalsplus = 6, .co_nlocals = 6, .co_ncellvars = 0, @@ -41182,50 +41253,6 @@ importlib__bootstrap_external_toplevel_consts_70_consts_8_consts_0 = { }; static struct { - PyASCIIObject _ascii; - uint8_t _data[19]; - } -const_str_MetadataPathFinder = { - ._ascii = { - .ob_base = { - .ob_refcnt = _Py_IMMORTAL_REFCNT, - .ob_type = &PyUnicode_Type, - }, - .length = 18, - .hash = -1, - .state = { - .kind = 1, - .compact = 1, - .ascii = 1, - .statically_allocated = 1, - }, - }, - ._data = "MetadataPathFinder", -}; -static - struct { - PyGC_Head _gc_head; - struct { - PyObject_VAR_HEAD - PyObject *ob_item[1]; - }_object; - } -importlib__bootstrap_external_toplevel_consts_70_consts_8_consts_2 = { - ._object = { - .ob_base = { - .ob_base = { - .ob_refcnt = _Py_IMMORTAL_REFCNT, - .ob_type = &PyTuple_Type, - }, - .ob_size = 1, - }, - .ob_item = { - & const_str_MetadataPathFinder._ascii.ob_base, - }, - }, -}; -static - struct { PyGC_Head _gc_head; struct { PyObject_VAR_HEAD @@ -41244,7 +41271,7 @@ importlib__bootstrap_external_toplevel_consts_70_consts_8_consts = { .ob_item = { & importlib__bootstrap_external_toplevel_consts_70_consts_8_consts_0._ascii.ob_base, (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS + 0], - & importlib__bootstrap_external_toplevel_consts_70_consts_8_consts_2._object.ob_base.ob_base, + & importlib__bootstrap_external_toplevel_consts_70_consts_2_consts_5._object.ob_base.ob_base, }, }, }; @@ -41253,28 +41280,6 @@ static PyASCIIObject _ascii; uint8_t _data[19]; } -importlib__bootstrap_external_toplevel_consts_70_consts_8_names_0 = { - ._ascii = { - .ob_base = { - .ob_refcnt = _Py_IMMORTAL_REFCNT, - .ob_type = &PyUnicode_Type, - }, - .length = 18, - .hash = -1, - .state = { - .kind = 1, - .compact = 1, - .ascii = 1, - .statically_allocated = 1, - }, - }, - ._data = "importlib.metadata", -}; -static - struct { - PyASCIIObject _ascii; - uint8_t _data[19]; - } const_str_find_distributions = { ._ascii = { .ob_base = { @@ -41310,7 +41315,7 @@ importlib__bootstrap_external_toplevel_consts_70_consts_8_names = { .ob_size = 3, }, .ob_item = { - & importlib__bootstrap_external_toplevel_consts_70_consts_8_names_0._ascii.ob_base, + & importlib__bootstrap_external_toplevel_consts_70_consts_2_names_9._ascii.ob_base, & const_str_MetadataPathFinder._ascii.ob_base, & const_str_find_distributions._ascii.ob_base, }, @@ -41398,7 +41403,7 @@ importlib__bootstrap_external_toplevel_consts_70_consts_8 = { .co_kwonlyargcount = 0, .co_framesize = 8 + FRAME_SPECIALS_SIZE, .co_stacksize = 5, - .co_firstlineno = 1541, + .co_firstlineno = 1544, .co_nlocalsplus = 3, .co_nlocals = 3, .co_ncellvars = 0, @@ -41494,7 +41499,7 @@ importlib__bootstrap_external_toplevel_consts_70_linetable = { .ob_size = 125, }, .ob_shash = -1, - .ob_sval = "\x84\x00\xe1\x04\x48\xe0\x05\x11\xf1\x02\x0c\x05\x23\xf3\x03\x00\x06\x12\xf0\x02\x0c\x05\x23\xf0\x1c\x00\x06\x12\xf1\x02\x0a\x05\x18\xf3\x03\x00\x06\x12\xf0\x02\x0a\x05\x18\xf0\x18\x00\x06\x11\xf1\x02\x13\x05\x16\xf3\x03\x00\x06\x11\xf0\x02\x13\x05\x16\xf0\x2a\x00\x06\x11\xf2\x02\x1a\x05\x18\xf3\x03\x00\x06\x11\xf0\x02\x1a\x05\x18\xf0\x38\x00\x06\x11\xf2\x02\x15\x05\x18\xf3\x03\x00\x06\x11\xf0\x02\x15\x05\x18\xf0\x2e\x00\x06\x12\xf1\x02\x0a\x05\x46\x01\xf3\x03\x00\x06\x12\xf1\x02\x0a\x05\x46\x01", + .ob_sval = "\x84\x00\xe1\x04\x48\xe0\x05\x11\xf1\x02\x0f\x05\x2f\xf3\x03\x00\x06\x12\xf0\x02\x0f\x05\x2f\xf0\x22\x00\x06\x12\xf1\x02\x0a\x05\x18\xf3\x03\x00\x06\x12\xf0\x02\x0a\x05\x18\xf0\x18\x00\x06\x11\xf1\x02\x13\x05\x16\xf3\x03\x00\x06\x11\xf0\x02\x13\x05\x16\xf0\x2a\x00\x06\x11\xf2\x02\x1a\x05\x18\xf3\x03\x00\x06\x11\xf0\x02\x1a\x05\x18\xf0\x38\x00\x06\x11\xf2\x02\x15\x05\x18\xf3\x03\x00\x06\x11\xf0\x02\x15\x05\x18\xf0\x2e\x00\x06\x12\xf1\x02\x0a\x05\x46\x01\xf3\x03\x00\x06\x12\xf1\x02\x0a\x05\x46\x01", }; static struct _PyCode_DEF(116) @@ -41696,7 +41701,7 @@ importlib__bootstrap_external_toplevel_consts_72_consts_2_consts_1 = { .co_kwonlyargcount = 0, .co_framesize = 6 + FRAME_SPECIALS_SIZE, .co_stacksize = 3, - .co_firstlineno = 1570, + .co_firstlineno = 1573, .co_nlocalsplus = 3, .co_nlocals = 2, .co_ncellvars = 0, @@ -42003,7 +42008,7 @@ importlib__bootstrap_external_toplevel_consts_72_consts_2 = { .co_kwonlyargcount = 0, .co_framesize = 11 + FRAME_SPECIALS_SIZE, .co_stacksize = 5, - .co_firstlineno = 1564, + .co_firstlineno = 1567, .co_nlocalsplus = 6, .co_nlocals = 5, .co_ncellvars = 1, @@ -42145,7 +42150,7 @@ importlib__bootstrap_external_toplevel_consts_72_consts_3 = { .co_kwonlyargcount = 0, .co_framesize = 3 + FRAME_SPECIALS_SIZE, .co_stacksize = 2, - .co_firstlineno = 1581, + .co_firstlineno = 1584, .co_nlocalsplus = 1, .co_nlocals = 1, .co_ncellvars = 0, @@ -42292,7 +42297,7 @@ importlib__bootstrap_external_toplevel_consts_72_consts_4 = { .co_kwonlyargcount = 0, .co_framesize = 13 + FRAME_SPECIALS_SIZE, .co_stacksize = 6, - .co_firstlineno = 1585, + .co_firstlineno = 1588, .co_nlocalsplus = 7, .co_nlocals = 7, .co_ncellvars = 0, @@ -42752,7 +42757,7 @@ importlib__bootstrap_external_toplevel_consts_72_consts_6 = { .co_kwonlyargcount = 0, .co_framesize = 22 + FRAME_SPECIALS_SIZE, .co_stacksize = 8, - .co_firstlineno = 1590, + .co_firstlineno = 1593, .co_nlocalsplus = 14, .co_nlocals = 14, .co_ncellvars = 0, @@ -43113,7 +43118,7 @@ importlib__bootstrap_external_toplevel_consts_72_consts_7 = { .co_kwonlyargcount = 0, .co_framesize = 15 + FRAME_SPECIALS_SIZE, .co_stacksize = 5, - .co_firstlineno = 1641, + .co_firstlineno = 1644, .co_nlocalsplus = 10, .co_nlocals = 10, .co_ncellvars = 0, @@ -43363,7 +43368,7 @@ importlib__bootstrap_external_toplevel_consts_72_consts_8_consts_1 = { .co_kwonlyargcount = 0, .co_framesize = 7 + FRAME_SPECIALS_SIZE, .co_stacksize = 4, - .co_firstlineno = 1682, + .co_firstlineno = 1685, .co_nlocalsplus = 3, .co_nlocals = 1, .co_ncellvars = 0, @@ -43523,7 +43528,7 @@ importlib__bootstrap_external_toplevel_consts_72_consts_8 = { .co_kwonlyargcount = 0, .co_framesize = 5 + FRAME_SPECIALS_SIZE, .co_stacksize = 2, - .co_firstlineno = 1672, + .co_firstlineno = 1675, .co_nlocalsplus = 3, .co_nlocals = 3, .co_ncellvars = 2, @@ -43643,7 +43648,7 @@ importlib__bootstrap_external_toplevel_consts_72_consts_9 = { .co_kwonlyargcount = 0, .co_framesize = 4 + FRAME_SPECIALS_SIZE, .co_stacksize = 3, - .co_firstlineno = 1690, + .co_firstlineno = 1693, .co_nlocalsplus = 1, .co_nlocals = 1, .co_ncellvars = 0, @@ -43760,7 +43765,7 @@ importlib__bootstrap_external_toplevel_consts_72 = { .co_kwonlyargcount = 0, .co_framesize = 2 + FRAME_SPECIALS_SIZE, .co_stacksize = 2, - .co_firstlineno = 1555, + .co_firstlineno = 1558, .co_nlocalsplus = 0, .co_nlocals = 0, .co_ncellvars = 0, @@ -43978,7 +43983,7 @@ importlib__bootstrap_external_toplevel_consts_74 = { .co_kwonlyargcount = 0, .co_framesize = 11 + FRAME_SPECIALS_SIZE, .co_stacksize = 5, - .co_firstlineno = 1696, + .co_firstlineno = 1699, .co_nlocalsplus = 6, .co_nlocals = 6, .co_ncellvars = 0, @@ -44192,7 +44197,7 @@ importlib__bootstrap_external_toplevel_consts_75 = { .co_kwonlyargcount = 0, .co_framesize = 6 + FRAME_SPECIALS_SIZE, .co_stacksize = 3, - .co_firstlineno = 1721, + .co_firstlineno = 1724, .co_nlocalsplus = 3, .co_nlocals = 3, .co_ncellvars = 0, @@ -44332,7 +44337,7 @@ importlib__bootstrap_external_toplevel_consts_76 = { .co_kwonlyargcount = 0, .co_framesize = 2 + FRAME_SPECIALS_SIZE, .co_stacksize = 1, - .co_firstlineno = 1732, + .co_firstlineno = 1735, .co_nlocalsplus = 1, .co_nlocals = 1, .co_ncellvars = 0, @@ -44505,7 +44510,7 @@ importlib__bootstrap_external_toplevel_consts_77 = { .co_kwonlyargcount = 0, .co_framesize = 7 + FRAME_SPECIALS_SIZE, .co_stacksize = 5, - .co_firstlineno = 1737, + .co_firstlineno = 1740, .co_nlocalsplus = 2, .co_nlocals = 2, .co_ncellvars = 0, @@ -44982,7 +44987,7 @@ static struct { PyObject_VAR_HEAD Py_hash_t ob_shash; - char ob_sval[704]; + char ob_sval[707]; } importlib__bootstrap_external_toplevel_linetable = { .ob_base = { @@ -44990,10 +44995,10 @@ importlib__bootstrap_external_toplevel_linetable = { .ob_refcnt = _Py_IMMORTAL_REFCNT, .ob_type = &PyBytes_Type, }, - .ob_size = 703, + .ob_size = 706, }, .ob_shash = -1, - .ob_sval = "\xf0\x03\x01\x01\x01\xf1\x02\x07\x01\x04\xf0\x2c\x00\x0e\x12\x80\x0a\xf3\x06\x00\x01\x0c\xdb\x00\x0a\xdb\x00\x0a\xdb\x00\x10\xdb\x00\x0e\xf0\x06\x00\x10\x13\x8f\x7c\x89\x7c\x98\x77\xd1\x0f\x26\x80\x0b\xd9\x03\x0e\xdb\x04\x14\xdc\x04\x11\xe3\x04\x17\xf1\x06\x00\x04\x0f\xd8\x17\x1b\x98\x53\x90\x6b\x81\x4f\xe0\x17\x1a\x90\x65\x80\x4f\xe1\x07\x0a\xd1\x0a\x34\xa0\x4f\xd4\x0a\x34\xd4\x07\x34\xd1\x00\x34\xd8\x0b\x1a\x98\x31\xd1\x0b\x1d\x80\x08\xd9\x11\x16\x90\x7f\xd3\x11\x27\x80\x0e\xd8\x12\x14\x97\x27\x91\x27\x98\x2f\xd3\x12\x2a\x80\x0f\xd8\x29\x38\xd6\x17\x39\xa0\x41\x98\x21\x98\x41\x98\x33\x9a\x07\xd2\x17\x39\xd0\x00\x14\xf0\x08\x00\x27\x2d\xd0\x00\x23\xd8\x28\x3a\xd0\x00\x25\xd8\x20\x45\xd8\x22\x45\xf1\x03\x01\x21\x46\x01\xd0\x00\x1b\xf2\x08\x0e\x01\x17\xf1\x20\x00\x0f\x1f\xd3\x0e\x20\x80\x0b\xf2\x06\x02\x01\x37\xf2\x0a\x03\x01\x2a\xf2\x0a\x03\x01\x2a\xf1\x0c\x00\x04\x0f\xf3\x02\x1b\x05\x2a\xf2\x3c\x03\x05\x3f\xf2\x0c\x05\x01\x22\xf2\x10\x07\x01\x1a\xf2\x14\x06\x01\x32\xf2\x12\x02\x01\x2e\xf2\x0a\x04\x01\x2e\xf1\x0e\x00\x04\x0f\xf3\x02\x05\x05\x52\x01\xf2\x10\x02\x05\x30\xf2\x0a\x07\x01\x14\xf3\x14\x13\x01\x0e\xf1\x2c\x00\x0e\x12\x90\x2d\xd7\x12\x28\xd1\x12\x28\xd3\x0d\x29\x80\x0a\xf0\x70\x07\x00\x11\x15\x8f\x7f\x89\x7f\x98\x71\xa0\x28\xd3\x0f\x2b\xa8\x67\xd1\x0f\x35\x80\x0c\xe0\x14\x17\x97\x4e\x91\x4e\xa0\x3c\xb0\x18\xd3\x14\x3a\xd0\x00\x11\xe0\x0b\x18\x80\x08\xd8\x07\x0d\x80\x04\xe0\x13\x18\x90\x27\x80\x0f\xd9\x03\x0e\xd8\x04\x13\xd7\x04\x1a\xd1\x04\x1a\x98\x36\xd4\x04\x22\xe0\x15\x2c\x90\x54\xd7\x15\x2c\xd1\x15\x2c\xd3\x15\x2e\xd0\x00\x12\xe0\x15\x1b\x90\x48\xd0\x00\x11\xe0\x38\x49\xd0\x00\x49\xd0\x00\x17\xd0\x1a\x35\xf0\x04\x43\x01\x01\x30\xc0\x14\xf4\x00\x43\x01\x01\x30\xf2\x4c\x02\x25\x01\x40\x01\xf2\x50\x01\x10\x01\x47\x01\xf2\x26\x09\x01\x14\xf2\x18\x09\x01\x10\xf2\x18\x1c\x01\x1f\xf2\x3e\x1e\x01\x11\xf2\x42\x01\x19\x01\x4c\x01\xf2\x38\x15\x01\x0a\xf3\x30\x0a\x01\x39\xf3\x1a\x07\x01\x10\xf3\x14\x08\x01\x10\xf2\x16\x09\x01\x44\x01\xf1\x1c\x00\x0d\x13\x8b\x48\x80\x09\xf0\x06\x43\x01\x01\x10\xb8\x34\xd8\x37\x40\xf4\x03\x43\x01\x01\x10\xf2\x4c\x02\x2d\x01\x17\xf7\x64\x01\x30\x01\x1c\xf1\x00\x30\x01\x1c\xf7\x66\x01\x1b\x01\x3c\xf1\x00\x1b\x01\x3c\xf4\x3c\x4e\x02\x01\x1b\x90\x3d\xf4\x00\x4e\x02\x01\x1b\xf7\x62\x04\x2f\x01\x20\xf1\x00\x2f\x01\x20\xf4\x64\x01\x2a\x01\x2d\x90\x7a\xa0\x3c\xf4\x00\x2a\x01\x2d\xf4\x5a\x01\x16\x01\x14\x98\x3a\xa0\x7d\xf4\x00\x16\x01\x14\xf4\x32\x32\x01\x19\x98\x2a\xa0\x6d\xf4\x00\x32\x01\x19\xf7\x6a\x01\x41\x01\x01\x20\xf1\x00\x41\x01\x01\x20\xf7\x4e\x02\x21\x01\x2b\xf1\x00\x21\x01\x2b\xf0\x4a\x01\x00\x14\x23\xd0\x00\x10\xf7\x0a\x76\x01\x01\x46\x01\xf1\x00\x76\x01\x01\x46\x01\xf7\x72\x03\x48\x02\x01\x2c\xf1\x00\x48\x02\x01\x2c\xf3\x5a\x04\x16\x01\x0d\xf2\x32\x08\x01\x2a\xf2\x16\x02\x01\x23\xf3\x0a\x05\x01\x25\xf9\xf2\x6f\x34\x00\x18\x3a", + .ob_sval = "\xf0\x03\x01\x01\x01\xf1\x02\x07\x01\x04\xf0\x2c\x00\x0e\x12\x80\x0a\xf3\x06\x00\x01\x0c\xdb\x00\x0a\xdb\x00\x0a\xdb\x00\x10\xdb\x00\x0e\xf0\x06\x00\x10\x13\x8f\x7c\x89\x7c\x98\x77\xd1\x0f\x26\x80\x0b\xd9\x03\x0e\xdb\x04\x14\xdc\x04\x11\xe3\x04\x17\xf1\x06\x00\x04\x0f\xd8\x17\x1b\x98\x53\x90\x6b\x81\x4f\xe0\x17\x1a\x90\x65\x80\x4f\xe1\x07\x0a\xd1\x0a\x34\xa0\x4f\xd4\x0a\x34\xd4\x07\x34\xd0\x00\x34\xd0\x07\x34\xd8\x0b\x1a\x98\x31\xd1\x0b\x1d\x80\x08\xd9\x11\x16\x90\x7f\xd3\x11\x27\x80\x0e\xd8\x12\x14\x97\x27\x91\x27\x98\x2f\xd3\x12\x2a\x80\x0f\xd8\x29\x38\xd6\x17\x39\xa0\x41\x98\x21\x98\x41\x98\x33\x9a\x07\xd2\x17\x39\xd0\x00\x14\xf0\x08\x00\x27\x2d\xd0\x00\x23\xd8\x28\x3a\xd0\x00\x25\xd8\x20\x45\xd8\x22\x45\xf1\x03\x01\x21\x46\x01\xd0\x00\x1b\xf2\x08\x0e\x01\x17\xf1\x20\x00\x0f\x1f\xd3\x0e\x20\x80\x0b\xf2\x06\x02\x01\x37\xf2\x0a\x03\x01\x2a\xf2\x0a\x03\x01\x2a\xf1\x0c\x00\x04\x0f\xf3\x02\x1b\x05\x2a\xf2\x3c\x03\x05\x3f\xf2\x0c\x05\x01\x22\xf2\x10\x07\x01\x1a\xf2\x14\x06\x01\x32\xf2\x12\x02\x01\x2e\xf2\x0a\x04\x01\x2e\xf1\x0e\x00\x04\x0f\xf3\x02\x05\x05\x52\x01\xf2\x10\x02\x05\x30\xf2\x0a\x07\x01\x14\xf3\x14\x13\x01\x0e\xf1\x2c\x00\x0e\x12\x90\x2d\xd7\x12\x28\xd1\x12\x28\xd3\x0d\x29\x80\x0a\xf0\x70\x07\x00\x11\x15\x8f\x7f\x89\x7f\x98\x71\xa0\x28\xd3\x0f\x2b\xa8\x67\xd1\x0f\x35\x80\x0c\xe0\x14\x17\x97\x4e\x91\x4e\xa0\x3c\xb0\x18\xd3\x14\x3a\xd0\x00\x11\xe0\x0b\x18\x80\x08\xd8\x07\x0d\x80\x04\xe0\x13\x18\x90\x27\x80\x0f\xd9\x03\x0e\xd8\x04\x13\xd7\x04\x1a\xd1\x04\x1a\x98\x36\xd4\x04\x22\xe0\x15\x2c\x90\x54\xd7\x15\x2c\xd1\x15\x2c\xd3\x15\x2e\xd0\x00\x12\xe0\x15\x1b\x90\x48\xd0\x00\x11\xe0\x38\x49\xd0\x00\x49\xd0\x00\x17\xd0\x1a\x35\xf0\x04\x43\x01\x01\x30\xc0\x14\xf4\x00\x43\x01\x01\x30\xf2\x4c\x02\x25\x01\x40\x01\xf2\x50\x01\x10\x01\x47\x01\xf2\x26\x09\x01\x14\xf2\x18\x09\x01\x10\xf2\x18\x1c\x01\x1f\xf2\x3e\x1e\x01\x11\xf2\x42\x01\x19\x01\x4c\x01\xf2\x38\x15\x01\x0a\xf3\x30\x0a\x01\x39\xf3\x1a\x07\x01\x10\xf3\x14\x08\x01\x10\xf2\x16\x09\x01\x44\x01\xf1\x1c\x00\x0d\x13\x8b\x48\x80\x09\xf0\x06\x43\x01\x01\x10\xb8\x34\xd8\x37\x40\xf4\x03\x43\x01\x01\x10\xf2\x4c\x02\x2d\x01\x17\xf7\x64\x01\x30\x01\x1c\xf1\x00\x30\x01\x1c\xf7\x66\x01\x1b\x01\x3c\xf1\x00\x1b\x01\x3c\xf4\x3c\x4e\x02\x01\x1b\x90\x3d\xf4\x00\x4e\x02\x01\x1b\xf7\x62\x04\x2f\x01\x20\xf1\x00\x2f\x01\x20\xf4\x64\x01\x2a\x01\x2d\x90\x7a\xa0\x3c\xf4\x00\x2a\x01\x2d\xf4\x5a\x01\x16\x01\x14\x98\x3a\xa0\x7d\xf4\x00\x16\x01\x14\xf4\x32\x32\x01\x19\x98\x2a\xa0\x6d\xf4\x00\x32\x01\x19\xf7\x6a\x01\x41\x01\x01\x20\xf1\x00\x41\x01\x01\x20\xf7\x4e\x02\x21\x01\x2b\xf1\x00\x21\x01\x2b\xf0\x4a\x01\x00\x14\x23\xd0\x00\x10\xf7\x0a\x79\x01\x01\x46\x01\xf1\x00\x79\x01\x01\x46\x01\xf7\x78\x03\x48\x02\x01\x2c\xf1\x00\x48\x02\x01\x2c\xf3\x5a\x04\x16\x01\x0d\xf2\x32\x08\x01\x2a\xf2\x16\x02\x01\x23\xf3\x0a\x05\x01\x25\xf9\xf2\x75\x34\x00\x18\x3a", }; static struct { @@ -51236,7 +51241,7 @@ static struct { PyObject_VAR_HEAD Py_hash_t ob_shash; - char ob_sval[124]; + char ob_sval[127]; } zipimport_toplevel_consts_30_linetable = { .ob_base = { @@ -51244,10 +51249,10 @@ zipimport_toplevel_consts_30_linetable = { .ob_refcnt = _Py_IMMORTAL_REFCNT, .ob_type = &PyBytes_Type, }, - .ob_size = 123, + .ob_size = 126, }, .ob_shash = -1, - .ob_sval = "\x80\x00\xf0\x02\x0c\x05\x14\xe0\x0f\x13\x90\x42\x90\x43\x88\x79\x98\x4a\xd1\x0f\x26\xd1\x08\x26\xd8\x0f\x13\x90\x43\x90\x52\x88\x79\x88\x04\xd8\x14\x18\x97\x4b\x91\x4b\xa0\x04\xd1\x14\x25\x88\x09\xf0\x06\x00\x10\x19\x98\x11\x89\x7c\x88\x04\xd8\x0f\x18\x98\x11\x89\x7c\x88\x04\xd8\x1c\x25\xa0\x61\x99\x4c\xd0\x08\x19\xdc\x0f\x1d\x98\x64\xa0\x44\xd3\x0f\x29\xd0\x2b\x3c\xd0\x0f\x3c\xd0\x08\x3c\xf8\xdc\x0c\x14\x94\x6a\xa4\x29\xd0\x0b\x2c\xf2\x00\x01\x05\x14\xd9\x0f\x13\xf0\x03\x01\x05\x14\xfa", + .ob_sval = "\x80\x00\xf0\x02\x0c\x05\x14\xe0\x0f\x13\x90\x42\x90\x43\x88\x79\x98\x4a\xd1\x0f\x26\xd0\x08\x26\xd0\x0f\x26\xd8\x0f\x13\x90\x43\x90\x52\x88\x79\x88\x04\xd8\x14\x18\x97\x4b\x91\x4b\xa0\x04\xd1\x14\x25\x88\x09\xf0\x06\x00\x10\x19\x98\x11\x89\x7c\x88\x04\xd8\x0f\x18\x98\x11\x89\x7c\x88\x04\xd8\x1c\x25\xa0\x61\x99\x4c\xd0\x08\x19\xdc\x0f\x1d\x98\x64\xa0\x44\xd3\x0f\x29\xd0\x2b\x3c\xd0\x0f\x3c\xd0\x08\x3c\xf8\xdc\x0c\x14\x94\x6a\xa4\x29\xd0\x0b\x2c\xf2\x00\x01\x05\x14\xd9\x0f\x13\xf0\x03\x01\x05\x14\xfa", }; static struct { @@ -51403,7 +51408,7 @@ static struct { PyObject_VAR_HEAD Py_hash_t ob_shash; - char ob_sval[89]; + char ob_sval[92]; } zipimport_toplevel_consts_31_linetable = { .ob_base = { @@ -51411,10 +51416,10 @@ zipimport_toplevel_consts_31_linetable = { .ob_refcnt = _Py_IMMORTAL_REFCNT, .ob_type = &PyBytes_Type, }, - .ob_size = 88, + .ob_size = 91, }, .ob_shash = -1, - .ob_sval = "\x80\x00\xe0\x0b\x0f\x90\x02\x90\x03\x88\x39\x98\x0a\xd1\x0b\x22\xd1\x04\x22\xd8\x0b\x0f\x90\x03\x90\x12\x88\x39\x80\x44\xf0\x04\x05\x05\x32\xd8\x14\x18\x97\x4b\x91\x4b\xa0\x04\xd1\x14\x25\x88\x09\xf4\x08\x00\x10\x19\x98\x14\x9f\x1c\x99\x1c\xa0\x79\xd3\x0f\x31\xd0\x08\x31\xf8\xf4\x07\x00\x0c\x14\xf2\x00\x01\x05\x14\xd9\x0f\x13\xf0\x03\x01\x05\x14\xfa", + .ob_sval = "\x80\x00\xe0\x0b\x0f\x90\x02\x90\x03\x88\x39\x98\x0a\xd1\x0b\x22\xd0\x04\x22\xd0\x0b\x22\xd8\x0b\x0f\x90\x03\x90\x12\x88\x39\x80\x44\xf0\x04\x05\x05\x32\xd8\x14\x18\x97\x4b\x91\x4b\xa0\x04\xd1\x14\x25\x88\x09\xf4\x08\x00\x10\x19\x98\x14\x9f\x1c\x99\x1c\xa0\x79\xd3\x0f\x31\xd0\x08\x31\xf8\xf4\x07\x00\x0c\x14\xf2\x00\x01\x05\x14\xd9\x0f\x13\xf0\x03\x01\x05\x14\xfa", }; static struct { @@ -111462,6 +111467,28 @@ const_str_O_RDONLY = { static struct { PyASCIIObject _ascii; + uint8_t _data[11]; + } +const_str_O_NONBLOCK = { + ._ascii = { + .ob_base = { + .ob_refcnt = _Py_IMMORTAL_REFCNT, + .ob_type = &PyUnicode_Type, + }, + .length = 10, + .hash = -1, + .state = { + .kind = 1, + .compact = 1, + .ascii = 1, + .statically_allocated = 1, + }, + }, + ._data = "O_NONBLOCK", +}; +static + struct { + PyASCIIObject _ascii; uint8_t _data[7]; } const_str__fwalk = { @@ -111486,7 +111513,7 @@ static PyGC_Head _gc_head; struct { PyObject_VAR_HEAD - PyObject *ob_item[15]; + PyObject *ob_item[16]; }_object; } os_toplevel_consts_86_names = { @@ -111496,7 +111523,7 @@ os_toplevel_consts_86_names = { .ob_refcnt = _Py_IMMORTAL_REFCNT, .ob_type = &PyTuple_Type, }, - .ob_size = 15, + .ob_size = 16, }, .ob_item = { & const_str_sys._ascii.ob_base, @@ -111505,6 +111532,7 @@ os_toplevel_consts_86_names = { & const_str_stat._ascii.ob_base, &_Py_ID(open), & const_str_O_RDONLY._ascii.ob_base, + & const_str_O_NONBLOCK._ascii.ob_base, & const_str_st._ascii.ob_base, & const_str_S_ISDIR._ascii.ob_base, & const_str_st_mode._ascii.ob_base, @@ -111543,7 +111571,7 @@ static struct { PyObject_VAR_HEAD Py_hash_t ob_shash; - char ob_sval[181]; + char ob_sval[186]; } os_toplevel_consts_86_linetable = { .ob_base = { @@ -111551,10 +111579,10 @@ os_toplevel_consts_86_linetable = { .ob_refcnt = _Py_IMMORTAL_REFCNT, .ob_type = &PyBytes_Type, }, - .ob_size = 180, + .ob_size = 185, }, .ob_shash = -1, - .ob_sval = "\xe8\x00\xf8\x80\x00\xf4\x42\x01\x00\x09\x0c\x8f\x09\x89\x09\x90\x2a\x98\x63\xa0\x37\xa8\x47\xb0\x5f\xc0\x66\xd4\x08\x4d\xdc\x0e\x14\x90\x53\x8b\x6b\x88\x03\xf1\x06\x00\x10\x1f\xdc\x16\x1a\x98\x33\xb0\x05\xb8\x66\xd4\x16\x45\x88\x47\xdc\x10\x14\x90\x53\x9c\x28\xa8\x36\xd4\x10\x32\x88\x05\xf0\x02\x06\x09\x19\xd9\x10\x1f\xa4\x42\xa7\x4a\xa1\x4a\xa8\x77\xaf\x7f\xa9\x7f\xd4\x24\x3f\xdc\x24\x28\xa7\x4d\xa1\x4d\xb0\x27\xbc\x34\xc0\x05\xbb\x3b\xd4\x24\x47\xdc\x1b\x21\xa0\x25\xa8\x13\xac\x6a\xb8\x13\xbc\x65\xd3\x2e\x44\xd8\x22\x29\xa8\x37\xb0\x4f\xf3\x03\x01\x1c\x45\x01\xf7\x00\x01\x11\x45\x01\xf0\x00\x01\x11\x45\x01\xf4\x06\x00\x0d\x12\x90\x25\x8d\x4c\xf0\x07\x01\x11\x45\x01\xf9\xf4\x06\x00\x0d\x12\x90\x25\x8d\x4c\xfc", + .ob_sval = "\xe8\x00\xf8\x80\x00\xf4\x42\x01\x00\x09\x0c\x8f\x09\x89\x09\x90\x2a\x98\x63\xa0\x37\xa8\x47\xb0\x5f\xc0\x66\xd4\x08\x4d\xdc\x0e\x14\x90\x53\x8b\x6b\x88\x03\xf1\x06\x00\x10\x1f\xdc\x16\x1a\x98\x33\xb0\x05\xb8\x66\xd4\x16\x45\x88\x47\xdc\x10\x14\x90\x53\x9c\x28\xa4\x5a\xd1\x1a\x2f\xb8\x06\xd4\x10\x3f\x88\x05\xf0\x02\x06\x09\x19\xd9\x10\x1f\xa4\x42\xa7\x4a\xa1\x4a\xa8\x77\xaf\x7f\xa9\x7f\xd4\x24\x3f\xdc\x24\x28\xa7\x4d\xa1\x4d\xb0\x27\xbc\x34\xc0\x05\xbb\x3b\xd4\x24\x47\xdc\x1b\x21\xa0\x25\xa8\x13\xac\x6a\xb8\x13\xbc\x65\xd3\x2e\x44\xd8\x22\x29\xa8\x37\xb0\x4f\xf3\x03\x01\x1c\x45\x01\xf7\x00\x01\x11\x45\x01\xf0\x00\x01\x11\x45\x01\xf4\x06\x00\x0d\x12\x90\x25\x8d\x4c\xf0\x07\x01\x11\x45\x01\xf9\xf4\x06\x00\x0d\x12\x90\x25\x8d\x4c\xfc", }; static struct { @@ -111571,7 +111599,7 @@ os_toplevel_consts_86_exceptiontable = { .ob_size = 49, }, .ob_shash = -1, - .ob_sval = "\x82\x41\x08\x43\x0f\x01\xc1\x0b\x41\x21\x42\x3f\x00\xc2\x2c\x01\x42\x3d\x04\xc2\x2d\x04\x42\x3f\x00\xc2\x31\x0c\x43\x0f\x01\xc2\x3d\x01\x42\x3f\x00\xc2\x3f\x0d\x43\x0c\x03\xc3\x0c\x03\x43\x0f\x01", + .ob_sval = "\x82\x41\x0f\x43\x16\x01\xc1\x12\x41\x21\x43\x06\x00\xc2\x33\x01\x43\x04\x04\xc2\x34\x04\x43\x06\x00\xc2\x38\x0c\x43\x16\x01\xc3\x04\x01\x43\x06\x00\xc3\x06\x0d\x43\x13\x03\xc3\x13\x03\x43\x16\x01", }; static struct { @@ -111646,14 +111674,14 @@ os_toplevel_consts_86_localsplusnames = { }, }; static - struct _PyCode_DEF(418) + struct _PyCode_DEF(432) os_toplevel_consts_86 = { .ob_base = { .ob_base = { .ob_refcnt = _Py_IMMORTAL_REFCNT, .ob_type = &PyCode_Type, }, - .ob_size = 209, + .ob_size = 216, }, .co_consts = & os_toplevel_consts_86_consts._object.ob_base.ob_base, .co_names = & os_toplevel_consts_86_names._object.ob_base.ob_base, @@ -111677,7 +111705,7 @@ os_toplevel_consts_86 = { .co_qualname = & const_str_fwalk._ascii.ob_base, .co_linetable = & os_toplevel_consts_86_linetable.ob_base.ob_base, ._co_cached = NULL, - .co_code_adaptive = "\x4b\x00\x01\x00\x97\x00\x74\x01\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x64\x01\x7c\x00\x7c\x01\x7c\x02\x7c\x03\x7c\x04\xab\x06\x00\x00\x00\x00\x00\x00\x01\x00\x74\x05\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x00\xab\x01\x00\x00\x00\x00\x00\x00\x7d\x00\x7c\x03\x73\x0e\x74\x07\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x00\x64\x02\x7c\x04\xac\x03\xab\x03\x00\x00\x00\x00\x00\x00\x7d\x05\x74\x09\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x00\x74\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x04\xac\x04\xab\x03\x00\x00\x00\x00\x00\x00\x7d\x06\x09\x00\x7c\x03\x73\x3e\x74\x0d\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x05\x6a\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xab\x01\x00\x00\x00\x00\x00\x00\x72\x45\x74\x13\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x05\x74\x07\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x06\xab\x01\x00\x00\x00\x00\x00\x00\xab\x02\x00\x00\x00\x00\x00\x00\x72\x26\x74\x17\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x06\x7c\x00\x74\x19\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x00\x74\x1a\x00\x00\x00\x00\x00\x00\x00\x00\xab\x02\x00\x00\x00\x00\x00\x00\x7c\x01\x7c\x02\x7c\x03\xab\x06\x00\x00\x00\x00\x00\x00\x45\x00\x64\x05\x7b\x03\x00\x00\x96\x03\x97\x02\x86\x05\x05\x00\x01\x00\x74\x1d\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x06\xab\x01\x00\x00\x00\x00\x00\x00\x01\x00\x79\x05\x37\x00\x8c\x10\x23\x00\x74\x1d\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x06\xab\x01\x00\x00\x00\x00\x00\x00\x01\x00\x77\x00\x78\x03\x59\x00\x77\x01\xad\x03\x77\x01", + .co_code_adaptive = "\x4b\x00\x01\x00\x97\x00\x74\x01\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x64\x01\x7c\x00\x7c\x01\x7c\x02\x7c\x03\x7c\x04\xab\x06\x00\x00\x00\x00\x00\x00\x01\x00\x74\x05\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x00\xab\x01\x00\x00\x00\x00\x00\x00\x7d\x00\x7c\x03\x73\x0e\x74\x07\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x00\x64\x02\x7c\x04\xac\x03\xab\x03\x00\x00\x00\x00\x00\x00\x7d\x05\x74\x09\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x00\x74\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x74\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x7a\x07\x00\x00\x7c\x04\xac\x04\xab\x03\x00\x00\x00\x00\x00\x00\x7d\x06\x09\x00\x7c\x03\x73\x3e\x74\x0f\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x05\x6a\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xab\x01\x00\x00\x00\x00\x00\x00\x72\x45\x74\x15\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x16\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x05\x74\x07\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x06\xab\x01\x00\x00\x00\x00\x00\x00\xab\x02\x00\x00\x00\x00\x00\x00\x72\x26\x74\x19\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x06\x7c\x00\x74\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x00\x74\x1c\x00\x00\x00\x00\x00\x00\x00\x00\xab\x02\x00\x00\x00\x00\x00\x00\x7c\x01\x7c\x02\x7c\x03\xab\x06\x00\x00\x00\x00\x00\x00\x45\x00\x64\x05\x7b\x03\x00\x00\x96\x03\x97\x02\x86\x05\x05\x00\x01\x00\x74\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x06\xab\x01\x00\x00\x00\x00\x00\x00\x01\x00\x79\x05\x37\x00\x8c\x10\x23\x00\x74\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x06\xab\x01\x00\x00\x00\x00\x00\x00\x01\x00\x77\x00\x78\x03\x59\x00\x77\x01\xad\x03\x77\x01", ._co_firsttraceable = 2, }; static @@ -111756,7 +111784,7 @@ static PyGC_Head _gc_head; struct { PyObject_VAR_HEAD - PyObject *ob_item[16]; + PyObject *ob_item[17]; }_object; } os_toplevel_consts_87_names = { @@ -111766,7 +111794,7 @@ os_toplevel_consts_87_names = { .ob_refcnt = _Py_IMMORTAL_REFCNT, .ob_type = &PyTuple_Type, }, - .ob_size = 16, + .ob_size = 17, }, .ob_item = { & const_str_scandir._ascii.ob_base, @@ -111780,6 +111808,7 @@ os_toplevel_consts_87_names = { & const_str_stat._ascii.ob_base, &_Py_ID(open), & const_str_O_RDONLY._ascii.ob_base, + & const_str_O_NONBLOCK._ascii.ob_base, &_Py_ID(path), & const_str_samestat._ascii.ob_base, &_Py_ID(join), @@ -111792,7 +111821,7 @@ static struct { PyObject_VAR_HEAD Py_hash_t ob_shash; - char ob_sval[476]; + char ob_sval[484]; } os_toplevel_consts_87_linetable = { .ob_base = { @@ -111800,10 +111829,10 @@ os_toplevel_consts_87_linetable = { .ob_refcnt = _Py_IMMORTAL_REFCNT, .ob_type = &PyBytes_Type, }, - .ob_size = 475, + .ob_size = 483, }, .ob_shash = -1, - .ob_sval = "\xe8\x00\xf8\x80\x00\xf4\x0a\x00\x16\x1d\x98\x55\x93\x5e\x88\x0a\xd8\x0f\x11\x88\x04\xd8\x12\x14\x88\x07\xd9\x1a\x21\xa1\x5f\x91\x24\xb8\x22\x88\x07\xd8\x15\x1f\xf2\x00\x11\x09\x19\x88\x45\xd8\x13\x18\x97\x3a\x91\x3a\x88\x44\xd9\x0f\x16\xdc\x17\x1f\xa0\x04\x93\x7e\x90\x04\xf0\x02\x0d\x0d\x19\xd8\x13\x18\x97\x3c\x91\x3c\x94\x3e\xd8\x14\x18\x97\x4b\x91\x4b\xa0\x04\xd4\x14\x25\xd8\x17\x1e\xd0\x17\x2a\xd8\x18\x1f\x9f\x0e\x99\x0e\xa0\x75\xd5\x18\x2d\xe0\x14\x1b\x97\x4e\x91\x4e\xa0\x34\xd4\x14\x28\xf8\xf0\x15\x11\x09\x19\xf1\x26\x00\x0c\x13\xd8\x12\x19\x98\x34\xa0\x17\xa8\x25\xd0\x12\x2f\xd2\x0c\x2f\xe0\x1c\x23\x98\x4f\x91\x44\xb4\x13\xb0\x54\xb8\x37\xd3\x31\x43\xf2\x00\x14\x09\x1d\x88\x44\xf0\x02\x0c\x0d\x19\xd9\x17\x26\xd9\x17\x1e\xdc\x22\x26\xa0\x74\xb0\x45\xc8\x35\xd4\x22\x51\x99\x07\xe0\x1f\x26\xd0\x1f\x32\xd1\x18\x32\xd8\x26\x2a\x99\x0b\x98\x04\x98\x65\xd8\x22\x27\xa7\x2a\xa1\x2a\xb8\x55\xa0\x2a\xd3\x22\x43\x98\x07\xdc\x18\x1c\x98\x54\xa4\x38\xb0\x45\xd4\x18\x3a\x90\x05\xf0\x0a\x06\x0d\x1d\xd9\x13\x22\xa4\x64\xa7\x6d\xa1\x6d\xb0\x47\xbc\x54\xc0\x25\xbb\x5b\xd4\x26\x49\xdc\x1e\x22\x9f\x69\x99\x69\xa8\x07\xb0\x14\xd3\x1e\x36\x90\x47\xdc\x1f\x25\xa0\x65\xa8\x57\xb0\x67\xd8\x26\x2d\xa8\x77\xb8\x0f\xf3\x03\x01\x20\x49\x01\xf7\x00\x01\x15\x49\x01\xf0\x00\x01\x15\x49\x01\xf4\x06\x00\x11\x16\x90\x65\x95\x0c\xf0\x29\x14\x09\x1d\xf1\x2c\x00\x10\x17\xd8\x12\x19\x98\x34\xa0\x17\xa8\x25\xd0\x12\x2f\xd3\x0c\x2f\xf0\x03\x00\x10\x17\xf8\xf4\x43\x01\x00\x14\x1b\xf2\x00\x06\x0d\x19\xf0\x02\x05\x11\x19\xe0\x17\x1c\xd7\x17\x27\xd1\x17\x27\xd4\x17\x29\xd8\x18\x1f\x9f\x0e\x99\x0e\xa0\x74\xd4\x18\x2c\xf9\xdc\x17\x1e\xf2\x00\x01\x11\x19\xd9\x14\x18\xf0\x03\x01\x11\x19\xfd\xf0\x0b\x06\x0d\x19\xfb\xf4\x2a\x00\x14\x1b\xf2\x00\x03\x0d\x19\xd8\x13\x1a\xd0\x13\x26\xd9\x14\x1b\x98\x43\x94\x4c\xdd\x10\x18\xfb\xf0\x07\x03\x0d\x19\xfa\xf0\x0e\x01\x15\x49\x01\xf9\xf4\x06\x00\x11\x16\x90\x65\x95\x0c\xfc", + .ob_sval = "\xe8\x00\xf8\x80\x00\xf4\x0a\x00\x16\x1d\x98\x55\x93\x5e\x88\x0a\xd8\x0f\x11\x88\x04\xd8\x12\x14\x88\x07\xd9\x1a\x21\xa1\x5f\x91\x24\xb8\x22\x88\x07\xd8\x15\x1f\xf2\x00\x11\x09\x19\x88\x45\xd8\x13\x18\x97\x3a\x91\x3a\x88\x44\xd9\x0f\x16\xdc\x17\x1f\xa0\x04\x93\x7e\x90\x04\xf0\x02\x0d\x0d\x19\xd8\x13\x18\x97\x3c\x91\x3c\x94\x3e\xd8\x14\x18\x97\x4b\x91\x4b\xa0\x04\xd4\x14\x25\xd8\x17\x1e\xd0\x17\x2a\xd8\x18\x1f\x9f\x0e\x99\x0e\xa0\x75\xd5\x18\x2d\xe0\x14\x1b\x97\x4e\x91\x4e\xa0\x34\xd4\x14\x28\xf8\xf0\x15\x11\x09\x19\xf1\x26\x00\x0c\x13\xd8\x12\x19\x98\x34\xa0\x17\xa8\x25\xd0\x12\x2f\xd2\x0c\x2f\xe0\x1c\x23\x98\x4f\x91\x44\xb4\x13\xb0\x54\xb8\x37\xd3\x31\x43\xf2\x00\x14\x09\x1d\x88\x44\xf0\x02\x0c\x0d\x19\xd9\x17\x26\xd9\x17\x1e\xdc\x22\x26\xa0\x74\xb0\x45\xc8\x35\xd4\x22\x51\x99\x07\xe0\x1f\x26\xd0\x1f\x32\xd0\x18\x32\xd0\x1f\x32\xd8\x26\x2a\x99\x0b\x98\x04\x98\x65\xd8\x22\x27\xa7\x2a\xa1\x2a\xb8\x55\xa0\x2a\xd3\x22\x43\x98\x07\xdc\x18\x1c\x98\x54\xa4\x38\xac\x6a\xd1\x23\x38\xc0\x15\xd4\x18\x47\x90\x05\xf0\x0a\x06\x0d\x1d\xd9\x13\x22\xa4\x64\xa7\x6d\xa1\x6d\xb0\x47\xbc\x54\xc0\x25\xbb\x5b\xd4\x26\x49\xdc\x1e\x22\x9f\x69\x99\x69\xa8\x07\xb0\x14\xd3\x1e\x36\x90\x47\xdc\x1f\x25\xa0\x65\xa8\x57\xb0\x67\xd8\x26\x2d\xa8\x77\xb8\x0f\xf3\x03\x01\x20\x49\x01\xf7\x00\x01\x15\x49\x01\xf0\x00\x01\x15\x49\x01\xf4\x06\x00\x11\x16\x90\x65\x95\x0c\xf0\x29\x14\x09\x1d\xf1\x2c\x00\x10\x17\xd8\x12\x19\x98\x34\xa0\x17\xa8\x25\xd0\x12\x2f\xd3\x0c\x2f\xf0\x03\x00\x10\x17\xf8\xf4\x43\x01\x00\x14\x1b\xf2\x00\x06\x0d\x19\xf0\x02\x05\x11\x19\xe0\x17\x1c\xd7\x17\x27\xd1\x17\x27\xd4\x17\x29\xd8\x18\x1f\x9f\x0e\x99\x0e\xa0\x74\xd4\x18\x2c\xf9\xdc\x17\x1e\xf2\x00\x01\x11\x19\xd9\x14\x18\xf0\x03\x01\x11\x19\xfd\xf0\x0b\x06\x0d\x19\xfb\xf4\x2a\x00\x14\x1b\xf2\x00\x03\x0d\x19\xd8\x13\x1a\xd0\x13\x26\xd9\x14\x1b\x98\x43\x94\x4c\xdd\x10\x18\xfb\xf0\x07\x03\x0d\x19\xfa\xf0\x0e\x01\x15\x49\x01\xf9\xf4\x06\x00\x11\x16\x90\x65\x95\x0c\xfc", }; static struct { @@ -111820,7 +111849,7 @@ os_toplevel_consts_87_exceptiontable = { .ob_size = 157, }, .ob_shash = -1, - .ob_sval = "\x82\x36\x46\x3d\x01\xb9\x41\x06\x45\x08\x02\xc1\x3f\x1f\x46\x3d\x01\xc2\x1f\x41\x00\x46\x0a\x02\xc3\x20\x41\x0a\x46\x2d\x02\xc4\x2a\x01\x46\x2b\x06\xc4\x2b\x04\x46\x2d\x02\xc4\x2f\x19\x46\x3d\x01\xc5\x08\x09\x46\x07\x05\xc5\x12\x21\x45\x34\x04\xc5\x33\x01\x46\x07\x05\xc5\x34\x09\x46\x00\x07\xc5\x3d\x02\x46\x07\x05\xc5\x3f\x01\x46\x00\x07\xc6\x00\x03\x46\x07\x05\xc6\x03\x03\x46\x3d\x01\xc6\x06\x01\x46\x07\x05\xc6\x07\x03\x46\x3d\x01\xc6\x0a\x09\x46\x28\x05\xc6\x13\x0a\x46\x23\x05\xc6\x1d\x06\x46\x3d\x01\xc6\x23\x05\x46\x28\x05\xc6\x28\x03\x46\x3d\x01\xc6\x2b\x01\x46\x2d\x02\xc6\x2d\x0d\x46\x3a\x05\xc6\x3a\x03\x46\x3d\x01", + .ob_sval = "\x82\x36\x47\x04\x01\xb9\x41\x06\x45\x0f\x02\xc1\x3f\x1f\x47\x04\x01\xc2\x1f\x41\x07\x46\x11\x02\xc3\x27\x41\x0a\x46\x34\x02\xc4\x31\x01\x46\x32\x06\xc4\x32\x04\x46\x34\x02\xc4\x36\x19\x47\x04\x01\xc5\x0f\x09\x46\x0e\x05\xc5\x19\x21\x45\x3b\x04\xc5\x3a\x01\x46\x0e\x05\xc5\x3b\x09\x46\x07\x07\xc6\x04\x02\x46\x0e\x05\xc6\x06\x01\x46\x07\x07\xc6\x07\x03\x46\x0e\x05\xc6\x0a\x03\x47\x04\x01\xc6\x0d\x01\x46\x0e\x05\xc6\x0e\x03\x47\x04\x01\xc6\x11\x09\x46\x2f\x05\xc6\x1a\x0a\x46\x2a\x05\xc6\x24\x06\x47\x04\x01\xc6\x2a\x05\x46\x2f\x05\xc6\x2f\x03\x47\x04\x01\xc6\x32\x01\x46\x34\x02\xc6\x34\x0d\x47\x01\x05\xc7\x01\x03\x47\x04\x01", }; static struct { @@ -111987,14 +112016,14 @@ os_toplevel_consts_87_localspluskinds = { .ob_sval = " ", }; static - struct _PyCode_DEF(894) + struct _PyCode_DEF(908) os_toplevel_consts_87 = { .ob_base = { .ob_base = { .ob_refcnt = _Py_IMMORTAL_REFCNT, .ob_type = &PyCode_Type, }, - .ob_size = 447, + .ob_size = 454, }, .co_consts = & os_toplevel_consts_87_consts._object.ob_base.ob_base, .co_names = & os_toplevel_consts_87_names._object.ob_base.ob_base, @@ -112018,7 +112047,7 @@ os_toplevel_consts_87 = { .co_qualname = & const_str__fwalk._ascii.ob_base, .co_linetable = & os_toplevel_consts_87_linetable.ob_base.ob_base, ._co_cached = NULL, - .co_code_adaptive = "\x4b\x00\x01\x00\x97\x00\x74\x01\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x00\xab\x01\x00\x00\x00\x00\x00\x00\x7d\x06\x67\x00\x7d\x07\x67\x00\x7d\x08\x7c\x03\x73\x02\x7c\x05\x72\x02\x64\x00\x6e\x01\x67\x00\x7d\x09\x7c\x06\x44\x00\x5d\x62\x00\x00\x7d\x0a\x7c\x0a\x6a\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7d\x0b\x7c\x02\x72\x0b\x74\x05\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x0b\xab\x01\x00\x00\x00\x00\x00\x00\x7d\x0b\x09\x00\x7c\x0a\x6a\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xab\x00\x00\x00\x00\x00\x00\x00\x72\x25\x7c\x07\x6a\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x0b\xab\x01\x00\x00\x00\x00\x00\x00\x01\x00\x7c\x09\x81\x23\x7c\x09\x6a\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x0a\xab\x01\x00\x00\x00\x00\x00\x00\x01\x00\x6e\x11\x7c\x08\x6a\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x0b\xab\x01\x00\x00\x00\x00\x00\x00\x01\x00\x8c\x64\x04\x00\x7c\x03\x72\x08\x7c\x01\x7c\x07\x7c\x08\x7c\x00\x66\x04\x96\x01\x97\x01\x01\x00\x7c\x09\x80\x02\x7c\x07\x6e\x0b\x74\x0f\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x07\x7c\x09\xab\x02\x00\x00\x00\x00\x00\x00\x44\x00\x5d\x9e\x00\x00\x7d\x0b\x09\x00\x7c\x05\x73\x2c\x7c\x03\x72\x0f\x74\x11\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x0b\x7c\x00\x64\x01\xac\x02\xab\x03\x00\x00\x00\x00\x00\x00\x7d\x0c\x6e\x1b\x7c\x09\x80\x02\x4a\x00\x82\x01\x7c\x0b\x5c\x02\x00\x00\x7d\x0b\x7d\x0a\x7c\x0a\x6a\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x64\x01\xac\x03\xab\x01\x00\x00\x00\x00\x00\x00\x7d\x0c\x74\x13\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x0b\x74\x14\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x00\xac\x04\xab\x03\x00\x00\x00\x00\x00\x00\x7d\x0d\x09\x00\x7c\x05\x73\x1f\x74\x17\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x0c\x74\x11\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x0d\xab\x01\x00\x00\x00\x00\x00\x00\xab\x02\x00\x00\x00\x00\x00\x00\x72\x2e\x74\x17\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x1a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x01\x7c\x0b\xab\x02\x00\x00\x00\x00\x00\x00\x7d\x0f\x74\x1d\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x0d\x7c\x0f\x7c\x02\x7c\x03\x7c\x04\x7c\x05\xab\x06\x00\x00\x00\x00\x00\x00\x45\x00\x64\x00\x7b\x03\x00\x00\x96\x03\x97\x02\x86\x05\x05\x00\x01\x00\x74\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x0d\xab\x01\x00\x00\x00\x00\x00\x00\x01\x00\x8c\xa0\x04\x00\x7c\x03\x73\x09\x7c\x01\x7c\x07\x7c\x08\x7c\x00\x66\x04\x96\x01\x97\x01\x01\x00\x79\x00\x79\x00\x23\x00\x74\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x72\x36\x01\x00\x09\x00\x7c\x0a\x6a\x0d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xab\x00\x00\x00\x00\x00\x00\x00\x72\x11\x7c\x08\x6a\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x0b\xab\x01\x00\x00\x00\x00\x00\x00\x01\x00\x6e\x0f\x23\x00\x74\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x72\x03\x01\x00\x59\x00\x6e\x04\x77\x00\x78\x03\x59\x00\x77\x01\x59\x00\x90\x01\x8c\x6a\x77\x00\x78\x03\x59\x00\x77\x01\x23\x00\x74\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x72\x15\x7d\x0e\x7c\x04\x81\x08\x02\x00\x7c\x04\x7c\x0e\xab\x01\x00\x00\x00\x00\x00\x00\x01\x00\x59\x00\x64\x00\x7d\x0e\x7e\x0e\x90\x01\x8c\x08\x64\x00\x7d\x0e\x7e\x0e\x77\x01\x77\x00\x78\x03\x59\x00\x77\x01\x37\x00\x8c\x80\x23\x00\x74\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x0d\xab\x01\x00\x00\x00\x00\x00\x00\x01\x00\x77\x00\x78\x03\x59\x00\x77\x01\xad\x03\x77\x01", + .co_code_adaptive = "\x4b\x00\x01\x00\x97\x00\x74\x01\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x00\xab\x01\x00\x00\x00\x00\x00\x00\x7d\x06\x67\x00\x7d\x07\x67\x00\x7d\x08\x7c\x03\x73\x02\x7c\x05\x72\x02\x64\x00\x6e\x01\x67\x00\x7d\x09\x7c\x06\x44\x00\x5d\x62\x00\x00\x7d\x0a\x7c\x0a\x6a\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7d\x0b\x7c\x02\x72\x0b\x74\x05\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x0b\xab\x01\x00\x00\x00\x00\x00\x00\x7d\x0b\x09\x00\x7c\x0a\x6a\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xab\x00\x00\x00\x00\x00\x00\x00\x72\x25\x7c\x07\x6a\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x0b\xab\x01\x00\x00\x00\x00\x00\x00\x01\x00\x7c\x09\x81\x23\x7c\x09\x6a\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x0a\xab\x01\x00\x00\x00\x00\x00\x00\x01\x00\x6e\x11\x7c\x08\x6a\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x0b\xab\x01\x00\x00\x00\x00\x00\x00\x01\x00\x8c\x64\x04\x00\x7c\x03\x72\x08\x7c\x01\x7c\x07\x7c\x08\x7c\x00\x66\x04\x96\x01\x97\x01\x01\x00\x7c\x09\x80\x02\x7c\x07\x6e\x0b\x74\x0f\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x07\x7c\x09\xab\x02\x00\x00\x00\x00\x00\x00\x44\x00\x5d\xa5\x00\x00\x7d\x0b\x09\x00\x7c\x05\x73\x2c\x7c\x03\x72\x0f\x74\x11\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x0b\x7c\x00\x64\x01\xac\x02\xab\x03\x00\x00\x00\x00\x00\x00\x7d\x0c\x6e\x1b\x7c\x09\x80\x02\x4a\x00\x82\x01\x7c\x0b\x5c\x02\x00\x00\x7d\x0b\x7d\x0a\x7c\x0a\x6a\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x64\x01\xac\x03\xab\x01\x00\x00\x00\x00\x00\x00\x7d\x0c\x74\x13\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x0b\x74\x14\x00\x00\x00\x00\x00\x00\x00\x00\x74\x16\x00\x00\x00\x00\x00\x00\x00\x00\x7a\x07\x00\x00\x7c\x00\xac\x04\xab\x03\x00\x00\x00\x00\x00\x00\x7d\x0d\x09\x00\x7c\x05\x73\x1f\x74\x19\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x1a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x0c\x74\x11\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x0d\xab\x01\x00\x00\x00\x00\x00\x00\xab\x02\x00\x00\x00\x00\x00\x00\x72\x2e\x74\x19\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x1c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x01\x7c\x0b\xab\x02\x00\x00\x00\x00\x00\x00\x7d\x0f\x74\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x0d\x7c\x0f\x7c\x02\x7c\x03\x7c\x04\x7c\x05\xab\x06\x00\x00\x00\x00\x00\x00\x45\x00\x64\x00\x7b\x03\x00\x00\x96\x03\x97\x02\x86\x05\x05\x00\x01\x00\x74\x21\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x0d\xab\x01\x00\x00\x00\x00\x00\x00\x01\x00\x8c\xa7\x04\x00\x7c\x03\x73\x09\x7c\x01\x7c\x07\x7c\x08\x7c\x00\x66\x04\x96\x01\x97\x01\x01\x00\x79\x00\x79\x00\x23\x00\x74\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x72\x36\x01\x00\x09\x00\x7c\x0a\x6a\x0d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xab\x00\x00\x00\x00\x00\x00\x00\x72\x11\x7c\x08\x6a\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x0b\xab\x01\x00\x00\x00\x00\x00\x00\x01\x00\x6e\x0f\x23\x00\x74\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x72\x03\x01\x00\x59\x00\x6e\x04\x77\x00\x78\x03\x59\x00\x77\x01\x59\x00\x90\x01\x8c\x71\x77\x00\x78\x03\x59\x00\x77\x01\x23\x00\x74\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\x72\x15\x7d\x0e\x7c\x04\x81\x08\x02\x00\x7c\x04\x7c\x0e\xab\x01\x00\x00\x00\x00\x00\x00\x01\x00\x59\x00\x64\x00\x7d\x0e\x7e\x0e\x90\x01\x8c\x0f\x64\x00\x7d\x0e\x7e\x0e\x77\x01\x77\x00\x78\x03\x59\x00\x77\x01\x37\x00\x8c\x80\x23\x00\x74\x21\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x0d\xab\x01\x00\x00\x00\x00\x00\x00\x01\x00\x77\x00\x78\x03\x59\x00\x77\x01\xad\x03\x77\x01", ._co_firsttraceable = 2, }; static @@ -134576,7 +134605,7 @@ importlib_util_toplevel_consts_15 = { .co_kwonlyargcount = 0, .co_framesize = 5 + FRAME_SPECIALS_SIZE, .co_stacksize = 4, - .co_firstlineno = 19, + .co_firstlineno = 20, .co_nlocalsplus = 1, .co_nlocals = 1, .co_ncellvars = 0, @@ -134794,7 +134823,7 @@ importlib_util_toplevel_consts_16 = { .co_kwonlyargcount = 0, .co_framesize = 10 + FRAME_SPECIALS_SIZE, .co_stacksize = 6, - .co_firstlineno = 24, + .co_firstlineno = 25, .co_nlocalsplus = 4, .co_nlocals = 4, .co_ncellvars = 0, @@ -135028,7 +135057,7 @@ importlib_util_toplevel_consts_17 = { .co_kwonlyargcount = 0, .co_framesize = 9 + FRAME_SPECIALS_SIZE, .co_stacksize = 5, - .co_firstlineno = 39, + .co_firstlineno = 40, .co_nlocalsplus = 4, .co_nlocals = 4, .co_ncellvars = 0, @@ -135302,7 +135331,7 @@ importlib_util_toplevel_consts_18 = { .co_kwonlyargcount = 0, .co_framesize = 16 + FRAME_SPECIALS_SIZE, .co_stacksize = 7, - .co_firstlineno = 70, + .co_firstlineno = 71, .co_nlocalsplus = 9, .co_nlocals = 9, .co_ncellvars = 0, @@ -135360,7 +135389,7 @@ importlib_util_toplevel_consts_19_consts_1 = { .statically_allocated = 1, }, }, - ._data = "\x41\x20\x63\x6f\x6e\x74\x65\x78\x74\x20\x6d\x61\x6e\x61\x67\x65\x72\x20\x74\x68\x61\x74\x20\x63\x61\x6e\x20\x74\x65\x6d\x70\x6f\x72\x61\x72\x69\x6c\x79\x20\x73\x6b\x69\x70\x20\x74\x68\x65\x20\x63\x6f\x6d\x70\x61\x74\x69\x62\x69\x6c\x69\x74\x79\x20\x63\x68\x65\x63\x6b\x2e\x0a\x0a\x20\x20\x20\x20\x4e\x4f\x54\x45\x3a\x20\x54\x68\x69\x73\x20\x66\x75\x6e\x63\x74\x69\x6f\x6e\x20\x69\x73\x20\x6d\x65\x61\x6e\x74\x20\x74\x6f\x20\x61\x63\x63\x6f\x6d\x6d\x6f\x64\x61\x74\x65\x20\x61\x6e\x20\x75\x6e\x75\x73\x75\x61\x6c\x20\x63\x61\x73\x65\x3b\x20\x6f\x6e\x65\x0a\x20\x20\x20\x20\x77\x68\x69\x63\x68\x20\x69\x73\x20\x6c\x69\x6b\x65\x6c\x79\x20\x74\x6f\x20\x65\x76\x65\x6e\x74\x75\x61\x6c\x6c\x79\x20\x67\x6f\x20\x61\x77\x61\x79\x2e\x20\x20\x54\x68\x65\x72\x65\x27\x73\x20\x69\x73\x20\x61\x20\x70\x72\x65\x74\x74\x79\x20\x67\x6f\x6f\x64\x0a\x20\x20\x20\x20\x63\x68\x61\x6e\x63\x65\x20\x74\x68\x69\x73\x20\x69\x73\x20\x6e\x6f\x74\x20\x77\x68\x61\x74\x20\x79\x6f\x75\x20\x77\x65\x72\x65\x20\x6c\x6f\x6f\x6b\x69\x6e\x67\x20\x66\x6f\x72\x2e\x0a\x0a\x20\x20\x20\x20\x57\x41\x52\x4e\x49\x4e\x47\x3a\x20\x55\x73\x69\x6e\x67\x20\x74\x68\x69\x73\x20\x66\x75\x6e\x63\x74\x69\x6f\x6e\x20\x74\x6f\x20\x64\x69\x73\x61\x62\x6c\x65\x20\x74\x68\x65\x20\x63\x68\x65\x63\x6b\x20\x63\x61\x6e\x20\x6c\x65\x61\x64\x20\x74\x6f\x0a\x20\x20\x20\x20\x75\x6e\x65\x78\x70\x65\x63\x74\x65\x64\x20\x62\x65\x68\x61\x76\x69\x6f\x72\x20\x61\x6e\x64\x20\x65\x76\x65\x6e\x20\x63\x72\x61\x73\x68\x65\x73\x2e\x20\x20\x49\x74\x20\x73\x68\x6f\x75\x6c\x64\x20\x6f\x6e\x6c\x79\x20\x62\x65\x20\x75\x73\x65\x64\x20\x64\x75\x72\x69\x6e\x67\x0a\x20\x20\x20\x20\x65\x78\x74\x65\x6e\x73\x69\x6f\x6e\x20\x6d\x6f\x64\x75\x6c\x65\x20\x64\x65\x76\x65\x6c\x6f\x70\x6d\x65\x6e\x74\x2e\x0a\x0a\x20\x20\x20\x20\x49\x66\x20\x22\x64\x69\x73\x61\x62\x6c\x65\x5f\x63\x68\x65\x63\x6b\x22\x20\x69\x73\x20\x54\x72\x75\x65\x20\x74\x68\x65\x6e\x20\x74\x68\x65\x20\x63\x6f\x6d\x70\x61\x74\x69\x62\x69\x6c\x69\x74\x79\x20\x63\x68\x65\x63\x6b\x20\x77\x69\x6c\x6c\x20\x6e\x6f\x74\x0a\x20\x20\x20\x20\x68\x61\x70\x70\x65\x6e\x20\x77\x68\x69\x6c\x65\x20\x74\x68\x65\x20\x63\x6f\x6e\x74\x65\x78\x74\x20\x6d\x61\x6e\x61\x67\x65\x72\x20\x69\x73\x20\x61\x63\x74\x69\x76\x65\x2e\x20\x20\x4f\x74\x68\x65\x72\x77\x69\x73\x65\x20\x74\x68\x65\x20\x63\x68\x65\x63\x6b\x0a\x20\x20\x20\x20\x2a\x77\x69\x6c\x6c\x2a\x20\x68\x61\x70\x70\x65\x6e\x2e\x0a\x0a\x20\x20\x20\x20\x4e\x6f\x72\x6d\x61\x6c\x6c\x79\x2c\x20\x65\x78\x74\x65\x6e\x73\x69\x6f\x6e\x73\x20\x74\x68\x61\x74\x20\x64\x6f\x20\x6e\x6f\x74\x20\x73\x75\x70\x70\x6f\x72\x74\x20\x6d\x75\x6c\x74\x69\x70\x6c\x65\x20\x69\x6e\x74\x65\x72\x70\x72\x65\x74\x65\x72\x73\x0a\x20\x20\x20\x20\x6d\x61\x79\x20\x6e\x6f\x74\x20\x62\x65\x20\x69\x6d\x70\x6f\x72\x74\x65\x64\x20\x69\x6e\x20\x61\x20\x73\x75\x62\x69\x6e\x74\x65\x72\x70\x72\x65\x74\x65\x72\x2e\x20\x20\x54\x68\x61\x74\x20\x69\x6d\x70\x6c\x69\x65\x73\x20\x6d\x6f\x64\x75\x6c\x65\x73\x0a\x20\x20\x20\x20\x74\x68\x61\x74\x20\x64\x6f\x20\x6e\x6f\x74\x20\x69\x6d\x70\x6c\x65\x6d\x65\x6e\x74\x20\x6d\x75\x6c\x74\x69\x2d\x70\x68\x61\x73\x65\x20\x69\x6e\x69\x74\x20\x6f\x72\x20\x74\x68\x61\x74\x20\x65\x78\x70\x6c\x69\x63\x69\x74\x6c\x79\x20\x6f\x66\x20\x6f\x75\x74\x2e\x0a\x0a\x20\x20\x20\x20\x4c\x69\x6b\x65\x77\x69\x73\x65\x20\x66\x6f\x72\x20\x6d\x6f\x64\x75\x6c\x65\x73\x20\x69\x6d\x70\x6f\x72\x74\x20\x69\x6e\x20\x61\x20\x73\x75\x62\x69\x6e\x74\x65\x72\x70\x65\x74\x65\x72\x20\x77\x69\x74\x68\x20\x69\x74\x73\x20\x6f\x77\x6e\x20\x47\x49\x4c\x0a\x20\x20\x20\x20\x77\x68\x65\x6e\x20\x74\x68\x65\x20\x65\x78\x74\x65\x6e\x73\x69\x6f\x6e\x20\x64\x6f\x65\x73\x20\x6e\x6f\x74\x20\x73\x75\x70\x70\x6f\x72\x74\x20\x61\x20\x70\x65\x72\x2d\x69\x6e\x74\x65\x72\x70\x72\x65\x74\x65\x72\x20\x47\x49\x4c\x2e\x20\x20\x54\x68\x69\x73\x0a\x20\x20\x20\x20\x69\x6d\x70\x6c\x69\x65\x73\x20\x74\x68\x65\x20\x6d\x6f\x64\x75\x6c\x65\x20\x64\x6f\x65\x73\x20\x6e\x6f\x74\x20\x68\x61\x76\x65\x20\x61\x20\x50\x79\x5f\x6d\x6f\x64\x5f\x6d\x75\x6c\x74\x69\x70\x6c\x65\x5f\x69\x6e\x74\x65\x72\x70\x72\x65\x74\x65\x72\x73\x20\x73\x6c\x6f\x74\x0a\x20\x20\x20\x20\x73\x65\x74\x20\x74\x6f\x20\x50\x79\x5f\x4d\x4f\x44\x5f\x50\x45\x52\x5f\x49\x4e\x54\x45\x52\x50\x52\x45\x54\x45\x52\x5f\x47\x49\x4c\x5f\x53\x55\x50\x50\x4f\x52\x54\x45\x44\x2e\x0a\x0a\x20\x20\x20\x20\x49\x6e\x20\x62\x6f\x74\x68\x20\x63\x61\x73\x65\x73\x2c\x20\x74\x68\x69\x73\x20\x63\x6f\x6e\x74\x65\x78\x74\x20\x6d\x61\x6e\x61\x67\x65\x72\x20\x6d\x61\x79\x20\x62\x65\x20\x75\x73\x65\x64\x20\x74\x6f\x20\x74\x65\x6d\x70\x6f\x72\x61\x72\x69\x6c\x79\x0a\x20\x20\x20\x20\x64\x69\x73\x61\x62\x6c\x65\x20\x74\x68\x65\x20\x63\x68\x65\x63\x6b\x20\x66\x6f\x72\x20\x63\x6f\x6d\x70\x61\x74\x69\x62\x6c\x65\x20\x65\x78\x74\x65\x6e\x73\x69\x6f\x6e\x20\x6d\x6f\x64\x75\x6c\x65\x73\x2e\x0a\x0a\x20\x20\x20\x20\x59\x6f\x75\x20\x63\x61\x6e\x20\x67\x65\x74\x20\x74\x68\x65\x20\x73\x61\x6d\x65\x20\x65\x66\x66\x65\x63\x74\x20\x61\x73\x20\x74\x68\x69\x73\x20\x66\x75\x6e\x63\x74\x69\x6f\x6e\x20\x62\x79\x20\x69\x6d\x70\x6c\x65\x6d\x65\x6e\x74\x69\x6e\x67\x20\x74\x68\x65\x0a\x20\x20\x20\x20\x62\x61\x73\x69\x63\x20\x69\x6e\x74\x65\x72\x66\x61\x63\x65\x20\x6f\x66\x20\x6d\x75\x6c\x74\x69\x2d\x70\x68\x61\x73\x65\x20\x69\x6e\x69\x74\x20\x28\x50\x45\x50\x20\x34\x38\x39\x29\x20\x61\x6e\x64\x20\x6c\x79\x69\x6e\x67\x20\x61\x62\x6f\x75\x74\x0a\x20\x20\x20\x20\x73\x75\x70\x70\x6f\x72\x74\x20\x66\x6f\x72\x20\x6d\x75\x6c\x69\x74\x70\x6c\x65\x20\x69\x6e\x74\x65\x72\x70\x72\x65\x74\x65\x72\x73\x20\x28\x6f\x72\x20\x70\x65\x72\x2d\x69\x6e\x74\x65\x72\x70\x72\x65\x74\x65\x72\x20\x47\x49\x4c\x29\x2e\x0a\x20\x20\x20\x20", + ._data = "\x41\x20\x63\x6f\x6e\x74\x65\x78\x74\x20\x6d\x61\x6e\x61\x67\x65\x72\x20\x74\x68\x61\x74\x20\x63\x61\x6e\x20\x74\x65\x6d\x70\x6f\x72\x61\x72\x69\x6c\x79\x20\x73\x6b\x69\x70\x20\x74\x68\x65\x20\x63\x6f\x6d\x70\x61\x74\x69\x62\x69\x6c\x69\x74\x79\x20\x63\x68\x65\x63\x6b\x2e\x0a\x0a\x20\x20\x20\x20\x4e\x4f\x54\x45\x3a\x20\x54\x68\x69\x73\x20\x66\x75\x6e\x63\x74\x69\x6f\x6e\x20\x69\x73\x20\x6d\x65\x61\x6e\x74\x20\x74\x6f\x20\x61\x63\x63\x6f\x6d\x6d\x6f\x64\x61\x74\x65\x20\x61\x6e\x20\x75\x6e\x75\x73\x75\x61\x6c\x20\x63\x61\x73\x65\x3b\x20\x6f\x6e\x65\x0a\x20\x20\x20\x20\x77\x68\x69\x63\x68\x20\x69\x73\x20\x6c\x69\x6b\x65\x6c\x79\x20\x74\x6f\x20\x65\x76\x65\x6e\x74\x75\x61\x6c\x6c\x79\x20\x67\x6f\x20\x61\x77\x61\x79\x2e\x20\x20\x54\x68\x65\x72\x65\x27\x73\x20\x69\x73\x20\x61\x20\x70\x72\x65\x74\x74\x79\x20\x67\x6f\x6f\x64\x0a\x20\x20\x20\x20\x63\x68\x61\x6e\x63\x65\x20\x74\x68\x69\x73\x20\x69\x73\x20\x6e\x6f\x74\x20\x77\x68\x61\x74\x20\x79\x6f\x75\x20\x77\x65\x72\x65\x20\x6c\x6f\x6f\x6b\x69\x6e\x67\x20\x66\x6f\x72\x2e\x0a\x0a\x20\x20\x20\x20\x57\x41\x52\x4e\x49\x4e\x47\x3a\x20\x55\x73\x69\x6e\x67\x20\x74\x68\x69\x73\x20\x66\x75\x6e\x63\x74\x69\x6f\x6e\x20\x74\x6f\x20\x64\x69\x73\x61\x62\x6c\x65\x20\x74\x68\x65\x20\x63\x68\x65\x63\x6b\x20\x63\x61\x6e\x20\x6c\x65\x61\x64\x20\x74\x6f\x0a\x20\x20\x20\x20\x75\x6e\x65\x78\x70\x65\x63\x74\x65\x64\x20\x62\x65\x68\x61\x76\x69\x6f\x72\x20\x61\x6e\x64\x20\x65\x76\x65\x6e\x20\x63\x72\x61\x73\x68\x65\x73\x2e\x20\x20\x49\x74\x20\x73\x68\x6f\x75\x6c\x64\x20\x6f\x6e\x6c\x79\x20\x62\x65\x20\x75\x73\x65\x64\x20\x64\x75\x72\x69\x6e\x67\x0a\x20\x20\x20\x20\x65\x78\x74\x65\x6e\x73\x69\x6f\x6e\x20\x6d\x6f\x64\x75\x6c\x65\x20\x64\x65\x76\x65\x6c\x6f\x70\x6d\x65\x6e\x74\x2e\x0a\x0a\x20\x20\x20\x20\x49\x66\x20\x22\x64\x69\x73\x61\x62\x6c\x65\x5f\x63\x68\x65\x63\x6b\x22\x20\x69\x73\x20\x54\x72\x75\x65\x20\x74\x68\x65\x6e\x20\x74\x68\x65\x20\x63\x6f\x6d\x70\x61\x74\x69\x62\x69\x6c\x69\x74\x79\x20\x63\x68\x65\x63\x6b\x20\x77\x69\x6c\x6c\x20\x6e\x6f\x74\x0a\x20\x20\x20\x20\x68\x61\x70\x70\x65\x6e\x20\x77\x68\x69\x6c\x65\x20\x74\x68\x65\x20\x63\x6f\x6e\x74\x65\x78\x74\x20\x6d\x61\x6e\x61\x67\x65\x72\x20\x69\x73\x20\x61\x63\x74\x69\x76\x65\x2e\x20\x20\x4f\x74\x68\x65\x72\x77\x69\x73\x65\x20\x74\x68\x65\x20\x63\x68\x65\x63\x6b\x0a\x20\x20\x20\x20\x2a\x77\x69\x6c\x6c\x2a\x20\x68\x61\x70\x70\x65\x6e\x2e\x0a\x0a\x20\x20\x20\x20\x4e\x6f\x72\x6d\x61\x6c\x6c\x79\x2c\x20\x65\x78\x74\x65\x6e\x73\x69\x6f\x6e\x73\x20\x74\x68\x61\x74\x20\x64\x6f\x20\x6e\x6f\x74\x20\x73\x75\x70\x70\x6f\x72\x74\x20\x6d\x75\x6c\x74\x69\x70\x6c\x65\x20\x69\x6e\x74\x65\x72\x70\x72\x65\x74\x65\x72\x73\x0a\x20\x20\x20\x20\x6d\x61\x79\x20\x6e\x6f\x74\x20\x62\x65\x20\x69\x6d\x70\x6f\x72\x74\x65\x64\x20\x69\x6e\x20\x61\x20\x73\x75\x62\x69\x6e\x74\x65\x72\x70\x72\x65\x74\x65\x72\x2e\x20\x20\x54\x68\x61\x74\x20\x69\x6d\x70\x6c\x69\x65\x73\x20\x6d\x6f\x64\x75\x6c\x65\x73\x0a\x20\x20\x20\x20\x74\x68\x61\x74\x20\x64\x6f\x20\x6e\x6f\x74\x20\x69\x6d\x70\x6c\x65\x6d\x65\x6e\x74\x20\x6d\x75\x6c\x74\x69\x2d\x70\x68\x61\x73\x65\x20\x69\x6e\x69\x74\x20\x6f\x72\x20\x74\x68\x61\x74\x20\x65\x78\x70\x6c\x69\x63\x69\x74\x6c\x79\x20\x6f\x66\x20\x6f\x75\x74\x2e\x0a\x0a\x20\x20\x20\x20\x4c\x69\x6b\x65\x77\x69\x73\x65\x20\x66\x6f\x72\x20\x6d\x6f\x64\x75\x6c\x65\x73\x20\x69\x6d\x70\x6f\x72\x74\x20\x69\x6e\x20\x61\x20\x73\x75\x62\x69\x6e\x74\x65\x72\x70\x65\x74\x65\x72\x20\x77\x69\x74\x68\x20\x69\x74\x73\x20\x6f\x77\x6e\x20\x47\x49\x4c\x0a\x20\x20\x20\x20\x77\x68\x65\x6e\x20\x74\x68\x65\x20\x65\x78\x74\x65\x6e\x73\x69\x6f\x6e\x20\x64\x6f\x65\x73\x20\x6e\x6f\x74\x20\x73\x75\x70\x70\x6f\x72\x74\x20\x61\x20\x70\x65\x72\x2d\x69\x6e\x74\x65\x72\x70\x72\x65\x74\x65\x72\x20\x47\x49\x4c\x2e\x20\x20\x54\x68\x69\x73\x0a\x20\x20\x20\x20\x69\x6d\x70\x6c\x69\x65\x73\x20\x74\x68\x65\x20\x6d\x6f\x64\x75\x6c\x65\x20\x64\x6f\x65\x73\x20\x6e\x6f\x74\x20\x68\x61\x76\x65\x20\x61\x20\x50\x79\x5f\x6d\x6f\x64\x5f\x6d\x75\x6c\x74\x69\x70\x6c\x65\x5f\x69\x6e\x74\x65\x72\x70\x72\x65\x74\x65\x72\x73\x20\x73\x6c\x6f\x74\x0a\x20\x20\x20\x20\x73\x65\x74\x20\x74\x6f\x20\x50\x79\x5f\x4d\x4f\x44\x5f\x50\x45\x52\x5f\x49\x4e\x54\x45\x52\x50\x52\x45\x54\x45\x52\x5f\x47\x49\x4c\x5f\x53\x55\x50\x50\x4f\x52\x54\x45\x44\x2e\x0a\x0a\x20\x20\x20\x20\x49\x6e\x20\x62\x6f\x74\x68\x20\x63\x61\x73\x65\x73\x2c\x20\x74\x68\x69\x73\x20\x63\x6f\x6e\x74\x65\x78\x74\x20\x6d\x61\x6e\x61\x67\x65\x72\x20\x6d\x61\x79\x20\x62\x65\x20\x75\x73\x65\x64\x20\x74\x6f\x20\x74\x65\x6d\x70\x6f\x72\x61\x72\x69\x6c\x79\x0a\x20\x20\x20\x20\x64\x69\x73\x61\x62\x6c\x65\x20\x74\x68\x65\x20\x63\x68\x65\x63\x6b\x20\x66\x6f\x72\x20\x63\x6f\x6d\x70\x61\x74\x69\x62\x6c\x65\x20\x65\x78\x74\x65\x6e\x73\x69\x6f\x6e\x20\x6d\x6f\x64\x75\x6c\x65\x73\x2e\x0a\x0a\x20\x20\x20\x20\x59\x6f\x75\x20\x63\x61\x6e\x20\x67\x65\x74\x20\x74\x68\x65\x20\x73\x61\x6d\x65\x20\x65\x66\x66\x65\x63\x74\x20\x61\x73\x20\x74\x68\x69\x73\x20\x66\x75\x6e\x63\x74\x69\x6f\x6e\x20\x62\x79\x20\x69\x6d\x70\x6c\x65\x6d\x65\x6e\x74\x69\x6e\x67\x20\x74\x68\x65\x0a\x20\x20\x20\x20\x62\x61\x73\x69\x63\x20\x69\x6e\x74\x65\x72\x66\x61\x63\x65\x20\x6f\x66\x20\x6d\x75\x6c\x74\x69\x2d\x70\x68\x61\x73\x65\x20\x69\x6e\x69\x74\x20\x28\x50\x45\x50\x20\x34\x38\x39\x29\x20\x61\x6e\x64\x20\x6c\x79\x69\x6e\x67\x20\x61\x62\x6f\x75\x74\x0a\x20\x20\x20\x20\x73\x75\x70\x70\x6f\x72\x74\x20\x66\x6f\x72\x20\x6d\x75\x6c\x74\x69\x70\x6c\x65\x20\x69\x6e\x74\x65\x72\x70\x72\x65\x74\x65\x72\x73\x20\x28\x6f\x72\x20\x70\x65\x72\x2d\x69\x6e\x74\x65\x72\x70\x72\x65\x74\x65\x72\x20\x47\x49\x4c\x29\x2e\x0a\x20\x20\x20\x20", }; static struct { @@ -135488,7 +135517,7 @@ importlib_util_toplevel_consts_19_consts_2 = { .co_kwonlyargcount = 1, .co_framesize = 5 + FRAME_SPECIALS_SIZE, .co_stacksize = 3, - .co_firstlineno = 151, + .co_firstlineno = 152, .co_nlocalsplus = 2, .co_nlocals = 2, .co_ncellvars = 0, @@ -135609,7 +135638,7 @@ importlib_util_toplevel_consts_19_consts_3 = { .co_kwonlyargcount = 0, .co_framesize = 4 + FRAME_SPECIALS_SIZE, .co_stacksize = 3, - .co_firstlineno = 154, + .co_firstlineno = 155, .co_nlocalsplus = 1, .co_nlocals = 1, .co_ncellvars = 0, @@ -135731,7 +135760,7 @@ importlib_util_toplevel_consts_19_consts_4 = { .co_kwonlyargcount = 0, .co_framesize = 6 + FRAME_SPECIALS_SIZE, .co_stacksize = 3, - .co_firstlineno = 158, + .co_firstlineno = 159, .co_nlocalsplus = 3, .co_nlocals = 3, .co_ncellvars = 0, @@ -135851,7 +135880,7 @@ importlib_util_toplevel_consts_19_consts_5 = { .co_kwonlyargcount = 0, .co_framesize = 2 + FRAME_SPECIALS_SIZE, .co_stacksize = 1, - .co_firstlineno = 163, + .co_firstlineno = 164, .co_nlocalsplus = 1, .co_nlocals = 1, .co_ncellvars = 0, @@ -135961,7 +135990,7 @@ importlib_util_toplevel_consts_19 = { .co_kwonlyargcount = 0, .co_framesize = 2 + FRAME_SPECIALS_SIZE, .co_stacksize = 2, - .co_firstlineno = 119, + .co_firstlineno = 120, .co_nlocalsplus = 0, .co_nlocals = 0, .co_ncellvars = 0, @@ -136046,9 +136075,31 @@ importlib_util_toplevel_consts_21_consts_2_consts_0 = { static struct { PyASCIIObject _ascii; + uint8_t _data[11]; + } +const_str_is_loading = { + ._ascii = { + .ob_base = { + .ob_refcnt = _Py_IMMORTAL_REFCNT, + .ob_type = &PyUnicode_Type, + }, + .length = 10, + .hash = -1, + .state = { + .kind = 1, + .compact = 1, + .ascii = 1, + .statically_allocated = 1, + }, + }, + ._data = "is_loading", +}; +static + struct { + PyASCIIObject _ascii; uint8_t _data[19]; } -importlib_util_toplevel_consts_21_consts_2_consts_2 = { +importlib_util_toplevel_consts_21_consts_2_consts_8 = { ._ascii = { .ob_base = { .ob_refcnt = _Py_IMMORTAL_REFCNT, @@ -136070,7 +136121,7 @@ static PyASCIIObject _ascii; uint8_t _data[47]; } -importlib_util_toplevel_consts_21_consts_2_consts_3 = { +importlib_util_toplevel_consts_21_consts_2_consts_9 = { ._ascii = { .ob_base = { .ob_refcnt = _Py_IMMORTAL_REFCNT, @@ -136092,7 +136143,7 @@ static PyGC_Head _gc_head; struct { PyObject_VAR_HEAD - PyObject *ob_item[4]; + PyObject *ob_item[10]; }_object; } importlib_util_toplevel_consts_21_consts_2_consts = { @@ -136102,13 +136153,19 @@ importlib_util_toplevel_consts_21_consts_2_consts = { .ob_refcnt = _Py_IMMORTAL_REFCNT, .ob_type = &PyTuple_Type, }, - .ob_size = 4, + .ob_size = 10, }, .ob_item = { & importlib_util_toplevel_consts_21_consts_2_consts_0._ascii.ob_base, + &_Py_ID(__spec__), + & const_str_lock._ascii.ob_base, + &_Py_ID(__class__), + & const_str_is_loading._ascii.ob_base, + Py_None, + Py_True, &_Py_ID(__dict__), - & importlib_util_toplevel_consts_21_consts_2_consts_2._ascii.ob_base, - & importlib_util_toplevel_consts_21_consts_2_consts_3._ascii.ob_base, + & importlib_util_toplevel_consts_21_consts_2_consts_8._ascii.ob_base, + & importlib_util_toplevel_consts_21_consts_2_consts_9._ascii.ob_base, }, }, }; @@ -136161,7 +136218,7 @@ static PyGC_Head _gc_head; struct { PyObject_VAR_HEAD - PyObject *ob_item[16]; + PyObject *ob_item[17]; }_object; } importlib_util_toplevel_consts_21_consts_2_names = { @@ -136171,16 +136228,14 @@ importlib_util_toplevel_consts_21_consts_2_names = { .ob_refcnt = _Py_IMMORTAL_REFCNT, .ob_type = &PyTuple_Type, }, - .ob_size = 16, + .ob_size = 17, }, .ob_item = { - & const_str_types._ascii.ob_base, - & const_str_ModuleType._ascii.ob_base, - &_Py_ID(__class__), - &_Py_ID(__spec__), - &_Py_ID(name), + &_Py_ID(object), + &_Py_ID(__getattribute__), & const_str_loader_state._ascii.ob_base, - &_Py_ID(__dict__), + & const_str__LazyModule._ascii.ob_base, + &_Py_ID(name), &_Py_ID(items), &_Py_ID(id), & const_str_loader._ascii.ob_base, @@ -136189,6 +136244,9 @@ importlib_util_toplevel_consts_21_consts_2_names = { &_Py_ID(modules), & const_str_ValueError._ascii.ob_base, & const_str_update._ascii.ob_base, + & const_str_types._ascii.ob_base, + & const_str_ModuleType._ascii.ob_base, + &_Py_ID(__class__), &_Py_ID(getattr), }, }, @@ -136219,7 +136277,7 @@ static struct { PyObject_VAR_HEAD Py_hash_t ob_shash; - char ob_sval[284]; + char ob_sval[402]; } importlib_util_toplevel_consts_21_consts_2_linetable = { .ob_base = { @@ -136227,10 +136285,27 @@ importlib_util_toplevel_consts_21_consts_2_linetable = { .ob_refcnt = _Py_IMMORTAL_REFCNT, .ob_type = &PyBytes_Type, }, - .ob_size = 283, + .ob_size = 401, + }, + .ob_shash = -1, + .ob_sval = "\x80\x00\xe4\x13\x19\xd7\x13\x2a\xd1\x13\x2a\xa8\x34\xb0\x1a\xd3\x13\x3c\x88\x08\xd8\x17\x1f\xd7\x17\x2c\xd1\x17\x2c\x88\x0c\xd8\x0d\x19\x98\x26\xd1\x0d\x21\xf1\x00\x2b\x09\x32\xf4\x06\x00\x10\x16\xd7\x0f\x26\xd1\x0f\x26\xa0\x74\xa8\x5b\xd3\x0f\x39\xbc\x5b\xd2\x0f\x48\xf0\x0a\x00\x14\x20\xa0\x0c\xd2\x13\x2d\xdc\x1b\x21\xd7\x1b\x32\xd1\x1b\x32\xb0\x34\xb8\x14\xd3\x1b\x3e\xf7\x13\x2b\x09\x32\xf1\x00\x2b\x09\x32\xf0\x14\x00\x2e\x32\x90\x0c\x98\x5c\xd1\x10\x2a\xe4\x1b\x21\xd7\x1b\x32\xd1\x1b\x32\xb0\x34\xb8\x1a\xd3\x1b\x44\x90\x08\xf0\x0c\x00\x21\x29\xa7\x0d\xa1\x0d\x90\x0d\xf0\x06\x00\x1e\x2a\xa8\x2a\xd1\x1d\x35\x90\x0a\xd8\x1c\x24\x90\x09\xd8\x20\x22\x90\x0d\xd8\x22\x2b\xa7\x2f\xa1\x2f\xd3\x22\x33\xf2\x00\x06\x11\x33\x91\x4a\x90\x43\x98\x15\xf0\x06\x00\x18\x1b\xa0\x2a\xd1\x17\x2c\xd8\x2d\x32\x98\x0d\xa0\x63\xd2\x18\x2a\xdc\x19\x1b\x98\x49\xa0\x63\x99\x4e\xd3\x19\x2b\xac\x72\xb0\x2a\xb8\x53\xb1\x2f\xd3\x2f\x42\xd3\x19\x42\xd8\x2d\x32\x98\x0d\xa0\x63\xd2\x18\x2a\xf0\x0d\x06\x11\x33\xf0\x0e\x00\x11\x19\x97\x0f\x91\x0f\xd7\x10\x2b\xd1\x10\x2b\xa8\x44\xd4\x10\x31\xf0\x06\x00\x14\x21\xa4\x43\xa7\x4b\xa1\x4b\xd1\x13\x2f\xdc\x17\x19\x98\x24\x93\x78\xa4\x32\xa4\x63\xa7\x6b\xa1\x6b\xb0\x2d\xd1\x26\x40\xd3\x23\x41\xd2\x17\x41\xdc\x1e\x28\xd0\x2b\x3d\xb8\x6d\xd0\x3d\x4e\xf0\x00\x02\x4f\x01\x31\xf0\x00\x02\x2a\x31\xf3\x00\x02\x1f\x32\xf0\x00\x02\x19\x32\xf0\x0a\x00\x11\x19\x97\x0f\x91\x0f\xa0\x0d\xd4\x10\x2e\xe4\x21\x26\xd7\x21\x31\xd1\x21\x31\x90\x04\x94\x0e\xf7\x57\x01\x2b\x09\x32\xf4\x5a\x01\x00\x10\x17\x90\x74\x98\x54\xd3\x0f\x22\xd0\x08\x22\xf7\x5b\x01\x2b\x09\x32\xf0\x00\x2b\x09\x32\xfa", +}; +static + struct { + PyObject_VAR_HEAD + Py_hash_t ob_shash; + char ob_sval[26]; + } +importlib_util_toplevel_consts_21_consts_2_exceptiontable = { + .ob_base = { + .ob_base = { + .ob_refcnt = _Py_IMMORTAL_REFCNT, + .ob_type = &PyBytes_Type, + }, + .ob_size = 25, }, .ob_shash = -1, - .ob_sval = "\x80\x00\xf4\x0a\x00\x1a\x1f\xd7\x19\x29\xd1\x19\x29\x88\x04\x8c\x0e\xf0\x06\x00\x19\x1d\x9f\x0d\x99\x0d\xd7\x18\x2a\xd1\x18\x2a\x88\x0d\xf0\x06\x00\x16\x1a\x97\x5d\x91\x5d\xd7\x15\x2f\xd1\x15\x2f\xb0\x0a\xd1\x15\x3b\x88\x0a\xd8\x14\x18\x97\x4d\x91\x4d\x88\x09\xd8\x18\x1a\x88\x0d\xd8\x1a\x23\x9f\x2f\x99\x2f\xd3\x1a\x2b\xf2\x00\x06\x09\x2b\x89\x4a\x88\x43\x90\x15\xf0\x06\x00\x10\x13\x98\x2a\xd1\x0f\x24\xd8\x25\x2a\x90\x0d\x98\x63\xd2\x10\x22\xdc\x11\x13\x90\x49\x98\x63\x91\x4e\xd3\x11\x23\xa4\x72\xa8\x2a\xb0\x53\xa9\x2f\xd3\x27\x3a\xd3\x11\x3a\xd8\x25\x2a\x90\x0d\x98\x63\xd2\x10\x22\xf0\x0d\x06\x09\x2b\xf0\x0e\x00\x09\x0d\x8f\x0d\x89\x0d\xd7\x08\x1c\xd1\x08\x1c\xd7\x08\x28\xd1\x08\x28\xa8\x14\xd4\x08\x2e\xf0\x06\x00\x0c\x19\x9c\x43\x9f\x4b\x99\x4b\xd1\x0b\x27\xdc\x0f\x11\x90\x24\x8b\x78\x9c\x32\x9c\x63\x9f\x6b\x99\x6b\xa8\x2d\xd1\x1e\x38\xd3\x1b\x39\xd2\x0f\x39\xdc\x16\x20\xd0\x23\x35\xb0\x6d\xd0\x35\x46\xf0\x00\x02\x47\x01\x29\xf0\x00\x02\x22\x29\xf3\x00\x02\x17\x2a\xf0\x00\x02\x11\x2a\xf0\x0a\x00\x09\x0d\x8f\x0d\x89\x0d\xd7\x08\x1c\xd1\x08\x1c\x98\x5d\xd4\x08\x2b\xdc\x0f\x16\x90\x74\x98\x54\xd3\x0f\x22\xd0\x08\x22", + .ob_sval = "\xa8\x38\x45\x3d\x03\xc1\x2a\x41\x2d\x45\x3d\x03\xc3\x18\x42\x11\x45\x3d\x03\xc5\x3d\x05\x46\x06\x07", }; static struct { @@ -136347,7 +136422,7 @@ static PyGC_Head _gc_head; struct { PyObject_VAR_HEAD - PyObject *ob_item[8]; + PyObject *ob_item[11]; }_object; } importlib_util_toplevel_consts_21_consts_2_localsplusnames = { @@ -136357,11 +136432,14 @@ importlib_util_toplevel_consts_21_consts_2_localsplusnames = { .ob_refcnt = _Py_IMMORTAL_REFCNT, .ob_type = &PyTuple_Type, }, - .ob_size = 8, + .ob_size = 11, }, .ob_item = { &_Py_ID(self), & const_str_attr._ascii.ob_base, + &_Py_ID(__spec__), + & const_str_loader_state._ascii.ob_base, + &_Py_ID(__dict__), & const_str_original_name._ascii.ob_base, & const_str_attrs_then._ascii.ob_base, & const_str_attrs_now._ascii.ob_base, @@ -136372,38 +136450,38 @@ importlib_util_toplevel_consts_21_consts_2_localsplusnames = { }, }; static - struct _PyCode_DEF(602) + struct _PyCode_DEF(786) importlib_util_toplevel_consts_21_consts_2 = { .ob_base = { .ob_base = { .ob_refcnt = _Py_IMMORTAL_REFCNT, .ob_type = &PyCode_Type, }, - .ob_size = 301, + .ob_size = 393, }, .co_consts = & importlib_util_toplevel_consts_21_consts_2_consts._object.ob_base.ob_base, .co_names = & importlib_util_toplevel_consts_21_consts_2_names._object.ob_base.ob_base, - .co_exceptiontable = (PyObject *)&_Py_SINGLETON(bytes_empty), + .co_exceptiontable = & importlib_util_toplevel_consts_21_consts_2_exceptiontable.ob_base.ob_base, .co_flags = 3, .co_argcount = 2, .co_posonlyargcount = 0, .co_kwonlyargcount = 0, - .co_framesize = 14 + FRAME_SPECIALS_SIZE, - .co_stacksize = 6, - .co_firstlineno = 172, - .co_nlocalsplus = 8, - .co_nlocals = 8, + .co_framesize = 18 + FRAME_SPECIALS_SIZE, + .co_stacksize = 7, + .co_firstlineno = 173, + .co_nlocalsplus = 11, + .co_nlocals = 11, .co_ncellvars = 0, .co_nfreevars = 0, .co_version = 726, .co_localsplusnames = & importlib_util_toplevel_consts_21_consts_2_localsplusnames._object.ob_base.ob_base, - .co_localspluskinds = & importlib__bootstrap_toplevel_consts_13_localspluskinds.ob_base.ob_base, + .co_localspluskinds = & importlib__bootstrap_toplevel_consts_46_consts_6_localspluskinds.ob_base.ob_base, .co_filename = & importlib_util_toplevel_consts_15_filename._ascii.ob_base, .co_name = &_Py_ID(__getattribute__), .co_qualname = & importlib_util_toplevel_consts_21_consts_2_qualname._ascii.ob_base, .co_linetable = & importlib_util_toplevel_consts_21_consts_2_linetable.ob_base.ob_base, ._co_cached = NULL, - .co_code_adaptive = "\x97\x00\x74\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x00\x5f\x02\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x00\x6a\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7d\x02\x7c\x00\x6a\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x64\x01\x19\x00\x00\x00\x7d\x03\x7c\x00\x6a\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7d\x04\x69\x00\x7d\x05\x7c\x04\x6a\x0f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xab\x00\x00\x00\x00\x00\x00\x00\x44\x00\x5d\x32\x00\x00\x5c\x02\x00\x00\x7d\x06\x7d\x07\x7c\x06\x7c\x03\x76\x01\x72\x06\x7c\x07\x7c\x05\x7c\x06\x3c\x00\x00\x00\x8c\x10\x74\x11\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x04\x7c\x06\x19\x00\x00\x00\xab\x01\x00\x00\x00\x00\x00\x00\x74\x11\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x03\x7c\x06\x19\x00\x00\x00\xab\x01\x00\x00\x00\x00\x00\x00\x6b\x37\x00\x00\x73\x01\x8c\x2e\x7c\x07\x7c\x05\x7c\x06\x3c\x00\x00\x00\x8c\x34\x04\x00\x7c\x00\x6a\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x15\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x00\xab\x01\x00\x00\x00\x00\x00\x00\x01\x00\x7c\x02\x74\x16\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x76\x00\x72\x37\x74\x11\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x00\xab\x01\x00\x00\x00\x00\x00\x00\x74\x11\x00\x00\x00\x00\x00\x00\x00\x00\x74\x16\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x02\x19\x00\x00\x00\xab\x01\x00\x00\x00\x00\x00\x00\x6b\x37\x00\x00\x72\x0f\x74\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x64\x02\x7c\x02\x9b\x02\x64\x03\x9d\x03\xab\x01\x00\x00\x00\x00\x00\x00\x82\x01\x7c\x00\x6a\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x1d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x05\xab\x01\x00\x00\x00\x00\x00\x00\x01\x00\x74\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x00\x7c\x01\xab\x02\x00\x00\x00\x00\x00\x00\x53\x00", + .co_code_adaptive = "\x97\x00\x74\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x00\x64\x01\xab\x02\x00\x00\x00\x00\x00\x00\x7d\x02\x7c\x02\x6a\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7d\x03\x7c\x03\x64\x02\x19\x00\x00\x00\x35\x00\x01\x00\x74\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x00\x64\x03\xab\x02\x00\x00\x00\x00\x00\x00\x74\x06\x00\x00\x00\x00\x00\x00\x00\x00\x75\x00\x90\x01\x72\x23\x7c\x03\x64\x04\x19\x00\x00\x00\x72\x1f\x74\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x00\x7c\x01\xab\x02\x00\x00\x00\x00\x00\x00\x63\x02\x64\x05\x64\x05\x64\x05\xab\x02\x00\x00\x00\x00\x00\x00\x01\x00\x53\x00\x64\x06\x7c\x03\x64\x04\x3c\x00\x00\x00\x74\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x00\x64\x07\xab\x02\x00\x00\x00\x00\x00\x00\x7d\x04\x7c\x02\x6a\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7d\x05\x7c\x03\x64\x07\x19\x00\x00\x00\x7d\x06\x7c\x04\x7d\x07\x69\x00\x7d\x08\x7c\x07\x6a\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xab\x00\x00\x00\x00\x00\x00\x00\x44\x00\x5d\x32\x00\x00\x5c\x02\x00\x00\x7d\x09\x7d\x0a\x7c\x09\x7c\x06\x76\x01\x72\x06\x7c\x0a\x7c\x08\x7c\x09\x3c\x00\x00\x00\x8c\x10\x74\x0d\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x07\x7c\x09\x19\x00\x00\x00\xab\x01\x00\x00\x00\x00\x00\x00\x74\x0d\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x06\x7c\x09\x19\x00\x00\x00\xab\x01\x00\x00\x00\x00\x00\x00\x6b\x37\x00\x00\x73\x01\x8c\x2e\x7c\x0a\x7c\x08\x7c\x09\x3c\x00\x00\x00\x8c\x34\x04\x00\x7c\x02\x6a\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x00\xab\x01\x00\x00\x00\x00\x00\x00\x01\x00\x7c\x05\x74\x12\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x76\x00\x72\x37\x74\x0d\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x00\xab\x01\x00\x00\x00\x00\x00\x00\x74\x0d\x00\x00\x00\x00\x00\x00\x00\x00\x74\x12\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x05\x19\x00\x00\x00\xab\x01\x00\x00\x00\x00\x00\x00\x6b\x37\x00\x00\x72\x0f\x74\x17\x00\x00\x00\x00\x00\x00\x00\x00\x64\x08\x7c\x05\x9b\x02\x64\x09\x9d\x03\xab\x01\x00\x00\x00\x00\x00\x00\x82\x01\x7c\x04\x6a\x19\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x08\xab\x01\x00\x00\x00\x00\x00\x00\x01\x00\x74\x1a\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x1c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x00\x5f\x0f\x00\x00\x00\x00\x00\x00\x00\x00\x64\x05\x64\x05\x64\x05\xab\x02\x00\x00\x00\x00\x00\x00\x01\x00\x74\x21\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x00\x7c\x01\xab\x02\x00\x00\x00\x00\x00\x00\x53\x00\x23\x00\x31\x00\x73\x01\x77\x02\x01\x00\x59\x00\x01\x00\x01\x00\x8c\x15\x78\x03\x59\x00\x77\x01", ._co_firsttraceable = 0, }; static @@ -136577,7 +136655,7 @@ importlib_util_toplevel_consts_21_consts_3 = { .co_kwonlyargcount = 0, .co_framesize = 6 + FRAME_SPECIALS_SIZE, .co_stacksize = 4, - .co_firstlineno = 206, + .co_firstlineno = 224, .co_nlocalsplus = 2, .co_nlocals = 2, .co_ncellvars = 0, @@ -136661,7 +136739,7 @@ importlib_util_toplevel_consts_21_linetable = { .ob_size = 16, }, .ob_shash = -1, - .ob_sval = "\x84\x00\xe1\x04\x55\xf2\x04\x20\x05\x23\xf3\x44\x01\x05\x05\x1c", + .ob_sval = "\x84\x00\xe1\x04\x55\xf2\x04\x31\x05\x23\xf3\x66\x01\x05\x05\x1c", }; static struct _PyCode_DEF(28) @@ -136682,7 +136760,7 @@ importlib_util_toplevel_consts_21 = { .co_kwonlyargcount = 0, .co_framesize = 1 + FRAME_SPECIALS_SIZE, .co_stacksize = 1, - .co_firstlineno = 168, + .co_firstlineno = 169, .co_nlocalsplus = 0, .co_nlocals = 0, .co_ncellvars = 0, @@ -136891,7 +136969,7 @@ importlib_util_toplevel_consts_23_consts_2 = { .co_kwonlyargcount = 0, .co_framesize = 5 + FRAME_SPECIALS_SIZE, .co_stacksize = 4, - .co_firstlineno = 218, + .co_firstlineno = 236, .co_nlocalsplus = 1, .co_nlocals = 1, .co_ncellvars = 0, @@ -137029,7 +137107,7 @@ importlib_util_toplevel_consts_23_consts_3_consts_1 = { .co_kwonlyargcount = 0, .co_framesize = 11 + FRAME_SPECIALS_SIZE, .co_stacksize = 7, - .co_firstlineno = 227, + .co_firstlineno = 245, .co_nlocalsplus = 4, .co_nlocals = 2, .co_ncellvars = 0, @@ -137210,7 +137288,7 @@ importlib_util_toplevel_consts_23_consts_3 = { .co_kwonlyargcount = 0, .co_framesize = 5 + FRAME_SPECIALS_SIZE, .co_stacksize = 3, - .co_firstlineno = 223, + .co_firstlineno = 241, .co_nlocalsplus = 2, .co_nlocals = 2, .co_ncellvars = 2, @@ -137330,7 +137408,7 @@ importlib_util_toplevel_consts_23_consts_4 = { .co_kwonlyargcount = 0, .co_framesize = 5 + FRAME_SPECIALS_SIZE, .co_stacksize = 3, - .co_firstlineno = 229, + .co_firstlineno = 247, .co_nlocalsplus = 2, .co_nlocals = 2, .co_ncellvars = 0, @@ -137427,7 +137505,7 @@ importlib_util_toplevel_consts_23_consts_5 = { .co_kwonlyargcount = 0, .co_framesize = 5 + FRAME_SPECIALS_SIZE, .co_stacksize = 3, - .co_firstlineno = 233, + .co_firstlineno = 251, .co_nlocalsplus = 2, .co_nlocals = 2, .co_ncellvars = 0, @@ -137470,7 +137548,7 @@ static PyGC_Head _gc_head; struct { PyObject_VAR_HEAD - PyObject *ob_item[4]; + PyObject *ob_item[7]; }_object; } importlib_util_toplevel_consts_23_consts_6_consts = { @@ -137480,12 +137558,15 @@ importlib_util_toplevel_consts_23_consts_6_consts = { .ob_refcnt = _Py_IMMORTAL_REFCNT, .ob_type = &PyTuple_Type, }, - .ob_size = 4, + .ob_size = 7, }, .ob_item = { & importlib_util_toplevel_consts_23_consts_6_consts_0._ascii.ob_base, &_Py_ID(__dict__), &_Py_ID(__class__), + & const_str_lock._ascii.ob_base, + Py_False, + & const_str_is_loading._ascii.ob_base, Py_None, }, }, @@ -137495,7 +137576,7 @@ static PyGC_Head _gc_head; struct { PyObject_VAR_HEAD - PyObject *ob_item[8]; + PyObject *ob_item[10]; }_object; } importlib_util_toplevel_consts_23_consts_6_names = { @@ -137505,7 +137586,7 @@ importlib_util_toplevel_consts_23_consts_6_names = { .ob_refcnt = _Py_IMMORTAL_REFCNT, .ob_type = &PyTuple_Type, }, - .ob_size = 8, + .ob_size = 10, }, .ob_item = { & const_str_loader._ascii.ob_base, @@ -137514,6 +137595,8 @@ importlib_util_toplevel_consts_23_consts_6_names = { &_Py_ID(__dict__), &_Py_ID(copy), &_Py_ID(__class__), + &_Py_ID(threading), + & const_str_RLock._ascii.ob_base, & const_str_loader_state._ascii.ob_base, & const_str__LazyModule._ascii.ob_base, }, @@ -137545,7 +137628,7 @@ static struct { PyObject_VAR_HEAD Py_hash_t ob_shash; - char ob_sval[97]; + char ob_sval[124]; } importlib_util_toplevel_consts_23_consts_6_linetable = { .ob_base = { @@ -137553,10 +137636,10 @@ importlib_util_toplevel_consts_23_consts_6_linetable = { .ob_refcnt = _Py_IMMORTAL_REFCNT, .ob_type = &PyBytes_Type, }, - .ob_size = 96, + .ob_size = 123, }, .ob_shash = -1, - .ob_sval = "\x80\x00\xe0\x21\x25\xa7\x1b\xa1\x1b\x88\x06\x8f\x0f\x89\x0f\xd4\x08\x1e\xd8\x1c\x20\x9f\x4b\x99\x4b\x88\x06\xd4\x08\x19\xf0\x0a\x00\x18\x1a\x88\x0c\xd8\x23\x29\xa7\x3f\xa1\x3f\xd7\x23\x37\xd1\x23\x37\xd3\x23\x39\x88\x0c\x90\x5a\xd1\x08\x20\xd8\x24\x2a\xd7\x24\x34\xd1\x24\x34\x88\x0c\x90\x5b\xd1\x08\x21\xd8\x27\x33\x88\x06\x8f\x0f\x89\x0f\xd4\x08\x24\xdc\x1b\x26\x88\x06\xd5\x08\x18", + .ob_sval = "\x80\x00\xe0\x21\x25\xa7\x1b\xa1\x1b\x88\x06\x8f\x0f\x89\x0f\xd4\x08\x1e\xd8\x1c\x20\x9f\x4b\x99\x4b\x88\x06\xd4\x08\x19\xf0\x0a\x00\x18\x1a\x88\x0c\xd8\x23\x29\xa7\x3f\xa1\x3f\xd7\x23\x37\xd1\x23\x37\xd3\x23\x39\x88\x0c\x90\x5a\xd1\x08\x20\xd8\x24\x2a\xd7\x24\x34\xd1\x24\x34\x88\x0c\x90\x5b\xd1\x08\x21\xdc\x1f\x28\x9f\x7f\x99\x7f\xd3\x1f\x30\x88\x0c\x90\x56\xd1\x08\x1c\xd8\x25\x2a\x88\x0c\x90\x5c\xd1\x08\x22\xd8\x27\x33\x88\x06\x8f\x0f\x89\x0f\xd4\x08\x24\xdc\x1b\x26\x88\x06\xd5\x08\x18", }; static struct { @@ -137583,14 +137666,14 @@ importlib_util_toplevel_consts_23_consts_6_localsplusnames = { }, }; static - struct _PyCode_DEF(240) + struct _PyCode_DEF(296) importlib_util_toplevel_consts_23_consts_6 = { .ob_base = { .ob_base = { .ob_refcnt = _Py_IMMORTAL_REFCNT, .ob_type = &PyCode_Type, }, - .ob_size = 120, + .ob_size = 148, }, .co_consts = & importlib_util_toplevel_consts_23_consts_6_consts._object.ob_base.ob_base, .co_names = & importlib_util_toplevel_consts_23_consts_6_names._object.ob_base.ob_base, @@ -137601,7 +137684,7 @@ importlib_util_toplevel_consts_23_consts_6 = { .co_kwonlyargcount = 0, .co_framesize = 6 + FRAME_SPECIALS_SIZE, .co_stacksize = 3, - .co_firstlineno = 236, + .co_firstlineno = 254, .co_nlocalsplus = 3, .co_nlocals = 3, .co_ncellvars = 0, @@ -137614,7 +137697,7 @@ importlib_util_toplevel_consts_23_consts_6 = { .co_qualname = & importlib_util_toplevel_consts_23_consts_6_qualname._ascii.ob_base, .co_linetable = & importlib_util_toplevel_consts_23_consts_6_linetable.ob_base.ob_base, ._co_cached = NULL, - .co_code_adaptive = "\x97\x00\x7c\x00\x6a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x01\x6a\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x00\x6a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x01\x5f\x02\x00\x00\x00\x00\x00\x00\x00\x00\x69\x00\x7d\x02\x7c\x01\x6a\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xab\x00\x00\x00\x00\x00\x00\x00\x7c\x02\x64\x01\x3c\x00\x00\x00\x7c\x01\x6a\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x02\x64\x02\x3c\x00\x00\x00\x7c\x02\x7c\x01\x6a\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5f\x06\x00\x00\x00\x00\x00\x00\x00\x00\x74\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x01\x5f\x05\x00\x00\x00\x00\x00\x00\x00\x00\x79\x03", + .co_code_adaptive = "\x97\x00\x7c\x00\x6a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x01\x6a\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x00\x6a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x01\x5f\x02\x00\x00\x00\x00\x00\x00\x00\x00\x69\x00\x7d\x02\x7c\x01\x6a\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xab\x00\x00\x00\x00\x00\x00\x00\x7c\x02\x64\x01\x3c\x00\x00\x00\x7c\x01\x6a\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x02\x64\x02\x3c\x00\x00\x00\x74\x0d\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xab\x00\x00\x00\x00\x00\x00\x00\x7c\x02\x64\x03\x3c\x00\x00\x00\x64\x04\x7c\x02\x64\x05\x3c\x00\x00\x00\x7c\x02\x7c\x01\x6a\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5f\x08\x00\x00\x00\x00\x00\x00\x00\x00\x74\x12\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x01\x5f\x05\x00\x00\x00\x00\x00\x00\x00\x00\x79\x06", ._co_firsttraceable = 0, }; static @@ -137693,7 +137776,7 @@ importlib_util_toplevel_consts_23_linetable = { .ob_size = 62, }, .ob_shash = -1, - .ob_sval = "\x84\x00\xe1\x04\x55\xe0\x05\x11\xf1\x02\x02\x05\x40\x01\xf3\x03\x00\x06\x12\xf0\x02\x02\x05\x40\x01\xf0\x08\x00\x06\x11\xf1\x02\x03\x05\x44\x01\xf3\x03\x00\x06\x11\xf0\x02\x03\x05\x44\x01\xf2\x0a\x02\x05\x1d\xf2\x08\x01\x05\x2f\xf3\x06\x0c\x05\x27", + .ob_sval = "\x84\x00\xe1\x04\x55\xe0\x05\x11\xf1\x02\x02\x05\x40\x01\xf3\x03\x00\x06\x12\xf0\x02\x02\x05\x40\x01\xf0\x08\x00\x06\x11\xf1\x02\x03\x05\x44\x01\xf3\x03\x00\x06\x11\xf0\x02\x03\x05\x44\x01\xf2\x0a\x02\x05\x1d\xf2\x08\x01\x05\x2f\xf3\x06\x0e\x05\x27", }; static struct _PyCode_DEF(66) @@ -137714,7 +137797,7 @@ importlib_util_toplevel_consts_23 = { .co_kwonlyargcount = 0, .co_framesize = 2 + FRAME_SPECIALS_SIZE, .co_stacksize = 2, - .co_firstlineno = 214, + .co_firstlineno = 232, .co_nlocalsplus = 0, .co_nlocals = 0, .co_ncellvars = 0, @@ -137782,7 +137865,7 @@ static PyGC_Head _gc_head; struct { PyObject_VAR_HEAD - PyObject *ob_item[26]; + PyObject *ob_item[27]; }_object; } importlib_util_toplevel_names = { @@ -137792,7 +137875,7 @@ importlib_util_toplevel_names = { .ob_refcnt = _Py_IMMORTAL_REFCNT, .ob_type = &PyTuple_Type, }, - .ob_size = 26, + .ob_size = 27, }, .ob_item = { &_Py_ID(__doc__), @@ -137812,6 +137895,7 @@ importlib_util_toplevel_names = { & const_str_spec_from_file_location._ascii.ob_base, & const_str__imp._ascii.ob_base, & const_str_sys._ascii.ob_base, + &_Py_ID(threading), & const_str_types._ascii.ob_base, & const_str_source_hash._ascii.ob_base, & const_str_resolve_name._ascii.ob_base, @@ -137828,7 +137912,7 @@ static struct { PyObject_VAR_HEAD Py_hash_t ob_shash; - char ob_sval[114]; + char ob_sval[117]; } importlib_util_toplevel_linetable = { .ob_base = { @@ -137836,20 +137920,20 @@ importlib_util_toplevel_linetable = { .ob_refcnt = _Py_IMMORTAL_REFCNT, .ob_type = &PyBytes_Type, }, - .ob_size = 113, + .ob_size = 116, }, .ob_shash = -1, - .ob_sval = "\xf0\x03\x01\x01\x01\xd9\x00\x33\xdd\x00\x18\xdd\x00\x28\xdd\x00\x25\xdd\x00\x28\xdd\x00\x22\xdd\x00\x2d\xdd\x00\x32\xdd\x00\x32\xdd\x00\x2e\xdd\x00\x32\xdd\x00\x38\xe3\x00\x0b\xdb\x00\x0a\xdb\x00\x0c\xf2\x06\x02\x01\x3d\xf2\x0a\x0c\x01\x37\xf3\x1e\x1c\x01\x18\xf3\x3e\x2a\x01\x18\xf7\x62\x01\x2e\x01\x2f\xf1\x00\x2e\x01\x2f\xf4\x62\x01\x2b\x01\x1c\x90\x25\xd7\x12\x22\xd1\x12\x22\xf4\x00\x2b\x01\x1c\xf4\x5c\x01\x22\x01\x27\x90\x16\xf5\x00\x22\x01\x27", + .ob_sval = "\xf0\x03\x01\x01\x01\xd9\x00\x33\xdd\x00\x18\xdd\x00\x28\xdd\x00\x25\xdd\x00\x28\xdd\x00\x22\xdd\x00\x2d\xdd\x00\x32\xdd\x00\x32\xdd\x00\x2e\xdd\x00\x32\xdd\x00\x38\xe3\x00\x0b\xdb\x00\x0a\xdb\x00\x10\xdb\x00\x0c\xf2\x06\x02\x01\x3d\xf2\x0a\x0c\x01\x37\xf3\x1e\x1c\x01\x18\xf3\x3e\x2a\x01\x18\xf7\x62\x01\x2e\x01\x2f\xf1\x00\x2e\x01\x2f\xf4\x62\x01\x3c\x01\x1c\x90\x25\xd7\x12\x22\xd1\x12\x22\xf4\x00\x3c\x01\x1c\xf4\x7e\x01\x24\x01\x27\x90\x16\xf5\x00\x24\x01\x27", }; static - struct _PyCode_DEF(276) + struct _PyCode_DEF(284) importlib_util_toplevel = { .ob_base = { .ob_base = { .ob_refcnt = _Py_IMMORTAL_REFCNT, .ob_type = &PyCode_Type, }, - .ob_size = 138, + .ob_size = 142, }, .co_consts = & importlib_util_toplevel_consts._object.ob_base.ob_base, .co_names = & importlib_util_toplevel_names._object.ob_base.ob_base, @@ -137873,7 +137957,7 @@ importlib_util_toplevel = { .co_qualname = &_Py_STR(anon_module), .co_linetable = & importlib_util_toplevel_linetable.ob_base.ob_base, ._co_cached = NULL, - .co_code_adaptive = "\x97\x00\x64\x00\x5a\x00\x64\x01\x64\x02\x6c\x01\x6d\x02\x5a\x02\x01\x00\x64\x01\x64\x03\x6c\x03\x6d\x04\x5a\x04\x01\x00\x64\x01\x64\x04\x6c\x03\x6d\x05\x5a\x05\x01\x00\x64\x01\x64\x05\x6c\x03\x6d\x06\x5a\x06\x01\x00\x64\x01\x64\x06\x6c\x03\x6d\x07\x5a\x07\x01\x00\x64\x01\x64\x07\x6c\x08\x6d\x09\x5a\x09\x01\x00\x64\x01\x64\x08\x6c\x08\x6d\x0a\x5a\x0a\x01\x00\x64\x01\x64\x09\x6c\x08\x6d\x0b\x5a\x0b\x01\x00\x64\x01\x64\x0a\x6c\x08\x6d\x0c\x5a\x0c\x01\x00\x64\x01\x64\x0b\x6c\x08\x6d\x0d\x5a\x0d\x01\x00\x64\x01\x64\x0c\x6c\x08\x6d\x0e\x5a\x0e\x01\x00\x64\x0d\x64\x0e\x6c\x0f\x5a\x0f\x64\x0d\x64\x0e\x6c\x10\x5a\x10\x64\x0d\x64\x0e\x6c\x11\x5a\x11\x64\x0f\x84\x00\x5a\x12\x64\x10\x84\x00\x5a\x13\x64\x19\x64\x11\x84\x01\x5a\x14\x64\x19\x64\x12\x84\x01\x5a\x15\x02\x00\x47\x00\x64\x13\x84\x00\x64\x14\xab\x02\x00\x00\x00\x00\x00\x00\x5a\x16\x02\x00\x47\x00\x64\x15\x84\x00\x64\x16\x65\x11\x6a\x2e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xab\x03\x00\x00\x00\x00\x00\x00\x5a\x18\x02\x00\x47\x00\x64\x17\x84\x00\x64\x18\x65\x02\xab\x03\x00\x00\x00\x00\x00\x00\x5a\x19\x79\x0e", + .co_code_adaptive = "\x97\x00\x64\x00\x5a\x00\x64\x01\x64\x02\x6c\x01\x6d\x02\x5a\x02\x01\x00\x64\x01\x64\x03\x6c\x03\x6d\x04\x5a\x04\x01\x00\x64\x01\x64\x04\x6c\x03\x6d\x05\x5a\x05\x01\x00\x64\x01\x64\x05\x6c\x03\x6d\x06\x5a\x06\x01\x00\x64\x01\x64\x06\x6c\x03\x6d\x07\x5a\x07\x01\x00\x64\x01\x64\x07\x6c\x08\x6d\x09\x5a\x09\x01\x00\x64\x01\x64\x08\x6c\x08\x6d\x0a\x5a\x0a\x01\x00\x64\x01\x64\x09\x6c\x08\x6d\x0b\x5a\x0b\x01\x00\x64\x01\x64\x0a\x6c\x08\x6d\x0c\x5a\x0c\x01\x00\x64\x01\x64\x0b\x6c\x08\x6d\x0d\x5a\x0d\x01\x00\x64\x01\x64\x0c\x6c\x08\x6d\x0e\x5a\x0e\x01\x00\x64\x0d\x64\x0e\x6c\x0f\x5a\x0f\x64\x0d\x64\x0e\x6c\x10\x5a\x10\x64\x0d\x64\x0e\x6c\x11\x5a\x11\x64\x0d\x64\x0e\x6c\x12\x5a\x12\x64\x0f\x84\x00\x5a\x13\x64\x10\x84\x00\x5a\x14\x64\x19\x64\x11\x84\x01\x5a\x15\x64\x19\x64\x12\x84\x01\x5a\x16\x02\x00\x47\x00\x64\x13\x84\x00\x64\x14\xab\x02\x00\x00\x00\x00\x00\x00\x5a\x17\x02\x00\x47\x00\x64\x15\x84\x00\x64\x16\x65\x12\x6a\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xab\x03\x00\x00\x00\x00\x00\x00\x5a\x19\x02\x00\x47\x00\x64\x17\x84\x00\x64\x18\x65\x02\xab\x03\x00\x00\x00\x00\x00\x00\x5a\x1a\x79\x0e", ._co_firsttraceable = 0, }; diff --git a/contrib/tools/python3/Python/frozen_modules/importlib._bootstrap.h b/contrib/tools/python3/Python/frozen_modules/importlib._bootstrap.h index 20e6d2d618..1349f464b6 100644 --- a/contrib/tools/python3/Python/frozen_modules/importlib._bootstrap.h +++ b/contrib/tools/python3/Python/frozen_modules/importlib._bootstrap.h @@ -681,2808 +681,2812 @@ const unsigned char _Py_M__importlib__bootstrap[] = { 0,0,0,114,122,0,0,0,115,2,0,0,0,32,32,114, 7,0,0,0,114,121,0,0,0,122,19,95,77,111,100,117, 108,101,76,111,99,107,46,114,101,108,101,97,115,101,116,1, - 0,0,115,168,0,0,0,128,0,220,14,21,215,14,31,209, + 0,0,115,171,0,0,0,128,0,220,14,21,215,14,31,209, 14,31,211,14,33,136,3,216,13,17,143,89,137,89,241,0, 9,9,42,216,15,19,143,122,137,122,152,83,210,15,32,220, 22,34,208,35,68,211,22,69,208,16,69,220,19,22,144,116, - 151,122,145,122,147,63,160,81,210,19,38,209,12,38,216,12, - 16,143,74,137,74,143,78,137,78,212,12,28,220,19,22,144, - 116,151,122,145,122,148,63,216,29,33,144,4,148,10,220,19, - 22,144,116,151,124,145,124,211,19,36,160,113,210,19,40,216, - 20,24,151,76,145,76,215,20,36,209,20,36,212,20,38,216, - 20,24,151,75,145,75,215,20,39,209,20,39,212,20,41,247, - 19,9,9,42,247,0,9,9,42,241,0,9,9,42,250,115, - 12,0,0,0,161,66,55,67,33,3,195,33,5,67,42,7, - 99,1,0,0,0,0,0,0,0,0,0,0,0,6,0,0, - 0,3,0,0,0,243,56,0,0,0,151,0,100,1,124,0, - 106,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,155,2,100,2,116,3,0,0,0,0,0,0, - 0,0,124,0,171,1,0,0,0,0,0,0,155,0,157,4, - 83,0,41,3,78,122,12,95,77,111,100,117,108,101,76,111, - 99,107,40,250,5,41,32,97,116,32,169,2,114,26,0,0, - 0,218,2,105,100,114,66,0,0,0,115,1,0,0,0,32, - 114,7,0,0,0,218,8,95,95,114,101,112,114,95,95,122, - 20,95,77,111,100,117,108,101,76,111,99,107,46,95,95,114, - 101,112,114,95,95,129,1,0,0,115,29,0,0,0,128,0, - 216,17,29,152,100,159,105,153,105,152,93,168,37,180,2,176, - 52,179,8,168,122,208,15,58,208,8,58,114,22,0,0,0, - 78,41,9,114,11,0,0,0,114,10,0,0,0,114,3,0, - 0,0,114,12,0,0,0,114,47,0,0,0,114,118,0,0, - 0,114,120,0,0,0,114,121,0,0,0,114,132,0,0,0, - 114,31,0,0,0,114,22,0,0,0,114,7,0,0,0,114, - 107,0,0,0,114,107,0,0,0,226,0,0,0,115,35,0, - 0,0,132,0,241,2,3,5,8,242,10,54,5,26,242,112, - 1,14,5,10,242,32,66,1,5,38,242,72,2,11,5,42, - 243,26,1,5,59,114,22,0,0,0,114,107,0,0,0,99, - 0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0, - 0,0,0,0,243,40,0,0,0,151,0,101,0,90,1,100, - 0,90,2,100,1,90,3,100,2,132,0,90,4,100,3,132, - 0,90,5,100,4,132,0,90,6,100,5,132,0,90,7,121, - 6,41,7,218,16,95,68,117,109,109,121,77,111,100,117,108, - 101,76,111,99,107,122,86,65,32,115,105,109,112,108,101,32, - 95,77,111,100,117,108,101,76,111,99,107,32,101,113,117,105, - 118,97,108,101,110,116,32,102,111,114,32,80,121,116,104,111, - 110,32,98,117,105,108,100,115,32,119,105,116,104,111,117,116, - 10,32,32,32,32,109,117,108,116,105,45,116,104,114,101,97, - 100,105,110,103,32,115,117,112,112,111,114,116,46,99,2,0, - 0,0,0,0,0,0,0,0,0,0,2,0,0,0,3,0, - 0,0,243,32,0,0,0,151,0,124,1,124,0,95,0,0, - 0,0,0,0,0,0,0,100,1,124,0,95,1,0,0,0, - 0,0,0,0,0,121,0,169,2,78,114,125,0,0,0,41, - 2,114,26,0,0,0,114,113,0,0,0,114,115,0,0,0, - 115,2,0,0,0,32,32,114,7,0,0,0,114,47,0,0, - 0,122,25,95,68,117,109,109,121,77,111,100,117,108,101,76, - 111,99,107,46,95,95,105,110,105,116,95,95,137,1,0,0, - 115,16,0,0,0,128,0,216,20,24,136,4,140,9,216,21, - 22,136,4,141,10,114,22,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, - 46,0,0,0,151,0,124,0,120,1,106,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,100,1, - 122,13,0,0,99,2,95,0,0,0,0,0,0,0,0,0, - 121,2,41,3,78,233,1,0,0,0,84,41,1,114,113,0, - 0,0,114,66,0,0,0,115,1,0,0,0,32,114,7,0, - 0,0,114,120,0,0,0,122,24,95,68,117,109,109,121,77, - 111,100,117,108,101,76,111,99,107,46,97,99,113,117,105,114, - 101,141,1,0,0,115,18,0,0,0,128,0,216,8,12,143, - 10,138,10,144,97,137,15,141,10,216,15,19,114,22,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,98,0,0,0,151,0,124,0,106, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,100,1,107,40,0,0,114,11,116,3,0,0,0, - 0,0,0,0,0,100,2,171,1,0,0,0,0,0,0,130, - 1,124,0,120,1,106,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,100,3,122,23,0,0,99, - 2,95,0,0,0,0,0,0,0,0,0,121,0,41,4,78, - 114,125,0,0,0,114,124,0,0,0,114,138,0,0,0,41, - 2,114,113,0,0,0,114,126,0,0,0,114,66,0,0,0, - 115,1,0,0,0,32,114,7,0,0,0,114,121,0,0,0, - 122,24,95,68,117,109,109,121,77,111,100,117,108,101,76,111, - 99,107,46,114,101,108,101,97,115,101,145,1,0,0,115,38, - 0,0,0,128,0,216,11,15,143,58,137,58,152,17,138,63, - 220,18,30,208,31,64,211,18,65,208,12,65,216,8,12,143, - 10,138,10,144,97,137,15,142,10,114,22,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,56,0,0,0,151,0,100,1,124,0,106,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,155,2,100,2,116,3,0,0,0,0,0,0,0,0, - 124,0,171,1,0,0,0,0,0,0,155,0,157,4,83,0, - 41,3,78,122,17,95,68,117,109,109,121,77,111,100,117,108, - 101,76,111,99,107,40,114,129,0,0,0,114,130,0,0,0, - 114,66,0,0,0,115,1,0,0,0,32,114,7,0,0,0, - 114,132,0,0,0,122,25,95,68,117,109,109,121,77,111,100, - 117,108,101,76,111,99,107,46,95,95,114,101,112,114,95,95, - 150,1,0,0,115,29,0,0,0,128,0,216,17,34,160,52, - 167,57,161,57,160,45,168,117,180,82,184,4,179,88,176,74, - 208,15,63,208,8,63,114,22,0,0,0,78,41,8,114,11, - 0,0,0,114,10,0,0,0,114,3,0,0,0,114,12,0, - 0,0,114,47,0,0,0,114,120,0,0,0,114,121,0,0, - 0,114,132,0,0,0,114,31,0,0,0,114,22,0,0,0, - 114,7,0,0,0,114,134,0,0,0,114,134,0,0,0,133, - 1,0,0,115,28,0,0,0,132,0,241,2,1,5,32,242, - 6,2,5,23,242,8,2,5,20,242,8,3,5,24,243,10, - 1,5,64,1,114,22,0,0,0,114,134,0,0,0,99,0, - 0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0, - 0,0,0,243,30,0,0,0,151,0,101,0,90,1,100,0, - 90,2,100,1,132,0,90,3,100,2,132,0,90,4,100,3, - 132,0,90,5,121,4,41,5,218,18,95,77,111,100,117,108, - 101,76,111,99,107,77,97,110,97,103,101,114,99,2,0,0, - 0,0,0,0,0,0,0,0,0,2,0,0,0,3,0,0, - 0,243,32,0,0,0,151,0,124,1,124,0,95,0,0,0, - 0,0,0,0,0,0,100,0,124,0,95,1,0,0,0,0, - 0,0,0,0,121,0,114,2,0,0,0,41,2,218,5,95, - 110,97,109,101,218,5,95,108,111,99,107,114,115,0,0,0, - 115,2,0,0,0,32,32,114,7,0,0,0,114,47,0,0, - 0,122,27,95,77,111,100,117,108,101,76,111,99,107,77,97, - 110,97,103,101,114,46,95,95,105,110,105,116,95,95,156,1, - 0,0,115,16,0,0,0,128,0,216,21,25,136,4,140,10, - 216,21,25,136,4,141,10,114,22,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,108,0,0,0,151,0,116,1,0,0,0,0,0,0, - 0,0,124,0,106,2,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,171,1,0,0,0,0,0,0, - 124,0,95,2,0,0,0,0,0,0,0,0,124,0,106,4, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,106,7,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,171,0,0,0,0,0,0,0,1,0, - 121,0,114,2,0,0,0,41,4,218,16,95,103,101,116,95, - 109,111,100,117,108,101,95,108,111,99,107,114,144,0,0,0, - 114,145,0,0,0,114,120,0,0,0,114,66,0,0,0,115, - 1,0,0,0,32,114,7,0,0,0,114,87,0,0,0,122, - 28,95,77,111,100,117,108,101,76,111,99,107,77,97,110,97, - 103,101,114,46,95,95,101,110,116,101,114,95,95,160,1,0, - 0,115,34,0,0,0,128,0,220,21,37,160,100,167,106,161, - 106,211,21,49,136,4,140,10,216,8,12,143,10,137,10,215, - 8,26,209,8,26,213,8,28,114,22,0,0,0,99,1,0, - 0,0,0,0,0,0,0,0,0,0,2,0,0,0,15,0, - 0,0,243,56,0,0,0,151,0,124,0,106,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,106, - 3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,171,0,0,0,0,0,0,0,1,0,121,0,114, - 2,0,0,0,41,2,114,145,0,0,0,114,121,0,0,0, - 114,89,0,0,0,115,3,0,0,0,32,32,32,114,7,0, - 0,0,114,92,0,0,0,122,27,95,77,111,100,117,108,101, - 76,111,99,107,77,97,110,97,103,101,114,46,95,95,101,120, - 105,116,95,95,164,1,0,0,115,18,0,0,0,128,0,216, - 8,12,143,10,137,10,215,8,26,209,8,26,213,8,28,114, - 22,0,0,0,78,41,6,114,11,0,0,0,114,10,0,0, - 0,114,3,0,0,0,114,47,0,0,0,114,87,0,0,0, - 114,92,0,0,0,114,31,0,0,0,114,22,0,0,0,114, - 7,0,0,0,114,142,0,0,0,114,142,0,0,0,154,1, - 0,0,115,17,0,0,0,132,0,242,4,2,5,26,242,8, - 2,5,29,243,8,1,5,29,114,22,0,0,0,114,142,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,1,0,0,151,0,116,0, - 0,0,0,0,0,0,0,0,106,3,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,171,0,0,0, - 0,0,0,0,1,0,9,0,9,0,116,5,0,0,0,0, - 0,0,0,0,124,0,25,0,0,0,171,0,0,0,0,0, - 0,0,125,1,124,1,128,63,116,8,0,0,0,0,0,0, - 0,0,128,12,116,11,0,0,0,0,0,0,0,0,124,0, - 171,1,0,0,0,0,0,0,125,1,110,11,116,13,0,0, - 0,0,0,0,0,0,124,0,171,1,0,0,0,0,0,0, - 125,1,124,0,102,1,100,2,132,1,125,2,116,14,0,0, - 0,0,0,0,0,0,106,17,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,124,1,124,2,171,2, - 0,0,0,0,0,0,116,4,0,0,0,0,0,0,0,0, - 124,0,60,0,0,0,116,0,0,0,0,0,0,0,0,0, - 106,19,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,171,0,0,0,0,0,0,0,1,0,124,1, - 83,0,35,0,116,6,0,0,0,0,0,0,0,0,36,0, - 114,5,1,0,100,1,125,1,89,0,140,100,119,0,120,3, - 89,0,119,1,35,0,116,0,0,0,0,0,0,0,0,0, - 106,19,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,171,0,0,0,0,0,0,0,1,0,119,0, - 120,3,89,0,119,1,41,3,122,139,71,101,116,32,111,114, - 32,99,114,101,97,116,101,32,116,104,101,32,109,111,100,117, - 108,101,32,108,111,99,107,32,102,111,114,32,97,32,103,105, - 118,101,110,32,109,111,100,117,108,101,32,110,97,109,101,46, - 10,10,32,32,32,32,65,99,113,117,105,114,101,47,114,101, - 108,101,97,115,101,32,105,110,116,101,114,110,97,108,108,121, - 32,116,104,101,32,103,108,111,98,97,108,32,105,109,112,111, - 114,116,32,108,111,99,107,32,116,111,32,112,114,111,116,101, - 99,116,10,32,32,32,32,95,109,111,100,117,108,101,95,108, - 111,99,107,115,46,78,99,2,0,0,0,0,0,0,0,0, - 0,0,0,4,0,0,0,19,0,0,0,243,196,0,0,0, - 151,0,116,0,0,0,0,0,0,0,0,0,106,3,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 171,0,0,0,0,0,0,0,1,0,9,0,116,4,0,0, - 0,0,0,0,0,0,106,7,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,124,1,171,1,0,0, - 0,0,0,0,124,0,117,0,114,7,116,4,0,0,0,0, - 0,0,0,0,124,1,61,0,116,0,0,0,0,0,0,0, - 0,0,106,9,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,171,0,0,0,0,0,0,0,1,0, - 121,0,35,0,116,0,0,0,0,0,0,0,0,0,106,9, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,171,0,0,0,0,0,0,0,1,0,119,0,120,3, - 89,0,119,1,114,2,0,0,0,41,5,218,4,95,105,109, - 112,218,12,97,99,113,117,105,114,101,95,108,111,99,107,218, - 13,95,109,111,100,117,108,101,95,108,111,99,107,115,114,76, - 0,0,0,218,12,114,101,108,101,97,115,101,95,108,111,99, - 107,41,2,114,61,0,0,0,114,26,0,0,0,115,2,0, - 0,0,32,32,114,7,0,0,0,218,2,99,98,122,28,95, - 103,101,116,95,109,111,100,117,108,101,95,108,111,99,107,46, - 60,108,111,99,97,108,115,62,46,99,98,189,1,0,0,115, - 73,0,0,0,128,0,220,16,20,215,16,33,209,16,33,212, - 16,35,240,2,7,17,40,244,8,0,24,37,215,23,40,209, - 23,40,168,20,211,23,46,176,35,209,23,53,220,28,41,168, - 36,208,28,47,228,20,24,215,20,37,209,20,37,213,20,39, - 248,148,68,215,20,37,209,20,37,213,20,39,250,115,11,0, - 0,0,150,30,65,9,0,193,9,22,65,31,3,41,10,114, - 151,0,0,0,114,152,0,0,0,114,153,0,0,0,114,73, - 0,0,0,114,109,0,0,0,114,134,0,0,0,114,107,0, - 0,0,114,52,0,0,0,114,61,0,0,0,114,154,0,0, - 0,41,3,114,26,0,0,0,114,83,0,0,0,114,155,0, - 0,0,115,3,0,0,0,32,32,32,114,7,0,0,0,114, - 147,0,0,0,114,147,0,0,0,170,1,0,0,115,156,0, - 0,0,128,0,244,12,0,5,9,215,4,21,209,4,21,212, - 4,23,240,2,25,5,28,240,2,3,9,24,220,19,32,160, - 20,209,19,38,211,19,40,136,68,240,8,0,12,16,136,60, - 220,15,22,136,127,220,23,39,168,4,211,23,45,145,4,228, - 23,34,160,52,211,23,40,144,4,224,29,33,243,0,9,13, - 40,244,22,0,35,43,167,44,161,44,168,116,176,82,211,34, - 56,140,77,152,36,209,12,31,228,8,12,215,8,25,209,8, - 25,212,8,27,224,11,15,128,75,248,244,49,0,16,24,242, - 0,1,9,24,216,19,23,138,68,240,3,1,9,24,251,244, - 44,0,9,13,215,8,25,209,8,25,213,8,27,250,115,41, - 0,0,0,151,13,65,59,0,164,65,1,66,12,0,193,59, - 11,66,9,3,194,6,2,66,12,0,194,8,1,66,9,3, - 194,9,3,66,12,0,194,12,22,66,34,3,99,1,0,0, - 0,0,0,0,0,0,0,0,0,4,0,0,0,3,0,0, - 0,243,122,0,0,0,151,0,116,1,0,0,0,0,0,0, - 0,0,124,0,171,1,0,0,0,0,0,0,125,1,9,0, - 124,1,106,3,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,171,0,0,0,0,0,0,0,1,0, - 124,1,106,5,0,0,0,0,0,0,0,0,0,0,0,0, + 151,122,145,122,147,63,160,81,210,19,38,208,12,38,208,19, + 38,216,12,16,143,74,137,74,143,78,137,78,212,12,28,220, + 19,22,144,116,151,122,145,122,148,63,216,29,33,144,4,148, + 10,220,19,22,144,116,151,124,145,124,211,19,36,160,113,210, + 19,40,216,20,24,151,76,145,76,215,20,36,209,20,36,212, + 20,38,216,20,24,151,75,145,75,215,20,39,209,20,39,212, + 20,41,247,19,9,9,42,247,0,9,9,42,241,0,9,9, + 42,250,115,12,0,0,0,161,66,55,67,33,3,195,33,5, + 67,42,7,99,1,0,0,0,0,0,0,0,0,0,0,0, + 6,0,0,0,3,0,0,0,243,56,0,0,0,151,0,100, + 1,124,0,106,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,155,2,100,2,116,3,0,0,0, + 0,0,0,0,0,124,0,171,1,0,0,0,0,0,0,155, + 0,157,4,83,0,41,3,78,122,12,95,77,111,100,117,108, + 101,76,111,99,107,40,250,5,41,32,97,116,32,169,2,114, + 26,0,0,0,218,2,105,100,114,66,0,0,0,115,1,0, + 0,0,32,114,7,0,0,0,218,8,95,95,114,101,112,114, + 95,95,122,20,95,77,111,100,117,108,101,76,111,99,107,46, + 95,95,114,101,112,114,95,95,129,1,0,0,115,29,0,0, + 0,128,0,216,17,29,152,100,159,105,153,105,152,93,168,37, + 180,2,176,52,179,8,168,122,208,15,58,208,8,58,114,22, + 0,0,0,78,41,9,114,11,0,0,0,114,10,0,0,0, + 114,3,0,0,0,114,12,0,0,0,114,47,0,0,0,114, + 118,0,0,0,114,120,0,0,0,114,121,0,0,0,114,132, + 0,0,0,114,31,0,0,0,114,22,0,0,0,114,7,0, + 0,0,114,107,0,0,0,114,107,0,0,0,226,0,0,0, + 115,35,0,0,0,132,0,241,2,3,5,8,242,10,54,5, + 26,242,112,1,14,5,10,242,32,66,1,5,38,242,72,2, + 11,5,42,243,26,1,5,59,114,22,0,0,0,114,107,0, + 0,0,99,0,0,0,0,0,0,0,0,0,0,0,0,1, + 0,0,0,0,0,0,0,243,40,0,0,0,151,0,101,0, + 90,1,100,0,90,2,100,1,90,3,100,2,132,0,90,4, + 100,3,132,0,90,5,100,4,132,0,90,6,100,5,132,0, + 90,7,121,6,41,7,218,16,95,68,117,109,109,121,77,111, + 100,117,108,101,76,111,99,107,122,86,65,32,115,105,109,112, + 108,101,32,95,77,111,100,117,108,101,76,111,99,107,32,101, + 113,117,105,118,97,108,101,110,116,32,102,111,114,32,80,121, + 116,104,111,110,32,98,117,105,108,100,115,32,119,105,116,104, + 111,117,116,10,32,32,32,32,109,117,108,116,105,45,116,104, + 114,101,97,100,105,110,103,32,115,117,112,112,111,114,116,46, + 99,2,0,0,0,0,0,0,0,0,0,0,0,2,0,0, + 0,3,0,0,0,243,32,0,0,0,151,0,124,1,124,0, + 95,0,0,0,0,0,0,0,0,0,100,1,124,0,95,1, + 0,0,0,0,0,0,0,0,121,0,169,2,78,114,125,0, + 0,0,41,2,114,26,0,0,0,114,113,0,0,0,114,115, + 0,0,0,115,2,0,0,0,32,32,114,7,0,0,0,114, + 47,0,0,0,122,25,95,68,117,109,109,121,77,111,100,117, + 108,101,76,111,99,107,46,95,95,105,110,105,116,95,95,137, + 1,0,0,115,16,0,0,0,128,0,216,20,24,136,4,140, + 9,216,21,22,136,4,141,10,114,22,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,46,0,0,0,151,0,124,0,120,1,106,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,100,1,122,13,0,0,99,2,95,0,0,0,0,0,0, + 0,0,0,121,2,41,3,78,233,1,0,0,0,84,41,1, + 114,113,0,0,0,114,66,0,0,0,115,1,0,0,0,32, + 114,7,0,0,0,114,120,0,0,0,122,24,95,68,117,109, + 109,121,77,111,100,117,108,101,76,111,99,107,46,97,99,113, + 117,105,114,101,141,1,0,0,115,18,0,0,0,128,0,216, + 8,12,143,10,138,10,144,97,137,15,141,10,216,15,19,114, + 22,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,98,0,0,0,151,0, + 124,0,106,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,100,1,107,40,0,0,114,11,116,3, + 0,0,0,0,0,0,0,0,100,2,171,1,0,0,0,0, + 0,0,130,1,124,0,120,1,106,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,100,3,122,23, + 0,0,99,2,95,0,0,0,0,0,0,0,0,0,121,0, + 41,4,78,114,125,0,0,0,114,124,0,0,0,114,138,0, + 0,0,41,2,114,113,0,0,0,114,126,0,0,0,114,66, + 0,0,0,115,1,0,0,0,32,114,7,0,0,0,114,121, + 0,0,0,122,24,95,68,117,109,109,121,77,111,100,117,108, + 101,76,111,99,107,46,114,101,108,101,97,115,101,145,1,0, + 0,115,38,0,0,0,128,0,216,11,15,143,58,137,58,152, + 17,138,63,220,18,30,208,31,64,211,18,65,208,12,65,216, + 8,12,143,10,138,10,144,97,137,15,142,10,114,22,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,56,0,0,0,151,0,100,1,124, + 0,106,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,155,2,100,2,116,3,0,0,0,0,0, + 0,0,0,124,0,171,1,0,0,0,0,0,0,155,0,157, + 4,83,0,41,3,78,122,17,95,68,117,109,109,121,77,111, + 100,117,108,101,76,111,99,107,40,114,129,0,0,0,114,130, + 0,0,0,114,66,0,0,0,115,1,0,0,0,32,114,7, + 0,0,0,114,132,0,0,0,122,25,95,68,117,109,109,121, + 77,111,100,117,108,101,76,111,99,107,46,95,95,114,101,112, + 114,95,95,150,1,0,0,115,29,0,0,0,128,0,216,17, + 34,160,52,167,57,161,57,160,45,168,117,180,82,184,4,179, + 88,176,74,208,15,63,208,8,63,114,22,0,0,0,78,41, + 8,114,11,0,0,0,114,10,0,0,0,114,3,0,0,0, + 114,12,0,0,0,114,47,0,0,0,114,120,0,0,0,114, + 121,0,0,0,114,132,0,0,0,114,31,0,0,0,114,22, + 0,0,0,114,7,0,0,0,114,134,0,0,0,114,134,0, + 0,0,133,1,0,0,115,28,0,0,0,132,0,241,2,1, + 5,32,242,6,2,5,23,242,8,2,5,20,242,8,3,5, + 24,243,10,1,5,64,1,114,22,0,0,0,114,134,0,0, + 0,99,0,0,0,0,0,0,0,0,0,0,0,0,1,0, + 0,0,0,0,0,0,243,30,0,0,0,151,0,101,0,90, + 1,100,0,90,2,100,1,132,0,90,3,100,2,132,0,90, + 4,100,3,132,0,90,5,121,4,41,5,218,18,95,77,111, + 100,117,108,101,76,111,99,107,77,97,110,97,103,101,114,99, + 2,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, + 3,0,0,0,243,32,0,0,0,151,0,124,1,124,0,95, + 0,0,0,0,0,0,0,0,0,100,0,124,0,95,1,0, + 0,0,0,0,0,0,0,121,0,114,2,0,0,0,41,2, + 218,5,95,110,97,109,101,218,5,95,108,111,99,107,114,115, + 0,0,0,115,2,0,0,0,32,32,114,7,0,0,0,114, + 47,0,0,0,122,27,95,77,111,100,117,108,101,76,111,99, + 107,77,97,110,97,103,101,114,46,95,95,105,110,105,116,95, + 95,156,1,0,0,115,16,0,0,0,128,0,216,21,25,136, + 4,140,10,216,21,25,136,4,141,10,114,22,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,108,0,0,0,151,0,116,1,0,0,0, + 0,0,0,0,0,124,0,106,2,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,171,1,0,0,0, + 0,0,0,124,0,95,2,0,0,0,0,0,0,0,0,124, + 0,106,4,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,106,7,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,171,0,0,0,0,0,0, + 0,1,0,121,0,114,2,0,0,0,41,4,218,16,95,103, + 101,116,95,109,111,100,117,108,101,95,108,111,99,107,114,144, + 0,0,0,114,145,0,0,0,114,120,0,0,0,114,66,0, + 0,0,115,1,0,0,0,32,114,7,0,0,0,114,87,0, + 0,0,122,28,95,77,111,100,117,108,101,76,111,99,107,77, + 97,110,97,103,101,114,46,95,95,101,110,116,101,114,95,95, + 160,1,0,0,115,34,0,0,0,128,0,220,21,37,160,100, + 167,106,161,106,211,21,49,136,4,140,10,216,8,12,143,10, + 137,10,215,8,26,209,8,26,213,8,28,114,22,0,0,0, + 99,1,0,0,0,0,0,0,0,0,0,0,0,2,0,0, + 0,15,0,0,0,243,56,0,0,0,151,0,124,0,106,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,106,3,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,171,0,0,0,0,0,0,0,1,0, - 121,1,35,0,116,6,0,0,0,0,0,0,0,0,36,0, - 114,3,1,0,89,0,121,1,119,0,120,3,89,0,119,1, - 41,2,122,189,65,99,113,117,105,114,101,115,32,116,104,101, - 110,32,114,101,108,101,97,115,101,115,32,116,104,101,32,109, + 121,0,114,2,0,0,0,41,2,114,145,0,0,0,114,121, + 0,0,0,114,89,0,0,0,115,3,0,0,0,32,32,32, + 114,7,0,0,0,114,92,0,0,0,122,27,95,77,111,100, + 117,108,101,76,111,99,107,77,97,110,97,103,101,114,46,95, + 95,101,120,105,116,95,95,164,1,0,0,115,18,0,0,0, + 128,0,216,8,12,143,10,137,10,215,8,26,209,8,26,213, + 8,28,114,22,0,0,0,78,41,6,114,11,0,0,0,114, + 10,0,0,0,114,3,0,0,0,114,47,0,0,0,114,87, + 0,0,0,114,92,0,0,0,114,31,0,0,0,114,22,0, + 0,0,114,7,0,0,0,114,142,0,0,0,114,142,0,0, + 0,154,1,0,0,115,17,0,0,0,132,0,242,4,2,5, + 26,242,8,2,5,29,243,8,1,5,29,114,22,0,0,0, + 114,142,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,1,0,0,151, + 0,116,0,0,0,0,0,0,0,0,0,106,3,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,171, + 0,0,0,0,0,0,0,1,0,9,0,9,0,116,5,0, + 0,0,0,0,0,0,0,124,0,25,0,0,0,171,0,0, + 0,0,0,0,0,125,1,124,1,128,63,116,8,0,0,0, + 0,0,0,0,0,128,12,116,11,0,0,0,0,0,0,0, + 0,124,0,171,1,0,0,0,0,0,0,125,1,110,11,116, + 13,0,0,0,0,0,0,0,0,124,0,171,1,0,0,0, + 0,0,0,125,1,124,0,102,1,100,2,132,1,125,2,116, + 14,0,0,0,0,0,0,0,0,106,17,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,124,1,124, + 2,171,2,0,0,0,0,0,0,116,4,0,0,0,0,0, + 0,0,0,124,0,60,0,0,0,116,0,0,0,0,0,0, + 0,0,0,106,19,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,171,0,0,0,0,0,0,0,1, + 0,124,1,83,0,35,0,116,6,0,0,0,0,0,0,0, + 0,36,0,114,5,1,0,100,1,125,1,89,0,140,100,119, + 0,120,3,89,0,119,1,35,0,116,0,0,0,0,0,0, + 0,0,0,106,19,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,171,0,0,0,0,0,0,0,1, + 0,119,0,120,3,89,0,119,1,41,3,122,139,71,101,116, + 32,111,114,32,99,114,101,97,116,101,32,116,104,101,32,109, 111,100,117,108,101,32,108,111,99,107,32,102,111,114,32,97, 32,103,105,118,101,110,32,109,111,100,117,108,101,32,110,97, - 109,101,46,10,10,32,32,32,32,84,104,105,115,32,105,115, - 32,117,115,101,100,32,116,111,32,101,110,115,117,114,101,32, - 97,32,109,111,100,117,108,101,32,105,115,32,99,111,109,112, - 108,101,116,101,108,121,32,105,110,105,116,105,97,108,105,122, - 101,100,44,32,105,110,32,116,104,101,10,32,32,32,32,101, - 118,101,110,116,32,105,116,32,105,115,32,98,101,105,110,103, - 32,105,109,112,111,114,116,101,100,32,98,121,32,97,110,111, - 116,104,101,114,32,116,104,114,101,97,100,46,10,32,32,32, - 32,78,41,4,114,147,0,0,0,114,120,0,0,0,114,121, - 0,0,0,114,94,0,0,0,41,2,114,26,0,0,0,114, - 83,0,0,0,115,2,0,0,0,32,32,114,7,0,0,0, - 218,19,95,108,111,99,107,95,117,110,108,111,99,107,95,109, - 111,100,117,108,101,114,157,0,0,0,207,1,0,0,115,61, - 0,0,0,128,0,244,12,0,12,28,152,68,211,11,33,128, - 68,240,2,7,5,23,216,8,12,143,12,137,12,140,14,240, - 12,0,9,13,143,12,137,12,141,14,248,244,11,0,12,26, - 242,0,3,5,13,241,6,0,9,13,240,7,3,5,13,250, - 115,12,0,0,0,141,16,46,0,174,9,58,3,185,1,58, - 3,99,1,0,0,0,0,0,0,0,0,0,0,0,5,0, - 0,0,15,0,0,0,243,18,0,0,0,151,0,2,0,124, - 0,124,1,105,0,124,2,164,1,142,1,83,0,41,1,97, - 46,1,0,0,114,101,109,111,118,101,95,105,109,112,111,114, - 116,108,105,98,95,102,114,97,109,101,115,32,105,110,32,105, - 109,112,111,114,116,46,99,32,119,105,108,108,32,97,108,119, - 97,121,115,32,114,101,109,111,118,101,32,115,101,113,117,101, - 110,99,101,115,10,32,32,32,32,111,102,32,105,109,112,111, - 114,116,108,105,98,32,102,114,97,109,101,115,32,116,104,97, - 116,32,101,110,100,32,119,105,116,104,32,97,32,99,97,108, - 108,32,116,111,32,116,104,105,115,32,102,117,110,99,116,105, - 111,110,10,10,32,32,32,32,85,115,101,32,105,116,32,105, - 110,115,116,101,97,100,32,111,102,32,97,32,110,111,114,109, - 97,108,32,99,97,108,108,32,105,110,32,112,108,97,99,101, - 115,32,119,104,101,114,101,32,105,110,99,108,117,100,105,110, - 103,32,116,104,101,32,105,109,112,111,114,116,108,105,98,10, - 32,32,32,32,102,114,97,109,101,115,32,105,110,116,114,111, - 100,117,99,101,115,32,117,110,119,97,110,116,101,100,32,110, - 111,105,115,101,32,105,110,116,111,32,116,104,101,32,116,114, - 97,99,101,98,97,99,107,32,40,101,46,103,46,32,119,104, - 101,110,32,101,120,101,99,117,116,105,110,103,10,32,32,32, - 32,109,111,100,117,108,101,32,99,111,100,101,41,10,32,32, - 32,32,114,31,0,0,0,41,3,218,1,102,114,90,0,0, - 0,218,4,107,119,100,115,115,3,0,0,0,32,32,32,114, - 7,0,0,0,218,25,95,99,97,108,108,95,119,105,116,104, - 95,102,114,97,109,101,115,95,114,101,109,111,118,101,100,114, - 161,0,0,0,224,1,0,0,115,20,0,0,0,128,0,241, - 16,0,12,13,136,100,208,11,27,144,100,209,11,27,208,4, - 27,114,22,0,0,0,114,138,0,0,0,41,1,218,9,118, - 101,114,98,111,115,105,116,121,99,1,0,0,0,0,0,0, - 0,1,0,0,0,5,0,0,0,7,0,0,0,243,188,0, - 0,0,151,0,116,0,0,0,0,0,0,0,0,0,106,2, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,106,4,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,124,1,107,92,0,0,114,63,124,0, - 106,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,100,1,171,1,0,0,0,0,0,0,115,5, - 100,2,124,0,122,0,0,0,125,0,116,9,0,0,0,0, - 0,0,0,0,2,0,124,0,106,10,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,124,2,142,0, - 116,0,0,0,0,0,0,0,0,0,106,12,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,172,3, - 171,2,0,0,0,0,0,0,1,0,121,4,121,4,41,5, - 122,61,80,114,105,110,116,32,116,104,101,32,109,101,115,115, - 97,103,101,32,116,111,32,115,116,100,101,114,114,32,105,102, - 32,45,118,47,80,89,84,72,79,78,86,69,82,66,79,83, - 69,32,105,115,32,116,117,114,110,101,100,32,111,110,46,41, - 2,250,1,35,122,7,105,109,112,111,114,116,32,122,2,35, - 32,41,1,218,4,102,105,108,101,78,41,7,114,24,0,0, - 0,218,5,102,108,97,103,115,218,7,118,101,114,98,111,115, - 101,218,10,115,116,97,114,116,115,119,105,116,104,218,5,112, - 114,105,110,116,218,6,102,111,114,109,97,116,218,6,115,116, - 100,101,114,114,41,3,218,7,109,101,115,115,97,103,101,114, - 162,0,0,0,114,90,0,0,0,115,3,0,0,0,32,32, - 32,114,7,0,0,0,218,16,95,118,101,114,98,111,115,101, - 95,109,101,115,115,97,103,101,114,173,0,0,0,235,1,0, - 0,115,74,0,0,0,128,0,228,7,10,135,121,129,121,215, - 7,24,209,7,24,152,73,210,7,37,216,15,22,215,15,33, - 209,15,33,208,34,50,212,15,51,216,22,26,152,87,145,110, - 136,71,220,8,13,136,110,136,103,143,110,137,110,152,100,208, - 14,35,172,35,175,42,169,42,214,8,53,240,7,0,8,38, - 114,22,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,42,0,0,0,135, - 0,151,0,136,0,102,1,100,1,132,8,125,1,116,1,0, - 0,0,0,0,0,0,0,124,1,137,0,171,2,0,0,0, - 0,0,0,1,0,124,1,83,0,41,2,122,49,68,101,99, - 111,114,97,116,111,114,32,116,111,32,118,101,114,105,102,121, - 32,116,104,101,32,110,97,109,101,100,32,109,111,100,117,108, - 101,32,105,115,32,98,117,105,108,116,45,105,110,46,99,2, - 0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,19, - 0,0,0,243,90,0,0,0,149,1,151,0,124,1,116,0, - 0,0,0,0,0,0,0,0,106,2,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,118,1,114,16, - 116,5,0,0,0,0,0,0,0,0,124,1,155,2,100,1, - 157,2,124,1,172,2,171,2,0,0,0,0,0,0,130,1, - 2,0,137,2,124,0,124,1,171,2,0,0,0,0,0,0, - 83,0,41,3,78,250,25,32,105,115,32,110,111,116,32,97, - 32,98,117,105,108,116,45,105,110,32,109,111,100,117,108,101, - 114,25,0,0,0,41,3,114,24,0,0,0,218,20,98,117, - 105,108,116,105,110,95,109,111,100,117,108,101,95,110,97,109, - 101,115,218,11,73,109,112,111,114,116,69,114,114,111,114,169, - 3,114,44,0,0,0,218,8,102,117,108,108,110,97,109,101, - 218,3,102,120,110,115,3,0,0,0,32,32,128,114,7,0, - 0,0,218,25,95,114,101,113,117,105,114,101,115,95,98,117, - 105,108,116,105,110,95,119,114,97,112,112,101,114,122,52,95, - 114,101,113,117,105,114,101,115,95,98,117,105,108,116,105,110, - 46,60,108,111,99,97,108,115,62,46,95,114,101,113,117,105, - 114,101,115,95,98,117,105,108,116,105,110,95,119,114,97,112, - 112,101,114,245,1,0,0,115,56,0,0,0,248,128,0,216, - 11,19,156,51,215,27,51,209,27,51,209,11,51,220,18,29, - 160,24,160,12,208,44,69,208,30,70,216,35,43,244,3,1, - 19,45,240,0,1,13,45,225,15,18,144,52,152,24,211,15, - 34,208,8,34,114,22,0,0,0,169,1,114,21,0,0,0, - 41,2,114,181,0,0,0,114,182,0,0,0,115,2,0,0, - 0,96,32,114,7,0,0,0,218,17,95,114,101,113,117,105, - 114,101,115,95,98,117,105,108,116,105,110,114,184,0,0,0, - 243,1,0,0,115,27,0,0,0,248,128,0,244,4,4,5, - 35,244,10,0,5,10,208,10,35,160,83,212,4,41,216,11, - 36,208,4,36,114,22,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,42, - 0,0,0,135,0,151,0,136,0,102,1,100,1,132,8,125, - 1,116,1,0,0,0,0,0,0,0,0,124,1,137,0,171, - 2,0,0,0,0,0,0,1,0,124,1,83,0,41,2,122, - 47,68,101,99,111,114,97,116,111,114,32,116,111,32,118,101, - 114,105,102,121,32,116,104,101,32,110,97,109,101,100,32,109, - 111,100,117,108,101,32,105,115,32,102,114,111,122,101,110,46, - 99,2,0,0,0,0,0,0,0,0,0,0,0,4,0,0, - 0,19,0,0,0,243,96,0,0,0,149,1,151,0,116,0, - 0,0,0,0,0,0,0,0,106,3,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,124,1,171,1, - 0,0,0,0,0,0,115,16,116,5,0,0,0,0,0,0, - 0,0,124,1,155,2,100,1,157,2,124,1,172,2,171,2, - 0,0,0,0,0,0,130,1,2,0,137,2,124,0,124,1, - 171,2,0,0,0,0,0,0,83,0,41,3,78,122,23,32, - 105,115,32,110,111,116,32,97,32,102,114,111,122,101,110,32, - 109,111,100,117,108,101,114,25,0,0,0,41,3,114,151,0, - 0,0,218,9,105,115,95,102,114,111,122,101,110,114,178,0, - 0,0,114,179,0,0,0,115,3,0,0,0,32,32,128,114, - 7,0,0,0,218,24,95,114,101,113,117,105,114,101,115,95, - 102,114,111,122,101,110,95,119,114,97,112,112,101,114,122,50, - 95,114,101,113,117,105,114,101,115,95,102,114,111,122,101,110, - 46,60,108,111,99,97,108,115,62,46,95,114,101,113,117,105, - 114,101,115,95,102,114,111,122,101,110,95,119,114,97,112,112, - 101,114,0,2,0,0,115,54,0,0,0,248,128,0,220,15, - 19,143,126,137,126,152,104,212,15,39,220,18,29,160,24,160, - 12,208,44,67,208,30,68,216,35,43,244,3,1,19,45,240, - 0,1,13,45,225,15,18,144,52,152,24,211,15,34,208,8, - 34,114,22,0,0,0,114,183,0,0,0,41,2,114,181,0, - 0,0,114,188,0,0,0,115,2,0,0,0,96,32,114,7, - 0,0,0,218,16,95,114,101,113,117,105,114,101,115,95,102, - 114,111,122,101,110,114,189,0,0,0,254,1,0,0,115,27, - 0,0,0,248,128,0,244,4,4,5,35,244,10,0,5,10, - 208,10,34,160,67,212,4,40,216,11,35,208,4,35,114,22, - 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,240,0,0,0,151,0,100, - 1,125,2,116,0,0,0,0,0,0,0,0,0,106,3,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,124,2,116,4,0,0,0,0,0,0,0,0,171,2,0, - 0,0,0,0,0,1,0,116,7,0,0,0,0,0,0,0, - 0,124,1,124,0,171,2,0,0,0,0,0,0,125,3,124, - 1,116,8,0,0,0,0,0,0,0,0,106,10,0,0,0, + 109,101,46,10,10,32,32,32,32,65,99,113,117,105,114,101, + 47,114,101,108,101,97,115,101,32,105,110,116,101,114,110,97, + 108,108,121,32,116,104,101,32,103,108,111,98,97,108,32,105, + 109,112,111,114,116,32,108,111,99,107,32,116,111,32,112,114, + 111,116,101,99,116,10,32,32,32,32,95,109,111,100,117,108, + 101,95,108,111,99,107,115,46,78,99,2,0,0,0,0,0, + 0,0,0,0,0,0,4,0,0,0,19,0,0,0,243,196, + 0,0,0,151,0,116,0,0,0,0,0,0,0,0,0,106, + 3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,171,0,0,0,0,0,0,0,1,0,9,0,116, + 4,0,0,0,0,0,0,0,0,106,7,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,124,1,171, + 1,0,0,0,0,0,0,124,0,117,0,114,7,116,4,0, + 0,0,0,0,0,0,0,124,1,61,0,116,0,0,0,0, + 0,0,0,0,0,106,9,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,171,0,0,0,0,0,0, + 0,1,0,121,0,35,0,116,0,0,0,0,0,0,0,0, + 0,106,9,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,171,0,0,0,0,0,0,0,1,0,119, + 0,120,3,89,0,119,1,114,2,0,0,0,41,5,218,4, + 95,105,109,112,218,12,97,99,113,117,105,114,101,95,108,111, + 99,107,218,13,95,109,111,100,117,108,101,95,108,111,99,107, + 115,114,76,0,0,0,218,12,114,101,108,101,97,115,101,95, + 108,111,99,107,41,2,114,61,0,0,0,114,26,0,0,0, + 115,2,0,0,0,32,32,114,7,0,0,0,218,2,99,98, + 122,28,95,103,101,116,95,109,111,100,117,108,101,95,108,111, + 99,107,46,60,108,111,99,97,108,115,62,46,99,98,189,1, + 0,0,115,73,0,0,0,128,0,220,16,20,215,16,33,209, + 16,33,212,16,35,240,2,7,17,40,244,8,0,24,37,215, + 23,40,209,23,40,168,20,211,23,46,176,35,209,23,53,220, + 28,41,168,36,208,28,47,228,20,24,215,20,37,209,20,37, + 213,20,39,248,148,68,215,20,37,209,20,37,213,20,39,250, + 115,11,0,0,0,150,30,65,9,0,193,9,22,65,31,3, + 41,10,114,151,0,0,0,114,152,0,0,0,114,153,0,0, + 0,114,73,0,0,0,114,109,0,0,0,114,134,0,0,0, + 114,107,0,0,0,114,52,0,0,0,114,61,0,0,0,114, + 154,0,0,0,41,3,114,26,0,0,0,114,83,0,0,0, + 114,155,0,0,0,115,3,0,0,0,32,32,32,114,7,0, + 0,0,114,147,0,0,0,114,147,0,0,0,170,1,0,0, + 115,156,0,0,0,128,0,244,12,0,5,9,215,4,21,209, + 4,21,212,4,23,240,2,25,5,28,240,2,3,9,24,220, + 19,32,160,20,209,19,38,211,19,40,136,68,240,8,0,12, + 16,136,60,220,15,22,136,127,220,23,39,168,4,211,23,45, + 145,4,228,23,34,160,52,211,23,40,144,4,224,29,33,243, + 0,9,13,40,244,22,0,35,43,167,44,161,44,168,116,176, + 82,211,34,56,140,77,152,36,209,12,31,228,8,12,215,8, + 25,209,8,25,212,8,27,224,11,15,128,75,248,244,49,0, + 16,24,242,0,1,9,24,216,19,23,138,68,240,3,1,9, + 24,251,244,44,0,9,13,215,8,25,209,8,25,213,8,27, + 250,115,41,0,0,0,151,13,65,59,0,164,65,1,66,12, + 0,193,59,11,66,9,3,194,6,2,66,12,0,194,8,1, + 66,9,3,194,9,3,66,12,0,194,12,22,66,34,3,99, + 1,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0, + 3,0,0,0,243,122,0,0,0,151,0,116,1,0,0,0, + 0,0,0,0,0,124,0,171,1,0,0,0,0,0,0,125, + 1,9,0,124,1,106,3,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,171,0,0,0,0,0,0, + 0,1,0,124,1,106,5,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,171,0,0,0,0,0,0, + 0,1,0,121,1,35,0,116,6,0,0,0,0,0,0,0, + 0,36,0,114,3,1,0,89,0,121,1,119,0,120,3,89, + 0,119,1,41,2,122,189,65,99,113,117,105,114,101,115,32, + 116,104,101,110,32,114,101,108,101,97,115,101,115,32,116,104, + 101,32,109,111,100,117,108,101,32,108,111,99,107,32,102,111, + 114,32,97,32,103,105,118,101,110,32,109,111,100,117,108,101, + 32,110,97,109,101,46,10,10,32,32,32,32,84,104,105,115, + 32,105,115,32,117,115,101,100,32,116,111,32,101,110,115,117, + 114,101,32,97,32,109,111,100,117,108,101,32,105,115,32,99, + 111,109,112,108,101,116,101,108,121,32,105,110,105,116,105,97, + 108,105,122,101,100,44,32,105,110,32,116,104,101,10,32,32, + 32,32,101,118,101,110,116,32,105,116,32,105,115,32,98,101, + 105,110,103,32,105,109,112,111,114,116,101,100,32,98,121,32, + 97,110,111,116,104,101,114,32,116,104,114,101,97,100,46,10, + 32,32,32,32,78,41,4,114,147,0,0,0,114,120,0,0, + 0,114,121,0,0,0,114,94,0,0,0,41,2,114,26,0, + 0,0,114,83,0,0,0,115,2,0,0,0,32,32,114,7, + 0,0,0,218,19,95,108,111,99,107,95,117,110,108,111,99, + 107,95,109,111,100,117,108,101,114,157,0,0,0,207,1,0, + 0,115,61,0,0,0,128,0,244,12,0,12,28,152,68,211, + 11,33,128,68,240,2,7,5,23,216,8,12,143,12,137,12, + 140,14,240,12,0,9,13,143,12,137,12,141,14,248,244,11, + 0,12,26,242,0,3,5,13,241,6,0,9,13,240,7,3, + 5,13,250,115,12,0,0,0,141,16,46,0,174,9,58,3, + 185,1,58,3,99,1,0,0,0,0,0,0,0,0,0,0, + 0,5,0,0,0,15,0,0,0,243,18,0,0,0,151,0, + 2,0,124,0,124,1,105,0,124,2,164,1,142,1,83,0, + 41,1,97,46,1,0,0,114,101,109,111,118,101,95,105,109, + 112,111,114,116,108,105,98,95,102,114,97,109,101,115,32,105, + 110,32,105,109,112,111,114,116,46,99,32,119,105,108,108,32, + 97,108,119,97,121,115,32,114,101,109,111,118,101,32,115,101, + 113,117,101,110,99,101,115,10,32,32,32,32,111,102,32,105, + 109,112,111,114,116,108,105,98,32,102,114,97,109,101,115,32, + 116,104,97,116,32,101,110,100,32,119,105,116,104,32,97,32, + 99,97,108,108,32,116,111,32,116,104,105,115,32,102,117,110, + 99,116,105,111,110,10,10,32,32,32,32,85,115,101,32,105, + 116,32,105,110,115,116,101,97,100,32,111,102,32,97,32,110, + 111,114,109,97,108,32,99,97,108,108,32,105,110,32,112,108, + 97,99,101,115,32,119,104,101,114,101,32,105,110,99,108,117, + 100,105,110,103,32,116,104,101,32,105,109,112,111,114,116,108, + 105,98,10,32,32,32,32,102,114,97,109,101,115,32,105,110, + 116,114,111,100,117,99,101,115,32,117,110,119,97,110,116,101, + 100,32,110,111,105,115,101,32,105,110,116,111,32,116,104,101, + 32,116,114,97,99,101,98,97,99,107,32,40,101,46,103,46, + 32,119,104,101,110,32,101,120,101,99,117,116,105,110,103,10, + 32,32,32,32,109,111,100,117,108,101,32,99,111,100,101,41, + 10,32,32,32,32,114,31,0,0,0,41,3,218,1,102,114, + 90,0,0,0,218,4,107,119,100,115,115,3,0,0,0,32, + 32,32,114,7,0,0,0,218,25,95,99,97,108,108,95,119, + 105,116,104,95,102,114,97,109,101,115,95,114,101,109,111,118, + 101,100,114,161,0,0,0,224,1,0,0,115,20,0,0,0, + 128,0,241,16,0,12,13,136,100,208,11,27,144,100,209,11, + 27,208,4,27,114,22,0,0,0,114,138,0,0,0,41,1, + 218,9,118,101,114,98,111,115,105,116,121,99,1,0,0,0, + 0,0,0,0,1,0,0,0,5,0,0,0,7,0,0,0, + 243,188,0,0,0,151,0,116,0,0,0,0,0,0,0,0, + 0,106,2,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,106,4,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,124,1,107,92,0,0,114, + 63,124,0,106,7,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,100,1,171,1,0,0,0,0,0, + 0,115,5,100,2,124,0,122,0,0,0,125,0,116,9,0, + 0,0,0,0,0,0,0,2,0,124,0,106,10,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,124, + 2,142,0,116,0,0,0,0,0,0,0,0,0,106,12,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,172,3,171,2,0,0,0,0,0,0,1,0,121,4,121, + 4,41,5,122,61,80,114,105,110,116,32,116,104,101,32,109, + 101,115,115,97,103,101,32,116,111,32,115,116,100,101,114,114, + 32,105,102,32,45,118,47,80,89,84,72,79,78,86,69,82, + 66,79,83,69,32,105,115,32,116,117,114,110,101,100,32,111, + 110,46,41,2,250,1,35,122,7,105,109,112,111,114,116,32, + 122,2,35,32,41,1,218,4,102,105,108,101,78,41,7,114, + 24,0,0,0,218,5,102,108,97,103,115,218,7,118,101,114, + 98,111,115,101,218,10,115,116,97,114,116,115,119,105,116,104, + 218,5,112,114,105,110,116,218,6,102,111,114,109,97,116,218, + 6,115,116,100,101,114,114,41,3,218,7,109,101,115,115,97, + 103,101,114,162,0,0,0,114,90,0,0,0,115,3,0,0, + 0,32,32,32,114,7,0,0,0,218,16,95,118,101,114,98, + 111,115,101,95,109,101,115,115,97,103,101,114,173,0,0,0, + 235,1,0,0,115,74,0,0,0,128,0,228,7,10,135,121, + 129,121,215,7,24,209,7,24,152,73,210,7,37,216,15,22, + 215,15,33,209,15,33,208,34,50,212,15,51,216,22,26,152, + 87,145,110,136,71,220,8,13,136,110,136,103,143,110,137,110, + 152,100,208,14,35,172,35,175,42,169,42,214,8,53,240,7, + 0,8,38,114,22,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,42,0, + 0,0,135,0,151,0,136,0,102,1,100,1,132,8,125,1, + 116,1,0,0,0,0,0,0,0,0,124,1,137,0,171,2, + 0,0,0,0,0,0,1,0,124,1,83,0,41,2,122,49, + 68,101,99,111,114,97,116,111,114,32,116,111,32,118,101,114, + 105,102,121,32,116,104,101,32,110,97,109,101,100,32,109,111, + 100,117,108,101,32,105,115,32,98,117,105,108,116,45,105,110, + 46,99,2,0,0,0,0,0,0,0,0,0,0,0,4,0, + 0,0,19,0,0,0,243,90,0,0,0,149,1,151,0,124, + 1,116,0,0,0,0,0,0,0,0,0,106,2,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,118, - 0,114,50,116,8,0,0,0,0,0,0,0,0,106,10,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,124,1,25,0,0,0,125,4,116,13,0,0,0,0,0, - 0,0,0,124,3,124,4,171,2,0,0,0,0,0,0,1, - 0,116,8,0,0,0,0,0,0,0,0,106,10,0,0,0, + 1,114,16,116,5,0,0,0,0,0,0,0,0,124,1,155, + 2,100,1,157,2,124,1,172,2,171,2,0,0,0,0,0, + 0,130,1,2,0,137,2,124,0,124,1,171,2,0,0,0, + 0,0,0,83,0,41,3,78,250,25,32,105,115,32,110,111, + 116,32,97,32,98,117,105,108,116,45,105,110,32,109,111,100, + 117,108,101,114,25,0,0,0,41,3,114,24,0,0,0,218, + 20,98,117,105,108,116,105,110,95,109,111,100,117,108,101,95, + 110,97,109,101,115,218,11,73,109,112,111,114,116,69,114,114, + 111,114,169,3,114,44,0,0,0,218,8,102,117,108,108,110, + 97,109,101,218,3,102,120,110,115,3,0,0,0,32,32,128, + 114,7,0,0,0,218,25,95,114,101,113,117,105,114,101,115, + 95,98,117,105,108,116,105,110,95,119,114,97,112,112,101,114, + 122,52,95,114,101,113,117,105,114,101,115,95,98,117,105,108, + 116,105,110,46,60,108,111,99,97,108,115,62,46,95,114,101, + 113,117,105,114,101,115,95,98,117,105,108,116,105,110,95,119, + 114,97,112,112,101,114,245,1,0,0,115,56,0,0,0,248, + 128,0,216,11,19,156,51,215,27,51,209,27,51,209,11,51, + 220,18,29,160,24,160,12,208,44,69,208,30,70,216,35,43, + 244,3,1,19,45,240,0,1,13,45,225,15,18,144,52,152, + 24,211,15,34,208,8,34,114,22,0,0,0,169,1,114,21, + 0,0,0,41,2,114,181,0,0,0,114,182,0,0,0,115, + 2,0,0,0,96,32,114,7,0,0,0,218,17,95,114,101, + 113,117,105,114,101,115,95,98,117,105,108,116,105,110,114,184, + 0,0,0,243,1,0,0,115,27,0,0,0,248,128,0,244, + 4,4,5,35,244,10,0,5,10,208,10,35,160,83,212,4, + 41,216,11,36,208,4,36,114,22,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,42,0,0,0,135,0,151,0,136,0,102,1,100,1, + 132,8,125,1,116,1,0,0,0,0,0,0,0,0,124,1, + 137,0,171,2,0,0,0,0,0,0,1,0,124,1,83,0, + 41,2,122,47,68,101,99,111,114,97,116,111,114,32,116,111, + 32,118,101,114,105,102,121,32,116,104,101,32,110,97,109,101, + 100,32,109,111,100,117,108,101,32,105,115,32,102,114,111,122, + 101,110,46,99,2,0,0,0,0,0,0,0,0,0,0,0, + 4,0,0,0,19,0,0,0,243,96,0,0,0,149,1,151, + 0,116,0,0,0,0,0,0,0,0,0,106,3,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,124, - 1,25,0,0,0,83,0,116,15,0,0,0,0,0,0,0, - 0,124,3,171,1,0,0,0,0,0,0,83,0,41,2,122, - 130,76,111,97,100,32,116,104,101,32,115,112,101,99,105,102, - 105,101,100,32,109,111,100,117,108,101,32,105,110,116,111,32, - 115,121,115,46,109,111,100,117,108,101,115,32,97,110,100,32, - 114,101,116,117,114,110,32,105,116,46,10,10,32,32,32,32, - 84,104,105,115,32,109,101,116,104,111,100,32,105,115,32,100, - 101,112,114,101,99,97,116,101,100,46,32,32,85,115,101,32, - 108,111,97,100,101,114,46,101,120,101,99,95,109,111,100,117, - 108,101,40,41,32,105,110,115,116,101,97,100,46,10,10,32, - 32,32,32,122,103,116,104,101,32,108,111,97,100,95,109,111, - 100,117,108,101,40,41,32,109,101,116,104,111,100,32,105,115, - 32,100,101,112,114,101,99,97,116,101,100,32,97,110,100,32, - 115,108,97,116,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, - 50,59,32,117,115,101,32,101,120,101,99,95,109,111,100,117, - 108,101,40,41,32,105,110,115,116,101,97,100,41,8,218,9, - 95,119,97,114,110,105,110,103,115,218,4,119,97,114,110,218, - 18,68,101,112,114,101,99,97,116,105,111,110,87,97,114,110, - 105,110,103,218,16,115,112,101,99,95,102,114,111,109,95,108, - 111,97,100,101,114,114,24,0,0,0,218,7,109,111,100,117, - 108,101,115,218,5,95,101,120,101,99,218,5,95,108,111,97, - 100,41,5,114,44,0,0,0,114,180,0,0,0,218,3,109, - 115,103,218,4,115,112,101,99,218,6,109,111,100,117,108,101, - 115,5,0,0,0,32,32,32,32,32,114,7,0,0,0,218, - 17,95,108,111,97,100,95,109,111,100,117,108,101,95,115,104, - 105,109,114,201,0,0,0,10,2,0,0,115,97,0,0,0, - 128,0,240,12,1,12,51,128,67,228,4,13,135,78,129,78, - 144,51,212,24,42,212,4,43,220,11,27,152,72,160,100,211, - 11,43,128,68,216,7,15,148,51,151,59,145,59,209,7,30, - 220,17,20,151,27,145,27,152,88,209,17,38,136,6,220,8, - 13,136,100,144,70,212,8,27,220,15,18,143,123,137,123,152, - 56,209,15,36,208,8,36,228,15,20,144,84,139,123,208,8, - 26,114,22,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,252,0,0,0, - 151,0,116,1,0,0,0,0,0,0,0,0,124,0,100,1, - 100,2,171,3,0,0,0,0,0,0,125,1,116,1,0,0, - 0,0,0,0,0,0,124,0,100,3,100,2,171,3,0,0, - 0,0,0,0,120,1,125,2,114,11,116,3,0,0,0,0, - 0,0,0,0,124,2,171,1,0,0,0,0,0,0,83,0, - 9,0,124,0,106,4,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,125,3,9,0,124,0,106,8, + 1,171,1,0,0,0,0,0,0,115,16,116,5,0,0,0, + 0,0,0,0,0,124,1,155,2,100,1,157,2,124,1,172, + 2,171,2,0,0,0,0,0,0,130,1,2,0,137,2,124, + 0,124,1,171,2,0,0,0,0,0,0,83,0,41,3,78, + 122,23,32,105,115,32,110,111,116,32,97,32,102,114,111,122, + 101,110,32,109,111,100,117,108,101,114,25,0,0,0,41,3, + 114,151,0,0,0,218,9,105,115,95,102,114,111,122,101,110, + 114,178,0,0,0,114,179,0,0,0,115,3,0,0,0,32, + 32,128,114,7,0,0,0,218,24,95,114,101,113,117,105,114, + 101,115,95,102,114,111,122,101,110,95,119,114,97,112,112,101, + 114,122,50,95,114,101,113,117,105,114,101,115,95,102,114,111, + 122,101,110,46,60,108,111,99,97,108,115,62,46,95,114,101, + 113,117,105,114,101,115,95,102,114,111,122,101,110,95,119,114, + 97,112,112,101,114,0,2,0,0,115,54,0,0,0,248,128, + 0,220,15,19,143,126,137,126,152,104,212,15,39,220,18,29, + 160,24,160,12,208,44,67,208,30,68,216,35,43,244,3,1, + 19,45,240,0,1,13,45,225,15,18,144,52,152,24,211,15, + 34,208,8,34,114,22,0,0,0,114,183,0,0,0,41,2, + 114,181,0,0,0,114,188,0,0,0,115,2,0,0,0,96, + 32,114,7,0,0,0,218,16,95,114,101,113,117,105,114,101, + 115,95,102,114,111,122,101,110,114,189,0,0,0,254,1,0, + 0,115,27,0,0,0,248,128,0,244,4,4,5,35,244,10, + 0,5,10,208,10,34,160,67,212,4,40,216,11,35,208,4, + 35,114,22,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,240,0,0,0, + 151,0,100,1,125,2,116,0,0,0,0,0,0,0,0,0, + 106,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,124,2,116,4,0,0,0,0,0,0,0,0, + 171,2,0,0,0,0,0,0,1,0,116,7,0,0,0,0, + 0,0,0,0,124,1,124,0,171,2,0,0,0,0,0,0, + 125,3,124,1,116,8,0,0,0,0,0,0,0,0,106,10, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,125,4,100,5,124,3,155,2,100,6,124,4,155,2, - 100,7,157,5,83,0,35,0,116,6,0,0,0,0,0,0, - 0,0,36,0,114,5,1,0,100,4,125,3,89,0,140,35, - 119,0,120,3,89,0,119,1,35,0,116,6,0,0,0,0, - 0,0,0,0,36,0,114,22,1,0,124,1,128,8,100,5, - 124,3,155,2,100,7,157,3,99,2,89,0,83,0,100,5, - 124,3,155,2,100,8,124,1,155,2,100,9,157,5,99,2, - 89,0,83,0,119,0,120,3,89,0,119,1,41,10,122,44, - 84,104,101,32,105,109,112,108,101,109,101,110,116,97,116,105, - 111,110,32,111,102,32,77,111,100,117,108,101,84,121,112,101, - 46,95,95,114,101,112,114,95,95,40,41,46,218,10,95,95, - 108,111,97,100,101,114,95,95,78,218,8,95,95,115,112,101, - 99,95,95,250,1,63,250,8,60,109,111,100,117,108,101,32, - 250,6,32,102,114,111,109,32,250,1,62,250,2,32,40,250, - 2,41,62,41,5,114,15,0,0,0,218,22,95,109,111,100, - 117,108,101,95,114,101,112,114,95,102,114,111,109,95,115,112, - 101,99,114,11,0,0,0,114,4,0,0,0,218,8,95,95, - 102,105,108,101,95,95,41,5,114,200,0,0,0,218,6,108, - 111,97,100,101,114,114,199,0,0,0,114,26,0,0,0,218, - 8,102,105,108,101,110,97,109,101,115,5,0,0,0,32,32, - 32,32,32,114,7,0,0,0,218,12,95,109,111,100,117,108, - 101,95,114,101,112,114,114,215,0,0,0,29,2,0,0,115, - 177,0,0,0,128,0,228,13,20,144,86,152,92,168,52,211, - 13,48,128,70,220,15,22,144,118,152,122,168,52,211,15,48, - 208,7,48,128,116,208,7,48,220,15,37,160,100,211,15,43, - 208,8,43,240,4,3,5,19,216,15,21,143,127,137,127,136, - 4,240,6,8,5,54,216,19,25,151,63,145,63,136,8,240, - 14,0,18,26,152,36,152,24,160,22,168,8,160,124,176,49, - 208,15,53,208,8,53,248,244,21,0,12,26,242,0,1,5, - 19,216,15,18,138,4,240,3,1,5,19,251,244,8,0,12, - 26,242,0,4,5,53,216,11,17,136,62,216,21,29,152,100, - 152,88,160,81,208,19,39,210,12,39,224,21,29,152,100,152, - 88,160,82,168,6,160,122,176,18,208,19,52,210,12,52,240, - 9,4,5,53,250,115,40,0,0,0,169,12,65,11,0,182, - 12,65,28,0,193,11,11,65,25,3,193,24,1,65,25,3, - 193,28,17,65,59,3,193,47,9,65,59,3,193,58,1,65, - 59,3,99,0,0,0,0,0,0,0,0,0,0,0,0,4, - 0,0,0,0,0,0,0,243,164,0,0,0,151,0,101,0, - 90,1,100,0,90,2,100,1,90,3,100,2,100,2,100,2, - 100,3,156,3,100,4,132,2,90,4,100,5,132,0,90,5, - 100,6,132,0,90,6,101,7,100,7,132,0,171,0,0,0, - 0,0,0,0,90,8,101,8,106,18,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,100,8,132,0, - 171,0,0,0,0,0,0,0,90,8,101,7,100,9,132,0, - 171,0,0,0,0,0,0,0,90,10,101,7,100,10,132,0, - 171,0,0,0,0,0,0,0,90,11,101,11,106,18,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 100,11,132,0,171,0,0,0,0,0,0,0,90,11,121,2, - 41,12,218,10,77,111,100,117,108,101,83,112,101,99,97,208, - 5,0,0,84,104,101,32,115,112,101,99,105,102,105,99,97, - 116,105,111,110,32,102,111,114,32,97,32,109,111,100,117,108, - 101,44,32,117,115,101,100,32,102,111,114,32,108,111,97,100, - 105,110,103,46,10,10,32,32,32,32,65,32,109,111,100,117, - 108,101,39,115,32,115,112,101,99,32,105,115,32,116,104,101, - 32,115,111,117,114,99,101,32,102,111,114,32,105,110,102,111, - 114,109,97,116,105,111,110,32,97,98,111,117,116,32,116,104, - 101,32,109,111,100,117,108,101,46,32,32,70,111,114,10,32, - 32,32,32,100,97,116,97,32,97,115,115,111,99,105,97,116, - 101,100,32,119,105,116,104,32,116,104,101,32,109,111,100,117, - 108,101,44,32,105,110,99,108,117,100,105,110,103,32,115,111, - 117,114,99,101,44,32,117,115,101,32,116,104,101,32,115,112, - 101,99,39,115,10,32,32,32,32,108,111,97,100,101,114,46, - 10,10,32,32,32,32,96,110,97,109,101,96,32,105,115,32, - 116,104,101,32,97,98,115,111,108,117,116,101,32,110,97,109, - 101,32,111,102,32,116,104,101,32,109,111,100,117,108,101,46, - 32,32,96,108,111,97,100,101,114,96,32,105,115,32,116,104, - 101,32,108,111,97,100,101,114,10,32,32,32,32,116,111,32, - 117,115,101,32,119,104,101,110,32,108,111,97,100,105,110,103, - 32,116,104,101,32,109,111,100,117,108,101,46,32,32,96,112, - 97,114,101,110,116,96,32,105,115,32,116,104,101,32,110,97, - 109,101,32,111,102,32,116,104,101,10,32,32,32,32,112,97, - 99,107,97,103,101,32,116,104,101,32,109,111,100,117,108,101, - 32,105,115,32,105,110,46,32,32,84,104,101,32,112,97,114, - 101,110,116,32,105,115,32,100,101,114,105,118,101,100,32,102, - 114,111,109,32,116,104,101,32,110,97,109,101,46,10,10,32, - 32,32,32,96,105,115,95,112,97,99,107,97,103,101,96,32, - 100,101,116,101,114,109,105,110,101,115,32,105,102,32,116,104, - 101,32,109,111,100,117,108,101,32,105,115,32,99,111,110,115, - 105,100,101,114,101,100,32,97,32,112,97,99,107,97,103,101, - 32,111,114,10,32,32,32,32,110,111,116,46,32,32,79,110, - 32,109,111,100,117,108,101,115,32,116,104,105,115,32,105,115, - 32,114,101,102,108,101,99,116,101,100,32,98,121,32,116,104, - 101,32,96,95,95,112,97,116,104,95,95,96,32,97,116,116, - 114,105,98,117,116,101,46,10,10,32,32,32,32,96,111,114, - 105,103,105,110,96,32,105,115,32,116,104,101,32,115,112,101, - 99,105,102,105,99,32,108,111,99,97,116,105,111,110,32,117, - 115,101,100,32,98,121,32,116,104,101,32,108,111,97,100,101, - 114,32,102,114,111,109,32,119,104,105,99,104,32,116,111,10, - 32,32,32,32,108,111,97,100,32,116,104,101,32,109,111,100, - 117,108,101,44,32,105,102,32,116,104,97,116,32,105,110,102, - 111,114,109,97,116,105,111,110,32,105,115,32,97,118,97,105, - 108,97,98,108,101,46,32,32,87,104,101,110,32,102,105,108, - 101,110,97,109,101,32,105,115,10,32,32,32,32,115,101,116, - 44,32,111,114,105,103,105,110,32,119,105,108,108,32,109,97, - 116,99,104,46,10,10,32,32,32,32,96,104,97,115,95,108, - 111,99,97,116,105,111,110,96,32,105,110,100,105,99,97,116, - 101,115,32,116,104,97,116,32,97,32,115,112,101,99,39,115, - 32,34,111,114,105,103,105,110,34,32,114,101,102,108,101,99, - 116,115,32,97,32,108,111,99,97,116,105,111,110,46,10,32, - 32,32,32,87,104,101,110,32,116,104,105,115,32,105,115,32, - 84,114,117,101,44,32,96,95,95,102,105,108,101,95,95,96, - 32,97,116,116,114,105,98,117,116,101,32,111,102,32,116,104, - 101,32,109,111,100,117,108,101,32,105,115,32,115,101,116,46, - 10,10,32,32,32,32,96,99,97,99,104,101,100,96,32,105, - 115,32,116,104,101,32,108,111,99,97,116,105,111,110,32,111, - 102,32,116,104,101,32,99,97,99,104,101,100,32,98,121,116, - 101,99,111,100,101,32,102,105,108,101,44,32,105,102,32,97, - 110,121,46,32,32,73,116,10,32,32,32,32,99,111,114,114, - 101,115,112,111,110,100,115,32,116,111,32,116,104,101,32,96, - 95,95,99,97,99,104,101,100,95,95,96,32,97,116,116,114, - 105,98,117,116,101,46,10,10,32,32,32,32,96,115,117,98, + 0,0,118,0,114,50,116,8,0,0,0,0,0,0,0,0, + 106,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,124,1,25,0,0,0,125,4,116,13,0,0, + 0,0,0,0,0,0,124,3,124,4,171,2,0,0,0,0, + 0,0,1,0,116,8,0,0,0,0,0,0,0,0,106,10, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,124,1,25,0,0,0,83,0,116,15,0,0,0,0, + 0,0,0,0,124,3,171,1,0,0,0,0,0,0,83,0, + 41,2,122,130,76,111,97,100,32,116,104,101,32,115,112,101, + 99,105,102,105,101,100,32,109,111,100,117,108,101,32,105,110, + 116,111,32,115,121,115,46,109,111,100,117,108,101,115,32,97, + 110,100,32,114,101,116,117,114,110,32,105,116,46,10,10,32, + 32,32,32,84,104,105,115,32,109,101,116,104,111,100,32,105, + 115,32,100,101,112,114,101,99,97,116,101,100,46,32,32,85, + 115,101,32,108,111,97,100,101,114,46,101,120,101,99,95,109, + 111,100,117,108,101,40,41,32,105,110,115,116,101,97,100,46, + 10,10,32,32,32,32,122,103,116,104,101,32,108,111,97,100, + 95,109,111,100,117,108,101,40,41,32,109,101,116,104,111,100, + 32,105,115,32,100,101,112,114,101,99,97,116,101,100,32,97, + 110,100,32,115,108,97,116,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,50,59,32,117,115,101,32,101,120,101,99,95,109, + 111,100,117,108,101,40,41,32,105,110,115,116,101,97,100,41, + 8,218,9,95,119,97,114,110,105,110,103,115,218,4,119,97, + 114,110,218,18,68,101,112,114,101,99,97,116,105,111,110,87, + 97,114,110,105,110,103,218,16,115,112,101,99,95,102,114,111, + 109,95,108,111,97,100,101,114,114,24,0,0,0,218,7,109, + 111,100,117,108,101,115,218,5,95,101,120,101,99,218,5,95, + 108,111,97,100,41,5,114,44,0,0,0,114,180,0,0,0, + 218,3,109,115,103,218,4,115,112,101,99,218,6,109,111,100, + 117,108,101,115,5,0,0,0,32,32,32,32,32,114,7,0, + 0,0,218,17,95,108,111,97,100,95,109,111,100,117,108,101, + 95,115,104,105,109,114,201,0,0,0,10,2,0,0,115,97, + 0,0,0,128,0,240,12,1,12,51,128,67,228,4,13,135, + 78,129,78,144,51,212,24,42,212,4,43,220,11,27,152,72, + 160,100,211,11,43,128,68,216,7,15,148,51,151,59,145,59, + 209,7,30,220,17,20,151,27,145,27,152,88,209,17,38,136, + 6,220,8,13,136,100,144,70,212,8,27,220,15,18,143,123, + 137,123,152,56,209,15,36,208,8,36,228,15,20,144,84,139, + 123,208,8,26,114,22,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,252, + 0,0,0,151,0,116,1,0,0,0,0,0,0,0,0,124, + 0,100,1,100,2,171,3,0,0,0,0,0,0,125,1,116, + 1,0,0,0,0,0,0,0,0,124,0,100,3,100,2,171, + 3,0,0,0,0,0,0,120,1,125,2,114,11,116,3,0, + 0,0,0,0,0,0,0,124,2,171,1,0,0,0,0,0, + 0,83,0,9,0,124,0,106,4,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,125,3,9,0,124, + 0,106,8,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,125,4,100,5,124,3,155,2,100,6,124, + 4,155,2,100,7,157,5,83,0,35,0,116,6,0,0,0, + 0,0,0,0,0,36,0,114,5,1,0,100,4,125,3,89, + 0,140,35,119,0,120,3,89,0,119,1,35,0,116,6,0, + 0,0,0,0,0,0,0,36,0,114,22,1,0,124,1,128, + 8,100,5,124,3,155,2,100,7,157,3,99,2,89,0,83, + 0,100,5,124,3,155,2,100,8,124,1,155,2,100,9,157, + 5,99,2,89,0,83,0,119,0,120,3,89,0,119,1,41, + 10,122,44,84,104,101,32,105,109,112,108,101,109,101,110,116, + 97,116,105,111,110,32,111,102,32,77,111,100,117,108,101,84, + 121,112,101,46,95,95,114,101,112,114,95,95,40,41,46,218, + 10,95,95,108,111,97,100,101,114,95,95,78,218,8,95,95, + 115,112,101,99,95,95,250,1,63,250,8,60,109,111,100,117, + 108,101,32,250,6,32,102,114,111,109,32,250,1,62,250,2, + 32,40,250,2,41,62,41,5,114,15,0,0,0,218,22,95, + 109,111,100,117,108,101,95,114,101,112,114,95,102,114,111,109, + 95,115,112,101,99,114,11,0,0,0,114,4,0,0,0,218, + 8,95,95,102,105,108,101,95,95,41,5,114,200,0,0,0, + 218,6,108,111,97,100,101,114,114,199,0,0,0,114,26,0, + 0,0,218,8,102,105,108,101,110,97,109,101,115,5,0,0, + 0,32,32,32,32,32,114,7,0,0,0,218,12,95,109,111, + 100,117,108,101,95,114,101,112,114,114,215,0,0,0,29,2, + 0,0,115,177,0,0,0,128,0,228,13,20,144,86,152,92, + 168,52,211,13,48,128,70,220,15,22,144,118,152,122,168,52, + 211,15,48,208,7,48,128,116,208,7,48,220,15,37,160,100, + 211,15,43,208,8,43,240,4,3,5,19,216,15,21,143,127, + 137,127,136,4,240,6,8,5,54,216,19,25,151,63,145,63, + 136,8,240,14,0,18,26,152,36,152,24,160,22,168,8,160, + 124,176,49,208,15,53,208,8,53,248,244,21,0,12,26,242, + 0,1,5,19,216,15,18,138,4,240,3,1,5,19,251,244, + 8,0,12,26,242,0,4,5,53,216,11,17,136,62,216,21, + 29,152,100,152,88,160,81,208,19,39,210,12,39,224,21,29, + 152,100,152,88,160,82,168,6,160,122,176,18,208,19,52,210, + 12,52,240,9,4,5,53,250,115,40,0,0,0,169,12,65, + 11,0,182,12,65,28,0,193,11,11,65,25,3,193,24,1, + 65,25,3,193,28,17,65,59,3,193,47,9,65,59,3,193, + 58,1,65,59,3,99,0,0,0,0,0,0,0,0,0,0, + 0,0,4,0,0,0,0,0,0,0,243,164,0,0,0,151, + 0,101,0,90,1,100,0,90,2,100,1,90,3,100,2,100, + 2,100,2,100,3,156,3,100,4,132,2,90,4,100,5,132, + 0,90,5,100,6,132,0,90,6,101,7,100,7,132,0,171, + 0,0,0,0,0,0,0,90,8,101,8,106,18,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,100, + 8,132,0,171,0,0,0,0,0,0,0,90,8,101,7,100, + 9,132,0,171,0,0,0,0,0,0,0,90,10,101,7,100, + 10,132,0,171,0,0,0,0,0,0,0,90,11,101,11,106, + 18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,100,11,132,0,171,0,0,0,0,0,0,0,90, + 11,121,2,41,12,218,10,77,111,100,117,108,101,83,112,101, + 99,97,208,5,0,0,84,104,101,32,115,112,101,99,105,102, + 105,99,97,116,105,111,110,32,102,111,114,32,97,32,109,111, + 100,117,108,101,44,32,117,115,101,100,32,102,111,114,32,108, + 111,97,100,105,110,103,46,10,10,32,32,32,32,65,32,109, + 111,100,117,108,101,39,115,32,115,112,101,99,32,105,115,32, + 116,104,101,32,115,111,117,114,99,101,32,102,111,114,32,105, + 110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116, + 32,116,104,101,32,109,111,100,117,108,101,46,32,32,70,111, + 114,10,32,32,32,32,100,97,116,97,32,97,115,115,111,99, + 105,97,116,101,100,32,119,105,116,104,32,116,104,101,32,109, + 111,100,117,108,101,44,32,105,110,99,108,117,100,105,110,103, + 32,115,111,117,114,99,101,44,32,117,115,101,32,116,104,101, + 32,115,112,101,99,39,115,10,32,32,32,32,108,111,97,100, + 101,114,46,10,10,32,32,32,32,96,110,97,109,101,96,32, + 105,115,32,116,104,101,32,97,98,115,111,108,117,116,101,32, + 110,97,109,101,32,111,102,32,116,104,101,32,109,111,100,117, + 108,101,46,32,32,96,108,111,97,100,101,114,96,32,105,115, + 32,116,104,101,32,108,111,97,100,101,114,10,32,32,32,32, + 116,111,32,117,115,101,32,119,104,101,110,32,108,111,97,100, + 105,110,103,32,116,104,101,32,109,111,100,117,108,101,46,32, + 32,96,112,97,114,101,110,116,96,32,105,115,32,116,104,101, + 32,110,97,109,101,32,111,102,32,116,104,101,10,32,32,32, + 32,112,97,99,107,97,103,101,32,116,104,101,32,109,111,100, + 117,108,101,32,105,115,32,105,110,46,32,32,84,104,101,32, + 112,97,114,101,110,116,32,105,115,32,100,101,114,105,118,101, + 100,32,102,114,111,109,32,116,104,101,32,110,97,109,101,46, + 10,10,32,32,32,32,96,105,115,95,112,97,99,107,97,103, + 101,96,32,100,101,116,101,114,109,105,110,101,115,32,105,102, + 32,116,104,101,32,109,111,100,117,108,101,32,105,115,32,99, + 111,110,115,105,100,101,114,101,100,32,97,32,112,97,99,107, + 97,103,101,32,111,114,10,32,32,32,32,110,111,116,46,32, + 32,79,110,32,109,111,100,117,108,101,115,32,116,104,105,115, + 32,105,115,32,114,101,102,108,101,99,116,101,100,32,98,121, + 32,116,104,101,32,96,95,95,112,97,116,104,95,95,96,32, + 97,116,116,114,105,98,117,116,101,46,10,10,32,32,32,32, + 96,111,114,105,103,105,110,96,32,105,115,32,116,104,101,32, + 115,112,101,99,105,102,105,99,32,108,111,99,97,116,105,111, + 110,32,117,115,101,100,32,98,121,32,116,104,101,32,108,111, + 97,100,101,114,32,102,114,111,109,32,119,104,105,99,104,32, + 116,111,10,32,32,32,32,108,111,97,100,32,116,104,101,32, + 109,111,100,117,108,101,44,32,105,102,32,116,104,97,116,32, + 105,110,102,111,114,109,97,116,105,111,110,32,105,115,32,97, + 118,97,105,108,97,98,108,101,46,32,32,87,104,101,110,32, + 102,105,108,101,110,97,109,101,32,105,115,10,32,32,32,32, + 115,101,116,44,32,111,114,105,103,105,110,32,119,105,108,108, + 32,109,97,116,99,104,46,10,10,32,32,32,32,96,104,97, + 115,95,108,111,99,97,116,105,111,110,96,32,105,110,100,105, + 99,97,116,101,115,32,116,104,97,116,32,97,32,115,112,101, + 99,39,115,32,34,111,114,105,103,105,110,34,32,114,101,102, + 108,101,99,116,115,32,97,32,108,111,99,97,116,105,111,110, + 46,10,32,32,32,32,87,104,101,110,32,116,104,105,115,32, + 105,115,32,84,114,117,101,44,32,96,95,95,102,105,108,101, + 95,95,96,32,97,116,116,114,105,98,117,116,101,32,111,102, + 32,116,104,101,32,109,111,100,117,108,101,32,105,115,32,115, + 101,116,46,10,10,32,32,32,32,96,99,97,99,104,101,100, + 96,32,105,115,32,116,104,101,32,108,111,99,97,116,105,111, + 110,32,111,102,32,116,104,101,32,99,97,99,104,101,100,32, + 98,121,116,101,99,111,100,101,32,102,105,108,101,44,32,105, + 102,32,97,110,121,46,32,32,73,116,10,32,32,32,32,99, + 111,114,114,101,115,112,111,110,100,115,32,116,111,32,116,104, + 101,32,96,95,95,99,97,99,104,101,100,95,95,96,32,97, + 116,116,114,105,98,117,116,101,46,10,10,32,32,32,32,96, + 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,96,32,105,115,32,116, + 104,101,32,115,101,113,117,101,110,99,101,32,111,102,32,112, + 97,116,104,32,101,110,116,114,105,101,115,32,116,111,10,32, + 32,32,32,115,101,97,114,99,104,32,119,104,101,110,32,105, + 109,112,111,114,116,105,110,103,32,115,117,98,109,111,100,117, + 108,101,115,46,32,32,73,102,32,115,101,116,44,32,105,115, + 95,112,97,99,107,97,103,101,32,115,104,111,117,108,100,32, + 98,101,10,32,32,32,32,84,114,117,101,45,45,97,110,100, + 32,70,97,108,115,101,32,111,116,104,101,114,119,105,115,101, + 46,10,10,32,32,32,32,80,97,99,107,97,103,101,115,32, + 97,114,101,32,115,105,109,112,108,121,32,109,111,100,117,108, + 101,115,32,116,104,97,116,32,40,109,97,121,41,32,104,97, + 118,101,32,115,117,98,109,111,100,117,108,101,115,46,32,32, + 73,102,32,97,32,115,112,101,99,10,32,32,32,32,104,97, + 115,32,97,32,110,111,110,45,78,111,110,101,32,118,97,108, + 117,101,32,105,110,32,96,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,96,44,32,116,104,101,32,105,109,112,111,114,116,10,32, + 32,32,32,115,121,115,116,101,109,32,119,105,108,108,32,99, + 111,110,115,105,100,101,114,32,109,111,100,117,108,101,115,32, + 108,111,97,100,101,100,32,102,114,111,109,32,116,104,101,32, + 115,112,101,99,32,97,115,32,112,97,99,107,97,103,101,115, + 46,10,10,32,32,32,32,79,110,108,121,32,102,105,110,100, + 101,114,115,32,40,115,101,101,32,105,109,112,111,114,116,108, + 105,98,46,97,98,99,46,77,101,116,97,80,97,116,104,70, + 105,110,100,101,114,32,97,110,100,10,32,32,32,32,105,109, + 112,111,114,116,108,105,98,46,97,98,99,46,80,97,116,104, + 69,110,116,114,121,70,105,110,100,101,114,41,32,115,104,111, + 117,108,100,32,109,111,100,105,102,121,32,77,111,100,117,108, + 101,83,112,101,99,32,105,110,115,116,97,110,99,101,115,46, + 10,10,32,32,32,32,78,41,3,218,6,111,114,105,103,105, + 110,218,12,108,111,97,100,101,114,95,115,116,97,116,101,218, + 10,105,115,95,112,97,99,107,97,103,101,99,3,0,0,0, + 0,0,0,0,3,0,0,0,2,0,0,0,3,0,0,0, + 243,124,0,0,0,151,0,124,1,124,0,95,0,0,0,0, + 0,0,0,0,0,124,2,124,0,95,1,0,0,0,0,0, + 0,0,0,124,3,124,0,95,2,0,0,0,0,0,0,0, + 0,124,4,124,0,95,3,0,0,0,0,0,0,0,0,124, + 5,114,2,103,0,110,1,100,0,124,0,95,4,0,0,0, + 0,0,0,0,0,103,0,124,0,95,5,0,0,0,0,0, + 0,0,0,100,1,124,0,95,6,0,0,0,0,0,0,0, + 0,100,0,124,0,95,7,0,0,0,0,0,0,0,0,121, + 0,169,2,78,70,41,8,114,26,0,0,0,114,213,0,0, + 0,114,218,0,0,0,114,219,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,96,32,105,115,32,116,104,101,32, - 115,101,113,117,101,110,99,101,32,111,102,32,112,97,116,104, - 32,101,110,116,114,105,101,115,32,116,111,10,32,32,32,32, - 115,101,97,114,99,104,32,119,104,101,110,32,105,109,112,111, - 114,116,105,110,103,32,115,117,98,109,111,100,117,108,101,115, - 46,32,32,73,102,32,115,101,116,44,32,105,115,95,112,97, - 99,107,97,103,101,32,115,104,111,117,108,100,32,98,101,10, - 32,32,32,32,84,114,117,101,45,45,97,110,100,32,70,97, - 108,115,101,32,111,116,104,101,114,119,105,115,101,46,10,10, - 32,32,32,32,80,97,99,107,97,103,101,115,32,97,114,101, - 32,115,105,109,112,108,121,32,109,111,100,117,108,101,115,32, - 116,104,97,116,32,40,109,97,121,41,32,104,97,118,101,32, - 115,117,98,109,111,100,117,108,101,115,46,32,32,73,102,32, - 97,32,115,112,101,99,10,32,32,32,32,104,97,115,32,97, - 32,110,111,110,45,78,111,110,101,32,118,97,108,117,101,32, - 105,110,32,96,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,96,44, - 32,116,104,101,32,105,109,112,111,114,116,10,32,32,32,32, - 115,121,115,116,101,109,32,119,105,108,108,32,99,111,110,115, - 105,100,101,114,32,109,111,100,117,108,101,115,32,108,111,97, - 100,101,100,32,102,114,111,109,32,116,104,101,32,115,112,101, - 99,32,97,115,32,112,97,99,107,97,103,101,115,46,10,10, - 32,32,32,32,79,110,108,121,32,102,105,110,100,101,114,115, - 32,40,115,101,101,32,105,109,112,111,114,116,108,105,98,46, - 97,98,99,46,77,101,116,97,80,97,116,104,70,105,110,100, - 101,114,32,97,110,100,10,32,32,32,32,105,109,112,111,114, - 116,108,105,98,46,97,98,99,46,80,97,116,104,69,110,116, - 114,121,70,105,110,100,101,114,41,32,115,104,111,117,108,100, - 32,109,111,100,105,102,121,32,77,111,100,117,108,101,83,112, - 101,99,32,105,110,115,116,97,110,99,101,115,46,10,10,32, - 32,32,32,78,41,3,218,6,111,114,105,103,105,110,218,12, - 108,111,97,100,101,114,95,115,116,97,116,101,218,10,105,115, - 95,112,97,99,107,97,103,101,99,3,0,0,0,0,0,0, - 0,3,0,0,0,2,0,0,0,3,0,0,0,243,124,0, - 0,0,151,0,124,1,124,0,95,0,0,0,0,0,0,0, - 0,0,124,2,124,0,95,1,0,0,0,0,0,0,0,0, - 124,3,124,0,95,2,0,0,0,0,0,0,0,0,124,4, - 124,0,95,3,0,0,0,0,0,0,0,0,124,5,114,2, - 103,0,110,1,100,0,124,0,95,4,0,0,0,0,0,0, - 0,0,103,0,124,0,95,5,0,0,0,0,0,0,0,0, - 100,1,124,0,95,6,0,0,0,0,0,0,0,0,100,0, - 124,0,95,7,0,0,0,0,0,0,0,0,121,0,169,2, - 78,70,41,8,114,26,0,0,0,114,213,0,0,0,114,218, - 0,0,0,114,219,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,25,95,117,110,105,110,105,116,105,97,108, - 105,122,101,100,95,115,117,98,109,111,100,117,108,101,115,218, - 13,95,115,101,116,95,102,105,108,101,97,116,116,114,218,7, - 95,99,97,99,104,101,100,41,6,114,44,0,0,0,114,26, - 0,0,0,114,213,0,0,0,114,218,0,0,0,114,219,0, - 0,0,114,220,0,0,0,115,6,0,0,0,32,32,32,32, - 32,32,114,7,0,0,0,114,47,0,0,0,122,19,77,111, - 100,117,108,101,83,112,101,99,46,95,95,105,110,105,116,95, - 95,87,2,0,0,115,68,0,0,0,128,0,224,20,24,136, - 4,140,9,216,22,28,136,4,140,11,216,22,28,136,4,140, - 11,216,28,40,136,4,212,8,25,217,48,58,169,34,192,4, - 136,4,212,8,39,216,41,43,136,4,212,8,38,240,6,0, - 30,35,136,4,212,8,26,216,23,27,136,4,141,12,114,22, - 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,60,1,0,0,151,0,100, - 1,124,0,106,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,155,2,157,2,100,2,124,0,106, - 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,155,2,157,2,103,2,125,1,124,0,106,4,0, + 99,97,116,105,111,110,115,218,25,95,117,110,105,110,105,116, + 105,97,108,105,122,101,100,95,115,117,98,109,111,100,117,108, + 101,115,218,13,95,115,101,116,95,102,105,108,101,97,116,116, + 114,218,7,95,99,97,99,104,101,100,41,6,114,44,0,0, + 0,114,26,0,0,0,114,213,0,0,0,114,218,0,0,0, + 114,219,0,0,0,114,220,0,0,0,115,6,0,0,0,32, + 32,32,32,32,32,114,7,0,0,0,114,47,0,0,0,122, + 19,77,111,100,117,108,101,83,112,101,99,46,95,95,105,110, + 105,116,95,95,87,2,0,0,115,68,0,0,0,128,0,224, + 20,24,136,4,140,9,216,22,28,136,4,140,11,216,22,28, + 136,4,140,11,216,28,40,136,4,212,8,25,217,48,58,169, + 34,192,4,136,4,212,8,39,216,41,43,136,4,212,8,38, + 240,6,0,30,35,136,4,212,8,26,216,23,27,136,4,141, + 12,114,22,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,60,1,0,0, + 151,0,100,1,124,0,106,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,155,2,157,2,100,2, + 124,0,106,2,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,155,2,157,2,103,2,125,1,124,0, + 106,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,129,30,124,1,106,7,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,100,3,124,0, + 106,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,155,2,157,2,171,1,0,0,0,0,0,0, + 1,0,124,0,106,8,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,129,30,124,1,106,7,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,129,30,124,1,106,7,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,100,3,124,0,106,4,0, + 100,4,124,0,106,8,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,155,0,157,2,171,1,0,0, + 0,0,0,0,1,0,124,0,106,10,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,106,12,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,155,2,157,2,171,1,0,0,0,0,0,0,1,0,124, - 0,106,8,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,129,30,124,1,106,7,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,100,4,124, - 0,106,8,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,155,0,157,2,171,1,0,0,0,0,0, - 0,1,0,124,0,106,10,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,106,12,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,155,0,100, - 5,100,6,106,15,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,124,1,171,1,0,0,0,0,0, - 0,155,0,100,7,157,4,83,0,41,8,78,122,5,110,97, - 109,101,61,122,7,108,111,97,100,101,114,61,122,7,111,114, - 105,103,105,110,61,122,27,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,61,250,1,40,122,2,44,32,250,1,41,41,8,114,26, - 0,0,0,114,213,0,0,0,114,218,0,0,0,114,51,0, - 0,0,114,223,0,0,0,114,45,0,0,0,114,11,0,0, - 0,218,4,106,111,105,110,41,2,114,44,0,0,0,114,90, - 0,0,0,115,2,0,0,0,32,32,114,7,0,0,0,114, - 132,0,0,0,122,19,77,111,100,117,108,101,83,112,101,99, - 46,95,95,114,101,112,114,95,95,100,2,0,0,115,145,0, - 0,0,128,0,216,18,23,152,4,159,9,153,9,144,125,208, - 16,37,168,23,176,20,183,27,177,27,176,15,208,39,64,208, - 15,65,136,4,216,11,15,143,59,137,59,208,11,34,216,12, - 16,143,75,137,75,152,39,160,36,167,43,161,43,160,31,208, - 24,49,212,12,50,216,11,15,215,11,42,209,11,42,208,11, - 54,216,12,16,143,75,137,75,208,26,53,176,100,215,54,85, - 209,54,85,208,53,86,208,24,87,212,12,88,216,18,22,151, - 46,145,46,215,18,41,209,18,41,208,17,42,168,33,168,68, - 175,73,169,73,176,100,171,79,208,43,60,184,65,208,15,62, - 208,8,62,114,22,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,114,1, + 155,0,100,5,100,6,106,15,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,124,1,171,1,0,0, + 0,0,0,0,155,0,100,7,157,4,83,0,41,8,78,122, + 5,110,97,109,101,61,122,7,108,111,97,100,101,114,61,122, + 7,111,114,105,103,105,110,61,122,27,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,61,250,1,40,122,2,44,32,250,1,41,41, + 8,114,26,0,0,0,114,213,0,0,0,114,218,0,0,0, + 114,51,0,0,0,114,223,0,0,0,114,45,0,0,0,114, + 11,0,0,0,218,4,106,111,105,110,41,2,114,44,0,0, + 0,114,90,0,0,0,115,2,0,0,0,32,32,114,7,0, + 0,0,114,132,0,0,0,122,19,77,111,100,117,108,101,83, + 112,101,99,46,95,95,114,101,112,114,95,95,100,2,0,0, + 115,145,0,0,0,128,0,216,18,23,152,4,159,9,153,9, + 144,125,208,16,37,168,23,176,20,183,27,177,27,176,15,208, + 39,64,208,15,65,136,4,216,11,15,143,59,137,59,208,11, + 34,216,12,16,143,75,137,75,152,39,160,36,167,43,161,43, + 160,31,208,24,49,212,12,50,216,11,15,215,11,42,209,11, + 42,208,11,54,216,12,16,143,75,137,75,208,26,53,176,100, + 215,54,85,209,54,85,208,53,86,208,24,87,212,12,88,216, + 18,22,151,46,145,46,215,18,41,209,18,41,208,17,42,168, + 33,168,68,175,73,169,73,176,100,171,79,208,43,60,184,65, + 208,15,62,208,8,62,114,22,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,114,1,0,0,151,0,124,0,106,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,125,2,9, + 0,124,0,106,2,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,124,1,106,2,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,107,40,0, + 0,120,1,114,123,1,0,124,0,106,4,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,124,1,106, + 4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,107,40,0,0,120,1,114,96,1,0,124,0,106, + 6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,124,1,106,6,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,107,40,0,0,120,1,114, + 69,1,0,124,2,124,1,106,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,107,40,0,0,120, + 1,114,52,1,0,124,0,106,8,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,124,1,106,8,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,107,40,0,0,120,1,114,25,1,0,124,0,106,10,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,124,1,106,10,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,107,40,0,0,83,0,35,0,116, + 12,0,0,0,0,0,0,0,0,36,0,114,9,1,0,116, + 14,0,0,0,0,0,0,0,0,99,2,89,0,83,0,119, + 0,120,3,89,0,119,1,114,2,0,0,0,41,8,114,223, + 0,0,0,114,26,0,0,0,114,213,0,0,0,114,218,0, + 0,0,218,6,99,97,99,104,101,100,218,12,104,97,115,95, + 108,111,99,97,116,105,111,110,114,4,0,0,0,218,14,78, + 111,116,73,109,112,108,101,109,101,110,116,101,100,41,3,114, + 44,0,0,0,218,5,111,116,104,101,114,218,4,115,109,115, + 108,115,3,0,0,0,32,32,32,114,7,0,0,0,218,6, + 95,95,101,113,95,95,122,17,77,111,100,117,108,101,83,112, + 101,99,46,95,95,101,113,95,95,108,2,0,0,115,175,0, + 0,0,128,0,216,15,19,215,15,46,209,15,46,136,4,240, + 2,8,9,34,216,20,24,151,73,145,73,160,21,167,26,161, + 26,209,20,43,242,0,5,21,60,216,20,24,151,75,145,75, + 160,53,167,60,161,60,209,20,47,242,3,5,21,60,224,20, + 24,151,75,145,75,160,53,167,60,161,60,209,20,47,242,5, + 5,21,60,240,6,0,21,25,152,69,215,28,60,209,28,60, + 209,20,60,242,7,5,21,60,240,8,0,21,25,151,75,145, + 75,160,53,167,60,161,60,209,20,47,242,9,5,21,60,240, + 10,0,21,25,215,20,37,209,20,37,168,21,215,41,59,209, + 41,59,209,20,59,240,11,5,13,61,248,244,12,0,16,30, + 242,0,1,9,34,220,19,33,210,12,33,240,3,1,9,34, + 250,115,18,0,0,0,142,66,21,66,36,0,194,36,15,66, + 54,3,194,53,1,66,54,3,99,1,0,0,0,0,0,0, + 0,0,0,0,0,3,0,0,0,3,0,0,0,243,194,0, 0,0,151,0,124,0,106,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,125,2,9,0,124,0, - 106,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,124,1,106,2,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,107,40,0,0,120,1, - 114,123,1,0,124,0,106,4,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,124,1,106,4,0,0, + 0,0,0,0,0,0,0,0,0,0,128,72,124,0,106,2, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 107,40,0,0,120,1,114,96,1,0,124,0,106,6,0,0, + 0,0,129,60,124,0,106,4,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,114,48,116,6,0,0, + 0,0,0,0,0,0,128,6,116,8,0,0,0,0,0,0, + 0,0,130,1,116,6,0,0,0,0,0,0,0,0,106,11, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 124,1,106,6,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,107,40,0,0,120,1,114,69,1,0, - 124,2,124,1,106,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,107,40,0,0,120,1,114,52, - 1,0,124,0,106,8,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,124,1,106,8,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,107,40, - 0,0,120,1,114,25,1,0,124,0,106,10,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,124,1, - 106,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,107,40,0,0,83,0,35,0,116,12,0,0, - 0,0,0,0,0,0,36,0,114,9,1,0,116,14,0,0, - 0,0,0,0,0,0,99,2,89,0,83,0,119,0,120,3, - 89,0,119,1,114,2,0,0,0,41,8,114,223,0,0,0, - 114,26,0,0,0,114,213,0,0,0,114,218,0,0,0,218, - 6,99,97,99,104,101,100,218,12,104,97,115,95,108,111,99, - 97,116,105,111,110,114,4,0,0,0,218,14,78,111,116,73, - 109,112,108,101,109,101,110,116,101,100,41,3,114,44,0,0, - 0,218,5,111,116,104,101,114,218,4,115,109,115,108,115,3, - 0,0,0,32,32,32,114,7,0,0,0,218,6,95,95,101, - 113,95,95,122,17,77,111,100,117,108,101,83,112,101,99,46, - 95,95,101,113,95,95,108,2,0,0,115,175,0,0,0,128, - 0,216,15,19,215,15,46,209,15,46,136,4,240,2,8,9, - 34,216,20,24,151,73,145,73,160,21,167,26,161,26,209,20, - 43,242,0,5,21,60,216,20,24,151,75,145,75,160,53,167, - 60,161,60,209,20,47,242,3,5,21,60,224,20,24,151,75, - 145,75,160,53,167,60,161,60,209,20,47,242,5,5,21,60, - 240,6,0,21,25,152,69,215,28,60,209,28,60,209,20,60, - 242,7,5,21,60,240,8,0,21,25,151,75,145,75,160,53, - 167,60,161,60,209,20,47,242,9,5,21,60,240,10,0,21, - 25,215,20,37,209,20,37,168,21,215,41,59,209,41,59,209, - 20,59,240,11,5,13,61,248,244,12,0,16,30,242,0,1, - 9,34,220,19,33,210,12,33,240,3,1,9,34,250,115,18, - 0,0,0,142,66,21,66,36,0,194,36,15,66,54,3,194, - 53,1,66,54,3,99,1,0,0,0,0,0,0,0,0,0, - 0,0,3,0,0,0,3,0,0,0,243,194,0,0,0,151, - 0,124,0,106,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,128,72,124,0,106,2,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,129, - 60,124,0,106,4,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,114,48,116,6,0,0,0,0,0, - 0,0,0,128,6,116,8,0,0,0,0,0,0,0,0,130, - 1,116,6,0,0,0,0,0,0,0,0,106,11,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,124, - 0,106,2,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,171,1,0,0,0,0,0,0,124,0,95, - 0,0,0,0,0,0,0,0,0,124,0,106,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,83, - 0,114,2,0,0,0,41,6,114,226,0,0,0,114,218,0, - 0,0,114,225,0,0,0,218,19,95,98,111,111,116,115,116, - 114,97,112,95,101,120,116,101,114,110,97,108,218,19,78,111, - 116,73,109,112,108,101,109,101,110,116,101,100,69,114,114,111, - 114,218,11,95,103,101,116,95,99,97,99,104,101,100,114,66, - 0,0,0,115,1,0,0,0,32,114,7,0,0,0,114,232, - 0,0,0,122,17,77,111,100,117,108,101,83,112,101,99,46, - 99,97,99,104,101,100,120,2,0,0,115,74,0,0,0,128, - 0,224,11,15,143,60,137,60,208,11,31,216,15,19,143,123, - 137,123,208,15,38,168,52,215,43,61,210,43,61,220,19,38, - 208,19,46,220,26,45,208,20,45,220,31,50,215,31,62,209, - 31,62,184,116,191,123,185,123,211,31,75,144,4,148,12,216, - 15,19,143,124,137,124,208,8,27,114,22,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,151,0,124,1,124,0,95,0, - 0,0,0,0,0,0,0,0,121,0,114,2,0,0,0,41, - 1,114,226,0,0,0,41,2,114,44,0,0,0,114,232,0, - 0,0,115,2,0,0,0,32,32,114,7,0,0,0,114,232, - 0,0,0,122,17,77,111,100,117,108,101,83,112,101,99,46, - 99,97,99,104,101,100,129,2,0,0,115,9,0,0,0,128, - 0,224,23,29,136,4,141,12,114,22,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,110,0,0,0,151,0,124,0,106,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128, - 30,124,0,106,2,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,106,5,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,100,1,171,1,0, - 0,0,0,0,0,100,2,25,0,0,0,83,0,124,0,106, + 0,0,124,0,106,2,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,171,1,0,0,0,0,0,0, + 124,0,95,0,0,0,0,0,0,0,0,0,124,0,106,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,83,0,114,2,0,0,0,41,6,114,226,0,0,0, + 114,218,0,0,0,114,225,0,0,0,218,19,95,98,111,111, + 116,115,116,114,97,112,95,101,120,116,101,114,110,97,108,218, + 19,78,111,116,73,109,112,108,101,109,101,110,116,101,100,69, + 114,114,111,114,218,11,95,103,101,116,95,99,97,99,104,101, + 100,114,66,0,0,0,115,1,0,0,0,32,114,7,0,0, + 0,114,232,0,0,0,122,17,77,111,100,117,108,101,83,112, + 101,99,46,99,97,99,104,101,100,120,2,0,0,115,74,0, + 0,0,128,0,224,11,15,143,60,137,60,208,11,31,216,15, + 19,143,123,137,123,208,15,38,168,52,215,43,61,210,43,61, + 220,19,38,208,19,46,220,26,45,208,20,45,220,31,50,215, + 31,62,209,31,62,184,116,191,123,185,123,211,31,75,144,4, + 148,12,216,15,19,143,124,137,124,208,8,27,114,22,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,151,0,124,1,124, + 0,95,0,0,0,0,0,0,0,0,0,121,0,114,2,0, + 0,0,41,1,114,226,0,0,0,41,2,114,44,0,0,0, + 114,232,0,0,0,115,2,0,0,0,32,32,114,7,0,0, + 0,114,232,0,0,0,122,17,77,111,100,117,108,101,83,112, + 101,99,46,99,97,99,104,101,100,129,2,0,0,115,9,0, + 0,0,128,0,224,23,29,136,4,141,12,114,22,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,110,0,0,0,151,0,124,0,106,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,128,30,124,0,106,2,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,106,5,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,100,1, + 171,1,0,0,0,0,0,0,100,2,25,0,0,0,83,0, + 124,0,106,2,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,83,0,41,3,122,32,84,104,101,32, + 110,97,109,101,32,111,102,32,116,104,101,32,109,111,100,117, + 108,101,39,115,32,112,97,114,101,110,116,46,250,1,46,114, + 125,0,0,0,41,3,114,223,0,0,0,114,26,0,0,0, + 218,10,114,112,97,114,116,105,116,105,111,110,114,66,0,0, + 0,115,1,0,0,0,32,114,7,0,0,0,218,6,112,97, + 114,101,110,116,122,17,77,111,100,117,108,101,83,112,101,99, + 46,112,97,114,101,110,116,133,2,0,0,115,52,0,0,0, + 128,0,240,6,0,12,16,215,11,42,209,11,42,208,11,50, + 216,19,23,151,57,145,57,215,19,39,209,19,39,168,3,211, + 19,44,168,81,209,19,47,208,12,47,224,19,23,151,57,145, + 57,208,12,28,114,22,0,0,0,99,1,0,0,0,0,0, + 0,0,0,0,0,0,1,0,0,0,3,0,0,0,243,26, + 0,0,0,151,0,124,0,106,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,83,0,114,2,0, + 0,0,41,1,114,225,0,0,0,114,66,0,0,0,115,1, + 0,0,0,32,114,7,0,0,0,114,233,0,0,0,122,23, + 77,111,100,117,108,101,83,112,101,99,46,104,97,115,95,108, + 111,99,97,116,105,111,110,141,2,0,0,115,14,0,0,0, + 128,0,224,15,19,215,15,33,209,15,33,208,8,33,114,22, + 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,36,0,0,0,151,0,116, + 1,0,0,0,0,0,0,0,0,124,1,171,1,0,0,0, + 0,0,0,124,0,95,1,0,0,0,0,0,0,0,0,121, + 0,114,2,0,0,0,41,2,218,4,98,111,111,108,114,225, + 0,0,0,41,2,114,44,0,0,0,218,5,118,97,108,117, + 101,115,2,0,0,0,32,32,114,7,0,0,0,114,233,0, + 0,0,122,23,77,111,100,117,108,101,83,112,101,99,46,104, + 97,115,95,108,111,99,97,116,105,111,110,145,2,0,0,115, + 14,0,0,0,128,0,228,29,33,160,37,155,91,136,4,213, + 8,26,114,22,0,0,0,41,12,114,11,0,0,0,114,10, + 0,0,0,114,3,0,0,0,114,12,0,0,0,114,47,0, + 0,0,114,132,0,0,0,114,237,0,0,0,218,8,112,114, + 111,112,101,114,116,121,114,232,0,0,0,218,6,115,101,116, + 116,101,114,114,246,0,0,0,114,233,0,0,0,114,31,0, + 0,0,114,22,0,0,0,114,7,0,0,0,114,217,0,0, + 0,114,217,0,0,0,50,2,0,0,115,143,0,0,0,132, + 0,241,2,34,5,8,240,72,1,0,48,52,192,36,216,28, + 32,244,3,11,5,28,242,26,6,5,63,242,16,10,5,34, + 240,24,0,6,14,241,2,6,5,28,243,3,0,6,14,240, + 2,6,5,28,240,16,0,6,12,135,93,129,93,241,2,1, + 5,30,243,3,0,6,19,240,2,1,5,30,240,6,0,6, + 14,241,2,5,5,29,243,3,0,6,14,240,2,5,5,29, + 240,14,0,6,14,241,2,1,5,34,243,3,0,6,14,240, + 2,1,5,34,240,6,0,6,18,215,5,24,209,5,24,241, + 2,1,5,41,243,3,0,6,25,241,2,1,5,41,114,22, + 0,0,0,114,217,0,0,0,169,2,114,218,0,0,0,114, + 220,0,0,0,99,2,0,0,0,0,0,0,0,2,0,0, + 0,6,0,0,0,3,0,0,0,243,52,1,0,0,151,0, + 124,2,128,13,116,1,0,0,0,0,0,0,0,0,124,1, + 100,2,100,1,171,3,0,0,0,0,0,0,125,2,124,2, + 115,69,116,3,0,0,0,0,0,0,0,0,124,1,100,3, + 171,2,0,0,0,0,0,0,114,57,116,4,0,0,0,0, + 0,0,0,0,128,6,116,6,0,0,0,0,0,0,0,0, + 130,1,116,4,0,0,0,0,0,0,0,0,106,8,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 125,4,124,3,128,10,2,0,124,4,124,0,124,1,172,4, + 171,2,0,0,0,0,0,0,83,0,124,3,114,2,103,0, + 110,1,100,1,125,5,2,0,124,4,124,0,124,1,124,5, + 172,5,171,3,0,0,0,0,0,0,83,0,124,3,128,33, + 116,3,0,0,0,0,0,0,0,0,124,1,100,6,171,2, + 0,0,0,0,0,0,114,19,9,0,124,1,106,11,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 124,0,171,1,0,0,0,0,0,0,125,3,110,2,100,7, + 125,3,116,15,0,0,0,0,0,0,0,0,124,0,124,1, + 124,2,124,3,172,8,171,4,0,0,0,0,0,0,83,0, + 35,0,116,12,0,0,0,0,0,0,0,0,36,0,114,5, + 1,0,100,1,125,3,89,0,140,28,119,0,120,3,89,0, + 119,1,41,9,122,53,82,101,116,117,114,110,32,97,32,109, + 111,100,117,108,101,32,115,112,101,99,32,98,97,115,101,100, + 32,111,110,32,118,97,114,105,111,117,115,32,108,111,97,100, + 101,114,32,109,101,116,104,111,100,115,46,78,218,7,95,79, + 82,73,71,73,78,218,12,103,101,116,95,102,105,108,101,110, + 97,109,101,41,1,114,213,0,0,0,41,2,114,213,0,0, + 0,114,223,0,0,0,114,220,0,0,0,70,114,253,0,0, + 0,41,8,114,15,0,0,0,114,13,0,0,0,114,239,0, + 0,0,114,240,0,0,0,218,23,115,112,101,99,95,102,114, + 111,109,95,102,105,108,101,95,108,111,99,97,116,105,111,110, + 114,220,0,0,0,114,178,0,0,0,114,217,0,0,0,41, + 6,114,26,0,0,0,114,213,0,0,0,114,218,0,0,0, + 114,220,0,0,0,114,1,1,0,0,218,6,115,101,97,114, + 99,104,115,6,0,0,0,32,32,32,32,32,32,114,7,0, + 0,0,114,194,0,0,0,114,194,0,0,0,150,2,0,0, + 115,192,0,0,0,128,0,224,7,13,128,126,220,17,24,152, + 22,160,25,168,68,211,17,49,136,6,225,11,17,148,103,152, + 102,160,110,212,22,53,220,11,30,208,11,38,220,18,37,208, + 12,37,220,34,53,215,34,77,209,34,77,208,8,31,224,11, + 21,208,11,29,217,19,42,168,52,184,6,212,19,63,208,12, + 63,217,23,33,145,18,160,116,136,6,217,15,38,160,116,176, + 70,216,66,72,244,3,1,16,74,1,240,0,1,9,74,1, + 240,6,0,8,18,208,7,25,220,11,18,144,54,152,60,212, + 11,40,240,2,3,13,34,216,29,35,215,29,46,209,29,46, + 168,116,211,29,52,145,10,240,10,0,26,31,136,74,228,11, + 21,144,100,152,70,168,54,184,106,212,11,73,208,4,73,248, + 244,13,0,20,31,242,0,1,13,34,216,29,33,146,10,240, + 3,1,13,34,250,115,18,0,0,0,193,38,17,66,9,0, + 194,9,11,66,23,3,194,22,1,66,23,3,99,3,0,0, + 0,0,0,0,0,0,0,0,0,5,0,0,0,3,0,0, + 0,243,226,1,0,0,151,0,9,0,124,0,106,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 125,3,124,3,129,2,124,3,83,0,124,0,106,4,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 125,4,124,1,128,13,9,0,124,0,106,6,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,125,1, + 9,0,124,0,106,8,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,125,5,124,2,128,21,124,1, + 129,13,116,11,0,0,0,0,0,0,0,0,124,1,100,1, + 100,0,171,3,0,0,0,0,0,0,125,2,124,2,115,4, + 124,5,129,2,124,5,125,2,9,0,124,0,106,12,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 125,6,9,0,116,15,0,0,0,0,0,0,0,0,124,0, + 106,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,171,1,0,0,0,0,0,0,125,7,116,19, + 0,0,0,0,0,0,0,0,124,4,124,1,124,2,172,2, + 171,3,0,0,0,0,0,0,125,3,124,5,128,2,100,3, + 110,4,124,2,124,5,107,40,0,0,124,3,95,10,0,0, + 0,0,0,0,0,0,124,6,124,3,95,11,0,0,0,0, + 0,0,0,0,124,7,124,3,95,12,0,0,0,0,0,0, + 0,0,124,3,83,0,35,0,116,2,0,0,0,0,0,0, + 0,0,36,0,114,3,1,0,89,0,140,153,119,0,120,3, + 89,0,119,1,35,0,116,2,0,0,0,0,0,0,0,0, + 36,0,114,3,1,0,89,0,140,141,119,0,120,3,89,0, + 119,1,35,0,116,2,0,0,0,0,0,0,0,0,36,0, + 114,5,1,0,100,0,125,5,89,0,140,145,119,0,120,3, + 89,0,119,1,35,0,116,2,0,0,0,0,0,0,0,0, + 36,0,114,5,1,0,100,0,125,6,89,0,140,126,119,0, + 120,3,89,0,119,1,35,0,116,2,0,0,0,0,0,0, + 0,0,36,0,114,5,1,0,100,0,125,7,89,0,140,121, + 119,0,120,3,89,0,119,1,41,4,78,114,255,0,0,0, + 169,1,114,218,0,0,0,70,41,13,114,204,0,0,0,114, + 4,0,0,0,114,11,0,0,0,114,203,0,0,0,114,212, + 0,0,0,114,15,0,0,0,218,10,95,95,99,97,99,104, + 101,100,95,95,218,4,108,105,115,116,218,8,95,95,112,97, + 116,104,95,95,114,217,0,0,0,114,225,0,0,0,114,232, + 0,0,0,114,223,0,0,0,41,8,114,200,0,0,0,114, + 213,0,0,0,114,218,0,0,0,114,199,0,0,0,114,26, + 0,0,0,218,8,108,111,99,97,116,105,111,110,114,232,0, + 0,0,114,223,0,0,0,115,8,0,0,0,32,32,32,32, + 32,32,32,32,114,7,0,0,0,218,17,95,115,112,101,99, + 95,102,114,111,109,95,109,111,100,117,108,101,114,9,1,0, + 0,179,2,0,0,115,53,1,0,0,128,0,240,4,6,5, + 24,216,15,21,143,127,137,127,136,4,240,8,0,12,16,208, + 11,27,216,19,23,136,75,224,11,17,143,63,137,63,128,68, + 216,7,13,128,126,240,2,4,9,17,216,21,27,215,21,38, + 209,21,38,136,70,240,8,3,5,24,216,19,25,151,63,145, + 63,136,8,240,6,0,8,14,128,126,216,11,17,208,11,29, + 220,21,28,152,86,160,89,176,4,211,21,53,136,70,217,15, + 21,152,40,208,26,46,216,21,29,136,70,240,2,3,5,22, + 216,17,23,215,17,34,209,17,34,136,6,240,6,3,5,42, + 220,37,41,168,38,175,47,169,47,211,37,58,208,8,34,244, + 8,0,12,22,144,100,152,70,168,54,212,11,50,128,68,216, + 34,42,208,34,50,153,21,184,22,192,56,209,57,75,128,68, + 212,4,22,216,18,24,128,68,132,75,216,38,64,128,68,212, + 4,35,216,11,15,128,75,248,244,71,1,0,12,26,242,0, + 1,5,13,217,8,12,240,3,1,5,13,251,244,20,0,16, + 30,242,0,2,9,17,225,12,16,240,5,2,9,17,251,244, + 10,0,12,26,242,0,1,5,24,216,19,23,138,8,240,3, + 1,5,24,251,244,18,0,12,26,242,0,1,5,22,216,17, + 21,138,6,240,3,1,5,22,251,244,8,0,12,26,242,0, + 1,5,42,216,37,41,210,8,34,240,3,1,5,42,250,115, + 87,0,0,0,130,12,66,32,0,161,12,66,47,0,174,12, + 66,62,0,193,18,12,67,15,0,193,31,21,67,32,0,194, + 32,9,66,44,3,194,43,1,66,44,3,194,47,9,66,59, + 3,194,58,1,66,59,3,194,62,11,67,12,3,195,11,1, + 67,12,3,195,15,11,67,29,3,195,28,1,67,29,3,195, + 32,11,67,46,3,195,45,1,67,46,3,70,169,1,218,8, + 111,118,101,114,114,105,100,101,99,2,0,0,0,0,0,0, + 0,1,0,0,0,5,0,0,0,3,0,0,0,243,124,3, + 0,0,151,0,124,2,115,13,116,1,0,0,0,0,0,0, + 0,0,124,1,100,1,100,0,171,3,0,0,0,0,0,0, + 128,18,9,0,124,0,106,2,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,124,1,95,2,0,0, + 0,0,0,0,0,0,124,2,115,13,116,1,0,0,0,0, + 0,0,0,0,124,1,100,2,100,0,171,3,0,0,0,0, + 0,0,128,110,124,0,106,8,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,125,3,124,3,128,88, + 124,0,106,10,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,129,76,116,12,0,0,0,0,0,0, + 0,0,128,6,116,14,0,0,0,0,0,0,0,0,130,1, + 116,12,0,0,0,0,0,0,0,0,106,16,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,125,4, + 124,4,106,19,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,124,4,171,1,0,0,0,0,0,0, + 125,3,124,0,106,10,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,124,3,95,10,0,0,0,0, + 0,0,0,0,124,3,124,0,95,4,0,0,0,0,0,0, + 0,0,100,0,124,1,95,11,0,0,0,0,0,0,0,0, + 9,0,124,3,124,1,95,12,0,0,0,0,0,0,0,0, + 124,2,115,13,116,1,0,0,0,0,0,0,0,0,124,1, + 100,3,100,0,171,3,0,0,0,0,0,0,128,18,9,0, + 124,0,106,26,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,124,1,95,14,0,0,0,0,0,0, + 0,0,9,0,124,0,124,1,95,15,0,0,0,0,0,0, + 0,0,124,2,115,13,116,1,0,0,0,0,0,0,0,0, + 124,1,100,4,100,0,171,3,0,0,0,0,0,0,128,30, + 124,0,106,10,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,129,18,9,0,124,0,106,10,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 124,1,95,16,0,0,0,0,0,0,0,0,124,0,106,34, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,114,80,124,2,115,13,116,1,0,0,0,0,0,0, + 0,0,124,1,100,5,100,0,171,3,0,0,0,0,0,0, + 128,18,9,0,124,0,106,36,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,124,1,95,11,0,0, + 0,0,0,0,0,0,124,2,115,13,116,1,0,0,0,0, + 0,0,0,0,124,1,100,6,100,0,171,3,0,0,0,0, + 0,0,128,32,124,0,106,38,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,129,20,9,0,124,0, + 106,38,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,124,1,95,20,0,0,0,0,0,0,0,0, + 124,1,83,0,124,1,83,0,35,0,116,6,0,0,0,0, + 0,0,0,0,36,0,114,4,1,0,89,0,144,1,140,61, + 119,0,120,3,89,0,119,1,35,0,116,6,0,0,0,0, + 0,0,0,0,36,0,114,3,1,0,89,0,140,207,119,0, + 120,3,89,0,119,1,35,0,116,6,0,0,0,0,0,0, + 0,0,36,0,114,3,1,0,89,0,140,189,119,0,120,3, + 89,0,119,1,35,0,116,6,0,0,0,0,0,0,0,0, + 36,0,114,3,1,0,89,0,140,196,119,0,120,3,89,0, + 119,1,35,0,116,6,0,0,0,0,0,0,0,0,36,0, + 114,3,1,0,89,0,140,166,119,0,120,3,89,0,119,1, + 35,0,116,6,0,0,0,0,0,0,0,0,36,0,114,3, + 1,0,89,0,140,136,119,0,120,3,89,0,119,1,35,0, + 116,6,0,0,0,0,0,0,0,0,36,0,114,4,1,0, + 89,0,124,1,83,0,119,0,120,3,89,0,119,1,41,7, + 78,114,11,0,0,0,114,203,0,0,0,218,11,95,95,112, + 97,99,107,97,103,101,95,95,114,7,1,0,0,114,212,0, + 0,0,114,5,1,0,0,41,21,114,15,0,0,0,114,26, + 0,0,0,114,11,0,0,0,114,4,0,0,0,114,213,0, + 0,0,114,223,0,0,0,114,239,0,0,0,114,240,0,0, + 0,218,15,78,97,109,101,115,112,97,99,101,76,111,97,100, + 101,114,114,41,0,0,0,218,5,95,112,97,116,104,114,212, + 0,0,0,114,203,0,0,0,114,246,0,0,0,114,13,1, + 0,0,114,204,0,0,0,114,7,1,0,0,114,233,0,0, + 0,114,218,0,0,0,114,232,0,0,0,114,5,1,0,0, + 41,5,114,199,0,0,0,114,200,0,0,0,114,11,1,0, + 0,114,213,0,0,0,114,14,1,0,0,115,5,0,0,0, + 32,32,32,32,32,114,7,0,0,0,218,18,95,105,110,105, + 116,95,109,111,100,117,108,101,95,97,116,116,114,115,114,16, + 1,0,0,221,2,0,0,115,245,1,0,0,128,0,241,8, + 0,9,17,148,71,152,70,160,74,176,4,211,20,53,208,20, + 61,240,2,3,9,17,216,30,34,159,105,153,105,136,70,140, + 79,241,8,0,8,16,148,55,152,54,160,60,176,20,211,19, + 54,208,19,62,216,17,21,151,27,145,27,136,6,216,11,17, + 136,62,224,15,19,215,15,46,209,15,46,208,15,58,220,19, + 38,208,19,46,220,26,45,208,20,45,220,34,53,215,34,69, + 209,34,69,144,15,224,25,40,215,25,48,209,25,48,176,31, + 211,25,65,144,6,216,31,35,215,31,62,209,31,62,144,6, + 148,12,216,30,36,144,4,148,11,240,22,0,35,39,144,6, + 148,15,240,2,3,9,17,216,32,38,136,70,212,12,29,241, + 8,0,8,16,148,55,152,54,160,61,176,36,211,19,55,208, + 19,63,240,2,3,9,17,216,33,37,167,27,161,27,136,70, + 212,12,30,240,8,3,5,13,216,26,30,136,6,140,15,241, + 8,0,8,16,148,55,152,54,160,58,168,116,211,19,52,208, + 19,60,216,11,15,215,11,42,209,11,42,208,11,54,240,4, + 3,13,21,216,34,38,215,34,65,209,34,65,144,6,148,15, + 240,8,0,8,12,215,7,24,210,7,24,217,11,19,148,119, + 152,118,160,122,176,52,211,23,56,208,23,64,240,2,3,13, + 21,216,34,38,167,43,161,43,144,6,148,15,241,8,0,12, + 20,148,119,152,118,160,124,176,84,211,23,58,208,23,66,216, + 15,19,143,123,137,123,208,15,38,240,2,3,17,25,216,40, + 44,175,11,169,11,144,70,212,20,37,240,6,0,12,18,128, + 77,136,54,128,77,248,244,127,1,0,16,30,242,0,1,9, + 17,218,12,16,240,3,1,9,17,251,244,56,0,16,30,242, + 0,1,9,17,217,12,16,240,3,1,9,17,251,244,12,0, + 16,30,242,0,1,9,17,217,12,16,240,3,1,9,17,251, + 244,10,0,12,26,242,0,1,5,13,217,8,12,240,3,1, + 5,13,251,244,16,0,20,34,242,0,1,13,21,217,16,20, + 240,3,1,13,21,251,244,14,0,20,34,242,0,1,13,21, + 217,16,20,240,3,1,13,21,251,244,14,0,24,38,242,0, + 1,17,25,216,20,24,216,11,17,128,77,240,5,1,17,25, + 250,115,125,0,0,0,145,17,69,19,0,194,24,7,69,35, + 0,194,47,17,69,50,0,195,1,7,70,1,0,195,36,17, + 70,16,0,196,17,17,70,31,0,196,62,17,70,46,0,197, + 19,9,69,32,3,197,31,1,69,32,3,197,35,9,69,47, + 3,197,46,1,69,47,3,197,50,9,69,62,3,197,61,1, + 69,62,3,198,1,9,70,13,3,198,12,1,70,13,3,198, + 16,9,70,28,3,198,27,1,70,28,3,198,31,9,70,43, + 3,198,42,1,70,43,3,198,46,9,70,59,3,198,58,1, + 70,59,3,99,1,0,0,0,0,0,0,0,0,0,0,0, + 4,0,0,0,3,0,0,0,243,246,0,0,0,151,0,100, + 1,125,1,116,1,0,0,0,0,0,0,0,0,124,0,106, 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,83,0,41,3,122,32,84,104,101,32,110,97,109, - 101,32,111,102,32,116,104,101,32,109,111,100,117,108,101,39, - 115,32,112,97,114,101,110,116,46,250,1,46,114,125,0,0, - 0,41,3,114,223,0,0,0,114,26,0,0,0,218,10,114, - 112,97,114,116,105,116,105,111,110,114,66,0,0,0,115,1, - 0,0,0,32,114,7,0,0,0,218,6,112,97,114,101,110, - 116,122,17,77,111,100,117,108,101,83,112,101,99,46,112,97, - 114,101,110,116,133,2,0,0,115,52,0,0,0,128,0,240, - 6,0,12,16,215,11,42,209,11,42,208,11,50,216,19,23, - 151,57,145,57,215,19,39,209,19,39,168,3,211,19,44,168, - 81,209,19,47,208,12,47,224,19,23,151,57,145,57,208,12, - 28,114,22,0,0,0,99,1,0,0,0,0,0,0,0,0, - 0,0,0,1,0,0,0,3,0,0,0,243,26,0,0,0, - 151,0,124,0,106,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,83,0,114,2,0,0,0,41, - 1,114,225,0,0,0,114,66,0,0,0,115,1,0,0,0, - 32,114,7,0,0,0,114,233,0,0,0,122,23,77,111,100, - 117,108,101,83,112,101,99,46,104,97,115,95,108,111,99,97, - 116,105,111,110,141,2,0,0,115,14,0,0,0,128,0,224, - 15,19,215,15,33,209,15,33,208,8,33,114,22,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,36,0,0,0,151,0,116,1,0,0, - 0,0,0,0,0,0,124,1,171,1,0,0,0,0,0,0, - 124,0,95,1,0,0,0,0,0,0,0,0,121,0,114,2, - 0,0,0,41,2,218,4,98,111,111,108,114,225,0,0,0, - 41,2,114,44,0,0,0,218,5,118,97,108,117,101,115,2, - 0,0,0,32,32,114,7,0,0,0,114,233,0,0,0,122, - 23,77,111,100,117,108,101,83,112,101,99,46,104,97,115,95, - 108,111,99,97,116,105,111,110,145,2,0,0,115,14,0,0, - 0,128,0,228,29,33,160,37,155,91,136,4,213,8,26,114, - 22,0,0,0,41,12,114,11,0,0,0,114,10,0,0,0, - 114,3,0,0,0,114,12,0,0,0,114,47,0,0,0,114, - 132,0,0,0,114,237,0,0,0,218,8,112,114,111,112,101, - 114,116,121,114,232,0,0,0,218,6,115,101,116,116,101,114, - 114,246,0,0,0,114,233,0,0,0,114,31,0,0,0,114, - 22,0,0,0,114,7,0,0,0,114,217,0,0,0,114,217, - 0,0,0,50,2,0,0,115,143,0,0,0,132,0,241,2, - 34,5,8,240,72,1,0,48,52,192,36,216,28,32,244,3, - 11,5,28,242,26,6,5,63,242,16,10,5,34,240,24,0, - 6,14,241,2,6,5,28,243,3,0,6,14,240,2,6,5, - 28,240,16,0,6,12,135,93,129,93,241,2,1,5,30,243, - 3,0,6,19,240,2,1,5,30,240,6,0,6,14,241,2, - 5,5,29,243,3,0,6,14,240,2,5,5,29,240,14,0, - 6,14,241,2,1,5,34,243,3,0,6,14,240,2,1,5, - 34,240,6,0,6,18,215,5,24,209,5,24,241,2,1,5, - 41,243,3,0,6,25,241,2,1,5,41,114,22,0,0,0, - 114,217,0,0,0,169,2,114,218,0,0,0,114,220,0,0, - 0,99,2,0,0,0,0,0,0,0,2,0,0,0,6,0, - 0,0,3,0,0,0,243,52,1,0,0,151,0,124,2,128, - 13,116,1,0,0,0,0,0,0,0,0,124,1,100,2,100, - 1,171,3,0,0,0,0,0,0,125,2,124,2,115,69,116, - 3,0,0,0,0,0,0,0,0,124,1,100,3,171,2,0, - 0,0,0,0,0,114,57,116,4,0,0,0,0,0,0,0, - 0,128,6,116,6,0,0,0,0,0,0,0,0,130,1,116, - 4,0,0,0,0,0,0,0,0,106,8,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,125,4,124, - 3,128,10,2,0,124,4,124,0,124,1,172,4,171,2,0, - 0,0,0,0,0,83,0,124,3,114,2,103,0,110,1,100, - 1,125,5,2,0,124,4,124,0,124,1,124,5,172,5,171, - 3,0,0,0,0,0,0,83,0,124,3,128,33,116,3,0, - 0,0,0,0,0,0,0,124,1,100,6,171,2,0,0,0, - 0,0,0,114,19,9,0,124,1,106,11,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,124,0,171, - 1,0,0,0,0,0,0,125,3,110,2,100,7,125,3,116, - 15,0,0,0,0,0,0,0,0,124,0,124,1,124,2,124, - 3,172,8,171,4,0,0,0,0,0,0,83,0,35,0,116, - 12,0,0,0,0,0,0,0,0,36,0,114,5,1,0,100, - 1,125,3,89,0,140,28,119,0,120,3,89,0,119,1,41, - 9,122,53,82,101,116,117,114,110,32,97,32,109,111,100,117, - 108,101,32,115,112,101,99,32,98,97,115,101,100,32,111,110, - 32,118,97,114,105,111,117,115,32,108,111,97,100,101,114,32, - 109,101,116,104,111,100,115,46,78,218,7,95,79,82,73,71, - 73,78,218,12,103,101,116,95,102,105,108,101,110,97,109,101, - 41,1,114,213,0,0,0,41,2,114,213,0,0,0,114,223, - 0,0,0,114,220,0,0,0,70,114,253,0,0,0,41,8, - 114,15,0,0,0,114,13,0,0,0,114,239,0,0,0,114, - 240,0,0,0,218,23,115,112,101,99,95,102,114,111,109,95, - 102,105,108,101,95,108,111,99,97,116,105,111,110,114,220,0, - 0,0,114,178,0,0,0,114,217,0,0,0,41,6,114,26, - 0,0,0,114,213,0,0,0,114,218,0,0,0,114,220,0, - 0,0,114,1,1,0,0,218,6,115,101,97,114,99,104,115, - 6,0,0,0,32,32,32,32,32,32,114,7,0,0,0,114, - 194,0,0,0,114,194,0,0,0,150,2,0,0,115,192,0, - 0,0,128,0,224,7,13,128,126,220,17,24,152,22,160,25, - 168,68,211,17,49,136,6,225,11,17,148,103,152,102,160,110, - 212,22,53,220,11,30,208,11,38,220,18,37,208,12,37,220, - 34,53,215,34,77,209,34,77,208,8,31,224,11,21,208,11, - 29,217,19,42,168,52,184,6,212,19,63,208,12,63,217,23, - 33,145,18,160,116,136,6,217,15,38,160,116,176,70,216,66, - 72,244,3,1,16,74,1,240,0,1,9,74,1,240,6,0, - 8,18,208,7,25,220,11,18,144,54,152,60,212,11,40,240, - 2,3,13,34,216,29,35,215,29,46,209,29,46,168,116,211, - 29,52,145,10,240,10,0,26,31,136,74,228,11,21,144,100, - 152,70,168,54,184,106,212,11,73,208,4,73,248,244,13,0, - 20,31,242,0,1,13,34,216,29,33,146,10,240,3,1,13, - 34,250,115,18,0,0,0,193,38,17,66,9,0,194,9,11, - 66,23,3,194,22,1,66,23,3,99,3,0,0,0,0,0, - 0,0,0,0,0,0,5,0,0,0,3,0,0,0,243,226, - 1,0,0,151,0,9,0,124,0,106,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,125,3,124, - 3,129,2,124,3,83,0,124,0,106,4,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,125,4,124, - 1,128,13,9,0,124,0,106,6,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,125,1,9,0,124, - 0,106,8,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,125,5,124,2,128,21,124,1,129,13,116, - 11,0,0,0,0,0,0,0,0,124,1,100,1,100,0,171, - 3,0,0,0,0,0,0,125,2,124,2,115,4,124,5,129, - 2,124,5,125,2,9,0,124,0,106,12,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,125,6,9, - 0,116,15,0,0,0,0,0,0,0,0,124,0,106,16,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,171,1,0,0,0,0,0,0,125,7,116,19,0,0,0, - 0,0,0,0,0,124,4,124,1,124,2,172,2,171,3,0, - 0,0,0,0,0,125,3,124,5,128,2,100,3,110,4,124, - 2,124,5,107,40,0,0,124,3,95,10,0,0,0,0,0, - 0,0,0,124,6,124,3,95,11,0,0,0,0,0,0,0, - 0,124,7,124,3,95,12,0,0,0,0,0,0,0,0,124, - 3,83,0,35,0,116,2,0,0,0,0,0,0,0,0,36, - 0,114,3,1,0,89,0,140,153,119,0,120,3,89,0,119, - 1,35,0,116,2,0,0,0,0,0,0,0,0,36,0,114, - 3,1,0,89,0,140,141,119,0,120,3,89,0,119,1,35, - 0,116,2,0,0,0,0,0,0,0,0,36,0,114,5,1, - 0,100,0,125,5,89,0,140,145,119,0,120,3,89,0,119, - 1,35,0,116,2,0,0,0,0,0,0,0,0,36,0,114, - 5,1,0,100,0,125,6,89,0,140,126,119,0,120,3,89, - 0,119,1,35,0,116,2,0,0,0,0,0,0,0,0,36, - 0,114,5,1,0,100,0,125,7,89,0,140,121,119,0,120, - 3,89,0,119,1,41,4,78,114,255,0,0,0,169,1,114, - 218,0,0,0,70,41,13,114,204,0,0,0,114,4,0,0, - 0,114,11,0,0,0,114,203,0,0,0,114,212,0,0,0, - 114,15,0,0,0,218,10,95,95,99,97,99,104,101,100,95, - 95,218,4,108,105,115,116,218,8,95,95,112,97,116,104,95, - 95,114,217,0,0,0,114,225,0,0,0,114,232,0,0,0, - 114,223,0,0,0,41,8,114,200,0,0,0,114,213,0,0, - 0,114,218,0,0,0,114,199,0,0,0,114,26,0,0,0, - 218,8,108,111,99,97,116,105,111,110,114,232,0,0,0,114, - 223,0,0,0,115,8,0,0,0,32,32,32,32,32,32,32, - 32,114,7,0,0,0,218,17,95,115,112,101,99,95,102,114, - 111,109,95,109,111,100,117,108,101,114,9,1,0,0,179,2, - 0,0,115,53,1,0,0,128,0,240,4,6,5,24,216,15, - 21,143,127,137,127,136,4,240,8,0,12,16,208,11,27,216, - 19,23,136,75,224,11,17,143,63,137,63,128,68,216,7,13, - 128,126,240,2,4,9,17,216,21,27,215,21,38,209,21,38, - 136,70,240,8,3,5,24,216,19,25,151,63,145,63,136,8, - 240,6,0,8,14,128,126,216,11,17,208,11,29,220,21,28, - 152,86,160,89,176,4,211,21,53,136,70,217,15,21,152,40, - 208,26,46,216,21,29,136,70,240,2,3,5,22,216,17,23, - 215,17,34,209,17,34,136,6,240,6,3,5,42,220,37,41, - 168,38,175,47,169,47,211,37,58,208,8,34,244,8,0,12, - 22,144,100,152,70,168,54,212,11,50,128,68,216,34,42,208, - 34,50,153,21,184,22,192,56,209,57,75,128,68,212,4,22, - 216,18,24,128,68,132,75,216,38,64,128,68,212,4,35,216, - 11,15,128,75,248,244,71,1,0,12,26,242,0,1,5,13, - 217,8,12,240,3,1,5,13,251,244,20,0,16,30,242,0, - 2,9,17,225,12,16,240,5,2,9,17,251,244,10,0,12, - 26,242,0,1,5,24,216,19,23,138,8,240,3,1,5,24, - 251,244,18,0,12,26,242,0,1,5,22,216,17,21,138,6, - 240,3,1,5,22,251,244,8,0,12,26,242,0,1,5,42, - 216,37,41,210,8,34,240,3,1,5,42,250,115,87,0,0, - 0,130,12,66,32,0,161,12,66,47,0,174,12,66,62,0, - 193,18,12,67,15,0,193,31,21,67,32,0,194,32,9,66, - 44,3,194,43,1,66,44,3,194,47,9,66,59,3,194,58, - 1,66,59,3,194,62,11,67,12,3,195,11,1,67,12,3, - 195,15,11,67,29,3,195,28,1,67,29,3,195,32,11,67, - 46,3,195,45,1,67,46,3,70,169,1,218,8,111,118,101, - 114,114,105,100,101,99,2,0,0,0,0,0,0,0,1,0, - 0,0,5,0,0,0,3,0,0,0,243,124,3,0,0,151, - 0,124,2,115,13,116,1,0,0,0,0,0,0,0,0,124, - 1,100,1,100,0,171,3,0,0,0,0,0,0,128,18,9, + 0,0,0,100,2,171,2,0,0,0,0,0,0,114,28,124, + 0,106,2,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,106,5,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,124,0,171,1,0,0,0, + 0,0,0,125,1,110,33,116,1,0,0,0,0,0,0,0, 0,124,0,106,2,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,124,1,95,2,0,0,0,0,0, - 0,0,0,124,2,115,13,116,1,0,0,0,0,0,0,0, - 0,124,1,100,2,100,0,171,3,0,0,0,0,0,0,128, - 110,124,0,106,8,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,125,3,124,3,128,88,124,0,106, - 10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,129,76,116,12,0,0,0,0,0,0,0,0,128, - 6,116,14,0,0,0,0,0,0,0,0,130,1,116,12,0, - 0,0,0,0,0,0,0,106,16,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,125,4,124,4,106, - 19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,124,4,171,1,0,0,0,0,0,0,125,3,124, - 0,106,10,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,124,3,95,10,0,0,0,0,0,0,0, - 0,124,3,124,0,95,4,0,0,0,0,0,0,0,0,100, - 0,124,1,95,11,0,0,0,0,0,0,0,0,9,0,124, - 3,124,1,95,12,0,0,0,0,0,0,0,0,124,2,115, - 13,116,1,0,0,0,0,0,0,0,0,124,1,100,3,100, - 0,171,3,0,0,0,0,0,0,128,18,9,0,124,0,106, - 26,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,124,1,95,14,0,0,0,0,0,0,0,0,9, - 0,124,0,124,1,95,15,0,0,0,0,0,0,0,0,124, - 2,115,13,116,1,0,0,0,0,0,0,0,0,124,1,100, - 4,100,0,171,3,0,0,0,0,0,0,128,30,124,0,106, - 10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,129,18,9,0,124,0,106,10,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,124,1,95, - 16,0,0,0,0,0,0,0,0,124,0,106,34,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,114, - 80,124,2,115,13,116,1,0,0,0,0,0,0,0,0,124, - 1,100,5,100,0,171,3,0,0,0,0,0,0,128,18,9, - 0,124,0,106,36,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,124,1,95,11,0,0,0,0,0, - 0,0,0,124,2,115,13,116,1,0,0,0,0,0,0,0, - 0,124,1,100,6,100,0,171,3,0,0,0,0,0,0,128, - 32,124,0,106,38,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,129,20,9,0,124,0,106,38,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,124,1,95,20,0,0,0,0,0,0,0,0,124,1,83, - 0,124,1,83,0,35,0,116,6,0,0,0,0,0,0,0, - 0,36,0,114,4,1,0,89,0,144,1,140,61,119,0,120, - 3,89,0,119,1,35,0,116,6,0,0,0,0,0,0,0, - 0,36,0,114,3,1,0,89,0,140,207,119,0,120,3,89, - 0,119,1,35,0,116,6,0,0,0,0,0,0,0,0,36, - 0,114,3,1,0,89,0,140,189,119,0,120,3,89,0,119, - 1,35,0,116,6,0,0,0,0,0,0,0,0,36,0,114, - 3,1,0,89,0,140,196,119,0,120,3,89,0,119,1,35, - 0,116,6,0,0,0,0,0,0,0,0,36,0,114,3,1, - 0,89,0,140,166,119,0,120,3,89,0,119,1,35,0,116, - 6,0,0,0,0,0,0,0,0,36,0,114,3,1,0,89, - 0,140,136,119,0,120,3,89,0,119,1,35,0,116,6,0, - 0,0,0,0,0,0,0,36,0,114,4,1,0,89,0,124, - 1,83,0,119,0,120,3,89,0,119,1,41,7,78,114,11, - 0,0,0,114,203,0,0,0,218,11,95,95,112,97,99,107, - 97,103,101,95,95,114,7,1,0,0,114,212,0,0,0,114, - 5,1,0,0,41,21,114,15,0,0,0,114,26,0,0,0, - 114,11,0,0,0,114,4,0,0,0,114,213,0,0,0,114, - 223,0,0,0,114,239,0,0,0,114,240,0,0,0,218,15, - 78,97,109,101,115,112,97,99,101,76,111,97,100,101,114,114, - 41,0,0,0,218,5,95,112,97,116,104,114,212,0,0,0, - 114,203,0,0,0,114,246,0,0,0,114,13,1,0,0,114, - 204,0,0,0,114,7,1,0,0,114,233,0,0,0,114,218, - 0,0,0,114,232,0,0,0,114,5,1,0,0,41,5,114, - 199,0,0,0,114,200,0,0,0,114,11,1,0,0,114,213, - 0,0,0,114,14,1,0,0,115,5,0,0,0,32,32,32, - 32,32,114,7,0,0,0,218,18,95,105,110,105,116,95,109, - 111,100,117,108,101,95,97,116,116,114,115,114,16,1,0,0, - 221,2,0,0,115,245,1,0,0,128,0,241,8,0,9,17, - 148,71,152,70,160,74,176,4,211,20,53,208,20,61,240,2, - 3,9,17,216,30,34,159,105,153,105,136,70,140,79,241,8, - 0,8,16,148,55,152,54,160,60,176,20,211,19,54,208,19, - 62,216,17,21,151,27,145,27,136,6,216,11,17,136,62,224, - 15,19,215,15,46,209,15,46,208,15,58,220,19,38,208,19, - 46,220,26,45,208,20,45,220,34,53,215,34,69,209,34,69, - 144,15,224,25,40,215,25,48,209,25,48,176,31,211,25,65, - 144,6,216,31,35,215,31,62,209,31,62,144,6,148,12,216, - 30,36,144,4,148,11,240,22,0,35,39,144,6,148,15,240, - 2,3,9,17,216,32,38,136,70,212,12,29,241,8,0,8, - 16,148,55,152,54,160,61,176,36,211,19,55,208,19,63,240, - 2,3,9,17,216,33,37,167,27,161,27,136,70,212,12,30, - 240,8,3,5,13,216,26,30,136,6,140,15,241,8,0,8, - 16,148,55,152,54,160,58,168,116,211,19,52,208,19,60,216, - 11,15,215,11,42,209,11,42,208,11,54,240,4,3,13,21, - 216,34,38,215,34,65,209,34,65,144,6,148,15,240,8,0, - 8,12,215,7,24,210,7,24,217,11,19,148,119,152,118,160, - 122,176,52,211,23,56,208,23,64,240,2,3,13,21,216,34, - 38,167,43,161,43,144,6,148,15,241,8,0,12,20,148,119, - 152,118,160,124,176,84,211,23,58,208,23,66,216,15,19,143, - 123,137,123,208,15,38,240,2,3,17,25,216,40,44,175,11, - 169,11,144,70,212,20,37,240,6,0,12,18,128,77,136,54, - 128,77,248,244,127,1,0,16,30,242,0,1,9,17,218,12, - 16,240,3,1,9,17,251,244,56,0,16,30,242,0,1,9, - 17,217,12,16,240,3,1,9,17,251,244,12,0,16,30,242, - 0,1,9,17,217,12,16,240,3,1,9,17,251,244,10,0, - 12,26,242,0,1,5,13,217,8,12,240,3,1,5,13,251, - 244,16,0,20,34,242,0,1,13,21,217,16,20,240,3,1, - 13,21,251,244,14,0,20,34,242,0,1,13,21,217,16,20, - 240,3,1,13,21,251,244,14,0,24,38,242,0,1,17,25, - 216,20,24,216,11,17,128,77,240,5,1,17,25,250,115,125, - 0,0,0,145,17,69,19,0,194,24,7,69,35,0,194,47, - 17,69,50,0,195,1,7,70,1,0,195,36,17,70,16,0, - 196,17,17,70,31,0,196,62,17,70,46,0,197,19,9,69, - 32,3,197,31,1,69,32,3,197,35,9,69,47,3,197,46, - 1,69,47,3,197,50,9,69,62,3,197,61,1,69,62,3, - 198,1,9,70,13,3,198,12,1,70,13,3,198,16,9,70, - 28,3,198,27,1,70,28,3,198,31,9,70,43,3,198,42, - 1,70,43,3,198,46,9,70,59,3,198,58,1,70,59,3, - 99,1,0,0,0,0,0,0,0,0,0,0,0,4,0,0, - 0,3,0,0,0,243,246,0,0,0,151,0,100,1,125,1, - 116,1,0,0,0,0,0,0,0,0,124,0,106,2,0,0, + 0,0,0,0,0,0,0,100,3,171,2,0,0,0,0,0, + 0,114,11,116,7,0,0,0,0,0,0,0,0,100,4,171, + 1,0,0,0,0,0,0,130,1,124,1,128,21,116,9,0, + 0,0,0,0,0,0,0,124,0,106,10,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,171,1,0, + 0,0,0,0,0,125,1,116,13,0,0,0,0,0,0,0, + 0,124,0,124,1,171,2,0,0,0,0,0,0,1,0,124, + 1,83,0,41,5,122,43,67,114,101,97,116,101,32,97,32, + 109,111,100,117,108,101,32,98,97,115,101,100,32,111,110,32, + 116,104,101,32,112,114,111,118,105,100,101,100,32,115,112,101, + 99,46,78,218,13,99,114,101,97,116,101,95,109,111,100,117, + 108,101,218,11,101,120,101,99,95,109,111,100,117,108,101,122, + 66,108,111,97,100,101,114,115,32,116,104,97,116,32,100,101, + 102,105,110,101,32,101,120,101,99,95,109,111,100,117,108,101, + 40,41,32,109,117,115,116,32,97,108,115,111,32,100,101,102, + 105,110,101,32,99,114,101,97,116,101,95,109,111,100,117,108, + 101,40,41,41,7,114,13,0,0,0,114,213,0,0,0,114, + 18,1,0,0,114,178,0,0,0,114,27,0,0,0,114,26, + 0,0,0,114,16,1,0,0,169,2,114,199,0,0,0,114, + 200,0,0,0,115,2,0,0,0,32,32,114,7,0,0,0, + 218,16,109,111,100,117,108,101,95,102,114,111,109,95,115,112, + 101,99,114,21,1,0,0,38,3,0,0,115,111,0,0,0, + 128,0,240,6,0,14,18,128,70,220,7,14,136,116,143,123, + 137,123,152,79,212,7,44,240,6,0,18,22,151,27,145,27, + 215,17,42,209,17,42,168,52,211,17,48,137,6,220,9,16, + 144,20,151,27,145,27,152,109,212,9,44,220,14,25,240,0, + 1,27,61,243,0,1,15,62,240,0,1,9,62,224,7,13, + 128,126,220,17,28,152,84,159,89,153,89,211,17,39,136,6, + 220,4,22,144,116,152,86,212,4,36,216,11,17,128,77,114, + 22,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,120,1,0,0,151,0, + 124,0,106,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,128,2,100,1,110,11,124,0,106,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,125,1,124,0,106,2,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,128,89,124,0,106,4, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,125,2,124,2,128,6,100,2,124,1,155,2,100,3, + 157,3,83,0,116,6,0,0,0,0,0,0,0,0,129,54, + 116,9,0,0,0,0,0,0,0,0,124,2,116,6,0,0, + 0,0,0,0,0,0,106,10,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,171,2,0,0,0,0, + 0,0,114,28,100,2,124,1,155,2,100,4,116,13,0,0, + 0,0,0,0,0,0,124,2,106,14,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,171,1,0,0, + 0,0,0,0,155,0,100,3,157,5,83,0,100,2,124,1, + 155,2,100,5,124,2,155,2,100,6,157,5,83,0,124,0, + 106,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,114,19,100,2,124,1,155,2,100,7,124,0, + 106,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,155,2,100,3,157,5,83,0,100,2,124,0, + 106,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,155,2,100,5,124,0,106,2,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,155,0, + 100,6,157,5,83,0,41,8,122,38,82,101,116,117,114,110, + 32,116,104,101,32,114,101,112,114,32,116,111,32,117,115,101, + 32,102,111,114,32,116,104,101,32,109,111,100,117,108,101,46, + 114,205,0,0,0,114,206,0,0,0,114,208,0,0,0,122, + 18,32,40,110,97,109,101,115,112,97,99,101,41,32,102,114, + 111,109,32,114,209,0,0,0,114,210,0,0,0,114,207,0, + 0,0,41,9,114,26,0,0,0,114,218,0,0,0,114,213, + 0,0,0,114,239,0,0,0,218,10,105,115,105,110,115,116, + 97,110,99,101,114,14,1,0,0,114,6,1,0,0,114,15, + 1,0,0,114,233,0,0,0,41,3,114,199,0,0,0,114, + 26,0,0,0,114,213,0,0,0,115,3,0,0,0,32,32, + 32,114,7,0,0,0,114,211,0,0,0,114,211,0,0,0, + 55,3,0,0,115,200,0,0,0,128,0,224,18,22,151,41, + 145,41,208,18,35,137,51,168,20,175,25,169,25,128,68,216, + 7,11,135,123,129,123,208,7,26,216,17,21,151,27,145,27, + 136,6,216,11,17,136,62,216,21,29,152,100,152,88,160,81, + 208,19,39,208,12,39,228,12,31,208,12,43,220,16,26,152, + 54,212,35,54,215,35,70,209,35,70,212,16,71,224,21,29, + 152,100,152,88,208,37,55,188,4,184,86,191,92,185,92,211, + 56,74,208,55,75,200,49,208,19,77,208,12,77,224,21,29, + 152,100,152,88,160,82,168,6,160,122,176,18,208,19,52,208, + 12,52,224,11,15,215,11,28,210,11,28,216,21,29,152,100, + 152,88,160,86,168,68,175,75,169,75,168,63,184,33,208,19, + 60,208,12,60,224,21,29,152,100,159,105,153,105,152,93,168, + 34,168,84,175,91,169,91,168,77,184,18,208,19,60,208,12, + 60,114,22,0,0,0,99,2,0,0,0,0,0,0,0,0, + 0,0,0,6,0,0,0,3,0,0,0,243,132,3,0,0, + 151,0,124,0,106,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,125,2,116,3,0,0,0,0, + 0,0,0,0,124,2,171,1,0,0,0,0,0,0,53,0, + 1,0,116,4,0,0,0,0,0,0,0,0,106,6,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 100,2,171,2,0,0,0,0,0,0,114,28,124,0,106,2, + 106,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,124,2,171,1,0,0,0,0,0,0,124,1, + 117,1,114,19,100,1,124,2,155,2,100,2,157,3,125,3, + 116,11,0,0,0,0,0,0,0,0,124,3,124,2,172,3, + 171,2,0,0,0,0,0,0,130,1,9,0,124,0,106,12, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,128,50,124,0,106,14,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,128,23,116,11,0,0, + 0,0,0,0,0,0,100,5,124,0,106,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,172,3, + 171,2,0,0,0,0,0,0,130,1,116,17,0,0,0,0, + 0,0,0,0,124,0,124,1,100,6,172,7,171,3,0,0, + 0,0,0,0,1,0,110,141,116,17,0,0,0,0,0,0, + 0,0,124,0,124,1,100,6,172,7,171,3,0,0,0,0, + 0,0,1,0,116,19,0,0,0,0,0,0,0,0,124,0, + 106,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,100,8,171,2,0,0,0,0,0,0,115,78, + 116,21,0,0,0,0,0,0,0,0,124,0,106,12,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,106,5,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,124,0,171,1,0,0,0,0,0,0, - 125,1,110,33,116,1,0,0,0,0,0,0,0,0,124,0, - 106,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,100,3,171,2,0,0,0,0,0,0,114,11, - 116,7,0,0,0,0,0,0,0,0,100,4,171,1,0,0, - 0,0,0,0,130,1,124,1,128,21,116,9,0,0,0,0, - 0,0,0,0,124,0,106,10,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,171,1,0,0,0,0, - 0,0,125,1,116,13,0,0,0,0,0,0,0,0,124,0, - 124,1,171,2,0,0,0,0,0,0,1,0,124,1,83,0, - 41,5,122,43,67,114,101,97,116,101,32,97,32,109,111,100, - 117,108,101,32,98,97,115,101,100,32,111,110,32,116,104,101, - 32,112,114,111,118,105,100,101,100,32,115,112,101,99,46,78, - 218,13,99,114,101,97,116,101,95,109,111,100,117,108,101,218, - 11,101,120,101,99,95,109,111,100,117,108,101,122,66,108,111, - 97,100,101,114,115,32,116,104,97,116,32,100,101,102,105,110, - 101,32,101,120,101,99,95,109,111,100,117,108,101,40,41,32, - 109,117,115,116,32,97,108,115,111,32,100,101,102,105,110,101, - 32,99,114,101,97,116,101,95,109,111,100,117,108,101,40,41, - 41,7,114,13,0,0,0,114,213,0,0,0,114,18,1,0, - 0,114,178,0,0,0,114,27,0,0,0,114,26,0,0,0, - 114,16,1,0,0,169,2,114,199,0,0,0,114,200,0,0, - 0,115,2,0,0,0,32,32,114,7,0,0,0,218,16,109, - 111,100,117,108,101,95,102,114,111,109,95,115,112,101,99,114, - 21,1,0,0,38,3,0,0,115,111,0,0,0,128,0,240, - 6,0,14,18,128,70,220,7,14,136,116,143,123,137,123,152, - 79,212,7,44,240,6,0,18,22,151,27,145,27,215,17,42, - 209,17,42,168,52,211,17,48,137,6,220,9,16,144,20,151, - 27,145,27,152,109,212,9,44,220,14,25,240,0,1,27,61, - 243,0,1,15,62,240,0,1,9,62,224,7,13,128,126,220, - 17,28,152,84,159,89,153,89,211,17,39,136,6,220,4,22, - 144,116,152,86,212,4,36,216,11,17,128,77,114,22,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,120,1,0,0,151,0,124,0,106, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,128,2,100,1,110,11,124,0,106,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,125, - 1,124,0,106,2,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,128,89,124,0,106,4,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,125, - 2,124,2,128,6,100,2,124,1,155,2,100,3,157,3,83, - 0,116,6,0,0,0,0,0,0,0,0,129,54,116,9,0, - 0,0,0,0,0,0,0,124,2,116,6,0,0,0,0,0, - 0,0,0,106,10,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,171,2,0,0,0,0,0,0,114, - 28,100,2,124,1,155,2,100,4,116,13,0,0,0,0,0, - 0,0,0,124,2,106,14,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,171,1,0,0,0,0,0, - 0,155,0,100,3,157,5,83,0,100,2,124,1,155,2,100, - 5,124,2,155,2,100,6,157,5,83,0,124,0,106,16,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,114,19,100,2,124,1,155,2,100,7,124,0,106,2,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,155,2,100,3,157,5,83,0,100,2,124,0,106,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,155,2,100,5,124,0,106,2,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,155,0,100,6,157, - 5,83,0,41,8,122,38,82,101,116,117,114,110,32,116,104, - 101,32,114,101,112,114,32,116,111,32,117,115,101,32,102,111, - 114,32,116,104,101,32,109,111,100,117,108,101,46,114,205,0, - 0,0,114,206,0,0,0,114,208,0,0,0,122,18,32,40, - 110,97,109,101,115,112,97,99,101,41,32,102,114,111,109,32, - 114,209,0,0,0,114,210,0,0,0,114,207,0,0,0,41, - 9,114,26,0,0,0,114,218,0,0,0,114,213,0,0,0, - 114,239,0,0,0,218,10,105,115,105,110,115,116,97,110,99, - 101,114,14,1,0,0,114,6,1,0,0,114,15,1,0,0, - 114,233,0,0,0,41,3,114,199,0,0,0,114,26,0,0, - 0,114,213,0,0,0,115,3,0,0,0,32,32,32,114,7, - 0,0,0,114,211,0,0,0,114,211,0,0,0,55,3,0, - 0,115,200,0,0,0,128,0,224,18,22,151,41,145,41,208, - 18,35,137,51,168,20,175,25,169,25,128,68,216,7,11,135, - 123,129,123,208,7,26,216,17,21,151,27,145,27,136,6,216, - 11,17,136,62,216,21,29,152,100,152,88,160,81,208,19,39, - 208,12,39,228,12,31,208,12,43,220,16,26,152,54,212,35, - 54,215,35,70,209,35,70,212,16,71,224,21,29,152,100,152, - 88,208,37,55,188,4,184,86,191,92,185,92,211,56,74,208, - 55,75,200,49,208,19,77,208,12,77,224,21,29,152,100,152, - 88,160,82,168,6,160,122,176,18,208,19,52,208,12,52,224, - 11,15,215,11,28,210,11,28,216,21,29,152,100,152,88,160, - 86,168,68,175,75,169,75,168,63,184,33,208,19,60,208,12, - 60,224,21,29,152,100,159,105,153,105,152,93,168,34,168,84, - 175,91,169,91,168,77,184,18,208,19,60,208,12,60,114,22, - 0,0,0,99,2,0,0,0,0,0,0,0,0,0,0,0, - 6,0,0,0,3,0,0,0,243,132,3,0,0,151,0,124, - 0,106,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,125,2,116,3,0,0,0,0,0,0,0, - 0,124,2,171,1,0,0,0,0,0,0,53,0,1,0,116, - 4,0,0,0,0,0,0,0,0,106,6,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,106,9,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,124,2,171,1,0,0,0,0,0,0,124,1,117,1,114, - 19,100,1,124,2,155,2,100,2,157,3,125,3,116,11,0, - 0,0,0,0,0,0,0,124,3,124,2,172,3,171,2,0, - 0,0,0,0,0,130,1,9,0,124,0,106,12,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128, - 50,124,0,106,14,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,128,23,116,11,0,0,0,0,0, - 0,0,0,100,5,124,0,106,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,172,3,171,2,0, - 0,0,0,0,0,130,1,116,17,0,0,0,0,0,0,0, - 0,124,0,124,1,100,6,172,7,171,3,0,0,0,0,0, - 0,1,0,110,141,116,17,0,0,0,0,0,0,0,0,124, - 0,124,1,100,6,172,7,171,3,0,0,0,0,0,0,1, - 0,116,19,0,0,0,0,0,0,0,0,124,0,106,12,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,100,8,171,2,0,0,0,0,0,0,115,78,116,21,0, - 0,0,0,0,0,0,0,124,0,106,12,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,171,1,0, - 0,0,0,0,0,155,0,100,9,157,2,125,3,116,22,0, - 0,0,0,0,0,0,0,106,25,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,124,3,116,26,0, - 0,0,0,0,0,0,0,171,2,0,0,0,0,0,0,1, - 0,124,0,106,12,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,106,29,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,124,2,171,1,0, - 0,0,0,0,0,1,0,110,27,124,0,106,12,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,106, - 31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,124,1,171,1,0,0,0,0,0,0,1,0,116, - 4,0,0,0,0,0,0,0,0,106,6,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,106,33,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,124,0,106,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,171,1,0,0,0,0,0,0,125, - 1,124,1,116,4,0,0,0,0,0,0,0,0,106,6,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,124,0,106,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,60,0,0,0,9,0,100,4,100, - 4,100,4,171,2,0,0,0,0,0,0,1,0,124,1,83, - 0,35,0,116,4,0,0,0,0,0,0,0,0,106,6,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,106,33,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,124,0,106,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,171,1,0,0,0, - 0,0,0,125,1,124,1,116,4,0,0,0,0,0,0,0, - 0,106,6,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,124,0,106,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,60,0,0,0,119, - 0,120,3,89,0,119,1,35,0,49,0,115,1,119,2,1, - 0,89,0,1,0,1,0,124,1,83,0,120,3,89,0,119, - 1,41,10,122,70,69,120,101,99,117,116,101,32,116,104,101, - 32,115,112,101,99,39,115,32,115,112,101,99,105,102,105,101, - 100,32,109,111,100,117,108,101,32,105,110,32,97,110,32,101, - 120,105,115,116,105,110,103,32,109,111,100,117,108,101,39,115, - 32,110,97,109,101,115,112,97,99,101,46,122,7,109,111,100, - 117,108,101,32,122,19,32,110,111,116,32,105,110,32,115,121, - 115,46,109,111,100,117,108,101,115,114,25,0,0,0,78,250, - 14,109,105,115,115,105,110,103,32,108,111,97,100,101,114,84, - 114,10,1,0,0,114,19,1,0,0,250,55,46,101,120,101, - 99,95,109,111,100,117,108,101,40,41,32,110,111,116,32,102, - 111,117,110,100,59,32,102,97,108,108,105,110,103,32,98,97, - 99,107,32,116,111,32,108,111,97,100,95,109,111,100,117,108, - 101,40,41,41,17,114,26,0,0,0,114,142,0,0,0,114, - 24,0,0,0,114,195,0,0,0,114,76,0,0,0,114,178, - 0,0,0,114,213,0,0,0,114,223,0,0,0,114,16,1, - 0,0,114,13,0,0,0,114,8,0,0,0,114,191,0,0, - 0,114,192,0,0,0,218,13,73,109,112,111,114,116,87,97, - 114,110,105,110,103,218,11,108,111,97,100,95,109,111,100,117, - 108,101,114,19,1,0,0,114,68,0,0,0,41,4,114,199, - 0,0,0,114,200,0,0,0,114,26,0,0,0,114,198,0, - 0,0,115,4,0,0,0,32,32,32,32,114,7,0,0,0, - 114,196,0,0,0,114,196,0,0,0,77,3,0,0,115,88, - 1,0,0,128,0,224,11,15,143,57,137,57,128,68,220,9, - 27,152,68,211,9,33,241,0,23,5,44,220,11,14,143,59, - 137,59,143,63,137,63,152,52,211,11,32,168,6,209,11,46, - 216,20,27,152,68,152,56,208,35,54,208,18,55,136,67,220, - 18,29,152,99,168,4,212,18,45,208,12,45,240,2,19,9, - 44,216,15,19,143,123,137,123,208,15,34,216,19,23,215,19, - 50,209,19,50,208,19,58,220,26,37,208,38,54,184,84,191, - 89,185,89,212,26,71,208,20,71,228,16,34,160,52,168,22, - 184,36,214,16,63,228,16,34,160,52,168,22,184,36,213,16, - 63,220,23,30,152,116,159,123,153,123,168,77,212,23,58,220, - 30,42,168,52,175,59,169,59,211,30,55,208,29,56,240,0, - 1,57,59,240,0,1,28,59,144,67,228,20,29,151,78,145, - 78,160,51,172,13,212,20,54,216,20,24,151,75,145,75,215, - 20,43,209,20,43,168,68,213,20,49,224,20,24,151,75,145, - 75,215,20,43,209,20,43,168,70,212,20,51,244,8,0,22, - 25,151,91,145,91,151,95,145,95,160,84,167,89,161,89,211, - 21,47,136,70,216,37,43,140,67,143,75,137,75,152,4,159, - 9,153,9,210,12,34,247,47,23,5,44,240,48,0,12,18, - 128,77,248,244,5,0,22,25,151,91,145,91,151,95,145,95, - 160,84,167,89,161,89,211,21,47,136,70,216,37,43,140,67, - 143,75,137,75,152,4,159,9,153,9,210,12,34,250,247,47, - 23,5,44,240,48,0,12,18,128,77,250,115,38,0,0,0, - 152,53,70,53,3,193,14,67,11,69,42,2,196,25,65,6, - 70,53,3,197,42,65,8,70,50,5,198,50,3,70,53,3, - 198,53,5,70,63,7,99,1,0,0,0,0,0,0,0,0, - 0,0,0,5,0,0,0,3,0,0,0,243,18,3,0,0, - 151,0,9,0,124,0,106,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,106,3,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,124,0, - 106,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,171,1,0,0,0,0,0,0,1,0,116,6, - 0,0,0,0,0,0,0,0,106,8,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,106,11,0,0, + 171,1,0,0,0,0,0,0,155,0,100,9,157,2,125,3, + 116,22,0,0,0,0,0,0,0,0,106,25,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,124,3, + 116,26,0,0,0,0,0,0,0,0,171,2,0,0,0,0, + 0,0,1,0,124,0,106,12,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,106,29,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,124,2, + 171,1,0,0,0,0,0,0,1,0,110,27,124,0,106,12, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 124,0,106,4,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,171,1,0,0,0,0,0,0,125,1, - 124,1,116,6,0,0,0,0,0,0,0,0,106,8,0,0, + 0,0,106,31,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,124,1,171,1,0,0,0,0,0,0, + 1,0,116,4,0,0,0,0,0,0,0,0,106,6,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 124,0,106,4,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,60,0,0,0,116,13,0,0,0,0, - 0,0,0,0,124,1,100,1,100,0,171,3,0,0,0,0, - 0,0,128,18,9,0,124,0,106,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,124,1,95,7, - 0,0,0,0,0,0,0,0,116,13,0,0,0,0,0,0, - 0,0,124,1,100,2,100,0,171,3,0,0,0,0,0,0, - 128,65,9,0,124,1,106,18,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,124,1,95,10,0,0, - 0,0,0,0,0,0,116,23,0,0,0,0,0,0,0,0, - 124,1,100,3,171,2,0,0,0,0,0,0,115,35,124,0, - 106,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,106,25,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,100,4,171,1,0,0,0,0, - 0,0,100,5,25,0,0,0,124,1,95,10,0,0,0,0, - 0,0,0,0,116,13,0,0,0,0,0,0,0,0,124,1, - 100,6,100,0,171,3,0,0,0,0,0,0,128,10,9,0, - 124,0,124,1,95,13,0,0,0,0,0,0,0,0,124,1, - 83,0,124,1,83,0,35,0,1,0,124,0,106,4,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 116,6,0,0,0,0,0,0,0,0,106,8,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,118,0, - 114,70,116,6,0,0,0,0,0,0,0,0,106,8,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 106,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,124,0,106,4,0,0,0,0,0,0,0,0, + 106,33,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,124,0,106,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,171,1,0,0,0,0, - 0,0,125,1,124,1,116,6,0,0,0,0,0,0,0,0, - 106,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,124,0,106,4,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,60,0,0,0,130,0, - 120,3,89,0,119,1,35,0,116,16,0,0,0,0,0,0, - 0,0,36,0,114,3,1,0,89,0,140,218,119,0,120,3, - 89,0,119,1,35,0,116,16,0,0,0,0,0,0,0,0, - 36,0,114,3,1,0,89,0,140,155,119,0,120,3,89,0, - 119,1,35,0,116,16,0,0,0,0,0,0,0,0,36,0, - 114,4,1,0,89,0,124,1,83,0,119,0,120,3,89,0, - 119,1,41,7,78,114,203,0,0,0,114,13,1,0,0,114, - 7,1,0,0,114,244,0,0,0,114,125,0,0,0,114,204, - 0,0,0,41,14,114,213,0,0,0,114,28,1,0,0,114, - 26,0,0,0,114,24,0,0,0,114,195,0,0,0,114,68, - 0,0,0,114,15,0,0,0,114,203,0,0,0,114,4,0, - 0,0,114,11,0,0,0,114,13,1,0,0,114,13,0,0, - 0,114,245,0,0,0,114,204,0,0,0,114,20,1,0,0, - 115,2,0,0,0,32,32,114,7,0,0,0,218,25,95,108, - 111,97,100,95,98,97,99,107,119,97,114,100,95,99,111,109, - 112,97,116,105,98,108,101,114,30,1,0,0,107,3,0,0, - 115,89,1,0,0,128,0,240,6,6,5,14,216,8,12,143, - 11,137,11,215,8,31,209,8,31,160,4,167,9,161,9,212, - 8,42,244,16,0,14,17,143,91,137,91,143,95,137,95,152, - 84,159,89,153,89,211,13,39,128,70,216,29,35,132,67,135, - 75,129,75,144,4,151,9,145,9,209,4,26,220,7,14,136, - 118,144,124,160,84,211,7,42,208,7,50,240,2,3,9,17, - 216,32,36,167,11,161,11,136,70,212,12,29,244,6,0,8, - 15,136,118,144,125,160,100,211,7,43,208,7,51,240,2,8, - 9,17,240,8,0,34,40,167,31,161,31,136,70,212,12,30, - 220,19,26,152,54,160,58,212,19,46,216,37,41,167,89,161, - 89,215,37,57,209,37,57,184,35,211,37,62,184,113,209,37, - 65,144,6,212,16,34,244,6,0,8,15,136,118,144,122,160, - 52,211,7,40,208,7,48,240,2,3,9,17,216,30,34,136, - 70,140,79,240,6,0,12,18,128,77,136,54,128,77,248,240, - 59,4,5,14,216,11,15,143,57,137,57,156,3,159,11,153, - 11,209,11,35,220,21,24,151,91,145,91,151,95,145,95,160, - 84,167,89,161,89,211,21,47,136,70,216,37,43,140,67,143, - 75,137,75,152,4,159,9,153,9,209,12,34,216,8,13,251, - 244,16,0,16,30,242,0,1,9,17,217,12,16,240,3,1, - 9,17,251,244,20,0,16,30,242,0,1,9,17,217,12,16, - 240,3,1,9,17,251,244,10,0,16,30,242,0,1,9,17, - 216,12,16,216,11,17,128,77,240,5,1,9,17,250,115,67, - 0,0,0,130,37,67,51,0,193,59,17,69,27,0,194,26, - 65,0,69,42,0,195,40,7,69,57,0,195,51,65,37,69, - 24,3,197,27,9,69,39,3,197,38,1,69,39,3,197,42, - 9,69,54,3,197,53,1,69,54,3,197,57,9,70,6,3, - 198,5,1,70,6,3,99,1,0,0,0,0,0,0,0,0, - 0,0,0,5,0,0,0,3,0,0,0,243,16,3,0,0, - 151,0,124,0,106,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,129,83,116,3,0,0,0,0, + 0,0,125,1,124,1,116,4,0,0,0,0,0,0,0,0, + 106,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,124,0,106,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,100,1,171,2,0,0, - 0,0,0,0,115,61,116,5,0,0,0,0,0,0,0,0, - 124,0,106,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,171,1,0,0,0,0,0,0,155,0, - 100,2,157,2,125,1,116,6,0,0,0,0,0,0,0,0, - 106,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,124,1,116,10,0,0,0,0,0,0,0,0, - 171,2,0,0,0,0,0,0,1,0,116,13,0,0,0,0, - 0,0,0,0,124,0,171,1,0,0,0,0,0,0,83,0, - 116,15,0,0,0,0,0,0,0,0,124,0,171,1,0,0, - 0,0,0,0,125,2,100,3,124,0,95,8,0,0,0,0, - 0,0,0,0,9,0,124,2,116,18,0,0,0,0,0,0, - 0,0,106,20,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,124,0,106,22,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,60,0,0,0, - 9,0,124,0,106,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,128,35,124,0,106,24,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 128,50,116,27,0,0,0,0,0,0,0,0,100,4,124,0, - 106,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,172,5,171,2,0,0,0,0,0,0,130,1, - 124,0,106,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,106,29,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,124,2,171,1,0,0, - 0,0,0,0,1,0,116,18,0,0,0,0,0,0,0,0, - 106,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,60,0,0,0,9,0, + 100,4,100,4,100,4,171,2,0,0,0,0,0,0,1,0, + 124,1,83,0,35,0,116,4,0,0,0,0,0,0,0,0, + 106,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,106,33,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,124,0,106,22,0,0,0,0, + 0,0,0,0,0,0,0,0,124,0,106,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,171,1, - 0,0,0,0,0,0,125,2,124,2,116,18,0,0,0,0, - 0,0,0,0,106,20,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,124,0,106,22,0,0,0,0, + 0,0,0,0,0,0,125,1,124,1,116,4,0,0,0,0, + 0,0,0,0,106,6,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,124,0,106,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,60,0, - 0,0,116,35,0,0,0,0,0,0,0,0,100,6,124,0, - 106,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,124,0,106,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,171,3,0,0,0,0, - 0,0,1,0,100,7,124,0,95,8,0,0,0,0,0,0, - 0,0,124,2,83,0,35,0,1,0,9,0,116,18,0,0, - 0,0,0,0,0,0,106,20,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,124,0,106,22,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 61,0,130,0,35,0,116,30,0,0,0,0,0,0,0,0, - 36,0,114,3,1,0,89,0,130,0,119,0,120,3,89,0, - 119,1,120,3,89,0,119,1,35,0,100,7,124,0,95,8, - 0,0,0,0,0,0,0,0,119,0,120,3,89,0,119,1, - 41,8,78,114,19,1,0,0,114,26,1,0,0,84,114,25, - 1,0,0,114,25,0,0,0,122,18,105,109,112,111,114,116, - 32,123,33,114,125,32,35,32,123,33,114,125,70,41,18,114, - 213,0,0,0,114,13,0,0,0,114,8,0,0,0,114,191, - 0,0,0,114,192,0,0,0,114,27,1,0,0,114,30,1, - 0,0,114,21,1,0,0,218,13,95,105,110,105,116,105,97, - 108,105,122,105,110,103,114,24,0,0,0,114,195,0,0,0, - 114,26,0,0,0,114,223,0,0,0,114,178,0,0,0,114, - 19,1,0,0,114,73,0,0,0,114,68,0,0,0,114,173, - 0,0,0,41,3,114,199,0,0,0,114,198,0,0,0,114, - 200,0,0,0,115,3,0,0,0,32,32,32,114,7,0,0, - 0,218,14,95,108,111,97,100,95,117,110,108,111,99,107,101, - 100,114,33,1,0,0,143,3,0,0,115,72,1,0,0,128, - 0,224,7,11,135,123,129,123,208,7,30,228,15,22,144,116, - 151,123,145,123,160,77,212,15,50,220,22,34,160,52,167,59, - 161,59,211,22,47,208,21,48,240,0,1,49,52,240,0,1, - 20,52,136,67,228,12,21,143,78,137,78,152,51,164,13,212, - 12,46,220,19,44,168,84,211,19,50,208,12,50,228,13,29, - 152,100,211,13,35,128,70,240,10,0,26,30,128,68,212,4, - 22,240,2,23,5,35,216,33,39,140,3,143,11,137,11,144, - 68,151,73,145,73,209,8,30,240,2,12,9,18,216,15,19, - 143,123,137,123,208,15,34,216,19,23,215,19,50,209,19,50, - 208,19,58,220,26,37,208,38,54,184,84,191,89,185,89,212, - 26,71,208,20,71,240,6,0,17,21,151,11,145,11,215,16, - 39,209,16,39,168,6,212,16,47,244,22,0,18,21,151,27, - 145,27,151,31,145,31,160,20,167,25,161,25,211,17,43,136, - 6,216,33,39,140,3,143,11,137,11,144,68,151,73,145,73, - 209,8,30,220,8,24,208,25,45,168,116,175,121,169,121,184, - 36,191,43,185,43,212,8,70,224,29,34,136,4,212,8,26, - 224,11,17,128,77,248,240,33,5,9,18,240,2,3,13,21, - 220,20,23,151,75,145,75,160,4,167,9,161,9,208,20,42, - 240,6,0,13,18,248,244,5,0,20,28,242,0,1,13,21, - 216,16,20,216,12,17,240,5,1,13,21,254,240,22,0,30, - 35,136,4,213,8,26,250,115,74,0,0,0,193,51,29,69, - 60,0,194,17,65,10,69,11,0,195,27,65,39,69,60,0, - 197,11,2,69,57,3,197,14,27,69,42,2,197,41,1,69, - 57,3,197,42,9,69,54,5,197,51,2,69,57,3,197,53, - 1,69,54,5,197,54,3,69,57,3,197,57,3,69,60,0, - 197,60,9,70,5,3,99,1,0,0,0,0,0,0,0,0, - 0,0,0,6,0,0,0,3,0,0,0,243,110,0,0,0, - 151,0,116,1,0,0,0,0,0,0,0,0,124,0,106,2, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,171,1,0,0,0,0,0,0,53,0,1,0,116,5, - 0,0,0,0,0,0,0,0,124,0,171,1,0,0,0,0, - 0,0,99,2,100,1,100,1,100,1,171,2,0,0,0,0, - 0,0,1,0,83,0,35,0,49,0,115,1,119,2,1,0, - 89,0,1,0,1,0,121,1,120,3,89,0,119,1,41,2, - 122,191,82,101,116,117,114,110,32,97,32,110,101,119,32,109, - 111,100,117,108,101,32,111,98,106,101,99,116,44,32,108,111, - 97,100,101,100,32,98,121,32,116,104,101,32,115,112,101,99, - 39,115,32,108,111,97,100,101,114,46,10,10,32,32,32,32, - 84,104,101,32,109,111,100,117,108,101,32,105,115,32,110,111, - 116,32,97,100,100,101,100,32,116,111,32,105,116,115,32,112, - 97,114,101,110,116,46,10,10,32,32,32,32,73,102,32,97, - 32,109,111,100,117,108,101,32,105,115,32,97,108,114,101,97, - 100,121,32,105,110,32,115,121,115,46,109,111,100,117,108,101, - 115,44,32,116,104,97,116,32,101,120,105,115,116,105,110,103, - 32,109,111,100,117,108,101,32,103,101,116,115,10,32,32,32, - 32,99,108,111,98,98,101,114,101,100,46,10,10,32,32,32, - 32,78,41,3,114,142,0,0,0,114,26,0,0,0,114,33, - 1,0,0,169,1,114,199,0,0,0,115,1,0,0,0,32, - 114,7,0,0,0,114,197,0,0,0,114,197,0,0,0,188, - 3,0,0,115,45,0,0,0,128,0,244,18,0,10,28,152, - 68,159,73,153,73,211,9,38,241,0,1,5,36,220,15,29, - 152,100,211,15,35,247,3,1,5,36,247,0,1,5,36,242, - 0,1,5,36,250,115,8,0,0,0,150,11,43,3,171,5, - 52,7,99,0,0,0,0,0,0,0,0,0,0,0,0,3, - 0,0,0,0,0,0,0,243,164,0,0,0,151,0,101,0, - 90,1,100,0,90,2,100,1,90,3,100,2,90,4,101,5, - 100,10,100,4,132,1,171,0,0,0,0,0,0,0,90,6, - 101,7,100,5,132,0,171,0,0,0,0,0,0,0,90,8, - 101,7,100,6,132,0,171,0,0,0,0,0,0,0,90,9, - 101,5,101,10,100,7,132,0,171,0,0,0,0,0,0,0, - 171,0,0,0,0,0,0,0,90,11,101,5,101,10,100,8, - 132,0,171,0,0,0,0,0,0,0,171,0,0,0,0,0, - 0,0,90,12,101,5,101,10,100,9,132,0,171,0,0,0, - 0,0,0,0,171,0,0,0,0,0,0,0,90,13,2,0, - 101,5,101,14,171,1,0,0,0,0,0,0,90,15,121,3, - 41,11,218,15,66,117,105,108,116,105,110,73,109,112,111,114, - 116,101,114,122,144,77,101,116,97,32,112,97,116,104,32,105, - 109,112,111,114,116,32,102,111,114,32,98,117,105,108,116,45, - 105,110,32,109,111,100,117,108,101,115,46,10,10,32,32,32, - 32,65,108,108,32,109,101,116,104,111,100,115,32,97,114,101, - 32,101,105,116,104,101,114,32,99,108,97,115,115,32,111,114, - 32,115,116,97,116,105,99,32,109,101,116,104,111,100,115,32, - 116,111,32,97,118,111,105,100,32,116,104,101,32,110,101,101, - 100,32,116,111,10,32,32,32,32,105,110,115,116,97,110,116, - 105,97,116,101,32,116,104,101,32,99,108,97,115,115,46,10, - 10,32,32,32,32,122,8,98,117,105,108,116,45,105,110,78, - 99,4,0,0,0,0,0,0,0,0,0,0,0,5,0,0, - 0,3,0,0,0,243,94,0,0,0,151,0,116,0,0,0, - 0,0,0,0,0,0,106,3,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,124,1,171,1,0,0, - 0,0,0,0,114,24,116,5,0,0,0,0,0,0,0,0, - 124,1,124,0,124,0,106,6,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,172,1,171,3,0,0, - 0,0,0,0,83,0,121,0,41,2,78,114,4,1,0,0, - 41,4,114,151,0,0,0,218,10,105,115,95,98,117,105,108, - 116,105,110,114,194,0,0,0,114,255,0,0,0,41,4,218, - 3,99,108,115,114,180,0,0,0,218,4,112,97,116,104,218, - 6,116,97,114,103,101,116,115,4,0,0,0,32,32,32,32, - 114,7,0,0,0,218,9,102,105,110,100,95,115,112,101,99, - 122,25,66,117,105,108,116,105,110,73,109,112,111,114,116,101, - 114,46,102,105,110,100,95,115,112,101,99,214,3,0,0,115, - 36,0,0,0,128,0,228,11,15,143,63,137,63,152,56,212, - 11,36,220,19,35,160,72,168,99,184,35,191,43,185,43,212, - 19,70,208,12,70,224,19,23,114,22,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,182,0,0,0,151,0,124,0,106,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,116, - 2,0,0,0,0,0,0,0,0,106,4,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,118,1,114, - 36,116,7,0,0,0,0,0,0,0,0,124,0,106,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,155,2,100,1,157,2,124,0,106,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,172,2,171, - 2,0,0,0,0,0,0,130,1,116,9,0,0,0,0,0, - 0,0,0,116,10,0,0,0,0,0,0,0,0,106,12,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,124,0,171,2,0,0,0,0,0,0,83,0,41,3,122, - 24,67,114,101,97,116,101,32,97,32,98,117,105,108,116,45, - 105,110,32,109,111,100,117,108,101,114,176,0,0,0,114,25, - 0,0,0,41,7,114,26,0,0,0,114,24,0,0,0,114, - 177,0,0,0,114,178,0,0,0,114,161,0,0,0,114,151, - 0,0,0,218,14,99,114,101,97,116,101,95,98,117,105,108, - 116,105,110,114,35,1,0,0,115,1,0,0,0,32,114,7, - 0,0,0,114,18,1,0,0,122,29,66,117,105,108,116,105, - 110,73,109,112,111,114,116,101,114,46,99,114,101,97,116,101, - 95,109,111,100,117,108,101,221,3,0,0,115,75,0,0,0, - 128,0,240,6,0,12,16,143,57,137,57,156,67,215,28,52, - 209,28,52,209,11,52,220,18,29,160,20,167,25,161,25,160, - 13,208,45,70,208,30,71,216,35,39,167,57,161,57,244,3, - 1,19,46,240,0,1,13,46,228,15,40,172,20,215,41,60, - 209,41,60,184,100,211,15,67,208,8,67,114,22,0,0,0, + 0,0,119,0,120,3,89,0,119,1,35,0,49,0,115,1, + 119,2,1,0,89,0,1,0,1,0,124,1,83,0,120,3, + 89,0,119,1,41,10,122,70,69,120,101,99,117,116,101,32, + 116,104,101,32,115,112,101,99,39,115,32,115,112,101,99,105, + 102,105,101,100,32,109,111,100,117,108,101,32,105,110,32,97, + 110,32,101,120,105,115,116,105,110,103,32,109,111,100,117,108, + 101,39,115,32,110,97,109,101,115,112,97,99,101,46,122,7, + 109,111,100,117,108,101,32,122,19,32,110,111,116,32,105,110, + 32,115,121,115,46,109,111,100,117,108,101,115,114,25,0,0, + 0,78,250,14,109,105,115,115,105,110,103,32,108,111,97,100, + 101,114,84,114,10,1,0,0,114,19,1,0,0,250,55,46, + 101,120,101,99,95,109,111,100,117,108,101,40,41,32,110,111, + 116,32,102,111,117,110,100,59,32,102,97,108,108,105,110,103, + 32,98,97,99,107,32,116,111,32,108,111,97,100,95,109,111, + 100,117,108,101,40,41,41,17,114,26,0,0,0,114,142,0, + 0,0,114,24,0,0,0,114,195,0,0,0,114,76,0,0, + 0,114,178,0,0,0,114,213,0,0,0,114,223,0,0,0, + 114,16,1,0,0,114,13,0,0,0,114,8,0,0,0,114, + 191,0,0,0,114,192,0,0,0,218,13,73,109,112,111,114, + 116,87,97,114,110,105,110,103,218,11,108,111,97,100,95,109, + 111,100,117,108,101,114,19,1,0,0,114,68,0,0,0,41, + 4,114,199,0,0,0,114,200,0,0,0,114,26,0,0,0, + 114,198,0,0,0,115,4,0,0,0,32,32,32,32,114,7, + 0,0,0,114,196,0,0,0,114,196,0,0,0,77,3,0, + 0,115,88,1,0,0,128,0,224,11,15,143,57,137,57,128, + 68,220,9,27,152,68,211,9,33,241,0,23,5,44,220,11, + 14,143,59,137,59,143,63,137,63,152,52,211,11,32,168,6, + 209,11,46,216,20,27,152,68,152,56,208,35,54,208,18,55, + 136,67,220,18,29,152,99,168,4,212,18,45,208,12,45,240, + 2,19,9,44,216,15,19,143,123,137,123,208,15,34,216,19, + 23,215,19,50,209,19,50,208,19,58,220,26,37,208,38,54, + 184,84,191,89,185,89,212,26,71,208,20,71,228,16,34,160, + 52,168,22,184,36,214,16,63,228,16,34,160,52,168,22,184, + 36,213,16,63,220,23,30,152,116,159,123,153,123,168,77,212, + 23,58,220,30,42,168,52,175,59,169,59,211,30,55,208,29, + 56,240,0,1,57,59,240,0,1,28,59,144,67,228,20,29, + 151,78,145,78,160,51,172,13,212,20,54,216,20,24,151,75, + 145,75,215,20,43,209,20,43,168,68,213,20,49,224,20,24, + 151,75,145,75,215,20,43,209,20,43,168,70,212,20,51,244, + 8,0,22,25,151,91,145,91,151,95,145,95,160,84,167,89, + 161,89,211,21,47,136,70,216,37,43,140,67,143,75,137,75, + 152,4,159,9,153,9,210,12,34,247,47,23,5,44,240,48, + 0,12,18,128,77,248,244,5,0,22,25,151,91,145,91,151, + 95,145,95,160,84,167,89,161,89,211,21,47,136,70,216,37, + 43,140,67,143,75,137,75,152,4,159,9,153,9,210,12,34, + 250,247,47,23,5,44,240,48,0,12,18,128,77,250,115,38, + 0,0,0,152,53,70,53,3,193,14,67,11,69,42,2,196, + 25,65,6,70,53,3,197,42,65,8,70,50,5,198,50,3, + 70,53,3,198,53,5,70,63,7,99,1,0,0,0,0,0, + 0,0,0,0,0,0,5,0,0,0,3,0,0,0,243,18, + 3,0,0,151,0,9,0,124,0,106,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,106,3,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,124,0,106,4,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,171,1,0,0,0,0,0,0,1, + 0,116,6,0,0,0,0,0,0,0,0,106,8,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,106, + 11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,124,0,106,4,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,171,1,0,0,0,0,0, + 0,125,1,124,1,116,6,0,0,0,0,0,0,0,0,106, + 8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,124,0,106,4,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,60,0,0,0,116,13,0, + 0,0,0,0,0,0,0,124,1,100,1,100,0,171,3,0, + 0,0,0,0,0,128,18,9,0,124,0,106,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,124, + 1,95,7,0,0,0,0,0,0,0,0,116,13,0,0,0, + 0,0,0,0,0,124,1,100,2,100,0,171,3,0,0,0, + 0,0,0,128,65,9,0,124,1,106,18,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,124,1,95, + 10,0,0,0,0,0,0,0,0,116,23,0,0,0,0,0, + 0,0,0,124,1,100,3,171,2,0,0,0,0,0,0,115, + 35,124,0,106,4,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,106,25,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,100,4,171,1,0, + 0,0,0,0,0,100,5,25,0,0,0,124,1,95,10,0, + 0,0,0,0,0,0,0,116,13,0,0,0,0,0,0,0, + 0,124,1,100,6,100,0,171,3,0,0,0,0,0,0,128, + 10,9,0,124,0,124,1,95,13,0,0,0,0,0,0,0, + 0,124,1,83,0,124,1,83,0,35,0,1,0,124,0,106, + 4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,116,6,0,0,0,0,0,0,0,0,106,8,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,118,0,114,70,116,6,0,0,0,0,0,0,0,0,106, + 8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,106,11,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,124,0,106,4,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,171,1,0, + 0,0,0,0,0,125,1,124,1,116,6,0,0,0,0,0, + 0,0,0,106,8,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,124,0,106,4,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,60,0,0, + 0,130,0,120,3,89,0,119,1,35,0,116,16,0,0,0, + 0,0,0,0,0,36,0,114,3,1,0,89,0,140,218,119, + 0,120,3,89,0,119,1,35,0,116,16,0,0,0,0,0, + 0,0,0,36,0,114,3,1,0,89,0,140,155,119,0,120, + 3,89,0,119,1,35,0,116,16,0,0,0,0,0,0,0, + 0,36,0,114,4,1,0,89,0,124,1,83,0,119,0,120, + 3,89,0,119,1,41,7,78,114,203,0,0,0,114,13,1, + 0,0,114,7,1,0,0,114,244,0,0,0,114,125,0,0, + 0,114,204,0,0,0,41,14,114,213,0,0,0,114,28,1, + 0,0,114,26,0,0,0,114,24,0,0,0,114,195,0,0, + 0,114,68,0,0,0,114,15,0,0,0,114,203,0,0,0, + 114,4,0,0,0,114,11,0,0,0,114,13,1,0,0,114, + 13,0,0,0,114,245,0,0,0,114,204,0,0,0,114,20, + 1,0,0,115,2,0,0,0,32,32,114,7,0,0,0,218, + 25,95,108,111,97,100,95,98,97,99,107,119,97,114,100,95, + 99,111,109,112,97,116,105,98,108,101,114,30,1,0,0,107, + 3,0,0,115,89,1,0,0,128,0,240,6,6,5,14,216, + 8,12,143,11,137,11,215,8,31,209,8,31,160,4,167,9, + 161,9,212,8,42,244,16,0,14,17,143,91,137,91,143,95, + 137,95,152,84,159,89,153,89,211,13,39,128,70,216,29,35, + 132,67,135,75,129,75,144,4,151,9,145,9,209,4,26,220, + 7,14,136,118,144,124,160,84,211,7,42,208,7,50,240,2, + 3,9,17,216,32,36,167,11,161,11,136,70,212,12,29,244, + 6,0,8,15,136,118,144,125,160,100,211,7,43,208,7,51, + 240,2,8,9,17,240,8,0,34,40,167,31,161,31,136,70, + 212,12,30,220,19,26,152,54,160,58,212,19,46,216,37,41, + 167,89,161,89,215,37,57,209,37,57,184,35,211,37,62,184, + 113,209,37,65,144,6,212,16,34,244,6,0,8,15,136,118, + 144,122,160,52,211,7,40,208,7,48,240,2,3,9,17,216, + 30,34,136,70,140,79,240,6,0,12,18,128,77,136,54,128, + 77,248,240,59,4,5,14,216,11,15,143,57,137,57,156,3, + 159,11,153,11,209,11,35,220,21,24,151,91,145,91,151,95, + 145,95,160,84,167,89,161,89,211,21,47,136,70,216,37,43, + 140,67,143,75,137,75,152,4,159,9,153,9,209,12,34,216, + 8,13,251,244,16,0,16,30,242,0,1,9,17,217,12,16, + 240,3,1,9,17,251,244,20,0,16,30,242,0,1,9,17, + 217,12,16,240,3,1,9,17,251,244,10,0,16,30,242,0, + 1,9,17,216,12,16,216,11,17,128,77,240,5,1,9,17, + 250,115,67,0,0,0,130,37,67,51,0,193,59,17,69,27, + 0,194,26,65,0,69,42,0,195,40,7,69,57,0,195,51, + 65,37,69,24,3,197,27,9,69,39,3,197,38,1,69,39, + 3,197,42,9,69,54,3,197,53,1,69,54,3,197,57,9, + 70,6,3,198,5,1,70,6,3,99,1,0,0,0,0,0, + 0,0,0,0,0,0,5,0,0,0,3,0,0,0,243,16, + 3,0,0,151,0,124,0,106,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,129,83,116,3,0, + 0,0,0,0,0,0,0,124,0,106,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,100,1,171, + 2,0,0,0,0,0,0,115,61,116,5,0,0,0,0,0, + 0,0,0,124,0,106,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,171,1,0,0,0,0,0, + 0,155,0,100,2,157,2,125,1,116,6,0,0,0,0,0, + 0,0,0,106,9,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,124,1,116,10,0,0,0,0,0, + 0,0,0,171,2,0,0,0,0,0,0,1,0,116,13,0, + 0,0,0,0,0,0,0,124,0,171,1,0,0,0,0,0, + 0,83,0,116,15,0,0,0,0,0,0,0,0,124,0,171, + 1,0,0,0,0,0,0,125,2,100,3,124,0,95,8,0, + 0,0,0,0,0,0,0,9,0,124,2,116,18,0,0,0, + 0,0,0,0,0,106,20,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,124,0,106,22,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,60, + 0,0,0,9,0,124,0,106,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,128,35,124,0,106, + 24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,128,50,116,27,0,0,0,0,0,0,0,0,100, + 4,124,0,106,22,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,172,5,171,2,0,0,0,0,0, + 0,130,1,124,0,106,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,106,29,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,124,2,171, + 1,0,0,0,0,0,0,1,0,116,18,0,0,0,0,0, + 0,0,0,106,20,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,106,33,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,124,0,106,22,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,171,1,0,0,0,0,0,0,125,2,124,2,116,18,0, + 0,0,0,0,0,0,0,106,20,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,124,0,106,22,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,60,0,0,0,116,35,0,0,0,0,0,0,0,0,100, + 6,124,0,106,22,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,124,0,106,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,171,3,0, + 0,0,0,0,0,1,0,100,7,124,0,95,8,0,0,0, + 0,0,0,0,0,124,2,83,0,35,0,1,0,9,0,116, + 18,0,0,0,0,0,0,0,0,106,20,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,124,0,106, + 22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,61,0,130,0,35,0,116,30,0,0,0,0,0, + 0,0,0,36,0,114,3,1,0,89,0,130,0,119,0,120, + 3,89,0,119,1,120,3,89,0,119,1,35,0,100,7,124, + 0,95,8,0,0,0,0,0,0,0,0,119,0,120,3,89, + 0,119,1,41,8,78,114,19,1,0,0,114,26,1,0,0, + 84,114,25,1,0,0,114,25,0,0,0,122,18,105,109,112, + 111,114,116,32,123,33,114,125,32,35,32,123,33,114,125,70, + 41,18,114,213,0,0,0,114,13,0,0,0,114,8,0,0, + 0,114,191,0,0,0,114,192,0,0,0,114,27,1,0,0, + 114,30,1,0,0,114,21,1,0,0,218,13,95,105,110,105, + 116,105,97,108,105,122,105,110,103,114,24,0,0,0,114,195, + 0,0,0,114,26,0,0,0,114,223,0,0,0,114,178,0, + 0,0,114,19,1,0,0,114,73,0,0,0,114,68,0,0, + 0,114,173,0,0,0,41,3,114,199,0,0,0,114,198,0, + 0,0,114,200,0,0,0,115,3,0,0,0,32,32,32,114, + 7,0,0,0,218,14,95,108,111,97,100,95,117,110,108,111, + 99,107,101,100,114,33,1,0,0,143,3,0,0,115,72,1, + 0,0,128,0,224,7,11,135,123,129,123,208,7,30,228,15, + 22,144,116,151,123,145,123,160,77,212,15,50,220,22,34,160, + 52,167,59,161,59,211,22,47,208,21,48,240,0,1,49,52, + 240,0,1,20,52,136,67,228,12,21,143,78,137,78,152,51, + 164,13,212,12,46,220,19,44,168,84,211,19,50,208,12,50, + 228,13,29,152,100,211,13,35,128,70,240,10,0,26,30,128, + 68,212,4,22,240,2,23,5,35,216,33,39,140,3,143,11, + 137,11,144,68,151,73,145,73,209,8,30,240,2,12,9,18, + 216,15,19,143,123,137,123,208,15,34,216,19,23,215,19,50, + 209,19,50,208,19,58,220,26,37,208,38,54,184,84,191,89, + 185,89,212,26,71,208,20,71,240,6,0,17,21,151,11,145, + 11,215,16,39,209,16,39,168,6,212,16,47,244,22,0,18, + 21,151,27,145,27,151,31,145,31,160,20,167,25,161,25,211, + 17,43,136,6,216,33,39,140,3,143,11,137,11,144,68,151, + 73,145,73,209,8,30,220,8,24,208,25,45,168,116,175,121, + 169,121,184,36,191,43,185,43,212,8,70,224,29,34,136,4, + 212,8,26,224,11,17,128,77,248,240,33,5,9,18,240,2, + 3,13,21,220,20,23,151,75,145,75,160,4,167,9,161,9, + 208,20,42,240,6,0,13,18,248,244,5,0,20,28,242,0, + 1,13,21,216,16,20,216,12,17,240,5,1,13,21,254,240, + 22,0,30,35,136,4,213,8,26,250,115,74,0,0,0,193, + 51,29,69,60,0,194,17,65,10,69,11,0,195,27,65,39, + 69,60,0,197,11,2,69,57,3,197,14,27,69,42,2,197, + 41,1,69,57,3,197,42,9,69,54,5,197,51,2,69,57, + 3,197,53,1,69,54,5,197,54,3,69,57,3,197,57,3, + 69,60,0,197,60,9,70,5,3,99,1,0,0,0,0,0, + 0,0,0,0,0,0,6,0,0,0,3,0,0,0,243,110, + 0,0,0,151,0,116,1,0,0,0,0,0,0,0,0,124, + 0,106,2,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,171,1,0,0,0,0,0,0,53,0,1, + 0,116,5,0,0,0,0,0,0,0,0,124,0,171,1,0, + 0,0,0,0,0,99,2,100,1,100,1,100,1,171,2,0, + 0,0,0,0,0,1,0,83,0,35,0,49,0,115,1,119, + 2,1,0,89,0,1,0,1,0,121,1,120,3,89,0,119, + 1,41,2,122,191,82,101,116,117,114,110,32,97,32,110,101, + 119,32,109,111,100,117,108,101,32,111,98,106,101,99,116,44, + 32,108,111,97,100,101,100,32,98,121,32,116,104,101,32,115, + 112,101,99,39,115,32,108,111,97,100,101,114,46,10,10,32, + 32,32,32,84,104,101,32,109,111,100,117,108,101,32,105,115, + 32,110,111,116,32,97,100,100,101,100,32,116,111,32,105,116, + 115,32,112,97,114,101,110,116,46,10,10,32,32,32,32,73, + 102,32,97,32,109,111,100,117,108,101,32,105,115,32,97,108, + 114,101,97,100,121,32,105,110,32,115,121,115,46,109,111,100, + 117,108,101,115,44,32,116,104,97,116,32,101,120,105,115,116, + 105,110,103,32,109,111,100,117,108,101,32,103,101,116,115,10, + 32,32,32,32,99,108,111,98,98,101,114,101,100,46,10,10, + 32,32,32,32,78,41,3,114,142,0,0,0,114,26,0,0, + 0,114,33,1,0,0,169,1,114,199,0,0,0,115,1,0, + 0,0,32,114,7,0,0,0,114,197,0,0,0,114,197,0, + 0,0,188,3,0,0,115,45,0,0,0,128,0,244,18,0, + 10,28,152,68,159,73,153,73,211,9,38,241,0,1,5,36, + 220,15,29,152,100,211,15,35,247,3,1,5,36,247,0,1, + 5,36,242,0,1,5,36,250,115,8,0,0,0,150,11,43, + 3,171,5,52,7,99,0,0,0,0,0,0,0,0,0,0, + 0,0,3,0,0,0,0,0,0,0,243,164,0,0,0,151, + 0,101,0,90,1,100,0,90,2,100,1,90,3,100,2,90, + 4,101,5,100,10,100,4,132,1,171,0,0,0,0,0,0, + 0,90,6,101,7,100,5,132,0,171,0,0,0,0,0,0, + 0,90,8,101,7,100,6,132,0,171,0,0,0,0,0,0, + 0,90,9,101,5,101,10,100,7,132,0,171,0,0,0,0, + 0,0,0,171,0,0,0,0,0,0,0,90,11,101,5,101, + 10,100,8,132,0,171,0,0,0,0,0,0,0,171,0,0, + 0,0,0,0,0,90,12,101,5,101,10,100,9,132,0,171, + 0,0,0,0,0,0,0,171,0,0,0,0,0,0,0,90, + 13,2,0,101,5,101,14,171,1,0,0,0,0,0,0,90, + 15,121,3,41,11,218,15,66,117,105,108,116,105,110,73,109, + 112,111,114,116,101,114,122,144,77,101,116,97,32,112,97,116, + 104,32,105,109,112,111,114,116,32,102,111,114,32,98,117,105, + 108,116,45,105,110,32,109,111,100,117,108,101,115,46,10,10, + 32,32,32,32,65,108,108,32,109,101,116,104,111,100,115,32, + 97,114,101,32,101,105,116,104,101,114,32,99,108,97,115,115, + 32,111,114,32,115,116,97,116,105,99,32,109,101,116,104,111, + 100,115,32,116,111,32,97,118,111,105,100,32,116,104,101,32, + 110,101,101,100,32,116,111,10,32,32,32,32,105,110,115,116, + 97,110,116,105,97,116,101,32,116,104,101,32,99,108,97,115, + 115,46,10,10,32,32,32,32,122,8,98,117,105,108,116,45, + 105,110,78,99,4,0,0,0,0,0,0,0,0,0,0,0, + 5,0,0,0,3,0,0,0,243,94,0,0,0,151,0,116, + 0,0,0,0,0,0,0,0,0,106,3,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,124,1,171, + 1,0,0,0,0,0,0,114,24,116,5,0,0,0,0,0, + 0,0,0,124,1,124,0,124,0,106,6,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,172,1,171, + 3,0,0,0,0,0,0,83,0,121,0,41,2,78,114,4, + 1,0,0,41,4,114,151,0,0,0,218,10,105,115,95,98, + 117,105,108,116,105,110,114,194,0,0,0,114,255,0,0,0, + 41,4,218,3,99,108,115,114,180,0,0,0,218,4,112,97, + 116,104,218,6,116,97,114,103,101,116,115,4,0,0,0,32, + 32,32,32,114,7,0,0,0,218,9,102,105,110,100,95,115, + 112,101,99,122,25,66,117,105,108,116,105,110,73,109,112,111, + 114,116,101,114,46,102,105,110,100,95,115,112,101,99,214,3, + 0,0,115,36,0,0,0,128,0,228,11,15,143,63,137,63, + 152,56,212,11,36,220,19,35,160,72,168,99,184,35,191,43, + 185,43,212,19,70,208,12,70,224,19,23,114,22,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,56,0,0,0,151,0,116,1,0,0, - 0,0,0,0,0,0,116,2,0,0,0,0,0,0,0,0, - 106,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,124,0,171,2,0,0,0,0,0,0,1,0, - 121,1,41,2,122,22,69,120,101,99,32,97,32,98,117,105, - 108,116,45,105,110,32,109,111,100,117,108,101,78,41,3,114, - 161,0,0,0,114,151,0,0,0,218,12,101,120,101,99,95, - 98,117,105,108,116,105,110,41,1,114,200,0,0,0,115,1, - 0,0,0,32,114,7,0,0,0,114,19,1,0,0,122,27, - 66,117,105,108,116,105,110,73,109,112,111,114,116,101,114,46, - 101,120,101,99,95,109,111,100,117,108,101,229,3,0,0,115, - 20,0,0,0,128,0,244,6,0,9,34,164,36,215,34,51, - 209,34,51,176,86,213,8,60,114,22,0,0,0,99,2,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0, - 0,0,243,4,0,0,0,151,0,121,1,41,2,122,57,82, - 101,116,117,114,110,32,78,111,110,101,32,97,115,32,98,117, - 105,108,116,45,105,110,32,109,111,100,117,108,101,115,32,100, - 111,32,110,111,116,32,104,97,118,101,32,99,111,100,101,32, - 111,98,106,101,99,116,115,46,78,114,31,0,0,0,169,2, - 114,40,1,0,0,114,180,0,0,0,115,2,0,0,0,32, - 32,114,7,0,0,0,218,8,103,101,116,95,99,111,100,101, - 122,24,66,117,105,108,116,105,110,73,109,112,111,114,116,101, - 114,46,103,101,116,95,99,111,100,101,234,3,0,0,243,7, - 0,0,0,128,0,240,8,0,16,20,114,22,0,0,0,99, - 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 3,0,0,0,243,4,0,0,0,151,0,121,1,41,2,122, - 56,82,101,116,117,114,110,32,78,111,110,101,32,97,115,32, - 98,117,105,108,116,45,105,110,32,109,111,100,117,108,101,115, - 32,100,111,32,110,111,116,32,104,97,118,101,32,115,111,117, - 114,99,101,32,99,111,100,101,46,78,114,31,0,0,0,114, - 49,1,0,0,115,2,0,0,0,32,32,114,7,0,0,0, - 218,10,103,101,116,95,115,111,117,114,99,101,122,26,66,117, - 105,108,116,105,110,73,109,112,111,114,116,101,114,46,103,101, - 116,95,115,111,117,114,99,101,240,3,0,0,114,51,1,0, - 0,114,22,0,0,0,99,2,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,3,0,0,0,243,4,0,0,0, - 151,0,121,1,41,2,122,52,82,101,116,117,114,110,32,70, - 97,108,115,101,32,97,115,32,98,117,105,108,116,45,105,110, - 32,109,111,100,117,108,101,115,32,97,114,101,32,110,101,118, - 101,114,32,112,97,99,107,97,103,101,115,46,70,114,31,0, + 0,3,0,0,0,243,182,0,0,0,151,0,124,0,106,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,116,2,0,0,0,0,0,0,0,0,106,4,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 118,1,114,36,116,7,0,0,0,0,0,0,0,0,124,0, + 106,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,155,2,100,1,157,2,124,0,106,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 172,2,171,2,0,0,0,0,0,0,130,1,116,9,0,0, + 0,0,0,0,0,0,116,10,0,0,0,0,0,0,0,0, + 106,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,124,0,171,2,0,0,0,0,0,0,83,0, + 41,3,122,24,67,114,101,97,116,101,32,97,32,98,117,105, + 108,116,45,105,110,32,109,111,100,117,108,101,114,176,0,0, + 0,114,25,0,0,0,41,7,114,26,0,0,0,114,24,0, + 0,0,114,177,0,0,0,114,178,0,0,0,114,161,0,0, + 0,114,151,0,0,0,218,14,99,114,101,97,116,101,95,98, + 117,105,108,116,105,110,114,35,1,0,0,115,1,0,0,0, + 32,114,7,0,0,0,114,18,1,0,0,122,29,66,117,105, + 108,116,105,110,73,109,112,111,114,116,101,114,46,99,114,101, + 97,116,101,95,109,111,100,117,108,101,221,3,0,0,115,75, + 0,0,0,128,0,240,6,0,12,16,143,57,137,57,156,67, + 215,28,52,209,28,52,209,11,52,220,18,29,160,20,167,25, + 161,25,160,13,208,45,70,208,30,71,216,35,39,167,57,161, + 57,244,3,1,19,46,240,0,1,13,46,228,15,40,172,20, + 215,41,60,209,41,60,184,100,211,15,67,208,8,67,114,22, + 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,56,0,0,0,151,0,116, + 1,0,0,0,0,0,0,0,0,116,2,0,0,0,0,0, + 0,0,0,106,4,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,124,0,171,2,0,0,0,0,0, + 0,1,0,121,1,41,2,122,22,69,120,101,99,32,97,32, + 98,117,105,108,116,45,105,110,32,109,111,100,117,108,101,78, + 41,3,114,161,0,0,0,114,151,0,0,0,218,12,101,120, + 101,99,95,98,117,105,108,116,105,110,41,1,114,200,0,0, + 0,115,1,0,0,0,32,114,7,0,0,0,114,19,1,0, + 0,122,27,66,117,105,108,116,105,110,73,109,112,111,114,116, + 101,114,46,101,120,101,99,95,109,111,100,117,108,101,229,3, + 0,0,115,20,0,0,0,128,0,244,6,0,9,34,164,36, + 215,34,51,209,34,51,176,86,213,8,60,114,22,0,0,0, + 99,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,3,0,0,0,243,4,0,0,0,151,0,121,1,41,2, + 122,57,82,101,116,117,114,110,32,78,111,110,101,32,97,115, + 32,98,117,105,108,116,45,105,110,32,109,111,100,117,108,101, + 115,32,100,111,32,110,111,116,32,104,97,118,101,32,99,111, + 100,101,32,111,98,106,101,99,116,115,46,78,114,31,0,0, + 0,169,2,114,40,1,0,0,114,180,0,0,0,115,2,0, + 0,0,32,32,114,7,0,0,0,218,8,103,101,116,95,99, + 111,100,101,122,24,66,117,105,108,116,105,110,73,109,112,111, + 114,116,101,114,46,103,101,116,95,99,111,100,101,234,3,0, + 0,243,7,0,0,0,128,0,240,8,0,16,20,114,22,0, + 0,0,99,2,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,3,0,0,0,243,4,0,0,0,151,0,121,1, + 41,2,122,56,82,101,116,117,114,110,32,78,111,110,101,32, + 97,115,32,98,117,105,108,116,45,105,110,32,109,111,100,117, + 108,101,115,32,100,111,32,110,111,116,32,104,97,118,101,32, + 115,111,117,114,99,101,32,99,111,100,101,46,78,114,31,0, 0,0,114,49,1,0,0,115,2,0,0,0,32,32,114,7, - 0,0,0,114,220,0,0,0,122,26,66,117,105,108,116,105, - 110,73,109,112,111,114,116,101,114,46,105,115,95,112,97,99, - 107,97,103,101,246,3,0,0,115,7,0,0,0,128,0,240, - 8,0,16,21,114,22,0,0,0,169,2,78,78,41,16,114, - 11,0,0,0,114,10,0,0,0,114,3,0,0,0,114,12, - 0,0,0,114,255,0,0,0,218,11,99,108,97,115,115,109, - 101,116,104,111,100,114,43,1,0,0,114,58,0,0,0,114, - 18,1,0,0,114,19,1,0,0,114,184,0,0,0,114,50, - 1,0,0,114,53,1,0,0,114,220,0,0,0,114,201,0, - 0,0,114,28,1,0,0,114,31,0,0,0,114,22,0,0, - 0,114,7,0,0,0,114,37,1,0,0,114,37,1,0,0, - 203,3,0,0,115,171,0,0,0,132,0,241,4,5,5,8, - 240,14,0,15,25,128,71,224,5,16,242,2,4,5,24,243, - 3,0,6,17,240,2,4,5,24,240,12,0,6,18,241,2, - 5,5,68,1,243,3,0,6,18,240,2,5,5,68,1,240, - 14,0,6,18,241,2,2,5,61,243,3,0,6,18,240,2, - 2,5,61,240,8,0,6,17,216,5,22,241,2,2,5,20, - 243,3,0,6,23,243,3,0,6,17,240,4,2,5,20,240, - 8,0,6,17,216,5,22,241,2,2,5,20,243,3,0,6, - 23,243,3,0,6,17,240,4,2,5,20,240,8,0,6,17, - 216,5,22,241,2,2,5,21,243,3,0,6,23,243,3,0, - 6,17,240,4,2,5,21,241,8,0,19,30,208,30,47,211, - 18,48,129,75,114,22,0,0,0,114,37,1,0,0,99,0, - 0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0, - 0,0,0,243,198,0,0,0,151,0,101,0,90,1,100,0, - 90,2,100,1,90,3,100,2,90,4,101,5,100,3,132,0, - 171,0,0,0,0,0,0,0,90,6,101,5,100,13,100,5, - 132,1,171,0,0,0,0,0,0,0,90,7,101,5,100,14, - 100,6,132,1,171,0,0,0,0,0,0,0,90,8,101,9, - 100,7,132,0,171,0,0,0,0,0,0,0,90,10,101,9, - 100,8,132,0,171,0,0,0,0,0,0,0,90,11,101,5, - 100,9,132,0,171,0,0,0,0,0,0,0,90,12,101,5, - 101,13,100,10,132,0,171,0,0,0,0,0,0,0,171,0, - 0,0,0,0,0,0,90,14,101,5,101,13,100,11,132,0, - 171,0,0,0,0,0,0,0,171,0,0,0,0,0,0,0, - 90,15,101,5,101,13,100,12,132,0,171,0,0,0,0,0, - 0,0,171,0,0,0,0,0,0,0,90,16,121,4,41,15, - 218,14,70,114,111,122,101,110,73,109,112,111,114,116,101,114, - 122,142,77,101,116,97,32,112,97,116,104,32,105,109,112,111, - 114,116,32,102,111,114,32,102,114,111,122,101,110,32,109,111, - 100,117,108,101,115,46,10,10,32,32,32,32,65,108,108,32, - 109,101,116,104,111,100,115,32,97,114,101,32,101,105,116,104, - 101,114,32,99,108,97,115,115,32,111,114,32,115,116,97,116, - 105,99,32,109,101,116,104,111,100,115,32,116,111,32,97,118, - 111,105,100,32,116,104,101,32,110,101,101,100,32,116,111,10, - 32,32,32,32,105,110,115,116,97,110,116,105,97,116,101,32, - 116,104,101,32,99,108,97,115,115,46,10,10,32,32,32,32, - 218,6,102,114,111,122,101,110,99,2,0,0,0,0,0,0, - 0,0,0,0,0,5,0,0,0,3,0,0,0,243,18,6, - 0,0,151,0,124,1,106,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,125,2,124,2,106,2, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,125,3,124,3,144,1,128,88,116,5,0,0,0,0, - 0,0,0,0,124,1,171,1,0,0,0,0,0,0,106,7, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,100,1,100,0,171,2,0,0,0,0,0,0,125,4, - 124,4,115,7,74,0,100,2,171,0,0,0,0,0,0,0, - 130,1,116,9,0,0,0,0,0,0,0,0,124,1,100,3, - 171,2,0,0,0,0,0,0,125,5,116,10,0,0,0,0, - 0,0,0,0,106,13,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,124,1,106,14,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,171,1, - 0,0,0,0,0,0,124,5,107,40,0,0,115,7,74,0, - 124,5,171,0,0,0,0,0,0,0,130,1,124,0,106,17, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,124,4,124,2,106,18,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,124,5,171,3,0,0, - 0,0,0,0,92,2,0,0,125,6,125,7,2,0,116,21, - 0,0,0,0,0,0,0,0,116,22,0,0,0,0,0,0, - 0,0,106,24,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,171,1,0,0,0,0,0,0,124,6, - 124,4,172,4,171,2,0,0,0,0,0,0,124,2,95,1, - 0,0,0,0,0,0,0,0,124,2,106,26,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,125,8, - 124,5,114,43,124,8,103,0,107,40,0,0,115,7,74,0, - 124,8,171,0,0,0,0,0,0,0,130,1,124,7,114,38, - 124,2,106,26,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,106,29,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,100,5,124,7,171,2, - 0,0,0,0,0,0,1,0,110,9,124,8,129,7,74,0, - 124,8,171,0,0,0,0,0,0,0,130,1,116,9,0,0, - 0,0,0,0,0,0,124,1,100,6,171,2,0,0,0,0, - 0,0,114,17,74,0,124,1,106,30,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,171,0,0,0, - 0,0,0,0,130,1,124,6,114,8,9,0,124,6,124,1, - 95,15,0,0,0,0,0,0,0,0,124,5,144,1,114,195, - 124,1,106,34,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,124,8,107,55,0,0,144,1,114,179, - 124,1,106,34,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,103,0,107,40,0,0,115,17,74,0, - 124,1,106,34,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,171,0,0,0,0,0,0,0,130,1, - 124,1,106,34,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,106,37,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,124,8,171,1,0,0, - 0,0,0,0,1,0,144,1,110,118,124,2,106,26,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 125,8,124,8,100,0,117,1,125,5,116,39,0,0,0,0, - 0,0,0,0,116,5,0,0,0,0,0,0,0,0,124,3, - 171,1,0,0,0,0,0,0,171,1,0,0,0,0,0,0, - 100,7,100,8,103,2,107,40,0,0,115,7,74,0,124,3, - 171,0,0,0,0,0,0,0,130,1,124,3,106,40,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 114,109,124,0,106,17,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,124,3,106,40,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,124,2, - 106,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,124,5,171,3,0,0,0,0,0,0,92,2, - 0,0,125,9,125,7,124,3,106,42,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,124,9,107,40, - 0,0,115,19,74,0,124,3,106,42,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,124,9,102,2, - 171,0,0,0,0,0,0,0,130,1,124,7,114,15,124,8, - 124,7,103,1,107,40,0,0,115,72,74,0,124,8,124,7, - 102,2,171,0,0,0,0,0,0,0,130,1,124,8,124,5, - 114,2,103,0,110,1,100,0,107,40,0,0,115,54,74,0, - 124,8,171,0,0,0,0,0,0,0,130,1,100,0,125,9, - 124,3,106,42,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,129,17,74,0,124,3,106,42,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 171,0,0,0,0,0,0,0,130,1,124,8,124,5,114,2, - 103,0,110,1,100,0,107,40,0,0,115,7,74,0,124,8, - 171,0,0,0,0,0,0,0,130,1,124,9,114,48,116,9, - 0,0,0,0,0,0,0,0,124,1,100,6,171,2,0,0, - 0,0,0,0,115,2,74,0,130,1,124,1,106,30,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 124,9,107,40,0,0,115,48,74,0,124,1,106,30,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 124,9,102,2,171,0,0,0,0,0,0,0,130,1,116,9, - 0,0,0,0,0,0,0,0,124,1,100,6,171,2,0,0, - 0,0,0,0,114,17,74,0,124,1,106,30,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,171,0, - 0,0,0,0,0,0,130,1,124,5,114,48,116,9,0,0, - 0,0,0,0,0,0,124,1,100,3,171,2,0,0,0,0, - 0,0,115,2,74,0,130,1,124,1,106,34,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,124,8, - 107,40,0,0,115,48,74,0,124,1,106,34,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,124,8, - 102,2,171,0,0,0,0,0,0,0,130,1,116,9,0,0, - 0,0,0,0,0,0,124,1,100,3,171,2,0,0,0,0, - 0,0,114,17,74,0,124,1,106,34,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,171,0,0,0, - 0,0,0,0,130,1,124,2,106,44,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,114,2,74,0, - 130,1,121,0,35,0,116,32,0,0,0,0,0,0,0,0, - 36,0,114,4,1,0,89,0,144,1,140,225,119,0,120,3, - 89,0,119,1,41,9,78,218,12,95,95,111,114,105,103,110, - 97,109,101,95,95,122,39,115,101,101,32,80,121,73,109,112, - 111,114,116,95,73,109,112,111,114,116,70,114,111,122,101,110, - 77,111,100,117,108,101,79,98,106,101,99,116,40,41,114,7, - 1,0,0,169,2,114,214,0,0,0,218,8,111,114,105,103, - 110,97,109,101,114,125,0,0,0,114,212,0,0,0,114,214, - 0,0,0,114,63,1,0,0,41,23,114,204,0,0,0,114, - 219,0,0,0,218,4,118,97,114,115,114,68,0,0,0,114, - 13,0,0,0,114,151,0,0,0,218,17,105,115,95,102,114, - 111,122,101,110,95,112,97,99,107,97,103,101,114,11,0,0, - 0,218,17,95,114,101,115,111,108,118,101,95,102,105,108,101, - 110,97,109,101,114,26,0,0,0,114,5,0,0,0,114,24, - 0,0,0,218,14,105,109,112,108,101,109,101,110,116,97,116, - 105,111,110,114,223,0,0,0,218,6,105,110,115,101,114,116, - 114,212,0,0,0,114,4,0,0,0,114,7,1,0,0,218, - 6,101,120,116,101,110,100,218,6,115,111,114,116,101,100,114, - 63,1,0,0,114,214,0,0,0,114,233,0,0,0,41,10, - 114,40,1,0,0,114,200,0,0,0,114,199,0,0,0,218, - 5,115,116,97,116,101,114,63,1,0,0,218,5,105,115,112, - 107,103,114,214,0,0,0,218,6,112,107,103,100,105,114,114, - 7,1,0,0,114,212,0,0,0,115,10,0,0,0,32,32, - 32,32,32,32,32,32,32,32,114,7,0,0,0,218,14,95, - 102,105,120,95,117,112,95,109,111,100,117,108,101,122,29,70, - 114,111,122,101,110,73,109,112,111,114,116,101,114,46,95,102, - 105,120,95,117,112,95,109,111,100,117,108,101,10,4,0,0, - 115,212,2,0,0,128,0,224,15,21,143,127,137,127,136,4, - 216,16,20,215,16,33,209,16,33,136,5,216,11,16,137,61, - 244,8,0,24,28,152,70,147,124,215,23,39,209,23,39,168, - 14,184,4,211,23,61,136,72,217,19,27,208,12,70,208,29, - 70,212,12,70,220,20,27,152,70,160,74,211,20,47,136,69, - 220,19,23,215,19,41,209,19,41,168,38,175,47,169,47,211, - 19,58,184,101,210,19,67,208,12,74,192,85,212,12,74,216, - 31,34,215,31,52,209,31,52,176,88,184,116,191,121,185,121, - 200,37,211,31,80,209,12,28,136,72,144,102,216,32,56,164, - 4,164,83,215,37,55,209,37,55,211,32,56,216,25,33,216, - 25,33,244,5,3,33,14,136,68,212,12,29,240,8,0,24, - 28,215,23,54,209,23,54,136,72,217,15,20,216,23,31,160, - 50,146,126,208,16,47,160,120,212,16,47,217,19,25,216,20, - 24,215,20,51,209,20,51,215,20,58,209,20,58,184,49,184, - 102,213,20,69,224,23,31,208,23,39,208,16,49,168,24,212, - 16,49,244,6,0,24,31,152,118,160,122,212,23,50,208,12, - 67,176,70,183,79,177,79,212,12,67,217,15,23,240,2,3, + 0,0,0,218,10,103,101,116,95,115,111,117,114,99,101,122, + 26,66,117,105,108,116,105,110,73,109,112,111,114,116,101,114, + 46,103,101,116,95,115,111,117,114,99,101,240,3,0,0,114, + 51,1,0,0,114,22,0,0,0,99,2,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,3,0,0,0,243,4, + 0,0,0,151,0,121,1,41,2,122,52,82,101,116,117,114, + 110,32,70,97,108,115,101,32,97,115,32,98,117,105,108,116, + 45,105,110,32,109,111,100,117,108,101,115,32,97,114,101,32, + 110,101,118,101,114,32,112,97,99,107,97,103,101,115,46,70, + 114,31,0,0,0,114,49,1,0,0,115,2,0,0,0,32, + 32,114,7,0,0,0,114,220,0,0,0,122,26,66,117,105, + 108,116,105,110,73,109,112,111,114,116,101,114,46,105,115,95, + 112,97,99,107,97,103,101,246,3,0,0,115,7,0,0,0, + 128,0,240,8,0,16,21,114,22,0,0,0,169,2,78,78, + 41,16,114,11,0,0,0,114,10,0,0,0,114,3,0,0, + 0,114,12,0,0,0,114,255,0,0,0,218,11,99,108,97, + 115,115,109,101,116,104,111,100,114,43,1,0,0,114,58,0, + 0,0,114,18,1,0,0,114,19,1,0,0,114,184,0,0, + 0,114,50,1,0,0,114,53,1,0,0,114,220,0,0,0, + 114,201,0,0,0,114,28,1,0,0,114,31,0,0,0,114, + 22,0,0,0,114,7,0,0,0,114,37,1,0,0,114,37, + 1,0,0,203,3,0,0,115,171,0,0,0,132,0,241,4, + 5,5,8,240,14,0,15,25,128,71,224,5,16,242,2,4, + 5,24,243,3,0,6,17,240,2,4,5,24,240,12,0,6, + 18,241,2,5,5,68,1,243,3,0,6,18,240,2,5,5, + 68,1,240,14,0,6,18,241,2,2,5,61,243,3,0,6, + 18,240,2,2,5,61,240,8,0,6,17,216,5,22,241,2, + 2,5,20,243,3,0,6,23,243,3,0,6,17,240,4,2, + 5,20,240,8,0,6,17,216,5,22,241,2,2,5,20,243, + 3,0,6,23,243,3,0,6,17,240,4,2,5,20,240,8, + 0,6,17,216,5,22,241,2,2,5,21,243,3,0,6,23, + 243,3,0,6,17,240,4,2,5,21,241,8,0,19,30,208, + 30,47,211,18,48,129,75,114,22,0,0,0,114,37,1,0, + 0,99,0,0,0,0,0,0,0,0,0,0,0,0,3,0, + 0,0,0,0,0,0,243,198,0,0,0,151,0,101,0,90, + 1,100,0,90,2,100,1,90,3,100,2,90,4,101,5,100, + 3,132,0,171,0,0,0,0,0,0,0,90,6,101,5,100, + 13,100,5,132,1,171,0,0,0,0,0,0,0,90,7,101, + 5,100,14,100,6,132,1,171,0,0,0,0,0,0,0,90, + 8,101,9,100,7,132,0,171,0,0,0,0,0,0,0,90, + 10,101,9,100,8,132,0,171,0,0,0,0,0,0,0,90, + 11,101,5,100,9,132,0,171,0,0,0,0,0,0,0,90, + 12,101,5,101,13,100,10,132,0,171,0,0,0,0,0,0, + 0,171,0,0,0,0,0,0,0,90,14,101,5,101,13,100, + 11,132,0,171,0,0,0,0,0,0,0,171,0,0,0,0, + 0,0,0,90,15,101,5,101,13,100,12,132,0,171,0,0, + 0,0,0,0,0,171,0,0,0,0,0,0,0,90,16,121, + 4,41,15,218,14,70,114,111,122,101,110,73,109,112,111,114, + 116,101,114,122,142,77,101,116,97,32,112,97,116,104,32,105, + 109,112,111,114,116,32,102,111,114,32,102,114,111,122,101,110, + 32,109,111,100,117,108,101,115,46,10,10,32,32,32,32,65, + 108,108,32,109,101,116,104,111,100,115,32,97,114,101,32,101, + 105,116,104,101,114,32,99,108,97,115,115,32,111,114,32,115, + 116,97,116,105,99,32,109,101,116,104,111,100,115,32,116,111, + 32,97,118,111,105,100,32,116,104,101,32,110,101,101,100,32, + 116,111,10,32,32,32,32,105,110,115,116,97,110,116,105,97, + 116,101,32,116,104,101,32,99,108,97,115,115,46,10,10,32, + 32,32,32,218,6,102,114,111,122,101,110,99,2,0,0,0, + 0,0,0,0,0,0,0,0,5,0,0,0,3,0,0,0, + 243,18,6,0,0,151,0,124,1,106,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,125,2,124, + 2,106,2,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,125,3,124,3,144,1,128,88,116,5,0, + 0,0,0,0,0,0,0,124,1,171,1,0,0,0,0,0, + 0,106,7,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,100,1,100,0,171,2,0,0,0,0,0, + 0,125,4,124,4,115,7,74,0,100,2,171,0,0,0,0, + 0,0,0,130,1,116,9,0,0,0,0,0,0,0,0,124, + 1,100,3,171,2,0,0,0,0,0,0,125,5,116,10,0, + 0,0,0,0,0,0,0,106,13,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,124,1,106,14,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,171,1,0,0,0,0,0,0,124,5,107,40,0,0,115, + 7,74,0,124,5,171,0,0,0,0,0,0,0,130,1,124, + 0,106,17,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,124,4,124,2,106,18,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,124,5,171, + 3,0,0,0,0,0,0,92,2,0,0,125,6,125,7,2, + 0,116,21,0,0,0,0,0,0,0,0,116,22,0,0,0, + 0,0,0,0,0,106,24,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,171,1,0,0,0,0,0, + 0,124,6,124,4,172,4,171,2,0,0,0,0,0,0,124, + 2,95,1,0,0,0,0,0,0,0,0,124,2,106,26,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,125,8,124,5,114,43,124,8,103,0,107,40,0,0,115, + 7,74,0,124,8,171,0,0,0,0,0,0,0,130,1,124, + 7,114,38,124,2,106,26,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,106,29,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,100,5,124, + 7,171,2,0,0,0,0,0,0,1,0,110,9,124,8,129, + 7,74,0,124,8,171,0,0,0,0,0,0,0,130,1,116, + 9,0,0,0,0,0,0,0,0,124,1,100,6,171,2,0, + 0,0,0,0,0,114,17,74,0,124,1,106,30,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,171, + 0,0,0,0,0,0,0,130,1,124,6,114,8,9,0,124, + 6,124,1,95,15,0,0,0,0,0,0,0,0,124,5,144, + 1,114,195,124,1,106,34,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,124,8,107,55,0,0,144, + 1,114,179,124,1,106,34,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,103,0,107,40,0,0,115, + 17,74,0,124,1,106,34,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,171,0,0,0,0,0,0, + 0,130,1,124,1,106,34,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,106,37,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,124,8,171, + 1,0,0,0,0,0,0,1,0,144,1,110,118,124,2,106, + 26,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,125,8,124,8,100,0,117,1,125,5,116,39,0, + 0,0,0,0,0,0,0,116,5,0,0,0,0,0,0,0, + 0,124,3,171,1,0,0,0,0,0,0,171,1,0,0,0, + 0,0,0,100,7,100,8,103,2,107,40,0,0,115,7,74, + 0,124,3,171,0,0,0,0,0,0,0,130,1,124,3,106, + 40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,114,109,124,0,106,17,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,124,3,106,40,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,124,2,106,18,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,124,5,171,3,0,0,0,0,0, + 0,92,2,0,0,125,9,125,7,124,3,106,42,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,124, + 9,107,40,0,0,115,19,74,0,124,3,106,42,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,124, + 9,102,2,171,0,0,0,0,0,0,0,130,1,124,7,114, + 15,124,8,124,7,103,1,107,40,0,0,115,72,74,0,124, + 8,124,7,102,2,171,0,0,0,0,0,0,0,130,1,124, + 8,124,5,114,2,103,0,110,1,100,0,107,40,0,0,115, + 54,74,0,124,8,171,0,0,0,0,0,0,0,130,1,100, + 0,125,9,124,3,106,42,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,129,17,74,0,124,3,106, + 42,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,171,0,0,0,0,0,0,0,130,1,124,8,124, + 5,114,2,103,0,110,1,100,0,107,40,0,0,115,7,74, + 0,124,8,171,0,0,0,0,0,0,0,130,1,124,9,114, + 48,116,9,0,0,0,0,0,0,0,0,124,1,100,6,171, + 2,0,0,0,0,0,0,115,2,74,0,130,1,124,1,106, + 30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,124,9,107,40,0,0,115,48,74,0,124,1,106, + 30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,124,9,102,2,171,0,0,0,0,0,0,0,130, + 1,116,9,0,0,0,0,0,0,0,0,124,1,100,6,171, + 2,0,0,0,0,0,0,114,17,74,0,124,1,106,30,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,171,0,0,0,0,0,0,0,130,1,124,5,114,48,116, + 9,0,0,0,0,0,0,0,0,124,1,100,3,171,2,0, + 0,0,0,0,0,115,2,74,0,130,1,124,1,106,34,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,124,8,107,40,0,0,115,48,74,0,124,1,106,34,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,124,8,102,2,171,0,0,0,0,0,0,0,130,1,116, + 9,0,0,0,0,0,0,0,0,124,1,100,3,171,2,0, + 0,0,0,0,0,114,17,74,0,124,1,106,34,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,171, + 0,0,0,0,0,0,0,130,1,124,2,106,44,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,114, + 2,74,0,130,1,121,0,35,0,116,32,0,0,0,0,0, + 0,0,0,36,0,114,4,1,0,89,0,144,1,140,225,119, + 0,120,3,89,0,119,1,41,9,78,218,12,95,95,111,114, + 105,103,110,97,109,101,95,95,122,39,115,101,101,32,80,121, + 73,109,112,111,114,116,95,73,109,112,111,114,116,70,114,111, + 122,101,110,77,111,100,117,108,101,79,98,106,101,99,116,40, + 41,114,7,1,0,0,169,2,114,214,0,0,0,218,8,111, + 114,105,103,110,97,109,101,114,125,0,0,0,114,212,0,0, + 0,114,214,0,0,0,114,63,1,0,0,41,23,114,204,0, + 0,0,114,219,0,0,0,218,4,118,97,114,115,114,68,0, + 0,0,114,13,0,0,0,114,151,0,0,0,218,17,105,115, + 95,102,114,111,122,101,110,95,112,97,99,107,97,103,101,114, + 11,0,0,0,218,17,95,114,101,115,111,108,118,101,95,102, + 105,108,101,110,97,109,101,114,26,0,0,0,114,5,0,0, + 0,114,24,0,0,0,218,14,105,109,112,108,101,109,101,110, + 116,97,116,105,111,110,114,223,0,0,0,218,6,105,110,115, + 101,114,116,114,212,0,0,0,114,4,0,0,0,114,7,1, + 0,0,218,6,101,120,116,101,110,100,218,6,115,111,114,116, + 101,100,114,63,1,0,0,114,214,0,0,0,114,233,0,0, + 0,41,10,114,40,1,0,0,114,200,0,0,0,114,199,0, + 0,0,218,5,115,116,97,116,101,114,63,1,0,0,218,5, + 105,115,112,107,103,114,214,0,0,0,218,6,112,107,103,100, + 105,114,114,7,1,0,0,114,212,0,0,0,115,10,0,0, + 0,32,32,32,32,32,32,32,32,32,32,114,7,0,0,0, + 218,14,95,102,105,120,95,117,112,95,109,111,100,117,108,101, + 122,29,70,114,111,122,101,110,73,109,112,111,114,116,101,114, + 46,95,102,105,120,95,117,112,95,109,111,100,117,108,101,10, + 4,0,0,115,11,3,0,0,128,0,224,15,21,143,127,137, + 127,136,4,216,16,20,215,16,33,209,16,33,136,5,216,11, + 16,137,61,244,8,0,24,28,152,70,147,124,215,23,39,209, + 23,39,168,14,184,4,211,23,61,136,72,217,19,27,208,12, + 70,208,29,70,211,12,70,144,56,220,20,27,152,70,160,74, + 211,20,47,136,69,220,19,23,215,19,41,209,19,41,168,38, + 175,47,169,47,211,19,58,184,101,210,19,67,208,12,74,192, + 85,211,12,74,208,19,67,216,31,34,215,31,52,209,31,52, + 176,88,184,116,191,121,185,121,200,37,211,31,80,209,12,28, + 136,72,144,102,216,32,56,164,4,164,83,215,37,55,209,37, + 55,211,32,56,216,25,33,216,25,33,244,5,3,33,14,136, + 68,212,12,29,240,8,0,24,28,215,23,54,209,23,54,136, + 72,217,15,20,216,23,31,160,50,146,126,208,16,47,160,120, + 211,16,47,144,126,217,19,25,216,20,24,215,20,51,209,20, + 51,215,20,58,209,20,58,184,49,184,102,213,20,69,224,23, + 31,208,23,39,208,16,49,168,24,211,16,49,208,23,39,244, + 6,0,24,31,152,118,160,122,212,23,50,208,12,67,176,70, + 183,79,177,79,211,12,67,208,19,50,217,15,23,240,2,3, 17,25,216,38,46,144,70,148,79,242,6,0,16,21,216,19, 25,151,63,145,63,160,104,211,19,46,216,27,33,159,63,153, - 63,168,98,210,27,48,208,20,65,176,38,183,47,177,47,212, - 20,65,216,20,26,151,79,145,79,215,20,42,209,20,42,168, - 56,214,20,52,240,8,0,24,28,215,23,54,209,23,54,136, - 72,216,20,28,160,68,208,20,40,136,69,228,19,25,156,36, - 152,117,155,43,211,19,38,168,58,176,122,208,42,66,210,19, - 66,208,12,73,192,69,212,12,73,216,15,20,143,126,138,126, - 240,6,0,22,25,215,21,42,209,21,42,168,53,175,62,169, - 62,184,52,191,57,185,57,192,101,211,21,76,241,3,1,17, - 19,144,24,152,54,224,23,28,151,126,145,126,168,24,210,23, - 49,208,16,77,176,69,183,78,177,78,192,72,208,51,77,212, - 16,77,217,19,25,216,27,35,168,6,160,120,210,27,47,208, - 20,67,176,40,184,70,208,49,67,212,20,67,224,27,35,169, - 101,169,2,184,20,210,27,62,208,20,72,192,8,212,20,72, - 224,27,31,144,8,216,23,28,151,126,145,126,208,23,45,208, - 16,61,168,117,175,126,169,126,212,16,61,216,23,31,169,37, - 161,66,176,84,210,23,58,208,16,68,184,72,212,16,68,225, - 15,23,220,23,30,152,118,160,122,212,23,50,209,16,50,216, - 23,29,151,127,145,127,168,40,210,23,50,208,16,79,176,86, - 183,95,177,95,192,104,208,52,79,212,16,79,228,27,34,160, - 54,168,58,212,27,54,208,16,71,184,6,191,15,185,15,212, - 16,71,217,15,20,220,23,30,152,118,160,122,212,23,50,209, - 16,50,216,23,29,151,127,145,127,168,40,210,23,50,208,16, - 79,176,86,183,95,177,95,192,104,208,52,79,212,16,79,228, - 27,34,160,54,168,58,212,27,54,208,16,71,184,6,191,15, - 185,15,212,16,71,216,19,23,215,19,36,210,19,36,209,8, - 36,208,19,36,248,244,75,1,0,24,38,242,0,1,17,25, - 218,20,24,240,3,1,17,25,250,115,18,0,0,0,196,29, - 7,75,57,0,203,57,9,76,6,3,204,5,1,76,6,3, - 78,99,4,0,0,0,0,0,0,0,0,0,0,0,5,0, - 0,0,3,0,0,0,243,140,1,0,0,151,0,124,1,114, - 17,116,1,0,0,0,0,0,0,0,0,116,2,0,0,0, - 0,0,0,0,0,100,1,100,0,171,3,0,0,0,0,0, - 0,115,1,121,2,9,0,124,0,106,4,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,125,4,124, - 1,124,2,107,55,0,0,114,32,124,1,106,11,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,100, - 6,171,1,0,0,0,0,0,0,114,13,124,1,100,7,100, - 0,26,0,125,1,124,3,115,8,124,1,155,0,100,8,157, - 2,125,1,110,2,100,9,125,3,124,1,106,13,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,100, - 10,124,4,171,2,0,0,0,0,0,0,125,5,124,3,114, - 33,116,2,0,0,0,0,0,0,0,0,106,14,0,0,0, + 63,168,98,210,27,48,208,20,65,176,38,183,47,177,47,211, + 20,65,208,27,48,216,20,26,151,79,145,79,215,20,42,209, + 20,42,168,56,214,20,52,240,8,0,24,28,215,23,54,209, + 23,54,136,72,216,20,28,160,68,208,20,40,136,69,228,19, + 25,156,36,152,117,155,43,211,19,38,168,58,176,122,208,42, + 66,210,19,66,208,12,73,192,69,211,12,73,208,19,66,216, + 15,20,143,126,138,126,240,6,0,22,25,215,21,42,209,21, + 42,168,53,175,62,169,62,184,52,191,57,185,57,192,101,211, + 21,76,241,3,1,17,19,144,24,152,54,224,23,28,151,126, + 145,126,168,24,210,23,49,208,16,77,176,69,183,78,177,78, + 192,72,208,51,77,211,16,77,208,23,49,217,19,25,216,27, + 35,168,6,160,120,210,27,47,208,20,67,176,40,184,70,208, + 49,67,211,20,67,208,27,47,224,27,35,169,101,169,2,184, + 20,210,27,62,208,20,72,192,8,211,20,72,208,27,62,224, + 27,31,144,8,216,23,28,151,126,145,126,208,23,45,208,16, + 61,168,117,175,126,169,126,211,16,61,208,23,45,216,23,31, + 169,37,161,66,176,84,210,23,58,208,16,68,184,72,211,16, + 68,208,23,58,225,15,23,220,23,30,152,118,160,122,212,23, + 50,208,16,50,208,23,50,216,23,29,151,127,145,127,168,40, + 210,23,50,208,16,79,176,86,183,95,177,95,192,104,208,52, + 79,211,16,79,208,23,50,228,27,34,160,54,168,58,212,27, + 54,208,16,71,184,6,191,15,185,15,211,16,71,208,23,54, + 217,15,20,220,23,30,152,118,160,122,212,23,50,208,16,50, + 208,23,50,216,23,29,151,127,145,127,168,40,210,23,50,208, + 16,79,176,86,183,95,177,95,192,104,208,52,79,211,16,79, + 208,23,50,228,27,34,160,54,168,58,212,27,54,208,16,71, + 184,6,191,15,185,15,211,16,71,208,23,54,216,19,23,215, + 19,36,210,19,36,208,8,36,208,15,36,208,19,36,248,244, + 75,1,0,24,38,242,0,1,17,25,218,20,24,240,3,1, + 17,25,250,115,18,0,0,0,196,29,7,75,57,0,203,57, + 9,76,6,3,204,5,1,76,6,3,78,99,4,0,0,0, + 0,0,0,0,0,0,0,0,5,0,0,0,3,0,0,0, + 243,140,1,0,0,151,0,124,1,114,17,116,1,0,0,0, + 0,0,0,0,0,116,2,0,0,0,0,0,0,0,0,100, + 1,100,0,171,3,0,0,0,0,0,0,115,1,121,2,9, + 0,124,0,106,4,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,125,4,124,1,124,2,107,55,0, + 0,114,32,124,1,106,11,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,100,6,171,1,0,0,0, + 0,0,0,114,13,124,1,100,7,100,0,26,0,125,1,124, + 3,115,8,124,1,155,0,100,8,157,2,125,1,110,2,100, + 9,125,3,124,1,106,13,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,100,10,124,4,171,2,0, + 0,0,0,0,0,125,5,124,3,114,33,116,2,0,0,0, + 0,0,0,0,0,106,14,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,155,0,124,4,155,0,124, + 5,155,0,157,3,125,6,124,6,155,0,124,4,155,0,100, + 11,157,3,125,7,124,7,124,6,102,2,83,0,100,0,125, + 6,116,2,0,0,0,0,0,0,0,0,106,14,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,155, - 0,124,4,155,0,124,5,155,0,157,3,125,6,124,6,155, - 0,124,4,155,0,100,11,157,3,125,7,124,7,124,6,102, - 2,83,0,100,0,125,6,116,2,0,0,0,0,0,0,0, - 0,106,14,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,155,0,124,4,155,0,124,5,155,0,100, - 12,157,4,125,7,124,7,124,6,102,2,83,0,35,0,116, - 6,0,0,0,0,0,0,0,0,36,0,114,33,1,0,116, - 2,0,0,0,0,0,0,0,0,106,8,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,100,3,107, - 40,0,0,114,2,100,4,110,1,100,5,120,1,125,4,124, - 0,95,2,0,0,0,0,0,0,0,0,89,0,140,160,119, - 0,120,3,89,0,119,1,41,13,78,218,11,95,115,116,100, - 108,105,98,95,100,105,114,114,55,1,0,0,218,5,119,105, - 110,51,50,250,1,92,250,1,47,250,1,60,114,138,0,0, - 0,122,9,46,95,95,105,110,105,116,95,95,70,114,244,0, - 0,0,122,11,95,95,105,110,105,116,95,95,46,112,121,122, - 3,46,112,121,41,8,114,15,0,0,0,114,24,0,0,0, - 218,4,95,83,69,80,114,4,0,0,0,218,8,112,108,97, - 116,102,111,114,109,114,168,0,0,0,114,20,0,0,0,114, - 76,1,0,0,41,8,114,40,1,0,0,114,180,0,0,0, - 218,5,97,108,105,97,115,114,72,1,0,0,218,3,115,101, - 112,218,7,114,101,108,102,105,108,101,114,73,1,0,0,114, - 214,0,0,0,115,8,0,0,0,32,32,32,32,32,32,32, - 32,114,7,0,0,0,114,66,1,0,0,122,32,70,114,111, - 122,101,110,73,109,112,111,114,116,101,114,46,95,114,101,115, - 111,108,118,101,95,102,105,108,101,110,97,109,101,79,4,0, - 0,115,249,0,0,0,128,0,225,15,23,156,119,164,115,168, - 77,184,52,212,31,64,216,19,29,240,2,3,9,70,1,216, - 18,21,151,40,145,40,136,67,240,8,0,12,20,144,117,210, - 11,28,216,15,23,215,15,34,209,15,34,160,51,212,15,39, - 216,27,35,160,65,160,66,152,60,144,8,217,23,28,216,34, - 42,160,26,168,57,208,31,53,145,72,224,24,29,144,5,216, - 18,26,215,18,34,209,18,34,160,51,168,3,211,18,44,136, - 7,217,11,16,220,24,27,159,15,153,15,208,23,40,168,19, - 168,5,168,103,168,89,208,21,55,136,70,216,26,32,152,24, - 160,35,160,21,160,107,208,23,50,136,72,240,8,0,16,24, - 152,22,208,15,31,208,8,31,240,5,0,22,26,136,70,220, - 26,29,159,47,153,47,208,25,42,168,51,168,37,176,7,168, - 121,184,3,208,23,60,136,72,216,15,23,152,22,208,15,31, - 208,8,31,248,244,35,0,16,30,242,0,1,9,70,1,220, - 37,40,167,92,161,92,176,87,210,37,60,153,84,192,35,208, - 12,69,136,67,144,35,150,40,240,3,1,9,70,1,250,115, - 17,0,0,0,150,12,66,25,0,194,25,39,67,3,3,195, - 2,1,67,3,3,99,4,0,0,0,0,0,0,0,0,0, - 0,0,6,0,0,0,3,0,0,0,243,50,1,0,0,151, - 0,116,1,0,0,0,0,0,0,0,0,116,2,0,0,0, - 0,0,0,0,0,106,4,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,124,1,171,2,0,0,0, - 0,0,0,125,4,124,4,128,1,121,0,124,4,92,3,0, - 0,125,5,125,6,125,7,116,7,0,0,0,0,0,0,0, - 0,124,1,124,0,124,0,106,8,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,124,6,172,1,171, - 4,0,0,0,0,0,0,125,8,124,0,106,11,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,124, - 7,124,1,124,6,171,3,0,0,0,0,0,0,92,2,0, - 0,125,9,125,10,2,0,116,13,0,0,0,0,0,0,0, - 0,116,14,0,0,0,0,0,0,0,0,106,16,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,171, - 1,0,0,0,0,0,0,124,9,124,7,172,2,171,2,0, - 0,0,0,0,0,124,8,95,9,0,0,0,0,0,0,0, - 0,124,10,114,28,124,8,106,20,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,106,23,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,100, - 3,124,10,171,2,0,0,0,0,0,0,1,0,124,8,83, - 0,41,4,78,114,253,0,0,0,114,62,1,0,0,114,125, - 0,0,0,41,12,114,161,0,0,0,114,151,0,0,0,218, - 11,102,105,110,100,95,102,114,111,122,101,110,114,194,0,0, - 0,114,255,0,0,0,114,66,1,0,0,114,5,0,0,0, - 114,24,0,0,0,114,67,1,0,0,114,219,0,0,0,114, - 223,0,0,0,114,68,1,0,0,41,11,114,40,1,0,0, - 114,180,0,0,0,114,41,1,0,0,114,42,1,0,0,218, - 4,105,110,102,111,218,1,95,114,72,1,0,0,114,63,1, - 0,0,114,199,0,0,0,114,214,0,0,0,114,73,1,0, - 0,115,11,0,0,0,32,32,32,32,32,32,32,32,32,32, - 32,114,7,0,0,0,114,43,1,0,0,122,24,70,114,111, - 122,101,110,73,109,112,111,114,116,101,114,46,102,105,110,100, - 95,115,112,101,99,104,4,0,0,115,157,0,0,0,128,0, - 228,15,40,172,20,215,41,57,209,41,57,184,56,211,15,68, - 136,4,216,11,15,136,60,216,19,23,240,26,0,30,34,209, - 8,26,136,1,136,53,144,40,220,15,31,160,8,168,35,216, - 39,42,167,123,161,123,216,43,48,244,5,2,16,50,136,4, - 240,6,0,28,31,215,27,48,209,27,48,176,24,184,56,192, - 85,211,27,75,209,8,24,136,8,144,38,216,28,52,156,68, - 164,19,215,33,51,209,33,51,211,28,52,216,21,29,216,21, - 29,244,5,3,29,10,136,4,212,8,25,241,8,0,12,18, - 216,12,16,215,12,43,209,12,43,215,12,50,209,12,50,176, - 49,176,102,212,12,61,216,15,19,136,11,114,22,0,0,0, + 0,124,4,155,0,124,5,155,0,100,12,157,4,125,7,124, + 7,124,6,102,2,83,0,35,0,116,6,0,0,0,0,0, + 0,0,0,36,0,114,33,1,0,116,2,0,0,0,0,0, + 0,0,0,106,8,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,100,3,107,40,0,0,114,2,100, + 4,110,1,100,5,120,1,125,4,124,0,95,2,0,0,0, + 0,0,0,0,0,89,0,140,160,119,0,120,3,89,0,119, + 1,41,13,78,218,11,95,115,116,100,108,105,98,95,100,105, + 114,114,55,1,0,0,218,5,119,105,110,51,50,250,1,92, + 250,1,47,250,1,60,114,138,0,0,0,122,9,46,95,95, + 105,110,105,116,95,95,70,114,244,0,0,0,122,11,95,95, + 105,110,105,116,95,95,46,112,121,122,3,46,112,121,41,8, + 114,15,0,0,0,114,24,0,0,0,218,4,95,83,69,80, + 114,4,0,0,0,218,8,112,108,97,116,102,111,114,109,114, + 168,0,0,0,114,20,0,0,0,114,76,1,0,0,41,8, + 114,40,1,0,0,114,180,0,0,0,218,5,97,108,105,97, + 115,114,72,1,0,0,218,3,115,101,112,218,7,114,101,108, + 102,105,108,101,114,73,1,0,0,114,214,0,0,0,115,8, + 0,0,0,32,32,32,32,32,32,32,32,114,7,0,0,0, + 114,66,1,0,0,122,32,70,114,111,122,101,110,73,109,112, + 111,114,116,101,114,46,95,114,101,115,111,108,118,101,95,102, + 105,108,101,110,97,109,101,79,4,0,0,115,249,0,0,0, + 128,0,225,15,23,156,119,164,115,168,77,184,52,212,31,64, + 216,19,29,240,2,3,9,70,1,216,18,21,151,40,145,40, + 136,67,240,8,0,12,20,144,117,210,11,28,216,15,23,215, + 15,34,209,15,34,160,51,212,15,39,216,27,35,160,65,160, + 66,152,60,144,8,217,23,28,216,34,42,160,26,168,57,208, + 31,53,145,72,224,24,29,144,5,216,18,26,215,18,34,209, + 18,34,160,51,168,3,211,18,44,136,7,217,11,16,220,24, + 27,159,15,153,15,208,23,40,168,19,168,5,168,103,168,89, + 208,21,55,136,70,216,26,32,152,24,160,35,160,21,160,107, + 208,23,50,136,72,240,8,0,16,24,152,22,208,15,31,208, + 8,31,240,5,0,22,26,136,70,220,26,29,159,47,153,47, + 208,25,42,168,51,168,37,176,7,168,121,184,3,208,23,60, + 136,72,216,15,23,152,22,208,15,31,208,8,31,248,244,35, + 0,16,30,242,0,1,9,70,1,220,37,40,167,92,161,92, + 176,87,210,37,60,153,84,192,35,208,12,69,136,67,144,35, + 150,40,240,3,1,9,70,1,250,115,17,0,0,0,150,12, + 66,25,0,194,25,39,67,3,3,195,2,1,67,3,3,99, + 4,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0, + 3,0,0,0,243,50,1,0,0,151,0,116,1,0,0,0, + 0,0,0,0,0,116,2,0,0,0,0,0,0,0,0,106, + 4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,124,1,171,2,0,0,0,0,0,0,125,4,124, + 4,128,1,121,0,124,4,92,3,0,0,125,5,125,6,125, + 7,116,7,0,0,0,0,0,0,0,0,124,1,124,0,124, + 0,106,8,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,124,6,172,1,171,4,0,0,0,0,0, + 0,125,8,124,0,106,11,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,124,7,124,1,124,6,171, + 3,0,0,0,0,0,0,92,2,0,0,125,9,125,10,2, + 0,116,13,0,0,0,0,0,0,0,0,116,14,0,0,0, + 0,0,0,0,0,106,16,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,171,1,0,0,0,0,0, + 0,124,9,124,7,172,2,171,2,0,0,0,0,0,0,124, + 8,95,9,0,0,0,0,0,0,0,0,124,10,114,28,124, + 8,106,20,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,106,23,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,100,3,124,10,171,2,0, + 0,0,0,0,0,1,0,124,8,83,0,41,4,78,114,253, + 0,0,0,114,62,1,0,0,114,125,0,0,0,41,12,114, + 161,0,0,0,114,151,0,0,0,218,11,102,105,110,100,95, + 102,114,111,122,101,110,114,194,0,0,0,114,255,0,0,0, + 114,66,1,0,0,114,5,0,0,0,114,24,0,0,0,114, + 67,1,0,0,114,219,0,0,0,114,223,0,0,0,114,68, + 1,0,0,41,11,114,40,1,0,0,114,180,0,0,0,114, + 41,1,0,0,114,42,1,0,0,218,4,105,110,102,111,218, + 1,95,114,72,1,0,0,114,63,1,0,0,114,199,0,0, + 0,114,214,0,0,0,114,73,1,0,0,115,11,0,0,0, + 32,32,32,32,32,32,32,32,32,32,32,114,7,0,0,0, + 114,43,1,0,0,122,24,70,114,111,122,101,110,73,109,112, + 111,114,116,101,114,46,102,105,110,100,95,115,112,101,99,104, + 4,0,0,115,157,0,0,0,128,0,228,15,40,172,20,215, + 41,57,209,41,57,184,56,211,15,68,136,4,216,11,15,136, + 60,216,19,23,240,26,0,30,34,209,8,26,136,1,136,53, + 144,40,220,15,31,160,8,168,35,216,39,42,167,123,161,123, + 216,43,48,244,5,2,16,50,136,4,240,6,0,28,31,215, + 27,48,209,27,48,176,24,184,56,192,85,211,27,75,209,8, + 24,136,8,144,38,216,28,52,156,68,164,19,215,33,51,209, + 33,51,211,28,52,216,21,29,216,21,29,244,5,3,29,10, + 136,4,212,8,25,241,8,0,12,18,216,12,16,215,12,43, + 209,12,43,215,12,50,209,12,50,176,49,176,102,212,12,61, + 216,15,19,136,11,114,22,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, + 144,0,0,0,151,0,116,1,0,0,0,0,0,0,0,0, + 124,0,106,2,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,171,1,0,0,0,0,0,0,125,1, + 9,0,124,0,106,4,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,106,6,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,125,2,124,2, + 114,7,124,2,124,1,95,4,0,0,0,0,0,0,0,0, + 124,1,83,0,35,0,116,10,0,0,0,0,0,0,0,0, + 36,0,114,4,1,0,89,0,124,1,83,0,119,0,120,3, + 89,0,119,1,41,1,122,22,83,101,116,32,95,95,102,105, + 108,101,95,95,44,32,105,102,32,97,98,108,101,46,41,6, + 114,27,0,0,0,114,26,0,0,0,114,219,0,0,0,114, + 214,0,0,0,114,212,0,0,0,114,4,0,0,0,41,3, + 114,199,0,0,0,114,200,0,0,0,114,214,0,0,0,115, + 3,0,0,0,32,32,32,114,7,0,0,0,114,18,1,0, + 0,122,28,70,114,111,122,101,110,73,109,112,111,114,116,101, + 114,46,99,114,101,97,116,101,95,109,111,100,117,108,101,134, + 4,0,0,115,84,0,0,0,128,0,244,6,0,18,29,152, + 84,159,89,153,89,211,17,39,136,6,240,2,6,9,43,216, + 23,27,215,23,40,209,23,40,215,23,49,209,23,49,136,72, + 241,8,0,16,24,216,34,42,144,6,148,15,216,15,21,136, + 13,248,244,11,0,16,30,242,0,1,9,17,216,12,16,240, + 8,0,16,22,136,13,240,11,1,9,17,250,115,15,0,0, + 0,151,22,56,0,184,9,65,5,3,193,4,1,65,5,3, 99,1,0,0,0,0,0,0,0,0,0,0,0,4,0,0, - 0,3,0,0,0,243,144,0,0,0,151,0,116,1,0,0, - 0,0,0,0,0,0,124,0,106,2,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,171,1,0,0, - 0,0,0,0,125,1,9,0,124,0,106,4,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,106,6, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,125,2,124,2,114,7,124,2,124,1,95,4,0,0, - 0,0,0,0,0,0,124,1,83,0,35,0,116,10,0,0, - 0,0,0,0,0,0,36,0,114,4,1,0,89,0,124,1, - 83,0,119,0,120,3,89,0,119,1,41,1,122,22,83,101, - 116,32,95,95,102,105,108,101,95,95,44,32,105,102,32,97, - 98,108,101,46,41,6,114,27,0,0,0,114,26,0,0,0, - 114,219,0,0,0,114,214,0,0,0,114,212,0,0,0,114, - 4,0,0,0,41,3,114,199,0,0,0,114,200,0,0,0, - 114,214,0,0,0,115,3,0,0,0,32,32,32,114,7,0, - 0,0,114,18,1,0,0,122,28,70,114,111,122,101,110,73, - 109,112,111,114,116,101,114,46,99,114,101,97,116,101,95,109, - 111,100,117,108,101,134,4,0,0,115,84,0,0,0,128,0, - 244,6,0,18,29,152,84,159,89,153,89,211,17,39,136,6, - 240,2,6,9,43,216,23,27,215,23,40,209,23,40,215,23, - 49,209,23,49,136,72,241,8,0,16,24,216,34,42,144,6, - 148,15,216,15,21,136,13,248,244,11,0,16,30,242,0,1, - 9,17,216,12,16,240,8,0,16,22,136,13,240,11,1,9, - 17,250,115,15,0,0,0,151,22,56,0,184,9,65,5,3, - 193,4,1,65,5,3,99,1,0,0,0,0,0,0,0,0, - 0,0,0,4,0,0,0,3,0,0,0,243,148,0,0,0, - 151,0,124,0,106,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,125,1,124,1,106,2,0,0, + 0,3,0,0,0,243,148,0,0,0,151,0,124,0,106,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 125,2,116,5,0,0,0,0,0,0,0,0,116,6,0,0, - 0,0,0,0,0,0,106,8,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,124,2,171,2,0,0, - 0,0,0,0,125,3,116,11,0,0,0,0,0,0,0,0, - 124,3,124,0,106,12,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,171,2,0,0,0,0,0,0, - 1,0,121,0,114,2,0,0,0,41,7,114,204,0,0,0, - 114,26,0,0,0,114,161,0,0,0,114,151,0,0,0,218, - 17,103,101,116,95,102,114,111,122,101,110,95,111,98,106,101, - 99,116,218,4,101,120,101,99,114,16,0,0,0,41,4,114, - 200,0,0,0,114,199,0,0,0,114,26,0,0,0,218,4, - 99,111,100,101,115,4,0,0,0,32,32,32,32,114,7,0, - 0,0,114,19,1,0,0,122,26,70,114,111,122,101,110,73, - 109,112,111,114,116,101,114,46,101,120,101,99,95,109,111,100, - 117,108,101,147,4,0,0,115,52,0,0,0,128,0,224,15, - 21,143,127,137,127,136,4,216,15,19,143,121,137,121,136,4, - 220,15,40,172,20,215,41,63,209,41,63,192,20,211,15,70, - 136,4,220,8,12,136,84,144,54,151,63,145,63,213,8,35, - 114,22,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,212,0,0,0,151, - 0,116,1,0,0,0,0,0,0,0,0,124,0,124,1,171, - 2,0,0,0,0,0,0,125,2,116,2,0,0,0,0,0, - 0,0,0,106,5,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,124,1,171,1,0,0,0,0,0, - 0,125,3,124,3,128,2,74,0,130,1,124,3,92,3,0, - 0,125,4,125,5,125,6,124,6,124,2,95,3,0,0,0, - 0,0,0,0,0,116,9,0,0,0,0,0,0,0,0,124, - 2,171,1,0,0,0,0,0,0,106,11,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,100,2,100, - 1,171,2,0,0,0,0,0,0,1,0,124,5,114,7,103, - 0,124,2,95,6,0,0,0,0,0,0,0,0,124,0,106, - 15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,124,2,171,1,0,0,0,0,0,0,1,0,124, - 2,83,0,41,3,122,95,76,111,97,100,32,97,32,102,114, - 111,122,101,110,32,109,111,100,117,108,101,46,10,10,32,32, - 32,32,32,32,32,32,84,104,105,115,32,109,101,116,104,111, - 100,32,105,115,32,100,101,112,114,101,99,97,116,101,100,46, - 32,32,85,115,101,32,101,120,101,99,95,109,111,100,117,108, - 101,40,41,32,105,110,115,116,101,97,100,46,10,10,32,32, - 32,32,32,32,32,32,78,114,212,0,0,0,41,8,114,201, - 0,0,0,114,151,0,0,0,114,87,1,0,0,114,61,1, - 0,0,114,64,1,0,0,114,68,0,0,0,114,7,1,0, - 0,114,74,1,0,0,41,7,114,40,1,0,0,114,180,0, - 0,0,114,200,0,0,0,114,88,1,0,0,114,89,1,0, - 0,114,72,1,0,0,114,63,1,0,0,115,7,0,0,0, - 32,32,32,32,32,32,32,114,7,0,0,0,114,28,1,0, + 0,0,125,1,124,1,106,2,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,125,2,116,5,0,0, + 0,0,0,0,0,0,116,6,0,0,0,0,0,0,0,0, + 106,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,124,2,171,2,0,0,0,0,0,0,125,3, + 116,11,0,0,0,0,0,0,0,0,124,3,124,0,106,12, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,171,2,0,0,0,0,0,0,1,0,121,0,114,2, + 0,0,0,41,7,114,204,0,0,0,114,26,0,0,0,114, + 161,0,0,0,114,151,0,0,0,218,17,103,101,116,95,102, + 114,111,122,101,110,95,111,98,106,101,99,116,218,4,101,120, + 101,99,114,16,0,0,0,41,4,114,200,0,0,0,114,199, + 0,0,0,114,26,0,0,0,218,4,99,111,100,101,115,4, + 0,0,0,32,32,32,32,114,7,0,0,0,114,19,1,0, 0,122,26,70,114,111,122,101,110,73,109,112,111,114,116,101, - 114,46,108,111,97,100,95,109,111,100,117,108,101,154,4,0, - 0,115,110,0,0,0,128,0,244,16,0,18,35,160,51,168, - 8,211,17,49,136,6,220,15,19,215,15,31,209,15,31,160, - 8,211,15,41,136,4,216,15,19,208,15,31,209,8,31,216, - 29,33,209,8,26,136,1,136,53,144,40,216,30,38,136,6, - 212,8,27,220,8,12,136,86,139,12,215,8,24,209,8,24, - 152,26,160,84,212,8,42,217,11,16,216,30,32,136,70,140, - 79,216,8,11,215,8,26,209,8,26,152,54,212,8,34,216, - 15,21,136,13,114,22,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,44, - 0,0,0,151,0,116,0,0,0,0,0,0,0,0,0,106, - 3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,124,1,171,1,0,0,0,0,0,0,83,0,41, - 1,122,45,82,101,116,117,114,110,32,116,104,101,32,99,111, - 100,101,32,111,98,106,101,99,116,32,102,111,114,32,116,104, - 101,32,102,114,111,122,101,110,32,109,111,100,117,108,101,46, - 41,2,114,151,0,0,0,114,92,1,0,0,114,49,1,0, - 0,115,2,0,0,0,32,32,114,7,0,0,0,114,50,1, - 0,0,122,23,70,114,111,122,101,110,73,109,112,111,114,116, - 101,114,46,103,101,116,95,99,111,100,101,173,4,0,0,243, - 21,0,0,0,128,0,244,8,0,16,20,215,15,37,209,15, - 37,160,104,211,15,47,208,8,47,114,22,0,0,0,99,2, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3, - 0,0,0,243,4,0,0,0,151,0,121,1,41,2,122,54, - 82,101,116,117,114,110,32,78,111,110,101,32,97,115,32,102, - 114,111,122,101,110,32,109,111,100,117,108,101,115,32,100,111, - 32,110,111,116,32,104,97,118,101,32,115,111,117,114,99,101, - 32,99,111,100,101,46,78,114,31,0,0,0,114,49,1,0, - 0,115,2,0,0,0,32,32,114,7,0,0,0,114,53,1, - 0,0,122,25,70,114,111,122,101,110,73,109,112,111,114,116, - 101,114,46,103,101,116,95,115,111,117,114,99,101,179,4,0, - 0,114,51,1,0,0,114,22,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,44,0,0,0,151,0,116,0,0,0,0,0,0,0,0, - 0,106,3,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,124,1,171,1,0,0,0,0,0,0,83, - 0,41,1,122,46,82,101,116,117,114,110,32,84,114,117,101, - 32,105,102,32,116,104,101,32,102,114,111,122,101,110,32,109, - 111,100,117,108,101,32,105,115,32,97,32,112,97,99,107,97, - 103,101,46,41,2,114,151,0,0,0,114,65,1,0,0,114, - 49,1,0,0,115,2,0,0,0,32,32,114,7,0,0,0, - 114,220,0,0,0,122,25,70,114,111,122,101,110,73,109,112, - 111,114,116,101,114,46,105,115,95,112,97,99,107,97,103,101, - 185,4,0,0,114,97,1,0,0,114,22,0,0,0,114,222, - 0,0,0,114,55,1,0,0,41,17,114,11,0,0,0,114, - 10,0,0,0,114,3,0,0,0,114,12,0,0,0,114,255, - 0,0,0,114,56,1,0,0,114,74,1,0,0,114,66,1, - 0,0,114,43,1,0,0,114,58,0,0,0,114,18,1,0, - 0,114,19,1,0,0,114,28,1,0,0,114,189,0,0,0, - 114,50,1,0,0,114,53,1,0,0,114,220,0,0,0,114, - 31,0,0,0,114,22,0,0,0,114,7,0,0,0,114,58, - 1,0,0,114,58,1,0,0,255,3,0,0,115,219,0,0, - 0,132,0,241,4,5,5,8,240,14,0,15,23,128,71,224, - 5,16,241,2,66,1,5,37,243,3,0,6,17,240,2,66, - 1,5,37,240,72,2,0,6,17,242,2,22,5,32,243,3, - 0,6,17,240,2,22,5,32,240,48,0,6,17,242,2,27, - 5,20,243,3,0,6,17,240,2,27,5,20,240,58,0,6, - 18,241,2,10,5,22,243,3,0,6,18,240,2,10,5,22, - 240,24,0,6,18,241,2,4,5,36,243,3,0,6,18,240, - 2,4,5,36,240,12,0,6,17,241,2,16,5,22,243,3, - 0,6,17,240,2,16,5,22,240,36,0,6,17,216,5,21, - 241,2,2,5,48,243,3,0,6,22,243,3,0,6,17,240, - 4,2,5,48,240,8,0,6,17,216,5,21,241,2,2,5, - 20,243,3,0,6,22,243,3,0,6,17,240,4,2,5,20, - 240,8,0,6,17,216,5,21,241,2,2,5,48,243,3,0, - 6,22,243,3,0,6,17,241,4,2,5,48,114,22,0,0, - 0,114,58,1,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, - 151,0,101,0,90,1,100,0,90,2,100,1,90,3,100,2, - 132,0,90,4,100,3,132,0,90,5,121,4,41,5,218,18, - 95,73,109,112,111,114,116,76,111,99,107,67,111,110,116,101, - 120,116,122,36,67,111,110,116,101,120,116,32,109,97,110,97, - 103,101,114,32,102,111,114,32,116,104,101,32,105,109,112,111, - 114,116,32,108,111,99,107,46,99,1,0,0,0,0,0,0, - 0,0,0,0,0,2,0,0,0,3,0,0,0,243,44,0, - 0,0,151,0,116,0,0,0,0,0,0,0,0,0,106,3, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,171,0,0,0,0,0,0,0,1,0,121,1,41,2, - 122,24,65,99,113,117,105,114,101,32,116,104,101,32,105,109, - 112,111,114,116,32,108,111,99,107,46,78,41,2,114,151,0, - 0,0,114,152,0,0,0,114,66,0,0,0,115,1,0,0, - 0,32,114,7,0,0,0,114,87,0,0,0,122,28,95,73, - 109,112,111,114,116,76,111,99,107,67,111,110,116,101,120,116, - 46,95,95,101,110,116,101,114,95,95,198,4,0,0,243,14, - 0,0,0,128,0,228,8,12,215,8,25,209,8,25,213,8, - 27,114,22,0,0,0,99,4,0,0,0,0,0,0,0,0, - 0,0,0,2,0,0,0,3,0,0,0,243,44,0,0,0, + 114,46,101,120,101,99,95,109,111,100,117,108,101,147,4,0, + 0,115,52,0,0,0,128,0,224,15,21,143,127,137,127,136, + 4,216,15,19,143,121,137,121,136,4,220,15,40,172,20,215, + 41,63,209,41,63,192,20,211,15,70,136,4,220,8,12,136, + 84,144,54,151,63,145,63,213,8,35,114,22,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,212,0,0,0,151,0,116,1,0,0,0, + 0,0,0,0,0,124,0,124,1,171,2,0,0,0,0,0, + 0,125,2,116,2,0,0,0,0,0,0,0,0,106,5,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,124,1,171,1,0,0,0,0,0,0,125,3,124,3,128, + 2,74,0,130,1,124,3,92,3,0,0,125,4,125,5,125, + 6,124,6,124,2,95,3,0,0,0,0,0,0,0,0,116, + 9,0,0,0,0,0,0,0,0,124,2,171,1,0,0,0, + 0,0,0,106,11,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,100,2,100,1,171,2,0,0,0, + 0,0,0,1,0,124,5,114,7,103,0,124,2,95,6,0, + 0,0,0,0,0,0,0,124,0,106,15,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,124,2,171, + 1,0,0,0,0,0,0,1,0,124,2,83,0,41,3,122, + 95,76,111,97,100,32,97,32,102,114,111,122,101,110,32,109, + 111,100,117,108,101,46,10,10,32,32,32,32,32,32,32,32, + 84,104,105,115,32,109,101,116,104,111,100,32,105,115,32,100, + 101,112,114,101,99,97,116,101,100,46,32,32,85,115,101,32, + 101,120,101,99,95,109,111,100,117,108,101,40,41,32,105,110, + 115,116,101,97,100,46,10,10,32,32,32,32,32,32,32,32, + 78,114,212,0,0,0,41,8,114,201,0,0,0,114,151,0, + 0,0,114,87,1,0,0,114,61,1,0,0,114,64,1,0, + 0,114,68,0,0,0,114,7,1,0,0,114,74,1,0,0, + 41,7,114,40,1,0,0,114,180,0,0,0,114,200,0,0, + 0,114,88,1,0,0,114,89,1,0,0,114,72,1,0,0, + 114,63,1,0,0,115,7,0,0,0,32,32,32,32,32,32, + 32,114,7,0,0,0,114,28,1,0,0,122,26,70,114,111, + 122,101,110,73,109,112,111,114,116,101,114,46,108,111,97,100, + 95,109,111,100,117,108,101,154,4,0,0,115,113,0,0,0, + 128,0,244,16,0,18,35,160,51,168,8,211,17,49,136,6, + 220,15,19,215,15,31,209,15,31,160,8,211,15,41,136,4, + 216,15,19,208,15,31,208,8,31,208,15,31,216,29,33,209, + 8,26,136,1,136,53,144,40,216,30,38,136,6,212,8,27, + 220,8,12,136,86,139,12,215,8,24,209,8,24,152,26,160, + 84,212,8,42,217,11,16,216,30,32,136,70,140,79,216,8, + 11,215,8,26,209,8,26,152,54,212,8,34,216,15,21,136, + 13,114,22,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,44,0,0,0, 151,0,116,0,0,0,0,0,0,0,0,0,106,3,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 171,0,0,0,0,0,0,0,1,0,121,1,41,2,122,60, - 82,101,108,101,97,115,101,32,116,104,101,32,105,109,112,111, - 114,116,32,108,111,99,107,32,114,101,103,97,114,100,108,101, - 115,115,32,111,102,32,97,110,121,32,114,97,105,115,101,100, - 32,101,120,99,101,112,116,105,111,110,115,46,78,41,2,114, - 151,0,0,0,114,154,0,0,0,41,4,114,44,0,0,0, - 218,8,101,120,99,95,116,121,112,101,218,9,101,120,99,95, - 118,97,108,117,101,218,13,101,120,99,95,116,114,97,99,101, - 98,97,99,107,115,4,0,0,0,32,32,32,32,114,7,0, - 0,0,114,92,0,0,0,122,27,95,73,109,112,111,114,116, - 76,111,99,107,67,111,110,116,101,120,116,46,95,95,101,120, - 105,116,95,95,202,4,0,0,114,103,1,0,0,114,22,0, - 0,0,78,41,6,114,11,0,0,0,114,10,0,0,0,114, - 3,0,0,0,114,12,0,0,0,114,87,0,0,0,114,92, - 0,0,0,114,31,0,0,0,114,22,0,0,0,114,7,0, - 0,0,114,101,1,0,0,114,101,1,0,0,194,4,0,0, - 115,15,0,0,0,132,0,225,4,46,242,4,2,5,28,243, - 8,2,5,28,114,22,0,0,0,114,101,1,0,0,99,3, - 0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,3, - 0,0,0,243,126,0,0,0,151,0,124,1,106,1,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 100,1,124,2,100,2,122,10,0,0,171,2,0,0,0,0, - 0,0,125,3,116,3,0,0,0,0,0,0,0,0,124,3, - 171,1,0,0,0,0,0,0,124,2,107,2,0,0,114,11, - 116,5,0,0,0,0,0,0,0,0,100,3,171,1,0,0, - 0,0,0,0,130,1,124,3,100,4,25,0,0,0,125,4, - 124,0,114,7,124,4,155,0,100,1,124,0,155,0,157,3, - 83,0,124,4,83,0,41,5,122,50,82,101,115,111,108,118, - 101,32,97,32,114,101,108,97,116,105,118,101,32,109,111,100, - 117,108,101,32,110,97,109,101,32,116,111,32,97,110,32,97, - 98,115,111,108,117,116,101,32,111,110,101,46,114,244,0,0, - 0,114,138,0,0,0,122,50,97,116,116,101,109,112,116,101, - 100,32,114,101,108,97,116,105,118,101,32,105,109,112,111,114, - 116,32,98,101,121,111,110,100,32,116,111,112,45,108,101,118, - 101,108,32,112,97,99,107,97,103,101,114,125,0,0,0,41, - 3,218,6,114,115,112,108,105,116,114,127,0,0,0,114,178, - 0,0,0,41,5,114,26,0,0,0,218,7,112,97,99,107, - 97,103,101,218,5,108,101,118,101,108,218,4,98,105,116,115, - 218,4,98,97,115,101,115,5,0,0,0,32,32,32,32,32, - 114,7,0,0,0,218,13,95,114,101,115,111,108,118,101,95, - 110,97,109,101,114,114,1,0,0,207,4,0,0,115,79,0, - 0,0,128,0,224,11,18,143,62,137,62,152,35,152,117,160, - 113,153,121,211,11,41,128,68,220,7,10,136,52,131,121,144, - 53,210,7,24,220,14,25,208,26,78,211,14,79,208,8,79, - 216,11,15,144,1,137,55,128,68,217,31,35,136,100,136,86, - 144,49,144,84,144,70,208,11,27,208,4,45,168,20,208,4, - 45,114,22,0,0,0,99,3,0,0,0,0,0,0,0,0, - 0,0,0,7,0,0,0,3,0,0,0,243,242,1,0,0, - 151,0,116,0,0,0,0,0,0,0,0,0,106,2,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 125,3,124,3,128,11,116,5,0,0,0,0,0,0,0,0, - 100,2,171,1,0,0,0,0,0,0,130,1,124,3,115,26, - 116,6,0,0,0,0,0,0,0,0,106,9,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,100,3, - 116,10,0,0,0,0,0,0,0,0,171,2,0,0,0,0, - 0,0,1,0,124,0,116,0,0,0,0,0,0,0,0,0, - 106,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,118,0,125,4,124,3,68,0,93,113,0,0, - 125,5,116,15,0,0,0,0,0,0,0,0,171,0,0,0, - 0,0,0,0,53,0,1,0,9,0,124,5,106,16,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 125,6,2,0,124,6,124,0,124,1,124,2,171,3,0,0, - 0,0,0,0,125,7,9,0,100,1,100,1,100,1,171,2, - 0,0,0,0,0,0,1,0,127,7,128,1,140,49,124,4, - 115,60,124,0,116,0,0,0,0,0,0,0,0,0,106,12, + 124,1,171,1,0,0,0,0,0,0,83,0,41,1,122,45, + 82,101,116,117,114,110,32,116,104,101,32,99,111,100,101,32, + 111,98,106,101,99,116,32,102,111,114,32,116,104,101,32,102, + 114,111,122,101,110,32,109,111,100,117,108,101,46,41,2,114, + 151,0,0,0,114,92,1,0,0,114,49,1,0,0,115,2, + 0,0,0,32,32,114,7,0,0,0,114,50,1,0,0,122, + 23,70,114,111,122,101,110,73,109,112,111,114,116,101,114,46, + 103,101,116,95,99,111,100,101,173,4,0,0,243,21,0,0, + 0,128,0,244,8,0,16,20,215,15,37,209,15,37,160,104, + 211,15,47,208,8,47,114,22,0,0,0,99,2,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0, + 243,4,0,0,0,151,0,121,1,41,2,122,54,82,101,116, + 117,114,110,32,78,111,110,101,32,97,115,32,102,114,111,122, + 101,110,32,109,111,100,117,108,101,115,32,100,111,32,110,111, + 116,32,104,97,118,101,32,115,111,117,114,99,101,32,99,111, + 100,101,46,78,114,31,0,0,0,114,49,1,0,0,115,2, + 0,0,0,32,32,114,7,0,0,0,114,53,1,0,0,122, + 25,70,114,111,122,101,110,73,109,112,111,114,116,101,114,46, + 103,101,116,95,115,111,117,114,99,101,179,4,0,0,114,51, + 1,0,0,114,22,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,44,0, + 0,0,151,0,116,0,0,0,0,0,0,0,0,0,106,3, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,118,0,114,42,116,0,0,0,0,0,0,0,0,0, - 106,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,124,0,25,0,0,0,125,8,9,0,124,8, - 106,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,125,9,124,9,128,4,124,7,99,2,1,0, - 83,0,124,9,99,2,1,0,83,0,124,7,99,2,1,0, - 83,0,4,0,121,1,35,0,116,18,0,0,0,0,0,0, - 0,0,36,0,114,11,1,0,89,0,100,1,100,1,100,1, - 171,2,0,0,0,0,0,0,1,0,140,136,119,0,120,3, - 89,0,119,1,35,0,49,0,115,1,119,2,1,0,89,0, - 1,0,1,0,140,103,120,3,89,0,119,1,35,0,116,18, - 0,0,0,0,0,0,0,0,36,0,114,7,1,0,124,7, - 99,2,89,0,99,2,1,0,83,0,119,0,120,3,89,0, - 119,1,41,4,122,21,70,105,110,100,32,97,32,109,111,100, - 117,108,101,39,115,32,115,112,101,99,46,78,122,53,115,121, - 115,46,109,101,116,97,95,112,97,116,104,32,105,115,32,78, - 111,110,101,44,32,80,121,116,104,111,110,32,105,115,32,108, - 105,107,101,108,121,32,115,104,117,116,116,105,110,103,32,100, - 111,119,110,122,22,115,121,115,46,109,101,116,97,95,112,97, - 116,104,32,105,115,32,101,109,112,116,121,41,11,114,24,0, - 0,0,218,9,109,101,116,97,95,112,97,116,104,114,178,0, - 0,0,114,191,0,0,0,114,192,0,0,0,114,27,1,0, - 0,114,195,0,0,0,114,101,1,0,0,114,43,1,0,0, - 114,4,0,0,0,114,204,0,0,0,41,10,114,26,0,0, - 0,114,41,1,0,0,114,42,1,0,0,114,116,1,0,0, - 218,9,105,115,95,114,101,108,111,97,100,218,6,102,105,110, - 100,101,114,114,43,1,0,0,114,199,0,0,0,114,200,0, - 0,0,114,204,0,0,0,115,10,0,0,0,32,32,32,32, - 32,32,32,32,32,32,114,7,0,0,0,218,10,95,102,105, - 110,100,95,115,112,101,99,114,119,1,0,0,216,4,0,0, - 115,20,1,0,0,128,0,228,16,19,151,13,145,13,128,73, - 216,7,16,208,7,24,228,14,25,240,0,1,27,42,243,0, - 1,15,43,240,0,1,9,43,241,6,0,12,21,220,8,17, - 143,14,137,14,208,23,47,180,29,212,8,63,240,10,0,17, - 21,156,3,159,11,153,11,208,16,35,128,73,216,18,27,242, - 0,27,5,20,136,6,220,13,31,211,13,33,241,0,6,9, - 53,240,2,5,13,53,216,28,34,215,28,44,209,28,44,144, - 9,241,8,0,24,33,160,20,160,116,168,86,211,23,52,145, - 4,247,13,6,9,53,240,14,0,12,16,209,11,27,225,19, - 28,160,20,172,19,175,27,169,27,209,33,52,220,25,28,159, - 27,153,27,160,84,209,25,42,144,6,240,2,11,17,40,216, - 31,37,159,127,153,127,144,72,240,14,0,24,32,208,23,39, - 216,31,35,154,11,224,31,39,154,15,224,23,27,146,11,240, - 51,27,5,20,240,54,0,16,20,248,244,47,0,20,34,242, - 0,1,13,25,216,16,24,247,9,6,9,53,240,0,6,9, - 53,240,6,1,13,25,250,247,7,6,9,53,240,0,6,9, - 53,251,244,26,0,24,38,242,0,4,17,32,240,8,0,28, - 32,148,75,240,9,4,17,32,250,115,66,0,0,0,193,27, - 1,67,26,5,193,29,12,67,3,4,193,41,10,67,26,5, - 194,39,12,67,38,2,195,3,9,67,23,7,195,12,1,67, - 26,5,195,22,1,67,23,7,195,23,3,67,26,5,195,26, - 5,67,35,9,195,38,11,67,54,5,195,53,1,67,54,5, - 99,3,0,0,0,0,0,0,0,0,0,0,0,6,0,0, - 0,3,0,0,0,243,242,0,0,0,151,0,116,1,0,0, - 0,0,0,0,0,0,124,0,116,2,0,0,0,0,0,0, - 0,0,171,2,0,0,0,0,0,0,115,23,116,5,0,0, - 0,0,0,0,0,0,100,1,116,7,0,0,0,0,0,0, - 0,0,124,0,171,1,0,0,0,0,0,0,155,0,157,2, - 171,1,0,0,0,0,0,0,130,1,124,2,100,2,107,2, - 0,0,114,11,116,9,0,0,0,0,0,0,0,0,100,3, - 171,1,0,0,0,0,0,0,130,1,124,2,100,2,107,68, - 0,0,114,40,116,1,0,0,0,0,0,0,0,0,124,1, - 116,2,0,0,0,0,0,0,0,0,171,2,0,0,0,0, - 0,0,115,11,116,5,0,0,0,0,0,0,0,0,100,4, - 171,1,0,0,0,0,0,0,130,1,124,1,115,11,116,11, - 0,0,0,0,0,0,0,0,100,5,171,1,0,0,0,0, - 0,0,130,1,124,0,115,17,124,2,100,2,107,40,0,0, - 114,11,116,9,0,0,0,0,0,0,0,0,100,6,171,1, - 0,0,0,0,0,0,130,1,121,7,121,7,41,8,122,28, - 86,101,114,105,102,121,32,97,114,103,117,109,101,110,116,115, - 32,97,114,101,32,34,115,97,110,101,34,46,122,29,109,111, - 100,117,108,101,32,110,97,109,101,32,109,117,115,116,32,98, - 101,32,115,116,114,44,32,110,111,116,32,114,125,0,0,0, - 122,18,108,101,118,101,108,32,109,117,115,116,32,98,101,32, - 62,61,32,48,122,31,95,95,112,97,99,107,97,103,101,95, - 95,32,110,111,116,32,115,101,116,32,116,111,32,97,32,115, - 116,114,105,110,103,122,54,97,116,116,101,109,112,116,101,100, - 32,114,101,108,97,116,105,118,101,32,105,109,112,111,114,116, - 32,119,105,116,104,32,110,111,32,107,110,111,119,110,32,112, - 97,114,101,110,116,32,112,97,99,107,97,103,101,122,17,69, - 109,112,116,121,32,109,111,100,117,108,101,32,110,97,109,101, - 78,41,6,114,23,1,0,0,218,3,115,116,114,218,9,84, - 121,112,101,69,114,114,111,114,114,5,0,0,0,218,10,86, - 97,108,117,101,69,114,114,111,114,114,178,0,0,0,169,3, - 114,26,0,0,0,114,110,1,0,0,114,111,1,0,0,115, - 3,0,0,0,32,32,32,114,7,0,0,0,218,13,95,115, - 97,110,105,116,121,95,99,104,101,99,107,114,125,1,0,0, - 5,5,0,0,115,132,0,0,0,128,0,228,11,21,144,100, - 156,67,212,11,32,220,14,23,208,26,55,188,4,184,84,187, - 10,176,124,208,24,68,211,14,69,208,8,69,216,7,12,136, - 113,130,121,220,14,24,208,25,45,211,14,46,208,8,46,216, - 7,12,136,113,130,121,220,15,25,152,39,164,51,212,15,39, - 220,18,27,208,28,61,211,18,62,208,12,62,217,17,24,220, - 18,29,240,0,1,31,40,243,0,1,19,41,240,0,1,13, - 41,225,11,15,144,69,152,81,146,74,220,14,24,208,25,44, - 211,14,45,208,8,45,240,3,0,21,31,136,52,114,22,0, - 0,0,122,16,78,111,32,109,111,100,117,108,101,32,110,97, - 109,101,100,32,122,4,123,33,114,125,99,2,0,0,0,0, - 0,0,0,0,0,0,0,6,0,0,0,3,0,0,0,243, - 86,3,0,0,151,0,100,0,125,2,124,0,106,1,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 100,1,171,1,0,0,0,0,0,0,100,2,25,0,0,0, - 125,3,100,0,125,4,124,3,114,131,124,3,116,2,0,0, - 0,0,0,0,0,0,106,4,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,118,1,114,12,116,7, - 0,0,0,0,0,0,0,0,124,1,124,3,171,2,0,0, - 0,0,0,0,1,0,124,0,116,2,0,0,0,0,0,0, - 0,0,106,4,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,118,0,114,19,116,2,0,0,0,0, - 0,0,0,0,106,4,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,124,0,25,0,0,0,83,0, - 116,2,0,0,0,0,0,0,0,0,106,4,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,124,3, - 25,0,0,0,125,5,9,0,124,5,106,8,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,125,2, - 124,5,106,16,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,125,4,124,0,106,1,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,100,1, - 171,1,0,0,0,0,0,0,100,6,25,0,0,0,125,7, - 116,19,0,0,0,0,0,0,0,0,124,0,124,2,171,2, - 0,0,0,0,0,0,125,8,124,8,128,21,116,15,0,0, - 0,0,0,0,0,0,116,12,0,0,0,0,0,0,0,0, - 155,0,124,0,155,2,157,2,124,0,172,5,171,2,0,0, - 0,0,0,0,130,1,124,4,114,27,124,4,106,20,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 106,23,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,127,7,171,1,0,0,0,0,0,0,1,0, - 9,0,116,25,0,0,0,0,0,0,0,0,124,8,171,1, - 0,0,0,0,0,0,125,9,124,4,114,27,124,4,106,20, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,106,27,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,171,0,0,0,0,0,0,0,1,0, - 9,0,124,3,114,35,116,2,0,0,0,0,0,0,0,0, - 106,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,124,3,25,0,0,0,125,5,9,0,116,29, - 0,0,0,0,0,0,0,0,124,5,127,7,124,9,171,3, - 0,0,0,0,0,0,1,0,124,9,83,0,124,9,83,0, - 35,0,116,10,0,0,0,0,0,0,0,0,36,0,114,29, - 1,0,116,12,0,0,0,0,0,0,0,0,155,0,124,0, - 155,2,100,3,124,3,155,2,100,4,157,5,125,6,116,15, - 0,0,0,0,0,0,0,0,124,6,124,0,172,5,171,2, - 0,0,0,0,0,0,100,0,130,2,119,0,120,3,89,0, - 119,1,35,0,124,4,114,27,124,4,106,20,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,106,27, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,171,0,0,0,0,0,0,0,1,0,119,0,119,0, - 120,3,89,0,119,1,35,0,116,10,0,0,0,0,0,0, - 0,0,36,0,114,38,1,0,100,7,124,3,155,2,100,8, - 127,7,155,2,157,4,125,6,116,30,0,0,0,0,0,0, - 0,0,106,33,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,124,6,116,34,0,0,0,0,0,0, - 0,0,171,2,0,0,0,0,0,0,1,0,89,0,124,9, - 83,0,119,0,120,3,89,0,119,1,41,9,78,114,244,0, - 0,0,114,125,0,0,0,122,2,59,32,122,17,32,105,115, - 32,110,111,116,32,97,32,112,97,99,107,97,103,101,114,25, - 0,0,0,233,2,0,0,0,122,27,67,97,110,110,111,116, - 32,115,101,116,32,97,110,32,97,116,116,114,105,98,117,116, - 101,32,111,110,32,122,18,32,102,111,114,32,99,104,105,108, - 100,32,109,111,100,117,108,101,32,41,18,114,245,0,0,0, - 114,24,0,0,0,114,195,0,0,0,114,161,0,0,0,114, - 7,1,0,0,114,4,0,0,0,218,15,95,69,82,82,95, - 77,83,71,95,80,82,69,70,73,88,218,19,77,111,100,117, - 108,101,78,111,116,70,111,117,110,100,69,114,114,111,114,114, - 204,0,0,0,114,119,1,0,0,114,224,0,0,0,114,51, - 0,0,0,114,33,1,0,0,114,68,0,0,0,114,14,0, - 0,0,114,191,0,0,0,114,192,0,0,0,114,27,1,0, - 0,41,10,114,26,0,0,0,218,7,105,109,112,111,114,116, - 95,114,41,1,0,0,114,246,0,0,0,218,11,112,97,114, - 101,110,116,95,115,112,101,99,218,13,112,97,114,101,110,116, - 95,109,111,100,117,108,101,114,198,0,0,0,218,5,99,104, - 105,108,100,114,199,0,0,0,114,200,0,0,0,115,10,0, - 0,0,32,32,32,32,32,32,32,32,32,32,114,7,0,0, - 0,218,23,95,102,105,110,100,95,97,110,100,95,108,111,97, - 100,95,117,110,108,111,99,107,101,100,114,134,1,0,0,24, - 5,0,0,115,177,1,0,0,128,0,216,11,15,128,68,216, - 13,17,143,95,137,95,152,83,211,13,33,160,33,209,13,36, - 128,70,216,18,22,128,75,217,7,13,216,11,17,156,19,159, - 27,153,27,209,11,36,220,12,37,160,103,168,118,212,12,54, - 224,11,15,148,51,151,59,145,59,209,11,30,220,19,22,151, - 59,145,59,152,116,209,19,36,208,12,36,220,24,27,159,11, - 153,11,160,70,209,24,43,136,13,240,2,4,9,64,1,216, - 19,32,215,19,41,209,19,41,136,68,240,8,0,23,36,215, - 22,44,209,22,44,136,11,216,16,20,151,15,145,15,160,3, - 211,16,36,160,81,209,16,39,136,5,220,11,21,144,100,152, - 68,211,11,33,128,68,216,7,11,128,124,220,14,33,164,95, - 208,36,53,176,100,176,88,208,34,62,192,84,212,14,74,208, - 8,74,225,11,22,240,6,0,13,24,215,12,49,209,12,49, - 215,12,56,209,12,56,184,21,212,12,63,240,2,4,9,60, - 220,21,35,160,68,211,21,41,136,70,225,15,26,216,16,27, - 215,16,53,209,16,53,215,16,57,209,16,57,213,16,59,217, - 7,13,228,24,27,159,11,153,11,160,70,209,24,43,136,13, - 240,2,4,9,47,220,12,19,144,77,160,53,168,38,212,12, - 49,240,8,0,12,18,128,77,136,54,128,77,248,244,53,0, - 16,30,242,0,2,9,64,1,220,21,36,208,20,37,160,100, - 160,88,168,82,176,6,168,122,208,57,74,208,18,75,136,67, - 220,18,37,160,99,176,4,212,18,53,184,52,208,12,63,240, - 5,2,9,64,1,251,241,32,0,16,27,216,16,27,215,16, - 53,209,16,53,215,16,57,209,16,57,213,16,59,240,3,0, - 16,27,251,244,14,0,16,30,242,0,2,9,47,216,20,47, - 176,6,168,122,208,57,75,200,69,200,57,208,18,85,136,67, - 220,12,21,143,78,137,78,152,51,164,13,213,12,46,216,11, - 17,128,77,240,7,2,9,47,250,115,42,0,0,0,193,50, - 12,68,46,0,195,31,11,69,23,0,196,29,13,69,57,0, - 196,46,38,69,20,3,197,23,31,69,54,3,197,57,43,70, - 40,3,198,39,1,70,40,3,99,2,0,0,0,0,0,0, - 0,0,0,0,0,7,0,0,0,3,0,0,0,243,146,1, - 0,0,151,0,116,0,0,0,0,0,0,0,0,0,106,2, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,106,5,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,124,0,116,6,0,0,0,0,0,0, - 0,0,171,2,0,0,0,0,0,0,125,2,124,2,116,6, - 0,0,0,0,0,0,0,0,117,0,115,24,116,9,0,0, - 0,0,0,0,0,0,116,9,0,0,0,0,0,0,0,0, - 124,2,100,1,100,2,171,3,0,0,0,0,0,0,100,3, - 100,4,171,3,0,0,0,0,0,0,114,97,116,11,0,0, - 0,0,0,0,0,0,124,0,171,1,0,0,0,0,0,0, - 53,0,1,0,116,0,0,0,0,0,0,0,0,0,106,2, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,106,5,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,124,0,116,6,0,0,0,0,0,0, - 0,0,171,2,0,0,0,0,0,0,125,2,124,2,116,6, - 0,0,0,0,0,0,0,0,117,0,114,21,116,13,0,0, - 0,0,0,0,0,0,124,0,124,1,171,2,0,0,0,0, - 0,0,99,2,100,2,100,2,100,2,171,2,0,0,0,0, - 0,0,1,0,83,0,9,0,100,2,100,2,100,2,171,2, - 0,0,0,0,0,0,1,0,116,15,0,0,0,0,0,0, - 0,0,124,0,171,1,0,0,0,0,0,0,1,0,124,2, - 128,19,100,5,124,0,155,0,100,6,157,3,125,3,116,17, - 0,0,0,0,0,0,0,0,124,3,124,0,172,7,171,2, - 0,0,0,0,0,0,130,1,124,2,83,0,35,0,49,0, - 115,1,119,2,1,0,89,0,1,0,1,0,140,43,120,3, - 89,0,119,1,41,8,122,25,70,105,110,100,32,97,110,100, - 32,108,111,97,100,32,116,104,101,32,109,111,100,117,108,101, - 46,114,204,0,0,0,78,114,32,1,0,0,70,122,10,105, - 109,112,111,114,116,32,111,102,32,122,28,32,104,97,108,116, - 101,100,59,32,78,111,110,101,32,105,110,32,115,121,115,46, - 109,111,100,117,108,101,115,114,25,0,0,0,41,9,114,24, - 0,0,0,114,195,0,0,0,114,76,0,0,0,218,14,95, - 78,69,69,68,83,95,76,79,65,68,73,78,71,114,15,0, - 0,0,114,142,0,0,0,114,134,1,0,0,114,157,0,0, - 0,114,129,1,0,0,41,4,114,26,0,0,0,114,130,1, - 0,0,114,200,0,0,0,114,172,0,0,0,115,4,0,0, - 0,32,32,32,32,114,7,0,0,0,218,14,95,102,105,110, - 100,95,97,110,100,95,108,111,97,100,114,137,1,0,0,69, - 5,0,0,115,181,0,0,0,128,0,244,10,0,14,17,143, - 91,137,91,143,95,137,95,152,84,164,62,211,13,50,128,70, - 216,8,14,148,46,209,8,32,220,8,15,148,7,152,6,160, - 10,168,68,211,16,49,176,63,192,69,212,8,74,220,13,31, - 160,4,211,13,37,241,0,3,9,62,220,21,24,151,91,145, - 91,151,95,145,95,160,84,172,62,211,21,58,136,70,216,15, - 21,156,30,209,15,39,220,23,46,168,116,176,87,211,23,61, - 247,7,3,9,62,241,0,3,9,62,224,15,39,247,5,3, - 9,62,244,18,0,9,28,152,68,212,8,33,224,7,13,128, - 126,216,20,30,152,116,152,102,208,36,64,208,18,65,136,7, - 220,14,33,160,39,176,4,212,14,53,208,8,53,224,11,17, - 128,77,247,31,3,9,62,240,0,3,9,62,250,115,12,0, - 0,0,193,16,56,66,61,3,194,61,5,67,6,7,99,3, - 0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,3, - 0,0,0,243,96,0,0,0,151,0,116,1,0,0,0,0, - 0,0,0,0,124,0,124,1,124,2,171,3,0,0,0,0, - 0,0,1,0,124,2,100,1,107,68,0,0,114,13,116,3, - 0,0,0,0,0,0,0,0,124,0,124,1,124,2,171,3, - 0,0,0,0,0,0,125,0,116,5,0,0,0,0,0,0, - 0,0,124,0,116,6,0,0,0,0,0,0,0,0,171,2, - 0,0,0,0,0,0,83,0,41,2,97,50,1,0,0,73, - 109,112,111,114,116,32,97,110,100,32,114,101,116,117,114,110, - 32,116,104,101,32,109,111,100,117,108,101,32,98,97,115,101, - 100,32,111,110,32,105,116,115,32,110,97,109,101,44,32,116, - 104,101,32,112,97,99,107,97,103,101,32,116,104,101,32,99, - 97,108,108,32,105,115,10,32,32,32,32,98,101,105,110,103, - 32,109,97,100,101,32,102,114,111,109,44,32,97,110,100,32, - 116,104,101,32,108,101,118,101,108,32,97,100,106,117,115,116, - 109,101,110,116,46,10,10,32,32,32,32,84,104,105,115,32, - 102,117,110,99,116,105,111,110,32,114,101,112,114,101,115,101, - 110,116,115,32,116,104,101,32,103,114,101,97,116,101,115,116, - 32,99,111,109,109,111,110,32,100,101,110,111,109,105,110,97, - 116,111,114,32,111,102,32,102,117,110,99,116,105,111,110,97, - 108,105,116,121,10,32,32,32,32,98,101,116,119,101,101,110, - 32,105,109,112,111,114,116,95,109,111,100,117,108,101,32,97, - 110,100,32,95,95,105,109,112,111,114,116,95,95,46,32,84, - 104,105,115,32,105,110,99,108,117,100,101,115,32,115,101,116, - 116,105,110,103,32,95,95,112,97,99,107,97,103,101,95,95, - 32,105,102,10,32,32,32,32,116,104,101,32,108,111,97,100, - 101,114,32,100,105,100,32,110,111,116,46,10,10,32,32,32, - 32,114,125,0,0,0,41,4,114,125,1,0,0,114,114,1, - 0,0,114,137,1,0,0,218,11,95,103,99,100,95,105,109, - 112,111,114,116,114,124,1,0,0,115,3,0,0,0,32,32, - 32,114,7,0,0,0,114,139,1,0,0,114,139,1,0,0, - 95,5,0,0,115,50,0,0,0,128,0,244,18,0,5,18, - 144,36,152,7,160,21,212,4,39,216,7,12,136,113,130,121, - 220,15,28,152,84,160,55,168,69,211,15,50,136,4,220,11, - 25,152,36,164,11,211,11,44,208,4,44,114,22,0,0,0, - 169,1,218,9,114,101,99,117,114,115,105,118,101,99,3,0, - 0,0,0,0,0,0,1,0,0,0,9,0,0,0,3,0, - 0,0,243,236,1,0,0,151,0,124,1,68,0,93,164,0, - 0,125,4,116,1,0,0,0,0,0,0,0,0,124,4,116, - 2,0,0,0,0,0,0,0,0,171,2,0,0,0,0,0, - 0,115,56,124,3,114,16,124,0,106,4,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,100,1,122, - 0,0,0,125,5,110,2,100,2,125,5,116,7,0,0,0, - 0,0,0,0,0,100,3,124,5,155,0,100,4,116,9,0, - 0,0,0,0,0,0,0,124,4,171,1,0,0,0,0,0, - 0,106,4,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,155,0,157,4,171,1,0,0,0,0,0, - 0,130,1,124,4,100,5,107,40,0,0,114,42,124,3,114, - 1,140,83,116,11,0,0,0,0,0,0,0,0,124,0,100, - 6,171,2,0,0,0,0,0,0,115,1,140,96,116,13,0, - 0,0,0,0,0,0,0,124,0,124,0,106,14,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,124, - 2,100,7,172,8,171,4,0,0,0,0,0,0,1,0,140, - 122,116,11,0,0,0,0,0,0,0,0,124,0,124,4,171, - 2,0,0,0,0,0,0,114,1,140,135,124,0,106,4,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,155,0,100,9,124,4,155,0,157,3,125,6,9,0,116, - 17,0,0,0,0,0,0,0,0,124,2,124,6,171,2,0, - 0,0,0,0,0,1,0,140,166,4,0,124,0,83,0,35, - 0,116,18,0,0,0,0,0,0,0,0,36,0,114,62,125, - 7,124,7,106,20,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,124,6,107,40,0,0,114,41,116, - 22,0,0,0,0,0,0,0,0,106,24,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,106,27,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,124,6,116,28,0,0,0,0,0,0,0,0,171,2,0, - 0,0,0,0,0,129,5,89,0,100,10,125,7,126,7,140, - 234,130,0,100,10,125,7,126,7,119,1,119,0,120,3,89, - 0,119,1,41,11,122,238,70,105,103,117,114,101,32,111,117, - 116,32,119,104,97,116,32,95,95,105,109,112,111,114,116,95, - 95,32,115,104,111,117,108,100,32,114,101,116,117,114,110,46, - 10,10,32,32,32,32,84,104,101,32,105,109,112,111,114,116, - 95,32,112,97,114,97,109,101,116,101,114,32,105,115,32,97, - 32,99,97,108,108,97,98,108,101,32,119,104,105,99,104,32, - 116,97,107,101,115,32,116,104,101,32,110,97,109,101,32,111, - 102,32,109,111,100,117,108,101,32,116,111,10,32,32,32,32, - 105,109,112,111,114,116,46,32,73,116,32,105,115,32,114,101, - 113,117,105,114,101,100,32,116,111,32,100,101,99,111,117,112, - 108,101,32,116,104,101,32,102,117,110,99,116,105,111,110,32, - 102,114,111,109,32,97,115,115,117,109,105,110,103,32,105,109, - 112,111,114,116,108,105,98,39,115,10,32,32,32,32,105,109, - 112,111,114,116,32,105,109,112,108,101,109,101,110,116,97,116, - 105,111,110,32,105,115,32,100,101,115,105,114,101,100,46,10, - 10,32,32,32,32,122,8,46,95,95,97,108,108,95,95,122, - 13,96,96,102,114,111,109,32,108,105,115,116,39,39,122,8, - 73,116,101,109,32,105,110,32,122,18,32,109,117,115,116,32, - 98,101,32,115,116,114,44,32,110,111,116,32,250,1,42,218, - 7,95,95,97,108,108,95,95,84,114,140,1,0,0,114,244, - 0,0,0,78,41,15,114,23,1,0,0,114,121,1,0,0, - 114,11,0,0,0,114,122,1,0,0,114,5,0,0,0,114, - 13,0,0,0,218,16,95,104,97,110,100,108,101,95,102,114, - 111,109,108,105,115,116,114,144,1,0,0,114,161,0,0,0, - 114,129,1,0,0,114,26,0,0,0,114,24,0,0,0,114, - 195,0,0,0,114,76,0,0,0,114,136,1,0,0,41,8, - 114,200,0,0,0,218,8,102,114,111,109,108,105,115,116,114, - 130,1,0,0,114,141,1,0,0,218,1,120,218,5,119,104, - 101,114,101,218,9,102,114,111,109,95,110,97,109,101,218,3, - 101,120,99,115,8,0,0,0,32,32,32,32,32,32,32,32, - 114,7,0,0,0,114,145,1,0,0,114,145,1,0,0,110, - 5,0,0,115,248,0,0,0,128,0,240,20,0,14,22,242, - 0,23,5,22,136,1,220,15,25,152,33,156,83,212,15,33, - 217,15,24,216,24,30,159,15,153,15,168,42,209,24,52,145, - 5,224,24,39,144,5,220,18,27,152,104,160,117,160,103,240, - 0,1,46,35,220,35,39,168,1,163,55,215,35,51,209,35, - 51,208,34,52,240,3,1,29,54,243,0,1,19,55,240,0, - 1,13,55,224,13,14,144,35,138,88,218,19,28,164,23,168, - 22,176,25,213,33,59,220,16,32,160,22,168,22,175,30,169, - 30,184,23,216,43,47,246,3,1,17,49,228,17,24,152,22, - 160,17,213,17,35,216,27,33,159,63,153,63,208,26,43,168, - 49,168,81,168,67,208,24,48,136,73,240,2,9,13,22,220, - 16,41,168,39,176,57,213,16,61,240,31,23,5,22,240,48, - 0,12,18,128,77,248,244,17,0,20,39,242,0,7,13,22, - 240,8,0,21,24,151,72,145,72,160,9,210,20,41,220,20, - 23,151,75,145,75,151,79,145,79,160,73,172,126,211,20,62, - 208,20,74,220,20,28,216,16,21,251,240,15,7,13,22,250, - 115,30,0,0,0,194,28,12,66,44,2,194,44,9,67,51, - 5,194,53,51,67,46,5,195,45,1,67,46,5,195,46,5, - 67,51,5,99,1,0,0,0,0,0,0,0,0,0,0,0, - 7,0,0,0,3,0,0,0,243,92,1,0,0,151,0,124, - 0,106,1,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,100,1,171,1,0,0,0,0,0,0,125, - 1,124,0,106,1,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,100,2,171,1,0,0,0,0,0, - 0,125,2,124,1,129,64,124,2,129,60,124,1,124,2,106, - 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,107,55,0,0,114,45,116,4,0,0,0,0,0, - 0,0,0,106,7,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,100,3,124,1,155,2,100,4,124, - 2,106,2,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,155,2,100,5,157,5,116,8,0,0,0, - 0,0,0,0,0,100,6,172,7,171,3,0,0,0,0,0, - 0,1,0,124,1,83,0,124,2,129,12,124,2,106,2,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,83,0,116,4,0,0,0,0,0,0,0,0,106,7,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,100,8,116,10,0,0,0,0,0,0,0,0,100,6,172, - 7,171,3,0,0,0,0,0,0,1,0,124,0,100,9,25, - 0,0,0,125,1,100,10,124,0,118,1,114,20,124,1,106, - 13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,100,11,171,1,0,0,0,0,0,0,100,12,25, - 0,0,0,125,1,124,1,83,0,41,13,122,167,67,97,108, - 99,117,108,97,116,101,32,119,104,97,116,32,95,95,112,97, - 99,107,97,103,101,95,95,32,115,104,111,117,108,100,32,98, - 101,46,10,10,32,32,32,32,95,95,112,97,99,107,97,103, - 101,95,95,32,105,115,32,110,111,116,32,103,117,97,114,97, - 110,116,101,101,100,32,116,111,32,98,101,32,100,101,102,105, - 110,101,100,32,111,114,32,99,111,117,108,100,32,98,101,32, - 115,101,116,32,116,111,32,78,111,110,101,10,32,32,32,32, - 116,111,32,114,101,112,114,101,115,101,110,116,32,116,104,97, - 116,32,105,116,115,32,112,114,111,112,101,114,32,118,97,108, - 117,101,32,105,115,32,117,110,107,110,111,119,110,46,10,10, - 32,32,32,32,114,13,1,0,0,114,204,0,0,0,122,32, - 95,95,112,97,99,107,97,103,101,95,95,32,33,61,32,95, - 95,115,112,101,99,95,95,46,112,97,114,101,110,116,32,40, - 122,4,32,33,61,32,114,229,0,0,0,233,3,0,0,0, - 41,1,218,10,115,116,97,99,107,108,101,118,101,108,122,89, - 99,97,110,39,116,32,114,101,115,111,108,118,101,32,112,97, - 99,107,97,103,101,32,102,114,111,109,32,95,95,115,112,101, - 99,95,95,32,111,114,32,95,95,112,97,99,107,97,103,101, - 95,95,44,32,102,97,108,108,105,110,103,32,98,97,99,107, - 32,111,110,32,95,95,110,97,109,101,95,95,32,97,110,100, - 32,95,95,112,97,116,104,95,95,114,11,0,0,0,114,7, - 1,0,0,114,244,0,0,0,114,125,0,0,0,41,7,114, - 76,0,0,0,114,246,0,0,0,114,191,0,0,0,114,192, - 0,0,0,114,193,0,0,0,114,27,1,0,0,114,245,0, - 0,0,41,3,218,7,103,108,111,98,97,108,115,114,110,1, - 0,0,114,199,0,0,0,115,3,0,0,0,32,32,32,114, - 7,0,0,0,218,17,95,99,97,108,99,95,95,95,112,97, - 99,107,97,103,101,95,95,114,155,1,0,0,147,5,0,0, - 115,200,0,0,0,128,0,240,14,0,15,22,143,107,137,107, - 152,45,211,14,40,128,71,216,11,18,143,59,137,59,144,122, - 211,11,34,128,68,216,7,14,208,7,26,216,11,15,208,11, - 27,160,7,168,52,175,59,169,59,210,32,54,220,12,21,143, - 78,137,78,240,0,1,28,31,216,31,38,152,107,168,20,168, - 100,175,107,169,107,168,95,184,65,240,3,1,28,63,228,27, - 45,184,33,240,5,0,13,27,244,0,2,13,61,240,6,0, - 16,23,136,14,216,9,13,208,9,25,216,15,19,143,123,137, - 123,208,8,26,228,8,17,143,14,137,14,240,0,1,24,63, - 228,23,36,176,17,240,5,0,9,23,244,0,2,9,52,240, - 6,0,19,26,152,42,209,18,37,136,7,216,11,21,152,87, - 209,11,36,216,22,29,215,22,40,209,22,40,168,19,211,22, - 45,168,97,209,22,48,136,71,216,11,18,128,78,114,22,0, - 0,0,99,5,0,0,0,0,0,0,0,0,0,0,0,6, - 0,0,0,3,0,0,0,243,172,1,0,0,151,0,124,4, - 100,1,107,40,0,0,114,12,116,1,0,0,0,0,0,0, - 0,0,124,0,171,1,0,0,0,0,0,0,125,5,110,30, - 124,1,129,2,124,1,110,1,105,0,125,6,116,3,0,0, - 0,0,0,0,0,0,124,6,171,1,0,0,0,0,0,0, - 125,7,116,1,0,0,0,0,0,0,0,0,124,0,124,7, - 124,4,171,3,0,0,0,0,0,0,125,5,124,3,115,133, - 124,4,100,1,107,40,0,0,114,29,116,1,0,0,0,0, - 0,0,0,0,124,0,106,5,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,100,3,171,1,0,0, - 0,0,0,0,100,1,25,0,0,0,171,1,0,0,0,0, - 0,0,83,0,124,0,115,2,124,5,83,0,116,7,0,0, - 0,0,0,0,0,0,124,0,171,1,0,0,0,0,0,0, - 116,7,0,0,0,0,0,0,0,0,124,0,106,5,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 100,3,171,1,0,0,0,0,0,0,100,1,25,0,0,0, - 171,1,0,0,0,0,0,0,122,10,0,0,125,8,116,8, - 0,0,0,0,0,0,0,0,106,10,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,124,5,106,12, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,100,2,116,7,0,0,0,0,0,0,0,0,124,5, - 106,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,171,1,0,0,0,0,0,0,124,8,122,10, - 0,0,26,0,25,0,0,0,83,0,116,15,0,0,0,0, - 0,0,0,0,124,5,100,4,171,2,0,0,0,0,0,0, - 114,17,116,17,0,0,0,0,0,0,0,0,124,5,124,3, - 116,0,0,0,0,0,0,0,0,0,171,3,0,0,0,0, - 0,0,83,0,124,5,83,0,41,5,97,215,1,0,0,73, - 109,112,111,114,116,32,97,32,109,111,100,117,108,101,46,10, - 10,32,32,32,32,84,104,101,32,39,103,108,111,98,97,108, - 115,39,32,97,114,103,117,109,101,110,116,32,105,115,32,117, - 115,101,100,32,116,111,32,105,110,102,101,114,32,119,104,101, - 114,101,32,116,104,101,32,105,109,112,111,114,116,32,105,115, - 32,111,99,99,117,114,114,105,110,103,32,102,114,111,109,10, - 32,32,32,32,116,111,32,104,97,110,100,108,101,32,114,101, - 108,97,116,105,118,101,32,105,109,112,111,114,116,115,46,32, - 84,104,101,32,39,108,111,99,97,108,115,39,32,97,114,103, - 117,109,101,110,116,32,105,115,32,105,103,110,111,114,101,100, - 46,32,84,104,101,10,32,32,32,32,39,102,114,111,109,108, - 105,115,116,39,32,97,114,103,117,109,101,110,116,32,115,112, - 101,99,105,102,105,101,115,32,119,104,97,116,32,115,104,111, - 117,108,100,32,101,120,105,115,116,32,97,115,32,97,116,116, - 114,105,98,117,116,101,115,32,111,110,32,116,104,101,32,109, - 111,100,117,108,101,10,32,32,32,32,98,101,105,110,103,32, - 105,109,112,111,114,116,101,100,32,40,101,46,103,46,32,96, - 96,102,114,111,109,32,109,111,100,117,108,101,32,105,109,112, - 111,114,116,32,60,102,114,111,109,108,105,115,116,62,96,96, - 41,46,32,32,84,104,101,32,39,108,101,118,101,108,39,10, - 32,32,32,32,97,114,103,117,109,101,110,116,32,114,101,112, - 114,101,115,101,110,116,115,32,116,104,101,32,112,97,99,107, - 97,103,101,32,108,111,99,97,116,105,111,110,32,116,111,32, - 105,109,112,111,114,116,32,102,114,111,109,32,105,110,32,97, - 32,114,101,108,97,116,105,118,101,10,32,32,32,32,105,109, - 112,111,114,116,32,40,101,46,103,46,32,96,96,102,114,111, - 109,32,46,46,112,107,103,32,105,109,112,111,114,116,32,109, - 111,100,96,96,32,119,111,117,108,100,32,104,97,118,101,32, - 97,32,39,108,101,118,101,108,39,32,111,102,32,50,41,46, - 10,10,32,32,32,32,114,125,0,0,0,78,114,244,0,0, - 0,114,7,1,0,0,41,9,114,139,1,0,0,114,155,1, - 0,0,218,9,112,97,114,116,105,116,105,111,110,114,127,0, - 0,0,114,24,0,0,0,114,195,0,0,0,114,11,0,0, - 0,114,13,0,0,0,114,145,1,0,0,41,9,114,26,0, - 0,0,114,154,1,0,0,218,6,108,111,99,97,108,115,114, - 146,1,0,0,114,111,1,0,0,114,200,0,0,0,218,8, - 103,108,111,98,97,108,115,95,114,110,1,0,0,218,7,99, - 117,116,95,111,102,102,115,9,0,0,0,32,32,32,32,32, - 32,32,32,32,114,7,0,0,0,218,10,95,95,105,109,112, - 111,114,116,95,95,114,161,1,0,0,174,5,0,0,115,210, - 0,0,0,128,0,240,22,0,8,13,144,1,130,122,220,17, - 28,152,84,211,17,34,137,6,224,30,37,208,30,49,145,55, - 176,114,136,8,220,18,35,160,72,211,18,45,136,7,220,17, - 28,152,84,160,55,168,69,211,17,50,136,6,217,11,19,240, - 6,0,12,17,144,65,138,58,220,19,30,152,116,159,126,153, - 126,168,99,211,31,50,176,49,209,31,53,211,19,54,208,12, - 54,217,17,21,216,19,25,136,77,244,8,0,23,26,152,36, - 147,105,164,35,160,100,167,110,161,110,176,83,211,38,57,184, - 33,209,38,60,211,34,61,209,22,61,136,71,244,6,0,20, - 23,151,59,145,59,152,118,159,127,153,127,208,47,76,180,3, - 176,70,183,79,177,79,211,48,68,192,87,209,48,76,208,31, - 77,209,19,78,208,12,78,220,9,16,144,22,152,26,212,9, - 36,220,15,31,160,6,168,8,180,43,211,15,62,208,8,62, - 224,15,21,136,13,114,22,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, - 98,0,0,0,151,0,116,0,0,0,0,0,0,0,0,0, - 106,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,124,0,171,1,0,0,0,0,0,0,125,1, - 124,1,128,14,116,5,0,0,0,0,0,0,0,0,100,1, - 124,0,122,0,0,0,171,1,0,0,0,0,0,0,130,1, - 116,7,0,0,0,0,0,0,0,0,124,1,171,1,0,0, - 0,0,0,0,83,0,41,2,78,122,25,110,111,32,98,117, - 105,108,116,45,105,110,32,109,111,100,117,108,101,32,110,97, - 109,101,100,32,41,4,114,37,1,0,0,114,43,1,0,0, - 114,178,0,0,0,114,33,1,0,0,41,2,114,26,0,0, - 0,114,199,0,0,0,115,2,0,0,0,32,32,114,7,0, - 0,0,218,18,95,98,117,105,108,116,105,110,95,102,114,111, - 109,95,110,97,109,101,114,163,1,0,0,211,5,0,0,115, - 51,0,0,0,128,0,220,11,26,215,11,36,209,11,36,160, - 84,211,11,42,128,68,216,7,11,128,124,220,14,25,208,26, - 53,184,4,209,26,60,211,14,61,208,8,61,220,11,25,152, - 36,211,11,31,208,4,31,114,22,0,0,0,99,2,0,0, - 0,0,0,0,0,0,0,0,0,6,0,0,0,3,0,0, - 0,243,44,2,0,0,151,0,124,1,97,0,124,0,97,1, - 116,5,0,0,0,0,0,0,0,0,116,2,0,0,0,0, - 0,0,0,0,171,1,0,0,0,0,0,0,125,2,116,2, - 0,0,0,0,0,0,0,0,106,6,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,106,9,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 171,0,0,0,0,0,0,0,68,0,93,122,0,0,92,2, - 0,0,125,3,125,4,116,11,0,0,0,0,0,0,0,0, - 124,4,124,2,171,2,0,0,0,0,0,0,115,1,140,19, - 124,3,116,2,0,0,0,0,0,0,0,0,106,12,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 118,0,114,7,116,14,0,0,0,0,0,0,0,0,125,5, - 110,29,116,0,0,0,0,0,0,0,0,0,106,17,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 124,3,171,1,0,0,0,0,0,0,114,7,116,18,0,0, - 0,0,0,0,0,0,125,5,110,1,140,73,116,21,0,0, - 0,0,0,0,0,0,124,4,124,5,171,2,0,0,0,0, - 0,0,125,6,116,23,0,0,0,0,0,0,0,0,124,6, - 124,4,171,2,0,0,0,0,0,0,1,0,124,5,116,18, - 0,0,0,0,0,0,0,0,117,0,115,1,140,106,124,5, - 106,25,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,124,4,171,1,0,0,0,0,0,0,1,0, - 140,124,4,0,116,2,0,0,0,0,0,0,0,0,106,6, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,116,26,0,0,0,0,0,0,0,0,25,0,0,0, - 125,7,100,1,68,0,93,64,0,0,125,8,124,8,116,2, - 0,0,0,0,0,0,0,0,106,6,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,118,1,114,12, - 116,29,0,0,0,0,0,0,0,0,124,8,171,1,0,0, - 0,0,0,0,125,9,110,19,116,2,0,0,0,0,0,0, - 0,0,106,6,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,124,8,25,0,0,0,125,9,116,31, - 0,0,0,0,0,0,0,0,124,7,124,8,124,9,171,3, - 0,0,0,0,0,0,1,0,140,66,4,0,116,33,0,0, - 0,0,0,0,0,0,171,0,0,0,0,0,0,0,97,17, - 121,2,41,3,122,250,83,101,116,117,112,32,105,109,112,111, - 114,116,108,105,98,32,98,121,32,105,109,112,111,114,116,105, - 110,103,32,110,101,101,100,101,100,32,98,117,105,108,116,45, - 105,110,32,109,111,100,117,108,101,115,32,97,110,100,32,105, - 110,106,101,99,116,105,110,103,32,116,104,101,109,10,32,32, - 32,32,105,110,116,111,32,116,104,101,32,103,108,111,98,97, - 108,32,110,97,109,101,115,112,97,99,101,46,10,10,32,32, - 32,32,65,115,32,115,121,115,32,105,115,32,110,101,101,100, - 101,100,32,102,111,114,32,115,121,115,46,109,111,100,117,108, - 101,115,32,97,99,99,101,115,115,32,97,110,100,32,95,105, - 109,112,32,105,115,32,110,101,101,100,101,100,32,116,111,32, - 108,111,97,100,32,98,117,105,108,116,45,105,110,10,32,32, - 32,32,109,111,100,117,108,101,115,44,32,116,104,111,115,101, - 32,116,119,111,32,109,111,100,117,108,101,115,32,109,117,115, - 116,32,98,101,32,101,120,112,108,105,99,105,116,108,121,32, - 112,97,115,115,101,100,32,105,110,46,10,10,32,32,32,32, - 41,3,114,109,0,0,0,114,191,0,0,0,114,52,0,0, - 0,78,41,18,114,151,0,0,0,114,24,0,0,0,114,5, - 0,0,0,114,195,0,0,0,218,5,105,116,101,109,115,114, - 23,1,0,0,114,177,0,0,0,114,37,1,0,0,114,187, - 0,0,0,114,58,1,0,0,114,9,1,0,0,114,16,1, - 0,0,114,74,1,0,0,114,11,0,0,0,114,163,1,0, - 0,114,14,0,0,0,114,34,0,0,0,114,85,0,0,0, - 41,10,218,10,115,121,115,95,109,111,100,117,108,101,218,11, - 95,105,109,112,95,109,111,100,117,108,101,218,11,109,111,100, - 117,108,101,95,116,121,112,101,114,26,0,0,0,114,200,0, - 0,0,114,213,0,0,0,114,199,0,0,0,218,11,115,101, - 108,102,95,109,111,100,117,108,101,218,12,98,117,105,108,116, - 105,110,95,110,97,109,101,218,14,98,117,105,108,116,105,110, - 95,109,111,100,117,108,101,115,10,0,0,0,32,32,32,32, - 32,32,32,32,32,32,114,7,0,0,0,218,6,95,115,101, - 116,117,112,114,172,1,0,0,218,5,0,0,115,239,0,0, - 0,128,0,240,18,0,12,23,128,68,216,10,20,128,67,244, - 6,0,19,23,148,115,147,41,128,75,220,24,27,159,11,153, - 11,215,24,41,209,24,41,211,24,43,242,0,11,5,46,137, - 12,136,4,136,102,220,11,21,144,102,152,107,213,11,42,216, - 15,19,148,115,215,23,47,209,23,47,209,15,47,220,25,40, - 145,6,220,17,21,151,30,145,30,160,4,212,17,37,220,25, - 39,145,6,224,16,24,220,19,36,160,86,168,86,211,19,52, - 136,68,220,12,30,152,116,160,86,212,12,44,216,15,21,156, - 30,210,15,39,216,16,22,215,16,37,209,16,37,160,102,213, - 16,45,240,23,11,5,46,244,28,0,19,22,151,43,145,43, - 156,104,209,18,39,128,75,216,24,60,242,0,5,5,59,136, - 12,216,11,23,156,115,159,123,153,123,209,11,42,220,29,47, - 176,12,211,29,61,137,78,228,29,32,159,91,153,91,168,28, - 209,29,54,136,78,220,8,15,144,11,152,92,168,62,213,8, - 58,240,11,5,5,59,244,16,0,20,40,211,19,41,129,76, - 114,22,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,168,0,0,0,151, - 0,116,1,0,0,0,0,0,0,0,0,124,0,124,1,171, - 2,0,0,0,0,0,0,1,0,116,2,0,0,0,0,0, + 0,0,124,1,171,1,0,0,0,0,0,0,83,0,41,1, + 122,46,82,101,116,117,114,110,32,84,114,117,101,32,105,102, + 32,116,104,101,32,102,114,111,122,101,110,32,109,111,100,117, + 108,101,32,105,115,32,97,32,112,97,99,107,97,103,101,46, + 41,2,114,151,0,0,0,114,65,1,0,0,114,49,1,0, + 0,115,2,0,0,0,32,32,114,7,0,0,0,114,220,0, + 0,0,122,25,70,114,111,122,101,110,73,109,112,111,114,116, + 101,114,46,105,115,95,112,97,99,107,97,103,101,185,4,0, + 0,114,97,1,0,0,114,22,0,0,0,114,222,0,0,0, + 114,55,1,0,0,41,17,114,11,0,0,0,114,10,0,0, + 0,114,3,0,0,0,114,12,0,0,0,114,255,0,0,0, + 114,56,1,0,0,114,74,1,0,0,114,66,1,0,0,114, + 43,1,0,0,114,58,0,0,0,114,18,1,0,0,114,19, + 1,0,0,114,28,1,0,0,114,189,0,0,0,114,50,1, + 0,0,114,53,1,0,0,114,220,0,0,0,114,31,0,0, + 0,114,22,0,0,0,114,7,0,0,0,114,58,1,0,0, + 114,58,1,0,0,255,3,0,0,115,219,0,0,0,132,0, + 241,4,5,5,8,240,14,0,15,23,128,71,224,5,16,241, + 2,66,1,5,37,243,3,0,6,17,240,2,66,1,5,37, + 240,72,2,0,6,17,242,2,22,5,32,243,3,0,6,17, + 240,2,22,5,32,240,48,0,6,17,242,2,27,5,20,243, + 3,0,6,17,240,2,27,5,20,240,58,0,6,18,241,2, + 10,5,22,243,3,0,6,18,240,2,10,5,22,240,24,0, + 6,18,241,2,4,5,36,243,3,0,6,18,240,2,4,5, + 36,240,12,0,6,17,241,2,16,5,22,243,3,0,6,17, + 240,2,16,5,22,240,36,0,6,17,216,5,21,241,2,2, + 5,48,243,3,0,6,22,243,3,0,6,17,240,4,2,5, + 48,240,8,0,6,17,216,5,21,241,2,2,5,20,243,3, + 0,6,22,243,3,0,6,17,240,4,2,5,20,240,8,0, + 6,17,216,5,21,241,2,2,5,48,243,3,0,6,22,243, + 3,0,6,17,241,4,2,5,48,114,22,0,0,0,114,58, + 1,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,151,0,101, + 0,90,1,100,0,90,2,100,1,90,3,100,2,132,0,90, + 4,100,3,132,0,90,5,121,4,41,5,218,18,95,73,109, + 112,111,114,116,76,111,99,107,67,111,110,116,101,120,116,122, + 36,67,111,110,116,101,120,116,32,109,97,110,97,103,101,114, + 32,102,111,114,32,116,104,101,32,105,109,112,111,114,116,32, + 108,111,99,107,46,99,1,0,0,0,0,0,0,0,0,0, + 0,0,2,0,0,0,3,0,0,0,243,44,0,0,0,151, + 0,116,0,0,0,0,0,0,0,0,0,106,3,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,171, + 0,0,0,0,0,0,0,1,0,121,1,41,2,122,24,65, + 99,113,117,105,114,101,32,116,104,101,32,105,109,112,111,114, + 116,32,108,111,99,107,46,78,41,2,114,151,0,0,0,114, + 152,0,0,0,114,66,0,0,0,115,1,0,0,0,32,114, + 7,0,0,0,114,87,0,0,0,122,28,95,73,109,112,111, + 114,116,76,111,99,107,67,111,110,116,101,120,116,46,95,95, + 101,110,116,101,114,95,95,198,4,0,0,243,14,0,0,0, + 128,0,228,8,12,215,8,25,209,8,25,213,8,27,114,22, + 0,0,0,99,4,0,0,0,0,0,0,0,0,0,0,0, + 2,0,0,0,3,0,0,0,243,44,0,0,0,151,0,116, + 0,0,0,0,0,0,0,0,0,106,3,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,171,0,0, + 0,0,0,0,0,1,0,121,1,41,2,122,60,82,101,108, + 101,97,115,101,32,116,104,101,32,105,109,112,111,114,116,32, + 108,111,99,107,32,114,101,103,97,114,100,108,101,115,115,32, + 111,102,32,97,110,121,32,114,97,105,115,101,100,32,101,120, + 99,101,112,116,105,111,110,115,46,78,41,2,114,151,0,0, + 0,114,154,0,0,0,41,4,114,44,0,0,0,218,8,101, + 120,99,95,116,121,112,101,218,9,101,120,99,95,118,97,108, + 117,101,218,13,101,120,99,95,116,114,97,99,101,98,97,99, + 107,115,4,0,0,0,32,32,32,32,114,7,0,0,0,114, + 92,0,0,0,122,27,95,73,109,112,111,114,116,76,111,99, + 107,67,111,110,116,101,120,116,46,95,95,101,120,105,116,95, + 95,202,4,0,0,114,103,1,0,0,114,22,0,0,0,78, + 41,6,114,11,0,0,0,114,10,0,0,0,114,3,0,0, + 0,114,12,0,0,0,114,87,0,0,0,114,92,0,0,0, + 114,31,0,0,0,114,22,0,0,0,114,7,0,0,0,114, + 101,1,0,0,114,101,1,0,0,194,4,0,0,115,15,0, + 0,0,132,0,225,4,46,242,4,2,5,28,243,8,2,5, + 28,114,22,0,0,0,114,101,1,0,0,99,3,0,0,0, + 0,0,0,0,0,0,0,0,5,0,0,0,3,0,0,0, + 243,126,0,0,0,151,0,124,1,106,1,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,100,1,124, + 2,100,2,122,10,0,0,171,2,0,0,0,0,0,0,125, + 3,116,3,0,0,0,0,0,0,0,0,124,3,171,1,0, + 0,0,0,0,0,124,2,107,2,0,0,114,11,116,5,0, + 0,0,0,0,0,0,0,100,3,171,1,0,0,0,0,0, + 0,130,1,124,3,100,4,25,0,0,0,125,4,124,0,114, + 7,124,4,155,0,100,1,124,0,155,0,157,3,83,0,124, + 4,83,0,41,5,122,50,82,101,115,111,108,118,101,32,97, + 32,114,101,108,97,116,105,118,101,32,109,111,100,117,108,101, + 32,110,97,109,101,32,116,111,32,97,110,32,97,98,115,111, + 108,117,116,101,32,111,110,101,46,114,244,0,0,0,114,138, + 0,0,0,122,50,97,116,116,101,109,112,116,101,100,32,114, + 101,108,97,116,105,118,101,32,105,109,112,111,114,116,32,98, + 101,121,111,110,100,32,116,111,112,45,108,101,118,101,108,32, + 112,97,99,107,97,103,101,114,125,0,0,0,41,3,218,6, + 114,115,112,108,105,116,114,127,0,0,0,114,178,0,0,0, + 41,5,114,26,0,0,0,218,7,112,97,99,107,97,103,101, + 218,5,108,101,118,101,108,218,4,98,105,116,115,218,4,98, + 97,115,101,115,5,0,0,0,32,32,32,32,32,114,7,0, + 0,0,218,13,95,114,101,115,111,108,118,101,95,110,97,109, + 101,114,114,1,0,0,207,4,0,0,115,79,0,0,0,128, + 0,224,11,18,143,62,137,62,152,35,152,117,160,113,153,121, + 211,11,41,128,68,220,7,10,136,52,131,121,144,53,210,7, + 24,220,14,25,208,26,78,211,14,79,208,8,79,216,11,15, + 144,1,137,55,128,68,217,31,35,136,100,136,86,144,49,144, + 84,144,70,208,11,27,208,4,45,168,20,208,4,45,114,22, + 0,0,0,99,3,0,0,0,0,0,0,0,0,0,0,0, + 7,0,0,0,3,0,0,0,243,242,1,0,0,151,0,116, + 0,0,0,0,0,0,0,0,0,106,2,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,125,3,124, + 3,128,11,116,5,0,0,0,0,0,0,0,0,100,2,171, + 1,0,0,0,0,0,0,130,1,124,3,115,26,116,6,0, + 0,0,0,0,0,0,0,106,9,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,100,3,116,10,0, + 0,0,0,0,0,0,0,171,2,0,0,0,0,0,0,1, + 0,124,0,116,0,0,0,0,0,0,0,0,0,106,12,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,118,0,125,4,124,3,68,0,93,113,0,0,125,5,116, + 15,0,0,0,0,0,0,0,0,171,0,0,0,0,0,0, + 0,53,0,1,0,9,0,124,5,106,16,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,125,6,2, + 0,124,6,124,0,124,1,124,2,171,3,0,0,0,0,0, + 0,125,7,9,0,100,1,100,1,100,1,171,2,0,0,0, + 0,0,0,1,0,127,7,128,1,140,49,124,4,115,60,124, + 0,116,0,0,0,0,0,0,0,0,0,106,12,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,118, + 0,114,42,116,0,0,0,0,0,0,0,0,0,106,12,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,124,0,25,0,0,0,125,8,9,0,124,8,106,20,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,125,9,124,9,128,4,124,7,99,2,1,0,83,0,124, + 9,99,2,1,0,83,0,124,7,99,2,1,0,83,0,4, + 0,121,1,35,0,116,18,0,0,0,0,0,0,0,0,36, + 0,114,11,1,0,89,0,100,1,100,1,100,1,171,2,0, + 0,0,0,0,0,1,0,140,136,119,0,120,3,89,0,119, + 1,35,0,49,0,115,1,119,2,1,0,89,0,1,0,1, + 0,140,103,120,3,89,0,119,1,35,0,116,18,0,0,0, + 0,0,0,0,0,36,0,114,7,1,0,124,7,99,2,89, + 0,99,2,1,0,83,0,119,0,120,3,89,0,119,1,41, + 4,122,21,70,105,110,100,32,97,32,109,111,100,117,108,101, + 39,115,32,115,112,101,99,46,78,122,53,115,121,115,46,109, + 101,116,97,95,112,97,116,104,32,105,115,32,78,111,110,101, + 44,32,80,121,116,104,111,110,32,105,115,32,108,105,107,101, + 108,121,32,115,104,117,116,116,105,110,103,32,100,111,119,110, + 122,22,115,121,115,46,109,101,116,97,95,112,97,116,104,32, + 105,115,32,101,109,112,116,121,41,11,114,24,0,0,0,218, + 9,109,101,116,97,95,112,97,116,104,114,178,0,0,0,114, + 191,0,0,0,114,192,0,0,0,114,27,1,0,0,114,195, + 0,0,0,114,101,1,0,0,114,43,1,0,0,114,4,0, + 0,0,114,204,0,0,0,41,10,114,26,0,0,0,114,41, + 1,0,0,114,42,1,0,0,114,116,1,0,0,218,9,105, + 115,95,114,101,108,111,97,100,218,6,102,105,110,100,101,114, + 114,43,1,0,0,114,199,0,0,0,114,200,0,0,0,114, + 204,0,0,0,115,10,0,0,0,32,32,32,32,32,32,32, + 32,32,32,114,7,0,0,0,218,10,95,102,105,110,100,95, + 115,112,101,99,114,119,1,0,0,216,4,0,0,115,20,1, + 0,0,128,0,228,16,19,151,13,145,13,128,73,216,7,16, + 208,7,24,228,14,25,240,0,1,27,42,243,0,1,15,43, + 240,0,1,9,43,241,6,0,12,21,220,8,17,143,14,137, + 14,208,23,47,180,29,212,8,63,240,10,0,17,21,156,3, + 159,11,153,11,208,16,35,128,73,216,18,27,242,0,27,5, + 20,136,6,220,13,31,211,13,33,241,0,6,9,53,240,2, + 5,13,53,216,28,34,215,28,44,209,28,44,144,9,241,8, + 0,24,33,160,20,160,116,168,86,211,23,52,145,4,247,13, + 6,9,53,240,14,0,12,16,209,11,27,225,19,28,160,20, + 172,19,175,27,169,27,209,33,52,220,25,28,159,27,153,27, + 160,84,209,25,42,144,6,240,2,11,17,40,216,31,37,159, + 127,153,127,144,72,240,14,0,24,32,208,23,39,216,31,35, + 154,11,224,31,39,154,15,224,23,27,146,11,240,51,27,5, + 20,240,54,0,16,20,248,244,47,0,20,34,242,0,1,13, + 25,216,16,24,247,9,6,9,53,240,0,6,9,53,240,6, + 1,13,25,250,247,7,6,9,53,240,0,6,9,53,251,244, + 26,0,24,38,242,0,4,17,32,240,8,0,28,32,148,75, + 240,9,4,17,32,250,115,66,0,0,0,193,27,1,67,26, + 5,193,29,12,67,3,4,193,41,10,67,26,5,194,39,12, + 67,38,2,195,3,9,67,23,7,195,12,1,67,26,5,195, + 22,1,67,23,7,195,23,3,67,26,5,195,26,5,67,35, + 9,195,38,11,67,54,5,195,53,1,67,54,5,99,3,0, + 0,0,0,0,0,0,0,0,0,0,6,0,0,0,3,0, + 0,0,243,242,0,0,0,151,0,116,1,0,0,0,0,0, + 0,0,0,124,0,116,2,0,0,0,0,0,0,0,0,171, + 2,0,0,0,0,0,0,115,23,116,5,0,0,0,0,0, + 0,0,0,100,1,116,7,0,0,0,0,0,0,0,0,124, + 0,171,1,0,0,0,0,0,0,155,0,157,2,171,1,0, + 0,0,0,0,0,130,1,124,2,100,2,107,2,0,0,114, + 11,116,9,0,0,0,0,0,0,0,0,100,3,171,1,0, + 0,0,0,0,0,130,1,124,2,100,2,107,68,0,0,114, + 40,116,1,0,0,0,0,0,0,0,0,124,1,116,2,0, + 0,0,0,0,0,0,0,171,2,0,0,0,0,0,0,115, + 11,116,5,0,0,0,0,0,0,0,0,100,4,171,1,0, + 0,0,0,0,0,130,1,124,1,115,11,116,11,0,0,0, + 0,0,0,0,0,100,5,171,1,0,0,0,0,0,0,130, + 1,124,0,115,17,124,2,100,2,107,40,0,0,114,11,116, + 9,0,0,0,0,0,0,0,0,100,6,171,1,0,0,0, + 0,0,0,130,1,121,7,121,7,41,8,122,28,86,101,114, + 105,102,121,32,97,114,103,117,109,101,110,116,115,32,97,114, + 101,32,34,115,97,110,101,34,46,122,29,109,111,100,117,108, + 101,32,110,97,109,101,32,109,117,115,116,32,98,101,32,115, + 116,114,44,32,110,111,116,32,114,125,0,0,0,122,18,108, + 101,118,101,108,32,109,117,115,116,32,98,101,32,62,61,32, + 48,122,31,95,95,112,97,99,107,97,103,101,95,95,32,110, + 111,116,32,115,101,116,32,116,111,32,97,32,115,116,114,105, + 110,103,122,54,97,116,116,101,109,112,116,101,100,32,114,101, + 108,97,116,105,118,101,32,105,109,112,111,114,116,32,119,105, + 116,104,32,110,111,32,107,110,111,119,110,32,112,97,114,101, + 110,116,32,112,97,99,107,97,103,101,122,17,69,109,112,116, + 121,32,109,111,100,117,108,101,32,110,97,109,101,78,41,6, + 114,23,1,0,0,218,3,115,116,114,218,9,84,121,112,101, + 69,114,114,111,114,114,5,0,0,0,218,10,86,97,108,117, + 101,69,114,114,111,114,114,178,0,0,0,169,3,114,26,0, + 0,0,114,110,1,0,0,114,111,1,0,0,115,3,0,0, + 0,32,32,32,114,7,0,0,0,218,13,95,115,97,110,105, + 116,121,95,99,104,101,99,107,114,125,1,0,0,5,5,0, + 0,115,132,0,0,0,128,0,228,11,21,144,100,156,67,212, + 11,32,220,14,23,208,26,55,188,4,184,84,187,10,176,124, + 208,24,68,211,14,69,208,8,69,216,7,12,136,113,130,121, + 220,14,24,208,25,45,211,14,46,208,8,46,216,7,12,136, + 113,130,121,220,15,25,152,39,164,51,212,15,39,220,18,27, + 208,28,61,211,18,62,208,12,62,217,17,24,220,18,29,240, + 0,1,31,40,243,0,1,19,41,240,0,1,13,41,225,11, + 15,144,69,152,81,146,74,220,14,24,208,25,44,211,14,45, + 208,8,45,240,3,0,21,31,136,52,114,22,0,0,0,122, + 16,78,111,32,109,111,100,117,108,101,32,110,97,109,101,100, + 32,122,4,123,33,114,125,99,2,0,0,0,0,0,0,0, + 0,0,0,0,6,0,0,0,3,0,0,0,243,86,3,0, + 0,151,0,100,0,125,2,124,0,106,1,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,100,1,171, + 1,0,0,0,0,0,0,100,2,25,0,0,0,125,3,100, + 0,125,4,124,3,114,131,124,3,116,2,0,0,0,0,0, 0,0,0,106,4,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,106,7,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,116,8,0,0,0, - 0,0,0,0,0,171,1,0,0,0,0,0,0,1,0,116, - 2,0,0,0,0,0,0,0,0,106,4,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,106,7,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,116,10,0,0,0,0,0,0,0,0,171,1,0,0,0, - 0,0,0,1,0,121,1,41,2,122,48,73,110,115,116,97, - 108,108,32,105,109,112,111,114,116,101,114,115,32,102,111,114, - 32,98,117,105,108,116,105,110,32,97,110,100,32,102,114,111, - 122,101,110,32,109,111,100,117,108,101,115,78,41,6,114,172, - 1,0,0,114,24,0,0,0,114,116,1,0,0,114,51,0, - 0,0,114,37,1,0,0,114,58,1,0,0,41,2,114,166, - 1,0,0,114,167,1,0,0,115,2,0,0,0,32,32,114, - 7,0,0,0,218,8,95,105,110,115,116,97,108,108,114,174, - 1,0,0,2,6,0,0,115,48,0,0,0,128,0,228,4, - 10,136,58,144,123,212,4,35,228,4,7,135,77,129,77,215, - 4,24,209,4,24,156,31,212,4,41,220,4,7,135,77,129, - 77,215,4,24,209,4,24,156,30,213,4,40,114,22,0,0, - 0,99,0,0,0,0,0,0,0,0,0,0,0,0,4,0, - 0,0,3,0,0,0,243,92,0,0,0,151,0,100,1,100, - 2,108,0,125,0,124,0,97,1,124,0,106,5,0,0,0, + 0,0,0,0,0,0,0,118,1,114,12,116,7,0,0,0, + 0,0,0,0,0,124,1,124,3,171,2,0,0,0,0,0, + 0,1,0,124,0,116,2,0,0,0,0,0,0,0,0,106, + 4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,118,0,114,19,116,2,0,0,0,0,0,0,0, + 0,106,4,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,124,0,25,0,0,0,83,0,116,2,0, + 0,0,0,0,0,0,0,106,4,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,124,3,25,0,0, + 0,125,5,9,0,124,5,106,8,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,125,2,124,5,106, + 16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,125,4,124,0,106,1,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,100,1,171,1,0, + 0,0,0,0,0,100,6,25,0,0,0,125,7,116,19,0, + 0,0,0,0,0,0,0,124,0,124,2,171,2,0,0,0, + 0,0,0,125,8,124,8,128,21,116,15,0,0,0,0,0, + 0,0,0,116,12,0,0,0,0,0,0,0,0,155,0,124, + 0,155,2,157,2,124,0,172,5,171,2,0,0,0,0,0, + 0,130,1,124,4,114,27,124,4,106,20,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,106,23,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,127,7,171,1,0,0,0,0,0,0,1,0,9,0,116, + 25,0,0,0,0,0,0,0,0,124,8,171,1,0,0,0, + 0,0,0,125,9,124,4,114,27,124,4,106,20,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,106, + 27,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,171,0,0,0,0,0,0,0,1,0,9,0,124, + 3,114,35,116,2,0,0,0,0,0,0,0,0,106,4,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,124,3,25,0,0,0,125,5,9,0,116,29,0,0,0, + 0,0,0,0,0,124,5,127,7,124,9,171,3,0,0,0, + 0,0,0,1,0,124,9,83,0,124,9,83,0,35,0,116, + 10,0,0,0,0,0,0,0,0,36,0,114,29,1,0,116, + 12,0,0,0,0,0,0,0,0,155,0,124,0,155,2,100, + 3,124,3,155,2,100,4,157,5,125,6,116,15,0,0,0, + 0,0,0,0,0,124,6,124,0,172,5,171,2,0,0,0, + 0,0,0,100,0,130,2,119,0,120,3,89,0,119,1,35, + 0,124,4,114,27,124,4,106,20,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,106,27,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,171, + 0,0,0,0,0,0,0,1,0,119,0,119,0,120,3,89, + 0,119,1,35,0,116,10,0,0,0,0,0,0,0,0,36, + 0,114,38,1,0,100,7,124,3,155,2,100,8,127,7,155, + 2,157,4,125,6,116,30,0,0,0,0,0,0,0,0,106, + 33,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,124,6,116,34,0,0,0,0,0,0,0,0,171, + 2,0,0,0,0,0,0,1,0,89,0,124,9,83,0,119, + 0,120,3,89,0,119,1,41,9,78,114,244,0,0,0,114, + 125,0,0,0,122,2,59,32,122,17,32,105,115,32,110,111, + 116,32,97,32,112,97,99,107,97,103,101,114,25,0,0,0, + 233,2,0,0,0,122,27,67,97,110,110,111,116,32,115,101, + 116,32,97,110,32,97,116,116,114,105,98,117,116,101,32,111, + 110,32,122,18,32,102,111,114,32,99,104,105,108,100,32,109, + 111,100,117,108,101,32,41,18,114,245,0,0,0,114,24,0, + 0,0,114,195,0,0,0,114,161,0,0,0,114,7,1,0, + 0,114,4,0,0,0,218,15,95,69,82,82,95,77,83,71, + 95,80,82,69,70,73,88,218,19,77,111,100,117,108,101,78, + 111,116,70,111,117,110,100,69,114,114,111,114,114,204,0,0, + 0,114,119,1,0,0,114,224,0,0,0,114,51,0,0,0, + 114,33,1,0,0,114,68,0,0,0,114,14,0,0,0,114, + 191,0,0,0,114,192,0,0,0,114,27,1,0,0,41,10, + 114,26,0,0,0,218,7,105,109,112,111,114,116,95,114,41, + 1,0,0,114,246,0,0,0,218,11,112,97,114,101,110,116, + 95,115,112,101,99,218,13,112,97,114,101,110,116,95,109,111, + 100,117,108,101,114,198,0,0,0,218,5,99,104,105,108,100, + 114,199,0,0,0,114,200,0,0,0,115,10,0,0,0,32, + 32,32,32,32,32,32,32,32,32,114,7,0,0,0,218,23, + 95,102,105,110,100,95,97,110,100,95,108,111,97,100,95,117, + 110,108,111,99,107,101,100,114,134,1,0,0,24,5,0,0, + 115,177,1,0,0,128,0,216,11,15,128,68,216,13,17,143, + 95,137,95,152,83,211,13,33,160,33,209,13,36,128,70,216, + 18,22,128,75,217,7,13,216,11,17,156,19,159,27,153,27, + 209,11,36,220,12,37,160,103,168,118,212,12,54,224,11,15, + 148,51,151,59,145,59,209,11,30,220,19,22,151,59,145,59, + 152,116,209,19,36,208,12,36,220,24,27,159,11,153,11,160, + 70,209,24,43,136,13,240,2,4,9,64,1,216,19,32,215, + 19,41,209,19,41,136,68,240,8,0,23,36,215,22,44,209, + 22,44,136,11,216,16,20,151,15,145,15,160,3,211,16,36, + 160,81,209,16,39,136,5,220,11,21,144,100,152,68,211,11, + 33,128,68,216,7,11,128,124,220,14,33,164,95,208,36,53, + 176,100,176,88,208,34,62,192,84,212,14,74,208,8,74,225, + 11,22,240,6,0,13,24,215,12,49,209,12,49,215,12,56, + 209,12,56,184,21,212,12,63,240,2,4,9,60,220,21,35, + 160,68,211,21,41,136,70,225,15,26,216,16,27,215,16,53, + 209,16,53,215,16,57,209,16,57,213,16,59,217,7,13,228, + 24,27,159,11,153,11,160,70,209,24,43,136,13,240,2,4, + 9,47,220,12,19,144,77,160,53,168,38,212,12,49,240,8, + 0,12,18,128,77,136,54,128,77,248,244,53,0,16,30,242, + 0,2,9,64,1,220,21,36,208,20,37,160,100,160,88,168, + 82,176,6,168,122,208,57,74,208,18,75,136,67,220,18,37, + 160,99,176,4,212,18,53,184,52,208,12,63,240,5,2,9, + 64,1,251,241,32,0,16,27,216,16,27,215,16,53,209,16, + 53,215,16,57,209,16,57,213,16,59,240,3,0,16,27,251, + 244,14,0,16,30,242,0,2,9,47,216,20,47,176,6,168, + 122,208,57,75,200,69,200,57,208,18,85,136,67,220,12,21, + 143,78,137,78,152,51,164,13,213,12,46,216,11,17,128,77, + 240,7,2,9,47,250,115,42,0,0,0,193,50,12,68,46, + 0,195,31,11,69,23,0,196,29,13,69,57,0,196,46,38, + 69,20,3,197,23,31,69,54,3,197,57,43,70,40,3,198, + 39,1,70,40,3,99,2,0,0,0,0,0,0,0,0,0, + 0,0,7,0,0,0,3,0,0,0,243,146,1,0,0,151, + 0,116,0,0,0,0,0,0,0,0,0,106,2,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,106, + 5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,124,0,116,6,0,0,0,0,0,0,0,0,171, + 2,0,0,0,0,0,0,125,2,124,2,116,6,0,0,0, + 0,0,0,0,0,117,0,115,24,116,9,0,0,0,0,0, + 0,0,0,116,9,0,0,0,0,0,0,0,0,124,2,100, + 1,100,2,171,3,0,0,0,0,0,0,100,3,100,4,171, + 3,0,0,0,0,0,0,114,97,116,11,0,0,0,0,0, + 0,0,0,124,0,171,1,0,0,0,0,0,0,53,0,1, + 0,116,0,0,0,0,0,0,0,0,0,106,2,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,106, + 5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,124,0,116,6,0,0,0,0,0,0,0,0,171, + 2,0,0,0,0,0,0,125,2,124,2,116,6,0,0,0, + 0,0,0,0,0,117,0,114,21,116,13,0,0,0,0,0, + 0,0,0,124,0,124,1,171,2,0,0,0,0,0,0,99, + 2,100,2,100,2,100,2,171,2,0,0,0,0,0,0,1, + 0,83,0,9,0,100,2,100,2,100,2,171,2,0,0,0, + 0,0,0,1,0,116,15,0,0,0,0,0,0,0,0,124, + 0,171,1,0,0,0,0,0,0,1,0,124,2,128,19,100, + 5,124,0,155,0,100,6,157,3,125,3,116,17,0,0,0, + 0,0,0,0,0,124,3,124,0,172,7,171,2,0,0,0, + 0,0,0,130,1,124,2,83,0,35,0,49,0,115,1,119, + 2,1,0,89,0,1,0,1,0,140,43,120,3,89,0,119, + 1,41,8,122,25,70,105,110,100,32,97,110,100,32,108,111, + 97,100,32,116,104,101,32,109,111,100,117,108,101,46,114,204, + 0,0,0,78,114,32,1,0,0,70,122,10,105,109,112,111, + 114,116,32,111,102,32,122,28,32,104,97,108,116,101,100,59, + 32,78,111,110,101,32,105,110,32,115,121,115,46,109,111,100, + 117,108,101,115,114,25,0,0,0,41,9,114,24,0,0,0, + 114,195,0,0,0,114,76,0,0,0,218,14,95,78,69,69, + 68,83,95,76,79,65,68,73,78,71,114,15,0,0,0,114, + 142,0,0,0,114,134,1,0,0,114,157,0,0,0,114,129, + 1,0,0,41,4,114,26,0,0,0,114,130,1,0,0,114, + 200,0,0,0,114,172,0,0,0,115,4,0,0,0,32,32, + 32,32,114,7,0,0,0,218,14,95,102,105,110,100,95,97, + 110,100,95,108,111,97,100,114,137,1,0,0,69,5,0,0, + 115,181,0,0,0,128,0,244,10,0,14,17,143,91,137,91, + 143,95,137,95,152,84,164,62,211,13,50,128,70,216,8,14, + 148,46,209,8,32,220,8,15,148,7,152,6,160,10,168,68, + 211,16,49,176,63,192,69,212,8,74,220,13,31,160,4,211, + 13,37,241,0,3,9,62,220,21,24,151,91,145,91,151,95, + 145,95,160,84,172,62,211,21,58,136,70,216,15,21,156,30, + 209,15,39,220,23,46,168,116,176,87,211,23,61,247,7,3, + 9,62,241,0,3,9,62,224,15,39,247,5,3,9,62,244, + 18,0,9,28,152,68,212,8,33,224,7,13,128,126,216,20, + 30,152,116,152,102,208,36,64,208,18,65,136,7,220,14,33, + 160,39,176,4,212,14,53,208,8,53,224,11,17,128,77,247, + 31,3,9,62,240,0,3,9,62,250,115,12,0,0,0,193, + 16,56,66,61,3,194,61,5,67,6,7,99,3,0,0,0, + 0,0,0,0,0,0,0,0,5,0,0,0,3,0,0,0, + 243,96,0,0,0,151,0,116,1,0,0,0,0,0,0,0, + 0,124,0,124,1,124,2,171,3,0,0,0,0,0,0,1, + 0,124,2,100,1,107,68,0,0,114,13,116,3,0,0,0, + 0,0,0,0,0,124,0,124,1,124,2,171,3,0,0,0, + 0,0,0,125,0,116,5,0,0,0,0,0,0,0,0,124, + 0,116,6,0,0,0,0,0,0,0,0,171,2,0,0,0, + 0,0,0,83,0,41,2,97,50,1,0,0,73,109,112,111, + 114,116,32,97,110,100,32,114,101,116,117,114,110,32,116,104, + 101,32,109,111,100,117,108,101,32,98,97,115,101,100,32,111, + 110,32,105,116,115,32,110,97,109,101,44,32,116,104,101,32, + 112,97,99,107,97,103,101,32,116,104,101,32,99,97,108,108, + 32,105,115,10,32,32,32,32,98,101,105,110,103,32,109,97, + 100,101,32,102,114,111,109,44,32,97,110,100,32,116,104,101, + 32,108,101,118,101,108,32,97,100,106,117,115,116,109,101,110, + 116,46,10,10,32,32,32,32,84,104,105,115,32,102,117,110, + 99,116,105,111,110,32,114,101,112,114,101,115,101,110,116,115, + 32,116,104,101,32,103,114,101,97,116,101,115,116,32,99,111, + 109,109,111,110,32,100,101,110,111,109,105,110,97,116,111,114, + 32,111,102,32,102,117,110,99,116,105,111,110,97,108,105,116, + 121,10,32,32,32,32,98,101,116,119,101,101,110,32,105,109, + 112,111,114,116,95,109,111,100,117,108,101,32,97,110,100,32, + 95,95,105,109,112,111,114,116,95,95,46,32,84,104,105,115, + 32,105,110,99,108,117,100,101,115,32,115,101,116,116,105,110, + 103,32,95,95,112,97,99,107,97,103,101,95,95,32,105,102, + 10,32,32,32,32,116,104,101,32,108,111,97,100,101,114,32, + 100,105,100,32,110,111,116,46,10,10,32,32,32,32,114,125, + 0,0,0,41,4,114,125,1,0,0,114,114,1,0,0,114, + 137,1,0,0,218,11,95,103,99,100,95,105,109,112,111,114, + 116,114,124,1,0,0,115,3,0,0,0,32,32,32,114,7, + 0,0,0,114,139,1,0,0,114,139,1,0,0,95,5,0, + 0,115,50,0,0,0,128,0,244,18,0,5,18,144,36,152, + 7,160,21,212,4,39,216,7,12,136,113,130,121,220,15,28, + 152,84,160,55,168,69,211,15,50,136,4,220,11,25,152,36, + 164,11,211,11,44,208,4,44,114,22,0,0,0,169,1,218, + 9,114,101,99,117,114,115,105,118,101,99,3,0,0,0,0, + 0,0,0,1,0,0,0,9,0,0,0,3,0,0,0,243, + 236,1,0,0,151,0,124,1,68,0,93,164,0,0,125,4, + 116,1,0,0,0,0,0,0,0,0,124,4,116,2,0,0, + 0,0,0,0,0,0,171,2,0,0,0,0,0,0,115,56, + 124,3,114,16,124,0,106,4,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,100,1,122,0,0,0, + 125,5,110,2,100,2,125,5,116,7,0,0,0,0,0,0, + 0,0,100,3,124,5,155,0,100,4,116,9,0,0,0,0, + 0,0,0,0,124,4,171,1,0,0,0,0,0,0,106,4, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,155,0,157,4,171,1,0,0,0,0,0,0,130,1, + 124,4,100,5,107,40,0,0,114,42,124,3,114,1,140,83, + 116,11,0,0,0,0,0,0,0,0,124,0,100,6,171,2, + 0,0,0,0,0,0,115,1,140,96,116,13,0,0,0,0, + 0,0,0,0,124,0,124,0,106,14,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,124,2,100,7, + 172,8,171,4,0,0,0,0,0,0,1,0,140,122,116,11, + 0,0,0,0,0,0,0,0,124,0,124,4,171,2,0,0, + 0,0,0,0,114,1,140,135,124,0,106,4,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,155,0, + 100,9,124,4,155,0,157,3,125,6,9,0,116,17,0,0, + 0,0,0,0,0,0,124,2,124,6,171,2,0,0,0,0, + 0,0,1,0,140,166,4,0,124,0,83,0,35,0,116,18, + 0,0,0,0,0,0,0,0,36,0,114,62,125,7,124,7, + 106,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,124,6,107,40,0,0,114,41,116,22,0,0, + 0,0,0,0,0,0,106,24,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,106,27,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,124,6, + 116,28,0,0,0,0,0,0,0,0,171,2,0,0,0,0, + 0,0,129,5,89,0,100,10,125,7,126,7,140,234,130,0, + 100,10,125,7,126,7,119,1,119,0,120,3,89,0,119,1, + 41,11,122,238,70,105,103,117,114,101,32,111,117,116,32,119, + 104,97,116,32,95,95,105,109,112,111,114,116,95,95,32,115, + 104,111,117,108,100,32,114,101,116,117,114,110,46,10,10,32, + 32,32,32,84,104,101,32,105,109,112,111,114,116,95,32,112, + 97,114,97,109,101,116,101,114,32,105,115,32,97,32,99,97, + 108,108,97,98,108,101,32,119,104,105,99,104,32,116,97,107, + 101,115,32,116,104,101,32,110,97,109,101,32,111,102,32,109, + 111,100,117,108,101,32,116,111,10,32,32,32,32,105,109,112, + 111,114,116,46,32,73,116,32,105,115,32,114,101,113,117,105, + 114,101,100,32,116,111,32,100,101,99,111,117,112,108,101,32, + 116,104,101,32,102,117,110,99,116,105,111,110,32,102,114,111, + 109,32,97,115,115,117,109,105,110,103,32,105,109,112,111,114, + 116,108,105,98,39,115,10,32,32,32,32,105,109,112,111,114, + 116,32,105,109,112,108,101,109,101,110,116,97,116,105,111,110, + 32,105,115,32,100,101,115,105,114,101,100,46,10,10,32,32, + 32,32,122,8,46,95,95,97,108,108,95,95,122,13,96,96, + 102,114,111,109,32,108,105,115,116,39,39,122,8,73,116,101, + 109,32,105,110,32,122,18,32,109,117,115,116,32,98,101,32, + 115,116,114,44,32,110,111,116,32,250,1,42,218,7,95,95, + 97,108,108,95,95,84,114,140,1,0,0,114,244,0,0,0, + 78,41,15,114,23,1,0,0,114,121,1,0,0,114,11,0, + 0,0,114,122,1,0,0,114,5,0,0,0,114,13,0,0, + 0,218,16,95,104,97,110,100,108,101,95,102,114,111,109,108, + 105,115,116,114,144,1,0,0,114,161,0,0,0,114,129,1, + 0,0,114,26,0,0,0,114,24,0,0,0,114,195,0,0, + 0,114,76,0,0,0,114,136,1,0,0,41,8,114,200,0, + 0,0,218,8,102,114,111,109,108,105,115,116,114,130,1,0, + 0,114,141,1,0,0,218,1,120,218,5,119,104,101,114,101, + 218,9,102,114,111,109,95,110,97,109,101,218,3,101,120,99, + 115,8,0,0,0,32,32,32,32,32,32,32,32,114,7,0, + 0,0,114,145,1,0,0,114,145,1,0,0,110,5,0,0, + 115,248,0,0,0,128,0,240,20,0,14,22,242,0,23,5, + 22,136,1,220,15,25,152,33,156,83,212,15,33,217,15,24, + 216,24,30,159,15,153,15,168,42,209,24,52,145,5,224,24, + 39,144,5,220,18,27,152,104,160,117,160,103,240,0,1,46, + 35,220,35,39,168,1,163,55,215,35,51,209,35,51,208,34, + 52,240,3,1,29,54,243,0,1,19,55,240,0,1,13,55, + 224,13,14,144,35,138,88,218,19,28,164,23,168,22,176,25, + 213,33,59,220,16,32,160,22,168,22,175,30,169,30,184,23, + 216,43,47,246,3,1,17,49,228,17,24,152,22,160,17,213, + 17,35,216,27,33,159,63,153,63,208,26,43,168,49,168,81, + 168,67,208,24,48,136,73,240,2,9,13,22,220,16,41,168, + 39,176,57,213,16,61,240,31,23,5,22,240,48,0,12,18, + 128,77,248,244,17,0,20,39,242,0,7,13,22,240,8,0, + 21,24,151,72,145,72,160,9,210,20,41,220,20,23,151,75, + 145,75,151,79,145,79,160,73,172,126,211,20,62,208,20,74, + 220,20,28,216,16,21,251,240,15,7,13,22,250,115,30,0, + 0,0,194,28,12,66,44,2,194,44,9,67,51,5,194,53, + 51,67,46,5,195,45,1,67,46,5,195,46,5,67,51,5, + 99,1,0,0,0,0,0,0,0,0,0,0,0,7,0,0, + 0,3,0,0,0,243,92,1,0,0,151,0,124,0,106,1, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,100,1,171,1,0,0,0,0,0,0,125,1,124,0, + 106,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,100,2,171,1,0,0,0,0,0,0,125,2, + 124,1,129,64,124,2,129,60,124,1,124,2,106,2,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 107,55,0,0,114,45,116,4,0,0,0,0,0,0,0,0, + 106,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,100,3,124,1,155,2,100,4,124,2,106,2, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,155,2,100,5,157,5,116,8,0,0,0,0,0,0, + 0,0,100,6,172,7,171,3,0,0,0,0,0,0,1,0, + 124,1,83,0,124,2,129,12,124,2,106,2,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,83,0, + 116,4,0,0,0,0,0,0,0,0,106,7,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,100,8, + 116,10,0,0,0,0,0,0,0,0,100,6,172,7,171,3, + 0,0,0,0,0,0,1,0,124,0,100,9,25,0,0,0, + 125,1,100,10,124,0,118,1,114,20,124,1,106,13,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 100,11,171,1,0,0,0,0,0,0,100,12,25,0,0,0, + 125,1,124,1,83,0,41,13,122,167,67,97,108,99,117,108, + 97,116,101,32,119,104,97,116,32,95,95,112,97,99,107,97, + 103,101,95,95,32,115,104,111,117,108,100,32,98,101,46,10, + 10,32,32,32,32,95,95,112,97,99,107,97,103,101,95,95, + 32,105,115,32,110,111,116,32,103,117,97,114,97,110,116,101, + 101,100,32,116,111,32,98,101,32,100,101,102,105,110,101,100, + 32,111,114,32,99,111,117,108,100,32,98,101,32,115,101,116, + 32,116,111,32,78,111,110,101,10,32,32,32,32,116,111,32, + 114,101,112,114,101,115,101,110,116,32,116,104,97,116,32,105, + 116,115,32,112,114,111,112,101,114,32,118,97,108,117,101,32, + 105,115,32,117,110,107,110,111,119,110,46,10,10,32,32,32, + 32,114,13,1,0,0,114,204,0,0,0,122,32,95,95,112, + 97,99,107,97,103,101,95,95,32,33,61,32,95,95,115,112, + 101,99,95,95,46,112,97,114,101,110,116,32,40,122,4,32, + 33,61,32,114,229,0,0,0,233,3,0,0,0,41,1,218, + 10,115,116,97,99,107,108,101,118,101,108,122,89,99,97,110, + 39,116,32,114,101,115,111,108,118,101,32,112,97,99,107,97, + 103,101,32,102,114,111,109,32,95,95,115,112,101,99,95,95, + 32,111,114,32,95,95,112,97,99,107,97,103,101,95,95,44, + 32,102,97,108,108,105,110,103,32,98,97,99,107,32,111,110, + 32,95,95,110,97,109,101,95,95,32,97,110,100,32,95,95, + 112,97,116,104,95,95,114,11,0,0,0,114,7,1,0,0, + 114,244,0,0,0,114,125,0,0,0,41,7,114,76,0,0, + 0,114,246,0,0,0,114,191,0,0,0,114,192,0,0,0, + 114,193,0,0,0,114,27,1,0,0,114,245,0,0,0,41, + 3,218,7,103,108,111,98,97,108,115,114,110,1,0,0,114, + 199,0,0,0,115,3,0,0,0,32,32,32,114,7,0,0, + 0,218,17,95,99,97,108,99,95,95,95,112,97,99,107,97, + 103,101,95,95,114,155,1,0,0,147,5,0,0,115,200,0, + 0,0,128,0,240,14,0,15,22,143,107,137,107,152,45,211, + 14,40,128,71,216,11,18,143,59,137,59,144,122,211,11,34, + 128,68,216,7,14,208,7,26,216,11,15,208,11,27,160,7, + 168,52,175,59,169,59,210,32,54,220,12,21,143,78,137,78, + 240,0,1,28,31,216,31,38,152,107,168,20,168,100,175,107, + 169,107,168,95,184,65,240,3,1,28,63,228,27,45,184,33, + 240,5,0,13,27,244,0,2,13,61,240,6,0,16,23,136, + 14,216,9,13,208,9,25,216,15,19,143,123,137,123,208,8, + 26,228,8,17,143,14,137,14,240,0,1,24,63,228,23,36, + 176,17,240,5,0,9,23,244,0,2,9,52,240,6,0,19, + 26,152,42,209,18,37,136,7,216,11,21,152,87,209,11,36, + 216,22,29,215,22,40,209,22,40,168,19,211,22,45,168,97, + 209,22,48,136,71,216,11,18,128,78,114,22,0,0,0,99, + 5,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0, + 3,0,0,0,243,172,1,0,0,151,0,124,4,100,1,107, + 40,0,0,114,12,116,1,0,0,0,0,0,0,0,0,124, + 0,171,1,0,0,0,0,0,0,125,5,110,30,124,1,129, + 2,124,1,110,1,105,0,125,6,116,3,0,0,0,0,0, + 0,0,0,124,6,171,1,0,0,0,0,0,0,125,7,116, + 1,0,0,0,0,0,0,0,0,124,0,124,7,124,4,171, + 3,0,0,0,0,0,0,125,5,124,3,115,133,124,4,100, + 1,107,40,0,0,114,29,116,1,0,0,0,0,0,0,0, + 0,124,0,106,5,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,100,3,171,1,0,0,0,0,0, + 0,100,1,25,0,0,0,171,1,0,0,0,0,0,0,83, + 0,124,0,115,2,124,5,83,0,116,7,0,0,0,0,0, + 0,0,0,124,0,171,1,0,0,0,0,0,0,116,7,0, + 0,0,0,0,0,0,0,124,0,106,5,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,100,3,171, + 1,0,0,0,0,0,0,100,1,25,0,0,0,171,1,0, + 0,0,0,0,0,122,10,0,0,125,8,116,8,0,0,0, + 0,0,0,0,0,106,10,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,124,5,106,12,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,100, + 2,116,7,0,0,0,0,0,0,0,0,124,5,106,12,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,171,1,0,0,0,0,0,0,124,8,122,10,0,0,26, + 0,25,0,0,0,83,0,116,15,0,0,0,0,0,0,0, + 0,124,5,100,4,171,2,0,0,0,0,0,0,114,17,116, + 17,0,0,0,0,0,0,0,0,124,5,124,3,116,0,0, + 0,0,0,0,0,0,0,171,3,0,0,0,0,0,0,83, + 0,124,5,83,0,41,5,97,215,1,0,0,73,109,112,111, + 114,116,32,97,32,109,111,100,117,108,101,46,10,10,32,32, + 32,32,84,104,101,32,39,103,108,111,98,97,108,115,39,32, + 97,114,103,117,109,101,110,116,32,105,115,32,117,115,101,100, + 32,116,111,32,105,110,102,101,114,32,119,104,101,114,101,32, + 116,104,101,32,105,109,112,111,114,116,32,105,115,32,111,99, + 99,117,114,114,105,110,103,32,102,114,111,109,10,32,32,32, + 32,116,111,32,104,97,110,100,108,101,32,114,101,108,97,116, + 105,118,101,32,105,109,112,111,114,116,115,46,32,84,104,101, + 32,39,108,111,99,97,108,115,39,32,97,114,103,117,109,101, + 110,116,32,105,115,32,105,103,110,111,114,101,100,46,32,84, + 104,101,10,32,32,32,32,39,102,114,111,109,108,105,115,116, + 39,32,97,114,103,117,109,101,110,116,32,115,112,101,99,105, + 102,105,101,115,32,119,104,97,116,32,115,104,111,117,108,100, + 32,101,120,105,115,116,32,97,115,32,97,116,116,114,105,98, + 117,116,101,115,32,111,110,32,116,104,101,32,109,111,100,117, + 108,101,10,32,32,32,32,98,101,105,110,103,32,105,109,112, + 111,114,116,101,100,32,40,101,46,103,46,32,96,96,102,114, + 111,109,32,109,111,100,117,108,101,32,105,109,112,111,114,116, + 32,60,102,114,111,109,108,105,115,116,62,96,96,41,46,32, + 32,84,104,101,32,39,108,101,118,101,108,39,10,32,32,32, + 32,97,114,103,117,109,101,110,116,32,114,101,112,114,101,115, + 101,110,116,115,32,116,104,101,32,112,97,99,107,97,103,101, + 32,108,111,99,97,116,105,111,110,32,116,111,32,105,109,112, + 111,114,116,32,102,114,111,109,32,105,110,32,97,32,114,101, + 108,97,116,105,118,101,10,32,32,32,32,105,109,112,111,114, + 116,32,40,101,46,103,46,32,96,96,102,114,111,109,32,46, + 46,112,107,103,32,105,109,112,111,114,116,32,109,111,100,96, + 96,32,119,111,117,108,100,32,104,97,118,101,32,97,32,39, + 108,101,118,101,108,39,32,111,102,32,50,41,46,10,10,32, + 32,32,32,114,125,0,0,0,78,114,244,0,0,0,114,7, + 1,0,0,41,9,114,139,1,0,0,114,155,1,0,0,218, + 9,112,97,114,116,105,116,105,111,110,114,127,0,0,0,114, + 24,0,0,0,114,195,0,0,0,114,11,0,0,0,114,13, + 0,0,0,114,145,1,0,0,41,9,114,26,0,0,0,114, + 154,1,0,0,218,6,108,111,99,97,108,115,114,146,1,0, + 0,114,111,1,0,0,114,200,0,0,0,218,8,103,108,111, + 98,97,108,115,95,114,110,1,0,0,218,7,99,117,116,95, + 111,102,102,115,9,0,0,0,32,32,32,32,32,32,32,32, + 32,114,7,0,0,0,218,10,95,95,105,109,112,111,114,116, + 95,95,114,161,1,0,0,174,5,0,0,115,210,0,0,0, + 128,0,240,22,0,8,13,144,1,130,122,220,17,28,152,84, + 211,17,34,137,6,224,30,37,208,30,49,145,55,176,114,136, + 8,220,18,35,160,72,211,18,45,136,7,220,17,28,152,84, + 160,55,168,69,211,17,50,136,6,217,11,19,240,6,0,12, + 17,144,65,138,58,220,19,30,152,116,159,126,153,126,168,99, + 211,31,50,176,49,209,31,53,211,19,54,208,12,54,217,17, + 21,216,19,25,136,77,244,8,0,23,26,152,36,147,105,164, + 35,160,100,167,110,161,110,176,83,211,38,57,184,33,209,38, + 60,211,34,61,209,22,61,136,71,244,6,0,20,23,151,59, + 145,59,152,118,159,127,153,127,208,47,76,180,3,176,70,183, + 79,177,79,211,48,68,192,87,209,48,76,208,31,77,209,19, + 78,208,12,78,220,9,16,144,22,152,26,212,9,36,220,15, + 31,160,6,168,8,180,43,211,15,62,208,8,62,224,15,21, + 136,13,114,22,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,98,0,0, + 0,151,0,116,0,0,0,0,0,0,0,0,0,106,3,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,124,0,171,1,0,0,0,0,0,0,125,1,124,1,128, + 14,116,5,0,0,0,0,0,0,0,0,100,1,124,0,122, + 0,0,0,171,1,0,0,0,0,0,0,130,1,116,7,0, + 0,0,0,0,0,0,0,124,1,171,1,0,0,0,0,0, + 0,83,0,41,2,78,122,25,110,111,32,98,117,105,108,116, + 45,105,110,32,109,111,100,117,108,101,32,110,97,109,101,100, + 32,41,4,114,37,1,0,0,114,43,1,0,0,114,178,0, + 0,0,114,33,1,0,0,41,2,114,26,0,0,0,114,199, + 0,0,0,115,2,0,0,0,32,32,114,7,0,0,0,218, + 18,95,98,117,105,108,116,105,110,95,102,114,111,109,95,110, + 97,109,101,114,163,1,0,0,211,5,0,0,115,51,0,0, + 0,128,0,220,11,26,215,11,36,209,11,36,160,84,211,11, + 42,128,68,216,7,11,128,124,220,14,25,208,26,53,184,4, + 209,26,60,211,14,61,208,8,61,220,11,25,152,36,211,11, + 31,208,4,31,114,22,0,0,0,99,2,0,0,0,0,0, + 0,0,0,0,0,0,6,0,0,0,3,0,0,0,243,44, + 2,0,0,151,0,124,1,97,0,124,0,97,1,116,5,0, + 0,0,0,0,0,0,0,116,2,0,0,0,0,0,0,0, + 0,171,1,0,0,0,0,0,0,125,2,116,2,0,0,0, + 0,0,0,0,0,106,6,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,106,9,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,171,0,0, + 0,0,0,0,0,68,0,93,122,0,0,92,2,0,0,125, + 3,125,4,116,11,0,0,0,0,0,0,0,0,124,4,124, + 2,171,2,0,0,0,0,0,0,115,1,140,19,124,3,116, + 2,0,0,0,0,0,0,0,0,106,12,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,118,0,114, + 7,116,14,0,0,0,0,0,0,0,0,125,5,110,29,116, + 0,0,0,0,0,0,0,0,0,106,17,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,124,3,171, + 1,0,0,0,0,0,0,114,7,116,18,0,0,0,0,0, + 0,0,0,125,5,110,1,140,73,116,21,0,0,0,0,0, + 0,0,0,124,4,124,5,171,2,0,0,0,0,0,0,125, + 6,116,23,0,0,0,0,0,0,0,0,124,6,124,4,171, + 2,0,0,0,0,0,0,1,0,124,5,116,18,0,0,0, + 0,0,0,0,0,117,0,115,1,140,106,124,5,106,25,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,124,4,171,1,0,0,0,0,0,0,1,0,140,124,4, + 0,116,2,0,0,0,0,0,0,0,0,106,6,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,116, - 6,0,0,0,0,0,0,0,0,106,8,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,116,10,0, - 0,0,0,0,0,0,0,25,0,0,0,171,1,0,0,0, - 0,0,0,1,0,121,2,41,3,122,57,73,110,115,116,97, - 108,108,32,105,109,112,111,114,116,101,114,115,32,116,104,97, - 116,32,114,101,113,117,105,114,101,32,101,120,116,101,114,110, - 97,108,32,102,105,108,101,115,121,115,116,101,109,32,97,99, - 99,101,115,115,114,125,0,0,0,78,41,6,218,26,95,102, - 114,111,122,101,110,95,105,109,112,111,114,116,108,105,98,95, - 101,120,116,101,114,110,97,108,114,239,0,0,0,114,174,1, - 0,0,114,24,0,0,0,114,195,0,0,0,114,11,0,0, - 0,41,1,114,176,1,0,0,115,1,0,0,0,32,114,7, - 0,0,0,218,27,95,105,110,115,116,97,108,108,95,101,120, - 116,101,114,110,97,108,95,105,109,112,111,114,116,101,114,115, - 114,177,1,0,0,10,6,0,0,115,36,0,0,0,128,0, - 243,6,0,5,38,216,26,52,208,4,23,216,4,30,215,4, - 39,209,4,39,172,3,175,11,169,11,180,72,209,40,61,213, - 4,62,114,22,0,0,0,114,55,1,0,0,114,2,0,0, - 0,114,136,0,0,0,41,4,78,78,114,31,0,0,0,114, - 125,0,0,0,41,58,114,12,0,0,0,114,8,0,0,0, - 114,109,0,0,0,114,191,0,0,0,114,52,0,0,0,114, - 239,0,0,0,114,21,0,0,0,114,27,0,0,0,114,6, - 1,0,0,114,29,0,0,0,114,34,0,0,0,114,153,0, - 0,0,114,85,0,0,0,114,80,0,0,0,114,126,0,0, - 0,114,94,0,0,0,114,101,0,0,0,114,107,0,0,0, - 114,134,0,0,0,114,142,0,0,0,114,147,0,0,0,114, - 157,0,0,0,114,161,0,0,0,114,173,0,0,0,114,184, - 0,0,0,114,189,0,0,0,114,201,0,0,0,114,215,0, - 0,0,114,217,0,0,0,114,194,0,0,0,114,9,1,0, - 0,114,16,1,0,0,114,21,1,0,0,114,211,0,0,0, - 114,196,0,0,0,114,30,1,0,0,114,33,1,0,0,114, - 197,0,0,0,114,37,1,0,0,114,58,1,0,0,114,101, - 1,0,0,114,114,1,0,0,114,119,1,0,0,114,125,1, - 0,0,114,128,1,0,0,218,8,95,69,82,82,95,77,83, - 71,114,134,1,0,0,218,6,111,98,106,101,99,116,114,136, - 1,0,0,114,137,1,0,0,114,139,1,0,0,114,145,1, - 0,0,114,155,1,0,0,114,161,1,0,0,114,163,1,0, - 0,114,172,1,0,0,114,174,1,0,0,114,177,1,0,0, - 114,31,0,0,0,114,22,0,0,0,114,7,0,0,0,250, - 8,60,109,111,100,117,108,101,62,114,180,1,0,0,1,0, - 0,0,115,154,1,0,0,240,3,1,1,1,241,2,7,1, - 4,242,44,4,1,38,240,18,0,11,15,128,7,216,12,16, - 128,9,216,11,15,128,8,240,6,0,23,27,208,0,19,242, - 6,5,1,38,242,16,1,1,27,244,14,1,1,9,136,68, - 244,0,1,1,9,247,14,73,1,1,21,241,0,73,1,1, - 21,240,92,2,0,17,19,128,13,240,26,0,16,20,128,12, - 247,6,19,1,42,241,0,19,1,42,244,44,1,1,9,144, - 92,244,0,1,1,9,242,10,40,1,17,247,86,1,96,2, - 1,59,241,0,96,2,1,59,247,70,5,18,1,64,1,241, - 0,18,1,64,1,247,42,11,1,29,241,0,11,1,29,242, - 32,34,1,16,242,74,1,14,1,23,242,34,8,1,28,240, - 22,0,48,49,244,0,5,1,54,242,16,8,1,37,242,22, - 8,1,36,242,24,15,1,27,242,38,18,1,54,247,42,97, - 1,1,41,241,0,97,1,1,41,240,72,3,0,46,50,184, - 100,244,0,26,1,74,1,243,58,39,1,16,240,84,1,0, - 50,55,244,0,70,1,1,18,242,82,2,14,1,18,242,34, - 18,1,61,242,44,27,1,18,242,60,34,1,18,242,72,1, - 41,1,18,242,90,1,10,1,36,247,30,49,1,49,241,0, - 49,1,49,247,104,1,126,2,1,48,241,0,126,2,1,48, - 247,70,6,10,1,28,241,0,10,1,28,242,26,6,1,46, - 243,18,42,1,20,242,90,1,13,1,46,240,32,0,19,37, - 128,15,216,11,26,152,86,209,11,35,128,8,242,4,39,1, - 18,241,84,1,0,18,24,147,24,128,14,242,6,23,1,18, - 243,52,12,1,45,240,30,0,62,67,1,244,0,34,1,18, - 242,74,1,24,1,19,243,54,34,1,22,242,74,1,4,1, - 32,242,14,37,1,42,242,80,1,5,1,41,243,16,5,1, - 63,114,22,0,0,0, + 26,0,0,0,0,0,0,0,0,25,0,0,0,125,7,100, + 1,68,0,93,64,0,0,125,8,124,8,116,2,0,0,0, + 0,0,0,0,0,106,6,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,118,1,114,12,116,29,0, + 0,0,0,0,0,0,0,124,8,171,1,0,0,0,0,0, + 0,125,9,110,19,116,2,0,0,0,0,0,0,0,0,106, + 6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,124,8,25,0,0,0,125,9,116,31,0,0,0, + 0,0,0,0,0,124,7,124,8,124,9,171,3,0,0,0, + 0,0,0,1,0,140,66,4,0,116,33,0,0,0,0,0, + 0,0,0,171,0,0,0,0,0,0,0,97,17,121,2,41, + 3,122,250,83,101,116,117,112,32,105,109,112,111,114,116,108, + 105,98,32,98,121,32,105,109,112,111,114,116,105,110,103,32, + 110,101,101,100,101,100,32,98,117,105,108,116,45,105,110,32, + 109,111,100,117,108,101,115,32,97,110,100,32,105,110,106,101, + 99,116,105,110,103,32,116,104,101,109,10,32,32,32,32,105, + 110,116,111,32,116,104,101,32,103,108,111,98,97,108,32,110, + 97,109,101,115,112,97,99,101,46,10,10,32,32,32,32,65, + 115,32,115,121,115,32,105,115,32,110,101,101,100,101,100,32, + 102,111,114,32,115,121,115,46,109,111,100,117,108,101,115,32, + 97,99,99,101,115,115,32,97,110,100,32,95,105,109,112,32, + 105,115,32,110,101,101,100,101,100,32,116,111,32,108,111,97, + 100,32,98,117,105,108,116,45,105,110,10,32,32,32,32,109, + 111,100,117,108,101,115,44,32,116,104,111,115,101,32,116,119, + 111,32,109,111,100,117,108,101,115,32,109,117,115,116,32,98, + 101,32,101,120,112,108,105,99,105,116,108,121,32,112,97,115, + 115,101,100,32,105,110,46,10,10,32,32,32,32,41,3,114, + 109,0,0,0,114,191,0,0,0,114,52,0,0,0,78,41, + 18,114,151,0,0,0,114,24,0,0,0,114,5,0,0,0, + 114,195,0,0,0,218,5,105,116,101,109,115,114,23,1,0, + 0,114,177,0,0,0,114,37,1,0,0,114,187,0,0,0, + 114,58,1,0,0,114,9,1,0,0,114,16,1,0,0,114, + 74,1,0,0,114,11,0,0,0,114,163,1,0,0,114,14, + 0,0,0,114,34,0,0,0,114,85,0,0,0,41,10,218, + 10,115,121,115,95,109,111,100,117,108,101,218,11,95,105,109, + 112,95,109,111,100,117,108,101,218,11,109,111,100,117,108,101, + 95,116,121,112,101,114,26,0,0,0,114,200,0,0,0,114, + 213,0,0,0,114,199,0,0,0,218,11,115,101,108,102,95, + 109,111,100,117,108,101,218,12,98,117,105,108,116,105,110,95, + 110,97,109,101,218,14,98,117,105,108,116,105,110,95,109,111, + 100,117,108,101,115,10,0,0,0,32,32,32,32,32,32,32, + 32,32,32,114,7,0,0,0,218,6,95,115,101,116,117,112, + 114,172,1,0,0,218,5,0,0,115,239,0,0,0,128,0, + 240,18,0,12,23,128,68,216,10,20,128,67,244,6,0,19, + 23,148,115,147,41,128,75,220,24,27,159,11,153,11,215,24, + 41,209,24,41,211,24,43,242,0,11,5,46,137,12,136,4, + 136,102,220,11,21,144,102,152,107,213,11,42,216,15,19,148, + 115,215,23,47,209,23,47,209,15,47,220,25,40,145,6,220, + 17,21,151,30,145,30,160,4,212,17,37,220,25,39,145,6, + 224,16,24,220,19,36,160,86,168,86,211,19,52,136,68,220, + 12,30,152,116,160,86,212,12,44,216,15,21,156,30,210,15, + 39,216,16,22,215,16,37,209,16,37,160,102,213,16,45,240, + 23,11,5,46,244,28,0,19,22,151,43,145,43,156,104,209, + 18,39,128,75,216,24,60,242,0,5,5,59,136,12,216,11, + 23,156,115,159,123,153,123,209,11,42,220,29,47,176,12,211, + 29,61,137,78,228,29,32,159,91,153,91,168,28,209,29,54, + 136,78,220,8,15,144,11,152,92,168,62,213,8,58,240,11, + 5,5,59,244,16,0,20,40,211,19,41,129,76,114,22,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,168,0,0,0,151,0,116,1, + 0,0,0,0,0,0,0,0,124,0,124,1,171,2,0,0, + 0,0,0,0,1,0,116,2,0,0,0,0,0,0,0,0, + 106,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,106,7,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,116,8,0,0,0,0,0,0, + 0,0,171,1,0,0,0,0,0,0,1,0,116,2,0,0, + 0,0,0,0,0,0,106,4,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,106,7,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,116,10, + 0,0,0,0,0,0,0,0,171,1,0,0,0,0,0,0, + 1,0,121,1,41,2,122,48,73,110,115,116,97,108,108,32, + 105,109,112,111,114,116,101,114,115,32,102,111,114,32,98,117, + 105,108,116,105,110,32,97,110,100,32,102,114,111,122,101,110, + 32,109,111,100,117,108,101,115,78,41,6,114,172,1,0,0, + 114,24,0,0,0,114,116,1,0,0,114,51,0,0,0,114, + 37,1,0,0,114,58,1,0,0,41,2,114,166,1,0,0, + 114,167,1,0,0,115,2,0,0,0,32,32,114,7,0,0, + 0,218,8,95,105,110,115,116,97,108,108,114,174,1,0,0, + 2,6,0,0,115,48,0,0,0,128,0,228,4,10,136,58, + 144,123,212,4,35,228,4,7,135,77,129,77,215,4,24,209, + 4,24,156,31,212,4,41,220,4,7,135,77,129,77,215,4, + 24,209,4,24,156,30,213,4,40,114,22,0,0,0,99,0, + 0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,3, + 0,0,0,243,92,0,0,0,151,0,100,1,100,2,108,0, + 125,0,124,0,97,1,124,0,106,5,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,116,6,0,0, + 0,0,0,0,0,0,106,8,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,116,10,0,0,0,0, + 0,0,0,0,25,0,0,0,171,1,0,0,0,0,0,0, + 1,0,121,2,41,3,122,57,73,110,115,116,97,108,108,32, + 105,109,112,111,114,116,101,114,115,32,116,104,97,116,32,114, + 101,113,117,105,114,101,32,101,120,116,101,114,110,97,108,32, + 102,105,108,101,115,121,115,116,101,109,32,97,99,99,101,115, + 115,114,125,0,0,0,78,41,6,218,26,95,102,114,111,122, + 101,110,95,105,109,112,111,114,116,108,105,98,95,101,120,116, + 101,114,110,97,108,114,239,0,0,0,114,174,1,0,0,114, + 24,0,0,0,114,195,0,0,0,114,11,0,0,0,41,1, + 114,176,1,0,0,115,1,0,0,0,32,114,7,0,0,0, + 218,27,95,105,110,115,116,97,108,108,95,101,120,116,101,114, + 110,97,108,95,105,109,112,111,114,116,101,114,115,114,177,1, + 0,0,10,6,0,0,115,36,0,0,0,128,0,243,6,0, + 5,38,216,26,52,208,4,23,216,4,30,215,4,39,209,4, + 39,172,3,175,11,169,11,180,72,209,40,61,213,4,62,114, + 22,0,0,0,114,55,1,0,0,114,2,0,0,0,114,136, + 0,0,0,41,4,78,78,114,31,0,0,0,114,125,0,0, + 0,41,58,114,12,0,0,0,114,8,0,0,0,114,109,0, + 0,0,114,191,0,0,0,114,52,0,0,0,114,239,0,0, + 0,114,21,0,0,0,114,27,0,0,0,114,6,1,0,0, + 114,29,0,0,0,114,34,0,0,0,114,153,0,0,0,114, + 85,0,0,0,114,80,0,0,0,114,126,0,0,0,114,94, + 0,0,0,114,101,0,0,0,114,107,0,0,0,114,134,0, + 0,0,114,142,0,0,0,114,147,0,0,0,114,157,0,0, + 0,114,161,0,0,0,114,173,0,0,0,114,184,0,0,0, + 114,189,0,0,0,114,201,0,0,0,114,215,0,0,0,114, + 217,0,0,0,114,194,0,0,0,114,9,1,0,0,114,16, + 1,0,0,114,21,1,0,0,114,211,0,0,0,114,196,0, + 0,0,114,30,1,0,0,114,33,1,0,0,114,197,0,0, + 0,114,37,1,0,0,114,58,1,0,0,114,101,1,0,0, + 114,114,1,0,0,114,119,1,0,0,114,125,1,0,0,114, + 128,1,0,0,218,8,95,69,82,82,95,77,83,71,114,134, + 1,0,0,218,6,111,98,106,101,99,116,114,136,1,0,0, + 114,137,1,0,0,114,139,1,0,0,114,145,1,0,0,114, + 155,1,0,0,114,161,1,0,0,114,163,1,0,0,114,172, + 1,0,0,114,174,1,0,0,114,177,1,0,0,114,31,0, + 0,0,114,22,0,0,0,114,7,0,0,0,250,8,60,109, + 111,100,117,108,101,62,114,180,1,0,0,1,0,0,0,115, + 154,1,0,0,240,3,1,1,1,241,2,7,1,4,242,44, + 4,1,38,240,18,0,11,15,128,7,216,12,16,128,9,216, + 11,15,128,8,240,6,0,23,27,208,0,19,242,6,5,1, + 38,242,16,1,1,27,244,14,1,1,9,136,68,244,0,1, + 1,9,247,14,73,1,1,21,241,0,73,1,1,21,240,92, + 2,0,17,19,128,13,240,26,0,16,20,128,12,247,6,19, + 1,42,241,0,19,1,42,244,44,1,1,9,144,92,244,0, + 1,1,9,242,10,40,1,17,247,86,1,96,2,1,59,241, + 0,96,2,1,59,247,70,5,18,1,64,1,241,0,18,1, + 64,1,247,42,11,1,29,241,0,11,1,29,242,32,34,1, + 16,242,74,1,14,1,23,242,34,8,1,28,240,22,0,48, + 49,244,0,5,1,54,242,16,8,1,37,242,22,8,1,36, + 242,24,15,1,27,242,38,18,1,54,247,42,97,1,1,41, + 241,0,97,1,1,41,240,72,3,0,46,50,184,100,244,0, + 26,1,74,1,243,58,39,1,16,240,84,1,0,50,55,244, + 0,70,1,1,18,242,82,2,14,1,18,242,34,18,1,61, + 242,44,27,1,18,242,60,34,1,18,242,72,1,41,1,18, + 242,90,1,10,1,36,247,30,49,1,49,241,0,49,1,49, + 247,104,1,126,2,1,48,241,0,126,2,1,48,247,70,6, + 10,1,28,241,0,10,1,28,242,26,6,1,46,243,18,42, + 1,20,242,90,1,13,1,46,240,32,0,19,37,128,15,216, + 11,26,152,86,209,11,35,128,8,242,4,39,1,18,241,84, + 1,0,18,24,147,24,128,14,242,6,23,1,18,243,52,12, + 1,45,240,30,0,62,67,1,244,0,34,1,18,242,74,1, + 24,1,19,243,54,34,1,22,242,74,1,4,1,32,242,14, + 37,1,42,242,80,1,5,1,41,243,16,5,1,63,114,22, + 0,0,0, }; diff --git a/contrib/tools/python3/Python/frozen_modules/importlib._bootstrap_external.h b/contrib/tools/python3/Python/frozen_modules/importlib._bootstrap_external.h index 0fa4dc9016..4e892a2c60 100644 --- a/contrib/tools/python3/Python/frozen_modules/importlib._bootstrap_external.h +++ b/contrib/tools/python3/Python/frozen_modules/importlib._bootstrap_external.h @@ -198,3612 +198,3618 @@ const unsigned char _Py_M__importlib__bootstrap_external[] = { 0,0,218,10,102,114,111,109,95,98,121,116,101,115,169,1, 218,4,100,97,116,97,115,1,0,0,0,32,114,10,0,0, 0,218,14,95,117,110,112,97,99,107,95,117,105,110,116,51, - 50,114,49,0,0,0,84,0,0,0,243,33,0,0,0,128, - 0,228,11,14,136,116,139,57,152,1,138,62,209,4,25,220, - 11,14,143,62,137,62,152,36,160,8,211,11,41,208,4,41, - 114,28,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,78,0,0,0,151, - 0,116,1,0,0,0,0,0,0,0,0,124,0,171,1,0, - 0,0,0,0,0,100,1,107,40,0,0,115,2,74,0,130, - 1,116,2,0,0,0,0,0,0,0,0,106,5,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,124, - 0,100,2,171,2,0,0,0,0,0,0,83,0,41,3,122, - 47,67,111,110,118,101,114,116,32,50,32,98,121,116,101,115, - 32,105,110,32,108,105,116,116,108,101,45,101,110,100,105,97, - 110,32,116,111,32,97,110,32,105,110,116,101,103,101,114,46, - 233,2,0,0,0,114,39,0,0,0,114,45,0,0,0,114, - 47,0,0,0,115,1,0,0,0,32,114,10,0,0,0,218, - 14,95,117,110,112,97,99,107,95,117,105,110,116,49,54,114, - 53,0,0,0,89,0,0,0,114,50,0,0,0,114,28,0, - 0,0,99,0,0,0,0,0,0,0,0,0,0,0,0,6, - 0,0,0,7,0,0,0,243,148,2,0,0,151,0,124,0, - 115,1,121,1,116,1,0,0,0,0,0,0,0,0,124,0, - 171,1,0,0,0,0,0,0,100,2,107,40,0,0,114,5, - 124,0,100,3,25,0,0,0,83,0,100,1,125,1,103,0, - 125,2,116,3,0,0,0,0,0,0,0,0,116,4,0,0, - 0,0,0,0,0,0,106,6,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,124,0,171,2,0,0, - 0,0,0,0,68,0,93,180,0,0,92,2,0,0,125,3, - 125,4,124,3,106,9,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,116,10,0,0,0,0,0,0, - 0,0,171,1,0,0,0,0,0,0,115,21,124,3,106,13, + 50,114,49,0,0,0,84,0,0,0,243,35,0,0,0,128, + 0,228,11,14,136,116,139,57,152,1,138,62,208,4,25,136, + 62,220,11,14,143,62,137,62,152,36,160,8,211,11,41,208, + 4,41,114,28,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,78,0,0, + 0,151,0,116,1,0,0,0,0,0,0,0,0,124,0,171, + 1,0,0,0,0,0,0,100,1,107,40,0,0,115,2,74, + 0,130,1,116,2,0,0,0,0,0,0,0,0,106,5,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,116,10,0,0,0,0,0,0,0,0,171,1,0,0, - 0,0,0,0,114,36,124,3,106,15,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,116,16,0,0, - 0,0,0,0,0,0,171,1,0,0,0,0,0,0,120,1, - 115,2,1,0,124,1,125,1,116,18,0,0,0,0,0,0, - 0,0,124,4,122,0,0,0,103,1,125,2,140,84,124,3, + 0,124,0,100,2,171,2,0,0,0,0,0,0,83,0,41, + 3,122,47,67,111,110,118,101,114,116,32,50,32,98,121,116, + 101,115,32,105,110,32,108,105,116,116,108,101,45,101,110,100, + 105,97,110,32,116,111,32,97,110,32,105,110,116,101,103,101, + 114,46,233,2,0,0,0,114,39,0,0,0,114,45,0,0, + 0,114,47,0,0,0,115,1,0,0,0,32,114,10,0,0, + 0,218,14,95,117,110,112,97,99,107,95,117,105,110,116,49, + 54,114,53,0,0,0,89,0,0,0,114,50,0,0,0,114, + 28,0,0,0,99,0,0,0,0,0,0,0,0,0,0,0, + 0,6,0,0,0,7,0,0,0,243,148,2,0,0,151,0, + 124,0,115,1,121,1,116,1,0,0,0,0,0,0,0,0, + 124,0,171,1,0,0,0,0,0,0,100,2,107,40,0,0, + 114,5,124,0,100,3,25,0,0,0,83,0,100,1,125,1, + 103,0,125,2,116,3,0,0,0,0,0,0,0,0,116,4, + 0,0,0,0,0,0,0,0,106,6,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,124,0,171,2, + 0,0,0,0,0,0,68,0,93,180,0,0,92,2,0,0, + 125,3,125,4,124,3,106,9,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,116,10,0,0,0,0, + 0,0,0,0,171,1,0,0,0,0,0,0,115,21,124,3, 106,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,100,4,171,1,0,0,0,0,0,0,114,57, - 124,1,106,21,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,171,0,0,0,0,0,0,0,124,3, - 106,21,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,171,0,0,0,0,0,0,0,107,55,0,0, - 114,6,124,3,125,1,124,4,103,1,125,2,140,140,124,2, - 106,23,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,124,4,171,1,0,0,0,0,0,0,1,0, - 140,158,124,3,120,1,115,2,1,0,124,1,125,1,124,2, - 106,23,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,124,4,171,1,0,0,0,0,0,0,1,0, - 140,182,4,0,124,2,68,0,143,5,99,2,103,0,99,2, - 93,26,0,0,125,5,124,5,115,1,140,6,124,5,106,15, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,116,16,0,0,0,0,0,0,0,0,171,1,0,0, - 0,0,0,0,145,2,140,28,4,0,125,2,125,5,116,1, + 0,0,0,0,116,10,0,0,0,0,0,0,0,0,171,1, + 0,0,0,0,0,0,114,36,124,3,106,15,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,116,16, + 0,0,0,0,0,0,0,0,171,1,0,0,0,0,0,0, + 120,1,115,2,1,0,124,1,125,1,116,18,0,0,0,0, + 0,0,0,0,124,4,122,0,0,0,103,1,125,2,140,84, + 124,3,106,13,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,100,4,171,1,0,0,0,0,0,0, + 114,57,124,1,106,21,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,171,0,0,0,0,0,0,0, + 124,3,106,21,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,171,0,0,0,0,0,0,0,107,55, + 0,0,114,6,124,3,125,1,124,4,103,1,125,2,140,140, + 124,2,106,23,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,124,4,171,1,0,0,0,0,0,0, + 1,0,140,158,124,3,120,1,115,2,1,0,124,1,125,1, + 124,2,106,23,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,124,4,171,1,0,0,0,0,0,0, + 1,0,140,182,4,0,124,2,68,0,143,5,99,2,103,0, + 99,2,93,26,0,0,125,5,124,5,115,1,140,6,124,5, + 106,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,116,16,0,0,0,0,0,0,0,0,171,1, + 0,0,0,0,0,0,145,2,140,28,4,0,125,2,125,5, + 116,1,0,0,0,0,0,0,0,0,124,2,171,1,0,0, + 0,0,0,0,100,2,107,40,0,0,114,14,124,2,100,3, + 25,0,0,0,115,9,124,1,116,18,0,0,0,0,0,0, + 0,0,122,0,0,0,83,0,124,1,116,18,0,0,0,0, + 0,0,0,0,106,25,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,124,2,171,1,0,0,0,0, - 0,0,100,2,107,40,0,0,114,14,124,2,100,3,25,0, - 0,0,115,9,124,1,116,18,0,0,0,0,0,0,0,0, - 122,0,0,0,83,0,124,1,116,18,0,0,0,0,0,0, - 0,0,106,25,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,124,2,171,1,0,0,0,0,0,0, - 122,0,0,0,83,0,99,2,1,0,99,2,125,5,119,0, - 41,5,250,31,82,101,112,108,97,99,101,109,101,110,116,32, - 102,111,114,32,111,115,46,112,97,116,104,46,106,111,105,110, - 40,41,46,114,12,0,0,0,114,6,0,0,0,114,1,0, - 0,0,114,13,0,0,0,41,13,114,7,0,0,0,218,3, - 109,97,112,114,23,0,0,0,218,15,95,112,97,116,104,95, - 115,112,108,105,116,114,111,111,116,114,32,0,0,0,218,14, - 112,97,116,104,95,115,101,112,95,116,117,112,108,101,218,8, - 101,110,100,115,119,105,116,104,218,6,114,115,116,114,105,112, - 218,15,112,97,116,104,95,115,101,112,97,114,97,116,111,114, - 115,218,8,112,97,116,104,95,115,101,112,218,8,99,97,115, - 101,102,111,108,100,218,6,97,112,112,101,110,100,218,4,106, - 111,105,110,41,6,218,10,112,97,116,104,95,112,97,114,116, - 115,218,4,114,111,111,116,218,4,112,97,116,104,218,8,110, - 101,119,95,114,111,111,116,218,4,116,97,105,108,218,1,112, - 115,6,0,0,0,32,32,32,32,32,32,114,10,0,0,0, - 218,10,95,112,97,116,104,95,106,111,105,110,114,72,0,0, - 0,96,0,0,0,115,43,1,0,0,128,0,225,15,25,216, - 19,21,220,11,14,136,122,139,63,152,97,210,11,31,216,19, - 29,152,97,145,61,208,12,32,216,15,17,136,4,216,15,17, - 136,4,220,30,33,164,35,215,34,53,209,34,53,176,122,211, - 30,66,242,0,14,9,34,137,78,136,72,144,100,216,15,23, - 215,15,34,209,15,34,164,62,212,15,50,176,104,215,54,71, - 209,54,71,204,14,212,54,87,216,23,31,151,127,145,127,164, - 127,211,23,55,210,23,63,184,52,144,4,220,24,32,160,52, - 153,15,208,23,40,145,4,216,17,25,215,17,34,209,17,34, - 160,51,212,17,39,216,19,23,151,61,145,61,147,63,160,104, - 215,38,55,209,38,55,211,38,57,210,19,57,240,6,0,28, - 36,144,68,216,28,32,152,54,145,68,224,20,24,151,75,145, - 75,160,4,213,20,37,224,23,31,210,23,39,160,52,144,4, - 216,16,20,151,11,145,11,152,68,213,16,33,240,29,14,9, - 34,240,30,0,52,56,214,15,61,168,97,186,49,144,1,151, - 8,145,8,156,31,213,16,41,208,15,61,136,4,208,15,61, - 220,11,14,136,116,139,57,152,1,138,62,160,36,160,113,162, - 39,224,19,23,156,40,145,63,208,12,34,216,15,19,148,104, - 151,109,145,109,160,68,211,22,41,209,15,41,208,8,41,249, - 242,9,0,16,62,115,12,0,0,0,195,48,7,69,5,4, - 195,56,23,69,5,4,99,0,0,0,0,0,0,0,0,0, - 0,0,0,8,0,0,0,7,0,0,0,243,124,0,0,0, - 151,0,116,0,0,0,0,0,0,0,0,0,106,3,0,0, + 0,0,122,0,0,0,83,0,99,2,1,0,99,2,125,5, + 119,0,41,5,250,31,82,101,112,108,97,99,101,109,101,110, + 116,32,102,111,114,32,111,115,46,112,97,116,104,46,106,111, + 105,110,40,41,46,114,12,0,0,0,114,6,0,0,0,114, + 1,0,0,0,114,13,0,0,0,41,13,114,7,0,0,0, + 218,3,109,97,112,114,23,0,0,0,218,15,95,112,97,116, + 104,95,115,112,108,105,116,114,111,111,116,114,32,0,0,0, + 218,14,112,97,116,104,95,115,101,112,95,116,117,112,108,101, + 218,8,101,110,100,115,119,105,116,104,218,6,114,115,116,114, + 105,112,218,15,112,97,116,104,95,115,101,112,97,114,97,116, + 111,114,115,218,8,112,97,116,104,95,115,101,112,218,8,99, + 97,115,101,102,111,108,100,218,6,97,112,112,101,110,100,218, + 4,106,111,105,110,41,6,218,10,112,97,116,104,95,112,97, + 114,116,115,218,4,114,111,111,116,218,4,112,97,116,104,218, + 8,110,101,119,95,114,111,111,116,218,4,116,97,105,108,218, + 1,112,115,6,0,0,0,32,32,32,32,32,32,114,10,0, + 0,0,218,10,95,112,97,116,104,95,106,111,105,110,114,72, + 0,0,0,96,0,0,0,115,43,1,0,0,128,0,225,15, + 25,216,19,21,220,11,14,136,122,139,63,152,97,210,11,31, + 216,19,29,152,97,145,61,208,12,32,216,15,17,136,4,216, + 15,17,136,4,220,30,33,164,35,215,34,53,209,34,53,176, + 122,211,30,66,242,0,14,9,34,137,78,136,72,144,100,216, + 15,23,215,15,34,209,15,34,164,62,212,15,50,176,104,215, + 54,71,209,54,71,204,14,212,54,87,216,23,31,151,127,145, + 127,164,127,211,23,55,210,23,63,184,52,144,4,220,24,32, + 160,52,153,15,208,23,40,145,4,216,17,25,215,17,34,209, + 17,34,160,51,212,17,39,216,19,23,151,61,145,61,147,63, + 160,104,215,38,55,209,38,55,211,38,57,210,19,57,240,6, + 0,28,36,144,68,216,28,32,152,54,145,68,224,20,24,151, + 75,145,75,160,4,213,20,37,224,23,31,210,23,39,160,52, + 144,4,216,16,20,151,11,145,11,152,68,213,16,33,240,29, + 14,9,34,240,30,0,52,56,214,15,61,168,97,186,49,144, + 1,151,8,145,8,156,31,213,16,41,208,15,61,136,4,208, + 15,61,220,11,14,136,116,139,57,152,1,138,62,160,36,160, + 113,162,39,224,19,23,156,40,145,63,208,12,34,216,15,19, + 148,104,151,109,145,109,160,68,211,22,41,209,15,41,208,8, + 41,249,242,9,0,16,62,115,12,0,0,0,195,48,7,69, + 5,4,195,56,23,69,5,4,99,0,0,0,0,0,0,0, + 0,0,0,0,0,8,0,0,0,7,0,0,0,243,124,0, + 0,0,151,0,116,0,0,0,0,0,0,0,0,0,106,3, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 124,0,68,0,143,1,99,2,103,0,99,2,93,25,0,0, - 125,1,124,1,114,21,124,1,106,5,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,116,6,0,0, - 0,0,0,0,0,0,171,1,0,0,0,0,0,0,145,2, - 140,27,4,0,99,2,125,1,171,1,0,0,0,0,0,0, - 83,0,99,2,1,0,99,2,125,1,119,0,41,1,114,55, - 0,0,0,41,4,114,62,0,0,0,114,65,0,0,0,114, - 60,0,0,0,114,61,0,0,0,41,2,114,66,0,0,0, - 218,4,112,97,114,116,115,2,0,0,0,32,32,114,10,0, - 0,0,114,72,0,0,0,114,72,0,0,0,126,0,0,0, - 115,57,0,0,0,128,0,228,15,23,143,125,137,125,216,42, - 52,246,3,1,30,62,216,34,38,185,4,240,3,0,31,35, - 159,107,153,107,172,47,213,30,58,242,0,1,30,62,243,0, - 1,16,63,240,0,1,9,63,249,242,0,1,30,62,115,4, - 0,0,0,148,30,57,8,99,1,0,0,0,0,0,0,0, - 0,0,0,0,4,0,0,0,3,0,0,0,243,96,0,0, - 0,135,0,151,0,116,1,0,0,0,0,0,0,0,0,136, - 0,102,1,100,1,132,8,116,2,0,0,0,0,0,0,0, - 0,68,0,171,0,0,0,0,0,0,0,171,1,0,0,0, - 0,0,0,125,1,124,1,100,2,107,2,0,0,114,4,100, - 3,137,0,102,2,83,0,137,0,100,4,124,1,26,0,137, - 0,124,1,100,5,122,0,0,0,100,4,26,0,102,2,83, - 0,41,6,122,32,82,101,112,108,97,99,101,109,101,110,116, - 32,102,111,114,32,111,115,46,112,97,116,104,46,115,112,108, - 105,116,40,41,46,99,1,0,0,0,0,0,0,0,0,0, - 0,0,4,0,0,0,51,0,0,0,243,64,0,0,0,149, - 1,75,0,1,0,151,0,124,0,93,21,0,0,125,1,137, - 2,106,1,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,124,1,171,1,0,0,0,0,0,0,150, - 1,151,1,1,0,140,23,4,0,121,0,173,3,119,1,169, - 1,78,41,1,218,5,114,102,105,110,100,41,3,114,8,0, - 0,0,114,71,0,0,0,114,68,0,0,0,115,3,0,0, - 0,32,32,128,114,10,0,0,0,114,11,0,0,0,122,30, - 95,112,97,116,104,95,115,112,108,105,116,46,60,108,111,99, - 97,108,115,62,46,60,103,101,110,101,120,112,114,62,134,0, - 0,0,115,25,0,0,0,248,232,0,248,128,0,210,11,51, - 152,97,136,68,143,74,137,74,144,113,143,77,209,11,51,249, - 115,4,0,0,0,131,27,30,1,114,1,0,0,0,114,12, - 0,0,0,78,114,6,0,0,0,41,2,218,3,109,97,120, - 114,61,0,0,0,41,2,114,68,0,0,0,218,1,105,115, - 2,0,0,0,96,32,114,10,0,0,0,218,11,95,112,97, - 116,104,95,115,112,108,105,116,114,81,0,0,0,132,0,0, - 0,115,62,0,0,0,248,128,0,228,8,11,211,11,51,164, - 63,212,11,51,211,8,51,128,65,216,7,8,136,49,130,117, - 216,15,17,144,52,136,120,136,15,216,11,15,144,2,144,17, - 136,56,144,84,152,33,152,97,153,37,152,38,144,92,208,11, - 33,208,4,33,114,28,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,44, - 0,0,0,151,0,116,1,0,0,0,0,0,0,0,0,106, - 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,124,0,171,1,0,0,0,0,0,0,83,0,41, - 1,122,126,83,116,97,116,32,116,104,101,32,112,97,116,104, - 46,10,10,32,32,32,32,77,97,100,101,32,97,32,115,101, - 112,97,114,97,116,101,32,102,117,110,99,116,105,111,110,32, - 116,111,32,109,97,107,101,32,105,116,32,101,97,115,105,101, - 114,32,116,111,32,111,118,101,114,114,105,100,101,32,105,110, - 32,101,120,112,101,114,105,109,101,110,116,115,10,32,32,32, - 32,40,101,46,103,46,32,99,97,99,104,101,32,115,116,97, - 116,32,114,101,115,117,108,116,115,41,46,10,10,32,32,32, - 32,41,2,114,23,0,0,0,218,4,115,116,97,116,169,1, - 114,68,0,0,0,115,1,0,0,0,32,114,10,0,0,0, - 218,10,95,112,97,116,104,95,115,116,97,116,114,85,0,0, - 0,140,0,0,0,115,18,0,0,0,128,0,244,14,0,12, - 15,143,56,137,56,144,68,139,62,208,4,25,114,28,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,92,0,0,0,151,0,9,0,116, - 1,0,0,0,0,0,0,0,0,124,0,171,1,0,0,0, - 0,0,0,125,2,124,2,106,4,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,100,2,122,1,0, - 0,124,1,107,40,0,0,83,0,35,0,116,2,0,0,0, - 0,0,0,0,0,36,0,114,3,1,0,89,0,121,1,119, - 0,120,3,89,0,119,1,41,3,122,49,84,101,115,116,32, - 119,104,101,116,104,101,114,32,116,104,101,32,112,97,116,104, - 32,105,115,32,116,104,101,32,115,112,101,99,105,102,105,101, - 100,32,109,111,100,101,32,116,121,112,101,46,70,105,0,240, - 0,0,41,3,114,85,0,0,0,218,7,79,83,69,114,114, - 111,114,218,7,115,116,95,109,111,100,101,41,3,114,68,0, - 0,0,218,4,109,111,100,101,218,9,115,116,97,116,95,105, - 110,102,111,115,3,0,0,0,32,32,32,114,10,0,0,0, - 218,18,95,112,97,116,104,95,105,115,95,109,111,100,101,95, - 116,121,112,101,114,91,0,0,0,150,0,0,0,115,61,0, - 0,0,128,0,240,4,3,5,21,220,20,30,152,116,211,20, - 36,136,9,240,6,0,13,22,215,12,29,209,12,29,160,8, - 209,12,40,168,84,209,11,49,208,4,49,248,244,5,0,12, - 19,242,0,1,5,21,217,15,20,240,3,1,5,21,250,115, - 12,0,0,0,130,11,31,0,159,9,43,3,170,1,43,3, - 99,1,0,0,0,0,0,0,0,0,0,0,0,4,0,0, - 0,3,0,0,0,243,26,0,0,0,151,0,116,1,0,0, - 0,0,0,0,0,0,124,0,100,1,171,2,0,0,0,0, - 0,0,83,0,41,2,122,31,82,101,112,108,97,99,101,109, - 101,110,116,32,102,111,114,32,111,115,46,112,97,116,104,46, - 105,115,102,105,108,101,46,105,0,128,0,0,41,1,114,91, - 0,0,0,114,84,0,0,0,115,1,0,0,0,32,114,10, - 0,0,0,218,12,95,112,97,116,104,95,105,115,102,105,108, - 101,114,93,0,0,0,159,0,0,0,115,15,0,0,0,128, - 0,228,11,29,152,100,160,72,211,11,45,208,4,45,114,28, - 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,70,0,0,0,151,0,124, - 0,115,20,116,1,0,0,0,0,0,0,0,0,106,2,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,171,0,0,0,0,0,0,0,125,0,116,5,0,0,0, - 0,0,0,0,0,124,0,100,1,171,2,0,0,0,0,0, - 0,83,0,41,2,122,30,82,101,112,108,97,99,101,109,101, - 110,116,32,102,111,114,32,111,115,46,112,97,116,104,46,105, - 115,100,105,114,46,105,0,64,0,0,41,3,114,23,0,0, - 0,218,6,103,101,116,99,119,100,114,91,0,0,0,114,84, - 0,0,0,115,1,0,0,0,32,114,10,0,0,0,218,11, - 95,112,97,116,104,95,105,115,100,105,114,114,96,0,0,0, - 164,0,0,0,115,29,0,0,0,128,0,225,11,15,220,15, - 18,143,122,137,122,139,124,136,4,220,11,29,152,100,160,72, - 211,11,45,208,4,45,114,28,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,192,0,0,0,151,0,124,0,115,1,121,1,116,1,0, - 0,0,0,0,0,0,0,106,2,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,124,0,171,1,0, - 0,0,0,0,0,100,2,25,0,0,0,106,5,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,100, - 3,100,4,171,2,0,0,0,0,0,0,125,1,116,7,0, + 0,0,124,0,68,0,143,1,99,2,103,0,99,2,93,25, + 0,0,125,1,124,1,114,21,124,1,106,5,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,116,6, + 0,0,0,0,0,0,0,0,171,1,0,0,0,0,0,0, + 145,2,140,27,4,0,99,2,125,1,171,1,0,0,0,0, + 0,0,83,0,99,2,1,0,99,2,125,1,119,0,41,1, + 114,55,0,0,0,41,4,114,62,0,0,0,114,65,0,0, + 0,114,60,0,0,0,114,61,0,0,0,41,2,114,66,0, + 0,0,218,4,112,97,114,116,115,2,0,0,0,32,32,114, + 10,0,0,0,114,72,0,0,0,114,72,0,0,0,126,0, + 0,0,115,57,0,0,0,128,0,228,15,23,143,125,137,125, + 216,42,52,246,3,1,30,62,216,34,38,185,4,240,3,0, + 31,35,159,107,153,107,172,47,213,30,58,242,0,1,30,62, + 243,0,1,16,63,240,0,1,9,63,249,242,0,1,30,62, + 115,4,0,0,0,148,30,57,8,99,1,0,0,0,0,0, + 0,0,0,0,0,0,4,0,0,0,3,0,0,0,243,96, + 0,0,0,135,0,151,0,116,1,0,0,0,0,0,0,0, + 0,136,0,102,1,100,1,132,8,116,2,0,0,0,0,0, + 0,0,0,68,0,171,0,0,0,0,0,0,0,171,1,0, + 0,0,0,0,0,125,1,124,1,100,2,107,2,0,0,114, + 4,100,3,137,0,102,2,83,0,137,0,100,4,124,1,26, + 0,137,0,124,1,100,5,122,0,0,0,100,4,26,0,102, + 2,83,0,41,6,122,32,82,101,112,108,97,99,101,109,101, + 110,116,32,102,111,114,32,111,115,46,112,97,116,104,46,115, + 112,108,105,116,40,41,46,99,1,0,0,0,0,0,0,0, + 0,0,0,0,4,0,0,0,51,0,0,0,243,64,0,0, + 0,149,1,75,0,1,0,151,0,124,0,93,21,0,0,125, + 1,137,2,106,1,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,124,1,171,1,0,0,0,0,0, - 0,100,5,107,68,0,0,120,1,114,36,1,0,124,1,106, - 9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,100,6,171,1,0,0,0,0,0,0,120,1,115, - 17,1,0,124,1,106,11,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,100,4,171,1,0,0,0, - 0,0,0,83,0,41,7,250,30,82,101,112,108,97,99,101, + 0,150,1,151,1,1,0,140,23,4,0,121,0,173,3,119, + 1,169,1,78,41,1,218,5,114,102,105,110,100,41,3,114, + 8,0,0,0,114,71,0,0,0,114,68,0,0,0,115,3, + 0,0,0,32,32,128,114,10,0,0,0,114,11,0,0,0, + 122,30,95,112,97,116,104,95,115,112,108,105,116,46,60,108, + 111,99,97,108,115,62,46,60,103,101,110,101,120,112,114,62, + 134,0,0,0,115,25,0,0,0,248,232,0,248,128,0,210, + 11,51,152,97,136,68,143,74,137,74,144,113,143,77,209,11, + 51,249,115,4,0,0,0,131,27,30,1,114,1,0,0,0, + 114,12,0,0,0,78,114,6,0,0,0,41,2,218,3,109, + 97,120,114,61,0,0,0,41,2,114,68,0,0,0,218,1, + 105,115,2,0,0,0,96,32,114,10,0,0,0,218,11,95, + 112,97,116,104,95,115,112,108,105,116,114,81,0,0,0,132, + 0,0,0,115,62,0,0,0,248,128,0,228,8,11,211,11, + 51,164,63,212,11,51,211,8,51,128,65,216,7,8,136,49, + 130,117,216,15,17,144,52,136,120,136,15,216,11,15,144,2, + 144,17,136,56,144,84,152,33,152,97,153,37,152,38,144,92, + 208,11,33,208,4,33,114,28,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,44,0,0,0,151,0,116,1,0,0,0,0,0,0,0, + 0,106,2,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,124,0,171,1,0,0,0,0,0,0,83, + 0,41,1,122,126,83,116,97,116,32,116,104,101,32,112,97, + 116,104,46,10,10,32,32,32,32,77,97,100,101,32,97,32, + 115,101,112,97,114,97,116,101,32,102,117,110,99,116,105,111, + 110,32,116,111,32,109,97,107,101,32,105,116,32,101,97,115, + 105,101,114,32,116,111,32,111,118,101,114,114,105,100,101,32, + 105,110,32,101,120,112,101,114,105,109,101,110,116,115,10,32, + 32,32,32,40,101,46,103,46,32,99,97,99,104,101,32,115, + 116,97,116,32,114,101,115,117,108,116,115,41,46,10,10,32, + 32,32,32,41,2,114,23,0,0,0,218,4,115,116,97,116, + 169,1,114,68,0,0,0,115,1,0,0,0,32,114,10,0, + 0,0,218,10,95,112,97,116,104,95,115,116,97,116,114,85, + 0,0,0,140,0,0,0,115,18,0,0,0,128,0,244,14, + 0,12,15,143,56,137,56,144,68,139,62,208,4,25,114,28, + 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,92,0,0,0,151,0,9, + 0,116,1,0,0,0,0,0,0,0,0,124,0,171,1,0, + 0,0,0,0,0,125,2,124,2,106,4,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,100,2,122, + 1,0,0,124,1,107,40,0,0,83,0,35,0,116,2,0, + 0,0,0,0,0,0,0,36,0,114,3,1,0,89,0,121, + 1,119,0,120,3,89,0,119,1,41,3,122,49,84,101,115, + 116,32,119,104,101,116,104,101,114,32,116,104,101,32,112,97, + 116,104,32,105,115,32,116,104,101,32,115,112,101,99,105,102, + 105,101,100,32,109,111,100,101,32,116,121,112,101,46,70,105, + 0,240,0,0,41,3,114,85,0,0,0,218,7,79,83,69, + 114,114,111,114,218,7,115,116,95,109,111,100,101,41,3,114, + 68,0,0,0,218,4,109,111,100,101,218,9,115,116,97,116, + 95,105,110,102,111,115,3,0,0,0,32,32,32,114,10,0, + 0,0,218,18,95,112,97,116,104,95,105,115,95,109,111,100, + 101,95,116,121,112,101,114,91,0,0,0,150,0,0,0,115, + 61,0,0,0,128,0,240,4,3,5,21,220,20,30,152,116, + 211,20,36,136,9,240,6,0,13,22,215,12,29,209,12,29, + 160,8,209,12,40,168,84,209,11,49,208,4,49,248,244,5, + 0,12,19,242,0,1,5,21,217,15,20,240,3,1,5,21, + 250,115,12,0,0,0,130,11,31,0,159,9,43,3,170,1, + 43,3,99,1,0,0,0,0,0,0,0,0,0,0,0,4, + 0,0,0,3,0,0,0,243,26,0,0,0,151,0,116,1, + 0,0,0,0,0,0,0,0,124,0,100,1,171,2,0,0, + 0,0,0,0,83,0,41,2,122,31,82,101,112,108,97,99, + 101,109,101,110,116,32,102,111,114,32,111,115,46,112,97,116, + 104,46,105,115,102,105,108,101,46,105,0,128,0,0,41,1, + 114,91,0,0,0,114,84,0,0,0,115,1,0,0,0,32, + 114,10,0,0,0,218,12,95,112,97,116,104,95,105,115,102, + 105,108,101,114,93,0,0,0,159,0,0,0,115,15,0,0, + 0,128,0,228,11,29,152,100,160,72,211,11,45,208,4,45, + 114,28,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,70,0,0,0,151, + 0,124,0,115,20,116,1,0,0,0,0,0,0,0,0,106, + 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,171,0,0,0,0,0,0,0,125,0,116,5,0, + 0,0,0,0,0,0,0,124,0,100,1,171,2,0,0,0, + 0,0,0,83,0,41,2,122,30,82,101,112,108,97,99,101, 109,101,110,116,32,102,111,114,32,111,115,46,112,97,116,104, - 46,105,115,97,98,115,46,70,114,1,0,0,0,114,4,0, - 0,0,114,3,0,0,0,114,6,0,0,0,122,2,92,92, - 41,6,114,23,0,0,0,114,57,0,0,0,218,7,114,101, - 112,108,97,99,101,114,7,0,0,0,114,32,0,0,0,114, - 59,0,0,0,41,2,114,68,0,0,0,114,67,0,0,0, - 115,2,0,0,0,32,32,114,10,0,0,0,218,11,95,112, - 97,116,104,95,105,115,97,98,115,114,100,0,0,0,172,0, - 0,0,115,84,0,0,0,128,0,225,15,19,216,19,24,220, - 15,18,215,15,34,209,15,34,160,52,211,15,40,168,17,209, - 15,43,215,15,51,209,15,51,176,67,184,20,211,15,62,136, - 4,220,15,18,144,52,139,121,152,49,137,125,210,15,81,160, - 36,167,47,161,47,176,38,211,34,57,210,34,80,184,84,191, - 93,185,93,200,52,211,61,80,208,8,81,114,28,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,44,0,0,0,151,0,124,0,106,1, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,116,2,0,0,0,0,0,0,0,0,171,1,0,0, - 0,0,0,0,83,0,41,1,114,98,0,0,0,41,2,114, - 32,0,0,0,114,61,0,0,0,114,84,0,0,0,115,1, - 0,0,0,32,114,10,0,0,0,114,100,0,0,0,114,100, - 0,0,0,180,0,0,0,115,17,0,0,0,128,0,224,15, - 19,143,127,137,127,156,127,211,15,47,208,8,47,114,28,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,150,0,0,0,151,0,116,1, - 0,0,0,0,0,0,0,0,124,0,171,1,0,0,0,0, - 0,0,115,61,116,2,0,0,0,0,0,0,0,0,68,0, - 93,22,0,0,125,1,124,0,106,5,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,100,1,124,1, - 155,0,157,2,171,1,0,0,0,0,0,0,125,0,140,24, - 4,0,116,7,0,0,0,0,0,0,0,0,116,9,0,0, - 0,0,0,0,0,0,106,10,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,171,0,0,0,0,0, - 0,0,124,0,171,2,0,0,0,0,0,0,83,0,124,0, - 83,0,41,2,122,32,82,101,112,108,97,99,101,109,101,110, - 116,32,102,111,114,32,111,115,46,112,97,116,104,46,97,98, - 115,112,97,116,104,46,250,1,46,41,6,114,100,0,0,0, - 114,61,0,0,0,218,12,114,101,109,111,118,101,112,114,101, - 102,105,120,114,72,0,0,0,114,23,0,0,0,114,95,0, - 0,0,41,2,114,68,0,0,0,114,9,0,0,0,115,2, - 0,0,0,32,32,114,10,0,0,0,218,13,95,112,97,116, - 104,95,97,98,115,112,97,116,104,114,105,0,0,0,185,0, - 0,0,115,71,0,0,0,128,0,228,11,22,144,116,212,11, - 28,220,19,34,242,0,1,9,48,136,67,216,19,23,215,19, - 36,209,19,36,160,113,168,19,168,5,160,89,211,19,47,137, - 68,240,3,1,9,48,228,15,25,156,35,159,42,153,42,155, - 44,168,4,211,15,45,208,8,45,224,15,19,136,11,114,28, - 0,0,0,99,3,0,0,0,0,0,0,0,0,0,0,0, - 6,0,0,0,3,0,0,0,243,196,1,0,0,151,0,124, - 0,155,0,100,1,116,1,0,0,0,0,0,0,0,0,124, - 0,171,1,0,0,0,0,0,0,155,0,157,3,125,3,116, - 3,0,0,0,0,0,0,0,0,106,4,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,124,3,116, - 2,0,0,0,0,0,0,0,0,106,6,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,116,2,0, - 0,0,0,0,0,0,0,106,8,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,122,7,0,0,116, - 2,0,0,0,0,0,0,0,0,106,10,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,122,7,0, - 0,124,2,100,2,122,1,0,0,171,3,0,0,0,0,0, - 0,125,4,9,0,116,13,0,0,0,0,0,0,0,0,106, - 14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,124,4,100,3,171,2,0,0,0,0,0,0,53, - 0,125,5,124,5,106,17,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,124,1,171,1,0,0,0, - 0,0,0,1,0,100,4,100,4,100,4,171,2,0,0,0, - 0,0,0,1,0,116,3,0,0,0,0,0,0,0,0,106, - 18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,124,3,124,0,171,2,0,0,0,0,0,0,1, - 0,121,4,35,0,49,0,115,1,119,2,1,0,89,0,1, - 0,1,0,140,32,120,3,89,0,119,1,35,0,116,20,0, - 0,0,0,0,0,0,0,36,0,114,39,1,0,9,0,116, - 3,0,0,0,0,0,0,0,0,106,22,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,124,3,171, - 1,0,0,0,0,0,0,1,0,130,0,35,0,116,20,0, - 0,0,0,0,0,0,0,36,0,114,3,1,0,89,0,130, - 0,119,0,120,3,89,0,119,1,119,0,120,3,89,0,119, - 1,41,5,122,162,66,101,115,116,45,101,102,102,111,114,116, - 32,102,117,110,99,116,105,111,110,32,116,111,32,119,114,105, - 116,101,32,100,97,116,97,32,116,111,32,97,32,112,97,116, - 104,32,97,116,111,109,105,99,97,108,108,121,46,10,32,32, - 32,32,66,101,32,112,114,101,112,97,114,101,100,32,116,111, - 32,104,97,110,100,108,101,32,97,32,70,105,108,101,69,120, - 105,115,116,115,69,114,114,111,114,32,105,102,32,99,111,110, - 99,117,114,114,101,110,116,32,119,114,105,116,105,110,103,32, - 111,102,32,116,104,101,10,32,32,32,32,116,101,109,112,111, - 114,97,114,121,32,102,105,108,101,32,105,115,32,97,116,116, - 101,109,112,116,101,100,46,114,103,0,0,0,233,182,1,0, - 0,218,2,119,98,78,41,12,218,2,105,100,114,23,0,0, - 0,218,4,111,112,101,110,218,6,79,95,69,88,67,76,218, - 7,79,95,67,82,69,65,84,218,8,79,95,87,82,79,78, - 76,89,218,3,95,105,111,218,6,70,105,108,101,73,79,218, - 5,119,114,105,116,101,114,99,0,0,0,114,87,0,0,0, - 218,6,117,110,108,105,110,107,41,6,114,68,0,0,0,114, - 48,0,0,0,114,89,0,0,0,218,8,112,97,116,104,95, - 116,109,112,218,2,102,100,218,4,102,105,108,101,115,6,0, - 0,0,32,32,32,32,32,32,114,10,0,0,0,218,13,95, - 119,114,105,116,101,95,97,116,111,109,105,99,114,121,0,0, - 0,195,0,0,0,115,203,0,0,0,128,0,240,10,0,19, - 23,144,22,144,113,156,18,152,68,155,24,152,10,208,15,35, - 128,72,220,9,12,143,24,137,24,144,40,220,18,21,151,42, - 145,42,156,115,159,123,153,123,209,18,42,172,83,175,92,169, - 92,209,18,57,184,52,192,37,185,60,243,3,1,10,73,1, - 128,66,240,4,11,5,14,244,6,0,14,17,143,90,137,90, - 152,2,152,68,211,13,33,240,0,1,9,29,160,84,216,12, - 16,143,74,137,74,144,116,212,12,28,247,3,1,9,29,228, - 8,11,143,11,137,11,144,72,152,100,213,8,35,247,5,1, - 9,29,240,0,1,9,29,251,244,6,0,12,19,242,0,5, - 5,14,240,2,3,9,17,220,12,15,143,74,137,74,144,120, - 212,12,32,240,6,0,9,14,248,244,5,0,16,23,242,0, - 1,9,17,216,12,16,216,8,13,240,5,1,9,17,250,240, - 7,5,5,14,250,115,72,0,0,0,193,28,22,66,47,0, - 193,50,18,66,35,3,194,4,30,66,47,0,194,35,5,66, - 44,7,194,40,7,66,47,0,194,47,9,67,31,3,194,57, - 21,67,15,2,195,14,1,67,31,3,195,15,9,67,27,5, - 195,24,2,67,31,3,195,26,1,67,27,5,195,27,4,67, - 31,3,105,203,13,0,0,114,52,0,0,0,114,39,0,0, - 0,115,2,0,0,0,13,10,218,11,95,95,112,121,99,97, - 99,104,101,95,95,122,4,111,112,116,45,122,3,46,112,121, - 122,4,46,112,121,119,122,4,46,112,121,99,41,1,218,12, - 111,112,116,105,109,105,122,97,116,105,111,110,99,2,0,0, - 0,0,0,0,0,1,0,0,0,6,0,0,0,3,0,0, - 0,243,60,3,0,0,151,0,124,1,129,47,116,1,0,0, - 0,0,0,0,0,0,106,2,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,100,2,116,4,0,0, - 0,0,0,0,0,0,171,2,0,0,0,0,0,0,1,0, - 124,2,129,13,100,3,125,3,116,7,0,0,0,0,0,0, - 0,0,124,3,171,1,0,0,0,0,0,0,130,1,124,1, - 114,2,100,4,110,1,100,5,125,2,116,9,0,0,0,0, - 0,0,0,0,106,10,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,124,0,171,1,0,0,0,0, - 0,0,125,0,116,13,0,0,0,0,0,0,0,0,124,0, - 171,1,0,0,0,0,0,0,92,2,0,0,125,4,125,5, - 124,5,106,15,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,100,6,171,1,0,0,0,0,0,0, - 92,3,0,0,125,6,125,7,125,8,116,16,0,0,0,0, - 0,0,0,0,106,18,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,106,20,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,125,9,124,9, - 128,11,116,23,0,0,0,0,0,0,0,0,100,7,171,1, - 0,0,0,0,0,0,130,1,100,4,106,25,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,124,6, - 114,2,124,6,110,1,124,8,124,7,124,9,103,3,171,1, - 0,0,0,0,0,0,125,10,124,2,128,58,116,16,0,0, - 0,0,0,0,0,0,106,26,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,106,28,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,100,8, - 107,40,0,0,114,3,100,4,125,2,110,26,116,16,0,0, - 0,0,0,0,0,0,106,26,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,106,28,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,125,2, - 116,31,0,0,0,0,0,0,0,0,124,2,171,1,0,0, - 0,0,0,0,125,2,124,2,100,4,107,55,0,0,114,43, - 124,2,106,33,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,171,0,0,0,0,0,0,0,115,14, - 116,35,0,0,0,0,0,0,0,0,124,2,155,2,100,9, - 157,2,171,1,0,0,0,0,0,0,130,1,124,10,155,0, - 100,6,116,36,0,0,0,0,0,0,0,0,155,0,124,2, - 155,0,157,4,125,10,124,10,116,38,0,0,0,0,0,0, - 0,0,100,8,25,0,0,0,122,0,0,0,125,11,116,16, - 0,0,0,0,0,0,0,0,106,40,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,129,81,116,43, - 0,0,0,0,0,0,0,0,124,4,171,1,0,0,0,0, - 0,0,125,4,124,4,100,5,25,0,0,0,100,10,107,40, - 0,0,114,16,124,4,100,8,25,0,0,0,116,44,0,0, - 0,0,0,0,0,0,118,1,114,5,124,4,100,11,100,1, - 26,0,125,4,116,47,0,0,0,0,0,0,0,0,116,16, - 0,0,0,0,0,0,0,0,106,40,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,124,4,106,49, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,116,44,0,0,0,0,0,0,0,0,171,1,0,0, - 0,0,0,0,124,11,171,3,0,0,0,0,0,0,83,0, - 116,47,0,0,0,0,0,0,0,0,124,4,116,50,0,0, - 0,0,0,0,0,0,124,11,171,3,0,0,0,0,0,0, - 83,0,41,12,97,254,2,0,0,71,105,118,101,110,32,116, - 104,101,32,112,97,116,104,32,116,111,32,97,32,46,112,121, - 32,102,105,108,101,44,32,114,101,116,117,114,110,32,116,104, - 101,32,112,97,116,104,32,116,111,32,105,116,115,32,46,112, - 121,99,32,102,105,108,101,46,10,10,32,32,32,32,84,104, - 101,32,46,112,121,32,102,105,108,101,32,100,111,101,115,32, - 110,111,116,32,110,101,101,100,32,116,111,32,101,120,105,115, - 116,59,32,116,104,105,115,32,115,105,109,112,108,121,32,114, - 101,116,117,114,110,115,32,116,104,101,32,112,97,116,104,32, - 116,111,32,116,104,101,10,32,32,32,32,46,112,121,99,32, - 102,105,108,101,32,99,97,108,99,117,108,97,116,101,100,32, - 97,115,32,105,102,32,116,104,101,32,46,112,121,32,102,105, - 108,101,32,119,101,114,101,32,105,109,112,111,114,116,101,100, - 46,10,10,32,32,32,32,84,104,101,32,39,111,112,116,105, - 109,105,122,97,116,105,111,110,39,32,112,97,114,97,109,101, - 116,101,114,32,99,111,110,116,114,111,108,115,32,116,104,101, - 32,112,114,101,115,117,109,101,100,32,111,112,116,105,109,105, - 122,97,116,105,111,110,32,108,101,118,101,108,32,111,102,10, - 32,32,32,32,116,104,101,32,98,121,116,101,99,111,100,101, - 32,102,105,108,101,46,32,73,102,32,39,111,112,116,105,109, - 105,122,97,116,105,111,110,39,32,105,115,32,110,111,116,32, - 78,111,110,101,44,32,116,104,101,32,115,116,114,105,110,103, - 32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,10, - 32,32,32,32,111,102,32,116,104,101,32,97,114,103,117,109, - 101,110,116,32,105,115,32,116,97,107,101,110,32,97,110,100, - 32,118,101,114,105,102,105,101,100,32,116,111,32,98,101,32, - 97,108,112,104,97,110,117,109,101,114,105,99,32,40,101,108, - 115,101,32,86,97,108,117,101,69,114,114,111,114,10,32,32, - 32,32,105,115,32,114,97,105,115,101,100,41,46,10,10,32, - 32,32,32,84,104,101,32,100,101,98,117,103,95,111,118,101, - 114,114,105,100,101,32,112,97,114,97,109,101,116,101,114,32, - 105,115,32,100,101,112,114,101,99,97,116,101,100,46,32,73, - 102,32,100,101,98,117,103,95,111,118,101,114,114,105,100,101, - 32,105,115,32,110,111,116,32,78,111,110,101,44,10,32,32, - 32,32,97,32,84,114,117,101,32,118,97,108,117,101,32,105, - 115,32,116,104,101,32,115,97,109,101,32,97,115,32,115,101, - 116,116,105,110,103,32,39,111,112,116,105,109,105,122,97,116, - 105,111,110,39,32,116,111,32,116,104,101,32,101,109,112,116, - 121,32,115,116,114,105,110,103,10,32,32,32,32,119,104,105, - 108,101,32,97,32,70,97,108,115,101,32,118,97,108,117,101, - 32,105,115,32,101,113,117,105,118,97,108,101,110,116,32,116, - 111,32,115,101,116,116,105,110,103,32,39,111,112,116,105,109, - 105,122,97,116,105,111,110,39,32,116,111,32,39,49,39,46, - 10,10,32,32,32,32,73,102,32,115,121,115,46,105,109,112, - 108,101,109,101,110,116,97,116,105,111,110,46,99,97,99,104, - 101,95,116,97,103,32,105,115,32,78,111,110,101,32,116,104, - 101,110,32,78,111,116,73,109,112,108,101,109,101,110,116,101, - 100,69,114,114,111,114,32,105,115,32,114,97,105,115,101,100, - 46,10,10,32,32,32,32,78,122,70,116,104,101,32,100,101, - 98,117,103,95,111,118,101,114,114,105,100,101,32,112,97,114, - 97,109,101,116,101,114,32,105,115,32,100,101,112,114,101,99, - 97,116,101,100,59,32,117,115,101,32,39,111,112,116,105,109, - 105,122,97,116,105,111,110,39,32,105,110,115,116,101,97,100, - 122,50,100,101,98,117,103,95,111,118,101,114,114,105,100,101, - 32,111,114,32,111,112,116,105,109,105,122,97,116,105,111,110, - 32,109,117,115,116,32,98,101,32,115,101,116,32,116,111,32, - 78,111,110,101,114,12,0,0,0,114,6,0,0,0,114,103, - 0,0,0,250,36,115,121,115,46,105,109,112,108,101,109,101, - 110,116,97,116,105,111,110,46,99,97,99,104,101,95,116,97, - 103,32,105,115,32,78,111,110,101,114,1,0,0,0,122,20, - 32,105,115,32,110,111,116,32,97,108,112,104,97,110,117,109, - 101,114,105,99,114,13,0,0,0,114,52,0,0,0,41,26, - 218,9,95,119,97,114,110,105,110,103,115,218,4,119,97,114, - 110,218,18,68,101,112,114,101,99,97,116,105,111,110,87,97, - 114,110,105,110,103,218,9,84,121,112,101,69,114,114,111,114, - 114,23,0,0,0,218,6,102,115,112,97,116,104,114,81,0, - 0,0,218,10,114,112,97,114,116,105,116,105,111,110,114,20, - 0,0,0,218,14,105,109,112,108,101,109,101,110,116,97,116, - 105,111,110,218,9,99,97,99,104,101,95,116,97,103,218,19, - 78,111,116,73,109,112,108,101,109,101,110,116,101,100,69,114, - 114,111,114,114,65,0,0,0,114,21,0,0,0,218,8,111, - 112,116,105,109,105,122,101,218,3,115,116,114,218,7,105,115, - 97,108,110,117,109,218,10,86,97,108,117,101,69,114,114,111, - 114,218,4,95,79,80,84,218,17,66,89,84,69,67,79,68, - 69,95,83,85,70,70,73,88,69,83,218,14,112,121,99,97, - 99,104,101,95,112,114,101,102,105,120,114,105,0,0,0,114, - 61,0,0,0,114,72,0,0,0,218,6,108,115,116,114,105, - 112,218,8,95,80,89,67,65,67,72,69,41,12,114,68,0, - 0,0,218,14,100,101,98,117,103,95,111,118,101,114,114,105, - 100,101,114,123,0,0,0,218,7,109,101,115,115,97,103,101, - 218,4,104,101,97,100,114,70,0,0,0,218,4,98,97,115, - 101,114,9,0,0,0,218,4,114,101,115,116,218,3,116,97, - 103,218,15,97,108,109,111,115,116,95,102,105,108,101,110,97, - 109,101,218,8,102,105,108,101,110,97,109,101,115,12,0,0, - 0,32,32,32,32,32,32,32,32,32,32,32,32,114,10,0, - 0,0,218,17,99,97,99,104,101,95,102,114,111,109,95,115, - 111,117,114,99,101,114,152,0,0,0,226,1,0,0,115,159, - 1,0,0,128,0,240,36,0,8,22,208,7,33,220,8,17, - 143,14,137,14,240,0,1,24,48,220,49,67,244,3,1,9, - 69,1,224,11,23,208,11,35,216,22,74,136,71,220,18,27, - 152,71,211,18,36,208,12,36,217,29,43,145,114,176,17,136, - 12,220,11,14,143,58,137,58,144,100,211,11,27,128,68,220, - 17,28,152,84,211,17,34,129,74,128,68,136,36,216,22,26, - 151,111,145,111,160,99,211,22,42,129,79,128,68,136,35,136, - 116,220,10,13,215,10,28,209,10,28,215,10,38,209,10,38, - 128,67,216,7,10,128,123,220,14,33,208,34,72,211,14,73, - 208,8,73,216,22,24,151,103,145,103,169,4,161,4,176,36, - 184,19,184,99,208,30,66,211,22,67,128,79,216,7,19,208, - 7,27,220,11,14,143,57,137,57,215,11,29,209,11,29,160, - 17,210,11,34,216,27,29,137,76,228,27,30,159,57,153,57, - 215,27,45,209,27,45,136,76,220,19,22,144,124,211,19,36, - 128,76,216,7,19,144,114,210,7,25,216,15,27,215,15,35, - 209,15,35,212,15,37,220,18,28,160,12,208,31,47,208,47, - 67,208,29,68,211,18,69,208,12,69,216,29,44,208,28,45, - 168,81,172,116,168,102,176,92,176,78,208,26,67,136,15,216, - 15,30,212,33,50,176,49,209,33,53,209,15,53,128,72,220, - 7,10,215,7,25,209,7,25,208,7,37,244,18,0,16,29, - 152,84,211,15,34,136,4,240,10,0,12,16,144,1,137,55, - 144,99,138,62,152,100,160,49,153,103,172,95,209,30,60,216, - 19,23,152,1,152,2,144,56,136,68,244,8,0,16,26,220, - 12,15,215,12,30,209,12,30,216,12,16,143,75,137,75,156, - 15,211,12,40,216,12,20,243,7,4,16,10,240,0,4,9, - 10,244,10,0,12,22,144,100,156,72,160,104,211,11,47,208, - 4,47,114,28,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,36,3,0, - 0,151,0,116,0,0,0,0,0,0,0,0,0,106,2,0, + 46,105,115,100,105,114,46,105,0,64,0,0,41,3,114,23, + 0,0,0,218,6,103,101,116,99,119,100,114,91,0,0,0, + 114,84,0,0,0,115,1,0,0,0,32,114,10,0,0,0, + 218,11,95,112,97,116,104,95,105,115,100,105,114,114,96,0, + 0,0,164,0,0,0,115,29,0,0,0,128,0,225,11,15, + 220,15,18,143,122,137,122,139,124,136,4,220,11,29,152,100, + 160,72,211,11,45,208,4,45,114,28,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,192,0,0,0,151,0,124,0,115,1,121,1,116, + 1,0,0,0,0,0,0,0,0,106,2,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,124,0,171, + 1,0,0,0,0,0,0,100,2,25,0,0,0,106,5,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,106,4,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,128,11,116,7,0,0,0,0,0,0,0, - 0,100,2,171,1,0,0,0,0,0,0,130,1,116,9,0, - 0,0,0,0,0,0,0,106,10,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,124,0,171,1,0, - 0,0,0,0,0,125,0,116,13,0,0,0,0,0,0,0, - 0,124,0,171,1,0,0,0,0,0,0,92,2,0,0,125, - 1,125,2,100,3,125,3,116,0,0,0,0,0,0,0,0, - 0,106,14,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,129,75,116,0,0,0,0,0,0,0,0, - 0,106,14,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,106,17,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,116,18,0,0,0,0,0, - 0,0,0,171,1,0,0,0,0,0,0,125,4,124,1,106, - 21,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,124,4,116,22,0,0,0,0,0,0,0,0,122, - 0,0,0,171,1,0,0,0,0,0,0,114,16,124,1,116, - 25,0,0,0,0,0,0,0,0,124,4,171,1,0,0,0, - 0,0,0,100,1,26,0,125,1,100,4,125,3,124,3,115, - 43,116,13,0,0,0,0,0,0,0,0,124,1,171,1,0, - 0,0,0,0,0,92,2,0,0,125,1,125,5,124,5,116, - 26,0,0,0,0,0,0,0,0,107,55,0,0,114,20,116, - 29,0,0,0,0,0,0,0,0,116,26,0,0,0,0,0, - 0,0,0,155,0,100,5,124,0,155,2,157,3,171,1,0, - 0,0,0,0,0,130,1,124,2,106,31,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,100,6,171, - 1,0,0,0,0,0,0,125,6,124,6,100,7,118,1,114, - 14,116,29,0,0,0,0,0,0,0,0,100,8,124,2,155, - 2,157,2,171,1,0,0,0,0,0,0,130,1,124,6,100, - 9,107,40,0,0,114,109,124,2,106,33,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,100,6,100, - 10,171,2,0,0,0,0,0,0,100,11,25,0,0,0,125, - 7,124,7,106,21,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,116,34,0,0,0,0,0,0,0, - 0,171,1,0,0,0,0,0,0,115,18,116,29,0,0,0, - 0,0,0,0,0,100,12,116,34,0,0,0,0,0,0,0, - 0,155,2,157,2,171,1,0,0,0,0,0,0,130,1,124, - 7,116,25,0,0,0,0,0,0,0,0,116,34,0,0,0, - 0,0,0,0,0,171,1,0,0,0,0,0,0,100,1,26, - 0,125,8,124,8,106,37,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,171,0,0,0,0,0,0, - 0,115,15,116,29,0,0,0,0,0,0,0,0,100,13,124, - 7,155,2,100,14,157,3,171,1,0,0,0,0,0,0,130, - 1,124,2,106,39,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,100,6,171,1,0,0,0,0,0, - 0,100,15,25,0,0,0,125,9,116,41,0,0,0,0,0, - 0,0,0,124,1,124,9,116,42,0,0,0,0,0,0,0, - 0,100,15,25,0,0,0,122,0,0,0,171,2,0,0,0, - 0,0,0,83,0,41,16,97,110,1,0,0,71,105,118,101, - 110,32,116,104,101,32,112,97,116,104,32,116,111,32,97,32, - 46,112,121,99,46,32,102,105,108,101,44,32,114,101,116,117, - 114,110,32,116,104,101,32,112,97,116,104,32,116,111,32,105, - 116,115,32,46,112,121,32,102,105,108,101,46,10,10,32,32, - 32,32,84,104,101,32,46,112,121,99,32,102,105,108,101,32, - 100,111,101,115,32,110,111,116,32,110,101,101,100,32,116,111, - 32,101,120,105,115,116,59,32,116,104,105,115,32,115,105,109, - 112,108,121,32,114,101,116,117,114,110,115,32,116,104,101,32, - 112,97,116,104,32,116,111,10,32,32,32,32,116,104,101,32, - 46,112,121,32,102,105,108,101,32,99,97,108,99,117,108,97, - 116,101,100,32,116,111,32,99,111,114,114,101,115,112,111,110, - 100,32,116,111,32,116,104,101,32,46,112,121,99,32,102,105, - 108,101,46,32,32,73,102,32,112,97,116,104,32,100,111,101, - 115,10,32,32,32,32,110,111,116,32,99,111,110,102,111,114, - 109,32,116,111,32,80,69,80,32,51,49,52,55,47,52,56, - 56,32,102,111,114,109,97,116,44,32,86,97,108,117,101,69, - 114,114,111,114,32,119,105,108,108,32,98,101,32,114,97,105, - 115,101,100,46,32,73,102,10,32,32,32,32,115,121,115,46, - 105,109,112,108,101,109,101,110,116,97,116,105,111,110,46,99, - 97,99,104,101,95,116,97,103,32,105,115,32,78,111,110,101, - 32,116,104,101,110,32,78,111,116,73,109,112,108,101,109,101, - 110,116,101,100,69,114,114,111,114,32,105,115,32,114,97,105, - 115,101,100,46,10,10,32,32,32,32,78,114,125,0,0,0, - 70,84,122,31,32,110,111,116,32,98,111,116,116,111,109,45, - 108,101,118,101,108,32,100,105,114,101,99,116,111,114,121,32, - 105,110,32,114,103,0,0,0,62,2,0,0,0,114,52,0, - 0,0,233,3,0,0,0,122,29,101,120,112,101,99,116,101, - 100,32,111,110,108,121,32,50,32,111,114,32,51,32,100,111, - 116,115,32,105,110,32,114,154,0,0,0,114,52,0,0,0, - 233,254,255,255,255,122,53,111,112,116,105,109,105,122,97,116, - 105,111,110,32,112,111,114,116,105,111,110,32,111,102,32,102, - 105,108,101,110,97,109,101,32,100,111,101,115,32,110,111,116, - 32,115,116,97,114,116,32,119,105,116,104,32,122,19,111,112, - 116,105,109,105,122,97,116,105,111,110,32,108,101,118,101,108, - 32,122,29,32,105,115,32,110,111,116,32,97,110,32,97,108, - 112,104,97,110,117,109,101,114,105,99,32,118,97,108,117,101, - 114,1,0,0,0,41,22,114,20,0,0,0,114,132,0,0, - 0,114,133,0,0,0,114,134,0,0,0,114,23,0,0,0, - 114,130,0,0,0,114,81,0,0,0,114,141,0,0,0,114, - 60,0,0,0,114,61,0,0,0,114,32,0,0,0,114,62, - 0,0,0,114,7,0,0,0,114,143,0,0,0,114,138,0, - 0,0,218,5,99,111,117,110,116,218,6,114,115,112,108,105, - 116,114,139,0,0,0,114,137,0,0,0,218,9,112,97,114, - 116,105,116,105,111,110,114,72,0,0,0,218,15,83,79,85, - 82,67,69,95,83,85,70,70,73,88,69,83,41,10,114,68, - 0,0,0,114,146,0,0,0,218,16,112,121,99,97,99,104, - 101,95,102,105,108,101,110,97,109,101,218,23,102,111,117,110, - 100,95,105,110,95,112,121,99,97,99,104,101,95,112,114,101, - 102,105,120,218,13,115,116,114,105,112,112,101,100,95,112,97, - 116,104,218,7,112,121,99,97,99,104,101,218,9,100,111,116, - 95,99,111,117,110,116,114,123,0,0,0,218,9,111,112,116, - 95,108,101,118,101,108,218,13,98,97,115,101,95,102,105,108, - 101,110,97,109,101,115,10,0,0,0,32,32,32,32,32,32, - 32,32,32,32,114,10,0,0,0,218,17,115,111,117,114,99, - 101,95,102,114,111,109,95,99,97,99,104,101,114,167,0,0, - 0,40,2,0,0,115,165,1,0,0,128,0,244,18,0,8, - 11,215,7,25,209,7,25,215,7,35,209,7,35,208,7,43, - 220,14,33,208,34,72,211,14,73,208,8,73,220,11,14,143, - 58,137,58,144,100,211,11,27,128,68,220,29,40,168,20,211, - 29,46,209,4,26,128,68,208,10,26,216,30,35,208,4,27, - 220,7,10,215,7,25,209,7,25,208,7,37,220,24,27,215, - 24,42,209,24,42,215,24,49,209,24,49,180,47,211,24,66, - 136,13,216,11,15,143,63,137,63,152,61,172,56,209,27,51, - 212,11,52,216,19,23,156,3,152,77,211,24,42,208,24,43, - 208,19,44,136,68,216,38,42,208,12,35,217,11,34,220,24, - 35,160,68,211,24,41,137,13,136,4,136,103,216,11,18,148, - 104,210,11,30,220,18,28,164,8,152,122,208,41,72,216,32, - 36,152,120,240,3,1,30,41,243,0,1,19,42,240,0,1, - 13,42,224,16,32,215,16,38,209,16,38,160,115,211,16,43, - 128,73,216,7,16,152,6,209,7,30,220,14,24,208,27,56, - 208,57,73,208,56,76,208,25,77,211,14,78,208,8,78,216, - 9,18,144,97,138,30,216,23,39,215,23,46,209,23,46,168, - 115,176,65,211,23,54,176,114,209,23,58,136,12,216,15,27, - 215,15,38,209,15,38,164,116,212,15,44,220,18,28,240,0, - 1,30,37,220,37,41,160,72,240,3,1,30,46,243,0,1, - 19,47,240,0,1,13,47,224,20,32,164,19,164,84,163,25, - 160,26,208,20,44,136,9,216,15,24,215,15,32,209,15,32, - 212,15,34,220,18,28,208,31,50,176,60,208,50,66,240,0, - 1,67,1,50,240,0,1,30,50,243,0,1,19,51,240,0, - 1,13,51,224,20,36,215,20,46,209,20,46,168,115,211,20, - 51,176,65,209,20,54,128,77,220,11,21,144,100,152,77,172, - 79,184,65,209,44,62,209,28,62,211,11,63,208,4,63,114, + 0,100,3,100,4,171,2,0,0,0,0,0,0,125,1,116, + 7,0,0,0,0,0,0,0,0,124,1,171,1,0,0,0, + 0,0,0,100,5,107,68,0,0,120,1,114,36,1,0,124, + 1,106,9,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,100,6,171,1,0,0,0,0,0,0,120, + 1,115,17,1,0,124,1,106,11,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,100,4,171,1,0, + 0,0,0,0,0,83,0,41,7,250,30,82,101,112,108,97, + 99,101,109,101,110,116,32,102,111,114,32,111,115,46,112,97, + 116,104,46,105,115,97,98,115,46,70,114,1,0,0,0,114, + 4,0,0,0,114,3,0,0,0,114,6,0,0,0,122,2, + 92,92,41,6,114,23,0,0,0,114,57,0,0,0,218,7, + 114,101,112,108,97,99,101,114,7,0,0,0,114,32,0,0, + 0,114,59,0,0,0,41,2,114,68,0,0,0,114,67,0, + 0,0,115,2,0,0,0,32,32,114,10,0,0,0,218,11, + 95,112,97,116,104,95,105,115,97,98,115,114,100,0,0,0, + 172,0,0,0,115,84,0,0,0,128,0,225,15,19,216,19, + 24,220,15,18,215,15,34,209,15,34,160,52,211,15,40,168, + 17,209,15,43,215,15,51,209,15,51,176,67,184,20,211,15, + 62,136,4,220,15,18,144,52,139,121,152,49,137,125,210,15, + 81,160,36,167,47,161,47,176,38,211,34,57,210,34,80,184, + 84,191,93,185,93,200,52,211,61,80,208,8,81,114,28,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,44,0,0,0,151,0,124,0, + 106,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,116,2,0,0,0,0,0,0,0,0,171,1, + 0,0,0,0,0,0,83,0,41,1,114,98,0,0,0,41, + 2,114,32,0,0,0,114,61,0,0,0,114,84,0,0,0, + 115,1,0,0,0,32,114,10,0,0,0,114,100,0,0,0, + 114,100,0,0,0,180,0,0,0,115,17,0,0,0,128,0, + 224,15,19,143,127,137,127,156,127,211,15,47,208,8,47,114, 28,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,232,0,0,0,151,0, + 0,5,0,0,0,3,0,0,0,243,150,0,0,0,151,0, 116,1,0,0,0,0,0,0,0,0,124,0,171,1,0,0, - 0,0,0,0,100,1,107,40,0,0,114,1,121,2,124,0, - 106,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,100,3,171,1,0,0,0,0,0,0,92,3, - 0,0,125,1,125,2,125,3,124,1,114,22,124,3,106,5, + 0,0,0,0,115,61,116,2,0,0,0,0,0,0,0,0, + 68,0,93,22,0,0,125,1,124,0,106,5,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,100,1, + 124,1,155,0,157,2,171,1,0,0,0,0,0,0,125,0, + 140,24,4,0,116,7,0,0,0,0,0,0,0,0,116,9, + 0,0,0,0,0,0,0,0,106,10,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,171,0,0,0, + 0,0,0,0,124,0,171,2,0,0,0,0,0,0,83,0, + 124,0,83,0,41,2,122,32,82,101,112,108,97,99,101,109, + 101,110,116,32,102,111,114,32,111,115,46,112,97,116,104,46, + 97,98,115,112,97,116,104,46,250,1,46,41,6,114,100,0, + 0,0,114,61,0,0,0,218,12,114,101,109,111,118,101,112, + 114,101,102,105,120,114,72,0,0,0,114,23,0,0,0,114, + 95,0,0,0,41,2,114,68,0,0,0,114,9,0,0,0, + 115,2,0,0,0,32,32,114,10,0,0,0,218,13,95,112, + 97,116,104,95,97,98,115,112,97,116,104,114,105,0,0,0, + 185,0,0,0,115,71,0,0,0,128,0,228,11,22,144,116, + 212,11,28,220,19,34,242,0,1,9,48,136,67,216,19,23, + 215,19,36,209,19,36,160,113,168,19,168,5,160,89,211,19, + 47,137,68,240,3,1,9,48,228,15,25,156,35,159,42,153, + 42,155,44,168,4,211,15,45,208,8,45,224,15,19,136,11, + 114,28,0,0,0,99,3,0,0,0,0,0,0,0,0,0, + 0,0,6,0,0,0,3,0,0,0,243,196,1,0,0,151, + 0,124,0,155,0,100,1,116,1,0,0,0,0,0,0,0, + 0,124,0,171,1,0,0,0,0,0,0,155,0,157,3,125, + 3,116,3,0,0,0,0,0,0,0,0,106,4,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,124, + 3,116,2,0,0,0,0,0,0,0,0,106,6,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,116, + 2,0,0,0,0,0,0,0,0,106,8,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,122,7,0, + 0,116,2,0,0,0,0,0,0,0,0,106,10,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,122, + 7,0,0,124,2,100,2,122,1,0,0,171,3,0,0,0, + 0,0,0,125,4,9,0,116,13,0,0,0,0,0,0,0, + 0,106,14,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,124,4,100,3,171,2,0,0,0,0,0, + 0,53,0,125,5,124,5,106,17,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,124,1,171,1,0, + 0,0,0,0,0,1,0,100,4,100,4,100,4,171,2,0, + 0,0,0,0,0,1,0,116,3,0,0,0,0,0,0,0, + 0,106,18,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,124,3,124,0,171,2,0,0,0,0,0, + 0,1,0,121,4,35,0,49,0,115,1,119,2,1,0,89, + 0,1,0,1,0,140,32,120,3,89,0,119,1,35,0,116, + 20,0,0,0,0,0,0,0,0,36,0,114,39,1,0,9, + 0,116,3,0,0,0,0,0,0,0,0,106,22,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,124, + 3,171,1,0,0,0,0,0,0,1,0,130,0,35,0,116, + 20,0,0,0,0,0,0,0,0,36,0,114,3,1,0,89, + 0,130,0,119,0,120,3,89,0,119,1,119,0,120,3,89, + 0,119,1,41,5,122,162,66,101,115,116,45,101,102,102,111, + 114,116,32,102,117,110,99,116,105,111,110,32,116,111,32,119, + 114,105,116,101,32,100,97,116,97,32,116,111,32,97,32,112, + 97,116,104,32,97,116,111,109,105,99,97,108,108,121,46,10, + 32,32,32,32,66,101,32,112,114,101,112,97,114,101,100,32, + 116,111,32,104,97,110,100,108,101,32,97,32,70,105,108,101, + 69,120,105,115,116,115,69,114,114,111,114,32,105,102,32,99, + 111,110,99,117,114,114,101,110,116,32,119,114,105,116,105,110, + 103,32,111,102,32,116,104,101,10,32,32,32,32,116,101,109, + 112,111,114,97,114,121,32,102,105,108,101,32,105,115,32,97, + 116,116,101,109,112,116,101,100,46,114,103,0,0,0,233,182, + 1,0,0,218,2,119,98,78,41,12,218,2,105,100,114,23, + 0,0,0,218,4,111,112,101,110,218,6,79,95,69,88,67, + 76,218,7,79,95,67,82,69,65,84,218,8,79,95,87,82, + 79,78,76,89,218,3,95,105,111,218,6,70,105,108,101,73, + 79,218,5,119,114,105,116,101,114,99,0,0,0,114,87,0, + 0,0,218,6,117,110,108,105,110,107,41,6,114,68,0,0, + 0,114,48,0,0,0,114,89,0,0,0,218,8,112,97,116, + 104,95,116,109,112,218,2,102,100,218,4,102,105,108,101,115, + 6,0,0,0,32,32,32,32,32,32,114,10,0,0,0,218, + 13,95,119,114,105,116,101,95,97,116,111,109,105,99,114,121, + 0,0,0,195,0,0,0,115,203,0,0,0,128,0,240,10, + 0,19,23,144,22,144,113,156,18,152,68,155,24,152,10,208, + 15,35,128,72,220,9,12,143,24,137,24,144,40,220,18,21, + 151,42,145,42,156,115,159,123,153,123,209,18,42,172,83,175, + 92,169,92,209,18,57,184,52,192,37,185,60,243,3,1,10, + 73,1,128,66,240,4,11,5,14,244,6,0,14,17,143,90, + 137,90,152,2,152,68,211,13,33,240,0,1,9,29,160,84, + 216,12,16,143,74,137,74,144,116,212,12,28,247,3,1,9, + 29,228,8,11,143,11,137,11,144,72,152,100,213,8,35,247, + 5,1,9,29,240,0,1,9,29,251,244,6,0,12,19,242, + 0,5,5,14,240,2,3,9,17,220,12,15,143,74,137,74, + 144,120,212,12,32,240,6,0,9,14,248,244,5,0,16,23, + 242,0,1,9,17,216,12,16,216,8,13,240,5,1,9,17, + 250,240,7,5,5,14,250,115,72,0,0,0,193,28,22,66, + 47,0,193,50,18,66,35,3,194,4,30,66,47,0,194,35, + 5,66,44,7,194,40,7,66,47,0,194,47,9,67,31,3, + 194,57,21,67,15,2,195,14,1,67,31,3,195,15,9,67, + 27,5,195,24,2,67,31,3,195,26,1,67,27,5,195,27, + 4,67,31,3,105,203,13,0,0,114,52,0,0,0,114,39, + 0,0,0,115,2,0,0,0,13,10,218,11,95,95,112,121, + 99,97,99,104,101,95,95,122,4,111,112,116,45,122,3,46, + 112,121,122,4,46,112,121,119,122,4,46,112,121,99,41,1, + 218,12,111,112,116,105,109,105,122,97,116,105,111,110,99,2, + 0,0,0,0,0,0,0,1,0,0,0,6,0,0,0,3, + 0,0,0,243,60,3,0,0,151,0,124,1,129,47,116,1, + 0,0,0,0,0,0,0,0,106,2,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,100,2,116,4, + 0,0,0,0,0,0,0,0,171,2,0,0,0,0,0,0, + 1,0,124,2,129,13,100,3,125,3,116,7,0,0,0,0, + 0,0,0,0,124,3,171,1,0,0,0,0,0,0,130,1, + 124,1,114,2,100,4,110,1,100,5,125,2,116,9,0,0, + 0,0,0,0,0,0,106,10,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,124,0,171,1,0,0, + 0,0,0,0,125,0,116,13,0,0,0,0,0,0,0,0, + 124,0,171,1,0,0,0,0,0,0,92,2,0,0,125,4, + 125,5,124,5,106,15,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,100,6,171,1,0,0,0,0, + 0,0,92,3,0,0,125,6,125,7,125,8,116,16,0,0, + 0,0,0,0,0,0,106,18,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,106,20,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,125,9, + 124,9,128,11,116,23,0,0,0,0,0,0,0,0,100,7, + 171,1,0,0,0,0,0,0,130,1,100,4,106,25,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,171,0,0,0,0,0,0,0,100,4,100,5,26,0, - 100,6,107,55,0,0,114,2,124,0,83,0,9,0,116,7, - 0,0,0,0,0,0,0,0,124,0,171,1,0,0,0,0, - 0,0,125,4,116,13,0,0,0,0,0,0,0,0,124,4, - 171,1,0,0,0,0,0,0,114,2,124,4,83,0,124,0, - 83,0,35,0,116,8,0,0,0,0,0,0,0,0,116,10, - 0,0,0,0,0,0,0,0,102,2,36,0,114,8,1,0, - 124,0,100,2,100,5,26,0,125,4,89,0,140,37,119,0, - 120,3,89,0,119,1,41,7,122,188,67,111,110,118,101,114, - 116,32,97,32,98,121,116,101,99,111,100,101,32,102,105,108, - 101,32,112,97,116,104,32,116,111,32,97,32,115,111,117,114, - 99,101,32,112,97,116,104,32,40,105,102,32,112,111,115,115, - 105,98,108,101,41,46,10,10,32,32,32,32,84,104,105,115, - 32,102,117,110,99,116,105,111,110,32,101,120,105,115,116,115, - 32,112,117,114,101,108,121,32,102,111,114,32,98,97,99,107, - 119,97,114,100,115,45,99,111,109,112,97,116,105,98,105,108, - 105,116,121,32,102,111,114,10,32,32,32,32,80,121,73,109, - 112,111,114,116,95,69,120,101,99,67,111,100,101,77,111,100, - 117,108,101,87,105,116,104,70,105,108,101,110,97,109,101,115, - 40,41,32,105,110,32,116,104,101,32,67,32,65,80,73,46, - 10,10,32,32,32,32,114,1,0,0,0,78,114,103,0,0, - 0,233,253,255,255,255,233,255,255,255,255,218,2,112,121,41, - 7,114,7,0,0,0,114,131,0,0,0,218,5,108,111,119, - 101,114,114,167,0,0,0,114,134,0,0,0,114,138,0,0, - 0,114,93,0,0,0,41,5,218,13,98,121,116,101,99,111, - 100,101,95,112,97,116,104,114,148,0,0,0,218,1,95,218, - 9,101,120,116,101,110,115,105,111,110,218,11,115,111,117,114, - 99,101,95,112,97,116,104,115,5,0,0,0,32,32,32,32, - 32,114,10,0,0,0,218,15,95,103,101,116,95,115,111,117, - 114,99,101,102,105,108,101,114,177,0,0,0,80,2,0,0, - 115,142,0,0,0,128,0,244,14,0,8,11,136,61,211,7, - 25,152,81,210,7,30,216,15,19,216,25,38,215,25,49,209, - 25,49,176,35,211,25,54,209,4,22,128,68,136,33,136,89, - 217,11,15,144,57,151,63,145,63,211,19,36,160,82,168,2, - 208,19,43,168,116,210,19,51,216,15,28,208,8,28,240,2, - 3,5,41,220,22,39,168,13,211,22,54,136,11,244,6,0, - 27,39,160,123,212,26,51,136,59,208,4,70,184,29,208,4, - 70,248,244,5,0,13,32,164,26,208,11,44,242,0,1,5, - 41,216,22,35,160,67,160,82,208,22,40,138,11,240,3,1, - 5,41,250,115,18,0,0,0,193,0,11,65,26,0,193,26, - 20,65,49,3,193,48,1,65,49,3,99,1,0,0,0,0, - 0,0,0,0,0,0,0,5,0,0,0,3,0,0,0,243, - 182,0,0,0,151,0,124,0,106,1,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,116,3,0,0, - 0,0,0,0,0,0,116,4,0,0,0,0,0,0,0,0, - 171,1,0,0,0,0,0,0,171,1,0,0,0,0,0,0, - 114,12,9,0,116,7,0,0,0,0,0,0,0,0,124,0, - 171,1,0,0,0,0,0,0,83,0,124,0,106,1,0,0, + 124,6,114,2,124,6,110,1,124,8,124,7,124,9,103,3, + 171,1,0,0,0,0,0,0,125,10,124,2,128,58,116,16, + 0,0,0,0,0,0,0,0,106,26,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,106,28,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 116,3,0,0,0,0,0,0,0,0,116,10,0,0,0,0, - 0,0,0,0,171,1,0,0,0,0,0,0,171,1,0,0, - 0,0,0,0,114,2,124,0,83,0,121,0,35,0,116,8, - 0,0,0,0,0,0,0,0,36,0,114,3,1,0,89,0, - 121,0,119,0,120,3,89,0,119,1,114,77,0,0,0,41, - 6,114,59,0,0,0,218,5,116,117,112,108,101,114,159,0, - 0,0,114,152,0,0,0,114,134,0,0,0,114,140,0,0, - 0,41,1,114,151,0,0,0,115,1,0,0,0,32,114,10, - 0,0,0,218,11,95,103,101,116,95,99,97,99,104,101,100, - 114,180,0,0,0,99,2,0,0,115,87,0,0,0,128,0, - 216,7,15,215,7,24,209,7,24,156,21,156,127,211,25,47, - 212,7,48,240,2,3,9,17,220,19,36,160,88,211,19,46, - 208,12,46,240,6,0,10,18,215,9,26,209,9,26,156,53, - 212,33,50,211,27,51,212,9,52,216,15,23,136,15,224,15, - 19,248,244,11,0,16,35,242,0,1,9,17,217,12,16,240, - 3,1,9,17,250,115,17,0,0,0,160,10,65,12,0,193, - 12,9,65,24,3,193,23,1,65,24,3,99,1,0,0,0, - 0,0,0,0,0,0,0,0,4,0,0,0,3,0,0,0, - 243,94,0,0,0,151,0,9,0,116,1,0,0,0,0,0, - 0,0,0,124,0,171,1,0,0,0,0,0,0,106,2,0, + 100,8,107,40,0,0,114,3,100,4,125,2,110,26,116,16, + 0,0,0,0,0,0,0,0,106,26,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,106,28,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,125,1,124,1,100,2,122,20,0,0,125,1,124,1,83, - 0,35,0,116,4,0,0,0,0,0,0,0,0,36,0,114, - 5,1,0,100,1,125,1,89,0,140,20,119,0,120,3,89, - 0,119,1,41,3,122,51,67,97,108,99,117,108,97,116,101, - 32,116,104,101,32,109,111,100,101,32,112,101,114,109,105,115, - 115,105,111,110,115,32,102,111,114,32,97,32,98,121,116,101, - 99,111,100,101,32,102,105,108,101,46,114,107,0,0,0,233, - 128,0,0,0,41,3,114,85,0,0,0,114,88,0,0,0, - 114,87,0,0,0,41,2,114,68,0,0,0,114,89,0,0, - 0,115,2,0,0,0,32,32,114,10,0,0,0,218,10,95, - 99,97,108,99,95,109,111,100,101,114,183,0,0,0,111,2, - 0,0,115,61,0,0,0,128,0,240,4,3,5,21,220,15, - 25,152,36,211,15,31,215,15,39,209,15,39,136,4,240,10, - 0,5,9,136,69,129,77,128,68,216,11,15,128,75,248,244, - 11,0,12,19,242,0,1,5,21,216,15,20,138,4,240,3, - 1,5,21,250,115,12,0,0,0,130,21,30,0,158,11,44, - 3,171,1,44,3,99,1,0,0,0,0,0,0,0,0,0, - 0,0,4,0,0,0,3,0,0,0,243,90,0,0,0,135, - 0,151,0,100,3,136,0,102,1,100,1,132,9,125,1,116, - 0,0,0,0,0,0,0,0,0,129,17,116,0,0,0,0, - 0,0,0,0,0,106,2,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,125,2,110,3,100,2,132, - 0,125,2,2,0,124,2,124,1,137,0,171,2,0,0,0, - 0,0,0,1,0,124,1,83,0,41,4,122,252,68,101,99, - 111,114,97,116,111,114,32,116,111,32,118,101,114,105,102,121, - 32,116,104,97,116,32,116,104,101,32,109,111,100,117,108,101, - 32,98,101,105,110,103,32,114,101,113,117,101,115,116,101,100, - 32,109,97,116,99,104,101,115,32,116,104,101,32,111,110,101, - 32,116,104,101,10,32,32,32,32,108,111,97,100,101,114,32, - 99,97,110,32,104,97,110,100,108,101,46,10,10,32,32,32, - 32,84,104,101,32,102,105,114,115,116,32,97,114,103,117,109, - 101,110,116,32,40,115,101,108,102,41,32,109,117,115,116,32, - 100,101,102,105,110,101,32,95,110,97,109,101,32,119,104,105, - 99,104,32,116,104,101,32,115,101,99,111,110,100,32,97,114, - 103,117,109,101,110,116,32,105,115,10,32,32,32,32,99,111, - 109,112,97,114,101,100,32,97,103,97,105,110,115,116,46,32, - 73,102,32,116,104,101,32,99,111,109,112,97,114,105,115,111, - 110,32,102,97,105,108,115,32,116,104,101,110,32,73,109,112, - 111,114,116,69,114,114,111,114,32,105,115,32,114,97,105,115, - 101,100,46,10,10,32,32,32,32,99,2,0,0,0,0,0, - 0,0,0,0,0,0,6,0,0,0,31,0,0,0,243,148, - 0,0,0,149,1,151,0,124,1,128,13,124,0,106,0,0, + 125,2,116,31,0,0,0,0,0,0,0,0,124,2,171,1, + 0,0,0,0,0,0,125,2,124,2,100,4,107,55,0,0, + 114,43,124,2,106,33,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,171,0,0,0,0,0,0,0, + 115,14,116,35,0,0,0,0,0,0,0,0,124,2,155,2, + 100,9,157,2,171,1,0,0,0,0,0,0,130,1,124,10, + 155,0,100,6,116,36,0,0,0,0,0,0,0,0,155,0, + 124,2,155,0,157,4,125,10,124,10,116,38,0,0,0,0, + 0,0,0,0,100,8,25,0,0,0,122,0,0,0,125,11, + 116,16,0,0,0,0,0,0,0,0,106,40,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,129,81, + 116,43,0,0,0,0,0,0,0,0,124,4,171,1,0,0, + 0,0,0,0,125,4,124,4,100,5,25,0,0,0,100,10, + 107,40,0,0,114,16,124,4,100,8,25,0,0,0,116,44, + 0,0,0,0,0,0,0,0,118,1,114,5,124,4,100,11, + 100,1,26,0,125,4,116,47,0,0,0,0,0,0,0,0, + 116,16,0,0,0,0,0,0,0,0,106,40,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,124,4, + 106,49,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,116,44,0,0,0,0,0,0,0,0,171,1, + 0,0,0,0,0,0,124,11,171,3,0,0,0,0,0,0, + 83,0,116,47,0,0,0,0,0,0,0,0,124,4,116,50, + 0,0,0,0,0,0,0,0,124,11,171,3,0,0,0,0, + 0,0,83,0,41,12,97,254,2,0,0,71,105,118,101,110, + 32,116,104,101,32,112,97,116,104,32,116,111,32,97,32,46, + 112,121,32,102,105,108,101,44,32,114,101,116,117,114,110,32, + 116,104,101,32,112,97,116,104,32,116,111,32,105,116,115,32, + 46,112,121,99,32,102,105,108,101,46,10,10,32,32,32,32, + 84,104,101,32,46,112,121,32,102,105,108,101,32,100,111,101, + 115,32,110,111,116,32,110,101,101,100,32,116,111,32,101,120, + 105,115,116,59,32,116,104,105,115,32,115,105,109,112,108,121, + 32,114,101,116,117,114,110,115,32,116,104,101,32,112,97,116, + 104,32,116,111,32,116,104,101,10,32,32,32,32,46,112,121, + 99,32,102,105,108,101,32,99,97,108,99,117,108,97,116,101, + 100,32,97,115,32,105,102,32,116,104,101,32,46,112,121,32, + 102,105,108,101,32,119,101,114,101,32,105,109,112,111,114,116, + 101,100,46,10,10,32,32,32,32,84,104,101,32,39,111,112, + 116,105,109,105,122,97,116,105,111,110,39,32,112,97,114,97, + 109,101,116,101,114,32,99,111,110,116,114,111,108,115,32,116, + 104,101,32,112,114,101,115,117,109,101,100,32,111,112,116,105, + 109,105,122,97,116,105,111,110,32,108,101,118,101,108,32,111, + 102,10,32,32,32,32,116,104,101,32,98,121,116,101,99,111, + 100,101,32,102,105,108,101,46,32,73,102,32,39,111,112,116, + 105,109,105,122,97,116,105,111,110,39,32,105,115,32,110,111, + 116,32,78,111,110,101,44,32,116,104,101,32,115,116,114,105, + 110,103,32,114,101,112,114,101,115,101,110,116,97,116,105,111, + 110,10,32,32,32,32,111,102,32,116,104,101,32,97,114,103, + 117,109,101,110,116,32,105,115,32,116,97,107,101,110,32,97, + 110,100,32,118,101,114,105,102,105,101,100,32,116,111,32,98, + 101,32,97,108,112,104,97,110,117,109,101,114,105,99,32,40, + 101,108,115,101,32,86,97,108,117,101,69,114,114,111,114,10, + 32,32,32,32,105,115,32,114,97,105,115,101,100,41,46,10, + 10,32,32,32,32,84,104,101,32,100,101,98,117,103,95,111, + 118,101,114,114,105,100,101,32,112,97,114,97,109,101,116,101, + 114,32,105,115,32,100,101,112,114,101,99,97,116,101,100,46, + 32,73,102,32,100,101,98,117,103,95,111,118,101,114,114,105, + 100,101,32,105,115,32,110,111,116,32,78,111,110,101,44,10, + 32,32,32,32,97,32,84,114,117,101,32,118,97,108,117,101, + 32,105,115,32,116,104,101,32,115,97,109,101,32,97,115,32, + 115,101,116,116,105,110,103,32,39,111,112,116,105,109,105,122, + 97,116,105,111,110,39,32,116,111,32,116,104,101,32,101,109, + 112,116,121,32,115,116,114,105,110,103,10,32,32,32,32,119, + 104,105,108,101,32,97,32,70,97,108,115,101,32,118,97,108, + 117,101,32,105,115,32,101,113,117,105,118,97,108,101,110,116, + 32,116,111,32,115,101,116,116,105,110,103,32,39,111,112,116, + 105,109,105,122,97,116,105,111,110,39,32,116,111,32,39,49, + 39,46,10,10,32,32,32,32,73,102,32,115,121,115,46,105, + 109,112,108,101,109,101,110,116,97,116,105,111,110,46,99,97, + 99,104,101,95,116,97,103,32,105,115,32,78,111,110,101,32, + 116,104,101,110,32,78,111,116,73,109,112,108,101,109,101,110, + 116,101,100,69,114,114,111,114,32,105,115,32,114,97,105,115, + 101,100,46,10,10,32,32,32,32,78,122,70,116,104,101,32, + 100,101,98,117,103,95,111,118,101,114,114,105,100,101,32,112, + 97,114,97,109,101,116,101,114,32,105,115,32,100,101,112,114, + 101,99,97,116,101,100,59,32,117,115,101,32,39,111,112,116, + 105,109,105,122,97,116,105,111,110,39,32,105,110,115,116,101, + 97,100,122,50,100,101,98,117,103,95,111,118,101,114,114,105, + 100,101,32,111,114,32,111,112,116,105,109,105,122,97,116,105, + 111,110,32,109,117,115,116,32,98,101,32,115,101,116,32,116, + 111,32,78,111,110,101,114,12,0,0,0,114,6,0,0,0, + 114,103,0,0,0,250,36,115,121,115,46,105,109,112,108,101, + 109,101,110,116,97,116,105,111,110,46,99,97,99,104,101,95, + 116,97,103,32,105,115,32,78,111,110,101,114,1,0,0,0, + 122,20,32,105,115,32,110,111,116,32,97,108,112,104,97,110, + 117,109,101,114,105,99,114,13,0,0,0,114,52,0,0,0, + 41,26,218,9,95,119,97,114,110,105,110,103,115,218,4,119, + 97,114,110,218,18,68,101,112,114,101,99,97,116,105,111,110, + 87,97,114,110,105,110,103,218,9,84,121,112,101,69,114,114, + 111,114,114,23,0,0,0,218,6,102,115,112,97,116,104,114, + 81,0,0,0,218,10,114,112,97,114,116,105,116,105,111,110, + 114,20,0,0,0,218,14,105,109,112,108,101,109,101,110,116, + 97,116,105,111,110,218,9,99,97,99,104,101,95,116,97,103, + 218,19,78,111,116,73,109,112,108,101,109,101,110,116,101,100, + 69,114,114,111,114,114,65,0,0,0,114,21,0,0,0,218, + 8,111,112,116,105,109,105,122,101,218,3,115,116,114,218,7, + 105,115,97,108,110,117,109,218,10,86,97,108,117,101,69,114, + 114,111,114,218,4,95,79,80,84,218,17,66,89,84,69,67, + 79,68,69,95,83,85,70,70,73,88,69,83,218,14,112,121, + 99,97,99,104,101,95,112,114,101,102,105,120,114,105,0,0, + 0,114,61,0,0,0,114,72,0,0,0,218,6,108,115,116, + 114,105,112,218,8,95,80,89,67,65,67,72,69,41,12,114, + 68,0,0,0,218,14,100,101,98,117,103,95,111,118,101,114, + 114,105,100,101,114,123,0,0,0,218,7,109,101,115,115,97, + 103,101,218,4,104,101,97,100,114,70,0,0,0,218,4,98, + 97,115,101,114,9,0,0,0,218,4,114,101,115,116,218,3, + 116,97,103,218,15,97,108,109,111,115,116,95,102,105,108,101, + 110,97,109,101,218,8,102,105,108,101,110,97,109,101,115,12, + 0,0,0,32,32,32,32,32,32,32,32,32,32,32,32,114, + 10,0,0,0,218,17,99,97,99,104,101,95,102,114,111,109, + 95,115,111,117,114,99,101,114,152,0,0,0,226,1,0,0, + 115,159,1,0,0,128,0,240,36,0,8,22,208,7,33,220, + 8,17,143,14,137,14,240,0,1,24,48,220,49,67,244,3, + 1,9,69,1,224,11,23,208,11,35,216,22,74,136,71,220, + 18,27,152,71,211,18,36,208,12,36,217,29,43,145,114,176, + 17,136,12,220,11,14,143,58,137,58,144,100,211,11,27,128, + 68,220,17,28,152,84,211,17,34,129,74,128,68,136,36,216, + 22,26,151,111,145,111,160,99,211,22,42,129,79,128,68,136, + 35,136,116,220,10,13,215,10,28,209,10,28,215,10,38,209, + 10,38,128,67,216,7,10,128,123,220,14,33,208,34,72,211, + 14,73,208,8,73,216,22,24,151,103,145,103,169,4,161,4, + 176,36,184,19,184,99,208,30,66,211,22,67,128,79,216,7, + 19,208,7,27,220,11,14,143,57,137,57,215,11,29,209,11, + 29,160,17,210,11,34,216,27,29,137,76,228,27,30,159,57, + 153,57,215,27,45,209,27,45,136,76,220,19,22,144,124,211, + 19,36,128,76,216,7,19,144,114,210,7,25,216,15,27,215, + 15,35,209,15,35,212,15,37,220,18,28,160,12,208,31,47, + 208,47,67,208,29,68,211,18,69,208,12,69,216,29,44,208, + 28,45,168,81,172,116,168,102,176,92,176,78,208,26,67,136, + 15,216,15,30,212,33,50,176,49,209,33,53,209,15,53,128, + 72,220,7,10,215,7,25,209,7,25,208,7,37,244,18,0, + 16,29,152,84,211,15,34,136,4,240,10,0,12,16,144,1, + 137,55,144,99,138,62,152,100,160,49,153,103,172,95,209,30, + 60,216,19,23,152,1,152,2,144,56,136,68,244,8,0,16, + 26,220,12,15,215,12,30,209,12,30,216,12,16,143,75,137, + 75,156,15,211,12,40,216,12,20,243,7,4,16,10,240,0, + 4,9,10,244,10,0,12,22,144,100,156,72,160,104,211,11, + 47,208,4,47,114,28,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,36, + 3,0,0,151,0,116,0,0,0,0,0,0,0,0,0,106, + 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,106,4,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,128,11,116,7,0,0,0,0,0, + 0,0,0,100,2,171,1,0,0,0,0,0,0,130,1,116, + 9,0,0,0,0,0,0,0,0,106,10,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,124,0,171, + 1,0,0,0,0,0,0,125,0,116,13,0,0,0,0,0, + 0,0,0,124,0,171,1,0,0,0,0,0,0,92,2,0, + 0,125,1,125,2,100,3,125,3,116,0,0,0,0,0,0, + 0,0,0,106,14,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,129,75,116,0,0,0,0,0,0, + 0,0,0,106,14,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,106,17,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,116,18,0,0,0, + 0,0,0,0,0,171,1,0,0,0,0,0,0,125,4,124, + 1,106,21,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,124,4,116,22,0,0,0,0,0,0,0, + 0,122,0,0,0,171,1,0,0,0,0,0,0,114,16,124, + 1,116,25,0,0,0,0,0,0,0,0,124,4,171,1,0, + 0,0,0,0,0,100,1,26,0,125,1,100,4,125,3,124, + 3,115,43,116,13,0,0,0,0,0,0,0,0,124,1,171, + 1,0,0,0,0,0,0,92,2,0,0,125,1,125,5,124, + 5,116,26,0,0,0,0,0,0,0,0,107,55,0,0,114, + 20,116,29,0,0,0,0,0,0,0,0,116,26,0,0,0, + 0,0,0,0,0,155,0,100,5,124,0,155,2,157,3,171, + 1,0,0,0,0,0,0,130,1,124,2,106,31,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,100, + 6,171,1,0,0,0,0,0,0,125,6,124,6,100,7,118, + 1,114,14,116,29,0,0,0,0,0,0,0,0,100,8,124, + 2,155,2,157,2,171,1,0,0,0,0,0,0,130,1,124, + 6,100,9,107,40,0,0,114,109,124,2,106,33,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,100, + 6,100,10,171,2,0,0,0,0,0,0,100,11,25,0,0, + 0,125,7,124,7,106,21,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,116,34,0,0,0,0,0, + 0,0,0,171,1,0,0,0,0,0,0,115,18,116,29,0, + 0,0,0,0,0,0,0,100,12,116,34,0,0,0,0,0, + 0,0,0,155,2,157,2,171,1,0,0,0,0,0,0,130, + 1,124,7,116,25,0,0,0,0,0,0,0,0,116,34,0, + 0,0,0,0,0,0,0,171,1,0,0,0,0,0,0,100, + 1,26,0,125,8,124,8,106,37,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,171,0,0,0,0, + 0,0,0,115,15,116,29,0,0,0,0,0,0,0,0,100, + 13,124,7,155,2,100,14,157,3,171,1,0,0,0,0,0, + 0,130,1,124,2,106,39,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,100,6,171,1,0,0,0, + 0,0,0,100,15,25,0,0,0,125,9,116,41,0,0,0, + 0,0,0,0,0,124,1,124,9,116,42,0,0,0,0,0, + 0,0,0,100,15,25,0,0,0,122,0,0,0,171,2,0, + 0,0,0,0,0,83,0,41,16,97,110,1,0,0,71,105, + 118,101,110,32,116,104,101,32,112,97,116,104,32,116,111,32, + 97,32,46,112,121,99,46,32,102,105,108,101,44,32,114,101, + 116,117,114,110,32,116,104,101,32,112,97,116,104,32,116,111, + 32,105,116,115,32,46,112,121,32,102,105,108,101,46,10,10, + 32,32,32,32,84,104,101,32,46,112,121,99,32,102,105,108, + 101,32,100,111,101,115,32,110,111,116,32,110,101,101,100,32, + 116,111,32,101,120,105,115,116,59,32,116,104,105,115,32,115, + 105,109,112,108,121,32,114,101,116,117,114,110,115,32,116,104, + 101,32,112,97,116,104,32,116,111,10,32,32,32,32,116,104, + 101,32,46,112,121,32,102,105,108,101,32,99,97,108,99,117, + 108,97,116,101,100,32,116,111,32,99,111,114,114,101,115,112, + 111,110,100,32,116,111,32,116,104,101,32,46,112,121,99,32, + 102,105,108,101,46,32,32,73,102,32,112,97,116,104,32,100, + 111,101,115,10,32,32,32,32,110,111,116,32,99,111,110,102, + 111,114,109,32,116,111,32,80,69,80,32,51,49,52,55,47, + 52,56,56,32,102,111,114,109,97,116,44,32,86,97,108,117, + 101,69,114,114,111,114,32,119,105,108,108,32,98,101,32,114, + 97,105,115,101,100,46,32,73,102,10,32,32,32,32,115,121, + 115,46,105,109,112,108,101,109,101,110,116,97,116,105,111,110, + 46,99,97,99,104,101,95,116,97,103,32,105,115,32,78,111, + 110,101,32,116,104,101,110,32,78,111,116,73,109,112,108,101, + 109,101,110,116,101,100,69,114,114,111,114,32,105,115,32,114, + 97,105,115,101,100,46,10,10,32,32,32,32,78,114,125,0, + 0,0,70,84,122,31,32,110,111,116,32,98,111,116,116,111, + 109,45,108,101,118,101,108,32,100,105,114,101,99,116,111,114, + 121,32,105,110,32,114,103,0,0,0,62,2,0,0,0,114, + 52,0,0,0,233,3,0,0,0,122,29,101,120,112,101,99, + 116,101,100,32,111,110,108,121,32,50,32,111,114,32,51,32, + 100,111,116,115,32,105,110,32,114,154,0,0,0,114,52,0, + 0,0,233,254,255,255,255,122,53,111,112,116,105,109,105,122, + 97,116,105,111,110,32,112,111,114,116,105,111,110,32,111,102, + 32,102,105,108,101,110,97,109,101,32,100,111,101,115,32,110, + 111,116,32,115,116,97,114,116,32,119,105,116,104,32,122,19, + 111,112,116,105,109,105,122,97,116,105,111,110,32,108,101,118, + 101,108,32,122,29,32,105,115,32,110,111,116,32,97,110,32, + 97,108,112,104,97,110,117,109,101,114,105,99,32,118,97,108, + 117,101,114,1,0,0,0,41,22,114,20,0,0,0,114,132, + 0,0,0,114,133,0,0,0,114,134,0,0,0,114,23,0, + 0,0,114,130,0,0,0,114,81,0,0,0,114,141,0,0, + 0,114,60,0,0,0,114,61,0,0,0,114,32,0,0,0, + 114,62,0,0,0,114,7,0,0,0,114,143,0,0,0,114, + 138,0,0,0,218,5,99,111,117,110,116,218,6,114,115,112, + 108,105,116,114,139,0,0,0,114,137,0,0,0,218,9,112, + 97,114,116,105,116,105,111,110,114,72,0,0,0,218,15,83, + 79,85,82,67,69,95,83,85,70,70,73,88,69,83,41,10, + 114,68,0,0,0,114,146,0,0,0,218,16,112,121,99,97, + 99,104,101,95,102,105,108,101,110,97,109,101,218,23,102,111, + 117,110,100,95,105,110,95,112,121,99,97,99,104,101,95,112, + 114,101,102,105,120,218,13,115,116,114,105,112,112,101,100,95, + 112,97,116,104,218,7,112,121,99,97,99,104,101,218,9,100, + 111,116,95,99,111,117,110,116,114,123,0,0,0,218,9,111, + 112,116,95,108,101,118,101,108,218,13,98,97,115,101,95,102, + 105,108,101,110,97,109,101,115,10,0,0,0,32,32,32,32, + 32,32,32,32,32,32,114,10,0,0,0,218,17,115,111,117, + 114,99,101,95,102,114,111,109,95,99,97,99,104,101,114,167, + 0,0,0,40,2,0,0,115,165,1,0,0,128,0,244,18, + 0,8,11,215,7,25,209,7,25,215,7,35,209,7,35,208, + 7,43,220,14,33,208,34,72,211,14,73,208,8,73,220,11, + 14,143,58,137,58,144,100,211,11,27,128,68,220,29,40,168, + 20,211,29,46,209,4,26,128,68,208,10,26,216,30,35,208, + 4,27,220,7,10,215,7,25,209,7,25,208,7,37,220,24, + 27,215,24,42,209,24,42,215,24,49,209,24,49,180,47,211, + 24,66,136,13,216,11,15,143,63,137,63,152,61,172,56,209, + 27,51,212,11,52,216,19,23,156,3,152,77,211,24,42,208, + 24,43,208,19,44,136,68,216,38,42,208,12,35,217,11,34, + 220,24,35,160,68,211,24,41,137,13,136,4,136,103,216,11, + 18,148,104,210,11,30,220,18,28,164,8,152,122,208,41,72, + 216,32,36,152,120,240,3,1,30,41,243,0,1,19,42,240, + 0,1,13,42,224,16,32,215,16,38,209,16,38,160,115,211, + 16,43,128,73,216,7,16,152,6,209,7,30,220,14,24,208, + 27,56,208,57,73,208,56,76,208,25,77,211,14,78,208,8, + 78,216,9,18,144,97,138,30,216,23,39,215,23,46,209,23, + 46,168,115,176,65,211,23,54,176,114,209,23,58,136,12,216, + 15,27,215,15,38,209,15,38,164,116,212,15,44,220,18,28, + 240,0,1,30,37,220,37,41,160,72,240,3,1,30,46,243, + 0,1,19,47,240,0,1,13,47,224,20,32,164,19,164,84, + 163,25,160,26,208,20,44,136,9,216,15,24,215,15,32,209, + 15,32,212,15,34,220,18,28,208,31,50,176,60,208,50,66, + 240,0,1,67,1,50,240,0,1,30,50,243,0,1,19,51, + 240,0,1,13,51,224,20,36,215,20,46,209,20,46,168,115, + 211,20,51,176,65,209,20,54,128,77,220,11,21,144,100,152, + 77,172,79,184,65,209,44,62,209,28,62,211,11,63,208,4, + 63,114,28,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,232,0,0,0, + 151,0,116,1,0,0,0,0,0,0,0,0,124,0,171,1, + 0,0,0,0,0,0,100,1,107,40,0,0,114,1,121,2, + 124,0,106,3,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,100,3,171,1,0,0,0,0,0,0, + 92,3,0,0,125,1,125,2,125,3,124,1,114,22,124,3, + 106,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,171,0,0,0,0,0,0,0,100,4,100,5, + 26,0,100,6,107,55,0,0,114,2,124,0,83,0,9,0, + 116,7,0,0,0,0,0,0,0,0,124,0,171,1,0,0, + 0,0,0,0,125,4,116,13,0,0,0,0,0,0,0,0, + 124,4,171,1,0,0,0,0,0,0,114,2,124,4,83,0, + 124,0,83,0,35,0,116,8,0,0,0,0,0,0,0,0, + 116,10,0,0,0,0,0,0,0,0,102,2,36,0,114,8, + 1,0,124,0,100,2,100,5,26,0,125,4,89,0,140,37, + 119,0,120,3,89,0,119,1,41,7,122,188,67,111,110,118, + 101,114,116,32,97,32,98,121,116,101,99,111,100,101,32,102, + 105,108,101,32,112,97,116,104,32,116,111,32,97,32,115,111, + 117,114,99,101,32,112,97,116,104,32,40,105,102,32,112,111, + 115,115,105,98,108,101,41,46,10,10,32,32,32,32,84,104, + 105,115,32,102,117,110,99,116,105,111,110,32,101,120,105,115, + 116,115,32,112,117,114,101,108,121,32,102,111,114,32,98,97, + 99,107,119,97,114,100,115,45,99,111,109,112,97,116,105,98, + 105,108,105,116,121,32,102,111,114,10,32,32,32,32,80,121, + 73,109,112,111,114,116,95,69,120,101,99,67,111,100,101,77, + 111,100,117,108,101,87,105,116,104,70,105,108,101,110,97,109, + 101,115,40,41,32,105,110,32,116,104,101,32,67,32,65,80, + 73,46,10,10,32,32,32,32,114,1,0,0,0,78,114,103, + 0,0,0,233,253,255,255,255,233,255,255,255,255,218,2,112, + 121,41,7,114,7,0,0,0,114,131,0,0,0,218,5,108, + 111,119,101,114,114,167,0,0,0,114,134,0,0,0,114,138, + 0,0,0,114,93,0,0,0,41,5,218,13,98,121,116,101, + 99,111,100,101,95,112,97,116,104,114,148,0,0,0,218,1, + 95,218,9,101,120,116,101,110,115,105,111,110,218,11,115,111, + 117,114,99,101,95,112,97,116,104,115,5,0,0,0,32,32, + 32,32,32,114,10,0,0,0,218,15,95,103,101,116,95,115, + 111,117,114,99,101,102,105,108,101,114,177,0,0,0,80,2, + 0,0,115,142,0,0,0,128,0,244,14,0,8,11,136,61, + 211,7,25,152,81,210,7,30,216,15,19,216,25,38,215,25, + 49,209,25,49,176,35,211,25,54,209,4,22,128,68,136,33, + 136,89,217,11,15,144,57,151,63,145,63,211,19,36,160,82, + 168,2,208,19,43,168,116,210,19,51,216,15,28,208,8,28, + 240,2,3,5,41,220,22,39,168,13,211,22,54,136,11,244, + 6,0,27,39,160,123,212,26,51,136,59,208,4,70,184,29, + 208,4,70,248,244,5,0,13,32,164,26,208,11,44,242,0, + 1,5,41,216,22,35,160,67,160,82,208,22,40,138,11,240, + 3,1,5,41,250,115,18,0,0,0,193,0,11,65,26,0, + 193,26,20,65,49,3,193,48,1,65,49,3,99,1,0,0, + 0,0,0,0,0,0,0,0,0,5,0,0,0,3,0,0, + 0,243,182,0,0,0,151,0,124,0,106,1,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,116,3, + 0,0,0,0,0,0,0,0,116,4,0,0,0,0,0,0, + 0,0,171,1,0,0,0,0,0,0,171,1,0,0,0,0, + 0,0,114,12,9,0,116,7,0,0,0,0,0,0,0,0, + 124,0,171,1,0,0,0,0,0,0,83,0,124,0,106,1, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,125,1,110,44,124,0,106,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,124,1,107,55,0, - 0,114,29,116,3,0,0,0,0,0,0,0,0,100,1,124, - 0,106,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,155,1,100,2,124,1,155,1,157,4,124, - 1,172,3,171,2,0,0,0,0,0,0,130,1,2,0,137, - 4,124,0,124,1,103,2,124,2,162,1,173,6,105,0,124, - 3,164,1,142,1,83,0,41,4,78,122,11,108,111,97,100, - 101,114,32,102,111,114,32,122,15,32,99,97,110,110,111,116, - 32,104,97,110,100,108,101,32,169,1,218,4,110,97,109,101, - 41,2,114,187,0,0,0,218,11,73,109,112,111,114,116,69, - 114,114,111,114,41,5,218,4,115,101,108,102,114,187,0,0, - 0,218,4,97,114,103,115,218,6,107,119,97,114,103,115,218, - 6,109,101,116,104,111,100,115,5,0,0,0,32,32,32,32, - 128,114,10,0,0,0,218,19,95,99,104,101,99,107,95,110, - 97,109,101,95,119,114,97,112,112,101,114,122,40,95,99,104, - 101,99,107,95,110,97,109,101,46,60,108,111,99,97,108,115, - 62,46,95,99,104,101,99,107,95,110,97,109,101,95,119,114, - 97,112,112,101,114,131,2,0,0,115,82,0,0,0,248,128, - 0,216,11,15,136,60,216,19,23,151,57,145,57,137,68,216, - 13,17,143,89,137,89,152,36,210,13,30,221,18,29,216,33, - 37,167,25,163,25,169,68,240,3,1,31,50,216,56,60,244, - 3,1,19,62,240,0,1,13,62,225,15,21,144,100,152,68, - 208,15,50,160,52,210,15,50,168,54,209,15,50,208,8,50, - 114,28,0,0,0,99,2,0,0,0,0,0,0,0,0,0, - 0,0,9,0,0,0,19,0,0,0,243,164,0,0,0,151, - 0,100,1,68,0,93,38,0,0,125,2,116,1,0,0,0, - 0,0,0,0,0,124,1,124,2,171,2,0,0,0,0,0, - 0,115,1,140,16,116,3,0,0,0,0,0,0,0,0,124, - 0,124,2,116,5,0,0,0,0,0,0,0,0,124,1,124, - 2,171,2,0,0,0,0,0,0,171,3,0,0,0,0,0, - 0,1,0,140,40,4,0,124,0,106,6,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,106,9,0, + 0,0,116,3,0,0,0,0,0,0,0,0,116,10,0,0, + 0,0,0,0,0,0,171,1,0,0,0,0,0,0,171,1, + 0,0,0,0,0,0,114,2,124,0,83,0,121,0,35,0, + 116,8,0,0,0,0,0,0,0,0,36,0,114,3,1,0, + 89,0,121,0,119,0,120,3,89,0,119,1,114,77,0,0, + 0,41,6,114,59,0,0,0,218,5,116,117,112,108,101,114, + 159,0,0,0,114,152,0,0,0,114,134,0,0,0,114,140, + 0,0,0,41,1,114,151,0,0,0,115,1,0,0,0,32, + 114,10,0,0,0,218,11,95,103,101,116,95,99,97,99,104, + 101,100,114,180,0,0,0,99,2,0,0,115,87,0,0,0, + 128,0,216,7,15,215,7,24,209,7,24,156,21,156,127,211, + 25,47,212,7,48,240,2,3,9,17,220,19,36,160,88,211, + 19,46,208,12,46,240,6,0,10,18,215,9,26,209,9,26, + 156,53,212,33,50,211,27,51,212,9,52,216,15,23,136,15, + 224,15,19,248,244,11,0,16,35,242,0,1,9,17,217,12, + 16,240,3,1,9,17,250,115,17,0,0,0,160,10,65,12, + 0,193,12,9,65,24,3,193,23,1,65,24,3,99,1,0, + 0,0,0,0,0,0,0,0,0,0,4,0,0,0,3,0, + 0,0,243,94,0,0,0,151,0,9,0,116,1,0,0,0, + 0,0,0,0,0,124,0,171,1,0,0,0,0,0,0,106, + 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,125,1,124,1,100,2,122,20,0,0,125,1,124, + 1,83,0,35,0,116,4,0,0,0,0,0,0,0,0,36, + 0,114,5,1,0,100,1,125,1,89,0,140,20,119,0,120, + 3,89,0,119,1,41,3,122,51,67,97,108,99,117,108,97, + 116,101,32,116,104,101,32,109,111,100,101,32,112,101,114,109, + 105,115,115,105,111,110,115,32,102,111,114,32,97,32,98,121, + 116,101,99,111,100,101,32,102,105,108,101,46,114,107,0,0, + 0,233,128,0,0,0,41,3,114,85,0,0,0,114,88,0, + 0,0,114,87,0,0,0,41,2,114,68,0,0,0,114,89, + 0,0,0,115,2,0,0,0,32,32,114,10,0,0,0,218, + 10,95,99,97,108,99,95,109,111,100,101,114,183,0,0,0, + 111,2,0,0,115,61,0,0,0,128,0,240,4,3,5,21, + 220,15,25,152,36,211,15,31,215,15,39,209,15,39,136,4, + 240,10,0,5,9,136,69,129,77,128,68,216,11,15,128,75, + 248,244,11,0,12,19,242,0,1,5,21,216,15,20,138,4, + 240,3,1,5,21,250,115,12,0,0,0,130,21,30,0,158, + 11,44,3,171,1,44,3,99,1,0,0,0,0,0,0,0, + 0,0,0,0,4,0,0,0,3,0,0,0,243,90,0,0, + 0,135,0,151,0,100,3,136,0,102,1,100,1,132,9,125, + 1,116,0,0,0,0,0,0,0,0,0,129,17,116,0,0, + 0,0,0,0,0,0,0,106,2,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,125,2,110,3,100, + 2,132,0,125,2,2,0,124,2,124,1,137,0,171,2,0, + 0,0,0,0,0,1,0,124,1,83,0,41,4,122,252,68, + 101,99,111,114,97,116,111,114,32,116,111,32,118,101,114,105, + 102,121,32,116,104,97,116,32,116,104,101,32,109,111,100,117, + 108,101,32,98,101,105,110,103,32,114,101,113,117,101,115,116, + 101,100,32,109,97,116,99,104,101,115,32,116,104,101,32,111, + 110,101,32,116,104,101,10,32,32,32,32,108,111,97,100,101, + 114,32,99,97,110,32,104,97,110,100,108,101,46,10,10,32, + 32,32,32,84,104,101,32,102,105,114,115,116,32,97,114,103, + 117,109,101,110,116,32,40,115,101,108,102,41,32,109,117,115, + 116,32,100,101,102,105,110,101,32,95,110,97,109,101,32,119, + 104,105,99,104,32,116,104,101,32,115,101,99,111,110,100,32, + 97,114,103,117,109,101,110,116,32,105,115,10,32,32,32,32, + 99,111,109,112,97,114,101,100,32,97,103,97,105,110,115,116, + 46,32,73,102,32,116,104,101,32,99,111,109,112,97,114,105, + 115,111,110,32,102,97,105,108,115,32,116,104,101,110,32,73, + 109,112,111,114,116,69,114,114,111,114,32,105,115,32,114,97, + 105,115,101,100,46,10,10,32,32,32,32,99,2,0,0,0, + 0,0,0,0,0,0,0,0,6,0,0,0,31,0,0,0, + 243,148,0,0,0,149,1,151,0,124,1,128,13,124,0,106, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,124,1,106,6,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,171,1,0,0,0,0,0,0,1, - 0,121,0,41,2,78,41,4,218,10,95,95,109,111,100,117, - 108,101,95,95,218,8,95,95,110,97,109,101,95,95,218,12, - 95,95,113,117,97,108,110,97,109,101,95,95,218,7,95,95, - 100,111,99,95,95,41,5,218,7,104,97,115,97,116,116,114, - 218,7,115,101,116,97,116,116,114,218,7,103,101,116,97,116, - 116,114,218,8,95,95,100,105,99,116,95,95,218,6,117,112, - 100,97,116,101,41,3,218,3,110,101,119,218,3,111,108,100, - 114,99,0,0,0,115,3,0,0,0,32,32,32,114,10,0, - 0,0,218,5,95,119,114,97,112,122,26,95,99,104,101,99, - 107,95,110,97,109,101,46,60,108,111,99,97,108,115,62,46, - 95,119,114,97,112,144,2,0,0,115,72,0,0,0,128,0, - 216,27,80,242,0,2,13,65,1,144,7,220,19,26,152,51, - 160,7,213,19,40,220,20,27,152,67,160,23,172,39,176,35, - 176,119,211,42,63,213,20,64,240,5,2,13,65,1,240,6, - 0,13,16,143,76,137,76,215,12,31,209,12,31,160,3,167, - 12,161,12,213,12,45,114,28,0,0,0,114,77,0,0,0, - 41,2,218,10,95,98,111,111,116,115,116,114,97,112,114,206, - 0,0,0,41,3,114,192,0,0,0,114,193,0,0,0,114, - 206,0,0,0,115,3,0,0,0,96,32,32,114,10,0,0, - 0,218,11,95,99,104,101,99,107,95,110,97,109,101,114,208, - 0,0,0,123,2,0,0,115,51,0,0,0,248,128,0,245, - 16,6,5,51,244,20,0,8,18,208,7,29,220,16,26,215, - 16,32,209,16,32,137,5,242,4,4,9,46,241,12,0,5, - 10,208,10,29,152,118,212,4,38,216,11,30,208,4,30,114, - 28,0,0,0,99,3,0,0,0,0,0,0,0,0,0,0, - 0,5,0,0,0,3,0,0,0,243,44,1,0,0,151,0, - 124,0,100,1,100,2,26,0,125,3,124,3,116,0,0,0, - 0,0,0,0,0,0,107,55,0,0,114,42,100,3,124,1, - 155,2,100,4,124,3,155,2,157,4,125,4,116,2,0,0, - 0,0,0,0,0,0,106,5,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,100,5,124,4,171,2, - 0,0,0,0,0,0,1,0,116,7,0,0,0,0,0,0, - 0,0,124,4,102,1,105,0,124,2,164,1,142,1,130,1, - 116,9,0,0,0,0,0,0,0,0,124,0,171,1,0,0, - 0,0,0,0,100,6,107,2,0,0,114,38,100,7,124,1, - 155,2,157,2,125,4,116,2,0,0,0,0,0,0,0,0, - 106,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,100,5,124,4,171,2,0,0,0,0,0,0, - 1,0,116,11,0,0,0,0,0,0,0,0,124,4,171,1, - 0,0,0,0,0,0,130,1,116,13,0,0,0,0,0,0, - 0,0,124,0,100,2,100,8,26,0,171,1,0,0,0,0, - 0,0,125,5,124,5,100,9,122,1,0,0,114,20,100,10, - 124,5,155,2,100,11,124,1,155,2,157,4,125,4,116,7, - 0,0,0,0,0,0,0,0,124,4,102,1,105,0,124,2, - 164,1,142,1,130,1,124,5,83,0,41,12,97,84,2,0, - 0,80,101,114,102,111,114,109,32,98,97,115,105,99,32,118, - 97,108,105,100,105,116,121,32,99,104,101,99,107,105,110,103, - 32,111,102,32,97,32,112,121,99,32,104,101,97,100,101,114, - 32,97,110,100,32,114,101,116,117,114,110,32,116,104,101,32, - 102,108,97,103,115,32,102,105,101,108,100,44,10,32,32,32, - 32,119,104,105,99,104,32,100,101,116,101,114,109,105,110,101, - 115,32,104,111,119,32,116,104,101,32,112,121,99,32,115,104, - 111,117,108,100,32,98,101,32,102,117,114,116,104,101,114,32, - 118,97,108,105,100,97,116,101,100,32,97,103,97,105,110,115, - 116,32,116,104,101,32,115,111,117,114,99,101,46,10,10,32, - 32,32,32,42,100,97,116,97,42,32,105,115,32,116,104,101, - 32,99,111,110,116,101,110,116,115,32,111,102,32,116,104,101, - 32,112,121,99,32,102,105,108,101,46,32,40,79,110,108,121, - 32,116,104,101,32,102,105,114,115,116,32,49,54,32,98,121, - 116,101,115,32,97,114,101,10,32,32,32,32,114,101,113,117, - 105,114,101,100,44,32,116,104,111,117,103,104,46,41,10,10, - 32,32,32,32,42,110,97,109,101,42,32,105,115,32,116,104, - 101,32,110,97,109,101,32,111,102,32,116,104,101,32,109,111, - 100,117,108,101,32,98,101,105,110,103,32,105,109,112,111,114, - 116,101,100,46,32,73,116,32,105,115,32,117,115,101,100,32, - 102,111,114,32,108,111,103,103,105,110,103,46,10,10,32,32, - 32,32,42,101,120,99,95,100,101,116,97,105,108,115,42,32, - 105,115,32,97,32,100,105,99,116,105,111,110,97,114,121,32, - 112,97,115,115,101,100,32,116,111,32,73,109,112,111,114,116, - 69,114,114,111,114,32,105,102,32,105,116,32,114,97,105,115, - 101,100,32,102,111,114,10,32,32,32,32,105,109,112,114,111, - 118,101,100,32,100,101,98,117,103,103,105,110,103,46,10,10, - 32,32,32,32,73,109,112,111,114,116,69,114,114,111,114,32, + 0,0,0,125,1,110,44,124,0,106,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,124,1,107, + 55,0,0,114,29,116,3,0,0,0,0,0,0,0,0,100, + 1,124,0,106,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,155,1,100,2,124,1,155,1,157, + 4,124,1,172,3,171,2,0,0,0,0,0,0,130,1,2, + 0,137,4,124,0,124,1,103,2,124,2,162,1,173,6,105, + 0,124,3,164,1,142,1,83,0,41,4,78,122,11,108,111, + 97,100,101,114,32,102,111,114,32,122,15,32,99,97,110,110, + 111,116,32,104,97,110,100,108,101,32,169,1,218,4,110,97, + 109,101,41,2,114,187,0,0,0,218,11,73,109,112,111,114, + 116,69,114,114,111,114,41,5,218,4,115,101,108,102,114,187, + 0,0,0,218,4,97,114,103,115,218,6,107,119,97,114,103, + 115,218,6,109,101,116,104,111,100,115,5,0,0,0,32,32, + 32,32,128,114,10,0,0,0,218,19,95,99,104,101,99,107, + 95,110,97,109,101,95,119,114,97,112,112,101,114,122,40,95, + 99,104,101,99,107,95,110,97,109,101,46,60,108,111,99,97, + 108,115,62,46,95,99,104,101,99,107,95,110,97,109,101,95, + 119,114,97,112,112,101,114,131,2,0,0,115,82,0,0,0, + 248,128,0,216,11,15,136,60,216,19,23,151,57,145,57,137, + 68,216,13,17,143,89,137,89,152,36,210,13,30,221,18,29, + 216,33,37,167,25,163,25,169,68,240,3,1,31,50,216,56, + 60,244,3,1,19,62,240,0,1,13,62,225,15,21,144,100, + 152,68,208,15,50,160,52,210,15,50,168,54,209,15,50,208, + 8,50,114,28,0,0,0,99,2,0,0,0,0,0,0,0, + 0,0,0,0,9,0,0,0,19,0,0,0,243,164,0,0, + 0,151,0,100,1,68,0,93,38,0,0,125,2,116,1,0, + 0,0,0,0,0,0,0,124,1,124,2,171,2,0,0,0, + 0,0,0,115,1,140,16,116,3,0,0,0,0,0,0,0, + 0,124,0,124,2,116,5,0,0,0,0,0,0,0,0,124, + 1,124,2,171,2,0,0,0,0,0,0,171,3,0,0,0, + 0,0,0,1,0,140,40,4,0,124,0,106,6,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,106, + 9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,124,1,106,6,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,171,1,0,0,0,0,0, + 0,1,0,121,0,41,2,78,41,4,218,10,95,95,109,111, + 100,117,108,101,95,95,218,8,95,95,110,97,109,101,95,95, + 218,12,95,95,113,117,97,108,110,97,109,101,95,95,218,7, + 95,95,100,111,99,95,95,41,5,218,7,104,97,115,97,116, + 116,114,218,7,115,101,116,97,116,116,114,218,7,103,101,116, + 97,116,116,114,218,8,95,95,100,105,99,116,95,95,218,6, + 117,112,100,97,116,101,41,3,218,3,110,101,119,218,3,111, + 108,100,114,99,0,0,0,115,3,0,0,0,32,32,32,114, + 10,0,0,0,218,5,95,119,114,97,112,122,26,95,99,104, + 101,99,107,95,110,97,109,101,46,60,108,111,99,97,108,115, + 62,46,95,119,114,97,112,144,2,0,0,115,72,0,0,0, + 128,0,216,27,80,242,0,2,13,65,1,144,7,220,19,26, + 152,51,160,7,213,19,40,220,20,27,152,67,160,23,172,39, + 176,35,176,119,211,42,63,213,20,64,240,5,2,13,65,1, + 240,6,0,13,16,143,76,137,76,215,12,31,209,12,31,160, + 3,167,12,161,12,213,12,45,114,28,0,0,0,114,77,0, + 0,0,41,2,218,10,95,98,111,111,116,115,116,114,97,112, + 114,206,0,0,0,41,3,114,192,0,0,0,114,193,0,0, + 0,114,206,0,0,0,115,3,0,0,0,96,32,32,114,10, + 0,0,0,218,11,95,99,104,101,99,107,95,110,97,109,101, + 114,208,0,0,0,123,2,0,0,115,51,0,0,0,248,128, + 0,245,16,6,5,51,244,20,0,8,18,208,7,29,220,16, + 26,215,16,32,209,16,32,137,5,242,4,4,9,46,241,12, + 0,5,10,208,10,29,152,118,212,4,38,216,11,30,208,4, + 30,114,28,0,0,0,99,3,0,0,0,0,0,0,0,0, + 0,0,0,5,0,0,0,3,0,0,0,243,44,1,0,0, + 151,0,124,0,100,1,100,2,26,0,125,3,124,3,116,0, + 0,0,0,0,0,0,0,0,107,55,0,0,114,42,100,3, + 124,1,155,2,100,4,124,3,155,2,157,4,125,4,116,2, + 0,0,0,0,0,0,0,0,106,5,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,100,5,124,4, + 171,2,0,0,0,0,0,0,1,0,116,7,0,0,0,0, + 0,0,0,0,124,4,102,1,105,0,124,2,164,1,142,1, + 130,1,116,9,0,0,0,0,0,0,0,0,124,0,171,1, + 0,0,0,0,0,0,100,6,107,2,0,0,114,38,100,7, + 124,1,155,2,157,2,125,4,116,2,0,0,0,0,0,0, + 0,0,106,5,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,100,5,124,4,171,2,0,0,0,0, + 0,0,1,0,116,11,0,0,0,0,0,0,0,0,124,4, + 171,1,0,0,0,0,0,0,130,1,116,13,0,0,0,0, + 0,0,0,0,124,0,100,2,100,8,26,0,171,1,0,0, + 0,0,0,0,125,5,124,5,100,9,122,1,0,0,114,20, + 100,10,124,5,155,2,100,11,124,1,155,2,157,4,125,4, + 116,7,0,0,0,0,0,0,0,0,124,4,102,1,105,0, + 124,2,164,1,142,1,130,1,124,5,83,0,41,12,97,84, + 2,0,0,80,101,114,102,111,114,109,32,98,97,115,105,99, + 32,118,97,108,105,100,105,116,121,32,99,104,101,99,107,105, + 110,103,32,111,102,32,97,32,112,121,99,32,104,101,97,100, + 101,114,32,97,110,100,32,114,101,116,117,114,110,32,116,104, + 101,32,102,108,97,103,115,32,102,105,101,108,100,44,10,32, + 32,32,32,119,104,105,99,104,32,100,101,116,101,114,109,105, + 110,101,115,32,104,111,119,32,116,104,101,32,112,121,99,32, + 115,104,111,117,108,100,32,98,101,32,102,117,114,116,104,101, + 114,32,118,97,108,105,100,97,116,101,100,32,97,103,97,105, + 110,115,116,32,116,104,101,32,115,111,117,114,99,101,46,10, + 10,32,32,32,32,42,100,97,116,97,42,32,105,115,32,116, + 104,101,32,99,111,110,116,101,110,116,115,32,111,102,32,116, + 104,101,32,112,121,99,32,102,105,108,101,46,32,40,79,110, + 108,121,32,116,104,101,32,102,105,114,115,116,32,49,54,32, + 98,121,116,101,115,32,97,114,101,10,32,32,32,32,114,101, + 113,117,105,114,101,100,44,32,116,104,111,117,103,104,46,41, + 10,10,32,32,32,32,42,110,97,109,101,42,32,105,115,32, + 116,104,101,32,110,97,109,101,32,111,102,32,116,104,101,32, + 109,111,100,117,108,101,32,98,101,105,110,103,32,105,109,112, + 111,114,116,101,100,46,32,73,116,32,105,115,32,117,115,101, + 100,32,102,111,114,32,108,111,103,103,105,110,103,46,10,10, + 32,32,32,32,42,101,120,99,95,100,101,116,97,105,108,115, + 42,32,105,115,32,97,32,100,105,99,116,105,111,110,97,114, + 121,32,112,97,115,115,101,100,32,116,111,32,73,109,112,111, + 114,116,69,114,114,111,114,32,105,102,32,105,116,32,114,97, + 105,115,101,100,32,102,111,114,10,32,32,32,32,105,109,112, + 114,111,118,101,100,32,100,101,98,117,103,103,105,110,103,46, + 10,10,32,32,32,32,73,109,112,111,114,116,69,114,114,111, + 114,32,105,115,32,114,97,105,115,101,100,32,119,104,101,110, + 32,116,104,101,32,109,97,103,105,99,32,110,117,109,98,101, + 114,32,105,115,32,105,110,99,111,114,114,101,99,116,32,111, + 114,32,119,104,101,110,32,116,104,101,32,102,108,97,103,115, + 10,32,32,32,32,102,105,101,108,100,32,105,115,32,105,110, + 118,97,108,105,100,46,32,69,79,70,69,114,114,111,114,32, 105,115,32,114,97,105,115,101,100,32,119,104,101,110,32,116, - 104,101,32,109,97,103,105,99,32,110,117,109,98,101,114,32, - 105,115,32,105,110,99,111,114,114,101,99,116,32,111,114,32, - 119,104,101,110,32,116,104,101,32,102,108,97,103,115,10,32, - 32,32,32,102,105,101,108,100,32,105,115,32,105,110,118,97, - 108,105,100,46,32,69,79,70,69,114,114,111,114,32,105,115, - 32,114,97,105,115,101,100,32,119,104,101,110,32,116,104,101, - 32,100,97,116,97,32,105,115,32,102,111,117,110,100,32,116, - 111,32,98,101,32,116,114,117,110,99,97,116,101,100,46,10, - 10,32,32,32,32,78,114,38,0,0,0,122,20,98,97,100, - 32,109,97,103,105,99,32,110,117,109,98,101,114,32,105,110, - 32,122,2,58,32,250,2,123,125,233,16,0,0,0,122,40, - 114,101,97,99,104,101,100,32,69,79,70,32,119,104,105,108, - 101,32,114,101,97,100,105,110,103,32,112,121,99,32,104,101, - 97,100,101,114,32,111,102,32,233,8,0,0,0,233,252,255, - 255,255,122,14,105,110,118,97,108,105,100,32,102,108,97,103, - 115,32,122,4,32,105,110,32,41,7,218,12,77,65,71,73, - 67,95,78,85,77,66,69,82,114,207,0,0,0,218,16,95, - 118,101,114,98,111,115,101,95,109,101,115,115,97,103,101,114, - 188,0,0,0,114,7,0,0,0,218,8,69,79,70,69,114, - 114,111,114,114,49,0,0,0,41,6,114,48,0,0,0,114, - 187,0,0,0,218,11,101,120,99,95,100,101,116,97,105,108, - 115,218,5,109,97,103,105,99,114,145,0,0,0,114,21,0, - 0,0,115,6,0,0,0,32,32,32,32,32,32,114,10,0, - 0,0,218,13,95,99,108,97,115,115,105,102,121,95,112,121, - 99,114,219,0,0,0,154,2,0,0,115,185,0,0,0,128, - 0,240,32,0,13,17,144,18,144,33,136,72,128,69,216,7, - 12,148,12,210,7,28,216,20,40,168,20,168,8,176,2,176, - 53,176,41,208,18,60,136,7,220,8,18,215,8,35,209,8, - 35,160,68,168,39,212,8,50,220,14,25,152,39,209,14,49, - 160,91,209,14,49,208,8,49,220,7,10,136,52,131,121,144, - 50,130,126,216,20,60,184,84,184,72,208,18,69,136,7,220, - 8,18,215,8,35,209,8,35,160,68,168,39,212,8,50,220, - 14,22,144,119,211,14,31,208,8,31,220,12,26,152,52,160, - 1,160,33,152,57,211,12,37,128,69,224,7,12,136,117,130, - 125,216,20,34,160,53,160,41,168,52,176,4,168,120,208,18, - 56,136,7,220,14,25,152,39,209,14,49,160,91,209,14,49, - 208,8,49,216,11,16,128,76,114,28,0,0,0,99,5,0, - 0,0,0,0,0,0,0,0,0,0,5,0,0,0,3,0, - 0,0,243,198,0,0,0,151,0,116,1,0,0,0,0,0, - 0,0,0,124,0,100,1,100,2,26,0,171,1,0,0,0, - 0,0,0,124,1,100,3,122,1,0,0,107,55,0,0,114, - 39,100,4,124,3,155,2,157,2,125,5,116,2,0,0,0, - 0,0,0,0,0,106,5,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,100,5,124,5,171,2,0, - 0,0,0,0,0,1,0,116,7,0,0,0,0,0,0,0, - 0,124,5,102,1,105,0,124,4,164,1,142,1,130,1,124, - 2,129,36,116,1,0,0,0,0,0,0,0,0,124,0,100, - 2,100,7,26,0,171,1,0,0,0,0,0,0,124,2,100, - 3,122,1,0,0,107,55,0,0,114,15,116,7,0,0,0, - 0,0,0,0,0,100,4,124,3,155,2,157,2,102,1,105, - 0,124,4,164,1,142,1,130,1,121,6,121,6,41,8,97, - 7,2,0,0,86,97,108,105,100,97,116,101,32,97,32,112, - 121,99,32,97,103,97,105,110,115,116,32,116,104,101,32,115, - 111,117,114,99,101,32,108,97,115,116,45,109,111,100,105,102, - 105,101,100,32,116,105,109,101,46,10,10,32,32,32,32,42, - 100,97,116,97,42,32,105,115,32,116,104,101,32,99,111,110, - 116,101,110,116,115,32,111,102,32,116,104,101,32,112,121,99, - 32,102,105,108,101,46,32,40,79,110,108,121,32,116,104,101, - 32,102,105,114,115,116,32,49,54,32,98,121,116,101,115,32, - 97,114,101,10,32,32,32,32,114,101,113,117,105,114,101,100, - 46,41,10,10,32,32,32,32,42,115,111,117,114,99,101,95, - 109,116,105,109,101,42,32,105,115,32,116,104,101,32,108,97, - 115,116,32,109,111,100,105,102,105,101,100,32,116,105,109,101, - 115,116,97,109,112,32,111,102,32,116,104,101,32,115,111,117, - 114,99,101,32,102,105,108,101,46,10,10,32,32,32,32,42, - 115,111,117,114,99,101,95,115,105,122,101,42,32,105,115,32, - 78,111,110,101,32,111,114,32,116,104,101,32,115,105,122,101, - 32,111,102,32,116,104,101,32,115,111,117,114,99,101,32,102, - 105,108,101,32,105,110,32,98,121,116,101,115,46,10,10,32, - 32,32,32,42,110,97,109,101,42,32,105,115,32,116,104,101, - 32,110,97,109,101,32,111,102,32,116,104,101,32,109,111,100, - 117,108,101,32,98,101,105,110,103,32,105,109,112,111,114,116, - 101,100,46,32,73,116,32,105,115,32,117,115,101,100,32,102, - 111,114,32,108,111,103,103,105,110,103,46,10,10,32,32,32, - 32,42,101,120,99,95,100,101,116,97,105,108,115,42,32,105, - 115,32,97,32,100,105,99,116,105,111,110,97,114,121,32,112, - 97,115,115,101,100,32,116,111,32,73,109,112,111,114,116,69, - 114,114,111,114,32,105,102,32,105,116,32,114,97,105,115,101, - 100,32,102,111,114,10,32,32,32,32,105,109,112,114,111,118, - 101,100,32,100,101,98,117,103,103,105,110,103,46,10,10,32, - 32,32,32,65,110,32,73,109,112,111,114,116,69,114,114,111, - 114,32,105,115,32,114,97,105,115,101,100,32,105,102,32,116, - 104,101,32,98,121,116,101,99,111,100,101,32,105,115,32,115, - 116,97,108,101,46,10,10,32,32,32,32,114,212,0,0,0, - 233,12,0,0,0,114,37,0,0,0,122,22,98,121,116,101, - 99,111,100,101,32,105,115,32,115,116,97,108,101,32,102,111, - 114,32,114,210,0,0,0,78,114,211,0,0,0,41,4,114, - 49,0,0,0,114,207,0,0,0,114,215,0,0,0,114,188, - 0,0,0,41,6,114,48,0,0,0,218,12,115,111,117,114, - 99,101,95,109,116,105,109,101,218,11,115,111,117,114,99,101, - 95,115,105,122,101,114,187,0,0,0,114,217,0,0,0,114, - 145,0,0,0,115,6,0,0,0,32,32,32,32,32,32,114, - 10,0,0,0,218,23,95,118,97,108,105,100,97,116,101,95, - 116,105,109,101,115,116,97,109,112,95,112,121,99,114,224,0, - 0,0,187,2,0,0,115,137,0,0,0,128,0,244,38,0, - 8,22,144,100,152,49,152,82,144,106,211,7,33,160,108,176, - 90,209,38,63,210,7,64,216,20,42,168,52,168,40,208,18, - 51,136,7,220,8,18,215,8,35,209,8,35,160,68,168,39, - 212,8,50,220,14,25,152,39,209,14,49,160,91,209,14,49, - 208,8,49,216,8,19,208,8,31,220,8,22,144,116,152,66, - 152,114,144,123,211,8,35,168,11,176,106,209,40,64,210,8, - 65,220,14,25,208,28,50,176,52,176,40,208,26,59,209,14, - 75,184,123,209,14,75,208,8,75,240,3,0,9,66,1,240, - 3,0,9,32,114,28,0,0,0,99,4,0,0,0,0,0, - 0,0,0,0,0,0,5,0,0,0,3,0,0,0,243,50, - 0,0,0,151,0,124,0,100,1,100,2,26,0,124,1,107, - 55,0,0,114,15,116,1,0,0,0,0,0,0,0,0,100, - 3,124,2,155,2,157,2,102,1,105,0,124,3,164,1,142, - 1,130,1,121,4,41,5,97,243,1,0,0,86,97,108,105, - 100,97,116,101,32,97,32,104,97,115,104,45,98,97,115,101, - 100,32,112,121,99,32,98,121,32,99,104,101,99,107,105,110, - 103,32,116,104,101,32,114,101,97,108,32,115,111,117,114,99, - 101,32,104,97,115,104,32,97,103,97,105,110,115,116,32,116, - 104,101,32,111,110,101,32,105,110,10,32,32,32,32,116,104, - 101,32,112,121,99,32,104,101,97,100,101,114,46,10,10,32, - 32,32,32,42,100,97,116,97,42,32,105,115,32,116,104,101, - 32,99,111,110,116,101,110,116,115,32,111,102,32,116,104,101, - 32,112,121,99,32,102,105,108,101,46,32,40,79,110,108,121, - 32,116,104,101,32,102,105,114,115,116,32,49,54,32,98,121, - 116,101,115,32,97,114,101,10,32,32,32,32,114,101,113,117, - 105,114,101,100,46,41,10,10,32,32,32,32,42,115,111,117, - 114,99,101,95,104,97,115,104,42,32,105,115,32,116,104,101, - 32,105,109,112,111,114,116,108,105,98,46,117,116,105,108,46, - 115,111,117,114,99,101,95,104,97,115,104,40,41,32,111,102, - 32,116,104,101,32,115,111,117,114,99,101,32,102,105,108,101, - 46,10,10,32,32,32,32,42,110,97,109,101,42,32,105,115, - 32,116,104,101,32,110,97,109,101,32,111,102,32,116,104,101, - 32,109,111,100,117,108,101,32,98,101,105,110,103,32,105,109, - 112,111,114,116,101,100,46,32,73,116,32,105,115,32,117,115, - 101,100,32,102,111,114,32,108,111,103,103,105,110,103,46,10, - 10,32,32,32,32,42,101,120,99,95,100,101,116,97,105,108, - 115,42,32,105,115,32,97,32,100,105,99,116,105,111,110,97, - 114,121,32,112,97,115,115,101,100,32,116,111,32,73,109,112, - 111,114,116,69,114,114,111,114,32,105,102,32,105,116,32,114, - 97,105,115,101,100,32,102,111,114,10,32,32,32,32,105,109, - 112,114,111,118,101,100,32,100,101,98,117,103,103,105,110,103, - 46,10,10,32,32,32,32,65,110,32,73,109,112,111,114,116, - 69,114,114,111,114,32,105,115,32,114,97,105,115,101,100,32, - 105,102,32,116,104,101,32,98,121,116,101,99,111,100,101,32, - 105,115,32,115,116,97,108,101,46,10,10,32,32,32,32,114, - 212,0,0,0,114,211,0,0,0,122,46,104,97,115,104,32, - 105,110,32,98,121,116,101,99,111,100,101,32,100,111,101,115, - 110,39,116,32,109,97,116,99,104,32,104,97,115,104,32,111, - 102,32,115,111,117,114,99,101,32,78,41,1,114,188,0,0, - 0,41,4,114,48,0,0,0,218,11,115,111,117,114,99,101, - 95,104,97,115,104,114,187,0,0,0,114,217,0,0,0,115, - 4,0,0,0,32,32,32,32,114,10,0,0,0,218,18,95, - 118,97,108,105,100,97,116,101,95,104,97,115,104,95,112,121, - 99,114,227,0,0,0,215,2,0,0,115,54,0,0,0,128, - 0,240,34,0,8,12,136,65,136,98,128,122,144,91,210,7, - 32,220,14,25,216,14,61,184,100,184,88,208,12,70,241,3, - 3,15,10,224,14,25,241,5,3,15,10,240,0,3,9,10, - 240,3,0,8,33,114,28,0,0,0,99,4,0,0,0,0, - 0,0,0,0,0,0,0,5,0,0,0,3,0,0,0,243, - 206,0,0,0,151,0,116,1,0,0,0,0,0,0,0,0, - 106,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,124,0,171,1,0,0,0,0,0,0,125,4, - 116,5,0,0,0,0,0,0,0,0,124,4,116,6,0,0, - 0,0,0,0,0,0,171,2,0,0,0,0,0,0,114,48, - 116,8,0,0,0,0,0,0,0,0,106,11,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,100,1, - 124,2,171,2,0,0,0,0,0,0,1,0,124,3,129,22, - 116,13,0,0,0,0,0,0,0,0,106,14,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,124,4, - 124,3,171,2,0,0,0,0,0,0,1,0,124,4,83,0, - 116,17,0,0,0,0,0,0,0,0,100,2,124,2,155,2, - 157,2,124,1,124,2,172,3,171,3,0,0,0,0,0,0, - 130,1,41,4,122,35,67,111,109,112,105,108,101,32,98,121, - 116,101,99,111,100,101,32,97,115,32,102,111,117,110,100,32, - 105,110,32,97,32,112,121,99,46,122,21,99,111,100,101,32, - 111,98,106,101,99,116,32,102,114,111,109,32,123,33,114,125, - 122,19,78,111,110,45,99,111,100,101,32,111,98,106,101,99, - 116,32,105,110,32,169,2,114,187,0,0,0,114,68,0,0, - 0,41,9,218,7,109,97,114,115,104,97,108,218,5,108,111, - 97,100,115,218,10,105,115,105,110,115,116,97,110,99,101,218, - 10,95,99,111,100,101,95,116,121,112,101,114,207,0,0,0, - 114,215,0,0,0,218,4,95,105,109,112,218,16,95,102,105, - 120,95,99,111,95,102,105,108,101,110,97,109,101,114,188,0, - 0,0,41,5,114,48,0,0,0,114,187,0,0,0,114,173, - 0,0,0,114,176,0,0,0,218,4,99,111,100,101,115,5, - 0,0,0,32,32,32,32,32,114,10,0,0,0,218,17,95, - 99,111,109,112,105,108,101,95,98,121,116,101,99,111,100,101, - 114,237,0,0,0,239,2,0,0,115,99,0,0,0,128,0, - 228,11,18,143,61,137,61,152,20,211,11,30,128,68,220,7, - 17,144,36,156,10,212,7,35,220,8,18,215,8,35,209,8, - 35,208,36,59,184,93,212,8,75,216,11,22,208,11,34,220, - 12,16,215,12,33,209,12,33,160,36,168,11,212,12,52,216, - 15,19,136,11,228,14,25,208,28,47,176,13,208,47,64,208, - 26,65,216,31,35,168,45,244,3,1,15,57,240,0,1,9, - 57,114,28,0,0,0,99,3,0,0,0,0,0,0,0,0, - 0,0,0,5,0,0,0,3,0,0,0,243,8,1,0,0, - 151,0,116,1,0,0,0,0,0,0,0,0,116,2,0,0, - 0,0,0,0,0,0,171,1,0,0,0,0,0,0,125,3, - 124,3,106,5,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,116,7,0,0,0,0,0,0,0,0, - 100,1,171,1,0,0,0,0,0,0,171,1,0,0,0,0, - 0,0,1,0,124,3,106,5,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,116,7,0,0,0,0, - 0,0,0,0,124,1,171,1,0,0,0,0,0,0,171,1, - 0,0,0,0,0,0,1,0,124,3,106,5,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,116,7, - 0,0,0,0,0,0,0,0,124,2,171,1,0,0,0,0, - 0,0,171,1,0,0,0,0,0,0,1,0,124,3,106,5, + 104,101,32,100,97,116,97,32,105,115,32,102,111,117,110,100, + 32,116,111,32,98,101,32,116,114,117,110,99,97,116,101,100, + 46,10,10,32,32,32,32,78,114,38,0,0,0,122,20,98, + 97,100,32,109,97,103,105,99,32,110,117,109,98,101,114,32, + 105,110,32,122,2,58,32,250,2,123,125,233,16,0,0,0, + 122,40,114,101,97,99,104,101,100,32,69,79,70,32,119,104, + 105,108,101,32,114,101,97,100,105,110,103,32,112,121,99,32, + 104,101,97,100,101,114,32,111,102,32,233,8,0,0,0,233, + 252,255,255,255,122,14,105,110,118,97,108,105,100,32,102,108, + 97,103,115,32,122,4,32,105,110,32,41,7,218,12,77,65, + 71,73,67,95,78,85,77,66,69,82,114,207,0,0,0,218, + 16,95,118,101,114,98,111,115,101,95,109,101,115,115,97,103, + 101,114,188,0,0,0,114,7,0,0,0,218,8,69,79,70, + 69,114,114,111,114,114,49,0,0,0,41,6,114,48,0,0, + 0,114,187,0,0,0,218,11,101,120,99,95,100,101,116,97, + 105,108,115,218,5,109,97,103,105,99,114,145,0,0,0,114, + 21,0,0,0,115,6,0,0,0,32,32,32,32,32,32,114, + 10,0,0,0,218,13,95,99,108,97,115,115,105,102,121,95, + 112,121,99,114,219,0,0,0,154,2,0,0,115,185,0,0, + 0,128,0,240,32,0,13,17,144,18,144,33,136,72,128,69, + 216,7,12,148,12,210,7,28,216,20,40,168,20,168,8,176, + 2,176,53,176,41,208,18,60,136,7,220,8,18,215,8,35, + 209,8,35,160,68,168,39,212,8,50,220,14,25,152,39,209, + 14,49,160,91,209,14,49,208,8,49,220,7,10,136,52,131, + 121,144,50,130,126,216,20,60,184,84,184,72,208,18,69,136, + 7,220,8,18,215,8,35,209,8,35,160,68,168,39,212,8, + 50,220,14,22,144,119,211,14,31,208,8,31,220,12,26,152, + 52,160,1,160,33,152,57,211,12,37,128,69,224,7,12,136, + 117,130,125,216,20,34,160,53,160,41,168,52,176,4,168,120, + 208,18,56,136,7,220,14,25,152,39,209,14,49,160,91,209, + 14,49,208,8,49,216,11,16,128,76,114,28,0,0,0,99, + 5,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0, + 3,0,0,0,243,198,0,0,0,151,0,116,1,0,0,0, + 0,0,0,0,0,124,0,100,1,100,2,26,0,171,1,0, + 0,0,0,0,0,124,1,100,3,122,1,0,0,107,55,0, + 0,114,39,100,4,124,3,155,2,157,2,125,5,116,2,0, + 0,0,0,0,0,0,0,106,5,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,100,5,124,5,171, + 2,0,0,0,0,0,0,1,0,116,7,0,0,0,0,0, + 0,0,0,124,5,102,1,105,0,124,4,164,1,142,1,130, + 1,124,2,129,36,116,1,0,0,0,0,0,0,0,0,124, + 0,100,2,100,7,26,0,171,1,0,0,0,0,0,0,124, + 2,100,3,122,1,0,0,107,55,0,0,114,15,116,7,0, + 0,0,0,0,0,0,0,100,4,124,3,155,2,157,2,102, + 1,105,0,124,4,164,1,142,1,130,1,121,6,121,6,41, + 8,97,7,2,0,0,86,97,108,105,100,97,116,101,32,97, + 32,112,121,99,32,97,103,97,105,110,115,116,32,116,104,101, + 32,115,111,117,114,99,101,32,108,97,115,116,45,109,111,100, + 105,102,105,101,100,32,116,105,109,101,46,10,10,32,32,32, + 32,42,100,97,116,97,42,32,105,115,32,116,104,101,32,99, + 111,110,116,101,110,116,115,32,111,102,32,116,104,101,32,112, + 121,99,32,102,105,108,101,46,32,40,79,110,108,121,32,116, + 104,101,32,102,105,114,115,116,32,49,54,32,98,121,116,101, + 115,32,97,114,101,10,32,32,32,32,114,101,113,117,105,114, + 101,100,46,41,10,10,32,32,32,32,42,115,111,117,114,99, + 101,95,109,116,105,109,101,42,32,105,115,32,116,104,101,32, + 108,97,115,116,32,109,111,100,105,102,105,101,100,32,116,105, + 109,101,115,116,97,109,112,32,111,102,32,116,104,101,32,115, + 111,117,114,99,101,32,102,105,108,101,46,10,10,32,32,32, + 32,42,115,111,117,114,99,101,95,115,105,122,101,42,32,105, + 115,32,78,111,110,101,32,111,114,32,116,104,101,32,115,105, + 122,101,32,111,102,32,116,104,101,32,115,111,117,114,99,101, + 32,102,105,108,101,32,105,110,32,98,121,116,101,115,46,10, + 10,32,32,32,32,42,110,97,109,101,42,32,105,115,32,116, + 104,101,32,110,97,109,101,32,111,102,32,116,104,101,32,109, + 111,100,117,108,101,32,98,101,105,110,103,32,105,109,112,111, + 114,116,101,100,46,32,73,116,32,105,115,32,117,115,101,100, + 32,102,111,114,32,108,111,103,103,105,110,103,46,10,10,32, + 32,32,32,42,101,120,99,95,100,101,116,97,105,108,115,42, + 32,105,115,32,97,32,100,105,99,116,105,111,110,97,114,121, + 32,112,97,115,115,101,100,32,116,111,32,73,109,112,111,114, + 116,69,114,114,111,114,32,105,102,32,105,116,32,114,97,105, + 115,101,100,32,102,111,114,10,32,32,32,32,105,109,112,114, + 111,118,101,100,32,100,101,98,117,103,103,105,110,103,46,10, + 10,32,32,32,32,65,110,32,73,109,112,111,114,116,69,114, + 114,111,114,32,105,115,32,114,97,105,115,101,100,32,105,102, + 32,116,104,101,32,98,121,116,101,99,111,100,101,32,105,115, + 32,115,116,97,108,101,46,10,10,32,32,32,32,114,212,0, + 0,0,233,12,0,0,0,114,37,0,0,0,122,22,98,121, + 116,101,99,111,100,101,32,105,115,32,115,116,97,108,101,32, + 102,111,114,32,114,210,0,0,0,78,114,211,0,0,0,41, + 4,114,49,0,0,0,114,207,0,0,0,114,215,0,0,0, + 114,188,0,0,0,41,6,114,48,0,0,0,218,12,115,111, + 117,114,99,101,95,109,116,105,109,101,218,11,115,111,117,114, + 99,101,95,115,105,122,101,114,187,0,0,0,114,217,0,0, + 0,114,145,0,0,0,115,6,0,0,0,32,32,32,32,32, + 32,114,10,0,0,0,218,23,95,118,97,108,105,100,97,116, + 101,95,116,105,109,101,115,116,97,109,112,95,112,121,99,114, + 224,0,0,0,187,2,0,0,115,137,0,0,0,128,0,244, + 38,0,8,22,144,100,152,49,152,82,144,106,211,7,33,160, + 108,176,90,209,38,63,210,7,64,216,20,42,168,52,168,40, + 208,18,51,136,7,220,8,18,215,8,35,209,8,35,160,68, + 168,39,212,8,50,220,14,25,152,39,209,14,49,160,91,209, + 14,49,208,8,49,216,8,19,208,8,31,220,8,22,144,116, + 152,66,152,114,144,123,211,8,35,168,11,176,106,209,40,64, + 210,8,65,220,14,25,208,28,50,176,52,176,40,208,26,59, + 209,14,75,184,123,209,14,75,208,8,75,240,3,0,9,66, + 1,240,3,0,9,32,114,28,0,0,0,99,4,0,0,0, + 0,0,0,0,0,0,0,0,5,0,0,0,3,0,0,0, + 243,50,0,0,0,151,0,124,0,100,1,100,2,26,0,124, + 1,107,55,0,0,114,15,116,1,0,0,0,0,0,0,0, + 0,100,3,124,2,155,2,157,2,102,1,105,0,124,3,164, + 1,142,1,130,1,121,4,41,5,97,243,1,0,0,86,97, + 108,105,100,97,116,101,32,97,32,104,97,115,104,45,98,97, + 115,101,100,32,112,121,99,32,98,121,32,99,104,101,99,107, + 105,110,103,32,116,104,101,32,114,101,97,108,32,115,111,117, + 114,99,101,32,104,97,115,104,32,97,103,97,105,110,115,116, + 32,116,104,101,32,111,110,101,32,105,110,10,32,32,32,32, + 116,104,101,32,112,121,99,32,104,101,97,100,101,114,46,10, + 10,32,32,32,32,42,100,97,116,97,42,32,105,115,32,116, + 104,101,32,99,111,110,116,101,110,116,115,32,111,102,32,116, + 104,101,32,112,121,99,32,102,105,108,101,46,32,40,79,110, + 108,121,32,116,104,101,32,102,105,114,115,116,32,49,54,32, + 98,121,116,101,115,32,97,114,101,10,32,32,32,32,114,101, + 113,117,105,114,101,100,46,41,10,10,32,32,32,32,42,115, + 111,117,114,99,101,95,104,97,115,104,42,32,105,115,32,116, + 104,101,32,105,109,112,111,114,116,108,105,98,46,117,116,105, + 108,46,115,111,117,114,99,101,95,104,97,115,104,40,41,32, + 111,102,32,116,104,101,32,115,111,117,114,99,101,32,102,105, + 108,101,46,10,10,32,32,32,32,42,110,97,109,101,42,32, + 105,115,32,116,104,101,32,110,97,109,101,32,111,102,32,116, + 104,101,32,109,111,100,117,108,101,32,98,101,105,110,103,32, + 105,109,112,111,114,116,101,100,46,32,73,116,32,105,115,32, + 117,115,101,100,32,102,111,114,32,108,111,103,103,105,110,103, + 46,10,10,32,32,32,32,42,101,120,99,95,100,101,116,97, + 105,108,115,42,32,105,115,32,97,32,100,105,99,116,105,111, + 110,97,114,121,32,112,97,115,115,101,100,32,116,111,32,73, + 109,112,111,114,116,69,114,114,111,114,32,105,102,32,105,116, + 32,114,97,105,115,101,100,32,102,111,114,10,32,32,32,32, + 105,109,112,114,111,118,101,100,32,100,101,98,117,103,103,105, + 110,103,46,10,10,32,32,32,32,65,110,32,73,109,112,111, + 114,116,69,114,114,111,114,32,105,115,32,114,97,105,115,101, + 100,32,105,102,32,116,104,101,32,98,121,116,101,99,111,100, + 101,32,105,115,32,115,116,97,108,101,46,10,10,32,32,32, + 32,114,212,0,0,0,114,211,0,0,0,122,46,104,97,115, + 104,32,105,110,32,98,121,116,101,99,111,100,101,32,100,111, + 101,115,110,39,116,32,109,97,116,99,104,32,104,97,115,104, + 32,111,102,32,115,111,117,114,99,101,32,78,41,1,114,188, + 0,0,0,41,4,114,48,0,0,0,218,11,115,111,117,114, + 99,101,95,104,97,115,104,114,187,0,0,0,114,217,0,0, + 0,115,4,0,0,0,32,32,32,32,114,10,0,0,0,218, + 18,95,118,97,108,105,100,97,116,101,95,104,97,115,104,95, + 112,121,99,114,227,0,0,0,215,2,0,0,115,54,0,0, + 0,128,0,240,34,0,8,12,136,65,136,98,128,122,144,91, + 210,7,32,220,14,25,216,14,61,184,100,184,88,208,12,70, + 241,3,3,15,10,224,14,25,241,5,3,15,10,240,0,3, + 9,10,240,3,0,8,33,114,28,0,0,0,99,4,0,0, + 0,0,0,0,0,0,0,0,0,5,0,0,0,3,0,0, + 0,243,206,0,0,0,151,0,116,1,0,0,0,0,0,0, + 0,0,106,2,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,124,0,171,1,0,0,0,0,0,0, + 125,4,116,5,0,0,0,0,0,0,0,0,124,4,116,6, + 0,0,0,0,0,0,0,0,171,2,0,0,0,0,0,0, + 114,48,116,8,0,0,0,0,0,0,0,0,106,11,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,116,9,0,0,0,0,0,0,0,0,106,10,0,0, + 100,1,124,2,171,2,0,0,0,0,0,0,1,0,124,3, + 129,22,116,13,0,0,0,0,0,0,0,0,106,14,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 124,0,171,1,0,0,0,0,0,0,171,1,0,0,0,0, - 0,0,1,0,124,3,83,0,41,2,122,43,80,114,111,100, - 117,99,101,32,116,104,101,32,100,97,116,97,32,102,111,114, - 32,97,32,116,105,109,101,115,116,97,109,112,45,98,97,115, - 101,100,32,112,121,99,46,114,1,0,0,0,41,6,218,9, - 98,121,116,101,97,114,114,97,121,114,214,0,0,0,218,6, - 101,120,116,101,110,100,114,43,0,0,0,114,230,0,0,0, - 218,5,100,117,109,112,115,41,4,114,236,0,0,0,218,5, - 109,116,105,109,101,114,223,0,0,0,114,48,0,0,0,115, - 4,0,0,0,32,32,32,32,114,10,0,0,0,218,22,95, - 99,111,100,101,95,116,111,95,116,105,109,101,115,116,97,109, - 112,95,112,121,99,114,243,0,0,0,252,2,0,0,115,88, - 0,0,0,128,0,228,11,20,148,92,211,11,34,128,68,216, - 4,8,135,75,129,75,148,12,152,81,147,15,212,4,32,216, - 4,8,135,75,129,75,148,12,152,85,211,16,35,212,4,36, - 216,4,8,135,75,129,75,148,12,152,91,211,16,41,212,4, - 42,216,4,8,135,75,129,75,148,7,151,13,145,13,152,100, - 211,16,35,212,4,36,216,11,15,128,75,114,28,0,0,0, - 99,3,0,0,0,0,0,0,0,0,0,0,0,5,0,0, - 0,3,0,0,0,243,242,0,0,0,151,0,116,1,0,0, - 0,0,0,0,0,0,116,2,0,0,0,0,0,0,0,0, - 171,1,0,0,0,0,0,0,125,3,100,1,124,2,100,1, - 122,3,0,0,122,7,0,0,125,4,124,3,106,5,0,0, + 124,4,124,3,171,2,0,0,0,0,0,0,1,0,124,4, + 83,0,116,17,0,0,0,0,0,0,0,0,100,2,124,2, + 155,2,157,2,124,1,124,2,172,3,171,3,0,0,0,0, + 0,0,130,1,41,4,122,35,67,111,109,112,105,108,101,32, + 98,121,116,101,99,111,100,101,32,97,115,32,102,111,117,110, + 100,32,105,110,32,97,32,112,121,99,46,122,21,99,111,100, + 101,32,111,98,106,101,99,116,32,102,114,111,109,32,123,33, + 114,125,122,19,78,111,110,45,99,111,100,101,32,111,98,106, + 101,99,116,32,105,110,32,169,2,114,187,0,0,0,114,68, + 0,0,0,41,9,218,7,109,97,114,115,104,97,108,218,5, + 108,111,97,100,115,218,10,105,115,105,110,115,116,97,110,99, + 101,218,10,95,99,111,100,101,95,116,121,112,101,114,207,0, + 0,0,114,215,0,0,0,218,4,95,105,109,112,218,16,95, + 102,105,120,95,99,111,95,102,105,108,101,110,97,109,101,114, + 188,0,0,0,41,5,114,48,0,0,0,114,187,0,0,0, + 114,173,0,0,0,114,176,0,0,0,218,4,99,111,100,101, + 115,5,0,0,0,32,32,32,32,32,114,10,0,0,0,218, + 17,95,99,111,109,112,105,108,101,95,98,121,116,101,99,111, + 100,101,114,237,0,0,0,239,2,0,0,115,99,0,0,0, + 128,0,228,11,18,143,61,137,61,152,20,211,11,30,128,68, + 220,7,17,144,36,156,10,212,7,35,220,8,18,215,8,35, + 209,8,35,208,36,59,184,93,212,8,75,216,11,22,208,11, + 34,220,12,16,215,12,33,209,12,33,160,36,168,11,212,12, + 52,216,15,19,136,11,228,14,25,208,28,47,176,13,208,47, + 64,208,26,65,216,31,35,168,45,244,3,1,15,57,240,0, + 1,9,57,114,28,0,0,0,99,3,0,0,0,0,0,0, + 0,0,0,0,0,5,0,0,0,3,0,0,0,243,8,1, + 0,0,151,0,116,1,0,0,0,0,0,0,0,0,116,2, + 0,0,0,0,0,0,0,0,171,1,0,0,0,0,0,0, + 125,3,124,3,106,5,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,116,7,0,0,0,0,0,0, + 0,0,100,1,171,1,0,0,0,0,0,0,171,1,0,0, + 0,0,0,0,1,0,124,3,106,5,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,116,7,0,0, + 0,0,0,0,0,0,124,1,171,1,0,0,0,0,0,0, + 171,1,0,0,0,0,0,0,1,0,124,3,106,5,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 116,7,0,0,0,0,0,0,0,0,124,4,171,1,0,0, - 0,0,0,0,171,1,0,0,0,0,0,0,1,0,116,9, - 0,0,0,0,0,0,0,0,124,1,171,1,0,0,0,0, - 0,0,100,2,107,40,0,0,115,2,74,0,130,1,124,3, + 116,7,0,0,0,0,0,0,0,0,124,2,171,1,0,0, + 0,0,0,0,171,1,0,0,0,0,0,0,1,0,124,3, 106,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,124,1,171,1,0,0,0,0,0,0,1,0, + 0,0,0,0,116,9,0,0,0,0,0,0,0,0,106,10, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,124,0,171,1,0,0,0,0,0,0,171,1,0,0, + 0,0,0,0,1,0,124,3,83,0,41,2,122,43,80,114, + 111,100,117,99,101,32,116,104,101,32,100,97,116,97,32,102, + 111,114,32,97,32,116,105,109,101,115,116,97,109,112,45,98, + 97,115,101,100,32,112,121,99,46,114,1,0,0,0,41,6, + 218,9,98,121,116,101,97,114,114,97,121,114,214,0,0,0, + 218,6,101,120,116,101,110,100,114,43,0,0,0,114,230,0, + 0,0,218,5,100,117,109,112,115,41,4,114,236,0,0,0, + 218,5,109,116,105,109,101,114,223,0,0,0,114,48,0,0, + 0,115,4,0,0,0,32,32,32,32,114,10,0,0,0,218, + 22,95,99,111,100,101,95,116,111,95,116,105,109,101,115,116, + 97,109,112,95,112,121,99,114,243,0,0,0,252,2,0,0, + 115,88,0,0,0,128,0,228,11,20,148,92,211,11,34,128, + 68,216,4,8,135,75,129,75,148,12,152,81,147,15,212,4, + 32,216,4,8,135,75,129,75,148,12,152,85,211,16,35,212, + 4,36,216,4,8,135,75,129,75,148,12,152,91,211,16,41, + 212,4,42,216,4,8,135,75,129,75,148,7,151,13,145,13, + 152,100,211,16,35,212,4,36,216,11,15,128,75,114,28,0, + 0,0,99,3,0,0,0,0,0,0,0,0,0,0,0,5, + 0,0,0,3,0,0,0,243,242,0,0,0,151,0,116,1, + 0,0,0,0,0,0,0,0,116,2,0,0,0,0,0,0, + 0,0,171,1,0,0,0,0,0,0,125,3,100,1,124,2, + 100,1,122,3,0,0,122,7,0,0,125,4,124,3,106,5, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,116,7,0,0,0,0,0,0,0,0,124,4,171,1, + 0,0,0,0,0,0,171,1,0,0,0,0,0,0,1,0, + 116,9,0,0,0,0,0,0,0,0,124,1,171,1,0,0, + 0,0,0,0,100,2,107,40,0,0,115,2,74,0,130,1, 124,3,106,5,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,116,11,0,0,0,0,0,0,0,0, - 106,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,124,0,171,1,0,0,0,0,0,0,171,1, - 0,0,0,0,0,0,1,0,124,3,83,0,41,3,122,38, - 80,114,111,100,117,99,101,32,116,104,101,32,100,97,116,97, - 32,102,111,114,32,97,32,104,97,115,104,45,98,97,115,101, - 100,32,112,121,99,46,114,6,0,0,0,114,212,0,0,0, - 41,7,114,239,0,0,0,114,214,0,0,0,114,240,0,0, - 0,114,43,0,0,0,114,7,0,0,0,114,230,0,0,0, - 114,241,0,0,0,41,5,114,236,0,0,0,114,226,0,0, - 0,218,7,99,104,101,99,107,101,100,114,48,0,0,0,114, - 21,0,0,0,115,5,0,0,0,32,32,32,32,32,114,10, - 0,0,0,218,17,95,99,111,100,101,95,116,111,95,104,97, - 115,104,95,112,121,99,114,246,0,0,0,6,3,0,0,115, - 97,0,0,0,128,0,228,11,20,148,92,211,11,34,128,68, - 216,12,15,144,39,152,81,145,44,209,12,30,128,69,216,4, - 8,135,75,129,75,148,12,152,85,211,16,35,212,4,36,220, - 11,14,136,123,211,11,27,152,113,210,11,32,209,4,32,216, - 4,8,135,75,129,75,144,11,212,4,28,216,4,8,135,75, - 129,75,148,7,151,13,145,13,152,100,211,16,35,212,4,36, - 216,11,15,128,75,114,28,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, - 220,0,0,0,151,0,100,1,100,2,108,0,125,1,116,3, - 0,0,0,0,0,0,0,0,106,4,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,124,0,171,1, - 0,0,0,0,0,0,106,6,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,125,2,124,1,106,9, + 0,0,0,0,0,0,124,1,171,1,0,0,0,0,0,0, + 1,0,124,3,106,5,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,116,11,0,0,0,0,0,0, + 0,0,106,12,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,124,0,171,1,0,0,0,0,0,0, + 171,1,0,0,0,0,0,0,1,0,124,3,83,0,41,3, + 122,38,80,114,111,100,117,99,101,32,116,104,101,32,100,97, + 116,97,32,102,111,114,32,97,32,104,97,115,104,45,98,97, + 115,101,100,32,112,121,99,46,114,6,0,0,0,114,212,0, + 0,0,41,7,114,239,0,0,0,114,214,0,0,0,114,240, + 0,0,0,114,43,0,0,0,114,7,0,0,0,114,230,0, + 0,0,114,241,0,0,0,41,5,114,236,0,0,0,114,226, + 0,0,0,218,7,99,104,101,99,107,101,100,114,48,0,0, + 0,114,21,0,0,0,115,5,0,0,0,32,32,32,32,32, + 114,10,0,0,0,218,17,95,99,111,100,101,95,116,111,95, + 104,97,115,104,95,112,121,99,114,246,0,0,0,6,3,0, + 0,115,100,0,0,0,128,0,228,11,20,148,92,211,11,34, + 128,68,216,12,15,144,39,152,81,145,44,209,12,30,128,69, + 216,4,8,135,75,129,75,148,12,152,85,211,16,35,212,4, + 36,220,11,14,136,123,211,11,27,152,113,210,11,32,208,4, + 32,208,11,32,216,4,8,135,75,129,75,144,11,212,4,28, + 216,4,8,135,75,129,75,148,7,151,13,145,13,152,100,211, + 16,35,212,4,36,216,11,15,128,75,114,28,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,220,0,0,0,151,0,100,1,100,2,108, + 0,125,1,116,3,0,0,0,0,0,0,0,0,106,4,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,124,2,171,1,0,0,0,0,0,0,125,3,116,3, - 0,0,0,0,0,0,0,0,106,10,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,100,2,100,3, - 171,2,0,0,0,0,0,0,125,4,124,4,106,13,0,0, + 0,124,0,171,1,0,0,0,0,0,0,106,6,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,125, + 2,124,1,106,9,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,124,2,171,1,0,0,0,0,0, + 0,125,3,116,3,0,0,0,0,0,0,0,0,106,10,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 124,0,106,13,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,124,3,100,1,25,0,0,0,171,1, - 0,0,0,0,0,0,171,1,0,0,0,0,0,0,83,0, - 41,4,122,121,68,101,99,111,100,101,32,98,121,116,101,115, - 32,114,101,112,114,101,115,101,110,116,105,110,103,32,115,111, - 117,114,99,101,32,99,111,100,101,32,97,110,100,32,114,101, - 116,117,114,110,32,116,104,101,32,115,116,114,105,110,103,46, - 10,10,32,32,32,32,85,110,105,118,101,114,115,97,108,32, - 110,101,119,108,105,110,101,32,115,117,112,112,111,114,116,32, - 105,115,32,117,115,101,100,32,105,110,32,116,104,101,32,100, - 101,99,111,100,105,110,103,46,10,32,32,32,32,114,1,0, - 0,0,78,84,41,7,218,8,116,111,107,101,110,105,122,101, - 114,114,0,0,0,218,7,66,121,116,101,115,73,79,218,8, - 114,101,97,100,108,105,110,101,218,15,100,101,116,101,99,116, - 95,101,110,99,111,100,105,110,103,218,25,73,110,99,114,101, - 109,101,110,116,97,108,78,101,119,108,105,110,101,68,101,99, - 111,100,101,114,218,6,100,101,99,111,100,101,41,5,218,12, - 115,111,117,114,99,101,95,98,121,116,101,115,114,248,0,0, - 0,218,21,115,111,117,114,99,101,95,98,121,116,101,115,95, - 114,101,97,100,108,105,110,101,218,8,101,110,99,111,100,105, - 110,103,218,15,110,101,119,108,105,110,101,95,100,101,99,111, - 100,101,114,115,5,0,0,0,32,32,32,32,32,114,10,0, - 0,0,218,13,100,101,99,111,100,101,95,115,111,117,114,99, - 101,114,2,1,0,0,17,3,0,0,115,95,0,0,0,128, - 0,243,10,0,5,20,220,28,31,159,75,153,75,168,12,211, - 28,53,215,28,62,209,28,62,208,4,25,216,15,23,215,15, - 39,209,15,39,208,40,61,211,15,62,128,72,220,22,25,215, - 22,51,209,22,51,176,68,184,36,211,22,63,128,79,216,11, - 26,215,11,33,209,11,33,160,44,215,34,53,209,34,53,176, - 104,184,113,177,107,211,34,66,211,11,67,208,4,67,114,28, - 0,0,0,169,2,218,6,108,111,97,100,101,114,218,26,115, + 0,100,2,100,3,171,2,0,0,0,0,0,0,125,4,124, + 4,106,13,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,124,0,106,13,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,124,3,100,1,25, + 0,0,0,171,1,0,0,0,0,0,0,171,1,0,0,0, + 0,0,0,83,0,41,4,122,121,68,101,99,111,100,101,32, + 98,121,116,101,115,32,114,101,112,114,101,115,101,110,116,105, + 110,103,32,115,111,117,114,99,101,32,99,111,100,101,32,97, + 110,100,32,114,101,116,117,114,110,32,116,104,101,32,115,116, + 114,105,110,103,46,10,10,32,32,32,32,85,110,105,118,101, + 114,115,97,108,32,110,101,119,108,105,110,101,32,115,117,112, + 112,111,114,116,32,105,115,32,117,115,101,100,32,105,110,32, + 116,104,101,32,100,101,99,111,100,105,110,103,46,10,32,32, + 32,32,114,1,0,0,0,78,84,41,7,218,8,116,111,107, + 101,110,105,122,101,114,114,0,0,0,218,7,66,121,116,101, + 115,73,79,218,8,114,101,97,100,108,105,110,101,218,15,100, + 101,116,101,99,116,95,101,110,99,111,100,105,110,103,218,25, + 73,110,99,114,101,109,101,110,116,97,108,78,101,119,108,105, + 110,101,68,101,99,111,100,101,114,218,6,100,101,99,111,100, + 101,41,5,218,12,115,111,117,114,99,101,95,98,121,116,101, + 115,114,248,0,0,0,218,21,115,111,117,114,99,101,95,98, + 121,116,101,115,95,114,101,97,100,108,105,110,101,218,8,101, + 110,99,111,100,105,110,103,218,15,110,101,119,108,105,110,101, + 95,100,101,99,111,100,101,114,115,5,0,0,0,32,32,32, + 32,32,114,10,0,0,0,218,13,100,101,99,111,100,101,95, + 115,111,117,114,99,101,114,2,1,0,0,17,3,0,0,115, + 95,0,0,0,128,0,243,10,0,5,20,220,28,31,159,75, + 153,75,168,12,211,28,53,215,28,62,209,28,62,208,4,25, + 216,15,23,215,15,39,209,15,39,208,40,61,211,15,62,128, + 72,220,22,25,215,22,51,209,22,51,176,68,184,36,211,22, + 63,128,79,216,11,26,215,11,33,209,11,33,160,44,215,34, + 53,209,34,53,176,104,184,113,177,107,211,34,66,211,11,67, + 208,4,67,114,28,0,0,0,169,2,218,6,108,111,97,100, + 101,114,218,26,115,117,98,109,111,100,117,108,101,95,115,101, + 97,114,99,104,95,108,111,99,97,116,105,111,110,115,99,2, + 0,0,0,0,0,0,0,2,0,0,0,6,0,0,0,3, + 0,0,0,243,138,2,0,0,151,0,124,1,128,33,100,2, + 125,1,116,1,0,0,0,0,0,0,0,0,124,2,100,3, + 171,2,0,0,0,0,0,0,114,52,9,0,124,2,106,3, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,124,0,171,1,0,0,0,0,0,0,125,1,110,33, + 116,7,0,0,0,0,0,0,0,0,106,8,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,124,1, + 171,1,0,0,0,0,0,0,125,1,9,0,116,11,0,0, + 0,0,0,0,0,0,124,1,171,1,0,0,0,0,0,0, + 125,1,116,14,0,0,0,0,0,0,0,0,106,17,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 124,0,124,2,124,1,172,4,171,3,0,0,0,0,0,0, + 125,4,100,5,124,4,95,9,0,0,0,0,0,0,0,0, + 124,2,128,63,116,21,0,0,0,0,0,0,0,0,171,0, + 0,0,0,0,0,0,68,0,93,49,0,0,92,2,0,0, + 125,5,125,6,124,1,106,23,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,116,25,0,0,0,0, + 0,0,0,0,124,6,171,1,0,0,0,0,0,0,171,1, + 0,0,0,0,0,0,115,1,140,33,2,0,124,5,124,0, + 124,1,171,2,0,0,0,0,0,0,125,2,124,2,124,4, + 95,13,0,0,0,0,0,0,0,0,1,0,110,2,4,0, + 121,1,124,3,116,28,0,0,0,0,0,0,0,0,117,0, + 114,40,116,1,0,0,0,0,0,0,0,0,124,2,100,6, + 171,2,0,0,0,0,0,0,114,35,9,0,124,2,106,31, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,124,0,171,1,0,0,0,0,0,0,125,7,124,7, + 114,15,103,0,124,4,95,16,0,0,0,0,0,0,0,0, + 110,7,124,3,124,4,95,16,0,0,0,0,0,0,0,0, + 124,4,106,32,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,103,0,107,40,0,0,114,43,124,1, + 114,41,116,35,0,0,0,0,0,0,0,0,124,1,171,1, + 0,0,0,0,0,0,100,7,25,0,0,0,125,8,124,4, + 106,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,106,37,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,124,8,171,1,0,0,0,0, + 0,0,1,0,124,4,83,0,35,0,116,4,0,0,0,0, + 0,0,0,0,36,0,114,3,1,0,89,0,140,222,119,0, + 120,3,89,0,119,1,35,0,116,12,0,0,0,0,0,0, + 0,0,36,0,114,3,1,0,89,0,140,237,119,0,120,3, + 89,0,119,1,35,0,116,4,0,0,0,0,0,0,0,0, + 36,0,114,3,1,0,89,0,140,101,119,0,120,3,89,0, + 119,1,41,8,97,61,1,0,0,82,101,116,117,114,110,32, + 97,32,109,111,100,117,108,101,32,115,112,101,99,32,98,97, + 115,101,100,32,111,110,32,97,32,102,105,108,101,32,108,111, + 99,97,116,105,111,110,46,10,10,32,32,32,32,84,111,32, + 105,110,100,105,99,97,116,101,32,116,104,97,116,32,116,104, + 101,32,109,111,100,117,108,101,32,105,115,32,97,32,112,97, + 99,107,97,103,101,44,32,115,101,116,10,32,32,32,32,115, 117,98,109,111,100,117,108,101,95,115,101,97,114,99,104,95, - 108,111,99,97,116,105,111,110,115,99,2,0,0,0,0,0, - 0,0,2,0,0,0,6,0,0,0,3,0,0,0,243,138, - 2,0,0,151,0,124,1,128,33,100,2,125,1,116,1,0, - 0,0,0,0,0,0,0,124,2,100,3,171,2,0,0,0, - 0,0,0,114,52,9,0,124,2,106,3,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,124,0,171, - 1,0,0,0,0,0,0,125,1,110,33,116,7,0,0,0, - 0,0,0,0,0,106,8,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,124,1,171,1,0,0,0, - 0,0,0,125,1,9,0,116,11,0,0,0,0,0,0,0, - 0,124,1,171,1,0,0,0,0,0,0,125,1,116,14,0, - 0,0,0,0,0,0,0,106,17,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,124,0,124,2,124, - 1,172,4,171,3,0,0,0,0,0,0,125,4,100,5,124, - 4,95,9,0,0,0,0,0,0,0,0,124,2,128,63,116, - 21,0,0,0,0,0,0,0,0,171,0,0,0,0,0,0, - 0,68,0,93,49,0,0,92,2,0,0,125,5,125,6,124, - 1,106,23,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,116,25,0,0,0,0,0,0,0,0,124, - 6,171,1,0,0,0,0,0,0,171,1,0,0,0,0,0, - 0,115,1,140,33,2,0,124,5,124,0,124,1,171,2,0, - 0,0,0,0,0,125,2,124,2,124,4,95,13,0,0,0, - 0,0,0,0,0,1,0,110,2,4,0,121,1,124,3,116, - 28,0,0,0,0,0,0,0,0,117,0,114,40,116,1,0, - 0,0,0,0,0,0,0,124,2,100,6,171,2,0,0,0, - 0,0,0,114,35,9,0,124,2,106,31,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,124,0,171, - 1,0,0,0,0,0,0,125,7,124,7,114,15,103,0,124, - 4,95,16,0,0,0,0,0,0,0,0,110,7,124,3,124, - 4,95,16,0,0,0,0,0,0,0,0,124,4,106,32,0, + 108,111,99,97,116,105,111,110,115,32,116,111,32,97,32,108, + 105,115,116,32,111,102,32,100,105,114,101,99,116,111,114,121, + 32,112,97,116,104,115,46,32,32,65,110,10,32,32,32,32, + 101,109,112,116,121,32,108,105,115,116,32,105,115,32,115,117, + 102,102,105,99,105,101,110,116,44,32,116,104,111,117,103,104, + 32,105,116,115,32,110,111,116,32,111,116,104,101,114,119,105, + 115,101,32,117,115,101,102,117,108,32,116,111,32,116,104,101, + 10,32,32,32,32,105,109,112,111,114,116,32,115,121,115,116, + 101,109,46,10,10,32,32,32,32,84,104,101,32,108,111,97, + 100,101,114,32,109,117,115,116,32,116,97,107,101,32,97,32, + 115,112,101,99,32,97,115,32,105,116,115,32,111,110,108,121, + 32,95,95,105,110,105,116,95,95,40,41,32,97,114,103,46, + 10,10,32,32,32,32,78,122,9,60,117,110,107,110,111,119, + 110,62,218,12,103,101,116,95,102,105,108,101,110,97,109,101, + 169,1,218,6,111,114,105,103,105,110,84,218,10,105,115,95, + 112,97,99,107,97,103,101,114,1,0,0,0,41,19,114,199, + 0,0,0,114,7,1,0,0,114,188,0,0,0,114,23,0, + 0,0,114,130,0,0,0,114,105,0,0,0,114,87,0,0, + 0,114,207,0,0,0,218,10,77,111,100,117,108,101,83,112, + 101,99,218,13,95,115,101,116,95,102,105,108,101,97,116,116, + 114,218,27,95,103,101,116,95,115,117,112,112,111,114,116,101, + 100,95,102,105,108,101,95,108,111,97,100,101,114,115,114,59, + 0,0,0,114,179,0,0,0,114,4,1,0,0,218,9,95, + 80,79,80,85,76,65,84,69,114,10,1,0,0,114,5,1, + 0,0,114,81,0,0,0,114,64,0,0,0,41,9,114,187, + 0,0,0,218,8,108,111,99,97,116,105,111,110,114,4,1, + 0,0,114,5,1,0,0,218,4,115,112,101,99,218,12,108, + 111,97,100,101,114,95,99,108,97,115,115,218,8,115,117,102, + 102,105,120,101,115,114,10,1,0,0,218,7,100,105,114,110, + 97,109,101,115,9,0,0,0,32,32,32,32,32,32,32,32, + 32,114,10,0,0,0,218,23,115,112,101,99,95,102,114,111, + 109,95,102,105,108,101,95,108,111,99,97,116,105,111,110,114, + 20,1,0,0,34,3,0,0,115,109,1,0,0,128,0,240, + 24,0,8,16,208,7,23,240,8,0,20,31,136,8,220,11, + 18,144,54,152,62,212,11,42,240,4,3,13,21,216,27,33, + 215,27,46,209,27,46,168,116,211,27,52,145,8,244,8,0, + 20,23,151,58,145,58,152,104,211,19,39,136,8,240,2,3, + 9,17,220,23,36,160,88,211,23,46,136,72,244,20,0,12, + 22,215,11,32,209,11,32,160,20,160,118,176,104,208,11,32, + 211,11,63,128,68,216,25,29,128,68,212,4,22,240,6,0, + 8,14,128,126,220,38,65,211,38,67,242,0,6,9,24,209, + 12,34,136,76,152,40,216,15,23,215,15,32,209,15,32,164, + 21,160,120,163,31,213,15,49,217,25,37,160,100,168,72,211, + 25,53,144,6,216,30,36,144,4,148,11,217,16,21,240,9, + 6,9,24,240,12,0,20,24,240,6,0,8,34,164,89,209, + 7,46,228,11,18,144,54,152,60,212,11,40,240,2,6,13, + 57,216,29,35,215,29,46,209,29,46,168,116,211,29,52,144, + 10,241,8,0,20,30,216,54,56,144,68,213,20,51,224,42, + 68,136,4,212,8,39,216,7,11,215,7,38,209,7,38,168, + 34,210,7,44,217,11,19,220,22,33,160,40,211,22,43,168, + 65,209,22,46,136,71,216,12,16,215,12,43,209,12,43,215, + 12,50,209,12,50,176,55,212,12,59,224,11,15,128,75,248, + 244,93,1,0,20,31,242,0,1,13,21,217,16,20,240,3, + 1,13,21,251,244,12,0,16,23,242,0,1,9,17,217,12, + 16,240,3,1,9,17,251,244,56,0,20,31,242,0,1,13, + 21,217,16,20,240,3,1,13,21,250,115,52,0,0,0,146, + 17,68,24,0,186,11,68,39,0,194,58,17,68,54,0,196, + 24,9,68,36,3,196,35,1,68,36,3,196,39,9,68,51, + 3,196,50,1,68,51,3,196,54,9,69,2,3,197,1,1, + 69,2,3,99,1,0,0,0,0,0,0,0,0,0,0,0, + 5,0,0,0,3,0,0,0,243,140,1,0,0,151,0,116, + 1,0,0,0,0,0,0,0,0,124,0,116,2,0,0,0, + 0,0,0,0,0,171,2,0,0,0,0,0,0,115,1,121, + 1,116,5,0,0,0,0,0,0,0,0,171,0,0,0,0, + 0,0,0,125,1,124,0,106,7,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,100,2,100,1,171, + 2,0,0,0,0,0,0,125,2,124,0,106,7,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,100, + 3,124,1,171,2,0,0,0,0,0,0,125,3,124,2,128, + 18,124,3,124,1,117,0,114,1,121,1,124,3,128,11,116, + 9,0,0,0,0,0,0,0,0,100,4,171,1,0,0,0, + 0,0,0,130,1,116,11,0,0,0,0,0,0,0,0,124, + 3,100,5,124,1,171,3,0,0,0,0,0,0,125,4,124, + 4,124,1,100,1,102,2,118,0,114,54,124,2,128,24,124, + 4,124,1,117,0,114,6,116,12,0,0,0,0,0,0,0, + 0,110,5,116,8,0,0,0,0,0,0,0,0,125,5,2, + 0,124,5,100,4,171,1,0,0,0,0,0,0,130,1,116, + 15,0,0,0,0,0,0,0,0,106,16,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,100,4,116, + 18,0,0,0,0,0,0,0,0,171,2,0,0,0,0,0, + 0,1,0,124,2,125,4,124,4,128,2,74,0,130,1,124, + 2,129,33,124,2,124,4,107,55,0,0,114,28,116,15,0, + 0,0,0,0,0,0,0,106,16,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,100,6,116,18,0, + 0,0,0,0,0,0,0,171,2,0,0,0,0,0,0,1, + 0,124,2,83,0,124,4,83,0,41,7,122,67,72,101,108, + 112,101,114,32,102,117,110,99,116,105,111,110,32,102,111,114, + 32,95,119,97,114,110,105,110,103,115,46,99,10,10,32,32, + 32,32,83,101,101,32,71,72,35,57,55,56,53,48,32,102, + 111,114,32,100,101,116,97,105,108,115,46,10,32,32,32,32, + 78,218,10,95,95,108,111,97,100,101,114,95,95,218,8,95, + 95,115,112,101,99,95,95,122,43,77,111,100,117,108,101,32, + 103,108,111,98,97,108,115,32,105,115,32,109,105,115,115,105, + 110,103,32,97,32,95,95,115,112,101,99,95,95,46,108,111, + 97,100,101,114,114,4,1,0,0,122,45,77,111,100,117,108, + 101,32,103,108,111,98,97,108,115,59,32,95,95,108,111,97, + 100,101,114,95,95,32,33,61,32,95,95,115,112,101,99,95, + 95,46,108,111,97,100,101,114,41,10,114,232,0,0,0,218, + 4,100,105,99,116,218,6,111,98,106,101,99,116,218,3,103, + 101,116,114,138,0,0,0,114,201,0,0,0,218,14,65,116, + 116,114,105,98,117,116,101,69,114,114,111,114,114,126,0,0, + 0,114,127,0,0,0,114,128,0,0,0,41,6,218,14,109, + 111,100,117,108,101,95,103,108,111,98,97,108,115,218,7,109, + 105,115,115,105,110,103,114,4,1,0,0,114,16,1,0,0, + 218,11,115,112,101,99,95,108,111,97,100,101,114,218,3,101, + 120,99,115,6,0,0,0,32,32,32,32,32,32,114,10,0, + 0,0,218,16,95,98,108,101,115,115,95,109,121,95,108,111, + 97,100,101,114,114,32,1,0,0,104,3,0,0,115,232,0, + 0,0,128,0,244,24,0,12,22,144,110,164,100,212,11,43, + 216,15,19,228,14,20,139,104,128,71,216,13,27,215,13,31, + 209,13,31,160,12,168,100,211,13,51,128,70,216,11,25,215, + 11,29,209,11,29,152,106,168,39,211,11,50,128,68,224,7, + 13,128,126,216,11,15,144,55,137,63,240,6,0,20,24,216, + 13,17,136,92,220,18,28,208,29,74,211,18,75,208,12,75, + 228,18,25,152,36,160,8,168,39,211,18,50,128,75,224,7, + 18,144,119,160,4,144,111,209,7,37,216,11,17,136,62,216, + 36,47,176,55,209,36,58,149,46,196,10,136,67,217,18,21, + 208,22,67,211,18,68,208,12,68,220,8,17,143,14,137,14, + 216,12,57,220,12,30,244,5,2,9,32,240,6,0,23,29, + 136,11,224,11,22,208,11,34,208,4,34,208,11,34,216,7, + 13,208,7,25,152,102,168,11,210,30,51,220,8,17,143,14, + 137,14,216,12,59,220,12,30,244,5,2,9,32,240,6,0, + 16,22,136,13,224,11,22,208,4,22,114,28,0,0,0,99, + 0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0, + 0,0,0,0,243,90,0,0,0,151,0,101,0,90,1,100, + 0,90,2,100,1,90,3,100,2,90,4,100,3,90,5,101, + 6,120,1,114,4,1,0,100,4,101,7,118,0,90,8,101, + 9,100,5,132,0,171,0,0,0,0,0,0,0,90,10,101, + 11,100,6,132,0,171,0,0,0,0,0,0,0,90,12,101, + 11,100,9,100,8,132,1,171,0,0,0,0,0,0,0,90, + 13,121,7,41,10,218,21,87,105,110,100,111,119,115,82,101, + 103,105,115,116,114,121,70,105,110,100,101,114,122,62,77,101, + 116,97,32,112,97,116,104,32,102,105,110,100,101,114,32,102, + 111,114,32,109,111,100,117,108,101,115,32,100,101,99,108,97, + 114,101,100,32,105,110,32,116,104,101,32,87,105,110,100,111, + 119,115,32,114,101,103,105,115,116,114,121,46,122,59,83,111, + 102,116,119,97,114,101,92,80,121,116,104,111,110,92,80,121, + 116,104,111,110,67,111,114,101,92,123,115,121,115,95,118,101, + 114,115,105,111,110,125,92,77,111,100,117,108,101,115,92,123, + 102,117,108,108,110,97,109,101,125,122,65,83,111,102,116,119, + 97,114,101,92,80,121,116,104,111,110,92,80,121,116,104,111, + 110,67,111,114,101,92,123,115,121,115,95,118,101,114,115,105, + 111,110,125,92,77,111,100,117,108,101,115,92,123,102,117,108, + 108,110,97,109,101,125,92,68,101,98,117,103,122,6,95,100, + 46,112,121,100,99,1,0,0,0,0,0,0,0,0,0,0, + 0,5,0,0,0,3,0,0,0,243,178,0,0,0,151,0, + 9,0,116,1,0,0,0,0,0,0,0,0,106,2,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,103,0,107,40,0,0,114,43,124,1,114,41,116,35,0, - 0,0,0,0,0,0,0,124,1,171,1,0,0,0,0,0, - 0,100,7,25,0,0,0,125,8,124,4,106,32,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,106, - 37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,124,8,171,1,0,0,0,0,0,0,1,0,124, - 4,83,0,35,0,116,4,0,0,0,0,0,0,0,0,36, - 0,114,3,1,0,89,0,140,222,119,0,120,3,89,0,119, - 1,35,0,116,12,0,0,0,0,0,0,0,0,36,0,114, - 3,1,0,89,0,140,237,119,0,120,3,89,0,119,1,35, - 0,116,4,0,0,0,0,0,0,0,0,36,0,114,3,1, - 0,89,0,140,101,119,0,120,3,89,0,119,1,41,8,97, - 61,1,0,0,82,101,116,117,114,110,32,97,32,109,111,100, - 117,108,101,32,115,112,101,99,32,98,97,115,101,100,32,111, - 110,32,97,32,102,105,108,101,32,108,111,99,97,116,105,111, - 110,46,10,10,32,32,32,32,84,111,32,105,110,100,105,99, - 97,116,101,32,116,104,97,116,32,116,104,101,32,109,111,100, - 117,108,101,32,105,115,32,97,32,112,97,99,107,97,103,101, - 44,32,115,101,116,10,32,32,32,32,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,32,116,111,32,97,32,108,105,115,116,32,111, - 102,32,100,105,114,101,99,116,111,114,121,32,112,97,116,104, - 115,46,32,32,65,110,10,32,32,32,32,101,109,112,116,121, - 32,108,105,115,116,32,105,115,32,115,117,102,102,105,99,105, - 101,110,116,44,32,116,104,111,117,103,104,32,105,116,115,32, - 110,111,116,32,111,116,104,101,114,119,105,115,101,32,117,115, - 101,102,117,108,32,116,111,32,116,104,101,10,32,32,32,32, - 105,109,112,111,114,116,32,115,121,115,116,101,109,46,10,10, - 32,32,32,32,84,104,101,32,108,111,97,100,101,114,32,109, - 117,115,116,32,116,97,107,101,32,97,32,115,112,101,99,32, - 97,115,32,105,116,115,32,111,110,108,121,32,95,95,105,110, - 105,116,95,95,40,41,32,97,114,103,46,10,10,32,32,32, - 32,78,122,9,60,117,110,107,110,111,119,110,62,218,12,103, - 101,116,95,102,105,108,101,110,97,109,101,169,1,218,6,111, - 114,105,103,105,110,84,218,10,105,115,95,112,97,99,107,97, - 103,101,114,1,0,0,0,41,19,114,199,0,0,0,114,7, - 1,0,0,114,188,0,0,0,114,23,0,0,0,114,130,0, - 0,0,114,105,0,0,0,114,87,0,0,0,114,207,0,0, - 0,218,10,77,111,100,117,108,101,83,112,101,99,218,13,95, - 115,101,116,95,102,105,108,101,97,116,116,114,218,27,95,103, - 101,116,95,115,117,112,112,111,114,116,101,100,95,102,105,108, - 101,95,108,111,97,100,101,114,115,114,59,0,0,0,114,179, - 0,0,0,114,4,1,0,0,218,9,95,80,79,80,85,76, - 65,84,69,114,10,1,0,0,114,5,1,0,0,114,81,0, - 0,0,114,64,0,0,0,41,9,114,187,0,0,0,218,8, - 108,111,99,97,116,105,111,110,114,4,1,0,0,114,5,1, - 0,0,218,4,115,112,101,99,218,12,108,111,97,100,101,114, - 95,99,108,97,115,115,218,8,115,117,102,102,105,120,101,115, - 114,10,1,0,0,218,7,100,105,114,110,97,109,101,115,9, - 0,0,0,32,32,32,32,32,32,32,32,32,114,10,0,0, - 0,218,23,115,112,101,99,95,102,114,111,109,95,102,105,108, - 101,95,108,111,99,97,116,105,111,110,114,20,1,0,0,34, - 3,0,0,115,109,1,0,0,128,0,240,24,0,8,16,208, - 7,23,240,8,0,20,31,136,8,220,11,18,144,54,152,62, - 212,11,42,240,4,3,13,21,216,27,33,215,27,46,209,27, - 46,168,116,211,27,52,145,8,244,8,0,20,23,151,58,145, - 58,152,104,211,19,39,136,8,240,2,3,9,17,220,23,36, - 160,88,211,23,46,136,72,244,20,0,12,22,215,11,32,209, - 11,32,160,20,160,118,176,104,208,11,32,211,11,63,128,68, - 216,25,29,128,68,212,4,22,240,6,0,8,14,128,126,220, - 38,65,211,38,67,242,0,6,9,24,209,12,34,136,76,152, - 40,216,15,23,215,15,32,209,15,32,164,21,160,120,163,31, - 213,15,49,217,25,37,160,100,168,72,211,25,53,144,6,216, - 30,36,144,4,148,11,217,16,21,240,9,6,9,24,240,12, - 0,20,24,240,6,0,8,34,164,89,209,7,46,228,11,18, - 144,54,152,60,212,11,40,240,2,6,13,57,216,29,35,215, - 29,46,209,29,46,168,116,211,29,52,144,10,241,8,0,20, - 30,216,54,56,144,68,213,20,51,224,42,68,136,4,212,8, - 39,216,7,11,215,7,38,209,7,38,168,34,210,7,44,217, - 11,19,220,22,33,160,40,211,22,43,168,65,209,22,46,136, - 71,216,12,16,215,12,43,209,12,43,215,12,50,209,12,50, - 176,55,212,12,59,224,11,15,128,75,248,244,93,1,0,20, - 31,242,0,1,13,21,217,16,20,240,3,1,13,21,251,244, - 12,0,16,23,242,0,1,9,17,217,12,16,240,3,1,9, - 17,251,244,56,0,20,31,242,0,1,13,21,217,16,20,240, - 3,1,13,21,250,115,52,0,0,0,146,17,68,24,0,186, - 11,68,39,0,194,58,17,68,54,0,196,24,9,68,36,3, - 196,35,1,68,36,3,196,39,9,68,51,3,196,50,1,68, - 51,3,196,54,9,69,2,3,197,1,1,69,2,3,99,1, - 0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,3, - 0,0,0,243,140,1,0,0,151,0,116,1,0,0,0,0, - 0,0,0,0,124,0,116,2,0,0,0,0,0,0,0,0, - 171,2,0,0,0,0,0,0,115,1,121,1,116,5,0,0, - 0,0,0,0,0,0,171,0,0,0,0,0,0,0,125,1, - 124,0,106,7,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,100,2,100,1,171,2,0,0,0,0, - 0,0,125,2,124,0,106,7,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,100,3,124,1,171,2, - 0,0,0,0,0,0,125,3,124,2,128,18,124,3,124,1, - 117,0,114,1,121,1,124,3,128,11,116,9,0,0,0,0, - 0,0,0,0,100,4,171,1,0,0,0,0,0,0,130,1, - 116,11,0,0,0,0,0,0,0,0,124,3,100,5,124,1, - 171,3,0,0,0,0,0,0,125,4,124,4,124,1,100,1, - 102,2,118,0,114,54,124,2,128,24,124,4,124,1,117,0, - 114,6,116,12,0,0,0,0,0,0,0,0,110,5,116,8, - 0,0,0,0,0,0,0,0,125,5,2,0,124,5,100,4, - 171,1,0,0,0,0,0,0,130,1,116,15,0,0,0,0, - 0,0,0,0,106,16,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,100,4,116,18,0,0,0,0, - 0,0,0,0,171,2,0,0,0,0,0,0,1,0,124,2, - 125,4,124,4,128,2,74,0,130,1,124,2,129,33,124,2, - 124,4,107,55,0,0,114,28,116,15,0,0,0,0,0,0, + 116,0,0,0,0,0,0,0,0,0,106,4,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,124,0, + 171,2,0,0,0,0,0,0,83,0,35,0,116,6,0,0, + 0,0,0,0,0,0,36,0,114,39,1,0,116,1,0,0, + 0,0,0,0,0,0,106,2,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,116,0,0,0,0,0, + 0,0,0,0,106,8,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,124,0,171,2,0,0,0,0, + 0,0,99,2,89,0,83,0,119,0,120,3,89,0,119,1, + 114,77,0,0,0,41,5,218,6,119,105,110,114,101,103,218, + 7,79,112,101,110,75,101,121,218,17,72,75,69,89,95,67, + 85,82,82,69,78,84,95,85,83,69,82,114,87,0,0,0, + 218,18,72,75,69,89,95,76,79,67,65,76,95,77,65,67, + 72,73,78,69,114,25,0,0,0,115,1,0,0,0,32,114, + 10,0,0,0,218,14,95,111,112,101,110,95,114,101,103,105, + 115,116,114,121,122,36,87,105,110,100,111,119,115,82,101,103, + 105,115,116,114,121,70,105,110,100,101,114,46,95,111,112,101, + 110,95,114,101,103,105,115,116,114,121,166,3,0,0,115,71, + 0,0,0,128,0,240,4,3,9,66,1,220,19,25,151,62, + 145,62,164,38,215,34,58,209,34,58,184,67,211,19,64,208, + 12,64,248,220,15,22,242,0,1,9,66,1,220,19,25,151, + 62,145,62,164,38,215,34,59,209,34,59,184,83,211,19,65, + 210,12,65,240,3,1,9,66,1,250,115,15,0,0,0,130, + 35,38,0,166,45,65,22,3,193,21,1,65,22,3,99,2, + 0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,3, + 0,0,0,243,56,1,0,0,151,0,124,0,106,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 114,13,124,0,106,2,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,125,2,110,12,124,0,106,4, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,125,2,124,2,106,7,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,124,1,100,1,116,8, + 0,0,0,0,0,0,0,0,106,10,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,100,0,100,2, + 26,0,122,6,0,0,172,3,171,2,0,0,0,0,0,0, + 125,3,9,0,124,0,106,13,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,124,3,171,1,0,0, + 0,0,0,0,53,0,125,4,116,15,0,0,0,0,0,0, 0,0,106,16,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,100,6,116,18,0,0,0,0,0,0, - 0,0,171,2,0,0,0,0,0,0,1,0,124,2,83,0, - 124,4,83,0,41,7,122,67,72,101,108,112,101,114,32,102, - 117,110,99,116,105,111,110,32,102,111,114,32,95,119,97,114, - 110,105,110,103,115,46,99,10,10,32,32,32,32,83,101,101, - 32,71,72,35,57,55,56,53,48,32,102,111,114,32,100,101, - 116,97,105,108,115,46,10,32,32,32,32,78,218,10,95,95, - 108,111,97,100,101,114,95,95,218,8,95,95,115,112,101,99, - 95,95,122,43,77,111,100,117,108,101,32,103,108,111,98,97, - 108,115,32,105,115,32,109,105,115,115,105,110,103,32,97,32, - 95,95,115,112,101,99,95,95,46,108,111,97,100,101,114,114, - 4,1,0,0,122,45,77,111,100,117,108,101,32,103,108,111, - 98,97,108,115,59,32,95,95,108,111,97,100,101,114,95,95, - 32,33,61,32,95,95,115,112,101,99,95,95,46,108,111,97, - 100,101,114,41,10,114,232,0,0,0,218,4,100,105,99,116, - 218,6,111,98,106,101,99,116,218,3,103,101,116,114,138,0, - 0,0,114,201,0,0,0,218,14,65,116,116,114,105,98,117, - 116,101,69,114,114,111,114,114,126,0,0,0,114,127,0,0, - 0,114,128,0,0,0,41,6,218,14,109,111,100,117,108,101, - 95,103,108,111,98,97,108,115,218,7,109,105,115,115,105,110, - 103,114,4,1,0,0,114,16,1,0,0,218,11,115,112,101, - 99,95,108,111,97,100,101,114,218,3,101,120,99,115,6,0, - 0,0,32,32,32,32,32,32,114,10,0,0,0,218,16,95, - 98,108,101,115,115,95,109,121,95,108,111,97,100,101,114,114, - 32,1,0,0,104,3,0,0,115,229,0,0,0,128,0,244, - 24,0,12,22,144,110,164,100,212,11,43,216,15,19,228,14, - 20,139,104,128,71,216,13,27,215,13,31,209,13,31,160,12, - 168,100,211,13,51,128,70,216,11,25,215,11,29,209,11,29, - 152,106,168,39,211,11,50,128,68,224,7,13,128,126,216,11, - 15,144,55,137,63,240,6,0,20,24,216,13,17,136,92,220, - 18,28,208,29,74,211,18,75,208,12,75,228,18,25,152,36, - 160,8,168,39,211,18,50,128,75,224,7,18,144,119,160,4, - 144,111,209,7,37,216,11,17,136,62,216,36,47,176,55,209, - 36,58,149,46,196,10,136,67,217,18,21,208,22,67,211,18, - 68,208,12,68,220,8,17,143,14,137,14,216,12,57,220,12, - 30,244,5,2,9,32,240,6,0,23,29,136,11,224,11,22, - 208,11,34,209,4,34,216,7,13,208,7,25,152,102,168,11, - 210,30,51,220,8,17,143,14,137,14,216,12,59,220,12,30, - 244,5,2,9,32,240,6,0,16,22,136,13,224,11,22,208, - 4,22,114,28,0,0,0,99,0,0,0,0,0,0,0,0, - 0,0,0,0,3,0,0,0,0,0,0,0,243,90,0,0, - 0,151,0,101,0,90,1,100,0,90,2,100,1,90,3,100, - 2,90,4,100,3,90,5,101,6,120,1,114,4,1,0,100, - 4,101,7,118,0,90,8,101,9,100,5,132,0,171,0,0, - 0,0,0,0,0,90,10,101,11,100,6,132,0,171,0,0, - 0,0,0,0,0,90,12,101,11,100,9,100,8,132,1,171, - 0,0,0,0,0,0,0,90,13,121,7,41,10,218,21,87, - 105,110,100,111,119,115,82,101,103,105,115,116,114,121,70,105, - 110,100,101,114,122,62,77,101,116,97,32,112,97,116,104,32, - 102,105,110,100,101,114,32,102,111,114,32,109,111,100,117,108, - 101,115,32,100,101,99,108,97,114,101,100,32,105,110,32,116, - 104,101,32,87,105,110,100,111,119,115,32,114,101,103,105,115, - 116,114,121,46,122,59,83,111,102,116,119,97,114,101,92,80, - 121,116,104,111,110,92,80,121,116,104,111,110,67,111,114,101, - 92,123,115,121,115,95,118,101,114,115,105,111,110,125,92,77, - 111,100,117,108,101,115,92,123,102,117,108,108,110,97,109,101, - 125,122,65,83,111,102,116,119,97,114,101,92,80,121,116,104, - 111,110,92,80,121,116,104,111,110,67,111,114,101,92,123,115, - 121,115,95,118,101,114,115,105,111,110,125,92,77,111,100,117, - 108,101,115,92,123,102,117,108,108,110,97,109,101,125,92,68, - 101,98,117,103,122,6,95,100,46,112,121,100,99,1,0,0, - 0,0,0,0,0,0,0,0,0,5,0,0,0,3,0,0, - 0,243,178,0,0,0,151,0,9,0,116,1,0,0,0,0, - 0,0,0,0,106,2,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,116,0,0,0,0,0,0,0, - 0,0,106,4,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,124,0,171,2,0,0,0,0,0,0, - 83,0,35,0,116,6,0,0,0,0,0,0,0,0,36,0, - 114,39,1,0,116,1,0,0,0,0,0,0,0,0,106,2, + 0,0,0,0,0,0,124,4,100,4,171,2,0,0,0,0, + 0,0,125,5,100,0,100,0,100,0,171,2,0,0,0,0, + 0,0,1,0,124,5,83,0,35,0,49,0,115,1,119,2, + 1,0,89,0,1,0,1,0,127,5,83,0,120,3,89,0, + 119,1,35,0,116,18,0,0,0,0,0,0,0,0,36,0, + 114,3,1,0,89,0,121,0,119,0,120,3,89,0,119,1, + 41,5,78,122,5,37,100,46,37,100,114,52,0,0,0,41, + 2,218,8,102,117,108,108,110,97,109,101,218,11,115,121,115, + 95,118,101,114,115,105,111,110,114,12,0,0,0,41,10,218, + 11,68,69,66,85,71,95,66,85,73,76,68,218,18,82,69, + 71,73,83,84,82,89,95,75,69,89,95,68,69,66,85,71, + 218,12,82,69,71,73,83,84,82,89,95,75,69,89,218,6, + 102,111,114,109,97,116,114,20,0,0,0,218,12,118,101,114, + 115,105,111,110,95,105,110,102,111,114,40,1,0,0,114,36, + 1,0,0,218,10,81,117,101,114,121,86,97,108,117,101,114, + 87,0,0,0,41,6,218,3,99,108,115,114,42,1,0,0, + 218,12,114,101,103,105,115,116,114,121,95,107,101,121,114,26, + 0,0,0,218,4,104,107,101,121,218,8,102,105,108,101,112, + 97,116,104,115,6,0,0,0,32,32,32,32,32,32,114,10, + 0,0,0,218,16,95,115,101,97,114,99,104,95,114,101,103, + 105,115,116,114,121,122,38,87,105,110,100,111,119,115,82,101, + 103,105,115,116,114,121,70,105,110,100,101,114,46,95,115,101, + 97,114,99,104,95,114,101,103,105,115,116,114,121,173,3,0, + 0,115,164,0,0,0,128,0,224,11,14,143,63,138,63,216, + 27,30,215,27,49,209,27,49,137,76,224,27,30,215,27,43, + 209,27,43,136,76,216,14,26,215,14,33,209,14,33,168,56, + 216,46,53,188,3,215,56,72,209,56,72,200,18,200,33,208, + 56,76,209,46,76,240,3,0,15,34,243,0,1,15,78,1, + 136,3,240,4,4,9,24,216,17,20,215,17,35,209,17,35, + 160,67,211,17,40,240,0,1,13,55,168,68,220,27,33,215, + 27,44,209,27,44,168,84,176,50,211,27,54,144,8,247,3, + 1,13,55,240,8,0,16,24,136,15,247,9,1,13,55,240, + 8,0,16,24,136,15,251,244,5,0,16,23,242,0,1,9, + 24,217,19,23,240,3,1,9,24,250,115,48,0,0,0,193, + 14,17,66,13,0,193,31,23,66,0,3,193,54,8,66,13, + 0,194,0,5,66,10,7,194,5,3,66,13,0,194,10,3, + 66,13,0,194,13,9,66,25,3,194,24,1,66,25,3,78, + 99,4,0,0,0,0,0,0,0,0,0,0,0,8,0,0, + 0,3,0,0,0,243,0,1,0,0,151,0,124,0,106,1, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,116,0,0,0,0,0,0,0,0,0,106,8,0,0, + 0,0,124,1,171,1,0,0,0,0,0,0,125,4,124,4, + 128,1,121,0,9,0,116,3,0,0,0,0,0,0,0,0, + 124,4,171,1,0,0,0,0,0,0,1,0,116,7,0,0, + 0,0,0,0,0,0,171,0,0,0,0,0,0,0,68,0, + 93,66,0,0,92,2,0,0,125,5,125,6,124,4,106,9, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 124,0,171,2,0,0,0,0,0,0,99,2,89,0,83,0, - 119,0,120,3,89,0,119,1,114,77,0,0,0,41,5,218, - 6,119,105,110,114,101,103,218,7,79,112,101,110,75,101,121, - 218,17,72,75,69,89,95,67,85,82,82,69,78,84,95,85, - 83,69,82,114,87,0,0,0,218,18,72,75,69,89,95,76, - 79,67,65,76,95,77,65,67,72,73,78,69,114,25,0,0, - 0,115,1,0,0,0,32,114,10,0,0,0,218,14,95,111, - 112,101,110,95,114,101,103,105,115,116,114,121,122,36,87,105, - 110,100,111,119,115,82,101,103,105,115,116,114,121,70,105,110, - 100,101,114,46,95,111,112,101,110,95,114,101,103,105,115,116, - 114,121,166,3,0,0,115,71,0,0,0,128,0,240,4,3, - 9,66,1,220,19,25,151,62,145,62,164,38,215,34,58,209, - 34,58,184,67,211,19,64,208,12,64,248,220,15,22,242,0, - 1,9,66,1,220,19,25,151,62,145,62,164,38,215,34,59, - 209,34,59,184,83,211,19,65,210,12,65,240,3,1,9,66, - 1,250,115,15,0,0,0,130,35,38,0,166,45,65,22,3, - 193,21,1,65,22,3,99,2,0,0,0,0,0,0,0,0, - 0,0,0,7,0,0,0,3,0,0,0,243,56,1,0,0, - 151,0,124,0,106,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,114,13,124,0,106,2,0,0, + 0,0,116,11,0,0,0,0,0,0,0,0,124,6,171,1, + 0,0,0,0,0,0,171,1,0,0,0,0,0,0,115,1, + 140,33,116,12,0,0,0,0,0,0,0,0,106,15,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 125,2,110,12,124,0,106,4,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,125,2,124,2,106,7, + 124,1,2,0,124,5,124,1,124,4,171,2,0,0,0,0, + 0,0,124,4,172,1,171,3,0,0,0,0,0,0,125,7, + 124,7,99,2,1,0,83,0,4,0,121,0,35,0,116,4, + 0,0,0,0,0,0,0,0,36,0,114,3,1,0,89,0, + 121,0,119,0,120,3,89,0,119,1,41,2,78,114,8,1, + 0,0,41,8,114,54,1,0,0,114,85,0,0,0,114,87, + 0,0,0,114,13,1,0,0,114,59,0,0,0,114,179,0, + 0,0,114,207,0,0,0,218,16,115,112,101,99,95,102,114, + 111,109,95,108,111,97,100,101,114,41,8,114,50,1,0,0, + 114,42,1,0,0,114,68,0,0,0,218,6,116,97,114,103, + 101,116,114,53,1,0,0,114,4,1,0,0,114,18,1,0, + 0,114,16,1,0,0,115,8,0,0,0,32,32,32,32,32, + 32,32,32,114,10,0,0,0,218,9,102,105,110,100,95,115, + 112,101,99,122,31,87,105,110,100,111,119,115,82,101,103,105, + 115,116,114,121,70,105,110,100,101,114,46,102,105,110,100,95, + 115,112,101,99,188,3,0,0,115,147,0,0,0,128,0,224, + 19,22,215,19,39,209,19,39,168,8,211,19,49,136,8,216, + 11,19,208,11,27,216,19,23,240,2,3,9,24,220,12,22, + 144,120,212,12,32,244,6,0,33,60,211,32,61,242,0,5, + 9,28,209,12,28,136,70,144,72,216,15,23,215,15,32,209, + 15,32,164,21,160,120,163,31,213,15,49,220,23,33,215,23, + 50,209,23,50,176,56,217,51,57,184,40,192,72,211,51,77, + 216,58,66,240,5,0,24,51,243,0,2,24,68,1,144,4, + 240,6,0,24,28,146,11,241,11,5,9,28,248,244,5,0, + 16,23,242,0,1,9,24,217,19,23,240,3,1,9,24,250, + 115,17,0,0,0,150,11,65,49,0,193,49,9,65,61,3, + 193,60,1,65,61,3,169,2,78,78,41,14,114,196,0,0, + 0,114,195,0,0,0,114,197,0,0,0,114,198,0,0,0, + 114,46,1,0,0,114,45,1,0,0,218,11,95,77,83,95, + 87,73,78,68,79,87,83,218,18,69,88,84,69,78,83,73, + 79,78,95,83,85,70,70,73,88,69,83,114,44,1,0,0, + 218,12,115,116,97,116,105,99,109,101,116,104,111,100,114,40, + 1,0,0,218,11,99,108,97,115,115,109,101,116,104,111,100, + 114,54,1,0,0,114,58,1,0,0,114,30,0,0,0,114, + 28,0,0,0,114,10,0,0,0,114,34,1,0,0,114,34, + 1,0,0,154,3,0,0,115,103,0,0,0,132,0,225,4, + 72,240,6,1,9,32,240,3,0,5,17,240,8,1,9,39, + 240,3,0,5,23,240,6,0,20,31,210,19,65,160,56,208, + 47,65,208,35,65,128,75,224,5,17,241,2,4,5,66,1, + 243,3,0,6,18,240,2,4,5,66,1,240,12,0,6,17, + 241,2,12,5,24,243,3,0,6,17,240,2,12,5,24,240, + 28,0,6,17,242,2,13,5,28,243,3,0,6,17,241,2, + 13,5,28,114,28,0,0,0,114,34,1,0,0,99,0,0, + 0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0, + 0,0,243,40,0,0,0,151,0,101,0,90,1,100,0,90, + 2,100,1,90,3,100,2,132,0,90,4,100,3,132,0,90, + 5,100,4,132,0,90,6,100,5,132,0,90,7,121,6,41, + 7,218,13,95,76,111,97,100,101,114,66,97,115,105,99,115, + 122,83,66,97,115,101,32,99,108,97,115,115,32,111,102,32, + 99,111,109,109,111,110,32,99,111,100,101,32,110,101,101,100, + 101,100,32,98,121,32,98,111,116,104,32,83,111,117,114,99, + 101,76,111,97,100,101,114,32,97,110,100,10,32,32,32,32, + 83,111,117,114,99,101,108,101,115,115,70,105,108,101,76,111, + 97,100,101,114,46,99,2,0,0,0,0,0,0,0,0,0, + 0,0,5,0,0,0,3,0,0,0,243,166,0,0,0,151, + 0,116,1,0,0,0,0,0,0,0,0,124,0,106,3,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,124,1,100,1,116,8,0,0,0,0,0,0,0,0, - 106,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,100,0,100,2,26,0,122,6,0,0,172,3, - 171,2,0,0,0,0,0,0,125,3,9,0,124,0,106,13, + 0,124,1,171,1,0,0,0,0,0,0,171,1,0,0,0, + 0,0,0,100,1,25,0,0,0,125,2,124,2,106,5,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,124,3,171,1,0,0,0,0,0,0,53,0,125,4, - 116,15,0,0,0,0,0,0,0,0,106,16,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,124,4, - 100,4,171,2,0,0,0,0,0,0,125,5,100,0,100,0, - 100,0,171,2,0,0,0,0,0,0,1,0,124,5,83,0, - 35,0,49,0,115,1,119,2,1,0,89,0,1,0,1,0, - 127,5,83,0,120,3,89,0,119,1,35,0,116,18,0,0, - 0,0,0,0,0,0,36,0,114,3,1,0,89,0,121,0, - 119,0,120,3,89,0,119,1,41,5,78,122,5,37,100,46, - 37,100,114,52,0,0,0,41,2,218,8,102,117,108,108,110, - 97,109,101,218,11,115,121,115,95,118,101,114,115,105,111,110, - 114,12,0,0,0,41,10,218,11,68,69,66,85,71,95,66, - 85,73,76,68,218,18,82,69,71,73,83,84,82,89,95,75, - 69,89,95,68,69,66,85,71,218,12,82,69,71,73,83,84, - 82,89,95,75,69,89,218,6,102,111,114,109,97,116,114,20, - 0,0,0,218,12,118,101,114,115,105,111,110,95,105,110,102, - 111,114,40,1,0,0,114,36,1,0,0,218,10,81,117,101, - 114,121,86,97,108,117,101,114,87,0,0,0,41,6,218,3, - 99,108,115,114,42,1,0,0,218,12,114,101,103,105,115,116, - 114,121,95,107,101,121,114,26,0,0,0,218,4,104,107,101, - 121,218,8,102,105,108,101,112,97,116,104,115,6,0,0,0, - 32,32,32,32,32,32,114,10,0,0,0,218,16,95,115,101, - 97,114,99,104,95,114,101,103,105,115,116,114,121,122,38,87, - 105,110,100,111,119,115,82,101,103,105,115,116,114,121,70,105, - 110,100,101,114,46,95,115,101,97,114,99,104,95,114,101,103, - 105,115,116,114,121,173,3,0,0,115,164,0,0,0,128,0, - 224,11,14,143,63,138,63,216,27,30,215,27,49,209,27,49, - 137,76,224,27,30,215,27,43,209,27,43,136,76,216,14,26, - 215,14,33,209,14,33,168,56,216,46,53,188,3,215,56,72, - 209,56,72,200,18,200,33,208,56,76,209,46,76,240,3,0, - 15,34,243,0,1,15,78,1,136,3,240,4,4,9,24,216, - 17,20,215,17,35,209,17,35,160,67,211,17,40,240,0,1, - 13,55,168,68,220,27,33,215,27,44,209,27,44,168,84,176, - 50,211,27,54,144,8,247,3,1,13,55,240,8,0,16,24, - 136,15,247,9,1,13,55,240,8,0,16,24,136,15,251,244, - 5,0,16,23,242,0,1,9,24,217,19,23,240,3,1,9, - 24,250,115,48,0,0,0,193,14,17,66,13,0,193,31,23, - 66,0,3,193,54,8,66,13,0,194,0,5,66,10,7,194, - 5,3,66,13,0,194,10,3,66,13,0,194,13,9,66,25, - 3,194,24,1,66,25,3,78,99,4,0,0,0,0,0,0, - 0,0,0,0,0,8,0,0,0,3,0,0,0,243,0,1, - 0,0,151,0,124,0,106,1,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,124,1,171,1,0,0, - 0,0,0,0,125,4,124,4,128,1,121,0,9,0,116,3, - 0,0,0,0,0,0,0,0,124,4,171,1,0,0,0,0, - 0,0,1,0,116,7,0,0,0,0,0,0,0,0,171,0, - 0,0,0,0,0,0,68,0,93,66,0,0,92,2,0,0, - 125,5,125,6,124,4,106,9,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,116,11,0,0,0,0, - 0,0,0,0,124,6,171,1,0,0,0,0,0,0,171,1, - 0,0,0,0,0,0,115,1,140,33,116,12,0,0,0,0, - 0,0,0,0,106,15,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,124,1,2,0,124,5,124,1, - 124,4,171,2,0,0,0,0,0,0,124,4,172,1,171,3, - 0,0,0,0,0,0,125,7,124,7,99,2,1,0,83,0, - 4,0,121,0,35,0,116,4,0,0,0,0,0,0,0,0, - 36,0,114,3,1,0,89,0,121,0,119,0,120,3,89,0, - 119,1,41,2,78,114,8,1,0,0,41,8,114,54,1,0, - 0,114,85,0,0,0,114,87,0,0,0,114,13,1,0,0, - 114,59,0,0,0,114,179,0,0,0,114,207,0,0,0,218, - 16,115,112,101,99,95,102,114,111,109,95,108,111,97,100,101, - 114,41,8,114,50,1,0,0,114,42,1,0,0,114,68,0, - 0,0,218,6,116,97,114,103,101,116,114,53,1,0,0,114, - 4,1,0,0,114,18,1,0,0,114,16,1,0,0,115,8, - 0,0,0,32,32,32,32,32,32,32,32,114,10,0,0,0, - 218,9,102,105,110,100,95,115,112,101,99,122,31,87,105,110, - 100,111,119,115,82,101,103,105,115,116,114,121,70,105,110,100, - 101,114,46,102,105,110,100,95,115,112,101,99,188,3,0,0, - 115,147,0,0,0,128,0,224,19,22,215,19,39,209,19,39, - 168,8,211,19,49,136,8,216,11,19,208,11,27,216,19,23, - 240,2,3,9,24,220,12,22,144,120,212,12,32,244,6,0, - 33,60,211,32,61,242,0,5,9,28,209,12,28,136,70,144, - 72,216,15,23,215,15,32,209,15,32,164,21,160,120,163,31, - 213,15,49,220,23,33,215,23,50,209,23,50,176,56,217,51, - 57,184,40,192,72,211,51,77,216,58,66,240,5,0,24,51, - 243,0,2,24,68,1,144,4,240,6,0,24,28,146,11,241, - 11,5,9,28,248,244,5,0,16,23,242,0,1,9,24,217, - 19,23,240,3,1,9,24,250,115,17,0,0,0,150,11,65, - 49,0,193,49,9,65,61,3,193,60,1,65,61,3,169,2, - 78,78,41,14,114,196,0,0,0,114,195,0,0,0,114,197, - 0,0,0,114,198,0,0,0,114,46,1,0,0,114,45,1, - 0,0,218,11,95,77,83,95,87,73,78,68,79,87,83,218, - 18,69,88,84,69,78,83,73,79,78,95,83,85,70,70,73, - 88,69,83,114,44,1,0,0,218,12,115,116,97,116,105,99, - 109,101,116,104,111,100,114,40,1,0,0,218,11,99,108,97, - 115,115,109,101,116,104,111,100,114,54,1,0,0,114,58,1, - 0,0,114,30,0,0,0,114,28,0,0,0,114,10,0,0, - 0,114,34,1,0,0,114,34,1,0,0,154,3,0,0,115, - 103,0,0,0,132,0,225,4,72,240,6,1,9,32,240,3, - 0,5,17,240,8,1,9,39,240,3,0,5,23,240,6,0, - 20,31,210,19,65,160,56,208,47,65,208,35,65,128,75,224, - 5,17,241,2,4,5,66,1,243,3,0,6,18,240,2,4, - 5,66,1,240,12,0,6,17,241,2,12,5,24,243,3,0, - 6,17,240,2,12,5,24,240,28,0,6,17,242,2,13,5, - 28,243,3,0,6,17,241,2,13,5,28,114,28,0,0,0, - 114,34,1,0,0,99,0,0,0,0,0,0,0,0,0,0, - 0,0,1,0,0,0,0,0,0,0,243,40,0,0,0,151, - 0,101,0,90,1,100,0,90,2,100,1,90,3,100,2,132, - 0,90,4,100,3,132,0,90,5,100,4,132,0,90,6,100, - 5,132,0,90,7,121,6,41,7,218,13,95,76,111,97,100, - 101,114,66,97,115,105,99,115,122,83,66,97,115,101,32,99, - 108,97,115,115,32,111,102,32,99,111,109,109,111,110,32,99, - 111,100,101,32,110,101,101,100,101,100,32,98,121,32,98,111, - 116,104,32,83,111,117,114,99,101,76,111,97,100,101,114,32, - 97,110,100,10,32,32,32,32,83,111,117,114,99,101,108,101, - 115,115,70,105,108,101,76,111,97,100,101,114,46,99,2,0, - 0,0,0,0,0,0,0,0,0,0,5,0,0,0,3,0, - 0,0,243,166,0,0,0,151,0,116,1,0,0,0,0,0, - 0,0,0,124,0,106,3,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,124,1,171,1,0,0,0, - 0,0,0,171,1,0,0,0,0,0,0,100,1,25,0,0, - 0,125,2,124,2,106,5,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,100,2,100,1,171,2,0, - 0,0,0,0,0,100,3,25,0,0,0,125,3,124,1,106, - 7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,100,2,171,1,0,0,0,0,0,0,100,4,25, - 0,0,0,125,4,124,3,100,5,107,40,0,0,120,1,114, - 5,1,0,124,4,100,5,107,55,0,0,83,0,41,6,122, - 141,67,111,110,99,114,101,116,101,32,105,109,112,108,101,109, - 101,110,116,97,116,105,111,110,32,111,102,32,73,110,115,112, - 101,99,116,76,111,97,100,101,114,46,105,115,95,112,97,99, - 107,97,103,101,32,98,121,32,99,104,101,99,107,105,110,103, - 32,105,102,10,32,32,32,32,32,32,32,32,116,104,101,32, - 112,97,116,104,32,114,101,116,117,114,110,101,100,32,98,121, - 32,103,101,116,95,102,105,108,101,110,97,109,101,32,104,97, - 115,32,97,32,102,105,108,101,110,97,109,101,32,111,102,32, - 39,95,95,105,110,105,116,95,95,46,112,121,39,46,114,6, - 0,0,0,114,103,0,0,0,114,1,0,0,0,114,52,0, - 0,0,218,8,95,95,105,110,105,116,95,95,41,4,114,81, - 0,0,0,114,7,1,0,0,114,157,0,0,0,114,131,0, - 0,0,41,5,114,189,0,0,0,114,42,1,0,0,114,151, - 0,0,0,218,13,102,105,108,101,110,97,109,101,95,98,97, - 115,101,218,9,116,97,105,108,95,110,97,109,101,115,5,0, - 0,0,32,32,32,32,32,114,10,0,0,0,114,10,1,0, - 0,122,24,95,76,111,97,100,101,114,66,97,115,105,99,115, - 46,105,115,95,112,97,99,107,97,103,101,210,3,0,0,115, - 93,0,0,0,128,0,244,6,0,20,31,152,116,215,31,48, - 209,31,48,176,24,211,31,58,211,19,59,184,65,209,19,62, - 136,8,216,24,32,159,15,153,15,168,3,168,81,211,24,47, - 176,1,209,24,50,136,13,216,20,28,215,20,39,209,20,39, - 168,3,211,20,44,168,81,209,20,47,136,9,216,15,28,160, - 10,209,15,42,210,15,70,168,121,184,74,209,47,70,208,8, - 70,114,28,0,0,0,99,2,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,3,0,0,0,243,4,0,0,0, - 151,0,121,1,169,2,122,42,85,115,101,32,100,101,102,97, - 117,108,116,32,115,101,109,97,110,116,105,99,115,32,102,111, - 114,32,109,111,100,117,108,101,32,99,114,101,97,116,105,111, - 110,46,78,114,30,0,0,0,169,2,114,189,0,0,0,114, - 16,1,0,0,115,2,0,0,0,32,32,114,10,0,0,0, - 218,13,99,114,101,97,116,101,95,109,111,100,117,108,101,122, - 27,95,76,111,97,100,101,114,66,97,115,105,99,115,46,99, - 114,101,97,116,101,95,109,111,100,117,108,101,218,3,0,0, - 243,2,0,0,0,129,0,114,28,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,186,0,0,0,151,0,124,0,106,1,0,0,0,0, + 0,100,2,100,1,171,2,0,0,0,0,0,0,100,3,25, + 0,0,0,125,3,124,1,106,7,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,100,2,171,1,0, + 0,0,0,0,0,100,4,25,0,0,0,125,4,124,3,100, + 5,107,40,0,0,120,1,114,5,1,0,124,4,100,5,107, + 55,0,0,83,0,41,6,122,141,67,111,110,99,114,101,116, + 101,32,105,109,112,108,101,109,101,110,116,97,116,105,111,110, + 32,111,102,32,73,110,115,112,101,99,116,76,111,97,100,101, + 114,46,105,115,95,112,97,99,107,97,103,101,32,98,121,32, + 99,104,101,99,107,105,110,103,32,105,102,10,32,32,32,32, + 32,32,32,32,116,104,101,32,112,97,116,104,32,114,101,116, + 117,114,110,101,100,32,98,121,32,103,101,116,95,102,105,108, + 101,110,97,109,101,32,104,97,115,32,97,32,102,105,108,101, + 110,97,109,101,32,111,102,32,39,95,95,105,110,105,116,95, + 95,46,112,121,39,46,114,6,0,0,0,114,103,0,0,0, + 114,1,0,0,0,114,52,0,0,0,218,8,95,95,105,110, + 105,116,95,95,41,4,114,81,0,0,0,114,7,1,0,0, + 114,157,0,0,0,114,131,0,0,0,41,5,114,189,0,0, + 0,114,42,1,0,0,114,151,0,0,0,218,13,102,105,108, + 101,110,97,109,101,95,98,97,115,101,218,9,116,97,105,108, + 95,110,97,109,101,115,5,0,0,0,32,32,32,32,32,114, + 10,0,0,0,114,10,1,0,0,122,24,95,76,111,97,100, + 101,114,66,97,115,105,99,115,46,105,115,95,112,97,99,107, + 97,103,101,210,3,0,0,115,93,0,0,0,128,0,244,6, + 0,20,31,152,116,215,31,48,209,31,48,176,24,211,31,58, + 211,19,59,184,65,209,19,62,136,8,216,24,32,159,15,153, + 15,168,3,168,81,211,24,47,176,1,209,24,50,136,13,216, + 20,28,215,20,39,209,20,39,168,3,211,20,44,168,81,209, + 20,47,136,9,216,15,28,160,10,209,15,42,210,15,70,168, + 121,184,74,209,47,70,208,8,70,114,28,0,0,0,99,2, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3, + 0,0,0,243,4,0,0,0,151,0,121,1,169,2,122,42, + 85,115,101,32,100,101,102,97,117,108,116,32,115,101,109,97, + 110,116,105,99,115,32,102,111,114,32,109,111,100,117,108,101, + 32,99,114,101,97,116,105,111,110,46,78,114,30,0,0,0, + 169,2,114,189,0,0,0,114,16,1,0,0,115,2,0,0, + 0,32,32,114,10,0,0,0,218,13,99,114,101,97,116,101, + 95,109,111,100,117,108,101,122,27,95,76,111,97,100,101,114, + 66,97,115,105,99,115,46,99,114,101,97,116,101,95,109,111, + 100,117,108,101,218,3,0,0,243,2,0,0,0,129,0,114, + 28,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,186,0,0,0,151,0, + 124,0,106,1,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,124,1,106,2,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,171,1,0,0, + 0,0,0,0,125,2,124,2,128,25,116,5,0,0,0,0, + 0,0,0,0,100,2,124,1,106,2,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,155,2,100,3, + 157,3,171,1,0,0,0,0,0,0,130,1,116,6,0,0, + 0,0,0,0,0,0,106,9,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,116,10,0,0,0,0, + 0,0,0,0,124,2,124,1,106,12,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,171,3,0,0, + 0,0,0,0,1,0,121,1,41,4,122,19,69,120,101,99, + 117,116,101,32,116,104,101,32,109,111,100,117,108,101,46,78, + 122,19,99,97,110,110,111,116,32,108,111,97,100,32,109,111, + 100,117,108,101,32,122,29,32,119,104,101,110,32,103,101,116, + 95,99,111,100,101,40,41,32,114,101,116,117,114,110,115,32, + 78,111,110,101,41,7,218,8,103,101,116,95,99,111,100,101, + 114,196,0,0,0,114,188,0,0,0,114,207,0,0,0,218, + 25,95,99,97,108,108,95,119,105,116,104,95,102,114,97,109, + 101,115,95,114,101,109,111,118,101,100,218,4,101,120,101,99, + 114,202,0,0,0,41,3,114,189,0,0,0,218,6,109,111, + 100,117,108,101,114,236,0,0,0,115,3,0,0,0,32,32, + 32,114,10,0,0,0,218,11,101,120,101,99,95,109,111,100, + 117,108,101,122,25,95,76,111,97,100,101,114,66,97,115,105, + 99,115,46,101,120,101,99,95,109,111,100,117,108,101,221,3, + 0,0,115,83,0,0,0,128,0,224,15,19,143,125,137,125, + 152,86,159,95,153,95,211,15,45,136,4,216,11,15,136,60, + 220,18,29,208,32,51,176,70,183,79,177,79,208,51,70,240, + 0,1,71,1,56,240,0,1,31,56,243,0,1,19,57,240, + 0,1,13,57,228,8,18,215,8,44,209,8,44,172,84,176, + 52,184,22,191,31,185,31,213,8,73,114,28,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,46,0,0,0,151,0,116,0,0,0,0, + 0,0,0,0,0,106,3,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,124,0,124,1,171,2,0, + 0,0,0,0,0,83,0,41,1,122,26,84,104,105,115,32, + 109,101,116,104,111,100,32,105,115,32,100,101,112,114,101,99, + 97,116,101,100,46,41,2,114,207,0,0,0,218,17,95,108, + 111,97,100,95,109,111,100,117,108,101,95,115,104,105,109,169, + 2,114,189,0,0,0,114,42,1,0,0,115,2,0,0,0, + 32,32,114,10,0,0,0,218,11,108,111,97,100,95,109,111, + 100,117,108,101,122,25,95,76,111,97,100,101,114,66,97,115, + 105,99,115,46,108,111,97,100,95,109,111,100,117,108,101,229, + 3,0,0,115,23,0,0,0,128,0,244,6,0,16,26,215, + 15,43,209,15,43,168,68,176,40,211,15,59,208,8,59,114, + 28,0,0,0,78,41,8,114,196,0,0,0,114,195,0,0, + 0,114,197,0,0,0,114,198,0,0,0,114,10,1,0,0, + 114,73,1,0,0,114,80,1,0,0,114,84,1,0,0,114, + 30,0,0,0,114,28,0,0,0,114,10,0,0,0,114,65, + 1,0,0,114,65,1,0,0,205,3,0,0,115,29,0,0, + 0,132,0,241,4,1,5,29,242,6,6,5,71,1,242,16, + 1,5,57,242,6,6,5,74,1,243,16,3,5,60,114,28, + 0,0,0,114,65,1,0,0,99,0,0,0,0,0,0,0, + 0,0,0,0,0,2,0,0,0,0,0,0,0,243,60,0, + 0,0,151,0,101,0,90,1,100,0,90,2,100,1,132,0, + 90,3,100,2,132,0,90,4,100,3,132,0,90,5,100,4, + 132,0,90,6,100,5,132,0,90,7,100,6,100,7,156,1, + 100,8,132,2,90,8,100,9,132,0,90,9,121,10,41,11, + 218,12,83,111,117,114,99,101,76,111,97,100,101,114,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,151,0,116,0,0,0,0,0, + 0,0,0,0,130,1,41,1,122,165,79,112,116,105,111,110, + 97,108,32,109,101,116,104,111,100,32,116,104,97,116,32,114, + 101,116,117,114,110,115,32,116,104,101,32,109,111,100,105,102, + 105,99,97,116,105,111,110,32,116,105,109,101,32,40,97,110, + 32,105,110,116,41,32,102,111,114,32,116,104,101,10,32,32, + 32,32,32,32,32,32,115,112,101,99,105,102,105,101,100,32, + 112,97,116,104,32,40,97,32,115,116,114,41,46,10,10,32, + 32,32,32,32,32,32,32,82,97,105,115,101,115,32,79,83, + 69,114,114,111,114,32,119,104,101,110,32,116,104,101,32,112, + 97,116,104,32,99,97,110,110,111,116,32,98,101,32,104,97, + 110,100,108,101,100,46,10,32,32,32,32,32,32,32,32,41, + 1,114,87,0,0,0,169,2,114,189,0,0,0,114,68,0, + 0,0,115,2,0,0,0,32,32,114,10,0,0,0,218,10, + 112,97,116,104,95,109,116,105,109,101,122,23,83,111,117,114, + 99,101,76,111,97,100,101,114,46,112,97,116,104,95,109,116, + 105,109,101,237,3,0,0,115,9,0,0,0,128,0,244,12, + 0,15,22,136,13,114,28,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, + 40,0,0,0,151,0,100,1,124,0,106,1,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,124,1, - 106,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,171,1,0,0,0,0,0,0,125,2,124,2, - 128,25,116,5,0,0,0,0,0,0,0,0,100,2,124,1, - 106,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,155,2,100,3,157,3,171,1,0,0,0,0, - 0,0,130,1,116,6,0,0,0,0,0,0,0,0,106,9, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,116,10,0,0,0,0,0,0,0,0,124,2,124,1, - 106,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,171,3,0,0,0,0,0,0,1,0,121,1, - 41,4,122,19,69,120,101,99,117,116,101,32,116,104,101,32, - 109,111,100,117,108,101,46,78,122,19,99,97,110,110,111,116, - 32,108,111,97,100,32,109,111,100,117,108,101,32,122,29,32, - 119,104,101,110,32,103,101,116,95,99,111,100,101,40,41,32, - 114,101,116,117,114,110,115,32,78,111,110,101,41,7,218,8, - 103,101,116,95,99,111,100,101,114,196,0,0,0,114,188,0, - 0,0,114,207,0,0,0,218,25,95,99,97,108,108,95,119, - 105,116,104,95,102,114,97,109,101,115,95,114,101,109,111,118, - 101,100,218,4,101,120,101,99,114,202,0,0,0,41,3,114, - 189,0,0,0,218,6,109,111,100,117,108,101,114,236,0,0, - 0,115,3,0,0,0,32,32,32,114,10,0,0,0,218,11, - 101,120,101,99,95,109,111,100,117,108,101,122,25,95,76,111, - 97,100,101,114,66,97,115,105,99,115,46,101,120,101,99,95, - 109,111,100,117,108,101,221,3,0,0,115,83,0,0,0,128, - 0,224,15,19,143,125,137,125,152,86,159,95,153,95,211,15, - 45,136,4,216,11,15,136,60,220,18,29,208,32,51,176,70, - 183,79,177,79,208,51,70,240,0,1,71,1,56,240,0,1, - 31,56,243,0,1,19,57,240,0,1,13,57,228,8,18,215, - 8,44,209,8,44,172,84,176,52,184,22,191,31,185,31,213, - 8,73,114,28,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,46,0,0, - 0,151,0,116,0,0,0,0,0,0,0,0,0,106,3,0, + 171,1,0,0,0,0,0,0,105,1,83,0,41,2,97,158, + 1,0,0,79,112,116,105,111,110,97,108,32,109,101,116,104, + 111,100,32,114,101,116,117,114,110,105,110,103,32,97,32,109, + 101,116,97,100,97,116,97,32,100,105,99,116,32,102,111,114, + 32,116,104,101,32,115,112,101,99,105,102,105,101,100,10,32, + 32,32,32,32,32,32,32,112,97,116,104,32,40,97,32,115, + 116,114,41,46,10,10,32,32,32,32,32,32,32,32,80,111, + 115,115,105,98,108,101,32,107,101,121,115,58,10,32,32,32, + 32,32,32,32,32,45,32,39,109,116,105,109,101,39,32,40, + 109,97,110,100,97,116,111,114,121,41,32,105,115,32,116,104, + 101,32,110,117,109,101,114,105,99,32,116,105,109,101,115,116, + 97,109,112,32,111,102,32,108,97,115,116,32,115,111,117,114, + 99,101,10,32,32,32,32,32,32,32,32,32,32,99,111,100, + 101,32,109,111,100,105,102,105,99,97,116,105,111,110,59,10, + 32,32,32,32,32,32,32,32,45,32,39,115,105,122,101,39, + 32,40,111,112,116,105,111,110,97,108,41,32,105,115,32,116, + 104,101,32,115,105,122,101,32,105,110,32,98,121,116,101,115, + 32,111,102,32,116,104,101,32,115,111,117,114,99,101,32,99, + 111,100,101,46,10,10,32,32,32,32,32,32,32,32,73,109, + 112,108,101,109,101,110,116,105,110,103,32,116,104,105,115,32, + 109,101,116,104,111,100,32,97,108,108,111,119,115,32,116,104, + 101,32,108,111,97,100,101,114,32,116,111,32,114,101,97,100, + 32,98,121,116,101,99,111,100,101,32,102,105,108,101,115,46, + 10,32,32,32,32,32,32,32,32,82,97,105,115,101,115,32, + 79,83,69,114,114,111,114,32,119,104,101,110,32,116,104,101, + 32,112,97,116,104,32,99,97,110,110,111,116,32,98,101,32, + 104,97,110,100,108,101,100,46,10,32,32,32,32,32,32,32, + 32,114,242,0,0,0,41,1,114,89,1,0,0,114,88,1, + 0,0,115,2,0,0,0,32,32,114,10,0,0,0,218,10, + 112,97,116,104,95,115,116,97,116,115,122,23,83,111,117,114, + 99,101,76,111,97,100,101,114,46,112,97,116,104,95,115,116, + 97,116,115,245,3,0,0,115,24,0,0,0,128,0,240,24, + 0,17,24,152,20,159,31,153,31,168,20,211,25,46,208,15, + 47,208,8,47,114,28,0,0,0,99,4,0,0,0,0,0, + 0,0,0,0,0,0,4,0,0,0,3,0,0,0,243,38, + 0,0,0,151,0,124,0,106,1,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,124,2,124,3,171, + 2,0,0,0,0,0,0,83,0,41,1,122,228,79,112,116, + 105,111,110,97,108,32,109,101,116,104,111,100,32,119,104,105, + 99,104,32,119,114,105,116,101,115,32,100,97,116,97,32,40, + 98,121,116,101,115,41,32,116,111,32,97,32,102,105,108,101, + 32,112,97,116,104,32,40,97,32,115,116,114,41,46,10,10, + 32,32,32,32,32,32,32,32,73,109,112,108,101,109,101,110, + 116,105,110,103,32,116,104,105,115,32,109,101,116,104,111,100, + 32,97,108,108,111,119,115,32,102,111,114,32,116,104,101,32, + 119,114,105,116,105,110,103,32,111,102,32,98,121,116,101,99, + 111,100,101,32,102,105,108,101,115,46,10,10,32,32,32,32, + 32,32,32,32,84,104,101,32,115,111,117,114,99,101,32,112, + 97,116,104,32,105,115,32,110,101,101,100,101,100,32,105,110, + 32,111,114,100,101,114,32,116,111,32,99,111,114,114,101,99, + 116,108,121,32,116,114,97,110,115,102,101,114,32,112,101,114, + 109,105,115,115,105,111,110,115,10,32,32,32,32,32,32,32, + 32,41,1,218,8,115,101,116,95,100,97,116,97,41,4,114, + 189,0,0,0,114,176,0,0,0,218,10,99,97,99,104,101, + 95,112,97,116,104,114,48,0,0,0,115,4,0,0,0,32, + 32,32,32,114,10,0,0,0,218,15,95,99,97,99,104,101, + 95,98,121,116,101,99,111,100,101,122,28,83,111,117,114,99, + 101,76,111,97,100,101,114,46,95,99,97,99,104,101,95,98, + 121,116,101,99,111,100,101,3,4,0,0,115,21,0,0,0, + 128,0,240,16,0,16,20,143,125,137,125,152,90,168,20,211, + 15,46,208,8,46,114,28,0,0,0,99,3,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,243, + 4,0,0,0,151,0,121,1,41,2,122,150,79,112,116,105, + 111,110,97,108,32,109,101,116,104,111,100,32,119,104,105,99, + 104,32,119,114,105,116,101,115,32,100,97,116,97,32,40,98, + 121,116,101,115,41,32,116,111,32,97,32,102,105,108,101,32, + 112,97,116,104,32,40,97,32,115,116,114,41,46,10,10,32, + 32,32,32,32,32,32,32,73,109,112,108,101,109,101,110,116, + 105,110,103,32,116,104,105,115,32,109,101,116,104,111,100,32, + 97,108,108,111,119,115,32,102,111,114,32,116,104,101,32,119, + 114,105,116,105,110,103,32,111,102,32,98,121,116,101,99,111, + 100,101,32,102,105,108,101,115,46,10,32,32,32,32,32,32, + 32,32,78,114,30,0,0,0,41,3,114,189,0,0,0,114, + 68,0,0,0,114,48,0,0,0,115,3,0,0,0,32,32, + 32,114,10,0,0,0,114,93,1,0,0,122,21,83,111,117, + 114,99,101,76,111,97,100,101,114,46,115,101,116,95,100,97, + 116,97,13,4,0,0,114,74,1,0,0,114,28,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,156,0,0,0,151,0,124,0,106,1, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,124,0,124,1,171,2,0,0,0,0,0,0,83,0,41, - 1,122,26,84,104,105,115,32,109,101,116,104,111,100,32,105, - 115,32,100,101,112,114,101,99,97,116,101,100,46,41,2,114, - 207,0,0,0,218,17,95,108,111,97,100,95,109,111,100,117, - 108,101,95,115,104,105,109,169,2,114,189,0,0,0,114,42, - 1,0,0,115,2,0,0,0,32,32,114,10,0,0,0,218, - 11,108,111,97,100,95,109,111,100,117,108,101,122,25,95,76, - 111,97,100,101,114,66,97,115,105,99,115,46,108,111,97,100, - 95,109,111,100,117,108,101,229,3,0,0,115,23,0,0,0, - 128,0,244,6,0,16,26,215,15,43,209,15,43,168,68,176, - 40,211,15,59,208,8,59,114,28,0,0,0,78,41,8,114, - 196,0,0,0,114,195,0,0,0,114,197,0,0,0,114,198, - 0,0,0,114,10,1,0,0,114,73,1,0,0,114,80,1, - 0,0,114,84,1,0,0,114,30,0,0,0,114,28,0,0, - 0,114,10,0,0,0,114,65,1,0,0,114,65,1,0,0, - 205,3,0,0,115,29,0,0,0,132,0,241,4,1,5,29, - 242,6,6,5,71,1,242,16,1,5,57,242,6,6,5,74, - 1,243,16,3,5,60,114,28,0,0,0,114,65,1,0,0, - 99,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0, - 0,0,0,0,0,243,60,0,0,0,151,0,101,0,90,1, - 100,0,90,2,100,1,132,0,90,3,100,2,132,0,90,4, - 100,3,132,0,90,5,100,4,132,0,90,6,100,5,132,0, - 90,7,100,6,100,7,156,1,100,8,132,2,90,8,100,9, - 132,0,90,9,121,10,41,11,218,12,83,111,117,114,99,101, - 76,111,97,100,101,114,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, - 151,0,116,0,0,0,0,0,0,0,0,0,130,1,41,1, - 122,165,79,112,116,105,111,110,97,108,32,109,101,116,104,111, - 100,32,116,104,97,116,32,114,101,116,117,114,110,115,32,116, - 104,101,32,109,111,100,105,102,105,99,97,116,105,111,110,32, - 116,105,109,101,32,40,97,110,32,105,110,116,41,32,102,111, - 114,32,116,104,101,10,32,32,32,32,32,32,32,32,115,112, - 101,99,105,102,105,101,100,32,112,97,116,104,32,40,97,32, - 115,116,114,41,46,10,10,32,32,32,32,32,32,32,32,82, - 97,105,115,101,115,32,79,83,69,114,114,111,114,32,119,104, - 101,110,32,116,104,101,32,112,97,116,104,32,99,97,110,110, - 111,116,32,98,101,32,104,97,110,100,108,101,100,46,10,32, - 32,32,32,32,32,32,32,41,1,114,87,0,0,0,169,2, - 114,189,0,0,0,114,68,0,0,0,115,2,0,0,0,32, - 32,114,10,0,0,0,218,10,112,97,116,104,95,109,116,105, - 109,101,122,23,83,111,117,114,99,101,76,111,97,100,101,114, - 46,112,97,116,104,95,109,116,105,109,101,237,3,0,0,115, - 9,0,0,0,128,0,244,12,0,15,22,136,13,114,28,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,40,0,0,0,151,0,100,1, + 0,0,124,1,171,1,0,0,0,0,0,0,125,2,9,0, + 124,0,106,3,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,124,2,171,1,0,0,0,0,0,0, + 125,3,116,9,0,0,0,0,0,0,0,0,124,3,171,1, + 0,0,0,0,0,0,83,0,35,0,116,4,0,0,0,0, + 0,0,0,0,36,0,114,19,125,4,116,7,0,0,0,0, + 0,0,0,0,100,1,124,1,172,2,171,2,0,0,0,0, + 0,0,124,4,130,2,100,3,125,4,126,4,119,1,119,0, + 120,3,89,0,119,1,41,4,122,52,67,111,110,99,114,101, + 116,101,32,105,109,112,108,101,109,101,110,116,97,116,105,111, + 110,32,111,102,32,73,110,115,112,101,99,116,76,111,97,100, + 101,114,46,103,101,116,95,115,111,117,114,99,101,46,122,39, + 115,111,117,114,99,101,32,110,111,116,32,97,118,97,105,108, + 97,98,108,101,32,116,104,114,111,117,103,104,32,103,101,116, + 95,100,97,116,97,40,41,114,186,0,0,0,78,41,5,114, + 7,1,0,0,218,8,103,101,116,95,100,97,116,97,114,87, + 0,0,0,114,188,0,0,0,114,2,1,0,0,41,5,114, + 189,0,0,0,114,42,1,0,0,114,68,0,0,0,114,254, + 0,0,0,114,31,1,0,0,115,5,0,0,0,32,32,32, + 32,32,114,10,0,0,0,218,10,103,101,116,95,115,111,117, + 114,99,101,122,23,83,111,117,114,99,101,76,111,97,100,101, + 114,46,103,101,116,95,115,111,117,114,99,101,20,4,0,0, + 115,90,0,0,0,128,0,224,15,19,215,15,32,209,15,32, + 160,24,211,15,42,136,4,240,2,4,9,54,216,27,31,159, + 61,153,61,168,20,211,27,46,136,76,244,8,0,16,29,152, + 92,211,15,42,208,8,42,248,244,7,0,16,23,242,0,2, + 9,54,220,18,29,208,30,71,216,35,43,244,3,1,19,45, + 216,50,53,240,3,1,13,54,251,240,3,2,9,54,250,115, + 20,0,0,0,147,17,47,0,175,9,65,11,3,184,14,65, + 6,3,193,6,5,65,11,3,114,170,0,0,0,41,1,218, + 9,95,111,112,116,105,109,105,122,101,99,3,0,0,0,0, + 0,0,0,1,0,0,0,8,0,0,0,3,0,0,0,243, + 64,0,0,0,151,0,116,0,0,0,0,0,0,0,0,0, + 106,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,116,4,0,0,0,0,0,0,0,0,124,1, + 124,2,100,1,100,2,124,3,172,3,171,6,0,0,0,0, + 0,0,83,0,41,4,122,130,82,101,116,117,114,110,32,116, + 104,101,32,99,111,100,101,32,111,98,106,101,99,116,32,99, + 111,109,112,105,108,101,100,32,102,114,111,109,32,115,111,117, + 114,99,101,46,10,10,32,32,32,32,32,32,32,32,84,104, + 101,32,39,100,97,116,97,39,32,97,114,103,117,109,101,110, + 116,32,99,97,110,32,98,101,32,97,110,121,32,111,98,106, + 101,99,116,32,116,121,112,101,32,116,104,97,116,32,99,111, + 109,112,105,108,101,40,41,32,115,117,112,112,111,114,116,115, + 46,10,32,32,32,32,32,32,32,32,114,78,1,0,0,84, + 41,2,218,12,100,111,110,116,95,105,110,104,101,114,105,116, + 114,135,0,0,0,41,3,114,207,0,0,0,114,77,1,0, + 0,218,7,99,111,109,112,105,108,101,41,4,114,189,0,0, + 0,114,48,0,0,0,114,68,0,0,0,114,100,1,0,0, + 115,4,0,0,0,32,32,32,32,114,10,0,0,0,218,14, + 115,111,117,114,99,101,95,116,111,95,99,111,100,101,122,27, + 83,111,117,114,99,101,76,111,97,100,101,114,46,115,111,117, + 114,99,101,95,116,111,95,99,111,100,101,30,4,0,0,115, + 43,0,0,0,128,0,244,10,0,16,26,215,15,51,209,15, + 51,180,71,184,84,192,52,200,22,216,53,57,192,73,240,3, + 0,16,52,243,0,1,16,79,1,240,0,1,9,79,1,114, + 28,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,72,4,0,0,151,0, 124,0,106,1,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,124,1,171,1,0,0,0,0,0,0, - 105,1,83,0,41,2,97,158,1,0,0,79,112,116,105,111, - 110,97,108,32,109,101,116,104,111,100,32,114,101,116,117,114, - 110,105,110,103,32,97,32,109,101,116,97,100,97,116,97,32, - 100,105,99,116,32,102,111,114,32,116,104,101,32,115,112,101, - 99,105,102,105,101,100,10,32,32,32,32,32,32,32,32,112, - 97,116,104,32,40,97,32,115,116,114,41,46,10,10,32,32, - 32,32,32,32,32,32,80,111,115,115,105,98,108,101,32,107, - 101,121,115,58,10,32,32,32,32,32,32,32,32,45,32,39, - 109,116,105,109,101,39,32,40,109,97,110,100,97,116,111,114, - 121,41,32,105,115,32,116,104,101,32,110,117,109,101,114,105, - 99,32,116,105,109,101,115,116,97,109,112,32,111,102,32,108, - 97,115,116,32,115,111,117,114,99,101,10,32,32,32,32,32, - 32,32,32,32,32,99,111,100,101,32,109,111,100,105,102,105, - 99,97,116,105,111,110,59,10,32,32,32,32,32,32,32,32, - 45,32,39,115,105,122,101,39,32,40,111,112,116,105,111,110, - 97,108,41,32,105,115,32,116,104,101,32,115,105,122,101,32, - 105,110,32,98,121,116,101,115,32,111,102,32,116,104,101,32, - 115,111,117,114,99,101,32,99,111,100,101,46,10,10,32,32, - 32,32,32,32,32,32,73,109,112,108,101,109,101,110,116,105, - 110,103,32,116,104,105,115,32,109,101,116,104,111,100,32,97, - 108,108,111,119,115,32,116,104,101,32,108,111,97,100,101,114, - 32,116,111,32,114,101,97,100,32,98,121,116,101,99,111,100, - 101,32,102,105,108,101,115,46,10,32,32,32,32,32,32,32, - 32,82,97,105,115,101,115,32,79,83,69,114,114,111,114,32, - 119,104,101,110,32,116,104,101,32,112,97,116,104,32,99,97, - 110,110,111,116,32,98,101,32,104,97,110,100,108,101,100,46, - 10,32,32,32,32,32,32,32,32,114,242,0,0,0,41,1, - 114,89,1,0,0,114,88,1,0,0,115,2,0,0,0,32, - 32,114,10,0,0,0,218,10,112,97,116,104,95,115,116,97, - 116,115,122,23,83,111,117,114,99,101,76,111,97,100,101,114, - 46,112,97,116,104,95,115,116,97,116,115,245,3,0,0,115, - 24,0,0,0,128,0,240,24,0,17,24,152,20,159,31,153, - 31,168,20,211,25,46,208,15,47,208,8,47,114,28,0,0, - 0,99,4,0,0,0,0,0,0,0,0,0,0,0,4,0, - 0,0,3,0,0,0,243,38,0,0,0,151,0,124,0,106, - 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,124,2,124,3,171,2,0,0,0,0,0,0,83, - 0,41,1,122,228,79,112,116,105,111,110,97,108,32,109,101, - 116,104,111,100,32,119,104,105,99,104,32,119,114,105,116,101, - 115,32,100,97,116,97,32,40,98,121,116,101,115,41,32,116, - 111,32,97,32,102,105,108,101,32,112,97,116,104,32,40,97, - 32,115,116,114,41,46,10,10,32,32,32,32,32,32,32,32, - 73,109,112,108,101,109,101,110,116,105,110,103,32,116,104,105, - 115,32,109,101,116,104,111,100,32,97,108,108,111,119,115,32, - 102,111,114,32,116,104,101,32,119,114,105,116,105,110,103,32, - 111,102,32,98,121,116,101,99,111,100,101,32,102,105,108,101, - 115,46,10,10,32,32,32,32,32,32,32,32,84,104,101,32, - 115,111,117,114,99,101,32,112,97,116,104,32,105,115,32,110, - 101,101,100,101,100,32,105,110,32,111,114,100,101,114,32,116, - 111,32,99,111,114,114,101,99,116,108,121,32,116,114,97,110, - 115,102,101,114,32,112,101,114,109,105,115,115,105,111,110,115, - 10,32,32,32,32,32,32,32,32,41,1,218,8,115,101,116, - 95,100,97,116,97,41,4,114,189,0,0,0,114,176,0,0, - 0,218,10,99,97,99,104,101,95,112,97,116,104,114,48,0, - 0,0,115,4,0,0,0,32,32,32,32,114,10,0,0,0, - 218,15,95,99,97,99,104,101,95,98,121,116,101,99,111,100, - 101,122,28,83,111,117,114,99,101,76,111,97,100,101,114,46, - 95,99,97,99,104,101,95,98,121,116,101,99,111,100,101,3, - 4,0,0,115,21,0,0,0,128,0,240,16,0,16,20,143, - 125,137,125,152,90,168,20,211,15,46,208,8,46,114,28,0, - 0,0,99,3,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,3,0,0,0,243,4,0,0,0,151,0,121,1, - 41,2,122,150,79,112,116,105,111,110,97,108,32,109,101,116, - 104,111,100,32,119,104,105,99,104,32,119,114,105,116,101,115, - 32,100,97,116,97,32,40,98,121,116,101,115,41,32,116,111, - 32,97,32,102,105,108,101,32,112,97,116,104,32,40,97,32, - 115,116,114,41,46,10,10,32,32,32,32,32,32,32,32,73, - 109,112,108,101,109,101,110,116,105,110,103,32,116,104,105,115, - 32,109,101,116,104,111,100,32,97,108,108,111,119,115,32,102, - 111,114,32,116,104,101,32,119,114,105,116,105,110,103,32,111, - 102,32,98,121,116,101,99,111,100,101,32,102,105,108,101,115, - 46,10,32,32,32,32,32,32,32,32,78,114,30,0,0,0, - 41,3,114,189,0,0,0,114,68,0,0,0,114,48,0,0, - 0,115,3,0,0,0,32,32,32,114,10,0,0,0,114,93, - 1,0,0,122,21,83,111,117,114,99,101,76,111,97,100,101, - 114,46,115,101,116,95,100,97,116,97,13,4,0,0,114,74, - 1,0,0,114,28,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,156,0, - 0,0,151,0,124,0,106,1,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,124,1,171,1,0,0, - 0,0,0,0,125,2,9,0,124,0,106,3,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,124,2, - 171,1,0,0,0,0,0,0,125,3,116,9,0,0,0,0, - 0,0,0,0,124,3,171,1,0,0,0,0,0,0,83,0, - 35,0,116,4,0,0,0,0,0,0,0,0,36,0,114,19, - 125,4,116,7,0,0,0,0,0,0,0,0,100,1,124,1, - 172,2,171,2,0,0,0,0,0,0,124,4,130,2,100,3, - 125,4,126,4,119,1,119,0,120,3,89,0,119,1,41,4, - 122,52,67,111,110,99,114,101,116,101,32,105,109,112,108,101, - 109,101,110,116,97,116,105,111,110,32,111,102,32,73,110,115, - 112,101,99,116,76,111,97,100,101,114,46,103,101,116,95,115, - 111,117,114,99,101,46,122,39,115,111,117,114,99,101,32,110, - 111,116,32,97,118,97,105,108,97,98,108,101,32,116,104,114, - 111,117,103,104,32,103,101,116,95,100,97,116,97,40,41,114, - 186,0,0,0,78,41,5,114,7,1,0,0,218,8,103,101, - 116,95,100,97,116,97,114,87,0,0,0,114,188,0,0,0, - 114,2,1,0,0,41,5,114,189,0,0,0,114,42,1,0, - 0,114,68,0,0,0,114,254,0,0,0,114,31,1,0,0, - 115,5,0,0,0,32,32,32,32,32,114,10,0,0,0,218, - 10,103,101,116,95,115,111,117,114,99,101,122,23,83,111,117, - 114,99,101,76,111,97,100,101,114,46,103,101,116,95,115,111, - 117,114,99,101,20,4,0,0,115,90,0,0,0,128,0,224, - 15,19,215,15,32,209,15,32,160,24,211,15,42,136,4,240, - 2,4,9,54,216,27,31,159,61,153,61,168,20,211,27,46, - 136,76,244,8,0,16,29,152,92,211,15,42,208,8,42,248, - 244,7,0,16,23,242,0,2,9,54,220,18,29,208,30,71, - 216,35,43,244,3,1,19,45,216,50,53,240,3,1,13,54, - 251,240,3,2,9,54,250,115,20,0,0,0,147,17,47,0, - 175,9,65,11,3,184,14,65,6,3,193,6,5,65,11,3, - 114,170,0,0,0,41,1,218,9,95,111,112,116,105,109,105, - 122,101,99,3,0,0,0,0,0,0,0,1,0,0,0,8, - 0,0,0,3,0,0,0,243,64,0,0,0,151,0,116,0, - 0,0,0,0,0,0,0,0,106,3,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,116,4,0,0, - 0,0,0,0,0,0,124,1,124,2,100,1,100,2,124,3, - 172,3,171,6,0,0,0,0,0,0,83,0,41,4,122,130, - 82,101,116,117,114,110,32,116,104,101,32,99,111,100,101,32, - 111,98,106,101,99,116,32,99,111,109,112,105,108,101,100,32, - 102,114,111,109,32,115,111,117,114,99,101,46,10,10,32,32, - 32,32,32,32,32,32,84,104,101,32,39,100,97,116,97,39, - 32,97,114,103,117,109,101,110,116,32,99,97,110,32,98,101, - 32,97,110,121,32,111,98,106,101,99,116,32,116,121,112,101, - 32,116,104,97,116,32,99,111,109,112,105,108,101,40,41,32, - 115,117,112,112,111,114,116,115,46,10,32,32,32,32,32,32, - 32,32,114,78,1,0,0,84,41,2,218,12,100,111,110,116, - 95,105,110,104,101,114,105,116,114,135,0,0,0,41,3,114, - 207,0,0,0,114,77,1,0,0,218,7,99,111,109,112,105, - 108,101,41,4,114,189,0,0,0,114,48,0,0,0,114,68, - 0,0,0,114,100,1,0,0,115,4,0,0,0,32,32,32, - 32,114,10,0,0,0,218,14,115,111,117,114,99,101,95,116, - 111,95,99,111,100,101,122,27,83,111,117,114,99,101,76,111, - 97,100,101,114,46,115,111,117,114,99,101,95,116,111,95,99, - 111,100,101,30,4,0,0,115,43,0,0,0,128,0,244,10, - 0,16,26,215,15,51,209,15,51,180,71,184,84,192,52,200, - 22,216,53,57,192,73,240,3,0,16,52,243,0,1,16,79, - 1,240,0,1,9,79,1,114,28,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,72,4,0,0,151,0,124,0,106,1,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,124,1, - 171,1,0,0,0,0,0,0,125,2,100,1,125,3,100,1, - 125,4,100,1,125,5,100,2,125,6,100,3,125,7,9,0, - 116,3,0,0,0,0,0,0,0,0,124,2,171,1,0,0, - 0,0,0,0,125,8,9,0,124,0,106,5,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,124,2, - 171,1,0,0,0,0,0,0,125,9,116,7,0,0,0,0, - 0,0,0,0,124,9,100,4,25,0,0,0,171,1,0,0, - 0,0,0,0,125,3,9,0,124,0,106,9,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,124,8, - 171,1,0,0,0,0,0,0,125,10,124,1,124,8,100,5, - 156,2,125,11,9,0,116,11,0,0,0,0,0,0,0,0, - 124,10,124,1,124,11,171,3,0,0,0,0,0,0,125,12, - 116,13,0,0,0,0,0,0,0,0,124,10,171,1,0,0, - 0,0,0,0,100,6,100,1,26,0,125,13,124,12,100,7, - 122,1,0,0,100,8,107,55,0,0,125,6,124,6,114,106, - 124,12,100,9,122,1,0,0,100,8,107,55,0,0,125,7, - 116,14,0,0,0,0,0,0,0,0,106,16,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,100,10, - 107,55,0,0,114,97,124,7,115,19,116,14,0,0,0,0, - 0,0,0,0,106,16,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,100,11,107,40,0,0,114,76, - 124,0,106,9,0,0,0,0,0,0,0,0,0,0,0,0, + 125,2,100,1,125,3,100,1,125,4,100,1,125,5,100,2, + 125,6,100,3,125,7,9,0,116,3,0,0,0,0,0,0, + 0,0,124,2,171,1,0,0,0,0,0,0,125,8,9,0, + 124,0,106,5,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,124,2,171,1,0,0,0,0,0,0, - 125,4,116,15,0,0,0,0,0,0,0,0,106,18,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 116,20,0,0,0,0,0,0,0,0,124,4,171,2,0,0, - 0,0,0,0,125,5,116,23,0,0,0,0,0,0,0,0, - 124,10,124,5,124,1,124,11,171,4,0,0,0,0,0,0, - 1,0,110,18,116,25,0,0,0,0,0,0,0,0,124,10, - 124,3,124,9,100,12,25,0,0,0,124,1,124,11,171,5, - 0,0,0,0,0,0,1,0,116,26,0,0,0,0,0,0, - 0,0,106,29,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,100,13,124,8,124,2,171,3,0,0, - 0,0,0,0,1,0,116,31,0,0,0,0,0,0,0,0, - 124,13,124,1,124,8,124,2,172,14,171,4,0,0,0,0, - 0,0,83,0,35,0,116,32,0,0,0,0,0,0,0,0, - 116,34,0,0,0,0,0,0,0,0,102,2,36,0,114,3, - 1,0,89,0,110,51,119,0,120,3,89,0,119,1,35,0, - 116,36,0,0,0,0,0,0,0,0,36,0,114,3,1,0, - 89,0,110,36,119,0,120,3,89,0,119,1,35,0,116,36, - 0,0,0,0,0,0,0,0,36,0,114,3,1,0,89,0, - 110,21,119,0,120,3,89,0,119,1,35,0,116,38,0,0, - 0,0,0,0,0,0,36,0,114,5,1,0,100,1,125,8, - 89,0,110,4,119,0,120,3,89,0,119,1,124,4,128,17, + 125,9,116,7,0,0,0,0,0,0,0,0,124,9,100,4, + 25,0,0,0,171,1,0,0,0,0,0,0,125,3,9,0, 124,0,106,9,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,124,2,171,1,0,0,0,0,0,0, - 125,4,124,0,106,41,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,124,4,124,2,171,2,0,0, - 0,0,0,0,125,14,116,26,0,0,0,0,0,0,0,0, - 106,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,100,15,124,2,171,2,0,0,0,0,0,0, - 1,0,116,42,0,0,0,0,0,0,0,0,106,44,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 115,108,124,8,129,106,124,3,129,104,124,6,114,42,124,5, - 128,26,116,15,0,0,0,0,0,0,0,0,106,18,0,0, + 0,0,0,0,0,0,124,8,171,1,0,0,0,0,0,0, + 125,10,124,1,124,8,100,5,156,2,125,11,9,0,116,11, + 0,0,0,0,0,0,0,0,124,10,124,1,124,11,171,3, + 0,0,0,0,0,0,125,12,116,13,0,0,0,0,0,0, + 0,0,124,10,171,1,0,0,0,0,0,0,100,6,100,1, + 26,0,125,13,124,12,100,7,122,1,0,0,100,8,107,55, + 0,0,125,6,124,6,114,106,124,12,100,9,122,1,0,0, + 100,8,107,55,0,0,125,7,116,14,0,0,0,0,0,0, + 0,0,106,16,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,100,10,107,55,0,0,114,97,124,7, + 115,19,116,14,0,0,0,0,0,0,0,0,106,16,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 116,20,0,0,0,0,0,0,0,0,124,4,171,2,0,0, - 0,0,0,0,125,5,116,47,0,0,0,0,0,0,0,0, - 124,14,124,5,124,7,171,3,0,0,0,0,0,0,125,10, - 110,22,116,49,0,0,0,0,0,0,0,0,124,14,124,3, - 116,51,0,0,0,0,0,0,0,0,124,4,171,1,0,0, - 0,0,0,0,171,3,0,0,0,0,0,0,125,10,9,0, - 124,0,106,53,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,124,2,124,8,124,10,171,3,0,0, - 0,0,0,0,1,0,124,14,83,0,35,0,116,38,0,0, - 0,0,0,0,0,0,36,0,114,4,1,0,89,0,124,14, - 83,0,119,0,120,3,89,0,119,1,124,14,83,0,41,16, - 122,190,67,111,110,99,114,101,116,101,32,105,109,112,108,101, - 109,101,110,116,97,116,105,111,110,32,111,102,32,73,110,115, - 112,101,99,116,76,111,97,100,101,114,46,103,101,116,95,99, - 111,100,101,46,10,10,32,32,32,32,32,32,32,32,82,101, - 97,100,105,110,103,32,111,102,32,98,121,116,101,99,111,100, - 101,32,114,101,113,117,105,114,101,115,32,112,97,116,104,95, - 115,116,97,116,115,32,116,111,32,98,101,32,105,109,112,108, - 101,109,101,110,116,101,100,46,32,84,111,32,119,114,105,116, - 101,10,32,32,32,32,32,32,32,32,98,121,116,101,99,111, - 100,101,44,32,115,101,116,95,100,97,116,97,32,109,117,115, - 116,32,97,108,115,111,32,98,101,32,105,109,112,108,101,109, - 101,110,116,101,100,46,10,10,32,32,32,32,32,32,32,32, - 78,70,84,114,242,0,0,0,114,229,0,0,0,114,211,0, - 0,0,114,6,0,0,0,114,1,0,0,0,114,52,0,0, - 0,218,5,110,101,118,101,114,218,6,97,108,119,97,121,115, - 218,4,115,105,122,101,122,13,123,125,32,109,97,116,99,104, - 101,115,32,123,125,41,3,114,187,0,0,0,114,173,0,0, - 0,114,176,0,0,0,122,19,99,111,100,101,32,111,98,106, - 101,99,116,32,102,114,111,109,32,123,125,41,27,114,7,1, - 0,0,114,152,0,0,0,114,91,1,0,0,114,40,0,0, - 0,114,98,1,0,0,114,219,0,0,0,218,10,109,101,109, - 111,114,121,118,105,101,119,114,234,0,0,0,218,21,99,104, - 101,99,107,95,104,97,115,104,95,98,97,115,101,100,95,112, - 121,99,115,114,226,0,0,0,218,17,95,82,65,87,95,77, - 65,71,73,67,95,78,85,77,66,69,82,114,227,0,0,0, - 114,224,0,0,0,114,207,0,0,0,114,215,0,0,0,114, - 237,0,0,0,114,188,0,0,0,114,216,0,0,0,114,87, - 0,0,0,114,134,0,0,0,114,104,1,0,0,114,20,0, - 0,0,218,19,100,111,110,116,95,119,114,105,116,101,95,98, - 121,116,101,99,111,100,101,114,246,0,0,0,114,243,0,0, - 0,114,7,0,0,0,114,95,1,0,0,41,15,114,189,0, - 0,0,114,42,1,0,0,114,176,0,0,0,114,222,0,0, - 0,114,254,0,0,0,114,226,0,0,0,218,10,104,97,115, - 104,95,98,97,115,101,100,218,12,99,104,101,99,107,95,115, - 111,117,114,99,101,114,173,0,0,0,218,2,115,116,114,48, - 0,0,0,114,217,0,0,0,114,21,0,0,0,218,10,98, - 121,116,101,115,95,100,97,116,97,218,11,99,111,100,101,95, - 111,98,106,101,99,116,115,15,0,0,0,32,32,32,32,32, - 32,32,32,32,32,32,32,32,32,32,114,10,0,0,0,114, - 76,1,0,0,122,21,83,111,117,114,99,101,76,111,97,100, - 101,114,46,103,101,116,95,99,111,100,101,38,4,0,0,115, - 147,2,0,0,128,0,240,14,0,23,27,215,22,39,209,22, - 39,168,8,211,22,49,136,11,216,23,27,136,12,216,23,27, - 136,12,216,22,26,136,11,216,21,26,136,10,216,23,27,136, - 12,240,2,51,9,74,1,220,28,45,168,107,211,28,58,136, - 77,240,8,46,13,74,1,216,21,25,151,95,145,95,160,91, - 211,21,49,144,2,244,8,0,32,35,160,50,160,103,161,59, - 211,31,47,144,12,240,2,40,17,74,1,216,27,31,159,61, - 153,61,168,29,211,27,55,144,68,240,10,0,33,41,216,32, - 45,241,5,3,35,22,144,75,240,8,31,21,74,1,220,32, - 45,168,100,176,72,184,107,211,32,74,152,5,220,37,47,176, - 4,211,37,53,176,98,176,99,208,37,58,152,10,216,37,42, - 168,83,161,91,176,65,209,37,53,152,10,217,27,37,216,43, - 48,176,52,169,60,184,49,209,43,60,152,76,220,32,36,215, - 32,58,209,32,58,184,103,210,32,69,217,33,45,220,33,37, - 215,33,59,209,33,59,184,120,210,33,71,216,47,51,175,125, - 169,125,184,91,211,47,73,160,12,220,46,50,215,46,62,209, - 46,62,220,36,53,216,36,48,243,5,3,47,34,160,11,244, - 8,0,33,51,176,52,184,27,192,104,216,51,62,245,3,1, - 33,64,1,244,6,0,29,52,216,32,36,216,32,44,216,32, - 34,160,54,161,10,216,32,40,216,32,43,244,11,6,29,30, - 244,20,0,25,35,215,24,51,209,24,51,176,79,192,93,216, - 52,63,244,3,1,25,65,1,228,31,48,176,26,192,40,216, - 63,76,216,61,72,244,5,2,32,74,1,240,0,2,25,74, - 1,248,244,11,0,29,40,172,24,208,27,50,242,0,1,21, - 29,217,24,28,240,3,1,21,29,251,244,63,0,24,31,242, - 0,1,17,25,217,20,24,240,3,1,17,25,251,244,13,0, - 20,27,242,0,1,13,21,217,16,20,240,3,1,13,21,251, - 244,11,0,16,35,242,0,1,9,33,216,28,32,138,77,240, - 3,1,9,33,250,240,100,1,0,12,24,208,11,31,216,27, - 31,159,61,153,61,168,27,211,27,53,136,76,216,22,26,215, - 22,41,209,22,41,168,44,184,11,211,22,68,136,11,220,8, - 18,215,8,35,209,8,35,208,36,57,184,59,212,8,71,220, - 16,19,215,16,39,210,16,39,168,77,208,44,69,216,16,28, - 208,16,40,217,15,25,216,19,30,208,19,38,220,34,38,215, - 34,50,209,34,50,212,51,68,216,51,63,243,3,1,35,65, - 1,144,75,228,23,40,168,27,176,107,192,60,211,23,80,145, - 4,228,23,45,168,107,184,60,220,46,49,176,44,211,46,63, - 243,3,1,24,65,1,144,4,240,4,3,13,21,216,16,20, - 215,16,36,209,16,36,160,91,176,45,192,20,212,16,70,240, - 6,0,16,27,208,8,26,248,244,5,0,20,39,242,0,1, - 13,21,216,16,20,216,15,26,208,8,26,240,5,1,13,21, - 250,224,15,26,208,8,26,115,89,0,0,0,157,11,69,26, - 0,169,17,69,11,0,193,9,17,68,60,0,193,32,66,33, - 68,39,0,196,39,15,68,57,3,196,56,1,68,57,3,196, - 60,9,69,8,3,197,7,1,69,8,3,197,11,9,69,23, - 3,197,22,1,69,23,3,197,26,11,69,40,3,197,39,1, - 69,40,3,199,61,19,72,18,0,200,18,9,72,31,3,200, - 30,1,72,31,3,78,41,10,114,196,0,0,0,114,195,0, - 0,0,114,197,0,0,0,114,89,1,0,0,114,91,1,0, - 0,114,95,1,0,0,114,93,1,0,0,114,99,1,0,0, - 114,104,1,0,0,114,76,1,0,0,114,30,0,0,0,114, - 28,0,0,0,114,10,0,0,0,114,86,1,0,0,114,86, - 1,0,0,235,3,0,0,115,44,0,0,0,132,0,242,4, - 6,5,22,242,16,12,5,48,242,28,8,5,47,242,20,4, - 5,12,242,14,8,5,43,240,20,0,55,57,244,0,6,5, - 79,1,243,16,83,1,5,27,114,28,0,0,0,114,86,1, - 0,0,99,0,0,0,0,0,0,0,0,0,0,0,0,3, - 0,0,0,0,0,0,0,243,100,0,0,0,135,0,151,0, - 101,0,90,1,100,0,90,2,100,1,90,3,100,2,132,0, - 90,4,100,3,132,0,90,5,100,4,132,0,90,6,101,7, - 136,0,102,1,100,5,132,8,171,0,0,0,0,0,0,0, - 90,8,101,7,100,6,132,0,171,0,0,0,0,0,0,0, - 90,9,100,7,132,0,90,10,101,7,100,8,132,0,171,0, - 0,0,0,0,0,0,90,11,136,0,120,1,90,12,83,0, - 41,9,218,10,70,105,108,101,76,111,97,100,101,114,122,103, - 66,97,115,101,32,102,105,108,101,32,108,111,97,100,101,114, - 32,99,108,97,115,115,32,119,104,105,99,104,32,105,109,112, - 108,101,109,101,110,116,115,32,116,104,101,32,108,111,97,100, - 101,114,32,112,114,111,116,111,99,111,108,32,109,101,116,104, - 111,100,115,32,116,104,97,116,10,32,32,32,32,114,101,113, - 117,105,114,101,32,102,105,108,101,32,115,121,115,116,101,109, - 32,117,115,97,103,101,46,99,3,0,0,0,0,0,0,0, - 0,0,0,0,2,0,0,0,3,0,0,0,243,32,0,0, - 0,151,0,124,1,124,0,95,0,0,0,0,0,0,0,0, - 0,124,2,124,0,95,1,0,0,0,0,0,0,0,0,121, - 1,41,2,122,75,67,97,99,104,101,32,116,104,101,32,109, - 111,100,117,108,101,32,110,97,109,101,32,97,110,100,32,116, - 104,101,32,112,97,116,104,32,116,111,32,116,104,101,32,102, - 105,108,101,32,102,111,117,110,100,32,98,121,32,116,104,101, - 10,32,32,32,32,32,32,32,32,102,105,110,100,101,114,46, - 78,114,229,0,0,0,41,3,114,189,0,0,0,114,42,1, - 0,0,114,68,0,0,0,115,3,0,0,0,32,32,32,114, - 10,0,0,0,114,67,1,0,0,122,19,70,105,108,101,76, - 111,97,100,101,114,46,95,95,105,110,105,116,95,95,129,4, - 0,0,115,18,0,0,0,128,0,240,6,0,21,29,136,4, - 140,9,216,20,24,136,4,141,9,114,28,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,106,0,0,0,151,0,124,0,106,0,0,0, + 100,11,107,40,0,0,114,76,124,0,106,9,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,124,2, + 171,1,0,0,0,0,0,0,125,4,116,15,0,0,0,0, + 0,0,0,0,106,18,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,116,20,0,0,0,0,0,0, + 0,0,124,4,171,2,0,0,0,0,0,0,125,5,116,23, + 0,0,0,0,0,0,0,0,124,10,124,5,124,1,124,11, + 171,4,0,0,0,0,0,0,1,0,110,18,116,25,0,0, + 0,0,0,0,0,0,124,10,124,3,124,9,100,12,25,0, + 0,0,124,1,124,11,171,5,0,0,0,0,0,0,1,0, + 116,26,0,0,0,0,0,0,0,0,106,29,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,100,13, + 124,8,124,2,171,3,0,0,0,0,0,0,1,0,116,31, + 0,0,0,0,0,0,0,0,124,13,124,1,124,8,124,2, + 172,14,171,4,0,0,0,0,0,0,83,0,35,0,116,32, + 0,0,0,0,0,0,0,0,116,34,0,0,0,0,0,0, + 0,0,102,2,36,0,114,3,1,0,89,0,110,51,119,0, + 120,3,89,0,119,1,35,0,116,36,0,0,0,0,0,0, + 0,0,36,0,114,3,1,0,89,0,110,36,119,0,120,3, + 89,0,119,1,35,0,116,36,0,0,0,0,0,0,0,0, + 36,0,114,3,1,0,89,0,110,21,119,0,120,3,89,0, + 119,1,35,0,116,38,0,0,0,0,0,0,0,0,36,0, + 114,5,1,0,100,1,125,8,89,0,110,4,119,0,120,3, + 89,0,119,1,124,4,128,17,124,0,106,9,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,124,2, + 171,1,0,0,0,0,0,0,125,4,124,0,106,41,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 124,1,106,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,107,40,0,0,120,1,114,25,1,0, - 124,0,106,2,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,124,1,106,2,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,107,40,0,0, - 83,0,114,77,0,0,0,169,2,218,9,95,95,99,108,97, - 115,115,95,95,114,202,0,0,0,169,2,114,189,0,0,0, - 218,5,111,116,104,101,114,115,2,0,0,0,32,32,114,10, - 0,0,0,218,6,95,95,101,113,95,95,122,17,70,105,108, - 101,76,111,97,100,101,114,46,95,95,101,113,95,95,135,4, - 0,0,243,44,0,0,0,128,0,216,16,20,151,14,145,14, - 160,37,167,47,161,47,209,16,49,242,0,1,17,48,216,16, - 20,151,13,145,13,160,21,167,30,161,30,209,16,47,240,3, - 1,9,49,114,28,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,88,0, - 0,0,151,0,116,1,0,0,0,0,0,0,0,0,124,0, + 124,4,124,2,171,2,0,0,0,0,0,0,125,14,116,26, + 0,0,0,0,0,0,0,0,106,29,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,100,15,124,2, + 171,2,0,0,0,0,0,0,1,0,116,42,0,0,0,0, + 0,0,0,0,106,44,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,115,108,124,8,129,106,124,3, + 129,104,124,6,114,42,124,5,128,26,116,15,0,0,0,0, + 0,0,0,0,106,18,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,116,20,0,0,0,0,0,0, + 0,0,124,4,171,2,0,0,0,0,0,0,125,5,116,47, + 0,0,0,0,0,0,0,0,124,14,124,5,124,7,171,3, + 0,0,0,0,0,0,125,10,110,22,116,49,0,0,0,0, + 0,0,0,0,124,14,124,3,116,51,0,0,0,0,0,0, + 0,0,124,4,171,1,0,0,0,0,0,0,171,3,0,0, + 0,0,0,0,125,10,9,0,124,0,106,53,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,124,2, + 124,8,124,10,171,3,0,0,0,0,0,0,1,0,124,14, + 83,0,35,0,116,38,0,0,0,0,0,0,0,0,36,0, + 114,4,1,0,89,0,124,14,83,0,119,0,120,3,89,0, + 119,1,124,14,83,0,41,16,122,190,67,111,110,99,114,101, + 116,101,32,105,109,112,108,101,109,101,110,116,97,116,105,111, + 110,32,111,102,32,73,110,115,112,101,99,116,76,111,97,100, + 101,114,46,103,101,116,95,99,111,100,101,46,10,10,32,32, + 32,32,32,32,32,32,82,101,97,100,105,110,103,32,111,102, + 32,98,121,116,101,99,111,100,101,32,114,101,113,117,105,114, + 101,115,32,112,97,116,104,95,115,116,97,116,115,32,116,111, + 32,98,101,32,105,109,112,108,101,109,101,110,116,101,100,46, + 32,84,111,32,119,114,105,116,101,10,32,32,32,32,32,32, + 32,32,98,121,116,101,99,111,100,101,44,32,115,101,116,95, + 100,97,116,97,32,109,117,115,116,32,97,108,115,111,32,98, + 101,32,105,109,112,108,101,109,101,110,116,101,100,46,10,10, + 32,32,32,32,32,32,32,32,78,70,84,114,242,0,0,0, + 114,229,0,0,0,114,211,0,0,0,114,6,0,0,0,114, + 1,0,0,0,114,52,0,0,0,218,5,110,101,118,101,114, + 218,6,97,108,119,97,121,115,218,4,115,105,122,101,122,13, + 123,125,32,109,97,116,99,104,101,115,32,123,125,41,3,114, + 187,0,0,0,114,173,0,0,0,114,176,0,0,0,122,19, + 99,111,100,101,32,111,98,106,101,99,116,32,102,114,111,109, + 32,123,125,41,27,114,7,1,0,0,114,152,0,0,0,114, + 91,1,0,0,114,40,0,0,0,114,98,1,0,0,114,219, + 0,0,0,218,10,109,101,109,111,114,121,118,105,101,119,114, + 234,0,0,0,218,21,99,104,101,99,107,95,104,97,115,104, + 95,98,97,115,101,100,95,112,121,99,115,114,226,0,0,0, + 218,17,95,82,65,87,95,77,65,71,73,67,95,78,85,77, + 66,69,82,114,227,0,0,0,114,224,0,0,0,114,207,0, + 0,0,114,215,0,0,0,114,237,0,0,0,114,188,0,0, + 0,114,216,0,0,0,114,87,0,0,0,114,134,0,0,0, + 114,104,1,0,0,114,20,0,0,0,218,19,100,111,110,116, + 95,119,114,105,116,101,95,98,121,116,101,99,111,100,101,114, + 246,0,0,0,114,243,0,0,0,114,7,0,0,0,114,95, + 1,0,0,41,15,114,189,0,0,0,114,42,1,0,0,114, + 176,0,0,0,114,222,0,0,0,114,254,0,0,0,114,226, + 0,0,0,218,10,104,97,115,104,95,98,97,115,101,100,218, + 12,99,104,101,99,107,95,115,111,117,114,99,101,114,173,0, + 0,0,218,2,115,116,114,48,0,0,0,114,217,0,0,0, + 114,21,0,0,0,218,10,98,121,116,101,115,95,100,97,116, + 97,218,11,99,111,100,101,95,111,98,106,101,99,116,115,15, + 0,0,0,32,32,32,32,32,32,32,32,32,32,32,32,32, + 32,32,114,10,0,0,0,114,76,1,0,0,122,21,83,111, + 117,114,99,101,76,111,97,100,101,114,46,103,101,116,95,99, + 111,100,101,38,4,0,0,115,147,2,0,0,128,0,240,14, + 0,23,27,215,22,39,209,22,39,168,8,211,22,49,136,11, + 216,23,27,136,12,216,23,27,136,12,216,22,26,136,11,216, + 21,26,136,10,216,23,27,136,12,240,2,51,9,74,1,220, + 28,45,168,107,211,28,58,136,77,240,8,46,13,74,1,216, + 21,25,151,95,145,95,160,91,211,21,49,144,2,244,8,0, + 32,35,160,50,160,103,161,59,211,31,47,144,12,240,2,40, + 17,74,1,216,27,31,159,61,153,61,168,29,211,27,55,144, + 68,240,10,0,33,41,216,32,45,241,5,3,35,22,144,75, + 240,8,31,21,74,1,220,32,45,168,100,176,72,184,107,211, + 32,74,152,5,220,37,47,176,4,211,37,53,176,98,176,99, + 208,37,58,152,10,216,37,42,168,83,161,91,176,65,209,37, + 53,152,10,217,27,37,216,43,48,176,52,169,60,184,49,209, + 43,60,152,76,220,32,36,215,32,58,209,32,58,184,103,210, + 32,69,217,33,45,220,33,37,215,33,59,209,33,59,184,120, + 210,33,71,216,47,51,175,125,169,125,184,91,211,47,73,160, + 12,220,46,50,215,46,62,209,46,62,220,36,53,216,36,48, + 243,5,3,47,34,160,11,244,8,0,33,51,176,52,184,27, + 192,104,216,51,62,245,3,1,33,64,1,244,6,0,29,52, + 216,32,36,216,32,44,216,32,34,160,54,161,10,216,32,40, + 216,32,43,244,11,6,29,30,244,20,0,25,35,215,24,51, + 209,24,51,176,79,192,93,216,52,63,244,3,1,25,65,1, + 228,31,48,176,26,192,40,216,63,76,216,61,72,244,5,2, + 32,74,1,240,0,2,25,74,1,248,244,11,0,29,40,172, + 24,208,27,50,242,0,1,21,29,217,24,28,240,3,1,21, + 29,251,244,63,0,24,31,242,0,1,17,25,217,20,24,240, + 3,1,17,25,251,244,13,0,20,27,242,0,1,13,21,217, + 16,20,240,3,1,13,21,251,244,11,0,16,35,242,0,1, + 9,33,216,28,32,138,77,240,3,1,9,33,250,240,100,1, + 0,12,24,208,11,31,216,27,31,159,61,153,61,168,27,211, + 27,53,136,76,216,22,26,215,22,41,209,22,41,168,44,184, + 11,211,22,68,136,11,220,8,18,215,8,35,209,8,35,208, + 36,57,184,59,212,8,71,220,16,19,215,16,39,210,16,39, + 168,77,208,44,69,216,16,28,208,16,40,217,15,25,216,19, + 30,208,19,38,220,34,38,215,34,50,209,34,50,212,51,68, + 216,51,63,243,3,1,35,65,1,144,75,228,23,40,168,27, + 176,107,192,60,211,23,80,145,4,228,23,45,168,107,184,60, + 220,46,49,176,44,211,46,63,243,3,1,24,65,1,144,4, + 240,4,3,13,21,216,16,20,215,16,36,209,16,36,160,91, + 176,45,192,20,212,16,70,240,6,0,16,27,208,8,26,248, + 244,5,0,20,39,242,0,1,13,21,216,16,20,216,15,26, + 208,8,26,240,5,1,13,21,250,224,15,26,208,8,26,115, + 89,0,0,0,157,11,69,26,0,169,17,69,11,0,193,9, + 17,68,60,0,193,32,66,33,68,39,0,196,39,15,68,57, + 3,196,56,1,68,57,3,196,60,9,69,8,3,197,7,1, + 69,8,3,197,11,9,69,23,3,197,22,1,69,23,3,197, + 26,11,69,40,3,197,39,1,69,40,3,199,61,19,72,18, + 0,200,18,9,72,31,3,200,30,1,72,31,3,78,41,10, + 114,196,0,0,0,114,195,0,0,0,114,197,0,0,0,114, + 89,1,0,0,114,91,1,0,0,114,95,1,0,0,114,93, + 1,0,0,114,99,1,0,0,114,104,1,0,0,114,76,1, + 0,0,114,30,0,0,0,114,28,0,0,0,114,10,0,0, + 0,114,86,1,0,0,114,86,1,0,0,235,3,0,0,115, + 44,0,0,0,132,0,242,4,6,5,22,242,16,12,5,48, + 242,28,8,5,47,242,20,4,5,12,242,14,8,5,43,240, + 20,0,55,57,244,0,6,5,79,1,243,16,83,1,5,27, + 114,28,0,0,0,114,86,1,0,0,99,0,0,0,0,0, + 0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,243, + 100,0,0,0,135,0,151,0,101,0,90,1,100,0,90,2, + 100,1,90,3,100,2,132,0,90,4,100,3,132,0,90,5, + 100,4,132,0,90,6,101,7,136,0,102,1,100,5,132,8, + 171,0,0,0,0,0,0,0,90,8,101,7,100,6,132,0, + 171,0,0,0,0,0,0,0,90,9,100,7,132,0,90,10, + 101,7,100,8,132,0,171,0,0,0,0,0,0,0,90,11, + 136,0,120,1,90,12,83,0,41,9,218,10,70,105,108,101, + 76,111,97,100,101,114,122,103,66,97,115,101,32,102,105,108, + 101,32,108,111,97,100,101,114,32,99,108,97,115,115,32,119, + 104,105,99,104,32,105,109,112,108,101,109,101,110,116,115,32, + 116,104,101,32,108,111,97,100,101,114,32,112,114,111,116,111, + 99,111,108,32,109,101,116,104,111,100,115,32,116,104,97,116, + 10,32,32,32,32,114,101,113,117,105,114,101,32,102,105,108, + 101,32,115,121,115,116,101,109,32,117,115,97,103,101,46,99, + 3,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, + 3,0,0,0,243,32,0,0,0,151,0,124,1,124,0,95, + 0,0,0,0,0,0,0,0,0,124,2,124,0,95,1,0, + 0,0,0,0,0,0,0,121,1,41,2,122,75,67,97,99, + 104,101,32,116,104,101,32,109,111,100,117,108,101,32,110,97, + 109,101,32,97,110,100,32,116,104,101,32,112,97,116,104,32, + 116,111,32,116,104,101,32,102,105,108,101,32,102,111,117,110, + 100,32,98,121,32,116,104,101,10,32,32,32,32,32,32,32, + 32,102,105,110,100,101,114,46,78,114,229,0,0,0,41,3, + 114,189,0,0,0,114,42,1,0,0,114,68,0,0,0,115, + 3,0,0,0,32,32,32,114,10,0,0,0,114,67,1,0, + 0,122,19,70,105,108,101,76,111,97,100,101,114,46,95,95, + 105,110,105,116,95,95,129,4,0,0,115,18,0,0,0,128, + 0,240,6,0,21,29,136,4,140,9,216,20,24,136,4,141, + 9,114,28,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,106,0,0,0, + 151,0,124,0,106,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,124,1,106,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,107,40, + 0,0,120,1,114,25,1,0,124,0,106,2,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,124,1, 106,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,171,1,0,0,0,0,0,0,116,1,0,0, - 0,0,0,0,0,0,124,0,106,4,0,0,0,0,0,0, + 0,0,0,0,107,40,0,0,83,0,114,77,0,0,0,169, + 2,218,9,95,95,99,108,97,115,115,95,95,114,202,0,0, + 0,169,2,114,189,0,0,0,218,5,111,116,104,101,114,115, + 2,0,0,0,32,32,114,10,0,0,0,218,6,95,95,101, + 113,95,95,122,17,70,105,108,101,76,111,97,100,101,114,46, + 95,95,101,113,95,95,135,4,0,0,243,44,0,0,0,128, + 0,216,16,20,151,14,145,14,160,37,167,47,161,47,209,16, + 49,242,0,1,17,48,216,16,20,151,13,145,13,160,21,167, + 30,161,30,209,16,47,240,3,1,9,49,114,28,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,88,0,0,0,151,0,116,1,0,0, + 0,0,0,0,0,0,124,0,106,2,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,171,1,0,0, - 0,0,0,0,122,12,0,0,83,0,114,77,0,0,0,169, - 3,218,4,104,97,115,104,114,187,0,0,0,114,68,0,0, - 0,169,1,114,189,0,0,0,115,1,0,0,0,32,114,10, - 0,0,0,218,8,95,95,104,97,115,104,95,95,122,19,70, - 105,108,101,76,111,97,100,101,114,46,95,95,104,97,115,104, - 95,95,139,4,0,0,243,29,0,0,0,128,0,220,15,19, - 144,68,151,73,145,73,139,127,164,20,160,100,167,105,161,105, - 163,31,209,15,48,208,8,48,114,28,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,42,0,0,0,149,1,151,0,116,0,0,0,0, - 0,0,0,0,0,116,2,0,0,0,0,0,0,0,0,124, - 0,141,11,0,0,124,1,171,1,0,0,0,0,0,0,83, - 0,41,1,122,100,76,111,97,100,32,97,32,109,111,100,117, - 108,101,32,102,114,111,109,32,97,32,102,105,108,101,46,10, - 10,32,32,32,32,32,32,32,32,84,104,105,115,32,109,101, - 116,104,111,100,32,105,115,32,100,101,112,114,101,99,97,116, - 101,100,46,32,32,85,115,101,32,101,120,101,99,95,109,111, - 100,117,108,101,40,41,32,105,110,115,116,101,97,100,46,10, - 10,32,32,32,32,32,32,32,32,41,3,218,5,115,117,112, - 101,114,114,119,1,0,0,114,84,1,0,0,41,3,114,189, - 0,0,0,114,42,1,0,0,114,123,1,0,0,115,3,0, - 0,0,32,32,128,114,10,0,0,0,114,84,1,0,0,122, - 22,70,105,108,101,76,111,97,100,101,114,46,108,111,97,100, - 95,109,111,100,117,108,101,142,4,0,0,115,23,0,0,0, - 248,128,0,244,20,0,16,21,148,90,160,20,209,15,50,176, - 56,211,15,60,208,8,60,114,28,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,26,0,0,0,151,0,124,0,106,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,83,0, - 169,1,122,58,82,101,116,117,114,110,32,116,104,101,32,112, - 97,116,104,32,116,111,32,116,104,101,32,115,111,117,114,99, - 101,32,102,105,108,101,32,97,115,32,102,111,117,110,100,32, - 98,121,32,116,104,101,32,102,105,110,100,101,114,46,114,84, - 0,0,0,114,83,1,0,0,115,2,0,0,0,32,32,114, - 10,0,0,0,114,7,1,0,0,122,23,70,105,108,101,76, - 111,97,100,101,114,46,103,101,116,95,102,105,108,101,110,97, - 109,101,154,4,0,0,243,14,0,0,0,128,0,240,6,0, - 16,20,143,121,137,121,208,8,24,114,28,0,0,0,99,2, - 0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,3, - 0,0,0,243,46,1,0,0,151,0,116,1,0,0,0,0, - 0,0,0,0,124,0,116,2,0,0,0,0,0,0,0,0, - 116,4,0,0,0,0,0,0,0,0,102,2,171,2,0,0, - 0,0,0,0,114,56,116,7,0,0,0,0,0,0,0,0, - 106,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,116,11,0,0,0,0,0,0,0,0,124,1, - 171,1,0,0,0,0,0,0,171,1,0,0,0,0,0,0, - 53,0,125,2,124,2,106,13,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,171,0,0,0,0,0, - 0,0,99,2,100,1,100,1,100,1,171,2,0,0,0,0, - 0,0,1,0,83,0,116,7,0,0,0,0,0,0,0,0, - 106,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,124,1,100,2,171,2,0,0,0,0,0,0, - 53,0,125,2,124,2,106,13,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,171,0,0,0,0,0, - 0,0,99,2,100,1,100,1,100,1,171,2,0,0,0,0, - 0,0,1,0,83,0,35,0,49,0,115,1,119,2,1,0, - 89,0,1,0,1,0,121,1,120,3,89,0,119,1,35,0, - 49,0,115,1,119,2,1,0,89,0,1,0,1,0,121,1, - 120,3,89,0,119,1,41,3,122,39,82,101,116,117,114,110, - 32,116,104,101,32,100,97,116,97,32,102,114,111,109,32,112, - 97,116,104,32,97,115,32,114,97,119,32,98,121,116,101,115, - 46,78,218,1,114,41,8,114,232,0,0,0,114,86,1,0, - 0,218,19,69,120,116,101,110,115,105,111,110,70,105,108,101, - 76,111,97,100,101,114,114,114,0,0,0,218,9,111,112,101, - 110,95,99,111,100,101,114,136,0,0,0,218,4,114,101,97, - 100,114,115,0,0,0,41,3,114,189,0,0,0,114,68,0, - 0,0,114,120,0,0,0,115,3,0,0,0,32,32,32,114, - 10,0,0,0,114,98,1,0,0,122,19,70,105,108,101,76, - 111,97,100,101,114,46,103,101,116,95,100,97,116,97,159,4, - 0,0,115,124,0,0,0,128,0,228,11,21,144,100,156,92, - 212,43,62,208,28,63,212,11,64,220,17,20,151,29,145,29, - 156,115,160,52,155,121,211,17,41,240,0,1,13,35,168,84, - 216,23,27,151,121,145,121,147,123,247,3,1,13,35,241,0, - 1,13,35,244,6,0,18,21,151,26,145,26,152,68,160,35, - 211,17,38,240,0,1,13,35,168,36,216,23,27,151,121,145, - 121,147,123,247,3,1,13,35,241,0,1,13,35,247,7,1, - 13,35,240,0,1,13,35,250,247,6,1,13,35,240,0,1, - 13,35,250,115,23,0,0,0,181,16,65,63,3,193,37,16, - 66,11,3,193,63,5,66,8,7,194,11,5,66,20,7,99, - 2,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0, - 3,0,0,0,243,30,0,0,0,151,0,100,1,100,2,108, - 0,109,1,125,2,1,0,2,0,124,2,124,0,171,1,0, - 0,0,0,0,0,83,0,41,3,78,114,1,0,0,0,41, - 1,218,10,70,105,108,101,82,101,97,100,101,114,41,2,218, - 17,105,109,112,111,114,116,108,105,98,46,114,101,97,100,101, - 114,115,114,145,1,0,0,41,3,114,189,0,0,0,114,79, - 1,0,0,114,145,1,0,0,115,3,0,0,0,32,32,32, - 114,10,0,0,0,218,19,103,101,116,95,114,101,115,111,117, - 114,99,101,95,114,101,97,100,101,114,122,30,70,105,108,101, - 76,111,97,100,101,114,46,103,101,116,95,114,101,115,111,117, - 114,99,101,95,114,101,97,100,101,114,168,4,0,0,115,16, - 0,0,0,128,0,229,8,48,217,15,25,152,36,211,15,31, - 208,8,31,114,28,0,0,0,41,13,114,196,0,0,0,114, - 195,0,0,0,114,197,0,0,0,114,198,0,0,0,114,67, - 1,0,0,114,126,1,0,0,114,132,1,0,0,114,208,0, - 0,0,114,84,1,0,0,114,7,1,0,0,114,98,1,0, - 0,114,147,1,0,0,218,13,95,95,99,108,97,115,115,99, - 101,108,108,95,95,41,1,114,123,1,0,0,115,1,0,0, - 0,64,114,10,0,0,0,114,119,1,0,0,114,119,1,0, - 0,124,4,0,0,115,88,0,0,0,248,132,0,241,4,1, - 5,34,242,6,4,5,25,242,12,2,5,49,242,8,1,5, - 49,240,6,0,6,17,243,2,9,5,61,243,3,0,6,17, - 240,2,9,5,61,240,22,0,6,17,241,2,2,5,25,243, - 3,0,6,17,240,2,2,5,25,242,8,7,5,35,240,18, - 0,6,17,241,2,2,5,32,243,3,0,6,17,244,2,2, - 5,32,114,28,0,0,0,114,119,1,0,0,99,0,0,0, - 0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0, - 0,243,40,0,0,0,151,0,101,0,90,1,100,0,90,2, - 100,1,90,3,100,2,132,0,90,4,100,3,132,0,90,5, - 100,4,100,5,156,1,100,6,132,2,90,6,121,7,41,8, - 218,16,83,111,117,114,99,101,70,105,108,101,76,111,97,100, - 101,114,122,62,67,111,110,99,114,101,116,101,32,105,109,112, - 108,101,109,101,110,116,97,116,105,111,110,32,111,102,32,83, - 111,117,114,99,101,76,111,97,100,101,114,32,117,115,105,110, - 103,32,116,104,101,32,102,105,108,101,32,115,121,115,116,101, - 109,46,99,2,0,0,0,0,0,0,0,0,0,0,0,3, - 0,0,0,3,0,0,0,243,74,0,0,0,151,0,116,1, - 0,0,0,0,0,0,0,0,124,1,171,1,0,0,0,0, - 0,0,125,2,124,2,106,2,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,124,2,106,4,0,0, + 0,0,0,0,116,1,0,0,0,0,0,0,0,0,124,0, + 106,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,171,1,0,0,0,0,0,0,122,12,0,0, + 83,0,114,77,0,0,0,169,3,218,4,104,97,115,104,114, + 187,0,0,0,114,68,0,0,0,169,1,114,189,0,0,0, + 115,1,0,0,0,32,114,10,0,0,0,218,8,95,95,104, + 97,115,104,95,95,122,19,70,105,108,101,76,111,97,100,101, + 114,46,95,95,104,97,115,104,95,95,139,4,0,0,243,29, + 0,0,0,128,0,220,15,19,144,68,151,73,145,73,139,127, + 164,20,160,100,167,105,161,105,163,31,209,15,48,208,8,48, + 114,28,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,42,0,0,0,149, + 1,151,0,116,0,0,0,0,0,0,0,0,0,116,2,0, + 0,0,0,0,0,0,0,124,0,141,11,0,0,124,1,171, + 1,0,0,0,0,0,0,83,0,41,1,122,100,76,111,97, + 100,32,97,32,109,111,100,117,108,101,32,102,114,111,109,32, + 97,32,102,105,108,101,46,10,10,32,32,32,32,32,32,32, + 32,84,104,105,115,32,109,101,116,104,111,100,32,105,115,32, + 100,101,112,114,101,99,97,116,101,100,46,32,32,85,115,101, + 32,101,120,101,99,95,109,111,100,117,108,101,40,41,32,105, + 110,115,116,101,97,100,46,10,10,32,32,32,32,32,32,32, + 32,41,3,218,5,115,117,112,101,114,114,119,1,0,0,114, + 84,1,0,0,41,3,114,189,0,0,0,114,42,1,0,0, + 114,123,1,0,0,115,3,0,0,0,32,32,128,114,10,0, + 0,0,114,84,1,0,0,122,22,70,105,108,101,76,111,97, + 100,101,114,46,108,111,97,100,95,109,111,100,117,108,101,142, + 4,0,0,115,23,0,0,0,248,128,0,244,20,0,16,21, + 148,90,160,20,209,15,50,176,56,211,15,60,208,8,60,114, + 28,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,26,0,0,0,151,0, + 124,0,106,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,83,0,169,1,122,58,82,101,116,117, + 114,110,32,116,104,101,32,112,97,116,104,32,116,111,32,116, + 104,101,32,115,111,117,114,99,101,32,102,105,108,101,32,97, + 115,32,102,111,117,110,100,32,98,121,32,116,104,101,32,102, + 105,110,100,101,114,46,114,84,0,0,0,114,83,1,0,0, + 115,2,0,0,0,32,32,114,10,0,0,0,114,7,1,0, + 0,122,23,70,105,108,101,76,111,97,100,101,114,46,103,101, + 116,95,102,105,108,101,110,97,109,101,154,4,0,0,243,14, + 0,0,0,128,0,240,6,0,16,20,143,121,137,121,208,8, + 24,114,28,0,0,0,99,2,0,0,0,0,0,0,0,0, + 0,0,0,6,0,0,0,3,0,0,0,243,46,1,0,0, + 151,0,116,1,0,0,0,0,0,0,0,0,124,0,116,2, + 0,0,0,0,0,0,0,0,116,4,0,0,0,0,0,0, + 0,0,102,2,171,2,0,0,0,0,0,0,114,56,116,7, + 0,0,0,0,0,0,0,0,106,8,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,116,11,0,0, + 0,0,0,0,0,0,124,1,171,1,0,0,0,0,0,0, + 171,1,0,0,0,0,0,0,53,0,125,2,124,2,106,13, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 100,1,156,2,83,0,41,2,122,33,82,101,116,117,114,110, - 32,116,104,101,32,109,101,116,97,100,97,116,97,32,102,111, - 114,32,116,104,101,32,112,97,116,104,46,41,2,114,242,0, - 0,0,114,108,1,0,0,41,3,114,85,0,0,0,218,8, - 115,116,95,109,116,105,109,101,218,7,115,116,95,115,105,122, - 101,41,3,114,189,0,0,0,114,68,0,0,0,114,115,1, - 0,0,115,3,0,0,0,32,32,32,114,10,0,0,0,114, - 91,1,0,0,122,27,83,111,117,114,99,101,70,105,108,101, - 76,111,97,100,101,114,46,112,97,116,104,95,115,116,97,116, - 115,178,4,0,0,115,31,0,0,0,128,0,228,13,23,152, - 4,211,13,29,136,2,216,25,27,159,27,153,27,168,98,175, - 106,169,106,209,15,57,208,8,57,114,28,0,0,0,99,4, - 0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,3, - 0,0,0,243,64,0,0,0,151,0,116,1,0,0,0,0, - 0,0,0,0,124,1,171,1,0,0,0,0,0,0,125,4, - 124,0,106,3,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,124,2,124,3,124,4,172,1,171,3, - 0,0,0,0,0,0,83,0,41,2,78,169,1,218,5,95, - 109,111,100,101,41,2,114,183,0,0,0,114,93,1,0,0, - 41,5,114,189,0,0,0,114,176,0,0,0,114,173,0,0, - 0,114,48,0,0,0,114,89,0,0,0,115,5,0,0,0, - 32,32,32,32,32,114,10,0,0,0,114,95,1,0,0,122, - 32,83,111,117,114,99,101,70,105,108,101,76,111,97,100,101, - 114,46,95,99,97,99,104,101,95,98,121,116,101,99,111,100, - 101,183,4,0,0,115,33,0,0,0,128,0,228,15,25,152, - 43,211,15,38,136,4,216,15,19,143,125,137,125,152,93,168, - 68,184,4,136,125,211,15,61,208,8,61,114,28,0,0,0, - 114,107,0,0,0,114,155,1,0,0,99,3,0,0,0,0, - 0,0,0,1,0,0,0,7,0,0,0,3,0,0,0,243, - 14,2,0,0,151,0,116,1,0,0,0,0,0,0,0,0, - 124,1,171,1,0,0,0,0,0,0,92,2,0,0,125,4, - 125,5,103,0,125,6,124,4,114,56,116,3,0,0,0,0, - 0,0,0,0,124,4,171,1,0,0,0,0,0,0,115,45, - 116,1,0,0,0,0,0,0,0,0,124,4,171,1,0,0, - 0,0,0,0,92,2,0,0,125,4,125,7,124,6,106,5, + 0,0,171,0,0,0,0,0,0,0,99,2,100,1,100,1, + 100,1,171,2,0,0,0,0,0,0,1,0,83,0,116,7, + 0,0,0,0,0,0,0,0,106,14,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,124,1,100,2, + 171,2,0,0,0,0,0,0,53,0,125,2,124,2,106,13, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,124,7,171,1,0,0,0,0,0,0,1,0,124,4, - 114,12,116,3,0,0,0,0,0,0,0,0,124,4,171,1, - 0,0,0,0,0,0,115,1,140,45,116,7,0,0,0,0, - 0,0,0,0,124,6,171,1,0,0,0,0,0,0,68,0, - 93,36,0,0,125,7,116,9,0,0,0,0,0,0,0,0, - 124,4,124,7,171,2,0,0,0,0,0,0,125,4,9,0, - 116,11,0,0,0,0,0,0,0,0,106,12,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,124,4, - 171,1,0,0,0,0,0,0,1,0,140,38,4,0,9,0, - 116,23,0,0,0,0,0,0,0,0,124,1,124,2,124,3, - 171,3,0,0,0,0,0,0,1,0,116,18,0,0,0,0, - 0,0,0,0,106,21,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,100,3,124,1,171,2,0,0, - 0,0,0,0,1,0,121,2,35,0,116,14,0,0,0,0, - 0,0,0,0,36,0,114,3,1,0,89,0,140,87,116,16, - 0,0,0,0,0,0,0,0,36,0,114,34,125,8,116,18, - 0,0,0,0,0,0,0,0,106,21,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,100,1,124,4, - 124,8,171,3,0,0,0,0,0,0,1,0,89,0,100,2, - 125,8,126,8,1,0,121,2,100,2,125,8,126,8,119,1, - 119,0,120,3,89,0,119,1,35,0,116,16,0,0,0,0, - 0,0,0,0,36,0,114,33,125,8,116,18,0,0,0,0, - 0,0,0,0,106,21,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,100,1,124,1,124,8,171,3, - 0,0,0,0,0,0,1,0,89,0,100,2,125,8,126,8, - 121,2,100,2,125,8,126,8,119,1,119,0,120,3,89,0, - 119,1,41,4,122,27,87,114,105,116,101,32,98,121,116,101, - 115,32,100,97,116,97,32,116,111,32,97,32,102,105,108,101, - 46,122,27,99,111,117,108,100,32,110,111,116,32,99,114,101, - 97,116,101,32,123,33,114,125,58,32,123,33,114,125,78,122, - 12,99,114,101,97,116,101,100,32,123,33,114,125,41,12,114, - 81,0,0,0,114,96,0,0,0,114,64,0,0,0,218,8, - 114,101,118,101,114,115,101,100,114,72,0,0,0,114,23,0, - 0,0,218,5,109,107,100,105,114,218,15,70,105,108,101,69, - 120,105,115,116,115,69,114,114,111,114,114,87,0,0,0,114, - 207,0,0,0,114,215,0,0,0,114,121,0,0,0,41,9, - 114,189,0,0,0,114,68,0,0,0,114,48,0,0,0,114, - 156,1,0,0,218,6,112,97,114,101,110,116,114,151,0,0, - 0,114,66,0,0,0,114,74,0,0,0,114,31,1,0,0, - 115,9,0,0,0,32,32,32,32,32,32,32,32,32,114,10, - 0,0,0,114,93,1,0,0,122,25,83,111,117,114,99,101, - 70,105,108,101,76,111,97,100,101,114,46,115,101,116,95,100, - 97,116,97,188,4,0,0,115,0,1,0,0,128,0,228,27, - 38,160,116,211,27,44,209,8,24,136,6,144,8,216,21,23, - 136,10,225,14,20,156,91,168,22,212,29,48,220,27,38,160, - 118,211,27,46,137,76,136,70,144,68,216,12,22,215,12,29, - 209,12,29,152,100,212,12,35,241,5,0,15,21,156,91,168, - 22,213,29,48,244,8,0,21,29,152,90,211,20,40,242,0, - 12,9,23,136,68,220,21,31,160,6,168,4,211,21,45,136, - 70,240,2,10,13,23,220,16,19,151,9,145,9,152,38,213, - 16,33,240,7,12,9,23,240,26,6,9,45,220,12,25,152, - 36,160,4,160,101,212,12,44,220,12,22,215,12,39,209,12, - 39,168,14,184,4,213,12,61,248,244,23,0,20,35,242,0, - 2,13,25,225,16,24,220,19,26,242,0,5,13,23,244,6, - 0,17,27,215,16,43,209,16,43,208,44,73,216,44,50,176, - 67,244,3,1,17,57,229,16,22,251,240,11,5,13,23,251, - 244,18,0,16,23,242,0,3,9,45,228,12,22,215,12,39, - 209,12,39,208,40,69,192,116,216,40,43,247,3,1,13,45, - 241,0,1,13,45,251,240,5,3,9,45,250,115,54,0,0, - 0,193,38,21,66,34,2,193,62,35,67,26,0,194,34,9, - 67,23,5,194,45,8,67,23,5,194,53,23,67,18,5,195, - 18,5,67,23,5,195,26,9,68,4,3,195,35,23,67,63, - 3,195,63,5,68,4,3,78,41,7,114,196,0,0,0,114, - 195,0,0,0,114,197,0,0,0,114,198,0,0,0,114,91, - 1,0,0,114,95,1,0,0,114,93,1,0,0,114,30,0, - 0,0,114,28,0,0,0,114,10,0,0,0,114,150,1,0, - 0,114,150,1,0,0,174,4,0,0,115,25,0,0,0,132, - 0,225,4,72,242,4,3,5,58,242,10,3,5,62,240,10, - 0,45,50,245,0,28,5,45,114,28,0,0,0,114,150,1, - 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,151,0,101,0, - 90,1,100,0,90,2,100,1,90,3,100,2,132,0,90,4, - 100,3,132,0,90,5,121,4,41,5,218,20,83,111,117,114, - 99,101,108,101,115,115,70,105,108,101,76,111,97,100,101,114, - 122,45,76,111,97,100,101,114,32,119,104,105,99,104,32,104, - 97,110,100,108,101,115,32,115,111,117,114,99,101,108,101,115, - 115,32,102,105,108,101,32,105,109,112,111,114,116,115,46,99, - 2,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0, - 3,0,0,0,243,158,0,0,0,151,0,124,0,106,1,0, + 0,0,171,0,0,0,0,0,0,0,99,2,100,1,100,1, + 100,1,171,2,0,0,0,0,0,0,1,0,83,0,35,0, + 49,0,115,1,119,2,1,0,89,0,1,0,1,0,121,1, + 120,3,89,0,119,1,35,0,49,0,115,1,119,2,1,0, + 89,0,1,0,1,0,121,1,120,3,89,0,119,1,41,3, + 122,39,82,101,116,117,114,110,32,116,104,101,32,100,97,116, + 97,32,102,114,111,109,32,112,97,116,104,32,97,115,32,114, + 97,119,32,98,121,116,101,115,46,78,218,1,114,41,8,114, + 232,0,0,0,114,86,1,0,0,218,19,69,120,116,101,110, + 115,105,111,110,70,105,108,101,76,111,97,100,101,114,114,114, + 0,0,0,218,9,111,112,101,110,95,99,111,100,101,114,136, + 0,0,0,218,4,114,101,97,100,114,115,0,0,0,41,3, + 114,189,0,0,0,114,68,0,0,0,114,120,0,0,0,115, + 3,0,0,0,32,32,32,114,10,0,0,0,114,98,1,0, + 0,122,19,70,105,108,101,76,111,97,100,101,114,46,103,101, + 116,95,100,97,116,97,159,4,0,0,115,124,0,0,0,128, + 0,228,11,21,144,100,156,92,212,43,62,208,28,63,212,11, + 64,220,17,20,151,29,145,29,156,115,160,52,155,121,211,17, + 41,240,0,1,13,35,168,84,216,23,27,151,121,145,121,147, + 123,247,3,1,13,35,241,0,1,13,35,244,6,0,18,21, + 151,26,145,26,152,68,160,35,211,17,38,240,0,1,13,35, + 168,36,216,23,27,151,121,145,121,147,123,247,3,1,13,35, + 241,0,1,13,35,247,7,1,13,35,240,0,1,13,35,250, + 247,6,1,13,35,240,0,1,13,35,250,115,23,0,0,0, + 181,16,65,63,3,193,37,16,66,11,3,193,63,5,66,8, + 7,194,11,5,66,20,7,99,2,0,0,0,0,0,0,0, + 0,0,0,0,3,0,0,0,3,0,0,0,243,30,0,0, + 0,151,0,100,1,100,2,108,0,109,1,125,2,1,0,2, + 0,124,2,124,0,171,1,0,0,0,0,0,0,83,0,41, + 3,78,114,1,0,0,0,41,1,218,10,70,105,108,101,82, + 101,97,100,101,114,41,2,218,17,105,109,112,111,114,116,108, + 105,98,46,114,101,97,100,101,114,115,114,145,1,0,0,41, + 3,114,189,0,0,0,114,79,1,0,0,114,145,1,0,0, + 115,3,0,0,0,32,32,32,114,10,0,0,0,218,19,103, + 101,116,95,114,101,115,111,117,114,99,101,95,114,101,97,100, + 101,114,122,30,70,105,108,101,76,111,97,100,101,114,46,103, + 101,116,95,114,101,115,111,117,114,99,101,95,114,101,97,100, + 101,114,168,4,0,0,115,16,0,0,0,128,0,229,8,48, + 217,15,25,152,36,211,15,31,208,8,31,114,28,0,0,0, + 41,13,114,196,0,0,0,114,195,0,0,0,114,197,0,0, + 0,114,198,0,0,0,114,67,1,0,0,114,126,1,0,0, + 114,132,1,0,0,114,208,0,0,0,114,84,1,0,0,114, + 7,1,0,0,114,98,1,0,0,114,147,1,0,0,218,13, + 95,95,99,108,97,115,115,99,101,108,108,95,95,41,1,114, + 123,1,0,0,115,1,0,0,0,64,114,10,0,0,0,114, + 119,1,0,0,114,119,1,0,0,124,4,0,0,115,88,0, + 0,0,248,132,0,241,4,1,5,34,242,6,4,5,25,242, + 12,2,5,49,242,8,1,5,49,240,6,0,6,17,243,2, + 9,5,61,243,3,0,6,17,240,2,9,5,61,240,22,0, + 6,17,241,2,2,5,25,243,3,0,6,17,240,2,2,5, + 25,242,8,7,5,35,240,18,0,6,17,241,2,2,5,32, + 243,3,0,6,17,244,2,2,5,32,114,28,0,0,0,114, + 119,1,0,0,99,0,0,0,0,0,0,0,0,0,0,0, + 0,2,0,0,0,0,0,0,0,243,40,0,0,0,151,0, + 101,0,90,1,100,0,90,2,100,1,90,3,100,2,132,0, + 90,4,100,3,132,0,90,5,100,4,100,5,156,1,100,6, + 132,2,90,6,121,7,41,8,218,16,83,111,117,114,99,101, + 70,105,108,101,76,111,97,100,101,114,122,62,67,111,110,99, + 114,101,116,101,32,105,109,112,108,101,109,101,110,116,97,116, + 105,111,110,32,111,102,32,83,111,117,114,99,101,76,111,97, + 100,101,114,32,117,115,105,110,103,32,116,104,101,32,102,105, + 108,101,32,115,121,115,116,101,109,46,99,2,0,0,0,0, + 0,0,0,0,0,0,0,3,0,0,0,3,0,0,0,243, + 74,0,0,0,151,0,116,1,0,0,0,0,0,0,0,0, + 124,1,171,1,0,0,0,0,0,0,125,2,124,2,106,2, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,124,1,171,1,0,0,0,0,0,0,125,2,124,0,106, - 3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,124,2,171,1,0,0,0,0,0,0,125,3,124, - 1,124,2,100,1,156,2,125,4,116,5,0,0,0,0,0, - 0,0,0,124,3,124,1,124,4,171,3,0,0,0,0,0, - 0,1,0,116,7,0,0,0,0,0,0,0,0,116,9,0, - 0,0,0,0,0,0,0,124,3,171,1,0,0,0,0,0, - 0,100,2,100,0,26,0,124,1,124,2,172,3,171,3,0, - 0,0,0,0,0,83,0,41,4,78,114,229,0,0,0,114, - 211,0,0,0,41,2,114,187,0,0,0,114,173,0,0,0, - 41,5,114,7,1,0,0,114,98,1,0,0,114,219,0,0, - 0,114,237,0,0,0,114,109,1,0,0,41,5,114,189,0, - 0,0,114,42,1,0,0,114,68,0,0,0,114,48,0,0, - 0,114,217,0,0,0,115,5,0,0,0,32,32,32,32,32, - 114,10,0,0,0,114,76,1,0,0,122,29,83,111,117,114, - 99,101,108,101,115,115,70,105,108,101,76,111,97,100,101,114, - 46,103,101,116,95,99,111,100,101,223,4,0,0,115,95,0, - 0,0,128,0,216,15,19,215,15,32,209,15,32,160,24,211, - 15,42,136,4,216,15,19,143,125,137,125,152,84,211,15,34, - 136,4,240,8,0,21,29,216,20,24,241,5,3,23,10,136, - 11,244,8,0,9,22,144,100,152,72,160,107,212,8,50,220, - 15,32,220,12,22,144,116,211,12,28,152,82,152,83,208,12, - 33,216,17,25,216,26,30,244,7,4,16,10,240,0,4,9, - 10,114,28,0,0,0,99,2,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,3,0,0,0,243,4,0,0,0, - 151,0,121,1,41,2,122,39,82,101,116,117,114,110,32,78, - 111,110,101,32,97,115,32,116,104,101,114,101,32,105,115,32, - 110,111,32,115,111,117,114,99,101,32,99,111,100,101,46,78, - 114,30,0,0,0,114,83,1,0,0,115,2,0,0,0,32, - 32,114,10,0,0,0,114,99,1,0,0,122,31,83,111,117, - 114,99,101,108,101,115,115,70,105,108,101,76,111,97,100,101, - 114,46,103,101,116,95,115,111,117,114,99,101,239,4,0,0, - 243,5,0,0,0,128,0,224,15,19,114,28,0,0,0,78, - 41,6,114,196,0,0,0,114,195,0,0,0,114,197,0,0, - 0,114,198,0,0,0,114,76,1,0,0,114,99,1,0,0, - 114,30,0,0,0,114,28,0,0,0,114,10,0,0,0,114, - 163,1,0,0,114,163,1,0,0,219,4,0,0,115,15,0, - 0,0,132,0,225,4,55,242,4,14,5,10,243,32,2,5, - 20,114,28,0,0,0,114,163,1,0,0,99,0,0,0,0, - 0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0, - 243,80,0,0,0,151,0,101,0,90,1,100,0,90,2,100, - 1,90,3,100,2,132,0,90,4,100,3,132,0,90,5,100, - 4,132,0,90,6,100,5,132,0,90,7,100,6,132,0,90, - 8,100,7,132,0,90,9,100,8,132,0,90,10,100,9,132, - 0,90,11,101,12,100,10,132,0,171,0,0,0,0,0,0, - 0,90,13,121,11,41,12,114,141,1,0,0,122,93,76,111, - 97,100,101,114,32,102,111,114,32,101,120,116,101,110,115,105, - 111,110,32,109,111,100,117,108,101,115,46,10,10,32,32,32, - 32,84,104,101,32,99,111,110,115,116,114,117,99,116,111,114, - 32,105,115,32,100,101,115,105,103,110,101,100,32,116,111,32, - 119,111,114,107,32,119,105,116,104,32,70,105,108,101,70,105, - 110,100,101,114,46,10,10,32,32,32,32,99,3,0,0,0, - 0,0,0,0,0,0,0,0,2,0,0,0,3,0,0,0, - 243,32,0,0,0,151,0,124,1,124,0,95,0,0,0,0, - 0,0,0,0,0,124,2,124,0,95,1,0,0,0,0,0, - 0,0,0,121,0,114,77,0,0,0,114,229,0,0,0,41, - 3,114,189,0,0,0,114,187,0,0,0,114,68,0,0,0, - 115,3,0,0,0,32,32,32,114,10,0,0,0,114,67,1, - 0,0,122,28,69,120,116,101,110,115,105,111,110,70,105,108, - 101,76,111,97,100,101,114,46,95,95,105,110,105,116,95,95, - 252,4,0,0,115,16,0,0,0,128,0,216,20,24,136,4, - 140,9,216,20,24,136,4,141,9,114,28,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,106,0,0,0,151,0,124,0,106,0,0,0, + 0,0,124,2,106,4,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,100,1,156,2,83,0,41,2, + 122,33,82,101,116,117,114,110,32,116,104,101,32,109,101,116, + 97,100,97,116,97,32,102,111,114,32,116,104,101,32,112,97, + 116,104,46,41,2,114,242,0,0,0,114,108,1,0,0,41, + 3,114,85,0,0,0,218,8,115,116,95,109,116,105,109,101, + 218,7,115,116,95,115,105,122,101,41,3,114,189,0,0,0, + 114,68,0,0,0,114,115,1,0,0,115,3,0,0,0,32, + 32,32,114,10,0,0,0,114,91,1,0,0,122,27,83,111, + 117,114,99,101,70,105,108,101,76,111,97,100,101,114,46,112, + 97,116,104,95,115,116,97,116,115,178,4,0,0,115,31,0, + 0,0,128,0,228,13,23,152,4,211,13,29,136,2,216,25, + 27,159,27,153,27,168,98,175,106,169,106,209,15,57,208,8, + 57,114,28,0,0,0,99,4,0,0,0,0,0,0,0,0, + 0,0,0,5,0,0,0,3,0,0,0,243,64,0,0,0, + 151,0,116,1,0,0,0,0,0,0,0,0,124,1,171,1, + 0,0,0,0,0,0,125,4,124,0,106,3,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,124,2, + 124,3,124,4,172,1,171,3,0,0,0,0,0,0,83,0, + 41,2,78,169,1,218,5,95,109,111,100,101,41,2,114,183, + 0,0,0,114,93,1,0,0,41,5,114,189,0,0,0,114, + 176,0,0,0,114,173,0,0,0,114,48,0,0,0,114,89, + 0,0,0,115,5,0,0,0,32,32,32,32,32,114,10,0, + 0,0,114,95,1,0,0,122,32,83,111,117,114,99,101,70, + 105,108,101,76,111,97,100,101,114,46,95,99,97,99,104,101, + 95,98,121,116,101,99,111,100,101,183,4,0,0,115,33,0, + 0,0,128,0,228,15,25,152,43,211,15,38,136,4,216,15, + 19,143,125,137,125,152,93,168,68,184,4,136,125,211,15,61, + 208,8,61,114,28,0,0,0,114,107,0,0,0,114,155,1, + 0,0,99,3,0,0,0,0,0,0,0,1,0,0,0,7, + 0,0,0,3,0,0,0,243,14,2,0,0,151,0,116,1, + 0,0,0,0,0,0,0,0,124,1,171,1,0,0,0,0, + 0,0,92,2,0,0,125,4,125,5,103,0,125,6,124,4, + 114,56,116,3,0,0,0,0,0,0,0,0,124,4,171,1, + 0,0,0,0,0,0,115,45,116,1,0,0,0,0,0,0, + 0,0,124,4,171,1,0,0,0,0,0,0,92,2,0,0, + 125,4,125,7,124,6,106,5,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,124,7,171,1,0,0, + 0,0,0,0,1,0,124,4,114,12,116,3,0,0,0,0, + 0,0,0,0,124,4,171,1,0,0,0,0,0,0,115,1, + 140,45,116,7,0,0,0,0,0,0,0,0,124,6,171,1, + 0,0,0,0,0,0,68,0,93,36,0,0,125,7,116,9, + 0,0,0,0,0,0,0,0,124,4,124,7,171,2,0,0, + 0,0,0,0,125,4,9,0,116,11,0,0,0,0,0,0, + 0,0,106,12,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,124,4,171,1,0,0,0,0,0,0, + 1,0,140,38,4,0,9,0,116,23,0,0,0,0,0,0, + 0,0,124,1,124,2,124,3,171,3,0,0,0,0,0,0, + 1,0,116,18,0,0,0,0,0,0,0,0,106,21,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 124,1,106,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,107,40,0,0,120,1,114,25,1,0, - 124,0,106,2,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,124,1,106,2,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,107,40,0,0, - 83,0,114,77,0,0,0,114,122,1,0,0,114,124,1,0, - 0,115,2,0,0,0,32,32,114,10,0,0,0,114,126,1, - 0,0,122,26,69,120,116,101,110,115,105,111,110,70,105,108, - 101,76,111,97,100,101,114,46,95,95,101,113,95,95,0,5, - 0,0,114,127,1,0,0,114,28,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,88,0,0,0,151,0,116,1,0,0,0,0,0,0, - 0,0,124,0,106,2,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,171,1,0,0,0,0,0,0, - 116,1,0,0,0,0,0,0,0,0,124,0,106,4,0,0, + 100,3,124,1,171,2,0,0,0,0,0,0,1,0,121,2, + 35,0,116,14,0,0,0,0,0,0,0,0,36,0,114,3, + 1,0,89,0,140,87,116,16,0,0,0,0,0,0,0,0, + 36,0,114,34,125,8,116,18,0,0,0,0,0,0,0,0, + 106,21,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,100,1,124,4,124,8,171,3,0,0,0,0, + 0,0,1,0,89,0,100,2,125,8,126,8,1,0,121,2, + 100,2,125,8,126,8,119,1,119,0,120,3,89,0,119,1, + 35,0,116,16,0,0,0,0,0,0,0,0,36,0,114,33, + 125,8,116,18,0,0,0,0,0,0,0,0,106,21,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 171,1,0,0,0,0,0,0,122,12,0,0,83,0,114,77, - 0,0,0,114,129,1,0,0,114,131,1,0,0,115,1,0, - 0,0,32,114,10,0,0,0,114,132,1,0,0,122,28,69, - 120,116,101,110,115,105,111,110,70,105,108,101,76,111,97,100, - 101,114,46,95,95,104,97,115,104,95,95,4,5,0,0,114, - 133,1,0,0,114,28,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,164, - 0,0,0,151,0,116,0,0,0,0,0,0,0,0,0,106, - 3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,116,4,0,0,0,0,0,0,0,0,106,6,0, + 100,1,124,1,124,8,171,3,0,0,0,0,0,0,1,0, + 89,0,100,2,125,8,126,8,121,2,100,2,125,8,126,8, + 119,1,119,0,120,3,89,0,119,1,41,4,122,27,87,114, + 105,116,101,32,98,121,116,101,115,32,100,97,116,97,32,116, + 111,32,97,32,102,105,108,101,46,122,27,99,111,117,108,100, + 32,110,111,116,32,99,114,101,97,116,101,32,123,33,114,125, + 58,32,123,33,114,125,78,122,12,99,114,101,97,116,101,100, + 32,123,33,114,125,41,12,114,81,0,0,0,114,96,0,0, + 0,114,64,0,0,0,218,8,114,101,118,101,114,115,101,100, + 114,72,0,0,0,114,23,0,0,0,218,5,109,107,100,105, + 114,218,15,70,105,108,101,69,120,105,115,116,115,69,114,114, + 111,114,114,87,0,0,0,114,207,0,0,0,114,215,0,0, + 0,114,121,0,0,0,41,9,114,189,0,0,0,114,68,0, + 0,0,114,48,0,0,0,114,156,1,0,0,218,6,112,97, + 114,101,110,116,114,151,0,0,0,114,66,0,0,0,114,74, + 0,0,0,114,31,1,0,0,115,9,0,0,0,32,32,32, + 32,32,32,32,32,32,114,10,0,0,0,114,93,1,0,0, + 122,25,83,111,117,114,99,101,70,105,108,101,76,111,97,100, + 101,114,46,115,101,116,95,100,97,116,97,188,4,0,0,115, + 0,1,0,0,128,0,228,27,38,160,116,211,27,44,209,8, + 24,136,6,144,8,216,21,23,136,10,225,14,20,156,91,168, + 22,212,29,48,220,27,38,160,118,211,27,46,137,76,136,70, + 144,68,216,12,22,215,12,29,209,12,29,152,100,212,12,35, + 241,5,0,15,21,156,91,168,22,213,29,48,244,8,0,21, + 29,152,90,211,20,40,242,0,12,9,23,136,68,220,21,31, + 160,6,168,4,211,21,45,136,70,240,2,10,13,23,220,16, + 19,151,9,145,9,152,38,213,16,33,240,7,12,9,23,240, + 26,6,9,45,220,12,25,152,36,160,4,160,101,212,12,44, + 220,12,22,215,12,39,209,12,39,168,14,184,4,213,12,61, + 248,244,23,0,20,35,242,0,2,13,25,225,16,24,220,19, + 26,242,0,5,13,23,244,6,0,17,27,215,16,43,209,16, + 43,208,44,73,216,44,50,176,67,244,3,1,17,57,229,16, + 22,251,240,11,5,13,23,251,244,18,0,16,23,242,0,3, + 9,45,228,12,22,215,12,39,209,12,39,208,40,69,192,116, + 216,40,43,247,3,1,13,45,241,0,1,13,45,251,240,5, + 3,9,45,250,115,54,0,0,0,193,38,21,66,34,2,193, + 62,35,67,26,0,194,34,9,67,23,5,194,45,8,67,23, + 5,194,53,23,67,18,5,195,18,5,67,23,5,195,26,9, + 68,4,3,195,35,23,67,63,3,195,63,5,68,4,3,78, + 41,7,114,196,0,0,0,114,195,0,0,0,114,197,0,0, + 0,114,198,0,0,0,114,91,1,0,0,114,95,1,0,0, + 114,93,1,0,0,114,30,0,0,0,114,28,0,0,0,114, + 10,0,0,0,114,150,1,0,0,114,150,1,0,0,174,4, + 0,0,115,25,0,0,0,132,0,225,4,72,242,4,3,5, + 58,242,10,3,5,62,240,10,0,45,50,245,0,28,5,45, + 114,28,0,0,0,114,150,1,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,151,0,101,0,90,1,100,0,90,2,100,1, + 90,3,100,2,132,0,90,4,100,3,132,0,90,5,121,4, + 41,5,218,20,83,111,117,114,99,101,108,101,115,115,70,105, + 108,101,76,111,97,100,101,114,122,45,76,111,97,100,101,114, + 32,119,104,105,99,104,32,104,97,110,100,108,101,115,32,115, + 111,117,114,99,101,108,101,115,115,32,102,105,108,101,32,105, + 109,112,111,114,116,115,46,99,2,0,0,0,0,0,0,0, + 0,0,0,0,5,0,0,0,3,0,0,0,243,158,0,0, + 0,151,0,124,0,106,1,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,124,1,171,1,0,0,0, + 0,0,0,125,2,124,0,106,3,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,124,2,171,1,0, + 0,0,0,0,0,125,3,124,1,124,2,100,1,156,2,125, + 4,116,5,0,0,0,0,0,0,0,0,124,3,124,1,124, + 4,171,3,0,0,0,0,0,0,1,0,116,7,0,0,0, + 0,0,0,0,0,116,9,0,0,0,0,0,0,0,0,124, + 3,171,1,0,0,0,0,0,0,100,2,100,0,26,0,124, + 1,124,2,172,3,171,3,0,0,0,0,0,0,83,0,41, + 4,78,114,229,0,0,0,114,211,0,0,0,41,2,114,187, + 0,0,0,114,173,0,0,0,41,5,114,7,1,0,0,114, + 98,1,0,0,114,219,0,0,0,114,237,0,0,0,114,109, + 1,0,0,41,5,114,189,0,0,0,114,42,1,0,0,114, + 68,0,0,0,114,48,0,0,0,114,217,0,0,0,115,5, + 0,0,0,32,32,32,32,32,114,10,0,0,0,114,76,1, + 0,0,122,29,83,111,117,114,99,101,108,101,115,115,70,105, + 108,101,76,111,97,100,101,114,46,103,101,116,95,99,111,100, + 101,223,4,0,0,115,95,0,0,0,128,0,216,15,19,215, + 15,32,209,15,32,160,24,211,15,42,136,4,216,15,19,143, + 125,137,125,152,84,211,15,34,136,4,240,8,0,21,29,216, + 20,24,241,5,3,23,10,136,11,244,8,0,9,22,144,100, + 152,72,160,107,212,8,50,220,15,32,220,12,22,144,116,211, + 12,28,152,82,152,83,208,12,33,216,17,25,216,26,30,244, + 7,4,16,10,240,0,4,9,10,114,28,0,0,0,99,2, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3, + 0,0,0,243,4,0,0,0,151,0,121,1,41,2,122,39, + 82,101,116,117,114,110,32,78,111,110,101,32,97,115,32,116, + 104,101,114,101,32,105,115,32,110,111,32,115,111,117,114,99, + 101,32,99,111,100,101,46,78,114,30,0,0,0,114,83,1, + 0,0,115,2,0,0,0,32,32,114,10,0,0,0,114,99, + 1,0,0,122,31,83,111,117,114,99,101,108,101,115,115,70, + 105,108,101,76,111,97,100,101,114,46,103,101,116,95,115,111, + 117,114,99,101,239,4,0,0,243,5,0,0,0,128,0,224, + 15,19,114,28,0,0,0,78,41,6,114,196,0,0,0,114, + 195,0,0,0,114,197,0,0,0,114,198,0,0,0,114,76, + 1,0,0,114,99,1,0,0,114,30,0,0,0,114,28,0, + 0,0,114,10,0,0,0,114,163,1,0,0,114,163,1,0, + 0,219,4,0,0,115,15,0,0,0,132,0,225,4,55,242, + 4,14,5,10,243,32,2,5,20,114,28,0,0,0,114,163, + 1,0,0,99,0,0,0,0,0,0,0,0,0,0,0,0, + 2,0,0,0,0,0,0,0,243,80,0,0,0,151,0,101, + 0,90,1,100,0,90,2,100,1,90,3,100,2,132,0,90, + 4,100,3,132,0,90,5,100,4,132,0,90,6,100,5,132, + 0,90,7,100,6,132,0,90,8,100,7,132,0,90,9,100, + 8,132,0,90,10,100,9,132,0,90,11,101,12,100,10,132, + 0,171,0,0,0,0,0,0,0,90,13,121,11,41,12,114, + 141,1,0,0,122,93,76,111,97,100,101,114,32,102,111,114, + 32,101,120,116,101,110,115,105,111,110,32,109,111,100,117,108, + 101,115,46,10,10,32,32,32,32,84,104,101,32,99,111,110, + 115,116,114,117,99,116,111,114,32,105,115,32,100,101,115,105, + 103,110,101,100,32,116,111,32,119,111,114,107,32,119,105,116, + 104,32,70,105,108,101,70,105,110,100,101,114,46,10,10,32, + 32,32,32,99,3,0,0,0,0,0,0,0,0,0,0,0, + 2,0,0,0,3,0,0,0,243,32,0,0,0,151,0,124, + 1,124,0,95,0,0,0,0,0,0,0,0,0,124,2,124, + 0,95,1,0,0,0,0,0,0,0,0,121,0,114,77,0, + 0,0,114,229,0,0,0,41,3,114,189,0,0,0,114,187, + 0,0,0,114,68,0,0,0,115,3,0,0,0,32,32,32, + 114,10,0,0,0,114,67,1,0,0,122,28,69,120,116,101, + 110,115,105,111,110,70,105,108,101,76,111,97,100,101,114,46, + 95,95,105,110,105,116,95,95,252,4,0,0,115,16,0,0, + 0,128,0,216,20,24,136,4,140,9,216,20,24,136,4,141, + 9,114,28,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,106,0,0,0, + 151,0,124,0,106,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,124,1,106,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,107,40, + 0,0,120,1,114,25,1,0,124,0,106,2,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,124,1, + 106,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,107,40,0,0,83,0,114,77,0,0,0,114, + 122,1,0,0,114,124,1,0,0,115,2,0,0,0,32,32, + 114,10,0,0,0,114,126,1,0,0,122,26,69,120,116,101, + 110,115,105,111,110,70,105,108,101,76,111,97,100,101,114,46, + 95,95,101,113,95,95,0,5,0,0,114,127,1,0,0,114, + 28,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,88,0,0,0,151,0, + 116,1,0,0,0,0,0,0,0,0,124,0,106,2,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,124,1,171,2,0,0,0,0,0,0,125,2,116,0,0, - 0,0,0,0,0,0,0,106,9,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,100,1,124,1,106, - 10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,124,0,106,12,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,171,3,0,0,0,0,0, - 0,1,0,124,2,83,0,41,2,122,40,67,114,101,97,116, - 101,32,97,110,32,117,110,105,110,105,116,105,97,108,105,122, - 101,100,32,101,120,116,101,110,115,105,111,110,32,109,111,100, - 117,108,101,122,38,101,120,116,101,110,115,105,111,110,32,109, - 111,100,117,108,101,32,123,33,114,125,32,108,111,97,100,101, - 100,32,102,114,111,109,32,123,33,114,125,41,7,114,207,0, - 0,0,114,77,1,0,0,114,234,0,0,0,218,14,99,114, - 101,97,116,101,95,100,121,110,97,109,105,99,114,215,0,0, - 0,114,187,0,0,0,114,68,0,0,0,41,3,114,189,0, - 0,0,114,16,1,0,0,114,79,1,0,0,115,3,0,0, - 0,32,32,32,114,10,0,0,0,114,73,1,0,0,122,33, - 69,120,116,101,110,115,105,111,110,70,105,108,101,76,111,97, - 100,101,114,46,99,114,101,97,116,101,95,109,111,100,117,108, - 101,7,5,0,0,115,64,0,0,0,128,0,228,17,27,215, - 17,53,209,17,53,220,12,16,215,12,31,209,12,31,160,20, - 243,3,1,18,39,136,6,228,8,18,215,8,35,209,8,35, - 208,36,76,216,25,29,159,25,153,25,160,68,167,73,161,73, - 244,3,1,9,47,224,15,21,136,13,114,28,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,162,0,0,0,151,0,116,0,0,0,0, - 0,0,0,0,0,106,3,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,116,4,0,0,0,0,0, - 0,0,0,106,6,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,124,1,171,2,0,0,0,0,0, - 0,1,0,116,0,0,0,0,0,0,0,0,0,106,9,0, + 171,1,0,0,0,0,0,0,116,1,0,0,0,0,0,0, + 0,0,124,0,106,4,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,171,1,0,0,0,0,0,0, + 122,12,0,0,83,0,114,77,0,0,0,114,129,1,0,0, + 114,131,1,0,0,115,1,0,0,0,32,114,10,0,0,0, + 114,132,1,0,0,122,28,69,120,116,101,110,115,105,111,110, + 70,105,108,101,76,111,97,100,101,114,46,95,95,104,97,115, + 104,95,95,4,5,0,0,114,133,1,0,0,114,28,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,164,0,0,0,151,0,116,0,0, + 0,0,0,0,0,0,0,106,3,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,116,4,0,0,0, + 0,0,0,0,0,106,6,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,124,1,171,2,0,0,0, + 0,0,0,125,2,116,0,0,0,0,0,0,0,0,0,106, + 9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,100,1,124,1,106,10,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,124,0,106,12,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,100,1,124,0,106,10,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,124,0,106,12,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,171, - 3,0,0,0,0,0,0,1,0,121,2,41,3,122,30,73, - 110,105,116,105,97,108,105,122,101,32,97,110,32,101,120,116, - 101,110,115,105,111,110,32,109,111,100,117,108,101,122,40,101, - 120,116,101,110,115,105,111,110,32,109,111,100,117,108,101,32, - 123,33,114,125,32,101,120,101,99,117,116,101,100,32,102,114, - 111,109,32,123,33,114,125,78,41,7,114,207,0,0,0,114, - 77,1,0,0,114,234,0,0,0,218,12,101,120,101,99,95, - 100,121,110,97,109,105,99,114,215,0,0,0,114,187,0,0, - 0,114,68,0,0,0,169,2,114,189,0,0,0,114,79,1, - 0,0,115,2,0,0,0,32,32,114,10,0,0,0,114,80, - 1,0,0,122,31,69,120,116,101,110,115,105,111,110,70,105, - 108,101,76,111,97,100,101,114,46,101,120,101,99,95,109,111, - 100,117,108,101,15,5,0,0,115,54,0,0,0,128,0,228, - 8,18,215,8,44,209,8,44,172,84,215,45,62,209,45,62, - 192,6,212,8,71,220,8,18,215,8,35,209,8,35,208,36, - 78,216,25,29,159,25,153,25,160,68,167,73,161,73,245,3, - 1,9,47,114,28,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,100,0, - 0,0,135,2,151,0,116,1,0,0,0,0,0,0,0,0, - 124,0,106,2,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,171,1,0,0,0,0,0,0,100,1, - 25,0,0,0,138,2,116,5,0,0,0,0,0,0,0,0, - 136,2,102,1,100,2,132,8,116,6,0,0,0,0,0,0, - 0,0,68,0,171,0,0,0,0,0,0,0,171,1,0,0, - 0,0,0,0,83,0,41,3,122,49,82,101,116,117,114,110, - 32,84,114,117,101,32,105,102,32,116,104,101,32,101,120,116, - 101,110,115,105,111,110,32,109,111,100,117,108,101,32,105,115, - 32,97,32,112,97,99,107,97,103,101,46,114,6,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,46,0,0,0,149,1,75,0,1,0, - 151,0,124,0,93,12,0,0,125,1,137,2,100,0,124,1, - 122,0,0,0,107,40,0,0,150,1,151,1,1,0,140,14, - 4,0,121,1,173,3,119,1,41,2,114,67,1,0,0,78, - 114,30,0,0,0,41,3,114,8,0,0,0,218,6,115,117, - 102,102,105,120,218,9,102,105,108,101,95,110,97,109,101,115, - 3,0,0,0,32,32,128,114,10,0,0,0,114,11,0,0, - 0,122,49,69,120,116,101,110,115,105,111,110,70,105,108,101, - 76,111,97,100,101,114,46,105,115,95,112,97,99,107,97,103, - 101,46,60,108,111,99,97,108,115,62,46,60,103,101,110,101, - 120,112,114,62,24,5,0,0,115,35,0,0,0,248,232,0, - 248,128,0,242,0,1,19,53,216,23,29,240,3,0,20,29, - 160,10,168,86,209,32,51,213,19,51,241,0,1,19,53,249, - 115,4,0,0,0,131,18,21,1,41,4,114,81,0,0,0, - 114,68,0,0,0,218,3,97,110,121,114,61,1,0,0,41, - 3,114,189,0,0,0,114,42,1,0,0,114,179,1,0,0, - 115,3,0,0,0,32,32,64,114,10,0,0,0,114,10,1, - 0,0,122,30,69,120,116,101,110,115,105,111,110,70,105,108, - 101,76,111,97,100,101,114,46,105,115,95,112,97,99,107,97, - 103,101,21,5,0,0,115,48,0,0,0,248,128,0,228,20, - 31,160,4,167,9,161,9,211,20,42,168,49,209,20,45,136, - 9,220,15,18,243,0,1,19,53,220,33,51,244,3,1,19, - 53,243,0,1,16,53,240,0,1,9,53,114,28,0,0,0, - 99,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,3,0,0,0,243,4,0,0,0,151,0,121,1,41,2, - 122,63,82,101,116,117,114,110,32,78,111,110,101,32,97,115, - 32,97,110,32,101,120,116,101,110,115,105,111,110,32,109,111, - 100,117,108,101,32,99,97,110,110,111,116,32,99,114,101,97, - 116,101,32,97,32,99,111,100,101,32,111,98,106,101,99,116, - 46,78,114,30,0,0,0,114,83,1,0,0,115,2,0,0, - 0,32,32,114,10,0,0,0,114,76,1,0,0,122,28,69, - 120,116,101,110,115,105,111,110,70,105,108,101,76,111,97,100, - 101,114,46,103,101,116,95,99,111,100,101,27,5,0,0,114, - 166,1,0,0,114,28,0,0,0,99,2,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,3,0,0,0,243,4, - 0,0,0,151,0,121,1,41,2,122,53,82,101,116,117,114, - 110,32,78,111,110,101,32,97,115,32,101,120,116,101,110,115, - 105,111,110,32,109,111,100,117,108,101,115,32,104,97,118,101, - 32,110,111,32,115,111,117,114,99,101,32,99,111,100,101,46, - 78,114,30,0,0,0,114,83,1,0,0,115,2,0,0,0, - 32,32,114,10,0,0,0,114,99,1,0,0,122,30,69,120, - 116,101,110,115,105,111,110,70,105,108,101,76,111,97,100,101, - 114,46,103,101,116,95,115,111,117,114,99,101,31,5,0,0, - 114,166,1,0,0,114,28,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, - 26,0,0,0,151,0,124,0,106,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,83,0,114,137, - 1,0,0,114,84,0,0,0,114,83,1,0,0,115,2,0, - 0,0,32,32,114,10,0,0,0,114,7,1,0,0,122,32, - 69,120,116,101,110,115,105,111,110,70,105,108,101,76,111,97, - 100,101,114,46,103,101,116,95,102,105,108,101,110,97,109,101, - 35,5,0,0,114,138,1,0,0,114,28,0,0,0,78,41, - 14,114,196,0,0,0,114,195,0,0,0,114,197,0,0,0, - 114,198,0,0,0,114,67,1,0,0,114,126,1,0,0,114, - 132,1,0,0,114,73,1,0,0,114,80,1,0,0,114,10, - 1,0,0,114,76,1,0,0,114,99,1,0,0,114,208,0, - 0,0,114,7,1,0,0,114,30,0,0,0,114,28,0,0, - 0,114,10,0,0,0,114,141,1,0,0,114,141,1,0,0, - 244,4,0,0,115,67,0,0,0,132,0,241,4,4,5,8, - 242,12,2,5,25,242,8,2,5,49,242,8,1,5,49,242, - 6,6,5,22,242,16,4,5,47,242,12,4,5,53,242,12, - 2,5,20,242,8,2,5,20,240,8,0,6,17,241,2,2, - 5,25,243,3,0,6,17,241,2,2,5,25,114,28,0,0, - 0,114,141,1,0,0,99,0,0,0,0,0,0,0,0,0, - 0,0,0,1,0,0,0,0,0,0,0,243,86,0,0,0, - 151,0,101,0,90,1,100,0,90,2,100,1,90,3,100,2, - 90,4,100,3,132,0,90,5,100,4,132,0,90,6,100,5, - 132,0,90,7,100,6,132,0,90,8,100,7,132,0,90,9, - 100,8,132,0,90,10,100,9,132,0,90,11,100,10,132,0, - 90,12,100,11,132,0,90,13,100,12,132,0,90,14,100,13, - 132,0,90,15,121,14,41,15,218,14,95,78,97,109,101,115, - 112,97,99,101,80,97,116,104,97,38,1,0,0,82,101,112, - 114,101,115,101,110,116,115,32,97,32,110,97,109,101,115,112, - 97,99,101,32,112,97,99,107,97,103,101,39,115,32,112,97, - 116,104,46,32,32,73,116,32,117,115,101,115,32,116,104,101, - 32,109,111,100,117,108,101,32,110,97,109,101,10,32,32,32, - 32,116,111,32,102,105,110,100,32,105,116,115,32,112,97,114, - 101,110,116,32,109,111,100,117,108,101,44,32,97,110,100,32, - 102,114,111,109,32,116,104,101,114,101,32,105,116,32,108,111, - 111,107,115,32,117,112,32,116,104,101,32,112,97,114,101,110, - 116,39,115,10,32,32,32,32,95,95,112,97,116,104,95,95, - 46,32,32,87,104,101,110,32,116,104,105,115,32,99,104,97, - 110,103,101,115,44,32,116,104,101,32,109,111,100,117,108,101, - 39,115,32,111,119,110,32,112,97,116,104,32,105,115,32,114, - 101,99,111,109,112,117,116,101,100,44,10,32,32,32,32,117, - 115,105,110,103,32,112,97,116,104,95,102,105,110,100,101,114, - 46,32,32,70,111,114,32,116,111,112,45,108,101,118,101,108, - 32,109,111,100,117,108,101,115,44,32,116,104,101,32,112,97, - 114,101,110,116,32,109,111,100,117,108,101,39,115,32,112,97, - 116,104,10,32,32,32,32,105,115,32,115,121,115,46,112,97, - 116,104,46,114,1,0,0,0,99,4,0,0,0,0,0,0, - 0,0,0,0,0,4,0,0,0,3,0,0,0,243,140,0, - 0,0,151,0,124,1,124,0,95,0,0,0,0,0,0,0, - 0,0,124,2,124,0,95,1,0,0,0,0,0,0,0,0, - 116,5,0,0,0,0,0,0,0,0,124,0,106,7,0,0, + 0,171,3,0,0,0,0,0,0,1,0,124,2,83,0,41, + 2,122,40,67,114,101,97,116,101,32,97,110,32,117,110,105, + 110,105,116,105,97,108,105,122,101,100,32,101,120,116,101,110, + 115,105,111,110,32,109,111,100,117,108,101,122,38,101,120,116, + 101,110,115,105,111,110,32,109,111,100,117,108,101,32,123,33, + 114,125,32,108,111,97,100,101,100,32,102,114,111,109,32,123, + 33,114,125,41,7,114,207,0,0,0,114,77,1,0,0,114, + 234,0,0,0,218,14,99,114,101,97,116,101,95,100,121,110, + 97,109,105,99,114,215,0,0,0,114,187,0,0,0,114,68, + 0,0,0,41,3,114,189,0,0,0,114,16,1,0,0,114, + 79,1,0,0,115,3,0,0,0,32,32,32,114,10,0,0, + 0,114,73,1,0,0,122,33,69,120,116,101,110,115,105,111, + 110,70,105,108,101,76,111,97,100,101,114,46,99,114,101,97, + 116,101,95,109,111,100,117,108,101,7,5,0,0,115,64,0, + 0,0,128,0,228,17,27,215,17,53,209,17,53,220,12,16, + 215,12,31,209,12,31,160,20,243,3,1,18,39,136,6,228, + 8,18,215,8,35,209,8,35,208,36,76,216,25,29,159,25, + 153,25,160,68,167,73,161,73,244,3,1,9,47,224,15,21, + 136,13,114,28,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,162,0,0, + 0,151,0,116,0,0,0,0,0,0,0,0,0,106,3,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 171,0,0,0,0,0,0,0,171,1,0,0,0,0,0,0, - 124,0,95,4,0,0,0,0,0,0,0,0,124,0,106,10, + 0,116,4,0,0,0,0,0,0,0,0,106,6,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,124, + 1,171,2,0,0,0,0,0,0,1,0,116,0,0,0,0, + 0,0,0,0,0,106,9,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,100,1,124,0,106,10,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,124,0,95,6,0,0,0,0,0,0,0,0,124,3, - 124,0,95,7,0,0,0,0,0,0,0,0,121,0,114,77, - 0,0,0,41,8,218,5,95,110,97,109,101,218,5,95,112, - 97,116,104,114,179,0,0,0,218,16,95,103,101,116,95,112, - 97,114,101,110,116,95,112,97,116,104,218,17,95,108,97,115, - 116,95,112,97,114,101,110,116,95,112,97,116,104,218,6,95, - 101,112,111,99,104,218,11,95,108,97,115,116,95,101,112,111, - 99,104,218,12,95,112,97,116,104,95,102,105,110,100,101,114, - 169,4,114,189,0,0,0,114,187,0,0,0,114,68,0,0, - 0,218,11,112,97,116,104,95,102,105,110,100,101,114,115,4, - 0,0,0,32,32,32,32,114,10,0,0,0,114,67,1,0, - 0,122,23,95,78,97,109,101,115,112,97,99,101,80,97,116, - 104,46,95,95,105,110,105,116,95,95,52,5,0,0,115,58, - 0,0,0,128,0,216,21,25,136,4,140,10,216,21,25,136, - 4,140,10,220,33,38,160,116,215,39,60,209,39,60,211,39, - 62,211,33,63,136,4,212,8,30,216,27,31,159,59,153,59, - 136,4,212,8,24,216,28,39,136,4,213,8,25,114,28,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,84,0,0,0,151,0,124,0, + 0,124,0,106,12,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,171,3,0,0,0,0,0,0,1, + 0,121,2,41,3,122,30,73,110,105,116,105,97,108,105,122, + 101,32,97,110,32,101,120,116,101,110,115,105,111,110,32,109, + 111,100,117,108,101,122,40,101,120,116,101,110,115,105,111,110, + 32,109,111,100,117,108,101,32,123,33,114,125,32,101,120,101, + 99,117,116,101,100,32,102,114,111,109,32,123,33,114,125,78, + 41,7,114,207,0,0,0,114,77,1,0,0,114,234,0,0, + 0,218,12,101,120,101,99,95,100,121,110,97,109,105,99,114, + 215,0,0,0,114,187,0,0,0,114,68,0,0,0,169,2, + 114,189,0,0,0,114,79,1,0,0,115,2,0,0,0,32, + 32,114,10,0,0,0,114,80,1,0,0,122,31,69,120,116, + 101,110,115,105,111,110,70,105,108,101,76,111,97,100,101,114, + 46,101,120,101,99,95,109,111,100,117,108,101,15,5,0,0, + 115,54,0,0,0,128,0,228,8,18,215,8,44,209,8,44, + 172,84,215,45,62,209,45,62,192,6,212,8,71,220,8,18, + 215,8,35,209,8,35,208,36,78,216,25,29,159,25,153,25, + 160,68,167,73,161,73,245,3,1,9,47,114,28,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,100,0,0,0,135,2,151,0,116,1, + 0,0,0,0,0,0,0,0,124,0,106,2,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,171,1, + 0,0,0,0,0,0,100,1,25,0,0,0,138,2,116,5, + 0,0,0,0,0,0,0,0,136,2,102,1,100,2,132,8, + 116,6,0,0,0,0,0,0,0,0,68,0,171,0,0,0, + 0,0,0,0,171,1,0,0,0,0,0,0,83,0,41,3, + 122,49,82,101,116,117,114,110,32,84,114,117,101,32,105,102, + 32,116,104,101,32,101,120,116,101,110,115,105,111,110,32,109, + 111,100,117,108,101,32,105,115,32,97,32,112,97,99,107,97, + 103,101,46,114,6,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,46,0, + 0,0,149,1,75,0,1,0,151,0,124,0,93,12,0,0, + 125,1,137,2,100,0,124,1,122,0,0,0,107,40,0,0, + 150,1,151,1,1,0,140,14,4,0,121,1,173,3,119,1, + 41,2,114,67,1,0,0,78,114,30,0,0,0,41,3,114, + 8,0,0,0,218,6,115,117,102,102,105,120,218,9,102,105, + 108,101,95,110,97,109,101,115,3,0,0,0,32,32,128,114, + 10,0,0,0,114,11,0,0,0,122,49,69,120,116,101,110, + 115,105,111,110,70,105,108,101,76,111,97,100,101,114,46,105, + 115,95,112,97,99,107,97,103,101,46,60,108,111,99,97,108, + 115,62,46,60,103,101,110,101,120,112,114,62,24,5,0,0, + 115,35,0,0,0,248,232,0,248,128,0,242,0,1,19,53, + 216,23,29,240,3,0,20,29,160,10,168,86,209,32,51,213, + 19,51,241,0,1,19,53,249,115,4,0,0,0,131,18,21, + 1,41,4,114,81,0,0,0,114,68,0,0,0,218,3,97, + 110,121,114,61,1,0,0,41,3,114,189,0,0,0,114,42, + 1,0,0,114,179,1,0,0,115,3,0,0,0,32,32,64, + 114,10,0,0,0,114,10,1,0,0,122,30,69,120,116,101, + 110,115,105,111,110,70,105,108,101,76,111,97,100,101,114,46, + 105,115,95,112,97,99,107,97,103,101,21,5,0,0,115,48, + 0,0,0,248,128,0,228,20,31,160,4,167,9,161,9,211, + 20,42,168,49,209,20,45,136,9,220,15,18,243,0,1,19, + 53,220,33,51,244,3,1,19,53,243,0,1,16,53,240,0, + 1,9,53,114,28,0,0,0,99,2,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,3,0,0,0,243,4,0, + 0,0,151,0,121,1,41,2,122,63,82,101,116,117,114,110, + 32,78,111,110,101,32,97,115,32,97,110,32,101,120,116,101, + 110,115,105,111,110,32,109,111,100,117,108,101,32,99,97,110, + 110,111,116,32,99,114,101,97,116,101,32,97,32,99,111,100, + 101,32,111,98,106,101,99,116,46,78,114,30,0,0,0,114, + 83,1,0,0,115,2,0,0,0,32,32,114,10,0,0,0, + 114,76,1,0,0,122,28,69,120,116,101,110,115,105,111,110, + 70,105,108,101,76,111,97,100,101,114,46,103,101,116,95,99, + 111,100,101,27,5,0,0,114,166,1,0,0,114,28,0,0, + 0,99,2,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,3,0,0,0,243,4,0,0,0,151,0,121,1,41, + 2,122,53,82,101,116,117,114,110,32,78,111,110,101,32,97, + 115,32,101,120,116,101,110,115,105,111,110,32,109,111,100,117, + 108,101,115,32,104,97,118,101,32,110,111,32,115,111,117,114, + 99,101,32,99,111,100,101,46,78,114,30,0,0,0,114,83, + 1,0,0,115,2,0,0,0,32,32,114,10,0,0,0,114, + 99,1,0,0,122,30,69,120,116,101,110,115,105,111,110,70, + 105,108,101,76,111,97,100,101,114,46,103,101,116,95,115,111, + 117,114,99,101,31,5,0,0,114,166,1,0,0,114,28,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,26,0,0,0,151,0,124,0, 106,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,106,3,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,100,1,171,1,0,0,0,0, - 0,0,92,3,0,0,125,1,125,2,125,3,124,2,100,2, - 107,40,0,0,114,1,121,3,124,1,100,4,102,2,83,0, - 41,5,122,62,82,101,116,117,114,110,115,32,97,32,116,117, - 112,108,101,32,111,102,32,40,112,97,114,101,110,116,45,109, - 111,100,117,108,101,45,110,97,109,101,44,32,112,97,114,101, - 110,116,45,112,97,116,104,45,97,116,116,114,45,110,97,109, - 101,41,114,103,0,0,0,114,12,0,0,0,41,2,114,20, - 0,0,0,114,68,0,0,0,218,8,95,95,112,97,116,104, - 95,95,41,2,114,187,1,0,0,114,131,0,0,0,41,4, - 114,189,0,0,0,114,161,1,0,0,218,3,100,111,116,218, - 2,109,101,115,4,0,0,0,32,32,32,32,114,10,0,0, - 0,218,23,95,102,105,110,100,95,112,97,114,101,110,116,95, - 112,97,116,104,95,110,97,109,101,115,122,38,95,78,97,109, - 101,115,112,97,99,101,80,97,116,104,46,95,102,105,110,100, - 95,112,97,114,101,110,116,95,112,97,116,104,95,110,97,109, - 101,115,59,5,0,0,115,51,0,0,0,128,0,224,26,30, - 159,42,153,42,215,26,47,209,26,47,176,3,211,26,52,137, - 15,136,6,144,3,144,82,216,11,14,144,34,138,57,224,19, - 32,240,6,0,16,22,144,122,208,15,33,208,8,33,114,28, - 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,98,0,0,0,151,0,124, - 0,106,1,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,171,0,0,0,0,0,0,0,92,2,0, - 0,125,1,125,2,116,3,0,0,0,0,0,0,0,0,116, - 4,0,0,0,0,0,0,0,0,106,6,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,124,1,25, - 0,0,0,124,2,171,2,0,0,0,0,0,0,83,0,114, - 77,0,0,0,41,4,114,200,1,0,0,114,201,0,0,0, - 114,20,0,0,0,218,7,109,111,100,117,108,101,115,41,3, - 114,189,0,0,0,218,18,112,97,114,101,110,116,95,109,111, - 100,117,108,101,95,110,97,109,101,218,14,112,97,116,104,95, - 97,116,116,114,95,110,97,109,101,115,3,0,0,0,32,32, - 32,114,10,0,0,0,114,189,1,0,0,122,31,95,78,97, - 109,101,115,112,97,99,101,80,97,116,104,46,95,103,101,116, - 95,112,97,114,101,110,116,95,112,97,116,104,69,5,0,0, - 115,45,0,0,0,128,0,216,45,49,215,45,73,209,45,73, - 211,45,75,209,8,42,208,8,26,152,78,220,15,22,148,115, - 151,123,145,123,208,35,53,209,23,54,184,14,211,15,71,208, - 8,71,114,28,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,90,1,0, - 0,151,0,116,1,0,0,0,0,0,0,0,0,124,0,106, - 3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,171,0,0,0,0,0,0,0,171,1,0,0,0, - 0,0,0,125,1,124,1,124,0,106,4,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,107,55,0, - 0,115,25,124,0,106,6,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,124,0,106,8,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,107, - 55,0,0,114,95,124,0,106,11,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,124,0,106,12,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,124,1,171,2,0,0,0,0,0,0,125,2,124,2,129, - 41,124,2,106,14,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,128,29,124,2,106,16,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,114, - 17,124,2,106,16,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,124,0,95,9,0,0,0,0,0, - 0,0,0,124,1,124,0,95,2,0,0,0,0,0,0,0, - 0,124,0,106,6,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,124,0,95,4,0,0,0,0,0, - 0,0,0,124,0,106,18,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,83,0,114,77,0,0,0, - 41,10,114,179,0,0,0,114,189,1,0,0,114,190,1,0, - 0,114,191,1,0,0,114,192,1,0,0,114,193,1,0,0, - 114,187,1,0,0,114,4,1,0,0,114,5,1,0,0,114, - 188,1,0,0,41,3,114,189,0,0,0,218,11,112,97,114, - 101,110,116,95,112,97,116,104,114,16,1,0,0,115,3,0, - 0,0,32,32,32,114,10,0,0,0,218,12,95,114,101,99, - 97,108,99,117,108,97,116,101,122,27,95,78,97,109,101,115, - 112,97,99,101,80,97,116,104,46,95,114,101,99,97,108,99, - 117,108,97,116,101,73,5,0,0,115,143,0,0,0,128,0, - 228,22,27,152,68,215,28,49,209,28,49,211,28,51,211,22, - 52,136,11,216,11,22,152,36,215,26,48,209,26,48,210,11, - 48,176,68,183,75,177,75,192,52,215,67,83,209,67,83,210, - 52,83,216,19,23,215,19,36,209,19,36,160,84,167,90,161, - 90,176,27,211,19,61,136,68,240,6,0,16,20,208,15,31, - 160,68,167,75,161,75,208,36,55,216,19,23,215,19,50,210, - 19,50,216,33,37,215,33,64,209,33,64,144,68,148,74,216, - 37,48,136,68,212,12,34,216,31,35,159,123,153,123,136,68, - 212,12,28,216,15,19,143,122,137,122,208,8,25,114,28,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,52,0,0,0,151,0,116,1, - 0,0,0,0,0,0,0,0,124,0,106,3,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,171,0, - 0,0,0,0,0,0,171,1,0,0,0,0,0,0,83,0, - 114,77,0,0,0,41,2,218,4,105,116,101,114,114,207,1, - 0,0,114,131,1,0,0,115,1,0,0,0,32,114,10,0, - 0,0,218,8,95,95,105,116,101,114,95,95,122,23,95,78, - 97,109,101,115,112,97,99,101,80,97,116,104,46,95,95,105, - 116,101,114,95,95,87,5,0,0,115,22,0,0,0,128,0, - 220,15,19,144,68,215,20,37,209,20,37,211,20,39,211,15, - 40,208,8,40,114,28,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,40, - 0,0,0,151,0,124,0,106,1,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,171,0,0,0,0, - 0,0,0,124,1,25,0,0,0,83,0,114,77,0,0,0, - 169,1,114,207,1,0,0,41,2,114,189,0,0,0,218,5, - 105,110,100,101,120,115,2,0,0,0,32,32,114,10,0,0, - 0,218,11,95,95,103,101,116,105,116,101,109,95,95,122,26, - 95,78,97,109,101,115,112,97,99,101,80,97,116,104,46,95, - 95,103,101,116,105,116,101,109,95,95,90,5,0,0,115,22, - 0,0,0,128,0,216,15,19,215,15,32,209,15,32,211,15, - 34,160,53,209,15,41,208,8,41,114,28,0,0,0,99,3, - 0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,3, - 0,0,0,243,34,0,0,0,151,0,124,2,124,0,106,0, + 0,0,0,0,83,0,114,137,1,0,0,114,84,0,0,0, + 114,83,1,0,0,115,2,0,0,0,32,32,114,10,0,0, + 0,114,7,1,0,0,122,32,69,120,116,101,110,115,105,111, + 110,70,105,108,101,76,111,97,100,101,114,46,103,101,116,95, + 102,105,108,101,110,97,109,101,35,5,0,0,114,138,1,0, + 0,114,28,0,0,0,78,41,14,114,196,0,0,0,114,195, + 0,0,0,114,197,0,0,0,114,198,0,0,0,114,67,1, + 0,0,114,126,1,0,0,114,132,1,0,0,114,73,1,0, + 0,114,80,1,0,0,114,10,1,0,0,114,76,1,0,0, + 114,99,1,0,0,114,208,0,0,0,114,7,1,0,0,114, + 30,0,0,0,114,28,0,0,0,114,10,0,0,0,114,141, + 1,0,0,114,141,1,0,0,244,4,0,0,115,67,0,0, + 0,132,0,241,4,4,5,8,242,12,2,5,25,242,8,2, + 5,49,242,8,1,5,49,242,6,6,5,22,242,16,4,5, + 47,242,12,4,5,53,242,12,2,5,20,242,8,2,5,20, + 240,8,0,6,17,241,2,2,5,25,243,3,0,6,17,241, + 2,2,5,25,114,28,0,0,0,114,141,1,0,0,99,0, + 0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0, + 0,0,0,243,86,0,0,0,151,0,101,0,90,1,100,0, + 90,2,100,1,90,3,100,2,90,4,100,3,132,0,90,5, + 100,4,132,0,90,6,100,5,132,0,90,7,100,6,132,0, + 90,8,100,7,132,0,90,9,100,8,132,0,90,10,100,9, + 132,0,90,11,100,10,132,0,90,12,100,11,132,0,90,13, + 100,12,132,0,90,14,100,13,132,0,90,15,121,14,41,15, + 218,14,95,78,97,109,101,115,112,97,99,101,80,97,116,104, + 97,38,1,0,0,82,101,112,114,101,115,101,110,116,115,32, + 97,32,110,97,109,101,115,112,97,99,101,32,112,97,99,107, + 97,103,101,39,115,32,112,97,116,104,46,32,32,73,116,32, + 117,115,101,115,32,116,104,101,32,109,111,100,117,108,101,32, + 110,97,109,101,10,32,32,32,32,116,111,32,102,105,110,100, + 32,105,116,115,32,112,97,114,101,110,116,32,109,111,100,117, + 108,101,44,32,97,110,100,32,102,114,111,109,32,116,104,101, + 114,101,32,105,116,32,108,111,111,107,115,32,117,112,32,116, + 104,101,32,112,97,114,101,110,116,39,115,10,32,32,32,32, + 95,95,112,97,116,104,95,95,46,32,32,87,104,101,110,32, + 116,104,105,115,32,99,104,97,110,103,101,115,44,32,116,104, + 101,32,109,111,100,117,108,101,39,115,32,111,119,110,32,112, + 97,116,104,32,105,115,32,114,101,99,111,109,112,117,116,101, + 100,44,10,32,32,32,32,117,115,105,110,103,32,112,97,116, + 104,95,102,105,110,100,101,114,46,32,32,70,111,114,32,116, + 111,112,45,108,101,118,101,108,32,109,111,100,117,108,101,115, + 44,32,116,104,101,32,112,97,114,101,110,116,32,109,111,100, + 117,108,101,39,115,32,112,97,116,104,10,32,32,32,32,105, + 115,32,115,121,115,46,112,97,116,104,46,114,1,0,0,0, + 99,4,0,0,0,0,0,0,0,0,0,0,0,4,0,0, + 0,3,0,0,0,243,140,0,0,0,151,0,124,1,124,0, + 95,0,0,0,0,0,0,0,0,0,124,2,124,0,95,1, + 0,0,0,0,0,0,0,0,116,5,0,0,0,0,0,0, + 0,0,124,0,106,7,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,171,0,0,0,0,0,0,0, + 171,1,0,0,0,0,0,0,124,0,95,4,0,0,0,0, + 0,0,0,0,124,0,106,10,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,124,0,95,6,0,0, + 0,0,0,0,0,0,124,3,124,0,95,7,0,0,0,0, + 0,0,0,0,121,0,114,77,0,0,0,41,8,218,5,95, + 110,97,109,101,218,5,95,112,97,116,104,114,179,0,0,0, + 218,16,95,103,101,116,95,112,97,114,101,110,116,95,112,97, + 116,104,218,17,95,108,97,115,116,95,112,97,114,101,110,116, + 95,112,97,116,104,218,6,95,101,112,111,99,104,218,11,95, + 108,97,115,116,95,101,112,111,99,104,218,12,95,112,97,116, + 104,95,102,105,110,100,101,114,169,4,114,189,0,0,0,114, + 187,0,0,0,114,68,0,0,0,218,11,112,97,116,104,95, + 102,105,110,100,101,114,115,4,0,0,0,32,32,32,32,114, + 10,0,0,0,114,67,1,0,0,122,23,95,78,97,109,101, + 115,112,97,99,101,80,97,116,104,46,95,95,105,110,105,116, + 95,95,52,5,0,0,115,58,0,0,0,128,0,216,21,25, + 136,4,140,10,216,21,25,136,4,140,10,220,33,38,160,116, + 215,39,60,209,39,60,211,39,62,211,33,63,136,4,212,8, + 30,216,27,31,159,59,153,59,136,4,212,8,24,216,28,39, + 136,4,213,8,25,114,28,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, + 84,0,0,0,151,0,124,0,106,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,106,3,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,124,1,60,0,0,0,121,0,114,77,0,0,0,169, - 1,114,188,1,0,0,41,3,114,189,0,0,0,114,213,1, - 0,0,114,68,0,0,0,115,3,0,0,0,32,32,32,114, - 10,0,0,0,218,11,95,95,115,101,116,105,116,101,109,95, - 95,122,26,95,78,97,109,101,115,112,97,99,101,80,97,116, - 104,46,95,95,115,101,116,105,116,101,109,95,95,93,5,0, - 0,115,16,0,0,0,128,0,216,28,32,136,4,143,10,137, - 10,144,53,210,8,25,114,28,0,0,0,99,1,0,0,0, + 100,1,171,1,0,0,0,0,0,0,92,3,0,0,125,1, + 125,2,125,3,124,2,100,2,107,40,0,0,114,1,121,3, + 124,1,100,4,102,2,83,0,41,5,122,62,82,101,116,117, + 114,110,115,32,97,32,116,117,112,108,101,32,111,102,32,40, + 112,97,114,101,110,116,45,109,111,100,117,108,101,45,110,97, + 109,101,44,32,112,97,114,101,110,116,45,112,97,116,104,45, + 97,116,116,114,45,110,97,109,101,41,114,103,0,0,0,114, + 12,0,0,0,41,2,114,20,0,0,0,114,68,0,0,0, + 218,8,95,95,112,97,116,104,95,95,41,2,114,187,1,0, + 0,114,131,0,0,0,41,4,114,189,0,0,0,114,161,1, + 0,0,218,3,100,111,116,218,2,109,101,115,4,0,0,0, + 32,32,32,32,114,10,0,0,0,218,23,95,102,105,110,100, + 95,112,97,114,101,110,116,95,112,97,116,104,95,110,97,109, + 101,115,122,38,95,78,97,109,101,115,112,97,99,101,80,97, + 116,104,46,95,102,105,110,100,95,112,97,114,101,110,116,95, + 112,97,116,104,95,110,97,109,101,115,59,5,0,0,115,51, + 0,0,0,128,0,224,26,30,159,42,153,42,215,26,47,209, + 26,47,176,3,211,26,52,137,15,136,6,144,3,144,82,216, + 11,14,144,34,138,57,224,19,32,240,6,0,16,22,144,122, + 208,15,33,208,8,33,114,28,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,52,0,0,0,151,0,116,1,0,0,0,0,0,0,0, - 0,124,0,106,3,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,171,0,0,0,0,0,0,0,171, - 1,0,0,0,0,0,0,83,0,114,77,0,0,0,41,2, - 114,7,0,0,0,114,207,1,0,0,114,131,1,0,0,115, - 1,0,0,0,32,114,10,0,0,0,218,7,95,95,108,101, - 110,95,95,122,22,95,78,97,109,101,115,112,97,99,101,80, - 97,116,104,46,95,95,108,101,110,95,95,96,5,0,0,115, - 22,0,0,0,128,0,220,15,18,144,52,215,19,36,209,19, - 36,211,19,38,211,15,39,208,8,39,114,28,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,34,0,0,0,151,0,100,1,124,0,106, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,155,2,100,2,157,3,83,0,41,3,78,122,15, - 95,78,97,109,101,115,112,97,99,101,80,97,116,104,40,250, - 1,41,114,216,1,0,0,114,131,1,0,0,115,1,0,0, - 0,32,114,10,0,0,0,218,8,95,95,114,101,112,114,95, - 95,122,23,95,78,97,109,101,115,112,97,99,101,80,97,116, - 104,46,95,95,114,101,112,114,95,95,99,5,0,0,115,21, - 0,0,0,128,0,216,17,32,160,20,167,26,161,26,160,14, - 168,97,208,15,48,208,8,48,114,28,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,38,0,0,0,151,0,124,1,124,0,106,1,0, + 243,98,0,0,0,151,0,124,0,106,1,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,171,0,0, + 0,0,0,0,0,92,2,0,0,125,1,125,2,116,3,0, + 0,0,0,0,0,0,0,116,4,0,0,0,0,0,0,0, + 0,106,6,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,124,1,25,0,0,0,124,2,171,2,0, + 0,0,0,0,0,83,0,114,77,0,0,0,41,4,114,200, + 1,0,0,114,201,0,0,0,114,20,0,0,0,218,7,109, + 111,100,117,108,101,115,41,3,114,189,0,0,0,218,18,112, + 97,114,101,110,116,95,109,111,100,117,108,101,95,110,97,109, + 101,218,14,112,97,116,104,95,97,116,116,114,95,110,97,109, + 101,115,3,0,0,0,32,32,32,114,10,0,0,0,114,189, + 1,0,0,122,31,95,78,97,109,101,115,112,97,99,101,80, + 97,116,104,46,95,103,101,116,95,112,97,114,101,110,116,95, + 112,97,116,104,69,5,0,0,115,45,0,0,0,128,0,216, + 45,49,215,45,73,209,45,73,211,45,75,209,8,42,208,8, + 26,152,78,220,15,22,148,115,151,123,145,123,208,35,53,209, + 23,54,184,14,211,15,71,208,8,71,114,28,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,90,1,0,0,151,0,116,1,0,0,0, + 0,0,0,0,0,124,0,106,3,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,171,0,0,0,0, + 0,0,0,171,1,0,0,0,0,0,0,125,1,124,1,124, + 0,106,4,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,107,55,0,0,115,25,124,0,106,6,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,171,0,0,0,0,0,0,0,118,0,83,0,114,77,0, - 0,0,114,212,1,0,0,169,2,114,189,0,0,0,218,4, - 105,116,101,109,115,2,0,0,0,32,32,114,10,0,0,0, - 218,12,95,95,99,111,110,116,97,105,110,115,95,95,122,27, - 95,78,97,109,101,115,112,97,99,101,80,97,116,104,46,95, - 95,99,111,110,116,97,105,110,115,95,95,102,5,0,0,115, - 22,0,0,0,128,0,216,15,19,144,116,215,23,40,209,23, - 40,211,23,42,208,15,42,208,8,42,114,28,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,58,0,0,0,151,0,124,0,106,0,0, + 0,124,0,106,8,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,107,55,0,0,114,95,124,0,106, + 11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,124,0,106,12,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,124,1,171,2,0,0,0, + 0,0,0,125,2,124,2,129,41,124,2,106,14,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128, + 29,124,2,106,16,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,114,17,124,2,106,16,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,124, + 0,95,9,0,0,0,0,0,0,0,0,124,1,124,0,95, + 2,0,0,0,0,0,0,0,0,124,0,106,6,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,124, + 0,95,4,0,0,0,0,0,0,0,0,124,0,106,18,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,106,3,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,124,1,171,1,0,0,0,0,0,0,1, - 0,121,0,114,77,0,0,0,41,2,114,188,1,0,0,114, - 64,0,0,0,114,224,1,0,0,115,2,0,0,0,32,32, - 114,10,0,0,0,114,64,0,0,0,122,21,95,78,97,109, - 101,115,112,97,99,101,80,97,116,104,46,97,112,112,101,110, - 100,105,5,0,0,115,20,0,0,0,128,0,216,8,12,143, - 10,137,10,215,8,25,209,8,25,152,36,213,8,31,114,28, - 0,0,0,78,41,16,114,196,0,0,0,114,195,0,0,0, - 114,197,0,0,0,114,198,0,0,0,114,191,1,0,0,114, - 67,1,0,0,114,200,1,0,0,114,189,1,0,0,114,207, - 1,0,0,114,210,1,0,0,114,214,1,0,0,114,217,1, - 0,0,114,219,1,0,0,114,222,1,0,0,114,226,1,0, - 0,114,64,0,0,0,114,30,0,0,0,114,28,0,0,0, - 114,10,0,0,0,114,185,1,0,0,114,185,1,0,0,41, - 5,0,0,115,70,0,0,0,132,0,241,2,4,5,20,240, - 16,0,14,15,128,70,242,4,5,5,40,242,14,8,5,34, - 242,20,2,5,72,1,242,8,12,5,26,242,28,1,5,41, - 242,6,1,5,42,242,6,1,5,33,242,6,1,5,40,242, - 6,1,5,49,242,6,1,5,43,243,6,1,5,32,114,28, - 0,0,0,114,185,1,0,0,99,0,0,0,0,0,0,0, - 0,0,0,0,0,1,0,0,0,0,0,0,0,243,60,0, - 0,0,151,0,101,0,90,1,100,0,90,2,100,1,132,0, - 90,3,100,2,132,0,90,4,100,3,132,0,90,5,100,4, - 132,0,90,6,100,5,132,0,90,7,100,6,132,0,90,8, - 100,7,132,0,90,9,100,8,132,0,90,10,121,9,41,10, - 218,15,78,97,109,101,115,112,97,99,101,76,111,97,100,101, - 114,99,4,0,0,0,0,0,0,0,0,0,0,0,5,0, - 0,0,3,0,0,0,243,40,0,0,0,151,0,116,1,0, - 0,0,0,0,0,0,0,124,1,124,2,124,3,171,3,0, - 0,0,0,0,0,124,0,95,1,0,0,0,0,0,0,0, - 0,121,0,114,77,0,0,0,41,2,114,185,1,0,0,114, - 188,1,0,0,114,194,1,0,0,115,4,0,0,0,32,32, - 32,32,114,10,0,0,0,114,67,1,0,0,122,24,78,97, - 109,101,115,112,97,99,101,76,111,97,100,101,114,46,95,95, - 105,110,105,116,95,95,113,5,0,0,115,18,0,0,0,128, - 0,220,21,35,160,68,168,36,176,11,211,21,60,136,4,141, - 10,114,28,0,0,0,99,2,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,3,0,0,0,243,4,0,0,0, - 151,0,121,1,41,2,78,84,114,30,0,0,0,114,83,1, - 0,0,115,2,0,0,0,32,32,114,10,0,0,0,114,10, - 1,0,0,122,26,78,97,109,101,115,112,97,99,101,76,111, - 97,100,101,114,46,105,115,95,112,97,99,107,97,103,101,116, - 5,0,0,115,5,0,0,0,128,0,216,15,19,114,28,0, - 0,0,99,2,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,3,0,0,0,243,4,0,0,0,151,0,121,1, - 41,2,78,114,12,0,0,0,114,30,0,0,0,114,83,1, - 0,0,115,2,0,0,0,32,32,114,10,0,0,0,114,99, - 1,0,0,122,26,78,97,109,101,115,112,97,99,101,76,111, - 97,100,101,114,46,103,101,116,95,115,111,117,114,99,101,119, - 5,0,0,115,5,0,0,0,128,0,216,15,17,114,28,0, - 0,0,99,2,0,0,0,0,0,0,0,0,0,0,0,6, - 0,0,0,3,0,0,0,243,32,0,0,0,151,0,116,1, - 0,0,0,0,0,0,0,0,100,1,100,2,100,3,100,4, - 172,5,171,4,0,0,0,0,0,0,83,0,41,6,78,114, - 12,0,0,0,122,8,60,115,116,114,105,110,103,62,114,78, - 1,0,0,84,41,1,114,102,1,0,0,41,1,114,103,1, - 0,0,114,83,1,0,0,115,2,0,0,0,32,32,114,10, - 0,0,0,114,76,1,0,0,122,24,78,97,109,101,115,112, - 97,99,101,76,111,97,100,101,114,46,103,101,116,95,99,111, - 100,101,122,5,0,0,115,19,0,0,0,128,0,220,15,22, - 144,114,152,58,160,118,184,68,212,15,65,208,8,65,114,28, - 0,0,0,99,2,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,3,0,0,0,243,4,0,0,0,151,0,121, - 1,114,71,1,0,0,114,30,0,0,0,114,72,1,0,0, - 115,2,0,0,0,32,32,114,10,0,0,0,114,73,1,0, - 0,122,29,78,97,109,101,115,112,97,99,101,76,111,97,100, - 101,114,46,99,114,101,97,116,101,95,109,111,100,117,108,101, - 125,5,0,0,114,74,1,0,0,114,28,0,0,0,99,2, + 0,83,0,114,77,0,0,0,41,10,114,179,0,0,0,114, + 189,1,0,0,114,190,1,0,0,114,191,1,0,0,114,192, + 1,0,0,114,193,1,0,0,114,187,1,0,0,114,4,1, + 0,0,114,5,1,0,0,114,188,1,0,0,41,3,114,189, + 0,0,0,218,11,112,97,114,101,110,116,95,112,97,116,104, + 114,16,1,0,0,115,3,0,0,0,32,32,32,114,10,0, + 0,0,218,12,95,114,101,99,97,108,99,117,108,97,116,101, + 122,27,95,78,97,109,101,115,112,97,99,101,80,97,116,104, + 46,95,114,101,99,97,108,99,117,108,97,116,101,73,5,0, + 0,115,143,0,0,0,128,0,228,22,27,152,68,215,28,49, + 209,28,49,211,28,51,211,22,52,136,11,216,11,22,152,36, + 215,26,48,209,26,48,210,11,48,176,68,183,75,177,75,192, + 52,215,67,83,209,67,83,210,52,83,216,19,23,215,19,36, + 209,19,36,160,84,167,90,161,90,176,27,211,19,61,136,68, + 240,6,0,16,20,208,15,31,160,68,167,75,161,75,208,36, + 55,216,19,23,215,19,50,210,19,50,216,33,37,215,33,64, + 209,33,64,144,68,148,74,216,37,48,136,68,212,12,34,216, + 31,35,159,123,153,123,136,68,212,12,28,216,15,19,143,122, + 137,122,208,8,25,114,28,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, + 52,0,0,0,151,0,116,1,0,0,0,0,0,0,0,0, + 124,0,106,3,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,171,0,0,0,0,0,0,0,171,1, + 0,0,0,0,0,0,83,0,114,77,0,0,0,41,2,218, + 4,105,116,101,114,114,207,1,0,0,114,131,1,0,0,115, + 1,0,0,0,32,114,10,0,0,0,218,8,95,95,105,116, + 101,114,95,95,122,23,95,78,97,109,101,115,112,97,99,101, + 80,97,116,104,46,95,95,105,116,101,114,95,95,87,5,0, + 0,115,22,0,0,0,128,0,220,15,19,144,68,215,20,37, + 209,20,37,211,20,39,211,15,40,208,8,40,114,28,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,40,0,0,0,151,0,124,0,106, + 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,171,0,0,0,0,0,0,0,124,1,25,0,0, + 0,83,0,114,77,0,0,0,169,1,114,207,1,0,0,41, + 2,114,189,0,0,0,218,5,105,110,100,101,120,115,2,0, + 0,0,32,32,114,10,0,0,0,218,11,95,95,103,101,116, + 105,116,101,109,95,95,122,26,95,78,97,109,101,115,112,97, + 99,101,80,97,116,104,46,95,95,103,101,116,105,116,101,109, + 95,95,90,5,0,0,115,22,0,0,0,128,0,216,15,19, + 215,15,32,209,15,32,211,15,34,160,53,209,15,41,208,8, + 41,114,28,0,0,0,99,3,0,0,0,0,0,0,0,0, + 0,0,0,3,0,0,0,3,0,0,0,243,34,0,0,0, + 151,0,124,2,124,0,106,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,124,1,60,0,0,0, + 121,0,114,77,0,0,0,169,1,114,188,1,0,0,41,3, + 114,189,0,0,0,114,213,1,0,0,114,68,0,0,0,115, + 3,0,0,0,32,32,32,114,10,0,0,0,218,11,95,95, + 115,101,116,105,116,101,109,95,95,122,26,95,78,97,109,101, + 115,112,97,99,101,80,97,116,104,46,95,95,115,101,116,105, + 116,101,109,95,95,93,5,0,0,115,16,0,0,0,128,0, + 216,28,32,136,4,143,10,137,10,144,53,210,8,25,114,28, + 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,52,0,0,0,151,0,116, + 1,0,0,0,0,0,0,0,0,124,0,106,3,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,171, + 0,0,0,0,0,0,0,171,1,0,0,0,0,0,0,83, + 0,114,77,0,0,0,41,2,114,7,0,0,0,114,207,1, + 0,0,114,131,1,0,0,115,1,0,0,0,32,114,10,0, + 0,0,218,7,95,95,108,101,110,95,95,122,22,95,78,97, + 109,101,115,112,97,99,101,80,97,116,104,46,95,95,108,101, + 110,95,95,96,5,0,0,115,22,0,0,0,128,0,220,15, + 18,144,52,215,19,36,209,19,36,211,19,38,211,15,39,208, + 8,39,114,28,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,34,0,0, + 0,151,0,100,1,124,0,106,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,155,2,100,2,157, + 3,83,0,41,3,78,122,15,95,78,97,109,101,115,112,97, + 99,101,80,97,116,104,40,250,1,41,114,216,1,0,0,114, + 131,1,0,0,115,1,0,0,0,32,114,10,0,0,0,218, + 8,95,95,114,101,112,114,95,95,122,23,95,78,97,109,101, + 115,112,97,99,101,80,97,116,104,46,95,95,114,101,112,114, + 95,95,99,5,0,0,115,21,0,0,0,128,0,216,17,32, + 160,20,167,26,161,26,160,14,168,97,208,15,48,208,8,48, + 114,28,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,38,0,0,0,151, + 0,124,1,124,0,106,1,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,171,0,0,0,0,0,0, + 0,118,0,83,0,114,77,0,0,0,114,212,1,0,0,169, + 2,114,189,0,0,0,218,4,105,116,101,109,115,2,0,0, + 0,32,32,114,10,0,0,0,218,12,95,95,99,111,110,116, + 97,105,110,115,95,95,122,27,95,78,97,109,101,115,112,97, + 99,101,80,97,116,104,46,95,95,99,111,110,116,97,105,110, + 115,95,95,102,5,0,0,115,22,0,0,0,128,0,216,15, + 19,144,116,215,23,40,209,23,40,211,23,42,208,15,42,208, + 8,42,114,28,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,58,0,0, + 0,151,0,124,0,106,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,106,3,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,124,1,171, + 1,0,0,0,0,0,0,1,0,121,0,114,77,0,0,0, + 41,2,114,188,1,0,0,114,64,0,0,0,114,224,1,0, + 0,115,2,0,0,0,32,32,114,10,0,0,0,114,64,0, + 0,0,122,21,95,78,97,109,101,115,112,97,99,101,80,97, + 116,104,46,97,112,112,101,110,100,105,5,0,0,115,20,0, + 0,0,128,0,216,8,12,143,10,137,10,215,8,25,209,8, + 25,152,36,213,8,31,114,28,0,0,0,78,41,16,114,196, + 0,0,0,114,195,0,0,0,114,197,0,0,0,114,198,0, + 0,0,114,191,1,0,0,114,67,1,0,0,114,200,1,0, + 0,114,189,1,0,0,114,207,1,0,0,114,210,1,0,0, + 114,214,1,0,0,114,217,1,0,0,114,219,1,0,0,114, + 222,1,0,0,114,226,1,0,0,114,64,0,0,0,114,30, + 0,0,0,114,28,0,0,0,114,10,0,0,0,114,185,1, + 0,0,114,185,1,0,0,41,5,0,0,115,70,0,0,0, + 132,0,241,2,4,5,20,240,16,0,14,15,128,70,242,4, + 5,5,40,242,14,8,5,34,242,20,2,5,72,1,242,8, + 12,5,26,242,28,1,5,41,242,6,1,5,42,242,6,1, + 5,33,242,6,1,5,40,242,6,1,5,49,242,6,1,5, + 43,243,6,1,5,32,114,28,0,0,0,114,185,1,0,0, + 99,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0, + 0,0,0,0,0,243,60,0,0,0,151,0,101,0,90,1, + 100,0,90,2,100,1,132,0,90,3,100,2,132,0,90,4, + 100,3,132,0,90,5,100,4,132,0,90,6,100,5,132,0, + 90,7,100,6,132,0,90,8,100,7,132,0,90,9,100,8, + 132,0,90,10,121,9,41,10,218,15,78,97,109,101,115,112, + 97,99,101,76,111,97,100,101,114,99,4,0,0,0,0,0, + 0,0,0,0,0,0,5,0,0,0,3,0,0,0,243,40, + 0,0,0,151,0,116,1,0,0,0,0,0,0,0,0,124, + 1,124,2,124,3,171,3,0,0,0,0,0,0,124,0,95, + 1,0,0,0,0,0,0,0,0,121,0,114,77,0,0,0, + 41,2,114,185,1,0,0,114,188,1,0,0,114,194,1,0, + 0,115,4,0,0,0,32,32,32,32,114,10,0,0,0,114, + 67,1,0,0,122,24,78,97,109,101,115,112,97,99,101,76, + 111,97,100,101,114,46,95,95,105,110,105,116,95,95,113,5, + 0,0,115,18,0,0,0,128,0,220,21,35,160,68,168,36, + 176,11,211,21,60,136,4,141,10,114,28,0,0,0,99,2, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3, - 0,0,0,243,4,0,0,0,151,0,121,0,114,77,0,0, - 0,114,30,0,0,0,114,175,1,0,0,115,2,0,0,0, - 32,32,114,10,0,0,0,114,80,1,0,0,122,27,78,97, - 109,101,115,112,97,99,101,76,111,97,100,101,114,46,101,120, - 101,99,95,109,111,100,117,108,101,128,5,0,0,115,5,0, - 0,0,128,0,216,8,12,114,28,0,0,0,99,2,0,0, + 0,0,0,243,4,0,0,0,151,0,121,1,41,2,78,84, + 114,30,0,0,0,114,83,1,0,0,115,2,0,0,0,32, + 32,114,10,0,0,0,114,10,1,0,0,122,26,78,97,109, + 101,115,112,97,99,101,76,111,97,100,101,114,46,105,115,95, + 112,97,99,107,97,103,101,116,5,0,0,115,5,0,0,0, + 128,0,216,15,19,114,28,0,0,0,99,2,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,243, + 4,0,0,0,151,0,121,1,41,2,78,114,12,0,0,0, + 114,30,0,0,0,114,83,1,0,0,115,2,0,0,0,32, + 32,114,10,0,0,0,114,99,1,0,0,122,26,78,97,109, + 101,115,112,97,99,101,76,111,97,100,101,114,46,103,101,116, + 95,115,111,117,114,99,101,119,5,0,0,115,5,0,0,0, + 128,0,216,15,17,114,28,0,0,0,99,2,0,0,0,0, + 0,0,0,0,0,0,0,6,0,0,0,3,0,0,0,243, + 32,0,0,0,151,0,116,1,0,0,0,0,0,0,0,0, + 100,1,100,2,100,3,100,4,172,5,171,4,0,0,0,0, + 0,0,83,0,41,6,78,114,12,0,0,0,122,8,60,115, + 116,114,105,110,103,62,114,78,1,0,0,84,41,1,114,102, + 1,0,0,41,1,114,103,1,0,0,114,83,1,0,0,115, + 2,0,0,0,32,32,114,10,0,0,0,114,76,1,0,0, + 122,24,78,97,109,101,115,112,97,99,101,76,111,97,100,101, + 114,46,103,101,116,95,99,111,100,101,122,5,0,0,115,19, + 0,0,0,128,0,220,15,22,144,114,152,58,160,118,184,68, + 212,15,65,208,8,65,114,28,0,0,0,99,2,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0, + 243,4,0,0,0,151,0,121,1,114,71,1,0,0,114,30, + 0,0,0,114,72,1,0,0,115,2,0,0,0,32,32,114, + 10,0,0,0,114,73,1,0,0,122,29,78,97,109,101,115, + 112,97,99,101,76,111,97,100,101,114,46,99,114,101,97,116, + 101,95,109,111,100,117,108,101,125,5,0,0,114,74,1,0, + 0,114,28,0,0,0,99,2,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,3,0,0,0,243,4,0,0,0, + 151,0,121,0,114,77,0,0,0,114,30,0,0,0,114,175, + 1,0,0,115,2,0,0,0,32,32,114,10,0,0,0,114, + 80,1,0,0,122,27,78,97,109,101,115,112,97,99,101,76, + 111,97,100,101,114,46,101,120,101,99,95,109,111,100,117,108, + 101,128,5,0,0,115,5,0,0,0,128,0,216,8,12,114, + 28,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,110,0,0,0,151,0, + 116,0,0,0,0,0,0,0,0,0,106,3,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,100,1, + 124,0,106,4,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,171,2,0,0,0,0,0,0,1,0, + 116,0,0,0,0,0,0,0,0,0,106,7,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,124,0, + 124,1,171,2,0,0,0,0,0,0,83,0,41,2,122,98, + 76,111,97,100,32,97,32,110,97,109,101,115,112,97,99,101, + 32,109,111,100,117,108,101,46,10,10,32,32,32,32,32,32, + 32,32,84,104,105,115,32,109,101,116,104,111,100,32,105,115, + 32,100,101,112,114,101,99,97,116,101,100,46,32,32,85,115, + 101,32,101,120,101,99,95,109,111,100,117,108,101,40,41,32, + 105,110,115,116,101,97,100,46,10,10,32,32,32,32,32,32, + 32,32,122,38,110,97,109,101,115,112,97,99,101,32,109,111, + 100,117,108,101,32,108,111,97,100,101,100,32,119,105,116,104, + 32,112,97,116,104,32,123,33,114,125,41,4,114,207,0,0, + 0,114,215,0,0,0,114,188,1,0,0,114,82,1,0,0, + 114,83,1,0,0,115,2,0,0,0,32,32,114,10,0,0, + 0,114,84,1,0,0,122,27,78,97,109,101,115,112,97,99, + 101,76,111,97,100,101,114,46,108,111,97,100,95,109,111,100, + 117,108,101,131,5,0,0,115,49,0,0,0,128,0,244,14, + 0,9,19,215,8,35,209,8,35,208,36,76,216,36,40,167, + 74,161,74,244,3,1,9,48,244,6,0,16,26,215,15,43, + 209,15,43,168,68,176,40,211,15,59,208,8,59,114,28,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,50,0,0,0,151,0,100,1, + 100,2,108,0,109,1,125,2,1,0,2,0,124,2,124,0, + 106,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,171,1,0,0,0,0,0,0,83,0,41,3, + 78,114,1,0,0,0,41,1,218,15,78,97,109,101,115,112, + 97,99,101,82,101,97,100,101,114,41,3,114,146,1,0,0, + 114,238,1,0,0,114,188,1,0,0,41,3,114,189,0,0, + 0,114,79,1,0,0,114,238,1,0,0,115,3,0,0,0, + 32,32,32,114,10,0,0,0,114,147,1,0,0,122,35,78, + 97,109,101,115,112,97,99,101,76,111,97,100,101,114,46,103, + 101,116,95,114,101,115,111,117,114,99,101,95,114,101,97,100, + 101,114,143,5,0,0,115,20,0,0,0,128,0,221,8,53, + 217,15,30,152,116,159,122,153,122,211,15,42,208,8,42,114, + 28,0,0,0,78,41,11,114,196,0,0,0,114,195,0,0, + 0,114,197,0,0,0,114,67,1,0,0,114,10,1,0,0, + 114,99,1,0,0,114,76,1,0,0,114,73,1,0,0,114, + 80,1,0,0,114,84,1,0,0,114,147,1,0,0,114,30, + 0,0,0,114,28,0,0,0,114,10,0,0,0,114,229,1, + 0,0,114,229,1,0,0,112,5,0,0,115,43,0,0,0, + 132,0,242,2,1,5,61,242,6,1,5,20,242,6,1,5, + 18,242,6,1,5,66,1,242,6,1,5,57,242,6,1,5, + 13,242,6,10,5,60,243,24,2,5,43,114,28,0,0,0, + 114,229,1,0,0,99,0,0,0,0,0,0,0,0,0,0, + 0,0,3,0,0,0,0,0,0,0,243,116,0,0,0,151, + 0,101,0,90,1,100,0,90,2,100,1,90,3,101,4,100, + 2,132,0,171,0,0,0,0,0,0,0,90,5,101,4,100, + 3,132,0,171,0,0,0,0,0,0,0,90,6,101,7,100, + 4,132,0,171,0,0,0,0,0,0,0,90,8,101,7,100, + 9,100,6,132,1,171,0,0,0,0,0,0,0,90,9,101, + 7,100,10,100,7,132,1,171,0,0,0,0,0,0,0,90, + 10,101,4,100,8,132,0,171,0,0,0,0,0,0,0,90, + 11,121,5,41,11,218,10,80,97,116,104,70,105,110,100,101, + 114,122,62,77,101,116,97,32,112,97,116,104,32,102,105,110, + 100,101,114,32,102,111,114,32,115,121,115,46,112,97,116,104, + 32,97,110,100,32,112,97,99,107,97,103,101,32,95,95,112, + 97,116,104,95,95,32,97,116,116,114,105,98,117,116,101,115, + 46,99,0,0,0,0,0,0,0,0,0,0,0,0,5,0, + 0,0,3,0,0,0,243,56,1,0,0,151,0,116,1,0, + 0,0,0,0,0,0,0,116,2,0,0,0,0,0,0,0, + 0,106,4,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,106,7,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,171,0,0,0,0,0,0, + 0,171,1,0,0,0,0,0,0,68,0,93,65,0,0,92, + 2,0,0,125,0,125,1,124,1,129,11,116,9,0,0,0, + 0,0,0,0,0,124,0,171,1,0,0,0,0,0,0,115, + 18,116,2,0,0,0,0,0,0,0,0,106,4,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,124, + 0,61,0,140,37,116,11,0,0,0,0,0,0,0,0,124, + 1,100,2,171,2,0,0,0,0,0,0,115,1,140,50,124, + 1,106,13,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,171,0,0,0,0,0,0,0,1,0,140, + 67,4,0,116,14,0,0,0,0,0,0,0,0,120,1,106, + 16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,100,3,122,13,0,0,99,2,95,8,0,0,0, + 0,0,0,0,0,100,4,100,5,108,9,109,10,125,2,1, + 0,124,2,106,13,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,171,0,0,0,0,0,0,0,1, + 0,121,1,41,6,122,125,67,97,108,108,32,116,104,101,32, + 105,110,118,97,108,105,100,97,116,101,95,99,97,99,104,101, + 115,40,41,32,109,101,116,104,111,100,32,111,110,32,97,108, + 108,32,112,97,116,104,32,101,110,116,114,121,32,102,105,110, + 100,101,114,115,10,32,32,32,32,32,32,32,32,115,116,111, + 114,101,100,32,105,110,32,115,121,115,46,112,97,116,104,95, + 105,109,112,111,114,116,101,114,95,99,97,99,104,101,115,32, + 40,119,104,101,114,101,32,105,109,112,108,101,109,101,110,116, + 101,100,41,46,78,218,17,105,110,118,97,108,105,100,97,116, + 101,95,99,97,99,104,101,115,114,6,0,0,0,114,1,0, + 0,0,169,1,218,18,77,101,116,97,100,97,116,97,80,97, + 116,104,70,105,110,100,101,114,41,11,218,4,108,105,115,116, + 114,20,0,0,0,218,19,112,97,116,104,95,105,109,112,111, + 114,116,101,114,95,99,97,99,104,101,218,5,105,116,101,109, + 115,114,100,0,0,0,114,199,0,0,0,114,242,1,0,0, + 114,185,1,0,0,114,191,1,0,0,218,18,105,109,112,111, + 114,116,108,105,98,46,109,101,116,97,100,97,116,97,114,244, + 1,0,0,41,3,114,187,0,0,0,218,6,102,105,110,100, + 101,114,114,244,1,0,0,115,3,0,0,0,32,32,32,114, + 10,0,0,0,114,242,1,0,0,122,28,80,97,116,104,70, + 105,110,100,101,114,46,105,110,118,97,108,105,100,97,116,101, + 95,99,97,99,104,101,115,158,5,0,0,115,128,0,0,0, + 128,0,244,8,0,29,33,164,19,215,33,56,209,33,56,215, + 33,62,209,33,62,211,33,64,211,28,65,242,0,6,9,43, + 137,76,136,68,144,38,240,6,0,16,22,136,126,164,91,176, + 20,212,37,54,220,20,23,215,20,43,209,20,43,168,68,209, + 20,49,220,17,24,152,22,208,33,52,213,17,53,216,16,22, + 215,16,40,209,16,40,213,16,42,240,13,6,9,43,244,18, + 0,9,23,215,8,29,210,8,29,160,17,209,8,34,213,8, + 29,229,8,57,216,8,26,215,8,44,209,8,44,213,8,46, + 114,28,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,212,0,0,0,151, + 0,116,0,0,0,0,0,0,0,0,0,106,2,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,129, + 42,116,0,0,0,0,0,0,0,0,0,106,2,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,115, + 26,116,5,0,0,0,0,0,0,0,0,106,6,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,100, + 2,116,8,0,0,0,0,0,0,0,0,171,2,0,0,0, + 0,0,0,1,0,116,0,0,0,0,0,0,0,0,0,106, + 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,68,0,93,12,0,0,125,1,9,0,2,0,124, + 1,124,0,171,1,0,0,0,0,0,0,99,2,1,0,83, + 0,4,0,121,1,35,0,116,10,0,0,0,0,0,0,0, + 0,36,0,114,3,1,0,89,0,140,27,119,0,120,3,89, + 0,119,1,41,3,122,46,83,101,97,114,99,104,32,115,121, + 115,46,112,97,116,104,95,104,111,111,107,115,32,102,111,114, + 32,97,32,102,105,110,100,101,114,32,102,111,114,32,39,112, + 97,116,104,39,46,78,122,23,115,121,115,46,112,97,116,104, + 95,104,111,111,107,115,32,105,115,32,101,109,112,116,121,41, + 6,114,20,0,0,0,218,10,112,97,116,104,95,104,111,111, + 107,115,114,126,0,0,0,114,127,0,0,0,218,13,73,109, + 112,111,114,116,87,97,114,110,105,110,103,114,188,0,0,0, + 41,2,114,68,0,0,0,218,4,104,111,111,107,115,2,0, + 0,0,32,32,114,10,0,0,0,218,11,95,112,97,116,104, + 95,104,111,111,107,115,122,22,80,97,116,104,70,105,110,100, + 101,114,46,95,112,97,116,104,95,104,111,111,107,115,176,5, + 0,0,115,94,0,0,0,128,0,244,6,0,12,15,143,62, + 137,62,208,11,37,172,99,175,110,170,110,220,12,21,143,78, + 137,78,208,27,52,180,109,212,12,68,220,20,23,151,78,145, + 78,242,0,6,9,24,136,68,240,2,3,13,25,217,23,27, + 152,68,147,122,210,16,33,240,5,6,9,24,240,12,0,20, + 24,248,244,7,0,20,31,242,0,1,13,25,217,16,24,240, + 3,1,13,25,250,115,18,0,0,0,193,15,7,65,27,2, + 193,27,9,65,39,5,193,38,1,65,39,5,99,2,0,0, 0,0,0,0,0,0,0,0,0,4,0,0,0,3,0,0, - 0,243,110,0,0,0,151,0,116,0,0,0,0,0,0,0, - 0,0,106,3,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,100,1,124,0,106,4,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,171,2, - 0,0,0,0,0,0,1,0,116,0,0,0,0,0,0,0, - 0,0,106,7,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,124,0,124,1,171,2,0,0,0,0, - 0,0,83,0,41,2,122,98,76,111,97,100,32,97,32,110, - 97,109,101,115,112,97,99,101,32,109,111,100,117,108,101,46, - 10,10,32,32,32,32,32,32,32,32,84,104,105,115,32,109, - 101,116,104,111,100,32,105,115,32,100,101,112,114,101,99,97, - 116,101,100,46,32,32,85,115,101,32,101,120,101,99,95,109, - 111,100,117,108,101,40,41,32,105,110,115,116,101,97,100,46, - 10,10,32,32,32,32,32,32,32,32,122,38,110,97,109,101, - 115,112,97,99,101,32,109,111,100,117,108,101,32,108,111,97, - 100,101,100,32,119,105,116,104,32,112,97,116,104,32,123,33, - 114,125,41,4,114,207,0,0,0,114,215,0,0,0,114,188, - 1,0,0,114,82,1,0,0,114,83,1,0,0,115,2,0, - 0,0,32,32,114,10,0,0,0,114,84,1,0,0,122,27, - 78,97,109,101,115,112,97,99,101,76,111,97,100,101,114,46, - 108,111,97,100,95,109,111,100,117,108,101,131,5,0,0,115, - 49,0,0,0,128,0,244,14,0,9,19,215,8,35,209,8, - 35,208,36,76,216,36,40,167,74,161,74,244,3,1,9,48, - 244,6,0,16,26,215,15,43,209,15,43,168,68,176,40,211, - 15,59,208,8,59,114,28,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, - 50,0,0,0,151,0,100,1,100,2,108,0,109,1,125,2, - 1,0,2,0,124,2,124,0,106,4,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,171,1,0,0, - 0,0,0,0,83,0,41,3,78,114,1,0,0,0,41,1, - 218,15,78,97,109,101,115,112,97,99,101,82,101,97,100,101, - 114,41,3,114,146,1,0,0,114,238,1,0,0,114,188,1, - 0,0,41,3,114,189,0,0,0,114,79,1,0,0,114,238, - 1,0,0,115,3,0,0,0,32,32,32,114,10,0,0,0, - 114,147,1,0,0,122,35,78,97,109,101,115,112,97,99,101, - 76,111,97,100,101,114,46,103,101,116,95,114,101,115,111,117, - 114,99,101,95,114,101,97,100,101,114,143,5,0,0,115,20, - 0,0,0,128,0,221,8,53,217,15,30,152,116,159,122,153, - 122,211,15,42,208,8,42,114,28,0,0,0,78,41,11,114, - 196,0,0,0,114,195,0,0,0,114,197,0,0,0,114,67, - 1,0,0,114,10,1,0,0,114,99,1,0,0,114,76,1, - 0,0,114,73,1,0,0,114,80,1,0,0,114,84,1,0, - 0,114,147,1,0,0,114,30,0,0,0,114,28,0,0,0, - 114,10,0,0,0,114,229,1,0,0,114,229,1,0,0,112, - 5,0,0,115,43,0,0,0,132,0,242,2,1,5,61,242, - 6,1,5,20,242,6,1,5,18,242,6,1,5,66,1,242, - 6,1,5,57,242,6,1,5,13,242,6,10,5,60,243,24, - 2,5,43,114,28,0,0,0,114,229,1,0,0,99,0,0, - 0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0, - 0,0,243,116,0,0,0,151,0,101,0,90,1,100,0,90, - 2,100,1,90,3,101,4,100,2,132,0,171,0,0,0,0, - 0,0,0,90,5,101,4,100,3,132,0,171,0,0,0,0, - 0,0,0,90,6,101,7,100,4,132,0,171,0,0,0,0, - 0,0,0,90,8,101,7,100,9,100,6,132,1,171,0,0, - 0,0,0,0,0,90,9,101,7,100,10,100,7,132,1,171, - 0,0,0,0,0,0,0,90,10,101,4,100,8,132,0,171, - 0,0,0,0,0,0,0,90,11,121,5,41,11,218,10,80, - 97,116,104,70,105,110,100,101,114,122,62,77,101,116,97,32, - 112,97,116,104,32,102,105,110,100,101,114,32,102,111,114,32, - 115,121,115,46,112,97,116,104,32,97,110,100,32,112,97,99, - 107,97,103,101,32,95,95,112,97,116,104,95,95,32,97,116, - 116,114,105,98,117,116,101,115,46,99,0,0,0,0,0,0, - 0,0,0,0,0,0,5,0,0,0,3,0,0,0,243,12, - 1,0,0,151,0,116,1,0,0,0,0,0,0,0,0,116, - 2,0,0,0,0,0,0,0,0,106,4,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,106,7,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,171,0,0,0,0,0,0,0,171,1,0,0,0,0,0, - 0,68,0,93,65,0,0,92,2,0,0,125,0,125,1,124, - 1,129,11,116,9,0,0,0,0,0,0,0,0,124,0,171, - 1,0,0,0,0,0,0,115,18,116,2,0,0,0,0,0, - 0,0,0,106,4,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,124,0,61,0,140,37,116,11,0, - 0,0,0,0,0,0,0,124,1,100,2,171,2,0,0,0, - 0,0,0,115,1,140,50,124,1,106,13,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,171,0,0, - 0,0,0,0,0,1,0,140,67,4,0,116,14,0,0,0, - 0,0,0,0,0,120,1,106,16,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,100,3,122,13,0, - 0,99,2,95,8,0,0,0,0,0,0,0,0,121,1,41, - 4,122,125,67,97,108,108,32,116,104,101,32,105,110,118,97, - 108,105,100,97,116,101,95,99,97,99,104,101,115,40,41,32, - 109,101,116,104,111,100,32,111,110,32,97,108,108,32,112,97, - 116,104,32,101,110,116,114,121,32,102,105,110,100,101,114,115, - 10,32,32,32,32,32,32,32,32,115,116,111,114,101,100,32, - 105,110,32,115,121,115,46,112,97,116,104,95,105,109,112,111, - 114,116,101,114,95,99,97,99,104,101,115,32,40,119,104,101, - 114,101,32,105,109,112,108,101,109,101,110,116,101,100,41,46, - 78,218,17,105,110,118,97,108,105,100,97,116,101,95,99,97, - 99,104,101,115,114,6,0,0,0,41,9,218,4,108,105,115, - 116,114,20,0,0,0,218,19,112,97,116,104,95,105,109,112, - 111,114,116,101,114,95,99,97,99,104,101,218,5,105,116,101, - 109,115,114,100,0,0,0,114,199,0,0,0,114,242,1,0, - 0,114,185,1,0,0,114,191,1,0,0,41,2,114,187,0, - 0,0,218,6,102,105,110,100,101,114,115,2,0,0,0,32, - 32,114,10,0,0,0,114,242,1,0,0,122,28,80,97,116, - 104,70,105,110,100,101,114,46,105,110,118,97,108,105,100,97, - 116,101,95,99,97,99,104,101,115,158,5,0,0,115,113,0, - 0,0,128,0,244,8,0,29,33,164,19,215,33,56,209,33, - 56,215,33,62,209,33,62,211,33,64,211,28,65,242,0,6, - 9,43,137,76,136,68,144,38,240,6,0,16,22,136,126,164, - 91,176,20,212,37,54,220,20,23,215,20,43,209,20,43,168, - 68,209,20,49,220,17,24,152,22,208,33,52,213,17,53,216, - 16,22,215,16,40,209,16,40,213,16,42,240,13,6,9,43, - 244,18,0,9,23,215,8,29,210,8,29,160,17,209,8,34, - 214,8,29,114,28,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,212,0, - 0,0,151,0,116,0,0,0,0,0,0,0,0,0,106,2, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,129,42,116,0,0,0,0,0,0,0,0,0,106,2, + 0,243,232,0,0,0,151,0,124,1,100,1,107,40,0,0, + 114,21,9,0,116,1,0,0,0,0,0,0,0,0,106,2, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,115,26,116,5,0,0,0,0,0,0,0,0,106,6, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,100,2,116,8,0,0,0,0,0,0,0,0,171,2, - 0,0,0,0,0,0,1,0,116,0,0,0,0,0,0,0, - 0,0,106,2,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,68,0,93,12,0,0,125,1,9,0, - 2,0,124,1,124,0,171,1,0,0,0,0,0,0,99,2, - 1,0,83,0,4,0,121,1,35,0,116,10,0,0,0,0, - 0,0,0,0,36,0,114,3,1,0,89,0,140,27,119,0, - 120,3,89,0,119,1,41,3,122,46,83,101,97,114,99,104, - 32,115,121,115,46,112,97,116,104,95,104,111,111,107,115,32, - 102,111,114,32,97,32,102,105,110,100,101,114,32,102,111,114, - 32,39,112,97,116,104,39,46,78,122,23,115,121,115,46,112, - 97,116,104,95,104,111,111,107,115,32,105,115,32,101,109,112, - 116,121,41,6,114,20,0,0,0,218,10,112,97,116,104,95, - 104,111,111,107,115,114,126,0,0,0,114,127,0,0,0,218, - 13,73,109,112,111,114,116,87,97,114,110,105,110,103,114,188, - 0,0,0,41,2,114,68,0,0,0,218,4,104,111,111,107, - 115,2,0,0,0,32,32,114,10,0,0,0,218,11,95,112, - 97,116,104,95,104,111,111,107,115,122,22,80,97,116,104,70, - 105,110,100,101,114,46,95,112,97,116,104,95,104,111,111,107, - 115,173,5,0,0,115,94,0,0,0,128,0,244,6,0,12, - 15,143,62,137,62,208,11,37,172,99,175,110,170,110,220,12, - 21,143,78,137,78,208,27,52,180,109,212,12,68,220,20,23, - 151,78,145,78,242,0,6,9,24,136,68,240,2,3,13,25, - 217,23,27,152,68,147,122,210,16,33,240,5,6,9,24,240, - 12,0,20,24,248,244,7,0,20,31,242,0,1,13,25,217, - 16,24,240,3,1,13,25,250,115,18,0,0,0,193,15,7, - 65,27,2,193,27,9,65,39,5,193,38,1,65,39,5,99, - 2,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0, - 3,0,0,0,243,232,0,0,0,151,0,124,1,100,1,107, - 40,0,0,114,21,9,0,116,1,0,0,0,0,0,0,0, - 0,106,2,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,171,0,0,0,0,0,0,0,125,1,9, - 0,116,6,0,0,0,0,0,0,0,0,106,8,0,0,0, + 0,0,171,0,0,0,0,0,0,0,125,1,9,0,116,6, + 0,0,0,0,0,0,0,0,106,8,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,124,1,25,0, + 0,0,125,2,124,2,83,0,35,0,116,4,0,0,0,0, + 0,0,0,0,36,0,114,3,1,0,89,0,121,2,119,0, + 120,3,89,0,119,1,35,0,116,10,0,0,0,0,0,0, + 0,0,36,0,114,40,1,0,124,0,106,13,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,124,1, + 171,1,0,0,0,0,0,0,125,2,124,2,116,6,0,0, + 0,0,0,0,0,0,106,8,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,124,1,60,0,0,0, + 89,0,124,2,83,0,119,0,120,3,89,0,119,1,41,3, + 122,210,71,101,116,32,116,104,101,32,102,105,110,100,101,114, + 32,102,111,114,32,116,104,101,32,112,97,116,104,32,101,110, + 116,114,121,32,102,114,111,109,32,115,121,115,46,112,97,116, + 104,95,105,109,112,111,114,116,101,114,95,99,97,99,104,101, + 46,10,10,32,32,32,32,32,32,32,32,73,102,32,116,104, + 101,32,112,97,116,104,32,101,110,116,114,121,32,105,115,32, + 110,111,116,32,105,110,32,116,104,101,32,99,97,99,104,101, + 44,32,102,105,110,100,32,116,104,101,32,97,112,112,114,111, + 112,114,105,97,116,101,32,102,105,110,100,101,114,10,32,32, + 32,32,32,32,32,32,97,110,100,32,99,97,99,104,101,32, + 105,116,46,32,73,102,32,110,111,32,102,105,110,100,101,114, + 32,105,115,32,97,118,97,105,108,97,98,108,101,44,32,115, + 116,111,114,101,32,78,111,110,101,46,10,10,32,32,32,32, + 32,32,32,32,114,12,0,0,0,78,41,7,114,23,0,0, + 0,114,95,0,0,0,218,17,70,105,108,101,78,111,116,70, + 111,117,110,100,69,114,114,111,114,114,20,0,0,0,114,246, + 1,0,0,218,8,75,101,121,69,114,114,111,114,114,254,1, + 0,0,41,3,114,50,1,0,0,114,68,0,0,0,114,249, + 1,0,0,115,3,0,0,0,32,32,32,114,10,0,0,0, + 218,20,95,112,97,116,104,95,105,109,112,111,114,116,101,114, + 95,99,97,99,104,101,122,31,80,97,116,104,70,105,110,100, + 101,114,46,95,112,97,116,104,95,105,109,112,111,114,116,101, + 114,95,99,97,99,104,101,189,5,0,0,115,128,0,0,0, + 128,0,240,16,0,12,16,144,50,138,58,240,2,5,13,28, + 220,23,26,151,122,145,122,147,124,144,4,240,10,4,9,51, + 220,21,24,215,21,44,209,21,44,168,84,209,21,50,136,70, + 240,8,0,16,22,136,13,248,244,19,0,20,37,242,0,3, + 13,28,241,6,0,24,28,240,7,3,13,28,251,244,12,0, + 16,24,242,0,2,9,51,216,21,24,151,95,145,95,160,84, + 211,21,42,136,70,216,44,50,140,67,215,12,35,209,12,35, + 160,68,210,12,41,216,15,21,136,13,240,7,2,9,51,250, + 115,29,0,0,0,135,20,49,0,156,19,65,0,0,177,9, + 61,3,188,1,61,3,193,0,45,65,49,3,193,48,1,65, + 49,3,78,99,4,0,0,0,0,0,0,0,0,0,0,0, + 5,0,0,0,3,0,0,0,243,58,1,0,0,151,0,103, + 0,125,4,124,2,68,0,93,118,0,0,125,5,116,1,0, + 0,0,0,0,0,0,0,124,5,116,2,0,0,0,0,0, + 0,0,0,171,2,0,0,0,0,0,0,115,1,140,20,124, + 0,106,5,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,124,5,171,1,0,0,0,0,0,0,125, + 6,124,6,128,1,140,40,124,6,106,7,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,124,1,124, + 3,171,2,0,0,0,0,0,0,125,7,124,7,128,1,140, + 61,124,7,106,8,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,129,4,124,7,99,2,1,0,83, + 0,124,7,106,10,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,125,8,124,8,128,11,116,13,0, + 0,0,0,0,0,0,0,100,2,171,1,0,0,0,0,0, + 0,130,1,124,4,106,15,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,124,8,171,1,0,0,0, + 0,0,0,1,0,140,120,4,0,116,16,0,0,0,0,0, + 0,0,0,106,19,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,124,1,100,1,171,2,0,0,0, + 0,0,0,125,7,124,4,124,7,95,5,0,0,0,0,0, + 0,0,0,124,7,83,0,41,3,122,63,70,105,110,100,32, + 116,104,101,32,108,111,97,100,101,114,32,111,114,32,110,97, + 109,101,115,112,97,99,101,95,112,97,116,104,32,102,111,114, + 32,116,104,105,115,32,109,111,100,117,108,101,47,112,97,99, + 107,97,103,101,32,110,97,109,101,46,78,122,19,115,112,101, + 99,32,109,105,115,115,105,110,103,32,108,111,97,100,101,114, + 41,10,114,232,0,0,0,114,136,0,0,0,114,2,2,0, + 0,114,58,1,0,0,114,4,1,0,0,114,5,1,0,0, + 114,188,0,0,0,114,240,0,0,0,114,207,0,0,0,114, + 11,1,0,0,41,9,114,50,1,0,0,114,42,1,0,0, + 114,68,0,0,0,114,57,1,0,0,218,14,110,97,109,101, + 115,112,97,99,101,95,112,97,116,104,218,5,101,110,116,114, + 121,114,249,1,0,0,114,16,1,0,0,218,8,112,111,114, + 116,105,111,110,115,115,9,0,0,0,32,32,32,32,32,32, + 32,32,32,114,10,0,0,0,218,9,95,103,101,116,95,115, + 112,101,99,122,20,80,97,116,104,70,105,110,100,101,114,46, + 95,103,101,116,95,115,112,101,99,211,5,0,0,115,178,0, + 0,0,128,0,240,10,0,26,28,136,14,216,21,25,242,0, + 21,9,24,136,69,220,19,29,152,101,164,83,212,19,41,216, + 16,24,216,21,24,215,21,45,209,21,45,168,101,211,21,52, + 136,70,216,15,21,209,15,33,216,23,29,215,23,39,209,23, + 39,168,8,176,38,211,23,57,144,4,216,19,23,144,60,216, + 20,28,216,19,23,151,59,145,59,208,19,42,216,27,31,146, + 75,216,27,31,215,27,58,209,27,58,144,8,216,19,27,208, + 19,35,220,26,37,208,38,59,211,26,60,208,20,60,240,10, + 0,17,31,215,16,37,209,16,37,160,104,213,16,47,240,35, + 21,9,24,244,38,0,20,30,215,19,40,209,19,40,168,24, + 176,52,211,19,56,136,68,216,46,60,136,68,212,12,43,216, + 19,23,136,75,114,28,0,0,0,99,4,0,0,0,0,0, + 0,0,0,0,0,0,5,0,0,0,3,0,0,0,243,214, + 0,0,0,151,0,124,2,128,16,116,0,0,0,0,0,0, + 0,0,0,106,2,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,125,2,124,0,106,5,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,124, - 1,25,0,0,0,125,2,124,2,83,0,35,0,116,4,0, - 0,0,0,0,0,0,0,36,0,114,3,1,0,89,0,121, - 2,119,0,120,3,89,0,119,1,35,0,116,10,0,0,0, - 0,0,0,0,0,36,0,114,40,1,0,124,0,106,13,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,124,1,171,1,0,0,0,0,0,0,125,2,124,2,116, - 6,0,0,0,0,0,0,0,0,106,8,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,124,1,60, - 0,0,0,89,0,124,2,83,0,119,0,120,3,89,0,119, - 1,41,3,122,210,71,101,116,32,116,104,101,32,102,105,110, - 100,101,114,32,102,111,114,32,116,104,101,32,112,97,116,104, - 32,101,110,116,114,121,32,102,114,111,109,32,115,121,115,46, - 112,97,116,104,95,105,109,112,111,114,116,101,114,95,99,97, - 99,104,101,46,10,10,32,32,32,32,32,32,32,32,73,102, - 32,116,104,101,32,112,97,116,104,32,101,110,116,114,121,32, - 105,115,32,110,111,116,32,105,110,32,116,104,101,32,99,97, - 99,104,101,44,32,102,105,110,100,32,116,104,101,32,97,112, - 112,114,111,112,114,105,97,116,101,32,102,105,110,100,101,114, - 10,32,32,32,32,32,32,32,32,97,110,100,32,99,97,99, - 104,101,32,105,116,46,32,73,102,32,110,111,32,102,105,110, - 100,101,114,32,105,115,32,97,118,97,105,108,97,98,108,101, - 44,32,115,116,111,114,101,32,78,111,110,101,46,10,10,32, - 32,32,32,32,32,32,32,114,12,0,0,0,78,41,7,114, - 23,0,0,0,114,95,0,0,0,218,17,70,105,108,101,78, - 111,116,70,111,117,110,100,69,114,114,111,114,114,20,0,0, - 0,114,244,1,0,0,218,8,75,101,121,69,114,114,111,114, - 114,251,1,0,0,41,3,114,50,1,0,0,114,68,0,0, - 0,114,246,1,0,0,115,3,0,0,0,32,32,32,114,10, - 0,0,0,218,20,95,112,97,116,104,95,105,109,112,111,114, - 116,101,114,95,99,97,99,104,101,122,31,80,97,116,104,70, - 105,110,100,101,114,46,95,112,97,116,104,95,105,109,112,111, - 114,116,101,114,95,99,97,99,104,101,186,5,0,0,115,128, - 0,0,0,128,0,240,16,0,12,16,144,50,138,58,240,2, - 5,13,28,220,23,26,151,122,145,122,147,124,144,4,240,10, - 4,9,51,220,21,24,215,21,44,209,21,44,168,84,209,21, - 50,136,70,240,8,0,16,22,136,13,248,244,19,0,20,37, - 242,0,3,13,28,241,6,0,24,28,240,7,3,13,28,251, - 244,12,0,16,24,242,0,2,9,51,216,21,24,151,95,145, - 95,160,84,211,21,42,136,70,216,44,50,140,67,215,12,35, - 209,12,35,160,68,210,12,41,216,15,21,136,13,240,7,2, - 9,51,250,115,29,0,0,0,135,20,49,0,156,19,65,0, - 0,177,9,61,3,188,1,61,3,193,0,45,65,49,3,193, - 48,1,65,49,3,78,99,4,0,0,0,0,0,0,0,0, - 0,0,0,5,0,0,0,3,0,0,0,243,58,1,0,0, - 151,0,103,0,125,4,124,2,68,0,93,118,0,0,125,5, - 116,1,0,0,0,0,0,0,0,0,124,5,116,2,0,0, - 0,0,0,0,0,0,171,2,0,0,0,0,0,0,115,1, - 140,20,124,0,106,5,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,124,5,171,1,0,0,0,0, - 0,0,125,6,124,6,128,1,140,40,124,6,106,7,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 124,1,124,3,171,2,0,0,0,0,0,0,125,7,124,7, - 128,1,140,61,124,7,106,8,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,129,4,124,7,99,2, - 1,0,83,0,124,7,106,10,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,125,8,124,8,128,11, - 116,13,0,0,0,0,0,0,0,0,100,2,171,1,0,0, - 0,0,0,0,130,1,124,4,106,15,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,124,8,171,1, - 0,0,0,0,0,0,1,0,140,120,4,0,116,16,0,0, - 0,0,0,0,0,0,106,19,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,124,1,100,1,171,2, - 0,0,0,0,0,0,125,7,124,4,124,7,95,5,0,0, - 0,0,0,0,0,0,124,7,83,0,41,3,122,63,70,105, - 110,100,32,116,104,101,32,108,111,97,100,101,114,32,111,114, - 32,110,97,109,101,115,112,97,99,101,95,112,97,116,104,32, - 102,111,114,32,116,104,105,115,32,109,111,100,117,108,101,47, - 112,97,99,107,97,103,101,32,110,97,109,101,46,78,122,19, - 115,112,101,99,32,109,105,115,115,105,110,103,32,108,111,97, - 100,101,114,41,10,114,232,0,0,0,114,136,0,0,0,114, - 255,1,0,0,114,58,1,0,0,114,4,1,0,0,114,5, - 1,0,0,114,188,0,0,0,114,240,0,0,0,114,207,0, - 0,0,114,11,1,0,0,41,9,114,50,1,0,0,114,42, - 1,0,0,114,68,0,0,0,114,57,1,0,0,218,14,110, - 97,109,101,115,112,97,99,101,95,112,97,116,104,218,5,101, - 110,116,114,121,114,246,1,0,0,114,16,1,0,0,218,8, - 112,111,114,116,105,111,110,115,115,9,0,0,0,32,32,32, - 32,32,32,32,32,32,114,10,0,0,0,218,9,95,103,101, - 116,95,115,112,101,99,122,20,80,97,116,104,70,105,110,100, - 101,114,46,95,103,101,116,95,115,112,101,99,208,5,0,0, - 115,178,0,0,0,128,0,240,10,0,26,28,136,14,216,21, - 25,242,0,21,9,24,136,69,220,19,29,152,101,164,83,212, - 19,41,216,16,24,216,21,24,215,21,45,209,21,45,168,101, - 211,21,52,136,70,216,15,21,209,15,33,216,23,29,215,23, - 39,209,23,39,168,8,176,38,211,23,57,144,4,216,19,23, - 144,60,216,20,28,216,19,23,151,59,145,59,208,19,42,216, - 27,31,146,75,216,27,31,215,27,58,209,27,58,144,8,216, - 19,27,208,19,35,220,26,37,208,38,59,211,26,60,208,20, - 60,240,10,0,17,31,215,16,37,209,16,37,160,104,213,16, - 47,240,35,21,9,24,244,38,0,20,30,215,19,40,209,19, - 40,168,24,176,52,211,19,56,136,68,216,46,60,136,68,212, - 12,43,216,19,23,136,75,114,28,0,0,0,99,4,0,0, - 0,0,0,0,0,0,0,0,0,5,0,0,0,3,0,0, - 0,243,214,0,0,0,151,0,124,2,128,16,116,0,0,0, - 0,0,0,0,0,0,106,2,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,125,2,124,0,106,5, + 1,124,2,124,3,171,3,0,0,0,0,0,0,125,4,124, + 4,128,1,121,1,124,4,106,6,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,128,52,124,4,106, + 8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,125,5,124,5,114,37,100,1,124,4,95,5,0, + 0,0,0,0,0,0,0,116,13,0,0,0,0,0,0,0, + 0,124,1,124,5,124,0,106,4,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,171,3,0,0,0, + 0,0,0,124,4,95,4,0,0,0,0,0,0,0,0,124, + 4,83,0,121,1,124,4,83,0,41,2,122,141,84,114,121, + 32,116,111,32,102,105,110,100,32,97,32,115,112,101,99,32, + 102,111,114,32,39,102,117,108,108,110,97,109,101,39,32,111, + 110,32,115,121,115,46,112,97,116,104,32,111,114,32,39,112, + 97,116,104,39,46,10,10,32,32,32,32,32,32,32,32,84, + 104,101,32,115,101,97,114,99,104,32,105,115,32,98,97,115, + 101,100,32,111,110,32,115,121,115,46,112,97,116,104,95,104, + 111,111,107,115,32,97,110,100,32,115,121,115,46,112,97,116, + 104,95,105,109,112,111,114,116,101,114,95,99,97,99,104,101, + 46,10,32,32,32,32,32,32,32,32,78,41,7,114,20,0, + 0,0,114,68,0,0,0,114,7,2,0,0,114,4,1,0, + 0,114,5,1,0,0,114,9,1,0,0,114,185,1,0,0, + 41,6,114,50,1,0,0,114,42,1,0,0,114,68,0,0, + 0,114,57,1,0,0,114,16,1,0,0,114,4,2,0,0, + 115,6,0,0,0,32,32,32,32,32,32,114,10,0,0,0, + 114,58,1,0,0,122,20,80,97,116,104,70,105,110,100,101, + 114,46,102,105,110,100,95,115,112,101,99,240,5,0,0,115, + 114,0,0,0,128,0,240,12,0,12,16,136,60,220,19,22, + 151,56,145,56,136,68,216,15,18,143,125,137,125,152,88,160, + 116,168,86,211,15,52,136,4,216,11,15,136,60,216,19,23, + 216,13,17,143,91,137,91,208,13,32,216,29,33,215,29,60, + 209,29,60,136,78,217,15,29,240,6,0,31,35,144,4,148, + 11,220,50,64,192,24,200,62,208,91,94,215,91,104,209,91, + 104,211,50,105,144,4,212,16,47,216,23,27,144,11,224,23, + 27,224,19,23,136,75,114,28,0,0,0,99,0,0,0,0, + 0,0,0,0,0,0,0,0,5,0,0,0,15,0,0,0, + 243,50,0,0,0,151,0,100,1,100,2,108,0,109,1,125, + 2,1,0,2,0,124,2,106,4,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,124,0,105,0,124, + 1,164,1,142,1,83,0,41,3,97,32,1,0,0,10,32, + 32,32,32,32,32,32,32,70,105,110,100,32,100,105,115,116, + 114,105,98,117,116,105,111,110,115,46,10,10,32,32,32,32, + 32,32,32,32,82,101,116,117,114,110,32,97,110,32,105,116, + 101,114,97,98,108,101,32,111,102,32,97,108,108,32,68,105, + 115,116,114,105,98,117,116,105,111,110,32,105,110,115,116,97, + 110,99,101,115,32,99,97,112,97,98,108,101,32,111,102,10, + 32,32,32,32,32,32,32,32,108,111,97,100,105,110,103,32, + 116,104,101,32,109,101,116,97,100,97,116,97,32,102,111,114, + 32,112,97,99,107,97,103,101,115,32,109,97,116,99,104,105, + 110,103,32,96,96,99,111,110,116,101,120,116,46,110,97,109, + 101,96,96,10,32,32,32,32,32,32,32,32,40,111,114,32, + 97,108,108,32,110,97,109,101,115,32,105,102,32,96,96,78, + 111,110,101,96,96,32,105,110,100,105,99,97,116,101,100,41, + 32,97,108,111,110,103,32,116,104,101,32,112,97,116,104,115, + 32,105,110,32,116,104,101,32,108,105,115,116,10,32,32,32, + 32,32,32,32,32,111,102,32,100,105,114,101,99,116,111,114, + 105,101,115,32,96,96,99,111,110,116,101,120,116,46,112,97, + 116,104,96,96,46,10,32,32,32,32,32,32,32,32,114,1, + 0,0,0,114,243,1,0,0,41,3,114,248,1,0,0,114, + 244,1,0,0,218,18,102,105,110,100,95,100,105,115,116,114, + 105,98,117,116,105,111,110,115,41,3,114,190,0,0,0,114, + 191,0,0,0,114,244,1,0,0,115,3,0,0,0,32,32, + 32,114,10,0,0,0,114,10,2,0,0,122,29,80,97,116, + 104,70,105,110,100,101,114,46,102,105,110,100,95,100,105,115, + 116,114,105,98,117,116,105,111,110,115,8,6,0,0,115,32, + 0,0,0,128,0,245,20,0,9,58,216,15,52,208,15,33, + 215,15,52,209,15,52,176,100,208,15,69,184,102,209,15,69, + 208,8,69,114,28,0,0,0,114,77,0,0,0,114,59,1, + 0,0,41,12,114,196,0,0,0,114,195,0,0,0,114,197, + 0,0,0,114,198,0,0,0,114,62,1,0,0,114,242,1, + 0,0,114,254,1,0,0,114,63,1,0,0,114,2,2,0, + 0,114,7,2,0,0,114,58,1,0,0,114,10,2,0,0, + 114,30,0,0,0,114,28,0,0,0,114,10,0,0,0,114, + 240,1,0,0,114,240,1,0,0,154,5,0,0,115,125,0, + 0,0,132,0,225,4,72,224,5,17,241,2,15,5,47,243, + 3,0,6,18,240,2,15,5,47,240,34,0,6,18,241,2, + 10,5,24,243,3,0,6,18,240,2,10,5,24,240,24,0, + 6,17,241,2,19,5,22,243,3,0,6,17,240,2,19,5, + 22,240,42,0,6,17,242,2,26,5,24,243,3,0,6,17, + 240,2,26,5,24,240,56,0,6,17,242,2,21,5,24,243, + 3,0,6,17,240,2,21,5,24,240,46,0,6,18,241,2, + 10,5,70,1,243,3,0,6,18,241,2,10,5,70,1,114, + 28,0,0,0,114,240,1,0,0,99,0,0,0,0,0,0, + 0,0,0,0,0,0,2,0,0,0,0,0,0,0,243,70, + 0,0,0,151,0,101,0,90,1,100,0,90,2,100,1,90, + 3,100,2,132,0,90,4,100,3,132,0,90,5,100,4,132, + 0,90,6,100,10,100,6,132,1,90,7,100,7,132,0,90, + 8,101,9,100,8,132,0,171,0,0,0,0,0,0,0,90, + 10,100,9,132,0,90,11,121,5,41,11,218,10,70,105,108, + 101,70,105,110,100,101,114,122,172,70,105,108,101,45,98,97, + 115,101,100,32,102,105,110,100,101,114,46,10,10,32,32,32, + 32,73,110,116,101,114,97,99,116,105,111,110,115,32,119,105, + 116,104,32,116,104,101,32,102,105,108,101,32,115,121,115,116, + 101,109,32,97,114,101,32,99,97,99,104,101,100,32,102,111, + 114,32,112,101,114,102,111,114,109,97,110,99,101,44,32,98, + 101,105,110,103,10,32,32,32,32,114,101,102,114,101,115,104, + 101,100,32,119,104,101,110,32,116,104,101,32,100,105,114,101, + 99,116,111,114,121,32,116,104,101,32,102,105,110,100,101,114, + 32,105,115,32,104,97,110,100,108,105,110,103,32,104,97,115, + 32,98,101,101,110,32,109,111,100,105,102,105,101,100,46,10, + 10,32,32,32,32,99,2,0,0,0,0,0,0,0,0,0, + 0,0,5,0,0,0,7,0,0,0,243,12,1,0,0,135, + 5,151,0,103,0,125,3,124,2,68,0,93,31,0,0,92, + 2,0,0,138,5,125,4,124,3,106,1,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,136,5,102, + 1,100,1,132,8,124,4,68,0,171,0,0,0,0,0,0, + 0,171,1,0,0,0,0,0,0,1,0,140,33,4,0,124, + 3,124,0,95,1,0,0,0,0,0,0,0,0,124,1,114, + 5,124,1,100,2,107,40,0,0,114,26,116,5,0,0,0, + 0,0,0,0,0,106,6,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,171,0,0,0,0,0,0, + 0,124,0,95,4,0,0,0,0,0,0,0,0,110,16,116, + 11,0,0,0,0,0,0,0,0,124,1,171,1,0,0,0, + 0,0,0,124,0,95,4,0,0,0,0,0,0,0,0,100, + 3,124,0,95,6,0,0,0,0,0,0,0,0,116,15,0, + 0,0,0,0,0,0,0,171,0,0,0,0,0,0,0,124, + 0,95,8,0,0,0,0,0,0,0,0,116,15,0,0,0, + 0,0,0,0,0,171,0,0,0,0,0,0,0,124,0,95, + 9,0,0,0,0,0,0,0,0,121,4,41,5,122,154,73, + 110,105,116,105,97,108,105,122,101,32,119,105,116,104,32,116, + 104,101,32,112,97,116,104,32,116,111,32,115,101,97,114,99, + 104,32,111,110,32,97,110,100,32,97,32,118,97,114,105,97, + 98,108,101,32,110,117,109,98,101,114,32,111,102,10,32,32, + 32,32,32,32,32,32,50,45,116,117,112,108,101,115,32,99, + 111,110,116,97,105,110,105,110,103,32,116,104,101,32,108,111, + 97,100,101,114,32,97,110,100,32,116,104,101,32,102,105,108, + 101,32,115,117,102,102,105,120,101,115,32,116,104,101,32,108, + 111,97,100,101,114,10,32,32,32,32,32,32,32,32,114,101, + 99,111,103,110,105,122,101,115,46,99,1,0,0,0,0,0, + 0,0,0,0,0,0,3,0,0,0,51,0,0,0,243,38, + 0,0,0,149,1,75,0,1,0,151,0,124,0,93,8,0, + 0,125,1,124,1,137,2,102,2,150,1,151,1,1,0,140, + 10,4,0,121,0,173,3,119,1,114,77,0,0,0,114,30, + 0,0,0,41,3,114,8,0,0,0,114,178,1,0,0,114, + 4,1,0,0,115,3,0,0,0,32,32,128,114,10,0,0, + 0,114,11,0,0,0,122,38,70,105,108,101,70,105,110,100, + 101,114,46,95,95,105,110,105,116,95,95,46,60,108,111,99, + 97,108,115,62,46,60,103,101,110,101,120,112,114,62,37,6, + 0,0,115,22,0,0,0,248,232,0,248,128,0,210,26,67, + 176,6,152,70,160,70,212,27,43,209,26,67,249,115,4,0, + 0,0,131,14,17,1,114,103,0,0,0,114,170,0,0,0, + 78,41,10,114,240,0,0,0,218,8,95,108,111,97,100,101, + 114,115,114,23,0,0,0,114,95,0,0,0,114,68,0,0, + 0,114,105,0,0,0,218,11,95,112,97,116,104,95,109,116, + 105,109,101,218,3,115,101,116,218,11,95,112,97,116,104,95, + 99,97,99,104,101,218,19,95,114,101,108,97,120,101,100,95, + 112,97,116,104,95,99,97,99,104,101,41,6,114,189,0,0, + 0,114,68,0,0,0,218,14,108,111,97,100,101,114,95,100, + 101,116,97,105,108,115,218,7,108,111,97,100,101,114,115,114, + 18,1,0,0,114,4,1,0,0,115,6,0,0,0,32,32, + 32,32,32,64,114,10,0,0,0,114,67,1,0,0,122,19, + 70,105,108,101,70,105,110,100,101,114,46,95,95,105,110,105, + 116,95,95,31,6,0,0,115,119,0,0,0,248,128,0,240, + 8,0,19,21,136,7,216,32,46,242,0,1,9,68,1,209, + 12,28,136,70,144,72,216,12,19,143,78,137,78,211,26,67, + 184,40,212,26,67,213,12,67,240,3,1,9,68,1,224,24, + 31,136,4,140,13,225,15,19,144,116,152,115,146,123,220,24, + 27,159,10,153,10,155,12,136,68,141,73,228,24,37,160,100, + 211,24,43,136,68,140,73,216,27,29,136,4,212,8,24,220, + 27,30,155,53,136,4,212,8,24,220,35,38,163,53,136,4, + 213,8,32,114,28,0,0,0,99,1,0,0,0,0,0,0, + 0,0,0,0,0,2,0,0,0,3,0,0,0,243,18,0, + 0,0,151,0,100,1,124,0,95,0,0,0,0,0,0,0, + 0,0,121,2,41,3,122,31,73,110,118,97,108,105,100,97, + 116,101,32,116,104,101,32,100,105,114,101,99,116,111,114,121, + 32,109,116,105,109,101,46,114,170,0,0,0,78,41,1,114, + 16,2,0,0,114,131,1,0,0,115,1,0,0,0,32,114, + 10,0,0,0,114,242,1,0,0,122,28,70,105,108,101,70, + 105,110,100,101,114,46,105,110,118,97,108,105,100,97,116,101, + 95,99,97,99,104,101,115,48,6,0,0,115,10,0,0,0, + 128,0,224,27,29,136,4,213,8,24,114,28,0,0,0,99, + 6,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0, + 3,0,0,0,243,50,0,0,0,151,0,2,0,124,1,124, + 2,124,3,171,2,0,0,0,0,0,0,125,6,116,1,0, + 0,0,0,0,0,0,0,124,2,124,3,124,6,124,4,172, + 1,171,4,0,0,0,0,0,0,83,0,41,2,78,114,3, + 1,0,0,41,1,114,20,1,0,0,41,7,114,189,0,0, + 0,114,17,1,0,0,114,42,1,0,0,114,68,0,0,0, + 218,4,115,109,115,108,114,57,1,0,0,114,4,1,0,0, + 115,7,0,0,0,32,32,32,32,32,32,32,114,10,0,0, + 0,114,7,2,0,0,122,20,70,105,108,101,70,105,110,100, + 101,114,46,95,103,101,116,95,115,112,101,99,52,6,0,0, + 115,38,0,0,0,128,0,217,17,29,152,104,168,4,211,17, + 45,136,6,220,15,38,160,120,176,20,184,102,216,66,70,244, + 3,1,16,72,1,240,0,1,9,72,1,114,28,0,0,0, + 78,99,3,0,0,0,0,0,0,0,0,0,0,0,8,0, + 0,0,3,0,0,0,243,192,3,0,0,151,0,100,1,125, + 3,124,1,106,1,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,100,2,171,1,0,0,0,0,0, + 0,100,3,25,0,0,0,125,4,9,0,116,3,0,0,0, + 0,0,0,0,0,124,0,106,4,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,120,1,115,20,1, + 0,116,7,0,0,0,0,0,0,0,0,106,8,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,171, + 0,0,0,0,0,0,0,171,1,0,0,0,0,0,0,106, + 10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,125,5,124,5,124,0,106,14,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,107,55,0, + 0,114,23,124,0,106,17,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,171,0,0,0,0,0,0, + 0,1,0,124,5,124,0,95,7,0,0,0,0,0,0,0, + 0,116,19,0,0,0,0,0,0,0,0,171,0,0,0,0, + 0,0,0,114,29,124,0,106,20,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,125,6,124,4,106, + 23,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,171,0,0,0,0,0,0,0,125,7,110,14,124, + 0,106,24,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,125,6,124,4,125,7,124,7,124,6,118, + 0,114,105,116,27,0,0,0,0,0,0,0,0,124,0,106, + 4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,124,4,171,2,0,0,0,0,0,0,125,8,124, + 0,106,28,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,68,0,93,57,0,0,92,2,0,0,125, + 9,125,10,100,5,124,9,122,0,0,0,125,11,116,27,0, + 0,0,0,0,0,0,0,124,8,124,11,171,2,0,0,0, + 0,0,0,125,12,116,31,0,0,0,0,0,0,0,0,124, + 12,171,1,0,0,0,0,0,0,115,1,140,35,124,0,106, + 33,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,124,10,124,1,124,12,124,8,103,1,124,2,171, + 5,0,0,0,0,0,0,99,2,1,0,83,0,4,0,116, + 35,0,0,0,0,0,0,0,0,124,8,171,1,0,0,0, + 0,0,0,125,3,124,0,106,28,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,68,0,93,97,0, + 0,92,2,0,0,125,9,125,10,9,0,116,27,0,0,0, + 0,0,0,0,0,124,0,106,4,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,124,4,124,9,122, + 0,0,0,171,2,0,0,0,0,0,0,125,12,116,38,0, + 0,0,0,0,0,0,0,106,41,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,100,7,124,12,100, + 3,172,8,171,3,0,0,0,0,0,0,1,0,124,7,124, + 9,122,0,0,0,124,6,118,0,115,1,140,64,116,31,0, + 0,0,0,0,0,0,0,124,12,171,1,0,0,0,0,0, + 0,115,1,140,76,124,0,106,33,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,124,10,124,1,124, + 12,100,6,124,2,171,5,0,0,0,0,0,0,99,2,1, + 0,83,0,4,0,124,3,114,54,116,38,0,0,0,0,0, + 0,0,0,106,41,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,100,9,127,8,171,2,0,0,0, + 0,0,0,1,0,116,38,0,0,0,0,0,0,0,0,106, + 43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,124,1,100,6,171,2,0,0,0,0,0,0,125, + 13,124,8,103,1,124,13,95,22,0,0,0,0,0,0,0, + 0,124,13,83,0,121,6,35,0,116,12,0,0,0,0,0, + 0,0,0,36,0,114,6,1,0,100,4,125,5,89,0,144, + 1,140,127,119,0,120,3,89,0,119,1,35,0,116,36,0, + 0,0,0,0,0,0,0,36,0,114,4,1,0,89,0,1, + 0,121,6,119,0,120,3,89,0,119,1,41,10,122,111,84, + 114,121,32,116,111,32,102,105,110,100,32,97,32,115,112,101, + 99,32,102,111,114,32,116,104,101,32,115,112,101,99,105,102, + 105,101,100,32,109,111,100,117,108,101,46,10,10,32,32,32, + 32,32,32,32,32,82,101,116,117,114,110,115,32,116,104,101, + 32,109,97,116,99,104,105,110,103,32,115,112,101,99,44,32, + 111,114,32,78,111,110,101,32,105,102,32,110,111,116,32,102, + 111,117,110,100,46,10,32,32,32,32,32,32,32,32,70,114, + 103,0,0,0,114,52,0,0,0,114,170,0,0,0,114,67, + 1,0,0,78,122,9,116,114,121,105,110,103,32,123,125,41, + 1,218,9,118,101,114,98,111,115,105,116,121,122,25,112,111, + 115,115,105,98,108,101,32,110,97,109,101,115,112,97,99,101, + 32,102,111,114,32,123,125,41,23,114,131,0,0,0,114,85, + 0,0,0,114,68,0,0,0,114,23,0,0,0,114,95,0, + 0,0,114,152,1,0,0,114,87,0,0,0,114,16,2,0, + 0,218,11,95,102,105,108,108,95,99,97,99,104,101,114,27, + 0,0,0,114,19,2,0,0,114,172,0,0,0,114,18,2, + 0,0,114,72,0,0,0,114,15,2,0,0,114,93,0,0, + 0,114,7,2,0,0,114,96,0,0,0,114,138,0,0,0, + 114,207,0,0,0,114,215,0,0,0,114,11,1,0,0,114, + 5,1,0,0,41,14,114,189,0,0,0,114,42,1,0,0, + 114,57,1,0,0,218,12,105,115,95,110,97,109,101,115,112, + 97,99,101,218,11,116,97,105,108,95,109,111,100,117,108,101, + 114,242,0,0,0,218,5,99,97,99,104,101,218,12,99,97, + 99,104,101,95,109,111,100,117,108,101,218,9,98,97,115,101, + 95,112,97,116,104,114,178,1,0,0,114,17,1,0,0,218, + 13,105,110,105,116,95,102,105,108,101,110,97,109,101,218,9, + 102,117,108,108,95,112,97,116,104,114,16,1,0,0,115,14, + 0,0,0,32,32,32,32,32,32,32,32,32,32,32,32,32, + 32,114,10,0,0,0,114,58,1,0,0,122,20,70,105,108, + 101,70,105,110,100,101,114,46,102,105,110,100,95,115,112,101, + 99,57,6,0,0,115,230,1,0,0,128,0,240,10,0,24, + 29,136,12,216,22,30,215,22,41,209,22,41,168,35,211,22, + 46,168,113,209,22,49,136,11,240,2,3,9,23,220,20,30, + 152,116,159,121,153,121,210,31,56,172,67,175,74,169,74,171, + 76,211,20,57,215,20,66,209,20,66,136,69,240,6,0,12, + 17,144,68,215,20,36,209,20,36,210,11,36,216,12,16,215, + 12,28,209,12,28,212,12,30,216,31,36,136,68,212,12,28, + 228,11,22,140,61,216,20,24,215,20,44,209,20,44,136,69, + 216,27,38,215,27,44,209,27,44,211,27,46,137,76,224,20, + 24,215,20,36,209,20,36,136,69,216,27,38,136,76,224,11, + 23,152,53,209,11,32,220,24,34,160,52,167,57,161,57,168, + 107,211,24,58,136,73,216,40,44,175,13,169,13,242,0,8, + 13,54,209,16,36,144,6,152,12,216,32,42,168,86,209,32, + 51,144,13,220,28,38,160,121,176,45,211,28,64,144,9,220, + 19,31,160,9,213,19,42,216,27,31,159,62,153,62,168,44, + 184,8,192,41,200,105,200,91,208,90,96,211,27,97,210,20, + 97,240,9,8,13,54,244,16,0,32,43,168,57,211,31,53, + 144,12,224,36,40,167,77,161,77,242,0,9,9,56,209,12, + 32,136,70,144,76,240,2,3,13,28,220,28,38,160,116,167, + 121,161,121,176,43,192,6,209,50,70,211,28,71,144,9,244, + 6,0,13,23,215,12,39,209,12,39,168,11,176,89,200,33, + 208,12,39,212,12,76,216,15,27,152,102,209,15,36,168,5, + 210,15,45,220,19,31,160,9,213,19,42,216,27,31,159,62, + 153,62,168,44,184,8,192,41,216,42,46,176,6,243,3,1, + 28,56,242,0,1,21,56,240,17,9,9,56,241,20,0,12, + 24,220,12,22,215,12,39,209,12,39,208,40,67,192,89,212, + 12,79,220,19,29,215,19,40,209,19,40,168,24,176,52,211, + 19,56,136,68,216,47,56,168,107,136,68,212,12,43,216,19, + 23,136,75,216,15,19,248,244,81,1,0,16,23,242,0,1, + 9,23,216,20,22,139,69,240,3,1,9,23,251,244,56,0, + 20,30,242,0,1,13,28,218,23,27,240,3,1,13,28,250, + 115,35,0,0,0,152,53,70,62,0,196,40,25,71,16,2, + 198,62,11,71,13,3,199,12,1,71,13,3,199,16,9,71, + 29,5,199,28,1,71,29,5,99,1,0,0,0,0,0,0, + 0,0,0,0,0,5,0,0,0,3,0,0,0,243,84,2, + 0,0,151,0,124,0,106,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,125,1,9,0,116,3, + 0,0,0,0,0,0,0,0,106,4,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,124,1,120,1, + 115,20,1,0,116,3,0,0,0,0,0,0,0,0,106,6, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,124,1,124,2,124,3,171,3,0,0,0,0,0,0, - 125,4,124,4,128,1,121,1,124,4,106,6,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,52, - 124,4,106,8,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,125,5,124,5,114,37,100,1,124,4, - 95,5,0,0,0,0,0,0,0,0,116,13,0,0,0,0, - 0,0,0,0,124,1,124,5,124,0,106,4,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,171,3, - 0,0,0,0,0,0,124,4,95,4,0,0,0,0,0,0, - 0,0,124,4,83,0,121,1,124,4,83,0,41,2,122,141, - 84,114,121,32,116,111,32,102,105,110,100,32,97,32,115,112, - 101,99,32,102,111,114,32,39,102,117,108,108,110,97,109,101, - 39,32,111,110,32,115,121,115,46,112,97,116,104,32,111,114, - 32,39,112,97,116,104,39,46,10,10,32,32,32,32,32,32, - 32,32,84,104,101,32,115,101,97,114,99,104,32,105,115,32, - 98,97,115,101,100,32,111,110,32,115,121,115,46,112,97,116, - 104,95,104,111,111,107,115,32,97,110,100,32,115,121,115,46, - 112,97,116,104,95,105,109,112,111,114,116,101,114,95,99,97, - 99,104,101,46,10,32,32,32,32,32,32,32,32,78,41,7, - 114,20,0,0,0,114,68,0,0,0,114,4,2,0,0,114, - 4,1,0,0,114,5,1,0,0,114,9,1,0,0,114,185, - 1,0,0,41,6,114,50,1,0,0,114,42,1,0,0,114, - 68,0,0,0,114,57,1,0,0,114,16,1,0,0,114,1, - 2,0,0,115,6,0,0,0,32,32,32,32,32,32,114,10, - 0,0,0,114,58,1,0,0,122,20,80,97,116,104,70,105, - 110,100,101,114,46,102,105,110,100,95,115,112,101,99,237,5, - 0,0,115,114,0,0,0,128,0,240,12,0,12,16,136,60, - 220,19,22,151,56,145,56,136,68,216,15,18,143,125,137,125, - 152,88,160,116,168,86,211,15,52,136,4,216,11,15,136,60, - 216,19,23,216,13,17,143,91,137,91,208,13,32,216,29,33, - 215,29,60,209,29,60,136,78,217,15,29,240,6,0,31,35, - 144,4,148,11,220,50,64,192,24,200,62,208,91,94,215,91, - 104,209,91,104,211,50,105,144,4,212,16,47,216,23,27,144, - 11,224,23,27,224,19,23,136,75,114,28,0,0,0,99,0, - 0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,15, - 0,0,0,243,50,0,0,0,151,0,100,1,100,2,108,0, - 109,1,125,2,1,0,2,0,124,2,106,4,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,124,0, - 105,0,124,1,164,1,142,1,83,0,41,3,97,32,1,0, - 0,10,32,32,32,32,32,32,32,32,70,105,110,100,32,100, - 105,115,116,114,105,98,117,116,105,111,110,115,46,10,10,32, - 32,32,32,32,32,32,32,82,101,116,117,114,110,32,97,110, - 32,105,116,101,114,97,98,108,101,32,111,102,32,97,108,108, - 32,68,105,115,116,114,105,98,117,116,105,111,110,32,105,110, - 115,116,97,110,99,101,115,32,99,97,112,97,98,108,101,32, - 111,102,10,32,32,32,32,32,32,32,32,108,111,97,100,105, - 110,103,32,116,104,101,32,109,101,116,97,100,97,116,97,32, - 102,111,114,32,112,97,99,107,97,103,101,115,32,109,97,116, - 99,104,105,110,103,32,96,96,99,111,110,116,101,120,116,46, - 110,97,109,101,96,96,10,32,32,32,32,32,32,32,32,40, - 111,114,32,97,108,108,32,110,97,109,101,115,32,105,102,32, - 96,96,78,111,110,101,96,96,32,105,110,100,105,99,97,116, - 101,100,41,32,97,108,111,110,103,32,116,104,101,32,112,97, - 116,104,115,32,105,110,32,116,104,101,32,108,105,115,116,10, - 32,32,32,32,32,32,32,32,111,102,32,100,105,114,101,99, - 116,111,114,105,101,115,32,96,96,99,111,110,116,101,120,116, - 46,112,97,116,104,96,96,46,10,32,32,32,32,32,32,32, - 32,114,1,0,0,0,41,1,218,18,77,101,116,97,100,97, - 116,97,80,97,116,104,70,105,110,100,101,114,41,3,218,18, - 105,109,112,111,114,116,108,105,98,46,109,101,116,97,100,97, - 116,97,114,7,2,0,0,218,18,102,105,110,100,95,100,105, - 115,116,114,105,98,117,116,105,111,110,115,41,3,114,190,0, - 0,0,114,191,0,0,0,114,7,2,0,0,115,3,0,0, - 0,32,32,32,114,10,0,0,0,114,9,2,0,0,122,29, - 80,97,116,104,70,105,110,100,101,114,46,102,105,110,100,95, - 100,105,115,116,114,105,98,117,116,105,111,110,115,5,6,0, - 0,115,32,0,0,0,128,0,245,20,0,9,58,216,15,52, - 208,15,33,215,15,52,209,15,52,176,100,208,15,69,184,102, - 209,15,69,208,8,69,114,28,0,0,0,114,77,0,0,0, - 114,59,1,0,0,41,12,114,196,0,0,0,114,195,0,0, - 0,114,197,0,0,0,114,198,0,0,0,114,62,1,0,0, - 114,242,1,0,0,114,251,1,0,0,114,63,1,0,0,114, - 255,1,0,0,114,4,2,0,0,114,58,1,0,0,114,9, - 2,0,0,114,30,0,0,0,114,28,0,0,0,114,10,0, - 0,0,114,240,1,0,0,114,240,1,0,0,154,5,0,0, - 115,125,0,0,0,132,0,225,4,72,224,5,17,241,2,12, - 5,35,243,3,0,6,18,240,2,12,5,35,240,28,0,6, - 18,241,2,10,5,24,243,3,0,6,18,240,2,10,5,24, - 240,24,0,6,17,241,2,19,5,22,243,3,0,6,17,240, - 2,19,5,22,240,42,0,6,17,242,2,26,5,24,243,3, - 0,6,17,240,2,26,5,24,240,56,0,6,17,242,2,21, - 5,24,243,3,0,6,17,240,2,21,5,24,240,46,0,6, - 18,241,2,10,5,70,1,243,3,0,6,18,241,2,10,5, - 70,1,114,28,0,0,0,114,240,1,0,0,99,0,0,0, - 0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0, - 0,243,70,0,0,0,151,0,101,0,90,1,100,0,90,2, - 100,1,90,3,100,2,132,0,90,4,100,3,132,0,90,5, - 100,4,132,0,90,6,100,10,100,6,132,1,90,7,100,7, - 132,0,90,8,101,9,100,8,132,0,171,0,0,0,0,0, - 0,0,90,10,100,9,132,0,90,11,121,5,41,11,218,10, - 70,105,108,101,70,105,110,100,101,114,122,172,70,105,108,101, - 45,98,97,115,101,100,32,102,105,110,100,101,114,46,10,10, - 32,32,32,32,73,110,116,101,114,97,99,116,105,111,110,115, - 32,119,105,116,104,32,116,104,101,32,102,105,108,101,32,115, - 121,115,116,101,109,32,97,114,101,32,99,97,99,104,101,100, - 32,102,111,114,32,112,101,114,102,111,114,109,97,110,99,101, - 44,32,98,101,105,110,103,10,32,32,32,32,114,101,102,114, - 101,115,104,101,100,32,119,104,101,110,32,116,104,101,32,100, - 105,114,101,99,116,111,114,121,32,116,104,101,32,102,105,110, - 100,101,114,32,105,115,32,104,97,110,100,108,105,110,103,32, - 104,97,115,32,98,101,101,110,32,109,111,100,105,102,105,101, - 100,46,10,10,32,32,32,32,99,2,0,0,0,0,0,0, - 0,0,0,0,0,5,0,0,0,7,0,0,0,243,12,1, - 0,0,135,5,151,0,103,0,125,3,124,2,68,0,93,31, - 0,0,92,2,0,0,138,5,125,4,124,3,106,1,0,0, + 0,0,171,0,0,0,0,0,0,0,171,1,0,0,0,0, + 0,0,125,2,116,14,0,0,0,0,0,0,0,0,106,16, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 136,5,102,1,100,1,132,8,124,4,68,0,171,0,0,0, - 0,0,0,0,171,1,0,0,0,0,0,0,1,0,140,33, - 4,0,124,3,124,0,95,1,0,0,0,0,0,0,0,0, - 124,1,114,5,124,1,100,2,107,40,0,0,114,26,116,5, - 0,0,0,0,0,0,0,0,106,6,0,0,0,0,0,0, + 0,0,106,19,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,100,1,171,1,0,0,0,0,0,0, + 115,17,116,21,0,0,0,0,0,0,0,0,124,2,171,1, + 0,0,0,0,0,0,124,0,95,11,0,0,0,0,0,0, + 0,0,110,88,116,21,0,0,0,0,0,0,0,0,171,0, + 0,0,0,0,0,0,125,3,124,2,68,0,93,66,0,0, + 125,4,124,4,106,25,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,100,2,171,1,0,0,0,0, + 0,0,92,3,0,0,125,5,125,6,125,7,124,6,114,22, + 124,5,155,0,100,2,124,7,106,27,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,171,0,0,0, - 0,0,0,0,124,0,95,4,0,0,0,0,0,0,0,0, - 110,16,116,11,0,0,0,0,0,0,0,0,124,1,171,1, - 0,0,0,0,0,0,124,0,95,4,0,0,0,0,0,0, - 0,0,100,3,124,0,95,6,0,0,0,0,0,0,0,0, - 116,15,0,0,0,0,0,0,0,0,171,0,0,0,0,0, - 0,0,124,0,95,8,0,0,0,0,0,0,0,0,116,15, - 0,0,0,0,0,0,0,0,171,0,0,0,0,0,0,0, - 124,0,95,9,0,0,0,0,0,0,0,0,121,4,41,5, - 122,154,73,110,105,116,105,97,108,105,122,101,32,119,105,116, - 104,32,116,104,101,32,112,97,116,104,32,116,111,32,115,101, - 97,114,99,104,32,111,110,32,97,110,100,32,97,32,118,97, - 114,105,97,98,108,101,32,110,117,109,98,101,114,32,111,102, - 10,32,32,32,32,32,32,32,32,50,45,116,117,112,108,101, - 115,32,99,111,110,116,97,105,110,105,110,103,32,116,104,101, - 32,108,111,97,100,101,114,32,97,110,100,32,116,104,101,32, - 102,105,108,101,32,115,117,102,102,105,120,101,115,32,116,104, - 101,32,108,111,97,100,101,114,10,32,32,32,32,32,32,32, - 32,114,101,99,111,103,110,105,122,101,115,46,99,1,0,0, - 0,0,0,0,0,0,0,0,0,3,0,0,0,51,0,0, - 0,243,38,0,0,0,149,1,75,0,1,0,151,0,124,0, - 93,8,0,0,125,1,124,1,137,2,102,2,150,1,151,1, - 1,0,140,10,4,0,121,0,173,3,119,1,114,77,0,0, - 0,114,30,0,0,0,41,3,114,8,0,0,0,114,178,1, - 0,0,114,4,1,0,0,115,3,0,0,0,32,32,128,114, - 10,0,0,0,114,11,0,0,0,122,38,70,105,108,101,70, - 105,110,100,101,114,46,95,95,105,110,105,116,95,95,46,60, - 108,111,99,97,108,115,62,46,60,103,101,110,101,120,112,114, - 62,34,6,0,0,115,22,0,0,0,248,232,0,248,128,0, - 210,26,67,176,6,152,70,160,70,212,27,43,209,26,67,249, - 115,4,0,0,0,131,14,17,1,114,103,0,0,0,114,170, - 0,0,0,78,41,10,114,240,0,0,0,218,8,95,108,111, - 97,100,101,114,115,114,23,0,0,0,114,95,0,0,0,114, - 68,0,0,0,114,105,0,0,0,218,11,95,112,97,116,104, - 95,109,116,105,109,101,218,3,115,101,116,218,11,95,112,97, - 116,104,95,99,97,99,104,101,218,19,95,114,101,108,97,120, - 101,100,95,112,97,116,104,95,99,97,99,104,101,41,6,114, - 189,0,0,0,114,68,0,0,0,218,14,108,111,97,100,101, - 114,95,100,101,116,97,105,108,115,218,7,108,111,97,100,101, - 114,115,114,18,1,0,0,114,4,1,0,0,115,6,0,0, - 0,32,32,32,32,32,64,114,10,0,0,0,114,67,1,0, - 0,122,19,70,105,108,101,70,105,110,100,101,114,46,95,95, - 105,110,105,116,95,95,28,6,0,0,115,119,0,0,0,248, - 128,0,240,8,0,19,21,136,7,216,32,46,242,0,1,9, - 68,1,209,12,28,136,70,144,72,216,12,19,143,78,137,78, - 211,26,67,184,40,212,26,67,213,12,67,240,3,1,9,68, - 1,224,24,31,136,4,140,13,225,15,19,144,116,152,115,146, - 123,220,24,27,159,10,153,10,155,12,136,68,141,73,228,24, - 37,160,100,211,24,43,136,68,140,73,216,27,29,136,4,212, - 8,24,220,27,30,155,53,136,4,212,8,24,220,35,38,163, - 53,136,4,213,8,32,114,28,0,0,0,99,1,0,0,0, - 0,0,0,0,0,0,0,0,2,0,0,0,3,0,0,0, - 243,18,0,0,0,151,0,100,1,124,0,95,0,0,0,0, - 0,0,0,0,0,121,2,41,3,122,31,73,110,118,97,108, - 105,100,97,116,101,32,116,104,101,32,100,105,114,101,99,116, - 111,114,121,32,109,116,105,109,101,46,114,170,0,0,0,78, - 41,1,114,15,2,0,0,114,131,1,0,0,115,1,0,0, - 0,32,114,10,0,0,0,114,242,1,0,0,122,28,70,105, - 108,101,70,105,110,100,101,114,46,105,110,118,97,108,105,100, - 97,116,101,95,99,97,99,104,101,115,45,6,0,0,115,10, - 0,0,0,128,0,224,27,29,136,4,213,8,24,114,28,0, - 0,0,99,6,0,0,0,0,0,0,0,0,0,0,0,6, - 0,0,0,3,0,0,0,243,50,0,0,0,151,0,2,0, - 124,1,124,2,124,3,171,2,0,0,0,0,0,0,125,6, - 116,1,0,0,0,0,0,0,0,0,124,2,124,3,124,6, - 124,4,172,1,171,4,0,0,0,0,0,0,83,0,41,2, - 78,114,3,1,0,0,41,1,114,20,1,0,0,41,7,114, - 189,0,0,0,114,17,1,0,0,114,42,1,0,0,114,68, - 0,0,0,218,4,115,109,115,108,114,57,1,0,0,114,4, - 1,0,0,115,7,0,0,0,32,32,32,32,32,32,32,114, - 10,0,0,0,114,4,2,0,0,122,20,70,105,108,101,70, - 105,110,100,101,114,46,95,103,101,116,95,115,112,101,99,49, - 6,0,0,115,38,0,0,0,128,0,217,17,29,152,104,168, - 4,211,17,45,136,6,220,15,38,160,120,176,20,184,102,216, - 66,70,244,3,1,16,72,1,240,0,1,9,72,1,114,28, - 0,0,0,78,99,3,0,0,0,0,0,0,0,0,0,0, - 0,8,0,0,0,3,0,0,0,243,192,3,0,0,151,0, - 100,1,125,3,124,1,106,1,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,100,2,171,1,0,0, - 0,0,0,0,100,3,25,0,0,0,125,4,9,0,116,3, - 0,0,0,0,0,0,0,0,124,0,106,4,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,120,1, - 115,20,1,0,116,7,0,0,0,0,0,0,0,0,106,8, + 0,0,0,0,155,0,157,3,125,8,110,2,124,5,125,8, + 124,3,106,29,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,124,8,171,1,0,0,0,0,0,0, + 1,0,140,68,4,0,124,3,124,0,95,11,0,0,0,0, + 0,0,0,0,116,14,0,0,0,0,0,0,0,0,106,16, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,171,0,0,0,0,0,0,0,171,1,0,0,0,0, - 0,0,106,10,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,125,5,124,5,124,0,106,14,0,0, + 0,0,106,19,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,116,30,0,0,0,0,0,0,0,0, + 171,1,0,0,0,0,0,0,114,36,124,2,68,0,143,9, + 99,2,104,0,99,2,93,18,0,0,125,9,124,9,106,27, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 107,55,0,0,114,23,124,0,106,17,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,171,0,0,0, - 0,0,0,0,1,0,124,5,124,0,95,7,0,0,0,0, - 0,0,0,0,116,19,0,0,0,0,0,0,0,0,171,0, - 0,0,0,0,0,0,114,29,124,0,106,20,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,125,6, - 124,4,106,23,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,171,0,0,0,0,0,0,0,125,7, - 110,14,124,0,106,24,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,125,6,124,4,125,7,124,7, - 124,6,118,0,114,105,116,27,0,0,0,0,0,0,0,0, - 124,0,106,4,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,124,4,171,2,0,0,0,0,0,0, - 125,8,124,0,106,28,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,68,0,93,57,0,0,92,2, - 0,0,125,9,125,10,100,5,124,9,122,0,0,0,125,11, - 116,27,0,0,0,0,0,0,0,0,124,8,124,11,171,2, - 0,0,0,0,0,0,125,12,116,31,0,0,0,0,0,0, - 0,0,124,12,171,1,0,0,0,0,0,0,115,1,140,35, - 124,0,106,33,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,124,10,124,1,124,12,124,8,103,1, - 124,2,171,5,0,0,0,0,0,0,99,2,1,0,83,0, - 4,0,116,35,0,0,0,0,0,0,0,0,124,8,171,1, - 0,0,0,0,0,0,125,3,124,0,106,28,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,68,0, - 93,97,0,0,92,2,0,0,125,9,125,10,9,0,116,27, - 0,0,0,0,0,0,0,0,124,0,106,4,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,124,4, - 124,9,122,0,0,0,171,2,0,0,0,0,0,0,125,12, - 116,38,0,0,0,0,0,0,0,0,106,41,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,100,7, - 124,12,100,3,172,8,171,3,0,0,0,0,0,0,1,0, - 124,7,124,9,122,0,0,0,124,6,118,0,115,1,140,64, - 116,31,0,0,0,0,0,0,0,0,124,12,171,1,0,0, - 0,0,0,0,115,1,140,76,124,0,106,33,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,124,10, - 124,1,124,12,100,6,124,2,171,5,0,0,0,0,0,0, - 99,2,1,0,83,0,4,0,124,3,114,54,116,38,0,0, - 0,0,0,0,0,0,106,41,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,100,9,127,8,171,2, - 0,0,0,0,0,0,1,0,116,38,0,0,0,0,0,0, - 0,0,106,43,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,124,1,100,6,171,2,0,0,0,0, - 0,0,125,13,124,8,103,1,124,13,95,22,0,0,0,0, - 0,0,0,0,124,13,83,0,121,6,35,0,116,12,0,0, - 0,0,0,0,0,0,36,0,114,6,1,0,100,4,125,5, - 89,0,144,1,140,127,119,0,120,3,89,0,119,1,35,0, - 116,36,0,0,0,0,0,0,0,0,36,0,114,4,1,0, - 89,0,1,0,121,6,119,0,120,3,89,0,119,1,41,10, - 122,111,84,114,121,32,116,111,32,102,105,110,100,32,97,32, - 115,112,101,99,32,102,111,114,32,116,104,101,32,115,112,101, - 99,105,102,105,101,100,32,109,111,100,117,108,101,46,10,10, - 32,32,32,32,32,32,32,32,82,101,116,117,114,110,115,32, - 116,104,101,32,109,97,116,99,104,105,110,103,32,115,112,101, - 99,44,32,111,114,32,78,111,110,101,32,105,102,32,110,111, - 116,32,102,111,117,110,100,46,10,32,32,32,32,32,32,32, - 32,70,114,103,0,0,0,114,52,0,0,0,114,170,0,0, - 0,114,67,1,0,0,78,122,9,116,114,121,105,110,103,32, - 123,125,41,1,218,9,118,101,114,98,111,115,105,116,121,122, - 25,112,111,115,115,105,98,108,101,32,110,97,109,101,115,112, - 97,99,101,32,102,111,114,32,123,125,41,23,114,131,0,0, - 0,114,85,0,0,0,114,68,0,0,0,114,23,0,0,0, - 114,95,0,0,0,114,152,1,0,0,114,87,0,0,0,114, - 15,2,0,0,218,11,95,102,105,108,108,95,99,97,99,104, - 101,114,27,0,0,0,114,18,2,0,0,114,172,0,0,0, - 114,17,2,0,0,114,72,0,0,0,114,14,2,0,0,114, - 93,0,0,0,114,4,2,0,0,114,96,0,0,0,114,138, - 0,0,0,114,207,0,0,0,114,215,0,0,0,114,11,1, - 0,0,114,5,1,0,0,41,14,114,189,0,0,0,114,42, - 1,0,0,114,57,1,0,0,218,12,105,115,95,110,97,109, - 101,115,112,97,99,101,218,11,116,97,105,108,95,109,111,100, - 117,108,101,114,242,0,0,0,218,5,99,97,99,104,101,218, - 12,99,97,99,104,101,95,109,111,100,117,108,101,218,9,98, - 97,115,101,95,112,97,116,104,114,178,1,0,0,114,17,1, - 0,0,218,13,105,110,105,116,95,102,105,108,101,110,97,109, - 101,218,9,102,117,108,108,95,112,97,116,104,114,16,1,0, - 0,115,14,0,0,0,32,32,32,32,32,32,32,32,32,32, - 32,32,32,32,114,10,0,0,0,114,58,1,0,0,122,20, - 70,105,108,101,70,105,110,100,101,114,46,102,105,110,100,95, - 115,112,101,99,54,6,0,0,115,230,1,0,0,128,0,240, - 10,0,24,29,136,12,216,22,30,215,22,41,209,22,41,168, - 35,211,22,46,168,113,209,22,49,136,11,240,2,3,9,23, - 220,20,30,152,116,159,121,153,121,210,31,56,172,67,175,74, - 169,74,171,76,211,20,57,215,20,66,209,20,66,136,69,240, - 6,0,12,17,144,68,215,20,36,209,20,36,210,11,36,216, - 12,16,215,12,28,209,12,28,212,12,30,216,31,36,136,68, - 212,12,28,228,11,22,140,61,216,20,24,215,20,44,209,20, - 44,136,69,216,27,38,215,27,44,209,27,44,211,27,46,137, - 76,224,20,24,215,20,36,209,20,36,136,69,216,27,38,136, - 76,224,11,23,152,53,209,11,32,220,24,34,160,52,167,57, - 161,57,168,107,211,24,58,136,73,216,40,44,175,13,169,13, - 242,0,8,13,54,209,16,36,144,6,152,12,216,32,42,168, - 86,209,32,51,144,13,220,28,38,160,121,176,45,211,28,64, - 144,9,220,19,31,160,9,213,19,42,216,27,31,159,62,153, - 62,168,44,184,8,192,41,200,105,200,91,208,90,96,211,27, - 97,210,20,97,240,9,8,13,54,244,16,0,32,43,168,57, - 211,31,53,144,12,224,36,40,167,77,161,77,242,0,9,9, - 56,209,12,32,136,70,144,76,240,2,3,13,28,220,28,38, - 160,116,167,121,161,121,176,43,192,6,209,50,70,211,28,71, - 144,9,244,6,0,13,23,215,12,39,209,12,39,168,11,176, - 89,200,33,208,12,39,212,12,76,216,15,27,152,102,209,15, - 36,168,5,210,15,45,220,19,31,160,9,213,19,42,216,27, - 31,159,62,153,62,168,44,184,8,192,41,216,42,46,176,6, - 243,3,1,28,56,242,0,1,21,56,240,17,9,9,56,241, - 20,0,12,24,220,12,22,215,12,39,209,12,39,208,40,67, - 192,89,212,12,79,220,19,29,215,19,40,209,19,40,168,24, - 176,52,211,19,56,136,68,216,47,56,168,107,136,68,212,12, - 43,216,19,23,136,75,216,15,19,248,244,81,1,0,16,23, - 242,0,1,9,23,216,20,22,139,69,240,3,1,9,23,251, - 244,56,0,20,30,242,0,1,13,28,218,23,27,240,3,1, - 13,28,250,115,35,0,0,0,152,53,70,62,0,196,40,25, - 71,16,2,198,62,11,71,13,3,199,12,1,71,13,3,199, - 16,9,71,29,5,199,28,1,71,29,5,99,1,0,0,0, - 0,0,0,0,0,0,0,0,5,0,0,0,3,0,0,0, - 243,84,2,0,0,151,0,124,0,106,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,125,1,9, - 0,116,3,0,0,0,0,0,0,0,0,106,4,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,124, - 1,120,1,115,20,1,0,116,3,0,0,0,0,0,0,0, - 0,106,6,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,171,0,0,0,0,0,0,0,171,1,0, - 0,0,0,0,0,125,2,116,14,0,0,0,0,0,0,0, - 0,106,16,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,106,19,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,100,1,171,1,0,0,0, - 0,0,0,115,17,116,21,0,0,0,0,0,0,0,0,124, - 2,171,1,0,0,0,0,0,0,124,0,95,11,0,0,0, - 0,0,0,0,0,110,88,116,21,0,0,0,0,0,0,0, - 0,171,0,0,0,0,0,0,0,125,3,124,2,68,0,93, - 66,0,0,125,4,124,4,106,25,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,100,2,171,1,0, - 0,0,0,0,0,92,3,0,0,125,5,125,6,125,7,124, - 6,114,22,124,5,155,0,100,2,124,7,106,27,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,171, - 0,0,0,0,0,0,0,155,0,157,3,125,8,110,2,124, - 5,125,8,124,3,106,29,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,124,8,171,1,0,0,0, - 0,0,0,1,0,140,68,4,0,124,3,124,0,95,11,0, - 0,0,0,0,0,0,0,116,14,0,0,0,0,0,0,0, - 0,106,16,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,106,19,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,116,30,0,0,0,0,0, - 0,0,0,171,1,0,0,0,0,0,0,114,36,124,2,68, - 0,143,9,99,2,104,0,99,2,93,18,0,0,125,9,124, - 9,106,27,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,171,0,0,0,0,0,0,0,146,2,140, - 20,4,0,99,2,125,9,124,0,95,16,0,0,0,0,0, - 0,0,0,121,3,121,3,35,0,116,8,0,0,0,0,0, - 0,0,0,116,10,0,0,0,0,0,0,0,0,116,12,0, - 0,0,0,0,0,0,0,102,3,36,0,114,5,1,0,103, - 0,125,2,89,0,140,232,119,0,120,3,89,0,119,1,99, - 2,1,0,99,2,125,9,119,0,41,4,122,68,70,105,108, - 108,32,116,104,101,32,99,97,99,104,101,32,111,102,32,112, - 111,116,101,110,116,105,97,108,32,109,111,100,117,108,101,115, - 32,97,110,100,32,112,97,99,107,97,103,101,115,32,102,111, - 114,32,116,104,105,115,32,100,105,114,101,99,116,111,114,121, - 46,114,14,0,0,0,114,103,0,0,0,78,41,17,114,68, - 0,0,0,114,23,0,0,0,218,7,108,105,115,116,100,105, - 114,114,95,0,0,0,114,253,1,0,0,218,15,80,101,114, - 109,105,115,115,105,111,110,69,114,114,111,114,218,18,78,111, - 116,65,68,105,114,101,99,116,111,114,121,69,114,114,111,114, - 114,20,0,0,0,114,31,0,0,0,114,32,0,0,0,114, - 16,2,0,0,114,17,2,0,0,114,158,0,0,0,114,172, - 0,0,0,218,3,97,100,100,114,33,0,0,0,114,18,2, - 0,0,41,10,114,189,0,0,0,114,68,0,0,0,218,8, - 99,111,110,116,101,110,116,115,218,21,108,111,119,101,114,95, - 115,117,102,102,105,120,95,99,111,110,116,101,110,116,115,114, - 225,1,0,0,114,187,0,0,0,114,198,1,0,0,114,178, - 1,0,0,218,8,110,101,119,95,110,97,109,101,218,2,102, - 110,115,10,0,0,0,32,32,32,32,32,32,32,32,32,32, - 114,10,0,0,0,114,26,2,0,0,122,22,70,105,108,101, - 70,105,110,100,101,114,46,95,102,105,108,108,95,99,97,99, - 104,101,105,6,0,0,115,5,1,0,0,128,0,224,15,19, - 143,121,137,121,136,4,240,2,5,9,26,220,23,26,151,123, - 145,123,160,52,210,35,55,172,51,175,58,169,58,171,60,211, - 23,56,136,72,244,14,0,16,19,143,124,137,124,215,15,38, - 209,15,38,160,117,212,15,45,220,31,34,160,56,155,125,136, - 68,213,12,28,244,14,0,37,40,163,69,208,12,33,216,24, - 32,242,0,6,13,52,144,4,216,36,40,167,78,161,78,176, - 51,211,36,55,209,16,33,144,4,144,99,152,54,217,19,22, - 216,34,38,160,22,160,113,168,22,175,28,169,28,171,30,208, - 40,56,208,31,57,145,72,224,31,35,144,72,216,16,37,215, - 16,41,209,16,41,168,40,213,16,51,240,13,6,13,52,240, - 14,0,32,53,136,68,212,12,28,220,11,14,143,60,137,60, - 215,11,34,209,11,34,212,35,62,212,11,63,216,61,69,214, - 39,70,176,114,168,2,175,8,169,8,173,10,210,39,70,136, - 68,213,12,36,240,3,0,12,64,1,248,244,47,0,17,34, - 164,63,212,52,70,208,15,71,242,0,3,9,26,240,6,0, - 24,26,138,72,240,7,3,9,26,252,242,48,0,40,71,1, - 115,23,0,0,0,142,43,68,9,0,195,40,23,68,37,4, - 196,9,22,68,34,3,196,33,1,68,34,3,99,1,0,0, - 0,0,0,0,0,0,0,0,0,2,0,0,0,7,0,0, - 0,243,22,0,0,0,135,0,135,1,151,0,136,0,136,1, - 102,2,100,1,132,8,125,2,124,2,83,0,41,2,97,20, - 1,0,0,65,32,99,108,97,115,115,32,109,101,116,104,111, - 100,32,119,104,105,99,104,32,114,101,116,117,114,110,115,32, - 97,32,99,108,111,115,117,114,101,32,116,111,32,117,115,101, - 32,111,110,32,115,121,115,46,112,97,116,104,95,104,111,111, - 107,10,32,32,32,32,32,32,32,32,119,104,105,99,104,32, - 119,105,108,108,32,114,101,116,117,114,110,32,97,110,32,105, - 110,115,116,97,110,99,101,32,117,115,105,110,103,32,116,104, - 101,32,115,112,101,99,105,102,105,101,100,32,108,111,97,100, - 101,114,115,32,97,110,100,32,116,104,101,32,112,97,116,104, - 10,32,32,32,32,32,32,32,32,99,97,108,108,101,100,32, - 111,110,32,116,104,101,32,99,108,111,115,117,114,101,46,10, - 10,32,32,32,32,32,32,32,32,73,102,32,116,104,101,32, - 112,97,116,104,32,99,97,108,108,101,100,32,111,110,32,116, - 104,101,32,99,108,111,115,117,114,101,32,105,115,32,110,111, - 116,32,97,32,100,105,114,101,99,116,111,114,121,44,32,73, - 109,112,111,114,116,69,114,114,111,114,32,105,115,10,32,32, - 32,32,32,32,32,32,114,97,105,115,101,100,46,10,10,32, - 32,32,32,32,32,32,32,99,1,0,0,0,0,0,0,0, - 0,0,0,0,4,0,0,0,19,0,0,0,243,70,0,0, - 0,149,2,151,0,116,1,0,0,0,0,0,0,0,0,124, - 0,171,1,0,0,0,0,0,0,115,13,116,3,0,0,0, - 0,0,0,0,0,100,1,124,0,172,2,171,2,0,0,0, - 0,0,0,130,1,2,0,137,1,124,0,103,1,137,2,162, - 1,173,6,142,0,83,0,41,3,122,45,80,97,116,104,32, - 104,111,111,107,32,102,111,114,32,105,109,112,111,114,116,108, - 105,98,46,109,97,99,104,105,110,101,114,121,46,70,105,108, - 101,70,105,110,100,101,114,46,122,30,111,110,108,121,32,100, - 105,114,101,99,116,111,114,105,101,115,32,97,114,101,32,115, - 117,112,112,111,114,116,101,100,114,84,0,0,0,41,2,114, - 96,0,0,0,114,188,0,0,0,41,3,114,68,0,0,0, - 114,50,1,0,0,114,19,2,0,0,115,3,0,0,0,32, - 128,128,114,10,0,0,0,218,24,112,97,116,104,95,104,111, - 111,107,95,102,111,114,95,70,105,108,101,70,105,110,100,101, - 114,122,54,70,105,108,101,70,105,110,100,101,114,46,112,97, - 116,104,95,104,111,111,107,46,60,108,111,99,97,108,115,62, - 46,112,97,116,104,95,104,111,111,107,95,102,111,114,95,70, - 105,108,101,70,105,110,100,101,114,146,6,0,0,115,41,0, - 0,0,248,128,0,228,19,30,152,116,212,19,36,220,22,33, - 208,34,66,200,20,212,22,78,208,16,78,217,19,22,144,116, - 208,19,45,152,110,210,19,45,208,12,45,114,28,0,0,0, - 114,30,0,0,0,41,3,114,50,1,0,0,114,19,2,0, - 0,114,45,2,0,0,115,3,0,0,0,96,96,32,114,10, - 0,0,0,218,9,112,97,116,104,95,104,111,111,107,122,20, + 0,0,171,0,0,0,0,0,0,0,146,2,140,20,4,0, + 99,2,125,9,124,0,95,16,0,0,0,0,0,0,0,0, + 121,3,121,3,35,0,116,8,0,0,0,0,0,0,0,0, + 116,10,0,0,0,0,0,0,0,0,116,12,0,0,0,0, + 0,0,0,0,102,3,36,0,114,5,1,0,103,0,125,2, + 89,0,140,232,119,0,120,3,89,0,119,1,99,2,1,0, + 99,2,125,9,119,0,41,4,122,68,70,105,108,108,32,116, + 104,101,32,99,97,99,104,101,32,111,102,32,112,111,116,101, + 110,116,105,97,108,32,109,111,100,117,108,101,115,32,97,110, + 100,32,112,97,99,107,97,103,101,115,32,102,111,114,32,116, + 104,105,115,32,100,105,114,101,99,116,111,114,121,46,114,14, + 0,0,0,114,103,0,0,0,78,41,17,114,68,0,0,0, + 114,23,0,0,0,218,7,108,105,115,116,100,105,114,114,95, + 0,0,0,114,0,2,0,0,218,15,80,101,114,109,105,115, + 115,105,111,110,69,114,114,111,114,218,18,78,111,116,65,68, + 105,114,101,99,116,111,114,121,69,114,114,111,114,114,20,0, + 0,0,114,31,0,0,0,114,32,0,0,0,114,17,2,0, + 0,114,18,2,0,0,114,158,0,0,0,114,172,0,0,0, + 218,3,97,100,100,114,33,0,0,0,114,19,2,0,0,41, + 10,114,189,0,0,0,114,68,0,0,0,218,8,99,111,110, + 116,101,110,116,115,218,21,108,111,119,101,114,95,115,117,102, + 102,105,120,95,99,111,110,116,101,110,116,115,114,225,1,0, + 0,114,187,0,0,0,114,198,1,0,0,114,178,1,0,0, + 218,8,110,101,119,95,110,97,109,101,218,2,102,110,115,10, + 0,0,0,32,32,32,32,32,32,32,32,32,32,114,10,0, + 0,0,114,27,2,0,0,122,22,70,105,108,101,70,105,110, + 100,101,114,46,95,102,105,108,108,95,99,97,99,104,101,108, + 6,0,0,115,5,1,0,0,128,0,224,15,19,143,121,137, + 121,136,4,240,2,5,9,26,220,23,26,151,123,145,123,160, + 52,210,35,55,172,51,175,58,169,58,171,60,211,23,56,136, + 72,244,14,0,16,19,143,124,137,124,215,15,38,209,15,38, + 160,117,212,15,45,220,31,34,160,56,155,125,136,68,213,12, + 28,244,14,0,37,40,163,69,208,12,33,216,24,32,242,0, + 6,13,52,144,4,216,36,40,167,78,161,78,176,51,211,36, + 55,209,16,33,144,4,144,99,152,54,217,19,22,216,34,38, + 160,22,160,113,168,22,175,28,169,28,171,30,208,40,56,208, + 31,57,145,72,224,31,35,144,72,216,16,37,215,16,41,209, + 16,41,168,40,213,16,51,240,13,6,13,52,240,14,0,32, + 53,136,68,212,12,28,220,11,14,143,60,137,60,215,11,34, + 209,11,34,212,35,62,212,11,63,216,61,69,214,39,70,176, + 114,168,2,175,8,169,8,173,10,210,39,70,136,68,213,12, + 36,240,3,0,12,64,1,248,244,47,0,17,34,164,63,212, + 52,70,208,15,71,242,0,3,9,26,240,6,0,24,26,138, + 72,240,7,3,9,26,252,242,48,0,40,71,1,115,23,0, + 0,0,142,43,68,9,0,195,40,23,68,37,4,196,9,22, + 68,34,3,196,33,1,68,34,3,99,1,0,0,0,0,0, + 0,0,0,0,0,0,2,0,0,0,7,0,0,0,243,22, + 0,0,0,135,0,135,1,151,0,136,0,136,1,102,2,100, + 1,132,8,125,2,124,2,83,0,41,2,97,20,1,0,0, + 65,32,99,108,97,115,115,32,109,101,116,104,111,100,32,119, + 104,105,99,104,32,114,101,116,117,114,110,115,32,97,32,99, + 108,111,115,117,114,101,32,116,111,32,117,115,101,32,111,110, + 32,115,121,115,46,112,97,116,104,95,104,111,111,107,10,32, + 32,32,32,32,32,32,32,119,104,105,99,104,32,119,105,108, + 108,32,114,101,116,117,114,110,32,97,110,32,105,110,115,116, + 97,110,99,101,32,117,115,105,110,103,32,116,104,101,32,115, + 112,101,99,105,102,105,101,100,32,108,111,97,100,101,114,115, + 32,97,110,100,32,116,104,101,32,112,97,116,104,10,32,32, + 32,32,32,32,32,32,99,97,108,108,101,100,32,111,110,32, + 116,104,101,32,99,108,111,115,117,114,101,46,10,10,32,32, + 32,32,32,32,32,32,73,102,32,116,104,101,32,112,97,116, + 104,32,99,97,108,108,101,100,32,111,110,32,116,104,101,32, + 99,108,111,115,117,114,101,32,105,115,32,110,111,116,32,97, + 32,100,105,114,101,99,116,111,114,121,44,32,73,109,112,111, + 114,116,69,114,114,111,114,32,105,115,10,32,32,32,32,32, + 32,32,32,114,97,105,115,101,100,46,10,10,32,32,32,32, + 32,32,32,32,99,1,0,0,0,0,0,0,0,0,0,0, + 0,4,0,0,0,19,0,0,0,243,70,0,0,0,149,2, + 151,0,116,1,0,0,0,0,0,0,0,0,124,0,171,1, + 0,0,0,0,0,0,115,13,116,3,0,0,0,0,0,0, + 0,0,100,1,124,0,172,2,171,2,0,0,0,0,0,0, + 130,1,2,0,137,1,124,0,103,1,137,2,162,1,173,6, + 142,0,83,0,41,3,122,45,80,97,116,104,32,104,111,111, + 107,32,102,111,114,32,105,109,112,111,114,116,108,105,98,46, + 109,97,99,104,105,110,101,114,121,46,70,105,108,101,70,105, + 110,100,101,114,46,122,30,111,110,108,121,32,100,105,114,101, + 99,116,111,114,105,101,115,32,97,114,101,32,115,117,112,112, + 111,114,116,101,100,114,84,0,0,0,41,2,114,96,0,0, + 0,114,188,0,0,0,41,3,114,68,0,0,0,114,50,1, + 0,0,114,20,2,0,0,115,3,0,0,0,32,128,128,114, + 10,0,0,0,218,24,112,97,116,104,95,104,111,111,107,95, + 102,111,114,95,70,105,108,101,70,105,110,100,101,114,122,54, 70,105,108,101,70,105,110,100,101,114,46,112,97,116,104,95, - 104,111,111,107,136,6,0,0,115,16,0,0,0,249,128,0, - 245,20,4,9,46,240,12,0,16,40,208,8,39,114,28,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,34,0,0,0,151,0,100,1, - 124,0,106,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,155,2,100,2,157,3,83,0,41,3, - 78,122,11,70,105,108,101,70,105,110,100,101,114,40,114,221, - 1,0,0,114,84,0,0,0,114,131,1,0,0,115,1,0, - 0,0,32,114,10,0,0,0,114,222,1,0,0,122,19,70, - 105,108,101,70,105,110,100,101,114,46,95,95,114,101,112,114, - 95,95,154,6,0,0,115,21,0,0,0,128,0,216,17,28, - 152,84,159,89,153,89,152,77,168,17,208,15,43,208,8,43, - 114,28,0,0,0,114,77,0,0,0,41,12,114,196,0,0, - 0,114,195,0,0,0,114,197,0,0,0,114,198,0,0,0, - 114,67,1,0,0,114,242,1,0,0,114,4,2,0,0,114, - 58,1,0,0,114,26,2,0,0,114,63,1,0,0,114,46, - 2,0,0,114,222,1,0,0,114,30,0,0,0,114,28,0, - 0,0,114,10,0,0,0,114,11,2,0,0,114,11,2,0, - 0,19,6,0,0,115,60,0,0,0,132,0,241,4,5,5, - 8,242,14,15,5,41,242,34,2,5,30,242,8,3,5,72, - 1,243,10,49,5,20,242,102,1,29,5,71,1,240,62,0, - 6,17,241,2,15,5,40,243,3,0,6,17,240,2,15,5, - 40,243,34,1,5,44,114,28,0,0,0,114,11,2,0,0, - 99,4,0,0,0,0,0,0,0,0,0,0,0,5,0,0, - 0,3,0,0,0,243,50,1,0,0,151,0,124,0,106,1, + 104,111,111,107,46,60,108,111,99,97,108,115,62,46,112,97, + 116,104,95,104,111,111,107,95,102,111,114,95,70,105,108,101, + 70,105,110,100,101,114,149,6,0,0,115,41,0,0,0,248, + 128,0,228,19,30,152,116,212,19,36,220,22,33,208,34,66, + 200,20,212,22,78,208,16,78,217,19,22,144,116,208,19,45, + 152,110,210,19,45,208,12,45,114,28,0,0,0,114,30,0, + 0,0,41,3,114,50,1,0,0,114,20,2,0,0,114,46, + 2,0,0,115,3,0,0,0,96,96,32,114,10,0,0,0, + 218,9,112,97,116,104,95,104,111,111,107,122,20,70,105,108, + 101,70,105,110,100,101,114,46,112,97,116,104,95,104,111,111, + 107,139,6,0,0,115,16,0,0,0,249,128,0,245,20,4, + 9,46,240,12,0,16,40,208,8,39,114,28,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,34,0,0,0,151,0,100,1,124,0,106, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,100,1,171,1,0,0,0,0,0,0,125,4,124,0, - 106,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,100,2,171,1,0,0,0,0,0,0,125,5, - 124,4,115,45,124,5,114,13,124,5,106,2,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,125,4, - 110,30,124,2,124,3,107,40,0,0,114,13,116,5,0,0, - 0,0,0,0,0,0,124,1,124,2,171,2,0,0,0,0, - 0,0,125,4,110,12,116,7,0,0,0,0,0,0,0,0, - 124,1,124,2,171,2,0,0,0,0,0,0,125,4,124,5, - 115,32,116,9,0,0,0,0,0,0,0,0,124,1,124,2, - 124,4,172,3,171,3,0,0,0,0,0,0,125,5,124,3, - 114,16,116,11,0,0,0,0,0,0,0,0,124,3,171,1, - 0,0,0,0,0,0,124,5,95,6,0,0,0,0,0,0, - 0,0,9,0,124,5,124,0,100,2,60,0,0,0,124,4, - 124,0,100,1,60,0,0,0,124,2,124,0,100,4,60,0, - 0,0,124,3,124,0,100,5,60,0,0,0,121,0,35,0, - 116,14,0,0,0,0,0,0,0,0,36,0,114,3,1,0, - 89,0,121,0,119,0,120,3,89,0,119,1,41,6,78,114, - 22,1,0,0,114,23,1,0,0,41,1,114,4,1,0,0, - 218,8,95,95,102,105,108,101,95,95,218,10,95,95,99,97, - 99,104,101,100,95,95,41,8,114,26,1,0,0,114,4,1, - 0,0,114,163,1,0,0,114,150,1,0,0,114,20,1,0, - 0,114,105,0,0,0,218,6,99,97,99,104,101,100,218,9, - 69,120,99,101,112,116,105,111,110,41,6,218,2,110,115,114, - 187,0,0,0,218,8,112,97,116,104,110,97,109,101,218,9, - 99,112,97,116,104,110,97,109,101,114,4,1,0,0,114,16, - 1,0,0,115,6,0,0,0,32,32,32,32,32,32,114,10, - 0,0,0,218,14,95,102,105,120,95,117,112,95,109,111,100, - 117,108,101,114,56,2,0,0,160,6,0,0,115,170,0,0, - 0,128,0,224,13,15,143,86,137,86,144,76,211,13,33,128, - 70,216,11,13,143,54,137,54,144,42,211,11,29,128,68,217, - 11,17,217,11,15,216,21,25,151,91,145,91,137,70,216,13, - 21,152,25,210,13,34,220,21,41,168,36,176,8,211,21,57, - 137,70,228,21,37,160,100,168,72,211,21,53,136,70,217,11, - 15,220,15,38,160,116,168,88,184,102,212,15,69,136,4,217, - 11,20,220,26,39,168,9,211,26,50,136,68,140,75,240,2, - 7,5,13,216,25,29,136,2,136,58,137,14,216,27,33,136, - 2,136,60,209,8,24,216,25,33,136,2,136,58,137,14,216, - 27,36,136,2,136,60,210,8,24,248,220,11,20,242,0,2, - 5,13,225,8,12,240,5,2,5,13,250,115,18,0,0,0, - 193,53,20,66,10,0,194,10,9,66,22,3,194,21,1,66, - 22,3,99,0,0,0,0,0,0,0,0,0,0,0,0,3, - 0,0,0,3,0,0,0,243,112,0,0,0,151,0,116,0, - 0,0,0,0,0,0,0,0,116,3,0,0,0,0,0,0, - 0,0,106,4,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,171,0,0,0,0,0,0,0,102,2, - 125,0,116,6,0,0,0,0,0,0,0,0,116,8,0,0, - 0,0,0,0,0,0,102,2,125,1,116,10,0,0,0,0, - 0,0,0,0,116,12,0,0,0,0,0,0,0,0,102,2, - 125,2,124,0,124,1,124,2,103,3,83,0,41,1,122,95, - 82,101,116,117,114,110,115,32,97,32,108,105,115,116,32,111, - 102,32,102,105,108,101,45,98,97,115,101,100,32,109,111,100, - 117,108,101,32,108,111,97,100,101,114,115,46,10,10,32,32, - 32,32,69,97,99,104,32,105,116,101,109,32,105,115,32,97, - 32,116,117,112,108,101,32,40,108,111,97,100,101,114,44,32, - 115,117,102,102,105,120,101,115,41,46,10,32,32,32,32,41, - 7,114,141,1,0,0,114,234,0,0,0,218,18,101,120,116, - 101,110,115,105,111,110,95,115,117,102,102,105,120,101,115,114, - 150,1,0,0,114,159,0,0,0,114,163,1,0,0,114,140, - 0,0,0,41,3,218,10,101,120,116,101,110,115,105,111,110, - 115,218,6,115,111,117,114,99,101,218,8,98,121,116,101,99, - 111,100,101,115,3,0,0,0,32,32,32,114,10,0,0,0, - 114,13,1,0,0,114,13,1,0,0,185,6,0,0,115,57, - 0,0,0,128,0,244,10,0,18,37,164,100,215,38,61,209, - 38,61,211,38,63,208,17,63,128,74,220,13,29,156,127,208, - 13,46,128,70,220,15,35,212,37,54,208,15,54,128,72,216, - 12,22,152,6,160,8,208,11,41,208,4,41,114,28,0,0, - 0,99,1,0,0,0,0,0,0,0,0,0,0,0,1,0, - 0,0,3,0,0,0,243,8,0,0,0,151,0,124,0,97, - 0,121,0,114,77,0,0,0,41,1,114,207,0,0,0,41, - 1,218,17,95,98,111,111,116,115,116,114,97,112,95,109,111, - 100,117,108,101,115,1,0,0,0,32,114,10,0,0,0,218, - 21,95,115,101,116,95,98,111,111,116,115,116,114,97,112,95, - 109,111,100,117,108,101,114,64,2,0,0,196,6,0,0,115, - 7,0,0,0,128,0,224,17,34,129,74,114,28,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,212,0,0,0,151,0,116,1,0,0, - 0,0,0,0,0,0,124,0,171,1,0,0,0,0,0,0, - 1,0,116,3,0,0,0,0,0,0,0,0,171,0,0,0, - 0,0,0,0,125,1,116,4,0,0,0,0,0,0,0,0, - 106,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,106,9,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,116,11,0,0,0,0,0,0, - 0,0,106,12,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,124,1,142,0,103,1,171,1,0,0, - 0,0,0,0,1,0,116,4,0,0,0,0,0,0,0,0, - 106,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,106,17,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,116,18,0,0,0,0,0,0, - 0,0,171,1,0,0,0,0,0,0,1,0,121,1,41,2, - 122,41,73,110,115,116,97,108,108,32,116,104,101,32,112,97, - 116,104,45,98,97,115,101,100,32,105,109,112,111,114,116,32, - 99,111,109,112,111,110,101,110,116,115,46,78,41,10,114,64, - 2,0,0,114,13,1,0,0,114,20,0,0,0,114,248,1, - 0,0,114,240,0,0,0,114,11,2,0,0,114,46,2,0, - 0,218,9,109,101,116,97,95,112,97,116,104,114,64,0,0, - 0,114,240,1,0,0,41,2,114,63,2,0,0,218,17,115, - 117,112,112,111,114,116,101,100,95,108,111,97,100,101,114,115, - 115,2,0,0,0,32,32,114,10,0,0,0,218,8,95,105, - 110,115,116,97,108,108,114,68,2,0,0,201,6,0,0,115, - 71,0,0,0,128,0,228,4,25,208,26,43,212,4,44,220, - 24,51,211,24,53,208,4,21,220,4,7,135,78,129,78,215, - 4,25,209,4,25,156,58,215,27,47,209,27,47,208,49,66, - 208,27,67,208,26,68,212,4,69,220,4,7,135,77,129,77, - 215,4,24,209,4,24,156,26,213,4,36,114,28,0,0,0, - 41,1,114,107,0,0,0,114,77,0,0,0,41,3,78,78, - 78,41,2,114,1,0,0,0,114,1,0,0,0,41,1,84, - 41,87,114,198,0,0,0,114,207,0,0,0,114,234,0,0, - 0,114,114,0,0,0,114,20,0,0,0,114,126,0,0,0, - 114,230,0,0,0,114,31,0,0,0,114,60,1,0,0,218, - 2,110,116,114,23,0,0,0,114,36,1,0,0,218,5,112, - 111,115,105,120,114,61,0,0,0,218,3,97,108,108,114,62, - 0,0,0,114,179,0,0,0,114,58,0,0,0,114,65,0, - 0,0,218,20,95,112,97,116,104,115,101,112,115,95,119,105, - 116,104,95,99,111,108,111,110,114,34,0,0,0,218,37,95, - 67,65,83,69,95,73,78,83,69,78,83,73,84,73,86,69, - 95,80,76,65,84,70,79,82,77,83,95,66,89,84,69,83, - 95,75,69,89,114,33,0,0,0,114,35,0,0,0,114,27, - 0,0,0,114,43,0,0,0,114,49,0,0,0,114,53,0, - 0,0,114,72,0,0,0,114,81,0,0,0,114,85,0,0, - 0,114,91,0,0,0,114,93,0,0,0,114,96,0,0,0, - 114,100,0,0,0,114,105,0,0,0,114,121,0,0,0,218, - 4,116,121,112,101,218,8,95,95,99,111,100,101,95,95,114, - 233,0,0,0,114,41,0,0,0,114,214,0,0,0,114,40, - 0,0,0,114,46,0,0,0,114,111,1,0,0,114,143,0, - 0,0,114,139,0,0,0,114,159,0,0,0,114,64,0,0, - 0,114,58,2,0,0,114,61,1,0,0,114,140,0,0,0, - 218,23,68,69,66,85,71,95,66,89,84,69,67,79,68,69, - 95,83,85,70,70,73,88,69,83,218,27,79,80,84,73,77, - 73,90,69,68,95,66,89,84,69,67,79,68,69,95,83,85, - 70,70,73,88,69,83,114,152,0,0,0,114,167,0,0,0, - 114,177,0,0,0,114,180,0,0,0,114,183,0,0,0,114, - 208,0,0,0,114,219,0,0,0,114,224,0,0,0,114,227, - 0,0,0,114,237,0,0,0,114,243,0,0,0,114,246,0, - 0,0,114,2,1,0,0,114,25,1,0,0,114,14,1,0, - 0,114,20,1,0,0,114,32,1,0,0,114,34,1,0,0, - 114,65,1,0,0,114,86,1,0,0,114,119,1,0,0,114, - 150,1,0,0,114,163,1,0,0,114,141,1,0,0,114,185, - 1,0,0,114,229,1,0,0,218,16,95,78,97,109,101,115, - 112,97,99,101,76,111,97,100,101,114,114,240,1,0,0,114, - 11,2,0,0,114,56,2,0,0,114,13,1,0,0,114,64, - 2,0,0,114,68,2,0,0,41,1,218,1,115,115,1,0, - 0,0,48,114,10,0,0,0,250,8,60,109,111,100,117,108, - 101,62,114,80,2,0,0,1,0,0,0,115,191,2,0,0, - 240,3,1,1,1,241,2,7,1,4,240,44,0,14,18,128, - 10,243,6,0,1,12,219,0,10,219,0,10,219,0,16,219, - 0,14,240,6,0,16,19,143,124,137,124,152,119,209,15,38, - 128,11,217,3,14,219,4,20,220,4,17,227,4,23,241,6, - 0,4,15,216,23,27,152,83,144,107,129,79,224,23,26,144, - 101,128,79,225,7,10,209,10,52,160,79,212,10,52,212,7, - 52,209,0,52,216,11,26,152,49,209,11,29,128,8,217,17, + 0,0,0,155,2,100,2,157,3,83,0,41,3,78,122,11, + 70,105,108,101,70,105,110,100,101,114,40,114,221,1,0,0, + 114,84,0,0,0,114,131,1,0,0,115,1,0,0,0,32, + 114,10,0,0,0,114,222,1,0,0,122,19,70,105,108,101, + 70,105,110,100,101,114,46,95,95,114,101,112,114,95,95,157, + 6,0,0,115,21,0,0,0,128,0,216,17,28,152,84,159, + 89,153,89,152,77,168,17,208,15,43,208,8,43,114,28,0, + 0,0,114,77,0,0,0,41,12,114,196,0,0,0,114,195, + 0,0,0,114,197,0,0,0,114,198,0,0,0,114,67,1, + 0,0,114,242,1,0,0,114,7,2,0,0,114,58,1,0, + 0,114,27,2,0,0,114,63,1,0,0,114,47,2,0,0, + 114,222,1,0,0,114,30,0,0,0,114,28,0,0,0,114, + 10,0,0,0,114,12,2,0,0,114,12,2,0,0,22,6, + 0,0,115,60,0,0,0,132,0,241,4,5,5,8,242,14, + 15,5,41,242,34,2,5,30,242,8,3,5,72,1,243,10, + 49,5,20,242,102,1,29,5,71,1,240,62,0,6,17,241, + 2,15,5,40,243,3,0,6,17,240,2,15,5,40,243,34, + 1,5,44,114,28,0,0,0,114,12,2,0,0,99,4,0, + 0,0,0,0,0,0,0,0,0,0,5,0,0,0,3,0, + 0,0,243,50,1,0,0,151,0,124,0,106,1,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,100, + 1,171,1,0,0,0,0,0,0,125,4,124,0,106,1,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,100,2,171,1,0,0,0,0,0,0,125,5,124,4,115, + 45,124,5,114,13,124,5,106,2,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,125,4,110,30,124, + 2,124,3,107,40,0,0,114,13,116,5,0,0,0,0,0, + 0,0,0,124,1,124,2,171,2,0,0,0,0,0,0,125, + 4,110,12,116,7,0,0,0,0,0,0,0,0,124,1,124, + 2,171,2,0,0,0,0,0,0,125,4,124,5,115,32,116, + 9,0,0,0,0,0,0,0,0,124,1,124,2,124,4,172, + 3,171,3,0,0,0,0,0,0,125,5,124,3,114,16,116, + 11,0,0,0,0,0,0,0,0,124,3,171,1,0,0,0, + 0,0,0,124,5,95,6,0,0,0,0,0,0,0,0,9, + 0,124,5,124,0,100,2,60,0,0,0,124,4,124,0,100, + 1,60,0,0,0,124,2,124,0,100,4,60,0,0,0,124, + 3,124,0,100,5,60,0,0,0,121,0,35,0,116,14,0, + 0,0,0,0,0,0,0,36,0,114,3,1,0,89,0,121, + 0,119,0,120,3,89,0,119,1,41,6,78,114,22,1,0, + 0,114,23,1,0,0,41,1,114,4,1,0,0,218,8,95, + 95,102,105,108,101,95,95,218,10,95,95,99,97,99,104,101, + 100,95,95,41,8,114,26,1,0,0,114,4,1,0,0,114, + 163,1,0,0,114,150,1,0,0,114,20,1,0,0,114,105, + 0,0,0,218,6,99,97,99,104,101,100,218,9,69,120,99, + 101,112,116,105,111,110,41,6,218,2,110,115,114,187,0,0, + 0,218,8,112,97,116,104,110,97,109,101,218,9,99,112,97, + 116,104,110,97,109,101,114,4,1,0,0,114,16,1,0,0, + 115,6,0,0,0,32,32,32,32,32,32,114,10,0,0,0, + 218,14,95,102,105,120,95,117,112,95,109,111,100,117,108,101, + 114,57,2,0,0,163,6,0,0,115,170,0,0,0,128,0, + 224,13,15,143,86,137,86,144,76,211,13,33,128,70,216,11, + 13,143,54,137,54,144,42,211,11,29,128,68,217,11,17,217, + 11,15,216,21,25,151,91,145,91,137,70,216,13,21,152,25, + 210,13,34,220,21,41,168,36,176,8,211,21,57,137,70,228, + 21,37,160,100,168,72,211,21,53,136,70,217,11,15,220,15, + 38,160,116,168,88,184,102,212,15,69,136,4,217,11,20,220, + 26,39,168,9,211,26,50,136,68,140,75,240,2,7,5,13, + 216,25,29,136,2,136,58,137,14,216,27,33,136,2,136,60, + 209,8,24,216,25,33,136,2,136,58,137,14,216,27,36,136, + 2,136,60,210,8,24,248,220,11,20,242,0,2,5,13,225, + 8,12,240,5,2,5,13,250,115,18,0,0,0,193,53,20, + 66,10,0,194,10,9,66,22,3,194,21,1,66,22,3,99, + 0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0, + 3,0,0,0,243,112,0,0,0,151,0,116,0,0,0,0, + 0,0,0,0,0,116,3,0,0,0,0,0,0,0,0,106, + 4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,171,0,0,0,0,0,0,0,102,2,125,0,116, + 6,0,0,0,0,0,0,0,0,116,8,0,0,0,0,0, + 0,0,0,102,2,125,1,116,10,0,0,0,0,0,0,0, + 0,116,12,0,0,0,0,0,0,0,0,102,2,125,2,124, + 0,124,1,124,2,103,3,83,0,41,1,122,95,82,101,116, + 117,114,110,115,32,97,32,108,105,115,116,32,111,102,32,102, + 105,108,101,45,98,97,115,101,100,32,109,111,100,117,108,101, + 32,108,111,97,100,101,114,115,46,10,10,32,32,32,32,69, + 97,99,104,32,105,116,101,109,32,105,115,32,97,32,116,117, + 112,108,101,32,40,108,111,97,100,101,114,44,32,115,117,102, + 102,105,120,101,115,41,46,10,32,32,32,32,41,7,114,141, + 1,0,0,114,234,0,0,0,218,18,101,120,116,101,110,115, + 105,111,110,95,115,117,102,102,105,120,101,115,114,150,1,0, + 0,114,159,0,0,0,114,163,1,0,0,114,140,0,0,0, + 41,3,218,10,101,120,116,101,110,115,105,111,110,115,218,6, + 115,111,117,114,99,101,218,8,98,121,116,101,99,111,100,101, + 115,3,0,0,0,32,32,32,114,10,0,0,0,114,13,1, + 0,0,114,13,1,0,0,188,6,0,0,115,57,0,0,0, + 128,0,244,10,0,18,37,164,100,215,38,61,209,38,61,211, + 38,63,208,17,63,128,74,220,13,29,156,127,208,13,46,128, + 70,220,15,35,212,37,54,208,15,54,128,72,216,12,22,152, + 6,160,8,208,11,41,208,4,41,114,28,0,0,0,99,1, + 0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,3, + 0,0,0,243,8,0,0,0,151,0,124,0,97,0,121,0, + 114,77,0,0,0,41,1,114,207,0,0,0,41,1,218,17, + 95,98,111,111,116,115,116,114,97,112,95,109,111,100,117,108, + 101,115,1,0,0,0,32,114,10,0,0,0,218,21,95,115, + 101,116,95,98,111,111,116,115,116,114,97,112,95,109,111,100, + 117,108,101,114,65,2,0,0,199,6,0,0,115,7,0,0, + 0,128,0,224,17,34,129,74,114,28,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,212,0,0,0,151,0,116,1,0,0,0,0,0, + 0,0,0,124,0,171,1,0,0,0,0,0,0,1,0,116, + 3,0,0,0,0,0,0,0,0,171,0,0,0,0,0,0, + 0,125,1,116,4,0,0,0,0,0,0,0,0,106,6,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,106,9,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,116,11,0,0,0,0,0,0,0,0,106, + 12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,124,1,142,0,103,1,171,1,0,0,0,0,0, + 0,1,0,116,4,0,0,0,0,0,0,0,0,106,14,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,106,17,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,116,18,0,0,0,0,0,0,0,0,171, + 1,0,0,0,0,0,0,1,0,121,1,41,2,122,41,73, + 110,115,116,97,108,108,32,116,104,101,32,112,97,116,104,45, + 98,97,115,101,100,32,105,109,112,111,114,116,32,99,111,109, + 112,111,110,101,110,116,115,46,78,41,10,114,65,2,0,0, + 114,13,1,0,0,114,20,0,0,0,114,251,1,0,0,114, + 240,0,0,0,114,12,2,0,0,114,47,2,0,0,218,9, + 109,101,116,97,95,112,97,116,104,114,64,0,0,0,114,240, + 1,0,0,41,2,114,64,2,0,0,218,17,115,117,112,112, + 111,114,116,101,100,95,108,111,97,100,101,114,115,115,2,0, + 0,0,32,32,114,10,0,0,0,218,8,95,105,110,115,116, + 97,108,108,114,69,2,0,0,204,6,0,0,115,71,0,0, + 0,128,0,228,4,25,208,26,43,212,4,44,220,24,51,211, + 24,53,208,4,21,220,4,7,135,78,129,78,215,4,25,209, + 4,25,156,58,215,27,47,209,27,47,208,49,66,208,27,67, + 208,26,68,212,4,69,220,4,7,135,77,129,77,215,4,24, + 209,4,24,156,26,213,4,36,114,28,0,0,0,41,1,114, + 107,0,0,0,114,77,0,0,0,41,3,78,78,78,41,2, + 114,1,0,0,0,114,1,0,0,0,41,1,84,41,87,114, + 198,0,0,0,114,207,0,0,0,114,234,0,0,0,114,114, + 0,0,0,114,20,0,0,0,114,126,0,0,0,114,230,0, + 0,0,114,31,0,0,0,114,60,1,0,0,218,2,110,116, + 114,23,0,0,0,114,36,1,0,0,218,5,112,111,115,105, + 120,114,61,0,0,0,218,3,97,108,108,114,62,0,0,0, + 114,179,0,0,0,114,58,0,0,0,114,65,0,0,0,218, + 20,95,112,97,116,104,115,101,112,115,95,119,105,116,104,95, + 99,111,108,111,110,114,34,0,0,0,218,37,95,67,65,83, + 69,95,73,78,83,69,78,83,73,84,73,86,69,95,80,76, + 65,84,70,79,82,77,83,95,66,89,84,69,83,95,75,69, + 89,114,33,0,0,0,114,35,0,0,0,114,27,0,0,0, + 114,43,0,0,0,114,49,0,0,0,114,53,0,0,0,114, + 72,0,0,0,114,81,0,0,0,114,85,0,0,0,114,91, + 0,0,0,114,93,0,0,0,114,96,0,0,0,114,100,0, + 0,0,114,105,0,0,0,114,121,0,0,0,218,4,116,121, + 112,101,218,8,95,95,99,111,100,101,95,95,114,233,0,0, + 0,114,41,0,0,0,114,214,0,0,0,114,40,0,0,0, + 114,46,0,0,0,114,111,1,0,0,114,143,0,0,0,114, + 139,0,0,0,114,159,0,0,0,114,64,0,0,0,114,59, + 2,0,0,114,61,1,0,0,114,140,0,0,0,218,23,68, + 69,66,85,71,95,66,89,84,69,67,79,68,69,95,83,85, + 70,70,73,88,69,83,218,27,79,80,84,73,77,73,90,69, + 68,95,66,89,84,69,67,79,68,69,95,83,85,70,70,73, + 88,69,83,114,152,0,0,0,114,167,0,0,0,114,177,0, + 0,0,114,180,0,0,0,114,183,0,0,0,114,208,0,0, + 0,114,219,0,0,0,114,224,0,0,0,114,227,0,0,0, + 114,237,0,0,0,114,243,0,0,0,114,246,0,0,0,114, + 2,1,0,0,114,25,1,0,0,114,14,1,0,0,114,20, + 1,0,0,114,32,1,0,0,114,34,1,0,0,114,65,1, + 0,0,114,86,1,0,0,114,119,1,0,0,114,150,1,0, + 0,114,163,1,0,0,114,141,1,0,0,114,185,1,0,0, + 114,229,1,0,0,218,16,95,78,97,109,101,115,112,97,99, + 101,76,111,97,100,101,114,114,240,1,0,0,114,12,2,0, + 0,114,57,2,0,0,114,13,1,0,0,114,65,2,0,0, + 114,69,2,0,0,41,1,218,1,115,115,1,0,0,0,48, + 114,10,0,0,0,250,8,60,109,111,100,117,108,101,62,114, + 81,2,0,0,1,0,0,0,115,194,2,0,0,240,3,1, + 1,1,241,2,7,1,4,240,44,0,14,18,128,10,243,6, + 0,1,12,219,0,10,219,0,10,219,0,16,219,0,14,240, + 6,0,16,19,143,124,137,124,152,119,209,15,38,128,11,217, + 3,14,219,4,20,220,4,17,227,4,23,241,6,0,4,15, + 216,23,27,152,83,144,107,129,79,224,23,26,144,101,128,79, + 225,7,10,209,10,52,160,79,212,10,52,212,7,52,208,0, + 52,208,7,52,216,11,26,152,49,209,11,29,128,8,217,17, 22,144,127,211,17,39,128,14,216,18,20,151,39,145,39,152, 47,211,18,42,128,15,216,41,56,214,23,57,160,65,152,33, 152,65,152,51,154,7,210,23,57,208,0,20,240,8,0,39, @@ -3837,9 +3843,9 @@ const unsigned char _Py_M__importlib__bootstrap_external[] = { 152,58,160,125,244,0,22,1,20,244,50,50,1,25,152,42, 160,109,244,0,50,1,25,247,106,1,65,1,1,32,241,0, 65,1,1,32,247,78,2,33,1,43,241,0,33,1,43,240, - 74,1,0,20,35,208,0,16,247,10,118,1,1,70,1,241, - 0,118,1,1,70,1,247,114,3,72,2,1,44,241,0,72, + 74,1,0,20,35,208,0,16,247,10,121,1,1,70,1,241, + 0,121,1,1,70,1,247,120,3,72,2,1,44,241,0,72, 2,1,44,243,90,4,22,1,13,242,50,8,1,42,242,22, - 2,1,35,243,10,5,1,37,249,242,111,52,0,24,58,115, + 2,1,35,243,10,5,1,37,249,242,117,52,0,24,58,115, 6,0,0,0,193,52,12,71,55,4, }; diff --git a/contrib/tools/python3/Python/frozen_modules/importlib.util.h b/contrib/tools/python3/Python/frozen_modules/importlib.util.h index 22663178b9..e519c432bb 100644 --- a/contrib/tools/python3/Python/frozen_modules/importlib.util.h +++ b/contrib/tools/python3/Python/frozen_modules/importlib.util.h @@ -1,7 +1,7 @@ /* Auto-generated by Programs/_freeze_module.py */ const unsigned char _Py_M__importlib_util[] = { 227,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0, - 0,0,0,0,0,243,20,1,0,0,151,0,100,0,90,0, + 0,0,0,0,0,243,28,1,0,0,151,0,100,0,90,0, 100,1,100,2,108,1,109,2,90,2,1,0,100,1,100,3, 108,3,109,4,90,4,1,0,100,1,100,4,108,3,109,5, 90,5,1,0,100,1,100,5,108,3,109,6,90,6,1,0, @@ -11,695 +11,727 @@ const unsigned char _Py_M__importlib_util[] = { 100,1,100,10,108,8,109,12,90,12,1,0,100,1,100,11, 108,8,109,13,90,13,1,0,100,1,100,12,108,8,109,14, 90,14,1,0,100,13,100,14,108,15,90,15,100,13,100,14, - 108,16,90,16,100,13,100,14,108,17,90,17,100,15,132,0, - 90,18,100,16,132,0,90,19,100,25,100,17,132,1,90,20, - 100,25,100,18,132,1,90,21,2,0,71,0,100,19,132,0, - 100,20,171,2,0,0,0,0,0,0,90,22,2,0,71,0, - 100,21,132,0,100,22,101,17,106,46,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,171,3,0,0, - 0,0,0,0,90,24,2,0,71,0,100,23,132,0,100,24, - 101,2,171,3,0,0,0,0,0,0,90,25,121,14,41,26, - 122,45,85,116,105,108,105,116,121,32,99,111,100,101,32,102, - 111,114,32,99,111,110,115,116,114,117,99,116,105,110,103,32, - 105,109,112,111,114,116,101,114,115,44,32,101,116,99,46,233, - 1,0,0,0,41,1,218,6,76,111,97,100,101,114,41,1, - 218,16,109,111,100,117,108,101,95,102,114,111,109,95,115,112, - 101,99,41,1,218,13,95,114,101,115,111,108,118,101,95,110, - 97,109,101,41,1,218,16,115,112,101,99,95,102,114,111,109, - 95,108,111,97,100,101,114,41,1,218,10,95,102,105,110,100, - 95,115,112,101,99,41,1,218,12,77,65,71,73,67,95,78, - 85,77,66,69,82,41,1,218,17,95,82,65,87,95,77,65, - 71,73,67,95,78,85,77,66,69,82,41,1,218,17,99,97, - 99,104,101,95,102,114,111,109,95,115,111,117,114,99,101,41, - 1,218,13,100,101,99,111,100,101,95,115,111,117,114,99,101, - 41,1,218,17,115,111,117,114,99,101,95,102,114,111,109,95, - 99,97,99,104,101,41,1,218,23,115,112,101,99,95,102,114, - 111,109,95,102,105,108,101,95,108,111,99,97,116,105,111,110, - 233,0,0,0,0,78,99,1,0,0,0,0,0,0,0,0, - 0,0,0,4,0,0,0,3,0,0,0,243,54,0,0,0, - 151,0,116,1,0,0,0,0,0,0,0,0,106,2,0,0, + 108,16,90,16,100,13,100,14,108,17,90,17,100,13,100,14, + 108,18,90,18,100,15,132,0,90,19,100,16,132,0,90,20, + 100,25,100,17,132,1,90,21,100,25,100,18,132,1,90,22, + 2,0,71,0,100,19,132,0,100,20,171,2,0,0,0,0, + 0,0,90,23,2,0,71,0,100,21,132,0,100,22,101,18, + 106,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,171,3,0,0,0,0,0,0,90,25,2,0, + 71,0,100,23,132,0,100,24,101,2,171,3,0,0,0,0, + 0,0,90,26,121,14,41,26,122,45,85,116,105,108,105,116, + 121,32,99,111,100,101,32,102,111,114,32,99,111,110,115,116, + 114,117,99,116,105,110,103,32,105,109,112,111,114,116,101,114, + 115,44,32,101,116,99,46,233,1,0,0,0,41,1,218,6, + 76,111,97,100,101,114,41,1,218,16,109,111,100,117,108,101, + 95,102,114,111,109,95,115,112,101,99,41,1,218,13,95,114, + 101,115,111,108,118,101,95,110,97,109,101,41,1,218,16,115, + 112,101,99,95,102,114,111,109,95,108,111,97,100,101,114,41, + 1,218,10,95,102,105,110,100,95,115,112,101,99,41,1,218, + 12,77,65,71,73,67,95,78,85,77,66,69,82,41,1,218, + 17,95,82,65,87,95,77,65,71,73,67,95,78,85,77,66, + 69,82,41,1,218,17,99,97,99,104,101,95,102,114,111,109, + 95,115,111,117,114,99,101,41,1,218,13,100,101,99,111,100, + 101,95,115,111,117,114,99,101,41,1,218,17,115,111,117,114, + 99,101,95,102,114,111,109,95,99,97,99,104,101,41,1,218, + 23,115,112,101,99,95,102,114,111,109,95,102,105,108,101,95, + 108,111,99,97,116,105,111,110,233,0,0,0,0,78,99,1, + 0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,3, + 0,0,0,243,54,0,0,0,151,0,116,1,0,0,0,0, + 0,0,0,0,106,2,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,116,4,0,0,0,0,0,0, + 0,0,124,0,171,2,0,0,0,0,0,0,83,0,41,1, + 122,66,82,101,116,117,114,110,32,116,104,101,32,104,97,115, + 104,32,111,102,32,42,115,111,117,114,99,101,95,98,121,116, + 101,115,42,32,97,115,32,117,115,101,100,32,105,110,32,104, + 97,115,104,45,98,97,115,101,100,32,112,121,99,32,102,105, + 108,101,115,46,41,3,218,4,95,105,109,112,218,11,115,111, + 117,114,99,101,95,104,97,115,104,114,9,0,0,0,41,1, + 218,12,115,111,117,114,99,101,95,98,121,116,101,115,115,1, + 0,0,0,32,250,23,60,102,114,111,122,101,110,32,105,109, + 112,111,114,116,108,105,98,46,117,116,105,108,62,114,17,0, + 0,0,114,17,0,0,0,20,0,0,0,115,22,0,0,0, + 128,0,228,11,15,215,11,27,209,11,27,212,28,45,168,124, + 211,11,60,208,4,60,243,0,0,0,0,99,2,0,0,0, + 0,0,0,0,0,0,0,0,6,0,0,0,3,0,0,0, + 243,166,0,0,0,151,0,124,0,106,1,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,100,1,171, + 1,0,0,0,0,0,0,115,2,124,0,83,0,124,1,115, + 24,116,3,0,0,0,0,0,0,0,0,100,2,116,5,0, + 0,0,0,0,0,0,0,124,0,171,1,0,0,0,0,0, + 0,155,0,100,3,157,3,171,1,0,0,0,0,0,0,130, + 1,100,4,125,2,124,0,68,0,93,14,0,0,125,3,124, + 3,100,1,107,55,0,0,114,2,1,0,110,7,124,2,100, + 5,122,13,0,0,125,2,140,16,4,0,116,7,0,0,0, + 0,0,0,0,0,124,0,124,2,100,6,26,0,124,1,124, + 2,171,3,0,0,0,0,0,0,83,0,41,7,122,50,82, + 101,115,111,108,118,101,32,97,32,114,101,108,97,116,105,118, + 101,32,109,111,100,117,108,101,32,110,97,109,101,32,116,111, + 32,97,110,32,97,98,115,111,108,117,116,101,32,111,110,101, + 46,250,1,46,122,25,110,111,32,112,97,99,107,97,103,101, + 32,115,112,101,99,105,102,105,101,100,32,102,111,114,32,122, + 37,32,40,114,101,113,117,105,114,101,100,32,102,111,114,32, + 114,101,108,97,116,105,118,101,32,109,111,100,117,108,101,32, + 110,97,109,101,115,41,114,14,0,0,0,114,2,0,0,0, + 78,41,4,218,10,115,116,97,114,116,115,119,105,116,104,218, + 11,73,109,112,111,114,116,69,114,114,111,114,218,4,114,101, + 112,114,114,5,0,0,0,41,4,218,4,110,97,109,101,218, + 7,112,97,99,107,97,103,101,218,5,108,101,118,101,108,218, + 9,99,104,97,114,97,99,116,101,114,115,4,0,0,0,32, + 32,32,32,114,19,0,0,0,218,12,114,101,115,111,108,118, + 101,95,110,97,109,101,114,30,0,0,0,25,0,0,0,115, + 124,0,0,0,128,0,224,11,15,143,63,137,63,152,51,212, + 11,31,216,15,19,136,11,217,13,20,220,14,25,208,28,53, + 180,100,184,52,179,106,176,92,240,0,1,66,1,65,1,240, + 0,1,27,65,1,243,0,1,15,66,1,240,0,1,9,66, + 1,224,12,13,128,69,216,21,25,242,0,3,5,19,136,9, + 216,11,20,152,3,210,11,27,217,12,17,216,8,13,144,17, + 137,10,137,5,240,7,3,5,19,244,8,0,12,25,152,20, + 152,101,152,102,152,28,160,119,176,5,211,11,54,208,4,54, + 114,20,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,224,0,0,0,151, + 0,124,0,116,0,0,0,0,0,0,0,0,0,106,2,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 116,4,0,0,0,0,0,0,0,0,124,0,171,2,0,0, - 0,0,0,0,83,0,41,1,122,66,82,101,116,117,114,110, - 32,116,104,101,32,104,97,115,104,32,111,102,32,42,115,111, - 117,114,99,101,95,98,121,116,101,115,42,32,97,115,32,117, - 115,101,100,32,105,110,32,104,97,115,104,45,98,97,115,101, - 100,32,112,121,99,32,102,105,108,101,115,46,41,3,218,4, - 95,105,109,112,218,11,115,111,117,114,99,101,95,104,97,115, - 104,114,9,0,0,0,41,1,218,12,115,111,117,114,99,101, - 95,98,121,116,101,115,115,1,0,0,0,32,250,23,60,102, - 114,111,122,101,110,32,105,109,112,111,114,116,108,105,98,46, - 117,116,105,108,62,114,17,0,0,0,114,17,0,0,0,19, - 0,0,0,115,22,0,0,0,128,0,228,11,15,215,11,27, - 209,11,27,212,28,45,168,124,211,11,60,208,4,60,243,0, - 0,0,0,99,2,0,0,0,0,0,0,0,0,0,0,0, - 6,0,0,0,3,0,0,0,243,166,0,0,0,151,0,124, - 0,106,1,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,100,1,171,1,0,0,0,0,0,0,115, - 2,124,0,83,0,124,1,115,24,116,3,0,0,0,0,0, - 0,0,0,100,2,116,5,0,0,0,0,0,0,0,0,124, - 0,171,1,0,0,0,0,0,0,155,0,100,3,157,3,171, - 1,0,0,0,0,0,0,130,1,100,4,125,2,124,0,68, - 0,93,14,0,0,125,3,124,3,100,1,107,55,0,0,114, - 2,1,0,110,7,124,2,100,5,122,13,0,0,125,2,140, - 16,4,0,116,7,0,0,0,0,0,0,0,0,124,0,124, - 2,100,6,26,0,124,1,124,2,171,3,0,0,0,0,0, - 0,83,0,41,7,122,50,82,101,115,111,108,118,101,32,97, - 32,114,101,108,97,116,105,118,101,32,109,111,100,117,108,101, - 32,110,97,109,101,32,116,111,32,97,110,32,97,98,115,111, - 108,117,116,101,32,111,110,101,46,250,1,46,122,25,110,111, - 32,112,97,99,107,97,103,101,32,115,112,101,99,105,102,105, - 101,100,32,102,111,114,32,122,37,32,40,114,101,113,117,105, - 114,101,100,32,102,111,114,32,114,101,108,97,116,105,118,101, - 32,109,111,100,117,108,101,32,110,97,109,101,115,41,114,14, - 0,0,0,114,2,0,0,0,78,41,4,218,10,115,116,97, - 114,116,115,119,105,116,104,218,11,73,109,112,111,114,116,69, - 114,114,111,114,218,4,114,101,112,114,114,5,0,0,0,41, - 4,218,4,110,97,109,101,218,7,112,97,99,107,97,103,101, - 218,5,108,101,118,101,108,218,9,99,104,97,114,97,99,116, - 101,114,115,4,0,0,0,32,32,32,32,114,19,0,0,0, - 218,12,114,101,115,111,108,118,101,95,110,97,109,101,114,30, - 0,0,0,24,0,0,0,115,124,0,0,0,128,0,224,11, - 15,143,63,137,63,152,51,212,11,31,216,15,19,136,11,217, - 13,20,220,14,25,208,28,53,180,100,184,52,179,106,176,92, - 240,0,1,66,1,65,1,240,0,1,27,65,1,243,0,1, - 15,66,1,240,0,1,9,66,1,224,12,13,128,69,216,21, - 25,242,0,3,5,19,136,9,216,11,20,152,3,210,11,27, - 217,12,17,216,8,13,144,17,137,10,137,5,240,7,3,5, - 19,244,8,0,12,25,152,20,152,101,152,102,152,28,160,119, - 176,5,211,11,54,208,4,54,114,20,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,224,0,0,0,151,0,124,0,116,0,0,0,0, - 0,0,0,0,0,106,2,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,118,1,114,12,116,5,0, - 0,0,0,0,0,0,0,124,0,124,1,171,2,0,0,0, - 0,0,0,83,0,116,0,0,0,0,0,0,0,0,0,106, - 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,124,0,25,0,0,0,125,2,124,2,128,1,121, - 1,9,0,124,2,106,6,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,125,3,124,3,128,14,116, - 9,0,0,0,0,0,0,0,0,124,0,155,0,100,2,157, - 2,171,1,0,0,0,0,0,0,130,1,124,3,83,0,35, - 0,116,10,0,0,0,0,0,0,0,0,36,0,114,16,1, - 0,116,9,0,0,0,0,0,0,0,0,124,0,155,0,100, - 3,157,2,171,1,0,0,0,0,0,0,100,1,130,2,119, - 0,120,3,89,0,119,1,41,4,97,135,2,0,0,82,101, - 116,117,114,110,32,116,104,101,32,115,112,101,99,32,102,111, - 114,32,116,104,101,32,115,112,101,99,105,102,105,101,100,32, - 109,111,100,117,108,101,46,10,10,32,32,32,32,70,105,114, - 115,116,44,32,115,121,115,46,109,111,100,117,108,101,115,32, - 105,115,32,99,104,101,99,107,101,100,32,116,111,32,115,101, - 101,32,105,102,32,116,104,101,32,109,111,100,117,108,101,32, - 119,97,115,32,97,108,114,101,97,100,121,32,105,109,112,111, - 114,116,101,100,46,32,73,102,10,32,32,32,32,115,111,44, - 32,116,104,101,110,32,115,121,115,46,109,111,100,117,108,101, - 115,91,110,97,109,101,93,46,95,95,115,112,101,99,95,95, - 32,105,115,32,114,101,116,117,114,110,101,100,46,32,73,102, - 32,116,104,97,116,32,104,97,112,112,101,110,115,32,116,111, - 32,98,101,10,32,32,32,32,115,101,116,32,116,111,32,78, - 111,110,101,44,32,116,104,101,110,32,86,97,108,117,101,69, - 114,114,111,114,32,105,115,32,114,97,105,115,101,100,46,32, - 73,102,32,116,104,101,32,109,111,100,117,108,101,32,105,115, - 32,110,111,116,32,105,110,10,32,32,32,32,115,121,115,46, - 109,111,100,117,108,101,115,44,32,116,104,101,110,32,115,121, - 115,46,109,101,116,97,95,112,97,116,104,32,105,115,32,115, - 101,97,114,99,104,101,100,32,102,111,114,32,97,32,115,117, - 105,116,97,98,108,101,32,115,112,101,99,32,119,105,116,104, - 32,116,104,101,10,32,32,32,32,118,97,108,117,101,32,111, - 102,32,39,112,97,116,104,39,32,103,105,118,101,110,32,116, - 111,32,116,104,101,32,102,105,110,100,101,114,115,46,32,78, - 111,110,101,32,105,115,32,114,101,116,117,114,110,101,100,32, - 105,102,32,110,111,32,115,112,101,99,32,99,111,117,108,100, - 10,32,32,32,32,98,101,32,102,111,117,110,100,46,10,10, - 32,32,32,32,68,111,116,116,101,100,32,110,97,109,101,115, - 32,100,111,32,110,111,116,32,104,97,118,101,32,116,104,101, - 105,114,32,112,97,114,101,110,116,32,112,97,99,107,97,103, - 101,115,32,105,109,112,108,105,99,105,116,108,121,32,105,109, - 112,111,114,116,101,100,46,32,89,111,117,32,119,105,108,108, - 10,32,32,32,32,109,111,115,116,32,108,105,107,101,108,121, - 32,110,101,101,100,32,116,111,32,101,120,112,108,105,99,105, - 116,108,121,32,105,109,112,111,114,116,32,97,108,108,32,112, - 97,114,101,110,116,32,112,97,99,107,97,103,101,115,32,105, - 110,32,116,104,101,32,112,114,111,112,101,114,10,32,32,32, - 32,111,114,100,101,114,32,102,111,114,32,97,32,115,117,98, - 109,111,100,117,108,101,32,116,111,32,103,101,116,32,116,104, - 101,32,99,111,114,114,101,99,116,32,115,112,101,99,46,10, - 10,32,32,32,32,78,250,17,46,95,95,115,112,101,99,95, - 95,32,105,115,32,78,111,110,101,250,20,46,95,95,115,112, - 101,99,95,95,32,105,115,32,110,111,116,32,115,101,116,41, - 6,218,3,115,121,115,218,7,109,111,100,117,108,101,115,114, - 7,0,0,0,218,8,95,95,115,112,101,99,95,95,218,10, - 86,97,108,117,101,69,114,114,111,114,218,14,65,116,116,114, - 105,98,117,116,101,69,114,114,111,114,41,4,114,26,0,0, - 0,218,4,112,97,116,104,218,6,109,111,100,117,108,101,218, - 4,115,112,101,99,115,4,0,0,0,32,32,32,32,114,19, - 0,0,0,218,20,95,102,105,110,100,95,115,112,101,99,95, - 102,114,111,109,95,112,97,116,104,114,42,0,0,0,39,0, - 0,0,115,136,0,0,0,128,0,240,30,0,8,12,148,51, - 151,59,145,59,209,7,30,220,15,25,152,36,160,4,211,15, - 37,208,8,37,228,17,20,151,27,145,27,152,84,209,17,34, - 136,6,216,11,17,136,62,216,19,23,240,2,7,9,24,216, - 19,25,151,63,145,63,136,68,240,8,0,16,20,136,124,220, - 22,32,160,68,160,54,208,41,58,208,33,59,211,22,60,208, - 16,60,216,19,23,136,75,248,244,11,0,16,30,242,0,1, - 9,70,1,220,18,28,160,4,152,118,208,37,57,208,29,58, - 211,18,59,192,20,208,12,69,240,3,1,9,70,1,250,115, - 11,0,0,0,182,12,65,20,0,193,20,25,65,45,3,99, - 2,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0, - 3,0,0,0,243,208,1,0,0,151,0,124,0,106,1,0, + 0,118,1,114,12,116,5,0,0,0,0,0,0,0,0,124, + 0,124,1,171,2,0,0,0,0,0,0,83,0,116,0,0, + 0,0,0,0,0,0,0,106,2,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,124,0,25,0,0, + 0,125,2,124,2,128,1,121,1,9,0,124,2,106,6,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,100,1,171,1,0,0,0,0,0,0,114,12,116,3,0, - 0,0,0,0,0,0,0,124,0,124,1,171,2,0,0,0, - 0,0,0,110,1,124,0,125,2,124,2,116,4,0,0,0, - 0,0,0,0,0,106,6,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,118,1,114,64,124,2,106, - 9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,100,1,171,1,0,0,0,0,0,0,100,2,25, - 0,0,0,125,3,124,3,114,28,116,11,0,0,0,0,0, - 0,0,0,124,3,100,3,103,1,172,4,171,2,0,0,0, - 0,0,0,125,4,9,0,124,4,106,12,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,125,5,110, - 2,100,8,125,5,116,19,0,0,0,0,0,0,0,0,124, - 2,124,5,171,2,0,0,0,0,0,0,83,0,116,4,0, - 0,0,0,0,0,0,0,106,6,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,124,2,25,0,0, - 0,125,7,124,7,128,1,121,8,9,0,124,7,106,20,0, + 0,125,3,124,3,128,14,116,9,0,0,0,0,0,0,0, + 0,124,0,155,0,100,2,157,2,171,1,0,0,0,0,0, + 0,130,1,124,3,83,0,35,0,116,10,0,0,0,0,0, + 0,0,0,36,0,114,16,1,0,116,9,0,0,0,0,0, + 0,0,0,124,0,155,0,100,3,157,2,171,1,0,0,0, + 0,0,0,100,1,130,2,119,0,120,3,89,0,119,1,41, + 4,97,135,2,0,0,82,101,116,117,114,110,32,116,104,101, + 32,115,112,101,99,32,102,111,114,32,116,104,101,32,115,112, + 101,99,105,102,105,101,100,32,109,111,100,117,108,101,46,10, + 10,32,32,32,32,70,105,114,115,116,44,32,115,121,115,46, + 109,111,100,117,108,101,115,32,105,115,32,99,104,101,99,107, + 101,100,32,116,111,32,115,101,101,32,105,102,32,116,104,101, + 32,109,111,100,117,108,101,32,119,97,115,32,97,108,114,101, + 97,100,121,32,105,109,112,111,114,116,101,100,46,32,73,102, + 10,32,32,32,32,115,111,44,32,116,104,101,110,32,115,121, + 115,46,109,111,100,117,108,101,115,91,110,97,109,101,93,46, + 95,95,115,112,101,99,95,95,32,105,115,32,114,101,116,117, + 114,110,101,100,46,32,73,102,32,116,104,97,116,32,104,97, + 112,112,101,110,115,32,116,111,32,98,101,10,32,32,32,32, + 115,101,116,32,116,111,32,78,111,110,101,44,32,116,104,101, + 110,32,86,97,108,117,101,69,114,114,111,114,32,105,115,32, + 114,97,105,115,101,100,46,32,73,102,32,116,104,101,32,109, + 111,100,117,108,101,32,105,115,32,110,111,116,32,105,110,10, + 32,32,32,32,115,121,115,46,109,111,100,117,108,101,115,44, + 32,116,104,101,110,32,115,121,115,46,109,101,116,97,95,112, + 97,116,104,32,105,115,32,115,101,97,114,99,104,101,100,32, + 102,111,114,32,97,32,115,117,105,116,97,98,108,101,32,115, + 112,101,99,32,119,105,116,104,32,116,104,101,10,32,32,32, + 32,118,97,108,117,101,32,111,102,32,39,112,97,116,104,39, + 32,103,105,118,101,110,32,116,111,32,116,104,101,32,102,105, + 110,100,101,114,115,46,32,78,111,110,101,32,105,115,32,114, + 101,116,117,114,110,101,100,32,105,102,32,110,111,32,115,112, + 101,99,32,99,111,117,108,100,10,32,32,32,32,98,101,32, + 102,111,117,110,100,46,10,10,32,32,32,32,68,111,116,116, + 101,100,32,110,97,109,101,115,32,100,111,32,110,111,116,32, + 104,97,118,101,32,116,104,101,105,114,32,112,97,114,101,110, + 116,32,112,97,99,107,97,103,101,115,32,105,109,112,108,105, + 99,105,116,108,121,32,105,109,112,111,114,116,101,100,46,32, + 89,111,117,32,119,105,108,108,10,32,32,32,32,109,111,115, + 116,32,108,105,107,101,108,121,32,110,101,101,100,32,116,111, + 32,101,120,112,108,105,99,105,116,108,121,32,105,109,112,111, + 114,116,32,97,108,108,32,112,97,114,101,110,116,32,112,97, + 99,107,97,103,101,115,32,105,110,32,116,104,101,32,112,114, + 111,112,101,114,10,32,32,32,32,111,114,100,101,114,32,102, + 111,114,32,97,32,115,117,98,109,111,100,117,108,101,32,116, + 111,32,103,101,116,32,116,104,101,32,99,111,114,114,101,99, + 116,32,115,112,101,99,46,10,10,32,32,32,32,78,250,17, + 46,95,95,115,112,101,99,95,95,32,105,115,32,78,111,110, + 101,250,20,46,95,95,115,112,101,99,95,95,32,105,115,32, + 110,111,116,32,115,101,116,41,6,218,3,115,121,115,218,7, + 109,111,100,117,108,101,115,114,7,0,0,0,218,8,95,95, + 115,112,101,99,95,95,218,10,86,97,108,117,101,69,114,114, + 111,114,218,14,65,116,116,114,105,98,117,116,101,69,114,114, + 111,114,41,4,114,26,0,0,0,218,4,112,97,116,104,218, + 6,109,111,100,117,108,101,218,4,115,112,101,99,115,4,0, + 0,0,32,32,32,32,114,19,0,0,0,218,20,95,102,105, + 110,100,95,115,112,101,99,95,102,114,111,109,95,112,97,116, + 104,114,42,0,0,0,40,0,0,0,115,136,0,0,0,128, + 0,240,30,0,8,12,148,51,151,59,145,59,209,7,30,220, + 15,25,152,36,160,4,211,15,37,208,8,37,228,17,20,151, + 27,145,27,152,84,209,17,34,136,6,216,11,17,136,62,216, + 19,23,240,2,7,9,24,216,19,25,151,63,145,63,136,68, + 240,8,0,16,20,136,124,220,22,32,160,68,160,54,208,41, + 58,208,33,59,211,22,60,208,16,60,216,19,23,136,75,248, + 244,11,0,16,30,242,0,1,9,70,1,220,18,28,160,4, + 152,118,208,37,57,208,29,58,211,18,59,192,20,208,12,69, + 240,3,1,9,70,1,250,115,11,0,0,0,182,12,65,20, + 0,193,20,25,65,45,3,99,2,0,0,0,0,0,0,0, + 0,0,0,0,7,0,0,0,3,0,0,0,243,208,1,0, + 0,151,0,124,0,106,1,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,100,1,171,1,0,0,0, + 0,0,0,114,12,116,3,0,0,0,0,0,0,0,0,124, + 0,124,1,171,2,0,0,0,0,0,0,110,1,124,0,125, + 2,124,2,116,4,0,0,0,0,0,0,0,0,106,6,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,125,8,124,8,128,14,116,23,0,0,0,0,0,0,0, - 0,124,0,155,0,100,9,157,2,171,1,0,0,0,0,0, - 0,130,1,124,8,83,0,35,0,116,14,0,0,0,0,0, - 0,0,0,36,0,114,25,125,6,116,17,0,0,0,0,0, - 0,0,0,100,5,124,3,155,2,100,6,124,2,155,2,157, - 4,124,2,172,7,171,2,0,0,0,0,0,0,124,6,130, - 2,100,8,125,6,126,6,119,1,119,0,120,3,89,0,119, - 1,35,0,116,14,0,0,0,0,0,0,0,0,36,0,114, - 16,1,0,116,23,0,0,0,0,0,0,0,0,124,0,155, - 0,100,10,157,2,171,1,0,0,0,0,0,0,100,8,130, - 2,119,0,120,3,89,0,119,1,41,11,97,175,2,0,0, - 82,101,116,117,114,110,32,116,104,101,32,115,112,101,99,32, - 102,111,114,32,116,104,101,32,115,112,101,99,105,102,105,101, - 100,32,109,111,100,117,108,101,46,10,10,32,32,32,32,70, - 105,114,115,116,44,32,115,121,115,46,109,111,100,117,108,101, - 115,32,105,115,32,99,104,101,99,107,101,100,32,116,111,32, - 115,101,101,32,105,102,32,116,104,101,32,109,111,100,117,108, - 101,32,119,97,115,32,97,108,114,101,97,100,121,32,105,109, - 112,111,114,116,101,100,46,32,73,102,10,32,32,32,32,115, - 111,44,32,116,104,101,110,32,115,121,115,46,109,111,100,117, - 108,101,115,91,110,97,109,101,93,46,95,95,115,112,101,99, - 95,95,32,105,115,32,114,101,116,117,114,110,101,100,46,32, - 73,102,32,116,104,97,116,32,104,97,112,112,101,110,115,32, - 116,111,32,98,101,10,32,32,32,32,115,101,116,32,116,111, - 32,78,111,110,101,44,32,116,104,101,110,32,86,97,108,117, - 101,69,114,114,111,114,32,105,115,32,114,97,105,115,101,100, - 46,32,73,102,32,116,104,101,32,109,111,100,117,108,101,32, - 105,115,32,110,111,116,32,105,110,10,32,32,32,32,115,121, - 115,46,109,111,100,117,108,101,115,44,32,116,104,101,110,32, - 115,121,115,46,109,101,116,97,95,112,97,116,104,32,105,115, - 32,115,101,97,114,99,104,101,100,32,102,111,114,32,97,32, - 115,117,105,116,97,98,108,101,32,115,112,101,99,32,119,105, - 116,104,32,116,104,101,10,32,32,32,32,118,97,108,117,101, - 32,111,102,32,39,112,97,116,104,39,32,103,105,118,101,110, - 32,116,111,32,116,104,101,32,102,105,110,100,101,114,115,46, - 32,78,111,110,101,32,105,115,32,114,101,116,117,114,110,101, - 100,32,105,102,32,110,111,32,115,112,101,99,32,99,111,117, - 108,100,10,32,32,32,32,98,101,32,102,111,117,110,100,46, - 10,10,32,32,32,32,73,102,32,116,104,101,32,110,97,109, - 101,32,105,115,32,102,111,114,32,115,117,98,109,111,100,117, - 108,101,32,40,99,111,110,116,97,105,110,115,32,97,32,100, - 111,116,41,44,32,116,104,101,32,112,97,114,101,110,116,32, - 109,111,100,117,108,101,32,105,115,10,32,32,32,32,97,117, - 116,111,109,97,116,105,99,97,108,108,121,32,105,109,112,111, - 114,116,101,100,46,10,10,32,32,32,32,84,104,101,32,110, - 97,109,101,32,97,110,100,32,112,97,99,107,97,103,101,32, - 97,114,103,117,109,101,110,116,115,32,119,111,114,107,32,116, - 104,101,32,115,97,109,101,32,97,115,32,105,109,112,111,114, - 116,108,105,98,46,105,109,112,111,114,116,95,109,111,100,117, - 108,101,40,41,46,10,32,32,32,32,73,110,32,111,116,104, - 101,114,32,119,111,114,100,115,44,32,114,101,108,97,116,105, - 118,101,32,109,111,100,117,108,101,32,110,97,109,101,115,32, - 40,119,105,116,104,32,108,101,97,100,105,110,103,32,100,111, - 116,115,41,32,119,111,114,107,46,10,10,32,32,32,32,114, - 22,0,0,0,114,14,0,0,0,218,8,95,95,112,97,116, - 104,95,95,41,1,218,8,102,114,111,109,108,105,115,116,122, - 32,95,95,112,97,116,104,95,95,32,97,116,116,114,105,98, - 117,116,101,32,110,111,116,32,102,111,117,110,100,32,111,110, - 32,122,22,32,119,104,105,108,101,32,116,114,121,105,110,103, - 32,116,111,32,102,105,110,100,32,41,1,114,26,0,0,0, - 78,114,32,0,0,0,114,33,0,0,0,41,12,114,23,0, - 0,0,114,30,0,0,0,114,34,0,0,0,114,35,0,0, - 0,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,44,0,0,0,114,38, - 0,0,0,218,19,77,111,100,117,108,101,78,111,116,70,111, - 117,110,100,69,114,114,111,114,114,7,0,0,0,114,36,0, - 0,0,114,37,0,0,0,41,9,114,26,0,0,0,114,27, - 0,0,0,218,8,102,117,108,108,110,97,109,101,218,11,112, - 97,114,101,110,116,95,110,97,109,101,218,6,112,97,114,101, - 110,116,218,11,112,97,114,101,110,116,95,112,97,116,104,218, - 1,101,114,40,0,0,0,114,41,0,0,0,115,9,0,0, - 0,32,32,32,32,32,32,32,32,32,114,19,0,0,0,218, - 9,102,105,110,100,95,115,112,101,99,114,54,0,0,0,70, - 0,0,0,115,28,1,0,0,128,0,240,34,0,47,51,175, - 111,169,111,184,99,212,46,66,140,124,152,68,160,39,212,15, - 42,200,4,128,72,216,7,15,148,115,151,123,145,123,209,7, - 34,216,22,30,215,22,41,209,22,41,168,35,211,22,46,168, - 113,209,22,49,136,11,217,11,22,220,21,31,160,11,176,122, - 176,108,212,21,67,136,70,240,2,5,13,80,1,216,30,36, - 159,111,153,111,145,11,240,12,0,27,31,136,75,220,15,25, - 152,40,160,75,211,15,48,208,8,48,228,17,20,151,27,145, - 27,152,88,209,17,38,136,6,216,11,17,136,62,216,19,23, - 240,2,7,9,24,216,19,25,151,63,145,63,136,68,240,8, - 0,16,20,136,124,220,22,32,160,68,160,54,208,41,58,208, - 33,59,211,22,60,208,16,60,216,19,23,136,75,248,244,37, - 0,20,34,242,0,3,13,80,1,220,22,41,216,22,54,176, - 123,176,111,240,0,1,70,1,44,216,44,52,168,60,240,3, - 1,21,57,216,63,71,244,5,2,23,73,1,224,78,79,240, - 5,2,17,80,1,251,240,3,3,13,80,1,251,244,26,0, - 16,30,242,0,1,9,70,1,220,18,28,160,4,152,118,208, - 37,57,208,29,58,211,18,59,192,20,208,12,69,240,3,1, - 9,70,1,250,115,36,0,0,0,193,23,12,66,39,0,194, - 9,12,67,12,0,194,39,9,67,9,3,194,48,20,67,4, - 3,195,4,5,67,9,3,195,12,25,67,37,3,99,0,0, - 0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0, - 0,0,243,50,0,0,0,151,0,101,0,90,1,100,0,90, - 2,100,1,90,3,100,2,132,0,90,4,100,3,132,0,90, - 5,100,4,132,0,90,6,101,7,100,5,132,0,171,0,0, - 0,0,0,0,0,90,8,121,6,41,7,218,43,95,105,110, - 99,111,109,112,97,116,105,98,108,101,95,101,120,116,101,110, - 115,105,111,110,95,109,111,100,117,108,101,95,114,101,115,116, - 114,105,99,116,105,111,110,115,97,103,5,0,0,65,32,99, - 111,110,116,101,120,116,32,109,97,110,97,103,101,114,32,116, - 104,97,116,32,99,97,110,32,116,101,109,112,111,114,97,114, - 105,108,121,32,115,107,105,112,32,116,104,101,32,99,111,109, - 112,97,116,105,98,105,108,105,116,121,32,99,104,101,99,107, - 46,10,10,32,32,32,32,78,79,84,69,58,32,84,104,105, - 115,32,102,117,110,99,116,105,111,110,32,105,115,32,109,101, - 97,110,116,32,116,111,32,97,99,99,111,109,109,111,100,97, - 116,101,32,97,110,32,117,110,117,115,117,97,108,32,99,97, - 115,101,59,32,111,110,101,10,32,32,32,32,119,104,105,99, - 104,32,105,115,32,108,105,107,101,108,121,32,116,111,32,101, - 118,101,110,116,117,97,108,108,121,32,103,111,32,97,119,97, - 121,46,32,32,84,104,101,114,101,39,115,32,105,115,32,97, - 32,112,114,101,116,116,121,32,103,111,111,100,10,32,32,32, - 32,99,104,97,110,99,101,32,116,104,105,115,32,105,115,32, - 110,111,116,32,119,104,97,116,32,121,111,117,32,119,101,114, - 101,32,108,111,111,107,105,110,103,32,102,111,114,46,10,10, - 32,32,32,32,87,65,82,78,73,78,71,58,32,85,115,105, - 110,103,32,116,104,105,115,32,102,117,110,99,116,105,111,110, - 32,116,111,32,100,105,115,97,98,108,101,32,116,104,101,32, - 99,104,101,99,107,32,99,97,110,32,108,101,97,100,32,116, - 111,10,32,32,32,32,117,110,101,120,112,101,99,116,101,100, - 32,98,101,104,97,118,105,111,114,32,97,110,100,32,101,118, - 101,110,32,99,114,97,115,104,101,115,46,32,32,73,116,32, - 115,104,111,117,108,100,32,111,110,108,121,32,98,101,32,117, - 115,101,100,32,100,117,114,105,110,103,10,32,32,32,32,101, - 120,116,101,110,115,105,111,110,32,109,111,100,117,108,101,32, - 100,101,118,101,108,111,112,109,101,110,116,46,10,10,32,32, - 32,32,73,102,32,34,100,105,115,97,98,108,101,95,99,104, - 101,99,107,34,32,105,115,32,84,114,117,101,32,116,104,101, - 110,32,116,104,101,32,99,111,109,112,97,116,105,98,105,108, - 105,116,121,32,99,104,101,99,107,32,119,105,108,108,32,110, - 111,116,10,32,32,32,32,104,97,112,112,101,110,32,119,104, - 105,108,101,32,116,104,101,32,99,111,110,116,101,120,116,32, - 109,97,110,97,103,101,114,32,105,115,32,97,99,116,105,118, - 101,46,32,32,79,116,104,101,114,119,105,115,101,32,116,104, - 101,32,99,104,101,99,107,10,32,32,32,32,42,119,105,108, - 108,42,32,104,97,112,112,101,110,46,10,10,32,32,32,32, - 78,111,114,109,97,108,108,121,44,32,101,120,116,101,110,115, - 105,111,110,115,32,116,104,97,116,32,100,111,32,110,111,116, - 32,115,117,112,112,111,114,116,32,109,117,108,116,105,112,108, - 101,32,105,110,116,101,114,112,114,101,116,101,114,115,10,32, - 32,32,32,109,97,121,32,110,111,116,32,98,101,32,105,109, - 112,111,114,116,101,100,32,105,110,32,97,32,115,117,98,105, - 110,116,101,114,112,114,101,116,101,114,46,32,32,84,104,97, - 116,32,105,109,112,108,105,101,115,32,109,111,100,117,108,101, - 115,10,32,32,32,32,116,104,97,116,32,100,111,32,110,111, - 116,32,105,109,112,108,101,109,101,110,116,32,109,117,108,116, - 105,45,112,104,97,115,101,32,105,110,105,116,32,111,114,32, - 116,104,97,116,32,101,120,112,108,105,99,105,116,108,121,32, - 111,102,32,111,117,116,46,10,10,32,32,32,32,76,105,107, - 101,119,105,115,101,32,102,111,114,32,109,111,100,117,108,101, - 115,32,105,109,112,111,114,116,32,105,110,32,97,32,115,117, - 98,105,110,116,101,114,112,101,116,101,114,32,119,105,116,104, - 32,105,116,115,32,111,119,110,32,71,73,76,10,32,32,32, - 32,119,104,101,110,32,116,104,101,32,101,120,116,101,110,115, - 105,111,110,32,100,111,101,115,32,110,111,116,32,115,117,112, - 112,111,114,116,32,97,32,112,101,114,45,105,110,116,101,114, - 112,114,101,116,101,114,32,71,73,76,46,32,32,84,104,105, - 115,10,32,32,32,32,105,109,112,108,105,101,115,32,116,104, - 101,32,109,111,100,117,108,101,32,100,111,101,115,32,110,111, - 116,32,104,97,118,101,32,97,32,80,121,95,109,111,100,95, - 109,117,108,116,105,112,108,101,95,105,110,116,101,114,112,114, - 101,116,101,114,115,32,115,108,111,116,10,32,32,32,32,115, - 101,116,32,116,111,32,80,121,95,77,79,68,95,80,69,82, - 95,73,78,84,69,82,80,82,69,84,69,82,95,71,73,76, - 95,83,85,80,80,79,82,84,69,68,46,10,10,32,32,32, - 32,73,110,32,98,111,116,104,32,99,97,115,101,115,44,32, - 116,104,105,115,32,99,111,110,116,101,120,116,32,109,97,110, - 97,103,101,114,32,109,97,121,32,98,101,32,117,115,101,100, - 32,116,111,32,116,101,109,112,111,114,97,114,105,108,121,10, - 32,32,32,32,100,105,115,97,98,108,101,32,116,104,101,32, - 99,104,101,99,107,32,102,111,114,32,99,111,109,112,97,116, - 105,98,108,101,32,101,120,116,101,110,115,105,111,110,32,109, - 111,100,117,108,101,115,46,10,10,32,32,32,32,89,111,117, - 32,99,97,110,32,103,101,116,32,116,104,101,32,115,97,109, - 101,32,101,102,102,101,99,116,32,97,115,32,116,104,105,115, - 32,102,117,110,99,116,105,111,110,32,98,121,32,105,109,112, - 108,101,109,101,110,116,105,110,103,32,116,104,101,10,32,32, - 32,32,98,97,115,105,99,32,105,110,116,101,114,102,97,99, - 101,32,111,102,32,109,117,108,116,105,45,112,104,97,115,101, - 32,105,110,105,116,32,40,80,69,80,32,52,56,57,41,32, - 97,110,100,32,108,121,105,110,103,32,97,98,111,117,116,10, - 32,32,32,32,115,117,112,112,111,114,116,32,102,111,114,32, - 109,117,108,105,116,112,108,101,32,105,110,116,101,114,112,114, - 101,116,101,114,115,32,40,111,114,32,112,101,114,45,105,110, - 116,101,114,112,114,101,116,101,114,32,71,73,76,41,46,10, - 32,32,32,32,99,1,0,0,0,0,0,0,0,1,0,0, - 0,3,0,0,0,3,0,0,0,243,36,0,0,0,151,0, - 116,1,0,0,0,0,0,0,0,0,124,1,171,1,0,0, - 0,0,0,0,124,0,95,1,0,0,0,0,0,0,0,0, - 121,0,169,1,78,41,2,218,4,98,111,111,108,218,13,100, - 105,115,97,98,108,101,95,99,104,101,99,107,41,2,218,4, - 115,101,108,102,114,60,0,0,0,115,2,0,0,0,32,32, - 114,19,0,0,0,218,8,95,95,105,110,105,116,95,95,122, + 0,118,1,114,64,124,2,106,9,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,100,1,171,1,0, + 0,0,0,0,0,100,2,25,0,0,0,125,3,124,3,114, + 28,116,11,0,0,0,0,0,0,0,0,124,3,100,3,103, + 1,172,4,171,2,0,0,0,0,0,0,125,4,9,0,124, + 4,106,12,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,125,5,110,2,100,8,125,5,116,19,0, + 0,0,0,0,0,0,0,124,2,124,5,171,2,0,0,0, + 0,0,0,83,0,116,4,0,0,0,0,0,0,0,0,106, + 6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,124,2,25,0,0,0,125,7,124,7,128,1,121, + 8,9,0,124,7,106,20,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,125,8,124,8,128,14,116, + 23,0,0,0,0,0,0,0,0,124,0,155,0,100,9,157, + 2,171,1,0,0,0,0,0,0,130,1,124,8,83,0,35, + 0,116,14,0,0,0,0,0,0,0,0,36,0,114,25,125, + 6,116,17,0,0,0,0,0,0,0,0,100,5,124,3,155, + 2,100,6,124,2,155,2,157,4,124,2,172,7,171,2,0, + 0,0,0,0,0,124,6,130,2,100,8,125,6,126,6,119, + 1,119,0,120,3,89,0,119,1,35,0,116,14,0,0,0, + 0,0,0,0,0,36,0,114,16,1,0,116,23,0,0,0, + 0,0,0,0,0,124,0,155,0,100,10,157,2,171,1,0, + 0,0,0,0,0,100,8,130,2,119,0,120,3,89,0,119, + 1,41,11,97,175,2,0,0,82,101,116,117,114,110,32,116, + 104,101,32,115,112,101,99,32,102,111,114,32,116,104,101,32, + 115,112,101,99,105,102,105,101,100,32,109,111,100,117,108,101, + 46,10,10,32,32,32,32,70,105,114,115,116,44,32,115,121, + 115,46,109,111,100,117,108,101,115,32,105,115,32,99,104,101, + 99,107,101,100,32,116,111,32,115,101,101,32,105,102,32,116, + 104,101,32,109,111,100,117,108,101,32,119,97,115,32,97,108, + 114,101,97,100,121,32,105,109,112,111,114,116,101,100,46,32, + 73,102,10,32,32,32,32,115,111,44,32,116,104,101,110,32, + 115,121,115,46,109,111,100,117,108,101,115,91,110,97,109,101, + 93,46,95,95,115,112,101,99,95,95,32,105,115,32,114,101, + 116,117,114,110,101,100,46,32,73,102,32,116,104,97,116,32, + 104,97,112,112,101,110,115,32,116,111,32,98,101,10,32,32, + 32,32,115,101,116,32,116,111,32,78,111,110,101,44,32,116, + 104,101,110,32,86,97,108,117,101,69,114,114,111,114,32,105, + 115,32,114,97,105,115,101,100,46,32,73,102,32,116,104,101, + 32,109,111,100,117,108,101,32,105,115,32,110,111,116,32,105, + 110,10,32,32,32,32,115,121,115,46,109,111,100,117,108,101, + 115,44,32,116,104,101,110,32,115,121,115,46,109,101,116,97, + 95,112,97,116,104,32,105,115,32,115,101,97,114,99,104,101, + 100,32,102,111,114,32,97,32,115,117,105,116,97,98,108,101, + 32,115,112,101,99,32,119,105,116,104,32,116,104,101,10,32, + 32,32,32,118,97,108,117,101,32,111,102,32,39,112,97,116, + 104,39,32,103,105,118,101,110,32,116,111,32,116,104,101,32, + 102,105,110,100,101,114,115,46,32,78,111,110,101,32,105,115, + 32,114,101,116,117,114,110,101,100,32,105,102,32,110,111,32, + 115,112,101,99,32,99,111,117,108,100,10,32,32,32,32,98, + 101,32,102,111,117,110,100,46,10,10,32,32,32,32,73,102, + 32,116,104,101,32,110,97,109,101,32,105,115,32,102,111,114, + 32,115,117,98,109,111,100,117,108,101,32,40,99,111,110,116, + 97,105,110,115,32,97,32,100,111,116,41,44,32,116,104,101, + 32,112,97,114,101,110,116,32,109,111,100,117,108,101,32,105, + 115,10,32,32,32,32,97,117,116,111,109,97,116,105,99,97, + 108,108,121,32,105,109,112,111,114,116,101,100,46,10,10,32, + 32,32,32,84,104,101,32,110,97,109,101,32,97,110,100,32, + 112,97,99,107,97,103,101,32,97,114,103,117,109,101,110,116, + 115,32,119,111,114,107,32,116,104,101,32,115,97,109,101,32, + 97,115,32,105,109,112,111,114,116,108,105,98,46,105,109,112, + 111,114,116,95,109,111,100,117,108,101,40,41,46,10,32,32, + 32,32,73,110,32,111,116,104,101,114,32,119,111,114,100,115, + 44,32,114,101,108,97,116,105,118,101,32,109,111,100,117,108, + 101,32,110,97,109,101,115,32,40,119,105,116,104,32,108,101, + 97,100,105,110,103,32,100,111,116,115,41,32,119,111,114,107, + 46,10,10,32,32,32,32,114,22,0,0,0,114,14,0,0, + 0,218,8,95,95,112,97,116,104,95,95,41,1,218,8,102, + 114,111,109,108,105,115,116,122,32,95,95,112,97,116,104,95, + 95,32,97,116,116,114,105,98,117,116,101,32,110,111,116,32, + 102,111,117,110,100,32,111,110,32,122,22,32,119,104,105,108, + 101,32,116,114,121,105,110,103,32,116,111,32,102,105,110,100, + 32,41,1,114,26,0,0,0,78,114,32,0,0,0,114,33, + 0,0,0,41,12,114,23,0,0,0,114,30,0,0,0,114, + 34,0,0,0,114,35,0,0,0,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,44,0,0,0,114,38,0,0,0,218,19,77,111,100, + 117,108,101,78,111,116,70,111,117,110,100,69,114,114,111,114, + 114,7,0,0,0,114,36,0,0,0,114,37,0,0,0,41, + 9,114,26,0,0,0,114,27,0,0,0,218,8,102,117,108, + 108,110,97,109,101,218,11,112,97,114,101,110,116,95,110,97, + 109,101,218,6,112,97,114,101,110,116,218,11,112,97,114,101, + 110,116,95,112,97,116,104,218,1,101,114,40,0,0,0,114, + 41,0,0,0,115,9,0,0,0,32,32,32,32,32,32,32, + 32,32,114,19,0,0,0,218,9,102,105,110,100,95,115,112, + 101,99,114,54,0,0,0,71,0,0,0,115,28,1,0,0, + 128,0,240,34,0,47,51,175,111,169,111,184,99,212,46,66, + 140,124,152,68,160,39,212,15,42,200,4,128,72,216,7,15, + 148,115,151,123,145,123,209,7,34,216,22,30,215,22,41,209, + 22,41,168,35,211,22,46,168,113,209,22,49,136,11,217,11, + 22,220,21,31,160,11,176,122,176,108,212,21,67,136,70,240, + 2,5,13,80,1,216,30,36,159,111,153,111,145,11,240,12, + 0,27,31,136,75,220,15,25,152,40,160,75,211,15,48,208, + 8,48,228,17,20,151,27,145,27,152,88,209,17,38,136,6, + 216,11,17,136,62,216,19,23,240,2,7,9,24,216,19,25, + 151,63,145,63,136,68,240,8,0,16,20,136,124,220,22,32, + 160,68,160,54,208,41,58,208,33,59,211,22,60,208,16,60, + 216,19,23,136,75,248,244,37,0,20,34,242,0,3,13,80, + 1,220,22,41,216,22,54,176,123,176,111,240,0,1,70,1, + 44,216,44,52,168,60,240,3,1,21,57,216,63,71,244,5, + 2,23,73,1,224,78,79,240,5,2,17,80,1,251,240,3, + 3,13,80,1,251,244,26,0,16,30,242,0,1,9,70,1, + 220,18,28,160,4,152,118,208,37,57,208,29,58,211,18,59, + 192,20,208,12,69,240,3,1,9,70,1,250,115,36,0,0, + 0,193,23,12,66,39,0,194,9,12,67,12,0,194,39,9, + 67,9,3,194,48,20,67,4,3,195,4,5,67,9,3,195, + 12,25,67,37,3,99,0,0,0,0,0,0,0,0,0,0, + 0,0,2,0,0,0,0,0,0,0,243,50,0,0,0,151, + 0,101,0,90,1,100,0,90,2,100,1,90,3,100,2,132, + 0,90,4,100,3,132,0,90,5,100,4,132,0,90,6,101, + 7,100,5,132,0,171,0,0,0,0,0,0,0,90,8,121, + 6,41,7,218,43,95,105,110,99,111,109,112,97,116,105,98, + 108,101,95,101,120,116,101,110,115,105,111,110,95,109,111,100, + 117,108,101,95,114,101,115,116,114,105,99,116,105,111,110,115, + 97,103,5,0,0,65,32,99,111,110,116,101,120,116,32,109, + 97,110,97,103,101,114,32,116,104,97,116,32,99,97,110,32, + 116,101,109,112,111,114,97,114,105,108,121,32,115,107,105,112, + 32,116,104,101,32,99,111,109,112,97,116,105,98,105,108,105, + 116,121,32,99,104,101,99,107,46,10,10,32,32,32,32,78, + 79,84,69,58,32,84,104,105,115,32,102,117,110,99,116,105, + 111,110,32,105,115,32,109,101,97,110,116,32,116,111,32,97, + 99,99,111,109,109,111,100,97,116,101,32,97,110,32,117,110, + 117,115,117,97,108,32,99,97,115,101,59,32,111,110,101,10, + 32,32,32,32,119,104,105,99,104,32,105,115,32,108,105,107, + 101,108,121,32,116,111,32,101,118,101,110,116,117,97,108,108, + 121,32,103,111,32,97,119,97,121,46,32,32,84,104,101,114, + 101,39,115,32,105,115,32,97,32,112,114,101,116,116,121,32, + 103,111,111,100,10,32,32,32,32,99,104,97,110,99,101,32, + 116,104,105,115,32,105,115,32,110,111,116,32,119,104,97,116, + 32,121,111,117,32,119,101,114,101,32,108,111,111,107,105,110, + 103,32,102,111,114,46,10,10,32,32,32,32,87,65,82,78, + 73,78,71,58,32,85,115,105,110,103,32,116,104,105,115,32, + 102,117,110,99,116,105,111,110,32,116,111,32,100,105,115,97, + 98,108,101,32,116,104,101,32,99,104,101,99,107,32,99,97, + 110,32,108,101,97,100,32,116,111,10,32,32,32,32,117,110, + 101,120,112,101,99,116,101,100,32,98,101,104,97,118,105,111, + 114,32,97,110,100,32,101,118,101,110,32,99,114,97,115,104, + 101,115,46,32,32,73,116,32,115,104,111,117,108,100,32,111, + 110,108,121,32,98,101,32,117,115,101,100,32,100,117,114,105, + 110,103,10,32,32,32,32,101,120,116,101,110,115,105,111,110, + 32,109,111,100,117,108,101,32,100,101,118,101,108,111,112,109, + 101,110,116,46,10,10,32,32,32,32,73,102,32,34,100,105, + 115,97,98,108,101,95,99,104,101,99,107,34,32,105,115,32, + 84,114,117,101,32,116,104,101,110,32,116,104,101,32,99,111, + 109,112,97,116,105,98,105,108,105,116,121,32,99,104,101,99, + 107,32,119,105,108,108,32,110,111,116,10,32,32,32,32,104, + 97,112,112,101,110,32,119,104,105,108,101,32,116,104,101,32, + 99,111,110,116,101,120,116,32,109,97,110,97,103,101,114,32, + 105,115,32,97,99,116,105,118,101,46,32,32,79,116,104,101, + 114,119,105,115,101,32,116,104,101,32,99,104,101,99,107,10, + 32,32,32,32,42,119,105,108,108,42,32,104,97,112,112,101, + 110,46,10,10,32,32,32,32,78,111,114,109,97,108,108,121, + 44,32,101,120,116,101,110,115,105,111,110,115,32,116,104,97, + 116,32,100,111,32,110,111,116,32,115,117,112,112,111,114,116, + 32,109,117,108,116,105,112,108,101,32,105,110,116,101,114,112, + 114,101,116,101,114,115,10,32,32,32,32,109,97,121,32,110, + 111,116,32,98,101,32,105,109,112,111,114,116,101,100,32,105, + 110,32,97,32,115,117,98,105,110,116,101,114,112,114,101,116, + 101,114,46,32,32,84,104,97,116,32,105,109,112,108,105,101, + 115,32,109,111,100,117,108,101,115,10,32,32,32,32,116,104, + 97,116,32,100,111,32,110,111,116,32,105,109,112,108,101,109, + 101,110,116,32,109,117,108,116,105,45,112,104,97,115,101,32, + 105,110,105,116,32,111,114,32,116,104,97,116,32,101,120,112, + 108,105,99,105,116,108,121,32,111,102,32,111,117,116,46,10, + 10,32,32,32,32,76,105,107,101,119,105,115,101,32,102,111, + 114,32,109,111,100,117,108,101,115,32,105,109,112,111,114,116, + 32,105,110,32,97,32,115,117,98,105,110,116,101,114,112,101, + 116,101,114,32,119,105,116,104,32,105,116,115,32,111,119,110, + 32,71,73,76,10,32,32,32,32,119,104,101,110,32,116,104, + 101,32,101,120,116,101,110,115,105,111,110,32,100,111,101,115, + 32,110,111,116,32,115,117,112,112,111,114,116,32,97,32,112, + 101,114,45,105,110,116,101,114,112,114,101,116,101,114,32,71, + 73,76,46,32,32,84,104,105,115,10,32,32,32,32,105,109, + 112,108,105,101,115,32,116,104,101,32,109,111,100,117,108,101, + 32,100,111,101,115,32,110,111,116,32,104,97,118,101,32,97, + 32,80,121,95,109,111,100,95,109,117,108,116,105,112,108,101, + 95,105,110,116,101,114,112,114,101,116,101,114,115,32,115,108, + 111,116,10,32,32,32,32,115,101,116,32,116,111,32,80,121, + 95,77,79,68,95,80,69,82,95,73,78,84,69,82,80,82, + 69,84,69,82,95,71,73,76,95,83,85,80,80,79,82,84, + 69,68,46,10,10,32,32,32,32,73,110,32,98,111,116,104, + 32,99,97,115,101,115,44,32,116,104,105,115,32,99,111,110, + 116,101,120,116,32,109,97,110,97,103,101,114,32,109,97,121, + 32,98,101,32,117,115,101,100,32,116,111,32,116,101,109,112, + 111,114,97,114,105,108,121,10,32,32,32,32,100,105,115,97, + 98,108,101,32,116,104,101,32,99,104,101,99,107,32,102,111, + 114,32,99,111,109,112,97,116,105,98,108,101,32,101,120,116, + 101,110,115,105,111,110,32,109,111,100,117,108,101,115,46,10, + 10,32,32,32,32,89,111,117,32,99,97,110,32,103,101,116, + 32,116,104,101,32,115,97,109,101,32,101,102,102,101,99,116, + 32,97,115,32,116,104,105,115,32,102,117,110,99,116,105,111, + 110,32,98,121,32,105,109,112,108,101,109,101,110,116,105,110, + 103,32,116,104,101,10,32,32,32,32,98,97,115,105,99,32, + 105,110,116,101,114,102,97,99,101,32,111,102,32,109,117,108, + 116,105,45,112,104,97,115,101,32,105,110,105,116,32,40,80, + 69,80,32,52,56,57,41,32,97,110,100,32,108,121,105,110, + 103,32,97,98,111,117,116,10,32,32,32,32,115,117,112,112, + 111,114,116,32,102,111,114,32,109,117,108,116,105,112,108,101, + 32,105,110,116,101,114,112,114,101,116,101,114,115,32,40,111, + 114,32,112,101,114,45,105,110,116,101,114,112,114,101,116,101, + 114,32,71,73,76,41,46,10,32,32,32,32,99,1,0,0, + 0,0,0,0,0,1,0,0,0,3,0,0,0,3,0,0, + 0,243,36,0,0,0,151,0,116,1,0,0,0,0,0,0, + 0,0,124,1,171,1,0,0,0,0,0,0,124,0,95,1, + 0,0,0,0,0,0,0,0,121,0,169,1,78,41,2,218, + 4,98,111,111,108,218,13,100,105,115,97,98,108,101,95,99, + 104,101,99,107,41,2,218,4,115,101,108,102,114,60,0,0, + 0,115,2,0,0,0,32,32,114,19,0,0,0,218,8,95, + 95,105,110,105,116,95,95,122,52,95,105,110,99,111,109,112, + 97,116,105,98,108,101,95,101,120,116,101,110,115,105,111,110, + 95,109,111,100,117,108,101,95,114,101,115,116,114,105,99,116, + 105,111,110,115,46,95,95,105,110,105,116,95,95,152,0,0, + 0,115,15,0,0,0,128,0,220,29,33,160,45,211,29,48, + 136,4,213,8,26,114,20,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, + 78,0,0,0,151,0,116,1,0,0,0,0,0,0,0,0, + 106,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,124,0,106,4,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,171,1,0,0,0,0, + 0,0,124,0,95,3,0,0,0,0,0,0,0,0,124,0, + 83,0,114,58,0,0,0,41,4,114,16,0,0,0,218,39, + 95,111,118,101,114,114,105,100,101,95,109,117,108,116,105,95, + 105,110,116,101,114,112,95,101,120,116,101,110,115,105,111,110, + 115,95,99,104,101,99,107,218,8,111,118,101,114,114,105,100, + 101,218,3,111,108,100,169,1,114,61,0,0,0,115,1,0, + 0,0,32,114,19,0,0,0,218,9,95,95,101,110,116,101, + 114,95,95,122,53,95,105,110,99,111,109,112,97,116,105,98, + 108,101,95,101,120,116,101,110,115,105,111,110,95,109,111,100, + 117,108,101,95,114,101,115,116,114,105,99,116,105,111,110,115, + 46,95,95,101,110,116,101,114,95,95,155,0,0,0,115,29, + 0,0,0,128,0,220,19,23,215,19,63,209,19,63,192,4, + 199,13,193,13,211,19,78,136,4,140,8,216,15,19,136,11, + 114,20,0,0,0,99,1,0,0,0,0,0,0,0,0,0, + 0,0,3,0,0,0,7,0,0,0,243,74,0,0,0,151, + 0,124,0,106,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,125,2,124,0,96,0,116,3,0, + 0,0,0,0,0,0,0,106,4,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,124,2,171,1,0, + 0,0,0,0,0,1,0,121,0,114,58,0,0,0,41,3, + 114,66,0,0,0,114,16,0,0,0,114,64,0,0,0,41, + 3,114,61,0,0,0,218,4,97,114,103,115,114,66,0,0, + 0,115,3,0,0,0,32,32,32,114,19,0,0,0,218,8, + 95,95,101,120,105,116,95,95,122,52,95,105,110,99,111,109, + 112,97,116,105,98,108,101,95,101,120,116,101,110,115,105,111, + 110,95,109,111,100,117,108,101,95,114,101,115,116,114,105,99, + 116,105,111,110,115,46,95,95,101,120,105,116,95,95,159,0, + 0,0,115,30,0,0,0,128,0,216,14,18,143,104,137,104, + 136,3,216,12,16,136,72,220,8,12,215,8,52,209,8,52, + 176,83,213,8,57,114,20,0,0,0,99,1,0,0,0,0, + 0,0,0,0,0,0,0,1,0,0,0,3,0,0,0,243, + 34,0,0,0,151,0,124,0,106,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,114,2,100,1, + 83,0,100,2,83,0,41,3,78,233,255,255,255,255,114,2, + 0,0,0,41,1,114,60,0,0,0,114,67,0,0,0,115, + 1,0,0,0,32,114,19,0,0,0,114,65,0,0,0,122, 52,95,105,110,99,111,109,112,97,116,105,98,108,101,95,101, 120,116,101,110,115,105,111,110,95,109,111,100,117,108,101,95, - 114,101,115,116,114,105,99,116,105,111,110,115,46,95,95,105, - 110,105,116,95,95,151,0,0,0,115,15,0,0,0,128,0, - 220,29,33,160,45,211,29,48,136,4,213,8,26,114,20,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,78,0,0,0,151,0,116,1, - 0,0,0,0,0,0,0,0,106,2,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,124,0,106,4, + 114,101,115,116,114,105,99,116,105,111,110,115,46,111,118,101, + 114,114,105,100,101,164,0,0,0,115,21,0,0,0,128,0, + 224,21,25,215,21,39,210,21,39,136,114,208,8,46,168,81, + 208,8,46,114,20,0,0,0,78,41,9,218,8,95,95,110, + 97,109,101,95,95,218,10,95,95,109,111,100,117,108,101,95, + 95,218,12,95,95,113,117,97,108,110,97,109,101,95,95,218, + 7,95,95,100,111,99,95,95,114,62,0,0,0,114,68,0, + 0,0,114,71,0,0,0,218,8,112,114,111,112,101,114,116, + 121,114,65,0,0,0,169,0,114,20,0,0,0,114,19,0, + 0,0,114,56,0,0,0,114,56,0,0,0,120,0,0,0, + 115,42,0,0,0,132,0,241,2,29,5,8,242,62,1,5, + 49,242,6,2,5,20,242,8,3,5,58,240,10,0,6,14, + 241,2,1,5,47,243,3,0,6,14,241,2,1,5,47,114, + 20,0,0,0,114,56,0,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,151,0,101,0,90,1,100,0,90,2,100,1,90, + 3,100,2,132,0,90,4,100,3,132,0,90,5,121,4,41, + 5,218,11,95,76,97,122,121,77,111,100,117,108,101,122,75, + 65,32,115,117,98,99,108,97,115,115,32,111,102,32,116,104, + 101,32,109,111,100,117,108,101,32,116,121,112,101,32,119,104, + 105,99,104,32,116,114,105,103,103,101,114,115,32,108,111,97, + 100,105,110,103,32,117,112,111,110,32,97,116,116,114,105,98, + 117,116,101,32,97,99,99,101,115,115,46,99,2,0,0,0, + 0,0,0,0,0,0,0,0,7,0,0,0,3,0,0,0, + 243,18,3,0,0,151,0,116,0,0,0,0,0,0,0,0, + 0,106,3,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,124,0,100,1,171,2,0,0,0,0,0, + 0,125,2,124,2,106,4,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,125,3,124,3,100,2,25, + 0,0,0,53,0,1,0,116,0,0,0,0,0,0,0,0, + 0,106,3,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,124,0,100,3,171,2,0,0,0,0,0, + 0,116,6,0,0,0,0,0,0,0,0,117,0,144,1,114, + 35,124,3,100,4,25,0,0,0,114,31,116,0,0,0,0, + 0,0,0,0,0,106,3,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,124,0,124,1,171,2,0, + 0,0,0,0,0,99,2,100,5,100,5,100,5,171,2,0, + 0,0,0,0,0,1,0,83,0,100,6,124,3,100,4,60, + 0,0,0,116,0,0,0,0,0,0,0,0,0,106,3,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,171,1,0,0,0,0,0,0,124,0,95,3,0,0, - 0,0,0,0,0,0,124,0,83,0,114,58,0,0,0,41, - 4,114,16,0,0,0,218,39,95,111,118,101,114,114,105,100, - 101,95,109,117,108,116,105,95,105,110,116,101,114,112,95,101, - 120,116,101,110,115,105,111,110,115,95,99,104,101,99,107,218, - 8,111,118,101,114,114,105,100,101,218,3,111,108,100,169,1, - 114,61,0,0,0,115,1,0,0,0,32,114,19,0,0,0, - 218,9,95,95,101,110,116,101,114,95,95,122,53,95,105,110, - 99,111,109,112,97,116,105,98,108,101,95,101,120,116,101,110, - 115,105,111,110,95,109,111,100,117,108,101,95,114,101,115,116, - 114,105,99,116,105,111,110,115,46,95,95,101,110,116,101,114, - 95,95,154,0,0,0,115,29,0,0,0,128,0,220,19,23, - 215,19,63,209,19,63,192,4,199,13,193,13,211,19,78,136, - 4,140,8,216,15,19,136,11,114,20,0,0,0,99,1,0, - 0,0,0,0,0,0,0,0,0,0,3,0,0,0,7,0, - 0,0,243,74,0,0,0,151,0,124,0,106,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,125, - 2,124,0,96,0,116,3,0,0,0,0,0,0,0,0,106, - 4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,124,2,171,1,0,0,0,0,0,0,1,0,121, - 0,114,58,0,0,0,41,3,114,66,0,0,0,114,16,0, - 0,0,114,64,0,0,0,41,3,114,61,0,0,0,218,4, - 97,114,103,115,114,66,0,0,0,115,3,0,0,0,32,32, - 32,114,19,0,0,0,218,8,95,95,101,120,105,116,95,95, - 122,52,95,105,110,99,111,109,112,97,116,105,98,108,101,95, - 101,120,116,101,110,115,105,111,110,95,109,111,100,117,108,101, - 95,114,101,115,116,114,105,99,116,105,111,110,115,46,95,95, - 101,120,105,116,95,95,158,0,0,0,115,30,0,0,0,128, - 0,216,14,18,143,104,137,104,136,3,216,12,16,136,72,220, - 8,12,215,8,52,209,8,52,176,83,213,8,57,114,20,0, - 0,0,99,1,0,0,0,0,0,0,0,0,0,0,0,1, - 0,0,0,3,0,0,0,243,34,0,0,0,151,0,124,0, - 106,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,114,2,100,1,83,0,100,2,83,0,41,3, - 78,233,255,255,255,255,114,2,0,0,0,41,1,114,60,0, - 0,0,114,67,0,0,0,115,1,0,0,0,32,114,19,0, - 0,0,114,65,0,0,0,122,52,95,105,110,99,111,109,112, - 97,116,105,98,108,101,95,101,120,116,101,110,115,105,111,110, - 95,109,111,100,117,108,101,95,114,101,115,116,114,105,99,116, - 105,111,110,115,46,111,118,101,114,114,105,100,101,163,0,0, - 0,115,21,0,0,0,128,0,224,21,25,215,21,39,210,21, - 39,136,114,208,8,46,168,81,208,8,46,114,20,0,0,0, - 78,41,9,218,8,95,95,110,97,109,101,95,95,218,10,95, - 95,109,111,100,117,108,101,95,95,218,12,95,95,113,117,97, - 108,110,97,109,101,95,95,218,7,95,95,100,111,99,95,95, - 114,62,0,0,0,114,68,0,0,0,114,71,0,0,0,218, - 8,112,114,111,112,101,114,116,121,114,65,0,0,0,169,0, - 114,20,0,0,0,114,19,0,0,0,114,56,0,0,0,114, - 56,0,0,0,119,0,0,0,115,42,0,0,0,132,0,241, - 2,29,5,8,242,62,1,5,49,242,6,2,5,20,242,8, - 3,5,58,240,10,0,6,14,241,2,1,5,47,243,3,0, - 6,14,241,2,1,5,47,114,20,0,0,0,114,56,0,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,151,0,101,0,90, - 1,100,0,90,2,100,1,90,3,100,2,132,0,90,4,100, - 3,132,0,90,5,121,4,41,5,218,11,95,76,97,122,121, - 77,111,100,117,108,101,122,75,65,32,115,117,98,99,108,97, - 115,115,32,111,102,32,116,104,101,32,109,111,100,117,108,101, - 32,116,121,112,101,32,119,104,105,99,104,32,116,114,105,103, - 103,101,114,115,32,108,111,97,100,105,110,103,32,117,112,111, - 110,32,97,116,116,114,105,98,117,116,101,32,97,99,99,101, - 115,115,46,99,2,0,0,0,0,0,0,0,0,0,0,0, - 6,0,0,0,3,0,0,0,243,90,2,0,0,151,0,116, - 0,0,0,0,0,0,0,0,0,106,2,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,124,0,95, - 2,0,0,0,0,0,0,0,0,124,0,106,6,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,106, - 8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,125,2,124,0,106,6,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,106,10,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,100, - 1,25,0,0,0,125,3,124,0,106,12,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,125,4,105, - 0,125,5,124,4,106,15,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,171,0,0,0,0,0,0, - 0,68,0,93,50,0,0,92,2,0,0,125,6,125,7,124, - 6,124,3,118,1,114,6,124,7,124,5,124,6,60,0,0, - 0,140,16,116,17,0,0,0,0,0,0,0,0,124,4,124, - 6,25,0,0,0,171,1,0,0,0,0,0,0,116,17,0, - 0,0,0,0,0,0,0,124,3,124,6,25,0,0,0,171, - 1,0,0,0,0,0,0,107,55,0,0,115,1,140,46,124, - 7,124,5,124,6,60,0,0,0,140,52,4,0,124,0,106, - 6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,106,18,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,106,21,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,124,0,171,1,0, - 0,0,0,0,0,1,0,124,2,116,22,0,0,0,0,0, - 0,0,0,106,24,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,118,0,114,55,116,17,0,0,0, - 0,0,0,0,0,124,0,171,1,0,0,0,0,0,0,116, - 17,0,0,0,0,0,0,0,0,116,22,0,0,0,0,0, - 0,0,0,106,24,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,124,2,25,0,0,0,171,1,0, - 0,0,0,0,0,107,55,0,0,114,15,116,27,0,0,0, - 0,0,0,0,0,100,2,124,2,155,2,100,3,157,3,171, - 1,0,0,0,0,0,0,130,1,124,0,106,12,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,106, - 29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,124,5,171,1,0,0,0,0,0,0,1,0,116, - 31,0,0,0,0,0,0,0,0,124,0,124,1,171,2,0, - 0,0,0,0,0,83,0,41,4,122,56,84,114,105,103,103, + 0,124,0,100,7,171,2,0,0,0,0,0,0,125,4,124, + 2,106,8,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,125,5,124,3,100,7,25,0,0,0,125, + 6,124,4,125,7,105,0,125,8,124,7,106,11,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,171, + 0,0,0,0,0,0,0,68,0,93,50,0,0,92,2,0, + 0,125,9,125,10,124,9,124,6,118,1,114,6,124,10,124, + 8,124,9,60,0,0,0,140,16,116,13,0,0,0,0,0, + 0,0,0,124,7,124,9,25,0,0,0,171,1,0,0,0, + 0,0,0,116,13,0,0,0,0,0,0,0,0,124,6,124, + 9,25,0,0,0,171,1,0,0,0,0,0,0,107,55,0, + 0,115,1,140,46,124,10,124,8,124,9,60,0,0,0,140, + 52,4,0,124,2,106,14,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,106,17,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,124,0,171, + 1,0,0,0,0,0,0,1,0,124,5,116,18,0,0,0, + 0,0,0,0,0,106,20,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,118,0,114,55,116,13,0, + 0,0,0,0,0,0,0,124,0,171,1,0,0,0,0,0, + 0,116,13,0,0,0,0,0,0,0,0,116,18,0,0,0, + 0,0,0,0,0,106,20,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,124,5,25,0,0,0,171, + 1,0,0,0,0,0,0,107,55,0,0,114,15,116,23,0, + 0,0,0,0,0,0,0,100,8,124,5,155,2,100,9,157, + 3,171,1,0,0,0,0,0,0,130,1,124,4,106,25,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,124,8,171,1,0,0,0,0,0,0,1,0,116,26,0, + 0,0,0,0,0,0,0,106,28,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,124,0,95,15,0, + 0,0,0,0,0,0,0,100,5,100,5,100,5,171,2,0, + 0,0,0,0,0,1,0,116,33,0,0,0,0,0,0,0, + 0,124,0,124,1,171,2,0,0,0,0,0,0,83,0,35, + 0,49,0,115,1,119,2,1,0,89,0,1,0,1,0,140, + 21,120,3,89,0,119,1,41,10,122,56,84,114,105,103,103, 101,114,32,116,104,101,32,108,111,97,100,32,111,102,32,116, 104,101,32,109,111,100,117,108,101,32,97,110,100,32,114,101, 116,117,114,110,32,116,104,101,32,97,116,116,114,105,98,117, - 116,101,46,218,8,95,95,100,105,99,116,95,95,122,18,109, - 111,100,117,108,101,32,111,98,106,101,99,116,32,102,111,114, - 32,122,46,32,115,117,98,115,116,105,116,117,116,101,100,32, - 105,110,32,115,121,115,46,109,111,100,117,108,101,115,32,100, - 117,114,105,110,103,32,97,32,108,97,122,121,32,108,111,97, - 100,41,16,218,5,116,121,112,101,115,218,10,77,111,100,117, - 108,101,84,121,112,101,218,9,95,95,99,108,97,115,115,95, - 95,114,36,0,0,0,114,26,0,0,0,218,12,108,111,97, - 100,101,114,95,115,116,97,116,101,114,83,0,0,0,218,5, - 105,116,101,109,115,218,2,105,100,218,6,108,111,97,100,101, - 114,218,11,101,120,101,99,95,109,111,100,117,108,101,114,34, - 0,0,0,114,35,0,0,0,114,37,0,0,0,218,6,117, - 112,100,97,116,101,218,7,103,101,116,97,116,116,114,41,8, - 114,61,0,0,0,218,4,97,116,116,114,218,13,111,114,105, - 103,105,110,97,108,95,110,97,109,101,218,10,97,116,116,114, - 115,95,116,104,101,110,218,9,97,116,116,114,115,95,110,111, - 119,218,13,97,116,116,114,115,95,117,112,100,97,116,101,100, - 218,3,107,101,121,218,5,118,97,108,117,101,115,8,0,0, - 0,32,32,32,32,32,32,32,32,114,19,0,0,0,218,16, - 95,95,103,101,116,97,116,116,114,105,98,117,116,101,95,95, - 122,28,95,76,97,122,121,77,111,100,117,108,101,46,95,95, - 103,101,116,97,116,116,114,105,98,117,116,101,95,95,172,0, - 0,0,115,27,1,0,0,128,0,244,10,0,26,31,215,25, - 41,209,25,41,136,4,140,14,240,6,0,25,29,159,13,153, - 13,215,24,42,209,24,42,136,13,240,6,0,22,26,151,93, - 145,93,215,21,47,209,21,47,176,10,209,21,59,136,10,216, - 20,24,151,77,145,77,136,9,216,24,26,136,13,216,26,35, - 159,47,153,47,211,26,43,242,0,6,9,43,137,74,136,67, - 144,21,240,6,0,16,19,152,42,209,15,36,216,37,42,144, - 13,152,99,210,16,34,220,17,19,144,73,152,99,145,78,211, - 17,35,164,114,168,42,176,83,169,47,211,39,58,211,17,58, - 216,37,42,144,13,152,99,210,16,34,240,13,6,9,43,240, - 14,0,9,13,143,13,137,13,215,8,28,209,8,28,215,8, - 40,209,8,40,168,20,212,8,46,240,6,0,12,25,156,67, - 159,75,153,75,209,11,39,220,15,17,144,36,139,120,156,50, - 156,99,159,107,153,107,168,45,209,30,56,211,27,57,210,15, - 57,220,22,32,208,35,53,176,109,208,53,70,240,0,2,71, - 1,41,240,0,2,34,41,243,0,2,23,42,240,0,2,17, - 42,240,10,0,9,13,143,13,137,13,215,8,28,209,8,28, - 152,93,212,8,43,220,15,22,144,116,152,84,211,15,34,208, - 8,34,114,20,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,62,0,0, - 0,151,0,124,0,106,1,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,124,1,171,1,0,0,0, - 0,0,0,1,0,116,3,0,0,0,0,0,0,0,0,124, - 0,124,1,171,2,0,0,0,0,0,0,1,0,121,1,41, - 2,122,47,84,114,105,103,103,101,114,32,116,104,101,32,108, - 111,97,100,32,97,110,100,32,116,104,101,110,32,112,101,114, - 102,111,114,109,32,116,104,101,32,100,101,108,101,116,105,111, - 110,46,78,41,2,114,101,0,0,0,218,7,100,101,108,97, - 116,116,114,41,2,114,61,0,0,0,114,94,0,0,0,115, - 2,0,0,0,32,32,114,19,0,0,0,218,11,95,95,100, - 101,108,97,116,116,114,95,95,122,23,95,76,97,122,121,77, - 111,100,117,108,101,46,95,95,100,101,108,97,116,116,114,95, - 95,206,0,0,0,115,28,0,0,0,128,0,240,8,0,9, - 13,215,8,29,209,8,29,152,100,212,8,35,220,8,15,144, - 4,144,100,213,8,27,114,20,0,0,0,78,41,6,114,74, - 0,0,0,114,75,0,0,0,114,76,0,0,0,114,77,0, - 0,0,114,101,0,0,0,114,104,0,0,0,114,79,0,0, - 0,114,20,0,0,0,114,19,0,0,0,114,81,0,0,0, - 114,81,0,0,0,168,0,0,0,115,16,0,0,0,132,0, - 225,4,85,242,4,32,5,35,243,68,1,5,5,28,114,20, - 0,0,0,114,81,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,66,0, - 0,0,151,0,101,0,90,1,100,0,90,2,100,1,90,3, - 101,4,100,2,132,0,171,0,0,0,0,0,0,0,90,5, - 101,6,100,3,132,0,171,0,0,0,0,0,0,0,90,7, - 100,4,132,0,90,8,100,5,132,0,90,9,100,6,132,0, - 90,10,121,7,41,8,218,10,76,97,122,121,76,111,97,100, - 101,114,122,75,65,32,108,111,97,100,101,114,32,116,104,97, - 116,32,99,114,101,97,116,101,115,32,97,32,109,111,100,117, - 108,101,32,119,104,105,99,104,32,100,101,102,101,114,115,32, - 108,111,97,100,105,110,103,32,117,110,116,105,108,32,97,116, - 116,114,105,98,117,116,101,32,97,99,99,101,115,115,46,99, - 1,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0, - 3,0,0,0,243,50,0,0,0,151,0,116,1,0,0,0, - 0,0,0,0,0,124,0,100,1,171,2,0,0,0,0,0, - 0,115,11,116,3,0,0,0,0,0,0,0,0,100,2,171, - 1,0,0,0,0,0,0,130,1,121,0,41,3,78,114,91, - 0,0,0,122,32,108,111,97,100,101,114,32,109,117,115,116, - 32,100,101,102,105,110,101,32,101,120,101,99,95,109,111,100, - 117,108,101,40,41,41,2,218,7,104,97,115,97,116,116,114, - 218,9,84,121,112,101,69,114,114,111,114,41,1,114,90,0, - 0,0,115,1,0,0,0,32,114,19,0,0,0,218,20,95, - 95,99,104,101,99,107,95,101,97,103,101,114,95,108,111,97, - 100,101,114,122,31,76,97,122,121,76,111,97,100,101,114,46, - 95,95,99,104,101,99,107,95,101,97,103,101,114,95,108,111, - 97,100,101,114,218,0,0,0,115,29,0,0,0,128,0,228, - 15,22,144,118,152,125,212,15,45,220,18,27,208,28,62,211, - 18,63,208,12,63,240,3,0,16,46,114,20,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,52,0,0,0,135,0,135,1,151,0,137, - 0,106,1,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,137,1,171,1,0,0,0,0,0,0,1, - 0,136,0,136,1,102,2,100,1,132,8,83,0,41,2,122, - 62,67,111,110,115,116,114,117,99,116,32,97,32,99,97,108, - 108,97,98,108,101,32,119,104,105,99,104,32,114,101,116,117, - 114,110,115,32,116,104,101,32,101,97,103,101,114,32,108,111, - 97,100,101,114,32,109,97,100,101,32,108,97,122,121,46,99, - 0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0, - 31,0,0,0,243,32,0,0,0,149,2,151,0,2,0,137, - 2,2,0,137,3,124,0,105,0,124,1,164,1,142,1,171, - 1,0,0,0,0,0,0,83,0,114,58,0,0,0,114,79, - 0,0,0,41,4,114,70,0,0,0,218,6,107,119,97,114, - 103,115,218,3,99,108,115,114,90,0,0,0,115,4,0,0, - 0,32,32,128,128,114,19,0,0,0,250,8,60,108,97,109, - 98,100,97,62,122,36,76,97,122,121,76,111,97,100,101,114, - 46,102,97,99,116,111,114,121,46,60,108,111,99,97,108,115, - 62,46,60,108,97,109,98,100,97,62,227,0,0,0,115,22, - 0,0,0,248,128,0,161,115,169,54,176,52,208,43,66,184, - 54,209,43,66,211,39,67,128,0,114,20,0,0,0,41,1, - 218,31,95,76,97,122,121,76,111,97,100,101,114,95,95,99, - 104,101,99,107,95,101,97,103,101,114,95,108,111,97,100,101, - 114,41,2,114,114,0,0,0,114,90,0,0,0,115,2,0, - 0,0,96,96,114,19,0,0,0,218,7,102,97,99,116,111, - 114,121,122,18,76,97,122,121,76,111,97,100,101,114,46,102, - 97,99,116,111,114,121,223,0,0,0,115,25,0,0,0,249, - 128,0,240,6,0,9,12,215,8,32,209,8,32,160,22,212, - 8,40,220,15,67,208,8,67,114,20,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,52,0,0,0,151,0,124,0,106,1,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,124, - 1,171,1,0,0,0,0,0,0,1,0,124,1,124,0,95, - 1,0,0,0,0,0,0,0,0,121,0,114,58,0,0,0, - 41,2,114,116,0,0,0,114,90,0,0,0,41,2,114,61, - 0,0,0,114,90,0,0,0,115,2,0,0,0,32,32,114, - 19,0,0,0,114,62,0,0,0,122,19,76,97,122,121,76, - 111,97,100,101,114,46,95,95,105,110,105,116,95,95,229,0, - 0,0,115,23,0,0,0,128,0,216,8,12,215,8,33,209, - 8,33,160,38,212,8,41,216,22,28,136,4,141,11,114,20, + 116,101,46,114,36,0,0,0,218,4,108,111,99,107,218,9, + 95,95,99,108,97,115,115,95,95,218,10,105,115,95,108,111, + 97,100,105,110,103,78,84,218,8,95,95,100,105,99,116,95, + 95,122,18,109,111,100,117,108,101,32,111,98,106,101,99,116, + 32,102,111,114,32,122,46,32,115,117,98,115,116,105,116,117, + 116,101,100,32,105,110,32,115,121,115,46,109,111,100,117,108, + 101,115,32,100,117,114,105,110,103,32,97,32,108,97,122,121, + 32,108,111,97,100,41,17,218,6,111,98,106,101,99,116,218, + 16,95,95,103,101,116,97,116,116,114,105,98,117,116,101,95, + 95,218,12,108,111,97,100,101,114,95,115,116,97,116,101,114, + 81,0,0,0,114,26,0,0,0,218,5,105,116,101,109,115, + 218,2,105,100,218,6,108,111,97,100,101,114,218,11,101,120, + 101,99,95,109,111,100,117,108,101,114,34,0,0,0,114,35, + 0,0,0,114,37,0,0,0,218,6,117,112,100,97,116,101, + 218,5,116,121,112,101,115,218,10,77,111,100,117,108,101,84, + 121,112,101,114,84,0,0,0,218,7,103,101,116,97,116,116, + 114,41,11,114,61,0,0,0,218,4,97,116,116,114,114,36, + 0,0,0,114,89,0,0,0,114,86,0,0,0,218,13,111, + 114,105,103,105,110,97,108,95,110,97,109,101,218,10,97,116, + 116,114,115,95,116,104,101,110,218,9,97,116,116,114,115,95, + 110,111,119,218,13,97,116,116,114,115,95,117,112,100,97,116, + 101,100,218,3,107,101,121,218,5,118,97,108,117,101,115,11, + 0,0,0,32,32,32,32,32,32,32,32,32,32,32,114,19, + 0,0,0,114,88,0,0,0,122,28,95,76,97,122,121,77, + 111,100,117,108,101,46,95,95,103,101,116,97,116,116,114,105, + 98,117,116,101,95,95,173,0,0,0,115,145,1,0,0,128, + 0,228,19,25,215,19,42,209,19,42,168,52,176,26,211,19, + 60,136,8,216,23,31,215,23,44,209,23,44,136,12,216,13, + 25,152,38,209,13,33,241,0,43,9,50,244,6,0,16,22, + 215,15,38,209,15,38,160,116,168,91,211,15,57,188,91,210, + 15,72,240,10,0,20,32,160,12,210,19,45,220,27,33,215, + 27,50,209,27,50,176,52,184,20,211,27,62,247,19,43,9, + 50,241,0,43,9,50,240,20,0,46,50,144,12,152,92,209, + 16,42,228,27,33,215,27,50,209,27,50,176,52,184,26,211, + 27,68,144,8,240,12,0,33,41,167,13,161,13,144,13,240, + 6,0,30,42,168,42,209,29,53,144,10,216,28,36,144,9, + 216,32,34,144,13,216,34,43,167,47,161,47,211,34,51,242, + 0,6,17,51,145,74,144,67,152,21,240,6,0,24,27,160, + 42,209,23,44,216,45,50,152,13,160,99,210,24,42,220,25, + 27,152,73,160,99,153,78,211,25,43,172,114,176,42,184,83, + 177,47,211,47,66,211,25,66,216,45,50,152,13,160,99,210, + 24,42,240,13,6,17,51,240,14,0,17,25,151,15,145,15, + 215,16,43,209,16,43,168,68,212,16,49,240,6,0,20,33, + 164,67,167,75,161,75,209,19,47,220,23,25,152,36,147,120, + 164,50,164,99,167,107,161,107,176,45,209,38,64,211,35,65, + 210,23,65,220,30,40,208,43,61,184,109,208,61,78,240,0, + 2,79,1,49,240,0,2,42,49,243,0,2,31,50,240,0, + 2,25,50,240,10,0,17,25,151,15,145,15,160,13,212,16, + 46,228,33,38,215,33,49,209,33,49,144,4,148,14,247,87, + 1,43,9,50,244,90,1,0,16,23,144,116,152,84,211,15, + 34,208,8,34,247,91,1,43,9,50,240,0,43,9,50,250, + 115,25,0,0,0,168,56,69,61,3,193,42,65,45,69,61, + 3,195,24,66,17,69,61,3,197,61,5,70,6,7,99,2, + 0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,3, + 0,0,0,243,62,0,0,0,151,0,124,0,106,1,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 124,1,171,1,0,0,0,0,0,0,1,0,116,3,0,0, + 0,0,0,0,0,0,124,0,124,1,171,2,0,0,0,0, + 0,0,1,0,121,1,41,2,122,47,84,114,105,103,103,101, + 114,32,116,104,101,32,108,111,97,100,32,97,110,100,32,116, + 104,101,110,32,112,101,114,102,111,114,109,32,116,104,101,32, + 100,101,108,101,116,105,111,110,46,78,41,2,114,88,0,0, + 0,218,7,100,101,108,97,116,116,114,41,2,114,61,0,0, + 0,114,98,0,0,0,115,2,0,0,0,32,32,114,19,0, + 0,0,218,11,95,95,100,101,108,97,116,116,114,95,95,122, + 23,95,76,97,122,121,77,111,100,117,108,101,46,95,95,100, + 101,108,97,116,116,114,95,95,224,0,0,0,115,28,0,0, + 0,128,0,240,8,0,9,13,215,8,29,209,8,29,152,100, + 212,8,35,220,8,15,144,4,144,100,213,8,27,114,20,0, + 0,0,78,41,6,114,74,0,0,0,114,75,0,0,0,114, + 76,0,0,0,114,77,0,0,0,114,88,0,0,0,114,107, + 0,0,0,114,79,0,0,0,114,20,0,0,0,114,19,0, + 0,0,114,81,0,0,0,114,81,0,0,0,169,0,0,0, + 115,16,0,0,0,132,0,225,4,85,242,4,49,5,35,243, + 102,1,5,5,28,114,20,0,0,0,114,81,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,66,0,0,0,151,0,101,0,90,1,100, + 0,90,2,100,1,90,3,101,4,100,2,132,0,171,0,0, + 0,0,0,0,0,90,5,101,6,100,3,132,0,171,0,0, + 0,0,0,0,0,90,7,100,4,132,0,90,8,100,5,132, + 0,90,9,100,6,132,0,90,10,121,7,41,8,218,10,76, + 97,122,121,76,111,97,100,101,114,122,75,65,32,108,111,97, + 100,101,114,32,116,104,97,116,32,99,114,101,97,116,101,115, + 32,97,32,109,111,100,117,108,101,32,119,104,105,99,104,32, + 100,101,102,101,114,115,32,108,111,97,100,105,110,103,32,117, + 110,116,105,108,32,97,116,116,114,105,98,117,116,101,32,97, + 99,99,101,115,115,46,99,1,0,0,0,0,0,0,0,0, + 0,0,0,4,0,0,0,3,0,0,0,243,50,0,0,0, + 151,0,116,1,0,0,0,0,0,0,0,0,124,0,100,1, + 171,2,0,0,0,0,0,0,115,11,116,3,0,0,0,0, + 0,0,0,0,100,2,171,1,0,0,0,0,0,0,130,1, + 121,0,41,3,78,114,93,0,0,0,122,32,108,111,97,100, + 101,114,32,109,117,115,116,32,100,101,102,105,110,101,32,101, + 120,101,99,95,109,111,100,117,108,101,40,41,41,2,218,7, + 104,97,115,97,116,116,114,218,9,84,121,112,101,69,114,114, + 111,114,41,1,114,92,0,0,0,115,1,0,0,0,32,114, + 19,0,0,0,218,20,95,95,99,104,101,99,107,95,101,97, + 103,101,114,95,108,111,97,100,101,114,122,31,76,97,122,121, + 76,111,97,100,101,114,46,95,95,99,104,101,99,107,95,101, + 97,103,101,114,95,108,111,97,100,101,114,236,0,0,0,115, + 29,0,0,0,128,0,228,15,22,144,118,152,125,212,15,45, + 220,18,27,208,28,62,211,18,63,208,12,63,240,3,0,16, + 46,114,20,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,52,0,0,0, + 135,0,135,1,151,0,137,0,106,1,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,137,1,171,1, + 0,0,0,0,0,0,1,0,136,0,136,1,102,2,100,1, + 132,8,83,0,41,2,122,62,67,111,110,115,116,114,117,99, + 116,32,97,32,99,97,108,108,97,98,108,101,32,119,104,105, + 99,104,32,114,101,116,117,114,110,115,32,116,104,101,32,101, + 97,103,101,114,32,108,111,97,100,101,114,32,109,97,100,101, + 32,108,97,122,121,46,99,0,0,0,0,0,0,0,0,0, + 0,0,0,7,0,0,0,31,0,0,0,243,32,0,0,0, + 149,2,151,0,2,0,137,2,2,0,137,3,124,0,105,0, + 124,1,164,1,142,1,171,1,0,0,0,0,0,0,83,0, + 114,58,0,0,0,114,79,0,0,0,41,4,114,70,0,0, + 0,218,6,107,119,97,114,103,115,218,3,99,108,115,114,92, + 0,0,0,115,4,0,0,0,32,32,128,128,114,19,0,0, + 0,250,8,60,108,97,109,98,100,97,62,122,36,76,97,122, + 121,76,111,97,100,101,114,46,102,97,99,116,111,114,121,46, + 60,108,111,99,97,108,115,62,46,60,108,97,109,98,100,97, + 62,245,0,0,0,115,22,0,0,0,248,128,0,161,115,169, + 54,176,52,208,43,66,184,54,209,43,66,211,39,67,128,0, + 114,20,0,0,0,41,1,218,31,95,76,97,122,121,76,111, + 97,100,101,114,95,95,99,104,101,99,107,95,101,97,103,101, + 114,95,108,111,97,100,101,114,41,2,114,117,0,0,0,114, + 92,0,0,0,115,2,0,0,0,96,96,114,19,0,0,0, + 218,7,102,97,99,116,111,114,121,122,18,76,97,122,121,76, + 111,97,100,101,114,46,102,97,99,116,111,114,121,241,0,0, + 0,115,25,0,0,0,249,128,0,240,6,0,9,12,215,8, + 32,209,8,32,160,22,212,8,40,220,15,67,208,8,67,114, + 20,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,52,0,0,0,151,0, + 124,0,106,1,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,124,1,171,1,0,0,0,0,0,0, + 1,0,124,1,124,0,95,1,0,0,0,0,0,0,0,0, + 121,0,114,58,0,0,0,41,2,114,119,0,0,0,114,92, + 0,0,0,41,2,114,61,0,0,0,114,92,0,0,0,115, + 2,0,0,0,32,32,114,19,0,0,0,114,62,0,0,0, + 122,19,76,97,122,121,76,111,97,100,101,114,46,95,95,105, + 110,105,116,95,95,247,0,0,0,115,23,0,0,0,128,0, + 216,8,12,215,8,33,209,8,33,160,38,212,8,41,216,22, + 28,136,4,141,11,114,20,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, + 56,0,0,0,151,0,124,0,106,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,106,3,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 124,1,171,1,0,0,0,0,0,0,83,0,114,58,0,0, + 0,41,2,114,92,0,0,0,218,13,99,114,101,97,116,101, + 95,109,111,100,117,108,101,41,2,114,61,0,0,0,114,41, + 0,0,0,115,2,0,0,0,32,32,114,19,0,0,0,114, + 123,0,0,0,122,24,76,97,122,121,76,111,97,100,101,114, + 46,99,114,101,97,116,101,95,109,111,100,117,108,101,251,0, + 0,0,115,23,0,0,0,128,0,216,15,19,143,123,137,123, + 215,15,40,209,15,40,168,20,211,15,46,208,8,46,114,20, 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,56,0,0,0,151,0,124, + 3,0,0,0,3,0,0,0,243,40,1,0,0,151,0,124, 0,106,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,106,3,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,124,1,171,1,0,0,0, - 0,0,0,83,0,114,58,0,0,0,41,2,114,90,0,0, - 0,218,13,99,114,101,97,116,101,95,109,111,100,117,108,101, - 41,2,114,61,0,0,0,114,41,0,0,0,115,2,0,0, - 0,32,32,114,19,0,0,0,114,120,0,0,0,122,24,76, - 97,122,121,76,111,97,100,101,114,46,99,114,101,97,116,101, - 95,109,111,100,117,108,101,233,0,0,0,115,23,0,0,0, - 128,0,216,15,19,143,123,137,123,215,15,40,209,15,40,168, - 20,211,15,46,208,8,46,114,20,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,240,0,0,0,151,0,124,0,106,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,124,1, - 106,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,95,0,0,0,0,0,0,0,0,0,124,0, - 106,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,124,1,95,2,0,0,0,0,0,0,0,0, - 105,0,125,2,124,1,106,6,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,106,9,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,171,0, - 0,0,0,0,0,0,124,2,100,1,60,0,0,0,124,1, - 106,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,124,2,100,2,60,0,0,0,124,2,124,1, - 106,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,95,6,0,0,0,0,0,0,0,0,116,14, - 0,0,0,0,0,0,0,0,124,1,95,5,0,0,0,0, - 0,0,0,0,121,3,41,4,122,28,77,97,107,101,32,116, - 104,101,32,109,111,100,117,108,101,32,108,111,97,100,32,108, - 97,122,105,108,121,46,114,83,0,0,0,114,86,0,0,0, - 78,41,8,114,90,0,0,0,114,36,0,0,0,218,10,95, - 95,108,111,97,100,101,114,95,95,114,83,0,0,0,218,4, - 99,111,112,121,114,86,0,0,0,114,87,0,0,0,114,81, - 0,0,0,41,3,114,61,0,0,0,114,40,0,0,0,114, - 87,0,0,0,115,3,0,0,0,32,32,32,114,19,0,0, - 0,114,91,0,0,0,122,22,76,97,122,121,76,111,97,100, - 101,114,46,101,120,101,99,95,109,111,100,117,108,101,236,0, - 0,0,115,96,0,0,0,128,0,224,33,37,167,27,161,27, - 136,6,143,15,137,15,212,8,30,216,28,32,159,75,153,75, - 136,6,212,8,25,240,10,0,24,26,136,12,216,35,41,167, - 63,161,63,215,35,55,209,35,55,211,35,57,136,12,144,90, - 209,8,32,216,36,42,215,36,52,209,36,52,136,12,144,91, - 209,8,33,216,39,51,136,6,143,15,137,15,212,8,36,220, - 27,38,136,6,213,8,24,114,20,0,0,0,78,41,11,114, - 74,0,0,0,114,75,0,0,0,114,76,0,0,0,114,77, - 0,0,0,218,12,115,116,97,116,105,99,109,101,116,104,111, - 100,114,116,0,0,0,218,11,99,108,97,115,115,109,101,116, - 104,111,100,114,117,0,0,0,114,62,0,0,0,114,120,0, - 0,0,114,91,0,0,0,114,79,0,0,0,114,20,0,0, - 0,114,19,0,0,0,114,106,0,0,0,114,106,0,0,0, - 214,0,0,0,115,62,0,0,0,132,0,225,4,85,224,5, - 17,241,2,2,5,64,1,243,3,0,6,18,240,2,2,5, - 64,1,240,8,0,6,17,241,2,3,5,68,1,243,3,0, - 6,17,240,2,3,5,68,1,242,10,2,5,29,242,8,1, - 5,47,243,6,12,5,39,114,20,0,0,0,114,106,0,0, - 0,114,58,0,0,0,41,26,114,77,0,0,0,218,4,95, - 97,98,99,114,3,0,0,0,218,10,95,98,111,111,116,115, - 116,114,97,112,114,4,0,0,0,114,5,0,0,0,114,6, - 0,0,0,114,7,0,0,0,218,19,95,98,111,111,116,115, - 116,114,97,112,95,101,120,116,101,114,110,97,108,114,8,0, - 0,0,114,9,0,0,0,114,10,0,0,0,114,11,0,0, - 0,114,12,0,0,0,114,13,0,0,0,114,16,0,0,0, - 114,34,0,0,0,114,84,0,0,0,114,17,0,0,0,114, - 30,0,0,0,114,42,0,0,0,114,54,0,0,0,114,56, - 0,0,0,114,85,0,0,0,114,81,0,0,0,114,106,0, - 0,0,114,79,0,0,0,114,20,0,0,0,114,19,0,0, - 0,250,8,60,109,111,100,117,108,101,62,114,129,0,0,0, - 1,0,0,0,115,113,0,0,0,240,3,1,1,1,217,0, - 51,221,0,24,221,0,40,221,0,37,221,0,40,221,0,34, - 221,0,45,221,0,50,221,0,50,221,0,46,221,0,50,221, - 0,56,227,0,11,219,0,10,219,0,12,242,6,2,1,61, - 242,10,12,1,55,243,30,28,1,24,243,62,42,1,24,247, - 98,1,46,1,47,241,0,46,1,47,244,98,1,43,1,28, - 144,37,215,18,34,209,18,34,244,0,43,1,28,244,92,1, - 34,1,39,144,22,245,0,34,1,39,114,20,0,0,0, + 0,0,0,0,0,124,1,106,2,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,95,0,0,0,0, + 0,0,0,0,0,124,0,106,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,124,1,95,2,0, + 0,0,0,0,0,0,0,105,0,125,2,124,1,106,6,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,106,9,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,171,0,0,0,0,0,0,0,124,2,100, + 1,60,0,0,0,124,1,106,10,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,124,2,100,2,60, + 0,0,0,116,13,0,0,0,0,0,0,0,0,106,14,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,171,0,0,0,0,0,0,0,124,2,100,3,60,0,0, + 0,100,4,124,2,100,5,60,0,0,0,124,2,124,1,106, + 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,95,8,0,0,0,0,0,0,0,0,116,18,0, + 0,0,0,0,0,0,0,124,1,95,5,0,0,0,0,0, + 0,0,0,121,6,41,7,122,28,77,97,107,101,32,116,104, + 101,32,109,111,100,117,108,101,32,108,111,97,100,32,108,97, + 122,105,108,121,46,114,86,0,0,0,114,84,0,0,0,114, + 83,0,0,0,70,114,85,0,0,0,78,41,10,114,92,0, + 0,0,114,36,0,0,0,218,10,95,95,108,111,97,100,101, + 114,95,95,114,86,0,0,0,218,4,99,111,112,121,114,84, + 0,0,0,218,9,116,104,114,101,97,100,105,110,103,218,5, + 82,76,111,99,107,114,89,0,0,0,114,81,0,0,0,41, + 3,114,61,0,0,0,114,40,0,0,0,114,89,0,0,0, + 115,3,0,0,0,32,32,32,114,19,0,0,0,114,93,0, + 0,0,122,22,76,97,122,121,76,111,97,100,101,114,46,101, + 120,101,99,95,109,111,100,117,108,101,254,0,0,0,115,123, + 0,0,0,128,0,224,33,37,167,27,161,27,136,6,143,15, + 137,15,212,8,30,216,28,32,159,75,153,75,136,6,212,8, + 25,240,10,0,24,26,136,12,216,35,41,167,63,161,63,215, + 35,55,209,35,55,211,35,57,136,12,144,90,209,8,32,216, + 36,42,215,36,52,209,36,52,136,12,144,91,209,8,33,220, + 31,40,159,127,153,127,211,31,48,136,12,144,86,209,8,28, + 216,37,42,136,12,144,92,209,8,34,216,39,51,136,6,143, + 15,137,15,212,8,36,220,27,38,136,6,213,8,24,114,20, + 0,0,0,78,41,11,114,74,0,0,0,114,75,0,0,0, + 114,76,0,0,0,114,77,0,0,0,218,12,115,116,97,116, + 105,99,109,101,116,104,111,100,114,119,0,0,0,218,11,99, + 108,97,115,115,109,101,116,104,111,100,114,120,0,0,0,114, + 62,0,0,0,114,123,0,0,0,114,93,0,0,0,114,79, + 0,0,0,114,20,0,0,0,114,19,0,0,0,114,109,0, + 0,0,114,109,0,0,0,232,0,0,0,115,62,0,0,0, + 132,0,225,4,85,224,5,17,241,2,2,5,64,1,243,3, + 0,6,18,240,2,2,5,64,1,240,8,0,6,17,241,2, + 3,5,68,1,243,3,0,6,17,240,2,3,5,68,1,242, + 10,2,5,29,242,8,1,5,47,243,6,14,5,39,114,20, + 0,0,0,114,109,0,0,0,114,58,0,0,0,41,27,114, + 77,0,0,0,218,4,95,97,98,99,114,3,0,0,0,218, + 10,95,98,111,111,116,115,116,114,97,112,114,4,0,0,0, + 114,5,0,0,0,114,6,0,0,0,114,7,0,0,0,218, + 19,95,98,111,111,116,115,116,114,97,112,95,101,120,116,101, + 114,110,97,108,114,8,0,0,0,114,9,0,0,0,114,10, + 0,0,0,114,11,0,0,0,114,12,0,0,0,114,13,0, + 0,0,114,16,0,0,0,114,34,0,0,0,114,127,0,0, + 0,114,95,0,0,0,114,17,0,0,0,114,30,0,0,0, + 114,42,0,0,0,114,54,0,0,0,114,56,0,0,0,114, + 96,0,0,0,114,81,0,0,0,114,109,0,0,0,114,79, + 0,0,0,114,20,0,0,0,114,19,0,0,0,250,8,60, + 109,111,100,117,108,101,62,114,134,0,0,0,1,0,0,0, + 115,116,0,0,0,240,3,1,1,1,217,0,51,221,0,24, + 221,0,40,221,0,37,221,0,40,221,0,34,221,0,45,221, + 0,50,221,0,50,221,0,46,221,0,50,221,0,56,227,0, + 11,219,0,10,219,0,16,219,0,12,242,6,2,1,61,242, + 10,12,1,55,243,30,28,1,24,243,62,42,1,24,247,98, + 1,46,1,47,241,0,46,1,47,244,98,1,60,1,28,144, + 37,215,18,34,209,18,34,244,0,60,1,28,244,126,1,36, + 1,39,144,22,245,0,36,1,39,114,20,0,0,0, }; diff --git a/contrib/tools/python3/Python/frozen_modules/os.h b/contrib/tools/python3/Python/frozen_modules/os.h index 455e9a3574..6051fdba34 100644 --- a/contrib/tools/python3/Python/frozen_modules/os.h +++ b/contrib/tools/python3/Python/frozen_modules/os.h @@ -871,7 +871,7 @@ const unsigned char _Py_M__os[] = { 1,199,19,65,11,72,34,1,114,158,0,0,0,169,2,218, 15,102,111,108,108,111,119,95,115,121,109,108,105,110,107,115, 218,6,100,105,114,95,102,100,99,3,0,0,0,0,0,0, - 0,2,0,0,0,8,0,0,0,35,0,0,0,243,162,1, + 0,2,0,0,0,8,0,0,0,35,0,0,0,243,176,1, 0,0,75,0,1,0,151,0,116,1,0,0,0,0,0,0, 0,0,106,2,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,100,1,124,0,124,1,124,2,124,3, @@ -880,345 +880,308 @@ const unsigned char _Py_M__os[] = { 125,0,124,3,115,14,116,7,0,0,0,0,0,0,0,0, 124,0,100,2,124,4,172,3,171,3,0,0,0,0,0,0, 125,5,116,9,0,0,0,0,0,0,0,0,124,0,116,10, - 0,0,0,0,0,0,0,0,124,4,172,4,171,3,0,0, - 0,0,0,0,125,6,9,0,124,3,115,62,116,13,0,0, - 0,0,0,0,0,0,106,14,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,127,5,106,16,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 171,1,0,0,0,0,0,0,114,69,116,19,0,0,0,0, - 0,0,0,0,106,20,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,124,5,116,7,0,0,0,0, - 0,0,0,0,124,6,171,1,0,0,0,0,0,0,171,2, - 0,0,0,0,0,0,114,38,116,23,0,0,0,0,0,0, - 0,0,124,6,124,0,116,25,0,0,0,0,0,0,0,0, - 124,0,116,26,0,0,0,0,0,0,0,0,171,2,0,0, - 0,0,0,0,124,1,124,2,124,3,171,6,0,0,0,0, - 0,0,69,0,100,5,123,3,0,0,150,3,151,2,134,5, - 5,0,1,0,116,29,0,0,0,0,0,0,0,0,124,6, - 171,1,0,0,0,0,0,0,1,0,121,5,55,0,140,16, - 35,0,116,29,0,0,0,0,0,0,0,0,124,6,171,1, - 0,0,0,0,0,0,1,0,119,0,120,3,89,0,119,1, - 173,3,119,1,41,6,97,2,5,0,0,68,105,114,101,99, - 116,111,114,121,32,116,114,101,101,32,103,101,110,101,114,97, - 116,111,114,46,10,10,32,32,32,32,32,32,32,32,84,104, - 105,115,32,98,101,104,97,118,101,115,32,101,120,97,99,116, - 108,121,32,108,105,107,101,32,119,97,108,107,40,41,44,32, - 101,120,99,101,112,116,32,116,104,97,116,32,105,116,32,121, - 105,101,108,100,115,32,97,32,52,45,116,117,112,108,101,10, - 10,32,32,32,32,32,32,32,32,32,32,32,32,100,105,114, - 112,97,116,104,44,32,100,105,114,110,97,109,101,115,44,32, - 102,105,108,101,110,97,109,101,115,44,32,100,105,114,102,100, - 10,10,32,32,32,32,32,32,32,32,96,100,105,114,112,97, - 116,104,96,44,32,96,100,105,114,110,97,109,101,115,96,32, - 97,110,100,32,96,102,105,108,101,110,97,109,101,115,96,32, - 97,114,101,32,105,100,101,110,116,105,99,97,108,32,116,111, - 32,119,97,108,107,40,41,32,111,117,116,112,117,116,44,10, - 32,32,32,32,32,32,32,32,97,110,100,32,96,100,105,114, - 102,100,96,32,105,115,32,97,32,102,105,108,101,32,100,101, - 115,99,114,105,112,116,111,114,32,114,101,102,101,114,114,105, - 110,103,32,116,111,32,116,104,101,32,100,105,114,101,99,116, - 111,114,121,32,96,100,105,114,112,97,116,104,96,46,10,10, - 32,32,32,32,32,32,32,32,84,104,101,32,97,100,118,97, - 110,116,97,103,101,32,111,102,32,102,119,97,108,107,40,41, - 32,111,118,101,114,32,119,97,108,107,40,41,32,105,115,32, - 116,104,97,116,32,105,116,39,115,32,115,97,102,101,32,97, - 103,97,105,110,115,116,32,115,121,109,108,105,110,107,10,32, - 32,32,32,32,32,32,32,114,97,99,101,115,32,40,119,104, - 101,110,32,102,111,108,108,111,119,95,115,121,109,108,105,110, - 107,115,32,105,115,32,70,97,108,115,101,41,46,10,10,32, - 32,32,32,32,32,32,32,73,102,32,100,105,114,95,102,100, - 32,105,115,32,110,111,116,32,78,111,110,101,44,32,105,116, - 32,115,104,111,117,108,100,32,98,101,32,97,32,102,105,108, - 101,32,100,101,115,99,114,105,112,116,111,114,32,111,112,101, - 110,32,116,111,32,97,32,100,105,114,101,99,116,111,114,121, - 44,10,32,32,32,32,32,32,32,32,32,32,97,110,100,32, - 116,111,112,32,115,104,111,117,108,100,32,98,101,32,114,101, - 108,97,116,105,118,101,59,32,116,111,112,32,119,105,108,108, - 32,116,104,101,110,32,98,101,32,114,101,108,97,116,105,118, - 101,32,116,111,32,116,104,97,116,32,100,105,114,101,99,116, - 111,114,121,46,10,32,32,32,32,32,32,32,32,32,32,40, - 100,105,114,95,102,100,32,105,115,32,97,108,119,97,121,115, - 32,115,117,112,112,111,114,116,101,100,32,102,111,114,32,102, - 119,97,108,107,46,41,10,10,32,32,32,32,32,32,32,32, - 67,97,117,116,105,111,110,58,10,32,32,32,32,32,32,32, - 32,83,105,110,99,101,32,102,119,97,108,107,40,41,32,121, - 105,101,108,100,115,32,102,105,108,101,32,100,101,115,99,114, - 105,112,116,111,114,115,44,32,116,104,111,115,101,32,97,114, - 101,32,111,110,108,121,32,118,97,108,105,100,32,117,110,116, - 105,108,32,116,104,101,10,32,32,32,32,32,32,32,32,110, - 101,120,116,32,105,116,101,114,97,116,105,111,110,32,115,116, - 101,112,44,32,115,111,32,121,111,117,32,115,104,111,117,108, - 100,32,100,117,112,40,41,32,116,104,101,109,32,105,102,32, - 121,111,117,32,119,97,110,116,32,116,111,32,107,101,101,112, - 32,116,104,101,109,10,32,32,32,32,32,32,32,32,102,111, - 114,32,97,32,108,111,110,103,101,114,32,112,101,114,105,111, - 100,46,10,10,32,32,32,32,32,32,32,32,69,120,97,109, - 112,108,101,58,10,10,32,32,32,32,32,32,32,32,105,109, - 112,111,114,116,32,111,115,10,32,32,32,32,32,32,32,32, - 102,111,114,32,114,111,111,116,44,32,100,105,114,115,44,32, - 102,105,108,101,115,44,32,114,111,111,116,102,100,32,105,110, - 32,111,115,46,102,119,97,108,107,40,39,112,121,116,104,111, - 110,47,76,105,98,47,101,109,97,105,108,39,41,58,10,32, - 32,32,32,32,32,32,32,32,32,32,32,112,114,105,110,116, - 40,114,111,111,116,44,32,34,99,111,110,115,117,109,101,115, - 34,44,32,101,110,100,61,34,34,41,10,32,32,32,32,32, - 32,32,32,32,32,32,32,112,114,105,110,116,40,115,117,109, - 40,111,115,46,115,116,97,116,40,110,97,109,101,44,32,100, - 105,114,95,102,100,61,114,111,111,116,102,100,41,46,115,116, - 95,115,105,122,101,32,102,111,114,32,110,97,109,101,32,105, - 110,32,102,105,108,101,115,41,44,10,32,32,32,32,32,32, - 32,32,32,32,32,32,32,32,32,32,32,32,101,110,100,61, - 34,34,41,10,32,32,32,32,32,32,32,32,32,32,32,32, - 112,114,105,110,116,40,34,98,121,116,101,115,32,105,110,34, - 44,32,108,101,110,40,102,105,108,101,115,41,44,32,34,110, - 111,110,45,100,105,114,101,99,116,111,114,121,32,102,105,108, - 101,115,34,41,10,32,32,32,32,32,32,32,32,32,32,32, - 32,105,102,32,39,67,86,83,39,32,105,110,32,100,105,114, - 115,58,10,32,32,32,32,32,32,32,32,32,32,32,32,32, - 32,32,32,100,105,114,115,46,114,101,109,111,118,101,40,39, - 67,86,83,39,41,32,32,35,32,100,111,110,39,116,32,118, - 105,115,105,116,32,67,86,83,32,100,105,114,101,99,116,111, - 114,105,101,115,10,32,32,32,32,32,32,32,32,122,8,111, - 115,46,102,119,97,108,107,70,114,159,0,0,0,169,1,114, - 161,0,0,0,78,41,15,114,130,0,0,0,114,131,0,0, - 0,114,132,0,0,0,114,57,0,0,0,114,69,0,0,0, - 218,8,79,95,82,68,79,78,76,89,218,2,115,116,218,7, - 83,95,73,83,68,73,82,218,7,115,116,95,109,111,100,101, - 114,12,0,0,0,218,8,115,97,109,101,115,116,97,116,218, - 6,95,102,119,97,108,107,114,115,0,0,0,114,116,0,0, - 0,218,5,99,108,111,115,101,41,7,114,143,0,0,0,114, - 144,0,0,0,114,145,0,0,0,114,160,0,0,0,114,161, - 0,0,0,218,7,111,114,105,103,95,115,116,218,5,116,111, - 112,102,100,115,7,0,0,0,32,32,32,32,32,32,32,114, - 25,0,0,0,218,5,102,119,97,108,107,114,173,0,0,0, - 181,1,0,0,115,180,0,0,0,232,0,248,128,0,244,66, - 1,0,9,12,143,9,137,9,144,42,152,99,160,55,168,71, - 176,95,192,102,212,8,77,220,14,20,144,83,139,107,136,3, - 241,6,0,16,31,220,22,26,152,51,176,5,184,102,212,22, - 69,136,71,220,16,20,144,83,156,40,168,54,212,16,50,136, - 5,240,2,6,9,25,217,16,31,164,66,167,74,161,74,168, - 119,175,127,169,127,212,36,63,220,36,40,167,77,161,77,176, - 39,188,52,192,5,187,59,212,36,71,220,27,33,160,37,168, - 19,172,106,184,19,188,101,211,46,68,216,34,41,168,55,176, - 79,243,3,1,28,69,1,247,0,1,17,69,1,240,0,1, - 17,69,1,244,6,0,13,18,144,37,141,76,240,7,1,17, - 69,1,249,244,6,0,13,18,144,37,141,76,252,115,49,0, - 0,0,130,65,8,67,15,1,193,11,65,33,66,63,0,194, - 44,1,66,61,4,194,45,4,66,63,0,194,49,12,67,15, - 1,194,61,1,66,63,0,194,63,13,67,12,3,195,12,3, - 67,15,1,99,6,0,0,0,0,0,0,0,0,0,0,0, - 9,0,0,0,35,0,0,0,243,126,3,0,0,75,0,1, - 0,151,0,116,1,0,0,0,0,0,0,0,0,124,0,171, - 1,0,0,0,0,0,0,125,6,103,0,125,7,103,0,125, - 8,124,3,115,2,124,5,114,2,100,0,110,1,103,0,125, - 9,124,6,68,0,93,98,0,0,125,10,124,10,106,2,0, + 0,0,0,0,0,0,0,0,116,12,0,0,0,0,0,0, + 0,0,122,7,0,0,124,4,172,4,171,3,0,0,0,0, + 0,0,125,6,9,0,124,3,115,62,116,15,0,0,0,0, + 0,0,0,0,106,16,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,127,5,106,18,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,171,1, + 0,0,0,0,0,0,114,69,116,21,0,0,0,0,0,0, + 0,0,106,22,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,124,5,116,7,0,0,0,0,0,0, + 0,0,124,6,171,1,0,0,0,0,0,0,171,2,0,0, + 0,0,0,0,114,38,116,25,0,0,0,0,0,0,0,0, + 124,6,124,0,116,27,0,0,0,0,0,0,0,0,124,0, + 116,28,0,0,0,0,0,0,0,0,171,2,0,0,0,0, + 0,0,124,1,124,2,124,3,171,6,0,0,0,0,0,0, + 69,0,100,5,123,3,0,0,150,3,151,2,134,5,5,0, + 1,0,116,31,0,0,0,0,0,0,0,0,124,6,171,1, + 0,0,0,0,0,0,1,0,121,5,55,0,140,16,35,0, + 116,31,0,0,0,0,0,0,0,0,124,6,171,1,0,0, + 0,0,0,0,1,0,119,0,120,3,89,0,119,1,173,3, + 119,1,41,6,97,2,5,0,0,68,105,114,101,99,116,111, + 114,121,32,116,114,101,101,32,103,101,110,101,114,97,116,111, + 114,46,10,10,32,32,32,32,32,32,32,32,84,104,105,115, + 32,98,101,104,97,118,101,115,32,101,120,97,99,116,108,121, + 32,108,105,107,101,32,119,97,108,107,40,41,44,32,101,120, + 99,101,112,116,32,116,104,97,116,32,105,116,32,121,105,101, + 108,100,115,32,97,32,52,45,116,117,112,108,101,10,10,32, + 32,32,32,32,32,32,32,32,32,32,32,100,105,114,112,97, + 116,104,44,32,100,105,114,110,97,109,101,115,44,32,102,105, + 108,101,110,97,109,101,115,44,32,100,105,114,102,100,10,10, + 32,32,32,32,32,32,32,32,96,100,105,114,112,97,116,104, + 96,44,32,96,100,105,114,110,97,109,101,115,96,32,97,110, + 100,32,96,102,105,108,101,110,97,109,101,115,96,32,97,114, + 101,32,105,100,101,110,116,105,99,97,108,32,116,111,32,119, + 97,108,107,40,41,32,111,117,116,112,117,116,44,10,32,32, + 32,32,32,32,32,32,97,110,100,32,96,100,105,114,102,100, + 96,32,105,115,32,97,32,102,105,108,101,32,100,101,115,99, + 114,105,112,116,111,114,32,114,101,102,101,114,114,105,110,103, + 32,116,111,32,116,104,101,32,100,105,114,101,99,116,111,114, + 121,32,96,100,105,114,112,97,116,104,96,46,10,10,32,32, + 32,32,32,32,32,32,84,104,101,32,97,100,118,97,110,116, + 97,103,101,32,111,102,32,102,119,97,108,107,40,41,32,111, + 118,101,114,32,119,97,108,107,40,41,32,105,115,32,116,104, + 97,116,32,105,116,39,115,32,115,97,102,101,32,97,103,97, + 105,110,115,116,32,115,121,109,108,105,110,107,10,32,32,32, + 32,32,32,32,32,114,97,99,101,115,32,40,119,104,101,110, + 32,102,111,108,108,111,119,95,115,121,109,108,105,110,107,115, + 32,105,115,32,70,97,108,115,101,41,46,10,10,32,32,32, + 32,32,32,32,32,73,102,32,100,105,114,95,102,100,32,105, + 115,32,110,111,116,32,78,111,110,101,44,32,105,116,32,115, + 104,111,117,108,100,32,98,101,32,97,32,102,105,108,101,32, + 100,101,115,99,114,105,112,116,111,114,32,111,112,101,110,32, + 116,111,32,97,32,100,105,114,101,99,116,111,114,121,44,10, + 32,32,32,32,32,32,32,32,32,32,97,110,100,32,116,111, + 112,32,115,104,111,117,108,100,32,98,101,32,114,101,108,97, + 116,105,118,101,59,32,116,111,112,32,119,105,108,108,32,116, + 104,101,110,32,98,101,32,114,101,108,97,116,105,118,101,32, + 116,111,32,116,104,97,116,32,100,105,114,101,99,116,111,114, + 121,46,10,32,32,32,32,32,32,32,32,32,32,40,100,105, + 114,95,102,100,32,105,115,32,97,108,119,97,121,115,32,115, + 117,112,112,111,114,116,101,100,32,102,111,114,32,102,119,97, + 108,107,46,41,10,10,32,32,32,32,32,32,32,32,67,97, + 117,116,105,111,110,58,10,32,32,32,32,32,32,32,32,83, + 105,110,99,101,32,102,119,97,108,107,40,41,32,121,105,101, + 108,100,115,32,102,105,108,101,32,100,101,115,99,114,105,112, + 116,111,114,115,44,32,116,104,111,115,101,32,97,114,101,32, + 111,110,108,121,32,118,97,108,105,100,32,117,110,116,105,108, + 32,116,104,101,10,32,32,32,32,32,32,32,32,110,101,120, + 116,32,105,116,101,114,97,116,105,111,110,32,115,116,101,112, + 44,32,115,111,32,121,111,117,32,115,104,111,117,108,100,32, + 100,117,112,40,41,32,116,104,101,109,32,105,102,32,121,111, + 117,32,119,97,110,116,32,116,111,32,107,101,101,112,32,116, + 104,101,109,10,32,32,32,32,32,32,32,32,102,111,114,32, + 97,32,108,111,110,103,101,114,32,112,101,114,105,111,100,46, + 10,10,32,32,32,32,32,32,32,32,69,120,97,109,112,108, + 101,58,10,10,32,32,32,32,32,32,32,32,105,109,112,111, + 114,116,32,111,115,10,32,32,32,32,32,32,32,32,102,111, + 114,32,114,111,111,116,44,32,100,105,114,115,44,32,102,105, + 108,101,115,44,32,114,111,111,116,102,100,32,105,110,32,111, + 115,46,102,119,97,108,107,40,39,112,121,116,104,111,110,47, + 76,105,98,47,101,109,97,105,108,39,41,58,10,32,32,32, + 32,32,32,32,32,32,32,32,32,112,114,105,110,116,40,114, + 111,111,116,44,32,34,99,111,110,115,117,109,101,115,34,44, + 32,101,110,100,61,34,34,41,10,32,32,32,32,32,32,32, + 32,32,32,32,32,112,114,105,110,116,40,115,117,109,40,111, + 115,46,115,116,97,116,40,110,97,109,101,44,32,100,105,114, + 95,102,100,61,114,111,111,116,102,100,41,46,115,116,95,115, + 105,122,101,32,102,111,114,32,110,97,109,101,32,105,110,32, + 102,105,108,101,115,41,44,10,32,32,32,32,32,32,32,32, + 32,32,32,32,32,32,32,32,32,32,101,110,100,61,34,34, + 41,10,32,32,32,32,32,32,32,32,32,32,32,32,112,114, + 105,110,116,40,34,98,121,116,101,115,32,105,110,34,44,32, + 108,101,110,40,102,105,108,101,115,41,44,32,34,110,111,110, + 45,100,105,114,101,99,116,111,114,121,32,102,105,108,101,115, + 34,41,10,32,32,32,32,32,32,32,32,32,32,32,32,105, + 102,32,39,67,86,83,39,32,105,110,32,100,105,114,115,58, + 10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, + 32,100,105,114,115,46,114,101,109,111,118,101,40,39,67,86, + 83,39,41,32,32,35,32,100,111,110,39,116,32,118,105,115, + 105,116,32,67,86,83,32,100,105,114,101,99,116,111,114,105, + 101,115,10,32,32,32,32,32,32,32,32,122,8,111,115,46, + 102,119,97,108,107,70,114,159,0,0,0,169,1,114,161,0, + 0,0,78,41,16,114,130,0,0,0,114,131,0,0,0,114, + 132,0,0,0,114,57,0,0,0,114,69,0,0,0,218,8, + 79,95,82,68,79,78,76,89,218,10,79,95,78,79,78,66, + 76,79,67,75,218,2,115,116,218,7,83,95,73,83,68,73, + 82,218,7,115,116,95,109,111,100,101,114,12,0,0,0,218, + 8,115,97,109,101,115,116,97,116,218,6,95,102,119,97,108, + 107,114,115,0,0,0,114,116,0,0,0,218,5,99,108,111, + 115,101,41,7,114,143,0,0,0,114,144,0,0,0,114,145, + 0,0,0,114,160,0,0,0,114,161,0,0,0,218,7,111, + 114,105,103,95,115,116,218,5,116,111,112,102,100,115,7,0, + 0,0,32,32,32,32,32,32,32,114,25,0,0,0,218,5, + 102,119,97,108,107,114,174,0,0,0,181,1,0,0,115,185, + 0,0,0,232,0,248,128,0,244,66,1,0,9,12,143,9, + 137,9,144,42,152,99,160,55,168,71,176,95,192,102,212,8, + 77,220,14,20,144,83,139,107,136,3,241,6,0,16,31,220, + 22,26,152,51,176,5,184,102,212,22,69,136,71,220,16,20, + 144,83,156,40,164,90,209,26,47,184,6,212,16,63,136,5, + 240,2,6,9,25,217,16,31,164,66,167,74,161,74,168,119, + 175,127,169,127,212,36,63,220,36,40,167,77,161,77,176,39, + 188,52,192,5,187,59,212,36,71,220,27,33,160,37,168,19, + 172,106,184,19,188,101,211,46,68,216,34,41,168,55,176,79, + 243,3,1,28,69,1,247,0,1,17,69,1,240,0,1,17, + 69,1,244,6,0,13,18,144,37,141,76,240,7,1,17,69, + 1,249,244,6,0,13,18,144,37,141,76,252,115,49,0,0, + 0,130,65,15,67,22,1,193,18,65,33,67,6,0,194,51, + 1,67,4,4,194,52,4,67,6,0,194,56,12,67,22,1, + 195,4,1,67,6,0,195,6,13,67,19,3,195,19,3,67, + 22,1,99,6,0,0,0,0,0,0,0,0,0,0,0,9, + 0,0,0,35,0,0,0,243,140,3,0,0,75,0,1,0, + 151,0,116,1,0,0,0,0,0,0,0,0,124,0,171,1, + 0,0,0,0,0,0,125,6,103,0,125,7,103,0,125,8, + 124,3,115,2,124,5,114,2,100,0,110,1,103,0,125,9, + 124,6,68,0,93,98,0,0,125,10,124,10,106,2,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,125,11,124,2,114,11,116,5,0,0,0,0,0,0,0, - 0,124,11,171,1,0,0,0,0,0,0,125,11,9,0,124, - 10,106,7,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,171,0,0,0,0,0,0,0,114,37,124, - 7,106,9,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,124,11,171,1,0,0,0,0,0,0,1, - 0,124,9,129,35,124,9,106,9,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,124,10,171,1,0, - 0,0,0,0,0,1,0,110,17,124,8,106,9,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,124, - 11,171,1,0,0,0,0,0,0,1,0,140,100,4,0,124, - 3,114,8,124,1,124,7,124,8,124,0,102,4,150,1,151, - 1,1,0,124,9,128,2,124,7,110,11,116,15,0,0,0, - 0,0,0,0,0,124,7,124,9,171,2,0,0,0,0,0, - 0,68,0,93,158,0,0,125,11,9,0,124,5,115,44,124, - 3,114,15,116,17,0,0,0,0,0,0,0,0,124,11,124, - 0,100,1,172,2,171,3,0,0,0,0,0,0,125,12,110, - 27,124,9,128,2,74,0,130,1,124,11,92,2,0,0,125, - 11,125,10,124,10,106,17,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,100,1,172,3,171,1,0, - 0,0,0,0,0,125,12,116,19,0,0,0,0,0,0,0, - 0,124,11,116,20,0,0,0,0,0,0,0,0,124,0,172, - 4,171,3,0,0,0,0,0,0,125,13,9,0,124,5,115, - 31,116,23,0,0,0,0,0,0,0,0,106,24,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,127, - 12,116,17,0,0,0,0,0,0,0,0,124,13,171,1,0, - 0,0,0,0,0,171,2,0,0,0,0,0,0,114,46,116, - 23,0,0,0,0,0,0,0,0,106,26,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,124,1,124, - 11,171,2,0,0,0,0,0,0,125,15,116,29,0,0,0, - 0,0,0,0,0,124,13,124,15,124,2,124,3,124,4,124, - 5,171,6,0,0,0,0,0,0,69,0,100,0,123,3,0, - 0,150,3,151,2,134,5,5,0,1,0,116,31,0,0,0, - 0,0,0,0,0,124,13,171,1,0,0,0,0,0,0,1, - 0,140,160,4,0,124,3,115,9,124,1,124,7,124,8,124, - 0,102,4,150,1,151,1,1,0,121,0,121,0,35,0,116, - 10,0,0,0,0,0,0,0,0,36,0,114,54,1,0,9, - 0,124,10,106,13,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,171,0,0,0,0,0,0,0,114, - 17,124,8,106,9,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,124,11,171,1,0,0,0,0,0, - 0,1,0,110,15,35,0,116,10,0,0,0,0,0,0,0, - 0,36,0,114,3,1,0,89,0,110,4,119,0,120,3,89, - 0,119,1,89,0,144,1,140,106,119,0,120,3,89,0,119, - 1,35,0,116,10,0,0,0,0,0,0,0,0,36,0,114, - 21,125,14,124,4,129,8,2,0,124,4,124,14,171,1,0, - 0,0,0,0,0,1,0,89,0,100,0,125,14,126,14,144, - 1,140,8,100,0,125,14,126,14,119,1,119,0,120,3,89, - 0,119,1,55,0,140,128,35,0,116,31,0,0,0,0,0, - 0,0,0,124,13,171,1,0,0,0,0,0,0,1,0,119, - 0,120,3,89,0,119,1,173,3,119,1,41,5,78,70,41, - 2,114,161,0,0,0,114,160,0,0,0,41,1,114,160,0, - 0,0,114,163,0,0,0,41,16,114,86,0,0,0,114,11, - 0,0,0,114,17,0,0,0,114,139,0,0,0,114,140,0, - 0,0,114,117,0,0,0,114,141,0,0,0,218,3,122,105, - 112,114,57,0,0,0,114,69,0,0,0,114,164,0,0,0, - 114,12,0,0,0,114,168,0,0,0,114,134,0,0,0,114, - 169,0,0,0,114,170,0,0,0,41,16,114,172,0,0,0, - 218,7,116,111,112,112,97,116,104,218,7,105,115,98,121,116, - 101,115,114,144,0,0,0,114,145,0,0,0,114,160,0,0, - 0,114,151,0,0,0,114,148,0,0,0,114,149,0,0,0, - 218,7,101,110,116,114,105,101,115,114,154,0,0,0,114,11, - 0,0,0,114,171,0,0,0,218,5,100,105,114,102,100,218, - 3,101,114,114,218,7,100,105,114,112,97,116,104,115,16,0, - 0,0,32,32,32,32,32,32,32,32,32,32,32,32,32,32, - 32,32,114,25,0,0,0,114,169,0,0,0,114,169,0,0, - 0,229,1,0,0,115,219,1,0,0,232,0,248,128,0,244, - 10,0,22,29,152,85,147,94,136,10,216,15,17,136,4,216, - 18,20,136,7,217,26,33,161,95,145,36,184,34,136,7,216, - 21,31,242,0,17,9,25,136,69,216,19,24,151,58,145,58, - 136,68,217,15,22,220,23,31,160,4,147,126,144,4,240,2, - 13,13,25,216,19,24,151,60,145,60,148,62,216,20,24,151, - 75,145,75,160,4,212,20,37,216,23,30,208,23,42,216,24, - 31,159,14,153,14,160,117,213,24,45,224,20,27,151,78,145, - 78,160,52,212,20,40,248,240,21,17,9,25,241,38,0,12, - 19,216,18,25,152,52,160,23,168,37,208,18,47,210,12,47, - 224,28,35,152,79,145,68,180,19,176,84,184,55,211,49,67, - 242,0,20,9,29,136,68,240,2,12,13,25,217,23,38,217, - 23,30,220,34,38,160,116,176,69,200,53,212,34,81,153,7, - 224,31,38,208,31,50,209,24,50,216,38,42,153,11,152,4, - 152,101,216,34,39,167,42,161,42,184,85,160,42,211,34,67, - 152,7,220,24,28,152,84,164,56,176,69,212,24,58,144,5, - 240,10,6,13,29,217,19,34,164,100,167,109,161,109,176,71, - 188,84,192,37,187,91,212,38,73,220,30,34,159,105,153,105, - 168,7,176,20,211,30,54,144,71,220,31,37,160,101,168,87, - 176,103,216,38,45,168,119,184,15,243,3,1,32,73,1,247, - 0,1,21,73,1,240,0,1,21,73,1,244,6,0,17,22, - 144,101,149,12,240,41,20,9,29,241,44,0,16,23,216,18, - 25,152,52,160,23,168,37,208,18,47,211,12,47,240,3,0, - 16,23,248,244,67,1,0,20,27,242,0,6,13,25,240,2, - 5,17,25,224,23,28,215,23,39,209,23,39,212,23,41,216, - 24,31,159,14,153,14,160,116,212,24,44,249,220,23,30,242, - 0,1,17,25,217,20,24,240,3,1,17,25,253,240,11,6, - 13,25,251,244,42,0,20,27,242,0,3,13,25,216,19,26, - 208,19,38,217,20,27,152,67,148,76,221,16,24,251,240,7, - 3,13,25,250,240,14,1,21,73,1,249,244,6,0,17,22, - 144,101,149,12,252,115,157,0,0,0,130,54,70,61,1,185, - 65,6,69,8,2,193,63,31,70,61,1,194,31,65,0,70, - 10,2,195,32,65,10,70,45,2,196,42,1,70,43,6,196, - 43,4,70,45,2,196,47,25,70,61,1,197,8,9,70,7, - 5,197,18,33,69,52,4,197,51,1,70,7,5,197,52,9, - 70,0,7,197,61,2,70,7,5,197,63,1,70,0,7,198, - 0,3,70,7,5,198,3,3,70,61,1,198,6,1,70,7, - 5,198,7,3,70,61,1,198,10,9,70,40,5,198,19,10, - 70,35,5,198,29,6,70,61,1,198,35,5,70,40,5,198, - 40,3,70,61,1,198,43,1,70,45,2,198,45,13,70,58, - 5,198,58,3,70,61,1,114,173,0,0,0,99,1,0,0, - 0,0,0,0,0,0,0,0,0,4,0,0,0,7,0,0, - 0,243,28,0,0,0,151,0,116,1,0,0,0,0,0,0, - 0,0,124,0,124,1,171,2,0,0,0,0,0,0,1,0, - 121,1,41,2,122,112,101,120,101,99,108,40,102,105,108,101, - 44,32,42,97,114,103,115,41,10,10,32,32,32,32,69,120, - 101,99,117,116,101,32,116,104,101,32,101,120,101,99,117,116, - 97,98,108,101,32,102,105,108,101,32,119,105,116,104,32,97, - 114,103,117,109,101,110,116,32,108,105,115,116,32,97,114,103, - 115,44,32,114,101,112,108,97,99,105,110,103,32,116,104,101, - 10,32,32,32,32,99,117,114,114,101,110,116,32,112,114,111, - 99,101,115,115,46,32,78,41,1,218,5,101,120,101,99,118, - 169,2,218,4,102,105,108,101,218,4,97,114,103,115,115,2, - 0,0,0,32,32,114,25,0,0,0,218,5,101,120,101,99, - 108,114,187,0,0,0,31,2,0,0,115,14,0,0,0,128, - 0,244,10,0,5,10,136,36,144,4,213,4,21,114,27,0, - 0,0,99,1,0,0,0,0,0,0,0,0,0,0,0,6, - 0,0,0,7,0,0,0,243,46,0,0,0,151,0,124,1, - 100,1,25,0,0,0,125,2,116,1,0,0,0,0,0,0, - 0,0,124,0,124,1,100,2,100,1,26,0,124,2,171,3, - 0,0,0,0,0,0,1,0,121,2,41,3,122,138,101,120, - 101,99,108,101,40,102,105,108,101,44,32,42,97,114,103,115, - 44,32,101,110,118,41,10,10,32,32,32,32,69,120,101,99, - 117,116,101,32,116,104,101,32,101,120,101,99,117,116,97,98, - 108,101,32,102,105,108,101,32,119,105,116,104,32,97,114,103, - 117,109,101,110,116,32,108,105,115,116,32,97,114,103,115,32, - 97,110,100,10,32,32,32,32,101,110,118,105,114,111,110,109, - 101,110,116,32,101,110,118,44,32,114,101,112,108,97,99,105, - 110,103,32,116,104,101,32,99,117,114,114,101,110,116,32,112, - 114,111,99,101,115,115,46,32,233,255,255,255,255,78,41,1, - 114,88,0,0,0,169,3,114,185,0,0,0,114,186,0,0, - 0,218,3,101,110,118,115,3,0,0,0,32,32,32,114,25, - 0,0,0,218,6,101,120,101,99,108,101,114,192,0,0,0, - 38,2,0,0,115,31,0,0,0,128,0,240,10,0,11,15, - 136,114,137,40,128,67,220,4,10,136,52,144,20,144,99,144, - 114,144,25,152,67,213,4,32,114,27,0,0,0,99,1,0, - 0,0,0,0,0,0,0,0,0,0,4,0,0,0,7,0, - 0,0,243,28,0,0,0,151,0,116,1,0,0,0,0,0, - 0,0,0,124,0,124,1,171,2,0,0,0,0,0,0,1, - 0,121,1,41,2,122,149,101,120,101,99,108,112,40,102,105, - 108,101,44,32,42,97,114,103,115,41,10,10,32,32,32,32, - 69,120,101,99,117,116,101,32,116,104,101,32,101,120,101,99, - 117,116,97,98,108,101,32,102,105,108,101,32,40,119,104,105, - 99,104,32,105,115,32,115,101,97,114,99,104,101,100,32,102, - 111,114,32,97,108,111,110,103,32,36,80,65,84,72,41,10, - 32,32,32,32,119,105,116,104,32,97,114,103,117,109,101,110, - 116,32,108,105,115,116,32,97,114,103,115,44,32,114,101,112, - 108,97,99,105,110,103,32,116,104,101,32,99,117,114,114,101, - 110,116,32,112,114,111,99,101,115,115,46,32,78,41,1,218, - 6,101,120,101,99,118,112,114,184,0,0,0,115,2,0,0, - 0,32,32,114,25,0,0,0,218,6,101,120,101,99,108,112, - 114,195,0,0,0,46,2,0,0,115,14,0,0,0,128,0, - 244,10,0,5,11,136,52,144,20,213,4,22,114,27,0,0, - 0,99,1,0,0,0,0,0,0,0,0,0,0,0,6,0, - 0,0,7,0,0,0,243,46,0,0,0,151,0,124,1,100, - 1,25,0,0,0,125,2,116,1,0,0,0,0,0,0,0, - 0,124,0,124,1,100,2,100,1,26,0,124,2,171,3,0, - 0,0,0,0,0,1,0,121,2,41,3,122,179,101,120,101, - 99,108,112,101,40,102,105,108,101,44,32,42,97,114,103,115, - 44,32,101,110,118,41,10,10,32,32,32,32,69,120,101,99, - 117,116,101,32,116,104,101,32,101,120,101,99,117,116,97,98, - 108,101,32,102,105,108,101,32,40,119,104,105,99,104,32,105, - 115,32,115,101,97,114,99,104,101,100,32,102,111,114,32,97, - 108,111,110,103,32,36,80,65,84,72,41,10,32,32,32,32, - 119,105,116,104,32,97,114,103,117,109,101,110,116,32,108,105, - 115,116,32,97,114,103,115,32,97,110,100,32,101,110,118,105, - 114,111,110,109,101,110,116,32,101,110,118,44,32,114,101,112, - 108,97,99,105,110,103,32,116,104,101,32,99,117,114,114,101, - 110,116,10,32,32,32,32,112,114,111,99,101,115,115,46,32, - 114,189,0,0,0,78,41,1,218,7,101,120,101,99,118,112, - 101,114,190,0,0,0,115,3,0,0,0,32,32,32,114,25, - 0,0,0,218,7,101,120,101,99,108,112,101,114,198,0,0, - 0,53,2,0,0,115,31,0,0,0,128,0,240,12,0,11, - 15,136,114,137,40,128,67,220,4,11,136,68,144,36,144,115, - 152,2,144,41,152,83,213,4,33,114,27,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,28,0,0,0,151,0,116,1,0,0,0,0, - 0,0,0,0,124,0,124,1,171,2,0,0,0,0,0,0, - 1,0,121,1,41,2,122,192,101,120,101,99,118,112,40,102, - 105,108,101,44,32,97,114,103,115,41,10,10,32,32,32,32, - 69,120,101,99,117,116,101,32,116,104,101,32,101,120,101,99, - 117,116,97,98,108,101,32,102,105,108,101,32,40,119,104,105, - 99,104,32,105,115,32,115,101,97,114,99,104,101,100,32,102, - 111,114,32,97,108,111,110,103,32,36,80,65,84,72,41,10, - 32,32,32,32,119,105,116,104,32,97,114,103,117,109,101,110, + 125,11,124,2,114,11,116,5,0,0,0,0,0,0,0,0, + 124,11,171,1,0,0,0,0,0,0,125,11,9,0,124,10, + 106,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,171,0,0,0,0,0,0,0,114,37,124,7, + 106,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,124,11,171,1,0,0,0,0,0,0,1,0, + 124,9,129,35,124,9,106,9,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,124,10,171,1,0,0, + 0,0,0,0,1,0,110,17,124,8,106,9,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,124,11, + 171,1,0,0,0,0,0,0,1,0,140,100,4,0,124,3, + 114,8,124,1,124,7,124,8,124,0,102,4,150,1,151,1, + 1,0,124,9,128,2,124,7,110,11,116,15,0,0,0,0, + 0,0,0,0,124,7,124,9,171,2,0,0,0,0,0,0, + 68,0,93,165,0,0,125,11,9,0,124,5,115,44,124,3, + 114,15,116,17,0,0,0,0,0,0,0,0,124,11,124,0, + 100,1,172,2,171,3,0,0,0,0,0,0,125,12,110,27, + 124,9,128,2,74,0,130,1,124,11,92,2,0,0,125,11, + 125,10,124,10,106,17,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,100,1,172,3,171,1,0,0, + 0,0,0,0,125,12,116,19,0,0,0,0,0,0,0,0, + 124,11,116,20,0,0,0,0,0,0,0,0,116,22,0,0, + 0,0,0,0,0,0,122,7,0,0,124,0,172,4,171,3, + 0,0,0,0,0,0,125,13,9,0,124,5,115,31,116,25, + 0,0,0,0,0,0,0,0,106,26,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,127,12,116,17, + 0,0,0,0,0,0,0,0,124,13,171,1,0,0,0,0, + 0,0,171,2,0,0,0,0,0,0,114,46,116,25,0,0, + 0,0,0,0,0,0,106,28,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,124,1,124,11,171,2, + 0,0,0,0,0,0,125,15,116,31,0,0,0,0,0,0, + 0,0,124,13,124,15,124,2,124,3,124,4,124,5,171,6, + 0,0,0,0,0,0,69,0,100,0,123,3,0,0,150,3, + 151,2,134,5,5,0,1,0,116,33,0,0,0,0,0,0, + 0,0,124,13,171,1,0,0,0,0,0,0,1,0,140,167, + 4,0,124,3,115,9,124,1,124,7,124,8,124,0,102,4, + 150,1,151,1,1,0,121,0,121,0,35,0,116,10,0,0, + 0,0,0,0,0,0,36,0,114,54,1,0,9,0,124,10, + 106,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,171,0,0,0,0,0,0,0,114,17,124,8, + 106,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,124,11,171,1,0,0,0,0,0,0,1,0, + 110,15,35,0,116,10,0,0,0,0,0,0,0,0,36,0, + 114,3,1,0,89,0,110,4,119,0,120,3,89,0,119,1, + 89,0,144,1,140,113,119,0,120,3,89,0,119,1,35,0, + 116,10,0,0,0,0,0,0,0,0,36,0,114,21,125,14, + 124,4,129,8,2,0,124,4,124,14,171,1,0,0,0,0, + 0,0,1,0,89,0,100,0,125,14,126,14,144,1,140,15, + 100,0,125,14,126,14,119,1,119,0,120,3,89,0,119,1, + 55,0,140,128,35,0,116,33,0,0,0,0,0,0,0,0, + 124,13,171,1,0,0,0,0,0,0,1,0,119,0,120,3, + 89,0,119,1,173,3,119,1,41,5,78,70,41,2,114,161, + 0,0,0,114,160,0,0,0,41,1,114,160,0,0,0,114, + 163,0,0,0,41,17,114,86,0,0,0,114,11,0,0,0, + 114,17,0,0,0,114,139,0,0,0,114,140,0,0,0,114, + 117,0,0,0,114,141,0,0,0,218,3,122,105,112,114,57, + 0,0,0,114,69,0,0,0,114,164,0,0,0,114,165,0, + 0,0,114,12,0,0,0,114,169,0,0,0,114,134,0,0, + 0,114,170,0,0,0,114,171,0,0,0,41,16,114,173,0, + 0,0,218,7,116,111,112,112,97,116,104,218,7,105,115,98, + 121,116,101,115,114,144,0,0,0,114,145,0,0,0,114,160, + 0,0,0,114,151,0,0,0,114,148,0,0,0,114,149,0, + 0,0,218,7,101,110,116,114,105,101,115,114,154,0,0,0, + 114,11,0,0,0,114,172,0,0,0,218,5,100,105,114,102, + 100,218,3,101,114,114,218,7,100,105,114,112,97,116,104,115, + 16,0,0,0,32,32,32,32,32,32,32,32,32,32,32,32, + 32,32,32,32,114,25,0,0,0,114,170,0,0,0,114,170, + 0,0,0,229,1,0,0,115,227,1,0,0,232,0,248,128, + 0,244,10,0,22,29,152,85,147,94,136,10,216,15,17,136, + 4,216,18,20,136,7,217,26,33,161,95,145,36,184,34,136, + 7,216,21,31,242,0,17,9,25,136,69,216,19,24,151,58, + 145,58,136,68,217,15,22,220,23,31,160,4,147,126,144,4, + 240,2,13,13,25,216,19,24,151,60,145,60,148,62,216,20, + 24,151,75,145,75,160,4,212,20,37,216,23,30,208,23,42, + 216,24,31,159,14,153,14,160,117,213,24,45,224,20,27,151, + 78,145,78,160,52,212,20,40,248,240,21,17,9,25,241,38, + 0,12,19,216,18,25,152,52,160,23,168,37,208,18,47,210, + 12,47,224,28,35,152,79,145,68,180,19,176,84,184,55,211, + 49,67,242,0,20,9,29,136,68,240,2,12,13,25,217,23, + 38,217,23,30,220,34,38,160,116,176,69,200,53,212,34,81, + 153,7,224,31,38,208,31,50,208,24,50,208,31,50,216,38, + 42,153,11,152,4,152,101,216,34,39,167,42,161,42,184,85, + 160,42,211,34,67,152,7,220,24,28,152,84,164,56,172,106, + 209,35,56,192,21,212,24,71,144,5,240,10,6,13,29,217, + 19,34,164,100,167,109,161,109,176,71,188,84,192,37,187,91, + 212,38,73,220,30,34,159,105,153,105,168,7,176,20,211,30, + 54,144,71,220,31,37,160,101,168,87,176,103,216,38,45,168, + 119,184,15,243,3,1,32,73,1,247,0,1,21,73,1,240, + 0,1,21,73,1,244,6,0,17,22,144,101,149,12,240,41, + 20,9,29,241,44,0,16,23,216,18,25,152,52,160,23,168, + 37,208,18,47,211,12,47,240,3,0,16,23,248,244,67,1, + 0,20,27,242,0,6,13,25,240,2,5,17,25,224,23,28, + 215,23,39,209,23,39,212,23,41,216,24,31,159,14,153,14, + 160,116,212,24,44,249,220,23,30,242,0,1,17,25,217,20, + 24,240,3,1,17,25,253,240,11,6,13,25,251,244,42,0, + 20,27,242,0,3,13,25,216,19,26,208,19,38,217,20,27, + 152,67,148,76,221,16,24,251,240,7,3,13,25,250,240,14, + 1,21,73,1,249,244,6,0,17,22,144,101,149,12,252,115, + 157,0,0,0,130,54,71,4,1,185,65,6,69,15,2,193, + 63,31,71,4,1,194,31,65,7,70,17,2,195,39,65,10, + 70,52,2,196,49,1,70,50,6,196,50,4,70,52,2,196, + 54,25,71,4,1,197,15,9,70,14,5,197,25,33,69,59, + 4,197,58,1,70,14,5,197,59,9,70,7,7,198,4,2, + 70,14,5,198,6,1,70,7,7,198,7,3,70,14,5,198, + 10,3,71,4,1,198,13,1,70,14,5,198,14,3,71,4, + 1,198,17,9,70,47,5,198,26,10,70,42,5,198,36,6, + 71,4,1,198,42,5,70,47,5,198,47,3,71,4,1,198, + 50,1,70,52,2,198,52,13,71,1,5,199,1,3,71,4, + 1,114,174,0,0,0,99,1,0,0,0,0,0,0,0,0, + 0,0,0,4,0,0,0,7,0,0,0,243,28,0,0,0, + 151,0,116,1,0,0,0,0,0,0,0,0,124,0,124,1, + 171,2,0,0,0,0,0,0,1,0,121,1,41,2,122,112, + 101,120,101,99,108,40,102,105,108,101,44,32,42,97,114,103, + 115,41,10,10,32,32,32,32,69,120,101,99,117,116,101,32, + 116,104,101,32,101,120,101,99,117,116,97,98,108,101,32,102, + 105,108,101,32,119,105,116,104,32,97,114,103,117,109,101,110, 116,32,108,105,115,116,32,97,114,103,115,44,32,114,101,112, - 108,97,99,105,110,103,32,116,104,101,32,99,117,114,114,101, - 110,116,32,112,114,111,99,101,115,115,46,10,32,32,32,32, - 97,114,103,115,32,109,97,121,32,98,101,32,97,32,108,105, - 115,116,32,111,114,32,116,117,112,108,101,32,111,102,32,115, - 116,114,105,110,103,115,46,32,78,169,1,218,8,95,101,120, - 101,99,118,112,101,114,184,0,0,0,115,2,0,0,0,32, - 32,114,25,0,0,0,114,194,0,0,0,114,194,0,0,0, - 62,2,0,0,115,14,0,0,0,128,0,244,12,0,5,13, - 136,84,144,52,213,4,24,114,27,0,0,0,99,3,0,0, - 0,0,0,0,0,0,0,0,0,5,0,0,0,3,0,0, - 0,243,30,0,0,0,151,0,116,1,0,0,0,0,0,0, - 0,0,124,0,124,1,124,2,171,3,0,0,0,0,0,0, - 1,0,121,1,41,2,122,222,101,120,101,99,118,112,101,40, - 102,105,108,101,44,32,97,114,103,115,44,32,101,110,118,41, + 108,97,99,105,110,103,32,116,104,101,10,32,32,32,32,99, + 117,114,114,101,110,116,32,112,114,111,99,101,115,115,46,32, + 78,41,1,218,5,101,120,101,99,118,169,2,218,4,102,105, + 108,101,218,4,97,114,103,115,115,2,0,0,0,32,32,114, + 25,0,0,0,218,5,101,120,101,99,108,114,188,0,0,0, + 31,2,0,0,115,14,0,0,0,128,0,244,10,0,5,10, + 136,36,144,4,213,4,21,114,27,0,0,0,99,1,0,0, + 0,0,0,0,0,0,0,0,0,6,0,0,0,7,0,0, + 0,243,46,0,0,0,151,0,124,1,100,1,25,0,0,0, + 125,2,116,1,0,0,0,0,0,0,0,0,124,0,124,1, + 100,2,100,1,26,0,124,2,171,3,0,0,0,0,0,0, + 1,0,121,2,41,3,122,138,101,120,101,99,108,101,40,102, + 105,108,101,44,32,42,97,114,103,115,44,32,101,110,118,41, + 10,10,32,32,32,32,69,120,101,99,117,116,101,32,116,104, + 101,32,101,120,101,99,117,116,97,98,108,101,32,102,105,108, + 101,32,119,105,116,104,32,97,114,103,117,109,101,110,116,32, + 108,105,115,116,32,97,114,103,115,32,97,110,100,10,32,32, + 32,32,101,110,118,105,114,111,110,109,101,110,116,32,101,110, + 118,44,32,114,101,112,108,97,99,105,110,103,32,116,104,101, + 32,99,117,114,114,101,110,116,32,112,114,111,99,101,115,115, + 46,32,233,255,255,255,255,78,41,1,114,88,0,0,0,169, + 3,114,186,0,0,0,114,187,0,0,0,218,3,101,110,118, + 115,3,0,0,0,32,32,32,114,25,0,0,0,218,6,101, + 120,101,99,108,101,114,193,0,0,0,38,2,0,0,115,31, + 0,0,0,128,0,240,10,0,11,15,136,114,137,40,128,67, + 220,4,10,136,52,144,20,144,99,144,114,144,25,152,67,213, + 4,32,114,27,0,0,0,99,1,0,0,0,0,0,0,0, + 0,0,0,0,4,0,0,0,7,0,0,0,243,28,0,0, + 0,151,0,116,1,0,0,0,0,0,0,0,0,124,0,124, + 1,171,2,0,0,0,0,0,0,1,0,121,1,41,2,122, + 149,101,120,101,99,108,112,40,102,105,108,101,44,32,42,97, + 114,103,115,41,10,10,32,32,32,32,69,120,101,99,117,116, + 101,32,116,104,101,32,101,120,101,99,117,116,97,98,108,101, + 32,102,105,108,101,32,40,119,104,105,99,104,32,105,115,32, + 115,101,97,114,99,104,101,100,32,102,111,114,32,97,108,111, + 110,103,32,36,80,65,84,72,41,10,32,32,32,32,119,105, + 116,104,32,97,114,103,117,109,101,110,116,32,108,105,115,116, + 32,97,114,103,115,44,32,114,101,112,108,97,99,105,110,103, + 32,116,104,101,32,99,117,114,114,101,110,116,32,112,114,111, + 99,101,115,115,46,32,78,41,1,218,6,101,120,101,99,118, + 112,114,185,0,0,0,115,2,0,0,0,32,32,114,25,0, + 0,0,218,6,101,120,101,99,108,112,114,196,0,0,0,46, + 2,0,0,115,14,0,0,0,128,0,244,10,0,5,11,136, + 52,144,20,213,4,22,114,27,0,0,0,99,1,0,0,0, + 0,0,0,0,0,0,0,0,6,0,0,0,7,0,0,0, + 243,46,0,0,0,151,0,124,1,100,1,25,0,0,0,125, + 2,116,1,0,0,0,0,0,0,0,0,124,0,124,1,100, + 2,100,1,26,0,124,2,171,3,0,0,0,0,0,0,1, + 0,121,2,41,3,122,179,101,120,101,99,108,112,101,40,102, + 105,108,101,44,32,42,97,114,103,115,44,32,101,110,118,41, 10,10,32,32,32,32,69,120,101,99,117,116,101,32,116,104, 101,32,101,120,101,99,117,116,97,98,108,101,32,102,105,108, 101,32,40,119,104,105,99,104,32,105,115,32,115,101,97,114, @@ -1227,882 +1190,772 @@ const unsigned char _Py_M__os[] = { 114,103,117,109,101,110,116,32,108,105,115,116,32,97,114,103, 115,32,97,110,100,32,101,110,118,105,114,111,110,109,101,110, 116,32,101,110,118,44,32,114,101,112,108,97,99,105,110,103, - 32,116,104,101,10,32,32,32,32,99,117,114,114,101,110,116, - 32,112,114,111,99,101,115,115,46,10,32,32,32,32,97,114, - 103,115,32,109,97,121,32,98,101,32,97,32,108,105,115,116, - 32,111,114,32,116,117,112,108,101,32,111,102,32,115,116,114, - 105,110,103,115,46,32,78,114,200,0,0,0,114,190,0,0, - 0,115,3,0,0,0,32,32,32,114,25,0,0,0,114,197, - 0,0,0,114,197,0,0,0,70,2,0,0,115,16,0,0, - 0,128,0,244,14,0,5,13,136,84,144,52,152,19,213,4, - 29,114,27,0,0,0,41,6,114,187,0,0,0,114,192,0, - 0,0,114,195,0,0,0,114,198,0,0,0,114,194,0,0, - 0,114,197,0,0,0,99,3,0,0,0,0,0,0,0,0, - 0,0,0,5,0,0,0,3,0,0,0,243,158,1,0,0, - 151,0,124,2,129,11,116,0,0,0,0,0,0,0,0,0, - 125,3,124,1,124,2,102,2,125,4,110,15,116,2,0,0, - 0,0,0,0,0,0,125,3,124,1,102,1,125,4,116,4, - 0,0,0,0,0,0,0,0,125,2,116,7,0,0,0,0, - 0,0,0,0,106,8,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,124,0,171,1,0,0,0,0, - 0,0,114,10,2,0,124,3,124,0,103,1,124,4,162,1, - 173,6,142,0,1,0,121,0,100,0,125,5,116,11,0,0, - 0,0,0,0,0,0,124,2,171,1,0,0,0,0,0,0, - 125,6,116,12,0,0,0,0,0,0,0,0,100,1,107,55, - 0,0,114,27,116,15,0,0,0,0,0,0,0,0,124,0, - 171,1,0,0,0,0,0,0,125,0,116,17,0,0,0,0, - 0,0,0,0,116,14,0,0,0,0,0,0,0,0,124,6, - 171,2,0,0,0,0,0,0,125,6,124,6,68,0,93,34, - 0,0,125,7,116,7,0,0,0,0,0,0,0,0,106,18, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,124,7,124,0,171,2,0,0,0,0,0,0,125,8, - 9,0,2,0,124,3,124,8,103,1,124,4,162,1,173,6, - 142,0,1,0,140,36,4,0,124,5,129,2,124,5,130,1, - 127,10,130,1,35,0,116,20,0,0,0,0,0,0,0,0, - 116,22,0,0,0,0,0,0,0,0,102,2,36,0,114,12, - 125,9,124,9,125,10,89,0,100,0,125,9,126,9,140,65, - 100,0,125,9,126,9,119,1,116,24,0,0,0,0,0,0, - 0,0,36,0,114,16,125,9,124,9,125,10,124,5,128,2, - 124,9,125,5,89,0,100,0,125,9,126,9,140,88,100,0, - 125,9,126,9,119,1,119,0,120,3,89,0,119,1,41,2, - 78,114,42,0,0,0,41,13,114,88,0,0,0,114,183,0, - 0,0,218,7,101,110,118,105,114,111,110,114,12,0,0,0, - 114,156,0,0,0,114,19,0,0,0,114,11,0,0,0,114, - 17,0,0,0,218,3,109,97,112,114,134,0,0,0,218,17, - 70,105,108,101,78,111,116,70,111,117,110,100,69,114,114,111, - 114,218,18,78,111,116,65,68,105,114,101,99,116,111,114,121, - 69,114,114,111,114,114,117,0,0,0,41,11,114,185,0,0, - 0,114,186,0,0,0,114,191,0,0,0,218,9,101,120,101, - 99,95,102,117,110,99,218,7,97,114,103,114,101,115,116,218, - 9,115,97,118,101,100,95,101,120,99,218,9,112,97,116,104, - 95,108,105,115,116,114,33,0,0,0,218,8,102,117,108,108, - 110,97,109,101,218,1,101,218,8,108,97,115,116,95,101,120, - 99,115,11,0,0,0,32,32,32,32,32,32,32,32,32,32, - 32,114,25,0,0,0,114,201,0,0,0,114,201,0,0,0, - 81,2,0,0,115,231,0,0,0,128,0,216,7,10,128,127, - 220,20,26,136,9,216,19,23,152,19,144,43,137,7,228,20, - 25,136,9,216,19,23,144,39,136,7,220,14,21,136,3,228, - 7,11,135,124,129,124,144,68,212,7,25,217,8,17,144,36, - 208,8,33,152,23,211,8,33,216,8,14,216,16,20,128,73, - 220,16,29,152,99,211,16,34,128,73,220,7,11,136,116,130, - 124,220,15,23,152,4,139,126,136,4,220,20,23,156,8,160, - 41,211,20,44,136,9,216,15,24,242,0,9,5,30,136,3, - 220,19,23,151,57,145,57,152,83,160,36,211,19,39,136,8, - 240,2,7,9,30,217,12,21,144,104,208,12,41,160,23,212, - 12,41,240,7,9,5,30,240,20,0,8,17,208,7,28,216, - 14,23,136,15,216,10,18,128,78,248,244,17,0,17,34,212, - 35,53,208,15,54,242,0,1,9,25,216,23,24,141,72,251, - 220,15,22,242,0,3,9,30,216,23,24,136,72,216,15,24, - 208,15,32,216,28,29,144,9,255,248,240,7,3,9,30,250, - 115,36,0,0,0,194,9,9,66,26,2,194,26,15,67,12, - 5,194,41,2,66,48,5,194,48,12,67,12,5,194,60,6, - 67,7,5,195,7,5,67,12,5,99,1,0,0,0,0,0, - 0,0,0,0,0,0,6,0,0,0,3,0,0,0,243,170, - 1,0,0,151,0,100,1,100,2,108,0,125,1,124,0,128, - 6,116,2,0,0,0,0,0,0,0,0,125,0,124,1,106, - 5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,171,0,0,0,0,0,0,0,53,0,1,0,124, - 1,106,7,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,100,3,116,8,0,0,0,0,0,0,0, - 0,171,2,0,0,0,0,0,0,1,0,9,0,124,0,106, - 11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,100,4,171,1,0,0,0,0,0,0,125,2,116, - 14,0,0,0,0,0,0,0,0,114,50,9,0,124,0,100, - 5,25,0,0,0,125,3,124,2,129,11,116,17,0,0,0, - 0,0,0,0,0,100,6,171,1,0,0,0,0,0,0,130, - 1,124,3,125,2,124,2,129,27,116,21,0,0,0,0,0, - 0,0,0,124,2,116,22,0,0,0,0,0,0,0,0,171, - 2,0,0,0,0,0,0,114,11,116,25,0,0,0,0,0, - 0,0,0,124,2,171,1,0,0,0,0,0,0,125,2,100, - 2,100,2,100,2,171,2,0,0,0,0,0,0,1,0,127, - 2,128,6,116,26,0,0,0,0,0,0,0,0,125,2,124, - 2,106,29,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,116,30,0,0,0,0,0,0,0,0,171, - 1,0,0,0,0,0,0,83,0,35,0,116,12,0,0,0, - 0,0,0,0,0,36,0,114,5,1,0,100,2,125,2,89, - 0,140,106,119,0,120,3,89,0,119,1,35,0,116,18,0, - 0,0,0,0,0,0,0,116,12,0,0,0,0,0,0,0, - 0,102,2,36,0,114,3,1,0,89,0,140,100,119,0,120, - 3,89,0,119,1,35,0,49,0,115,1,119,2,1,0,89, - 0,1,0,1,0,140,76,120,3,89,0,119,1,41,7,122, - 243,82,101,116,117,114,110,115,32,116,104,101,32,115,101,113, - 117,101,110,99,101,32,111,102,32,100,105,114,101,99,116,111, - 114,105,101,115,32,116,104,97,116,32,119,105,108,108,32,98, - 101,32,115,101,97,114,99,104,101,100,32,102,111,114,32,116, - 104,101,10,32,32,32,32,110,97,109,101,100,32,101,120,101, - 99,117,116,97,98,108,101,32,40,115,105,109,105,108,97,114, - 32,116,111,32,97,32,115,104,101,108,108,41,32,119,104,101, - 110,32,108,97,117,110,99,104,105,110,103,32,97,32,112,114, - 111,99,101,115,115,46,10,10,32,32,32,32,42,101,110,118, - 42,32,109,117,115,116,32,98,101,32,97,110,32,101,110,118, - 105,114,111,110,109,101,110,116,32,118,97,114,105,97,98,108, - 101,32,100,105,99,116,32,111,114,32,78,111,110,101,46,32, - 32,73,102,32,42,101,110,118,42,32,105,115,32,78,111,110, - 101,44,10,32,32,32,32,111,115,46,101,110,118,105,114,111, - 110,32,119,105,108,108,32,98,101,32,117,115,101,100,46,10, - 32,32,32,32,114,2,0,0,0,78,218,6,105,103,110,111, - 114,101,218,4,80,65,84,72,115,4,0,0,0,80,65,84, - 72,122,42,101,110,118,32,99,97,110,110,111,116,32,99,111, - 110,116,97,105,110,32,39,80,65,84,72,39,32,97,110,100, - 32,98,39,80,65,84,72,39,32,107,101,121,115,41,16,218, - 8,119,97,114,110,105,110,103,115,114,204,0,0,0,218,14, - 99,97,116,99,104,95,119,97,114,110,105,110,103,115,218,12, - 115,105,109,112,108,101,102,105,108,116,101,114,218,12,66,121, - 116,101,115,87,97,114,110,105,110,103,218,3,103,101,116,218, - 9,84,121,112,101,69,114,114,111,114,218,22,115,117,112,112, - 111,114,116,115,95,98,121,116,101,115,95,101,110,118,105,114, - 111,110,218,10,86,97,108,117,101,69,114,114,111,114,218,8, - 75,101,121,69,114,114,111,114,114,115,0,0,0,114,116,0, - 0,0,114,18,0,0,0,114,10,0,0,0,114,111,0,0, - 0,114,8,0,0,0,41,4,114,191,0,0,0,114,218,0, - 0,0,114,211,0,0,0,218,10,112,97,116,104,95,108,105, - 115,116,98,115,4,0,0,0,32,32,32,32,114,25,0,0, - 0,114,19,0,0,0,114,19,0,0,0,113,2,0,0,115, - 235,0,0,0,128,0,243,20,0,5,20,224,7,10,128,123, - 220,14,21,136,3,240,8,0,10,18,215,9,32,209,9,32, - 211,9,34,241,0,20,5,48,216,8,16,215,8,29,209,8, - 29,152,104,172,12,212,8,53,240,4,3,9,29,216,24,27, - 159,7,153,7,160,6,155,15,136,73,245,8,0,12,34,240, - 2,8,13,39,216,29,32,160,23,153,92,144,10,240,8,0, - 20,29,208,19,40,220,26,36,216,24,68,243,3,1,27,70, - 1,240,0,1,21,70,1,224,28,38,144,9,224,15,24,208, - 15,36,172,26,176,73,188,117,212,41,69,220,28,36,160,89, - 211,28,47,144,9,247,41,20,5,48,240,44,0,8,17,208, - 7,24,220,20,27,136,9,216,11,20,143,63,137,63,156,55, - 211,11,35,208,4,35,248,244,39,0,16,25,242,0,1,9, - 29,216,24,28,138,73,240,3,1,9,29,251,244,12,0,21, - 29,156,105,208,19,40,242,0,1,13,21,217,16,20,240,3, - 1,13,21,250,247,23,20,5,48,240,0,20,5,48,250,115, - 82,0,0,0,157,23,67,9,3,181,17,66,35,2,193,6, - 6,67,9,3,193,13,5,66,52,2,193,18,44,67,9,3, - 194,35,11,66,49,5,194,46,2,67,9,3,194,48,1,66, - 49,5,194,49,3,67,9,3,194,52,15,67,6,5,195,3, - 2,67,9,3,195,5,1,67,6,5,195,6,3,67,9,3, - 195,9,5,67,18,7,41,2,218,14,77,117,116,97,98,108, - 101,77,97,112,112,105,110,103,218,7,77,97,112,112,105,110, - 103,99,0,0,0,0,0,0,0,0,0,0,0,0,1,0, - 0,0,0,0,0,0,243,84,0,0,0,151,0,101,0,90, - 1,100,0,90,2,100,1,132,0,90,3,100,2,132,0,90, - 4,100,3,132,0,90,5,100,4,132,0,90,6,100,5,132, - 0,90,7,100,6,132,0,90,8,100,7,132,0,90,9,100, - 8,132,0,90,10,100,9,132,0,90,11,100,10,132,0,90, - 12,100,11,132,0,90,13,100,12,132,0,90,14,121,13,41, - 14,218,8,95,69,110,118,105,114,111,110,99,6,0,0,0, - 0,0,0,0,0,0,0,0,2,0,0,0,3,0,0,0, - 243,74,0,0,0,151,0,124,2,124,0,95,0,0,0,0, - 0,0,0,0,0,124,3,124,0,95,1,0,0,0,0,0, - 0,0,0,124,4,124,0,95,2,0,0,0,0,0,0,0, - 0,124,5,124,0,95,3,0,0,0,0,0,0,0,0,124, - 1,124,0,95,4,0,0,0,0,0,0,0,0,121,0,114, - 23,0,0,0,41,5,218,9,101,110,99,111,100,101,107,101, - 121,218,9,100,101,99,111,100,101,107,101,121,218,11,101,110, - 99,111,100,101,118,97,108,117,101,218,11,100,101,99,111,100, - 101,118,97,108,117,101,218,5,95,100,97,116,97,41,6,218, - 4,115,101,108,102,218,4,100,97,116,97,114,233,0,0,0, - 114,234,0,0,0,114,235,0,0,0,114,236,0,0,0,115, - 6,0,0,0,32,32,32,32,32,32,114,25,0,0,0,218, - 8,95,95,105,110,105,116,95,95,122,17,95,69,110,118,105, - 114,111,110,46,95,95,105,110,105,116,95,95,161,2,0,0, - 115,39,0,0,0,128,0,216,25,34,136,4,140,14,216,25, - 34,136,4,140,14,216,27,38,136,4,212,8,24,216,27,38, - 136,4,212,8,24,216,21,25,136,4,141,10,114,27,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,148,0,0,0,151,0,9,0,124, - 0,106,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,124,0,106,3,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,124,1,171,1,0, - 0,0,0,0,0,25,0,0,0,125,2,124,0,106,7,0, + 32,116,104,101,32,99,117,114,114,101,110,116,10,32,32,32, + 32,112,114,111,99,101,115,115,46,32,114,190,0,0,0,78, + 41,1,218,7,101,120,101,99,118,112,101,114,191,0,0,0, + 115,3,0,0,0,32,32,32,114,25,0,0,0,218,7,101, + 120,101,99,108,112,101,114,199,0,0,0,53,2,0,0,115, + 31,0,0,0,128,0,240,12,0,11,15,136,114,137,40,128, + 67,220,4,11,136,68,144,36,144,115,152,2,144,41,152,83, + 213,4,33,114,27,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,28,0, + 0,0,151,0,116,1,0,0,0,0,0,0,0,0,124,0, + 124,1,171,2,0,0,0,0,0,0,1,0,121,1,41,2, + 122,192,101,120,101,99,118,112,40,102,105,108,101,44,32,97, + 114,103,115,41,10,10,32,32,32,32,69,120,101,99,117,116, + 101,32,116,104,101,32,101,120,101,99,117,116,97,98,108,101, + 32,102,105,108,101,32,40,119,104,105,99,104,32,105,115,32, + 115,101,97,114,99,104,101,100,32,102,111,114,32,97,108,111, + 110,103,32,36,80,65,84,72,41,10,32,32,32,32,119,105, + 116,104,32,97,114,103,117,109,101,110,116,32,108,105,115,116, + 32,97,114,103,115,44,32,114,101,112,108,97,99,105,110,103, + 32,116,104,101,32,99,117,114,114,101,110,116,32,112,114,111, + 99,101,115,115,46,10,32,32,32,32,97,114,103,115,32,109, + 97,121,32,98,101,32,97,32,108,105,115,116,32,111,114,32, + 116,117,112,108,101,32,111,102,32,115,116,114,105,110,103,115, + 46,32,78,169,1,218,8,95,101,120,101,99,118,112,101,114, + 185,0,0,0,115,2,0,0,0,32,32,114,25,0,0,0, + 114,195,0,0,0,114,195,0,0,0,62,2,0,0,115,14, + 0,0,0,128,0,244,12,0,5,13,136,84,144,52,213,4, + 24,114,27,0,0,0,99,3,0,0,0,0,0,0,0,0, + 0,0,0,5,0,0,0,3,0,0,0,243,30,0,0,0, + 151,0,116,1,0,0,0,0,0,0,0,0,124,0,124,1, + 124,2,171,3,0,0,0,0,0,0,1,0,121,1,41,2, + 122,222,101,120,101,99,118,112,101,40,102,105,108,101,44,32, + 97,114,103,115,44,32,101,110,118,41,10,10,32,32,32,32, + 69,120,101,99,117,116,101,32,116,104,101,32,101,120,101,99, + 117,116,97,98,108,101,32,102,105,108,101,32,40,119,104,105, + 99,104,32,105,115,32,115,101,97,114,99,104,101,100,32,102, + 111,114,32,97,108,111,110,103,32,36,80,65,84,72,41,10, + 32,32,32,32,119,105,116,104,32,97,114,103,117,109,101,110, + 116,32,108,105,115,116,32,97,114,103,115,32,97,110,100,32, + 101,110,118,105,114,111,110,109,101,110,116,32,101,110,118,44, + 32,114,101,112,108,97,99,105,110,103,32,116,104,101,10,32, + 32,32,32,99,117,114,114,101,110,116,32,112,114,111,99,101, + 115,115,46,10,32,32,32,32,97,114,103,115,32,109,97,121, + 32,98,101,32,97,32,108,105,115,116,32,111,114,32,116,117, + 112,108,101,32,111,102,32,115,116,114,105,110,103,115,46,32, + 78,114,201,0,0,0,114,191,0,0,0,115,3,0,0,0, + 32,32,32,114,25,0,0,0,114,198,0,0,0,114,198,0, + 0,0,70,2,0,0,115,16,0,0,0,128,0,244,14,0, + 5,13,136,84,144,52,152,19,213,4,29,114,27,0,0,0, + 41,6,114,188,0,0,0,114,193,0,0,0,114,196,0,0, + 0,114,199,0,0,0,114,195,0,0,0,114,198,0,0,0, + 99,3,0,0,0,0,0,0,0,0,0,0,0,5,0,0, + 0,3,0,0,0,243,158,1,0,0,151,0,124,2,129,11, + 116,0,0,0,0,0,0,0,0,0,125,3,124,1,124,2, + 102,2,125,4,110,15,116,2,0,0,0,0,0,0,0,0, + 125,3,124,1,102,1,125,4,116,4,0,0,0,0,0,0, + 0,0,125,2,116,7,0,0,0,0,0,0,0,0,106,8, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,124,2,171,1,0,0,0,0,0,0,83,0,35,0,116, - 4,0,0,0,0,0,0,0,0,36,0,114,13,1,0,116, - 5,0,0,0,0,0,0,0,0,124,1,171,1,0,0,0, - 0,0,0,100,0,130,2,119,0,120,3,89,0,119,1,114, - 23,0,0,0,41,4,114,237,0,0,0,114,233,0,0,0, - 114,226,0,0,0,114,236,0,0,0,169,3,114,238,0,0, - 0,218,3,107,101,121,218,5,118,97,108,117,101,115,3,0, - 0,0,32,32,32,114,25,0,0,0,218,11,95,95,103,101, - 116,105,116,101,109,95,95,122,20,95,69,110,118,105,114,111, - 110,46,95,95,103,101,116,105,116,101,109,95,95,168,2,0, - 0,115,78,0,0,0,128,0,240,2,4,9,42,216,20,24, - 151,74,145,74,152,116,159,126,153,126,168,99,211,31,50,209, - 20,51,136,69,240,8,0,16,20,215,15,31,209,15,31,160, - 5,211,15,38,208,8,38,248,244,7,0,16,24,242,0,2, - 9,42,228,18,26,152,51,147,45,160,84,208,12,41,240,5, - 2,9,42,250,115,9,0,0,0,130,30,49,0,177,22,65, - 7,3,99,3,0,0,0,0,0,0,0,0,0,0,0,4, - 0,0,0,3,0,0,0,243,126,0,0,0,151,0,124,0, - 106,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,124,1,171,1,0,0,0,0,0,0,125,1, - 124,0,106,3,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,124,2,171,1,0,0,0,0,0,0, - 125,2,116,5,0,0,0,0,0,0,0,0,124,1,124,2, - 171,2,0,0,0,0,0,0,1,0,124,2,124,0,106,6, + 0,0,124,0,171,1,0,0,0,0,0,0,114,10,2,0, + 124,3,124,0,103,1,124,4,162,1,173,6,142,0,1,0, + 121,0,100,0,125,5,116,11,0,0,0,0,0,0,0,0, + 124,2,171,1,0,0,0,0,0,0,125,6,116,12,0,0, + 0,0,0,0,0,0,100,1,107,55,0,0,114,27,116,15, + 0,0,0,0,0,0,0,0,124,0,171,1,0,0,0,0, + 0,0,125,0,116,17,0,0,0,0,0,0,0,0,116,14, + 0,0,0,0,0,0,0,0,124,6,171,2,0,0,0,0, + 0,0,125,6,124,6,68,0,93,34,0,0,125,7,116,7, + 0,0,0,0,0,0,0,0,106,18,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,124,7,124,0, + 171,2,0,0,0,0,0,0,125,8,9,0,2,0,124,3, + 124,8,103,1,124,4,162,1,173,6,142,0,1,0,140,36, + 4,0,124,5,129,2,124,5,130,1,127,10,130,1,35,0, + 116,20,0,0,0,0,0,0,0,0,116,22,0,0,0,0, + 0,0,0,0,102,2,36,0,114,12,125,9,124,9,125,10, + 89,0,100,0,125,9,126,9,140,65,100,0,125,9,126,9, + 119,1,116,24,0,0,0,0,0,0,0,0,36,0,114,16, + 125,9,124,9,125,10,124,5,128,2,124,9,125,5,89,0, + 100,0,125,9,126,9,140,88,100,0,125,9,126,9,119,1, + 119,0,120,3,89,0,119,1,41,2,78,114,42,0,0,0, + 41,13,114,88,0,0,0,114,184,0,0,0,218,7,101,110, + 118,105,114,111,110,114,12,0,0,0,114,156,0,0,0,114, + 19,0,0,0,114,11,0,0,0,114,17,0,0,0,218,3, + 109,97,112,114,134,0,0,0,218,17,70,105,108,101,78,111, + 116,70,111,117,110,100,69,114,114,111,114,218,18,78,111,116, + 65,68,105,114,101,99,116,111,114,121,69,114,114,111,114,114, + 117,0,0,0,41,11,114,186,0,0,0,114,187,0,0,0, + 114,192,0,0,0,218,9,101,120,101,99,95,102,117,110,99, + 218,7,97,114,103,114,101,115,116,218,9,115,97,118,101,100, + 95,101,120,99,218,9,112,97,116,104,95,108,105,115,116,114, + 33,0,0,0,218,8,102,117,108,108,110,97,109,101,218,1, + 101,218,8,108,97,115,116,95,101,120,99,115,11,0,0,0, + 32,32,32,32,32,32,32,32,32,32,32,114,25,0,0,0, + 114,202,0,0,0,114,202,0,0,0,81,2,0,0,115,231, + 0,0,0,128,0,216,7,10,128,127,220,20,26,136,9,216, + 19,23,152,19,144,43,137,7,228,20,25,136,9,216,19,23, + 144,39,136,7,220,14,21,136,3,228,7,11,135,124,129,124, + 144,68,212,7,25,217,8,17,144,36,208,8,33,152,23,211, + 8,33,216,8,14,216,16,20,128,73,220,16,29,152,99,211, + 16,34,128,73,220,7,11,136,116,130,124,220,15,23,152,4, + 139,126,136,4,220,20,23,156,8,160,41,211,20,44,136,9, + 216,15,24,242,0,9,5,30,136,3,220,19,23,151,57,145, + 57,152,83,160,36,211,19,39,136,8,240,2,7,9,30,217, + 12,21,144,104,208,12,41,160,23,212,12,41,240,7,9,5, + 30,240,20,0,8,17,208,7,28,216,14,23,136,15,216,10, + 18,128,78,248,244,17,0,17,34,212,35,53,208,15,54,242, + 0,1,9,25,216,23,24,141,72,251,220,15,22,242,0,3, + 9,30,216,23,24,136,72,216,15,24,208,15,32,216,28,29, + 144,9,255,248,240,7,3,9,30,250,115,36,0,0,0,194, + 9,9,66,26,2,194,26,15,67,12,5,194,41,2,66,48, + 5,194,48,12,67,12,5,194,60,6,67,7,5,195,7,5, + 67,12,5,99,1,0,0,0,0,0,0,0,0,0,0,0, + 6,0,0,0,3,0,0,0,243,170,1,0,0,151,0,100, + 1,100,2,108,0,125,1,124,0,128,6,116,2,0,0,0, + 0,0,0,0,0,125,0,124,1,106,5,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,171,0,0, + 0,0,0,0,0,53,0,1,0,124,1,106,7,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,100, + 3,116,8,0,0,0,0,0,0,0,0,171,2,0,0,0, + 0,0,0,1,0,9,0,124,0,106,11,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,100,4,171, + 1,0,0,0,0,0,0,125,2,116,14,0,0,0,0,0, + 0,0,0,114,50,9,0,124,0,100,5,25,0,0,0,125, + 3,124,2,129,11,116,17,0,0,0,0,0,0,0,0,100, + 6,171,1,0,0,0,0,0,0,130,1,124,3,125,2,124, + 2,129,27,116,21,0,0,0,0,0,0,0,0,124,2,116, + 22,0,0,0,0,0,0,0,0,171,2,0,0,0,0,0, + 0,114,11,116,25,0,0,0,0,0,0,0,0,124,2,171, + 1,0,0,0,0,0,0,125,2,100,2,100,2,100,2,171, + 2,0,0,0,0,0,0,1,0,127,2,128,6,116,26,0, + 0,0,0,0,0,0,0,125,2,124,2,106,29,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,116, + 30,0,0,0,0,0,0,0,0,171,1,0,0,0,0,0, + 0,83,0,35,0,116,12,0,0,0,0,0,0,0,0,36, + 0,114,5,1,0,100,2,125,2,89,0,140,106,119,0,120, + 3,89,0,119,1,35,0,116,18,0,0,0,0,0,0,0, + 0,116,12,0,0,0,0,0,0,0,0,102,2,36,0,114, + 3,1,0,89,0,140,100,119,0,120,3,89,0,119,1,35, + 0,49,0,115,1,119,2,1,0,89,0,1,0,1,0,140, + 76,120,3,89,0,119,1,41,7,122,243,82,101,116,117,114, + 110,115,32,116,104,101,32,115,101,113,117,101,110,99,101,32, + 111,102,32,100,105,114,101,99,116,111,114,105,101,115,32,116, + 104,97,116,32,119,105,108,108,32,98,101,32,115,101,97,114, + 99,104,101,100,32,102,111,114,32,116,104,101,10,32,32,32, + 32,110,97,109,101,100,32,101,120,101,99,117,116,97,98,108, + 101,32,40,115,105,109,105,108,97,114,32,116,111,32,97,32, + 115,104,101,108,108,41,32,119,104,101,110,32,108,97,117,110, + 99,104,105,110,103,32,97,32,112,114,111,99,101,115,115,46, + 10,10,32,32,32,32,42,101,110,118,42,32,109,117,115,116, + 32,98,101,32,97,110,32,101,110,118,105,114,111,110,109,101, + 110,116,32,118,97,114,105,97,98,108,101,32,100,105,99,116, + 32,111,114,32,78,111,110,101,46,32,32,73,102,32,42,101, + 110,118,42,32,105,115,32,78,111,110,101,44,10,32,32,32, + 32,111,115,46,101,110,118,105,114,111,110,32,119,105,108,108, + 32,98,101,32,117,115,101,100,46,10,32,32,32,32,114,2, + 0,0,0,78,218,6,105,103,110,111,114,101,218,4,80,65, + 84,72,115,4,0,0,0,80,65,84,72,122,42,101,110,118, + 32,99,97,110,110,111,116,32,99,111,110,116,97,105,110,32, + 39,80,65,84,72,39,32,97,110,100,32,98,39,80,65,84, + 72,39,32,107,101,121,115,41,16,218,8,119,97,114,110,105, + 110,103,115,114,205,0,0,0,218,14,99,97,116,99,104,95, + 119,97,114,110,105,110,103,115,218,12,115,105,109,112,108,101, + 102,105,108,116,101,114,218,12,66,121,116,101,115,87,97,114, + 110,105,110,103,218,3,103,101,116,218,9,84,121,112,101,69, + 114,114,111,114,218,22,115,117,112,112,111,114,116,115,95,98, + 121,116,101,115,95,101,110,118,105,114,111,110,218,10,86,97, + 108,117,101,69,114,114,111,114,218,8,75,101,121,69,114,114, + 111,114,114,115,0,0,0,114,116,0,0,0,114,18,0,0, + 0,114,10,0,0,0,114,111,0,0,0,114,8,0,0,0, + 41,4,114,192,0,0,0,114,219,0,0,0,114,212,0,0, + 0,218,10,112,97,116,104,95,108,105,115,116,98,115,4,0, + 0,0,32,32,32,32,114,25,0,0,0,114,19,0,0,0, + 114,19,0,0,0,113,2,0,0,115,235,0,0,0,128,0, + 243,20,0,5,20,224,7,10,128,123,220,14,21,136,3,240, + 8,0,10,18,215,9,32,209,9,32,211,9,34,241,0,20, + 5,48,216,8,16,215,8,29,209,8,29,152,104,172,12,212, + 8,53,240,4,3,9,29,216,24,27,159,7,153,7,160,6, + 155,15,136,73,245,8,0,12,34,240,2,8,13,39,216,29, + 32,160,23,153,92,144,10,240,8,0,20,29,208,19,40,220, + 26,36,216,24,68,243,3,1,27,70,1,240,0,1,21,70, + 1,224,28,38,144,9,224,15,24,208,15,36,172,26,176,73, + 188,117,212,41,69,220,28,36,160,89,211,28,47,144,9,247, + 41,20,5,48,240,44,0,8,17,208,7,24,220,20,27,136, + 9,216,11,20,143,63,137,63,156,55,211,11,35,208,4,35, + 248,244,39,0,16,25,242,0,1,9,29,216,24,28,138,73, + 240,3,1,9,29,251,244,12,0,21,29,156,105,208,19,40, + 242,0,1,13,21,217,16,20,240,3,1,13,21,250,247,23, + 20,5,48,240,0,20,5,48,250,115,82,0,0,0,157,23, + 67,9,3,181,17,66,35,2,193,6,6,67,9,3,193,13, + 5,66,52,2,193,18,44,67,9,3,194,35,11,66,49,5, + 194,46,2,67,9,3,194,48,1,66,49,5,194,49,3,67, + 9,3,194,52,15,67,6,5,195,3,2,67,9,3,195,5, + 1,67,6,5,195,6,3,67,9,3,195,9,5,67,18,7, + 41,2,218,14,77,117,116,97,98,108,101,77,97,112,112,105, + 110,103,218,7,77,97,112,112,105,110,103,99,0,0,0,0, + 0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, + 243,84,0,0,0,151,0,101,0,90,1,100,0,90,2,100, + 1,132,0,90,3,100,2,132,0,90,4,100,3,132,0,90, + 5,100,4,132,0,90,6,100,5,132,0,90,7,100,6,132, + 0,90,8,100,7,132,0,90,9,100,8,132,0,90,10,100, + 9,132,0,90,11,100,10,132,0,90,12,100,11,132,0,90, + 13,100,12,132,0,90,14,121,13,41,14,218,8,95,69,110, + 118,105,114,111,110,99,6,0,0,0,0,0,0,0,0,0, + 0,0,2,0,0,0,3,0,0,0,243,74,0,0,0,151, + 0,124,2,124,0,95,0,0,0,0,0,0,0,0,0,124, + 3,124,0,95,1,0,0,0,0,0,0,0,0,124,4,124, + 0,95,2,0,0,0,0,0,0,0,0,124,5,124,0,95, + 3,0,0,0,0,0,0,0,0,124,1,124,0,95,4,0, + 0,0,0,0,0,0,0,121,0,114,23,0,0,0,41,5, + 218,9,101,110,99,111,100,101,107,101,121,218,9,100,101,99, + 111,100,101,107,101,121,218,11,101,110,99,111,100,101,118,97, + 108,117,101,218,11,100,101,99,111,100,101,118,97,108,117,101, + 218,5,95,100,97,116,97,41,6,218,4,115,101,108,102,218, + 4,100,97,116,97,114,234,0,0,0,114,235,0,0,0,114, + 236,0,0,0,114,237,0,0,0,115,6,0,0,0,32,32, + 32,32,32,32,114,25,0,0,0,218,8,95,95,105,110,105, + 116,95,95,122,17,95,69,110,118,105,114,111,110,46,95,95, + 105,110,105,116,95,95,161,2,0,0,115,39,0,0,0,128, + 0,216,25,34,136,4,140,14,216,25,34,136,4,140,14,216, + 27,38,136,4,212,8,24,216,27,38,136,4,212,8,24,216, + 21,25,136,4,141,10,114,27,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,148,0,0,0,151,0,9,0,124,0,106,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,124, + 0,106,3,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,124,1,171,1,0,0,0,0,0,0,25, + 0,0,0,125,2,124,0,106,7,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,124,2,171,1,0, + 0,0,0,0,0,83,0,35,0,116,4,0,0,0,0,0, + 0,0,0,36,0,114,13,1,0,116,5,0,0,0,0,0, + 0,0,0,124,1,171,1,0,0,0,0,0,0,100,0,130, + 2,119,0,120,3,89,0,119,1,114,23,0,0,0,41,4, + 114,238,0,0,0,114,234,0,0,0,114,227,0,0,0,114, + 237,0,0,0,169,3,114,239,0,0,0,218,3,107,101,121, + 218,5,118,97,108,117,101,115,3,0,0,0,32,32,32,114, + 25,0,0,0,218,11,95,95,103,101,116,105,116,101,109,95, + 95,122,20,95,69,110,118,105,114,111,110,46,95,95,103,101, + 116,105,116,101,109,95,95,168,2,0,0,115,78,0,0,0, + 128,0,240,2,4,9,42,216,20,24,151,74,145,74,152,116, + 159,126,153,126,168,99,211,31,50,209,20,51,136,69,240,8, + 0,16,20,215,15,31,209,15,31,160,5,211,15,38,208,8, + 38,248,244,7,0,16,24,242,0,2,9,42,228,18,26,152, + 51,147,45,160,84,208,12,41,240,5,2,9,42,250,115,9, + 0,0,0,130,30,49,0,177,22,65,7,3,99,3,0,0, + 0,0,0,0,0,0,0,0,0,4,0,0,0,3,0,0, + 0,243,126,0,0,0,151,0,124,0,106,1,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,124,1, + 171,1,0,0,0,0,0,0,125,1,124,0,106,3,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,124,1,60,0,0,0,121,0,114,23,0,0,0,41, - 4,114,233,0,0,0,114,235,0,0,0,218,6,112,117,116, - 101,110,118,114,237,0,0,0,114,242,0,0,0,115,3,0, - 0,0,32,32,32,114,25,0,0,0,218,11,95,95,115,101, - 116,105,116,101,109,95,95,122,20,95,69,110,118,105,114,111, - 110,46,95,95,115,101,116,105,116,101,109,95,95,176,2,0, - 0,115,55,0,0,0,128,0,216,14,18,143,110,137,110,152, - 83,211,14,33,136,3,216,16,20,215,16,32,209,16,32,160, - 21,211,16,39,136,5,220,8,14,136,115,144,69,212,8,26, - 216,26,31,136,4,143,10,137,10,144,51,138,15,114,27,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,138,0,0,0,151,0,124,0, - 106,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,124,1,171,1,0,0,0,0,0,0,125,2, - 116,3,0,0,0,0,0,0,0,0,124,2,171,1,0,0, - 0,0,0,0,1,0,9,0,124,0,106,4,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,124,2, - 61,0,121,0,35,0,116,6,0,0,0,0,0,0,0,0, - 36,0,114,13,1,0,116,7,0,0,0,0,0,0,0,0, - 124,1,171,1,0,0,0,0,0,0,100,0,130,2,119,0, - 120,3,89,0,119,1,114,23,0,0,0,41,4,114,233,0, - 0,0,218,8,117,110,115,101,116,101,110,118,114,237,0,0, - 0,114,226,0,0,0,41,3,114,238,0,0,0,114,243,0, - 0,0,218,10,101,110,99,111,100,101,100,107,101,121,115,3, - 0,0,0,32,32,32,114,25,0,0,0,218,11,95,95,100, - 101,108,105,116,101,109,95,95,122,20,95,69,110,118,105,114, - 111,110,46,95,95,100,101,108,105,116,101,109,95,95,182,2, - 0,0,115,68,0,0,0,128,0,216,21,25,151,94,145,94, - 160,67,211,21,40,136,10,220,8,16,144,26,212,8,28,240, - 2,4,9,42,216,16,20,151,10,145,10,152,58,209,16,38, - 248,220,15,23,242,0,2,9,42,228,18,26,152,51,147,45, - 160,84,208,12,41,240,5,2,9,42,250,115,9,0,0,0, - 158,13,44,0,172,22,65,2,3,99,1,0,0,0,0,0, - 0,0,0,0,0,0,4,0,0,0,35,0,0,0,243,106, - 0,0,0,75,0,1,0,151,0,116,1,0,0,0,0,0, + 124,2,171,1,0,0,0,0,0,0,125,2,116,5,0,0, + 0,0,0,0,0,0,124,1,124,2,171,2,0,0,0,0, + 0,0,1,0,124,2,124,0,106,6,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,124,1,60,0, + 0,0,121,0,114,23,0,0,0,41,4,114,234,0,0,0, + 114,236,0,0,0,218,6,112,117,116,101,110,118,114,238,0, + 0,0,114,243,0,0,0,115,3,0,0,0,32,32,32,114, + 25,0,0,0,218,11,95,95,115,101,116,105,116,101,109,95, + 95,122,20,95,69,110,118,105,114,111,110,46,95,95,115,101, + 116,105,116,101,109,95,95,176,2,0,0,115,55,0,0,0, + 128,0,216,14,18,143,110,137,110,152,83,211,14,33,136,3, + 216,16,20,215,16,32,209,16,32,160,21,211,16,39,136,5, + 220,8,14,136,115,144,69,212,8,26,216,26,31,136,4,143, + 10,137,10,144,51,138,15,114,27,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,138,0,0,0,151,0,124,0,106,1,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,124,1, + 171,1,0,0,0,0,0,0,125,2,116,3,0,0,0,0, + 0,0,0,0,124,2,171,1,0,0,0,0,0,0,1,0, + 9,0,124,0,106,4,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,124,2,61,0,121,0,35,0, + 116,6,0,0,0,0,0,0,0,0,36,0,114,13,1,0, + 116,7,0,0,0,0,0,0,0,0,124,1,171,1,0,0, + 0,0,0,0,100,0,130,2,119,0,120,3,89,0,119,1, + 114,23,0,0,0,41,4,114,234,0,0,0,218,8,117,110, + 115,101,116,101,110,118,114,238,0,0,0,114,227,0,0,0, + 41,3,114,239,0,0,0,114,244,0,0,0,218,10,101,110, + 99,111,100,101,100,107,101,121,115,3,0,0,0,32,32,32, + 114,25,0,0,0,218,11,95,95,100,101,108,105,116,101,109, + 95,95,122,20,95,69,110,118,105,114,111,110,46,95,95,100, + 101,108,105,116,101,109,95,95,182,2,0,0,115,68,0,0, + 0,128,0,216,21,25,151,94,145,94,160,67,211,21,40,136, + 10,220,8,16,144,26,212,8,28,240,2,4,9,42,216,16, + 20,151,10,145,10,152,58,209,16,38,248,220,15,23,242,0, + 2,9,42,228,18,26,152,51,147,45,160,84,208,12,41,240, + 5,2,9,42,250,115,9,0,0,0,158,13,44,0,172,22, + 65,2,3,99,1,0,0,0,0,0,0,0,0,0,0,0, + 4,0,0,0,35,0,0,0,243,106,0,0,0,75,0,1, + 0,151,0,116,1,0,0,0,0,0,0,0,0,124,0,106, + 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,171,1,0,0,0,0,0,0,125,1,124,1,68, + 0,93,21,0,0,125,2,124,0,106,5,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,124,2,171, + 1,0,0,0,0,0,0,150,1,151,1,1,0,140,23,4, + 0,121,0,173,3,119,1,114,23,0,0,0,41,3,114,30, + 0,0,0,114,238,0,0,0,114,235,0,0,0,41,3,114, + 239,0,0,0,218,4,107,101,121,115,114,244,0,0,0,115, + 3,0,0,0,32,32,32,114,25,0,0,0,218,8,95,95, + 105,116,101,114,95,95,122,17,95,69,110,118,105,114,111,110, + 46,95,95,105,116,101,114,95,95,191,2,0,0,115,50,0, + 0,0,232,0,248,128,0,228,15,19,144,68,151,74,145,74, + 211,15,31,136,4,216,19,23,242,0,1,9,38,136,67,216, + 18,22,151,46,145,46,160,19,211,18,37,211,12,37,241,3, + 1,9,38,249,115,4,0,0,0,130,49,51,1,99,1,0, + 0,0,0,0,0,0,0,0,0,0,3,0,0,0,3,0, + 0,0,243,44,0,0,0,151,0,116,1,0,0,0,0,0, 0,0,0,124,0,106,2,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,171,1,0,0,0,0,0, - 0,125,1,124,1,68,0,93,21,0,0,125,2,124,0,106, - 5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,124,2,171,1,0,0,0,0,0,0,150,1,151, - 1,1,0,140,23,4,0,121,0,173,3,119,1,114,23,0, - 0,0,41,3,114,30,0,0,0,114,237,0,0,0,114,234, - 0,0,0,41,3,114,238,0,0,0,218,4,107,101,121,115, - 114,243,0,0,0,115,3,0,0,0,32,32,32,114,25,0, - 0,0,218,8,95,95,105,116,101,114,95,95,122,17,95,69, - 110,118,105,114,111,110,46,95,95,105,116,101,114,95,95,191, - 2,0,0,115,50,0,0,0,232,0,248,128,0,228,15,19, - 144,68,151,74,145,74,211,15,31,136,4,216,19,23,242,0, - 1,9,38,136,67,216,18,22,151,46,145,46,160,19,211,18, - 37,211,12,37,241,3,1,9,38,249,115,4,0,0,0,130, - 49,51,1,99,1,0,0,0,0,0,0,0,0,0,0,0, - 3,0,0,0,3,0,0,0,243,44,0,0,0,151,0,116, - 1,0,0,0,0,0,0,0,0,124,0,106,2,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,171, - 1,0,0,0,0,0,0,83,0,114,23,0,0,0,41,2, - 218,3,108,101,110,114,237,0,0,0,169,1,114,238,0,0, - 0,115,1,0,0,0,32,114,25,0,0,0,218,7,95,95, - 108,101,110,95,95,122,16,95,69,110,118,105,114,111,110,46, - 95,95,108,101,110,95,95,197,2,0,0,115,16,0,0,0, - 128,0,220,15,18,144,52,151,58,145,58,139,127,208,8,30, - 114,27,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,116,0,0,0,135, - 0,151,0,100,1,106,1,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,136,0,102,1,100,2,132, - 8,137,0,106,2,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,106,5,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,171,0,0,0,0, - 0,0,0,68,0,171,0,0,0,0,0,0,0,171,1,0, - 0,0,0,0,0,125,1,100,3,124,1,155,0,100,4,157, - 3,83,0,41,5,78,122,2,44,32,99,1,0,0,0,0, - 0,0,0,0,0,0,0,6,0,0,0,51,0,0,0,243, - 110,0,0,0,149,1,75,0,1,0,151,0,124,0,93,44, - 0,0,92,2,0,0,125,1,125,2,137,3,106,1,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 124,1,171,1,0,0,0,0,0,0,155,2,100,0,137,3, - 106,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,124,2,171,1,0,0,0,0,0,0,155,2, - 157,3,150,1,151,1,1,0,140,46,4,0,121,1,173,3, - 119,1,41,2,122,2,58,32,78,41,2,114,234,0,0,0, - 114,236,0,0,0,41,4,218,2,46,48,114,243,0,0,0, - 114,244,0,0,0,114,238,0,0,0,115,4,0,0,0,32, - 32,32,128,114,25,0,0,0,250,9,60,103,101,110,101,120, - 112,114,62,122,36,95,69,110,118,105,114,111,110,46,95,95, - 114,101,112,114,95,95,46,60,108,111,99,97,108,115,62,46, - 60,103,101,110,101,120,112,114,62,201,2,0,0,115,62,0, - 0,0,248,232,0,248,128,0,242,0,3,36,10,225,16,26, - 144,3,144,85,240,3,0,16,20,143,126,137,126,152,99,211, - 15,34,208,14,37,160,82,168,4,215,40,56,209,40,56,184, - 21,211,40,63,208,39,66,212,12,67,241,3,3,36,10,249, - 115,4,0,0,0,131,50,53,1,122,9,101,110,118,105,114, - 111,110,40,123,122,2,125,41,41,3,114,134,0,0,0,114, - 237,0,0,0,218,5,105,116,101,109,115,41,2,114,238,0, - 0,0,218,15,102,111,114,109,97,116,116,101,100,95,105,116, - 101,109,115,115,2,0,0,0,96,32,114,25,0,0,0,218, - 8,95,95,114,101,112,114,95,95,122,17,95,69,110,118,105, - 114,111,110,46,95,95,114,101,112,114,95,95,200,2,0,0, - 115,61,0,0,0,248,128,0,216,26,30,159,41,153,41,243, - 0,3,36,10,224,30,34,159,106,153,106,215,30,46,209,30, - 46,211,30,48,244,5,3,36,10,243,0,3,27,10,136,15, - 240,8,0,18,28,152,79,208,27,44,168,67,208,15,48,208, - 8,48,114,27,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,24,0,0, - 0,151,0,116,1,0,0,0,0,0,0,0,0,124,0,171, - 1,0,0,0,0,0,0,83,0,114,23,0,0,0,41,1, - 218,4,100,105,99,116,114,2,1,0,0,115,1,0,0,0, - 32,114,25,0,0,0,218,4,99,111,112,121,122,13,95,69, - 110,118,105,114,111,110,46,99,111,112,121,207,2,0,0,115, - 12,0,0,0,128,0,220,15,19,144,68,139,122,208,8,25, - 114,27,0,0,0,99,3,0,0,0,0,0,0,0,0,0, - 0,0,3,0,0,0,3,0,0,0,243,30,0,0,0,151, - 0,124,1,124,0,118,1,114,5,124,2,124,0,124,1,60, - 0,0,0,124,0,124,1,25,0,0,0,83,0,114,23,0, - 0,0,169,0,114,242,0,0,0,115,3,0,0,0,32,32, - 32,114,25,0,0,0,218,10,115,101,116,100,101,102,97,117, - 108,116,122,19,95,69,110,118,105,114,111,110,46,115,101,116, - 100,101,102,97,117,108,116,210,2,0,0,115,28,0,0,0, - 128,0,216,11,14,144,100,137,63,216,24,29,136,68,144,19, - 137,73,216,15,19,144,67,137,121,208,8,24,114,27,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,151,0,124,0,106, + 0,83,0,114,23,0,0,0,41,2,218,3,108,101,110,114, + 238,0,0,0,169,1,114,239,0,0,0,115,1,0,0,0, + 32,114,25,0,0,0,218,7,95,95,108,101,110,95,95,122, + 16,95,69,110,118,105,114,111,110,46,95,95,108,101,110,95, + 95,197,2,0,0,115,16,0,0,0,128,0,220,15,18,144, + 52,151,58,145,58,139,127,208,8,30,114,27,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,116,0,0,0,135,0,151,0,100,1,106, 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,124,1,171,1,0,0,0,0,0,0,1,0,124, - 0,83,0,114,23,0,0,0,41,1,218,6,117,112,100,97, - 116,101,41,2,114,238,0,0,0,218,5,111,116,104,101,114, - 115,2,0,0,0,32,32,114,25,0,0,0,218,7,95,95, - 105,111,114,95,95,122,16,95,69,110,118,105,114,111,110,46, - 95,95,105,111,114,95,95,215,2,0,0,115,19,0,0,0, - 128,0,216,8,12,143,11,137,11,144,69,212,8,26,216,15, - 19,136,11,114,27,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,106,0, - 0,0,151,0,116,1,0,0,0,0,0,0,0,0,124,1, - 116,2,0,0,0,0,0,0,0,0,171,2,0,0,0,0, - 0,0,115,6,116,4,0,0,0,0,0,0,0,0,83,0, - 116,7,0,0,0,0,0,0,0,0,124,0,171,1,0,0, - 0,0,0,0,125,2,124,2,106,9,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,124,1,171,1, - 0,0,0,0,0,0,1,0,124,2,83,0,114,23,0,0, - 0,169,5,114,115,0,0,0,114,229,0,0,0,218,14,78, - 111,116,73,109,112,108,101,109,101,110,116,101,100,114,12,1, - 0,0,114,18,1,0,0,169,3,114,238,0,0,0,114,19, - 1,0,0,114,127,0,0,0,115,3,0,0,0,32,32,32, - 114,25,0,0,0,218,6,95,95,111,114,95,95,122,15,95, - 69,110,118,105,114,111,110,46,95,95,111,114,95,95,219,2, - 0,0,115,44,0,0,0,128,0,220,15,25,152,37,164,23, - 212,15,41,220,19,33,208,12,33,220,14,18,144,52,139,106, - 136,3,216,8,11,143,10,137,10,144,53,212,8,25,216,15, - 18,136,10,114,27,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,106,0, - 0,0,151,0,116,1,0,0,0,0,0,0,0,0,124,1, - 116,2,0,0,0,0,0,0,0,0,171,2,0,0,0,0, - 0,0,115,6,116,4,0,0,0,0,0,0,0,0,83,0, - 116,7,0,0,0,0,0,0,0,0,124,1,171,1,0,0, - 0,0,0,0,125,2,124,2,106,9,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,124,0,171,1, - 0,0,0,0,0,0,1,0,124,2,83,0,114,23,0,0, - 0,114,22,1,0,0,114,24,1,0,0,115,3,0,0,0, - 32,32,32,114,25,0,0,0,218,7,95,95,114,111,114,95, - 95,122,16,95,69,110,118,105,114,111,110,46,95,95,114,111, - 114,95,95,226,2,0,0,115,44,0,0,0,128,0,220,15, - 25,152,37,164,23,212,15,41,220,19,33,208,12,33,220,14, - 18,144,53,139,107,136,3,216,8,11,143,10,137,10,144,52, - 212,8,24,216,15,18,136,10,114,27,0,0,0,78,41,15, - 218,8,95,95,110,97,109,101,95,95,218,10,95,95,109,111, - 100,117,108,101,95,95,218,12,95,95,113,117,97,108,110,97, - 109,101,95,95,114,240,0,0,0,114,245,0,0,0,114,248, - 0,0,0,114,252,0,0,0,114,255,0,0,0,114,3,1, - 0,0,114,10,1,0,0,114,13,1,0,0,114,16,1,0, - 0,114,20,1,0,0,114,25,1,0,0,114,27,1,0,0, - 114,15,1,0,0,114,27,0,0,0,114,25,0,0,0,114, - 231,0,0,0,114,231,0,0,0,160,2,0,0,115,62,0, - 0,0,132,0,242,2,5,5,26,242,14,6,5,39,242,16, - 4,5,32,242,12,7,5,42,242,18,4,5,38,242,12,1, - 5,31,242,6,5,5,49,242,14,1,5,26,242,6,3,5, - 25,242,10,2,5,20,242,8,5,5,19,243,14,5,5,19, - 114,27,0,0,0,114,231,0,0,0,99,0,0,0,0,0, - 0,0,0,0,0,0,0,7,0,0,0,3,0,0,0,243, - 246,0,0,0,135,6,135,7,151,0,116,0,0,0,0,0, - 0,0,0,0,100,1,107,40,0,0,114,58,100,2,132,0, - 125,0,124,0,138,6,116,2,0,0,0,0,0,0,0,0, - 125,1,136,6,102,1,100,3,132,8,125,2,105,0,125,3, - 116,4,0,0,0,0,0,0,0,0,106,7,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,171,0, - 0,0,0,0,0,0,68,0,93,16,0,0,92,2,0,0, - 125,4,125,5,124,5,124,3,2,0,124,2,124,4,171,1, - 0,0,0,0,0,0,60,0,0,0,140,18,4,0,110,38, - 116,9,0,0,0,0,0,0,0,0,106,10,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,171,0, - 0,0,0,0,0,0,138,7,136,7,102,1,100,4,132,8, - 138,6,136,7,102,1,100,5,132,8,125,1,137,6,125,2, - 116,4,0,0,0,0,0,0,0,0,125,3,116,13,0,0, - 0,0,0,0,0,0,124,3,124,2,124,1,137,6,124,1, - 171,5,0,0,0,0,0,0,83,0,41,6,78,114,42,0, - 0,0,99,1,0,0,0,0,0,0,0,0,0,0,0,6, - 0,0,0,19,0,0,0,243,104,0,0,0,151,0,116,1, - 0,0,0,0,0,0,0,0,124,0,116,2,0,0,0,0, - 0,0,0,0,171,2,0,0,0,0,0,0,115,33,116,5, - 0,0,0,0,0,0,0,0,100,1,116,7,0,0,0,0, - 0,0,0,0,124,0,171,1,0,0,0,0,0,0,106,8, + 0,0,0,136,0,102,1,100,2,132,8,137,0,106,2,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,122,6,0,0,171,1,0,0,0,0,0,0,130,1, - 124,0,83,0,41,2,78,250,20,115,116,114,32,101,120,112, - 101,99,116,101,100,44,32,110,111,116,32,37,115,41,5,114, - 115,0,0,0,114,47,0,0,0,114,223,0,0,0,218,4, - 116,121,112,101,114,28,1,0,0,169,1,114,244,0,0,0, - 115,1,0,0,0,32,114,25,0,0,0,218,9,99,104,101, - 99,107,95,115,116,114,122,33,95,99,114,101,97,116,101,101, - 110,118,105,114,111,110,46,60,108,111,99,97,108,115,62,46, - 99,104,101,99,107,95,115,116,114,236,2,0,0,115,44,0, - 0,0,128,0,220,19,29,152,101,164,83,212,19,41,220,22, - 31,208,32,54,188,20,184,101,187,27,215,57,77,209,57,77, - 209,32,77,211,22,78,208,16,78,216,19,24,136,76,114,27, - 0,0,0,99,1,0,0,0,0,0,0,0,0,0,0,0, - 3,0,0,0,19,0,0,0,243,48,0,0,0,149,1,151, - 0,2,0,137,1,124,0,171,1,0,0,0,0,0,0,106, - 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,171,0,0,0,0,0,0,0,83,0,114,23,0, - 0,0,41,1,218,5,117,112,112,101,114,41,2,114,243,0, - 0,0,218,6,101,110,99,111,100,101,115,2,0,0,0,32, - 128,114,25,0,0,0,114,233,0,0,0,122,33,95,99,114, - 101,97,116,101,101,110,118,105,114,111,110,46,60,108,111,99, - 97,108,115,62,46,101,110,99,111,100,101,107,101,121,242,2, - 0,0,115,22,0,0,0,248,128,0,217,19,25,152,35,147, - 59,215,19,36,209,19,36,211,19,38,208,12,38,114,27,0, - 0,0,99,1,0,0,0,0,0,0,0,0,0,0,0,6, - 0,0,0,19,0,0,0,243,138,0,0,0,149,1,151,0, - 116,1,0,0,0,0,0,0,0,0,124,0,116,2,0,0, - 0,0,0,0,0,0,171,2,0,0,0,0,0,0,115,33, - 116,5,0,0,0,0,0,0,0,0,100,1,116,7,0,0, + 0,106,5,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,171,0,0,0,0,0,0,0,68,0,171, + 0,0,0,0,0,0,0,171,1,0,0,0,0,0,0,125, + 1,100,3,124,1,155,0,100,4,157,3,83,0,41,5,78, + 122,2,44,32,99,1,0,0,0,0,0,0,0,0,0,0, + 0,6,0,0,0,51,0,0,0,243,110,0,0,0,149,1, + 75,0,1,0,151,0,124,0,93,44,0,0,92,2,0,0, + 125,1,125,2,137,3,106,1,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,124,1,171,1,0,0, + 0,0,0,0,155,2,100,0,137,3,106,3,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,124,2, + 171,1,0,0,0,0,0,0,155,2,157,3,150,1,151,1, + 1,0,140,46,4,0,121,1,173,3,119,1,41,2,122,2, + 58,32,78,41,2,114,235,0,0,0,114,237,0,0,0,41, + 4,218,2,46,48,114,244,0,0,0,114,245,0,0,0,114, + 239,0,0,0,115,4,0,0,0,32,32,32,128,114,25,0, + 0,0,250,9,60,103,101,110,101,120,112,114,62,122,36,95, + 69,110,118,105,114,111,110,46,95,95,114,101,112,114,95,95, + 46,60,108,111,99,97,108,115,62,46,60,103,101,110,101,120, + 112,114,62,201,2,0,0,115,62,0,0,0,248,232,0,248, + 128,0,242,0,3,36,10,225,16,26,144,3,144,85,240,3, + 0,16,20,143,126,137,126,152,99,211,15,34,208,14,37,160, + 82,168,4,215,40,56,209,40,56,184,21,211,40,63,208,39, + 66,212,12,67,241,3,3,36,10,249,115,4,0,0,0,131, + 50,53,1,122,9,101,110,118,105,114,111,110,40,123,122,2, + 125,41,41,3,114,134,0,0,0,114,238,0,0,0,218,5, + 105,116,101,109,115,41,2,114,239,0,0,0,218,15,102,111, + 114,109,97,116,116,101,100,95,105,116,101,109,115,115,2,0, + 0,0,96,32,114,25,0,0,0,218,8,95,95,114,101,112, + 114,95,95,122,17,95,69,110,118,105,114,111,110,46,95,95, + 114,101,112,114,95,95,200,2,0,0,115,61,0,0,0,248, + 128,0,216,26,30,159,41,153,41,243,0,3,36,10,224,30, + 34,159,106,153,106,215,30,46,209,30,46,211,30,48,244,5, + 3,36,10,243,0,3,27,10,136,15,240,8,0,18,28,152, + 79,208,27,44,168,67,208,15,48,208,8,48,114,27,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,24,0,0,0,151,0,116,1,0, + 0,0,0,0,0,0,0,124,0,171,1,0,0,0,0,0, + 0,83,0,114,23,0,0,0,41,1,218,4,100,105,99,116, + 114,3,1,0,0,115,1,0,0,0,32,114,25,0,0,0, + 218,4,99,111,112,121,122,13,95,69,110,118,105,114,111,110, + 46,99,111,112,121,207,2,0,0,115,12,0,0,0,128,0, + 220,15,19,144,68,139,122,208,8,25,114,27,0,0,0,99, + 3,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0, + 3,0,0,0,243,30,0,0,0,151,0,124,1,124,0,118, + 1,114,5,124,2,124,0,124,1,60,0,0,0,124,0,124, + 1,25,0,0,0,83,0,114,23,0,0,0,169,0,114,243, + 0,0,0,115,3,0,0,0,32,32,32,114,25,0,0,0, + 218,10,115,101,116,100,101,102,97,117,108,116,122,19,95,69, + 110,118,105,114,111,110,46,115,101,116,100,101,102,97,117,108, + 116,210,2,0,0,115,28,0,0,0,128,0,216,11,14,144, + 100,137,63,216,24,29,136,68,144,19,137,73,216,15,19,144, + 67,137,121,208,8,24,114,27,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,151,0,124,0,106,1,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,124,1,171, + 1,0,0,0,0,0,0,1,0,124,0,83,0,114,23,0, + 0,0,41,1,218,6,117,112,100,97,116,101,41,2,114,239, + 0,0,0,218,5,111,116,104,101,114,115,2,0,0,0,32, + 32,114,25,0,0,0,218,7,95,95,105,111,114,95,95,122, + 16,95,69,110,118,105,114,111,110,46,95,95,105,111,114,95, + 95,215,2,0,0,115,19,0,0,0,128,0,216,8,12,143, + 11,137,11,144,69,212,8,26,216,15,19,136,11,114,27,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,106,0,0,0,151,0,116,1, + 0,0,0,0,0,0,0,0,124,1,116,2,0,0,0,0, + 0,0,0,0,171,2,0,0,0,0,0,0,115,6,116,4, + 0,0,0,0,0,0,0,0,83,0,116,7,0,0,0,0, + 0,0,0,0,124,0,171,1,0,0,0,0,0,0,125,2, + 124,2,106,9,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,124,1,171,1,0,0,0,0,0,0, + 1,0,124,2,83,0,114,23,0,0,0,169,5,114,115,0, + 0,0,114,230,0,0,0,218,14,78,111,116,73,109,112,108, + 101,109,101,110,116,101,100,114,13,1,0,0,114,19,1,0, + 0,169,3,114,239,0,0,0,114,20,1,0,0,114,127,0, + 0,0,115,3,0,0,0,32,32,32,114,25,0,0,0,218, + 6,95,95,111,114,95,95,122,15,95,69,110,118,105,114,111, + 110,46,95,95,111,114,95,95,219,2,0,0,115,44,0,0, + 0,128,0,220,15,25,152,37,164,23,212,15,41,220,19,33, + 208,12,33,220,14,18,144,52,139,106,136,3,216,8,11,143, + 10,137,10,144,53,212,8,25,216,15,18,136,10,114,27,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,106,0,0,0,151,0,116,1, + 0,0,0,0,0,0,0,0,124,1,116,2,0,0,0,0, + 0,0,0,0,171,2,0,0,0,0,0,0,115,6,116,4, + 0,0,0,0,0,0,0,0,83,0,116,7,0,0,0,0, + 0,0,0,0,124,1,171,1,0,0,0,0,0,0,125,2, + 124,2,106,9,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,124,0,171,1,0,0,0,0,0,0, - 106,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,122,6,0,0,171,1,0,0,0,0,0,0, - 130,1,124,0,106,11,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,137,1,100,2,171,2,0,0, - 0,0,0,0,83,0,41,3,78,114,33,1,0,0,218,15, - 115,117,114,114,111,103,97,116,101,101,115,99,97,112,101,41, - 6,114,115,0,0,0,114,47,0,0,0,114,223,0,0,0, - 114,34,1,0,0,114,28,1,0,0,114,39,1,0,0,169, - 2,114,244,0,0,0,218,8,101,110,99,111,100,105,110,103, - 115,2,0,0,0,32,128,114,25,0,0,0,114,39,1,0, - 0,122,30,95,99,114,101,97,116,101,101,110,118,105,114,111, - 110,46,60,108,111,99,97,108,115,62,46,101,110,99,111,100, - 101,250,2,0,0,115,58,0,0,0,248,128,0,220,19,29, - 152,101,164,83,212,19,41,220,22,31,208,32,54,188,20,184, - 101,187,27,215,57,77,209,57,77,209,32,77,211,22,78,208, - 16,78,216,19,24,151,60,145,60,160,8,208,42,59,211,19, - 60,208,12,60,114,27,0,0,0,99,1,0,0,0,0,0, - 0,0,0,0,0,0,4,0,0,0,19,0,0,0,243,40, - 0,0,0,149,1,151,0,124,0,106,1,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,137,1,100, - 1,171,2,0,0,0,0,0,0,83,0,41,2,78,114,41, - 1,0,0,41,1,218,6,100,101,99,111,100,101,114,42,1, - 0,0,115,2,0,0,0,32,128,114,25,0,0,0,114,45, - 1,0,0,122,30,95,99,114,101,97,116,101,101,110,118,105, - 114,111,110,46,60,108,111,99,97,108,115,62,46,100,101,99, - 111,100,101,254,2,0,0,115,21,0,0,0,248,128,0,216, - 19,24,151,60,145,60,160,8,208,42,59,211,19,60,208,12, - 60,114,27,0,0,0,41,7,114,11,0,0,0,114,47,0, - 0,0,114,204,0,0,0,114,8,1,0,0,114,130,0,0, - 0,218,21,103,101,116,102,105,108,101,115,121,115,116,101,109, - 101,110,99,111,100,105,110,103,114,231,0,0,0,41,8,114, - 36,1,0,0,114,45,1,0,0,114,233,0,0,0,114,239, - 0,0,0,114,243,0,0,0,114,244,0,0,0,114,39,1, - 0,0,114,43,1,0,0,115,8,0,0,0,32,32,32,32, - 32,32,64,64,114,25,0,0,0,218,14,95,99,114,101,97, - 116,101,101,110,118,105,114,111,110,114,47,1,0,0,233,2, - 0,0,115,137,0,0,0,249,128,0,220,7,11,136,116,130, - 124,242,4,3,9,25,240,8,0,18,27,136,6,220,17,20, - 136,6,244,2,1,9,39,224,15,17,136,4,220,26,33,159, - 45,153,45,155,47,242,0,1,9,41,137,74,136,67,144,21, - 216,35,40,136,68,145,25,152,51,147,30,210,12,32,241,3, - 1,9,41,244,8,0,20,23,215,19,44,209,19,44,211,19, - 46,136,8,244,2,3,9,61,244,8,1,9,61,224,20,26, - 136,9,220,15,22,136,4,220,11,19,144,68,216,8,17,144, - 54,216,8,14,144,6,243,5,2,12,24,240,0,2,5,24, - 114,27,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,46,0,0,0,151, - 0,116,0,0,0,0,0,0,0,0,0,106,3,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,124, - 0,124,1,171,2,0,0,0,0,0,0,83,0,41,1,122, - 169,71,101,116,32,97,110,32,101,110,118,105,114,111,110,109, - 101,110,116,32,118,97,114,105,97,98,108,101,44,32,114,101, - 116,117,114,110,32,78,111,110,101,32,105,102,32,105,116,32, - 100,111,101,115,110,39,116,32,101,120,105,115,116,46,10,32, - 32,32,32,84,104,101,32,111,112,116,105,111,110,97,108,32, - 115,101,99,111,110,100,32,97,114,103,117,109,101,110,116,32, - 99,97,110,32,115,112,101,99,105,102,121,32,97,110,32,97, - 108,116,101,114,110,97,116,101,32,100,101,102,97,117,108,116, - 46,10,32,32,32,32,107,101,121,44,32,100,101,102,97,117, - 108,116,32,97,110,100,32,116,104,101,32,114,101,115,117,108, - 116,32,97,114,101,32,115,116,114,46,41,2,114,204,0,0, - 0,114,222,0,0,0,169,2,114,243,0,0,0,218,7,100, - 101,102,97,117,108,116,115,2,0,0,0,32,32,114,25,0, - 0,0,218,6,103,101,116,101,110,118,114,51,1,0,0,11, - 3,0,0,115,21,0,0,0,128,0,244,8,0,12,19,143, - 59,137,59,144,115,152,71,211,11,36,208,4,36,114,27,0, - 0,0,41,2,114,51,1,0,0,114,224,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,104,0,0,0,151,0,116,1,0,0,0,0, + 1,0,124,2,83,0,114,23,0,0,0,114,23,1,0,0, + 114,25,1,0,0,115,3,0,0,0,32,32,32,114,25,0, + 0,0,218,7,95,95,114,111,114,95,95,122,16,95,69,110, + 118,105,114,111,110,46,95,95,114,111,114,95,95,226,2,0, + 0,115,44,0,0,0,128,0,220,15,25,152,37,164,23,212, + 15,41,220,19,33,208,12,33,220,14,18,144,53,139,107,136, + 3,216,8,11,143,10,137,10,144,52,212,8,24,216,15,18, + 136,10,114,27,0,0,0,78,41,15,218,8,95,95,110,97, + 109,101,95,95,218,10,95,95,109,111,100,117,108,101,95,95, + 218,12,95,95,113,117,97,108,110,97,109,101,95,95,114,241, + 0,0,0,114,246,0,0,0,114,249,0,0,0,114,253,0, + 0,0,114,0,1,0,0,114,4,1,0,0,114,11,1,0, + 0,114,14,1,0,0,114,17,1,0,0,114,21,1,0,0, + 114,26,1,0,0,114,28,1,0,0,114,16,1,0,0,114, + 27,0,0,0,114,25,0,0,0,114,232,0,0,0,114,232, + 0,0,0,160,2,0,0,115,62,0,0,0,132,0,242,2, + 5,5,26,242,14,6,5,39,242,16,4,5,32,242,12,7, + 5,42,242,18,4,5,38,242,12,1,5,31,242,6,5,5, + 49,242,14,1,5,26,242,6,3,5,25,242,10,2,5,20, + 242,8,5,5,19,243,14,5,5,19,114,27,0,0,0,114, + 232,0,0,0,99,0,0,0,0,0,0,0,0,0,0,0, + 0,7,0,0,0,3,0,0,0,243,246,0,0,0,135,6, + 135,7,151,0,116,0,0,0,0,0,0,0,0,0,100,1, + 107,40,0,0,114,58,100,2,132,0,125,0,124,0,138,6, + 116,2,0,0,0,0,0,0,0,0,125,1,136,6,102,1, + 100,3,132,8,125,2,105,0,125,3,116,4,0,0,0,0, + 0,0,0,0,106,7,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,171,0,0,0,0,0,0,0, + 68,0,93,16,0,0,92,2,0,0,125,4,125,5,124,5, + 124,3,2,0,124,2,124,4,171,1,0,0,0,0,0,0, + 60,0,0,0,140,18,4,0,110,38,116,9,0,0,0,0, + 0,0,0,0,106,10,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,171,0,0,0,0,0,0,0, + 138,7,136,7,102,1,100,4,132,8,138,6,136,7,102,1, + 100,5,132,8,125,1,137,6,125,2,116,4,0,0,0,0, + 0,0,0,0,125,3,116,13,0,0,0,0,0,0,0,0, + 124,3,124,2,124,1,137,6,124,1,171,5,0,0,0,0, + 0,0,83,0,41,6,78,114,42,0,0,0,99,1,0,0, + 0,0,0,0,0,0,0,0,0,6,0,0,0,19,0,0, + 0,243,104,0,0,0,151,0,116,1,0,0,0,0,0,0, + 0,0,124,0,116,2,0,0,0,0,0,0,0,0,171,2, + 0,0,0,0,0,0,115,33,116,5,0,0,0,0,0,0, + 0,0,100,1,116,7,0,0,0,0,0,0,0,0,124,0, + 171,1,0,0,0,0,0,0,106,8,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,122,6,0,0, + 171,1,0,0,0,0,0,0,130,1,124,0,83,0,41,2, + 78,250,20,115,116,114,32,101,120,112,101,99,116,101,100,44, + 32,110,111,116,32,37,115,41,5,114,115,0,0,0,114,47, + 0,0,0,114,224,0,0,0,218,4,116,121,112,101,114,29, + 1,0,0,169,1,114,245,0,0,0,115,1,0,0,0,32, + 114,25,0,0,0,218,9,99,104,101,99,107,95,115,116,114, + 122,33,95,99,114,101,97,116,101,101,110,118,105,114,111,110, + 46,60,108,111,99,97,108,115,62,46,99,104,101,99,107,95, + 115,116,114,236,2,0,0,115,44,0,0,0,128,0,220,19, + 29,152,101,164,83,212,19,41,220,22,31,208,32,54,188,20, + 184,101,187,27,215,57,77,209,57,77,209,32,77,211,22,78, + 208,16,78,216,19,24,136,76,114,27,0,0,0,99,1,0, + 0,0,0,0,0,0,0,0,0,0,3,0,0,0,19,0, + 0,0,243,48,0,0,0,149,1,151,0,2,0,137,1,124, + 0,171,1,0,0,0,0,0,0,106,1,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,171,0,0, + 0,0,0,0,0,83,0,114,23,0,0,0,41,1,218,5, + 117,112,112,101,114,41,2,114,244,0,0,0,218,6,101,110, + 99,111,100,101,115,2,0,0,0,32,128,114,25,0,0,0, + 114,234,0,0,0,122,33,95,99,114,101,97,116,101,101,110, + 118,105,114,111,110,46,60,108,111,99,97,108,115,62,46,101, + 110,99,111,100,101,107,101,121,242,2,0,0,115,22,0,0, + 0,248,128,0,217,19,25,152,35,147,59,215,19,36,209,19, + 36,211,19,38,208,12,38,114,27,0,0,0,99,1,0,0, + 0,0,0,0,0,0,0,0,0,6,0,0,0,19,0,0, + 0,243,138,0,0,0,149,1,151,0,116,1,0,0,0,0, 0,0,0,0,124,0,116,2,0,0,0,0,0,0,0,0, 171,2,0,0,0,0,0,0,115,33,116,5,0,0,0,0, 0,0,0,0,100,1,116,7,0,0,0,0,0,0,0,0, 124,0,171,1,0,0,0,0,0,0,106,8,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,122,6, - 0,0,171,1,0,0,0,0,0,0,130,1,124,0,83,0, - 41,2,78,122,22,98,121,116,101,115,32,101,120,112,101,99, - 116,101,100,44,32,110,111,116,32,37,115,41,5,114,115,0, - 0,0,114,116,0,0,0,114,223,0,0,0,114,34,1,0, - 0,114,28,1,0,0,114,35,1,0,0,115,1,0,0,0, - 32,114,25,0,0,0,218,12,95,99,104,101,99,107,95,98, - 121,116,101,115,114,53,1,0,0,21,3,0,0,115,44,0, - 0,0,128,0,220,15,25,152,37,164,21,212,15,39,220,18, - 27,208,28,52,180,116,184,69,179,123,215,55,75,209,55,75, - 209,28,75,211,18,76,208,12,76,216,15,20,136,12,114,27, - 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,46,0,0,0,151,0,116, - 0,0,0,0,0,0,0,0,0,106,3,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,124,0,124, - 1,171,2,0,0,0,0,0,0,83,0,41,1,122,179,71, - 101,116,32,97,110,32,101,110,118,105,114,111,110,109,101,110, - 116,32,118,97,114,105,97,98,108,101,44,32,114,101,116,117, - 114,110,32,78,111,110,101,32,105,102,32,105,116,32,100,111, - 101,115,110,39,116,32,101,120,105,115,116,46,10,32,32,32, - 32,32,32,32,32,84,104,101,32,111,112,116,105,111,110,97, - 108,32,115,101,99,111,110,100,32,97,114,103,117,109,101,110, - 116,32,99,97,110,32,115,112,101,99,105,102,121,32,97,110, - 32,97,108,116,101,114,110,97,116,101,32,100,101,102,97,117, - 108,116,46,10,32,32,32,32,32,32,32,32,107,101,121,44, - 32,100,101,102,97,117,108,116,32,97,110,100,32,116,104,101, - 32,114,101,115,117,108,116,32,97,114,101,32,98,121,116,101, - 115,46,41,2,218,8,101,110,118,105,114,111,110,98,114,222, - 0,0,0,114,49,1,0,0,115,2,0,0,0,32,32,114, - 25,0,0,0,218,7,103,101,116,101,110,118,98,114,56,1, - 0,0,32,3,0,0,115,21,0,0,0,128,0,244,8,0, - 16,24,143,124,137,124,152,67,160,23,211,15,41,208,8,41, - 114,27,0,0,0,41,2,114,55,1,0,0,114,56,1,0, - 0,99,0,0,0,0,0,0,0,0,0,0,0,0,2,0, - 0,0,3,0,0,0,243,118,0,0,0,135,2,135,3,151, - 0,116,1,0,0,0,0,0,0,0,0,106,2,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,171, - 0,0,0,0,0,0,0,138,2,116,1,0,0,0,0,0, - 0,0,0,106,4,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,171,0,0,0,0,0,0,0,138, - 3,136,2,136,3,102,2,100,1,132,8,125,0,136,2,136, - 3,102,2,100,2,132,8,125,1,124,0,124,1,102,2,83, - 0,41,3,78,99,1,0,0,0,0,0,0,0,0,0,0, - 0,4,0,0,0,19,0,0,0,243,98,0,0,0,149,2, - 151,0,116,1,0,0,0,0,0,0,0,0,124,0,171,1, - 0,0,0,0,0,0,125,0,116,3,0,0,0,0,0,0, - 0,0,124,0,116,4,0,0,0,0,0,0,0,0,171,2, - 0,0,0,0,0,0,114,18,124,0,106,7,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,137,1, - 137,2,171,2,0,0,0,0,0,0,83,0,124,0,83,0, - 41,1,97,23,1,0,0,69,110,99,111,100,101,32,102,105, - 108,101,110,97,109,101,32,40,97,110,32,111,115,46,80,97, - 116,104,76,105,107,101,44,32,98,121,116,101,115,44,32,111, - 114,32,115,116,114,41,32,116,111,32,116,104,101,32,102,105, + 0,0,171,1,0,0,0,0,0,0,130,1,124,0,106,11, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,137,1,100,2,171,2,0,0,0,0,0,0,83,0, + 41,3,78,114,34,1,0,0,218,15,115,117,114,114,111,103, + 97,116,101,101,115,99,97,112,101,41,6,114,115,0,0,0, + 114,47,0,0,0,114,224,0,0,0,114,35,1,0,0,114, + 29,1,0,0,114,40,1,0,0,169,2,114,245,0,0,0, + 218,8,101,110,99,111,100,105,110,103,115,2,0,0,0,32, + 128,114,25,0,0,0,114,40,1,0,0,122,30,95,99,114, + 101,97,116,101,101,110,118,105,114,111,110,46,60,108,111,99, + 97,108,115,62,46,101,110,99,111,100,101,250,2,0,0,115, + 58,0,0,0,248,128,0,220,19,29,152,101,164,83,212,19, + 41,220,22,31,208,32,54,188,20,184,101,187,27,215,57,77, + 209,57,77,209,32,77,211,22,78,208,16,78,216,19,24,151, + 60,145,60,160,8,208,42,59,211,19,60,208,12,60,114,27, + 0,0,0,99,1,0,0,0,0,0,0,0,0,0,0,0, + 4,0,0,0,19,0,0,0,243,40,0,0,0,149,1,151, + 0,124,0,106,1,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,137,1,100,1,171,2,0,0,0, + 0,0,0,83,0,41,2,78,114,42,1,0,0,41,1,218, + 6,100,101,99,111,100,101,114,43,1,0,0,115,2,0,0, + 0,32,128,114,25,0,0,0,114,46,1,0,0,122,30,95, + 99,114,101,97,116,101,101,110,118,105,114,111,110,46,60,108, + 111,99,97,108,115,62,46,100,101,99,111,100,101,254,2,0, + 0,115,21,0,0,0,248,128,0,216,19,24,151,60,145,60, + 160,8,208,42,59,211,19,60,208,12,60,114,27,0,0,0, + 41,7,114,11,0,0,0,114,47,0,0,0,114,205,0,0, + 0,114,9,1,0,0,114,130,0,0,0,218,21,103,101,116, + 102,105,108,101,115,121,115,116,101,109,101,110,99,111,100,105, + 110,103,114,232,0,0,0,41,8,114,37,1,0,0,114,46, + 1,0,0,114,234,0,0,0,114,240,0,0,0,114,244,0, + 0,0,114,245,0,0,0,114,40,1,0,0,114,44,1,0, + 0,115,8,0,0,0,32,32,32,32,32,32,64,64,114,25, + 0,0,0,218,14,95,99,114,101,97,116,101,101,110,118,105, + 114,111,110,114,48,1,0,0,233,2,0,0,115,137,0,0, + 0,249,128,0,220,7,11,136,116,130,124,242,4,3,9,25, + 240,8,0,18,27,136,6,220,17,20,136,6,244,2,1,9, + 39,224,15,17,136,4,220,26,33,159,45,153,45,155,47,242, + 0,1,9,41,137,74,136,67,144,21,216,35,40,136,68,145, + 25,152,51,147,30,210,12,32,241,3,1,9,41,244,8,0, + 20,23,215,19,44,209,19,44,211,19,46,136,8,244,2,3, + 9,61,244,8,1,9,61,224,20,26,136,9,220,15,22,136, + 4,220,11,19,144,68,216,8,17,144,54,216,8,14,144,6, + 243,5,2,12,24,240,0,2,5,24,114,27,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,46,0,0,0,151,0,116,0,0,0,0, + 0,0,0,0,0,106,3,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,124,0,124,1,171,2,0, + 0,0,0,0,0,83,0,41,1,122,169,71,101,116,32,97, + 110,32,101,110,118,105,114,111,110,109,101,110,116,32,118,97, + 114,105,97,98,108,101,44,32,114,101,116,117,114,110,32,78, + 111,110,101,32,105,102,32,105,116,32,100,111,101,115,110,39, + 116,32,101,120,105,115,116,46,10,32,32,32,32,84,104,101, + 32,111,112,116,105,111,110,97,108,32,115,101,99,111,110,100, + 32,97,114,103,117,109,101,110,116,32,99,97,110,32,115,112, + 101,99,105,102,121,32,97,110,32,97,108,116,101,114,110,97, + 116,101,32,100,101,102,97,117,108,116,46,10,32,32,32,32, + 107,101,121,44,32,100,101,102,97,117,108,116,32,97,110,100, + 32,116,104,101,32,114,101,115,117,108,116,32,97,114,101,32, + 115,116,114,46,41,2,114,205,0,0,0,114,223,0,0,0, + 169,2,114,244,0,0,0,218,7,100,101,102,97,117,108,116, + 115,2,0,0,0,32,32,114,25,0,0,0,218,6,103,101, + 116,101,110,118,114,52,1,0,0,11,3,0,0,115,21,0, + 0,0,128,0,244,8,0,12,19,143,59,137,59,144,115,152, + 71,211,11,36,208,4,36,114,27,0,0,0,41,2,114,52, + 1,0,0,114,225,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,104,0, + 0,0,151,0,116,1,0,0,0,0,0,0,0,0,124,0, + 116,2,0,0,0,0,0,0,0,0,171,2,0,0,0,0, + 0,0,115,33,116,5,0,0,0,0,0,0,0,0,100,1, + 116,7,0,0,0,0,0,0,0,0,124,0,171,1,0,0, + 0,0,0,0,106,8,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,122,6,0,0,171,1,0,0, + 0,0,0,0,130,1,124,0,83,0,41,2,78,122,22,98, + 121,116,101,115,32,101,120,112,101,99,116,101,100,44,32,110, + 111,116,32,37,115,41,5,114,115,0,0,0,114,116,0,0, + 0,114,224,0,0,0,114,35,1,0,0,114,29,1,0,0, + 114,36,1,0,0,115,1,0,0,0,32,114,25,0,0,0, + 218,12,95,99,104,101,99,107,95,98,121,116,101,115,114,54, + 1,0,0,21,3,0,0,115,44,0,0,0,128,0,220,15, + 25,152,37,164,21,212,15,39,220,18,27,208,28,52,180,116, + 184,69,179,123,215,55,75,209,55,75,209,28,75,211,18,76, + 208,12,76,216,15,20,136,12,114,27,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,46,0,0,0,151,0,116,0,0,0,0,0,0, + 0,0,0,106,3,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,124,0,124,1,171,2,0,0,0, + 0,0,0,83,0,41,1,122,179,71,101,116,32,97,110,32, + 101,110,118,105,114,111,110,109,101,110,116,32,118,97,114,105, + 97,98,108,101,44,32,114,101,116,117,114,110,32,78,111,110, + 101,32,105,102,32,105,116,32,100,111,101,115,110,39,116,32, + 101,120,105,115,116,46,10,32,32,32,32,32,32,32,32,84, + 104,101,32,111,112,116,105,111,110,97,108,32,115,101,99,111, + 110,100,32,97,114,103,117,109,101,110,116,32,99,97,110,32, + 115,112,101,99,105,102,121,32,97,110,32,97,108,116,101,114, + 110,97,116,101,32,100,101,102,97,117,108,116,46,10,32,32, + 32,32,32,32,32,32,107,101,121,44,32,100,101,102,97,117, + 108,116,32,97,110,100,32,116,104,101,32,114,101,115,117,108, + 116,32,97,114,101,32,98,121,116,101,115,46,41,2,218,8, + 101,110,118,105,114,111,110,98,114,223,0,0,0,114,50,1, + 0,0,115,2,0,0,0,32,32,114,25,0,0,0,218,7, + 103,101,116,101,110,118,98,114,57,1,0,0,32,3,0,0, + 115,21,0,0,0,128,0,244,8,0,16,24,143,124,137,124, + 152,67,160,23,211,15,41,208,8,41,114,27,0,0,0,41, + 2,114,56,1,0,0,114,57,1,0,0,99,0,0,0,0, + 0,0,0,0,0,0,0,0,2,0,0,0,3,0,0,0, + 243,118,0,0,0,135,2,135,3,151,0,116,1,0,0,0, + 0,0,0,0,0,106,2,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,171,0,0,0,0,0,0, + 0,138,2,116,1,0,0,0,0,0,0,0,0,106,4,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,171,0,0,0,0,0,0,0,138,3,136,2,136,3,102, + 2,100,1,132,8,125,0,136,2,136,3,102,2,100,2,132, + 8,125,1,124,0,124,1,102,2,83,0,41,3,78,99,1, + 0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,19, + 0,0,0,243,98,0,0,0,149,2,151,0,116,1,0,0, + 0,0,0,0,0,0,124,0,171,1,0,0,0,0,0,0, + 125,0,116,3,0,0,0,0,0,0,0,0,124,0,116,4, + 0,0,0,0,0,0,0,0,171,2,0,0,0,0,0,0, + 114,18,124,0,106,7,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,137,1,137,2,171,2,0,0, + 0,0,0,0,83,0,124,0,83,0,41,1,97,23,1,0, + 0,69,110,99,111,100,101,32,102,105,108,101,110,97,109,101, + 32,40,97,110,32,111,115,46,80,97,116,104,76,105,107,101, + 44,32,98,121,116,101,115,44,32,111,114,32,115,116,114,41, + 32,116,111,32,116,104,101,32,102,105,108,101,115,121,115,116, + 101,109,10,32,32,32,32,32,32,32,32,101,110,99,111,100, + 105,110,103,32,119,105,116,104,32,39,115,117,114,114,111,103, + 97,116,101,101,115,99,97,112,101,39,32,101,114,114,111,114, + 32,104,97,110,100,108,101,114,44,32,114,101,116,117,114,110, + 32,98,121,116,101,115,32,117,110,99,104,97,110,103,101,100, + 46,10,32,32,32,32,32,32,32,32,79,110,32,87,105,110, + 100,111,119,115,44,32,117,115,101,32,39,115,116,114,105,99, + 116,39,32,101,114,114,111,114,32,104,97,110,100,108,101,114, + 32,105,102,32,116,104,101,32,102,105,108,101,32,115,121,115, + 116,101,109,32,101,110,99,111,100,105,110,103,32,105,115,10, + 32,32,32,32,32,32,32,32,39,109,98,99,115,39,32,40, + 119,104,105,99,104,32,105,115,32,116,104,101,32,100,101,102, + 97,117,108,116,32,101,110,99,111,100,105,110,103,41,46,10, + 32,32,32,32,32,32,32,32,41,4,114,132,0,0,0,114, + 115,0,0,0,114,47,0,0,0,114,40,1,0,0,169,3, + 218,8,102,105,108,101,110,97,109,101,114,44,1,0,0,218, + 6,101,114,114,111,114,115,115,3,0,0,0,32,128,128,114, + 25,0,0,0,114,17,0,0,0,122,26,95,102,115,99,111, + 100,101,99,46,60,108,111,99,97,108,115,62,46,102,115,101, + 110,99,111,100,101,44,3,0,0,115,47,0,0,0,248,128, + 0,244,12,0,20,26,152,40,211,19,35,136,8,220,11,21, + 144,104,164,3,212,11,36,216,19,27,151,63,145,63,160,56, + 168,86,211,19,52,208,12,52,224,19,27,136,79,114,27,0, + 0,0,99,1,0,0,0,0,0,0,0,0,0,0,0,4, + 0,0,0,19,0,0,0,243,98,0,0,0,149,2,151,0, + 116,1,0,0,0,0,0,0,0,0,124,0,171,1,0,0, + 0,0,0,0,125,0,116,3,0,0,0,0,0,0,0,0, + 124,0,116,4,0,0,0,0,0,0,0,0,171,2,0,0, + 0,0,0,0,114,18,124,0,106,7,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,137,1,137,2, + 171,2,0,0,0,0,0,0,83,0,124,0,83,0,41,1, + 97,23,1,0,0,68,101,99,111,100,101,32,102,105,108,101, + 110,97,109,101,32,40,97,110,32,111,115,46,80,97,116,104, + 76,105,107,101,44,32,98,121,116,101,115,44,32,111,114,32, + 115,116,114,41,32,102,114,111,109,32,116,104,101,32,102,105, 108,101,115,121,115,116,101,109,10,32,32,32,32,32,32,32, 32,101,110,99,111,100,105,110,103,32,119,105,116,104,32,39, 115,117,114,114,111,103,97,116,101,101,115,99,97,112,101,39, 32,101,114,114,111,114,32,104,97,110,100,108,101,114,44,32, - 114,101,116,117,114,110,32,98,121,116,101,115,32,117,110,99, - 104,97,110,103,101,100,46,10,32,32,32,32,32,32,32,32, - 79,110,32,87,105,110,100,111,119,115,44,32,117,115,101,32, - 39,115,116,114,105,99,116,39,32,101,114,114,111,114,32,104, - 97,110,100,108,101,114,32,105,102,32,116,104,101,32,102,105, - 108,101,32,115,121,115,116,101,109,32,101,110,99,111,100,105, - 110,103,32,105,115,10,32,32,32,32,32,32,32,32,39,109, - 98,99,115,39,32,40,119,104,105,99,104,32,105,115,32,116, - 104,101,32,100,101,102,97,117,108,116,32,101,110,99,111,100, - 105,110,103,41,46,10,32,32,32,32,32,32,32,32,41,4, - 114,132,0,0,0,114,115,0,0,0,114,47,0,0,0,114, - 39,1,0,0,169,3,218,8,102,105,108,101,110,97,109,101, - 114,43,1,0,0,218,6,101,114,114,111,114,115,115,3,0, - 0,0,32,128,128,114,25,0,0,0,114,17,0,0,0,122, - 26,95,102,115,99,111,100,101,99,46,60,108,111,99,97,108, - 115,62,46,102,115,101,110,99,111,100,101,44,3,0,0,115, - 47,0,0,0,248,128,0,244,12,0,20,26,152,40,211,19, - 35,136,8,220,11,21,144,104,164,3,212,11,36,216,19,27, - 151,63,145,63,160,56,168,86,211,19,52,208,12,52,224,19, - 27,136,79,114,27,0,0,0,99,1,0,0,0,0,0,0, - 0,0,0,0,0,4,0,0,0,19,0,0,0,243,98,0, - 0,0,149,2,151,0,116,1,0,0,0,0,0,0,0,0, - 124,0,171,1,0,0,0,0,0,0,125,0,116,3,0,0, - 0,0,0,0,0,0,124,0,116,4,0,0,0,0,0,0, - 0,0,171,2,0,0,0,0,0,0,114,18,124,0,106,7, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,137,1,137,2,171,2,0,0,0,0,0,0,83,0, - 124,0,83,0,41,1,97,23,1,0,0,68,101,99,111,100, - 101,32,102,105,108,101,110,97,109,101,32,40,97,110,32,111, - 115,46,80,97,116,104,76,105,107,101,44,32,98,121,116,101, - 115,44,32,111,114,32,115,116,114,41,32,102,114,111,109,32, - 116,104,101,32,102,105,108,101,115,121,115,116,101,109,10,32, - 32,32,32,32,32,32,32,101,110,99,111,100,105,110,103,32, - 119,105,116,104,32,39,115,117,114,114,111,103,97,116,101,101, - 115,99,97,112,101,39,32,101,114,114,111,114,32,104,97,110, - 100,108,101,114,44,32,114,101,116,117,114,110,32,115,116,114, - 32,117,110,99,104,97,110,103,101,100,46,32,79,110,10,32, - 32,32,32,32,32,32,32,87,105,110,100,111,119,115,44,32, - 117,115,101,32,39,115,116,114,105,99,116,39,32,101,114,114, - 111,114,32,104,97,110,100,108,101,114,32,105,102,32,116,104, - 101,32,102,105,108,101,32,115,121,115,116,101,109,32,101,110, - 99,111,100,105,110,103,32,105,115,10,32,32,32,32,32,32, - 32,32,39,109,98,99,115,39,32,40,119,104,105,99,104,32, - 105,115,32,116,104,101,32,100,101,102,97,117,108,116,32,101, - 110,99,111,100,105,110,103,41,46,10,32,32,32,32,32,32, - 32,32,41,4,114,132,0,0,0,114,115,0,0,0,114,116, - 0,0,0,114,45,1,0,0,114,59,1,0,0,115,3,0, - 0,0,32,128,128,114,25,0,0,0,114,18,0,0,0,122, - 26,95,102,115,99,111,100,101,99,46,60,108,111,99,97,108, - 115,62,46,102,115,100,101,99,111,100,101,56,3,0,0,115, - 47,0,0,0,248,128,0,244,12,0,20,26,152,40,211,19, - 35,136,8,220,11,21,144,104,164,5,212,11,38,216,19,27, - 151,63,145,63,160,56,168,86,211,19,52,208,12,52,224,19, - 27,136,79,114,27,0,0,0,41,3,114,130,0,0,0,114, - 46,1,0,0,218,25,103,101,116,102,105,108,101,115,121,115, - 116,101,109,101,110,99,111,100,101,101,114,114,111,114,115,41, - 4,114,17,0,0,0,114,18,0,0,0,114,43,1,0,0, - 114,61,1,0,0,115,4,0,0,0,32,32,64,64,114,25, - 0,0,0,218,8,95,102,115,99,111,100,101,99,114,64,1, - 0,0,40,3,0,0,115,54,0,0,0,249,128,0,220,15, - 18,215,15,40,209,15,40,211,15,42,128,72,220,13,16,215, - 13,42,209,13,42,211,13,44,128,70,245,4,10,5,28,245, - 24,10,5,28,240,24,0,12,20,144,88,208,11,29,208,4, - 29,114,27,0,0,0,218,4,102,111,114,107,218,6,115,112, - 97,119,110,118,114,183,0,0,0,41,3,218,6,80,95,87, - 65,73,84,218,8,80,95,78,79,87,65,73,84,218,9,80, - 95,78,79,87,65,73,84,79,99,5,0,0,0,0,0,0, - 0,0,0,0,0,5,0,0,0,3,0,0,0,243,58,1, - 0,0,151,0,116,1,0,0,0,0,0,0,0,0,124,2, - 116,2,0,0,0,0,0,0,0,0,116,4,0,0,0,0, - 0,0,0,0,102,2,171,2,0,0,0,0,0,0,115,11, - 116,7,0,0,0,0,0,0,0,0,100,1,171,1,0,0, - 0,0,0,0,130,1,124,2,114,5,124,2,100,2,25,0, - 0,0,115,11,116,9,0,0,0,0,0,0,0,0,100,3, - 171,1,0,0,0,0,0,0,130,1,116,11,0,0,0,0, - 0,0,0,0,171,0,0,0,0,0,0,0,125,5,124,5, - 115,25,9,0,124,3,128,10,2,0,124,4,124,1,124,2, - 171,2,0,0,0,0,0,0,1,0,110,11,2,0,124,4, - 124,1,124,2,124,3,171,3,0,0,0,0,0,0,1,0, - 121,0,121,0,124,0,116,14,0,0,0,0,0,0,0,0, - 107,40,0,0,114,2,124,5,83,0,9,0,116,17,0,0, - 0,0,0,0,0,0,124,5,100,2,171,2,0,0,0,0, - 0,0,92,2,0,0,125,6,125,7,116,19,0,0,0,0, - 0,0,0,0,124,7,171,1,0,0,0,0,0,0,114,1, - 140,28,116,21,0,0,0,0,0,0,0,0,124,7,171,1, - 0,0,0,0,0,0,83,0,35,0,1,0,116,13,0,0, - 0,0,0,0,0,0,100,4,171,1,0,0,0,0,0,0, - 1,0,89,0,121,0,120,3,89,0,119,1,41,5,78,122, - 30,97,114,103,118,32,109,117,115,116,32,98,101,32,97,32, - 116,117,112,108,101,32,111,114,32,97,32,108,105,115,116,114, - 2,0,0,0,122,34,97,114,103,118,32,102,105,114,115,116, - 32,101,108,101,109,101,110,116,32,99,97,110,110,111,116,32, - 98,101,32,101,109,112,116,121,233,127,0,0,0,41,11,114, - 115,0,0,0,114,136,0,0,0,114,30,0,0,0,114,223, - 0,0,0,114,225,0,0,0,114,65,1,0,0,114,40,0, - 0,0,114,68,1,0,0,218,7,119,97,105,116,112,105,100, - 218,10,87,73,70,83,84,79,80,80,69,68,218,22,119,97, - 105,116,115,116,97,116,117,115,95,116,111,95,101,120,105,116, - 99,111,100,101,41,8,114,119,0,0,0,114,185,0,0,0, - 114,186,0,0,0,114,191,0,0,0,218,4,102,117,110,99, - 218,3,112,105,100,218,4,119,112,105,100,218,3,115,116,115, - 115,8,0,0,0,32,32,32,32,32,32,32,32,114,25,0, - 0,0,218,9,95,115,112,97,119,110,118,101,102,114,79,1, - 0,0,85,3,0,0,115,164,0,0,0,128,0,228,15,25, - 152,36,164,21,172,4,160,13,212,15,46,220,18,27,208,28, - 60,211,18,61,208,12,61,217,15,19,152,52,160,1,154,55, - 220,18,28,208,29,65,211,18,66,208,12,66,220,14,18,139, - 102,136,3,217,15,18,240,4,6,13,27,216,19,22,144,59, - 217,20,24,152,20,152,116,213,20,36,225,20,24,152,20,152, - 116,160,83,213,20,41,240,5,0,21,37,240,14,0,16,20, - 148,120,210,15,31,216,23,26,144,10,216,18,19,220,28,35, - 160,67,168,17,155,79,145,9,144,4,144,99,220,19,29,152, - 99,148,63,216,20,28,228,23,45,168,99,211,23,50,208,16, - 50,248,240,23,1,13,27,220,16,21,144,99,150,10,250,115, - 12,0,0,0,193,1,22,66,11,0,194,11,13,66,26,3, - 99,3,0,0,0,0,0,0,0,0,0,0,0,7,0,0, - 0,3,0,0,0,243,40,0,0,0,151,0,116,1,0,0, - 0,0,0,0,0,0,124,0,124,1,124,2,100,1,116,2, - 0,0,0,0,0,0,0,0,171,5,0,0,0,0,0,0, - 83,0,41,2,97,21,1,0,0,115,112,97,119,110,118,40, - 109,111,100,101,44,32,102,105,108,101,44,32,97,114,103,115, - 41,32,45,62,32,105,110,116,101,103,101,114,10,10,69,120, - 101,99,117,116,101,32,102,105,108,101,32,119,105,116,104,32, - 97,114,103,117,109,101,110,116,115,32,102,114,111,109,32,97, - 114,103,115,32,105,110,32,97,32,115,117,98,112,114,111,99, - 101,115,115,46,10,73,102,32,109,111,100,101,32,61,61,32, - 80,95,78,79,87,65,73,84,32,114,101,116,117,114,110,32, - 116,104,101,32,112,105,100,32,111,102,32,116,104,101,32,112, - 114,111,99,101,115,115,46,10,73,102,32,109,111,100,101,32, - 61,61,32,80,95,87,65,73,84,32,114,101,116,117,114,110, - 32,116,104,101,32,112,114,111,99,101,115,115,39,115,32,101, - 120,105,116,32,99,111,100,101,32,105,102,32,105,116,32,101, - 120,105,116,115,32,110,111,114,109,97,108,108,121,59,10,111, - 116,104,101,114,119,105,115,101,32,114,101,116,117,114,110,32, - 45,83,73,71,44,32,119,104,101,114,101,32,83,73,71,32, - 105,115,32,116,104,101,32,115,105,103,110,97,108,32,116,104, - 97,116,32,107,105,108,108,101,100,32,105,116,46,32,78,41, - 2,114,79,1,0,0,114,183,0,0,0,169,3,114,119,0, - 0,0,114,185,0,0,0,114,186,0,0,0,115,3,0,0, - 0,32,32,32,114,25,0,0,0,114,66,1,0,0,114,66, - 1,0,0,112,3,0,0,115,23,0,0,0,128,0,244,14, - 0,16,25,152,20,152,116,160,84,168,52,180,21,211,15,55, - 208,8,55,114,27,0,0,0,99,4,0,0,0,0,0,0, - 0,0,0,0,0,7,0,0,0,3,0,0,0,243,40,0, - 0,0,151,0,116,1,0,0,0,0,0,0,0,0,124,0, - 124,1,124,2,124,3,116,2,0,0,0,0,0,0,0,0, - 171,5,0,0,0,0,0,0,83,0,41,1,97,58,1,0, - 0,115,112,97,119,110,118,101,40,109,111,100,101,44,32,102, - 105,108,101,44,32,97,114,103,115,44,32,101,110,118,41,32, - 45,62,32,105,110,116,101,103,101,114,10,10,69,120,101,99, - 117,116,101,32,102,105,108,101,32,119,105,116,104,32,97,114, - 103,117,109,101,110,116,115,32,102,114,111,109,32,97,114,103, - 115,32,105,110,32,97,32,115,117,98,112,114,111,99,101,115, - 115,32,119,105,116,104,32,116,104,101,10,115,112,101,99,105, - 102,105,101,100,32,101,110,118,105,114,111,110,109,101,110,116, - 46,10,73,102,32,109,111,100,101,32,61,61,32,80,95,78, - 79,87,65,73,84,32,114,101,116,117,114,110,32,116,104,101, - 32,112,105,100,32,111,102,32,116,104,101,32,112,114,111,99, - 101,115,115,46,10,73,102,32,109,111,100,101,32,61,61,32, - 80,95,87,65,73,84,32,114,101,116,117,114,110,32,116,104, - 101,32,112,114,111,99,101,115,115,39,115,32,101,120,105,116, - 32,99,111,100,101,32,105,102,32,105,116,32,101,120,105,116, - 115,32,110,111,114,109,97,108,108,121,59,10,111,116,104,101, - 114,119,105,115,101,32,114,101,116,117,114,110,32,45,83,73, - 71,44,32,119,104,101,114,101,32,83,73,71,32,105,115,32, - 116,104,101,32,115,105,103,110,97,108,32,116,104,97,116,32, - 107,105,108,108,101,100,32,105,116,46,32,41,2,114,79,1, - 0,0,114,88,0,0,0,169,4,114,119,0,0,0,114,185, - 0,0,0,114,186,0,0,0,114,191,0,0,0,115,4,0, - 0,0,32,32,32,32,114,25,0,0,0,218,7,115,112,97, - 119,110,118,101,114,84,1,0,0,121,3,0,0,115,23,0, - 0,0,128,0,244,16,0,16,25,152,20,152,116,160,84,168, - 51,180,6,211,15,55,208,8,55,114,27,0,0,0,99,3, - 0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,3, - 0,0,0,243,40,0,0,0,151,0,116,1,0,0,0,0, - 0,0,0,0,124,0,124,1,124,2,100,1,116,2,0,0, - 0,0,0,0,0,0,171,5,0,0,0,0,0,0,83,0, - 41,2,97,56,1,0,0,115,112,97,119,110,118,112,40,109, - 111,100,101,44,32,102,105,108,101,44,32,97,114,103,115,41, - 32,45,62,32,105,110,116,101,103,101,114,10,10,69,120,101, - 99,117,116,101,32,102,105,108,101,32,40,119,104,105,99,104, - 32,105,115,32,108,111,111,107,101,100,32,102,111,114,32,97, - 108,111,110,103,32,36,80,65,84,72,41,32,119,105,116,104, - 32,97,114,103,117,109,101,110,116,115,32,102,114,111,109,10, - 97,114,103,115,32,105,110,32,97,32,115,117,98,112,114,111, - 99,101,115,115,46,10,73,102,32,109,111,100,101,32,61,61, - 32,80,95,78,79,87,65,73,84,32,114,101,116,117,114,110, - 32,116,104,101,32,112,105,100,32,111,102,32,116,104,101,32, - 112,114,111,99,101,115,115,46,10,73,102,32,109,111,100,101, - 32,61,61,32,80,95,87,65,73,84,32,114,101,116,117,114, - 110,32,116,104,101,32,112,114,111,99,101,115,115,39,115,32, - 101,120,105,116,32,99,111,100,101,32,105,102,32,105,116,32, - 101,120,105,116,115,32,110,111,114,109,97,108,108,121,59,10, - 111,116,104,101,114,119,105,115,101,32,114,101,116,117,114,110, - 32,45,83,73,71,44,32,119,104,101,114,101,32,83,73,71, - 32,105,115,32,116,104,101,32,115,105,103,110,97,108,32,116, - 104,97,116,32,107,105,108,108,101,100,32,105,116,46,32,78, - 41,2,114,79,1,0,0,114,194,0,0,0,114,81,1,0, - 0,115,3,0,0,0,32,32,32,114,25,0,0,0,218,7, - 115,112,97,119,110,118,112,114,86,1,0,0,133,3,0,0, - 115,23,0,0,0,128,0,244,16,0,16,25,152,20,152,116, - 160,84,168,52,180,22,211,15,56,208,8,56,114,27,0,0, - 0,99,4,0,0,0,0,0,0,0,0,0,0,0,7,0, - 0,0,3,0,0,0,243,40,0,0,0,151,0,116,1,0, - 0,0,0,0,0,0,0,124,0,124,1,124,2,124,3,116, - 2,0,0,0,0,0,0,0,0,171,5,0,0,0,0,0, - 0,83,0,41,1,97,92,1,0,0,115,112,97,119,110,118, - 112,101,40,109,111,100,101,44,32,102,105,108,101,44,32,97, + 114,101,116,117,114,110,32,115,116,114,32,117,110,99,104,97, + 110,103,101,100,46,32,79,110,10,32,32,32,32,32,32,32, + 32,87,105,110,100,111,119,115,44,32,117,115,101,32,39,115, + 116,114,105,99,116,39,32,101,114,114,111,114,32,104,97,110, + 100,108,101,114,32,105,102,32,116,104,101,32,102,105,108,101, + 32,115,121,115,116,101,109,32,101,110,99,111,100,105,110,103, + 32,105,115,10,32,32,32,32,32,32,32,32,39,109,98,99, + 115,39,32,40,119,104,105,99,104,32,105,115,32,116,104,101, + 32,100,101,102,97,117,108,116,32,101,110,99,111,100,105,110, + 103,41,46,10,32,32,32,32,32,32,32,32,41,4,114,132, + 0,0,0,114,115,0,0,0,114,116,0,0,0,114,46,1, + 0,0,114,60,1,0,0,115,3,0,0,0,32,128,128,114, + 25,0,0,0,114,18,0,0,0,122,26,95,102,115,99,111, + 100,101,99,46,60,108,111,99,97,108,115,62,46,102,115,100, + 101,99,111,100,101,56,3,0,0,115,47,0,0,0,248,128, + 0,244,12,0,20,26,152,40,211,19,35,136,8,220,11,21, + 144,104,164,5,212,11,38,216,19,27,151,63,145,63,160,56, + 168,86,211,19,52,208,12,52,224,19,27,136,79,114,27,0, + 0,0,41,3,114,130,0,0,0,114,47,1,0,0,218,25, + 103,101,116,102,105,108,101,115,121,115,116,101,109,101,110,99, + 111,100,101,101,114,114,111,114,115,41,4,114,17,0,0,0, + 114,18,0,0,0,114,44,1,0,0,114,62,1,0,0,115, + 4,0,0,0,32,32,64,64,114,25,0,0,0,218,8,95, + 102,115,99,111,100,101,99,114,65,1,0,0,40,3,0,0, + 115,54,0,0,0,249,128,0,220,15,18,215,15,40,209,15, + 40,211,15,42,128,72,220,13,16,215,13,42,209,13,42,211, + 13,44,128,70,245,4,10,5,28,245,24,10,5,28,240,24, + 0,12,20,144,88,208,11,29,208,4,29,114,27,0,0,0, + 218,4,102,111,114,107,218,6,115,112,97,119,110,118,114,184, + 0,0,0,41,3,218,6,80,95,87,65,73,84,218,8,80, + 95,78,79,87,65,73,84,218,9,80,95,78,79,87,65,73, + 84,79,99,5,0,0,0,0,0,0,0,0,0,0,0,5, + 0,0,0,3,0,0,0,243,58,1,0,0,151,0,116,1, + 0,0,0,0,0,0,0,0,124,2,116,2,0,0,0,0, + 0,0,0,0,116,4,0,0,0,0,0,0,0,0,102,2, + 171,2,0,0,0,0,0,0,115,11,116,7,0,0,0,0, + 0,0,0,0,100,1,171,1,0,0,0,0,0,0,130,1, + 124,2,114,5,124,2,100,2,25,0,0,0,115,11,116,9, + 0,0,0,0,0,0,0,0,100,3,171,1,0,0,0,0, + 0,0,130,1,116,11,0,0,0,0,0,0,0,0,171,0, + 0,0,0,0,0,0,125,5,124,5,115,25,9,0,124,3, + 128,10,2,0,124,4,124,1,124,2,171,2,0,0,0,0, + 0,0,1,0,110,11,2,0,124,4,124,1,124,2,124,3, + 171,3,0,0,0,0,0,0,1,0,121,0,121,0,124,0, + 116,14,0,0,0,0,0,0,0,0,107,40,0,0,114,2, + 124,5,83,0,9,0,116,17,0,0,0,0,0,0,0,0, + 124,5,100,2,171,2,0,0,0,0,0,0,92,2,0,0, + 125,6,125,7,116,19,0,0,0,0,0,0,0,0,124,7, + 171,1,0,0,0,0,0,0,114,1,140,28,116,21,0,0, + 0,0,0,0,0,0,124,7,171,1,0,0,0,0,0,0, + 83,0,35,0,1,0,116,13,0,0,0,0,0,0,0,0, + 100,4,171,1,0,0,0,0,0,0,1,0,89,0,121,0, + 120,3,89,0,119,1,41,5,78,122,30,97,114,103,118,32, + 109,117,115,116,32,98,101,32,97,32,116,117,112,108,101,32, + 111,114,32,97,32,108,105,115,116,114,2,0,0,0,122,34, + 97,114,103,118,32,102,105,114,115,116,32,101,108,101,109,101, + 110,116,32,99,97,110,110,111,116,32,98,101,32,101,109,112, + 116,121,233,127,0,0,0,41,11,114,115,0,0,0,114,136, + 0,0,0,114,30,0,0,0,114,224,0,0,0,114,226,0, + 0,0,114,66,1,0,0,114,40,0,0,0,114,69,1,0, + 0,218,7,119,97,105,116,112,105,100,218,10,87,73,70,83, + 84,79,80,80,69,68,218,22,119,97,105,116,115,116,97,116, + 117,115,95,116,111,95,101,120,105,116,99,111,100,101,41,8, + 114,119,0,0,0,114,186,0,0,0,114,187,0,0,0,114, + 192,0,0,0,218,4,102,117,110,99,218,3,112,105,100,218, + 4,119,112,105,100,218,3,115,116,115,115,8,0,0,0,32, + 32,32,32,32,32,32,32,114,25,0,0,0,218,9,95,115, + 112,97,119,110,118,101,102,114,80,1,0,0,85,3,0,0, + 115,164,0,0,0,128,0,228,15,25,152,36,164,21,172,4, + 160,13,212,15,46,220,18,27,208,28,60,211,18,61,208,12, + 61,217,15,19,152,52,160,1,154,55,220,18,28,208,29,65, + 211,18,66,208,12,66,220,14,18,139,102,136,3,217,15,18, + 240,4,6,13,27,216,19,22,144,59,217,20,24,152,20,152, + 116,213,20,36,225,20,24,152,20,152,116,160,83,213,20,41, + 240,5,0,21,37,240,14,0,16,20,148,120,210,15,31,216, + 23,26,144,10,216,18,19,220,28,35,160,67,168,17,155,79, + 145,9,144,4,144,99,220,19,29,152,99,148,63,216,20,28, + 228,23,45,168,99,211,23,50,208,16,50,248,240,23,1,13, + 27,220,16,21,144,99,150,10,250,115,12,0,0,0,193,1, + 22,66,11,0,194,11,13,66,26,3,99,3,0,0,0,0, + 0,0,0,0,0,0,0,7,0,0,0,3,0,0,0,243, + 40,0,0,0,151,0,116,1,0,0,0,0,0,0,0,0, + 124,0,124,1,124,2,100,1,116,2,0,0,0,0,0,0, + 0,0,171,5,0,0,0,0,0,0,83,0,41,2,97,21, + 1,0,0,115,112,97,119,110,118,40,109,111,100,101,44,32, + 102,105,108,101,44,32,97,114,103,115,41,32,45,62,32,105, + 110,116,101,103,101,114,10,10,69,120,101,99,117,116,101,32, + 102,105,108,101,32,119,105,116,104,32,97,114,103,117,109,101, + 110,116,115,32,102,114,111,109,32,97,114,103,115,32,105,110, + 32,97,32,115,117,98,112,114,111,99,101,115,115,46,10,73, + 102,32,109,111,100,101,32,61,61,32,80,95,78,79,87,65, + 73,84,32,114,101,116,117,114,110,32,116,104,101,32,112,105, + 100,32,111,102,32,116,104,101,32,112,114,111,99,101,115,115, + 46,10,73,102,32,109,111,100,101,32,61,61,32,80,95,87, + 65,73,84,32,114,101,116,117,114,110,32,116,104,101,32,112, + 114,111,99,101,115,115,39,115,32,101,120,105,116,32,99,111, + 100,101,32,105,102,32,105,116,32,101,120,105,116,115,32,110, + 111,114,109,97,108,108,121,59,10,111,116,104,101,114,119,105, + 115,101,32,114,101,116,117,114,110,32,45,83,73,71,44,32, + 119,104,101,114,101,32,83,73,71,32,105,115,32,116,104,101, + 32,115,105,103,110,97,108,32,116,104,97,116,32,107,105,108, + 108,101,100,32,105,116,46,32,78,41,2,114,80,1,0,0, + 114,184,0,0,0,169,3,114,119,0,0,0,114,186,0,0, + 0,114,187,0,0,0,115,3,0,0,0,32,32,32,114,25, + 0,0,0,114,67,1,0,0,114,67,1,0,0,112,3,0, + 0,115,23,0,0,0,128,0,244,14,0,16,25,152,20,152, + 116,160,84,168,52,180,21,211,15,55,208,8,55,114,27,0, + 0,0,99,4,0,0,0,0,0,0,0,0,0,0,0,7, + 0,0,0,3,0,0,0,243,40,0,0,0,151,0,116,1, + 0,0,0,0,0,0,0,0,124,0,124,1,124,2,124,3, + 116,2,0,0,0,0,0,0,0,0,171,5,0,0,0,0, + 0,0,83,0,41,1,97,58,1,0,0,115,112,97,119,110, + 118,101,40,109,111,100,101,44,32,102,105,108,101,44,32,97, 114,103,115,44,32,101,110,118,41,32,45,62,32,105,110,116, 101,103,101,114,10,10,69,120,101,99,117,116,101,32,102,105, - 108,101,32,40,119,104,105,99,104,32,105,115,32,108,111,111, - 107,101,100,32,102,111,114,32,97,108,111,110,103,32,36,80, - 65,84,72,41,32,119,105,116,104,32,97,114,103,117,109,101, - 110,116,115,32,102,114,111,109,10,97,114,103,115,32,105,110, - 32,97,32,115,117,98,112,114,111,99,101,115,115,32,119,105, - 116,104,32,116,104,101,32,115,117,112,112,108,105,101,100,32, - 101,110,118,105,114,111,110,109,101,110,116,46,10,73,102,32, - 109,111,100,101,32,61,61,32,80,95,78,79,87,65,73,84, - 32,114,101,116,117,114,110,32,116,104,101,32,112,105,100,32, - 111,102,32,116,104,101,32,112,114,111,99,101,115,115,46,10, - 73,102,32,109,111,100,101,32,61,61,32,80,95,87,65,73, - 84,32,114,101,116,117,114,110,32,116,104,101,32,112,114,111, - 99,101,115,115,39,115,32,101,120,105,116,32,99,111,100,101, - 32,105,102,32,105,116,32,101,120,105,116,115,32,110,111,114, - 109,97,108,108,121,59,10,111,116,104,101,114,119,105,115,101, - 32,114,101,116,117,114,110,32,45,83,73,71,44,32,119,104, - 101,114,101,32,83,73,71,32,105,115,32,116,104,101,32,115, - 105,103,110,97,108,32,116,104,97,116,32,107,105,108,108,101, - 100,32,105,116,46,32,41,2,114,79,1,0,0,114,197,0, - 0,0,114,83,1,0,0,115,4,0,0,0,32,32,32,32, - 114,25,0,0,0,218,8,115,112,97,119,110,118,112,101,114, - 88,1,0,0,143,3,0,0,115,23,0,0,0,128,0,244, - 16,0,16,25,152,20,152,116,160,84,168,51,180,7,211,15, - 56,208,8,56,114,27,0,0,0,41,4,114,66,1,0,0, - 114,84,1,0,0,114,86,1,0,0,114,88,1,0,0,99, - 2,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0, - 7,0,0,0,243,28,0,0,0,151,0,116,1,0,0,0, - 0,0,0,0,0,124,0,124,1,124,2,171,3,0,0,0, - 0,0,0,83,0,41,1,97,22,1,0,0,115,112,97,119, - 110,108,40,109,111,100,101,44,32,102,105,108,101,44,32,42, - 97,114,103,115,41,32,45,62,32,105,110,116,101,103,101,114, - 10,10,69,120,101,99,117,116,101,32,102,105,108,101,32,119, - 105,116,104,32,97,114,103,117,109,101,110,116,115,32,102,114, - 111,109,32,97,114,103,115,32,105,110,32,97,32,115,117,98, - 112,114,111,99,101,115,115,46,10,73,102,32,109,111,100,101, - 32,61,61,32,80,95,78,79,87,65,73,84,32,114,101,116, - 117,114,110,32,116,104,101,32,112,105,100,32,111,102,32,116, - 104,101,32,112,114,111,99,101,115,115,46,10,73,102,32,109, - 111,100,101,32,61,61,32,80,95,87,65,73,84,32,114,101, - 116,117,114,110,32,116,104,101,32,112,114,111,99,101,115,115, - 39,115,32,101,120,105,116,32,99,111,100,101,32,105,102,32, - 105,116,32,101,120,105,116,115,32,110,111,114,109,97,108,108, - 121,59,10,111,116,104,101,114,119,105,115,101,32,114,101,116, - 117,114,110,32,45,83,73,71,44,32,119,104,101,114,101,32, - 83,73,71,32,105,115,32,116,104,101,32,115,105,103,110,97, - 108,32,116,104,97,116,32,107,105,108,108,101,100,32,105,116, - 46,32,41,1,114,66,1,0,0,114,81,1,0,0,115,3, - 0,0,0,32,32,32,114,25,0,0,0,218,6,115,112,97, - 119,110,108,114,90,1,0,0,161,3,0,0,115,19,0,0, - 0,128,0,244,14,0,16,22,144,100,152,68,160,36,211,15, - 39,208,8,39,114,27,0,0,0,99,2,0,0,0,0,0, - 0,0,0,0,0,0,7,0,0,0,7,0,0,0,243,46, - 0,0,0,151,0,124,2,100,1,25,0,0,0,125,3,116, - 1,0,0,0,0,0,0,0,0,124,0,124,1,124,2,100, - 2,100,1,26,0,124,3,171,4,0,0,0,0,0,0,83, - 0,41,3,97,58,1,0,0,115,112,97,119,110,108,101,40, - 109,111,100,101,44,32,102,105,108,101,44,32,42,97,114,103, - 115,44,32,101,110,118,41,32,45,62,32,105,110,116,101,103, - 101,114,10,10,69,120,101,99,117,116,101,32,102,105,108,101, - 32,119,105,116,104,32,97,114,103,117,109,101,110,116,115,32, - 102,114,111,109,32,97,114,103,115,32,105,110,32,97,32,115, - 117,98,112,114,111,99,101,115,115,32,119,105,116,104,32,116, - 104,101,10,115,117,112,112,108,105,101,100,32,101,110,118,105, - 114,111,110,109,101,110,116,46,10,73,102,32,109,111,100,101, - 32,61,61,32,80,95,78,79,87,65,73,84,32,114,101,116, - 117,114,110,32,116,104,101,32,112,105,100,32,111,102,32,116, - 104,101,32,112,114,111,99,101,115,115,46,10,73,102,32,109, - 111,100,101,32,61,61,32,80,95,87,65,73,84,32,114,101, - 116,117,114,110,32,116,104,101,32,112,114,111,99,101,115,115, - 39,115,32,101,120,105,116,32,99,111,100,101,32,105,102,32, - 105,116,32,101,120,105,116,115,32,110,111,114,109,97,108,108, - 121,59,10,111,116,104,101,114,119,105,115,101,32,114,101,116, - 117,114,110,32,45,83,73,71,44,32,119,104,101,114,101,32, - 83,73,71,32,105,115,32,116,104,101,32,115,105,103,110,97, - 108,32,116,104,97,116,32,107,105,108,108,101,100,32,105,116, - 46,32,114,189,0,0,0,78,41,1,114,84,1,0,0,114, - 83,1,0,0,115,4,0,0,0,32,32,32,32,114,25,0, - 0,0,218,7,115,112,97,119,110,108,101,114,92,1,0,0, - 170,3,0,0,115,36,0,0,0,128,0,240,16,0,15,19, - 144,50,137,104,136,3,220,15,22,144,116,152,84,160,52,168, - 3,168,18,160,57,168,99,211,15,50,208,8,50,114,27,0, - 0,0,114,90,1,0,0,114,92,1,0,0,114,86,1,0, - 0,99,2,0,0,0,0,0,0,0,0,0,0,0,5,0, - 0,0,7,0,0,0,243,28,0,0,0,151,0,116,1,0, - 0,0,0,0,0,0,0,124,0,124,1,124,2,171,3,0, - 0,0,0,0,0,83,0,41,1,97,87,1,0,0,115,112, - 97,119,110,108,112,40,109,111,100,101,44,32,102,105,108,101, - 44,32,42,97,114,103,115,41,32,45,62,32,105,110,116,101, - 103,101,114,10,10,69,120,101,99,117,116,101,32,102,105,108, - 101,32,40,119,104,105,99,104,32,105,115,32,108,111,111,107, - 101,100,32,102,111,114,32,97,108,111,110,103,32,36,80,65, - 84,72,41,32,119,105,116,104,32,97,114,103,117,109,101,110, - 116,115,32,102,114,111,109,10,97,114,103,115,32,105,110,32, - 97,32,115,117,98,112,114,111,99,101,115,115,32,119,105,116, - 104,32,116,104,101,32,115,117,112,112,108,105,101,100,32,101, + 108,101,32,119,105,116,104,32,97,114,103,117,109,101,110,116, + 115,32,102,114,111,109,32,97,114,103,115,32,105,110,32,97, + 32,115,117,98,112,114,111,99,101,115,115,32,119,105,116,104, + 32,116,104,101,10,115,112,101,99,105,102,105,101,100,32,101, 110,118,105,114,111,110,109,101,110,116,46,10,73,102,32,109, 111,100,101,32,61,61,32,80,95,78,79,87,65,73,84,32, 114,101,116,117,114,110,32,116,104,101,32,112,105,100,32,111, @@ -2115,26 +1968,25 @@ const unsigned char _Py_M__os[] = { 114,101,116,117,114,110,32,45,83,73,71,44,32,119,104,101, 114,101,32,83,73,71,32,105,115,32,116,104,101,32,115,105, 103,110,97,108,32,116,104,97,116,32,107,105,108,108,101,100, - 32,105,116,46,32,41,1,114,86,1,0,0,114,81,1,0, - 0,115,3,0,0,0,32,32,32,114,25,0,0,0,218,7, - 115,112,97,119,110,108,112,114,94,1,0,0,188,3,0,0, - 115,19,0,0,0,128,0,244,16,0,16,23,144,116,152,84, - 160,52,211,15,40,208,8,40,114,27,0,0,0,99,2,0, - 0,0,0,0,0,0,0,0,0,0,7,0,0,0,7,0, - 0,0,243,46,0,0,0,151,0,124,2,100,1,25,0,0, - 0,125,3,116,1,0,0,0,0,0,0,0,0,124,0,124, - 1,124,2,100,2,100,1,26,0,124,3,171,4,0,0,0, - 0,0,0,83,0,41,3,97,93,1,0,0,115,112,97,119, - 110,108,112,101,40,109,111,100,101,44,32,102,105,108,101,44, - 32,42,97,114,103,115,44,32,101,110,118,41,32,45,62,32, - 105,110,116,101,103,101,114,10,10,69,120,101,99,117,116,101, - 32,102,105,108,101,32,40,119,104,105,99,104,32,105,115,32, - 108,111,111,107,101,100,32,102,111,114,32,97,108,111,110,103, - 32,36,80,65,84,72,41,32,119,105,116,104,32,97,114,103, - 117,109,101,110,116,115,32,102,114,111,109,10,97,114,103,115, - 32,105,110,32,97,32,115,117,98,112,114,111,99,101,115,115, - 32,119,105,116,104,32,116,104,101,32,115,117,112,112,108,105, - 101,100,32,101,110,118,105,114,111,110,109,101,110,116,46,10, + 32,105,116,46,32,41,2,114,80,1,0,0,114,88,0,0, + 0,169,4,114,119,0,0,0,114,186,0,0,0,114,187,0, + 0,0,114,192,0,0,0,115,4,0,0,0,32,32,32,32, + 114,25,0,0,0,218,7,115,112,97,119,110,118,101,114,85, + 1,0,0,121,3,0,0,115,23,0,0,0,128,0,244,16, + 0,16,25,152,20,152,116,160,84,168,51,180,6,211,15,55, + 208,8,55,114,27,0,0,0,99,3,0,0,0,0,0,0, + 0,0,0,0,0,7,0,0,0,3,0,0,0,243,40,0, + 0,0,151,0,116,1,0,0,0,0,0,0,0,0,124,0, + 124,1,124,2,100,1,116,2,0,0,0,0,0,0,0,0, + 171,5,0,0,0,0,0,0,83,0,41,2,97,56,1,0, + 0,115,112,97,119,110,118,112,40,109,111,100,101,44,32,102, + 105,108,101,44,32,97,114,103,115,41,32,45,62,32,105,110, + 116,101,103,101,114,10,10,69,120,101,99,117,116,101,32,102, + 105,108,101,32,40,119,104,105,99,104,32,105,115,32,108,111, + 111,107,101,100,32,102,111,114,32,97,108,111,110,103,32,36, + 80,65,84,72,41,32,119,105,116,104,32,97,114,103,117,109, + 101,110,116,115,32,102,114,111,109,10,97,114,103,115,32,105, + 110,32,97,32,115,117,98,112,114,111,99,101,115,115,46,10, 73,102,32,109,111,100,101,32,61,61,32,80,95,78,79,87, 65,73,84,32,114,101,116,117,114,110,32,116,104,101,32,112, 105,100,32,111,102,32,116,104,101,32,112,114,111,99,101,115, @@ -2146,570 +1998,722 @@ const unsigned char _Py_M__os[] = { 105,115,101,32,114,101,116,117,114,110,32,45,83,73,71,44, 32,119,104,101,114,101,32,83,73,71,32,105,115,32,116,104, 101,32,115,105,103,110,97,108,32,116,104,97,116,32,107,105, - 108,108,101,100,32,105,116,46,32,114,189,0,0,0,78,41, - 1,114,88,1,0,0,114,83,1,0,0,115,4,0,0,0, - 32,32,32,32,114,25,0,0,0,218,8,115,112,97,119,110, - 108,112,101,114,96,1,0,0,198,3,0,0,115,36,0,0, - 0,128,0,240,16,0,15,19,144,50,137,104,136,3,220,15, - 23,152,4,152,100,160,68,168,19,168,34,160,73,168,115,211, - 15,51,208,8,51,114,27,0,0,0,114,94,1,0,0,114, - 96,1,0,0,218,7,118,120,119,111,114,107,115,99,3,0, - 0,0,0,0,0,0,0,0,0,0,7,0,0,0,3,0, - 0,0,243,130,1,0,0,151,0,116,1,0,0,0,0,0, - 0,0,0,124,0,116,2,0,0,0,0,0,0,0,0,171, - 2,0,0,0,0,0,0,115,23,116,5,0,0,0,0,0, - 0,0,0,100,1,116,7,0,0,0,0,0,0,0,0,124, - 0,171,1,0,0,0,0,0,0,122,6,0,0,171,1,0, - 0,0,0,0,0,130,1,124,1,100,2,118,1,114,14,116, - 9,0,0,0,0,0,0,0,0,100,3,124,1,122,6,0, - 0,171,1,0,0,0,0,0,0,130,1,124,2,100,4,107, - 40,0,0,115,2,124,2,128,11,116,9,0,0,0,0,0, - 0,0,0,100,5,171,1,0,0,0,0,0,0,130,1,100, - 4,100,0,108,5,125,3,124,1,100,6,107,40,0,0,114, - 54,124,3,106,13,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,124,0,100,7,100,7,124,3,106, - 14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,124,2,172,8,171,5,0,0,0,0,0,0,125, - 4,116,17,0,0,0,0,0,0,0,0,124,4,106,18,0, + 108,108,101,100,32,105,116,46,32,78,41,2,114,80,1,0, + 0,114,195,0,0,0,114,82,1,0,0,115,3,0,0,0, + 32,32,32,114,25,0,0,0,218,7,115,112,97,119,110,118, + 112,114,87,1,0,0,133,3,0,0,115,23,0,0,0,128, + 0,244,16,0,16,25,152,20,152,116,160,84,168,52,180,22, + 211,15,56,208,8,56,114,27,0,0,0,99,4,0,0,0, + 0,0,0,0,0,0,0,0,7,0,0,0,3,0,0,0, + 243,40,0,0,0,151,0,116,1,0,0,0,0,0,0,0, + 0,124,0,124,1,124,2,124,3,116,2,0,0,0,0,0, + 0,0,0,171,5,0,0,0,0,0,0,83,0,41,1,97, + 92,1,0,0,115,112,97,119,110,118,112,101,40,109,111,100, + 101,44,32,102,105,108,101,44,32,97,114,103,115,44,32,101, + 110,118,41,32,45,62,32,105,110,116,101,103,101,114,10,10, + 69,120,101,99,117,116,101,32,102,105,108,101,32,40,119,104, + 105,99,104,32,105,115,32,108,111,111,107,101,100,32,102,111, + 114,32,97,108,111,110,103,32,36,80,65,84,72,41,32,119, + 105,116,104,32,97,114,103,117,109,101,110,116,115,32,102,114, + 111,109,10,97,114,103,115,32,105,110,32,97,32,115,117,98, + 112,114,111,99,101,115,115,32,119,105,116,104,32,116,104,101, + 32,115,117,112,112,108,105,101,100,32,101,110,118,105,114,111, + 110,109,101,110,116,46,10,73,102,32,109,111,100,101,32,61, + 61,32,80,95,78,79,87,65,73,84,32,114,101,116,117,114, + 110,32,116,104,101,32,112,105,100,32,111,102,32,116,104,101, + 32,112,114,111,99,101,115,115,46,10,73,102,32,109,111,100, + 101,32,61,61,32,80,95,87,65,73,84,32,114,101,116,117, + 114,110,32,116,104,101,32,112,114,111,99,101,115,115,39,115, + 32,101,120,105,116,32,99,111,100,101,32,105,102,32,105,116, + 32,101,120,105,116,115,32,110,111,114,109,97,108,108,121,59, + 10,111,116,104,101,114,119,105,115,101,32,114,101,116,117,114, + 110,32,45,83,73,71,44,32,119,104,101,114,101,32,83,73, + 71,32,105,115,32,116,104,101,32,115,105,103,110,97,108,32, + 116,104,97,116,32,107,105,108,108,101,100,32,105,116,46,32, + 41,2,114,80,1,0,0,114,198,0,0,0,114,84,1,0, + 0,115,4,0,0,0,32,32,32,32,114,25,0,0,0,218, + 8,115,112,97,119,110,118,112,101,114,89,1,0,0,143,3, + 0,0,115,23,0,0,0,128,0,244,16,0,16,25,152,20, + 152,116,160,84,168,51,180,7,211,15,56,208,8,56,114,27, + 0,0,0,41,4,114,67,1,0,0,114,85,1,0,0,114, + 87,1,0,0,114,89,1,0,0,99,2,0,0,0,0,0, + 0,0,0,0,0,0,5,0,0,0,7,0,0,0,243,28, + 0,0,0,151,0,116,1,0,0,0,0,0,0,0,0,124, + 0,124,1,124,2,171,3,0,0,0,0,0,0,83,0,41, + 1,97,22,1,0,0,115,112,97,119,110,108,40,109,111,100, + 101,44,32,102,105,108,101,44,32,42,97,114,103,115,41,32, + 45,62,32,105,110,116,101,103,101,114,10,10,69,120,101,99, + 117,116,101,32,102,105,108,101,32,119,105,116,104,32,97,114, + 103,117,109,101,110,116,115,32,102,114,111,109,32,97,114,103, + 115,32,105,110,32,97,32,115,117,98,112,114,111,99,101,115, + 115,46,10,73,102,32,109,111,100,101,32,61,61,32,80,95, + 78,79,87,65,73,84,32,114,101,116,117,114,110,32,116,104, + 101,32,112,105,100,32,111,102,32,116,104,101,32,112,114,111, + 99,101,115,115,46,10,73,102,32,109,111,100,101,32,61,61, + 32,80,95,87,65,73,84,32,114,101,116,117,114,110,32,116, + 104,101,32,112,114,111,99,101,115,115,39,115,32,101,120,105, + 116,32,99,111,100,101,32,105,102,32,105,116,32,101,120,105, + 116,115,32,110,111,114,109,97,108,108,121,59,10,111,116,104, + 101,114,119,105,115,101,32,114,101,116,117,114,110,32,45,83, + 73,71,44,32,119,104,101,114,101,32,83,73,71,32,105,115, + 32,116,104,101,32,115,105,103,110,97,108,32,116,104,97,116, + 32,107,105,108,108,101,100,32,105,116,46,32,41,1,114,67, + 1,0,0,114,82,1,0,0,115,3,0,0,0,32,32,32, + 114,25,0,0,0,218,6,115,112,97,119,110,108,114,91,1, + 0,0,161,3,0,0,115,19,0,0,0,128,0,244,14,0, + 16,22,144,100,152,68,160,36,211,15,39,208,8,39,114,27, + 0,0,0,99,2,0,0,0,0,0,0,0,0,0,0,0, + 7,0,0,0,7,0,0,0,243,46,0,0,0,151,0,124, + 2,100,1,25,0,0,0,125,3,116,1,0,0,0,0,0, + 0,0,0,124,0,124,1,124,2,100,2,100,1,26,0,124, + 3,171,4,0,0,0,0,0,0,83,0,41,3,97,58,1, + 0,0,115,112,97,119,110,108,101,40,109,111,100,101,44,32, + 102,105,108,101,44,32,42,97,114,103,115,44,32,101,110,118, + 41,32,45,62,32,105,110,116,101,103,101,114,10,10,69,120, + 101,99,117,116,101,32,102,105,108,101,32,119,105,116,104,32, + 97,114,103,117,109,101,110,116,115,32,102,114,111,109,32,97, + 114,103,115,32,105,110,32,97,32,115,117,98,112,114,111,99, + 101,115,115,32,119,105,116,104,32,116,104,101,10,115,117,112, + 112,108,105,101,100,32,101,110,118,105,114,111,110,109,101,110, + 116,46,10,73,102,32,109,111,100,101,32,61,61,32,80,95, + 78,79,87,65,73,84,32,114,101,116,117,114,110,32,116,104, + 101,32,112,105,100,32,111,102,32,116,104,101,32,112,114,111, + 99,101,115,115,46,10,73,102,32,109,111,100,101,32,61,61, + 32,80,95,87,65,73,84,32,114,101,116,117,114,110,32,116, + 104,101,32,112,114,111,99,101,115,115,39,115,32,101,120,105, + 116,32,99,111,100,101,32,105,102,32,105,116,32,101,120,105, + 116,115,32,110,111,114,109,97,108,108,121,59,10,111,116,104, + 101,114,119,105,115,101,32,114,101,116,117,114,110,32,45,83, + 73,71,44,32,119,104,101,114,101,32,83,73,71,32,105,115, + 32,116,104,101,32,115,105,103,110,97,108,32,116,104,97,116, + 32,107,105,108,108,101,100,32,105,116,46,32,114,190,0,0, + 0,78,41,1,114,85,1,0,0,114,84,1,0,0,115,4, + 0,0,0,32,32,32,32,114,25,0,0,0,218,7,115,112, + 97,119,110,108,101,114,93,1,0,0,170,3,0,0,115,36, + 0,0,0,128,0,240,16,0,15,19,144,50,137,104,136,3, + 220,15,22,144,116,152,84,160,52,168,3,168,18,160,57,168, + 99,211,15,50,208,8,50,114,27,0,0,0,114,91,1,0, + 0,114,93,1,0,0,114,87,1,0,0,99,2,0,0,0, + 0,0,0,0,0,0,0,0,5,0,0,0,7,0,0,0, + 243,28,0,0,0,151,0,116,1,0,0,0,0,0,0,0, + 0,124,0,124,1,124,2,171,3,0,0,0,0,0,0,83, + 0,41,1,97,87,1,0,0,115,112,97,119,110,108,112,40, + 109,111,100,101,44,32,102,105,108,101,44,32,42,97,114,103, + 115,41,32,45,62,32,105,110,116,101,103,101,114,10,10,69, + 120,101,99,117,116,101,32,102,105,108,101,32,40,119,104,105, + 99,104,32,105,115,32,108,111,111,107,101,100,32,102,111,114, + 32,97,108,111,110,103,32,36,80,65,84,72,41,32,119,105, + 116,104,32,97,114,103,117,109,101,110,116,115,32,102,114,111, + 109,10,97,114,103,115,32,105,110,32,97,32,115,117,98,112, + 114,111,99,101,115,115,32,119,105,116,104,32,116,104,101,32, + 115,117,112,112,108,105,101,100,32,101,110,118,105,114,111,110, + 109,101,110,116,46,10,73,102,32,109,111,100,101,32,61,61, + 32,80,95,78,79,87,65,73,84,32,114,101,116,117,114,110, + 32,116,104,101,32,112,105,100,32,111,102,32,116,104,101,32, + 112,114,111,99,101,115,115,46,10,73,102,32,109,111,100,101, + 32,61,61,32,80,95,87,65,73,84,32,114,101,116,117,114, + 110,32,116,104,101,32,112,114,111,99,101,115,115,39,115,32, + 101,120,105,116,32,99,111,100,101,32,105,102,32,105,116,32, + 101,120,105,116,115,32,110,111,114,109,97,108,108,121,59,10, + 111,116,104,101,114,119,105,115,101,32,114,101,116,117,114,110, + 32,45,83,73,71,44,32,119,104,101,114,101,32,83,73,71, + 32,105,115,32,116,104,101,32,115,105,103,110,97,108,32,116, + 104,97,116,32,107,105,108,108,101,100,32,105,116,46,32,41, + 1,114,87,1,0,0,114,82,1,0,0,115,3,0,0,0, + 32,32,32,114,25,0,0,0,218,7,115,112,97,119,110,108, + 112,114,95,1,0,0,188,3,0,0,115,19,0,0,0,128, + 0,244,16,0,16,23,144,116,152,84,160,52,211,15,40,208, + 8,40,114,27,0,0,0,99,2,0,0,0,0,0,0,0, + 0,0,0,0,7,0,0,0,7,0,0,0,243,46,0,0, + 0,151,0,124,2,100,1,25,0,0,0,125,3,116,1,0, + 0,0,0,0,0,0,0,124,0,124,1,124,2,100,2,100, + 1,26,0,124,3,171,4,0,0,0,0,0,0,83,0,41, + 3,97,93,1,0,0,115,112,97,119,110,108,112,101,40,109, + 111,100,101,44,32,102,105,108,101,44,32,42,97,114,103,115, + 44,32,101,110,118,41,32,45,62,32,105,110,116,101,103,101, + 114,10,10,69,120,101,99,117,116,101,32,102,105,108,101,32, + 40,119,104,105,99,104,32,105,115,32,108,111,111,107,101,100, + 32,102,111,114,32,97,108,111,110,103,32,36,80,65,84,72, + 41,32,119,105,116,104,32,97,114,103,117,109,101,110,116,115, + 32,102,114,111,109,10,97,114,103,115,32,105,110,32,97,32, + 115,117,98,112,114,111,99,101,115,115,32,119,105,116,104,32, + 116,104,101,32,115,117,112,112,108,105,101,100,32,101,110,118, + 105,114,111,110,109,101,110,116,46,10,73,102,32,109,111,100, + 101,32,61,61,32,80,95,78,79,87,65,73,84,32,114,101, + 116,117,114,110,32,116,104,101,32,112,105,100,32,111,102,32, + 116,104,101,32,112,114,111,99,101,115,115,46,10,73,102,32, + 109,111,100,101,32,61,61,32,80,95,87,65,73,84,32,114, + 101,116,117,114,110,32,116,104,101,32,112,114,111,99,101,115, + 115,39,115,32,101,120,105,116,32,99,111,100,101,32,105,102, + 32,105,116,32,101,120,105,116,115,32,110,111,114,109,97,108, + 108,121,59,10,111,116,104,101,114,119,105,115,101,32,114,101, + 116,117,114,110,32,45,83,73,71,44,32,119,104,101,114,101, + 32,83,73,71,32,105,115,32,116,104,101,32,115,105,103,110, + 97,108,32,116,104,97,116,32,107,105,108,108,101,100,32,105, + 116,46,32,114,190,0,0,0,78,41,1,114,89,1,0,0, + 114,84,1,0,0,115,4,0,0,0,32,32,32,32,114,25, + 0,0,0,218,8,115,112,97,119,110,108,112,101,114,97,1, + 0,0,198,3,0,0,115,36,0,0,0,128,0,240,16,0, + 15,19,144,50,137,104,136,3,220,15,23,152,4,152,100,160, + 68,168,19,168,34,160,73,168,115,211,15,51,208,8,51,114, + 27,0,0,0,114,95,1,0,0,114,97,1,0,0,218,7, + 118,120,119,111,114,107,115,99,3,0,0,0,0,0,0,0, + 0,0,0,0,7,0,0,0,3,0,0,0,243,130,1,0, + 0,151,0,116,1,0,0,0,0,0,0,0,0,124,0,116, + 2,0,0,0,0,0,0,0,0,171,2,0,0,0,0,0, + 0,115,23,116,5,0,0,0,0,0,0,0,0,100,1,116, + 7,0,0,0,0,0,0,0,0,124,0,171,1,0,0,0, + 0,0,0,122,6,0,0,171,1,0,0,0,0,0,0,130, + 1,124,1,100,2,118,1,114,14,116,9,0,0,0,0,0, + 0,0,0,100,3,124,1,122,6,0,0,171,1,0,0,0, + 0,0,0,130,1,124,2,100,4,107,40,0,0,115,2,124, + 2,128,11,116,9,0,0,0,0,0,0,0,0,100,5,171, + 1,0,0,0,0,0,0,130,1,100,4,100,0,108,5,125, + 3,124,1,100,6,107,40,0,0,114,54,124,3,106,13,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,124,4,171,2,0,0,0,0,0,0,83,0,124,3,106, - 13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,124,0,100,7,100,7,124,3,106,14,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,124, - 2,172,9,171,5,0,0,0,0,0,0,125,4,116,17,0, - 0,0,0,0,0,0,0,124,4,106,20,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,124,4,171, - 2,0,0,0,0,0,0,83,0,41,10,78,122,38,105,110, - 118,97,108,105,100,32,99,109,100,32,116,121,112,101,32,40, - 37,115,44,32,101,120,112,101,99,116,101,100,32,115,116,114, - 105,110,103,41,41,2,218,1,114,218,1,119,122,15,105,110, - 118,97,108,105,100,32,109,111,100,101,32,37,114,114,2,0, - 0,0,122,43,112,111,112,101,110,40,41,32,100,111,101,115, - 32,110,111,116,32,115,117,112,112,111,114,116,32,117,110,98, - 117,102,102,101,114,101,100,32,115,116,114,101,97,109,115,114, - 99,1,0,0,84,41,4,218,5,115,104,101,108,108,218,4, - 116,101,120,116,218,6,115,116,100,111,117,116,218,7,98,117, - 102,115,105,122,101,41,4,114,101,1,0,0,114,102,1,0, - 0,218,5,115,116,100,105,110,114,104,1,0,0,41,11,114, - 115,0,0,0,114,47,0,0,0,114,223,0,0,0,114,34, - 1,0,0,114,225,0,0,0,218,10,115,117,98,112,114,111, - 99,101,115,115,218,5,80,111,112,101,110,218,4,80,73,80, - 69,218,11,95,119,114,97,112,95,99,108,111,115,101,114,103, - 1,0,0,114,105,1,0,0,41,5,218,3,99,109,100,114, - 119,0,0,0,218,9,98,117,102,102,101,114,105,110,103,114, - 106,1,0,0,218,4,112,114,111,99,115,5,0,0,0,32, - 32,32,32,32,114,25,0,0,0,218,5,112,111,112,101,110, - 114,113,1,0,0,216,3,0,0,115,206,0,0,0,128,0, - 220,15,25,152,35,156,115,212,15,35,220,18,27,208,28,68, - 196,116,200,67,195,121,209,28,80,211,18,81,208,12,81,216, - 11,15,144,122,209,11,33,220,18,28,208,29,46,176,20,209, - 29,53,211,18,54,208,12,54,216,11,20,152,1,138,62,152, - 89,208,29,46,220,18,28,208,29,74,211,18,75,208,12,75, - 219,8,25,216,11,15,144,51,138,59,216,19,29,215,19,35, - 209,19,35,160,67,216,42,46,176,84,216,43,53,175,63,169, - 63,216,44,53,240,7,0,20,36,243,0,3,20,55,136,68, - 244,8,0,20,31,152,116,159,123,153,123,168,68,211,19,49, - 208,12,49,224,19,29,215,19,35,209,19,35,160,67,216,42, - 46,176,84,216,42,52,175,47,169,47,216,44,53,240,7,0, - 20,36,243,0,3,20,55,136,68,244,8,0,20,31,152,116, - 159,122,153,122,168,52,211,19,48,208,12,48,114,27,0,0, - 0,99,0,0,0,0,0,0,0,0,0,0,0,0,1,0, - 0,0,0,0,0,0,243,48,0,0,0,151,0,101,0,90, - 1,100,0,90,2,100,1,132,0,90,3,100,2,132,0,90, - 4,100,3,132,0,90,5,100,4,132,0,90,6,100,5,132, - 0,90,7,100,6,132,0,90,8,121,7,41,8,114,109,1, - 0,0,99,3,0,0,0,0,0,0,0,0,0,0,0,2, - 0,0,0,3,0,0,0,243,32,0,0,0,151,0,124,1, - 124,0,95,0,0,0,0,0,0,0,0,0,124,2,124,0, - 95,1,0,0,0,0,0,0,0,0,121,0,114,23,0,0, - 0,41,2,218,7,95,115,116,114,101,97,109,218,5,95,112, - 114,111,99,41,3,114,238,0,0,0,218,6,115,116,114,101, - 97,109,114,112,1,0,0,115,3,0,0,0,32,32,32,114, - 25,0,0,0,114,240,0,0,0,122,20,95,119,114,97,112, - 95,99,108,111,115,101,46,95,95,105,110,105,116,95,95,239, - 3,0,0,115,16,0,0,0,128,0,216,27,33,136,68,140, - 76,216,25,29,136,68,141,74,114,27,0,0,0,99,1,0, - 0,0,0,0,0,0,0,0,0,0,2,0,0,0,3,0, - 0,0,243,150,0,0,0,151,0,124,0,106,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,106, - 3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,171,0,0,0,0,0,0,0,1,0,124,0,106, - 4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,106,7,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,171,0,0,0,0,0,0,0,125, - 1,124,1,100,1,107,40,0,0,114,1,121,0,116,8,0, - 0,0,0,0,0,0,0,100,2,107,40,0,0,114,2,124, - 1,83,0,124,1,100,3,122,3,0,0,83,0,41,4,78, - 114,2,0,0,0,114,42,0,0,0,233,8,0,0,0,41, - 5,114,116,1,0,0,114,170,0,0,0,114,117,1,0,0, - 218,4,119,97,105,116,114,11,0,0,0,41,2,114,238,0, - 0,0,218,10,114,101,116,117,114,110,99,111,100,101,115,2, - 0,0,0,32,32,114,25,0,0,0,114,170,0,0,0,122, - 17,95,119,114,97,112,95,99,108,111,115,101,46,99,108,111, - 115,101,242,3,0,0,115,67,0,0,0,128,0,216,12,16, - 143,76,137,76,215,12,30,209,12,30,212,12,32,216,25,29, - 159,26,153,26,159,31,153,31,211,25,42,136,74,216,15,25, - 152,81,138,127,216,23,27,220,15,19,144,116,138,124,216,23, - 33,208,16,33,224,23,33,160,81,145,127,208,16,38,114,27, - 0,0,0,99,1,0,0,0,0,0,0,0,0,0,0,0, - 1,0,0,0,3,0,0,0,243,6,0,0,0,151,0,124, - 0,83,0,114,23,0,0,0,114,15,1,0,0,114,2,1, - 0,0,115,1,0,0,0,32,114,25,0,0,0,218,9,95, - 95,101,110,116,101,114,95,95,122,21,95,119,114,97,112,95, - 99,108,111,115,101,46,95,95,101,110,116,101,114,95,95,251, - 3,0,0,243,7,0,0,0,128,0,216,19,23,136,75,114, - 27,0,0,0,99,1,0,0,0,0,0,0,0,0,0,0, - 0,2,0,0,0,7,0,0,0,243,36,0,0,0,151,0, - 124,0,106,1,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,171,0,0,0,0,0,0,0,1,0, - 121,0,114,23,0,0,0,169,1,114,170,0,0,0,169,2, - 114,238,0,0,0,114,186,0,0,0,115,2,0,0,0,32, - 32,114,25,0,0,0,218,8,95,95,101,120,105,116,95,95, - 122,20,95,119,114,97,112,95,99,108,111,115,101,46,95,95, - 101,120,105,116,95,95,253,3,0,0,243,11,0,0,0,128, - 0,216,12,16,143,74,137,74,141,76,114,27,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,46,0,0,0,151,0,116,1,0,0,0, - 0,0,0,0,0,124,0,106,2,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,124,1,171,2,0, - 0,0,0,0,0,83,0,114,23,0,0,0,41,2,218,7, - 103,101,116,97,116,116,114,114,116,1,0,0,41,2,114,238, - 0,0,0,114,11,0,0,0,115,2,0,0,0,32,32,114, - 25,0,0,0,218,11,95,95,103,101,116,97,116,116,114,95, - 95,122,23,95,119,114,97,112,95,99,108,111,115,101,46,95, - 95,103,101,116,97,116,116,114,95,95,255,3,0,0,115,19, - 0,0,0,128,0,220,19,26,152,52,159,60,153,60,168,20, - 211,19,46,208,12,46,114,27,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,44,0,0,0,151,0,116,1,0,0,0,0,0,0,0, - 0,124,0,106,2,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,171,1,0,0,0,0,0,0,83, - 0,114,23,0,0,0,41,2,218,4,105,116,101,114,114,116, - 1,0,0,114,2,1,0,0,115,1,0,0,0,32,114,25, - 0,0,0,114,255,0,0,0,122,20,95,119,114,97,112,95, - 99,108,111,115,101,46,95,95,105,116,101,114,95,95,1,4, - 0,0,115,17,0,0,0,128,0,220,19,23,152,4,159,12, - 153,12,211,19,37,208,12,37,114,27,0,0,0,78,41,9, - 114,28,1,0,0,114,29,1,0,0,114,30,1,0,0,114, - 240,0,0,0,114,170,0,0,0,114,124,1,0,0,114,129, - 1,0,0,114,133,1,0,0,114,255,0,0,0,114,15,1, - 0,0,114,27,0,0,0,114,25,0,0,0,114,109,1,0, - 0,114,109,1,0,0,238,3,0,0,115,32,0,0,0,132, - 0,242,2,2,9,30,242,6,8,9,39,242,18,1,9,24, - 242,4,1,9,25,242,4,1,9,47,243,4,1,9,38,114, - 27,0,0,0,114,109,1,0,0,114,113,1,0,0,99,4, - 0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,15, - 0,0,0,243,180,0,0,0,151,0,116,1,0,0,0,0, - 0,0,0,0,124,0,116,2,0,0,0,0,0,0,0,0, - 171,2,0,0,0,0,0,0,115,23,116,5,0,0,0,0, - 0,0,0,0,100,1,116,7,0,0,0,0,0,0,0,0, - 124,0,171,1,0,0,0,0,0,0,122,6,0,0,171,1, - 0,0,0,0,0,0,130,1,100,2,100,0,108,4,125,6, - 100,3,124,1,118,1,114,17,124,6,106,11,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,124,3, - 171,1,0,0,0,0,0,0,125,3,2,0,124,6,106,12, + 0,124,0,100,7,100,7,124,3,106,14,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,124,2,172, + 8,171,5,0,0,0,0,0,0,125,4,116,17,0,0,0, + 0,0,0,0,0,124,4,106,18,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,124,4,171,2,0, + 0,0,0,0,0,83,0,124,3,106,13,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,124,0,100, + 7,100,7,124,3,106,14,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,124,2,172,9,171,5,0, + 0,0,0,0,0,125,4,116,17,0,0,0,0,0,0,0, + 0,124,4,106,20,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,124,4,171,2,0,0,0,0,0, + 0,83,0,41,10,78,122,38,105,110,118,97,108,105,100,32, + 99,109,100,32,116,121,112,101,32,40,37,115,44,32,101,120, + 112,101,99,116,101,100,32,115,116,114,105,110,103,41,41,2, + 218,1,114,218,1,119,122,15,105,110,118,97,108,105,100,32, + 109,111,100,101,32,37,114,114,2,0,0,0,122,43,112,111, + 112,101,110,40,41,32,100,111,101,115,32,110,111,116,32,115, + 117,112,112,111,114,116,32,117,110,98,117,102,102,101,114,101, + 100,32,115,116,114,101,97,109,115,114,100,1,0,0,84,41, + 4,218,5,115,104,101,108,108,218,4,116,101,120,116,218,6, + 115,116,100,111,117,116,218,7,98,117,102,115,105,122,101,41, + 4,114,102,1,0,0,114,103,1,0,0,218,5,115,116,100, + 105,110,114,105,1,0,0,41,11,114,115,0,0,0,114,47, + 0,0,0,114,224,0,0,0,114,35,1,0,0,114,226,0, + 0,0,218,10,115,117,98,112,114,111,99,101,115,115,218,5, + 80,111,112,101,110,218,4,80,73,80,69,218,11,95,119,114, + 97,112,95,99,108,111,115,101,114,104,1,0,0,114,106,1, + 0,0,41,5,218,3,99,109,100,114,119,0,0,0,218,9, + 98,117,102,102,101,114,105,110,103,114,107,1,0,0,218,4, + 112,114,111,99,115,5,0,0,0,32,32,32,32,32,114,25, + 0,0,0,218,5,112,111,112,101,110,114,114,1,0,0,216, + 3,0,0,115,206,0,0,0,128,0,220,15,25,152,35,156, + 115,212,15,35,220,18,27,208,28,68,196,116,200,67,195,121, + 209,28,80,211,18,81,208,12,81,216,11,15,144,122,209,11, + 33,220,18,28,208,29,46,176,20,209,29,53,211,18,54,208, + 12,54,216,11,20,152,1,138,62,152,89,208,29,46,220,18, + 28,208,29,74,211,18,75,208,12,75,219,8,25,216,11,15, + 144,51,138,59,216,19,29,215,19,35,209,19,35,160,67,216, + 42,46,176,84,216,43,53,175,63,169,63,216,44,53,240,7, + 0,20,36,243,0,3,20,55,136,68,244,8,0,20,31,152, + 116,159,123,153,123,168,68,211,19,49,208,12,49,224,19,29, + 215,19,35,209,19,35,160,67,216,42,46,176,84,216,42,52, + 175,47,169,47,216,44,53,240,7,0,20,36,243,0,3,20, + 55,136,68,244,8,0,20,31,152,116,159,122,153,122,168,52, + 211,19,48,208,12,48,114,27,0,0,0,99,0,0,0,0, + 0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, + 243,48,0,0,0,151,0,101,0,90,1,100,0,90,2,100, + 1,132,0,90,3,100,2,132,0,90,4,100,3,132,0,90, + 5,100,4,132,0,90,6,100,5,132,0,90,7,100,6,132, + 0,90,8,121,7,41,8,114,110,1,0,0,99,3,0,0, + 0,0,0,0,0,0,0,0,0,2,0,0,0,3,0,0, + 0,243,32,0,0,0,151,0,124,1,124,0,95,0,0,0, + 0,0,0,0,0,0,124,2,124,0,95,1,0,0,0,0, + 0,0,0,0,121,0,114,23,0,0,0,41,2,218,7,95, + 115,116,114,101,97,109,218,5,95,112,114,111,99,41,3,114, + 239,0,0,0,218,6,115,116,114,101,97,109,114,113,1,0, + 0,115,3,0,0,0,32,32,32,114,25,0,0,0,114,241, + 0,0,0,122,20,95,119,114,97,112,95,99,108,111,115,101, + 46,95,95,105,110,105,116,95,95,239,3,0,0,115,16,0, + 0,0,128,0,216,27,33,136,68,140,76,216,25,29,136,68, + 141,74,114,27,0,0,0,99,1,0,0,0,0,0,0,0, + 0,0,0,0,2,0,0,0,3,0,0,0,243,150,0,0, + 0,151,0,124,0,106,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,106,3,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,171,0,0, + 0,0,0,0,0,1,0,124,0,106,4,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,106,7,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,171,0,0,0,0,0,0,0,125,1,124,1,100,1,107, + 40,0,0,114,1,121,0,116,8,0,0,0,0,0,0,0, + 0,100,2,107,40,0,0,114,2,124,1,83,0,124,1,100, + 3,122,3,0,0,83,0,41,4,78,114,2,0,0,0,114, + 42,0,0,0,233,8,0,0,0,41,5,114,117,1,0,0, + 114,171,0,0,0,114,118,1,0,0,218,4,119,97,105,116, + 114,11,0,0,0,41,2,114,239,0,0,0,218,10,114,101, + 116,117,114,110,99,111,100,101,115,2,0,0,0,32,32,114, + 25,0,0,0,114,171,0,0,0,122,17,95,119,114,97,112, + 95,99,108,111,115,101,46,99,108,111,115,101,242,3,0,0, + 115,67,0,0,0,128,0,216,12,16,143,76,137,76,215,12, + 30,209,12,30,212,12,32,216,25,29,159,26,153,26,159,31, + 153,31,211,25,42,136,74,216,15,25,152,81,138,127,216,23, + 27,220,15,19,144,116,138,124,216,23,33,208,16,33,224,23, + 33,160,81,145,127,208,16,38,114,27,0,0,0,99,1,0, + 0,0,0,0,0,0,0,0,0,0,1,0,0,0,3,0, + 0,0,243,6,0,0,0,151,0,124,0,83,0,114,23,0, + 0,0,114,16,1,0,0,114,3,1,0,0,115,1,0,0, + 0,32,114,25,0,0,0,218,9,95,95,101,110,116,101,114, + 95,95,122,21,95,119,114,97,112,95,99,108,111,115,101,46, + 95,95,101,110,116,101,114,95,95,251,3,0,0,243,7,0, + 0,0,128,0,216,19,23,136,75,114,27,0,0,0,99,1, + 0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,7, + 0,0,0,243,36,0,0,0,151,0,124,0,106,1,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,124,0,124,1,124,2,124,3,103,4,124,4,162,1, - 173,6,105,0,124,5,164,1,142,1,83,0,41,4,78,122, - 38,105,110,118,97,108,105,100,32,102,100,32,116,121,112,101, - 32,40,37,115,44,32,101,120,112,101,99,116,101,100,32,105, - 110,116,101,103,101,114,41,114,2,0,0,0,218,1,98,41, - 7,114,115,0,0,0,218,3,105,110,116,114,223,0,0,0, - 114,34,1,0,0,218,2,105,111,218,13,116,101,120,116,95, - 101,110,99,111,100,105,110,103,114,69,0,0,0,41,7,218, - 2,102,100,114,119,0,0,0,114,111,1,0,0,114,43,1, - 0,0,114,186,0,0,0,218,6,107,119,97,114,103,115,114, - 139,1,0,0,115,7,0,0,0,32,32,32,32,32,32,32, - 114,25,0,0,0,114,20,0,0,0,114,20,0,0,0,7, - 4,0,0,115,92,0,0,0,128,0,220,11,21,144,98,156, - 35,212,11,30,220,14,23,208,24,64,196,52,200,2,195,56, - 209,24,75,211,14,76,208,8,76,219,4,13,216,7,10,144, - 36,129,127,216,19,21,215,19,35,209,19,35,160,72,211,19, - 45,136,8,216,11,18,136,50,143,55,137,55,144,50,144,116, - 152,89,168,8,208,11,66,176,52,210,11,66,184,54,209,11, - 66,208,4,66,114,27,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,112, - 1,0,0,151,0,116,1,0,0,0,0,0,0,0,0,124, - 0,116,2,0,0,0,0,0,0,0,0,116,4,0,0,0, - 0,0,0,0,0,102,2,171,2,0,0,0,0,0,0,114, - 2,124,0,83,0,116,7,0,0,0,0,0,0,0,0,124, - 0,171,1,0,0,0,0,0,0,125,1,9,0,124,1,106, - 9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,124,0,171,1,0,0,0,0,0,0,125,2,116, - 1,0,0,0,0,0,0,0,0,124,2,116,2,0,0,0, + 171,0,0,0,0,0,0,0,1,0,121,0,114,23,0,0, + 0,169,1,114,171,0,0,0,169,2,114,239,0,0,0,114, + 187,0,0,0,115,2,0,0,0,32,32,114,25,0,0,0, + 218,8,95,95,101,120,105,116,95,95,122,20,95,119,114,97, + 112,95,99,108,111,115,101,46,95,95,101,120,105,116,95,95, + 253,3,0,0,243,11,0,0,0,128,0,216,12,16,143,74, + 137,74,141,76,114,27,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,46, + 0,0,0,151,0,116,1,0,0,0,0,0,0,0,0,124, + 0,106,2,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,124,1,171,2,0,0,0,0,0,0,83, + 0,114,23,0,0,0,41,2,218,7,103,101,116,97,116,116, + 114,114,117,1,0,0,41,2,114,239,0,0,0,114,11,0, + 0,0,115,2,0,0,0,32,32,114,25,0,0,0,218,11, + 95,95,103,101,116,97,116,116,114,95,95,122,23,95,119,114, + 97,112,95,99,108,111,115,101,46,95,95,103,101,116,97,116, + 116,114,95,95,255,3,0,0,115,19,0,0,0,128,0,220, + 19,26,152,52,159,60,153,60,168,20,211,19,46,208,12,46, + 114,27,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,44,0,0,0,151, + 0,116,1,0,0,0,0,0,0,0,0,124,0,106,2,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,171,1,0,0,0,0,0,0,83,0,114,23,0,0,0, + 41,2,218,4,105,116,101,114,114,117,1,0,0,114,3,1, + 0,0,115,1,0,0,0,32,114,25,0,0,0,114,0,1, + 0,0,122,20,95,119,114,97,112,95,99,108,111,115,101,46, + 95,95,105,116,101,114,95,95,1,4,0,0,115,17,0,0, + 0,128,0,220,19,23,152,4,159,12,153,12,211,19,37,208, + 12,37,114,27,0,0,0,78,41,9,114,29,1,0,0,114, + 30,1,0,0,114,31,1,0,0,114,241,0,0,0,114,171, + 0,0,0,114,125,1,0,0,114,130,1,0,0,114,134,1, + 0,0,114,0,1,0,0,114,16,1,0,0,114,27,0,0, + 0,114,25,0,0,0,114,110,1,0,0,114,110,1,0,0, + 238,3,0,0,115,32,0,0,0,132,0,242,2,2,9,30, + 242,6,8,9,39,242,18,1,9,24,242,4,1,9,25,242, + 4,1,9,47,243,4,1,9,38,114,27,0,0,0,114,110, + 1,0,0,114,114,1,0,0,99,4,0,0,0,0,0,0, + 0,0,0,0,0,6,0,0,0,15,0,0,0,243,180,0, + 0,0,151,0,116,1,0,0,0,0,0,0,0,0,124,0, + 116,2,0,0,0,0,0,0,0,0,171,2,0,0,0,0, + 0,0,115,23,116,5,0,0,0,0,0,0,0,0,100,1, + 116,7,0,0,0,0,0,0,0,0,124,0,171,1,0,0, + 0,0,0,0,122,6,0,0,171,1,0,0,0,0,0,0, + 130,1,100,2,100,0,108,4,125,6,100,3,124,1,118,1, + 114,17,124,6,106,11,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,124,3,171,1,0,0,0,0, + 0,0,125,3,2,0,124,6,106,12,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,124,0,124,1, + 124,2,124,3,103,4,124,4,162,1,173,6,105,0,124,5, + 164,1,142,1,83,0,41,4,78,122,38,105,110,118,97,108, + 105,100,32,102,100,32,116,121,112,101,32,40,37,115,44,32, + 101,120,112,101,99,116,101,100,32,105,110,116,101,103,101,114, + 41,114,2,0,0,0,218,1,98,41,7,114,115,0,0,0, + 218,3,105,110,116,114,224,0,0,0,114,35,1,0,0,218, + 2,105,111,218,13,116,101,120,116,95,101,110,99,111,100,105, + 110,103,114,69,0,0,0,41,7,218,2,102,100,114,119,0, + 0,0,114,112,1,0,0,114,44,1,0,0,114,187,0,0, + 0,218,6,107,119,97,114,103,115,114,140,1,0,0,115,7, + 0,0,0,32,32,32,32,32,32,32,114,25,0,0,0,114, + 20,0,0,0,114,20,0,0,0,7,4,0,0,115,92,0, + 0,0,128,0,220,11,21,144,98,156,35,212,11,30,220,14, + 23,208,24,64,196,52,200,2,195,56,209,24,75,211,14,76, + 208,8,76,219,4,13,216,7,10,144,36,129,127,216,19,21, + 215,19,35,209,19,35,160,72,211,19,45,136,8,216,11,18, + 136,50,143,55,137,55,144,50,144,116,152,89,168,8,208,11, + 66,176,52,210,11,66,184,54,209,11,66,208,4,66,114,27, + 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,112,1,0,0,151,0,116, + 1,0,0,0,0,0,0,0,0,124,0,116,2,0,0,0, 0,0,0,0,0,116,4,0,0,0,0,0,0,0,0,102, - 2,171,2,0,0,0,0,0,0,114,2,124,2,83,0,116, - 15,0,0,0,0,0,0,0,0,100,3,106,19,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,124, - 1,106,16,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,116,7,0,0,0,0,0,0,0,0,124, - 2,171,1,0,0,0,0,0,0,106,16,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,171,2,0, - 0,0,0,0,0,171,1,0,0,0,0,0,0,130,1,35, - 0,116,10,0,0,0,0,0,0,0,0,36,0,114,38,1, - 0,116,13,0,0,0,0,0,0,0,0,124,1,100,1,171, - 2,0,0,0,0,0,0,114,1,130,0,116,15,0,0,0, - 0,0,0,0,0,100,2,124,1,106,16,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,122,0,0, - 0,171,1,0,0,0,0,0,0,130,1,119,0,120,3,89, - 0,119,1,41,4,97,97,1,0,0,82,101,116,117,114,110, - 32,116,104,101,32,112,97,116,104,32,114,101,112,114,101,115, - 101,110,116,97,116,105,111,110,32,111,102,32,97,32,112,97, - 116,104,45,108,105,107,101,32,111,98,106,101,99,116,46,10, - 10,32,32,32,32,73,102,32,115,116,114,32,111,114,32,98, - 121,116,101,115,32,105,115,32,112,97,115,115,101,100,32,105, - 110,44,32,105,116,32,105,115,32,114,101,116,117,114,110,101, - 100,32,117,110,99,104,97,110,103,101,100,46,32,79,116,104, - 101,114,119,105,115,101,32,116,104,101,10,32,32,32,32,111, - 115,46,80,97,116,104,76,105,107,101,32,105,110,116,101,114, - 102,97,99,101,32,105,115,32,117,115,101,100,32,116,111,32, - 103,101,116,32,116,104,101,32,112,97,116,104,32,114,101,112, - 114,101,115,101,110,116,97,116,105,111,110,46,32,73,102,32, - 116,104,101,10,32,32,32,32,112,97,116,104,32,114,101,112, - 114,101,115,101,110,116,97,116,105,111,110,32,105,115,32,110, - 111,116,32,115,116,114,32,111,114,32,98,121,116,101,115,44, - 32,84,121,112,101,69,114,114,111,114,32,105,115,32,114,97, - 105,115,101,100,46,32,73,102,32,116,104,101,10,32,32,32, - 32,112,114,111,118,105,100,101,100,32,112,97,116,104,32,105, - 115,32,110,111,116,32,115,116,114,44,32,98,121,116,101,115, - 44,32,111,114,32,111,115,46,80,97,116,104,76,105,107,101, - 44,32,84,121,112,101,69,114,114,111,114,32,105,115,32,114, - 97,105,115,101,100,46,10,32,32,32,32,218,10,95,95,102, - 115,112,97,116,104,95,95,122,47,101,120,112,101,99,116,101, - 100,32,115,116,114,44,32,98,121,116,101,115,32,111,114,32, - 111,115,46,80,97,116,104,76,105,107,101,32,111,98,106,101, - 99,116,44,32,110,111,116,32,122,55,101,120,112,101,99,116, - 101,100,32,123,125,46,95,95,102,115,112,97,116,104,95,95, - 40,41,32,116,111,32,114,101,116,117,114,110,32,115,116,114, - 32,111,114,32,98,121,116,101,115,44,32,110,111,116,32,123, - 125,41,10,114,115,0,0,0,114,47,0,0,0,114,116,0, - 0,0,114,34,1,0,0,114,144,1,0,0,114,32,0,0, - 0,218,7,104,97,115,97,116,116,114,114,223,0,0,0,114, - 28,1,0,0,218,6,102,111,114,109,97,116,41,3,114,12, - 0,0,0,218,9,112,97,116,104,95,116,121,112,101,218,9, - 112,97,116,104,95,114,101,112,114,115,3,0,0,0,32,32, - 32,114,25,0,0,0,218,7,95,102,115,112,97,116,104,114, - 149,1,0,0,18,4,0,0,115,191,0,0,0,128,0,244, - 16,0,8,18,144,36,156,19,156,101,152,12,212,7,37,216, - 15,19,136,11,244,8,0,17,21,144,84,147,10,128,73,240, - 2,7,5,57,216,20,29,215,20,40,209,20,40,168,20,211, - 20,46,136,9,244,14,0,8,18,144,41,156,99,164,53,152, - 92,212,7,42,216,15,24,208,8,24,228,14,23,240,0,1, - 25,33,223,33,39,161,22,168,9,215,40,58,209,40,58,220, - 40,44,168,89,171,15,215,40,64,209,40,64,243,3,1,34, - 66,1,243,3,2,15,67,1,240,0,2,9,67,1,248,244, - 19,0,12,26,242,0,5,5,57,220,11,18,144,57,152,108, - 212,11,43,216,12,17,228,18,27,240,0,1,29,35,216,37, - 46,215,37,55,209,37,55,241,3,1,29,56,243,0,1,19, - 57,240,0,1,13,57,240,9,5,5,57,250,115,11,0,0, - 0,165,17,66,6,0,194,6,47,66,53,3,114,132,0,0, - 0,99,0,0,0,0,0,0,0,0,0,0,0,0,3,0, - 0,0,0,0,0,0,243,84,0,0,0,151,0,101,0,90, - 1,100,0,90,2,100,1,90,3,101,4,106,10,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,100, - 2,132,0,171,0,0,0,0,0,0,0,90,6,101,7,100, - 3,132,0,171,0,0,0,0,0,0,0,90,8,2,0,101, - 7,101,9,171,1,0,0,0,0,0,0,90,10,121,4,41, - 5,218,8,80,97,116,104,76,105,107,101,122,67,65,98,115, - 116,114,97,99,116,32,98,97,115,101,32,99,108,97,115,115, - 32,102,111,114,32,105,109,112,108,101,109,101,110,116,105,110, - 103,32,116,104,101,32,102,105,108,101,32,115,121,115,116,101, - 109,32,112,97,116,104,32,112,114,111,116,111,99,111,108,46, - 99,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0, - 0,3,0,0,0,243,14,0,0,0,151,0,116,0,0,0, - 0,0,0,0,0,0,130,1,41,1,122,57,82,101,116,117, - 114,110,32,116,104,101,32,102,105,108,101,32,115,121,115,116, - 101,109,32,112,97,116,104,32,114,101,112,114,101,115,101,110, - 116,97,116,105,111,110,32,111,102,32,116,104,101,32,111,98, - 106,101,99,116,46,41,1,218,19,78,111,116,73,109,112,108, - 101,109,101,110,116,101,100,69,114,114,111,114,114,2,1,0, - 0,115,1,0,0,0,32,114,25,0,0,0,114,144,1,0, - 0,122,19,80,97,116,104,76,105,107,101,46,95,95,102,115, - 112,97,116,104,95,95,58,4,0,0,115,10,0,0,0,128, - 0,244,6,0,15,34,208,8,33,114,27,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,54,0,0,0,151,0,124,0,116,0,0,0, - 0,0,0,0,0,0,117,0,114,12,116,3,0,0,0,0, - 0,0,0,0,124,1,100,1,171,2,0,0,0,0,0,0, - 83,0,116,4,0,0,0,0,0,0,0,0,83,0,41,2, - 78,114,144,1,0,0,41,3,114,151,1,0,0,114,3,0, - 0,0,114,23,1,0,0,41,2,218,3,99,108,115,218,8, - 115,117,98,99,108,97,115,115,115,2,0,0,0,32,32,114, - 25,0,0,0,218,16,95,95,115,117,98,99,108,97,115,115, - 104,111,111,107,95,95,122,25,80,97,116,104,76,105,107,101, - 46,95,95,115,117,98,99,108,97,115,115,104,111,111,107,95, - 95,63,4,0,0,115,28,0,0,0,128,0,224,11,14,148, - 40,137,63,220,19,33,160,40,168,76,211,19,57,208,12,57, - 220,15,29,208,8,29,114,27,0,0,0,78,41,11,114,28, - 1,0,0,114,29,1,0,0,114,30,1,0,0,218,7,95, - 95,100,111,99,95,95,218,3,97,98,99,218,14,97,98,115, - 116,114,97,99,116,109,101,116,104,111,100,114,144,1,0,0, - 218,11,99,108,97,115,115,109,101,116,104,111,100,114,157,1, - 0,0,218,12,71,101,110,101,114,105,99,65,108,105,97,115, - 218,17,95,95,99,108,97,115,115,95,103,101,116,105,116,101, - 109,95,95,114,15,1,0,0,114,27,0,0,0,114,25,0, - 0,0,114,151,1,0,0,114,151,1,0,0,54,4,0,0, - 115,62,0,0,0,132,0,225,4,77,224,5,8,215,5,23, - 209,5,23,241,2,2,5,34,243,3,0,6,24,240,2,2, - 5,34,240,8,0,6,17,241,2,3,5,30,243,3,0,6, - 17,240,2,3,5,30,241,10,0,25,36,160,76,211,24,49, - 209,4,21,114,27,0,0,0,114,151,1,0,0,99,0,0, - 0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0, - 0,0,243,42,0,0,0,151,0,101,0,90,1,100,0,90, - 2,100,1,132,0,90,3,100,2,132,0,90,4,100,3,132, - 0,90,5,100,4,132,0,90,6,100,5,132,0,90,7,121, - 6,41,7,218,18,95,65,100,100,101,100,68,108,108,68,105, - 114,101,99,116,111,114,121,99,4,0,0,0,0,0,0,0, - 0,0,0,0,2,0,0,0,3,0,0,0,243,46,0,0, - 0,151,0,124,1,124,0,95,0,0,0,0,0,0,0,0, - 0,124,2,124,0,95,1,0,0,0,0,0,0,0,0,124, - 3,124,0,95,2,0,0,0,0,0,0,0,0,121,0,114, - 23,0,0,0,41,3,114,12,0,0,0,218,7,95,99,111, - 111,107,105,101,218,21,95,114,101,109,111,118,101,95,100,108, - 108,95,100,105,114,101,99,116,111,114,121,41,4,114,238,0, - 0,0,114,12,0,0,0,218,6,99,111,111,107,105,101,218, - 20,114,101,109,111,118,101,95,100,108,108,95,100,105,114,101, - 99,116,111,114,121,115,4,0,0,0,32,32,32,32,114,25, - 0,0,0,114,240,0,0,0,122,27,95,65,100,100,101,100, - 68,108,108,68,105,114,101,99,116,111,114,121,46,95,95,105, - 110,105,116,95,95,74,4,0,0,115,24,0,0,0,128,0, - 216,24,28,136,68,140,73,216,27,33,136,68,140,76,216,41, - 61,136,68,213,12,38,114,27,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,72,0,0,0,151,0,124,0,106,1,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,124,0,106, - 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,171,1,0,0,0,0,0,0,1,0,100,0,124, - 0,95,2,0,0,0,0,0,0,0,0,121,0,114,23,0, - 0,0,41,3,114,168,1,0,0,114,167,1,0,0,114,12, - 0,0,0,114,2,1,0,0,115,1,0,0,0,32,114,25, - 0,0,0,114,170,0,0,0,122,24,95,65,100,100,101,100, - 68,108,108,68,105,114,101,99,116,111,114,121,46,99,108,111, - 115,101,78,4,0,0,115,27,0,0,0,128,0,216,12,16, - 215,12,38,209,12,38,160,116,167,124,161,124,212,12,52,216, - 24,28,136,68,141,73,114,27,0,0,0,99,1,0,0,0, - 0,0,0,0,0,0,0,0,1,0,0,0,3,0,0,0, - 243,6,0,0,0,151,0,124,0,83,0,114,23,0,0,0, - 114,15,1,0,0,114,2,1,0,0,115,1,0,0,0,32, - 114,25,0,0,0,114,124,1,0,0,122,28,95,65,100,100, - 101,100,68,108,108,68,105,114,101,99,116,111,114,121,46,95, - 95,101,110,116,101,114,95,95,81,4,0,0,114,125,1,0, - 0,114,27,0,0,0,99,1,0,0,0,0,0,0,0,0, - 0,0,0,2,0,0,0,7,0,0,0,243,36,0,0,0, - 151,0,124,0,106,1,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,171,0,0,0,0,0,0,0, - 1,0,121,0,114,23,0,0,0,114,127,1,0,0,114,128, - 1,0,0,115,2,0,0,0,32,32,114,25,0,0,0,114, - 129,1,0,0,122,27,95,65,100,100,101,100,68,108,108,68, - 105,114,101,99,116,111,114,121,46,95,95,101,120,105,116,95, - 95,83,4,0,0,114,130,1,0,0,114,27,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,82,0,0,0,151,0,124,0,106,0,0, + 2,171,2,0,0,0,0,0,0,114,2,124,0,83,0,116, + 7,0,0,0,0,0,0,0,0,124,0,171,1,0,0,0, + 0,0,0,125,1,9,0,124,1,106,9,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,124,0,171, + 1,0,0,0,0,0,0,125,2,116,1,0,0,0,0,0, + 0,0,0,124,2,116,2,0,0,0,0,0,0,0,0,116, + 4,0,0,0,0,0,0,0,0,102,2,171,2,0,0,0, + 0,0,0,114,2,124,2,83,0,116,15,0,0,0,0,0, + 0,0,0,100,3,106,19,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,124,1,106,16,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,116, + 7,0,0,0,0,0,0,0,0,124,2,171,1,0,0,0, + 0,0,0,106,16,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,171,2,0,0,0,0,0,0,171, + 1,0,0,0,0,0,0,130,1,35,0,116,10,0,0,0, + 0,0,0,0,0,36,0,114,38,1,0,116,13,0,0,0, + 0,0,0,0,0,124,1,100,1,171,2,0,0,0,0,0, + 0,114,1,130,0,116,15,0,0,0,0,0,0,0,0,100, + 2,124,1,106,16,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,122,0,0,0,171,1,0,0,0, + 0,0,0,130,1,119,0,120,3,89,0,119,1,41,4,97, + 97,1,0,0,82,101,116,117,114,110,32,116,104,101,32,112, + 97,116,104,32,114,101,112,114,101,115,101,110,116,97,116,105, + 111,110,32,111,102,32,97,32,112,97,116,104,45,108,105,107, + 101,32,111,98,106,101,99,116,46,10,10,32,32,32,32,73, + 102,32,115,116,114,32,111,114,32,98,121,116,101,115,32,105, + 115,32,112,97,115,115,101,100,32,105,110,44,32,105,116,32, + 105,115,32,114,101,116,117,114,110,101,100,32,117,110,99,104, + 97,110,103,101,100,46,32,79,116,104,101,114,119,105,115,101, + 32,116,104,101,10,32,32,32,32,111,115,46,80,97,116,104, + 76,105,107,101,32,105,110,116,101,114,102,97,99,101,32,105, + 115,32,117,115,101,100,32,116,111,32,103,101,116,32,116,104, + 101,32,112,97,116,104,32,114,101,112,114,101,115,101,110,116, + 97,116,105,111,110,46,32,73,102,32,116,104,101,10,32,32, + 32,32,112,97,116,104,32,114,101,112,114,101,115,101,110,116, + 97,116,105,111,110,32,105,115,32,110,111,116,32,115,116,114, + 32,111,114,32,98,121,116,101,115,44,32,84,121,112,101,69, + 114,114,111,114,32,105,115,32,114,97,105,115,101,100,46,32, + 73,102,32,116,104,101,10,32,32,32,32,112,114,111,118,105, + 100,101,100,32,112,97,116,104,32,105,115,32,110,111,116,32, + 115,116,114,44,32,98,121,116,101,115,44,32,111,114,32,111, + 115,46,80,97,116,104,76,105,107,101,44,32,84,121,112,101, + 69,114,114,111,114,32,105,115,32,114,97,105,115,101,100,46, + 10,32,32,32,32,218,10,95,95,102,115,112,97,116,104,95, + 95,122,47,101,120,112,101,99,116,101,100,32,115,116,114,44, + 32,98,121,116,101,115,32,111,114,32,111,115,46,80,97,116, + 104,76,105,107,101,32,111,98,106,101,99,116,44,32,110,111, + 116,32,122,55,101,120,112,101,99,116,101,100,32,123,125,46, + 95,95,102,115,112,97,116,104,95,95,40,41,32,116,111,32, + 114,101,116,117,114,110,32,115,116,114,32,111,114,32,98,121, + 116,101,115,44,32,110,111,116,32,123,125,41,10,114,115,0, + 0,0,114,47,0,0,0,114,116,0,0,0,114,35,1,0, + 0,114,145,1,0,0,114,32,0,0,0,218,7,104,97,115, + 97,116,116,114,114,224,0,0,0,114,29,1,0,0,218,6, + 102,111,114,109,97,116,41,3,114,12,0,0,0,218,9,112, + 97,116,104,95,116,121,112,101,218,9,112,97,116,104,95,114, + 101,112,114,115,3,0,0,0,32,32,32,114,25,0,0,0, + 218,7,95,102,115,112,97,116,104,114,150,1,0,0,18,4, + 0,0,115,191,0,0,0,128,0,244,16,0,8,18,144,36, + 156,19,156,101,152,12,212,7,37,216,15,19,136,11,244,8, + 0,17,21,144,84,147,10,128,73,240,2,7,5,57,216,20, + 29,215,20,40,209,20,40,168,20,211,20,46,136,9,244,14, + 0,8,18,144,41,156,99,164,53,152,92,212,7,42,216,15, + 24,208,8,24,228,14,23,240,0,1,25,33,223,33,39,161, + 22,168,9,215,40,58,209,40,58,220,40,44,168,89,171,15, + 215,40,64,209,40,64,243,3,1,34,66,1,243,3,2,15, + 67,1,240,0,2,9,67,1,248,244,19,0,12,26,242,0, + 5,5,57,220,11,18,144,57,152,108,212,11,43,216,12,17, + 228,18,27,240,0,1,29,35,216,37,46,215,37,55,209,37, + 55,241,3,1,29,56,243,0,1,19,57,240,0,1,13,57, + 240,9,5,5,57,250,115,11,0,0,0,165,17,66,6,0, + 194,6,47,66,53,3,114,132,0,0,0,99,0,0,0,0, + 0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0, + 243,84,0,0,0,151,0,101,0,90,1,100,0,90,2,100, + 1,90,3,101,4,106,10,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,100,2,132,0,171,0,0, + 0,0,0,0,0,90,6,101,7,100,3,132,0,171,0,0, + 0,0,0,0,0,90,8,2,0,101,7,101,9,171,1,0, + 0,0,0,0,0,90,10,121,4,41,5,218,8,80,97,116, + 104,76,105,107,101,122,67,65,98,115,116,114,97,99,116,32, + 98,97,115,101,32,99,108,97,115,115,32,102,111,114,32,105, + 109,112,108,101,109,101,110,116,105,110,103,32,116,104,101,32, + 102,105,108,101,32,115,121,115,116,101,109,32,112,97,116,104, + 32,112,114,111,116,111,99,111,108,46,99,1,0,0,0,0, + 0,0,0,0,0,0,0,1,0,0,0,3,0,0,0,243, + 14,0,0,0,151,0,116,0,0,0,0,0,0,0,0,0, + 130,1,41,1,122,57,82,101,116,117,114,110,32,116,104,101, + 32,102,105,108,101,32,115,121,115,116,101,109,32,112,97,116, + 104,32,114,101,112,114,101,115,101,110,116,97,116,105,111,110, + 32,111,102,32,116,104,101,32,111,98,106,101,99,116,46,41, + 1,218,19,78,111,116,73,109,112,108,101,109,101,110,116,101, + 100,69,114,114,111,114,114,3,1,0,0,115,1,0,0,0, + 32,114,25,0,0,0,114,145,1,0,0,122,19,80,97,116, + 104,76,105,107,101,46,95,95,102,115,112,97,116,104,95,95, + 58,4,0,0,115,10,0,0,0,128,0,244,6,0,15,34, + 208,8,33,114,27,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,54,0, + 0,0,151,0,124,0,116,0,0,0,0,0,0,0,0,0, + 117,0,114,12,116,3,0,0,0,0,0,0,0,0,124,1, + 100,1,171,2,0,0,0,0,0,0,83,0,116,4,0,0, + 0,0,0,0,0,0,83,0,41,2,78,114,145,1,0,0, + 41,3,114,152,1,0,0,114,3,0,0,0,114,24,1,0, + 0,41,2,218,3,99,108,115,218,8,115,117,98,99,108,97, + 115,115,115,2,0,0,0,32,32,114,25,0,0,0,218,16, + 95,95,115,117,98,99,108,97,115,115,104,111,111,107,95,95, + 122,25,80,97,116,104,76,105,107,101,46,95,95,115,117,98, + 99,108,97,115,115,104,111,111,107,95,95,63,4,0,0,115, + 28,0,0,0,128,0,224,11,14,148,40,137,63,220,19,33, + 160,40,168,76,211,19,57,208,12,57,220,15,29,208,8,29, + 114,27,0,0,0,78,41,11,114,29,1,0,0,114,30,1, + 0,0,114,31,1,0,0,218,7,95,95,100,111,99,95,95, + 218,3,97,98,99,218,14,97,98,115,116,114,97,99,116,109, + 101,116,104,111,100,114,145,1,0,0,218,11,99,108,97,115, + 115,109,101,116,104,111,100,114,158,1,0,0,218,12,71,101, + 110,101,114,105,99,65,108,105,97,115,218,17,95,95,99,108, + 97,115,115,95,103,101,116,105,116,101,109,95,95,114,16,1, + 0,0,114,27,0,0,0,114,25,0,0,0,114,152,1,0, + 0,114,152,1,0,0,54,4,0,0,115,62,0,0,0,132, + 0,225,4,77,224,5,8,215,5,23,209,5,23,241,2,2, + 5,34,243,3,0,6,24,240,2,2,5,34,240,8,0,6, + 17,241,2,3,5,30,243,3,0,6,17,240,2,3,5,30, + 241,10,0,25,36,160,76,211,24,49,209,4,21,114,27,0, + 0,0,114,152,1,0,0,99,0,0,0,0,0,0,0,0, + 0,0,0,0,1,0,0,0,0,0,0,0,243,42,0,0, + 0,151,0,101,0,90,1,100,0,90,2,100,1,132,0,90, + 3,100,2,132,0,90,4,100,3,132,0,90,5,100,4,132, + 0,90,6,100,5,132,0,90,7,121,6,41,7,218,18,95, + 65,100,100,101,100,68,108,108,68,105,114,101,99,116,111,114, + 121,99,4,0,0,0,0,0,0,0,0,0,0,0,2,0, + 0,0,3,0,0,0,243,46,0,0,0,151,0,124,1,124, + 0,95,0,0,0,0,0,0,0,0,0,124,2,124,0,95, + 1,0,0,0,0,0,0,0,0,124,3,124,0,95,2,0, + 0,0,0,0,0,0,0,121,0,114,23,0,0,0,41,3, + 114,12,0,0,0,218,7,95,99,111,111,107,105,101,218,21, + 95,114,101,109,111,118,101,95,100,108,108,95,100,105,114,101, + 99,116,111,114,121,41,4,114,239,0,0,0,114,12,0,0, + 0,218,6,99,111,111,107,105,101,218,20,114,101,109,111,118, + 101,95,100,108,108,95,100,105,114,101,99,116,111,114,121,115, + 4,0,0,0,32,32,32,32,114,25,0,0,0,114,241,0, + 0,0,122,27,95,65,100,100,101,100,68,108,108,68,105,114, + 101,99,116,111,114,121,46,95,95,105,110,105,116,95,95,74, + 4,0,0,115,24,0,0,0,128,0,216,24,28,136,68,140, + 73,216,27,33,136,68,140,76,216,41,61,136,68,213,12,38, + 114,27,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,72,0,0,0,151, + 0,124,0,106,1,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,124,0,106,2,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,171,1,0, + 0,0,0,0,0,1,0,100,0,124,0,95,2,0,0,0, + 0,0,0,0,0,121,0,114,23,0,0,0,41,3,114,169, + 1,0,0,114,168,1,0,0,114,12,0,0,0,114,3,1, + 0,0,115,1,0,0,0,32,114,25,0,0,0,114,171,0, + 0,0,122,24,95,65,100,100,101,100,68,108,108,68,105,114, + 101,99,116,111,114,121,46,99,108,111,115,101,78,4,0,0, + 115,27,0,0,0,128,0,216,12,16,215,12,38,209,12,38, + 160,116,167,124,161,124,212,12,52,216,24,28,136,68,141,73, + 114,27,0,0,0,99,1,0,0,0,0,0,0,0,0,0, + 0,0,1,0,0,0,3,0,0,0,243,6,0,0,0,151, + 0,124,0,83,0,114,23,0,0,0,114,16,1,0,0,114, + 3,1,0,0,115,1,0,0,0,32,114,25,0,0,0,114, + 125,1,0,0,122,28,95,65,100,100,101,100,68,108,108,68, + 105,114,101,99,116,111,114,121,46,95,95,101,110,116,101,114, + 95,95,81,4,0,0,114,126,1,0,0,114,27,0,0,0, + 99,1,0,0,0,0,0,0,0,0,0,0,0,2,0,0, + 0,7,0,0,0,243,36,0,0,0,151,0,124,0,106,1, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,114,27,100,1,106,3,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,124,0,106,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,171, - 1,0,0,0,0,0,0,83,0,121,2,41,3,78,122,25, - 60,65,100,100,101,100,68,108,108,68,105,114,101,99,116,111, - 114,121,40,123,33,114,125,41,62,122,21,60,65,100,100,101, - 100,68,108,108,68,105,114,101,99,116,111,114,121,40,41,62, - 41,2,114,12,0,0,0,114,146,1,0,0,114,2,1,0, - 0,115,1,0,0,0,32,114,25,0,0,0,114,10,1,0, - 0,122,27,95,65,100,100,101,100,68,108,108,68,105,114,101, - 99,116,111,114,121,46,95,95,114,101,112,114,95,95,85,4, - 0,0,115,33,0,0,0,128,0,216,15,19,143,121,138,121, - 216,23,50,215,23,57,209,23,57,184,36,191,41,185,41,211, - 23,68,208,16,68,216,19,42,114,27,0,0,0,78,41,8, - 114,28,1,0,0,114,29,1,0,0,114,30,1,0,0,114, - 240,0,0,0,114,170,0,0,0,114,124,1,0,0,114,129, - 1,0,0,114,10,1,0,0,114,15,1,0,0,114,27,0, - 0,0,114,25,0,0,0,114,165,1,0,0,114,165,1,0, - 0,73,4,0,0,115,27,0,0,0,132,0,242,2,3,9, - 62,242,8,2,9,29,242,6,1,9,24,242,4,1,9,25, - 243,4,3,9,43,114,27,0,0,0,114,165,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,92,0,0,0,151,0,100,1,100,2,108, - 0,125,1,2,0,124,1,106,2,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,124,0,171,1,0, - 0,0,0,0,0,125,2,116,5,0,0,0,0,0,0,0, - 0,124,0,124,2,124,1,106,6,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,171,3,0,0,0, - 0,0,0,83,0,41,3,97,79,1,0,0,65,100,100,32, - 97,32,112,97,116,104,32,116,111,32,116,104,101,32,68,76, - 76,32,115,101,97,114,99,104,32,112,97,116,104,46,10,10, - 32,32,32,32,32,32,32,32,84,104,105,115,32,115,101,97, - 114,99,104,32,112,97,116,104,32,105,115,32,117,115,101,100, - 32,119,104,101,110,32,114,101,115,111,108,118,105,110,103,32, - 100,101,112,101,110,100,101,110,99,105,101,115,32,102,111,114, - 32,105,109,112,111,114,116,101,100,10,32,32,32,32,32,32, - 32,32,101,120,116,101,110,115,105,111,110,32,109,111,100,117, - 108,101,115,32,40,116,104,101,32,109,111,100,117,108,101,32, - 105,116,115,101,108,102,32,105,115,32,114,101,115,111,108,118, - 101,100,32,116,104,114,111,117,103,104,32,115,121,115,46,112, - 97,116,104,41,44,10,32,32,32,32,32,32,32,32,97,110, - 100,32,97,108,115,111,32,98,121,32,99,116,121,112,101,115, - 46,10,10,32,32,32,32,32,32,32,32,82,101,109,111,118, - 101,32,116,104,101,32,100,105,114,101,99,116,111,114,121,32, - 98,121,32,99,97,108,108,105,110,103,32,99,108,111,115,101, - 40,41,32,111,110,32,116,104,101,32,114,101,116,117,114,110, - 101,100,32,111,98,106,101,99,116,32,111,114,10,32,32,32, - 32,32,32,32,32,117,115,105,110,103,32,105,116,32,105,110, - 32,97,32,119,105,116,104,32,115,116,97,116,101,109,101,110, - 116,46,10,32,32,32,32,32,32,32,32,114,2,0,0,0, - 78,41,4,114,42,0,0,0,218,18,95,97,100,100,95,100, - 108,108,95,100,105,114,101,99,116,111,114,121,114,165,1,0, - 0,114,168,1,0,0,41,3,114,12,0,0,0,114,42,0, - 0,0,114,169,1,0,0,115,3,0,0,0,32,32,32,114, - 25,0,0,0,218,17,97,100,100,95,100,108,108,95,100,105, - 114,101,99,116,111,114,121,114,177,1,0,0,90,4,0,0, - 115,53,0,0,0,128,0,243,20,0,9,18,216,17,38,144, - 18,215,17,38,209,17,38,160,116,211,17,44,136,6,220,15, - 33,216,12,16,216,12,18,216,12,14,215,12,36,209,12,36, - 243,7,4,16,10,240,0,4,9,10,114,27,0,0,0,41, - 2,105,255,1,0,0,70,41,3,84,78,70,41,3,250,1, - 46,84,78,114,23,0,0,0,41,2,114,99,1,0,0,114, - 189,0,0,0,41,3,114,99,1,0,0,114,189,0,0,0, - 78,41,105,114,158,1,0,0,114,159,1,0,0,114,130,0, - 0,0,114,57,0,0,0,114,165,0,0,0,218,16,95,99, - 111,108,108,101,99,116,105,111,110,115,95,97,98,99,114,3, - 0,0,0,114,34,1,0,0,114,30,0,0,0,114,138,1, - 0,0,114,162,1,0,0,218,20,98,117,105,108,116,105,110, - 95,109,111,100,117,108,101,95,110,97,109,101,115,218,6,95, - 110,97,109,101,115,114,31,0,0,0,114,26,0,0,0,114, - 36,0,0,0,114,11,0,0,0,114,9,0,0,0,114,37, - 0,0,0,114,40,0,0,0,114,140,0,0,0,218,11,73, - 109,112,111,114,116,69,114,114,111,114,218,9,112,111,115,105, - 120,112,97,116,104,114,12,0,0,0,114,41,0,0,0,218, - 6,101,120,116,101,110,100,114,42,0,0,0,218,6,110,116, - 112,97,116,104,218,7,109,111,100,117,108,101,115,218,7,111, - 115,46,112,97,116,104,114,5,0,0,0,114,6,0,0,0, - 114,7,0,0,0,114,8,0,0,0,114,10,0,0,0,114, - 21,0,0,0,114,4,0,0,0,114,13,0,0,0,114,24, - 0,0,0,114,44,0,0,0,114,49,0,0,0,218,3,115, - 101,116,114,45,0,0,0,218,15,115,117,112,112,111,114,116, - 115,95,100,105,114,95,102,100,218,22,115,117,112,112,111,114, - 116,115,95,101,102,102,101,99,116,105,118,101,95,105,100,115, - 114,46,0,0,0,218,11,115,117,112,112,111,114,116,115,95, - 102,100,218,24,115,117,112,112,111,114,116,115,95,102,111,108, - 108,111,119,95,115,121,109,108,105,110,107,115,114,14,0,0, - 0,114,15,0,0,0,114,16,0,0,0,114,113,0,0,0, - 114,124,0,0,0,114,128,0,0,0,114,158,0,0,0,114, - 69,0,0,0,114,86,0,0,0,114,173,0,0,0,114,169, - 0,0,0,114,187,0,0,0,114,192,0,0,0,114,195,0, - 0,0,114,198,0,0,0,114,194,0,0,0,114,197,0,0, - 0,114,201,0,0,0,114,19,0,0,0,114,228,0,0,0, - 114,229,0,0,0,114,231,0,0,0,114,47,1,0,0,114, - 204,0,0,0,114,51,1,0,0,114,224,0,0,0,114,53, - 1,0,0,114,237,0,0,0,114,116,0,0,0,114,55,1, - 0,0,114,56,1,0,0,114,64,1,0,0,114,17,0,0, - 0,114,18,0,0,0,114,67,1,0,0,114,68,1,0,0, - 114,69,1,0,0,114,79,1,0,0,114,66,1,0,0,114, - 84,1,0,0,114,86,1,0,0,114,88,1,0,0,114,90, - 1,0,0,114,92,1,0,0,114,94,1,0,0,114,96,1, - 0,0,218,8,112,108,97,116,102,111,114,109,114,113,1,0, - 0,114,109,1,0,0,114,20,0,0,0,114,149,1,0,0, - 114,132,0,0,0,114,28,1,0,0,218,3,65,66,67,114, - 151,1,0,0,114,165,1,0,0,114,177,1,0,0,114,15, - 1,0,0,114,27,0,0,0,114,25,0,0,0,250,8,60, - 109,111,100,117,108,101,62,114,195,1,0,0,1,0,0,0, - 115,232,5,0,0,240,3,1,1,1,241,2,21,1,4,243, - 48,0,1,11,219,0,10,219,0,17,229,0,43,225,15,19, - 144,68,152,19,145,73,139,127,128,12,224,9,12,215,9,33, - 209,9,33,128,6,242,6,3,11,21,128,7,242,10,1,1, - 29,242,6,4,1,55,240,16,0,4,11,136,102,209,3,20, - 216,11,18,128,68,216,14,18,128,71,220,4,23,240,2,4, - 5,13,221,8,31,216,8,15,143,14,137,14,144,119,212,8, - 31,243,6,0,5,29,240,4,3,5,13,221,8,41,243,8, - 0,5,17,216,4,11,135,78,129,78,209,19,36,160,85,211, - 19,43,212,4,44,217,8,13,224,5,9,136,86,129,94,216, - 11,15,128,68,216,14,20,128,71,220,4,20,240,2,4,5, - 13,221,8,28,216,8,15,143,14,137,14,144,119,212,8,31, - 243,6,0,5,26,227,4,13,216,4,11,135,78,129,78,209, - 19,36,160,82,211,19,40,212,4,41,216,8,10,240,4,3, - 5,13,222,8,38,241,10,0,11,22,208,22,51,211,10,52, - 208,4,52,224,25,29,128,3,135,11,129,11,136,73,209,0, - 22,247,2,1,1,13,247,0,1,1,13,243,0,1,1,13, - 240,6,0,5,11,241,6,0,4,11,208,11,28,213,3,29, - 217,15,22,139,121,128,72,242,2,2,5,35,241,8,0,12, - 15,139,53,128,68,217,4,8,208,9,25,152,72,212,4,37, - 217,4,8,136,31,152,71,212,4,36,217,4,8,136,31,152, - 71,212,4,36,217,4,8,136,30,152,70,212,4,35,217,4, - 8,208,9,25,152,71,212,4,36,217,4,8,136,29,152,70, - 212,4,35,217,4,8,136,30,152,71,212,4,36,217,4,8, - 136,31,152,72,212,4,37,217,4,8,136,30,152,71,212,4, - 36,217,4,8,136,29,152,70,212,4,35,217,4,8,208,9, - 26,152,74,212,4,39,217,4,8,136,31,152,72,212,4,37, - 217,4,8,208,9,25,152,73,212,4,38,217,4,8,136,31, - 152,72,212,4,37,217,4,8,136,31,152,71,212,4,36,217, - 4,8,208,9,25,152,71,212,4,36,216,22,26,128,79,225, - 11,14,139,53,128,68,217,4,8,208,9,25,152,72,212,4, - 37,216,29,33,208,4,26,225,11,14,139,53,128,68,217,4, - 8,136,29,152,71,212,4,36,217,4,8,136,29,152,71,212, - 4,36,217,4,8,136,29,152,71,212,4,36,217,4,8,208, - 9,25,152,73,212,4,38,217,4,8,208,9,25,152,73,212, - 4,38,217,4,8,136,30,152,72,212,4,37,216,4,8,135, - 72,129,72,136,84,132,78,217,4,8,208,9,25,152,74,212, - 4,39,217,4,8,136,31,152,71,212,4,36,217,4,8,136, - 30,152,71,212,4,36,217,4,8,208,9,25,152,74,212,4, - 39,217,7,14,136,121,212,7,25,153,103,160,106,212,30,49, - 217,8,12,136,95,152,105,212,8,40,216,18,22,128,75,225, - 11,14,139,53,128,68,217,4,8,208,9,25,152,72,212,4, - 37,241,44,0,5,9,136,31,152,71,212,4,36,217,4,8, - 136,30,152,70,212,4,35,217,4,8,136,31,152,73,212,4, - 38,217,4,8,136,29,152,71,212,4,36,217,7,14,136,120, - 212,7,24,217,8,12,136,93,152,71,212,8,36,217,4,8, - 136,29,152,70,212,4,35,217,4,8,136,30,152,71,212,4, - 36,217,4,8,136,28,152,70,212,4,35,217,4,8,136,30, - 152,70,212,4,35,217,4,8,208,9,25,152,71,212,4,36, - 217,4,8,136,28,152,70,212,4,35,216,31,35,208,4,28, - 224,8,12,216,8,23,216,8,16,216,8,12,240,12,0,12, - 13,128,8,216,11,12,128,8,216,11,12,128,8,243,10,30, - 1,18,242,64,1,20,1,38,242,44,24,1,17,240,52,0, - 1,8,135,14,129,14,210,15,52,212,0,53,243,4,85,2, - 1,39,240,110,4,0,1,8,135,14,129,14,136,118,212,0, - 22,224,4,8,136,36,128,60,144,63,210,3,34,168,7,176, - 20,160,127,184,43,210,39,69,240,4,46,5,25,192,101,208, - 84,88,244,0,46,5,25,242,96,1,54,5,48,240,112,1, - 0,5,12,135,78,129,78,144,55,212,4,27,242,4,5,1, - 22,242,14,6,1,33,242,16,5,1,23,242,14,7,1,34, - 242,18,6,1,25,242,16,7,1,30,240,18,0,1,8,135, - 14,129,14,210,15,71,212,0,72,243,4,29,1,19,243,64, - 1,41,1,36,247,90,1,0,1,53,244,4,71,1,1,19, - 136,126,244,0,71,1,1,19,242,82,2,27,1,24,241,60, - 0,11,25,211,10,26,128,7,216,4,18,243,6,4,1,37, - 240,12,0,27,31,160,36,153,44,208,0,22,216,0,7,135, - 14,129,14,208,15,51,212,0,52,225,3,25,242,2,3,5, - 21,241,12,0,16,24,152,7,159,13,153,13,216,8,20,144, - 101,216,8,20,144,101,243,5,2,16,29,128,72,240,6,0, - 9,21,243,4,4,5,42,240,12,0,5,12,135,78,129,78, - 208,19,42,212,4,43,242,4,28,1,30,241,60,0,22,30, - 147,90,209,0,18,128,8,136,40,216,4,12,241,6,0,4, - 11,136,54,132,63,153,55,160,56,212,27,44,177,23,184,23, - 212,49,65,224,13,14,128,70,216,27,28,208,4,28,128,72, - 136,121,224,4,11,135,78,129,78,210,19,54,212,4,55,242, - 12,25,5,51,242,54,7,5,56,242,18,8,5,56,242,24, - 8,5,57,242,20,8,5,57,240,22,0,5,12,135,78,129, - 78,210,19,63,212,4,64,241,6,0,4,11,136,56,212,3, - 20,242,8,7,5,40,242,18,9,5,51,240,24,0,5,12, - 135,78,129,78,144,72,152,105,208,19,40,212,4,41,241,6, - 0,4,11,136,57,212,3,21,242,6,8,5,41,242,20,9, - 5,52,240,24,0,5,12,135,78,129,78,144,73,152,122,208, - 19,42,212,4,43,240,8,0,4,7,135,60,129,60,144,57, - 210,3,28,243,4,19,5,49,247,44,20,5,38,241,0,20, - 5,38,240,44,0,5,12,135,78,129,78,144,55,212,4,27, - 243,6,6,1,67,1,242,22,27,1,67,1,241,62,0,8, - 15,136,120,212,7,24,216,13,20,128,70,216,22,30,128,70, - 132,79,244,6,15,1,50,136,115,143,119,137,119,244,0,15, - 1,50,240,36,0,4,8,136,52,130,60,247,2,15,5,43, - 241,0,15,5,43,243,34,16,5,10,240,37,0,4,16,248, - 240,91,32,0,12,23,242,0,1,5,13,218,8,12,240,3, - 1,5,13,251,240,12,0,12,23,242,0,1,5,13,218,8, - 12,240,3,1,5,13,251,240,28,0,12,23,242,0,1,5, - 13,218,8,12,240,3,1,5,13,251,240,20,0,12,23,242, - 0,1,5,13,218,8,12,240,3,1,5,13,250,115,72,0, - 0,0,193,4,23,83,18,0,193,32,6,83,30,0,194,17, - 23,83,42,0,195,9,6,83,54,0,211,18,5,83,27,3, - 211,26,1,83,27,3,211,30,5,83,39,3,211,38,1,83, - 39,3,211,42,5,83,51,3,211,50,1,83,51,3,211,54, - 5,83,63,3,211,62,1,83,63,3, + 0,0,171,0,0,0,0,0,0,0,1,0,121,0,114,23, + 0,0,0,114,128,1,0,0,114,129,1,0,0,115,2,0, + 0,0,32,32,114,25,0,0,0,114,130,1,0,0,122,27, + 95,65,100,100,101,100,68,108,108,68,105,114,101,99,116,111, + 114,121,46,95,95,101,120,105,116,95,95,83,4,0,0,114, + 131,1,0,0,114,27,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,82, + 0,0,0,151,0,124,0,106,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,114,27,100,1,106, + 3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,124,0,106,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,171,1,0,0,0,0,0, + 0,83,0,121,2,41,3,78,122,25,60,65,100,100,101,100, + 68,108,108,68,105,114,101,99,116,111,114,121,40,123,33,114, + 125,41,62,122,21,60,65,100,100,101,100,68,108,108,68,105, + 114,101,99,116,111,114,121,40,41,62,41,2,114,12,0,0, + 0,114,147,1,0,0,114,3,1,0,0,115,1,0,0,0, + 32,114,25,0,0,0,114,11,1,0,0,122,27,95,65,100, + 100,101,100,68,108,108,68,105,114,101,99,116,111,114,121,46, + 95,95,114,101,112,114,95,95,85,4,0,0,115,33,0,0, + 0,128,0,216,15,19,143,121,138,121,216,23,50,215,23,57, + 209,23,57,184,36,191,41,185,41,211,23,68,208,16,68,216, + 19,42,114,27,0,0,0,78,41,8,114,29,1,0,0,114, + 30,1,0,0,114,31,1,0,0,114,241,0,0,0,114,171, + 0,0,0,114,125,1,0,0,114,130,1,0,0,114,11,1, + 0,0,114,16,1,0,0,114,27,0,0,0,114,25,0,0, + 0,114,166,1,0,0,114,166,1,0,0,73,4,0,0,115, + 27,0,0,0,132,0,242,2,3,9,62,242,8,2,9,29, + 242,6,1,9,24,242,4,1,9,25,243,4,3,9,43,114, + 27,0,0,0,114,166,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,92, + 0,0,0,151,0,100,1,100,2,108,0,125,1,2,0,124, + 1,106,2,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,124,0,171,1,0,0,0,0,0,0,125, + 2,116,5,0,0,0,0,0,0,0,0,124,0,124,2,124, + 1,106,6,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,171,3,0,0,0,0,0,0,83,0,41, + 3,97,79,1,0,0,65,100,100,32,97,32,112,97,116,104, + 32,116,111,32,116,104,101,32,68,76,76,32,115,101,97,114, + 99,104,32,112,97,116,104,46,10,10,32,32,32,32,32,32, + 32,32,84,104,105,115,32,115,101,97,114,99,104,32,112,97, + 116,104,32,105,115,32,117,115,101,100,32,119,104,101,110,32, + 114,101,115,111,108,118,105,110,103,32,100,101,112,101,110,100, + 101,110,99,105,101,115,32,102,111,114,32,105,109,112,111,114, + 116,101,100,10,32,32,32,32,32,32,32,32,101,120,116,101, + 110,115,105,111,110,32,109,111,100,117,108,101,115,32,40,116, + 104,101,32,109,111,100,117,108,101,32,105,116,115,101,108,102, + 32,105,115,32,114,101,115,111,108,118,101,100,32,116,104,114, + 111,117,103,104,32,115,121,115,46,112,97,116,104,41,44,10, + 32,32,32,32,32,32,32,32,97,110,100,32,97,108,115,111, + 32,98,121,32,99,116,121,112,101,115,46,10,10,32,32,32, + 32,32,32,32,32,82,101,109,111,118,101,32,116,104,101,32, + 100,105,114,101,99,116,111,114,121,32,98,121,32,99,97,108, + 108,105,110,103,32,99,108,111,115,101,40,41,32,111,110,32, + 116,104,101,32,114,101,116,117,114,110,101,100,32,111,98,106, + 101,99,116,32,111,114,10,32,32,32,32,32,32,32,32,117, + 115,105,110,103,32,105,116,32,105,110,32,97,32,119,105,116, + 104,32,115,116,97,116,101,109,101,110,116,46,10,32,32,32, + 32,32,32,32,32,114,2,0,0,0,78,41,4,114,42,0, + 0,0,218,18,95,97,100,100,95,100,108,108,95,100,105,114, + 101,99,116,111,114,121,114,166,1,0,0,114,169,1,0,0, + 41,3,114,12,0,0,0,114,42,0,0,0,114,170,1,0, + 0,115,3,0,0,0,32,32,32,114,25,0,0,0,218,17, + 97,100,100,95,100,108,108,95,100,105,114,101,99,116,111,114, + 121,114,178,1,0,0,90,4,0,0,115,53,0,0,0,128, + 0,243,20,0,9,18,216,17,38,144,18,215,17,38,209,17, + 38,160,116,211,17,44,136,6,220,15,33,216,12,16,216,12, + 18,216,12,14,215,12,36,209,12,36,243,7,4,16,10,240, + 0,4,9,10,114,27,0,0,0,41,2,105,255,1,0,0, + 70,41,3,84,78,70,41,3,250,1,46,84,78,114,23,0, + 0,0,41,2,114,100,1,0,0,114,190,0,0,0,41,3, + 114,100,1,0,0,114,190,0,0,0,78,41,105,114,159,1, + 0,0,114,160,1,0,0,114,130,0,0,0,114,57,0,0, + 0,114,166,0,0,0,218,16,95,99,111,108,108,101,99,116, + 105,111,110,115,95,97,98,99,114,3,0,0,0,114,35,1, + 0,0,114,30,0,0,0,114,139,1,0,0,114,163,1,0, + 0,218,20,98,117,105,108,116,105,110,95,109,111,100,117,108, + 101,95,110,97,109,101,115,218,6,95,110,97,109,101,115,114, + 31,0,0,0,114,26,0,0,0,114,36,0,0,0,114,11, + 0,0,0,114,9,0,0,0,114,37,0,0,0,114,40,0, + 0,0,114,140,0,0,0,218,11,73,109,112,111,114,116,69, + 114,114,111,114,218,9,112,111,115,105,120,112,97,116,104,114, + 12,0,0,0,114,41,0,0,0,218,6,101,120,116,101,110, + 100,114,42,0,0,0,218,6,110,116,112,97,116,104,218,7, + 109,111,100,117,108,101,115,218,7,111,115,46,112,97,116,104, + 114,5,0,0,0,114,6,0,0,0,114,7,0,0,0,114, + 8,0,0,0,114,10,0,0,0,114,21,0,0,0,114,4, + 0,0,0,114,13,0,0,0,114,24,0,0,0,114,44,0, + 0,0,114,49,0,0,0,218,3,115,101,116,114,45,0,0, + 0,218,15,115,117,112,112,111,114,116,115,95,100,105,114,95, + 102,100,218,22,115,117,112,112,111,114,116,115,95,101,102,102, + 101,99,116,105,118,101,95,105,100,115,114,46,0,0,0,218, + 11,115,117,112,112,111,114,116,115,95,102,100,218,24,115,117, + 112,112,111,114,116,115,95,102,111,108,108,111,119,95,115,121, + 109,108,105,110,107,115,114,14,0,0,0,114,15,0,0,0, + 114,16,0,0,0,114,113,0,0,0,114,124,0,0,0,114, + 128,0,0,0,114,158,0,0,0,114,69,0,0,0,114,86, + 0,0,0,114,174,0,0,0,114,170,0,0,0,114,188,0, + 0,0,114,193,0,0,0,114,196,0,0,0,114,199,0,0, + 0,114,195,0,0,0,114,198,0,0,0,114,202,0,0,0, + 114,19,0,0,0,114,229,0,0,0,114,230,0,0,0,114, + 232,0,0,0,114,48,1,0,0,114,205,0,0,0,114,52, + 1,0,0,114,225,0,0,0,114,54,1,0,0,114,238,0, + 0,0,114,116,0,0,0,114,56,1,0,0,114,57,1,0, + 0,114,65,1,0,0,114,17,0,0,0,114,18,0,0,0, + 114,68,1,0,0,114,69,1,0,0,114,70,1,0,0,114, + 80,1,0,0,114,67,1,0,0,114,85,1,0,0,114,87, + 1,0,0,114,89,1,0,0,114,91,1,0,0,114,93,1, + 0,0,114,95,1,0,0,114,97,1,0,0,218,8,112,108, + 97,116,102,111,114,109,114,114,1,0,0,114,110,1,0,0, + 114,20,0,0,0,114,150,1,0,0,114,132,0,0,0,114, + 29,1,0,0,218,3,65,66,67,114,152,1,0,0,114,166, + 1,0,0,114,178,1,0,0,114,16,1,0,0,114,27,0, + 0,0,114,25,0,0,0,250,8,60,109,111,100,117,108,101, + 62,114,196,1,0,0,1,0,0,0,115,232,5,0,0,240, + 3,1,1,1,241,2,21,1,4,243,48,0,1,11,219,0, + 10,219,0,17,229,0,43,225,15,19,144,68,152,19,145,73, + 139,127,128,12,224,9,12,215,9,33,209,9,33,128,6,242, + 6,3,11,21,128,7,242,10,1,1,29,242,6,4,1,55, + 240,16,0,4,11,136,102,209,3,20,216,11,18,128,68,216, + 14,18,128,71,220,4,23,240,2,4,5,13,221,8,31,216, + 8,15,143,14,137,14,144,119,212,8,31,243,6,0,5,29, + 240,4,3,5,13,221,8,41,243,8,0,5,17,216,4,11, + 135,78,129,78,209,19,36,160,85,211,19,43,212,4,44,217, + 8,13,224,5,9,136,86,129,94,216,11,15,128,68,216,14, + 20,128,71,220,4,20,240,2,4,5,13,221,8,28,216,8, + 15,143,14,137,14,144,119,212,8,31,243,6,0,5,26,227, + 4,13,216,4,11,135,78,129,78,209,19,36,160,82,211,19, + 40,212,4,41,216,8,10,240,4,3,5,13,222,8,38,241, + 10,0,11,22,208,22,51,211,10,52,208,4,52,224,25,29, + 128,3,135,11,129,11,136,73,209,0,22,247,2,1,1,13, + 247,0,1,1,13,243,0,1,1,13,240,6,0,5,11,241, + 6,0,4,11,208,11,28,213,3,29,217,15,22,139,121,128, + 72,242,2,2,5,35,241,8,0,12,15,139,53,128,68,217, + 4,8,208,9,25,152,72,212,4,37,217,4,8,136,31,152, + 71,212,4,36,217,4,8,136,31,152,71,212,4,36,217,4, + 8,136,30,152,70,212,4,35,217,4,8,208,9,25,152,71, + 212,4,36,217,4,8,136,29,152,70,212,4,35,217,4,8, + 136,30,152,71,212,4,36,217,4,8,136,31,152,72,212,4, + 37,217,4,8,136,30,152,71,212,4,36,217,4,8,136,29, + 152,70,212,4,35,217,4,8,208,9,26,152,74,212,4,39, + 217,4,8,136,31,152,72,212,4,37,217,4,8,208,9,25, + 152,73,212,4,38,217,4,8,136,31,152,72,212,4,37,217, + 4,8,136,31,152,71,212,4,36,217,4,8,208,9,25,152, + 71,212,4,36,216,22,26,128,79,225,11,14,139,53,128,68, + 217,4,8,208,9,25,152,72,212,4,37,216,29,33,208,4, + 26,225,11,14,139,53,128,68,217,4,8,136,29,152,71,212, + 4,36,217,4,8,136,29,152,71,212,4,36,217,4,8,136, + 29,152,71,212,4,36,217,4,8,208,9,25,152,73,212,4, + 38,217,4,8,208,9,25,152,73,212,4,38,217,4,8,136, + 30,152,72,212,4,37,216,4,8,135,72,129,72,136,84,132, + 78,217,4,8,208,9,25,152,74,212,4,39,217,4,8,136, + 31,152,71,212,4,36,217,4,8,136,30,152,71,212,4,36, + 217,4,8,208,9,25,152,74,212,4,39,217,7,14,136,121, + 212,7,25,153,103,160,106,212,30,49,217,8,12,136,95,152, + 105,212,8,40,216,18,22,128,75,225,11,14,139,53,128,68, + 217,4,8,208,9,25,152,72,212,4,37,241,44,0,5,9, + 136,31,152,71,212,4,36,217,4,8,136,30,152,70,212,4, + 35,217,4,8,136,31,152,73,212,4,38,217,4,8,136,29, + 152,71,212,4,36,217,7,14,136,120,212,7,24,217,8,12, + 136,93,152,71,212,8,36,217,4,8,136,29,152,70,212,4, + 35,217,4,8,136,30,152,71,212,4,36,217,4,8,136,28, + 152,70,212,4,35,217,4,8,136,30,152,70,212,4,35,217, + 4,8,208,9,25,152,71,212,4,36,217,4,8,136,28,152, + 70,212,4,35,216,31,35,208,4,28,224,8,12,216,8,23, + 216,8,16,216,8,12,240,12,0,12,13,128,8,216,11,12, + 128,8,216,11,12,128,8,243,10,30,1,18,242,64,1,20, + 1,38,242,44,24,1,17,240,52,0,1,8,135,14,129,14, + 210,15,52,212,0,53,243,4,85,2,1,39,240,110,4,0, + 1,8,135,14,129,14,136,118,212,0,22,224,4,8,136,36, + 128,60,144,63,210,3,34,168,7,176,20,160,127,184,43,210, + 39,69,240,4,46,5,25,192,101,208,84,88,244,0,46,5, + 25,242,96,1,54,5,48,240,112,1,0,5,12,135,78,129, + 78,144,55,212,4,27,242,4,5,1,22,242,14,6,1,33, + 242,16,5,1,23,242,14,7,1,34,242,18,6,1,25,242, + 16,7,1,30,240,18,0,1,8,135,14,129,14,210,15,71, + 212,0,72,243,4,29,1,19,243,64,1,41,1,36,247,90, + 1,0,1,53,244,4,71,1,1,19,136,126,244,0,71,1, + 1,19,242,82,2,27,1,24,241,60,0,11,25,211,10,26, + 128,7,216,4,18,243,6,4,1,37,240,12,0,27,31,160, + 36,153,44,208,0,22,216,0,7,135,14,129,14,208,15,51, + 212,0,52,225,3,25,242,2,3,5,21,241,12,0,16,24, + 152,7,159,13,153,13,216,8,20,144,101,216,8,20,144,101, + 243,5,2,16,29,128,72,240,6,0,9,21,243,4,4,5, + 42,240,12,0,5,12,135,78,129,78,208,19,42,212,4,43, + 242,4,28,1,30,241,60,0,22,30,147,90,209,0,18,128, + 8,136,40,216,4,12,241,6,0,4,11,136,54,132,63,153, + 55,160,56,212,27,44,177,23,184,23,212,49,65,224,13,14, + 128,70,216,27,28,208,4,28,128,72,136,121,224,4,11,135, + 78,129,78,210,19,54,212,4,55,242,12,25,5,51,242,54, + 7,5,56,242,18,8,5,56,242,24,8,5,57,242,20,8, + 5,57,240,22,0,5,12,135,78,129,78,210,19,63,212,4, + 64,241,6,0,4,11,136,56,212,3,20,242,8,7,5,40, + 242,18,9,5,51,240,24,0,5,12,135,78,129,78,144,72, + 152,105,208,19,40,212,4,41,241,6,0,4,11,136,57,212, + 3,21,242,6,8,5,41,242,20,9,5,52,240,24,0,5, + 12,135,78,129,78,144,73,152,122,208,19,42,212,4,43,240, + 8,0,4,7,135,60,129,60,144,57,210,3,28,243,4,19, + 5,49,247,44,20,5,38,241,0,20,5,38,240,44,0,5, + 12,135,78,129,78,144,55,212,4,27,243,6,6,1,67,1, + 242,22,27,1,67,1,241,62,0,8,15,136,120,212,7,24, + 216,13,20,128,70,216,22,30,128,70,132,79,244,6,15,1, + 50,136,115,143,119,137,119,244,0,15,1,50,240,36,0,4, + 8,136,52,130,60,247,2,15,5,43,241,0,15,5,43,243, + 34,16,5,10,240,37,0,4,16,248,240,91,32,0,12,23, + 242,0,1,5,13,218,8,12,240,3,1,5,13,251,240,12, + 0,12,23,242,0,1,5,13,218,8,12,240,3,1,5,13, + 251,240,28,0,12,23,242,0,1,5,13,218,8,12,240,3, + 1,5,13,251,240,20,0,12,23,242,0,1,5,13,218,8, + 12,240,3,1,5,13,250,115,72,0,0,0,193,4,23,83, + 18,0,193,32,6,83,30,0,194,17,23,83,42,0,195,9, + 6,83,54,0,211,18,5,83,27,3,211,26,1,83,27,3, + 211,30,5,83,39,3,211,38,1,83,39,3,211,42,5,83, + 51,3,211,50,1,83,51,3,211,54,5,83,63,3,211,62, + 1,83,63,3, }; diff --git a/contrib/tools/python3/Python/frozen_modules/zipimport.h b/contrib/tools/python3/Python/frozen_modules/zipimport.h index 5f2f63046d..410568b301 100644 --- a/contrib/tools/python3/Python/frozen_modules/zipimport.h +++ b/contrib/tools/python3/Python/frozen_modules/zipimport.h @@ -1385,147 +1385,147 @@ const unsigned char _Py_M__zipimport[] = { 182,0,0,0,114,183,0,0,0,218,17,117,110,99,111,109, 112,114,101,115,115,101,100,95,115,105,122,101,115,6,0,0, 0,32,32,32,32,32,32,114,13,0,0,0,114,218,0,0, - 0,114,218,0,0,0,142,2,0,0,115,123,0,0,0,128, + 0,114,218,0,0,0,142,2,0,0,115,126,0,0,0,128, 0,240,2,12,5,20,224,15,19,144,66,144,67,136,121,152, - 74,209,15,38,209,8,38,216,15,19,144,67,144,82,136,121, - 136,4,216,20,24,151,75,145,75,160,4,209,20,37,136,9, - 240,6,0,16,25,152,17,137,124,136,4,216,15,24,152,17, - 137,124,136,4,216,28,37,160,97,153,76,208,8,25,220,15, - 29,152,100,160,68,211,15,41,208,43,60,208,15,60,208,8, - 60,248,220,12,20,148,106,164,41,208,11,44,242,0,1,5, - 20,217,15,19,240,3,1,5,20,250,115,15,0,0,0,130, - 57,60,0,188,20,65,19,3,193,18,1,65,19,3,99,2, - 0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,3, - 0,0,0,243,136,0,0,0,151,0,124,1,100,1,100,0, - 26,0,100,2,118,0,115,2,74,0,130,1,124,1,100,0, - 100,1,26,0,125,1,9,0,124,0,106,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,124,1, - 25,0,0,0,125,2,116,3,0,0,0,0,0,0,0,0, - 124,0,106,4,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,124,2,171,2,0,0,0,0,0,0, - 83,0,35,0,116,6,0,0,0,0,0,0,0,0,36,0, - 114,3,1,0,89,0,121,0,119,0,120,3,89,0,119,1, - 41,3,78,114,19,0,0,0,114,249,0,0,0,41,4,114, - 37,0,0,0,114,75,0,0,0,114,38,0,0,0,114,35, - 0,0,0,41,3,114,41,0,0,0,114,18,0,0,0,114, - 78,0,0,0,115,3,0,0,0,32,32,32,114,13,0,0, - 0,114,214,0,0,0,114,214,0,0,0,161,2,0,0,115, - 88,0,0,0,128,0,224,11,15,144,2,144,3,136,57,152, - 10,209,11,34,209,4,34,216,11,15,144,3,144,18,136,57, - 128,68,240,4,5,5,50,216,20,24,151,75,145,75,160,4, - 209,20,37,136,9,244,8,0,16,25,152,20,159,28,153,28, - 160,121,211,15,49,208,8,49,248,244,7,0,12,20,242,0, - 1,5,20,217,15,19,240,3,1,5,20,250,115,15,0,0, - 0,144,15,53,0,181,9,65,1,3,193,0,1,65,1,3, - 99,2,0,0,0,0,0,0,0,0,0,0,0,8,0,0, - 0,3,0,0,0,243,226,1,0,0,151,0,116,1,0,0, - 0,0,0,0,0,0,124,0,124,1,171,2,0,0,0,0, - 0,0,125,2,100,0,125,3,116,2,0,0,0,0,0,0, - 0,0,68,0,93,141,0,0,92,3,0,0,125,4,125,5, - 125,6,124,2,124,4,122,0,0,0,125,7,116,5,0,0, - 0,0,0,0,0,0,106,6,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,100,1,124,0,106,8, + 74,209,15,38,208,8,38,208,15,38,216,15,19,144,67,144, + 82,136,121,136,4,216,20,24,151,75,145,75,160,4,209,20, + 37,136,9,240,6,0,16,25,152,17,137,124,136,4,216,15, + 24,152,17,137,124,136,4,216,28,37,160,97,153,76,208,8, + 25,220,15,29,152,100,160,68,211,15,41,208,43,60,208,15, + 60,208,8,60,248,220,12,20,148,106,164,41,208,11,44,242, + 0,1,5,20,217,15,19,240,3,1,5,20,250,115,15,0, + 0,0,130,57,60,0,188,20,65,19,3,193,18,1,65,19, + 3,99,2,0,0,0,0,0,0,0,0,0,0,0,4,0, + 0,0,3,0,0,0,243,136,0,0,0,151,0,124,1,100, + 1,100,0,26,0,100,2,118,0,115,2,74,0,130,1,124, + 1,100,0,100,1,26,0,125,1,9,0,124,0,106,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,124,1,25,0,0,0,125,2,116,3,0,0,0,0,0, + 0,0,0,124,0,106,4,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,124,2,171,2,0,0,0, + 0,0,0,83,0,35,0,116,6,0,0,0,0,0,0,0, + 0,36,0,114,3,1,0,89,0,121,0,119,0,120,3,89, + 0,119,1,41,3,78,114,19,0,0,0,114,249,0,0,0, + 41,4,114,37,0,0,0,114,75,0,0,0,114,38,0,0, + 0,114,35,0,0,0,41,3,114,41,0,0,0,114,18,0, + 0,0,114,78,0,0,0,115,3,0,0,0,32,32,32,114, + 13,0,0,0,114,214,0,0,0,114,214,0,0,0,161,2, + 0,0,115,91,0,0,0,128,0,224,11,15,144,2,144,3, + 136,57,152,10,209,11,34,208,4,34,208,11,34,216,11,15, + 144,3,144,18,136,57,128,68,240,4,5,5,50,216,20,24, + 151,75,145,75,160,4,209,20,37,136,9,244,8,0,16,25, + 152,20,159,28,153,28,160,121,211,15,49,208,8,49,248,244, + 7,0,12,20,242,0,1,5,20,217,15,19,240,3,1,5, + 20,250,115,15,0,0,0,144,15,53,0,181,9,65,1,3, + 193,0,1,65,1,3,99,2,0,0,0,0,0,0,0,0, + 0,0,0,8,0,0,0,3,0,0,0,243,226,1,0,0, + 151,0,116,1,0,0,0,0,0,0,0,0,124,0,124,1, + 171,2,0,0,0,0,0,0,125,2,100,0,125,3,116,2, + 0,0,0,0,0,0,0,0,68,0,93,141,0,0,92,3, + 0,0,125,4,125,5,125,6,124,2,124,4,122,0,0,0, + 125,7,116,5,0,0,0,0,0,0,0,0,106,6,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,116,10,0,0,0,0,0,0,0,0,124,7,100,2, - 172,3,171,5,0,0,0,0,0,0,1,0,9,0,124,0, - 106,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,124,7,25,0,0,0,125,8,124,8,100,4, - 25,0,0,0,125,9,116,15,0,0,0,0,0,0,0,0, - 124,0,106,8,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,124,8,171,2,0,0,0,0,0,0, - 125,10,100,0,125,11,124,5,114,17,9,0,116,17,0,0, - 0,0,0,0,0,0,124,0,124,9,124,7,124,1,124,10, - 171,5,0,0,0,0,0,0,125,11,110,12,116,21,0,0, - 0,0,0,0,0,0,124,9,124,10,171,2,0,0,0,0, - 0,0,125,11,124,11,128,1,140,131,124,8,100,4,25,0, - 0,0,125,9,124,11,124,6,124,9,102,3,99,2,1,0, - 83,0,4,0,124,3,114,19,100,5,124,3,155,0,157,2, - 125,13,116,25,0,0,0,0,0,0,0,0,124,13,124,1, - 172,6,171,2,0,0,0,0,0,0,124,3,130,2,116,25, - 0,0,0,0,0,0,0,0,100,7,124,1,155,2,157,2, - 124,1,172,6,171,2,0,0,0,0,0,0,130,1,35,0, - 116,18,0,0,0,0,0,0,0,0,36,0,114,12,125,12, - 124,12,125,3,89,0,100,0,125,12,126,12,140,69,100,0, - 125,12,126,12,119,1,119,0,120,3,89,0,119,1,35,0, - 116,22,0,0,0,0,0,0,0,0,36,0,114,3,1,0, - 89,0,140,216,119,0,120,3,89,0,119,1,41,8,78,122, - 13,116,114,121,105,110,103,32,123,125,123,125,123,125,114,126, - 0,0,0,41,1,218,9,118,101,114,98,111,115,105,116,121, - 114,1,0,0,0,122,20,109,111,100,117,108,101,32,108,111, - 97,100,32,102,97,105,108,101,100,58,32,114,84,0,0,0, - 114,83,0,0,0,41,13,114,54,0,0,0,114,131,0,0, - 0,114,52,0,0,0,114,108,0,0,0,114,38,0,0,0, - 114,26,0,0,0,114,37,0,0,0,114,75,0,0,0,114, - 228,0,0,0,114,107,0,0,0,114,237,0,0,0,114,35, - 0,0,0,114,4,0,0,0,41,14,114,41,0,0,0,114, - 58,0,0,0,114,18,0,0,0,218,12,105,109,112,111,114, - 116,95,101,114,114,111,114,114,132,0,0,0,114,133,0,0, - 0,114,69,0,0,0,114,89,0,0,0,114,78,0,0,0, - 114,61,0,0,0,114,174,0,0,0,114,68,0,0,0,218, - 3,101,120,99,114,109,0,0,0,115,14,0,0,0,32,32, - 32,32,32,32,32,32,32,32,32,32,32,32,114,13,0,0, - 0,114,66,0,0,0,114,66,0,0,0,176,2,0,0,115, - 41,1,0,0,128,0,220,11,27,152,68,160,40,211,11,43, - 128,68,216,19,23,128,76,220,41,57,242,0,29,5,83,1, - 209,8,37,136,6,144,10,152,73,216,19,23,152,38,145,61, - 136,8,220,8,18,215,8,35,209,8,35,160,79,176,84,183, - 92,177,92,196,56,200,88,208,97,98,213,8,99,240,2,20, - 9,44,216,24,28,159,11,153,11,160,72,209,24,45,136,73, - 240,8,0,23,32,160,1,145,108,136,71,220,19,28,152,84, - 159,92,153,92,168,57,211,19,53,136,68,216,19,23,136,68, - 217,15,25,240,2,3,17,39,220,27,42,168,52,176,23,184, - 40,192,72,200,100,211,27,83,145,68,244,8,0,24,39,160, - 119,176,4,211,23,53,144,4,216,15,19,136,124,240,6,0, - 17,25,216,22,31,160,1,145,108,136,71,216,19,23,152,25, - 160,71,208,19,43,210,12,43,240,47,29,5,83,1,241,50, - 0,12,24,216,20,40,168,28,168,14,208,18,55,136,67,220, - 18,32,160,19,168,56,212,18,52,184,44,208,12,70,228,18, - 32,208,35,53,176,104,176,92,208,33,66,200,24,212,18,82, - 208,12,82,248,244,31,0,24,35,242,0,1,17,39,216,35, - 38,149,76,251,240,3,1,17,39,251,244,19,0,16,24,242, - 0,1,9,17,217,12,16,240,3,1,9,17,250,115,42,0, - 0,0,193,10,15,67,34,2,193,57,15,67,10,2,195,10, - 9,67,31,5,195,19,2,67,26,5,195,26,5,67,31,5, - 195,34,9,67,46,5,195,45,1,67,46,5,41,46,114,123, - 0,0,0,218,26,95,102,114,111,122,101,110,95,105,109,112, - 111,114,116,108,105,98,95,101,120,116,101,114,110,97,108,114, - 27,0,0,0,114,2,0,0,0,114,3,0,0,0,218,17, - 95,102,114,111,122,101,110,95,105,109,112,111,114,116,108,105, - 98,114,52,0,0,0,114,212,0,0,0,114,154,0,0,0, - 114,219,0,0,0,114,97,0,0,0,114,182,0,0,0,114, - 94,0,0,0,218,7,95,95,97,108,108,95,95,114,26,0, - 0,0,218,15,112,97,116,104,95,115,101,112,97,114,97,116, - 111,114,115,114,24,0,0,0,114,107,0,0,0,114,4,0, - 0,0,114,34,0,0,0,114,23,0,0,0,114,100,0,0, - 0,114,158,0,0,0,114,160,0,0,0,114,162,0,0,0, - 218,13,95,76,111,97,100,101,114,66,97,115,105,99,115,114, - 5,0,0,0,114,131,0,0,0,114,54,0,0,0,114,55, - 0,0,0,114,51,0,0,0,114,36,0,0,0,114,167,0, - 0,0,114,195,0,0,0,114,198,0,0,0,114,75,0,0, - 0,114,207,0,0,0,114,228,0,0,0,218,8,95,95,99, - 111,100,101,95,95,114,221,0,0,0,114,233,0,0,0,114, - 237,0,0,0,114,247,0,0,0,114,218,0,0,0,114,214, - 0,0,0,114,66,0,0,0,114,11,0,0,0,114,12,0, - 0,0,114,13,0,0,0,250,8,60,109,111,100,117,108,101, - 62,114,11,1,0,0,1,0,0,0,115,51,1,0,0,240, - 3,1,1,1,241,2,12,1,4,243,32,0,1,57,223,0, - 69,219,0,38,219,0,11,219,0,10,219,0,14,219,0,10, - 219,0,11,219,0,16,224,11,27,152,93,208,10,43,128,7, - 240,6,0,12,31,215,11,39,209,11,39,128,8,216,15,34, - 215,15,50,209,15,50,176,49,176,50,208,15,54,128,12,244, - 6,1,1,9,144,91,244,0,1,1,9,240,8,0,24,26, - 208,0,20,225,15,19,144,67,139,121,128,12,224,23,25,208, - 0,20,216,21,34,208,0,18,216,18,31,128,15,244,4,108, - 3,1,79,1,208,18,37,215,18,51,209,18,51,244,0,108, - 3,1,79,1,240,106,7,0,6,14,144,14,209,5,30,160, - 4,160,100,208,4,43,216,5,13,144,13,209,5,29,152,117, - 160,100,208,4,43,216,4,25,216,4,25,240,9,5,20,2, - 208,0,16,242,18,1,1,53,242,8,6,1,34,242,18,6, - 1,16,242,62,123,1,1,17,240,74,4,24,5,47,240,5, - 0,1,12,240,58,0,19,24,128,15,242,10,18,1,22,242, - 42,40,1,37,242,92,1,2,1,29,242,16,38,1,16,241, - 80,1,0,14,18,144,47,215,18,42,209,18,42,211,13,43, - 128,10,242,10,3,1,18,242,14,2,1,64,1,242,12,8, - 1,21,242,26,13,1,20,242,38,10,1,50,243,30,32,1, - 83,1,114,12,0,0,0, + 100,1,124,0,106,8,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,116,10,0,0,0,0,0,0, + 0,0,124,7,100,2,172,3,171,5,0,0,0,0,0,0, + 1,0,9,0,124,0,106,12,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,124,7,25,0,0,0, + 125,8,124,8,100,4,25,0,0,0,125,9,116,15,0,0, + 0,0,0,0,0,0,124,0,106,8,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,124,8,171,2, + 0,0,0,0,0,0,125,10,100,0,125,11,124,5,114,17, + 9,0,116,17,0,0,0,0,0,0,0,0,124,0,124,9, + 124,7,124,1,124,10,171,5,0,0,0,0,0,0,125,11, + 110,12,116,21,0,0,0,0,0,0,0,0,124,9,124,10, + 171,2,0,0,0,0,0,0,125,11,124,11,128,1,140,131, + 124,8,100,4,25,0,0,0,125,9,124,11,124,6,124,9, + 102,3,99,2,1,0,83,0,4,0,124,3,114,19,100,5, + 124,3,155,0,157,2,125,13,116,25,0,0,0,0,0,0, + 0,0,124,13,124,1,172,6,171,2,0,0,0,0,0,0, + 124,3,130,2,116,25,0,0,0,0,0,0,0,0,100,7, + 124,1,155,2,157,2,124,1,172,6,171,2,0,0,0,0, + 0,0,130,1,35,0,116,18,0,0,0,0,0,0,0,0, + 36,0,114,12,125,12,124,12,125,3,89,0,100,0,125,12, + 126,12,140,69,100,0,125,12,126,12,119,1,119,0,120,3, + 89,0,119,1,35,0,116,22,0,0,0,0,0,0,0,0, + 36,0,114,3,1,0,89,0,140,216,119,0,120,3,89,0, + 119,1,41,8,78,122,13,116,114,121,105,110,103,32,123,125, + 123,125,123,125,114,126,0,0,0,41,1,218,9,118,101,114, + 98,111,115,105,116,121,114,1,0,0,0,122,20,109,111,100, + 117,108,101,32,108,111,97,100,32,102,97,105,108,101,100,58, + 32,114,84,0,0,0,114,83,0,0,0,41,13,114,54,0, + 0,0,114,131,0,0,0,114,52,0,0,0,114,108,0,0, + 0,114,38,0,0,0,114,26,0,0,0,114,37,0,0,0, + 114,75,0,0,0,114,228,0,0,0,114,107,0,0,0,114, + 237,0,0,0,114,35,0,0,0,114,4,0,0,0,41,14, + 114,41,0,0,0,114,58,0,0,0,114,18,0,0,0,218, + 12,105,109,112,111,114,116,95,101,114,114,111,114,114,132,0, + 0,0,114,133,0,0,0,114,69,0,0,0,114,89,0,0, + 0,114,78,0,0,0,114,61,0,0,0,114,174,0,0,0, + 114,68,0,0,0,218,3,101,120,99,114,109,0,0,0,115, + 14,0,0,0,32,32,32,32,32,32,32,32,32,32,32,32, + 32,32,114,13,0,0,0,114,66,0,0,0,114,66,0,0, + 0,176,2,0,0,115,41,1,0,0,128,0,220,11,27,152, + 68,160,40,211,11,43,128,68,216,19,23,128,76,220,41,57, + 242,0,29,5,83,1,209,8,37,136,6,144,10,152,73,216, + 19,23,152,38,145,61,136,8,220,8,18,215,8,35,209,8, + 35,160,79,176,84,183,92,177,92,196,56,200,88,208,97,98, + 213,8,99,240,2,20,9,44,216,24,28,159,11,153,11,160, + 72,209,24,45,136,73,240,8,0,23,32,160,1,145,108,136, + 71,220,19,28,152,84,159,92,153,92,168,57,211,19,53,136, + 68,216,19,23,136,68,217,15,25,240,2,3,17,39,220,27, + 42,168,52,176,23,184,40,192,72,200,100,211,27,83,145,68, + 244,8,0,24,39,160,119,176,4,211,23,53,144,4,216,15, + 19,136,124,240,6,0,17,25,216,22,31,160,1,145,108,136, + 71,216,19,23,152,25,160,71,208,19,43,210,12,43,240,47, + 29,5,83,1,241,50,0,12,24,216,20,40,168,28,168,14, + 208,18,55,136,67,220,18,32,160,19,168,56,212,18,52,184, + 44,208,12,70,228,18,32,208,35,53,176,104,176,92,208,33, + 66,200,24,212,18,82,208,12,82,248,244,31,0,24,35,242, + 0,1,17,39,216,35,38,149,76,251,240,3,1,17,39,251, + 244,19,0,16,24,242,0,1,9,17,217,12,16,240,3,1, + 9,17,250,115,42,0,0,0,193,10,15,67,34,2,193,57, + 15,67,10,2,195,10,9,67,31,5,195,19,2,67,26,5, + 195,26,5,67,31,5,195,34,9,67,46,5,195,45,1,67, + 46,5,41,46,114,123,0,0,0,218,26,95,102,114,111,122, + 101,110,95,105,109,112,111,114,116,108,105,98,95,101,120,116, + 101,114,110,97,108,114,27,0,0,0,114,2,0,0,0,114, + 3,0,0,0,218,17,95,102,114,111,122,101,110,95,105,109, + 112,111,114,116,108,105,98,114,52,0,0,0,114,212,0,0, + 0,114,154,0,0,0,114,219,0,0,0,114,97,0,0,0, + 114,182,0,0,0,114,94,0,0,0,218,7,95,95,97,108, + 108,95,95,114,26,0,0,0,218,15,112,97,116,104,95,115, + 101,112,97,114,97,116,111,114,115,114,24,0,0,0,114,107, + 0,0,0,114,4,0,0,0,114,34,0,0,0,114,23,0, + 0,0,114,100,0,0,0,114,158,0,0,0,114,160,0,0, + 0,114,162,0,0,0,218,13,95,76,111,97,100,101,114,66, + 97,115,105,99,115,114,5,0,0,0,114,131,0,0,0,114, + 54,0,0,0,114,55,0,0,0,114,51,0,0,0,114,36, + 0,0,0,114,167,0,0,0,114,195,0,0,0,114,198,0, + 0,0,114,75,0,0,0,114,207,0,0,0,114,228,0,0, + 0,218,8,95,95,99,111,100,101,95,95,114,221,0,0,0, + 114,233,0,0,0,114,237,0,0,0,114,247,0,0,0,114, + 218,0,0,0,114,214,0,0,0,114,66,0,0,0,114,11, + 0,0,0,114,12,0,0,0,114,13,0,0,0,250,8,60, + 109,111,100,117,108,101,62,114,11,1,0,0,1,0,0,0, + 115,51,1,0,0,240,3,1,1,1,241,2,12,1,4,243, + 32,0,1,57,223,0,69,219,0,38,219,0,11,219,0,10, + 219,0,14,219,0,10,219,0,11,219,0,16,224,11,27,152, + 93,208,10,43,128,7,240,6,0,12,31,215,11,39,209,11, + 39,128,8,216,15,34,215,15,50,209,15,50,176,49,176,50, + 208,15,54,128,12,244,6,1,1,9,144,91,244,0,1,1, + 9,240,8,0,24,26,208,0,20,225,15,19,144,67,139,121, + 128,12,224,23,25,208,0,20,216,21,34,208,0,18,216,18, + 31,128,15,244,4,108,3,1,79,1,208,18,37,215,18,51, + 209,18,51,244,0,108,3,1,79,1,240,106,7,0,6,14, + 144,14,209,5,30,160,4,160,100,208,4,43,216,5,13,144, + 13,209,5,29,152,117,160,100,208,4,43,216,4,25,216,4, + 25,240,9,5,20,2,208,0,16,242,18,1,1,53,242,8, + 6,1,34,242,18,6,1,16,242,62,123,1,1,17,240,74, + 4,24,5,47,240,5,0,1,12,240,58,0,19,24,128,15, + 242,10,18,1,22,242,42,40,1,37,242,92,1,2,1,29, + 242,16,38,1,16,241,80,1,0,14,18,144,47,215,18,42, + 209,18,42,211,13,43,128,10,242,10,3,1,18,242,14,2, + 1,64,1,242,12,8,1,21,242,26,13,1,20,242,38,10, + 1,50,243,30,32,1,83,1,114,12,0,0,0, }; diff --git a/contrib/tools/python3/Python/generated_cases.c.h b/contrib/tools/python3/Python/generated_cases.c.h index ea17c0410b..d5e3ce28ce 100644 --- a/contrib/tools/python3/Python/generated_cases.c.h +++ b/contrib/tools/python3/Python/generated_cases.c.h @@ -4433,27 +4433,27 @@ } assert(PyTuple_CheckExact(callargs)); EVAL_CALL_STAT_INC_IF_FUNCTION(EVAL_CALL_FUNCTION_EX, func); - if (opcode == INSTRUMENTED_CALL_FUNCTION_EX && - !PyFunction_Check(func) && !PyMethod_Check(func) - ) { + if (opcode == INSTRUMENTED_CALL_FUNCTION_EX) { PyObject *arg = PyTuple_GET_SIZE(callargs) > 0 ? - PyTuple_GET_ITEM(callargs, 0) : Py_None; + PyTuple_GET_ITEM(callargs, 0) : &_PyInstrumentation_MISSING; int err = _Py_call_instrumentation_2args( tstate, PY_MONITORING_EVENT_CALL, frame, next_instr-1, func, arg); if (err) goto error; result = PyObject_Call(func, callargs, kwargs); - if (result == NULL) { - _Py_call_instrumentation_exc2( - tstate, PY_MONITORING_EVENT_C_RAISE, - frame, next_instr-1, func, arg); - } - else { - int err = _Py_call_instrumentation_2args( - tstate, PY_MONITORING_EVENT_C_RETURN, - frame, next_instr-1, func, arg); - if (err < 0) { - Py_CLEAR(result); + if (!PyFunction_Check(func) && !PyMethod_Check(func)) { + if (result == NULL) { + _Py_call_instrumentation_exc2( + tstate, PY_MONITORING_EVENT_C_RAISE, + frame, next_instr-1, func, arg); + } + else { + int err = _Py_call_instrumentation_2args( + tstate, PY_MONITORING_EVENT_C_RETURN, + frame, next_instr-1, func, arg); + if (err < 0) { + Py_CLEAR(result); + } } } } diff --git a/contrib/tools/python3/Python/getargs.c b/contrib/tools/python3/Python/getargs.c index 066739f21f..5e731cdc23 100644 --- a/contrib/tools/python3/Python/getargs.c +++ b/contrib/tools/python3/Python/getargs.c @@ -672,7 +672,7 @@ convertsimple(PyObject *arg, const char **p_format, va_list *p_va, int flags, switch (c) { case 'b': { /* unsigned byte -- very short int */ - char *p = va_arg(*p_va, char *); + unsigned char *p = va_arg(*p_va, unsigned char *); long ival = PyLong_AsLong(arg); if (ival == -1 && PyErr_Occurred()) RETURN_ERR_OCCURRED; @@ -693,7 +693,7 @@ convertsimple(PyObject *arg, const char **p_format, va_list *p_va, int flags, case 'B': {/* byte sized bitfield - both signed and unsigned values allowed */ - char *p = va_arg(*p_va, char *); + unsigned char *p = va_arg(*p_va, unsigned char *); unsigned long ival = PyLong_AsUnsignedLongMask(arg); if (ival == (unsigned long)-1 && PyErr_Occurred()) RETURN_ERR_OCCURRED; diff --git a/contrib/tools/python3/Python/initconfig.c b/contrib/tools/python3/Python/initconfig.c index a1256a542a..4cf56864fe 100644 --- a/contrib/tools/python3/Python/initconfig.c +++ b/contrib/tools/python3/Python/initconfig.c @@ -33,8 +33,8 @@ static const char usage_line[] = /* Lines sorted by option name; keep in sync with usage_envvars* below */ static const char usage_help[] = "\ Options (and corresponding environment variables):\n\ --b : issue warnings about str(bytes_instance), str(bytearray_instance)\n\ - and comparing bytes/bytearray with str. (-bb: issue errors)\n\ +-b : issue warnings about converting bytes/bytearray to str and comparing\n\ + bytes/bytearray with str or bytes with int. (-bb: issue errors)\n\ -B : don't write .pyc files on import; also PYTHONDONTWRITEBYTECODE=x\n\ -c cmd : program passed in as string (terminates option list)\n\ -d : turn on parser debugging output (for experts only, only works on\n\ @@ -49,9 +49,10 @@ Options (and corresponding environment variables):\n\ .pyc extension; also PYTHONOPTIMIZE=x\n\ -OO : do -O changes and also discard docstrings; add .opt-2 before\n\ .pyc extension\n\ --P : don't prepend a potentially unsafe path to sys.path; also PYTHONSAFEPATH\n\ +-P : don't prepend a potentially unsafe path to sys.path; also\n\ + PYTHONSAFEPATH\n\ -q : don't print version and copyright messages on interactive startup\n\ --s : don't add user site directory to sys.path; also PYTHONNOUSERSITE\n\ +-s : don't add user site directory to sys.path; also PYTHONNOUSERSITE=x\n\ -S : don't imply 'import site' on initialization\n\ -u : force the stdout and stderr streams to be unbuffered;\n\ this option has no effect on stdin; also PYTHONUNBUFFERED=x\n\ @@ -65,9 +66,10 @@ Options (and corresponding environment variables):\n\ -X opt : set implementation-specific option\n\ --check-hash-based-pycs always|default|never:\n\ control how Python invalidates hash-based .pyc files\n\ ---help-env : print help about Python environment variables and exit\n\ ---help-xoptions : print help about implementation-specific -X options and exit\n\ ---help-all : print complete help information and exit\n\ +--help-env: print help about Python environment variables and exit\n\ +--help-xoptions: print help about implementation-specific -X options and exit\n\ +--help-all: print complete help information and exit\n\ +\n\ Arguments:\n\ file : program read from script file\n\ - : program read from stdin (default; interactive mode if a tty)\n\ @@ -76,117 +78,90 @@ arg ...: arguments passed to program in sys.argv[1:]\n\ static const char usage_xoptions[] = "\ The following implementation-specific options are available:\n\ -\n\ --X faulthandler: enable faulthandler\n\ -\n\ --X showrefcount: output the total reference count and number of used\n\ - memory blocks when the program finishes or after each statement in the\n\ - interactive interpreter. This only works on debug builds\n\ -\n\ --X tracemalloc: start tracing Python memory allocations using the\n\ - tracemalloc module. By default, only the most recent frame is stored in a\n\ - traceback of a trace. Use -X tracemalloc=NFRAME to start tracing with a\n\ - traceback limit of NFRAME frames\n\ -\n\ --X importtime: show how long each import takes. It shows module name,\n\ - cumulative time (including nested imports) and self time (excluding\n\ - nested imports). Note that its output may be broken in multi-threaded\n\ - application. Typical usage is python3 -X importtime -c 'import asyncio'\n\ -\n\ --X dev: enable CPython's \"development mode\", introducing additional runtime\n\ - checks which are too expensive to be enabled by default. Effect of the\n\ - developer mode:\n\ - * Add default warning filter, as -W default\n\ - * Install debug hooks on memory allocators: see the PyMem_SetupDebugHooks()\n\ - C function\n\ - * Enable the faulthandler module to dump the Python traceback on a crash\n\ - * Enable asyncio debug mode\n\ - * Set the dev_mode attribute of sys.flags to True\n\ - * io.IOBase destructor logs close() exceptions\n\ -\n\ --X utf8: enable UTF-8 mode for operating system interfaces, overriding the default\n\ - locale-aware mode. -X utf8=0 explicitly disables UTF-8 mode (even when it would\n\ - otherwise activate automatically)\n\ -\n\ --X pycache_prefix=PATH: enable writing .pyc files to a parallel tree rooted at the\n\ - given directory instead of to the code tree\n\ -\n\ --X warn_default_encoding: enable opt-in EncodingWarning for 'encoding=None'\n\ -\n\ --X no_debug_ranges: disable the inclusion of the tables mapping extra location \n\ - information (end line, start column offset and end column offset) to every \n\ - instruction in code objects. This is useful when smaller code objects and pyc \n\ - files are desired as well as suppressing the extra visual location indicators \n\ - when the interpreter displays tracebacks.\n\ -\n\ --X perf: activate support for the Linux \"perf\" profiler by activating the \"perf\"\n\ - trampoline. When this option is activated, the Linux \"perf\" profiler will be \n\ - able to report Python calls. This option is only available on some platforms and will \n\ - do nothing if is not supported on the current system. The default value is \"off\".\n\ -\n\ --X frozen_modules=[on|off]: whether or not frozen modules should be used.\n\ - The default is \"on\" (or \"off\" if you are running a local build).\n\ -\n\ --X int_max_str_digits=number: limit the size of int<->str conversions.\n\ - This helps avoid denial of service attacks when parsing untrusted data.\n\ - The default is sys.int_info.default_max_str_digits. 0 disables." - +-X dev : enable Python Development Mode; also PYTHONDEVMODE\n\ +-X faulthandler: dump the Python traceback on fatal errors;\n\ + also PYTHONFAULTHANDLER\n\ +-X frozen_modules=[on|off]: whether to use frozen modules; the default is \"on\"\n\ + for installed Python and \"off\" for a local build\n\ +-X importtime: show how long each import takes; also PYTHONPROFILEIMPORTTIME\n\ +-X int_max_str_digits=N: limit the size of int<->str conversions;\n\ + 0 disables the limit; also PYTHONINTMAXSTRDIGITS\n\ +-X no_debug_ranges: don't include extra location information in code objects;\n\ + also PYTHONNODEBUGRANGES\n\ +-X perf: support the Linux \"perf\" profiler; also PYTHONPERFSUPPORT=1\n\ +" +#ifdef Py_DEBUG +"-X presite=MOD: import this module before site; also PYTHON_PRESITE\n" +#endif +"\ +-X pycache_prefix=PATH: write .pyc files to a parallel tree instead of to the\n\ + code tree; also PYTHONPYCACHEPREFIX\n\ +" #ifdef Py_STATS -"\n\ -\n\ --X pystats: Enable pystats collection at startup." +"-X pystats: enable pystats collection at startup; also PYTHONSTATS\n" #endif -; +"\ +-X showrefcount: output the total reference count and number of used\n\ + memory blocks when the program finishes or after each statement in\n\ + the interactive interpreter; only works on debug builds\n\ +-X tracemalloc[=N]: trace Python memory allocations; N sets a traceback limit\n\ + of N frames (default: 1); also PYTHONTRACEMALLOC=N\n\ +-X utf8[=0|1]: enable (1) or disable (0) UTF-8 mode; also PYTHONUTF8\n\ +-X warn_default_encoding: enable opt-in EncodingWarning for 'encoding=None';\n\ + also PYTHONWARNDEFAULTENCODING\ +"; /* Envvars that don't have equivalent command-line options are listed first */ static const char usage_envvars[] = "Environment variables that change behavior:\n" -"PYTHONSTARTUP: file executed on interactive startup (no default)\n" -"PYTHONPATH : '%lc'-separated list of directories prefixed to the\n" -" default module search path. The result is sys.path.\n" -"PYTHONHOME : alternate <prefix> directory (or <prefix>%lc<exec_prefix>).\n" -" The default module search path uses %s.\n" -"PYTHONPLATLIBDIR : override sys.platlibdir.\n" -"PYTHONCASEOK : ignore case in 'import' statements (Windows).\n" -"PYTHONUTF8: if set to 1, enable the UTF-8 mode.\n" -"PYTHONIOENCODING: Encoding[:errors] used for stdin/stdout/stderr.\n" -"PYTHONFAULTHANDLER: dump the Python traceback on fatal errors.\n" -"PYTHONHASHSEED: if this variable is set to 'random', a random value is used\n" -" to seed the hashes of str and bytes objects. It can also be set to an\n" -" integer in the range [0,4294967295] to get hash values with a\n" -" predictable seed.\n" -"PYTHONINTMAXSTRDIGITS: limits the maximum digit characters in an int value\n" -" when converting from a string and when converting an int back to a str.\n" -" A value of 0 disables the limit. Conversions to or from bases 2, 4, 8,\n" -" 16, and 32 are never limited.\n" -"PYTHONMALLOC: set the Python memory allocators and/or install debug hooks\n" -" on Python memory allocators. Use PYTHONMALLOC=debug to install debug\n" -" hooks.\n" +"PYTHONSTARTUP : file executed on interactive startup (no default)\n" +"PYTHONPATH : '%lc'-separated list of directories prefixed to the\n" +" default module search path. The result is sys.path.\n" +"PYTHONHOME : alternate <prefix> directory (or <prefix>%lc<exec_prefix>).\n" +" The default module search path uses %s.\n" +"PYTHONPLATLIBDIR: override sys.platlibdir\n" +"PYTHONCASEOK : ignore case in 'import' statements (Windows)\n" +"PYTHONIOENCODING: encoding[:errors] used for stdin/stdout/stderr\n" +"PYTHONHASHSEED : if this variable is set to 'random', a random value is used\n" +" to seed the hashes of str and bytes objects. It can also be\n" +" set to an integer in the range [0,4294967295] to get hash\n" +" values with a predictable seed.\n" +"PYTHONMALLOC : set the Python memory allocators and/or install debug hooks\n" +" on Python memory allocators. Use PYTHONMALLOC=debug to\n" +" install debug hooks.\n" "PYTHONCOERCECLOCALE: if this variable is set to 0, it disables the locale\n" -" coercion behavior. Use PYTHONCOERCECLOCALE=warn to request display of\n" -" locale coercion and locale compatibility warnings on stderr.\n" +" coercion behavior. Use PYTHONCOERCECLOCALE=warn to request\n" +" display of locale coercion and locale compatibility warnings\n" +" on stderr.\n" "PYTHONBREAKPOINT: if this variable is set to 0, it disables the default\n" -" debugger. It can be set to the callable of your debugger of choice.\n" -"PYTHONDEVMODE: enable the development mode.\n" -"PYTHONPYCACHEPREFIX: root directory for bytecode cache (pyc) files.\n" -"PYTHONWARNDEFAULTENCODING: enable opt-in EncodingWarning for 'encoding=None'.\n" -"PYTHONNODEBUGRANGES: If this variable is set, it disables the inclusion of the \n" -" tables mapping extra location information (end line, start column offset \n" -" and end column offset) to every instruction in code objects. This is useful \n" -" when smaller code objects and pyc files are desired as well as suppressing the \n" -" extra visual location indicators when the interpreter displays tracebacks.\n" -"These variables have equivalent command-line parameters (see --help for details):\n" -"PYTHONDEBUG : enable parser debug mode (-d)\n" -"PYTHONDONTWRITEBYTECODE : don't write .pyc files (-B)\n" -"PYTHONINSPECT : inspect interactively after running script (-i)\n" -"PYTHONINTMAXSTRDIGITS : limit max digit characters in an int value\n" -" (-X int_max_str_digits=number)\n" -"PYTHONNOUSERSITE : disable user site directory (-s)\n" -"PYTHONOPTIMIZE : enable level 1 optimizations (-O)\n" -"PYTHONSAFEPATH : don't prepend a potentially unsafe path to sys.path (-P)\n" -"PYTHONUNBUFFERED : disable stdout/stderr buffering (-u)\n" -"PYTHONVERBOSE : trace import statements (-v)\n" -"PYTHONWARNINGS=arg : warning control (-W arg)\n"; +" debugger. It can be set to the callable of your debugger of\n" +" choice.\n" +"\n" +"These variables have equivalent command-line options (see --help for details):\n" +"PYTHONDEBUG : enable parser debug mode (-d)\n" +"PYTHONDEVMODE : enable Python Development Mode (-X dev)\n" +"PYTHONDONTWRITEBYTECODE: don't write .pyc files (-B)\n" +"PYTHONFAULTHANDLER: dump the Python traceback on fatal errors (-X faulthandler)\n" +"PYTHONINSPECT : inspect interactively after running script (-i)\n" +"PYTHONINTMAXSTRDIGITS: limit the size of int<->str conversions;\n" +" 0 disables the limit (-X int_max_str_digits=N)\n" +"PYTHONNODEBUGRANGES: don't include extra location information in code objects\n" +" (-X no_debug_ranges)\n" +"PYTHONNOUSERSITE: disable user site directory (-s)\n" +"PYTHONOPTIMIZE : enable level 1 optimizations (-O)\n" +"PYTHONPERFSUPPORT: support the Linux \"perf\" profiler (-X perf)\n" +"PYTHONPROFILEIMPORTTIME: show how long each import takes (-X importtime)\n" +"PYTHONPYCACHEPREFIX: root directory for bytecode cache (pyc) files\n" +" (-X pycache_prefix)\n" +"PYTHONSAFEPATH : don't prepend a potentially unsafe path to sys.path.\n" +"PYTHONTRACEMALLOC: trace Python memory allocations (-X tracemalloc)\n" +"PYTHONUNBUFFERED: disable stdout/stderr buffering (-u)\n" +"PYTHONUTF8 : control the UTF-8 mode (-X utf8)\n" +"PYTHONVERBOSE : trace import statements (-v)\n" +"PYTHONWARNDEFAULTENCODING: enable opt-in EncodingWarning for 'encoding=None'\n" +" (-X warn_default_encoding)\n" +"PYTHONWARNINGS : warning control (-W)\n" +; #if defined(MS_WINDOWS) # define PYTHONHOMEHELP "<prefix>\\python{major}{minor}" @@ -2370,9 +2345,9 @@ static void config_complete_usage(const wchar_t* program) { config_usage(0, program); - puts("\n"); + putchar('\n'); config_envvars_usage(); - puts("\n"); + putchar('\n'); config_xoptions_usage(); } diff --git a/contrib/tools/python3/Python/pystate.c b/contrib/tools/python3/Python/pystate.c index 0ebbdfbfb4..7acf4f9854 100644 --- a/contrib/tools/python3/Python/pystate.c +++ b/contrib/tools/python3/Python/pystate.c @@ -356,7 +356,7 @@ holds_gil(PyThreadState *tstate) assert(tstate != NULL); #ifndef NDEBUG if (!tstate_is_alive(tstate)) { - return 0; + return PyGILState_Check(); } #endif _PyRuntimeState *runtime = tstate->interp->runtime; diff --git a/contrib/tools/python3/Python/structmember.c b/contrib/tools/python3/Python/structmember.c index ebebaa0a03..f4de0cb9ea 100644 --- a/contrib/tools/python3/Python/structmember.c +++ b/contrib/tools/python3/Python/structmember.c @@ -3,6 +3,9 @@ #include "Python.h" #include "structmember.h" // PyMemberDef +#include "pycore_abstract.h" // _PyNumber_Index() +#include "pycore_long.h" // _PyLong_IsNegative() + PyObject * PyMember_GetOne(const char *obj_addr, PyMemberDef *l) @@ -200,27 +203,22 @@ PyMember_SetOne(char *addr, PyMemberDef *l, PyObject *v) case T_UINT: { /* XXX: For compatibility, accept negative int values as well. */ - int overflow; - long long_val = PyLong_AsLongAndOverflow(v, &overflow); - if (long_val == -1 && PyErr_Occurred()) { - return -1; - } - if (overflow < 0) { - PyErr_SetString(PyExc_OverflowError, - "Python int too large to convert to C long"); + v = _PyNumber_Index(v); + if (v == NULL) { return -1; } - else if (!overflow) { - *(unsigned int *)addr = (unsigned int)(unsigned long)long_val; - if (long_val < 0) { - WARN("Writing negative value into unsigned field"); - } - else if ((unsigned long)long_val > UINT_MAX) { - WARN("Truncation of value to unsigned short"); + if (_PyLong_IsNegative((PyLongObject *)v)) { + long long_val = PyLong_AsLong(v); + Py_DECREF(v); + if (long_val == -1 && PyErr_Occurred()) { + return -1; } + *(unsigned int *)addr = (unsigned int)(unsigned long)long_val; + WARN("Writing negative value into unsigned field"); } else { unsigned long ulong_val = PyLong_AsUnsignedLong(v); + Py_DECREF(v); if (ulong_val == (unsigned long)-1 && PyErr_Occurred()) { return -1; } @@ -240,24 +238,22 @@ PyMember_SetOne(char *addr, PyMemberDef *l, PyObject *v) case T_ULONG: { /* XXX: For compatibility, accept negative int values as well. */ - int overflow; - long long_val = PyLong_AsLongAndOverflow(v, &overflow); - if (long_val == -1 && PyErr_Occurred()) { - return -1; - } - if (overflow < 0) { - PyErr_SetString(PyExc_OverflowError, - "Python int too large to convert to C long"); + v = _PyNumber_Index(v); + if (v == NULL) { return -1; } - else if (!overflow) { - *(unsigned long *)addr = (unsigned long)long_val; - if (long_val < 0) { - WARN("Writing negative value into unsigned field"); + if (_PyLong_IsNegative((PyLongObject *)v)) { + long long_val = PyLong_AsLong(v); + Py_DECREF(v); + if (long_val == -1 && PyErr_Occurred()) { + return -1; } + *(unsigned long *)addr = (unsigned long)long_val; + WARN("Writing negative value into unsigned field"); } else { unsigned long ulong_val = PyLong_AsUnsignedLong(v); + Py_DECREF(v); if (ulong_val == (unsigned long)-1 && PyErr_Occurred()) { return -1; } @@ -313,18 +309,30 @@ PyMember_SetOne(char *addr, PyMemberDef *l, PyObject *v) return -1; break; } - case T_ULONGLONG:{ - unsigned long long value; - /* ??? PyLong_AsLongLong accepts an int, but PyLong_AsUnsignedLongLong - doesn't ??? */ - if (PyLong_Check(v)) - *(unsigned long long*)addr = value = PyLong_AsUnsignedLongLong(v); - else - *(unsigned long long*)addr = value = PyLong_AsLong(v); - if ((value == (unsigned long long)-1) && PyErr_Occurred()) + case Py_T_ULONGLONG: { + v = _PyNumber_Index(v); + if (v == NULL) { return -1; - break; } + if (_PyLong_IsNegative((PyLongObject *)v)) { + long long_val = PyLong_AsLong(v); + Py_DECREF(v); + if (long_val == -1 && PyErr_Occurred()) { + return -1; + } + *(unsigned long long *)addr = (unsigned long long)(long long)long_val; + WARN("Writing negative value into unsigned field"); + } + else { + unsigned long long ulonglong_val = PyLong_AsUnsignedLongLong(v); + Py_DECREF(v); + if (ulonglong_val == (unsigned long long)-1 && PyErr_Occurred()) { + return -1; + } + *(unsigned long long*)addr = ulonglong_val; + } + break; + } default: PyErr_Format(PyExc_SystemError, "bad memberdescr type for %s", l->name); diff --git a/contrib/tools/python3/Python/symtable.c b/contrib/tools/python3/Python/symtable.c index a5c6b465b7..65ebdee0d7 100644 --- a/contrib/tools/python3/Python/symtable.c +++ b/contrib/tools/python3/Python/symtable.c @@ -281,11 +281,6 @@ symtable_new(void) return NULL; } -/* Using a scaling factor means this should automatically adjust when - the recursion limit is adjusted for small or large C stack allocations. -*/ -#define COMPILER_STACK_FRAME_SCALE 2 - struct symtable * _PySymtable_Build(mod_ty mod, PyObject *filename, PyFutureFeatures *future) { @@ -312,9 +307,9 @@ _PySymtable_Build(mod_ty mod, PyObject *filename, PyFutureFeatures *future) } /* Be careful here to prevent overflow. */ int recursion_depth = C_RECURSION_LIMIT - tstate->c_recursion_remaining; - starting_recursion_depth = recursion_depth * COMPILER_STACK_FRAME_SCALE; + starting_recursion_depth = recursion_depth; st->recursion_depth = starting_recursion_depth; - st->recursion_limit = C_RECURSION_LIMIT * COMPILER_STACK_FRAME_SCALE; + st->recursion_limit = C_RECURSION_LIMIT; /* Make the initial symbol information gathering pass */ if (!symtable_enter_block(st, &_Py_ID(top), ModuleBlock, (void *)mod, 0, 0, 0, 0)) { @@ -658,6 +653,8 @@ inline_comprehension(PySTEntryObject *ste, PySTEntryObject *comp, { PyObject *k, *v; Py_ssize_t pos = 0; + int remove_dunder_class = 0; + while (PyDict_Next(comp->ste_symbols, &pos, &k, &v)) { // skip comprehension parameter long comp_flags = PyLong_AS_LONG(v); @@ -679,6 +676,19 @@ inline_comprehension(PySTEntryObject *ste, PySTEntryObject *comp, if (!existing) { // name does not exist in scope, copy from comprehension assert(scope != FREE || PySet_Contains(comp_free, k) == 1); + if (scope == FREE && ste->ste_type == ClassBlock && + _PyUnicode_EqualToASCIIString(k, "__class__")) { + // if __class__ is unbound in the enclosing class scope and free + // in the comprehension scope, it needs special handling; just + // letting it be marked as free in class scope will break due to + // drop_class_free + scope = GLOBAL_IMPLICIT; + only_flags &= ~DEF_FREE; + if (PySet_Discard(comp_free, k) < 0) { + return 0; + } + remove_dunder_class = 1; + } PyObject *v_flags = PyLong_FromLong(only_flags); if (v_flags == NULL) { return 0; @@ -703,6 +713,10 @@ inline_comprehension(PySTEntryObject *ste, PySTEntryObject *comp, } } } + comp->ste_free = PySet_Size(comp_free) > 0; + if (remove_dunder_class && PyDict_DelItemString(comp->ste_symbols, "__class__") < 0) { + return 0; + } return 1; } @@ -1240,16 +1254,22 @@ symtable_enter_block(struct symtable *st, identifier name, _Py_block_ty block, } static long -symtable_lookup(struct symtable *st, PyObject *name) +symtable_lookup_entry(struct symtable *st, PySTEntryObject *ste, PyObject *name) { PyObject *mangled = _Py_Mangle(st->st_private, name); if (!mangled) return 0; - long ret = _PyST_GetSymbol(st->st_cur, mangled); + long ret = _PyST_GetSymbol(ste, mangled); Py_DECREF(mangled); return ret; } +static long +symtable_lookup(struct symtable *st, PyObject *name) +{ + return symtable_lookup_entry(st, st->st_cur, name); +} + static int symtable_add_def_helper(struct symtable *st, PyObject *name, int flag, struct _symtable_entry *ste, int lineno, int col_offset, int end_lineno, int end_col_offset) @@ -1890,7 +1910,7 @@ symtable_extend_namedexpr_scope(struct symtable *st, expr_ty e) * binding conflict with iteration variables, otherwise skip it */ if (ste->ste_comprehension) { - long target_in_scope = _PyST_GetSymbol(ste, target_name); + long target_in_scope = symtable_lookup_entry(st, ste, target_name); if ((target_in_scope & DEF_COMP_ITER) && (target_in_scope & DEF_LOCAL)) { PyErr_Format(PyExc_SyntaxError, NAMED_EXPR_COMP_CONFLICT, target_name); @@ -1906,7 +1926,7 @@ symtable_extend_namedexpr_scope(struct symtable *st, expr_ty e) /* If we find a FunctionBlock entry, add as GLOBAL/LOCAL or NONLOCAL/LOCAL */ if (ste->ste_type == FunctionBlock) { - long target_in_scope = _PyST_GetSymbol(ste, target_name); + long target_in_scope = symtable_lookup_entry(st, ste, target_name); if (target_in_scope & DEF_GLOBAL) { if (!symtable_add_def(st, target_name, DEF_GLOBAL, LOCATION(e))) VISIT_QUIT(st, 0); diff --git a/contrib/tools/python3/Python/sysmodule.c b/contrib/tools/python3/Python/sysmodule.c index 3146f2a943..edc66cc69e 100644 --- a/contrib/tools/python3/Python/sysmodule.c +++ b/contrib/tools/python3/Python/sysmodule.c @@ -1439,31 +1439,33 @@ get_hash_info(PyThreadState *tstate) int field = 0; PyHash_FuncDef *hashfunc; hash_info = PyStructSequence_New(&Hash_InfoType); - if (hash_info == NULL) - return NULL; - hashfunc = PyHash_GetFuncDef(); - PyStructSequence_SET_ITEM(hash_info, field++, - PyLong_FromLong(8*sizeof(Py_hash_t))); - PyStructSequence_SET_ITEM(hash_info, field++, - PyLong_FromSsize_t(_PyHASH_MODULUS)); - PyStructSequence_SET_ITEM(hash_info, field++, - PyLong_FromLong(_PyHASH_INF)); - PyStructSequence_SET_ITEM(hash_info, field++, - PyLong_FromLong(0)); // This is no longer used - PyStructSequence_SET_ITEM(hash_info, field++, - PyLong_FromLong(_PyHASH_IMAG)); - PyStructSequence_SET_ITEM(hash_info, field++, - PyUnicode_FromString(hashfunc->name)); - PyStructSequence_SET_ITEM(hash_info, field++, - PyLong_FromLong(hashfunc->hash_bits)); - PyStructSequence_SET_ITEM(hash_info, field++, - PyLong_FromLong(hashfunc->seed_bits)); - PyStructSequence_SET_ITEM(hash_info, field++, - PyLong_FromLong(Py_HASH_CUTOFF)); - if (_PyErr_Occurred(tstate)) { - Py_CLEAR(hash_info); + if (hash_info == NULL) { return NULL; } + hashfunc = PyHash_GetFuncDef(); + +#define SET_HASH_INFO_ITEM(CALL) \ + do { \ + PyObject *item = (CALL); \ + if (item == NULL) { \ + Py_CLEAR(hash_info); \ + return NULL; \ + } \ + PyStructSequence_SET_ITEM(hash_info, field++, item); \ + } while(0) + + SET_HASH_INFO_ITEM(PyLong_FromLong(8 * sizeof(Py_hash_t))); + SET_HASH_INFO_ITEM(PyLong_FromSsize_t(_PyHASH_MODULUS)); + SET_HASH_INFO_ITEM(PyLong_FromLong(_PyHASH_INF)); + SET_HASH_INFO_ITEM(PyLong_FromLong(0)); // This is no longer used + SET_HASH_INFO_ITEM(PyLong_FromLong(_PyHASH_IMAG)); + SET_HASH_INFO_ITEM(PyUnicode_FromString(hashfunc->name)); + SET_HASH_INFO_ITEM(PyLong_FromLong(hashfunc->hash_bits)); + SET_HASH_INFO_ITEM(PyLong_FromLong(hashfunc->seed_bits)); + SET_HASH_INFO_ITEM(PyLong_FromLong(Py_HASH_CUTOFF)); + +#undef SET_HASH_INFO_ITEM + return hash_info; } /*[clinic input] @@ -1586,6 +1588,9 @@ sys_getwindowsversion_impl(PyObject *module) if (version && PyObject_TypeCheck(version, &WindowsVersionType)) { return version; } + if (!PyErr_ExceptionMatches(PyExc_AttributeError)) { + return NULL; + } Py_XDECREF(version); PyErr_Clear(); @@ -1597,15 +1602,24 @@ sys_getwindowsversion_impl(PyObject *module) if (version == NULL) return NULL; - PyStructSequence_SET_ITEM(version, pos++, PyLong_FromLong(ver.dwMajorVersion)); - PyStructSequence_SET_ITEM(version, pos++, PyLong_FromLong(ver.dwMinorVersion)); - PyStructSequence_SET_ITEM(version, pos++, PyLong_FromLong(ver.dwBuildNumber)); - PyStructSequence_SET_ITEM(version, pos++, PyLong_FromLong(ver.dwPlatformId)); - PyStructSequence_SET_ITEM(version, pos++, PyUnicode_FromWideChar(ver.szCSDVersion, -1)); - PyStructSequence_SET_ITEM(version, pos++, PyLong_FromLong(ver.wServicePackMajor)); - PyStructSequence_SET_ITEM(version, pos++, PyLong_FromLong(ver.wServicePackMinor)); - PyStructSequence_SET_ITEM(version, pos++, PyLong_FromLong(ver.wSuiteMask)); - PyStructSequence_SET_ITEM(version, pos++, PyLong_FromLong(ver.wProductType)); +#define SET_VERSION_INFO(CALL) \ + do { \ + PyObject *item = (CALL); \ + if (item == NULL) { \ + goto error; \ + } \ + PyStructSequence_SET_ITEM(version, pos++, item); \ + } while(0) + + SET_VERSION_INFO(PyLong_FromLong(ver.dwMajorVersion)); + SET_VERSION_INFO(PyLong_FromLong(ver.dwMinorVersion)); + SET_VERSION_INFO(PyLong_FromLong(ver.dwBuildNumber)); + SET_VERSION_INFO(PyLong_FromLong(ver.dwPlatformId)); + SET_VERSION_INFO(PyUnicode_FromWideChar(ver.szCSDVersion, -1)); + SET_VERSION_INFO(PyLong_FromLong(ver.wServicePackMajor)); + SET_VERSION_INFO(PyLong_FromLong(ver.wServicePackMinor)); + SET_VERSION_INFO(PyLong_FromLong(ver.wSuiteMask)); + SET_VERSION_INFO(PyLong_FromLong(ver.wProductType)); // GetVersion will lie if we are running in a compatibility mode. // We need to read the version info from a system file resource @@ -1613,6 +1627,10 @@ sys_getwindowsversion_impl(PyObject *module) // just return whatever GetVersion said. PyObject *realVersion = _sys_getwindowsversion_from_kernel32(); if (!realVersion) { + if (!PyErr_ExceptionMatches(PyExc_WindowsError)) { + return NULL; + } + PyErr_Clear(); realVersion = Py_BuildValue("(kkk)", ver.dwMajorVersion, @@ -1621,21 +1639,19 @@ sys_getwindowsversion_impl(PyObject *module) ); } - if (realVersion) { - PyStructSequence_SET_ITEM(version, pos++, realVersion); - } + SET_VERSION_INFO(realVersion); - if (PyErr_Occurred()) { - Py_DECREF(version); - return NULL; - } +#undef SET_VERSION_INFO if (PyObject_SetAttrString(module, "_cached_windows_version", version) < 0) { - Py_DECREF(version); - return NULL; + goto error; } return version; + +error: + Py_DECREF(version); + return NULL; } #pragma warning(pop) diff --git a/contrib/tools/python3/Python/thread_pthread.h b/contrib/tools/python3/Python/thread_pthread.h index e5535a945e..d843d8d7fe 100644 --- a/contrib/tools/python3/Python/thread_pthread.h +++ b/contrib/tools/python3/Python/thread_pthread.h @@ -91,6 +91,10 @@ #endif #endif +/* Thread sanitizer doesn't currently support sem_clockwait */ +#ifdef _Py_THREAD_SANITIZER +#undef HAVE_SEM_CLOCKWAIT +#endif /* Whether or not to use semaphores directly rather than emulating them with * mutexes and condition variables: diff --git a/contrib/tools/python3/README.rst b/contrib/tools/python3/README.rst index a5321cf3e2..442a03b2d0 100644 --- a/contrib/tools/python3/README.rst +++ b/contrib/tools/python3/README.rst @@ -1,4 +1,4 @@ -This is Python version 3.12.2 +This is Python version 3.12.3 ============================= .. image:: https://github.com/python/cpython/workflows/Tests/badge.svg @@ -158,15 +158,6 @@ For information about building Python's documentation, refer to `Doc/README.rst <https://github.com/python/cpython/blob/main/Doc/README.rst>`_. -Converting From Python 2.x to 3.x ---------------------------------- - -Significant backward incompatible changes were made for the release of Python -3.0, which may cause programs written for Python 2 to fail when run with Python -3. For more information about porting your code from Python 2 to Python 3, see -the `Porting HOWTO <https://docs.python.org/3/howto/pyporting.html>`_. - - Testing ------- diff --git a/contrib/tools/python3/bin/ya.make b/contrib/tools/python3/bin/ya.make index 45f1dde162..9736a86d38 100644 --- a/contrib/tools/python3/bin/ya.make +++ b/contrib/tools/python3/bin/ya.make @@ -2,9 +2,9 @@ PROGRAM(python3) -VERSION(3.12.2) +VERSION(3.12.3) -ORIGINAL_SOURCE(https://github.com/python/cpython/archive/v3.12.2.tar.gz) +ORIGINAL_SOURCE(https://github.com/python/cpython/archive/v3.12.3.tar.gz) LICENSE(Python-2.0) diff --git a/contrib/tools/python3/ya.make b/contrib/tools/python3/ya.make index 24173194fc..2134e2436f 100644 --- a/contrib/tools/python3/ya.make +++ b/contrib/tools/python3/ya.make @@ -2,9 +2,9 @@ LIBRARY() -VERSION(3.12.2) +VERSION(3.12.3) -ORIGINAL_SOURCE(https://github.com/python/cpython/archive/v3.12.2.tar.gz) +ORIGINAL_SOURCE(https://github.com/python/cpython/archive/v3.12.3.tar.gz) LICENSE(Python-2.0) diff --git a/library/cpp/cache/cache.h b/library/cpp/cache/cache.h index ee65c30d41..9fe98d5366 100644 --- a/library/cpp/cache/cache.h +++ b/library/cpp/cache/cache.h @@ -124,11 +124,11 @@ public: List.PushBack(item); } - size_t GetSize() const { + [[nodiscard]] size_t GetSize() const { return ItemsAmount; } - size_t GetTotalSize() const { + [[nodiscard]] size_t GetTotalSize() const { return TotalSize; } @@ -157,7 +157,8 @@ public: TLFUList(size_t maxSize, const TSizeProvider& sizeProvider = TSizeProvider()) : List() , SizeProvider(sizeProvider) - , ListSize(0) + , ItemsAmount(0) + , TotalSize(0) , MaxSize(maxSize) { } @@ -228,14 +229,15 @@ public: public: TItem* Insert(TItem* item) { List.PushBack(item); // give a chance for promotion - ListSize += SizeProvider(item->Value); + ++ItemsAmount; + TotalSize += SizeProvider(item->Value); return RemoveIfOverflown(); } TItem* RemoveIfOverflown() { TItem* deleted = nullptr; - if (ListSize > MaxSize) { + if (TotalSize > MaxSize && ItemsAmount > 1) { deleted = GetLeastFrequentlyUsed(); Erase(deleted); } @@ -250,7 +252,8 @@ public: void Erase(TItem* item) { item->Unlink(); - ListSize -= SizeProvider(item->Value); + --ItemsAmount; + TotalSize -= SizeProvider(item->Value); } void Promote(TItem* item) { @@ -262,8 +265,12 @@ public: item->LinkBefore(&*it); } - size_t GetSize() const { - return ListSize; + [[nodiscard]] size_t GetSize() const { + return ItemsAmount; + } + + [[nodiscard]] size_t GetTotalSize() const { + return TotalSize; } size_t GetMaxSize() const { @@ -280,7 +287,8 @@ private: typedef TIntrusiveList<TItem> TListType; TListType List; TSizeProvider SizeProvider; - size_t ListSize; + size_t ItemsAmount; + size_t TotalSize; size_t MaxSize; }; @@ -413,6 +421,10 @@ public: return Size; } + [[nodiscard]] size_t GetTotalSize() const { + return Size; + } + size_t GetMaxSize() const { return MaxSize; } @@ -515,10 +527,14 @@ public: Clear(); } - size_t Size() const { + [[nodiscard]] size_t Size() const { return Index.size(); } + [[nodiscard]] size_t TotalSize() const { + return List.GetTotalSize(); + } + TIterator Begin() const { return TIterator(Index.begin()); } diff --git a/library/cpp/cache/thread_safe_cache.h b/library/cpp/cache/thread_safe_cache.h index 71e1442717..2699c8f7b7 100644 --- a/library/cpp/cache/thread_safe_cache.h +++ b/library/cpp/cache/thread_safe_cache.h @@ -96,6 +96,16 @@ namespace NPrivate { return TThreadSafeCacheSingleton<TCallbacks>::Clear(); } + size_t Size() const { + TReadGuard r(Mutex); + return Cache.Size(); + } + + size_t TotalSize() const { + TReadGuard r(Mutex); + return Cache.TotalSize(); + } + size_t GetMaxSize() const { TReadGuard w(Mutex); return Cache.GetMaxSize(); diff --git a/library/cpp/cache/ut/cache_ut.cpp b/library/cpp/cache/ut/cache_ut.cpp index 33731988c1..36a3eff094 100644 --- a/library/cpp/cache/ut/cache_ut.cpp +++ b/library/cpp/cache/ut/cache_ut.cpp @@ -15,10 +15,14 @@ Y_UNIT_TEST_SUITE(TCacheTest) { TListType::TItem x1(1, "ttt"); list.Insert(&x1); + UNIT_ASSERT_EQUAL(list.GetTotalSize(), 1); + UNIT_ASSERT_EQUAL(list.GetSize(), 1); UNIT_ASSERT_EQUAL(list.GetOldest()->Key, 1); TListType::TItem x2(2, "yyy"); list.Insert(&x2); + UNIT_ASSERT_EQUAL(list.GetTotalSize(), 2); + UNIT_ASSERT_EQUAL(list.GetSize(), 2); UNIT_ASSERT_EQUAL(list.GetOldest()->Key, 1); list.Promote(list.GetOldest()); @@ -26,6 +30,8 @@ Y_UNIT_TEST_SUITE(TCacheTest) { TListType::TItem x3(3, "zzz"); list.Insert(&x3); + UNIT_ASSERT_EQUAL(list.GetTotalSize(), 2); + UNIT_ASSERT_EQUAL(list.GetSize(), 2); UNIT_ASSERT_EQUAL(list.GetOldest()->Key, 1); } @@ -39,12 +45,16 @@ Y_UNIT_TEST_SUITE(TCacheTest) { list.Insert(&x1); while (list.RemoveIfOverflown()) { } + UNIT_ASSERT_EQUAL(list.GetTotalSize(), 3); + UNIT_ASSERT_EQUAL(list.GetSize(), 1); UNIT_ASSERT_EQUAL(list.GetOldest()->Key, 1); TListType::TItem x2(2, "yyy"); list.Insert(&x2); while (list.RemoveIfOverflown()) { } + UNIT_ASSERT_EQUAL(list.GetTotalSize(), 6); + UNIT_ASSERT_EQUAL(list.GetSize(), 2); UNIT_ASSERT_EQUAL(list.GetOldest()->Key, 1); list.Promote(list.GetOldest()); @@ -56,13 +66,25 @@ Y_UNIT_TEST_SUITE(TCacheTest) { list.Insert(&x3); while (list.RemoveIfOverflown()) { } + UNIT_ASSERT_EQUAL(list.GetTotalSize(), 6); + UNIT_ASSERT_EQUAL(list.GetSize(), 2); UNIT_ASSERT_EQUAL(list.GetOldest()->Key, 1); TListType::TItem x4(4, "longlong"); list.Insert(&x4); while (list.RemoveIfOverflown()) { } + UNIT_ASSERT_EQUAL(list.GetTotalSize(), 8); + UNIT_ASSERT_EQUAL(list.GetSize(), 1); UNIT_ASSERT_EQUAL(list.GetOldest()->Key, 4); + + TListType::TItem x5(5, "xxx"); + list.Insert(&x5); + while (list.RemoveIfOverflown()) { + } + UNIT_ASSERT_EQUAL(list.GetTotalSize(), 3); + UNIT_ASSERT_EQUAL(list.GetSize(), 1); + UNIT_ASSERT_EQUAL(list.GetOldest()->Key, 5); } Y_UNIT_TEST(LFUListTest) { @@ -71,10 +93,14 @@ Y_UNIT_TEST_SUITE(TCacheTest) { TListType::TItem x1(1, "ttt"); list.Insert(&x1); + UNIT_ASSERT_EQUAL(list.GetTotalSize(), 1); + UNIT_ASSERT_EQUAL(list.GetSize(), 1); UNIT_ASSERT_EQUAL(list.GetLeastFrequentlyUsed()->Key, 1); TListType::TItem x2(2, "yyy"); list.Insert(&x2); + UNIT_ASSERT_EQUAL(list.GetTotalSize(), 2); + UNIT_ASSERT_EQUAL(list.GetSize(), 2); UNIT_ASSERT_EQUAL(list.GetLeastFrequentlyUsed()->Key, 1); list.Promote(list.GetLeastFrequentlyUsed()); @@ -82,6 +108,8 @@ Y_UNIT_TEST_SUITE(TCacheTest) { TListType::TItem x3(3, "zzz"); list.Insert(&x3); + UNIT_ASSERT_EQUAL(list.GetTotalSize(), 2); + UNIT_ASSERT_EQUAL(list.GetSize(), 2); UNIT_ASSERT_EQUAL(list.GetLeastFrequentlyUsed()->Key, 1); } @@ -92,25 +120,30 @@ Y_UNIT_TEST_SUITE(TCacheTest) { TListType::TItem x1(1, "tt"); list.Insert(&x1); UNIT_ASSERT_EQUAL(list.GetLightest()->Key, 1); + UNIT_ASSERT_EQUAL(list.GetTotalSize(), 1); UNIT_ASSERT_EQUAL(list.GetSize(), 1); TListType::TItem x2(2, "yyyy"); list.Insert(&x2); UNIT_ASSERT_EQUAL(list.GetLightest()->Key, 1); + UNIT_ASSERT_EQUAL(list.GetTotalSize(), 2); UNIT_ASSERT_EQUAL(list.GetSize(), 2); TListType::TItem x3(3, "z"); list.Insert(&x3); UNIT_ASSERT_EQUAL(list.GetLightest()->Key, 1); + UNIT_ASSERT_EQUAL(list.GetTotalSize(), 2); UNIT_ASSERT_EQUAL(list.GetSize(), 2); TListType::TItem x4(4, "xxxxxx"); list.Insert(&x4); UNIT_ASSERT_EQUAL(list.GetLightest()->Key, 2); + UNIT_ASSERT_EQUAL(list.GetTotalSize(), 2); UNIT_ASSERT_EQUAL(list.GetSize(), 2); list.Erase(&x2); UNIT_ASSERT_EQUAL(list.GetLightest()->Key, 4); + UNIT_ASSERT_EQUAL(list.GetTotalSize(), 1); UNIT_ASSERT_EQUAL(list.GetSize(), 1); } @@ -118,11 +151,17 @@ Y_UNIT_TEST_SUITE(TCacheTest) { typedef TLRUCache<int, TString> TCache; TCache s(2); // size 2 s.Insert(1, "abcd"); + UNIT_ASSERT_EQUAL(s.TotalSize(), 1); + UNIT_ASSERT_EQUAL(s.Size(), 1); UNIT_ASSERT(s.Find(1) != s.End()); UNIT_ASSERT_EQUAL(*s.Find(1), "abcd"); s.Insert(2, "defg"); + UNIT_ASSERT_EQUAL(s.TotalSize(), 2); + UNIT_ASSERT_EQUAL(s.Size(), 2); UNIT_ASSERT(s.GetOldest() == "abcd"); s.Insert(3, "hjkl"); + UNIT_ASSERT_EQUAL(s.TotalSize(), 2); + UNIT_ASSERT_EQUAL(s.Size(), 2); UNIT_ASSERT(s.GetOldest() == "defg"); // key 1 will be deleted UNIT_ASSERT(s.Find(1) == s.End()); @@ -135,9 +174,13 @@ Y_UNIT_TEST_SUITE(TCacheTest) { UNIT_ASSERT(*s.Find(3) == "hjkl"); s.Update(3, "abcd"); UNIT_ASSERT(*s.Find(3) == "abcd"); + UNIT_ASSERT_EQUAL(s.TotalSize(), 2); + UNIT_ASSERT_EQUAL(s.Size(), 2); TCache::TIterator it = s.Find(3); s.Erase(it); + UNIT_ASSERT_EQUAL(s.TotalSize(), 1); + UNIT_ASSERT_EQUAL(s.Size(), 1); UNIT_ASSERT(s.Find(3) == s.End()); } @@ -145,13 +188,21 @@ Y_UNIT_TEST_SUITE(TCacheTest) { typedef TLRUCache<int, TString, TNoopDelete, size_t(*)(const TString&)> TCache; TCache s(10, false, [](auto& string) { return string.size(); }); // size 10 s.Insert(1, "abcd"); + UNIT_ASSERT_EQUAL(s.TotalSize(), 4); + UNIT_ASSERT_EQUAL(s.Size(), 1); UNIT_ASSERT(s.Find(1) != s.End()); UNIT_ASSERT_EQUAL(*s.Find(1), "abcd"); s.Insert(2, "defg"); + UNIT_ASSERT_EQUAL(s.TotalSize(), 8); + UNIT_ASSERT_EQUAL(s.Size(), 2); UNIT_ASSERT(s.GetOldest() == "abcd"); s.Insert(3, "2c"); + UNIT_ASSERT_EQUAL(s.TotalSize(), 10); + UNIT_ASSERT_EQUAL(s.Size(), 3); UNIT_ASSERT(s.GetOldest() == "abcd"); s.Insert(4, "hjkl"); + UNIT_ASSERT_EQUAL(s.TotalSize(), 10); + UNIT_ASSERT_EQUAL(s.Size(), 3); UNIT_ASSERT(s.GetOldest() == "defg"); // key 1 will be deleted UNIT_ASSERT(s.Find(1) == s.End()); @@ -165,10 +216,14 @@ Y_UNIT_TEST_SUITE(TCacheTest) { UNIT_ASSERT(!s.Insert(3, "abcd")); UNIT_ASSERT(*s.Find(3) == "2c"); s.Update(3, "abcd"); + UNIT_ASSERT_EQUAL(s.TotalSize(), 8); + UNIT_ASSERT_EQUAL(s.Size(), 2); UNIT_ASSERT(*s.Find(3) == "abcd"); TCache::TIterator it = s.Find(3); s.Erase(it); + UNIT_ASSERT_EQUAL(s.TotalSize(), 4); + UNIT_ASSERT_EQUAL(s.Size(), 1); UNIT_ASSERT(s.Find(3) == s.End()); } @@ -317,10 +372,14 @@ Y_UNIT_TEST_SUITE(TCacheTest) { UNIT_ASSERT(s.Insert(1, "abcd")); UNIT_ASSERT(s.Insert(1, "bcde")); UNIT_ASSERT(s.Insert(2, "fghi")); - UNIT_ASSERT(s.Insert(2, "ghij")); // (1, "abcd") will be deleted - UNIT_ASSERT(*s.Find(1) == "bcde"); + UNIT_ASSERT(s.Insert(2, "ghij")); + + UNIT_ASSERT_EQUAL(s.TotalSize(), 3); + UNIT_ASSERT_EQUAL(s.Size(), 3); + // (1, "bcde") will be promoted + UNIT_ASSERT(*s.Find(1) == "bcde"); UNIT_ASSERT(*s.FindOldest() == "fghi"); } @@ -449,6 +508,8 @@ Y_UNIT_TEST_SUITE(TThreadSafeCacheTest) { cache.Update(2, MakeAtomicShared<TString>("hjk")); item = cache.Get(2); + UNIT_ASSERT_EQUAL(cache.TotalSize(), 1); + UNIT_ASSERT_EQUAL(cache.Size(), 1); UNIT_ASSERT(callbacks.Creations == 0); UNIT_ASSERT(*item == "hjk"); } @@ -484,6 +545,8 @@ Y_UNIT_TEST_SUITE(TThreadSafeCacheUnsafeTest) { UNIT_ASSERT(*data == VALS[i]); } } + UNIT_ASSERT_EQUAL(cache.TotalSize(), Y_ARRAY_SIZE(VALS) - 1); + UNIT_ASSERT_EQUAL(cache.Size(), Y_ARRAY_SIZE(VALS) - 1); } } @@ -532,6 +595,8 @@ Y_UNIT_TEST_SUITE(TThreadSafeLRUCacheTest) { cache.Update(2, MakeAtomicShared<TString>("hjk")); item = cache.Get(2); + UNIT_ASSERT_EQUAL(cache.TotalSize(), 1); + UNIT_ASSERT_EQUAL(cache.Size(), 1); UNIT_ASSERT(callbacks.Creations == 0); UNIT_ASSERT(*item == "hjk"); } @@ -630,17 +695,23 @@ Y_UNIT_TEST_SUITE(TThreadSafeLRUCacheTest) { UNIT_ASSERT_EQUAL(callbacks.Creations, expectedCreations); UNIT_ASSERT(*item == "one"); + UNIT_ASSERT_EQUAL(cache.TotalSize(), 3); + UNIT_ASSERT_EQUAL(cache.Size(), 3); cache.SetMaxSize(4); item = cache.Get(0); expectedCreations++; UNIT_ASSERT_EQUAL(callbacks.Creations, expectedCreations); UNIT_ASSERT(*item == "zero"); + UNIT_ASSERT_EQUAL(cache.TotalSize(), 4); + UNIT_ASSERT_EQUAL(cache.Size(), 4); item = cache.Get(4); expectedCreations++; UNIT_ASSERT_EQUAL(callbacks.Creations, expectedCreations); UNIT_ASSERT(*item == "four"); + UNIT_ASSERT_EQUAL(cache.TotalSize(), 4); + UNIT_ASSERT_EQUAL(cache.Size(), 4); item = cache.Get(3); expectedCreations++; diff --git a/library/cpp/sanitizer/address/dynamic/ya.make b/library/cpp/sanitizer/address/dynamic/ya.make index c892849414..4d76cb57f5 100644 --- a/library/cpp/sanitizer/address/dynamic/ya.make +++ b/library/cpp/sanitizer/address/dynamic/ya.make @@ -1,6 +1,6 @@ DYNAMIC_LIBRARY() -OWNER(g:devtools-contrib) +SUBSCRIBER(g:devtools-contrib) NO_UTIL() diff --git a/library/cpp/sanitizer/address/static/ya.make b/library/cpp/sanitizer/address/static/ya.make index ddbd90f2f9..d8cf24a848 100644 --- a/library/cpp/sanitizer/address/static/ya.make +++ b/library/cpp/sanitizer/address/static/ya.make @@ -1,6 +1,6 @@ LIBRARY() -OWNER(g:devtools-contrib) +SUBSCRIBER(g:devtools-contrib) NO_UTIL() diff --git a/library/cpp/sanitizer/leak/dynamic/ya.make b/library/cpp/sanitizer/leak/dynamic/ya.make index 79dcd4ad37..f52f739c77 100644 --- a/library/cpp/sanitizer/leak/dynamic/ya.make +++ b/library/cpp/sanitizer/leak/dynamic/ya.make @@ -1,6 +1,6 @@ DYNAMIC_LIBRARY() -OWNER(g:devtools-contrib) +SUBSCRIBER(g:devtools-contrib) NO_UTIL() diff --git a/library/cpp/sanitizer/leak/static/ya.make b/library/cpp/sanitizer/leak/static/ya.make index 0d5a8fdfd7..27005709fe 100644 --- a/library/cpp/sanitizer/leak/static/ya.make +++ b/library/cpp/sanitizer/leak/static/ya.make @@ -1,6 +1,6 @@ LIBRARY() -OWNER(g:devtools-contrib) +SUBSCRIBER(g:devtools-contrib) NO_UTIL() diff --git a/library/cpp/sanitizer/memory/static/ya.make b/library/cpp/sanitizer/memory/static/ya.make index e6bb9c8c75..ab10fb9c88 100644 --- a/library/cpp/sanitizer/memory/static/ya.make +++ b/library/cpp/sanitizer/memory/static/ya.make @@ -1,6 +1,6 @@ LIBRARY() -OWNER(g:devtools-contrib) +SUBSCRIBER(g:devtools-contrib) NO_UTIL() diff --git a/library/cpp/sanitizer/thread/dynamic/ya.make b/library/cpp/sanitizer/thread/dynamic/ya.make index 4d15cb066e..84d4db4b40 100644 --- a/library/cpp/sanitizer/thread/dynamic/ya.make +++ b/library/cpp/sanitizer/thread/dynamic/ya.make @@ -1,6 +1,6 @@ DYNAMIC_LIBRARY() -OWNER(g:devtools-contrib) +SUBSCRIBER(g:devtools-contrib) NO_UTIL() diff --git a/library/cpp/sanitizer/thread/static/ya.make b/library/cpp/sanitizer/thread/static/ya.make index f5bc931a51..0a09b0098c 100644 --- a/library/cpp/sanitizer/thread/static/ya.make +++ b/library/cpp/sanitizer/thread/static/ya.make @@ -1,6 +1,6 @@ LIBRARY() -OWNER(g:devtools-contrib) +SUBSCRIBER(g:devtools-contrib) NO_UTIL() diff --git a/library/cpp/sanitizer/undefined/dynamic/ya.make b/library/cpp/sanitizer/undefined/dynamic/ya.make index 330018d006..7b3778f85a 100644 --- a/library/cpp/sanitizer/undefined/dynamic/ya.make +++ b/library/cpp/sanitizer/undefined/dynamic/ya.make @@ -1,6 +1,6 @@ DYNAMIC_LIBRARY() -OWNER(g:devtools-contrib) +SUBSCRIBER(g:devtools-contrib) NO_UTIL() diff --git a/library/cpp/sanitizer/undefined/static/ya.make b/library/cpp/sanitizer/undefined/static/ya.make index bab3149e74..3077d8ee56 100644 --- a/library/cpp/sanitizer/undefined/static/ya.make +++ b/library/cpp/sanitizer/undefined/static/ya.make @@ -1,6 +1,6 @@ LIBRARY() -OWNER(g:devtools-contrib) +SUBSCRIBER(g:devtools-contrib) NO_UTIL() diff --git a/library/cpp/tld/tlds-alpha-by-domain.txt b/library/cpp/tld/tlds-alpha-by-domain.txt index 24c895894d..29dc81150d 100644 --- a/library/cpp/tld/tlds-alpha-by-domain.txt +++ b/library/cpp/tld/tlds-alpha-by-domain.txt @@ -1,4 +1,4 @@ -# Version 2024041900, Last Updated Fri Apr 19 07:07:01 2024 UTC +# Version 2024050100, Last Updated Wed May 1 07:07:01 2024 UTC AAA AARP ABB diff --git a/library/cpp/yt/cpu_clock/clock.cpp b/library/cpp/yt/cpu_clock/clock.cpp index 0ed65e3b92..22f665e1d3 100644 --- a/library/cpp/yt/cpu_clock/clock.cpp +++ b/library/cpp/yt/cpu_clock/clock.cpp @@ -31,18 +31,16 @@ double GetTicksToMicroseconds() return TicksToMicroseconds; } -TCalibrationState GetCalibrationState(TCpuInstant cpuInstant) +YT_PREVENT_TLS_CACHING TCalibrationState GetCalibrationState(TCpuInstant cpuInstant) { - YT_THREAD_LOCAL(TCalibrationState) State; + thread_local TCalibrationState State; - auto& state = GetTlsRef(State); - - if (state.CpuInstant + CalibrationCpuPeriod < cpuInstant) { - state.CpuInstant = cpuInstant; - state.Instant = TInstant::Now(); + if (State.CpuInstant + CalibrationCpuPeriod < cpuInstant) { + State.CpuInstant = cpuInstant; + State.Instant = TInstant::Now(); } - return state; + return State; } TCalibrationState GetCalibrationState() diff --git a/library/cpp/yt/logging/logger-inl.h b/library/cpp/yt/logging/logger-inl.h index 5e2b6795dc..d076b3690e 100644 --- a/library/cpp/yt/logging/logger-inl.h +++ b/library/cpp/yt/logging/logger-inl.h @@ -90,20 +90,8 @@ protected: void DoReserve(size_t newLength) override; private: - struct TPerThreadCache - { - ~TPerThreadCache(); - - TSharedMutableRef Chunk; - size_t ChunkOffset = 0; - }; - TSharedMutableRef Buffer_; - static YT_THREAD_LOCAL(TPerThreadCache*) Cache_; - static YT_THREAD_LOCAL(bool) CacheDestroyed_; - static TPerThreadCache* GetCache(); - static constexpr size_t ChunkSize = 128_KB - 64; }; diff --git a/library/cpp/yt/logging/logger.cpp b/library/cpp/yt/logging/logger.cpp index c11457f836..58add38429 100644 --- a/library/cpp/yt/logging/logger.cpp +++ b/library/cpp/yt/logging/logger.cpp @@ -34,15 +34,45 @@ TSharedRef TMessageStringBuilder::Flush() return Buffer_.Slice(0, GetLength()); } -void TMessageStringBuilder::DisablePerThreadCache() +void TMessageStringBuilder::DoReset() { - Cache_ = nullptr; - CacheDestroyed_ = true; + Buffer_.Reset(); } -void TMessageStringBuilder::DoReset() +struct TPerThreadCache; + +YT_DEFINE_THREAD_LOCAL(TPerThreadCache*, Cache); +YT_DEFINE_THREAD_LOCAL(bool, CacheDestroyed); + +struct TPerThreadCache { - Buffer_.Reset(); + TSharedMutableRef Chunk; + size_t ChunkOffset = 0; + + ~TPerThreadCache() + { + TMessageStringBuilder::DisablePerThreadCache(); + } + + static YT_PREVENT_TLS_CACHING TPerThreadCache* GetCache() + { + auto& cache = Cache(); + if (Y_LIKELY(cache)) { + return cache; + } + if (CacheDestroyed()) { + return nullptr; + } + static thread_local TPerThreadCache CacheData; + cache = &CacheData; + return cache; + } +}; + +void TMessageStringBuilder::DisablePerThreadCache() +{ + Cache() = nullptr; + CacheDestroyed() = true; } void TMessageStringBuilder::DoReserve(size_t newCapacity) @@ -53,7 +83,7 @@ void TMessageStringBuilder::DoReserve(size_t newCapacity) auto newChunkSize = std::max(ChunkSize, newCapacity); // Hold the old buffer until the data is copied. auto oldBuffer = std::move(Buffer_); - auto* cache = GetCache(); + auto* cache = TPerThreadCache::GetCache(); if (Y_LIKELY(cache)) { auto oldCapacity = End_ - Begin_; auto deltaCapacity = newCapacity - oldCapacity; @@ -85,27 +115,6 @@ void TMessageStringBuilder::DoReserve(size_t newCapacity) End_ = Begin_ + newCapacity; } -TMessageStringBuilder::TPerThreadCache* TMessageStringBuilder::GetCache() -{ - if (Y_LIKELY(Cache_)) { - return Cache_; - } - if (CacheDestroyed_) { - return nullptr; - } - static YT_THREAD_LOCAL(TPerThreadCache) Cache; - Cache_ = &GetTlsRef(Cache); - return Cache_; -} - -TMessageStringBuilder::TPerThreadCache::~TPerThreadCache() -{ - TMessageStringBuilder::DisablePerThreadCache(); -} - -YT_THREAD_LOCAL(TMessageStringBuilder::TPerThreadCache*) TMessageStringBuilder::Cache_; -YT_THREAD_LOCAL(bool) TMessageStringBuilder::CacheDestroyed_; - } // namespace NDetail //////////////////////////////////////////////////////////////////////////////// @@ -126,16 +135,16 @@ Y_WEAK ILogManager* GetDefaultLogManager() //////////////////////////////////////////////////////////////////////////////// -YT_THREAD_LOCAL(ELogLevel) ThreadMinLogLevel = ELogLevel::Minimum; +YT_DEFINE_THREAD_LOCAL(ELogLevel, ThreadMinLogLevel, ELogLevel::Minimum); void SetThreadMinLogLevel(ELogLevel minLogLevel) { - ThreadMinLogLevel = minLogLevel; + ThreadMinLogLevel() = minLogLevel; } ELogLevel GetThreadMinLogLevel() { - return ThreadMinLogLevel; + return ThreadMinLogLevel(); } //////////////////////////////////////////////////////////////////////////////// @@ -173,7 +182,7 @@ bool TLogger::IsLevelEnabledHeavy(ELogLevel level) const return level >= Category_->MinPlainTextLevel && - level >= ThreadMinLogLevel; + level >= ThreadMinLogLevel(); } bool TLogger::GetAbortOnAlert() const diff --git a/library/cpp/yt/logging/logger.h b/library/cpp/yt/logging/logger.h index 082afcddd8..0913b9ea08 100644 --- a/library/cpp/yt/logging/logger.h +++ b/library/cpp/yt/logging/logger.h @@ -324,8 +324,8 @@ void LogStructuredEvent( break; \ } \ \ - static YT_THREAD_LOCAL(i64) localByteCounter__; \ - static YT_THREAD_LOCAL(ui8) localMessageCounter__; \ + static thread_local i64 localByteCounter__; \ + static thread_local ui8 localMessageCounter__; \ \ localByteCounter__ += message__.MessageRef.Size(); \ if (Y_UNLIKELY(++localMessageCounter__ == 0)) { \ diff --git a/library/cpp/yt/memory/memory_tag.cpp b/library/cpp/yt/memory/memory_tag.cpp index ebb0b43370..ee6a1a4ad0 100644 --- a/library/cpp/yt/memory/memory_tag.cpp +++ b/library/cpp/yt/memory/memory_tag.cpp @@ -8,16 +8,16 @@ namespace NYT { //////////////////////////////////////////////////////////////////////////////// -YT_THREAD_LOCAL(TMemoryTag) CurrentMemoryTag; +YT_DEFINE_THREAD_LOCAL(TMemoryTag, CurrentMemoryTag); Y_WEAK TMemoryTag GetCurrentMemoryTag() { - return CurrentMemoryTag; + return CurrentMemoryTag(); } Y_WEAK void SetCurrentMemoryTag(TMemoryTag tag) { - CurrentMemoryTag = tag; + CurrentMemoryTag() = tag; } Y_WEAK size_t GetMemoryUsageForTag(TMemoryTag /*tag*/) diff --git a/library/cpp/yt/memory/tls_scratch-inl.h b/library/cpp/yt/memory/tls_scratch-inl.h index 32c26d67c0..0b4ef29bea 100644 --- a/library/cpp/yt/memory/tls_scratch-inl.h +++ b/library/cpp/yt/memory/tls_scratch-inl.h @@ -6,21 +6,23 @@ #include <library/cpp/yt/misc/tls.h> +#include <util/generic/bitops.h> + namespace NYT { //////////////////////////////////////////////////////////////////////////////// template <class T> -TMutableRange<T> GetTlsScratchBuffer(size_t size) +YT_PREVENT_TLS_CACHING TMutableRange<T> GetTlsScratchBuffer(size_t size) { - // This is a workround for std::vector<bool>. - using TBoxed = std::array<T, 1>; - YT_THREAD_LOCAL(std::vector<TBoxed>) tlsVector; - auto& vector = GetTlsRef(tlsVector); - vector.reserve(size); - auto range = TMutableRange(reinterpret_cast<T*>(vector.data()), size); - std::fill(range.begin(), range.end(), T()); - return range; + thread_local std::unique_ptr<T[]> scratchBuffer; + thread_local size_t scratchBufferSize; + if (scratchBufferSize < size) { + scratchBufferSize = FastClp2(size); + scratchBuffer = std::unique_ptr<T[]>(new T[scratchBufferSize]); + } + std::fill(scratchBuffer.get(), scratchBuffer.get() + size, T()); + return TMutableRange(scratchBuffer.get(), size); } //////////////////////////////////////////////////////////////////////////////// diff --git a/library/cpp/yt/misc/thread_name.cpp b/library/cpp/yt/misc/thread_name.cpp index d59043db51..bb1737b08a 100644 --- a/library/cpp/yt/misc/thread_name.cpp +++ b/library/cpp/yt/misc/thread_name.cpp @@ -29,19 +29,18 @@ TThreadName::TThreadName(const TString& name) //////////////////////////////////////////////////////////////////////////////// // This function uses cached TThread::CurrentThreadName() result -TThreadName GetCurrentThreadName() +YT_PREVENT_TLS_CACHING TThreadName GetCurrentThreadName() { - static YT_THREAD_LOCAL(TThreadName) ThreadName; - auto& threadName = GetTlsRef(ThreadName); + static thread_local TThreadName ThreadName; - if (threadName.Length == 0) { + if (ThreadName.Length == 0) { if (auto name = TThread::CurrentThreadName()) { auto length = std::min<int>(TThreadName::BufferCapacity - 1, name.length()); - threadName.Length = length; - ::memcpy(threadName.Buffer.data(), name.data(), length); + ThreadName.Length = length; + ::memcpy(ThreadName.Buffer.data(), name.data(), length); } } - return threadName; + return ThreadName; } //////////////////////////////////////////////////////////////////////////////// diff --git a/library/cpp/yt/misc/tls-inl.h b/library/cpp/yt/misc/tls-inl.h deleted file mode 100644 index 51ef91517f..0000000000 --- a/library/cpp/yt/misc/tls-inl.h +++ /dev/null @@ -1,18 +0,0 @@ -#ifndef TLS_INL_H_ -#error "Direct inclusion of this file is not allowed, include tls.h" -// For the sake of sane code completion. -#include "tls.h" -#endif - -namespace NYT { - -//////////////////////////////////////////////////////////////////////////////// - -template <class T> -T& GetTlsRef(volatile T& arg) -{ - return const_cast<T&>(arg); -} -//////////////////////////////////////////////////////////////////////////////// - -} // namespace NYT diff --git a/library/cpp/yt/misc/tls.h b/library/cpp/yt/misc/tls.h index d1bda8ac68..a0656dedc1 100644 --- a/library/cpp/yt/misc/tls.h +++ b/library/cpp/yt/misc/tls.h @@ -2,21 +2,17 @@ #include <util/system/compiler.h> -// Workaround for fiber (un)friendly TLS. -// Volatile qualifier prevents caching access to thread local variables. -#define YT_THREAD_LOCAL(...) thread_local __VA_ARGS__ volatile - -namespace NYT { - -//////////////////////////////////////////////////////////////////////////////// +#define YT_PREVENT_TLS_CACHING Y_NO_INLINE -template <class T> -Y_FORCE_INLINE T& GetTlsRef(volatile T& arg); - -//////////////////////////////////////////////////////////////////////////////// +// Workaround for fiber (un)friendly TLS. +#define YT_DECLARE_THREAD_LOCAL(type, name) \ + type& name(); -} // namespace NYT +#define YT_DEFINE_THREAD_LOCAL(type, name, ...) \ + thread_local type name##Data { __VA_ARGS__ }; \ + Y_NO_INLINE type& name() \ + { \ + asm volatile(""); \ + return name##Data; \ + } -#define TLS_INL_H_ -#include "tls-inl.h" -#undef TLS_INL_H_ diff --git a/library/cpp/yt/system/thread_id-inl.h b/library/cpp/yt/system/thread_id-inl.h index 73434145e3..916d70436e 100644 --- a/library/cpp/yt/system/thread_id-inl.h +++ b/library/cpp/yt/system/thread_id-inl.h @@ -14,15 +14,16 @@ namespace NYT { //////////////////////////////////////////////////////////////////////////////// -extern YT_THREAD_LOCAL(TSequentialThreadId) CachedSequentialThreadId; +YT_DECLARE_THREAD_LOCAL(TSequentialThreadId, CachedSequentialThreadId); extern std::atomic<TSequentialThreadId> SequentialThreadIdGenerator; inline TSequentialThreadId GetSequentialThreadId() { - if (Y_UNLIKELY(CachedSequentialThreadId == InvalidSequentialThreadId)) { - CachedSequentialThreadId = ++SequentialThreadIdGenerator; + auto& cachedSequentialThreadId = CachedSequentialThreadId(); + if (Y_UNLIKELY(cachedSequentialThreadId == InvalidSequentialThreadId)) { + cachedSequentialThreadId = ++SequentialThreadIdGenerator; } - return CachedSequentialThreadId; + return cachedSequentialThreadId; } //////////////////////////////////////////////////////////////////////////////// diff --git a/library/cpp/yt/system/thread_id.cpp b/library/cpp/yt/system/thread_id.cpp index 1ecf1fe9bd..a1971dd0dd 100644 --- a/library/cpp/yt/system/thread_id.cpp +++ b/library/cpp/yt/system/thread_id.cpp @@ -6,7 +6,7 @@ namespace NYT { //////////////////////////////////////////////////////////////////////////////// -YT_THREAD_LOCAL(TSequentialThreadId) CachedSequentialThreadId = InvalidSequentialThreadId; +YT_DEFINE_THREAD_LOCAL(TSequentialThreadId, CachedSequentialThreadId, InvalidSequentialThreadId); std::atomic<TSequentialThreadId> SequentialThreadIdGenerator = InvalidSequentialThreadId; TSystemThreadId GetSystemThreadId() diff --git a/library/cpp/yt/threading/spin_lock_count.cpp b/library/cpp/yt/threading/spin_lock_count.cpp index 501a8bd73e..b1670e92d4 100644 --- a/library/cpp/yt/threading/spin_lock_count.cpp +++ b/library/cpp/yt/threading/spin_lock_count.cpp @@ -13,26 +13,26 @@ namespace NYT::NThreading::NPrivate { //////////////////////////////////////////////////////////////////////////////// -YT_THREAD_LOCAL(i64) ActiveSpinLockCount = 0; +YT_DEFINE_THREAD_LOCAL(i64, ActiveSpinLockCount, 0); //////////////////////////////////////////////////////////////////////////////// void RecordSpinLockAcquired(bool isAcquired) { if (isAcquired) { - ActiveSpinLockCount++; + ActiveSpinLockCount()++; } } void RecordSpinLockReleased() { - YT_VERIFY(ActiveSpinLockCount > 0); - ActiveSpinLockCount--; + YT_VERIFY(ActiveSpinLockCount() > 0); + ActiveSpinLockCount()--; } void VerifyNoSpinLockAffinity() { - YT_VERIFY(ActiveSpinLockCount == 0); + YT_VERIFY(ActiveSpinLockCount() == 0); } #endif diff --git a/util/generic/intrlist.h b/util/generic/intrlist.h index b5d3f2051b..2982e3a281 100644 --- a/util/generic/intrlist.h +++ b/util/generic/intrlist.h @@ -39,7 +39,7 @@ public: Prev_->SetNext(Next_); Next_->SetPrev(Prev_); - SetEnd(); + ResetItem(); } inline void LinkBefore(TListItem* before) noexcept { @@ -87,11 +87,6 @@ public: } public: - inline void SetEnd() noexcept { - Prev_ = this; - Next_ = Prev_; - } - inline void SetNext(TListItem* item) noexcept { Next_ = item; } @@ -109,6 +104,28 @@ public: return static_cast<const T*>(this); } +public: + // NB(arkady-e1ppa): These methods are used to implement + // intrusive lock-free algorithms which want to natively + // interact with TIntrusiveList. + // Assume that if you've used MutableNext/MutablePrev + // methods, you are not safe to use anything but + // MutableNext/MutablePrev/ResetItem methods until + // you call a ResetItem method. + + inline TListItem*& MutableNext() noexcept { + return Next_; + } + + inline TListItem*& MutablePrev() noexcept { + return Prev_; + } + + inline void ResetItem() noexcept { + Next_ = this; + Prev_ = Next_; + } + private: inline TIntrusiveListItem(const TIntrusiveListItem&) = delete; inline TIntrusiveListItem& operator=(const TIntrusiveListItem&) = delete; @@ -508,6 +525,10 @@ public: Cut(list.Begin(), list.End(), End()); } + inline void Append(TIntrusiveList&& list) noexcept { + Append(list); + } + inline static void Cut(TIterator begin, TIterator end, TIterator pasteBefore) noexcept { if (begin == end) { return; @@ -39,33 +39,33 @@ REGISTRY_ENDPOINT = os.environ.get("YA_REGISTRY_ENDPOINT", "https://devtools-reg PLATFORM_MAP = { "data": { "darwin": { - "md5": "45c63c225f789d33a465ae3d5b64f7ef", + "md5": "98fce052c355a5c1dacfe257ea0b54e2", "urls": [ - f"{REGISTRY_ENDPOINT}/6178064410" + f"{REGISTRY_ENDPOINT}/6277096466" ] }, "darwin-arm64": { - "md5": "e6f6dbc072ff1872a9d5fb9324ea1d31", + "md5": "7b3ab36c735336d3a312b7b57b9e4629", "urls": [ - f"{REGISTRY_ENDPOINT}/6178063973" + f"{REGISTRY_ENDPOINT}/6277096015" ] }, "linux-aarch64": { - "md5": "ad86306e4e3658cd8cfc95292d7b5a10", + "md5": "1fc1f4d3aa3771f454dafe05d03077fb", "urls": [ - f"{REGISTRY_ENDPOINT}/6178063478" + f"{REGISTRY_ENDPOINT}/6277095795" ] }, "win32-clang-cl": { - "md5": "f4df6cde99415f82f3ec5827918b65e4", + "md5": "2ed3f6a16b3b030af790f7e6dcaa6df0", "urls": [ - f"{REGISTRY_ENDPOINT}/6178065184" + f"{REGISTRY_ENDPOINT}/6277096729" ] }, "linux": { - "md5": "38099bfe05628c5a677631730558333a", + "md5": "3b6d7e0201a75392b0cdd9d5ad1e5ac0", "urls": [ - f"{REGISTRY_ENDPOINT}/6178066131" + f"{REGISTRY_ENDPOINT}/6277096978" ] } } diff --git a/yt/cpp/mapreduce/interface/client.h b/yt/cpp/mapreduce/interface/client.h index 2b118214d3..56efa3c23c 100644 --- a/yt/cpp/mapreduce/interface/client.h +++ b/yt/cpp/mapreduce/interface/client.h @@ -185,7 +185,7 @@ public: /// /// @brief Try to lock given path. /// - /// Lock will be held until transaction is commited/aborted or @ref NYT::ITransaction::Unlock method is called. + /// Lock will be held until transaction is committed/aborted or @ref NYT::ITransaction::Unlock method is called. /// Lock modes: /// - `LM_EXCLUSIVE`: if exclusive lock is taken no other transaction can take exclusive or shared lock. /// - `LM_SHARED`: if shared lock is taken other transactions can take shared lock but not exclusive. diff --git a/yt/yt/client/api/admin_client.h b/yt/yt/client/api/admin_client.h index 8a374df98c..b81b7a0f9b 100644 --- a/yt/yt/client/api/admin_client.h +++ b/yt/yt/client/api/admin_client.h @@ -161,7 +161,7 @@ struct TResurrectChunkLocationsResult struct TMasterConsistentState { i64 SequenceNumber; - i64 SegmentId; + int SegmentId; }; using TCellIdToSnapshotIdMap = THashMap<NHydra::TCellId, int>; diff --git a/yt/yt/client/chaos_client/replication_card.cpp b/yt/yt/client/chaos_client/replication_card.cpp index ec61deb64d..fa75f29ccb 100644 --- a/yt/yt/client/chaos_client/replication_card.cpp +++ b/yt/yt/client/chaos_client/replication_card.cpp @@ -61,6 +61,36 @@ void FormatProgressWithProjection( builder->AppendChar(']'); } +DEFINE_BIT_ENUM_WITH_UNDERLYING_TYPE(EReplicationCardOptionsBits, ui8, + ((None)(0)) + ((IncludeCoordinators)(1 << 0)) + ((IncludeProgress)(1 << 1)) + ((IncludeHistory)(1 << 2)) + ((IncludeReplicatedTableOptions)(1 << 3)) +); + +EReplicationCardOptionsBits ToBitMask(const TReplicationCardFetchOptions& options) +{ + auto mask = EReplicationCardOptionsBits::None; + if (options.IncludeCoordinators) { + mask |= EReplicationCardOptionsBits::IncludeCoordinators; + } + + if (options.IncludeProgress) { + mask |= EReplicationCardOptionsBits::IncludeProgress; + } + + if (options.IncludeHistory) { + mask |= EReplicationCardOptionsBits::IncludeHistory; + } + + if (options.IncludeReplicatedTableOptions) { + mask |= EReplicationCardOptionsBits::IncludeReplicatedTableOptions; + } + + return mask; +} + } // namespace NDetail //////////////////////////////////////////////////////////////////////////////// @@ -86,6 +116,12 @@ TString ToString(const TReplicationCardFetchOptions& options) return ToStringViaBuilder(options); } +bool TReplicationCardFetchOptions::Contains(const TReplicationCardFetchOptions& other) const +{ + auto selfMask = NDetail::ToBitMask(*this); + return (selfMask | NDetail::ToBitMask(other)) == selfMask; +} + //////////////////////////////////////////////////////////////////////////////// void FormatValue( diff --git a/yt/yt/client/chaos_client/replication_card.h b/yt/yt/client/chaos_client/replication_card.h index 58a2cc8f0c..62daba4e14 100644 --- a/yt/yt/client/chaos_client/replication_card.h +++ b/yt/yt/client/chaos_client/replication_card.h @@ -91,6 +91,8 @@ struct TReplicationCardFetchOptions operator size_t() const; bool operator == (const TReplicationCardFetchOptions& other) const = default; + + bool Contains(const TReplicationCardFetchOptions& other) const; }; void FormatValue(TStringBuilderBase* builder, const TReplicationCardFetchOptions& options, TStringBuf /*spec*/); diff --git a/yt/yt/client/chunk_client/public.h b/yt/yt/client/chunk_client/public.h index b6c7b0080b..bbf3975db6 100644 --- a/yt/yt/client/chunk_client/public.h +++ b/yt/yt/client/chunk_client/public.h @@ -84,6 +84,8 @@ YT_DEFINE_ERROR_ENUM( ((LocationDisabled) (755)) ((DiskFailed) (756)) ((DiskWaitingReplacement) (757)) + ((LockFileIsFound) (758)) + ((DiskHealthCheckFailed) (759)) ); using TChunkId = NObjectClient::TObjectId; diff --git a/yt/yt/client/driver/driver.cpp b/yt/yt/client/driver/driver.cpp index a57237f46b..9371be5f03 100644 --- a/yt/yt/client/driver/driver.cpp +++ b/yt/yt/client/driver/driver.cpp @@ -300,12 +300,12 @@ public: REGISTER_ALL(TGetOperationCommand, "get_operation", Null, Structured, false, false); REGISTER (TDumpJobContextCommand, "dump_job_context", Null, Null, true, false, ApiVersion3); - REGISTER (TAbandonJobCommand, "abandon_job", Null, Null, false, false, ApiVersion3); - REGISTER (TAbortJobCommand, "abort_job", Null, Null, false, false, ApiVersion3); + REGISTER (TAbandonJobCommand, "abandon_job", Null, Null, true, false, ApiVersion3); + REGISTER (TAbortJobCommand, "abort_job", Null, Null, true, false, ApiVersion3); REGISTER (TDumpJobContextCommand, "dump_job_context", Null, Structured, true, false, ApiVersion4); - REGISTER (TAbandonJobCommand, "abandon_job", Null, Structured, false, false, ApiVersion4); - REGISTER (TAbortJobCommand, "abort_job", Null, Structured, false, false, ApiVersion4); + REGISTER (TAbandonJobCommand, "abandon_job", Null, Structured, true, false, ApiVersion4); + REGISTER (TAbortJobCommand, "abort_job", Null, Structured, true, false, ApiVersion4); REGISTER_ALL(TGetVersionCommand, "get_version", Null, Structured, false, false); REGISTER_ALL(TGetSupportedFeaturesCommand, "get_supported_features", Null, Structured, false, false); @@ -324,66 +324,66 @@ public: REGISTER_ALL(TResetStateHashCommand, "reset_state_hash", Null, Structured, true, false); REGISTER_ALL(THealExecNodeCommand, "heal_exec_node", Null, Structured, true, false); - REGISTER_ALL(TSuspendCoordinatorCommand, "suspend_coordinator", Null, Structured, false, false); - REGISTER_ALL(TResumeCoordinatorCommand, "resume_coordinator", Null, Structured, false, false); - REGISTER_ALL(TMigrateReplicationCardsCommand, "migrate_replication_cards", Null, Structured, false, false); - REGISTER_ALL(TSuspendChaosCellsCommand, "suspend_chaos_cells", Null, Structured, false, false); - REGISTER_ALL(TResumeChaosCellsCommand, "resume_chaos_cells", Null, Structured, false, false); + REGISTER_ALL(TSuspendCoordinatorCommand, "suspend_coordinator", Null, Structured, true, false); + REGISTER_ALL(TResumeCoordinatorCommand, "resume_coordinator", Null, Structured, true, false); + REGISTER_ALL(TMigrateReplicationCardsCommand, "migrate_replication_cards", Null, Structured, true, false); + REGISTER_ALL(TSuspendChaosCellsCommand, "suspend_chaos_cells", Null, Structured, true, false); + REGISTER_ALL(TResumeChaosCellsCommand, "resume_chaos_cells", Null, Structured, true, false); - REGISTER_ALL(TSuspendTabletCellsCommand, "suspend_tablet_cells", Null, Structured, false, false); - REGISTER_ALL(TResumeTabletCellsCommand, "resume_tablet_cells", Null, Structured, false, false); + REGISTER_ALL(TSuspendTabletCellsCommand, "suspend_tablet_cells", Null, Structured, true, false); + REGISTER_ALL(TResumeTabletCellsCommand, "resume_tablet_cells", Null, Structured, true, false); REGISTER (TAddMaintenanceCommand, "add_maintenance", Null, Structured, true, false, ApiVersion4); REGISTER (TRemoveMaintenanceCommand, "remove_maintenance", Null, Structured, true, false, ApiVersion4); - REGISTER_ALL(TDisableChunkLocationsCommand, "disable_chunk_locations", Null, Structured, false, false); - REGISTER_ALL(TDestroyChunkLocationsCommand, "destroy_chunk_locations", Null, Structured, false, false); - REGISTER_ALL(TResurrectChunkLocationsCommand, "resurrect_chunk_locations", Null, Structured, false, false); - REGISTER_ALL(TRequestRestartCommand, "request_restart", Null, Structured, false, false); - - REGISTER_ALL(TSetUserPasswordCommand, "set_user_password", Null, Structured, false, false); - REGISTER_ALL(TIssueTokenCommand, "issue_token", Null, Structured, false, false); - REGISTER_ALL(TRevokeTokenCommand, "revoke_token", Null, Structured, false, false); + REGISTER_ALL(TDisableChunkLocationsCommand, "disable_chunk_locations", Null, Structured, true, false); + REGISTER_ALL(TDestroyChunkLocationsCommand, "destroy_chunk_locations", Null, Structured, true, false); + REGISTER_ALL(TResurrectChunkLocationsCommand, "resurrect_chunk_locations", Null, Structured, true, false); + REGISTER_ALL(TRequestRestartCommand, "request_restart", Null, Structured, true, false); + + REGISTER_ALL(TSetUserPasswordCommand, "set_user_password", Null, Structured, true, false); + REGISTER_ALL(TIssueTokenCommand, "issue_token", Null, Structured, true, false); + REGISTER_ALL(TRevokeTokenCommand, "revoke_token", Null, Structured, true, false); REGISTER_ALL(TListUserTokensCommand, "list_user_tokens", Null, Structured, false, false); - REGISTER (TRegisterQueueConsumerCommand, "register_queue_consumer", Null, Structured, false, false, ApiVersion4); - REGISTER (TUnregisterQueueConsumerCommand, "unregister_queue_consumer", Null, Structured, false, false, ApiVersion4); + REGISTER (TRegisterQueueConsumerCommand, "register_queue_consumer", Null, Structured, true, false, ApiVersion4); + REGISTER (TUnregisterQueueConsumerCommand, "unregister_queue_consumer", Null, Structured, true, false, ApiVersion4); REGISTER (TListQueueConsumerRegistrationsCommand, "list_queue_consumer_registrations", Null, Structured, false, false, ApiVersion4); REGISTER (TPullQueueCommand, "pull_queue", Null, Tabular, false, true, ApiVersion4); REGISTER (TPullConsumerCommand, "pull_consumer", Null, Tabular, false, true, ApiVersion4); - REGISTER (TAdvanceConsumerCommand, "advance_consumer", Null, Structured, true, true, ApiVersion4); + REGISTER (TAdvanceConsumerCommand, "advance_consumer", Null, Structured, true, false, ApiVersion4); - REGISTER (TStartQueryCommand, "start_query", Null, Structured, false, false, ApiVersion4); - REGISTER (TAbortQueryCommand, "abort_query", Null, Structured, false, false, ApiVersion4); + REGISTER (TStartQueryCommand, "start_query", Null, Structured, true, false, ApiVersion4); + REGISTER (TAbortQueryCommand, "abort_query", Null, Structured, true, false, ApiVersion4); REGISTER (TGetQueryCommand, "get_query", Null, Structured, false, false, ApiVersion4); REGISTER (TListQueriesCommand, "list_queries", Null, Structured, false, false, ApiVersion4); REGISTER (TGetQueryResultCommand, "get_query_result", Null, Structured, false, false, ApiVersion4); REGISTER (TReadQueryResultCommand, "read_query_result", Null, Tabular, false, true, ApiVersion4); - REGISTER (TAlterQueryCommand, "alter_query", Null, Tabular, false, false, ApiVersion4); + REGISTER (TAlterQueryCommand, "alter_query", Null, Tabular, true, false, ApiVersion4); REGISTER (TGetQueryTrackerInfoCommand, "get_query_tracker_info", Null, Structured, false, false, ApiVersion4); REGISTER_ALL(TGetBundleConfigCommand, "get_bundle_config", Null, Structured, false, false); - REGISTER_ALL(TSetBundleConfigCommand, "set_bundle_config", Structured, Null, false, false); + REGISTER_ALL(TSetBundleConfigCommand, "set_bundle_config", Structured, Null, true, false); - REGISTER (TGetPipelineSpecCommand, "get_pipeline_spec", Null, Structured, true, false, ApiVersion4); + REGISTER (TGetPipelineSpecCommand, "get_pipeline_spec", Null, Structured, false, false, ApiVersion4); REGISTER (TSetPipelineSpecCommand, "set_pipeline_spec", Structured, Structured, true, false, ApiVersion4); REGISTER (TRemovePipelineSpecCommand, "remove_pipeline_spec", Null, Structured, true, false, ApiVersion4); - REGISTER (TGetPipelineDynamicSpecCommand, "get_pipeline_dynamic_spec", Null, Structured, true, false, ApiVersion4); + REGISTER (TGetPipelineDynamicSpecCommand, "get_pipeline_dynamic_spec", Null, Structured, false, false, ApiVersion4); REGISTER (TSetPipelineDynamicSpecCommand, "set_pipeline_dynamic_spec", Structured, Structured, true, false, ApiVersion4); REGISTER (TRemovePipelineDynamicSpecCommand, "remove_pipeline_dynamic_spec", Null, Structured, true, false, ApiVersion4); - REGISTER (TStartPipelineCommand, "start_pipeline", Null, Structured, false, false, ApiVersion4); - REGISTER (TStopPipelineCommand, "stop_pipeline", Null, Structured, false, false, ApiVersion4); - REGISTER (TPausePipelineCommand, "pause_pipeline", Null, Structured, false, false, ApiVersion4); + REGISTER (TStartPipelineCommand, "start_pipeline", Null, Structured, true, false, ApiVersion4); + REGISTER (TStopPipelineCommand, "stop_pipeline", Null, Structured, true, false, ApiVersion4); + REGISTER (TPausePipelineCommand, "pause_pipeline", Null, Structured, true, false, ApiVersion4); if (Config_->EnableInternalCommands) { REGISTER_ALL(TReadHunksCommand, "read_hunks", Null, Structured, false, true ); - REGISTER_ALL(TWriteHunksCommand, "write_hunks", Null, Structured, false, true ); - REGISTER_ALL(TLockHunkStoreCommand, "lock_hunk_store", Null, Structured, false, true ); - REGISTER_ALL(TUnlockHunkStoreCommand, "unlock_hunk_store", Null, Structured, false, true ); + REGISTER_ALL(TWriteHunksCommand, "write_hunks", Null, Structured, true, true ); + REGISTER_ALL(TLockHunkStoreCommand, "lock_hunk_store", Null, Structured, true, true ); + REGISTER_ALL(TUnlockHunkStoreCommand, "unlock_hunk_store", Null, Structured, true, true ); REGISTER_ALL(TGetConnectionConfigCommand, "get_connection_config", Null, Structured, false, false); - REGISTER_ALL(TIssueLeaseCommand, "issue_lease", Null, Structured, false, false); - REGISTER_ALL(TRevokeLeaseCommand, "revoke_lease", Null, Structured, false, false); - REGISTER_ALL(TReferenceLeaseCommand, "reference_lease", Null, Structured, false, false); - REGISTER_ALL(TUnreferenceLeaseCommand, "unreference_lease", Null, Structured, false, false); + REGISTER_ALL(TIssueLeaseCommand, "issue_lease", Null, Structured, true, false); + REGISTER_ALL(TRevokeLeaseCommand, "revoke_lease", Null, Structured, true, false); + REGISTER_ALL(TReferenceLeaseCommand, "reference_lease", Null, Structured, true, false); + REGISTER_ALL(TUnreferenceLeaseCommand, "unreference_lease", Null, Structured, true, false); } #undef REGISTER diff --git a/yt/yt/client/hive/public.h b/yt/yt/client/hive/public.h index 0c8d010ecc..ac1e725e94 100644 --- a/yt/yt/client/hive/public.h +++ b/yt/yt/client/hive/public.h @@ -34,7 +34,7 @@ DECLARE_REFCOUNTED_STRUCT(ITransactionParticipant) YT_DEFINE_ERROR_ENUM( ((MailboxNotCreatedYet) (2200)) ((ParticipantUnregistered) (2201)) - ((TimeEntryNotFound) (2202)) + ((TimeEntryNotFound) (2202)) ); //////////////////////////////////////////////////////////////////////////////// diff --git a/yt/yt/client/object_client/public.cpp b/yt/yt/client/object_client/public.cpp index cf368cc1c9..11eb2f1a6b 100644 --- a/yt/yt/client/object_client/public.cpp +++ b/yt/yt/client/object_client/public.cpp @@ -8,8 +8,6 @@ namespace NYT::NObjectClient { //////////////////////////////////////////////////////////////////////////////// -const TStringBuf ObjectIdPathPrefix("#"); - TVersionedObjectId::TVersionedObjectId(TObjectId objectId) : ObjectId(objectId) { } diff --git a/yt/yt/client/object_client/public.h b/yt/yt/client/object_client/public.h index bdb18fa02d..fa6c90fa38 100644 --- a/yt/yt/client/object_client/public.h +++ b/yt/yt/client/object_client/public.h @@ -48,7 +48,7 @@ using TObjectId = TGuid; constexpr TObjectId NullObjectId = {}; //! |#|-prefix. -extern const TStringBuf ObjectIdPathPrefix; +inline const TStringBuf ObjectIdPathPrefix = "#"; //! Used to mark counters for well-known ids. constexpr ui64 WellKnownCounterMask = 0x8000000000000000; diff --git a/yt/yt/client/table_client/composite_compare.cpp b/yt/yt/client/table_client/composite_compare.cpp index 0031bef401..24d2c755ec 100644 --- a/yt/yt/client/table_client/composite_compare.cpp +++ b/yt/yt/client/table_client/composite_compare.cpp @@ -1,6 +1,7 @@ #include "composite_compare.h" #include <yt/yt/client/table_client/row_base.h> + #include <yt/yt/core/yson/pull_parser.h> #include <yt/yt/core/yson/token_writer.h> @@ -30,7 +31,7 @@ namespace { // 3. Tuple // 4. Variant // -// When we compare composite or any values we assume that they are well-formed yson representations of same type supporting comparison. +// When we compare composite or any values we assume that they are well-formed YSON representations of same type supporting comparison. // And we compare them in following manner: // 1. We scan two values simultaneously and look at their yson tokens and find first mismatching token. // 2. If one of the token is EndList (this only can happen if we parsing values of list type diff --git a/yt/yt/client/table_client/unversioned_row.cpp b/yt/yt/client/table_client/unversioned_row.cpp index cbf238516c..c9f6ac1c9a 100644 --- a/yt/yt/client/table_client/unversioned_row.cpp +++ b/yt/yt/client/table_client/unversioned_row.cpp @@ -707,7 +707,7 @@ void ValidateAnyValue(TStringBuf yson) ParseYsonStringBuffer(yson, EYsonType::Node, &validator); } -bool ValidateSortedAnyValue(TStringBuf yson) +bool CheckSortedAnyValue(TStringBuf yson) { TYsonAnyValidator validator; ParseYsonStringBuffer(yson, EYsonType::Node, &validator); @@ -1071,11 +1071,11 @@ void ValidateValueType( } if (IsAnyOrComposite(value.Type)) { if (columnSchema.SortOrder()) { - bool canBeSorted = ValidateSortedAnyValue(value.AsStringBuf()); + bool canBeSorted = CheckSortedAnyValue(value.AsStringBuf()); if (!canBeSorted) { THROW_ERROR_EXCEPTION( NTableClient::EErrorCode::SchemaViolation, - "Cannot write value of type %Qlv, which contains a YSON map, into type any sorted column", + "Cannot write value of type %Qlv, which contains a YSON map, into sorted column of type any", value.Type); } } else if (validateAnyIsValidYson) { @@ -1279,7 +1279,7 @@ bool ValidateNonKeyColumnsAgainstLock( int mappedId = ApplyIdMapping(value, &idMapping); if (mappedId < 0 || mappedId >= std::ssize(schema.Columns())) { int size = nameTable->GetSize(); - if (value.Id < 0 || value.Id >= size) { + if (value.Id >= size) { THROW_ERROR_EXCEPTION("Expected value id in range [0:%v] but got %v", size - 1, value.Id); diff --git a/yt/yt/client/table_client/unversioned_value.cpp b/yt/yt/client/table_client/unversioned_value.cpp index 9f602ed918..33b0451463 100644 --- a/yt/yt/client/table_client/unversioned_value.cpp +++ b/yt/yt/client/table_client/unversioned_value.cpp @@ -48,6 +48,7 @@ TFingerprint GetFarmFingerprint(const TUnversionedValue& value) return NYT::FarmFingerprint(0); case EValueType::Composite: + case EValueType::Any: return CompositeFarmHash(NYson::TYsonStringBuf(value.AsStringBuf())); default: diff --git a/yt/yt/client/unittests/named_yson_token_ut.cpp b/yt/yt/client/unittests/named_yson_token_ut.cpp index 60f3793e3b..e9e55c5842 100644 --- a/yt/yt/client/unittests/named_yson_token_ut.cpp +++ b/yt/yt/client/unittests/named_yson_token_ut.cpp @@ -30,20 +30,20 @@ const auto IntStringVariant = VariantStructLogicalType({ {"string", SimpleLogicalType(ESimpleLogicalValueType::String)}, }); -YT_THREAD_LOCAL(TYsonConverterConfig) PositionalToNamedConfigInstance; +YT_DEFINE_THREAD_LOCAL(TYsonConverterConfig, PositionalToNamedConfigInstance); class TWithConfig { public: TWithConfig(const TYsonConverterConfig& config) - : OldConfig_(GetTlsRef(PositionalToNamedConfigInstance)) + : OldConfig_(PositionalToNamedConfigInstance()) { - GetTlsRef(PositionalToNamedConfigInstance) = config; + PositionalToNamedConfigInstance() = config; } ~TWithConfig() { - GetTlsRef(PositionalToNamedConfigInstance) = OldConfig_; + PositionalToNamedConfigInstance() = OldConfig_; } private: TYsonConverterConfig OldConfig_; @@ -74,7 +74,7 @@ TString ConvertYson( }; converter = CreateYsonClientToServerConverter(descriptor, config); } else { - converter = CreateYsonServerToClientConverter(descriptor, GetTlsRef(PositionalToNamedConfigInstance)); + converter = CreateYsonServerToClientConverter(descriptor, PositionalToNamedConfigInstance()); } } catch (const std::exception& ex) { ADD_FAILURE() << "cannot create converter: " << ex.what(); diff --git a/yt/yt/client/unittests/replication_card_ut.cpp b/yt/yt/client/unittests/replication_card_ut.cpp new file mode 100644 index 0000000000..97a5b32dc6 --- /dev/null +++ b/yt/yt/client/unittests/replication_card_ut.cpp @@ -0,0 +1,98 @@ +#include <yt/yt/client/chaos_client/replication_card.h> + +#include <yt/yt/core/test_framework/framework.h> + +namespace NYT::NChaosClient { +namespace { + +//////////////////////////////////////////////////////////////////////////////// + +class TReplicationCardFetchOptionsTest + : public ::testing::Test + , public ::testing::WithParamInterface<std::tuple< + TReplicationCardFetchOptions, + TReplicationCardFetchOptions, + bool>> +{ }; + +TEST_P(TReplicationCardFetchOptionsTest, Contains) +{ + const auto& params = GetParam(); + auto self = std::get<0>(params); + auto& other = std::get<1>(params); + auto expected = std::get<2>(params); + + + EXPECT_EQ(self.Contains(other), expected) + << "progress: " << std::get<0>(params) << std::endl + << "update: " << std::get<1>(params) << std::endl + << "expected: " << std::get<2>(params) << std::endl + << "actual: " << self.Contains(other) << std::endl; +} + +INSTANTIATE_TEST_SUITE_P( + TReplicationCardFetchOptionsTest, + TReplicationCardFetchOptionsTest, + ::testing::Values( + std::tuple( + TReplicationCardFetchOptions { + .IncludeCoordinators = true, + .IncludeProgress = true, + .IncludeHistory = true, + .IncludeReplicatedTableOptions = true, + }, + TReplicationCardFetchOptions { + .IncludeCoordinators = false, + .IncludeProgress = false, + .IncludeHistory = false, + .IncludeReplicatedTableOptions = false, + }, + true), + std::tuple( + TReplicationCardFetchOptions { + .IncludeCoordinators = true, + .IncludeProgress = true, + .IncludeHistory = true, + .IncludeReplicatedTableOptions = true, + }, + TReplicationCardFetchOptions { + .IncludeCoordinators = true, + .IncludeProgress = true, + .IncludeHistory = true, + .IncludeReplicatedTableOptions = true, + }, + true), + std::tuple( + TReplicationCardFetchOptions { + .IncludeCoordinators = true, + .IncludeProgress = true, + .IncludeHistory = true, + .IncludeReplicatedTableOptions = true, + }, + TReplicationCardFetchOptions { + .IncludeCoordinators = true, + .IncludeProgress = false, + .IncludeHistory = true, + .IncludeReplicatedTableOptions = false, + }, + true), + std::tuple( + TReplicationCardFetchOptions { + .IncludeCoordinators = true, + .IncludeProgress = false, + .IncludeHistory = true, + .IncludeReplicatedTableOptions = false, + }, + TReplicationCardFetchOptions { + .IncludeCoordinators = false, + .IncludeProgress = true, + .IncludeHistory = true, + .IncludeReplicatedTableOptions = false, + }, + false) +)); + +//////////////////////////////////////////////////////////////////////////////// + +} // namespace +} // namespace NYT::NChaosClient diff --git a/yt/yt/client/unittests/row_ut.cpp b/yt/yt/client/unittests/row_ut.cpp index 91a2e67ab4..00eba96742 100644 --- a/yt/yt/client/unittests/row_ut.cpp +++ b/yt/yt/client/unittests/row_ut.cpp @@ -4,6 +4,7 @@ #include <yt/yt/client/table_client/versioned_row.h> #include <yt/yt/core/test_framework/framework.h> + #include <yt/yt/core/misc/protobuf_helpers.h> #include <limits> diff --git a/yt/yt/client/unittests/ya.make b/yt/yt/client/unittests/ya.make index bf1a29f069..f5111fca97 100644 --- a/yt/yt/client/unittests/ya.make +++ b/yt/yt/client/unittests/ya.make @@ -26,6 +26,7 @@ SRCS( node_directory_ut.cpp query_builder_ut.cpp read_limit_ut.cpp + replication_card_ut.cpp replication_progress_ut.cpp row_ut.cpp schema_ut.cpp diff --git a/yt/yt/core/actions/current_invoker.cpp b/yt/yt/core/actions/current_invoker.cpp index 074965353d..904f746969 100644 --- a/yt/yt/core/actions/current_invoker.cpp +++ b/yt/yt/core/actions/current_invoker.cpp @@ -8,19 +8,19 @@ namespace NYT { //////////////////////////////////////////////////////////////////////////////// -YT_THREAD_LOCAL(IInvoker*) CurrentInvoker; +YT_DEFINE_THREAD_LOCAL(IInvoker*, CurrentInvoker); IInvoker* GetCurrentInvoker() { - if (CurrentInvoker) { - return CurrentInvoker; + if (CurrentInvoker()) { + return CurrentInvoker(); } return GetSyncInvoker().Get(); } void SetCurrentInvoker(IInvoker* invoker) { - CurrentInvoker = invoker; + CurrentInvoker() = invoker; } TCurrentInvokerGuard::TCurrentInvokerGuard(IInvoker* invoker) @@ -32,7 +32,7 @@ TCurrentInvokerGuard::TCurrentInvokerGuard(IInvoker* invoker) , Active_(true) , SavedInvoker_(std::move(invoker)) { - std::swap(GetTlsRef(CurrentInvoker), SavedInvoker_); + std::swap(CurrentInvoker(), SavedInvoker_); } void TCurrentInvokerGuard::Restore() @@ -41,7 +41,7 @@ void TCurrentInvokerGuard::Restore() return; } Active_ = false; - CurrentInvoker = std::move(SavedInvoker_); + CurrentInvoker() = std::move(SavedInvoker_); } TCurrentInvokerGuard::~TCurrentInvokerGuard() diff --git a/yt/yt/core/bus/tcp/connection.cpp b/yt/yt/core/bus/tcp/connection.cpp index 7423eb8ee5..8e29b6f056 100644 --- a/yt/yt/core/bus/tcp/connection.cpp +++ b/yt/yt/core/bus/tcp/connection.cpp @@ -196,7 +196,7 @@ void TTcpConnection::Close() EncodedFragments_.clear(); - FlushStatistics(); + FlushStatistics(/*guarded*/ false); } void TTcpConnection::Start() @@ -257,7 +257,7 @@ void TTcpConnection::RunPeriodicCheck() return; } - FlushStatistics(); + FlushStatistics(/*guarded*/ false); auto now = NProfiling::GetCpuInstant(); @@ -423,7 +423,7 @@ void TTcpConnection::Open(TGuard<NThreading::TSpinLock>& guard) } UpdateConnectionCount(+1); - FlushStatistics(); + FlushStatistics(/*guarded*/ true); // Go online and start event processing. auto previousPendingControl = static_cast<EPollControl>(PendingControl_.fetch_and(~static_cast<ui64>(EPollControl::Offline))); @@ -1787,10 +1787,20 @@ void TTcpConnection::InitSocketTosLevel(TTosLevel tosLevel) } } -void TTcpConnection::FlushStatistics() +void TTcpConnection::FlushStatistics(bool guarded) { - UpdateTcpStatistics(); - FlushBusStatistics(); + auto doFlush = [&] { + UpdateTcpStatistics(); + FlushBusStatistics(); + }; + + if (guarded) { + doFlush(); + return; + } + + auto guard = Guard(Lock_); + doFlush(); } template <class T, class U> diff --git a/yt/yt/core/bus/tcp/connection.h b/yt/yt/core/bus/tcp/connection.h index 81e2c4a3a0..5cab9e591b 100644 --- a/yt/yt/core/bus/tcp/connection.h +++ b/yt/yt/core/bus/tcp/connection.h @@ -359,7 +359,7 @@ private: void IncrementPendingOut(i64 packetSize); void DecrementPendingOut(i64 packetSize); - void FlushStatistics(); + void FlushStatistics(bool guarded = false); template <class T, class U> i64 UpdateBusCounter(T TBusNetworkBandCounters::* field, U delta); diff --git a/yt/yt/core/concurrency/action_queue.cpp b/yt/yt/core/concurrency/action_queue.cpp index 057773cf36..5ff68e0dcc 100644 --- a/yt/yt/core/concurrency/action_queue.cpp +++ b/yt/yt/core/concurrency/action_queue.cpp @@ -398,6 +398,10 @@ IInvokerPtr CreateFixedPriorityInvoker( //////////////////////////////////////////////////////////////////////////////// +class TBoundedConcurrencyInvoker; + +YT_DEFINE_THREAD_LOCAL(TBoundedConcurrencyInvoker*, CurrentBoundedConcurrencyInvoker); + class TBoundedConcurrencyInvoker : public TInvokerWrapper { @@ -429,8 +433,6 @@ private: TRingQueue<TClosure> Queue_; int Semaphore_ = 0; - static YT_THREAD_LOCAL(TBoundedConcurrencyInvoker*) CurrentSchedulingInvoker_; - private: class TInvocationGuard { @@ -463,7 +465,7 @@ private: { // If UnderlyingInvoker_ is already terminated, Invoke may drop the guard right away. // Protect by setting CurrentSchedulingInvoker_ and checking it on entering ScheduleMore. - CurrentSchedulingInvoker_ = this; + CurrentBoundedConcurrencyInvoker() = this; UnderlyingInvoker_->Invoke(BIND_NO_PROPAGATE( &TBoundedConcurrencyInvoker::DoRunCallback, @@ -472,7 +474,7 @@ private: Passed(TInvocationGuard(this)))); // Don't leave a dangling pointer behind. - CurrentSchedulingInvoker_ = nullptr; + CurrentBoundedConcurrencyInvoker() = nullptr; } void DoRunCallback(const TClosure& callback, TInvocationGuard /*invocationGuard*/) @@ -485,7 +487,7 @@ private: { auto guard = Guard(SpinLock_); // See RunCallback. - if (Queue_.empty() || CurrentSchedulingInvoker_ == this) { + if (Queue_.empty() || CurrentBoundedConcurrencyInvoker() == this) { IncrementSemaphore(-1); } else { auto callback = std::move(Queue_.front()); @@ -496,8 +498,6 @@ private: } }; -YT_THREAD_LOCAL(TBoundedConcurrencyInvoker*) TBoundedConcurrencyInvoker::CurrentSchedulingInvoker_; - IInvokerPtr CreateBoundedConcurrencyInvoker( IInvokerPtr underlyingInvoker, int maxConcurrentInvocations) diff --git a/yt/yt/core/concurrency/execution_stack.cpp b/yt/yt/core/concurrency/execution_stack.cpp index 3fcf1a11d4..3d2c826296 100644 --- a/yt/yt/core/concurrency/execution_stack.cpp +++ b/yt/yt/core/concurrency/execution_stack.cpp @@ -130,16 +130,16 @@ TExecutionStack::~TExecutionStack() ::DeleteFiber(Handle_); } -static YT_THREAD_LOCAL(void*) FiberTrampolineOpaque; +YT_DEFINE_THREAD_LOCAL(void*, FiberTrampolineOpaque); void TExecutionStack::SetOpaque(void* opaque) { - FiberTrampolineOpaque = opaque; + FiberTrampolineOpaque() = opaque; } void* TExecutionStack::GetOpaque() { - return FiberTrampolineOpaque; + return FiberTrampolineOpaque(); } void TExecutionStack::SetTrampoline(void (*trampoline)(void*)) @@ -151,7 +151,7 @@ void TExecutionStack::SetTrampoline(void (*trampoline)(void*)) VOID CALLBACK TExecutionStack::FiberTrampoline(PVOID opaque) { auto* stack = reinterpret_cast<TExecutionStack*>(opaque); - stack->Trampoline_(FiberTrampolineOpaque); + stack->Trampoline_(FiberTrampolineOpaque()); } #else diff --git a/yt/yt/core/concurrency/fair_share_invoker_pool.cpp b/yt/yt/core/concurrency/fair_share_invoker_pool.cpp index 1f2f26fc78..46d4845f40 100644 --- a/yt/yt/core/concurrency/fair_share_invoker_pool.cpp +++ b/yt/yt/core/concurrency/fair_share_invoker_pool.cpp @@ -31,7 +31,7 @@ using namespace NYTProf; //////////////////////////////////////////////////////////////////////////////// -constinit YT_THREAD_LOCAL(TCpuProfilerTagGuard) FairShareInvokerPoolProfilerTagGuard; +YT_DEFINE_THREAD_LOCAL(TCpuProfilerTagGuard, FairShareInvokerPoolProfilerTagGuard); //////////////////////////////////////////////////////////////////////////////// @@ -290,12 +290,12 @@ private: counters->WaitTimer.Record(waitTime); } - GetTlsRef(FairShareInvokerPoolProfilerTagGuard) = TCpuProfilerTagGuard(BucketProfilerTags_[index]); + FairShareInvokerPoolProfilerTagGuard() = TCpuProfilerTagGuard(BucketProfilerTags_[index]); } void ProfileExecutionFinish(int index, TDuration execTime, TDuration totalTime) { - GetTlsRef(FairShareInvokerPoolProfilerTagGuard) = TCpuProfilerTagGuard{}; + FairShareInvokerPoolProfilerTagGuard() = TCpuProfilerTagGuard{}; auto& counters = Counters_[index]; if (counters) { diff --git a/yt/yt/core/concurrency/fiber.cpp b/yt/yt/core/concurrency/fiber.cpp index 9bdb6fb35c..e257e4a2ef 100644 --- a/yt/yt/core/concurrency/fiber.cpp +++ b/yt/yt/core/concurrency/fiber.cpp @@ -16,6 +16,10 @@ #include <util/random/random.h> +#ifndef NDEBUG + #include <yt/yt/core/misc/shutdown.h> +#endif + namespace NYT::NConcurrency { using namespace NProfiling; @@ -154,26 +158,79 @@ public: GuardedProcessQueues(); } - ~TFiberRegistry() - { - GuardedProcessQueues(); - } - private: TFiberStack<NDetail::TFiberRegisterTag> RegisterQueue_; TFiberStack<NDetail::TFiberUnregisterTag> UnregisterQueue_; - NThreading::TForkAwareSpinLock Lock_; + YT_DECLARE_SPIN_LOCK(NThreading::TForkAwareSpinLock, Lock_); TFiber::TFiberList Fibers_; - void GuardedProcessQueues() +// NB(arkady-e1ppa): This shutdown logic +// is only here to prevent potential memory +// leak caused by some fibers being stuck in +// registry. We don't really care about them +// cause realistically this is a "problem" +// only during the shutdown which means that +// process is going to be killed shortly after. +// In debug we cleanup properly so that +// there are no actual leaks. +#ifndef NDEBUG + TShutdownCookie ShutdownCookie_; + + void InitializeShutdownCookie() { - Fibers_.Append(RegisterQueue_.PopAll()); + ShutdownCookie_ = RegisterShutdownCallback( + "TFiberRegistry", + BIND([this] { + auto guard = Guard(Lock_); + while(GuardedProcessQueues()); + }), + /*priority*/std::numeric_limits<int>::min()); + } +#endif + + // Returns |false| iff both queues + // were observed empty. + bool GuardedProcessQueues() + { +#ifndef NDEBUG + if (!ShutdownCookie_) { + InitializeShutdownCookie(); + } +#endif + + // NB(arkady-e1ppa): One thread can quickly + // Register and then Unregister some fiber1. + // Another thread running the GuardedProcessQueues + // call has two options: + // 1) Read RegisterQueue and then UnregisterQueue + // 2) Inverse of (1) + // In case of (1) we might miss fiber1 registration + // event but still observe fiber1 unregistration event. + // In this case we would unlink fiber and delete it. + // Unlinking fiber which is still in RegisterQueue + // Is almost guaranteed to cause a segfault, so + // we cannot afford such scenario. + // In case of (2) we might miss fiber1 unregistration + // event but observe fiber1 registration event. + // This would not cause a leak since we + // clean up fibers during the shutdown anyway. auto toUnregister = UnregisterQueue_.PopAll(); + auto toRegister = RegisterQueue_.PopAll(); + + if (toRegister.Empty() && toUnregister.Empty()) { + return false; + } + + Fibers_.Append(std::move(toRegister)); - while (auto fiber = toUnregister.PopBack()) { - fiber->UnregisterAndDelete(); + // NB: util intrusive list does not return + // nullptr in case of empty! + // We have to check ourselves that + // PopBack return is a valid one. + while (!toUnregister.Empty()) { + toUnregister.PopBack()->UnregisterAndDelete(); } // NB: Around this line guard is released. We do not properly double check @@ -181,24 +238,28 @@ private: // We are okay with this since we expect to have occasional calls of this method // which would unstuck most of the fibers. In dtor of this singleton we // release the last batch of stuck fibers. + + return true; }; void DebugPrint() { Cerr << "Debug print begin\n"; Cerr << "---------------------------------------------------------------" << '\n'; - for (auto* iter = Fibers_.Begin(); iter != Fibers_.End(); iter = iter->Next) { - auto* fiber = static_cast<TFiber*>(iter); - auto* regNode = static_cast<TIntrusiveNode<TFiber, NDetail::TFiberRegisterTag>*>(fiber); - auto* delNode = static_cast<TIntrusiveNode<TFiber, NDetail::TFiberUnregisterTag>*>(fiber); + for (auto& iter : Fibers_) { + auto* ptr = &iter; + auto* fiber = static_cast<TFiber*>(ptr); + auto* regNode = static_cast<TIntrusiveListItem<TFiber, NDetail::TFiberRegisterTag>*>(fiber); + auto* delNode = static_cast<TIntrusiveListItem<TFiber, NDetail::TFiberUnregisterTag>*>(fiber); - Cerr << Format("Fiber node at %v. Next is %v, Prev is %v", iter, iter->Next, iter->Prev) << '\n'; + Cerr << Format("Fiber node at %v", iter) << '\n'; Cerr << Format("Fiber address after cast is %v", fiber) << '\n'; - Cerr << Format("Fiber registration queue status: Next: %v, Prev: %v", regNode->Next, regNode->Prev) << '\n'; + Cerr << Format("Fiber registration queue status: Next: %v, Prev: %v", regNode->Next(), regNode->Prev()) << '\n'; // NB: Reading deletion queue is data race. Don't do this under tsan. - Cerr << Format("Fiber deletion queue status: Next: %v, Prev: %v", delNode->Next, delNode->Prev) << '\n'; + Cerr << Format("Fiber deletion queue status: Next: %v, Prev: %v", delNode->Next(), delNode->Prev()) << '\n'; Cerr << "---------------------------------------------------------------" << '\n'; } + Cerr << "Debug print end\n"; } }; @@ -283,17 +344,21 @@ void TFiber::SetRunning() void TFiber::SetWaiting() { WaitingSince_.store(GetApproximateCpuInstant(), std::memory_order::release); - State_.store(EFiberState::Waiting, std::memory_order::release); + + auto observed = State_.exchange(EFiberState::Waiting, std::memory_order::release); + YT_VERIFY(observed == EFiberState::Running); } void TFiber::SetFinished() { - State_.store(EFiberState::Finished); + auto observed = State_.exchange(EFiberState::Finished, std::memory_order::relaxed); + YT_VERIFY(observed == EFiberState::Running); } void TFiber::SetIdle() { - State_.store(EFiberState::Idle); + auto observed = State_.exchange(EFiberState::Idle, std::memory_order::relaxed); + YT_VERIFY(observed == EFiberState::Running); Clear(); } @@ -349,7 +414,8 @@ void TFiber::ReadFibers(TFunctionView<void(TFiberList&)> callback) void TFiber::UnregisterAndDelete() noexcept { - YT_VERIFY(!static_cast<TUnregisterBase*>(this)->IsLinked()); + YT_VERIFY(static_cast<TUnregisterBase*>(this)->Empty()); + YT_VERIFY(!static_cast<TRegisterBase*>(this)->Empty()); static_cast<TRegisterBase*>(this)->Unlink(); delete this; diff --git a/yt/yt/core/concurrency/fiber.h b/yt/yt/core/concurrency/fiber.h index e08d72601c..d8aade79e1 100644 --- a/yt/yt/core/concurrency/fiber.h +++ b/yt/yt/core/concurrency/fiber.h @@ -39,15 +39,15 @@ struct TFiberUnregisterTag // Do not change inheritence order or layout. // Some offsets are hardcoded at devtools/gdb/yt_fibers_printer.py. class TFiber - : public TIntrusiveNode<TFiber, NDetail::TFiberRegisterTag> - , public TIntrusiveNode<TFiber, NDetail::TFiberUnregisterTag> + : public TIntrusiveListItem<TFiber, NDetail::TFiberRegisterTag> + , public TIntrusiveListItem<TFiber, NDetail::TFiberUnregisterTag> , public ITrampoLine { - using TRegisterBase = TIntrusiveNode<TFiber, NDetail::TFiberRegisterTag>; - using TUnregisterBase = TIntrusiveNode<TFiber, NDetail::TFiberUnregisterTag>; + using TRegisterBase = TIntrusiveListItem<TFiber, NDetail::TFiberRegisterTag>; + using TUnregisterBase = TIntrusiveListItem<TFiber, NDetail::TFiberUnregisterTag>; public: - using TFiberList = TSimpleIntrusiveList<TFiber, NDetail::TFiberRegisterTag>; + using TFiberList = TIntrusiveList<TFiber, NDetail::TFiberRegisterTag>; static TFiber* CreateFiber(EExecutionStackKind stackKind = EExecutionStackKind::Small); diff --git a/yt/yt/core/concurrency/fiber_scheduler_thread.cpp b/yt/yt/core/concurrency/fiber_scheduler_thread.cpp index 25e380d4a9..9b4345b0bc 100644 --- a/yt/yt/core/concurrency/fiber_scheduler_thread.cpp +++ b/yt/yt/core/concurrency/fiber_scheduler_thread.cpp @@ -130,18 +130,18 @@ struct TFiberContext TFiber* CurrentFiber = nullptr; }; -YT_THREAD_LOCAL(TFiberContext*) FiberContext; +YT_DEFINE_THREAD_LOCAL(TFiberContext*, FiberContext); // Forbid inlining these accessors to prevent the compiler from // miss-optimizing TLS access in presence of fiber context switches. -Y_NO_INLINE TFiberContext* TryGetFiberContext() +TFiberContext* TryGetFiberContext() { - return FiberContext; + return FiberContext(); } -Y_NO_INLINE void SetFiberContext(TFiberContext* context) +void SetFiberContext(TFiberContext* context) { - FiberContext = context; + FiberContext() = context; } //////////////////////////////////////////////////////////////////////////////// @@ -188,7 +188,7 @@ Y_FORCE_INLINE ELogLevel SwapMinLogLevel(ELogLevel minLogLevel) Y_FORCE_INLINE TExceptionSafeContext* GetMachineContext() { - return &TryGetFiberContext()->MachineContext; + return &FiberContext()->MachineContext; } Y_FORCE_INLINE void SetAfterSwitch(TAfterSwitch afterSwitch) @@ -200,53 +200,53 @@ Y_FORCE_INLINE void SetAfterSwitch(TAfterSwitch afterSwitch) Y_FORCE_INLINE TAfterSwitch ExtractAfterSwitch() { - auto* context = TryGetFiberContext(); + auto* context = FiberContext(); return context->AfterSwitch.Release(); } Y_FORCE_INLINE void SetResumerFiber(TFiber* fiber) { - auto* context = TryGetFiberContext(); + auto* context = FiberContext(); YT_VERIFY(!context->ResumerFiber); context->ResumerFiber = fiber; } Y_FORCE_INLINE TFiber* ExtractResumerFiber() { - return std::exchange(TryGetFiberContext()->ResumerFiber, nullptr); + return std::exchange(FiberContext()->ResumerFiber, nullptr); } Y_FORCE_INLINE TFiber* TryGetResumerFiber() { - return TryGetFiberContext()->ResumerFiber; + return FiberContext()->ResumerFiber; } Y_FORCE_INLINE TFiber* SwapCurrentFiber(TFiber* fiber) { - return std::exchange(TryGetFiberContext()->CurrentFiber, fiber); + return std::exchange(FiberContext()->CurrentFiber, fiber); } Y_FORCE_INLINE TFiber* TryGetCurrentFiber() { - auto* context = TryGetFiberContext(); + auto* context = FiberContext(); return context ? context->CurrentFiber : nullptr; } Y_FORCE_INLINE TFiber* GetCurrentFiber() { - auto* fiber = TryGetFiberContext()->CurrentFiber; + auto* fiber = FiberContext()->CurrentFiber; YT_VERIFY(fiber); return fiber; } Y_FORCE_INLINE TFiberSchedulerThread* TryGetFiberThread() { - return TryGetFiberContext()->FiberThread; + return FiberContext()->FiberThread; } Y_FORCE_INLINE TRefCountedGaugePtr GetWaitingFibersCounter() { - return TryGetFiberContext()->WaitingFibersCounter; + return FiberContext()->WaitingFibersCounter; } //////////////////////////////////////////////////////////////////////////////// @@ -525,9 +525,6 @@ void ResumeFiber(TFiber* targetFiber) YT_VERIFY(!TryGetResumerFiber()); } -class TFiberSwitchHandler; -TFiberSwitchHandler* TryGetFiberSwitchHandler(); - //////////////////////////////////////////////////////////////////////////////// DECLARE_REFCOUNTED_CLASS(TCanceler) @@ -706,6 +703,10 @@ private: ELogLevel MinLogLevel_ = ELogLevel::Minimum; }; +class TFiberSwitchHandler; + +YT_DEFINE_THREAD_LOCAL(TFiberSwitchHandler*, CurrentFiberSwitchHandler); + class TFiberSwitchHandler : public TBaseSwitchHandler { @@ -714,7 +715,7 @@ public: explicit TFiberSwitchHandler(TFiber* fiber) : Fiber_(fiber) { - SavedThis_ = std::exchange(This_, this); + SavedThis_ = std::exchange(CurrentFiberSwitchHandler(), this); YT_VERIFY(SwapCurrentFiberId(fiber->GetFiberId()) == InvalidFiberId); YT_VERIFY(!SwapCurrentFls(fiber->GetFls())); @@ -723,7 +724,7 @@ public: // On finish fiber running. ~TFiberSwitchHandler() { - YT_VERIFY(This_ == this); + YT_VERIFY(CurrentFiberSwitchHandler() == this); YT_VERIFY(UserHandlers_.empty()); YT_VERIFY(SwapCurrentFiberId(InvalidFiberId) == Fiber_->GetFiberId()); @@ -750,7 +751,7 @@ public: TGuard(TGuard&&) = delete; TGuard() - : SwitchHandler_(This_) + : SwitchHandler_(CurrentFiberSwitchHandler()) { YT_VERIFY(SwitchHandler_); SwitchHandler_->OnOut(); @@ -767,12 +768,10 @@ public: private: friend TContextSwitchGuard; - friend TFiberSwitchHandler* TryGetFiberSwitchHandler(); const TFiber* const Fiber_; TFiberSwitchHandler* SavedThis_; - static YT_THREAD_LOCAL(TFiberSwitchHandler*) This_; struct TContextSwitchHandlers { @@ -792,7 +791,7 @@ private: TBaseSwitchHandler::OnSwitch(); - std::swap(SavedThis_, GetTlsRef(This_)); + std::swap(SavedThis_, CurrentFiberSwitchHandler()); } // On finish fiber running. @@ -824,16 +823,9 @@ private: } }; -YT_THREAD_LOCAL(TFiberSwitchHandler*) TFiberSwitchHandler::This_; - -TFiberSwitchHandler* TryGetFiberSwitchHandler() -{ - return TFiberSwitchHandler::This_; -} - TFiberSwitchHandler* GetFiberSwitchHandler() { - auto* switchHandler = TryGetFiberSwitchHandler(); + auto* switchHandler = CurrentFiberSwitchHandler(); YT_VERIFY(switchHandler); return switchHandler; } @@ -938,34 +930,34 @@ void TFiberSchedulerThread::ThreadMain() //////////////////////////////////////////////////////////////////////////////// -YT_THREAD_LOCAL(TFiberId) CurrentFiberId; +YT_DEFINE_THREAD_LOCAL(TFiberId, CurrentFiberId); TFiberId GetCurrentFiberId() { - return CurrentFiberId; + return CurrentFiberId(); } void SetCurrentFiberId(TFiberId id) { - CurrentFiberId = id; + CurrentFiberId() = id; } //////////////////////////////////////////////////////////////////////////////// -YT_THREAD_LOCAL(bool) ContextSwitchForbidden; +YT_DEFINE_THREAD_LOCAL(bool, ContextSwitchForbidden); bool IsContextSwitchForbidden() { - return ContextSwitchForbidden; + return ContextSwitchForbidden(); } TForbidContextSwitchGuard::TForbidContextSwitchGuard() - : OldValue_(std::exchange(ContextSwitchForbidden, true)) + : OldValue_(std::exchange(ContextSwitchForbidden(), true)) { } TForbidContextSwitchGuard::~TForbidContextSwitchGuard() { - ContextSwitchForbidden = OldValue_; + ContextSwitchForbidden() = OldValue_; } //////////////////////////////////////////////////////////////////////////////// @@ -978,7 +970,7 @@ bool CheckFreeStackSpace(size_t space) TFiberCanceler GetCurrentFiberCanceler() { - auto* switchHandler = NDetail::TryGetFiberSwitchHandler(); + auto* switchHandler = NDetail::CurrentFiberSwitchHandler(); if (!switchHandler) { // Not in fiber context. return {}; @@ -1077,14 +1069,14 @@ TContextSwitchGuard::TContextSwitchGuard( TContextSwitchHandler outHandler, TContextSwitchHandler inHandler) { - if (auto* context = NDetail::TryGetFiberSwitchHandler()) { + if (auto* context = NDetail::CurrentFiberSwitchHandler()) { context->UserHandlers_.push_back({std::move(outHandler), std::move(inHandler)}); } } TContextSwitchGuard::~TContextSwitchGuard() { - if (auto* context = NDetail::TryGetFiberSwitchHandler()) { + if (auto* context = NDetail::CurrentFiberSwitchHandler()) { YT_VERIFY(!context->UserHandlers_.empty()); context->UserHandlers_.pop_back(); } diff --git a/yt/yt/core/concurrency/fls-inl.h b/yt/yt/core/concurrency/fls-inl.h index 47c8b2d90d..4f8eba6b6f 100644 --- a/yt/yt/core/concurrency/fls-inl.h +++ b/yt/yt/core/concurrency/fls-inl.h @@ -21,7 +21,7 @@ using TFlsSlotDtor = void(*)(TFls::TCookie cookie); int AllocateFlsSlot(TFlsSlotDtor dtor); TFls* GetPerThreadFls(); -extern YT_THREAD_LOCAL(TFls*) CurrentFls; +YT_DECLARE_THREAD_LOCAL(TFls*, CurrentFls); } // namespace NDetail @@ -44,7 +44,7 @@ Y_FORCE_INLINE TFls::TCookie TFls::Get(int index) const inline TFls* GetCurrentFls() { - auto* fls = NDetail::CurrentFls; + auto* fls = NDetail::CurrentFls(); if (Y_UNLIKELY(!fls)) { fls = NDetail::GetPerThreadFls(); } diff --git a/yt/yt/core/concurrency/fls.cpp b/yt/yt/core/concurrency/fls.cpp index 9cedcadcfa..6856ac9754 100644 --- a/yt/yt/core/concurrency/fls.cpp +++ b/yt/yt/core/concurrency/fls.cpp @@ -20,8 +20,8 @@ std::atomic<int> FlsSize; NThreading::TForkAwareSpinLock FlsLock; std::array<TFlsSlotDtor, MaxFlsSize> FlsDtors; -YT_THREAD_LOCAL(TFls*) PerThreadFls; -YT_THREAD_LOCAL(TFls*) CurrentFls; +YT_DEFINE_THREAD_LOCAL(TFls*, PerThreadFls); +YT_DEFINE_THREAD_LOCAL(TFls*, CurrentFls); int AllocateFlsSlot(TFlsSlotDtor dtor) { @@ -42,13 +42,14 @@ void DestructFlsSlot(int index, TFls::TCookie cookie) TFls* GetPerThreadFls() { - if (!PerThreadFls) { + auto& perThreadFls = PerThreadFls(); + if (!perThreadFls) { // This is only needed when some code attempts to interact with FLS outside of a fiber context. // Unfortunately there's no safe place to destroy this FLS upon thread shutdown. - PerThreadFls = new TFls(); - NSan::MarkAsIntentionallyLeaked(PerThreadFls); + perThreadFls = new TFls(); + NSan::MarkAsIntentionallyLeaked(perThreadFls); } - return PerThreadFls; + return perThreadFls; } } // namespace NDetail @@ -79,7 +80,7 @@ void TFls::Set(int index, TCookie cookie) TFls* SwapCurrentFls(TFls* newFls) { - return std::exchange(NDetail::CurrentFls, newFls); + return std::exchange(NDetail::CurrentFls(), newFls); } //////////////////////////////////////////////////////////////////////////////// diff --git a/yt/yt/core/concurrency/invoker_queue.cpp b/yt/yt/core/concurrency/invoker_queue.cpp index fec32d6c86..22fa826733 100644 --- a/yt/yt/core/concurrency/invoker_queue.cpp +++ b/yt/yt/core/concurrency/invoker_queue.cpp @@ -20,7 +20,7 @@ static const auto& Logger = ConcurrencyLogger; //////////////////////////////////////////////////////////////////////////////// -constinit YT_THREAD_LOCAL(TCpuProfilerTagGuard) CpuProfilerTagGuard; +YT_DEFINE_THREAD_LOCAL(TCpuProfilerTagGuard, CpuProfilerTagGuard); //////////////////////////////////////////////////////////////////////////////// @@ -490,9 +490,9 @@ bool TInvokerQueue<TQueueImpl>::BeginExecute(TEnqueuedAction* action, typename T } if (const auto& profilerTag = action->ProfilerTag) { - GetTlsRef(CpuProfilerTagGuard) = TCpuProfilerTagGuard(profilerTag); + CpuProfilerTagGuard() = TCpuProfilerTagGuard(profilerTag); } else { - GetTlsRef(CpuProfilerTagGuard) = {}; + CpuProfilerTagGuard() = {}; } SetCurrentInvoker(GetProfilingTagSettingInvoker(action->ProfilingTag)); @@ -503,7 +503,7 @@ bool TInvokerQueue<TQueueImpl>::BeginExecute(TEnqueuedAction* action, typename T template <class TQueueImpl> void TInvokerQueue<TQueueImpl>::EndExecute(TEnqueuedAction* action) { - GetTlsRef(CpuProfilerTagGuard) = TCpuProfilerTagGuard{}; + CpuProfilerTagGuard() = TCpuProfilerTagGuard{}; SetCurrentInvoker(nullptr); YT_ASSERT(action); diff --git a/yt/yt/core/concurrency/new_fair_share_thread_pool.cpp b/yt/yt/core/concurrency/new_fair_share_thread_pool.cpp index fcfc64eec7..7482f49b1d 100644 --- a/yt/yt/core/concurrency/new_fair_share_thread_pool.cpp +++ b/yt/yt/core/concurrency/new_fair_share_thread_pool.cpp @@ -43,7 +43,7 @@ DECLARE_REFCOUNTED_CLASS(TBucket) struct TExecutionPool; // High 16 bits is thread index and 48 bits for thread pool ptr. -YT_THREAD_LOCAL(TPackedPtr) ThreadCookie = 0; +YT_DEFINE_THREAD_LOCAL(TPackedPtr, ThreadCookie, 0); static constexpr auto LogDurationThreshold = TDuration::Seconds(1); @@ -636,7 +636,7 @@ public: // Callback keeps raw ptr to bucket to minimize bucket ref count. action.Callback = BIND(&TBucket::RunCallback, Unretained(bucket), std::move(callback), cpuInstant); action.BucketHolder = MakeStrong(bucket); - action.EnqueuedThreadCookie = ThreadCookie; + action.EnqueuedThreadCookie = ThreadCookie(); InvokeQueue_.Enqueue(std::move(action)); @@ -1201,7 +1201,7 @@ protected: void OnStart() override { - ThreadCookie = TTaggedPtr(Queue_.Get(), static_cast<ui16>(Index_)).Pack(); + ThreadCookie() = TTaggedPtr(Queue_.Get(), static_cast<ui16>(Index_)).Pack(); } void StopPrologue() override diff --git a/yt/yt/core/logging/log_manager.cpp b/yt/yt/core/logging/log_manager.cpp index 00bfe4cb1b..e23759b816 100644 --- a/yt/yt/core/logging/log_manager.cpp +++ b/yt/yt/core/logging/log_manager.cpp @@ -355,7 +355,7 @@ TCpuInstant GetEventInstant(const TLoggerQueueItem& item) using TThreadLocalQueue = TSpscQueue<TLoggerQueueItem>; static constexpr uintptr_t ThreadQueueDestroyedSentinel = -1; -YT_THREAD_LOCAL(TThreadLocalQueue*) PerThreadQueue; +YT_DEFINE_THREAD_LOCAL(TThreadLocalQueue*, PerThreadQueue); ///////////////////////////////////////////////////////////////////////////// @@ -364,7 +364,7 @@ struct TLocalQueueReclaimer ~TLocalQueueReclaimer(); }; -YT_THREAD_LOCAL(TLocalQueueReclaimer) LocalQueueReclaimer; +YT_DEFINE_THREAD_LOCAL(TLocalQueueReclaimer, LocalQueueReclaimer); ///////////////////////////////////////////////////////////////////////////// @@ -1041,17 +1041,17 @@ private: void PushEvent(TLoggerQueueItem&& event) { - if (!PerThreadQueue) { - PerThreadQueue = new TThreadLocalQueue(); - RegisteredLocalQueues_.Enqueue(GetTlsRef(PerThreadQueue)); - Y_UNUSED(LocalQueueReclaimer); // Touch thread-local variable so that its destructor is called. + auto& perThreadQueue = PerThreadQueue(); + if (!perThreadQueue) { + perThreadQueue = new TThreadLocalQueue(); + RegisteredLocalQueues_.Enqueue(perThreadQueue); } ++EnqueuedEvents_; - if (PerThreadQueue == reinterpret_cast<TThreadLocalQueue*>(ThreadQueueDestroyedSentinel)) { + if (perThreadQueue == reinterpret_cast<TThreadLocalQueue*>(ThreadQueueDestroyedSentinel)) { GlobalQueue_.Enqueue(std::move(event)); } else { - PerThreadQueue->Push(std::move(event)); + perThreadQueue->Push(std::move(event)); } } @@ -1476,10 +1476,10 @@ private: TLocalQueueReclaimer::~TLocalQueueReclaimer() { - if (PerThreadQueue) { + if (auto& perThreadQueue = PerThreadQueue()) { auto logManager = TLogManager::Get()->Impl_; - logManager->UnregisteredLocalQueues_.Enqueue(GetTlsRef(PerThreadQueue)); - PerThreadQueue = reinterpret_cast<TThreadLocalQueue*>(ThreadQueueDestroyedSentinel); + logManager->UnregisteredLocalQueues_.Enqueue(perThreadQueue); + perThreadQueue = reinterpret_cast<TThreadLocalQueue*>(ThreadQueueDestroyedSentinel); } } diff --git a/yt/yt/core/misc/error-inl.h b/yt/yt/core/misc/error-inl.h index a2c45dbdcd..fbb66a4926 100644 --- a/yt/yt/core/misc/error-inl.h +++ b/yt/yt/core/misc/error-inl.h @@ -196,28 +196,31 @@ TErrorOr<T>& TErrorOr<T>::operator = (TErrorOr<T>&& other) noexcept } template <class T> -T&& TErrorOr<T>::ValueOrThrow() && +template <class... TArgs> +T&& TErrorOr<T>::ValueOrThrow(TArgs&&... args) && { if (!IsOK()) { - THROW_ERROR std::move(*this); + THROW_ERROR std::move(*this).Wrap(std::forward<TArgs>(args)...); } return std::move(*Value_); } template <class T> -T& TErrorOr<T>::ValueOrThrow() & +template <class... TArgs> +T& TErrorOr<T>::ValueOrThrow(TArgs&&... args) & { if (!IsOK()) { - THROW_ERROR *this; + THROW_ERROR Wrap(std::forward<TArgs>(args)...); } return *Value_; } template <class T> -const T& TErrorOr<T>::ValueOrThrow() const & +template <class... TArgs> +const T& TErrorOr<T>::ValueOrThrow(TArgs&&... args) const & { if (!IsOK()) { - THROW_ERROR *this; + THROW_ERROR Wrap(std::forward<TArgs>(args)...); } return *Value_; } diff --git a/yt/yt/core/misc/error.cpp b/yt/yt/core/misc/error.cpp index 6aabbb1ecc..1ba64c999f 100644 --- a/yt/yt/core/misc/error.cpp +++ b/yt/yt/core/misc/error.cpp @@ -71,27 +71,27 @@ TString ToString(TErrorCode code) //////////////////////////////////////////////////////////////////////////////// -YT_THREAD_LOCAL(bool) ErrorSanitizerEnabled = false; -YT_THREAD_LOCAL(TInstant) ErrorSanitizerDatetimeOverride = {}; -YT_THREAD_LOCAL(TSharedRef) ErrorSanitizerLocalHostNameOverride = {}; +YT_DEFINE_THREAD_LOCAL(bool, ErrorSanitizerEnabled, false); +YT_DEFINE_THREAD_LOCAL(TInstant, ErrorSanitizerDatetimeOverride); +YT_DEFINE_THREAD_LOCAL(TSharedRef, ErrorSanitizerLocalHostNameOverride); TErrorSanitizerGuard::TErrorSanitizerGuard(TInstant datetimeOverride, TSharedRef localHostNameOverride) - : SavedEnabled_(ErrorSanitizerEnabled) - , SavedDatetimeOverride_(GetTlsRef(ErrorSanitizerDatetimeOverride)) - , SavedLocalHostNameOverride_(GetTlsRef(ErrorSanitizerLocalHostNameOverride)) + : SavedEnabled_(ErrorSanitizerEnabled()) + , SavedDatetimeOverride_(ErrorSanitizerDatetimeOverride()) + , SavedLocalHostNameOverride_(ErrorSanitizerLocalHostNameOverride()) { - ErrorSanitizerEnabled = true; - GetTlsRef(ErrorSanitizerDatetimeOverride) = datetimeOverride; - GetTlsRef(ErrorSanitizerLocalHostNameOverride) = std::move(localHostNameOverride); + ErrorSanitizerEnabled() = true; + ErrorSanitizerDatetimeOverride() = datetimeOverride; + ErrorSanitizerLocalHostNameOverride() = std::move(localHostNameOverride); } TErrorSanitizerGuard::~TErrorSanitizerGuard() { - YT_ASSERT(ErrorSanitizerEnabled); + YT_ASSERT(ErrorSanitizerEnabled()); - ErrorSanitizerEnabled = SavedEnabled_; - GetTlsRef(ErrorSanitizerDatetimeOverride) = SavedDatetimeOverride_; - GetTlsRef(ErrorSanitizerLocalHostNameOverride) = std::move(SavedLocalHostNameOverride_); + ErrorSanitizerEnabled() = SavedEnabled_; + ErrorSanitizerDatetimeOverride() = SavedDatetimeOverride_; + ErrorSanitizerLocalHostNameOverride() = std::move(SavedLocalHostNameOverride_); } //////////////////////////////////////////////////////////////////////////////// @@ -301,9 +301,9 @@ private: void CaptureOriginAttributes() { - if (ErrorSanitizerEnabled) { - Datetime_ = GetTlsRef(ErrorSanitizerDatetimeOverride); - HostHolder_ = GetTlsRef(ErrorSanitizerLocalHostNameOverride); + if (ErrorSanitizerEnabled()) { + Datetime_ = ErrorSanitizerDatetimeOverride(); + HostHolder_ = ErrorSanitizerLocalHostNameOverride(); Host_ = HostHolder_.empty() ? TStringBuf() : TStringBuf(HostHolder_.Begin(), HostHolder_.End()); return; } @@ -940,6 +940,25 @@ void TError::Load(TStreamLoadContext& context) Impl_ = std::move(impl); } +std::optional<TError> TError::FindMatching(std::function<bool(const TError&)> filter) const +{ + if (!Impl_) { + return {}; + } + + if (filter(*this)) { + return *this; + } + + for (const auto& innerError : InnerErrors()) { + if (auto innerResult = innerError.FindMatching(filter)) { + return innerResult; + } + } + + return {}; +} + std::optional<TError> TError::FindMatching(TErrorCode code) const { return FindMatching([&] (TErrorCode errorCode) { @@ -956,21 +975,7 @@ std::optional<TError> TError::FindMatching(const THashSet<TErrorCode>& codes) co std::optional<TError> TError::FindMatching(std::function<bool(TErrorCode)> filter) const { - if (!Impl_) { - return {}; - } - - if (filter(GetCode())) { - return *this; - } - - for (const auto& innerError : InnerErrors()) { - if (auto innerResult = innerError.FindMatching(filter)) { - return innerResult; - } - } - - return {}; + return FindMatching([filter = std::move(filter)] (const TError& error) { return filter(error.GetCode()); }); } TError::TErrorOr(std::unique_ptr<TImpl> impl) @@ -1034,7 +1039,7 @@ void AppendError(TStringBuilderBase* builder, const TError& error, int indent) (!error.GetThreadName().empty() ? error.GetThreadName() : ToString(error.GetTid())), error.GetFid()), indent); - } else if (ErrorSanitizerEnabled && error.HasHost()) { + } else if (ErrorSanitizerEnabled() && error.HasHost()) { AppendAttribute( builder, "host", @@ -1151,7 +1156,7 @@ void ToProto(NYT::NProto::TError* protoError, const TError& error) static const TString FidKey("fid"); addAttribute(FidKey, error.GetFid()); - } else if (ErrorSanitizerEnabled && error.HasHost()) { + } else if (ErrorSanitizerEnabled() && error.HasHost()) { static const TString HostKey("host"); addAttribute(HostKey, error.GetHost()); } @@ -1243,6 +1248,7 @@ void Serialize( const std::function<void(IYsonConsumer*)>* valueProducer, int depth) { + auto& errorSanitizerEnabled = ErrorSanitizerEnabled(); BuildYsonFluently(consumer) .BeginMap() .Item("code").Value(error.GetCode()) @@ -1255,7 +1261,7 @@ void Serialize( .Item("tid").Value(error.GetTid()) .Item("thread").Value(error.GetThreadName()) .Item("fid").Value(error.GetFid()); - } else if (ErrorSanitizerEnabled && error.HasHost()) { + } else if (errorSanitizerEnabled && error.HasHost()) { fluent .Item("host").Value(error.GetHost()); } diff --git a/yt/yt/core/misc/error.h b/yt/yt/core/misc/error.h index c04b2f0a9c..87686b0544 100644 --- a/yt/yt/core/misc/error.h +++ b/yt/yt/core/misc/error.h @@ -188,6 +188,7 @@ public: void ThrowOnError() const; + std::optional<TError> FindMatching(std::function<bool(const TError&)> filter) const; std::optional<TError> FindMatching(std::function<bool(TErrorCode)> filter) const; std::optional<TError> FindMatching(TErrorCode code) const; std::optional<TError> FindMatching(const THashSet<TErrorCode>& codes) const; @@ -402,9 +403,14 @@ public: T& Value() &; T&& Value() &&; - const T& ValueOrThrow() const &; - T& ValueOrThrow() &; - T&& ValueOrThrow() &&; + template <class... TArgs> + const T& ValueOrThrow(TArgs&&... args) const &; + + template <class... TArgs> + T& ValueOrThrow(TArgs&&... args) &; + + template <class... TArgs> + T&& ValueOrThrow(TArgs&&... args) &&; const T& ValueOrDefault(const T& defaultValue) const &; T& ValueOrDefault(T& defaultValue) &; diff --git a/yt/yt/core/misc/hazard_ptr-inl.h b/yt/yt/core/misc/hazard_ptr-inl.h index ab9ab05a58..a202d07cd3 100644 --- a/yt/yt/core/misc/hazard_ptr-inl.h +++ b/yt/yt/core/misc/hazard_ptr-inl.h @@ -20,10 +20,10 @@ namespace NDetail { constexpr int MaxHazardPointersPerThread = 2; using THazardPointerSet = std::array<std::atomic<void*>, MaxHazardPointersPerThread>; -extern YT_THREAD_LOCAL(THazardPointerSet) HazardPointers; +YT_DECLARE_THREAD_LOCAL(THazardPointerSet, HazardPointers); struct THazardThreadState; -extern YT_THREAD_LOCAL(THazardThreadState*) HazardThreadState; +YT_DECLARE_THREAD_LOCAL(THazardThreadState*, HazardThreadState); void InitHazardThreadState(); @@ -89,7 +89,7 @@ THazardPtr<T> THazardPtr<T>::Acquire(TPtrLoader&& ptrLoader, T* ptr) return {}; } - auto& hazardPointers = GetTlsRef(NYT::NDetail::HazardPointers); + auto& hazardPointers = NYT::NDetail::HazardPointers(); auto* hazardPtr = [&] { for (auto it = hazardPointers.begin(); it != hazardPointers.end(); ++it) { @@ -103,7 +103,7 @@ THazardPtr<T> THazardPtr<T>::Acquire(TPtrLoader&& ptrLoader, T* ptr) YT_ABORT(); }(); - if (Y_UNLIKELY(!NYT::NDetail::HazardThreadState)) { + if (Y_UNLIKELY(!NYT::NDetail::HazardThreadState())) { NYT::NDetail::InitHazardThreadState(); } diff --git a/yt/yt/core/misc/hazard_ptr.cpp b/yt/yt/core/misc/hazard_ptr.cpp index 97f6da87e2..07b3f5c80a 100644 --- a/yt/yt/core/misc/hazard_ptr.cpp +++ b/yt/yt/core/misc/hazard_ptr.cpp @@ -32,7 +32,7 @@ namespace NDetail { //////////////////////////////////////////////////////////////////////////// -YT_THREAD_LOCAL(THazardPointerSet) HazardPointers; +YT_DEFINE_THREAD_LOCAL(THazardPointerSet, HazardPointers); //! A simple container based on free list which supports only Enqueue and DequeueAll. template <class T> @@ -112,8 +112,8 @@ struct THazardThreadState { } }; -YT_THREAD_LOCAL(THazardThreadState*) HazardThreadState; -YT_THREAD_LOCAL(bool) HazardThreadStateDestroyed; +YT_DEFINE_THREAD_LOCAL(THazardThreadState*, HazardThreadState); +YT_DEFINE_THREAD_LOCAL(bool, HazardThreadStateDestroyed); //////////////////////////////////////////////////////////////////////////////// @@ -204,15 +204,15 @@ void THazardPointerManager::Shutdown() void THazardPointerManager::RetireHazardPointer(TPackedPtr packedPtr, THazardPtrReclaimer reclaimer) { - auto* threadState = HazardThreadState; + auto* threadState = HazardThreadState(); if (Y_UNLIKELY(!threadState)) { - if (HazardThreadStateDestroyed) { + if (HazardThreadStateDestroyed()) { // Looks like a global shutdown. reclaimer(packedPtr); return; } InitThreadState(); - threadState = HazardThreadState; + threadState = HazardThreadState(); } threadState->RetireList.push({packedPtr, reclaimer}); @@ -229,7 +229,7 @@ void THazardPointerManager::RetireHazardPointer(TPackedPtr packedPtr, THazardPtr bool THazardPointerManager::TryReclaimHazardPointers() { - auto* threadState = HazardThreadState; + auto* threadState = HazardThreadState(); if (!threadState || threadState->RetireList.empty()) { return false; } @@ -254,15 +254,15 @@ void THazardPointerManager::ReclaimHazardPointers(bool flush) void THazardPointerManager::InitThreadState() { - if (!HazardThreadState) { - YT_VERIFY(!HazardThreadStateDestroyed); - HazardThreadState = AllocateThreadState(); + if (!HazardThreadState()) { + YT_VERIFY(!HazardThreadStateDestroyed()); + HazardThreadState() = AllocateThreadState(); } } -THazardThreadState* THazardPointerManager::AllocateThreadState() +YT_PREVENT_TLS_CACHING THazardThreadState* THazardPointerManager::AllocateThreadState() { - auto* threadState = new THazardThreadState(&GetTlsRef(HazardPointers)); + auto* threadState = new THazardThreadState(&HazardPointers()); struct THazardThreadStateDestroyer { @@ -275,7 +275,7 @@ THazardThreadState* THazardPointerManager::AllocateThreadState() }; // Unregisters thread from hazard ptr manager on thread exit. - YT_THREAD_LOCAL(THazardThreadStateDestroyer) destroyer{threadState}; + thread_local THazardThreadStateDestroyer destroyer{threadState}; { auto guard = WriterGuard(ThreadRegistryLock_); @@ -385,8 +385,8 @@ void THazardPointerManager::DestroyThreadState(THazardThreadState* threadState) delete threadState; - HazardThreadState = nullptr; - HazardThreadStateDestroyed = true; + HazardThreadState() = nullptr; + HazardThreadStateDestroyed() = true; } void THazardPointerManager::BeforeFork() @@ -404,8 +404,8 @@ void THazardPointerManager::AfterForkChild() ThreadRegistry_.Clear(); ThreadCount_ = 0; - if (HazardThreadState) { - ThreadRegistry_.PushBack(HazardThreadState); + if (HazardThreadState()) { + ThreadRegistry_.PushBack(HazardThreadState()); ThreadCount_ = 1; } diff --git a/yt/yt/core/misc/intrusive_list-inl.h b/yt/yt/core/misc/intrusive_list-inl.h deleted file mode 100644 index 9bf00d4eb1..0000000000 --- a/yt/yt/core/misc/intrusive_list-inl.h +++ /dev/null @@ -1,152 +0,0 @@ -#ifndef INTRUSIVE_LIST_INL_H_ -#error "Direct inclusion of this file is not allowed, include intrusive_list.h" -// For the sake of sane code completion. -#include "intrusive_list.h" -#endif - -#include <concepts> - -namespace NYT { - -//////////////////////////////////////////////////////////////////////////////// - -template <class T, class Tag> -void TIntrusiveNode<T, Tag>::Unlink() noexcept -{ - if (Next) { - Next->Prev = Prev; - } - - if (Prev) { - Prev->Next = Next; - } - - Prev = Next = nullptr; -} - -template <class T, class Tag> -void TIntrusiveNode<T, Tag>::LinkBefore(TIntrusiveNode* next) noexcept -{ - YT_VERIFY(!IsLinked()); - - Prev = next->Prev; - Prev->Next = this; - Next = next; - next->Prev = this; -} - -template <class T, class Tag> -bool TIntrusiveNode<T, Tag>::IsLinked() const noexcept -{ - return (Next != nullptr) || (Prev != nullptr); -} - -template <class T, class Tag> -T* TIntrusiveNode<T, Tag>::AsItem() noexcept -{ - return static_cast<T*>(this); -} - -//////////////////////////////////////////////////////////////////////////////// - -template <class T, class Tag> -TSimpleIntrusiveList<T, Tag>::TSimpleIntrusiveList() noexcept -{ - InitializeEmpty(); -} - -template <class T, class Tag> -TSimpleIntrusiveList<T, Tag>::TSimpleIntrusiveList(TList&& other) noexcept -{ - InitializeEmpty(); - Append(std::move(other)); -} - -template <class T, class Tag> -void TSimpleIntrusiveList<T, Tag>::PushBack(TNode* node) noexcept -{ - node->LinkBefore(&Head_); -} - -template <class T, class Tag> -void TSimpleIntrusiveList<T, Tag>::PushFront(TNode* node) noexcept -{ - node->LinkBefore(Head_.Next); -} - -template <class T, class Tag> -T*TSimpleIntrusiveList<T, Tag>::PopBack() noexcept -{ - if (IsEmpty()) { - return nullptr; - } - - TNode* back = Head_.Prev; - back->Unlink(); - return back->AsItem(); -} - -template <class T, class Tag> -T* TSimpleIntrusiveList<T, Tag>::PopFront() noexcept -{ - if (IsEmpty()) { - return nullptr; - } - - TNode* front = Head_.Next; - front->Unlink(); - return front->AsItem(); -} - -template <class T, class Tag> -void TSimpleIntrusiveList<T, Tag>::Append(TList&& other) noexcept -{ - if (other.IsEmpty()) { - return; - } - - auto* other_front = other.Head_.Next; - auto* current_back = Head_.Prev; - current_back->Next = other_front; - other_front->Prev = current_back; - - auto* other_back = other.Head_.Prev; - other_back->Next = &Head_; - Head_.Prev = other_back; - - other.InitializeEmpty(); -} - -template <class T, class Tag> -bool TSimpleIntrusiveList<T, Tag>::IsEmpty() const noexcept -{ - return Head_.Next == &Head_; -} - -template <class T, class Tag> -TIntrusiveNode<T, Tag>* TSimpleIntrusiveList<T, Tag>::Begin() -{ - return Head_.Next; -} - -template <class T, class Tag> -TIntrusiveNode<T, Tag>* TSimpleIntrusiveList<T, Tag>::End() -{ - return &Head_; -} - -template <class T, class Tag> -TSimpleIntrusiveList<T, Tag>::~TSimpleIntrusiveList() -{ - YT_VERIFY(IsEmpty()); -} - -template <class T, class Tag> -void TSimpleIntrusiveList<T, Tag>::InitializeEmpty() -{ - Head_.Next = Head_.Prev = &Head_; -} - -//////////////////////////////////////////////////////////////////////////////// - -} // namespace NYT diff --git a/yt/yt/core/misc/intrusive_list.h b/yt/yt/core/misc/intrusive_list.h deleted file mode 100644 index 208e5fea18..0000000000 --- a/yt/yt/core/misc/intrusive_list.h +++ /dev/null @@ -1,87 +0,0 @@ -#pragma once - -#include <cstdlib> - -namespace NYT { - -//////////////////////////////////////////////////////////////////////////////// - -struct TIntrusiveNodeDefaultTag -{ }; - -//////////////////////////////////////////////////////////////////////////////// - -// NB1: util/intrlist.h inits pointers differently -// and also doesn't provide a way to directly modify -// Next/Prev making it unusable in lockfree. -// NB2: yt/containers/intrusive_linked_list.h doesn't provide tag -// and gives quite a bit of overhead in the list (ItemToNode field, extra pointer -// and size field). It would be a bit more annoying to hardcode in introspection. -// TODO(arkady-e1ppa): Change util/intrlist.h to support lf algos and use it one day? -template <class T, class Tag = TIntrusiveNodeDefaultTag> -class TIntrusiveNode -{ -public: - TIntrusiveNode* Next = nullptr; - TIntrusiveNode* Prev = nullptr; - - TIntrusiveNode() = default; - - TIntrusiveNode(const TIntrusiveNode& other) = delete; - TIntrusiveNode& operator=(const TIntrusiveNode& other) = delete; - - void Unlink() noexcept; - - void LinkBefore(TIntrusiveNode* next) noexcept; - - bool IsLinked() const noexcept; - - T* AsItem() noexcept; -}; - -//////////////////////////////////////////////////////////////////////////////// - -template <class T, class Tag = TIntrusiveNodeDefaultTag> -class TSimpleIntrusiveList -{ - using TNode = TIntrusiveNode<T, Tag>; - using TList = TSimpleIntrusiveList<T, Tag>; - -public: - TSimpleIntrusiveList() noexcept; - TSimpleIntrusiveList(TSimpleIntrusiveList&& other) noexcept; - - TSimpleIntrusiveList(const TSimpleIntrusiveList& other) = delete; - TSimpleIntrusiveList& operator=(const TSimpleIntrusiveList& other) = delete; - TSimpleIntrusiveList& operator=(TSimpleIntrusiveList&& other) = delete; - - ~TSimpleIntrusiveList(); - - void PushBack(TNode* node) noexcept; - void PushFront(TNode* node) noexcept; - - T* PopBack() noexcept; - T* PopFront() noexcept; - - void Append(TList&& other) noexcept; - - bool IsEmpty() const noexcept; - - TNode* Begin(); - - TNode* End(); - -private: - // Sentinel node. - TNode Head_; - - void InitializeEmpty(); -}; - -//////////////////////////////////////////////////////////////////////////////// - -} // namespace NYT - -#define INTRUSIVE_LIST_INL_H_ -#include "intrusive_list-inl.h" -#undef INTRUSIVE_LIST_INL_H_ diff --git a/yt/yt/core/misc/intrusive_mpsc_stack-inl.h b/yt/yt/core/misc/intrusive_mpsc_stack-inl.h index dcd5682784..f294557942 100644 --- a/yt/yt/core/misc/intrusive_mpsc_stack-inl.h +++ b/yt/yt/core/misc/intrusive_mpsc_stack-inl.h @@ -13,17 +13,19 @@ namespace NYT { template <class T, class Tag> TIntrusiveMPSCStack<T, Tag>::TIntrusiveMPSCStack() noexcept { - static_assert(std::derived_from<T, TIntrusiveNode<T, Tag>>, "Class must inherit from CRTP-base TIntrusiveNode"); + static_assert(std::derived_from<T, TIntrusiveListItem<T, Tag>>, "Class must inherit from CRTP-base TIntrusiveListItem"); } template <class T, class Tag> void TIntrusiveMPSCStack<T, Tag>::Push(TNode* item) noexcept { + // Past this line item is not a valid instance of TInstrusiveListItem. + // NB: This saves up extra CAS in case of non-empty stack. - item->Next = Head_.load(std::memory_order::relaxed); + item->MutableNext() = Head_.load(std::memory_order::relaxed); while (!Head_.compare_exchange_weak( - item->Next, + item->MutableNext(), item, std::memory_order::release, std::memory_order::relaxed)) @@ -31,16 +33,18 @@ void TIntrusiveMPSCStack<T, Tag>::Push(TNode* item) noexcept } template <class T, class Tag> -TSimpleIntrusiveList<T, Tag> TIntrusiveMPSCStack<T, Tag>::PopAll() noexcept +TIntrusiveList<T, Tag> TIntrusiveMPSCStack<T, Tag>::PopAll() noexcept { TNode* head = Head_.exchange(nullptr, std::memory_order::acquire); - TSimpleIntrusiveList<T, Tag> list; + TIntrusiveList<T, Tag> list; while (head) { auto tmp = head; - head = head->Next; - tmp->Next = nullptr; + head = head->Next(); + + // From this line tmp is a valid instance of TIntrusiveListItem. + tmp->ResetItem(); list.PushFront(tmp); } diff --git a/yt/yt/core/misc/intrusive_mpsc_stack.h b/yt/yt/core/misc/intrusive_mpsc_stack.h index 80d460553e..0b54e13262 100644 --- a/yt/yt/core/misc/intrusive_mpsc_stack.h +++ b/yt/yt/core/misc/intrusive_mpsc_stack.h @@ -1,6 +1,6 @@ #pragma once -#include "intrusive_list.h" +#include <util/generic/intrlist.h> #include <atomic> @@ -8,17 +8,17 @@ namespace NYT { //////////////////////////////////////////////////////////////////////////////// -template <class T, class Tag = TIntrusiveNodeDefaultTag> +template <class T, class Tag = TIntrusiveListDefaultTag> class TIntrusiveMPSCStack { - using TNode = TIntrusiveNode<T, Tag>; + using TNode = TIntrusiveListItem<T, Tag>; public: TIntrusiveMPSCStack() noexcept; void Push(TNode* item) noexcept; - TSimpleIntrusiveList<T, Tag> PopAll() noexcept; + TIntrusiveList<T, Tag> PopAll() noexcept; private: std::atomic<TNode*> Head_ = nullptr; diff --git a/yt/yt/core/misc/pool_allocator-inl.h b/yt/yt/core/misc/pool_allocator-inl.h index 4d33816df4..95a9e2cf40 100644 --- a/yt/yt/core/misc/pool_allocator-inl.h +++ b/yt/yt/core/misc/pool_allocator-inl.h @@ -67,18 +67,18 @@ inline void TPoolAllocator::Free(void* ptr) noexcept } template <std::derived_from<TPoolAllocator::TObjectBase> T, class... TArgs> -std::unique_ptr<T> TPoolAllocator::New(TArgs&&... args) +YT_PREVENT_TLS_CACHING std::unique_ptr<T> TPoolAllocator::New(TArgs&&... args) { struct TChunkTag { }; constexpr auto ChunkSize = 64_KB; - YT_THREAD_LOCAL(TPoolAllocator) Allocator( + thread_local TPoolAllocator Allocator( sizeof(T), alignof(T), ChunkSize, GetRefCountedTypeCookie<TChunkTag>()); - return std::unique_ptr<T>(new(&GetTlsRef(Allocator)) T(std::forward<TArgs>(args)...)); + return std::unique_ptr<T>(new(&Allocator) T(std::forward<TArgs>(args)...)); } inline void TPoolAllocator::DoFree(void* ptr) diff --git a/yt/yt/core/misc/proc.cpp b/yt/yt/core/misc/proc.cpp index e757d73ffd..2518ad1699 100644 --- a/yt/yt/core/misc/proc.cpp +++ b/yt/yt/core/misc/proc.cpp @@ -1529,6 +1529,43 @@ THashMap<TString, TDiskStat> GetDiskStats() #endif } +TBlockDeviceStat ParseBlockDeviceStat(const TString& statLine) +{ + auto buffer = SplitString(statLine, " "); + TBlockDeviceStat result; + TryParseField(buffer, 0, result.ReadsCompleted); + TryParseField(buffer, 1, result.ReadsMerged); + TryParseField(buffer, 2, result.SectorsRead); + TryParseField(buffer, 3, result.TimeSpentReading); + TryParseField(buffer, 4, result.WritesCompleted); + TryParseField(buffer, 5, result.WritesMerged); + TryParseField(buffer, 6, result.SectorsWritten); + TryParseField(buffer, 7, result.TimeSpentWriting); + TryParseField(buffer, 8, result.IOCurrentlyInProgress); + TryParseField(buffer, 9, result.TimeSpentDoingIO); + TryParseField(buffer, 10, result.WeightedTimeSpentDoingIO); + TryParseField(buffer, 11, result.DiscardsCompleted); + TryParseField(buffer, 12, result.DiscardsMerged); + TryParseField(buffer, 13, result.SectorsDiscarded); + TryParseField(buffer, 14, result.TimeSpentDiscarding); + TryParseField(buffer, 15, result.FlushesCompleted); + TryParseField(buffer, 16, result.TimeSpentFlushing); + return result; +} + +std::optional<TBlockDeviceStat> GetBlockDeviceStat(const TString& deviceName) +{ +#ifdef _linux_ + const TString path = Format("/sys/block/%v/stat", deviceName); + TFileInput diskStatsFile(path); + auto data = diskStatsFile.ReadAll(); + return ParseBlockDeviceStat(Strip(data)); +#else + Y_UNUSED(deviceName); + return std::nullopt; +#endif +} + std::vector<TString> ListDisks() { #ifdef _linux_ diff --git a/yt/yt/core/misc/proc.h b/yt/yt/core/misc/proc.h index 1248d66a5c..7eafd72113 100644 --- a/yt/yt/core/misc/proc.h +++ b/yt/yt/core/misc/proc.h @@ -343,8 +343,37 @@ struct TDiskStat TDiskStat ParseDiskStat(const TString& statLine); +// See https://docs.kernel.org/block/stat.html for more info. +struct TBlockDeviceStat +{ + i64 ReadsCompleted = 0; + i64 ReadsMerged = 0; + i64 SectorsRead = 0; + TDuration TimeSpentReading; + + i64 WritesCompleted = 0; + i64 WritesMerged = 0; + i64 SectorsWritten = 0; + TDuration TimeSpentWriting; + + i64 IOCurrentlyInProgress = 0; + TDuration TimeSpentDoingIO; + TDuration WeightedTimeSpentDoingIO; + + i64 DiscardsCompleted = 0; + i64 DiscardsMerged = 0; + i64 SectorsDiscarded = 0; + TDuration TimeSpentDiscarding; + + i64 FlushesCompleted = 0; + TDuration TimeSpentFlushing; +}; + +TBlockDeviceStat ParseBlockDeviceStat(const TString& statLine); + //! DeviceName to stat info THashMap<TString, TDiskStat> GetDiskStats(); +std::optional<TBlockDeviceStat> GetBlockDeviceStat(const TString& deviceName); std::vector<TString> ListDisks(); //////////////////////////////////////////////////////////////////////////////// diff --git a/yt/yt/core/misc/ref_counted_tracker-inl.h b/yt/yt/core/misc/ref_counted_tracker-inl.h index e7c4b6c52b..8e132d59a5 100644 --- a/yt/yt/core/misc/ref_counted_tracker-inl.h +++ b/yt/yt/core/misc/ref_counted_tracker-inl.h @@ -108,6 +108,9 @@ private: //////////////////////////////////////////////////////////////////////////////// +YT_DECLARE_THREAD_LOCAL(TRefCountedTracker::TLocalSlot*, RefCountedTrackerLocalSlotsBegin); +YT_DECLARE_THREAD_LOCAL(int, RefCountedTrackerLocalSlotsSize); + Y_FORCE_INLINE TRefCountedTracker* TRefCountedTracker::Get() { return LeakySingleton<TRefCountedTracker>(); @@ -116,10 +119,10 @@ Y_FORCE_INLINE TRefCountedTracker* TRefCountedTracker::Get() #define INCREMENT_COUNTER(fallback, name, delta) \ auto index = cookie.Underlying(); \ YT_ASSERT(index >= 0); \ - if (Y_UNLIKELY(index >= LocalSlotsSize_)) { \ + if (Y_UNLIKELY(index >= RefCountedTrackerLocalSlotsSize())) { \ Get()->fallback; \ } else { \ - LocalSlotsBegin_[index].name += delta; \ + RefCountedTrackerLocalSlotsBegin()[index].name += delta; \ } Y_FORCE_INLINE void TRefCountedTracker::AllocateInstance(TRefCountedTypeCookie cookie) diff --git a/yt/yt/core/misc/ref_counted_tracker.cpp b/yt/yt/core/misc/ref_counted_tracker.cpp index c15ceb840d..af06706eb3 100644 --- a/yt/yt/core/misc/ref_counted_tracker.cpp +++ b/yt/yt/core/misc/ref_counted_tracker.cpp @@ -144,14 +144,14 @@ size_t TRefCountedTracker::TNamedSlot::ClampNonnegative(size_t allocated, size_t //////////////////////////////////////////////////////////////////////////////// // nullptr if not initialized or already destroyed -YT_THREAD_LOCAL(TRefCountedTracker::TLocalSlots*) TRefCountedTracker::LocalSlots_; +YT_DEFINE_THREAD_LOCAL(TRefCountedTracker::TLocalSlots*, RefCountedTrackerLocalSlots); // nullptr if not initialized or already destroyed -YT_THREAD_LOCAL(TRefCountedTracker::TLocalSlot*) TRefCountedTracker::LocalSlotsBegin_; +YT_DEFINE_THREAD_LOCAL(TRefCountedTracker::TLocalSlot*, RefCountedTrackerLocalSlotsBegin); // 0 if not initialized // -1 if already destroyed -YT_THREAD_LOCAL(int) TRefCountedTracker::LocalSlotsSize_; +YT_DEFINE_THREAD_LOCAL(int, RefCountedTrackerLocalSlotsSize); int TRefCountedTracker::GetTrackedThreadCount() const { @@ -361,7 +361,7 @@ TRefCountedTracker::TNamedSlot TRefCountedTracker::GetSlot(TRefCountedTypeKey ty } #define INCREMENT_COUNTER_SLOW(name, delta) \ - if (LocalSlotsSize_ < 0) { \ + if (RefCountedTrackerLocalSlotsSize() < 0) { \ auto guard = Guard(SpinLock_); \ GetGlobalSlot(cookie)->name += delta; \ } else { \ @@ -412,7 +412,7 @@ TRefCountedTracker::TLocalSlot* TRefCountedTracker::GetLocalSlot(TRefCountedType auto guard = Guard(this_->SpinLock_); - auto& localSlots = GetTlsRef(LocalSlots_); + auto& localSlots = RefCountedTrackerLocalSlots(); if (this_->GlobalSlots_.size() < localSlots->size()) { this_->GlobalSlots_.resize(std::max(localSlots->size(), this_->GlobalSlots_.size())); @@ -424,33 +424,38 @@ TRefCountedTracker::TLocalSlot* TRefCountedTracker::GetLocalSlot(TRefCountedType YT_VERIFY(this_->AllLocalSlots_.erase(localSlots) == 1); - delete LocalSlots_; - LocalSlots_ = nullptr; - LocalSlotsBegin_ = nullptr; - LocalSlotsSize_ = -1; + delete localSlots; + localSlots = nullptr; + RefCountedTrackerLocalSlotsBegin() = nullptr; + RefCountedTrackerLocalSlotsSize() = -1; } }; - YT_THREAD_LOCAL(TReclaimer) Reclaimer; + thread_local TReclaimer Reclaimer; - YT_VERIFY(LocalSlotsSize_ >= 0); + auto& refCountedTrackerLocalSlotsSize = RefCountedTrackerLocalSlotsSize(); + + YT_VERIFY(refCountedTrackerLocalSlotsSize >= 0); auto guard = Guard(SpinLock_); - if (!LocalSlots_) { - LocalSlots_ = new TLocalSlots(); - YT_VERIFY(AllLocalSlots_.insert(GetTlsRef(LocalSlots_)).second); + auto& localSlotsBegin = RefCountedTrackerLocalSlotsBegin(); + auto& localSlots = RefCountedTrackerLocalSlots(); + + if (!localSlots) { + localSlots = new TLocalSlots(); + YT_VERIFY(AllLocalSlots_.insert(localSlots).second); } auto index = cookie.Underlying(); - if (index >= std::ssize(*LocalSlots_)) { - LocalSlots_->resize(static_cast<size_t>(index) + 1); + if (index >= std::ssize(*localSlots)) { + localSlots->resize(static_cast<size_t>(index) + 1); } - LocalSlotsBegin_ = LocalSlots_->data(); - LocalSlotsSize_ = std::ssize(*LocalSlots_); + localSlotsBegin = localSlots->data(); + refCountedTrackerLocalSlotsSize = std::ssize(*localSlots); - return LocalSlotsBegin_ + index; + return localSlotsBegin + index; } TRefCountedTracker::TGlobalSlot* TRefCountedTracker::GetGlobalSlot(TRefCountedTypeCookie cookie) diff --git a/yt/yt/core/misc/ref_counted_tracker.h b/yt/yt/core/misc/ref_counted_tracker.h index 89c161151d..485a7ee6e1 100644 --- a/yt/yt/core/misc/ref_counted_tracker.h +++ b/yt/yt/core/misc/ref_counted_tracker.h @@ -50,6 +50,15 @@ class TRefCountedTracker : private TNonCopyable { public: + struct TLocalSlot; + using TLocalSlots = std::vector<TLocalSlot>; + + struct TGlobalSlot; + using TGlobalSlots = std::vector<TGlobalSlot>; + + class TNamedSlot; + using TNamedStatistics = std::vector<TNamedSlot>; + static TRefCountedTracker* Get(); TRefCountedTypeCookie GetCookie( @@ -90,25 +99,6 @@ private: bool operator == (const TKey& other) const; }; - struct TLocalSlot; - using TLocalSlots = std::vector<TLocalSlot>; - - struct TGlobalSlot; - using TGlobalSlots = std::vector<TGlobalSlot>; - - class TNamedSlot; - using TNamedStatistics = std::vector<TNamedSlot>; - - // nullptr if not initialized or already destroyed - static YT_THREAD_LOCAL(TLocalSlots*) LocalSlots_; - - // nullptr if not initialized or already destroyed - static YT_THREAD_LOCAL(TLocalSlot*) LocalSlotsBegin_; - - // 0 if not initialized - // -1 if already destroyed - static YT_THREAD_LOCAL(int) LocalSlotsSize_; - mutable NThreading::TForkAwareSpinLock SpinLock_; std::map<TKey, TRefCountedTypeCookie> KeyToCookie_; std::map<TRefCountedTypeKey, size_t> TypeKeyToObjectSize_; diff --git a/yt/yt/core/misc/shutdown.cpp b/yt/yt/core/misc/shutdown.cpp index 25a772a2d6..d509350c07 100644 --- a/yt/yt/core/misc/shutdown.cpp +++ b/yt/yt/core/misc/shutdown.cpp @@ -290,7 +290,7 @@ static const void* ShutdownGuardInitializer = [] { } }; - static YT_THREAD_LOCAL(TShutdownGuard) Guard; + static thread_local TShutdownGuard Guard; return nullptr; }(); diff --git a/yt/yt/core/misc/unittests/proc_ut.cpp b/yt/yt/core/misc/unittests/proc_ut.cpp index f18e462aef..ed8bca5cb5 100644 --- a/yt/yt/core/misc/unittests/proc_ut.cpp +++ b/yt/yt/core/misc/unittests/proc_ut.cpp @@ -165,6 +165,36 @@ TEST(TProcTest, DiskStat) } } +TEST(TProcTest, BlockDeviceStat) +{ + { + auto stat = ParseBlockDeviceStat("509883438 87421933 206345875260 1643399993 1892382802 4495364138 837307482336 2391271400 0 2964131914 3304110410 0 0 0 0 81921472 3564406312"); + EXPECT_EQ(stat.ReadsCompleted, 509883438ll); + EXPECT_EQ(stat.ReadsMerged, 87421933ll); + EXPECT_EQ(stat.SectorsRead, 206345875260ll); + EXPECT_EQ(stat.TimeSpentReading, TDuration::MilliSeconds(1643399993ul)); + EXPECT_EQ(stat.WritesCompleted, 1892382802ll); + EXPECT_EQ(stat.WritesMerged, 4495364138ll); + EXPECT_EQ(stat.SectorsWritten, 837307482336ll); + EXPECT_EQ(stat.TimeSpentWriting, TDuration::MilliSeconds(2391271400ul)); + EXPECT_EQ(stat.IOCurrentlyInProgress, 0ll); + EXPECT_EQ(stat.TimeSpentDoingIO, TDuration::MilliSeconds(2964131914ul)); + EXPECT_EQ(stat.WeightedTimeSpentDoingIO, TDuration::MilliSeconds(3304110410ul)); + EXPECT_EQ(stat.DiscardsCompleted, 0ll); + EXPECT_EQ(stat.DiscardsMerged, 0ll); + EXPECT_EQ(stat.SectorsDiscarded, 0ll); + EXPECT_EQ(stat.TimeSpentDiscarding, TDuration::MilliSeconds(0ul)); + EXPECT_EQ(stat.FlushesCompleted, 81921472ll); + EXPECT_EQ(stat.TimeSpentFlushing, TDuration::MilliSeconds(3564406312ul)); + } + { + for (const TString& disk : ListDisks()) { + auto stat = GetBlockDeviceStat(disk); + EXPECT_TRUE(stat); + } + } +} + TEST(TProcTest, FileDescriptorCount) { auto initialCount = GetFileDescriptorCount(); diff --git a/yt/yt/core/misc/unittests/tls_destructor_ut.cpp b/yt/yt/core/misc/unittests/tls_destructor_ut.cpp index 943f31ce72..b2f02e1617 100644 --- a/yt/yt/core/misc/unittests/tls_destructor_ut.cpp +++ b/yt/yt/core/misc/unittests/tls_destructor_ut.cpp @@ -19,7 +19,7 @@ struct TTlsGuard } }; -YT_THREAD_LOCAL(TTlsGuard) TlsGuard; +YT_DEFINE_THREAD_LOCAL(TTlsGuard, TlsGuard); TEST(TTlsDestructorTest, DestructorIsCalled) { @@ -27,7 +27,7 @@ TEST(TTlsDestructorTest, DestructorIsCalled) std::thread thread{[] { // Important moment. TLS must be touched to be initialized and destructed later. - Y_UNUSED(TlsGuard); + Y_UNUSED(TlsGuard()); }}; thread.join(); diff --git a/yt/yt/core/rpc/bus/channel.cpp b/yt/yt/core/rpc/bus/channel.cpp index b085986df7..ba47fba03d 100644 --- a/yt/yt/core/rpc/bus/channel.cpp +++ b/yt/yt/core/rpc/bus/channel.cpp @@ -389,7 +389,7 @@ private: return requestControl; } - void Cancel(const TClientRequestControlPtr& requestControl) + YT_PREVENT_TLS_CACHING void Cancel(const TClientRequestControlPtr& requestControl) { VERIFY_THREAD_AFFINITY_ANY(); @@ -419,7 +419,7 @@ private: } // YT-1639: Avoid long chain of recursive calls. - YT_THREAD_LOCAL(int) Depth = 0; + thread_local int Depth = 0; constexpr int MaxDepth = 10; if (Depth < MaxDepth) { ++Depth; diff --git a/yt/yt/core/rpc/service_detail.cpp b/yt/yt/core/rpc/service_detail.cpp index 23c7284dab..e5b061424f 100644 --- a/yt/yt/core/rpc/service_detail.cpp +++ b/yt/yt/core/rpc/service_detail.cpp @@ -1453,17 +1453,17 @@ void TRequestQueue::OnRequestFinished(i64 requestTotalSize) // Prevents reentrant invocations. // One case is: RunRequest calling the handler synchronously, which replies the // context, which calls context->Finish, and we're back here again. -YT_THREAD_LOCAL(bool) ScheduleRequestsLatch = false; +YT_DEFINE_THREAD_LOCAL(bool, ScheduleRequestsLatch, false); void TRequestQueue::ScheduleRequestsFromQueue() { - if (ScheduleRequestsLatch) { + if (ScheduleRequestsLatch()) { return; } - ScheduleRequestsLatch = true; + ScheduleRequestsLatch() = true; auto latchGuard = Finally([&] { - ScheduleRequestsLatch = false; + ScheduleRequestsLatch() = false; }); #ifndef NDEBUG diff --git a/yt/yt/core/rpc/service_detail.h b/yt/yt/core/rpc/service_detail.h index 2c2f7f3b1c..da707d9080 100644 --- a/yt/yt/core/rpc/service_detail.h +++ b/yt/yt/core/rpc/service_detail.h @@ -426,7 +426,7 @@ protected: return ::NYT::NRpc::TServiceBase::TLiteHandler(); \ } \ return \ - BIND([=, this] ( \ + BIND_NO_PROPAGATE([=, this] ( \ const ::NYT::NRpc::IServiceContextPtr&, \ const ::NYT::NRpc::THandlerInvocationOptions&) \ { \ diff --git a/yt/yt/core/threading/thread.cpp b/yt/yt/core/threading/thread.cpp index 7bd7049493..41688af355 100644 --- a/yt/yt/core/threading/thread.cpp +++ b/yt/yt/core/threading/thread.cpp @@ -20,7 +20,7 @@ namespace NYT::NThreading { //////////////////////////////////////////////////////////////////////////////// -YT_THREAD_LOCAL(TThreadId) CurrentUniqueThreadId; +YT_DEFINE_THREAD_LOCAL(TThreadId, CurrentUniqueThreadId) ; static std::atomic<TThreadId> UniqueThreadIdGenerator; static const auto& Logger = ThreadingLogger; @@ -110,7 +110,7 @@ bool TThread::StartSlow() bool TThread::CanWaitForThreadShutdown() const { return - CurrentUniqueThreadId != UniqueThreadId_ && + CurrentUniqueThreadId() != UniqueThreadId_ && GetShutdownThreadId() != ThreadId_; } @@ -195,14 +195,14 @@ void* TThread::StaticThreadMainTrampoline(void* opaque) return nullptr; } -void TThread::ThreadMainTrampoline() +YT_PREVENT_TLS_CACHING void TThread::ThreadMainTrampoline() { auto this_ = MakeStrong(this); ::TThread::SetCurrentThreadName(ThreadName_.c_str()); ThreadId_ = GetCurrentThreadId(); - CurrentUniqueThreadId = UniqueThreadId_; + CurrentUniqueThreadId() = UniqueThreadId_; SetThreadPriority(); ConfigureSignalHandlerStack(); @@ -233,7 +233,7 @@ void TThread::ThreadMainTrampoline() bool Armed_ = true; }; - YT_THREAD_LOCAL(TExitInterceptor) Interceptor; + thread_local TExitInterceptor Interceptor; if (Options_.ThreadInitializer) { Options_.ThreadInitializer(); @@ -241,7 +241,7 @@ void TThread::ThreadMainTrampoline() ThreadMain(); - GetTlsRef(Interceptor).Disarm(); + Interceptor.Disarm(); StoppedEvent_.NotifyAll(); } @@ -282,23 +282,23 @@ void TThread::SetThreadPriority() #endif } -void TThread::ConfigureSignalHandlerStack() +YT_PREVENT_TLS_CACHING void TThread::ConfigureSignalHandlerStack() { #if !defined(_asan_enabled_) && !defined(_msan_enabled_) && \ (_XOPEN_SOURCE >= 500 || \ /* Since glibc 2.12: */ _POSIX_C_SOURCE >= 200809L || \ /* glibc <= 2.19: */ _BSD_SOURCE) - YT_THREAD_LOCAL(bool) Configured; + thread_local bool Configured; if (std::exchange(Configured, true)) { return; } // The size of of the custom stack to be provided for signal handlers. constexpr size_t SignalHandlerStackSize = 16_KB; - YT_THREAD_LOCAL(std::unique_ptr<char[]>) Stack = std::make_unique<char[]>(SignalHandlerStackSize); + thread_local std::unique_ptr<char[]> Stack = std::make_unique<char[]>(SignalHandlerStackSize); stack_t stack{ - .ss_sp = GetTlsRef(Stack).get(), + .ss_sp = Stack.get(), .ss_flags = 0, .ss_size = SignalHandlerStackSize, }; diff --git a/yt/yt/core/tracing/trace_context-inl.h b/yt/yt/core/tracing/trace_context-inl.h index 0b74bf56d9..83d87b3f0d 100644 --- a/yt/yt/core/tracing/trace_context-inl.h +++ b/yt/yt/core/tracing/trace_context-inl.h @@ -181,7 +181,7 @@ std::optional<TTag> TTraceContext::SetAllocationTag(const TString& key, TTag new namespace NDetail { -extern YT_THREAD_LOCAL(TTraceContext*) CurrentTraceContext; +YT_DECLARE_THREAD_LOCAL(TTraceContext*, CurrentTraceContext); TTraceContextPtr SwapTraceContext(TTraceContextPtr newContext); @@ -322,13 +322,13 @@ inline void TTraceContextFinishGuard::Release() Y_FORCE_INLINE TTraceContext* TryGetCurrentTraceContext() { - return NDetail::CurrentTraceContext; + return NDetail::CurrentTraceContext(); } Y_FORCE_INLINE TTraceContext* GetCurrentTraceContext() { - YT_ASSERT(NDetail::CurrentTraceContext); - return NDetail::CurrentTraceContext; + YT_ASSERT(NDetail::CurrentTraceContext()); + return NDetail::CurrentTraceContext(); } Y_FORCE_INLINE TTraceContextPtr CreateTraceContextFromCurrent(TString spanName) diff --git a/yt/yt/core/tracing/trace_context.cpp b/yt/yt/core/tracing/trace_context.cpp index 4fe7a615d0..6feb04aed2 100644 --- a/yt/yt/core/tracing/trace_context.cpp +++ b/yt/yt/core/tracing/trace_context.cpp @@ -102,8 +102,8 @@ TTracingTransportConfigPtr GetTracingTransportConfig() namespace NDetail { -YT_THREAD_LOCAL(TTraceContext*) CurrentTraceContext; -YT_THREAD_LOCAL(TCpuInstant) TraceContextTimingCheckpoint; +YT_DEFINE_THREAD_LOCAL(TTraceContext*, CurrentTraceContext); +YT_DEFINE_THREAD_LOCAL(TCpuInstant, TraceContextTimingCheckpoint); TSpanId GenerateSpanId() { @@ -112,7 +112,7 @@ TSpanId GenerateSpanId() void SetCurrentTraceContext(TTraceContext* context) { - CurrentTraceContext = context; + CurrentTraceContext() = context; std::atomic_signal_fence(std::memory_order::seq_cst); } @@ -122,8 +122,9 @@ TTraceContextPtr SwapTraceContext(TTraceContextPtr newContext) auto oldContext = propagatingStorage.Exchange<TTraceContextPtr>(newContext).value_or(nullptr); auto now = GetApproximateCpuInstant(); + auto& traceContextTimingCheckpoint = TraceContextTimingCheckpoint(); // Invalid if no oldContext. - auto delta = now - TraceContextTimingCheckpoint; + auto delta = now - traceContextTimingCheckpoint; if (oldContext && newContext) { YT_LOG_TRACE("Switching context (OldContext: %v, NewContext: %v, CpuTimeDelta: %v)", @@ -144,7 +145,7 @@ TTraceContextPtr SwapTraceContext(TTraceContextPtr newContext) } SetCurrentTraceContext(newContext.Get()); - TraceContextTimingCheckpoint = now; + traceContextTimingCheckpoint = now; return oldContext; } @@ -152,10 +153,11 @@ TTraceContextPtr SwapTraceContext(TTraceContextPtr newContext) void OnContextSwitchOut() { if (auto* context = TryGetCurrentTraceContext()) { + auto& traceContextTimingCheckpoint = TraceContextTimingCheckpoint(); auto now = GetApproximateCpuInstant(); - context->IncrementElapsedCpuTime(now - TraceContextTimingCheckpoint); + context->IncrementElapsedCpuTime(now - traceContextTimingCheckpoint); SetCurrentTraceContext(nullptr); - TraceContextTimingCheckpoint = 0; + traceContextTimingCheckpoint = 0; } } @@ -163,10 +165,10 @@ void OnContextSwitchIn() { if (auto* context = TryGetTraceContextFromPropagatingStorage(GetCurrentPropagatingStorage())) { SetCurrentTraceContext(context); - TraceContextTimingCheckpoint = GetApproximateCpuInstant(); + TraceContextTimingCheckpoint() = GetApproximateCpuInstant(); } else { SetCurrentTraceContext(nullptr); - TraceContextTimingCheckpoint = 0; + TraceContextTimingCheckpoint() = 0; } } @@ -175,12 +177,13 @@ void OnPropagatingStorageSwitch( const TPropagatingStorage& newStorage) { TCpuInstant now = 0; + auto& traceContextTimingCheckpoint = TraceContextTimingCheckpoint(); if (auto* oldContext = TryGetCurrentTraceContext()) { YT_ASSERT(oldContext == TryGetTraceContextFromPropagatingStorage(oldStorage)); - YT_ASSERT(TraceContextTimingCheckpoint != 0); + YT_ASSERT(traceContextTimingCheckpoint != 0); now = GetApproximateCpuInstant(); - oldContext->IncrementElapsedCpuTime(now - TraceContextTimingCheckpoint); + oldContext->IncrementElapsedCpuTime(now - traceContextTimingCheckpoint); } if (auto* newContext = TryGetTraceContextFromPropagatingStorage(newStorage)) { @@ -188,10 +191,10 @@ void OnPropagatingStorageSwitch( if (now == 0) { now = GetApproximateCpuInstant(); } - TraceContextTimingCheckpoint = now; + traceContextTimingCheckpoint = now; } else { SetCurrentTraceContext(nullptr); - TraceContextTimingCheckpoint = 0; + traceContextTimingCheckpoint = 0; } } @@ -712,13 +715,15 @@ void FlushCurrentTraceContextElapsedTime() return; } + auto& traceContextTimingCheckpoint = NDetail::TraceContextTimingCheckpoint(); + auto now = GetApproximateCpuInstant(); - auto delta = std::max(now - NDetail::TraceContextTimingCheckpoint, static_cast<TCpuInstant>(0)); + auto delta = std::max(now - traceContextTimingCheckpoint, static_cast<TCpuInstant>(0)); YT_LOG_TRACE("Flushing context time (Context: %v, CpuTimeDelta: %v)", context, NProfiling::CpuDurationToDuration(delta)); context->IncrementElapsedCpuTime(delta); - NDetail::TraceContextTimingCheckpoint = now; + traceContextTimingCheckpoint = now; } bool IsCurrentTraceContextRecorded() @@ -770,7 +775,7 @@ void ReleaseFiberTagStorage(void* storage) TCpuInstant GetTraceContextTimingCheckpoint() { - return NTracing::NDetail::TraceContextTimingCheckpoint; + return NTracing::NDetail::TraceContextTimingCheckpoint(); } //////////////////////////////////////////////////////////////////////////////// diff --git a/yt/yt/core/ya.make b/yt/yt/core/ya.make index 9e820939ac..6806f169c6 100644 --- a/yt/yt/core/ya.make +++ b/yt/yt/core/ya.make @@ -9,6 +9,8 @@ IF (ARCH_X86_64) CFLAGS(-mpclmul) ENDIF() +NO_LTO() + SRCS( actions/cancelable_context.cpp actions/current_invoker.cpp diff --git a/yt/yt/core/ypath/stack.cpp b/yt/yt/core/ypath/stack.cpp index c236d47d20..a590402fb1 100644 --- a/yt/yt/core/ypath/stack.cpp +++ b/yt/yt/core/ypath/stack.cpp @@ -86,6 +86,13 @@ TString TYPathStack::ToString(const TYPathStack::TEntry& item) }); } +void TYPathStack::Reset() +{ + PreviousPathLengths_.clear(); + Path_.clear(); + Items_.clear(); +} + //////////////////////////////////////////////////////////////////////////////// } // namespace NYT::NYPath diff --git a/yt/yt/core/ypath/stack.h b/yt/yt/core/ypath/stack.h index e7b8bfa878..e5b40f2be7 100644 --- a/yt/yt/core/ypath/stack.h +++ b/yt/yt/core/ypath/stack.h @@ -29,6 +29,8 @@ public: TString GetHumanReadablePath() const; std::optional<TString> TryGetStringifiedLastPathToken() const; + void Reset(); + private: std::vector<size_t> PreviousPathLengths_; TString Path_; diff --git a/yt/yt/core/ypath/tokenizer.cpp b/yt/yt/core/ypath/tokenizer.cpp index 45fa0f4020..6079747cfb 100644 --- a/yt/yt/core/ypath/tokenizer.cpp +++ b/yt/yt/core/ypath/tokenizer.cpp @@ -211,6 +211,11 @@ ETokenType TTokenizer::GetType() const return Type_; } +ETokenType TTokenizer::GetPreviousType() const +{ + return PreviousType_; +} + TStringBuf TTokenizer::GetToken() const { return Token_; @@ -248,6 +253,27 @@ const TString& TTokenizer::GetLiteralValue() const //////////////////////////////////////////////////////////////////////////////// +TTokenizer::TCheckpoint::TCheckpoint(TTokenizer& tokenizer) + : Tokenizer_(tokenizer) + , Path_(tokenizer.Path_) + , Type_(tokenizer.Type_) + , PreviousType_(tokenizer.PreviousType_) + , Token_(tokenizer.Token_) + , Input_(tokenizer.Input_) +{ } + +TTokenizer::TCheckpoint::~TCheckpoint() +{ + Tokenizer_.Path_ = Path_; + Tokenizer_.Type_ = Type_; + Tokenizer_.PreviousType_ = PreviousType_; + Tokenizer_.Token_ = Token_; + Tokenizer_.Input_ = Input_; + Tokenizer_.LiteralValue_.clear(); +} + +//////////////////////////////////////////////////////////////////////////////// + bool HasPrefix(const TYPath& fullPath, const TYPath& prefixPath) { TTokenizer fullTokenizer(fullPath); diff --git a/yt/yt/core/ypath/tokenizer.h b/yt/yt/core/ypath/tokenizer.h index 46cf2a058d..57b714a580 100644 --- a/yt/yt/core/ypath/tokenizer.h +++ b/yt/yt/core/ypath/tokenizer.h @@ -22,6 +22,7 @@ public: ETokenType Advance(); ETokenType GetType() const; + ETokenType GetPreviousType() const; TStringBuf GetToken() const; TStringBuf GetPrefix() const; TStringBuf GetPrefixPlusToken() const; @@ -35,9 +36,27 @@ public: bool Skip(ETokenType expectedType); [[noreturn]] void ThrowUnexpected() const; + // For iterations. Restores tokenizer to current state on destruction. + // Does not restore LiteralValue_. + class TCheckpoint + { + public: + explicit TCheckpoint(TTokenizer& tokenizer); + ~TCheckpoint(); + + private: + TTokenizer& Tokenizer_; + TYPathBuf Path_; + ETokenType Type_; + ETokenType PreviousType_; + TStringBuf Token_; + TStringBuf Input_; + }; + private: - TYPathBuf Path_; + friend class TTokenizer::TCheckpoint; + TYPathBuf Path_; ETokenType Type_; ETokenType PreviousType_; TStringBuf Token_; diff --git a/yt/yt/core/yson/protobuf_interop.cpp b/yt/yt/core/yson/protobuf_interop.cpp index 46ddb438cb..855e4094fe 100644 --- a/yt/yt/core/yson/protobuf_interop.cpp +++ b/yt/yt/core/yson/protobuf_interop.cpp @@ -540,20 +540,20 @@ public: } switch (GetType()) { - case FieldDescriptor::TYPE_INT32: case FieldDescriptor::TYPE_FIXED32: case FieldDescriptor::TYPE_UINT32: consumer->OnStringScalar("uint32"); break; - case FieldDescriptor::TYPE_INT64: case FieldDescriptor::TYPE_FIXED64: case FieldDescriptor::TYPE_UINT64: consumer->OnStringScalar("uint64"); break; + case FieldDescriptor::TYPE_INT32: case FieldDescriptor::TYPE_SINT32: case FieldDescriptor::TYPE_SFIXED32: consumer->OnStringScalar("int32"); break; + case FieldDescriptor::TYPE_INT64: case FieldDescriptor::TYPE_SINT64: case FieldDescriptor::TYPE_SFIXED64: consumer->OnStringScalar("int64"); diff --git a/yt/yt/core/yson/unittests/proto/protobuf_yson_schema_ut.proto b/yt/yt/core/yson/unittests/proto/protobuf_yson_schema_ut.proto index ef5a690496..0e5dbe293c 100644 --- a/yt/yt/core/yson/unittests/proto/protobuf_yson_schema_ut.proto +++ b/yt/yt/core/yson/unittests/proto/protobuf_yson_schema_ut.proto @@ -33,5 +33,5 @@ message TTestSchemaMessage repeated int32 repeated_int32_field = 18; map<string, int32> string_to_int32_map = 19[(NYT.NYson.NProto.yson_map) = true]; - map<int32, string> int32_to_int32_map = 20[(NYT.NYson.NProto.yson_map) = true]; + map<int32, string> int32_to_string_map = 20[(NYT.NYson.NProto.yson_map) = true]; } diff --git a/yt/yt/core/yson/unittests/protobuf_yson_schema_ut.cpp b/yt/yt/core/yson/unittests/protobuf_yson_schema_ut.cpp index af58fb320a..95104e8aa0 100644 --- a/yt/yt/core/yson/unittests/protobuf_yson_schema_ut.cpp +++ b/yt/yt/core/yson/unittests/protobuf_yson_schema_ut.cpp @@ -25,10 +25,10 @@ TEST(TProtobufYsonSchemaTest, GetMessageSchema) TStringBuf expected = R"({ type_name="struct"; members=[ - {name="int32_field";type="uint32";}; + {name="int32_field";type="int32";}; {name="uint32_field";type="uint32";}; {name="sint32_field";type="int32";}; - {name="int64_field";type="uint64";}; + {name="int64_field";type="int64";}; {name="uint64_field";type="uint64";}; {name="sint64_field";type="int64";}; {name="fixed32_field";type="uint32";}; @@ -41,10 +41,10 @@ TEST(TProtobufYsonSchemaTest, GetMessageSchema) {name="float_field";type="float";}; {name="double_field";type="double";}; {name="enum_field";type={type_name="enum";enum_name="EEnum";"values"=["value0";"value1";];};}; - {name="required_int32_field";type="uint32";required=%true;}; - {name="repeated_int32_field";type={type_name="list";item="uint32";};}; - {name="string_to_int32_map";type={type_name="dict";key="utf8";value="uint32";};}; - {name="int32_to_int32_map";type={type_name="dict";key="uint32";value="utf8";};};];} + {name="required_int32_field";type="int32";required=%true;}; + {name="repeated_int32_field";type={type_name="list";item="int32";};}; + {name="string_to_int32_map";type={type_name="dict";key="utf8";value="int32";};}; + {name="int32_to_string_map";type={type_name="dict";key="int32";value="utf8";};};];} )"; auto expectedNode = NYTree::ConvertToNode(TYsonStringBuf(expected), NYTree::GetEphemeralNodeFactory()); diff --git a/yt/yt/core/ytree/unittests/yson_schema_ut.cpp b/yt/yt/core/ytree/unittests/yson_schema_ut.cpp index c2f61a64c8..220e38975a 100644 --- a/yt/yt/core/ytree/unittests/yson_schema_ut.cpp +++ b/yt/yt/core/ytree/unittests/yson_schema_ut.cpp @@ -217,7 +217,7 @@ TEST(TYsonStructSchemaTest, TestSchemaForProtobufMessage) item={ type_name="struct"; members=[ - {name="int32_field";type="uint32";}; + {name="int32_field";type="int32";}; {name="string_field";"type"="utf8";}; ]; }; diff --git a/yt/yt/core/ytree/ypath_client.cpp b/yt/yt/core/ytree/ypath_client.cpp index b7bf13d3dd..47a285b360 100644 --- a/yt/yt/core/ytree/ypath_client.cpp +++ b/yt/yt/core/ytree/ypath_client.cpp @@ -264,7 +264,7 @@ TYPathMaybeRef GetOriginalRequestTargetYPath(const NRpc::NProto::TRequestHeader& void SetRequestTargetYPath(NRpc::NProto::TRequestHeader* header, TYPathBuf path) { auto* ypathExt = header->MutableExtension(NProto::TYPathHeaderExt::ypath_header_ext); - ypathExt->set_target_path(TYPath(path)); + ypathExt->set_target_path(ToProto<TString>(path)); } bool IsRequestMutating(const NRpc::NProto::TRequestHeader& header) diff --git a/yt/yt/core/ytree/yson_struct-inl.h b/yt/yt/core/ytree/yson_struct-inl.h index 88fafd913d..75f5b1db1d 100644 --- a/yt/yt/core/ytree/yson_struct-inl.h +++ b/yt/yt/core/ytree/yson_struct-inl.h @@ -80,7 +80,7 @@ TSerializer TExternalizedYsonStruct::CreateReadOnly(const TStruct& readOnly) //! We need some writable instance of TStruct to refer to in order //! to have a default constructor required by TYsonStructRegistry::InitializeStruct. template <std::default_initializable TStruct> -TStruct* TExternalizedYsonStruct::GetDefault() noexcept +YT_PREVENT_TLS_CACHING TStruct* TExternalizedYsonStruct::GetDefault() noexcept { thread_local TStruct defaultThat = {}; //! NB: We reset default after every invocation @@ -101,11 +101,11 @@ void TYsonStructRegistry::InitializeStruct(TStruct* target) TForbidCachedDynamicCastGuard guard(target); // It takes place only inside special constructor call inside lambda below. - if (CurrentlyInitializingMeta_) { + if (CurrentlyInitializingYsonMeta()) { // TODO(renadeen): assert target is from the same type hierarchy. // Call initialization method that is provided by user. - if (RegistryDepth_ <= 1) { - TStruct::Register(TYsonStructRegistrar<TStruct>(CurrentlyInitializingMeta_)); + if (YsonMetaRegistryDepth() <= 1) { + TStruct::Register(TYsonStructRegistrar<TStruct>(CurrentlyInitializingYsonMeta())); } return; } @@ -122,14 +122,14 @@ void TYsonStructRegistry::InitializeStruct(TStruct* target) // where registration of yson parameters takes place. // This way all parameters of the whole type hierarchy will fill `CurrentlyInitializingMeta_`. // We prevent context switch cause we don't want another fiber to use `CurrentlyInitializingMeta_` before we finish initialization. - YT_VERIFY(!CurrentlyInitializingMeta_); - CurrentlyInitializingMeta_ = result; + YT_VERIFY(!CurrentlyInitializingYsonMeta()); + CurrentlyInitializingYsonMeta() = result; { NConcurrency::TForbidContextSwitchGuard contextSwitchGuard; const std::type_info& typeInfo = CallCtor<TStruct>(); result->FinishInitialization(typeInfo); } - CurrentlyInitializingMeta_ = nullptr; + CurrentlyInitializingYsonMeta() = nullptr; return result; }; diff --git a/yt/yt/core/ytree/yson_struct.cpp b/yt/yt/core/ytree/yson_struct.cpp index 2afabecb0b..b939d17b9a 100644 --- a/yt/yt/core/ytree/yson_struct.cpp +++ b/yt/yt/core/ytree/yson_struct.cpp @@ -157,6 +157,11 @@ void TYsonStruct::InitializeRefCounted() //////////////////////////////////////////////////////////////////////////////// +YT_DEFINE_THREAD_LOCAL(IYsonStructMeta*, CurrentlyInitializingYsonMeta, nullptr); +YT_DEFINE_THREAD_LOCAL(i64, YsonMetaRegistryDepth, 0); + +//////////////////////////////////////////////////////////////////////////////// + TYsonStructRegistry* TYsonStructRegistry::Get() { return LeakySingleton<TYsonStructRegistry>(); @@ -164,20 +169,20 @@ TYsonStructRegistry* TYsonStructRegistry::Get() bool TYsonStructRegistry::InitializationInProgress() { - return CurrentlyInitializingMeta_ != nullptr; + return CurrentlyInitializingYsonMeta() != nullptr; } void TYsonStructRegistry::OnBaseCtorCalled() { - if (CurrentlyInitializingMeta_ != nullptr) { - ++RegistryDepth_; + if (CurrentlyInitializingYsonMeta() != nullptr) { + ++YsonMetaRegistryDepth(); } } void TYsonStructRegistry::OnFinalCtorCalled() { - if (CurrentlyInitializingMeta_ != nullptr) { - --RegistryDepth_; + if (CurrentlyInitializingYsonMeta() != nullptr) { + --YsonMetaRegistryDepth(); } } diff --git a/yt/yt/core/ytree/yson_struct.h b/yt/yt/core/ytree/yson_struct.h index e6efb571a2..19300099bf 100644 --- a/yt/yt/core/ytree/yson_struct.h +++ b/yt/yt/core/ytree/yson_struct.h @@ -11,6 +11,7 @@ #include <yt/yt/library/syncmap/map.h> #include <library/cpp/yt/misc/enum.h> +#include <library/cpp/yt/misc/tls.h> #include <util/generic/algorithm.h> @@ -179,6 +180,9 @@ protected: //////////////////////////////////////////////////////////////////////////////// +YT_DECLARE_THREAD_LOCAL(IYsonStructMeta*, CurrentlyInitializingYsonMeta); +YT_DECLARE_THREAD_LOCAL(i64, YsonMetaRegistryDepth); + class TYsonStructRegistry { public: @@ -194,9 +198,6 @@ public: void OnFinalCtorCalled(); private: - static inline YT_THREAD_LOCAL(IYsonStructMeta*) CurrentlyInitializingMeta_ = nullptr; - static inline YT_THREAD_LOCAL(i64) RegistryDepth_ = 0; - template <class TStruct> friend class TYsonStructRegistrar; diff --git a/yt/yt/library/backtrace_introspector/introspect.cpp b/yt/yt/library/backtrace_introspector/introspect.cpp index 38e146ab08..6b5e008106 100644 --- a/yt/yt/library/backtrace_introspector/introspect.cpp +++ b/yt/yt/library/backtrace_introspector/introspect.cpp @@ -47,8 +47,8 @@ std::vector<TFiberIntrospectionInfo> IntrospectFibers() THashMap<TFiberId, EFiberState> fiberStates; auto introspectionAction = [&] (NYT::NConcurrency::TFiber::TFiberList& fibers) { - for (auto* iter = fibers.Begin(); iter != fibers.End(); iter = iter->Next) { - auto* fiber = iter->AsItem(); + for (auto& fiberRef : fibers) { + auto* fiber = &fiberRef; auto fiberId = fiber->GetFiberId(); if (fiberId == InvalidFiberId) { diff --git a/yt/yt/library/process/process.cpp b/yt/yt/library/process/process.cpp index fbdf324433..49836d3d1e 100644 --- a/yt/yt/library/process/process.cpp +++ b/yt/yt/library/process/process.cpp @@ -376,7 +376,7 @@ TFuture<void> TProcessBase::Spawn() void TSimpleProcess::DoSpawn() { -#ifdef _linux_ +#ifdef _unix_ auto finally = Finally([&] { StdPipes_[STDIN_FILENO].CloseReadFD(); StdPipes_[STDOUT_FILENO].CloseWriteFD(); diff --git a/yt/yt/library/profiling/solomon/exporter.cpp b/yt/yt/library/profiling/solomon/exporter.cpp index b60be17740..ebb7aee092 100644 --- a/yt/yt/library/profiling/solomon/exporter.cpp +++ b/yt/yt/library/profiling/solomon/exporter.cpp @@ -617,6 +617,8 @@ void TSolomonExporter::DoHandleShard( { TPromise<TSharedRef> responsePromise = NewPromise<TSharedRef>(); + auto Logger = NProfiling::Logger.WithTag("Shard: %v", name); + try { auto format = NMonitoring::EFormat::JSON; if (auto accept = req->GetHeaders()->Find("Accept")) { diff --git a/yt/yt/library/profiling/solomon/registry.cpp b/yt/yt/library/profiling/solomon/registry.cpp index 4b65c3c2d0..fac1478756 100644 --- a/yt/yt/library/profiling/solomon/registry.cpp +++ b/yt/yt/library/profiling/solomon/registry.cpp @@ -522,7 +522,7 @@ NProto::TSensorDump TSolomonRegistry::DumpSensors(std::vector<TTagId> extraTags) { auto guard = Guard(DynamicTagsLock_); for (const auto& [key, value] : DynamicTags_) { - extraTags.push_back(Tags_.Encode(std::make_pair(key, value))); + extraTags.push_back(Tags_.Encode(std::pair(key, value))); } } @@ -551,10 +551,10 @@ NProto::TSensorDump TSolomonRegistry::DumpSensors(const std::optional<TString>& { std::vector<TTagId> extraTags; if (host) { - extraTags.push_back(Tags_.Encode(std::make_pair("host", *host))); + extraTags.push_back(Tags_.Encode(std::pair("host", *host))); } for (const auto& [key, value] : instanceTags) { - extraTags.push_back(Tags_.Encode(std::make_pair(key, value))); + extraTags.push_back(Tags_.Encode(std::pair(key, value))); } return DumpSensors(extraTags); } diff --git a/yt/yt/library/ytprof/api/api.cpp b/yt/yt/library/ytprof/api/api.cpp index f00d11d88c..4f379232c9 100644 --- a/yt/yt/library/ytprof/api/api.cpp +++ b/yt/yt/library/ytprof/api/api.cpp @@ -11,18 +11,18 @@ DEFINE_REFCOUNTED_TYPE(TProfilerTag) struct TCpuProfilerTags; // This variable is referenced from signal handler. -constinit YT_THREAD_LOCAL(std::atomic<TCpuProfilerTags*>) CpuProfilerTagsPtr = nullptr; +YT_DEFINE_THREAD_LOCAL(std::atomic<TCpuProfilerTags*>, CpuProfilerTagsPtr, nullptr); struct TCpuProfilerTags { TCpuProfilerTags() { - CpuProfilerTagsPtr = this; + CpuProfilerTagsPtr() = this; } ~TCpuProfilerTags() { - CpuProfilerTagsPtr = nullptr; + CpuProfilerTagsPtr() = nullptr; } std::array<TAtomicSignalPtr<TProfilerTag>, MaxActiveTags> Tags; @@ -30,11 +30,11 @@ struct TCpuProfilerTags // We can't reference CpuProfilerTags from signal handler, // since it may trigger lazy initialization. -YT_THREAD_LOCAL(TCpuProfilerTags) CpuProfilerTags; +YT_DEFINE_THREAD_LOCAL(TCpuProfilerTags, CpuProfilerTags); std::array<TAtomicSignalPtr<TProfilerTag>, MaxActiveTags>* GetCpuProfilerTags() { - auto tags = CpuProfilerTagsPtr.load(); + auto tags = CpuProfilerTagsPtr().load(); if (tags) { return &(tags->Tags); } @@ -46,7 +46,7 @@ std::array<TAtomicSignalPtr<TProfilerTag>, MaxActiveTags>* GetCpuProfilerTags() TCpuProfilerTagGuard::TCpuProfilerTagGuard(TProfilerTagPtr tag) { - auto& cpuProfilerTags = GetTlsRef(CpuProfilerTags); + auto& cpuProfilerTags = CpuProfilerTags(); for (int i = 0; i < MaxActiveTags; i++) { if (!cpuProfilerTags.Tags[i].IsSetFromThread()) { @@ -59,7 +59,7 @@ TCpuProfilerTagGuard::TCpuProfilerTagGuard(TProfilerTagPtr tag) TCpuProfilerTagGuard::~TCpuProfilerTagGuard() { - auto& cpuProfilerTags = GetTlsRef(CpuProfilerTags); + auto& cpuProfilerTags = CpuProfilerTags(); if (TagIndex_ != -1) { cpuProfilerTags.Tags[TagIndex_].StoreFromThread(nullptr); @@ -79,7 +79,7 @@ TCpuProfilerTagGuard& TCpuProfilerTagGuard::operator = (TCpuProfilerTagGuard&& o } if (TagIndex_ != -1) { - auto& cpuProfilerTags = GetTlsRef(CpuProfilerTags); + auto& cpuProfilerTags = CpuProfilerTags(); cpuProfilerTags.Tags[TagIndex_].StoreFromThread(nullptr); } diff --git a/yt/yt/library/ytprof/spinlock_profiler.cpp b/yt/yt/library/ytprof/spinlock_profiler.cpp index e1a2fa58e3..a5a03461da 100644 --- a/yt/yt/library/ytprof/spinlock_profiler.cpp +++ b/yt/yt/library/ytprof/spinlock_profiler.cpp @@ -66,7 +66,7 @@ void TSpinlockProfiler::RecordEvent(const void* /*lock*/, int64_t waitCycles) RecordSample(&fpCursor, waitCycles); } -YT_THREAD_LOCAL(int) SpinlockEventCount; +YT_DEFINE_THREAD_LOCAL(int, SpinlockEventCount); void TSpinlockProfiler::OnEvent(const void* lock, int64_t waitCycles) { @@ -75,12 +75,14 @@ void TSpinlockProfiler::OnEvent(const void* lock, int64_t waitCycles) return; } - if (SpinlockEventCount < samplingRate) { - SpinlockEventCount++; + auto& spinlockEventCount = SpinlockEventCount(); + + if (spinlockEventCount < samplingRate) { + spinlockEventCount++; return; } - SpinlockEventCount = 0; + spinlockEventCount = 0; while (HandlingEvent_.exchange(true)) { SchedYield(); } @@ -171,7 +173,7 @@ void TBlockingProfiler::RecordEvent( RecordSample(&fpCursor, cpuDelay); } -YT_THREAD_LOCAL(int) YTSpinlockEventCount; +YT_DEFINE_THREAD_LOCAL(int, YTSpinlockEventCount); void TBlockingProfiler::OnEvent( TCpuDuration cpuDelay, @@ -183,12 +185,14 @@ void TBlockingProfiler::OnEvent( return; } - if (YTSpinlockEventCount < samplingRate) { - YTSpinlockEventCount++; + auto& ytSpinlockEventCount = YTSpinlockEventCount(); + + if (ytSpinlockEventCount < samplingRate) { + ytSpinlockEventCount++; return; } - YTSpinlockEventCount = 0; + ytSpinlockEventCount = 0; while (HandlingEvent_.exchange(true)) { SchedYield(); } |