# Maintainer: Alexey Pavlov <alexpux@gmail.com>
# Maintainer: Ray Donnelly <mingw.android@gmail.com>
# Maintainer: Naveen M K <naveen521kk@gmail.com>
# Contributor: Saul Ibarra Corretge <saghul@gmail.com>
# Contributor: Frode Solheim <frode@fs-uae.net>

_primary_python="yes"
_pybasever=3.14
_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}.3
pkgrel=1
pkgdesc="A high-level scripting language (mingw-w64)"
arch=('any')
mingw_arch=('mingw32' 'mingw64' 'ucrt64' 'clang64' 'clangarm64')
license=('spdx:PSF-2.0')
url="https://www.python.org/"
msys2_repository_url="https://github.com/python/cpython"
msys2_references=(
  "cpe: cpe:/a:python:python"
  "cpe: cpe:/a:python_software_foundation:python"
)
depends=("${MINGW_PACKAGE_PREFIX}-cc-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}-libb2"
         "${MINGW_PACKAGE_PREFIX}-xz"
         "${MINGW_PACKAGE_PREFIX}-tzdata")
makedepends=(
  "${MINGW_PACKAGE_PREFIX}-cc"
  "${MINGW_PACKAGE_PREFIX}-autotools"
  "autoconf-archive"
)
#options=('debug' '!strip')
source=("https://www.python.org/ftp/python/${pkgver%rc?}/Python-${pkgver}.tar.xz"
        "EXTERNALLY-MANAGED"
        0001-build-add-with-nt-threads-and-make-it-default-on-min.patch
        0002-build-Define-MS_WINDOWS-and-others-when-compiling-wi.patch
        0003-sysmodule-Implement-flags-_is_mingw-is_mingw_ucrt-an.patch
        0004-configure-add-MACHDEP-and-platform-on-MINGW.patch
        0005-build-Add-default-cross-configuration-for-MINGW.patch
        0006-configure-enable-largefile-support-by-default-for-Mi.patch
        0007-build-Add-PC-to-CPPFLAGS-and-to-SRCDIRS-on-Mingw.patch
        0008-build-add-MINGW-support-for-posixmodule.patch
        0009-exports.h-Add-support-for-MINGW.patch
        0010-configure-add-options-so-that-shared-build-is-possib.patch
        0011-build-Add-PYD_PLATFORM_TAG.patch
        0012-build-Add-dynload_win-support-for-MinGW.patch
        0013-build-Use-.pyd-extension-suffix-fix-import-lib-insta.patch
        0014-build-Configure-SOABI-and-EXT_SUFFIX-for-MINGW.patch
        0015-build-Define-MS_DLL_ID-for-sys.winver-on-MINGW.patch
        0016-build-Ignore-main-program-for-frozen-scripts-on-MING.patch
        0017-socketmodule-add-MINGW-support.patch
        0018-build-enable-winreg-msvcrt-_winapi-winsound-and-_ove.patch
        0019-sysconfig-make-_sysconfigdata.py-relocatable.patch
        0020-sysconfig-treat-MINGW-builds-as-POSIX-builds.patch
        0021-sysconfig-Change-the-get_platform-method-in-sysconfi.patch
        0022-build-semi-native-build-sysconfig.patch
        0023-ctypes-Add-support-for-stdcall-without-underscore.patch
        0024-ctypes-add-suppor-for-ctypes.pythonapi-under-MINGW.patch
        0025-ctypes-find_library-c-should-return-None-with-ucrt.patch
        0026-site-Customize-for-MINGW.patch
        0027-site-Change-user-site-packages-path-to-include-the-e.patch
        0028-python-config-output-Windows-paths-for-the-shell-var.patch
        0029-python-config-use-the-Python-variant-of-python-confi.patch
        0030-mingw-prefer-unix-sep-if-MSYSTEM-environment-variabl.patch
        0031-build-Remove-MAXPATHLEN-default.patch
        0032-build-dont-link-with-gettext.patch
        0033-use-gnu_printf-in-format.patch
        0034-build-remove-usage-of-MS_COREDLL.patch
        0035-getcompiler-expose-MINGW-toolchain-related-informati.patch
        0036-build-fix-signal-module-build.patch
        0037-build-build-winconsoleio-and-_testconsole.patch
        0038-multiprocessing-expose-sem_unlink-to-fix-multiproces.patch
        0039-build-link-win-resource-files-and-build-pythonw.patch
        0040-pycore_fileutils-add-MINGW-support.patch
        0041-configure-fix-inet_pton-check.patch
        0042-importlib-bootstrap-path-sep.patch
        0043-configure-set-MINGW-stack-reserve.patch
        0044-tests-fix-test_bytes.patch
        0045-timemodule-add-MINGW-support.patch
        0046-configure-Disable-checks-for-dlopen-dlfcn.patch
        0047-venvlauncher-Build-venvlauncher.exe-from-PC-launcher.patch
        0048-venvlauncher-try-looking-for-the-versioned-.exe-firs.patch
        0049-venvlauncher-Skip-find-python-in-Registry-for-mingw-.patch
        0050-configure-don-t-check-for-clock_-functions.patch
        0051-CI-test-the-build-and-add-some-mingw-specific-tests.patch
        0052-configure-Default-to-without-c-locale-coercion-on-Wi.patch
        0053-tests-Fix-some-failing-tests.patch
        0054-build-def-VPATH-when-compiling-Python-sysmodule.c.patch
        0055-configure-correctly-find-native-python.patch
        0056-build-Add-extra-flags-for-_bootstrap_python.patch
        0057-getpath-add-support-for-mingw.patch
        0058-build-Don-t-build-_posixsubprocess-on-Windows.patch
        0059-ssl-module-add-MINGW-support.patch
        0060-configure-Include-winsock.h-when-checking-for-netdb-.patch
        0061-configure-always-build-_multiprocessing-on-Windows.patch
        0062-configure-build-mmap-module-on-win32.patch
        0063-configure-set-BUILDEXEEXT-and-EXEEXT.patch
        0064-configure-fix-building-some-test-modules.patch
        0065-Always-convert-to-before-passing-though-pathcch-func.patch
        0066-pylifecycle.h-remove-conflicting-_Py_CheckPython3-de.patch
        0067-dynload_win-add-env-var-for-reverting-the-legacy-DLL.patch
        0068-dynload_win-Port-GetPythonImport-to-MINGW.patch
        0069-dynload_win-make-sure-to-only-use-backslashes-for-pa.patch
        0070-dynload_win-don-t-run-_Py_CheckPython3-for-MINGW-bui.patch
        0071-build-Build-and-install-libpython3.dll-stable-ABI.patch
        0072-configure-define-_DEBUG-for-a-debug-build.patch
        0073-configure-fix-multiprocessing-module.patch
        0074-build-add-MINGW-support-for-selectmodule.patch
        0075-configure-disable-various-modules-on-MINGW.patch
        0076-configure-Add-libraries-to-fix-ctypes-on-MINGW.patch
        0077-configure-Enable-_uuid-on-MINGW.patch
        0078-configure-make-incompatible-pointer-types-a-warning.patch
        0079-tests-test_makefile-normalize-path.patch
        0080-Fix-include-naming-for-cross-build.patch
        0081-Fix-format-warning.patch
        0082-Fix-pragma-warnings.patch
        0083-math-pyhash-MINGW-support.patch
        0084-tests-Fix-test-for-library-name.patch
        0085-dictobject-MINGW-support.patch
        0086-build-Fix-export-Py_GetBuildInfo-symbol.patch
        0087-build-Allow-profile-tests-failure.patch
        0088-build-add-support-for-building-C-modules.patch
        0089-build-build-fix-the-wmi-module.patch
        0090-Fix-exports-for-_suggestions-module.patch
        0091-compileall-Normalize-paths.patch
        0092-configure-enable-64-bit-time-support-for-32-bit-buil.patch
        0093-configure-Work-around-broken-pc-file.patch
        0094-makesetup-make-sure-a-library-path-is-passed-when-bu.patch
        0095-venv-also-install-the-versioned-launchers.patch
        0096-configure-set-_WIN32_WINNT-version.patch
        0097-tests-fix-sysconfig.test_get_platform.patch
        0098-pycore_time-fix-missing-timeval.patch
        0099-mmapmodule-define-DONT_USE_SEH.patch
        0100-build-Add-ABIFLAGS-to-targets-when-needed.patch
        0101-sysconfig-patch-nt-schemes-again.patch
        0102-configure-define-_PYTHREAD_NAME_MAXLEN-for-MINGW.patch
        0103-configure-allow-older-autoconf.patch
        0104-tests-allow-sys.abiflags-to-exist.patch
        0105-configure-fix-AC_PATH_TOOL-usage.patch
        0106-makesetup-make-sure-to-link-the-built-libpython.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-build-add-with-nt-threads-and-make-it-default-on-min.patch \
  0002-build-Define-MS_WINDOWS-and-others-when-compiling-wi.patch \
  0003-sysmodule-Implement-flags-_is_mingw-is_mingw_ucrt-an.patch \
  0004-configure-add-MACHDEP-and-platform-on-MINGW.patch \
  0005-build-Add-default-cross-configuration-for-MINGW.patch \
  0006-configure-enable-largefile-support-by-default-for-Mi.patch \
  0007-build-Add-PC-to-CPPFLAGS-and-to-SRCDIRS-on-Mingw.patch \
  0008-build-add-MINGW-support-for-posixmodule.patch \
  0009-exports.h-Add-support-for-MINGW.patch \
  0010-configure-add-options-so-that-shared-build-is-possib.patch \
  0011-build-Add-PYD_PLATFORM_TAG.patch \
  0012-build-Add-dynload_win-support-for-MinGW.patch \
  0013-build-Use-.pyd-extension-suffix-fix-import-lib-insta.patch \
  0014-build-Configure-SOABI-and-EXT_SUFFIX-for-MINGW.patch \
  0015-build-Define-MS_DLL_ID-for-sys.winver-on-MINGW.patch \
  0016-build-Ignore-main-program-for-frozen-scripts-on-MING.patch \
  0017-socketmodule-add-MINGW-support.patch \
  0018-build-enable-winreg-msvcrt-_winapi-winsound-and-_ove.patch \
  0019-sysconfig-make-_sysconfigdata.py-relocatable.patch \
  0020-sysconfig-treat-MINGW-builds-as-POSIX-builds.patch \
  0021-sysconfig-Change-the-get_platform-method-in-sysconfi.patch \
  0022-build-semi-native-build-sysconfig.patch \
  0023-ctypes-Add-support-for-stdcall-without-underscore.patch \
  0024-ctypes-add-suppor-for-ctypes.pythonapi-under-MINGW.patch \
  0025-ctypes-find_library-c-should-return-None-with-ucrt.patch \
  0026-site-Customize-for-MINGW.patch \
  0027-site-Change-user-site-packages-path-to-include-the-e.patch \
  0028-python-config-output-Windows-paths-for-the-shell-var.patch \
  0029-python-config-use-the-Python-variant-of-python-confi.patch \
  0030-mingw-prefer-unix-sep-if-MSYSTEM-environment-variabl.patch \
  0031-build-Remove-MAXPATHLEN-default.patch \
  0032-build-dont-link-with-gettext.patch \
  0033-use-gnu_printf-in-format.patch \
  0034-build-remove-usage-of-MS_COREDLL.patch \
  0035-getcompiler-expose-MINGW-toolchain-related-informati.patch \
  0036-build-fix-signal-module-build.patch \
  0037-build-build-winconsoleio-and-_testconsole.patch \
  0038-multiprocessing-expose-sem_unlink-to-fix-multiproces.patch \
  0039-build-link-win-resource-files-and-build-pythonw.patch \
  0040-pycore_fileutils-add-MINGW-support.patch \
  0041-configure-fix-inet_pton-check.patch \
  0042-importlib-bootstrap-path-sep.patch \
  0043-configure-set-MINGW-stack-reserve.patch \
  0044-tests-fix-test_bytes.patch \
  0045-timemodule-add-MINGW-support.patch \
  0046-configure-Disable-checks-for-dlopen-dlfcn.patch \
  0047-venvlauncher-Build-venvlauncher.exe-from-PC-launcher.patch \
  0048-venvlauncher-try-looking-for-the-versioned-.exe-firs.patch \
  0049-venvlauncher-Skip-find-python-in-Registry-for-mingw-.patch \
  0050-configure-don-t-check-for-clock_-functions.patch \
  0051-CI-test-the-build-and-add-some-mingw-specific-tests.patch \
  0052-configure-Default-to-without-c-locale-coercion-on-Wi.patch \
  0053-tests-Fix-some-failing-tests.patch \
  0054-build-def-VPATH-when-compiling-Python-sysmodule.c.patch \
  0055-configure-correctly-find-native-python.patch \
  0056-build-Add-extra-flags-for-_bootstrap_python.patch \
  0057-getpath-add-support-for-mingw.patch \
  0058-build-Don-t-build-_posixsubprocess-on-Windows.patch \
  0059-ssl-module-add-MINGW-support.patch \
  0060-configure-Include-winsock.h-when-checking-for-netdb-.patch \
  0061-configure-always-build-_multiprocessing-on-Windows.patch \
  0062-configure-build-mmap-module-on-win32.patch \
  0063-configure-set-BUILDEXEEXT-and-EXEEXT.patch \
  0064-configure-fix-building-some-test-modules.patch \
  0065-Always-convert-to-before-passing-though-pathcch-func.patch \
  0066-pylifecycle.h-remove-conflicting-_Py_CheckPython3-de.patch \
  0067-dynload_win-add-env-var-for-reverting-the-legacy-DLL.patch \
  0068-dynload_win-Port-GetPythonImport-to-MINGW.patch \
  0069-dynload_win-make-sure-to-only-use-backslashes-for-pa.patch \
  0070-dynload_win-don-t-run-_Py_CheckPython3-for-MINGW-bui.patch \
  0071-build-Build-and-install-libpython3.dll-stable-ABI.patch \
  0072-configure-define-_DEBUG-for-a-debug-build.patch \
  0073-configure-fix-multiprocessing-module.patch \
  0074-build-add-MINGW-support-for-selectmodule.patch \
  0075-configure-disable-various-modules-on-MINGW.patch \
  0076-configure-Add-libraries-to-fix-ctypes-on-MINGW.patch \
  0077-configure-Enable-_uuid-on-MINGW.patch \
  0078-configure-make-incompatible-pointer-types-a-warning.patch \
  0079-tests-test_makefile-normalize-path.patch \
  0080-Fix-include-naming-for-cross-build.patch \
  0081-Fix-format-warning.patch \
  0082-Fix-pragma-warnings.patch \
  0083-math-pyhash-MINGW-support.patch \
  0084-tests-Fix-test-for-library-name.patch \
  0085-dictobject-MINGW-support.patch \
  0086-build-Fix-export-Py_GetBuildInfo-symbol.patch \
  0087-build-Allow-profile-tests-failure.patch \
  0088-build-add-support-for-building-C-modules.patch \
  0089-build-build-fix-the-wmi-module.patch \
  0090-Fix-exports-for-_suggestions-module.patch \
  0091-compileall-Normalize-paths.patch \
  0092-configure-enable-64-bit-time-support-for-32-bit-buil.patch \
  0093-configure-Work-around-broken-pc-file.patch \
  0094-makesetup-make-sure-a-library-path-is-passed-when-bu.patch \
  0095-venv-also-install-the-versioned-launchers.patch \
  0096-configure-set-_WIN32_WINNT-version.patch \
  0097-tests-fix-sysconfig.test_get_platform.patch \
  0098-pycore_time-fix-missing-timeval.patch \
  0099-mmapmodule-define-DONT_USE_SEH.patch \
  0100-build-Add-ABIFLAGS-to-targets-when-needed.patch \
  0101-sysconfig-patch-nt-schemes-again.patch \
  0102-configure-define-_PYTHREAD_NAME_MAXLEN-for-MINGW.patch \
  0103-configure-allow-older-autoconf.patch \
  0104-tests-allow-sys.abiflags-to-exist.patch \
  0105-configure-fix-AC_PATH_TOOL-usage.patch \
  0106-makesetup-make-sure-to-link-the-built-libpython.patch
 
  autoreconf -vfi
}

