From 6ec4b4162e52b8a2c17b8fa7ff1e071c010db009 Mon Sep 17 00:00:00 2001 From: Alexpux Date: Tue, 11 Feb 2014 23:49:22 +0400 Subject: [PATCH] python2: Use posix layout for installations. --- .../0540-mingw-install-layout-as-posix.patch | 28 ++ mingw-w64-python2/PKGBUILD | 283 +++++++++--------- 2 files changed, 172 insertions(+), 139 deletions(-) create mode 100644 mingw-w64-python2/0540-mingw-install-layout-as-posix.patch diff --git a/mingw-w64-python2/0540-mingw-install-layout-as-posix.patch b/mingw-w64-python2/0540-mingw-install-layout-as-posix.patch new file mode 100644 index 0000000000..a6290f0a21 --- /dev/null +++ b/mingw-w64-python2/0540-mingw-install-layout-as-posix.patch @@ -0,0 +1,28 @@ +--- Python-2.7.6/Lib/distutils/command/install.py.orig 2014-02-11 23:40:23.180600000 +0400 ++++ Python-2.7.6/Lib/distutils/command/install.py 2014-02-11 23:44:48.104600000 +0400 +@@ -32,10 +32,10 @@ + } + else: + WINDOWS_SCHEME = { +- 'purelib': '$base/Lib/site-packages', +- 'platlib': '$base/Lib/site-packages', +- 'headers': '$base/Include/$dist_name', +- 'scripts': '$base/Scripts', ++ 'purelib': '$base/lib/python$py_version_short/site-packages', ++ 'platlib': '$base/lib/python$py_version_short/site-packages', ++ 'headers': '$base/include/python$py_version_short/$dist_name', ++ 'scripts': '$base/bin', + 'data' : '$base', + } + +@@ -65,8 +65,8 @@ + 'nt_user': { + 'purelib': '$usersite', + 'platlib': '$usersite', +- 'headers': '$userbase/Python$py_version_nodot/Include/$dist_name', +- 'scripts': '$userbase/Scripts', ++ 'headers': '$userbase/include/python$py_version_short/$dist_name', ++ 'scripts': '$userbase/bin', + 'data' : '$userbase', + }, + 'os2': { diff --git a/mingw-w64-python2/PKGBUILD b/mingw-w64-python2/PKGBUILD index e0563560e4..7ff22fab69 100644 --- a/mingw-w64-python2/PKGBUILD +++ b/mingw-w64-python2/PKGBUILD @@ -53,167 +53,171 @@ source=("http://www.python.org/ftp/python/${pkgver%rc?}/Python-${pkgver}.tar.xz" 0520-Add-interp-Python-DESTSHARED-to-PYTHONPATH-b4-pybuilddir-txt-dir.patch 0525-msys-monkeypatch-os-system-via-sh-exe.patch 0530-msys-mingw-prefer-unix-sep-if-MSYSTEM.patch - 0535-msys-cygwin-semi-native-build-sysconfig.patch) + 0535-msys-cygwin-semi-native-build-sysconfig.patch + 0540-mingw-install-layout-as-posix.patch) + prepare() { - cd "${srcdir}/Python-${pkgver}" + cd "${srcdir}/Python-${pkgver}" - # Remove files created by patching so repatching succeeds. - rm -f Modules/_ctypes/libffi_msvc/win32.S Python/fileblocks.c Misc/python-config.sh.in + # Remove files created by patching so repatching succeeds. + rm -f Modules/_ctypes/libffi_msvc/win32.S Python/fileblocks.c Misc/python-config.sh.in - patch -Np1 -i "${srcdir}"/0005-MINGW.patch - patch -Np1 -i "${srcdir}"/0006-mingw-removal-of-libffi-patch.patch - patch -Np1 -i "${srcdir}"/0007-mingw-system-libffi.patch - patch -Np1 -i "${srcdir}"/0010-mingw-osdefs-DELIM.patch - patch -Np1 -i "${srcdir}"/0015-mingw-use-posix-getpath.patch - patch -Np1 -i "${srcdir}"/0020-mingw-w64-test-for-REPARSE_DATA_BUFFER.patch - patch -Np1 -i "${srcdir}"/0025-mingw-regen-with-stddef-instead.patch - patch -Np1 -i "${srcdir}"/0030-mingw-add-libraries-for-_msi.patch - patch -Np1 -i "${srcdir}"/0035-MSYS-add-MSYSVPATH-AC_ARG.patch - patch -Np1 -i "${srcdir}"/0040-mingw-cygwinccompiler-use-CC-envvars-and-ld-from-print-prog-name.patch - patch -Np1 -i "${srcdir}"/0045-cross-darwin.patch - patch -Np1 -i "${srcdir}"/0050-mingw-sysconfig-like-posix.patch - patch -Np1 -i "${srcdir}"/0055-mingw-pdcurses_ISPAD.patch - patch -Np1 -i "${srcdir}"/0060-mingw-static-tcltk.patch - patch -Np1 -i "${srcdir}"/0065-mingw-x86_64-size_t-format-specifier-pid_t.patch - patch -Np1 -i "${srcdir}"/0070-python-disable-dbm.patch - patch -Np1 -i "${srcdir}"/0075-add-python-config-sh.patch - patch -Np1 -i "${srcdir}"/0080-mingw-nt-threads-vs-pthreads.patch - patch -Np1 -i "${srcdir}"/0085-cross-dont-add-multiarch-paths-if.patch - patch -Np1 -i "${srcdir}"/0090-mingw-reorder-bininstall-ln-symlink-creation.patch - patch -Np1 -i "${srcdir}"/0095-mingw-use-backslashes-in-compileall-py.patch - patch -Np1 -i "${srcdir}"/0100-mingw-distutils-MSYS-convert_path-fix-and-root-hack.patch - patch -Np1 -i "${srcdir}"/0105-mingw-MSYS-no-usr-lib-or-usr-include.patch - patch -Np1 -i "${srcdir}"/0110-mingw-_PyNode_SizeOf-decl-fix.patch - patch -Np1 -i "${srcdir}"/0115-mingw-cross-includes-lower-case.patch - patch -Np1 -i "${srcdir}"/0500-mingw-install-LDLIBRARY-to-LIBPL-dir.patch - patch -Np1 -i "${srcdir}"/0505-add-build-sysroot-config-option.patch - patch -Np1 -i "${srcdir}"/0510-cross-PYTHON_FOR_BUILD-gteq-275-and-fullpath-it.patch - patch -Np1 -i "${srcdir}"/0515-mingw-add-GetModuleFileName-path-to-PATH.patch - patch -Np1 -i "${srcdir}"/0520-Add-interp-Python-DESTSHARED-to-PYTHONPATH-b4-pybuilddir-txt-dir.patch - patch -Np1 -i "${srcdir}"/0525-msys-monkeypatch-os-system-via-sh-exe.patch - patch -Np1 -i "${srcdir}"/0530-msys-mingw-prefer-unix-sep-if-MSYSTEM.patch - patch -Np1 -i "${srcdir}"/0535-msys-cygwin-semi-native-build-sysconfig.patch + patch -Np1 -i "${srcdir}"/0005-MINGW.patch + patch -Np1 -i "${srcdir}"/0006-mingw-removal-of-libffi-patch.patch + patch -Np1 -i "${srcdir}"/0007-mingw-system-libffi.patch + patch -Np1 -i "${srcdir}"/0010-mingw-osdefs-DELIM.patch + patch -Np1 -i "${srcdir}"/0015-mingw-use-posix-getpath.patch + patch -Np1 -i "${srcdir}"/0020-mingw-w64-test-for-REPARSE_DATA_BUFFER.patch + patch -Np1 -i "${srcdir}"/0025-mingw-regen-with-stddef-instead.patch + patch -Np1 -i "${srcdir}"/0030-mingw-add-libraries-for-_msi.patch + patch -Np1 -i "${srcdir}"/0035-MSYS-add-MSYSVPATH-AC_ARG.patch + patch -Np1 -i "${srcdir}"/0040-mingw-cygwinccompiler-use-CC-envvars-and-ld-from-print-prog-name.patch + patch -Np1 -i "${srcdir}"/0045-cross-darwin.patch + patch -Np1 -i "${srcdir}"/0050-mingw-sysconfig-like-posix.patch + patch -Np1 -i "${srcdir}"/0055-mingw-pdcurses_ISPAD.patch + patch -Np1 -i "${srcdir}"/0060-mingw-static-tcltk.patch + patch -Np1 -i "${srcdir}"/0065-mingw-x86_64-size_t-format-specifier-pid_t.patch + patch -Np1 -i "${srcdir}"/0070-python-disable-dbm.patch + patch -Np1 -i "${srcdir}"/0075-add-python-config-sh.patch + patch -Np1 -i "${srcdir}"/0080-mingw-nt-threads-vs-pthreads.patch + patch -Np1 -i "${srcdir}"/0085-cross-dont-add-multiarch-paths-if.patch + patch -Np1 -i "${srcdir}"/0090-mingw-reorder-bininstall-ln-symlink-creation.patch + patch -Np1 -i "${srcdir}"/0095-mingw-use-backslashes-in-compileall-py.patch + patch -Np1 -i "${srcdir}"/0100-mingw-distutils-MSYS-convert_path-fix-and-root-hack.patch + patch -Np1 -i "${srcdir}"/0105-mingw-MSYS-no-usr-lib-or-usr-include.patch + patch -Np1 -i "${srcdir}"/0110-mingw-_PyNode_SizeOf-decl-fix.patch + patch -Np1 -i "${srcdir}"/0115-mingw-cross-includes-lower-case.patch + patch -Np1 -i "${srcdir}"/0500-mingw-install-LDLIBRARY-to-LIBPL-dir.patch + patch -Np1 -i "${srcdir}"/0505-add-build-sysroot-config-option.patch + patch -Np1 -i "${srcdir}"/0510-cross-PYTHON_FOR_BUILD-gteq-275-and-fullpath-it.patch + patch -Np1 -i "${srcdir}"/0515-mingw-add-GetModuleFileName-path-to-PATH.patch + patch -Np1 -i "${srcdir}"/0520-Add-interp-Python-DESTSHARED-to-PYTHONPATH-b4-pybuilddir-txt-dir.patch + patch -Np1 -i "${srcdir}"/0525-msys-monkeypatch-os-system-via-sh-exe.patch + patch -Np1 -i "${srcdir}"/0530-msys-mingw-prefer-unix-sep-if-MSYSTEM.patch + patch -Np1 -i "${srcdir}"/0535-msys-cygwin-semi-native-build-sysconfig.patch + patch -Np1 -i "${srcdir}"/0540-mingw-install-layout-as-posix.patch - autoreconf -vfi - - # Temporary workaround for FS#22322 - # See http://bugs.python.org/issue10835 for upstream report - sed -i "/progname =/s/python/python${_pybasever}/" Python/pythonrun.c + autoreconf -vfi - # Enable built-in SQLite module to load extensions (fix FS#22122) - sed -i "/SQLITE_OMIT_LOAD_EXTENSION/d" setup.py + # Temporary workaround for FS#22322 + # See http://bugs.python.org/issue10835 for upstream report + sed -i "/progname =/s/python/python${_pybasever}/" Python/pythonrun.c - # FS#23997 - sed -i -e "s|^#.* /usr/local/bin/python|#!/usr/bin/python2|" Lib/cgi.py + # Enable built-in SQLite module to load extensions (fix FS#22122) + sed -i "/SQLITE_OMIT_LOAD_EXTENSION/d" setup.py - sed -i "s/python2.3/python2/g" Lib/distutils/tests/test_build_scripts.py \ - Lib/distutils/tests/test_install_scripts.py Tools/scripts/gprof2html.py - - touch Include/graminit.h - touch Python/graminit.c - touch Parser/Python.asdl - touch Parser/asdl.py - touch Parser/asdl_c.py - touch Include/Python-ast.h - touch Python/Python-ast.c - echo \"\" > Parser/pgen.stamp - - # Ensure that we are using the system copy of various libraries (expat, zlib and libffi), - # rather than copies shipped in the tarball - rm -r Modules/expat - rm -r Modules/zlib - rm -r Modules/_ctypes/{darwin,libffi}* - + # FS#23997 + sed -i -e "s|^#.* /usr/local/bin/python|#!/usr/bin/python2|" Lib/cgi.py + + sed -i "s/python2.3/python2/g" Lib/distutils/tests/test_build_scripts.py \ + Lib/distutils/tests/test_install_scripts.py Tools/scripts/gprof2html.py + + touch Include/graminit.h + touch Python/graminit.c + touch Parser/Python.asdl + touch Parser/asdl.py + touch Parser/asdl_c.py + touch Include/Python-ast.h + touch Python/Python-ast.c + echo \"\" > Parser/pgen.stamp + + # Ensure that we are using the system copy of various libraries (expat, zlib and libffi), + # rather than copies shipped in the tarball + rm -r Modules/expat + rm -r Modules/zlib + rm -r Modules/_ctypes/{darwin,libffi}* } build() { - pushd ${MINGW_PREFIX} > /dev/null - export PREFIX_WIN=`pwd -W` - popd > /dev/null + pushd ${MINGW_PREFIX} > /dev/null + export PREFIX_WIN=`pwd -W` + popd > /dev/null - CFLAGS+=" -fwrapv -D__USE_MINGW_ANSI_STDIO=1 -I$PREFIX_WIN/${MINGW_CHOST}/include " - CXXFLAGS+=" -fwrapv -D__USE_MINGW_ANSI_STDIO=1 -I$PREFIX_WIN/include -I$PREFIX_WIN/include/ncursesw -I$MINGWHOME_WIN/$HOST/include " - CPPFLAGS+=" -I$PREFIX_WIN/include -I$PREFIX_WIN/include/ncursesw -I$PREFIX_WIN/${MINGW_CHOST}/include " - LDFLAGS+=" -L$PREFIX_WIN/${MINGW_CHOST}/lib -L$PREFIX_WIN/lib " - if check_option "strip" "y"; then - LDFLAGS+=" -s " - fi - if check_option "debug" "n"; then - CFLAGS+=" -DNDEBUG " - CXXFLAGS+=" -DNDEBUG " - else - plain " -DDEBUG -DPy_DEBUG -D_DEBUG does not work unfortunately .." -# CFLAGS+=" -DDEBUG -DPy_DEBUG -D_DEBUG " -# CXXFLAGS+=" -DDEBUG -DPy_DEBUG -D_DEBUG " - CFLAGS+=" -O0 -ggdb" - CXXFLAGS+=" -O0 -ggdb" - fi + CFLAGS+=" -fwrapv -D__USE_MINGW_ANSI_STDIO=1 -I$PREFIX_WIN/${MINGW_CHOST}/include " + CXXFLAGS+=" -fwrapv -D__USE_MINGW_ANSI_STDIO=1 -I$PREFIX_WIN/include -I$PREFIX_WIN/include/ncursesw -I$MINGWHOME_WIN/$HOST/include " + CPPFLAGS+=" -I$PREFIX_WIN/include -I$PREFIX_WIN/include/ncursesw -I$PREFIX_WIN/${MINGW_CHOST}/include " + LDFLAGS+=" -L$PREFIX_WIN/${MINGW_CHOST}/lib -L$PREFIX_WIN/lib " + if check_option "strip" "y"; then + LDFLAGS+=" -s " + fi + if check_option "debug" "n"; then + CFLAGS+=" -DNDEBUG " + CXXFLAGS+=" -DNDEBUG " + else + plain " -DDEBUG -DPy_DEBUG -D_DEBUG does not work unfortunately .." + # CFLAGS+=" -DDEBUG -DPy_DEBUG -D_DEBUG " + # CXXFLAGS+=" -DDEBUG -DPy_DEBUG -D_DEBUG " + CFLAGS+=" -O0 -ggdb" + CXXFLAGS+=" -O0 -ggdb" + fi - LIBFFI_INC=`${MINGW_PREFIX}/bin/pkg-config libffi --cflags-only-I | sed "s|\-I||g"` - pushd ${LIBFFI_INC} > /dev/null - export LIBFFI_INCLUDEDIR=`pwd -W` - popd > /dev/null - - # Workaround for conftest error on 64-bit builds - export ac_cv_working_tzset=no - - mkdir -p "${srcdir}/build-${CARCH}" && cd "${srcdir}/build-${CARCH}" - MSYSTEM=MINGW ../Python-${pkgver}/configure \ - --prefix=${MINGW_PREFIX} \ - --host=${MINGW_CHOST} \ - --build=${MINGW_CHOST} \ - --enable-shared \ - --with-threads \ - --with-system-expat \ - --with-system-ffi \ - OPT="" \ - CXX=g++ - # --with-dbmliborder=gdbm:ndbm - make + LIBFFI_INC=`${MINGW_PREFIX}/bin/pkg-config libffi --cflags-only-I | sed "s|\-I||g"` + pushd ${LIBFFI_INC} > /dev/null + export LIBFFI_INCLUDEDIR=`pwd -W` + popd > /dev/null + + # Workaround for conftest error on 64-bit builds + export ac_cv_working_tzset=no + + mkdir -p "${srcdir}/build-${CARCH}" && cd "${srcdir}/build-${CARCH}" + MSYSTEM=MINGW ../Python-${pkgver}/configure \ + --prefix=${MINGW_PREFIX} \ + --host=${MINGW_CHOST} \ + --build=${MINGW_CHOST} \ + --enable-shared \ + --with-threads \ + --with-system-expat \ + --with-system-ffi \ + --with-dbmliborder=gdbm:ndbm \ + OPT="" \ + CXX=g++ + make } package() { - cd "${srcdir}/build-${CARCH}" - MSYSTEM=MINGW \ - MSYS2_ARG_CONV_EXCL="--prefix=;--install-scripts=;--install-platlib=" \ - make install DESTDIR="$pkgdir" - mv "${pkgdir}${MINGW_PREFIX}"/bin/smtpd.py "${pkgdir}${MINGW_PREFIX}"/lib/python${_pybasever}/ + cd "${srcdir}/build-${CARCH}" + MSYSTEM=MINGW \ + MSYS2_ARG_CONV_EXCL="--prefix=;--install-scripts=;--install-platlib=" \ + make install DESTDIR="$pkgdir" - cp -f "${pkgdir}${MINGW_PREFIX}"/lib/python${_pybasever}/config/libpython${_pybasever}.dll.a "${pkgdir}${MINGW_PREFIX}"/lib/libpython${_pybasever}.dll.a + mv "${pkgdir}${MINGW_PREFIX}"/bin/smtpd.py "${pkgdir}${MINGW_PREFIX}"/lib/python${_pybasever}/ - # 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/ + cp -f "${pkgdir}${MINGW_PREFIX}"/lib/python${_pybasever}/config/libpython${_pybasever}.dll.a "${pkgdir}${MINGW_PREFIX}"/lib/libpython${_pybasever}.dll.a - # clean up #!s - find "${pkgdir}${MINGW_PREFIX}"/lib/python${_pybasever}/ -name '*.py' | \ - xargs sed -i "s|#[ ]*![ ]*/usr/bin/env python$|#!/usr/bin/env python2|" + # 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/ - # clean-up reference to build directory - sed -i "s#${srcdir}/Python-${pkgver}:##" "${pkgdir}${MINGW_PREFIX}"/lib/python${_pybasever}/config/Makefile - - #sed -i -e "s|^#.* /usr/local/bin/python|#!/usr/bin/python2|" - sed -i "s|#!${pkgdir}${MINGW_PREFIX}/bin/python${_pybasever}.exe|#!python2|" "${pkgdir}${MINGW_PREFIX}"/bin/python${_pybasever}-config - sed -i "s|#!${pkgdir}${MINGW_PREFIX}/bin/python${_pybasever}.exe|#!python2|" "${pkgdir}${MINGW_PREFIX}"/bin/python2-config - sed -i "s|#!${pkgdir}${MINGW_PREFIX}/bin/python${_pybasever}.exe|#!python2|" "${pkgdir}${MINGW_PREFIX}"/bin/python-config + # clean up #!s + find "${pkgdir}${MINGW_PREFIX}"/lib/python${_pybasever}/ -name '*.py' | \ + xargs sed -i "s|#[ ]*![ ]*/usr/bin/env python$|#!/usr/bin/env python2|" - # fix permissons - find ${pkgdir}${MINGW_PREFIX} -type f \( -name *.dll -o -name *.exe \) | xargs chmod 0755 - - # Fix up two instances of MSYS2 paths in python-config.sh in-case the final consumer of the results are native executables. - sed -i "s|${MINGW_PREFIX}|${PREFIX_WIN}|" "${pkgdir}${MINGW_PREFIX}"/bin/python-config.sh + # clean-up reference to build directory + sed -i "s#${srcdir}/Python-${pkgver}:##" "${pkgdir}${MINGW_PREFIX}"/lib/python${_pybasever}/config/Makefile - # replace paths in sysconfig - sed -i "s|${pkgdir}${MINGW_PREFIX}|${MINGW_PREFIX}|g" \ - "${pkgdir}${MINGW_PREFIX}"/lib/python${_pybasever}/_sysconfigdata.py \ - "${pkgdir}${MINGW_PREFIX}"/lib/python${_pybasever}/smtpd.py + #sed -i -e "s|^#.* /usr/local/bin/python|#!/usr/bin/python2|" + sed -i "s|#!${pkgdir}${MINGW_PREFIX}/bin/python${_pybasever}.exe|#!python2|" "${pkgdir}${MINGW_PREFIX}"/bin/python${_pybasever}-config + sed -i "s|#!${pkgdir}${MINGW_PREFIX}/bin/python${_pybasever}.exe|#!python2|" "${pkgdir}${MINGW_PREFIX}"/bin/python2-config + sed -i "s|#!${pkgdir}${MINGW_PREFIX}/bin/python${_pybasever}.exe|#!python2|" "${pkgdir}${MINGW_PREFIX}"/bin/python-config - # replace paths in pkgconfig files - for _file in "${pkgdir}${MINGW_PREFIX}"/lib/pkgconfig/*.pc; do - sed -i "s|${pkgdir}${MINGW_PREFIX}|${MINGW_PREFIX}|g" $_file - done + # fix permissons + find ${pkgdir}${MINGW_PREFIX} -type f \( -name *.dll -o -name *.exe \) | xargs chmod 0755 + + # Fix up two instances of MSYS2 paths in python-config.sh in-case the final consumer of the results are native executables. + sed -i "s|${MINGW_PREFIX}|${PREFIX_WIN}|" "${pkgdir}${MINGW_PREFIX}"/bin/python-config.sh + + # replace paths in sysconfig + sed -i "s|${pkgdir}${MINGW_PREFIX}|${MINGW_PREFIX}|g" \ + "${pkgdir}${MINGW_PREFIX}"/lib/python${_pybasever}/_sysconfigdata.py \ + "${pkgdir}${MINGW_PREFIX}"/lib/python${_pybasever}/smtpd.py + + # replace paths in pkgconfig files + for _file in "${pkgdir}${MINGW_PREFIX}"/lib/pkgconfig/*.pc; do + sed -i "s|${pkgdir}${MINGW_PREFIX}|${MINGW_PREFIX}|g" $_file + done } + sha1sums=('8321636af2acbeaa68fc635d7dda7369ed446a80' 'a0906988a059ce6cb5029132035eaa4de207d6ed' 'fc595de283e5437fbb61a71f3e6e3d8549e4df99' @@ -247,4 +251,5 @@ sha1sums=('8321636af2acbeaa68fc635d7dda7369ed446a80' '484ebdb5eaf2a2469ba368a1cc1e721475958542' '10e704afbabdcb0d966be4f7dfd4961bb51cb580' 'ecbcc13515f6195b6930b6eb5a9326e7f8398179' - '6d5893cfd91c96b7883cfacfd09710a7549290d0') + '6d5893cfd91c96b7883cfacfd09710a7549290d0' + '1b867e941b1fa702febc2b36ce3b9dd195b3d774')