From cd9ce76d46f71d5d00c490cabb6763ac66f04c14 Mon Sep 17 00:00:00 2001 From: Naveen M K Date: Fri, 21 Jan 2022 21:39:24 +0530 Subject: [PATCH] mingw-w64-python3.10: new package --- mingw-w64-python3.10/.gitignore | 2 + ...g-make-_sysconfigdata.py-relocatable.patch | 61 + .../0002-restore-setup-config.patch | 83 + ...t-threads-and-make-it-default-on-min.patch | 290 + ...gcc-internal-defines-to-python-platf.patch | 45 + ...igure-MACHDEP-and-platform-for-build.patch | 64 + ...0006-MINGW-preset-configure-defaults.patch | 91 + ...largefile-support-for-windows-builds.patch | 44 + ...0008-MINGW-add-srcdir-PC-to-CPPFLAGS.patch | 44 + .../0009-MINGW-init-system-calls.patch | 125 + ...INGW-build-in-windows-modules-winreg.patch | 80 + ...etermine-if-pwdmodule-should-be-used.patch | 66 + ...-Mingw-recognition-to-pyport.h-to-al.patch | 83 + ...013-MINGW-configure-for-shared-build.patch | 70 + .../0014-MINGW-dynamic-loading-support.patch | 105 + ...nore-main-program-for-frozen-scripts.patch | 53 + ...-MINGW-setup-_multiprocessing-module.patch | 35 + .../0017-MINGW-setup-select-module.patch | 61 + ...up-_ctypes-module-with-system-libffi.patch | 46 + ...ct-winsock2-and-setup-_socket-module.patch | 158 + ...0020-MINGW-exclude-unix-only-modules.patch | 94 + ...NGW-setup-msvcrt-and-_winapi-modules.patch | 94 + ...nfig-MINGW-build-extensions-with-GCC.patch | 26 + .../0023-MINGW-setup-_ssl-module.patch | 31 + ...ation-of-posix-build-in-sysconfig.py.patch | 90 + ...W-support-stdcall-without-underscore.patch | 55 + ...ead-rename-to-avoid-failure-on-windo.patch | 32 + .../0027-MINGW-customize-site.patch | 63 + .../0028-add-python-config-sh.patch | 163 + .../0029-cross-darwin-feature.patch | 139 + .../0030-mingw-system-libffi.patch | 31 + ...sys-mingw-prefer-unix-sep-if-MSYSTEM.patch | 398 ++ .../0032-mingw-use-posix-getpath.patch | 505 ++ ...mingw-add-ModuleFileName-dir-to-PATH.patch | 59 + ...dd-BUILDIN_WIN32_MODULEs-time-msvcrt.patch | 28 + ...s-cygwin-semi-native-build-sysconfig.patch | 127 + ...sysconfig-mingw-sysconfig-like-posix.patch | 66 + ...rlier-so-we-can-use-it-in-distutils-.patch | 40 + ...d-multiarch-paths-if-cross-compiling.patch | 34 + ...ngw-use-backslashes-in-compileall-py.patch | 31 + ...-msys-convert_path-fix-and-root-hack.patch | 43 + .../0041-allow-static-tcltk.patch | 88 + .../0042-mingw-pdcurses_ISPAD.patch | 36 + .../0043-builddir-fixes.patch | 71 + ...sys-monkeypatch-os-system-via-sh-exe.patch | 40 + ...place-slashes-used-in-io-redirection.patch | 74 + .../0046-remove_path_max.default.patch | 30 + .../0047-dont-link-with-gettext.patch | 61 + .../0048-ctypes-python-dll.patch | 34 + .../0049-gdbm-module-includes.patch | 31 + .../0050-use-gnu_printf-in-format.patch | 86 + ...w-fix-ssl-dont-use-enum_certificates.patch | 40 + ...fix-using-dllhandle-and-winver-mingw.patch | 40 + ...-config-so-msvccompiler-get_build_ve.patch | 43 + ...4-MINGW-link-with-additional-library.patch | 34 + .../0055-install-msilib.patch | 31 + .../0056-fix-signal-module-build.patch | 30 + ...-build-winconsoleio-and-_testconsole.patch | 45 + .../0058-expose-sem_unlink.patch | 30 + mingw-w64-python3.10/0059-cygpty-isatty.patch | 462 ++ .../0060-disable-broken-gdbm-module.patch | 30 + ...win-resource-files-and-build-pythonw.patch | 148 + .../0062-disable-readline.patch | 30 + .../0063-fix-isselectable.patch | 30 + ...64-use-_wcsnicmp-instead-wcsncasecmp.patch | 27 + .../0065-_xxsubinterpretersmodule.patch | 27 + .../0066-sqlite3-module-defines.patch | 25 + ...067-configure.ac-fix-inet_pton-check.patch | 36 + .../0068-set-venv-activate-path-unix.patch | 30 + .../0069-venv-creation-fixes.patch | 72 + .../0070-pass-gen-profile-ldflags.patch | 30 + ...indows-must-link-ext-with-python-lib.patch | 39 + .../0072-importlib-bootstrap-path-sep.patch | 33 + .../0073-pathlib-path-sep.patch | 26 + .../0074-warnings-fixes.patch | 132 + .../0075-fix-build-testinternalcapi.patch | 29 + .../0076-extend-MS_WINDOWS-flag.patch | 26 + mingw-w64-python3.10/0077-clang-arm64.patch | 51 + ...configure.ac-set-MINGW-stack-reserve.patch | 29 + ...079-Don-t-use-os.pathsep-to-find-EOF.patch | 28 + ...ion-suffix-for-c-extensions-on-mingw.patch | 182 + ...the-get_platform-method-in-sysconfig.patch | 64 + ...ler-customize-mingw-cygwin-compilers.patch | 44 + ...-distutils-compiler-enable-new-dtags.patch | 38 + ...tils-MINGW-build-extensions-with-GCC.patch | 61 + ...ngw32CCompiler-as-default-compiler-f.patch | 74 + .../0086-distutils-find-import-library.patch | 30 + ...circular-dependency-from-time-module.patch | 39 + ...lization-of-posix-build-in-distutils.patch | 63 + ...distutils-mingw-sysconfig-like-posix.patch | 29 + .../0090-distutils-get_versions-fixes.patch | 57 + ...91-distutils-install-layout-as-posix.patch | 30 + ...-msys-convert_path-fix-and-root-hack.patch | 81 + ...-distutils-mingw-build-optimized-ext.patch | 35 + ...ccompiler-dont-strip-modules-if-pyde.patch | 31 + ...istutils-get-compilers-from-env-vars.patch | 163 + ...tutils-add-windmc-to-cygwinccompiler.patch | 59 + .../0097-distutils-fix-msvc9-import.patch | 39 + ...tils-mingw-add-LIBPL-to-library-dirs.patch | 27 + ...-the-get_platform-method-in-distutil.patch | 44 + ...00-build-Fix-ncursesw-include-lookup.patch | 67 + .../0101-tests-fix-test_bytes.patch | 29 + ...e-not-raising-for-invalid-year-value.patch | 30 + ...brary-c-should-return-None-with-ucrt.patch | 43 + ...uild-Disable-checks-for-dlopen-dlfcn.patch | 68 + ...stall-location-of-the-import-library.patch | 26 + ...NV_EXCL-for-the-shared-Python-module.patch | 28 + ...venvlauncher-build-installation-into.patch | 81 + ...onfigure.ac-set-_WIN32_WINNT-version.patch | 29 + ....ac-don-t-check-for-clock_-functions.patch | 38 + ...-normpath-paths-coming-from-env-vars.patch | 37 + ...Add-support-for-Windows-7-Python-3.9.patch | 177 + ...ld-and-add-some-mingw-specific-tests.patch | 590 ++ ...smoketests-test-that-_decimal-exists.patch | 27 + .../0114-Prefer-sysconfig.python_build.patch | 26 + ...0115-Define-PY3_DLLNAME-to-fix-build.patch | 29 + .../0116-Commit-regenerated-importlib.patch | 5509 +++++++++++++++++ mingw-w64-python3.10/PKGBUILD | 507 ++ mingw-w64-python3.10/README.md | 4 + mingw-w64-python3.10/update-patches.sh | 79 + 120 files changed, 14553 insertions(+) create mode 100644 mingw-w64-python3.10/.gitignore create mode 100644 mingw-w64-python3.10/0001-sysconfig-make-_sysconfigdata.py-relocatable.patch create mode 100644 mingw-w64-python3.10/0002-restore-setup-config.patch create mode 100644 mingw-w64-python3.10/0003-build-add-with-nt-threads-and-make-it-default-on-min.patch create mode 100644 mingw-w64-python3.10/0004-MINGW-translate-gcc-internal-defines-to-python-platf.patch create mode 100644 mingw-w64-python3.10/0005-MINGW-configure-MACHDEP-and-platform-for-build.patch create mode 100644 mingw-w64-python3.10/0006-MINGW-preset-configure-defaults.patch create mode 100644 mingw-w64-python3.10/0007-MINGW-configure-largefile-support-for-windows-builds.patch create mode 100644 mingw-w64-python3.10/0008-MINGW-add-srcdir-PC-to-CPPFLAGS.patch create mode 100644 mingw-w64-python3.10/0009-MINGW-init-system-calls.patch create mode 100644 mingw-w64-python3.10/0010-MINGW-build-in-windows-modules-winreg.patch create mode 100644 mingw-w64-python3.10/0011-MINGW-determine-if-pwdmodule-should-be-used.patch create mode 100644 mingw-w64-python3.10/0012-issue6672-v2-Add-Mingw-recognition-to-pyport.h-to-al.patch create mode 100644 mingw-w64-python3.10/0013-MINGW-configure-for-shared-build.patch create mode 100644 mingw-w64-python3.10/0014-MINGW-dynamic-loading-support.patch create mode 100644 mingw-w64-python3.10/0015-MINGW-ignore-main-program-for-frozen-scripts.patch create mode 100644 mingw-w64-python3.10/0016-MINGW-setup-_multiprocessing-module.patch create mode 100644 mingw-w64-python3.10/0017-MINGW-setup-select-module.patch create mode 100644 mingw-w64-python3.10/0018-MINGW-setup-_ctypes-module-with-system-libffi.patch create mode 100644 mingw-w64-python3.10/0019-MINGW-defect-winsock2-and-setup-_socket-module.patch create mode 100644 mingw-w64-python3.10/0020-MINGW-exclude-unix-only-modules.patch create mode 100644 mingw-w64-python3.10/0021-MINGW-setup-msvcrt-and-_winapi-modules.patch create mode 100644 mingw-w64-python3.10/0022-sysconfig-MINGW-build-extensions-with-GCC.patch create mode 100644 mingw-w64-python3.10/0023-MINGW-setup-_ssl-module.patch create mode 100644 mingw-w64-python3.10/0024-MINGW-generalization-of-posix-build-in-sysconfig.py.patch create mode 100644 mingw-w64-python3.10/0025-MINGW-support-stdcall-without-underscore.patch create mode 100644 mingw-w64-python3.10/0026-use-replace-instead-rename-to-avoid-failure-on-windo.patch create mode 100644 mingw-w64-python3.10/0027-MINGW-customize-site.patch create mode 100644 mingw-w64-python3.10/0028-add-python-config-sh.patch create mode 100644 mingw-w64-python3.10/0029-cross-darwin-feature.patch create mode 100644 mingw-w64-python3.10/0030-mingw-system-libffi.patch create mode 100644 mingw-w64-python3.10/0031-msys-mingw-prefer-unix-sep-if-MSYSTEM.patch create mode 100644 mingw-w64-python3.10/0032-mingw-use-posix-getpath.patch create mode 100644 mingw-w64-python3.10/0033-mingw-add-ModuleFileName-dir-to-PATH.patch create mode 100644 mingw-w64-python3.10/0034-mingw-add-BUILDIN_WIN32_MODULEs-time-msvcrt.patch create mode 100644 mingw-w64-python3.10/0035-msys-cygwin-semi-native-build-sysconfig.patch create mode 100644 mingw-w64-python3.10/0036-sysconfig-mingw-sysconfig-like-posix.patch create mode 100644 mingw-w64-python3.10/0037-build-_winapi-earlier-so-we-can-use-it-in-distutils-.patch create mode 100644 mingw-w64-python3.10/0038-cross-dont-add-multiarch-paths-if-cross-compiling.patch create mode 100644 mingw-w64-python3.10/0039-mingw-use-backslashes-in-compileall-py.patch create mode 100644 mingw-w64-python3.10/0040-msys-convert_path-fix-and-root-hack.patch create mode 100644 mingw-w64-python3.10/0041-allow-static-tcltk.patch create mode 100644 mingw-w64-python3.10/0042-mingw-pdcurses_ISPAD.patch create mode 100644 mingw-w64-python3.10/0043-builddir-fixes.patch create mode 100644 mingw-w64-python3.10/0044-msys-monkeypatch-os-system-via-sh-exe.patch create mode 100644 mingw-w64-python3.10/0045-msys-replace-slashes-used-in-io-redirection.patch create mode 100644 mingw-w64-python3.10/0046-remove_path_max.default.patch create mode 100644 mingw-w64-python3.10/0047-dont-link-with-gettext.patch create mode 100644 mingw-w64-python3.10/0048-ctypes-python-dll.patch create mode 100644 mingw-w64-python3.10/0049-gdbm-module-includes.patch create mode 100644 mingw-w64-python3.10/0050-use-gnu_printf-in-format.patch create mode 100644 mingw-w64-python3.10/0051-mingw-fix-ssl-dont-use-enum_certificates.patch create mode 100644 mingw-w64-python3.10/0052-fix-using-dllhandle-and-winver-mingw.patch create mode 100644 mingw-w64-python3.10/0053-Add-AMD64-to-sys-config-so-msvccompiler-get_build_ve.patch create mode 100644 mingw-w64-python3.10/0054-MINGW-link-with-additional-library.patch create mode 100644 mingw-w64-python3.10/0055-install-msilib.patch create mode 100644 mingw-w64-python3.10/0056-fix-signal-module-build.patch create mode 100644 mingw-w64-python3.10/0057-build-build-winconsoleio-and-_testconsole.patch create mode 100644 mingw-w64-python3.10/0058-expose-sem_unlink.patch create mode 100644 mingw-w64-python3.10/0059-cygpty-isatty.patch create mode 100644 mingw-w64-python3.10/0060-disable-broken-gdbm-module.patch create mode 100644 mingw-w64-python3.10/0061-build-link-win-resource-files-and-build-pythonw.patch create mode 100644 mingw-w64-python3.10/0062-disable-readline.patch create mode 100644 mingw-w64-python3.10/0063-fix-isselectable.patch create mode 100644 mingw-w64-python3.10/0064-use-_wcsnicmp-instead-wcsncasecmp.patch create mode 100644 mingw-w64-python3.10/0065-_xxsubinterpretersmodule.patch create mode 100644 mingw-w64-python3.10/0066-sqlite3-module-defines.patch create mode 100644 mingw-w64-python3.10/0067-configure.ac-fix-inet_pton-check.patch create mode 100644 mingw-w64-python3.10/0068-set-venv-activate-path-unix.patch create mode 100644 mingw-w64-python3.10/0069-venv-creation-fixes.patch create mode 100644 mingw-w64-python3.10/0070-pass-gen-profile-ldflags.patch create mode 100644 mingw-w64-python3.10/0071-pkg-config-windows-must-link-ext-with-python-lib.patch create mode 100644 mingw-w64-python3.10/0072-importlib-bootstrap-path-sep.patch create mode 100644 mingw-w64-python3.10/0073-pathlib-path-sep.patch create mode 100644 mingw-w64-python3.10/0074-warnings-fixes.patch create mode 100644 mingw-w64-python3.10/0075-fix-build-testinternalcapi.patch create mode 100644 mingw-w64-python3.10/0076-extend-MS_WINDOWS-flag.patch create mode 100644 mingw-w64-python3.10/0077-clang-arm64.patch create mode 100644 mingw-w64-python3.10/0078-configure.ac-set-MINGW-stack-reserve.patch create mode 100644 mingw-w64-python3.10/0079-Don-t-use-os.pathsep-to-find-EOF.patch create mode 100644 mingw-w64-python3.10/0080-Fix-extension-suffix-for-c-extensions-on-mingw.patch create mode 100644 mingw-w64-python3.10/0081-Change-the-get_platform-method-in-sysconfig.patch create mode 100644 mingw-w64-python3.10/0082-distutils-compiler-customize-mingw-cygwin-compilers.patch create mode 100644 mingw-w64-python3.10/0083-distutils-compiler-enable-new-dtags.patch create mode 100644 mingw-w64-python3.10/0084-distutils-MINGW-build-extensions-with-GCC.patch create mode 100644 mingw-w64-python3.10/0085-distutils-use-Mingw32CCompiler-as-default-compiler-f.patch create mode 100644 mingw-w64-python3.10/0086-distutils-find-import-library.patch create mode 100644 mingw-w64-python3.10/0087-distutils-avoid-circular-dependency-from-time-module.patch create mode 100644 mingw-w64-python3.10/0088-distutils-generalization-of-posix-build-in-distutils.patch create mode 100644 mingw-w64-python3.10/0089-distutils-mingw-sysconfig-like-posix.patch create mode 100644 mingw-w64-python3.10/0090-distutils-get_versions-fixes.patch create mode 100644 mingw-w64-python3.10/0091-distutils-install-layout-as-posix.patch create mode 100644 mingw-w64-python3.10/0092-distutils-msys-convert_path-fix-and-root-hack.patch create mode 100644 mingw-w64-python3.10/0093-distutils-mingw-build-optimized-ext.patch create mode 100644 mingw-w64-python3.10/0094-distutils-cygwinccompiler-dont-strip-modules-if-pyde.patch create mode 100644 mingw-w64-python3.10/0095-distutils-get-compilers-from-env-vars.patch create mode 100644 mingw-w64-python3.10/0096-distutils-add-windmc-to-cygwinccompiler.patch create mode 100644 mingw-w64-python3.10/0097-distutils-fix-msvc9-import.patch create mode 100644 mingw-w64-python3.10/0098-distutils-mingw-add-LIBPL-to-library-dirs.patch create mode 100644 mingw-w64-python3.10/0099-distutils-Change-the-get_platform-method-in-distutil.patch create mode 100644 mingw-w64-python3.10/0100-build-Fix-ncursesw-include-lookup.patch create mode 100644 mingw-w64-python3.10/0101-tests-fix-test_bytes.patch create mode 100644 mingw-w64-python3.10/0102-time-fix-strftime-not-raising-for-invalid-year-value.patch create mode 100644 mingw-w64-python3.10/0103-ctypes-find_library-c-should-return-None-with-ucrt.patch create mode 100644 mingw-w64-python3.10/0104-build-Disable-checks-for-dlopen-dlfcn.patch create mode 100644 mingw-w64-python3.10/0105-Fix-install-location-of-the-import-library.patch create mode 100644 mingw-w64-python3.10/0106-Set-MSYS2_ARG_CONV_EXCL-for-the-shared-Python-module.patch create mode 100644 mingw-w64-python3.10/0107-build-Integrate-venvlauncher-build-installation-into.patch create mode 100644 mingw-w64-python3.10/0108-configure.ac-set-_WIN32_WINNT-version.patch create mode 100644 mingw-w64-python3.10/0109-configure.ac-don-t-check-for-clock_-functions.patch create mode 100644 mingw-w64-python3.10/0110-expanduser-normpath-paths-coming-from-env-vars.patch create mode 100644 mingw-w64-python3.10/0111-Add-support-for-Windows-7-Python-3.9.patch create mode 100644 mingw-w64-python3.10/0112-CI-test-the-build-and-add-some-mingw-specific-tests.patch create mode 100644 mingw-w64-python3.10/0113-smoketests-test-that-_decimal-exists.patch create mode 100644 mingw-w64-python3.10/0114-Prefer-sysconfig.python_build.patch create mode 100644 mingw-w64-python3.10/0115-Define-PY3_DLLNAME-to-fix-build.patch create mode 100644 mingw-w64-python3.10/0116-Commit-regenerated-importlib.patch create mode 100644 mingw-w64-python3.10/PKGBUILD create mode 100644 mingw-w64-python3.10/README.md create mode 100644 mingw-w64-python3.10/update-patches.sh diff --git a/mingw-w64-python3.10/.gitignore b/mingw-w64-python3.10/.gitignore new file mode 100644 index 0000000000..90fadbd318 --- /dev/null +++ b/mingw-w64-python3.10/.gitignore @@ -0,0 +1,2 @@ +cpython/ + diff --git a/mingw-w64-python3.10/0001-sysconfig-make-_sysconfigdata.py-relocatable.patch b/mingw-w64-python3.10/0001-sysconfig-make-_sysconfigdata.py-relocatable.patch new file mode 100644 index 0000000000..2b41f07518 --- /dev/null +++ b/mingw-w64-python3.10/0001-sysconfig-make-_sysconfigdata.py-relocatable.patch @@ -0,0 +1,61 @@ +From 1cb98a152bd4e35adf1cc415e2ecd7151bf8949e Mon Sep 17 00:00:00 2001 +From: Ray Donnelly +Date: Thu, 17 Jun 2021 18:51:10 +0530 +Subject: [PATCH 001/N] sysconfig: make _sysconfigdata.py relocatable +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Co-authored-by: Алексей +Co-authored-by: lovetox <8661218+lovetox@users.noreply.github.com> +Signed-off-by: Naveen M K +--- + Lib/sysconfig.py | 20 ++++++++++++++++++++ + 1 file changed, 20 insertions(+) + +diff --git a/Lib/sysconfig.py b/Lib/sysconfig.py +index 95b48f6..b1c59c1 100644 +--- a/Lib/sysconfig.py ++++ b/Lib/sysconfig.py +@@ -2,6 +2,7 @@ + + import os + import sys ++import textwrap + from os.path import pardir, realpath + + __all__ = [ +@@ -460,11 +461,30 @@ def _generate_posix_vars(): + os.makedirs(pybuilddir, exist_ok=True) + destfile = os.path.join(pybuilddir, name + '.py') + ++ replacement = """ ++ keys_to_replace = [ ++ 'BINDIR', 'BINLIBDEST', 'CONFINCLUDEDIR', ++ 'CONFINCLUDEPY', 'DESTDIRS', 'DESTLIB', 'DESTSHARED', ++ 'INCLDIRSTOMAKE', 'INCLUDEDIR', 'INCLUDEPY', ++ 'LIBDEST', 'LIBDIR', 'LIBPC', 'LIBPL', 'MACHDESTLIB', ++ 'MANDIR', 'SCRIPTDIR', 'datarootdir', 'exec_prefix', ++ 'TZPATH', ++ ] ++ ++ prefix = build_time_vars['BINDIR'][:-4] ++ ++ for key in keys_to_replace: ++ value = build_time_vars[key] ++ build_time_vars[key] = value.replace(prefix, sys.prefix) ++ """ ++ + with open(destfile, 'w', encoding='utf8') as f: ++ f.write('import sys\n') + f.write('# system configuration generated and used by' + ' the sysconfig module\n') + f.write('build_time_vars = ') + pprint.pprint(vars, stream=f) ++ f.write('\n%s' % textwrap.dedent(replacement)) + + # Create file used for sys.path fixup -- see Modules/getpath.c + with open('pybuilddir.txt', 'w', encoding='utf8') as f: +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0002-restore-setup-config.patch b/mingw-w64-python3.10/0002-restore-setup-config.patch new file mode 100644 index 0000000000..29b339ec83 --- /dev/null +++ b/mingw-w64-python3.10/0002-restore-setup-config.patch @@ -0,0 +1,83 @@ +From 2df5b8d470b56352fa8eb8bbf86e1947753afdac Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?= + +Date: Thu, 17 Jun 2021 18:51:12 +0530 +Subject: [PATCH 002/N] restore setup config + +Signed-off-by: Naveen M K +--- + Makefile.pre.in | 4 ++++ + Modules/Setup.config.in | 5 +++++ + configure.ac | 4 ++-- + 3 files changed, 11 insertions(+), 2 deletions(-) + create mode 100644 Modules/Setup.config.in + +diff --git a/Makefile.pre.in b/Makefile.pre.in +index 790d974..712cb0b 100644 +--- a/Makefile.pre.in ++++ b/Makefile.pre.in +@@ -711,10 +711,12 @@ oldsharedmods: $(SHAREDMODS) + Makefile Modules/config.c: Makefile.pre \ + $(srcdir)/Modules/config.c.in \ + $(MAKESETUP) \ ++ Modules/Setup.config \ + $(srcdir)/Modules/Setup \ + Modules/Setup.local + $(SHELL) $(MAKESETUP) -c $(srcdir)/Modules/config.c.in \ + -s Modules \ ++ Modules/Setup.config \ + Modules/Setup.local \ + $(srcdir)/Modules/Setup + @mv config.c Modules +@@ -1722,6 +1724,7 @@ libainstall: @DEF_MAKE_RULE@ python-config + $(INSTALL_DATA) Makefile $(DESTDIR)$(LIBPL)/Makefile + $(INSTALL_DATA) $(srcdir)/Modules/Setup $(DESTDIR)$(LIBPL)/Setup + $(INSTALL_DATA) Modules/Setup.local $(DESTDIR)$(LIBPL)/Setup.local ++ $(INSTALL_DATA) Modules/Setup.config $(DESTDIR)$(LIBPL)/Setup.config + $(INSTALL_DATA) Misc/python.pc $(DESTDIR)$(LIBPC)/python-$(VERSION).pc + $(INSTALL_DATA) Misc/python-embed.pc $(DESTDIR)$(LIBPC)/python-$(VERSION)-embed.pc + $(INSTALL_SCRIPT) $(srcdir)/Modules/makesetup $(DESTDIR)$(LIBPL)/makesetup +@@ -1948,6 +1951,7 @@ distclean: clobber + if test "$$file" != "$(srcdir)/Lib/test/data/README"; then rm "$$file"; fi; \ + done + -rm -f core Makefile Makefile.pre config.status Modules/Setup.local \ ++ Modules/Setup.config \ + Modules/ld_so_aix Modules/python.exp Misc/python.pc \ + Misc/python-embed.pc Misc/python-config.sh + -rm -f python*-gdb.py +diff --git a/Modules/Setup.config.in b/Modules/Setup.config.in +new file mode 100644 +index 0000000..5c1299d +--- /dev/null ++++ b/Modules/Setup.config.in +@@ -0,0 +1,5 @@ ++# This file is transmogrified into Setup.config by config.status. ++ ++# The purpose of this file is to conditionally enable certain modules ++# based on configure-time options. ++ +diff --git a/configure.ac b/configure.ac +index 3e6c07c..358784f 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -5938,7 +5938,7 @@ AC_SUBST(TEST_MODULES) + + + # generate output files +-AC_CONFIG_FILES(Makefile.pre Misc/python.pc Misc/python-embed.pc Misc/python-config.sh) ++AC_CONFIG_FILES(Makefile.pre Modules/Setup.config Misc/python.pc Misc/python-embed.pc Misc/python-config.sh) + AC_CONFIG_FILES([Modules/ld_so_aix], [chmod +x Modules/ld_so_aix]) + AC_OUTPUT + +@@ -5950,7 +5950,7 @@ fi + + echo "creating Makefile" >&AS_MESSAGE_FD + $SHELL $srcdir/Modules/makesetup -c $srcdir/Modules/config.c.in \ +- -s Modules \ ++ -s Modules Modules/Setup.config \ + Modules/Setup.local $srcdir/Modules/Setup + mv config.c Modules + +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0003-build-add-with-nt-threads-and-make-it-default-on-min.patch b/mingw-w64-python3.10/0003-build-add-with-nt-threads-and-make-it-default-on-min.patch new file mode 100644 index 0000000000..313bd2bedc --- /dev/null +++ b/mingw-w64-python3.10/0003-build-add-with-nt-threads-and-make-it-default-on-min.patch @@ -0,0 +1,290 @@ +From 5807031b08c69e13f1279046ebf67eeb20264d00 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?= + +Date: Thu, 17 Jun 2021 18:51:12 +0530 +Subject: [PATCH 003/N] build: add --with-nt-threads and make it default on + mingw +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Co-authored-by: Алексей +Co-authored-by: Christoph Reiter +Signed-off-by: Naveen M K +--- + Include/internal/pycore_condvar.h | 10 ++ + Include/pythread.h | 6 ++ + Modules/_multiprocessing/multiprocessing.h | 3 + + configure.ac | 101 ++++++++++++++++++++- + pyconfig.h.in | 3 + + 5 files changed, 121 insertions(+), 2 deletions(-) + +diff --git a/Include/internal/pycore_condvar.h b/Include/internal/pycore_condvar.h +index 8b89d70..dd98245 100644 +--- a/Include/internal/pycore_condvar.h ++++ b/Include/internal/pycore_condvar.h +@@ -5,6 +5,12 @@ + # error "this header requires Py_BUILD_CORE define" + #endif + ++#ifdef __MINGW32__ ++# if !defined(HAVE_PTHREAD_H) || defined(NT_THREADS) ++# undef _POSIX_THREADS ++# endif ++#endif ++ + #ifndef _POSIX_THREADS + /* This means pthreads are not implemented in libc headers, hence the macro + not present in unistd.h. But they still can be implemented as an external +@@ -37,6 +43,10 @@ + /* include windows if it hasn't been done before */ + #define WIN32_LEAN_AND_MEAN + #include ++/* winpthreads are involved via windows header, so need undef _POSIX_THREADS after header include */ ++#if defined(_POSIX_THREADS) ++#undef _POSIX_THREADS ++#endif + + /* options */ + /* non-emulated condition variables are provided for those that want +diff --git a/Include/pythread.h b/Include/pythread.h +index bb9d864..f1e52c6 100644 +--- a/Include/pythread.h ++++ b/Include/pythread.h +@@ -8,6 +8,12 @@ typedef void *PyThread_type_lock; + extern "C" { + #endif + ++#ifdef __MINGW32__ ++# if !defined(HAVE_PTHREAD_H) || defined(NT_THREADS) ++# undef _POSIX_THREADS ++# endif ++#endif ++ + /* Return status codes for Python lock acquisition. Chosen for maximum + * backwards compatibility, ie failure -> 0, success -> 1. */ + typedef enum PyLockStatus { +diff --git a/Modules/_multiprocessing/multiprocessing.h b/Modules/_multiprocessing/multiprocessing.h +index 277963b..07bb047 100644 +--- a/Modules/_multiprocessing/multiprocessing.h ++++ b/Modules/_multiprocessing/multiprocessing.h +@@ -21,6 +21,9 @@ + # endif + # define SEM_HANDLE HANDLE + # define SEM_VALUE_MAX LONG_MAX ++# if defined(HAVE_SEM_OPEN) && defined(_POSIX_THREADS) ++# include ++# endif + #else + # include /* O_CREAT and O_EXCL */ + # if defined(HAVE_SEM_OPEN) && !defined(POSIX_SEMAPHORES_NOT_ENABLED) +diff --git a/configure.ac b/configure.ac +index 358784f..380e64b 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -2037,6 +2037,53 @@ then + BASECFLAGS="$BASECFLAGS $ac_arch_flags" + fi + ++dnl NOTE: ++dnl - GCC 4.4+ for mingw* require and use posix threads(pthreads-w32) ++dnl - Host may contain installed pthreads-w32. ++dnl - On windows platform only NT-thread model is supported. ++dnl To avoid miss detection scipt first will check for NT-thread model ++dnl and if is not found will try to detect build options for pthread ++dnl model. Autodetection could be overiden if variable with_nt_threads ++dnl is set in "Site Configuration" (see autoconf manual). ++dnl If NT-thread model is enabled script skips some checks that ++dnl impact build process. When a new functionality is added, developers ++dnl are responsible to update configure script to avoid thread models ++dnl to be mixed. ++ ++AC_MSG_CHECKING([for --with-nt-threads]) ++AC_ARG_WITH(nt-threads, ++ AS_HELP_STRING([--with-nt-threads], [build with windows threads (default is system-dependent)]), ++[ ++ case $withval in ++ no) with_nt_threads=no;; ++ yes) with_nt_threads=yes;; ++ *) with_nt_threads=yes;; ++ esac ++], [ ++ case $host in ++ *-*-mingw*) with_nt_threads=yes;; ++ *) with_nt_threads=no;; ++ esac ++]) ++AC_MSG_RESULT([$with_nt_threads]) ++ ++if test $with_nt_threads = yes ; then ++AC_MSG_CHECKING([whether linking with nt-threads work]) ++AC_LINK_IFELSE([ ++ AC_LANG_PROGRAM([[]],[[_beginthread(0, 0, 0);]]) ++ ], ++ [AC_MSG_RESULT([yes])], ++ [AC_MSG_ERROR([failed to link with nt-threads])]) ++fi ++ ++if test $with_nt_threads = yes ; then ++ dnl temporary default flag to avoid additional pthread checks ++ dnl and initilize other ac..thread flags to no ++ ac_cv_pthread_is_default=no ++ ac_cv_kthread=no ++ ac_cv_pthread=no ++ dnl ac_cv_kpthread is set to no if default is yes (see below) ++else + # On some compilers, pthreads are available without further options + # (e.g. MacOS X). On some of these systems, the compiler will not + # complain if unaccepted options are passed (e.g. gcc on Mac OS X). +@@ -2155,6 +2202,8 @@ CC="$ac_save_cc"]) + AC_MSG_RESULT($ac_cv_pthread) + fi + ++fi ++ + # If we have set a CC compiler flag for thread support then + # check if it works for CXX, too. + ac_cv_cxx_thread=no +@@ -2175,6 +2224,10 @@ elif test "$ac_cv_pthread" = "yes" + then + CXX="$CXX -pthread" + ac_cv_cxx_thread=yes ++elif test $with_nt_threads = yes ++then ++ dnl set to always to skip extra pthread check below ++ ac_cv_cxx_thread=always + fi + + if test $ac_cv_cxx_thread = yes +@@ -2207,8 +2260,8 @@ dnl AC_MSG_RESULT($cpp_type) + AC_HEADER_STDC + AC_CHECK_HEADERS(asm/types.h crypt.h conio.h direct.h dlfcn.h errno.h \ + fcntl.h grp.h \ +-ieeefp.h io.h langinfo.h libintl.h process.h pthread.h \ +-sched.h shadow.h signal.h stropts.h termios.h \ ++ieeefp.h io.h langinfo.h libintl.h process.h \ ++shadow.h signal.h stropts.h termios.h \ + utime.h \ + poll.h sys/devpoll.h sys/epoll.h sys/poll.h \ + sys/audioio.h sys/xattr.h sys/bsdtty.h sys/event.h sys/file.h sys/ioctl.h \ +@@ -2223,6 +2276,14 @@ sys/mman.h sys/eventfd.h) + AC_HEADER_DIRENT + AC_HEADER_MAJOR + ++# If using nt threads, don't look for pthread.h or thread.h ++if test "x$with_nt_threads" = xno ; then ++AC_HEADER_STDC ++AC_CHECK_HEADERS(pthread.h sched.h thread.h) ++AC_HEADER_DIRENT ++AC_HEADER_MAJOR ++fi ++ + # bluetooth/bluetooth.h has been known to not compile with -std=c99. + # http://permalink.gmane.org/gmane.linux.bluez.kernel/22294 + SAVE_CFLAGS=$CFLAGS +@@ -2422,6 +2483,10 @@ fi + + AC_MSG_CHECKING(for pthread_t) + have_pthread_t=no ++if test $with_nt_threads = yes ; then ++ dnl skip check for pthread_t if NT-thread model is enabled ++ have_pthread_t=skip ++else + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[#include ]], [[pthread_t x; x = *(pthread_t*)0;]]) + ],[have_pthread_t=yes],[]) +@@ -2452,6 +2517,7 @@ if test "$ac_cv_sizeof_pthread_key_t" -eq "$ac_cv_sizeof_int" ; then + else + AC_MSG_RESULT(no) + fi ++fi + CC="$ac_save_cc" + + AC_SUBST(OTHER_LIBTOOL_OPT) +@@ -2885,10 +2951,15 @@ void *x = uuid_enc_be + [AC_MSG_RESULT(no)] + ) + ++if test $with_nt_threads = yes ; then ++ dnl do not search for sem_init if NT-thread model is enabled ++ : ++else + # 'Real Time' functions on Solaris + # posix4 on Solaris 2.6 + # pthread (first!) on Linux + AC_SEARCH_LIBS(sem_init, pthread rt posix4) ++fi + + # check if we need libintl for locale functions + AC_CHECK_LIB(intl, textdomain, +@@ -3225,6 +3296,11 @@ then + CXX="$CXX -pthread" + fi + posix_threads=yes ++elif test $with_nt_threads = yes ++then ++ posix_threads=no ++ AC_DEFINE(NT_THREADS, 1, ++ [Define to 1 if you want to use native NT threads]) + else + if test ! -z "$withval" -a -d "$withval" + then LDFLAGS="$LDFLAGS -L$withval" +@@ -3679,6 +3755,15 @@ else + fi + + # checks for library functions ++if test $with_nt_threads = yes ; then ++ dnl GCC(mingw) 4.4+ require and use posix threads(pthreads-w32) ++ dnl and host may contain installed pthreads-w32. ++ dnl Skip checks for some functions declared in pthreads-w32 if ++ dnl NT-thread model is enabled. ++ ac_cv_func_pthread_kill=skip ++ ac_cv_func_sem_open=skip ++ ac_cv_func_sched_setscheduler=skip ++fi + AC_CHECK_FUNCS(alarm accept4 setitimer getitimer bind_textdomain_codeset chown \ + clock confstr close_range copy_file_range ctermid dup3 execv explicit_bzero \ + explicit_memset faccessat fchmod fchmodat fchown fchownat \ +@@ -4611,6 +4696,10 @@ AC_CHECK_DECLS([isinf, isnan, isfinite], [], [], [[#include ]]) + # the kernel module that provides POSIX semaphores + # isn't loaded by default, so an attempt to call + # sem_open results in a 'Signal 12' error. ++if test $with_nt_threads = yes ; then ++ dnl skip posix semaphores test if NT-thread model is enabled ++ ac_cv_posix_semaphores_enabled=no ++fi + AC_MSG_CHECKING(whether POSIX semaphores are enabled) + AC_CACHE_VAL(ac_cv_posix_semaphores_enabled, + AC_RUN_IFELSE([AC_LANG_SOURCE([[ +@@ -4644,6 +4733,14 @@ fi + + # Multiprocessing check for broken sem_getvalue + AC_MSG_CHECKING(for broken sem_getvalue) ++if test $with_nt_threads = yes ; then ++ dnl Skip test if NT-thread model is enabled. ++ dnl NOTE the test case below fail for pthreads-w32 as: ++ dnl - SEM_FAILED is not defined; ++ dnl - sem_open is a stub; ++ dnl - sem_getvalue work(!). ++ ac_cv_broken_sem_getvalue=skip ++fi + AC_CACHE_VAL(ac_cv_broken_sem_getvalue, + AC_RUN_IFELSE([AC_LANG_SOURCE([[ + #include +diff --git a/pyconfig.h.in b/pyconfig.h.in +index 63438d8..fb0999e 100644 +--- a/pyconfig.h.in ++++ b/pyconfig.h.in +@@ -1377,6 +1377,9 @@ + /* Define if mvwdelch in curses.h is an expression. */ + #undef MVWDELCH_IS_EXPRESSION + ++/* Define to 1 if you want to use native NT threads */ ++#undef NT_THREADS ++ + /* Define to the address where bug reports for this package should be sent. */ + #undef PACKAGE_BUGREPORT + +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0004-MINGW-translate-gcc-internal-defines-to-python-platf.patch b/mingw-w64-python3.10/0004-MINGW-translate-gcc-internal-defines-to-python-platf.patch new file mode 100644 index 0000000000..d17723add6 --- /dev/null +++ b/mingw-w64-python3.10/0004-MINGW-translate-gcc-internal-defines-to-python-platf.patch @@ -0,0 +1,45 @@ +From 709e6d27593b34ee67d06f3e47b9853164c15bd3 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?= + +Date: Thu, 17 Jun 2021 18:51:13 +0530 +Subject: [PATCH 004/N] MINGW translate gcc internal defines to python platf +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Co-authored-by: Алексей +Co-authored-by: Christoph Reiter +Signed-off-by: Naveen M K +--- + Include/pyport.h | 15 +++++++++++++++ + 1 file changed, 15 insertions(+) + +diff --git a/Include/pyport.h b/Include/pyport.h +index 6ab0ae4..a27bedf 100644 +--- a/Include/pyport.h ++++ b/Include/pyport.h +@@ -26,6 +26,21 @@ + #endif + + ++#ifdef __MINGW32__ ++/* Translate GCC[mingw*] platform specific defines to those ++ * used in python code. ++ */ ++#if !defined(MS_WIN64) && defined(_WIN64) ++# define MS_WIN64 ++#endif ++#if !defined(MS_WIN32) && defined(_WIN32) ++# define MS_WIN32 ++#endif ++#if !defined(MS_WINDOWS) && defined(MS_WIN32) ++# define MS_WINDOWS ++#endif ++#endif /* __MINGW32__*/ ++ + /************************************************************************** + Symbols and macros to supply platform-independent interfaces to basic + C language & library operations whose spellings vary across platforms. +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0005-MINGW-configure-MACHDEP-and-platform-for-build.patch b/mingw-w64-python3.10/0005-MINGW-configure-MACHDEP-and-platform-for-build.patch new file mode 100644 index 0000000000..cc2e779d17 --- /dev/null +++ b/mingw-w64-python3.10/0005-MINGW-configure-MACHDEP-and-platform-for-build.patch @@ -0,0 +1,64 @@ +From ebf4ba240c20f555afa85a8d9d8b8b0e50038e47 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?= + +Date: Thu, 17 Jun 2021 18:51:14 +0530 +Subject: [PATCH 005/N] MINGW configure MACHDEP and platform for build +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Co-authored-by: Алексей +Signed-off-by: Naveen M K +--- + configure.ac | 15 +++++++++++++++ + 1 file changed, 15 insertions(+) + +diff --git a/configure.ac b/configure.ac +index 380e64b..3e9fd12 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -400,6 +400,9 @@ then + *-*-cygwin*) + ac_sys_system=Cygwin + ;; ++ *-*-mingw*) ++ ac_sys_system=MINGW ++ ;; + *-*-vxworks*) + ac_sys_system=VxWorks + ;; +@@ -429,6 +432,7 @@ then + linux*) MACHDEP="linux";; + cygwin*) MACHDEP="cygwin";; + darwin*) MACHDEP="darwin";; ++ mingw*) MACHDEP="win32";; + '') MACHDEP="unknown";; + esac + fi +@@ -452,12 +456,23 @@ if test "$cross_compiling" = yes; then + *-*-vxworks*) + _host_cpu=$host_cpu + ;; ++ *-*-mingw*) ++ _host_cpu= ++ ;; + *) + # for now, limit cross builds to known configurations + MACHDEP="unknown" + AC_MSG_ERROR([cross build not supported for $host]) + esac + _PYTHON_HOST_PLATFORM="$MACHDEP${_host_cpu:+-$_host_cpu}" ++ ++ case "$host_os" in ++ mingw*) ++ # As sys.platform() return 'win32' to build python and extantions ++ # we will use 'mingw' (in setup.py and etc.) ++ _PYTHON_HOST_PLATFORM=mingw ++ ;; ++ esac + fi + + # Some systems cannot stand _XOPEN_SOURCE being defined at all; they +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0006-MINGW-preset-configure-defaults.patch b/mingw-w64-python3.10/0006-MINGW-preset-configure-defaults.patch new file mode 100644 index 0000000000..45040d39c9 --- /dev/null +++ b/mingw-w64-python3.10/0006-MINGW-preset-configure-defaults.patch @@ -0,0 +1,91 @@ +From d9039731ee7a77d03c41a807e95ab009e8d53e1d Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?= + +Date: Thu, 17 Jun 2021 18:51:15 +0530 +Subject: [PATCH 006/N] MINGW preset configure defaults +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Co-authored-by: Алексей +Co-authored-by: Christoph Reiter +Signed-off-by: Naveen M K +--- + Misc/config_mingw | 12 ++++++++++++ + Misc/cross_mingw32 | 11 +++++++++++ + configure.ac | 22 ++++++++++++++++++++++ + 3 files changed, 45 insertions(+) + create mode 100644 Misc/config_mingw + create mode 100644 Misc/cross_mingw32 + +diff --git a/Misc/config_mingw b/Misc/config_mingw +new file mode 100644 +index 0000000..513065d +--- /dev/null ++++ b/Misc/config_mingw +@@ -0,0 +1,12 @@ ++# configure defaults for mingw* hosts ++ ++# mingw functions to ignore ++ac_cv_func_ftruncate=ignore # implement it as _chsize ++ ++# mingw-w64 functions to ignore ++ac_cv_func_truncate=ignore ++ac_cv_func_alarm=ignore ++ ++# files to ignore ++ac_cv_file__dev_ptmx=ignore #NOTE: under MSYS environment device exist ++ac_cv_file__dev_ptc=no +diff --git a/Misc/cross_mingw32 b/Misc/cross_mingw32 +new file mode 100644 +index 0000000..03fde9e +--- /dev/null ++++ b/Misc/cross_mingw32 +@@ -0,0 +1,11 @@ ++# configure defaults for mingw32 host if cross-build ++ ++ac_cv_little_endian_double=yes ++ac_cv_big_endian_double=no ++ac_cv_mixed_endian_double=no ++ ++ac_cv_tanh_preserves_zero_sign=yes ++ ++ac_cv_wchar_t_signed=no ++ ++ac_cv_have_size_t_format=no +diff --git a/configure.ac b/configure.ac +index 3e9fd12..e646e14 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -903,6 +903,28 @@ if test x$MULTIARCH != x; then + fi + AC_SUBST(MULTIARCH_CPPFLAGS) + ++# initialize default configuration ++py_config= ++case $host in ++ *-*-mingw*) py_config=mingw ;; ++esac ++if test -n "$py_config" ; then ++ AC_MSG_NOTICE([loading configure defaults from .../Misc/config_$py_config"]) ++ . "$srcdir/Misc/config_$py_config" ++fi ++ ++# initialize defaults for cross-builds ++if test "$cross_compiling" = yes; then ++ py_config=$host_os ++ case $py_config in ++ mingw32*) py_config=mingw32 ;; ++ esac ++ if test -f "$srcdir/Misc/cross_$py_config" ; then ++ AC_MSG_NOTICE([loading cross defaults from .../Misc/cross_$py_config"]) ++ . "$srcdir/Misc/cross_$py_config" ++ fi ++fi ++ + AC_MSG_CHECKING([for -Wl,--no-as-needed]) + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS -Wl,--no-as-needed" +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0007-MINGW-configure-largefile-support-for-windows-builds.patch b/mingw-w64-python3.10/0007-MINGW-configure-largefile-support-for-windows-builds.patch new file mode 100644 index 0000000000..c72a09d16b --- /dev/null +++ b/mingw-w64-python3.10/0007-MINGW-configure-largefile-support-for-windows-builds.patch @@ -0,0 +1,44 @@ +From 59ec39b94843b3c62518a22ba604b87ab3538d23 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?= + +Date: Thu, 17 Jun 2021 18:51:16 +0530 +Subject: [PATCH 007/N] MINGW configure largefile support for windows builds +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Co-authored-by: Алексей +Co-authored-by: Christoph Reiter +Signed-off-by: Naveen M K +--- + configure.ac | 12 ++++++++++++ + 1 file changed, 12 insertions(+) + +diff --git a/configure.ac b/configure.ac +index e646e14..2562d56 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -2487,8 +2487,20 @@ AC_CHECK_SIZEOF(off_t, [], [ + ]) + + AC_MSG_CHECKING(whether to enable large file support) ++have_largefile_support=no + if test "$ac_cv_sizeof_off_t" -gt "$ac_cv_sizeof_long" -a \ + "$ac_cv_sizeof_long_long" -ge "$ac_cv_sizeof_off_t"; then ++ have_largefile_support=yes ++else ++ case $host in ++ *-*-mingw*) ++ dnl Activate on windows platforms (32&64-bit) where off_t(4) < fpos_t(8) ++ have_largefile_support=yes ++ ;; ++ esac ++fi ++ ++if test $have_largefile_support = yes ; then + AC_DEFINE(HAVE_LARGEFILE_SUPPORT, 1, + [Defined to enable large file support when an off_t is bigger than a long + and long long is at least as big as an off_t. You may need +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0008-MINGW-add-srcdir-PC-to-CPPFLAGS.patch b/mingw-w64-python3.10/0008-MINGW-add-srcdir-PC-to-CPPFLAGS.patch new file mode 100644 index 0000000000..582c683778 --- /dev/null +++ b/mingw-w64-python3.10/0008-MINGW-add-srcdir-PC-to-CPPFLAGS.patch @@ -0,0 +1,44 @@ +From 3b04dfe2ddbe743c498510fc7d7630a76307c5be Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?= + +Date: Thu, 17 Jun 2021 18:51:18 +0530 +Subject: [PATCH 008/N] MINGW add srcdir PC to CPPFLAGS +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Co-authored-by: Алексей +Signed-off-by: Naveen M K +--- + configure.ac | 13 +++++++++++++ + 1 file changed, 13 insertions(+) + +diff --git a/configure.ac b/configure.ac +index 2562d56..8d4589a 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -5688,8 +5688,21 @@ do + THREADHEADERS="$THREADHEADERS \$(srcdir)/$h" + done + ++case $host in ++ *-*-mingw*) ++ dnl Required for windows builds as Objects/exceptions.c require ++ dnl "errmap.h" from $srcdir/PC. ++ dnl Note we cannot use BASECPPFLAGS as autogenerated pyconfig.h ++ dnl has to be before customized located in ../PC. ++ CPPFLAGS="-I\$(srcdir)/PC $CPPFLAGS" ++ ;; ++esac ++ + AC_SUBST(SRCDIRS) + SRCDIRS="Parser Objects Python Modules Modules/_io Programs" ++case $host in ++ *-*-mingw*) SRCDIRS="$SRCDIRS PC";; ++esac + AC_MSG_CHECKING(for build directories) + for dir in $SRCDIRS; do + if test ! -d $dir; then +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0009-MINGW-init-system-calls.patch b/mingw-w64-python3.10/0009-MINGW-init-system-calls.patch new file mode 100644 index 0000000000..ac05182e36 --- /dev/null +++ b/mingw-w64-python3.10/0009-MINGW-init-system-calls.patch @@ -0,0 +1,125 @@ +From dd953baf4b3615810a06c5f52257ebdc9516e00d Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?= + +Date: Thu, 17 Jun 2021 18:51:19 +0530 +Subject: [PATCH 009/N] MINGW init system calls +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Co-authored-by: Алексей +Signed-off-by: Naveen M K +--- + Modules/Setup | 1 - + Modules/Setup.config.in | 3 +++ + Modules/posixmodule.c | 29 +++++++++++++++++++++++++---- + configure.ac | 8 ++++++++ + 4 files changed, 36 insertions(+), 5 deletions(-) + +diff --git a/Modules/Setup b/Modules/Setup +index 87c6a15..34d98e5 100644 +--- a/Modules/Setup ++++ b/Modules/Setup +@@ -101,7 +101,6 @@ PYTHONPATH=$(COREPYTHONPATH) + # This only contains the minimal set of modules required to run the + # setup.py script in the root of the Python source tree. + +-posix -DPy_BUILD_CORE_BUILTIN -I$(srcdir)/Include/internal posixmodule.c # posix (UNIX) system calls + errno errnomodule.c # posix (UNIX) errno values + pwd pwdmodule.c # this is needed to find out the user's home dir + # if $HOME is not set +diff --git a/Modules/Setup.config.in b/Modules/Setup.config.in +index 5c1299d..9b364fe 100644 +--- a/Modules/Setup.config.in ++++ b/Modules/Setup.config.in +@@ -3,3 +3,6 @@ + # The purpose of this file is to conditionally enable certain modules + # based on configure-time options. + ++# init system calls(posix/nt/...) for INITFUNC (used by makesetup) ++@INITSYS@ -DPy_BUILD_CORE_BUILTIN -I$(srcdir)/Include/internal posixmodule.c ++ +diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c +index 25ddc82..d54994d 100644 +--- a/Modules/posixmodule.c ++++ b/Modules/posixmodule.c +@@ -316,6 +316,27 @@ corresponding Unix manual entries for more information on calls."); + # define HAVE_CWAIT 1 + # define HAVE_FSYNC 1 + # define fsync _commit ++# elif defined(__MINGW32__) /* GCC for windows hosts */ ++/* getlogin is detected by configure on mingw-w64 */ ++# undef HAVE_GETLOGIN ++/*# define HAVE_GETCWD 1 - detected by configure*/ ++# define HAVE_GETPPID 1 ++# define HAVE_GETLOGIN 1 ++# define HAVE_SPAWNV 1 ++# define HAVE_WSPAWNV 1 ++# define HAVE_WEXECV 1 ++/*# define HAVE_EXECV 1 - detected by configure*/ ++# define HAVE_PIPE 1 ++# define HAVE_POPEN 1 ++# define HAVE_SYSTEM 1 ++# define HAVE_CWAIT 1 ++# define HAVE_FSYNC 1 ++# define fsync _commit ++# include ++# include ++# ifndef _MAX_ENV ++# define _MAX_ENV 32767 ++# endif + # else + /* Unix functions that the configure script doesn't check for */ + # ifndef __VXWORKS__ +@@ -416,7 +437,7 @@ extern char *ctermid_r(char *); + # endif + #endif + +-#ifdef _MSC_VER ++#ifdef MS_WINDOWS + # ifdef HAVE_DIRECT_H + # include + # endif +@@ -438,7 +459,7 @@ extern char *ctermid_r(char *); + # include // ShellExecute() + # include // UNLEN + # define HAVE_SYMLINK +-#endif /* _MSC_VER */ ++#endif /* MS_WINDOWS */ + + #ifndef MAXPATHLEN + # if defined(PATH_MAX) && PATH_MAX > 1024 +@@ -1587,9 +1608,9 @@ win32_get_reparse_tag(HANDLE reparse_point_handle, ULONG *reparse_tag) + ** man environ(7). + */ + #include +-#elif !defined(_MSC_VER) && (!defined(__WATCOMC__) || defined(__QNX__) || defined(__VXWORKS__)) ++#elif !defined(MS_WINDOWS) && (!defined(__WATCOMC__) || defined(__QNX__) || defined(__VXWORKS__)) + extern char **environ; +-#endif /* !_MSC_VER */ ++#endif /* !MS_WINDOWS */ + + static PyObject * + convertenviron(void) +diff --git a/configure.ac b/configure.ac +index 8d4589a..22fcd16 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -584,6 +584,14 @@ then + AC_DEFINE(_INCLUDE__STDC_A1_SOURCE, 1, Define to include mbstate_t for mbrtowc) + fi + ++AC_MSG_CHECKING([for init system calls]) ++AC_SUBST(INITSYS) ++case $host in ++ *-*-mingw*) INITSYS=nt;; ++ *) INITSYS=posix;; ++esac ++AC_MSG_RESULT([$INITSYS]) ++ + # Record the configure-time value of MACOSX_DEPLOYMENT_TARGET, + # it may influence the way we can build extensions, so distutils + # needs to check it +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0010-MINGW-build-in-windows-modules-winreg.patch b/mingw-w64-python3.10/0010-MINGW-build-in-windows-modules-winreg.patch new file mode 100644 index 0000000000..ddfabb0b63 --- /dev/null +++ b/mingw-w64-python3.10/0010-MINGW-build-in-windows-modules-winreg.patch @@ -0,0 +1,80 @@ +From 3c73f5750360bc841913844c113322e8898e6ae6 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?= + +Date: Thu, 17 Jun 2021 18:51:20 +0530 +Subject: [PATCH 010/N] MINGW build in windows modules winreg +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Co-authored-by: Алексей +Co-authored-by: Christoph Reiter +Signed-off-by: Naveen M K +--- + Modules/Setup.config.in | 3 +++ + PC/winreg.c | 19 +++++++++++++++++++ + configure.ac | 7 +++++++ + 3 files changed, 29 insertions(+) + +diff --git a/Modules/Setup.config.in b/Modules/Setup.config.in +index 9b364fe..612cabd 100644 +--- a/Modules/Setup.config.in ++++ b/Modules/Setup.config.in +@@ -6,3 +6,6 @@ + # init system calls(posix/nt/...) for INITFUNC (used by makesetup) + @INITSYS@ -DPy_BUILD_CORE_BUILTIN -I$(srcdir)/Include/internal posixmodule.c + ++# build-in modules for windows platform: ++@USE_WIN32_MODULE@winreg ../PC/winreg.c ++ +diff --git a/PC/winreg.c b/PC/winreg.c +index 004a89a..fbcd2c4 100644 +--- a/PC/winreg.c ++++ b/PC/winreg.c +@@ -18,6 +18,25 @@ + #include "structmember.h" // PyMemberDef + #include + ++#ifndef SIZEOF_HKEY ++/* used only here */ ++#if defined(MS_WIN64) ++# define SIZEOF_HKEY 8 ++#elif defined(MS_WIN32) ++# define SIZEOF_HKEY 4 ++#else ++# error "SIZEOF_HKEY is not defined" ++#endif ++#endif ++ ++#ifndef REG_LEGAL_CHANGE_FILTER ++#define REG_LEGAL_CHANGE_FILTER (\ ++ REG_NOTIFY_CHANGE_NAME |\ ++ REG_NOTIFY_CHANGE_ATTRIBUTES |\ ++ REG_NOTIFY_CHANGE_LAST_SET |\ ++ REG_NOTIFY_CHANGE_SECURITY ) ++#endif ++ + static BOOL PyHKEY_AsHKEY(PyObject *ob, HKEY *pRes, BOOL bNoneOK); + static BOOL clinic_HKEY_converter(PyObject *ob, void *p); + static PyObject *PyHKEY_FromHKEY(HKEY h); +diff --git a/configure.ac b/configure.ac +index 22fcd16..0b702b7 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -3319,6 +3319,13 @@ else + fi]) + AC_MSG_RESULT($with_dbmliborder) + ++# Determine if windows modules should be used. ++AC_SUBST(USE_WIN32_MODULE) ++USE_WIN32_MODULE='#' ++case $host in ++ *-*-mingw*) USE_WIN32_MODULE=;; ++esac ++ + # Templates for things AC_DEFINEd more than once. + # For a single AC_DEFINE, no template is needed. + AH_TEMPLATE(_REENTRANT, +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0011-MINGW-determine-if-pwdmodule-should-be-used.patch b/mingw-w64-python3.10/0011-MINGW-determine-if-pwdmodule-should-be-used.patch new file mode 100644 index 0000000000..73e0d43f7a --- /dev/null +++ b/mingw-w64-python3.10/0011-MINGW-determine-if-pwdmodule-should-be-used.patch @@ -0,0 +1,66 @@ +From dbf09c9037cb36f2388009012043147d5f93c9db Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?= + +Date: Thu, 17 Jun 2021 18:51:21 +0530 +Subject: [PATCH 011/N] MINGW determine if pwdmodule should be used +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Co-authored-by: Алексей +Co-authored-by: Christoph Reiter +Signed-off-by: Naveen M K +--- + Modules/Setup | 2 -- + Modules/Setup.config.in | 3 +++ + configure.ac | 7 +++++++ + 3 files changed, 10 insertions(+), 2 deletions(-) + +diff --git a/Modules/Setup b/Modules/Setup +index 34d98e5..e765e05 100644 +--- a/Modules/Setup ++++ b/Modules/Setup +@@ -102,8 +102,6 @@ PYTHONPATH=$(COREPYTHONPATH) + # setup.py script in the root of the Python source tree. + + errno errnomodule.c # posix (UNIX) errno values +-pwd pwdmodule.c # this is needed to find out the user's home dir +- # if $HOME is not set + _sre -DPy_BUILD_CORE_BUILTIN _sre.c # Fredrik Lundh's new regular expressions + _codecs _codecsmodule.c # access to the builtin codecs and codec registry + _weakref _weakref.c # weak references +diff --git a/Modules/Setup.config.in b/Modules/Setup.config.in +index 612cabd..d071a74 100644 +--- a/Modules/Setup.config.in ++++ b/Modules/Setup.config.in +@@ -6,6 +6,9 @@ + # init system calls(posix/nt/...) for INITFUNC (used by makesetup) + @INITSYS@ -DPy_BUILD_CORE_BUILTIN -I$(srcdir)/Include/internal posixmodule.c + ++# This is needed to find out the user's home dir if $HOME is not set ++@USE_PWD_MODULE@pwd pwdmodule.c ++ + # build-in modules for windows platform: + @USE_WIN32_MODULE@winreg ../PC/winreg.c + +diff --git a/configure.ac b/configure.ac +index 0b702b7..6245530 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -3326,6 +3326,13 @@ case $host in + *-*-mingw*) USE_WIN32_MODULE=;; + esac + ++# Determine if pwdmodule should be used. ++AC_SUBST(USE_PWD_MODULE) ++USE_PWD_MODULE= ++case $host in ++ *-*-mingw*) USE_PWD_MODULE='#';; ++esac ++ + # Templates for things AC_DEFINEd more than once. + # For a single AC_DEFINE, no template is needed. + AH_TEMPLATE(_REENTRANT, +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0012-issue6672-v2-Add-Mingw-recognition-to-pyport.h-to-al.patch b/mingw-w64-python3.10/0012-issue6672-v2-Add-Mingw-recognition-to-pyport.h-to-al.patch new file mode 100644 index 0000000000..1d30c0281d --- /dev/null +++ b/mingw-w64-python3.10/0012-issue6672-v2-Add-Mingw-recognition-to-pyport.h-to-al.patch @@ -0,0 +1,83 @@ +From ebe0f8b477a7500980b61a30d2d48cbe3749df9b Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?= + +Date: Thu, 17 Jun 2021 18:51:23 +0530 +Subject: [PATCH 012/N] issue6672 v2 Add Mingw recognition to pyport.h to al +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Co-authored-by: Алексей +Signed-off-by: Naveen M K +--- + Include/pyport.h | 20 +++++++++++--------- + setup.py | 3 +++ + 2 files changed, 14 insertions(+), 9 deletions(-) + +diff --git a/Include/pyport.h b/Include/pyport.h +index a27bedf..dedc3b8 100644 +--- a/Include/pyport.h ++++ b/Include/pyport.h +@@ -669,12 +669,12 @@ extern char * _getpty(int *, int, mode_t, int); + */ + + /* +- All windows ports, except cygwin, are handled in PC/pyconfig.h. ++ Only MSVC windows ports is handled in PC/pyconfig.h. + +- Cygwin is the only other autoconf platform requiring special ++ Cygwin and Mingw is the only other autoconf platform requiring special + linkage handling and it uses __declspec(). + */ +-#if defined(__CYGWIN__) ++#if defined(__CYGWIN__) || defined(__MINGW32__) + # define HAVE_DECLSPEC_DLL + #endif + +@@ -687,21 +687,23 @@ extern char * _getpty(int *, int, mode_t, int); + # define PyAPI_FUNC(RTYPE) Py_EXPORTED_SYMBOL RTYPE + # define PyAPI_DATA(RTYPE) extern Py_EXPORTED_SYMBOL RTYPE + /* module init functions inside the core need no external linkage */ +- /* except for Cygwin to handle embedding */ +-# if defined(__CYGWIN__) ++ /* except for Cygwin/Mingw to handle embedding */ ++# if defined(__CYGWIN__) || defined(__MINGW32__) + # define PyMODINIT_FUNC Py_EXPORTED_SYMBOL PyObject* +-# else /* __CYGWIN__ */ ++# else /* __CYGWIN__ || __MINGW32__*/ + # define PyMODINIT_FUNC PyObject* +-# endif /* __CYGWIN__ */ ++# endif /* __CYGWIN__ || __MINGW32__*/ + # else /* Py_BUILD_CORE */ + /* Building an extension module, or an embedded situation */ + /* public Python functions and data are imported */ + /* Under Cygwin, auto-import functions to prevent compilation */ + /* failures similar to those described at the bottom of 4.1: */ + /* http://docs.python.org/extending/windows.html#a-cookbook-approach */ +-# if !defined(__CYGWIN__) ++# if defined(__CYGWIN__) || defined(__MINGW32__) ++# define PyAPI_FUNC(RTYPE) RTYPE ++# else + # define PyAPI_FUNC(RTYPE) Py_IMPORTED_SYMBOL RTYPE +-# endif /* !__CYGWIN__ */ ++# endif /* __CYGWIN__ || __MINGW32__*/ + # define PyAPI_DATA(RTYPE) extern Py_IMPORTED_SYMBOL RTYPE + /* module init functions outside the core must be exported */ + # if defined(__cplusplus) +diff --git a/setup.py b/setup.py +index 3d250e7..5270469 100644 +--- a/setup.py ++++ b/setup.py +@@ -468,6 +468,9 @@ class PyBuildExt(build_ext): + def build_extensions(self): + self.set_srcdir() + ++ if MS_WINDOWS: ++ self.compiler.define_macro("Py_BUILD_CORE_MODULE") ++ + # Detect which modules should be compiled + self.detect_modules() + +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0013-MINGW-configure-for-shared-build.patch b/mingw-w64-python3.10/0013-MINGW-configure-for-shared-build.patch new file mode 100644 index 0000000000..7004f21e1a --- /dev/null +++ b/mingw-w64-python3.10/0013-MINGW-configure-for-shared-build.patch @@ -0,0 +1,70 @@ +From e0901ec1d73b317b0b5a1930b4c3a16581a933c0 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?= + +Date: Thu, 17 Jun 2021 18:51:24 +0530 +Subject: [PATCH 013/N] MINGW configure for shared build +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Co-authored-by: Алексей +Signed-off-by: Naveen M K +--- + configure.ac | 20 +++++++++++++++++++- + 1 file changed, 19 insertions(+), 1 deletion(-) + +diff --git a/configure.ac b/configure.ac +index 6245530..4d59547 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -1220,6 +1220,13 @@ if test $enable_shared = "yes"; then + ;; + + esac ++ case $host in ++ *-*-mingw*) ++ LDLIBRARY='libpython$(LDVERSION).dll.a' ++ DLLLIBRARY='libpython$(LDVERSION).dll' ++ BLDLIBRARY='-L. -lpython$(LDVERSION)' ++ ;; ++ esac + else # shared is disabled + PY_ENABLE_SHARED=0 + case $ac_sys_system in +@@ -1228,6 +1235,10 @@ else # shared is disabled + LDLIBRARY='libpython$(LDVERSION).dll.a' + ;; + esac ++ case $host in ++ *-*-mingw*) ++ LDLIBRARY='libpython$(LDVERSION).a';; ++ esac + fi + + if test "$cross_compiling" = yes; then +@@ -2831,6 +2842,12 @@ then + LDCXXSHARED="g++ -shared -Wl,--enable-auto-image-base";; + *) LDSHARED="ld";; + esac ++ case $host in ++ *-*-mingw*) ++ LDSHARED='$(CC) -shared -Wl,--enable-auto-image-base' ++ LDCXXSHARED='$(CXX) -shared -Wl,--enable-auto-image-base' ++ ;; ++ esac + fi + AC_MSG_RESULT($LDSHARED) + LDCXXSHARED=${LDCXXSHARED-$LDSHARED} +@@ -5716,7 +5733,8 @@ case $host in + dnl "errmap.h" from $srcdir/PC. + dnl Note we cannot use BASECPPFLAGS as autogenerated pyconfig.h + dnl has to be before customized located in ../PC. +- CPPFLAGS="-I\$(srcdir)/PC $CPPFLAGS" ++ dnl (-I. at end is workaround for setup.py logic) ++ CPPFLAGS="-I\$(srcdir)/PC $CPPFLAGS -I." + ;; + esac + +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0014-MINGW-dynamic-loading-support.patch b/mingw-w64-python3.10/0014-MINGW-dynamic-loading-support.patch new file mode 100644 index 0000000000..0be8c88bd4 --- /dev/null +++ b/mingw-w64-python3.10/0014-MINGW-dynamic-loading-support.patch @@ -0,0 +1,105 @@ +From 4a4fe925bcfd177cc3c00ee2599a56398e22238b Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?= + +Date: Thu, 17 Jun 2021 18:51:25 +0530 +Subject: [PATCH 014/N] MINGW dynamic loading support +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Co-authored-by: Алексей +Signed-off-by: Naveen M K +--- + Makefile.pre.in | 6 ++++++ + Python/dynload_win.c | 9 +++++++-- + configure.ac | 16 ++++++++++++++++ + 3 files changed, 29 insertions(+), 2 deletions(-) + +diff --git a/Makefile.pre.in b/Makefile.pre.in +index 712cb0b..9839951 100644 +--- a/Makefile.pre.in ++++ b/Makefile.pre.in +@@ -826,6 +826,12 @@ Python/dynload_hpux.o: $(srcdir)/Python/dynload_hpux.c Makefile + -DSHLIB_EXT='"$(EXT_SUFFIX)"' \ + -o $@ $(srcdir)/Python/dynload_hpux.c + ++Python/dynload_win.o: $(srcdir)/Python/dynload_win.c Makefile ++ $(CC) -c $(PY_CORE_CFLAGS) \ ++ -DSHLIB_SUFFIX='"$(SHLIB_SUFFIX)"' \ ++ -DEXT_SUFFIX='"$(EXT_SUFFIX)"' \ ++ -o $@ $(srcdir)/Python/dynload_win.c ++ + Python/sysmodule.o: $(srcdir)/Python/sysmodule.c Makefile $(srcdir)/Include/pydtrace.h + $(CC) -c $(PY_CORE_CFLAGS) \ + -DABIFLAGS='"$(ABIFLAGS)"' \ +diff --git a/Python/dynload_win.c b/Python/dynload_win.c +index 5702ab2..6b53780 100644 +--- a/Python/dynload_win.c ++++ b/Python/dynload_win.c +@@ -27,6 +27,12 @@ + #define PYD_UNTAGGED_SUFFIX PYD_DEBUG_SUFFIX ".pyd" + + const char *_PyImport_DynLoadFiletab[] = { ++#ifdef EXT_SUFFIX ++ EXT_SUFFIX, /* include SOABI flags where is encoded debug */ ++#endif ++#ifdef SHLIB_SUFFIX ++ "-abi" PYTHON_ABI_STRING SHLIB_SUFFIX, ++#endif + PYD_TAGGED_SUFFIX, + PYD_UNTAGGED_SUFFIX, + NULL +@@ -192,8 +198,7 @@ dl_funcptr _PyImport_FindSharedFuncptrWindows(const char *prefix, + ensure DLLs adjacent to the PYD are preferred. */ + Py_BEGIN_ALLOW_THREADS + hDLL = LoadLibraryExW(wpathname, NULL, +- LOAD_LIBRARY_SEARCH_DEFAULT_DIRS | +- LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR); ++ LOAD_WITH_ALTERED_SEARCH_PATH); + Py_END_ALLOW_THREADS + #if !USE_UNICODE_WCHAR_CACHE + PyMem_Free(wpathname); +diff --git a/configure.ac b/configure.ac +index 4d59547..7f024d0 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -2718,6 +2718,9 @@ if test -z "$SHLIB_SUFFIX"; then + CYGWIN*) SHLIB_SUFFIX=.dll;; + *) SHLIB_SUFFIX=.so;; + esac ++ case $host_os in ++ mingw*) SHLIB_SUFFIX=.dll;; ++ esac + fi + AC_MSG_RESULT($SHLIB_SUFFIX) + +@@ -3818,6 +3821,13 @@ then + fi + ;; + esac ++ case $host in ++ *-*-mingw*) ++ DYNLOADFILE="dynload_win.o" ++ extra_machdep_objs="$extra_machdep_objs PC/dl_nt.o" ++ CFLAGS_NODIST="$CFLAGS_NODIST -DMS_DLL_ID='\"$VERSION\"'" ++ ;; ++ esac + fi + AC_MSG_RESULT($DYNLOADFILE) + if test "$DYNLOADFILE" != "dynload_stub.o" +@@ -5713,6 +5723,12 @@ case "$ac_cv_computed_gotos" in yes*) + AC_DEFINE(HAVE_COMPUTED_GOTOS, 1, + [Define if the C compiler supports computed gotos.]) + esac ++case $host_os in ++ mingw*) ++ dnl Synchronized with _PyImport_DynLoadFiletab (dynload_win.c) ++ dnl Do not use more then one dot on this platform ! ++ EXT_SUFFIX=-$SOABI$SHLIB_SUFFIX;; ++esac + + case $ac_sys_system in + AIX*) +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0015-MINGW-ignore-main-program-for-frozen-scripts.patch b/mingw-w64-python3.10/0015-MINGW-ignore-main-program-for-frozen-scripts.patch new file mode 100644 index 0000000000..736b8fc848 --- /dev/null +++ b/mingw-w64-python3.10/0015-MINGW-ignore-main-program-for-frozen-scripts.patch @@ -0,0 +1,53 @@ +From 294d164d1217634344f6d26128f40a02f537e050 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?= + +Date: Thu, 17 Jun 2021 18:51:26 +0530 +Subject: [PATCH 015/N] MINGW ignore main program for frozen scripts +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Co-authored-by: Алексей +Signed-off-by: Naveen M K +--- + Makefile.pre.in | 2 +- + configure.ac | 10 ++++++++++ + 2 files changed, 11 insertions(+), 1 deletion(-) + +diff --git a/Makefile.pre.in b/Makefile.pre.in +index 9839951..432d0ac 100644 +--- a/Makefile.pre.in ++++ b/Makefile.pre.in +@@ -350,7 +350,7 @@ PYTHON_OBJS= \ + Python/context.o \ + Python/dynamic_annotations.o \ + Python/errors.o \ +- Python/frozenmain.o \ ++ @PYTHON_OBJS_FROZENMAIN@ \ + Python/future.o \ + Python/getargs.o \ + Python/getcompiler.o \ +diff --git a/configure.ac b/configure.ac +index 7f024d0..b1d5078 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -5754,6 +5754,16 @@ case $host in + ;; + esac + ++dnl Python interpreter main program for frozen scripts ++AC_SUBST(PYTHON_OBJS_FROZENMAIN) ++PYTHON_OBJS_FROZENMAIN="Python/frozenmain.o" ++case $host in ++ *-*-mingw*) ++ dnl 'PC/frozen_dllmain.c' - not yet ++ PYTHON_OBJS_FROZENMAIN= ++ ;; ++esac ++ + AC_SUBST(SRCDIRS) + SRCDIRS="Parser Objects Python Modules Modules/_io Programs" + case $host in +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0016-MINGW-setup-_multiprocessing-module.patch b/mingw-w64-python3.10/0016-MINGW-setup-_multiprocessing-module.patch new file mode 100644 index 0000000000..fc85382c3c --- /dev/null +++ b/mingw-w64-python3.10/0016-MINGW-setup-_multiprocessing-module.patch @@ -0,0 +1,35 @@ +From b0bb46047d6a57bc810155084276762f51599d9e Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?= + +Date: Thu, 17 Jun 2021 18:51:26 +0530 +Subject: [PATCH 016/N] MINGW setup _multiprocessing module +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Co-authored-by: Алексей +Signed-off-by: Naveen M K +--- + setup.py | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/setup.py b/setup.py +index 5270469..7d259be 100644 +--- a/setup.py ++++ b/setup.py +@@ -1832,7 +1832,12 @@ class PyBuildExt(build_ext): + if (sysconfig.get_config_var('HAVE_SEM_OPEN') and not + sysconfig.get_config_var('POSIX_SEMAPHORES_NOT_ENABLED')): + multiprocessing_srcs.append('_multiprocessing/semaphore.c') ++ multiprocessing_libs = [] ++ if MS_WINDOWS: ++ multiprocessing_libs += ['ws2_32'] + self.add(Extension('_multiprocessing', multiprocessing_srcs, ++ define_macros={}, ++ libraries=multiprocessing_libs, + include_dirs=["Modules/_multiprocessing"])) + + if (not MS_WINDOWS and +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0017-MINGW-setup-select-module.patch b/mingw-w64-python3.10/0017-MINGW-setup-select-module.patch new file mode 100644 index 0000000000..3ed15ffb14 --- /dev/null +++ b/mingw-w64-python3.10/0017-MINGW-setup-select-module.patch @@ -0,0 +1,61 @@ +From 75fe2f8665412374a3908ea35082522b5c89507a Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?= + +Date: Thu, 17 Jun 2021 18:51:29 +0530 +Subject: [PATCH 017/N] MINGW setup select module +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Co-authored-by: Алексей +Signed-off-by: Naveen M K +--- + Modules/selectmodule.c | 6 +++--- + setup.py | 6 +++++- + 2 files changed, 8 insertions(+), 4 deletions(-) + +diff --git a/Modules/selectmodule.c b/Modules/selectmodule.c +index 3ecd0c3..1bf55cc 100644 +--- a/Modules/selectmodule.c ++++ b/Modules/selectmodule.c +@@ -136,9 +136,9 @@ seq2set(PyObject *seq, fd_set *set, pylist fd2obj[FD_SETSIZE + 1]) + v = PyObject_AsFileDescriptor( o ); + if (v == -1) goto finally; + +-#if defined(_MSC_VER) ++#if defined(MS_WIN32) + max = 0; /* not used for Win32 */ +-#else /* !_MSC_VER */ ++#else /* !MS_WIN32 */ + if (!_PyIsSelectable_fd(v)) { + PyErr_SetString(PyExc_ValueError, + "filedescriptor out of range in select()"); +@@ -146,7 +146,7 @@ seq2set(PyObject *seq, fd_set *set, pylist fd2obj[FD_SETSIZE + 1]) + } + if (v > max) + max = v; +-#endif /* _MSC_VER */ ++#endif /* MS_WIN32 */ + FD_SET(v, set); + + /* add object and its file descriptor to the list */ +diff --git a/setup.py b/setup.py +index 7d259be..4086f15 100644 +--- a/setup.py ++++ b/setup.py +@@ -990,7 +990,11 @@ class PyBuildExt(build_ext): + self.missing.append('spwd') + + # select(2); not on ancient System V +- self.add(Extension('select', ['selectmodule.c'])) ++ select_libs = [] ++ if MS_WINDOWS: ++ select_libs += ['ws2_32'] ++ self.add(Extension('select', ['selectmodule.c'], ++ libraries=select_libs)) + + # Memory-mapped files (also works on Win32). + self.add(Extension('mmap', ['mmapmodule.c'])) +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0018-MINGW-setup-_ctypes-module-with-system-libffi.patch b/mingw-w64-python3.10/0018-MINGW-setup-_ctypes-module-with-system-libffi.patch new file mode 100644 index 0000000000..90b17d8658 --- /dev/null +++ b/mingw-w64-python3.10/0018-MINGW-setup-_ctypes-module-with-system-libffi.patch @@ -0,0 +1,46 @@ +From 8909f15653c2f05dba1cac74b92e06dd7becc30c Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?= + +Date: Thu, 17 Jun 2021 18:51:30 +0530 +Subject: [PATCH 018/N] MINGW setup _ctypes module with system libffi +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Co-authored-by: Алексей +Co-authored-by: Christoph Reiter +Signed-off-by: Naveen M K +--- + setup.py | 7 ++++++- + 1 file changed, 6 insertions(+), 1 deletion(-) + +diff --git a/setup.py b/setup.py +index 4086f15..d90de4f 100644 +--- a/setup.py ++++ b/setup.py +@@ -2262,9 +2262,12 @@ class PyBuildExt(build_ext): + self.add(ext) + if TEST_EXTENSIONS: + # function my_sqrt() needs libm for sqrt() ++ ffi_test_libs = ['m'] ++ if MS_WINDOWS: ++ ffi_test_libs += ['oleaut32'] + self.add(Extension('_ctypes_test', + sources=['_ctypes/_ctypes_test.c'], +- libraries=['m'])) ++ libraries=ffi_test_libs)) + + ffi_inc = sysconfig.get_config_var("LIBFFI_INCLUDEDIR") + ffi_lib = None +@@ -2309,6 +2312,8 @@ class PyBuildExt(build_ext): + + ext.include_dirs.append(ffi_inc) + ext.libraries.append(ffi_lib) ++ if MS_WINDOWS: ++ ext.libraries.extend(['ole32', 'oleaut32', 'uuid']) + self.use_system_libffi = True + + if sysconfig.get_config_var('HAVE_LIBDL'): +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0019-MINGW-defect-winsock2-and-setup-_socket-module.patch b/mingw-w64-python3.10/0019-MINGW-defect-winsock2-and-setup-_socket-module.patch new file mode 100644 index 0000000000..5f980b1920 --- /dev/null +++ b/mingw-w64-python3.10/0019-MINGW-defect-winsock2-and-setup-_socket-module.patch @@ -0,0 +1,158 @@ +From 5841494ecb8bbb05a8eb5e873d645f229992b7fb Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?= + +Date: Thu, 17 Jun 2021 18:51:30 +0530 +Subject: [PATCH 019/N] MINGW defect winsock2 and setup _socket module +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Co-authored-by: Алексей +Signed-off-by: Naveen M K +--- + Misc/config_mingw | 3 +++ + Modules/socketmodule.c | 8 ++++++-- + configure.ac | 28 +++++++++++++++++++++++----- + pyconfig.h.in | 4 ++-- + setup.py | 2 ++ + 5 files changed, 36 insertions(+), 9 deletions(-) + +diff --git a/Misc/config_mingw b/Misc/config_mingw +index 513065d..9be43fd 100644 +--- a/Misc/config_mingw ++++ b/Misc/config_mingw +@@ -10,3 +10,6 @@ ac_cv_func_alarm=ignore + # files to ignore + ac_cv_file__dev_ptmx=ignore #NOTE: under MSYS environment device exist + ac_cv_file__dev_ptc=no ++ ++# force detection of winsock2 functionality - require wxp or newer ++ac_cv_func_getpeername=yes +diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c +index 898ec05..1c918c1 100644 +--- a/Modules/socketmodule.c ++++ b/Modules/socketmodule.c +@@ -265,7 +265,7 @@ shutdown(how) -- shut down traffic in one or both directions\n\ + # endif + + /* Macros based on the IPPROTO enum, see: https://bugs.python.org/issue29515 */ +-#ifdef MS_WINDOWS ++#ifdef _MSC_VER + #define IPPROTO_ICMP IPPROTO_ICMP + #define IPPROTO_IGMP IPPROTO_IGMP + #define IPPROTO_GGP IPPROTO_GGP +@@ -296,7 +296,7 @@ shutdown(how) -- shut down traffic in one or both directions\n\ + #define IPPROTO_PGM IPPROTO_PGM // WinSock2 only + #define IPPROTO_L2TP IPPROTO_L2TP // WinSock2 only + #define IPPROTO_SCTP IPPROTO_SCTP // WinSock2 only +-#endif /* MS_WINDOWS */ ++#endif /* _MSC_VER */ + + /* Provides the IsWindows7SP1OrGreater() function */ + #include +@@ -389,6 +389,10 @@ remove_unusable_flags(PyObject *m) + /* Do not include addrinfo.h for MSVC7 or greater. 'addrinfo' and + * EAI_* constants are defined in (the already included) ws2tcpip.h. + */ ++#elif defined(__MINGW32__) ++ /* Do not include addrinfo.h as minimum supported version is ++ * _WIN32_WINNT >= WindowsXP(0x0501) ++ */ + #else + # include "addrinfo.h" + #endif +diff --git a/configure.ac b/configure.ac +index b1d5078..897bb5c 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -4441,21 +4441,36 @@ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ + ],[]) + AC_MSG_RESULT($was_it_defined) + ++AC_CHECK_HEADERS([ws2tcpip.h]) + AC_MSG_CHECKING(for addrinfo) + AC_CACHE_VAL(ac_cv_struct_addrinfo, +-AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include ]], [[struct addrinfo a]])], ++AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ ++#ifdef HAVE_WS2TCPIP_H ++# include ++#else ++# include ++#endif]], ++ [[struct addrinfo a]])], + [ac_cv_struct_addrinfo=yes], + [ac_cv_struct_addrinfo=no])) + AC_MSG_RESULT($ac_cv_struct_addrinfo) + if test $ac_cv_struct_addrinfo = yes; then +- AC_DEFINE(HAVE_ADDRINFO, 1, [struct addrinfo (netdb.h)]) ++ AC_DEFINE(HAVE_ADDRINFO, 1, [struct addrinfo]) + fi + + AC_MSG_CHECKING(for sockaddr_storage) + AC_CACHE_VAL(ac_cv_struct_sockaddr_storage, + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ +-# include +-# include ]], [[struct sockaddr_storage s]])], ++#ifdef HAVE_WS2TCPIP_H ++#include ++#endif ++#ifdef HAVE_SYS_TYPES_H ++#include ++#endif ++#ifdef HAVE_SYS_SOCKET_H ++#include ++#endif]], ++ [[struct sockaddr_storage s]])], + [ac_cv_struct_sockaddr_storage=yes], + [ac_cv_struct_sockaddr_storage=no])) + AC_MSG_RESULT($ac_cv_struct_sockaddr_storage) +@@ -5644,7 +5659,10 @@ fi + + AC_CHECK_TYPE(socklen_t,, + AC_DEFINE(socklen_t,int, +- [Define to `int' if does not define.]),[ ++ [Define to `int' if or does not define.]),[ ++#ifdef HAVE_WS2TCPIP_H ++#include ++#endif + #ifdef HAVE_SYS_TYPES_H + #include + #endif +diff --git a/pyconfig.h.in b/pyconfig.h.in +index fb0999e..ed8b19c 100644 +--- a/pyconfig.h.in ++++ b/pyconfig.h.in +@@ -63,7 +63,7 @@ + /* Define to 1 if you have the `acosh' function. */ + #undef HAVE_ACOSH + +-/* struct addrinfo (netdb.h) */ ++/* struct addrinfo */ + #undef HAVE_ADDRINFO + + /* Define to 1 if you have the `alarm' function. */ +@@ -1679,7 +1679,7 @@ + /* Define to `unsigned int' if does not define. */ + #undef size_t + +-/* Define to `int' if does not define. */ ++/* Define to `int' if or does not define. */ + #undef socklen_t + + /* Define to `int' if doesn't define. */ +diff --git a/setup.py b/setup.py +index d90de4f..0fcf8af 100644 +--- a/setup.py ++++ b/setup.py +@@ -1233,6 +1233,8 @@ class PyBuildExt(build_ext): + if MACOS: + # Issue #35569: Expose RFC 3542 socket options. + kwargs['extra_compile_args'] = ['-D__APPLE_USE_RFC_3542'] ++ if MS_WINDOWS: ++ kwargs['libraries'] = ['ws2_32', 'iphlpapi'] + + self.add(Extension('_socket', ['socketmodule.c'], **kwargs)) + +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0020-MINGW-exclude-unix-only-modules.patch b/mingw-w64-python3.10/0020-MINGW-exclude-unix-only-modules.patch new file mode 100644 index 0000000000..9331683bec --- /dev/null +++ b/mingw-w64-python3.10/0020-MINGW-exclude-unix-only-modules.patch @@ -0,0 +1,94 @@ +From 082275b5ae3215d36680c9b21d070735ee203e75 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?= + +Date: Thu, 17 Jun 2021 18:51:31 +0530 +Subject: [PATCH 020/N] MINGW exclude unix only modules +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Co-authored-by: Алексей +Signed-off-by: Naveen M K +--- + setup.py | 39 ++++++++++++++++++++++++++++----------- + 1 file changed, 28 insertions(+), 11 deletions(-) + +diff --git a/setup.py b/setup.py +index 0fcf8af..681a98e 100644 +--- a/setup.py ++++ b/setup.py +@@ -973,13 +973,21 @@ class PyBuildExt(build_ext): + if (self.config_h_vars.get('FLOCK_NEEDS_LIBBSD', False)): + # May be necessary on AIX for flock function + libs = ['bsd'] +- self.add(Extension('fcntl', ['fcntlmodule.c'], +- libraries=libs)) ++ if not MS_WINDOWS: ++ self.add(Extension('fcntl', ['fcntlmodule.c'], ++ libraries=libs)) ++ else: ++ self.missing.append('fcntl') + # pwd(3) +- self.add(Extension('pwd', ['pwdmodule.c'])) ++ if not MS_WINDOWS: ++ self.add(Extension('pwd', ['pwdmodule.c'])) ++ else: ++ self.missing.append('pwd') + # grp(3) +- if not VXWORKS: ++ if not VXWORKS and not MS_WINDOWS: + self.add(Extension('grp', ['grpmodule.c'])) ++ else: ++ self.missing.append('grp') + # spwd, shadow passwords + if (self.config_h_vars.get('HAVE_GETSPNAM', False) or + self.config_h_vars.get('HAVE_GETSPENT', False)): +@@ -1001,7 +1009,10 @@ class PyBuildExt(build_ext): + + # Lance Ellinghaus's syslog module + # syslog daemon interface +- self.add(Extension('syslog', ['syslogmodule.c'])) ++ if not MS_WINDOWS: ++ self.add(Extension('syslog', ['syslogmodule.c'])) ++ else: ++ self.missing.append('syslog') + + # Python interface to subinterpreter C-API. + self.add(Extension('_xxsubinterpreters', ['_xxsubinterpretersmodule.c'])) +@@ -1027,8 +1038,11 @@ class PyBuildExt(build_ext): + self.add(Extension('_csv', ['_csv.c'])) + + # POSIX subprocess module helper. +- self.add(Extension('_posixsubprocess', ['_posixsubprocess.c'], ++ if not MS_WINDOWS: ++ self.add(Extension('_posixsubprocess', ['_posixsubprocess.c'], + extra_compile_args=['-DPy_BUILD_CORE_MODULE'])) ++ else: ++ self.missing.append('_posixsubprocess') + + def detect_test_extensions(self): + # Python C API test module +@@ -1220,12 +1234,15 @@ class PyBuildExt(build_ext): + self.missing.append('_crypt') + return + +- if self.compiler.find_library_file(self.lib_dirs, 'crypt'): +- libs = ['crypt'] +- else: +- libs = [] ++ if not MS_WINDOWS: ++ if self.compiler.find_library_file(self.lib_dirs, 'crypt'): ++ libs = ['crypt'] ++ else: ++ libs = [] + +- self.add(Extension('_crypt', ['_cryptmodule.c'], libraries=libs)) ++ self.add(Extension('_crypt', ['_cryptmodule.c'], libraries=libs)) ++ else: ++ self.missing.append('_crypt') + + def detect_socket(self): + # socket(2) +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0021-MINGW-setup-msvcrt-and-_winapi-modules.patch b/mingw-w64-python3.10/0021-MINGW-setup-msvcrt-and-_winapi-modules.patch new file mode 100644 index 0000000000..fbb3bb9980 --- /dev/null +++ b/mingw-w64-python3.10/0021-MINGW-setup-msvcrt-and-_winapi-modules.patch @@ -0,0 +1,94 @@ +From c277710a518eff8dca3df40e749a0200d48e70dc Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?= + +Date: Thu, 17 Jun 2021 18:51:33 +0530 +Subject: [PATCH 021/N] MINGW setup msvcrt and _winapi modules +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Co-authored-by: Алексей +Signed-off-by: Naveen M K +--- + Modules/_winapi.c | 2 ++ + PC/msvcrtmodule.c | 2 ++ + Python/dynamic_annotations.c | 2 +- + setup.py | 21 +++++++++++++++++++++ + 4 files changed, 26 insertions(+), 1 deletion(-) + +diff --git a/Modules/_winapi.c b/Modules/_winapi.c +index 3e24d51..e7e8c6a 100644 +--- a/Modules/_winapi.c ++++ b/Modules/_winapi.c +@@ -41,7 +41,9 @@ + + #define WINDOWS_LEAN_AND_MEAN + #include "windows.h" ++#if defined(Py_DEBUG) + #include ++#endif + #include "winreparse.h" + + #if defined(MS_WIN32) && !defined(MS_WIN64) +diff --git a/PC/msvcrtmodule.c b/PC/msvcrtmodule.c +index 0591497..74a4131 100644 +--- a/PC/msvcrtmodule.c ++++ b/PC/msvcrtmodule.c +@@ -21,7 +21,9 @@ + #include + #include + #include ++#ifdef _DEBUG + #include ++#endif + #include + + #ifdef _MSC_VER +diff --git a/Python/dynamic_annotations.c b/Python/dynamic_annotations.c +index 7febaa0..70d5b3d 100644 +--- a/Python/dynamic_annotations.c ++++ b/Python/dynamic_annotations.c +@@ -27,7 +27,7 @@ + * Author: Kostya Serebryany + */ + +-#ifdef _MSC_VER ++#ifdef MS_WINDOWS + # include + #endif + +diff --git a/setup.py b/setup.py +index 681a98e..c3f109b 100644 +--- a/setup.py ++++ b/setup.py +@@ -1683,6 +1683,27 @@ class PyBuildExt(build_ext): + '-framework', 'SystemConfiguration', + '-framework', 'CoreFoundation'])) + ++ # Modules with some Windows dependencies: ++ if MS_WINDOWS: ++ srcdir = sysconfig.get_config_var('srcdir') ++ pc_srcdir = os.path.abspath(os.path.join(srcdir, 'PC')) ++ ++ self.add(Extension('msvcrt', [os.path.join(pc_srcdir, p) ++ for p in ['msvcrtmodule.c']])) ++ ++ self.add(Extension('_winapi', ['_winapi.c'])) ++ ++ self.add(Extension('_msi', [os.path.join(pc_srcdir, p) ++ for p in ['_msi.c']], ++ libraries=['msi','cabinet','rpcrt4'])) # To link with lib(msi|cabinet|rpcrt4).a ++ ++ self.add(Extension('winsound', [os.path.join(pc_srcdir, p) ++ for p in ['winsound.c']], ++ libraries=['winmm'])) ++ ++ self.add(Extension('_overlapped', ['overlapped.c'], ++ libraries=['ws2_32'])) ++ + def detect_compress_exts(self): + # Andrew Kuchling's zlib module. Note that some versions of zlib + # 1.1.3 have security problems. See CERT Advisory CA-2002-07: +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0022-sysconfig-MINGW-build-extensions-with-GCC.patch b/mingw-w64-python3.10/0022-sysconfig-MINGW-build-extensions-with-GCC.patch new file mode 100644 index 0000000000..b7e4162e39 --- /dev/null +++ b/mingw-w64-python3.10/0022-sysconfig-MINGW-build-extensions-with-GCC.patch @@ -0,0 +1,26 @@ +From 19fdfa0a755c062dd5cfe9a4ade0399dc04d0b20 Mon Sep 17 00:00:00 2001 +From: Christoph Reiter +Date: Tue, 21 Sep 2021 20:52:42 +0200 +Subject: [PATCH 022/N] sysconfig: MINGW build extensions with GCC + +Signed-off-by: Naveen M K +--- + Lib/sysconfig.py | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/Lib/sysconfig.py b/Lib/sysconfig.py +index b1c59c1..2d09446 100644 +--- a/Lib/sysconfig.py ++++ b/Lib/sysconfig.py +@@ -709,6 +709,8 @@ def get_platform(): + + """ + if os.name == 'nt': ++ if 'GCC' in sys.version: ++ return 'mingw' + if 'amd64' in sys.version.lower(): + return 'win-amd64' + if '(arm)' in sys.version.lower(): +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0023-MINGW-setup-_ssl-module.patch b/mingw-w64-python3.10/0023-MINGW-setup-_ssl-module.patch new file mode 100644 index 0000000000..d80674b5c5 --- /dev/null +++ b/mingw-w64-python3.10/0023-MINGW-setup-_ssl-module.patch @@ -0,0 +1,31 @@ +From 269009f193f34d0af6e07385b152448344a5afc9 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?= + +Date: Thu, 17 Jun 2021 18:51:37 +0530 +Subject: [PATCH 023/N] MINGW setup _ssl module +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Co-authored-by: Алексей +Signed-off-by: Naveen M K +--- + setup.py | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/setup.py b/setup.py +index c3f109b..1bbdfdd 100644 +--- a/setup.py ++++ b/setup.py +@@ -2495,6 +2495,8 @@ class PyBuildExt(build_ext): + openssl_libdirs = split_var('OPENSSL_LDFLAGS', '-L') + openssl_libs = split_var('OPENSSL_LIBS', '-l') + openssl_rpath = config_vars.get('OPENSSL_RPATH') ++ if MS_WINDOWS: ++ openssl_libs += tuple(['ws2_32']) + if not openssl_libs: + # libssl and libcrypto not found + self.missing.extend(['_ssl', '_hashlib']) +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0024-MINGW-generalization-of-posix-build-in-sysconfig.py.patch b/mingw-w64-python3.10/0024-MINGW-generalization-of-posix-build-in-sysconfig.py.patch new file mode 100644 index 0000000000..3132a296bc --- /dev/null +++ b/mingw-w64-python3.10/0024-MINGW-generalization-of-posix-build-in-sysconfig.py.patch @@ -0,0 +1,90 @@ +From 3ca50850b90b65b825149b1611a3c587d82e9eee Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?= + +Date: Thu, 17 Jun 2021 18:51:38 +0530 +Subject: [PATCH 024/N] MINGW generalization of posix build in sysconfig.py +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Co-authored-by: Алексей +Signed-off-by: Naveen M K +--- + Lib/sysconfig.py | 18 +++++++++++------- + 1 file changed, 11 insertions(+), 7 deletions(-) + +diff --git a/Lib/sysconfig.py b/Lib/sysconfig.py +index 2d09446..09469ef 100644 +--- a/Lib/sysconfig.py ++++ b/Lib/sysconfig.py +@@ -59,6 +59,11 @@ _INSTALL_SCHEMES = { + }, + } + ++# GCC[mingw*] use posix build system ++_POSIX_BUILD = os.name == 'posix' or \ ++ (os.name == "nt" and 'GCC' in sys.version) ++ ++ + + # NOTE: site.py has copy of this function. + # Sync it when modify this function. +@@ -74,7 +79,7 @@ def _getuserbase(): + def joinuser(*args): + return os.path.expanduser(os.path.join(*args)) + +- if os.name == "nt": ++ if os.name == "nt" and not _POSIX_BUILD: + base = os.environ.get("APPDATA") or "~" + return joinuser(base, "Python") + +@@ -137,7 +142,6 @@ _variable_rx = r"([a-zA-Z][a-zA-Z0-9_]+)\s*=\s*(.*)" + _findvar1_rx = r"\$\(([A-Za-z][A-Za-z0-9_]*)\)" + _findvar2_rx = r"\${([A-Za-z][A-Za-z0-9_]*)}" + +- + def _safe_realpath(path): + try: + return realpath(path) +@@ -226,7 +230,7 @@ def _expand_vars(scheme, vars): + + + def _get_preferred_schemes(): +- if os.name == 'nt': ++ if os.name == 'nt' and not _POSIX_BUILD: + return { + 'prefix': 'nt', + 'home': 'posix_home', +@@ -553,7 +557,7 @@ def parse_config_h(fp, vars=None): + def get_config_h_filename(): + """Return the path of pyconfig.h.""" + if _PYTHON_BUILD: +- if os.name == "nt": ++ if os.name == "nt" and not _POSIX_BUILD: + inc_dir = os.path.join(_sys_home or _PROJECT_BASE, "PC") + else: + inc_dir = _sys_home or _PROJECT_BASE +@@ -629,9 +633,9 @@ def get_config_vars(*args): + except AttributeError: + _CONFIG_VARS['py_version_nodot_plat'] = '' + +- if os.name == 'nt': ++ if os.name == 'nt' and not _POSIX_BUILD: + _init_non_posix(_CONFIG_VARS) +- if os.name == 'posix': ++ if _POSIX_BUILD: + _init_posix(_CONFIG_VARS) + # For backward compatibility, see issue19555 + SO = _CONFIG_VARS.get('EXT_SUFFIX') +@@ -645,7 +649,7 @@ def get_config_vars(*args): + + # Always convert srcdir to an absolute path + srcdir = _CONFIG_VARS.get('srcdir', _PROJECT_BASE) +- if os.name == 'posix': ++ if _POSIX_BUILD: + if _PYTHON_BUILD: + # If srcdir is a relative path (typically '.' or '..') + # then it should be interpreted relative to the directory +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0025-MINGW-support-stdcall-without-underscore.patch b/mingw-w64-python3.10/0025-MINGW-support-stdcall-without-underscore.patch new file mode 100644 index 0000000000..492e8845c6 --- /dev/null +++ b/mingw-w64-python3.10/0025-MINGW-support-stdcall-without-underscore.patch @@ -0,0 +1,55 @@ +From 5ad01e32d72217f8fc7947063e689c45f0d29a8a Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?= + +Date: Thu, 17 Jun 2021 18:51:39 +0530 +Subject: [PATCH 025/N] MINGW support stdcall without underscore +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Co-authored-by: Алексей +Signed-off-by: Naveen M K +--- + Modules/_ctypes/_ctypes.c | 19 +++++++++++++++++++ + 1 file changed, 19 insertions(+) + +diff --git a/Modules/_ctypes/_ctypes.c b/Modules/_ctypes/_ctypes.c +index 5f8a723..e24bd44 100644 +--- a/Modules/_ctypes/_ctypes.c ++++ b/Modules/_ctypes/_ctypes.c +@@ -3403,6 +3403,18 @@ static PPROC FindAddress(void *handle, const char *name, PyObject *type) + mangled_name = alloca(strlen(name) + 1 + 1 + 1 + 3); /* \0 _ @ %d */ + if (!mangled_name) + return NULL; ++ /* Issue: for stdcall decorated export functions MSVC compiler adds ++ * underscore, but GCC compiler create them without. This is ++ * visible by example for _ctypes_test.pyd module. ++ * As well functions from system libraries are without underscore. ++ * Solutions: ++ * - If a python module is build with gcc option --add-stdcall-alias ++ * the module will contain XXX as alias for function XXX@ as result ++ * first search in this method will succeed. ++ * - Distutil may use compiler to create def-file, to modify it as ++ * add underscore alias and with new def file to create module. ++ * - Or may be just to search for function without underscore. ++ */ + for (i = 0; i < 32; ++i) { + sprintf(mangled_name, "_%s@%d", name, i*4); + Py_BEGIN_ALLOW_THREADS +@@ -3410,6 +3422,13 @@ static PPROC FindAddress(void *handle, const char *name, PyObject *type) + Py_END_ALLOW_THREADS + if (address) + return address; ++ /* search for function without underscore as weel */ ++ sprintf(mangled_name, "%s@%d", name, i*4); ++ Py_BEGIN_ALLOW_THREADS ++ address = (PPROC)GetProcAddress(handle, mangled_name); ++ Py_END_ALLOW_THREADS ++ if (address) ++ return address; + } + return NULL; + #endif +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0026-use-replace-instead-rename-to-avoid-failure-on-windo.patch b/mingw-w64-python3.10/0026-use-replace-instead-rename-to-avoid-failure-on-windo.patch new file mode 100644 index 0000000000..e9ab745a8d --- /dev/null +++ b/mingw-w64-python3.10/0026-use-replace-instead-rename-to-avoid-failure-on-windo.patch @@ -0,0 +1,32 @@ +From 3a1c612498e6734cd469245c21b7820ba988e4ac Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?= + +Date: Thu, 17 Jun 2021 18:51:40 +0530 +Subject: [PATCH 026/N] use replace instead rename to avoid failure on windo +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Co-authored-by: Алексей +Co-authored-by: Christoph Reiter +Signed-off-by: Naveen M K +--- + setup.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/setup.py b/setup.py +index 1bbdfdd..2b74277 100644 +--- a/setup.py ++++ b/setup.py +@@ -2739,7 +2739,7 @@ class PyBuildScripts(build_scripts): + else: + newfilename = filename + minoronly + log.info(f'renaming {filename} to {newfilename}') +- os.rename(filename, newfilename) ++ os.replace(filename, newfilename) + newoutfiles.append(newfilename) + if filename in updated_files: + newupdated_files.append(newfilename) +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0027-MINGW-customize-site.patch b/mingw-w64-python3.10/0027-MINGW-customize-site.patch new file mode 100644 index 0000000000..209b8acfdb --- /dev/null +++ b/mingw-w64-python3.10/0027-MINGW-customize-site.patch @@ -0,0 +1,63 @@ +From 7394d9621b6690004336f45ec37eadacce16fd43 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?= + +Date: Thu, 17 Jun 2021 18:51:42 +0530 +Subject: [PATCH 027/N] MINGW customize site +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Co-authored-by: Алексей +Co-authored-by: Christoph Reiter +Signed-off-by: Naveen M K +--- + Lib/site.py | 12 +++++++++--- + 1 file changed, 9 insertions(+), 3 deletions(-) + +diff --git a/Lib/site.py b/Lib/site.py +index 939893e..e460a3d 100644 +--- a/Lib/site.py ++++ b/Lib/site.py +@@ -88,6 +88,12 @@ USER_SITE = None + USER_BASE = None + + ++# Same as defined in Lib/sysconfig.py ++# redeclared since sysconfig is large for site. ++# GCC[mingw*] use posix build system ++_POSIX_BUILD = os.name == 'posix' or \ ++ (os.name == "nt" and 'GCC' in sys.version) ++ + def _trace(message): + if sys.flags.verbose: + print(message, file=sys.stderr) +@@ -273,7 +279,7 @@ def _getuserbase(): + def joinuser(*args): + return os.path.expanduser(os.path.join(*args)) + +- if os.name == "nt": ++ if os.name == "nt" and not _POSIX_BUILD: + base = os.environ.get("APPDATA") or "~" + return joinuser(base, "Python") + +@@ -288,7 +294,7 @@ def _getuserbase(): + def _get_path(userbase): + version = sys.version_info + +- if os.name == 'nt': ++ if os.name == 'nt' and not _POSIX_BUILD: + ver_nodot = sys.winver.replace('.', '') + return f'{userbase}\\Python{ver_nodot}\\site-packages' + +@@ -365,7 +371,7 @@ def getsitepackages(prefixes=None): + if sys.platlibdir != "lib": + libdirs.append("lib") + +- if os.sep == '/': ++ if _POSIX_BUILD: + for libdir in libdirs: + path = os.path.join(prefix, libdir, + "python%d.%d" % sys.version_info[:2], +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0028-add-python-config-sh.patch b/mingw-w64-python3.10/0028-add-python-config-sh.patch new file mode 100644 index 0000000000..d272172b0d --- /dev/null +++ b/mingw-w64-python3.10/0028-add-python-config-sh.patch @@ -0,0 +1,163 @@ +From 0b1fadbb73a46da7ac4d58b344ca22b572306449 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?= + +Date: Thu, 17 Jun 2021 18:51:43 +0530 +Subject: [PATCH 028/N] add python config sh +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Co-authored-by: Алексей +Co-authored-by: Christoph Reiter +Signed-off-by: Naveen M K +--- + Misc/python-config.sh.in | 62 +++++++++++++++++++++++++--------------- + 1 file changed, 39 insertions(+), 23 deletions(-) + +diff --git a/Misc/python-config.sh.in b/Misc/python-config.sh.in +index 2602fe2..e0e048a 100644 +--- a/Misc/python-config.sh.in ++++ b/Misc/python-config.sh.in +@@ -1,32 +1,44 @@ + #!/bin/sh + +-# Keep this script in sync with python-config.in +- + exit_with_usage () + { + echo "Usage: $0 --prefix|--exec-prefix|--includes|--libs|--cflags|--ldflags|--extension-suffix|--help|--abiflags|--configdir|--embed" +- exit $1 ++ exit 1 + } + ++# Really, python-config.py (and thus .sh) should be called directly, but ++# sometimes software (e.g. GDB) calls python-config.sh as if it were the ++# Python executable, passing python-config.py as the first argument. ++# Work around that oddness by ignoring any .py passed as first arg. ++case "$1" in ++ *.py) ++ shift ++ ;; ++esac ++ + if [ "$1" = "" ] ; then +- exit_with_usage 1 ++ exit_with_usage + fi + + # Returns the actual prefix where this script was installed to. + installed_prefix () + { +- RESULT=$(dirname $(cd $(dirname "$1") && pwd -P)) +- if which readlink >/dev/null 2>&1 ; then +- if readlink -f "$RESULT" >/dev/null 2>&1; then +- RESULT=$(readlink -f "$RESULT") +- fi ++ local RESULT=$(dirname $(cd $(dirname "$1") && pwd -P)) ++ if [ $(which readlink) ] ; then ++ RESULT=$(readlink -f "$RESULT") ++ fi ++ # Since we don't know where the output from this script will end up ++ # we keep all paths in Windows-land since MSYS2 can handle that ++ # while native tools can't handle paths in MSYS2-land. ++ if [ "$OSTYPE" = "msys" ]; then ++ RESULT=$(cd "$RESULT" && pwd -W) + fi + echo $RESULT + } + + prefix_real=$(installed_prefix "$0") + +-# Use sed to fix paths from their built-to locations to their installed-to ++# Use sed to fix paths from their built-to locations to their installed to + # locations. Keep prefix & exec_prefix using their original values in case + # they are referenced in other configure variables, to prevent double + # substitution, issue #22140. +@@ -41,13 +53,17 @@ LIBM="@LIBM@" + LIBC="@LIBC@" + SYSLIBS="$LIBM $LIBC" + ABIFLAGS="@ABIFLAGS@" ++# Protect against lack of substitution. ++if [ "$ABIFLAGS" = "@""ABIFLAGS""@" ] ; then ++ ABIFLAGS= ++fi + LIBS="@LIBPYTHON@ @LIBS@ $SYSLIBS" + LIBS_EMBED="-lpython${VERSION}${ABIFLAGS} @LIBS@ $SYSLIBS" + BASECFLAGS="@BASECFLAGS@" +-LDLIBRARY="@LDLIBRARY@" + OPT="@OPT@" + PY_ENABLE_SHARED="@PY_ENABLE_SHARED@" + LDVERSION="@LDVERSION@" ++LDLIBRARY="@LDLIBRARY@" + LIBDEST=${prefix_real}/lib/python${VERSION} + LIBPL=$(echo "@LIBPL@" | sed "s#$prefix#$prefix_real#") + SO="@EXT_SUFFIX@" +@@ -61,7 +77,7 @@ for ARG in $* + do + case $ARG in + --help) +- exit_with_usage 0 ++ exit_with_usage + ;; + --embed) + PY_EMBED=1 +@@ -69,7 +85,7 @@ do + --prefix|--exec-prefix|--includes|--libs|--cflags|--ldflags|--extension-suffix|--abiflags|--configdir) + ;; + *) +- exit_with_usage 1 ++ exit_with_usage + ;; + esac + done +@@ -80,37 +96,37 @@ fi + + for ARG in "$@" + do +- case "$ARG" in ++ case $ARG in + --prefix) +- echo "$prefix_real" ++ echo -ne "$prefix_real" + ;; + --exec-prefix) +- echo "$exec_prefix_real" ++ echo -ne "$exec_prefix_real " + ;; + --includes) +- echo "$INCDIR $PLATINCDIR" ++ echo -ne "$INCDIR $PLATINCDIR" + ;; + --cflags) +- echo "$INCDIR $PLATINCDIR $BASECFLAGS $CFLAGS $OPT" ++ echo -ne "$INCDIR $PLATINCDIR $BASECFLAGS $CFLAGS $OPT" + ;; + --libs) +- echo "$LIBS" ++ echo -ne "$LIBS" + ;; + --ldflags) + LIBPLUSED= + if [ "$PY_ENABLE_SHARED" = "0" ] ; then + LIBPLUSED="-L$LIBPL" + fi +- echo "$LIBPLUSED -L$libdir $LIBS" ++ echo -ne "$LIBPLUSED -L$libdir $LIBS " + ;; + --extension-suffix) +- echo "$SO" ++ echo -ne "$SO " + ;; + --abiflags) +- echo "$ABIFLAGS" ++ echo -ne "$ABIFLAGS " + ;; + --configdir) +- echo "$LIBPL" ++ echo -ne "$LIBPL " + ;; + esac + done +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0029-cross-darwin-feature.patch b/mingw-w64-python3.10/0029-cross-darwin-feature.patch new file mode 100644 index 0000000000..0abeef7d16 --- /dev/null +++ b/mingw-w64-python3.10/0029-cross-darwin-feature.patch @@ -0,0 +1,139 @@ +From 65e323a174c175697b4daf2fd1eb7ec563007746 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?= + +Date: Thu, 17 Jun 2021 18:51:44 +0530 +Subject: [PATCH 029/N] cross darwin feature +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Co-authored-by: Алексей +Signed-off-by: Naveen M K +--- + configure.ac | 54 +++++++++++++++++++++++++++++++++++++++++++++++----- + 1 file changed, 49 insertions(+), 5 deletions(-) + +diff --git a/configure.ac b/configure.ac +index 897bb5c..adc5e0e 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -387,6 +387,7 @@ if test -z "$MACHDEP" + then + # avoid using uname for cross builds + if test "$cross_compiling" = yes; then ++ ac_sys_release= + # ac_sys_system and ac_sys_release are used for setting + # a lot of different things including 'define_xopen_source' + # in the case statement below. +@@ -403,6 +404,27 @@ then + *-*-mingw*) + ac_sys_system=MINGW + ;; ++ *-*-darwin*) ++ ac_sys_system=Darwin ++ ac_sys_release=$(echo $host | sed -n 's/.*-[^0-9]\+\([0-9]\+\)/\1/p') ++ if test -z "$ac_sys_release"; then ++ # A reasonable default. ++ ac_sys_release=11 ++ fi ++ # Use the last released version number for old versions. ++ if test "$ac_sys_release" = "9" ; then ++ ac_sys_release=9.8 ++ elif test "$ac_sys_release" = "10" ; then ++ ac_sys_release=10.8 ++ elif test "$ac_sys_release" = "11" ; then ++ ac_sys_release=11.4.0 ++ elif test "$ac_sys_release" = "12" ; then ++ ac_sys_release=12.0.0 ++ else ++ # ..and .0.0 for unknown versions. ++ ac_sys_release=${ac_sys_release}.0.0 ++ fi ++ ;; + *-*-vxworks*) + ac_sys_system=VxWorks + ;; +@@ -411,7 +433,6 @@ then + MACHDEP="unknown" + AC_MSG_ERROR([cross build not supported for $host]) + esac +- ac_sys_release= + else + ac_sys_system=`uname -s` + if test "$ac_sys_system" = "AIX" \ +@@ -459,6 +480,9 @@ if test "$cross_compiling" = yes; then + *-*-mingw*) + _host_cpu= + ;; ++ *-*-darwin*) ++ _host_cpu= ++ ;; + *) + # for now, limit cross builds to known configurations + MACHDEP="unknown" +@@ -1652,6 +1676,26 @@ AC_SUBST(BASECFLAGS) + AC_SUBST(CFLAGS_NODIST) + AC_SUBST(LDFLAGS_NODIST) + ++if test "x$cross_compiling" = xyes; then ++ function cross_arch ++ { ++ case $host in ++ x86_64*darwin*) ++ echo i386 ++ ;; ++ x86_64*) ++ echo x86_64 ++ ;; ++ *) ++ echo i386 ++ ;; ++ esac ++ } ++ ARCH_PROG=cross_arch ++else ++ ARCH_PROG=/usr/bin/arch ++fi ++ + # The -arch flags for universal builds on macOS + UNIVERSAL_ARCH_FLAGS= + AC_SUBST(UNIVERSAL_ARCH_FLAGS) +@@ -2030,7 +2074,7 @@ yes) + ;; + esac + else +- if test `/usr/bin/arch` = "i386" ++ if test "$($ARCH_PROG)" = "i386" + then + # 10.4 was the first release to support Intel archs + cur_target="10.4" +@@ -2606,7 +2650,7 @@ case $ac_sys_system/$ac_sys_release in + if test "${enable_universalsdk}"; then + : + else +- LIBTOOL_CRUFT="${LIBTOOL_CRUFT} -arch_only `/usr/bin/arch`" ++ LIBTOOL_CRUFT="${LIBTOOL_CRUFT} -arch_only $($ARCH_PROG)" + fi + LIBTOOL_CRUFT=$LIBTOOL_CRUFT' -install_name $(PYTHONFRAMEWORKINSTALLDIR)/Versions/$(VERSION)/$(PYTHONFRAMEWORK)' + LIBTOOL_CRUFT=$LIBTOOL_CRUFT' -compatibility_version $(VERSION) -current_version $(VERSION)';; +@@ -2631,7 +2675,7 @@ case $ac_sys_system/$ac_sys_release in + ]])],[ac_osx_32bit=yes],[ac_osx_32bit=no],[ac_osx_32bit=yes]) + + if test "${ac_osx_32bit}" = "yes"; then +- case `/usr/bin/arch` in ++ case $($ARCH_PROG) in + i386) + MACOSX_DEFAULT_ARCH="i386" + ;; +@@ -2643,7 +2687,7 @@ case $ac_sys_system/$ac_sys_release in + ;; + esac + else +- case `/usr/bin/arch` in ++ case $($ARCH_PROG) in + i386) + MACOSX_DEFAULT_ARCH="x86_64" + ;; +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0030-mingw-system-libffi.patch b/mingw-w64-python3.10/0030-mingw-system-libffi.patch new file mode 100644 index 0000000000..50d19b0249 --- /dev/null +++ b/mingw-w64-python3.10/0030-mingw-system-libffi.patch @@ -0,0 +1,31 @@ +From bec52d036a39a01b4b3aeee948b7efc2d52d13e6 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?= + +Date: Thu, 17 Jun 2021 18:51:45 +0530 +Subject: [PATCH 030/N] mingw system libffi +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Co-authored-by: Алексей +Signed-off-by: Naveen M K +--- + setup.py | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/setup.py b/setup.py +index 2b74277..679653d 100644 +--- a/setup.py ++++ b/setup.py +@@ -2354,6 +2354,8 @@ class PyBuildExt(build_ext): + ext.libraries.append(ffi_lib) + if MS_WINDOWS: + ext.libraries.extend(['ole32', 'oleaut32', 'uuid']) ++ ext.export_symbols.extend(['DllGetClassObject PRIVATE', ++ 'DllCanUnloadNow PRIVATE']) + self.use_system_libffi = True + + if sysconfig.get_config_var('HAVE_LIBDL'): +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0031-msys-mingw-prefer-unix-sep-if-MSYSTEM.patch b/mingw-w64-python3.10/0031-msys-mingw-prefer-unix-sep-if-MSYSTEM.patch new file mode 100644 index 0000000000..cbde7beac2 --- /dev/null +++ b/mingw-w64-python3.10/0031-msys-mingw-prefer-unix-sep-if-MSYSTEM.patch @@ -0,0 +1,398 @@ +From 621f2aa0e8e61ee96a0be4548f607b630231561d Mon Sep 17 00:00:00 2001 +From: Ray Donnelly +Date: Thu, 17 Jun 2021 18:51:46 +0530 +Subject: [PATCH 031/N] msys mingw prefer unix sep if MSYSTEM +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Co-authored-by: Алексей +Co-authored-by: Christoph Reiter +Signed-off-by: Naveen M K +--- + Include/pylifecycle.h | 6 +++ + Lib/ntpath.py | 79 +++++++++++++++++------------- + Modules/posixmodule.c | 2 + + Python/initconfig.c | 4 +- + Python/pathconfig.c | 109 ++++++++++++++++++++++++++++++++++++++++++ + Python/traceback.c | 2 +- + 6 files changed, 165 insertions(+), 37 deletions(-) + +diff --git a/Include/pylifecycle.h b/Include/pylifecycle.h +index 2df7fe6..17d403c 100644 +--- a/Include/pylifecycle.h ++++ b/Include/pylifecycle.h +@@ -21,6 +21,12 @@ PyAPI_FUNC(int) Py_IsInitialized(void); + PyAPI_FUNC(PyThreadState *) Py_NewInterpreter(void); + PyAPI_FUNC(void) Py_EndInterpreter(PyThreadState *); + ++PyAPI_FUNC(wchar_t) Py_GetSepW(const wchar_t *); ++PyAPI_FUNC(char) Py_GetSepA(const char *); ++ ++PyAPI_FUNC(void) Py_NormalizeSepsW(wchar_t *); ++PyAPI_FUNC(void) Py_NormalizeSepsA(char *); ++ + + /* Py_PyAtExit is for the atexit module, Py_AtExit is for low-level + * exit functions. +diff --git a/Lib/ntpath.py b/Lib/ntpath.py +index 527c7ae..1f1b441 100644 +--- a/Lib/ntpath.py ++++ b/Lib/ntpath.py +@@ -11,9 +11,7 @@ module as os.path. + curdir = '.' + pardir = '..' + extsep = '.' +-sep = '\\' + pathsep = ';' +-altsep = '/' + defpath = '.;C:\\bin' + devnull = 'nul' + +@@ -23,6 +21,15 @@ import stat + import genericpath + from genericpath import * + ++if sys.platform == "win32" and "MSYSTEM" in os.environ: ++ sep = '/' ++ altsep = '\\' ++else: ++ sep = '\\' ++ altsep = '/' ++bsep = str.encode(sep) ++baltsep = str.encode(altsep) ++ + __all__ = ["normcase","isabs","join","splitdrive","split","splitext", + "basename","dirname","commonprefix","getsize","getmtime", + "getatime","getctime", "islink","exists","lexists","isdir","isfile", +@@ -33,9 +40,27 @@ __all__ = ["normcase","isabs","join","splitdrive","split","splitext", + + def _get_bothseps(path): + if isinstance(path, bytes): +- return b'\\/' ++ return bsep+baltsep ++ else: ++ return sep+altsep ++ ++def _get_sep(path): ++ if isinstance(path, bytes): ++ return bsep ++ else: ++ return sep ++ ++def _get_altsep(path): ++ if isinstance(path, bytes): ++ return baltsep + else: +- return '\\/' ++ return altsep ++ ++def _get_colon(path): ++ if isinstance(path, bytes): ++ return b':' ++ else: ++ return ':' + + # Normalize the case of a pathname and map slashes to backslashes. + # Other normalizations (such as optimizing '../' away) are not done +@@ -47,9 +72,9 @@ def normcase(s): + Makes all characters lowercase and all slashes into backslashes.""" + s = os.fspath(s) + if isinstance(s, bytes): +- return s.replace(b'/', b'\\').lower() ++ return s.replace(baltsep, bsep).lower() + else: +- return s.replace('/', '\\').lower() ++ return s.replace(altsep, sep).lower() + + + # Return whether a path is absolute. +@@ -76,14 +101,9 @@ def isabs(s): + # Join two (or more) paths. + def join(path, *paths): + path = os.fspath(path) +- if isinstance(path, bytes): +- sep = b'\\' +- seps = b'\\/' +- colon = b':' +- else: +- sep = '\\' +- seps = '\\/' +- colon = ':' ++ sep = _get_sep(path) ++ seps = _get_bothseps(path) ++ colon = _get_colon(path) + try: + if not paths: + path[:0] + sep #23780: Ensure compatible data type even if p is null. +@@ -142,14 +162,9 @@ def splitdrive(p): + """ + p = os.fspath(p) + if len(p) >= 2: +- if isinstance(p, bytes): +- sep = b'\\' +- altsep = b'/' +- colon = b':' +- else: +- sep = '\\' +- altsep = '/' +- colon = ':' ++ sep = _get_sep(p) ++ altsep = _get_altsep(p) ++ colon = _get_colon(p) + normp = p.replace(altsep, sep) + if (normp[0:2] == sep*2) and (normp[2:3] != sep): + # is a UNC path: +@@ -203,9 +218,9 @@ def split(p): + def splitext(p): + p = os.fspath(p) + if isinstance(p, bytes): +- return genericpath._splitext(p, b'\\', b'/', b'.') ++ return genericpath._splitext(p, bsep, baltsep, b'.') + else: +- return genericpath._splitext(p, '\\', '/', '.') ++ return genericpath._splitext(p, sep, altsep, '.') + splitext.__doc__ = genericpath._splitext.__doc__ + + +@@ -463,15 +478,13 @@ def expandvars(path): + def normpath(path): + """Normalize path, eliminating double slashes, etc.""" + path = os.fspath(path) ++ sep = _get_sep(path) ++ altsep = _get_altsep(path) + if isinstance(path, bytes): +- sep = b'\\' +- altsep = b'/' + curdir = b'.' + pardir = b'..' + special_prefixes = (b'\\\\.\\', b'\\\\?\\') + else: +- sep = '\\' +- altsep = '/' + curdir = '.' + pardir = '..' + special_prefixes = ('\\\\.\\', '\\\\?\\') +@@ -683,6 +696,7 @@ else: + # strip the prefix anyway. + if ex.winerror == initial_winerror: + path = spath ++ path = normpath(path) + return path + + +@@ -693,12 +707,11 @@ supports_unicode_filenames = (hasattr(sys, "getwindowsversion") and + def relpath(path, start=None): + """Return a relative version of a path""" + path = os.fspath(path) ++ sep = _get_sep(path) + if isinstance(path, bytes): +- sep = b'\\' + curdir = b'.' + pardir = b'..' + else: +- sep = '\\' + curdir = '.' + pardir = '..' + +@@ -753,13 +766,11 @@ def commonpath(paths): + raise ValueError('commonpath() arg is an empty sequence') + + paths = tuple(map(os.fspath, paths)) ++ sep = _get_sep(paths[0]) ++ altsep = _get_altsep(paths[0]) + if isinstance(paths[0], bytes): +- sep = b'\\' +- altsep = b'/' + curdir = b'.' + else: +- sep = '\\' +- altsep = '/' + curdir = '.' + + try: +diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c +index d54994d..863bc99 100644 +--- a/Modules/posixmodule.c ++++ b/Modules/posixmodule.c +@@ -3807,6 +3807,7 @@ posix_getcwd(int use_bytes) + return PyErr_SetFromWindowsErr(0); + } + ++ Py_NormalizeSepsW(wbuf2); + PyObject *resobj = PyUnicode_FromWideChar(wbuf2, len); + if (wbuf2 != wbuf) { + PyMem_RawFree(wbuf2); +@@ -4370,6 +4371,7 @@ os__getfinalpathname_impl(PyObject *module, path_t *path) + target_path = tmp; + } + ++ Py_NormalizeSepsW(target_path); + result = PyUnicode_FromWideChar(target_path, result_length); + if (result && path->narrow) { + Py_SETREF(result, PyUnicode_EncodeFSDefault(result)); +diff --git a/Python/initconfig.c b/Python/initconfig.c +index 27ae48d..6d321b0 100644 +--- a/Python/initconfig.c ++++ b/Python/initconfig.c +@@ -133,7 +133,7 @@ static const char usage_6[] = + "PYTHONPYCACHEPREFIX: root directory for bytecode cache (pyc) files.\n" + "PYTHONWARNDEFAULTENCODING: enable opt-in EncodingWarning for 'encoding=None'.\n"; + +-#if defined(MS_WINDOWS) ++#if defined(_MSC_VER) + # define PYTHONHOMEHELP "\\python{major}{minor}" + #else + # define PYTHONHOMEHELP "/lib/pythonX.X" +@@ -1536,7 +1536,7 @@ config_init_program_name(PyConfig *config) + } + + /* Last fall back: hardcoded name */ +-#ifdef MS_WINDOWS ++#ifdef _MSC_VER + const wchar_t *default_program_name = L"python"; + #else + const wchar_t *default_program_name = L"python3"; +diff --git a/Python/pathconfig.c b/Python/pathconfig.c +index 470aba7..3e7a1c5 100644 +--- a/Python/pathconfig.c ++++ b/Python/pathconfig.c +@@ -15,6 +15,114 @@ + extern "C" { + #endif + ++#ifdef __MINGW32__ ++#define wcstok wcstok_s ++#include ++#endif ++ ++char ++Py_GetSepA(const char *name) ++{ ++ char* msystem = (char*)2; /* So that non Windows use / as sep */ ++ static char sep = '\0'; ++#ifdef _WIN32 ++ /* https://msdn.microsoft.com/en-gb/library/windows/desktop/aa365247%28v=vs.85%29.aspx ++ * The "\\?\" prefix .. indicate that the path should be passed to the system with minimal ++ * modification, which means that you cannot use forward slashes to represent path separators ++ */ ++ if (name != NULL && memcmp(name, "\\\\?\\", sizeof("\\\\?\\") - sizeof(char)) == 0) ++ { ++ return '\\'; ++ } ++#endif ++ if (sep != '\0') ++ return sep; ++#if defined(__MINGW32__) ++ msystem = Py_GETENV("MSYSTEM"); ++#endif ++ if (msystem != NULL) ++ sep = '/'; ++ else ++ sep = '\\'; ++ return sep; ++} ++ ++static char ++Py_GetAltSepA(const char *name) ++{ ++ char sep = Py_GetSepA(name); ++ if (sep == '/') ++ return '\\'; ++ return '/'; ++} ++ ++void ++Py_NormalizeSepsA(char *name) ++{ ++ char sep = Py_GetSepA(name); ++ char altsep = Py_GetAltSepA(name); ++ char* seps; ++ if (strlen(name) > 1 && name[1] == ':') { ++ name[0] = toupper(name[0]); ++ } ++ seps = strchr(name, altsep); ++ while(seps) { ++ *seps = sep; ++ seps = strchr(seps, altsep); ++ } ++} ++ ++wchar_t ++Py_GetSepW(const wchar_t *name) ++{ ++ char* msystem = (char*)2; /* So that non Windows use / as sep */ ++ static wchar_t sep = L'\0'; ++#ifdef _WIN32 ++ /* https://msdn.microsoft.com/en-gb/library/windows/desktop/aa365247%28v=vs.85%29.aspx ++ * The "\\?\" prefix .. indicate that the path should be passed to the system with minimal ++ * modification, which means that you cannot use forward slashes to represent path separators ++ */ ++ if (name != NULL && memcmp(name, L"\\\\?\\", sizeof(L"\\\\?\\") - sizeof(wchar_t)) == 0) ++ { ++ return L'\\'; ++ } ++#endif ++ if (sep != L'\0') ++ return sep; ++#if defined(__MINGW32__) ++ msystem = Py_GETENV("MSYSTEM"); ++#endif ++ if (msystem != NULL) ++ sep = L'/'; ++ else ++ sep = L'\\'; ++ return sep; ++} ++ ++static wchar_t ++Py_GetAltSepW(const wchar_t *name) ++{ ++ char sep = Py_GetSepW(name); ++ if (sep == L'/') ++ return L'\\'; ++ return L'/'; ++} ++ ++void ++Py_NormalizeSepsW(wchar_t *name) ++{ ++ wchar_t sep = Py_GetSepW(name); ++ wchar_t altsep = Py_GetAltSepW(name); ++ wchar_t* seps; ++ if (wcslen(name) > 1 && name[1] == L':') { ++ name[0] = towupper(name[0]); ++ } ++ seps = wcschr(name, altsep); ++ while(seps) { ++ *seps = sep; ++ seps = wcschr(seps, altsep); ++ } ++} + + _PyPathConfig _Py_path_config = _PyPathConfig_INIT; + +@@ -562,6 +670,7 @@ _Py_SetProgramFullPath(const wchar_t *program_full_path) + if (_Py_path_config.program_full_path == NULL) { + path_out_of_memory(__func__); + } ++ Py_NormalizeSepsW(_Py_path_config.program_name); + } + + +diff --git a/Python/traceback.c b/Python/traceback.c +index 9b23f45..740c8c0 100644 +--- a/Python/traceback.c ++++ b/Python/traceback.c +@@ -315,7 +315,7 @@ _Py_FindSourceFile(PyObject *filename, char* namebuf, size_t namelen, PyObject * + filepath = PyBytes_AS_STRING(filebytes); + + /* Search tail of filename in sys.path before giving up */ +- tail = strrchr(filepath, SEP); ++ tail = strrchr(filepath, Py_GetSepA(filepath)); + if (tail == NULL) + tail = filepath; + else +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0032-mingw-use-posix-getpath.patch b/mingw-w64-python3.10/0032-mingw-use-posix-getpath.patch new file mode 100644 index 0000000000..873085dc54 --- /dev/null +++ b/mingw-w64-python3.10/0032-mingw-use-posix-getpath.patch @@ -0,0 +1,505 @@ +From d5ed544f32e491e840505b71bcb325249252734e Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?= + +Date: Thu, 17 Jun 2021 18:51:47 +0530 +Subject: [PATCH 032/N] mingw use posix getpath +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Co-authored-by: Алексей +Co-authored-by: Christoph Reiter +Signed-off-by: Naveen M K +--- + Include/cpython/fileutils.h | 3 +- + Include/pylifecycle.h | 2 +- + Modules/getpath.c | 130 +++++++++++++++++++++++++++++++++--- + Modules/posixmodule.c | 2 +- + Python/dynload_win.c | 2 + + Python/fileutils.c | 22 +++++- + 6 files changed, 145 insertions(+), 16 deletions(-) + +diff --git a/Include/cpython/fileutils.h b/Include/cpython/fileutils.h +index ccf37e9..c287ab3 100644 +--- a/Include/cpython/fileutils.h ++++ b/Include/cpython/fileutils.h +@@ -135,9 +135,8 @@ PyAPI_FUNC(wchar_t*) _Py_wrealpath( + size_t resolved_path_len); + #endif + +-#ifndef MS_WINDOWS + PyAPI_FUNC(int) _Py_isabs(const wchar_t *path); +-#endif ++PyAPI_FUNC(int) _Py_issep(const wchar_t ch); + + PyAPI_FUNC(int) _Py_abspath(const wchar_t *path, wchar_t **abspath_p); + +diff --git a/Include/pylifecycle.h b/Include/pylifecycle.h +index 17d403c..ce3f411 100644 +--- a/Include/pylifecycle.h ++++ b/Include/pylifecycle.h +@@ -52,7 +52,7 @@ PyAPI_FUNC(wchar_t *) Py_GetPrefix(void); + PyAPI_FUNC(wchar_t *) Py_GetExecPrefix(void); + PyAPI_FUNC(wchar_t *) Py_GetPath(void); + PyAPI_FUNC(void) Py_SetPath(const wchar_t *); +-#ifdef MS_WINDOWS ++#ifdef _MSC_VER + int _Py_CheckPython3(void); + #endif + +diff --git a/Modules/getpath.c b/Modules/getpath.c +index 363d62a..ff79924 100644 +--- a/Modules/getpath.c ++++ b/Modules/getpath.c +@@ -13,6 +13,11 @@ + # include + #endif + ++#ifdef MS_WINDOWS ++#include ++#include ++#endif ++ + /* Search in some common locations for the associated Python libraries. + * + * Two directories must be found, the platform independent directory +@@ -129,6 +134,7 @@ typedef struct { + wchar_t *prefix_macro; /* PREFIX macro */ + wchar_t *exec_prefix_macro; /* EXEC_PREFIX macro */ + wchar_t *vpath_macro; /* VPATH macro */ ++ wchar_t *dll_path; /* DLL Path */ + + wchar_t *lib_python; /* / "pythonX.Y" */ + +@@ -146,7 +152,7 @@ typedef struct { + } PyCalculatePath; + + static const wchar_t delimiter[2] = {DELIM, '\0'}; +-static const wchar_t separator[2] = {SEP, '\0'}; ++static wchar_t separator[2] = {SEP, '\0'}; + + + /* Get file status. Encode the path to the locale encoding. */ +@@ -170,7 +176,7 @@ static void + reduce(wchar_t *dir) + { + size_t i = wcslen(dir); +- while (i > 0 && dir[i] != SEP) { ++ while (i > 0 && !_Py_issep(dir[i])) { + --i; + } + dir[i] = '\0'; +@@ -224,6 +230,9 @@ isdir(const wchar_t *filename) + return 1; + } + ++/* ++x86_64-w64-mingw32-gcc -c -Wno-unused-result -Wsign-compare -DNDEBUG -march=x86-64 -mtune=generic -O2 -pipe -fwrapv -D__USE_MINGW_ANSI_STDIO=1 -D_WIN32_WINNT=0x0601 -DNDEBUG -DMS_DLL_ID="\"3.9\"" -flto -fuse-linker-plugin -ffat-lto-objects -flto-partition=none -g -std=c99 -Wextra -Wno-unused-result -Wno-unused-parameter -Wno-missing-field-initializers -Wstrict-prototypes -Werror=implicit-function-declaration -fvisibility=hidden -fprofile-generate -I../Python-3.9.4/Include/internal -IObjects -IInclude -IPython -I. -I../Python-3.9.4/Include -I../Python-3.9.4/PC -D__USE_MINGW_ANSI_STDIO=1 -IC:/msys64/mingw64/include/ncurses -I. -DPy_BUILD_CORE -DPYTHONPATH='""' -DPREFIX='"/mingw64"' -DEXEC_PREFIX='"/mingw64"' -DVERSION='"3.9"' -DVPATH='"../Python-3.9.4"' -o Modules/getpath.o ../Python-3.9.4/Modules/getpath.c ++*/ + + /* Add a path component, by appending stuff to buffer. + buflen: 'buffer' length in characters including trailing NUL. +@@ -242,8 +251,8 @@ joinpath(wchar_t *path, const wchar_t *path2, size_t path_len) + return PATHLEN_ERR(); + } + +- if (n > 0 && path[n-1] != SEP) { +- path[n++] = SEP; ++ if (n > 0 && !_Py_issep(path[n-1])) { ++ path[n++] = Py_GetSepW(path); + } + } + else { +@@ -285,7 +294,7 @@ joinpath2(const wchar_t *path, const wchar_t *path2) + } + + size_t len = wcslen(path); +- int add_sep = (len > 0 && path[len - 1] != SEP); ++ int add_sep = (len > 0 && !_Py_issep(path[len - 1])); + len += add_sep; + len += wcslen(path2); + +@@ -334,7 +343,7 @@ copy_absolute(wchar_t *abs_path, const wchar_t *path, size_t abs_path_len) + } + return _PyStatus_OK(); + } +- if (path[0] == '.' && path[1] == SEP) { ++ if (path[0] == '.' && _Py_issep(path[1])) { + path += 2; + } + PyStatus status = joinpath(abs_path, path, abs_path_len); +@@ -478,6 +487,7 @@ search_for_prefix(PyCalculatePath *calculate, _PyPathConfig *pathconfig, + return _PyStatus_NO_MEMORY(); + } + ++ Py_NormalizeSepsW(path); + int is_build_dir = isfile(path); + PyMem_RawFree(path); + +@@ -502,6 +512,7 @@ search_for_prefix(PyCalculatePath *calculate, _PyPathConfig *pathconfig, + } + + int module; ++ Py_NormalizeSepsW(prefix); + status = ismodule(prefix, &module); + if (_PyStatus_EXCEPTION(status)) { + return status; +@@ -528,6 +539,7 @@ search_for_prefix(PyCalculatePath *calculate, _PyPathConfig *pathconfig, + } + + int module; ++ Py_NormalizeSepsW(prefix); + status = ismodule(prefix, &module); + if (_PyStatus_EXCEPTION(status)) { + return status; +@@ -551,6 +563,7 @@ search_for_prefix(PyCalculatePath *calculate, _PyPathConfig *pathconfig, + } + + int module; ++ Py_NormalizeSepsW(prefix); + status = ismodule(prefix, &module); + if (_PyStatus_EXCEPTION(status)) { + return status; +@@ -610,6 +623,11 @@ calculate_set_prefix(PyCalculatePath *calculate, _PyPathConfig *pathconfig) + * return the compiled-in defaults instead. + */ + if (calculate->prefix_found > 0) { ++#ifdef MS_WINDOWS ++ wchar_t drive_root[3]; ++ memset(drive_root, 0, sizeof(drive_root)); ++ wcsncpy(drive_root, calculate->prefix, 3); ++#endif + wchar_t *prefix = _PyMem_RawWcsdup(calculate->prefix); + if (prefix == NULL) { + return _PyStatus_NO_MEMORY(); +@@ -625,7 +643,11 @@ calculate_set_prefix(PyCalculatePath *calculate, _PyPathConfig *pathconfig) + + /* The prefix is the root directory, but reduce() chopped + off the "/". */ ++#ifdef MS_WINDOWS ++ pathconfig->prefix = _PyMem_RawWcsdup(drive_root); ++#else + pathconfig->prefix = _PyMem_RawWcsdup(separator); ++#endif + if (pathconfig->prefix == NULL) { + return _PyStatus_NO_MEMORY(); + } +@@ -682,6 +704,7 @@ calculate_pybuilddir(const wchar_t *argv0_path, + return PATHLEN_ERR(); + } + status = joinpath(exec_prefix, pybuilddir, exec_prefix_len); ++ Py_NormalizeSepsW(exec_prefix); + PyMem_RawFree(pybuilddir); + if (_PyStatus_EXCEPTION(status)) { + return status; +@@ -730,6 +753,7 @@ search_for_exec_prefix(PyCalculatePath *calculate, _PyPathConfig *pathconfig, + + /* Check for pybuilddir.txt */ + assert(*found == 0); ++ Py_NormalizeSepsW(exec_prefix); + status = calculate_pybuilddir(calculate->argv0_path, + exec_prefix, exec_prefix_len, found); + if (_PyStatus_EXCEPTION(status)) { +@@ -804,6 +828,7 @@ calculate_exec_prefix(PyCalculatePath *calculate, _PyPathConfig *pathconfig) + return status; + } + ++ Py_NormalizeSepsW(exec_prefix); + if (!calculate->exec_prefix_found) { + if (calculate->warnings) { + fprintf(stderr, +@@ -836,6 +861,47 @@ calculate_exec_prefix(PyCalculatePath *calculate, _PyPathConfig *pathconfig) + } + + ++#ifdef MS_WINDOWS ++wchar_t * ++GetWindowsModulePaths(void) ++{ ++ int result = 0; ++ wchar_t program_full_path[MAXPATHLEN+1]; ++ memset(program_full_path, 0, sizeof(program_full_path)); ++ ++ if (GetModuleFileNameW(NULL, program_full_path, MAXPATHLEN)) { ++ result = 1; ++ Py_NormalizeSepsW(program_full_path); ++ } ++ ++ return _PyMem_RawWcsdup(program_full_path); ++} ++ ++ ++wchar_t* ++_Py_GetDLLPath(void) ++{ ++ wchar_t dll_path[MAXPATHLEN+1]; ++ memset(dll_path, 0, sizeof(dll_path)); ++ ++#ifdef Py_ENABLE_SHARED ++ extern HANDLE PyWin_DLLhModule; ++ if (PyWin_DLLhModule) { ++ if (GetModuleFileNameW(PyWin_DLLhModule, dll_path, MAXPATHLEN)) { ++ Py_NormalizeSepsW(dll_path); ++ } else { ++ dll_path[0] = 0; ++ } ++ } ++#else ++ dll_path[0] = 0; ++#endif ++ ++ return _PyMem_RawWcsdup(dll_path); ++} ++#endif /* MS_WINDOWS */ ++ ++ + static PyStatus + calculate_set_exec_prefix(PyCalculatePath *calculate, + _PyPathConfig *pathconfig) +@@ -846,6 +912,12 @@ calculate_set_exec_prefix(PyCalculatePath *calculate, + return _PyStatus_NO_MEMORY(); + } + ++#ifdef MS_WINDOWS ++ wchar_t drive_root[3]; ++ memset(drive_root, 0, sizeof(drive_root)); ++ wcsncpy(drive_root, calculate->exec_prefix, 3); ++#endif ++ + reduce(exec_prefix); + reduce(exec_prefix); + reduce(exec_prefix); +@@ -859,7 +931,11 @@ calculate_set_exec_prefix(PyCalculatePath *calculate, + + /* The exec_prefix is the root directory, but reduce() chopped + off the "/". */ ++#ifdef MS_WINDOWS ++ pathconfig->exec_prefix = _PyMem_RawWcsdup(drive_root); ++#else + pathconfig->exec_prefix = _PyMem_RawWcsdup(separator); ++#endif + if (pathconfig->exec_prefix == NULL) { + return _PyStatus_NO_MEMORY(); + } +@@ -964,13 +1040,22 @@ calculate_program_impl(PyCalculatePath *calculate, _PyPathConfig *pathconfig) + * other way to find a directory to start the search from. If + * $PATH isn't exported, you lose. + */ +- if (wcschr(pathconfig->program_name, SEP)) { ++ if (wcschr(pathconfig->program_name, Py_GetSepW(pathconfig->program_name))) { + pathconfig->program_full_path = _PyMem_RawWcsdup(pathconfig->program_name); + if (pathconfig->program_full_path == NULL) { + return _PyStatus_NO_MEMORY(); + } + return _PyStatus_OK(); + } ++#ifdef MS_WINDOWS ++ else if(pathconfig->program_full_path == NULL) { ++ pathconfig->program_full_path = GetWindowsModulePaths(); ++ if (pathconfig->program_full_path == NULL) { ++ return _PyStatus_NO_MEMORY(); ++ } ++ return _PyStatus_OK(); ++ } ++#endif /* MS_WINDOWS */ + + #ifdef __APPLE__ + wchar_t *abs_path = NULL; +@@ -1007,7 +1092,7 @@ calculate_program_impl(PyCalculatePath *calculate, _PyPathConfig *pathconfig) + + + /* Calculate pathconfig->program_full_path */ +-static PyStatus ++PyStatus + calculate_program(PyCalculatePath *calculate, _PyPathConfig *pathconfig) + { + PyStatus status; +@@ -1173,7 +1258,7 @@ done: + #endif + + +-static PyStatus ++PyStatus + calculate_argv0_path(PyCalculatePath *calculate, + _PyPathConfig *pathconfig) + { +@@ -1191,10 +1276,12 @@ calculate_argv0_path(PyCalculatePath *calculate, + } + #endif + ++#if defined(HAVE_READLINK) + status = resolve_symlinks(&calculate->argv0_path); + if (_PyStatus_EXCEPTION(status)) { + return status; + } ++#endif + + reduce(calculate->argv0_path); + +@@ -1324,6 +1411,7 @@ calculate_zip_path(PyCalculatePath *calculate) + goto done; + } + ++ Py_NormalizeSepsW(calculate->zip_path); + res = _PyStatus_OK(); + + done: +@@ -1363,7 +1451,14 @@ calculate_module_search_path(PyCalculatePath *calculate, + } + + bufsz += wcslen(calculate->zip_path) + 1; ++/* TODO :: The MS_WINDOWS bit may be unnecessary. */ ++#ifdef MS_WINDOWS ++ if (_Py_isabs(calculate->exec_prefix)) { ++ bufsz += wcslen(calculate->exec_prefix) + 1; ++ } ++#else + bufsz += wcslen(calculate->exec_prefix) + 1; ++#endif + + /* Allocate the buffer */ + wchar_t *buf = PyMem_RawMalloc(bufsz * sizeof(wchar_t)); +@@ -1391,7 +1486,7 @@ calculate_module_search_path(PyCalculatePath *calculate, + + if (!_Py_isabs(defpath)) { + wcscat(buf, calculate->prefix); +- if (prefixsz >= 2 && calculate->prefix[prefixsz - 2] != SEP && ++ if (prefixsz >= 2 && !_Py_issep(calculate->prefix[prefixsz - 2]) && + defpath[0] != (delim ? DELIM : L'\0')) + { + /* not empty */ +@@ -1413,8 +1508,15 @@ calculate_module_search_path(PyCalculatePath *calculate, + } + wcscat(buf, delimiter); + ++#ifdef MS_WINDOWS ++ if (_Py_isabs(calculate->exec_prefix)) { ++ wcscat(buf, calculate->exec_prefix); ++ wcscat(buf, delimiter); ++ } ++#else + /* Finally, on goes the directory for dynamic-load modules */ + wcscat(buf, calculate->exec_prefix); ++#endif + + pathconfig->module_search_path = buf; + return _PyStatus_OK(); +@@ -1443,14 +1545,17 @@ calculate_init(PyCalculatePath *calculate, const PyConfig *config) + if (!calculate->pythonpath_macro) { + return DECODE_LOCALE_ERR("PYTHONPATH macro", len); + } ++ Py_NormalizeSepsW(calculate->pythonpath_macro); + calculate->prefix_macro = Py_DecodeLocale(PREFIX, &len); + if (!calculate->prefix_macro) { + return DECODE_LOCALE_ERR("PREFIX macro", len); + } ++ Py_NormalizeSepsW(calculate->prefix_macro); + calculate->exec_prefix_macro = Py_DecodeLocale(EXEC_PREFIX, &len); + if (!calculate->exec_prefix_macro) { + return DECODE_LOCALE_ERR("EXEC_PREFIX macro", len); + } ++ Py_NormalizeSepsW(calculate->exec_prefix_macro); + calculate->vpath_macro = Py_DecodeLocale(VPATH, &len); + if (!calculate->vpath_macro) { + return DECODE_LOCALE_ERR("VPATH macro", len); +@@ -1461,6 +1566,7 @@ calculate_init(PyCalculatePath *calculate, const PyConfig *config) + if (!pyversion) { + return DECODE_LOCALE_ERR("VERSION macro", len); + } ++ + calculate->lib_python = joinpath2(config->platlibdir, pyversion); + PyMem_RawFree(pyversion); + if (calculate->lib_python == NULL) { +@@ -1477,6 +1583,7 @@ calculate_free(PyCalculatePath *calculate) + PyMem_RawFree(calculate->pythonpath_macro); + PyMem_RawFree(calculate->prefix_macro); + PyMem_RawFree(calculate->exec_prefix_macro); ++ PyMem_RawFree(calculate->dll_path); + PyMem_RawFree(calculate->vpath_macro); + PyMem_RawFree(calculate->lib_python); + PyMem_RawFree(calculate->path_env); +@@ -1492,6 +1599,8 @@ calculate_path(PyCalculatePath *calculate, _PyPathConfig *pathconfig) + { + PyStatus status; + ++ calculate->dll_path = _Py_GetDLLPath(); ++ + if (pathconfig->program_full_path == NULL) { + status = calculate_program(calculate, pathconfig); + if (_PyStatus_EXCEPTION(status)) { +@@ -1592,6 +1701,7 @@ _PyPathConfig_Calculate(_PyPathConfig *pathconfig, const PyConfig *config) + { + PyStatus status; + PyCalculatePath calculate; ++ separator[0] = Py_GetSepW(NULL); + memset(&calculate, 0, sizeof(calculate)); + + status = calculate_init(&calculate, config); +diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c +index 863bc99..14b60f0 100644 +--- a/Modules/posixmodule.c ++++ b/Modules/posixmodule.c +@@ -4097,7 +4097,7 @@ _listdir_windows_no_opendir(path_t *path, PyObject *list) + Py_END_ALLOW_THREADS + /* FindNextFile sets error to ERROR_NO_MORE_FILES if + it got to the end of the directory. */ +- if (!result && GetLastError() != ERROR_NO_MORE_FILES) { ++ if (!result && GetLastError() != 0 && GetLastError() != ERROR_NO_MORE_FILES) { + Py_DECREF(list); + list = path_error(path); + goto exit; +diff --git a/Python/dynload_win.c b/Python/dynload_win.c +index 6b53780..1083fe8 100644 +--- a/Python/dynload_win.c ++++ b/Python/dynload_win.c +@@ -173,7 +173,9 @@ dl_funcptr _PyImport_FindSharedFuncptrWindows(const char *prefix, + dl_funcptr p; + char funcname[258], *import_python; + ++#if defined(_MSC_VER) + _Py_CheckPython3(); ++#endif + + #if USE_UNICODE_WCHAR_CACHE + const wchar_t *wpathname = _PyUnicode_AsUnicode(pathname); +diff --git a/Python/fileutils.c b/Python/fileutils.c +index e8a7eda..66f748d 100644 +--- a/Python/fileutils.c ++++ b/Python/fileutils.c +@@ -1964,13 +1964,31 @@ _Py_wrealpath(const wchar_t *path, + #endif + + +-#ifndef MS_WINDOWS + int + _Py_isabs(const wchar_t *path) + { +- return (path[0] == SEP); ++#ifdef MS_WINDOWS ++ size_t i = wcslen(path); ++ if (i >= 3) { ++ if (iswalpha(path[0]) && path[1] == L':' && _Py_issep(path[2])) { ++ return 1; ++ } ++ } ++ return 0; ++#else ++ return _Py_issep(path[0]); ++#endif + } ++ ++int ++_Py_issep(const wchar_t ch) ++{ ++#ifdef MS_WINDOWS ++ return ch == SEP || ch == ALTSEP; ++#else ++ return ch == SEP; + #endif ++} + + + /* Get an absolute path. +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0033-mingw-add-ModuleFileName-dir-to-PATH.patch b/mingw-w64-python3.10/0033-mingw-add-ModuleFileName-dir-to-PATH.patch new file mode 100644 index 0000000000..d591a4d11e --- /dev/null +++ b/mingw-w64-python3.10/0033-mingw-add-ModuleFileName-dir-to-PATH.patch @@ -0,0 +1,59 @@ +From b7d61297d20f6049824c6e7c63d7369ea2c7d39b Mon Sep 17 00:00:00 2001 +From: Ray Donnelly +Date: Thu, 17 Jun 2021 18:51:48 +0530 +Subject: [PATCH 033/N] mingw add ModuleFileName dir to PATH +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Co-authored-by: Алексей +Co-authored-by: Christoph Reiter +Signed-off-by: Naveen M K +--- + Modules/getpath.c | 30 ++++++++++++++++++++++++++++++ + 1 file changed, 30 insertions(+) + +diff --git a/Modules/getpath.c b/Modules/getpath.c +index ff79924..161c6f7 100644 +--- a/Modules/getpath.c ++++ b/Modules/getpath.c +@@ -1635,6 +1635,36 @@ calculate_path(PyCalculatePath *calculate, _PyPathConfig *pathconfig) + return status; + } + ++#ifdef MS_WINDOWS ++ if (calculate->path_env) { ++ wchar_t *module_path, *norm_path; ++ // Add path of executable/dll to system path. This ++ // is so that the correct tcl??.dll and tk??.dll get used. ++ module_path = calculate->dll_path[0] ? calculate->dll_path : pathconfig->program_full_path; ++ norm_path = (wchar_t *)alloca(sizeof(wchar_t) * (wcslen(module_path) + 1)); ++ if (norm_path) { ++ wchar_t *slashes, *end, *new_path; ++ wcscpy(norm_path, module_path); ++ slashes = wcschr(norm_path, L'/'); ++ while (slashes) { ++ *slashes = L'\\'; ++ slashes = wcschr(slashes + 1, L'/'); ++ } ++ end = wcsrchr(norm_path, L'\\') ? wcsrchr(norm_path, L'\\') : norm_path + wcslen(norm_path); ++ end[1] = L'\0'; ++ ++ new_path = (wchar_t *)alloca(sizeof(wchar_t) * (wcslen(L"PATH=") + wcslen(calculate->path_env) + 1 + wcslen(norm_path) + 1)); ++ if (new_path) { ++ wcscpy(new_path, L"PATH="); ++ wcscat(new_path, calculate->path_env); ++ wcscat(new_path, L";"); ++ wcscat(new_path, norm_path); ++ _wputenv(new_path); ++ } ++ } ++ } ++#endif ++ + if ((!calculate->prefix_found || !calculate->exec_prefix_found) + && calculate->warnings) + { +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0034-mingw-add-BUILDIN_WIN32_MODULEs-time-msvcrt.patch b/mingw-w64-python3.10/0034-mingw-add-BUILDIN_WIN32_MODULEs-time-msvcrt.patch new file mode 100644 index 0000000000..5dbdbbb6d2 --- /dev/null +++ b/mingw-w64-python3.10/0034-mingw-add-BUILDIN_WIN32_MODULEs-time-msvcrt.patch @@ -0,0 +1,28 @@ +From 38c266c15342f49870d0db080961b1365cbaecf5 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?= + +Date: Thu, 17 Jun 2021 18:51:49 +0530 +Subject: [PATCH 034/N] mingw add BUILDIN_WIN32_MODULEs time msvcrt +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Co-authored-by: Алексей +Signed-off-by: Naveen M K +--- + Modules/Setup.config.in | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/Modules/Setup.config.in b/Modules/Setup.config.in +index d071a74..825ce5d 100644 +--- a/Modules/Setup.config.in ++++ b/Modules/Setup.config.in +@@ -11,4 +11,5 @@ + + # build-in modules for windows platform: + @USE_WIN32_MODULE@winreg ../PC/winreg.c ++@USE_WIN32_MODULE@msvcrt -DPy_BUILD_CORE ../PC/msvcrtmodule.c + +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0035-msys-cygwin-semi-native-build-sysconfig.patch b/mingw-w64-python3.10/0035-msys-cygwin-semi-native-build-sysconfig.patch new file mode 100644 index 0000000000..7910200726 --- /dev/null +++ b/mingw-w64-python3.10/0035-msys-cygwin-semi-native-build-sysconfig.patch @@ -0,0 +1,127 @@ +From ecae83c7c530244ac3c6a5bc34a07571ecf179ce Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?= + +Date: Thu, 17 Jun 2021 18:51:50 +0530 +Subject: [PATCH 035/N] msys cygwin semi native build sysconfig +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Co-authored-by: Алексей +Signed-off-by: Naveen M K +--- + Lib/sysconfig.py | 8 +++++++ + Makefile.pre.in | 7 ++++++ + configure.ac | 59 ++++++++++++++++++++++++++++++++++++++++++++++++ + 3 files changed, 74 insertions(+) + +diff --git a/Lib/sysconfig.py b/Lib/sysconfig.py +index 09469ef..823c426 100644 +--- a/Lib/sysconfig.py ++++ b/Lib/sysconfig.py +@@ -386,6 +386,14 @@ def _parse_makefile(filename, vars=None, keep_unresolved=True): + if isinstance(v, str): + done[k] = v.strip() + ++ # any keys that have one with the same name suffixed with _b2h ++ # need to be replaced with the value of the _b2h key. ++ # This converts from MSYS*/Cygwin paths to Windows paths. ++ for k, v in dict(done).items(): ++ if isinstance(k, str): ++ if k.endswith("_b2h"): ++ done[k[:-4]]=v ++ + # save the results in the global dictionary + vars.update(done) + return vars +diff --git a/Makefile.pre.in b/Makefile.pre.in +index 432d0ac..099c3ac 100644 +--- a/Makefile.pre.in ++++ b/Makefile.pre.in +@@ -137,6 +137,13 @@ exec_prefix= @exec_prefix@ + # Install prefix for data files + datarootdir= @datarootdir@ + ++# Locations needed for semi-native fixup of sysconfig. ++srcdir_b2h= @srcdir_b2h@ ++VPATH_b2h= @VPATH_b2h@ ++abs_srcdir_b2h= @abs_srcdir_b2h@ ++abs_builddir_b2h= @abs_builddir_b2h@ ++prefix_b2h= @prefix_b2h@ ++ + # Expanded directories + BINDIR= @bindir@ + LIBDIR= @libdir@ +diff --git a/configure.ac b/configure.ac +index adc5e0e..cb06125 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -608,6 +608,65 @@ then + AC_DEFINE(_INCLUDE__STDC_A1_SOURCE, 1, Define to include mbstate_t for mbrtowc) + fi + ++# On 'semi-native' build systems (MSYS*/Cygwin targeting MinGW-w64) ++# _sysconfigdata.py will contain paths that are correct only in the ++# build environment. This means external modules will fail to build ++# without setting up the same env and also that the build of Python ++# itself will fail as the paths are not correct for the host tools. ++# ++# Also, getpath.c uses GetModuleFileNameW (replacing \ with /) and ++# compares that with the define VPATH (passed in via command-line) ++# to determine whether it's the build- or the installed-Python. ++# ++# To work around these issues a set of _b2h variables are created: ++# VPATH_b2h, prefix_b2h, srcdir_b2h, abs_srcdir_b2h ++# and abs_builddir_b2h ++# .. where b2h stands for build to host. sysconfig.py replaces path ++# prefixes matching the non-b2h versions with the b2h equivalents. ++# ++# (note this assumes the host compilers are native and *not* cross ++# - in the 'semi-native' scenario only that is.) ++ ++AC_DEFUN([ABS_PATH_HOST], ++[$1=$(cd $$2 && pwd) ++ case $build_os in ++ mingw*) ++ case $host_os in ++ mingw*) $1=$(cd $$2 && pwd -W) ;; ++ *) ;; ++ esac ++ ;; ++ cygwin*) ++ case $host_os in ++ mingw*) $1=$(cygpath -w -m $$2) ;; ++ *) ;; ++ esac ++ ;; ++ esac ++AC_SUBST([$1]) ++]) ++ ++AC_MSG_CHECKING(absolute host location of VPATH) ++ABS_PATH_HOST([VPATH_b2h],[srcdir]) ++AC_MSG_RESULT([$VPATH_b2h]) ++ ++AC_MSG_CHECKING(absolute host location of prefix) ++ABS_PATH_HOST([prefix_b2h],[prefix]) ++AC_MSG_RESULT([$prefix_b2h]) ++ ++AC_MSG_CHECKING(absolute host location of srcdir) ++ABS_PATH_HOST([srcdir_b2h],[srcdir]) ++AC_MSG_RESULT([$srcdir_b2h]) ++ ++AC_MSG_CHECKING(absolute host location of abs_srcdir) ++ABS_PATH_HOST([abs_srcdir_b2h],[srcdir]) ++AC_MSG_RESULT([$abs_srcdir_b2h]) ++ ++my_builddir=. ++AC_MSG_CHECKING(Absolute host location of abs_builddir) ++ABS_PATH_HOST([abs_builddir_b2h],[my_builddir]) ++AC_MSG_RESULT([$abs_builddir_b2h]) ++ + AC_MSG_CHECKING([for init system calls]) + AC_SUBST(INITSYS) + case $host in +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0036-sysconfig-mingw-sysconfig-like-posix.patch b/mingw-w64-python3.10/0036-sysconfig-mingw-sysconfig-like-posix.patch new file mode 100644 index 0000000000..c4b0da6ed2 --- /dev/null +++ b/mingw-w64-python3.10/0036-sysconfig-mingw-sysconfig-like-posix.patch @@ -0,0 +1,66 @@ +From 1399e3c1afcdffb0314ce17eba4c8a62c16ad104 Mon Sep 17 00:00:00 2001 +From: Christoph Reiter +Date: Tue, 21 Sep 2021 20:53:59 +0200 +Subject: [PATCH 036/N] sysconfig: mingw sysconfig like posix + +Signed-off-by: Naveen M K +--- + Lib/sysconfig.py | 28 ++++++++++++++-------------- + 1 file changed, 14 insertions(+), 14 deletions(-) + +diff --git a/Lib/sysconfig.py b/Lib/sysconfig.py +index 823c426..fb994c0 100644 +--- a/Lib/sysconfig.py ++++ b/Lib/sysconfig.py +@@ -48,13 +48,13 @@ _INSTALL_SCHEMES = { + 'data': '{base}', + }, + 'nt': { +- 'stdlib': '{installed_base}/Lib', +- 'platstdlib': '{base}/Lib', +- 'purelib': '{base}/Lib/site-packages', +- 'platlib': '{base}/Lib/site-packages', +- 'include': '{installed_base}/Include', +- 'platinclude': '{installed_base}/Include', +- 'scripts': '{base}/Scripts', ++ 'stdlib': '{installed_base}/lib/python{py_version_short}', ++ 'platstdlib': '{base}/lib/python{py_version_short}', ++ 'purelib': '{base}/lib/python{py_version_short}/site-packages', ++ 'platlib': '{base}/lib/python{py_version_short}/site-packages', ++ 'include': '{installed_base}/include/python{py_version_short}', ++ 'platinclude': '{installed_base}/include/python{py_version_short}', ++ 'scripts': '{base}/bin', + 'data': '{base}', + }, + } +@@ -95,12 +95,12 @@ if _HAS_USER_BASE: + _INSTALL_SCHEMES |= { + # NOTE: When modifying "purelib" scheme, update site._get_path() too. + 'nt_user': { +- 'stdlib': '{userbase}/Python{py_version_nodot_plat}', +- 'platstdlib': '{userbase}/Python{py_version_nodot_plat}', +- 'purelib': '{userbase}/Python{py_version_nodot_plat}/site-packages', +- 'platlib': '{userbase}/Python{py_version_nodot_plat}/site-packages', +- 'include': '{userbase}/Python{py_version_nodot_plat}/Include', +- 'scripts': '{userbase}/Python{py_version_nodot_plat}/Scripts', ++ 'stdlib': '{userbase}/lib/python{py_version_short}', ++ 'platstdlib': '{userbase}/lib/python{py_version_short}', ++ 'purelib': '{userbase}/lib/python{py_version_short}/site-packages', ++ 'platlib': '{userbase}/lib/python{py_version_short}/site-packages', ++ 'include': '{userbase}/include/python{py_version_short}', ++ 'scripts': '{userbase}/bin', + 'data': '{userbase}', + }, + 'posix_user': { +@@ -519,7 +519,7 @@ def _init_non_posix(vars): + vars['INCLUDEPY'] = get_path('include') + vars['EXT_SUFFIX'] = _imp.extension_suffixes()[0] + vars['EXE'] = '.exe' +- vars['VERSION'] = _PY_VERSION_SHORT_NO_DOT ++ vars['VERSION'] = _PY_VERSION_SHORT + vars['BINDIR'] = os.path.dirname(_safe_realpath(sys.executable)) + vars['TZPATH'] = '' + +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0037-build-_winapi-earlier-so-we-can-use-it-in-distutils-.patch b/mingw-w64-python3.10/0037-build-_winapi-earlier-so-we-can-use-it-in-distutils-.patch new file mode 100644 index 0000000000..8fcc8b754a --- /dev/null +++ b/mingw-w64-python3.10/0037-build-_winapi-earlier-so-we-can-use-it-in-distutils-.patch @@ -0,0 +1,40 @@ +From d5d18dfe95f2d97627f637f39c61c56d8648fcae Mon Sep 17 00:00:00 2001 +From: Christoph Reiter +Date: Tue, 21 Sep 2021 21:13:57 +0200 +Subject: [PATCH 037/N] build _winapi earlier so we can use it in distutils + via subprocess + +Signed-off-by: Naveen M K +--- + Modules/Setup.config.in | 1 + + setup.py | 4 +++- + 2 files changed, 4 insertions(+), 1 deletion(-) + +diff --git a/Modules/Setup.config.in b/Modules/Setup.config.in +index 825ce5d..b4e7ff7 100644 +--- a/Modules/Setup.config.in ++++ b/Modules/Setup.config.in +@@ -12,4 +12,5 @@ + # build-in modules for windows platform: + @USE_WIN32_MODULE@winreg ../PC/winreg.c + @USE_WIN32_MODULE@msvcrt -DPy_BUILD_CORE ../PC/msvcrtmodule.c ++@USE_WIN32_MODULE@_winapi _winapi.c + +diff --git a/setup.py b/setup.py +index 679653d..6045374 100644 +--- a/setup.py ++++ b/setup.py +@@ -1691,7 +1691,9 @@ class PyBuildExt(build_ext): + self.add(Extension('msvcrt', [os.path.join(pc_srcdir, p) + for p in ['msvcrtmodule.c']])) + +- self.add(Extension('_winapi', ['_winapi.c'])) ++ # Added to Setup.config.in as now needed earlier since I ++ # use subprocess (which uses Popen) in cygwinccompiler.py ++ # self.add(Extension('_winapi', ['_winapi.c'])) + + self.add(Extension('_msi', [os.path.join(pc_srcdir, p) + for p in ['_msi.c']], +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0038-cross-dont-add-multiarch-paths-if-cross-compiling.patch b/mingw-w64-python3.10/0038-cross-dont-add-multiarch-paths-if-cross-compiling.patch new file mode 100644 index 0000000000..688546fb0a --- /dev/null +++ b/mingw-w64-python3.10/0038-cross-dont-add-multiarch-paths-if-cross-compiling.patch @@ -0,0 +1,34 @@ +From 8c08bc18c597727b73fa4ae9b6f5f0090ebee22c Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?= + +Date: Thu, 17 Jun 2021 18:51:52 +0530 +Subject: [PATCH 038/N] cross dont add multiarch paths if cross compiling +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Co-authored-by: Алексей +Signed-off-by: Naveen M K +--- + setup.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/setup.py b/setup.py +index 6045374..8446c0c 100644 +--- a/setup.py ++++ b/setup.py +@@ -816,10 +816,10 @@ class PyBuildExt(build_ext): + if not CROSS_COMPILING: + add_dir_to_list(self.compiler.library_dirs, '/usr/local/lib') + add_dir_to_list(self.compiler.include_dirs, '/usr/local/include') ++ self.add_multiarch_paths() + # only change this for cross builds for 3.3, issues on Mageia + if CROSS_COMPILING: + self.add_cross_compiling_paths() +- self.add_multiarch_paths() + self.add_ldflags_cppflags() + + def init_inc_lib_dirs(self): +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0039-mingw-use-backslashes-in-compileall-py.patch b/mingw-w64-python3.10/0039-mingw-use-backslashes-in-compileall-py.patch new file mode 100644 index 0000000000..67bbdcb441 --- /dev/null +++ b/mingw-w64-python3.10/0039-mingw-use-backslashes-in-compileall-py.patch @@ -0,0 +1,31 @@ +From d691d67b2af1d281487c3cbc0f5e15d771c2d2ff Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?= + +Date: Thu, 17 Jun 2021 18:51:53 +0530 +Subject: [PATCH 039/N] mingw use backslashes in compileall py +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Co-authored-by: Алексей +Signed-off-by: Naveen M K +--- + Lib/compileall.py | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/Lib/compileall.py b/Lib/compileall.py +index 3e00477..9d19e90 100644 +--- a/Lib/compileall.py ++++ b/Lib/compileall.py +@@ -38,6 +38,8 @@ def _walk_dir(dir, maxlevels, quiet=0): + if name == '__pycache__': + continue + fullname = os.path.join(dir, name) ++ if sys.platform == "win32" and sys.version.find("GCC") >= 0: ++ fullname = fullname.replace('\\','/') + if not os.path.isdir(fullname): + yield fullname + elif (maxlevels > 0 and name != os.curdir and name != os.pardir and +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0040-msys-convert_path-fix-and-root-hack.patch b/mingw-w64-python3.10/0040-msys-convert_path-fix-and-root-hack.patch new file mode 100644 index 0000000000..fc32cfa87e --- /dev/null +++ b/mingw-w64-python3.10/0040-msys-convert_path-fix-and-root-hack.patch @@ -0,0 +1,43 @@ +From cc0fbe288813b1e49ceaa8b2ed620e8887670b2a Mon Sep 17 00:00:00 2001 +From: Christoph Reiter +Date: Tue, 21 Sep 2021 21:18:36 +0200 +Subject: [PATCH 040/N] msys convert_path fix and root hack + +Signed-off-by: Naveen M K +--- + Makefile.pre.in | 12 +++++++++--- + 1 file changed, 9 insertions(+), 3 deletions(-) + +diff --git a/Makefile.pre.in b/Makefile.pre.in +index 099c3ac..c6a312e 100644 +--- a/Makefile.pre.in ++++ b/Makefile.pre.in +@@ -1760,6 +1760,12 @@ libainstall: @DEF_MAKE_RULE@ python-config + else true; \ + fi + ++ifeq ($(shell uname -o),Msys) ++DESTDIRFINAL=$(DESTDIR) ++else ++DESTDIRFINAL=$(DESTDIR)/ ++endif ++ + # Install the dynamically loadable modules + # This goes into $(exec_prefix) + sharedinstall: sharedmods +@@ -1767,9 +1773,9 @@ sharedinstall: sharedmods + --prefix=$(prefix) \ + --install-scripts=$(BINDIR) \ + --install-platlib=$(DESTSHARED) \ +- --root=$(DESTDIR)/ +- -rm $(DESTDIR)$(DESTSHARED)/_sysconfigdata_$(ABIFLAGS)_$(MACHDEP)_$(MULTIARCH).py +- -rm -r $(DESTDIR)$(DESTSHARED)/__pycache__ ++ --root=$(DESTDIRFINAL) ++ -rm $(DESTDIRFINAL)$(DESTSHARED)/_sysconfigdata_$(ABIFLAGS)_$(MACHDEP)_$(MULTIARCH).py ++ -rm -r $(DESTDIRFINAL)$(DESTSHARED)/__pycache__ + + # Here are a couple of targets for MacOSX again, to install a full + # framework-based Python. frameworkinstall installs everything, the +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0041-allow-static-tcltk.patch b/mingw-w64-python3.10/0041-allow-static-tcltk.patch new file mode 100644 index 0000000000..03617cf6f2 --- /dev/null +++ b/mingw-w64-python3.10/0041-allow-static-tcltk.patch @@ -0,0 +1,88 @@ +From c42bbc3cdab0f8af72ec32268d765659dc517670 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?= + +Date: Thu, 17 Jun 2021 18:51:54 +0530 +Subject: [PATCH 041/N] allow static tcltk +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Co-authored-by: Алексей +Signed-off-by: Naveen M K +--- + setup.py | 35 +++++++++++++++++++++++++---------- + 1 file changed, 25 insertions(+), 10 deletions(-) + +diff --git a/setup.py b/setup.py +index 8446c0c..b406cb8 100644 +--- a/setup.py ++++ b/setup.py +@@ -865,7 +865,7 @@ class PyBuildExt(build_ext): + if HOST_PLATFORM == 'hp-ux11': + self.lib_dirs += ['/usr/lib/hpux64', '/usr/lib/hpux32'] + +- if MACOS: ++ if MACOS or MS_WINDOWS: + # This should work on any unixy platform ;-) + # If the user has bothered specifying additional -I and -L flags + # in OPT and LDFLAGS we might as well use them here. +@@ -875,6 +875,8 @@ class PyBuildExt(build_ext): + # directories with whitespace in the name to store libraries. + cflags, ldflags = sysconfig.get_config_vars( + 'CFLAGS', 'LDFLAGS') ++ cflags = cflags + ' ' + ('',os.environ.get('CC'))[os.environ.get('CC') != None] ++ ldflags = ldflags + ' ' + ('',os.environ.get('LDSHARED'))[os.environ.get('LDSHARED') != None] + for item in cflags.split(): + if item.startswith('-I'): + self.inc_dirs.append(item[2:]) +@@ -2155,14 +2157,19 @@ class PyBuildExt(build_ext): + # The versions with dots are used on Unix, and the versions without + # dots on Windows, for detection by cygwin. + tcllib = tklib = tcl_includes = tk_includes = None +- for version in ['8.6', '86', '8.5', '85', '8.4', '84', '8.3', '83', +- '8.2', '82', '8.1', '81', '8.0', '80']: +- tklib = self.compiler.find_library_file(self.lib_dirs, +- 'tk' + version) +- tcllib = self.compiler.find_library_file(self.lib_dirs, +- 'tcl' + version) +- if tklib and tcllib: +- # Exit the loop when we've found the Tcl/Tk libraries ++ tcltk_suffix = None ++ for suffix in ['', 's']: ++ for version in ['8.6', '86', '8.5', '85', '8.4', '84', '8.3', '83', ++ '8.2', '82', '8.1', '81', '8.0', '80', '']: ++ tklib = self.compiler.find_library_file(self.lib_dirs, ++ 'tk' + version + suffix) ++ tcllib = self.compiler.find_library_file(self.lib_dirs, ++ 'tcl' + version + suffix) ++ if tklib and tcllib: ++ # Exit the loop when we've found the Tcl/Tk libraries ++ tcltk_suffix = suffix ++ break ++ if tcltk_suffix != None: + break + + # Now check for the header files +@@ -2233,10 +2240,18 @@ class PyBuildExt(build_ext): + # Add the Tcl/Tk libraries + libs.append('tk'+ version) + libs.append('tcl'+ version) ++ libs.append('tk'+ version + tcltk_suffix) ++ libs.append('tcl'+ version + tcltk_suffix) ++ if MS_WINDOWS: ++ for winlib in ['ws2_32','gdi32','comctl32','comdlg32','imm32','uuid','oleaut32','ole32']: ++ libs.append( winlib ) + + # Finally, link with the X11 libraries (not appropriate on cygwin) +- if not CYGWIN: ++ # ...on those platforms, define STATIC_BUILD if linking to static tcl/tk. ++ if not CYGWIN and not MS_WINDOWS: + libs.append('X11') ++ elif tcllib.endswith('s.a'): ++ defs.append( ('STATIC_BUILD',1) ) + + # XXX handle these, but how to detect? + # *** Uncomment and edit for PIL (TkImaging) extension only: +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0042-mingw-pdcurses_ISPAD.patch b/mingw-w64-python3.10/0042-mingw-pdcurses_ISPAD.patch new file mode 100644 index 0000000000..dadd76665f --- /dev/null +++ b/mingw-w64-python3.10/0042-mingw-pdcurses_ISPAD.patch @@ -0,0 +1,36 @@ +From 64f3f910871d9d0e51971b97d3cded59b458448e Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?= + +Date: Thu, 17 Jun 2021 18:51:55 +0530 +Subject: [PATCH 042/N] mingw pdcurses_ISPAD +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Co-authored-by: Алексей +Signed-off-by: Naveen M K +--- + Include/py_curses.h | 7 +++++++ + 1 file changed, 7 insertions(+) + +diff --git a/Include/py_curses.h b/Include/py_curses.h +index b70252d..0d5cee2 100644 +--- a/Include/py_curses.h ++++ b/Include/py_curses.h +@@ -36,6 +36,13 @@ + #include + #endif + ++#if defined(__MINGW32__) ++#include ++#if !defined(_ISPAD) ++#define _ISPAD 0x10 ++#endif ++#endif ++ + #ifdef HAVE_NCURSES_H + /* configure was checking , but we will + use , which has some or all these features. */ +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0043-builddir-fixes.patch b/mingw-w64-python3.10/0043-builddir-fixes.patch new file mode 100644 index 0000000000..bde714eee3 --- /dev/null +++ b/mingw-w64-python3.10/0043-builddir-fixes.patch @@ -0,0 +1,71 @@ +From 92456f734e8a9582549491c5f0f9d3c6e0929e5b Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?= + +Date: Thu, 17 Jun 2021 18:51:57 +0530 +Subject: [PATCH 043/N] builddir fixes +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Co-authored-by: Алексей +Co-authored-by: Christoph Reiter +Signed-off-by: Naveen M K +--- + Makefile.pre.in | 10 +++++----- + Programs/_freeze_importlib.c | 2 +- + 2 files changed, 6 insertions(+), 6 deletions(-) + +diff --git a/Makefile.pre.in b/Makefile.pre.in +index c6a312e..041baf7 100644 +--- a/Makefile.pre.in ++++ b/Makefile.pre.in +@@ -738,20 +738,20 @@ Programs/_testembed: Programs/_testembed.o $(LIBRARY_DEPS) + + Programs/_freeze_importlib.o: Programs/_freeze_importlib.c Makefile + +-Programs/_freeze_importlib: Programs/_freeze_importlib.o $(LIBRARY_OBJS_OMIT_FROZEN) ++Programs/_freeze_importlib$(EXE): Programs/_freeze_importlib.o $(LIBRARY_OBJS_OMIT_FROZEN) + $(LINKCC) $(PY_CORE_LDFLAGS) -o $@ Programs/_freeze_importlib.o $(LIBRARY_OBJS_OMIT_FROZEN) $(LIBS) $(MODLIBS) $(SYSLIBS) + + .PHONY: regen-importlib +-regen-importlib: Programs/_freeze_importlib ++regen-importlib: Programs/_freeze_importlib$(EXE) + # Regenerate Python/importlib_external.h + # from Lib/importlib/_bootstrap_external.py using _freeze_importlib +- ./Programs/_freeze_importlib importlib._bootstrap_external \ ++ ./Programs/_freeze_importlib$(EXE) importlib._bootstrap_external \ + $(srcdir)/Lib/importlib/_bootstrap_external.py \ + $(srcdir)/Python/importlib_external.h.new + $(UPDATE_FILE) $(srcdir)/Python/importlib_external.h $(srcdir)/Python/importlib_external.h.new + # Regenerate Python/importlib.h from Lib/importlib/_bootstrap.py + # using _freeze_importlib +- ./Programs/_freeze_importlib importlib._bootstrap \ ++ ./Programs/_freeze_importlib$(EXE) importlib._bootstrap \ + $(srcdir)/Lib/importlib/_bootstrap.py \ + $(srcdir)/Python/importlib.h.new + $(UPDATE_FILE) $(srcdir)/Python/importlib.h $(srcdir)/Python/importlib.h.new +@@ -1935,7 +1935,7 @@ clean-retain-profile: pycremoval + find build -name '*.py[co]' -exec rm -f {} ';' || true + -rm -f pybuilddir.txt + -rm -f Lib/lib2to3/*Grammar*.pickle +- -rm -f Programs/_testembed Programs/_freeze_importlib ++ -rm -f Programs/_testembed Programs/_freeze_importlib$(EXE) + -find build -type f -a ! -name '*.gc??' -exec rm -f {} ';' + -rm -f Include/pydtrace_probes.h + -rm -f profile-gen-stamp +diff --git a/Programs/_freeze_importlib.c b/Programs/_freeze_importlib.c +index 2e4ccbb..a8d5c31 100644 +--- a/Programs/_freeze_importlib.c ++++ b/Programs/_freeze_importlib.c +@@ -20,7 +20,7 @@ static const struct _frozen _PyImport_FrozenModules[] = { + {0, 0, 0} /* sentinel */ + }; + +-#ifndef MS_WINDOWS ++#ifndef _MSC_VER + /* On Windows, this links with the regular pythonXY.dll, so this variable comes + from frozen.obj. In the Makefile, frozen.o is not linked into this executable, + so we define the variable here. */ +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0044-msys-monkeypatch-os-system-via-sh-exe.patch b/mingw-w64-python3.10/0044-msys-monkeypatch-os-system-via-sh-exe.patch new file mode 100644 index 0000000000..02d8377f1c --- /dev/null +++ b/mingw-w64-python3.10/0044-msys-monkeypatch-os-system-via-sh-exe.patch @@ -0,0 +1,40 @@ +From 4a690d443590f6e37801d13f4e70820f2d625466 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?= + +Date: Thu, 17 Jun 2021 18:51:57 +0530 +Subject: [PATCH 044/N] msys monkeypatch os system via sh exe +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Co-authored-by: Алексей +Signed-off-by: Naveen M K +--- + setup.py | 11 +++++++++++ + 1 file changed, 11 insertions(+) + +diff --git a/setup.py b/setup.py +index b406cb8..ce28bc1 100644 +--- a/setup.py ++++ b/setup.py +@@ -79,6 +79,17 @@ def get_platform(): + return sys.platform + + ++# On MSYS, os.system needs to be wrapped with sh.exe ++# as otherwise all the io redirection will fail. ++# Arguably, this could happen inside the real os.system ++# rather than this monkey patch. ++if sys.platform == "win32" and "MSYSTEM" in os.environ: ++ os_system = os.system ++ def msys_system(command): ++ command_in_sh = 'sh.exe -c "%s"' % command.replace("\\", "\\\\") ++ return os_system(command_in_sh) ++ os.system = msys_system ++ + CROSS_COMPILING = ("_PYTHON_HOST_PLATFORM" in os.environ) + HOST_PLATFORM = get_platform() + MS_WINDOWS = (HOST_PLATFORM == 'win32') +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0045-msys-replace-slashes-used-in-io-redirection.patch b/mingw-w64-python3.10/0045-msys-replace-slashes-used-in-io-redirection.patch new file mode 100644 index 0000000000..30c3dbe623 --- /dev/null +++ b/mingw-w64-python3.10/0045-msys-replace-slashes-used-in-io-redirection.patch @@ -0,0 +1,74 @@ +From 4859bff1e3031582992bfe5bf87861b3cf3db536 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?= + +Date: Thu, 17 Jun 2021 18:51:58 +0530 +Subject: [PATCH 045/N] msys replace slashes used in io redirection +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Co-authored-by: Алексей +Co-authored-by: Christoph Reiter +Signed-off-by: Naveen M K +--- + setup.py | 12 ++++++------ + 1 file changed, 6 insertions(+), 6 deletions(-) + +diff --git a/setup.py b/setup.py +index ce28bc1..bb6e208 100644 +--- a/setup.py ++++ b/setup.py +@@ -677,7 +677,7 @@ class PyBuildExt(build_ext): + # Debian/Ubuntu multiarch support. + # https://wiki.ubuntu.com/MultiarchSpec + cc = sysconfig.get_config_var('CC') +- tmpfile = os.path.join(self.build_temp, 'multiarch') ++ tmpfile = os.path.join(self.build_temp, 'multiarch').replace('\\','/') + if not os.path.exists(self.build_temp): + os.makedirs(self.build_temp) + ret = run_command( +@@ -702,7 +702,7 @@ class PyBuildExt(build_ext): + opt = '' + if CROSS_COMPILING: + opt = '-t' + sysconfig.get_config_var('HOST_GNU_TYPE') +- tmpfile = os.path.join(self.build_temp, 'multiarch') ++ tmpfile = os.path.join(self.build_temp, 'multiarch').replace('\\','/') + if not os.path.exists(self.build_temp): + os.makedirs(self.build_temp) + ret = run_command( +@@ -766,7 +766,7 @@ class PyBuildExt(build_ext): + + def add_cross_compiling_paths(self): + cc = sysconfig.get_config_var('CC') +- tmpfile = os.path.join(self.build_temp, 'ccpaths') ++ tmpfile = os.path.join(self.build_temp, 'ccpaths').replace('\\','/') + if not os.path.exists(self.build_temp): + os.makedirs(self.build_temp) + ret = run_command('%s -E -v - %s 1>/dev/null' % (cc, tmpfile)) +@@ -1085,7 +1085,7 @@ class PyBuildExt(build_ext): + readline_termcap_library = "" + curses_library = "" + # Cannot use os.popen here in py3k. +- tmpfile = os.path.join(self.build_temp, 'readline_termcap_lib') ++ tmpfile = os.path.join(self.build_temp, 'readline_termcap_lib').replace('\\','/') + if not os.path.exists(self.build_temp): + os.makedirs(self.build_temp) + # Determine if readline is already linked against curses or tinfo. +@@ -2106,12 +2106,12 @@ class PyBuildExt(build_ext): + cflags = sysconfig.get_config_vars('CFLAGS')[0] + archs = re.findall(r'-arch\s+(\w+)', cflags) + +- tmpfile = os.path.join(self.build_temp, 'tk.arch') ++ tmpfile = os.path.join(self.build_temp, 'tk.arch').replace('\\','/') + if not os.path.exists(self.build_temp): + os.makedirs(self.build_temp) + + run_command( +- "file {}/Tk.framework/Tk | grep 'for architecture' > {}".format(F, tmpfile) ++ "file {}/Tk.framework/Tk | grep 'for architecture' > {}".format(F, tmpfile).replace('\\','/') + ) + with open(tmpfile) as fp: + detected_archs = [] +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0046-remove_path_max.default.patch b/mingw-w64-python3.10/0046-remove_path_max.default.patch new file mode 100644 index 0000000000..185e8fa429 --- /dev/null +++ b/mingw-w64-python3.10/0046-remove_path_max.default.patch @@ -0,0 +1,30 @@ +From c8c429f02b796ace035e5bb47837c4208334bf99 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?= + +Date: Thu, 17 Jun 2021 18:51:59 +0530 +Subject: [PATCH 046/N] remove_path_max.default +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Co-authored-by: Алексей +Signed-off-by: Naveen M K +--- + Include/osdefs.h | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/Include/osdefs.h b/Include/osdefs.h +index 3243944..99d4977 100644 +--- a/Include/osdefs.h ++++ b/Include/osdefs.h +@@ -10,7 +10,6 @@ extern "C" { + #ifdef MS_WINDOWS + #define SEP L'\\' + #define ALTSEP L'/' +-#define MAXPATHLEN 256 + #define DELIM L';' + #endif + +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0047-dont-link-with-gettext.patch b/mingw-w64-python3.10/0047-dont-link-with-gettext.patch new file mode 100644 index 0000000000..b46b24ac34 --- /dev/null +++ b/mingw-w64-python3.10/0047-dont-link-with-gettext.patch @@ -0,0 +1,61 @@ +From f84ed3dee09299ecb4e1760bda7411cc7c2dc5ff Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?= + +Date: Thu, 17 Jun 2021 18:52:00 +0530 +Subject: [PATCH 047/N] dont link with gettext +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Co-authored-by: Алексей +Signed-off-by: Naveen M K +--- + Modules/_localemodule.c | 7 +++++++ + configure.ac | 9 +++++++++ + 2 files changed, 16 insertions(+) + +diff --git a/Modules/_localemodule.c b/Modules/_localemodule.c +index 564f559..71c8412 100644 +--- a/Modules/_localemodule.c ++++ b/Modules/_localemodule.c +@@ -12,6 +12,13 @@ This software comes with no warranty. Use at your own risk. + #define PY_SSIZE_T_CLEAN + #include "Python.h" + #include "pycore_fileutils.h" ++#ifdef __MINGW32__ ++/* The header libintl.h and library libintl may exist on mingw host. ++ * To be compatible with MSVC build we has to undef some defines. ++ */ ++#undef HAVE_LIBINTL_H ++#undef HAVE_BIND_TEXTDOMAIN_CODESET ++#endif + + #include + #include +diff --git a/configure.ac b/configure.ac +index cb06125..a21a239 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -3142,10 +3142,19 @@ AC_SEARCH_LIBS(sem_init, pthread rt posix4) + fi + + # check if we need libintl for locale functions ++case $host in ++ *-*-mingw*) ++ dnl Native windows build don't use libintl (see _localemodule.c). ++ dnl Also we don't like setup.py to add "intl" library to the list ++ dnl when build _locale module. ++ ;; ++ *) + AC_CHECK_LIB(intl, textdomain, + [AC_DEFINE(WITH_LIBINTL, 1, + [Define to 1 if libintl is needed for locale functions.]) + LIBS="-lintl $LIBS"]) ++ ;; ++esac + + # checks for system dependent C++ extensions support + case "$ac_sys_system" in +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0048-ctypes-python-dll.patch b/mingw-w64-python3.10/0048-ctypes-python-dll.patch new file mode 100644 index 0000000000..e0938bdc2c --- /dev/null +++ b/mingw-w64-python3.10/0048-ctypes-python-dll.patch @@ -0,0 +1,34 @@ +From b5185ce931450f946370b2823d31caba64cb78a7 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?= + +Date: Thu, 17 Jun 2021 18:52:01 +0530 +Subject: [PATCH 048/N] ctypes python dll +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Co-authored-by: Алексей +Co-authored-by: Christoph Reiter +Signed-off-by: Naveen M K +--- + Lib/ctypes/__init__.py | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +diff --git a/Lib/ctypes/__init__.py b/Lib/ctypes/__init__.py +index 4afa4eb..2fe2eec 100644 +--- a/Lib/ctypes/__init__.py ++++ b/Lib/ctypes/__init__.py +@@ -456,7 +456,9 @@ class LibraryLoader(object): + cdll = LibraryLoader(CDLL) + pydll = LibraryLoader(PyDLL) + +-if _os.name == "nt": ++if _os.name == "nt" and _sys.version.find('GCC') >= 0: ++ pythonapi = PyDLL("libpython%d.%d%s.dll" % (_sys.version_info[:2] + (_sys.abiflags,)), None) ++elif _os.name == "nt": + pythonapi = PyDLL("python dll", None, _sys.dllhandle) + elif _sys.platform == "cygwin": + pythonapi = PyDLL("libpython%d.%d.dll" % _sys.version_info[:2]) +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0049-gdbm-module-includes.patch b/mingw-w64-python3.10/0049-gdbm-module-includes.patch new file mode 100644 index 0000000000..eb40f022fb --- /dev/null +++ b/mingw-w64-python3.10/0049-gdbm-module-includes.patch @@ -0,0 +1,31 @@ +From b0cc025c9eb0dbeff70c0b4e8cec659a2c262af4 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?= + +Date: Thu, 17 Jun 2021 18:52:02 +0530 +Subject: [PATCH 049/N] gdbm module includes +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Co-authored-by: Алексей +Signed-off-by: Naveen M K +--- + Modules/_gdbmmodule.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/Modules/_gdbmmodule.c b/Modules/_gdbmmodule.c +index a7fb6a3..98f2c09 100644 +--- a/Modules/_gdbmmodule.c ++++ b/Modules/_gdbmmodule.c +@@ -11,7 +11,7 @@ + #include + #include "gdbm.h" + +-#if defined(WIN32) && !defined(__CYGWIN__) ++#if defined(WIN32) && !defined(__CYGWIN__) && !defined(__MINGW32__) + #include "gdbmerrno.h" + extern const char * gdbm_strerror(gdbm_error); + #endif +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0050-use-gnu_printf-in-format.patch b/mingw-w64-python3.10/0050-use-gnu_printf-in-format.patch new file mode 100644 index 0000000000..cae3973b69 --- /dev/null +++ b/mingw-w64-python3.10/0050-use-gnu_printf-in-format.patch @@ -0,0 +1,86 @@ +From 5a2085bcb4f7bf42a7eca005025d5095b44907e9 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?= + +Date: Thu, 17 Jun 2021 18:52:03 +0530 +Subject: [PATCH 050/N] use gnu_printf in format +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Co-authored-by: Алексей +Signed-off-by: Naveen M K +--- + Include/bytesobject.h | 4 ++-- + Include/pyerrors.h | 4 ++-- + Include/pyport.h | 6 ++++++ + Include/sysmodule.h | 4 ++-- + 4 files changed, 12 insertions(+), 6 deletions(-) + +diff --git a/Include/bytesobject.h b/Include/bytesobject.h +index 39c241a..902d4a1 100644 +--- a/Include/bytesobject.h ++++ b/Include/bytesobject.h +@@ -35,9 +35,9 @@ PyAPI_FUNC(PyObject *) PyBytes_FromStringAndSize(const char *, Py_ssize_t); + PyAPI_FUNC(PyObject *) PyBytes_FromString(const char *); + PyAPI_FUNC(PyObject *) PyBytes_FromObject(PyObject *); + PyAPI_FUNC(PyObject *) PyBytes_FromFormatV(const char*, va_list) +- Py_GCC_ATTRIBUTE((format(printf, 1, 0))); ++ Py_PRINTF(1, 0); + PyAPI_FUNC(PyObject *) PyBytes_FromFormat(const char*, ...) +- Py_GCC_ATTRIBUTE((format(printf, 1, 2))); ++ Py_PRINTF(1, 2); + PyAPI_FUNC(Py_ssize_t) PyBytes_Size(PyObject *); + PyAPI_FUNC(char *) PyBytes_AsString(PyObject *); + PyAPI_FUNC(PyObject *) PyBytes_Repr(PyObject *, int); +diff --git a/Include/pyerrors.h b/Include/pyerrors.h +index f5d1c71..a532821 100644 +--- a/Include/pyerrors.h ++++ b/Include/pyerrors.h +@@ -308,9 +308,9 @@ PyAPI_FUNC(int) PyUnicodeTranslateError_SetReason( + ); + + PyAPI_FUNC(int) PyOS_snprintf(char *str, size_t size, const char *format, ...) +- Py_GCC_ATTRIBUTE((format(printf, 3, 4))); ++ Py_PRINTF(3, 4); + PyAPI_FUNC(int) PyOS_vsnprintf(char *str, size_t size, const char *format, va_list va) +- Py_GCC_ATTRIBUTE((format(printf, 3, 0))); ++ Py_PRINTF(3, 0); + + #ifndef Py_LIMITED_API + # define Py_CPYTHON_ERRORS_H +diff --git a/Include/pyport.h b/Include/pyport.h +index dedc3b8..78f7d53 100644 +--- a/Include/pyport.h ++++ b/Include/pyport.h +@@ -803,6 +803,12 @@ extern char * _getpty(int *, int, mode_t, int); + + #define Py_VA_COPY va_copy + ++#if defined(__GNUC__) && ((__GNUC__ == 4 && __GNUC_MINOR__>= 4) || __GNUC__ > 4) ++# define Py_PRINTF(X,Y) Py_GCC_ATTRIBUTE((format(gnu_printf,X,Y))) ++#else ++# define Py_PRINTF(X,Y) Py_GCC_ATTRIBUTE((format(printf,X,Y))) ++#endif ++ + /* + * Convenient macros to deal with endianness of the platform. WORDS_BIGENDIAN is + * detected by configure and defined in pyconfig.h. The code in pyconfig.h +diff --git a/Include/sysmodule.h b/Include/sysmodule.h +index 670e5d2..d582963 100644 +--- a/Include/sysmodule.h ++++ b/Include/sysmodule.h +@@ -15,9 +15,9 @@ PyAPI_FUNC(void) PySys_SetArgvEx(int, wchar_t **, int); + PyAPI_FUNC(void) PySys_SetPath(const wchar_t *); + + PyAPI_FUNC(void) PySys_WriteStdout(const char *format, ...) +- Py_GCC_ATTRIBUTE((format(printf, 1, 2))); ++ Py_PRINTF(1, 2); + PyAPI_FUNC(void) PySys_WriteStderr(const char *format, ...) +- Py_GCC_ATTRIBUTE((format(printf, 1, 2))); ++ Py_PRINTF(1, 2); + PyAPI_FUNC(void) PySys_FormatStdout(const char *format, ...); + PyAPI_FUNC(void) PySys_FormatStderr(const char *format, ...); + +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0051-mingw-fix-ssl-dont-use-enum_certificates.patch b/mingw-w64-python3.10/0051-mingw-fix-ssl-dont-use-enum_certificates.patch new file mode 100644 index 0000000000..b93613a610 --- /dev/null +++ b/mingw-w64-python3.10/0051-mingw-fix-ssl-dont-use-enum_certificates.patch @@ -0,0 +1,40 @@ +From fea589f9c476ce4eab104b5feb845e0829975109 Mon Sep 17 00:00:00 2001 +From: Ray Donnelly +Date: Thu, 17 Jun 2021 18:52:03 +0530 +Subject: [PATCH 051/N] mingw fix ssl dont use enum_certificates +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Co-authored-by: Алексей +Co-authored-by: Christoph Reiter +Signed-off-by: Naveen M K +--- + Lib/ssl.py | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/Lib/ssl.py b/Lib/ssl.py +index 181065d..752d1e4 100644 +--- a/Lib/ssl.py ++++ b/Lib/ssl.py +@@ -249,7 +249,7 @@ class _TLSMessageType(_IntEnum): + CHANGE_CIPHER_SPEC = 0x0101 + + +-if sys.platform == "win32": ++if sys.platform == "win32" and sys.version.find("GCC") == -1: + from _ssl import enum_certificates, enum_crls + + from socket import socket, SOCK_STREAM, create_connection +@@ -586,7 +586,7 @@ class SSLContext(_SSLContext): + def load_default_certs(self, purpose=Purpose.SERVER_AUTH): + if not isinstance(purpose, _ASN1Object): + raise TypeError(purpose) +- if sys.platform == "win32": ++ if sys.platform == "win32" and sys.version.find("GCC") == -1: + for storename in self._windows_cert_stores: + self._load_windows_store_certs(storename, purpose) + self.set_default_verify_paths() +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0052-fix-using-dllhandle-and-winver-mingw.patch b/mingw-w64-python3.10/0052-fix-using-dllhandle-and-winver-mingw.patch new file mode 100644 index 0000000000..4ee57dc646 --- /dev/null +++ b/mingw-w64-python3.10/0052-fix-using-dllhandle-and-winver-mingw.patch @@ -0,0 +1,40 @@ +From dad1af4c449d7f8ac7f6d52e6b763ec56aae89b5 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?= + +Date: Thu, 17 Jun 2021 18:52:06 +0530 +Subject: [PATCH 052/N] fix using dllhandle and winver mingw +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Co-authored-by: Алексей +Signed-off-by: Naveen M K +--- + Python/sysmodule.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/Python/sysmodule.c b/Python/sysmodule.c +index ac49f78..d91a606 100644 +--- a/Python/sysmodule.c ++++ b/Python/sysmodule.c +@@ -38,7 +38,7 @@ Data members: + #include + #endif /* MS_WINDOWS */ + +-#ifdef MS_COREDLL ++#if defined(MS_WINDOWS) && defined(Py_ENABLE_SHARED) + extern void *PyWin_DLLhModule; + /* A string loaded from the DLL at startup: */ + extern const char *PyWin_DLLVersionString; +@@ -2801,7 +2801,7 @@ _PySys_InitCore(PyThreadState *tstate, PyObject *sysdict) + SET_SYS_FROM_STRING("byteorder", "little"); + #endif + +-#ifdef MS_COREDLL ++#if defined(MS_WINDOWS) && defined(Py_ENABLE_SHARED) + SET_SYS("dllhandle", PyLong_FromVoidPtr(PyWin_DLLhModule)); + SET_SYS_FROM_STRING("winver", PyWin_DLLVersionString); + #endif +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0053-Add-AMD64-to-sys-config-so-msvccompiler-get_build_ve.patch b/mingw-w64-python3.10/0053-Add-AMD64-to-sys-config-so-msvccompiler-get_build_ve.patch new file mode 100644 index 0000000000..75ed862563 --- /dev/null +++ b/mingw-w64-python3.10/0053-Add-AMD64-to-sys-config-so-msvccompiler-get_build_ve.patch @@ -0,0 +1,43 @@ +From 82b13bb5153b627bb1acfe3c928ef072c2ab9cf5 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?= + +Date: Thu, 17 Jun 2021 18:52:07 +0530 +Subject: [PATCH 053/N] Add AMD64 to sys config so msvccompiler + get_build_version works + +Signed-off-by: Naveen M K +--- + Python/getcompiler.c | 17 ++++++++++++++++- + 1 file changed, 16 insertions(+), 1 deletion(-) + +diff --git a/Python/getcompiler.c b/Python/getcompiler.c +index a5d2623..3e31c80 100644 +--- a/Python/getcompiler.c ++++ b/Python/getcompiler.c +@@ -10,7 +10,22 @@ + #if defined(__clang__) + #define COMPILER "[Clang " __clang_version__ "]" + #elif defined(__GNUC__) +-#define COMPILER "[GCC " __VERSION__ "]" ++/* To not break compatibility with things that determine ++ CPU arch by calling get_build_version in msvccompiler.py ++ (such as NumPy) add "32 bit" or "64 bit (AMD64)" on Windows ++ and also use a space as a separator rather than a newline. */ ++#if defined(_WIN32) ++#define COMP_SEP " " ++#if defined(__x86_64__) ++#define ARCH_SUFFIX " 64 bit (AMD64)" ++#else ++#define ARCH_SUFFIX " 32 bit" ++#endif ++#else ++#define COMP_SEP "\n" ++#define ARCH_SUFFIX "" ++#endif ++#define COMPILER COMP_SEP "[GCC " __VERSION__ ARCH_SUFFIX "]" + // Generic fallbacks. + #elif defined(__cplusplus) + #define COMPILER "[C++]" +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0054-MINGW-link-with-additional-library.patch b/mingw-w64-python3.10/0054-MINGW-link-with-additional-library.patch new file mode 100644 index 0000000000..79e57df0fd --- /dev/null +++ b/mingw-w64-python3.10/0054-MINGW-link-with-additional-library.patch @@ -0,0 +1,34 @@ +From 5186de5e482581e020c7d4d0c1eb52ea5c424d1d Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?= + +Date: Thu, 17 Jun 2021 18:52:08 +0530 +Subject: [PATCH 054/N] MINGW link with additional library + +Signed-off-by: Naveen M K +--- + configure.ac | 9 +++++++++ + 1 file changed, 9 insertions(+) + +diff --git a/configure.ac b/configure.ac +index a21a239..4f014f9 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -5907,6 +5907,15 @@ for dir in $SRCDIRS; do + done + AC_MSG_RESULT(done) + ++# For mingw build need additional library for linking ++case $host in ++ *-*-mingw*) ++ LIBS="$LIBS -lversion -lshlwapi -lpathcch" ++ ;; ++ *) ++ ;; ++esac ++ + # Availability of -O2: + AC_MSG_CHECKING(for -O2) + saved_cflags="$CFLAGS" +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0055-install-msilib.patch b/mingw-w64-python3.10/0055-install-msilib.patch new file mode 100644 index 0000000000..1612ba5441 --- /dev/null +++ b/mingw-w64-python3.10/0055-install-msilib.patch @@ -0,0 +1,31 @@ +From 9b7ab0570d8347d33558619a7ab643a2bc3b3ea3 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Sa=C3=BAl=20Ibarra=20Corretg=C3=A9?= +Date: Thu, 17 Jun 2021 18:52:09 +0530 +Subject: [PATCH 055/N] install msilib +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Co-authored-by: Алексей +Co-authored-by: Christoph Reiter +Co-authored-by: Ray Donnelly +Signed-off-by: Naveen M K +--- + Makefile.pre.in | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/Makefile.pre.in b/Makefile.pre.in +index 041baf7..703f1d4 100644 +--- a/Makefile.pre.in ++++ b/Makefile.pre.in +@@ -1460,6 +1460,7 @@ LIBSUBDIRS= asyncio \ + sqlite3 \ + tkinter \ + turtledemo \ ++ msilib \ + unittest \ + urllib \ + venv venv/scripts venv/scripts/common venv/scripts/posix \ +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0056-fix-signal-module-build.patch b/mingw-w64-python3.10/0056-fix-signal-module-build.patch new file mode 100644 index 0000000000..b246a7093f --- /dev/null +++ b/mingw-w64-python3.10/0056-fix-signal-module-build.patch @@ -0,0 +1,30 @@ +From d4cf88fdd752072679c4c5f4b00d4536bb40b24f Mon Sep 17 00:00:00 2001 +From: Christoph Reiter +Date: Thu, 17 Jun 2021 18:52:10 +0530 +Subject: [PATCH 056/N] fix signal module build +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Co-authored-by: Алексей +Signed-off-by: Naveen M K +--- + Modules/Setup | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/Modules/Setup b/Modules/Setup +index e765e05..ecd64fe 100644 +--- a/Modules/Setup ++++ b/Modules/Setup +@@ -111,7 +111,7 @@ _collections _collectionsmodule.c # Container types + _abc -DPy_BUILD_CORE_BUILTIN _abc.c # Abstract base classes + itertools itertoolsmodule.c # Functions creating iterators for efficient looping + atexit atexitmodule.c # Register functions to be run at interpreter-shutdown +-_signal -DPy_BUILD_CORE_BUILTIN -I$(srcdir)/Include/internal signalmodule.c ++_signal -DPy_BUILD_CORE_BUILTIN -I$(srcdir)/Include/internal signalmodule.c -lws2_32 + _stat _stat.c # stat.h interface + time -DPy_BUILD_CORE_BUILTIN -I$(srcdir)/Include/internal timemodule.c # -lm # time operations and variables + _thread -DPy_BUILD_CORE_BUILTIN -I$(srcdir)/Include/internal _threadmodule.c # low-level threading interface +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0057-build-build-winconsoleio-and-_testconsole.patch b/mingw-w64-python3.10/0057-build-build-winconsoleio-and-_testconsole.patch new file mode 100644 index 0000000000..0baf522698 --- /dev/null +++ b/mingw-w64-python3.10/0057-build-build-winconsoleio-and-_testconsole.patch @@ -0,0 +1,45 @@ +From f6c2060b4af14ff8245c513afe8952568759e04a Mon Sep 17 00:00:00 2001 +From: Christoph Reiter +Date: Thu, 17 Jun 2021 18:52:11 +0530 +Subject: [PATCH 057/N] build: build winconsoleio and _testconsole +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Co-authored-by: Алексей +Signed-off-by: Naveen M K +--- + Modules/Setup | 2 +- + setup.py | 3 +++ + 2 files changed, 4 insertions(+), 1 deletion(-) + +diff --git a/Modules/Setup b/Modules/Setup +index ecd64fe..3097db6 100644 +--- a/Modules/Setup ++++ b/Modules/Setup +@@ -120,7 +120,7 @@ _thread -DPy_BUILD_CORE_BUILTIN -I$(srcdir)/Include/internal _threadmodule.c # l + _locale -DPy_BUILD_CORE_BUILTIN _localemodule.c # -lintl + + # Standard I/O baseline +-_io -DPy_BUILD_CORE_BUILTIN -I$(srcdir)/Include/internal -I$(srcdir)/Modules/_io _io/_iomodule.c _io/iobase.c _io/fileio.c _io/bytesio.c _io/bufferedio.c _io/textio.c _io/stringio.c ++_io -DPy_BUILD_CORE_BUILTIN -I$(srcdir)/Include/internal -I$(srcdir)/Modules/_io _io/_iomodule.c _io/iobase.c _io/fileio.c _io/bytesio.c _io/bufferedio.c _io/textio.c _io/stringio.c _io/winconsoleio.c + + # faulthandler module + faulthandler faulthandler.c +diff --git a/setup.py b/setup.py +index bb6e208..2e504ce 100644 +--- a/setup.py ++++ b/setup.py +@@ -1080,6 +1080,9 @@ class PyBuildExt(build_ext): + ['_xxtestfuzz/_xxtestfuzz.c', + '_xxtestfuzz/fuzzer.c'])) + ++ if MS_WINDOWS: ++ self.add(Extension('_testconsole', ['../PC/_testconsole.c'])) ++ + def detect_readline_curses(self): + # readline + readline_termcap_library = "" +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0058-expose-sem_unlink.patch b/mingw-w64-python3.10/0058-expose-sem_unlink.patch new file mode 100644 index 0000000000..9fff133a45 --- /dev/null +++ b/mingw-w64-python3.10/0058-expose-sem_unlink.patch @@ -0,0 +1,30 @@ +From c3feeee17a1f03ed410680c443fcd6d538779a5b Mon Sep 17 00:00:00 2001 +From: Christoph Reiter +Date: Thu, 17 Jun 2021 18:52:12 +0530 +Subject: [PATCH 058/N] expose sem_unlink +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Co-authored-by: Алексей +Signed-off-by: Naveen M K +--- + Modules/_multiprocessing/multiprocessing.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/Modules/_multiprocessing/multiprocessing.c b/Modules/_multiprocessing/multiprocessing.c +index bec2351..72a34d0 100644 +--- a/Modules/_multiprocessing/multiprocessing.c ++++ b/Modules/_multiprocessing/multiprocessing.c +@@ -172,7 +172,7 @@ static PyMethodDef module_methods[] = { + _MULTIPROCESSING_RECV_METHODDEF + _MULTIPROCESSING_SEND_METHODDEF + #endif +-#if !defined(POSIX_SEMAPHORES_NOT_ENABLED) && !defined(__ANDROID__) ++#if defined(MS_WINDOWS) || (!defined(POSIX_SEMAPHORES_NOT_ENABLED) && !defined(__ANDROID__)) + _MULTIPROCESSING_SEM_UNLINK_METHODDEF + #endif + {NULL} +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0059-cygpty-isatty.patch b/mingw-w64-python3.10/0059-cygpty-isatty.patch new file mode 100644 index 0000000000..fddafe60c5 --- /dev/null +++ b/mingw-w64-python3.10/0059-cygpty-isatty.patch @@ -0,0 +1,462 @@ +From 0f9064a47714284e3c11d8a1edad6cae9fcfa0d0 Mon Sep 17 00:00:00 2001 +From: Christoph Reiter +Date: Thu, 17 Jun 2021 18:52:14 +0530 +Subject: [PATCH 059/N] cygpty isatty +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Co-authored-by: Алексей +Signed-off-by: Naveen M K +--- + Include/iscygpty.h | 41 ++++++++++ + Makefile.pre.in | 2 + + Modules/_io/fileio.c | 3 +- + Modules/main.c | 3 +- + Modules/posixmodule.c | 3 +- + Objects/fileobject.c | 3 +- + Python/bltinmodule.c | 5 +- + Python/fileutils.c | 3 +- + Python/frozenmain.c | 3 +- + Python/iscygpty.c | 185 ++++++++++++++++++++++++++++++++++++++++++ + Python/pylifecycle.c | 3 +- + 11 files changed, 245 insertions(+), 9 deletions(-) + create mode 100644 Include/iscygpty.h + create mode 100644 Python/iscygpty.c + +diff --git a/Include/iscygpty.h b/Include/iscygpty.h +new file mode 100644 +index 0000000..82fd0af +--- /dev/null ++++ b/Include/iscygpty.h +@@ -0,0 +1,41 @@ ++/* ++ * iscygpty.h -- part of ptycheck ++ * https://github.com/k-takata/ptycheck ++ * ++ * Copyright (c) 2015-2017 K.Takata ++ * ++ * You can redistribute it and/or modify it under the terms of either ++ * the MIT license (as described below) or the Vim license. ++ * ++ * 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. ++ */ ++ ++#ifndef _ISCYGPTY_H ++#define _ISCYGPTY_H ++ ++#ifdef _WIN32 ++int is_cygpty(int fd); ++int is_cygpty_used(void); ++#else ++#define is_cygpty(fd) 0 ++#define is_cygpty_used() 0 ++#endif ++ ++#endif /* _ISCYGPTY_H */ +diff --git a/Makefile.pre.in b/Makefile.pre.in +index 703f1d4..b698668 100644 +--- a/Makefile.pre.in ++++ b/Makefile.pre.in +@@ -369,6 +369,7 @@ PYTHON_OBJS= \ + Python/import.o \ + Python/importdl.o \ + Python/initconfig.o \ ++ Python/iscygpty.o \ + Python/marshal.o \ + Python/modsupport.o \ + Python/mysnprintf.o \ +@@ -1073,6 +1074,7 @@ PYTHON_HEADERS= \ + $(srcdir)/Include/import.h \ + $(srcdir)/Include/interpreteridobject.h \ + $(srcdir)/Include/intrcheck.h \ ++ $(srcdir)/Include/iscygpty.h \ + $(srcdir)/Include/iterobject.h \ + $(srcdir)/Include/listobject.h \ + $(srcdir)/Include/longintrepr.h \ +diff --git a/Modules/_io/fileio.c b/Modules/_io/fileio.c +index b9856b3..66932d7 100644 +--- a/Modules/_io/fileio.c ++++ b/Modules/_io/fileio.c +@@ -19,6 +19,7 @@ + #endif + #include /* For offsetof */ + #include "_iomodule.h" ++#include "iscygpty.h" + + /* + * Known likely problems: +@@ -1127,7 +1128,7 @@ _io_FileIO_isatty_impl(fileio *self) + return err_closed(); + Py_BEGIN_ALLOW_THREADS + _Py_BEGIN_SUPPRESS_IPH +- res = isatty(self->fd); ++ res = isatty(self->fd) || is_cygpty(self->fd); + _Py_END_SUPPRESS_IPH + Py_END_ALLOW_THREADS + return PyBool_FromLong(res); +diff --git a/Modules/main.c b/Modules/main.c +index 2684d23..9ee34a3 100644 +--- a/Modules/main.c ++++ b/Modules/main.c +@@ -6,6 +6,7 @@ + #include "pycore_pathconfig.h" // _PyPathConfig_ComputeSysPath0() + #include "pycore_pylifecycle.h" // _Py_PreInitializeFromPyArgv() + #include "pycore_pystate.h" // _PyInterpreterState_GET() ++#include "iscygpty.h" + + /* Includes for exit_sigint() */ + #include // perror() +@@ -91,7 +92,7 @@ static inline int config_run_code(const PyConfig *config) + static int + stdin_is_interactive(const PyConfig *config) + { +- return (isatty(fileno(stdin)) || config->interactive); ++ return (isatty(fileno(stdin)) || config->interactive || is_cygpty(fileno(stdin))); + } + + +diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c +index 14b60f0..7e9c1c6 100644 +--- a/Modules/posixmodule.c ++++ b/Modules/posixmodule.c +@@ -42,6 +42,7 @@ + #ifdef __ANDROID__ + # undef HAVE_FACCESSAT + #endif ++#include "iscygpty.h" + + #include /* needed for ctermid() */ + +@@ -10086,7 +10087,7 @@ os_isatty_impl(PyObject *module, int fd) + { + int return_value; + _Py_BEGIN_SUPPRESS_IPH +- return_value = isatty(fd); ++ return_value = isatty(fd) || is_cygpty(fd); + _Py_END_SUPPRESS_IPH + return return_value; + } +diff --git a/Objects/fileobject.c b/Objects/fileobject.c +index 5a2816f..4fdb3c6 100644 +--- a/Objects/fileobject.c ++++ b/Objects/fileobject.c +@@ -2,6 +2,7 @@ + + #define PY_SSIZE_T_CLEAN + #include "Python.h" ++#include "iscygpty.h" + #include "pycore_runtime.h" // _PyRuntime + + #if defined(HAVE_GETC_UNLOCKED) && !defined(_Py_MEMORY_SANITIZER) +@@ -423,7 +424,7 @@ stdprinter_isatty(PyStdPrinter_Object *self, PyObject *Py_UNUSED(ignored)) + } + + Py_BEGIN_ALLOW_THREADS +- res = isatty(self->fd); ++ res = isatty(self->fd) || is_cygpty(self->fd); + Py_END_ALLOW_THREADS + + return PyBool_FromLong(res); +diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c +index b0162e5..af694f3 100644 +--- a/Python/bltinmodule.c ++++ b/Python/bltinmodule.c +@@ -1,6 +1,7 @@ + /* Built-in functions */ + + #include "Python.h" ++#include "iscygpty.h" + #include + #include "pycore_ast.h" // _PyAST_Validate() + #include "pycore_compile.h" // _PyAST_Compile() +@@ -2098,7 +2099,7 @@ builtin_input_impl(PyObject *module, PyObject *prompt) + Py_DECREF(tmp); + if (fd < 0 && PyErr_Occurred()) + return NULL; +- tty = fd == fileno(stdin) && isatty(fd); ++ tty = fd == fileno(stdin) && (isatty(fd) || is_cygpty(fd)); + } + if (tty) { + tmp = _PyObject_CallMethodIdNoArgs(fout, &PyId_fileno); +@@ -2111,7 +2112,7 @@ builtin_input_impl(PyObject *module, PyObject *prompt) + Py_DECREF(tmp); + if (fd < 0 && PyErr_Occurred()) + return NULL; +- tty = fd == fileno(stdout) && isatty(fd); ++ tty = fd == fileno(stdout) && (isatty(fd) || is_cygpty(fd)); + } + } + +diff --git a/Python/fileutils.c b/Python/fileutils.c +index 66f748d..8ea5f87 100644 +--- a/Python/fileutils.c ++++ b/Python/fileutils.c +@@ -1,4 +1,5 @@ + #include "Python.h" ++#include "iscygpty.h" + #include "pycore_fileutils.h" // fileutils definitions + #include "pycore_runtime.h" // _PyRuntime + #include "osdefs.h" // SEP +@@ -68,7 +69,7 @@ _Py_device_encoding(int fd) + { + int valid; + _Py_BEGIN_SUPPRESS_IPH +- valid = isatty(fd); ++ valid = isatty(fd) || is_cygpty(fd); + _Py_END_SUPPRESS_IPH + if (!valid) + Py_RETURN_NONE; +diff --git a/Python/frozenmain.c b/Python/frozenmain.c +index dd04d60..6607762 100644 +--- a/Python/frozenmain.c ++++ b/Python/frozenmain.c +@@ -4,6 +4,7 @@ + #include "Python.h" + #include "pycore_runtime.h" // _PyRuntime_Initialize() + #include ++#include "iscygpty.h" + + #ifdef MS_WINDOWS + extern void PyWinFreeze_ExeInit(void); +@@ -107,7 +108,7 @@ Py_FrozenMain(int argc, char **argv) + else + sts = 0; + +- if (inspect && isatty((int)fileno(stdin))) ++ if (inspect && (isatty((int)fileno(stdin)) || is_cygpty((int)fileno(stdin)))) + sts = PyRun_AnyFile(stdin, "") != 0; + + #ifdef MS_WINDOWS +diff --git a/Python/iscygpty.c b/Python/iscygpty.c +new file mode 100644 +index 0000000..722f88f +--- /dev/null ++++ b/Python/iscygpty.c +@@ -0,0 +1,185 @@ ++/* ++ * iscygpty.c -- part of ptycheck ++ * https://github.com/k-takata/ptycheck ++ * ++ * Copyright (c) 2015-2017 K.Takata ++ * ++ * You can redistribute it and/or modify it under the terms of either ++ * the MIT license (as described below) or the Vim license. ++ * ++ * 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. ++ */ ++ ++#ifdef _WIN32 ++ ++#include ++#include ++#include ++#include ++ ++#ifdef USE_FILEEXTD ++/* VC 7.1 or earlier doesn't support SAL. */ ++# if !defined(_MSC_VER) || (_MSC_VER < 1400) ++# define __out ++# define __in ++# define __in_opt ++# endif ++/* Win32 FileID API Library: ++ * http://www.microsoft.com/en-us/download/details.aspx?id=22599 ++ * Needed for WinXP. */ ++# include ++#else /* USE_FILEEXTD */ ++/* VC 8 or earlier. */ ++# if defined(_MSC_VER) && (_MSC_VER < 1500) ++# ifdef ENABLE_STUB_IMPL ++# define STUB_IMPL ++# else ++# error "Win32 FileID API Library is required for VC2005 or earlier." ++# endif ++# endif ++#endif /* USE_FILEEXTD */ ++ ++ ++#include "iscygpty.h" ++ ++//#define USE_DYNFILEID ++#ifdef USE_DYNFILEID ++typedef BOOL (WINAPI *pfnGetFileInformationByHandleEx)( ++ HANDLE hFile, ++ FILE_INFO_BY_HANDLE_CLASS FileInformationClass, ++ LPVOID lpFileInformation, ++ DWORD dwBufferSize ++); ++static pfnGetFileInformationByHandleEx pGetFileInformationByHandleEx = NULL; ++ ++# ifndef USE_FILEEXTD ++static BOOL WINAPI stub_GetFileInformationByHandleEx( ++ HANDLE hFile, ++ FILE_INFO_BY_HANDLE_CLASS FileInformationClass, ++ LPVOID lpFileInformation, ++ DWORD dwBufferSize ++ ) ++{ ++ return FALSE; ++} ++# endif ++ ++static void setup_fileid_api(void) ++{ ++ if (pGetFileInformationByHandleEx != NULL) { ++ return; ++ } ++ pGetFileInformationByHandleEx = (pfnGetFileInformationByHandleEx) ++ GetProcAddress(GetModuleHandle(TEXT("kernel32.dll")), ++ "GetFileInformationByHandleEx"); ++ if (pGetFileInformationByHandleEx == NULL) { ++# ifdef USE_FILEEXTD ++ pGetFileInformationByHandleEx = GetFileInformationByHandleEx; ++# else ++ pGetFileInformationByHandleEx = stub_GetFileInformationByHandleEx; ++# endif ++ } ++} ++#else ++# define pGetFileInformationByHandleEx GetFileInformationByHandleEx ++# define setup_fileid_api() ++#endif ++ ++ ++#define is_wprefix(s, prefix) \ ++ (wcsncmp((s), (prefix), sizeof(prefix) / sizeof(WCHAR) - 1) == 0) ++ ++/* Check if the fd is a cygwin/msys's pty. */ ++int is_cygpty(int fd) ++{ ++#ifdef STUB_IMPL ++ return 0; ++#else ++ HANDLE h; ++ int size = sizeof(FILE_NAME_INFO) + sizeof(WCHAR) * (MAX_PATH - 1); ++ FILE_NAME_INFO *nameinfo; ++ WCHAR *p = NULL; ++ ++ setup_fileid_api(); ++ ++ h = (HANDLE) _get_osfhandle(fd); ++ if (h == INVALID_HANDLE_VALUE) { ++ return 0; ++ } ++ /* Cygwin/msys's pty is a pipe. */ ++ if (GetFileType(h) != FILE_TYPE_PIPE) { ++ return 0; ++ } ++ nameinfo = malloc(size + sizeof(WCHAR)); ++ if (nameinfo == NULL) { ++ return 0; ++ } ++ /* Check the name of the pipe: ++ * '\{cygwin,msys}-XXXXXXXXXXXXXXXX-ptyN-{from,to}-master' */ ++ if (pGetFileInformationByHandleEx(h, FileNameInfo, nameinfo, size)) { ++ nameinfo->FileName[nameinfo->FileNameLength / sizeof(WCHAR)] = L'\0'; ++ p = nameinfo->FileName; ++ if (is_wprefix(p, L"\\cygwin-")) { /* Cygwin */ ++ p += 8; ++ } else if (is_wprefix(p, L"\\msys-")) { /* MSYS and MSYS2 */ ++ p += 6; ++ } else { ++ p = NULL; ++ } ++ if (p != NULL) { ++ while (*p && isxdigit(*p)) /* Skip 16-digit hexadecimal. */ ++ ++p; ++ if (is_wprefix(p, L"-pty")) { ++ p += 4; ++ } else { ++ p = NULL; ++ } ++ } ++ if (p != NULL) { ++ while (*p && isdigit(*p)) /* Skip pty number. */ ++ ++p; ++ if (is_wprefix(p, L"-from-master")) { ++ //p += 12; ++ } else if (is_wprefix(p, L"-to-master")) { ++ //p += 10; ++ } else { ++ p = NULL; ++ } ++ } ++ } ++ free(nameinfo); ++ return (p != NULL); ++#endif /* STUB_IMPL */ ++} ++ ++/* Check if at least one cygwin/msys pty is used. */ ++int is_cygpty_used(void) ++{ ++ int fd, ret = 0; ++ ++ for (fd = 0; fd < 3; fd++) { ++ ret |= is_cygpty(fd); ++ } ++ return ret; ++} ++ ++#endif /* _WIN32 */ ++ ++/* vim: set ts=4 sw=4: */ +diff --git a/Python/pylifecycle.c b/Python/pylifecycle.c +index eeaf20b..916e6d7 100644 +--- a/Python/pylifecycle.c ++++ b/Python/pylifecycle.c +@@ -15,6 +15,7 @@ + #include "pycore_sysmodule.h" // _PySys_ClearAuditHooks() + #include "pycore_traceback.h" // _Py_DumpTracebackThreads() + ++#include "iscygpty.h" + #include // setlocale() + + #if defined(__APPLE__) +@@ -2872,7 +2873,7 @@ Py_Exit(int sts) + int + Py_FdIsInteractive(FILE *fp, const char *filename) + { +- if (isatty((int)fileno(fp))) ++ if (isatty((int)fileno(fp)) || is_cygpty((int)fileno(fp))) + return 1; + if (!Py_InteractiveFlag) + return 0; +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0060-disable-broken-gdbm-module.patch b/mingw-w64-python3.10/0060-disable-broken-gdbm-module.patch new file mode 100644 index 0000000000..c50426379b --- /dev/null +++ b/mingw-w64-python3.10/0060-disable-broken-gdbm-module.patch @@ -0,0 +1,30 @@ +From 0566135dcfafb938689d02fc7dfaf91b604f3c93 Mon Sep 17 00:00:00 2001 +From: Christoph Reiter +Date: Thu, 17 Jun 2021 18:52:15 +0530 +Subject: [PATCH 060/N] disable broken gdbm module +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Co-authored-by: Алексей +Signed-off-by: Naveen M K +--- + setup.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/setup.py b/setup.py +index 2e504ce..6437ac9 100644 +--- a/setup.py ++++ b/setup.py +@@ -1490,7 +1490,7 @@ class PyBuildExt(build_ext): + if dbm_args: + dbm_order = [arg.split('=')[-1] for arg in dbm_args][-1].split(":") + else: +- dbm_order = "ndbm:gdbm:bdb".split(":") ++ dbm_order = [] + dbmext = None + for cand in dbm_order: + if cand == "ndbm": +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0061-build-link-win-resource-files-and-build-pythonw.patch b/mingw-w64-python3.10/0061-build-link-win-resource-files-and-build-pythonw.patch new file mode 100644 index 0000000000..66ef59543f --- /dev/null +++ b/mingw-w64-python3.10/0061-build-link-win-resource-files-and-build-pythonw.patch @@ -0,0 +1,148 @@ +From 8bed36a023a628d5158a3a661e2b06c8a4ef04b7 Mon Sep 17 00:00:00 2001 +From: Christoph Reiter +Date: Thu, 17 Jun 2021 18:52:16 +0530 +Subject: [PATCH 061/N] build: link win resource files and build pythonw +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Co-authored-by: Алексей +Signed-off-by: Naveen M K +--- + Makefile.pre.in | 26 +++++++++++++++++++++----- + configure.ac | 26 ++++++++++++++++++++++++++ + 2 files changed, 47 insertions(+), 5 deletions(-) + +diff --git a/Makefile.pre.in b/Makefile.pre.in +index b698668..4865764 100644 +--- a/Makefile.pre.in ++++ b/Makefile.pre.in +@@ -38,6 +38,7 @@ CXX= @CXX@ + MAINCC= @MAINCC@ + LINKCC= @LINKCC@ + AR= @AR@ ++WINDRES= @WINDRES@ + READELF= @READELF@ + SOABI= @SOABI@ + LDVERSION= @LDVERSION@ +@@ -119,6 +120,7 @@ PY_CORE_CFLAGS= $(PY_STDMODULE_CFLAGS) -DPy_BUILD_CORE + PY_CORE_LDFLAGS=$(PY_LDFLAGS) $(PY_LDFLAGS_NODIST) + # Strict or non-strict aliasing flags used to compile dtoa.c, see above + CFLAGS_ALIASING=@CFLAGS_ALIASING@ ++RCFLAGS=@RCFLAGS@ + + + # Machine-dependent subdirectories +@@ -266,6 +268,7 @@ LIBOBJS= @LIBOBJS@ + + PYTHON= python$(EXE) + BUILDPYTHON= python$(BUILDEXE) ++BUILDPYTHONW= pythonw$(BUILDEXE) + + PYTHON_FOR_REGEN?=@PYTHON_FOR_REGEN@ + UPDATE_FILE=$(PYTHON_FOR_REGEN) $(srcdir)/Tools/scripts/update_file.py +@@ -480,7 +483,7 @@ DTRACE_DEPS = \ + + # Default target + all: @DEF_MAKE_ALL_RULE@ +-build_all: check-clean-src $(BUILDPYTHON) oldsharedmods sharedmods gdbhooks \ ++build_all: check-clean-src $(BUILDPYTHON) $(BUILDPYTHONW) oldsharedmods sharedmods gdbhooks \ + Programs/_testembed python-config + + # Check that the source is clean when building out of source. +@@ -593,9 +596,21 @@ coverage-report: regen-token regen-importlib + clinic: check-clean-src $(srcdir)/Modules/_blake2/blake2s_impl.c + $(PYTHON_FOR_REGEN) $(srcdir)/Tools/clinic/clinic.py --make --srcdir $(srcdir) + ++python_exe.o: $(srcdir)/PC/python_exe.rc ++ $(WINDRES) $(RCFLAGS) -I$(srcdir)/Include -I$(srcdir)/PC -I. $(srcdir)/PC/python_exe.rc $@ ++ ++pythonw_exe.o: $(srcdir)/PC/pythonw_exe.rc ++ $(WINDRES) $(RCFLAGS) -I$(srcdir)/Include -I$(srcdir)/PC -I. $(srcdir)/PC/pythonw_exe.rc $@ ++ ++python_nt.o: $(srcdir)/PC/python_nt.rc ++ $(WINDRES) $(RCFLAGS) -DORIGINAL_FILENAME=\\\"$(DLLLIBRARY)\\\" -I$(srcdir)/Include -I$(srcdir)/PC -I. $(srcdir)/PC/python_nt.rc $@ ++ ++$(BUILDPYTHONW): Programs/python.o $(LIBRARY) $(LDLIBRARY) $(PY3LIBRARY) pythonw_exe.o ++ $(LINKCC) $(PY_CORE_LDFLAGS) $(LINKFORSHARED) -municode -mwindows -o $@ Programs/python.o $(BLDLIBRARY) $(LIBS) $(MODLIBS) $(SYSLIBS) pythonw_exe.o ++ + # Build the interpreter +-$(BUILDPYTHON): Programs/python.o $(LIBRARY_DEPS) +- $(LINKCC) $(PY_CORE_LDFLAGS) $(LINKFORSHARED) -o $@ Programs/python.o $(BLDLIBRARY) $(LIBS) $(MODLIBS) $(SYSLIBS) ++$(BUILDPYTHON): Programs/python.o $(LIBRARY_DEPS) python_exe.o ++ $(LINKCC) $(PY_CORE_LDFLAGS) $(LINKFORSHARED) -municode -o $@ Programs/python.o $(BLDLIBRARY) $(LIBS) $(MODLIBS) $(SYSLIBS) python_exe.o + + platform: $(BUILDPYTHON) pybuilddir.txt + $(RUNSHARED) $(PYTHON_FOR_BUILD) -c 'import sys ; from sysconfig import get_platform ; print("%s-%d.%d" % (get_platform(), *sys.version_info[:2]))' >platform +@@ -705,10 +720,10 @@ $(PYTHONFRAMEWORKDIR)/Versions/$(VERSION)/$(PYTHONFRAMEWORK): \ + + # This rule builds the Cygwin Python DLL and import library if configured + # for a shared core library; otherwise, this rule is a noop. +-$(DLLLIBRARY) libpython$(LDVERSION).dll.a: $(LIBRARY_OBJS) ++$(DLLLIBRARY) libpython$(LDVERSION).dll.a: $(LIBRARY_OBJS) python_nt.o + if test -n "$(DLLLIBRARY)"; then \ + $(LDSHARED) -Wl,--out-implib=$@ -o $(DLLLIBRARY) $^ \ +- $(LIBS) $(MODLIBS) $(SYSLIBS); \ ++ $(LIBS) $(MODLIBS) $(SYSLIBS) python_nt.o; \ + else true; \ + fi + +@@ -1341,6 +1356,7 @@ altbininstall: $(BUILDPYTHON) @FRAMEWORKPYTHONW@ + done + if test "$(PYTHONFRAMEWORKDIR)" = "no-framework" ; then \ + $(INSTALL_PROGRAM) $(BUILDPYTHON) $(DESTDIR)$(BINDIR)/python$(LDVERSION)$(EXE); \ ++ $(INSTALL_PROGRAM) $(BUILDPYTHONW) $(DESTDIR)$(BINDIR)/python3w$(EXE); \ + else \ + $(INSTALL_PROGRAM) $(STRIPFLAG) Mac/pythonw $(DESTDIR)$(BINDIR)/python$(LDVERSION)$(EXE); \ + fi +diff --git a/configure.ac b/configure.ac +index 4f014f9..7845c89 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -1330,6 +1330,9 @@ fi + + AC_MSG_RESULT($LDLIBRARY) + ++AC_SUBST(WINDRES) ++AC_CHECK_TOOL(WINDRES, windres) ++ + AC_SUBST(AR) + AC_CHECK_TOOLS(AR, ar aal, ar) + +@@ -5911,10 +5914,33 @@ AC_MSG_RESULT(done) + case $host in + *-*-mingw*) + LIBS="$LIBS -lversion -lshlwapi -lpathcch" ++ AC_PROG_AWK ++ if test "$AWK" = "gawk"; then ++ awk_extra_flag="--non-decimal-data" ++ fi ++ AC_MSG_CHECKING([FIELD3]) ++ FIELD3=$($AWK $awk_extra_flag '\ ++ /^#define PY_RELEASE_LEVEL_/ {levels[$2]=$3} \ ++ /^#define PY_MICRO_VERSION[[:space:]]+/ {micro=$3} \ ++ /^#define PY_RELEASE_LEVEL[[:space:]]+/ {level=levels[$3]} \ ++ /^#define PY_RELEASE_SERIAL[[:space:]]+/ {serial=$3} \ ++ END {print micro * 1000 + level * 10 + serial}' \ ++ $srcdir/Include/patchlevel.h ++ ) ++ ++ AC_MSG_RESULT([${FIELD3}]) ++ RCFLAGS="$RCFLAGS -DFIELD3=$FIELD3 -O COFF" ++ ++ case $host in ++ i686*) RCFLAGS="$RCFLAGS --target=pe-i386" ;; ++ x86_64*) RCFLAGS="$RCFLAGS --target=pe-x86-64" ;; ++ *) ;; ++ esac + ;; + *) + ;; + esac ++AC_SUBST(RCFLAGS) + + # Availability of -O2: + AC_MSG_CHECKING(for -O2) +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0062-disable-readline.patch b/mingw-w64-python3.10/0062-disable-readline.patch new file mode 100644 index 0000000000..a397bc1bc9 --- /dev/null +++ b/mingw-w64-python3.10/0062-disable-readline.patch @@ -0,0 +1,30 @@ +From ddd3b00fd408b42269b1163caf8213eee791ba12 Mon Sep 17 00:00:00 2001 +From: Christoph Reiter +Date: Thu, 17 Jun 2021 18:52:17 +0530 +Subject: [PATCH 062/N] disable readline +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Co-authored-by: Алексей +Signed-off-by: Naveen M K +--- + setup.py | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/setup.py b/setup.py +index 6437ac9..f67a8a2 100644 +--- a/setup.py ++++ b/setup.py +@@ -1151,6 +1151,8 @@ class PyBuildExt(build_ext): + # readline package + if find_file('readline/rlconf.h', self.inc_dirs, []) is None: + do_readline = False ++ if MS_WINDOWS: ++ do_readline = False + if do_readline: + if MACOS and os_release < 9: + # In every directory on the search path search for a dynamic +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0063-fix-isselectable.patch b/mingw-w64-python3.10/0063-fix-isselectable.patch new file mode 100644 index 0000000000..c553fea35a --- /dev/null +++ b/mingw-w64-python3.10/0063-fix-isselectable.patch @@ -0,0 +1,30 @@ +From ec3c1f7dc012752de8261849395acf157d629103 Mon Sep 17 00:00:00 2001 +From: Christoph Reiter +Date: Thu, 17 Jun 2021 18:52:18 +0530 +Subject: [PATCH 063/N] fix isselectable +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Co-authored-by: Алексей +Signed-off-by: Naveen M K +--- + Include/fileobject.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/Include/fileobject.h b/Include/fileobject.h +index 6ec2994..a80f195 100644 +--- a/Include/fileobject.h ++++ b/Include/fileobject.h +@@ -30,7 +30,7 @@ PyAPI_DATA(int) Py_UTF8Mode; + #endif + + /* A routine to check if a file descriptor can be select()-ed. */ +-#ifdef _MSC_VER ++#ifdef MS_WINDOWS + /* On Windows, any socket fd can be select()-ed, no matter how high */ + #define _PyIsSelectable_fd(FD) (1) + #else +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0064-use-_wcsnicmp-instead-wcsncasecmp.patch b/mingw-w64-python3.10/0064-use-_wcsnicmp-instead-wcsncasecmp.patch new file mode 100644 index 0000000000..0aac75dd4a --- /dev/null +++ b/mingw-w64-python3.10/0064-use-_wcsnicmp-instead-wcsncasecmp.patch @@ -0,0 +1,27 @@ +From e51bd20295c0ef8f3fb22455e6b217de061e2fdd Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?= + +Date: Thu, 17 Jun 2021 18:52:19 +0530 +Subject: [PATCH 064/N] use _wcsnicmp instead wcsncasecmp + +Signed-off-by: Naveen M K +--- + Modules/getpath.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/Modules/getpath.c b/Modules/getpath.c +index 161c6f7..fd1594a 100644 +--- a/Modules/getpath.c ++++ b/Modules/getpath.c +@@ -427,7 +427,7 @@ add_exe_suffix(wchar_t **progpath_p) + /* Check for already have an executable suffix */ + size_t n = wcslen(progpath); + size_t s = wcslen(EXE_SUFFIX); +- if (wcsncasecmp(EXE_SUFFIX, progpath + n - s, s) == 0) { ++ if (_wcsnicmp(EXE_SUFFIX, progpath + n - s, s) == 0) { + return _PyStatus_OK(); + } + +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0065-_xxsubinterpretersmodule.patch b/mingw-w64-python3.10/0065-_xxsubinterpretersmodule.patch new file mode 100644 index 0000000000..916d9729e6 --- /dev/null +++ b/mingw-w64-python3.10/0065-_xxsubinterpretersmodule.patch @@ -0,0 +1,27 @@ +From d19ed6053bae623b3e8533cc87d4761ee18f89c4 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?= + +Date: Thu, 17 Jun 2021 18:52:20 +0530 +Subject: [PATCH 065/N] _xxsubinterpretersmodule + +Signed-off-by: Naveen M K +--- + Modules/_xxsubinterpretersmodule.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/Modules/_xxsubinterpretersmodule.c b/Modules/_xxsubinterpretersmodule.c +index 9290255..9d2952b 100644 +--- a/Modules/_xxsubinterpretersmodule.c ++++ b/Modules/_xxsubinterpretersmodule.c +@@ -1761,7 +1761,7 @@ PyDoc_STRVAR(channelid_doc, + "A channel ID identifies a channel and may be used as an int."); + + static PyTypeObject ChannelIDtype = { +- PyVarObject_HEAD_INIT(&PyType_Type, 0) ++ PyVarObject_HEAD_INIT(NULL, 0) + "_xxsubinterpreters.ChannelID", /* tp_name */ + sizeof(channelid), /* tp_basicsize */ + 0, /* tp_itemsize */ +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0066-sqlite3-module-defines.patch b/mingw-w64-python3.10/0066-sqlite3-module-defines.patch new file mode 100644 index 0000000000..7e6704652e --- /dev/null +++ b/mingw-w64-python3.10/0066-sqlite3-module-defines.patch @@ -0,0 +1,25 @@ +From de08a7d3fbc47ef0caa3bd60c0dbbee4af1a06ca Mon Sep 17 00:00:00 2001 +From: Christoph Reiter +Date: Thu, 17 Jun 2021 18:52:21 +0530 +Subject: [PATCH 066/N] sqlite3 module defines + +Signed-off-by: Naveen M K +--- + setup.py | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/setup.py b/setup.py +index f67a8a2..1bb51a5 100644 +--- a/setup.py ++++ b/setup.py +@@ -1642,6 +1642,7 @@ class PyBuildExt(build_ext): + '_sqlite/statement.c', + '_sqlite/util.c', ] + sqlite_defines = [] ++ sqlite_defines.append(('MODULE_NAME', '"sqlite3"')) + + # Enable support for loadable extensions in the sqlite3 module + # if --enable-loadable-sqlite-extensions configure option is used. +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0067-configure.ac-fix-inet_pton-check.patch b/mingw-w64-python3.10/0067-configure.ac-fix-inet_pton-check.patch new file mode 100644 index 0000000000..3f8143233d --- /dev/null +++ b/mingw-w64-python3.10/0067-configure.ac-fix-inet_pton-check.patch @@ -0,0 +1,36 @@ +From 38c03d44eea27d9da8295047f426b50979f85fb9 Mon Sep 17 00:00:00 2001 +From: Christoph Reiter +Date: Thu, 17 Jun 2021 18:52:23 +0530 +Subject: [PATCH 067/N] configure.ac: fix inet_pton check +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Co-authored-by: Алексей +Signed-off-by: Naveen M K +--- + configure.ac | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/configure.ac b/configure.ac +index 7845c89..07d5ce2 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -4272,10 +4272,14 @@ AC_LINK_IFELSE([AC_LANG_PROGRAM([[ + + AC_MSG_CHECKING(for inet_pton) + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ ++#ifdef _WIN32 ++#include ++#else + #include + #include + #include + #include ++#endif + ]], [[void* p = inet_pton]])], + [AC_DEFINE(HAVE_INET_PTON, 1, Define if you have the 'inet_pton' function.) + AC_MSG_RESULT(yes)], +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0068-set-venv-activate-path-unix.patch b/mingw-w64-python3.10/0068-set-venv-activate-path-unix.patch new file mode 100644 index 0000000000..57a8174a13 --- /dev/null +++ b/mingw-w64-python3.10/0068-set-venv-activate-path-unix.patch @@ -0,0 +1,30 @@ +From a41578b844064f7bb5e19c00056f2866eeaa205c Mon Sep 17 00:00:00 2001 +From: Dan Yeaw +Date: Thu, 17 Jun 2021 18:52:25 +0530 +Subject: [PATCH 068/N] set venv activate path unix +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Co-authored-by: Алексей +Signed-off-by: Naveen M K +--- + Lib/venv/scripts/common/activate | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/Lib/venv/scripts/common/activate b/Lib/venv/scripts/common/activate +index 6fbc2b8..9c3d58d 100644 +--- a/Lib/venv/scripts/common/activate ++++ b/Lib/venv/scripts/common/activate +@@ -38,7 +38,7 @@ deactivate () { + # unset irrelevant variables + deactivate nondestructive + +-VIRTUAL_ENV="__VENV_DIR__" ++VIRTUAL_ENV=$(cygpath "__VENV_DIR__") + export VIRTUAL_ENV + + _OLD_VIRTUAL_PATH="$PATH" +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0069-venv-creation-fixes.patch b/mingw-w64-python3.10/0069-venv-creation-fixes.patch new file mode 100644 index 0000000000..69e617d359 --- /dev/null +++ b/mingw-w64-python3.10/0069-venv-creation-fixes.patch @@ -0,0 +1,72 @@ +From 244e5e5b29a82ff948cb27a8b048f30217befcb9 Mon Sep 17 00:00:00 2001 +From: Christoph Reiter +Date: Thu, 17 Jun 2021 18:52:26 +0530 +Subject: [PATCH 069/N] venv creation fixes + +Signed-off-by: Naveen M K +--- + Lib/venv/__init__.py | 19 ++++++++++++++----- + 1 file changed, 14 insertions(+), 5 deletions(-) + +diff --git a/Lib/venv/__init__.py b/Lib/venv/__init__.py +index 8009deb..b471006 100644 +--- a/Lib/venv/__init__.py ++++ b/Lib/venv/__init__.py +@@ -11,6 +11,7 @@ import subprocess + import sys + import sysconfig + import types ++from sysconfig import _POSIX_BUILD + + + CORE_VENV_DEPS = ('pip', 'setuptools') +@@ -119,7 +120,7 @@ class EnvBuilder: + context.executable = executable + context.python_dir = dirname + context.python_exe = exename +- if sys.platform == 'win32': ++ if sys.platform == 'win32' and not _POSIX_BUILD: + binname = 'Scripts' + incpath = 'Include' + libpath = os.path.join(env_dir, 'Lib', 'site-packages') +@@ -252,7 +253,7 @@ class EnvBuilder: + if not os.path.islink(path): + os.chmod(path, 0o755) + else: +- if self.symlinks: ++ if self.symlinks and not _POSIX_BUILD: + # For symlinking, we need a complete copy of the root directory + # If symlinks fail, you'll get unnecessary copies of files, but + # we assume that if you've opted into symlinks on Windows then +@@ -275,7 +276,13 @@ class EnvBuilder: + if os.path.lexists(src): + copier(src, os.path.join(binpath, suffix)) + +- if sysconfig.is_python_build(True): ++ if _POSIX_BUILD: ++ # copy from python/pythonw so the venvlauncher magic in symlink_or_copy triggers ++ copier(os.path.join(dirname, 'python.exe'), os.path.join(binpath, 'python3.exe')) ++ copier(os.path.join(dirname, 'python.exe'), os.path.join(binpath, 'python%d.%d.exe' % sys.version_info[:2])) ++ copier(os.path.join(dirname, 'pythonw.exe'), os.path.join(binpath, 'python3w.exe')) ++ ++ if sysconfig.is_python_build(True) and not _POSIX_BUILD: + # copy init.tcl + for root, dirs, files in os.walk(context.python_dir): + if 'init.tcl' in files: +@@ -293,9 +300,11 @@ class EnvBuilder: + # We run ensurepip in isolated mode to avoid side effects from + # environment vars, the current directory and anything else + # intended for the global Python environment ++ env = os.environ.copy() ++ env.pop("MSYSTEM", None) + cmd = [context.env_exe, '-Im', 'ensurepip', '--upgrade', +- '--default-pip'] +- subprocess.check_output(cmd, stderr=subprocess.STDOUT) ++ '--default-pip'] ++ subprocess.check_call(cmd, stderr=subprocess.STDOUT, env=env) + + def setup_scripts(self, context): + """ +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0070-pass-gen-profile-ldflags.patch b/mingw-w64-python3.10/0070-pass-gen-profile-ldflags.patch new file mode 100644 index 0000000000..51b6a463be --- /dev/null +++ b/mingw-w64-python3.10/0070-pass-gen-profile-ldflags.patch @@ -0,0 +1,30 @@ +From af723e4d8e430e2444eac15569fc5bbba979be39 Mon Sep 17 00:00:00 2001 +From: Christoph Reiter +Date: Thu, 17 Jun 2021 18:52:27 +0530 +Subject: [PATCH 070/N] pass gen profile ldflags +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Co-authored-by: Алексей +Signed-off-by: Naveen M K +--- + Makefile.pre.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/Makefile.pre.in b/Makefile.pre.in +index 4865764..fb3c807 100644 +--- a/Makefile.pre.in ++++ b/Makefile.pre.in +@@ -723,7 +723,7 @@ $(PYTHONFRAMEWORKDIR)/Versions/$(VERSION)/$(PYTHONFRAMEWORK): \ + $(DLLLIBRARY) libpython$(LDVERSION).dll.a: $(LIBRARY_OBJS) python_nt.o + if test -n "$(DLLLIBRARY)"; then \ + $(LDSHARED) -Wl,--out-implib=$@ -o $(DLLLIBRARY) $^ \ +- $(LIBS) $(MODLIBS) $(SYSLIBS) python_nt.o; \ ++ $(LIBS) $(LDFLAGS_NODIST) $(MODLIBS) $(SYSLIBS) python_nt.o; \ + else true; \ + fi + +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0071-pkg-config-windows-must-link-ext-with-python-lib.patch b/mingw-w64-python3.10/0071-pkg-config-windows-must-link-ext-with-python-lib.patch new file mode 100644 index 0000000000..b90cbea636 --- /dev/null +++ b/mingw-w64-python3.10/0071-pkg-config-windows-must-link-ext-with-python-lib.patch @@ -0,0 +1,39 @@ +From 071ad00d1ecd1fe2543dc53bb104c62fe4d8ea9c Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?= + +Date: Thu, 17 Jun 2021 18:52:29 +0530 +Subject: [PATCH 071/N] pkg config windows must link ext with python lib + +Signed-off-by: Naveen M K +--- + Misc/python.pc.in | 2 +- + configure.ac | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/Misc/python.pc.in b/Misc/python.pc.in +index 87e04de..3900190 100644 +--- a/Misc/python.pc.in ++++ b/Misc/python.pc.in +@@ -9,5 +9,5 @@ Description: Build a C extension for Python + Requires: + Version: @VERSION@ + Libs.private: @LIBS@ +-Libs: ++Libs: -L${libdir} -lpython@VERSION@@ABIFLAGS@ + Cflags: -I${includedir}/python@VERSION@@ABIFLAGS@ +diff --git a/configure.ac b/configure.ac +index 07d5ce2..ecf88ff 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -5148,7 +5148,7 @@ AC_MSG_RESULT($LDVERSION) + + # On Android and Cygwin the shared libraries must be linked with libpython. + AC_SUBST(LIBPYTHON) +-if test -n "$ANDROID_API_LEVEL" -o "$MACHDEP" = "cygwin"; then ++if test -n "$ANDROID_API_LEVEL" -o "$MACHDEP" = "cygwin" -o "$MACHDEP" = "win32"; then + LIBPYTHON="-lpython${VERSION}${ABIFLAGS}" + else + LIBPYTHON='' +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0072-importlib-bootstrap-path-sep.patch b/mingw-w64-python3.10/0072-importlib-bootstrap-path-sep.patch new file mode 100644 index 0000000000..241eb4ae8b --- /dev/null +++ b/mingw-w64-python3.10/0072-importlib-bootstrap-path-sep.patch @@ -0,0 +1,33 @@ +From 088ba0b2b0049ff649495f3389f3661794570d4b Mon Sep 17 00:00:00 2001 +From: Christoph Reiter +Date: Thu, 17 Jun 2021 18:52:30 +0530 +Subject: [PATCH 072/N] importlib bootstrap path sep +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Co-authored-by: Алексей +Co-authored-by: Naveen M K +Signed-off-by: Naveen M K +--- + Lib/importlib/_bootstrap_external.py | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/Lib/importlib/_bootstrap_external.py b/Lib/importlib/_bootstrap_external.py +index 9a73c7b..fc30499 100644 +--- a/Lib/importlib/_bootstrap_external.py ++++ b/Lib/importlib/_bootstrap_external.py +@@ -42,6 +42,10 @@ if _MS_WINDOWS: + path_separators = ['\\', '/'] + else: + path_separators = ['/'] ++ ++if 'MSYSTEM' in _os.environ: ++ path_separators = path_separators[::-1] ++ + # Assumption made in _path_join() + assert all(len(sep) == 1 for sep in path_separators) + path_sep = path_separators[0] +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0073-pathlib-path-sep.patch b/mingw-w64-python3.10/0073-pathlib-path-sep.patch new file mode 100644 index 0000000000..f600e4eb67 --- /dev/null +++ b/mingw-w64-python3.10/0073-pathlib-path-sep.patch @@ -0,0 +1,26 @@ +From 8801fd78e593cc54d666ef9edd307361ac9b5332 Mon Sep 17 00:00:00 2001 +From: Christoph Reiter +Date: Thu, 17 Jun 2021 18:52:31 +0530 +Subject: [PATCH 073/N] pathlib path sep + +Signed-off-by: Naveen M K +--- + Lib/pathlib.py | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/Lib/pathlib.py b/Lib/pathlib.py +index 621fba0..c930e1d 100644 +--- a/Lib/pathlib.py ++++ b/Lib/pathlib.py +@@ -115,6 +115,8 @@ class _WindowsFlavour(_Flavour): + + sep = '\\' + altsep = '/' ++ if 'MSYSTEM' in os.environ: ++ sep, altsep = altsep, sep + has_drv = True + pathmod = ntpath + +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0074-warnings-fixes.patch b/mingw-w64-python3.10/0074-warnings-fixes.patch new file mode 100644 index 0000000000..0779fc4f62 --- /dev/null +++ b/mingw-w64-python3.10/0074-warnings-fixes.patch @@ -0,0 +1,132 @@ +From 50c8b0c3e091c2ac9abababfa1d957218e5fbd88 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?= + +Date: Thu, 17 Jun 2021 18:52:33 +0530 +Subject: [PATCH 074/N] warnings fixes + +Signed-off-by: Naveen M K +--- + Modules/_winapi.c | 2 +- + Modules/posixmodule.c | 6 +++--- + Modules/socketmodule.h | 2 ++ + PC/python_exe.rc | 2 +- + PC/pythonw_exe.rc | 2 +- + PC/winreg.c | 1 + + Python/thread_nt.h | 3 ++- + 7 files changed, 11 insertions(+), 7 deletions(-) + +diff --git a/Modules/_winapi.c b/Modules/_winapi.c +index e7e8c6a..b09fce7 100644 +--- a/Modules/_winapi.c ++++ b/Modules/_winapi.c +@@ -959,7 +959,7 @@ getattributelist(PyObject *obj, const char *name, AttributeList *attribute_list) + DWORD err; + BOOL result; + PyObject *value; +- Py_ssize_t handle_list_size; ++ Py_ssize_t handle_list_size = 0; + DWORD attribute_count = 0; + SIZE_T attribute_list_size = 0; + +diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c +index 7e9c1c6..65edb10 100644 +--- a/Modules/posixmodule.c ++++ b/Modules/posixmodule.c +@@ -5391,7 +5391,7 @@ os_utime_impl(PyObject *module, path_t *path, PyObject *times, PyObject *ns, + /*[clinic end generated code: output=cfcac69d027b82cf input=2fbd62a2f228f8f4]*/ + { + #ifdef MS_WINDOWS +- HANDLE hFile; ++ HANDLE hFile = 0; + FILETIME atime, mtime; + #else + int result; +@@ -14531,7 +14531,7 @@ os__add_dll_directory_impl(PyObject *module, path_t *path) + loaded. */ + Py_BEGIN_ALLOW_THREADS + if (!(hKernel32 = GetModuleHandleW(L"kernel32")) || +- !(AddDllDirectory = (PAddDllDirectory)GetProcAddress( ++ !(AddDllDirectory = (PAddDllDirectory)(void *)GetProcAddress( + hKernel32, "AddDllDirectory")) || + !(cookie = (*AddDllDirectory)(path->wide))) { + err = GetLastError(); +@@ -14581,7 +14581,7 @@ os__remove_dll_directory_impl(PyObject *module, PyObject *cookie) + loaded. */ + Py_BEGIN_ALLOW_THREADS + if (!(hKernel32 = GetModuleHandleW(L"kernel32")) || +- !(RemoveDllDirectory = (PRemoveDllDirectory)GetProcAddress( ++ !(RemoveDllDirectory = (PRemoveDllDirectory)(void *)GetProcAddress( + hKernel32, "RemoveDllDirectory")) || + !(*RemoveDllDirectory)(cookieValue)) { + err = GetLastError(); +diff --git a/Modules/socketmodule.h b/Modules/socketmodule.h +index e4f375d..bbdd8c0 100644 +--- a/Modules/socketmodule.h ++++ b/Modules/socketmodule.h +@@ -70,8 +70,10 @@ struct SOCKADDR_BTH_REDEF { + */ + # ifdef SIO_GET_MULTICAST_FILTER + # include /* for SIO_RCVALL */ ++#ifndef __MINGW32__ /* resolve by configure */ + # define HAVE_ADDRINFO + # define HAVE_SOCKADDR_STORAGE ++#endif + # define HAVE_GETADDRINFO + # define HAVE_GETNAMEINFO + # define ENABLE_IPV6 +diff --git a/PC/python_exe.rc b/PC/python_exe.rc +index ae0b029..e667ffa 100644 +--- a/PC/python_exe.rc ++++ b/PC/python_exe.rc +@@ -7,7 +7,7 @@ + #include + 1 RT_MANIFEST "python.manifest" + +-1 ICON DISCARDABLE "icons\python.ico" ++1 ICON DISCARDABLE "icons/python.ico" + + + ///////////////////////////////////////////////////////////////////////////// +diff --git a/PC/pythonw_exe.rc b/PC/pythonw_exe.rc +index 88bf359..413d7d1 100644 +--- a/PC/pythonw_exe.rc ++++ b/PC/pythonw_exe.rc +@@ -7,7 +7,7 @@ + #include + 1 RT_MANIFEST "python.manifest" + +-1 ICON DISCARDABLE "icons\pythonw.ico" ++1 ICON DISCARDABLE "icons/pythonw.ico" + + + ///////////////////////////////////////////////////////////////////////////// +diff --git a/PC/winreg.c b/PC/winreg.c +index fbcd2c4..b1cb07e 100644 +--- a/PC/winreg.c ++++ b/PC/winreg.c +@@ -813,6 +813,7 @@ Reg2Py(BYTE *retDataBuf, DWORD retDataSize, DWORD typ) + case REG_BINARY: + /* ALSO handle ALL unknown data types here. Even if we can't + support it natively, we should handle the bits. */ ++ /* fallthrough */ + default: + if (retDataSize == 0) { + Py_INCREF(Py_None); +diff --git a/Python/thread_nt.h b/Python/thread_nt.h +index 0ce5e94..6a6fe7e 100644 +--- a/Python/thread_nt.h ++++ b/Python/thread_nt.h +@@ -349,8 +349,9 @@ PyThread_release_lock(PyThread_type_lock aLock) + { + dprintf(("%lu: PyThread_release_lock(%p) called\n", PyThread_get_thread_ident(),aLock)); + +- if (!(aLock && LeaveNonRecursiveMutex((PNRMUTEX) aLock))) ++ if (!(aLock && LeaveNonRecursiveMutex((PNRMUTEX) aLock))) { + dprintf(("%lu: Could not PyThread_release_lock(%p) error: %ld\n", PyThread_get_thread_ident(), aLock, GetLastError())); ++ } + } + + /* minimum/maximum thread stack sizes supported */ +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0075-fix-build-testinternalcapi.patch b/mingw-w64-python3.10/0075-fix-build-testinternalcapi.patch new file mode 100644 index 0000000000..c4c815efca --- /dev/null +++ b/mingw-w64-python3.10/0075-fix-build-testinternalcapi.patch @@ -0,0 +1,29 @@ +From 111574d55172fda8eed70a8390d2132f830a3a24 Mon Sep 17 00:00:00 2001 +From: Christoph Reiter +Date: Thu, 17 Jun 2021 18:52:34 +0530 +Subject: [PATCH 075/N] fix build testinternalcapi + +Signed-off-by: Naveen M K +--- + setup.py | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/setup.py b/setup.py +index 1bb51a5..6649f53 100644 +--- a/setup.py ++++ b/setup.py +@@ -1063,7 +1063,11 @@ class PyBuildExt(build_ext): + depends=['testcapi_long.h'])) + + # Python Internal C API test module ++ macros = [] ++ if MS_WINDOWS: ++ macros.append(('PY3_DLLNAME', 'L"%s"' % sysconfig.get_config_var('DLLLIBRARY'))) + self.add(Extension('_testinternalcapi', ['_testinternalcapi.c'], ++ define_macros=macros, + extra_compile_args=['-DPy_BUILD_CORE_MODULE'])) + + # Python PEP-3118 (buffer protocol) test module +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0076-extend-MS_WINDOWS-flag.patch b/mingw-w64-python3.10/0076-extend-MS_WINDOWS-flag.patch new file mode 100644 index 0000000000..5fb8a49288 --- /dev/null +++ b/mingw-w64-python3.10/0076-extend-MS_WINDOWS-flag.patch @@ -0,0 +1,26 @@ +From 7bbbdb552ef068fa5b4c4e38a4b72a32d679b754 Mon Sep 17 00:00:00 2001 +From: Long Nguyen +Date: Thu, 17 Jun 2021 18:52:34 +0530 +Subject: [PATCH 076/N] extend MS_WINDOWS flag + +Signed-off-by: Naveen M K +--- + setup.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/setup.py b/setup.py +index 6649f53..5eb9b07 100644 +--- a/setup.py ++++ b/setup.py +@@ -92,7 +92,7 @@ if sys.platform == "win32" and "MSYSTEM" in os.environ: + + CROSS_COMPILING = ("_PYTHON_HOST_PLATFORM" in os.environ) + HOST_PLATFORM = get_platform() +-MS_WINDOWS = (HOST_PLATFORM == 'win32') ++MS_WINDOWS = (HOST_PLATFORM == 'win32' or HOST_PLATFORM == 'mingw') + CYGWIN = (HOST_PLATFORM == 'cygwin') + MACOS = (HOST_PLATFORM == 'darwin') + AIX = (HOST_PLATFORM.startswith('aix')) +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0077-clang-arm64.patch b/mingw-w64-python3.10/0077-clang-arm64.patch new file mode 100644 index 0000000000..69ef4397a0 --- /dev/null +++ b/mingw-w64-python3.10/0077-clang-arm64.patch @@ -0,0 +1,51 @@ +From 5132d7826b1622531246d79e27f0ff43dc825d40 Mon Sep 17 00:00:00 2001 +From: jeremyd2019 <4524874+jeremyd2019@users.noreply.github.com> +Date: Thu, 17 Jun 2021 18:52:36 +0530 +Subject: [PATCH 077/N] clang arm64 + +Co-authored-by: Naveen M K +Signed-off-by: Naveen M K +--- + Python/getcompiler.c | 11 ++++++++++- + 1 file changed, 10 insertions(+), 1 deletion(-) + +diff --git a/Python/getcompiler.c b/Python/getcompiler.c +index 3e31c80..7e7be71 100644 +--- a/Python/getcompiler.c ++++ b/Python/getcompiler.c +@@ -7,7 +7,7 @@ + + // Note the __clang__ conditional has to come before the __GNUC__ one because + // clang pretends to be GCC. +-#if defined(__clang__) ++#if defined(__clang__) && !defined(_WIN32) + #define COMPILER "[Clang " __clang_version__ "]" + #elif defined(__GNUC__) + /* To not break compatibility with things that determine +@@ -18,6 +18,8 @@ + #define COMP_SEP " " + #if defined(__x86_64__) + #define ARCH_SUFFIX " 64 bit (AMD64)" ++#elif defined(__aarch64__) ++#define ARCH_SUFFIX " 64 bit (ARM64)" + #else + #define ARCH_SUFFIX " 32 bit" + #endif +@@ -25,7 +27,14 @@ + #define COMP_SEP "\n" + #define ARCH_SUFFIX "" + #endif ++#if defined(__clang__) ++#define str(x) #x ++#define xstr(x) str(x) ++#define COMPILER COMP_SEP "[GCC Clang " xstr(__clang_major__) "." \ ++ xstr(__clang_minor__) "." xstr(__clang_patchlevel__) ARCH_SUFFIX "]" ++#else + #define COMPILER COMP_SEP "[GCC " __VERSION__ ARCH_SUFFIX "]" ++#endif + // Generic fallbacks. + #elif defined(__cplusplus) + #define COMPILER "[C++]" +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0078-configure.ac-set-MINGW-stack-reserve.patch b/mingw-w64-python3.10/0078-configure.ac-set-MINGW-stack-reserve.patch new file mode 100644 index 0000000000..27e23a229a --- /dev/null +++ b/mingw-w64-python3.10/0078-configure.ac-set-MINGW-stack-reserve.patch @@ -0,0 +1,29 @@ +From f471e4d6b28f351e5ccaf760969bd239088d8fbb Mon Sep 17 00:00:00 2001 +From: jeremyd2019 <4524874+jeremyd2019@users.noreply.github.com> +Date: Thu, 17 Jun 2021 18:52:37 +0530 +Subject: [PATCH 078/N] configure.ac: set MINGW stack reserve + +Signed-off-by: Naveen M K +--- + configure.ac | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/configure.ac b/configure.ac +index ecf88ff..10334e1 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -3053,6 +3053,11 @@ then + VxWorks*) + LINKFORSHARED='-Wl,-export-dynamic';; + esac ++ case $host in ++ *-*-mingw*) ++ # for https://bugs.python.org/issue40458 on MINGW ++ LINKFORSHARED="-Wl,--stack,2000000";; ++ esac + fi + AC_MSG_RESULT($LINKFORSHARED) + +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0079-Don-t-use-os.pathsep-to-find-EOF.patch b/mingw-w64-python3.10/0079-Don-t-use-os.pathsep-to-find-EOF.patch new file mode 100644 index 0000000000..cdd0b2fec6 --- /dev/null +++ b/mingw-w64-python3.10/0079-Don-t-use-os.pathsep-to-find-EOF.patch @@ -0,0 +1,28 @@ +From df2bdfbe3c99768c838eba8d13039a92d074b108 Mon Sep 17 00:00:00 2001 +From: Naveen M K +Date: Fri, 18 Jun 2021 12:38:11 +0530 +Subject: [PATCH 079/N] Don't use os.pathsep to find EOF not all + distributions in win32 have them as \ instead check using sys.platform + +Signed-off-by: Naveen M K +Signed-off-by: Naveen M K +--- + Lib/site.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/Lib/site.py b/Lib/site.py +index e460a3d..49c6ce0 100644 +--- a/Lib/site.py ++++ b/Lib/site.py +@@ -401,7 +401,7 @@ def setquit(): + The repr of each object contains a hint at how it works. + + """ +- if os.sep == '\\': ++ if sys.platform == 'win32': + eof = 'Ctrl-Z plus Return' + else: + eof = 'Ctrl-D (i.e. EOF)' +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0080-Fix-extension-suffix-for-c-extensions-on-mingw.patch b/mingw-w64-python3.10/0080-Fix-extension-suffix-for-c-extensions-on-mingw.patch new file mode 100644 index 0000000000..e7204c076c --- /dev/null +++ b/mingw-w64-python3.10/0080-Fix-extension-suffix-for-c-extensions-on-mingw.patch @@ -0,0 +1,182 @@ +From 9705142463fd8b4d5831636cc3b2518a0c48b20d Mon Sep 17 00:00:00 2001 +From: Naveen M K +Date: Wed, 23 Jun 2021 18:12:12 +0530 +Subject: [PATCH 080/N] Fix extension suffix for c-extensions on mingw + +Python is compiled with various compilers which previously +had same platform tags or extension suffix. This can be error +prone while loading c-extensions, so now each compiler or +runtime has a different extension suffix. + +Also, changed all extension to end with .pyd rather than +.dll file. + +Fixes https://github.com/msys2/MINGW-packages/issues/8843 + +Signed-off-by: Naveen M K +--- + Makefile.pre.in | 6 ++-- + Python/dynload_win.c | 6 ---- + configure.ac | 77 +++++++++++++++++++++++++++++++++++++++----- + 3 files changed, 72 insertions(+), 17 deletions(-) + +diff --git a/Makefile.pre.in b/Makefile.pre.in +index fb3c807..e526be2 100644 +--- a/Makefile.pre.in ++++ b/Makefile.pre.in +@@ -167,6 +167,7 @@ CONFINCLUDEPY= $(CONFINCLUDEDIR)/python$(LDVERSION) + # Symbols used for using shared libraries + SHLIB_SUFFIX= @SHLIB_SUFFIX@ + EXT_SUFFIX= @EXT_SUFFIX@ ++PYD_PLATFORM_TAG = @PYD_PLATFORM_TAG@ + LDSHARED= @LDSHARED@ $(PY_LDFLAGS) + BLDSHARED= @BLDSHARED@ $(PY_CORE_LDFLAGS) + LDCXXSHARED= @LDCXXSHARED@ +@@ -851,8 +852,7 @@ Python/dynload_hpux.o: $(srcdir)/Python/dynload_hpux.c Makefile + + Python/dynload_win.o: $(srcdir)/Python/dynload_win.c Makefile + $(CC) -c $(PY_CORE_CFLAGS) \ +- -DSHLIB_SUFFIX='"$(SHLIB_SUFFIX)"' \ +- -DEXT_SUFFIX='"$(EXT_SUFFIX)"' \ ++ -DPYD_PLATFORM_TAG='"$(PYD_PLATFORM_TAG)"' \ + -o $@ $(srcdir)/Python/dynload_win.c + + Python/sysmodule.o: $(srcdir)/Python/sysmodule.c Makefile $(srcdir)/Include/pydtrace.h +@@ -1740,7 +1740,7 @@ libainstall: @DEF_MAKE_RULE@ python-config + @if test "$(STATIC_LIBPYTHON)" = 1; then \ + if test -d $(LIBRARY); then :; else \ + if test "$(PYTHONFRAMEWORKDIR)" = no-framework; then \ +- if test "$(SHLIB_SUFFIX)" = .dll; then \ ++ if test "$(SHLIB_SUFFIX)" = .dll -o "$(SHLIB_SUFFIX)" = .pyd; then \ + $(INSTALL_DATA) $(LDLIBRARY) $(DESTDIR)$(LIBPL) ; \ + else \ + $(INSTALL_DATA) $(LIBRARY) $(DESTDIR)$(LIBPL)/$(LIBRARY) ; \ +diff --git a/Python/dynload_win.c b/Python/dynload_win.c +index 1083fe8..c46061c 100644 +--- a/Python/dynload_win.c ++++ b/Python/dynload_win.c +@@ -27,12 +27,6 @@ + #define PYD_UNTAGGED_SUFFIX PYD_DEBUG_SUFFIX ".pyd" + + const char *_PyImport_DynLoadFiletab[] = { +-#ifdef EXT_SUFFIX +- EXT_SUFFIX, /* include SOABI flags where is encoded debug */ +-#endif +-#ifdef SHLIB_SUFFIX +- "-abi" PYTHON_ABI_STRING SHLIB_SUFFIX, +-#endif + PYD_TAGGED_SUFFIX, + PYD_UNTAGGED_SUFFIX, + NULL +diff --git a/configure.ac b/configure.ac +index 10334e1..ca7e7a2 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -2825,7 +2825,7 @@ if test -z "$SHLIB_SUFFIX"; then + *) SHLIB_SUFFIX=.so;; + esac + case $host_os in +- mingw*) SHLIB_SUFFIX=.dll;; ++ mingw*) SHLIB_SUFFIX=.pyd;; + esac + fi + AC_MSG_RESULT($SHLIB_SUFFIX) +@@ -5113,6 +5113,68 @@ esac + # check for endianness + AC_C_BIGENDIAN + ++AC_SUBST(PYD_PLATFORM_TAG) ++# Special case of PYD_PLATFORM_TAG with python build with mingw. ++# Python can with compiled with clang or gcc and linked ++# to msvcrt or ucrt. To avoid conflicts between them ++# we are selecting the extension as based on the compiler ++# and the runtime they link to ++# gcc + x86_64 + msvcrt = cp{version number}-x86_64 ++# gcc + i686 + msvcrt = cp{version number}-i686 ++# gcc + x86_64 + ucrt = cp{version number}-x86_64-ucrt ++# clang + x86_64 + ucrt = cp{version number}-x86_64-clang ++# clang + i686 + ucrt = cp{version number}-i686-clang ++ ++PYD_PLATFORM_TAG="" ++case $host in ++ *-*-mingw*) ++ # check if we are linking to ucrt ++ AC_MSG_CHECKING(whether linking to ucrt) ++ AC_COMPILE_IFELSE([AC_LANG_SOURCE([[ ++ #include ++ #ifndef _UCRT ++ #error no ucrt ++ #endif ++ int main(){ return 0; } ++ ]])],[linking_to_ucrt=yes],[linking_to_ucrt=no]) ++ AC_MSG_RESULT($linking_to_ucrt) ++ ;; ++esac ++case $host_os in ++ mingw*) ++ AC_MSG_CHECKING(PYD_PLATFORM_TAG) ++ case $host in ++ i686-*-mingw*) ++ if test -n "${cc_is_clang}"; then ++ # it is CLANG32 ++ PYD_PLATFORM_TAG="mingw_i686_clang" ++ else ++ if test $linking_to_ucrt = no; then ++ PYD_PLATFORM_TAG="mingw_i686" ++ else ++ PYD_PLATFORM_TAG="mingw_i686_ucrt" ++ fi ++ fi ++ ;; ++ x86_64-*-mingw*) ++ if test -n "${cc_is_clang}"; then ++ # it is CLANG64 ++ PYD_PLATFORM_TAG="mingw_x86_64_clang" ++ else ++ if test $linking_to_ucrt = no; then ++ PYD_PLATFORM_TAG="mingw_x86_64" ++ else ++ PYD_PLATFORM_TAG="mingw_x86_64_ucrt" ++ fi ++ fi ++ ;; ++ aarch64-*-mingw*) ++ PYD_PLATFORM_TAG+="mingw_aarch64" ++ ;; ++ esac ++ AC_MSG_RESULT($PYD_PLATFORM_TAG) ++esac ++ + # ABI version string for Python extension modules. This appears between the + # periods in shared library file names, e.g. foo..so. It is calculated + # from the following attributes which affect the ABI of this Python build (in +@@ -5145,7 +5207,12 @@ if test "$Py_DEBUG" = 'true' -a "$with_trace_refs" != "yes"; then + fi + + AC_SUBST(EXT_SUFFIX) +-EXT_SUFFIX=.${SOABI}${SHLIB_SUFFIX} ++VERSION_NO_DOTS=$(echo $LDVERSION | tr -d .) ++if test -n "${PYD_PLATFORM_TAG}"; then ++ EXT_SUFFIX=".cp${VERSION_NO_DOTS}-${PYD_PLATFORM_TAG}${SHLIB_SUFFIX}" ++else ++ EXT_SUFFIX=.${SOABI}${SHLIB_SUFFIX} ++fi + + AC_MSG_CHECKING(LDVERSION) + LDVERSION='$(VERSION)$(ABIFLAGS)' +@@ -5865,12 +5932,6 @@ case "$ac_cv_computed_gotos" in yes*) + AC_DEFINE(HAVE_COMPUTED_GOTOS, 1, + [Define if the C compiler supports computed gotos.]) + esac +-case $host_os in +- mingw*) +- dnl Synchronized with _PyImport_DynLoadFiletab (dynload_win.c) +- dnl Do not use more then one dot on this platform ! +- EXT_SUFFIX=-$SOABI$SHLIB_SUFFIX;; +-esac + + case $ac_sys_system in + AIX*) +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0081-Change-the-get_platform-method-in-sysconfig.patch b/mingw-w64-python3.10/0081-Change-the-get_platform-method-in-sysconfig.patch new file mode 100644 index 0000000000..a0056c4eec --- /dev/null +++ b/mingw-w64-python3.10/0081-Change-the-get_platform-method-in-sysconfig.patch @@ -0,0 +1,64 @@ +From 7d6ec094999ef09bf69c083d52cb2fb1b6403978 Mon Sep 17 00:00:00 2001 +From: Christoph Reiter +Date: Tue, 21 Sep 2021 21:36:58 +0200 +Subject: [PATCH 081/N] Change the `get_platform()` method in sysconfig + +This would possibly fix building wheels when mingw python +is used and would be unique to each python same as EXT_SUFFIX. + +Also, this modifies the `sys.version` argument to include UCRT +in it. + +Signed-off-by: Naveen M K +--- + Lib/sysconfig.py | 16 ++++++++++++++-- + Python/getcompiler.c | 4 ++++ + 2 files changed, 18 insertions(+), 2 deletions(-) + +diff --git a/Lib/sysconfig.py b/Lib/sysconfig.py +index fb994c0..6b2ab19 100644 +--- a/Lib/sysconfig.py ++++ b/Lib/sysconfig.py +@@ -721,8 +721,20 @@ def get_platform(): + + """ + if os.name == 'nt': +- if 'GCC' in sys.version: +- return 'mingw' ++ if 'gcc' in sys.version.lower(): ++ if 'ucrt' in sys.version.lower(): ++ if 'amd64' in sys.version.lower(): ++ return 'mingw_x86_64_ucrt' ++ return 'mingw_i686_ucrt' ++ if 'clang' in sys.version.lower(): ++ if 'amd64' in sys.version.lower(): ++ return 'mingw_x86_64_clang' ++ if 'arm64' in sys.version.lower(): ++ return 'mingw_aarch64' ++ return 'mingw_i686_clang' ++ if 'amd64' in sys.version.lower(): ++ return 'mingw_x86_64' ++ return 'mingw_i686' + if 'amd64' in sys.version.lower(): + return 'win-amd64' + if '(arm)' in sys.version.lower(): +diff --git a/Python/getcompiler.c b/Python/getcompiler.c +index 7e7be71..275f799 100644 +--- a/Python/getcompiler.c ++++ b/Python/getcompiler.c +@@ -33,8 +33,12 @@ + #define COMPILER COMP_SEP "[GCC Clang " xstr(__clang_major__) "." \ + xstr(__clang_minor__) "." xstr(__clang_patchlevel__) ARCH_SUFFIX "]" + #else ++#if defined(_UCRT) ++#define COMPILER COMP_SEP "[GCC UCRT " __VERSION__ ARCH_SUFFIX "]" ++#else + #define COMPILER COMP_SEP "[GCC " __VERSION__ ARCH_SUFFIX "]" + #endif ++#endif + // Generic fallbacks. + #elif defined(__cplusplus) + #define COMPILER "[C++]" +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0082-distutils-compiler-customize-mingw-cygwin-compilers.patch b/mingw-w64-python3.10/0082-distutils-compiler-customize-mingw-cygwin-compilers.patch new file mode 100644 index 0000000000..bb1c89f104 --- /dev/null +++ b/mingw-w64-python3.10/0082-distutils-compiler-customize-mingw-cygwin-compilers.patch @@ -0,0 +1,44 @@ +From 21e726ba50c9339ee424d0ca3e27ce1999b90f21 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?= + +Date: Thu, 17 Jun 2021 18:51:21 +0530 +Subject: [PATCH 082/N] distutils: compiler customize mingw cygwin compilers + +Co-authored-by: Naveen M K +Signed-off-by: Naveen M K +--- + Lib/distutils/sysconfig.py | 18 +++++++++++++++++- + 1 file changed, 17 insertions(+), 1 deletion(-) + +diff --git a/Lib/distutils/sysconfig.py b/Lib/distutils/sysconfig.py +index 3414a76..cb39cd6 100644 +--- a/Lib/distutils/sysconfig.py ++++ b/Lib/distutils/sysconfig.py +@@ -201,7 +201,23 @@ def customize_compiler(compiler): + Mainly needed on Unix, so we can plug in the information that + varies across Unices and is stored in Python's Makefile. + """ +- if compiler.compiler_type == "unix": ++ global _config_vars ++ if compiler.compiler_type in ["cygwin", "mingw32"]: ++ # Note that cygwin use posix build and 'unix' compiler. ++ # If build is not based on posix then we must predefine ++ # some environment variables corresponding to posix ++ # build rules and defaults. ++ if not 'GCC' in sys.version: ++ _config_vars['CC'] = "gcc" ++ _config_vars['CXX'] = "g++" ++ _config_vars['OPT'] = "-fwrapv -O3 -Wall -Wstrict-prototypes" ++ _config_vars['CFLAGS'] = "" ++ _config_vars['CCSHARED'] = "" ++ _config_vars['LDSHARED'] = "gcc -shared -Wl,--enable-auto-image-base" ++ _config_vars['AR'] = "ar" ++ _config_vars['ARFLAGS'] = "rc" ++ ++ if compiler.compiler_type in ["unix", "cygwin", "mingw32"]: + if sys.platform == "darwin": + # Perform first-time customization of compiler-related + # config vars on OS X now that we know we need a compiler. +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0083-distutils-compiler-enable-new-dtags.patch b/mingw-w64-python3.10/0083-distutils-compiler-enable-new-dtags.patch new file mode 100644 index 0000000000..272afc3ffd --- /dev/null +++ b/mingw-w64-python3.10/0083-distutils-compiler-enable-new-dtags.patch @@ -0,0 +1,38 @@ +From 7fbf2669ec42b48c014c8fa064209a836a3f6440 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?= + +Date: Thu, 17 Jun 2021 18:51:22 +0530 +Subject: [PATCH 083/N] distutils: compiler enable new dtags +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Co-authored-by: Алексей +Signed-off-by: Naveen M K +--- + Lib/distutils/unixccompiler.py | 8 ++++++-- + 1 file changed, 6 insertions(+), 2 deletions(-) + +diff --git a/Lib/distutils/unixccompiler.py b/Lib/distutils/unixccompiler.py +index f0792de..60776bc 100644 +--- a/Lib/distutils/unixccompiler.py ++++ b/Lib/distutils/unixccompiler.py +@@ -248,9 +248,13 @@ class UnixCCompiler(CCompiler): + # -Wl whenever gcc was used in the past it is probably + # safest to keep doing so. + if sysconfig.get_config_var("GNULD") == "yes": +- # GNU ld needs an extra option to get a RUNPATH ++ # GNU ELF ld needs an extra option to get a RUNPATH + # instead of just an RPATH. +- return "-Wl,--enable-new-dtags,-R" + dir ++ if sys.platform in ["win32", "cygwin"] or \ ++ "mingw" in compiler: ++ return [] ++ else: ++ return "-Wl,--enable-new-dtags,-R" + dir + else: + return "-Wl,-R" + dir + else: +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0084-distutils-MINGW-build-extensions-with-GCC.patch b/mingw-w64-python3.10/0084-distutils-MINGW-build-extensions-with-GCC.patch new file mode 100644 index 0000000000..b90c3ba3c6 --- /dev/null +++ b/mingw-w64-python3.10/0084-distutils-MINGW-build-extensions-with-GCC.patch @@ -0,0 +1,61 @@ +From 59fb3e5bc31a8743382df764b660ccb1aa739f6f Mon Sep 17 00:00:00 2001 +From: Christoph Reiter +Date: Tue, 21 Sep 2021 20:52:22 +0200 +Subject: [PATCH 084/N] distutils: MINGW build extensions with GCC + +Signed-off-by: Naveen M K +--- + Lib/distutils/command/build_ext.py | 16 +++++++++++++++- + Lib/distutils/util.py | 2 ++ + 2 files changed, 17 insertions(+), 1 deletion(-) + +diff --git a/Lib/distutils/command/build_ext.py b/Lib/distutils/command/build_ext.py +index 1a9bd12..1c9d471 100644 +--- a/Lib/distutils/command/build_ext.py ++++ b/Lib/distutils/command/build_ext.py +@@ -186,7 +186,7 @@ class build_ext(Command): + # for extensions under windows use different directories + # for Release and Debug builds. + # also Python's library directory must be appended to library_dirs +- if os.name == 'nt': ++ if os.name == 'nt' and not self.plat_name.startswith(('mingw')): + # the 'libs' directory is for binary installs - we assume that + # must be the *native* platform. But we don't really support + # cross-compiling via a binary install anyway, so we let it go. +@@ -712,6 +712,20 @@ class build_ext(Command): + # pyconfig.h that MSVC groks. The other Windows compilers all seem + # to need it mentioned explicitly, though, so that's what we do. + # Append '_d' to the python import library on debug builds. ++ ++ # Use self.plat_name as it works even in case of ++ # cross-compilation (at least for mingw build). ++ if self.plat_name.startswith('mingw'): ++ from distutils import sysconfig ++ extra = [] ++ for lib in ( ++ sysconfig.get_config_var('BLDLIBRARY').split() ++ + sysconfig.get_config_var('SHLIBS').split() ++ ): ++ if lib.startswith('-l'): ++ extra.append(lib[2:]) ++ return ext.libraries + extra ++ + if sys.platform == "win32": + from distutils._msvccompiler import MSVCCompiler + if not isinstance(self.compiler, MSVCCompiler): +diff --git a/Lib/distutils/util.py b/Lib/distutils/util.py +index 2ce5c5b..fb7d1ad 100644 +--- a/Lib/distutils/util.py ++++ b/Lib/distutils/util.py +@@ -37,6 +37,8 @@ def get_host_platform(): + + """ + if os.name == 'nt': ++ if 'GCC' in sys.version: ++ return 'mingw' + if 'amd64' in sys.version.lower(): + return 'win-amd64' + if '(arm)' in sys.version.lower(): +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0085-distutils-use-Mingw32CCompiler-as-default-compiler-f.patch b/mingw-w64-python3.10/0085-distutils-use-Mingw32CCompiler-as-default-compiler-f.patch new file mode 100644 index 0000000000..747cdfd70f --- /dev/null +++ b/mingw-w64-python3.10/0085-distutils-use-Mingw32CCompiler-as-default-compiler-f.patch @@ -0,0 +1,74 @@ +From 6bf0cc4d29e2544677502ea44136abddaca7ca3a Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?= + +Date: Thu, 17 Jun 2021 18:51:35 +0530 +Subject: [PATCH 085/N] distutils: use Mingw32CCompiler as default compiler + for m +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Co-authored-by: Алексей +Signed-off-by: Naveen M K +--- + Lib/distutils/ccompiler.py | 4 +++- + Lib/distutils/cygwinccompiler.py | 11 ++++++++--- + 2 files changed, 11 insertions(+), 4 deletions(-) + +diff --git a/Lib/distutils/ccompiler.py b/Lib/distutils/ccompiler.py +index b5ef143..24eafc6 100644 +--- a/Lib/distutils/ccompiler.py ++++ b/Lib/distutils/ccompiler.py +@@ -9,7 +9,7 @@ from distutils.spawn import spawn + from distutils.file_util import move_file + from distutils.dir_util import mkpath + from distutils.dep_util import newer_group +-from distutils.util import split_quoted, execute ++from distutils.util import split_quoted, execute, get_platform + from distutils import log + + class CCompiler: +@@ -948,6 +948,8 @@ def get_default_compiler(osname=None, platform=None): + osname = os.name + if platform is None: + platform = sys.platform ++ if get_platform().startswith('mingw'): ++ return 'mingw32' + for pattern, compiler in _default_compilers: + if re.match(pattern, platform) is not None or \ + re.match(pattern, osname) is not None: +diff --git a/Lib/distutils/cygwinccompiler.py b/Lib/distutils/cygwinccompiler.py +index 66c12dd..1960ef8 100644 +--- a/Lib/distutils/cygwinccompiler.py ++++ b/Lib/distutils/cygwinccompiler.py +@@ -253,11 +253,16 @@ class CygwinCCompiler(UnixCCompiler): + output_dir = '' + obj_names = [] + for src_name in source_filenames: +- # use normcase to make sure '.rc' is really '.rc' and not '.RC' +- base, ext = os.path.splitext(os.path.normcase(src_name)) ++ base, ext = os.path.splitext(src_name) ++ # use 'normcase' only for resource suffixes ++ ext_normcase = os.path.normcase(ext) ++ if ext_normcase in ['.rc','.res']: ++ ext = ext_normcase + if ext not in (self.src_extensions + ['.rc','.res']): + raise UnknownFileError("unknown file type '%s' (from '%s')" % \ + (ext, src_name)) ++ base = os.path.splitdrive(base)[1] # Chop off the drive ++ base = base[os.path.isabs(base):] # If abs, chop off leading / + if strip_dir: + base = os.path.basename (base) + if ext in ('.res', '.rc'): +@@ -313,7 +318,7 @@ class Mingw32CCompiler(CygwinCCompiler): + + # Include the appropriate MSVC runtime library if Python was built + # with MSVC 7.0 or later. +- self.dll_libraries = get_msvcr() ++ self.dll_libraries = get_msvcr() or [] + + # Because these compilers aren't configured in Python's pyconfig.h file by + # default, we should at least warn the user if he is using an unmodified +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0086-distutils-find-import-library.patch b/mingw-w64-python3.10/0086-distutils-find-import-library.patch new file mode 100644 index 0000000000..76f0b21afe --- /dev/null +++ b/mingw-w64-python3.10/0086-distutils-find-import-library.patch @@ -0,0 +1,30 @@ +From 7e592f1acdee411f36e15fc23f21fa89137de60c Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?= + +Date: Thu, 17 Jun 2021 18:51:36 +0530 +Subject: [PATCH 086/N] distutils: find import library +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Co-authored-by: Алексей +Signed-off-by: Naveen M K +--- + Lib/distutils/cygwinccompiler.py | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/Lib/distutils/cygwinccompiler.py b/Lib/distutils/cygwinccompiler.py +index 1960ef8..39ad631 100644 +--- a/Lib/distutils/cygwinccompiler.py ++++ b/Lib/distutils/cygwinccompiler.py +@@ -91,6 +91,7 @@ class CygwinCCompiler(UnixCCompiler): + obj_extension = ".o" + static_lib_extension = ".a" + shared_lib_extension = ".dll" ++ dylib_lib_extension = ".dll.a" + static_lib_format = "lib%s%s" + shared_lib_format = "%s%s" + exe_extension = ".exe" +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0087-distutils-avoid-circular-dependency-from-time-module.patch b/mingw-w64-python3.10/0087-distutils-avoid-circular-dependency-from-time-module.patch new file mode 100644 index 0000000000..c7620d1ef6 --- /dev/null +++ b/mingw-w64-python3.10/0087-distutils-avoid-circular-dependency-from-time-module.patch @@ -0,0 +1,39 @@ +From 743f08acb0e7008b70f6d67219f92d3931314042 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?= + +Date: Thu, 17 Jun 2021 18:51:41 +0530 +Subject: [PATCH 087/N] distutils: avoid circular dependency from time module + dur +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Co-authored-by: Алексей +Signed-off-by: Naveen M K +--- + Lib/distutils/cygwinccompiler.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/Lib/distutils/cygwinccompiler.py b/Lib/distutils/cygwinccompiler.py +index 39ad631..5b281e2 100644 +--- a/Lib/distutils/cygwinccompiler.py ++++ b/Lib/distutils/cygwinccompiler.py +@@ -48,7 +48,6 @@ cygwin in no-cygwin mode). + import os + import sys + import copy +-from subprocess import Popen, PIPE, check_output + import re + + from distutils.unixccompiler import UnixCCompiler +@@ -383,6 +382,7 @@ def _find_exe_version(cmd): + executable = cmd.split()[0] + if find_executable(executable) is None: + return None ++ from subprocess import Popen, PIPE + out = Popen(cmd, shell=True, stdout=PIPE).stdout + try: + out_string = out.read() +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0088-distutils-generalization-of-posix-build-in-distutils.patch b/mingw-w64-python3.10/0088-distutils-generalization-of-posix-build-in-distutils.patch new file mode 100644 index 0000000000..9cdf3139a4 --- /dev/null +++ b/mingw-w64-python3.10/0088-distutils-generalization-of-posix-build-in-distutils.patch @@ -0,0 +1,63 @@ +From 07ce9c8988f4e0aa18da5529156421b36dc10192 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?= + +Date: Thu, 17 Jun 2021 18:51:41 +0530 +Subject: [PATCH 088/N] distutils: generalization of posix build in distutils + sys + +Co-authored-by: Naveen M K +Signed-off-by: Naveen M K +--- + Lib/distutils/sysconfig.py | 21 ++++++++++++++++++--- + 1 file changed, 18 insertions(+), 3 deletions(-) + +diff --git a/Lib/distutils/sysconfig.py b/Lib/distutils/sysconfig.py +index cb39cd6..3c7b766 100644 +--- a/Lib/distutils/sysconfig.py ++++ b/Lib/distutils/sysconfig.py +@@ -69,8 +69,23 @@ def parse_config_h(fp, g=None): + + _python_build = partial(is_python_build, check_home=True) + _init_posix = partial(sysconfig_init_posix, _config_vars) +-_init_nt = partial(_init_non_posix, _config_vars) + ++def _posix_build(): ++ # GCC[mingw*] use posix build system ++ # Check for cross builds explicitly ++ host_platform = os.environ.get("_PYTHON_HOST_PLATFORM") ++ if host_platform: ++ if host_platform.startswith('mingw'): ++ return True ++ return os.name == 'posix' or \ ++ (os.name == "nt" and 'GCC' in sys.version) ++posix_build = _posix_build() ++ ++ ++def _init_nt(): ++ if posix_build: ++ return _init_posix(_config_vars) ++ return _init_non_posix(_config_vars) + + # Similar function is also implemented in sysconfig as _parse_makefile + # but without the parsing capabilities of distutils.text_file.TextFile. +@@ -295,7 +310,7 @@ def get_python_inc(plat_specific=0, prefix=None): + """ + if prefix is None: + prefix = plat_specific and BASE_EXEC_PREFIX or BASE_PREFIX +- if os.name == "posix": ++ if posix_build: + if python_build: + # Assume the executable is in the build directory. The + # pyconfig.h file should be in the same directory. Since +@@ -342,7 +357,7 @@ def get_python_lib(plat_specific=0, standard_lib=0, prefix=None): + else: + prefix = plat_specific and EXEC_PREFIX or PREFIX + +- if os.name == "posix": ++ if posix_build: + if plat_specific or standard_lib: + # Platform-specific modules (any module from a non-pure-Python + # module distribution) or standard Python library modules. +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0089-distutils-mingw-sysconfig-like-posix.patch b/mingw-w64-python3.10/0089-distutils-mingw-sysconfig-like-posix.patch new file mode 100644 index 0000000000..2ef797011f --- /dev/null +++ b/mingw-w64-python3.10/0089-distutils-mingw-sysconfig-like-posix.patch @@ -0,0 +1,29 @@ +From 5e59c7ba3aca1ba41a906ef0fd07d28ebbfe4808 Mon Sep 17 00:00:00 2001 +From: Christoph Reiter +Date: Tue, 21 Sep 2021 20:53:29 +0200 +Subject: [PATCH 089/N] distutils: mingw sysconfig like posix + +Signed-off-by: Naveen M K +--- + Lib/distutils/command/build_ext.py | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/Lib/distutils/command/build_ext.py b/Lib/distutils/command/build_ext.py +index 1c9d471..1dbdfe0 100644 +--- a/Lib/distutils/command/build_ext.py ++++ b/Lib/distutils/command/build_ext.py +@@ -221,9 +221,10 @@ class build_ext(Command): + if sys.platform[:6] == 'cygwin': + if sys.executable.startswith(os.path.join(sys.exec_prefix, "bin")): + # building third party extensions ++ config_dir_name = os.path.basename(sysconfig.get_config_var('LIBPL')) + self.library_dirs.append(os.path.join(sys.prefix, "lib", + "python" + get_python_version(), +- "config")) ++ config_dir_name)) + else: + # building python standard extensions + self.library_dirs.append('.') +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0090-distutils-get_versions-fixes.patch b/mingw-w64-python3.10/0090-distutils-get_versions-fixes.patch new file mode 100644 index 0000000000..1f9489f975 --- /dev/null +++ b/mingw-w64-python3.10/0090-distutils-get_versions-fixes.patch @@ -0,0 +1,57 @@ +From eca059099caea8790126fe7c56e961dc3b51d337 Mon Sep 17 00:00:00 2001 +From: Christoph Reiter +Date: Tue, 21 Sep 2021 21:14:31 +0200 +Subject: [PATCH 090/N] distutils: get_versions() fixes +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Co-authored-by: Алексей +Co-authored-by: Christoph Reiter +Signed-off-by: Naveen M K +--- + Lib/distutils/cygwinccompiler.py | 14 ++++++++++++-- + 1 file changed, 12 insertions(+), 2 deletions(-) + +diff --git a/Lib/distutils/cygwinccompiler.py b/Lib/distutils/cygwinccompiler.py +index 5b281e2..fba3485 100644 +--- a/Lib/distutils/cygwinccompiler.py ++++ b/Lib/distutils/cygwinccompiler.py +@@ -56,6 +56,7 @@ from distutils.errors import (DistutilsExecError, CCompilerError, + CompileError, UnknownFileError) + from distutils.version import LooseVersion + from distutils.spawn import find_executable ++from subprocess import Popen, PIPE, check_output + + def get_msvcr(): + """Include the appropriate MSVC runtime library if Python was built +@@ -371,7 +372,7 @@ def check_config_h(): + return (CONFIG_H_UNCERTAIN, + "couldn't read '%s': %s" % (fn, exc.strerror)) + +-RE_VERSION = re.compile(br'(\d+\.\d+(\.\d+)*)') ++RE_VERSION = re.compile(br'[\D\s]*(\d+\.\d+(\.\d+)*)[\D\s]*') + + def _find_exe_version(cmd): + """Find the version of an executable by running `cmd` in the shell. +@@ -400,7 +401,16 @@ def get_versions(): + + If not possible it returns None for it. + """ +- commands = ['gcc -dumpversion', 'ld -v', 'dllwrap --version'] ++ gcc = os.environ.get('CC') or 'gcc' ++ ld = 'ld' ++ out = Popen(gcc+' --print-prog-name ld', shell=True, stdout=PIPE).stdout ++ try: ++ ld = test=str(out.read(),encoding='utf-8').strip() ++ finally: ++ out.close() ++ dllwrap = os.environ.get('DLLWRAP') or 'dllwrap' ++ # MinGW64 doesn't have i686-w64-mingw32-ld, so instead we ask gcc. ++ commands = [gcc+' -dumpversion', ld+' -v', dllwrap+' --version'] + return tuple([_find_exe_version(cmd) for cmd in commands]) + + def is_cygwingcc(): +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0091-distutils-install-layout-as-posix.patch b/mingw-w64-python3.10/0091-distutils-install-layout-as-posix.patch new file mode 100644 index 0000000000..ad53edcc1d --- /dev/null +++ b/mingw-w64-python3.10/0091-distutils-install-layout-as-posix.patch @@ -0,0 +1,30 @@ +From d7924f967e32aba1b6cc6dc5c32d30c4c08a4a5a Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?= + +Date: Thu, 17 Jun 2021 18:51:59 +0530 +Subject: [PATCH 091/N] distutils: install layout as posix + +Co-authored-by: Naveen M K +Signed-off-by: Naveen M K +--- + Lib/distutils/command/install.py | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/Lib/distutils/command/install.py b/Lib/distutils/command/install.py +index 26696cf..5d5f2cb 100644 +--- a/Lib/distutils/command/install.py ++++ b/Lib/distutils/command/install.py +@@ -72,8 +72,8 @@ if HAS_USER_SITE: + INSTALL_SCHEMES['nt_user'] = { + 'purelib': '$usersite', + 'platlib': '$usersite', +- 'headers': '$userbase/Python$py_version_nodot/Include/$dist_name', +- 'scripts': '$userbase/Python$py_version_nodot/Scripts', ++ 'headers': '$userbase/include/python$py_version_short$abiflags/$dist_name', ++ 'scripts': '$userbase/bin', + 'data' : '$userbase', + } + +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0092-distutils-msys-convert_path-fix-and-root-hack.patch b/mingw-w64-python3.10/0092-distutils-msys-convert_path-fix-and-root-hack.patch new file mode 100644 index 0000000000..feea1ea8cd --- /dev/null +++ b/mingw-w64-python3.10/0092-distutils-msys-convert_path-fix-and-root-hack.patch @@ -0,0 +1,81 @@ +From 810c367f10ed1122a6b230863ac1f63411f57e8c Mon Sep 17 00:00:00 2001 +From: Christoph Reiter +Date: Tue, 21 Sep 2021 21:18:50 +0200 +Subject: [PATCH 092/N] distutils: msys convert_path fix and root hack + +Co-authored-by: Naveen M K +Signed-off-by: Naveen M K +--- + Lib/distutils/command/install.py | 3 ++- + Lib/distutils/util.py | 26 ++++++++++++++++++++++++-- + 2 files changed, 26 insertions(+), 3 deletions(-) + +diff --git a/Lib/distutils/command/install.py b/Lib/distutils/command/install.py +index 5d5f2cb..d5e340a 100644 +--- a/Lib/distutils/command/install.py ++++ b/Lib/distutils/command/install.py +@@ -363,7 +363,8 @@ class install(Command): + + # Convert directories from Unix /-separated syntax to the local + # convention. +- self.convert_paths('lib', 'purelib', 'platlib', ++ self.convert_paths('base', 'platbase', ++ 'lib', 'purelib', 'platlib', + 'scripts', 'data', 'headers') + if HAS_USER_SITE: + self.convert_paths('userbase', 'usersite') +diff --git a/Lib/distutils/util.py b/Lib/distutils/util.py +index fb7d1ad..ed9d509 100644 +--- a/Lib/distutils/util.py ++++ b/Lib/distutils/util.py +@@ -132,6 +132,13 @@ def convert_path (pathname): + paths.remove('.') + if not paths: + return os.curdir ++ # On Windows, if paths is ['C:','folder','subfolder'] then ++ # os.path.join(*paths) will return 'C:folder\subfolder' which ++ # is thus relative to the CWD on that drive. So we work around ++ # this by adding a \ to path[0] ++ if (len(paths) > 0 and paths[0].endswith(':') and ++ sys.platform == "win32" and sys.version.find("GCC") >= 0): ++ paths[0] += '\\' + return os.path.join(*paths) + + # convert_path () +@@ -142,6 +149,10 @@ def change_root (new_root, pathname): + relative, this is equivalent to "os.path.join(new_root,pathname)". + Otherwise, it requires making 'pathname' relative and then joining the + two, which is tricky on DOS/Windows and Mac OS. ++ ++ If on Windows or OS/2 and both new_root and pathname are on different ++ drives, raises DistutilsChangeRootError as this is nonsensical, ++ otherwise use drive which can be in either of new_root or pathname. + """ + if os.name == 'posix': + if not os.path.isabs(pathname): +@@ -151,9 +162,20 @@ def change_root (new_root, pathname): + + elif os.name == 'nt': + (drive, path) = os.path.splitdrive(pathname) +- if path[0] == '\\': ++ if path[0] == os.sep: + path = path[1:] +- return os.path.join(new_root, path) ++ (drive_r, path_r) = os.path.splitdrive(new_root) ++ if path_r and path_r[0] == os.sep: ++ path_r = path_r[1:] ++ drive_used = '' ++ if len(drive) == 2 and len(drive_r) == 2 and drive != drive_r: ++ raise DistutilsChangeRootError("root and pathname not on same drive (%s, %s)" ++ % (drive_r,drive)) ++ elif len(drive_r) == 2: ++ drive_used = drive_r+os.sep ++ elif len(drive) == 2: ++ drive_used = drive+os.sep ++ return os.path.join(drive_used+path_r, path) + + else: + raise DistutilsPlatformError("nothing known about platform '%s'" % os.name) +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0093-distutils-mingw-build-optimized-ext.patch b/mingw-w64-python3.10/0093-distutils-mingw-build-optimized-ext.patch new file mode 100644 index 0000000000..38e750e3df --- /dev/null +++ b/mingw-w64-python3.10/0093-distutils-mingw-build-optimized-ext.patch @@ -0,0 +1,35 @@ +From c13e972bd24b6949d3a11f0b1b0cca5842d0255e Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?= + +Date: Thu, 17 Jun 2021 18:52:04 +0530 +Subject: [PATCH 093/N] distutils: mingw build optimized ext +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Co-authored-by: Алексей +Signed-off-by: Naveen M K +--- + Lib/distutils/cygwinccompiler.py | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/Lib/distutils/cygwinccompiler.py b/Lib/distutils/cygwinccompiler.py +index fba3485..bb97880 100644 +--- a/Lib/distutils/cygwinccompiler.py ++++ b/Lib/distutils/cygwinccompiler.py +@@ -303,9 +303,9 @@ class Mingw32CCompiler(CygwinCCompiler): + raise CCompilerError( + 'Cygwin gcc cannot be used with --compiler=mingw32') + +- self.set_executables(compiler='gcc -O -Wall', +- compiler_so='gcc -mdll -O -Wall', +- compiler_cxx='g++ -O -Wall', ++ self.set_executables(compiler='gcc -O2 -Wall', ++ compiler_so='gcc -mdll -O2 -Wall', ++ compiler_cxx='g++ -O2 -Wall', + linker_exe='gcc', + linker_so='%s %s %s' + % (self.linker_dll, shared_option, +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0094-distutils-cygwinccompiler-dont-strip-modules-if-pyde.patch b/mingw-w64-python3.10/0094-distutils-cygwinccompiler-dont-strip-modules-if-pyde.patch new file mode 100644 index 0000000000..e3b3f19664 --- /dev/null +++ b/mingw-w64-python3.10/0094-distutils-cygwinccompiler-dont-strip-modules-if-pyde.patch @@ -0,0 +1,31 @@ +From a971f45dfc338131ee3c5957a2452579dab4bd68 Mon Sep 17 00:00:00 2001 +From: Ray Donnelly +Date: Thu, 17 Jun 2021 18:52:05 +0530 +Subject: [PATCH 094/N] distutils: cygwinccompiler dont strip modules if + pydebug +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Co-authored-by: Алексей +Signed-off-by: Naveen M K +--- + Lib/distutils/cygwinccompiler.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/Lib/distutils/cygwinccompiler.py b/Lib/distutils/cygwinccompiler.py +index bb97880..c134525 100644 +--- a/Lib/distutils/cygwinccompiler.py ++++ b/Lib/distutils/cygwinccompiler.py +@@ -236,7 +236,7 @@ class CygwinCCompiler(UnixCCompiler): + # (On my machine: 10KiB < stripped_file < ??100KiB + # unstripped_file = stripped_file + XXX KiB + # ( XXX=254 for a typical python extension)) +- if not debug: ++ if not debug and not hasattr(sys, 'gettotalrefcount'): + extra_preargs.append("-s") + + UnixCCompiler.link(self, target_desc, objects, output_filename, +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0095-distutils-get-compilers-from-env-vars.patch b/mingw-w64-python3.10/0095-distutils-get-compilers-from-env-vars.patch new file mode 100644 index 0000000000..76973727e4 --- /dev/null +++ b/mingw-w64-python3.10/0095-distutils-get-compilers-from-env-vars.patch @@ -0,0 +1,163 @@ +From edbda23fbc94dbb9e99b4eca62e57bc124535826 Mon Sep 17 00:00:00 2001 +From: Long Nguyen +Date: Tue, 17 Aug 2021 20:26:05 +0700 +Subject: [PATCH 095/N] distutils: get compilers from env vars + +Upstreamed at https://github.com/pypa/distutils/pull/26 + +This would allow us to bypass all gcc workarounds when we're using clang + +Signed-off-by: Naveen M K +--- + Lib/distutils/cygwinccompiler.py | 91 ++++++++++++++++++-------------- + 1 file changed, 51 insertions(+), 40 deletions(-) + +diff --git a/Lib/distutils/cygwinccompiler.py b/Lib/distutils/cygwinccompiler.py +index c134525..75bc17b 100644 +--- a/Lib/distutils/cygwinccompiler.py ++++ b/Lib/distutils/cygwinccompiler.py +@@ -44,6 +44,8 @@ cygwin in no-cygwin mode). + # (ld supports -shared) + # * mingw gcc 3.2/ld 2.13 works + # (ld supports -shared) ++# * llvm-mingw with Clang 11 works ++# (lld supports -shared) + + import os + import sys +@@ -110,41 +112,46 @@ class CygwinCCompiler(UnixCCompiler): + "Compiling may fail because of undefined preprocessor macros." + % details) + +- self.gcc_version, self.ld_version, self.dllwrap_version = \ +- get_versions() +- self.debug_print(self.compiler_type + ": gcc %s, ld %s, dllwrap %s\n" % +- (self.gcc_version, +- self.ld_version, +- self.dllwrap_version) ) +- +- # ld_version >= "2.10.90" and < "2.13" should also be able to use +- # gcc -mdll instead of dllwrap +- # Older dllwraps had own version numbers, newer ones use the +- # same as the rest of binutils ( also ld ) +- # dllwrap 2.10.90 is buggy +- if self.ld_version >= "2.10.90": +- self.linker_dll = "gcc" +- else: +- self.linker_dll = "dllwrap" ++ self.cc = os.environ.get('CC', 'gcc') ++ self.cxx = os.environ.get('CXX', 'g++') ++ ++ if ('gcc' in self.cc): # Start gcc workaround ++ self.gcc_version, self.ld_version, self.dllwrap_version = \ ++ get_versions() ++ self.debug_print(self.compiler_type + ": gcc %s, ld %s, dllwrap %s\n" % ++ (self.gcc_version, ++ self.ld_version, ++ self.dllwrap_version) ) ++ ++ # ld_version >= "2.10.90" and < "2.13" should also be able to use ++ # gcc -mdll instead of dllwrap ++ # Older dllwraps had own version numbers, newer ones use the ++ # same as the rest of binutils ( also ld ) ++ # dllwrap 2.10.90 is buggy ++ if self.ld_version >= "2.10.90": ++ self.linker_dll = self.cc ++ else: ++ self.linker_dll = "dllwrap" + +- # ld_version >= "2.13" support -shared so use it instead of +- # -mdll -static +- if self.ld_version >= "2.13": ++ # ld_version >= "2.13" support -shared so use it instead of ++ # -mdll -static ++ if self.ld_version >= "2.13": ++ shared_option = "-shared" ++ else: ++ shared_option = "-mdll -static" ++ else: # Assume linker is up to date ++ self.linker_dll = self.cc + shared_option = "-shared" +- else: +- shared_option = "-mdll -static" + +- # Hard-code GCC because that's what this is all about. +- # XXX optimization, warnings etc. should be customizable. +- self.set_executables(compiler='gcc -mcygwin -O -Wall', +- compiler_so='gcc -mcygwin -mdll -O -Wall', +- compiler_cxx='g++ -mcygwin -O -Wall', +- linker_exe='gcc -mcygwin', ++ self.set_executables(compiler='%s -mcygwin -O -Wall' % self.cc, ++ 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=('%s -mcygwin %s' % + (self.linker_dll, shared_option))) + + # cygwin and mingw32 need different sets of libraries +- if self.gcc_version == "2.91.57": ++ if ('gcc' in self.cc and self.gcc_version == "2.91.57"): + # cygwin shouldn't need msvcrt, but without the dlls will crash + # (gcc version 2.91.57) -- perhaps something about initialization + self.dll_libraries=["msvcrt"] +@@ -287,26 +294,26 @@ class Mingw32CCompiler(CygwinCCompiler): + + # ld_version >= "2.13" support -shared so use it instead of + # -mdll -static +- if self.ld_version >= "2.13": +- shared_option = "-shared" +- else: ++ if ('gcc' in self.cc and self.ld_version < "2.13"): + shared_option = "-mdll -static" ++ else: ++ shared_option = "-shared" + + # A real mingw32 doesn't need to specify a different entry point, + # but cygwin 2.91.57 in no-cygwin-mode needs it. +- if self.gcc_version <= "2.91.57": ++ if ('gcc' in self.cc and self.gcc_version <= "2.91.57"): + entry_point = '--entry _DllMain@12' + else: + entry_point = '' + +- if is_cygwingcc(): ++ if is_cygwincc(self.cc): + raise CCompilerError( + 'Cygwin gcc cannot be used with --compiler=mingw32') + +- self.set_executables(compiler='gcc -O2 -Wall', +- compiler_so='gcc -mdll -O2 -Wall', +- compiler_cxx='g++ -O2 -Wall', +- linker_exe='gcc', ++ self.set_executables(compiler='%s -O2 -Wall' % self.cc, ++ compiler_so='%s -mdll -O2 -Wall' % self.cc, ++ compiler_cxx='%s -O2 -Wall' % self.cxx, ++ linker_exe='%s' % self.cc, + linker_so='%s %s %s' + % (self.linker_dll, shared_option, + entry_point)) +@@ -357,6 +364,10 @@ def check_config_h(): + if "GCC" in sys.version: + return CONFIG_H_OK, "sys.version mentions 'GCC'" + ++ # Clang would also work ++ if "Clang" in sys.version: ++ return CONFIG_H_OK, "sys.version mentions 'Clang'" ++ + # let's see if __GNUC__ is mentioned in python.h + fn = sysconfig.get_config_h_filename() + try: +@@ -413,7 +424,7 @@ def get_versions(): + commands = [gcc+' -dumpversion', ld+' -v', dllwrap+' --version'] + return tuple([_find_exe_version(cmd) for cmd in commands]) + +-def is_cygwingcc(): +- '''Try to determine if the gcc that would be used is from cygwin.''' +- out_string = check_output(['gcc', '-dumpmachine']) ++def is_cygwincc(cc): ++ '''Try to determine if the compiler that would be used is from cygwin.''' ++ out_string = check_output([cc, '-dumpmachine']) + return out_string.strip().endswith(b'cygwin') +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0096-distutils-add-windmc-to-cygwinccompiler.patch b/mingw-w64-python3.10/0096-distutils-add-windmc-to-cygwinccompiler.patch new file mode 100644 index 0000000000..9f475a5e95 --- /dev/null +++ b/mingw-w64-python3.10/0096-distutils-add-windmc-to-cygwinccompiler.patch @@ -0,0 +1,59 @@ +From 9c089d5a4185ae926f5f2e7517d83cf6f92a9f6d Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?= + +Date: Thu, 17 Jun 2021 18:52:28 +0530 +Subject: [PATCH 096/N] distutils: add windmc to cygwinccompiler + +Signed-off-by: Naveen M K +--- + Lib/distutils/cygwinccompiler.py | 26 ++++++++++++++++++++++++-- + 1 file changed, 24 insertions(+), 2 deletions(-) + +diff --git a/Lib/distutils/cygwinccompiler.py b/Lib/distutils/cygwinccompiler.py +index 75bc17b..6a40e80 100644 +--- a/Lib/distutils/cygwinccompiler.py ++++ b/Lib/distutils/cygwinccompiler.py +@@ -170,6 +170,28 @@ class CygwinCCompiler(UnixCCompiler): + self.spawn(["windres", "-i", src, "-o", obj]) + except DistutilsExecError as msg: + raise CompileError(msg) ++ elif ext == '.mc': ++ # Adapted from msvc9compiler: ++ # ++ # Compile .MC to .RC file to .RES file. ++ # * '-h dir' specifies the directory for the generated include file ++ # * '-r dir' specifies the target directory of the generated RC file and the binary message resource it includes ++ # ++ # For now (since there are no options to change this), ++ # we use the source-directory for the include file and ++ # the build directory for the RC file and message ++ # resources. This works at least for win32all. ++ h_dir = os.path.dirname(src) ++ rc_dir = os.path.dirname(obj) ++ try: ++ # first compile .MC to .RC and .H file ++ self.spawn(['windmc'] + ['-h', h_dir, '-r', rc_dir] + [src]) ++ base, _ = os.path.splitext(os.path.basename(src)) ++ rc_file = os.path.join(rc_dir, base + '.rc') ++ # then compile .RC to .RES file ++ self.spawn(['windres', '-i', rc_file, '-o', obj]) ++ except DistutilsExecError as msg: ++ raise CompileError(msg) + else: # for other files use the C-compiler + try: + self.spawn(self.compiler_so + cc_args + [src, '-o', obj] + +@@ -264,9 +286,9 @@ class CygwinCCompiler(UnixCCompiler): + base, ext = os.path.splitext(src_name) + # use 'normcase' only for resource suffixes + ext_normcase = os.path.normcase(ext) +- if ext_normcase in ['.rc','.res']: ++ if ext_normcase in ['.rc', '.res', '.mc']: + ext = ext_normcase +- if ext not in (self.src_extensions + ['.rc','.res']): ++ if ext not in (self.src_extensions + ['.rc', '.res', '.mc']): + raise UnknownFileError("unknown file type '%s' (from '%s')" % \ + (ext, src_name)) + base = os.path.splitdrive(base)[1] # Chop off the drive +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0097-distutils-fix-msvc9-import.patch b/mingw-w64-python3.10/0097-distutils-fix-msvc9-import.patch new file mode 100644 index 0000000000..3df783c9f7 --- /dev/null +++ b/mingw-w64-python3.10/0097-distutils-fix-msvc9-import.patch @@ -0,0 +1,39 @@ +From 3f2d640f0c1dda5b2a37385ae17c19276494717e Mon Sep 17 00:00:00 2001 +From: Christoph Reiter +Date: Thu, 17 Jun 2021 18:52:24 +0530 +Subject: [PATCH 097/N] distutils: fix msvc9 import +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Co-authored-by: Алексей +Signed-off-by: Naveen M K +--- + Lib/distutils/msvc9compiler.py | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/Lib/distutils/msvc9compiler.py b/Lib/distutils/msvc9compiler.py +index a7976fb..c341679 100644 +--- a/Lib/distutils/msvc9compiler.py ++++ b/Lib/distutils/msvc9compiler.py +@@ -291,8 +291,6 @@ def query_vcvarsall(version, arch="x86"): + + # More globals + VERSION = get_build_version() +-if VERSION < 8.0: +- raise DistutilsPlatformError("VC %0.1f is not supported by this module" % VERSION) + # MACROS = MacroExpander(VERSION) + + class MSVCCompiler(CCompiler) : +@@ -327,6 +325,8 @@ class MSVCCompiler(CCompiler) : + + def __init__(self, verbose=0, dry_run=0, force=0): + CCompiler.__init__ (self, verbose, dry_run, force) ++ if VERSION < 8.0: ++ raise DistutilsPlatformError("VC %0.1f is not supported by this module" % VERSION) + self.__version = VERSION + self.__root = r"Software\Microsoft\VisualStudio" + # self.__macros = MACROS +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0098-distutils-mingw-add-LIBPL-to-library-dirs.patch b/mingw-w64-python3.10/0098-distutils-mingw-add-LIBPL-to-library-dirs.patch new file mode 100644 index 0000000000..9865368af2 --- /dev/null +++ b/mingw-w64-python3.10/0098-distutils-mingw-add-LIBPL-to-library-dirs.patch @@ -0,0 +1,27 @@ +From d7aa0ff8ef74ee6f3a94dd8572bda99321c5879c Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?= + +Date: Thu, 17 Jun 2021 18:52:06 +0530 +Subject: [PATCH 098/N] distutils: mingw add LIBPL to library dirs + +Signed-off-by: Naveen M K +--- + Lib/distutils/command/build_ext.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/Lib/distutils/command/build_ext.py b/Lib/distutils/command/build_ext.py +index 1dbdfe0..1598735 100644 +--- a/Lib/distutils/command/build_ext.py ++++ b/Lib/distutils/command/build_ext.py +@@ -218,7 +218,7 @@ class build_ext(Command): + + # For extensions under Cygwin, Python's library directory must be + # appended to library_dirs +- if sys.platform[:6] == 'cygwin': ++ if sys.platform[:6] == 'cygwin' or self.plat_name.startswith(('mingw')): + if sys.executable.startswith(os.path.join(sys.exec_prefix, "bin")): + # building third party extensions + config_dir_name = os.path.basename(sysconfig.get_config_var('LIBPL')) +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0099-distutils-Change-the-get_platform-method-in-distutil.patch b/mingw-w64-python3.10/0099-distutils-Change-the-get_platform-method-in-distutil.patch new file mode 100644 index 0000000000..2e2ba5ce66 --- /dev/null +++ b/mingw-w64-python3.10/0099-distutils-Change-the-get_platform-method-in-distutil.patch @@ -0,0 +1,44 @@ +From c347c9bbb8f570af631681f8feaa3466c2bd9d8a Mon Sep 17 00:00:00 2001 +From: Christoph Reiter +Date: Tue, 21 Sep 2021 21:37:23 +0200 +Subject: [PATCH 099/N] distutils: Change the `get_platform()` method in + distutils to match sysconfig + +This would possibly fix building wheels when mingw python +is used and would be unique to each python same as EXT_SUFFIX. + +Signed-off-by: Naveen M K +--- + Lib/distutils/util.py | 16 ++++++++++++++-- + 1 file changed, 14 insertions(+), 2 deletions(-) + +diff --git a/Lib/distutils/util.py b/Lib/distutils/util.py +index ed9d509..28e623b 100644 +--- a/Lib/distutils/util.py ++++ b/Lib/distutils/util.py +@@ -37,8 +37,20 @@ def get_host_platform(): + + """ + if os.name == 'nt': +- if 'GCC' in sys.version: +- return 'mingw' ++ if 'gcc' in sys.version.lower(): ++ if 'ucrt' in sys.version.lower(): ++ if 'amd64' in sys.version.lower(): ++ return 'mingw_x86_64_ucrt' ++ return 'mingw_i686_ucrt' ++ if 'clang' in sys.version.lower(): ++ if 'amd64' in sys.version.lower(): ++ return 'mingw_x86_64_clang' ++ if 'arm64' in sys.version.lower(): ++ return 'mingw_aarch64' ++ return 'mingw_i686_clang' ++ if 'amd64' in sys.version.lower(): ++ return 'mingw_x86_64' ++ return 'mingw_i686' + if 'amd64' in sys.version.lower(): + return 'win-amd64' + if '(arm)' in sys.version.lower(): +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0100-build-Fix-ncursesw-include-lookup.patch b/mingw-w64-python3.10/0100-build-Fix-ncursesw-include-lookup.patch new file mode 100644 index 0000000000..28410aa5fc --- /dev/null +++ b/mingw-w64-python3.10/0100-build-Fix-ncursesw-include-lookup.patch @@ -0,0 +1,67 @@ +From 97d01b91031fd3d8a9a31b4657dd5596c0311b55 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?= + +Date: Thu, 17 Jun 2021 18:52:09 +0530 +Subject: [PATCH 100/N] build: Fix ncursesw include lookup + +Mirror what is already done for libffi; Look it up via +pkg-config and use the exported path via sysconfig in setup.py + +Signed-off-by: Naveen M K +--- + Makefile.pre.in | 1 + + configure.ac | 9 ++++++++- + setup.py | 2 +- + 3 files changed, 10 insertions(+), 2 deletions(-) + +diff --git a/Makefile.pre.in b/Makefile.pre.in +index e526be2..da1d638 100644 +--- a/Makefile.pre.in ++++ b/Makefile.pre.in +@@ -319,6 +319,7 @@ IO_OBJS= \ + ########################################################################## + + LIBFFI_INCLUDEDIR= @LIBFFI_INCLUDEDIR@ ++NCURSESW_INCLUDEDIR= @NCURSESW_INCLUDEDIR@ + + ########################################################################## + # Parser +diff --git a/configure.ac b/configure.ac +index ca7e7a2..ee6db8e 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -5603,10 +5603,17 @@ then + [Define if you have struct stat.st_mtimensec]) + fi + ++if test -n "$PKG_CONFIG"; then ++ NCURSESW_INCLUDEDIR="`"$PKG_CONFIG" ncursesw --cflags-only-I 2>/dev/null | sed -e 's/^-I//;s/ *$//'`" ++else ++ NCURSESW_INCLUDEDIR="" ++fi ++AC_SUBST(NCURSESW_INCLUDEDIR) ++ + # first curses header check + ac_save_cppflags="$CPPFLAGS" + if test "$cross_compiling" = no; then +- CPPFLAGS="$CPPFLAGS -I/usr/include/ncursesw" ++ CPPFLAGS="$CPPFLAGS -I$NCURSESW_INCLUDEDIR" + fi + + AC_CHECK_HEADERS(curses.h ncurses.h) +diff --git a/setup.py b/setup.py +index 5eb9b07..67e290a 100644 +--- a/setup.py ++++ b/setup.py +@@ -1192,7 +1192,7 @@ class PyBuildExt(build_ext): + if curses_library == 'ncursesw': + curses_defines.append(('HAVE_NCURSESW', '1')) + if not CROSS_COMPILING: +- curses_includes.append('/usr/include/ncursesw') ++ curses_includes.append(sysconfig.get_config_var("NCURSESW_INCLUDEDIR")) + # Bug 1464056: If _curses.so links with ncursesw, + # _curses_panel.so must link with panelw. + panel_library = 'panelw' +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0101-tests-fix-test_bytes.patch b/mingw-w64-python3.10/0101-tests-fix-test_bytes.patch new file mode 100644 index 0000000000..06c4e5fc3e --- /dev/null +++ b/mingw-w64-python3.10/0101-tests-fix-test_bytes.patch @@ -0,0 +1,29 @@ +From 14dd62fba06c2b2c369d27049cc25baf54929e9b Mon Sep 17 00:00:00 2001 +From: Christoph Reiter +Date: Fri, 23 Jul 2021 08:51:32 +0200 +Subject: [PATCH 101/N] tests: fix test_bytes + +%p has different casing with mingw-w64, but it's implementation defined. +Change the test to the mingw-w64 variant. + +Signed-off-by: Naveen M K +--- + Lib/test/test_bytes.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/Lib/test/test_bytes.py b/Lib/test/test_bytes.py +index 13ad238..65181e0 100644 +--- a/Lib/test/test_bytes.py ++++ b/Lib/test/test_bytes.py +@@ -1075,7 +1075,7 @@ class BytesTest(BaseBytesTest, unittest.TestCase): + + if os.name == 'nt': + # Windows (MSCRT) +- ptr_format = '0x%0{}X'.format(2 * sizeof_ptr) ++ ptr_format = '0x%0{}x'.format(2 * sizeof_ptr) + def ptr_formatter(ptr): + return (ptr_format % ptr) + else: +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0102-time-fix-strftime-not-raising-for-invalid-year-value.patch b/mingw-w64-python3.10/0102-time-fix-strftime-not-raising-for-invalid-year-value.patch new file mode 100644 index 0000000000..e4bdbb1309 --- /dev/null +++ b/mingw-w64-python3.10/0102-time-fix-strftime-not-raising-for-invalid-year-value.patch @@ -0,0 +1,30 @@ +From 1dba7da22bed0dcf8e06fb225141049e46d67665 Mon Sep 17 00:00:00 2001 +From: Christoph Reiter +Date: Fri, 23 Jul 2021 08:52:50 +0200 +Subject: [PATCH 102/N] time: fix strftime not raising for invalid year + values + +It's crt specific and not compiler specific. +This fixes a test case in test_time + +Signed-off-by: Naveen M K +--- + Modules/timemodule.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/Modules/timemodule.c b/Modules/timemodule.c +index 4caacc3..4787fa3 100644 +--- a/Modules/timemodule.c ++++ b/Modules/timemodule.c +@@ -759,7 +759,7 @@ time_strftime(PyObject *self, PyObject *args) + return NULL; + } + +-#if defined(_MSC_VER) || (defined(__sun) && defined(__SVR4)) || defined(_AIX) || defined(__VXWORKS__) ++#if defined(MS_WINDOWS) || (defined(__sun) && defined(__SVR4)) || defined(_AIX) || defined(__VXWORKS__) + if (buf.tm_year + 1900 < 1 || 9999 < buf.tm_year + 1900) { + PyErr_SetString(PyExc_ValueError, + "strftime() requires year in [1; 9999]"); +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0103-ctypes-find_library-c-should-return-None-with-ucrt.patch b/mingw-w64-python3.10/0103-ctypes-find_library-c-should-return-None-with-ucrt.patch new file mode 100644 index 0000000000..456cb1dfd8 --- /dev/null +++ b/mingw-w64-python3.10/0103-ctypes-find_library-c-should-return-None-with-ucrt.patch @@ -0,0 +1,43 @@ +From db63bc40657c78ce74ebd97f66546cdd09c561ce Mon Sep 17 00:00:00 2001 +From: Christoph Reiter +Date: Fri, 23 Jul 2021 18:23:58 +0200 +Subject: [PATCH 103/N] ctypes: find_library('c') should return None with + ucrt + +Just like with MSVC. This fixes a test in test_ctypes. + +Signed-off-by: Naveen M K +--- + Lib/ctypes/util.py | 9 +++++++++ + 1 file changed, 9 insertions(+) + +diff --git a/Lib/ctypes/util.py b/Lib/ctypes/util.py +index 0c2510e..48ddb3b 100644 +--- a/Lib/ctypes/util.py ++++ b/Lib/ctypes/util.py +@@ -31,6 +31,12 @@ if os.name == "nt": + # else we don't know what version of the compiler this is + return None + ++ def find_msvcrt_mingw(): ++ is_ucrt = 'clang' in sys.version.lower() or 'ucrt' in sys.version.lower() ++ if is_ucrt: ++ return None ++ return 'msvcrt.dll' ++ + def find_msvcrt(): + """Return the name of the VC runtime dll""" + version = _get_build_version() +@@ -54,6 +60,9 @@ if os.name == "nt": + + def find_library(name): + if name in ('c', 'm'): ++ import sysconfig ++ if sysconfig.get_platform().startswith('mingw'): ++ return find_msvcrt_mingw() + return find_msvcrt() + # See MSDN for the REAL search order. + for directory in os.environ['PATH'].split(os.pathsep): +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0104-build-Disable-checks-for-dlopen-dlfcn.patch b/mingw-w64-python3.10/0104-build-Disable-checks-for-dlopen-dlfcn.patch new file mode 100644 index 0000000000..db247a1a9a --- /dev/null +++ b/mingw-w64-python3.10/0104-build-Disable-checks-for-dlopen-dlfcn.patch @@ -0,0 +1,68 @@ +From 38bf0a1b25d07fbf4e05c4efb4f9058d3fa8faef Mon Sep 17 00:00:00 2001 +From: Christoph Reiter +Date: Sun, 25 Jul 2021 13:54:12 +0200 +Subject: [PATCH 104/N] build: Disable checks for dlopen/dlfcn + +While it is (potentially) available with mingw we don't want to use it, so skip any +checks for it. + +Signed-off-by: Naveen M K +--- + configure.ac | 20 +++++++++++++++++--- + 1 file changed, 17 insertions(+), 3 deletions(-) + +diff --git a/configure.ac b/configure.ac +index ee6db8e..164147c 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -2420,7 +2420,7 @@ dnl AC_MSG_RESULT($cpp_type) + + # checks for header files + AC_HEADER_STDC +-AC_CHECK_HEADERS(asm/types.h crypt.h conio.h direct.h dlfcn.h errno.h \ ++AC_CHECK_HEADERS(asm/types.h crypt.h conio.h direct.h errno.h \ + fcntl.h grp.h \ + ieeefp.h io.h langinfo.h libintl.h process.h \ + shadow.h signal.h stropts.h termios.h \ +@@ -2435,6 +2435,12 @@ libutil.h sys/resource.h netpacket/packet.h sysexits.h bluetooth.h \ + linux/tipc.h linux/random.h spawn.h util.h alloca.h endian.h \ + sys/endian.h sys/sysmacros.h linux/memfd.h linux/wait.h sys/memfd.h \ + sys/mman.h sys/eventfd.h) ++ ++case $host in ++ *-*-mingw*) ;; ++ *) AC_CHECK_HEADERS([dlfcn.h]);; ++esac ++ + AC_HEADER_DIRENT + AC_HEADER_MAJOR + +@@ -3096,7 +3102,12 @@ AC_MSG_RESULT($SHLIBS) + + # checks for libraries + AC_CHECK_LIB(sendfile, sendfile) +-AC_CHECK_LIB(dl, dlopen) # Dynamic linking for SunOS/Solaris and SYSV ++ ++case $host in ++ *-*-mingw*) ;; ++ *) AC_CHECK_LIB(dl, dlopen) ;; # Dynamic linking for SunOS/Solaris and SYSV ++esac ++ + AC_CHECK_LIB(dld, shl_load) # Dynamic linking for HP-UX + + # checks for uuid.h location +@@ -5012,7 +5023,10 @@ then + [define to 1 if your sem_getvalue is broken.]) + fi + +-AC_CHECK_DECLS([RTLD_LAZY, RTLD_NOW, RTLD_GLOBAL, RTLD_LOCAL, RTLD_NODELETE, RTLD_NOLOAD, RTLD_DEEPBIND, RTLD_MEMBER], [], [], [[#include ]]) ++case $host in ++ *-*-mingw*) ;; ++ *) AC_CHECK_DECLS([RTLD_LAZY, RTLD_NOW, RTLD_GLOBAL, RTLD_LOCAL, RTLD_NODELETE, RTLD_NOLOAD, RTLD_DEEPBIND, RTLD_MEMBER], [], [], [[#include ]]);; ++esac + + # determine what size digit to use for Python's longs + AC_MSG_CHECKING([digit size for Python's longs]) +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0105-Fix-install-location-of-the-import-library.patch b/mingw-w64-python3.10/0105-Fix-install-location-of-the-import-library.patch new file mode 100644 index 0000000000..f03854042d --- /dev/null +++ b/mingw-w64-python3.10/0105-Fix-install-location-of-the-import-library.patch @@ -0,0 +1,26 @@ +From e94e69160345461948a2e490df3e980479874904 Mon Sep 17 00:00:00 2001 +From: Christoph Reiter +Date: Sun, 25 Jul 2021 15:46:01 +0200 +Subject: [PATCH 105/N] Fix install location of the import library + +Signed-off-by: Naveen M K +--- + Makefile.pre.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/Makefile.pre.in b/Makefile.pre.in +index da1d638..c54015a 100644 +--- a/Makefile.pre.in ++++ b/Makefile.pre.in +@@ -1742,7 +1742,7 @@ libainstall: @DEF_MAKE_RULE@ python-config + if test -d $(LIBRARY); then :; else \ + if test "$(PYTHONFRAMEWORKDIR)" = no-framework; then \ + if test "$(SHLIB_SUFFIX)" = .dll -o "$(SHLIB_SUFFIX)" = .pyd; then \ +- $(INSTALL_DATA) $(LDLIBRARY) $(DESTDIR)$(LIBPL) ; \ ++ $(INSTALL_DATA) $(LDLIBRARY) $(DESTDIR)$(LIBDIR) ; \ + else \ + $(INSTALL_DATA) $(LIBRARY) $(DESTDIR)$(LIBPL)/$(LIBRARY) ; \ + fi; \ +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0106-Set-MSYS2_ARG_CONV_EXCL-for-the-shared-Python-module.patch b/mingw-w64-python3.10/0106-Set-MSYS2_ARG_CONV_EXCL-for-the-shared-Python-module.patch new file mode 100644 index 0000000000..c86f076fd6 --- /dev/null +++ b/mingw-w64-python3.10/0106-Set-MSYS2_ARG_CONV_EXCL-for-the-shared-Python-module.patch @@ -0,0 +1,28 @@ +From d6a1a6cb232e37bba31c4ddbc7218fbec50b0ccc Mon Sep 17 00:00:00 2001 +From: Christoph Reiter +Date: Sun, 25 Jul 2021 15:46:54 +0200 +Subject: [PATCH 106/N] Set MSYS2_ARG_CONV_EXCL for the shared Python module + install + +Otherwise one has to set it when calling "make install". + +Signed-off-by: Naveen M K +--- + Makefile.pre.in | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/Makefile.pre.in b/Makefile.pre.in +index c54015a..0c7149b 100644 +--- a/Makefile.pre.in ++++ b/Makefile.pre.in +@@ -1789,6 +1789,7 @@ endif + # Install the dynamically loadable modules + # This goes into $(exec_prefix) + sharedinstall: sharedmods ++ MSYS2_ARG_CONV_EXCL="--prefix=;--install-scripts=;--install-platlib=" \ + $(RUNSHARED) $(PYTHON_FOR_BUILD) $(srcdir)/setup.py install \ + --prefix=$(prefix) \ + --install-scripts=$(BINDIR) \ +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0107-build-Integrate-venvlauncher-build-installation-into.patch b/mingw-w64-python3.10/0107-build-Integrate-venvlauncher-build-installation-into.patch new file mode 100644 index 0000000000..71e3c4d8c8 --- /dev/null +++ b/mingw-w64-python3.10/0107-build-Integrate-venvlauncher-build-installation-into.patch @@ -0,0 +1,81 @@ +From 3159763aba59b7ebbaf5972be183636a7efdca5d Mon Sep 17 00:00:00 2001 +From: Christoph Reiter +Date: Sun, 25 Jul 2021 16:53:35 +0200 +Subject: [PATCH 107/N] build: Integrate venvlauncher build/installation into + the Makefile + +This is required for venv creation on Windows. +Ideally this would use the venv specific launcher (PC/launcher.c), +but a copy of main binary seems to work as well for now. + +Signed-off-by: Naveen M K +--- + Makefile.pre.in | 17 +++++++++++++++-- + 1 file changed, 15 insertions(+), 2 deletions(-) + +diff --git a/Makefile.pre.in b/Makefile.pre.in +index 0c7149b..b91fadb 100644 +--- a/Makefile.pre.in ++++ b/Makefile.pre.in +@@ -163,6 +163,7 @@ BINLIBDEST= @BINLIBDEST@ + LIBDEST= $(SCRIPTDIR)/python$(VERSION) + INCLUDEPY= $(INCLUDEDIR)/python$(LDVERSION) + CONFINCLUDEPY= $(CONFINCLUDEDIR)/python$(LDVERSION) ++VENVLAUNCHERDIR= $(BINLIBDEST)/venv/scripts/nt + + # Symbols used for using shared libraries + SHLIB_SUFFIX= @SHLIB_SUFFIX@ +@@ -270,6 +271,8 @@ LIBOBJS= @LIBOBJS@ + PYTHON= python$(EXE) + BUILDPYTHON= python$(BUILDEXE) + BUILDPYTHONW= pythonw$(BUILDEXE) ++BUILDVENVLAUNCHER= venvlauncher$(BUILDEXE) ++BUILDVENVWLAUNCHER= venvwlauncher$(BUILDEXE) + + PYTHON_FOR_REGEN?=@PYTHON_FOR_REGEN@ + UPDATE_FILE=$(PYTHON_FOR_REGEN) $(srcdir)/Tools/scripts/update_file.py +@@ -485,7 +488,7 @@ DTRACE_DEPS = \ + + # Default target + all: @DEF_MAKE_ALL_RULE@ +-build_all: check-clean-src $(BUILDPYTHON) $(BUILDPYTHONW) oldsharedmods sharedmods gdbhooks \ ++build_all: check-clean-src $(BUILDPYTHON) $(BUILDPYTHONW) $(BUILDVENVLAUNCHER) $(BUILDVENVWLAUNCHER) oldsharedmods sharedmods gdbhooks \ + Programs/_testembed python-config + + # Check that the source is clean when building out of source. +@@ -614,6 +617,14 @@ $(BUILDPYTHONW): Programs/python.o $(LIBRARY) $(LDLIBRARY) $(PY3LIBRARY) pythonw + $(BUILDPYTHON): Programs/python.o $(LIBRARY_DEPS) python_exe.o + $(LINKCC) $(PY_CORE_LDFLAGS) $(LINKFORSHARED) -municode -o $@ Programs/python.o $(BLDLIBRARY) $(LIBS) $(MODLIBS) $(SYSLIBS) python_exe.o + ++# FIXME: build these from PC/launcher.c instead ++$(BUILDVENVLAUNCHER): $(BUILDPYTHON) ++ cp $(BUILDPYTHON) $(BUILDVENVLAUNCHER) ++ ++# FIXME: build these from PC/launcher.c instead ++$(BUILDVENVWLAUNCHER): $(BUILDPYTHONW) ++ cp $(BUILDPYTHONW) $(BUILDVENVWLAUNCHER) ++ + platform: $(BUILDPYTHON) pybuilddir.txt + $(RUNSHARED) $(PYTHON_FOR_BUILD) -c 'import sys ; from sysconfig import get_platform ; print("%s-%d.%d" % (get_platform(), *sys.version_info[:2]))' >platform + +@@ -1347,7 +1358,7 @@ $(DESTSHARED): + # Install the interpreter with $(VERSION) affixed + # This goes into $(exec_prefix) + altbininstall: $(BUILDPYTHON) @FRAMEWORKPYTHONW@ +- @for i in $(BINDIR) $(LIBDIR); \ ++ @for i in $(BINDIR) $(LIBDIR) $(VENVLAUNCHERDIR); \ + do \ + if test ! -d $(DESTDIR)$$i; then \ + echo "Creating directory $$i"; \ +@@ -1358,6 +1369,8 @@ altbininstall: $(BUILDPYTHON) @FRAMEWORKPYTHONW@ + if test "$(PYTHONFRAMEWORKDIR)" = "no-framework" ; then \ + $(INSTALL_PROGRAM) $(BUILDPYTHON) $(DESTDIR)$(BINDIR)/python$(LDVERSION)$(EXE); \ + $(INSTALL_PROGRAM) $(BUILDPYTHONW) $(DESTDIR)$(BINDIR)/python3w$(EXE); \ ++ $(INSTALL_PROGRAM) $(BUILDPYTHON) $(DESTDIR)$(VENVLAUNCHERDIR)/python$(EXE); \ ++ $(INSTALL_PROGRAM) $(BUILDPYTHONW) $(DESTDIR)$(VENVLAUNCHERDIR)/pythonw$(EXE); \ + else \ + $(INSTALL_PROGRAM) $(STRIPFLAG) Mac/pythonw $(DESTDIR)$(BINDIR)/python$(LDVERSION)$(EXE); \ + fi +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0108-configure.ac-set-_WIN32_WINNT-version.patch b/mingw-w64-python3.10/0108-configure.ac-set-_WIN32_WINNT-version.patch new file mode 100644 index 0000000000..aad268ac2a --- /dev/null +++ b/mingw-w64-python3.10/0108-configure.ac-set-_WIN32_WINNT-version.patch @@ -0,0 +1,29 @@ +From 2b83ecfaa7c76175966bdf0fdb2b1f6b3f9a8169 Mon Sep 17 00:00:00 2001 +From: Christoph Reiter +Date: Sun, 1 Aug 2021 15:18:50 +0200 +Subject: [PATCH 108/N] configure.ac: set _WIN32_WINNT version + +Signed-off-by: Naveen M K +--- + configure.ac | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/configure.ac b/configure.ac +index 164147c..dd21dfd 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -3470,6 +3470,11 @@ else + fi]) + AC_MSG_RESULT($with_dbmliborder) + ++case $host in ++ *-*-mingw*) ++ CFLAGS_NODIST="$CFLAGS_NODIST -D_WIN32_WINNT=0x0601";; ++esac ++ + # Determine if windows modules should be used. + AC_SUBST(USE_WIN32_MODULE) + USE_WIN32_MODULE='#' +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0109-configure.ac-don-t-check-for-clock_-functions.patch b/mingw-w64-python3.10/0109-configure.ac-don-t-check-for-clock_-functions.patch new file mode 100644 index 0000000000..822ffef48e --- /dev/null +++ b/mingw-w64-python3.10/0109-configure.ac-don-t-check-for-clock_-functions.patch @@ -0,0 +1,38 @@ +From 59069e28f60748581badbd6b8b38d33fbf1fbd64 Mon Sep 17 00:00:00 2001 +From: Christoph Reiter +Date: Sun, 1 Aug 2021 18:35:17 +0200 +Subject: [PATCH 109/N] configure.ac: don't check for clock_ functions + +They shouldn't be exposed on Windows and lead to winpthread being linked in + +Signed-off-by: Naveen M K +--- + configure.ac | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/configure.ac b/configure.ac +index dd21dfd..e958d1f 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -4367,6 +4367,9 @@ char *r = crypt_r("", "", &d); + []) + ) + ++case $host in ++ *-*-mingw*) ;; ++ *) + AC_CHECK_FUNCS(clock_gettime, [], [ + AC_CHECK_LIB(rt, clock_gettime, [ + LIBS="$LIBS -lrt" +@@ -4387,6 +4390,8 @@ AC_CHECK_FUNCS(clock_settime, [], [ + AC_DEFINE(HAVE_CLOCK_SETTIME, 1) + ]) + ]) ++ ;; ++esac + + AC_MSG_CHECKING(for major, minor, and makedev) + AC_LINK_IFELSE([AC_LANG_PROGRAM([[ +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0110-expanduser-normpath-paths-coming-from-env-vars.patch b/mingw-w64-python3.10/0110-expanduser-normpath-paths-coming-from-env-vars.patch new file mode 100644 index 0000000000..7516449ae9 --- /dev/null +++ b/mingw-w64-python3.10/0110-expanduser-normpath-paths-coming-from-env-vars.patch @@ -0,0 +1,37 @@ +From 92f9f46cde54368cb0d696dff7e579083f3c4ef0 Mon Sep 17 00:00:00 2001 +From: Christoph Reiter +Date: Sun, 8 Aug 2021 10:17:35 +0200 +Subject: [PATCH 110/N] expanduser: normpath paths coming from env vars + +This makes sure we get the same paths as with related functions in pathlib. + +Signed-off-by: Naveen M K +--- + Lib/ntpath.py | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/Lib/ntpath.py b/Lib/ntpath.py +index 1f1b441..0ecde0c 100644 +--- a/Lib/ntpath.py ++++ b/Lib/ntpath.py +@@ -319,7 +319,7 @@ def expanduser(path): + if 'USERPROFILE' in os.environ: + userhome = os.environ['USERPROFILE'] + elif not 'HOMEPATH' in os.environ: +- return path ++ return os.path.normpath(path) + else: + try: + drive = os.environ['HOMEDRIVE'] +@@ -346,7 +346,7 @@ def expanduser(path): + if isinstance(path, bytes): + userhome = os.fsencode(userhome) + +- return userhome + path[i:] ++ return os.path.normpath(userhome) + path[i:] + + + # Expand paths containing shell variable substitutions. +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0111-Add-support-for-Windows-7-Python-3.9.patch b/mingw-w64-python3.10/0111-Add-support-for-Windows-7-Python-3.9.patch new file mode 100644 index 0000000000..154e713689 --- /dev/null +++ b/mingw-w64-python3.10/0111-Add-support-for-Windows-7-Python-3.9.patch @@ -0,0 +1,177 @@ +From 8f8495c95715bf679f5756e12e4787aada9c3613 Mon Sep 17 00:00:00 2001 +From: Naveen M K +Date: Thu, 17 Jun 2021 18:52:39 +0530 +Subject: [PATCH 111/N] Add support for Windows 7 Python 3.9 + +Signed-off-by: Naveen M K +--- + Modules/posixmodule.c | 22 +++++++++++------ + PC/getpathp.c | 57 +++++++++++++++++++++++++++++++++++++++---- + configure.ac | 2 +- + 3 files changed, 68 insertions(+), 13 deletions(-) + +diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c +index 65edb10..e31a2f8 100644 +--- a/Modules/posixmodule.c ++++ b/Modules/posixmodule.c +@@ -20,7 +20,7 @@ + + FSCTL_GET_REPARSE_POINT is not exported with WIN32_LEAN_AND_MEAN. */ + # include +-# include ++# include + #endif + + #ifdef __VXWORKS__ +@@ -4450,7 +4450,6 @@ os__path_splitroot_impl(PyObject *module, path_t *path) + wchar_t *buffer; + wchar_t *end; + PyObject *result = NULL; +- HRESULT ret; + + buffer = (wchar_t*)PyMem_Malloc(sizeof(wchar_t) * (wcslen(path->wide) + 1)); + if (!buffer) { +@@ -4462,18 +4461,26 @@ os__path_splitroot_impl(PyObject *module, path_t *path) + } + + Py_BEGIN_ALLOW_THREADS +- ret = PathCchSkipRoot(buffer, &end); ++ if (buffer[0] && buffer[1] == L':') { ++ if (buffer[2] == L'\\') { ++ end = &buffer[3]; ++ } else { ++ end = &buffer[2]; ++ } ++ } else { ++ end = PathSkipRootW(buffer); ++ } + Py_END_ALLOW_THREADS +- if (FAILED(ret)) { ++ if (!end || end == buffer) { + result = Py_BuildValue("sO", "", path->object); +- } else if (end != buffer) { ++ } else if (!*end) { ++ result = Py_BuildValue("Os", path->object, ""); ++ } else { + size_t rootLen = (size_t)(end - buffer); + result = Py_BuildValue("NN", + PyUnicode_FromWideChar(path->wide, rootLen), + PyUnicode_FromWideChar(path->wide + rootLen, -1) + ); +- } else { +- result = Py_BuildValue("Os", path->object, ""); + } + PyMem_Free(buffer); + +@@ -4481,6 +4488,7 @@ os__path_splitroot_impl(PyObject *module, path_t *path) + } + + ++ + #endif /* MS_WINDOWS */ + + +diff --git a/PC/getpathp.c b/PC/getpathp.c +index 603a1eb..26ade03 100644 +--- a/PC/getpathp.c ++++ b/PC/getpathp.c +@@ -90,7 +90,6 @@ + #endif + + #include +-#include + #include + + #ifdef HAVE_SYS_TYPES_H +@@ -250,14 +249,43 @@ ismodule(wchar_t *filename, int update_filename) + stuff as fits will be appended. + */ + ++static int _PathCchCombineEx_Initialized = 0; ++typedef HRESULT(__stdcall *PPathCchCombineEx) (PWSTR pszPathOut, size_t cchPathOut, ++ PCWSTR pszPathIn, PCWSTR pszMore, ++ unsigned long dwFlags); ++static PPathCchCombineEx _PathCchCombineEx; ++ + static void + join(wchar_t *buffer, const wchar_t *stuff) + { +- if (FAILED(PathCchCombineEx(buffer, MAXPATHLEN+1, buffer, stuff, 0))) { +- Py_FatalError("buffer overflow in getpathp.c's join()"); ++ if (_PathCchCombineEx_Initialized == 0) { ++ HMODULE pathapi = LoadLibraryExW(L"api-ms-win-core-path-l1-1-0.dll", NULL, ++ LOAD_LIBRARY_SEARCH_SYSTEM32); ++ if (pathapi) { ++ _PathCchCombineEx = (PPathCchCombineEx)GetProcAddress(pathapi, "PathCchCombineEx"); ++ } ++ else { ++ _PathCchCombineEx = NULL; ++ } ++ _PathCchCombineEx_Initialized = 1; ++ } ++ ++ if (_PathCchCombineEx) { ++ if (FAILED(_PathCchCombineEx(buffer, MAXPATHLEN+1, buffer, stuff, 0))) { ++ Py_FatalError("buffer overflow in getpathp.c's join()"); ++ } ++ } else { ++ if (!PathCombineW(buffer, buffer, stuff)) { ++ Py_FatalError("buffer overflow in getpathp.c's join()"); ++ } + } + } + ++static int _PathCchCanonicalizeEx_Initialized = 0; ++typedef HRESULT(__stdcall *PPathCchCanonicalizeEx) (PWSTR pszPathOut, size_t cchPathOut, ++ PCWSTR pszPathIn, unsigned long dwFlags); ++static PPathCchCanonicalizeEx _PathCchCanonicalizeEx; ++ + /* Call PathCchCanonicalizeEx(path): remove navigation elements such as "." + and ".." to produce a direct, well-formed path. */ + static PyStatus +@@ -267,8 +295,27 @@ canonicalize(wchar_t *buffer, const wchar_t *path) + return _PyStatus_NO_MEMORY(); + } + +- if (FAILED(PathCchCanonicalizeEx(buffer, MAXPATHLEN + 1, path, 0))) { +- return INIT_ERR_BUFFER_OVERFLOW(); ++ if (_PathCchCanonicalizeEx_Initialized == 0) { ++ HMODULE pathapi = LoadLibraryExW(L"api-ms-win-core-path-l1-1-0.dll", NULL, ++ LOAD_LIBRARY_SEARCH_SYSTEM32); ++ if (pathapi) { ++ _PathCchCanonicalizeEx = (PPathCchCanonicalizeEx)GetProcAddress(pathapi, "PathCchCanonicalizeEx"); ++ } ++ else { ++ _PathCchCanonicalizeEx = NULL; ++ } ++ _PathCchCanonicalizeEx_Initialized = 1; ++ } ++ ++ if (_PathCchCanonicalizeEx) { ++ if (FAILED(_PathCchCanonicalizeEx(buffer, MAXPATHLEN + 1, path, 0))) { ++ return INIT_ERR_BUFFER_OVERFLOW(); ++ } ++ } ++ else { ++ if (!PathCanonicalizeW(buffer, path)) { ++ return INIT_ERR_BUFFER_OVERFLOW(); ++ } + } + return _PyStatus_OK(); + } +diff --git a/configure.ac b/configure.ac +index e958d1f..44e1f74 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -6014,7 +6014,7 @@ AC_MSG_RESULT(done) + # For mingw build need additional library for linking + case $host in + *-*-mingw*) +- LIBS="$LIBS -lversion -lshlwapi -lpathcch" ++ LIBS="$LIBS -lversion -lshlwapi" + AC_PROG_AWK + if test "$AWK" = "gawk"; then + awk_extra_flag="--non-decimal-data" +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0112-CI-test-the-build-and-add-some-mingw-specific-tests.patch b/mingw-w64-python3.10/0112-CI-test-the-build-and-add-some-mingw-specific-tests.patch new file mode 100644 index 0000000000..d9a8fa6ab3 --- /dev/null +++ b/mingw-w64-python3.10/0112-CI-test-the-build-and-add-some-mingw-specific-tests.patch @@ -0,0 +1,590 @@ +From fd0133e2c1c792516096c74d4527be65c77d1cdd Mon Sep 17 00:00:00 2001 +From: Naveen M K +Date: Fri, 18 Jun 2021 17:51:59 +0530 +Subject: [PATCH 112/N] CI: test the build and add some mingw specific tests + +Signed-off-by: Naveen M K +--- + .github/workflows/mingw.yml | 209 ++++++++++++++++++++++++ + mingw_ignorefile.txt | 34 ++++ + mingw_smoketests.py | 310 ++++++++++++++++++++++++++++++++++++ + 3 files changed, 553 insertions(+) + create mode 100644 .github/workflows/mingw.yml + create mode 100644 mingw_ignorefile.txt + create mode 100644 mingw_smoketests.py + +diff --git a/.github/workflows/mingw.yml b/.github/workflows/mingw.yml +new file mode 100644 +index 0000000..eb27adc +--- /dev/null ++++ b/.github/workflows/mingw.yml +@@ -0,0 +1,209 @@ ++name: Build ++on: [push, pull_request, workflow_dispatch] ++ ++jobs: ++ build: ++ runs-on: windows-2022 ++ strategy: ++ fail-fast: false ++ matrix: ++ msystem: ['MINGW64','MINGW32','UCRT64','CLANG64'] ++ include: ++ - msystem: MINGW64 ++ prefix: mingw-w64-x86_64 ++ - msystem: MINGW32 ++ prefix: mingw-w64-i686 ++ - msystem: UCRT64 ++ prefix: mingw-w64-ucrt-x86_64 ++ - msystem: CLANG64 ++ prefix: mingw-w64-clang-x86_64 ++ #- msystem: CLANG32 ++ # prefix: mingw-w64-clang-i686 ++ steps: ++ - name: Setup git ++ run: | ++ git config --global core.autocrlf false ++ git config --global core.eol lf ++ - uses: actions/checkout@v2 ++ - uses: msys2/setup-msys2@v2 ++ with: ++ msystem: ${{ matrix.msystem }} ++ release: false ++ update: true ++ install: >- ++ make ++ binutils ++ autoconf ++ autoconf-archive ++ automake-wrapper ++ tar ++ gzip ++ ${{ matrix.prefix }}-toolchain ++ ${{ matrix.prefix }}-expat ++ ${{ matrix.prefix }}-bzip2 ++ ${{ matrix.prefix }}-libffi ++ ${{ matrix.prefix }}-mpdecimal ++ ${{ matrix.prefix }}-ncurses ++ ${{ matrix.prefix }}-openssl ++ ${{ matrix.prefix }}-sqlite3 ++ ${{ matrix.prefix }}-tcl ++ ${{ matrix.prefix }}-tk ++ ${{ matrix.prefix }}-zlib ++ ${{ matrix.prefix }}-xz ++ ${{ matrix.prefix }}-tzdata ++ ++ - name: Build Python ++ shell: msys2 {0} ++ run: | ++ set -ex ++ ++ if [ ${{ matrix.msystem }} == "CLANG64" ] ++ then ++ export CC=clang ++ export CXX=clang++ ++ fi ++ autoreconf -vfi ++ ++ rm -Rf _build && mkdir _build && cd _build ++ ++ ../configure \ ++ --prefix=${MINGW_PREFIX} \ ++ --host=${MINGW_CHOST} \ ++ --build=${MINGW_CHOST} \ ++ --enable-shared \ ++ --with-system-expat \ ++ --with-system-ffi \ ++ --with-system-libmpdec \ ++ --without-ensurepip \ ++ --without-c-locale-coercion \ ++ --enable-loadable-sqlite-extensions \ ++ --with-tzpath=${MINGW_PREFIX}/share/zoneinfo \ ++ --enable-optimizations ++ ++ make -j8 ++ ++ - name: Run Smoke Test (build) ++ shell: msys2 {0} ++ run: | ++ SMOKETESTS="$(pwd)/mingw_smoketests.py" ++ cd _build ++ ./python.exe "$SMOKETESTS" ++ MSYSTEM= ./python.exe "$SMOKETESTS" ++ ++ - name: Run tests ++ shell: msys2 {0} ++ run: | ++ IGNOREFILE="$(pwd)/mingw_ignorefile.txt" ++ cd _build ++ MSYSTEM= ./python.exe -m test -j8 --ignorefile "$IGNOREFILE" -W ++ ++ - name: Run broken tests ++ continue-on-error: true ++ shell: msys2 {0} ++ run: | ++ IGNOREFILE="$(pwd)/mingw_ignorefile.txt" ++ cd _build ++ MSYSTEM= ./python.exe -m test -j8 --matchfile "$IGNOREFILE" -W ++ ++ - name: Install ++ shell: msys2 {0} ++ run: | ++ set -ex ++ cd _build ++ ++ pkgdir=python_pkgdir ++ ++ make -j1 install DESTDIR="${pkgdir}" ++ ++ # Fix shebangs ++ _pybasever=$(./python.exe -c "import sys; print(sys.winver);") ++ for fscripts in 2to3 2to3-${_pybasever} idle3 idle${_pybasever} pydoc3 pydoc${_pybasever}; do ++ sed -i "s|$(cygpath -w ${MINGW_PREFIX} | sed 's|\\|\\\\|g')/bin/python${_pybasever}.exe|/usr/bin/env python${_pybasever}.exe|g" "${pkgdir}${MINGW_PREFIX}"/bin/${fscripts} ++ done ++ sed -i "s|#!${pkgdir}${MINGW_PREFIX}/bin/python${_pybasever}.exe|#!/usr/bin/env python${_pybasever}.exe|" "${pkgdir}${MINGW_PREFIX}"/lib/python${_pybasever}/config-${_pybasever}/python-config.py ++ ++ # Create version-less aliases ++ cp "${pkgdir}${MINGW_PREFIX}"/bin/python3.exe "${pkgdir}${MINGW_PREFIX}"/bin/python.exe ++ cp "${pkgdir}${MINGW_PREFIX}"/bin/python3w.exe "${pkgdir}${MINGW_PREFIX}"/bin/pythonw.exe ++ cp "${pkgdir}${MINGW_PREFIX}"/bin/python3-config "${pkgdir}${MINGW_PREFIX}"/bin/python-config ++ cp "${pkgdir}${MINGW_PREFIX}"/bin/idle3 "${pkgdir}${MINGW_PREFIX}"/bin/idle ++ cp "${pkgdir}${MINGW_PREFIX}"/bin/pydoc3 "${pkgdir}${MINGW_PREFIX}"/bin/pydoc ++ ++ - name: Run Smoke Test (installed) ++ shell: msys2 {0} ++ run: | ++ export PYTHONTZPATH="${MINGW_PREFIX}/share/zoneinfo" ++ SMOKETESTS="$(pwd)/mingw_smoketests.py" ++ cd _build ++ cd python_pkgdir/${MINGW_PREFIX}/bin ++ ./python.exe "$SMOKETESTS" ++ MSYSTEM= ./python.exe "$SMOKETESTS" ++ ++ - name: Compress ++ if: always() ++ shell: msys2 {0} ++ run: | ++ cd _build ++ tar -zcf python.tar.gz python_pkgdir/ ++ ++ - name: Upload ++ uses: actions/upload-artifact@v2 ++ if: always() ++ with: ++ name: build-${{ matrix.msystem }} ++ path: _build/python.tar.gz ++ ++ cross: ++ runs-on: ubuntu-latest ++ container: ++ image: archlinux:base-devel ++ steps: ++ - uses: actions/checkout@v2 ++ - name: Install deps ++ run: | ++ pacman --noconfirm -Suuy ++ pacman --needed --noconfirm -S mingw-w64-gcc autoconf-archive autoconf automake python zip ++ ++ - name: Build ++ run: | ++ autoreconf -vfi ++ ++ mkdir _build && cd _build ++ ++ ../configure \ ++ --host=x86_64-w64-mingw32 \ ++ --build=x86_64-pc-linux-gnu \ ++ --enable-shared \ ++ --with-system-expat \ ++ --with-system-ffi \ ++ --with-system-libmpdec \ ++ --without-ensurepip \ ++ --without-c-locale-coercion \ ++ --enable-loadable-sqlite-extensions ++ ++ make -j8 ++ ++ make install DESTDIR="$(pwd)/install" ++ ++ - name: 'Zip files' ++ run: | ++ zip -r install.zip _build/install ++ ++ - name: Upload ++ uses: actions/upload-artifact@v2 ++ with: ++ name: build-cross ++ path: install.zip ++ ++ cross-test: ++ needs: [cross] ++ runs-on: windows-latest ++ steps: ++ - uses: actions/download-artifact@v2 ++ with: ++ name: build-cross ++ ++ - name: 'Run tests' ++ run: | ++ 7z x install.zip ++ ./_build/install/usr/local/bin/python3.exe -c "import sysconfig, pprint; pprint.pprint(sysconfig.get_config_vars())" +diff --git a/mingw_ignorefile.txt b/mingw_ignorefile.txt +new file mode 100644 +index 0000000..dc3802e +--- /dev/null ++++ b/mingw_ignorefile.txt +@@ -0,0 +1,34 @@ ++ctypes.test.test_loading.LoaderTest.test_load_dll_with_flags ++distutils.tests.test_bdist_dumb.BuildDumbTestCase.test_simple_built ++distutils.tests.test_cygwinccompiler.CygwinCCompilerTestCase.test_get_versions ++distutils.tests.test_util.UtilTestCase.test_change_root ++test.datetimetester.TestLocalTimeDisambiguation_Fast.* ++test.datetimetester.TestLocalTimeDisambiguation_Pure.* ++test.test_cmath.CMathTests.test_specific_values ++test.test_cmd_line_script.CmdLineTest.test_consistent_sys_path_for_direct_execution ++test.test_compileall.CommandLineTestsNoSourceEpoch.* ++test.test_compileall.CommandLineTestsWithSourceEpoch.* ++test.test_compileall.CompileallTestsWithoutSourceEpoch.* ++test.test_compileall.CompileallTestsWithSourceEpoch.* ++test.test_import.ImportTests.test_dll_dependency_import ++test.test_math.MathTests.* ++test.test_ntpath.NtCommonTest.test_import ++test.test_os.StatAttributeTests.test_stat_block_device ++test.test_os.TestScandir.test_attributes ++test.test_os.UtimeTests.test_large_time ++test.test_platform.PlatformTest.test_architecture_via_symlink ++test.test_regrtest.ProgramsTestCase.test_pcbuild_rt ++test.test_regrtest.ProgramsTestCase.test_tools_buildbot_test ++test.test_site._pthFileTests.* ++test.test_site.HelperFunctionsTests.* ++test.test_site.StartupImportTests.* ++test.test_ssl.* ++test.test_strptime.CalculationTests.* ++test.test_strptime.StrptimeTests.test_weekday ++test.test_strptime.TimeRETests.test_compile ++test.test_tools.test_i18n.Test_pygettext.test_POT_Creation_Date ++test.test_venv.BasicTest.* ++test.test_venv.EnsurePipTest.* ++# flaky ++test.test__xxsubinterpreters.* ++test.test_asyncio.test_subprocess.SubprocessProactorTests.test_stdin_broken_pipe +\ No newline at end of file +diff --git a/mingw_smoketests.py b/mingw_smoketests.py +new file mode 100644 +index 0000000..70acbd1 +--- /dev/null ++++ b/mingw_smoketests.py +@@ -0,0 +1,310 @@ ++#!/usr/bin/env python3 ++# Copyright 2017 Christoph Reiter ++# ++# 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. ++ ++"""The goal of this test suite is collect tests for update regressions ++and to test msys2 related modifications like for path handling. ++Feel free to extend. ++""" ++ ++import os ++import unittest ++import sysconfig ++ ++if "MSYSTEM" in os.environ: ++ SEP = "/" ++else: ++ SEP = "\\" ++ ++_UCRT = "clang" in sysconfig.get_platform() or "ucrt" in sysconfig.get_platform() ++ ++ ++class Tests(unittest.TestCase): ++ ++ def test_zoneinfo(self): ++ # https://github.com/msys2-contrib/cpython-mingw/issues/32 ++ import zoneinfo ++ self.assertTrue(any(os.path.exists(p) for p in zoneinfo.TZPATH)) ++ zoneinfo.ZoneInfo("America/Sao_Paulo") ++ ++ def test_userdir_path_sep(self): ++ # Make sure os.path and pathlib use the same path separators ++ from unittest import mock ++ from os.path import expanduser ++ from pathlib import Path ++ ++ profiles = ["C:\\foo", "C:/foo"] ++ for profile in profiles: ++ with mock.patch.dict(os.environ, {"USERPROFILE": profile}): ++ self.assertEqual(expanduser("~"), os.path.normpath(expanduser("~"))) ++ self.assertEqual(str(Path("~").expanduser()), expanduser("~")) ++ self.assertEqual(str(Path.home()), expanduser("~")) ++ ++ def test_sysconfig_schemes(self): ++ # https://github.com/msys2/MINGW-packages/issues/9319 ++ import sysconfig ++ from distutils.dist import Distribution ++ from distutils.command.install import install ++ ++ names = ['scripts', 'purelib', 'platlib', 'data', 'include'] ++ for scheme in ["nt", "nt_user"]: ++ for name in names: ++ c = install(Distribution({"name": "foobar"})) ++ c.user = (scheme == "nt_user") ++ c.finalize_options() ++ if name == "include": ++ dist_path = os.path.dirname(getattr(c, "install_" + "headers")) ++ else: ++ dist_path = getattr(c, "install_" + name) ++ sys_path = sysconfig.get_path(name, scheme) ++ self.assertEqual(dist_path, sys_path, (scheme, name)) ++ ++ def test_ctypes_find_library(self): ++ from ctypes.util import find_library ++ from ctypes import cdll ++ self.assertTrue(cdll.msvcrt) ++ if _UCRT: ++ self.assertIsNone(find_library('c')) ++ else: ++ self.assertEqual(find_library('c'), 'msvcrt.dll') ++ ++ def test_ctypes_dlopen(self): ++ import ctypes ++ import sys ++ self.assertEqual(ctypes.RTLD_GLOBAL, 0) ++ self.assertEqual(ctypes.RTLD_GLOBAL, ctypes.RTLD_LOCAL) ++ self.assertFalse(hasattr(sys, 'setdlopenflags')) ++ self.assertFalse(hasattr(sys, 'getdlopenflags')) ++ self.assertFalse([n for n in dir(os) if n.startswith("RTLD_")]) ++ ++ def test_time_no_unix_stuff(self): ++ import time ++ self.assertFalse([n for n in dir(time) if n.startswith("clock_")]) ++ self.assertFalse([n for n in dir(time) if n.startswith("CLOCK_")]) ++ self.assertFalse([n for n in dir(time) if n.startswith("pthread_")]) ++ self.assertFalse(hasattr(time, 'tzset')) ++ ++ def test_strftime(self): ++ import time ++ with self.assertRaises(ValueError): ++ time.strftime('%Y', (12345,) + (0,) * 8) ++ ++ def test_sep(self): ++ self.assertEqual(os.sep, SEP) ++ ++ def test_module_file_path(self): ++ import asyncio ++ import zlib ++ self.assertEqual(zlib.__file__, os.path.normpath(zlib.__file__)) ++ self.assertEqual(asyncio.__file__, os.path.normpath(asyncio.__file__)) ++ ++ def test_importlib_frozen_path_sep(self): ++ import importlib._bootstrap_external ++ self.assertEqual(importlib._bootstrap_external.path_sep, SEP) ++ ++ def test_os_commonpath(self): ++ self.assertEqual( ++ os.path.commonpath( ++ [os.path.join("C:", os.sep, "foo", "bar"), ++ os.path.join("C:", os.sep, "foo")]), ++ os.path.join("C:", os.sep, "foo")) ++ ++ def test_pathlib(self): ++ import pathlib ++ ++ p = pathlib.Path("foo") / pathlib.Path("foo") ++ self.assertEqual(str(p), os.path.normpath(p)) ++ ++ def test_modules_import(self): ++ import sqlite3 ++ import ssl ++ import ctypes ++ import curses ++ ++ def test_socket_inet_ntop(self): ++ import socket ++ self.assertTrue(hasattr(socket, "inet_ntop")) ++ ++ def test_socket_inet_pton(self): ++ import socket ++ self.assertTrue(hasattr(socket, "inet_pton")) ++ ++ def test_multiprocessing_queue(self): ++ from multiprocessing import Queue ++ Queue(0) ++ ++ #def test_socket_timout_normal_error(self): ++ # import urllib.request ++ # from urllib.error import URLError ++ ++ # try: ++ # urllib.request.urlopen( ++ # 'http://localhost', timeout=0.0001).close() ++ # except URLError: ++ # pass ++ ++ def test_threads(self): ++ from concurrent.futures import ThreadPoolExecutor ++ ++ with ThreadPoolExecutor(1) as pool: ++ for res in pool.map(lambda *x: None, range(10000)): ++ pass ++ ++ def test_sysconfig(self): ++ import sysconfig ++ # This should be able to execute without exceptions ++ sysconfig.get_config_vars() ++ ++ def test_sqlite_enable_load_extension(self): ++ # Make sure --enable-loadable-sqlite-extensions is used ++ import sqlite3 ++ self.assertTrue(sqlite3.Connection.enable_load_extension) ++ ++ def test_venv_creation(self): ++ import tempfile ++ import venv ++ import subprocess ++ import shutil ++ with tempfile.TemporaryDirectory() as tmp: ++ builder = venv.EnvBuilder() ++ builder.create(tmp) ++ assert os.path.exists(os.path.join(tmp, "bin", "activate")) ++ assert os.path.exists(os.path.join(tmp, "bin", "python.exe")) ++ assert os.path.exists(os.path.join(tmp, "bin", "python3.exe")) ++ subprocess.check_call([shutil.which("bash.exe"), os.path.join(tmp, "bin", "activate")]) ++ ++ def test_has_mktime(self): ++ from time import mktime, gmtime ++ mktime(gmtime()) ++ ++ def test_platform_things(self): ++ import sys ++ import sysconfig ++ import platform ++ import importlib.machinery ++ self.assertEqual(sys.implementation.name, "cpython") ++ self.assertEqual(sys.platform, "win32") ++ self.assertTrue(sysconfig.get_platform().startswith("mingw")) ++ self.assertTrue(sysconfig.get_config_var('SOABI').startswith("cpython-")) ++ ext_suffix = sysconfig.get_config_var('EXT_SUFFIX') ++ self.assertTrue(ext_suffix.endswith(".pyd")) ++ self.assertTrue("mingw" in ext_suffix) ++ self.assertEqual(sysconfig.get_config_var('SHLIB_SUFFIX'), ".pyd") ++ ext_suffixes = importlib.machinery.EXTENSION_SUFFIXES ++ self.assertTrue(ext_suffix in ext_suffixes) ++ self.assertTrue(".pyd" in ext_suffixes) ++ self.assertEqual(sys.winver, ".".join(map(str, sys.version_info[:2]))) ++ self.assertEqual(platform.python_implementation(), "CPython") ++ self.assertEqual(platform.system(), "Windows") ++ self.assertTrue(isinstance(sys.api_version, int) and sys.api_version > 0) ++ ++ def test_c_ext_build(self): ++ import tempfile ++ import sys ++ import subprocess ++ import textwrap ++ from pathlib import Path ++ ++ with tempfile.TemporaryDirectory() as tmppro: ++ subprocess.check_call([sys.executable, "-m", "ensurepip", "--user"]) ++ with Path(tmppro, "setup.py").open("w") as f: ++ f.write( ++ textwrap.dedent( ++ """\ ++ from setuptools import setup, Extension ++ ++ setup( ++ name='cwrapper', ++ version='1.0', ++ ext_modules=[ ++ Extension( ++ 'cwrapper', ++ sources=['cwrapper.c']), ++ ], ++ ) ++ """ ++ ) ++ ) ++ with Path(tmppro, "cwrapper.c").open("w") as f: ++ f.write( ++ textwrap.dedent( ++ """\ ++ #include ++ static PyObject * ++ helloworld(PyObject *self, PyObject *args) ++ { ++ printf("Hello World\\n"); ++ return Py_None; ++ } ++ static PyMethodDef ++ myMethods[] = { ++ { "helloworld", helloworld, METH_NOARGS, "Prints Hello World" }, ++ { NULL, NULL, 0, NULL } ++ }; ++ static struct PyModuleDef cwrapper = { ++ PyModuleDef_HEAD_INIT, ++ "cwrapper", ++ "Test Module", ++ -1, ++ myMethods ++ }; ++ ++ PyMODINIT_FUNC ++ PyInit_cwrapper(void) ++ { ++ return PyModule_Create(&cwrapper); ++ } ++ """ ++ ) ++ ) ++ subprocess.check_call( ++ [sys.executable, "-c", "import struct"], ++ ) ++ subprocess.check_call( ++ [ ++ sys.executable, ++ "-m", ++ "pip", ++ "install", ++ "wheel", ++ ], ++ ) ++ subprocess.check_call( ++ [ ++ sys.executable, ++ "-m", ++ "pip", ++ "install", ++ tmppro, ++ ], ++ ) ++ subprocess.check_call( ++ [sys.executable, "-c", "import cwrapper"], ++ ) ++ ++ ++ ++def suite(): ++ return unittest.TestLoader().loadTestsFromName(__name__) ++ ++ ++if __name__ == '__main__': ++ unittest.main(defaultTest='suite') +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0113-smoketests-test-that-_decimal-exists.patch b/mingw-w64-python3.10/0113-smoketests-test-that-_decimal-exists.patch new file mode 100644 index 0000000000..01876ad603 --- /dev/null +++ b/mingw-w64-python3.10/0113-smoketests-test-that-_decimal-exists.patch @@ -0,0 +1,27 @@ +From c6765ac66cdd2a518beb24fee89bf311c0f44ce5 Mon Sep 17 00:00:00 2001 +From: Christoph Reiter +Date: Thu, 23 Sep 2021 09:57:56 +0200 +Subject: [PATCH 113/N] smoketests: test that _decimal exists + +Signed-off-by: Naveen M K +--- + mingw_smoketests.py | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/mingw_smoketests.py b/mingw_smoketests.py +index 70acbd1..527aafb 100644 +--- a/mingw_smoketests.py ++++ b/mingw_smoketests.py +@@ -139,6 +139,9 @@ class Tests(unittest.TestCase): + import ctypes + import curses + ++ def test_c_modules_import(self): ++ import _decimal ++ + def test_socket_inet_ntop(self): + import socket + self.assertTrue(hasattr(socket, "inet_ntop")) +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0114-Prefer-sysconfig.python_build.patch b/mingw-w64-python3.10/0114-Prefer-sysconfig.python_build.patch new file mode 100644 index 0000000000..2f2668eca3 --- /dev/null +++ b/mingw-w64-python3.10/0114-Prefer-sysconfig.python_build.patch @@ -0,0 +1,26 @@ +From 210c8cdff32fd39f8b6f1c0093cda49b4816fcd7 Mon Sep 17 00:00:00 2001 +From: Long Nguyen +Date: Fri, 1 Oct 2021 07:28:36 +0700 +Subject: [PATCH 114/N] Prefer sysconfig.python_build + +Signed-off-by: Naveen M K +--- + Lib/distutils/command/build_ext.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/Lib/distutils/command/build_ext.py b/Lib/distutils/command/build_ext.py +index 1598735..82a21d2 100644 +--- a/Lib/distutils/command/build_ext.py ++++ b/Lib/distutils/command/build_ext.py +@@ -219,7 +219,7 @@ class build_ext(Command): + # For extensions under Cygwin, Python's library directory must be + # appended to library_dirs + if sys.platform[:6] == 'cygwin' or self.plat_name.startswith(('mingw')): +- if sys.executable.startswith(os.path.join(sys.exec_prefix, "bin")): ++ if not sysconfig.python_build: + # building third party extensions + config_dir_name = os.path.basename(sysconfig.get_config_var('LIBPL')) + self.library_dirs.append(os.path.join(sys.prefix, "lib", +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0115-Define-PY3_DLLNAME-to-fix-build.patch b/mingw-w64-python3.10/0115-Define-PY3_DLLNAME-to-fix-build.patch new file mode 100644 index 0000000000..21cb8df857 --- /dev/null +++ b/mingw-w64-python3.10/0115-Define-PY3_DLLNAME-to-fix-build.patch @@ -0,0 +1,29 @@ +From 5354bf6801cee8770820bc9c0ca187022a0246f4 Mon Sep 17 00:00:00 2001 +From: Naveen M K +Date: Tue, 12 Oct 2021 18:35:21 +0530 +Subject: [PATCH 115/N] Define PY3_DLLNAME to fix build + +PY3_DLLNAME is used in Python/pathconfig.c but isn't +defined. I guess it is useless but it will fix the build. + +Signed-off-by: Naveen M K +--- + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/configure.ac b/configure.ac +index 44e1f74..9538ba6 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -3961,7 +3961,7 @@ then + *-*-mingw*) + DYNLOADFILE="dynload_win.o" + extra_machdep_objs="$extra_machdep_objs PC/dl_nt.o" +- CFLAGS_NODIST="$CFLAGS_NODIST -DMS_DLL_ID='\"$VERSION\"'" ++ CFLAGS_NODIST="$CFLAGS_NODIST -DMS_DLL_ID='\"$VERSION\"' -DPY3_DLLNAME='\"libpython3.dll\"'" + ;; + esac + fi +-- +2.34.1 + diff --git a/mingw-w64-python3.10/0116-Commit-regenerated-importlib.patch b/mingw-w64-python3.10/0116-Commit-regenerated-importlib.patch new file mode 100644 index 0000000000..3430ec950a --- /dev/null +++ b/mingw-w64-python3.10/0116-Commit-regenerated-importlib.patch @@ -0,0 +1,5509 @@ +From 2ea5fa382996dc48069fb18fe55491fafd8cbeb8 Mon Sep 17 00:00:00 2001 +From: Christoph Reiter +Date: Fri, 29 Oct 2021 10:16:24 +0200 +Subject: [PATCH 116/N] Commit regenerated importlib + +It needs a native Python when building which isn't available when cross compiling + +Generated using "make regen-importlib" with line endings normalized. + +Signed-off-by: Naveen M K +--- + Python/importlib_external.h | 5443 ++++++++++++++++++----------------- + 1 file changed, 2723 insertions(+), 2720 deletions(-) + +diff --git a/Python/importlib_external.h b/Python/importlib_external.h +index 01fdef7..197d525 100644 +--- a/Python/importlib_external.h ++++ b/Python/importlib_external.h +@@ -1,817 +1,752 @@ + /* Auto-generated by Programs/_freeze_importlib.c */ + const unsigned char _Py_M__importlib_bootstrap_external[] = { + 99,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +- 0,5,0,0,0,64,0,0,0,115,250,2,0,0,100,0, ++ 0,5,0,0,0,64,0,0,0,115,18,3,0,0,100,0, + 90,0,100,1,97,1,100,2,100,1,108,2,90,2,100,2, + 100,1,108,3,90,3,100,2,100,1,108,4,90,4,100,2, + 100,1,108,5,90,5,100,2,100,1,108,6,90,6,101,4, + 106,7,100,3,107,2,90,8,101,8,114,40,100,2,100,1, + 108,9,90,10,100,2,100,1,108,11,90,11,110,4,100,2, + 100,1,108,12,90,10,101,8,114,51,100,4,100,5,103,2, +- 90,13,110,3,100,5,103,1,90,13,101,14,100,6,100,7, +- 132,0,101,13,68,0,131,1,131,1,115,65,74,0,130,1, +- 101,13,100,2,25,0,90,15,101,16,101,13,131,1,90,17, +- 100,8,160,18,101,13,161,1,90,13,100,9,100,10,132,0, +- 101,13,68,0,131,1,90,19,100,11,90,20,100,12,90,21, +- 101,21,101,20,23,0,90,22,100,13,100,14,132,0,90,23, +- 101,23,131,0,90,24,100,15,100,16,132,0,90,25,100,17, +- 100,18,132,0,90,26,100,19,100,20,132,0,90,27,101,8, +- 114,119,100,21,100,22,132,0,90,28,110,4,100,23,100,22, +- 132,0,90,28,100,24,100,25,132,0,90,29,100,26,100,27, ++ 90,13,110,3,100,5,103,1,90,13,100,6,101,10,106,14, ++ 118,0,114,66,101,13,100,1,100,1,100,7,133,3,25,0, ++ 90,13,101,15,100,8,100,9,132,0,101,13,68,0,131,1, ++ 131,1,115,77,74,0,130,1,101,13,100,2,25,0,90,16, ++ 101,17,101,13,131,1,90,18,100,10,160,19,101,13,161,1, ++ 90,13,100,11,100,12,132,0,101,13,68,0,131,1,90,20, ++ 100,13,90,21,100,14,90,22,101,22,101,21,23,0,90,23, ++ 100,15,100,16,132,0,90,24,101,24,131,0,90,25,100,17, ++ 100,18,132,0,90,26,100,19,100,20,132,0,90,27,100,21, ++ 100,22,132,0,90,28,101,8,114,131,100,23,100,24,132,0, ++ 90,29,110,4,100,25,100,24,132,0,90,29,100,26,100,27, + 132,0,90,30,100,28,100,29,132,0,90,31,100,30,100,31, +- 132,0,90,32,100,32,100,33,132,0,90,33,101,8,114,150, +- 100,34,100,35,132,0,90,34,110,4,100,36,100,35,132,0, +- 90,34,100,112,100,38,100,39,132,1,90,35,101,36,101,35, +- 106,37,131,1,90,38,100,40,160,39,100,41,100,42,161,2, +- 100,43,23,0,90,40,101,41,160,42,101,40,100,42,161,2, +- 90,43,100,44,90,44,100,45,90,45,100,46,103,1,90,46, +- 101,8,114,192,101,46,160,47,100,47,161,1,1,0,101,2, +- 160,48,161,0,90,49,100,48,103,1,90,50,101,50,4,0, +- 90,51,90,52,100,113,100,1,100,49,156,1,100,50,100,51, +- 132,3,90,53,100,52,100,53,132,0,90,54,100,54,100,55, ++ 132,0,90,32,100,32,100,33,132,0,90,33,100,34,100,35, ++ 132,0,90,34,101,8,114,162,100,36,100,37,132,0,90,35, ++ 110,4,100,38,100,37,132,0,90,35,100,114,100,40,100,41, ++ 132,1,90,36,101,37,101,36,106,38,131,1,90,39,100,42, ++ 160,40,100,43,100,44,161,2,100,45,23,0,90,41,101,42, ++ 160,43,101,41,100,44,161,2,90,44,100,46,90,45,100,47, ++ 90,46,100,48,103,1,90,47,101,8,114,204,101,47,160,48, ++ 100,49,161,1,1,0,101,2,160,49,161,0,90,50,100,50, ++ 103,1,90,51,101,51,4,0,90,52,90,53,100,115,100,1, ++ 100,51,156,1,100,52,100,53,132,3,90,54,100,54,100,55, + 132,0,90,55,100,56,100,57,132,0,90,56,100,58,100,59, + 132,0,90,57,100,60,100,61,132,0,90,58,100,62,100,63, + 132,0,90,59,100,64,100,65,132,0,90,60,100,66,100,67, +- 132,0,90,61,100,68,100,69,132,0,90,62,100,114,100,70, +- 100,71,132,1,90,63,100,115,100,72,100,73,132,1,90,64, +- 100,116,100,75,100,76,132,1,90,65,100,77,100,78,132,0, +- 90,66,101,67,131,0,90,68,100,113,100,1,101,68,100,79, +- 156,2,100,80,100,81,132,3,90,69,71,0,100,82,100,83, +- 132,0,100,83,131,2,90,70,71,0,100,84,100,85,132,0, +- 100,85,131,2,90,71,71,0,100,86,100,87,132,0,100,87, +- 101,71,131,3,90,72,71,0,100,88,100,89,132,0,100,89, +- 131,2,90,73,71,0,100,90,100,91,132,0,100,91,101,73, +- 101,72,131,4,90,74,71,0,100,92,100,93,132,0,100,93, +- 101,73,101,71,131,4,90,75,71,0,100,94,100,95,132,0, +- 100,95,101,73,101,71,131,4,90,76,71,0,100,96,100,97, +- 132,0,100,97,131,2,90,77,71,0,100,98,100,99,132,0, +- 100,99,131,2,90,78,71,0,100,100,100,101,132,0,100,101, +- 131,2,90,79,71,0,100,102,100,103,132,0,100,103,131,2, +- 90,80,100,113,100,104,100,105,132,1,90,81,100,106,100,107, +- 132,0,90,82,100,108,100,109,132,0,90,83,100,110,100,111, +- 132,0,90,84,100,1,83,0,41,117,97,94,1,0,0,67, +- 111,114,101,32,105,109,112,108,101,109,101,110,116,97,116,105, +- 111,110,32,111,102,32,112,97,116,104,45,98,97,115,101,100, +- 32,105,109,112,111,114,116,46,10,10,84,104,105,115,32,109, +- 111,100,117,108,101,32,105,115,32,78,79,84,32,109,101,97, +- 110,116,32,116,111,32,98,101,32,100,105,114,101,99,116,108, +- 121,32,105,109,112,111,114,116,101,100,33,32,73,116,32,104, +- 97,115,32,98,101,101,110,32,100,101,115,105,103,110,101,100, +- 32,115,117,99,104,10,116,104,97,116,32,105,116,32,99,97, +- 110,32,98,101,32,98,111,111,116,115,116,114,97,112,112,101, +- 100,32,105,110,116,111,32,80,121,116,104,111,110,32,97,115, +- 32,116,104,101,32,105,109,112,108,101,109,101,110,116,97,116, +- 105,111,110,32,111,102,32,105,109,112,111,114,116,46,32,65, +- 115,10,115,117,99,104,32,105,116,32,114,101,113,117,105,114, +- 101,115,32,116,104,101,32,105,110,106,101,99,116,105,111,110, +- 32,111,102,32,115,112,101,99,105,102,105,99,32,109,111,100, +- 117,108,101,115,32,97,110,100,32,97,116,116,114,105,98,117, +- 116,101,115,32,105,110,32,111,114,100,101,114,32,116,111,10, +- 119,111,114,107,46,32,79,110,101,32,115,104,111,117,108,100, +- 32,117,115,101,32,105,109,112,111,114,116,108,105,98,32,97, +- 115,32,116,104,101,32,112,117,98,108,105,99,45,102,97,99, +- 105,110,103,32,118,101,114,115,105,111,110,32,111,102,32,116, +- 104,105,115,32,109,111,100,117,108,101,46,10,10,78,233,0, +- 0,0,0,90,5,119,105,110,51,50,250,1,92,250,1,47, +- 99,1,0,0,0,0,0,0,0,0,0,0,0,2,0,0, +- 0,3,0,0,0,99,0,0,0,115,28,0,0,0,129,0, +- 124,0,93,9,125,1,116,0,124,1,131,1,100,0,107,2, +- 86,0,1,0,113,2,100,1,83,0,41,2,233,1,0,0, +- 0,78,41,1,218,3,108,101,110,41,2,218,2,46,48,218, +- 3,115,101,112,169,0,114,7,0,0,0,250,38,60,102,114, +- 111,122,101,110,32,105,109,112,111,114,116,108,105,98,46,95, +- 98,111,111,116,115,116,114,97,112,95,101,120,116,101,114,110, +- 97,108,62,218,9,60,103,101,110,101,120,112,114,62,46,0, +- 0,0,115,4,0,0,0,2,128,26,0,114,9,0,0,0, +- 218,0,99,1,0,0,0,0,0,0,0,0,0,0,0,2, +- 0,0,0,4,0,0,0,67,0,0,0,115,22,0,0,0, +- 104,0,124,0,93,7,125,1,100,0,124,1,155,0,157,2, +- 146,2,113,2,83,0,41,1,250,1,58,114,7,0,0,0, +- 41,2,114,5,0,0,0,218,1,115,114,7,0,0,0,114, +- 7,0,0,0,114,8,0,0,0,218,9,60,115,101,116,99, +- 111,109,112,62,50,0,0,0,115,2,0,0,0,22,0,114, +- 13,0,0,0,41,1,218,3,119,105,110,41,2,90,6,99, +- 121,103,119,105,110,90,6,100,97,114,119,105,110,99,0,0, +- 0,0,0,0,0,0,0,0,0,0,1,0,0,0,3,0, +- 0,0,3,0,0,0,115,62,0,0,0,116,0,106,1,160, +- 2,116,3,161,1,114,25,116,0,106,1,160,2,116,4,161, +- 1,114,15,100,1,137,0,110,2,100,2,137,0,135,0,102, +- 1,100,3,100,4,132,8,125,0,124,0,83,0,100,5,100, +- 4,132,0,125,0,124,0,83,0,41,6,78,90,12,80,89, +- 84,72,79,78,67,65,83,69,79,75,115,12,0,0,0,80, +- 89,84,72,79,78,67,65,83,69,79,75,99,0,0,0,0, +- 0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, +- 19,0,0,0,115,20,0,0,0,116,0,106,1,106,2,12, +- 0,111,9,136,0,116,3,106,4,118,0,83,0,41,2,122, +- 94,84,114,117,101,32,105,102,32,102,105,108,101,110,97,109, ++ 132,0,90,61,100,68,100,69,132,0,90,62,100,70,100,71, ++ 132,0,90,63,100,116,100,72,100,73,132,1,90,64,100,117, ++ 100,74,100,75,132,1,90,65,100,118,100,77,100,78,132,1, ++ 90,66,100,79,100,80,132,0,90,67,101,68,131,0,90,69, ++ 100,115,100,1,101,69,100,81,156,2,100,82,100,83,132,3, ++ 90,70,71,0,100,84,100,85,132,0,100,85,131,2,90,71, ++ 71,0,100,86,100,87,132,0,100,87,131,2,90,72,71,0, ++ 100,88,100,89,132,0,100,89,101,72,131,3,90,73,71,0, ++ 100,90,100,91,132,0,100,91,131,2,90,74,71,0,100,92, ++ 100,93,132,0,100,93,101,74,101,73,131,4,90,75,71,0, ++ 100,94,100,95,132,0,100,95,101,74,101,72,131,4,90,76, ++ 71,0,100,96,100,97,132,0,100,97,101,74,101,72,131,4, ++ 90,77,71,0,100,98,100,99,132,0,100,99,131,2,90,78, ++ 71,0,100,100,100,101,132,0,100,101,131,2,90,79,71,0, ++ 100,102,100,103,132,0,100,103,131,2,90,80,71,0,100,104, ++ 100,105,132,0,100,105,131,2,90,81,100,115,100,106,100,107, ++ 132,1,90,82,100,108,100,109,132,0,90,83,100,110,100,111, ++ 132,0,90,84,100,112,100,113,132,0,90,85,100,1,83,0, ++ 41,119,97,94,1,0,0,67,111,114,101,32,105,109,112,108, ++ 101,109,101,110,116,97,116,105,111,110,32,111,102,32,112,97, ++ 116,104,45,98,97,115,101,100,32,105,109,112,111,114,116,46, ++ 10,10,84,104,105,115,32,109,111,100,117,108,101,32,105,115, ++ 32,78,79,84,32,109,101,97,110,116,32,116,111,32,98,101, ++ 32,100,105,114,101,99,116,108,121,32,105,109,112,111,114,116, ++ 101,100,33,32,73,116,32,104,97,115,32,98,101,101,110,32, ++ 100,101,115,105,103,110,101,100,32,115,117,99,104,10,116,104, ++ 97,116,32,105,116,32,99,97,110,32,98,101,32,98,111,111, ++ 116,115,116,114,97,112,112,101,100,32,105,110,116,111,32,80, ++ 121,116,104,111,110,32,97,115,32,116,104,101,32,105,109,112, ++ 108,101,109,101,110,116,97,116,105,111,110,32,111,102,32,105, ++ 109,112,111,114,116,46,32,65,115,10,115,117,99,104,32,105, ++ 116,32,114,101,113,117,105,114,101,115,32,116,104,101,32,105, ++ 110,106,101,99,116,105,111,110,32,111,102,32,115,112,101,99, ++ 105,102,105,99,32,109,111,100,117,108,101,115,32,97,110,100, ++ 32,97,116,116,114,105,98,117,116,101,115,32,105,110,32,111, ++ 114,100,101,114,32,116,111,10,119,111,114,107,46,32,79,110, ++ 101,32,115,104,111,117,108,100,32,117,115,101,32,105,109,112, ++ 111,114,116,108,105,98,32,97,115,32,116,104,101,32,112,117, ++ 98,108,105,99,45,102,97,99,105,110,103,32,118,101,114,115, ++ 105,111,110,32,111,102,32,116,104,105,115,32,109,111,100,117, ++ 108,101,46,10,10,78,233,0,0,0,0,90,5,119,105,110, ++ 51,50,250,1,92,250,1,47,90,7,77,83,89,83,84,69, ++ 77,233,255,255,255,255,99,1,0,0,0,0,0,0,0,0, ++ 0,0,0,2,0,0,0,3,0,0,0,99,0,0,0,115, ++ 28,0,0,0,129,0,124,0,93,9,125,1,116,0,124,1, ++ 131,1,100,0,107,2,86,0,1,0,113,2,100,1,83,0, ++ 41,2,233,1,0,0,0,78,41,1,218,3,108,101,110,41, ++ 2,218,2,46,48,218,3,115,101,112,169,0,114,8,0,0, ++ 0,250,38,60,102,114,111,122,101,110,32,105,109,112,111,114, ++ 116,108,105,98,46,95,98,111,111,116,115,116,114,97,112,95, ++ 101,120,116,101,114,110,97,108,62,218,9,60,103,101,110,101, ++ 120,112,114,62,50,0,0,0,115,4,0,0,0,2,128,26, ++ 0,114,10,0,0,0,218,0,99,1,0,0,0,0,0,0, ++ 0,0,0,0,0,2,0,0,0,4,0,0,0,67,0,0, ++ 0,115,22,0,0,0,104,0,124,0,93,7,125,1,100,0, ++ 124,1,155,0,157,2,146,2,113,2,83,0,41,1,250,1, ++ 58,114,8,0,0,0,41,2,114,6,0,0,0,218,1,115, ++ 114,8,0,0,0,114,8,0,0,0,114,9,0,0,0,218, ++ 9,60,115,101,116,99,111,109,112,62,54,0,0,0,115,2, ++ 0,0,0,22,0,114,14,0,0,0,41,1,218,3,119,105, ++ 110,41,2,90,6,99,121,103,119,105,110,90,6,100,97,114, ++ 119,105,110,99,0,0,0,0,0,0,0,0,0,0,0,0, ++ 1,0,0,0,3,0,0,0,3,0,0,0,115,62,0,0, ++ 0,116,0,106,1,160,2,116,3,161,1,114,25,116,0,106, ++ 1,160,2,116,4,161,1,114,15,100,1,137,0,110,2,100, ++ 2,137,0,135,0,102,1,100,3,100,4,132,8,125,0,124, ++ 0,83,0,100,5,100,4,132,0,125,0,124,0,83,0,41, ++ 6,78,90,12,80,89,84,72,79,78,67,65,83,69,79,75, ++ 115,12,0,0,0,80,89,84,72,79,78,67,65,83,69,79, ++ 75,99,0,0,0,0,0,0,0,0,0,0,0,0,0,0, ++ 0,0,2,0,0,0,19,0,0,0,115,20,0,0,0,116, ++ 0,106,1,106,2,12,0,111,9,136,0,116,3,106,4,118, ++ 0,83,0,41,2,122,94,84,114,117,101,32,105,102,32,102, ++ 105,108,101,110,97,109,101,115,32,109,117,115,116,32,98,101, ++ 32,99,104,101,99,107,101,100,32,99,97,115,101,45,105,110, ++ 115,101,110,115,105,116,105,118,101,108,121,32,97,110,100,32, ++ 105,103,110,111,114,101,32,101,110,118,105,114,111,110,109,101, ++ 110,116,32,102,108,97,103,115,32,97,114,101,32,110,111,116, ++ 32,115,101,116,46,78,41,5,218,3,115,121,115,218,5,102, ++ 108,97,103,115,218,18,105,103,110,111,114,101,95,101,110,118, ++ 105,114,111,110,109,101,110,116,218,3,95,111,115,218,7,101, ++ 110,118,105,114,111,110,114,8,0,0,0,169,1,218,3,107, ++ 101,121,114,8,0,0,0,114,9,0,0,0,218,11,95,114, ++ 101,108,97,120,95,99,97,115,101,71,0,0,0,243,2,0, ++ 0,0,20,2,122,37,95,109,97,107,101,95,114,101,108,97, ++ 120,95,99,97,115,101,46,60,108,111,99,97,108,115,62,46, ++ 95,114,101,108,97,120,95,99,97,115,101,99,0,0,0,0, ++ 0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0, ++ 83,0,0,0,243,4,0,0,0,100,1,83,0,41,3,122, ++ 53,84,114,117,101,32,105,102,32,102,105,108,101,110,97,109, + 101,115,32,109,117,115,116,32,98,101,32,99,104,101,99,107, + 101,100,32,99,97,115,101,45,105,110,115,101,110,115,105,116, +- 105,118,101,108,121,32,97,110,100,32,105,103,110,111,114,101, +- 32,101,110,118,105,114,111,110,109,101,110,116,32,102,108,97, +- 103,115,32,97,114,101,32,110,111,116,32,115,101,116,46,78, +- 41,5,218,3,115,121,115,218,5,102,108,97,103,115,218,18, +- 105,103,110,111,114,101,95,101,110,118,105,114,111,110,109,101, +- 110,116,218,3,95,111,115,90,7,101,110,118,105,114,111,110, +- 114,7,0,0,0,169,1,218,3,107,101,121,114,7,0,0, +- 0,114,8,0,0,0,218,11,95,114,101,108,97,120,95,99, +- 97,115,101,67,0,0,0,243,2,0,0,0,20,2,122,37, +- 95,109,97,107,101,95,114,101,108,97,120,95,99,97,115,101, +- 46,60,108,111,99,97,108,115,62,46,95,114,101,108,97,120, +- 95,99,97,115,101,99,0,0,0,0,0,0,0,0,0,0, +- 0,0,0,0,0,0,1,0,0,0,83,0,0,0,243,4, +- 0,0,0,100,1,83,0,41,3,122,53,84,114,117,101,32, +- 105,102,32,102,105,108,101,110,97,109,101,115,32,109,117,115, +- 116,32,98,101,32,99,104,101,99,107,101,100,32,99,97,115, +- 101,45,105,110,115,101,110,115,105,116,105,118,101,108,121,46, +- 70,78,114,7,0,0,0,114,7,0,0,0,114,7,0,0, +- 0,114,7,0,0,0,114,8,0,0,0,114,21,0,0,0, +- 71,0,0,0,243,2,0,0,0,4,2,41,5,114,15,0, +- 0,0,218,8,112,108,97,116,102,111,114,109,218,10,115,116, +- 97,114,116,115,119,105,116,104,218,27,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,218,35,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,83,84,82,95,75,69,89,41,1,114,21,0,0, +- 0,114,7,0,0,0,114,19,0,0,0,114,8,0,0,0, +- 218,16,95,109,97,107,101,95,114,101,108,97,120,95,99,97, +- 115,101,60,0,0,0,115,16,0,0,0,12,1,12,1,6, +- 1,4,2,12,2,4,7,8,253,4,3,114,29,0,0,0, ++ 105,118,101,108,121,46,70,78,114,8,0,0,0,114,8,0, ++ 0,0,114,8,0,0,0,114,8,0,0,0,114,9,0,0, ++ 0,114,23,0,0,0,75,0,0,0,243,2,0,0,0,4, ++ 2,41,5,114,16,0,0,0,218,8,112,108,97,116,102,111, ++ 114,109,218,10,115,116,97,114,116,115,119,105,116,104,218,27, ++ 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,218,35,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,83,84,82,95,75,69,89, ++ 41,1,114,23,0,0,0,114,8,0,0,0,114,21,0,0, ++ 0,114,9,0,0,0,218,16,95,109,97,107,101,95,114,101, ++ 108,97,120,95,99,97,115,101,64,0,0,0,115,16,0,0, ++ 0,12,1,12,1,6,1,4,2,12,2,4,7,8,253,4, ++ 3,114,31,0,0,0,99,1,0,0,0,0,0,0,0,0, ++ 0,0,0,1,0,0,0,4,0,0,0,67,0,0,0,115, ++ 20,0,0,0,116,0,124,0,131,1,100,1,64,0,160,1, ++ 100,2,100,3,161,2,83,0,41,5,122,42,67,111,110,118, ++ 101,114,116,32,97,32,51,50,45,98,105,116,32,105,110,116, ++ 101,103,101,114,32,116,111,32,108,105,116,116,108,101,45,101, ++ 110,100,105,97,110,46,236,3,0,0,0,255,127,255,127,3, ++ 0,233,4,0,0,0,218,6,108,105,116,116,108,101,78,41, ++ 2,218,3,105,110,116,218,8,116,111,95,98,121,116,101,115, ++ 41,1,218,1,120,114,8,0,0,0,114,8,0,0,0,114, ++ 9,0,0,0,218,12,95,112,97,99,107,95,117,105,110,116, ++ 51,50,83,0,0,0,114,24,0,0,0,114,38,0,0,0, + 99,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0, +- 0,4,0,0,0,67,0,0,0,115,20,0,0,0,116,0, +- 124,0,131,1,100,1,64,0,160,1,100,2,100,3,161,2, +- 83,0,41,5,122,42,67,111,110,118,101,114,116,32,97,32, +- 51,50,45,98,105,116,32,105,110,116,101,103,101,114,32,116, +- 111,32,108,105,116,116,108,101,45,101,110,100,105,97,110,46, +- 236,3,0,0,0,255,127,255,127,3,0,233,4,0,0,0, +- 218,6,108,105,116,116,108,101,78,41,2,218,3,105,110,116, +- 218,8,116,111,95,98,121,116,101,115,41,1,218,1,120,114, +- 7,0,0,0,114,7,0,0,0,114,8,0,0,0,218,12, +- 95,112,97,99,107,95,117,105,110,116,51,50,79,0,0,0, +- 114,22,0,0,0,114,36,0,0,0,99,1,0,0,0,0, +- 0,0,0,0,0,0,0,1,0,0,0,4,0,0,0,67, +- 0,0,0,243,28,0,0,0,116,0,124,0,131,1,100,1, +- 107,2,115,8,74,0,130,1,116,1,160,2,124,0,100,2, +- 161,2,83,0,41,4,122,47,67,111,110,118,101,114,116,32, +- 52,32,98,121,116,101,115,32,105,110,32,108,105,116,116,108, +- 101,45,101,110,100,105,97,110,32,116,111,32,97,110,32,105, +- 110,116,101,103,101,114,46,114,31,0,0,0,114,32,0,0, +- 0,78,169,3,114,4,0,0,0,114,33,0,0,0,218,10, +- 102,114,111,109,95,98,121,116,101,115,169,1,218,4,100,97, +- 116,97,114,7,0,0,0,114,7,0,0,0,114,8,0,0, +- 0,218,14,95,117,110,112,97,99,107,95,117,105,110,116,51, +- 50,84,0,0,0,243,4,0,0,0,16,2,12,1,114,42, +- 0,0,0,99,1,0,0,0,0,0,0,0,0,0,0,0, +- 1,0,0,0,4,0,0,0,67,0,0,0,114,37,0,0, +- 0,41,4,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,32,0,0,0,78,114, +- 38,0,0,0,114,40,0,0,0,114,7,0,0,0,114,7, +- 0,0,0,114,8,0,0,0,218,14,95,117,110,112,97,99, +- 107,95,117,105,110,116,49,54,89,0,0,0,114,43,0,0, +- 0,114,45,0,0,0,99,0,0,0,0,0,0,0,0,0, +- 0,0,0,5,0,0,0,4,0,0,0,71,0,0,0,115, +- 228,0,0,0,124,0,115,4,100,1,83,0,116,0,124,0, +- 131,1,100,2,107,2,114,14,124,0,100,3,25,0,83,0, +- 100,1,125,1,103,0,125,2,116,1,116,2,106,3,124,0, +- 131,2,68,0,93,61,92,2,125,3,125,4,124,3,160,4, +- 116,5,161,1,115,38,124,3,160,6,116,5,161,1,114,51, +- 124,3,160,7,116,8,161,1,112,44,124,1,125,1,116,9, +- 124,4,23,0,103,1,125,2,113,24,124,3,160,6,100,4, +- 161,1,114,76,124,1,160,10,161,0,124,3,160,10,161,0, +- 107,3,114,70,124,3,125,1,124,4,103,1,125,2,113,24, +- 124,2,160,11,124,4,161,1,1,0,113,24,124,3,112,79, +- 124,1,125,1,124,2,160,11,124,4,161,1,1,0,113,24, +- 100,5,100,6,132,0,124,2,68,0,131,1,125,2,116,0, +- 124,2,131,1,100,2,107,2,114,107,124,2,100,3,25,0, +- 115,107,124,1,116,9,23,0,83,0,124,1,116,9,160,12, +- 124,2,161,1,23,0,83,0,41,8,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,10,0,0,0, +- 114,3,0,0,0,114,0,0,0,0,114,11,0,0,0,99, +- 1,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, +- 5,0,0,0,83,0,0,0,243,26,0,0,0,103,0,124, +- 0,93,9,125,1,124,1,114,2,124,1,160,0,116,1,161, +- 1,145,2,113,2,83,0,114,7,0,0,0,169,2,218,6, +- 114,115,116,114,105,112,218,15,112,97,116,104,95,115,101,112, +- 97,114,97,116,111,114,115,169,2,114,5,0,0,0,218,1, +- 112,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, +- 218,10,60,108,105,115,116,99,111,109,112,62,119,0,0,0, +- 115,2,0,0,0,26,0,250,30,95,112,97,116,104,95,106, +- 111,105,110,46,60,108,111,99,97,108,115,62,46,60,108,105, +- 115,116,99,111,109,112,62,78,41,13,114,4,0,0,0,218, +- 3,109,97,112,114,18,0,0,0,218,15,95,112,97,116,104, +- 95,115,112,108,105,116,114,111,111,116,114,26,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,114,49,0,0,0,114,50, +- 0,0,0,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,5,218,10,112,97,116,104,95,112,97, +- 114,116,115,218,4,114,111,111,116,218,4,112,97,116,104,90, +- 8,110,101,119,95,114,111,111,116,218,4,116,97,105,108,114, +- 7,0,0,0,114,7,0,0,0,114,8,0,0,0,218,10, +- 95,112,97,116,104,95,106,111,105,110,96,0,0,0,115,42, +- 0,0,0,4,2,4,1,12,1,8,1,4,1,4,1,20, +- 1,20,1,14,1,12,1,10,1,16,1,4,3,8,1,12, +- 2,8,2,12,1,14,1,20,1,8,2,14,1,114,67,0, +- 0,0,99,0,0,0,0,0,0,0,0,0,0,0,0,1, +- 0,0,0,4,0,0,0,71,0,0,0,115,20,0,0,0, +- 116,0,160,1,100,1,100,2,132,0,124,0,68,0,131,1, +- 161,1,83,0,41,4,114,46,0,0,0,99,1,0,0,0, +- 0,0,0,0,0,0,0,0,2,0,0,0,5,0,0,0, +- 83,0,0,0,114,47,0,0,0,114,7,0,0,0,114,48, +- 0,0,0,41,2,114,5,0,0,0,218,4,112,97,114,116, +- 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,114, +- 53,0,0,0,128,0,0,0,115,6,0,0,0,6,0,4, +- 1,16,255,114,54,0,0,0,78,41,2,114,59,0,0,0, +- 114,62,0,0,0,41,1,114,63,0,0,0,114,7,0,0, +- 0,114,7,0,0,0,114,8,0,0,0,114,67,0,0,0, +- 126,0,0,0,115,6,0,0,0,10,2,2,1,8,255,99, +- 1,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, +- 4,0,0,0,3,0,0,0,115,66,0,0,0,116,0,135, +- 0,102,1,100,1,100,2,132,8,116,1,68,0,131,1,131, +- 1,125,1,124,1,100,3,107,0,114,19,100,4,136,0,102, +- 2,83,0,136,0,100,5,124,1,133,2,25,0,136,0,124, +- 1,100,6,23,0,100,5,133,2,25,0,102,2,83,0,41, +- 7,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, +- 2,0,0,0,4,0,0,0,51,0,0,0,115,26,0,0, +- 0,129,0,124,0,93,8,125,1,136,0,160,0,124,1,161, +- 1,86,0,1,0,113,2,100,0,83,0,169,1,78,41,1, +- 218,5,114,102,105,110,100,114,51,0,0,0,169,1,114,65, +- 0,0,0,114,7,0,0,0,114,8,0,0,0,114,9,0, +- 0,0,134,0,0,0,115,4,0,0,0,2,128,24,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,114, +- 0,0,0,0,114,10,0,0,0,78,114,3,0,0,0,41, +- 2,218,3,109,97,120,114,50,0,0,0,41,2,114,65,0, +- 0,0,218,1,105,114,7,0,0,0,114,71,0,0,0,114, +- 8,0,0,0,218,11,95,112,97,116,104,95,115,112,108,105, +- 116,132,0,0,0,115,8,0,0,0,22,2,8,1,8,1, +- 28,1,114,74,0,0,0,99,1,0,0,0,0,0,0,0, +- 0,0,0,0,1,0,0,0,3,0,0,0,67,0,0,0, +- 115,10,0,0,0,116,0,160,1,124,0,161,1,83,0,41, +- 2,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,78,41,2,114,18,0,0,0,90,4,115,116,97,116,114, +- 71,0,0,0,114,7,0,0,0,114,7,0,0,0,114,8, +- 0,0,0,218,10,95,112,97,116,104,95,115,116,97,116,140, +- 0,0,0,115,2,0,0,0,10,7,114,75,0,0,0,99, +- 2,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0, +- 8,0,0,0,67,0,0,0,115,48,0,0,0,122,6,116, +- 0,124,0,131,1,125,2,87,0,110,10,4,0,116,1,121, +- 16,1,0,1,0,1,0,89,0,100,1,83,0,119,0,124, +- 2,106,2,100,2,64,0,124,1,107,2,83,0,41,4,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,78,41,3,114,75,0,0,0, +- 218,7,79,83,69,114,114,111,114,218,7,115,116,95,109,111, +- 100,101,41,3,114,65,0,0,0,218,4,109,111,100,101,90, +- 9,115,116,97,116,95,105,110,102,111,114,7,0,0,0,114, +- 7,0,0,0,114,8,0,0,0,218,18,95,112,97,116,104, +- 95,105,115,95,109,111,100,101,95,116,121,112,101,150,0,0, +- 0,115,12,0,0,0,2,2,12,1,12,1,6,1,2,255, +- 14,2,114,79,0,0,0,99,1,0,0,0,0,0,0,0, +- 0,0,0,0,1,0,0,0,3,0,0,0,67,0,0,0, +- 115,10,0,0,0,116,0,124,0,100,1,131,2,83,0,41, +- 3,122,31,82,101,112,108,97,99,101,109,101,110,116,32,102, +- 111,114,32,111,115,46,112,97,116,104,46,105,115,102,105,108, +- 101,46,105,0,128,0,0,78,41,1,114,79,0,0,0,114, +- 71,0,0,0,114,7,0,0,0,114,7,0,0,0,114,8, +- 0,0,0,218,12,95,112,97,116,104,95,105,115,102,105,108, +- 101,159,0,0,0,243,2,0,0,0,10,2,114,80,0,0, +- 0,99,1,0,0,0,0,0,0,0,0,0,0,0,1,0, +- 0,0,3,0,0,0,67,0,0,0,115,22,0,0,0,124, +- 0,115,6,116,0,160,1,161,0,125,0,116,2,124,0,100, +- 1,131,2,83,0,41,3,122,30,82,101,112,108,97,99,101, ++ 0,4,0,0,0,67,0,0,0,243,28,0,0,0,116,0, ++ 124,0,131,1,100,1,107,2,115,8,74,0,130,1,116,1, ++ 160,2,124,0,100,2,161,2,83,0,41,4,122,47,67,111, ++ 110,118,101,114,116,32,52,32,98,121,116,101,115,32,105,110, ++ 32,108,105,116,116,108,101,45,101,110,100,105,97,110,32,116, ++ 111,32,97,110,32,105,110,116,101,103,101,114,46,114,33,0, ++ 0,0,114,34,0,0,0,78,169,3,114,5,0,0,0,114, ++ 35,0,0,0,218,10,102,114,111,109,95,98,121,116,101,115, ++ 169,1,218,4,100,97,116,97,114,8,0,0,0,114,8,0, ++ 0,0,114,9,0,0,0,218,14,95,117,110,112,97,99,107, ++ 95,117,105,110,116,51,50,88,0,0,0,243,4,0,0,0, ++ 16,2,12,1,114,44,0,0,0,99,1,0,0,0,0,0, ++ 0,0,0,0,0,0,1,0,0,0,4,0,0,0,67,0, ++ 0,0,114,39,0,0,0,41,4,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, ++ 34,0,0,0,78,114,40,0,0,0,114,42,0,0,0,114, ++ 8,0,0,0,114,8,0,0,0,114,9,0,0,0,218,14, ++ 95,117,110,112,97,99,107,95,117,105,110,116,49,54,93,0, ++ 0,0,114,45,0,0,0,114,47,0,0,0,99,0,0,0, ++ 0,0,0,0,0,0,0,0,0,5,0,0,0,4,0,0, ++ 0,71,0,0,0,115,228,0,0,0,124,0,115,4,100,1, ++ 83,0,116,0,124,0,131,1,100,2,107,2,114,14,124,0, ++ 100,3,25,0,83,0,100,1,125,1,103,0,125,2,116,1, ++ 116,2,106,3,124,0,131,2,68,0,93,61,92,2,125,3, ++ 125,4,124,3,160,4,116,5,161,1,115,38,124,3,160,6, ++ 116,5,161,1,114,51,124,3,160,7,116,8,161,1,112,44, ++ 124,1,125,1,116,9,124,4,23,0,103,1,125,2,113,24, ++ 124,3,160,6,100,4,161,1,114,76,124,1,160,10,161,0, ++ 124,3,160,10,161,0,107,3,114,70,124,3,125,1,124,4, ++ 103,1,125,2,113,24,124,2,160,11,124,4,161,1,1,0, ++ 113,24,124,3,112,79,124,1,125,1,124,2,160,11,124,4, ++ 161,1,1,0,113,24,100,5,100,6,132,0,124,2,68,0, ++ 131,1,125,2,116,0,124,2,131,1,100,2,107,2,114,107, ++ 124,2,100,3,25,0,115,107,124,1,116,9,23,0,83,0, ++ 124,1,116,9,160,12,124,2,161,1,23,0,83,0,41,8, ++ 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,11,0,0,0,114,4,0,0,0,114,0,0,0,0, ++ 114,12,0,0,0,99,1,0,0,0,0,0,0,0,0,0, ++ 0,0,2,0,0,0,5,0,0,0,83,0,0,0,243,26, ++ 0,0,0,103,0,124,0,93,9,125,1,124,1,114,2,124, ++ 1,160,0,116,1,161,1,145,2,113,2,83,0,114,8,0, ++ 0,0,169,2,218,6,114,115,116,114,105,112,218,15,112,97, ++ 116,104,95,115,101,112,97,114,97,116,111,114,115,169,2,114, ++ 6,0,0,0,218,1,112,114,8,0,0,0,114,8,0,0, ++ 0,114,9,0,0,0,218,10,60,108,105,115,116,99,111,109, ++ 112,62,123,0,0,0,115,2,0,0,0,26,0,250,30,95, ++ 112,97,116,104,95,106,111,105,110,46,60,108,111,99,97,108, ++ 115,62,46,60,108,105,115,116,99,111,109,112,62,78,41,13, ++ 114,5,0,0,0,218,3,109,97,112,114,19,0,0,0,218, ++ 15,95,112,97,116,104,95,115,112,108,105,116,114,111,111,116, ++ 114,28,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,114, ++ 51,0,0,0,114,52,0,0,0,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,5,218,10,112, ++ 97,116,104,95,112,97,114,116,115,218,4,114,111,111,116,218, ++ 4,112,97,116,104,90,8,110,101,119,95,114,111,111,116,218, ++ 4,116,97,105,108,114,8,0,0,0,114,8,0,0,0,114, ++ 9,0,0,0,218,10,95,112,97,116,104,95,106,111,105,110, ++ 100,0,0,0,115,42,0,0,0,4,2,4,1,12,1,8, ++ 1,4,1,4,1,20,1,20,1,14,1,12,1,10,1,16, ++ 1,4,3,8,1,12,2,8,2,12,1,14,1,20,1,8, ++ 2,14,1,114,69,0,0,0,99,0,0,0,0,0,0,0, ++ 0,0,0,0,0,1,0,0,0,4,0,0,0,71,0,0, ++ 0,115,20,0,0,0,116,0,160,1,100,1,100,2,132,0, ++ 124,0,68,0,131,1,161,1,83,0,41,4,114,48,0,0, ++ 0,99,1,0,0,0,0,0,0,0,0,0,0,0,2,0, ++ 0,0,5,0,0,0,83,0,0,0,114,49,0,0,0,114, ++ 8,0,0,0,114,50,0,0,0,41,2,114,6,0,0,0, ++ 218,4,112,97,114,116,114,8,0,0,0,114,8,0,0,0, ++ 114,9,0,0,0,114,55,0,0,0,132,0,0,0,115,6, ++ 0,0,0,6,0,4,1,16,255,114,56,0,0,0,78,41, ++ 2,114,61,0,0,0,114,64,0,0,0,41,1,114,65,0, ++ 0,0,114,8,0,0,0,114,8,0,0,0,114,9,0,0, ++ 0,114,69,0,0,0,130,0,0,0,115,6,0,0,0,10, ++ 2,2,1,8,255,99,1,0,0,0,0,0,0,0,0,0, ++ 0,0,2,0,0,0,4,0,0,0,3,0,0,0,115,66, ++ 0,0,0,116,0,135,0,102,1,100,1,100,2,132,8,116, ++ 1,68,0,131,1,131,1,125,1,124,1,100,3,107,0,114, ++ 19,100,4,136,0,102,2,83,0,136,0,100,5,124,1,133, ++ 2,25,0,136,0,124,1,100,6,23,0,100,5,133,2,25, ++ 0,102,2,83,0,41,7,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,105,115,100,105,114,46,105,0,64,0,0,78,41,3,114, +- 18,0,0,0,218,6,103,101,116,99,119,100,114,79,0,0, +- 0,114,71,0,0,0,114,7,0,0,0,114,7,0,0,0, +- 114,8,0,0,0,218,11,95,112,97,116,104,95,105,115,100, +- 105,114,164,0,0,0,115,6,0,0,0,4,2,8,1,10, +- 1,114,83,0,0,0,99,1,0,0,0,0,0,0,0,0, +- 0,0,0,2,0,0,0,4,0,0,0,67,0,0,0,115, +- 62,0,0,0,124,0,115,4,100,1,83,0,116,0,160,1, +- 124,0,161,1,100,2,25,0,160,2,100,3,100,4,161,2, +- 125,1,116,3,124,1,131,1,100,5,107,4,111,30,124,1, +- 160,4,100,6,161,1,112,30,124,1,160,5,100,4,161,1, +- 83,0,41,8,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,0,0,0,0,114,2,0,0,0,114, +- 1,0,0,0,114,3,0,0,0,122,2,92,92,78,41,6, +- 114,18,0,0,0,114,56,0,0,0,218,7,114,101,112,108, +- 97,99,101,114,4,0,0,0,114,26,0,0,0,114,58,0, +- 0,0,41,2,114,65,0,0,0,114,64,0,0,0,114,7, +- 0,0,0,114,7,0,0,0,114,8,0,0,0,218,11,95, +- 112,97,116,104,95,105,115,97,98,115,172,0,0,0,115,8, +- 0,0,0,4,2,4,1,22,1,32,1,114,86,0,0,0, +- 99,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0, +- 0,3,0,0,0,67,0,0,0,115,10,0,0,0,124,0, +- 160,0,116,1,161,1,83,0,41,2,114,84,0,0,0,78, +- 41,2,114,26,0,0,0,114,50,0,0,0,114,71,0,0, +- 0,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, +- 114,86,0,0,0,180,0,0,0,114,81,0,0,0,233,182, +- 1,0,0,99,3,0,0,0,0,0,0,0,0,0,0,0, +- 6,0,0,0,11,0,0,0,67,0,0,0,115,170,0,0, +- 0,100,1,160,0,124,0,116,1,124,0,131,1,161,2,125, +- 3,116,2,160,3,124,3,116,2,106,4,116,2,106,5,66, +- 0,116,2,106,6,66,0,124,2,100,2,64,0,161,3,125, +- 4,122,36,116,7,160,8,124,4,100,3,161,2,143,13,125, +- 5,124,5,160,9,124,1,161,1,1,0,87,0,100,4,4, +- 0,4,0,131,3,1,0,110,8,49,0,115,47,119,1,1, +- 0,1,0,1,0,89,0,1,0,116,2,160,10,124,3,124, +- 0,161,2,1,0,87,0,100,4,83,0,4,0,116,11,121, +- 84,1,0,1,0,1,0,122,7,116,2,160,12,124,3,161, +- 1,1,0,87,0,130,0,4,0,116,11,121,83,1,0,1, +- 0,1,0,89,0,130,0,119,0,119,0,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,250,5,123,125,46,123,125,114,87,0,0,0,90,2,119, +- 98,78,41,13,218,6,102,111,114,109,97,116,218,2,105,100, +- 114,18,0,0,0,90,4,111,112,101,110,90,6,79,95,69, +- 88,67,76,90,7,79,95,67,82,69,65,84,90,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,85,0,0,0,114, +- 76,0,0,0,90,6,117,110,108,105,110,107,41,6,114,65, +- 0,0,0,114,41,0,0,0,114,78,0,0,0,90,8,112, +- 97,116,104,95,116,109,112,90,2,102,100,218,4,102,105,108, +- 101,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, +- 218,13,95,119,114,105,116,101,95,97,116,111,109,105,99,185, +- 0,0,0,115,36,0,0,0,16,5,6,1,22,1,4,255, +- 2,2,14,3,12,1,28,255,18,2,12,1,2,1,12,1, +- 2,3,12,254,2,1,2,1,2,254,2,253,114,95,0,0, +- 0,105,111,13,0,0,114,44,0,0,0,114,32,0,0,0, +- 115,2,0,0,0,13,10,90,11,95,95,112,121,99,97,99, +- 104,101,95,95,122,4,111,112,116,45,122,3,46,112,121,122, +- 4,46,112,121,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,12,0,0,0,5,0,0,0, +- 67,0,0,0,115,80,1,0,0,124,1,100,1,117,1,114, +- 26,116,0,160,1,100,2,116,2,161,2,1,0,124,2,100, +- 1,117,1,114,20,100,3,125,3,116,3,124,3,131,1,130, +- 1,124,1,114,24,100,4,110,1,100,5,125,2,116,4,160, +- 5,124,0,161,1,125,0,116,6,124,0,131,1,92,2,125, +- 4,125,5,124,5,160,7,100,6,161,1,92,3,125,6,125, +- 7,125,8,116,8,106,9,106,10,125,9,124,9,100,1,117, +- 0,114,57,116,11,100,7,131,1,130,1,100,4,160,12,124, +- 6,114,63,124,6,110,1,124,8,124,7,124,9,103,3,161, +- 1,125,10,124,2,100,1,117,0,114,86,116,8,106,13,106, +- 14,100,8,107,2,114,82,100,4,125,2,110,4,116,8,106, +- 13,106,14,125,2,116,15,124,2,131,1,125,2,124,2,100, +- 4,107,3,114,112,124,2,160,16,161,0,115,105,116,17,100, +- 9,160,18,124,2,161,1,131,1,130,1,100,10,160,18,124, +- 10,116,19,124,2,161,3,125,10,124,10,116,20,100,8,25, +- 0,23,0,125,11,116,8,106,21,100,1,117,1,114,162,116, +- 22,124,4,131,1,115,134,116,23,116,4,160,24,161,0,124, +- 4,131,2,125,4,124,4,100,5,25,0,100,11,107,2,114, +- 152,124,4,100,8,25,0,116,25,118,1,114,152,124,4,100, +- 12,100,1,133,2,25,0,125,4,116,23,116,8,106,21,124, +- 4,160,26,116,25,161,1,124,11,131,3,83,0,116,23,124, +- 4,116,27,124,11,131,3,83,0,41,13,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, ++ 46,115,112,108,105,116,40,41,46,99,1,0,0,0,0,0, ++ 0,0,0,0,0,0,2,0,0,0,4,0,0,0,51,0, ++ 0,0,115,26,0,0,0,129,0,124,0,93,8,125,1,136, ++ 0,160,0,124,1,161,1,86,0,1,0,113,2,100,0,83, ++ 0,169,1,78,41,1,218,5,114,102,105,110,100,114,53,0, ++ 0,0,169,1,114,67,0,0,0,114,8,0,0,0,114,9, ++ 0,0,0,114,10,0,0,0,138,0,0,0,115,4,0,0, ++ 0,2,128,24,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,114,0,0,0,0,114,11,0,0,0,78, ++ 114,4,0,0,0,41,2,218,3,109,97,120,114,52,0,0, ++ 0,41,2,114,67,0,0,0,218,1,105,114,8,0,0,0, ++ 114,73,0,0,0,114,9,0,0,0,218,11,95,112,97,116, ++ 104,95,115,112,108,105,116,136,0,0,0,115,8,0,0,0, ++ 22,2,8,1,8,1,28,1,114,76,0,0,0,99,1,0, ++ 0,0,0,0,0,0,0,0,0,0,1,0,0,0,3,0, ++ 0,0,67,0,0,0,115,10,0,0,0,116,0,160,1,124, ++ 0,161,1,83,0,41,2,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,78,41,2,114,19,0,0,0,90, ++ 4,115,116,97,116,114,73,0,0,0,114,8,0,0,0,114, ++ 8,0,0,0,114,9,0,0,0,218,10,95,112,97,116,104, ++ 95,115,116,97,116,144,0,0,0,115,2,0,0,0,10,7, ++ 114,77,0,0,0,99,2,0,0,0,0,0,0,0,0,0, ++ 0,0,3,0,0,0,8,0,0,0,67,0,0,0,115,48, ++ 0,0,0,122,6,116,0,124,0,131,1,125,2,87,0,110, ++ 10,4,0,116,1,121,16,1,0,1,0,1,0,89,0,100, ++ 1,83,0,119,0,124,2,106,2,100,2,64,0,124,1,107, ++ 2,83,0,41,4,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,78,41, ++ 3,114,77,0,0,0,218,7,79,83,69,114,114,111,114,218, ++ 7,115,116,95,109,111,100,101,41,3,114,67,0,0,0,218, ++ 4,109,111,100,101,90,9,115,116,97,116,95,105,110,102,111, ++ 114,8,0,0,0,114,8,0,0,0,114,9,0,0,0,218, ++ 18,95,112,97,116,104,95,105,115,95,109,111,100,101,95,116, ++ 121,112,101,154,0,0,0,115,12,0,0,0,2,2,12,1, ++ 12,1,6,1,2,255,14,2,114,81,0,0,0,99,1,0, ++ 0,0,0,0,0,0,0,0,0,0,1,0,0,0,3,0, ++ 0,0,67,0,0,0,115,10,0,0,0,116,0,124,0,100, ++ 1,131,2,83,0,41,3,122,31,82,101,112,108,97,99,101, ++ 109,101,110,116,32,102,111,114,32,111,115,46,112,97,116,104, ++ 46,105,115,102,105,108,101,46,105,0,128,0,0,78,41,1, ++ 114,81,0,0,0,114,73,0,0,0,114,8,0,0,0,114, ++ 8,0,0,0,114,9,0,0,0,218,12,95,112,97,116,104, ++ 95,105,115,102,105,108,101,163,0,0,0,243,2,0,0,0, ++ 10,2,114,82,0,0,0,99,1,0,0,0,0,0,0,0, ++ 0,0,0,0,1,0,0,0,3,0,0,0,67,0,0,0, ++ 115,22,0,0,0,124,0,115,6,116,0,160,1,161,0,125, ++ 0,116,2,124,0,100,1,131,2,83,0,41,3,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,78,41,3,114,19,0,0,0,218,6,103,101,116,99, ++ 119,100,114,81,0,0,0,114,73,0,0,0,114,8,0,0, ++ 0,114,8,0,0,0,114,9,0,0,0,218,11,95,112,97, ++ 116,104,95,105,115,100,105,114,168,0,0,0,115,6,0,0, ++ 0,4,2,8,1,10,1,114,85,0,0,0,99,1,0,0, ++ 0,0,0,0,0,0,0,0,0,2,0,0,0,4,0,0, ++ 0,67,0,0,0,115,62,0,0,0,124,0,115,4,100,1, ++ 83,0,116,0,160,1,124,0,161,1,100,2,25,0,160,2, ++ 100,3,100,4,161,2,125,1,116,3,124,1,131,1,100,5, ++ 107,4,111,30,124,1,160,4,100,6,161,1,112,30,124,1, ++ 160,5,100,4,161,1,83,0,41,8,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,0,0,0,0, ++ 114,2,0,0,0,114,1,0,0,0,114,4,0,0,0,122, ++ 2,92,92,78,41,6,114,19,0,0,0,114,58,0,0,0, ++ 218,7,114,101,112,108,97,99,101,114,5,0,0,0,114,28, ++ 0,0,0,114,60,0,0,0,41,2,114,67,0,0,0,114, ++ 66,0,0,0,114,8,0,0,0,114,8,0,0,0,114,9, ++ 0,0,0,218,11,95,112,97,116,104,95,105,115,97,98,115, ++ 176,0,0,0,115,8,0,0,0,4,2,4,1,22,1,32, ++ 1,114,88,0,0,0,99,1,0,0,0,0,0,0,0,0, ++ 0,0,0,1,0,0,0,3,0,0,0,67,0,0,0,115, ++ 10,0,0,0,124,0,160,0,116,1,161,1,83,0,41,2, ++ 114,86,0,0,0,78,41,2,114,28,0,0,0,114,52,0, ++ 0,0,114,73,0,0,0,114,8,0,0,0,114,8,0,0, ++ 0,114,9,0,0,0,114,88,0,0,0,184,0,0,0,114, ++ 83,0,0,0,233,182,1,0,0,99,3,0,0,0,0,0, ++ 0,0,0,0,0,0,6,0,0,0,11,0,0,0,67,0, ++ 0,0,115,170,0,0,0,100,1,160,0,124,0,116,1,124, ++ 0,131,1,161,2,125,3,116,2,160,3,124,3,116,2,106, ++ 4,116,2,106,5,66,0,116,2,106,6,66,0,124,2,100, ++ 2,64,0,161,3,125,4,122,36,116,7,160,8,124,4,100, ++ 3,161,2,143,13,125,5,124,5,160,9,124,1,161,1,1, ++ 0,87,0,100,4,4,0,4,0,131,3,1,0,110,8,49, ++ 0,115,47,119,1,1,0,1,0,1,0,89,0,1,0,116, ++ 2,160,10,124,3,124,0,161,2,1,0,87,0,100,4,83, ++ 0,4,0,116,11,121,84,1,0,1,0,1,0,122,7,116, ++ 2,160,12,124,3,161,1,1,0,87,0,130,0,4,0,116, ++ 11,121,83,1,0,1,0,1,0,89,0,130,0,119,0,119, ++ 0,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,250,5,123,125,46,123,125,114,89, ++ 0,0,0,90,2,119,98,78,41,13,218,6,102,111,114,109, ++ 97,116,218,2,105,100,114,19,0,0,0,90,4,111,112,101, ++ 110,90,6,79,95,69,88,67,76,90,7,79,95,67,82,69, ++ 65,84,90,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,87,0,0,0,114,78,0,0,0,90,6,117,110,108,105, ++ 110,107,41,6,114,67,0,0,0,114,43,0,0,0,114,80, ++ 0,0,0,90,8,112,97,116,104,95,116,109,112,90,2,102, ++ 100,218,4,102,105,108,101,114,8,0,0,0,114,8,0,0, ++ 0,114,9,0,0,0,218,13,95,119,114,105,116,101,95,97, ++ 116,111,109,105,99,189,0,0,0,115,36,0,0,0,16,5, ++ 6,1,22,1,4,255,2,2,14,3,12,1,28,255,18,2, ++ 12,1,2,1,12,1,2,3,12,254,2,1,2,1,2,254, ++ 2,253,114,97,0,0,0,105,111,13,0,0,114,46,0,0, ++ 0,114,34,0,0,0,115,2,0,0,0,13,10,90,11,95, ++ 95,112,121,99,97,99,104,101,95,95,122,4,111,112,116,45, ++ 122,3,46,112,121,122,4,46,112,121,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,12,0, ++ 0,0,5,0,0,0,67,0,0,0,115,80,1,0,0,124, ++ 1,100,1,117,1,114,26,116,0,160,1,100,2,116,2,161, ++ 2,1,0,124,2,100,1,117,1,114,20,100,3,125,3,116, ++ 3,124,3,131,1,130,1,124,1,114,24,100,4,110,1,100, ++ 5,125,2,116,4,160,5,124,0,161,1,125,0,116,6,124, ++ 0,131,1,92,2,125,4,125,5,124,5,160,7,100,6,161, ++ 1,92,3,125,6,125,7,125,8,116,8,106,9,106,10,125, ++ 9,124,9,100,1,117,0,114,57,116,11,100,7,131,1,130, ++ 1,100,4,160,12,124,6,114,63,124,6,110,1,124,8,124, ++ 7,124,9,103,3,161,1,125,10,124,2,100,1,117,0,114, ++ 86,116,8,106,13,106,14,100,8,107,2,114,82,100,4,125, ++ 2,110,4,116,8,106,13,106,14,125,2,116,15,124,2,131, ++ 1,125,2,124,2,100,4,107,3,114,112,124,2,160,16,161, ++ 0,115,105,116,17,100,9,160,18,124,2,161,1,131,1,130, ++ 1,100,10,160,18,124,10,116,19,124,2,161,3,125,10,124, ++ 10,116,20,100,8,25,0,23,0,125,11,116,8,106,21,100, ++ 1,117,1,114,162,116,22,124,4,131,1,115,134,116,23,116, ++ 4,160,24,161,0,124,4,131,2,125,4,124,4,100,5,25, ++ 0,100,11,107,2,114,152,124,4,100,8,25,0,116,25,118, ++ 1,114,152,124,4,100,12,100,1,133,2,25,0,125,4,116, ++ 23,116,8,106,21,124,4,160,26,116,25,161,1,124,11,131, ++ 3,83,0,116,23,124,4,116,27,124,11,131,3,83,0,41, ++ 13,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,11,0,0,0,114,4,0,0,0,218,1,46,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,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,10,0,0,0, +- 114,3,0,0,0,218,1,46,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,0, +- 0,0,0,122,24,123,33,114,125,32,105,115,32,110,111,116, +- 32,97,108,112,104,97,110,117,109,101,114,105,99,122,7,123, +- 125,46,123,125,123,125,114,11,0,0,0,114,44,0,0,0, +- 41,28,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,18,0,0,0,218,6,102,115,112,97,116,104,114, +- 74,0,0,0,218,10,114,112,97,114,116,105,116,105,111,110, +- 114,15,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,62,0,0,0,114,16,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,114,89,0,0,0,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,86,0,0,0,114,67,0,0,0,114,82,0,0,0, +- 114,50,0,0,0,218,6,108,115,116,114,105,112,218,8,95, +- 80,89,67,65,67,72,69,41,12,114,65,0,0,0,90,14, +- 100,101,98,117,103,95,111,118,101,114,114,105,100,101,114,96, +- 0,0,0,218,7,109,101,115,115,97,103,101,218,4,104,101, +- 97,100,114,66,0,0,0,90,4,98,97,115,101,114,6,0, +- 0,0,218,4,114,101,115,116,90,3,116,97,103,90,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,114,7,0,0,0,114,7,0, +- 0,0,114,8,0,0,0,218,17,99,97,99,104,101,95,102, +- 114,111,109,95,115,111,117,114,99,101,124,1,0,0,115,72, +- 0,0,0,8,18,6,1,2,1,4,255,8,2,4,1,8, +- 1,12,1,10,1,12,1,16,1,8,1,8,1,8,1,24, +- 1,8,1,12,1,6,1,8,2,8,1,8,1,8,1,14, +- 1,14,1,12,1,10,1,8,9,14,1,24,5,12,1,2, +- 4,4,1,8,1,2,1,4,253,12,5,114,121,0,0,0, +- 99,1,0,0,0,0,0,0,0,0,0,0,0,10,0,0, +- 0,5,0,0,0,67,0,0,0,115,40,1,0,0,116,0, +- 106,1,106,2,100,1,117,0,114,10,116,3,100,2,131,1, +- 130,1,116,4,160,5,124,0,161,1,125,0,116,6,124,0, +- 131,1,92,2,125,1,125,2,100,3,125,3,116,0,106,7, +- 100,1,117,1,114,51,116,0,106,7,160,8,116,9,161,1, +- 125,4,124,1,160,10,124,4,116,11,23,0,161,1,114,51, +- 124,1,116,12,124,4,131,1,100,1,133,2,25,0,125,1, +- 100,4,125,3,124,3,115,72,116,6,124,1,131,1,92,2, +- 125,1,125,5,124,5,116,13,107,3,114,72,116,14,116,13, +- 155,0,100,5,124,0,155,2,157,3,131,1,130,1,124,2, +- 160,15,100,6,161,1,125,6,124,6,100,7,118,1,114,88, +- 116,14,100,8,124,2,155,2,157,2,131,1,130,1,124,6, +- 100,9,107,2,114,132,124,2,160,16,100,6,100,10,161,2, +- 100,11,25,0,125,7,124,7,160,10,116,17,161,1,115,112, +- 116,14,100,12,116,17,155,2,157,2,131,1,130,1,124,7, +- 116,12,116,17,131,1,100,1,133,2,25,0,125,8,124,8, +- 160,18,161,0,115,132,116,14,100,13,124,7,155,2,100,14, +- 157,3,131,1,130,1,124,2,160,19,100,6,161,1,100,15, +- 25,0,125,9,116,20,124,1,124,9,116,21,100,15,25,0, +- 23,0,131,2,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,98,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,97,0,0,0,62,2,0,0,0,114,44, +- 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,122,0,0,0,114,44,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,0,0,0,0,41,22,114,15,0,0,0,114,105,0, +- 0,0,114,106,0,0,0,114,107,0,0,0,114,18,0,0, +- 0,114,103,0,0,0,114,74,0,0,0,114,114,0,0,0, +- 114,49,0,0,0,114,50,0,0,0,114,26,0,0,0,114, +- 59,0,0,0,114,4,0,0,0,114,116,0,0,0,114,111, +- 0,0,0,218,5,99,111,117,110,116,218,6,114,115,112,108, +- 105,116,114,112,0,0,0,114,110,0,0,0,218,9,112,97, +- 114,116,105,116,105,111,110,114,67,0,0,0,218,15,83,79, +- 85,82,67,69,95,83,85,70,70,73,88,69,83,41,10,114, +- 65,0,0,0,114,118,0,0,0,90,16,112,121,99,97,99, +- 104,101,95,102,105,108,101,110,97,109,101,90,23,102,111,117, +- 110,100,95,105,110,95,112,121,99,97,99,104,101,95,112,114, +- 101,102,105,120,90,13,115,116,114,105,112,112,101,100,95,112, +- 97,116,104,90,7,112,121,99,97,99,104,101,90,9,100,111, +- 116,95,99,111,117,110,116,114,96,0,0,0,90,9,111,112, +- 116,95,108,101,118,101,108,90,13,98,97,115,101,95,102,105, +- 108,101,110,97,109,101,114,7,0,0,0,114,7,0,0,0, +- 114,8,0,0,0,218,17,115,111,117,114,99,101,95,102,114, +- 111,109,95,99,97,99,104,101,195,1,0,0,115,60,0,0, +- 0,12,9,8,1,10,1,12,1,4,1,10,1,12,1,14, +- 1,16,1,4,1,4,1,12,1,8,1,8,1,2,1,8, +- 255,10,2,8,1,14,1,8,1,16,1,10,1,4,1,2, +- 1,8,255,16,2,8,1,16,1,14,2,18,1,114,128,0, +- 0,0,99,1,0,0,0,0,0,0,0,0,0,0,0,5, +- 0,0,0,9,0,0,0,67,0,0,0,115,124,0,0,0, +- 116,0,124,0,131,1,100,1,107,2,114,8,100,2,83,0, +- 124,0,160,1,100,3,161,1,92,3,125,1,125,2,125,3, +- 124,1,114,28,124,3,160,2,161,0,100,4,100,5,133,2, +- 25,0,100,6,107,3,114,30,124,0,83,0,122,6,116,3, +- 124,0,131,1,125,4,87,0,110,17,4,0,116,4,116,5, +- 102,2,121,53,1,0,1,0,1,0,124,0,100,2,100,5, +- 133,2,25,0,125,4,89,0,110,1,119,0,116,6,124,4, +- 131,1,114,60,124,4,83,0,124,0,83,0,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,0,0,0, +- 0,78,114,97,0,0,0,233,253,255,255,255,233,255,255,255, +- 255,90,2,112,121,41,7,114,4,0,0,0,114,104,0,0, +- 0,218,5,108,111,119,101,114,114,128,0,0,0,114,107,0, +- 0,0,114,111,0,0,0,114,80,0,0,0,41,5,218,13, +- 98,121,116,101,99,111,100,101,95,112,97,116,104,114,119,0, +- 0,0,218,1,95,90,9,101,120,116,101,110,115,105,111,110, +- 218,11,115,111,117,114,99,101,95,112,97,116,104,114,7,0, +- 0,0,114,7,0,0,0,114,8,0,0,0,218,15,95,103, +- 101,116,95,115,111,117,114,99,101,102,105,108,101,235,1,0, +- 0,115,22,0,0,0,12,7,4,1,16,1,24,1,4,1, +- 2,1,12,1,16,1,16,1,2,255,16,2,114,135,0,0, +- 0,99,1,0,0,0,0,0,0,0,0,0,0,0,1,0, +- 0,0,8,0,0,0,67,0,0,0,115,68,0,0,0,124, +- 0,160,0,116,1,116,2,131,1,161,1,114,23,122,5,116, +- 3,124,0,131,1,87,0,83,0,4,0,116,4,121,22,1, +- 0,1,0,1,0,89,0,100,0,83,0,119,0,124,0,160, +- 0,116,1,116,5,131,1,161,1,114,32,124,0,83,0,100, +- 0,83,0,114,69,0,0,0,41,6,114,58,0,0,0,218, +- 5,116,117,112,108,101,114,127,0,0,0,114,121,0,0,0, +- 114,107,0,0,0,114,113,0,0,0,41,1,114,120,0,0, +- 0,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, +- 218,11,95,103,101,116,95,99,97,99,104,101,100,254,1,0, +- 0,115,18,0,0,0,14,1,2,1,10,1,12,1,6,1, +- 2,255,14,2,4,1,4,2,114,137,0,0,0,99,1,0, +- 0,0,0,0,0,0,0,0,0,0,2,0,0,0,8,0, +- 0,0,67,0,0,0,115,50,0,0,0,122,7,116,0,124, +- 0,131,1,106,1,125,1,87,0,110,11,4,0,116,2,121, +- 18,1,0,1,0,1,0,100,1,125,1,89,0,110,1,119, +- 0,124,1,100,2,79,0,125,1,124,1,83,0,41,4,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,87,0,0,0,233,128,0,0,0,78,41, +- 3,114,75,0,0,0,114,77,0,0,0,114,76,0,0,0, +- 41,2,114,65,0,0,0,114,78,0,0,0,114,7,0,0, +- 0,114,7,0,0,0,114,8,0,0,0,218,10,95,99,97, +- 108,99,95,109,111,100,101,10,2,0,0,115,14,0,0,0, +- 2,2,14,1,12,1,8,1,2,255,8,4,4,1,114,139, ++ 78,111,110,101,114,0,0,0,0,122,24,123,33,114,125,32, ++ 105,115,32,110,111,116,32,97,108,112,104,97,110,117,109,101, ++ 114,105,99,122,7,123,125,46,123,125,123,125,114,12,0,0, ++ 0,114,46,0,0,0,41,28,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,19,0,0,0,218,6,102, ++ 115,112,97,116,104,114,76,0,0,0,218,10,114,112,97,114, ++ 116,105,116,105,111,110,114,16,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,64,0,0,0, ++ 114,17,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,114,91,0,0,0,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,88,0,0,0,114,69,0,0, ++ 0,114,84,0,0,0,114,52,0,0,0,218,6,108,115,116, ++ 114,105,112,218,8,95,80,89,67,65,67,72,69,41,12,114, ++ 67,0,0,0,90,14,100,101,98,117,103,95,111,118,101,114, ++ 114,105,100,101,114,98,0,0,0,218,7,109,101,115,115,97, ++ 103,101,218,4,104,101,97,100,114,68,0,0,0,90,4,98, ++ 97,115,101,114,7,0,0,0,218,4,114,101,115,116,90,3, ++ 116,97,103,90,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,114,8, ++ 0,0,0,114,8,0,0,0,114,9,0,0,0,218,17,99, ++ 97,99,104,101,95,102,114,111,109,95,115,111,117,114,99,101, ++ 128,1,0,0,115,72,0,0,0,8,18,6,1,2,1,4, ++ 255,8,2,4,1,8,1,12,1,10,1,12,1,16,1,8, ++ 1,8,1,8,1,24,1,8,1,12,1,6,1,8,2,8, ++ 1,8,1,8,1,14,1,14,1,12,1,10,1,8,9,14, ++ 1,24,5,12,1,2,4,4,1,8,1,2,1,4,253,12, ++ 5,114,123,0,0,0,99,1,0,0,0,0,0,0,0,0, ++ 0,0,0,10,0,0,0,5,0,0,0,67,0,0,0,115, ++ 40,1,0,0,116,0,106,1,106,2,100,1,117,0,114,10, ++ 116,3,100,2,131,1,130,1,116,4,160,5,124,0,161,1, ++ 125,0,116,6,124,0,131,1,92,2,125,1,125,2,100,3, ++ 125,3,116,0,106,7,100,1,117,1,114,51,116,0,106,7, ++ 160,8,116,9,161,1,125,4,124,1,160,10,124,4,116,11, ++ 23,0,161,1,114,51,124,1,116,12,124,4,131,1,100,1, ++ 133,2,25,0,125,1,100,4,125,3,124,3,115,72,116,6, ++ 124,1,131,1,92,2,125,1,125,5,124,5,116,13,107,3, ++ 114,72,116,14,116,13,155,0,100,5,124,0,155,2,157,3, ++ 131,1,130,1,124,2,160,15,100,6,161,1,125,6,124,6, ++ 100,7,118,1,114,88,116,14,100,8,124,2,155,2,157,2, ++ 131,1,130,1,124,6,100,9,107,2,114,132,124,2,160,16, ++ 100,6,100,10,161,2,100,11,25,0,125,7,124,7,160,10, ++ 116,17,161,1,115,112,116,14,100,12,116,17,155,2,157,2, ++ 131,1,130,1,124,7,116,12,116,17,131,1,100,1,133,2, ++ 25,0,125,8,124,8,160,18,161,0,115,132,116,14,100,13, ++ 124,7,155,2,100,14,157,3,131,1,130,1,124,2,160,19, ++ 100,6,161,1,100,15,25,0,125,9,116,20,124,1,124,9, ++ 116,21,100,15,25,0,23,0,131,2,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,100,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,99,0,0,0,62, ++ 2,0,0,0,114,46,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,124,0, ++ 0,0,114,46,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,0,0,0,0,41,22,114,16, ++ 0,0,0,114,107,0,0,0,114,108,0,0,0,114,109,0, ++ 0,0,114,19,0,0,0,114,105,0,0,0,114,76,0,0, ++ 0,114,116,0,0,0,114,51,0,0,0,114,52,0,0,0, ++ 114,28,0,0,0,114,61,0,0,0,114,5,0,0,0,114, ++ 118,0,0,0,114,113,0,0,0,218,5,99,111,117,110,116, ++ 218,6,114,115,112,108,105,116,114,114,0,0,0,114,112,0, ++ 0,0,218,9,112,97,114,116,105,116,105,111,110,114,69,0, ++ 0,0,218,15,83,79,85,82,67,69,95,83,85,70,70,73, ++ 88,69,83,41,10,114,67,0,0,0,114,120,0,0,0,90, ++ 16,112,121,99,97,99,104,101,95,102,105,108,101,110,97,109, ++ 101,90,23,102,111,117,110,100,95,105,110,95,112,121,99,97, ++ 99,104,101,95,112,114,101,102,105,120,90,13,115,116,114,105, ++ 112,112,101,100,95,112,97,116,104,90,7,112,121,99,97,99, ++ 104,101,90,9,100,111,116,95,99,111,117,110,116,114,98,0, ++ 0,0,90,9,111,112,116,95,108,101,118,101,108,90,13,98, ++ 97,115,101,95,102,105,108,101,110,97,109,101,114,8,0,0, ++ 0,114,8,0,0,0,114,9,0,0,0,218,17,115,111,117, ++ 114,99,101,95,102,114,111,109,95,99,97,99,104,101,199,1, ++ 0,0,115,60,0,0,0,12,9,8,1,10,1,12,1,4, ++ 1,10,1,12,1,14,1,16,1,4,1,4,1,12,1,8, ++ 1,8,1,2,1,8,255,10,2,8,1,14,1,8,1,16, ++ 1,10,1,4,1,2,1,8,255,16,2,8,1,16,1,14, ++ 2,18,1,114,130,0,0,0,99,1,0,0,0,0,0,0, ++ 0,0,0,0,0,5,0,0,0,9,0,0,0,67,0,0, ++ 0,115,124,0,0,0,116,0,124,0,131,1,100,1,107,2, ++ 114,8,100,2,83,0,124,0,160,1,100,3,161,1,92,3, ++ 125,1,125,2,125,3,124,1,114,28,124,3,160,2,161,0, ++ 100,4,100,5,133,2,25,0,100,6,107,3,114,30,124,0, ++ 83,0,122,6,116,3,124,0,131,1,125,4,87,0,110,17, ++ 4,0,116,4,116,5,102,2,121,53,1,0,1,0,1,0, ++ 124,0,100,2,100,5,133,2,25,0,125,4,89,0,110,1, ++ 119,0,116,6,124,4,131,1,114,60,124,4,83,0,124,0, ++ 83,0,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,0,0,0,0,78,114,99,0,0,0,233,253,255, ++ 255,255,114,3,0,0,0,90,2,112,121,41,7,114,5,0, ++ 0,0,114,106,0,0,0,218,5,108,111,119,101,114,114,130, ++ 0,0,0,114,109,0,0,0,114,113,0,0,0,114,82,0, ++ 0,0,41,5,218,13,98,121,116,101,99,111,100,101,95,112, ++ 97,116,104,114,121,0,0,0,218,1,95,90,9,101,120,116, ++ 101,110,115,105,111,110,218,11,115,111,117,114,99,101,95,112, ++ 97,116,104,114,8,0,0,0,114,8,0,0,0,114,9,0, ++ 0,0,218,15,95,103,101,116,95,115,111,117,114,99,101,102, ++ 105,108,101,239,1,0,0,115,22,0,0,0,12,7,4,1, ++ 16,1,24,1,4,1,2,1,12,1,16,1,16,1,2,255, ++ 16,2,114,136,0,0,0,99,1,0,0,0,0,0,0,0, ++ 0,0,0,0,1,0,0,0,8,0,0,0,67,0,0,0, ++ 115,68,0,0,0,124,0,160,0,116,1,116,2,131,1,161, ++ 1,114,23,122,5,116,3,124,0,131,1,87,0,83,0,4, ++ 0,116,4,121,22,1,0,1,0,1,0,89,0,100,0,83, ++ 0,119,0,124,0,160,0,116,1,116,5,131,1,161,1,114, ++ 32,124,0,83,0,100,0,83,0,114,71,0,0,0,41,6, ++ 114,60,0,0,0,218,5,116,117,112,108,101,114,129,0,0, ++ 0,114,123,0,0,0,114,109,0,0,0,114,115,0,0,0, ++ 41,1,114,122,0,0,0,114,8,0,0,0,114,8,0,0, ++ 0,114,9,0,0,0,218,11,95,103,101,116,95,99,97,99, ++ 104,101,100,2,2,0,0,115,18,0,0,0,14,1,2,1, ++ 10,1,12,1,6,1,2,255,14,2,4,1,4,2,114,138, + 0,0,0,99,1,0,0,0,0,0,0,0,0,0,0,0, +- 3,0,0,0,4,0,0,0,3,0,0,0,115,52,0,0, +- 0,100,6,135,0,102,1,100,2,100,3,132,9,125,1,116, +- 0,100,1,117,1,114,15,116,0,106,1,125,2,110,4,100, +- 4,100,5,132,0,125,2,124,2,124,1,136,0,131,2,1, +- 0,124,1,83,0,41,7,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,78,99,2,0,0,0,0,0,0,0,0, +- 0,0,0,4,0,0,0,4,0,0,0,31,0,0,0,115, +- 72,0,0,0,124,1,100,0,117,0,114,8,124,0,106,0, +- 125,1,110,16,124,0,106,0,124,1,107,3,114,24,116,1, +- 100,1,124,0,106,0,124,1,102,2,22,0,124,1,100,2, +- 141,2,130,1,136,0,124,0,124,1,103,2,124,2,162,1, +- 82,0,105,0,124,3,164,1,142,1,83,0,41,3,78,122, +- 30,108,111,97,100,101,114,32,102,111,114,32,37,115,32,99, +- 97,110,110,111,116,32,104,97,110,100,108,101,32,37,115,169, +- 1,218,4,110,97,109,101,41,2,114,141,0,0,0,218,11, +- 73,109,112,111,114,116,69,114,114,111,114,41,4,218,4,115, +- 101,108,102,114,141,0,0,0,218,4,97,114,103,115,218,6, +- 107,119,97,114,103,115,169,1,218,6,109,101,116,104,111,100, +- 114,7,0,0,0,114,8,0,0,0,218,19,95,99,104,101, +- 99,107,95,110,97,109,101,95,119,114,97,112,112,101,114,30, +- 2,0,0,115,18,0,0,0,8,1,8,1,10,1,4,1, +- 8,1,2,255,2,1,6,255,24,2,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,99,2,0,0,0,0,0,0,0,0,0,0, +- 0,3,0,0,0,7,0,0,0,83,0,0,0,115,56,0, +- 0,0,100,1,68,0,93,16,125,2,116,0,124,1,124,2, +- 131,2,114,18,116,1,124,0,124,2,116,2,124,1,124,2, +- 131,2,131,3,1,0,113,2,124,0,106,3,160,4,124,1, +- 106,3,161,1,1,0,100,0,83,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,90,3,110, +- 101,119,90,3,111,108,100,114,85,0,0,0,114,7,0,0, +- 0,114,7,0,0,0,114,8,0,0,0,218,5,95,119,114, +- 97,112,43,2,0,0,115,10,0,0,0,8,1,10,1,18, +- 1,2,128,18,1,122,26,95,99,104,101,99,107,95,110,97, +- 109,101,46,60,108,111,99,97,108,115,62,46,95,119,114,97, +- 112,114,69,0,0,0,41,2,218,10,95,98,111,111,116,115, +- 116,114,97,112,114,158,0,0,0,41,3,114,147,0,0,0, +- 114,148,0,0,0,114,158,0,0,0,114,7,0,0,0,114, +- 146,0,0,0,114,8,0,0,0,218,11,95,99,104,101,99, +- 107,95,110,97,109,101,22,2,0,0,115,12,0,0,0,14, +- 8,8,10,8,1,8,2,10,6,4,1,114,160,0,0,0, +- 99,2,0,0,0,0,0,0,0,0,0,0,0,5,0,0, +- 0,6,0,0,0,67,0,0,0,115,72,0,0,0,116,0, +- 160,1,100,1,116,2,161,2,1,0,124,0,160,3,124,1, +- 161,1,92,2,125,2,125,3,124,2,100,2,117,0,114,34, +- 116,4,124,3,131,1,114,34,100,3,125,4,116,0,160,1, +- 124,4,160,5,124,3,100,4,25,0,161,1,116,6,161,2, +- 1,0,124,2,83,0,41,5,122,155,84,114,121,32,116,111, +- 32,102,105,110,100,32,97,32,108,111,97,100,101,114,32,102, +- 111,114,32,116,104,101,32,115,112,101,99,105,102,105,101,100, +- 32,109,111,100,117,108,101,32,98,121,32,100,101,108,101,103, +- 97,116,105,110,103,32,116,111,10,32,32,32,32,115,101,108, +- 102,46,102,105,110,100,95,108,111,97,100,101,114,40,41,46, +- 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,32, +- 105,110,32,102,97,118,111,114,32,111,102,32,102,105,110,100, +- 101,114,46,102,105,110,100,95,115,112,101,99,40,41,46,10, +- 10,32,32,32,32,122,90,102,105,110,100,95,109,111,100,117, +- 108,101,40,41,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,102,105, +- 110,100,95,115,112,101,99,40,41,32,105,110,115,116,101,97, +- 100,78,122,44,78,111,116,32,105,109,112,111,114,116,105,110, +- 103,32,100,105,114,101,99,116,111,114,121,32,123,125,58,32, +- 109,105,115,115,105,110,103,32,95,95,105,110,105,116,95,95, +- 114,0,0,0,0,41,7,114,99,0,0,0,114,100,0,0, +- 0,114,101,0,0,0,218,11,102,105,110,100,95,108,111,97, +- 100,101,114,114,4,0,0,0,114,89,0,0,0,218,13,73, +- 109,112,111,114,116,87,97,114,110,105,110,103,41,5,114,143, +- 0,0,0,218,8,102,117,108,108,110,97,109,101,218,6,108, +- 111,97,100,101,114,218,8,112,111,114,116,105,111,110,115,218, +- 3,109,115,103,114,7,0,0,0,114,7,0,0,0,114,8, +- 0,0,0,218,17,95,102,105,110,100,95,109,111,100,117,108, +- 101,95,115,104,105,109,53,2,0,0,115,16,0,0,0,6, +- 7,2,2,4,254,14,6,16,1,4,1,22,1,4,1,114, +- 167,0,0,0,99,3,0,0,0,0,0,0,0,0,0,0, +- 0,6,0,0,0,4,0,0,0,67,0,0,0,115,166,0, +- 0,0,124,0,100,1,100,2,133,2,25,0,125,3,124,3, +- 116,0,107,3,114,32,100,3,124,1,155,2,100,4,124,3, +- 155,2,157,4,125,4,116,1,160,2,100,5,124,4,161,2, +- 1,0,116,3,124,4,102,1,105,0,124,2,164,1,142,1, +- 130,1,116,4,124,0,131,1,100,6,107,0,114,53,100,7, +- 124,1,155,2,157,2,125,4,116,1,160,2,100,5,124,4, +- 161,2,1,0,116,5,124,4,131,1,130,1,116,6,124,0, +- 100,2,100,8,133,2,25,0,131,1,125,5,124,5,100,9, +- 64,0,114,81,100,10,124,5,155,2,100,11,124,1,155,2, +- 157,4,125,4,116,3,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,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,31,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,159,0,0,0,218,16,95,118,101, +- 114,98,111,115,101,95,109,101,115,115,97,103,101,114,142,0, +- 0,0,114,4,0,0,0,218,8,69,79,70,69,114,114,111, +- 114,114,42,0,0,0,41,6,114,41,0,0,0,114,141,0, +- 0,0,218,11,101,120,99,95,100,101,116,97,105,108,115,90, +- 5,109,97,103,105,99,114,117,0,0,0,114,16,0,0,0, +- 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,218, +- 13,95,99,108,97,115,115,105,102,121,95,112,121,99,73,2, +- 0,0,115,28,0,0,0,12,16,8,1,16,1,12,1,16, +- 1,12,1,10,1,12,1,8,1,16,1,8,2,16,1,16, +- 1,4,1,114,176,0,0,0,99,5,0,0,0,0,0,0, +- 0,0,0,0,0,6,0,0,0,4,0,0,0,67,0,0, +- 0,115,124,0,0,0,116,0,124,0,100,1,100,2,133,2, +- 25,0,131,1,124,1,100,3,64,0,107,3,114,31,100,4, +- 124,3,155,2,157,2,125,5,116,1,160,2,100,5,124,5, +- 161,2,1,0,116,3,124,5,102,1,105,0,124,4,164,1, +- 142,1,130,1,124,2,100,6,117,1,114,58,116,0,124,0, +- 100,2,100,7,133,2,25,0,131,1,124,2,100,3,64,0, +- 107,3,114,60,116,3,100,4,124,3,155,2,157,2,102,1, +- 105,0,124,4,164,1,142,1,130,1,100,6,83,0,100,6, +- 83,0,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, ++ 2,0,0,0,8,0,0,0,67,0,0,0,115,50,0,0, ++ 0,122,7,116,0,124,0,131,1,106,1,125,1,87,0,110, ++ 11,4,0,116,2,121,18,1,0,1,0,1,0,100,1,125, ++ 1,89,0,110,1,119,0,124,1,100,2,79,0,125,1,124, ++ 1,83,0,41,4,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,89,0,0,0,233, ++ 128,0,0,0,78,41,3,114,77,0,0,0,114,79,0,0, ++ 0,114,78,0,0,0,41,2,114,67,0,0,0,114,80,0, ++ 0,0,114,8,0,0,0,114,8,0,0,0,114,9,0,0, ++ 0,218,10,95,99,97,108,99,95,109,111,100,101,14,2,0, ++ 0,115,14,0,0,0,2,2,14,1,12,1,8,1,2,255, ++ 8,4,4,1,114,140,0,0,0,99,1,0,0,0,0,0, ++ 0,0,0,0,0,0,3,0,0,0,4,0,0,0,3,0, ++ 0,0,115,52,0,0,0,100,6,135,0,102,1,100,2,100, ++ 3,132,9,125,1,116,0,100,1,117,1,114,15,116,0,106, ++ 1,125,2,110,4,100,4,100,5,132,0,125,2,124,2,124, ++ 1,136,0,131,2,1,0,124,1,83,0,41,7,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,78,99,2,0,0, ++ 0,0,0,0,0,0,0,0,0,4,0,0,0,4,0,0, ++ 0,31,0,0,0,115,72,0,0,0,124,1,100,0,117,0, ++ 114,8,124,0,106,0,125,1,110,16,124,0,106,0,124,1, ++ 107,3,114,24,116,1,100,1,124,0,106,0,124,1,102,2, ++ 22,0,124,1,100,2,141,2,130,1,136,0,124,0,124,1, ++ 103,2,124,2,162,1,82,0,105,0,124,3,164,1,142,1, ++ 83,0,41,3,78,122,30,108,111,97,100,101,114,32,102,111, ++ 114,32,37,115,32,99,97,110,110,111,116,32,104,97,110,100, ++ 108,101,32,37,115,169,1,218,4,110,97,109,101,41,2,114, ++ 142,0,0,0,218,11,73,109,112,111,114,116,69,114,114,111, ++ 114,41,4,218,4,115,101,108,102,114,142,0,0,0,218,4, ++ 97,114,103,115,218,6,107,119,97,114,103,115,169,1,218,6, ++ 109,101,116,104,111,100,114,8,0,0,0,114,9,0,0,0, ++ 218,19,95,99,104,101,99,107,95,110,97,109,101,95,119,114, ++ 97,112,112,101,114,34,2,0,0,115,18,0,0,0,8,1, ++ 8,1,10,1,4,1,8,1,2,255,2,1,6,255,24,2, ++ 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,99,2,0,0,0,0, ++ 0,0,0,0,0,0,0,3,0,0,0,7,0,0,0,83, ++ 0,0,0,115,56,0,0,0,100,1,68,0,93,16,125,2, ++ 116,0,124,1,124,2,131,2,114,18,116,1,124,0,124,2, ++ 116,2,124,1,124,2,131,2,131,3,1,0,113,2,124,0, ++ 106,3,160,4,124,1,106,3,161,1,1,0,100,0,83,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,90,3,110,101,119,90,3,111,108,100,114,87,0, ++ 0,0,114,8,0,0,0,114,8,0,0,0,114,9,0,0, ++ 0,218,5,95,119,114,97,112,47,2,0,0,115,10,0,0, ++ 0,8,1,10,1,18,1,2,128,18,1,122,26,95,99,104, ++ 101,99,107,95,110,97,109,101,46,60,108,111,99,97,108,115, ++ 62,46,95,119,114,97,112,114,71,0,0,0,41,2,218,10, ++ 95,98,111,111,116,115,116,114,97,112,114,159,0,0,0,41, ++ 3,114,148,0,0,0,114,149,0,0,0,114,159,0,0,0, ++ 114,8,0,0,0,114,147,0,0,0,114,9,0,0,0,218, ++ 11,95,99,104,101,99,107,95,110,97,109,101,26,2,0,0, ++ 115,12,0,0,0,14,8,8,10,8,1,8,2,10,6,4, ++ 1,114,161,0,0,0,99,2,0,0,0,0,0,0,0,0, ++ 0,0,0,5,0,0,0,6,0,0,0,67,0,0,0,115, ++ 72,0,0,0,116,0,160,1,100,1,116,2,161,2,1,0, ++ 124,0,160,3,124,1,161,1,92,2,125,2,125,3,124,2, ++ 100,2,117,0,114,34,116,4,124,3,131,1,114,34,100,3, ++ 125,4,116,0,160,1,124,4,160,5,124,3,100,4,25,0, ++ 161,1,116,6,161,2,1,0,124,2,83,0,41,5,122,155, ++ 84,114,121,32,116,111,32,102,105,110,100,32,97,32,108,111, ++ 97,100,101,114,32,102,111,114,32,116,104,101,32,115,112,101, ++ 99,105,102,105,101,100,32,109,111,100,117,108,101,32,98,121, ++ 32,100,101,108,101,103,97,116,105,110,103,32,116,111,10,32, ++ 32,32,32,115,101,108,102,46,102,105,110,100,95,108,111,97, ++ 100,101,114,40,41,46,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,32,105,110,32,102,97,118,111,114,32,111, ++ 102,32,102,105,110,100,101,114,46,102,105,110,100,95,115,112, ++ 101,99,40,41,46,10,10,32,32,32,32,122,90,102,105,110, ++ 100,95,109,111,100,117,108,101,40,41,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,102,105,110,100,95,115,112,101,99,40,41,32, ++ 105,110,115,116,101,97,100,78,122,44,78,111,116,32,105,109, ++ 112,111,114,116,105,110,103,32,100,105,114,101,99,116,111,114, ++ 121,32,123,125,58,32,109,105,115,115,105,110,103,32,95,95, ++ 105,110,105,116,95,95,114,0,0,0,0,41,7,114,101,0, ++ 0,0,114,102,0,0,0,114,103,0,0,0,218,11,102,105, ++ 110,100,95,108,111,97,100,101,114,114,5,0,0,0,114,91, ++ 0,0,0,218,13,73,109,112,111,114,116,87,97,114,110,105, ++ 110,103,41,5,114,144,0,0,0,218,8,102,117,108,108,110, ++ 97,109,101,218,6,108,111,97,100,101,114,218,8,112,111,114, ++ 116,105,111,110,115,218,3,109,115,103,114,8,0,0,0,114, ++ 8,0,0,0,114,9,0,0,0,218,17,95,102,105,110,100, ++ 95,109,111,100,117,108,101,95,115,104,105,109,57,2,0,0, ++ 115,16,0,0,0,6,7,2,2,4,254,14,6,16,1,4, ++ 1,22,1,4,1,114,168,0,0,0,99,3,0,0,0,0, ++ 0,0,0,0,0,0,0,6,0,0,0,4,0,0,0,67, ++ 0,0,0,115,166,0,0,0,124,0,100,1,100,2,133,2, ++ 25,0,125,3,124,3,116,0,107,3,114,32,100,3,124,1, ++ 155,2,100,4,124,3,155,2,157,4,125,4,116,1,160,2, ++ 100,5,124,4,161,2,1,0,116,3,124,4,102,1,105,0, ++ 124,2,164,1,142,1,130,1,116,4,124,0,131,1,100,6, ++ 107,0,114,53,100,7,124,1,155,2,157,2,125,4,116,1, ++ 160,2,100,5,124,4,161,2,1,0,116,5,124,4,131,1, ++ 130,1,116,6,124,0,100,2,100,8,133,2,25,0,131,1, ++ 125,5,124,5,100,9,64,0,114,81,100,10,124,5,155,2, ++ 100,11,124,1,155,2,157,4,125,4,116,3,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, +@@ -822,1946 +757,2014 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { + 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,170,0,0,0,233,12,0,0,0,114,30,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,168,0,0,0,78,114,169,0, +- 0,0,41,4,114,42,0,0,0,114,159,0,0,0,114,173, +- 0,0,0,114,142,0,0,0,41,6,114,41,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,141,0,0,0,114, +- 175,0,0,0,114,117,0,0,0,114,7,0,0,0,114,7, +- 0,0,0,114,8,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,106,2,0,0,115,18,0,0,0,24,19,10,1,12,1, +- 16,1,8,1,22,1,2,255,22,2,8,254,114,180,0,0, +- 0,99,4,0,0,0,0,0,0,0,0,0,0,0,4,0, +- 0,0,4,0,0,0,67,0,0,0,115,42,0,0,0,124, +- 0,100,1,100,2,133,2,25,0,124,1,107,3,114,19,116, +- 0,100,3,124,2,155,2,157,2,102,1,105,0,124,3,164, +- 1,142,1,130,1,100,4,83,0,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,170,0,0,0,114,169,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,142,0,0,0,41,4,114,41,0,0,0,218,11,115,111, +- 117,114,99,101,95,104,97,115,104,114,141,0,0,0,114,175, +- 0,0,0,114,7,0,0,0,114,7,0,0,0,114,8,0, +- 0,0,218,18,95,118,97,108,105,100,97,116,101,95,104,97, +- 115,104,95,112,121,99,134,2,0,0,115,14,0,0,0,16, +- 17,2,1,8,1,4,255,2,2,6,254,4,255,114,182,0, +- 0,0,99,4,0,0,0,0,0,0,0,0,0,0,0,5, +- 0,0,0,5,0,0,0,67,0,0,0,115,76,0,0,0, +- 116,0,160,1,124,0,161,1,125,4,116,2,124,4,116,3, +- 131,2,114,28,116,4,160,5,100,1,124,2,161,2,1,0, +- 124,3,100,2,117,1,114,26,116,6,160,7,124,4,124,3, +- 161,2,1,0,124,4,83,0,116,8,100,3,160,9,124,2, +- 161,1,124,1,124,2,100,4,141,3,130,1,41,5,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,78,122,23,78,111,110, +- 45,99,111,100,101,32,111,98,106,101,99,116,32,105,110,32, +- 123,33,114,125,169,2,114,141,0,0,0,114,65,0,0,0, +- 41,10,218,7,109,97,114,115,104,97,108,90,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,159,0,0,0,114, +- 173,0,0,0,218,4,95,105,109,112,90,16,95,102,105,120, +- 95,99,111,95,102,105,108,101,110,97,109,101,114,142,0,0, +- 0,114,89,0,0,0,41,5,114,41,0,0,0,114,141,0, +- 0,0,114,132,0,0,0,114,134,0,0,0,218,4,99,111, +- 100,101,114,7,0,0,0,114,7,0,0,0,114,8,0,0, +- 0,218,17,95,99,111,109,112,105,108,101,95,98,121,116,101, +- 99,111,100,101,158,2,0,0,115,18,0,0,0,10,2,10, +- 1,12,1,8,1,12,1,4,1,10,2,4,1,6,255,114, +- 189,0,0,0,99,3,0,0,0,0,0,0,0,0,0,0, +- 0,4,0,0,0,5,0,0,0,67,0,0,0,115,70,0, +- 0,0,116,0,116,1,131,1,125,3,124,3,160,2,116,3, +- 100,1,131,1,161,1,1,0,124,3,160,2,116,3,124,1, +- 131,1,161,1,1,0,124,3,160,2,116,3,124,2,131,1, +- 161,1,1,0,124,3,160,2,116,4,160,5,124,0,161,1, +- 161,1,1,0,124,3,83,0,41,3,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,0,0,0,0,78,41,6,218, +- 9,98,121,116,101,97,114,114,97,121,114,172,0,0,0,218, +- 6,101,120,116,101,110,100,114,36,0,0,0,114,184,0,0, +- 0,218,5,100,117,109,112,115,41,4,114,188,0,0,0,218, +- 5,109,116,105,109,101,114,179,0,0,0,114,41,0,0,0, +- 114,7,0,0,0,114,7,0,0,0,114,8,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,171,2,0,0,115,12,0,0,0, +- 8,2,14,1,14,1,14,1,16,1,4,1,114,194,0,0, +- 0,84,99,3,0,0,0,0,0,0,0,0,0,0,0,5, +- 0,0,0,5,0,0,0,67,0,0,0,115,80,0,0,0, +- 116,0,116,1,131,1,125,3,100,1,124,2,100,1,62,0, +- 66,0,125,4,124,3,160,2,116,3,124,4,131,1,161,1, +- 1,0,116,4,124,1,131,1,100,2,107,2,115,25,74,0, +- 130,1,124,3,160,2,124,1,161,1,1,0,124,3,160,2, +- 116,5,160,6,124,0,161,1,161,1,1,0,124,3,83,0, +- 41,4,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,3,0,0,0,114, +- 170,0,0,0,78,41,7,114,190,0,0,0,114,172,0,0, +- 0,114,191,0,0,0,114,36,0,0,0,114,4,0,0,0, +- 114,184,0,0,0,114,192,0,0,0,41,5,114,188,0,0, +- 0,114,181,0,0,0,90,7,99,104,101,99,107,101,100,114, +- 41,0,0,0,114,16,0,0,0,114,7,0,0,0,114,7, +- 0,0,0,114,8,0,0,0,218,17,95,99,111,100,101,95, +- 116,111,95,104,97,115,104,95,112,121,99,181,2,0,0,115, +- 14,0,0,0,8,2,12,1,14,1,16,1,10,1,16,1, +- 4,1,114,195,0,0,0,99,1,0,0,0,0,0,0,0, +- 0,0,0,0,5,0,0,0,6,0,0,0,67,0,0,0, +- 115,62,0,0,0,100,1,100,2,108,0,125,1,116,1,160, +- 2,124,0,161,1,106,3,125,2,124,1,160,4,124,2,161, +- 1,125,3,116,1,160,5,100,2,100,3,161,2,125,4,124, +- 4,160,6,124,0,160,6,124,3,100,1,25,0,161,1,161, +- 1,83,0,41,4,122,121,68,101,99,111,100,101,32,98,121, +- 116,101,115,32,114,101,112,114,101,115,101,110,116,105,110,103, +- 32,115,111,117,114,99,101,32,99,111,100,101,32,97,110,100, +- 32,114,101,116,117,114,110,32,116,104,101,32,115,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,0,0,0,0,78,84,41,7,218,8,116,111,107,101,110, +- 105,122,101,114,91,0,0,0,90,7,66,121,116,101,115,73, +- 79,90,8,114,101,97,100,108,105,110,101,90,15,100,101,116, +- 101,99,116,95,101,110,99,111,100,105,110,103,90,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, +- 196,0,0,0,90,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,90,15,110,101,119,108,105,110,101,95,100, +- 101,99,111,100,101,114,114,7,0,0,0,114,7,0,0,0, +- 114,8,0,0,0,218,13,100,101,99,111,100,101,95,115,111, +- 117,114,99,101,192,2,0,0,115,10,0,0,0,8,5,12, +- 1,10,1,12,1,20,1,114,200,0,0,0,169,2,114,164, +- 0,0,0,218,26,115,117,98,109,111,100,117,108,101,95,115, +- 101,97,114,99,104,95,108,111,99,97,116,105,111,110,115,99, +- 2,0,0,0,0,0,0,0,2,0,0,0,9,0,0,0, +- 8,0,0,0,67,0,0,0,115,54,1,0,0,124,1,100, +- 1,117,0,114,29,100,2,125,1,116,0,124,2,100,3,131, +- 2,114,28,122,7,124,2,160,1,124,0,161,1,125,1,87, +- 0,110,38,4,0,116,2,121,27,1,0,1,0,1,0,89, +- 0,110,30,119,0,110,28,116,3,160,4,124,1,161,1,125, +- 1,116,5,124,1,131,1,115,57,122,9,116,6,116,3,160, +- 7,161,0,124,1,131,2,125,1,87,0,110,9,4,0,116, +- 8,121,56,1,0,1,0,1,0,89,0,110,1,119,0,116, +- 9,106,10,124,0,124,2,124,1,100,4,141,3,125,4,100, +- 5,124,4,95,11,124,2,100,1,117,0,114,99,116,12,131, +- 0,68,0,93,21,92,2,125,5,125,6,124,1,160,13,116, +- 14,124,6,131,1,161,1,114,96,124,5,124,0,124,1,131, +- 2,125,2,124,2,124,4,95,15,1,0,113,99,113,75,100, +- 1,83,0,124,3,116,16,117,0,114,131,116,0,124,2,100, +- 6,131,2,114,130,122,7,124,2,160,17,124,0,161,1,125, +- 7,87,0,110,9,4,0,116,2,121,124,1,0,1,0,1, +- 0,89,0,110,10,119,0,124,7,114,130,103,0,124,4,95, +- 18,110,3,124,3,124,4,95,18,124,4,106,18,103,0,107, +- 2,114,153,124,1,114,153,116,19,124,1,131,1,100,7,25, +- 0,125,8,124,4,106,18,160,20,124,8,161,1,1,0,124, +- 4,83,0,41,8,97,61,1,0,0,82,101,116,117,114,110, +- 32,97,32,109,111,100,117,108,101,32,115,112,101,99,32,98, +- 97,115,101,100,32,111,110,32,97,32,102,105,108,101,32,108, +- 111,99,97,116,105,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,0,0,0,0,41,21,114, +- 153,0,0,0,114,203,0,0,0,114,142,0,0,0,114,18, +- 0,0,0,114,103,0,0,0,114,86,0,0,0,114,67,0, +- 0,0,114,82,0,0,0,114,76,0,0,0,114,159,0,0, +- 0,218,10,77,111,100,117,108,101,83,112,101,99,90,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,58,0,0,0,114,136, +- 0,0,0,114,164,0,0,0,218,9,95,80,79,80,85,76, +- 65,84,69,114,206,0,0,0,114,202,0,0,0,114,74,0, +- 0,0,114,61,0,0,0,41,9,114,141,0,0,0,90,8, +- 108,111,99,97,116,105,111,110,114,164,0,0,0,114,202,0, +- 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,206,0,0,0,90,7,100,105,114,110,97,109,101,114,7, +- 0,0,0,114,7,0,0,0,114,8,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,209,2,0,0,115,84,0,0,0,8, +- 12,4,4,10,1,2,2,14,1,12,1,4,1,2,255,2, +- 252,10,7,8,1,2,1,18,1,12,1,4,1,2,255,16, +- 9,6,1,8,3,14,1,14,1,10,1,6,1,4,1,2, +- 253,4,5,8,3,10,2,2,1,14,1,12,1,4,1,2, +- 255,4,3,6,1,2,128,6,2,10,1,4,1,12,1,12, +- 1,4,2,114,213,0,0,0,99,0,0,0,0,0,0,0, +- 0,0,0,0,0,0,0,0,0,4,0,0,0,64,0,0, +- 0,115,88,0,0,0,101,0,90,1,100,0,90,2,100,1, +- 90,3,100,2,90,4,100,3,90,5,101,6,111,15,100,4, +- 101,7,118,0,90,8,101,9,100,5,100,6,132,0,131,1, +- 90,10,101,11,100,7,100,8,132,0,131,1,90,12,101,11, +- 100,14,100,10,100,11,132,1,131,1,90,13,101,11,100,15, +- 100,12,100,13,132,1,131,1,90,14,100,9,83,0,41,16, +- 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,1,0,0,0, +- 8,0,0,0,67,0,0,0,115,50,0,0,0,122,8,116, +- 0,160,1,116,0,106,2,124,0,161,2,87,0,83,0,4, +- 0,116,3,121,24,1,0,1,0,1,0,116,0,160,1,116, +- 0,106,4,124,0,161,2,6,0,89,0,83,0,119,0,114, +- 69,0,0,0,41,5,218,6,119,105,110,114,101,103,90,7, +- 79,112,101,110,75,101,121,90,17,72,75,69,89,95,67,85, +- 82,82,69,78,84,95,85,83,69,82,114,76,0,0,0,90, +- 18,72,75,69,89,95,76,79,67,65,76,95,77,65,67,72, +- 73,78,69,114,19,0,0,0,114,7,0,0,0,114,7,0, +- 0,0,114,8,0,0,0,218,14,95,111,112,101,110,95,114, +- 101,103,105,115,116,114,121,38,3,0,0,115,10,0,0,0, +- 2,2,16,1,12,1,18,1,2,255,122,36,87,105,110,100, +- 111,119,115,82,101,103,105,115,116,114,121,70,105,110,100,101, +- 114,46,95,111,112,101,110,95,114,101,103,105,115,116,114,121, +- 99,2,0,0,0,0,0,0,0,0,0,0,0,6,0,0, +- 0,8,0,0,0,67,0,0,0,115,134,0,0,0,124,0, +- 106,0,114,7,124,0,106,1,125,2,110,3,124,0,106,2, +- 125,2,124,2,106,3,124,1,100,1,116,4,106,5,100,0, +- 100,2,133,2,25,0,22,0,100,3,141,2,125,3,122,32, +- 124,0,160,6,124,3,161,1,143,16,125,4,116,7,160,8, +- 124,4,100,4,161,2,125,5,87,0,100,0,4,0,4,0, +- 131,3,1,0,87,0,124,5,83,0,49,0,115,49,119,1, +- 1,0,1,0,1,0,89,0,1,0,87,0,124,5,83,0, +- 4,0,116,9,121,66,1,0,1,0,1,0,89,0,100,0, +- 83,0,119,0,41,5,78,122,5,37,100,46,37,100,114,44, +- 0,0,0,41,2,114,163,0,0,0,90,11,115,121,115,95, +- 118,101,114,115,105,111,110,114,10,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,114,89,0, +- 0,0,114,15,0,0,0,218,12,118,101,114,115,105,111,110, +- 95,105,110,102,111,114,216,0,0,0,114,215,0,0,0,90, +- 10,81,117,101,114,121,86,97,108,117,101,114,76,0,0,0, +- 41,6,218,3,99,108,115,114,163,0,0,0,90,12,114,101, +- 103,105,115,116,114,121,95,107,101,121,114,20,0,0,0,90, +- 4,104,107,101,121,218,8,102,105,108,101,112,97,116,104,114, +- 7,0,0,0,114,7,0,0,0,114,8,0,0,0,218,16, +- 95,115,101,97,114,99,104,95,114,101,103,105,115,116,114,121, +- 45,3,0,0,115,32,0,0,0,6,2,8,1,6,2,6, +- 1,16,1,6,255,2,2,12,1,14,1,12,255,4,4,18, +- 252,4,4,12,254,6,1,2,255,122,38,87,105,110,100,111, +- 119,115,82,101,103,105,115,116,114,121,70,105,110,100,101,114, +- 46,95,115,101,97,114,99,104,95,114,101,103,105,115,116,114, +- 121,78,99,4,0,0,0,0,0,0,0,0,0,0,0,8, +- 0,0,0,8,0,0,0,67,0,0,0,115,120,0,0,0, +- 124,0,160,0,124,1,161,1,125,4,124,4,100,0,117,0, +- 114,11,100,0,83,0,122,6,116,1,124,4,131,1,1,0, +- 87,0,110,10,4,0,116,2,121,27,1,0,1,0,1,0, +- 89,0,100,0,83,0,119,0,116,3,131,0,68,0,93,26, +- 92,2,125,5,125,6,124,4,160,4,116,5,124,6,131,1, +- 161,1,114,57,116,6,106,7,124,1,124,5,124,1,124,4, +- 131,2,124,4,100,1,141,3,125,7,124,7,2,0,1,0, +- 83,0,113,31,100,0,83,0,41,2,78,114,204,0,0,0, +- 41,8,114,223,0,0,0,114,75,0,0,0,114,76,0,0, +- 0,114,208,0,0,0,114,58,0,0,0,114,136,0,0,0, +- 114,159,0,0,0,218,16,115,112,101,99,95,102,114,111,109, +- 95,108,111,97,100,101,114,41,8,114,221,0,0,0,114,163, +- 0,0,0,114,65,0,0,0,218,6,116,97,114,103,101,116, +- 114,222,0,0,0,114,164,0,0,0,114,212,0,0,0,114, +- 210,0,0,0,114,7,0,0,0,114,7,0,0,0,114,8, +- 0,0,0,218,9,102,105,110,100,95,115,112,101,99,60,3, +- 0,0,115,34,0,0,0,10,2,8,1,4,1,2,1,12, +- 1,12,1,6,1,2,255,14,2,14,1,6,1,8,1,2, +- 1,6,254,8,3,2,252,4,255,122,31,87,105,110,100,111, +- 119,115,82,101,103,105,115,116,114,121,70,105,110,100,101,114, +- 46,102,105,110,100,95,115,112,101,99,99,3,0,0,0,0, +- 0,0,0,0,0,0,0,4,0,0,0,4,0,0,0,67, +- 0,0,0,115,42,0,0,0,116,0,160,1,100,1,116,2, +- 161,2,1,0,124,0,160,3,124,1,124,2,161,2,125,3, +- 124,3,100,2,117,1,114,19,124,3,106,4,83,0,100,2, +- 83,0,41,3,122,106,70,105,110,100,32,109,111,100,117,108, +- 101,32,110,97,109,101,100,32,105,110,32,116,104,101,32,114, +- 101,103,105,115,116,114,121,46,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,102,105,110,100,95,115,112,101,99,40,41,32,105,110, +- 115,116,101,97,100,46,10,10,32,32,32,32,32,32,32,32, +- 122,112,87,105,110,100,111,119,115,82,101,103,105,115,116,114, +- 121,70,105,110,100,101,114,46,102,105,110,100,95,109,111,100, +- 117,108,101,40,41,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,102, +- 105,110,100,95,115,112,101,99,40,41,32,105,110,115,116,101, +- 97,100,78,169,5,114,99,0,0,0,114,100,0,0,0,114, +- 101,0,0,0,114,226,0,0,0,114,164,0,0,0,169,4, +- 114,221,0,0,0,114,163,0,0,0,114,65,0,0,0,114, +- 210,0,0,0,114,7,0,0,0,114,7,0,0,0,114,8, +- 0,0,0,218,11,102,105,110,100,95,109,111,100,117,108,101, +- 76,3,0,0,115,14,0,0,0,6,7,2,2,4,254,12, +- 3,8,1,6,1,4,2,122,33,87,105,110,100,111,119,115, +- 82,101,103,105,115,116,114,121,70,105,110,100,101,114,46,102, +- 105,110,100,95,109,111,100,117,108,101,169,2,78,78,114,69, +- 0,0,0,41,15,114,150,0,0,0,114,149,0,0,0,114, +- 151,0,0,0,114,152,0,0,0,114,219,0,0,0,114,218, +- 0,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,217,0,0,0,218,12,115,116,97,116,105, +- 99,109,101,116,104,111,100,114,216,0,0,0,218,11,99,108, +- 97,115,115,109,101,116,104,111,100,114,223,0,0,0,114,226, +- 0,0,0,114,229,0,0,0,114,7,0,0,0,114,7,0, +- 0,0,114,7,0,0,0,114,8,0,0,0,114,214,0,0, +- 0,26,3,0,0,115,30,0,0,0,8,0,4,2,2,3, +- 2,255,2,4,2,255,12,3,2,2,10,1,2,6,10,1, +- 2,14,12,1,2,15,16,1,114,214,0,0,0,99,0,0, +- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0, +- 0,0,64,0,0,0,115,48,0,0,0,101,0,90,1,100, +- 0,90,2,100,1,90,3,100,2,100,3,132,0,90,4,100, +- 4,100,5,132,0,90,5,100,6,100,7,132,0,90,6,100, +- 8,100,9,132,0,90,7,100,10,83,0,41,11,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,4,0,0,0,67,0,0,0,115,64,0,0,0,116, +- 0,124,0,160,1,124,1,161,1,131,1,100,1,25,0,125, +- 2,124,2,160,2,100,2,100,1,161,2,100,3,25,0,125, +- 3,124,1,160,3,100,2,161,1,100,4,25,0,125,4,124, +- 3,100,5,107,2,111,31,124,4,100,5,107,3,83,0,41, +- 7,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,3,0,0,0,114,97,0,0,0,114,0,0,0,0,114, +- 44,0,0,0,218,8,95,95,105,110,105,116,95,95,78,41, +- 4,114,74,0,0,0,114,203,0,0,0,114,125,0,0,0, +- 114,104,0,0,0,41,5,114,143,0,0,0,114,163,0,0, +- 0,114,120,0,0,0,90,13,102,105,108,101,110,97,109,101, +- 95,98,97,115,101,90,9,116,97,105,108,95,110,97,109,101, +- 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,114, +- 206,0,0,0,98,3,0,0,115,8,0,0,0,18,3,16, +- 1,14,1,16,1,122,24,95,76,111,97,100,101,114,66,97, +- 115,105,99,115,46,105,115,95,112,97,99,107,97,103,101,99, +- 2,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, +- 1,0,0,0,67,0,0,0,114,23,0,0,0,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,7,0,0, +- 0,169,2,114,143,0,0,0,114,210,0,0,0,114,7,0, +- 0,0,114,7,0,0,0,114,8,0,0,0,218,13,99,114, +- 101,97,116,101,95,109,111,100,117,108,101,106,3,0,0,243, +- 2,0,0,0,4,0,122,27,95,76,111,97,100,101,114,66, +- 97,115,105,99,115,46,99,114,101,97,116,101,95,109,111,100, ++ 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,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,33,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,160,0,0, ++ 0,218,16,95,118,101,114,98,111,115,101,95,109,101,115,115, ++ 97,103,101,114,143,0,0,0,114,5,0,0,0,218,8,69, ++ 79,70,69,114,114,111,114,114,44,0,0,0,41,6,114,43, ++ 0,0,0,114,142,0,0,0,218,11,101,120,99,95,100,101, ++ 116,97,105,108,115,90,5,109,97,103,105,99,114,119,0,0, ++ 0,114,17,0,0,0,114,8,0,0,0,114,8,0,0,0, ++ 114,9,0,0,0,218,13,95,99,108,97,115,115,105,102,121, ++ 95,112,121,99,77,2,0,0,115,28,0,0,0,12,16,8, ++ 1,16,1,12,1,16,1,12,1,10,1,12,1,8,1,16, ++ 1,8,2,16,1,16,1,4,1,114,177,0,0,0,99,5, ++ 0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,4, ++ 0,0,0,67,0,0,0,115,124,0,0,0,116,0,124,0, ++ 100,1,100,2,133,2,25,0,131,1,124,1,100,3,64,0, ++ 107,3,114,31,100,4,124,3,155,2,157,2,125,5,116,1, ++ 160,2,100,5,124,5,161,2,1,0,116,3,124,5,102,1, ++ 105,0,124,4,164,1,142,1,130,1,124,2,100,6,117,1, ++ 114,58,116,0,124,0,100,2,100,7,133,2,25,0,131,1, ++ 124,2,100,3,64,0,107,3,114,60,116,3,100,4,124,3, ++ 155,2,157,2,102,1,105,0,124,4,164,1,142,1,130,1, ++ 100,6,83,0,100,6,83,0,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,171,0,0,0,233,12,0,0,0, ++ 114,32,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,169,0, ++ 0,0,78,114,170,0,0,0,41,4,114,44,0,0,0,114, ++ 160,0,0,0,114,174,0,0,0,114,143,0,0,0,41,6, ++ 114,43,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,142,0,0,0,114,176,0,0,0,114,119,0,0,0,114, ++ 8,0,0,0,114,8,0,0,0,114,9,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,110,2,0,0,115,18,0,0,0, ++ 24,19,10,1,12,1,16,1,8,1,22,1,2,255,22,2, ++ 8,254,114,181,0,0,0,99,4,0,0,0,0,0,0,0, ++ 0,0,0,0,4,0,0,0,4,0,0,0,67,0,0,0, ++ 115,42,0,0,0,124,0,100,1,100,2,133,2,25,0,124, ++ 1,107,3,114,19,116,0,100,3,124,2,155,2,157,2,102, ++ 1,105,0,124,3,164,1,142,1,130,1,100,4,83,0,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,171,0,0,0,114,170, ++ 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,143,0,0,0,41,4,114,43,0, ++ 0,0,218,11,115,111,117,114,99,101,95,104,97,115,104,114, ++ 142,0,0,0,114,176,0,0,0,114,8,0,0,0,114,8, ++ 0,0,0,114,9,0,0,0,218,18,95,118,97,108,105,100, ++ 97,116,101,95,104,97,115,104,95,112,121,99,138,2,0,0, ++ 115,14,0,0,0,16,17,2,1,8,1,4,255,2,2,6, ++ 254,4,255,114,183,0,0,0,99,4,0,0,0,0,0,0, ++ 0,0,0,0,0,5,0,0,0,5,0,0,0,67,0,0, ++ 0,115,76,0,0,0,116,0,160,1,124,0,161,1,125,4, ++ 116,2,124,4,116,3,131,2,114,28,116,4,160,5,100,1, ++ 124,2,161,2,1,0,124,3,100,2,117,1,114,26,116,6, ++ 160,7,124,4,124,3,161,2,1,0,124,4,83,0,116,8, ++ 100,3,160,9,124,2,161,1,124,1,124,2,100,4,141,3, ++ 130,1,41,5,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, ++ 78,122,23,78,111,110,45,99,111,100,101,32,111,98,106,101, ++ 99,116,32,105,110,32,123,33,114,125,169,2,114,142,0,0, ++ 0,114,67,0,0,0,41,10,218,7,109,97,114,115,104,97, ++ 108,90,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,160,0,0,0,114,174,0,0,0,218,4,95,105,109,112, ++ 90,16,95,102,105,120,95,99,111,95,102,105,108,101,110,97, ++ 109,101,114,143,0,0,0,114,91,0,0,0,41,5,114,43, ++ 0,0,0,114,142,0,0,0,114,133,0,0,0,114,135,0, ++ 0,0,218,4,99,111,100,101,114,8,0,0,0,114,8,0, ++ 0,0,114,9,0,0,0,218,17,95,99,111,109,112,105,108, ++ 101,95,98,121,116,101,99,111,100,101,162,2,0,0,115,18, ++ 0,0,0,10,2,10,1,12,1,8,1,12,1,4,1,10, ++ 2,4,1,6,255,114,190,0,0,0,99,3,0,0,0,0, ++ 0,0,0,0,0,0,0,4,0,0,0,5,0,0,0,67, ++ 0,0,0,115,70,0,0,0,116,0,116,1,131,1,125,3, ++ 124,3,160,2,116,3,100,1,131,1,161,1,1,0,124,3, ++ 160,2,116,3,124,1,131,1,161,1,1,0,124,3,160,2, ++ 116,3,124,2,131,1,161,1,1,0,124,3,160,2,116,4, ++ 160,5,124,0,161,1,161,1,1,0,124,3,83,0,41,3, ++ 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,0,0, ++ 0,0,78,41,6,218,9,98,121,116,101,97,114,114,97,121, ++ 114,173,0,0,0,218,6,101,120,116,101,110,100,114,38,0, ++ 0,0,114,185,0,0,0,218,5,100,117,109,112,115,41,4, ++ 114,189,0,0,0,218,5,109,116,105,109,101,114,180,0,0, ++ 0,114,43,0,0,0,114,8,0,0,0,114,8,0,0,0, ++ 114,9,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,175,2,0, ++ 0,115,12,0,0,0,8,2,14,1,14,1,14,1,16,1, ++ 4,1,114,195,0,0,0,84,99,3,0,0,0,0,0,0, ++ 0,0,0,0,0,5,0,0,0,5,0,0,0,67,0,0, ++ 0,115,80,0,0,0,116,0,116,1,131,1,125,3,100,1, ++ 124,2,100,1,62,0,66,0,125,4,124,3,160,2,116,3, ++ 124,4,131,1,161,1,1,0,116,4,124,1,131,1,100,2, ++ 107,2,115,25,74,0,130,1,124,3,160,2,124,1,161,1, ++ 1,0,124,3,160,2,116,5,160,6,124,0,161,1,161,1, ++ 1,0,124,3,83,0,41,4,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,4,0,0,0,114,171,0,0,0,78,41,7,114,191,0, ++ 0,0,114,173,0,0,0,114,192,0,0,0,114,38,0,0, ++ 0,114,5,0,0,0,114,185,0,0,0,114,193,0,0,0, ++ 41,5,114,189,0,0,0,114,182,0,0,0,90,7,99,104, ++ 101,99,107,101,100,114,43,0,0,0,114,17,0,0,0,114, ++ 8,0,0,0,114,8,0,0,0,114,9,0,0,0,218,17, ++ 95,99,111,100,101,95,116,111,95,104,97,115,104,95,112,121, ++ 99,185,2,0,0,115,14,0,0,0,8,2,12,1,14,1, ++ 16,1,10,1,16,1,4,1,114,196,0,0,0,99,1,0, ++ 0,0,0,0,0,0,0,0,0,0,5,0,0,0,6,0, ++ 0,0,67,0,0,0,115,62,0,0,0,100,1,100,2,108, ++ 0,125,1,116,1,160,2,124,0,161,1,106,3,125,2,124, ++ 1,160,4,124,2,161,1,125,3,116,1,160,5,100,2,100, ++ 3,161,2,125,4,124,4,160,6,124,0,160,6,124,3,100, ++ 1,25,0,161,1,161,1,83,0,41,4,122,121,68,101,99, ++ 111,100,101,32,98,121,116,101,115,32,114,101,112,114,101,115, ++ 101,110,116,105,110,103,32,115,111,117,114,99,101,32,99,111, ++ 100,101,32,97,110,100,32,114,101,116,117,114,110,32,116,104, ++ 101,32,115,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,0,0,0,0,78,84,41,7,218, ++ 8,116,111,107,101,110,105,122,101,114,93,0,0,0,90,7, ++ 66,121,116,101,115,73,79,90,8,114,101,97,100,108,105,110, ++ 101,90,15,100,101,116,101,99,116,95,101,110,99,111,100,105, ++ 110,103,90,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,197,0,0,0,90,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,90,15,110,101,119, ++ 108,105,110,101,95,100,101,99,111,100,101,114,114,8,0,0, ++ 0,114,8,0,0,0,114,9,0,0,0,218,13,100,101,99, ++ 111,100,101,95,115,111,117,114,99,101,196,2,0,0,115,10, ++ 0,0,0,8,5,12,1,10,1,12,1,20,1,114,201,0, ++ 0,0,169,2,114,165,0,0,0,218,26,115,117,98,109,111, ++ 100,117,108,101,95,115,101,97,114,99,104,95,108,111,99,97, ++ 116,105,111,110,115,99,2,0,0,0,0,0,0,0,2,0, ++ 0,0,9,0,0,0,8,0,0,0,67,0,0,0,115,54, ++ 1,0,0,124,1,100,1,117,0,114,29,100,2,125,1,116, ++ 0,124,2,100,3,131,2,114,28,122,7,124,2,160,1,124, ++ 0,161,1,125,1,87,0,110,38,4,0,116,2,121,27,1, ++ 0,1,0,1,0,89,0,110,30,119,0,110,28,116,3,160, ++ 4,124,1,161,1,125,1,116,5,124,1,131,1,115,57,122, ++ 9,116,6,116,3,160,7,161,0,124,1,131,2,125,1,87, ++ 0,110,9,4,0,116,8,121,56,1,0,1,0,1,0,89, ++ 0,110,1,119,0,116,9,106,10,124,0,124,2,124,1,100, ++ 4,141,3,125,4,100,5,124,4,95,11,124,2,100,1,117, ++ 0,114,99,116,12,131,0,68,0,93,21,92,2,125,5,125, ++ 6,124,1,160,13,116,14,124,6,131,1,161,1,114,96,124, ++ 5,124,0,124,1,131,2,125,2,124,2,124,4,95,15,1, ++ 0,113,99,113,75,100,1,83,0,124,3,116,16,117,0,114, ++ 131,116,0,124,2,100,6,131,2,114,130,122,7,124,2,160, ++ 17,124,0,161,1,125,7,87,0,110,9,4,0,116,2,121, ++ 124,1,0,1,0,1,0,89,0,110,10,119,0,124,7,114, ++ 130,103,0,124,4,95,18,110,3,124,3,124,4,95,18,124, ++ 4,106,18,103,0,107,2,114,153,124,1,114,153,116,19,124, ++ 1,131,1,100,7,25,0,125,8,124,4,106,18,160,20,124, ++ 8,161,1,1,0,124,4,83,0,41,8,97,61,1,0,0, ++ 82,101,116,117,114,110,32,97,32,109,111,100,117,108,101,32, ++ 115,112,101,99,32,98,97,115,101,100,32,111,110,32,97,32, ++ 102,105,108,101,32,108,111,99,97,116,105,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,0, ++ 0,0,0,41,21,114,154,0,0,0,114,204,0,0,0,114, ++ 143,0,0,0,114,19,0,0,0,114,105,0,0,0,114,88, ++ 0,0,0,114,69,0,0,0,114,84,0,0,0,114,78,0, ++ 0,0,114,160,0,0,0,218,10,77,111,100,117,108,101,83, ++ 112,101,99,90,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, ++ 60,0,0,0,114,137,0,0,0,114,165,0,0,0,218,9, ++ 95,80,79,80,85,76,65,84,69,114,207,0,0,0,114,203, ++ 0,0,0,114,76,0,0,0,114,63,0,0,0,41,9,114, ++ 142,0,0,0,90,8,108,111,99,97,116,105,111,110,114,165, ++ 0,0,0,114,203,0,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,207,0,0,0,90,7,100,105,114, ++ 110,97,109,101,114,8,0,0,0,114,8,0,0,0,114,9, ++ 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,213,2,0,0, ++ 115,84,0,0,0,8,12,4,4,10,1,2,2,14,1,12, ++ 1,4,1,2,255,2,252,10,7,8,1,2,1,18,1,12, ++ 1,4,1,2,255,16,9,6,1,8,3,14,1,14,1,10, ++ 1,6,1,4,1,2,253,4,5,8,3,10,2,2,1,14, ++ 1,12,1,4,1,2,255,4,3,6,1,2,128,6,2,10, ++ 1,4,1,12,1,12,1,4,2,114,214,0,0,0,99,0, ++ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4, ++ 0,0,0,64,0,0,0,115,88,0,0,0,101,0,90,1, ++ 100,0,90,2,100,1,90,3,100,2,90,4,100,3,90,5, ++ 101,6,111,15,100,4,101,7,118,0,90,8,101,9,100,5, ++ 100,6,132,0,131,1,90,10,101,11,100,7,100,8,132,0, ++ 131,1,90,12,101,11,100,14,100,10,100,11,132,1,131,1, ++ 90,13,101,11,100,15,100,12,100,13,132,1,131,1,90,14, ++ 100,9,83,0,41,16,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,1,0,0,0,8,0,0,0,67,0,0,0,115,50, ++ 0,0,0,122,8,116,0,160,1,116,0,106,2,124,0,161, ++ 2,87,0,83,0,4,0,116,3,121,24,1,0,1,0,1, ++ 0,116,0,160,1,116,0,106,4,124,0,161,2,6,0,89, ++ 0,83,0,119,0,114,71,0,0,0,41,5,218,6,119,105, ++ 110,114,101,103,90,7,79,112,101,110,75,101,121,90,17,72, ++ 75,69,89,95,67,85,82,82,69,78,84,95,85,83,69,82, ++ 114,78,0,0,0,90,18,72,75,69,89,95,76,79,67,65, ++ 76,95,77,65,67,72,73,78,69,114,21,0,0,0,114,8, ++ 0,0,0,114,8,0,0,0,114,9,0,0,0,218,14,95, ++ 111,112,101,110,95,114,101,103,105,115,116,114,121,42,3,0, ++ 0,115,10,0,0,0,2,2,16,1,12,1,18,1,2,255, ++ 122,36,87,105,110,100,111,119,115,82,101,103,105,115,116,114, ++ 121,70,105,110,100,101,114,46,95,111,112,101,110,95,114,101, ++ 103,105,115,116,114,121,99,2,0,0,0,0,0,0,0,0, ++ 0,0,0,6,0,0,0,8,0,0,0,67,0,0,0,115, ++ 134,0,0,0,124,0,106,0,114,7,124,0,106,1,125,2, ++ 110,3,124,0,106,2,125,2,124,2,106,3,124,1,100,1, ++ 116,4,106,5,100,0,100,2,133,2,25,0,22,0,100,3, ++ 141,2,125,3,122,32,124,0,160,6,124,3,161,1,143,16, ++ 125,4,116,7,160,8,124,4,100,4,161,2,125,5,87,0, ++ 100,0,4,0,4,0,131,3,1,0,87,0,124,5,83,0, ++ 49,0,115,49,119,1,1,0,1,0,1,0,89,0,1,0, ++ 87,0,124,5,83,0,4,0,116,9,121,66,1,0,1,0, ++ 1,0,89,0,100,0,83,0,119,0,41,5,78,122,5,37, ++ 100,46,37,100,114,46,0,0,0,41,2,114,164,0,0,0, ++ 90,11,115,121,115,95,118,101,114,115,105,111,110,114,11,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,114,91,0,0,0,114,16,0,0,0,218,12,118, ++ 101,114,115,105,111,110,95,105,110,102,111,114,217,0,0,0, ++ 114,216,0,0,0,90,10,81,117,101,114,121,86,97,108,117, ++ 101,114,78,0,0,0,41,6,218,3,99,108,115,114,164,0, ++ 0,0,90,12,114,101,103,105,115,116,114,121,95,107,101,121, ++ 114,22,0,0,0,90,4,104,107,101,121,218,8,102,105,108, ++ 101,112,97,116,104,114,8,0,0,0,114,8,0,0,0,114, ++ 9,0,0,0,218,16,95,115,101,97,114,99,104,95,114,101, ++ 103,105,115,116,114,121,49,3,0,0,115,32,0,0,0,6, ++ 2,8,1,6,2,6,1,16,1,6,255,2,2,12,1,14, ++ 1,12,255,4,4,18,252,4,4,12,254,6,1,2,255,122, ++ 38,87,105,110,100,111,119,115,82,101,103,105,115,116,114,121, ++ 70,105,110,100,101,114,46,95,115,101,97,114,99,104,95,114, ++ 101,103,105,115,116,114,121,78,99,4,0,0,0,0,0,0, ++ 0,0,0,0,0,8,0,0,0,8,0,0,0,67,0,0, ++ 0,115,120,0,0,0,124,0,160,0,124,1,161,1,125,4, ++ 124,4,100,0,117,0,114,11,100,0,83,0,122,6,116,1, ++ 124,4,131,1,1,0,87,0,110,10,4,0,116,2,121,27, ++ 1,0,1,0,1,0,89,0,100,0,83,0,119,0,116,3, ++ 131,0,68,0,93,26,92,2,125,5,125,6,124,4,160,4, ++ 116,5,124,6,131,1,161,1,114,57,116,6,106,7,124,1, ++ 124,5,124,1,124,4,131,2,124,4,100,1,141,3,125,7, ++ 124,7,2,0,1,0,83,0,113,31,100,0,83,0,41,2, ++ 78,114,205,0,0,0,41,8,114,224,0,0,0,114,77,0, ++ 0,0,114,78,0,0,0,114,209,0,0,0,114,60,0,0, ++ 0,114,137,0,0,0,114,160,0,0,0,218,16,115,112,101, ++ 99,95,102,114,111,109,95,108,111,97,100,101,114,41,8,114, ++ 222,0,0,0,114,164,0,0,0,114,67,0,0,0,218,6, ++ 116,97,114,103,101,116,114,223,0,0,0,114,165,0,0,0, ++ 114,213,0,0,0,114,211,0,0,0,114,8,0,0,0,114, ++ 8,0,0,0,114,9,0,0,0,218,9,102,105,110,100,95, ++ 115,112,101,99,64,3,0,0,115,34,0,0,0,10,2,8, ++ 1,4,1,2,1,12,1,12,1,6,1,2,255,14,2,14, ++ 1,6,1,8,1,2,1,6,254,8,3,2,252,4,255,122, ++ 31,87,105,110,100,111,119,115,82,101,103,105,115,116,114,121, ++ 70,105,110,100,101,114,46,102,105,110,100,95,115,112,101,99, ++ 99,3,0,0,0,0,0,0,0,0,0,0,0,4,0,0, ++ 0,4,0,0,0,67,0,0,0,115,42,0,0,0,116,0, ++ 160,1,100,1,116,2,161,2,1,0,124,0,160,3,124,1, ++ 124,2,161,2,125,3,124,3,100,2,117,1,114,19,124,3, ++ 106,4,83,0,100,2,83,0,41,3,122,106,70,105,110,100, ++ 32,109,111,100,117,108,101,32,110,97,109,101,100,32,105,110, ++ 32,116,104,101,32,114,101,103,105,115,116,114,121,46,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,102,105,110,100,95,115,112,101, ++ 99,40,41,32,105,110,115,116,101,97,100,46,10,10,32,32, ++ 32,32,32,32,32,32,122,112,87,105,110,100,111,119,115,82, ++ 101,103,105,115,116,114,121,70,105,110,100,101,114,46,102,105, ++ 110,100,95,109,111,100,117,108,101,40,41,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,102,105,110,100,95,115,112,101,99,40,41, ++ 32,105,110,115,116,101,97,100,78,169,5,114,101,0,0,0, ++ 114,102,0,0,0,114,103,0,0,0,114,227,0,0,0,114, ++ 165,0,0,0,169,4,114,222,0,0,0,114,164,0,0,0, ++ 114,67,0,0,0,114,211,0,0,0,114,8,0,0,0,114, ++ 8,0,0,0,114,9,0,0,0,218,11,102,105,110,100,95, ++ 109,111,100,117,108,101,80,3,0,0,115,14,0,0,0,6, ++ 7,2,2,4,254,12,3,8,1,6,1,4,2,122,33,87, ++ 105,110,100,111,119,115,82,101,103,105,115,116,114,121,70,105, ++ 110,100,101,114,46,102,105,110,100,95,109,111,100,117,108,101, ++ 169,2,78,78,114,71,0,0,0,41,15,114,151,0,0,0, ++ 114,150,0,0,0,114,152,0,0,0,114,153,0,0,0,114, ++ 220,0,0,0,114,219,0,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,218,0,0,0,218, ++ 12,115,116,97,116,105,99,109,101,116,104,111,100,114,217,0, ++ 0,0,218,11,99,108,97,115,115,109,101,116,104,111,100,114, ++ 224,0,0,0,114,227,0,0,0,114,230,0,0,0,114,8, ++ 0,0,0,114,8,0,0,0,114,8,0,0,0,114,9,0, ++ 0,0,114,215,0,0,0,30,3,0,0,115,30,0,0,0, ++ 8,0,4,2,2,3,2,255,2,4,2,255,12,3,2,2, ++ 10,1,2,6,10,1,2,14,12,1,2,15,16,1,114,215, ++ 0,0,0,99,0,0,0,0,0,0,0,0,0,0,0,0, ++ 0,0,0,0,2,0,0,0,64,0,0,0,115,48,0,0, ++ 0,101,0,90,1,100,0,90,2,100,1,90,3,100,2,100, ++ 3,132,0,90,4,100,4,100,5,132,0,90,5,100,6,100, ++ 7,132,0,90,6,100,8,100,9,132,0,90,7,100,10,83, ++ 0,41,11,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,4,0,0,0,67,0,0,0, ++ 115,64,0,0,0,116,0,124,0,160,1,124,1,161,1,131, ++ 1,100,1,25,0,125,2,124,2,160,2,100,2,100,1,161, ++ 2,100,3,25,0,125,3,124,1,160,3,100,2,161,1,100, ++ 4,25,0,125,4,124,3,100,5,107,2,111,31,124,4,100, ++ 5,107,3,83,0,41,7,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,4,0,0,0,114,99,0,0,0, ++ 114,0,0,0,0,114,46,0,0,0,218,8,95,95,105,110, ++ 105,116,95,95,78,41,4,114,76,0,0,0,114,204,0,0, ++ 0,114,127,0,0,0,114,106,0,0,0,41,5,114,144,0, ++ 0,0,114,164,0,0,0,114,122,0,0,0,90,13,102,105, ++ 108,101,110,97,109,101,95,98,97,115,101,90,9,116,97,105, ++ 108,95,110,97,109,101,114,8,0,0,0,114,8,0,0,0, ++ 114,9,0,0,0,114,207,0,0,0,102,3,0,0,115,8, ++ 0,0,0,18,3,16,1,14,1,16,1,122,24,95,76,111, ++ 97,100,101,114,66,97,115,105,99,115,46,105,115,95,112,97, ++ 99,107,97,103,101,99,2,0,0,0,0,0,0,0,0,0, ++ 0,0,2,0,0,0,1,0,0,0,67,0,0,0,114,25, ++ 0,0,0,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,8,0,0,0,169,2,114,144,0,0,0,114,211, ++ 0,0,0,114,8,0,0,0,114,8,0,0,0,114,9,0, ++ 0,0,218,13,99,114,101,97,116,101,95,109,111,100,117,108, ++ 101,110,3,0,0,243,2,0,0,0,4,0,122,27,95,76, ++ 111,97,100,101,114,66,97,115,105,99,115,46,99,114,101,97, ++ 116,101,95,109,111,100,117,108,101,99,2,0,0,0,0,0, ++ 0,0,0,0,0,0,3,0,0,0,5,0,0,0,67,0, ++ 0,0,115,56,0,0,0,124,0,160,0,124,1,106,1,161, ++ 1,125,2,124,2,100,1,117,0,114,18,116,2,100,2,160, ++ 3,124,1,106,1,161,1,131,1,130,1,116,4,160,5,116, ++ 6,124,2,124,1,106,7,161,3,1,0,100,1,83,0,41, ++ 3,122,19,69,120,101,99,117,116,101,32,116,104,101,32,109, ++ 111,100,117,108,101,46,78,122,52,99,97,110,110,111,116,32, ++ 108,111,97,100,32,109,111,100,117,108,101,32,123,33,114,125, ++ 32,119,104,101,110,32,103,101,116,95,99,111,100,101,40,41, ++ 32,114,101,116,117,114,110,115,32,78,111,110,101,41,8,218, ++ 8,103,101,116,95,99,111,100,101,114,151,0,0,0,114,143, ++ 0,0,0,114,91,0,0,0,114,160,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,157, ++ 0,0,0,41,3,114,144,0,0,0,218,6,109,111,100,117, ++ 108,101,114,189,0,0,0,114,8,0,0,0,114,8,0,0, ++ 0,114,9,0,0,0,218,11,101,120,101,99,95,109,111,100, ++ 117,108,101,113,3,0,0,115,12,0,0,0,12,2,8,1, ++ 4,1,8,1,4,255,20,2,122,25,95,76,111,97,100,101, ++ 114,66,97,115,105,99,115,46,101,120,101,99,95,109,111,100, + 117,108,101,99,2,0,0,0,0,0,0,0,0,0,0,0, +- 3,0,0,0,5,0,0,0,67,0,0,0,115,56,0,0, +- 0,124,0,160,0,124,1,106,1,161,1,125,2,124,2,100, +- 1,117,0,114,18,116,2,100,2,160,3,124,1,106,1,161, +- 1,131,1,130,1,116,4,160,5,116,6,124,2,124,1,106, +- 7,161,3,1,0,100,1,83,0,41,3,122,19,69,120,101, +- 99,117,116,101,32,116,104,101,32,109,111,100,117,108,101,46, +- 78,122,52,99,97,110,110,111,116,32,108,111,97,100,32,109, +- 111,100,117,108,101,32,123,33,114,125,32,119,104,101,110,32, +- 103,101,116,95,99,111,100,101,40,41,32,114,101,116,117,114, +- 110,115,32,78,111,110,101,41,8,218,8,103,101,116,95,99, +- 111,100,101,114,150,0,0,0,114,142,0,0,0,114,89,0, +- 0,0,114,159,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,156,0,0,0,41,3,114, +- 143,0,0,0,218,6,109,111,100,117,108,101,114,188,0,0, +- 0,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, +- 218,11,101,120,101,99,95,109,111,100,117,108,101,109,3,0, +- 0,115,12,0,0,0,12,2,8,1,4,1,8,1,4,255, +- 20,2,122,25,95,76,111,97,100,101,114,66,97,115,105,99, +- 115,46,101,120,101,99,95,109,111,100,117,108,101,99,2,0, +- 0,0,0,0,0,0,0,0,0,0,2,0,0,0,4,0, +- 0,0,67,0,0,0,115,12,0,0,0,116,0,160,1,124, +- 0,124,1,161,2,83,0,41,2,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,78,41,2,114,159,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,143,0,0,0,114,163,0,0,0,114,7,0,0, +- 0,114,7,0,0,0,114,8,0,0,0,218,11,108,111,97, +- 100,95,109,111,100,117,108,101,117,3,0,0,115,2,0,0, +- 0,12,3,122,25,95,76,111,97,100,101,114,66,97,115,105, +- 99,115,46,108,111,97,100,95,109,111,100,117,108,101,78,41, +- 8,114,150,0,0,0,114,149,0,0,0,114,151,0,0,0, +- 114,152,0,0,0,114,206,0,0,0,114,239,0,0,0,114, +- 245,0,0,0,114,248,0,0,0,114,7,0,0,0,114,7, +- 0,0,0,114,7,0,0,0,114,8,0,0,0,114,235,0, +- 0,0,93,3,0,0,115,12,0,0,0,8,0,4,2,8, +- 3,8,8,8,3,12,8,114,235,0,0,0,99,0,0,0, +- 0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0, +- 0,64,0,0,0,115,74,0,0,0,101,0,90,1,100,0, +- 90,2,100,1,100,2,132,0,90,3,100,3,100,4,132,0, +- 90,4,100,5,100,6,132,0,90,5,100,7,100,8,132,0, +- 90,6,100,9,100,10,132,0,90,7,100,11,100,12,156,1, +- 100,13,100,14,132,2,90,8,100,15,100,16,132,0,90,9, +- 100,17,83,0,41,18,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,2,0,0,0,1,0,0,0,67,0,0,0,115,4,0, +- 0,0,116,0,130,1,41,2,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,78, +- 41,1,114,76,0,0,0,169,2,114,143,0,0,0,114,65, +- 0,0,0,114,7,0,0,0,114,7,0,0,0,114,8,0, +- 0,0,218,10,112,97,116,104,95,109,116,105,109,101,125,3, +- 0,0,115,2,0,0,0,4,6,122,23,83,111,117,114,99, +- 101,76,111,97,100,101,114,46,112,97,116,104,95,109,116,105, +- 109,101,99,2,0,0,0,0,0,0,0,0,0,0,0,2, +- 0,0,0,4,0,0,0,67,0,0,0,115,14,0,0,0, +- 100,1,124,0,160,0,124,1,161,1,105,1,83,0,41,3, +- 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,193,0,0,0,78,41,1,114,251,0,0,0, +- 114,250,0,0,0,114,7,0,0,0,114,7,0,0,0,114, +- 8,0,0,0,218,10,112,97,116,104,95,115,116,97,116,115, +- 133,3,0,0,115,2,0,0,0,14,12,122,23,83,111,117, +- 114,99,101,76,111,97,100,101,114,46,112,97,116,104,95,115, +- 116,97,116,115,99,4,0,0,0,0,0,0,0,0,0,0, +- 0,4,0,0,0,4,0,0,0,67,0,0,0,115,12,0, +- 0,0,124,0,160,0,124,2,124,3,161,2,83,0,41,2, +- 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,78,41,1,218,8,115,101,116,95,100, +- 97,116,97,41,4,114,143,0,0,0,114,134,0,0,0,90, +- 10,99,97,99,104,101,95,112,97,116,104,114,41,0,0,0, +- 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,218, +- 15,95,99,97,99,104,101,95,98,121,116,101,99,111,100,101, +- 147,3,0,0,115,2,0,0,0,12,8,122,28,83,111,117, +- 114,99,101,76,111,97,100,101,114,46,95,99,97,99,104,101, +- 95,98,121,116,101,99,111,100,101,99,3,0,0,0,0,0, +- 0,0,0,0,0,0,3,0,0,0,1,0,0,0,67,0, +- 0,0,114,23,0,0,0,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, ++ 2,0,0,0,4,0,0,0,67,0,0,0,115,12,0,0, ++ 0,116,0,160,1,124,0,124,1,161,2,83,0,41,2,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,78,41,2,114,160, ++ 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,144,0,0,0,114,164,0, ++ 0,0,114,8,0,0,0,114,8,0,0,0,114,9,0,0, ++ 0,218,11,108,111,97,100,95,109,111,100,117,108,101,121,3, ++ 0,0,115,2,0,0,0,12,3,122,25,95,76,111,97,100, ++ 101,114,66,97,115,105,99,115,46,108,111,97,100,95,109,111, ++ 100,117,108,101,78,41,8,114,151,0,0,0,114,150,0,0, ++ 0,114,152,0,0,0,114,153,0,0,0,114,207,0,0,0, ++ 114,240,0,0,0,114,246,0,0,0,114,249,0,0,0,114, ++ 8,0,0,0,114,8,0,0,0,114,8,0,0,0,114,9, ++ 0,0,0,114,236,0,0,0,97,3,0,0,115,12,0,0, ++ 0,8,0,4,2,8,3,8,8,8,3,12,8,114,236,0, ++ 0,0,99,0,0,0,0,0,0,0,0,0,0,0,0,0, ++ 0,0,0,3,0,0,0,64,0,0,0,115,74,0,0,0, ++ 101,0,90,1,100,0,90,2,100,1,100,2,132,0,90,3, ++ 100,3,100,4,132,0,90,4,100,5,100,6,132,0,90,5, ++ 100,7,100,8,132,0,90,6,100,9,100,10,132,0,90,7, ++ 100,11,100,12,156,1,100,13,100,14,132,2,90,8,100,15, ++ 100,16,132,0,90,9,100,17,83,0,41,18,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,2,0,0,0,1,0,0,0,67, ++ 0,0,0,115,4,0,0,0,116,0,130,1,41,2,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,78,41,1,114,78,0,0,0,169,2,114, ++ 144,0,0,0,114,67,0,0,0,114,8,0,0,0,114,8, ++ 0,0,0,114,9,0,0,0,218,10,112,97,116,104,95,109, ++ 116,105,109,101,129,3,0,0,115,2,0,0,0,4,6,122, ++ 23,83,111,117,114,99,101,76,111,97,100,101,114,46,112,97, ++ 116,104,95,109,116,105,109,101,99,2,0,0,0,0,0,0, ++ 0,0,0,0,0,2,0,0,0,4,0,0,0,67,0,0, ++ 0,115,14,0,0,0,100,1,124,0,160,0,124,1,161,1, ++ 105,1,83,0,41,3,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,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, ++ 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,78,114,7,0,0,0,41,3,114,143,0,0,0,114,65, +- 0,0,0,114,41,0,0,0,114,7,0,0,0,114,7,0, +- 0,0,114,8,0,0,0,114,253,0,0,0,157,3,0,0, +- 114,240,0,0,0,122,21,83,111,117,114,99,101,76,111,97, +- 100,101,114,46,115,101,116,95,100,97,116,97,99,2,0,0, +- 0,0,0,0,0,0,0,0,0,5,0,0,0,10,0,0, +- 0,67,0,0,0,115,70,0,0,0,124,0,160,0,124,1, +- 161,1,125,2,122,10,124,0,160,1,124,2,161,1,125,3, +- 87,0,116,4,124,3,131,1,83,0,4,0,116,2,121,34, +- 1,0,125,4,1,0,122,7,116,3,100,1,124,1,100,2, +- 141,2,124,4,130,2,100,3,125,4,126,4,119,1,119,0, +- 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,140,0,0,0,78,41,5,114,203,0,0,0,218,8, +- 103,101,116,95,100,97,116,97,114,76,0,0,0,114,142,0, +- 0,0,114,200,0,0,0,41,5,114,143,0,0,0,114,163, +- 0,0,0,114,65,0,0,0,114,198,0,0,0,218,3,101, +- 120,99,114,7,0,0,0,114,7,0,0,0,114,8,0,0, +- 0,218,10,103,101,116,95,115,111,117,114,99,101,164,3,0, +- 0,115,24,0,0,0,10,2,2,1,12,1,8,4,14,253, +- 4,1,2,1,4,255,2,1,2,255,8,128,2,255,122,23, +- 83,111,117,114,99,101,76,111,97,100,101,114,46,103,101,116, +- 95,115,111,117,114,99,101,114,130,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,4,0,0,0,8,0,0,0,67,0, +- 0,0,115,22,0,0,0,116,0,106,1,116,2,124,1,124, +- 2,100,1,100,2,124,3,100,3,141,6,83,0,41,5,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,243,0,0,0,84,41,2,218,12,100,111,110, +- 116,95,105,110,104,101,114,105,116,114,108,0,0,0,78,41, +- 3,114,159,0,0,0,114,242,0,0,0,218,7,99,111,109, +- 112,105,108,101,41,4,114,143,0,0,0,114,41,0,0,0, +- 114,65,0,0,0,114,2,1,0,0,114,7,0,0,0,114, +- 7,0,0,0,114,8,0,0,0,218,14,115,111,117,114,99, +- 101,95,116,111,95,99,111,100,101,174,3,0,0,115,6,0, +- 0,0,12,5,4,1,6,255,122,27,83,111,117,114,99,101, +- 76,111,97,100,101,114,46,115,111,117,114,99,101,95,116,111, +- 95,99,111,100,101,99,2,0,0,0,0,0,0,0,0,0, +- 0,0,15,0,0,0,9,0,0,0,67,0,0,0,115,2, +- 2,0,0,124,0,160,0,124,1,161,1,125,2,100,1,125, +- 3,100,1,125,4,100,1,125,5,100,2,125,6,100,3,125, +- 7,122,6,116,1,124,2,131,1,125,8,87,0,110,11,4, +- 0,116,2,121,32,1,0,1,0,1,0,100,1,125,8,89, +- 0,110,144,119,0,122,7,124,0,160,3,124,2,161,1,125, +- 9,87,0,110,9,4,0,116,4,121,49,1,0,1,0,1, +- 0,89,0,110,127,119,0,116,5,124,9,100,4,25,0,131, +- 1,125,3,122,7,124,0,160,6,124,8,161,1,125,10,87, +- 0,110,9,4,0,116,4,121,72,1,0,1,0,1,0,89, +- 0,110,104,119,0,124,1,124,8,100,5,156,2,125,11,122, +- 71,116,7,124,10,124,1,124,11,131,3,125,12,116,8,124, +- 10,131,1,100,6,100,1,133,2,25,0,125,13,124,12,100, +- 7,64,0,100,8,107,3,125,6,124,6,114,138,124,12,100, +- 9,64,0,100,8,107,3,125,7,116,9,106,10,100,10,107, +- 3,114,137,124,7,115,119,116,9,106,10,100,11,107,2,114, +- 137,124,0,160,6,124,2,161,1,125,4,116,9,160,11,116, +- 12,124,4,161,2,125,5,116,13,124,10,124,5,124,1,124, +- 11,131,4,1,0,110,10,116,14,124,10,124,3,124,9,100, +- 12,25,0,124,1,124,11,131,5,1,0,87,0,110,11,4, +- 0,116,15,116,16,102,2,121,160,1,0,1,0,1,0,89, +- 0,110,16,119,0,116,17,160,18,100,13,124,8,124,2,161, +- 3,1,0,116,19,124,13,124,1,124,8,124,2,100,14,141, +- 4,83,0,124,4,100,1,117,0,114,185,124,0,160,6,124, +- 2,161,1,125,4,124,0,160,20,124,4,124,2,161,2,125, +- 14,116,17,160,18,100,15,124,2,161,2,1,0,116,21,106, +- 22,115,255,124,8,100,1,117,1,114,255,124,3,100,1,117, +- 1,114,255,124,6,114,226,124,5,100,1,117,0,114,219,116, +- 9,160,11,124,4,161,1,125,5,116,23,124,14,124,5,124, +- 7,131,3,125,10,110,8,116,24,124,14,124,3,116,25,124, +- 4,131,1,131,3,125,10,122,10,124,0,160,26,124,2,124, +- 8,124,10,161,3,1,0,87,0,124,14,83,0,4,0,116, +- 2,121,254,1,0,1,0,1,0,89,0,124,14,83,0,119, +- 0,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,193,0,0,0,114, +- 183,0,0,0,114,169,0,0,0,114,3,0,0,0,114,0, +- 0,0,0,114,44,0,0,0,90,5,110,101,118,101,114,90, +- 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,141, +- 0,0,0,114,132,0,0,0,114,134,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,203,0,0,0,114,121,0,0,0,114,107, +- 0,0,0,114,252,0,0,0,114,76,0,0,0,114,33,0, +- 0,0,114,255,0,0,0,114,176,0,0,0,218,10,109,101, +- 109,111,114,121,118,105,101,119,114,187,0,0,0,90,21,99, +- 104,101,99,107,95,104,97,115,104,95,98,97,115,101,100,95, +- 112,121,99,115,114,181,0,0,0,218,17,95,82,65,87,95, +- 77,65,71,73,67,95,78,85,77,66,69,82,114,182,0,0, +- 0,114,180,0,0,0,114,142,0,0,0,114,174,0,0,0, +- 114,159,0,0,0,114,173,0,0,0,114,189,0,0,0,114, +- 5,1,0,0,114,15,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,195, +- 0,0,0,114,194,0,0,0,114,4,0,0,0,114,254,0, +- 0,0,41,15,114,143,0,0,0,114,163,0,0,0,114,134, +- 0,0,0,114,178,0,0,0,114,198,0,0,0,114,181,0, +- 0,0,90,10,104,97,115,104,95,98,97,115,101,100,90,12, +- 99,104,101,99,107,95,115,111,117,114,99,101,114,132,0,0, +- 0,218,2,115,116,114,41,0,0,0,114,175,0,0,0,114, +- 16,0,0,0,90,10,98,121,116,101,115,95,100,97,116,97, +- 90,11,99,111,100,101,95,111,98,106,101,99,116,114,7,0, +- 0,0,114,7,0,0,0,114,8,0,0,0,114,241,0,0, +- 0,182,3,0,0,115,170,0,0,0,10,7,4,1,4,1, +- 4,1,4,1,4,1,2,1,12,1,12,1,8,1,2,255, +- 2,3,14,1,12,1,4,1,2,255,12,3,2,1,14,1, +- 12,1,4,1,2,255,2,4,2,1,6,254,2,4,12,1, +- 16,1,12,1,4,1,12,1,10,1,2,1,2,255,8,2, +- 2,254,10,3,4,1,2,1,2,1,4,254,8,4,2,1, +- 4,255,2,128,2,3,2,1,2,1,6,1,2,1,2,1, +- 4,251,4,128,16,7,4,1,2,255,8,3,2,1,4,255, +- 6,2,2,1,2,1,6,254,8,3,10,1,12,1,12,1, +- 14,1,6,1,2,255,4,2,8,1,10,1,14,1,6,2, +- 6,1,4,255,2,2,16,1,4,3,12,254,2,1,4,1, +- 2,254,4,2,122,21,83,111,117,114,99,101,76,111,97,100, +- 101,114,46,103,101,116,95,99,111,100,101,78,41,10,114,150, +- 0,0,0,114,149,0,0,0,114,151,0,0,0,114,251,0, +- 0,0,114,252,0,0,0,114,254,0,0,0,114,253,0,0, +- 0,114,1,1,0,0,114,5,1,0,0,114,241,0,0,0, +- 114,7,0,0,0,114,7,0,0,0,114,7,0,0,0,114, +- 8,0,0,0,114,249,0,0,0,123,3,0,0,115,16,0, +- 0,0,8,0,8,2,8,8,8,14,8,10,8,7,14,10, +- 12,8,114,249,0,0,0,99,0,0,0,0,0,0,0,0, +- 0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0, +- 115,92,0,0,0,101,0,90,1,100,0,90,2,100,1,90, +- 3,100,2,100,3,132,0,90,4,100,4,100,5,132,0,90, +- 5,100,6,100,7,132,0,90,6,101,7,135,0,102,1,100, +- 8,100,9,132,8,131,1,90,8,101,7,100,10,100,11,132, +- 0,131,1,90,9,100,12,100,13,132,0,90,10,101,7,100, +- 14,100,15,132,0,131,1,90,11,135,0,4,0,90,12,83, +- 0,41,16,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,3,0,0,0,2,0,0,0,67,0,0, +- 0,115,16,0,0,0,124,1,124,0,95,0,124,2,124,0, +- 95,1,100,1,83,0,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,183,0,0,0,41,3,114,143,0, +- 0,0,114,163,0,0,0,114,65,0,0,0,114,7,0,0, +- 0,114,7,0,0,0,114,8,0,0,0,114,236,0,0,0, +- 16,4,0,0,115,4,0,0,0,6,3,10,1,122,19,70, +- 105,108,101,76,111,97,100,101,114,46,95,95,105,110,105,116, +- 95,95,99,2,0,0,0,0,0,0,0,0,0,0,0,2, +- 0,0,0,2,0,0,0,67,0,0,0,243,24,0,0,0, +- 124,0,106,0,124,1,106,0,107,2,111,11,124,0,106,1, +- 124,1,106,1,107,2,83,0,114,69,0,0,0,169,2,218, +- 9,95,95,99,108,97,115,115,95,95,114,156,0,0,0,169, +- 2,114,143,0,0,0,90,5,111,116,104,101,114,114,7,0, +- 0,0,114,7,0,0,0,114,8,0,0,0,218,6,95,95, +- 101,113,95,95,22,4,0,0,243,6,0,0,0,12,1,10, +- 1,2,255,122,17,70,105,108,101,76,111,97,100,101,114,46, +- 95,95,101,113,95,95,99,1,0,0,0,0,0,0,0,0, +- 0,0,0,1,0,0,0,3,0,0,0,67,0,0,0,243, +- 20,0,0,0,116,0,124,0,106,1,131,1,116,0,124,0, +- 106,2,131,1,65,0,83,0,114,69,0,0,0,169,3,218, +- 4,104,97,115,104,114,141,0,0,0,114,65,0,0,0,169, +- 1,114,143,0,0,0,114,7,0,0,0,114,7,0,0,0, +- 114,8,0,0,0,218,8,95,95,104,97,115,104,95,95,26, +- 4,0,0,243,2,0,0,0,20,1,122,19,70,105,108,101, +- 76,111,97,100,101,114,46,95,95,104,97,115,104,95,95,99, +- 2,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, +- 3,0,0,0,3,0,0,0,115,16,0,0,0,116,0,116, +- 1,124,0,131,2,160,2,124,1,161,1,83,0,41,2,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,78,41,3,218,5,115,117,112,101,114,114, +- 11,1,0,0,114,248,0,0,0,114,247,0,0,0,169,1, +- 114,14,1,0,0,114,7,0,0,0,114,8,0,0,0,114, +- 248,0,0,0,29,4,0,0,115,2,0,0,0,16,10,122, +- 22,70,105,108,101,76,111,97,100,101,114,46,108,111,97,100, +- 95,109,111,100,117,108,101,99,2,0,0,0,0,0,0,0, +- 0,0,0,0,2,0,0,0,1,0,0,0,67,0,0,0, +- 243,6,0,0,0,124,0,106,0,83,0,169,2,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,78,114,71,0,0,0,114, +- 247,0,0,0,114,7,0,0,0,114,7,0,0,0,114,8, +- 0,0,0,114,203,0,0,0,41,4,0,0,243,2,0,0, +- 0,6,3,122,23,70,105,108,101,76,111,97,100,101,114,46, +- 103,101,116,95,102,105,108,101,110,97,109,101,99,2,0,0, +- 0,0,0,0,0,0,0,0,0,3,0,0,0,8,0,0, +- 0,67,0,0,0,115,128,0,0,0,116,0,124,0,116,1, +- 116,2,102,2,131,2,114,36,116,3,160,4,116,5,124,1, +- 131,1,161,1,143,12,125,2,124,2,160,6,161,0,87,0, +- 2,0,100,1,4,0,4,0,131,3,1,0,83,0,49,0, +- 115,29,119,1,1,0,1,0,1,0,89,0,1,0,100,1, +- 83,0,116,3,160,7,124,1,100,2,161,2,143,12,125,2, +- 124,2,160,6,161,0,87,0,2,0,100,1,4,0,4,0, +- 131,3,1,0,83,0,49,0,115,57,119,1,1,0,1,0, +- 1,0,89,0,1,0,100,1,83,0,41,3,122,39,82,101, +- 116,117,114,110,32,116,104,101,32,100,97,116,97,32,102,114, +- 111,109,32,112,97,116,104,32,97,115,32,114,97,119,32,98, +- 121,116,101,115,46,78,218,1,114,41,8,114,185,0,0,0, +- 114,249,0,0,0,218,19,69,120,116,101,110,115,105,111,110, +- 70,105,108,101,76,111,97,100,101,114,114,91,0,0,0,90, +- 9,111,112,101,110,95,99,111,100,101,114,109,0,0,0,90, +- 4,114,101,97,100,114,92,0,0,0,41,3,114,143,0,0, +- 0,114,65,0,0,0,114,94,0,0,0,114,7,0,0,0, +- 114,7,0,0,0,114,8,0,0,0,114,255,0,0,0,46, +- 4,0,0,115,14,0,0,0,14,2,16,1,6,1,36,255, +- 14,3,6,1,36,255,122,19,70,105,108,101,76,111,97,100, +- 101,114,46,103,101,116,95,100,97,116,97,99,2,0,0,0, +- 0,0,0,0,0,0,0,0,3,0,0,0,2,0,0,0, +- 67,0,0,0,115,20,0,0,0,100,1,100,2,108,0,109, +- 1,125,2,1,0,124,2,124,0,131,1,83,0,41,3,78, +- 114,0,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,31,1,0,0,41,3,114, +- 143,0,0,0,114,244,0,0,0,114,31,1,0,0,114,7, +- 0,0,0,114,7,0,0,0,114,8,0,0,0,218,19,103, +- 101,116,95,114,101,115,111,117,114,99,101,95,114,101,97,100, +- 101,114,55,4,0,0,115,4,0,0,0,12,2,8,1,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,41, +- 13,114,150,0,0,0,114,149,0,0,0,114,151,0,0,0, +- 114,152,0,0,0,114,236,0,0,0,114,16,1,0,0,114, +- 22,1,0,0,114,160,0,0,0,114,248,0,0,0,114,203, +- 0,0,0,114,255,0,0,0,114,33,1,0,0,90,13,95, +- 95,99,108,97,115,115,99,101,108,108,95,95,114,7,0,0, +- 0,114,7,0,0,0,114,25,1,0,0,114,8,0,0,0, +- 114,11,1,0,0,11,4,0,0,115,24,0,0,0,8,0, +- 4,2,8,3,8,6,8,4,2,3,14,1,2,11,10,1, +- 8,4,2,9,18,1,114,11,1,0,0,99,0,0,0,0, +- 0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0, +- 64,0,0,0,115,46,0,0,0,101,0,90,1,100,0,90, +- 2,100,1,90,3,100,2,100,3,132,0,90,4,100,4,100, +- 5,132,0,90,5,100,6,100,7,156,1,100,8,100,9,132, +- 2,90,6,100,10,83,0,41,11,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, +- 67,0,0,0,115,22,0,0,0,116,0,124,1,131,1,125, +- 2,124,2,106,1,124,2,106,2,100,1,156,2,83,0,41, +- 3,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,193,0,0,0,114,6,1,0,0, +- 78,41,3,114,75,0,0,0,218,8,115,116,95,109,116,105, +- 109,101,90,7,115,116,95,115,105,122,101,41,3,114,143,0, +- 0,0,114,65,0,0,0,114,10,1,0,0,114,7,0,0, +- 0,114,7,0,0,0,114,8,0,0,0,114,252,0,0,0, +- 65,4,0,0,115,4,0,0,0,8,2,14,1,122,27,83, +- 111,117,114,99,101,70,105,108,101,76,111,97,100,101,114,46, ++ 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,194,0,0,0,78,41, ++ 1,114,252,0,0,0,114,251,0,0,0,114,8,0,0,0, ++ 114,8,0,0,0,114,9,0,0,0,218,10,112,97,116,104, ++ 95,115,116,97,116,115,137,3,0,0,115,2,0,0,0,14, ++ 12,122,23,83,111,117,114,99,101,76,111,97,100,101,114,46, + 112,97,116,104,95,115,116,97,116,115,99,4,0,0,0,0, +- 0,0,0,0,0,0,0,5,0,0,0,5,0,0,0,67, +- 0,0,0,115,24,0,0,0,116,0,124,1,131,1,125,4, +- 124,0,106,1,124,2,124,3,124,4,100,1,141,3,83,0, +- 41,2,78,169,1,218,5,95,109,111,100,101,41,2,114,139, +- 0,0,0,114,253,0,0,0,41,5,114,143,0,0,0,114, +- 134,0,0,0,114,132,0,0,0,114,41,0,0,0,114,78, +- 0,0,0,114,7,0,0,0,114,7,0,0,0,114,8,0, +- 0,0,114,254,0,0,0,70,4,0,0,115,4,0,0,0, +- 8,2,16,1,122,32,83,111,117,114,99,101,70,105,108,101, +- 76,111,97,100,101,114,46,95,99,97,99,104,101,95,98,121, +- 116,101,99,111,100,101,114,87,0,0,0,114,36,1,0,0, +- 99,3,0,0,0,0,0,0,0,1,0,0,0,9,0,0, +- 0,11,0,0,0,67,0,0,0,115,254,0,0,0,116,0, +- 124,1,131,1,92,2,125,4,125,5,103,0,125,6,124,4, +- 114,31,116,1,124,4,131,1,115,31,116,0,124,4,131,1, +- 92,2,125,4,125,7,124,6,160,2,124,7,161,1,1,0, +- 124,4,114,31,116,1,124,4,131,1,114,14,116,3,124,6, +- 131,1,68,0,93,49,125,7,116,4,124,4,124,7,131,2, +- 125,4,122,7,116,5,160,6,124,4,161,1,1,0,87,0, +- 113,35,4,0,116,7,121,58,1,0,1,0,1,0,89,0, +- 113,35,4,0,116,8,121,84,1,0,125,8,1,0,122,15, +- 116,9,160,10,100,1,124,4,124,8,161,3,1,0,87,0, +- 89,0,100,2,125,8,126,8,1,0,100,2,83,0,100,2, +- 125,8,126,8,119,1,119,0,122,15,116,11,124,1,124,2, +- 124,3,131,3,1,0,116,9,160,10,100,3,124,1,161,2, +- 1,0,87,0,100,2,83,0,4,0,116,8,121,126,1,0, +- 125,8,1,0,122,14,116,9,160,10,100,1,124,1,124,8, +- 161,3,1,0,87,0,89,0,100,2,125,8,126,8,100,2, +- 83,0,100,2,125,8,126,8,119,1,119,0,41,4,122,27, +- 87,114,105,116,101,32,98,121,116,101,115,32,100,97,116,97, +- 32,116,111,32,97,32,102,105,108,101,46,122,27,99,111,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,74,0,0,0,114,83, +- 0,0,0,114,61,0,0,0,218,8,114,101,118,101,114,115, +- 101,100,114,67,0,0,0,114,18,0,0,0,90,5,109,107, +- 100,105,114,218,15,70,105,108,101,69,120,105,115,116,115,69, +- 114,114,111,114,114,76,0,0,0,114,159,0,0,0,114,173, +- 0,0,0,114,95,0,0,0,41,9,114,143,0,0,0,114, +- 65,0,0,0,114,41,0,0,0,114,37,1,0,0,218,6, +- 112,97,114,101,110,116,114,120,0,0,0,114,63,0,0,0, +- 114,68,0,0,0,114,0,1,0,0,114,7,0,0,0,114, +- 7,0,0,0,114,8,0,0,0,114,253,0,0,0,75,4, +- 0,0,115,56,0,0,0,12,2,4,1,12,2,12,1,10, +- 1,12,254,12,4,10,1,2,1,14,1,12,1,4,2,14, +- 1,6,3,4,1,4,255,16,2,8,128,2,251,2,6,12, +- 1,18,1,14,1,8,2,2,1,18,255,8,128,2,254,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,78,41,7,114,150,0, +- 0,0,114,149,0,0,0,114,151,0,0,0,114,152,0,0, +- 0,114,252,0,0,0,114,254,0,0,0,114,253,0,0,0, +- 114,7,0,0,0,114,7,0,0,0,114,7,0,0,0,114, +- 8,0,0,0,114,34,1,0,0,61,4,0,0,115,10,0, +- 0,0,8,0,4,2,8,2,8,5,18,5,114,34,1,0, ++ 0,0,0,0,0,0,0,4,0,0,0,4,0,0,0,67, ++ 0,0,0,115,12,0,0,0,124,0,160,0,124,2,124,3, ++ 161,2,83,0,41,2,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,78,41,1,218, ++ 8,115,101,116,95,100,97,116,97,41,4,114,144,0,0,0, ++ 114,135,0,0,0,90,10,99,97,99,104,101,95,112,97,116, ++ 104,114,43,0,0,0,114,8,0,0,0,114,8,0,0,0, ++ 114,9,0,0,0,218,15,95,99,97,99,104,101,95,98,121, ++ 116,101,99,111,100,101,151,3,0,0,115,2,0,0,0,12, ++ 8,122,28,83,111,117,114,99,101,76,111,97,100,101,114,46, ++ 95,99,97,99,104,101,95,98,121,116,101,99,111,100,101,99, ++ 3,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0, ++ 1,0,0,0,67,0,0,0,114,25,0,0,0,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,8,0,0,0,41,3,114, ++ 144,0,0,0,114,67,0,0,0,114,43,0,0,0,114,8, ++ 0,0,0,114,8,0,0,0,114,9,0,0,0,114,254,0, ++ 0,0,161,3,0,0,114,241,0,0,0,122,21,83,111,117, ++ 114,99,101,76,111,97,100,101,114,46,115,101,116,95,100,97, ++ 116,97,99,2,0,0,0,0,0,0,0,0,0,0,0,5, ++ 0,0,0,10,0,0,0,67,0,0,0,115,70,0,0,0, ++ 124,0,160,0,124,1,161,1,125,2,122,10,124,0,160,1, ++ 124,2,161,1,125,3,87,0,116,4,124,3,131,1,83,0, ++ 4,0,116,2,121,34,1,0,125,4,1,0,122,7,116,3, ++ 100,1,124,1,100,2,141,2,124,4,130,2,100,3,125,4, ++ 126,4,119,1,119,0,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,141,0,0,0,78,41,5,114, ++ 204,0,0,0,218,8,103,101,116,95,100,97,116,97,114,78, ++ 0,0,0,114,143,0,0,0,114,201,0,0,0,41,5,114, ++ 144,0,0,0,114,164,0,0,0,114,67,0,0,0,114,199, ++ 0,0,0,218,3,101,120,99,114,8,0,0,0,114,8,0, ++ 0,0,114,9,0,0,0,218,10,103,101,116,95,115,111,117, ++ 114,99,101,168,3,0,0,115,24,0,0,0,10,2,2,1, ++ 12,1,8,4,14,253,4,1,2,1,4,255,2,1,2,255, ++ 8,128,2,255,122,23,83,111,117,114,99,101,76,111,97,100, ++ 101,114,46,103,101,116,95,115,111,117,114,99,101,114,3,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,4,0,0,0, ++ 8,0,0,0,67,0,0,0,115,22,0,0,0,116,0,106, ++ 1,116,2,124,1,124,2,100,1,100,2,124,3,100,3,141, ++ 6,83,0,41,5,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,244,0,0,0,84,41, ++ 2,218,12,100,111,110,116,95,105,110,104,101,114,105,116,114, ++ 110,0,0,0,78,41,3,114,160,0,0,0,114,243,0,0, ++ 0,218,7,99,111,109,112,105,108,101,41,4,114,144,0,0, ++ 0,114,43,0,0,0,114,67,0,0,0,114,3,1,0,0, ++ 114,8,0,0,0,114,8,0,0,0,114,9,0,0,0,218, ++ 14,115,111,117,114,99,101,95,116,111,95,99,111,100,101,178, ++ 3,0,0,115,6,0,0,0,12,5,4,1,6,255,122,27, ++ 83,111,117,114,99,101,76,111,97,100,101,114,46,115,111,117, ++ 114,99,101,95,116,111,95,99,111,100,101,99,2,0,0,0, ++ 0,0,0,0,0,0,0,0,15,0,0,0,9,0,0,0, ++ 67,0,0,0,115,2,2,0,0,124,0,160,0,124,1,161, ++ 1,125,2,100,1,125,3,100,1,125,4,100,1,125,5,100, ++ 2,125,6,100,3,125,7,122,6,116,1,124,2,131,1,125, ++ 8,87,0,110,11,4,0,116,2,121,32,1,0,1,0,1, ++ 0,100,1,125,8,89,0,110,144,119,0,122,7,124,0,160, ++ 3,124,2,161,1,125,9,87,0,110,9,4,0,116,4,121, ++ 49,1,0,1,0,1,0,89,0,110,127,119,0,116,5,124, ++ 9,100,4,25,0,131,1,125,3,122,7,124,0,160,6,124, ++ 8,161,1,125,10,87,0,110,9,4,0,116,4,121,72,1, ++ 0,1,0,1,0,89,0,110,104,119,0,124,1,124,8,100, ++ 5,156,2,125,11,122,71,116,7,124,10,124,1,124,11,131, ++ 3,125,12,116,8,124,10,131,1,100,6,100,1,133,2,25, ++ 0,125,13,124,12,100,7,64,0,100,8,107,3,125,6,124, ++ 6,114,138,124,12,100,9,64,0,100,8,107,3,125,7,116, ++ 9,106,10,100,10,107,3,114,137,124,7,115,119,116,9,106, ++ 10,100,11,107,2,114,137,124,0,160,6,124,2,161,1,125, ++ 4,116,9,160,11,116,12,124,4,161,2,125,5,116,13,124, ++ 10,124,5,124,1,124,11,131,4,1,0,110,10,116,14,124, ++ 10,124,3,124,9,100,12,25,0,124,1,124,11,131,5,1, ++ 0,87,0,110,11,4,0,116,15,116,16,102,2,121,160,1, ++ 0,1,0,1,0,89,0,110,16,119,0,116,17,160,18,100, ++ 13,124,8,124,2,161,3,1,0,116,19,124,13,124,1,124, ++ 8,124,2,100,14,141,4,83,0,124,4,100,1,117,0,114, ++ 185,124,0,160,6,124,2,161,1,125,4,124,0,160,20,124, ++ 4,124,2,161,2,125,14,116,17,160,18,100,15,124,2,161, ++ 2,1,0,116,21,106,22,115,255,124,8,100,1,117,1,114, ++ 255,124,3,100,1,117,1,114,255,124,6,114,226,124,5,100, ++ 1,117,0,114,219,116,9,160,11,124,4,161,1,125,5,116, ++ 23,124,14,124,5,124,7,131,3,125,10,110,8,116,24,124, ++ 14,124,3,116,25,124,4,131,1,131,3,125,10,122,10,124, ++ 0,160,26,124,2,124,8,124,10,161,3,1,0,87,0,124, ++ 14,83,0,4,0,116,2,121,254,1,0,1,0,1,0,89, ++ 0,124,14,83,0,119,0,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,194,0,0,0,114,184,0,0,0,114,170,0,0,0,114, ++ 4,0,0,0,114,0,0,0,0,114,46,0,0,0,90,5, ++ 110,101,118,101,114,90,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,142,0,0,0,114,133,0,0,0,114,135, ++ 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,204,0,0,0,114, ++ 123,0,0,0,114,109,0,0,0,114,253,0,0,0,114,78, ++ 0,0,0,114,35,0,0,0,114,0,1,0,0,114,177,0, ++ 0,0,218,10,109,101,109,111,114,121,118,105,101,119,114,188, ++ 0,0,0,90,21,99,104,101,99,107,95,104,97,115,104,95, ++ 98,97,115,101,100,95,112,121,99,115,114,182,0,0,0,218, ++ 17,95,82,65,87,95,77,65,71,73,67,95,78,85,77,66, ++ 69,82,114,183,0,0,0,114,181,0,0,0,114,143,0,0, ++ 0,114,175,0,0,0,114,160,0,0,0,114,174,0,0,0, ++ 114,190,0,0,0,114,6,1,0,0,114,16,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,196,0,0,0,114,195,0,0,0,114,5, ++ 0,0,0,114,255,0,0,0,41,15,114,144,0,0,0,114, ++ 164,0,0,0,114,135,0,0,0,114,179,0,0,0,114,199, ++ 0,0,0,114,182,0,0,0,90,10,104,97,115,104,95,98, ++ 97,115,101,100,90,12,99,104,101,99,107,95,115,111,117,114, ++ 99,101,114,133,0,0,0,218,2,115,116,114,43,0,0,0, ++ 114,176,0,0,0,114,17,0,0,0,90,10,98,121,116,101, ++ 115,95,100,97,116,97,90,11,99,111,100,101,95,111,98,106, ++ 101,99,116,114,8,0,0,0,114,8,0,0,0,114,9,0, ++ 0,0,114,242,0,0,0,186,3,0,0,115,170,0,0,0, ++ 10,7,4,1,4,1,4,1,4,1,4,1,2,1,12,1, ++ 12,1,8,1,2,255,2,3,14,1,12,1,4,1,2,255, ++ 12,3,2,1,14,1,12,1,4,1,2,255,2,4,2,1, ++ 6,254,2,4,12,1,16,1,12,1,4,1,12,1,10,1, ++ 2,1,2,255,8,2,2,254,10,3,4,1,2,1,2,1, ++ 4,254,8,4,2,1,4,255,2,128,2,3,2,1,2,1, ++ 6,1,2,1,2,1,4,251,4,128,16,7,4,1,2,255, ++ 8,3,2,1,4,255,6,2,2,1,2,1,6,254,8,3, ++ 10,1,12,1,12,1,14,1,6,1,2,255,4,2,8,1, ++ 10,1,14,1,6,2,6,1,4,255,2,2,16,1,4,3, ++ 12,254,2,1,4,1,2,254,4,2,122,21,83,111,117,114, ++ 99,101,76,111,97,100,101,114,46,103,101,116,95,99,111,100, ++ 101,78,41,10,114,151,0,0,0,114,150,0,0,0,114,152, ++ 0,0,0,114,252,0,0,0,114,253,0,0,0,114,255,0, ++ 0,0,114,254,0,0,0,114,2,1,0,0,114,6,1,0, ++ 0,114,242,0,0,0,114,8,0,0,0,114,8,0,0,0, ++ 114,8,0,0,0,114,9,0,0,0,114,250,0,0,0,127, ++ 3,0,0,115,16,0,0,0,8,0,8,2,8,8,8,14, ++ 8,10,8,7,14,10,12,8,114,250,0,0,0,99,0,0, ++ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0, ++ 0,0,0,0,0,0,115,92,0,0,0,101,0,90,1,100, ++ 0,90,2,100,1,90,3,100,2,100,3,132,0,90,4,100, ++ 4,100,5,132,0,90,5,100,6,100,7,132,0,90,6,101, ++ 7,135,0,102,1,100,8,100,9,132,8,131,1,90,8,101, ++ 7,100,10,100,11,132,0,131,1,90,9,100,12,100,13,132, ++ 0,90,10,101,7,100,14,100,15,132,0,131,1,90,11,135, ++ 0,4,0,90,12,83,0,41,16,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,3,0,0,0,2, ++ 0,0,0,67,0,0,0,115,16,0,0,0,124,1,124,0, ++ 95,0,124,2,124,0,95,1,100,1,83,0,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,184,0,0, ++ 0,41,3,114,144,0,0,0,114,164,0,0,0,114,67,0, ++ 0,0,114,8,0,0,0,114,8,0,0,0,114,9,0,0, ++ 0,114,237,0,0,0,20,4,0,0,115,4,0,0,0,6, ++ 3,10,1,122,19,70,105,108,101,76,111,97,100,101,114,46, ++ 95,95,105,110,105,116,95,95,99,2,0,0,0,0,0,0, ++ 0,0,0,0,0,2,0,0,0,2,0,0,0,67,0,0, ++ 0,243,24,0,0,0,124,0,106,0,124,1,106,0,107,2, ++ 111,11,124,0,106,1,124,1,106,1,107,2,83,0,114,71, ++ 0,0,0,169,2,218,9,95,95,99,108,97,115,115,95,95, ++ 114,157,0,0,0,169,2,114,144,0,0,0,90,5,111,116, ++ 104,101,114,114,8,0,0,0,114,8,0,0,0,114,9,0, ++ 0,0,218,6,95,95,101,113,95,95,26,4,0,0,243,6, ++ 0,0,0,12,1,10,1,2,255,122,17,70,105,108,101,76, ++ 111,97,100,101,114,46,95,95,101,113,95,95,99,1,0,0, ++ 0,0,0,0,0,0,0,0,0,1,0,0,0,3,0,0, ++ 0,67,0,0,0,243,20,0,0,0,116,0,124,0,106,1, ++ 131,1,116,0,124,0,106,2,131,1,65,0,83,0,114,71, ++ 0,0,0,169,3,218,4,104,97,115,104,114,142,0,0,0, ++ 114,67,0,0,0,169,1,114,144,0,0,0,114,8,0,0, ++ 0,114,8,0,0,0,114,9,0,0,0,218,8,95,95,104, ++ 97,115,104,95,95,30,4,0,0,243,2,0,0,0,20,1, ++ 122,19,70,105,108,101,76,111,97,100,101,114,46,95,95,104, ++ 97,115,104,95,95,99,2,0,0,0,0,0,0,0,0,0, ++ 0,0,2,0,0,0,3,0,0,0,3,0,0,0,115,16, ++ 0,0,0,116,0,116,1,124,0,131,2,160,2,124,1,161, ++ 1,83,0,41,2,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,78,41,3,218,5, ++ 115,117,112,101,114,114,12,1,0,0,114,249,0,0,0,114, ++ 248,0,0,0,169,1,114,15,1,0,0,114,8,0,0,0, ++ 114,9,0,0,0,114,249,0,0,0,33,4,0,0,115,2, ++ 0,0,0,16,10,122,22,70,105,108,101,76,111,97,100,101, ++ 114,46,108,111,97,100,95,109,111,100,117,108,101,99,2,0, ++ 0,0,0,0,0,0,0,0,0,0,2,0,0,0,1,0, ++ 0,0,67,0,0,0,243,6,0,0,0,124,0,106,0,83, ++ 0,169,2,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,78, ++ 114,73,0,0,0,114,248,0,0,0,114,8,0,0,0,114, ++ 8,0,0,0,114,9,0,0,0,114,204,0,0,0,45,4, ++ 0,0,243,2,0,0,0,6,3,122,23,70,105,108,101,76, ++ 111,97,100,101,114,46,103,101,116,95,102,105,108,101,110,97, ++ 109,101,99,2,0,0,0,0,0,0,0,0,0,0,0,3, ++ 0,0,0,8,0,0,0,67,0,0,0,115,128,0,0,0, ++ 116,0,124,0,116,1,116,2,102,2,131,2,114,36,116,3, ++ 160,4,116,5,124,1,131,1,161,1,143,12,125,2,124,2, ++ 160,6,161,0,87,0,2,0,100,1,4,0,4,0,131,3, ++ 1,0,83,0,49,0,115,29,119,1,1,0,1,0,1,0, ++ 89,0,1,0,100,1,83,0,116,3,160,7,124,1,100,2, ++ 161,2,143,12,125,2,124,2,160,6,161,0,87,0,2,0, ++ 100,1,4,0,4,0,131,3,1,0,83,0,49,0,115,57, ++ 119,1,1,0,1,0,1,0,89,0,1,0,100,1,83,0, ++ 41,3,122,39,82,101,116,117,114,110,32,116,104,101,32,100, ++ 97,116,97,32,102,114,111,109,32,112,97,116,104,32,97,115, ++ 32,114,97,119,32,98,121,116,101,115,46,78,218,1,114,41, ++ 8,114,186,0,0,0,114,250,0,0,0,218,19,69,120,116, ++ 101,110,115,105,111,110,70,105,108,101,76,111,97,100,101,114, ++ 114,93,0,0,0,90,9,111,112,101,110,95,99,111,100,101, ++ 114,111,0,0,0,90,4,114,101,97,100,114,94,0,0,0, ++ 41,3,114,144,0,0,0,114,67,0,0,0,114,96,0,0, ++ 0,114,8,0,0,0,114,8,0,0,0,114,9,0,0,0, ++ 114,0,1,0,0,50,4,0,0,115,14,0,0,0,14,2, ++ 16,1,6,1,36,255,14,3,6,1,36,255,122,19,70,105, ++ 108,101,76,111,97,100,101,114,46,103,101,116,95,100,97,116, ++ 97,99,2,0,0,0,0,0,0,0,0,0,0,0,3,0, ++ 0,0,2,0,0,0,67,0,0,0,115,20,0,0,0,100, ++ 1,100,2,108,0,109,1,125,2,1,0,124,2,124,0,131, ++ 1,83,0,41,3,78,114,0,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,32, ++ 1,0,0,41,3,114,144,0,0,0,114,245,0,0,0,114, ++ 32,1,0,0,114,8,0,0,0,114,8,0,0,0,114,9, ++ 0,0,0,218,19,103,101,116,95,114,101,115,111,117,114,99, ++ 101,95,114,101,97,100,101,114,59,4,0,0,115,4,0,0, ++ 0,12,2,8,1,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,41,13,114,151,0,0,0,114,150,0,0, ++ 0,114,152,0,0,0,114,153,0,0,0,114,237,0,0,0, ++ 114,17,1,0,0,114,23,1,0,0,114,161,0,0,0,114, ++ 249,0,0,0,114,204,0,0,0,114,0,1,0,0,114,34, ++ 1,0,0,90,13,95,95,99,108,97,115,115,99,101,108,108, ++ 95,95,114,8,0,0,0,114,8,0,0,0,114,26,1,0, ++ 0,114,9,0,0,0,114,12,1,0,0,15,4,0,0,115, ++ 24,0,0,0,8,0,4,2,8,3,8,6,8,4,2,3, ++ 14,1,2,11,10,1,8,4,2,9,18,1,114,12,1,0, + 0,99,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +- 0,0,2,0,0,0,64,0,0,0,115,32,0,0,0,101, ++ 0,0,3,0,0,0,64,0,0,0,115,46,0,0,0,101, + 0,90,1,100,0,90,2,100,1,90,3,100,2,100,3,132, +- 0,90,4,100,4,100,5,132,0,90,5,100,6,83,0,41, +- 7,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,5,0,0,0,67,0,0,0,115, +- 68,0,0,0,124,0,160,0,124,1,161,1,125,2,124,0, +- 160,1,124,2,161,1,125,3,124,1,124,2,100,1,156,2, +- 125,4,116,2,124,3,124,1,124,4,131,3,1,0,116,3, +- 116,4,124,3,131,1,100,2,100,0,133,2,25,0,124,1, +- 124,2,100,3,141,3,83,0,41,4,78,114,183,0,0,0, +- 114,169,0,0,0,41,2,114,141,0,0,0,114,132,0,0, +- 0,41,5,114,203,0,0,0,114,255,0,0,0,114,176,0, +- 0,0,114,189,0,0,0,114,7,1,0,0,41,5,114,143, +- 0,0,0,114,163,0,0,0,114,65,0,0,0,114,41,0, +- 0,0,114,175,0,0,0,114,7,0,0,0,114,7,0,0, +- 0,114,8,0,0,0,114,241,0,0,0,110,4,0,0,115, +- 22,0,0,0,10,1,10,1,2,4,2,1,6,254,12,4, +- 2,1,14,1,2,1,2,1,6,253,122,29,83,111,117,114, +- 99,101,108,101,115,115,70,105,108,101,76,111,97,100,101,114, +- 46,103,101,116,95,99,111,100,101,99,2,0,0,0,0,0, +- 0,0,0,0,0,0,2,0,0,0,1,0,0,0,67,0, +- 0,0,114,23,0,0,0,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,7,0,0,0,114,247,0,0,0,114,7,0, +- 0,0,114,7,0,0,0,114,8,0,0,0,114,1,1,0, +- 0,126,4,0,0,114,24,0,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,78,41,6,114,150, +- 0,0,0,114,149,0,0,0,114,151,0,0,0,114,152,0, +- 0,0,114,241,0,0,0,114,1,1,0,0,114,7,0,0, +- 0,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, +- 114,41,1,0,0,106,4,0,0,115,8,0,0,0,8,0, +- 4,2,8,2,12,16,114,41,1,0,0,99,0,0,0,0, +- 0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0, +- 64,0,0,0,115,92,0,0,0,101,0,90,1,100,0,90, +- 2,100,1,90,3,100,2,100,3,132,0,90,4,100,4,100, +- 5,132,0,90,5,100,6,100,7,132,0,90,6,100,8,100, +- 9,132,0,90,7,100,10,100,11,132,0,90,8,100,12,100, +- 13,132,0,90,9,100,14,100,15,132,0,90,10,100,16,100, +- 17,132,0,90,11,101,12,100,18,100,19,132,0,131,1,90, +- 13,100,20,83,0,41,21,114,30,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,3,0,0,0,2,0,0,0, +- 67,0,0,0,115,16,0,0,0,124,1,124,0,95,0,124, +- 2,124,0,95,1,100,0,83,0,114,69,0,0,0,114,183, +- 0,0,0,41,3,114,143,0,0,0,114,141,0,0,0,114, +- 65,0,0,0,114,7,0,0,0,114,7,0,0,0,114,8, +- 0,0,0,114,236,0,0,0,139,4,0,0,115,4,0,0, +- 0,6,1,10,1,122,28,69,120,116,101,110,115,105,111,110, +- 70,105,108,101,76,111,97,100,101,114,46,95,95,105,110,105, +- 116,95,95,99,2,0,0,0,0,0,0,0,0,0,0,0, +- 2,0,0,0,2,0,0,0,67,0,0,0,114,12,1,0, +- 0,114,69,0,0,0,114,13,1,0,0,114,15,1,0,0, +- 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,114, +- 16,1,0,0,143,4,0,0,114,17,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,99,1,0,0,0,0,0, +- 0,0,0,0,0,0,1,0,0,0,3,0,0,0,67,0, +- 0,0,114,18,1,0,0,114,69,0,0,0,114,19,1,0, +- 0,114,21,1,0,0,114,7,0,0,0,114,7,0,0,0, +- 114,8,0,0,0,114,22,1,0,0,147,4,0,0,114,23, +- 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,99,2,0,0,0,0,0,0,0,0,0,0,0,3,0, +- 0,0,5,0,0,0,67,0,0,0,115,36,0,0,0,116, +- 0,160,1,116,2,106,3,124,1,161,2,125,2,116,0,160, +- 4,100,1,124,1,106,5,124,0,106,6,161,3,1,0,124, +- 2,83,0,41,3,122,38,67,114,101,97,116,101,32,97,110, +- 32,117,110,105,116,105,97,108,105,122,101,100,32,101,120,116, +- 101,110,115,105,111,110,32,109,111,100,117,108,101,122,38,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,78,41,7,114,159,0,0,0,114,242,0, +- 0,0,114,187,0,0,0,90,14,99,114,101,97,116,101,95, +- 100,121,110,97,109,105,99,114,173,0,0,0,114,141,0,0, +- 0,114,65,0,0,0,41,3,114,143,0,0,0,114,210,0, +- 0,0,114,244,0,0,0,114,7,0,0,0,114,7,0,0, +- 0,114,8,0,0,0,114,239,0,0,0,150,4,0,0,115, +- 14,0,0,0,4,2,6,1,4,255,6,2,8,1,4,255, +- 4,2,122,33,69,120,116,101,110,115,105,111,110,70,105,108, +- 101,76,111,97,100,101,114,46,99,114,101,97,116,101,95,109, +- 111,100,117,108,101,99,2,0,0,0,0,0,0,0,0,0, +- 0,0,2,0,0,0,5,0,0,0,67,0,0,0,115,36, +- 0,0,0,116,0,160,1,116,2,106,3,124,1,161,2,1, +- 0,116,0,160,4,100,1,124,0,106,5,124,0,106,6,161, +- 3,1,0,100,2,83,0,41,3,122,30,73,110,105,116,105, +- 97,108,105,122,101,32,97,110,32,101,120,116,101,110,115,105, +- 111,110,32,109,111,100,117,108,101,122,40,101,120,116,101,110, +- 115,105,111,110,32,109,111,100,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,159,0,0,0,114,242,0,0,0, +- 114,187,0,0,0,90,12,101,120,101,99,95,100,121,110,97, +- 109,105,99,114,173,0,0,0,114,141,0,0,0,114,65,0, +- 0,0,169,2,114,143,0,0,0,114,244,0,0,0,114,7, +- 0,0,0,114,7,0,0,0,114,8,0,0,0,114,245,0, +- 0,0,158,4,0,0,115,8,0,0,0,14,2,6,1,8, +- 1,8,255,122,31,69,120,116,101,110,115,105,111,110,70,105, +- 108,101,76,111,97,100,101,114,46,101,120,101,99,95,109,111, +- 100,117,108,101,99,2,0,0,0,0,0,0,0,0,0,0, +- 0,2,0,0,0,4,0,0,0,3,0,0,0,115,36,0, +- 0,0,116,0,124,0,106,1,131,1,100,1,25,0,137,0, +- 116,2,135,0,102,1,100,2,100,3,132,8,116,3,68,0, +- 131,1,131,1,83,0,41,5,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,3,0,0,0, +- 99,1,0,0,0,0,0,0,0,0,0,0,0,2,0,0, +- 0,4,0,0,0,51,0,0,0,115,28,0,0,0,129,0, +- 124,0,93,9,125,1,136,0,100,0,124,1,23,0,107,2, +- 86,0,1,0,113,2,100,1,83,0,41,2,114,236,0,0, +- 0,78,114,7,0,0,0,169,2,114,5,0,0,0,218,6, +- 115,117,102,102,105,120,169,1,90,9,102,105,108,101,95,110, +- 97,109,101,114,7,0,0,0,114,8,0,0,0,114,9,0, +- 0,0,167,4,0,0,115,8,0,0,0,2,128,4,0,2, +- 1,20,255,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,78,41,4,114,74,0,0,0,114,65, +- 0,0,0,218,3,97,110,121,114,232,0,0,0,114,247,0, +- 0,0,114,7,0,0,0,114,45,1,0,0,114,8,0,0, +- 0,114,206,0,0,0,164,4,0,0,115,8,0,0,0,14, +- 2,12,1,2,1,8,255,122,30,69,120,116,101,110,115,105, +- 111,110,70,105,108,101,76,111,97,100,101,114,46,105,115,95, +- 112,97,99,107,97,103,101,99,2,0,0,0,0,0,0,0, +- 0,0,0,0,2,0,0,0,1,0,0,0,67,0,0,0, +- 114,23,0,0,0,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,7,0,0,0,114,247, +- 0,0,0,114,7,0,0,0,114,7,0,0,0,114,8,0, +- 0,0,114,241,0,0,0,170,4,0,0,114,24,0,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,99,2, +- 0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,1, +- 0,0,0,67,0,0,0,114,23,0,0,0,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,7,0,0,0,114,247,0,0,0, +- 114,7,0,0,0,114,7,0,0,0,114,8,0,0,0,114, +- 1,1,0,0,174,4,0,0,114,24,0,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,99,2,0, +- 0,0,0,0,0,0,0,0,0,0,2,0,0,0,1,0, +- 0,0,67,0,0,0,114,26,1,0,0,114,27,1,0,0, +- 114,71,0,0,0,114,247,0,0,0,114,7,0,0,0,114, +- 7,0,0,0,114,8,0,0,0,114,203,0,0,0,178,4, +- 0,0,114,28,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,78,41,14,114,150,0,0, +- 0,114,149,0,0,0,114,151,0,0,0,114,152,0,0,0, +- 114,236,0,0,0,114,16,1,0,0,114,22,1,0,0,114, +- 239,0,0,0,114,245,0,0,0,114,206,0,0,0,114,241, +- 0,0,0,114,1,1,0,0,114,160,0,0,0,114,203,0, +- 0,0,114,7,0,0,0,114,7,0,0,0,114,7,0,0, +- 0,114,8,0,0,0,114,30,1,0,0,131,4,0,0,115, +- 24,0,0,0,8,0,4,2,8,6,8,4,8,4,8,3, +- 8,8,8,6,8,6,8,4,2,4,14,1,114,30,1,0, ++ 0,90,4,100,4,100,5,132,0,90,5,100,6,100,7,156, ++ 1,100,8,100,9,132,2,90,6,100,10,83,0,41,11,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,67,0,0,0,115,22,0,0,0,116, ++ 0,124,1,131,1,125,2,124,2,106,1,124,2,106,2,100, ++ 1,156,2,83,0,41,3,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,194,0,0, ++ 0,114,7,1,0,0,78,41,3,114,77,0,0,0,218,8, ++ 115,116,95,109,116,105,109,101,90,7,115,116,95,115,105,122, ++ 101,41,3,114,144,0,0,0,114,67,0,0,0,114,11,1, ++ 0,0,114,8,0,0,0,114,8,0,0,0,114,9,0,0, ++ 0,114,253,0,0,0,69,4,0,0,115,4,0,0,0,8, ++ 2,14,1,122,27,83,111,117,114,99,101,70,105,108,101,76, ++ 111,97,100,101,114,46,112,97,116,104,95,115,116,97,116,115, ++ 99,4,0,0,0,0,0,0,0,0,0,0,0,5,0,0, ++ 0,5,0,0,0,67,0,0,0,115,24,0,0,0,116,0, ++ 124,1,131,1,125,4,124,0,106,1,124,2,124,3,124,4, ++ 100,1,141,3,83,0,41,2,78,169,1,218,5,95,109,111, ++ 100,101,41,2,114,140,0,0,0,114,254,0,0,0,41,5, ++ 114,144,0,0,0,114,135,0,0,0,114,133,0,0,0,114, ++ 43,0,0,0,114,80,0,0,0,114,8,0,0,0,114,8, ++ 0,0,0,114,9,0,0,0,114,255,0,0,0,74,4,0, ++ 0,115,4,0,0,0,8,2,16,1,122,32,83,111,117,114, ++ 99,101,70,105,108,101,76,111,97,100,101,114,46,95,99,97, ++ 99,104,101,95,98,121,116,101,99,111,100,101,114,89,0,0, ++ 0,114,37,1,0,0,99,3,0,0,0,0,0,0,0,1, ++ 0,0,0,9,0,0,0,11,0,0,0,67,0,0,0,115, ++ 254,0,0,0,116,0,124,1,131,1,92,2,125,4,125,5, ++ 103,0,125,6,124,4,114,31,116,1,124,4,131,1,115,31, ++ 116,0,124,4,131,1,92,2,125,4,125,7,124,6,160,2, ++ 124,7,161,1,1,0,124,4,114,31,116,1,124,4,131,1, ++ 114,14,116,3,124,6,131,1,68,0,93,49,125,7,116,4, ++ 124,4,124,7,131,2,125,4,122,7,116,5,160,6,124,4, ++ 161,1,1,0,87,0,113,35,4,0,116,7,121,58,1,0, ++ 1,0,1,0,89,0,113,35,4,0,116,8,121,84,1,0, ++ 125,8,1,0,122,15,116,9,160,10,100,1,124,4,124,8, ++ 161,3,1,0,87,0,89,0,100,2,125,8,126,8,1,0, ++ 100,2,83,0,100,2,125,8,126,8,119,1,119,0,122,15, ++ 116,11,124,1,124,2,124,3,131,3,1,0,116,9,160,10, ++ 100,3,124,1,161,2,1,0,87,0,100,2,83,0,4,0, ++ 116,8,121,126,1,0,125,8,1,0,122,14,116,9,160,10, ++ 100,1,124,1,124,8,161,3,1,0,87,0,89,0,100,2, ++ 125,8,126,8,100,2,83,0,100,2,125,8,126,8,119,1, ++ 119,0,41,4,122,27,87,114,105,116,101,32,98,121,116,101, ++ 115,32,100,97,116,97,32,116,111,32,97,32,102,105,108,101, ++ 46,122,27,99,111,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, ++ 76,0,0,0,114,85,0,0,0,114,63,0,0,0,218,8, ++ 114,101,118,101,114,115,101,100,114,69,0,0,0,114,19,0, ++ 0,0,90,5,109,107,100,105,114,218,15,70,105,108,101,69, ++ 120,105,115,116,115,69,114,114,111,114,114,78,0,0,0,114, ++ 160,0,0,0,114,174,0,0,0,114,97,0,0,0,41,9, ++ 114,144,0,0,0,114,67,0,0,0,114,43,0,0,0,114, ++ 38,1,0,0,218,6,112,97,114,101,110,116,114,122,0,0, ++ 0,114,65,0,0,0,114,70,0,0,0,114,1,1,0,0, ++ 114,8,0,0,0,114,8,0,0,0,114,9,0,0,0,114, ++ 254,0,0,0,79,4,0,0,115,56,0,0,0,12,2,4, ++ 1,12,2,12,1,10,1,12,254,12,4,10,1,2,1,14, ++ 1,12,1,4,2,14,1,6,3,4,1,4,255,16,2,8, ++ 128,2,251,2,6,12,1,18,1,14,1,8,2,2,1,18, ++ 255,8,128,2,254,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, ++ 78,41,7,114,151,0,0,0,114,150,0,0,0,114,152,0, ++ 0,0,114,153,0,0,0,114,253,0,0,0,114,255,0,0, ++ 0,114,254,0,0,0,114,8,0,0,0,114,8,0,0,0, ++ 114,8,0,0,0,114,9,0,0,0,114,35,1,0,0,65, ++ 4,0,0,115,10,0,0,0,8,0,4,2,8,2,8,5, ++ 18,5,114,35,1,0,0,99,0,0,0,0,0,0,0,0, ++ 0,0,0,0,0,0,0,0,2,0,0,0,64,0,0,0, ++ 115,32,0,0,0,101,0,90,1,100,0,90,2,100,1,90, ++ 3,100,2,100,3,132,0,90,4,100,4,100,5,132,0,90, ++ 5,100,6,83,0,41,7,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,5,0,0, ++ 0,67,0,0,0,115,68,0,0,0,124,0,160,0,124,1, ++ 161,1,125,2,124,0,160,1,124,2,161,1,125,3,124,1, ++ 124,2,100,1,156,2,125,4,116,2,124,3,124,1,124,4, ++ 131,3,1,0,116,3,116,4,124,3,131,1,100,2,100,0, ++ 133,2,25,0,124,1,124,2,100,3,141,3,83,0,41,4, ++ 78,114,184,0,0,0,114,170,0,0,0,41,2,114,142,0, ++ 0,0,114,133,0,0,0,41,5,114,204,0,0,0,114,0, ++ 1,0,0,114,177,0,0,0,114,190,0,0,0,114,8,1, ++ 0,0,41,5,114,144,0,0,0,114,164,0,0,0,114,67, ++ 0,0,0,114,43,0,0,0,114,176,0,0,0,114,8,0, ++ 0,0,114,8,0,0,0,114,9,0,0,0,114,242,0,0, ++ 0,114,4,0,0,115,22,0,0,0,10,1,10,1,2,4, ++ 2,1,6,254,12,4,2,1,14,1,2,1,2,1,6,253, ++ 122,29,83,111,117,114,99,101,108,101,115,115,70,105,108,101, ++ 76,111,97,100,101,114,46,103,101,116,95,99,111,100,101,99, ++ 2,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, ++ 1,0,0,0,67,0,0,0,114,25,0,0,0,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,8,0,0,0,114,248, ++ 0,0,0,114,8,0,0,0,114,8,0,0,0,114,9,0, ++ 0,0,114,2,1,0,0,130,4,0,0,114,26,0,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,78,41,6,114,151,0,0,0,114,150,0,0,0,114,152, ++ 0,0,0,114,153,0,0,0,114,242,0,0,0,114,2,1, ++ 0,0,114,8,0,0,0,114,8,0,0,0,114,8,0,0, ++ 0,114,9,0,0,0,114,42,1,0,0,110,4,0,0,115, ++ 8,0,0,0,8,0,4,2,8,2,12,16,114,42,1,0, + 0,99,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +- 0,0,2,0,0,0,64,0,0,0,115,104,0,0,0,101, ++ 0,0,3,0,0,0,64,0,0,0,115,92,0,0,0,101, + 0,90,1,100,0,90,2,100,1,90,3,100,2,100,3,132, + 0,90,4,100,4,100,5,132,0,90,5,100,6,100,7,132, + 0,90,6,100,8,100,9,132,0,90,7,100,10,100,11,132, + 0,90,8,100,12,100,13,132,0,90,9,100,14,100,15,132, +- 0,90,10,100,16,100,17,132,0,90,11,100,18,100,19,132, +- 0,90,12,100,20,100,21,132,0,90,13,100,22,100,23,132, +- 0,90,14,100,24,83,0,41,25,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,99,4,0,0,0,0,0,0,0,0,0,0, +- 0,4,0,0,0,3,0,0,0,67,0,0,0,115,36,0, +- 0,0,124,1,124,0,95,0,124,2,124,0,95,1,116,2, +- 124,0,160,3,161,0,131,1,124,0,95,4,124,3,124,0, +- 95,5,100,0,83,0,114,69,0,0,0,41,6,218,5,95, +- 110,97,109,101,218,5,95,112,97,116,104,114,136,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,12,95,112,97,116,104,95,102,105,110, +- 100,101,114,169,4,114,143,0,0,0,114,141,0,0,0,114, +- 65,0,0,0,90,11,112,97,116,104,95,102,105,110,100,101, +- 114,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, +- 114,236,0,0,0,191,4,0,0,115,8,0,0,0,6,1, +- 6,1,14,1,10,1,122,23,95,78,97,109,101,115,112,97, +- 99,101,80,97,116,104,46,95,95,105,110,105,116,95,95,99, +- 1,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0, +- 3,0,0,0,67,0,0,0,115,38,0,0,0,124,0,106, +- 0,160,1,100,1,161,1,92,3,125,1,125,2,125,3,124, +- 2,100,2,107,2,114,15,100,3,83,0,124,1,100,4,102, +- 2,83,0,41,6,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,97,0,0,0,114,10,0,0,0,41, +- 2,114,15,0,0,0,114,65,0,0,0,90,8,95,95,112, +- 97,116,104,95,95,78,41,2,114,48,1,0,0,114,104,0, +- 0,0,41,4,114,143,0,0,0,114,40,1,0,0,218,3, +- 100,111,116,90,2,109,101,114,7,0,0,0,114,7,0,0, +- 0,114,8,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,197, +- 4,0,0,115,8,0,0,0,18,2,8,1,4,2,8,3, +- 122,38,95,78,97,109,101,115,112,97,99,101,80,97,116,104, +- 46,95,102,105,110,100,95,112,97,114,101,110,116,95,112,97, +- 116,104,95,110,97,109,101,115,99,1,0,0,0,0,0,0, +- 0,0,0,0,0,3,0,0,0,3,0,0,0,67,0,0, +- 0,115,28,0,0,0,124,0,160,0,161,0,92,2,125,1, +- 125,2,116,1,116,2,106,3,124,1,25,0,124,2,131,2, +- 83,0,114,69,0,0,0,41,4,114,55,1,0,0,114,155, +- 0,0,0,114,15,0,0,0,218,7,109,111,100,117,108,101, +- 115,41,3,114,143,0,0,0,90,18,112,97,114,101,110,116, +- 95,109,111,100,117,108,101,95,110,97,109,101,90,14,112,97, +- 116,104,95,97,116,116,114,95,110,97,109,101,114,7,0,0, +- 0,114,7,0,0,0,114,8,0,0,0,114,50,1,0,0, +- 207,4,0,0,115,4,0,0,0,12,1,16,1,122,31,95, +- 78,97,109,101,115,112,97,99,101,80,97,116,104,46,95,103, +- 101,116,95,112,97,114,101,110,116,95,112,97,116,104,99,1, +- 0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,4, +- 0,0,0,67,0,0,0,115,80,0,0,0,116,0,124,0, +- 160,1,161,0,131,1,125,1,124,1,124,0,106,2,107,3, +- 114,37,124,0,160,3,124,0,106,4,124,1,161,2,125,2, +- 124,2,100,0,117,1,114,34,124,2,106,5,100,0,117,0, +- 114,34,124,2,106,6,114,34,124,2,106,6,124,0,95,7, +- 124,1,124,0,95,2,124,0,106,7,83,0,114,69,0,0, +- 0,41,8,114,136,0,0,0,114,50,1,0,0,114,51,1, +- 0,0,114,52,1,0,0,114,48,1,0,0,114,164,0,0, +- 0,114,202,0,0,0,114,49,1,0,0,41,3,114,143,0, +- 0,0,90,11,112,97,114,101,110,116,95,112,97,116,104,114, +- 210,0,0,0,114,7,0,0,0,114,7,0,0,0,114,8, +- 0,0,0,218,12,95,114,101,99,97,108,99,117,108,97,116, +- 101,211,4,0,0,115,16,0,0,0,12,2,10,1,14,1, +- 18,3,6,1,8,1,6,1,6,1,122,27,95,78,97,109, +- 101,115,112,97,99,101,80,97,116,104,46,95,114,101,99,97, +- 108,99,117,108,97,116,101,99,1,0,0,0,0,0,0,0, +- 0,0,0,0,1,0,0,0,3,0,0,0,67,0,0,0, +- 243,12,0,0,0,116,0,124,0,160,1,161,0,131,1,83, +- 0,114,69,0,0,0,41,2,218,4,105,116,101,114,114,57, +- 1,0,0,114,21,1,0,0,114,7,0,0,0,114,7,0, +- 0,0,114,8,0,0,0,218,8,95,95,105,116,101,114,95, +- 95,224,4,0,0,243,2,0,0,0,12,1,122,23,95,78, ++ 0,90,10,100,16,100,17,132,0,90,11,101,12,100,18,100, ++ 19,132,0,131,1,90,13,100,20,83,0,41,21,114,31,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,3,0, ++ 0,0,2,0,0,0,67,0,0,0,115,16,0,0,0,124, ++ 1,124,0,95,0,124,2,124,0,95,1,100,0,83,0,114, ++ 71,0,0,0,114,184,0,0,0,41,3,114,144,0,0,0, ++ 114,142,0,0,0,114,67,0,0,0,114,8,0,0,0,114, ++ 8,0,0,0,114,9,0,0,0,114,237,0,0,0,143,4, ++ 0,0,115,4,0,0,0,6,1,10,1,122,28,69,120,116, ++ 101,110,115,105,111,110,70,105,108,101,76,111,97,100,101,114, ++ 46,95,95,105,110,105,116,95,95,99,2,0,0,0,0,0, ++ 0,0,0,0,0,0,2,0,0,0,2,0,0,0,67,0, ++ 0,0,114,13,1,0,0,114,71,0,0,0,114,14,1,0, ++ 0,114,16,1,0,0,114,8,0,0,0,114,8,0,0,0, ++ 114,9,0,0,0,114,17,1,0,0,147,4,0,0,114,18, ++ 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,99, ++ 1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0, ++ 3,0,0,0,67,0,0,0,114,19,1,0,0,114,71,0, ++ 0,0,114,20,1,0,0,114,22,1,0,0,114,8,0,0, ++ 0,114,8,0,0,0,114,9,0,0,0,114,23,1,0,0, ++ 151,4,0,0,114,24,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,99,2,0,0,0,0,0,0,0, ++ 0,0,0,0,3,0,0,0,5,0,0,0,67,0,0,0, ++ 115,36,0,0,0,116,0,160,1,116,2,106,3,124,1,161, ++ 2,125,2,116,0,160,4,100,1,124,1,106,5,124,0,106, ++ 6,161,3,1,0,124,2,83,0,41,3,122,38,67,114,101, ++ 97,116,101,32,97,110,32,117,110,105,116,105,97,108,105,122, ++ 101,100,32,101,120,116,101,110,115,105,111,110,32,109,111,100, ++ 117,108,101,122,38,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,78,41,7,114,160, ++ 0,0,0,114,243,0,0,0,114,188,0,0,0,90,14,99, ++ 114,101,97,116,101,95,100,121,110,97,109,105,99,114,174,0, ++ 0,0,114,142,0,0,0,114,67,0,0,0,41,3,114,144, ++ 0,0,0,114,211,0,0,0,114,245,0,0,0,114,8,0, ++ 0,0,114,8,0,0,0,114,9,0,0,0,114,240,0,0, ++ 0,154,4,0,0,115,14,0,0,0,4,2,6,1,4,255, ++ 6,2,8,1,4,255,4,2,122,33,69,120,116,101,110,115, ++ 105,111,110,70,105,108,101,76,111,97,100,101,114,46,99,114, ++ 101,97,116,101,95,109,111,100,117,108,101,99,2,0,0,0, ++ 0,0,0,0,0,0,0,0,2,0,0,0,5,0,0,0, ++ 67,0,0,0,115,36,0,0,0,116,0,160,1,116,2,106, ++ 3,124,1,161,2,1,0,116,0,160,4,100,1,124,0,106, ++ 5,124,0,106,6,161,3,1,0,100,2,83,0,41,3,122, ++ 30,73,110,105,116,105,97,108,105,122,101,32,97,110,32,101, ++ 120,116,101,110,115,105,111,110,32,109,111,100,117,108,101,122, ++ 40,101,120,116,101,110,115,105,111,110,32,109,111,100,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,160,0,0, ++ 0,114,243,0,0,0,114,188,0,0,0,90,12,101,120,101, ++ 99,95,100,121,110,97,109,105,99,114,174,0,0,0,114,142, ++ 0,0,0,114,67,0,0,0,169,2,114,144,0,0,0,114, ++ 245,0,0,0,114,8,0,0,0,114,8,0,0,0,114,9, ++ 0,0,0,114,246,0,0,0,162,4,0,0,115,8,0,0, ++ 0,14,2,6,1,8,1,8,255,122,31,69,120,116,101,110, ++ 115,105,111,110,70,105,108,101,76,111,97,100,101,114,46,101, ++ 120,101,99,95,109,111,100,117,108,101,99,2,0,0,0,0, ++ 0,0,0,0,0,0,0,2,0,0,0,4,0,0,0,3, ++ 0,0,0,115,36,0,0,0,116,0,124,0,106,1,131,1, ++ 100,1,25,0,137,0,116,2,135,0,102,1,100,2,100,3, ++ 132,8,116,3,68,0,131,1,131,1,83,0,41,5,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,4,0,0,0,99,1,0,0,0,0,0,0,0,0, ++ 0,0,0,2,0,0,0,4,0,0,0,51,0,0,0,115, ++ 28,0,0,0,129,0,124,0,93,9,125,1,136,0,100,0, ++ 124,1,23,0,107,2,86,0,1,0,113,2,100,1,83,0, ++ 41,2,114,237,0,0,0,78,114,8,0,0,0,169,2,114, ++ 6,0,0,0,218,6,115,117,102,102,105,120,169,1,90,9, ++ 102,105,108,101,95,110,97,109,101,114,8,0,0,0,114,9, ++ 0,0,0,114,10,0,0,0,171,4,0,0,115,8,0,0, ++ 0,2,128,4,0,2,1,20,255,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,78,41,4,114, ++ 76,0,0,0,114,67,0,0,0,218,3,97,110,121,114,233, ++ 0,0,0,114,248,0,0,0,114,8,0,0,0,114,46,1, ++ 0,0,114,9,0,0,0,114,207,0,0,0,168,4,0,0, ++ 115,8,0,0,0,14,2,12,1,2,1,8,255,122,30,69, ++ 120,116,101,110,115,105,111,110,70,105,108,101,76,111,97,100, ++ 101,114,46,105,115,95,112,97,99,107,97,103,101,99,2,0, ++ 0,0,0,0,0,0,0,0,0,0,2,0,0,0,1,0, ++ 0,0,67,0,0,0,114,25,0,0,0,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, ++ 8,0,0,0,114,248,0,0,0,114,8,0,0,0,114,8, ++ 0,0,0,114,9,0,0,0,114,242,0,0,0,174,4,0, ++ 0,114,26,0,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,99,2,0,0,0,0,0,0,0,0,0,0, ++ 0,2,0,0,0,1,0,0,0,67,0,0,0,114,25,0, ++ 0,0,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,8,0,0, ++ 0,114,248,0,0,0,114,8,0,0,0,114,8,0,0,0, ++ 114,9,0,0,0,114,2,1,0,0,178,4,0,0,114,26, ++ 0,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,99,2,0,0,0,0,0,0,0,0,0,0,0, ++ 2,0,0,0,1,0,0,0,67,0,0,0,114,27,1,0, ++ 0,114,28,1,0,0,114,73,0,0,0,114,248,0,0,0, ++ 114,8,0,0,0,114,8,0,0,0,114,9,0,0,0,114, ++ 204,0,0,0,182,4,0,0,114,29,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,78, ++ 41,14,114,151,0,0,0,114,150,0,0,0,114,152,0,0, ++ 0,114,153,0,0,0,114,237,0,0,0,114,17,1,0,0, ++ 114,23,1,0,0,114,240,0,0,0,114,246,0,0,0,114, ++ 207,0,0,0,114,242,0,0,0,114,2,1,0,0,114,161, ++ 0,0,0,114,204,0,0,0,114,8,0,0,0,114,8,0, ++ 0,0,114,8,0,0,0,114,9,0,0,0,114,31,1,0, ++ 0,135,4,0,0,115,24,0,0,0,8,0,4,2,8,6, ++ 8,4,8,4,8,3,8,8,8,6,8,6,8,4,2,4, ++ 14,1,114,31,1,0,0,99,0,0,0,0,0,0,0,0, ++ 0,0,0,0,0,0,0,0,2,0,0,0,64,0,0,0, ++ 115,104,0,0,0,101,0,90,1,100,0,90,2,100,1,90, ++ 3,100,2,100,3,132,0,90,4,100,4,100,5,132,0,90, ++ 5,100,6,100,7,132,0,90,6,100,8,100,9,132,0,90, ++ 7,100,10,100,11,132,0,90,8,100,12,100,13,132,0,90, ++ 9,100,14,100,15,132,0,90,10,100,16,100,17,132,0,90, ++ 11,100,18,100,19,132,0,90,12,100,20,100,21,132,0,90, ++ 13,100,22,100,23,132,0,90,14,100,24,83,0,41,25,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,99,4,0,0,0,0, ++ 0,0,0,0,0,0,0,4,0,0,0,3,0,0,0,67, ++ 0,0,0,115,36,0,0,0,124,1,124,0,95,0,124,2, ++ 124,0,95,1,116,2,124,0,160,3,161,0,131,1,124,0, ++ 95,4,124,3,124,0,95,5,100,0,83,0,114,71,0,0, ++ 0,41,6,218,5,95,110,97,109,101,218,5,95,112,97,116, ++ 104,114,137,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,12,95,112,97, ++ 116,104,95,102,105,110,100,101,114,169,4,114,144,0,0,0, ++ 114,142,0,0,0,114,67,0,0,0,90,11,112,97,116,104, ++ 95,102,105,110,100,101,114,114,8,0,0,0,114,8,0,0, ++ 0,114,9,0,0,0,114,237,0,0,0,195,4,0,0,115, ++ 8,0,0,0,6,1,6,1,14,1,10,1,122,23,95,78, + 97,109,101,115,112,97,99,101,80,97,116,104,46,95,95,105, +- 116,101,114,95,95,99,2,0,0,0,0,0,0,0,0,0, +- 0,0,2,0,0,0,2,0,0,0,67,0,0,0,115,12, +- 0,0,0,124,0,160,0,161,0,124,1,25,0,83,0,114, +- 69,0,0,0,169,1,114,57,1,0,0,41,2,114,143,0, +- 0,0,218,5,105,110,100,101,120,114,7,0,0,0,114,7, +- 0,0,0,114,8,0,0,0,218,11,95,95,103,101,116,105, +- 116,101,109,95,95,227,4,0,0,114,61,1,0,0,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,99,3,0,0,0,0, +- 0,0,0,0,0,0,0,3,0,0,0,3,0,0,0,67, +- 0,0,0,115,14,0,0,0,124,2,124,0,106,0,124,1, +- 60,0,100,0,83,0,114,69,0,0,0,41,1,114,49,1, +- 0,0,41,3,114,143,0,0,0,114,63,1,0,0,114,65, +- 0,0,0,114,7,0,0,0,114,7,0,0,0,114,8,0, +- 0,0,218,11,95,95,115,101,116,105,116,101,109,95,95,230, +- 4,0,0,115,2,0,0,0,14,1,122,26,95,78,97,109, +- 101,115,112,97,99,101,80,97,116,104,46,95,95,115,101,116, +- 105,116,101,109,95,95,99,1,0,0,0,0,0,0,0,0, +- 0,0,0,1,0,0,0,3,0,0,0,67,0,0,0,114, +- 58,1,0,0,114,69,0,0,0,41,2,114,4,0,0,0, +- 114,57,1,0,0,114,21,1,0,0,114,7,0,0,0,114, +- 7,0,0,0,114,8,0,0,0,218,7,95,95,108,101,110, +- 95,95,233,4,0,0,114,61,1,0,0,122,22,95,78,97, +- 109,101,115,112,97,99,101,80,97,116,104,46,95,95,108,101, +- 110,95,95,99,1,0,0,0,0,0,0,0,0,0,0,0, +- 1,0,0,0,3,0,0,0,67,0,0,0,243,12,0,0, +- 0,100,1,160,0,124,0,106,1,161,1,83,0,41,2,78, +- 122,20,95,78,97,109,101,115,112,97,99,101,80,97,116,104, +- 40,123,33,114,125,41,41,2,114,89,0,0,0,114,49,1, +- 0,0,114,21,1,0,0,114,7,0,0,0,114,7,0,0, +- 0,114,8,0,0,0,218,8,95,95,114,101,112,114,95,95, +- 236,4,0,0,114,61,1,0,0,122,23,95,78,97,109,101, +- 115,112,97,99,101,80,97,116,104,46,95,95,114,101,112,114, +- 95,95,99,2,0,0,0,0,0,0,0,0,0,0,0,2, +- 0,0,0,3,0,0,0,67,0,0,0,115,12,0,0,0, +- 124,1,124,0,160,0,161,0,118,0,83,0,114,69,0,0, +- 0,114,62,1,0,0,169,2,114,143,0,0,0,218,4,105, +- 116,101,109,114,7,0,0,0,114,7,0,0,0,114,8,0, +- 0,0,218,12,95,95,99,111,110,116,97,105,110,115,95,95, +- 239,4,0,0,114,61,1,0,0,122,27,95,78,97,109,101, +- 115,112,97,99,101,80,97,116,104,46,95,95,99,111,110,116, +- 97,105,110,115,95,95,99,2,0,0,0,0,0,0,0,0, +- 0,0,0,2,0,0,0,3,0,0,0,67,0,0,0,115, +- 16,0,0,0,124,0,106,0,160,1,124,1,161,1,1,0, +- 100,0,83,0,114,69,0,0,0,41,2,114,49,1,0,0, +- 114,61,0,0,0,114,69,1,0,0,114,7,0,0,0,114, +- 7,0,0,0,114,8,0,0,0,114,61,0,0,0,242,4, +- 0,0,243,2,0,0,0,16,1,122,21,95,78,97,109,101, +- 115,112,97,99,101,80,97,116,104,46,97,112,112,101,110,100, +- 78,41,15,114,150,0,0,0,114,149,0,0,0,114,151,0, +- 0,0,114,152,0,0,0,114,236,0,0,0,114,55,1,0, +- 0,114,50,1,0,0,114,57,1,0,0,114,60,1,0,0, +- 114,64,1,0,0,114,65,1,0,0,114,66,1,0,0,114, +- 68,1,0,0,114,71,1,0,0,114,61,0,0,0,114,7, +- 0,0,0,114,7,0,0,0,114,7,0,0,0,114,8,0, +- 0,0,114,47,1,0,0,184,4,0,0,115,26,0,0,0, +- 8,0,4,1,8,6,8,6,8,10,8,4,8,13,8,3, +- 8,3,8,3,8,3,8,3,12,3,114,47,1,0,0,99, +- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +- 3,0,0,0,64,0,0,0,115,88,0,0,0,101,0,90, +- 1,100,0,90,2,100,1,100,2,132,0,90,3,101,4,100, +- 3,100,4,132,0,131,1,90,5,100,5,100,6,132,0,90, +- 6,100,7,100,8,132,0,90,7,100,9,100,10,132,0,90, +- 8,100,11,100,12,132,0,90,9,100,13,100,14,132,0,90, +- 10,100,15,100,16,132,0,90,11,100,17,100,18,132,0,90, +- 12,100,19,83,0,41,20,218,16,95,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,4,0,0,0,4,0,0,0,67,0, +- 0,0,115,18,0,0,0,116,0,124,1,124,2,124,3,131, +- 3,124,0,95,1,100,0,83,0,114,69,0,0,0,41,2, +- 114,47,1,0,0,114,49,1,0,0,114,53,1,0,0,114, +- 7,0,0,0,114,7,0,0,0,114,8,0,0,0,114,236, +- 0,0,0,248,4,0,0,115,2,0,0,0,18,1,122,25, +- 95,78,97,109,101,115,112,97,99,101,76,111,97,100,101,114, +- 46,95,95,105,110,105,116,95,95,99,1,0,0,0,0,0, +- 0,0,0,0,0,0,1,0,0,0,4,0,0,0,67,0, +- 0,0,115,24,0,0,0,116,0,160,1,100,1,116,2,161, +- 2,1,0,100,2,160,3,124,0,106,4,161,1,83,0,41, +- 4,122,115,82,101,116,117,114,110,32,114,101,112,114,32,102, +- 111,114,32,116,104,101,32,109,111,100,117,108,101,46,10,10, +- 32,32,32,32,32,32,32,32,84,104,101,32,109,101,116,104, +- 111,100,32,105,115,32,100,101,112,114,101,99,97,116,101,100, +- 46,32,32,84,104,101,32,105,109,112,111,114,116,32,109,97, +- 99,104,105,110,101,114,121,32,100,111,101,115,32,116,104,101, +- 32,106,111,98,32,105,116,115,101,108,102,46,10,10,32,32, +- 32,32,32,32,32,32,122,82,95,78,97,109,101,115,112,97, +- 99,101,76,111,97,100,101,114,46,109,111,100,117,108,101,95, +- 114,101,112,114,40,41,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,122,25,60,109,111,100, +- 117,108,101,32,123,33,114,125,32,40,110,97,109,101,115,112, +- 97,99,101,41,62,78,41,5,114,99,0,0,0,114,100,0, +- 0,0,114,101,0,0,0,114,89,0,0,0,114,150,0,0, +- 0,41,1,114,244,0,0,0,114,7,0,0,0,114,7,0, +- 0,0,114,8,0,0,0,218,11,109,111,100,117,108,101,95, +- 114,101,112,114,251,4,0,0,115,8,0,0,0,6,7,2, +- 1,4,255,12,2,122,28,95,78,97,109,101,115,112,97,99, +- 101,76,111,97,100,101,114,46,109,111,100,117,108,101,95,114, +- 101,112,114,99,2,0,0,0,0,0,0,0,0,0,0,0, +- 2,0,0,0,1,0,0,0,67,0,0,0,114,23,0,0, +- 0,41,2,78,84,114,7,0,0,0,114,247,0,0,0,114, +- 7,0,0,0,114,7,0,0,0,114,8,0,0,0,114,206, +- 0,0,0,6,5,0,0,243,2,0,0,0,4,1,122,27, +- 95,78,97,109,101,115,112,97,99,101,76,111,97,100,101,114, +- 46,105,115,95,112,97,99,107,97,103,101,99,2,0,0,0, +- 0,0,0,0,0,0,0,0,2,0,0,0,1,0,0,0, +- 67,0,0,0,114,23,0,0,0,41,2,78,114,10,0,0, +- 0,114,7,0,0,0,114,247,0,0,0,114,7,0,0,0, +- 114,7,0,0,0,114,8,0,0,0,114,1,1,0,0,9, +- 5,0,0,114,75,1,0,0,122,27,95,78,97,109,101,115, +- 112,97,99,101,76,111,97,100,101,114,46,103,101,116,95,115, +- 111,117,114,99,101,99,2,0,0,0,0,0,0,0,0,0, +- 0,0,2,0,0,0,6,0,0,0,67,0,0,0,115,16, +- 0,0,0,116,0,100,1,100,2,100,3,100,4,100,5,141, +- 4,83,0,41,6,78,114,10,0,0,0,122,8,60,115,116, +- 114,105,110,103,62,114,243,0,0,0,84,41,1,114,3,1, +- 0,0,41,1,114,4,1,0,0,114,247,0,0,0,114,7, +- 0,0,0,114,7,0,0,0,114,8,0,0,0,114,241,0, +- 0,0,12,5,0,0,114,72,1,0,0,122,25,95,78,97, +- 109,101,115,112,97,99,101,76,111,97,100,101,114,46,103,101, +- 116,95,99,111,100,101,99,2,0,0,0,0,0,0,0,0, +- 0,0,0,2,0,0,0,1,0,0,0,67,0,0,0,114, +- 23,0,0,0,114,237,0,0,0,114,7,0,0,0,114,238, +- 0,0,0,114,7,0,0,0,114,7,0,0,0,114,8,0, +- 0,0,114,239,0,0,0,15,5,0,0,114,240,0,0,0, +- 122,30,95,78,97,109,101,115,112,97,99,101,76,111,97,100, +- 101,114,46,99,114,101,97,116,101,95,109,111,100,117,108,101, +- 99,2,0,0,0,0,0,0,0,0,0,0,0,2,0,0, +- 0,1,0,0,0,67,0,0,0,115,4,0,0,0,100,0, +- 83,0,114,69,0,0,0,114,7,0,0,0,114,42,1,0, +- 0,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, +- 114,245,0,0,0,18,5,0,0,114,75,1,0,0,122,28, ++ 110,105,116,95,95,99,1,0,0,0,0,0,0,0,0,0, ++ 0,0,4,0,0,0,3,0,0,0,67,0,0,0,115,38, ++ 0,0,0,124,0,106,0,160,1,100,1,161,1,92,3,125, ++ 1,125,2,125,3,124,2,100,2,107,2,114,15,100,3,83, ++ 0,124,1,100,4,102,2,83,0,41,6,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,99,0,0,0, ++ 114,11,0,0,0,41,2,114,16,0,0,0,114,67,0,0, ++ 0,90,8,95,95,112,97,116,104,95,95,78,41,2,114,49, ++ 1,0,0,114,106,0,0,0,41,4,114,144,0,0,0,114, ++ 41,1,0,0,218,3,100,111,116,90,2,109,101,114,8,0, ++ 0,0,114,8,0,0,0,114,9,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,201,4,0,0,115,8,0,0,0,18,2, ++ 8,1,4,2,8,3,122,38,95,78,97,109,101,115,112,97, ++ 99,101,80,97,116,104,46,95,102,105,110,100,95,112,97,114, ++ 101,110,116,95,112,97,116,104,95,110,97,109,101,115,99,1, ++ 0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,3, ++ 0,0,0,67,0,0,0,115,28,0,0,0,124,0,160,0, ++ 161,0,92,2,125,1,125,2,116,1,116,2,106,3,124,1, ++ 25,0,124,2,131,2,83,0,114,71,0,0,0,41,4,114, ++ 56,1,0,0,114,156,0,0,0,114,16,0,0,0,218,7, ++ 109,111,100,117,108,101,115,41,3,114,144,0,0,0,90,18, ++ 112,97,114,101,110,116,95,109,111,100,117,108,101,95,110,97, ++ 109,101,90,14,112,97,116,104,95,97,116,116,114,95,110,97, ++ 109,101,114,8,0,0,0,114,8,0,0,0,114,9,0,0, ++ 0,114,51,1,0,0,211,4,0,0,115,4,0,0,0,12, ++ 1,16,1,122,31,95,78,97,109,101,115,112,97,99,101,80, ++ 97,116,104,46,95,103,101,116,95,112,97,114,101,110,116,95, ++ 112,97,116,104,99,1,0,0,0,0,0,0,0,0,0,0, ++ 0,3,0,0,0,4,0,0,0,67,0,0,0,115,80,0, ++ 0,0,116,0,124,0,160,1,161,0,131,1,125,1,124,1, ++ 124,0,106,2,107,3,114,37,124,0,160,3,124,0,106,4, ++ 124,1,161,2,125,2,124,2,100,0,117,1,114,34,124,2, ++ 106,5,100,0,117,0,114,34,124,2,106,6,114,34,124,2, ++ 106,6,124,0,95,7,124,1,124,0,95,2,124,0,106,7, ++ 83,0,114,71,0,0,0,41,8,114,137,0,0,0,114,51, ++ 1,0,0,114,52,1,0,0,114,53,1,0,0,114,49,1, ++ 0,0,114,165,0,0,0,114,203,0,0,0,114,50,1,0, ++ 0,41,3,114,144,0,0,0,90,11,112,97,114,101,110,116, ++ 95,112,97,116,104,114,211,0,0,0,114,8,0,0,0,114, ++ 8,0,0,0,114,9,0,0,0,218,12,95,114,101,99,97, ++ 108,99,117,108,97,116,101,215,4,0,0,115,16,0,0,0, ++ 12,2,10,1,14,1,18,3,6,1,8,1,6,1,6,1, ++ 122,27,95,78,97,109,101,115,112,97,99,101,80,97,116,104, ++ 46,95,114,101,99,97,108,99,117,108,97,116,101,99,1,0, ++ 0,0,0,0,0,0,0,0,0,0,1,0,0,0,3,0, ++ 0,0,67,0,0,0,243,12,0,0,0,116,0,124,0,160, ++ 1,161,0,131,1,83,0,114,71,0,0,0,41,2,218,4, ++ 105,116,101,114,114,58,1,0,0,114,22,1,0,0,114,8, ++ 0,0,0,114,8,0,0,0,114,9,0,0,0,218,8,95, ++ 95,105,116,101,114,95,95,228,4,0,0,243,2,0,0,0, ++ 12,1,122,23,95,78,97,109,101,115,112,97,99,101,80,97, ++ 116,104,46,95,95,105,116,101,114,95,95,99,2,0,0,0, ++ 0,0,0,0,0,0,0,0,2,0,0,0,2,0,0,0, ++ 67,0,0,0,115,12,0,0,0,124,0,160,0,161,0,124, ++ 1,25,0,83,0,114,71,0,0,0,169,1,114,58,1,0, ++ 0,41,2,114,144,0,0,0,218,5,105,110,100,101,120,114, ++ 8,0,0,0,114,8,0,0,0,114,9,0,0,0,218,11, ++ 95,95,103,101,116,105,116,101,109,95,95,231,4,0,0,114, ++ 62,1,0,0,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, ++ 99,3,0,0,0,0,0,0,0,0,0,0,0,3,0,0, ++ 0,3,0,0,0,67,0,0,0,115,14,0,0,0,124,2, ++ 124,0,106,0,124,1,60,0,100,0,83,0,114,71,0,0, ++ 0,41,1,114,50,1,0,0,41,3,114,144,0,0,0,114, ++ 64,1,0,0,114,67,0,0,0,114,8,0,0,0,114,8, ++ 0,0,0,114,9,0,0,0,218,11,95,95,115,101,116,105, ++ 116,101,109,95,95,234,4,0,0,115,2,0,0,0,14,1, ++ 122,26,95,78,97,109,101,115,112,97,99,101,80,97,116,104, ++ 46,95,95,115,101,116,105,116,101,109,95,95,99,1,0,0, ++ 0,0,0,0,0,0,0,0,0,1,0,0,0,3,0,0, ++ 0,67,0,0,0,114,59,1,0,0,114,71,0,0,0,41, ++ 2,114,5,0,0,0,114,58,1,0,0,114,22,1,0,0, ++ 114,8,0,0,0,114,8,0,0,0,114,9,0,0,0,218, ++ 7,95,95,108,101,110,95,95,237,4,0,0,114,62,1,0, ++ 0,122,22,95,78,97,109,101,115,112,97,99,101,80,97,116, ++ 104,46,95,95,108,101,110,95,95,99,1,0,0,0,0,0, ++ 0,0,0,0,0,0,1,0,0,0,3,0,0,0,67,0, ++ 0,0,243,12,0,0,0,100,1,160,0,124,0,106,1,161, ++ 1,83,0,41,2,78,122,20,95,78,97,109,101,115,112,97, ++ 99,101,80,97,116,104,40,123,33,114,125,41,41,2,114,91, ++ 0,0,0,114,50,1,0,0,114,22,1,0,0,114,8,0, ++ 0,0,114,8,0,0,0,114,9,0,0,0,218,8,95,95, ++ 114,101,112,114,95,95,240,4,0,0,114,62,1,0,0,122, ++ 23,95,78,97,109,101,115,112,97,99,101,80,97,116,104,46, ++ 95,95,114,101,112,114,95,95,99,2,0,0,0,0,0,0, ++ 0,0,0,0,0,2,0,0,0,3,0,0,0,67,0,0, ++ 0,115,12,0,0,0,124,1,124,0,160,0,161,0,118,0, ++ 83,0,114,71,0,0,0,114,63,1,0,0,169,2,114,144, ++ 0,0,0,218,4,105,116,101,109,114,8,0,0,0,114,8, ++ 0,0,0,114,9,0,0,0,218,12,95,95,99,111,110,116, ++ 97,105,110,115,95,95,243,4,0,0,114,62,1,0,0,122, ++ 27,95,78,97,109,101,115,112,97,99,101,80,97,116,104,46, ++ 95,95,99,111,110,116,97,105,110,115,95,95,99,2,0,0, ++ 0,0,0,0,0,0,0,0,0,2,0,0,0,3,0,0, ++ 0,67,0,0,0,115,16,0,0,0,124,0,106,0,160,1, ++ 124,1,161,1,1,0,100,0,83,0,114,71,0,0,0,41, ++ 2,114,50,1,0,0,114,63,0,0,0,114,70,1,0,0, ++ 114,8,0,0,0,114,8,0,0,0,114,9,0,0,0,114, ++ 63,0,0,0,246,4,0,0,243,2,0,0,0,16,1,122, ++ 21,95,78,97,109,101,115,112,97,99,101,80,97,116,104,46, ++ 97,112,112,101,110,100,78,41,15,114,151,0,0,0,114,150, ++ 0,0,0,114,152,0,0,0,114,153,0,0,0,114,237,0, ++ 0,0,114,56,1,0,0,114,51,1,0,0,114,58,1,0, ++ 0,114,61,1,0,0,114,65,1,0,0,114,66,1,0,0, ++ 114,67,1,0,0,114,69,1,0,0,114,72,1,0,0,114, ++ 63,0,0,0,114,8,0,0,0,114,8,0,0,0,114,8, ++ 0,0,0,114,9,0,0,0,114,48,1,0,0,188,4,0, ++ 0,115,26,0,0,0,8,0,4,1,8,6,8,6,8,10, ++ 8,4,8,13,8,3,8,3,8,3,8,3,8,3,12,3, ++ 114,48,1,0,0,99,0,0,0,0,0,0,0,0,0,0, ++ 0,0,0,0,0,0,3,0,0,0,64,0,0,0,115,88, ++ 0,0,0,101,0,90,1,100,0,90,2,100,1,100,2,132, ++ 0,90,3,101,4,100,3,100,4,132,0,131,1,90,5,100, ++ 5,100,6,132,0,90,6,100,7,100,8,132,0,90,7,100, ++ 9,100,10,132,0,90,8,100,11,100,12,132,0,90,9,100, ++ 13,100,14,132,0,90,10,100,15,100,16,132,0,90,11,100, ++ 17,100,18,132,0,90,12,100,19,83,0,41,20,218,16,95, ++ 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,4,0,0,0, ++ 4,0,0,0,67,0,0,0,115,18,0,0,0,116,0,124, ++ 1,124,2,124,3,131,3,124,0,95,1,100,0,83,0,114, ++ 71,0,0,0,41,2,114,48,1,0,0,114,50,1,0,0, ++ 114,54,1,0,0,114,8,0,0,0,114,8,0,0,0,114, ++ 9,0,0,0,114,237,0,0,0,252,4,0,0,115,2,0, ++ 0,0,18,1,122,25,95,78,97,109,101,115,112,97,99,101, ++ 76,111,97,100,101,114,46,95,95,105,110,105,116,95,95,99, ++ 1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0, ++ 4,0,0,0,67,0,0,0,115,24,0,0,0,116,0,160, ++ 1,100,1,116,2,161,2,1,0,100,2,160,3,124,0,106, ++ 4,161,1,83,0,41,4,122,115,82,101,116,117,114,110,32, ++ 114,101,112,114,32,102,111,114,32,116,104,101,32,109,111,100, ++ 117,108,101,46,10,10,32,32,32,32,32,32,32,32,84,104, ++ 101,32,109,101,116,104,111,100,32,105,115,32,100,101,112,114, ++ 101,99,97,116,101,100,46,32,32,84,104,101,32,105,109,112, ++ 111,114,116,32,109,97,99,104,105,110,101,114,121,32,100,111, ++ 101,115,32,116,104,101,32,106,111,98,32,105,116,115,101,108, ++ 102,46,10,10,32,32,32,32,32,32,32,32,122,82,95,78, ++ 97,109,101,115,112,97,99,101,76,111,97,100,101,114,46,109, ++ 111,100,117,108,101,95,114,101,112,114,40,41,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, ++ 122,25,60,109,111,100,117,108,101,32,123,33,114,125,32,40, ++ 110,97,109,101,115,112,97,99,101,41,62,78,41,5,114,101, ++ 0,0,0,114,102,0,0,0,114,103,0,0,0,114,91,0, ++ 0,0,114,151,0,0,0,41,1,114,245,0,0,0,114,8, ++ 0,0,0,114,8,0,0,0,114,9,0,0,0,218,11,109, ++ 111,100,117,108,101,95,114,101,112,114,255,4,0,0,115,8, ++ 0,0,0,6,7,2,1,4,255,12,2,122,28,95,78,97, ++ 109,101,115,112,97,99,101,76,111,97,100,101,114,46,109,111, ++ 100,117,108,101,95,114,101,112,114,99,2,0,0,0,0,0, ++ 0,0,0,0,0,0,2,0,0,0,1,0,0,0,67,0, ++ 0,0,114,25,0,0,0,41,2,78,84,114,8,0,0,0, ++ 114,248,0,0,0,114,8,0,0,0,114,8,0,0,0,114, ++ 9,0,0,0,114,207,0,0,0,10,5,0,0,243,2,0, ++ 0,0,4,1,122,27,95,78,97,109,101,115,112,97,99,101, ++ 76,111,97,100,101,114,46,105,115,95,112,97,99,107,97,103, ++ 101,99,2,0,0,0,0,0,0,0,0,0,0,0,2,0, ++ 0,0,1,0,0,0,67,0,0,0,114,25,0,0,0,41, ++ 2,78,114,11,0,0,0,114,8,0,0,0,114,248,0,0, ++ 0,114,8,0,0,0,114,8,0,0,0,114,9,0,0,0, ++ 114,2,1,0,0,13,5,0,0,114,76,1,0,0,122,27, + 95,78,97,109,101,115,112,97,99,101,76,111,97,100,101,114, +- 46,101,120,101,99,95,109,111,100,117,108,101,99,2,0,0, +- 0,0,0,0,0,0,0,0,0,2,0,0,0,4,0,0, +- 0,67,0,0,0,115,26,0,0,0,116,0,160,1,100,1, +- 124,0,106,2,161,2,1,0,116,0,160,3,124,0,124,1, +- 161,2,83,0,41,3,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,78,41,4,114,159,0,0,0,114,173,0,0,0,114, +- 49,1,0,0,114,246,0,0,0,114,247,0,0,0,114,7, +- 0,0,0,114,7,0,0,0,114,8,0,0,0,114,248,0, +- 0,0,21,5,0,0,115,8,0,0,0,6,7,4,1,4, +- 255,12,3,122,28,95,78,97,109,101,115,112,97,99,101,76, +- 111,97,100,101,114,46,108,111,97,100,95,109,111,100,117,108, +- 101,99,2,0,0,0,0,0,0,0,0,0,0,0,3,0, +- 0,0,2,0,0,0,67,0,0,0,115,22,0,0,0,100, +- 1,100,2,108,0,109,1,125,2,1,0,124,2,124,0,106, +- 2,131,1,83,0,41,3,78,114,0,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,32,1,0,0,114,76,1,0,0,114,49,1,0, +- 0,41,3,114,143,0,0,0,114,244,0,0,0,114,76,1, +- 0,0,114,7,0,0,0,114,7,0,0,0,114,8,0,0, +- 0,114,33,1,0,0,33,5,0,0,115,4,0,0,0,12, +- 1,10,1,122,36,95,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,78,41,13,114,150,0,0, +- 0,114,149,0,0,0,114,151,0,0,0,114,236,0,0,0, +- 114,233,0,0,0,114,74,1,0,0,114,206,0,0,0,114, +- 1,1,0,0,114,241,0,0,0,114,239,0,0,0,114,245, +- 0,0,0,114,248,0,0,0,114,33,1,0,0,114,7,0, +- 0,0,114,7,0,0,0,114,7,0,0,0,114,8,0,0, +- 0,114,73,1,0,0,247,4,0,0,115,22,0,0,0,8, +- 0,8,1,2,3,10,1,8,10,8,3,8,3,8,3,8, +- 3,8,3,12,12,114,73,1,0,0,99,0,0,0,0,0, +- 0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,64, +- 0,0,0,115,118,0,0,0,101,0,90,1,100,0,90,2, +- 100,1,90,3,101,4,100,2,100,3,132,0,131,1,90,5, +- 101,4,100,4,100,5,132,0,131,1,90,6,101,7,100,6, +- 100,7,132,0,131,1,90,8,101,7,100,8,100,9,132,0, +- 131,1,90,9,101,7,100,19,100,11,100,12,132,1,131,1, +- 90,10,101,7,100,20,100,13,100,14,132,1,131,1,90,11, +- 101,7,100,19,100,15,100,16,132,1,131,1,90,12,101,4, +- 100,17,100,18,132,0,131,1,90,13,100,10,83,0,41,21, +- 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,2,0,0,0,4,0,0, +- 0,67,0,0,0,115,64,0,0,0,116,0,116,1,106,2, +- 160,3,161,0,131,1,68,0,93,22,92,2,125,0,125,1, +- 124,1,100,1,117,0,114,20,116,1,106,2,124,0,61,0, +- 113,7,116,4,124,1,100,2,131,2,114,29,124,1,160,5, +- 161,0,1,0,113,7,100,1,83,0,41,3,122,125,67,97, +- 108,108,32,116,104,101,32,105,110,118,97,108,105,100,97,116, +- 101,95,99,97,99,104,101,115,40,41,32,109,101,116,104,111, +- 100,32,111,110,32,97,108,108,32,112,97,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,41, +- 6,218,4,108,105,115,116,114,15,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,153,0,0,0,114,78,1, +- 0,0,41,2,114,141,0,0,0,218,6,102,105,110,100,101, +- 114,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, +- 114,78,1,0,0,44,5,0,0,115,14,0,0,0,22,4, +- 8,1,10,1,10,1,8,1,2,128,4,252,122,28,80,97, +- 116,104,70,105,110,100,101,114,46,105,110,118,97,108,105,100, +- 97,116,101,95,99,97,99,104,101,115,99,1,0,0,0,0, +- 0,0,0,0,0,0,0,2,0,0,0,9,0,0,0,67, +- 0,0,0,115,76,0,0,0,116,0,106,1,100,1,117,1, +- 114,14,116,0,106,1,115,14,116,2,160,3,100,2,116,4, +- 161,2,1,0,116,0,106,1,68,0,93,18,125,1,122,7, +- 124,1,124,0,131,1,87,0,2,0,1,0,83,0,4,0, +- 116,5,121,35,1,0,1,0,1,0,89,0,113,17,119,0, +- 100,1,83,0,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,15,0,0,0,218,10,112,97,116,104,95,104,111, +- 111,107,115,114,99,0,0,0,114,100,0,0,0,114,162,0, +- 0,0,114,142,0,0,0,41,2,114,65,0,0,0,90,4, +- 104,111,111,107,114,7,0,0,0,114,7,0,0,0,114,8, +- 0,0,0,218,11,95,112,97,116,104,95,104,111,111,107,115, +- 54,5,0,0,115,18,0,0,0,16,3,12,1,10,1,2, +- 1,14,1,12,1,4,1,2,255,4,3,122,22,80,97,116, +- 104,70,105,110,100,101,114,46,95,112,97,116,104,95,104,111, +- 111,107,115,99,2,0,0,0,0,0,0,0,0,0,0,0, +- 3,0,0,0,8,0,0,0,67,0,0,0,115,100,0,0, +- 0,124,1,100,1,107,2,114,21,122,6,116,0,160,1,161, +- 0,125,1,87,0,110,10,4,0,116,2,121,20,1,0,1, +- 0,1,0,89,0,100,2,83,0,119,0,122,8,116,3,106, +- 4,124,1,25,0,125,2,87,0,124,2,83,0,4,0,116, +- 5,121,49,1,0,1,0,1,0,124,0,160,6,124,1,161, +- 1,125,2,124,2,116,3,106,4,124,1,60,0,89,0,124, +- 2,83,0,119,0,41,3,122,210,71,101,116,32,116,104,101, +- 32,102,105,110,100,101,114,32,102,111,114,32,116,104,101,32, +- 112,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,10,0,0,0, +- 78,41,7,114,18,0,0,0,114,82,0,0,0,218,17,70, +- 105,108,101,78,111,116,70,111,117,110,100,69,114,114,111,114, +- 114,15,0,0,0,114,80,1,0,0,218,8,75,101,121,69, +- 114,114,111,114,114,84,1,0,0,41,3,114,221,0,0,0, +- 114,65,0,0,0,114,82,1,0,0,114,7,0,0,0,114, +- 7,0,0,0,114,8,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,67, +- 5,0,0,115,28,0,0,0,8,8,2,1,12,1,12,1, +- 6,3,2,253,2,4,12,1,4,4,12,253,10,1,12,1, +- 4,1,2,253,122,31,80,97,116,104,70,105,110,100,101,114, +- 46,95,112,97,116,104,95,105,109,112,111,114,116,101,114,95, +- 99,97,99,104,101,99,3,0,0,0,0,0,0,0,0,0, +- 0,0,7,0,0,0,4,0,0,0,67,0,0,0,115,138, +- 0,0,0,116,0,124,2,100,1,131,2,114,27,116,1,160, +- 2,124,2,161,1,155,0,100,2,157,2,125,3,116,3,160, +- 4,124,3,116,5,161,2,1,0,124,2,160,6,124,1,161, +- 1,92,2,125,4,125,5,110,21,116,1,160,2,124,2,161, +- 1,155,0,100,3,157,2,125,3,116,3,160,4,124,3,116, +- 5,161,2,1,0,124,2,160,7,124,1,161,1,125,4,103, +- 0,125,5,124,4,100,0,117,1,114,58,116,1,160,8,124, +- 1,124,4,161,2,83,0,116,1,160,9,124,1,100,0,161, +- 2,125,6,124,5,124,6,95,10,124,6,83,0,41,4,78, +- 114,161,0,0,0,122,53,46,102,105,110,100,95,115,112,101, +- 99,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,102, +- 105,110,100,95,108,111,97,100,101,114,40,41,122,53,46,102, +- 105,110,100,95,115,112,101,99,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,102,105,110,100,95,109,111,100,117,108, +- 101,40,41,41,11,114,153,0,0,0,114,159,0,0,0,90, +- 12,95,111,98,106,101,99,116,95,110,97,109,101,114,99,0, +- 0,0,114,100,0,0,0,114,162,0,0,0,114,161,0,0, +- 0,114,229,0,0,0,114,224,0,0,0,114,207,0,0,0, +- 114,202,0,0,0,41,7,114,221,0,0,0,114,163,0,0, +- 0,114,82,1,0,0,114,166,0,0,0,114,164,0,0,0, +- 114,165,0,0,0,114,210,0,0,0,114,7,0,0,0,114, +- 7,0,0,0,114,8,0,0,0,218,16,95,108,101,103,97, +- 99,121,95,103,101,116,95,115,112,101,99,89,5,0,0,115, +- 26,0,0,0,10,4,16,1,12,2,16,1,16,2,12,2, +- 10,1,4,1,8,1,12,1,12,1,6,1,4,1,122,27, +- 80,97,116,104,70,105,110,100,101,114,46,95,108,101,103,97, +- 99,121,95,103,101,116,95,115,112,101,99,78,99,4,0,0, +- 0,0,0,0,0,0,0,0,0,9,0,0,0,5,0,0, +- 0,67,0,0,0,115,166,0,0,0,103,0,125,4,124,2, +- 68,0,93,67,125,5,116,0,124,5,116,1,116,2,102,2, +- 131,2,115,14,113,4,124,0,160,3,124,5,161,1,125,6, +- 124,6,100,1,117,1,114,71,116,4,124,6,100,2,131,2, +- 114,35,124,6,160,5,124,1,124,3,161,2,125,7,110,6, +- 124,0,160,6,124,1,124,6,161,2,125,7,124,7,100,1, +- 117,0,114,46,113,4,124,7,106,7,100,1,117,1,114,55, +- 124,7,2,0,1,0,83,0,124,7,106,8,125,8,124,8, +- 100,1,117,0,114,66,116,9,100,3,131,1,130,1,124,4, +- 160,10,124,8,161,1,1,0,113,4,116,11,160,12,124,1, +- 100,1,161,2,125,7,124,4,124,7,95,8,124,7,83,0, +- 41,4,122,63,70,105,110,100,32,116,104,101,32,108,111,97, +- 100,101,114,32,111,114,32,110,97,109,101,115,112,97,99,101, +- 95,112,97,116,104,32,102,111,114,32,116,104,105,115,32,109, +- 111,100,117,108,101,47,112,97,99,107,97,103,101,32,110,97, +- 109,101,46,78,114,226,0,0,0,122,19,115,112,101,99,32, +- 109,105,115,115,105,110,103,32,108,111,97,100,101,114,41,13, +- 114,185,0,0,0,114,109,0,0,0,218,5,98,121,116,101, +- 115,114,87,1,0,0,114,153,0,0,0,114,226,0,0,0, +- 114,88,1,0,0,114,164,0,0,0,114,202,0,0,0,114, +- 142,0,0,0,114,191,0,0,0,114,159,0,0,0,114,207, +- 0,0,0,41,9,114,221,0,0,0,114,163,0,0,0,114, +- 65,0,0,0,114,225,0,0,0,218,14,110,97,109,101,115, +- 112,97,99,101,95,112,97,116,104,90,5,101,110,116,114,121, +- 114,82,1,0,0,114,210,0,0,0,114,165,0,0,0,114, +- 7,0,0,0,114,7,0,0,0,114,8,0,0,0,218,9, +- 95,103,101,116,95,115,112,101,99,110,5,0,0,115,42,0, +- 0,0,4,5,8,1,14,1,2,1,10,1,8,1,10,1, +- 14,1,12,2,8,1,2,1,10,1,8,1,6,1,8,1, +- 8,1,10,5,2,128,12,2,6,1,4,1,122,20,80,97, +- 116,104,70,105,110,100,101,114,46,95,103,101,116,95,115,112, +- 101,99,99,4,0,0,0,0,0,0,0,0,0,0,0,6, +- 0,0,0,5,0,0,0,67,0,0,0,115,94,0,0,0, +- 124,2,100,1,117,0,114,7,116,0,106,1,125,2,124,0, +- 160,2,124,1,124,2,124,3,161,3,125,4,124,4,100,1, +- 117,0,114,20,100,1,83,0,124,4,106,3,100,1,117,0, +- 114,45,124,4,106,4,125,5,124,5,114,43,100,1,124,4, +- 95,5,116,6,124,1,124,5,124,0,106,2,131,3,124,4, +- 95,4,124,4,83,0,100,1,83,0,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, ++ 46,103,101,116,95,115,111,117,114,99,101,99,2,0,0,0, ++ 0,0,0,0,0,0,0,0,2,0,0,0,6,0,0,0, ++ 67,0,0,0,115,16,0,0,0,116,0,100,1,100,2,100, ++ 3,100,4,100,5,141,4,83,0,41,6,78,114,11,0,0, ++ 0,122,8,60,115,116,114,105,110,103,62,114,244,0,0,0, ++ 84,41,1,114,4,1,0,0,41,1,114,5,1,0,0,114, ++ 248,0,0,0,114,8,0,0,0,114,8,0,0,0,114,9, ++ 0,0,0,114,242,0,0,0,16,5,0,0,114,73,1,0, ++ 0,122,25,95,78,97,109,101,115,112,97,99,101,76,111,97, ++ 100,101,114,46,103,101,116,95,99,111,100,101,99,2,0,0, ++ 0,0,0,0,0,0,0,0,0,2,0,0,0,1,0,0, ++ 0,67,0,0,0,114,25,0,0,0,114,238,0,0,0,114, ++ 8,0,0,0,114,239,0,0,0,114,8,0,0,0,114,8, ++ 0,0,0,114,9,0,0,0,114,240,0,0,0,19,5,0, ++ 0,114,241,0,0,0,122,30,95,78,97,109,101,115,112,97, ++ 99,101,76,111,97,100,101,114,46,99,114,101,97,116,101,95, ++ 109,111,100,117,108,101,99,2,0,0,0,0,0,0,0,0, ++ 0,0,0,2,0,0,0,1,0,0,0,67,0,0,0,115, ++ 4,0,0,0,100,0,83,0,114,71,0,0,0,114,8,0, ++ 0,0,114,43,1,0,0,114,8,0,0,0,114,8,0,0, ++ 0,114,9,0,0,0,114,246,0,0,0,22,5,0,0,114, ++ 76,1,0,0,122,28,95,78,97,109,101,115,112,97,99,101, ++ 76,111,97,100,101,114,46,101,120,101,99,95,109,111,100,117, ++ 108,101,99,2,0,0,0,0,0,0,0,0,0,0,0,2, ++ 0,0,0,4,0,0,0,67,0,0,0,115,26,0,0,0, ++ 116,0,160,1,100,1,124,0,106,2,161,2,1,0,116,0, ++ 160,3,124,0,124,1,161,2,83,0,41,3,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,78,41,4,114,160,0,0,0, ++ 114,174,0,0,0,114,50,1,0,0,114,247,0,0,0,114, ++ 248,0,0,0,114,8,0,0,0,114,8,0,0,0,114,9, ++ 0,0,0,114,249,0,0,0,25,5,0,0,115,8,0,0, ++ 0,6,7,4,1,4,255,12,3,122,28,95,78,97,109,101, ++ 115,112,97,99,101,76,111,97,100,101,114,46,108,111,97,100, ++ 95,109,111,100,117,108,101,99,2,0,0,0,0,0,0,0, ++ 0,0,0,0,3,0,0,0,2,0,0,0,67,0,0,0, ++ 115,22,0,0,0,100,1,100,2,108,0,109,1,125,2,1, ++ 0,124,2,124,0,106,2,131,1,83,0,41,3,78,114,0, ++ 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,33,1,0,0,114,77,1, ++ 0,0,114,50,1,0,0,41,3,114,144,0,0,0,114,245, ++ 0,0,0,114,77,1,0,0,114,8,0,0,0,114,8,0, ++ 0,0,114,9,0,0,0,114,34,1,0,0,37,5,0,0, ++ 115,4,0,0,0,12,1,10,1,122,36,95,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,78, ++ 41,13,114,151,0,0,0,114,150,0,0,0,114,152,0,0, ++ 0,114,237,0,0,0,114,234,0,0,0,114,75,1,0,0, ++ 114,207,0,0,0,114,2,1,0,0,114,242,0,0,0,114, ++ 240,0,0,0,114,246,0,0,0,114,249,0,0,0,114,34, ++ 1,0,0,114,8,0,0,0,114,8,0,0,0,114,8,0, ++ 0,0,114,9,0,0,0,114,74,1,0,0,251,4,0,0, ++ 115,22,0,0,0,8,0,8,1,2,3,10,1,8,10,8, ++ 3,8,3,8,3,8,3,8,3,12,12,114,74,1,0,0, ++ 99,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, ++ 0,4,0,0,0,64,0,0,0,115,118,0,0,0,101,0, ++ 90,1,100,0,90,2,100,1,90,3,101,4,100,2,100,3, ++ 132,0,131,1,90,5,101,4,100,4,100,5,132,0,131,1, ++ 90,6,101,7,100,6,100,7,132,0,131,1,90,8,101,7, ++ 100,8,100,9,132,0,131,1,90,9,101,7,100,19,100,11, ++ 100,12,132,1,131,1,90,10,101,7,100,20,100,13,100,14, ++ 132,1,131,1,90,11,101,7,100,19,100,15,100,16,132,1, ++ 131,1,90,12,101,4,100,17,100,18,132,0,131,1,90,13, ++ 100,10,83,0,41,21,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,2, ++ 0,0,0,4,0,0,0,67,0,0,0,115,64,0,0,0, ++ 116,0,116,1,106,2,160,3,161,0,131,1,68,0,93,22, ++ 92,2,125,0,125,1,124,1,100,1,117,0,114,20,116,1, ++ 106,2,124,0,61,0,113,7,116,4,124,1,100,2,131,2, ++ 114,29,124,1,160,5,161,0,1,0,113,7,100,1,83,0, ++ 41,3,122,125,67,97,108,108,32,116,104,101,32,105,110,118, ++ 97,108,105,100,97,116,101,95,99,97,99,104,101,115,40,41, ++ 32,109,101,116,104,111,100,32,111,110,32,97,108,108,32,112, ++ 97,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,41,6,218,4,108,105,115,116,114,16,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,154, ++ 0,0,0,114,79,1,0,0,41,2,114,142,0,0,0,218, ++ 6,102,105,110,100,101,114,114,8,0,0,0,114,8,0,0, ++ 0,114,9,0,0,0,114,79,1,0,0,48,5,0,0,115, ++ 14,0,0,0,22,4,8,1,10,1,10,1,8,1,2,128, ++ 4,252,122,28,80,97,116,104,70,105,110,100,101,114,46,105, ++ 110,118,97,108,105,100,97,116,101,95,99,97,99,104,101,115, ++ 99,1,0,0,0,0,0,0,0,0,0,0,0,2,0,0, ++ 0,9,0,0,0,67,0,0,0,115,76,0,0,0,116,0, ++ 106,1,100,1,117,1,114,14,116,0,106,1,115,14,116,2, ++ 160,3,100,2,116,4,161,2,1,0,116,0,106,1,68,0, ++ 93,18,125,1,122,7,124,1,124,0,131,1,87,0,2,0, ++ 1,0,83,0,4,0,116,5,121,35,1,0,1,0,1,0, ++ 89,0,113,17,119,0,100,1,83,0,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,16,0,0,0,218,10,112, ++ 97,116,104,95,104,111,111,107,115,114,101,0,0,0,114,102, ++ 0,0,0,114,163,0,0,0,114,143,0,0,0,41,2,114, ++ 67,0,0,0,90,4,104,111,111,107,114,8,0,0,0,114, ++ 8,0,0,0,114,9,0,0,0,218,11,95,112,97,116,104, ++ 95,104,111,111,107,115,58,5,0,0,115,18,0,0,0,16, ++ 3,12,1,10,1,2,1,14,1,12,1,4,1,2,255,4, ++ 3,122,22,80,97,116,104,70,105,110,100,101,114,46,95,112, ++ 97,116,104,95,104,111,111,107,115,99,2,0,0,0,0,0, ++ 0,0,0,0,0,0,3,0,0,0,8,0,0,0,67,0, ++ 0,0,115,100,0,0,0,124,1,100,1,107,2,114,21,122, ++ 6,116,0,160,1,161,0,125,1,87,0,110,10,4,0,116, ++ 2,121,20,1,0,1,0,1,0,89,0,100,2,83,0,119, ++ 0,122,8,116,3,106,4,124,1,25,0,125,2,87,0,124, ++ 2,83,0,4,0,116,5,121,49,1,0,1,0,1,0,124, ++ 0,160,6,124,1,161,1,125,2,124,2,116,3,106,4,124, ++ 1,60,0,89,0,124,2,83,0,119,0,41,3,122,210,71, ++ 101,116,32,116,104,101,32,102,105,110,100,101,114,32,102,111, ++ 114,32,116,104,101,32,112,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,11,0,0,0,78,41,7,114,19,0,0,0,114,84, ++ 0,0,0,218,17,70,105,108,101,78,111,116,70,111,117,110, ++ 100,69,114,114,111,114,114,16,0,0,0,114,81,1,0,0, ++ 218,8,75,101,121,69,114,114,111,114,114,85,1,0,0,41, ++ 3,114,222,0,0,0,114,67,0,0,0,114,83,1,0,0, ++ 114,8,0,0,0,114,8,0,0,0,114,9,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,71,5,0,0,115,28,0,0,0,8,8, ++ 2,1,12,1,12,1,6,3,2,253,2,4,12,1,4,4, ++ 12,253,10,1,12,1,4,1,2,253,122,31,80,97,116,104, ++ 70,105,110,100,101,114,46,95,112,97,116,104,95,105,109,112, ++ 111,114,116,101,114,95,99,97,99,104,101,99,3,0,0,0, ++ 0,0,0,0,0,0,0,0,7,0,0,0,4,0,0,0, ++ 67,0,0,0,115,138,0,0,0,116,0,124,2,100,1,131, ++ 2,114,27,116,1,160,2,124,2,161,1,155,0,100,2,157, ++ 2,125,3,116,3,160,4,124,3,116,5,161,2,1,0,124, ++ 2,160,6,124,1,161,1,92,2,125,4,125,5,110,21,116, ++ 1,160,2,124,2,161,1,155,0,100,3,157,2,125,3,116, ++ 3,160,4,124,3,116,5,161,2,1,0,124,2,160,7,124, ++ 1,161,1,125,4,103,0,125,5,124,4,100,0,117,1,114, ++ 58,116,1,160,8,124,1,124,4,161,2,83,0,116,1,160, ++ 9,124,1,100,0,161,2,125,6,124,5,124,6,95,10,124, ++ 6,83,0,41,4,78,114,162,0,0,0,122,53,46,102,105, ++ 110,100,95,115,112,101,99,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,102,105,110,100,95,108,111,97,100,101,114, ++ 40,41,122,53,46,102,105,110,100,95,115,112,101,99,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,102,105,110,100, ++ 95,109,111,100,117,108,101,40,41,41,11,114,154,0,0,0, ++ 114,160,0,0,0,90,12,95,111,98,106,101,99,116,95,110, ++ 97,109,101,114,101,0,0,0,114,102,0,0,0,114,163,0, ++ 0,0,114,162,0,0,0,114,230,0,0,0,114,225,0,0, ++ 0,114,208,0,0,0,114,203,0,0,0,41,7,114,222,0, ++ 0,0,114,164,0,0,0,114,83,1,0,0,114,167,0,0, ++ 0,114,165,0,0,0,114,166,0,0,0,114,211,0,0,0, ++ 114,8,0,0,0,114,8,0,0,0,114,9,0,0,0,218, ++ 16,95,108,101,103,97,99,121,95,103,101,116,95,115,112,101, ++ 99,93,5,0,0,115,26,0,0,0,10,4,16,1,12,2, ++ 16,1,16,2,12,2,10,1,4,1,8,1,12,1,12,1, ++ 6,1,4,1,122,27,80,97,116,104,70,105,110,100,101,114, ++ 46,95,108,101,103,97,99,121,95,103,101,116,95,115,112,101, ++ 99,78,99,4,0,0,0,0,0,0,0,0,0,0,0,9, ++ 0,0,0,5,0,0,0,67,0,0,0,115,166,0,0,0, ++ 103,0,125,4,124,2,68,0,93,67,125,5,116,0,124,5, ++ 116,1,116,2,102,2,131,2,115,14,113,4,124,0,160,3, ++ 124,5,161,1,125,6,124,6,100,1,117,1,114,71,116,4, ++ 124,6,100,2,131,2,114,35,124,6,160,5,124,1,124,3, ++ 161,2,125,7,110,6,124,0,160,6,124,1,124,6,161,2, ++ 125,7,124,7,100,1,117,0,114,46,113,4,124,7,106,7, ++ 100,1,117,1,114,55,124,7,2,0,1,0,83,0,124,7, ++ 106,8,125,8,124,8,100,1,117,0,114,66,116,9,100,3, ++ 131,1,130,1,124,4,160,10,124,8,161,1,1,0,113,4, ++ 116,11,160,12,124,1,100,1,161,2,125,7,124,4,124,7, ++ 95,8,124,7,83,0,41,4,122,63,70,105,110,100,32,116, ++ 104,101,32,108,111,97,100,101,114,32,111,114,32,110,97,109, ++ 101,115,112,97,99,101,95,112,97,116,104,32,102,111,114,32, ++ 116,104,105,115,32,109,111,100,117,108,101,47,112,97,99,107, ++ 97,103,101,32,110,97,109,101,46,78,114,227,0,0,0,122, ++ 19,115,112,101,99,32,109,105,115,115,105,110,103,32,108,111, ++ 97,100,101,114,41,13,114,186,0,0,0,114,111,0,0,0, ++ 218,5,98,121,116,101,115,114,88,1,0,0,114,154,0,0, ++ 0,114,227,0,0,0,114,89,1,0,0,114,165,0,0,0, ++ 114,203,0,0,0,114,143,0,0,0,114,192,0,0,0,114, ++ 160,0,0,0,114,208,0,0,0,41,9,114,222,0,0,0, ++ 114,164,0,0,0,114,67,0,0,0,114,226,0,0,0,218, ++ 14,110,97,109,101,115,112,97,99,101,95,112,97,116,104,90, ++ 5,101,110,116,114,121,114,83,1,0,0,114,211,0,0,0, ++ 114,166,0,0,0,114,8,0,0,0,114,8,0,0,0,114, ++ 9,0,0,0,218,9,95,103,101,116,95,115,112,101,99,114, ++ 5,0,0,115,42,0,0,0,4,5,8,1,14,1,2,1, ++ 10,1,8,1,10,1,14,1,12,2,8,1,2,1,10,1, ++ 8,1,6,1,8,1,8,1,10,5,2,128,12,2,6,1, ++ 4,1,122,20,80,97,116,104,70,105,110,100,101,114,46,95, ++ 103,101,116,95,115,112,101,99,99,4,0,0,0,0,0,0, ++ 0,0,0,0,0,6,0,0,0,5,0,0,0,67,0,0, ++ 0,115,94,0,0,0,124,2,100,1,117,0,114,7,116,0, ++ 106,1,125,2,124,0,160,2,124,1,124,2,124,3,161,3, ++ 125,4,124,4,100,1,117,0,114,20,100,1,83,0,124,4, ++ 106,3,100,1,117,0,114,45,124,4,106,4,125,5,124,5, ++ 114,43,100,1,124,4,95,5,116,6,124,1,124,5,124,0, ++ 106,2,131,3,124,4,95,4,124,4,83,0,100,1,83,0, ++ 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,16,0,0,0,114,67,0, ++ 0,0,114,92,1,0,0,114,165,0,0,0,114,203,0,0, ++ 0,114,206,0,0,0,114,48,1,0,0,41,6,114,222,0, ++ 0,0,114,164,0,0,0,114,67,0,0,0,114,226,0,0, ++ 0,114,211,0,0,0,114,91,1,0,0,114,8,0,0,0, ++ 114,8,0,0,0,114,9,0,0,0,114,227,0,0,0,146, ++ 5,0,0,115,26,0,0,0,8,6,6,1,14,1,8,1, ++ 4,1,10,1,6,1,4,1,6,3,16,1,4,1,4,2, ++ 4,2,122,20,80,97,116,104,70,105,110,100,101,114,46,102, ++ 105,110,100,95,115,112,101,99,99,3,0,0,0,0,0,0, ++ 0,0,0,0,0,4,0,0,0,4,0,0,0,67,0,0, ++ 0,115,42,0,0,0,116,0,160,1,100,1,116,2,161,2, ++ 1,0,124,0,160,3,124,1,124,2,161,2,125,3,124,3, ++ 100,2,117,0,114,18,100,2,83,0,124,3,106,4,83,0, ++ 41,3,122,170,102,105,110,100,32,116,104,101,32,109,111,100, ++ 117,108,101,32,111,110,32,115,121,115,46,112,97,116,104,32, ++ 111,114,32,39,112,97,116,104,39,32,98,97,115,101,100,32, ++ 111,110,32,115,121,115,46,112,97,116,104,95,104,111,111,107, ++ 115,32,97,110,100,10,32,32,32,32,32,32,32,32,115,121, + 115,46,112,97,116,104,95,105,109,112,111,114,116,101,114,95, +- 99,97,99,104,101,46,10,32,32,32,32,32,32,32,32,78, +- 41,7,114,15,0,0,0,114,65,0,0,0,114,91,1,0, +- 0,114,164,0,0,0,114,202,0,0,0,114,205,0,0,0, +- 114,47,1,0,0,41,6,114,221,0,0,0,114,163,0,0, +- 0,114,65,0,0,0,114,225,0,0,0,114,210,0,0,0, +- 114,90,1,0,0,114,7,0,0,0,114,7,0,0,0,114, +- 8,0,0,0,114,226,0,0,0,142,5,0,0,115,26,0, +- 0,0,8,6,6,1,14,1,8,1,4,1,10,1,6,1, +- 4,1,6,3,16,1,4,1,4,2,4,2,122,20,80,97, +- 116,104,70,105,110,100,101,114,46,102,105,110,100,95,115,112, +- 101,99,99,3,0,0,0,0,0,0,0,0,0,0,0,4, +- 0,0,0,4,0,0,0,67,0,0,0,115,42,0,0,0, +- 116,0,160,1,100,1,116,2,161,2,1,0,124,0,160,3, +- 124,1,124,2,161,2,125,3,124,3,100,2,117,0,114,18, +- 100,2,83,0,124,3,106,4,83,0,41,3,122,170,102,105, +- 110,100,32,116,104,101,32,109,111,100,117,108,101,32,111,110, +- 32,115,121,115,46,112,97,116,104,32,111,114,32,39,112,97, +- 116,104,39,32,98,97,115,101,100,32,111,110,32,115,121,115, +- 46,112,97,116,104,95,104,111,111,107,115,32,97,110,100,10, +- 32,32,32,32,32,32,32,32,115,121,115,46,112,97,116,104, +- 95,105,109,112,111,114,116,101,114,95,99,97,99,104,101,46, +- 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,102,105,110,100,95,115, +- 112,101,99,40,41,32,105,110,115,116,101,97,100,46,10,10, +- 32,32,32,32,32,32,32,32,122,101,80,97,116,104,70,105, +- 110,100,101,114,46,102,105,110,100,95,109,111,100,117,108,101, +- 40,41,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,102,105,110,100, +- 95,115,112,101,99,40,41,32,105,110,115,116,101,97,100,78, +- 114,227,0,0,0,114,228,0,0,0,114,7,0,0,0,114, +- 7,0,0,0,114,8,0,0,0,114,229,0,0,0,166,5, +- 0,0,115,14,0,0,0,6,8,2,2,4,254,12,3,8, +- 1,4,1,6,1,122,22,80,97,116,104,70,105,110,100,101, +- 114,46,102,105,110,100,95,109,111,100,117,108,101,99,0,0, +- 0,0,0,0,0,0,0,0,0,0,3,0,0,0,4,0, +- 0,0,79,0,0,0,115,28,0,0,0,100,1,100,2,108, +- 0,109,1,125,2,1,0,124,2,106,2,124,0,105,0,124, +- 1,164,1,142,1,83,0,41,4,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,0, +- 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,78,41,3,90,18,105,109, +- 112,111,114,116,108,105,98,46,109,101,116,97,100,97,116,97, +- 114,92,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,144,0,0,0, +- 114,145,0,0,0,114,92,1,0,0,114,7,0,0,0,114, +- 7,0,0,0,114,8,0,0,0,114,93,1,0,0,182,5, +- 0,0,115,4,0,0,0,12,10,16,1,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,114,69,0,0,0,114, +- 230,0,0,0,41,14,114,150,0,0,0,114,149,0,0,0, +- 114,151,0,0,0,114,152,0,0,0,114,233,0,0,0,114, +- 78,1,0,0,114,84,1,0,0,114,234,0,0,0,114,87, +- 1,0,0,114,88,1,0,0,114,91,1,0,0,114,226,0, +- 0,0,114,229,0,0,0,114,93,1,0,0,114,7,0,0, +- 0,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, +- 114,77,1,0,0,40,5,0,0,115,36,0,0,0,8,0, +- 4,2,2,2,10,1,2,9,10,1,2,12,10,1,2,21, +- 10,1,2,20,12,1,2,31,12,1,2,23,12,1,2,15, +- 14,1,114,77,1,0,0,99,0,0,0,0,0,0,0,0, +- 0,0,0,0,0,0,0,0,3,0,0,0,64,0,0,0, +- 115,90,0,0,0,101,0,90,1,100,0,90,2,100,1,90, +- 3,100,2,100,3,132,0,90,4,100,4,100,5,132,0,90, +- 5,101,6,90,7,100,6,100,7,132,0,90,8,100,8,100, +- 9,132,0,90,9,100,19,100,11,100,12,132,1,90,10,100, +- 13,100,14,132,0,90,11,101,12,100,15,100,16,132,0,131, +- 1,90,13,100,17,100,18,132,0,90,14,100,10,83,0,41, +- 20,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,6,0,0,0, +- 7,0,0,0,115,112,0,0,0,103,0,125,3,124,2,68, +- 0,93,16,92,2,137,0,125,4,124,3,160,0,135,0,102, +- 1,100,1,100,2,132,8,124,4,68,0,131,1,161,1,1, +- 0,113,4,124,3,124,0,95,1,124,1,112,27,100,3,124, +- 0,95,2,116,3,124,0,106,2,131,1,115,43,116,4,116, +- 5,160,6,161,0,124,0,106,2,131,2,124,0,95,2,100, +- 4,124,0,95,7,116,8,131,0,124,0,95,9,116,8,131, +- 0,124,0,95,10,100,5,83,0,41,6,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,2,0,0,0,3,0,0,0,51,0,0,0, +- 115,24,0,0,0,129,0,124,0,93,7,125,1,124,1,136, +- 0,102,2,86,0,1,0,113,2,100,0,83,0,114,69,0, +- 0,0,114,7,0,0,0,114,43,1,0,0,169,1,114,164, +- 0,0,0,114,7,0,0,0,114,8,0,0,0,114,9,0, +- 0,0,211,5,0,0,115,4,0,0,0,2,128,22,0,122, +- 38,70,105,108,101,70,105,110,100,101,114,46,95,95,105,110, +- 105,116,95,95,46,60,108,111,99,97,108,115,62,46,60,103, +- 101,110,101,120,112,114,62,114,97,0,0,0,114,130,0,0, +- 0,78,41,11,114,191,0,0,0,218,8,95,108,111,97,100, +- 101,114,115,114,65,0,0,0,114,86,0,0,0,114,67,0, +- 0,0,114,18,0,0,0,114,82,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,5,114,143,0,0,0,114,65,0,0,0,218,14,108,111, +- 97,100,101,114,95,100,101,116,97,105,108,115,90,7,108,111, +- 97,100,101,114,115,114,212,0,0,0,114,7,0,0,0,114, +- 95,1,0,0,114,8,0,0,0,114,236,0,0,0,205,5, +- 0,0,115,20,0,0,0,4,4,12,1,26,1,6,1,10, +- 2,10,1,18,1,6,1,8,1,12,1,122,19,70,105,108, +- 101,70,105,110,100,101,114,46,95,95,105,110,105,116,95,95, +- 99,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0, +- 0,2,0,0,0,67,0,0,0,115,10,0,0,0,100,1, +- 124,0,95,0,100,2,83,0,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,130,0,0,0, +- 78,41,1,114,97,1,0,0,114,21,1,0,0,114,7,0, +- 0,0,114,7,0,0,0,114,8,0,0,0,114,78,1,0, +- 0,221,5,0,0,114,81,0,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,99,2,0,0,0,0,0,0, +- 0,0,0,0,0,3,0,0,0,4,0,0,0,67,0,0, +- 0,115,54,0,0,0,116,0,160,1,100,1,116,2,161,2, +- 1,0,124,0,160,3,124,1,161,1,125,2,124,2,100,2, +- 117,0,114,19,100,2,103,0,102,2,83,0,124,2,106,4, +- 124,2,106,5,112,25,103,0,102,2,83,0,41,3,122,197, +- 84,114,121,32,116,111,32,102,105,110,100,32,97,32,108,111, +- 97,100,101,114,32,102,111,114,32,116,104,101,32,115,112,101, +- 99,105,102,105,101,100,32,109,111,100,117,108,101,44,32,111, +- 114,32,116,104,101,32,110,97,109,101,115,112,97,99,101,10, +- 32,32,32,32,32,32,32,32,112,97,99,107,97,103,101,32, +- 112,111,114,116,105,111,110,115,46,32,82,101,116,117,114,110, +- 115,32,40,108,111,97,100,101,114,44,32,108,105,115,116,45, +- 111,102,45,112,111,114,116,105,111,110,115,41,46,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,102,105,110,100,95,115,112,101,99, +- 40,41,32,105,110,115,116,101,97,100,46,10,10,32,32,32, +- 32,32,32,32,32,122,101,70,105,108,101,70,105,110,100,101, +- 114,46,102,105,110,100,95,108,111,97,100,101,114,40,41,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,102,105,110,100,95,115,112, +- 101,99,40,41,32,105,110,115,116,101,97,100,78,41,6,114, +- 99,0,0,0,114,100,0,0,0,114,101,0,0,0,114,226, +- 0,0,0,114,164,0,0,0,114,202,0,0,0,41,3,114, +- 143,0,0,0,114,163,0,0,0,114,210,0,0,0,114,7, +- 0,0,0,114,7,0,0,0,114,8,0,0,0,114,161,0, +- 0,0,227,5,0,0,115,14,0,0,0,6,7,2,2,4, +- 254,10,3,8,1,8,1,16,1,122,22,70,105,108,101,70, +- 105,110,100,101,114,46,102,105,110,100,95,108,111,97,100,101, +- 114,99,6,0,0,0,0,0,0,0,0,0,0,0,7,0, +- 0,0,6,0,0,0,67,0,0,0,115,26,0,0,0,124, +- 1,124,2,124,3,131,2,125,6,116,0,124,2,124,3,124, +- 6,124,4,100,1,141,4,83,0,41,2,78,114,201,0,0, +- 0,41,1,114,213,0,0,0,41,7,114,143,0,0,0,114, +- 211,0,0,0,114,163,0,0,0,114,65,0,0,0,90,4, +- 115,109,115,108,114,225,0,0,0,114,164,0,0,0,114,7, +- 0,0,0,114,7,0,0,0,114,8,0,0,0,114,91,1, +- 0,0,242,5,0,0,115,8,0,0,0,10,1,8,1,2, +- 1,6,255,122,20,70,105,108,101,70,105,110,100,101,114,46, +- 95,103,101,116,95,115,112,101,99,78,99,3,0,0,0,0, +- 0,0,0,0,0,0,0,14,0,0,0,9,0,0,0,67, +- 0,0,0,115,122,1,0,0,100,1,125,3,124,1,160,0, +- 100,2,161,1,100,3,25,0,125,4,122,12,116,1,124,0, +- 106,2,112,17,116,3,160,4,161,0,131,1,106,5,125,5, +- 87,0,110,11,4,0,116,6,121,32,1,0,1,0,1,0, +- 100,4,125,5,89,0,110,1,119,0,124,5,124,0,106,7, +- 107,3,114,45,124,0,160,8,161,0,1,0,124,5,124,0, +- 95,7,116,9,131,0,114,56,124,0,106,10,125,6,124,4, +- 160,11,161,0,125,7,110,5,124,0,106,12,125,6,124,4, +- 125,7,124,7,124,6,118,0,114,108,116,13,124,0,106,2, +- 124,4,131,2,125,8,124,0,106,14,68,0,93,29,92,2, +- 125,9,125,10,100,5,124,9,23,0,125,11,116,13,124,8, +- 124,11,131,2,125,12,116,15,124,12,131,1,114,103,124,0, +- 160,16,124,10,124,1,124,12,124,8,103,1,124,2,161,5, +- 2,0,1,0,83,0,113,74,116,17,124,8,131,1,125,3, +- 124,0,106,14,68,0,93,55,92,2,125,9,125,10,122,10, +- 116,13,124,0,106,2,124,4,124,9,23,0,131,2,125,12, +- 87,0,110,11,4,0,116,18,121,136,1,0,1,0,1,0, +- 89,0,1,0,100,6,83,0,119,0,116,19,106,20,100,7, +- 124,12,100,3,100,8,141,3,1,0,124,7,124,9,23,0, +- 124,6,118,0,114,166,116,15,124,12,131,1,114,166,124,0, +- 160,16,124,10,124,1,124,12,100,6,124,2,161,5,2,0, +- 1,0,83,0,113,111,124,3,114,187,116,19,160,20,100,9, +- 124,8,161,2,1,0,116,19,160,21,124,1,100,6,161,2, +- 125,13,124,8,103,1,124,13,95,22,124,13,83,0,100,6, +- 83,0,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,97,0,0,0,114,44,0,0,0, +- 114,130,0,0,0,114,236,0,0,0,78,122,9,116,114,121, +- 105,110,103,32,123,125,41,1,90,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,104,0,0,0,114,75,0,0,0,114,65,0,0,0,114, +- 18,0,0,0,114,82,0,0,0,114,35,1,0,0,114,76, +- 0,0,0,114,97,1,0,0,218,11,95,102,105,108,108,95, +- 99,97,99,104,101,114,21,0,0,0,114,100,1,0,0,114, +- 131,0,0,0,114,99,1,0,0,114,67,0,0,0,114,96, +- 1,0,0,114,80,0,0,0,114,91,1,0,0,114,83,0, +- 0,0,114,111,0,0,0,114,159,0,0,0,114,173,0,0, +- 0,114,207,0,0,0,114,202,0,0,0,41,14,114,143,0, +- 0,0,114,163,0,0,0,114,225,0,0,0,90,12,105,115, +- 95,110,97,109,101,115,112,97,99,101,90,11,116,97,105,108, +- 95,109,111,100,117,108,101,114,193,0,0,0,90,5,99,97, +- 99,104,101,90,12,99,97,99,104,101,95,109,111,100,117,108, +- 101,90,9,98,97,115,101,95,112,97,116,104,114,44,1,0, +- 0,114,211,0,0,0,90,13,105,110,105,116,95,102,105,108, +- 101,110,97,109,101,90,9,102,117,108,108,95,112,97,116,104, +- 114,210,0,0,0,114,7,0,0,0,114,7,0,0,0,114, +- 8,0,0,0,114,226,0,0,0,247,5,0,0,115,86,0, +- 0,0,4,5,14,1,2,1,24,1,12,1,8,1,2,255, +- 10,2,8,1,6,1,6,2,6,1,10,1,6,2,4,1, +- 8,2,12,1,14,1,8,1,10,1,8,1,24,1,2,255, +- 8,5,14,2,2,1,20,1,12,1,8,1,2,255,16,2, +- 12,1,8,1,10,1,4,1,8,255,2,128,4,2,12,1, +- 12,1,8,1,4,1,4,1,122,20,70,105,108,101,70,105, +- 110,100,101,114,46,102,105,110,100,95,115,112,101,99,99,1, +- 0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,10, +- 0,0,0,67,0,0,0,115,192,0,0,0,124,0,106,0, +- 125,1,122,11,116,1,160,2,124,1,112,11,116,1,160,3, +- 161,0,161,1,125,2,87,0,110,14,4,0,116,4,116,5, +- 116,6,102,3,121,28,1,0,1,0,1,0,103,0,125,2, +- 89,0,110,1,119,0,116,7,106,8,160,9,100,1,161,1, +- 115,41,116,10,124,2,131,1,124,0,95,11,110,37,116,10, +- 131,0,125,3,124,2,68,0,93,28,125,4,124,4,160,12, +- 100,2,161,1,92,3,125,5,125,6,125,7,124,6,114,67, +- 100,3,160,13,124,5,124,7,160,14,161,0,161,2,125,8, +- 110,2,124,5,125,8,124,3,160,15,124,8,161,1,1,0, +- 113,46,124,3,124,0,95,11,116,7,106,8,160,9,116,16, +- 161,1,114,94,100,4,100,5,132,0,124,2,68,0,131,1, +- 124,0,95,17,100,6,83,0,100,6,83,0,41,7,122,68, +- 70,105,108,108,32,116,104,101,32,99,97,99,104,101,32,111, +- 102,32,112,111,116,101,110,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,97,0,0,0,114,88, +- 0,0,0,99,1,0,0,0,0,0,0,0,0,0,0,0, +- 2,0,0,0,4,0,0,0,83,0,0,0,115,20,0,0, +- 0,104,0,124,0,93,6,125,1,124,1,160,0,161,0,146, +- 2,113,2,83,0,114,7,0,0,0,41,1,114,131,0,0, +- 0,41,2,114,5,0,0,0,90,2,102,110,114,7,0,0, +- 0,114,7,0,0,0,114,8,0,0,0,114,13,0,0,0, +- 71,6,0,0,115,2,0,0,0,20,0,122,41,70,105,108, +- 101,70,105,110,100,101,114,46,95,102,105,108,108,95,99,97, +- 99,104,101,46,60,108,111,99,97,108,115,62,46,60,115,101, +- 116,99,111,109,112,62,78,41,18,114,65,0,0,0,114,18, +- 0,0,0,90,7,108,105,115,116,100,105,114,114,82,0,0, +- 0,114,85,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,15,0,0,0, +- 114,25,0,0,0,114,26,0,0,0,114,98,1,0,0,114, +- 99,1,0,0,114,126,0,0,0,114,89,0,0,0,114,131, +- 0,0,0,218,3,97,100,100,114,27,0,0,0,114,100,1, +- 0,0,41,9,114,143,0,0,0,114,65,0,0,0,90,8, +- 99,111,110,116,101,110,116,115,90,21,108,111,119,101,114,95, +- 115,117,102,102,105,120,95,99,111,110,116,101,110,116,115,114, +- 70,1,0,0,114,141,0,0,0,114,54,1,0,0,114,44, +- 1,0,0,90,8,110,101,119,95,110,97,109,101,114,7,0, +- 0,0,114,7,0,0,0,114,8,0,0,0,114,102,1,0, +- 0,42,6,0,0,115,38,0,0,0,6,2,2,1,22,1, +- 18,1,8,3,2,253,12,6,12,1,6,7,8,1,16,1, +- 4,1,18,1,4,2,12,1,6,1,12,1,20,1,4,255, +- 122,22,70,105,108,101,70,105,110,100,101,114,46,95,102,105, +- 108,108,95,99,97,99,104,101,99,1,0,0,0,0,0,0, +- 0,0,0,0,0,3,0,0,0,3,0,0,0,7,0,0, +- 0,115,18,0,0,0,135,0,135,1,102,2,100,1,100,2, +- 132,8,125,2,124,2,83,0,41,4,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, +- 1,0,0,0,4,0,0,0,19,0,0,0,115,36,0,0, +- 0,116,0,124,0,131,1,115,10,116,1,100,1,124,0,100, +- 2,141,2,130,1,136,0,124,0,103,1,136,1,162,1,82, +- 0,142,0,83,0,41,4,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,71,0,0,0,78,41,2,114,83, +- 0,0,0,114,142,0,0,0,114,71,0,0,0,169,2,114, +- 221,0,0,0,114,101,1,0,0,114,7,0,0,0,114,8, +- 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,83,6,0, +- 0,115,6,0,0,0,8,2,12,1,16,1,122,54,70,105, +- 108,101,70,105,110,100,101,114,46,112,97,116,104,95,104,111, +- 111,107,46,60,108,111,99,97,108,115,62,46,112,97,116,104, +- 95,104,111,111,107,95,102,111,114,95,70,105,108,101,70,105, +- 110,100,101,114,78,114,7,0,0,0,41,3,114,221,0,0, +- 0,114,101,1,0,0,114,107,1,0,0,114,7,0,0,0, +- 114,106,1,0,0,114,8,0,0,0,218,9,112,97,116,104, +- 95,104,111,111,107,73,6,0,0,115,4,0,0,0,14,10, +- 4,6,122,20,70,105,108,101,70,105,110,100,101,114,46,112, +- 97,116,104,95,104,111,111,107,99,1,0,0,0,0,0,0, +- 0,0,0,0,0,1,0,0,0,3,0,0,0,67,0,0, +- 0,114,67,1,0,0,41,2,78,122,16,70,105,108,101,70, +- 105,110,100,101,114,40,123,33,114,125,41,41,2,114,89,0, +- 0,0,114,65,0,0,0,114,21,1,0,0,114,7,0,0, +- 0,114,7,0,0,0,114,8,0,0,0,114,68,1,0,0, +- 91,6,0,0,114,61,1,0,0,122,19,70,105,108,101,70, +- 105,110,100,101,114,46,95,95,114,101,112,114,95,95,114,69, +- 0,0,0,41,15,114,150,0,0,0,114,149,0,0,0,114, +- 151,0,0,0,114,152,0,0,0,114,236,0,0,0,114,78, +- 1,0,0,114,167,0,0,0,114,229,0,0,0,114,161,0, +- 0,0,114,91,1,0,0,114,226,0,0,0,114,102,1,0, +- 0,114,234,0,0,0,114,108,1,0,0,114,68,1,0,0, +- 114,7,0,0,0,114,7,0,0,0,114,7,0,0,0,114, +- 8,0,0,0,114,94,1,0,0,196,5,0,0,115,24,0, +- 0,0,8,0,4,2,8,7,8,16,4,4,8,2,8,15, +- 10,5,8,51,2,31,10,1,12,17,114,94,1,0,0,99, +- 4,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0, +- 8,0,0,0,67,0,0,0,115,144,0,0,0,124,0,160, +- 0,100,1,161,1,125,4,124,0,160,0,100,2,161,1,125, +- 5,124,4,115,33,124,5,114,18,124,5,106,1,125,4,110, +- 15,124,2,124,3,107,2,114,28,116,2,124,1,124,2,131, +- 2,125,4,110,5,116,3,124,1,124,2,131,2,125,4,124, +- 5,115,42,116,4,124,1,124,2,124,4,100,3,141,3,125, +- 5,122,19,124,5,124,0,100,2,60,0,124,4,124,0,100, +- 1,60,0,124,2,124,0,100,4,60,0,124,3,124,0,100, +- 5,60,0,87,0,100,0,83,0,4,0,116,5,121,71,1, +- 0,1,0,1,0,89,0,100,0,83,0,119,0,41,6,78, +- 218,10,95,95,108,111,97,100,101,114,95,95,218,8,95,95, +- 115,112,101,99,95,95,114,95,1,0,0,90,8,95,95,102, +- 105,108,101,95,95,90,10,95,95,99,97,99,104,101,100,95, +- 95,41,6,218,3,103,101,116,114,164,0,0,0,114,41,1, +- 0,0,114,34,1,0,0,114,213,0,0,0,218,9,69,120, +- 99,101,112,116,105,111,110,41,6,90,2,110,115,114,141,0, +- 0,0,90,8,112,97,116,104,110,97,109,101,90,9,99,112, +- 97,116,104,110,97,109,101,114,164,0,0,0,114,210,0,0, +- 0,114,7,0,0,0,114,7,0,0,0,114,8,0,0,0, +- 218,14,95,102,105,120,95,117,112,95,109,111,100,117,108,101, +- 97,6,0,0,115,36,0,0,0,10,2,10,1,4,1,4, +- 1,8,1,8,1,12,1,10,2,4,1,14,1,2,1,8, +- 1,8,1,8,1,14,1,12,1,6,2,2,254,114,113,1, +- 0,0,99,0,0,0,0,0,0,0,0,0,0,0,0,3, +- 0,0,0,3,0,0,0,67,0,0,0,115,38,0,0,0, +- 116,0,116,1,160,2,161,0,102,2,125,0,116,3,116,4, +- 102,2,125,1,116,5,116,6,102,2,125,2,124,0,124,1, +- 124,2,103,3,83,0,41,2,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,78,41,7,114,30,1,0, +- 0,114,187,0,0,0,218,18,101,120,116,101,110,115,105,111, +- 110,95,115,117,102,102,105,120,101,115,114,34,1,0,0,114, +- 127,0,0,0,114,41,1,0,0,114,113,0,0,0,41,3, +- 90,10,101,120,116,101,110,115,105,111,110,115,90,6,115,111, +- 117,114,99,101,90,8,98,121,116,101,99,111,100,101,114,7, +- 0,0,0,114,7,0,0,0,114,8,0,0,0,114,208,0, +- 0,0,120,6,0,0,115,8,0,0,0,12,5,8,1,8, +- 1,10,1,114,208,0,0,0,99,1,0,0,0,0,0,0, +- 0,0,0,0,0,1,0,0,0,1,0,0,0,67,0,0, +- 0,115,8,0,0,0,124,0,97,0,100,0,83,0,114,69, +- 0,0,0,41,1,114,159,0,0,0,41,1,218,17,95,98, +- 111,111,116,115,116,114,97,112,95,109,111,100,117,108,101,114, +- 7,0,0,0,114,7,0,0,0,114,8,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,131,6,0,0,115,2,0,0,0,8,2, +- 114,116,1,0,0,99,1,0,0,0,0,0,0,0,0,0, +- 0,0,2,0,0,0,4,0,0,0,67,0,0,0,115,50, +- 0,0,0,116,0,124,0,131,1,1,0,116,1,131,0,125, +- 1,116,2,106,3,160,4,116,5,106,6,124,1,142,0,103, +- 1,161,1,1,0,116,2,106,7,160,8,116,9,161,1,1, +- 0,100,1,83,0,41,2,122,41,73,110,115,116,97,108,108, +- 32,116,104,101,32,112,97,116,104,45,98,97,115,101,100,32, +- 105,109,112,111,114,116,32,99,111,109,112,111,110,101,110,116, +- 115,46,78,41,10,114,116,1,0,0,114,208,0,0,0,114, +- 15,0,0,0,114,83,1,0,0,114,191,0,0,0,114,94, +- 1,0,0,114,108,1,0,0,218,9,109,101,116,97,95,112, +- 97,116,104,114,61,0,0,0,114,77,1,0,0,41,2,114, +- 115,1,0,0,90,17,115,117,112,112,111,114,116,101,100,95, +- 108,111,97,100,101,114,115,114,7,0,0,0,114,7,0,0, +- 0,114,8,0,0,0,218,8,95,105,110,115,116,97,108,108, +- 136,6,0,0,115,8,0,0,0,8,2,6,1,20,1,16, +- 1,114,118,1,0,0,41,1,114,87,0,0,0,114,69,0, +- 0,0,41,3,78,78,78,41,2,114,0,0,0,0,114,0, +- 0,0,0,41,1,84,41,85,114,152,0,0,0,114,159,0, +- 0,0,114,187,0,0,0,114,91,0,0,0,114,15,0,0, +- 0,114,99,0,0,0,114,184,0,0,0,114,25,0,0,0, +- 114,231,0,0,0,90,2,110,116,114,18,0,0,0,114,215, +- 0,0,0,90,5,112,111,115,105,120,114,50,0,0,0,218, +- 3,97,108,108,114,59,0,0,0,114,136,0,0,0,114,57, +- 0,0,0,114,62,0,0,0,90,20,95,112,97,116,104,115, +- 101,112,115,95,119,105,116,104,95,99,111,108,111,110,114,28, +- 0,0,0,90,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,27,0,0,0,114, +- 29,0,0,0,114,21,0,0,0,114,36,0,0,0,114,42, +- 0,0,0,114,45,0,0,0,114,67,0,0,0,114,74,0, +- 0,0,114,75,0,0,0,114,79,0,0,0,114,80,0,0, +- 0,114,83,0,0,0,114,86,0,0,0,114,95,0,0,0, +- 218,4,116,121,112,101,218,8,95,95,99,111,100,101,95,95, +- 114,186,0,0,0,114,34,0,0,0,114,172,0,0,0,114, +- 33,0,0,0,114,39,0,0,0,114,8,1,0,0,114,116, +- 0,0,0,114,112,0,0,0,114,127,0,0,0,114,61,0, +- 0,0,114,114,1,0,0,114,232,0,0,0,114,113,0,0, +- 0,90,23,68,69,66,85,71,95,66,89,84,69,67,79,68, +- 69,95,83,85,70,70,73,88,69,83,90,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,121,0,0,0,114,128,0,0, +- 0,114,135,0,0,0,114,137,0,0,0,114,139,0,0,0, +- 114,160,0,0,0,114,167,0,0,0,114,176,0,0,0,114, +- 180,0,0,0,114,182,0,0,0,114,189,0,0,0,114,194, +- 0,0,0,114,195,0,0,0,114,200,0,0,0,218,6,111, +- 98,106,101,99,116,114,209,0,0,0,114,213,0,0,0,114, +- 214,0,0,0,114,235,0,0,0,114,249,0,0,0,114,11, +- 1,0,0,114,34,1,0,0,114,41,1,0,0,114,30,1, +- 0,0,114,47,1,0,0,114,73,1,0,0,114,77,1,0, +- 0,114,94,1,0,0,114,113,1,0,0,114,208,0,0,0, +- 114,116,1,0,0,114,118,1,0,0,114,7,0,0,0,114, +- 7,0,0,0,114,7,0,0,0,114,8,0,0,0,218,8, +- 60,109,111,100,117,108,101,62,1,0,0,0,115,180,0,0, +- 0,4,0,4,22,8,3,8,1,8,1,8,1,8,1,10, +- 3,4,1,8,1,10,1,8,2,4,3,10,1,6,2,22, +- 2,8,1,8,1,10,1,14,1,4,4,4,1,2,1,2, +- 1,4,255,8,4,6,16,8,3,8,5,8,5,4,6,10, +- 1,8,30,8,6,8,8,8,10,8,9,8,5,4,7,10, +- 1,8,8,10,5,10,22,0,127,16,30,12,1,4,2,4, +- 1,6,2,4,1,10,1,8,2,6,2,8,2,16,2,8, +- 71,8,40,8,19,8,12,8,12,8,31,8,20,8,33,8, +- 28,10,24,10,13,10,10,8,11,6,14,4,3,2,1,12, +- 255,14,73,14,67,16,30,0,127,14,17,18,50,18,45,18, +- 25,14,53,14,63,14,49,0,127,14,29,0,127,10,30,8, +- 23,8,11,12,5, ++ 99,97,99,104,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, ++ 102,105,110,100,95,115,112,101,99,40,41,32,105,110,115,116, ++ 101,97,100,46,10,10,32,32,32,32,32,32,32,32,122,101, ++ 80,97,116,104,70,105,110,100,101,114,46,102,105,110,100,95, ++ 109,111,100,117,108,101,40,41,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,102,105,110,100,95,115,112,101,99,40,41,32,105,110, ++ 115,116,101,97,100,78,114,228,0,0,0,114,229,0,0,0, ++ 114,8,0,0,0,114,8,0,0,0,114,9,0,0,0,114, ++ 230,0,0,0,170,5,0,0,115,14,0,0,0,6,8,2, ++ 2,4,254,12,3,8,1,4,1,6,1,122,22,80,97,116, ++ 104,70,105,110,100,101,114,46,102,105,110,100,95,109,111,100, ++ 117,108,101,99,0,0,0,0,0,0,0,0,0,0,0,0, ++ 3,0,0,0,4,0,0,0,79,0,0,0,115,28,0,0, ++ 0,100,1,100,2,108,0,109,1,125,2,1,0,124,2,106, ++ 2,124,0,105,0,124,1,164,1,142,1,83,0,41,4,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,0,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,78, ++ 41,3,90,18,105,109,112,111,114,116,108,105,98,46,109,101, ++ 116,97,100,97,116,97,114,93,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,145,0,0,0,114,146,0,0,0,114,93,1,0,0, ++ 114,8,0,0,0,114,8,0,0,0,114,9,0,0,0,114, ++ 94,1,0,0,186,5,0,0,115,4,0,0,0,12,10,16, ++ 1,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, ++ 114,71,0,0,0,114,231,0,0,0,41,14,114,151,0,0, ++ 0,114,150,0,0,0,114,152,0,0,0,114,153,0,0,0, ++ 114,234,0,0,0,114,79,1,0,0,114,85,1,0,0,114, ++ 235,0,0,0,114,88,1,0,0,114,89,1,0,0,114,92, ++ 1,0,0,114,227,0,0,0,114,230,0,0,0,114,94,1, ++ 0,0,114,8,0,0,0,114,8,0,0,0,114,8,0,0, ++ 0,114,9,0,0,0,114,78,1,0,0,44,5,0,0,115, ++ 36,0,0,0,8,0,4,2,2,2,10,1,2,9,10,1, ++ 2,12,10,1,2,21,10,1,2,20,12,1,2,31,12,1, ++ 2,23,12,1,2,15,14,1,114,78,1,0,0,99,0,0, ++ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0, ++ 0,0,64,0,0,0,115,90,0,0,0,101,0,90,1,100, ++ 0,90,2,100,1,90,3,100,2,100,3,132,0,90,4,100, ++ 4,100,5,132,0,90,5,101,6,90,7,100,6,100,7,132, ++ 0,90,8,100,8,100,9,132,0,90,9,100,19,100,11,100, ++ 12,132,1,90,10,100,13,100,14,132,0,90,11,101,12,100, ++ 15,100,16,132,0,131,1,90,13,100,17,100,18,132,0,90, ++ 14,100,10,83,0,41,20,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,6,0,0,0,7,0,0,0,115,112,0,0,0,103, ++ 0,125,3,124,2,68,0,93,16,92,2,137,0,125,4,124, ++ 3,160,0,135,0,102,1,100,1,100,2,132,8,124,4,68, ++ 0,131,1,161,1,1,0,113,4,124,3,124,0,95,1,124, ++ 1,112,27,100,3,124,0,95,2,116,3,124,0,106,2,131, ++ 1,115,43,116,4,116,5,160,6,161,0,124,0,106,2,131, ++ 2,124,0,95,2,100,4,124,0,95,7,116,8,131,0,124, ++ 0,95,9,116,8,131,0,124,0,95,10,100,5,83,0,41, ++ 6,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,2,0,0,0,3,0, ++ 0,0,51,0,0,0,115,24,0,0,0,129,0,124,0,93, ++ 7,125,1,124,1,136,0,102,2,86,0,1,0,113,2,100, ++ 0,83,0,114,71,0,0,0,114,8,0,0,0,114,44,1, ++ 0,0,169,1,114,165,0,0,0,114,8,0,0,0,114,9, ++ 0,0,0,114,10,0,0,0,215,5,0,0,115,4,0,0, ++ 0,2,128,22,0,122,38,70,105,108,101,70,105,110,100,101, ++ 114,46,95,95,105,110,105,116,95,95,46,60,108,111,99,97, ++ 108,115,62,46,60,103,101,110,101,120,112,114,62,114,99,0, ++ 0,0,114,3,0,0,0,78,41,11,114,192,0,0,0,218, ++ 8,95,108,111,97,100,101,114,115,114,67,0,0,0,114,88, ++ 0,0,0,114,69,0,0,0,114,19,0,0,0,114,84,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,5,114,144,0,0,0,114,67,0, ++ 0,0,218,14,108,111,97,100,101,114,95,100,101,116,97,105, ++ 108,115,90,7,108,111,97,100,101,114,115,114,213,0,0,0, ++ 114,8,0,0,0,114,96,1,0,0,114,9,0,0,0,114, ++ 237,0,0,0,209,5,0,0,115,20,0,0,0,4,4,12, ++ 1,26,1,6,1,10,2,10,1,18,1,6,1,8,1,12, ++ 1,122,19,70,105,108,101,70,105,110,100,101,114,46,95,95, ++ 105,110,105,116,95,95,99,1,0,0,0,0,0,0,0,0, ++ 0,0,0,1,0,0,0,2,0,0,0,67,0,0,0,115, ++ 10,0,0,0,100,1,124,0,95,0,100,2,83,0,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,3,0,0,0,78,41,1,114,98,1,0,0,114,22, ++ 1,0,0,114,8,0,0,0,114,8,0,0,0,114,9,0, ++ 0,0,114,79,1,0,0,225,5,0,0,114,83,0,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,99,2, ++ 0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,4, ++ 0,0,0,67,0,0,0,115,54,0,0,0,116,0,160,1, ++ 100,1,116,2,161,2,1,0,124,0,160,3,124,1,161,1, ++ 125,2,124,2,100,2,117,0,114,19,100,2,103,0,102,2, ++ 83,0,124,2,106,4,124,2,106,5,112,25,103,0,102,2, ++ 83,0,41,3,122,197,84,114,121,32,116,111,32,102,105,110, ++ 100,32,97,32,108,111,97,100,101,114,32,102,111,114,32,116, ++ 104,101,32,115,112,101,99,105,102,105,101,100,32,109,111,100, ++ 117,108,101,44,32,111,114,32,116,104,101,32,110,97,109,101, ++ 115,112,97,99,101,10,32,32,32,32,32,32,32,32,112,97, ++ 99,107,97,103,101,32,112,111,114,116,105,111,110,115,46,32, ++ 82,101,116,117,114,110,115,32,40,108,111,97,100,101,114,44, ++ 32,108,105,115,116,45,111,102,45,112,111,114,116,105,111,110, ++ 115,41,46,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,102,105,110, ++ 100,95,115,112,101,99,40,41,32,105,110,115,116,101,97,100, ++ 46,10,10,32,32,32,32,32,32,32,32,122,101,70,105,108, ++ 101,70,105,110,100,101,114,46,102,105,110,100,95,108,111,97, ++ 100,101,114,40,41,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,102, ++ 105,110,100,95,115,112,101,99,40,41,32,105,110,115,116,101, ++ 97,100,78,41,6,114,101,0,0,0,114,102,0,0,0,114, ++ 103,0,0,0,114,227,0,0,0,114,165,0,0,0,114,203, ++ 0,0,0,41,3,114,144,0,0,0,114,164,0,0,0,114, ++ 211,0,0,0,114,8,0,0,0,114,8,0,0,0,114,9, ++ 0,0,0,114,162,0,0,0,231,5,0,0,115,14,0,0, ++ 0,6,7,2,2,4,254,10,3,8,1,8,1,16,1,122, ++ 22,70,105,108,101,70,105,110,100,101,114,46,102,105,110,100, ++ 95,108,111,97,100,101,114,99,6,0,0,0,0,0,0,0, ++ 0,0,0,0,7,0,0,0,6,0,0,0,67,0,0,0, ++ 115,26,0,0,0,124,1,124,2,124,3,131,2,125,6,116, ++ 0,124,2,124,3,124,6,124,4,100,1,141,4,83,0,41, ++ 2,78,114,202,0,0,0,41,1,114,214,0,0,0,41,7, ++ 114,144,0,0,0,114,212,0,0,0,114,164,0,0,0,114, ++ 67,0,0,0,90,4,115,109,115,108,114,226,0,0,0,114, ++ 165,0,0,0,114,8,0,0,0,114,8,0,0,0,114,9, ++ 0,0,0,114,92,1,0,0,246,5,0,0,115,8,0,0, ++ 0,10,1,8,1,2,1,6,255,122,20,70,105,108,101,70, ++ 105,110,100,101,114,46,95,103,101,116,95,115,112,101,99,78, ++ 99,3,0,0,0,0,0,0,0,0,0,0,0,14,0,0, ++ 0,9,0,0,0,67,0,0,0,115,122,1,0,0,100,1, ++ 125,3,124,1,160,0,100,2,161,1,100,3,25,0,125,4, ++ 122,12,116,1,124,0,106,2,112,17,116,3,160,4,161,0, ++ 131,1,106,5,125,5,87,0,110,11,4,0,116,6,121,32, ++ 1,0,1,0,1,0,100,4,125,5,89,0,110,1,119,0, ++ 124,5,124,0,106,7,107,3,114,45,124,0,160,8,161,0, ++ 1,0,124,5,124,0,95,7,116,9,131,0,114,56,124,0, ++ 106,10,125,6,124,4,160,11,161,0,125,7,110,5,124,0, ++ 106,12,125,6,124,4,125,7,124,7,124,6,118,0,114,108, ++ 116,13,124,0,106,2,124,4,131,2,125,8,124,0,106,14, ++ 68,0,93,29,92,2,125,9,125,10,100,5,124,9,23,0, ++ 125,11,116,13,124,8,124,11,131,2,125,12,116,15,124,12, ++ 131,1,114,103,124,0,160,16,124,10,124,1,124,12,124,8, ++ 103,1,124,2,161,5,2,0,1,0,83,0,113,74,116,17, ++ 124,8,131,1,125,3,124,0,106,14,68,0,93,55,92,2, ++ 125,9,125,10,122,10,116,13,124,0,106,2,124,4,124,9, ++ 23,0,131,2,125,12,87,0,110,11,4,0,116,18,121,136, ++ 1,0,1,0,1,0,89,0,1,0,100,6,83,0,119,0, ++ 116,19,106,20,100,7,124,12,100,3,100,8,141,3,1,0, ++ 124,7,124,9,23,0,124,6,118,0,114,166,116,15,124,12, ++ 131,1,114,166,124,0,160,16,124,10,124,1,124,12,100,6, ++ 124,2,161,5,2,0,1,0,83,0,113,111,124,3,114,187, ++ 116,19,160,20,100,9,124,8,161,2,1,0,116,19,160,21, ++ 124,1,100,6,161,2,125,13,124,8,103,1,124,13,95,22, ++ 124,13,83,0,100,6,83,0,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,99,0,0, ++ 0,114,46,0,0,0,114,3,0,0,0,114,237,0,0,0, ++ 78,122,9,116,114,121,105,110,103,32,123,125,41,1,90,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,106,0,0,0,114,77,0,0,0, ++ 114,67,0,0,0,114,19,0,0,0,114,84,0,0,0,114, ++ 36,1,0,0,114,78,0,0,0,114,98,1,0,0,218,11, ++ 95,102,105,108,108,95,99,97,99,104,101,114,23,0,0,0, ++ 114,101,1,0,0,114,132,0,0,0,114,100,1,0,0,114, ++ 69,0,0,0,114,97,1,0,0,114,82,0,0,0,114,92, ++ 1,0,0,114,85,0,0,0,114,113,0,0,0,114,160,0, ++ 0,0,114,174,0,0,0,114,208,0,0,0,114,203,0,0, ++ 0,41,14,114,144,0,0,0,114,164,0,0,0,114,226,0, ++ 0,0,90,12,105,115,95,110,97,109,101,115,112,97,99,101, ++ 90,11,116,97,105,108,95,109,111,100,117,108,101,114,194,0, ++ 0,0,90,5,99,97,99,104,101,90,12,99,97,99,104,101, ++ 95,109,111,100,117,108,101,90,9,98,97,115,101,95,112,97, ++ 116,104,114,45,1,0,0,114,212,0,0,0,90,13,105,110, ++ 105,116,95,102,105,108,101,110,97,109,101,90,9,102,117,108, ++ 108,95,112,97,116,104,114,211,0,0,0,114,8,0,0,0, ++ 114,8,0,0,0,114,9,0,0,0,114,227,0,0,0,251, ++ 5,0,0,115,86,0,0,0,4,5,14,1,2,1,24,1, ++ 12,1,8,1,2,255,10,2,8,1,6,1,6,2,6,1, ++ 10,1,6,2,4,1,8,2,12,1,14,1,8,1,10,1, ++ 8,1,24,1,2,255,8,5,14,2,2,1,20,1,12,1, ++ 8,1,2,255,16,2,12,1,8,1,10,1,4,1,8,255, ++ 2,128,4,2,12,1,12,1,8,1,4,1,4,1,122,20, ++ 70,105,108,101,70,105,110,100,101,114,46,102,105,110,100,95, ++ 115,112,101,99,99,1,0,0,0,0,0,0,0,0,0,0, ++ 0,9,0,0,0,10,0,0,0,67,0,0,0,115,192,0, ++ 0,0,124,0,106,0,125,1,122,11,116,1,160,2,124,1, ++ 112,11,116,1,160,3,161,0,161,1,125,2,87,0,110,14, ++ 4,0,116,4,116,5,116,6,102,3,121,28,1,0,1,0, ++ 1,0,103,0,125,2,89,0,110,1,119,0,116,7,106,8, ++ 160,9,100,1,161,1,115,41,116,10,124,2,131,1,124,0, ++ 95,11,110,37,116,10,131,0,125,3,124,2,68,0,93,28, ++ 125,4,124,4,160,12,100,2,161,1,92,3,125,5,125,6, ++ 125,7,124,6,114,67,100,3,160,13,124,5,124,7,160,14, ++ 161,0,161,2,125,8,110,2,124,5,125,8,124,3,160,15, ++ 124,8,161,1,1,0,113,46,124,3,124,0,95,11,116,7, ++ 106,8,160,9,116,16,161,1,114,94,100,4,100,5,132,0, ++ 124,2,68,0,131,1,124,0,95,17,100,6,83,0,100,6, ++ 83,0,41,7,122,68,70,105,108,108,32,116,104,101,32,99, ++ 97,99,104,101,32,111,102,32,112,111,116,101,110,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,15,0,0,0,114, ++ 99,0,0,0,114,90,0,0,0,99,1,0,0,0,0,0, ++ 0,0,0,0,0,0,2,0,0,0,4,0,0,0,83,0, ++ 0,0,115,20,0,0,0,104,0,124,0,93,6,125,1,124, ++ 1,160,0,161,0,146,2,113,2,83,0,114,8,0,0,0, ++ 41,1,114,132,0,0,0,41,2,114,6,0,0,0,90,2, ++ 102,110,114,8,0,0,0,114,8,0,0,0,114,9,0,0, ++ 0,114,14,0,0,0,75,6,0,0,115,2,0,0,0,20, ++ 0,122,41,70,105,108,101,70,105,110,100,101,114,46,95,102, ++ 105,108,108,95,99,97,99,104,101,46,60,108,111,99,97,108, ++ 115,62,46,60,115,101,116,99,111,109,112,62,78,41,18,114, ++ 67,0,0,0,114,19,0,0,0,90,7,108,105,115,116,100, ++ 105,114,114,84,0,0,0,114,86,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,16,0,0,0,114,27,0,0,0,114,28,0,0,0, ++ 114,99,1,0,0,114,100,1,0,0,114,128,0,0,0,114, ++ 91,0,0,0,114,132,0,0,0,218,3,97,100,100,114,29, ++ 0,0,0,114,101,1,0,0,41,9,114,144,0,0,0,114, ++ 67,0,0,0,90,8,99,111,110,116,101,110,116,115,90,21, ++ 108,111,119,101,114,95,115,117,102,102,105,120,95,99,111,110, ++ 116,101,110,116,115,114,71,1,0,0,114,142,0,0,0,114, ++ 55,1,0,0,114,45,1,0,0,90,8,110,101,119,95,110, ++ 97,109,101,114,8,0,0,0,114,8,0,0,0,114,9,0, ++ 0,0,114,103,1,0,0,46,6,0,0,115,38,0,0,0, ++ 6,2,2,1,22,1,18,1,8,3,2,253,12,6,12,1, ++ 6,7,8,1,16,1,4,1,18,1,4,2,12,1,6,1, ++ 12,1,20,1,4,255,122,22,70,105,108,101,70,105,110,100, ++ 101,114,46,95,102,105,108,108,95,99,97,99,104,101,99,1, ++ 0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,3, ++ 0,0,0,7,0,0,0,115,18,0,0,0,135,0,135,1, ++ 102,2,100,1,100,2,132,8,125,2,124,2,83,0,41,4, ++ 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,1,0,0,0,4,0,0,0,19,0, ++ 0,0,115,36,0,0,0,116,0,124,0,131,1,115,10,116, ++ 1,100,1,124,0,100,2,141,2,130,1,136,0,124,0,103, ++ 1,136,1,162,1,82,0,142,0,83,0,41,4,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,73,0,0, ++ 0,78,41,2,114,85,0,0,0,114,143,0,0,0,114,73, ++ 0,0,0,169,2,114,222,0,0,0,114,102,1,0,0,114, ++ 8,0,0,0,114,9,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,87,6,0,0,115,6,0,0,0,8,2,12,1, ++ 16,1,122,54,70,105,108,101,70,105,110,100,101,114,46,112, ++ 97,116,104,95,104,111,111,107,46,60,108,111,99,97,108,115, ++ 62,46,112,97,116,104,95,104,111,111,107,95,102,111,114,95, ++ 70,105,108,101,70,105,110,100,101,114,78,114,8,0,0,0, ++ 41,3,114,222,0,0,0,114,102,1,0,0,114,108,1,0, ++ 0,114,8,0,0,0,114,107,1,0,0,114,9,0,0,0, ++ 218,9,112,97,116,104,95,104,111,111,107,77,6,0,0,115, ++ 4,0,0,0,14,10,4,6,122,20,70,105,108,101,70,105, ++ 110,100,101,114,46,112,97,116,104,95,104,111,111,107,99,1, ++ 0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,3, ++ 0,0,0,67,0,0,0,114,68,1,0,0,41,2,78,122, ++ 16,70,105,108,101,70,105,110,100,101,114,40,123,33,114,125, ++ 41,41,2,114,91,0,0,0,114,67,0,0,0,114,22,1, ++ 0,0,114,8,0,0,0,114,8,0,0,0,114,9,0,0, ++ 0,114,69,1,0,0,95,6,0,0,114,62,1,0,0,122, ++ 19,70,105,108,101,70,105,110,100,101,114,46,95,95,114,101, ++ 112,114,95,95,114,71,0,0,0,41,15,114,151,0,0,0, ++ 114,150,0,0,0,114,152,0,0,0,114,153,0,0,0,114, ++ 237,0,0,0,114,79,1,0,0,114,168,0,0,0,114,230, ++ 0,0,0,114,162,0,0,0,114,92,1,0,0,114,227,0, ++ 0,0,114,103,1,0,0,114,235,0,0,0,114,109,1,0, ++ 0,114,69,1,0,0,114,8,0,0,0,114,8,0,0,0, ++ 114,8,0,0,0,114,9,0,0,0,114,95,1,0,0,200, ++ 5,0,0,115,24,0,0,0,8,0,4,2,8,7,8,16, ++ 4,4,8,2,8,15,10,5,8,51,2,31,10,1,12,17, ++ 114,95,1,0,0,99,4,0,0,0,0,0,0,0,0,0, ++ 0,0,6,0,0,0,8,0,0,0,67,0,0,0,115,144, ++ 0,0,0,124,0,160,0,100,1,161,1,125,4,124,0,160, ++ 0,100,2,161,1,125,5,124,4,115,33,124,5,114,18,124, ++ 5,106,1,125,4,110,15,124,2,124,3,107,2,114,28,116, ++ 2,124,1,124,2,131,2,125,4,110,5,116,3,124,1,124, ++ 2,131,2,125,4,124,5,115,42,116,4,124,1,124,2,124, ++ 4,100,3,141,3,125,5,122,19,124,5,124,0,100,2,60, ++ 0,124,4,124,0,100,1,60,0,124,2,124,0,100,4,60, ++ 0,124,3,124,0,100,5,60,0,87,0,100,0,83,0,4, ++ 0,116,5,121,71,1,0,1,0,1,0,89,0,100,0,83, ++ 0,119,0,41,6,78,218,10,95,95,108,111,97,100,101,114, ++ 95,95,218,8,95,95,115,112,101,99,95,95,114,96,1,0, ++ 0,90,8,95,95,102,105,108,101,95,95,90,10,95,95,99, ++ 97,99,104,101,100,95,95,41,6,218,3,103,101,116,114,165, ++ 0,0,0,114,42,1,0,0,114,35,1,0,0,114,214,0, ++ 0,0,218,9,69,120,99,101,112,116,105,111,110,41,6,90, ++ 2,110,115,114,142,0,0,0,90,8,112,97,116,104,110,97, ++ 109,101,90,9,99,112,97,116,104,110,97,109,101,114,165,0, ++ 0,0,114,211,0,0,0,114,8,0,0,0,114,8,0,0, ++ 0,114,9,0,0,0,218,14,95,102,105,120,95,117,112,95, ++ 109,111,100,117,108,101,101,6,0,0,115,36,0,0,0,10, ++ 2,10,1,4,1,4,1,8,1,8,1,12,1,10,2,4, ++ 1,14,1,2,1,8,1,8,1,8,1,14,1,12,1,6, ++ 2,2,254,114,114,1,0,0,99,0,0,0,0,0,0,0, ++ 0,0,0,0,0,3,0,0,0,3,0,0,0,67,0,0, ++ 0,115,38,0,0,0,116,0,116,1,160,2,161,0,102,2, ++ 125,0,116,3,116,4,102,2,125,1,116,5,116,6,102,2, ++ 125,2,124,0,124,1,124,2,103,3,83,0,41,2,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,78, ++ 41,7,114,31,1,0,0,114,188,0,0,0,218,18,101,120, ++ 116,101,110,115,105,111,110,95,115,117,102,102,105,120,101,115, ++ 114,35,1,0,0,114,129,0,0,0,114,42,1,0,0,114, ++ 115,0,0,0,41,3,90,10,101,120,116,101,110,115,105,111, ++ 110,115,90,6,115,111,117,114,99,101,90,8,98,121,116,101, ++ 99,111,100,101,114,8,0,0,0,114,8,0,0,0,114,9, ++ 0,0,0,114,209,0,0,0,124,6,0,0,115,8,0,0, ++ 0,12,5,8,1,8,1,10,1,114,209,0,0,0,99,1, ++ 0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1, ++ 0,0,0,67,0,0,0,115,8,0,0,0,124,0,97,0, ++ 100,0,83,0,114,71,0,0,0,41,1,114,160,0,0,0, ++ 41,1,218,17,95,98,111,111,116,115,116,114,97,112,95,109, ++ 111,100,117,108,101,114,8,0,0,0,114,8,0,0,0,114, ++ 9,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,135,6,0,0,115, ++ 2,0,0,0,8,2,114,117,1,0,0,99,1,0,0,0, ++ 0,0,0,0,0,0,0,0,2,0,0,0,4,0,0,0, ++ 67,0,0,0,115,50,0,0,0,116,0,124,0,131,1,1, ++ 0,116,1,131,0,125,1,116,2,106,3,160,4,116,5,106, ++ 6,124,1,142,0,103,1,161,1,1,0,116,2,106,7,160, ++ 8,116,9,161,1,1,0,100,1,83,0,41,2,122,41,73, ++ 110,115,116,97,108,108,32,116,104,101,32,112,97,116,104,45, ++ 98,97,115,101,100,32,105,109,112,111,114,116,32,99,111,109, ++ 112,111,110,101,110,116,115,46,78,41,10,114,117,1,0,0, ++ 114,209,0,0,0,114,16,0,0,0,114,84,1,0,0,114, ++ 192,0,0,0,114,95,1,0,0,114,109,1,0,0,218,9, ++ 109,101,116,97,95,112,97,116,104,114,63,0,0,0,114,78, ++ 1,0,0,41,2,114,116,1,0,0,90,17,115,117,112,112, ++ 111,114,116,101,100,95,108,111,97,100,101,114,115,114,8,0, ++ 0,0,114,8,0,0,0,114,9,0,0,0,218,8,95,105, ++ 110,115,116,97,108,108,140,6,0,0,115,8,0,0,0,8, ++ 2,6,1,20,1,16,1,114,119,1,0,0,41,1,114,89, ++ 0,0,0,114,71,0,0,0,41,3,78,78,78,41,2,114, ++ 0,0,0,0,114,0,0,0,0,41,1,84,41,86,114,153, ++ 0,0,0,114,160,0,0,0,114,188,0,0,0,114,93,0, ++ 0,0,114,16,0,0,0,114,101,0,0,0,114,185,0,0, ++ 0,114,27,0,0,0,114,232,0,0,0,90,2,110,116,114, ++ 19,0,0,0,114,216,0,0,0,90,5,112,111,115,105,120, ++ 114,52,0,0,0,114,20,0,0,0,218,3,97,108,108,114, ++ 61,0,0,0,114,137,0,0,0,114,59,0,0,0,114,64, ++ 0,0,0,90,20,95,112,97,116,104,115,101,112,115,95,119, ++ 105,116,104,95,99,111,108,111,110,114,30,0,0,0,90,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,29,0,0,0,114,31,0,0,0,114, ++ 23,0,0,0,114,38,0,0,0,114,44,0,0,0,114,47, ++ 0,0,0,114,69,0,0,0,114,76,0,0,0,114,77,0, ++ 0,0,114,81,0,0,0,114,82,0,0,0,114,85,0,0, ++ 0,114,88,0,0,0,114,97,0,0,0,218,4,116,121,112, ++ 101,218,8,95,95,99,111,100,101,95,95,114,187,0,0,0, ++ 114,36,0,0,0,114,173,0,0,0,114,35,0,0,0,114, ++ 41,0,0,0,114,9,1,0,0,114,118,0,0,0,114,114, ++ 0,0,0,114,129,0,0,0,114,63,0,0,0,114,115,1, ++ 0,0,114,233,0,0,0,114,115,0,0,0,90,23,68,69, ++ 66,85,71,95,66,89,84,69,67,79,68,69,95,83,85,70, ++ 70,73,88,69,83,90,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,123,0,0,0,114,130,0,0,0,114,136,0,0, ++ 0,114,138,0,0,0,114,140,0,0,0,114,161,0,0,0, ++ 114,168,0,0,0,114,177,0,0,0,114,181,0,0,0,114, ++ 183,0,0,0,114,190,0,0,0,114,195,0,0,0,114,196, ++ 0,0,0,114,201,0,0,0,218,6,111,98,106,101,99,116, ++ 114,210,0,0,0,114,214,0,0,0,114,215,0,0,0,114, ++ 236,0,0,0,114,250,0,0,0,114,12,1,0,0,114,35, ++ 1,0,0,114,42,1,0,0,114,31,1,0,0,114,48,1, ++ 0,0,114,74,1,0,0,114,78,1,0,0,114,95,1,0, ++ 0,114,114,1,0,0,114,209,0,0,0,114,117,1,0,0, ++ 114,119,1,0,0,114,8,0,0,0,114,8,0,0,0,114, ++ 8,0,0,0,114,9,0,0,0,218,8,60,109,111,100,117, ++ 108,101,62,1,0,0,0,115,184,0,0,0,4,0,4,22, ++ 8,3,8,1,8,1,8,1,8,1,10,3,4,1,8,1, ++ 10,1,8,2,4,3,10,1,6,2,10,2,14,1,22,3, ++ 8,1,8,1,10,1,14,1,4,4,4,1,2,1,2,1, ++ 4,255,8,4,6,16,8,3,8,5,8,5,4,6,10,1, ++ 8,30,8,6,8,8,8,10,8,9,8,5,4,7,10,1, ++ 8,8,10,5,10,22,0,127,16,30,12,1,4,2,4,1, ++ 6,2,4,1,10,1,8,2,6,2,8,2,16,2,8,71, ++ 8,40,8,19,8,12,8,12,8,31,8,20,8,33,8,28, ++ 10,24,10,13,10,10,8,11,6,14,4,3,2,1,12,255, ++ 14,73,14,67,16,30,0,127,14,17,18,50,18,45,18,25, ++ 14,53,14,63,14,49,0,127,14,29,0,127,10,30,8,23, ++ 8,11,12,5, + }; +-- +2.34.1 + diff --git a/mingw-w64-python3.10/PKGBUILD b/mingw-w64-python3.10/PKGBUILD new file mode 100644 index 0000000000..63a2216317 --- /dev/null +++ b/mingw-w64-python3.10/PKGBUILD @@ -0,0 +1,507 @@ +# Maintainer: Alexey Pavlov +# Maintainer: Ray Donnelly +# Contributor: Saul Ibarra Corretge +# Contributor: Frode Solheim + +_primary_python="no" +_pybasever=3.10 +_realname=python + +if [[ "${_primary_python}" == "yes" ]]; then + pkgbase="mingw-w64-${_realname}" + pkgname=("${MINGW_PACKAGE_PREFIX}-${_realname}") + provides=("${MINGW_PACKAGE_PREFIX}-python3" + "${MINGW_PACKAGE_PREFIX}-python${_pybasever}") + conflicts=("${MINGW_PACKAGE_PREFIX}-python3" + "${MINGW_PACKAGE_PREFIX}-python${_pybasever}" + "${MINGW_PACKAGE_PREFIX}-python2<2.7.16-7") + replaces=("${MINGW_PACKAGE_PREFIX}-python3" + "${MINGW_PACKAGE_PREFIX}-python${_pybasever}") +else + pkgbase="mingw-w64-${_realname}${_pybasever}" + pkgname=("${MINGW_PACKAGE_PREFIX}-${_realname}${_pybasever}") +fi +pkgver=${_pybasever}.0 +pkgrel=1 +pkgdesc="A high-level scripting language (mingw-w64)" +arch=('any') +mingw_arch=('mingw32' 'mingw64' 'ucrt64' 'clang64' 'clang32' 'clangarm64') +license=('PSF') +url="https://www.python.org/" +depends=("${MINGW_PACKAGE_PREFIX}-gcc-libs" + "${MINGW_PACKAGE_PREFIX}-expat" + "${MINGW_PACKAGE_PREFIX}-bzip2" + "${MINGW_PACKAGE_PREFIX}-libffi" + "${MINGW_PACKAGE_PREFIX}-mpdecimal" + "${MINGW_PACKAGE_PREFIX}-ncurses" + "${MINGW_PACKAGE_PREFIX}-openssl" + "${MINGW_PACKAGE_PREFIX}-sqlite3" + "${MINGW_PACKAGE_PREFIX}-tcl" + "${MINGW_PACKAGE_PREFIX}-tk" + "${MINGW_PACKAGE_PREFIX}-zlib" + "${MINGW_PACKAGE_PREFIX}-xz" + "${MINGW_PACKAGE_PREFIX}-tzdata") +makedepends=( + "${MINGW_PACKAGE_PREFIX}-cc" + "${MINGW_PACKAGE_PREFIX}-autotools" + "autoconf-archive" +) +options=('makeflags') # 'debug' '!strip') +source=("https://www.python.org/ftp/python/${pkgver%rc?}/Python-${pkgver}.tar.xz" + 0001-sysconfig-make-_sysconfigdata.py-relocatable.patch + 0002-restore-setup-config.patch + 0003-build-add-with-nt-threads-and-make-it-default-on-min.patch + 0004-MINGW-translate-gcc-internal-defines-to-python-platf.patch + 0005-MINGW-configure-MACHDEP-and-platform-for-build.patch + 0006-MINGW-preset-configure-defaults.patch + 0007-MINGW-configure-largefile-support-for-windows-builds.patch + 0008-MINGW-add-srcdir-PC-to-CPPFLAGS.patch + 0009-MINGW-init-system-calls.patch + 0010-MINGW-build-in-windows-modules-winreg.patch + 0011-MINGW-determine-if-pwdmodule-should-be-used.patch + 0012-issue6672-v2-Add-Mingw-recognition-to-pyport.h-to-al.patch + 0013-MINGW-configure-for-shared-build.patch + 0014-MINGW-dynamic-loading-support.patch + 0015-MINGW-ignore-main-program-for-frozen-scripts.patch + 0016-MINGW-setup-_multiprocessing-module.patch + 0017-MINGW-setup-select-module.patch + 0018-MINGW-setup-_ctypes-module-with-system-libffi.patch + 0019-MINGW-defect-winsock2-and-setup-_socket-module.patch + 0020-MINGW-exclude-unix-only-modules.patch + 0021-MINGW-setup-msvcrt-and-_winapi-modules.patch + 0022-sysconfig-MINGW-build-extensions-with-GCC.patch + 0023-MINGW-setup-_ssl-module.patch + 0024-MINGW-generalization-of-posix-build-in-sysconfig.py.patch + 0025-MINGW-support-stdcall-without-underscore.patch + 0026-use-replace-instead-rename-to-avoid-failure-on-windo.patch + 0027-MINGW-customize-site.patch + 0028-add-python-config-sh.patch + 0029-cross-darwin-feature.patch + 0030-mingw-system-libffi.patch + 0031-msys-mingw-prefer-unix-sep-if-MSYSTEM.patch + 0032-mingw-use-posix-getpath.patch + 0033-mingw-add-ModuleFileName-dir-to-PATH.patch + 0034-mingw-add-BUILDIN_WIN32_MODULEs-time-msvcrt.patch + 0035-msys-cygwin-semi-native-build-sysconfig.patch + 0036-sysconfig-mingw-sysconfig-like-posix.patch + 0037-build-_winapi-earlier-so-we-can-use-it-in-distutils-.patch + 0038-cross-dont-add-multiarch-paths-if-cross-compiling.patch + 0039-mingw-use-backslashes-in-compileall-py.patch + 0040-msys-convert_path-fix-and-root-hack.patch + 0041-allow-static-tcltk.patch + 0042-mingw-pdcurses_ISPAD.patch + 0043-builddir-fixes.patch + 0044-msys-monkeypatch-os-system-via-sh-exe.patch + 0045-msys-replace-slashes-used-in-io-redirection.patch + 0046-remove_path_max.default.patch + 0047-dont-link-with-gettext.patch + 0048-ctypes-python-dll.patch + 0049-gdbm-module-includes.patch + 0050-use-gnu_printf-in-format.patch + 0051-mingw-fix-ssl-dont-use-enum_certificates.patch + 0052-fix-using-dllhandle-and-winver-mingw.patch + 0053-Add-AMD64-to-sys-config-so-msvccompiler-get_build_ve.patch + 0054-MINGW-link-with-additional-library.patch + 0055-install-msilib.patch + 0056-fix-signal-module-build.patch + 0057-build-build-winconsoleio-and-_testconsole.patch + 0058-expose-sem_unlink.patch + 0059-cygpty-isatty.patch + 0060-disable-broken-gdbm-module.patch + 0061-build-link-win-resource-files-and-build-pythonw.patch + 0062-disable-readline.patch + 0063-fix-isselectable.patch + 0064-use-_wcsnicmp-instead-wcsncasecmp.patch + 0065-_xxsubinterpretersmodule.patch + 0066-sqlite3-module-defines.patch + 0067-configure.ac-fix-inet_pton-check.patch + 0068-set-venv-activate-path-unix.patch + 0069-venv-creation-fixes.patch + 0070-pass-gen-profile-ldflags.patch + 0071-pkg-config-windows-must-link-ext-with-python-lib.patch + 0072-importlib-bootstrap-path-sep.patch + 0073-pathlib-path-sep.patch + 0074-warnings-fixes.patch + 0075-fix-build-testinternalcapi.patch + 0076-extend-MS_WINDOWS-flag.patch + 0077-clang-arm64.patch + 0078-configure.ac-set-MINGW-stack-reserve.patch + 0079-Don-t-use-os.pathsep-to-find-EOF.patch + 0080-Fix-extension-suffix-for-c-extensions-on-mingw.patch + 0081-Change-the-get_platform-method-in-sysconfig.patch + 0082-distutils-compiler-customize-mingw-cygwin-compilers.patch + 0083-distutils-compiler-enable-new-dtags.patch + 0084-distutils-MINGW-build-extensions-with-GCC.patch + 0085-distutils-use-Mingw32CCompiler-as-default-compiler-f.patch + 0086-distutils-find-import-library.patch + 0087-distutils-avoid-circular-dependency-from-time-module.patch + 0088-distutils-generalization-of-posix-build-in-distutils.patch + 0089-distutils-mingw-sysconfig-like-posix.patch + 0090-distutils-get_versions-fixes.patch + 0091-distutils-install-layout-as-posix.patch + 0092-distutils-msys-convert_path-fix-and-root-hack.patch + 0093-distutils-mingw-build-optimized-ext.patch + 0094-distutils-cygwinccompiler-dont-strip-modules-if-pyde.patch + 0095-distutils-get-compilers-from-env-vars.patch + 0096-distutils-add-windmc-to-cygwinccompiler.patch + 0097-distutils-fix-msvc9-import.patch + 0098-distutils-mingw-add-LIBPL-to-library-dirs.patch + 0099-distutils-Change-the-get_platform-method-in-distutil.patch + 0100-build-Fix-ncursesw-include-lookup.patch + 0101-tests-fix-test_bytes.patch + 0102-time-fix-strftime-not-raising-for-invalid-year-value.patch + 0103-ctypes-find_library-c-should-return-None-with-ucrt.patch + 0104-build-Disable-checks-for-dlopen-dlfcn.patch + 0105-Fix-install-location-of-the-import-library.patch + 0106-Set-MSYS2_ARG_CONV_EXCL-for-the-shared-Python-module.patch + 0107-build-Integrate-venvlauncher-build-installation-into.patch + 0108-configure.ac-set-_WIN32_WINNT-version.patch + 0109-configure.ac-don-t-check-for-clock_-functions.patch + 0110-expanduser-normpath-paths-coming-from-env-vars.patch + 0111-Add-support-for-Windows-7-Python-3.9.patch + 0112-CI-test-the-build-and-add-some-mingw-specific-tests.patch + 0113-smoketests-test-that-_decimal-exists.patch + 0114-Prefer-sysconfig.python_build.patch + 0115-Define-PY3_DLLNAME-to-fix-build.patch + 0116-Commit-regenerated-importlib.patch) + +# Helper macros to help make tasks easier # +apply_patch_with_msg() { + for _patch in "$@" + do + msg2 "Applying ${_patch}" + patch -Nbp1 -i "${srcdir}/${_patch}" + done +} + +prepare() { + cd "${srcdir}/Python-${pkgver}" + + apply_patch_with_msg 0001-sysconfig-make-_sysconfigdata.py-relocatable.patch \ + 0002-restore-setup-config.patch \ + 0003-build-add-with-nt-threads-and-make-it-default-on-min.patch \ + 0004-MINGW-translate-gcc-internal-defines-to-python-platf.patch \ + 0005-MINGW-configure-MACHDEP-and-platform-for-build.patch \ + 0006-MINGW-preset-configure-defaults.patch \ + 0007-MINGW-configure-largefile-support-for-windows-builds.patch \ + 0008-MINGW-add-srcdir-PC-to-CPPFLAGS.patch \ + 0009-MINGW-init-system-calls.patch \ + 0010-MINGW-build-in-windows-modules-winreg.patch \ + 0011-MINGW-determine-if-pwdmodule-should-be-used.patch \ + 0012-issue6672-v2-Add-Mingw-recognition-to-pyport.h-to-al.patch \ + 0013-MINGW-configure-for-shared-build.patch \ + 0014-MINGW-dynamic-loading-support.patch \ + 0015-MINGW-ignore-main-program-for-frozen-scripts.patch \ + 0016-MINGW-setup-_multiprocessing-module.patch \ + 0017-MINGW-setup-select-module.patch \ + 0018-MINGW-setup-_ctypes-module-with-system-libffi.patch \ + 0019-MINGW-defect-winsock2-and-setup-_socket-module.patch \ + 0020-MINGW-exclude-unix-only-modules.patch \ + 0021-MINGW-setup-msvcrt-and-_winapi-modules.patch \ + 0022-sysconfig-MINGW-build-extensions-with-GCC.patch \ + 0023-MINGW-setup-_ssl-module.patch \ + 0024-MINGW-generalization-of-posix-build-in-sysconfig.py.patch \ + 0025-MINGW-support-stdcall-without-underscore.patch \ + 0026-use-replace-instead-rename-to-avoid-failure-on-windo.patch \ + 0027-MINGW-customize-site.patch \ + 0028-add-python-config-sh.patch \ + 0029-cross-darwin-feature.patch \ + 0030-mingw-system-libffi.patch \ + 0031-msys-mingw-prefer-unix-sep-if-MSYSTEM.patch \ + 0032-mingw-use-posix-getpath.patch \ + 0033-mingw-add-ModuleFileName-dir-to-PATH.patch \ + 0034-mingw-add-BUILDIN_WIN32_MODULEs-time-msvcrt.patch \ + 0035-msys-cygwin-semi-native-build-sysconfig.patch \ + 0036-sysconfig-mingw-sysconfig-like-posix.patch \ + 0037-build-_winapi-earlier-so-we-can-use-it-in-distutils-.patch \ + 0038-cross-dont-add-multiarch-paths-if-cross-compiling.patch \ + 0039-mingw-use-backslashes-in-compileall-py.patch \ + 0040-msys-convert_path-fix-and-root-hack.patch \ + 0041-allow-static-tcltk.patch \ + 0042-mingw-pdcurses_ISPAD.patch \ + 0043-builddir-fixes.patch \ + 0044-msys-monkeypatch-os-system-via-sh-exe.patch \ + 0045-msys-replace-slashes-used-in-io-redirection.patch \ + 0046-remove_path_max.default.patch \ + 0047-dont-link-with-gettext.patch \ + 0048-ctypes-python-dll.patch \ + 0049-gdbm-module-includes.patch \ + 0050-use-gnu_printf-in-format.patch \ + 0051-mingw-fix-ssl-dont-use-enum_certificates.patch \ + 0052-fix-using-dllhandle-and-winver-mingw.patch \ + 0053-Add-AMD64-to-sys-config-so-msvccompiler-get_build_ve.patch \ + 0054-MINGW-link-with-additional-library.patch \ + 0055-install-msilib.patch \ + 0056-fix-signal-module-build.patch \ + 0057-build-build-winconsoleio-and-_testconsole.patch \ + 0058-expose-sem_unlink.patch \ + 0059-cygpty-isatty.patch \ + 0060-disable-broken-gdbm-module.patch \ + 0061-build-link-win-resource-files-and-build-pythonw.patch \ + 0062-disable-readline.patch \ + 0063-fix-isselectable.patch \ + 0064-use-_wcsnicmp-instead-wcsncasecmp.patch \ + 0065-_xxsubinterpretersmodule.patch \ + 0066-sqlite3-module-defines.patch \ + 0067-configure.ac-fix-inet_pton-check.patch \ + 0068-set-venv-activate-path-unix.patch \ + 0069-venv-creation-fixes.patch \ + 0070-pass-gen-profile-ldflags.patch \ + 0071-pkg-config-windows-must-link-ext-with-python-lib.patch \ + 0072-importlib-bootstrap-path-sep.patch \ + 0073-pathlib-path-sep.patch \ + 0074-warnings-fixes.patch \ + 0075-fix-build-testinternalcapi.patch \ + 0076-extend-MS_WINDOWS-flag.patch \ + 0077-clang-arm64.patch \ + 0078-configure.ac-set-MINGW-stack-reserve.patch \ + 0079-Don-t-use-os.pathsep-to-find-EOF.patch \ + 0080-Fix-extension-suffix-for-c-extensions-on-mingw.patch \ + 0081-Change-the-get_platform-method-in-sysconfig.patch \ + 0082-distutils-compiler-customize-mingw-cygwin-compilers.patch \ + 0083-distutils-compiler-enable-new-dtags.patch \ + 0084-distutils-MINGW-build-extensions-with-GCC.patch \ + 0085-distutils-use-Mingw32CCompiler-as-default-compiler-f.patch \ + 0086-distutils-find-import-library.patch \ + 0087-distutils-avoid-circular-dependency-from-time-module.patch \ + 0088-distutils-generalization-of-posix-build-in-distutils.patch \ + 0089-distutils-mingw-sysconfig-like-posix.patch \ + 0090-distutils-get_versions-fixes.patch \ + 0091-distutils-install-layout-as-posix.patch \ + 0092-distutils-msys-convert_path-fix-and-root-hack.patch \ + 0093-distutils-mingw-build-optimized-ext.patch \ + 0094-distutils-cygwinccompiler-dont-strip-modules-if-pyde.patch \ + 0095-distutils-get-compilers-from-env-vars.patch \ + 0096-distutils-add-windmc-to-cygwinccompiler.patch \ + 0097-distutils-fix-msvc9-import.patch \ + 0098-distutils-mingw-add-LIBPL-to-library-dirs.patch \ + 0099-distutils-Change-the-get_platform-method-in-distutil.patch \ + 0100-build-Fix-ncursesw-include-lookup.patch \ + 0101-tests-fix-test_bytes.patch \ + 0102-time-fix-strftime-not-raising-for-invalid-year-value.patch \ + 0103-ctypes-find_library-c-should-return-None-with-ucrt.patch \ + 0104-build-Disable-checks-for-dlopen-dlfcn.patch \ + 0105-Fix-install-location-of-the-import-library.patch \ + 0106-Set-MSYS2_ARG_CONV_EXCL-for-the-shared-Python-module.patch \ + 0107-build-Integrate-venvlauncher-build-installation-into.patch \ + 0108-configure.ac-set-_WIN32_WINNT-version.patch \ + 0109-configure.ac-don-t-check-for-clock_-functions.patch \ + 0110-expanduser-normpath-paths-coming-from-env-vars.patch \ + 0111-Add-support-for-Windows-7-Python-3.9.patch \ + 0112-CI-test-the-build-and-add-some-mingw-specific-tests.patch \ + 0113-smoketests-test-that-_decimal-exists.patch \ + 0114-Prefer-sysconfig.python_build.patch \ + 0115-Define-PY3_DLLNAME-to-fix-build.patch \ + 0116-Commit-regenerated-importlib.patch + + autoreconf -vfi +} + +build() { + declare -a _extra_config + if check_option "debug" "n"; then + _extra_config+=("--enable-optimizations") + # FIXME: https://github.com/msys2-contrib/cpython-mingw/issues/10 + # _extra_config+=("--with-lto") + else + CFLAGS+=" -O0 -ggdb" + CXXFLAGS+=" -O0 -ggdb" + _extra_config+=("--with-pydebug") + fi + + [[ -d "${srcdir}/build-${CARCH}" ]] && rm -rf "${srcdir}/build-${CARCH}" + mkdir -p "${srcdir}/build-${CARCH}" && cd "${srcdir}/build-${CARCH}" + + ../Python-${pkgver}/configure \ + --prefix=${MINGW_PREFIX} \ + --host=${MINGW_CHOST} \ + --build=${MINGW_CHOST} \ + --enable-shared \ + --with-system-expat \ + --with-system-ffi \ + --with-system-libmpdec \ + --without-ensurepip \ + --without-c-locale-coercion \ + --enable-loadable-sqlite-extensions \ + --with-tzpath=${MINGW_PREFIX}/share/zoneinfo \ + "${_extra_config[@]}" + + make +} + +check() { + cd "${srcdir}/build-${CARCH}" + + # Some basic tests to ensure nothing major or MSYS2 specific features are broken + ./python.exe "../Python-${pkgver}/mingw_smoketests.py" + MSYSTEM= ./python.exe "../Python-${pkgver}/mingw_smoketests.py" +} + +package() { + cd "${srcdir}/build-${CARCH}" + + make -j1 install DESTDIR="${pkgdir}" + + # gdb pretty printers for debugging Python itself; to use: + # python + # sys.path.append('C:/msys64/mingw64/share/gdb/python3') + # import python_gdb + # reload(python_gdb) + # end + if [[ "${_primary_python}" == "yes" ]]; then + [[ -d "${pkgdir}${MINGW_PREFIX}"/share/gdb/python3/ ]] || mkdir -p "${pkgdir}${MINGW_PREFIX}"/share/gdb/python3/ + cp -f python.exe-gdb.py "${pkgdir}${MINGW_PREFIX}"/share/gdb/python3/python_gdb.py + fi + + # some useful "stuff" + install -dm755 "${pkgdir}${MINGW_PREFIX}"/lib/python${_pybasever}/Tools/{i18n,scripts} + install -m755 "${srcdir}/Python-${pkgver}"/Tools/i18n/{msgfmt,pygettext}.py "${pkgdir}${MINGW_PREFIX}"/lib/python${_pybasever}/Tools/i18n/ + install -m755 "${srcdir}/Python-${pkgver}"/Tools/scripts/{README,*py} "${pkgdir}${MINGW_PREFIX}"/lib/python${_pybasever}/Tools/scripts/ + + # fixup shebangs + for fscripts in 2to3 2to3-${_pybasever} idle3 idle${_pybasever} pydoc3 pydoc${_pybasever}; do + sed -i "s|$(cygpath -w ${MINGW_PREFIX} | sed 's|\\|\\\\|g')/bin/python${_pybasever}.exe|/usr/bin/env python${_pybasever}.exe|g" \ + "${pkgdir}${MINGW_PREFIX}"/bin/${fscripts} + done + + # default aliases for all scripts/binaries + if [[ "${_primary_python}" == "yes" ]]; then + # Default names are aliases for Python now + cp "${pkgdir}${MINGW_PREFIX}"/bin/python3.exe "${pkgdir}${MINGW_PREFIX}"/bin/python.exe + cp "${pkgdir}${MINGW_PREFIX}"/bin/python3w.exe "${pkgdir}${MINGW_PREFIX}"/bin/pythonw.exe + cp "${pkgdir}${MINGW_PREFIX}"/bin/python3-config "${pkgdir}${MINGW_PREFIX}"/bin/python-config + cp "${pkgdir}${MINGW_PREFIX}"/bin/idle3 "${pkgdir}${MINGW_PREFIX}"/bin/idle + cp "${pkgdir}${MINGW_PREFIX}"/bin/pydoc3 "${pkgdir}${MINGW_PREFIX}"/bin/pydoc + fi + + # delete anything that could conflict with the primary Python + if [[ "${_primary_python}" != "yes" ]]; then + rm "${pkgdir}${MINGW_PREFIX}"/bin/python3.exe + rm "${pkgdir}${MINGW_PREFIX}"/bin/python3w.exe + rm "${pkgdir}${MINGW_PREFIX}"/bin/python3-config + rm "${pkgdir}${MINGW_PREFIX}"/bin/idle3 + rm "${pkgdir}${MINGW_PREFIX}"/bin/pydoc3 + rm "${pkgdir}${MINGW_PREFIX}"/bin/2to3 + rm "${pkgdir}${MINGW_PREFIX}"/lib/pkgconfig/python3-embed.pc + rm "${pkgdir}${MINGW_PREFIX}"/lib/pkgconfig/python3.pc + rm "${pkgdir}${MINGW_PREFIX}"/share/man/man1/python3.1 + fi +} + +sha256sums=('5a99f8e7a6a11a7b98b4e75e0d1303d3832cada5534068f69c7b6222a7b1b002' + '49618c0b5af0319f64bd8da3116f77d9726a77276cffacebc4d3de645c327bb7' + 'd967c60781f6a4ef3464799ca398469d03249f9673c8ce769a3e2da33eb33193' + 'b70136017f533468b64ba1b289498f6ddda88715b48016c7804b2186af6884cc' + '8dcb76c1858de03f903085602fd7271dc3baefa058eaa1b8f186a11bf80a01e6' + 'f13a51e2efc5d539eadf8dfa71bdcd6cd1e93ecf71da96f217bc385718fdb11f' + '0097f4d3d20ed9690cbbdcde5a24cd4551117082b18fe309f34bbc5672bc0223' + '8d3a42cbf36eef51167308824f9a6c60b6ea78453a9f50edd7f69d2975da6ab9' + '9557ef72cb9ee75d8118794d980926a3240bda42dea08b8f5259d61e17d5ae53' + 'd16d82e6b18fc1dc587469b7131730f282888ba05c1195f6a4b8c8658c74c0bb' + 'bb99cc9af5bfa8bbf3324b7716718bf5d4a5a7359817b97b86eefc5f042daa20' + '6948926186af5e415268dc95c9a5641c5f11633bf5da3b4fcadfa6d27d695be0' + '230e40e7bc78dbd0fa69677d836015b7e53f380cfbfc5e12c536996ed54d76c4' + '40e656ec45c2e8a4c877d52f28b97b114fff6504ca439d04c6a9001407f07c34' + '9630401fb31c9dc53ea5c6ecbb22eba40a1fdbb18a13489054abe573a4a4dd50' + 'b258a25430b3f8787395ec726ca329da8181dbbc5e6fbae38a5fdf9d990f91e8' + 'cd15083767565d34c936df5ae71d701a57abcc6b454c68234862afe7c69207dc' + '956264e6b45cb12f5c3ee80acea9d1da54a3f3210cb19219867138f9d7b310b2' + '429c46ed0e0fd0aba50b3cb137afcef04a2ce70b4d0ec0b2e64f75c4942053a2' + '6e90416d1283102b9160fb92c82f217c6de0586ddfbeea772d99971909ad2137' + '5ea6e2c7cedc9cd27b611c5fb4554ccf653064d6c70408f528b4c33639631a40' + '1f3c165c70be5dc174c04bb84e9181d1146847010dc0e2609a07bf96e4dd1378' + '6f90192098bca07a1ae0363019302176ecc3c9749d00c4a4ad54d832c245b7f3' + '07cfbe323e4afd72014886e74f07912aed8232445ff1edba42fd33d62121f5fb' + 'e7d0d99e2e6e99cc84642ad43ae4f473c14213f625f52f19615d2ea7d838fd5c' + 'b12e35c1e5c0a3af2cd53a7577c82618f15504f448215bb0513945ce4e7ce632' + '01dffb1e99975e8259cc2446c4f7bfe2840c7d4813fd1766023b088a288d0fb0' + '55abac4b324844ceb1c663887d70d25db7b06206a5a24e314db752e7082a3084' + 'e340fd684fc1c438d17173603a3b3675ef97dc6e5fcd343100ccc13834ce9daf' + 'ea5c7cd51c9b0bde9c8e78a7dda4af2637f7a540a03100ce1f7bc593676efdd4' + '8c67c55bc6bfa8a7d27ca116ae5845a8b32bca67e161125ddbb6e6e4009d5fa9' + '7b4a08cad5bd9436e750ad42219c20b018b8f514cf8b06ab6777533fc9895c06' + '295e17e70dc9265985aeedaba1486867f7a4d8ae11cb5369bab93a086c47d3a1' + '775d6fb87e1d84ca5869b3a47b3293c5206e0e4a51de8e7d9eb2da1246433450' + '12fd50049ff6269ab5ac3d538e5bf4ed81876bdd95246bb481f2df9281dfd811' + 'c2e5c37523dbb3ce854d3a580a85a38db8281ae23b996b711447dc2836cf045d' + '9eaf55be42c62b88037805cd5471b61142b473bbda07f86b9179deb0ce4cfa73' + 'b5cadc98a559d6378c8cf0608f8ea422d19e425ae1a6ff5d277623a6444f9834' + 'd724bca285f9e294c0d24d85551da081a91ead537fa468013af3418dd734bd73' + '0be34c24ef9c4a9ed4698119a809a052330d4b354c56894cadd7d46e5f466fc4' + '63f42fc9fb04849fd1f935a93ae69680d14c58d60aec42ec28392dd253f35948' + '332ceca3d3b66f6e0bc9c291969bbf9e79acf3a5a8999130a70a832b209987ed' + '4dd775bc9ce55776ccfa4c3179cdff7478ddc16eb0ca918ad3e886325833c7a0' + '0def91845ccc127e4e31112563281f55c1e7b3ff6e07d04aaf6e0c472da98b20' + 'df176b3d2bf607a4daaea0f71146758c5b9c788cfd4f89fab8ddbd931b13c027' + 'b6c31a37e337db1a18e6014f7b33e93090006f00514b9af51287db997d064c09' + 'ad513d2c4389ffa4387fee56b68dfe4ff28cbaca218a0e53ea95b56fd8e0e795' + '06201eb685d3e30f16c16d188162768bb8de575d3bc62f3c6e009de3d9e90da9' + '57e20da131a77067c57619773ade31399afd98941d4f16bcd1c0d7eb7c5dbf9a' + '07d4ee7fba51fae5a12c75381e5f833066e36322e37ccf25ab939aac16a6fe1e' + 'e0f5f889a477c2617e90f71714ad7c664814269ffdad5b8d298817a217ed76b7' + '83f4306155cd15753728cb216963a003902399ac9a2b8ff78b5c1d3b8f2c6082' + 'de0eec9cb3301204288e9d32164a671ca5f70f4827dc5cceabb28daf6e8ada97' + '6f33ef821cefe12ae37e236563ff92e460f34d28254acfbd9de2876b5b66a70d' + '626d83642211ff3bcf3670acb93c64e61046ad57c56c92fd1fbbfffe9f30040a' + 'cfc5199d4c6d81c7b580b13ead08237c2b2abe754cf5473143c1b7f7a3e3a158' + '79d740a0f2e0672d0b6a02e3bc76170c72950528822a12e928e9aa86d870196c' + 'd357d5cd5e81a0e4f0160a5f0b9883b59b71770d60775bb21c51c12332476e8e' + '801014ec41210b4b70d296bf253fd277455c0d94e2f26698bef8eddebb88d31d' + '44a626b4aa3044c03d9defc093de1af27bad0ca3c9b07ed6d46d168f36bc2e0e' + '7749de8e71a9d1cd47ee4c6cd70251588ffe7131b88c70992bffccfd6639879f' + '69af2f044d0c352f900a35f73f5302dc5cc877c11a30141879620ae1d5ea4da7' + 'ab6fea6a12633cdb993b952d1a65db0eaa86639bb9be964b2491c3a1842b78a7' + '6412dc510aff2c67a5e524a7777494a3963dae670873a4ae5e762206e1b967bd' + 'b3d79a7edddf573eb36fe64a7c8f41fa4957197b7124b1a79faaa734a80a2754' + 'cff906a05084471667e4b11b75fe86ccb8814aaed9e03b5e6e9010a8ccb9ee99' + '5cacea9fa4c4426c8d4ffce103382caf2ffe489aa5edbd8e52ba05ed8c685642' + '466ba894a34a1c8336d4598644fefc4baec7140ee63412529bf1aec1a9d2ffe5' + 'd5bf09a5ae9d5857dafd358ebbc52c690504aa625d4326aa45d4abbfe45484d8' + '91110e2fe2e3ee7f577057d06011e4edfd6e6872b0395d7c930095c3d6c85170' + '268d789a509859d538a87101644078506e0e90e53af6f311fb0ae756db142c45' + '7340f5378c7b07f3a18eef858608e15f5787dd23109944ef283d2ab7f3c313f1' + 'ae46fb357c1e3509fb8c1ea30d50e121c499a6b40e149b3ff9f146298b799479' + '1d1d5ede4971e6bfbed2cb20239814960508acf1b0d2285e328e010909519d98' + 'ad70b8ad094d03a957e1f815a15103aeafcfabf2882f9c2542924b47b94c5643' + '2299b160137a57569da3ab9d3d47a8f5bbbc2e1c126a9241efead9f5e50305a1' + '58cb8d0d9cb604f48f92cfb5dfab3d0d222a02078a5d4b98366ebdd93548f7f1' + 'c4e7f6771285942207856c6a3defb7c2ce4e88f00b63567dc647ce21f7186175' + '2fce40567852f896ebf2f318511ded9de1cd3b86ba23cec4f80a65c36c762cf6' + '5dd5f8f66456a4c784d7a83a9ea382ce540483fa8124133104b77405df77e605' + 'a5729712ea89d4e0255b73060967be02f4fb680be3c859015aa5995726b4d05b' + 'ec2810ff284e18ba8a61725bf461f4216ed6e9bd9fcd1e9c5fecae60a918eb86' + '48d8cd76a81173736045dcb5cc1c2dfc9f9d3c5bed99c091a40814ee2d668cd2' + 'af9940b19c83059fc0d074f9fcfa22ebe637e925b6fba87d6d97e85d30ab1761' + 'b70d8367b0474035a2b5b8dfbae902e66638cbd5570cdf156c113a3cf6c10dcf' + 'a7fde729503456e488f220ac294a5eedd7e91ffa2d88370001e1ba98b4ad9cb2' + 'eebc37108cc8dc1b1edcedaa5321b12c69a96ec332bc60b46482cfcfb0c476af' + '061ff107c640c09f9aa378c80478d7272083467fef87fd3f6a231b5d6c2f2964' + '671bf53426cdeedbce5706768815ad4d0c97552994968f4b2925896d3c4e92ff' + '96428d13bf18cb16bfd1e36c99a11e60140552765f5747f65d52a27ba229dce4' + 'fda87ec475f2b715a2939465e059df74118ed61d416803af312af5b132009621' + 'f59a64acb934334cea0d8324c79bbc0e2e463bec566f02d1d939cd15df6fa8cd' + '81fc66d796662cd135d7af8750121592795a4acabe6e0d48998470eff4b2c890' + 'e95169f748e887d3a51b236b27d9aaa20f973366a239bbadbc58ba76c99f22f5' + 'cef3504d5219ae56ad59f090f76afea8f54e3f32242900d41c1d4f44840d5913' + '485b8d30ebebf2c6c6c751daaf2c274d7688c9002f4b6686419d5d10e9f96c8b' + '19e03ed5fe384924ef4a46ea76c319e07ac0a4567584f2d2e5f4ec816d858ded' + '6dd342124a42c4ba9e9d510875a2c27a13b49477aecc878814cbfffd9014c258' + 'ee64c8ae96a1ff66a1550d010332747b3730296eed368809c254f2d6d8000748' + '6dbb39bb40cbcbc6d3b3b2aca5e44a8d06c66e5438b03373ac98a8fee2519bc7' + '28ecf42c99b62aa5112dd94900b532de4eedea1ab64ecf7d344d7e3b0d6d017c' + '9ea3502b64b971cecdd48694dfc97b1574422dbe8c947a70409706c4b92ca6ec' + '0c080b0a7a85db977279236d0c89cde8efe6f905df2b375186f1846c5a951380' + 'ccf98b1cf67b11f58e477ab8a81d4e1face254770edbfbfb67827af335558b50' + 'feb200d05871a458fc274dccbc1b0baea31d5a906e5329c144bd55275079b0d1' + 'd04d26131f8a0b9abe454d62a44839613cd65a402511aa030b8e7a7c6c7e7b7e' + '2913f809e275d25c9bf09563a1a4ca75202a6e51f1585a79abc52cbb874bf817' + 'e8cc31cb279be390f311556a5f526071471fdf3a00bc69aebf9be48154b71705' + '0ed520ee73fbfa59ece779fb9066ec307e7c03e6a8ef7f1c84d04ce7b5ded183' + '1324774652eeb2d845766864cd0815c3d265dbe100cdeaeef22a93e7b6ed5853' + '9b85b9d266a722159841ad62fe68488f0475e9eb88b64afc258743845f6e322d' + 'c1bbe975b489e497c125a652704114476e83c5d1d1ed75c51f588573f94ffa97' + 'b43b2fdca79500064fff00529e692df62b4a1e9344c052c88689f5ca4e77004d' + '47565e5857c73fe34c2b4f5ff924a07ce730dabeeb1fb3f02e8503360652be4d' + '2552ec78fd9b8ffd9e6e298fffb904c651d9a97be2de021700205957e9d99b40' + '903c4acdc79668da068b11b8462b639995b00af9763d3eaedcf4161ee3856f6c' + '0df47db20b0ced0edc478f3bc310aa97d0508c51908548ec8d4e8a13e0868da2') diff --git a/mingw-w64-python3.10/README.md b/mingw-w64-python3.10/README.md new file mode 100644 index 0000000000..858c558d9c --- /dev/null +++ b/mingw-w64-python3.10/README.md @@ -0,0 +1,4 @@ +The patches for this package are auto generated and managed in git: +https://github.com/msys2-contrib/cpython-mingw + +Run `./update-patches.sh` to re-create the patches. diff --git a/mingw-w64-python3.10/update-patches.sh b/mingw-w64-python3.10/update-patches.sh new file mode 100644 index 0000000000..646912c533 --- /dev/null +++ b/mingw-w64-python3.10/update-patches.sh @@ -0,0 +1,79 @@ +#!/bin/bash + +set -e + +die () { + echo "$*" >&2 + exit 1 +} + +cd "$(dirname "$0")" || +die "Could not cd to mingw-w64-python3.9/" + +git rev-parse --verify HEAD >/dev/null && +git update-index -q --ignore-submodules --refresh && +git diff-files --quiet --ignore-submodules && +git diff-index --cached --quiet --ignore-submodules HEAD -- || +die "Clean worktree required" + +git rm 0*.patch || +die "Could not remove previous patches" + +source PKGBUILD || die "Can't source PKGBUILD" + +base_tag=refs/tags/v$pkgver +msys2_branch=mingw-v$pkgver +url=https://github.com/msys2-contrib/cpython-mingw +upstream_url=https://github.com/python/cpython + +test -d cpython || +git clone --bare $url cpython --depth=1000 --branch=$msys2_branch || +die "Could not clone cpython" + +git -C cpython fetch --no-tags $url $msys2_branch:$msys2_branch --depth=1000 +git -C cpython fetch --no-tags $upstream_url $base_tag:$base_tag --depth=1000 + +git -c core.abbrev=7 \ + -c diff.renames=true \ + -c format.from=false \ + -c format.numbered=auto \ + -c format.useAutoBase=false \ + -C cpython \ + format-patch \ + --topo-order \ + --diff-algorithm=default \ + --no-attach \ + --no-add-header \ + --no-cover-letter \ + --no-thread \ + --suffix=.patch \ + --subject-prefix=PATCH \ + --output-directory .. \ + $base_tag..$msys2_branch || +die "Could not generate new patch set" + +patches="$(ls -1 0*.patch)" && +for p in $patches +do + sed -i 's/^\(Subject: \[PATCH [0-9]*\/\)[1-9][0-9]*/\1N/' $p || + die "Could not fix Subject: line in $p" +done && +patches="$(ls -1 0*.patch)" && +git add $patches || +die "Could not stage new patch set" + +in_sources="$(echo "$patches" | sed "{s/^/ /;:1;N;s/\\n/\\\\n /;b1}")" +in_prepare="$(echo "$patches" | tr '\n' '\\' | sed -e 's/\\$//' -e 's/\\/ &&&n /g')" +sed -i -e "/^ 0.*\.patch$/{:1;N;/[^)]$/b1;s|.*|$in_sources)|}" \ + -e "/^ *apply_patch_with_msg /{:2;N;/[^}]$/b2;s|.*| apply_patch_with_msg $in_prepare\\n\\ \n autoreconf -vfi\n}|}" \ + PKGBUILD || +die "Could not update the patch set in PKGBUILD" + +updpkgsums || +die "Could not update the patch set checksums in PKGBUILD" + +# bump pkgrel +sed "s/\(pkgrel\).*/pkgrel=$(($pkgrel + 1))/" -i PKGBUILD + +git add PKGBUILD || +die "Could not stage updates in PKGBUILD"