build() {
  declare -a _extra_config
  if check_option "debug" "n"; then
    _extra_config+=("--enable-optimizations")
    # Upstream defaults to -O3, so we can do too
    CFLAGS+=" -O3"
    # FIXME: https://github.com/msys2-contrib/cpython-mingw/issues/10
    if [[ $MINGW_PACKAGE_PREFIX == *-clang-* ]]; then
      _extra_config+=("--with-lto=full")
    fi
  else
    CFLAGS+=" -O0 -ggdb"
    CXXFLAGS+=" -O0 -ggdb"
    _extra_config+=("--with-pydebug")
  fi

  mkdir -p "${srcdir}/build-${MSYSTEM}" && cd "${srcdir}/build-${MSYSTEM}"

  ../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 \
    --enable-loadable-sqlite-extensions \
    --with-tzpath=${MINGW_PREFIX}/share/zoneinfo \
    "${_extra_config[@]}"

  make
}

check() {
  cd "${srcdir}/build-${MSYSTEM}"

  # 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-${MSYSTEM}"

  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/

  # License
  install -Dm644 "${srcdir}/Python-${pkgver}/LICENSE" "${pkgdir}${MINGW_PREFIX}/share/licenses/${_realname}${_pybasever}/LICENSE"

  # PEP668
  install -Dm644 "${srcdir}/EXTERNALLY-MANAGED" -t "${pkgdir}${MINGW_PREFIX}/lib/python${_pybasever}/"

  # fixup shebangs
  for fscripts in idle3 idle${_pybasever} pydoc3 pydoc${_pybasever}; do
    sed -e '1 { s|^#!.*$|#!/usr/bin/env python'"${_pybasever}"'.exe| }' -i "${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/libpython3.dll
    rm "${pkgdir}${MINGW_PREFIX}"/lib/libpython3.dll.a
    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=('a97d5549e9ad81fe17159ed02c68774ad5d266c72f8d9a0b5a9c371fe85d902b'
            '3981fed74ee7d43ad69bd67e634e03d7bf6890558a87062380112e195688728a'
            '88bebb5831b6bf02c8bbdf720afe6d2f079ee6a884d32a4d79d360e13fdfcb02'
            'b1e4738eb58e8493bee2cd3d6f1e11a0c664f99ec0ca45b4b5ccb4cb3d5f3b96'
            'cf8e14cb2eb020680fa403e5e8836a1ccdaba691572fecf07ae6bbe8893fa884'
            '75c1ce82a6fc317cdfbf23c914e155df8302f17882f49b17008e02304086a325'
            'b4efa498b016338b97edadf33463592817474d9c624dee971bcf8c798f3dd705'
            '66511bf61e6f2cad7a789a441b096060c5277331e6f335cca5557f12f8deb3c7'
            '0270fb4fde7125fffa8f04652bff2cd0ecae5b039ae403127fb2fe0e56efe3ab'
            '8025c58b73398c32cf902d5d5e0d0c265fca4d0e018b6ec2b1d7691418c76902'
            '05cc771d3b7237df7a63616ac0c708ea141b5164d68b0569ae1e98c7d0b9e0b7'
            'bac38120d337f8b9e1d5511398aa13691000f40dcc6ea5531cd4982e24ad7b71'
            '1243fbc81a103f7f528897d10ba78cd8d65b611fe19262c66e7f3191794d520a'
            'a5925c17fc6759cfe1415cc079b773e0313994a85678d67ce40a308ed84471eb'
            'dd371a2af01754b7bcdd9356b5169b284774256ccc072b71d1ae0824f1b79966'
            'aa381cd970184ab51741e9a8eb2d2eebdde621ad0f3a9d8e34bda9118f98d6a6'
            '08a09b33b358f9b9506b0062d82cdfd54da9095ddfd07374f7b518d728777702'
            '5e3545873164fa186653b631221aafcb11dab537a2b6c71f1ad98e3ce72ca5bd'
            '4367b7877ea3245d90cad1a9b8b943fa59bc514620ba582c1fa08ac3b5c66f8d'
            'c4c68270c2d6a2a430e7dbc740aa1d1123828b71967a27b25a38f7e04dcff131'
            '0c6d871f0b5e48c46c571d4103f18ce5b67a5f8884afe859078cb42854fa0069'
            'd72c65e333ff63386fdba66027efad60b0d6ae39d2830af7aff0a318c19c2cfd'
            '06f8d0c361b964326e729c4eb1c58f345d5bf3a91aaa46c773cd041ca90756ae'
            '8b3c4d567e3f8fbc525210d70b46cd326f0980fe994977d889020e0bfb453730'
            '0a7f9eeff6c2caf6b819d378a0d0e9e8e214713e99f61b6be607c6fef97a58e0'
            '315f729c8735020e19cbdf56e9114d062faff57cf661d505e0f46234b1d857ee'
            '3eea52603af1bcc1b6f108bba1548b2f8073486c7d7091d8c4c054e9d37ec639'
            'ada6454a2064cd258a7afe79675ca3d70fb2d2f6e5f572f0bd127b08abb3c992'
            '217cb6c30a52b9a4a31b567195c10a9772fc6ddbdcf3e03e1bba9d58bb2e2314'
            '40073c83a7280da2896a541ee3f68f779c449336edee04d580912bf882259515'
            '3d5b753bdee85d90863b732cd455c32523758027bd4896446eed044e978f4c81'
            '8f3e51c27923088a6a5cccb99c545fd78e7f7e66915f647be9d47ec7a5e46866'
            'ff74b9bb8be9a4f6ce44d16ec768dc5e7511e75bacd9ad5687e9f963a591558b'
            'd10137cecd8e39f1433fabea947684c16ef30731ef5dbaf428bc0e08ca76f823'
            'dc072f30897a49a8bf72ba410c262950332f9a90578b0e534f76056f39651d7f'
            '2905a13e7c529257a1a52623b129ee08cca73e4c516b01fa12135da3b204f9f1'
            'd350f53978acc48e8086ee490a24e48af4ba3e290eacc1c1d67d2ddf7c3beb20'
            'e3416cb32b8d9fda87c93c896f0e48f7c919488c91bfd63169e94163e698c73d'
            'c33a6ffba8b697ee7a650625f4c2f41a357fb2a2eeca5ca6d84d558a990eeaae'
            '4ec8d154285d83e5a534d30d105b8685bc28f4ca297636f226f572ffec40cb44'
            '15765fdff5c6f604548ab0d0d5c0a6972dd503f37f0a288807bb0beb79d27831'
            'b4915d761cf538ac4f149b4ec2d6553c1c523129ce70971c6175866750aa906d'
            '652c6752cc5f3b4c8244cb2b43c01aa6824a872d638d9eb36e2fffb17085fa9a'
            '8a85fcaba75004723b680975d6c988aa78d1438680f4911ea6949325d86d3ba6'
            'cf1310e2e3ff0906bd6b67c8c594966ee05737fae14a14f2f5dbdbc29662177e'
            '65e3423829def546b5370b46bb13ea5008ca1c5ceea4be6fd2a0c7f5f1154e98'
            '22830c52d9d2602651e29cded01c5bca6bc48814d151cb500983cff14f45aa38'
            '33f6ab0ffe387f0764a8b74e30a1ab8af0348feb21804aea262bca921b22e2d9'
            '6d89592f9f4d52ecc2a20db0e65d68b2ab9f4db15b1f6d50a3dc35a7a7ecdf86'
            '49361bf22f80dd076fb93b42657bd44117a8f7d431cbbe388497c54c5f8b2009'
            '26e4507f156d252d14574a6f9ede73164f82eaea07ffe9842ea06ec5d2dc0591'
            '3aa936a8707237b887eedc310858d759d4676e5778b7ad55ef3365709ec82ba5'
            '9990238f22bc79970d83da5aec2433b693ff74d009625c779413329057a8bf70'
            '4d6ad58b056ffc80c40904c5ec4b004091b24e91458ccd2c7bab657f764ae30d'
            'df2437a3af8087a51aecb63aeefed7d1b9d2c13297406e6e41e6a69fa557de76'
            'cbe84a7ce9d96c501db538fed53a4210ec35633981a39c13887795d7ee9ffdf9'
            '415b862f2a6bc9aae766b433534b98c7965d2260241b66130e9598c9737517e6'
            'a2250ea30a21f984968dd1b3f21aac68bb75ad53c3bf7e5920fd28a4bac65d94'
            'da2978e5067f7458955ded6ebb2ae78aead1ace8b2991883c313665f80f3999f'
            'f5e4520516d0a761f232f0dc045c0538e382eca26c85b58fed0480d363367601'
            'afde92687973af2420b7eb43d3a370025dc2ca645f94dc2edd45d3355434a583'
            'ab64cbe1bcc4e99a2681be64bf1ebd154b22b66070d55328b0b1459be71d541c'
            '6df7102331ff3bb72cca42b37c83874ba302d255e219ce5d2018670183c2bc31'
            'f20590c25f20b60fe3bf270418feaf115a760191439182c1e80adfafd4df407e'
            '8a80136a918e223d1c30e077729af103c3dfb065eec2e5906f1d838e8bd3a7bc'
            '99580e1306cbad1f2095f9aa85a77f0c192f63bc6e235f3eac6684c651804ae2'
            '3e0ced95885757a00c3ecf47d1d9e4e834e72065506265fc1b020eec450e6309'
            '80b039075e0448bea1900b3f917b3f71810243a53347d16f86a9b5c099436bcd'
            '052259a4cc50ebd95b5412e9b1068fd2526b8a7fd02add24cc5fa35b80c4f1fe'
            'd20e7f4f8be1073f766bfa388e4a18d6aa7dde217ac85d42168b9e483cc4523f'
            'ddbbfeac3a8de2339365dc1aebf0b37a9a7f6ce31eda61331b9352a5e34955af'
            'bbc93c1c9e9cb9181182169c5b3399fd36b16dbb1a0d834af5e4f9efc864bb6c'
            '330588107bee45b8584084daab96173b602a9ba9c15237d3afd0b75ea3ff8eff'
            '493179a5c75e3e5da8766f6cea71c9ed1ee5788ed92cd49c86648552ef3e76ed'
            'b2fc209992635fff008b28d67fc5db79f46d58020c409d2fbabcb1a783e9824f'
            'dbbdbe156ca04c8b484252612b441e962547714949f5089e4e7f0664b5f5f3d6'
            '07a15b69d19afcce028dc5afd67366efadd57d1d0483593f18aa0fa4345f40c5'
            '2c3fc7e1d708c40142994a27df935d226c2d231f1268aadcf098d9a2cc4840f8'
            'fd9bd04c6a8ca3df5f2bf83e8e95f5430638bd469f39c9ceff1d2acd33d1eab7'
            'b7f2861f0c9e6189ab74027731454028dfc80caf24a59b16fb13d46bef1ebeee'
            '3587a270e20344f809991e1d45fc27a7323bd9dbb042e8c39df5071570b60b64'
            'e19ad14a9366133ef0d8945998594b40b1a2456c5655ed5c8dd3a72b69ec1cc3'
            'c75934c571410a9376cd312aa674c4cbdf21a6f1d55bd853eb5cd0c851445fbf'
            'db10447211655d1c3c7abceca357cbf238872976619085e82ee54bf1a2c8eb6a'
            '409c4061bc808a7861a49ab6be1bea845ba00445e3d9d4322297d8bce8f39ec9'
            '027fe9e7e628431225be9ff09d3d7c33d79652d32f19bc0f7259617d85cf0d54'
            '7d55ff0ed6345d7f1843aac9a88c6105e5200a9372b9724075069c6b48736e39'
            'c006049f81cd702911b12a13765f8f2f4660c482644ca2095f581e40607116f6'
            '070296ac79f046a8a961c527f40eb1bc099d7a97eae95feff55aeaa021219b90'
            '22188e6fb5834dc54fce58662d752ef770a53d02b9ddc3669b4e503abe5b8b86'
            '7d3ce4a5476ff18b227637a5e0bf64bca038cebd9f2b20f049e68309cf6f3e68'
            'cf5472f4cd85b10ed866213550dc1120750a72e6e07b14a3e2d6819728e5676d'
            '8fd5dddd18145d452a776bbb6c7a69bc14de3aebe5ab4603df24ec13452acb77'
            'e3385bf25e1bb4cec8f68b097b892e6a33812f651d717a1b9e64dd3874792688'
            'fcfdb4f255b180d37755395f31fc88a58231bed293ed8f5021cb2b023cff3894'
            'ae989ef6bb61649484b38e78ff0ea4cff6ac286f23506c3ecdc154b960ee86f9'
            '53577ee56c3ca9c221cda1f790b5efaf8192e5172966184301a3e33acca0132a'
            '1d09ee244db827b52b73f64792931c66a47a1f367d4b558e590f37f860973b4c'
            '3f0a9139fcad3bf18ee88d87f7e81f73e503243b765baca61abb740fe6c715d8'
            '2acfd5549f2b8c5c3bcf95d096d439234a013d9714669ba595c1a8056120dee1'
            '2447e2a895b93b42111783e4454b646ba19b85081a6ed0ccb08c67f7e545daa2'
            '73c1442f490a0988c2c825bec6e7334f395f46ac978759d2baadc7317805b953'
            'b67a37ad6c64e150b793e88f4d63f8a0f9092af16bf07c4c01910b56e07d32b9'
            'e23de32325daced7f8e7e155509ac85ec8ee17cbfd7f827deed303be0641fa87'
            '5de2bbd59aa741b28577e2ba016f55fcaf041cf0d0cab4bb2242156d27360fd8'
            'a52a592d8a6bf2465f94b6d8b5a27e235691bf3a7f59ade77a6d74a4c9af614c'
            'c1afc607acae6103cbd61733046edeac0ddcb0afefb52ee31607fa04aa52d7c2'
            '0561de82c0f1153104549048c3f52d4ed1c44afcda3b745894afc4c5c5ff48ee')
