From cd39c1136e91b1ecbcb7f284068aaeaefe0994a1 Mon Sep 17 00:00:00 2001 From: Totto16 Date: Thu, 14 Nov 2024 18:38:18 +0100 Subject: [PATCH 01/37] fix: android guard toolchains folder creation --- platforms/build-android.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/platforms/build-android.sh b/platforms/build-android.sh index 6c80eee87..4490ad4f9 100755 --- a/platforms/build-android.sh +++ b/platforms/build-android.sh @@ -2,7 +2,9 @@ set -e -mkdir -p toolchains +if [ ! -d "toolchains" ]; then + mkdir -p toolchains +fi export NDK_VER_DOWNLOAD="r28-beta1" export NDK_VER_DESC="r28-beta1" From 1ffc27742a10ac99f46488ce593412a04f4dba88 Mon Sep 17 00:00:00 2001 From: Totto16 Date: Thu, 14 Nov 2024 18:44:35 +0100 Subject: [PATCH 02/37] feat: WIP emscripten build script --- platforms/build-web.sh | 125 ++++++++++++++++++++++++++++++++++++++ tools/options/meson.build | 3 +- 2 files changed, 127 insertions(+), 1 deletion(-) create mode 100755 platforms/build-web.sh diff --git a/platforms/build-web.sh b/platforms/build-web.sh new file mode 100755 index 000000000..9c3b94e9a --- /dev/null +++ b/platforms/build-web.sh @@ -0,0 +1,125 @@ +#!/usr/bin/env bash + +set -e + +if [ ! -d "toolchains" ]; then + mkdir -p toolchains +fi + +export EMSCRIPTEN_ROOT="$(pwd)/toolchains/emsdk" + +if [ ! -d "$EMSCRIPTEN_ROOT" ]; then + git clone https://github.com/emscripten-core/emsdk.git "$EMSCRIPTEN_ROOT" +fi + +"$EMSCRIPTEN_ROOT/emsdk" install latest >/dev/null +"$EMSCRIPTEN_ROOT/emsdk" activate latest >/dev/null + +# shellcheck disable=SC1091 +EMSDK_QUIET=1 source "$EMSCRIPTEN_ROOT/emsdk_env.sh" >/dev/null + +export EMSCRIPTEN_SYS_ROOT="$EMSCRIPTEN_ROOT/upstream/emscripten/cache/sysroot" + +export BUILD_DIR="build-emcc" + +export CC="emcc" +export CXX="em++" +export AR="emar" +export RANLIB="emranlib" +export STRIP="emstrip" + +export ARCH="wasm32" +export CPU_ARCH="wasm32" +export ENDIANESS="little" + +export COMMON_EMSCRIPTEN_OPTIONS="'-fexceptions', '-sEXCEPTION_CATCHING_ALLOWED=[..]'" + +# TODO see if ALLOW_MEMORY_GROWTH is needed, but if we load ttf's and music it likely is and we don't have to debug OOm crahses, that aren't handled by some thrid party library, which is painful +export LINK_EMSCRIPTEN_OPTIONS="$COMMON_EMSCRIPTEN_OPTIONS, '-sEXPORT_ALL=1', '-sUSE_GLFW=3', '-sUSE_WEBGPU=1', '-sWASM=1', '-sALLOW_MEMORY_GROWTH=1', '-sNO_EXIT_RUNTIME=0', '-sASSERTIONS=1'" +export COMPILE_EMSCRIPTEN_OPTIONS="$COMMON_EMSCRIPTEN_OPTIONS" + +export CROSS_FILE="./platforms/crossbuild-web.ini" + +cat <"$CROSS_FILE" +[host_machine] +system = 'emscripten' +cpu_family = '$ARCH' +cpu = '$CPU_ARCH' +endian = '$ENDIANESS' + +[target_machine] +system = 'emscripten' +cpu_family = '$ARCH' +cpu = '$CPU_ARCH' +endian = '$ENDIANESS' + +[constants] +emscripten_root = '$(pwd)/emsdk' + +[binaries] +c = '$CC' +cpp = '$CXX' +ar = '$AR' +ranlib = '$RANLIB' +strip = '$STRIP' +pkg-config = ['emmake', 'env', 'PKG_CONFIG_PATH=PREFIX_GOES_HERE/lib/pkgconfig', 'pkg-config'] +cmake = ['emmake', 'cmake'] +sdl2-config = ['emconfigure', 'sdl2-config'] + +exe_wrapper = '$EMSDK_NODE' + +[built-in options] +c_std = 'c11' +cpp_std = 'c++20' +c_args = [$COMPILE_EMSCRIPTEN_OPTIONS] +c_link_args = [$LINK_EMSCRIPTEN_OPTIONS] +cpp_args = [$COMPILE_EMSCRIPTEN_OPTIONS] +cpp_link_args = [$LINK_EMSCRIPTEN_OPTIONS] + +[properties] +needs_exe_wrapper = true +sys_root = '$EMSCRIPTEN_SYS_ROOT' + + +EOF + +## options: "smart, complete_rebuild" +export COMPILE_TYPE="smart" + +export BUILDTYPE="debug" + +if [ "$#" -eq 0 ]; then + # nothing + echo "Using compile type '$COMPILE_TYPE'" +elif [ "$#" -eq 1 ]; then + COMPILE_TYPE="$1" +elif [ "$#" -eq 2 ]; then + COMPILE_TYPE="$1" + BUILDTYPE="$2" +else + echo "Too many arguments given, expected 1 or 2" + exit 1 +fi + +if [ "$COMPILE_TYPE" == "smart" ]; then + : # noop +elif [ "$COMPILE_TYPE" == "complete_rebuild" ]; then + : # noop +else + echo "Invalid COMPILE_TYPE, expected: 'smart' or 'complete_rebuild'" + exit 1 +fi + +if [ "$COMPILE_TYPE" == "complete_rebuild" ] || [ ! -e "$BUILD_DIR" ]; then + + meson setup "$BUILD_DIR" \ + "--wipe" \ + --cross-file "$CROSS_FILE" \ + "-Dbuildtype=$BUILDTYPE" \ + -Dcpp_args=-DAUDIO_PREFER_MP3 \ + -Ddefault_library=static \ + -Dfreetype2:zlib=disabled # TODI, since it's statically linked no duplicates are allowed, solve that + +fi + +meson compile -C "$BUILD_DIR" diff --git a/tools/options/meson.build b/tools/options/meson.build index 02a77ef8a..9032fdfd1 100644 --- a/tools/options/meson.build +++ b/tools/options/meson.build @@ -94,7 +94,8 @@ elif cpp.get_id() == 'clang' # TODO: once clang with libstdc++ (gcc c++ stdlib) supports std::expected, remove this special behaviour allow_tl_expected_fallback = true endif - +elif cpp.get_id() == 'emscripten' + allow_tl_expected_fallback = true endif build_application = true From fa3612c9da3d9304cc2e955e61c938ee99ec7e4b Mon Sep 17 00:00:00 2001 From: Totto16 Date: Fri, 15 Nov 2024 00:08:03 +0100 Subject: [PATCH 03/37] build: adjust build for web --- platforms/build-web.sh | 16 +++++--- src/executables/meson.build | 69 +++++++++++++++++++++------------- src/lobby/meson.build | 15 +++++++- tools/dependencies/meson.build | 63 +++++++++++++++++++++++++++++-- 4 files changed, 127 insertions(+), 36 deletions(-) diff --git a/platforms/build-web.sh b/platforms/build-web.sh index 9c3b94e9a..dd182a2b8 100755 --- a/platforms/build-web.sh +++ b/platforms/build-web.sh @@ -12,12 +12,15 @@ if [ ! -d "$EMSCRIPTEN_ROOT" ]; then git clone https://github.com/emscripten-core/emsdk.git "$EMSCRIPTEN_ROOT" fi -"$EMSCRIPTEN_ROOT/emsdk" install latest >/dev/null -"$EMSCRIPTEN_ROOT/emsdk" activate latest >/dev/null +"$EMSCRIPTEN_ROOT/emsdk" install latest +"$EMSCRIPTEN_ROOT/emsdk" activate latest # shellcheck disable=SC1091 EMSDK_QUIET=1 source "$EMSCRIPTEN_ROOT/emsdk_env.sh" >/dev/null +## build theneeded dependencies +embuilder build sdl2 harfbuzz freetype zlib sdl2_ttf vorbis mpg123 ogg libmodplug sdl2_mixer libpng libjpeg "sdl2_image:formats=png,jpg,svg" icu + export EMSCRIPTEN_SYS_ROOT="$EMSCRIPTEN_ROOT/upstream/emscripten/cache/sysroot" export BUILD_DIR="build-emcc" @@ -27,6 +30,7 @@ export CXX="em++" export AR="emar" export RANLIB="emranlib" export STRIP="emstrip" +export NM="emnm" export ARCH="wasm32" export CPU_ARCH="wasm32" @@ -36,7 +40,7 @@ export COMMON_EMSCRIPTEN_OPTIONS="'-fexceptions', '-sEXCEPTION_CATCHING_ALLOWED= # TODO see if ALLOW_MEMORY_GROWTH is needed, but if we load ttf's and music it likely is and we don't have to debug OOm crahses, that aren't handled by some thrid party library, which is painful export LINK_EMSCRIPTEN_OPTIONS="$COMMON_EMSCRIPTEN_OPTIONS, '-sEXPORT_ALL=1', '-sUSE_GLFW=3', '-sUSE_WEBGPU=1', '-sWASM=1', '-sALLOW_MEMORY_GROWTH=1', '-sNO_EXIT_RUNTIME=0', '-sASSERTIONS=1'" -export COMPILE_EMSCRIPTEN_OPTIONS="$COMMON_EMSCRIPTEN_OPTIONS" +export COMPILE_EMSCRIPTEN_OPTIONS="$COMMON_EMSCRIPTEN_OPTIONS , '-sUSE_SDL=2'" export CROSS_FILE="./platforms/crossbuild-web.ini" @@ -62,7 +66,9 @@ cpp = '$CXX' ar = '$AR' ranlib = '$RANLIB' strip = '$STRIP' -pkg-config = ['emmake', 'env', 'PKG_CONFIG_PATH=PREFIX_GOES_HERE/lib/pkgconfig', 'pkg-config'] +nm = '$NM' + +pkg-config = ['emmake', 'pkg-config'] cmake = ['emmake', 'cmake'] sdl2-config = ['emconfigure', 'sdl2-config'] @@ -70,7 +76,7 @@ exe_wrapper = '$EMSDK_NODE' [built-in options] c_std = 'c11' -cpp_std = 'c++20' +cpp_std = 'c++23' c_args = [$COMPILE_EMSCRIPTEN_OPTIONS] c_link_args = [$LINK_EMSCRIPTEN_OPTIONS] cpp_args = [$COMPILE_EMSCRIPTEN_OPTIONS] diff --git a/src/executables/meson.build b/src/executables/meson.build index af04785fa..07a86f1a0 100644 --- a/src/executables/meson.build +++ b/src/executables/meson.build @@ -4,32 +4,49 @@ if build_application subdir('game') - if meson.is_cross_build() and host_machine.system() == 'android' - - library( - 'oopetris', - main_files, - dependencies: [liboopetris_graphics_dep, graphic_application_deps], - override_options: { - 'warning_level': '3', - 'werror': true, - }, - ) - - elif meson.is_cross_build() and host_machine.system() == 'switch' - switch_options = [ - app_name, - main_files, - [liboopetris_graphics_dep, graphic_application_deps], - ] - subdir('platforms/switch') - elif meson.is_cross_build() and host_machine.system() == '3ds' - _3ds_options = [ - app_name, - main_files, - [liboopetris_graphics_dep, graphic_application_deps], - ] - subdir('platforms/3ds') + if meson.is_cross_build() + + if host_machine.system() == 'android' + + library( + 'oopetris', + main_files, + dependencies: [liboopetris_graphics_dep, graphic_application_deps], + override_options: { + 'warning_level': '3', + 'werror': true, + }, + ) + + elif host_machine.system() == 'switch' + switch_options = [ + app_name, + main_files, + [liboopetris_graphics_dep, graphic_application_deps], + ] + subdir('platforms/switch') + elif host_machine.system() == '3ds' + _3ds_options = [ + app_name, + main_files, + [liboopetris_graphics_dep, graphic_application_deps], + ] + subdir('platforms/3ds') + elif host_machine.system() == 'emscripten' + oopetris_exe = executable( + 'oopetris', + main_files, + dependencies: [liboopetris_graphics_dep, graphic_application_deps], + link_args: ['--preload-file', '../assets@/assets/'], + override_options: { + 'warning_level': '3', + 'werror': true, + }, + install: true, + ) + else + error('Unhandled cross built system: ' + host_machine.system()) + endif else if host_machine.system() == 'windows' diff --git a/src/lobby/meson.build b/src/lobby/meson.build index 90779ffd6..057eca851 100644 --- a/src/lobby/meson.build +++ b/src/lobby/meson.build @@ -1,13 +1,24 @@ -if online_multiplayer_user_fallback +if online_multiplayer_system == 'curl' graphics_src_files += files( 'curl_client.cpp', 'curl_client.hpp', ) -else +elif online_multiplayer_system == 'httplib' graphics_src_files += files( 'httplib_client.cpp', 'httplib_client.hpp', ) +elif online_multiplayer_system == 'web' + graphics_src_files += files( + 'web_client.cpp', + 'web_client.hpp', + ) +else + error( + 'Unhandled online_multiplayer_system: \'' + + online_multiplayer_system + + '\'', + ) endif graphics_src_files += files( diff --git a/tools/dependencies/meson.build b/tools/dependencies/meson.build index d621887eb..90c597a9e 100644 --- a/tools/dependencies/meson.build +++ b/tools/dependencies/meson.build @@ -28,7 +28,63 @@ if meson.is_cross_build() # language: ['cpp'], # ) # endif + elif host_machine.system() == 'android' + # noop + elif host_machine.system() == 'emscripten' + only_allow_native_libs = true + + ## map native libraries to dependencies + map_native_dependencies = ['SDL2', 'SDL2_ttf', 'mpg123', 'SDL2_mixer', 'SDL2_image'] + foreach map_native_dependency : map_native_dependencies + native_dep = cpp.find_library(map_native_dependency, required: true) + + if map_native_dependency == 'SDL2' + + major_version = cpp.get_define( + 'SDL_MAJOR_VERSION', + prefix: '#include ', + ).strip('"') + assert( + major_version != '', + 'failed to get major_version from SDL_version.h', + ) + + minor_version = cpp.get_define( + 'SDL_MINOR_VERSION', + prefix: '#include ', + ).strip('"') + assert( + minor_version != '', + 'failed to get minor_version from SDL_version.h', + ) + + patch_version = cpp.get_define( + 'SDL_PATCHLEVEL', + prefix: '#include ', + ).strip('"') + assert( + patch_version != '', + 'failed to get patch_version from SDL_version.h', + ) + native_dep_with_version = declare_dependency( + dependencies: native_dep, + version: major_version + + '.' + + minor_version + + '.' + + patch_version, + ) + meson.override_dependency(map_native_dependency, native_dep_with_version) + else + meson.override_dependency(map_native_dependency, native_dep) + + endif + + endforeach + + else + error('Unhandled cross built system: ' + host_machine.system()) endif endif @@ -254,15 +310,16 @@ if build_application }, ) - online_multiplayer_user_fallback = false + online_multiplayer_system = 'httplib' if cpp_httlib_dep.found() graphics_lib += {'deps': [graphics_lib.get('deps'), cpp_httlib_dep]} - + elif meson.is_cross_build() and host_machine.system() == 'emscripten' + online_multiplayer_system = 'web' else - online_multiplayer_user_fallback = true + online_multiplayer_system = 'curl' curl_cpp_wrapper = dependency( 'cpr', From f0b61bdb6954fa40102fc49942ac9e3e41b64b22 Mon Sep 17 00:00:00 2001 From: Totto16 Date: Fri, 15 Nov 2024 00:55:34 +0100 Subject: [PATCH 04/37] fix: fix android build script --- platforms/build-android.sh | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/platforms/build-android.sh b/platforms/build-android.sh index 4490ad4f9..302991dd9 100755 --- a/platforms/build-android.sh +++ b/platforms/build-android.sh @@ -293,6 +293,10 @@ for INDEX in "${ARCH_KEYS_INDEX[@]}"; do MESON_CPU_FAMILY="aarch64" fi + export COMPILE_FLAGS="'--sysroot=${SYS_ROOT:?}','-fPIE','-fPIC','--target=$ARM_COMPILER_TRIPLE','-DHAVE_USR_INCLUDE_MALLOC_H','-D_MALLOC_H','-D__BITNESS=$BITNESS','-DAUDIO_PREFER_MP3'" + + export LINK_FLAGS="'-fPIE','-L$SYS_ROOT/usr/lib'" + cat <"./platforms/crossbuild-android-$ARM_TARGET_ARCH.ini" [host_machine] system = 'android' @@ -320,10 +324,11 @@ llvm-config = '$LLVM_CONFIG' [built-in options] c_std = 'gnu11' cpp_std = 'c++23' -c_args = ['--sysroot=${SYS_ROOT:?}','-fPIE','-fPIC','--target=$ARM_COMPILER_TRIPLE','-DHAVE_USR_INCLUDE_MALLOC_H','-D_MALLOC_H','-D__BITNESS=$BITNESS'] -cpp_args = ['--sysroot=${SYS_ROOT:?}','-fPIE','-fPIC','--target=$ARM_COMPILER_TRIPLE','-D__BITNESS=$BITNESS'] -c_link_args = ['-fPIE','-L$SYS_ROOT/usr/lib'] -cpp_link_args = ['-fPIE','-L$SYS_ROOT/usr/lib'] +c_args = [$COMPILE_FLAGS] +cpp_args = [$COMPILE_FLAGS] +c_link_args = [$LINK_FLAGS] +cpp_link_args = [$LINK_FLAGS] + prefix = '$SYS_ROOT' libdir = '$LIB_PATH' @@ -369,7 +374,6 @@ EOF --cross-file "./platforms/crossbuild-android-$ARM_TARGET_ARCH.ini" \ "-Dbuildtype=$BUILDTYPE" \ -Dsdl2:use_hidapi=enabled \ - -Dcpp_args=-DAUDIO_PREFER_MP3 \ -Dclang_libcpp=disabled fi From e37d5f29fef0af1561598dff3a1e70ef647e8d60 Mon Sep 17 00:00:00 2001 From: Totto16 Date: Fri, 15 Nov 2024 00:59:50 +0100 Subject: [PATCH 05/37] fix: remove unused and invalid cpp_args from android build script --- platforms/build-android.sh | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/platforms/build-android.sh b/platforms/build-android.sh index 302991dd9..41719d90e 100755 --- a/platforms/build-android.sh +++ b/platforms/build-android.sh @@ -293,7 +293,7 @@ for INDEX in "${ARCH_KEYS_INDEX[@]}"; do MESON_CPU_FAMILY="aarch64" fi - export COMPILE_FLAGS="'--sysroot=${SYS_ROOT:?}','-fPIE','-fPIC','--target=$ARM_COMPILER_TRIPLE','-DHAVE_USR_INCLUDE_MALLOC_H','-D_MALLOC_H','-D__BITNESS=$BITNESS','-DAUDIO_PREFER_MP3'" + export COMPILE_FLAGS="'--sysroot=${SYS_ROOT:?}','-fPIE','-fPIC','--target=$ARM_COMPILER_TRIPLE','-DAUDIO_PREFER_MP3'" export LINK_FLAGS="'-fPIE','-L$SYS_ROOT/usr/lib'" @@ -338,12 +338,14 @@ sys_root = '${SYS_ROOT}' EOF - if [ ! -d "$PWD/subprojects/cpu-features" ]; then - mkdir -p "$PWD/subprojects/cpu-features/src/" - mkdir -p "$PWD/subprojects/cpu-features/include/" - ln -s "$BASE_PATH/sources/android/cpufeatures/cpu-features.c" "$PWD/subprojects/cpu-features/src/cpu-features.c" - ln -s "$BASE_PATH/sources/android/cpufeatures/cpu-features.h" "$PWD/subprojects/cpu-features/include/cpu-features.h" - cat <"$PWD/subprojects/cpu-features/meson.build" + CPU_FUTURES_ROOT="$PWD/subprojects/cpu-features" + + if [ ! -d "$CPU_FUTURES_ROOT" ]; then + mkdir -p "$CPU_FUTURES_ROOT/src/" + mkdir -p "$CPU_FUTURES_ROOT/include/" + ln -s "$BASE_PATH/sources/android/cpufeatures/cpu-features.c" "$CPU_FUTURES_ROOT/src/cpu-features.c" + ln -s "$BASE_PATH/sources/android/cpufeatures/cpu-features.h" "$CPU_FUTURES_ROOT/include/cpu-features.h" + cat <"$CPU_FUTURES_ROOT/meson.build" project('cpu-features','c') meson.override_dependency( From df00493afad685cd1448ec25289b543229863b65 Mon Sep 17 00:00:00 2001 From: Totto16 Date: Fri, 15 Nov 2024 01:14:26 +0100 Subject: [PATCH 06/37] fix: fix some more web build errors patch fmt so that it can be compiled with emscripten --- platforms/build-web.sh | 22 ++++++++++---------- subprojects/fmt.wrap | 2 +- subprojects/packagefiles/fmt_emscripten.diff | 13 ++++++++++++ 3 files changed, 25 insertions(+), 12 deletions(-) create mode 100644 subprojects/packagefiles/fmt_emscripten.diff diff --git a/platforms/build-web.sh b/platforms/build-web.sh index dd182a2b8..338af6a7a 100755 --- a/platforms/build-web.sh +++ b/platforms/build-web.sh @@ -23,7 +23,7 @@ embuilder build sdl2 harfbuzz freetype zlib sdl2_ttf vorbis mpg123 ogg libmodplu export EMSCRIPTEN_SYS_ROOT="$EMSCRIPTEN_ROOT/upstream/emscripten/cache/sysroot" -export BUILD_DIR="build-emcc" +export BUILD_DIR="build-web" export CC="emcc" export CXX="em++" @@ -36,11 +36,13 @@ export ARCH="wasm32" export CPU_ARCH="wasm32" export ENDIANESS="little" -export COMMON_EMSCRIPTEN_OPTIONS="'-fexceptions', '-sEXCEPTION_CATCHING_ALLOWED=[..]'" +export PACKAGE_FLAGS="'-sUSE_SDL=2', '--use-port=sdl2'" + +export COMMON_FLAGS="'-fexceptions', '-sEXCEPTION_CATCHING_ALLOWED=[..]', $PACKAGE_FLAGS" # TODO see if ALLOW_MEMORY_GROWTH is needed, but if we load ttf's and music it likely is and we don't have to debug OOm crahses, that aren't handled by some thrid party library, which is painful -export LINK_EMSCRIPTEN_OPTIONS="$COMMON_EMSCRIPTEN_OPTIONS, '-sEXPORT_ALL=1', '-sUSE_GLFW=3', '-sUSE_WEBGPU=1', '-sWASM=1', '-sALLOW_MEMORY_GROWTH=1', '-sNO_EXIT_RUNTIME=0', '-sASSERTIONS=1'" -export COMPILE_EMSCRIPTEN_OPTIONS="$COMMON_EMSCRIPTEN_OPTIONS , '-sUSE_SDL=2'" +export LINK_FLAGS="$COMMON_FLAGS, '-sEXPORT_ALL=1', '-sUSE_WEBGPU=1', '-sWASM=1', '-sALLOW_MEMORY_GROWTH=1', '-sNO_EXIT_RUNTIME=0', '-sASSERTIONS=1'" +export COMPILE_FLAGS="$COMMON_FLAGS ,'-DAUDIO_PREFER_MP3'" export CROSS_FILE="./platforms/crossbuild-web.ini" @@ -77,10 +79,10 @@ exe_wrapper = '$EMSDK_NODE' [built-in options] c_std = 'c11' cpp_std = 'c++23' -c_args = [$COMPILE_EMSCRIPTEN_OPTIONS] -c_link_args = [$LINK_EMSCRIPTEN_OPTIONS] -cpp_args = [$COMPILE_EMSCRIPTEN_OPTIONS] -cpp_link_args = [$LINK_EMSCRIPTEN_OPTIONS] +c_args = [$COMPILE_FLAGS] +cpp_args = [$COMPILE_FLAGS] +c_link_args = [$LINK_FLAGS] +cpp_link_args = [$LINK_FLAGS] [properties] needs_exe_wrapper = true @@ -122,9 +124,7 @@ if [ "$COMPILE_TYPE" == "complete_rebuild" ] || [ ! -e "$BUILD_DIR" ]; then "--wipe" \ --cross-file "$CROSS_FILE" \ "-Dbuildtype=$BUILDTYPE" \ - -Dcpp_args=-DAUDIO_PREFER_MP3 \ - -Ddefault_library=static \ - -Dfreetype2:zlib=disabled # TODI, since it's statically linked no duplicates are allowed, solve that + -Ddefault_library=static fi diff --git a/subprojects/fmt.wrap b/subprojects/fmt.wrap index e4c65b1f1..b90579833 100644 --- a/subprojects/fmt.wrap +++ b/subprojects/fmt.wrap @@ -8,7 +8,7 @@ patch_url = https://wrapdb.mesonbuild.com/v2/fmt_11.0.2-1/get_patch patch_hash = 90c9e3b8e8f29713d40ca949f6f93ad115d78d7fb921064112bc6179e6427c5e source_fallback_url = https://github.com/mesonbuild/wrapdb/releases/download/fmt_11.0.2-1/fmt-11.0.2.tar.gz wrapdb_version = 11.0.2-1 -diff_files = fmt_dependency_override.diff +diff_files = fmt_dependency_override.diff, fmt_emscripten.diff [provide] fmt = fmt_dep diff --git a/subprojects/packagefiles/fmt_emscripten.diff b/subprojects/packagefiles/fmt_emscripten.diff new file mode 100644 index 000000000..341f2855b --- /dev/null +++ b/subprojects/packagefiles/fmt_emscripten.diff @@ -0,0 +1,13 @@ +diff --git a/include/fmt/base.h b/include/fmt/base.h +index 6276494..869e075 100644 +--- a/include/fmt/base.h ++++ b/include/fmt/base.h +@@ -113,6 +113,8 @@ + // Detect consteval, C++20 constexpr extensions and std::is_constant_evaluated. + #if !defined(__cpp_lib_is_constant_evaluated) + # define FMT_USE_CONSTEVAL 0 ++#elif defined(__EMSCRIPTEN__) ++# define FMT_USE_CONSTEVAL 0 + #elif FMT_CPLUSPLUS < 201709L + # define FMT_USE_CONSTEVAL 0 + #elif FMT_GLIBCXX_RELEASE && FMT_GLIBCXX_RELEASE < 10 From ce88ad8a6bacf946db700a5fb0de8d6c75e805d8 Mon Sep 17 00:00:00 2001 From: Totto16 Date: Fri, 15 Nov 2024 15:59:41 +0100 Subject: [PATCH 07/37] fix: more emscripten errors + add platform specific API this add localstorage access, and logging to console and uses that with the wrapping code correctly --- src/executables/game/main.cpp | 26 +++++--- src/helper/meson.build | 2 + src/helper/platform.cpp | 9 +++ src/helper/web_utils.cpp | 110 +++++++++++++++++++++++++++++++++ src/helper/web_utils.hpp | 41 ++++++++++++ src/lobby/api.cpp | 12 +++- src/lobby/client.cpp | 23 ++++--- tools/dependencies/meson.build | 42 ++++++++++++- 8 files changed, 245 insertions(+), 20 deletions(-) create mode 100644 src/helper/web_utils.cpp create mode 100644 src/helper/web_utils.hpp diff --git a/src/executables/game/main.cpp b/src/executables/game/main.cpp index 75bf9949f..0c59d598b 100644 --- a/src/executables/game/main.cpp +++ b/src/executables/game/main.cpp @@ -24,6 +24,9 @@ #include "helper/console_helpers.hpp" #endif +#if defined(__EMSCRIPTEN__) +#include "helper/web_utils.hpp" +#endif #include #include @@ -33,28 +36,35 @@ namespace { void initialize_spdlog() { - const auto logs_path = utils::get_root_folder() / "logs"; - - auto created_log_dir = utils::create_directory(logs_path, true); - if (created_log_dir.has_value()) { - std::cerr << "warning: couldn't create logs directory '" << logs_path.string() - << "': disabled file logger\n"; - } - std::vector sinks; #if defined(__ANDROID__) sinks.push_back(std::make_shared()); #elif defined(__CONSOLE__) sinks.push_back(std::make_shared()); +#elif defined(__EMSCRIPTEN__) + sinks.push_back(web::get_console_sink()); #else sinks.push_back(std::make_shared()); #endif + +#if !(defined(__EMSCRIPTEN__)) + + const auto logs_path = utils::get_root_folder() / "logs"; + + auto created_log_dir = utils::create_directory(logs_path, true); + if (created_log_dir.has_value()) { + std::cerr << "warning: couldn't create logs directory '" << logs_path.string() + << "': disabled file logger\n"; + } + + if (not created_log_dir.has_value()) { sinks.push_back(std::make_shared( fmt::format("{}/oopetris.log", logs_path.string()), 1024 * 1024 * 10, 5, true )); } +#endif auto combined_logger = std::make_shared("combined_logger", begin(sinks), end(sinks)); spdlog::set_default_logger(combined_logger); diff --git a/src/helper/meson.build b/src/helper/meson.build index 58d923797..ca607430c 100644 --- a/src/helper/meson.build +++ b/src/helper/meson.build @@ -12,6 +12,8 @@ graphics_src_files += files( 'music_utils.hpp', 'platform.cpp', 'platform.hpp', + 'web_utils.cpp', + 'web_utils.hpp', 'windows.hpp', ) diff --git a/src/helper/platform.cpp b/src/helper/platform.cpp index dd464240a..d1f4b819d 100644 --- a/src/helper/platform.cpp +++ b/src/helper/platform.cpp @@ -15,6 +15,8 @@ namespace { +#if !(defined(__ANDROID__) || defined(__CONSOLE__) || defined(__SERENITY__) || defined(__EMSCRIPTEN__)) + inline std::string get_error_from_errno() { #if defined(_MSC_VER) @@ -34,6 +36,7 @@ namespace { #endif } +#endif } // namespace @@ -55,6 +58,8 @@ namespace { return "MacOS"; #elif defined(__SERENITY__) return "Serenity OS"; +#elif defined(__EMSCRIPTEN__) + return "Emscripten"; #else #error "Unsupported platform" #endif @@ -78,6 +83,10 @@ namespace { #elif defined(__SERENITY__) UNUSED(url); return false; +#elif defined(__EMSCRIPTEN__) + //TODO: call window.open(url, "_blank") + UNUSED(url); + return false; #else //TODO(Totto): this is dangerous, if we supply user input, so use SDL_OpenURL preferably diff --git a/src/helper/web_utils.cpp b/src/helper/web_utils.cpp new file mode 100644 index 000000000..b61d14887 --- /dev/null +++ b/src/helper/web_utils.cpp @@ -0,0 +1,110 @@ + + +#if defined(__EMSCRIPTEN__) + +#include "web_utils.hpp" +#include +#include +#include + +std::optional web::LocalStorage::get_item(const std::string& key) { + + thread_local const emscripten::val localStorage = emscripten::val::global("localStorage"); + + emscripten::val value = localStorage.call("getItem", emscripten::val{ key }); + + if (value.isNull()) { + return std::nullopt; + } + + return value.as(); +} + +void web::LocalStorage::set_item(const std::string& key, const std::string& value) { + + thread_local const emscripten::val localStorage = emscripten::val::global("localStorage"); + + localStorage.call("setItem", emscripten::val{ key }, emscripten::val{ value }); +} + +void web::LocalStorage::remove_item(const std::string& key) { + + thread_local const emscripten::val localStorage = emscripten::val::global("localStorage"); + + localStorage.call("removeItem", emscripten::val{ key }); +} + +void web::LocalStorage::clear() { + + thread_local const emscripten::val localStorage = emscripten::val::global("localStorage"); + + localStorage.call("clear"); +} + + +void web::console::error(const std::string& message) { + thread_local const emscripten::val console = emscripten::val::global("console"); + console.call("error", emscripten::val{ message }); +} + +void web::console::warn(const std::string& message) { + thread_local const emscripten::val console = emscripten::val::global("console"); + console.call("warn", emscripten::val{ message }); +} + +void web::console::log(const std::string& message) { + thread_local const emscripten::val console = emscripten::val::global("console"); + console.call("log", emscripten::val{ message }); +} + +void web::console::info(const std::string& message) { + thread_local const emscripten::val console = emscripten::val::global("console"); + console.call("info", emscripten::val{ message }); +} + +void web::console::debug(const std::string& message) { + thread_local const emscripten::val console = emscripten::val::global("console"); + console.call("debug", emscripten::val{ message }); +} + +void web::console::trace(const std::string& message) { + thread_local const emscripten::val console = emscripten::val::global("console"); + console.call("trace", emscripten::val{ message }); +} + +void web::console::clear() { + thread_local const emscripten::val console = emscripten::val::global("console"); + console.call("clear"); +} + +std::shared_ptr web::get_console_sink() { + return std::make_shared([](const spdlog::details::log_msg& msg) { + const auto message = std::string{ msg.payload.begin(), msg.payload.end() }; + + switch (msg.level) { + case spdlog::level::off: + return; + case spdlog::level::trace: + web::console::trace(message); + break; + case spdlog::level::debug: + web::console::debug(message); + break; + case spdlog::level::info: + web::console::info(message); + break; + case spdlog::level::warn: + web::console::warn(message); + break; + case spdlog::level::err: + case spdlog::level::critical: + web::console::error(message); + break; + default: + return; + } + }); +} + + +#endif diff --git a/src/helper/web_utils.hpp b/src/helper/web_utils.hpp new file mode 100644 index 000000000..2917a69cb --- /dev/null +++ b/src/helper/web_utils.hpp @@ -0,0 +1,41 @@ + + +#pragma once + + +#if !defined(__EMSCRIPTEN__) +#error this header is for emscripten only +#endif + + +#include +#include +#include +#include + +namespace web { + + struct LocalStorage { + + [[nodiscard]] static std::optional get_item(const std::string& key); + static void set_item(const std::string& key, const std::string& value); + static void remove_item(const std::string& key); + static void clear(); + }; + + [[nodiscard]] std::shared_ptr get_console_sink(); + + + namespace console { + void clear(); + //TODO, these support more arguments, write templates for that + void error(const std::string& message); + void warn(const std::string& message); + void log(const std::string& message); + void info(const std::string& message); + void debug(const std::string& message); + void trace(const std::string& message); + }; // namespace console + + +}; // namespace web diff --git a/src/lobby/api.cpp b/src/lobby/api.cpp index 77d10d895..f0a99acb2 100644 --- a/src/lobby/api.cpp +++ b/src/lobby/api.cpp @@ -5,10 +5,18 @@ #include #include -#if defined(_OOPETRIS_ONLINE_USE_CURL) +#if !defined(_OOPETRIS_ONLINE_SYSTEM) +#error "_OOPETRIS_ONLINE_SYSTEM has to be defined" +#endif + +#if _OOPETRIS_ONLINE_SYSTEM == 0 +#include "./httplib_client.hpp" +#elif _OOPETRIS_ONLINE_SYSTEM == 1 +#include "./web_client.hpp" +#elif _OOPETRIS_ONLINE_SYSTEM == 2 #include "./curl_client.hpp" #else -#include "./httplib_client.hpp" +#error "_OOPETRIS_ONLINE_SYSTEM has an invalid value" #endif namespace { diff --git a/src/lobby/client.cpp b/src/lobby/client.cpp index c68fd11c8..69455c74f 100644 --- a/src/lobby/client.cpp +++ b/src/lobby/client.cpp @@ -3,23 +3,32 @@ #include "./client.hpp" -#if defined(_OOPETRIS_ONLINE_USE_CURL) -#include "./curl_client.hpp" +#if _OOPETRIS_ONLINE_SYSTEM == 0 +#include "./httplib_client.hpp" + +std::string oopetris::http::status_message(int status) { + return httplib::status_message(status); +} + +#elif _OOPETRIS_ONLINE_SYSTEM == 1 + +#include "./web_client.hpp" std::string oopetris::http::status_message([[maybe_unused]] int status) { return "Not Available"; } +#elif _OOPETRIS_ONLINE_SYSTEM == 2 -#else - -#include "./httplib_client.hpp" +#include "./curl_client.hpp" -std::string oopetris::http::status_message(int status) { - return httplib::status_message(status); +std::string oopetris::http::status_message([[maybe_unused]] int status) { + return "Not Available"; } +#else +#error "_OOPETRIS_ONLINE_SYSTEM has an invalid value" #endif oopetris::http::Result::~Result() = default; diff --git a/tools/dependencies/meson.build b/tools/dependencies/meson.build index 90c597a9e..84be0817d 100644 --- a/tools/dependencies/meson.build +++ b/tools/dependencies/meson.build @@ -83,6 +83,28 @@ if meson.is_cross_build() endforeach + native_deps = [] + + native_dep_names = [ + 'embind', + 'freetype', + 'harfbuzz', + 'z', + 'vorbis', + 'ogg', + 'libmodplug', + 'libpng', + 'libjpeg', + ] + + foreach native_dep_name : native_dep_names + native_deps += cpp.find_library(native_dep_name, required: true) + endforeach + + graphics_lib += { + 'deps': [graphics_lib.get('deps'), native_deps], + } + else error('Unhandled cross built system: ' + host_machine.system()) endif @@ -314,9 +336,23 @@ if build_application if cpp_httlib_dep.found() - graphics_lib += {'deps': [graphics_lib.get('deps'), cpp_httlib_dep]} - elif meson.is_cross_build() and host_machine.system() == 'emscripten' + graphics_lib += { + 'deps': [graphics_lib.get('deps'), cpp_httlib_dep], + 'compile_args': [ + graphics_lib.get('compile_args'), + '-D_OOPETRIS_ONLINE_SYSTEM=0', + ], + } + + elif meson.is_cross_build() and host_machine.system() == 'emscripten' online_multiplayer_system = 'web' + + graphics_lib += { + 'compile_args': [ + graphics_lib.get('compile_args'), + '-D_OOPETRIS_ONLINE_SYSTEM=1', + ], + } else online_multiplayer_system = 'curl' @@ -331,7 +367,7 @@ if build_application 'deps': [graphics_lib.get('deps'), curl_cpp_wrapper], 'compile_args': [ graphics_lib.get('compile_args'), - '-D_OOPETRIS_ONLINE_USE_CURL', + '-D_OOPETRIS_ONLINE_SYSTEM=2', ], } From 83393b8aa438399aefe3e33bff66b1bb1d7b9095 Mon Sep 17 00:00:00 2001 From: Totto16 Date: Fri, 15 Nov 2024 16:04:48 +0100 Subject: [PATCH 08/37] fix: use sdl2 with threads, so that emscripten links successfully --- platforms/build-web.sh | 6 +++--- tools/dependencies/meson.build | 12 ++++++------ 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/platforms/build-web.sh b/platforms/build-web.sh index 338af6a7a..72f333f6f 100755 --- a/platforms/build-web.sh +++ b/platforms/build-web.sh @@ -36,12 +36,12 @@ export ARCH="wasm32" export CPU_ARCH="wasm32" export ENDIANESS="little" -export PACKAGE_FLAGS="'-sUSE_SDL=2', '--use-port=sdl2'" +export PACKAGE_FLAGS="'--use-port=sdl2', '--use-port=harfbuzz', '--use-port=freetype', '--use-port=zlib', '--use-port=sdl2_ttf', '--use-port=vorbis', '--use-port=mpg123', '--use-port=ogg', '--use-port=libmodplug', '--use-port=sdl2_mixer', '--use-port=libpng', '--use-port=libjpeg', '--use-port=sdl2_image', '--use-port=icu'" -export COMMON_FLAGS="'-fexceptions', '-sEXCEPTION_CATCHING_ALLOWED=[..]', $PACKAGE_FLAGS" +export COMMON_FLAGS="'-fexceptions', '-sEXCEPTION_CATCHING_ALLOWED=[..]', '-sFETCH', $PACKAGE_FLAGS" # TODO see if ALLOW_MEMORY_GROWTH is needed, but if we load ttf's and music it likely is and we don't have to debug OOm crahses, that aren't handled by some thrid party library, which is painful -export LINK_FLAGS="$COMMON_FLAGS, '-sEXPORT_ALL=1', '-sUSE_WEBGPU=1', '-sWASM=1', '-sALLOW_MEMORY_GROWTH=1', '-sNO_EXIT_RUNTIME=0', '-sASSERTIONS=1'" +export LINK_FLAGS="$COMMON_FLAGS, '-sEXPORT_ALL=1', '-sUSE_WEBGPU=1', '-sWASM=1', '-sALLOW_MEMORY_GROWTH=1', '-sNO_EXIT_RUNTIME=0', '-sASSERTIONS=1','-sERROR_ON_UNDEFINED_SYMBOLS=1'" export COMPILE_FLAGS="$COMMON_FLAGS ,'-DAUDIO_PREFER_MP3'" export CROSS_FILE="./platforms/crossbuild-web.ini" diff --git a/tools/dependencies/meson.build b/tools/dependencies/meson.build index 84be0817d..c665f003f 100644 --- a/tools/dependencies/meson.build +++ b/tools/dependencies/meson.build @@ -34,11 +34,11 @@ if meson.is_cross_build() only_allow_native_libs = true ## map native libraries to dependencies - map_native_dependencies = ['SDL2', 'SDL2_ttf', 'mpg123', 'SDL2_mixer', 'SDL2_image'] + map_native_dependencies = ['SDL2-mt', 'SDL2_ttf', 'mpg123', 'SDL2_mixer', 'SDL2_image'] foreach map_native_dependency : map_native_dependencies native_dep = cpp.find_library(map_native_dependency, required: true) - if map_native_dependency == 'SDL2' + if map_native_dependency == 'SDL2-mt' major_version = cpp.get_define( 'SDL_MAJOR_VERSION', @@ -75,7 +75,7 @@ if meson.is_cross_build() + '.' + patch_version, ) - meson.override_dependency(map_native_dependency, native_dep_with_version) + meson.override_dependency('SDL2', native_dep_with_version) else meson.override_dependency(map_native_dependency, native_dep) @@ -92,9 +92,9 @@ if meson.is_cross_build() 'z', 'vorbis', 'ogg', - 'libmodplug', - 'libpng', - 'libjpeg', + 'modplug', + 'png', + 'jpeg', ] foreach native_dep_name : native_dep_names From 68d8c80ddd7985efd8f6674a0796a29639ce037f Mon Sep 17 00:00:00 2001 From: Totto16 Date: Fri, 15 Nov 2024 17:57:43 +0100 Subject: [PATCH 09/37] fix: add web support for emscripten, trough the fetch API --- platforms/build-web.sh | 4 +- src/lobby/credentials/secret.cpp | 71 +++++++- src/lobby/web_client.cpp | 269 +++++++++++++++++++++++++++++++ src/lobby/web_client.hpp | 77 +++++++++ tools/dependencies/meson.build | 15 ++ 5 files changed, 430 insertions(+), 6 deletions(-) create mode 100644 src/lobby/web_client.cpp create mode 100644 src/lobby/web_client.hpp diff --git a/platforms/build-web.sh b/platforms/build-web.sh index 72f333f6f..9c3e58ab1 100755 --- a/platforms/build-web.sh +++ b/platforms/build-web.sh @@ -38,10 +38,10 @@ export ENDIANESS="little" export PACKAGE_FLAGS="'--use-port=sdl2', '--use-port=harfbuzz', '--use-port=freetype', '--use-port=zlib', '--use-port=sdl2_ttf', '--use-port=vorbis', '--use-port=mpg123', '--use-port=ogg', '--use-port=libmodplug', '--use-port=sdl2_mixer', '--use-port=libpng', '--use-port=libjpeg', '--use-port=sdl2_image', '--use-port=icu'" -export COMMON_FLAGS="'-fexceptions', '-sEXCEPTION_CATCHING_ALLOWED=[..]', '-sFETCH', $PACKAGE_FLAGS" +export COMMON_FLAGS="'-fexceptions', '-sEXCEPTION_CATCHING_ALLOWED=[..]', $PACKAGE_FLAGS" # TODO see if ALLOW_MEMORY_GROWTH is needed, but if we load ttf's and music it likely is and we don't have to debug OOm crahses, that aren't handled by some thrid party library, which is painful -export LINK_FLAGS="$COMMON_FLAGS, '-sEXPORT_ALL=1', '-sUSE_WEBGPU=1', '-sWASM=1', '-sALLOW_MEMORY_GROWTH=1', '-sNO_EXIT_RUNTIME=0', '-sASSERTIONS=1','-sERROR_ON_UNDEFINED_SYMBOLS=1'" +export LINK_FLAGS="$COMMON_FLAGS, '-sEXPORT_ALL=1', '-sUSE_WEBGPU=1', '-sWASM=1', '-sALLOW_MEMORY_GROWTH=1', '-sNO_EXIT_RUNTIME=0', '-sASSERTIONS=1','-sERROR_ON_UNDEFINED_SYMBOLS=1', '-sFETCH=1'" export COMPILE_FLAGS="$COMMON_FLAGS ,'-DAUDIO_PREFER_MP3'" export CROSS_FILE="./platforms/crossbuild-web.ini" diff --git a/src/lobby/credentials/secret.cpp b/src/lobby/credentials/secret.cpp index 301e19cb2..184d00baa 100644 --- a/src/lobby/credentials/secret.cpp +++ b/src/lobby/credentials/secret.cpp @@ -395,7 +395,7 @@ namespace { // This is a dummy fallback, but good enough for this platforms secret::SecretStorage::SecretStorage(KeyringType type) : m_type{ type } { - m_file_path = utils::get_root_folder() / secrets_constants::store_file_name; + m_file_path = web::get_root_folder() / secrets_constants::store_file_name; } secret::SecretStorage::~SecretStorage() = default; @@ -423,9 +423,7 @@ secret::SecretStorage::SecretStorage(SecretStorage&& other) noexcept json_value.at(key).get_to(result); - auto result_buffer = Buffer{ result }; - - return result_buffer; + return Buffer{ result }; } [[nodiscard]] std::optional @@ -466,6 +464,71 @@ secret::SecretStorage::store(const std::string& key, const Buffer& value, bool u } +#elif defined(__EMSCRIPTEN__) + +#include "helper/web_utils.hpp" + + +namespace { + + namespace constants { + + constexpr const char* key_name_prefix = "OOPetris_key__"; + } // namespace constants + + std::string get_key_name(const std::string& key) { + return constants::key_name_prefix + key; + } +} // namespace + + +// This is a dummy fallback, but good enough for this platforms +secret::SecretStorage::SecretStorage(KeyringType type) : m_type{ type } { } + +secret::SecretStorage::~SecretStorage() = default; + +secret::SecretStorage::SecretStorage(SecretStorage&& other) noexcept : m_type{ other.m_type } { } + + +[[nodiscard]] helper::expected secret::SecretStorage::load(const std::string& key) const { + + const auto key_name = get_key_name(key); + auto maybe_value = web::LocalStorage::get_item(key_name); + if (not maybe_value.has_value()) { + return helper::unexpected{ "Key not found" }; + } + + return Buffer{ maybe_value.value() }; +} + +[[nodiscard]] std::optional +secret::SecretStorage::store(const std::string& key, const Buffer& value, bool update) const { + + const auto key_name = get_key_name(key); + + if (not update) { + auto maybe_value = web::LocalStorage::get_item(key_name); + if (maybe_value.has_value()) { + return "Error while storing a key, it already exists and we can't update it"; + } + } + + web::LocalStorage::set_item(key_name, value.as_string()); + + return std::nullopt; +} + + +[[nodiscard]] std::optional secret::SecretStorage::remove(const std::string& key) const { + + const auto key_name = get_key_name(key); + + web::LocalStorage::remove_item(key_name); + + return std::nullopt; +} + + #else #error "Unsupported platform" #endif diff --git a/src/lobby/web_client.cpp b/src/lobby/web_client.cpp new file mode 100644 index 000000000..fb81fe18b --- /dev/null +++ b/src/lobby/web_client.cpp @@ -0,0 +1,269 @@ + +#include "./web_client.hpp" + +#include + +// Note: this uses emscripten fetch +//see: https://emscripten.org/docs/api_reference/fetch.html + +//Note: Synchronous Emscripten Fetch operations are subject to a number of restrictions, depending on which Emscripten build mode (linker flags) is used: +// we use: -pthread: Synchronous Fetch operations are available on pthreads, but not on the main thread. + +#define TRANSFORM_RESULT(result) std::make_unique((result)) //NOLINT(cppcoreguidelines-macro-usage + +namespace { + using FetchHeader = oopetris::http::implementation::details::FetchHeader; + + FetchHeader get_headers(const std::unique_ptr& request) { + + auto header_length = emscripten_fetch_get_response_headers_length(request.get()); + + auto* headersRawDst = new char[header_length + 1]; + emscripten_fetch_get_response_headers(request.get(), headersRawDst, header_length + 1); + + char** unpackedHeaders = emscripten_fetch_unpack_response_headers(headersRawDst); + + FetchHeader result{}; + + u32 i = 0; + while (true) { + auto* headerKey = unpackedHeaders[i]; + + if (headerKey == nullptr) { + break; + } + + auto* headerValue = unpackedHeaders[i + 1]; + if (headerValue == nullptr) { + //this is an error, since this has to be a valid char* + //TODO: report that properly + break; + } + + result.at(headerKey) = std::string{ headerValue }; + + i += 2; + } + + delete[] headersRawDst; + + emscripten_fetch_free_unpacked_response_headers(unpackedHeaders); + + return result; + } + + // Specifies the readyState of the XHR request: + // 0: UNSENT: request not sent yet + // 1: OPENED: emscripten_fetch has been called. + // 2: HEADERS_RECEIVED: emscripten_fetch has been called, and headers and + // status are available. + // 3: LOADING: download in progress. + // 4: DONE: download finished. + // See https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/readyState + enum class FetchReadyState { + UNSENT = 0, + OPENED = 1, + HEADERS_RECEIVED = 2, + LOADING = 3, + DONE = 4, + }; + + const constexpr u32 max_method_size = 32; + +} // namespace + + +oopetris::http::implementation::ActualResult::ActualResult(std::unique_ptr&& request) + : m_request{ std::move(request) }, + m_response_headers{ get_headers(m_request) } { } + +oopetris::http::implementation::ActualResult::~ActualResult() { + if (m_request) { + emscripten_fetch_close(m_request.get()); + } +}; + + +oopetris::http::implementation::ActualResult::ActualResult(ActualResult&& other) noexcept + : m_request{ std::move(other.m_request) }, + m_response_headers{ std::move(other.m_response_headers) } { } + +[[nodiscard]] std::optional oopetris::http::implementation::ActualResult::get_header(const std::string& key +) const { + if (m_response_headers.contains(key)) { + return std::nullopt; + } + + return m_response_headers.at(key); +} + +[[nodiscard]] std::string oopetris::http::implementation::ActualResult::body() const { + + //TODO: test if this is correct + auto size = m_request->numBytes; + + std::string result{ m_request->data, m_request->data + size }; + + return result; +} + +[[nodiscard]] int oopetris::http::implementation::ActualResult::status() const { + return m_request->status; +} + +[[nodiscard]] std::optional oopetris::http::implementation::ActualResult::get_error() const { + + auto readyState = static_cast(m_request->readyState); + + if (readyState != FetchReadyState::DONE) { + return fmt::format("Invalid readyState: {}", magic_enum::enum_name(readyState)); + } + + return std::nullopt; +} + +namespace { + using FetchData = std::pair; + + std::string normalize_url(const std::string& value) { + if (value.ends_with("/")) { + return value.substr(0, value.size() - 1); + } + + return value; + } + + std::string concat_url(const std::string& normalized_base, const std::string& value) { + if (value.starts_with("/")) { + return normalized_base + value; + } + + return normalized_base + "/" + value; + } + + std::unique_ptr make_request_impl( + const std::string& method, + const std::string& url, + const FetchHeader& header, + const std::optional& data + ) { + emscripten_fetch_attr_t attr{}; + emscripten_fetch_attr_init(&attr); + + assert(method.size() <= (max_method_size - 1)); + std::memcpy(attr.requestMethod, method.c_str(), method.size() + 1); + + //TODO(Totto): once the http Implementation "Interface" support async thing, use that: + // see: https://emscripten.org/docs/api_reference/fetch.html#synchronous-fetches + + attr.attributes = EMSCRIPTEN_FETCH_LOAD_TO_MEMORY | EMSCRIPTEN_FETCH_SYNCHRONOUS; + + + std::vector raw_headers{}; + for (const auto& [key, value] : header) { + raw_headers.push_back(key.c_str()); + raw_headers.push_back(value.c_str()); + } + + raw_headers.push_back(nullptr); + + attr.requestHeaders = raw_headers.data(); + + if (data.has_value()) { + const auto& [mime_type, raw_data] = data.value(); + + attr.overriddenMimeType = mime_type.c_str(); + attr.requestData = raw_data.c_str(); + attr.requestDataSize = raw_data.size(); + } + + emscripten_fetch_t* result = emscripten_fetch(&attr, url.c_str()); + + return std::unique_ptr(result); + } + + std::unique_ptr + make_request(const std::string& method, const std::string& url, const FetchHeader& header) { + return make_request_impl(method, url, header, std::nullopt); + } + + std::unique_ptr make_request_with_data( + const std::string& method, + const std::string& url, + const FetchHeader& header, + const FetchData& data + ) { + return make_request_impl(method, url, header, data); + } +} // namespace + + +oopetris::http::implementation::ActualClient::ActualClient(ActualClient&& other) noexcept + : m_base_url{ std::move(other.m_base_url) }, + m_headers{ std::move(other.m_headers) } { } + +oopetris::http::implementation::ActualClient::~ActualClient() = default; + +oopetris::http::implementation::ActualClient::ActualClient(const std::string& api_url) + : m_base_url{ normalize_url(api_url) }, + m_headers{} { + + //NOTE: no Accept header or compression is set here, as emscriptens fetch does provide reasonable defaults (depending on what the browser supports) +} + +[[nodiscard]] std::unique_ptr oopetris::http::implementation::ActualClient::Get( + const std::string& url +) { + + const auto final_url = concat_url(m_base_url, url); + + return TRANSFORM_RESULT(make_request("GET", final_url, m_headers)); +} + +[[nodiscard]] std::unique_ptr oopetris::http::implementation::ActualClient::Delete( + const std::string& url +) { + const auto final_url = concat_url(m_base_url, url); + + return TRANSFORM_RESULT(make_request("DELETE", final_url, m_headers)); +} + +[[nodiscard]] std::unique_ptr oopetris::http::implementation::ActualClient::Post( + const std::string& url, + const std::optional>& payload +) { + const auto final_url = concat_url(m_base_url, url); + + if (not payload.has_value()) { + return TRANSFORM_RESULT(make_request("POST", final_url, m_headers)); + } + + auto [content, content_type] = payload.value(); + + return TRANSFORM_RESULT(make_request_with_data("POST", final_url, m_headers, payload.value())); +} + +[[nodiscard]] std::unique_ptr oopetris::http::implementation::ActualClient::Put( + const std::string& url, + const std::optional>& payload +) { + const auto final_url = concat_url(m_base_url, url); + + if (not payload.has_value()) { + return TRANSFORM_RESULT(make_request("PUT", final_url, m_headers)); + } + + auto [content, content_type] = payload.value(); + + return TRANSFORM_RESULT(make_request_with_data("PUT", final_url, m_headers, payload.value())); +} + +void oopetris::http::implementation::ActualClient::SetBearerAuth(const std::string& token) { + + m_headers.at("Authorization") = fmt::format("Bearer {}", token); +} + +void oopetris::http::implementation::ActualClient::ResetBearerAuth() { + + m_headers.erase("Authorization"); +} diff --git a/src/lobby/web_client.hpp b/src/lobby/web_client.hpp new file mode 100644 index 000000000..014d59e39 --- /dev/null +++ b/src/lobby/web_client.hpp @@ -0,0 +1,77 @@ + +#pragma once + +#include + +#include + +#include "./client.hpp" + + +namespace oopetris::http::implementation { + + namespace details { + using FetchHeader = std::unordered_map; + } + + struct ActualResult : ::oopetris::http::Result { + private: + std::unique_ptr m_request; + details::FetchHeader m_response_headers; + + public: + OOPETRIS_GRAPHICS_EXPORTED explicit ActualResult(std::unique_ptr&& request); + + OOPETRIS_GRAPHICS_EXPORTED ~ActualResult() override; + + OOPETRIS_GRAPHICS_EXPORTED ActualResult(ActualResult&& other) noexcept; + OOPETRIS_GRAPHICS_EXPORTED ActualResult& operator=(ActualResult&& other) noexcept = delete; + + OOPETRIS_GRAPHICS_EXPORTED ActualResult(const ActualResult& other) = delete; + OOPETRIS_GRAPHICS_EXPORTED ActualResult& operator=(const ActualResult& other) = delete; + + OOPETRIS_GRAPHICS_EXPORTED [[nodiscard]] std::optional get_header(const std::string& key + ) const override; + + OOPETRIS_GRAPHICS_EXPORTED [[nodiscard]] std::string body() const override; + + OOPETRIS_GRAPHICS_EXPORTED [[nodiscard]] int status() const override; + + OOPETRIS_GRAPHICS_EXPORTED [[nodiscard]] std::optional get_error() const override; + }; + + + struct ActualClient : ::oopetris::http::Client { + + private: + std::string m_base_url; + details::FetchHeader m_headers; + + public: + OOPETRIS_GRAPHICS_EXPORTED ActualClient(ActualClient&& other) noexcept; + OOPETRIS_GRAPHICS_EXPORTED ActualClient& operator=(ActualClient&& other) noexcept = delete; + + OOPETRIS_GRAPHICS_EXPORTED ActualClient(const ActualClient& other) = delete; + OOPETRIS_GRAPHICS_EXPORTED ActualClient& operator=(const ActualClient& other) = delete; + + OOPETRIS_GRAPHICS_EXPORTED ~ActualClient() override; + + OOPETRIS_GRAPHICS_EXPORTED explicit ActualClient(const std::string& api_url); + + OOPETRIS_GRAPHICS_EXPORTED [[nodiscard]] std::unique_ptr Get(const std::string& url) override; + + OOPETRIS_GRAPHICS_EXPORTED [[nodiscard]] std::unique_ptr Delete(const std::string& url) override; + + OOPETRIS_GRAPHICS_EXPORTED [[nodiscard]] std::unique_ptr + Post(const std::string& url, const std::optional>& payload) override; + + OOPETRIS_GRAPHICS_EXPORTED [[nodiscard]] std::unique_ptr + Put(const std::string& url, const std::optional>& payload) override; + + OOPETRIS_GRAPHICS_EXPORTED void SetBearerAuth(const std::string& token) override; + + OOPETRIS_GRAPHICS_EXPORTED void ResetBearerAuth() override; + }; + + +} // namespace oopetris::http::implementation diff --git a/tools/dependencies/meson.build b/tools/dependencies/meson.build index c665f003f..32dd85e8d 100644 --- a/tools/dependencies/meson.build +++ b/tools/dependencies/meson.build @@ -31,6 +31,20 @@ if meson.is_cross_build() elif host_machine.system() == 'android' # noop elif host_machine.system() == 'emscripten' + + # check if the command line flags are supported and a simple example compiles + can_compile = cpp.compiles( + ''' + int main() { + return 0; + } + ''', + ) + + if not can_compile + error('Not all Emscripten flags are supported: see logs') + endif + only_allow_native_libs = true ## map native libraries to dependencies @@ -95,6 +109,7 @@ if meson.is_cross_build() 'modplug', 'png', 'jpeg', + 'fetch-mt', ] foreach native_dep_name : native_dep_names From 1eb539b3befec373d58c7bf2a18bcdd56b0c442c Mon Sep 17 00:00:00 2001 From: Totto16 Date: Fri, 15 Nov 2024 18:01:12 +0100 Subject: [PATCH 10/37] fix: emscripten: use mulithreaded libraries and embind-rtti, so that c++ works correctly in all cases --- tools/dependencies/meson.build | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tools/dependencies/meson.build b/tools/dependencies/meson.build index 32dd85e8d..3f953c2a7 100644 --- a/tools/dependencies/meson.build +++ b/tools/dependencies/meson.build @@ -101,8 +101,9 @@ if meson.is_cross_build() native_dep_names = [ 'embind', + 'embind-rtti', 'freetype', - 'harfbuzz', + 'harfbuzz-mt', 'z', 'vorbis', 'ogg', From 0f8c91f3c28ef202d726ea94bea9a45e3bd87d54 Mon Sep 17 00:00:00 2001 From: Totto16 Date: Fri, 15 Nov 2024 18:37:24 +0100 Subject: [PATCH 11/37] feat: add simple server for emscripten html, so that it works with cors and wasm --- platforms/emscripten/server.py | 53 ++++++++++++++++++++++++++++++++++ src/executables/meson.build | 51 +++++++++++++++++++++++++++----- 2 files changed, 96 insertions(+), 8 deletions(-) create mode 100644 platforms/emscripten/server.py diff --git a/platforms/emscripten/server.py b/platforms/emscripten/server.py new file mode 100644 index 000000000..c6dc7351c --- /dev/null +++ b/platforms/emscripten/server.py @@ -0,0 +1,53 @@ +#!/usr/bin/env python3 +from http.server import SimpleHTTPRequestHandler, ThreadingHTTPServer, test +import os + + +class CORSRequestHandler(SimpleHTTPRequestHandler): + def end_headers(self): + self.send_header("Access-Control-Allow-Origin", "*") + self.send_header("Cross-Origin-Embedder-Policy", "require-corp") + self.send_header("Cross-Origin-Opener-Policy", "same-origin") + + SimpleHTTPRequestHandler.end_headers(self) + + +# from: https://github.com/python/cpython/blob/3.13/Lib/http/server.py +if __name__ == "__main__": + import argparse + + parser = argparse.ArgumentParser() + parser.add_argument( + "-b", + "--bind", + metavar="ADDRESS", + help="bind to this address " "(default: all interfaces)", + ) + parser.add_argument( + "-d", + "--directory", + default=os.getcwd(), + help="serve this directory " "(default: current directory)", + ) + parser.add_argument( + "port", + default=8000, + type=int, + nargs="?", + help="bind to this port " "(default: %(default)s)", + ) + args = parser.parse_args() + + # ensure dual-stack is not disabled; ref #38907 + class DualStackServer(ThreadingHTTPServer): + def finish_request(self, request, client_address): + self.RequestHandlerClass( + request, client_address, self, directory=args.directory + ) + + test( + HandlerClass=CORSRequestHandler, + ServerClass=DualStackServer, + port=args.port, + bind=args.bind, + ) diff --git a/src/executables/meson.build b/src/executables/meson.build index 07a86f1a0..874b2277e 100644 --- a/src/executables/meson.build +++ b/src/executables/meson.build @@ -33,17 +33,52 @@ if build_application ] subdir('platforms/3ds') elif host_machine.system() == 'emscripten' - oopetris_exe = executable( - 'oopetris', + emscripten_name = 'oopetris' + emscripten_deps = [liboopetris_graphics_dep, graphic_application_deps] + emscripten_link_args = ['--preload-file', '../assets@/assets/'] + emscripten_options = { + 'warning_level': '3', + 'werror': true, + } + + oopetris_js = executable( + emscripten_name, main_files, - dependencies: [liboopetris_graphics_dep, graphic_application_deps], - link_args: ['--preload-file', '../assets@/assets/'], - override_options: { - 'warning_level': '3', - 'werror': true, - }, + dependencies: emscripten_deps, + link_args: emscripten_link_args, + override_options: emscripten_options, + install: true, + name_suffix: 'js', + ) + + oopetris_html = executable( + emscripten_name, + main_files, + dependencies: emscripten_deps, + link_args: emscripten_link_args, + override_options: emscripten_options, install: true, + name_suffix: 'html', ) + + python3 = find_program('python3', required: false) + + if python3.found() + + server_py = files( + meson.project_source_root() / 'platforms' / 'emscripten' / 'server.py', + ) + + dest_path = meson.project_build_root() / 'src' / 'executables' + + run_target( + 'serve_emscripten', + command: [python3, server_py, '-d', dest_path], + depends: [oopetris_js, oopetris_html], + ) + + endif + else error('Unhandled cross built system: ' + host_machine.system()) endif From 9740070532e7770863831e5458790bac136dfd39 Mon Sep 17 00:00:00 2001 From: Totto16 Date: Sat, 16 Nov 2024 00:08:03 +0100 Subject: [PATCH 12/37] fix: build js and html files after another, so that nothing gets partially overwritten --- src/executables/game/main.cpp | 2 +- src/executables/meson.build | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/executables/game/main.cpp b/src/executables/game/main.cpp index 0c59d598b..4800a171c 100644 --- a/src/executables/game/main.cpp +++ b/src/executables/game/main.cpp @@ -109,7 +109,7 @@ namespace { try { -#if defined(__ANDROID__) or defined(__CONSOLE__) or defined(__SERENITY__) +#if defined(__ANDROID__) or defined(__CONSOLE__) or defined(__SERENITY__) or defined(__EMSCRIPTEN__) window = std::make_shared(window_name, WindowPosition::Centered); #else [[maybe_unused]] static constexpr int width = 1280; diff --git a/src/executables/meson.build b/src/executables/meson.build index 874b2277e..74d15bdaa 100644 --- a/src/executables/meson.build +++ b/src/executables/meson.build @@ -53,7 +53,7 @@ if build_application oopetris_html = executable( emscripten_name, - main_files, + objects: oopetris_js.extract_all_objects(recursive: true), dependencies: emscripten_deps, link_args: emscripten_link_args, override_options: emscripten_options, From 8900695e319d14c07a78419d033a4d04780103f3 Mon Sep 17 00:00:00 2001 From: Totto16 Date: Sat, 16 Nov 2024 01:44:44 +0100 Subject: [PATCH 13/37] fix: use correct game loop implementation for emscripten --- platforms/build-web.sh | 2 +- src/executables/game/application.cpp | 123 ++++++++++++++++++++++----- src/executables/game/application.hpp | 40 +++++++++ src/helper/platform.hpp | 4 +- 4 files changed, 144 insertions(+), 25 deletions(-) diff --git a/platforms/build-web.sh b/platforms/build-web.sh index 9c3e58ab1..656248b2a 100755 --- a/platforms/build-web.sh +++ b/platforms/build-web.sh @@ -36,7 +36,7 @@ export ARCH="wasm32" export CPU_ARCH="wasm32" export ENDIANESS="little" -export PACKAGE_FLAGS="'--use-port=sdl2', '--use-port=harfbuzz', '--use-port=freetype', '--use-port=zlib', '--use-port=sdl2_ttf', '--use-port=vorbis', '--use-port=mpg123', '--use-port=ogg', '--use-port=libmodplug', '--use-port=sdl2_mixer', '--use-port=libpng', '--use-port=libjpeg', '--use-port=sdl2_image', '--use-port=icu'" +export PACKAGE_FLAGS="'--use-port=sdl2', '--use-port=harfbuzz', '--use-port=freetype', '--use-port=zlib', '--use-port=sdl2_ttf', '--use-port=vorbis', '--use-port=mpg123', '--use-port=ogg', '--use-port=libmodplug', '--use-port=sdl2_mixer', '--use-port=libpng', '--use-port=libjpeg', '--use-port=sdl2_image', '-s SDL2_IMAGE_FORMATS=[\"png\",\"jpg\",\"svg\"]','--use-port=icu'" export COMMON_FLAGS="'-fexceptions', '-sEXCEPTION_CATCHING_ALLOWED=[..]', $PACKAGE_FLAGS" diff --git a/src/executables/game/application.cpp b/src/executables/game/application.cpp index 1c3a29e1b..73b3968ea 100644 --- a/src/executables/game/application.cpp +++ b/src/executables/game/application.cpp @@ -11,7 +11,7 @@ #include "scenes/scene.hpp" #include "ui/layout.hpp" -#include + #include #include #include @@ -26,6 +26,11 @@ #include "graphics/text.hpp" #endif + +#if defined(__EMSCRIPTEN__) +#include +#endif + namespace { [[nodiscard]] helper::MessageBox::Type get_notification_level(helper::error::Severity severity) { @@ -37,6 +42,33 @@ namespace { } // namespace +#if !defined(NDEBUG) +helper::DebugInfo::DebugInfo(Uint64 start_time, u64 frame_counter, Uint64 update_time, double count_per_s) + : m_start_time{ start_time }, + m_frame_counter{ frame_counter }, + m_update_time{ update_time }, + m_count_per_s{ count_per_s } { } + +[[nodiscard]] Uint64 helper::DebugInfo::update_time() const { + return m_update_time; +} + +[[nodiscard]] double helper::DebugInfo::count_per_s() const { + return m_count_per_s; +} +#endif + +helper::TimeInfo::TimeInfo( + std::chrono::nanoseconds sleep_time, + std::chrono::steady_clock::time_point start_execution_time +) + : m_sleep_time{ sleep_time }, + m_start_execution_time{ start_execution_time } { } + +[[nodiscard]] std::chrono::nanoseconds helper::TimeInfo::sleep_time() const { + return m_sleep_time; +} + Application::Application(std::shared_ptr&& window, CommandLineArguments&& arguments) try : m_command_line_arguments{ std::move(arguments) }, m_window{ std::move(window) }, @@ -56,6 +88,19 @@ Application::Application(std::shared_ptr&& window, CommandLineArguments& } } +#if defined(__EMSCRIPTEN__) +void c_main_loop(void* arg) { + auto application = reinterpret_cast(arg); + if (not application->is_running()) { + // cal the destructor manually, so that everything gets cleaned up + application->~Application(); + emscripten_cancel_main_loop(); + return; + } + + application->main_loop(); +} +#endif void Application::run() { m_event_dispatcher.register_listener(this); @@ -65,6 +110,7 @@ void Application::run() { const auto update_time = SDL_GetPerformanceFrequency() / 2; //0.5 s const auto count_per_s = static_cast(SDL_GetPerformanceFrequency()); u64 frame_counter = 0; + m_debug = std::make_unique(start_time, update_time, count_per_s, frame_counter); #endif using namespace std::chrono_literals; @@ -73,6 +119,22 @@ void Application::run() { : 0s; auto start_execution_time = std::chrono::steady_clock::now(); + m_time_info = std::make_unique(sleep_time, start_execution_time); + +#if defined(__EMSCRIPTEN__) + + int selected_fps = m_target_framerate.has_value() ? m_target_framerate.value() : -1; + + // NOTE: this is complicated, especially in C++ + // see: https://wiki.libsdl.org/SDL2/README/emscripten#porting-your-app-to-emscripten + // and: https://emscripten.org/docs/api_reference/emscripten.h.html#c.emscripten_set_main_loop_arg + // for a basic understanding + // this sets up a loop,, throws an exception(a special kind, not c++ one) to exit this function, but nothing gets cleaned up (no destructors get called, this function NEVER returns) + // but after emscripten_cancel_main_loop we have to manually call the destructor, to clean up, + emscripten_set_main_loop_arg(c_main_loop, this, selected_fps, true); + UNREACHABLE(); +#else + while (m_is_running #if defined(__CONSOLE__) @@ -80,40 +142,51 @@ void Application::run() { #endif ) { + main_loop(); + } +#endif +} - m_event_dispatcher.dispatch_pending_events(); - update(); - render(); - m_renderer.present(); +void Application::main_loop() { + + m_event_dispatcher.dispatch_pending_events(); + update(); + render(); + m_renderer.present(); #if !defined(NDEBUG) - ++frame_counter; + m_debug->m_frame_counter++; - const Uint64 current_time = SDL_GetPerformanceCounter(); + const Uint64 current_time = SDL_GetPerformanceCounter(); - if (current_time - start_time >= update_time) { - const double elapsed = static_cast(current_time - start_time) / count_per_s; - m_fps_text->set_text(*this, fmt::format("FPS: {:.2f}", static_cast(frame_counter) / elapsed)); - start_time = current_time; - frame_counter = 0; - } + if (current_time - m_debug->m_start_time >= m_debug->update_time()) { + const double elapsed = static_cast(current_time - m_debug->m_start_time) / m_debug->count_per_s(); + m_fps_text->set_text( + *this, fmt::format("FPS: {:.2f}", static_cast(m_debug->m_frame_counter) / elapsed) + ); + m_debug->m_start_time = current_time; + m_debug->m_frame_counter = 0; + } #endif - if (m_target_framerate.has_value()) { + if (m_target_framerate.has_value()) { - const auto now = std::chrono::steady_clock::now(); - const auto runtime = (now - start_execution_time); - if (runtime < sleep_time) { - //TODO(totto): use SDL_DelayNS in sdl >= 3.0 - helper::sleep_nanoseconds(sleep_time - runtime); - start_execution_time = std::chrono::steady_clock::now(); - } else { - start_execution_time = now; - } + const auto now = std::chrono::steady_clock::now(); + const auto runtime = (now - m_time_info->m_start_execution_time); + + const auto sleep_time = m_time_info->sleep_time(); + + if (runtime < sleep_time) { + //TODO(totto): use SDL_DelayNS in sdl >= 3.0 + helper::sleep_nanoseconds(sleep_time - runtime); + m_time_info->m_start_execution_time = std::chrono::steady_clock::now(); + } else { + m_time_info->m_start_execution_time = now; } } } + void Application::handle_event(const SDL_Event& event) { if (event.type == SDL_QUIT) { m_is_running = false; @@ -257,6 +330,10 @@ void Application::render() const { #endif } +[[nodiscard]] bool Application::is_running() const { + return m_is_running; +} + void Application::initialize() { auto loading_screen = scenes::LoadingScreen{ this }; diff --git a/src/executables/game/application.hpp b/src/executables/game/application.hpp index b4fbaab93..0c8c23c5b 100644 --- a/src/executables/game/application.hpp +++ b/src/executables/game/application.hpp @@ -15,9 +15,42 @@ #include "scenes/scene.hpp" #include "ui/components/label.hpp" +#include #include #include +namespace helper { +#if !defined(NDEBUG) + struct DebugInfo { + Uint64 m_start_time; + u64 m_frame_counter; + + private: + Uint64 m_update_time; + double m_count_per_s; + + public: + DebugInfo(Uint64 start_time, u64 frame_counter, Uint64 update_time, double count_per_s); + + [[nodiscard]] Uint64 update_time() const; + [[nodiscard]] double count_per_s() const; + }; + +#endif + struct TimeInfo { + private: + std::chrono::nanoseconds m_sleep_time; + + public: + std::chrono::steady_clock::time_point m_start_execution_time; + + TimeInfo(std::chrono::nanoseconds sleep_time, std::chrono::steady_clock::time_point start_execution_time); + + [[nodiscard]] std::chrono::nanoseconds sleep_time() const; + }; +} // namespace helper + + struct Application final : public EventListener, public ServiceProvider { private: static constexpr auto num_audio_channels = u8{ 2 }; @@ -38,7 +71,9 @@ struct Application final : public EventListener, public ServiceProvider { #if !defined(NDEBUG) std::unique_ptr m_fps_text{ nullptr }; + std::unique_ptr m_debug; #endif + std::unique_ptr m_time_info; #if defined(_HAVE_DISCORD_SDK) std::optional m_discord_instance{ std::nullopt }; @@ -58,11 +93,16 @@ struct Application final : public EventListener, public ServiceProvider { void run(); + void main_loop(); + void handle_event(const SDL_Event& event) override; virtual void update(); + virtual void render() const; + [[nodiscard]] bool is_running() const; + //TODO(Totto): move those functions bodies to the cpp void push_scene(std::unique_ptr scene) { diff --git a/src/helper/platform.hpp b/src/helper/platform.hpp index f2d57258f..0c3bc1be0 100644 --- a/src/helper/platform.hpp +++ b/src/helper/platform.hpp @@ -8,7 +8,7 @@ #include "./windows.hpp" -enum class Platform : u8 { PC, Android, Console }; +enum class Platform : u8 { PC, Android, Console, Web }; namespace utils { @@ -19,6 +19,8 @@ namespace utils { return Platform::Android; #elif defined(__CONSOLE__) return Platform::Console; +#elif defined(__EMSCRIPTEN__) + return Platform::Web; #else return Platform::PC; #endif From 42fdf7664f4ccb20d8288c75d8dc0782e8f63e2d Mon Sep 17 00:00:00 2001 From: Totto16 Date: Sat, 16 Nov 2024 01:45:07 +0100 Subject: [PATCH 14/37] fix: fix a few more emscripten things --- platforms/build-web.sh | 17 ++++++++++++++--- src/executables/meson.build | 23 ++++++++++++++++++++++- src/helper/web_utils.hpp | 6 +++++- 3 files changed, 41 insertions(+), 5 deletions(-) diff --git a/platforms/build-web.sh b/platforms/build-web.sh index 656248b2a..9a6ebbf7f 100755 --- a/platforms/build-web.sh +++ b/platforms/build-web.sh @@ -36,12 +36,14 @@ export ARCH="wasm32" export CPU_ARCH="wasm32" export ENDIANESS="little" -export PACKAGE_FLAGS="'--use-port=sdl2', '--use-port=harfbuzz', '--use-port=freetype', '--use-port=zlib', '--use-port=sdl2_ttf', '--use-port=vorbis', '--use-port=mpg123', '--use-port=ogg', '--use-port=libmodplug', '--use-port=sdl2_mixer', '--use-port=libpng', '--use-port=libjpeg', '--use-port=sdl2_image', '-s SDL2_IMAGE_FORMATS=[\"png\",\"jpg\",\"svg\"]','--use-port=icu'" +export ROMFS="platforms/romfs" -export COMMON_FLAGS="'-fexceptions', '-sEXCEPTION_CATCHING_ALLOWED=[..]', $PACKAGE_FLAGS" +export PACKAGE_FLAGS="'--use-port=sdl2', '--use-port=harfbuzz', '--use-port=freetype', '--use-port=zlib', '--use-port=sdl2_ttf', '--use-port=vorbis', '--use-port=mpg123', '--use-port=ogg', '--use-port=libmodplug', '--use-port=sdl2_mixer', '-sSDL2_MIXER_FORMATS=[\"ogg\",\"mp3\",\" mod\"]','--use-port=libpng', '--use-port=libjpeg', '--use-port=sdl2_image', '-sSDL2_IMAGE_FORMATS=[\"png\",\"jpg\",\"svg\"]','--use-port=icu'" + +export COMMON_FLAGS="'-fexceptions', '-pthread', '-sEXCEPTION_CATCHING_ALLOWED=[..]', $PACKAGE_FLAGS" # TODO see if ALLOW_MEMORY_GROWTH is needed, but if we load ttf's and music it likely is and we don't have to debug OOm crahses, that aren't handled by some thrid party library, which is painful -export LINK_FLAGS="$COMMON_FLAGS, '-sEXPORT_ALL=1', '-sUSE_WEBGPU=1', '-sWASM=1', '-sALLOW_MEMORY_GROWTH=1', '-sNO_EXIT_RUNTIME=0', '-sASSERTIONS=1','-sERROR_ON_UNDEFINED_SYMBOLS=1', '-sFETCH=1'" +export LINK_FLAGS="$COMMON_FLAGS, '-sEXPORT_ALL=1', '-sUSE_WEBGPU=1', '-sWASM=1', '-sALLOW_MEMORY_GROWTH=1', '-sASSERTIONS=1','-sERROR_ON_UNDEFINED_SYMBOLS=1', '-sFETCH=1'" export COMPILE_FLAGS="$COMMON_FLAGS ,'-DAUDIO_PREFER_MP3'" export CROSS_FILE="./platforms/crossbuild-web.ini" @@ -88,6 +90,7 @@ cpp_link_args = [$LINK_FLAGS] needs_exe_wrapper = true sys_root = '$EMSCRIPTEN_SYS_ROOT' +APP_ROMFS='$ROMFS' EOF @@ -118,6 +121,14 @@ else exit 1 fi +if [ ! -d "$ROMFS" ]; then + + mkdir -p "$ROMFS" + + cp -r assets "$ROMFS/" + +fi + if [ "$COMPILE_TYPE" == "complete_rebuild" ] || [ ! -e "$BUILD_DIR" ]; then meson setup "$BUILD_DIR" \ diff --git a/src/executables/meson.build b/src/executables/meson.build index 74d15bdaa..a3497df2d 100644 --- a/src/executables/meson.build +++ b/src/executables/meson.build @@ -33,9 +33,30 @@ if build_application ] subdir('platforms/3ds') elif host_machine.system() == 'emscripten' + emscripten_link_args = [] + + APP_ROMFS = meson.get_external_property('APP_ROMFS', '') + + if APP_ROMFS != '' + + fs = import('fs') + + if not fs.is_absolute(APP_ROMFS) + APP_ROMFS = meson.project_source_root() / APP_ROMFS + endif + + if not fs.exists(APP_ROMFS) + error('APP_ROMFS should exist, but doesn\'t: \'' + APP_ROMFS + '\'') + endif + + emscripten_link_args += ['--preload-file', APP_ROMFS+'@/assets/'] + + endif + + emscripten_name = 'oopetris' emscripten_deps = [liboopetris_graphics_dep, graphic_application_deps] - emscripten_link_args = ['--preload-file', '../assets@/assets/'] + emscripten_options = { 'warning_level': '3', 'werror': true, diff --git a/src/helper/web_utils.hpp b/src/helper/web_utils.hpp index 2917a69cb..50e455fdd 100644 --- a/src/helper/web_utils.hpp +++ b/src/helper/web_utils.hpp @@ -4,7 +4,11 @@ #if !defined(__EMSCRIPTEN__) -#error this header is for emscripten only +#error "this header is for emscripten only" +#endif + +#if !defined(__EMSCRIPTEN_PTHREADS__) +#error "need emscripten threads support" #endif From bab268c41860693a73442ef13b9dbf0e33f4132d Mon Sep 17 00:00:00 2001 From: Totto16 Date: Sat, 16 Nov 2024 01:57:57 +0100 Subject: [PATCH 15/37] fix: fix linking order issue on emscripten it linked both .js and .html at the same time, so the wasm was corrupt at the end also add a test for correct wasm files --- platforms/build-web.sh | 3 ++- src/executables/meson.build | 27 +++++++++++++++++++++++---- 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/platforms/build-web.sh b/platforms/build-web.sh index 9a6ebbf7f..c23c212d3 100755 --- a/platforms/build-web.sh +++ b/platforms/build-web.sh @@ -135,7 +135,8 @@ if [ "$COMPILE_TYPE" == "complete_rebuild" ] || [ ! -e "$BUILD_DIR" ]; then "--wipe" \ --cross-file "$CROSS_FILE" \ "-Dbuildtype=$BUILDTYPE" \ - -Ddefault_library=static + -Ddefault_library=static \ + -Dtests=false fi diff --git a/src/executables/meson.build b/src/executables/meson.build index a3497df2d..740299e2e 100644 --- a/src/executables/meson.build +++ b/src/executables/meson.build @@ -46,17 +46,20 @@ if build_application endif if not fs.exists(APP_ROMFS) - error('APP_ROMFS should exist, but doesn\'t: \'' + APP_ROMFS + '\'') + error( + 'APP_ROMFS should exist, but doesn\'t: \'' + + APP_ROMFS + + '\'', + ) endif - emscripten_link_args += ['--preload-file', APP_ROMFS+'@/assets/'] + emscripten_link_args += ['--preload-file', APP_ROMFS + '@/assets/'] endif - emscripten_name = 'oopetris' emscripten_deps = [liboopetris_graphics_dep, graphic_application_deps] - + emscripten_options = { 'warning_level': '3', 'werror': true, @@ -80,6 +83,7 @@ if build_application override_options: emscripten_options, install: true, name_suffix: 'html', + link_depends: [oopetris_js], ) python3 = find_program('python3', required: false) @@ -100,6 +104,21 @@ if build_application endif + wasm_validate_exe = find_program('wasm-validate', required: false) + + if wasm_validate_exe.found() + + wasm_file = meson.project_build_root() / 'src' / 'executables' / 'oopetris.wasm' + + test( + 'validate wasm file', + wasm_validate_exe, + args: ['--enable-threads', wasm_file], + depends: [oopetris_js, oopetris_html], + + ) + endif + else error('Unhandled cross built system: ' + host_machine.system()) endif From db7f287ac1e1e58eb3e729561dc390b46253c5f5 Mon Sep 17 00:00:00 2001 From: Totto16 Date: Sat, 16 Nov 2024 01:58:17 +0100 Subject: [PATCH 16/37] ci: add web assembly --- .github/workflows/web_build.yml | 40 +++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 .github/workflows/web_build.yml diff --git a/.github/workflows/web_build.yml b/.github/workflows/web_build.yml new file mode 100644 index 000000000..db6ea1b4d --- /dev/null +++ b/.github/workflows/web_build.yml @@ -0,0 +1,40 @@ +name: Web CI + +on: + release: + types: [published] + push: + branches: ['main'] + pull_request: + workflow_dispatch: + +jobs: + web-build: + name: Build for the web + runs-on: ubuntu-24.04 + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: '0' + + # NOTE: meson has no dependencies, so --break-system-packages doesn't really break anything! + - name: Setup Meson + run: | + pip install meson --break-system-packages + + - name: Install dependencies + run: | + sudo apt-get update + sudo apt-get install ninja-build pkg-config build-essential wabt -y --no-install-recommends + + - name: Build + run: | + bash ./platforms/build-web.sh + meson test -C build-web + + # TODO upload page to gh-pages! + - name: Upload artifacts + uses: actions/upload-artifact@v4 + with: + name: oopetris-assets + path: build-web/src/executables/ From 247542b432c2ae7c52517514fe8779dd721ce1a7 Mon Sep 17 00:00:00 2001 From: Totto16 Date: Sat, 16 Nov 2024 02:37:18 +0100 Subject: [PATCH 17/37] ci: update windows build tools version --- .github/workflows/build.yml | 2 +- .github/workflows/windows_installer.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 5f3b1794d..a88b2f6d9 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -89,7 +89,7 @@ jobs: uses: TheMrMilchmann/setup-msvc-dev@v3 with: arch: x64 - toolset: '14.41' + toolset: '14.42' - name: Setup MYSYS2 (Windows) if: matrix.config.os == 'windows' && ( matrix.config.environment == 'mingw' || matrix.config.environment == 'ucrt' ) diff --git a/.github/workflows/windows_installer.yml b/.github/workflows/windows_installer.yml index 5816b7a4b..68b5548e5 100644 --- a/.github/workflows/windows_installer.yml +++ b/.github/workflows/windows_installer.yml @@ -24,7 +24,7 @@ jobs: uses: TheMrMilchmann/setup-msvc-dev@v3 with: arch: x64 - toolset: '14.41' + toolset: '14.42' - name: Setup meson run: | From 98d2bbb51eb2a34470bf0ddd9bb47b8a7f8296d3 Mon Sep 17 00:00:00 2001 From: Totto16 Date: Sat, 16 Nov 2024 02:38:43 +0100 Subject: [PATCH 18/37] fix: use correct namespace for utility function --- src/lobby/credentials/secret.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lobby/credentials/secret.cpp b/src/lobby/credentials/secret.cpp index 184d00baa..44942dcb9 100644 --- a/src/lobby/credentials/secret.cpp +++ b/src/lobby/credentials/secret.cpp @@ -395,7 +395,7 @@ namespace { // This is a dummy fallback, but good enough for this platforms secret::SecretStorage::SecretStorage(KeyringType type) : m_type{ type } { - m_file_path = web::get_root_folder() / secrets_constants::store_file_name; + m_file_path = utils::get_root_folder() / secrets_constants::store_file_name; } secret::SecretStorage::~SecretStorage() = default; From 43d6b168860139e4f4dff9522038ea20b1faeb0a Mon Sep 17 00:00:00 2001 From: Totto16 Date: Sun, 17 Nov 2024 03:07:16 +0100 Subject: [PATCH 19/37] fix: use correct dependencies names in emscripten some have -mt, some have the format name in it, so cover all that cases only use mp3 as music format --- platforms/build-web.sh | 4 ++-- tools/dependencies/meson.build | 29 +++++++++++++++++++---------- 2 files changed, 21 insertions(+), 12 deletions(-) diff --git a/platforms/build-web.sh b/platforms/build-web.sh index c23c212d3..ec94e0446 100755 --- a/platforms/build-web.sh +++ b/platforms/build-web.sh @@ -19,7 +19,7 @@ fi EMSDK_QUIET=1 source "$EMSCRIPTEN_ROOT/emsdk_env.sh" >/dev/null ## build theneeded dependencies -embuilder build sdl2 harfbuzz freetype zlib sdl2_ttf vorbis mpg123 ogg libmodplug sdl2_mixer libpng libjpeg "sdl2_image:formats=png,jpg,svg" icu +embuilder build sdl2-mt harfbuzz-mt freetype zlib sdl2_ttf mpg123 sdl2_mixer_mp3 libpng-mt libjpeg "sdl2_image:formats=png,jpg,svg" icu-mt export EMSCRIPTEN_SYS_ROOT="$EMSCRIPTEN_ROOT/upstream/emscripten/cache/sysroot" @@ -38,7 +38,7 @@ export ENDIANESS="little" export ROMFS="platforms/romfs" -export PACKAGE_FLAGS="'--use-port=sdl2', '--use-port=harfbuzz', '--use-port=freetype', '--use-port=zlib', '--use-port=sdl2_ttf', '--use-port=vorbis', '--use-port=mpg123', '--use-port=ogg', '--use-port=libmodplug', '--use-port=sdl2_mixer', '-sSDL2_MIXER_FORMATS=[\"ogg\",\"mp3\",\" mod\"]','--use-port=libpng', '--use-port=libjpeg', '--use-port=sdl2_image', '-sSDL2_IMAGE_FORMATS=[\"png\",\"jpg\",\"svg\"]','--use-port=icu'" +export PACKAGE_FLAGS="'--use-port=sdl2', '--use-port=harfbuzz', '--use-port=freetype', '--use-port=zlib', '--use-port=sdl2_ttf', '--use-port=mpg123', '--use-port=sdl2_mixer', '-sSDL2_MIXER_FORMATS=[\"mp3\"]','--use-port=libpng', '--use-port=libjpeg', '--use-port=sdl2_image','-sSDL2_IMAGE_FORMATS=[\"png\",\"jpg\",\"svg\"]', '--use-port=icu'" export COMMON_FLAGS="'-fexceptions', '-pthread', '-sEXCEPTION_CATCHING_ALLOWED=[..]', $PACKAGE_FLAGS" diff --git a/tools/dependencies/meson.build b/tools/dependencies/meson.build index 3f953c2a7..9e89dfdba 100644 --- a/tools/dependencies/meson.build +++ b/tools/dependencies/meson.build @@ -48,11 +48,22 @@ if meson.is_cross_build() only_allow_native_libs = true ## map native libraries to dependencies - map_native_dependencies = ['SDL2-mt', 'SDL2_ttf', 'mpg123', 'SDL2_mixer', 'SDL2_image'] - foreach map_native_dependency : map_native_dependencies - native_dep = cpp.find_library(map_native_dependency, required: true) + map_native_dependencies = [ + ['SDL2-mt', 'SDL2'], + ['SDL2_ttf'], + ['mpg123'], + ['SDL2_mixer_mp3', 'SDL2_mixer'], + ['SDL2_image_jpg-png-svg', 'SDL2_image'], + ['icu_common-mt', 'icu-uc'], + ] + foreach native_dependency_tuple : map_native_dependencies + native_dep_lib_name = native_dependency_tuple[0] + + native_dep_name = native_dependency_tuple.length() == 2 ? native_dependency_tuple[1] : native_dep_lib_name + + native_dep = cpp.find_library(native_dep_lib_name, required: true) - if map_native_dependency == 'SDL2-mt' + if native_dep_name == 'SDL2' major_version = cpp.get_define( 'SDL_MAJOR_VERSION', @@ -89,9 +100,9 @@ if meson.is_cross_build() + '.' + patch_version, ) - meson.override_dependency('SDL2', native_dep_with_version) + meson.override_dependency(native_dep_name, native_dep_with_version) else - meson.override_dependency(map_native_dependency, native_dep) + meson.override_dependency(native_dep_name, native_dep) endif @@ -105,10 +116,8 @@ if meson.is_cross_build() 'freetype', 'harfbuzz-mt', 'z', - 'vorbis', - 'ogg', - 'modplug', - 'png', + 'mpg123', + 'png-mt', 'jpeg', 'fetch-mt', ] From 2c1cf65f32b80bed0f9f79dbf048efa57530dc22 Mon Sep 17 00:00:00 2001 From: Totto16 Date: Sun, 17 Nov 2024 03:12:49 +0100 Subject: [PATCH 20/37] wrap: update icu to 76.1 --- subprojects/icu.wrap | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/subprojects/icu.wrap b/subprojects/icu.wrap index 982b9a5b2..c7fd1f47f 100644 --- a/subprojects/icu.wrap +++ b/subprojects/icu.wrap @@ -1,13 +1,13 @@ [wrap-file] directory = icu -source_url = https://github.com/unicode-org/icu/releases/download/release-73-2/icu4c-73_2-src.tgz -source_filename = icu4c-73_2-src.tgz -source_hash = 818a80712ed3caacd9b652305e01afc7fa167e6f2e94996da44b90c2ab604ce1 -patch_filename = icu_73.2-2_patch.zip -patch_url = https://wrapdb.mesonbuild.com/v2/icu_73.2-2/get_patch -patch_hash = 218a5f20b58b6b2372e636c2eb2d611a898fdc11be17d6c4f35a3cd54d472010 -source_fallback_url = https://github.com/mesonbuild/wrapdb/releases/download/icu_73.2-2/icu4c-73_2-src.tgz -wrapdb_version = 73.2-2 +source_url = https://github.com/unicode-org/icu/releases/download/release-76-1/icu4c-76_1-src.tgz +source_filename = icu4c-76_1-src.tgz +source_hash = dfacb46bfe4747410472ce3e1144bf28a102feeaa4e3875bac9b4c6cf30f4f3e +patch_filename = icu_76.1-1_patch.zip +patch_url = https://wrapdb.mesonbuild.com/v2/icu_76.1-1/get_patch +patch_hash = e50941b3a3f2034032079bbeaccd2c59b54963f12d43aefb9673a607556d4abc +source_fallback_url = https://github.com/mesonbuild/wrapdb/releases/download/icu_76.1-1/icu4c-76_1-src.tgz +wrapdb_version = 76.1-1 [provide] icu-uc = icuuc_dep From d35484410cde62c40559b062aec4d5ed712377b1 Mon Sep 17 00:00:00 2001 From: Totto16 Date: Sun, 17 Nov 2024 03:20:08 +0100 Subject: [PATCH 21/37] wrap: update magic_enum to 0.9.7 --- subprojects/magic_enum.wrap | 14 +++---- .../magic_enum-0.9.6_installed.diff | 37 ------------------- 2 files changed, 6 insertions(+), 45 deletions(-) delete mode 100644 subprojects/packagefiles/magic_enum-0.9.6_installed.diff diff --git a/subprojects/magic_enum.wrap b/subprojects/magic_enum.wrap index 4cac0678a..031a6259c 100644 --- a/subprojects/magic_enum.wrap +++ b/subprojects/magic_enum.wrap @@ -1,12 +1,10 @@ [wrap-file] -directory = magic_enum-0.9.6 -source_url = https://github.com/Neargye/magic_enum/archive/refs/tags/v0.9.6.tar.gz -source_filename = magic_enum-v0.9.6.tar.gz -source_hash = 814791ff32218dc869845af7eb89f898ebbcfa18e8d81aa4d682d18961e13731 -source_fallback_url = https://github.com/mesonbuild/wrapdb/releases/download/magic_enum_0.9.6-1/magic_enum-v0.9.6.tar.gz -wrapdb_version = 0.9.6-1 - -diff_files = magic_enum-0.9.6_installed.diff +directory = magic_enum-0.9.7 +source_url = https://github.com/Neargye/magic_enum/archive/refs/tags/v0.9.7.tar.gz +source_filename = magic_enum-v0.9.7.tar.gz +source_hash = b403d3dad4ef542fdc3024fa37d3a6cedb4ad33c72e31b6d9bab89dcaf69edf7 +source_fallback_url = https://github.com/mesonbuild/wrapdb/releases/download/magic_enum_0.9.7-1/magic_enum-v0.9.7.tar.gz +wrapdb_version = 0.9.7-1 [provide] magic_enum = magic_enum_dep diff --git a/subprojects/packagefiles/magic_enum-0.9.6_installed.diff b/subprojects/packagefiles/magic_enum-0.9.6_installed.diff deleted file mode 100644 index e72b02b3f..000000000 --- a/subprojects/packagefiles/magic_enum-0.9.6_installed.diff +++ /dev/null @@ -1,37 +0,0 @@ -diff --git a/meson.build b/meson.build -index 207c834..9fe13a7 100644 ---- a/meson.build -+++ b/meson.build -@@ -4,7 +4,7 @@ project( - version: '0.9.6', - ) - --magic_enum_include = include_directories('include/magic_enum') -+magic_enum_include = include_directories('include') - - magic_enum_args = [] - -@@ -17,6 +17,23 @@ magic_enum_dep = declare_dependency( - compile_args: magic_enum_args, - ) - -+install_headers( -+ files( -+ 'include/magic_enum/magic_enum.hpp', -+ 'include/magic_enum/magic_enum_all.hpp', -+ 'include/magic_enum/magic_enum_containers.hpp', -+ 'include/magic_enum/magic_enum_flags.hpp', -+ 'include/magic_enum/magic_enum_format.hpp', -+ 'include/magic_enum/magic_enum_fuse.hpp', -+ 'include/magic_enum/magic_enum_iostream.hpp', -+ 'include/magic_enum/magic_enum_switch.hpp', -+ 'include/magic_enum/magic_enum_utility.hpp', -+ ), -+ subdir: 'magic_enum', -+) -+ - if get_option('test') - subdir('test') - endif -+ -+ From 2d0f1236472e5e5ac5a3b5bfda9489f99928faf5 Mon Sep 17 00:00:00 2001 From: Totto16 Date: Sun, 17 Nov 2024 03:20:29 +0100 Subject: [PATCH 22/37] wrap: update utfcpp to 4.0.6 --- subprojects/utfcpp.wrap | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/subprojects/utfcpp.wrap b/subprojects/utfcpp.wrap index 1416c2c13..7d6b2c7df 100644 --- a/subprojects/utfcpp.wrap +++ b/subprojects/utfcpp.wrap @@ -1,13 +1,13 @@ [wrap-file] -directory = utfcpp-4.0.5 -source_url = https://github.com/nemtrif/utfcpp/archive/refs/tags/v4.0.5.tar.gz -source_filename = utfcpp-4.0.5.tar.gz -source_hash = ffc668a310e77607d393f3c18b32715f223da1eac4c4d6e0579a11df8e6b59cf -patch_filename = utfcpp_4.0.5-1_patch.zip -patch_url = https://wrapdb.mesonbuild.com/v2/utfcpp_4.0.5-1/get_patch -patch_hash = bedf83d77b07a2fb84582722aaf748498cab0267b023ff8460dae3730a2d0819 -source_fallback_url = https://github.com/mesonbuild/wrapdb/releases/download/utfcpp_4.0.5-1/utfcpp-4.0.5.tar.gz -wrapdb_version = 4.0.5-1 +directory = utfcpp-4.0.6 +source_url = https://github.com/nemtrif/utfcpp/archive/refs/tags/v4.0.6.tar.gz +source_filename = utfcpp-4.0.6.tar.gz +source_hash = 6920a6a5d6a04b9a89b2a89af7132f8acefd46e0c2a7b190350539e9213816c0 +patch_filename = utfcpp_4.0.6-1_patch.zip +patch_url = https://wrapdb.mesonbuild.com/v2/utfcpp_4.0.6-1/get_patch +patch_hash = 49fac3078123b02019498cb58cd6d27df789ea831400b328360cca6533c3b6af +source_fallback_url = https://github.com/mesonbuild/wrapdb/releases/download/utfcpp_4.0.6-1/utfcpp-4.0.6.tar.gz +wrapdb_version = 4.0.6-1 [provide] utf8cpp = utfcpp_dep From 2898d62323deeec30b5e476960a46b56f2c8b84a Mon Sep 17 00:00:00 2001 From: Totto16 Date: Sun, 17 Nov 2024 03:25:48 +0100 Subject: [PATCH 23/37] fix: only use png and svgs, since jpeg isn't available with mt support also convert the mgerhold.jpg to png --- assets/authors/mgerhold.jpg | Bin 50971 -> 0 bytes assets/authors/mgerhold.png | Bin 0 -> 390021 bytes platforms/build-web.sh | 4 ++-- src/scenes/about_page/about_page.hpp | 2 +- tools/dependencies/meson.build | 3 +-- 5 files changed, 4 insertions(+), 5 deletions(-) delete mode 100644 assets/authors/mgerhold.jpg create mode 100644 assets/authors/mgerhold.png diff --git a/assets/authors/mgerhold.jpg b/assets/authors/mgerhold.jpg deleted file mode 100644 index a2a1b0ab10cf546a77f048bbba9e6d82afdc8aca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 50971 zcmbT6Wl&tP%I9I5(MzvnsKPxsrx+cF>wfP{d6hyag-h=_=cjD&)Qi;jkhibjNugNaM}iJXk| z6A1|g4I4cL6$>>93BzYb77k7x9v*Uf0TF&KVK#0aE*NBFWHeMXLUeROE=m$guK(xt z)(OBuf*FAsfrX(0e87T%#e#Y3f%yvnz`(=&*8=?S1@i$G4jus!2^j_TBj5uJEbIq3 zSa^6ixc58#->(7Su;8&NIlmy_C>tYEIpcB#$LAnXi&u5wsZ3tbaGSVXzoe*SNu|APnXo#z7_94s8-e|TU%c)lO7Sa9%^oCw%o zlo5@caj3Y0k#NQ1bE>+Kskv1y@Jw7LQSfPaHfb;agY;iS|93zk|6fG^1N1*UZ%Y6) zSeW;K!D0b`fa{`PEWrWFL0^O`4_>`_z&T!gIxp4PhAdBX?GO0OmRR13kAfB;P zG{&GiZB^lra+(PKo!_MnEO`!uhvC96%v}1%fuE!$?{^scO)vy+57+7?8Zlrw5Cur0 zFCSlVVIsZl=H{^_4Fo<^J#5(zP79M?Pc<_eW8`G#C#-g(uMo)dm~1}RrV`;Pj(80) z@o!UHYCpERJbbK;5?gUnbWFKA_E-#K9%9ni z7{Tm`En#ktS3M*s+PfQh_l0I#q{N<|rrC9=wW{xYS2~vQUz5@o75{Gc+cK}7c>p~k zA@J<-F@QI}z}ptDcXqle0uX=tBix!a7~nv00kGS!2x74z#-BnpbBpW3@s3U}vY>6e z>FgI_A{AULlqDdx2EC=Y#*@vaL8h+!!?qUhG>663TCh8M4kkU(w?N;q} ztd_~Lvl}JmIF1l+dIQ)JjUndiHkquEH#COf{TSW-oqo>HO)s#q5xQ2z)5I6QSNjWL zb5B^Bvl=;q=VBh@~@?SMrrQ^@w|yiO*H5Wj?^s;itPduihRX!nZI+E=Ov@ zMUVjf-eJ^kDxobWZ2D>6*~=Rss(GE`oG*AhEmx@ODw$;4QAx;>cXZg5@=}d^$2)}c z`nHd_Ll$r#T$I;Q+s?(rVoj8W565rTxha@_N=RMkv&S2A?u%QNuOnqKC>-6$k3QYz zUdo1sKXSS!i}w>229-?Ips;9g)HQA9TC~t=iab*|ddE4E^zogVe(`l0jk%4QAsPh! zz`r7G)X_WNkgqapINInP_C6K9qhSyskEoDAf$-`o)Bd9_nLfPQ&URHDKd(=mcBQWxk zcK?2!I~tS6I2t{p1W9pzPlbyxgTvz=rxBpI87R?-fwm^&YgBgpo{*rsQ>SqBWDTcB z1Q=P8)%7WEmEvykB%9uJzIeYdC1$e6Wvwn2-FYLwCUwlZ90ig}z5qAaXDTcsB72!L zMl*9r>uTeL?UuLAw+me36w77U3UL;BC}~zkMiZU|^w3=Uj}5&1w0(TOH~ z14p*;vAzAkwi-gH3@`^T*M3W0&;w=cqH6o@SN|TvV}ZWry}RA>8({!%}k1) z-fj*V9co!b(App)Ecj@Yrru+QAz`P0M;I{!Y0_jqDnWbou z!D8HJ#POLC&A%9_8mG?nhMjN!__}h41)IW&A`-FqJfQ$OFZDayI?}HA7fsT35>1e3 z+=xU3F_MZmwQ^%6Tfn}5vBFjv=LNTdGX^z zTwf^Q;Sx@R7+?eTFl+8{G|Bw9Ek}fMQoKkii2BK8|4q=v*jJPlP*M8YnaU6;%)0vz zX}Nb%6P@Y^<}zF?ujq`7Tl>NaKD2oD4Rz_GqA_-nI1lhjb@To5Gb7+?)?TJeR{t63 z_29>#cSi#~5Mh9EmyB8$3ze7Auuk@NpabKt{7gbABG2I`;(t{26Ch9hYxD6O#OHs1 zO>70EIGvg8__*Bfh+?oPL!U$~1KZDyV3iJVA^{*#?8nDX)wI%DI|lmFmQTwjZ}G)F zFrk7`Krp9bn6pO2J;fre!PL?NpzoDT*<>qdQGL@U*JlQ-m;G&*%^FLgt8Hz^mOb$q z%sReaq$2?;vN3e1fFokKAi(i7-uUu&>ZH3C8izMPE5n~ZWZ7nBuT(*TZ8}r57toOY z5^L8%Q%4$=ywAGnHPRy=F2~WBL6qUcae0~9rsqyT!O4#1pC;kuWG)rN1lPAaB=OI} z7>Isz(qIYd%BRuv;FULkfj6W_T@>Pu;^i41Lc5P;vG9*yoLi|IIV6@o|Cn3p>hDV26 z$`W*U#W+k=E^)PsIS9f3f@wDozdT=GkEQ`=SO3#&NxaN9MXg^&5j{QKpPA0n(!S?P zQS>>W7H0C$o^&nlw%v_m)ZwJ_`;%HO+74L{*7Q_$-B0SaR>@F0h8$`2R2kMxq01_sg43&I3 zm~lSD#f3Abz0O`mz~OJgu<}#F(B(7z#q;4Zm7wh^OUsUUPVUtY^3UxqisaqB0F&`{ z+wAT#=HB{lE zHj^6~oEiV6*uD>2%Ni}!jaqWuP77uvA2lgJz9E>ru8MV`8XRBT115*$Se$9wPZwf6 zAD{rzJlY!Lqj`E}Y#rRuG&(om$Ev?46})!l#MOsuLNv94IN7DHQWXO7er zQd4E$MB3Tss_Dj6j$6Mw`)O;XFMMpW#mNX+*hQ1XXRf~7k;I46U5qFpv(+y$`}BSe zBbDVVjq3V_waFHQ;GnoI)LNKa$7?LMMHvPro;ELC{H}XB|$ReeTXfNY_z_sXi@6ed<@^AQp5N!ZQtrP5-=Obia;JeObwuu97T>_HEKj<2UWd?jVi$7m4 zgqF4}th9koo^0s0{$M6+xu}txjR|FPr}YzD`PZ@C7VHutRuNIZti1tr0B0IJ;IpLz z!3WtQ^T96hJTv>_G5*JS&T_sN$))e6t~k*kuI&!l`o}cgJn_v*3$NDEVk|~7ZJmH$XQiO;elP4vX7~YYRcy{3n{G1tHycmPMD?200;}dwN`T0Aa)vdk~kNrDm*v>oA zSLlgk5=k`)ROBeuk-A)xP-{(RU~=YJk-7=gy%QZctYP^31?KS8M}wHPcO=s+`lP?K zX|KXRjTvt@S!Vnarjfn+G3&O2-HSHnHx5sx&fB}#XZ5xEN%BFcH2=H-s6pk{GoA@d z&3)+~^xGP7|M>?MV!H`;eN;c6A*P~4x7CuO&+{ed)lh%`*B%NiXTdC{lfpkJmXac@AuKgG-$GZuvq_ytz=(8!o; z0_Y;NVv8PvUOVz_bdT^g%?KT+JWiUr1EkUn7aL{QJ4>$ur^sgyW?o5#IXM!P>isa+ z4~+ zRNE&Ro~P8p7U{FxAFUc&ICa0t5T19y7|v1KJ?36%f{m-5hO;9!#x@f9BmOp6Xv)Q? zjdHa~Mr$2CT!k0qZ76-*Ze~49Ap)wb3btC2C(0$34bhu83C~x71c?wMLI6kK4tUBKeSb z-FZ9!MX0=yLzP!likdn)Er0Hpj>m_kbQwYLiD`ragv;KdWGjEq#e*y z5Y@mkpA*qURfD5nY%0R{zk!bicchojNUONh*`Q9HWZV3GJ{pQ?-SUmG0&tb%q(8Q& z8|Eqw<|P{)vSU1j&)&U=B?i@Iu1-s;89 z(}LiGt-$4bH;xN9F4DHA6o`JX>Z%`#B%cL;}a_09Iqa@Lp!`~_axZ_+_ zcAP`Cv7$#b`O)&sd`zEj%8!2`scda6(#5U*gXl8xVV5SWpLZfAA4m0C6FGXq!<`7o^F303@ytzrCn`W;?7cRd-X4ZwUnFMO^}&c z5Gi>nSj4Beb7rKGjSf)htUys51tpEI{j=ZYtY1CaRp`e6o@Yw~!`&{m7kV8n`AXeI zs#;(7^TVcp@Gr&GYe*Zqm1F$pT|ZT8H#k|<7Z6!NRtp0kX5W^# zN~lU)v`Ph%jpHAaGAN8HKUaX^S*?10(_D%EAdeszf!k7UL602|pqU zKZee=tO^c7^=Sh+#Q{MwsfWGh7rfKm z+6H^2Us^jX$z?zE+SgD&->G3E4zG(Q!lZ2f`CZ{B=PiucPR-Zjcy1q~2~5kZ%h`+( zyxMz39k5?L&9%ncA^ewsispLOU07~%f@OJqawZUw5u!BxDl)LWqkC-MxLv0 z?tLdqsWtM=F;ax1ae9M?DfQyAF8~HI%VBlHFFTeM8-8X`od zel#@E7^`8V@{5Qtd}yz8Mr%f)YGfgZ5A7ca9OoT9cr@QD6{xRlur5$r8_N3t*cOfx z0wvAa?lHJM_=Pvv`u-sLo0MyA(nzrba~BNf+OMcnys69JupMKe8_2}JBo+U6Mg5Ba zf4_kkAv7Dot3#%(dY+BVfpx@5kpoMn@#7A~7>DZuw7^RwH{y(%8D7KU=bxvRZ3fIj z6+w;O+bq)${mv%w!;aL6!<|^67$wg0AxPuoNv_G7sMZ!mtdm`o)%$TyK+K^aL59o?I@jM%S9Q*w@uTlYUro&kh^FVI3>1di~@{e%g>aXlZq1H2$e$ zt!h90hT;xl;9cXv)tZAy;u-?PSZyjVeIn&TmFdlRb~V&aBEXWtiqYL$>Z2diMeoB@ z9w?)@w=h>iMRS3H&Fsz=-DJR)H)%&FyaC2}ji;U?uk>=7dU1^M_=+MS_Y z#?CRBjHd|l4Oz!ft85)Dqt0ugV9RXMfQQQwjO+8)4FIt40a}6+ra1yKbLe!|s9+nQ zRYHSyks=nqmt%+RgkD6g<`t=qSYruR5_pfF4GGIeP30n$YLd)i^te7AbVnLW zyfEu0|CSW3jZ)YjYiGQeNrT_8y1G@x*_Bq17MXc^0|3Vf>u*n8da)Aui2!#MZkM7z zF>-8Ojj1+i^(Q%B5l*BgUbA#As_Cj)%-tDz*whnmsYB3x8kr^&Q|e|}UogpuB4Zef zzghjW)!qQM#soo0q9U4qm}&pjCdfsbaaq(I&A4P!bndFCEbWd@SO3l{Pge2<*y|V= z(sG0T;x2bT6`ugmT`M_P8~zUP57b$%xs+DIEc~*R%d_fQ!yj&D;YYMrjC^z7`i$Lj~zQe)Dp>{%lLbwnQp> zG6KRMpM>_Q;YHKu6P68D7Tce^^)a0=5s#Sjrdt(B3WwWKaXjL`ECuA&=~RUDS?dT_ zzo(Rl&!e+8csE65PZ@<#tD!LIHlq-#DO1DkXX`LH^3F3r`Oj=`Jytc3R>V!FoT0)hl zsg2m!?W4pjzi^DsX>fVMeLyb%|RJbQ) z*pj(%hnJK`WSOp=9foLWk*u<;EH;eovjOl?LR9uOb_^|gs%G>? zF<>LpOQ4L9BJJ^3$ch?W_{uKEwQrA~Y`ek+FxPf5R-A49n3$H)+(k@L7yPRjC)wP7 za{HV?jV5yuFVtpDzndTKWaqsg*+10PNlq$2CH`4k{^e|KBG{?Ifm$Uj9Fu5#B&QPN zEWpSXn-N9!4M3G1^4^Gj*Ej~)(xxfMDHL^8d%HInr2Aukg-@1798c}euARf1kau9< z!|G>#7$?QeS0D8p*NFajqMgfh*Vy^XlA6&!1qmh)1OS>7{|gWWaA@BuR5HHlO%3W@ z+;0i7ir9UKlY9^fTq59#Em`GDx)sT;H ze`?u}a6lRp8yMI57bR{PT@6qJAqzXNPhVtX4B6wK_ws!bnEogzL9hTJsYHcQ8Ew0s zL}~v5T%|5|U1Mwvxi)BT43VD{>9#X|mgRtXcFq*B)j;Q4vj6a;@_BC5)e&3nmSM}n zD1TPeg92vQ(vf#`t;v~8S<}{?{M}7@u>nj@o)%oocgCaC*jTry#>#XC{i~5y~O}rn=C`$b^KL0-Hg~(C)5^s4|)Yl&$Vc;y`u)2u7 zvN3*Xn!k?MD6)P*=?Gqgc0Jp&(MZ77F!GOInpQqbZR$K81tnX>Glc}567KH`Z+C2~ zT0gRu_tsU*m*_678bt6-w6b->o$6mC28u%<3%z^6Unx)wJ%Dbwq(_U_# z$C}5^*#NS&4hbCQV~+NknoN$R@98&$s?{E_2$5s}rxO80yi2TY(G#p&fqA`r;zP@mcMJj==m{%W2~*WK%f8xf2jRWxDuNxC?5hu& z4PVyt0Y=&6?2~~QZI7>BcsgU-CxS_J8~Ue?f3t4-QP?tQQG-x zH++1^-TT!_&atOs?I3_m^L z+mibesnyNt&@@QTPde)2Q~1N8RTZz&igKKWJT>y>QA2-s=WaR`LhkAYOTuvTA;Z?3 zb=l0XNU(~0c&@G#RIFbnip{5=eEy1fGgumx_%b9r0Lcae;4(W=Ivn$cDbN|O=BM8? zkYkOEx@*;1vE`R&0 z!N?^y{1IiPEn%=Gsb9a5T(#G=C_+kWp2##fGosXbn? zwgCK!cWpjZV)yMSm%pMU0KXd8ErL|2NE!SXX%wh8JNT4acuA_Z|4}+{5ja%E*=w)w zY)}7GP<45%=k7xmj*(|>jWY8)7cYL&1-o`CNt6*~ikwp&{MW2B+=fp_9zW0IXzuCs zbMS~IFf#Dafb)`Ej^l{$5zL0Y>DPn-jPbENde`ruw7Vu_?7qteNw`nfhQ!tpcijZV z(Zh~U&|Aj&HvlOMQ?VS_I;z&coE~R{$6HS9(o-V-hPP1fHH8xdMYKkk)<lDJSthuM5Y@xtHvH)M80d`z$YS%k=!P5bliwf{hc|%4TGOv`+G%#jWP^M~LC^t(Mt@_z3 z=JewOmO`DLP|d=P5Y*d_wS4PK_4>$CZu>2o&*cpHSe+ju(|F-=n$a5|wq=;LQc?j8 z1a@Q)+5v?$wsH3qQW0OrFBt)EC|_*ueM@SEliI?H>?rkYZz&7q|%V!G>| zB?t{X8XW`>f%oEy&SBGL<_<5&NOjp8vuE%A%xR!Ih<3-_zuQl-v>?{|hm`XgCSk7R zfUDbji&SvSVi84;(L*G{IUPzk=55PV&H)qb?{_^y)6%)J3>S@Y^K?Qf;izI7%`&{*!AblY%S zPLtJzq6tBUOd)|OhxZzF&^%jv#)g@1=L^fG{Z*Yx3S57FqP0XIZ#UrmLEB@_<@mM| zv`zh=xfEO&N5yIIwX&}zOE&Z8;phv*4WGMS^L6oJe`lnF=mF&0foCAfQ3^gQ&D?dT zJ6?2cyf>mPdUhrH81LJ$Y)- zHFmX!`YX1hLr^FYA-`~}&h8-g$Tb56cTJGbmCUo?EhKHZJBCYp;SV(GPUWWq>&a02 z;ujSqZc8f*6emI-7jC`tp|Wf?z)lE<6zP8@Ej+BKn#~utO)P@yJMk-vl9gPYJ#s&{ zfsFm5o%9FH$!!g3OPl3qRA9zj{|b^{b&1d}#6pLpmcoTac{q!G4LO8H|F~Q!=7>H~ z3+8_i1sIBb#HgY61}v(O&{2>)#M3fPvEn)#9g`8_)~K?IR{f3H@f#5Z$AD;_^LkWy z8PlNWr&7eL9O=cxbTbSeXPxSWUW`x-$i}h+a~YL>Z*;UNix?~zL13I*2mB-#Dc|ZV z^c&8l2lpdA#YZuUXf&hHG(e#@PsD~~4_D#_kBu)`D9QZyWG)-NN4vS(cGJ368QiFJ zO7WcP?z2;h_kw*^Z|v{nU@?0Vk~%|xSclj3n9z&O74fn^T_BsMoF;!V5`@sw6V|1; z^KfD>i1Fwu?{RgcD!rd|1d@l5-9!<*9;-9wOgooV=*=`mIH$#tE2LL1_6D$|h`nOQ z@Glh>hz`=_2lh@kTn6w%GP_K5fqY!a|HMturn$T$NurA$q!bi!VG_1dH0B)mxU#aW zsdFfCNdkT2B<0;cYgDj@o@P!Gg=c1;a#4X*{bcce93iNIn19bHeeJ_>+!?CoaHpRP zygaYKo3-X6@We!0@;}lUkf1+j7cM47ZY%+K!hkwW*P{T%TgS!5f8-+r*iLz#yb3q4 z!2lUU7cPDgZq-ATRRb$c1;~{mvF>*dh?XR5F@HbdilD!3R(qz<5A85JqKoC9gLc>B zcg=T@U){P zdiXAjrG9>oVe~J>js~xvY>U*4&js-%YnQtr{q9KG*XMq8_(C@2-{-YI@uKd#uFIV+UqF+F8^>3JM$ry6ZbOijog5M-~syMyTe^q>KcDAJ@S z$bI4gVG+2J1!p zj%vKk%mHTO1M=xqyXWVgv3!r+QWiTp-LjQhvQ*R-sI>! z+0<^D7~8&P_4?J$3pnX8%ZSCix%cAaSd03u_7rabi)z8SWd?JK8)}5cK%#pv5c$g| zDTn#T@V;+#dESF>0PCtr*M}P@b*8i3Sw0UWwbaw!ys&p~-B4$-ck#?ptLxE0c#dXG ziPP;Bl(Duc5T&;f1lF(8MEX*QcX_xC&;6kNMEXe>qGEiCS!vkQf&)9 z=ZaSaH-=wg_4^ZdLsfPGxC~ReRRVL4s~S>&vwo7Ho^LS#QN26vqm(ZRy2__}G#2lo zl%JT1)c@xA7Fa6YiisC#+8_)i(BU8PGFMCd>kz%YCV!}6Y`y;5wV4ZtZrbj%cA=ry zzK%FsZ+nVkT+j_7&}$z+0`o8ndyzI}ggxEk^pewlB-@1MUp0R*s%I)+;eGUdR|oq} zrD}gE47K36frAo(pN)``WLLr|kZGOdg&9YG;_O+dWU$cSE|zV=ywGbiPilTe*$BNSI?PYt2w*iHOv_Mn-R~r!wIVxwv5H zsou+MUNYD?LhWUa6x~k)$XuSHxUA$E8?aVLQato)KUAo5(qIVzBsR%E6hAP=IX#!L z*_a=xYO5`VJqmZ(`dbd4}xPGjk-_}D=S#}}1d(s_J z`1r|QWt8%{PILPu08z!MSE@F?g%W@5V|&at5?xa`wd4=8#1-9W*C4UMGJU>H#UE}D zbnZwg6b{1h@IgDbMRjsd6%4#Ru}lp^c};e1{1h)Dfl1tw%bwi1@E(>hXdqm+z$F@c zyz5!Uq4adRvdM0S#ukxL)IXmqW7Re5uhewCS;#23DdRZ+K;N^3apSa}5XT#^HWgFH z&7hCJbN{BkL6u{*kb6reaX$F7m&XcE2|&mexZhUo_ePvYmz@`C4fBK)8!DEw6yadqLbBE3w}>`9Agt__5 zEk>;AvSQ#x|6O`v^wze?6wE8XEXS01nh=LXbkl2pUx#>G`;pnf*O#9%<*uyJ{Y!js zKc4CLY4Fj~wYD7c*dM=JjkwBdbMS`5N0UZC)q#Sb(F7u}tBwXM0yUky zt^f6Xp5-h^eEksq$3J<@!r_58KzpE04rFC*(49pmJwas4KBjdV3?PCPA#v>@YlqI< zTN6A9Qrcbh{Dbq(yOw462Niy9O#=+i?yPziS9hTEw1(a_IX)d9_8RvJS9MNObLIWO zN|`YuF>Rm-P@lL@hQhMIui0i~KNPqeeT=?vk+66lr8S%l7$#WE4qWe8qb|X`@aEQVz_6@sE8xf7G7N`_icPF5v2Rf zw99K2^LkwTYz@65)WNktHbPJT|oON&>VOXL7ij~X>6I?xK>#nI+? zf?&>=K+^KPi@(_s5$ykYYKxp}tWv8?%sx`DHgrzkhJ%b`$O4%T=v>637BBjO3v52> z9r@fAJbJ|2Q+=K4C-SCEx)P@V+-lHlY{%;C7o_ed<;CsB_^1~~Zg*U0hSXlkN)@dc z8tB;{ef8CR1AI{eetNzp*1=R|M z<2UaYpbmj~oX37ls+QDPC4srag>XXm+FX0HFj|H1e-B$))FoSLI`B)yEqT24MZIpH^v;p8Ip9|P(Xf6rocBH>^uO# z=8WPb-AEJ?+x(Nl>Kj|dwP@1)<16GZ>+f)mup6XINpv;ircVCzZcv0f>VSRyV+m+K zZLFX0RBx7CqB`0qov-B*V`|#JE}B4f#3^?;{C=FIo+Ed~>=EVKcJNugSg~G}hmTH! z`-?S6Ji>nRYHiAR@tE!U5@Gts$y`i#gumvEVOSqZL0!8Jzzha?DR-BnuJKI|;o)x= zT%#M%wuX+GGI#6M5hv`ah**AQDy-o6gaHz)w6@I!_ZJdWds#wij%dlr?<6n_Ff(X@ znEa=~ou`IR`pdDDhz-DTUJnM3zD%Q-bPQPtf`3tlfrVdHS!Jd(s%fd(ppBV1-SSMW4|! zo3@G%uWcJ%31*qvpM~vY{7FnV?v(o({;mF%2KHUtuq96CSn2dd<-f-Fu z0by@hQg&u}kg&hWQ3r%cBvmw%iE-wNHpx*cQQ+FTFShBUy9tYfA6;&L{7O1HF9ysJB-*|XPVR;l{fN51)-^}rof{#jP< zLdYARRaNo9@XjS@$RD#!RqiLHGjSt2*@l7_snBg1DS?J9a+nIqvcN;ff@tpJyt*rv zQ3KzzUjMb^fm0x?stVS~fv@zTiqONmIth_tETs7jZ%KwfuUVwz7TYD)Cxp1@-bMR( zzHqADTp<(+HLQMvOLxjP?YMZYLkpm4X^xQ7{k5D*=_DaJA}w;E*=9IFHhF%ovr8IB ze|Ec1vE%-FPF8nq2{ZjWRam*$fdtl_CiH1=w;e+$w8?wB+)3wx)o%zxOB}F&meD5C zp>tE(q{0l>(DK>PB7vcbh)ZEI{Ue4Jro@9L@)mA`zjN{wA5s-Nd=nyBN4MCgKRSk= z4luDE==4RU2M&g+`V-D$!0*lqba;ED-8%OTphjn*g1P#iEMc3hZr)l$@N&X5gt=&L zZI9loZ0Swq-v>&zq@Nr%-zo5RWMK&Y0%0XPu75DbGJlnxJ$`v^*9rT6`=`m{QWtH zVkB9#ad`d1)1+QE=c+lIu?61as~euD_tR!E@QaGS8R07XX|5k$@rqv(xEB8GhnO|2 z)|vY;(A@O-`hR(xK+tOyyqp&f^u0L0*BHywz9A(Z6zFm7?|Q0sJUsC>XrE1TiqDJ6 z71GM+o-b51{MT%VaroG_qMAYNn1UM=%bQEyw%i%(^#;%eb<@wM0dlqyvOccf*%dhi zTqDhpyaBxSMMRE9{)`8g>myy6%+g+ioGX8;S_HOqIF_ z6kO9aRX3OA^;OKLz?u!_WL`;FIYN?>r`s^WhcgrKKF}W zti^5a5r7N-_(ha<0av>Z!vT|A)32%+#UV`knOUFPyqt)<%G!F}_VZ$U2FO=h0W$aoMbLG^Wy@mo|t+RqHBc1M?i)R1^<`99Wp z$`P}Wl3N?duba=N30z5D(RIvvS}fKNO$O#W=xFuZ zz#8#nt=&9ojx(6l=#05~L_MW|1lwgeGxDEO@V(-(e0+7rp%45cI z%o)co1s^&C*D2OKTr)+&$ks$Y{OrDAet?DZ8_z}$81Iic{P zix9MVq{>-+{!@F{l*L(@Pd?>yrQ3m6dOCfg!<$cX5p};|pN6YrhAs!-E|)`BE*Q0S ztUm$!R{7X#BtCpYIg8*0c#jY%0r&@5BB79>v%wqU;|$p)Am2aj*Lh*v;huf?1&kx- z1kjgpL}BlU!V)RR%iy|HQnPSEy=4vo?GN2gt?w@X9j@LCh(0eqTScW@NLnL}RIu;L~it9w1X6Yp~I_&aU)3l3VAWbit(#;d+WxQV_ zJ&5~Zjy>G6t-9tXd#;$$QuRVDeCD;f*U@A%J47W^O$t`aLRtDzVSVTSfDc~p5 zktC_V0XWA{Y({n$wFyf?XbUWzOzihz1$Pel;%~&4#|aK_Og7=WeM zSD7>bPbgK{0XM9xlkqrl8!N-X=?)KwFVK5UT8QP7iXCjrKxem0 zq4nX*dS5NYWw4hHT~ZX^#t>`20J%aSn!12l!wfWxq9eJ=*cXp7P_dtPGu={LJMZ#5 zvWJxBlUtmQ82JhFML_@j(`;(Ex;{0{h~A>1lY`ZY!Ga2UoN$|ek1dv zRytqn%H+Douzz>gGifZ~Or$hyW;0?!f<&nPWMFV?4S2cU&jV9lT$$3f1jiRvTfO*W zTdM=4%)9p!<{{q_njAxVD8wgN1nGz*cQm9No?Y)9419K zq-iE#8Oiv$FUF2FC91N{nCK;2OP(&mVSA6~jF$r(MoV?Oj0=CG3_8Q+;t6z{a23+u zH{X`&t6bI*R|y9j+efuf+h+qfCwAs~*CWoNr`qzzt*&X^z1=_`-0uUZ*j^JhE;2J7&T)R73`ez`*%x6}?PhL&B>}4w4UoiP#;vC) zKnHBtSrTf-X{z;vs*>^%UHJr9GatrfkA;Ow6yd|SbtGUPh~js_3*3^zt^Qm5H(fhd z0()VQlc27o;22Gc9md1gf%EArh+$8|J*qjeJ8@orq47%~)7nf$kMg)LhnUalH#4*h^<`lggmX=MiJCnK5cv zw~X_$53#c3QN6OhmV1C>jQfnBPKr9!jLkPwB;0*>MzlEcw)%eo6hZ60_~*Bh{{Vyj zMs%ae4sNV%6j4A0TeN^5-Z0etR`79e&Y4__Nw~D_djKb{{X&6@~()uVd*?g zZI;WsDOxL@L>iW$*A8Ndzj8W}{9pZQr34RgC`26hK7x`c+G!Rv8DeXG+Sx6l3cY`c zy-j$uX;#fK4y9M_{{UJe1f^P6V%u9sZ64Gdo~(MBnu;sxslpVXp#@})#FAD-cM%ET zc+c?<)}{D+t$)Hd^K4zmHne698W06)sSjPDAn z(e|r&{zf(9r!we$H6(>(Vd&Ve3iyMfTUlyQURg#XOQ{`Q7w+%KAdgJv^sbjg_?c;S zr9*3}P4;W#K^xBM%(7r(c0eRC?~&J>^NQvCWv^Q5(%RbCN#>=y84Q3B8Mwe1=hySE zgQre#s&-bZMy4IR>-wIR;7=7B#kaMRP}fTUGM4+!S0Iz?#>2;{uSK=IS>X-4zA#Te zjeN;ze|P4LHyVxLTkDI6nxphX&%JQB)O4`5t?Js0a*&No*_ z6&bCW>dhy}-$PW@xT^5qrNnXt1Qp}k{PRk$T+(`-@Qu~cJd&hQG>&kpGHVtjpI5jK zAuDdA^yoc@srRRNn|t_j^UEYKP{$sDhJQ+y{{U9C(Cr}eOfbMeNX(L~YA`xv`&5-{ zE1HnQ91)1)U8*VP1Y@;wGI-}tBjnVy#2@wYhyMU(s;%Q2ChM=+4`sQGeWew;>$3>lU=i8=x))6% zb)@r%W+gMyPzXYQ9z{>$LS@irjXq|OpkIHTX){F@o!F^~EiDUwtA+`#9lHfV$MY5Q zZjPtzB=!-U{$jn;UDfThe+p{xd4qV;n%Xm*e8wmcO@e=2(lIUnrMHTuFF=0^LTgP&nBnQ}zqNbvvN;6!tS3+q$&Tirdx0Iv) z2h>%)J5XzB7AYI|EPMX|3H7Zjn{>H|qmFwwp{xm_cw{lS!5^)Bt}hEyFRZK3dVXF{ z$m5(HDRW0-p}T+;^H6<2{&iVh*Y3Lyp{VqG?WgS0o)7x6Pfu#Ibq|#$&Y1UFr$#Bm7g`%g6y&;^OLGg5H(>e^So*b} zlP}s3e2#u$=xSmr@@%}bXk7D*ALwgJt!5P63YJf!^C|xIa-Tjfum{4^~vA)A~jgAmJw#dL{_*K9W9IH-qn7FKTwjP01=58BYVO88GI8|(0D)IwXMb`1maPsNG)7qNKFkcLnE8UY-p41E z2N^ZY-CEn~T7|8=HxIFqfncNecm(hd)A*|b4DCiDx=xWaEr7P!O}%{0?YNIqoxMG( zJz6k4MR37~{Cy1I9=RFgw>j%u@mcEHeZ9@Dn+Mwx33D8;0y86(1nkNC*zB3?aa@>Y zE{`J;-e6}eazV~X_0L|k0oJ2A*4-LLW&0GwDQ*YuU!PCPxtTHu8U7LcKz@gs>FxC! z$*u^}qPDqJP#RaXMsJuAw7UVEjy8kOrE}V)(4O>}g2N)HMve$p6;e3+xZuzPVG=E7 zL{YU7*kdP-KR?R4_@|oVK)+dLl0cH$tV-{=DuVnB@CVkpTh{V?L31N?5;w2+N8|Zc z^@gwJ!}e%2%X!vT3g5acWNg7nL0x1j$3KGmML z=lG)s=xV&OwDY{L)sB9Y%EuX*RjXaf4$)dAoyJ0(E`4d^Ys(*rRB3z*MgC){FKa$n>|C+57SZlu z`_}u%)7q`lQC~wslqgeF;j%ho6%}MH6qHun#S2yMV-i`)4`tjwqNmMfYFC4AksD;6 zzDM$|Y+ZVE=*iUE^CEIli)@cUvxidg2AyMYSz)=kjwdVkfMx?D-g@4E|+%#Y5$KdDoe zNj;g33Le&+-&AuD>98bf5+Nj8{$HCQ#>4t&@>-$f-B|}~X&VtpH;?v*D%kIke=1bn&w0D*J#`d43Vt&~!;ADKY`pT7gIY;rlzJoPo>e`Na}qLM_#ZRQ}OfuAY* zkHGZwAmXK6b5qjdcrPS!jEx*ljguE*0Y2Da?xWSJWd$d6byLJRt25gdRD$Z-Xr~)d z#@6mOw;gect*U8uJ|)s7(QjX<46+PnITww?-=2rDKDFe!UybF45|==h5`s3a?4uu@ zK<$i@J9C4@YG{5Zv$ydMu#-*&oy3Az*}85RQ^@rh=aGR+*tE?)u%xWb{SQplJP{;O zO{Q7v+Il1G+I+biExUFfBO~S*|3Fq#CfN*d~?ge)`#nf7Umh%|Yq$*ic2OI;~ zeQN4uVpSnjfCdy`4`Ezi#BELN^thmptl`m*v0i^1AM={$a&=~R#tMZd?s<=j^=b7x zs31~86i=5t6M(gwDDhWk>UNFH&yk~dLDHp zcINtvMI{yQa~q3AB@}Z2wO01fT*bis;{DU>?N(^(S=EGU!NO|kiKNw;%yJK*u8&W- z7xslD<=2My^fjHTTLmI?93CI*>s2i-Ue@7dLUEs%dXGx^sud@eV(j&c-_0D6Zj9{q zH=4kYyC>!Wc831|bmp{CmPA%lm0^&5MLQMs&jmuF=8l)`{{RH<_HlZcq!l(u?MVzVbbjPU)F?-L_ROSE%`0>D&B2D$KFE zYb(g-QgEl{9;3Lfo#06zXkR4=$0oTsqA<+yH&i57ho50(O001))0=-(bK+p*B{X(= zrMSG)T&FCf%#8g9^%aF+{n(#R5i!h={G@-g+x$NY$h(AT`m>u8fDy19XNrOAks5XY`?F_VLXib7(R72#Wq9=@K(pZFDg z`NnQ|(rGQOtQOQTXrU9Mp~+bb5>FleRq5$iejtnua`>v@8sM1J+i}0-BX1lW z9(^k-P~CrfCDrZBl3Yp4pDjL^0ggZz#yetwBGy}Wr*KdAj(I%rKN0v=&xWpMnrP#a zXLOG00UEPpAjF*k+C6Q#6m(0tR z2M4av_m5I20lp{C{3UarPcQ!fKwrdu72bG#n$`^sZSxqG((2{Pak^hMS0}L`06FzO zwdb1E)LNH_n&tq}#UmnskK?Eic+*e_p;ylmFax=bN&0e6O5*%Qb|SJC;QaF*-`yPl06bS!uiUlnw{>>Y z8D4n|ha($v(Rz`<1EK6I&vohi{ZZ6(hy)+Z{-oE@VgCTxa>-QdJw981nb{ZY@a|n% zO4b8$a~wnXo1dqD(zZ3pL{{9rqGUe}HWtQ&lxdy!}E#KI(jf z@c#ho=AwuDHeEWuYHyW#b^S~u?oo2@p;C${uMp=ZwYF=!m5F=uPoVX!ePZQdw_8ZY z3jv&VQQP#S(5=G7CBt=Nw0#F(^X*wTcLwU}NsmH)U#DvKX@9Zc9Z$7WPy2VT_2_iP z`#N0RSsYO`(yVLMjx*_93}~@NsDlcl0<-j}FdA|?{Hy(IO1H`|>Jd7!_>$0 z>yN}$o6AJKwRj{SdywDVJ&k1CyphEvv0{9(8YTyoVakzOdUf(&+9bmPi20OuG&JpV zoaU_U{Jln9I^^wX2Gwsz9H}2(e>%N&r#V45i}%rt%Nm{}9oc>TN58nuy<<#UmX78( z^5;SnH(`^(KSm?)B=)K7H8s1o-6E8p7YQn!Hnwq}rhl)cTbpZ{2_m+Ue|4kWtd^3w zwYXiw3zL=Spzbhp>NAgSuG_}eGI>GPSeIzr8=|=wJdRI6&!=vaQq<#_A%{MB*vb7~CMpkx2ADp!Dc{yF6<; z=8UDwq|r#-92ObJUc`3q&NBa2Mh+?@Y)e>NZ^jZfH}`Oe;g0H(Qo8OTF=%R{P76r__2@#c~$2n`@ZnAHsR} z9qXyMm7|DB9th8WO6th5yx4hDp78v?;D3>(7Ny~5(3*;*xBmd%kMcD#UP9*^w*LUV z#d|QuQI^s=6yo}m*FUbovf(BJhZsLm{{YthRnP((kU<{Csp@v(;>J;ovW@C}$N4pe zWrtXtETFgDe7~y^S{(3b$k47n&#E9N3n=o>)b#y8txpodO}tksIgN^+q5lBukJh=R zW=B_3^C<)$dhKpdYFbk&WB1X9Ut`pMwevY&`$itF74G$4*U1=Refn~y${J1ECaYo< zj@2=sT<}zZxPCb~#c5hHsyYl19f16g=lJ5e%`)J`(Z~^e=)U8e{J7|G>ML&AMu8)b za3W9kK+hkq<6k({v^frf3+txQ@9fO%ZI&cHPw)f1Iu754YZ`ocNxIN&t%Ozz?6pJx}969c|$@o&eH*&c-uwdppeN za9NNAT#@JrBN@TuR(He_zyd7|EER+dw`TK$&ZNni)$ouweiU3xy?*vaXEisiK!nmvBy9fm`kusuFe-yD4_ zq|^0%KHY2{?@l*Ynrf7`K7QEULERsixcRmd!N|@90AcFZ@!I%?=H4zNg6>$O8P3&L zAPn~44wcy4UCp8B8XTHzjc+B=O?Nv+*fP4d)y_Wn0AmM^O>q}R-%*Z9CG#YbLeC*T z#7HFP_<1L$YpsJ&w@o!|bqHGNZC&QJ*)H4$!DL~BxeEY$ezelNvI8^3vfCdJ>JnO_ zM{Fe|Dhw#c-oWfLn)2x+GRpEd-gYd18tZkdhKEa(mdnZVXVjj*rfZQzGCH8@!~yj+ z^f|xosnWwPi~a}somjmTX`KbCiyaB2=H3jgRT^%sNWpb> zFpPPcMxLNWhLW&G*eB!%^(XxL*F36Sl~<`a6{)XHzVRaM8uRr(9-dPZxMFqupXwfZ7lCKo6jy4-u+1@3WML!R~|DT96GYqvnrKTH0n0`>26(i1F=EI zd)GzbFYMcUS#B<7w_Bp*D3R1Mr~{xrr!^w@b57DB6KW-{PYtxv zmRmStUdV%i`1LjOb!y7A-AV4wIZ4UglU+|0`!maHZbNh`n@IlvfeaJ)=CN)q8VB7D z@V@6Hem&~jSjC*iUN-ecGz7Vb5E*7u*|;?X9Vf#p{T9>2jV7vDFI)t)naB~LIRp{e zh~OTao}5>(PTQtq?~3`xaSP-+v`^^6`5NuKA>+w(;F@-|BTH+-!*Whce$DE?%jwgH z6Gh2$MD;TKRB66R_3C!sAhJuirh-lq<|2%J4l$p@gZNjB>e?;dit%~l8~PPF85rn) z&r0_T+lza9+S$vCUVy)-{W1qm|@~rD=8rI>1aLRDQ>A|fFv|F2Z zbo3vFGyXN+(oe~sH{|z6RMI2L*7AMX0R!K$ACdiQ3s+aLnj7Rm#leQ(iQT-}A z8^*Y^OtIY_6rTAV59L}H(k=d&(VTARN27K>&az99mAW6I>M`C#@Oh?2g#4`k0C|(K zKI5VP0PEI;!bH~YvM4bhzw|v%^{yJtrMHvMgzdPuZN*RVFG4?|_CD3vi^%1GJ_(9N z-JEAAdj25w6zW3G=tJ0 z0rpAvRgY#I5&4hAVwl%$pD-y68N{*rfAzf&_||P*lv;)rTXc_T+M@s;O!56c8mF%h z_>x@Uc3=GnRrQrw0|S*Ka6Y1|-$u7KGQwB^GHp}aC#Ulilh)vJ`fvPt@NzSsq4fS= zon5T!34#wQKo(4u`jOk~S{bjo%j!m0c&NROicNAMXr#>2I_9T{7YMhz}#%`1VO!n$7$ z&E{#wGI@!}{0}4g);_lhk5Kb5^2nf%sNnwqO0(gqcHK=8=*S!LKmB_0=r5|~oSiP$ z->Ur#sebPfV!hJ+n^m}s3}MR;V0rvH)`G}$5y8P2Jazv7AI7We@$A%Nm$S#$+#G*V zOAG$wbJ+eoezoQ1RK1oiq-v#eJhd7+AGS|pZE5ytT0AG5cAl(qK4IH{2YQQ8 zMUMVeMGB@)fbr|cuU_>XmFx=~OL1(|eVw-^B*4MvY2$&Oc&MbE?k6)j%gXzS&)z5b z^{yi#cKgI*g~1-&dVdepRBeXZO5~6^2pjb^vf2&C?VfeM<;NS39CgMx{4-EV;ro(Q z?}758oEH5}0B345Nj{|WN^EeZ@c(gl0Ess2i*GCUIHG|6HY#8x=Qm%=e$cUA-9V^ zd5a&wWBS%kmmis_Ks_6G<ds`DHn-rw>if``!0D@K-UZwjO zcXNHB@@Yp#V~?jnS{iC?w%y&yKhm->iruzdmeDVwimVj9wklO$oBP6_y-~=UHCF2N zZT?UB!M%?iFZinvZ(bwr>Eo(RyQ2!dyx3Q zBTAKdbX$aR-RhT16iCv@dMfk-`VVtkf-9XO)Y}b0D|rtxEwIZI{?neA^c6g&^2*I1 z4lD!mEp7hrUssce6TV z(^t!1^;5__yutnze8~cEUNQKJVUo?bEeZPKm4$Kzp5Z@@WFCw#e=$?Xc#PXz7~B1$ z!Tf0ZHM@+)0QW;s$!j75u#(2q*;tB4df7-f4JOFQfR9!8eVc@i>yU=PaQ?+@!-wXn*1tr_WIGYL`mXRLoB zeP>LXEkfdG*D*SovO5BBe5t6aH`WeReV@P91- z06|!HBPDadk32fr9UooZOf1V+(Y zG5z>Y_jB7mhmq`lyjGSmduCMa58K(l&-1D_cP$waIOPezJ#pMr?;8(hZNVbDJ+ly{ zu*%1bH&53C@)Va6$c!!qcc9rapWIK1B${a# zAG|?uo}0gjeq_}4*DG@#;lmHSJu0F%l*JF;f#wOks%W(;e&9%W*E1 zUS5oJ<;x>aG-iy_SJT|<7c^#)mo#$#W{lCAN;!aB(V8-}p9Z)acP2kI--$KvA`3X)$OQ#Y+qCZBX_Q<1hvt>{6l)zln)=+ylVDrLWf zkDGG-8Ln7kDNC)0RU*sYAdfcC$UlY3{se#Zt2;)J#j8R7(JFrtTKb;Z^gl6q;T#{! z{7rL_N?@8fM^s?nl}>RkOk68Rs!#g+g^6~krjComNPL@VKZHrKhp0dPs>8IxP_?S&sFQ6yOGcy-;Hz)dY4`czJ+XT;WqQxubC7$l48vJnb?w8 zouj4&bB0qf9LNo6LAnibWJ!|Gy7mxf7JL;$4-<1 z&W8Q+A4cn+yZ#@IY?;cv)&2F~xZNrHUOM*Dgc)`iY_v7harcE2;Ve|Z%z8zkoISqC9YSMcukJCTauK003 zcXIxvNAs-RT<2D}_Fz9jTK*kh^hr;wxcvop&|LYmzwT^x67QDHt%3a(1&RM(3fi==!4B2)+(K>2WF#K2+>B7;ZHy(HtmbnnS{m^S~9B}#;418wI+Kr>C-4tU_8+ON zZ|yj=*q#j}uyz||ykUl6=!5u2>-443bP4r`X$zRG)v(eq$z$9PQ(Uf2PVaIXxeS;0 zx{b*YqrB1_;YQ{rv?1`V{HP_rxQg07=11IrocwILIBdPQi9nxYO*T`K_*QV{XD^1b^R3az84rmyOE$GHg4uW|LNxOf|EpLekxy~Rbf?cdCV z{a4nmq>}de8Fp*4e&v0pqn`JS#M&SF@BXlpY@Im6O$OMrrgQyu4z|4}| zq{TtO>MK&qU!K)W7qOd|{{Y%QFdx)^oYYsTloKyhIX>c{7+?teDklidT1J$sPL#Qz z>{Xeg-suS~7VO4YV1ejqAd_q0o((I*i7+_NBm60i6Dkr$2sCo(VqC87Yun3)JMcqr zbN+wMYPIYuxKESD1ehG-vwxoAp@w4WP@kLDtcgsq5I`h?2>xUGiptG9m%1NmHpVc^ zj2`*m`~50KCemULF}FGNtkiBqWx8^W*B;e%We*>fH{M=^cOKsKN+6i~sdl+N89rq{ z=iB*I%{Y?WO&R5R`c*e1pC#}}8Akr{`c-RNgKo_m@{N#l+LtZRT$cHOohM$BFC*Tf zV*dbc-5JAh!{6lwpCbuvS%12B59?7w``ftjoPfWe8U9tZCGR9Irp|byG?}9{^@*Lr z=8V#2jMKOanlnk0MHc~cMrkOb;4Xb@0FAC!(BikN4&ZIMlz+5q&CK@ z{RyN00ARuZWs1UVci3V#!tlUTNj$6dU(hlpdiA~B!gJb-<04l6rNy3^;1*)<_@MYjQ9 z3;V>*LXuC)dW_)kdR3dd*)<(T;_<*&xR-fQcp2yit_BAfubw#$iq24X!{tU!#wCj7 zm*hP^yY;FLSnWGi{!#NX7SG}hY1-O4V92s>0H{?fh02khxgU=eM(W02G;NKXZ67lX z=kZgD0Ould&KUciqqz0y`PKC#lY&V({++s?!l^+Md5aqIc>|HhAD8D^(AnJY;ubm2 zA=2B9$e$&N%7* zd8^HE(uG0>A_WFLGEepGUcN{E`yZd=Z-)LNIPFvZLbpHfn%VI0{Db8G0IsL`3dYrV z)oy>^{*|@i&TM2K^wj?VAzhd)GiiFu^(vS9%k^h9>qRLTVm;|A!=J|ePDyUSec|=4 zlf-8haSvI4p{{Q@Al8<>aAwq+G52B{K=b{C<|TM*hsxq0z0I_pCSEI`N$L z{C|)Gy<|xKU95J|DK8=DJM;Z(&N<6^CYCjQN6Xq)&L5e`;E~v8)Z_Bab^4X+X;#qN z+9D%k?+%WAcO8b`&8tY{TMJ z+xzQg-Rh0O{OUW85<4kdcs3vJInF-{!=k7~d2S!=ayydS&RCwL`qbcpG7d#loBebB zX(N%NJaRjVKwYZWBb9H$rb!l0x_R`bT>k*8{Aqz!pdq4vHZC1{k5N<8A0rGqRE(Ii z-NWV}`N!T`lG*SKYEr2IClW`;MirYj=-e?JuLs;yVnfIVf&myb1CR|ZA(c(LDJ3(to_5T3t z)w+f4!#?50dWub4X_3sLMe`%))CznT3cw`4gH&x4ke$d$9@QI_bDV8G$754&gSl>1 zESw*ic?PMo7i^xi_~t4wer5XeOgyp05mpAvFu?B^XqXT|4yV?ov4TkEEa*VmMUfA$Nv2YoWSOjMzxex; z>stBZvM!EpJ^t(FXJ6qrd^ms6rXTdv`d2?E6G{H@{&mp!Y=5Fkf9bFE70*a> zE1y<0v0w5oq3bWrj;HV;^BYAJSB`R>E|dQNASV9+f!8zXT|Src=nQ?NKhC+1)$8N` z0NpU&kMufg{{Rl3qx}xUOaB0nRlob6*0^;0)!b>PZj}K%0T?yIDdZa8H~#>0!}@-R z*1z!K=yX;$5m>`)(ptkfalTP1Zp!41p#K050Q2jLy?X*$YIhd#XUmRlsgus$qdvS5 z(zA5)XK@rOc{GuThSmugV(XmXdLE;mD(%hJ+i&H%+qce_a9s2Up!~SvzI5a|5iFaV z_m7c-_m8LMKj2jquOk&cYyHvP&;EjOPgG*$ZRw6ZIQ+-sO=LJ+pl_6NcO3r!-#kzT zO}SxwnBd{D)1D9E`PXM0mQr|T_ToE6OS@UE(XJkLa@)%W!r%oTDB*MUt|~wH`(OAM zVd?oF#=84R?M{h#Zra71Qrt-dfgjHKHWnl{5a9g7?&NjmfH|#RW;aneIUo|e_38e3 z=90?bPOrlUR{4uLZ0FO`qSc1k!iNq9;kW~a_Z>1n-odGCVU9a-BHh66Av>X6`{Tj> zET~?8*(SX_o?N)vf7e554%HFP>kExmZ+)l#038*p;kM1R>*(PApZ#jj*OwZW;n9#E z=0Bxb@YJABaS{F{3_k;p>s{&lJm3D_{Qm&q%8$E=`I!^0%b8cv*nYJgS=3i%r*gRe z0G5RQeE$GitzJeZJhkT@&HiUKMQOAl=xTfEQsVYmV>?ecLlJY#R@%Yt9B-{r)iqegQ(ev~o zniDgjZZ_wqPo+yxNTwN22P%ItQvw(QI#K~>qKW`1h9qvPKPr6`0Uwhe_i2(w6~h77 ztxrfsde8+H%05?);%mmzsmt8jjI7JKqcuiL z^%)Vaea}jpPttY25I)^H#_H&21jQNHzgFl!6J3=twBe@a&Z60B6J5m?Ks%eze~nR+ zN$yqT*nGH#<|?NM3C2(3fnJ&6PlWzvw=^wFgFCrGs0 zwZ6=M_*0)`e61KoelYo`Dx3Zn`*0Cuhq$M=6{vDD?xJgX*A z^(t}tu&*LdnVy9u%98AlKJbUad(RQ*(Q21>;=&2OXb?r_JFoY?@WAx%^y09*W8nLr z2I@%>x)(7&`ni=h9Doi8$?QjZ`Zq zl|T9ru87x~osL(BgQnk8#y;ORbCd(=P%{^HbJU#I(tZzEUf0W5qY+7Ljpc*^aBcU;4LwHeH>ASveWM^jl#!nqy1vA4y&FQf*Yne=qsV)Wl^;@XHyL{m7UHn!_!2z zGA8x&cb6(pIKck^3g*Gd&33*#@C3dNk_)?Ahq=>dZK)$J9yi8zwm9Tx2abo2UMN>= z@t)rgPL;Hc{{Ryjl9Gz2C9t#_D6V4zrnLRvh8X_<(7|Oe!(; z$N1MTf<^~Z(!Gq+-K9buqxqe9jUxr*bg&OTBP2ZC~H{nfCt)NU=+ ziwLB^C$2hze++c2`v~B>juoEeAz1!b$Rw4{eo#7`5-@7@)Z*^`YlQ?Xk`_>UpW?OrRWh}2MHr7TQjDSfXj*Y<;TUaZ3daZ91iv)2bQRPaO3b@G&z|8<=37KUM zIB}9V9R3{-<5LUiz<;0DJaqhfeicykKPdo`a7SP9q&esL=co8k1oF=FI&V2W7mR28 ze;Sg-@p?x*f;#l?{X11obB|u$zvEKG#yiNHJO{z{&mV zBocapzsvk;zJ(^uS}=M#vi_O=m8Gvoy2W1{qyGRtKfJl>xsE?#zj zdLtDZReoZ1IIHNP5Gd_ct0QRJIfF}{LDYc1nZf-Dpbl-E$n5R+n38^`lA-%Td;U~?p*>IK zR7o`z586}xugaQkhh#sApb2D*NVq(D8m3gM5PFJ`+_~rgsL3pHPE8;yoW}muDzIV2 zBd+1^QF5oQ4I!2&sMbJuJQ|XK5r#n(3k)zm!l$U^18#jN0t5TGLk^AlRoEp8**zPr zQgzA^_|puHvu<(gK-r;ssz{J9^dmJ^CkWd~`A<)3udwXgHscxl!}(^MB5ZX}`}n`( zMZ(3+>;2*R(dH-jm-DJ(COPIl4mpv3#*Znt1>GJ<{{WtY{AddoJjDL`{&b#de|>*C zsL-;ma~b+LCY||{{X(fomUp@+4 zxA0oacIuK@i?Nv5k;A$k4mT*qaCpxLq4wi@G*PT(eKx{17z+y-&Og~0P`{H8YWa>E zc~qp)&LeS#R$ah@>IfCm+W5=F5HFN&?dRGD%`6N_{6GZs>T8y*DM{WZRSJ-bw9jl^ zQr^ZXQpP8eS7Op!+#Ixx>fXM9Z~)){IIeR|c{P8E)_!X=hfcAU<(a>|CJ+z%kuC**rx03-px;8zLpSvUAb>)IlJCydv2PbAl#{7b!#P zP?PPrrEq@_HS^@hr%RtY&l14IZSy0~Ko6ng=tre`?y0BRYx*6{gy(go+(io~I0vB~ z;Nbm5T$d!>#H6ZHO&RyvbY3U$ZN`})0L=l2G3R89_gnJ-{VV1fqLSX?NG4K}#Kj#? zRbX&O<_&wVfxJOArLESRdVK4RK4!I_X~`vW701*Jd*Zy~;#@WZ#j{;l22*gNOPGil zjzgZ~``F!%y-#}9gt=tkb7G;-1yLMzCJP)6r-4gWbm+Y8PTD@8xF_g2{*~Pr^GQW@ zI1;)xzJIUdKK zZ}9vn`X#DKYjhg!(jzoVswJ2y$Y4%?0BOcE6vjQs`x_ghJD2JYrFe%q)oH0`aIYMq z;LqjA>O(50%7un_+}%1H3dxc}3WDSvqkzSKL6KWpEwY(pxO>YuRpOE$vd$Hlv}~i? zjFHx|Z(=rcEGB3q!UMVqiC@!<&<8$9Do7kQNaMHDy>u3~IwUaJ+v-B>U0$GZJW_zR z!OkPfK zx#ppmee?a?^ZnjGN&wT8E#{uXAL|p3um1q9xgOQkX^*2p8d;HY9etp5P7RL+b?y-qSZEAjU44hcsr5oG*F-u|`9=QYvj7Yh1y&Ag{8 z7%h+XNICxiKK0HHg1IvZDzs@<>uW!eHQJmbKbPEGfp)|_`Kf9lG++Q6aZBgN{qbH= z$Y^+VH|yo`krFe0fq$)S_?m6DP{W>HO~>d5{{UQ8Uxe3n&E&p{tDmVS`c(cUeb;vD z{n+#QpZ>KW^f73nie!ZpQZ{kMGw(nPMMPv}I3t=2htNq-hz)cy#)X@ zfnK7OLu2J{!ki@sf+#yMS$ctYk2lkZ@CX@+c!6UWk^B(W?`Nv__{;UA4}>}~HY zw3T=+BUxi_w8S#3G7bxR8cl_cG33a={Oeo8x^;!^$$Q;K8*PMnalSrt@4Jk9cdn2A z6vvML0O$_C_!Srb02N%OyP#@58r5G+)nE`^qK0G+t$;>HDoE){_Zih{8X3LRJh(L| z@QNO1WQ|vM@Tdwp@ss#^);6JMbEgurU1XjSmuXf#I^wjvA3TqyO$uocUHMXTBY9wr z+~ejMJq>Ni70j1VOaA}}`~o<)9iid*n2ZkH04?~D=}Pu5bBjp)v zc|O*`nBzY$LBQ?xKaF=6R+kqrNE5>L{%JxHi$%f52aigMJt-}b2mB)I@&EyO<2lE! zO*@5-Hba?XU$r+~$0c~j;p%D5+Yy`XjBp9#XZTlYiFCJ;%ybC0vLYf0A^AWoPv^Vz z6qjpzaTIZ;gAy;AjUn?P$yGTZeQ-Yv(zsaSqfn75o3aQT;HO^wsi;)VDK~5}h0a%= zGwJVMf#+O*(7vPo+Cly`Qo=jCcq9{OX)DPzl9D8ZkC~1D$?Pyc3N98nnb~s^{i%** z8TprtWap=~N=jh=0HwG6_P^m>h0GTd-r34D1X$o_XI=38*-{68eAMo;$s3}0Z8w!5 zVW8vnqT;c_!{vx0{{TuW@(wqz9DOMip}2qaqm8T1_5T2C+x+IXwGR=&ra-n4={Cal z694eYm3Xa4{~scA`Bl^IGenH%$bNYa`jBYWG1$J`@m{7W1U*0@baP<>ZdYul@o zSsi{=ia-QGNGbvR&V6~Pb-xGri^HkESJCdRW6nI*T&92CT(9d{iF}O z272StqMax~-5S-z)Tpg3j;>D~_<{&bXIlGOfx_G-^ZAayjZnVv4bH6|%|ldok06Mn zkIPSNfI0kYGepsEd_$~T=~{GaCEWXjYR(iKDPzgwpf%Zl!jkdUKjaw){sl+=HC&NS z_A~ai8nyH}J6p)@WR7Sq>4E|2dka~$ToH=C-+GmwBM>67}CRO25q(oHFz;pIJDi+*OMMdg3aE5^pw z_SlKk?%AD3%_h!|MuNZyh4`QSBaqQHJhkL*$MGEJgN_ABd1%^w{I-nSnh7?R$6h+) zw_{JzEdKzsO{%QW#1RZ~nH(|NZSgjVxK7E zcHh&Q0H=U1R|+t95H{mHdUvjxO&?1>8JARo{#%RaUfpDi?EYME`J|1zna66Elk($m;QG)9A9$N(kLBx< zK<~i(>PtA*=ITUvw*^Kx-Ud2%?fBC*7~U&`6Rz15vX%E7AFm^|Pood`m^m5ZC(k`P zckTGl1#2k;dW_KR3L7}*xc+=*s%x+jG;@K&4Xk~~{{UP0Q*N1|)E-pM<&=@{{xz$6 z7`)S*Cp(vVeR|i^Wo=^cH878Ls{XxyGpe7zO~B`@?jGIc3JLRKXviMpkJlAg9MXm= z!GXaCAdb~6aop+`iyUbs#mvuzR8q|BdjL9`@Eo5nE9i0F>clixx%fNa6HN?vo+`O$ z_Y8|0X5@dq{=Uok*QDBfDey&_fggvhA06i1DgOY+$*k@cK1;Q~y0P8%X^eZZxBw1u z)2OAm)Gn^%5>GDn186%ye!~isF1#@E1hBwvt~DNcwf) zEoqYK}z4}q-$^Gxrt!p|qp`dD$X}X=W+ucNP%H0U;LGBNz zsywp}q@F6SD-wO8Pf__(OwZlV=U&a=Pl1!_5yPnXq2AsH8x5 z@~%@~_&?zdZV5zsWO{we1F~x|=K2h@<+K(~4tD*6af^~lc>SEVY zjan%)Vsd{vrTX*6BNu(s>*nP z;b0suGP=3pryS(;krs1TX7<<0m7SAcsqU=h`NGa}i?QgcnHU6>{gt86p76(AMn9`l z6PPj}T3M?vLVxQJh5o56&c81+zUMZi%e+9kBaDHKH-mf3?|vXdz8`lo(;GOdd@_=N z1QL-jmL=7O$fw`FMQOg7Xu9CjkmRq-aameI(Sw)1l;9r(4KY!@Zn2D_Qnog^7rhUy zX^YEit_}6H2>sbl2kx9`yoSae1i~teviTXbb_FQ0*>Iy&INiQZug<~U$M9&bP6*Pa zyZzG%q6;NQC6Qyr_R_h%YPjExH3SaD+i#hmhp45Fz_O6 ze0p{JU6|q_r(1;K)Y)i>9}*AiFK#eJyCI`63ev?hgF3 z{q+aVstTn8jz<^z7&;!u$g>tY;e5$~;{B$b?j_AL18FrT&_)IeL8T>K9Bl8+MWQ(LX`mkBC;J zh?RP%BwzA@7>x?o!6Vo8Lsrq^^1_5;o`0Yk*ql{CU;}!I6?{9;GIV`J`Wq~R`So*V zYTh%VgC^tn&S-3$3OCt~qDeaq9xl)NDpG%a-oX5D@H6FDEUf!)9HWR+&kG=#Df*`N zyeg_y-S#;$rY`1rY+5|w!#HUFrYA(URX0b)*oE5RvG@2wmtQ?s|FroF3et699ZEWf zJc7CWKT!P(0_}Nr;&F1f;D>ra^Bw((rGi!m>CfNz)|Aj)7bAu)pMpu)kdz7-^{0Re ztYnGe_jOjQQ{_;>irs`MKr;NUI@X)_lqvQhu+^k-Z*?1tc4cQY-UUYO@}?_&cs7Nx zK+6oX&+qH2dmQ5=U^c&FRSB%{2$yY>2fD^aIS%dtD#7DEG|GA65Y3CGO4Np3{FCs6 zPdF*$MCk|pjh4k9*K+ekD;?KYrR{8uls-(L6Nb(9B3v|9`pFH4vChM*)R%4mM?zg-9D^K)!vE?crZU!;(u|^jP4`>2T2O%%-H{Bh5!bvaN>VH-E zZ2$z)Qj&6B!0NJ<$TkjiU?%Sqg%~q=4uW&OKTws^a3uVFm-MHGJNQIN2;X_ue;+*6AaW zS1~H=z6{H^{a$af3f8kPuXwpNK*S|1n|4=);`|O)?w#0j5A0D132qH}ZC}{{(L5_*Hdu=Wt5ovw`s2ZV*FY_K8AqwqN z^BhDAHpWc4M1P`;*Qsq^-}5zE~4&-VqJxS1>TB-XQfnTuT}mSlC|6MztDX!74n~{4Yjv}rb)M5O4wXhgB&`w=$Ewa7{-Gx zL@ygYdm7+gtvQLSA_%76b*=E*djluz8OQs&9^a7O9%hGI18SQ%bM(ReE>*yY`1HDF zV}M-n$emPY4iI8Yv80@?^chE9Kq9f_X;ABG%mIS&vKixZ^#vspfsp^_l+pOyGD z2eHCEvh0(susr2bJNH)$EwsHcbtw^V6&+z&fi$(@vuo#0#7EHqCGT}IukQZ?{hZC6 znl9WO>1tW1@0`v;(BN}Lijj&FqVGT%JYkN|(x0jLd%=ZG9U%nD2-x&tph5t{(4Fk= zSDqFLHf*mtR@vyT-UYyPZvHcIJnm0)L0+U4oDlW|fJdy%XVp4)AyB9`osVH_-Od1; zun9@Jm;LEN<|#Q$5)G#_^5yI~DqZ^T?9n<`jzSn)W`gkCJ8Go;F3&(a1ZaI3M0|)n zg9DQe2q$_VN?dShinzADc-=3x!~T_?s%SUg)62uY^R4RUP>7^l+HcsK5Wmi@+lbLN zhW20#nG;{DR>`8g%SNldFY=zg{{~H-{VmAT?LJX@$r^D^H_ZHX&-KOW9t*(34O{ zbK+PB{pFBYva%F5Y2$TdpQ%HS8HXwLYZans+9bdCF~6UGO8}vW>2Ua_BLWMi(45X! zc2YlEG=42cQK)EXx#%{+s%xOl*Sufmzd4-h)FXBUHs$-TAb1axdl%-R)Vu>dC)~xR zv+hZG)z=;bNSv2u+;c@u;nwD|;5L7gG9H(bUD30Dpabdx<;QusdxIdqyrgAl&?g~a z$fALTjnS@m)B=>J-WUZJ^#*VT!2A5_tRN;!Bo@ppKsY$hJ6FIvOqC76ZHL5tAD;+c zd6A;`qRi?vk+Os6Gu zRj*bKRa5hVj8)E$J{!&NuP}Ns8~+77io|CoRi3SM*ge0yO)PVF*IY3^(1tmZTtMzb8m*X~@}x znE7wZcK(~-?4e7WIvxtKqt3yr%D!L;-`(JgzPuaJTwunr83T<5~>QPDg7~JCnqK< zzCrZc$h;rKAlzT^oLG7@d<7uU?#?u@0?e5)iZTo5+Zu1 z-2t;-Hc*0-6L`IMGG|=T#O*G=(Gm<1AYFuwu@E)hz(PdmRflfK)!-z=SUsaL;yf9i z?P27D7}WfS?k57}<9n2eV=vWK%2tC#&%yQ^2hy_C>!}4*Lf~)e4WVKKx6_j0>$jAz zr=Ci6X(Wa|^On$~=N!{1OU1;MiY2Z-u-p<`5SHKg&tuS!OisCx7ug*mt8=1R#?iFS zIHIksZuaIZ_VV@0QydMiRfsBxJh_wRCMs|t!s5!~GfRjoM2`D1&Yq)DSmKrC?&0*( zJ&HCjrRr4di3ly&vx9@9NyG&5K~`^u zy`Srwz5)}H*Q$(Az^*mxAkWO8k=E&3(Gd583O*5ukkkIByy2$+y5@; zHo9>KzN)9A9~IvgaLQsWxsM;m5Oh;#JeJIq$?eWs9=61jLWj@3-@>}c?nx_A)1zG_ z(Lky-k16-51JAccF9WuR-Dlsdo2*{wJq4%unyK6jbf}HA{S0`8zCH2ZPyS`1^h?rW z^G)Myrb)iTG$VoD(}+oHU2a79tK1#$)pMZZ7k=u;2Tku=Y`@E!6ySA)(aSQe-~H)v z6^)q5n3-7EJCzr4Oj3TaT%P|>xw^P+NYIHU=+D_TC7~^d<878S1#4AG2PKAUx1c~$ z2tsCrZ|Kipt`}nO2%*{&k0pGqD!$;4mZco8(NH-n#OtH^$ihrEG}4sOH`)Y&0v0-u%d zx!TPzl&Sl;F0dm0PQ(q+@97dvv|F7lt+k(w)^Rx&w*m1g0aoXI{;(btMMXor$W5Vn z>Z0nif1nOWNQLhvZfpN-W1}QsYP!9rq05|$J14ZSwIP&`2l~IQ-1D_W{r7X+>AkV* zN?WSUb&Q~Mh}-N;5%MzZ#0t6i$4-#aHw!@s=ONZSPK(yaR|kLcqNk9(F-{@v(5Ec} zhu}Q8Sj<0dy@hvpJc0}Hj1_(ER^!&GvcbC7+tDec;#NM6Vp;~~x8ri^P2Vjz)mvIV z{7)x!KQkHG%(ECskEW!=@UL}*J6)8m{2cPKw~hNx^P0S`<}?hycMPSo%czeEdW~c_6Pu$KQr-7pNws?Q~&By*Kx~8 zb?4Ck362j63}wfxJB}Z@5LjE$mmyPYQ%{e3>nENxWYasdNw9G*0C-lJ_P2PrK>lAm zH*lywsK-`CoNq!-b_@E8&e*W}0*h}ZFjR2cTtiHe;gt2M6K`GvCC9|v?V&mHi#~ss z|IaT8>-2Vlbi-*vAn2{rdFpe0a(LETz*^1>dKc&dLO;zx+%qDzI6edKYIG=Svf0T;baRUn%tXC1+`Bg=*HTK_!m z64zrqhZGlRc3Mf0J!T1SjUZ4VE)|{UcaeV}ohMoTrh@knQnl{e+y%>%_6>YiLi@mT#Fd^vJvua>_be zf?1Kjv5l(>h-+GboW6w=NZw`1vp8|-n$IqBDVn#}ZX4+>BUf{JPV_aN^tr2KRkkb- z^9ps{+3Zyr08D0@kM3eT71j?}O*`CAIdJI==wQzJqp0AgC>$>Fnv3Q?mVxn%h~BFE z7&8@-HhrvtbJDUnSN((psEVmHQEweHvKqCelB|>7@=sKwAK{DCWk$`e|TsVnS< zkLQ>VIb_rv&n)bFFHGn`ic9FvWpmc~AMDP?xs>e9Ti1<&YJI448%c|9Z+(X{VC3&m z_xejAsRy||;FUpPf9#1UYH(%`kr5Bw_;J<g74UXB`h)u@AK9@8VblYPKTOsh&zrxl9HD;p zAn{L#3=?d0`oO6GpS+qDZP732LB4`Hx5C1rbzZ-(zoK*yNR@U5#VaYAG91hi=sJ#) z38LTBN=LhNAKOTPC{!z(>3%Dc468Y@=4rc4yqv3_t~#u=YzX~hldVsdn49#wcNN6* zr}gpj6O2-l;=0Cb!F8TqN}(?5kqsq3gVXP;SF){MAcm3SmCwm*n@M}HXSOH0$4KtS zpaIJYobvPu?qrhv%-z>pwZN}{m;I-pt&il(ffCM{JgT^=NL9U*zdD%(C&GUqYhJ#L zgiw!vpjDa`oQA;(XKxU{`Z1$#_>7WEZHfBrBo3voqpq*(DVDF#S=L)~d%77kzZEt_ z2C7ShseJxXO>{Hd06rZdU6qHJrL(&&vz;)nMAt>kR*fk-JUsn-@DNvBd{YW3IYMaO z@#OkdI|Zzp$XhztxeAvONB1}s+-|PP(;j@~u=L{_a6@&lw#Oce$9qD_fr;%oc4R7{ zyxoyY|4H)8%EiF%=vdeY-vL`q^|0WOY+;*+;t#?ChUc9i^2go;WmhuJsI)Bh+r~oC z@M~jD&4FTg_ujEMo`e&qu@@bfjJYWs{QIsHNqCEg^ngbDK(dJItM`csWW;PC{#b@% zFmTiV;CZGzE2LKRF&0I>M#qsGEq*z539+A3#q4wepKt;w{$f;EneYT23faCq0^&%4 z`nk6iEP~14Rqm2vuctV$4c^*)KQG5!@|kq(Fi}$qSJ$JyrW|VbEJ^04QXg{=nFQNe zW$uFVw_bCK3(C8+Bh!U0p6I3YM@EnVUc^;f>F#irCEn6e64Q1e&hWeNtAl`7*Skj2 z%r7Vi-aamYhwGlqKM?=fO#S;h7mTt~XrA!bN$w|{ctgNiNdL`>pOowWb)OnktdOwr z2%%*1Jcl6HwCvSmw&|FhQ20{_crJ=+1k8%v$;q0G9&o zw6fk?LU~Tc7{pqNCTyfh(u4W6;u|a7|JD`sCgrUC<+3*+vsaVHo&E#iIe|htF!TxIg^B@K1|MvS%!%tIBeTW$|GyQGPab?IE zDAx5K$Q3SZuC9FL$DXmzf2yoBMRBz1)bSPF5|e5Bx7l-oc*h+$L24Mz>&9ug82tla zR5y_RpAH!(1jvui;Ma=)P%vA%q{>b?b6UzAw)#?EW6G~NQ}lEQ_>ii3;}d><3ImRm<-#jQQc8Lb_X4*plHuJdd%fySUPMM((nQ6ISW+5|`WK~kw^S(@|WtE$`H#r2fmGdQV`$SV|T2|0xfkn?cbUOGO z3{u8$iK5;e_NWkC=vFG04Y9?}j%GibwQR#gcvbZKymrBzKlPHkHpltUUYNw($z^S? z_exz}7fq6+*$_(X0)IA{&idp=tf2JF+e>2COz)(A{{Z}`GM99-K9nm0f7SxDsa3hb zJz)uX(QB=4$I+AhEKf~s9%z(5PtkKu=-DFe1krB1L&xJuxLSzkx-dGH&oMA>!1JSW zItuq#gpk_|`KwFV-Zj;XTWbMReh_OG%S2p$5bE35%=ef^w3!$`7$EW!Ws`1Mm*y$J zakRvS6rR0}lDp_c5q>%Ftk&LwlVM5(lTM9Gu($e)1MN<%3#4p;Sn5kw@U5?L^zP)6?10P1JV!k$iqpC*&56H11paA)xH^EB61e~ z%m3S=x`@tI@=1cf3>H1Y_J66_f0C3kx@#~iU$`60ay-&K;#9DU^=$Zg-&5?E#Li&j zfR0&$b29d_%;Qf)V`BAm6yC1EjorOjHmTY{%$?-sXP7wzr)s%E)%qH~dntd-1e;E+ zx8Tcj^pvbhCOnlriVS|nR-Yq)OP`EX!9LNgLFfi($SZ9$)kf>FHS*}@jZa9@Ug9Sn z*amW+*dWV3y!CayT%*>ne$JaRD!t=hIl1_;UuuC(gx!TO zpG>M4=>^+am6;fK@#v-&jdfPzJsFL_laqkH)OPk+%lgUZk9M2wuc=fzyj3aQ#J1;s z28Rbszvk2aNndlUC_9;t`8jt=?tOsh`v>Z7srqY8*mN_m*`W+tS7~W0=RCCqTmdeT zKM-o#kLK2;72Z9?7_Jus#NX=hCk~Ik^pem z3hBJ)r)9pW@6^)T*Z!W+EA{xFR_&C;VPR1eJG`35L!K)R)vL!aI!`Qk_1 zl0t%5cefh~RhE&>xYB7oOFA9&5oXDstT=Zd(>ESb(`%SK&>3k=83k!Ah|UIuz&&;5 z$IYe>ti$Qwd8Ec0^ppk3@4wYLp$V5Rt2o{Z!Ek_|eJZ90?YDfGY(*2B5?eNz}@e`VBN z1py$2zqb&-z_w9(1r3XCSfRKW=Ggw#sw#IrXii|CnT?laz-Uf(VrOzJat56I9PB5R zSv5Er{iGic$oWTi;*rnKSWlS0ZV0``0Ho3Zz-aOC>s@;<_*@yH1*;E_n>kX&1l-9f z>PYb^v>#vkZw{bRQz*OoFvSDAGYjxirPaD#3!vmN^zB@^8*cFrM3mxzwMh}DW#6n; zTT<)d4OA_h^9`S-wVHZoXsY~-eP6Fm3e`tTH+G6BQ9*E??qqW zkNbU3*|_)M4;5X)dWR{EM6JfOl0P*i!p&;#?R$qEWmU@DfX{aI9IYOW-VyFX&jOiH z9C<~F^SWpNzhA_?GuYzkjwiE7kOz9fCISn0zMC$AzG?sqm=Fz^dDTdLvvN=DeYB-_ zzjJ}@K`T5vMfok_*H_=09%=ZK>#H*F(_1A6lc#_jt*kV`CT0nanmwsP3b56EwQyH^ zJo*aF1YDvAFd?&jf$fgno)R2Yw2RSogvCQ4YgmE^QOBCP-N^4*o?^Z%kQRNmk~K*b zki8%rpOPjmw4i2@&H1S4L8s()CG@TTR>i`ypOkgumI^wtOa5c%oHX`5#p0w_5}$3I zP)lu;1C3KH|84%)PTWw_u6giA)bp7Ja^NZ&)H^H=1J>^{wT7M`$-&5rH``sdZ z)f)vV@Sx6jTOO!h2wBWtLD<)eW%clm`Yz0VT#z2SohG!PQEuR;&K0W~Ma<%sI62v& zw!<-9>9`#bV5+PYP6BC(<9Mc|qGN0}skfMsrXrOs|qYQ#f0M9ylG zDO&~-9m3XzJP>!+JVm`c^k7ex-EzJoY|>r>3{KGaF5HMqOE8ARe;c7mx_MqM<1B5W z%xT$(L;M4owPz%453%P>7!gR7&M78Wvl}Q7=&9(oTLh(sC=JEf1!-D_1g?68bCARkhf* zjNgPRR4Dz&+S7CSL)<2N ztpJ>GAGgma&@6M@4;os9MdH*jRW5!m9%~5lAB_$n7LDyXry$?=P%{bMN&0?&#H$&c z51OCehOtc^UF%FPK*{|w0G*0`G*+H6RNDI8jy418T>w@O^I&u$( z-@3qZxdsRM?^9U8=&pzn8$7eYEP?tB$5~03fL^L!mjaKRoYxqmd6?GHnonJo*$R0E zc+}dZ%o~T>|*k?0|U-`U7gxD_v^1(ChicooauHVbsvca(-0=?)nh-0uspx7dA6rUx}L!Z@E1W3;%1>zwE{3 z{9H2Y<9;j?C-Z4=ZY%nR;}<0c(+ZY*4R9coIr2z;*6Kg}{MVW-`5fpE2)feM<5$%} zTBcP#SNv1Ve5N*kVQsqgaZXwdDipiM_;Od$N#tn3cqM=NVd~kNuWRjfUa1@kVFTt> z&aa|J*{h#Nv7f4zJk3`3`!7*!hW1mLPRjd5rw0`?E8DYEBSVtrIR{wS0a@tM6T>mn zB4SG3{5oUsYC!HSG;b5p+ec z(h8p52W;NAnSu-J38(^of6+XbS4CF_9X8n$%2sYC%0^Q-W9#*@1(l2i^_RTmTE7Yn zX!k=^x7pD@c1?+c$FNa1?MyYK__A=w4X>ZVUZ^UX_ZB`|dYvkkMK-+zUgxB&AZ(@9YNsK9uBmR*f2N3|rqX=Ry}x?c@73sF z8%;I)$LvKw2RwgFkr4<_2U@<745*k-0@vH$nxyvKZ45MMe=kX-gXndlD3I(sLS}j6 zDcJhx+9v@78WkrR3!A%{bt=HwoD_!9c+ZC4-x(t@ukZCqBw!PfB_n>#Dkl=Yb7d5t z^uPEoE_jd7xFg)c2(-1<;Z?WG#Oe7;Od)!0_pec(_^ zxVFFnfg<7n$&=ByWk9g}$y)ARIm9q$lAVY@bApw6YqA0hy+ zAeCFXa@NJ`0F-mpjmFVL=y=r`rG@ND)Wv8SZDHG5miFk(7X8fDgn&``r9n6e@8rq?;C+>7_J2+hMePlda(Ie z>x04qCq(UT&HZ%XNn+S=Hb0xoxS@R0RzD-sVyZUYAn)~PgdVU`2v&5M3#34$wJNhfNX4$<#RXq(VG8T<6f`tPo z5X*ZE>jmHY>6ex&Raa8( zsQv8*owP7c;DziAfp+Hxg0epm;AqTL^c)VN2~mqe@f-&Ep8%^J#iE@CC3@$Buz^Qq z&K_L!^LHia_hdd6=l%HnJu38-wfv|&YF*Pl=tW3-a-m}DBHZT+y3nwuRkB3>A0Hsn zcBc`*jeu;;TY)j&Gs{vkNlvzt1GNS>T<7){XT$lCZl!6)n;Poa*yK$3XF=#~ifi;N z?!ztgXq?~u*p#@Yga6?b#)Y7xp1?miAjJ_g^Qd}R24N08E*W}-0A$fu;0lmxkawuc z^3$H-z=R+{tZsuK@5NU#`9<+(SLF-Y%3}nR;4i}(D)ZuLPkE_il(h(=2k$XhUq7`t zc&I;QaQ@50m37Svp&|0dr+FpVhYp&|M&gmr|K2k3box#RuTp=|p65&_V1eUn>p&G) zEd2rA8L&;L67vJkbphYlmMe^(hfa`>xoE@h=XbTQ@=8U5r}Hju1Od1Y!JfnI<`jR6 z!No0gDQBvy)lHD|(`h|)MFbk03hgym>p#R^`Xs++KfKOr?&s{~DBMStz zT8B3btR$lNGNB!_lu{iV_9ho8U72-x|L6Q(12Ej-9l{nvCJGp)S69;)_K<6a=dl0W zFvSO2_`h}f4#g=&cE!fefA)DfZPBiZjrpE$)qE)5v9#AhN{iq0(Koi_SsgG)BmHk7 zj~_u23pE~p8B-bi_1{NTt>jrIFWM9(p6V@UwaEg~Q@{|;?%=5PZB|)+J5VL>{{Sf5 z_FCVoGMT5jc9qqO2bd;(Hkjqp=Mkm|_VXoPkQCkDIOl%1qt^>FDV;YjsUT}q{H0`C zTYamg!R>(H2IJd^9HNSGWAq#R2a+uR5dXlGa|`Nr4ZxSc#8F2>yV-_8miY(6EtZ?p z>H_r7jqY)WJmR?B#ZLn%pRBW5a>svjGvd_tx!@PuVmwbh(U5})SvN|;lbqhm)s zP=Ov7+ag54DE;>6rO%ZYQ9`}fYI5l8JVbXcQs>4{)w)NvQ+Shja)-pmpyhd2KLuMb z*{H0}Lc>f$`Rwn>1LGmsZ}l@j`3^HK;)kpzrlqOq%mjb8{rRc~LQDcH9De5n(|xI- z6CXwvx6CBJ-TnCn1y{8FS*B}Hi_drRm=@3aRGC;6$gWp0YDt~$KY!HRQDUWgXF8oq9 zt^yMYLC1M#M{;zRv&jZ;jAW6$5jmC7%Udft^*7%E`%cDE6&`4kx-}kp~7m7&rFB#+ZS-aW>63*dO=+u@G;{@ zhTi0bo;+a^{@JbZrBb>hWb_nX5s7K13$~WxUc@@}HI9l`m3l;%^tsOVOy}?!Roh*E zRpXNq7~$|RYPP9N)x3R~Fbux>WX}{Vv3-Ku|8D51@g77l{~8NgVIu$|2cs3rPoI5v zwO)Ap2XmYkE9Fk8;p6$DcaEfAaJPtN{u=tjzSbcdab9kmC3TAW7Gw7i9zbvY+s$yM z3zl~>aKTZ?QUHmftyX&Bq2%zT_l;Jx5!b`?Jeu0Kw=83|$K`ta=n8T_-i;Pi&k&Zo z8_lhflj^fT4rTLaO>)p*=n+3#{q=|hvLXpd0KmTfRIy$ePNLrKp2xQ)Jtk5b&Tm3+=yRy55$cEwEOi_GsTq{(f z;OAvhX0-BV<>l^8xdn|)*@spyPwAPiL=;?jdo0;Gr!K*9etQ(!n?*j?nW-(cDkbBQ zL%p$kGP<_sBX)651j$FDUah*ll|{IBcmggUl>4SfTm$kiq@1dfanwyk)fqG0eHISl zi&IZzW78oeW#BpGxz%#H_wR3y2^11V(UwKz6f1(@i!&Y=tM1$6$R6Si6xV#<; zeh{a|vmUW!&wTgBgdcwfICA9^y3=ZRuNgvl%?_oVtrPqO2)R{#m2!)!j5(JZumbt_ zbv~N>BORj$3wQhm08Yf{e!}+2c<`j(qTyh-?2Jb z2cC06t}#1O)r2~fJwtv&yq>B`0B6-q3p%2EQ}8k!5nQCWfITEAC4REw8P@->yx%SU z;Xuy>as9zR_|}ij4CAObNrQ$64=o1Q+p`gIzfb4}Zieg@ig45~rrZ~^X)VP`o-1pU zs@1AkrUUd4ygivX?-aWii5wn+y^!LgTlGQXuBxQNY}KYJd3D)?l~|olYJWtLzwu8& zE$vWB(lZO|ZofOLjeGT~#o5MUn0iPS|Di!*DMW&}%H_B?-{srf%}sDEkqC99uQ~so zx^MNsUg?B|(~O=wF7c%|SgClY%2h>k6iv&-X`Y z9k-K2qL)d@%3n9R-{0_AY7E;SC;(Zl46>&RRaS)fdjs#%WQ|Gwy1PY>y>%9^Rm{ve zgl=F{>$%gp>Oq#LWZ`VlTL$AnG=iXDv%2P4on3#vPcuTb4_Gz4kLbCL-rmSd?1zBB zI{R`=J((?3vA6ur0ehML3S(0`r_IlwTxdQ$iuX^DkcO*uphZ-0Rwa?+R{9CD({!Mp zJWLde)$7$c`boNq{U)ony9EEYw|$-$CN4#y8srC{_J!kND-|CW<&NKs55;v7ccEO) zX3CsMfsHa`n}#U+m+pqEa*_SQWF1l<()kBt?$8|GK}ZFVXXyPA;He^ws|YJWsbVW* zi#7U|m_;u$`BamH9-Ce7Oe0y6-T#3C>?u8vn|goiqAGNT6W>(Ff0bY@S6_cDtpH*< z^uU$vaKnBHdiUx(3+>fS<5xDfocOIFeyQm3Tob<};Q$Km!RXOGp>BzRGC*puZ8KeE zJt&;Q5((g**;2>9+b{bNC6eVcPHAf$OCLcE9MQ5PG-e`YZ zt;_kzFUT?}uq&>BW!zWqTloaP{Bm|3{by6+jpbJ7)NBo*3L_{bkov>MI<+RqQmjw# z!#_|H=Whrlw7b3nXY%QzhvV?xcqU>HeLeHOSwOn)16!Or zYvbd)N_nm%TU&*?}nQ(bSlxEXQ=Qm5Il6YZw5Nr;QH`)kjaXpH}x zeo_%TfFDP0Y5@WdvwCsJ)ow?3{gb{)$~IeitRxt%O-aY(VF|h0al;@JZ+2NcJ4^rt zNDI%q918S*EoMpme^+FSIB7H+m;`evpH)<0-avK%$}1cEQlw}78WKK4I`bM{z|sS1 zC?#wYJZ!d*6joE4}AP^7xKxa;M)#j(PX)ODbig>$=UE&o&ITgAXx z1^N7b36p_cGqn11D_d6nEZ7#Suj{J8k8R9q>s+r=%=^_zZ^HRwV`jW0ef_-Pi3{(O z<$s{xENoOdin+pHzpi*x+sLR&aukG41jJjthDj{?($+lw=0y42Cvj=iE={Vg;QKtC zN>51jB`yG_AswY{Hp!@^7z}}5n~Yc-l+O){d@>OkX+^9t-OJu1%yfARURU>iko@1N zOFP=&C96jk1^=^uJ>$lnnVhU?*iKFIg#5NB!4_}QVMoRz&rstq%gbS@_a8G&?DoF4 z@;bee^c+>&6dLEi5DQDHiFN;mtc4dX+8)>jjb`xrkE2G}V{c*+6BRF0VZ)yV)sZNi z1EP;>aKjZCbTlTlRTyzQ90EKRqe{X=)8tTI_n*1Lh_O@d{AR^&_t;9x_6Ih7CCjhx z`~lWrjL2=+`U!bhRF3|YLYPsIEl2M^&?Aa(0Ji@~kiYrrTy9h|5xTA(4}F`}!H{~R zACB_0i%55C_<^0VUT%3=_H!xlyMK~996O!#hm$kOf3hrN?S}|H-mG%@6h4b1x>4ye zx;?q5>hU58wm5K()fFK+g6fiDLaM%IZfa|K_&9d8v{ZlBi$o9Yy?89RCsF3sX?(a! z$SVEs;bXb{m)2h_On&?#bd2V!s3qJrgU>S&S|@2J&j|1=^-k-n|MwQPA!}Ys3xPzs z>1`6JNbb310u0cSTzVArj1Vv-l#SeOxZag}eBPq|ZHOa!X4!CwM$llaT5JE~xpl@)pT^$Yd+F^?v>b@*35pC4Eqvq+}oeb7SbP z#HuWie2F`gYe^kHcqIOemL}zIU;AZ{M`kb$k)|y_$EEvk)t9{+N&f#p$wpYEdZ&l- z9z}&YG$aKfDx=bc5~JSuP4-)`B3guNyWV1C+ao1C^bg2(g=xmRI?sJ!Vj9~e;grF} z&Q;r~cb+V@M6kE*jZ+tlG5aNfL)!^MZ0AF=VGR>8fH&KlF#6FG0vxZ$QBEsrc*&ic zL`T9zUd(yHSpiY~Izu4qVl*UJd_;kfn{p4PzKM@|AXDIJ*ZX=8ZE+C5hurAnKad9G zuu|d@z)JQ%tMx1??sh`9aa^}pTR}lTA*hSu_nO>2OrQRDcTNfghJb)GVCg7FV7Ql4WUxf;mk6n`f+XggFDP#h_Xm`S4z5m4_*no0 z7HCeN|NY1p)05P%g$S)j*J%gIn8b0_JbqkFI>Ls&m{GZrnML?II*+B!Ka6A=2&vK1 zDT?F-`;(z2S&{Wa+jYx)m_0^@w)aa@ypC|r%!g@rb-=2ZaW zZaVPiFDN5n7$?N~KM>wtwj!zOI*5OtutaIA+!&K@l3gf>$w(2gL7^mw@hPPv>-3aM z4e}S3_K#;>7!M;ScRJ9j!)!&ki5p-mN>ZF>A@WUcj~UejV5lz@DMg$^h&?&cVT~X! zN!j;@@&}oezrN?)IFKsiS18&{JBBa7b)gtbuSfg(TCU9bvXLEAGeHB9&x3ieSI=CWOCU%%=2PVscyJ=oD6oQSRU4PWLeY z(chi#85>ZD$O6#oN3}26R@g%1B#zD@+tG!-K=l&5-1~m15cWIJ2t#^KD+H`s3s<$!ZRv3#ll^&^n149 z&bqgLV#q-!amXEsPFk_8=x*LmC4P6=U43_tuBV=CKe^ZCYDzmwO3yYQ0`~E`ETorf z@mP@@QKwzBu(EshNcCa2pgU>tqEu#pz8@MA_u+cP@m(C{;V&Mc#2)AU3{Xijdy`eF zr7CBWXpuc@np4~8&|}u$5q^vwv0($yBGGTGkyY?{D7>;BE+_3`{>RPym9K z;kq?_)5p6JN8$aB0;&Vt&axMvcd_w=De+~Ov-w10x&h#vk-%{gsg4Q`K!IzgqyFN` zJ`|n_H-2nj77`}7>3NI>Y1l3Qka7f!ZL4> zRsd)$_fSOo#($FGmQ-}38y1fA59pTwo2_iTy<>s6J!K=+K6C~)vkT{UF#_eoXwu7^ zp418S9mvt1s76SW0sd@Y=^uy%f-(x%=y3St7Ef5&p8tM!ul0lM z7Kmp*5laxIRJtSu?pvZ9!wrn{5OBOjwdu5(u)llfvCshCE)Y>0W0y7TSK2}!f%h>} zFtReX5CL&l!HE!dRb9nRm2Z=;(nxQ+5&WmL2Pb7O=OyTvVkx`x&_1&?5wR3f{_7z$ ziO80Hm_>8_AI1^l)`VCP(4DIStjgF6i1ia5t6;R&E;YYo5^Nml5CS!Gt5hn4qv+hu{>?JM` zDV^*mpwa@IZ+zal<`JJ3`yh{kMRMY$ux`0gSf?rL&L%O=U^`^rNpwzcY_g`%9R*LBulQ$u zF1}N^C7z=?3P3W=l-rnzcN^HrZ{M#YW@QPrJ&VEVgfF1=U>)4v@HS84+{wp-`BLf? zndYq`eUj?Gnu4=M_MpfF)$Q3fQhM}q=Jum@N_y$73}{CcOD!n26+Dx!YkRF*Sq`!a zk+Kz8_S>F4`F_V~bqsb3iHV0mkH5!L&YpcI!EuD;?Z>+ z%cSiu2979{Cnqvxcdo;Ik7h#Xo-}OBb@p*FOPU11N4f5K40FzUfnHj1Vs#A8ajz!7 zJS62gM?t$YR7c&ph`QtvK5#-uky=m_BPnr}3DVq14w|5(Bs_^QSIeGtZ4lZZ>*{hu z7=c0!x|OPy5YXPs;s_V0$qjaTq2?Q%tFJVgWxGy`+#?fFg_e74%qoV3XLD0DonMsQ zOA`H3)xb>&DRSvAvqkR9Q9uIdXf_hQ+nA#`qpjeHO1{#Bj+u}BIya1 z^%Mj+3#8$GbBR4$*u9>jFYrLle9Qg{ zIG1+QU_x$dkP`0$UytL?&IVM@JRH4`c*G_@hE4fvaTtlY-%%a9{4V|_svFni;Y^Qe zn8;1Po%})i4z8GJS>cEnF&bWzCPNA}>LAjlSL=0;^`S}%)`_ilT+rh#xR^?Z?BhQ}y7J{eYo0IONMkz5>vz zSj!fjV&9Tz`)624Q@WgCw9!=!`>J>pd?JJqxvSO|(U`}SxFZEZ zxU=Qlo&OV-0%`pR_*9c|ARdFStwW!b91o{z0Gs|<=9)4<82OY_Lq#ba7FaEVEkC?7|XFchp^go6_8UV20>XpA=$JU{5On#rzq<{5lxj$a@0Y4!) zA4&kTH~~rHa&C3DP;cu zTt}`>X`ub%>7F|p0JU;|aT)YJzQgjWg!T9T06&dfyBLNMlgTIP#Zo5$kLf@PI_LcV z0QITNK10V}^Z3#)-cjrNaZY3MKey{Z2&a#y>Bs3$&&&1y06&dD4=eBbQj&1P)AgVQ z&p%J|_*I#IhN%_`3f9z=wLIKjYXRex172h=z3eSMkq&qJS&B zuILe&h#eI4{Hi?v0H6N73~+?|;~$M7{{UH!ZoTLOLMQ(KiA}@ z`V++rIRn=}g#aPwN3XRR{{TPdr6K6v)E)|tU($dVzt{Z!G!xJH{{SL|0G9U8?SeJpY;BqXH!@^VrdNJz+E5dUJJ!%uYQ-$cNF(A*^C zwJ_ixe+-K#BqVAic`0!%?_7fppE!#b0Yg`<&3jdTua+v?+A7*AGv|b3g{|z(E@GxjT`;A<&C8sc}7s(;BB+4aA5V0uS%ArZ&N6S%f%;9B_K4-Mr={ft}aQ5Y- zOWW(kY}bp$w&uMnbN{am#xJYLY!_yAff3g9$3Oz(OgUiyFe z^5vHR&Z%!+V!)1h$Jvipx)}q`0`wF(nw2wh^aMgD6Ouw#I}Jp!(&X{zetv!e36ji2 zz1yc|^L*9Y8dW+hL|D8z%C~=NZeucye53zekN>0395vM=p-hZ)7Wi^|D^hC9O@V`n z9{Ns$WonD}`Sa)3V@ucfgZ`ZdjjxYpW@Tp==~Sw7WM2N)+$G(;wE5)U(UWK?T6=r@ zB$cv5-%ccY0!%(WK4y|wq0?`gh_!fk8hu{pMiR+SO!Qx)!$wEtFzSf1)PrAK2Z|ci zWE#~(&TbF5P-v7BWmuYKGp-)K8KMfx&C7dKZP+fum|8ezufdV&LJ=7re#g_(6C<(@ z-T;=i<(@4^-y11%Li0B0)(5^+u29V+Fz{`B{C&!R6LsvqU)#q21QUhNNMXBncO8l* znP0wqiP)iU+aB=fpuc57pPRdH9E^O{iQoGEVbQN5Dba{#%J)yP=NlEhT@~f#=O5bJ z<49Ks_w7um-bVaYB}PJc^yYZ}=D-8vcN*n*@iK5K9hVz9{(q6yuLs zrEbsG6j!j;>BglpsS;p?|33BgKPjeK&sn-=43~Jl>>O3Z%>Lxb@m2S~s}o=0w|;xi zjxL4xoqn!;&3jISbq8r<^T9Lr7n2@Oa7C|;92eUL`Wsdl84c-YMA4*)Lxx1n4q|o(%v48x(t5?RWV{9)lWzEARU3}?s{vH3j z=>Gn5ar2+gS)@QyuX|VU%&Wqo~BdP*!8`u>U zuB(IhBl>9W-o0y+EyGMiONyN`VxdM9o}Nz3orPUIi80N4S+(@{v61)k9V5TpryCm^ zq&SgpN~10HKGf8#wsF80i&2YlXIZ>@6$|0=qWiD*?JwNhV2Q#{IZj>j^aMRF6t@?N z|K7~ZXm=gPJ0&SG!piikB5bqcWa!XCkry2^;j@~m!UI2lQch1#LuMa*;Tf;(=uqOz z8SpUVGrI7>(tkxK@Y-4 zws_LS$|~Z4k@st=o8PkVL->2I#e#cGK5dGeKYQzcB!Bxm@fKs&W76Z%G-QyV|1O+% zr06xxxbQgzlj>UwH@DOtlVD3dcfm(*1OM9A&waT5mmhGZXI4j=fBD6_#ru#JvWS=b zzH2K*@nn<e7$tp3%*U*}g@N{n$s<|_FjV^dQpALgob?$ykWZcUfjHtO%}?G-U&bsFI& z4uw{4U)%&@_nCNkWqJ#JO;r^cNen!pgLHZL@ZtLk1!kg^ldWl36V#a*JK|Xn$P-9Z zc=rrTF7kNq--VGE!?Gg1OSijAD*`xB78ip4-9V5AZh8eqLTTtaO0VG*6-_L)h1KvX zn{$#5X9q6#-XS3&@jjh-L57Wv^t(-^N@sP{_?El-V&IAQa`=M@DRWJta1+j`Qd@5! zN-b?mYwO5K8+zQ{zkdbWsz;S|*+~wsZXmT=TjuOZ=9}u+V*|SrtGD69Bo7{x&u+Wo zBWr07Y#vWKHXnKmeQ#2Rv-L29vxV?W9O@e!M2D~G`_;w~FB2+7`?{inf|9bxHrqc6 z%7SL=J1KWPA4;pg$<8+8C9i95 zS8SN0Pgh8mqyOzL2+M*$htL?Y2r(svlY)qBZ*P~P#aGD_95CT5FyJts=gU)(4Z+ja zZgtzlQ5CtQPaO#};D~gX|M1~MZENdD_`L^mjHzG7#wP9gY@6qg#3CeUAm!jpTB_Oj zm&-NFboKOlRu3l}o4J$;k>;D`=I4v2x9~8~4lezVTHV_X;YfXbvmu5cZaqBGEx1SK z8myy-R^OD4{P;osS`4XsNwrW-Ok3MvwgkFBxt4&-3K}#L=u}Xb`<9c6WfQqYMO8bE zta-`RYi6Nsg-OsrWcHXOb#@9vw;0~Ea?ZtsE^~V7p@sWydaF5SfAPlcctaVo9|}{s zeYQrqRHJ@RR?C|8M)c6l#r;%g=Keo_1P^WEyoFS#@d~E5CLZzH;%+OgrzmM<-a0Ea z{#UX{R`?D(ra`)5hBexod^Du<|4azF8rCr(>p+fA%D4QxmQ{BM+LSJjJ}_e!>0f2x|;vx~L~M1zUnw zGs0=nA!Og87|pS(NKOYu*eaX3Jnkpnt5YMGanUn0ls&iUUv;scA9SH0kB?wq)6~?2 zjxx3D2|fIM1(eNnF;^%7N{o`Q@6)`3c{nq6+9;F$B8f};)&T*Adx|&u@HAXCsZELAKz_ zS^xDbI5ZShh!PjlqI>CyD8%Kv`Q4&z!7X=khWUpe%K)PSE4u5ulE8+4sR z7U|ssr~vOKkPtewN<)fGfD@^%o!(<2RyN&J&yL-fR8Tl+W1>frEEi_MEf0P0bk^9K zleB;tE3lht$R%pP4EA^B)OUS<`_vb{8j2Ex-PV>Zb|367U?^QV?G3$W@>x_+!U1;-& z1&lGZeF_Z>z8S*arg?C0zAe?Us{&A7?B`1j zI5e4wY!5U#Y zv3)w>k!Qop`moVb4<0}<)WfTs@aVY=YkKegIfN`U4Kx&Fi9)=J3KRgz)!PbZmA2&Y za!QPV9+#bmq0z3pW{p_T&Kl2pPz;$0Q5G{}Ra8Liq>i8|Pk*1AqanhQKl>$+;Ex^| z8M*IU+G&&+*!_eUxqB(GqT=K#0AK)|D1holeFn-z#b3yrSxOk;5>RyX-b3e`-Ch>p zgFdax9x=X&N=<~tNtp;IpgqHhEs0VxX%jZSDSI5eL}B{JaIlzhIhd*&pPq75jhW+@ zua*QR;p}hCEqk6x**7#)lumD)KSn8r6q;+iX^&K6AD`eO)n}Zvc^$pmNA8PpRrHbd zX;Eo}^+Nx?E#bt&u#eoAEW|UpCbpD+TaM-*#^b&HJmF&Bt4U^GlVI+xjuQCAJ5Guw zkt~tRm7Ot^Po?6K>P*QmIO$NY@$V`(2-NG+lSkp>zH>&Wq%C|ewHtB> zy;^BnYMK|?KIDM3`fty6=(Sc>R)7#73`%Vwav;ftC>1RnvrGNsA)wCrN zuT1}OVZ!^P>nPCx5h^z~H)zn98h55Oh{ECQx8IC!(m~o|qrE_tFHlr0PPQ69uo2zsd^h~J-i8&QW&~6j|-V&((L>?DKGtvii+SvJ`)m!Nft6I=a1Rh zYrDJ0p9EbhLXl!p$)zTVb=g~Z=D5%z-Y~b;A5ExLsSQ{qVYRltp0=b9Lf&ECmC#G@ z5x_D4hA_Tmk1_Twt2q`((f0iJ9|@off@ko@dkd{}L6J-QWq<@bJI4@Uxn|bf#U**V zOm+4AO3%osRHqWau3XtP#0d#k&doVvQYNpgO+w$YyLk1gLBa3JO~NYQ#~sAJK; z0K6p2K?c8{-G)&hBO^oCz<{0ztFE?I40;vRXHs6z)8VtQHml_N|#rb=`%A=d6nD!1c=i|U)0n#HOe7A_9)|qP0V`@`d)T%Ce@&& z(f=ArMA$~RvSj6K?%5kTxNc90bPDHPUa(k6+%dDmTN0z=K|E3hpY;p8mZtD@|?!7j$Sl>#lm-KrF8x(gDF z#iGDTKNAwN;3ZEUvtl8Mg_DMU4MVdMBY=GZ(*L$S{@#c{PgP@x4vnsEy3$aUr~6$fSktjyy?R9<>{z3LE`>1*=}(_$DA- z1W1P3HRcBM#JHfaurfP|q&g9cVN5pjpTB?pRM;y(zB)Fu&5m+n+rGjq5T#7CRDQrZ z4cXFapz>c9qCz+b=0T+#jo1>vF{*hm%?scI>gC9flM~+Hj|ozQ4GuZW&T_E2rG21@ zkYMpL#jl4}5knY^29w3IFuVXnUlzatOx)V~j5R$*3ms58W#Xp8M1WU7>Igkx4k(*| z1{4()p-@A*%O+A<3Q%a&%ESP<0A##-v7#FuEWK#Buwacmxi$v`0J z7BPmUEJHPd5(RhwMxs@LGzA8qUq5#FZUXc5s~B%Ider%k8qblQCl>QjaFYOnM$E6m6~gI3pYz@cAr zpGk6Ln)~?Z@yRXkLRD(zhur`+$gc5o=lM@Xj?C2`jjteV2vvo8pwq?k|4h2iM}%cc z8gYH8Py#^L%hH=-<3Y^Pgs%`KWze+?z^g|6c+d8L%-2j)-ly$>BLz;y-_@^w5EY7r z$s7k~4KT;|2v#lQWG|Jpc%u!Ss#mGj?ouzS#W>R=eJuZ$ff>fwpNbwU%Wd-(=Yerx z!Vr~kpRjD1jW(aI@9NV%QBM-f-=X@!4O_Ub+(&5A>!`ZTu3=}1se%IXZT>O-t41gD z(^^Jon+m!1r`YFPRE&lq18a6D@cY)iI~*4xgZ5W}{x6^XW#fArqf+pof1dZZQ{r#? zQ#C+TB&{3u@x=>UO0VP8$;f_93$ zL(x|C+>71z|lx@2)5L$@9_nMmE_A;m7*ZnN+&8tyvp+-FEvsO#v6+iuGh z4Wg7*Z-GJeCeZk;DRM%%B@m|ajH!VAtBt$AZfr0vI=;|n@!DHRzS6w@phjswANVrB zS-@+LA}1#&SJ*EDh#HomJkg-HMm0k~szD|J66MZHQ%FwQ=v}T&c zp7;8?w-=?NqQ0)KXQuK61KzG@JK%N5dHGfY#$-9*6P~<2hE#^<^1W3kk!aLU-r?_I*ic*h>Flh@VlE^JzyXX_=?Zs(Ex4nL znC+dMpa{Y|FqJ_t_Qiz)@)!_ygQZ@E{ZEPHAM^96N?PCLq0<6DK#r>Q1&HiIQLZue z^(zcQHhejNQ&n;W5c#2#_P#qr4O8C3*H@o=#e$oK!Psy%D=RDclOktlID}~ZZ5%Zn zM_AB(TkB`+0G9YWqYwumXwIIyRBJc;L88#Cq3=f%GPUe?T_J`eAc$54~OF~U*q}*6Edm5U?ZDAvHT)%{l&#>&<#|WRtdqpzz0=Mjrsslqu&!r7cM%w zt@L9;kq0`@hW9g+v-dN09ftsTOIa)lm#M6{$yN>p#;gdZdG!no)~+v)*N%ONq-n_G zk0AUKAp!%GR8<>*TdA3)BZzi(b`C~Vpva^eK%p?2O`&!;FQWimZ0+NdrI^W~&Q7x4 z<7t=~*gbB-Nlk&H__%9!+hr->{O}VhF2G8}t9ipz3%zlzB-6;u&MpR;K>BL{qLSD* zfmGVsFuVa-VwsvW0Y1BXwfNbZRzaH=s zuY-+?^k+TPiE(2p)!8X5IVsHNNX%!=0$nn=%&`W@N{@UtHWJl;u(=)oAty(+cKVb?=x4i!C6B}& zW{0JbY8KL}2V_KfMbt9MatjO{US2)Z5$cmzCYsYiw%jrGWgYkX`csyjV$kXD@5Yxc zP2slh(Lx#93h^-`^_ITV=Y4g#?Yb-Ax<)@@kuf60KoXrg{-9;EUtXpUdDoMW2hYSJ z{@v!2GZE^nZ@^4JegId)1%wkPsfB|>d{xzBmQ2hnqgjs*qbEHkct}8ABJ>E6!)R6K z>kC9n1+=(2lz7}vs9M|DIN&Xm!IzMSeEeUj)J80Ym_L2RK;(xCr75MjN30AZ&on05HVK!$Ze|R%)xknhvEQ_nBLS z*5iAu-*Env_h2&4~)%yUIJB{`YJz5qW6-5Pd#_DTpgJ-wbFAi5Bdx261&X_)D z%nT}!RqBY8!bjjuP_luRJF4vdTPbvVv5HVl5Mc=G;4oI6aFBns zm6y^DWR*^^8Y%Q-*tU;ptq5ZF=%5exc+4p5x*&4Rsrg-KW23%LU*2>bqnF9;`lY}iTh!??&O>;uF|8Z*qz&>LCSGw5U!kYY|A+0UC1LdUY?ZzBm+d$46qi2gm8`+d!9!i-+=PVZ6Nhmqzde!0nLo8u;i(azeIxaJ*|+73 z!Hg-Pj}ky3@lYDG^4@QqWOasw`8E042TC-)j zBC)v}LMP$5uSNUQ|5%x9O%PB?sqGPTm&8otz$^&cIo)tshEG}VsbY!{d0X<$sD>$k zK5>YyXWd(9(8Cb3NqPF6F8k4+${L041_KVavmHHztODA=(&bk#`t7I6slfh0uEfho z{#~!qi3RBp*f*-%gGh!6zr%qCb?l0t6K3qvbNHR6>>A$@F|R4*k27^PfVu~h*3!P> zs2G}6hf$4I6;P}Yju|J{FfC`7CMz+rq$>a+3p4x0r@JCzoTO{{w_EuakT%A)mus%i z>>6RR)8sC`+G|(kBUGN&H8f-(kFRfTW)in;Uo17M;i14O`N!-^w&kwB@f;eEfXAOS zi%&3(XpChmF)nlkIqcX0xc5E4)%p9!cHJ(34csx@#>{@)8=^iGS_RPVn<#;fE+|9*$& zdDm3TFk4b|pa4n*p64aRu>i{f3Qx&7%TI6C^dh60Q5iPD7MmE@gzO4|<1LDr)vYz@2-1XA3DlbQd&y}jzV?pT?-zV_#ZrD}Z$bHL&f0KEqGpZzB(|gQQJEq!r@*R3&;& zroW9Co22Q9N~axu37TIAF15#WBH5weJ5e)yhua z#LvsIcW|t93n%CL9%yf2f4(SY4RuM4o-fmSSzJcR>1Q9KD=1$)YwF84H1m=lbD$56 zmWE))MQ+R<;t@n;Q zD-Qb{1Me9R52Dl#)N8TI&+(GPPVS$VL=s0!y-W0VcBYQ~C5bC61<5*TGhxF^|DI&k zcG5;G;UOSY#fiTS`8RRUri3V&ATs`Ae%FLBS!}-b!ykEpf6~ELt;`mz|li@-~5_ayy&DA)|gtL+h6BeM#5m~D+iI|;1LJ?E#!yB8|505I%dYhp z7#gOJ$RA#X_dL-U1iIPy_9)Y!%U^GBfy!qMUyoP1m^fZG4n698?f4R^2tu*aukxII zfcdxOVB*f%=-pp-^n`l6iTRTzUo6&4UYgTdB?WH`)u7cr=Q!=enOP*+{gWimB=#w* z&wMF8&v2+GD=sT;-}k&4wfq}VYF%XXdJiR=lKrEB)1rdcD+R2mYV4SJ1DO}?Nojkf z0op8g7H?c@cW`1>iYmyfiDM7V!ck=m@XL?4}a)T2V0)whkZ_p1ZRrOxnAs5^-S^Z(LaA! z0qcWmv9t3*$^V|r^6};O#l`erTJH>{Z7g70fwkxc6L@zU!RsBnv*;p#*>d9EyHBl zzB{s}r-*Uqk1G;a&e#F{q6AG`mtBLIh&~Em*;t*3EEhOO?j+_v2Vm-0Xojas(Sl}> z_R8gGO&-zR1k{=DOK6bvh;X^(jBhd^<8`%~G>2$oq5p2HrqKMLQwghwVc6o6W?U`C zf54}L3V3-sGK zP<~RLd4aUrJP+Lh;Zj3Gfl_iE*ljTn(i61kCsKHYZ`GLTH^29{j6qdux8k^?_9ib6 zA#ktJOXy2*;O9651?6j$(`$w_G&FFdb4--!`r&_qbkX2@m^h>{`oP}B%1VYL0}&FD zEEd!>447&B%z}c9eIz8eZN>`QL!`6duDfN)q|rb)%@ zCv?%+LaRW}uHfFmA@z*7AfggM`TiIe)9JO5yy>QIY<#6h#Ve9x$wzI0Cq~#M#1gwX z%#wFJKK#nE@z#En?`Y<${3D*RFL~g5or|-&5LOI&#S8Hnrnng#LWh1SG9I1B6d-xW zk+w^+TZUONxBSGcwll9JSsh7Ae*Vc7J#GQHO|?(mK&C15sb?({7NvII0Xilr4aI1v z>U|StWF`Kn<%o$qq?7wQT{viy>7+(X3bX>s+}vaD`56nYws?QU`AXWqigQR*Cr(d( z`fkQ9RF)=ZY{H?rb|?eQuE{}hR3dkGf- ziR<&<{l0=3J7l>L9skM-)&?xFIG`to)%}eDrT7$mlJgB_%5?fLC(;{o;TB zWu&o(e`NNT=lW#KOa#mwcy<&Yf`FxnsZQipczb#kpfqja=$HWD97^^_+b{!`uVwEi zvrFXwkYG~Eo(ed*vN9JgKIq+%Lln8QNQyS@@ zx_1&Z?B(+-ON~H8BgyS;r$`*)9-^_L9oPm1f6f?94sZ1_VAYCPv!9y7d%aX7pNtmx zslgWbR=OMc0NA1c5ALjC999x}cf&ey@T>pLFH2^lN6%d1Y~i9WYp=a9q7r0s#B!{ ztQb8hwt_p;+7H+h7~t2&_z}W^IuUI$1^`BBb)x_N`wuJ}uBnuwfw_U*s;vfAK|xd? z{CTzm_2Dzw|9sjW1|XRt=^p~=3i8incx7MXz~1pr4(v)6Ek|3^^cqN11IOk%{DR(h zxjM2F%3H&n|7-~+&@iE)q0PeYh(b+qy;e{-@>Cx79iU)AJqLLR8Y?fkxt{r;`9tkf zPVxj8iHJ(w;v(sGmZJh2q&I7k^DrZb`=3YE`*o^1NEg8*S^+G7<68n*q(18 ztaWhyfZ1eOEP$2$XQ1qotAmCyfvP6E|529r4t45ll`{LnXMquqBmLXtx_RDdJ54z> zM@!u>|B1SN|MllB`omYRNR9H*Uaic<%h0(STD!R5YisMhe3?qwVZ**caKF$ILxy@S z$dnCi$&dlC?Lf@G1%J!WpKq1ifY6yEl^T{J5>~$l(y>$LDG9VQ@VY|%{rIqdS0khx zzIKE>@zHa}@%n>F&<~*{g0;mJ03#+&SQ>|fM-j^t4i4}GBa}LDZ$d8wKQ1s^2uQ*9 zq8bQ|wQ$6lK%QrjiUR8e-vA5K1qAX?>PM9F{xpdPHID0NZgFwQ&5;nZM!NXp$Lr5 z5+Aopln^wu7e&PUN<2`$;|+Gql;-B9;&62N9#GLs)9qH@kGC ze+JBY2o4a;DM44wLFOQsD%6{~2<9a$q?z%WgDYWq2{8&IC~kOf5WXNCMgJX(2F)@n zHqWm^jkC#SEZzqN3aE92GXUXStur5jQ5;;)1o1LHTP2yb?6E+2_4K@^K=omw&CAI# z2QL}Wl&H8up8(MhTQwjo>;C(GOF(9V`mbE5mXy=epnegs>o(UTVGbJPCgPB#+BIVizWRidgmB`x` zbF9YyElFflhUUL z^fnO(Wa3JR(J#0Tl(gIjVmJOUH-)@Xb{^yt_#|bzqjG?zs0uMkZ7ie=RHA` z&+j=)Pja?gzYB~xI#Z+0Ta?ifHhU_LR2D`#%ajv8oQjq7Uu<|7YRp7yCHTNQBdq1% zC{cK#j3iUn+-X#UCPTZ$%z=z>N2QJ&%#8~D-$6khk)aB_ zFhw}_fzK<9q@>LpbpeGIc#zA(#Go(d-Twl>Ex!Ka-Wel#>6_h?s~cA>dvJXK8wg%4 z(c8mBgd_HyG(8RKYot@(N2B#%IzuS^K#tog23+(}ZA{8irQ3JRZXcf31Q{BYWsPsn zEiJ*sBK>)41)a(z^s9NI@ZkQ<&;5~!k>;+`#|Ra<9_lweK{5>p`7qvOYJ!N8KOS^@ z3`K`bqC%(gdbIoc9xxo~Z)-_c)rh434w>DT$^dQp_;+#Q=lPMq>s6}bDa9wqc-ZJb z*nXUM@Oh|CjhFO^85&W_VabyK`L7xKdwWok)-jTil+5ha-W&8<5e6FCeYYjx zs)@qsvIjR1G;gpuevV+!Qtt5&5Xo2C5WQSW{W3mou1A8nhrwPY+VY%<{f$}oQqb)8 zchq(u77q+aKYN6@QZT33e>)|GrO+REC!3JF+>{hy7e@$P;Il#8r?AZyI{R*ZJ(7Qo zxpcGVRr0aiHaoYDKw4)Zjauz}(!KsjlKbKYiu8_u@Y$6M#=r>BbyD&KKVAlLI&rH4 z9sh3jH=hGl*v{*dOhQ=ys(6wb5Pl5!q|XUs2fR13tXrVs#uObq>^^+xzrmBg44=k< zIUj%sWbAt_R#&SnPz7KX=2c#WashKSENpnYrdtK*gU|^?aXr5F%n3|7$nnqT-wPK7NXa&OS)at{NCREfK5IjOvOx@(Wc_H2=e@% z`Ae*(Vq_ztMai-k0}q`!QOGMCryKrgWw-Cl@|B;T{f@KKbthA9!_LJaLA94ra;{aI zxaMMXO0TvHA3s988$g0XSPXc=E_au19l+2MbY>ki2(vQwGt3P(4r64P&C);rSE86nU&yJf z8L|Fjx5>i5sOE*jJCqht$Tk1l_@$2mb(gKXGza2_RyAxvc*Fo-N%vKIcj|*D{+FZ18_BYi$xro@ z^1&6rV9v`plbg~Pb(3%G4ng-?l`y?);0DQU^ohj_#WCz~{lSZI9S01XNz z$0gi_F$Qn&V0Zuh`s%fmzs|x25J1o``*@WRRbqDAl9RL+#^wD7L_BFB>(MA|^e8l# z7y*X0R4&$4zyF$b$qvV?{FexN)RRXSTdF~y0mU)6;m00*^?B>XZIS$$5VKu1;EyIZ znj6@@f!PD5-2W&wf9-NJzf7lca?2eQI@bd*)DHXfgOf+(tS)hK*V6|C2FpHhPUVUO z=>O&I#r<>Y3wP9f2xCas5jQLlXfBh(aAkxk|J|Iu>(&$lrcPKQ`@6@>ez`(E8r2TK zGXnU*hf6aEj=RU!B|NVM4Gg@~TkdOL7Ot;5c)P5vtz9T&BSiXb)M=Aj{GNT9pH0FH zlC0gZ=VP1xT&9{2cCq@dE)Mkta3_GFG3kLJaQtv}z}#HY_b%LnFc299-v=O4s2fxE z3wfuNS`~;fD=crQxHBNXmX2XXd~D-(ZisaEu0YGv0{70ym+?usKPCTrGvsK~KZaIO z!cDIKzJ*krFlab(MVr({c`%vv?tiSaO-AeKIpfEpc@J6*eeyorguXT^9pez*P3kf- zxA^$x;)+@Pq3}+TG%>mz?mQ_MSA+ef@?fqJ9L#wjZ&*IjR5gua3wgocwA(&4n6XUDP z<7CZ=UYah{9hmh_gyK?B$_|mW=yqa~Ge%IFOyqFx*tmrD(jeDf;gj;?fX^oM5B__Wkl(naF_RlTP{? z7Q$c^A^@fIsN7(}^FME2Lfnm!rSu5{(JB5RKfNUJslu0_doo8VR&HQ32s~@ZuLEcX zVBq`0f`ymY1AwrbcLp}`PSN&Cf7jf0yLbB7=big(UimaP?B6@rCX!ajuoy_TA5vTq zl#l%ozbi1U)bxCJ>@i+Ji*)e?!9#Na|q#daToO8bIUh}%U=LaK?0kbn=^&$5iDllr+d4JAiCcAY>**nwk5bf z=?o?lpwbTl@&RljZsK$ry}&_{&lVo1OO`XqW<*@Pf+*A$L*&55SkBJwE@YC{E4{C{ zm;@+P-~a}F?XZvPR!zHc)YYk&5aGf7<}MC1SkQ-QRu1wLd%Ew zXNDnd^Yo(V{$#k&`GOn5`2lNXS*H8MBzh@t1oyH|h2&_d55-x3A{fUP#sTTGMt<>d zR}8B97li1|hBD_8A4h}}f}K9Aw<7>rkwhV&7_IR#gBR7?W-;T+=pW4((~+1K`pxRz zn;?U#2;LI#+4T1IhJ3cSD4nq9%gW8QfVSY+>_>Gfk)&Qk9Y3@Rf&>p2*K6Bs(2=#Z zKLBs#FQQsDtzH!i)D~R7gCBqyD?Acxg__!`Al=*B!v$L|?L+y*KyU9ia7T}Q)Xc*} z+mapXLC|TuRJ0GwBXvoJTO&WTpOFz|sL`6W@W zYvDagwX`_UCmI{Wx7*_4(f7d!nJeHT zA^*EXBHjLJmJ;|WSu%00^ZWYxPTFpY3l_D%01)$;`S}vANx4ukGBRf6J{xU+@*=vK zF=}i29V(5IsN9GAu&&p}jfd!_{;ES$9w&GvKX^NY&mKy9?hpso-Z}{BhoR7XXo)WK z`R-nDHfa#b8cg2r; zk$sUbEfT6<&Nsmgq;(h$%uG$iFPoee+e!rKr?gWJm7xm5{jYluINtaBTUy>Rob@@G zl=ZpV{onm9WRYSiyay7^)Yiw|@4%Sp=;&xM$u@1tS+aaWAxi`o1@PEed3oB2H0cT~ z-ObED?uDbYRad$xOye|HMLpV?1yq2TDgUi^Uq66LePB!bwK5Rfaj_D6z2S7r2*MBI z*U+4@5o_Rz5kL_dM_^W3FnWRWm`!|vE>WoWp;JfC#f1Pw60mgu1L4BSp9vD*ER1}q zH}w1S7To2$7)2%-ZerA&DehE8nUTLq|eImvB}p_XXDbakDM{6_akD2&7g8- z1=Luf!+t`$*Ks!fm?TAY?DHT8eEmPgT1~&#P^$nEN{{4Tq`)(Uw$TBiB=e~be zi~Hd(Qsd6{TI`odLM^9%>c~5kkHd4`2C8)aM)*p9+N$+yToXPwJ`VC<8cL&SA08gy zqs4P5_YBiTlw0ZMMSz7bMk5qGR2;nj z&_AwE%0$=yk5LGhO2O7Gte1(6T>!0$A8>Nk)))O--eg#UJJ0k*5vO^DJwWzhi#nS~$Y_vR>a- z9#cV4iWqJa`KYWO3Z$l{ex8`O;RSkPt$#!>C5!oWk$C&UuOFwhv1KIicA~z9^Sn6@ z*kkl2`eC6o?!0#Kb&A>T9^zXpUP;D8giVMsVDs%RX;^f&_*d+F zi-s0)pMM<9UPg5MROT*6LS1{4wojQ!JfjACu@l!P-7{ZLmn=F={IDa$l8Iu}T$5pH zxjvikIQ}{>>o!2B#rm|(FlS8SP)-uhl$pObbdz#L6f7V>t_@pg<~|c12k06AUGGPM zkpn02Sdc{Fy@K&pca*(;yUUK?FklX`qtJxDY~GuIcaG+jEY`HBf4H-gHt|vN=-cpc zlv%&RO9xL+9pNP~w_@oejc>wjTD!&y(n=IF7(MOo4SvDT0uuqye1}4b5Emcrj*gB3 zk%jR7!qcq3<}SmvLoh&|J3ky(7yE400OmWmhL$$&;p$4DJdH5A0-dO&r1btUS+`vZ zmln$eGi7yk^)nSqPKsIG8&-<`b2bjN@&k*-qNon3Nsg$l@G&Xv8z_L%U;(ejP@ z+8KH9zbLT$cN~xpZ4gkn_I$_xO7X*+$97o*K!K94E2*e(b90AS>cxHz~`9r=kQgIJMYa1ImLvMokk{@_e1Bc4=MFxcXMQM}4AswTP1nTNgJR>3^(yTS7 zc`e@&&owQe?K0BR)G0=NF$iNz*&Pux=$F^;89NDg|3jx~U!%gA0aG_?-AAR1zWrBSrhffC2 zHJQCL@cg}lAhiiP7cZeE&!o`(_QgW&N;3f*$!OlOPLejlf+nZX2aFjQ(_6Uj=N+;= z^K7)NU3pdel_hz^{dko8{o-`lB&VqQK7^6smL5LMROyx;-=DhwbSvx?ng;sg=3Xny z@b>NfI>T^L}C}rJCDxpUbVE?L`0az$WHYgKIfe1IX_I0Ny#oPq`D)iIX%IP zx-{$TzSr(Egj!}=fyDYR0ZnVH?=H6c1Uv5%>P=MJI+ZpG5<0d&>95f8&~lznWq*im zd4oPRb_Ovj#cVC#p?uTTuVshNllxB7$>hF4Z*?MZqKP-TfZ$ihOs>bWg4lICk<2rh z?^vSs}F zeB5!>bUfTmWvu>2r3{P^aE`wwx-wMCps8E>`{#mvu}*jGOBPRDT-^Jcx1ia=eX_x! zp>%x%q=PAWHX1xY0TMHPvVHnlyu@61d%qp z6(7i^umCbEP;xxJCsue(-%h+<^xbyt6tFQ}=IG?sQ+Y-=Z_1A^BYA$yG)i-4sHJPs z6VOs%6kY!Eqbw~Y#QIoOEJs&h4!P0fS7_pfrZUN`$UW&7}ZCAW^{Z3FkggPUgP7Yn1 z(NRC>VvGqBy%*S9&dBY1r6t;?(szE(x1$(q^6r7l(}QO^8kFrfPhO{7RjQ87avk8j z>)!%_LSmFnlkmHPrJA+dR5M^&dJT|QgibH!onx-p$W%Z zHHJ=NrqpVL#p4;x2EUGQB*&Jel46QqC;9!9tp(itGpOUA6b5V0ulnOi`;|B!v#t~5 zqe2q^pUl-b#GZvZY#J+zp9U{^umKzS<@0m6-zL* zA08suP0VnKYv7&C!BilA|L4EkbGGq(3kkE$q^3MlZOcWKhB>WnMT@Psn~R%cL`}xU zlLczboc#P{d@cLCyTGzVS8pTOJh*KCzJQT9PnSxH>u%%=m?5(l*Bs{(`CPl;_E1&%T!}EEPJML!kiADqnUp~F$;F+5 zs^e{FP3!0H{xvtWPV9!At^P|dUXT6{O=lUF<=S*%>5xW{?iLXc5D`JTyHP+=y1S%9 z8brFJJCqiX78F5R0V(Njl=|k`-|_z4n?rcwzOI>BYn^lECyeVmq$Q?$q&APAON*v; zmBP5vcB2)lv9s<#L522hS#;^(#-m&-T~flhtCOuWHGHbnaip#9iHAV5&)KVJ*0sl? zXM*|7k2hzSH)Gfs2dotDeKRZ!TkZRT#uBOjYTXAz&@jzCKV+4kj0~xWR_JSe@RN$) z?cet`vlAkX)ju%e$Qb-?zT{XL<%%4k`e7O5KfjWz-{nLV7Um*Jq!x4_lKh>t{x?^G zF4?_oM)G0D5gWBepY2Cy)0I2id_3PG|BeZwG&x;CApQ-|s@ORuMK%q&41V^Yir7CBNt$q~|6=vNYo* zhdea+1rdHjsJ8jxm2KEyY!kWWZxuo#(2G_SjNBL%b|eyS$L26~t6kPEts~ z!nhj@4G4{;OSV$Gd{c_xdoh_0b85trVhI6*8tI#Mw#vkTf*=x19_bRk_ce;eV_e?duv|3ci@|2!5gthNFbe^5^5x~4=-Nt(k@S??_Z-pcU*AUajdXQYZD+u=R*wDS z4BulRCN|a?3^w(jye%ywyP@CjATOcqg>m=a7;yigZ4blm7C1M&n@aK>vc%vq8@grn{=47WxHItm!PWX>^PCs z6mE-q`1L|f3{kAqKpd`GMKas2Lz0|yYC0vO*<;T(kyejEs)}Q*GZaA#o=?^|-OBGb zAc z4h+pVT<&nkg(_U7h{#VX_2L~Q$7th@jYLS^SDY`JC{^F77<2LXS?y3Gc+Iv}l+BbH zsm^)l#|~NZF~N{_OvF1n3+V%7y%&DbEf2eL$LM@-IrtaL&-%pQ?p~G@7wUaN`SIeZ z2`!ZgpWs);_OJ~!%e^T_47|Ut*mJy?(uyta!G%vU#-Cqgio6b6N!Idx_@y%0&iAP@ zC;yvQXyjR$U1PWn4emAH$hswx%sxE!?a!?-G<)R|rQ2iTf67EmOdgajZRHXiJV#9< ze1_D}aHjkGxdt`ePYE#MBBq%R4hYX3IJNT|*zN4>N+8m2? z=d6n3x}eKeAR~43-n&Dsg7$#-3SW#{K7K4%7=)IMlZ&g&!1eG(RzdS^M%^#@w{l=0 z`|BtzBQtTiBS`h4Aq0~}WuAi`$4oWC1$PZq;zwU09z=l!48b4w++w6#?> zHFk;f;Ygq{rG;aES1=^DdIe_4v?19GvEQg&JKxNB!SsJZ^@URUj!6LT=9_V&L4h1;mxfLav$snN=`9_){4@Hf5=>U;zsRd=)McIvJ$ippUe%-yFfKTdLPMlq8zw0$+EKY^u?U9 z)3zKkBl~4Tpy_VH$aB=dY}|%?LcXK|+2vN!1m(9Dl~SL#^V}59*;A<2(!N`+Q{L6R z_=}BnKd$hkHk07{%K(dub9>sSxx^6j3M4?8F}Co|-t%8Gx3HLxvuaWt{;p9BXx63&H7N6pjxdIPQ1)FCRC_G`~<=i=+zZ z(t{cwtWt*c`;e{yN0K$xN8Q_!#{y5Dlz-ueTB$Uw_ZQ5Mf6mVS0f}&N7z_hm;4V0y z>9~5{4yrZpF5xigJaHiki7Q`0b9)T`7lgydUWZJeOKf@>!O>#+ z&Z5?{sIv56WA(qhLh;b8Zeivj;HhXMY~>QPSL>PT=-TL-K(J$JgcavSnYn(D&gS|b6Q^K+!JQRiK$&cR9ZT{JE4n#PS;7L9l*HD2W1Tiu3B|tGb z;M%%ey4yhqc^m3L=O|8dRRpORN##a4Jh)rLgrwrc*aLKwjVEO=-B==oypRpC zHEzGh_>5mqE{WGPTr)gdZz+rX z*qNqMu;+9JWmf#%U<`q_-8-x!qQ`qUr`nl^_c0o&SY8d~HZpuV`*)w_>6svF-g>-3AZh?1<1mkQw_KuFKOr-eGYgjgHR#e|@a^C@GT$EK0 zW+*S;7K(erndS-OJB$s|FX(Ze!c~%7b+yZa7xlWFWjkcGx{7%sE0^+x>L6>GlA%9n zJ0^l}6GDT7cxVDf0gA(8Ymf(1mDrhzmxx(B?QhDT!H1A z7A`ItShpJ+8|K1?@45{ZNf0*SG10D+A;tq$RZhc*SPaWs=_1;Z342a?4B~SJQ z)=w>*mw=iqT}{FlIi~{@qSs`sX(t@dfHBmttb)LOdGMdwej1IMRT%ezh60Ml9WY}c zeKZ1~EI25^r^GRH)%(Cd5bRptzdM705g93IqF!R5Q-k&&W~67Bx>ZU5i7~fhv(wh< zkIaTxtG}GpoVB0agD+LXlpDVn;tMO+qg86h;T!nAeQ0{bl*PAqWf}9Rqfxo!$?bY9 zR#=BjW6udysy`-)~OOA^s9DnY=Z9arksC^ z`kJ=iK79UKq3*d+zs8Z`Rl5V8Uie(7eMeMrE14K>cZ-K?Ul5P?3C$|qGoe)aKVews z#;YvKha<-rSi7-F7F6?3G%wLB2>kksr?!Ht7PmwK10qRA$OR2r+$qP9m5yo+Fs5*b zBVLldA$sGobS!W z{2J(n=k3Er*DFSczig`6+xq+Z!Wf8Pzzze%R1mveT!^RKAQUCi1sCrdyBW}logkcj zeXMfx7K90Htbgsmv{YpnNJth+uoSyqrl0y{ILzrjqTG0;6YIB5LnXqon==|Q)Fn#160 zmKn*qpPb;6ebM47SNfjm-q$sRk9dXWE%^vyyn1XVVwGNG!WSDCcW)w*)8O67V_+=< zCTno;4Yo22Xu!gSFl2?mdjN=%JesD6K(orP5T@ERy`2R_Fdh++?~wWhS04f~f;d&d zX$-QG!>0pua3Pk}4X!v_OMqWPtGpacWZ+Yl&hJF{rJb8Ie~~oS*5)}rhnXpS8i=>I zbcYIhT~PVqaZY=zFPWiSJQ1tbxi2@v3@7vLXWFDs|E=e5Hs|Ez=!7JK(8R^1ms8)` zT0U+71VOmI8!EqwD3<;U{mE7y4@k7mZ{MPW3Mj)m!TYR!4KFfDk(G>QU}R@T6VF;Q zA4@unHKIR>b6$_0DALJM6@7>``Ax0HY;H}nydbIBhZ?vS&_+uii+jHzZpL~y-=fg< zedNW-hJ8PIRHoDx?($oB^`?#}(&@%wrzr`cmTwvymT%me>scLTj0y$Y{tZ~0%i@Ju|3*-MYw7noZ@ zIOykXNE@C(8`I<>E&Ey~!A{<7B5kos&+tviNQ+1zEtYp7lzfFPgkD5QM}eKc#gcr5 zQrE0jrj=vKDfPi6fY2GUhpJ^4sp@C$vd(_Dfo-*XY0LMnW$SEjHTwU+9&UbV3H3(qyQS#S| zS3noIn&D8U);~Kt>$f8zcW&+#@N5vNP}4w9Z*j8nIgJ1Ab$$T@7|bc)B7g@F;T8PP zW+!?zCW?4cL5%3W+rE!h_z(ho<`70f*hVPdR;e>2yo7-V2CZ-Wzc2vtIZDMNzlBpKn*7t)gD&EMcq2Q~*h zEMVdV-!%lSbq2j_lOmeb-?0Cb@B+$JVIKT$tzS4+KFDR}G?=JlU|O+znbwaO=K#im zjjT4@^E3%4@c;?w=?PiN84M=CM9!_?OyplV@?wts4W4Z9bpxOc zyi=h4gMSY&GhN`N1&%uSj$wL`nwqN0y#^MB-?IG=qzSKOea^v6);vfAKmo}2vhVdg zjEKCf?T94|9Gd`xU4h zq5h-)Wjt1VM%@gU(UFHqt(s(anIjzR?AT|9;8fK9{Ql<-_x{tcLoaXl6!+rJ)l&nL z$Xo6mVnUR?PPXrV5EPDbU0i6*28!_}E+0oKn0=IEn4_wn5V^`Cn5)EG{EaGShh9z0 zaOchFw${Gns_@4Dya0^2-+Yr+1}Q&zE<5Pad{W>wHp##^wj4QYX%a;3CawQRuX?eK zf}gu+x=zuuXKYD>q51NE7hc1mria zd-A8dCubd^YrUep|C2Elg>}4GA*UU^p;*nKd0jdvAi4A7=z>(O4@)|2-jr(uITB|- zy|u1xcHq>(4psgO_^sbJ1y z7wH&%Xu3fAFY|jfBM>L@uSA|>#Ww!5!ZpmSiZ-ej;ee}d|5rvN0@ozRI6``8$n#`o zR#o6<%}A7V;u`c-oB2Ac#$8a?aRlVIPrnX{A|=N;YT;{IumAMZ>2P*0pAuNlJobKT zxyb4bv%L!1yWoh&9D3#8pu(foi_g)O|BNnIf8KF@iWVNmeSdaUGpRJkus8=zLWA46 z$2^d==14|(S+(d{l1qeNcac6q;Mp zXHhg|dXoa>;{4Be?~RbSfx5m?{nY{|ZSjk(iXm$At=@Ss;A>_)q=dsC+|%S?d7Ex;q) zG0&8MLyWy~Zl7W)h*~AVnOLCVLB@xR?2kPkn}DmFbi%T3`&UyNO2DRe_UZq8pHYnomKThbXUgN*=@Kt6vyg${3p(IN444)pIV)0o>06Ei38jEI2 zp>_6qbq+kk*73AiakH;5DAb(E-O(XmzpvhH{Nh9S4*v$u=5Z$8I+w*4 zIx4IsS4wWd%enSqW5T|X_o@DO=3++6t;mAe2uFKjIGq?}6u%N2CXy-RWMU#Ep0{DX zyW7X~ta^@_s1_Qn0$)|8Yh5;$@}}3B0h#Q8rD4Vn@&o#B>AXoc{$bg^A1iY{p93?k`xQ{8f;j7@3j?FDs~bFm2U*u(-g~;ffcw4mpHilU`hb>Go)yt z&jHL7%!c z=dAc#kbY6(8S=}IlQS>HE&MWm(ck^S_E<9f>e}v|yy%Me z-{NhjyH8YmqoxHX13dXcXTp_>!4bR+KtBKww^mfoquYwp<96?p;n=q9(9E6Q>KEXS zcu7GY9S~_XrvaE>bzh@MN%gkQ`(L|8hJ3#18uizr9q;fuX6CnLQ-tBQR2iqSxK~TG zIX~m3V#tzHpZQ%dUqUckz%w%9OWVI|>MWv6V>W zpontgkgR}maZC8>N32a6<1yBf)&-&#qM{J)!!?aDg-fIoYjPnr z8xTtC&clE*s~S_(I{2@Xa+b608)f-Tu=s%+dZ3+&S4K~K7~!6=jh2vms4H)nRocr< zvUj2O=wi3I*MsNW$Omx=$MY8~J)hzapK==n$I~)BLoUvc+QZE|SwfY~#mCvK=P24u z8ZMM&5%1AZlP?71a(i%522;}G!~@Rj&-owg<;-v5`Jv?lY9WwLe!m2FJ|Gy60PJF9 zMQ>(x=!88q*Xlv?;)UT62sng8bLMGOXOty-*hS}e+$W@q0L=?-Jn{Fi1z=<({%~5SeB#14Q~jxQz8XBRZ@aX9 z%|RFE+*~1v;2!~9%iKnIw=pF_S0v|^jg7)%tm0*_-Uj?ATIm@%977T6Wx?S7-_ z1XkV9)TD)tma4(Yf;Kt=YpeSa9jiakeEX>4>0P6Zh4Rbp(Vf{2(R{Jd*y7vn^y0G+uuX; zD#Nxx$j_C8pg|J!)A6W6nHytd-1*}b{}T)vo$A@exyGs*9nM6h!p9z~IL2d3J30?E z^yl++4lGkTOQqJ|a(>dsDbMJ4D8f7&J#P4?o5iMPml~ff$ju$9m5BD?M{^}sU zSK}qGa*aIO*65GTaSXR_F9Xb&q|7^Fjja&bLbweeYfscWDlp)h`toz`%*Kc<-^Q6i zP#}z3!yK6+$uS9I(Xhfe`BM^_TQt)GpQ&nPhimn;y{imU=15b&=2DvC#sM)FD^*BL zL*j^PX^|jocloR}#5GG+FksJTWN-20B2^?rDLBHMkRKQMJhduHV4Y~+&-nmzXOL#j zBG^{&v!+PY;`DUApGlaEa4zAP-$$_&vGN$6^>`IsMf_JKyY_^mo#UTtsc{%3g%f)D zOg{?Iw2%lNmstA=f51ng9Nt`@zuuKCqvp2Y!v%~wyooaP*!e%$pwUE> zXlOogmJ{ckqoyf_L8cL|X-)Okj~{y=ChqM()#xINA#V`^cZ2ZJw}+5*FY!tR3(+dQ zDdB;TLL&=BOxem$gxrI;N&rX%M7R$yRKfcPV-`qTHrRb=Z-=7LdQw10NWNYlP-^}s zIjLqrX>ZQ^!5a*htHq#+OoE%udnv-YteVEctCpsw zlHJzKPDmYVOumz))Dn&uZ6H{07`YzX;H&PqZcz`Er!|;#=cmA}r>FW-&Y=P0cXb67#3;=fdU{xb0@VD=WzlO!ARoMI zspQ!egqq3T?k}^(JWsd4zR+Z=)3iNehG5YT4}M|eo~$HCRPy3k`Q?x znDHS%K|q)R4W5K*#e|q7%N5ynrd>s-qoyX8RP}43eOeZD3{ohBp;`N+DDNbCaK^S< ze9s4r=(8d|7;z9r^?0r7TzmZX*+PG^MH21*Hk-VET{7|~59fWU+1o_*`IgE#spQ>m z4B@B5-K?p6PMqQCtzRG5U#c|B=vdVSZ+URPpuWHG{v>b0o~Pst5#t~2#&_QOuI25X z)NXgwej8tvb62%&8|nzpY%w+>dKx7HJm!O1vL>$BsU8W9-*rBFXlHDZw!dvUH-#w9 zf=Y`dn(JOm-g4&I=TXF!7<2N&A9DFYmEnFApvoN}Qe!0m?kMi8@7#`0|5b&p`J7+j zWiKza;uYb)Lodq9yWpxELdI8&JEY9<%g%f8&f)6pM!ET?nUi2|>0jb#yft#lAyYk; ziC|v1CbHBcrHhr>C|`E`e3>itrTCEVLZ~o{NT2)r$U51|AX3%dLNiyx+Dl6U97#;H zBveMBx!4%;@gK-Sv3qrU_8*Mco%1h+T5O1z`&3Qd{#ay}=GExwdaU>e`wG)jEHU3p zc&2M70@@-2xdV!W8Kvl$!#+rdg)3cui+<(o_7VlG9Z zh{t9{D3?Qx*XcTq&^S4J&OQ-jPP>gBJjek_ia}T*1yU3uuE&rwjEH`?8mu+1Wow{) zb}GoQ#7`e88s&nT5P={^#IFHBBXnCTlkpi+?Mo^L#;!aTiKbFS?)##i_ll+7|~&f6q#-u$;R4Mxo{+C`+M;Y;6seNz3Qxw*8g42Gtp zuOfP3ErS}{o$({JN^LN5K|U%7TqcIT2T~-@{=71iWOV2F=?_aiJb`cwDV>*aLDk1p z8?+W3v-CeIjCj`HU-GOzoA#jn{C!>bfEU}*A{6b+_K9fY$h&`&ME??_g%Z-1 zv4^*qq1IVR>Z3!U04wScS`&g22|)n$ab#=Hdo-j2MUq;~6F(3F+I4To`Q6Lno8ugC zlz~!o1foKi(cfgF#eUIi9>mf)O)YkUBdBWN3;?YPlHB{id)_~taX5k!<`8nW`gv)n zdaU>Py~GOj-+dE%*X!PD(AU=odFMBojG6uL!q7W`=2Wj5JN)A8^b|0C`M|KhJQ@Zz zEJ?KCqy>_75rf1f{2Uu2B4~{;35Z^X-#p7xg->oDxWPw%hhJxdP_?3!tQVo0XtuiO zm2GX)arFHO^x@2W1pbH_WxSVHw?Y`(=I7!Z|8yvf+Arqz5bzcFOpX2y>YShVi+)F7 zLQ4L2PfwGsHj&9D-D;5I>#KXJ3){xm4RMN!qPLbv^6 z!Zy8)D>jcfwkUFq2#1yT(@huJyA+2}%W*Qnr$sEU!03neTkrw{wq3z8ibmZocA18E8>bklxFHR+ zl&0dFh%x;1^GUgm=Si`sv7KA8deiQo_5vnl9zAQs8`>5^58J4* zrgb#kF~~HJq*7z37#hoq`NLfO}Z2}9xI3I=Wh3unq{eC8M=6mT+n{}(jf``l! zHJU8aGNfG~SFe2k^Yml+36e4olgsr!w-@DIcdr|Z1qq)H>3Sw=w}#qLH7H6IHrLk| z_B>kZJod{$2rB?=p}jev1=2pGr&eu@E-3!{?5A%28Qt?WgH;o-_A;)2LZAR@OK1iG zN_q!@@8md*lKDGbK$iD^I_=K4EgTb~60rCy)yT~i~5=`uhX2)%2#aNFn{ z`DS(gk`ky-(2`n*Wylx8a}6a%@~z8%)i(fyNpbL9ri7RQmqANUxag&^2uRcWI}Wd( zTQSG#j38qZgkBvDiw=XJgxH@5xVkrLb{g zDAElGjH=bXx&tPP7!EOOSQ%+-90&;k#3mg;JpX)^qs5I$=%WA5Z90(z%@$Pa%MS2_ z)RUNjjWy@`xOlo@2m#xH6=6_20gjiCf;mh1-su7qA;9Ye+CCINkRUDqr4q4B6dvdQ z_PYY#lWL65Yp?Ch6N&>s-<}1Ah2AHFNFCG@)>($oe*xw!?)9aq2oU~(8}D^A^k2M( zV;t~X`9GReP+_}Zq3zwEI-(L-&GpjNRr6^W)K95ppa$mU(YMTTfw2=3@~~48q(}O< z2(LJ>@V`P_941AuAO~8a_mjV%yMeX?s!-i`g{x7t7t{UVCAeI>xyrt@O^qCNz0C7QXc5!EdHa@7 zjzLoHiLmfD7-xW67gA|YpgCOfqJgG!hw0ACz>i)q;Ut5=1Zfmu6j}+bZH=dO*gXeB zbC3M*m+Mm7SAyj_cIg>vL2Xt`zd0>f6>{&g!bd_z7UGB7u@zv06fUne>`b0YeJZrY zY1h{2vof_G&C#IMc^fL*>%~*NIWt$w#NJReE|HI4R9>G-w74IY#8}idH1ytlo%BKb z>6NvXKKyU&d$WspKJl}Fm$&HRb7iqjYGUgu7Py7#?oT--7jvp4uk~?Fy=WSASBhCP z@pbC!cTbM1ew3AU za>d(3)iAPHIRYP?S&{ZB#>1zQ+optx@jUqR9&d(UFPUC`Bc?SI&R87Z=IhumRoO2W zJ@XQ|I!+S4$isI!Sj0%Bq&4SDF*bKkFQ)DI_Tc7n?QhQOm6Rse)jP!&MPzc1?+}x+ zN)HM*)qQRb^?_y3re=%CU%^td!+PMJZ0ll zZGL~m1J+B_q?OyLrX9xNMB%dj7jybR_@1+ zClAbOj7Sv0-HU&6vFGTw#yb1kGb^|cJA{`3l z5~{^p)cL$A%rDIMG#_nM%ug4#&(TxIeQ?PiRPjHgSXN-1{+ahh=E|32)v05iHA~qA z%+u1+(&zO?7ySPF!L<7bN;gP^@7b0%C(17Y=8JCCqrsLc?TwL z-kA-@8PUkQNCdbSVJW&ib+{2gJQU~6ITw$!c#olu_>V6S8hWAXXU|0axPttBTFjZtii@Rm19HCr`wE z0unxARH9?(C3P=<0=0W|Gsm<&=T|p-l6}4Ygk_^(EdPiw>_mV{YW;6Dg%yWd907*xOdp50B`L?GKRz!s29~o`)a$>iQ>AZjpBsieaojk2 zO2s{w5+lytY z)a4~FvssDBO$W%#o(%>%xA$~?!+AxjT*v*S*OE(yJ^7`%J>ES$tbb4C(>Pr-j$5hw z#;ka;!dKFquDco6c+kjXm$*MiFh)=JE2eq|3&?#fc=3%9C5P=eAuo=w=Lc<6$3VzFO5;@ud)!^C(@my20mJRXIa-n7EBs7g zU>^Xb48aA7M?CVrhfcdya~8f8hP-M~xqaLwgH2n-F~72RlzHxbG3)cEB_M!)cNp2XT}!(*DJa6F$TQ?~Txc z7?11k%Q>-&f`FF2NfHNfYiGq(p5&ZxFGG?|&1 zLnc!}i3H#_?1~uo>fylg<|YHOu`B^9te>?C93Q^?HcS_?a4~-)lJdX^2-k4E z{I_EXkW^4>!F!`PHa?U|@s-184k)<)t%ZdRAKuyQ_QAyZui2LUB0E_msP#4R@53)ZAvq$qo&E4?|mf)b@EMI$GPq&4OsSW z!}QKrI#j7jg|Hddo0Sq337X4R zk3H+X1o3aBS;bo|zg*BHrt8%EIFfAJ45yxu)URodgo)?niW=_7O>6_G7&|mbfcxIh zmbXM=(T~=7*WKvx$jaY_n_3PR|FFb8tL_3vOy;j2^m)q+-2ox&g0|yd^o!+in9@eN z92#T=d8Cp58K>9_<}NlL7eeuw_Z0K<8P6xOf?-Mbpc?a~s+hw$4|gZ@HMTQ_RD1F# zobgN&kByC^FgF_ZgY#CT-!O$GGth;zksZqjG>v`gYqgo0uBaL<4%?9I*@$2}#Wa)U zN-A!cXHKH-u4AO}UO@7#R%&Z-<9s^2)NBV=2^l3htC3=od{F{#-ws~{W8{6Dppo49 z6U^mX#>{f$q`~gtwhW;Oj@+D4nq0wI@?+cX(@%t%5@L_pRd7QIk!|}WiNx!{L(|6Ih=pPw7KBK@!I4<5r_zRykfd)>Om06k60@g3Z zgQ$OrT1s}Z3B>VF0K z3>KtiLnwnTdP~s??z~D5ZAaH1$*sA#dZW0zpUJWCQqgE1%!&;4(dVx)IgK0pGWGwq zkNJ!n9~db1Mx9-WlPTu=t$XYds0AO$pVsNzHArUDSSisZm}21;!~A)!%I z-QF23_oov-dz~trUYBtLTL1`1$1T>76bELZUzS$BMd696SLz^dzI(K_M>*YN?513r zj9=y)*G=9u6A$WNX^~Ra`)HZbp1fkdqmGA7Vo)?`Tvk%X^#l`{vsVRHFT+OwBdlEk zAb%bB<-mBQQbdC+50>viRa0x10ad_IoR&`)pi98{1Je`6tZ`++FsJ8;o)1jCrT~<{ zcv4+m4Lf-1G1xMOV69Gly?Cvm)}J?tkM5l$^K#vL{K0!3jtq5q(5g>vdjK}|p~S?M zjurD8zvmpuHFnR-6|`z9crWice&9VSd!|M5p^&II8TEx*!RDR)J%%Xu17=#sfK z2BPEd$MQ}qo3xNrG${^}(Hm>5s8HDm=sAwhtLUl<8%qkb>dZCBY}%j zR1kA-WMgOXi5ukqr&ks> z`O~3Ei*EcbHvmWQWG5doql61lk*N;95neiUs49l z)<6DIjEzYUqFJUKU{c9!qaBVpubzJ$bcRXQ)OWe_NNxTf$FT@E0xD%u|&%4YBrBTF91Grl-#iL7Z|F}gMqT3lzZFn>M zP3VYoDAS~Yw_nyf@spaQr(DnH&u7G*RRJSR8wG5CSls%|s^=_ z|Cx?>kt4~{Cz@E%Rv#sioi@nX+ZB&7x9dJF`U``xkB`}yN{#a!7K7t9&P9w6>sm^a z`xWVcWSDp}vibrV*TxHqn{35FnEFFgF#vKtw7g)pwLnk#*`P{Bx(d)nT%1u~Y2EGEDKRNG_clP$cp`Ev5T&b-P?x?`dp7OPY z>|R4Nky0so@%)}C``#P%hS=EH&6Rb4#JOgC0$pYY8zwxr;PtJ)FX;RDCOhw!YoVh$ z+WAi7e9_p3Dpv|WwT#$zE&0fQEW0~98_49gJWZ)M+BWg|?hM>G>)zzWWPkfES)KsYH|S0Voh z|D`9Wu+YVI#sKeZW_wq&wi0!tB9I$x$3A5)SczzezQ)(dDzY-h?sv0WxblbYu0e9_ zhf>(AGTgsNsth~iN=bPh)qd+PR(5G>RQ9$v&mBV_sLjDBP z8zwQPNCMqhiP2h~iaZjglp(tOh!A!w_g_?%)j{-MV%|DYW#sNHdH96n$*^ZE9xoB8 zyzqZ}FYa~xh4Ou48Jf;qiHP!xi0as={`{m&SjJCim(?G<;E}3}JxQts?w=uIg)j3`bYk z^g8ivG92MVW$cczZa&m^Rwi@=2>~O0n0C?J3QSB5=7f}7FBu~vn0t67rI9cr`NHFR z3Fy^5WeEew=_E0=vj$8k9QKI~+b*8^JKr6Q{=nxidNwRN_^pTC>=C{p`bPTkrvT;F zFmqkOSfv(Qm+`jXnx~4aQoVXi)I%ftTOS+n96f9}g>@He2e5nJ2K$iJUF_l&e}^T!$qVxyp>KPMX+l1?9+=&lH z_f8SRmEYfx~9L}uV1c^@@w)o3ftVr~+kMG%t8Kzst$OMtRr{xgCeu6KMGlg*trjTE0ak<6t$M*ik}e;kqphQZ zSg-|oU-(=61U=yqKkos5hsZ?E`bpZOM9tXZzLXlC4}$m`dxl&50R6>3wws*$e##k%pzG2N<2m+4U|-B`xw z%{WtBmfC!5i}*eq&O-(?{|MSvS>FQ2NMbrWu?1AmhJIz2;ODIlb=n=uS*<;Ma(@gG zOHutFh>54aq@eR(NvF7eJ;py1PvP?C^68FC6PUUORJ|l4a z+l3}_27|wZdpd%TpUQ1}jpLpE?0~(|rG(ZD*p&TGybV~Gu-P(U_^5E$ zH~Qu*r+w&&&Bb;j9#0JRl~~S;$1_AObh94DsJAQPQtLjC zPD?~XxSHm%QXa3^HtWF!jp40eIwqX~!caW5m-L^Q^zs!)sm#YyyNU1r(WiWP%o7@8 z@YUJ-5@mbtCqn}x$Fd$TdwA)F+9}>9)kJ!<3a0S9iSH(pvUrV8jS87NJ86=xyCjQU zqB|!=xZA9IO2Q$xhck4ckT&q!*Gb1eYa-Ut4h1}?--u2+VpL}1UQzcP`dhe{a_Q;i zKMO+U7yp;M===0ExNsqlv#{{&VklWk)r$lC@t~*_Yp{2eA#<{ofPHJsJJ!b~QL9Z= zW+KJZDaFZ-&gPsXgT*_^ZKb-Ozr;F^dPrR!R= zfL1%5yl2@t)qcwFcXQ{#^jWyIqZYx09s7?Gc_}rMN>~KdI77W^jO^`Dirv|kW)-`P z2*#3EzoCLT0YAT~v$J{!8?0d9*i^`>3L!wOdw`XNdZrPG4Ww{HLA|kh0ZxtpQ?fAW zj#7gXc`_XyekjK8sU#0*8n|lyd-F@KOd~bj?Z(yiomKj;qmsVSO|;?&O6$EcfA);f zmP#M<5p48I_hReDTuoCr@h)MMST4fG<~jlQd}>Hxj0nr(i*_8A-`KWew0l#>c6B(bkq_OPFfVAWYUs)CHpSH8cZ3kwzvz06#r>E4A9nc$c(iIFXwKE3459kYh5 zQxa{4#ar&=l;nkm7Rvdf()R_RIZ&NUZcG?(hG7X{0P9x?Un1vX z_m(lm%V$Cw`6EHt8@yjx2`Nz5o?} z)P8_V153+*FRu%`uYe8j>MD6hisH#HOTObKRdcNQHlGx579ue7XYFTCp}2z*5khH5 z0dV;Ow)c1wK-e2EZBJfFF}qO7Jh#w%RHSaCSyk(;F{Lu`xuic!mI-_U3ovz?g?|dR z-ZCVNXvjPheN={|o~@HyW}05)-|suI|IUg)ZA)czJ2kl?L zBnZ_k?66e62c7hL`+ja5gSSz=@3r?iHna5G+=Q~ArcjVCeePS2sU?{TM$35l!eeSp zMe#y9XM+@1p`p#q&5OilEirZHKM0{8l+XR`55tK179k0OdlPv14BR+w?T>uEyBSpmlZVm620JhmAuu8N<(k=R|PW%>1EJ;EmdTy<6 za!N+jt#z!^S%6Fo@u4xeji>x7t`jcD@QM0jb3updEnxyJDI6@ogW0!jPc zyGDN?YKhnYVc!^Kl@1PMC{F6}PuJHi*{&n$G-OR!Z53x;y6tcUj}(v5IzQZs=^OEQ ztE^5#Z91}3TmM0>W5(3P`5kbLV;=bKt~qVt`k(LY@n&Q#b}fZBU3HVnG@7bk<0!vi zu`;W*!!S+{3H-e0N{)NK8vjmM)nd>?Xuw6)Y8dZf`}k&QbUFxJ<)L^(Krrk^gG+Y7Cqy6cW8N z|38|}GOWri+QOm;h)B0|m$XPpcS;HJ{TfqITHDio-fEp0WBj~dnwl6X#TNK5KuYQ%^-2Qj@?|2pei^u$w?(){Gb;<_Lq|C_CxkJ9hfm7j233S6 zn2$>J|F&kP>E?R$JwJw-&T$b(ie2O>nURLu%+Cz3Qa-z9dR|%U31jbwg*tS6@8!K> zFk6+M#&o5^X_3ODk>H>~Gd5Q0r~S%{8F$wB@5&@`4CfAqGJ}vR!|FksN!l9uMbk;% z^Yjb>`I5&}Nqo95MB81FSDcV&l}6UEpG5yS@~EQ7$d83a2!tl7Zu0y6x^ZF=8{#{G1w35Lt>>AoeHRxE z+Jvms3AfolhN{-H;ah2;eS_Z}l|c;s{`3WzKS1Q(@8OHf3_+sy^rvRq zN*zS%F1!#(CmmB$RVtdi6AMz3qGRF?+JdkS|0F%Xm0A0F!PxRQe$DzKmiNx*&p5I; z1B!~#$x&4=ls|=`UVUF4+WXn1YE;W8S3`({il=E${C$;zN}$)o!!kEOe(l~YCtWg9 z0y(yYL_@KEp@xM}UH9>Zn}_WwW&O%i)v>xDwi-)hEfjY&A#s+s)LBXi6-v>Q^annP z#dHSv*t8XR_pliPR*j|-o#+Q><3z;h8cj#}CO)^Q2&NP?yvlo--udQExCEQzux0Jr z%q)|Ci~i^5NyLQ!Un&@}Sqh{6Ou6XEe#hP)Py|SYX6g%5h1?=4my7-i_1|CJoWI|H z@o(U{!xAwqMxPEt=q`@y3%PPt2^mwepk#VZDXH>>PF@o>x^Ev;TgL*J=+gS)%abF7 zDGBiSjyy5^D6^~L7|U4(6}Kt7999LcZhdl{WVGGb-=6K!A~ACszmZdlirl@M1mY#_eJqNMGk>P zd*S0fE)Ct$5Zrcd%SJ6s!Cj}xmLI;$d~Xi#^G6^T5@1R5w{+sme<{9wu0+vOvvw?) z&%=CBFC3dt;DQ~GCd2QykaxAkSnhCG=H{_oFmZ1V$#Ir30cFTqgK1@IeqI_4b%u@e zX>)Ip$hpT(>pvtyB49~mQomw9_zmedh%Fizq?&FnHlZJ0Q_J4H1mQkv2d9pK!7p-< zhOE}Xg$sh7S0GS?A4K-z=Bs~#{{S11f9S1Pkke%b$*oM0?f^!2`Kd`9Dhvj7&z1kA zhQJ9wK=s>01(i1fGNH^hGdDMGNHoR^x_WHnD@aITFH*^B|H78-xxw55aj}QhPT;nNs_#F|Dof_nff{;E$39`9hb51KC!2`Ih~Oipf`+0Gr+ z`Fa0rJ|XDhqJJT;T}`7HALL7I4hzNIy|>;2Q0(!V4)Y4=Go9_$?sGJ?!3Mw3aw92< zGy>v<*#?$iI*CxOUGBENhei)@_58xZe-PO-K!S$YlkLG|^$j_$yU)=A{VlRRGTva# z4|V?GpRc_8+Qv9~svfT{2#KTl?DmvW=!IHVa1vcoFBMIaN=ej08a^(8-V6Pc1xv0p zkMKs0>h;e>Zxv?4M!p*!*(Byu6Us^Y-*IH2Q>sTU#E^mmUV>GzWfouPD*-hsW6C`dG^la+1U7{Rt9J5~3t(lrI|t8?z5;719llzr#n zOF&&8wILg|t6Agq^bfK%moIXvno$mpkB(CXBab7lJaplLSw_b@r0o^q#(P1xCJy)J zmg8@Y(HTvds*?oz#>HKS#U1!v{iZxPqfK+jv^AcfH}l82>t2SEb%8VTAAhBj~M*<3m?_$+%^&V&+rAr{f+s zUVfn_)_*P^j-C=IrNm8dyE3OK@W(>0)PoyXu~6jcE?2K3fi7<5{Eo<=ML`ISNn2(; z)Te@)uFXY~hC{xcnBGh&De=wZ4$ZoIXep0^2$zhY8nsz+#gcF;8_gBIOmau~mvH_7 z5+UNzwq)FZ2+>`RVLA9=s6;+PpB-lG?2tPP@AUT z57EIO#E}Sn%1LeO;G3bRJrLZXUBU9Z;L95G!*}Qb@O~9O{;45+eKaO~bGH0nzL?)d zkzYR|B4lUhGeg5SFFed~d6q7FvY!7w5Y1L$bvQkonG@w~F0;RCS_Z0QaL?R_;wBNV># zh=_c?qcbj1qsaouCWSKXWuOQ)BsIIe69RTU6og=)0UBQ>_%{)!h)*W$OQI6Mvd-SG zu*M@GP)txNby&pl|5^YC;F#&{Eq)4N9~kK#jrnyh;> zKso`Yqan9?b{nDmtU>ewR)l2G+fjKZgS)3~3|2+*J$a_NI5wj45|eaz431>O`$8DO zac>FI?fpL7PaE1MEkj*MkJceJBNdD+i5^bBEAwS6QJRXMT^EXAElGR?!IS?8%#(1iG(g3 z?HyWh81qvliSLtbQiif9+R0QnW;j9kHB3BO!h;8$(uGm1`ODnyd`I-LWZhW;?VX)c zorz45`%+=4^2jWj0~6qaD_B50iUOgQ!6V$ zqW)Vvo3pcXez5>LZPCws7@m_7zbex{#w-Vu7wCB*UMsXwC-w1>9A&F3D83PILJ89G z*B>Q5OKiL-BZRme2zD~$93~Vb&?zgW`}7TRuz~*S^DuIJ#)hw2T}K(&9-$SQ2jhm` z>*Ci6@b|-4G-_9SEOG=8Oehw(A-@d*%#S_wd&F2CDdmj}bKYKYepZtNR<8F$5Fm~( z4Wi?UqQAfu^s{$#RNFm(RUyc}-wC=P!d~-}FXV-QHwg1lw`g(fHI_2-Q!ul6z7-S| zEni)Mx(YN!`_}LmgSTzX?iVKpT+0Y$Bkbx(qf4gk3&QoG5JT#Xk-0Nd17R}b?Q~sc z+EU7!5M@=J$~ z$x=OjnIBPk19=hboa@c+vb^F9O{mcI8o|G#aktqF_f((=zk`GZKDtTn)PT{?H|~b|$)%@57rXy{2F3aQU!A z-3jxf%-Sxd$vvCdQx5oPR2(WMsAAd73(XzK9Ga0Ni1WV+V51DW#_6Cdq~Hj1{Mngv zQJP_hmB27k?_CWK3h%;WJnLyae?iggfRl^1?vc-}8_h(w=2ppuv~$aTSSA#yki;n5 zsFqDS+6c{*j3&OPSJ<)XEpMEV+#L{9gzT^_SX^V{7C1f)U0WMFyqphit7DA9qawtu z-uAXnF8Q>vUv&L*m3XOnR+ai2SCXc+i|_XlB9d z`Dici*D}frNkhTIQ8`*Aae@u7<(ahYv+f-DQUVvN%Gk3L;cUFVpsoQZeI86#I>;AqR)c$_&4Y;1qkY8
bpCC((&MFu(7j&8KKHel{~nor{^&eSSVm=^_WUp+C__n z00gCANH7FcCiKRL;`V_(1eAfoj3(F+*4j}IQYboVY~g+H>=2@7aqRijmP3v3eh8M< z#M8$tzDp5|ydTBN-ou#fSZcsUzii|g`(2lRj|OtV`t|s+G&qT-Y&K|kptc^#g_+2& zd|oXy02Nl3SE&~}K(dNu1EeLa{^?8d46JQ!Eq8m*LOpOOTy|e=VhzLwc%@**2;OYa zYs&w;iLUUWL1W+xB({K3-^#4AL4@PcBg?;MhMa9Lb#>35uGnibsurBg&dvF}xBOLO z3(bdvK8#9>npv!(fdII6?Aef~P7?$U6mrVLi_P*)sa=r!03H1C%_FqiU`0EAeKhB` zFitjv*syd>z#R&wfu7bUZ{bg8pG!-J*PZKJHVHw+j7s6|4_d@QF--^L4$dkp`K}!R zD!{c2X~l@#w2TUbkL`iva}E_PG@k_v0HEN-B*)3F7^#4=2Tm;@m}$?m*ni5sWcAZz zNkL>=J&d-WZz`tjfRPH=4#w170tU|}ab0P`R#BU7rdg9&EPsf4r;6A9Xy3vp*`1YW zKv{k(Afs_;x?ewTW>z@;dDRSVCkx)IhqvCb&K8KM|aW@ zJ~mLlwhKQ+Uu^x_nC#ii%-?eUdqM!^VfgZl+Ptb3)A(*@qK-t)Gb6Wuw`Lq2P$}Lj zWjhrF%1t&MoV|j)vHMU&bO)D&Ysx$OC103rI<}&c1lw4SBfhbev{ZUW zxD#Crx|HQ~wMZCh7#$u;l%mF&T2%GmLuXGd^(kcQht}zZ9dqN2Riux|?LXq5LS35S z=Lu1}ppW?mAQecomYmiyScVG`?pC-x9_iSC$mS78u%WTB#4C-TkygIG*$|1>vL9oA z%K_ptZDxK25Tj#YBL}ps?e6Yw+Vp~p3sm_C8YzgoLbG+Uz$^)ZxksPXDsH(fBrkS< zVT)-i(GDwq3Jh8h_dR|5hHTa6wZPq1&!;j0=drs>Jo6G`P?Ze1x1he$1v2uZWgBVL`rUI|1pkOX| z9O2 zrbnTZmHr(92qKJY;Zq=|e#|5gu5UyMv#_uVwYc8BONe)SbNE;J0lFL=E-?b&hlKD_ z&1_p)ofcdg^%7eh11jht;{6mtNNoqUDCmPDloomwqX!j}Yhm;9fV(*ol>QTQFwh zQXN%XGQ=IY#o-)LMoephM@RQ4Z!peIWN5sZsQ&j&FvCOsE|ESp%AwNHEp7R90aJcW zF?1XgQrrRl`GGDJd7e9!%J@^A3G(>jbYYjmmi_@D%otY&VG>-b#p!#1iDb`N`k%1VWFC{tCu(QS!`Jxb4tqcQM|r(L|uht70DbR_cT zmw+#Jm!k2CKk5zR)ckagUfBluT(f%v)Ue=NG3f_*AY5mN(v$LfP4*mNsf7m>I0J(4 z=Dr~P5Sc~;>@ISjIZliqps#$Xek>))&cVS0er`mE4#z{5N*GMF9+_%BBQ!($zTyM| z6|mC4hr>1@PSx)MvB%j%bhB>%I|;)($&4!+6k zRm*`z)m0CciLfsvANR1jrV9Ens%- z`>J-}792OQ@%sWHn!A@UxqoE@lQOu+1F06FlHQysU%nK9K#JA(eg^QMr9__4F+bix z_#Y7&h=}vCzaLTMESA;I8$;qM>pK`2R7Gg%3hxl`J_U{hVom`9rvGJnBZ#exnS&s= zmH#@GuU%qk|H(6Pe5+~B?hp~44lKuKJ-a|wcngvUAF*de4WQP8lt~78FptB}h_9W+ zIpqRn!s;i5sD;3dU!F>Bnx))?jLtDDx< zkK4|DGaC7M@}=L1UG1ZHYC^_Yx!&p)zK%AL#to9B$qV4Xh}Ohx>Vgbp0XU-t`e6?5AEdSKS7s4YvWZir4vs_W6Q6=PVbp3;38`!MUlAIjS+9m zw8y3C#zgE|&~KhAVnEz5Y)mY<6vr7m{&kmNQLeMWdVGm;f1XpD01knKEr*}X2@<1N z-YjEDrE?9^T?8R2t)}7@0+c z$z~nh3ppdhjN6hJrvvIT*gV1xa(-*74|wR_=Em!Mc=zt#KLM{pVuA9**+aJ_tJ7}8_0YW6%}Xe96O@#A6pj?;&(fK|MQ0q#$5{xu5JffA~cyCf%hX*fp` zUM9(@AZPEQ&2W36^C3j-8vZlsdw+HU!V3da;zq`zLEf&cBvVeg7%Gd{x&6 zNQVjj!`XqRUH#pac`uRP0nwKJ@anMY66&ef8IHTyUo`y9L!IMgUFeXh18k_(Z;vvQ zs)ao~E@^7H!uwHn9UijArs9h#V0V zT9Mna&&yErJN>~f7{N(RBU*Q!4o+xy)L=3idtGB$F;(LspCJ2QfUr-)TU5l-sesn5F*CJMfO#% zgUiVHq1vd#1KCQn2&s(RRQ%7cCy`i?8`{<^x3cWi-GU3fX0^_Ou_f(`6dIJuD#qP- z$p-Zr1;_q0G>k={$7f5ojZhL#$YsMT!2@TAb`YWQlo{;SPMM%)bi&By58FrpX;K1MbNVBwbO8 z`AkWvW(OxsmG-nIas0Sa2~^tmW}i|7Qs!2~#osofxBA0`7SVny+|fpwVbxFnzR1^4!;~W42hnUSf zAwt{{xF_}EPV4e!89+F}-~r6Fcwaw0H-;t~#)Ak55x|UmgW$IjJ4oO~{V2ccFL!{q zIQVsNB#7hkPKY*qK80q8UhQ>wUyQx~TMi(D{}uoUj3FR`JrImF5Edv+)McXN3&}Mv z514-~{IF(R>cSW!(-9pGWK(#1U^@f05o!qVNWgHh$Nu`4{XW8U4Q5FgIi64Uh;$>O zoWY+s7^~sdU9C4*(eJacil9Uxe2%9Jey!s3KIa3k_zZl>YjPO#pg#jL5)>of(%ISA zp0T9VZGLY2&ZI4gm!Hg=IT$Qe<@fJKwu<`KsSjdc4-ycNH$Tx4u+@H)HULazlOGdJ zVuSI=!b5+urPVsm&gyhO{rLXtjWOrTRp(;K9sPv%*G3oB_K& zyIzRHdZ{;o*8Ar0ebJN+g8K3X#<(KDmC87;+F5iCm@v)&B?@>!C~x+{zzT)f%OVa6 zguJ4z?mwv-e8T}yZ$Uluk^r z1j}jfv%JXVf*S|v<-GPF0Avg=rUiSOcZ&!S32W46#@`$MUS!L&J@29*gx#I!Ey1L;K; z@7lO8p2(l1iCu9N5-WRpg}j(_WJ#3C^A@*zVr0WFp5}^^Q}gX@At}g{&9v9trtn_# zo!)jCWtJv8s&96_uh;;f`mE||(lMT|TXVHU(sIq!^7vstHy+4DN(Wcy80hBBuW_oA z(P#CI*;N-u$BtOi_f{A*c35+~H}iB#j9Jn8^ff8i=)I22p96u?1mVuej}swGQk{_o zjUlx7>H*QlHk}pz5~cWPVL56z`BLHe4(L115q%r#+oXM;jJ_!$ONeT4g$ec6dUCk@ z{^_M;`JoDZOyQFhZ?#7MHn&Bv!A7>%sV z50S(qsqeg#S+`5oAR5H$S^ArbXI4$Wji{N`oV?b{awzpe*Ij?d{_58@X*^oWiL#^f^o@Roj^n9T-}S8N9eArXR+f`B@O z=)S#|(CPDtjV)ctWLxA`bhYv>rRZ_7>VBEMPZW@CZZDhyi^(^!>9hAy9%8l!sT`!# z&mbqT#@57R?9bzE)^W0zbKkaqwXCsg_+_c!ji?#5o_e+RfFJ2U`NIFE!o#hOE&94Gd_bB?vk5bmu~eqNJf6AsN~DSn4bolRO$t z0NoCTi;;)N)JN$jPoC7n&jc~@b#xqwcdQDlT-bg1?k7Uj1d~vYi*-aa@8gpgI0j%) zX_DXR8G%9E?^8a(bNO?*C+-c*jS#@c{pB9zHYegxGC}8X*reczeL8Q*2>XbI1z%XV z^JW7(6gOaAM35j>v%Sy)7at{9`s)hc`J23UDPq79mexOP^Q6vc8#i;t8ec)ciPq!S zlbXqCJKW&FzPW7`j?({_WKl<2Ob7q<^c-c z;U~(dCHgt0yR@`D;l`PEvqg-xYjv#1D=2B1<@yKF9~PY6VQIPV}u{t)Kw z$929F=u1Q*&94$|Eqip~(p^Fy*@f&_*Q}rS@{@y?N6eES`pUjJtA9UgGv1P~-5sNp zIzq)USx%D5F>U;1yeR9wF3ik9GIKVP)n>Dl{_nuz-&>{r4p*De?4SiJDovUq%CkFH z+IV1SE6|YRP%fYOmP(iPArhN~^cUxS`ov+ApgodU{TOs@LtM$kIJf(rrPPH(3@Xl& z9X~V;nNZqE(S80@$m#W6-@BhrMaZp|$neI1mR+5DYJcwhGPFfC;iDpLK{&FE=Ff*m z#VX39hmB-{p26E$te4n3Qm55TDve*+*4vB)HIhw#G9Wi}lIaw-x+l>unv@ zYZtUdXMv0)ao61d<%PLgr6e&OdY8juo_;+?*@yP{ZnMJKZ|_2iO2 zKqI59EsgKOEV+()r|%xwdcObuVDtcwSABx`&%}Bm-(Hy>F7N!BvGm<7m5`v7%a2mB z{QthQ_#MhFm@x>pM{HbcHZkAal;2Pa9<$5-#lk!D(cD@_)#t0#j!2=3q`y3+G_h`! zcQFnP3d7t>BJx$rNjJ`qHyYaFRegGn{I;rx!|$XuZ(*~drADH4f*J#5vc}Zal}}#d z9*xr!4c<6O%eg98)%&=fK2-)K0$`bculnw+0#O-ua7jp(Gc~{a0K<0Z=?;_GL(net zhPxp=m*9kj%NwIWy$|22En3|rtZ4b3%Wx6jt~@!? z_clWRuLWp^35~#;zZkHK0CWL~YRfPCwMrZCct=rKT3Kn0XumIlQl+CYq7|xD^ zD^7(>w|`nahV{@Og_?pqaVW^I4`bb$f+TVbPn0!gOX(_ z4^kHZ8EMJQlR3x$#U7|&9kwR94&$D)rw!hy5~(WJrKuy*KY8$m%)i3qWa^AMMs~1f zWU>uj7dt>NI=@TsBER5Td3q;Tx8fo`r)Thj2(a54EYH!FL`IbpTqSBUSec$kKRN0% zm2up{vE#5Cwh8_|sDfF{O+9B2)UT6Ksh&VIaa+Ba<(oo=t~E-fwqe=aB7`T}G|JTy zBq*lg+==t$7b_6UzqE0+cknrM$$sIRs&i8LN=mOMz3=?+3|L(h%Op zk#>He&o*OZnj87GMO-dAk}j5hZwcvN&%Y~yo5i@+?*~7mxkI?7bEs5QM^7@{b^EL= zLf+YMFX?@(iy#o^OEJdA48O)lPt!re#)&1M(u^jU{=k<1pfWssJWIvB?&@xe(QrlO zAN)M+gpnVEEiO!zEYh;KE~9TV(Vfc2a=Vo> zPa=So>|Ikn$ApLHI+slCUw)Ux=I_r{aGa5)sMqD?LG zLn1Z80XaQc-qT6CGO>A_{{DT@*!uA1akPh@vGMJhnnCAHP#lBeZ&~qY$aA+y!BY)Y zNoSp-owG-B!g;XXD4$Tq1B4pPImrZ^I`cEhM7$@@cwHtBZ>}%TVQ?{kxOsEzcuAo` zSe7OyCx84-zj%XHSdS&?+)s?k7s%d&)S@|fS8=z%+$2= ziXKKfh%N!vH#|!}DKf086<`7R=1mfeQ9+1gnXAV;g_0;-bq5ubn0f@U$0-^!8p?jU zHB%c0t__fR0&)-ja#*ZDp^un@f`tV*D+91PwN+{=(;m2@g~7>t*GAh;0YQEjm>$4% z140;q-I}MvmLcE?sC#Sc0W>$*oBq2ELsOFjP*G51uO(tO%xptEqVm@%-YEMA8i-}< ziqrX{;Xg1wh7mR_WqdAANSr!h^eusAZf>5)UoAJX{W!eF3ttgZp0PC8iR!&qNHNn@86<#i^mTuXh+x%^D4ldB>?AXFqcmIe1Aap) z2`AkA%&4uRhQpW+xny{68`D|lRaI1$SSqIJm%a&)a+tipyta$^yg>Cq##6!h zdWpK8QJ!o>f0e!0fATK&-NRnxspDdx@VmK7Uv75wr8o@b$`~A|Af~B3R|&gbJ+*BZ(zze161tl=0j6>RmdHxlRwHlgTiu z95r>_ZZs45)tSD?v4((FlV2mc?l5|^peVM2By~M}lNYXn8$RDwndDgNyEPU$xlB`K zm((>C`?L6|v^Z+tsWwK}+~ilkZhh49J^0HrTi4u~5aBiTTsXGmfOjITZvgkL5-Ewr zvzFktZ?XEx)_4M#vND@L32%F|7S>N0o4W?u2&y_dNAlO`>eY8mc2X3YGcu(f9$ixm z>cyy(D01N~dsvPZOEJ|ud8KHwbUk&WTwPjGl&9%E5X>`)xLZE56+aMDQC}&YH$szH z$?tu}*|Lk6yYXDl03jWo76y8GG;u(~!+#=d9c9`cH|ML$o)IXYIM~?}`%L52L6ZR( zLql8JK|=x7lt`my_D7FMS_@@9{DO;BZ`gMfK#Rb8-~Y9lp913#le<4B00ko8d&Qrn z(qsBE)TkFgU5;cATZ?{R#O9*)IKo+DVQJZiUk4QPZhNTq&o+Eg3n^FVJghkk<;*g?}l{HJ`-c5=ekY%sJXU!ACJ;jz(q`vHiB4jH-;2tCkh zan`zJsEc!IGmmYzue@hh&kA1Z#VC&aAo}{vO}pw^6)M@}o9KisH5$LRko(W~;`5hp zUmh~*64B~pnqcH|JChrGA@?{{%+WN9C6W&;o2E|fz52Vcp<37E89Vq<{voAo-I-B* zG71T%th>A$xhxJL?vOII4VFaIhpcBV!UMD>DI~13%JeRQYM02a&*(O4)dIq#1DyMF zSU-%sDx7bXXL^G33sdL82dq@-;W&QpH43{&b`|b#QtZACslF1DZN<7geI6$NfbdRh z6b)5UHIDk1v5z1uRUt-aS-JORO1R9mCpyw*hWyiQ`mAsM&>k|12+&j@)1*onC8Igb z?=2}ka7BKF|*S`59?ues&;XGUFaf$PX zqrEp$2Oh##x>8raE)!EzoIj1y5F;nc%Eqjz>LfCuQDM}>r1wv2i#yWqPN^KMYb1%T zNp)PArw!MSZo7pgYtUfQ2Fm3o$N0wUy-z;V40|8G7>o7ymB$-0Mx4t|9JO?`f_$@O zLCgGiGLffa7^eZAcq^|Ix43=f*lvg8e^$a{35mANhv|jHhT5-NIaEnmR9lilYrkdh zcs4Usm%ZS%;NurLwUc3BxOXXZrZ0|97Z#qJ+3whHT86R0*&$S<5L_bN@AUz-7+ ziH{2&D}hGV4-L|R+)~?LPkxM9wcekIWOCQ~TeL%+`RK4aB#KPPHQL5E+1N2q<;mag z_sbLdEPCTK`PGR#4o7Y5J|7;iimu#TE_8KDy=B@mo}xv>Pgqs=gF_h=lZ;bo24?Eq zTwF%N(J-xq38w?_5h=X)#AC^YPExD2*wdCLD^1LI-J$aR+CSasR^C@T3nA&Sx`aSA zVx^+&Vavb_Gu^_DF>I8qu&LL);C-@iavF7ZC1v4+-kYWdCTNb9&`~qQR*qYdNPRLW zS~r*b=QmtB#fg!io-wO37+h_e30e<$P%&%}Au(JoOh8Des*=J+1~XRsvqhV0({=VQ z<5rbbRi+2jE-xSKrJj&+S}`u1Dhth8RYyOUdH)i+bX=rBv$r2JpdN2}1VBTDw~YOc zWMku2If@KPTyw^JnU76S2eY9=ka=1Sc2881JtPD7-*;iUTmLc^=t(eH(PVksvvS#D zgtqaKG^?oCC+i{^W)>h?X1K3eRP#E>2I>e{A3;j%&!70Pj)v(Yh$WD4O3TY1zV>EF z`u5<%)N9VQspP0UC9NXMs!hmCB73gJlD}3>%4=;Mo!_5)NMNpr%FNk!q7_#C9^Gm1 z`p=vrTY{`ECMe=!QEX~R`31taTxu@Loh+AoUh4WqWL3mg$T0um{+YMk8D4H2>=3FT zgT$g1*-uQSXsj5J6wmHuj(uGt_gIg0_!8>H+BN_gRN0`f#jXW!;YUm-UL zX?8kZ5z4DLHP($`LU974WM=6<%{lps5i{>V&mzi&m7YXU)JuFRh zD>RBXTfCp|6gsqE$8C4;F$KdPjVIH0CMc?{2H7x=CXDGQNrFA;GjDsxz>lO_#a^2P zC97!HmpKHFMoCMDH-A+;jo6f9lg-r>!^c2dGa10{k*8$~;|#B`4U5ifw?C(5S%hN=ksDWjEJ2>REj+f7C=~eqw*+(I~@UOn9_t+;|^%24=-U;`qu7 zO$LR0jSovA1>TrF2iPLPJ|EAO`}3B0AChZ7cXMdM7?02u+$KDhxx=h38DgHOTyJ5Q zVOK6KXp+?DnLkFMuo5k(wJC9AoqeKVr5IMTIlk#a`vK@A44LXC8_p&ljCQYm7nocg zN3x^c#w6o!1BoBZ>CqDM)5wI~hoco;80%+9J{a*#w~9i84|OP08z`m@r{Ag+DQ85~ z1i@UMhvHXuA8gMK&YS8Nz>@$WPuZ&^3r*eC8w|{mG)c|yu`tOm0yHO_2a#R59+` zv6&FSH?_gL5B>G;jF`FD)Hz8x@8m3w`8`Y`<) zRL7q;59Uu>(m)R}zlB=_XG6Osgc!q)K!XXN-+hk?Fi%$12plQY+pwdF?4m)%qWA-p zf5}x}3Ssy7Bt})Izu!sTaF02d`Xjun@X&(y0nmfc0c^~W*ZitY&z$Qxn&ppi4dVP% zSzjq9m{p*j{ULskD}w{uS`XFUNWAg7IN{`f^{rL2{W~RKVe%PbCQ#x<) zRRpCCZPna3_776*otn?dSZ1hu#cRm}Z46^NJFf@xJD!o)q=-ji&=7_*i50^;A@GMk ze_)eP*V>v|WN}b_CoeZy&|iL|Mzkz0o8JjFNfT>3x2DyI7{_uSmM=w-wr_&go(6}O zEmKEcW+1PW&3@GCB*OT;cx}(5PJ~2`RM8x5rlO|pXhQIazn*QT%vY7q@fKE2v39iP zjlXiVt+9h~QkQW;Mbz@Y=b+~Bdmg<`v}6pW=$x$5>$ckerQmE)Y9-jGPhNQQYwrEO zfyQV5{%&7jCgY2G^?A3RIBZ-tylEsZ^!r#l%V6w-CYQLywfy@}L*mHi%lMBvIIPmV z!IU~G5-$5;)|i&^quCu)N9S#Kc2`&zE|64y(LV3}+EgFAC#ECfTOmI4%AA)cZut+M zP7z;@6cQd})ZYTpZD2DWr|%dytZwW{`5V)FLXzL;orp^ zJtDH~ykFIY8+3!N_EYMvZSoe@ekiVZBvYu2b%KNu{?L!H9b~zl!gOW4(3vaeZF#$i zg~h$^&16}=99^SijveO1up8u3SxiLd>19&Q+fmN#lUq%HQfUP^?1{W0IV z#aMJc%g?EUOsvBmz`}NGW}e5c@QmPHesp2cdzCw(2}q)DPeg1& z#<*7P%wtv_Tiu^qGctKbN4yyiN*J>ti@-hGg0yOmq@Q&0gQb0jalUK^L?ZC`qdxli z^VuD1NOZ#SAsudkrKCJIGVK2s8$NsZ7i;#5bsfu#w=%5@%PV(HED_prXJuurd~V!X z5?VNqrItiU9}rPC2y68fgwcQqpz=5hN{u>?#SWeE<$ZQGT_= zaYN&G_{6UR)*XO5L$ClL#~4a&gx3=)Y!E7u9PS}vj9bnb;QvF3(g#)$V+XJpLD>w- z1F&ip%xvG@13*GNfDECFnCi#|$O@#&hh+7pgMQY@8VJ8K`*(8< zwKHP33h@l6SY!;D?D2ztbQg4fkEYzmR}?TeXXrH_wJ9xgxT$`={zNce3%yZPLVin@ zkCFLfW8Wzjr_r{F6ydr{1FxPf8%M}@MZMC>pB^F4?RXLS_JH2Y;&i`zvs{CW8JY_j7w>n)>+xaK?YKGGgU2H9MIz|N6l{9&_x}`~^yE>3eJ*!<+F#X6JJp z*O&$EXv{q_a^m=BANltsX_DHhAKfQNayDQo)L;0f9g#gwy7M>;CBbMgvBPnhT|MqB zjk0yF`ZuFJ_4(C{g@3NK^b6(Dd#IuMyA>KOlDG{T{+)I#!_NjY&*YP^JznS_8%Yr( zA6+B)_yKC9Xnv#OUoTh7^-)|x?1R)hsdVbs$Z|M3{HDbF<_>1}+A$>DP zPT0ZSYbt+ilP6K(Yv;D_l$1VR99@a1kx}bMI1o_#NLY(~ZI$$TRx~naz6f#6_c=0= z?&lgPX%p-(VOW-jKO<4-Lf=+Nv#ag;^;dAbpD89wFy!T1gA!Gf#&4Gkry_sS4bO->;xkM=Ju?ujbClpOUM$4ONN@m{-#tZyqJR!S^k!LiAzYh~_>5ThgD{H6;z#;at#*7&Ow5Q~EyTOs z=KO~yR878d%%Gs4kisP++f!lN*ELX%cky^fP`KynJKK*o$!&Z&ms5?s-NI%anz=be z5mH*^a4JJ=-F!ul*)N9mr-B>{Hz*bptv@98XjB}<8WIchyr+%AQ-0*WWBX=!%QYOE zS^^o{Eh3jfJAbbeO@K>sO5lg)2~y!3EcL|Q&W#^9PX^FLqgcO8j&`?8c3Vm%bKdh7 z#>(2OdgLpc#|-!X+DeF0Z|9GZsIOyGs-OA#o6+w}=7<`adq)0Sk9yUX zY8WMzLVDqYHxNP};YOgO8Lf%4E%V?-myQIzIwcpGZ7yvcuCc1|Kf|?xv$stO=N#qR zC+g@o+q)AX3AN{f`q<;~H$1bU^GL1teWZ!!*&167{Ns(~hSc(Bd7E2Q``_HV^WMB9 zq>9dnjM^scs26Qu(|XomCSM56VT{5zUFXgcRp4+zd^Y{2CiQpY1PXLdIwmh79g5&_ zB%DAexxkV67DLP-9yB_I2qSMwsRWwXM{EN@lM+&dowpfl9JNs5a7LXlRJG(^Eb}{( zyfBrQdf`JePLpbT(1o965JP3NymGfcK&EJrD!J}04Y%#s#%@K;n~<1`#}{gNGbuVM zm@ii3duXM6(Axbyzw+h363~qL`aPP`@LKx;YZVDObNt}+)=xgBID*OA-CMO2PXzqd z$-;I;I{#e&z+mX9U#RH$n5dCWlSFfiq>EGFU>V?FYp`$sT|G@WP`BB&fh555b5v2e zvU#dl0=GFAqW|{Z=Re%s_q&K<9s}f`r@@&Fb;1RD$HL{ypG6{FA@_-3#Rm74?|PbV z1mk<}QKhY_rz$gwM^;K>le|C0UcJ)MLBvh*@W3QqT%ixp2=m6f!x=bFJ%l}vnBHG+ zS)4;urTsIPS653!#p71pC%8S8mA$XA8c~*!#R2ZwRbvYaZ~>@5%9~F}A-8gF1=Mm2 zi3P<|HU1-AutDPnVhiYha3nYd1o~hcrtGW(uJK=gLJZ0+O35YA@al?J+qYdaVe-AU zD|qVk=FOO}Q3J6=Ak~IzBSWh#C-EMFp#Z3)WkgK?8cNVGA&5z!+#fi6DxXMWxh)8L_L$R!NCV7+gVG!S4K-821irO^fr;| zUq|K&Vg$)I-3S+ON{(ch4)0XtY0JgcA-iS-5IDR!CbLMpVSU&X`2BHjA^!2l*af8Z z!U_$Fpx0t#UHq0Clc zXE7e5`#~`yP|?(umLCLS54g&E2*AdFfR(k%%jck8O%qM-;f!l^E6Y@KhhhArFZkE+ zXtY}I;Jy@yZg67TTh`xBBSyDyzvS9(-9OPz*=n7A+%mUa`PpP+;oo(mTUKQ4OkSkE zXe%Az$ewEicBNy<$KTuBj-Ng(5zoA_tQN#Spygl3xCMnL8#@QjQ@?oYk`nJLNvwnZ z^MSLd7v6yp{>|6J=TgDcz$v%tb9PQ*e3H+hKDhTVGR zogjWWCeB|lBBZuuBy0oDSzsE0yZHh>wHTxgs`l+XvwL%{&T?+Q-!+R9?SX8+5~*y@ zRq3NnFtmZl}0C8^{Y3j#k|vLv7oq!ncWj;jv%mQN__^BFjX&zX+tvoV2WN6 z5(t6Y|2|T-wiI=r2i`0om7PIzlT`1yE5ztagwd)U2^x9D>V* zm3g+D&mSfI^u)g z5y+Gvac1WYEvYUnO!G+AsUYTiWy;@gKN0GnUtSHL7PxK~JB5$=u{lR&4J%|F>v@Ti zFgrcwwdpA9M&*ecXunOvaz3BUyPIr!@ij=s>zj!f$XSr)F<^&ClSeG3Gj)-OX))Q5 z;IRk3m%w`!E##Fx&>9r6CBizrE8$AGfOl+)X<lLjTR8^y@-t`O1#l*W{IF+Yc5+Z$~bsNCifSVW=??@zK~set7M}i?{NOZZAKGj-I8r z%roFn8J5V9Pi*1U+qmh5zvcem7HIT6_s;j1hPXom41YOma=P&k8Z<+-S^~pwWNoD+))+e65cMH-$g=wM@O}jPu^ElaKk!)D6lh(@OIAUnr6fccv}sb6>3Rgw`|RrPxW~nQ?*sTs>Y{&0ks_ry z@qa?|Fovjn9ih*MqM{pq#V*3H)1dEGrqK{%0p2a(|HK}50U?_KPr4jzIlBq4DMM^> zDD#k0ggGDS8-a!SP2FDY4UO*x6_)v?z#WRn4+jMgDYs4=1oXf_VIri3K}d)HXZSMS z^T2*wJQqt*>NdAEYI22}{&Vsnl{^hD4@>Y1fz215VuX_dt?95eq~nG^6By+2zNsno z!=H%7(UA(A2cZ8!l>+j7BP268`k^+UN5u=&K8SVW`6@a&c{M}5SpYouh$9Im8IP5e z$L>(z_P}|a2-&7sl%*|0iZk?HS+inq9L?I^VyDWG$_Jw-YnL?cg7SoSjOVw+m+A8?k?2#SPIIxt*ESz^451s5`~qRTp|;_G2i=GO^(sm4>Xc_BdFg^TupcqDS?+3NLHnNAvkcFAVGND*{kG{7g8CaovLb~aA}2Ex zdwS)Q9Bs%+@Vs5?H>LB!R6qQ%@bE~IYYsBAs>0u zG;c;sG)Ok^o3_GVK~|TqWod^21NzBTQ5-I64#s(Kj&8P1>6yK~JA z?+4*mT16#QF6B2@6pYu!ufb-9)HND5d#1p49GrFFVIvCVyJuL5;&#tRB#QtfIpol* zsp){P2V1hwXRDd;d0>nE$Ma6FV|0Pk-F~p_1rs5x@=_fkuVZ$kuMCmyubj-x7|zbc z4ie%XYO$rj`E42eHW{d{)nFnv@6}Rz_v2mObeE%jyre;Qp<5CqS@~KUWo)iUH{^uP zVk>mZR)6I`()?rrmxu!SxK~H(n%c=OAH7cZOvH}z2s0K&Am#)JSlHJ=ObV7&0m+Gg zP#gm2Pv$f93eV9tmm*Sl{seugMW11w0`t+zXWZKs%HSa

&#coGkM=eme9rgz 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 z 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%0DeBQ8~Y9T5dS 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Π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
qtgLMTR=NVJ-jH~GC`T2M$sOMB9qMSS;b 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
fzjlKREG6TtC6V=OMB{_a=Q0 z4fTGOcygw%X#PxVuYyM?Mxc&S{dxHAv1ZJ1?|P_pC%o^D^5i8*(DO)^Ldo%GjY6PU zd732sDZei}JzF)^U$0xE{*_8Q;in#!(=G=0yX{m547kZzJ@3A!(biWm~MM~B*NS(EEpdM_s+!$ zDmcGBGXk>3Yogv#C1RS64X_Ff?C#RcRq0WpbiXTESzV=xpnwa40>k2AbB@>fQY&wa z4Z*As4s(Vzo>5=2mN6;&1IA~5zhE{^%XfAd5^j@-2VAAS%=1PB(4l6+vSbP$mgN2E@eb!>}c+HH2M%GckD^+naF!4ZlgtW;c3aU zQq-*zu1TLt$9K^7Vtu6|CQ<)6Pmkb8)^Ha6C>Y`2#Bs~vgg9RaDoH<uf1k4+oMY(goa%NsML0bDqw2mjweXI2N$3iYF_&S=x z$3uVMI;&s(ZF9fjhAcOYtp0{7OqYDut@zPm{_PIip<9#l19z;*9RWPNcLlmmu*x^a zit|J|&iuBG0K?S|%oq5L62DuqFOH{_yff z>4o&=JHGw<^Ml-5Dv?Xtj@WK^pfI_h!6#`EYn?O`&cJ|YQ!;27R7>UdJl+wg$XZ$d zeT=43I7kpo=bxm$6vGs+1wE_o%l^Dbx$6y9~ViTcnJloh7wr@vEf_Y1grL%Z{_ zqujZYX_v4GO=J>^Mjg1?bm03WRe~=Ct1I&QIg&uMB(-2P*@#o{2aGP-2%I>zzbM%w zY1GnL`$V6`;%!>%l`?GjCkUZ6WspKBv3`7rEsB=9Pf(}*lpw^;(K|&Lf8Nh7d5CJo zVVJ_e`VL|yP@Vq4{XZzPPMS*wa~oG8>&-C!g=g7=IfL4jI_D_WhL7n5h9)LkFiSH` zUXH}hAkVj`v@^@z(D~nQ?_g0Mbr`pdVdq7%T}iL5#_Uk3Ot_QFUj!!BVnh2KJPpqG z4lAe%Q}N~U zT%6IG9Q?xDu26J zrP4(-g1uD^sd5sC^n_I-lv*&n$Sf=BH7p~xlqG|$SvU-4mC^599c4Z!Cwg3FdB$41 zpXEuUw7kPy`TcF*N7RLRd;M5QlV>a;9ZS!g4kep+Gl=w&;W1U@dhL8*?fHHC1^Tm} zrnjDcvuDspoGi~nM=_&u$-zV|=Ciez+qKPym!KDd^u0fRo&OB`pB}!r6yhn9VOr+@ z>Pp7aTM;kDkxETjrWLG>+eWOYxD07lNciG;z(Ltryuf%MW^>s zC!9Q}$d5oPv!zr}7QM*`q^_~WkBuU9PNK(DN2~i)|559RFa(H!KNF&y`sOa!_Bu65 z*eDQ$y3%i(vV$CM>^{fry{Lj8iZh@#1&A45Vld47xEU0`Cd%-WW~gj9vP(_1W2k8D?+`HKwy{$d zVAcqt>Q}|JEgu`@so;stsVVZRx^d9H;2TPa>cpfoUt1z(E>o)omyL9OvCy2)QffPW zr#;cjP-2TsVqGy}pYH-U<@YiHSJQ;h+|z4=fY%6H)pQyqMR^~D>x279@@K&BqxVzYy+-lXyw6BaE;W9H51WzFlm{4TS%3-fW?ieECUQ-vP16T9vA?pWc;H%*Ll( zsBR7{P!b;yLr6-}G*HzM&nTI_LkRrFYdeFU!^HG;u2;{dv%joHGMpO@BE};ZEhV~$B#>@!!nj?OPlcCYUn+!;P>w6VU>V-U)q>i+(7ECbJ|Qj<}KtU{uD;=?1# z5OQLd?;%ukd}4GF)l@UcswQ;oA3eUi<%&X-5_W(5Aj?!Dxc*WBK^dT>Hs=#fg5`G^ zYo-31BpFa5aX-5*5JcE#H(9a%9Ax*%nm3HJsks*{P7(6sdslBng&||47dPemSi;yo z?teTQoKzd(rK^GGZ|fb}`;}e}$IispZloLiU$`9_UE(uYI=b$Q9QBU|4g;-R0SZhMY{cX$75Ut(K@c6;H! zt8{kJac?vzSlI7ee!=)jgYWdzvmmJx!RRf@+X8j4JF~0Y49CODWn{91WxF|97EOr5 zk*4d2RYa9Sa``WQ@_HnRKMxy1eu1aIK%-P?o1>B;$xp*3-A~tT8p2gG8POXlH#jW> z(NV53eY;jQ7c(J}{^_5E4t%grww15Xk1s2ct`w5yvzvpr96|7-ywI9R$@ZuXb}6 za9=|;C`gxEPI?BG?n+OI+t2FzF?H(^X<<{>(fhY4h>D5LdX|3wQ7S!{2(FyED)#E4&tOLzri-URUX#Ftn}G^_RhpB5mRx0Qy9!B%mIKy7LxvshMPB6zo{ zaSOToG`MhMH<{9rPrEk^z1%L-d^XW-$?4`#d=c^8&KN|DerQs41e{+T$0)YqN>coYnL4OSI;tUd zG<0;&pEc3kfgATUm2O1n-EFA`#?-;a@rKnX$wjqaFfXX6Pi>DIrn#AR9)zW=&nfC6 zD=}{M`=h_O6DssdJh@6V{TRYGu*qiaB`f@H%n7_nnG3d3@#eR zu}D2$+}C?Zqy@qx+JT6tf$Z;T_}a6eMXnFW(0j9#8$a*%;Vw<&0s@mDk#uYC z)^1J^JBJJvQm(%DcRJhvq<(xtnE~M?g!ufCEY(^D1wA{Pr8Gz~Z29}eNEM^k%eHDZ1xIAXz}d0+oX8Dlb5SV~DvxsI;~T5e4Pp^~Ml3GqS8kVp&3KwX1M$eRw&j)8-)4UEn~!1K z3tQC;IL}}#j=quhh2SYU3(_l=H@EIGmW6V}p~bjDfcc0|MQwo-I&lETeMRB1I|*Y#xN;-KO74>NxZ<2%T6W{uw9zj$uYI|Snj7qx{aK+-`~9Or z;ZaT)O|Zh&LoqX$FjZXgyPkaJ!Ha}V901_Iu@3V;wo#%3KSL9M)Yh&@_j#gNGV8a~ zX@|3^o_??1iQt%QLNJxA_2z;NdbtkO2f+y@I%bw_GL4(VmZnwCikf|#N-jx#M^ZtJ zp#(GSUJvfd8`pDOstgKQ%;b_oeQgXFOaw_C#I;l&d$3?Q@TR(sonP_A9J>JH*jYZ0 zeLU@IvN9OWNkNlzbK()Tgq}bnNcW~??p1lF$2(};by%oDf*~=yKDjS)^y=$uN+2ZV zx{U0%{v1ewP23J;MTxVLtNvs#^*I8`m(Sz$+rTmN(w8r{gK!ie*pQL&;$>kkM>^DQ z^baQCDN)B2+w(tzTW3b}o6l?W>(5UQx?i+^Uz9r`83lbS7$!Kezo=Y$R_t;MJF^|u z%Jt6qy_6&I0i$Hw&>`$1^}!Y;jFFb(`L5$xV^Orz@PaWcGWaQ5PseWPo9l|K;vQRM zL8lsC3{wOadWf_Pgy#>z66ZS;J|aH)^z=Nj&)bM}@G46!Ou^_LwOu4m#08(elhUPl z1)MPSCcZ_gk;sJEk*~1rsI>J+yXKi!q*lS1IQg=v1bks27bp^+W!5HUD!_FHvF@#M zN>rZ-e>NI0>+UExcwxUf)f^mN4Q5|~Euxui;KyLHx2hayA}dqO9^R9XfOSu$W_ihS zb4iwcf}B<42|5}YLIIu%&Ukp(_E6H@u-t#H{3%97k7xqk(or$y2w1b454AqIPj^v4 z`$H~44x%AU5uD`ecBahxWgNE^82iCd)K=*Q67WVy5$v?e(3qWcLR7IFrqyI0ehb#(E3CYSAg@|a*i z40hV=<#d*aam+HM7yY}yHP34lk_eHC3~N8p_ucO}UQ=@Dvkb_u@b|aWKj-ojM!i8K zx8AP{BNV?$H(#wyCv}FCwTWhym#bvcDJ=d|PNt&t-#xS7;g!vM`&@{t-_=QJR3=35 zoV`1#zG|3I)r7N|PMeB@PPJr9WyhtgdDyZ^*Xf{Fp^(*9IX5ze}q_&Mdw04fqe|bbpMF;|*&1%=qSC ze-j;&5AL+*I2nR+*DlV{6?d@8pY8(rU|jTt#TAoA_B^h`#S8Io$}lDWrd9AzG{X?c z=NA{d(BCra*Y|7>7+byfA)mm_P*0(j-eNOaHg4Tc2W(zlV(0aIGw*k`f3&{F^He!vU-aqDZJTt zjO@5rds6af-;RC!CGvahv8y9*h7@3HekaXf0dBSCe^urZVw#qM8hkir;gb>HxEZWb zMPgM{ja!2!d}0InoUsDws1){oD5B^X*H-WF^!Bm%h)qBj(uKt0L{usbb54!d6Ff5uTQY^x6Bp3jsj>Qdbb^*_St^9Ys*KeST~btq5u@E)WXWV~ zt!K>Pf`F*PlO$0x(z!L@%RXK>yd3VW<+w0xglaKP!JmGtVpPc)SZV~pu6eIpNh@c$ zKDp=Ccipa$j2OL8=x+6ZxQ7$cm6kwD+9K8b^GUL$GVRP(4l>t`Fu$-=GR~KCqE=Ae zWTk6-uw6b>i1akBC4P5$($?#ib)T$9(C*fMG5@pq(X5V@^Z8llw8EJh5@*H@jER*R~k}niBx>H_n~|_a1AEHI*EK=(_abk^J$>%I2@WTpIaEY|nF=$I3c$fA28O z(&#-r2G8pvX5|doF&8QENa(i=zQ;@!*zUPs-tAnFMjPg zP0G@=d+-*h$APR+6IVDF;TnGp^}pC( zGxv|*fM>d{ziD*3W}hnL(}D>09GQ(Oy%@YiklrahQ><(t@oOzFkviZ08XLFovqZW0 zvs)=?6PtT0^1|0}yu9_e70X8Q{*=;xkM<7R|IwT9GVF(Vw}tSHr0{(vX&>@Z>jioT z@Jgw@d~aRZ5f`~oB1D_}uqT5JgQXyvUhH8MtPXWSB|Z2iIGU`*8n+2Y_t;>k!adw+ z`j_nKbr#W=T%)irwO-}6BWRyj2v`*@2sX$yzG=bXaCEC_t@UqO%JLu#q(-m?-*M&> z9kcJk8h`Y(`v__-1oow1afv+Kv^PtLJ+qfmqEWO=W3S-h<7K{0-V*Sb%S0oC5x*vQ z=*u(10eU#Rq2uWYJl7zp0np@l+Rvha$T!Z65Crpry=QfOy%a$xo={Z5Ul@k3zdn-{ z7l90S@Wbw(gmWL3_dKRDSO0))Z4j&e`m-KxPUe)4ijnaLF0yvmcmDqES9N}PTXcya zo@>fiNqv)qWL4LKW8ORZmwL2Hh|JQRevsG{e@(`8!DwC2T(|Y3(RBb!kXaIv-4!ls z#xTQzp76TZ4aL1>gjTRbi2@6+bWR__gj5=Fczq69sFe|FX{oq%Cpi)nxgBzT{o; z&!5^xND|tr+|HS*WUy&+k+(*t7u{qv@0>I=IBeA`)lG<~NEw32IOXWB-5U@KzDK(* z#kb+2-o-v|8mw>j!e!I#&Iv#IbL5VNQ+e6??zr*%}v>r4Jp?1GG~x`*1ThwKXj{q*q#5>f`k0_<+&OT1MSQA+&14 zycp+VA6m&8uLe^tiTg$~NfV+#6s1a~9Wx+EGeuu`MlK!3w5amuI_P2BGeR}N;I0n+ z;x?p40?A9bwe{s&{ZANXJubAHZiF59Oa8YhI$zHg6CZDto^k#wJ>5#fcWCSC-C^+g zoBPPSUX8f|EA=B zKlQli;FneDDfJ(0O@*O<#@7?W-cgaKRKP(rdb5Vk3VrX`>EQD?^*AAN_I9R*Hfldo_s8QK>Fu~Bs9LOeUuSuq(=bDF3TJZkI&cJUu^ zf=X=slsuuzf6`R3#tV+Fz7OKvO_GHesZ@3L;r}(awzxazziL`PYmDQeBE)tQ1$ThF=2v_M8n%2mGDx*C3|VP(6*Xokwfy@GOywt zH&Iw*4$bwx)n}m`-j^esFyx{X85U!^9mYec+Y;0r6bY+*c*Ne%c7Js8Nu4R+FYB;; zGa?~F4t$j32Upf_HxS75HBL&{G?UtOh}-$h57wSM2p+CfsL@aV5&sRhlL;v8{GJ$H z6%tuezFds~9U(;= zSpOZPVCEtqIPdqdbZQIOosECV0FyE!cBTk@S;iV&?R}EAaSI)1b_Goh@0c?v-O-O% zOnjeESOjl;j*>?9oEPnglAFC2x;2O1U1~<&nd+1i@O3X&Fw}YWCMlMF@gDzp#QMfH z+DZinGzZmYszhVDqzrWQX3nXK?#^u4PSUHwXFiRdej?}&^)|J{viaN<*uXC;BH97cF#~JuNAAf;w`=h6kHlhsz>`w zj0Vi@hhA(UW?Nw?K12+Du@3_jnH+P{2uKOGF>4xB+HeFe=@iiDl|nuu6lh^E+PQ)Z z2osDPlFJvKo)5ya?3%i8l*&0_6b*5Syt|px=aDmu>oAWY7_GnwXJ%&?EjV`f3VsBh zDqsl)aSbyl3&24PE~$SB2_Vh$>EY(gHE9%b{J z>|4(e|L(sK6#Or}xFu_!d0-H0tpA7|O{bHSz6%*q!sF}LHH(RWhH_VYed^fkr+iI;;i2Tg>``xzI z(B=EcH#m&=$X-vvCw@0AeE!eGHzzAwiy`vc0}1YJ2SNlUw>%xsFBsBnuPc9WvH*40 zQds5Br7N)m-V)i-=ikg0q#c?9wj<8YCw%c?RI(lynQOzNql!$|ab~hdP_cbmi$6Vc z`tI+&?7ppB>=J9jUySZK1E>^Gn>($1`dugD^e*GL1&l*LYH+6J4-_3090Gc4xsJk< zlcOW@(H!v39l=aOL%7qV;k^Or{W;jYZkGGpCBA}E#LmINd4IBaE2p3r8nc%mSlv`I z=JajvRFmCfOMUNMO(vb3OSR$6C|HgkBKus+8*Gd?_$2)37`*lvwuUHp7b|2ir!!*} z1oJEz`14nq8cb6-+BX&oQDWs;$zybpust zis=TZ#PGL zGip{k*BCbFVxMtZYUz-Pz5ul=zm}Cv5Z~CkCv>v${=@_R4KQ34E*${@q(3paL?!(J zO0K*RsO4w2*`%3?fJu>KmrAveuKJ>#ap+wPTkq>qhT|HH2IaL=ULUCckqlmEgCb|x zBEMfjCg_iy=%>#&9l2w^$IdP-dO%)ffF0noR=RXFi|&|W_K7AD`_j<_W$TVS`)j5; zX_Su=@Ddwvi~>ng6G*dve+|$PQVwHb z7RjinMs)2iM=@!|OU(*BWrXb6H-6u}3RSzcdN=IXVZc$HfoPGJfW~+R-4PS~tcP}| zu>7>ITY^zAStCeNin{h9znTdzo3e7{m+O3-!PBr=5rRR@;=-N|jVWeX&1mF&!3}b4E%jKLI3^eVy&1k_6?hLO zpUL5igGsQ&xRNS$;edG#M0XYr4rBd_=6rw8ADncn#WpDVBa(D+x8*p}J|XIb2@dc% zJyN~NeLP@MMi@YEdxZb-ws7Trm3tTrS8hmQ>G!E5T4up+wLO;81_MtR%vo)10mbpO zErB_1f=lTNX3~xOx-YfwP<4(xHDl#VwuD!XnYSjsamLV}XU(2ra~9{VrgfuJmRKo@ zuw54G@~*f1u^Q$`&E1)g*HDF;Yp74lHCVrWi_ZQYm2b+PLLM^&K+Q8y-ytJo%>1{7 zp`;ea?2Ih0Q9=?*o~;;mbyX;#Vp<#M5)-sOmHQ|Uj0rbqBEGjgo_k6iM3qiDOtCsR zZ+c|`I5N=Xt5BGuV7^{1?eShk4u6Q8m=B*)nJ%Z={T3P@Wl?UPYebUSSC9;4Jx*Bg z-BJSiZ*2gh&bLSxoXH`T(O`0bB*M~g@{^Cicbl?Z)T)`G#IOa2(3A5ysS z=q)*h7eaj9CZ6?0J5zFwy2kAr7}i7gJaMfj9f<*l=A_^J<%J!MB};X%EJPqvZzURu zorv?OtE`S@2tCyV{ha4wSv7Jx;G-Rh+PZaVR!wM{$QLv&I{hh=FW}EgZ96n0=5s2# z&-}o-)UpJqq;Vzmulcv0M>YmS=r5<}*fT_6FAW020lLw&v_`sg%7{HZO;|3z<|nHb z+@-H%jy8WxTaV+XmKAQgHp0YjWC&@!Cfxzd{;5=mS6)xw-bM?NYF=pC=-Ci7jCP40|2`0H1WldioD7XK|Ilbi|UzqBGpFW zOCRYu(aV;9ALQj8auKfdD5Cp#%(t6WveBkk64gtn!$7Ay&Mel{IQ`kSlI=Ybo_Zp2 zS{al;Au0}KEzfUUuUs`2&KOGi$)u07X*N}b2?&)39?+ch>@ozOxMc}8}+W>+| z97$ZIrm20*0mUJd8Y?_7nYTtAkSuWN=ZZ^XK#3H zjN@H2m^N=l8az@s_#S+@8@3P@SHY=WI{F}^NQ3?F$_rM$!E8aBISOBH(l&PW67NV^ zw2ZzwxbrMcQE0bd>$_;Mx_-J5-nZE4m;rXEjX$<-%#JSm@Q&S*ldT_dN&4_dzxqB> zY1hkd$c#(wIM5E|SwYd(WWspczNC>E^1xniIy5Y4?1CUi6!Ck?AhBZ?e)ytMxyFC~ z)h2EiY(y~SAzFtl5jE7d55(RM{tcx4gNEyeB5Q)9=DA@UCoKE#?xb=X7_ zEkWL7e2c%Eg7;a_Ritl`>0Kq>mnCmYrv5&)U3|^2Mf;E{2#Jxyd@)9XI-=W+*C+cm ziUI6NLCIozgO~fcA1n~Eul)(cT8&h)NOI#kX%>*0-;cjsy;him+L({bg9a==#+&kX zB^lBtA_5^}ZM7J)5S*-{fNizgCW%ybww#9%y8>O(1Z|FDDVVM$EvP2;c-H(kR0BiK zWpKN>c6!<^(!=s{&cZ=_y|CIW*U=$e!oKCY@Pj-=o;_RjLVVJyS8faE>T5s&gGz|S zDsApht!23MxP2)0@ju$ORZNwR0j3!fDX4hw`snUaYf&77DaMQuXl<{m@(2?-B=>P( zJya8LL(azWXg*up-4#4!Zh}4G>+N$FPkM(beA6^Gagv$ik+b(2+4OMS5(`qBfvHai zvG&Vik{uy4Gc%T?N^yiHWR4-J68GRo<5-!$u>SvP0l3FO@T*i|yb3eDQ4`P~<Oa z5n)P7$}8dV|1aTabA1v3Bzm)%86;19qQM5|zE#6gvU$Ogl^g&2j1hBJdEiKK$V}0) z(6yxuf;lSsh{jK*q+8HrW|Z2L>1!zXpprK2i0`nKyfHxxH|6iNQWWn~l4&sYS4uihzAF9={i3{@8U%4M7UVq7%^;t|CFaE~ST2dFTz&6U-$4pv8HXTM)O za@(0T6zQ&b69jt;GC5QsbNg;Bz-ypAuDu)py8;-hhP;NX1aH*St5hTM@H9D7CoCmE zO~9YdN{j}$BrqH?B<>6YZbK%yxDvk#P{Zh%fdd{G+6t45ZETREDPm~1J&`6waWS|u z|H#7a=q{`*7oFVIE-8R#tgQ`A5u%<(ywEpU6!M6Ly^9bZr+<%Km?9uH3ZjzxH;U%}_aeAj3(T3BhuNOQwWAkyn}*YU-2Y)-Ik5rKK>jgX2Z7 zodiGNzG^^P^dW^wn;;x1*?0-etnCW=WpZ`O%UDr7Z#Ue3w$>^-%=2gvc!q5j`WU6u?z!=>9l+rOj zTUv$&5@`pjqW}a01jB-=5=c08=PExH!3T*-vVoEM&W;&S!~vH}UJ`d*a^{4ksa$oP zPBhrBgilvNAf%^VwLU|I(y^~wHZ}qjpnCy)ndN1Gv@UGE6&%~T+@FF|&>B2i2-)h7 zr?jjDL4l_H+11U>gOmTTrkIZ`zP)2tflFU5rX(tKk?1-4 z9m9Yc(B4l!_=fVm98ceC;DwB9`8oDDk;&&D?N7)K~r^%4s8{g1wOdu40rF?>?0(f?h zj}!LzK#K#u`Fek8Rn1s9w^X=bTTo{%NWu>I*=_n3_EjSw?C*AYPqF{{(@ zI(iVb%}n`>Hd*!6(iukL6$jobl3PEtpqfCkb--$_fK;CK@;nm&KM6dvi!w692W{d$ zDe9d?joI0lpY83M$rhE?${8iN=Eh*!CQIymzv^9<-I{y_sJJHH-kIP-l$W##cwvWE z&EN}wgq*~YgQsEYFyg2j&AE|s&1%dU?_Q&nCyn(e8?9G_w4?%+BGrbS|#M&qpVaUoux<^6}J7MaMfBYBk@O)sbEP{ zqfB)Ryq`qJnmAH`!Nqslw-Wi`V({5LjqSlyzg>NcCS{5-L&(xgiexoEl!aWv`TB?y zk<2W#`DR{upX|&D-y_&9M0T_>Ti3m7Klue358^(b^Tgb3angGX0RgGduk7hb zLdGL3PjfE`I!t6^(yhlLFXYvX}yt0n_a>5<8)=pTe z9HP9dTHQ!Jb@Kj1XbnqU4R#_NT&?+Q2Q5uaU@8DZ#Jh_!^11n%ek_$<<7(nn1cS2q?!eM zeBgZcS+lUQiTrJ-JfYIOVqZt8ud6FzV^U;m)&>3}z?@@V6TZcJXuDQIB3tb;Tsz<8 zni?0w9&ss0mMs03af>}x&TYJ|+C}FF*59%LjhL;HNXKbhpj zy4uWC+4h*uKB!xz(a>KYBe(8yK{ikwJc7tCQt^LQ^3LlUK{_l@5+A&M*0o-U04c?h zIF_tJ!^w#|h%qAY)h11h2C{lwV5w^Q-iMO+#k?<^vDVyac&(vdr&LC~#FM}cZKEZp z4Had3eH$O^6a2b)1Qqw%lTA9`Sgi0p9mH#<{57GW45f9(nvk!Sv2eWXA9^+@NzOcm zl^*{n8A63zKh#oBvT_>31FV+M)r9}Lh5xlhIqb{r*%pW|Dc8AuW&8rjh|%!=-tLF7 zE-G2ex(rat)-uOU_Bg^aGdC~eG){UP>KLJfNZDv>QmSGVr#p;LvgcOFgkJ;-YHjOe z))muP*6tA=9lxH*j;41A?OWBH9sM4HrtT1N3{M%oxKcJ*ey)S~lTDfLix;6mmC>v% zL5@oC1^-ai3(kDerEQ2S5sM;&I^BH>@}%4$v1l*>_!-=y`JImYN7uKLYfnNJCqmI( zNtj2TM{X^_`RQ9XtKKZ6FSmV7F8f$wNz>SCr6iKNUf1kA5Q8l)h%cAu{I2-RQO73F zbJz>X2F&mn3%de)0;gF!9vkteh2{1U#}_)W4+%cs5vbZcg2Jb$Q~wJ{mZ6NQa<*Gk z;O{I9XG!_0k=V==d-9FWspt#qfSb&I0YRZD3SI3_k~SeXhnyO?HR6~kne;=JZU#EoA8{o9cXc1oW1g~Rg+Jjx z>e%44cet1Ij}^oGh3zY=;VM)2qhEl$D(Rs!$>>+}_&WDOpCT(=^UL~LukjZZnZi(< zte-lSBVOPX-OF6N$1At7X{@3*x^9vB z(S0$}Q(xzq32y%96Oo4w1mD;LEtVSA%NBQ^+!~GV<~3mbk$QL5&=xY_@!9U(Ib*&EXXXwWf($n0*Pr0URE{iB`<9c1 z)52F_(xc`8v2Zmwv}+bjO-u?u{1ygrnZZUf7%-0`Ymcb-Ec&lU;$@3oRsxoxe8kj# z@LjPasI2&-=_9J;0)q~`ZmS|C1+`klj3gO+lrt0?)S$5R);OsBptN%mcY1lXJ=zz> zKhfMy7B4MuIYVSHtpc{>h^3VwGcp$_eVCUG0+z|x!A6KWY{X)fLzBjyE74xq#C<&z zNJ<{-yr258OH9Ogez{IdCHg zk{06tm)Mpo#QVJ#v&fLr)3lP~Mi*>%O|If+k>=hl1OKR0K^M4U;?;{)gUv$!OaJr3 zor6nwHEY+m`Yt}`+i469Ic8UvLFqP5txrl}es;BMR@@g2xbxgBY78dg?P(|pQ1#vhGuta)TDnC=*<}>vB{h8$c!9a~(<0{zvZI}O{BQL_DzCi+2(NyCH z(y`UU6UMUhJNx?JYh#C+6K~$g+C9|k0By~tZu@rIS>v|{!Z0g7tGqF?^5kFp96u0| z_BsCG$&?9`aP?&85fmEkM_4c4VsTiK-<5MMAmUX#gkZ_;30@YqmFqH;dMFU-eS;J0fRy16P-pw!jHRC5r`? zhIB}jD3H3UL0Rn-mGYU}T^_Iq)W2p27x}5+NlfO+!_3iwMK0_oNWUuNu*qKH3aQ5i z0#%FylDpu!`L7>pAP$(VqU#!FVhpQa&$ng4`1N+aPq?>K%a@1KHze;-En6rQpr7gFFSI9STxiq zl7~B^ZOP?WOcq1CyxJ^V+M+Q319MtTcZ^cjID%6gFQfCuYKDlBiE(Rd(IznXe{zJ_8(PjI_5)7Skgx4VOmXPesDS5f!O z%#3w5FlT_abdqz2$-xuZ|Hj?FukuU7=l|t7wd24m>$dsCcRWt#szr(g&p!6hK4*bb z(q19q>V?okrtv%0VF}ONFyJX4vA-P`c zb)5M4=%aB2mQ#!@ELwA&MTfsys)qg-BJH>{hzm*#P^&GwulaJmLw%iHftUW*g1(tb(~EP;zUzIs+}6bOIG4 z6O%@q9?=YX`SZ4Z>0f%=|=M_j>@!7R83A} zHlSW1o(d79i$!ZD%4Wy{5(EE< z5nr}?&uNEQ+j!ek#5wztk!R}h3?3k^Ukg10TDF*oi1&Xd(?I5VmxFuv1mmr9#P8*o z7e2j*ZtRDYtT#p+6eK}UuA`cEPk-7ZhN~p6H@LBM{^9N|c)|Dbto`lxO-7s>7`A=< zo2QoASDw`54;TuVVB*j7*%PrM)c#no4|qxk0eKGCZ1pr?V+dfGwhe))U%zf+@v7O?pmr!OK~5Uv72!y5NJK;J^pD z1HL=a{6JyWp5_|<09O|gK(xtz_HMpG2Wv@N-~kweVrubB&T;`U=L37jzz`adZHw&QwH?kBFB`PQ71+b>6fp# zn_0w#tgD9U=V+lknU)jF%XPync-R49DyIq)CCE2~UP<7GtDA?&MNQ4Jpd9Uc$NpE|XiE0Pwv5-dbk72v~^e zFaPF`^US0ztdQm%fN0(=VBTG^J0b_7=OvcbN|c5^^dnMJ)Qld7Kiq+cAL@WHbjodf z(NT41So1nig5Vwyf(pzbyc3j_g6B4rvg`vnN;bg7HCw7dYiL!bZU9VLe@q)4Pw{|) z^Md(f;B-Bfoc`%|p?m)Z^@5^6zQL^c+&Gsx<~ARm8AA`8`{wpwy(*5@?u;H1Q>mBk-~{AoHcR7bf)F zql{I*BSPSn(n|IVy9&Sx#~OuGqKn5dPqSs)JyUY|f-tID*@Dg=c8qSJ=qIOyY2;FI zZ;X|8jFY~TNW|n`2Kb4S5ul(*0S#5#W#_~SamuybTn(_L`Vj>a&E|$M!kvZ$=rg3% zwVe+9{)d$p)~SK=nmm&)1&I=(s|}S2HGANd)141anc}4A=-oGKDZmDNc|$71#W^ z4y!Y?18m_vkzqqenBhWDx!_evOy{E}A|to4?Ig_$qG;i@iw}`n!WSTw{nKz8NX@9p z=a2?R93&*S^L%xtNAMCcsR2Cb1MlVpG$5^abrnXyzjD6q%%K%Xs@un3e}Dn#A+=Z- zRR~nT!oW5%(Byhc1C-Cz*8X>NWKNM}5>xL;XlM0pN;ewI(PEg8(PdDE%jt~3>!sgo zBuLG=&*qI1sIRTSd#>+Lte6MNkkp9l5$Y0_mKeRHr^s`$xG{bQ z$L?_pY`CVX?jP{wd}Tl%pj0txxUV7ju0q})G&a2ny-XCh+PSKKp~Ju@GN24?{+^#7-+D@TzJc<#ffAep+HKA> z!cEPot!5GO>k;t2dmnYp7-ZYkdp};^K+k%B>e+0Z`l~8EiGM?D)(Ajk!S^py9aQ_C zBhGB3h#sl8Fr3!9+koz&Q3NRNlfr=_CLq97EKPaa`S;+x%eq`$AlA6_$#8PjB~$$` z`7>YXp?O8WX34xM8w;A*s&zgrEALsLVLd)(u8!9F{FyyrC@#0Kj6qepHG+5b9;6WF zN?E0og?>oHDZRk!p~7{9#5W3>n0uhoGU0EqPUXq5CTbl27vR{UTr7QaWk(UX_*58` zwX<`%J;Dk4qz3o1F%vF1;CJeO;RWcibd(oBcrkw$nVzS=jpsI8yW1Ot+p<>U6cC^G zIkz>>Y|fmV#t1EHP&M$zU7L~Eyl%3|m~V+p&W@Dvmy1in`>vB`((UXnJbIxFg}lMj zFSh&yMGP}#_%zdP;#}F{`gy`@oA=fCp^oQyAgsX3ApAXN6Fmw{uw z@vGP>Aq#PbI5XZ#CeHD(F%GfJn(E&N*cuEvJ3v;QcFUhSOC_$xOhc}dOV;<@79ptC zoiDnB~=FA&M$uGG&i{OD1~6Ojy^C<6fBo0Rbh9$l@^;U~mkZ9PP}brF%7Ky$S76aiP1n;CwEGU(H(}T= z0BQ%QTT`oeA3*lGTJGa1_^{!J$p(}n>6-E zr1nCrKS`BkWT#+;6k?|6q5~KPRK-ytE-|Rl>+j0J=OO6flr1OK!b2FMfiv(Dv{3N$ z?0DEdB>5J*DFOJlvMP4#HdQZeukSu?RqMPp-)D?Zpw&0Da`T1ujW@xqez<7~YR_+H zn99Q~Yc1XRe}$-ov+e8@l!hSSA=V{AwuHv#7}9I_i&`K&hx$D_z$)>s<>Hn?>b$aw zG4L?t6aAKY5LId&ejuHcsinXJMR+mH-|z^(MkNZC5Q5q%!Y3T-K78h zMo$h>aXmRrun(<7BR{`&WlN*K_9#t1WFr|z;Nakp^F}rg?eE?Id@>yo7tCKBRuaQ;?w{Oqq-v<$@H;abO z(ncw_2mO0@DXiC9#b%1OTZmqTqr_EBxQNh=D21}a2mB|9^TPJ=-pl~IUhcP7s)q9Q z-(ahV!~bCYwMvCapn(22Qg-77fCa0m61MZq1PlmrFJtd7He3!z7)q!cpUl!XzWAi1 zYYMOem-nfQVw6ZC*4|K}NZ-;Bi{SNzLN@$plMP>2*6UyvFoQjsmFu?4*6=ID7I3u( zeS08g4`AEc0VhtKpD33$gdFYFV1tL|jK8eg;QHKv9^dM1Ny4uU&7{RqQ{~(V6yRFD zxl$&I#OOxwD~56gOxZ}|#{j!<0X&W~23n{HYf88&`*Hr?aOMI%5C}NZ0W4K&jb}A9PEp zNe~z2%Y<=2ym@!PL+!R>9!#U$ncImYEklhOAYRBoZ-Oakmh&AxWxs%t8Z-BI6s>z& zG6NI4d13Kms%%=HH}|S?GC4g3SwMVaB$#f}MW4-2CjJSqTYU^KfX0WqP1Lm!8YE0X)q4lDrFmOi8>Uc0|MT$XgKo!>7mFZUq%dIPD% zC7L$+FM!$d_?CwA2w**?j&C168m0*PKhjVET(D&QcSv@P{~>S(;G=7-n>aXNj$b!= zzVZN7(!ieb6vIw1Z^DDijOXOc@r+fW>y^BAdQ1SurViXdpR)cpX$U>a)8>q_iYi+} zP`H;p4W$-dEQ6A=Yw3_B)^WAFa!*37;MC8Wi7cZCv6s;noYt|1)NzyXlZKKka)WB>r-9_i<>#nR?A=sonIn`+WeN=Pgji_&FA=$Vo)nOk2}+5DB154!0n90r{PWm#I9PoI-Pob?T5~n z5Plq$Vf73`6^}>7E7%NVJ)6-6m{3wX(@o;>4|{sDIY4?8v>nXD>tQH1*$tY*;|!;<*!dH)8*5OWc!aT>nT&$n>Yy0cp&!6ltpxF>dy}hhq)J4Q9qYf z)fj~@J2?TCQars5;@XA3g5X*niYZ}bsMY9GEF>r(1Sm>^{IjXa6#AH5%nzjNsJcUB zd(VIcWX2po0=9wvOMMp?T$1pOPC(<%Ww(cDmJ0ay*Z~lV!q4esfq9E-uedO?+d&7= zT+mE=%NMGoD01Q`?8 zzu=YtI&#NFzI3+aU%Pk7xLHhXePIv~kJZ5yR0zepjo>W8B7fxn2GJ{;^F5XQo~Z8; z+FU-4?VQ9tSM#75t=Mj*TNs!LUfpa?)t02|748|wL)#l#A~e7 z=5!2hYJJ$&FbXXHTy{UIi;^2RN_F;!@#~ZroIcCrAL`n-jiZ%%FuJ9 zXV$pYW;j%}J`rk?E3a?aUv09&x6Nam^7`##H<~^pAjpU+`CH@t@C!>S|1jeK_>xY} z6HF0bZdIlIUqQ3+W4hHrbtby*)`4r9%F)@qpSs#x01=-q;E_5@Htb)Am+IR}#pU|) zQ)-TAb6#X`9|*68%zPSaXtLeZ%xrUpD?6`Mtm(gO3p@=PPaG`k@jG?u18Zjon~YYm zrxq<1sFx;D%!j+SSvS_i#T@GGLDL=&Yd2pY+PFP0KlTVdte1LP;s{81wb7uAx;H&d zcyPZ+H+F}!vF5Kmf8**|nsivZwL9Nac-v8UmD>iRKoI5&I?jKSd>rX+=DLKXF)ZA*mdxUGN__43e3lb`&Q(hPoF2X-q z@hg?!{7YuLA@RB~14Tx3d!ARWo5XT25-~&RG_+eh`<%+#t4W*Nci71gkclv#;(mupG@ zpZ%Bc6Y4M89w7EJ=#M1v2j3jsKR2pJ^f#Ak#TZai0A2;4K^DMkfex)6Fu_O54!}C4 zq@|TUnB7JE6B(mB@v^p#1Wrd{ML2b_8usGiVwZ!?)9UB#5HtDjC$^TaMmxNz|(7r*c}6<`_qGn1ZwrIGMNWfeQ;sEv68=>^kh1}VUJ(nv zZ3~Wl5quE-cw+I&A5vw&|MOC*se@i$4O7`ROENrm!57Va5{S*kw4R_YNy6=VW18?f zJ{4t2JaV1RC*^W-9CiJGz77aufV2%UI3C&Kl+|Ed;s|2faBY(^T}bMOXGX7(FMxc* zgi#lQt=orAzBs_48c;j9m#;Suu@U7^Q^8Na539jTZ*dE_r2F{iKeB5tLaFsQV0I6J zJqD>xYhrZ8nT>dGW1Ed5(6;_&H?LYQA|>ZDEfINQh|LsE z=yy__rVH#`%3l0y3I6Wbcn3|FG$c?=1rGz6`^}7GSnzdPaMb2?&gK#r&aOUW*nGfx z18^eny~gmR7P z%1_)e0kk_OIeq^^;(V;p%dLpf&L z1B90X{kjS6vfCuM{^F+Vx_?Cu%rk*64F)?h!Lnt&naiXjI9=z(asn6871Mkke$vKr zWveg30+24_B!&er#fKi@p~Cy9_|EMR?!N@+e#dgK8V~R&pS`WKuU;fJliMjni+)`s zy^-+yJnD!~yZq>*_ss5j@AQuJDdUu1T^(y8b?U!IF?BBEf+V$&>i&H$`GmHgq8C3< z`2RBzeAX1WEmpWZbLwc>y55t<$?<6Nss2<92s}p2Vptn^`!`3^<72fki8l@=b1}cK zfzw0rtsrV#+SzL>yZQvijxLB`rU}c@9;cx4W%r%+I|bc=!tkDLz5Rh0cJ-*TuTchM zcbjI_X41rV9Q74(nB0+H0+cso>@!K?{q_Sfq&Eknd+(G)(Xzu}R|pKlZ{Yj5PUctr9t{w!`Ik+}A5OFw9cbi8)C`d(#q?)mwKp2|o?**Ar&}y&u4E zz5ZcFTc5+FargT06);{uqr)0 zMbvrn8PJ-U2jPk-1vD=&E#*uvikqQV>J<9SL2I?y)J%GyMR70P#_h!6kmy{o845H8 z9S<5n{UM66zetVEQ-qbkzlYYyRg6>JyP$ z2I1OG0q5l=iWd%?rR7OweZ8e_7TRAG0f9<5Fs4@bt5T0tL&W>CC!nXm z7sJ2wOL6BE3C`Yh;E}{)lu9N3yTo8bOxFAPtD&anv^ZgAtaK&?n zbcS;V$}ICO;3gcgS<_173&qcl07PLQAZ2$AzCGi7G~Rp!=tXL3X_X2IV8*zMLv@*h zK!oj!_myFaZA!Wqnm!oZ^2sb?)|JZRiqj#B>iJj z48!qv%5h$4&V>EJKI57m?Cazn;e(6!4o2N#ML;sMSQtsr&d-Q~L3Q;{vuA{|1rUwwR*7KPvZL)!-lXitc>?$<9b)d@crFZ(J|SyiRf zR&C>|gBkN!^AE@?0Q&XwFa-AQoUILLP|oNAY^-nYE}WqmSFi!SMW#T3+|1HmJ_Hm$rVXy(ays=ish~EAY^CVCsscN&Up3 zg^rG~3K)rdlQc?%fK)^vl)*GbB^YY{`fCnVMM&(o2%$o5pY&Y9^6gSF`!f=;0XBNz zP=ecgtif<%D5IzYlc_Yh=|~S)*eqJ&^%lpL_&wH!NSH?NJSq94qco$7vH$j6er^&O z3~H#(u(pV6Df}$;-oJZ(Eg{zra5-g|x6U%V> z#B%&5(-dQGHlLJC4k+HR51S0lB9(EacV_U|?_jiQv5pXfJXnR1N3||VvB!E0SlEcn zHMu7v-f}-ziwc`MYFD$hjLD97W!mJLJ+>}SoHL*7KCEQ*I_TWU>Yd9^DCim``{F|B zs}b=(xPF0*e91&Ox<+pKq*`HxE`;9+Ey8~vTLfhkHERyW)f5Y>-&MrbhV@g2CacR& za1~A|pbsHB({C=9N$qQFmq^8r2XFZAK2zt2XG}VW+b1_2+=*d_(n(0p6PKGnsy&LC zvV~nEeDOW;p_BWecwPEl`iJ?}1A88+iOo^CKY9q~HBy{C(=dCdHfEVIH zA=WH%d^8H(5Nkz#T^AaLBY2kLRtgh_ZMzu|QbLU956A`_C9OT{>RxSV`gR&)sDMWC zXos)E`=^goR~-o6dhBG$(p)+{DJ=!VM#nxDROAu|&&LA^!6A(?0Z}I=QOUyQ%u}bC z#l^JZcD{RpntiRrUG0A6YtCT=f^mH#qu!q>32FVL8nf<*J<)(0nUC|Yda2s3WSG?8 zRL)ZLq6+EB$`oE+&LkWE0^p8om}gZExGj2V`Se+LBeu9vR#urn;crH|Dz!gk0L1t$ z>Jo{}Z;>jF)(u9SzAv4u;K|LKv-cd4!qUaky&p=^?f$5m+FE~Q@dXX(L4Zd-tvBoL2Wy9{GB7f3H(U4i01DGu5ItaP z2S{@5_7^%I8%i_PdsJ!GkZ0{h*VMSOWvUJzMcTZk&L{#t+$xs$Pa5@^d8cK}scV4) z!mwY;SZh^bHKt6T5TDVplAfA<%qDt z`u+V)ph$e(1N#XgXrlMpGgMO}s>R5*2I1E7+pe`xV2g*R5iywYYC~20LjvQdI<-a6I+V||3&omDE{P~&?Za$bplKP%|{P+4hW_Vg;_I6%EZ1O8& z{gg(AZx7Dr&%zruHBC}>`jL+mKlYsXlBD>=cEzVAu63%X%>OCEm4Atj+o#su$o><6 z(f7_GV*t@0uaha-kH96#hjP{ZS%XC_4Y5gtUy?fZKSdwuMNx#Es#gt!U)4V2(i@|c z_F_tvfYMS*9OO{c+uM6oC0#s3KTI?3Q~Vc*00D$fG$pxnPeM|2eeBQ8XQpf-(q=oY z(l})ajndP#B9ZhA3?C2?pdJZ-e;{nj_ zA3*sW=tnePv7WbmguMAn2d4lCL%FD~gT3u{J zU$*X_J(5m?iq&|-Z(-uV{@ZR`BGIC7$N04NOErx?JM4m2G-qx1y1=dvv3OJmi`ThNZ9IVRVFJ+9C&0S=6gTXa)&8IE+iOp5| z&cfBN3J^>eR2I@cw`&?pN7cC|0A)^~r3JLcd<2(rnOO2&v*U^E9|U~PKNOiN7)f9an$<n9sPgj z_a6q)-A`%tcJbF=INR?co^isT@}zY6zNv`+ajzH=IZ4M7^S0th`v`FC1xudo(J@T$W+c$9tK z_F|*!5AqriGHSPd%eetNO#xhdHw_JsQ5}z7F%<9(Og}52%0qbZj_PPkF9+xIzd>(DqpERefK0kZ3>FyV#c}9OYgWYek z-rzp((EN}F{86&8hU9P?CXKpXj0~#oCj)AM+Yd%}7W-JqLWu^oE&ZygNEkJXEGntto(WLd?= zqyd?LnQIpG-!Wec%hItk7st^BH-mdrEgqyFb{k8;Hl|xKZOJjrVo@=wN*6GblZVhj9XDv~kAz2>t0!Rzx-9jQ!~CugL)3mVt*2V#r-%lJwYgTUC`K-fPkXA+jkL_Za_jZmd~Ja)xgLj zqOOM466MMLPETMo_q#&nA7fkssfN|AOMaMT{wFOhDE$c68Z~RxQ^z#GkaYiSD#+;@-fFY6e+BHY?-QL^4w_6M)yLHT{^9YOnFPS)De zxFUxsTQl+i*$%_-b$yf(r-q&KnBtPYu_KnwjI`6~l3c9Gio^W6-KbrK5!jmO5VQy} zpc1i-TMnwW`KFl;WUvcfr7n9fKXzlc545b^G62$$%qym7ayWgXLRHp?Jc-0*dH`>))*}Q`NH5HA%*sBkatygnNc9$_S7leMKZHZeQ6g-PQVAKuc|bC2`whbjrUV+Zlq z&#ZPe|0@2W&RFC_EdVVWVAKg+ZNr6cikFb7H8m^t+bAD|OsITrJu3O%UDeW^W9m1SS0@wY!D;Y0Au@RlFO;WD_fnbBtbqDCJLNv4u%E~ zl-T=}v2&fcUui`<-gq3Jyv0pAGofJtDYq#`{_uQWTI*Zdfy8x^WZ zyfK;ryXQ9N+EAh3H7>`zh8zbK+pAPx3aiP&ivOxyE*0f}k7}F!zB5EN1YEYCG`%(b zQB^_o1pNdXz@3&7>;fpH=uXddtyaijrGxujRK zXYN8BI~d3wy*kgDdXXb8`Qi|3w-l+^jitEkQM?mTCFz7C{(1s^HFV2g+L}P}E+3#) zmi7!6TLRV0i|2OT-8qIN)_tCv%kvX4A{!Hz>@QLZ4*eCIq3?3dds3$DtChkY{UE!+ zgSphjuykUQo+WaSoUZ#d4|B>cn&!KFzvV3k!0(905q`h2?(YH%2d7hIM(^X^LTom- zwaIx|gq@wx3EmuO*iFlEUQQ*o*E&0667+8bOsOWw?TP0q%NAys1CjCKo!rCD{pW93 zw57)@&jE}VPEMV>VOh9uiJ^N5j zJsG@E?&mCwGkOuGX>&A*ucgB#jfWJBo50Hn$#=hG0Y`(G=glQ0Z1E!;25;7zPo;?O z`*d~X92iUitG9(dv3z!&Zlc%AuA$qj@HP__+lQ<7`lR9f{`{8y{yG_jrd|SsAmQ!i zY(|GMw#5UAvrB{iY}!*UO-0Le zzsneCha;P&8Wr(LP=A>R+xi2Zl-Ux^jsB=_`=P^Gy@GEQ9sAc=?|cpGp1i9m9GZB! zkmuPBLIOz(JQb=uHM5Ie4CDw?{*KN~BcK5(I>Hi;`$ z@zT#Ovvjt(E@-AO=NtcVO48Mwo)?0R$8beed%Jv#Q3)}SHMYA@CGnG|u_2n2O6zX7 z22qFdk0kI;TRFanFBIh6u0d1j)x+yBgZ!WhKO&~ z*A^bSOc_tOcN~OzOi!RjRv5JHLuSV@r+``|@*iF%3XMjdSzywWQDrL3#zLoQjnrQ# zcFnH@TB-F3orgnNbv47);hr5{kvqrshqLuE@hp3LiD9_?m-2c|&ZgyMkXl6X{62+d zL%{X<>Y2swb{7wiJ@*qBxUYfCh&W*1izA0SKJM$R1w0J-v=)efYF&;a(ddIijEF!= z9i?n>JpFCw0ZC1w!3=tM&_^nU0RZ!NUMAr_MH-xLLS@SW2 zdrp}?SAa?jLQ#wwVCIexPS5^tw9Ios+Q&j9f3LW=u9sT2PC*xD+_cAvr z=g-b!5du_aeGC7u1sGR-45!8Xrg0(*Tc-AS4zgG}r93`9o;h~lp(pEbJf>&do|1{Q zJ+;dkuIRY60vhT~W|%`qoF8|j98Xt=ZMpag_f2F*DgG>gQ6c8kHJT0!(i*SFcoEFy zmpM|(0)k95`(`!t02|Zj`UMbRU#I=a@fs*gIjLK$ zLY;0^6Kh%C-OTO(nViAuZ}N)|4_$%sf8cn*x7L_B*)%$(@Eo{NP=axpF-xOt_Lbdj zaP~rLSf?3=3bxy5)LayBwiVx;*$4awCamY= zTxfguuIgSoQ?i+XJ0=n_jg`v2FCkHZUuU+y-zga&hX!G3bu0`%Q1l`GY-YG5-@?V# z{cmUp9$VM>s~129jmVbDbqIFGAZYRn>~yEJ1_IY7Gt z{3)`wVQabzr+;kUb^V4>eF;>Su$1wvR>>J_*>tqA^DN>k{SiQ1;eiIe(gEsieNG+M zguvux9)YDhtJ)rG8njP;+r-9~o&Si@{rS(8yrz3{J$ zj89rvxV!|&z*jmSmHPxXPHQZDw{s^Y+wiCVnPEJu)NkS*r}~s41J!P1o>HMRV*UUO z8OQ@~CquX+)cV3TR#6~WRx&yD(Yk%38=h*(o4i2pfVT}`OLgY>$F}qs+;{L(s3u2I$$Wi zZGi2G&U#GA+T8bg+h1(3`6jN~VK=rV6WatlkLd@slsV=Pi%mr0^RUkFyv3h%MSszt+dq7E8>T!lz^&5louT<_XK9qoPuL&2PGMqbLZ`7>FsoQ9p*B;gL+<1N2*L$L9zb!il zp!MD^zo1d$swShSQoL$%3OQxIaeWpd^d}$YV@$Dv;x6zmdMb+Kh)jC4a>y$;Z8b= z9_mglUM|Rahp({l>hAB^K@SOfkC;FP5#y#a!=&xN%h_t{WrWSn==<(ypXQHLq$!C1 z=(es7gS8sVUDg3dGzh>fXw!L`x`AUq&gC2oENaO=YH$DT!*w+)aA9F%XCFL2x9d$2 zXwT<%G!NO?xKSu~nle$szUJ(kn!1)_qe6`}p~$8Ds8WXzlkesHQgEu91z>EwK!Sim_2pBBbn|T3@f*{kUrF7Y7_ZcXYi zmv(ULD5@1)?WAcuhL~1t-Rmt-4Kmjpua)uUmH5M~G*<~DVc=&PkP4%Mz)>ybKT2m+ zZ`P$E6-!JHZ}HSEBdRm$S6lxbOU&Xq4w#!5g((5uyuEP4p;ehWEu$e90iFyoNs%fI z1?+z}d`Mj6^5}Vx)*CsZeN>=APHu5Z4JDCHu6B|w6K-~|7_8^7JpVbAI9ms!j;U7A zNyvzmSEEs57Q)?DN;}p2MW-et7#SNc{VxG=I_nLiVdV;~Z`+@0XhgKfvP9YUIF%)N zKjhE$m|gJpjJM4RRIKsW$95UiWFd23s*#b}OFjet=QzQ~IQK`H`#;N84a}^(T6i{v zX3`ZCxfxp8Y+5}S3%~Iu4`8`G_Soii-RM7vDQCd=VMdpyodlvM4@Iky!kjlLAM62J z9v-cX+`32pMfwBS(zzlH9>CD^rL*Qh=-2yhgv|z^Yi0yQk*cL?#`}9iKVroq<-O!& zm}xTX0GG~3`VM$jO#|bFs=+(r%YR^y;TI<7Nb9-`i< zq|&#ZVQvc8q1scDe9qCt;7V!xo~v~$lEwkt0!a6jPTkuRy2SXA#c5I)QveW4ty`EC zfa9O&m$m*{QTxaUU=nM3U3I!Z=y(7$DORb={Op1!o8~;r?m3%o0&&jWA9-$eTQL&A z)fLbZ0dA9wdy$gVQ;@UL0)a@WgyQRC)!@-goiD?5q42hxeQ61`$GaS~Y4j^ulM3Eu zK-qTF9Wzbcx8xur_uXN=f{r>l9H;{VvfyZ(ESc#J4Dr7rGNP9hb^pZ}X9VgCwJhbI zoqxyY1lJ+(^pg;)q~5+M^`(;=1#c_=Oi=PHFasmYOjfzYA?5JCY!j;1myyf*F`wGi zXj&v1AqMrtHvb-O*}iOaAN`|{L30T5{(3?jrgIFkdfm0`E3PvJa(KKy94Fe&n*o+K z__*cA6&;!R`4q?mT%CYccRa&sZLqITJme>k68R0#`~m(hASo$^8Q0_*FnHz|+K~W> z>n6J=xYwJp1oP7mnR#ef+BH~KiGfmy}FXJDY@2{5sDp)%z6%%z%{Ibqc zPFp*KZ`WR?(p-)!UTNmnFGOk~G^)caq3l;J~oe6E1VZ&8| zb80;yiqd|!59BYBjWV;=D#NR8bq{O+O5IaQQR-c1i!4TMpq#7xt%v4q#Y=A;u(gU zyfQZ*TyC(nCI{5Usto!s_@aQ!WN(a_V{wnc+X%*ktoOsLKi4Sj{`0Lzvqs9c0!W9& z;_33Re%`>>$i=%@7bx0xwP-^--+by*9$OQXp;)X!aNg1jldRbsDSN z6F_BdRNT75h+SliAW%o~YUcA^7VKPYdVej31|Y$0 zHuR+Pb+^CL0v0#81qBsaRvBhwVylzP{C)u$W!duy(g8r8v>kA}5qUmr{+_a508SRj z0x(hlaJxMZA;3>^xj!%|OA|S7v~W#XX4b6gNFK5rCa^&!@vCXW^6v->I%?0vGIepW9sZr;&QRwqG*S0gV-|TMUgfv zwd59Urc|Mi{t%|4o^lH3?*=|fx*xjX!jaE(?R$Y;Es=@AXRwc zk}WLlWACV#E$uUg899K!7R2Nodvz^mBMVV6a6p$uO-24H^2^90%)>3|;rjj^H;TY5 z`T6Y>zjoQ`>GjPZZ|dKWOqqJ_wDo1`H&-^uzI2*AU*BrgCV6wNz5=`~YPJo^Nx#JimAi@M*QP zfClBmYG4OJg&afAw0#PVSg04-YpxNM8d+X{bNq1HwZGlkOi(>dfGo88$wp-l$52G# z5=O<+wMKUe~&EtV|x$S zLRhy#4mI*!#>yA@!>_Cao(CB(w(xZgi=>ARc%FSeDd$4$B)eRRZb7#1lPW@CM$uNZ zhdy`QdUOj-n~vEX-SmiMEpeZBEYH&t9k^8R>ok`=e15(^+djD}S zBHaH2i=wIu3GswPXNGMzKIr$3#PpXI?!(s#(fY^)*tnnK`wL6r$q)z~p!xR0!A!=%BfCycXuM4n` z>l+&vmN+ z@4p#*dKD0Xbv#{C`=jyiYax3i%uik2z3p%BTpD^F?4=eamyo?wcyZ#{K6b_4#yt{4 zB*(83a2D4D=Uzz&CX7M)!Ktcdk9G$!1>20(%T2!MO8&@qXGN}Ht zPZm(C(Nshe$2J#%oUJ~*YnN{SX$I~$QDuisX9{m;__215m?2z8ZNp{S%($}zuyD|MLPaFUoBjgCIM#VH zS`K!zA`k|7IQlone5gn)gcxi7#?z?`+`cYrE-*g(HFb4z`N~Fok+yZ6C>}Y3uoC+- z=9tzU+Zm1RetO`6@3>0o$$#=rH+eRARVc)%C%A)?yMLkCQvP?T`SMpfv0*}lIE5)Q zZ{`JB5jElu4bqn#988G;X?zP6W3;M_s}^w*fAKiG{%3z+(sAo^)M-;gJ!< zl&PECWc_&5lp4xR#z8dO*Z#xJkV8?um=KJ4a7ax!05z7*M601_xc-ZJW-D9LDPFm&nE-iAtRh4vCSLNJuix-u?+wex z?x>a=iu}@_>7pn=U{&4^#7->JZ|W4MJ?p%4V8+n$f_61>0^Q8jDy{_DA|g^i0AWaQ zXmmS_wZu`Bhm>)~^URsn%^%HGQ^3e|bN;u;{4)*rk$bAXnpm+0kPkNf|&w z87nJmKK&MuNjZN!dFluxOXkD&0Us7nSz;off=lSC0bmuH11`XW4yb%eX3eSLfn5e5 zz$g)a+?_0{q{jRV4Mo~;yFcsYx7`q;{%jbM86oZme2f8U3m`L~D^#b!1a??WZEZu~ zn1?a8H?nQjQjAZU+RN*>IyxqP*n}4~fBeqK%K9Ek+Ws_Kp2H|ymxpdh0D5T>wwKC%Vd`+=%w5B> z?lrnUgMPbaY|Z3SS2aIFcluhO9F_4;`70EI8CIM=)Mtzhp3ivKZHm$4lm|T1Y#kXm zefD>Iupwm7;MhN}w~QOWdeO11LG#}-zc-pcK%5rMiMVg7*r+xglX=N(JnqNm%EFlF zd4bZZCI731OO#F?G4(KrTXY=O{u%3Y9vd$HaLZGzY{G}5XvLNsdKJ~CAU*w0W7sP- zv@Q#Sf-AP9JJzoO%KGN2~Msu_9Ksv#fQmt=wv$}59M}n z=o`1gr-%e1T^WiH$Q3zZEoi4qq#z;C_=D>)0`zM;*^MZx?D`sTjkxVK5viCSp|={C zCgw!`UWI=E40oqmG%=I<59iUmH~N*C+X11{w8XGW-o)eldHdM|#etvO%F@+)vZw3^ zwn&O_8q{-d9O%DAbX6=x0lSu2Vzte>05V}S;L$FFaQ~`|3DS-IRrMYiZ}8{h%a>sq}%=f(R7Y+opoOy zp6tnPvTaYcZQC{`+nj9MlWp5}(`45)J*WHm{9p8{7xk;N&)$2j@47DfgcGXyv511` ze+G@LPik5j4S60mp`}dhwxDk_k++t|NB~`7k=}e}(sYvTE72Vev-7Oy^y|7MKE7|v zzhe?oWDmjOcuCevF`inEsTa?zkrQrcG?b}7GAm6cq!z%vFDx~csp2_LMHXN%EJuYo=ZLw>iSeSb#n_CEoszq~ z(!$Z1DIhO)f7gww$!7McanQL9gWCBknNCN_YY=|LlHD_F^!(bsw9jO7<@{=H@VHRMYR&_sa&>10Zh ziDIAA{4jWE)BomI?7Z|}#??6;cE12fS71~#(ZPN!52MAp`Pr)rADHFwkYJoMrK@>Nrc~0sC1N=dPuUBmXoOL+EShYo zLYxr+k5V5~U{AxcR)?qr{0qRp_>c3h?|WJc>-b_g79zEf?6%-=`Q!5BN33oKh9~vr z?lh=_!~*!vPcn5Hc(Uy8f&VPN<%4FilEzZIa33G)<-*L$g<^08eo+>1qsy-14B_Xx z7lICIoLeVUDJ46w$vr&Iv^N9T9`dhT`1TeQg5kmAHnAs7t6IvNPg7yf+fM{0zP18L z;5r^R_&`TM`x-QjG?Gxl0TeNNg=*n%DOS$;T=tp6XLr^7>dk*GtMgl&fb?W4ipwJ! z1G}$%yqT4}4CKZ0aG`U_x{plWH$+r1$-tnXD=#rHEuktU3^z9H7>;rdAsmEUt5t9x z$RMU>t8*Bs{spmpqtf6?Uj_O@h1$zPRX@m>-(()QpoxzDvqbs&#d?~h+~bW z(uN)z%dOY_aOEqNN9W)7STgnzHrlK~=!H)1y}|yi@NbHWPAj{*7v4cdP@q<*=E|fe zmd@i;J1N)CqAN!@qhxK0%2!POLY%*L%O^(%4-G5@SO-*<8$0Hs*iLxCi59oFj6_AG z6GlE4*{HL$qB9K~wEIi9%+=6>NZ_Hv$|^w5%2e&lQ}4{cNU;S-nA@;uy$2|l$^jrW zP2iY#y*EHv>~TLQF1>vWFmr)uQ=dUEz=U@=_z$@Y5ct3b%a+D_%@-Dd^vT`z0OC(4 z;inxxzjX2^FEQ57p^jowtzR2Mcf7#L0irMfQvg_UwY8r&L|~&EIQpqSJ!iaAxO}gn zeNo@i5_+{%#wLUZg~FB(l#V9slT0I7)pn(dT;{OL3i36|Gnr*-h)v3K^!-_biL2Ds zwD_d!X7|!(c>Ddl-akP46@*n{6WlX$T9qj@V?Zo|m#7UBz87ig@G6w4fLi6VxuKIr z3|GP;!Jf&EN;-^_XYOXrPcO=qru5(81t^9L;+Iz8=HH7B7wI$bVCa?{+nW5gkmDT4V{$9b(-yv#i_ zIxM5LwoJ`5Jp{&EnDSB``LuZ&xwVWJit3tota(Lm;$INd+GQp!*Nih#`yWMspyhZF z!+}E-PT_V%9R^`617^=VBV6eDJgM0I*8B8QxbyJ^(dS7Kv}Y_z-{pJH@)QXDDt-y-whDKub-fb=Hs$IA?ZpIw5NeAs=g1XuIp_s2FfecX948Bdw7`>;F(vl!K3A+5l8S0>O*2+S z8uVN%TX9Ic#W?I(FBL1kMrQX_7CAzQhaOtNQ8_iKLGR_KFz!>%3&LV1lVb{tTq?UiHYo5%mv$T~`ZM?_ z3n(xpdBor&qBI8fiq8_72VpqG z0R)utipx9I3ulZt_j6izP=41?B8o!pZp#`4=!bqRCCJFIqY9LG>R?QcMu*M8P=0S5 zep6u|msij8zj`Febt+Q0e|6uZ|2^LD%N$CN^{lR<+~FgySXD|C!yr?xcAcXMW~_3U zp!;>*_wkai#M=7+4`s!Qa}$W!>91DF?#iu}rQY~sGLZkNYYNiS>j=K*VdH9l8u1@L z_yc!}REkV=>mA8QP@LcI+L!xMzJdIA%*)Qp`!&<{+`njrO*PJ?5co1{{~a&-;TUNB z+}Ecs%0tB(IDh3bVINe@Z1|n@DA`NJ0%(t)`ai7wcXsZv+?XTUu|UN^(QzXKHR*?WCuX7mrDBw^ueHxE%hj%0&4S&x z@^SG)E{l8mSNEOlrQhxb;2HTDCyVgEEI^i?eG(^j{%uhm(&X6##iYw`@PHeOZ}$|e zzxUdpDxCSszVmWP0CiGR6fr)(hu5Q~U|)1Un5WFsbXlt$&m5_^#J1a=#Wrrz?Gg000)Ki<2ESQ&Ld_;YQkU1|eH({n~dwsm-#gCitH-As7h6#lzTyF;2&C+NWtkr|JjNfMtfThrR=~{cx8vq92 zGGsZn2F3Yqk-Oh7>{+njqmi47lUOrl3!Al`)%s)WttyxHKS#knaV&l}n0|tVbGr|< ze&6kX++})xy4@Zh*{94JX)jjcXP$h4$^UT#j?Lb;?I*tV3wDBk*I^L{X~1^KeNnRq z3VYB}jUG*oY{^%2d89JHP3;V`NgbdqP94X~zzze&oKVlCK{N)nTLPV)bnXH*RmN60 z2PB@y5~S((m$mI7StW7yI#lO5O`%o{q)WKOG$u@fVT1UpLreC$eaw2r`CpkXUp7y; zZcYby&*y`9-+oVctW|R~np=X5^nHOW3JQuEqqc=<8D%6eFAz`g{ObMqCx7FD8Bbm+ zyg6Hd!DG+$b6+qtb&VPStJ4;-K{Rb?ga!xJ$B3hVn7PF*u^kaqY% zV71Fy5xvaue7*C|CQjcLtpEC=&$yC&%vz%7chVl!ow${?I8CK^ghTC`csa|nR-?OHLhX+mz3!)MKVwUK%(4OnQU0;AHeSsP z+7J^IS!imp*xPw&hNJGc%fhX6V`J~iMe3HX$j1)1oOF>RJv@0Mr?i49)@F*-Q(=5A z6z+bv_Aa}lm?|5{J&J<%u$BkO08A82bw5?;c zp44#SDy9r~>|)g1yuEE$JAmz-aiLMORK;h`wa}0PsGht4I-fAsIOitX90+*>8V!Gp zTpO9F*$pmhL|4s3r>Cu4v+g$Bd{D6@tP5z~l?Z=^_5os{ZV-0ccXa*9f*u*+kMk;DQE76F=L-_07#g8{3cU^gVx_0DaEDH}}oH zPsp2H*Ml10b01=Ax@qBD-V!sj9FTY`1{$az?@xE_D_yZb)(hY;B7Y`+nWyy9w0HZa z!ZbHDO0;ShE?XSm{l`veX=tn`)iGe+F&^?_@YEH`{fXBmMf%r|CCRO#2vrVa$LJx@ zG9&W#JEFsU_1*}6MCR>(!Infh=nzAPh=!A5>WVxv$PjM-A|IU3RPnz5vwPUS``!I{ zvXoD_YdK%>>G>9ufBO4Jd-w_BbNb4=IAzA#qpK^?kr|cJ3B2IgoQp2zNJ=q|XmU}p zj(X2d>Av^h)wp*o&#!QB&ZLUbSKcRfHm2={ET#jQPDSe1Ho`8)H(~C75%HgwVcIVs zj3~&Vg^ezlHdl8C{2nknA1Qu>+Z6`cQz0A`7{+F;-vwqTB&a45$4PNg zqE;T?WbU@@cu&mJcyJ{pOC4=`Q7q`5pGWxm{!W5GzK2im^LE{UUxd=SVtU*^3;UdR zzaczJ%XAfe5rIX!NAM{DQ941yWt_q6`L#p9>0lrwqnC1|VU2!YlwRUC*I!C}p2g=F zs6|FvHho~qm$au@kphX{BS{&W#raBE6iE3{rs~VAghq9J4)wG)R@xnwN&X zTz%up^NF}e$Z$!vaReUM{gdr`0+<16xn1RSMu7NYb^p=v%0p1zV{v8VF>RUQ(k;x#X-$L8t@#< z_!AsOlhChiH%Mv#m8EQy{9;_s?C*fb9G)lIt|y-*s3bReqPfQ2hJ}{}IVJM~5z4rK zPO(s-BubD(GjnjNx81}r20Ux^7n7At^sY~C8_Y8bLBiIiU~L+Z%}>y7!w=-7ZvUm9cKiBx7Cr)3ufDXBn>bglAPeR zq}2#i6XzWd0Z<^oh|T%#-TJ$tlGF2+6sQt^ni_PR#>jwKuM~B?u~NPVs?U_-R|39C zpb638es!E6j=u*e000V$nVFfCi4B_Qe>Mv284oc@LfM66QYlTo=I9fMKRf(kiGdGO z2hjy=II2_qf9Xy530-i4<-n?WnN7!o`^QGJm^Ka?O`^*@u!W9KX~khnH{k)_%fv)! z>t*}Nfn<&nNAl*I2hulZHf+Cn{}DOxKJfWAKE{zOWmXae4jaQ6Zz{Umr=Z^)ZAm zJ+KivT?<-Eijyi9$}$UO(YQ9KuFggH-NI|lGFi&P`jv}_#0U>hr)PSzTi3)489Oyf7|VNZf*CP9{165bi{ zqewwN)?ysta>hFmFKl^n&v95PmyRvwaNs(IaPLK;b#c}*tQ>ddpI$lAL6&Afulyk6ev4V%_61WT#>r^(XiL)(eWyCNjt3Yq}jpMsb`+06OP2{+U2K^75NK?}q2;gu&$ExNmSU(}o)?R6j zc#ZAtkxCU!@<7!eNS4iBxB(m-V^7aE-iuFxiC5P&Ff`fr`nwW9k>Y*#O6HwG_|t}j z#P9uR<7xHZc|VbqjA8dkfW#(+J^^c&KjAP%~o&6RvKWQ63KrCZ>~0)tIj^% zFAq@Z_n^0nBo5qzsDj~yqfQNDNc}K!Xae!XjmRGCca*IJD+Gt_r&;3Es+a+gF3G=L0LZZ>`*9;$1Q62Id(*|B}k}DIy^HKX9N2| z(s59dm_m3pShCqZq2a>sL zT*{NxtAeORs_L;tgn+V>t51kcn(en4{i!hO7JmtlHIH(ahbsmue#DSqu z;cu*-RuRDxB+u|k;aQNjirrV;+g79S`?h{}HX8GlQPn__2bC<=^+v69^s1%_D0qZig^TQ$$%UBnh$t$a*!&!?yQl((k2nB2&ioP>f z)xWJ(t(4S)qvgux8d~ck7Od=I(5hjSvR@9?tV#pUg|ZI8(V>cyKwZoPz2dS7>cEIU zgH2LYK!E{M$3c(^*3S<2xPAb3W_8zCbR4kh?Ytg8S%idHuw%Z=ukeXmw@8L_F_L;p zA+aNK6UL&rltBB2$qbb>3DM~omHVYm(bZDMcCp~jD#|}7f?oL<}keJ9I7Vc5I znt_(Eg5rAS96;nbDXQTH5mJVLer^_$QZsiz#)7|;%@`4R0jGm~u5tgj+C{ZqEej8i zwpo=LdKoZ-XTf^<;008`@{{-X!U)U&j+AbPTS|Ima^l*W=DO zfKTu&kVT-=bP?I@lK9HzQFF!`btbSJusSs0#TOqmO)|wc~eZva^*ld$}k%8~F+pht2t3AYuu0P3JjEb$1Yu+v1iH zP_hL(agCgRW26L1)0Qw}=`!<2KG9&bDJMU(lEH7;bhpD}Vd(6?@zo%ar_qEssJw8W zJnbjbX=;`eBXkG%l?a*0n&En<+3St^yc;#ZJ9P~aatAo6%Qh={dFa7~*EM0qFu!jZ z4Jde>Wcks1CEvD(tk&N(eAoeRdlEsnAIoL{k01KN(c@{zrE8*$XGS~{PNFlutg(O8 za`!1LK5RF3+`I~Q4#N8jqj?d<49m<6IR1pMuNU^(i}062D#^pSYs@tko(Y*FM!9x4 zBAi8EQITw6=M`kcn9bbkey@HSM3;{oLyl}qDHw%o6Sf-r$=G7!azuGPADOB~BLYJ{ zILU8*yyCiQqrXT4Hj0kjV1lr9GCbsxA~(M5kinv`k4)Iu*b)}W7jA=pGD?90Dyj4& z9tw{5EA*M1sTW$`ywwhD(69@54T<6hfw?`tiKg4ii|;g-yZ4)SoB4(6))L%rJGLz? z5E!^Lq}@7UFcPc)$5p?kA^l-PJk%VfAoG41=<87>i#j@}AOis$5v(*MFd-BT4I`|@ zL<>5JuH^Ri)T;6E_lv8V6TA<{%dT{QzmL47sj2C?qdU#jbNBY%4VO5jeDdAy9M?3u{HLfb)y5-P;}KZvs&aMq_vOw+a~M!&0Y8ig+Qe4k+G<4dXU@2Yj?|a| zV`UN;7=H?W2k%1&w(ZX3>PtQyYE{7GJEn?o1 z)zUr~6ciL?@h2nkY10`|sI~8HQCYset!)hWIDoqDld;a0SNiG?#9A{-*u2Wesi}#c zIAhOyH!s{I6N3RQrg0VFjIxQa6C*EijCdBmYvfc6`eGmKDP$xDzHDTtfG9*8fwPB0 zQXm)gtOOZlmDo8b73j!HQ{rsg^V^jtB44D2wSvMbo+YjwzDf$F;=_CePX2_O%bwyO z$j4>U2SbwMpq2wa0-Hg3S7@!*p=8pS(ctl}qD1~M%pwZw($kUJR&^qtywgluUUFs> zEG%8Jx;d>7^e5GS-?RT^UGwK$o2P?Q{ZEDfSy;R+vTN}9psfw#j6Q1f6?~JzCq_39 z4DDczE9e=5+0z)^==(3&$&73FgD0*3>{8fP@{}EA6p<7*?j(q$8R6M>^PG?zP+vq3 zuQ9jen+?it2cqk-NF)~E^<6bDIumMM=ta5*ee4*87B1SY<)-29S73_;g4gv}G_Yt~!xqGAp`fX)KiRtDV*dV6HFf2Ci}<|0(i7YQS3v1R#*LkC z5`M*|I4&+pP!9k8BUmMcMObmj%A5Y4wTH%_zkiv`WT9y-e!yj8Vanit=EN#KiNfSfFWQ6y+E>eq;CRpt#c z6zWH#nYbu(NmT0(hCUz>38Wk`Fg;tkaI=0J6)RLE(OqDz?xLv-uGv?_F}5NJFQC+* z#b66#h6d%%mb2Z_*mI`#>ASq7{{k3VfiqwU{RBM*93XjxRp|Jpdh3;Q^)`9p96DfV z`wTBvZw|2V0j+pp9N+k_?gzTBh=~7RKLk=cfE@~0ckw0VEc!Vzzi}&Ovr{k+0Fj?2 zErv^n?(l)5?m55TF)fGvr`SF|VSoRX%xnR9jo0ksl^(IS6UH>-xg`V*Bz;V=p?4G} z>=8q4SR*BXwk{;71@4S=@wN&8m3d`}4^ zGo;gMrrwN_#KoUL&NyReiYiuTp(Ba6^3m3A|Lkb&8d<-kO7+G)ogDayJa117DvO4e z)pnJ&0Zl(HT?;s6NekZ(L6ziQxD8S@Jri36g5VO@4_(>S#z?!_o3XLu^(*k+$#_x{TF(f~YXPY+yA*s0K{bn_tIeR2JE}I< z-^Nhxm)CF~_XN(r7b^;j*5JdxC_@t6wNn!UuHzoRQ43Bw2sV_A7<$icLTEg0XHGn) z<0{;{-)sVW417L26tTwUcMzY`=QQ57kFF3CQs^h7NOY1Y-GFAnID|O5{m&o1sNY(* zE{6ir5>=FM8x_6k5QnguB27WEau4{XWbFj@+rk!cG87`?#P7+~dkc6sS(SfZYGBN& zhaw9mX=%`*pnCr_dAsIW|Jq>VXxO(=#~XzmWyzfZ9!XdK>OtX(@l7B`zcrpASBfSo z2n2_Li%=|ARLDlSs_J}ob#?npdGj$)XC;X>jx5+6PoZg6Rc%N(P{nWpdarb0nK$5A4;+)vm0pZ~^v|?HE^Hx7g4iJt)^-<{CE;FPwy{P?=A3Gue%209=MDQW?%dfBCJpMl@__ zRP&Qy9a2Qz>2^BHq{Jgau3C*%H~GiM4^@vM|e`UCS~HLdKPhD!cvxnPH&x82>m z5D(cDjOT!bQ;WeSwd? zx5Eo@9o*U>5>31QWDP!goOb32C$+QuN4`G^*m8MPszg_I6R8KPK#y;3qMkj(@^L-uLZ0I3HN~k7Zft957DJN=BT(%BwT{@MwM>I=@ zY7&cP1dB;%112J^p8uP2Fc*aJJ}DIPg8uKi@KS$w__X>F=l;~(C`MLXUw5+Ql*HzI zaCGiS%~@yx^hpfwL-LX>>x4|-?FSP3J@J1FSI&B+A$?EO`92ZqsfO8Tg>M}lUlq4H z-qMi*XM8W6CH4|doSBc7`L*>XJa}t3h*J7z&K;>8KeqFaR{(L>8qdy)oVjY6$#b7I zSa-z_T?o>uWam#rWj&yfCe~$aQC1^HET>Z|IfTqZ=+EnfuZDB6x|yW*y&_5t9I&;*%oRBm@1;D>)1R7BF3Q4+4+*QCiLuq^n3@+TP5pgC9M;C z=F&x9g{rEiyjou)Gdg8tpje?G&~AFX*sy!fvbe}%ZP?k_sg>>rf)o6ua@qS6`u~^# z5C@=D4MOA_J(~ClG<*0)eE8fU=Yc6AKq3Y>(%3VJf`J1)@UZ{*047TTcSM0)cCOz) z&!S|VPLG679XJ53gjxfRUU0y*{!{zVOn&kEH?=(fJ8Sn<0K$J?TXh?x~=B&30LXmE!pNTGXIldnXYBb z6kk<~EEhEgZJPQmJ8{kho)=TjWic(^Jo#Ky*8D?$`{`Udl-J!2#G;f2<$>95t6K<1 zU-*PkTPA(lJ$wou0?Hz^2oE_)Vb-A74~R6KK6O|eG}d>IWnX-oS5Y>xi-rq0Kd%HO zat<@@WyF_NWEP=DoPmoU7xx4ubE=x%wQQOrgjYOFB6DuA9QV8X_kpADVPYvr7>JTq zIL9s;fudo;+I)F226dLB@S@t#&^eg<@p4km>uP7-_x|fc}ESi-9 zz_SgUHKaL+Z`wP#1KM-7)_$t)HUoASX;y7y@j_wv5Y*SF@6nTUka+?9gk8z3Q;O+D zm8qwY_Jox5hLITL=pIC~&}kS@lLxwAJwpR^otTRhSCwj%wX#&TWp^A07fEH$+-xr< zRhTI8+E)Yos2L{4jVe)G(q~SdyY-!EDtBsUp8?NzS65fN7EUM;5RtHBQKo)YVY&bq z?E7JU&tU)r92DUB`VD^0CIGpjpA7n+nx;ziS|<;WaQBnxZ+aek5P%Fx64;7>cx(YB zQ0UWXb1I&O#P_)t{QUYf*#Nw_LBM3&_X&*o2Ta#t6{D%w=m3bA<*-`GQMx4bX|Tyr>Xg29p(H4Nr|m!0!l(? z@jTfWEXqD89$yY>%O-`De4<#C=PcW}WZ>)jsdPbojz7ol4(xS@3#~$7S%6%pU{4qc z_KO}+*j{fR{vujyjD_zTHpe)y@XhI)@+naZlc}XH&tVXv1_j#*1OlaJ+QZ)p?`XaB zTZt;yE;(cPw>Npa{PO>00p3j4#+N&Yu)%?86Py^aY+cVKD>G?^QFQ|_4OsB$VevBm zv%mglw1(~!B<4TO-oCP$$(S3LfmjQn;#r|PIR4ES?=GtLruugn3&S&b%I z5-#A9@L{|YjRUoXaAP((iD%K9q*$uEArQoid7!*B*DP?`M3ziO_~!7X&i#2)KCntn zf*suLLxJPHnHubh}Xv>I}v>& z>UK=E)O_?BTCmkOUE~ZO{%~@zFMJ<=U2}fCS{9T^rdkC{SOe4}!{g%9m7DFGwAM!} zaaE}Y-`uC}r!HCy$#Q>^S&A+r{k^g;ZmK(oo11N}=NRWShz;Jp1O%dqR!Dqehgg<3 z!C)^`{3NolLS$zgD`zi=z58fd6yWn*P?pMd62^9TI<7(xR>4=ICZhWls>yMchZn88 zXU`Quf*r>)fG`YrZh`9e37*V_KVV(2&h3X1s2NLbb}XDh2`4=+hsgJ>yWvDYTc61PqjA z{t z7b8HoMz<`GVIFII)@Dv!EV8PUmrpIfg!wUE*$t0bB@0nMIn7gpw9crT6DR zajE-5Nq@n#;Vqfr*9>WI1s`JR{&nZM1by$Vgq&FUV+b1*x!FuRPs03t08x0K)r@a_ zz}mwj24)_0bNhu|OfV6vf7Dc`J)Rz}^PEJF%eZBkJ0D(AsYFBrQbwDBJY_$on)sv= zzan|q0h36W@kc*p$8`1>$4w95&^$R5U#n8j!$8WHRJ<(GMk%=d}= zc-BJIL@tekfH@7=I=ENeN^wrP`#v^b6xk=a_oLI0-{Du&iwEj4U93oY(%NcDIY;Z1zl@^N6bZ z#w3s0DJGF`h+KN;8E`M)nNkhF(qX()PILk^d1nqv{a#BaWL-i~&?)LLi@$G0c_9dC z%$vv|iBO&;429bNopQ$_z`5+H>r?YeA{+%^48*j$^2ueDYB?$vg_aFtN*?^WS9ng_ zq88AgqBhEALjbQXW#d>n*b00Pk6()ncN%#Zr2Kb1RpjmdrYk@~0q*YrUqA}s`nOw0 zC!m4d+aHSZd2GxDTEhUA{aaCT^O_69*9uxn`D||0LLg2APrv(0c;+swUtf*Aj<=Ht*dm?#aDxJQ#A?LsWP9^H2EVW~n* zCu2HXD3|vR#z!*Mvc;{|`3xcM_P$y>`d(J4S-#PB%x0Vxa_)Sgr&DM-xbus=R8_PN zd<(ipG2Svt5vBho*AI<20m)Go9L3S)=5w2xnnrhr@N4j49Jy-yT^iM^e<6!l+K}$b z_HpNu#}dPK*E}(kNIN6t4jxQ1SH55jRzzC(O5&5p8G7DH?_J-fbJ~KNBMT@eIF3bJ z^0LHRe(S>q*O^#Cs-cJw4RcG$qL`;u5&n79z0ikgqH6uP4U(Z?Y2Rv*j=mWCb9rc_ zpHdVej7;+TpOz~5x41A3W2TbcLxhZf%$|w+P<*0^3zm-nNsG#LPervU75a=M1Q$#Q z8de!;RLM|;$9J1_Is%992O$t)s4+YnZvCp#tX%uV=Yv}>lc$} z3GE}BYHslTFJT$YTCI!9)!ZHL@f{Z;uR|`XcDZ>JJy;3n4f*&^^JTVXCU*!6hXYLV zA-~UKChd#80J(1BA=2JR9<5S{oUfLYi&^||fpLhG+Ny;w1MZx5!UA-HCXU`uR{85! zKJ8!KLl^tXSlwb(wFOC8#CO-C;dJ0?qym3xR7=ttWJ!aE?u6{N+K2l3KmY{QoW&qu zESque24d6kq>{S%6_iovM(i_pUc!n2%MG-Zec#{S-q^Gc)|;)}$Iew-gXBsFfMkVw zX83;yqzHyuVJ%J5*%&5NX;jL+zHFHWSKCjP*k3te9Ha51^_l+HR4eU8+JaKZ! zSEG~#(*B$@OO>mQBhcL6G)M&fK9Ml>rD-FE3qe-W437EO;uxz*c~%{z62VigUG$Kt zbf(If4oJzfCw9%(wQA`^(*W$hjtXlEY7!)6l@Zg-Xk?&A0!s$L{2!_Y;ynXyGOI8NTq044 z!Z}mp2edEUm<3T)+sFjDjVPiHAkKWbTg}hr=|n53TU);UN`pec#RhY1zp6h$x#2Ye&t6N z&36qVjY~ugU9DmD>A8XRXx?n1E_@+QI5y2kxN29zH7gc}CtSa?JiMdoYReJW&8R2t)b zuQROSzyMRv+eR*Fj`^nd8Sw$9VYh|>Xvj60Wa|92)@CV896vo&z>{EqpiKlkAMTKjd zE6ytJi-b4-TO&u|fwm^t|ZEgQE-x;C zdCj%W%|qb8+Fb8qy6kzm*``JJFLURw8J!+dC=p;>0qi-zix#*E7H-**1Or;qbfB$O zm|Os)u`V~c%o?#fynm&Wu@sp7wEHEF1UZRGa@?3~r`^zAAFzaCo#K5%EWQ!nZ(`wO zqiK#Q#Ody6E9D=j+|+uK<9*GG#Ox(m%`cZNEo7#|J;it7_Tc=4ltPhxRr1j4cmQeH zGH$~s^o%3jc8WbE^{Wr;r(FHwBaHu$k<6~=b50oM^JFM$@Z)Sq-YA`>T6{^{1_FBO zMHiK&nZ#`{&~J}6j!>nGtTMQ=kSN{QU2K!>S1@dX0L!t$V^Nm+SLUk-sWA0Uczun= zs?vLH@e}x9JUKQ4V}h3FZsx#8r_EVfZY=0++&!#mS_U`Wttdx1ny$~_rQfCj z{YZ;Co>pdz!<1Vazq6K=&praE1O(tR6mSJ~jWEO8zryHP#8O? zVHQ(+SRW?-;J4+}D`TqF!Q-Pw%nY5sCA--7< z5)8Oao=bH0^yt6og&JxwAfbDm0Y5f4pC(N0;ZUwL=!EMjVaP}^i4QOUV8KJ$*xKHF z`f-8tG`$Y5@L_emJLA5Che*7+NKE|EQMkeznk5Lh0;Ehi-g-47RR%awHdyO%tG)^d z?tVF{a`*vW`KF!Rd8gb(;jAe((Fj>=fj_AxVK5nNhQ`64E;sk58=0`GG}I7CN6>w~ z99fA(2>rM99YUM&3vCY0)t-Ut>-aU3>Bo!j7rj<>H5k%_7>#gLD6U>As zqNN^<7m82MGJND6+XGqCF|_p;52jR{Qq6OVswK?>0f%45ElM}dAY%TN0 z&bFv#9HP&z`mANrkp&pDWP)XTHM?_H*cTu9_$edcbah>nM_IJtqZy=b1O}_y8EtYL zVXiVyN^RoFCYGXv#VWMMy>TLPKBC)0CT$cb1_mpQQtERwcJf8I<6FINlW3#5fhhK5 zu!xqpyfV2s8U}-YKEby1fVS{Vku`)Tq%lerzxmZQcFAThqiDh0vZ`0K1EmKITXN_96wpXt)d-ZhQrgH`@LB$2I z;H9Yg8BN^Xf1bIFzrK2D7CVnir!1+XiSquv9*`+j-sc30rBMDr+qoJ@p(x9LAF9^= zWyP4-jB&NQ>py0q1l6Ae3!5}n^tDJ8J1?snv_gK`NKvDWmNvL7a@Bm?OG|N5k7RHe0l7 zSyk2W9c;N^9F0G+KueJvp5`Z9ZHqUPSduA>-l?%npHWs_=X}XQ2LwKi1V$(;-DW>I z2DIYtOJ0)zbcm>75TxHjjQyRmd}nTuHbXLkGE@r#ibcyrjyCeu@D{Wqe8AmpiSlrSh|w8#R7A1=7oCkg$+RCUY#Q{R;Ok`y@0x$j`H&Cno#DZI!) zoB&)=4s7!o^RkZ%#)EFFmm24Td`7TrR5LA@{!>*WYTno%2ycL)kpy} zU3jPk;^2xBBvuN$ZY4mc$BfG?aWw|D77eOwwrGh>6@*zbvE5Iz8K>e4SGJt>)@Bm6 z8M?^#a)li6%B?R)9v#CTa!v~V_up70m53c zk()K&CG~ILDB}8CCs*!ZRr2CvK5yMj_iCkW9yYo`waOrCFCfOx$7$ZKOht zROyl^oP#q^=}c*#-h8fCeqb{MPilC*gIMO*i|xP3O<;0?F;h4w_Je{Wv4Mf=H%c&T zRhu@5IQ?D(_B?aHY3CV!@dfRp$yeOE5c!-U3x*M#81ztD{aHJEBnG8<@TbX?!KYpY z#++De7s%QSLqLqBtpL34j_*9H7phzXXzM3YF6oEb!$fB-0-B>kNnV2x0OkdQvsK-6 zcGrdkZJXR|L9avrT8_2q8K~-EIQZ)=v8^LwfFALfZ&ibY{uhXJ&O^dC45k(2!Cm3w z2F&CJ3ClU+zSO_AhNME2!4L85P|{uas;o#v;K2LTJ-=0cx{X>)RW*0WC_t&=_;JKh z=I91bbWXPflw$63=}BB%+_iaJ%lxAm2)V*F`5oZy7yy+Rf1+CAh)_d`R8uy`f4~V7 z5Ku5>%K<{^ibAj26=CSUxjAHD4&K<L2|?L;FAN2y7pq#m9f;F~S3sO`$&V zJ<7SSXt^(wrDxfCB(tGnl>vgtGt4qyOX^s8bko>2r{!^iS+SU%SV{>Y(sv#hE4LGw zLII-P{NlQKy+oP}IrJWWxKgB!`JpGQW}p&CNXw)dj1(!bnL1wnc?bW|d$I8bO&aA9 zeG4}NK?9MOfPd!!LT$jBDcmSri9HY9dm7EEX%K~X1anP_f>=mbugR!CnC21Rp6zIL&~y%G(fZ?pCpbS3ojT*&rdc9s) z^<{}fa9yk>RgtN1xk6dB!6GX`Bub#OGiBCm!fN(m@UytM7&H6s(jOZ#5qJ-3=xHA8 zI!ppmlHOhB(KD04lQ(F?v7}%|7qeDT#a$?nneT73mDZ(tYzAsE@4UZsdVXYc^qe{N zZb>fCv{^I`ot7RhZlz$S;sy_NNGuAGEjtW-Ok~I}F)}PNo&jv~ko(np5dcUjwaQyqm)ALt87t(Vg z-6r==p$Ag$Oe^k62QCkOvsn^-Z$44!l+m34K^U2ulma=NU^#91Ld>3_((S%c;+vqQ zt7L+aT@~A-K^=Ou1ia+l9{`pdVIP0_L{_?UdaN;z#O7e@B7GxMke4GWCsFZ z5#n4&P+!(t%q2gE?tk~b(S-F!0iBeF&S7oGJi~Bvr65^_Qvw&80EOo9+NXR43VFh4 zGy|$3_ObUi?SE3rwwL=54a?c~mhCqJcWDKkB9|bQ$?Jj@Gt2N0dK?8xepUeN_Mfq_ z&rFex&COcs$TabTI#aIgrvP#bLTjP?=vDTBF~E-uV1h9#>bDe=-ovTtSN6`TtEqvd zJy>L!}z-espV${&G%*Leh!XQ%O&o;xz(*@EkXH9ebyV{2v z^0B##T)RW|I&Aa`KR(tTGkHJ!t9!z>F|;;?EJSLzz%ktk^3UrLu6LmKUHmH*_qSz9 zx<7Va>knUZ6E3SU6r>O=_O8=MsJ{mwOHl{8WuQrruZ+QlyKeft$0k+c{gc?;^b!=J za*;}njLa6QXd$IfAp9;0Ee!6oW5h7&oW}bC?uqpE5pH3rO*(1(Khz4bUoQ->BXA_H zA>Pl2q+6SUyOuB!3y!)%{*#O%_Y*b^ct{yjeJ@=fUpKQ}KX}}H_a1WO^PJ>8MM;Sq zFmiS5-Dlr5=V$>#u-7EnTU~vw^hxV_8M4qvZdJ7=4aQ%E>tdu2Xx>++uUDKwtQNwdL|%!T8FdRS}KLsHW|QnZX*CQlkDT*3+;SxsKh zMJB3|@2Khb=Q?DHlExAm{vUgm0xur{y10DvGX$&#BSyl-nU!Mb&cO`B6Ih2)wzRmg z-2A}~YJoD1-F9r&(W<}!?|n1ZyN%$t*dK#;&)(NQCGg_Ikp>xl30x*EBIXy}B~d@i zHPSE%A*4leaVx!T*_Fq${URoaoH#%N_zb1X~Iv1J21Rl$}nP+ZhT_cTaKFujPl%zr;q0z?-h4k9oM9jI*?R)b6YeL-1>z}1A<$nNFCB|x|X%|HoM z!Re!u++VFNRb^Lf0T%(1xxJ41dQR|dfukKENdfCG@>4$ZZ(2pd{m=eI2ni*-oe_NC zj0Mv7agag^IOcj}Vei4ZhIjS#<#sNl%B)I2A*~RU2eG?J=XSjuvKG6;))~J;7951( z$dM(nK=R`}ZyJo+HeMOJXl{NlmaPGZQ%Fq2CP3aL7K*aF`+qG!6HqaLPuqW28n|k= zYO?P0m#>qtAe6`wySI}lnG@ePhqbLxq}{s>?)qtqExmGUq?`Z_-9n~zyBg`AYS z56!AF;3lr1fl$WUAgsb8PJ*BS4;=C-@C3s(<;zKvugWrD()QfW@C}|EWG{R-#8bOWtn&DiNN?pih^e@F zQT%l}Ix0#Azk&p?uy?-J|ETQOO0+C}R4j;4YdMxF|Im5{X=TMwKW3cPS8wzgF9@mm zBvbuC)=9|Atzg`dXbwMze*E~0nXzCf{WaLYf#RyNc9=e|{EHe`IXruHNWSVc*+F0j zA)&h5&7gYvct59i1Xd4Ab@Uq=;FWWRUL%u9nxlrnmhMrM_r@E|_4MPjs6#YAgz+Su zO>4#P`+=tnE-XaFuil5hTD{|gKa3rPk-$NNCJ~`kdJmz*!<@~Grkv!%rAf~w&&{^&D|o<u?~Wz=(W1;7sX{Rrq21dnHiT`M zkG~+|1@SR;jCLwTQ@}K92_7RRR3)npk|EK`NQ!Lwx-My|jX!5)N9o-=6H=il zBN}lw7q48P5KWpW-$OtU}|Ct<{j0haJZ? z{{8L9fvAvgu03E}a^CL-Y~(!}h0cyOOVV1JNqdJ`xs45<&L_xW# zxiZ`;%bXINQl6;OMa`D$V+7Uv*46$ra5BwstIbp;UdcM1U_5(858C=> zOOwEfbDXt>8LTkr(oK(t=v?^I+UnfZ2ue znLu@BpEocRw&0t|w7p|M((=OUZgu}^ucP7o52vaWxew#{8r#kK-s6_BD+ zZ_!-@V5ugVh-Z%X^}$NVO2Rd51X%Dq5Eq^_XCUuE?f!T+cR`g8Jk3)HG-3%L@GubXN7 zzG@`hl38<|6`VSki}dd76i!Qic0#5v#wjO*#~UrYcB5zcTHvWkXY_MhM~y5Wyn2h^ zzBa%(;`=ts9v+=2Ow1a^_PX|o-F;l*=T_Rl6JoieH)b6*hegl4O6{lf{qXCa$e^{w zFCJ}^Il&q%F`9`pyPW#%?+tng z7TKUWI3~lNGldW`zGz94=8!ndYd?fCaqV`FnxO<>Hp*Z}7>5BI9k*C~8eC-x0_V_g zo5`OBfeu?`b2_FUqgew@S@1xRn)D`H_3PoBcYK!XsdtxQ+L?kEfP-ua-F#fE@M%pk z66EGWAIhl<&uFFHb0GxSQDEIQUYs)Lrp2N9+=-aNBJw`8)o0#!efTB2D+Q7Ys{b{& z^HOFYPMPAKG%I(Gf};4R81mh-;u9w>6mZ!OEyh5N@?QVgFZ_!cQH2S zKj84IA2$uG1=@3H-yWAQS>NsKI#*XoKrp~{M+?}Hd~=^px4akpFw6!vF<_TkUthmi zLCGZYA1Dbca~>}5GeAim!TPn?F%+Qv_%uv4B|+ghy^kh=4r~lgYVH6{23k*Walg&3 zCmsaGCl?j*#FESn6Upkx6m9rkV2{mzF1u=|{KkSu5bUq%lnG`}ROWNJsv%N8Uk8HP zuWMCk^;pVyLD%n@1(h7!emVrvMt+t+pE%~RC}2q-I*R_PAXkWG8pTzDxlo6pM0>$o z?mC>Yzp9Y;BS|Pux*ZXVf~{W-BY&Y3p1)#$b{azE zi5p2EvnBf(!i;;Xe!E8}V_n5QGzwE0@5#bH6Q4mVGPS_jYp7RMDAPdadbO3nl!}Z= zz2o9uC?5i7MPDx>?0%i#zRl37iB@O<-o0i~+)4$_>wz-eoxxG*YoxOA|15cH5xy#7 zNj%rmBRc;5Z$eAan4IsMC^||Ix zhAZI1**1osK7wsrR8Y?pf$(2XZ|;x9=?)2<84d)P)IXXemc07Th&Al+69BF&rYXAdV%oCQ$LC3yr7Ivz{-^c-pE%vHYSv z?(|p%@EmUbx}_<_OEl=)xJ9bv4TA8>maW>l=I&#DIxpIDsGg~8X*?9yvkMrn?Uh#_ zV3hH^DSN8*ei5pkI<~XDZfWvj-`!|z4}7j5#t@W@^ULD9w4|sm#*oe+&o5hss9Vwj z%jHqi^jxVk^H$4FYrtZ=9AT%Ls~@!E*){`XuluuLp|{0;s8K&@0!G^CfPGy-UObFQ zG8uf6lT|wCE~EO_p76|iLTY!pe!E>#Yc`P4qR;lJ<=$jhkPjjh_HK*#At0xI7U5Ar zD9@L`jgDzj#F9$*meD1mDIebll}Ci|C@x%|aDWDIml)6`&;VCpl%b<*m2N89xY*KZk zdogssX(SOPsV7+v&ZAf}=u?qX5LyJbx&~4P;NYXLL%2(_k1WhxIXbQM{}3|Ud5Kl{ zs46JDMY9>XzrR=PzDkodvUV+KyPCgtY7|kud1ipeCM5K27sX%zoc=yMknF6fp;7#; z?>cfkQ&78QNUy_-I9n~v<-3Ae$EItBm6g@od~2gSu({Q#c##a=oNH0)h($dNBM*z( zhIJV;pjo+&Lo?QQg3iX(gArJ>?eZ&7%|HRLSD__&8Maj`^ZKIc;RkSNUD< zrHzHBC{R>P3kB0ORDQjCw>1g!jB(2~Sdwb%e*N;fNZac!Vnj&u zZKcw0{;jDA(-#;BBQRbH9ofI-PGVNeq-myOqRGa|8F(stgNi~s4D|j#!tEX!MF(Nq z6?DzPkiSf=rM-Yk6N`&NF0M66+wolzDM!0a;Qr%B5k+!YK~$q+RC8R$WdqNYedVPQ ze4~`KwA>ZjnQX#>fQpOyhNLXX*=`v9YlecF5n@@B99V=VVYj~}y*W=rw|B)qLxr^^WELye3jK zvyJ;Q_`zZSoMGmRAT#Q@fmPvi{CeHkY=5jF?bGqZh`X<<^DG zUOHBDU(gAAAFRBLbF~H10T-N#58viPRbJO+j3Y~ey8#3KWcmU!2bjCu^jGt?_0M12DL19k1Ri!dLGqV!L0C*Dx2{N*>%z&Vw zpVT`8SI;9>HksKT0G(#-?Y?~*pYqS(ElRKA!BhygJ$B?%<(HoozoL{rC_Yv61z9uD ziBe5vUx;#k0KmqE-2ecl0nrqYKmn1W2wHWci*Scf@7{j{lkQR)4e+g+SnR>6p*P2j z_BGL_5wTPS)$a#0RX$6rY_bR^QvnYp7EB{j=(MA<8G#yxn6i23>5^p2ENl%|txova zpU%DquK$$EX=k9xk24gKE1+{1LHuz|0AW9$GJO*u3Te*^gi|h( zlFCam!)Ma~|04&>I1pRsqx*Wxf7uDyj6*W@LGDqpovJ1#Q~^f`1)#?lnQyh}gx03(JI@)(Kzymnh$XJL6IboxMHm8Pb`S!A16G{U z7NwSQTK_QUsC2R6myd4Dt>BB}|EQOOM8ScpD~?gqOL#-|nXV<@1fn%1D|w>+{Lq{c zm<2LP>dQL|3lVg94x54Z9GEgUDcT{tDdns(5Bij1@$0go9t9pbtifFs2Sf=ov;_cq zTwgD-Y(0S>R#RTQ*i-nqc)81vt|qwm?i&tE;K#prPKiy!7e7UZ8e0QCe!b1ZQT((D z#XvcI{Vnn?x;0F~&4=y$CIWf1-XpS$jbo`)PHtTnqJbaO;JtGR@@f z=10Sq!FOX>_+)f+M1?fMC3>P5dG8XFq!s!1PNLFw+6(O!CJ-sD_(8hGb5;F@7)eNBn`;o~6bQ(g)a;s_4BiN=3 zI3#PTt3j8=h5FHs)Qwph(|0nB5g$FpPm<>oBkn+X#yiPiT68u7Qbo49)R-pKxoK4e z1FY(%rjXenFrx@S!{(cA82#FbC90HwAoMG}mX@Ptk7Z7W3LbI_+SwU}MRGkjD0hTq zAk9BHJb`iEl!0+@iX0h-Ws7=2(GbI?pbHP`U7zfL^q~A_I?4ewQt7XF0nG0VCA=A> zXJB*p*`9HX^tRqh zKJQfh>;mHVM+WuWh>_K1FM^x3qH?pnK6vWIsvE-4N~bQ!sHySQtEi~VmMPC$&cY1T zFrr^5YVMkMI%YT3Fm@Oe?k$Si#`E_&V7*hcb3fNT;m0Qnk3r)v;z<3ZBpLE6zc%Ay zjMR&%*)u-Cvks{u<>u@^Ik(|err|hI(ql^6DH(Hj9-@m4RPTA%o&!NOFGZE^BNAoo zH16tzV(r;iLa0LJ12j+F^O=m?_}`pK9h*~lN{0EB>MQV;E1EI&OF@IkLzs6{J@Fdt z-%~LkAS9A5@6_AB`ZjyKY=8G20b+1Mut-Sa7(EY=pyk$@rLY&kXCt~f7YmG~dh-wF z*^iCZBa?Vu**yJKc=deh++D2y2!^hw?-4|qJAU;C)&i@EnElH<;lM41?$<{GJ0Fx= z+HI25!O7gf7<72C)FRhX@$iVqigYrA(v^+gP!)3rq{t!BV{O?jUd0hR9%GQXH17R! zDR41BL0fQlPWo#9GW>dJ!9amWw1^d?i<|ER6`F^WiTev!Drr8RzhnODirufke2M9O z`|NS%PfCfTB}KtNn`Kjm;htb2N6*0xH$G*-IC)+u!l?L}GB<|f89#~7Y+)}eXPmF^ zh{7p|ElHgL881(fzOP4-#epFLCoS$j6{>PB@~A_U$h@eg=bfAD$>;5t6I!;_W2HG& zd*8qNNIWc=kG0d;0DJ}z7Ux_2R_K91B{VxXXC*Cq`$G_}%ZW*Kt_nz70D*Ao@cMw) zgs7kM!#I9g`+;gzDYi#0tsz*$+QKx?Mu@oq`jgHw$c=pa>;cv_70iYw_8sTH3JI@c z_9GNPKK=c)%jz$V`Od1LT-LYCh-bBktimTT*Na7l&M}d0baa%JpFbSUkC5Azg`Hhx zFn=%&wWyjem|5R4UI_tACZuf3nU`WuiX z%=pPSEseR~GB5~w&?lm?$6_*7YnnmV|2DR$$ZO49e=8gpne}#J!{4|MmL6gV_;-a}$Rhf^wqH5_&$B7_;_b{LwV}{Sy*kR>n607%u+X1p- z-@~;DwqMcct#b>#9JZbyqfYVTDVj@{*~HhhO0gmk{G>Ku5T=vXq;$>n3|_k`e7q~k zy8lnB$E#|*<@Lb`fKV_;IB+#iTGML0gXWg+`Qlc%ex$3X+TnjVh`)o|w)El3j>P1A zSDp<|C6PLDcpA4mVcnM@^ds|-yK)O=h=4WZ8xtv*W1@)yW;BoeCN$Vp3y8vlTrGq4 z-5>42$;^5Nz}(1#LO0xs0dK)F=n$b6AmZQF2BoGR{rz|m8zcw6MBKLC2H#tG9|zwJ ze0o8itFrY$$4O*_*22R3m)C}-gW$eDd=#OZjlCiw9X5-g3Y(B>SXkZtcb(&Lhs}sN z@4J8T>=%MiF0Yw5CiL!4QvP3H=_)!yluJoQ0l^cP3rF{z@DR+f_kCQL@#B?eiEB$r zO0*~o7-fgYD;+0w(44$RK6?;bCnFr;*Ecs0xp?%uthYTgnc}_zA{n4+1Yu1Y01dM zB#?1qvoZ;>7PXlnuRmE zxihI0mZG&5Jw58}7uc)MnYV8jv@Torq;*_aMy*RGoXNezaUTbs*zoD!is0pO;XOY6 zSs6Cf&bl#{V5_f5RKBEf*i>5D)mxOZ?*uw5yB2-6GB+maPtqHW#UR&;{{FqhHhb?? ze6tPW3W_@}$}K|)m%UpMrXfwWoX+fLCK#&JVdZG*^iYokTcnvpgvbV!(>Gv0hRPik z%3eOK@k_NnGGALy-5vRH;D(0>*a^yWE zF~tSlgic>xfZ=fN1b#QBUdI69hm~w00>dF_IuxkyHU)(!X5pE;)lD@c6ww0Rn^TaP zRb-rU@-BGM^t~IgK6C};rYSw&2wCV#%+`b1Q(4o>Oe@^_|ulX@SfuJpg4v7=s z1O|$kUON`H{YiJB9nXz-6AG_l`MdrJ+gMnIoqRd&QYN%*5G{EOjGqLD*m_d% z3Pj@!qUH`*)_8|)Pw^enXer8>a-hit>QK;>H)Z+LQN;X}lY-{VCCNAt!;{+I2uz@x z0NITo>SpfI{M)za-@kcxc6Se1HupAfmxl3F=mz=Z|1$wcP49y(v;ySO`vxnSp^XU<&w~JI|sF z>6FcWfy*2&4$mzvA&(;2v|S~KG&41|Wa^mfc)9)`RrI$*Apc2I9;5*WuhR|mRQTOy zmS7+)J1um3Nazel&YA?JpR$Y$r--|lG79Y=ny99yG?WQfb%+T0gxhC;nhUp78ICte z%#CJ+&Bty<@q<^8O;FDr#_5BHG@zpq6-lE>$j5W2tM0Mg4}_$P^c&B_}ovhEOSU7jwLFymjJHwod3y8PRoi7R#5x>vhCs{AarwIP-mw6t~d z2Cvqw(QjVtz8C0HHIo5qRtINoB}z5TlGXg30osS4QIyx*ELkU9oUnEFtb1|tdk&t< zd9QTMQKn~ym+wzTHjNqa>q$LQKFD;(l*i=+=@i8J!i#0CJ+CO(-(M6gqVa^icke-G zKW2VxQ!0St`=pB#(Jz*fv=7uCZae#C_u#4$lz^D4YVBMi{eegRSd1kp)@6A4p<3XX z;Gu;TSZ3NUaB<%mM~A+$(RmJalX;w}nj;fVu}b-#{=oVzag8GxkE=%i-PRzA>?&j{ zds9gZLi|=P>ICjb;o?HgmoUHtY`^-~zkl23$cNm%gPK*d(@cJuxXv$3(Z3W;fT~tBUDEtH zw^C7u?QnBG5E0k)Vvy#y*E8Q6MdvptgaAGY_(Xe@)h-08n3|_xqQ5x&zZQU_Lc7$q zR+c<%!cs-aXBW2bY(Br{bkCvU=Vmq@=MH0nq#SAjeXUQyVKVM~Xdwt*&gSl@2!n^5fTc#HY+ayzEt6kDP9yiU!>2<=*QY= zMCj^QF!ULcUtc z_&By(w2#Z|yb#l`VfF|s1#XghAJ?x^RpZX@a4NSMJ}AHd;Yw5mk=Skn!Vw2QWkrN> z#(P1DBq|O*Vo(Ltuo!Df6V)rymsd;>A@^7EV?Xy8I@Q6BhtpnQ$w_Atf@K5nF1%NE zo0;_9yR!eXA2oz}y{AW)%%ZAW=3B)gAzg_ngRmK;p!NCAh4i_x7dcDl^->7*tB1X@ zPBpYL;gla6IQq?5w!Z|vhZvP>9372JJ{Locl%&tP`I4;gGIo0DFLdEg zx$iS4bOFoUaYrN(%QAhW7{}T;QEw)WhyID_<^~0*vY_(@L(H-~lR7Tc+ru}^JNY|K zSzmf+J`SF%>}sy9Qkd7%)l*v|^gTnx;2hmejp4pC6-zQRlIsvb8zHapDNOq(z6E)> z6>dyjl)|An`q6&_C$ccOs3qiY-oRrFoddC-x^jq)yFXNtDU;bN;Ca&)0By|HNz3WZ z_Fz1i>3+XHP`$aiv0T>ymYjVul)e2vh_Qt~*p8nh5P&s+hiDcL(#&f;rn$;}rp)#J zU-JF&+KbJb^5_!q+rS<)>-A~(xAQRpn8I=i(?~00aupR8(!bMcnQw zjOJ-3HQZzt-lso*sxCn1@HY$_<;zAZdNf}FfT-){2Z)SluifATsFhb$LgwOuA zu~~8WZRS=dlir0VzXx~qC>BdMFu9;l8~Sdw1`W%x;MG|B z;WDu4WQ&uM6S@|NrlG0$oKbqAO2EPkR0V7NA!iRfbQ7H?kph>)(7#RvVU$j{} z4J+wJZRGIk|3Z6s6D!XVE9L83TdjYxAUVa^;PYISN12(9oNh{E>n|GTp6tjSTFs0(H@q%4+dwE zx|vn2M2clg$Fs(!YqvJD`+rhoXuB>2rp^OQYo&8gkPSW8s$yJ7x)ZKPlyIq(;R71R zhc5-5mcwM`<^JMGd~!>%W!`UQVdk~ucrUAcjuamXLo|tn#p_C+%UI@gkxeVwErl+@ zg(qXb=gdYBX-O|zW>WU03Ub0&Q*vE1?)vD6v8QVtn|+-^q^P-kDKL*%IEgBPMogAD z8J&mOa%Rjyp9v27%Hz*5WFfOm#H`Z~AP=83c|KXzB|6zXzJCV=@1=+pV=_v}~ccx1p21 zsFQBEe7wi!6A7+>>Qdf?Fmwz0_Xjb8CM|NsY~es~EM)iW&wniN=>C|*cQ~iN@{WMB z3Izp)#k7FLB{24V)zNgh!L>o4#lAqAK=8>GV>8PDg828FzdyfvY#u&6XWbV)Z3?}j z?T%-dUG5Mp@e?`{0He>36O)ocL2QaM3l8nXhXmBzb%to~NMP;;`~0@2p{gg@)!X(C z+1GU+=dw}Cak48sDkA~mP`~_)2|_RqSfsk@FLo9ENFNJpIJ2`o;#q#GXV6KliJ~$s zOLR3iVc>U$oNG-X4n-j;Wf0F@0L{n1;Nh!2{SnmA&n!R~Wsx>phe?B?oMa-8Zm(5) zVl5w+zoX4pny~eQ54ti>>N7Pa2m}ROKJu{lKxeLArTYhjM1i22A0{V9NAv7J&t1le zS2SY@roh_cbYM|snMeYs-2uFv#HlNNB$1MwkkjXLZ2!x@KDoKe@0UF8Q+KO3jnIJ$_Di7Ttq970$IRy07n#-NZ zbPS<Qw8{5U2!m2aMv(EA_lfnybVvw=Uq}j`pm{}*1`;xojujbx4P1d7I4I_D2uDj`hss4#B5!oPB z`^ifCRuq5JV`a-^=cm_|{yVeR-4EaXRXgLBG9^E1}qjeo3 zWuC%BV~W(X3xA6K$a%yWwIQ|^S3wY_EK~Q<(yE5#_;*@%y0=rFQ5MFCBQK%Hc8ne9Rmmk^gp0Pda}M{N396 z74Z^)dK>)%(OiLKQJg7!mll4E+IqKklKU9?Ml$~zRf5vF4!J>1oPG8>Ra}7v+z5@xz*|jzhBLLqHH5)S7FMpA-9b~ zDu+R%D`bPk>i#SCm2iO3x1G^RCsA7U9$gLM60I&fw!5_7*dhvT!debJ2 z&|G>nhLH?)e17SFgz#JC`MFwR)0gxdwt;+%!`YH-Ky!$94<>b6Kf)@yLLwuX%HpL} z+w|!VqL8i_gB=PE15ciZtJ!_#1tl^w(!;Iwmy)nGUco~n8YA2&?YfbS!1N?zK zl(1&PwIBpgL}p{v8+l+!+=);fu9nm?ojPuAwzUun7x-Bb}7)29{y7=ka&AT+T zEPd@(zGwKT4ijj>6F;>?aL{R*ckkw2FV-&SU4({)Hrb|sY6@4k*2%3D?e89$Vl%)=!@WUpj;y-&>^>1=%Nw2mj=#_Z*IfdcW*jJF;u}`(${m+ zOPANxwT;!e)$!HUkM@7NlgXc70y^_K5W6-F!yWxp13P23DH3Q0K%<)WNtS955s^>C z+;76jxgngD$}JOv+Zqk6TeK}u(W#T8u(u4h(*#0Blc!BNX6LU-Q`til{dR(;T75OL zMA97M<|2$tsC$mJuuy_B!*I=wvkHQ<^9}vv&p`Jxd?WSvCnEOX4CwXs}*VKmcub zExz}kL?>SncqRK81cJzv^ZD%er{Erojme`ebyEQfJ%0Y-ommtMWwLzvqW}&$4A~ej z;NE%%DWa)lmcgi_G%wS;!2Cz8ev?JtGO}pceHMYsSKx~h{Wmw%N}ZMV-MmWZ=wAJGMIT6n>_2CJah#HPmpPz14_+?rR^9YvT}hPC-af%+rQpbC<2n|1`f zo~*PdkKotrUm_hiMREdo1GgD1t2ZY7yf|gqVwH1)J06R#R^kAvfGsYI=RfjaM(cTX zB+2W`FEy$fo^83!;u_Io_kY|P=DuC12wkf<&!%Z+2Z^FVix89P)Z2fFn;7jRR<$)X z4Fa7*I$+11e2&(;F93^4PeQ#QkbkVcc1>VdEpx&f3Zf*`2A6&xeLbN4!f^Ns;~nU5f(^ZVtFJYoP)DS%;IT<-yDWqJ8u8Nm;2SIR57 z&%UI05FTs0++JJUO_yW*_k&qa(g1s_IZpGlVh)_svBo1Sy+;BWI^E|3^~)So&kzvp zJ@d8BwsH9FK$h^2*EY_GMa$f{3+@y~P1EhZtD*LXiX@dP=0H)w2uRM8@WX*o;~P#| ztzeOqlCGVuZV*=u+Rq-E8Pu=kp`(rL#FO5G!{aakbS`#I6YU|l&p*+dq1NhYetJ$# zO&RJ0@)jV>$QV^R>1)*`y;KM?A2UbjzL6srUT~FOr9!6MVDV zl$4C{1?B<0;Q%XG2zYwJGTc2AXi9HVE9O_e)(=z=r>S(=*LLL53#}coiLOgDM7D6W zd=cdCnJH7Z;o76C<1Nqkalbi`(|V?DvH_wVx@0 zyaHQW8!AYGNqkkNKTfHjag{`scV>aa)laz)p4hMsrj?TrLW#)1&Q5Wf>npb~{GpU_ zM2Tk_2nYb15XlwJUq8hW)xg0l3v?n9?tfRIATO`V{!PiBt*EHzEwAmz55fX0AU7}s zidSG#_5oR_N3l z9+e)^k11g24);!ybm70L_82NUQ5;3pl(F@CIhyM%kOWwv7NDHl5NV%98)kc7wY5pN zzu`8^FlyuYsSzS(DCfP6l@h&hSSdkbBlMSGtjwQ3O-xJ*Y;pMwj2W`gW@F6qa@I%z z07bd@V7-9}R-GIHVhFQQL;Cl%!w~M;-8-hc0@1{%KL668*-v-wCd51$@=^Z!kL}*! z53k&>9PfHkSRzt0PjY3&(sn?o?d&>wGFel-V;6mtk$~RpLvrI|omNHj`$kcCh&SZu zVP{#wFZlTb_bdLj?)%H4gSEp_)Z5FiXAz~RZdY5gd**@r^foSNq+)alqRWFxHT`mRCz<~>tt+8gz`XrU|O7(5at1jdF&ZM_rby|kot2S|d zj=i>r>{s?2V07MMYo{N+4eYuvDFMy6{M`}w*6Q=d7*4y|xW}psXDscH=Bt~@?*0~i z{3CQH^a7!*xpFk!fAa4r^@m1_TVf(6#Q4{HD6ZgFWOSk!<40o?(XyHB$@9T*^uhdM z-Y$&t@6pxLLz9%^bSAOACWFA6P=g^9wuML6sy&uZYdaNUD_E4KWPM8==Kl=l=dJLNCzNGqt}H8CE-3>4Tge^QyIrZ8vP z>N}uDd>fZj(uzDp(4VvB6kdu7tv&f(q1>P2I3zH;aPW(L_r@%9m(yp0JpZRg+vT_; zhTE9KxN2?uATah~gK;A-kRhGAjsF1TEsq10tj+zRterWpbiOR~AYX!u+jw08pJb{{^~NL&Z1{EiG3HPoCO1-<*0qk!vZDOR?U}G$o=>T&c6# zsGk-gvdY+rEciM{UwRiKpj(PR{hepm*cc8wJ9~ggJP<&gMO~;wZl*!AC{|YxGxcDEOiuIvXgcSIKHolyudSB3Y}>ZAxLS+L#%kI1 z&34PSTUxfQ)v|3H&(#mlKM+23-S_)C?{i+~$Ct&2(cxHO-iIg=vV#LBcHBveIt!sT z?qJvR-qM!4u5Tv|m*hZT*W8X(*M+6T+5=DVIVI(Pq+ zeRCi-g2EUu=S=Q9G&l^V%nIFT+eqb@f0XT6lIIOS%VEfHITwn(OB|RN%b|w*oM5`w zf-K^zl)`$8BcHVn>!G21fWT0uQ@!h&MI!sjzgqJ2eThY%#Wy*5c~DX)i0rHSDo7?LBn+I+0sek!BD}fzbc> zO=OLYgH0^OSWdp)(%%hV^H}51CN0`H@I+-~{ORg-i0NrcNFer!I-cosKTV%BZbbN` zOI$?8xXdoT5;HL;lnaF0(K-gIGowJyNgq*MRK1xa|5UY9hGMX%ACYEXhYLR?QxJM` z|AkB;W*XqSn}Su}kVXZzy#ops-_j}~G4%WYdjWV(WdT8&c+cp&cD6FQL^<>^`-cuE zmGAJkZ-`nDvU~%QbYgb{g#=vx0P*r|$7i=4`iuA~oCUlCfdyX-I}lX4Hc5Gaa2RMs zkWxxMmsIKj9bFn=KfqDxI?B+k0UZs3oOK6J;N08W+XLAU#3PTE^qdoc_=W=crqjex zDPC?|s?9Z21;UaR3~OjcXyoMec95|5#yG_d9QBV1(L$j$ugW$p@534893~*BXt1y4 zEr0J&fh#C%hB^9htJ3k)OkPV3JWv|j22XYxRY;t#V@@N zp`(8Z%(@9Er6%1Ig5gtBwb=1~G#3ptwdOhcTtK?os+ceq?HcFCP{Pqg^o6zuR6|GX zY6N>0PMg?Urq%>!=~H#Dd}3eY>$2i$*^6Fhqb zt(905SP~Bc^Ypa8&$vs`{oleDHZ3i_GNgB` zcAtn!)o()l3F55RhyOIRwYRBWc3(qo+h3pgpO4rOf(%Ve3S6e~Ry%fPIfvmd+q=b8^$V`nF?1X8u#6KY*T59) zvD2qqjzMxV7;Uwl=fGfNNrkNUSZG1HmFHoelM zpFczh0gpZcA;i?33r6&x=^xC4AM^H;*r>+N>tuD;$zFH<-DMMbp+k<0Gej@pvn>B$ zlPM9fBFEOKZ_yS;>P})Gciqpo1d9=N@J4LDZ}-|XY-#Z#P<#ldg3YK+g5LkNhLNP# zL)<=iU0#@EzB0%?FM`nz)BPVQP4EUyZm+m)6w4i;n=zzR?EJY@ath6svX!E96)Jhrm~b`)r+!`nwG#H3wjv9)=uR_P8ESFD~pN zYL~%d2Jm#j!>?(3`t%mC%tYNFGNSRdv`rSYByH-jPcfq9{=>wji$7tM_la@M$KP<# z`It{GkzD0wHUCoDwf0zoWYHIFgUejg6B?-4#}oHi1|2qsdTlCS79=)fuxLbPXu0=} zN%%YeI)sg>RGG9}##JP*F|@A9f~wn6pFv&VkvYs7N8z!Z5d^)dZP z20Ydsp7*BB*=&6q26t^EZ1-F$7P3@(#cyVF+WpZgaz@y4AS8|<6sd9j4{3@c=!?+SYMe93WuG8f0LZ_y+>7fjdr zE)4RBfE)qI4I#)AGR1_96z+$tH}imne}kzNg{6-KXbE8z;*wG_D=5@@x?p;y9qnUx zm14o!#U^2XDL=H>t$P(Rv>`0lQ2poZeY0ZfvBQV#Xn9a_P(hfLYJ!5#oJAc&uR+m+6;+b zDiLw06ikkVWPfY?1R{LSfP9>O}kY3M7oSFziK|_=u_ztj~GoztZ!X4%sg*k!#zIL1t+T( zW&3Ivb*7f-75cAbo&WiTUgW5%$}xi3;oD6qmfS=WtL3=elzC_JwB=Ll>7$p|zQAjz zxljxY-O_^rVqd|UE4lgL^|NV1tM`W%%#tJ2zz;+8WULI<$=($II5T=Mzvg8coH1+a zZ$svZ3?a?^S3U~fsF78mjJ#y*9Mpo@+Eyj=&Aw~`dcnxZ2(yroVuCR^L?rp}>4LT! z;x+4)ttJ3xmgfC41B~Mmr85=?@MU$QrynAgj98Q3rb{pluRe{gj({%)(gkn(68^h2 zKQQ=4@7}}r9M&^SVZZ@@YO zq(4C-t+}}wA*h>D=qpU;$_rsiaGRh4-@*D}w6aWLeHlLn1E#o=h=Ryh`iSD{*`e6{ z{D2+NqFwGkz6J#3hdlj6>kdh(SicaubEkQHosp22ACnP+=*ug(%`^)U5_Xd1DDnCJ zOgU6ulPWQlIChp{LDqA-M?~o>p-1$P%C66wGVxB^lTCcv&6V%F`7^vx#^-E^F#TDl zRcN>GtE%~Rj$4MC))%J#xc)e4d{5bYY=4zEgB7}rbhf)bFqT6<59IQ|vT?smb=~IT zPJGdnwV>6VOqtRavd-AluvAjtXpmJhGxHeJmw zhb)B<1nZ|Dm!XzkTG>{CR1=9)ia0DVz6o%vAP+QgeEa*``B#}LFVA$t(td7ke!U4I zy;29vJPXV*x0iKSqzAj*$#kwfaW^T!+8kEh%1IwAha}vBIA78rp@;6MbL7>Bk5110 zX^q>Q8J;IJWsb8B71-`vRnm@*Fw_i6bnmva9XmnBuV3ezH79qnT<~U+PIK?Y5UFuW z+;)hT^m7t-=)}%Ic;~(rV1`>FW3*w}xkO(I37yjbeC7uV#3pP%R&^#Rm4)vmy~Qt9 zORJ9y3PO%S=GN6`wkeZ$mKH8Psdm`Qo<|i-h16ymkC~?dWSdkZxZ{VA* zDzA$iou-RxJRIcq-&%thDGo<&W`(0zI3)&Xrtor~&~zb*7m{)|r4e2rg;@O=LU!E| z@zV>4^Cb^sr%bXsE+bj7<=4Ym;(xB>PoF30O_0DWxyZ@}MZ=c9n>XW?_#s6NCCYtz zplm{%#l@72>Ap1A+PAR=DQjOEUP%OIi6_cR*KQ_eLW&WFn+6ve{R!Nk_MPZ6yA@?M zy!3J+=5PIW}sEq9%si*`XlLcZR=9I>G{@oYh zSnat#E^~~<&$AtRn5Hy|+Y0TxT`Zr|VH=Au?KB=eIpLE? zm}EfZ?fuKC`=_^_Dzn}^^C9rdCY}C4ooQTIUA4ikzGiIcdugX_QH_b`J%-6%*KWVF z7HyYL!0ge%E0c;b1(iO=u&m)OM^#iV*IaEQpAEY(H8FH+^e8`1`78VjgyG%|#VLexI1XQeMA3QWHt3X)-Ym6w!pyV6$+x6ir{7dW*%WDbDZe~kZD=xh(Imit-vab2(fL5Iip zkwMk+q+v6%Agm0Q_}EEKb+p@NrPgbvUFS!%^$kk-KNgT>VA8@}~^-&;+0CQWL5RY8bqIco5lwe&xJ4s5Js1Pp8=* zUIN7^C9HMz*2kr-j?3K}pCMGqK0y5u#}iwM6ZhfJL%x9EQAQT$Yu3zm0Mo#x56E#lzv+ulSw4VLl3Vo2s5b}P3+RES`CrCZIGB2xptI=$26*y^o zw0?8I6rjwqfZ|LxA)!?SQ!Xwp2;7|`(DwWm%G;boUj^9!q`ef49_s;z6eR`a2a;d^ z^4p5L=~GYS4V7k9*<^QHHi+df-`@~Eox)Mx=?E7tlSQVh=?mxyxn7W~G3rV}c}d*- z)c6s!xVUt)vFLiJ^_m@5VI;LIC2;6R7F^8uM&%+PZp5mTy%y24IKM|6;~RM;lLj88mIfzy!9V z8K=xyaNx)l`b%NelHsJh5fQ6zje`{m*Rmxg+w?f5wut@b@c!am>9|MadCw++(6jZ+ zb^9|5Z@Qoew;nrhi}{%M)@+O#4jClH6S(+fz zc-Yi|jE+eqfaZWw`=!8-COz=W;)guiGyk9tvAM{w_SlLKY5PnZ%mzy2E-R!W{XEGS z`{`#>E4}XmsR!e0;!Q!7*k44hp+G-d?Tb)`2KizwM`C$DcnZ8j459 z#yG{NQoY+%ZMaQ;pFtJPgHxb{&Vn294!6eljb<5fWCSjRfMNvP|51Vu)H(#I%DUhE zI^UH$PCMQ_dIB9;1NhZJtphkf)xcl`S~VBjju+<^7P>Tt0iU;~X!hGnUj!Z^e+`I` z>oJ@0;*@jH(b3`aIfa);$X95$iL313M~#0w>cup(CVkhk=H%w{J-e+lFMc%j)`MvL zt8Tp>KpcTUoG7(qE{lE5$;TE@uHrI3-0lNEF5p)eNPPBr3bkJ$bBDpk72bKpm1=q) z+c+{&uB$^()@Kr$D0D0iMk!?MxsnwIEcBIs_N z$P2#JdfeRDPqlZ-p=Od8iMc>rCDTv0F#ubvX5e4f^7`LoB=-!(g#4o;Bv_vgz6GDv z?sTEm?(vKQ~ME9?t@+Ek)A%r&WS+1jXjT0xkHUnL(c`Jre^PF4Fx(kYEq^ zvk0Ak67nh9v8v+vj6hwOP4_wgw4Y)QHqWE1?9(gKb`3 zRaOXkb(R(44w$Vu-0gRC} za*>{iiL;kqzHiBC@yFdS=W^vx{!yhV)Rwc3oiUYcW?U-C^UjBFlUKBHZhl0(5+@5CH(XVqTR!**=`jUP3 zX7ep>mcDwQF0RxA%y6OvkOF*siyh@0=6OiN<$gkz z1Q94>K~BH~zJOK+_7Ha|W!SOX)`f?25i_-Tu$)CN+Ue{NjKQ-8`Fd&L>C+#H<3&qQ zC^l1({t4VEugQv}*Q?`c_E)Vf)M=}#HUad*Yx2Lg8;&$V&salCx;L}K?(NIr=~?dU zom4Ucm4hZhIDHkX6m_)BHw8=u(_I>$LV6#jGXWo>zoHf*v1S=A7aAvzN6*qsq;%}8 zXEE9DY0mv1Tyf7%y-x(bxBNuZr>G(#8)Tu(#&{f){U*&t)P3BPUzmcEcBL{+;nbvU z;>KpAA(EVMbWHf0zkMk$cGb$p)Ykm{@z}fVUKiTFuQ7aiq-PlV#35q6yF%_n?RS^2 zks|G~tO`k)0-X`pVkXUOddmD7dh(y~uUK3=-s-t)#swsF8Up@ZdbX_5AQT5QXh}WUpJ~#hy<)j zz|4z&CQ^KeY$4_Mz(ET}p-6KNtJQ=183!>#jKgu!W^Wjkyz+k9RuZN5ZbWybzrN*x zga2UWxxBE(h3b26%ralX zrRHd(4MI_pFHI?_n9zPlI-bx4P@!j>X~*M0$UvUhlM2Iz6hg+FqCPCB^~`$w0oCG&rh?ENE8_)s`9av+!rt)bHjrT_T7<6bc z70&@ws%Msn~{1*M#ei@Bgg={9#%{w<^l(le#{J-C6T zpM|;j%D|3I@L@9QV&Pv~!oSuNM{uxf#s!DpAS@u`&30NkY7v%0EI(bq3|_-vZR<5^ zPS70l{6^$H2~9ISDTvTJ-aH1}A*O6Li!r<0*n^{}h0$U5^KcX1{rG0jiqsF=nvC>W z)9z*oR`ANb{c~^7yLH}re!7ru%*UX|HPhe(;%d|`aq7cwN6YW^*+Nz(=19bqL@$nM9(ZXuQ8cMZPPge4Efg~t=}%TNO^%1UvHjo zsc<^Q^ii`bWRq%gS?pzB=&}92is-rUX#)9~c)6jQTs~P&62pUm1>Sv zSWK<9z|}W8FnOL68v=K#s{i)6wZ5u`D|-eWm6U1{T%ZhVyQpE?`c>dj2>7$M@1;`# zRa)&m%?E!KYD7-QO^&b9m?oGwRG-QiCJKmy1(2N4YSHH8Y!B|tIh``Z;_TMv9aruI zga+_lZ}43E`MguMXHazS^X5?$8%N~h;N@t3H(E_u`)0wl|G}k$64_RzD8*a8^(YMc zB&feN`Gf9D!t=AdZ-U;0P22%$`?Id#NTv5$``H>+X4axM$x&HsVwm`Pd3X@si1=l^ z74v8&i5Xw+okPmHI|Vc}UL;?%Mw3!l^%_(NSwgO@UkuK%PKQ}Tl!_;{K%UPRSpG>8 zq=hY$tRDl~ew!q#cR1 zrW}?RF2ci5O7tI=(G|ZiRn`a0-9%bD{h?0w{F!tLy0wk`AE6^v1_C65&*&tf2h%g^ zkm_R7=3xtk+F7+QN8^8cCzs}izr2*EefOm3t%3G9QWP8u^4`>0xiA#^ zFPtKmy>Lcb&xR`dUnort&5uru9Z*n3}YO`8_jG?u*G?GEMW% z8ffmgV5^wyIlD8R1uIO~hFrxeb1FD+{mav|Pd3&toKR|Rn~Bg^ww;yN8Bsmvt+FOeo zG9Q})}bv%0NqrKQNt>5T%)Rfvn^`U?6JKorKkxw_i7D2=tR8#Wbh zail(yZ8WIJBdjB#R&+qttgO9b+3Z>mP{7cPK8uuMd_|{#4*Jw&o4MXoRpIZHUOaJ) zSc#&n=B-5Lugfq{SB|An#y~6S*8q$9=cEmdTcolOa;h}plXm~*owZLf{krCHv^g(n zu;-LVD3$}t&@LExcddR9p*+f>!>+kvry2|jH~QZ=mG&T^36|d!YmxuR4k2ONW8ylod?!BdZ4sIiem;+%WRYD*BEn_qZCpI1? z1sGa2Nz?XI|0xhRlczgTraYrNec@o_e@1ZUa%#N3awQj3_CrA%cZQNKe)m(<&RE!# zP+6T^foeYbPhK-p8jImz#4*E$!pO)HKFBi29LKs+E{c6T7L?if-rxd}Pa4Uz+{vDK zk-hpz9mRh`E%dNyvwiw>9DDlX|6YLQQ*t;ygu+KNSRaec`_P-5INkUF%3-wH8EOhx zKZ}=@j*eeTqG~nkQ(0jM<8dP+Ob{tjnI6Hnt*5OXcek(qbw7s(^nMCQf*f+-X>;M* z?=c9smq?)`%TW#HM58f)d~b@o^n0T;SovNC`Pv+&GO9oAH7z{Ri!UjYa$7CAxCY`k3Fzl+* z{v7Hg=g}}4sC{yt>0MJ@tbGLo33}X(V`kOkjdh7Q^- z96kR^FXrS6St86e*}%GDzc)E-Xh6V9d_bb#!!qP6SeAU>6B8 zd65M6l-C@8o9pTTLK7rn7&yz-rw#Q5SBkR|wbl}S z@)@MFw|**ae9m7@)Nmjl8;Ih2?lJ;W1O4E>2@en7vPHq9Z*3h3G`91rX+^HWTtFkO zua{EY0*DXZazRwmdH7xYQ^tEu|2;d2Yz!djm* z68+QPk)$)_ma{@LRFJBA!o&D9g=o`4M#iWUbm5OylzputEARZI7toc6bW_FIrQSYe z_t8I+(vjM7UYx!o|ba_HbTZ1tUo zc+ybtOzU*FaP{74Y{`qMxmirIm@=GCuFwz#N*@KK&stJ59>-WGOMb_i^C!EG zBr%Jm?>BS_g&3`t-@Q*u_^KV;1XZp-{Q~j{DZUbm{TV5tDriYCMmFfT#j`h-8z z9OFL6N(D#CKh8R25AH7Ul+NZv`JZMCDJ1daX!iREV)1B*o0N>k+Ot@3dc6v=Nl8ZZ>IH!WcByI0D~(bO$!C z12)kKT0eYRiYE=9dow~k5{*R2l|A9zQs(96xOdF$^N>c{I-YK?bIXa%MGjVLu!7XO zt1sz4YML(@npYAg4S51XR zS8l#(GDOXYV6ptFt-)zJr>$qqG%?-%=!+Wc%MQDbpkUu1Aif8ICPqgaW8tIhhb5E4 zY?LC0s@%LB(ABx9asf$hJ$TJ*REtR-iWX*IP~gJgm+sqXpNmn7@`rNY4DzEfziE?? zuqsZ)i3bJ>cALjJYTv`Po}DOW8^?y`}CheQVS z3 z`%yJMkMNlM#dUS^V|uz4?@mr%tY5mlJ-D9dar!n{SRLg+*>f4{R+Bhh=gtk~^Zg;QmP3wfbqs~ISO)A4 zZ{Zv^6LY>;3L*1iy1sX981*`UL%c~K5y;L7#&3ykP;5*YT6*)*`DNix)!@?nd^RXB zzStTp5Gzl<2BC4X@k>e4jYmNM3sC51v3GWIN;$a#xCx+|a}boxrhqNp38-KLIg58v z;a8ZLm;==#u!W@!@tt}TTk4WZe<8(g-2}j@0wjkCfrS(>6Mq6J{-6YR+GrUMK>)_(3O?*TLc*9!j`}f@Cs!8M$4O) z*U(>Df<-er_Gf^4TY|x`b*>WDS3f3FY zU;F5<)zsVFBGg^-Tz!drPu;f$AqM>K?xi{+9T^W#h8lZ&$Hu+{>+;n4<$lwCh-9dEtZtzX3^s= z*Bj(Arz-8&ht+V1Fb7!4^M;E9-1nVz0&JqH_#Pl7kI-%~hHR7$d>aU=YMhgGTzv0e zc&1{E3g}$cUZh-mWp##-+mFjzo{64ecE>V>EqA?3t9taCLwl8_i&N%*vqa0Wg|@6k zy)0&4_~?2QAq%{yiT{W?Ox0R)Jsif4`XKl?xXX>b+!4x>;%UcbTh`dc(q_-#^74R5 z@!n9@AtpC0oV1b?AA`cv^AS#oN{@9ciTvwE17erhcIbcM*Vm@pjSn&>ypIgun;JUf z_>f6{3=U=WOH<_yBI&xVF}be!j9+Bjwm_4JS@U>CCbnJWk03N%J!-2aBqZskm=^pK z3xKQD$_l6oFZhJyggn<$)jfMHwlH#3|#zp!lR?)iZu$rOcK+TjnMEKG0+xjcVl zosFr}&&WSGXCpgo{uz`s$mgQSh7F4vq?3#Ah>15O_S=burb#?L|yia`an{Z z`$rWzj3To_fjY(6x8M#aXoO)~3U^o*PBG$`F4DZ81OK6%2x9o=P?tvh+}_C(=h%#& zv7cdP!#+%!>?;aI)HVngw-hPX7R*U8Hp&5+IE!wKD#>?GGy`4Q&OKRSrxcRua}pIw-(NJxZ0Cf zpUPjS9OfmIfa@R)fdM8aLn?NAt5>jj8h!-ogIsbhEDbv`dbyqtk1M>`C3nox^bK#` zioXIjhvm1?|7JAVuo0q_-%t^?vmgtql8sqmJA9c2Ry}?5g-8g+HA;sQ_o>r~9Wnft z$%X{78pCy%^etRiR#|CpKUSa?CV8m+^@mk6V6*o1Nn#i*831_$*hPR< z@n6ftqIGiwz@wP48+d!S+bY^N`ZdX5J5P!_FFRs^1%({tr?;HO8)4{jY;j&-jw0Cv z|0HkVXNSYaWEE-~RxU5saNbb(-`lFITiO6=aM7tIS@V8nyB$(aTG}%V_Co z@9n$wk5B3-oF&$90jNWr1>By>%Q!OY#3@6Td8{g&82&~jOT7PLXhp>_{T%sZ=r|-b z{L#!H2BN3#93H6NbrL;IN&&c;S73`YgrE2XBJW%X34#afkF(qf35IWjcx-+(E~KI# z`|lE8ceFhY*pSbfz0Xh|;Mvgg^W~s?91P6IFSR`qCXJH&)OR=ZCoA@}!Yn_P_|T)# zd|xRT(}p%N4!mH9MF}3b!1R9Tzdc{keSW9gbQ*?`@NchHk#)s0Bd)Z5^Yo_C_+G2( z0keX?K2khxo+KlBji#VCsq=f(b1Oq_x~bznx?0AHp`}A|?`-+N4dLrGS^E(1Ub!c0 zsc-c%wFSBBKG-Q_aEsyB|K>hjCU%OXQTtc800+LhQ&Jb4P=~ z#l@NYoRaQsE>aI>!6cY%sh*hkF<-X~<9&bq`j+ATG+g@;KDb0r#-Z+hw6rl@JPA{k zkEHp_w{zByVL?|06*{Y%FVGp{A5}i16Oan^-SYiMj^-*skH*fdB##0~`i*ao`$eRf zLp3pJs_8tWVheMuri&oM?>qp8mYTb#WGD_dg256^rcYcE<^!yo48DVKEy;h({)w#{ z`5t$QUJ<0X9sVxW<12qCiNsLeX*PBQRK{~JlIe%kHBi&TSFJ+lqTrgihmBnAe6I1O ze)r_bsN)%I)AXpLFwz#heC{vw(ye%zP_MiDx4e{CAhC=TEss{%UmAln{*Yl=4$G)q zuqZ?5Gpn_bH{R-F>*}!ggW_w*iQXDFV?N!1B>J80fKl4?wcQ_NB14mX?0FZW@k8cO zv@YU~c!q?>dVAy7OaB~Vo`DGs5&lyZoH`A+A4xXh`mD*n!RcnGU+Myul)2^Q?c%}= z;J8=F6dVOOW*}r*s#iO9mgoO;tY5IG3(g6yrccE&J>~*nW$9Rd;8*e`UIQJujJygo z06X;#chjFcl7L+6b;E(z7S_|FimWR8xzVGm4!jp-!aFF-7}5*@3cyqh+gN z0yo7zjt+XhsZv!_#ZdCg^U^@>XtpV;7hK6t2k*r$&0eFN{aeqM<#unb*8@|pl$WLV zUDUB5>%FGBk{KrPlwu1o=2|XYo`D&AKN~VHFKoP6yk7OA-)sJ`*zl&mm$1Q@MdS-*nY@){Ep|aFHc{+ zd;O64hlo73Hsf7|3+w!`7;S&^7#jm@%l2Y}({r?q!1+f5*OcpHl5uN6ndW1;`H0#r zP7-TqD{I|cA-rrVG0sZejWI3V9yUb{@wVQFD^}XHHzF~<;$2Pq9Xio{t`NizB_+A$ z8RJ;WJ@R5pey>7#I;4H3F%o(!8+mL5lQ}+Wp0+zQRaKqNyPv7%b{(}Yge~a%_tH3| zWs5$zzw~@Q=ah~{2Z{e%gz=BJHZ%bXkS`_;P)f9>q&9YWV|$M18ek%Lfg-i}^=lqS zp)4(XTdT#ALTi)hOJwKA#VgGO>OHnmD4eW~VB&b}ue?*qC@|}j7m;Q6LsLseUX@F7 z%NA!)K5%E}sFG;ZX8kq(8q(iKSh1FSWnLM1CuuH}Yg(`Qd767@dxO!pX=;;WF`BW- zlzj4+&tpoq*3RC=6>McldE4TI+4r%kW-F=lhoit8i{TQ>h{f!q@1=`*B%l?J~2uJ*FH=M7Z=Afy01;hlPvyM%!Xk zkNM|j{ya|;L84BTn@0rkPf4g{o$E`Vu>V4RJ1|mHjV))MzpUc9)+H2w`L>yTP7l#pD z(QnHBUSg&RJHg}u0I4%neD{vDaoOg&5E68aIn;Ut!sbi3_t_2CdyTS#^SgUWxFaxma)0FOEeSbpR~QT3HS zs~o=Sc30$17P077mY)M>Jt!*y^`A&_p1#ziG1klkcP!N~gKU1L>7{vD4ia(I8ygL6 z6C2n%L!XM6DP`G#56|j*@th_BiD7TISuQWU-|83a@_yWt;`V$} z&~ZAgKRd2;X8;&qSst$^>~g2zNeb8X_iA))+7gY-;r(BMqB~u+(`Pa?yTho+e-DGq zf9Fc*{v>O)+z?m?C9;PKhpf93e#=z*AQeD^BX|T&}^ML0~RAU?XOwiDD&y0g* z2JOCQ;ID$&g5JIzgFrR$$wg!=zx4LOye9mbL zQRr$g6tbNT*4@)zS)GhJ+$8N+(q~Cx4BOwKiRD#)d3!B&Z!m#*mG=kox#x9A`HVSNS`j`4|#|*Jb4II z_&ZTGJg6`+legp3$WfOii>rMR>8EQCW1HW{i8{8lwgv^`tO!ck;VlWAB%84n)n*+& z8Zrd1gvX*;vU{PZhN;WDl~zblC{;`R`J@M*8J*;HiePEaWXQ;`I7}!78zpD+({Wc8 z;W#n+dqEyC!iU&mk~2PHG>_HM(mc~I)C>Cmoqve`g}yliD-93lbC;OokZ z^yf+^uYKkmTtRQ2+1YqewST#i|1}PG%agCMBlz#&v2JPT^Dz6f@O0=KqXS6$m{|Co zh7*}&k%nU#0;i!r3Z)9CbC*x1j<5E|M~F$I_R*hIrIo0kzUUc;Fk+ z`Vx~I?zfM~c{8h_Bk&Od+nhiaD{Jb{>~5o1t7}Y71jU({gGSbS59zDB5jJidww4$Xl5TzGMD~ea_Y-)O8VkNzCf6aE z*NhR}{*3+Ee{cVE-2Uu*ch@g;V({^JvZ=^X1RFYU9-?h%9!Ef)T1T|M9qLJN*2Sed zY>J|P!P(xtT8w2uw3fc+0~U*uiwmIOnm2W(EH{Ax1Efp=)*3i!0SgQY(3b#?VG~5J zw_I25tp8Q{)fGIQo&BE7xpiy(Xa}%e`?xl(*Q!7#P0GyNU2#9%2C|5J;zNaVYZ$w{ z#`o_=puMP5?>}b{!*b!bUYJ{;Z*j7;sb7qk`J%xaR>zD0g5#DycX0a%A|$alm8TYu zoygED;+Qb8u;!PRtVGlEqkEL_@>Ptve~*W2+o56Ux95<>>e^EKJ31f+WKCP!yO5Eo zTYfc(U42+PJ^w0n-!1+F*=Rp2u%zSLQVX08$E$2-3s3S!u)t$i=3=Ngv2Uo%K3`yL zXW{QJ@t`W;QoHiiDZ}lFC1=9W!>}u4z8U+6xW}b{jX`z!9FcW&P0)oKOjEp^bXd68 z66t65=4QUDT#OU`>vDdN{jj<0ot`e9ierAszdo{w6~C*_SMR5zo}H^bd{5~VGBg3d zMGLsI@~0hD1B~}C1nTRZ8|=2>KzE{vsk?NtM3U$`++y_Oxk4<&-<;hEP{uJVi|JG~ z?^yy!tI~e7CpBApQ#`66)OZCQr<-!Gv1m>rg{+vQ9HZ8g=BTrNmZVPuYttzt*_saq zLhFsP$o4JIk|&Lu*B(2A!*gel`W%G`v}EyL;n+wr<)Yi-5cC*~bqpd-gDF`H@-=H6 z60Pv7uv^o#W_5aJg6s>RW2Yy}L zNnrRFVko~E!lkm{9&ZG!-KQvV_8j<&vgdQ0d7KaUP$9qPH4JaDIui zlB%+~=%k*n`+KSM=6qx0mxYbTRwAC*8jM$^Bmd3fv~l#_kGKo|LylJ>{Wy!LVSx43 zq^fl7HyCnFX(_@OT;0#~P@;VCecjz`(S(%r2$)JTRqgds(X=g)z%?EM^E<as5x;-Rs5X|W2dPLhvcOmyYSn8=caUSDak!33VZd5zt7Y|X!i zLTa3=s{iy1RgcS_@Qg1Uz?zt1Dk-JL?M8m8eNUrK~!;$=s3DYdaW6;%vK5Q zKmMuc)vGd1Zj;}N(&qSNbJBywT4VqH?y(h5QQYrgo?qPxF(uSs<8=_V3RC9wa67pk!)^BN1NsNrifF$X8+5 z(56LfPW32)sfykG1A{Z{lVB6domV&`W!czL@AaUeo+*ogFQ>8CNTUXvUHr~p>jQ;2 zMf!9)HGy&Z;p!Nuhql-Eh^FO(W!{B^0<*8}^s*o}{Dx3@b4Do&J+pVON5AFcR7-n7 ze#JF|t9^IoL~tz8egJ?*QVpD6o?K(ev#CQ12r5GOfwT$05evsoaVns^3HQU|f~vIT zD7cMaNA-Vi^Js+qrV#62s#ck^AQ)DII^3_iKTm;_k;*(n_FyaQ^zKX61`2Y!-8zCa z{O1r!*I2Li{*^I^=ehj&ylEQ0PX0XxuY=4d_?1_@cHxW@Lr6#^jwKsLln}-`G6a}& z-%Y3wXQ^Sv*ZNwP+DUaoF|?=hyVhyGKmQO6dajoV^5kJ?2uEmMj#FO z!p&fvRA17P&gME@rlb@IvVL4h)sx2?isnwsm8(6>s}qeEqzt)xop-NMAFjR{JFE|E zy`6tVxXs|}i$~>AolRnFqHmTHX!y-iYiyX8fJ@Tp*W0`ecqO76Q0E=+#DpCM0eHC6 zCxLc&fDNo{=D?=3J9k1wel25u~g+Hz~*A$yu~u*2tu`~Svqgh+D_^c6L3O0pJYd`l9C zj{E3)fCAG3zvae6FY1~G!=bvWESXl+5opCoAr>6&v`vs<$rOSsAu3MxNX%j0x@%Ok zahG0yX44w<+`o$SPc$P(Vo%%J26=9!70dw!8mh!-7OBd=60n3WN!wqcU-`Oi#U|C3 znr;!A65~S96;Z^TF{{ZfA%eanAa-|RV$QJ>{<3IU+5s4Q;brV<9bs{m(Ll|P{-~9$ znsJZ7M!4cctF70yd6mX7zVQKP4MFJG@Q-S-cCY z|9b%@kuOh{o73fGH4?OCetc@+PiJ#=8QDEOV#7y{i3_YwA=x7l|F2?`4gEultk|&t zx{<~x*BWGqa(JNY+HVSh6Cuqr=-1);yX4F}*O$20BcZKA?;A^Q%VdT^g!(_Wka^oh z1EM?w^>o_s(oyKRBn0xtgks}EPNKi4(@N$Vppu7*2k*w5SJvxao4p54pI1(8pY|ZS zNlk4mgX|9G$~Ye9vF?tJGq-PMu^RZ#@dez7Qpby?aaJtoVO4#4vi?#ikmIN8Rx1VA3MSVV-}ZhP;kl%&);C!{{ox&HrO46 z8zQ6!xkRV{x)MTRY8AM>A_bvv?E=ZF2AizexO1l2ie|IH`-{N$QwHRU#wons!-y>0 zKhok^Ff|{c7CqLR3D52S446H<=_7qgCih8u`;2o?qNc|Z>FUnAvsYJ;I;EOU9&RhJet1Eq3j)N7PWNY;uVXA$72!uP17h`w;$ zIU+*V>P>?aKKw3PJOr-G8-g9w7sZD-MEXg@}Y2BjK2 zLF{|EShHFkK{}zx$1HIu(FbdI>+J`;`NnVXU;UT=Da-Wcb!`|72K?Hu{Tjdi>%Sgi zz-Y*(sgcg(r6HPQST?NP$IQ$3*itXy#10ORv?g^eDU)>``gekZ;jfvXXi6HBu5`MeWB7!HSBC3CS@u(h>CQ51afi(lmQ^ptns zeHUvj&p!JsDZAz0M zlQgKa2!#>_O0~L>9u|u;o;ke7;`|0DClgLi7W}LK^1sEu{i}bQfA8P_ce!=%4wW%@ zrGw_CYx$Pmw_?OsvPoVzk}T~4jByt41kPJ*W2ozjKYQ~H{^*;3%X7887JaE(JN!7$6wMS)PTUams-(g!zt zT2i`bA^v%?1y+IeU^BGKN!%FichT%|XY>j?qi5)e5oYPo{fzxx$;Y3(!=Ih}uQ=Xe zqd&x@^FU}80=!0eg>;}*SLeZcM_D_j<_J^$6W0Em-25B`H@T6#fJk4YX&Q{JJ0s&f zFR<2Jlgm<_Ft`*cv+0JFykNe5mqqm^CwvpZlBNF&vKgVd2lhFzLl6d`&cJO#^ze?v zo6tFP2~GqEn3XmJ6(m{KkjOs5s{mZ}J_KITmUX1Xqp>y(jJD$8)92Ywgna->)x=RH9c$)*@2iS#&KQq}LWnO%UI1|Xc?fT+5DohS5c5f+aL zrC0*s2dDA2fNIRWn?J=+-zKxW__apViUf`Hj@oRPyCn@Z))|bcF?CJjf&hl2re;G} zDmFL_4%4B=EuO7@h7m1M-`99&aHhr+esppTbSPSsZxmwip3SNZrQV)G$_yMBD`~vO ztUXp)tWnfi%3yetgYDZ)&Q55`NAweoQwz+d=JeqSrw>oCt;&y-5-Bvx zm2&6KU2fdEiMNhKXOz{Ftf#TQLFk0CoNzLElUq0cMV{aKB9HFB!SDa0|BYv#zsqQ^ zAW0<4#?VV7tFj@H30lk62bI>LCX6f#EuBOLwX}cpZ~q(o&Ts$seDj-sOp;^>nY0v~ zD)0(~qM>2YJm7Tk0|xoefZRb^i4zJf1{7+aUUP`_TU6x|m0g)UM3uRy{1Z8mQ8F)T zb_3m<5N#YIjV^xgx{{TI zJooS4$N3F|vFE@3JO7Zs``dqyU;0~rlYixxevy|y`vqQj{v|YyEY%cQ4?w@DIDg2OE>%~CMR z?y@`lGSBS&JbQx|Sj;EffA|At<*WGY6TI927ALE)@+Lvb8rMSXw-0hw=cl~?$+vKO zDYwTz#hqK9Ww+^3iQ8o5n0fsufOx7EmIjNXijvOa2C7vq5k%(^g+L)u)SH@woPM^= zuz$!_afj{VE`#1}dTNKwLQs_rK7(S*a&-0Mg)SR+2EIDdEz~>XBOc0`n^D>}L zy+#W~r#yti3y&3!wOwG`4=9^CBhh0=JEZ)YUZc==7!(Kei!E|BMkI%5R|NGHDO+?ifb14-ad;m@4VtFGh#Kc+te0=GF~>~o zC37CJ<`ZnbL~l!mS;2CZW66-DIGVP*(BN8!mi>bHwQ3vf;(clGGmtjSQOxhb(LE1~m$mr!6WqmD0_AyAhmaY{txqu^Rc^?7pgSRQT z0#gmh(mRaOdsvgr-kP zoHrO#VO@pwCDv{5l+>$L8$2tVZ-1z97%U0f>M&%Vn+p&XLL_*h5IV&so?0)d6U$;% zvMy(oY6lugv(^+vAK@#6aaXhs*|JT&!O&2oDWYh-T)jt1$MMmJoSi?Q-yd}MjL?dz z+Mt!h>opgPcUV`?^7)rv;UE9$hx|8x=NmLQZa(u0H=eu8;0Ej*40!G^xK9~#b)SVm z71q9sMM$7}S%%h-WkY`BH-3X({ndYmH{SdKY1Ru~o+5Bzgp!~frJXVqE;we)T0gM$N}d+r4$s}-~Pg2m+tFC4zWc)y34E?93a$kJP( z8fSY5Ii#-+xv)7>WC*uLI8V9u=p>_;fz*jnaH9Y6mp)IXHF=hk_EMBk7-wjzhQ>A=Jvd^yUb37oDeDp~HA$ABr3R_l z8@#~9`5b9IJELtdhS|l0f&*R{f1bn9-=NT+Arp7GoUFK5e8|kb!$Q8n%6y1GpllCX zp#({%;n(&wmKb@)!V4bFGtyp<-O;lMnP8UtJU{wdSnIK)XiDs8OfcK6s?B5n*-9lH zXy!SfA}s7am;*mgib1~Tr#ON<)gQ$Hy=auhj^PJM2+_W z^Y2}XXvRoiqt(YqF~_&oO3nxPzawaE_J$cVcaF(QMB30e6A1rq8!0WBvpBbION41V zVHmtqSefB^eQYT(Zi+KgMEyMyVaP;@)&rL19*Av}Os)mYu;}Olrtn0klMpmRh9vzZ zJ^uiuOPm^Dl)|VLMy_d^3ezNLwU6{!oHh{NwP@E6P!{tINn&ty%DOJGO~ncCBAPy_ z7?O$}(n(Ys*bsG4&yogwLYCbG256PhwDNhW5mf$?wRi`cp5fIh+|Wp*PjM~EUHGtF zyb5%ZSj+Je&^S^ywW2Z^Ru)*<58BD9k4zGjw1~AwMW)#`gigc@Mi-w5)Qe?r?>$z) z&al9?R$bn^Kzk9bqL^q1R#r96*H~BMT#a=N&RLAGOg3{Wx1li;OueDNca|8;aX)OL%m+oD>8(Jq^D5{%;poO=a$Vf zAxjUCx`&XC+Ej>Cll4+ot4AE2{D9qi&v0-1bG(0f#NYjm|Cx_xzlqKj3@c<}8Kpx; z`H;Q6J#O8)#WQ#Aa_`&$MAxPDdfk;|V_b^{<4x0a<=~j{&gb(^1HC8; zbXk_62Hs|kF%v9`f}$uo{!=vLT&-3e*D}&WvMlQqWr8nU)1j4OfQ&Wft*x!D?|C_2 zU}Z?B2ZJ7-l65(y@8_t*gxa_TXEJ2kr=K6dGDFE;C@s1$`FSf4x<*Kg)Sk)YobB{B zcMd+w+sE&+t6yS1e-l@&c>blASvLz#&X%NUj}PAesD*ROpdsl*Yh4t6cTK3uOQk7> z!@!dyxQ{nwgQzV7wN0WkRGC7RbI3E?-uWVTZ+@B7-vTjUzFzWZ@)qZt*C^%NnBolU zHYmS^HaRWI9xDh?d#7;DvZxjmJ&jO;N%dX)c}>X|*&5!YSL{(;3{ZB9R0*V3!Ejc3 zeCBYO!x`K5Ttm53lC;Vm5-`~F8A58b7@<`kDf-w9yxL&Y3Q?^2zrO$beCYm!T&x)# zHZ1Ka^YR?gt8qf0Tn}M;n8qXUB+`+zTvg*80U)vtJ>aAW8N8GjS8=lZfD8LEY5g(j z>VSUwG5zE=sX9P2Buln&#^X#$(=4c~3G3>DH52BXQDzgGbOj?rv9$&MfNIllzF9E4 z_<*hP5TQc(P&kiw3CJ8|F9;aObEMd`ldZ%%*=BbFhhXD#sLK1qqz##PEmATsQ9?1=8iTp=ymU68A%&AcZ`g|# z5iL;!PHkuAEi~&*gAjpACmxf=b8Yq;sV;3Pxw9byL(Q#Q8Ye4606*YNM&(M@{*-m{ z0e}3?358f=)sni|u)MrvurnetLl$dK#sG;!V2MtcLb-q%7B$;_MdQ}2<_l_3llBye z*yV7n+1lRa_-u-j0_SRkl6YC;)ta>DIX!=$2g&=~IK0ip^krN*r>~cYykw21Ji8!2 z=yAEZXDVa1w8JfcXRMOLyERWT?fkc@yKb>#yDtWCON))(7;pO#@>FW<(j zFqUK^$S11%#NZjLpOLi@w|jPW)+yUX;rHco*_pR{?->jR9nG=}n9*))KA&TZVLTpp zK%ZDcmQr?2*$4%W-es}&yj(83mBL^!cud?jO;dJvcj@(dtzhmM*5#^(aJIsl60Ns5J3VIanV;tFotG)H zJAClqRkZKZknq6=A0T^{Vt9ZxL6zS*i?1)~|6{e~XEGokpLd5=$cY@O6%MX{*&~ zKvh_Bgc%UXaTlPLI9XDg3##T3_534t)hq0(pWtwCgS6^{vq8nAF*q!WkVc3WY!kss zIN9|wy;qF$doA&LMPnYYu@`K_8KpRj;5+zy!%)td)F)g_7pM`4tpsB<)P0oe z1%(_D3}Tf6=|U+($qK{eV?B$-lKIqO>I~@<#^WKw;Q&|#Ac;-E^@5hEC?Pq)2#*zG ztQd!2fJL^wD?tEOzA zX1Lm-g(Oj1WW77&1I4DAl6V(%L2ZlX^dZZ7j0=2?hZ)ikhmi$!woB!8z_~P@%n1_N zr%*XEDe<-fZ*XoK=lcjWR&DUfIfyFsZk@wAgA)#|Eml~pwA5K1c#KHAj4-=kcpNAQ z3H`$nW$m~>!7Z#-9$0I61`oikva5H()G- zq>nN~?(M%qad<$pNbrjcZxoFwshTxqv!paj8oR=a=FPUh|D_{3E{cjo)Q!xW!_z;A>y|8sGc=_t_rYL<))Z3D!BR58k|r41}c-XLvnB zNEJl;eS^XweU7J3Z381dQb}S-)_dQ1m&X3(_1+}VC3=y!DW&WTqq8jQO0d@{C`poZ z!MJXHRiiYlbFRxgz4x4*opn9bs8y_`l$~`-q=UpV?dj<$w{G2f4BmTrc}cI=V>}*n z_wL>91UH)vMNzP~w}qmAtB>~twDz=H=5I@s`+zw|}srC~OmaDMcVn>#xUc6zva z#Px zIDGal8PDL>+muT~nh2KFF^?9nakTy;mhvrRaY33@)Lvr^BrW(x`jGXh03ig|2Wqs+ zF@A}c4n0V)=7N*WhLhzbx&4GgK4Dip!+1PyZGaLaw7suuQeooCQ?%oeIyhQZ7`tIz zpR%lvSlc6398+>Z#f+pcm^V`lhI}U>O9rg!Io34DWQZ_Bv`h)+ur*2wqyp;Nk@rv;gL6JC2$Z0luaJo( z%``<`(5w}81=iLyW{s8`EFhf*?-0&_Y=8w$NGh>~^MTWgFaa$|=oN($lf?Qu5YlY8 zo?3+o)4Ced_~3$~6++VL(gx)qFOqP+3bbx@RK3EvjIzoQl_N{i&p3ij}=Y3P)dNxFk+^2|`|(B8%=mkJeQ|-`Pb}unQR< zqG?ON7Sx8`w#HN^lxBie8YwK^29&N83a9#bpM*t5De!BF_X=Udc}kxU?71|`YeeMP z3W;`_EjcD}Y4AnWDOzP{-9w5DDN=@m9R$HZTFRvJ-3cS(|A=(}REG&oVWi)V)=JfA{ajIEfjE-OdwqtQ02vSPDdv$xZuNjyJz?^SN@yvSa%Pthb~+nRSSzDqOPA}cbS znIIF>Wn*4km8~rf(^z(Pwke7c)9EFHt(;B0;EnJ98Ha~s>WvA(P^fTk64cY24elq_ zHh9$_Rf7}3?B05TBj5#w`4+W3V>X*H91a-{hh3j?KA!`yzrWA+_IB4-wAQkaxelWYSrJ#j@;VGUdBmzS4}MkDe(@0z0@eDDEE zDRy^vdHLm+(OPqUe$M&%Ipgt|@pz2Znx<*^;DZmydIf{Q2=6q~8)l~;vpAAGKlsI$jnWQo9438LI(zyDS4?0%J8-X&98 zB)Vp`IpbpT9_N!!STdz%j*=^k+;l;N#{e=KB{T2|&L()PQLG7u0UT>mPm-%Oxhg!0I_hZ?MwfTbzG%$_R1N;iH6x52DOMRH3iw zTM0kk);wH}vN>|oLs*S(S$j$(BuPf1d%?t7r$NESxzOuus|C&l61o=#-x~Y6)+^M@ z8Yi3fvsSoWIGkwpPDKmL_Y&!o_Sj5-;kRIpPO+pdArgt}KGKB3s{Tqx({)J{*P;B^ zlB{lWu5kaNUUVZV}Py<3fj) zwh)gb1ebVnS4uYV7+WMUbf`-i7(Z<*fNQ@$`Rcmgt&~_2JTlNe+G7!fUU;XF-)QY?%{MK-EDaNzv_wWC49VIR|w#%5wErE?gNPle97z5 zc|HU`dF>cQx3Bh@5c-Ox>f`Z=?(eVmeNCRPJ$T_I(uy{iUt3(pzw;q03Ov*hWTn*I z{2)DS4@W38N(|6)NTNo_R3eiKk_qqJ|0XJ1VqHbm2nOjbZtQ=Sovml-*=Oi2?xE}L zt|b6G_HW^XL0{0j6#=E+2DDA~3IF8&Z&DQ>;bjG)#HljSbi72_98vap>GoIHNnhmb zXu*6rC!vq0&lyK(9^vGyQ%3UAx0lf1WP=kWX)ahS&q;C+x?!=rBrPOGI-*%>1ZnuL zY8RbWp=^OJ4|wIyFEe&uLC;?ybvJOf#QGV_%>!Pwf1eHi2Wt0G*N==K(@5pGF8ChX zf!8xk=Nx&SGa8M8p+a5%km$jBz3wWXF{noU+1P&k%x6Bs%P+so#l;27<&s;sZefh! z;^Kn6y*)nq=p){I^Ua|26OnjzU3dC>^ZA^I4!G6KExQqojZ4U@x>RJ&!@p#b5@h30-p*fDmLN))B0To>JX*+ z0qJNUmv`ApKf^-aVr{0RiNt0KA^U+Rr5#2sxY)c-eZ1hA{hy-mZqs)+7|7cUw{P>@ zmP0F0*@pKYeFr0#VTF$k51kAil8A&<_t3gernk^Zf$}+?1Z;vb1Ge=uD5-H`N@Y%1 zY#wpBew*{vJItGp@yQaa7dTbn+Msb2EWwNBv5D!i2?)UJmgpV7(7vh-UT)AyfVanf zO@p9nOHfj3tnpV9Vw?wbSQvO=aJp`Z-G8wm+D!Or3T&=EycXQ9&Z*mJ_j&jz_$giw zh@ZBd>*H#hPXw~-6SA=Fwy%O$c;8+793TNt3$n7GvQPO~Ao&qT6prayAn6XnKM_2x z{mtXY(Y`CTqqn) zd%?TDClH-agooMMghivv18Z! zGTbUxD_(>TS-r3c2py<$q9QJm;zFm$3pQ;lFG&*eJnu@eRTb{-?d@&yJjYraY$03A z$*rv|(ln*2DwfM7QK>FElB8+MbUG!^^Db6JUGxZ0{oLn1$7C|$?Cgw#g9C2dxX~%p z9UmXFx3|Z^!9j=H(R+J)U43>sowC_%I+N(=gBerRe!ovq6rIda6g;>N(~T!S9*?Xps^3RFmIqXKVX!6mi_Ff80%L^{XKj&#H=Ju zQ}czvOW@14NEBA-UW)K4B=x4oTNMC3G9{5Ij?iDL#2VMXVCGMlFCH;nKVVsX!pa{} za!SP|nYMuhuPk1;7Sz)!lRVB#|EmopyJHR@s8Hr|&fslyxtCWeM)FG4$VqSYUYT@y@i*pT+wU#3od4lncfW+T(o5s+_Q1TWs}+ zhs~e1Me>BeFx5z@(IQ29O)u?}h?FGB$dZCA?UCsWours#j>|p*bqO+PZHL!@PjF6= z_A*wRl4V}8vs;iQLpGP5vRY9jeQp;&39YA0Fv++|BJwax3tW%gKMQX`bc7yHaCC=^pSo1z8gGFNM8l@_F znMd~=uBkYhevehMz!eE1PuWcq()13>X8|?17D$&7I)1KOR7cnKaeuEvXt^eoxP%Xl z=vrU!;OsS~?h_WPGnSlTnIXj*UDOnrWMh_i(S$N=Xh8)Ts;;E@<2}|9u%%FVp^#Dp zCkY4E3sR*YE3paZ1AN`nQX!s3%%|i3z2j3&5B^%WFMh=5S8|!%D-KJrV3RWR=Ve=( zR~W2pkTjq@8Xp$o&WB9PY;d|E>#vbi9nhwl75SerJ{e;;JUr~ElFm7FjMVXf zMxzlz2v(~Vv)PRO{rxUQHO4TX&pV^o!^6W4!4&JkJ3BilrC2VPy#4mu+_-V0Qz?n| zEzUU(4-Z4r)*BX!Inzl+F~~`?oWXcVQ?Gb%@ea>#-9`1rVdb*wBkh2~AFw07#6Ax> z_s2*zMR<#K7Gou4ouFh7VFg*9(lmwRdul3=y*MyPPx3i?8v6k+2r{6h$2rh#Hep2}ELFW>Rjx6vA<;E9 zopZeS0dmkor3EtA_*EZK6%^dyF!^bg_MG$TRo0vP_v=zf@NriU&Tlfk%B+Q5F+p^ou`%5a-n}9e5>skc%|OEpn*zD$Zl0jo&E8T z;puof{{K7t4+TxpmW8}`RJOiG2T};9+5l;Aq9)5)1g;7mpu(x(3PJ-?&`{%?0Vl5J z9p7qOJJ=eH2nnX4Y)YI3*94TT^om|GxmO8bJa^AxwrMlvT~8r=M+MYD=$|cN|776|3|EjN0JI@U-%VEizrS2zTWZl;|OS zib7&V9fGAk!8T_s-2~Ap?8IJURGsVh`)oFw4#ZPc6;evFEbB7E-Q8WL(<#One)1=O zl2=}Ng`J%pdc7Wh_=kVUtFOM=^(7 zmu~(t?_F$hw0f0l{Rze%Q;QS4EI~W+g1`%u24^cOUm>JLX9_D*DoTt@(L&>pLFNe= zlq#?Y=TL?{7bBRG(> zTsB1L7YINE*)iW*d-+yinwU8Qco_)BPsh{obbRXg(HX4AOW*NGy#OgBNP!kIJb#4J zrEi4+l+-~?1mDW=5f-w_f(+Wkp-R(gbfE^=1LyljOjl#L@t*K#Wsh72ZpP(>Nz!u*Gt=L^w&|`ZyEB(wBOT zRi>qtS%eH8sX};^Hz+5NK1aF&=?8)7K#i9bPR?-58D$0QwnwRy3i5MWcU*ocWyhn8 z_Fcx9&fFu4sK5B)i+uH~U*(NA-rzTX^Edg$U;IUW;TL{^vMhP`-FG`lSAfN0ft0dq zH^xlz_U+qUq8BNWaRC!~nd;uXd;dWsa5hcD`T05P^_nzI$@9D`zs9ocXf$GLYYS^F zXJ=;s-NDB!HOk<{G`XrOPESt}La@8L%V03TImg-AIb~ImW(ip@ANg@{0%AbIG02u7_yAX3&KW7WqIw3OPPw(lpT z>lBWJ2xwUE8=NnZa)VGCgsebSL9;mu+>3ykM+iI`V?53ZkQ!8i5m0JNtvroTG)iKX z#At=p0;dI5OE$j3C14XzMMW)ZYATF&IOVafM97jv*Ma6#8uSkp&+-2GKjn-!sq7;fvFxsTETM)=7nm7!U3XyASgnjD+39r3-rgR+@+-f> z(a{mV`@6qOuh-+X*Ipw{Q@;N7uk-D1f1At8K%MFL`v@T@ilR#tV?bQ5*F1RefOp<` zrvv(|*K1yS=_Q84A&bQVJ)h56E|;BRPedmPA(+i(k0D;8AUlMTYm^a+;OTep0TbzrnZj6 zy+}`w*z4`Em@aWjaA)u{WV+z}nP9qFk>my+kUHK~kGQxv*X!Rf^UMVQREDE&oeh zJr6`>lD5w%Bv?uCO*G-V*P85sa4th|^-)#l3Bt9H4`L*LU-|O=wTy1H`Q+>4$MJML z9Z$z!Vnlyd2(OWc`$O+>HFtCh9giW`uCZc+3AGcP)K~#ZG(i!CroE9B2z}La6xVO&wnpDQ7ywD=O|-YLxJDel zK4f>Jb44!qvQt+1tB8~xPkbk&p9q)#IXibhVoBRR$f60sST-$>GA_`sf^w)gMbUo$n6egv*5~x91RVaR z-M1&Sdt%^@e@833;w5I&kZZv(9biqxX3~%~itY4}o4a2`)?-q+LsNrsppukjT{2_Q z9^I!;MloP^A9HeYf^&|tEYa74U|k2H-6*Oa>$X)@bwal>L=uhWOZ3ms2hO9lqqR;iyOlodTNZAZgXb7O})NP-Ft*j8&HNu2%Jb-Xm}{2h!!Lx ze2|P2UIf4lqI37S9&bccuOXH-V;1?tfzn;O(Zbyz{_0$kztm{=9(@R75Pixdc{-ks zzruLDLL-qu6PYKU=O<(kKMjd4Ji>`L_uX0sVuYuy=TUJrgzoM5$Dbv56pA$wi< zJEqSb2E`C&$;Mz7bSs;Vx~9v&WYaB#qfAAZQg zhYz`R>lSI622<-8WupN5X0!Rf*?Y4dOV0Gp@AodToh|oTSjA#hHH%I5!d}Sk(P;6E zEe~KwFbuP!W9%^ zg07EvbwA~_-A7dt*Jx~aAD3-NvKFZloYR0FDA6LGaPh>9Gl*YV^=;eR1?a>H-E%3WeMHz1ZSHZ12t!ve>qb z5FmyVNbIjSzvlv&@?vYB{V|A3ufKJyah~dRc%D}m#`!J{9j>^%00^x5@PATxybwdf zu)Rq$LU#vDPf^h>1OE}|KO$x*^!WJ4#Oa9X~@Y5NYA7kD+t%l7hn z+;UTj^F`;}B}g^|t&5>92_Xh4$jQkGv)OF0zne@ZeDu*rgLX4Eda<*NE_TthCmQ+0 zdUtemG|WWHvJAa=k|aaxTUFJdchOo8=C;vAKEkxoB_X=QM{P`9*Fy)oE%=P91}S^^ zvUlEZouNoV!B)c4T8nKhI#ncTh80jXOPa1lDNDNRQPmmC<%cZmC9CHja`Wg-_LDcL zm)Fqd4m-umCYg2-E4o~F6a>v9g=XQ1 zkRm4)0`F_QEb;oB#=Otd^AqOTdgHwx_%hog!LI8liefNR zACJeJpPvsS#l5{fj*gBvKR*Y8jcAmN#2IEpQb(f^dwY9SRmJ)FIp^o+gC$?oVfI`f z&H4HHu=8j+)V3{)#e$+JP)aeKPI1l+P71TxY;Z$}%%vC_9fLgQ^Em*Ahld;;9pRi~ zKA*GMY&bkTWdC57x=pE@70daOol(xX*n|BX>pK>!IX>}7sTk!2UeuVTqqUHx3ks3( zu>Nb#9zWpr-ZSp({SM>lF3q`y=7@2kS)W5X+Tn2YuTgS_+bDeJsY{3OOF;MMnhK|h zuwfM4v(Nn2AUzg0)l1pLwMq9@q$Tvv0Yq17h69G z-5T0UFM|i~f8p;x`?r^7nek_~!gKrMm7jr}5TE6;UBq$?zLQ(TfbFD?U;Uf->fr^# z$Mx%0?c3kO>km-*Ff!UEIefW&5!od zn^-K}7HsRKAA%@^(+F1}Z4PcqTHWG}JHJO>zltmOY0DYPPRV6B?6QL-HTYyftDds9 zpYVd8VR(uz<{>)GhamCTS$@`eX}MeuS-(+664|V?*$n3#@4ovkpMLr&#u%<$yGB`- zNGX|2CPN^|Y&IKYBIoDlOsCU<02H5da&j{0F>lS*7ATT_lv0BsZp;dcU1MYz#URc!O$Tqj^?J?O*%@_R4;109>o`9< zqiah>xh6|fl*(C`73a%2qzavcu2*^$(f~S%w4h}Or!~UUb%KV5W&MP*eu35vqlqF> zimsK6@|;ZxrWH(!D~ysonp$8SB(A{75|R!tQjiiWTdb^cNr}~Me@|9;kpWrnkD~%F zR(Lv5;S>ll!ct&dfw4(QC6Nl(TPu2G&_`hqqD9COWD~SpLIf*5;W0QI9^)+?4kJBA zI67%D!eXVv3WJpf>p_u&PkRr`;94M*L~4afWdHge5&7v}_Q4ARFH*dlf-ev*0ra2` zRo?gS(FQG;@WX2bUtEus0;?2O3S6%RmBNRZHQ`ahhKpDd-lGs$A?bw12#q6XU6l{P z%EF65yB0KV_F@hrZGdn3oK9pL9`_3AWN+^L&;RsCXAqxCfIi3L4?q3QMY6wB@t8b8C`2J)`O5JE%Cg-?({j>%%EzbwnNRD# zr{Yt*c!AS3LP6IA!-t4Q0s{#($`m0u$wlrDcp)M(<*xlWwZQB7Qje*mzzWORn(}b+&YuB#* z`)GfswI<85q2+z{?Ag#UrfKjKT&-5a&~-c>qqU~0sv#CEW@1Le0_Pk_k_0z`NFCLYS?uFl!OQh2qsiGs8?o z$cr0+0O3U_wt(;oHLwGFk`#S6O;{YnkYm+<51(fwCG>&IJqe3=A@w@5@M=BOxNU+Y(v<+2Tq7uyz&@C+?m^AZtrIHg2*PpSm2wov9wxyAL-_jsxJ*Bt4$nA+DkOz%RYsY^>|8+7K# zCLN+!(xuP%1^_Z1>c(ii@JwP;teAVv@a&}v4@C6fvBlsYc47=-h_hVdx%DWmyRqgaL!{o zuts2@q7bNOyV&N_61ces$fm z<79s$8{W@_Tqjr+hTH1JYi~nM9znyej|TpyZU0S;BmN27=e0-tB9A|~(%7Epwgu#G z!)krdGK7va7RyjK3|@8t0`$6Hm}>9}hsO704C{i_%hLtKL)d^~$PQ;)!pc+!TQ{Hf zi5cN_{BRxhQFbDv4qXbQ?yn=)7wPRWgA$;m=pR)`D{)3(jl{YJkq6`>Tmug04AvXG zGeZLr@@PW`8LmCulWjVbERl4*ZDp`f2YN5-P)zU=@A^f%PjLO;ThZZV(|@)((j_QF zScJ;(xoDkZjHERJhXvgrvkf9$;FZI)8e>wNO%Q&9^t%W&-dA8(B&tGm858$at`^_p zO7=TU(zx%tt%WJQ_#(X~KkN)V77>!0WO~c;a-jLNCKi^1P zjRe=--QA&9O(ql8>ovw0zW2TF_4&<@(Q%L(J@uj+e9Rb&CbwE^CX>m)Fe=NElamwn z_xCTkB|LfZWMIVRdHyS1Wi;=NX1ejiiQi*fSd^i}!gz@+GS2|9 zK~BDr(&J@=6+RR`dg#$4Xj72dB0#pzp}a=g0^w%hGs=0>-x!*Zh3ONVpMu*BHym+> zkZr#P?(^jO!XSmf+L$PRVQwt9l%0~0T%Ptn3n4>8CIwzNtm_cclL~?AGhUSnFuF}@ z7WN5NHN%bDdC_aHB01n93^qVkJ^QbB1kuh0MjsxJ!U})cQA7k2d+8m*hq9{rhQbR+ zCj(3?BXMGDCMNqEne1R8jQ{4_=iU7mdHkWXvpC$AJV3_j zbpLN@118}6LP;o=%1Nx0Sf61Bm{x^?DK3E7sxtwW#NcUB!h*Ia1X@^N)6eb{kbw7i zpY;pV(9K1{jgui(%FB+pNK`I%wZWU!A)#l50<2dn5|xDTW;H^}F-jIBG8A{a0cQc% z2INFIlmw*&QbD&c{dpYDVL=#ugniba&+(${M^R1=>d%D?Pl_W4491j5 z6+Ud|F0SK98jVd_Y?PvO(K$!gb)24_QWOPOu3VukOMd+0AM+=F@+XW&BktY1$9lbH ze}A904Q$-_da=vg4yZmqKc}iH>bhocZx4Xe(^DQle#~?_4UljwP;u@UXOT)Ns;c7P z;9!X4^4<^8DYMyZ$j*#Xlz2dq!W%o#C^6aY5+ji)K6klX4y|`Ao{Pm|z?$QV;L-)_ zJ>Hr?w9ytJ6*N%0j$;gG-IC?wb6$PvzvF21I_uMnW<3ckT2Zh(KWF#oE-Hhxy~3IO zkWKXgP4gI;E*K>p#wA#auwqpWUR8jjBSn&s*a>5CK*B!4&T!2H$kAxDfOIT|RkRZt z>nAuj!`od1mOME}h!WX{sS1)XdvReExij4%5{|;ke5;@UnM(Q z%puYSm2E)HY5a3m^;1@xXDs|9Hug9$<@(Mr^q3Oq^+ll^ND^@-#XvF$H$j6GVEgvL zi5_w8F9OxGca`fqbeHuv%pQhS?n0;9?<;Tn4SbHG7S1+!31pU3B9dRN}>}`I>49KJG!o+>l#ueP%dx;=;x;{ z&UOc~S`QNo-+zy!mWY0I0TmG;yD^ZA!gBQJ$_Qr#zSAh5ktMs#W;fWKTxTk8F{y8n zw7UrB`-11gJl6#-08R{!Io|iPPw&BbjBZ#b3ykW5$E*uJ)ZPb;IKZY{gsz$nC+bjK zMT@6JVDVi$d|q*pY7t>!E+n1uka(P~sQe4o*3q;pJQY4QG-M%3MSG;#VB|T{LCRGo z;&pcQ?{HQA21ou|r1b%|vb2>&ks&h6-qjJy?g>wq_jytMl5>8+hWmJ);yFW5p+ref zg#;O*&xAK9;XnvfulwKjk&ViYs;Zbyr$chdYPF)Os)3*yUF8;w1&QYqP6De=m;Uipbjy{3^sgP>)`Yg zE$z19S1Bdq@%WNeUQD5mg)?@Nz|akD+vvqsItohT^P&c(ZQDVs8J!xUU^PO(5&qpS zmKQP=ht?_9wY07YV~Io}ouKKKK*wX|_~RAkXwGc%b;fFnZ7pS{b5D=or%oD*0nz(ES6`?t0ye0k6HN#)VyHB3)t0xG3RA3ml1d$lUptryqBTBcw_Sz5k41> z#|jr=rar@s-10K4`33ajamiaWfmer_3=kzsz?g^TUdjXC@*g!s%a{(0M% z9p>lSJCF_#+wc$KZi6(@5vI4cLr+udz1h)niMI< zC}okD9!`zZOG${f3&gR={tUm@xSky@v3=q3T#%7KIyn^Y^?DsR6J3L}H5)osNy*vy z31fTCoza-F(PY_}Oce-nyh*UFf=-d^aUi7yc&RU%;kz{kiNn~?RfZxNWE5fX>Ue24 z9||O*Ly87OAHeJ_+6VHHlPwN|^TFuTiWGw<+tF0+g!ASjj@LC!HNvEF{u0PJ?%CDNdj`;jDa@PpTg==L0-X5u717 z$FjO)qZ{Z52568fK&zcGTV1msie}rkgREp*hZ*76SXW{O=5}~=%*nic`!;81X9F4< z5z-i284Y(Lu_$J5wrxA?Kib8{&T}v>hzDBN^#HpTMKK(#bB;XEnNFu@t*Psp#bUvD zJRVp_5CT`>q#vKNt&u9puj+)Q-M&iMhWyyFvCd)Fqt{V7Xexy?6}!_Ts>K1?Nzw!klLT)(BR690e}bt# zB~fz_8+^~|#Dzh#Qw>%&eE8%YuIPq?Y>$b!O5PNRW*2V)G?F9}q-ete7L5?0gS674 zY=Wq-plk~CP;-A|-jPVK^tzE&0eY9i^N$3TgJ^UF;GhdReU*WHP})BxqEv0CVXEsfcC|()O!$*UzrJ z01-N0FJ%bRg?{#Raf6~K`-By9e6R6ldO>#&>uHT3?Ps1}ZvXOIKR1j8vA;3K#g+8* zh06^B4cm8bA{v8>wnq$Xzi{jV)b9glz*VLf*yl)>1@Bd#0ZF)0k}wAq{XEq6OloA$ zMD5p8VFuqX4qXqC(&EH2kj{JpF32q|99$hzSklxYi;x)N>>O)OIBzXyZNcgCM~uZG z<6@uL=o-`FCB~zxWRoLOzr(80C|jU>9ukYZ?5_vFClqoAM-t9??GV0Wdud_Hj==sM zBTzk>)N>s?q*8#eIN9K&!Ag)4TH*1!qTU>H-mG}OdB|D)h|(_Tgo1X8Z3H44Pd#CV3wSJEHpqTNiwmJEMv^jP&G|6K(evm#k#auEVz63E)O0&;FVWi zL2JzqfA~Yb^{sCW5|pNCI6XZbnzgu{ot@D%4de0n5`wy1E=kjr(P%WtP=?WD^p4$Z zHq2%-c6WD&LUsTCeQw^oITW)Pvl8jPhlhv6FzNYxKH$XBg6R18cqn{vpc>)ZG)MY zB-eJnOJ=UHUOA@eRoVu+3i9zGw+`N7*G_macRa2)=(NJg7B6gIl8Js6;WSRbv-xvO znq&PHM6p9!Ovw_BZbry92Rja(8eu|XrNhY%?OKHQWbA~XpZ*#Ng{04~6c%S{jI_Nj zG|Y-3q-5n9lP{>n8I38a>T_203G3u>Eh z>MjGcwxwx>ehAuYV!zzJn9Yk`+ZRb1JyOvBdj`2i*rW)HoWKYL>1_yFra_Bf^sRhQ zUL;N;ohGpfrdAwGu5;t?RStGuCSiy5(sFjZ=4^A$arYD>H%QrFRfS;Fv$-u!_8le= zW{3>rq9L6qI`8;|AkT`|g6j!F9i8Ma-SQAuOjRi>BeZrXqO>Kk!ZA?AWDg}IotYCHQ){sO#%IgMu-sdygdtcO+=!n zc;)fh;B^J*8uW&T$N#`t`*Y6P_h{vFRACrr8J(51ok#lw-)0DtkuzgQ-{Ua-Hizn&ER6^q4! z&1S=m8#mb7+apO5o<4m#H~>YD0c$Pu`5dLxp!tkQXXNxm-KTi-%{M(TFoIUA6?vZX z`s=SVnM?-nzOL&yJUkpa!sT+wa=BzQ8Vz0JcEn0F#EpJ`+ZvkbbUJ8YX0zGgR~sw5 z_x@6$1UNZ4;qKkLT)TFS2M->w*=%@m{Dj#oVQ2S%XHQGY+LDeF>TV6938$R_Z3+^T zk#NA2SGbnF$<5vGbCkW!;^7tcCOb$Ci_H?JEX9sxZ6ESv`M12^{O{=GDYkgT+MUx% zMOy4)#fY|b?2M+=ixO8m_L8f-y!TCRPQJ_3egj$FLRMEvT!sdW?J$0hR~ypIld2K2 z*@Z5{+73g56D?jFMAG3@OWCdvsX=5G5{spy?n;`rr1EDxTK7ufQs#N#BWQO;&%V3RTx zM_kEnbCBHRAivHu-QmXdmnf@q9-n-`C(qtx-aUrV2Aggu%@UbQjOzy2UFf7g7y6VN z>k&d;Fys0T*!FXwMCs4PG_`!O759r~$$pj>@Xy(#S19tp!nPLU!(vV*0-+Q_LD^I& zEs&D1Fmi#zfDcgWSo2%*MEyEJGa>z-Gp{TTMC39ktY-E zq@g}K;lc7fK6&s99zOde^XfUBnB!HA(+xs992RFK-bwHof(#{dl+bid-4h6VDVLN% zxYrk>6I`;vstPB%o}lHBt{|~TH0z)(xV85kZq44JaJOJJ!!>CL!v?$- zkhXN{gwxG?JXrrFPx)IMA7aJ)g5gZsbJji3qGag&hi<>$eE%QY!O_vtP_!a?xVN{* zE3dr52OoSeAe@m46O|THN;aDfdwY8WaVP#RHg#21;k{?ESPX2~uIq-V%C>DeI5-G_ z*uAv!`Sa%-9v%+7n=4nYAcSDKT%wPUj|cm@*=#nDZj3QJefpGxgM;BBqcoNutT zC(ouNYDT?k5ZvUYot)eh+&}+wj+Yz8Gs&cIEb08(OiX_UE*INwR0yxN}zR z3Cq>x1jYUEgO;%v}~|)6J#yAg|rK7URk62mArES{;-`2De5+Sjif@DI;5>D ziIg5Cz+vf3Fd+zc)_8-B%)_8=b8W+KeD`g>aqD}GnyYX+Wzt+_$6qIPQyzWth_Bv! zo$q|}w|Mf(hy48U-|+D4=Pb-~a^|e-6O@$LC^_nHTmi0y*G$6 zF80_T-Q>ppSGj%V8(iCYm3Aq~-3*pFwiS#;N}@BQm8_}_@BREAc-nr*@%dvm^$Oz} zgchJAQYyO6;6(^u);h>8ytkNcP1`}9P4TX`?{o%d+8#DE2-(q;8-$W*m6Ieno*Zv; zoXxP#kWF?lY;d;4_!_)HDicz-NYGh|_j77JOSfsLO6?h)2a*fVL2nDr2V^Mv|vivzG=09`Zy@MS+ zrIqJFnj<068A>>;tMHAa@cZ1Hyvdd6n@r_xSRAk}N8}=9QcP&O4J3w6ZkX4f@@(@{ zPW?NSypQAoojeW*w>LPKBYfJ=tb^3YUqYxDAX-0k^4%aA(OM7aW7l;TDT;!+uBq#q)oR6fJSNX`q?D}J>w!p=W!WHKoX_W2YkBFVmxg0luh(>4 z$KKxFke{ieC0>?gNGYkRYM}1!@9z&g_uiA|IfsXb%w{vz>ouFr=8{e(Lb8#x6J3Gg z95TvErqd~-(FkiTMNzO=ELg2p0~{N1>j=q4tG$?v65Dg{HP$95nUm#)#)cIJHU-8= z6_Uxl3hoxxwN$pIrD4^b^P>9%zdmDs`b|diHJX*gHHs`9lO`kDE@NM3h}|i9HRX8y zBbw$@CZhtIOFGIC z8qgh$SW($?R^1bp?L$icobvoBwR}P4PAL5eR<005gGd9@*tiTVfo>lS2aFA?VlS|s zz`PZbL~5kaNS&b41dYHo71p&l)6?vw!U==5EuAqWdDfrlfyEnSCH)M=ISS$VyTAAg zK9ukC{jdBFeB;`0l9h&TwI;PW_onx7XOjA?W|rLJH?Mz%?pDc@#RDFky~EF+`~aV? zKtXF7s=B7LEm8|q3TN{bDgl`(#>EJ!1;Gi);M@gS>dWm5*o0wJ1jIoI(Szn5|`?CqoL0wifRYRU-98PYc<|%o*!%lIXmk-|H_O)+wFuH@NrZi6^nHYl= zNa4s*PnsKAGw12?r+l(}mv=UQ$+>vi%y#ZFPHrHY8Q2lNlc7uYzBd^N zggBo|OtGQkgwy)xJgNSUxp|jLe?XHwLnIYm+Me~EU^|0Ckm!O;U+2!~H`o*3Va%(D zW+$vawL(ct>sF{DqqHkdtM_?S{WVYc0S%vEIVH<2c5pU~_I_1Qu7Uu<+kUvME+BCP z_#lK6{g@?kXJUb@>zcN0nNFuPO+!^xBuO$PVMR1DHg6G;jHI1dgT~|WP-r8OG>-S8 z_CG!zkeWkw z*r<<*2N4b3V~4tZaGT9$ARNW6bh%s(aV*iQD0Ze%zp1tER~jDgG)m{B*_x#7a89GV z0t%FCF}@l8y#klSV*DCQL(7t%te0M;#kzfQxrWubs6%S~b zvuWmR>Qff=Q&!zGN?y=#M#~vaudr%`ODfR4WuLTkUZdp>s1Q;cO#+0E%s|bw*uhzW zH3HWOoYhz(=zN0mFiuBk(_(y!cY%2)6Gb8fG7a!lfc^TVVRU2h3Lz|}-f-i}A$}$K z@q7P~^N&vW%{Trh?p;4bZ7j`vPO5hiw!mx@^~RA-54bnG$7@&r6~FbJf5VU7`wRZ= z{l8_y86$Q%$O>w^;e2(>wb{#bG_<0^c6BhbkX;WEi=J)!IdIJ{m?ir~Z=dJ0^H^F} zf$MOthshzh^2ih|5)QAw%4)S?^Q=Y*%}#!RRteRrVp%)hKKdqyf|X7I3&voT<59k4NbGb*oyM(3{Q)r3%;s4Ax$KsJV9th zO%n`2WQO+^=LMZFDeNYaGk=8PuO3>-Q*@R~e@_ zDfCNR-ML39_Q~=CQngFsM|hWDx)8{mj7F@@3+DCDcvk-%C-z5F>Qj8aMCXR8>B!Rw zshVJFL0y6(V`t|IS9jm!3U86O_wePIw(@A5G8*L|40X4}Cksx?clo6Hzc}IVX!rmp zPw~o7ccF_82`C=0c-3rimIOZPr(HS_e=hMQ#6=i%QG_tV?75lylVU9E8@ClMfh67YV1LA?)p;BlaMs~X1{RoC+K_q!DX`ujpEhpa`%}CTZ0%4d?vq_&zW1 zeuq0pzr*3|b>w(Pv-UJihjY((T>m+>dPvh$)LltUgHaVuTCC{jFAAgq!nRh(M9o%A=J+3(2xB+H<_zVDtu)R~T;)E;DXE!X{_n9}pz_$tK+#*wlOp=?7)0dg(mr3LSDxHBySkrM*f5?l~4_VlEX^V%* zY=cuCOM&+VrXC@D0d2v=?lR48a4mU_tI0R;r!S-RJ~HjVci7HSHwG`E7Awvcf5o%% zuQ=t0bUZ~XgUmFw5uqCulOSi6)n!()pvPVvxP;)*s{#rpd(-$W6Bf9br$;VDWTr;1 z@`!*&1A{m|j81jH;2BU=)!Fy9BNNge8fgEBB7JX1RdkK zV)c&I85m}Yu?3E%>*MhlW6aQ%#>(xzALzhQcpCBOIHQaQAGI*im>~XtgoooBiPDt# zVMc9eD5xDt62hgG@(5a_kZ9#me%N>x001BWNkla#M=Z*j*uE9Mx;%O7BdRD&nP)!oLym*9#ZICGFc!y1>Vq@ z1@r1LXZ5G7>c_P0DL!38CJ?eWZH}F0?>K~qva#&!AK;AT;rTNPopQ8yjR(yydFStc z$}5xCxqbLG?q2ye2k9M5RUxVoTFg6 zY3W$ev}=qhvAV)*fzk<51lFVq`_x3t(xfmK6w}(p4JMXk<4c69v=J9@FGD`|3By zxkG05QQa=Cn^AOGSZFKDjolKXPUv__#bZkIfOY$bvOQtloFUwbMr?wmnlqpvNd#Gz zpff>Tmsl*G4u|b6@Eka>KEc|Q4oM;miE_xahN4A#kMu34oA;3Ih@}1)?GMQ0HAeax zd9shv8MRq4-`rEB0XGh%R%J>bgOx|Fo?vR$(!0zL0 zg4J`hmgv+|nKMq8k2!Pi@SMNE@IHus49XbYjK-2@5KZ2~1$& z5Ym7QaI8WNwIOze(by)|rKpdD3mt#t-9#;BL_gzKtUZzM5}Ul(l*I-xniNFoVr=T- zKB9@vr4BRh47g-cP!t85&1PtGvn(45S4^&s!_#e#K4Z*)D|cPTX0sVO$jEepATTY< zl047Z+uOq!!}0MkUDvU@yUXF>A=X+Ji^cF}rqd~l#ey_VSuW@3)S}h>9c$ zEGTP0x&rGJ&I_FMgCB--c_6f)Ks}0Y~A9K9^3AxMBF1-H@9X?Mm z$w9wLw>_lV;(UwumhoPS^9F0{VUf}~55}WV%%nzIRRGo?uODAbf!uYaBEJGZ&HbBC$i$8Qw&)T2qs<%pTi`f*K7 zT6oAR=H(+keD*UwJ^lrsnh$VvFfyPweA=AT9+!w&&i+^KQJ$1Y2VS;#X|c2jX%Rx9 zyeCaFT%BU86y41jscRe*H`t%P#8lrRYhFgS2hilf+}s$Hmq;0A_Vv;u^o%?$D3V(o zq~FKp!7tXxn##;+?SiT~Vck4s(>$eVp3|*QFq|>TB~Dd1QTL++)B7ib(FS>4)4Hm+ z3T>eYo;Zm}NK`_SYpj8;Im315DEBGaWu!JmDS@F0_np+CbA?CI8ilnDQaKW7D2iRi z=~p;Rzrj)VZFc0VsQL(36%=VkRe9QGgv{6Y*$bH6Q`Iyu=7QYh$dk|AVhEdiAME>GRv|{gr5kV#u^eenOT+%qq*q& z8hJ0#MGhEdo6%?|B9+muH9FZv`@LxH9-F{zqEP(%s;UsTZr$<``<+ZCLuKFD*g5mTMZb;nuBNoW5A_;`kX#c6b+7 z2we-_j<7E6BdLOp(cv*&NbEoYZG!{~IYQfvZcWT0lMmCrj4N zLo5r_c*zGRf60bVsrZymJ;#qqOxn@-z-$vrl4#Jf1J@#3i?E796p&6>ij)QkzQg$r ze1j4}FfH+PO^Xr=O^Ol;iX>QdS&1@=u^%&5yMd~nULjXk$>mjYagEF$(r!|eosjr3 z%ICdjo#>f?IgQUS5@ZUZSmU!ZN*=N@_gT45d35qKY;uN4mUy+os;am8>sORML8=6+ zS~}l?GLU$19W(}9NouG9d>kU>~d}3%t zg(^I<@E97-R>wSg`hW+I9`ejSpws7c$r^+S$J7hhW1gw&t~|K!+aKr z>to|`%ql~hea7+@hogI3nS7OrzK-Zd*ea*6dq|T9mbgfQkh;RDHLX8p(>-R>J*D=~I4>XI)Phc|v23uSmyQWXs~eVj0T~FLA*Dvz zaD7H=z3@FCNYUP23LmWdgu}X^I*@9N6dA4Q=$e4=P11erX2O;6H@P|aSL~>-qpKU( z^$gk^;RRM0MA9PDn$kbw;n{!U0so1X4@p>IXs|RG9F_)XdYMQM&Rp<&g0&xd(3B%A zQin8@==dW9#E3+JLQ6@J0*PnTCGq@arNp| z@;o0hnwzF!I-L&PWQ1y`(<#892wAV!q-n}mzxveyA)U|XeEjjpyz!i-yhz<>FFtTT@Oa=S8}uz_XJ_2Mf1j@FhS(G# z#Gu2BEZAs8v|KJPC6xe!4l`zS)^*KzJZ3(h^UZI5legb~o1gylr~K$gKO#+2j*bo( zjYgcGFIX<;Y|0g`hmEVMMv!3Kg-2l&zFFh3*3-2$Ng|Ni;%&IkE5FB-Z!qDzeEsJC zM%H}=Q6J!Ii54xH?vSjg&6<36z?0?Ac~t+OEchuleTpBK)EG)z;}t!gt_2%1e~hxGqE635nY!=ZH)lQY1$ddXJnvu4cDM?SzT5Jx*kq2H zRQR;Q+6LG3vuN$HvcvcmC&I}og$}V_R-yZ^#7Ke}lSH>U2kQT(>rI|4%kDbQ&l&FY zMxP=)=EzB@)RY2*)MbTPH`Y+CjWBHhnXzF97#j>W7{-<@JJ@Ll{{R?^E;DFrY9T~* zp_YVFDTS0nWDGvLzxmyJ&(w=^&vlQa`k8rpgr~>z_x#>-e&_f7eTRFzara%`eC-$6 z89v5uhnST{`vH|M!C9oYs9?!tAnS@uaDsKV;-}`Pe7yXC7e_zmynRl~6;d_msv+bp z4I7-a7!kE<78ynAXb^#677)&KkbM-@_pe=u-jXoR#6pk6h#)!>?@heEK}8s_b2Jh` zf>d}L2&v!*)%h)?LMaeFAYV!M5E0@EA||Pcm}wdUIDCwS>^>s`%10x(WU~{bxbak? zW3PsIZ+Ea$p9rBOTjy}WgLg;;TEwt4+Zw!as_4jzOe8TbB$1LnIfi(;^ zc)g%yg;NbdNxaN(XhIkP0|*r+c$}X>;VHF1dJC;Zw35P($lV@;@Q_=hFS1{KiNZZ1 zG`A4u0L=&`6rzc7fISX~ZFTEtTTfNS&MNAHAy@+<&d`($h|nNAi$>qMFF0v& z(nOEutYKqMSu{ti+GDo%oW{+l!7mBf;GAbL7-5aa+Sqw28Amb- zMFmbE!!un#NuoQvhp zcv=6DbG}EzGXj_B%2Bu5u1qVUUs61Xrb5}DHG4N7c|+Ul>5X+d6N{*y)cqdhtz&n0 z7o}8hV^>ub_wLpjUh;}fPC{9hu~;m6 zVo_q?CIyD~p3!K;@$oTxdwYFHs#6>K>DDy0qKO@wOb3#jL~G5?&JLr|i0yXUYc5lv zOTy3u*CxhnI!P2o(YMz(g{TQ0PB%{KP}{cU^74}TeBO&%m&+xGhj+QSxZw2kG)iBJ z5l%aNkTk6)vW>d{k=)y59Dq7#hLWJwc0WsGuxGZMqWf?L!q#<^G zE|0cyp+xyHqNx~&drXVh*ePFQTt1>yhh&V&>=bui62kBm%pV0J6Oaeyi$!$QP!1^r zGLz9xMF@h}kPRel(_mUqqGX_l2r*={9J^tMDJ5D8f)50A2j|3t zSQNTTLNMf60dxVto_=N;y8lW(6)X_0trUEKrtb8_LV=>&Yy?8b+*B!hTkEcvi@vA_ zLJa4X5~)Q0-kh_vO+)KFXc;ZcyzM-EC7ICVp+I>>CC9j>pf)ita>#_cTjb3c47fRj8kE-zRY_jt*kEb=7O%FHV}~3GmiC;VKmQp&e)(^_5KmaiGg`gD zQ(GM0~dy#LF{=00L| z2j%Zj>N}_$wi{U1jzI=R70{WbadT$%6_$pbN~9LZ3^ua`s@&&r@D_J>YOGwa+?;SVKjzYWz_OlDx5rqw#f1ixL1%$n zxfoy8#1V*=KI)T&#d$|=22@3Qx!u)Z#g3?e{sU|8HjgC)n~FQF+#lAxIzn6SYA}kEBAo zLu9CEHVc%H5pty>mt%4{rBM5n++tEbBvDW{kHZGBGAA1jbuLxu(@;%-au` znV+&WPg%QTHsLv2@f=k&=)6Sg3>N~{8*FH>G$ zC{@A1=q?X--{EldHn*!UpqhPjJwY@%(t2_k7?y%OFS$H#QL;efo{$-=ShIAOTs23` z?HNCP_Cwa;ij|vD6Cq`%Vu-F08)WVx0YL_Q*FhTZu-;+3VSj%=LinBAi|IlNJOSxI z8jTJbx?-D(YC=rvrs*~gas9aya|;2AwlAOky_srf=gAyj7dU6JHyDILfY&jVMv*q7 z?sJGXpHqHfqa5g|{hX-zki5&-`FVEK+YG`Z zls`b&5vGj@i&O$34JK^RnIY&EjXmOW^&yw`=U6Tn<%;2CNL5ZzVoc5f((e-53Em75 zu0XgkdDtbm*bE>%QVOIF=uDt=h?-{KVq6^!)D=h-5F+5RnisPtZ2cwc=90#pW4OeN zE1bH*syUW9L9Gd@j)&eXM0-pe-YJA1fdd&@GG9`dTkNRMaew%~aX9!-nAtrtcK|`* zodH>+bc{GN>V%Ij|1Zw?Ay<5W;|#?mac}i`a8s#<7hPE)~#C%1_LfHFF86odIb@=xrWl$l72IhRg*7y3j0WTmnn2Q z*|VnZ^Jcblp69&r#vAPI?J=9pI6FJz{QR85!^6Ij6ptT24yn>Ar8qh|!a2uhKJ%Hr zP$r4T{{H?e{;qXh_Z3}h&2qWq`1rUF;7rwfwOYMWG}HVu4QW#=o!o&E6E}6XQp(=R zVK5l<#s_C-XT7anD!9q@Au*rQX*(6n{`4IJ!7IGc-R4mvWZUEO-a@b-e8qtK?5Zzv zZ}Q9B8+?rcZ(>(dHVaRd8H#~Glnv|fg0t=SIos<=9N2Ly^vfC8m7Qu`VZiFx+f-e!SLXk(_K!CQT>mcLJEtElM zgODv=Z3$w97aOcw)3`ZJyJBlrG|d{voQ9X|Os5=7-eMph5Y~sd?LI}gL!mUAHDnct ztfA$UO?XZlj%fTTYw?Vy%YVh?b3)vq@uI=XHYT*l6mV+^Qgi{r8c7y)oI#Swj7)JJR2VbFG!KT^Zap*!I za)FUGO;}Uy2$trYtMw`K^%0k=ms~7fahyspJUq*(o z7Ez$CLF%{>2y#SIcAjKCovhQt#y|T+k`k$l^w)lP!lQZhAopq3YTep?lZczl^=9J* zZ0$Dw?g2&oohlJwa7jc^Fag_ILL1qJ!iz3^OHmdhOdD{m!J`;5<<9gzj}G7D&h!Cy zr;nh{5OslU3$(AusL&LkBtCN(*V3Ar5F9cWWSNKu7*+G+llM4ZKI6sJ2VA-n92+Q1 zB+Q5ctE|VDAY6>lD8HYR;Z#SFB>Sf%-bU_Rv&Y|{RwkE#B{M#fhC3p$jI4c z$O9(%W5(rc4Dx%7$^&w-k1*3{4BvJBajfHU#^bCPsJfI z-Qn&!yYyzUeC2?6qgZ~rU?%Bdf>Kj0Nvzbwn!SmFraF@39ygU3Nfwz3W=i2o+?h1y zOVMG;93eRd-HfNqvW$z13l0tr`X)|%`O9Apo6V-Lw#iHO;lqdhpmZ=8u-$ICbLS58 z`TP~gH3>_T7G|+n^e2l1(I$_+RHaiGbx{<(!EXBb>2o>_jK|}iO`GyFle7KV*;#L( zn+z8cM(w@l^z@X`X!OcvbhC(pWV5W}&8}i=X+uruI!!@r%0dg09rk&bhdci}ht*fn z_D$Fh&>^4&kSV+j)S+e8KI44zeP;gqZ1^7Jr}5;;4!M7wOgtdxfFkU0I6R~X!)Wct z2<0c>N2oAHgdxsqf|cD2%^^e}Q=qg!XobiX9x$QBg%vI=abk`WGn~5OeD)DWT+rAv zYJWk)IW0>JYaFJF>>aa{zrlmuuW)zr%T)di>dRd=S2-g+LCa23B|JheQP~#Df|Yp5 zmHL3Wd&+F{oJISBhI7y>bmfqFpm8lhhJJn_WXA*+E_PZ{;#!Ao16t%%dVoga8;9E% zlviYwk$EZi*c(0K;hlGQ?ZM}Gxc3&vKR#z#955P;2wu@{EvEHkDyPf~w(Dh#i;{+1 z2Z|yfl_U6?jc$1V;wdw?WU*dwwK!wGzGTTI8)md@*exrpsIh7jKg&qkpi4`s8wDb| zmIN6(Heeu#Xpd%n)02-N8t8|vn2I2yFKN*KQQpyw4vMUV&YU5B+<;tzL+KC=>JiA! z@LmLsas|rkF1s-6wUH$yr5sRXC7B#DDh}A2-sS$CdmQW?GSDM10$T?{BakLOrw$o9 zXfkqw^Vrr=y8xpxP662(tLAL%3tnD5;n~@HoGw4c>Lm+v$;vGWT98#GBFk|B8n)DG zfs--fDR>o0WFklFf?QT8kz;F*ZygGS^dY*{2+2U~v7f)qP~K%y+-9Kfkont@^;+)` z+7Y8-2j`%57MZscqneP-nXO)Mw*CoM;R)yV2}_<6n4wvsvzpp2aUoD-6(S4}c1&P^ zXM|vgqC_#^!RU1gHKNF;RM|e2+#?TrNH;~=3ei@`P@+Q-(@Gq1t{nm)7|;QRoPCU#8@B%xXft z&Yyj zfX4~hk$L`Ou>^W=*qa42b&F}gPce=+BfN^D=nH2msEMtbT<6NN?ETDB^Hr8*ugy&U z=BdL>e^2U;q`OS>&@9XPc`86zmOOp>wD+2=>l&TsIagO#y^}&JkRb$&G2FU!3#~O5 z7Z=QCGcGSLdlv1dL!-U-ESJmv#U@xZk$;liQF>FW)vCv)>$>h~zlkDT*EMHnXOZzW z8nL&x*BciM1_NGu?KLhgF8UzRwbqufG=1xk1W+5Eb4_FaNeL2feaTGOsIQcbCflDv4#P~B!P+~(=RAl)UoEUEIl z4AtkUvIh+EeM-i#loSk*z5-w2%>ZX}f{U}xOvRI)%s?nb5H&t*uzrnkTe3pZ_!ZlF z7JX*hQ&t?Y+I-b*6m9+?gcCRg3acX&H9p}8b;!Vbg|F~Nf6ht zX1!h@@`Ah?B0|B|sF+xhD~f?e_y)xm7g`q0jM?^x51#xx*^?<5JAC!C|B0#HXJU6K z^%z;?NSTqjlGapAC%Y&kB3*wQU>WDPnn0CV-YO4iO9!_-K}IOK4I3J_q-DbgpZu66 ztl8K(t9HhEGiPJgv}|Z_O!X8i(}B!)Y+X;l5`<+k$nhAww1nWJL;@eb7lH7_wbft; zr3#@)xssv2Q6xLh)079RyzJ}&H5nPXtSEFzt}1d-l8KDN2luJ;ka0O-QtmJsOc@jv zxvEeM(aj#g6gcBCFAQ7PjZlP+(j5`--e7{m$_6V9Di6pKat$vRKj-A~l%vxRIH^Bm z!3%0GBix@YsND)ZQ4B^yyi_b!HLKMnhzwmSyoy$gGRSBxCj=4GU1ORpIv)~RPpCCY z?ohBpCMFEaeRlFk+){6o+XJ#NBr{Wl8{^xGU|{OMI9U>=irXJ50+jQ-n7Oi$^r>0OcyGOvVTpwZe!Q>*gtE+wXJE583iF0;gye zIF{65OQ1y;QT5^iG&RvbJic%{)pU;_2r;J7; z>N;u?=kqyPmh~NQ3cyZncItZ51xjsvpRcJL-Y@VTtS#`iAcR;jEo%rhx`^u+3!()$ zq~Z<02tFrxg>+B_O&)TD zC?I4wSHyV(G5Th0T7YJ(JtG9N|_ZEI-i4TX{f z=Ljy&D3p-oSw@jpWO~H>yg`NmgKWsb`O4HqL&7#dR>MRV|-fKBu9kZELp8hPv6X zX|}XxgY^yD?FJ{3Xx-wlasJdhuXa*_IE6$a5D{FB`G*}dGRtzRyy_QpmStpN#GTPw zWT7JK1leVllk1F3X)+M&jMZnz!d(XXK0Ep`YCT5VA;RT|P)3;x z*Hht**^&>p7=6U)@&~*$-{q3`u$*8yrC|XolFvd27LZ`Tel z4UQU>g+5-(x|-Iuw5}zH4Vz7jwi*hy3<$|2BX4hkppb-~avJ^H+cMR~#K3 z(Y9^RX3DaR)oR7*=_z@h_pxHh@u9Bkz94I@dsugWf1mMq+@DyIHYXL#n*<;!B~lrr zT2r@yb_*~fQ&WUcv~Ejl=Rk{)kV(iTxOzZvBT5e0Q=j7(?tFv1`7F|WhS2U}ZCr0c z*N|;#+ieF!zB-z&$$dQm~)Kb z2*HO~&bv)GuJ$No@F2j124o}|1VwM$G+hNuUd1ME`RcpFCl@u3CXv2_netIGpF(T3NgY_SdhGwsgtOx!huF32SFdHnb(X| z%lJ}`(3_{etD()_Wcw@XX-ie#pjWnT!!(FyOAUp100X;ZH?N@CpFDqih8ee5W@>6U zYp3?y5r`TG{2#PqLrkVa%zUW>L}|irG$a1ha4BN`GRgyEHeU>Ca4}M{>(#LzV)nZK zQm47Gdw+=v?u@ULoD$i$h;{@4j;lzP#i4QpmsfY-m!*YHK7EMmD+1G28#1z;7z&L- z8>3933OzdVD09!FRsC3bScJq15sqw4@e!iNlo-KOTuP3JSsL;n0~dL<7*l?UX@jf6 z_*{=jyjv32c$qWQ4V}RabD^_bpD=`aMq;zHu=8Cw0Z!?gmPvKXz%iof=z*uxs}M2K zTLAk8u@DF~Q&t>|fJrZ5;x9NC@QB+SHWf34h)} zw>3QzF+W~d@h#$wQ<83?{IQR1n>m1k`Fe@#CKrHAL4z7wqKGc`i}A}Th9F$%Et)u% z|Ms64RR}r?^lwPGcIm7S%cDfqt&Y)3_QVa)HTd_^_vo#}ZC$M(1yQoQ+GJ`2B=EU} zLgh-SVv72jh(e+!_S!bRw7u;zLOf5BLQWr;z0hv*zKBTv{b(Vt(6rq_mS6P#2-AmJ zW0Hxb5DN!N5hQf`!KgV`Siaw`p}7T?-a3G{-p8m*2LloSYvbeNv!LU*))a)EAPxvN9|yP}7aBYI0cs}O^BVT| zz3K0P?QQ+ZXw=QueePb1zdgSu0soW!aBQ;*;2vz>?Vc@Gc)9^*b%1arxsJCp+nWVV z+bhk^JI&WE=r3E$?>o%E+2Cd7WRZ*v*udVO;sT0|oxME>LxkV2gTKcXJMKCETb5Ym z8EETuqWQYM`9}ErZSnVdIwl1TPxBl#m}2dvOiLQ@nqmtT&e8LwV~{4%bY}+{%`O%= z)VoN)h@Bafz;yJvN8UhPAPzxE6K1-#Aj-G_Ltrb>?&V)5^`E{Y1${s#x?y(;7A%7~ zgwJp>N^Yq*mgb;}KZZm7MfBeC1LN;1&ce>dwl+4M~_oK#=N8MET z{bbk=K5e%?6C$7OZf!=wH&T9hn?oC+6_CEzC{uH&V}4OL^G4K8f+p9ZesIUwRD?5r z=^%}w2U{-JyL=s&oGh8aJo#w!h9To`96pa~g2syGKF4zeUd zxL`y0(8wJr&`;~2--40vB7C&h{m%Ut0DK|tQQHAs?pl_$@vgC`+T{kQZv9)`t`90x z>ztuUHeidPezhfKlr@sA<-_M`;&H%0yHC#Pem1znK*H&@-GTPNykMyT@|cgFi;_O{ zS<$15@BoWNgSBfb$Tx8w0@!r3e0e>8DyEl4xn zf90?D8>Y^%AtLKYEBmE>itM7!rP>dfWW) z5_;SM2a497-NEQ(o5t5Y>Mz^F@ziUruE?1r)1{@)*gA`xvquS6ZexSQzsIURo~zh1 z<)8AuJd*i-@o7ep_CTjBLMt1ZU^9`<;eoJj*r96 zTt6uH(V3?sSa4__E0eaH#gjLDq=bOhf+ zUz~vOquqx6xp$bxxcUx*#&X*E)tC#^@-8kXx8^9{I_0gx-e5$XiG2Sc?i>LfE}ohK z8-?Z-@1De`6iQ~hu}iJ(lx;QCB^0A@RU%S>ZU_wXtSQb&(q%koK6U<%3oG057!v+( zZi_Z>qKZU|^GYZC_2&_g#SA~FGa9m4#x`?CF4%E}^nQM!(%c-Zv{=BGjENHL=y57&7{u-6~*WzG=|lmHl*VTK;noCkY03s@WigR*VUT%mP>YvVOo1;)wE) zfRsQ-sw?->jIjBPv~OYsikO?_OqkcN(!3Ro_tig)CC^`sq- z5eG0_A&;Xl7*UE^$kfauC_*;<)w%jl6vJGO;#UJ~IqpSi4+G5Q0GOQ7Qv@=b+$?#B z&2h>=$)UKt)A)Njkma)#IoHQ<2AO5!P8V`0bM;nU9gTp9)C8%oQp8{ymNjHsB5~wm z4w^AxIm}Os#UF`dH!evD3gFvm4 zVry4bLUwHUMbt?%f{#ch%;UTW_+osc#P}IuGO0gmZxklWDqW*41%M8W!vdFZEhDb zidhSYOczN%;!g^F&~TUFJSQ}P*A|>o%F-J9N zc}L$o|E}JCsedIHyx{>+tRcS-n;6^i;794;Z-HDtgTLwsw;gu@Z;x6cj7K)A203gQ-Rf$^@x90kqrOBIGDz7#kn#V$= z61El!U_etQ4?w&??yBBas;=s?-y%M%&@P3AUWWgzTSEixGJZI&(9wp zdH8Uhj4}aV20lI!+J5HO9%egd=YA`$d>S}FuKNMlVvgCq@7w;TL+pGV?L4)<4C>vc zfBzl2^Ku6WO#w4+VEla~-L^wI$@mp8(8C7;JYQ#+-_SOnCR{ymxHH)nPMmey&?_?t z_8#u<0oNVDnuFux(!p$Ke^BeyxSpE$S(apC2b7Je>L(Y`-lLDB^oz5|(Ev^Zb;;QWJ)@V@c&~ z)>j1?m>0&UWMxXYgvzno1;&h6!CPEtvXPa$lC5+sNcGMHy}T;0_gi00r~n748(WRN zn3K@H;IiJuA0-Jvq3E1#4*Jwow~!Tze1b>ko&HBhfz2fA9c2=H+lpV*lV9RoAH@UB zt81Qw-cH8CF9*Sh(Ph|-iwJbF1?M@m6UMI#R}aNn0!B2!XjxpNkMGaLdqR?xYym&b z=)Q3ls2akt?wxUW1R!A+W+;|`7UHRxV5Tw*8%yxg!N`lHtn&LkG@-x<5h<3#-XhV6 zxn`mmY)1rVe7I+suK1K{LO-I|aks2)k(tv-`Da13S+Q*BwRblKadFhoJx~nN)-Ka?g&hhNziXXfApt4!O#X_NK1uzEY)PPdg zMu`-Wub_gdh1+Fm?Hz6nc?!D+vtXGE(zzwnMO=G1T&4JWj|sQSQ*P#90LFx%8VClt za88bkoSGymlo|*rs^D5R`n~X6XY5=j*)`P{b=6;t`zOtLD5tjaB+-z>NrG9xu%EW4 zbH@8$C?7i%?+2x(=V7MFM6!Zt7yGc|&dD^Op~8q*V8}=k2EQTaQJT$;TXuyZa@K`3 zj5=Bfk#S60uxy^PZ~0_suBCe>#jPUD5kehvHE)RSW2#q@pKDmrIKMtcW;)ithJ^12 zYh71aJ-QNPiwQ}%rrZmy7>ki3k%cX^@1pRjIAgG4rn$kO3$fKeHlb8Nlj`gn-CrHO zaCvq7ahBCpfI0+;9}WPFA^!dQM~^6%#$QCnn=0#JIS-&h(Qu^CY1!G?fYx{RsJ==U zKz09f>>~nX3GG()&04i}b-e(*q03{t*)hJcLG*E}@G*zGL*U@I38ef*E z+)e?wOk5pKlLN2vdl2AK-Sz+^BGj2qK2ErH%(B}9kAd^gN|Wf10gZ9AjkM@S!9|9A zu`CrjNW&^4z}fG2-;6$#}dVV@#ru}|CP-;n|_j~SUti`AtEMg%(6-$A8ZKS&W!)WVs$mOpHXk`q-A4>yYr90vFb( zu&+#*MH2yQ*L04{kn2}8{DvvHd{ZKj|2pgiC)gj1sQ>h<|5=CJsJN^RjC$P)q#UA|SF9C=3yjI)LX0&sqKAle zwvmr5P{hdN-+Hu!QB6rn$r1EUsJpwZPUglP!8FPhVc&Tp_KJ=mOqzJ3u4q3djw*Rm@L9ftlD0Czd8z6OgO@sOv0$rkNB4`WmVOu6xoaF zFK=WsgmI48#uub#gkr7WOeQnWimpO6z9@oym)F<)3}fgf@1py!1idN( z)G(DOrGqEZ*5U}uq>=$+pSPDlwQi*dyc zrL;*6vfDqdBcs7&)%1JmR>qzplF&7%jAYdrvlOcp`a!{wQZZa{zc=D0sHpy!aal-P zz@7Lx>9+jJ&%QBu!|Hp$vrxdE3Xy^8Ry*|g9c;XeH=sk{_TJ^j0qol|G8B_20b-O}QL54ju;FgMQu=6G)}ZDxhjS1T5;9>+ zz1-;!-?%%VlF!`GLQ5)Qx{=X+R*u%z)z-eN-{7FPP7A_j*15c2wSAbfGZ0ue`n!=K zx*@9~4b>*?mL|{o=d2UUtMizFG(k8N4Hry^$Ing*RXsx9Wm;*0iVEZkBdH$^L&NX3 zr`lLqWCv|XDYr2 zp66NpMip@eanO;kEN^Vsd9!`Gi;B;hU!**;%if1~PU}_3T@}a-mCke4T0%3?d&r#w zirch(AFST|injx>$C3Um6Y*cO2G35`@INtJq5#@+51(6d2;63jns{WyiHRB;{~7Y2 zW5ZI<0bv=&)^w`4{*-}?5RIL;j3H)ZG6P{O>(O^fJN&+= zTEwP`!Ay^gaH~@{&)j%2GmMt>MhUEPY#|rxH_Y3`YMsez>2x{1`9V2uzp^ZI-hx#? zxw`8RjLxb!vP%O+Deq=wm!c=_E_j8D*+H<~R=}AQ8Tq^YUY z-K=OADs-}>d1stpRsj_k)2_K#j3skfn4YFjRn@BVYl)8WC2*RYk8SdU{CixXCxZpZM8tMPO{omAM4 zG>V1Bz{lUJ#a{!O*A*I`6jJ(~f^SA|O|s7WHs*fU+p?uQNG^JA4+iy36Fr!sUw9+H z{Nsbj{KLC{^hqV~X;$~;_N3{l=}F)yMs1N(Axi*Mj|1}8{f__OSI2El@#q}U# z7wEhIwa*6h!mrIyF=hS?IHl`Ix#vM3-!&Z;h-O9?!=N^8%NS1+HhO*L9oM_inW?9L&%Qv~$ zb6=Wz1^;d*N2h9HUlP0|=eA|zY1|(#@C1%r1f;kQ%F&lR}rre+K7%ETk)83_tjeCE^hmoDAKc=s!h+Z%Ipm51e^+{oFinLNn}Ag zO=9s49^Z7#O(aB~)hrYXjIxx+9|Nz9kjwUpPb8mIOsUNg=|UhWD96x4a!5psfX@tr zm_OvE=v-|GFH=VK&-6EE7e_z6UBP^mbwLbdvP#W*5&KBA5QsuuUFltINvxKRFT0cB zlg_n#p^LQEDC@7vAxlSdflF)cz>{FM-kcIo2>*ru< zr3m4Iv}PoYq%lB)?aOck2y+zGJ*|Z%4lKcBNH{=oNSmWcg0pt3sXYGmA2RH6iVWbK zoH!E=vitfZWTtwcgm{NYD=fsVk15lk5NiH(x%dh|rww2F*5}lV@|@xmGtnexQW(4# zac3#oz5I-RmSKv(P{m8@_9@2=F`eACTwoQ?nk%pY6I?)s8emWND|7@P>Wt|x zE-oCMoaRRV0)f|!wwve9Z^PvWz#z&YL@EGqu&0kVwX__^OP_CcP8!r~0bx@B{O`o~ z4@jos-t>%r@{Dqfy1BXWJ}gbx0saWoiZ5Ud)}v2P?vr-kPUiuOFn}unNIzg)rSqXi z?ubH~8NgRwa?i{-j%f#AOCtkqWnprEXNIoxXUh9ZLGXR~0>oe0@rYTBa4=2_7bja4T=S0_dvAx+ywh9oXehb!X+wO7Rv7976aQ6LjCKo zPD1>-E~G`J?ZONzQ>@U^7c8d?ZL`KG*D!o0SG4a}7z)ZX9USUT#58oUOIEdzB)r_8 zeA?eIP_qN6C9p|tbg&|R3HI{gQR2Gh_3=gv`PN^LToh$#`xxo$gSFNQx3FI3Pxc(L zwd55IK;&mze4II#lFT`~SAAS513-IVFOjghcvy?Ab*i^{WnM@RRtNdj?;Ms2s$9wvh865NZXkoEEMp3tTwI4%F4PQ0D~2^Necp6vyBa% zkAanjvqGv*MLFR0`@7JRVYD__J-%YYO~AXbSGG84*vJosbr<*_BY;T{O)5&;)w%8> zt?`!1mz*O1m3is1g!4tk2L>60jX@GZ=Fvdy_{a*`ENcEFagl1(SPD4i8$YS6xx@pn`zeiCP z!a5Ldv?CW0NU}X}#2RukmlTszZ1_4rZp zE8ax9vd$B5ud3TG)$AqIT(@xMj*G-hViW^`gYE@$fk=S~x*WXn!zA{Bv~;n8fw=@& zRnQcc&Mtk;A*?v#e4-02=aYqu-X}(RA=`H61ZUgPfe%v5!sGPBUfj)Xcj|B+i!NiC zjDO@Ax*y!$4sX9bPu1_Rr)_@|WiF75E&0p1##F7SRj!2W!eCk|ajd^J=TUA>?Bv-!34 znQmqNr&2$mYOPmF8*=&uh&iG=6tVwtk{y+J1=x~Cl(9qD+CMugzeuZC3433NWVIG- z9>Vr$l~<6Tk0`iIdSO<88H3utP!aFfn6x3s9u5ToM~=XtL$=N(Ii~YpIz_h#mV)_d zhnBiNcO9;9X*!~Z$9CTFn%LxFWguu5Rx$H z(i-)49~?#a@&x@A?ys!Y7`GR^lj#!k9w!?G{Jxa_^aVb3_5AbJU3G(H!X4RcrWs%M zU~FDX58z?w$8+U?CzWi+!?dKv4w7yyoERTz|GNLpQN3&)Eii<#xqdxv(dOxn(`L+3y#lnOq zQ8rHp41i8dOiW!o*xTFtexe(XiMmgip}D#FldTsW;a^_rzI?8%(PA=Y(X2?K==w)e z*8&TjdfqR)CIcI^h=#P)Jtu{b;jE67Y#dT?7cj0-pZ31IIBKb1UW=ST?0J4-&hG682WC-TX6Fx5mD}fE;x1@?J!935~}*eY1H^nIZtp zRL_b+%t5=5QaNBYm=z~JpQvhAwEb+R`=7M_&&Zg9(1#{&q=~(aQ$vR?zy-tc!p;U! zzYM}X0n`TeWIv^q)x<6AW*!+u*JV2Fe)^0+zql@1{>B-hRu?h}S{SN8I!fRQf|`p{ z)e7^8?F!ez3Y=3_uNpo@GDH^c=P--yM9d0rt!I$2x9{*Z&d>0Jl(8&5A%5}BSp99L z>JjFcCCeo@q&`?Z6^atFzrTiL``M*hC$3Tt=t*QeCv<=@O?Q0FJ@Bp5pdV6xif&kZ zA>`4t1{gRWX`spieAxA03}MG2Ieqf1a2B(4xM@P@c9rh%w%}?PWDZb0MIbHdg;@Pi zy&&naR$Xv2M#CUbQLTu&o9Sj!1D&n=Y@ol-O166(h9@q%Otbx3a(+Nz<{zqq)6xjm zr1NE^$4Pg?L7{c1gWz*aF#}D3G#RF>ESj|EdWW63vfuv4ClSO- zP&5P|{WF+gLbY8GKb0jrZ}kMVp2pj-yj&6`WAs&s(v$9Gv^%Fn!NL;_#V}#^+xdeJ zCu;ef{a^J4`Kag~$EDRwc4C|OXCDuIa26p+B>cmOuStyke@Vu@a*Q#mv~8|?z{o^m zX?cDofr|IzA`kON%k2qgVSo{QE$Xo!v{SF)X}-Ca)1(*$X~RC_^C}T9FN<6P8{uA{ zK4f7fgU@zLGVH?C>Z-1HWCI+#7UTQC0Y6v}3YRP-K_@-S_m=+;pSN zmUDcX(fj#)BOqLH+l}PD{9EOP_{nfb$`|{8d7J&x52Oly5`M3bgI@r)om8VD$*lD@ zPMZM>AQpC>G|HaJSx)!PE2H!CgXb*%qLn1&Qpn~PvpQ(wS4=O*E)iJ_`F9J~pWg)l zS?KnFkXP_LuV;1PNsaTMiF`W~I>X9DU)dc;x$6PNWM0*w0u#gQlq4iEDgUL66uY%|V#<4}qz@*i8!)#z_8M{o^rpv1vG_I<>-|YFm&+%hC4k z-zAM#gc-dcy&i;Gu1*eJk*1cHCC8C`>OmXJNj2xEtnPiv!Q%0n>fw_2g=7cSE&|Pq zL-HV+)pKpm^@`v5&Ykv!eA+!CsRu6%1K}C$gT8x*GT@S`%f&QVX74jqlK#Df>>%%w z5XO)UDf^CN8B7S1wK<)tTE~ghh!Y@ zm?`}doZ=t8zC=IiCJ1T1!4Yk}wpUn_BlrmHN&86blwBNLrmfymDm8tCL9I3r&yZNg zdi#o>$;2IczUmjLz%)|32S%^h_9#d*SFrEZA&QoMsuB{!#G{&g`6U0z!Y^8fkOaZ# zUo-q;ebob2Fk%z#xrrQKdo!|+sn=aY8L`RI9=0CFy@&dtU&RBo-c ztCpQT_+h|$u@j7+K-<6(trH3k#!Xb{e6@6S4S)aEO{lzbi#R#4ynXSiU$x$Ij{h2+6RN{Grj-5UQ{JTd4Xmo4L5>Ng;z>KryATRG*wX!HNvzWtxOd;d-R@6Q7n437qd%4auW@Ot2Vew(_E7*Y@^S#*7LbEHg1%oOf1m)lB)|Ot ze~p}Vn_ZxGd>rk3m3alOq&hd$Y4um#5C(VjbT{`4CtQKftQ z)S7q#VA4Q;e;|&19Yg%BlzEzgsi|ZE7*q|AuevkNy_t~Ue$n|ML=_JUBGwosJ;R!4(wd z_x8byiec91P~$qTu4b7aWeXIfnP5>E@EO+&uZ}}NGEdS^EF7v9DN~_mo0pAgf(7o8 z?_Aw<=?3PydMRze6hdFq#%o5ZVh!O;P3&Bb93Ov#v4CRtrraa(;fBOFXOxt3=FXS@X&f{*QfwnvqfhspNBIziadFq2Vs~gd?0#I4|~;UxC~$! z@d!zJQ0gZwwa2fpAig_hI!**VcJWy{1Ca)gwIr2*kF_QnDf0=BJ%Ca|;-D8o)=V>! zatLPN6mJR)WJmgIf>=#Ukfhd3yI)2>w*NC_3l3hO7v;kjVzRmilTCKpF0yTk1~F`{ z7t7K*<0Ll!iq_ZhW{T*3+x?3!_XYl&*KEgZ40-1t^*~N{=N>x?LA+85YtV&xA)DiD zZ{4M;)%!+y!jXp)Q!6$F6_4{Gdm|nDJl{wOa3I3b^?dDXS`jew1`eWB>y$ZCRz|N{ zHm^X*H5J2<>7-^|Fng4vQSl87|GADO^u19cxE zeM386)-QJ69ySM^`1%1E!x-^vH!)97GO+DGAC5g}ULuTSb$fke1qz^!=lLqKFtRxd zPM{Ck`mB&HfuQlc)w6HPpj>f;g>bKcZX#EwYWMSOzXBvokN~yx7!FvTel|oUizkN< zFGDw4J1n6Jjt)4LBJ+UFGF-%HgcyQ%A>CvQ_CTdl;^N&L0L4|;)sY+P)H0yE9%N<` z0&eJ$kbki2b+oqgkg*+`x*Ffw&)jgS9@TLukz1T?$!S(sI_`0FHV-I5_^~Uf8Ree@ zT7-6Ek;y~!Wx*^>hGsB?(S?zrUd(nmPbF+~R9d6oGPwmX%skh-1vu3hRg9#;lJVwt zpvwPX*hhWmLGLa0y|KQ*wS{Xe8cN1;WD-68VK+_tR7DQYfj_IE(rs=7dc- z>p>e=D#NVEWJtkA32W?wffMTWSP$Pv<6lhGd_1~DJUV;A?~UR76|RcI_j+>Rn6p8{ zu6j2}S_^)|o?mYSB9#h??*ji+G&ZWkk73bf$i(mwdtiL`u^1<*#P3T)2zLq)XX`O? z@tZz{Smf!(5M^NPhbtbs{9?x=i2xmrFd-lN551h_hNwL@Dqkx)%gu4$qfN-mY)7|Y zz?S^+RWrCSFebZ$x&T@U!`fJ^em>Bzp@Yk*05-Z>aND+#u$+6$lG70Rg^*2Vy~7%z zW!enJ;V7ebdO9}2THwo@hldf>!{B8Sqe*w}N62Ga}FvaK9vD%RusRuP~c))*d$Kc(SvS}m)jD?C(Bk)2N^8%17aO+S0bg+p1b&)U5y=gj06M(TaS-8$izZ@M@N6$ zR)3Uz_x)ym*e)GD8?KIfXLeg7kgw14dpXy)Aje%^vgtT6K_ju&EigiB9BGay~ z^J8?bvwe*JHfZX>OiC)c|9SI=fa4plhb11VRbr`nvHvK0!4tuT+3p};7~atC8a3vm zq#e#ST((}^8?mYhe^aF=5@&04OS?btfxAapgbu;yFERR6(#&rsLn7^C4A*58Vt5kj zg4mSBL`n;SPON~fo?`%#e$i9(%O}%=nkrr&lexNHhT;h!G}W+0K+>QxHr0}09S3$m zY8^toLD+_BXbq)0u&gc@nss!Qr`}?GXA^Xm0U~T|TE@X};omP##t}SBg5G1!7;Z&5 zWPNRPD9pYhuyCmIE8_V1Y4eL-llO}uE~Q9~k{`e)tzj;hu9iX~Ny5%O z%3|I9a0OI-AMWdHk1^JS#vWDBpZ=0XpOQGzIzxsy_OawaDJ*K7aiMOuF9RH2ez-b% zq3k@eAPn&Q?f&#EAkf)Jvmha1VSK4SM%M9sUKu2tI_})xwC^weB6p3#mwHSFjs6aoE_? zGsBl$!75?qrG_JRfCf!+m*MK_S{U)~QyoGw>FCs|9lCPp(&~1#1G&?!2O?4{9VZo( zId2iTZ5N_bMScIpgOiYu5LSN8j6-bxpG=8$R(5tTZ+2+$vX$Sxa!|T}$1TjwlU6~@ zKZj6_iXiV!W)|8)M67J8v9iqHA==DX@W9k@C~B%5y~;iB0hjVFYk0dO((aX7{fI<9 zDQ!wh53Lr4ak?10;<%K10()k%ZWH%ciPd*6{NA;O?xlA{Kcm)RoJfNb8l0j@q#cz= z^^@FYhVk~gpcnz$U77F~lotwwp&wG(L38Tmirs@hv%7Nq;arq@h0^vhoitr*W`#r= zy@_wG;8oW^?APH<2XG7Aql}DW#(gs{uo6NW+#l?M}kM4)8kxuh}|>I&ED*3q=ua3k(z6gi7Ncw#!8P;!2l3lMCuT zB%5p3vF$xFP0!q>LgWcB?ftz;^>t$aNA%A{T~Dn?e85U`P{PQ{d4~ER3ZH_kV6SZ0 z3Bio2^kEN9+s`a^Ugh*|Y=nlG@~LVNixRQ#VpKt+1aShW?enIycMX$JNK-we9%rIX z{0~#*1Y}&lSfsI;%*hp2Le`KBIND|vcL+0Ow+~h#2(5B)pO*&54v08IqZ8^TumiXP zMT2WVw&@K~m-z_V2AyrtnixcbFk?)Iie`Ag{B4;?o&64l%clQpH_K4(_5Z^E5Wk{-)iq(U|$i)aKzai5K zzpxt+ZByD?O*5rgh*aQ;uBa58n`^wtMUj6kN2o(UYmbyZeyhTj#l4yR#l+!n)oQxh zIzqC%Y6ikyZ|!fyYojqcYuzSiS)32Yf`HD^Z7>@j^D6gJ5@c~_P+(&e#TpR>|hdr(x2n7SZ1W?0$HuGpz)M%ayQikq0 zBK7sg4k9JZY#IGH`u?LnoViaCh86La*r3u^B|*GbXq!JbrR%D^@s`Az7~5BM?S*5Em)SU2;nI${#q>hzSkT$%E&-hvX4kim4Nxi z)CN`&3TlZWZXb)#Mdo<&jXdjcQBSK~Dx2IBW26Q}9jbg+NI8n=RW2fD(I4O(WJRZ2hh16%E%sO(Q>maH#>e}6^c z%GdP4$Pn~yL$V>nlF?c%i4&AX3td8{7J?HL_Y7EQqtf~LIrdcflD&!sUswqROu2Lf zwKNi}Kt0T|$Pz9{v=n9kCDNT2aTYWLGiQe%ml6=^42jvc;TOR-TPj{XFMhL0pPiIL zQ0cs(%FPtvX74jrr+NpD3Tm{Dp$3*tUc-I<%qX|kINe(h!PE2euu17S3O#3x6{cac zBgR&Z3P2V~se}>`D48F7Sp`r8KoHN?biU-{#zO~nD5ghy)s+ zSX$*O|Jgcg+#CQ7r7PQyds`d?s2!(XmSmvmC8dy#+q%3|Tnh$-lzsjTQHIk-oGKLY zm8x{tr}D+*UjHb-bPWIX%x}~fT@T=-;^=APB%+H8WFo}j`{OgsQ9Na_NapF78CREX zSoPi6`e*b+{>kosKjg9uFz5|cEqB( z<6=ljJRn!|T`9qfEts+8A{X9Bk6^f_C}tpUSED72o-Gs*A|Q z0@|$6WxDiEF%qd-Yb|itRey&r!V=6JT^$cx8q)nofQDM|P(ig47R1PYM>T2sQE5~P?W z>YYjuy)ZP*N@WUOAo4I|+6-5|rPqE>Z0}bOg-dPi6#RZ)_{N2)fZ1YqX z0ew2|mA#$^bEwhIzrDFd$f`KE8*^}eMdD5-pd|H?-b8#%vAek+6<#V*znwA+%jSEQ zms7>~L1OxtSC)e~(0$sn6m{f8chl2gcBVSXnR;NwCEB>!|2f2BAVBort|Aihq_H~#%#6I6S&`<>&zXSU zt?zP#X9U1A^jL7V{x0hD1`~US0Gn#q!2R)(6i8M@FpOXsoHnCye=9i#tdsI)kN$h? z6B9hM{f$4t`}$n-cxel)!gwau zmhy}ee)m0FkoJoB_~O`o2f@sqnJgNTQ!ap@343YrTjmR2`W~C_2f-;j)n&FUR&PZj zL5LOH#Qx~q$0NeH@|APrYd?Ua@rP)kFU-d>g%xbML+L7+KsFUlzJ$Zfry)CU*C6HR zf+(v#JAX@`(e2OARF|eJ>oXr-Usou#TD%#iXf2^kUNb*JaVo01kkOH*`0&Ag?ZnN;%dCsTa*3-{fwM`@j4aAj)610+4{PrwFbAlR8=xjvy}}RP2wo zJ8)(R_!qJ9?a3Caz+QoSw(waS8hwuix;>@Sl+_G<|CW8gY=2@RN_CV>VY^LCiJ~So zydSJx2N{U(>jLoKYk|S5tD2>6Up}5D!~GJAXvYBO&F`+Bo(x&}#9p_kfDVE+dy;bL zCX#!jt2Y?=3b4yW2bM1`E*?7Zxjn4AUY#zpdtP=!$JrMHLFc|$muS72{I36@aDYhS zF}?E%-yX#SXhZ+QEWSKXM_+!%ul5wU6Yuh;f^=(yPn!jB$Xx-*+~{YV+SPV2aSx6^ zvd|;Q?2&5NkE$Q^_LtLK-w@-u(uI&qejL%-o3ClE3f}dhHZ07P1hF?iinM}M2kABC z-aS}HaIEPuw_g1JZU3P_P~y)xl-C^}EnyA~;o(h%KVROG1y6O%FC%ov%GFCG;kBcpp!<7 zhe(MKMz?00nzx|z6W|nPqXzNwQ<^F^$a%@(lqFLxP?}o{$uf_J%dU!^+U1yZ1Ylfq z^i1u;09ZG~asUmRJ?g?Cf6FV9I*ah8kBBUY(~oFmWh&^9 zpDIfgm*Nvxpf2QKY6|`4t$Voq^u&u78APKhCZV2_cH`>q9t!N<(B<-Zi@0A~Km_jq zj{b^!)+cydGH(Gioq>y5(w9eCy<6TOaaom{7rVfK-|P{_Cu)Zwj)N2oz-cuUwG}_g zz`|!5hWkJQTsuGBE)01HKGE8~dX94B4r>^Ad)Qa;zvS3QwWD~v+HI}kB32%NyVdvKqAt$jETWZ z^g?mCDstl%1VzOVvE=&Vxyb63M4`XmD)u6k7KN5tccTY6$x<&4Rg0xDR*&pU)xySE`IXaLar8nG?AxV~ z(%1K6z~dAEMZGU2+hd#yrez!LGUd=UWej7iIHc=}TA0b3G1?~bL3>Ulz48R+(c%Jy z=3V-7wd@szJC}951f5Uy{vOm`*9Dl%QUmecxGxuOkgJ)5!z@wkM%fL;N&wxkk90vK z>&_RY24+#@IqMac)dEqPo&xaPq|ys`bM!BsP*sbDkirgj(SwFHPxB|vxit}jL$D)|0 z?En#rK%ir9JhcJ^H7}=mgKdo($%0LP20~<=N>5W;TOV+6K^WvQAjrP_F2Zk z3pkD1*ldN?HPYKA?+gfarx^{bN#-f9jV1-Th;P{09Z(Xg66S%TZd-xdL%@$fWgkv<|g(k zIbt0^4=iZ-eoM_rhD8BRh>|@(Wh7a(h#r!(&A_l(t5H#aL|s;b!bGYHKoiD3SmA-f z6cLPoWqe$s9~#uIaH>YAMv;yap7%UFua;4EqJGfB(M_(AT0;{jd#7~oTsTia1_%tr zD27UUx)Gu%_>T_lb99wa?iZ^YKN^pHORYUZqfGGf#Dcw!m#ueyx?78>7&Ixq zR3jZ=2-Ql$n&Q{SwCLb&PLmV)?+!mH7A3CG zpv8u^M8DR7z3&-;4Rpb?_b;iN?g?$0=>D9h-u*d}Evl5;kDWZrpd_2p-{xUI@_Zs^ zpRLaRqn}!Tj(FfP-I;0M+K)VxnovT7j1X;&g0J7w{g1qT5@mo7iO9RMTnkX;-ga4+u}423#bqk^jWLta5a zKcX8TbS(bj0mE@{U1iq@S9TNIK+%E%o%`$Iyqh60+ zA8{1Q`SH?-J3OD`Id%Y|!S8wwL|kIKXBl$fh0ZDfyJ=t)j$YR4vmx~pXt%OT{t+CaDT{e?HxJ4UN#*2sfr=GZV46Oia z`x64L(jVCL68XM1jp55yJ!e!1=$8?Fm=XQI4SO5=Roe3$0%`Ts4?wWpds6VLzU^%! z&Y&;!kTNN)m{e;_jhG(vj+#XkV82%^tSV4? zwU$%*3O*EWd*HCQ7Xc;2?xPNm8^VA9>%12u`?G@-6=fL*iWA4=dRX;E7AhQqMP)K3 zJZrB<*xb=5qr%j?D23S~<%g%$Tl>H~JmLnt{6O>HAE9f-NVkH}z48&XIIgV44CUJQ z+Z{75Zdt{WMJ8b$wt*#Ky2R;|oxdI`mq=3o$J19vMcH<3)7>E5AcB%ZBi${aH^LCo zJv4|&#{klybf-!;NOyOqgmiZZyr<8%*2m%x{D7Ic&e;2?{U1w|DX70eO)Tv@N1J1A zj`No8&cGbTG3k0K2ECs;`Dsy~4gbEV+|qW^3@(BSF1!#Kp7cWiPR9Yg`UOq)Bpw1t z{Rk7gxVU&{1ii}`yN$<*-95udugs|6S(&K^pn``-C~#vLH-X_ppsNDXiKGkAFEal! z7H9x)`M)Ft@auoI3s95zj3;6xa{H}^`|H!?W1shV{=koQs*?||12iAGpv%3cOZu=y zT-v`i1{gyKVYR_T_%xJmROY>%r~dHvd8BP}yOk&{avMBPk*gT2769T$NkTioVxvlB zn_?X#&$jT&=A$qqw)Z=MHs5p}SK`vGR2_;xs(lu~#KT{J&$_>{hdf143&-qVlX|`- zKr@=56+3Y+p++O+e0g9zBS}OmWD>k0Z=;H5%1fT;N8k{|IQvQz`G+C2p9JY-G?F}TdOqYMhYT9QwL2Som=1R`0z-9 z5U$GvvIRTC-{}pfv$vbax6lnFFJYbyBUMyMJgWZ?HU=f1B?;^A#Wdg~D>V-j`SttR zeJ#y?Pwtc96{=p9Db7$RIguBhiOs4}iZ+8Z%cgD=WZ zNlYtBv({!2RPWf@xy&@6o$T1#Sji@=f8pr9RCpmde|V0$#w*K3vwW@uhX0!k8sltG zW33M}+&TApk!f%>R9*u5m^5KbU9Hr7crtT8+5>Ym$f=NilPv3(?Bm(IB7c<$kbo;q z>FM}>*#Xs~g9Al>0yz3a%YeJCZ9e5Q%^maerIJpdO zGgMi0IGe`++hP>SW0GV}>d{ld?IqJ&I`;XC4P>xZ<3IG7p;t;o1ZRNV`!~29+*^6s zRWl|)nvukB5Jz#ZSfKD-%{SDTSMLF=x-=K6pmfx{WPMscf={){qq&9b`BMpamy3T z*74j~$keM@!nTWIYSZsLpURl1jTvnwaUw{~WsdLi5@jtLnrg|dixr<={%Py!+Z*Ve zR13=4^EADV`e(njbZ&+uXFgFCcHdF`ICi91@1u{xVcd7wguZ>};`Hd5So}NgnO)q? z6{#CZiA#CIskJu|Lb7G#jEJm&oZ0*GaimZS$8jP~<=9l}WFAGDa%agDvQI3(Rnq@- z>uj-vR6WK&d&)<>NTmoLBHx^0tRsx`3LYwsSwuoGIWFo}%;ixJEO&Cg*b{lvVBBKw z2JN3?yH~q3*Tp^`;+R2A)8V&6(m7(N)SOc0%2$tuq|tUz^7F<0;__Uu~HnDH#`!r_F%b z&d4oweb9%($z6F*F)TD_rJ1jAMYW}~W;~&$$>uF=BK@0a9e8_((kd}tAIXachx;Ru zB(>=Fm~jEY_@i%(r5svfM!k!whLJw83H5_!Yn?W{k-CST!f@8i@ZVDsgH}nNFVqcJ z#y=v$pUp@KxkN6e^Am0tl!aHvH=+Wy`27-g{(t9?+mPj(Vj7>BkM>XXk@x|vb&vMt zkEt87!>LBnH@JN@RCIMMqa=+PkHwd!WgPcSts3}T^wy-70>QJDY_!eei#aqi(Ydi9 zud|At?T?;bU&{4Rmf8O3IrXG_+h{0Q5MvbK7Bj$&Dw3V!rJ`$4yGGB#~u2HI~Z zK#sF1-t))F0SMMZKZ>fzj;mw{D1Rf)i$+aW$=4!$_eCK|t``~(t{I_ifrHOI1P4^aWIKF$hwgeS<`MH454pELw0|ls7Pafz zK1UZCSGI8j;LflGap#(bb93z?YQ~VwSWFN8A8*jatS=J;<2^-SapJ zICALRMz(Q)^29_wjJ(oB8&G|qjbbJq2T|-7JL9=!$a8(DD%S9cq#9BHI!P8zwtI;7 zJU)uAce@XQZPs5W>@Tz9% zms2f?hnWxs0RVmeMLh+pL2!n?S(3=0cPF84GRZG-h5XTS$}sM1g*pc^JBTgqMe|5fEPw^ zr&NXH5YwBZL?@A7yN`}dh8Fq`mFd>089o^q_b0mg+jo>DZeT0`^fsu}~H; zdctD@V?waQ*NoCtb@RTotPIrx=bGu7X4rU2-t7;N%E5tn4qV8TWpK`2BN;k;aXpza zl7U-XJNP*F=M)~a+;OYiHZ*IR2f4l&miRCsOUO{rnB_O~4lfK}t$w43=W5UkR0eMg zL`&Gj#>1tjffc5VCS@cVxI%(Q%S(X96v83D6%uLYjDnHHv zu+i2`Bz=8vZ{WNeSo+F{4Nc>8iJXWAHa1L+<-x}92KoDdXgz%c4DHf4yKog9NR(+T z2GEt7^#Dbm$9DS1vHeR&0P7t4KHZ0I=ukTd-TwOZOG_icQL%86F!vBVL_oMP5%5?^ zV~ae7QN6r~U>Z>;=Z}z?_7F1VZP08OyQLjQVPhW)j6zZBl;`T?t|L6vxW~c7!B<1! z@7$E?3p(8Fc|oG4mN6ls(yqBMg=*kt6&)3Vo4;4-6D*t5wOv@VoIrR9duj=j@*&;w zoYZf|k>T7QgyA?WK4f0965DlHeycI3Vrts;qUgjPwQfH)r?8-ye14#OtU_dZ$3UPv ziITA~f<-3sm=Yy3MjFkd?oE8BoQESW>tUy#e7Sml<5kTnVG(%XNe0}M_ zHmf$l4LO_7lkz;?A=h|RzmrR48vg~FP(sg7QLbOF;i_L|b!|}x_&i-Mbmnl;_$?f{zaQ<>5_P%m;gTJU5{nX=!n4@rfO~uPNd%vH z7V-WkCe3!p@%F;_C$8Ja7)1xBgTEX>8JBkx4>%MZu;bfLbPQF0S3PG2si~tE`GzV5 z?0;FLo)A91b}cogsvh2}wX`*kZ9SKH@hruuK17L5(X7D%vG3S5U=#W$V|JlfpvDTW z&hTN9Up)2mbD*XM0%uY>qUO;#pF96@97YOs)MbmRTQ*}xYGm&gJL=t0N#o>;%v$-Y z- zSUmifN7mchyL0JzGram&jaez+-@f>#0X$l14u5a>NzS=RtK0HXy2o+Ef>(1A02P36 zMwtNe1p@s{^OlQtL?))}J+-8-T1y_Hr1vXS4owV0$Ls6T;JCf_);BN!imPgEmDexH z`1AkcoT-#61ch>z`B~DfG(_g`B^jNM^U7~j^>e)2m_auI1tgl5xh$abk z5!d>`znPqz#3e>sRrtIK1a4!LYD;X2l_QLky@+#j(O{yN;|OMaUSz@!mAC2u9@b%7 zL?pArgf7e-8&|^*>=9khA>LIRhODA7ww|cpRx8 zZXu0riK^W4kVOj^4&tf? zWY_R0i>Gk!ta`k``0vzndkG%Gop0ccFZLJ1SL4U?>S2_gnFZXU6z)WKtVzR05@uFZ z_(auFyhRWL;w*u{Vrh*T5o<~R-s64)=lw?yZ;#c{0d5KG&X=Y_(E5g54AkctzYZTO zd9Z*#5VpABG@Km+|wzHv06gmcSM{ib&i0^Af{P0G%IB`5f65TZtyPsZc-c& zx9;8Q=jemS=)CIOK+>KP_2Qjkb=DBSs=OMdLSzCgFF-PtI=;*CO?o#1Pw;hvNVV?p zsKe5hx!iI=+tzKP9+I2O3aWPS-c{#?N0ynTmcoGs~UhMgN95-_I&j^cA}w`pU2vfU_eF zkwp4@zXAJB?v^`F5cv%|b?7TGS}_c7Di1LMyWzk-E1K^v9N8l&740jGUQ1C$b;wP8@T5{(m#dJ8jjH&2+hDHF>YA+VuyP-`eTX>Omd^}q3@P^LmxWIDGN+gLA`wK}r=$Fb zBQ9+6uiI(|&qQn8B8>2*Qj^jCP~rk#9M zTJ`b%H7JWsUHLE*a2 z9PB*Uc%4#7oC!|JBt^9}c6y4veCM3MGJ5~~d5(vV@8sx+fDm_7J#Ev!Vo5EEYALS{ ziWGf){eQv{AZz+(*Ay0R2N1Nz_jiuhM+Q`$ZStu!{(l#P7j~}t#eSy0-+}3pqC$y%9g&N;g^r(n9R00<6_BO z&QzV$03TDE=o@V+SM4EKxV$iX!$Q2&{P|<9Hh*Pnc*HJ<>*!UoEB?b@ieqngj}b@%_lRNzeN60 zHcv7de;dHLm>w4FiS9~;-txU4tr5el%Wm|C5pKkZ{yTiGfcq9($$aRLrRVzT8N8oA zzh>y9fnlTJuo-GQb;$9H)9YJHsojwDVaRo2&3oeNlUvWSl`ifYQ}kK(Yck%ini!K% z+FeY3QVwn+j(zuEfG$i>MDhVJKB&I)5I9Ve+6EW5na_a}&?^zlru}extMt4ZX zF@r_9%3A99cF_k4Z>XyaVf_MN|CjD-u<8tr>&r|2b)j!vSF!?ZD4O(ik@BEs0ZV}D zlaGJRi)zxmu%hyZytkgP?lqIm?!Vlq#JF{Qj38)C#r+0E^ED(6ebG;+WNFUYyKD?9 z;O-Q|%!>*{q~}IQ542xfQXSfHnQTvDkf!jW6ZC@*x<1{i9kWBkJ)Obo`f(><^$g)? zsUZ+(x4}aOizAdzVNN$%BD1p}XEa!y3n348!Cf*H>HJm8LH7OdHP0kEzc|8#52uYZ z1&|C0yokI`=?gwyryko44X5y%`)2i`KrMjBq*}}_Fxz9POQ`zWe=L_Fw$dNYAwis? z14#q0(T2m19FDs_t0;Q*zYLF&hjlt12x|?9NyJ~6<(OYPi+0xTG>mIl&(kgnM2RZ+ zN8<&09l44;v!rNV`NTCkSvzB2C#Ms>p@Z=epc0$tB&5OhFRKP?`P~=Wou;l@GPi^m z@p`C_07yR{Dqz6qBrzKJ1$CI?f`Dbcs|zVe(b^P^{%h_I>Ss5%n%M7AR{zzncr4YD z2_I1hijER)d<#s1I2qcQZ=8|?Q30TR5N6y-BHt&%7Rr&?5oOfEl6iIFf^{wh?z>^= z@mCWT@*Kgz$~Ebn2~ju4kb->Q)hh=zp^Jt}A4iDHi_92I$FxY@ZOtWtsOaARuLWRf zJY;AeSC}h3xr6y4@7J>*F15KCMG#sth_z5FV4(`qRDW_jC88Z4L0hEnb(9I(Fc7d< ztGD~LWsdpH0_*M=HoNRPT)T~&3Qe)6{ zAFi-0?FsB#F4Z1UaKCAvP2z8qNo9bgEeNRI3u&@o6;)emWldf0)Fxu?nWL*wm{+7M zpxr&qZrt5LmA##)bx~3%LM{kLY`>WY6j=4U|FSBA`)91>opx$O5oS|gl z!U$tzz#)=Sev2T`q~+#}@X3QAOjD)g-Al0c$rPvy6g=-PcICzR41Tc>LcV*bIg|oO z8=NPuA~fTkwKQPj3Gk|{i>Q_9+cdtLzC@eBPG(C@TC)^LT?34r^UH5Mu44WF+9vm3 zpuN^&NYjXP&%+edO0FfNoJ@CtXjkhZ*+&2JZ1&l|S?bZCFjZ0{IZ6E*UbTAckaw6< zt0eVGb%>yptMOz~DPV$uH*-vWZ~&qoG9~a_+$J3DvXZhuT$-hD(co$kra9jV?Zi;(o>7)iKET`PiAb zab_?}cx&|BsAvd4UlG7Uh9)ftS_OfF;)u(FYexW*SPlY>AJ8tVcx^j3B#3T6t@0ep zVl}*jlvRp~L*Wf-Hn~*Xev#$)kFbc?8>Wm6m6FR0D|WgbQQslV&!0ZA5oOH$4dr-S zQXrMy{v&83)M3??;BKlG`%u7J?m3;j6Gpn$$n=OMs>@#S4mS=TMryKIk?AYG4oa*wnEH5+|#JOM(+H;sOyp+8>Y zy}$-KrUd^xjvugl=U1~`UyyB_kVVJJMfWyoo7*T>|p`Ui%*Q zR}?=gbLQ{dhn^F?{dfYMUr~vIJ(kwFZK|HVmLPlq`UTHA_iYR*`6sKj*d5HLbY@I; zhp}=Lhu@4Q0ZV|y2O9vBP+UYLt{6v^yDd&2q0}mnk$M245fL`Nk|ToS7p}*PxJ+U5 z%abRV%7Kb!{Xt~bw4Rl}eeLz`RL9Mmp40KSk?}aiVs%B!6IQsAFZ1k*?q0snQRkHG z=VuOTQh!Zxk_OlINFY>?ye7V*r_LoKrfHU@l1v^HU2Q+F7Tk-F)2C}v_*@hm#-uoQ zCQ4TAZ&*X^Yfrv~K7+W|m}w5fjU{Y8t!5tZ2|g`l=u)vL%hwv=8YWHn;>Iyq>AuVJ zvg+K4GnAXVHhIL=lU-U$uI#wnd+lC`woOD|_17Bm9KBYxo{K6!@w!V*Th9GZ7rE!^ zI7?rRtY@kjzZ+=W6u*0Eg7v$~%7oFmr=kF@jDi`Krk}Y$s%+T_$!5%} zf$n2U=uiGLSSu|d1Av!mKW22?)g-mNT}&$b+fb;}(9&@ojc3$tT@*FOb@oh>@W-?l zXE-9dvS8Vk%;QaJ6-9riuSnf>WLfSdP{;0l6aAmn{lw^RYMY$C)oN0Gfk)9o!FnG$!5Kg*AcS5G;C9rHj$2h% zP}Gm#MnK*Odj}!CpVPi#BkADl#GKXf2s*~8X(ceGKV@Q=q$KDK-c~%>X>X~kd$AI^ zpk3M<6c9nG%11csLMUBxx7tW|=RoUaSwGTo*?mqaw-!PfY~c#kSpv2q0Ka9EoLG=- zNjz-EzX>AL;zgmqFI~0||9~b|&bGsAjqMkCBVih0RRXp#Nvy1J?os@6i2T8ztISlh+QClW1HIy>T9a zO>s?&=Hg(kzjjknp4bzLdM*f}5{()04n2yVL82@%mU|dPpDlb&8D=33M->N}UQ=Lj z0S+p~NfI!Ii1Q!i^3TeNP+nT7#5qc~hpTKMJM@7V!Fwn2#~~z0h}C~j=$9k+WnqNT zE+#ew=Dm8@zrO(PgHE5p_UG*;7{L}NAoBtY0fqBeF!7?2Aw7S!EFl&Pz57G{*7=V- zP7OoJe6V8-E!{9*=P8yT{nO0(K=evXiX*R*&wmwlEEuWtADuz<%VP7@3-G!mj# z7Ud1gJPOI+62oIKo<5w>NIc?Qq*XpTNR3jPQDCLFu9k@ov^ZGvg4&+0cVm-pq|52d z(VWx{0!js_x{RMgdm5B$;#X@|W8YgO%jQ4jLR&a_5 zSF9JRVG30g-g^q~`2RB;M9d|l$=6Z# zfZlCy!FESr5(o}NTu*Tl3lro-+|h!7`#i-Hs# zIFV%$e~@F1c>UUdfOS2O!^F{r+uA2Axr7_*-l=J)0SxQqRWasH!-e&=)ttrLvP4Pzkr2 zCzbAATbbM_@x`v8nwW}VgW96X<&asilI(rLu>MX8QHpoNVVm_ANVj`^0o_~`t$v#> ze&JIX)7xC4rVK!xh3~V>*Erj8QQzO4R6Bx5p^8|fw;`?8hX3{4cer608LWikPZ3bT z96_Z6BwLdCTJ7WG04@HPl^h6AknbsKjHT)LH-aDf{3oIy#!Q`Pwz!fixd_Vnb>-)R zFl_{?a2~TU{iGnxc?C`+_%JXlejidl?1jF%f{LsX#BVgh#>5XPnSsKYpn(0c$mlOF|o6==nGi?Xe}^2P}dFk?;M) z9ph9Qy!VSy8hf0ko@)&!g3FmO-~H|VijhjyASxoRQnBV}K4SCLdQzpPOWN!NS}dkJ zpJhA_ogMG2?RAz&^Tql-p5NKM**Ng&F3rNS$rRdIA)1es?2COw-4E?JCP60+bk)2R zy{Q3QtNrCH3)lRVa`JzlPw*uJ-0PE{=*#!dK04H0;7+fX>dZ}sI_bP!5 z{*yR*DnHVUyuqO4gSCKHOrGW`8hs=k4kDe7lMptMcQJ>f70+5Rxx7oo7V zR8w}(mEx|(3`yx)V5nxRujX)7*Xw5TdrQjM%aYK9E!S(;2V%Y=-s z3;NR8MST1j;tCwfpEG#`_kfRR+@{9Nufd-cvj)m>DmzJFq1eUOITgo6#)vR}#>c?$ zmQznB#Su2x$_dlEarFSB=sz|A; zt4LHv9fulzvlZK!${ti*^-Y`RFOqWVh*_9JF;+Y8*)W1#I&C{5v%+4^($uJ7Ik*Ni z?v6cRP*l@ylsjZkjh?53*>Er%ysh`S5Ec_>Zdr<$QlGOQW_A;bT$w5^0HZ|o*8vubm6kpw}X)rp;bLZm}zJ5MOqpxDj?+Jk!B0zBu~x*RdHWtn4uG{|fdxh-VJo?C}8XEiPAJNiYR-CkK5^ z{P*Lm>F}wEuS|SY2G`NC=%}FAi)yq!4@U!*m~0j>MR!K%W3zn?=}*Eq$2U8-Z{lS6 zbj8DQ^n1*d>zg9Q+uwETCKP}?=Bv{p-nH6X&BLH41yUvE_Pz) z&VbPX*lWN%-1x`|bp~E~UTmsdOa)f&Ae{JCr`&yRyprkQ2^EU9^=vY-7pkTUX^xzV zY9~rTq9xS|dXdAxkc|vT;Bkd?cyszQICC!=p9IU{acF zyUy;-ZmWzH4|OYqMVF=Axmc#mwp92Cvspss1KcrPc-y5NasltA6;hAyH`{P1M)wPUldP?f@E7VF(vsx2T`4#`20m*^~M{>hR zX~8vm{Mx>aGEjbfaolIO;_J1N_1{oyk3(XZh46|D1650UI_8&-=H7wlnwwRF6_mKJ zWl)%dfhGS&+5bBp58cP@>w@LwEY<`2rf#SJUMPOK?;5B6v6W_ z9x~BPs@jm!6@48_0SrOnd%2D}ea`3Tw#jwO6m*$|ui#_hiPKQllKrt1Kt>QXm4+x; z07HRnIm1xSb1mtgo@znf02`(vxB-zvMn~#}RcnY!TLbqs-Ugo^t%u)_ey%TYYvL9x zo*@U#sefPxQkVn<&8%x^Ta05I;_eCBh_FkR_RD8VG)hGgL5iak%`E+nMPFS?x+?Ii zEgJ$hy)LcMT7pp9EAGCAY^fZeMnwctnW!6)D>s)w!ZkDt8<1uYiRFuZgX-7v# z`VL{(qVBg_A=T#4PTxcT|2j{st_gEI-@E5G-sCsqGuOZ+vkKjC;V!z=r2I|TLE4CG zr?5j#tgH#ep6>c@F&loT;6&e>b)1%$OqysBGz z%*aNW-KAuwJ*a+C92HR{J3%y7>9cGj}9wv;7a^b~Vz9~5>vh)aL`~~!j-xj`m|U}QDAwmrR-tbh+w(Xg5A#sUU?=85?|I*1xd(-YHSX+77YNfv z%blC1vP!y$7Tr2OT1`&58;cz;%nXW=vmj)%6cZD3^B`HvQxq58mr_8Bf=+S|Jr+>9 zFR4mDdRwJBmQHiOnBw{2spiz=rWj)pLEWjLG;twa7ZQLyUI%3C zHZ?DAeJ@+^cg2JC49L@XzU!ZR8k!6@)jsG6Mr{wWd{9{tmEN^oT*pj)cccDb@10Q* zkw)<2EZar12(=0yS~&yTl42xN?r&^04-Y$JG9$3rr6zkQu9SKGT62KeGzaY&Cu6fF zAK}!jGl;S-5k3`!xN_*m-#8IY>?-oAE^8}?lYFTcxB5IbEk9>3o=FgQN&dfTcUHsj5Y099aPtJA!aod`n?)?_pPZUBWi(`TisU4>_?KAUG z{C(NX_I+e%sAkZ8$h9@Ch>Plx*nisVr%gi_pPw2n@d!%I3;&BUqCnBmENg+c z{h`;ZEqjc7`Y1dH)=i^=!b|@T9H)|0=!|_V&Yi-8b@2tH-XN0+P;xz1e9Gi$^rzrp zo7V`^e{Vn?Dc_LDxjGvW>H)GSMMXsqo*OkA9-HebnVXTl_0D}NiRb3kR}4P!A+2Ev zqRho%(9|azOs{Z^u8N?Xu8w+{_1GL$;l7j|IW0x zp#>IWJ62PF9zOEoK-w;a9wEL2nsaMW0+t9~gMifG!57V;0)!qYcxxXgNk6=hTBDIn zGW423XPvm@sT3Qe@U1%!7BrKNGJsE|5$rh;2RhE-UhA||ZIre<#VJzAnG+7= zW0s-#a>${dV4uW?@H0FM_aZySH7AI~h`%FnaOC|h-@qShOeKyC7{@mHCHwme?7F39 z|5604r%ex!SgItJ0H;jj>?(9MM=xbB+$VWs6Ji)>f^{cNGy!zPs8l8t>)a8A>HR zmqhvLTFOH8I;9A|b&vYkG?wR2;}(YaXtJO&8PEIPD8u}*Q3*A3d zw@6a^(yK9I=rXzEti9o?A|6HOaxC>xQ1;iTr?{q@YlZwnd)&g79Vd|2Q`$jqQ9FCO z9f3Fs-u(rC&52S7DFuC~d^V>jMeKbJL|!4lClfd4xGuMtqV}nW*CvsXZSK1~x9 zcUmxYADc0Z&@;J5a?19XM$bmHsY$M+1@vWNEUu#e@s!DyTrrC!H%j@){q2OR z({$(SDH2yse!}pt-#;Zj2A`Ll*KnrL_2HlOslVrIE&qNyKCWs1ws!f*ck72a zov65FumPM}th2tNDX?wn1HOoe2%uI{QY*`5_iwf{eb>Qs0YOe9oIdQkKUwoqG}YW? zz)DSaeSOVC8@&OdD@Pttw(J!8AI9<*s7njO2Fpd~V_T8TsLVWT0(xfdf8hRfJ#tPF zVi$q+k4YNXjL8|y|3TVJg))2oaf{<9Y+1Iy4$#`1;)g*#AQgR!mk<|!G+t&i7dxOE zC9h}8Bbpy788Dk0`qCxF!PJ?TW__aiaZ(#uhsh}@f?sBGm+zNU;-I7M*yW!2DQH0Nv(0nLYq2uptjAaNGVJN(zr~ zpkFO$s;u8RT9N<0^h}4%uzw7l^OpLvv%?CsC8ocYw`RB2E=?->{t&v3P?&&&5WIJg zpm)H*6c*b2+fpQ*CH;m~z}C<|=#^bBxgYHzLMYT`g4!3a?RdB@U8d#6$gmBUq4)|3oGz?dK8l=X#3_U^m#`T_Zx!WDa0Lz zd(dmiuQv`8$?za!yX{o) zNIY5%AiBX6i-95PTldMx){k}})?FcRb~}k8$=21;E=)_y3(WhoKZA)k7rT>&Mj;23 z#(om$8(=aM+B+r*1-LCAC%vlBFf)9TOuCaJ42+^PR4&#_EZc#_~%YqZJHRdsTRMV%`?|<*V1lKi^|lGj*Ofg zn{f(-?7C8duD0KS?8zw$jMrd$KlReTrbvdoG`nCRqgk?py7UwZA9|mqF7ljhF?gOd+>o_M@*u|}Cx{`d&Gu1$^WnhiSsC<_!MJe83|IDk(|p^tHK6*BAuTLQr?4U&3u zju0>JDgpu_hLWt*J9<}?D#IvC`Vf%9I4?E|Dd;yN`q$n0_+%WnNfMJRFE9VO{%re% ze(7JJ|($BkD#`Pi|LcA=oJE4oW7j zVIt7$^VbF@=eMFjF$M;mu>U({z*n-9pB|`hfZXcI5 zpR@ymvj`E!68=f-ff$U8IuL;XF*7ZV*}E^}bF<-q|JPnMb|JGFr#l}b+Py?}32w0) zi2+kjiZ6dCQ1oSUgxq3qW#m{3wv9rtNU*AH12vDgp`-(!KNfYH#9mMS4VHn|p%@w5 zT>?)fXb&-|s$_6?PAVcYxLW`7utG-JDUmu% zl;3f)&OVkKI`^wJDs#I65rGe=!G;Vv9W}GvyYF@Zk!v6b)cT{&^M{t^>;6*2)|Ps;s?fF;0cukIx&crY8w3xGXf57vI;#D zBx>GdRgaDxvrL2+b>l9s7swb!-Tl*)+Dc`W!FjMV90& z=BU~k^$<&|5zQ6dOV3}CxRt&=^4%z{&gC z7CyDa9Cl)L?H`el1Wx?b9f# z{M*vn^2BdylWadvxSxc~V5tk&bqbJY=6)wnPDFdp)yz@W*9+{di+`zqwL9Y+tvzK? zdtIWS{7`8bN4G*XNY8EvoRNCz?B_#aQ^PqEr!t&zV5HY{GJg5FIpnmx^P87U)rYTd zUTe(`!hC=EjCsFM`Szv}djF6J-Pzr>RxO-N8n*a%E>eiNZa&O7cz}Jg{x3!CbfZ_b z#|I<~{p)LT_|S95ccN#h;S3ZJTH%-@+_1JHo(k^@f8R#bNb5biCal7w7|-ls4|2`J{+)*YH?2Kid~sLho7z$Y1qCttDIZJt zb0Zw@Bxa&L))Mq)2XeN3?{D&#Amj-N8cQcqgBS6iS}u2eg6h+dc$Y)+%ksU)(ICg-YjO9DB*Jy zUTD^{tFdbt83(bj_>!nQ5I=1!!Yh6c-Lvo!PHB zF;UT_#qV8sn5zrq_oI)0UT#9uxb;$D!1Obz;-Id1WpI!2)p zd%V$BC?RZM{+w?ZW_RV;JoG5ZC@VSK;$0Jk#^*( zQK~MD#TuV_`RGY$(uz!ax0X!Wuu|k-BWFTfg~qr-0$DkM^a^bU(b3T$6YW}qD!_9S zgSq!LF-5~`K;}ONCQf05OOYel$(^+nu52e{M6AE3*Np;Y0r##ua0I|7 z9OqL79V%5w%^{oX@))y1d!kwBF_Fm*iZi$za5I`UQ-ZYT6mjXJ+fE)HNtq@c^$oOo z3|!|ymUkatiJ}eQahS}m31^PFEWy2!cw>l9P@}LEzvhVS&l7Ne3j~SobbEfyE2S#m zPU{g?k6Wv2R##Sfz!^GGEM4hJj=;(ScFE2CVZ*&vwg3TNp95z5p`g&6; z*cKMPS8#Bb65zMkzlUZoks4e1O55G?22 zj@wM_uiE~Rzf1VPY0(x*AEVUTNa+Wg;t|5>ac(ajd+arsOt&6weDy+T_z}sEJ6O22 znJC8Eu4sk*|1YftQu^PNs16SgbNNujZqtg%WRihq(((BC_zy!8hJSc)R~AMjOQcep zGl+y8LAqIksLokaE%N(4L@7jw2*T6TQ_Sb{7!HT=;lqa%w$GnG=dzRY^Yb`4Imsx4 zh#!c+9dgVMB|=y+n9PZ+!Uo0BD+U_JW#hscLKFy`9Ra|Qqp;A`5v*$vjMt*fn`T03(WAK%1%nI*@7v_ND!O;StpoG-8P&DR)eDFTj z<1%hv8?oCLmkfj->UPv#SUkO2t>WtHD(jP0Omu>+w8(sLPy{^GelfDHWjPykhbLWp z1SL3o!?egda?7=j>}x2Ee=s zZjpJ=Bo@2lfSmcm6A-8EcAJ4T4uzT-&tslkzg#ZUn6vH{N5zKR>-9SMNOr^+kfX(7 zk-Ehu8;6I7admYSi^XDZEvvh#p|_Wv7{!5p^ah}>I7Mf*-cg79aER!e5fvi>@Uk98 zf^eLaXwU_pySux~cOcJvGZ%U>55@zl9QlxrXH8vd3g0WPUIdLsqY)_DZH=A?fvc2{*Jd zG~fgWDbS8*wG_bz%QkS3HJgKfC~OUG?(Xg~+jEeBL!|+xA_xRa><0_4A|jg~Ft`rr zFgE6a`Bh<95Q>Ohofx>(i{dfr&=(qb*$nUE-Hwi_1v=RAJ=F-Hm@WB&4$#}Oh|Xa2 zn5%2YzJIw~#>K@&()afEHVyfBJkD&_aHAb$MP2IQJ%%|fkH|c-fh=3Tkz;~Dg010j zm>U~($uLbJ7{=f)8zzxt~%1zInFyPLLe)2Xhzg?Ca?toV%4T3XGw-7e9q7G znEu!In>mcZbvB~#u5oc5<~q7G(<_~;gKWVuJjY{e@v>&t^>5}?MH?zQPKGi|T0RW}+0oe$IKoCgs$%og3e2j0+E}?XLQ~gbu}GeH0}tla z%5-e-yMkh)Ce>+qTvfiA1KY~=db{l#4MA52Q|*j5Z!j9bKDu7`Pm>iHtTPZhFK9@X z7_qBaqO)X?z@h#AZmUf)>(y$t*X3FRjxL*O{xT>39l3Aur4`^+CkeeQpB__--gYv6 zR}HApBd+iFcW`VCrn=;-I`Zl;J=W@nkY%Hi9xGWT&o$cF3W$(jj{g7^dl@#~*W+0L O0000/dev/null ## build theneeded dependencies -embuilder build sdl2-mt harfbuzz-mt freetype zlib sdl2_ttf mpg123 sdl2_mixer_mp3 libpng-mt libjpeg "sdl2_image:formats=png,jpg,svg" icu-mt +embuilder build sdl2-mt harfbuzz-mt freetype zlib sdl2_ttf mpg123 sdl2_mixer_mp3 libpng-mt "sdl2_image:formats=png,svg" icu-mt export EMSCRIPTEN_SYS_ROOT="$EMSCRIPTEN_ROOT/upstream/emscripten/cache/sysroot" @@ -38,7 +38,7 @@ export ENDIANESS="little" export ROMFS="platforms/romfs" -export PACKAGE_FLAGS="'--use-port=sdl2', '--use-port=harfbuzz', '--use-port=freetype', '--use-port=zlib', '--use-port=sdl2_ttf', '--use-port=mpg123', '--use-port=sdl2_mixer', '-sSDL2_MIXER_FORMATS=[\"mp3\"]','--use-port=libpng', '--use-port=libjpeg', '--use-port=sdl2_image','-sSDL2_IMAGE_FORMATS=[\"png\",\"jpg\",\"svg\"]', '--use-port=icu'" +export PACKAGE_FLAGS="'--use-port=sdl2', '--use-port=harfbuzz', '--use-port=freetype', '--use-port=zlib', '--use-port=sdl2_ttf', '--use-port=mpg123', '--use-port=sdl2_mixer', '-sSDL2_MIXER_FORMATS=[\"mp3\"]','--use-port=libpng', '--use-port=sdl2_image','-sSDL2_IMAGE_FORMATS=[\"png\",\"svg\"]', '--use-port=icu'" export COMMON_FLAGS="'-fexceptions', '-pthread', '-sEXCEPTION_CATCHING_ALLOWED=[..]', $PACKAGE_FLAGS" diff --git a/src/scenes/about_page/about_page.hpp b/src/scenes/about_page/about_page.hpp index c18797ecd..e937bed00 100644 --- a/src/scenes/about_page/about_page.hpp +++ b/src/scenes/about_page/about_page.hpp @@ -15,7 +15,7 @@ namespace scenes { static constexpr std::initializer_list> authors{ - { "mgerhold", "https://github.com/mgerhold", "mgerhold.jpg" }, + { "mgerhold", "https://github.com/mgerhold", "mgerhold.png" }, { "Totto16", "https://github.com/Totto16", "Totto16.png" } }; diff --git a/tools/dependencies/meson.build b/tools/dependencies/meson.build index 9e89dfdba..ceb8aa874 100644 --- a/tools/dependencies/meson.build +++ b/tools/dependencies/meson.build @@ -53,7 +53,7 @@ if meson.is_cross_build() ['SDL2_ttf'], ['mpg123'], ['SDL2_mixer_mp3', 'SDL2_mixer'], - ['SDL2_image_jpg-png-svg', 'SDL2_image'], + ['SDL2_image_png-svg', 'SDL2_image'], ['icu_common-mt', 'icu-uc'], ] foreach native_dependency_tuple : map_native_dependencies @@ -118,7 +118,6 @@ if meson.is_cross_build() 'z', 'mpg123', 'png-mt', - 'jpeg', 'fetch-mt', ] From 007faa30f66975fdfd0331d29d51cbffef7623cc Mon Sep 17 00:00:00 2001 From: Totto16 Date: Sun, 17 Nov 2024 23:54:38 +0100 Subject: [PATCH 24/37] fix: patch the emscripten ports, so that the program compile it had an issue with the thread, see the listed github issues, in the section where local patches are applied --- platforms/build-web.sh | 27 +++++- platforms/emscripten/sdl2_image_port.diff | 57 ++++++++++++ platforms/emscripten/sdl2_mixer_port.diff | 100 ++++++++++++++++++++++ tools/dependencies/meson.build | 2 +- 4 files changed, 181 insertions(+), 5 deletions(-) create mode 100644 platforms/emscripten/sdl2_image_port.diff create mode 100644 platforms/emscripten/sdl2_mixer_port.diff diff --git a/platforms/build-web.sh b/platforms/build-web.sh index f47c45487..5eeaae93b 100755 --- a/platforms/build-web.sh +++ b/platforms/build-web.sh @@ -15,13 +15,32 @@ fi "$EMSCRIPTEN_ROOT/emsdk" install latest "$EMSCRIPTEN_ROOT/emsdk" activate latest +EMSCRIPTEN_UPSTREAM_ROOT="$EMSCRIPTEN_ROOT/upstream/emscripten" + +EMSCRIPTEN_PACTH_FILE="$EMSCRIPTEN_UPSTREAM_ROOT/.patched_manually.meta" + +PATCH_DIR="platforms/emscripten" + +if ! [ -e "$EMSCRIPTEN_PACTH_FILE" ]; then + ##TODO: upstream those patches + # see: https://github.com/emscripten-core/emscripten/pull/18379/commits + # and: https://github.com/emscripten-core/emscripten/pull/18379 + + git apply --unsafe-paths -p1 --directory="$EMSCRIPTEN_UPSTREAM_ROOT" "$PATCH_DIR/sdl2_image_port.diff" + git apply --unsafe-paths -p1 --directory="$EMSCRIPTEN_UPSTREAM_ROOT" "$PATCH_DIR/sdl2_mixer_port.diff" + + touch "$EMSCRIPTEN_PACTH_FILE" +fi + +# git apply path + # shellcheck disable=SC1091 EMSDK_QUIET=1 source "$EMSCRIPTEN_ROOT/emsdk_env.sh" >/dev/null ## build theneeded dependencies -embuilder build sdl2-mt harfbuzz-mt freetype zlib sdl2_ttf mpg123 sdl2_mixer_mp3 libpng-mt "sdl2_image:formats=png,svg" icu-mt +embuilder build sdl2-mt harfbuzz-mt freetype zlib sdl2_ttf mpg123 "sdl2_mixer:formats=mp3" libpng-mt "sdl2_image:formats=png,svg:mt=1" icu-mt -export EMSCRIPTEN_SYS_ROOT="$EMSCRIPTEN_ROOT/upstream/emscripten/cache/sysroot" +export EMSCRIPTEN_SYS_ROOT="$EMSCRIPTEN_UPSTREAM_ROOT/cache/sysroot" export BUILD_DIR="build-web" @@ -38,9 +57,9 @@ export ENDIANESS="little" export ROMFS="platforms/romfs" -export PACKAGE_FLAGS="'--use-port=sdl2', '--use-port=harfbuzz', '--use-port=freetype', '--use-port=zlib', '--use-port=sdl2_ttf', '--use-port=mpg123', '--use-port=sdl2_mixer', '-sSDL2_MIXER_FORMATS=[\"mp3\"]','--use-port=libpng', '--use-port=sdl2_image','-sSDL2_IMAGE_FORMATS=[\"png\",\"svg\"]', '--use-port=icu'" +export PACKAGE_FLAGS="'--use-port=sdl2-mt', '--use-port=harfbuzz-mt', '--use-port=freetype', '--use-port=zlib', '--use-port=sdl2_ttf', '--use-port=mpg123', '--use-port=sdl2_mixer_mp3', '-sSDL2_MIXER_FORMATS=[\"mp3\"]','--use-port=libpng-mt', '--use-port=sdl2_image','-sSDL2_IMAGE_FORMATS=[\"png\",\"svg\"]', '--use-port=icu-mt'" -export COMMON_FLAGS="'-fexceptions', '-pthread', '-sEXCEPTION_CATCHING_ALLOWED=[..]', $PACKAGE_FLAGS" +export COMMON_FLAGS="'-fexceptions', '-pthread', '-sUSE_PTHREADS=1', '-sPTHREADS=1','-sEXCEPTION_CATCHING_ALLOWED=[..]', $PACKAGE_FLAGS" # TODO see if ALLOW_MEMORY_GROWTH is needed, but if we load ttf's and music it likely is and we don't have to debug OOm crahses, that aren't handled by some thrid party library, which is painful export LINK_FLAGS="$COMMON_FLAGS, '-sEXPORT_ALL=1', '-sUSE_WEBGPU=1', '-sWASM=1', '-sALLOW_MEMORY_GROWTH=1', '-sASSERTIONS=1','-sERROR_ON_UNDEFINED_SYMBOLS=1', '-sFETCH=1'" diff --git a/platforms/emscripten/sdl2_image_port.diff b/platforms/emscripten/sdl2_image_port.diff new file mode 100644 index 000000000..402868e7a --- /dev/null +++ b/platforms/emscripten/sdl2_image_port.diff @@ -0,0 +1,57 @@ +diff --git a/tools/ports/sdl2_image.py b/tools/ports/sdl2_image.py +index c72ef576..0c12feba 100644 +--- a/tools/ports/sdl2_image.py ++++ b/tools/ports/sdl2_image.py +@@ -16,15 +16,17 @@ variants = { + } + + OPTIONS = { +- 'formats': 'A comma separated list of formats (ex: --use-port=sdl2_image:formats=png,jpg)' ++ 'formats': 'A comma separated list of formats (ex: --use-port=sdl2_image:formats=png,jpg)', ++ 'mt': 'use pthread' + } + + SUPPORTED_FORMATS = {'avif', 'bmp', 'gif', 'jpg', 'jxl', 'lbm', 'pcx', 'png', + 'pnm', 'qoi', 'svg', 'tga', 'tif', 'webp', 'xcf', 'xpm', 'xv'} + + # user options (from --use-port) +-opts: Dict[str, Set] = { +- 'formats': set() ++opts = { ++ 'formats': set(), ++ 'mt': 0 + } + + +@@ -42,7 +44,7 @@ def get_lib_name(settings): + libname = 'libSDL2_image' + if formats != '': + libname += '_' + formats +- return libname + '.a' ++ return libname + ('-mt' if opts['mt'] else '') + '.a' + + + def get(ports, settings, shared): +@@ -70,6 +72,8 @@ def get(ports, settings, shared): + + if 'jpg' in formats: + defs += ['-sUSE_LIBJPEG'] ++ if opts['mt']: ++ defs += ['-pthread'] + + ports.build_port(src_dir, final, 'sdl2_image', flags=defs, srcs=srcs) + +@@ -99,7 +103,12 @@ def handle_options(options, error_handler): + error_handler(f'{format} is not a supported format') + else: + opts['formats'].add(format) +- ++ ++ mt = options['mt'] ++ if mt not in ["1","0"]: ++ error_handler(f'{mt} has to be either 0 or 1') ++ else: ++ opts['mt'] = int(mt) + + def show(): + return 'sdl2_image (-sUSE_SDL_IMAGE=2 or --use-port=sdl2_image; zlib license)' diff --git a/platforms/emscripten/sdl2_mixer_port.diff b/platforms/emscripten/sdl2_mixer_port.diff new file mode 100644 index 000000000..f2d7efd01 --- /dev/null +++ b/platforms/emscripten/sdl2_mixer_port.diff @@ -0,0 +1,100 @@ +diff --git a/tools/ports/sdl2_mixer.py b/tools/ports/sdl2_mixer.py +index f77f906d..417b2a79 100644 +--- a/tools/ports/sdl2_mixer.py ++++ b/tools/ports/sdl2_mixer.py +@@ -14,14 +14,27 @@ variants = { + 'sdl2_mixer_none': {'SDL2_MIXER_FORMATS': []}, + } + ++OPTIONS = { ++ 'formats': 'A comma separated list of formats (ex: --use-port=sdl2_mixer:formats=mp3)' ++} ++ ++SUPPORTED_FORMATS = {'mp3', 'ogg', 'mod', 'mid'} ++ ++# user options (from --use-port) ++opts = { ++ 'formats': set(), ++} + + def needed(settings): + return settings.USE_SDL_MIXER == 2 + ++def get_formats(settings): ++ return set(settings.SDL2_MIXER_FORMATS).union(opts['formats']) ++ ++ + + def get_lib_name(settings): +- settings.SDL2_MIXER_FORMATS.sort() +- formats = '-'.join(settings.SDL2_MIXER_FORMATS) ++ formats = '-'.join(sorted(get_formats(settings))) + + libname = 'libSDL2_mixer' + if formats != '': +@@ -44,26 +57,28 @@ def get(ports, settings, shared): + '-O2', + '-DMUSIC_WAV', + ] ++ ++ formats = get_formats(settings) + +- if "ogg" in settings.SDL2_MIXER_FORMATS: ++ if "ogg" in formats: + flags += [ + '-sUSE_VORBIS', + '-DMUSIC_OGG', + ] + +- if "mp3" in settings.SDL2_MIXER_FORMATS: ++ if "mp3" in formats: + flags += [ + '-sUSE_MPG123', + '-DMUSIC_MP3_MPG123', + ] + +- if "mod" in settings.SDL2_MIXER_FORMATS: ++ if "mod" in formats: + flags += [ + '-sUSE_MODPLUG', + '-DMUSIC_MOD_MODPLUG', + ] + +- if "mid" in settings.SDL2_MIXER_FORMATS: ++ if "mid" in formats: + flags += [ + '-DMUSIC_MID_TIMIDITY', + ] +@@ -104,16 +119,29 @@ def clear(ports, settings, shared): + + def process_dependencies(settings): + settings.USE_SDL = 2 +- if "ogg" in settings.SDL2_MIXER_FORMATS: ++ ++ formats = get_formats(settings) ++ ++ if "ogg" in formats: + deps.append('vorbis') + settings.USE_VORBIS = 1 +- if "mp3" in settings.SDL2_MIXER_FORMATS: ++ if "mp3" in formats: + deps.append('mpg123') + settings.USE_MPG123 = 1 +- if "mod" in settings.SDL2_MIXER_FORMATS: ++ if "mod" in formats: + deps.append('libmodplug') + settings.USE_MODPLUG = 1 + ++def handle_options(options, error_handler): ++ formats = options['formats'].split(',') ++ for format in formats: ++ format = format.lower().strip() ++ if format not in SUPPORTED_FORMATS: ++ error_handler(f'{format} is not a supported format') ++ else: ++ opts['formats'].add(format) ++ ++ + + def show(): + return 'sdl2_mixer (-sUSE_SDL_MIXER=2 or --use-port=sdl2_mixer; zlib license)' diff --git a/tools/dependencies/meson.build b/tools/dependencies/meson.build index ceb8aa874..b3827400d 100644 --- a/tools/dependencies/meson.build +++ b/tools/dependencies/meson.build @@ -53,7 +53,7 @@ if meson.is_cross_build() ['SDL2_ttf'], ['mpg123'], ['SDL2_mixer_mp3', 'SDL2_mixer'], - ['SDL2_image_png-svg', 'SDL2_image'], + ['SDL2_image_png-svg-mt', 'SDL2_image'], ['icu_common-mt', 'icu-uc'], ] foreach native_dependency_tuple : map_native_dependencies From b5048f1a9195d80bea0b355a5c2c2697c3993e9b Mon Sep 17 00:00:00 2001 From: Totto16 Date: Mon, 18 Nov 2024 00:13:54 +0100 Subject: [PATCH 25/37] fix: emscripten: fix default settings for sdl_2mixer port --- platforms/build-web.sh | 1 + platforms/emscripten/default_settings.diff | 13 +++++++++++++ 2 files changed, 14 insertions(+) create mode 100644 platforms/emscripten/default_settings.diff diff --git a/platforms/build-web.sh b/platforms/build-web.sh index 5eeaae93b..a22d0b3fc 100755 --- a/platforms/build-web.sh +++ b/platforms/build-web.sh @@ -28,6 +28,7 @@ if ! [ -e "$EMSCRIPTEN_PACTH_FILE" ]; then git apply --unsafe-paths -p1 --directory="$EMSCRIPTEN_UPSTREAM_ROOT" "$PATCH_DIR/sdl2_image_port.diff" git apply --unsafe-paths -p1 --directory="$EMSCRIPTEN_UPSTREAM_ROOT" "$PATCH_DIR/sdl2_mixer_port.diff" + git apply --unsafe-paths -p1 --directory="$EMSCRIPTEN_UPSTREAM_ROOT" "$PATCH_DIR/default_settings.diff" touch "$EMSCRIPTEN_PACTH_FILE" fi diff --git a/platforms/emscripten/default_settings.diff b/platforms/emscripten/default_settings.diff new file mode 100644 index 000000000..5a16b54b3 --- /dev/null +++ b/platforms/emscripten/default_settings.diff @@ -0,0 +1,13 @@ +diff --git a/src/settings.js b/src/settings.js +index 981c44fa..17ca0078 100644 +--- a/src/settings.js ++++ b/src/settings.js +@@ -1624,7 +1624,7 @@ var SDL2_IMAGE_FORMATS = []; + + // Formats to support in SDL2_mixer. Valid values: ogg, mp3, mod, mid + // [link] +-var SDL2_MIXER_FORMATS = ["ogg"]; ++var SDL2_MIXER_FORMATS = []; + + // 1 = use sqlite3 from emscripten-ports + // Alternate syntax: --use-port=sqlite3 From d82db7593b6a8a352c7b0dbd7b2a54a5ea98a600 Mon Sep 17 00:00:00 2001 From: Totto16 Date: Mon, 18 Nov 2024 00:16:17 +0100 Subject: [PATCH 26/37] fix emscripten ,use builtin availbale console print functions --- src/helper/web_utils.cpp | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/helper/web_utils.cpp b/src/helper/web_utils.cpp index b61d14887..01bcd6b93 100644 --- a/src/helper/web_utils.cpp +++ b/src/helper/web_utils.cpp @@ -3,6 +3,8 @@ #if defined(__EMSCRIPTEN__) #include "web_utils.hpp" + +#include #include #include #include @@ -43,18 +45,15 @@ void web::LocalStorage::clear() { void web::console::error(const std::string& message) { - thread_local const emscripten::val console = emscripten::val::global("console"); - console.call("error", emscripten::val{ message }); + emscripten_console_error(message.c_str()); } void web::console::warn(const std::string& message) { - thread_local const emscripten::val console = emscripten::val::global("console"); - console.call("warn", emscripten::val{ message }); + emscripten_console_warn(message.c_str()); } void web::console::log(const std::string& message) { - thread_local const emscripten::val console = emscripten::val::global("console"); - console.call("log", emscripten::val{ message }); + emscripten_console_log(message.c_str()); } void web::console::info(const std::string& message) { From 13c8e72b8a424a79ca078cffc7d7bba8525ef07e Mon Sep 17 00:00:00 2001 From: Totto16 Date: Mon, 18 Nov 2024 00:22:19 +0100 Subject: [PATCH 27/37] fix: emscripten use correct port names (not varianet names) --- platforms/build-web.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/platforms/build-web.sh b/platforms/build-web.sh index a22d0b3fc..1c2cbfa4f 100755 --- a/platforms/build-web.sh +++ b/platforms/build-web.sh @@ -58,9 +58,9 @@ export ENDIANESS="little" export ROMFS="platforms/romfs" -export PACKAGE_FLAGS="'--use-port=sdl2-mt', '--use-port=harfbuzz-mt', '--use-port=freetype', '--use-port=zlib', '--use-port=sdl2_ttf', '--use-port=mpg123', '--use-port=sdl2_mixer_mp3', '-sSDL2_MIXER_FORMATS=[\"mp3\"]','--use-port=libpng-mt', '--use-port=sdl2_image','-sSDL2_IMAGE_FORMATS=[\"png\",\"svg\"]', '--use-port=icu-mt'" +export PACKAGE_FLAGS="'--use-port=sdl2', '--use-port=harfbuzz', '--use-port=freetype', '--use-port=zlib', '--use-port=sdl2_ttf', '--use-port=mpg123', '--use-port=sdl2_mixer', '-sSDL2_MIXER_FORMATS=[\"mp3\"]','--use-port=libpng', '--use-port=sdl2_image','-sSDL2_IMAGE_FORMATS=[\"png\",\"svg\"]', '--use-port=icu'" -export COMMON_FLAGS="'-fexceptions', '-pthread', '-sUSE_PTHREADS=1', '-sPTHREADS=1','-sEXCEPTION_CATCHING_ALLOWED=[..]', $PACKAGE_FLAGS" +export COMMON_FLAGS="'-fexceptions', '-pthread', '-sUSE_PTHREADS=1', '-sEXCEPTION_CATCHING_ALLOWED=[..]', $PACKAGE_FLAGS" # TODO see if ALLOW_MEMORY_GROWTH is needed, but if we load ttf's and music it likely is and we don't have to debug OOm crahses, that aren't handled by some thrid party library, which is painful export LINK_FLAGS="$COMMON_FLAGS, '-sEXPORT_ALL=1', '-sUSE_WEBGPU=1', '-sWASM=1', '-sALLOW_MEMORY_GROWTH=1', '-sASSERTIONS=1','-sERROR_ON_UNDEFINED_SYMBOLS=1', '-sFETCH=1'" From 3dfae404febbb342720153e6ca224345c0ffd065 Mon Sep 17 00:00:00 2001 From: Totto16 Date: Mon, 18 Nov 2024 00:41:36 +0100 Subject: [PATCH 28/37] feat: use LocalStorage for settings instead of a file --- src/manager/settings_manager.cpp | 65 ++++++++++++++++++++++++++++++-- 1 file changed, 62 insertions(+), 3 deletions(-) diff --git a/src/manager/settings_manager.cpp b/src/manager/settings_manager.cpp index 6115da531..747a2f831 100644 --- a/src/manager/settings_manager.cpp +++ b/src/manager/settings_manager.cpp @@ -3,23 +3,64 @@ #include "input/keyboard_input.hpp" #include "input/touch_input.hpp" +#if defined(__EMSCRIPTEN__) +#include "helper/web_utils.hpp" +#endif + namespace { +#if defined(__EMSCRIPTEN__) + constexpr const auto settings_key = "settings_key"; +#else constexpr const auto settings_filename = "settings.json"; +#endif -} +} // namespace SettingsManager::SettingsManager() { + +#if defined(__EMSCRIPTEN__) + const auto content = web::LocalStorage::get_item(settings_key); + + helper::expected> result = + helper::unexpected>{ std::make_pair( + "Key not present in LocalStorage", json::ParseError::OpenError + ) }; + + if (content.has_value()) { + auto parse_result = json::try_parse_json(content.value()); + + if (not parse_result.has_value()) { + result = helper::unexpected>{ + std::make_pair( + std::move(parse_result.error()), json::ParseError::FormatError + ) + }; + } else { + result = parse_result.value(); + } + } + +#else const std::filesystem::path settings_file = utils::get_root_folder() / settings_filename; const auto result = json::try_parse_json_file(settings_file); +#endif if (result.has_value()) { m_settings = result.value(); } else { auto [error, error_type] = result.error(); - spdlog::error("unable to load settings from \"{}\": {}", settings_filename, error); + spdlog::error( + "unable to load settings from \"{}\": {}", +#if defined(__EMSCRIPTEN__) + settings_key, +#else + settings_filename, +#endif + error + ); spdlog::warn("applying default settings"); m_settings = { @@ -48,14 +89,32 @@ void SettingsManager::add_callback(Callback&& callback) { } void SettingsManager::save() const { + +#if defined(__EMSCRIPTEN__) + const auto maybe_settings_json = json::try_json_to_string(m_settings); + + if (not maybe_settings_json.has_value()) { + spdlog::error( + "unable to save settings to LocalStorage\"{}\": unable to convert settings to json: {}", settings_key, + maybe_settings_json.error() + ); + return; + } + + web::LocalStorage::set_item(settings_key, maybe_settings_json.value()); + +#else const std::filesystem::path settings_file = utils::get_root_folder() / settings_filename; - const auto result = json::try_write_json_to_file(settings_file, m_settings, true); + const auto result = json::try_write_json_to_file(settings_file, m_settings, true); + if (result.has_value()) { spdlog::error("unable to save settings to \"{}\": {}", settings_filename, result.value()); return; } +#endif + this->fire_callbacks(); } From 9615b3dcb78b1806f1b73e379fb6c531b283af8b Mon Sep 17 00:00:00 2001 From: Totto16 Date: Mon, 18 Nov 2024 00:48:49 +0100 Subject: [PATCH 29/37] fix: correctly implement the assets and root dir helper functions for emscripten --- src/helper/graphic_utils.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/helper/graphic_utils.cpp b/src/helper/graphic_utils.cpp index b57a015c2..e8fca746e 100644 --- a/src/helper/graphic_utils.cpp +++ b/src/helper/graphic_utils.cpp @@ -35,6 +35,8 @@ std::vector utils::supported_features() { throw std::runtime_error{ "Failed in getting the Pref Path: " + std::string{ SDL_GetError() } }; } return std::filesystem::path{ std::string{ pref_path } }; +#elif defined(__EMSCRIPTEN__) + return std::filesystem::path{ "/" }; #elif defined(__CONSOLE__) // this is in the sdcard of the switch / 3ds , since internal storage is read-only for applications! return std::filesystem::path{ "." }; @@ -64,7 +66,7 @@ std::vector utils::supported_features() { #if defined(__SERENITY__) - // this is a read write location in the serenityos case build, see https://docs.flatpak.org/en/latest/conventions.html + // this is a read write location in the serenity-os case build, see https://docs.flatpak.org/en/latest/conventions.html const char* data_home = std::getenv("HOME"); if (data_home == nullptr) { throw std::runtime_error{ "Failed to get flatpak data directory (XDG_DATA_HOME)" }; @@ -95,8 +97,11 @@ std::vector utils::supported_features() { [[nodiscard]] std::filesystem::path utils::get_assets_folder() { #if defined(__ANDROID__) return std::filesystem::path{ "" }; +#elif defined(__EMSCRIPTEN__) + // emscripten mounts a memfs in the / location, we package assest into this dir, see: https://emscripten.org/docs/porting/files/packaging_files.html#packaging-using-emcc + return std::filesystem::path{ "/assets" }; #elif defined(__CONSOLE__) - // this is in the internal storage of the nintendo switch, it ios mounted by libnx (runtime switch support library) and filled at compile time with assets (its called ROMFS there) + // this is in the internal storage of the nintendo switch, it is mounted by libnx (runtime switch support library) and filled at compile time with assets (its called ROMFS there) return std::filesystem::path{ "romfs:/assets" }; #elif defined(BUILD_INSTALLER) // if you build in BUILD_INSTALLER mode, you have to assure that the data is there e.g. music + fonts! From 19ba1137c6c87624e77069e2bffeecc6e43f720f Mon Sep 17 00:00:00 2001 From: Totto16 Date: Mon, 18 Nov 2024 16:36:06 +0100 Subject: [PATCH 30/37] fix: make loading render loop also emscripten compatible --- src/executables/game/application.cpp | 217 ++++++++++++++++++--------- src/executables/game/application.hpp | 49 +++++- 2 files changed, 195 insertions(+), 71 deletions(-) diff --git a/src/executables/game/application.cpp b/src/executables/game/application.cpp index 73b3968ea..bca69a9ea 100644 --- a/src/executables/game/application.cpp +++ b/src/executables/game/application.cpp @@ -7,13 +7,11 @@ #include "helper/message_box.hpp" #include "input/input.hpp" #include "manager/music_manager.hpp" -#include "scenes/loading_screen/loading_screen.hpp" #include "scenes/scene.hpp" #include "ui/layout.hpp" #include -#include #include #include #include @@ -69,6 +67,34 @@ helper::TimeInfo::TimeInfo( return m_sleep_time; } +helper::LoadingInfo::LoadingInfo( + std::chrono::nanoseconds sleep_time, + Uint64 start_time, + std::future&& load_everything_thread, + std::chrono::steady_clock::time_point start_execution_time, + bool finished_loading, + scenes::LoadingScreen&& loading_screen +) + : m_sleep_time{ sleep_time }, + m_start_time{ start_time }, + m_load_everything_thread{ std::move(load_everything_thread) }, + m_start_execution_time{ start_execution_time }, + m_finished_loading{ finished_loading }, + m_loading_screen{ std::move(loading_screen) } { } + +[[nodiscard]] std::chrono::nanoseconds helper::LoadingInfo::sleep_time() const { + return m_sleep_time; +} + +[[nodiscard]] Uint64 helper::LoadingInfo::start_time() const { + return m_start_time; +} + + +[[nodiscard]] const std::future& helper::LoadingInfo::load_everything_thread() const { + return m_load_everything_thread; +} + Application::Application(std::shared_ptr&& window, CommandLineArguments&& arguments) try : m_command_line_arguments{ std::move(arguments) }, m_window{ std::move(window) }, @@ -89,17 +115,52 @@ Application::Application(std::shared_ptr&& window, CommandLineArguments& } #if defined(__EMSCRIPTEN__) -void c_main_loop(void* arg) { +void c_loop_entry(void* arg) { auto application = reinterpret_cast(arg); - if (not application->is_running()) { - // cal the destructor manually, so that everything gets cleaned up - application->~Application(); + application->loop_entry_emscripten(); +} + +void Application::load_emscripten() { + + if ((not m_loading_info->m_finished_loading) and m_is_running) { + load_loop(); + return; + } + + const auto duration = std::chrono::milliseconds(SDL_GetTicks64() - m_loading_info->start_time()); + + // we can reach this via SDL_QUIT, SDL_APP_TERMINATING or (not console::inMainLoop()) + if (not m_loading_info->m_finished_loading or not m_is_running) { + + spdlog::debug("Aborted loading after {}", duration); + + // do some combination of the loading exit in a normal OS case and the emscripten normal game loop exit + this->~Application(); + emscripten_cancel_main_loop(); + utils::exit(0); + } + + + spdlog::debug("Took {} to load", duration); + + push_scene(scenes::create_scene(*this, SceneId::MainMenu, ui::FullScreenLayout{ *m_window })); + + // run this manually, in a normal case, this would be run after the loader has finished + this->run(); +} + +void Application::main_loop_emscripten() { + if (not this->m_is_running) { + // call the destructor manually, so that everything gets cleaned up + this->~Application(); emscripten_cancel_main_loop(); return; } - application->main_loop(); + main_loop(); } + + #endif void Application::run() { @@ -122,17 +183,8 @@ void Application::run() { m_time_info = std::make_unique(sleep_time, start_execution_time); #if defined(__EMSCRIPTEN__) - - int selected_fps = m_target_framerate.has_value() ? m_target_framerate.value() : -1; - - // NOTE: this is complicated, especially in C++ - // see: https://wiki.libsdl.org/SDL2/README/emscripten#porting-your-app-to-emscripten - // and: https://emscripten.org/docs/api_reference/emscripten.h.html#c.emscripten_set_main_loop_arg - // for a basic understanding - // this sets up a loop,, throws an exception(a special kind, not c++ one) to exit this function, but nothing gets cleaned up (no destructors get called, this function NEVER returns) - // but after emscripten_cancel_main_loop we have to manually call the destructor, to clean up, - emscripten_set_main_loop_arg(c_main_loop, this, selected_fps, true); - UNREACHABLE(); + m_current_emscripten_func = std::bind(&Application::main_loop_emscripten, this); + return; #else while (m_is_running @@ -186,6 +238,55 @@ void Application::main_loop() { } } +void Application::load_loop() { + + // we can't use the normal event loop, so we have to do it manually + SDL_Event event; + while (SDL_PollEvent(&event) != 0) { + if (event.type == SDL_QUIT) { + m_is_running = false; + } + + // special event for android and IOS + if (event.type == SDL_APP_TERMINATING) { + m_is_running = false; + } + } + + if (not m_is_running) { + return; + } + + m_loading_info->m_loading_screen.update(); + // this service_provider only guarantees the renderer + the window to be accessible without race conditions + m_loading_info->m_loading_screen.render(*this); + + // present and wait (depending if vsync is on or not, this has to be done manually) + m_renderer.present(); + + if (m_target_framerate.has_value()) { + + const auto now = std::chrono::steady_clock::now(); + const auto runtime = (now - m_loading_info->m_start_execution_time); + + const auto sleep_time = m_loading_info->sleep_time(); + + if (runtime < sleep_time) { + //TODO(totto): use SDL_DelayNS in sdl >= 3.0 + helper::sleep_nanoseconds(sleep_time - runtime); + m_loading_info->m_start_execution_time = std::chrono::steady_clock::now(); + } else { + m_loading_info->m_start_execution_time = now; + } + } + // end waiting + + // wait until is faster, since it just compares two time_points instead of getting now() and than adding the wait-for argument + m_loading_info->m_finished_loading = + m_loading_info->load_everything_thread().wait_until(std::chrono::system_clock::time_point::min()) + == std::future_status::ready; +} + void Application::handle_event(const SDL_Event& event) { if (event.type == SDL_QUIT) { @@ -330,17 +431,21 @@ void Application::render() const { #endif } -[[nodiscard]] bool Application::is_running() const { - return m_is_running; +#if defined(__EMSCRIPTEN__) +void Application::loop_entry_emscripten() { + this->m_current_emscripten_func(); } +#endif + + void Application::initialize() { - auto loading_screen = scenes::LoadingScreen{ this }; + auto loading_screen_arg = scenes::LoadingScreen{ this }; const auto start_time = SDL_GetTicks64(); - const std::future load_everything = std::async(std::launch::async, [this] { + std::future load_everything_thread = std::async(std::launch::async, [this] { this->m_settings_manager = std::make_unique(); this->m_settings_manager->add_callback([this](const auto& settings) { this->reload_api(settings); }); @@ -389,9 +494,12 @@ void Application::initialize() { const auto sleep_time = m_target_framerate.has_value() ? std::chrono::duration_cast(1s) / m_target_framerate.value() : 0s; - auto start_execution_time = std::chrono::steady_clock::now(); + auto start_execution_time_arg = std::chrono::steady_clock::now(); - bool finished_loading = false; + m_loading_info = std::make_unique( + sleep_time, start_time, std::move(load_everything_thread), start_execution_time_arg, false, + std::move(loading_screen_arg) + ); // this is a duplicate of below in some cases, but it's just for the loading screen and can't be factored out easily // this also only uses a subset of all things, the real event loop uses, so that nothing breaks while doing multithreading @@ -401,60 +509,32 @@ void Application::initialize() { // - m_renderer // - m_target_framerate - while ((not finished_loading) and m_is_running +#if defined(__EMSCRIPTEN__) + m_current_emscripten_func = std::bind(&Application::load_emscripten, this); + int selected_fps = m_target_framerate.has_value() ? m_target_framerate.value() : -1; + + // NOTE: this is complicated, especially in C++ + // see: https://wiki.libsdl.org/SDL2/README/emscripten#porting-your-app-to-emscripten + // and: https://emscripten.org/docs/api_reference/emscripten.h.html#c.emscripten_set_main_loop_arg + // for a basic understanding + // this sets up a loop,, throws an exception(a special kind, not c++ one) to exit this function, but nothing gets cleaned up (no destructors get called, this function NEVER returns) + // but after emscripten_cancel_main_loop we have to manually call the destructor, to clean up, + emscripten_set_main_loop_arg(c_loop_entry, this, selected_fps, true); + UNREACHABLE(); +#else + while ((not m_loading_info->m_finished_loading) and m_is_running #if defined(__CONSOLE__) and console::inMainLoop() #endif ) { - - // we can't use the normal event loop, so we have to do it manually - SDL_Event event; - while (SDL_PollEvent(&event) != 0) { - if (event.type == SDL_QUIT) { - m_is_running = false; - } - - // special event for android and IOS - if (event.type == SDL_APP_TERMINATING) { - m_is_running = false; - } - } - - if (not m_is_running) { - break; - } - - loading_screen.update(); - // this service_provider only guarantees the renderer + the window to be accessible without race conditions - loading_screen.render(*this); - - // present and wait (depending if vsync is on or not, this has to be done manually) - m_renderer.present(); - - if (m_target_framerate.has_value()) { - - const auto now = std::chrono::steady_clock::now(); - const auto runtime = (now - start_execution_time); - if (runtime < sleep_time) { - //TODO(totto): use SDL_DelayNS in sdl >= 3.0 - helper::sleep_nanoseconds(sleep_time - runtime); - start_execution_time = std::chrono::steady_clock::now(); - } else { - start_execution_time = now; - } - } - // end waiting - - // wait until is faster, since it just compares two time_points instead of getting now() and than adding the wait-for argument - finished_loading = - load_everything.wait_until(std::chrono::system_clock::time_point::min()) == std::future_status::ready; + load_loop(); } const auto duration = std::chrono::milliseconds(SDL_GetTicks64() - start_time); // we can reach this via SDL_QUIT, SDL_APP_TERMINATING or (not console::inMainLoop()) - if (not finished_loading or not m_is_running) { + if (not m_loading_info->m_finished_loading or not m_is_running) { spdlog::debug("Aborted loading after {}", duration); @@ -467,6 +547,7 @@ void Application::initialize() { spdlog::debug("Took {} to load", duration); push_scene(scenes::create_scene(*this, SceneId::MainMenu, ui::FullScreenLayout{ *m_window })); +#endif } void Application::load_resources() { diff --git a/src/executables/game/application.hpp b/src/executables/game/application.hpp index 0c8c23c5b..d049ed827 100644 --- a/src/executables/game/application.hpp +++ b/src/executables/game/application.hpp @@ -12,10 +12,12 @@ #include "manager/resource_manager.hpp" #include "manager/service_provider.hpp" #include "manager/settings_manager.hpp" +#include "scenes/loading_screen/loading_screen.hpp" #include "scenes/scene.hpp" #include "ui/components/label.hpp" #include +#include #include #include @@ -48,6 +50,34 @@ namespace helper { [[nodiscard]] std::chrono::nanoseconds sleep_time() const; }; + + struct LoadingInfo { + private: + std::chrono::nanoseconds m_sleep_time; + Uint64 m_start_time; + + std::future m_load_everything_thread; + + public: + std::chrono::steady_clock::time_point m_start_execution_time; + bool m_finished_loading; + scenes::LoadingScreen m_loading_screen; + + LoadingInfo( + std::chrono::nanoseconds sleep_time, + Uint64 start_time, + std::future&& load_everything_thread, + std::chrono::steady_clock::time_point start_execution_time, + bool finished_loading, + scenes::LoadingScreen&& loading_screen + ); + + [[nodiscard]] std::chrono::nanoseconds sleep_time() const; + + [[nodiscard]] Uint64 start_time() const; + + [[nodiscard]] const std::future& load_everything_thread() const; + }; } // namespace helper @@ -68,12 +98,21 @@ struct Application final : public EventListener, public ServiceProvider { std::unique_ptr m_font_manager; std::unique_ptr m_api; +#if defined(__EMSCRIPTEN__) + using EmscriptenFunction = std::function; + EmscriptenFunction m_current_emscripten_func; + + void load_emscripten(); + void main_loop_emscripten(); +#endif + #if !defined(NDEBUG) std::unique_ptr m_fps_text{ nullptr }; std::unique_ptr m_debug; #endif std::unique_ptr m_time_info; + std::unique_ptr m_loading_info; #if defined(_HAVE_DISCORD_SDK) std::optional m_discord_instance{ std::nullopt }; @@ -86,6 +125,10 @@ struct Application final : public EventListener, public ServiceProvider { private: std::vector> m_scene_stack; + void main_loop(); + + void load_loop(); + public: Application(std::shared_ptr&& window, CommandLineArguments&& arguments); Application(const Application&) = delete; @@ -93,15 +136,15 @@ struct Application final : public EventListener, public ServiceProvider { void run(); - void main_loop(); - void handle_event(const SDL_Event& event) override; virtual void update(); virtual void render() const; - [[nodiscard]] bool is_running() const; +#if defined(__EMSCRIPTEN__) + void loop_entry_emscripten(); +#endif //TODO(Totto): move those functions bodies to the cpp From 8cabcfb609a7c5c76099edcf3511007734302b15 Mon Sep 17 00:00:00 2001 From: Totto16 Date: Mon, 18 Nov 2024 21:03:09 +0100 Subject: [PATCH 31/37] fix: fix multiple issues with emscripten support NOT prerendred text, so that no texture is created in a pthread correctly exit in the cases, where it is needed correctly stub out local storage, and the music manager --- platforms/build-web.sh | 6 +-- src/executables/game/application.cpp | 4 +- src/executables/meson.build | 4 ++ src/graphics/text.cpp | 30 +++++++++++ src/graphics/text.hpp | 11 +++- src/helper/graphic_utils.cpp | 6 +++ src/helper/web_utils.cpp | 75 +++++++++++++++++++--------- src/manager/music_manager.cpp | 10 +++- 8 files changed, 117 insertions(+), 29 deletions(-) diff --git a/platforms/build-web.sh b/platforms/build-web.sh index 1c2cbfa4f..f2d099dc6 100755 --- a/platforms/build-web.sh +++ b/platforms/build-web.sh @@ -62,8 +62,8 @@ export PACKAGE_FLAGS="'--use-port=sdl2', '--use-port=harfbuzz', '--use-port=free export COMMON_FLAGS="'-fexceptions', '-pthread', '-sUSE_PTHREADS=1', '-sEXCEPTION_CATCHING_ALLOWED=[..]', $PACKAGE_FLAGS" -# TODO see if ALLOW_MEMORY_GROWTH is needed, but if we load ttf's and music it likely is and we don't have to debug OOm crahses, that aren't handled by some thrid party library, which is painful -export LINK_FLAGS="$COMMON_FLAGS, '-sEXPORT_ALL=1', '-sUSE_WEBGPU=1', '-sWASM=1', '-sALLOW_MEMORY_GROWTH=1', '-sASSERTIONS=1','-sERROR_ON_UNDEFINED_SYMBOLS=1', '-sFETCH=1'" +# TODO see if ALLOW_MEMORY_GROWTH is needed, but if we load ttf's and music it likely is and we don't have to debug OOm crashes, that aren't handled by some third party library, which is painful +export LINK_FLAGS="$COMMON_FLAGS, '-sEXPORT_ALL=1', '-sUSE_WEBGPU=1', '-sWASM=1', '-sALLOW_MEMORY_GROWTH=1', '-sASSERTIONS=1','-sERROR_ON_UNDEFINED_SYMBOLS=1', '-sFETCH=1', '-sEXIT_RUNTIME=1'" export COMPILE_FLAGS="$COMMON_FLAGS ,'-DAUDIO_PREFER_MP3'" export CROSS_FILE="./platforms/crossbuild-web.ini" @@ -110,7 +110,7 @@ cpp_link_args = [$LINK_FLAGS] needs_exe_wrapper = true sys_root = '$EMSCRIPTEN_SYS_ROOT' -APP_ROMFS='$ROMFS' +APP_ROMFS='$ROMFS/assets/' EOF diff --git a/src/executables/game/application.cpp b/src/executables/game/application.cpp index bca69a9ea..b572feb0e 100644 --- a/src/executables/game/application.cpp +++ b/src/executables/game/application.cpp @@ -129,7 +129,7 @@ void Application::load_emscripten() { const auto duration = std::chrono::milliseconds(SDL_GetTicks64() - m_loading_info->start_time()); - // we can reach this via SDL_QUIT, SDL_APP_TERMINATING or (not console::inMainLoop()) + // we can reach this via SDL_QUIT or SDL_APP_TERMINATING if (not m_loading_info->m_finished_loading or not m_is_running) { spdlog::debug("Aborted loading after {}", duration); @@ -464,6 +464,7 @@ void Application::initialize() { this->load_resources(); #if !defined(NDEBUG) + //TODO(Totto): emscripten: this is using sdl rendering (to a texture) in another thread then the main thread, use proxying to the main thread here too, and disable OOPETRIS_DONT_USE_PRERENDERED_TEXT m_fps_text = std::make_unique( this, "FPS: ?", font_manager().get(FontId::Default), Color::white(), std::pair{ 0.95, 0.95 }, @@ -563,6 +564,7 @@ void Application::load_resources() { { FontId::NotoColorEmoji, "NotoColorEmoji.ttf" }, { FontId::Symbola, "Symbola.ttf" } }; + for (const auto& [font_id, path] : fonts) { const auto font_path = utils::get_assets_folder() / "fonts" / path; m_font_manager->load(font_id, font_path, fonts_size); diff --git a/src/executables/meson.build b/src/executables/meson.build index 740299e2e..c911b8e57 100644 --- a/src/executables/meson.build +++ b/src/executables/meson.build @@ -53,6 +53,10 @@ if build_application ) endif + if not APP_ROMFS.endswith('/') + APP_ROMFS = APP_ROMFS + '/' + endif + emscripten_link_args += ['--preload-file', APP_ROMFS + '@/assets/'] endif diff --git a/src/graphics/text.cpp b/src/graphics/text.cpp index 0cc59d4d8..6396743e0 100644 --- a/src/graphics/text.cpp +++ b/src/graphics/text.cpp @@ -3,6 +3,34 @@ #include "manager/service_provider.hpp" +#if defined(OOPETRIS_DONT_USE_PRERENDERED_TEXT) + +Text::Text( + const ServiceProvider* service_provider, + const std::string& text, + const Font& font, + const Color& color, + const shapes::URect& dest +) + : m_font{ font }, + m_color{ color }, + m_dest{ dest }, + m_text{ text } { + UNUSED(service_provider); +} + + +void Text::render(const ServiceProvider& service_provider) const { + auto texture = service_provider.renderer().prerender_text(m_text, m_font, m_color); + service_provider.renderer().draw_texture(texture, m_dest); +} + +void Text::set_text(const ServiceProvider& service_provider, const std::string& text) { + UNUSED(service_provider); + m_text = text; +} + +#else Text::Text( const ServiceProvider* service_provider, const std::string& text, @@ -23,3 +51,5 @@ void Text::render(const ServiceProvider& service_provider) const { void Text::set_text(const ServiceProvider& service_provider, const std::string& text) { m_text = service_provider.renderer().prerender_text(text, m_font, m_color); } + +#endif diff --git a/src/graphics/text.hpp b/src/graphics/text.hpp index 52798319e..f4eba655a 100644 --- a/src/graphics/text.hpp +++ b/src/graphics/text.hpp @@ -8,13 +8,22 @@ #include "rect.hpp" #include "texture.hpp" +//TODO: set this flag in the build system, or maybe also fix https://github.com/OpenBrickProtocolFoundation/oopetris/issues/132 in the process +#if defined(__EMSCRIPTEN__) +#define OOPETRIS_DONT_USE_PRERENDERED_TEXT +#endif + + struct Text final { private: Font m_font; Color m_color; shapes::URect m_dest; +#if defined(OOPETRIS_DONT_USE_PRERENDERED_TEXT) + std::string m_text; +#else Texture m_text; - +#endif public: OOPETRIS_GRAPHICS_EXPORTED Text( const ServiceProvider* service_provider, diff --git a/src/helper/graphic_utils.cpp b/src/helper/graphic_utils.cpp index e8fca746e..2bafe4c36 100644 --- a/src/helper/graphic_utils.cpp +++ b/src/helper/graphic_utils.cpp @@ -2,6 +2,10 @@ #include "graphic_utils.hpp" #include +#if defined(__EMSCRIPTEN__) +#include +#endif + SDL_Color utils::sdl_color_from_color(const Color& color) { return SDL_Color{ color.r, color.g, color.b, color.a }; } @@ -185,6 +189,8 @@ void utils::exit(int status_code) { // but is required here // see: https://github.com/libsdl-org/SDL/blob/main/docs/README-android.md throw utils::ExitException{ status_code }; +#elif defined(__EMSCRIPTEN__) + emscripten_force_exit(status_code); #else std::exit(status_code); #endif diff --git a/src/helper/web_utils.cpp b/src/helper/web_utils.cpp index 01bcd6b93..bc57da737 100644 --- a/src/helper/web_utils.cpp +++ b/src/helper/web_utils.cpp @@ -9,38 +9,69 @@ #include #include -std::optional web::LocalStorage::get_item(const std::string& key) { +namespace { + + emscripten::val get_local_storage() { + thread_local const emscripten::val localStorage = emscripten::val::global("localStorage"); + return localStorage; + } + + [[maybe_unused]] std::optional get_item_impl(const std::string& key) { - thread_local const emscripten::val localStorage = emscripten::val::global("localStorage"); + thread_local const emscripten::val localStorage = get_local_storage(); - emscripten::val value = localStorage.call("getItem", emscripten::val{ key }); + emscripten::val value = localStorage.call("getItem", emscripten::val{ key }); - if (value.isNull()) { - return std::nullopt; + if (value.isNull()) { + return std::nullopt; + } + + return value.as(); } - return value.as(); -} + [[maybe_unused]] void set_item_impl(const std::string& key, const std::string& value) { -void web::LocalStorage::set_item(const std::string& key, const std::string& value) { + thread_local const emscripten::val localStorage = get_local_storage(); - thread_local const emscripten::val localStorage = emscripten::val::global("localStorage"); + localStorage.call("setItem", emscripten::val{ key }, emscripten::val{ value }); + } - localStorage.call("setItem", emscripten::val{ key }, emscripten::val{ value }); -} + [[maybe_unused]] void remove_item_impl(const std::string& key) { -void web::LocalStorage::remove_item(const std::string& key) { + thread_local const emscripten::val localStorage = get_local_storage(); + + localStorage.call("removeItem", emscripten::val{ key }); + } + + [[maybe_unused]] void clear_impl() { - thread_local const emscripten::val localStorage = emscripten::val::global("localStorage"); + thread_local const emscripten::val localStorage = get_local_storage(); - localStorage.call("removeItem", emscripten::val{ key }); + localStorage.call("clear"); + } + +} // namespace + +std::optional web::LocalStorage::get_item(const std::string& key) { + // we don't have access to the localStorage in threads (Web workers) + //TODO: if we are in the main thread, call the impl directly, otherwise use proxying + (void) (key); + return std::nullopt; } -void web::LocalStorage::clear() { +void web::LocalStorage::set_item(const std::string& key, const std::string& value) { + //TODO: + (void) (key); + (void) (value); +} - thread_local const emscripten::val localStorage = emscripten::val::global("localStorage"); +void web::LocalStorage::remove_item(const std::string& key) { + //TODO: + (void) (key); +} - localStorage.call("clear"); +void web::LocalStorage::clear() { + //TODO: } @@ -57,18 +88,16 @@ void web::console::log(const std::string& message) { } void web::console::info(const std::string& message) { - thread_local const emscripten::val console = emscripten::val::global("console"); - console.call("info", emscripten::val{ message }); + emscripten_console_log(message.c_str()); } void web::console::debug(const std::string& message) { - thread_local const emscripten::val console = emscripten::val::global("console"); - console.call("debug", emscripten::val{ message }); + // NOTE: really the console, but also debug output + emscripten_dbg(message.c_str()); } void web::console::trace(const std::string& message) { - thread_local const emscripten::val console = emscripten::val::global("console"); - console.call("trace", emscripten::val{ message }); + emscripten_console_trace(message.c_str()); } void web::console::clear() { diff --git a/src/manager/music_manager.cpp b/src/manager/music_manager.cpp index 0f86404c9..7ff6ace37 100644 --- a/src/manager/music_manager.cpp +++ b/src/manager/music_manager.cpp @@ -56,14 +56,22 @@ MusicManager::MusicManager(ServiceProvider* service_provider, u8 channel_size) } } +#if defined(__EMSCRIPTEN__) + //TODO: do we need this, first do this: + // https://github.com/libsdl-org/SDL/issues/6385 +#else + const auto audio_channels = 2; + // 2 here means STEREO, note that channels above means tracks, e.g. simultaneous playing source that are mixed, // hence the name SDL2_mixer const auto audio_result = - Mix_OpenAudio(constants::audio_frequency, MIX_DEFAULT_FORMAT, 2, constants::audio_chunk_size); + Mix_OpenAudio(constants::audio_frequency, MIX_DEFAULT_FORMAT, audio_channels, constants::audio_chunk_size); + if (audio_result != 0) { throw helper::InitializationError{ fmt::format("Failed to open an audio device: {}", SDL_GetError()) }; } +#endif m_s_instance = this; From 3032a373ab47505b8e3e9b4c9704eb0f16a9e307 Mon Sep 17 00:00:00 2001 From: Totto16 Date: Mon, 18 Nov 2024 23:13:42 +0100 Subject: [PATCH 32/37] feat: implement proxying to main thread for emscripten this requires storing a web context on the application instance and make it available via service provider this required a few small refactors in the apis, that use the local storage (since it only can be accessed via main thread) --- src/executables/game/application.cpp | 30 ++++++- src/executables/game/application.hpp | 14 ++++ src/helper/platform.cpp | 2 +- src/helper/web_utils.cpp | 92 +++++++++++++++++----- src/helper/web_utils.hpp | 72 ++++++++++++++++- src/lobby/api.cpp | 30 ++++--- src/lobby/api.hpp | 13 ++- src/lobby/credentials/secret.cpp | 73 ++++++++++------- src/lobby/credentials/secret.hpp | 5 +- src/manager/service_provider.hpp | 11 +++ src/manager/settings_manager.cpp | 13 ++- src/manager/settings_manager.hpp | 3 +- src/scenes/settings_menu/settings_menu.cpp | 2 +- 13 files changed, 284 insertions(+), 76 deletions(-) diff --git a/src/executables/game/application.cpp b/src/executables/game/application.cpp index b572feb0e..867e79d94 100644 --- a/src/executables/game/application.cpp +++ b/src/executables/game/application.cpp @@ -100,7 +100,13 @@ Application::Application(std::shared_ptr&& window, CommandLineArguments& m_window{ std::move(window) }, m_renderer{ *m_window, m_command_line_arguments.target_fps.has_value() ? Renderer::VSync::Disabled : Renderer::VSync::Enabled }, - m_target_framerate{ m_command_line_arguments.target_fps } { + m_target_framerate{ m_command_line_arguments.target_fps } + +#if defined(__EMSCRIPTEN__) + , + m_web_context{ this } +#endif +{ initialize(); } catch (const helper::GeneralError& general_error) { const auto severity = general_error.severity(); @@ -117,6 +123,7 @@ Application::Application(std::shared_ptr&& window, CommandLineArguments& #if defined(__EMSCRIPTEN__) void c_loop_entry(void* arg) { auto application = reinterpret_cast(arg); + application->emscripten_do_process(); application->loop_entry_emscripten(); } @@ -159,7 +166,9 @@ void Application::main_loop_emscripten() { main_loop(); } - +void Application::emscripten_do_process() { + m_web_context.do_processing(); +} #endif @@ -212,6 +221,7 @@ void Application::main_loop() { const Uint64 current_time = SDL_GetPerformanceCounter(); if (current_time - m_debug->m_start_time >= m_debug->update_time()) { + //TODO: debug in emscripten const double elapsed = static_cast(current_time - m_debug->m_start_time) / m_debug->count_per_s(); m_fps_text->set_text( *this, fmt::format("FPS: {:.2f}", static_cast(m_debug->m_frame_counter) / elapsed) @@ -446,7 +456,7 @@ void Application::initialize() { const auto start_time = SDL_GetTicks64(); std::future load_everything_thread = std::async(std::launch::async, [this] { - this->m_settings_manager = std::make_unique(); + this->m_settings_manager = std::make_unique(this); this->m_settings_manager->add_callback([this](const auto& settings) { this->reload_api(settings); }); @@ -583,11 +593,23 @@ void Application::load_resources() { #endif +#if defined(__EMSCRIPTEN__) + +[[nodiscard]] web::WebContext& Application::web_context() { + return m_web_context; +} + +[[nodiscard]] const web::WebContext& Application::web_context() const { + return m_web_context; +} + +#endif + void Application::reload_api(const settings::Settings& settings) { if (auto api_url = settings.api_url; api_url.has_value()) { - auto maybe_api = lobby::API::get_api(api_url.value()); + auto maybe_api = lobby::API::get_api(this, api_url.value()); if (maybe_api.has_value()) { //TODO(Totto): do this somehow asynchronous m_api = std::make_unique(std::move(maybe_api.value())); diff --git a/src/executables/game/application.hpp b/src/executables/game/application.hpp index d049ed827..3e0dc7391 100644 --- a/src/executables/game/application.hpp +++ b/src/executables/game/application.hpp @@ -21,6 +21,11 @@ #include #include + +#if defined(__EMSCRIPTEN__) +#include "helper/web_utils.hpp" +#endif + namespace helper { #if !defined(NDEBUG) struct DebugInfo { @@ -101,6 +106,7 @@ struct Application final : public EventListener, public ServiceProvider { #if defined(__EMSCRIPTEN__) using EmscriptenFunction = std::function; EmscriptenFunction m_current_emscripten_func; + web::WebContext m_web_context; void load_emscripten(); void main_loop_emscripten(); @@ -144,6 +150,8 @@ struct Application final : public EventListener, public ServiceProvider { #if defined(__EMSCRIPTEN__) void loop_entry_emscripten(); + + void emscripten_do_process(); #endif //TODO(Totto): move those functions bodies to the cpp @@ -226,6 +234,12 @@ struct Application final : public EventListener, public ServiceProvider { #endif +#if defined(__EMSCRIPTEN__) + + [[nodiscard]] web::WebContext& web_context() override; + [[nodiscard]] const web::WebContext& web_context() const override; + +#endif private: void initialize(); diff --git a/src/helper/platform.cpp b/src/helper/platform.cpp index d1f4b819d..64650b1e1 100644 --- a/src/helper/platform.cpp +++ b/src/helper/platform.cpp @@ -17,7 +17,7 @@ namespace { #if !(defined(__ANDROID__) || defined(__CONSOLE__) || defined(__SERENITY__) || defined(__EMSCRIPTEN__)) - inline std::string get_error_from_errno() { + [[maybe_unused]] inline std::string get_error_from_errno() { #if defined(_MSC_VER) char buffer[256] = { 0 }; diff --git a/src/helper/web_utils.cpp b/src/helper/web_utils.cpp index bc57da737..d463a68e4 100644 --- a/src/helper/web_utils.cpp +++ b/src/helper/web_utils.cpp @@ -2,6 +2,8 @@ #if defined(__EMSCRIPTEN__) +#include + #include "web_utils.hpp" #include @@ -9,6 +11,7 @@ #include #include + namespace { emscripten::val get_local_storage() { @@ -16,7 +19,7 @@ namespace { return localStorage; } - [[maybe_unused]] std::optional get_item_impl(const std::string& key) { + std::optional get_item_impl(const std::string& key) { thread_local const emscripten::val localStorage = get_local_storage(); @@ -29,21 +32,21 @@ namespace { return value.as(); } - [[maybe_unused]] void set_item_impl(const std::string& key, const std::string& value) { + void set_item_impl(const std::string& key, const std::string& value) { thread_local const emscripten::val localStorage = get_local_storage(); localStorage.call("setItem", emscripten::val{ key }, emscripten::val{ value }); } - [[maybe_unused]] void remove_item_impl(const std::string& key) { + void remove_item_impl(const std::string& key) { thread_local const emscripten::val localStorage = get_local_storage(); localStorage.call("removeItem", emscripten::val{ key }); } - [[maybe_unused]] void clear_impl() { + void clear_impl() { thread_local const emscripten::val localStorage = get_local_storage(); @@ -52,26 +55,58 @@ namespace { } // namespace -std::optional web::LocalStorage::get_item(const std::string& key) { - // we don't have access to the localStorage in threads (Web workers) - //TODO: if we are in the main thread, call the impl directly, otherwise use proxying - (void) (key); - return std::nullopt; +web::LocalStorage::LocalStorage(ServiceProvider* service_provider) : m_service_provider{ service_provider } { } + +//NOTE:we don't have access to the localStorage in threads (Web workers), so if we are in the main thread, we can call the impl directly, otherwise we have to use proxying +std::optional web::LocalStorage::get_item(const std::string& key) const { + if (m_service_provider->web_context().is_main_thread()) { + return get_item_impl(key); + } + + auto result = m_service_provider->web_context().proxy>([key = std::move(key)]() { + return get_item_impl(key); + }); + + if (not result.has_value()) { + return std::nullopt; + } + + return result.value(); } -void web::LocalStorage::set_item(const std::string& key, const std::string& value) { - //TODO: - (void) (key); - (void) (value); +bool web::LocalStorage::set_item(const std::string& key, const std::string& value) const { + if (m_service_provider->web_context().is_main_thread()) { + set_item_impl(key, value); + return true; + } + + auto result = m_service_provider->web_context().proxy([key = std::move(key), value = std::move(value)]() { + set_item_impl(key, value); + }); + + return result; } -void web::LocalStorage::remove_item(const std::string& key) { - //TODO: - (void) (key); +bool web::LocalStorage::remove_item(const std::string& key) const { + if (m_service_provider->web_context().is_main_thread()) { + remove_item_impl(key); + return true; + } + + auto result = m_service_provider->web_context().proxy([key = std::move(key)]() { remove_item_impl(key); }); + + return result; } -void web::LocalStorage::clear() { - //TODO: +bool web::LocalStorage::clear() const { + if (m_service_provider->web_context().is_main_thread()) { + clear_impl(); + return true; + } + + auto result = m_service_provider->web_context().proxy([]() { clear_impl(); }); + + return result; } @@ -134,5 +169,26 @@ std::shared_ptr web::get_console_sink() { }); } +web::WebContext::WebContext(ServiceProvider* service_provider) + : m_queue{}, + m_main_thread_id{ std::this_thread::get_id() }, + m_main_thread_handle{ pthread_self() }, + m_local_storage{ service_provider } { } + +web::WebContext::~WebContext() = default; + +[[nodiscard]] bool web::WebContext::is_main_thread() const { + return std::this_thread::get_id() == m_main_thread_id; +} + +void web::WebContext::do_processing() { + ASSERT(is_main_thread() && "can only process in main thread"); + + m_queue.execute(); +} + +[[nodiscard]] const web::LocalStorage& web::WebContext::local_storage() const { + return m_local_storage; +} #endif diff --git a/src/helper/web_utils.hpp b/src/helper/web_utils.hpp index 50e455fdd..23c36a040 100644 --- a/src/helper/web_utils.hpp +++ b/src/helper/web_utils.hpp @@ -11,20 +11,29 @@ #error "need emscripten threads support" #endif +#include "manager/service_provider.hpp" #include #include #include #include +#include + +#include namespace web { struct LocalStorage { + private: + ServiceProvider* m_service_provider; + + public: + explicit LocalStorage(ServiceProvider* service_provider); - [[nodiscard]] static std::optional get_item(const std::string& key); - static void set_item(const std::string& key, const std::string& value); - static void remove_item(const std::string& key); - static void clear(); + [[nodiscard]] std::optional get_item(const std::string& key) const; + [[nodiscard]] bool set_item(const std::string& key, const std::string& value) const; + [[nodiscard]] bool remove_item(const std::string& key) const; + [[nodiscard]] bool clear() const; }; [[nodiscard]] std::shared_ptr get_console_sink(); @@ -42,4 +51,59 @@ namespace web { }; // namespace console + struct WebContext { + private: + emscripten::ProxyingQueue m_queue; + std::thread::id m_main_thread_id; + pthread_t m_main_thread_handle; + LocalStorage m_local_storage; + + public: + explicit WebContext(ServiceProvider* service_provider); + + ~WebContext(); + + [[nodiscard]] bool is_main_thread() const; + + void do_processing(); + + template + [[nodiscard]] auto proxy(std::function&& func) { + using ResultType = typename std::conditional_t, bool, std::optional>; + + if constexpr (std::is_same_v) { + + std::function proxy_func = + [func = std::move(func)](auto ctx) { + func(); + ctx.finish(); + }; + + auto successfull = m_queue.proxySyncWithCtx(m_main_thread_handle, proxy_func); + + return successfull; + } else { + ResultType result = std::nullopt; + + std::function proxy_func = + [&result, func = std::move(func)](auto ctx) { + result = func(); + ctx.finish(); + }; + + auto successfull = m_queue.proxySyncWithCtx(m_main_thread_handle, proxy_func); + + + if (not successfull) { + result = std::nullopt; + } + + return result; + } + } + + [[nodiscard]] const LocalStorage& local_storage() const; + }; + + }; // namespace web diff --git a/src/lobby/api.cpp b/src/lobby/api.cpp index f0a99acb2..72dcc7aa3 100644 --- a/src/lobby/api.cpp +++ b/src/lobby/api.cpp @@ -20,7 +20,7 @@ #endif namespace { - namespace constants { + namespace token::constants { constexpr const char* api_token_key = "API_TOKEN_save"; } @@ -60,11 +60,11 @@ helper::expected lobby::API::check_reachability() { return {}; } -lobby::API::API(const std::string& api_url) +lobby::API::API(ServiceProvider* service_provider, const std::string& api_url) : m_client{ std::make_unique(api_url) }, - m_secret_storage{ std::make_unique(secret::KeyringType::User) } { + m_secret_storage{ std::make_unique(service_provider, secret::KeyringType::User) } { - auto value = m_secret_storage->load(constants::api_token_key); + auto value = m_secret_storage->load(token::constants::api_token_key); if (value.has_value()) { if (not this->setup_authentication(value.value().as_string())) { @@ -89,11 +89,12 @@ lobby::API::API(API&& other) noexcept lobby::API::~API() = default; -helper::expected lobby::API::get_api(const std::string& url) { +helper::expected +lobby::API::get_api(ServiceProvider* service_provider, const std::string& url) { try { - API api{ url }; + API api{ service_provider, url }; const auto reachable = api.check_reachability(); @@ -109,11 +110,15 @@ helper::expected lobby::API::get_api(const std::string& } } -void lobby::API::check_url(const std::string& url, std::function&& callback) { +void lobby::API::check_url( + ServiceProvider* service_provider, + const std::string& url, + std::function&& callback +) { - //TODO(Totto): is this doen correctly - std::ignore = std::async(std::launch::async, [url, callback = std::move(callback)] { - auto result = lobby::API::get_api(url); + //TODO(Totto): is this done correctly + std::ignore = std::async(std::launch::async, [url, callback = std::move(callback), service_provider] { + auto result = lobby::API::get_api(service_provider, url); callback(result.has_value()); }); @@ -156,7 +161,7 @@ bool lobby::API::authenticate(const Credentials& credentials) { void lobby::API::logout() { m_client->ResetBearerAuth(); - if (auto result = m_secret_storage->remove(constants::api_token_key); result.has_value()) { + if (auto result = m_secret_storage->remove(token::constants::api_token_key); result.has_value()) { spdlog::error("API: {}", result.value()); } } @@ -283,7 +288,8 @@ bool lobby::API::setup_authentication(const std::string& token) { m_authentication_token = token; m_client->SetBearerAuth(token); - if (auto result = m_secret_storage->store(constants::api_token_key, secret::Buffer{ token }); result.has_value()) { + if (auto result = m_secret_storage->store(token::constants::api_token_key, secret::Buffer{ token }); + result.has_value()) { spdlog::error("API {}", result.value()); } diff --git a/src/lobby/api.hpp b/src/lobby/api.hpp index 1ce9fefa4..3559e9cb0 100644 --- a/src/lobby/api.hpp +++ b/src/lobby/api.hpp @@ -26,7 +26,7 @@ namespace lobby { [[nodiscard]] helper::expected check_reachability(); - explicit API(const std::string& api_url); + explicit API(ServiceProvider* service_provider, const std::string& api_url); helper::expected get_version(); @@ -42,10 +42,17 @@ namespace lobby { OOPETRIS_GRAPHICS_EXPORTED ~API(); OOPETRIS_GRAPHICS_EXPORTED - [[nodiscard]] helper::expected static get_api(const std::string& url); + [[nodiscard]] helper::expected static get_api( + ServiceProvider* service_provider, + const std::string& url + ); OOPETRIS_GRAPHICS_EXPORTED - void static check_url(const std::string& url, std::function&& callback); + void static check_url( + ServiceProvider* service_provider, + const std::string& url, + std::function&& callback + ); OOPETRIS_GRAPHICS_EXPORTED [[nodiscard]] bool is_authenticated(); diff --git a/src/lobby/credentials/secret.cpp b/src/lobby/credentials/secret.cpp index 44942dcb9..8529dd941 100644 --- a/src/lobby/credentials/secret.cpp +++ b/src/lobby/credentials/secret.cpp @@ -7,14 +7,14 @@ #include namespace { - namespace constants { + namespace secrets::constants { constexpr const char* key_type_user = "user"; constexpr const char* key_name_prefix = "OOPetris_key__"; - } // namespace constants + } // namespace secrets::constants std::string get_key_name(const std::string& key) { - return constants::key_name_prefix + key; + return secrets::constants::key_name_prefix + key; } i64 get_id_from_name(key_serial_t keyring_id, const std::string& key) { @@ -22,14 +22,16 @@ namespace { const std::string full_key = get_key_name(key); // 0 stands for: do not create a link to another keyring - return keyctl_search(keyring_id, constants::key_type_user, full_key.c_str(), 0); + return keyctl_search(keyring_id, secrets::constants::key_type_user, full_key.c_str(), 0); } } // namespace -secret::SecretStorage::SecretStorage(KeyringType type) : m_type{ type } { +secret::SecretStorage::SecretStorage(ServiceProvider* service_provider, KeyringType type) + : m_service_provider{ service_provider }, + m_type{ type } { key_serial_t key_type{}; switch (m_type) { @@ -111,7 +113,7 @@ secret::SecretStorage::store(const std::string& key, const Buffer& value, bool u auto full_key = get_key_name(key); - auto new_id = add_key(constants::key_type_user, full_key.c_str(), value.data(), value.size(), m_ring_id); + auto new_id = add_key(secrets::constants::key_type_user, full_key.c_str(), value.data(), value.size(), m_ring_id); if (new_id < 0) { return fmt::format("Error while storing a key, can't add the key: {}", strerror(errno)); @@ -163,16 +165,16 @@ secret::SecretStorage::store(const std::string& key, const Buffer& value, bool u namespace { - namespace constants { + namespace secrets::constants { constexpr const wchar_t* property_name = L"OOPetris Payload"; constexpr const wchar_t* key_name_prefix = L"OOPetris_key__"; constexpr const wchar_t* used_algorithm = BCRYPT_AES_ALGORITHM; - } // namespace constants + } // namespace secrets::constants std::wstring get_key_name(const std::string& key) { - std::wstring result{ constants::key_name_prefix }; + std::wstring result{ secrets::constants::key_name_prefix }; for (auto& normal_char : key) { result += normal_char; } @@ -204,7 +206,10 @@ namespace { } // namespace -secret::SecretStorage::SecretStorage(KeyringType type) : m_type{ type }, m_phProvider{} { +secret::SecretStorage::SecretStorage(ServiceProvider* service_provider, KeyringType type) + : m_service_provider{ service_provider }, + m_type{ type }, + m_phProvider{} { if (type == KeyringType::Session) { spdlog::warn("KeyringType Session is not supported, using KeyringType User"); @@ -246,7 +251,7 @@ secret::SecretStorage::SecretStorage(SecretStorage&& other) noexcept DWORD bytes_needed{}; // no flags needed, so using 0 - auto result = NCryptGetProperty(key_handle, constants::property_name, nullptr, 0, &bytes_needed, 0); + auto result = NCryptGetProperty(key_handle, secrets::constants::property_name, nullptr, 0, &bytes_needed, 0); if (result != ERROR_SUCCESS) { NCryptFreeObject(key_handle); @@ -259,7 +264,8 @@ secret::SecretStorage::SecretStorage(SecretStorage&& other) noexcept DWORD bytes_written{}; - auto result2 = NCryptGetProperty(key_handle, constants::property_name, buffer, bytes_needed, &bytes_written, 0); + auto result2 = + NCryptGetProperty(key_handle, secrets::constants::property_name, buffer, bytes_needed, &bytes_written, 0); if (result2 != ERROR_SUCCESS) { NCryptFreeObject(key_handle); @@ -307,7 +313,7 @@ secret::SecretStorage::store(const std::string& key, const Buffer& value, bool u // 0 means no dwLegacyKeySpec auto result = NCryptCreatePersistedKey( - this->m_phProvider, &key_handle, constants::used_algorithm, key_name.c_str(), 0, flags + this->m_phProvider, &key_handle, secrets::constants::used_algorithm, key_name.c_str(), 0, flags ); if (result != ERROR_SUCCESS) { @@ -320,8 +326,9 @@ secret::SecretStorage::store(const std::string& key, const Buffer& value, bool u std::memcpy(buffer, value.data(), value.size()); - auto result2 = - NCryptSetProperty(key_handle, constants::property_name, buffer, static_cast(value.size()), flags2); + auto result2 = NCryptSetProperty( + key_handle, secrets::constants::property_name, buffer, static_cast(value.size()), flags2 + ); delete[] buffer; @@ -373,9 +380,9 @@ secret::SecretStorage::store(const std::string& key, const Buffer& value, bool u namespace { - namespace secrets_constants { + namespace secrets::constants { constexpr const char* store_file_name = ".secret_key_storage"; - } // namespace secrets_constants + } // namespace secrets::constants helper::expected get_json_from_file(const std::string& file) { auto result = json::try_parse_json_file(file); @@ -393,9 +400,11 @@ namespace { // This is a dummy fallback, but good enough for this platforms -secret::SecretStorage::SecretStorage(KeyringType type) : m_type{ type } { +secret::SecretStorage::SecretStorage(ServiceProvider* service_provider, KeyringType type) + : m_service_provider{ service_provider }, + m_type{ type } { - m_file_path = utils::get_root_folder() / secrets_constants::store_file_name; + m_file_path = utils::get_root_folder() / secrets::constants::store_file_name; } secret::SecretStorage::~SecretStorage() = default; @@ -471,19 +480,21 @@ secret::SecretStorage::store(const std::string& key, const Buffer& value, bool u namespace { - namespace constants { + namespace secrets::constants { constexpr const char* key_name_prefix = "OOPetris_key__"; - } // namespace constants + } // namespace secrets::constants std::string get_key_name(const std::string& key) { - return constants::key_name_prefix + key; + return secrets::constants::key_name_prefix + key; } } // namespace // This is a dummy fallback, but good enough for this platforms -secret::SecretStorage::SecretStorage(KeyringType type) : m_type{ type } { } +secret::SecretStorage::SecretStorage(ServiceProvider* service_provider, KeyringType type) + : m_service_provider{ service_provider }, + m_type{ type } { } secret::SecretStorage::~SecretStorage() = default; @@ -493,7 +504,7 @@ secret::SecretStorage::SecretStorage(SecretStorage&& other) noexcept : m_type{ o [[nodiscard]] helper::expected secret::SecretStorage::load(const std::string& key) const { const auto key_name = get_key_name(key); - auto maybe_value = web::LocalStorage::get_item(key_name); + auto maybe_value = m_service_provider->web_context().local_storage().get_item(key_name); if (not maybe_value.has_value()) { return helper::unexpected{ "Key not found" }; } @@ -507,13 +518,17 @@ secret::SecretStorage::store(const std::string& key, const Buffer& value, bool u const auto key_name = get_key_name(key); if (not update) { - auto maybe_value = web::LocalStorage::get_item(key_name); + auto maybe_value = m_service_provider->web_context().local_storage().get_item(key_name); if (maybe_value.has_value()) { return "Error while storing a key, it already exists and we can't update it"; } } - web::LocalStorage::set_item(key_name, value.as_string()); + auto is_successfull = m_service_provider->web_context().local_storage().set_item(key_name, value.as_string()); + + if (not is_successfull) { + return "Error while storing a key, LocalStorage set item error"; + } return std::nullopt; } @@ -523,7 +538,11 @@ secret::SecretStorage::store(const std::string& key, const Buffer& value, bool u const auto key_name = get_key_name(key); - web::LocalStorage::remove_item(key_name); + auto is_successfull = m_service_provider->web_context().local_storage().remove_item(key_name); + + if (not is_successfull) { + return "Error while removing a key, LocalStorage remove item error"; + } return std::nullopt; } diff --git a/src/lobby/credentials/secret.hpp b/src/lobby/credentials/secret.hpp index c2a91a934..1c96c3a65 100644 --- a/src/lobby/credentials/secret.hpp +++ b/src/lobby/credentials/secret.hpp @@ -9,7 +9,7 @@ #include "./buffer.hpp" #include "helper/windows.hpp" - +#include "manager/service_provider.hpp" #if defined(__linux__) @@ -29,6 +29,7 @@ namespace secret { struct SecretStorage { private: + [[maybe_unused]] ServiceProvider* m_service_provider; KeyringType m_type; #if defined(__linux__) || defined(__ANDROID__) @@ -41,7 +42,7 @@ namespace secret { public: - OOPETRIS_GRAPHICS_EXPORTED explicit SecretStorage(KeyringType type); + OOPETRIS_GRAPHICS_EXPORTED explicit SecretStorage(ServiceProvider* service_provider, KeyringType type); OOPETRIS_GRAPHICS_EXPORTED ~SecretStorage(); //NOLINT(performance-trivially-destructible) diff --git a/src/manager/service_provider.hpp b/src/manager/service_provider.hpp index 3dc956ab7..6c98aad35 100644 --- a/src/manager/service_provider.hpp +++ b/src/manager/service_provider.hpp @@ -33,6 +33,10 @@ namespace lobby { } +namespace web { + struct WebContext; +} + struct ServiceProvider { ServiceProvider() = default; ServiceProvider(const ServiceProvider&) = delete; @@ -65,5 +69,12 @@ struct ServiceProvider { [[nodiscard]] virtual std::optional& discord_instance() = 0; [[nodiscard]] virtual const std::optional& discord_instance() const = 0; +#endif + +#if defined(__EMSCRIPTEN__) + + [[nodiscard]] virtual web::WebContext& web_context() = 0; + [[nodiscard]] virtual const web::WebContext& web_context() const = 0; + #endif }; diff --git a/src/manager/settings_manager.cpp b/src/manager/settings_manager.cpp index 747a2f831..7e15ca2e5 100644 --- a/src/manager/settings_manager.cpp +++ b/src/manager/settings_manager.cpp @@ -3,6 +3,7 @@ #include "input/keyboard_input.hpp" #include "input/touch_input.hpp" + #if defined(__EMSCRIPTEN__) #include "helper/web_utils.hpp" #endif @@ -17,10 +18,10 @@ namespace { } // namespace -SettingsManager::SettingsManager() { +SettingsManager::SettingsManager(ServiceProvider* service_provider) : m_service_provider{ service_provider } { #if defined(__EMSCRIPTEN__) - const auto content = web::LocalStorage::get_item(settings_key); + const auto content = m_service_provider->web_context().local_storage().get_item(settings_key); helper::expected> result = helper::unexpected>{ std::make_pair( @@ -101,7 +102,13 @@ void SettingsManager::save() const { return; } - web::LocalStorage::set_item(settings_key, maybe_settings_json.value()); + auto is_successfull = + m_service_provider->web_context().local_storage().set_item(settings_key, maybe_settings_json.value()); + + if (not is_successfull) { + spdlog::error("unable to save settings to LocalStorage\"{}\": localstorage set error", settings_key); + return; + } #else const std::filesystem::path settings_file = utils::get_root_folder() / settings_filename; diff --git a/src/manager/settings_manager.hpp b/src/manager/settings_manager.hpp index 71bae702d..2d73a0ca4 100644 --- a/src/manager/settings_manager.hpp +++ b/src/manager/settings_manager.hpp @@ -18,9 +18,10 @@ struct SettingsManager { private: settings::Settings m_settings; std::vector m_callbacks; + ServiceProvider* m_service_provider; public: - OOPETRIS_GRAPHICS_EXPORTED explicit SettingsManager(); + OOPETRIS_GRAPHICS_EXPORTED explicit SettingsManager(ServiceProvider* service_provider); OOPETRIS_GRAPHICS_EXPORTED [[nodiscard]] const settings::Settings& settings() const; diff --git a/src/scenes/settings_menu/settings_menu.cpp b/src/scenes/settings_menu/settings_menu.cpp index 85796462c..b5f1c7c1b 100644 --- a/src/scenes/settings_menu/settings_menu.cpp +++ b/src/scenes/settings_menu/settings_menu.cpp @@ -211,7 +211,7 @@ namespace scenes { this->m_status = Status::Loading; //TODO(Totto): do this somehow asynchronous - lobby::API::check_url(api_url, [this, api_url](bool success) { + lobby::API::check_url(m_service_provider, api_url, [this, api_url](bool success) { this->m_status = success ? Status::Ok : Status::Error; this->m_settings.api_url = api_url; this->m_did_change_settings = true; From 53c9961a0448131c456ca8b4c00fe106deef72a4 Mon Sep 17 00:00:00 2001 From: Totto16 Date: Mon, 18 Nov 2024 23:29:53 +0100 Subject: [PATCH 33/37] fix: fix fps counter being wrong --- src/executables/game/application.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/executables/game/application.cpp b/src/executables/game/application.cpp index 867e79d94..58f7a3af4 100644 --- a/src/executables/game/application.cpp +++ b/src/executables/game/application.cpp @@ -177,10 +177,13 @@ void Application::run() { #if !defined(NDEBUG) auto start_time = SDL_GetPerformanceCounter(); + const auto update_time = SDL_GetPerformanceFrequency() / 2; //0.5 s + const auto count_per_s = static_cast(SDL_GetPerformanceFrequency()); + u64 frame_counter = 0; - m_debug = std::make_unique(start_time, update_time, count_per_s, frame_counter); + m_debug = std::make_unique(start_time, frame_counter, update_time, count_per_s); #endif using namespace std::chrono_literals; @@ -221,11 +224,12 @@ void Application::main_loop() { const Uint64 current_time = SDL_GetPerformanceCounter(); if (current_time - m_debug->m_start_time >= m_debug->update_time()) { - //TODO: debug in emscripten const double elapsed = static_cast(current_time - m_debug->m_start_time) / m_debug->count_per_s(); + m_fps_text->set_text( *this, fmt::format("FPS: {:.2f}", static_cast(m_debug->m_frame_counter) / elapsed) ); + m_debug->m_start_time = current_time; m_debug->m_frame_counter = 0; } From 0e5338c81c71f4c7bb36aa04fbe75fda4ed38de5 Mon Sep 17 00:00:00 2001 From: Totto16 Date: Mon, 18 Nov 2024 23:48:14 +0100 Subject: [PATCH 34/37] feat: add better shell file for emscripten --- platforms/emscripten/shell_file.html | 210 +++++++++++++++++++++++++++ src/executables/meson.build | 6 +- 2 files changed, 215 insertions(+), 1 deletion(-) create mode 100644 platforms/emscripten/shell_file.html diff --git a/platforms/emscripten/shell_file.html b/platforms/emscripten/shell_file.html new file mode 100644 index 000000000..a081c89e5 --- /dev/null +++ b/platforms/emscripten/shell_file.html @@ -0,0 +1,210 @@ + + + + + + Emscripten-Generated Code + + + +


+
+
+
+ emscripten +
+
+
Downloading...
+
+ +
+
+ +
+
+
+ Resize canvas + Lock/hide mouse + pointer     + +
+ +
+ +
+ + {{{ SCRIPT }}} + + diff --git a/src/executables/meson.build b/src/executables/meson.build index c911b8e57..bda24c0d1 100644 --- a/src/executables/meson.build +++ b/src/executables/meson.build @@ -57,7 +57,11 @@ if build_application APP_ROMFS = APP_ROMFS + '/' endif - emscripten_link_args += ['--preload-file', APP_ROMFS + '@/assets/'] + emscripten_link_args += [ + '--preload-file', APP_ROMFS + '@/assets/', + # based on: https://github.com/emscripten-core/emscripten/blob/main/src/shell_minimal.html + '--shell-file', meson.project_source_root() / 'platforms' / 'emscripten' / 'shell_file.html', + ] endif From 1799b2e423d4ac0e53f2faa8c6a1b2b868cf1b4d Mon Sep 17 00:00:00 2001 From: Totto16 Date: Tue, 19 Nov 2024 12:25:51 +0100 Subject: [PATCH 35/37] ci: fix lint and clang-tidy errors --- .github/workflows/lint.yml | 2 +- src/executables/game/application.hpp | 4 ++++ src/graphics/text.hpp | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index e8ce781d3..ad4814afe 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -52,7 +52,7 @@ jobs: tidy-checks: '' step-summary: true file-annotations: true - ignore: subprojects|build|android|assets|recordings|docs|toolchains|platforms|wrapper|src/libs/core/hash-library|tests|src/lobby/curl_client.* + ignore: subprojects|build|android|assets|recordings|docs|toolchains|platforms|wrapper|src/libs/core/hash-library|tests|src/helper/web_utils.*|src/lobby/web_client.*|src/lobby/curl_client.* - name: Fail CI run if linter checks failed if: steps.linter.outputs.checks-failed != 0 diff --git a/src/executables/game/application.hpp b/src/executables/game/application.hpp index 3e0dc7391..9fcaf01d9 100644 --- a/src/executables/game/application.hpp +++ b/src/executables/game/application.hpp @@ -137,9 +137,13 @@ struct Application final : public EventListener, public ServiceProvider { public: Application(std::shared_ptr&& window, CommandLineArguments&& arguments); + Application(const Application&) = delete; Application& operator=(const Application&) = delete; + Application(Application&& other) noexcept = delete; + Application& operator=(Application&& other) noexcept = delete; + void run(); void handle_event(const SDL_Event& event) override; diff --git a/src/graphics/text.hpp b/src/graphics/text.hpp index f4eba655a..20884900f 100644 --- a/src/graphics/text.hpp +++ b/src/graphics/text.hpp @@ -8,7 +8,7 @@ #include "rect.hpp" #include "texture.hpp" -//TODO: set this flag in the build system, or maybe also fix https://github.com/OpenBrickProtocolFoundation/oopetris/issues/132 in the process +//TODO(Totto): set this flag in the build system, or maybe also fix https://github.com/OpenBrickProtocolFoundation/oopetris/issues/132 in the process #if defined(__EMSCRIPTEN__) #define OOPETRIS_DONT_USE_PRERENDERED_TEXT #endif From ec22863aa28f089c4403ae6f5dccbe0845c9472e Mon Sep 17 00:00:00 2001 From: "Totto16 (Windows VM)" Date: Tue, 19 Nov 2024 13:02:03 +0100 Subject: [PATCH 36/37] fix: windows, define WIN32_LEAN_AND_MEAN so that windows.h behaves correctly --- src/discord/core.hpp | 3 +++ src/libs/core/helper/sleep.cpp | 3 +++ 2 files changed, 6 insertions(+) diff --git a/src/discord/core.hpp b/src/discord/core.hpp index 2e00b567b..9d41062c8 100644 --- a/src/discord/core.hpp +++ b/src/discord/core.hpp @@ -12,6 +12,9 @@ #ifndef NOMINMAX #define NOMINMAX #endif +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif #endif #include diff --git a/src/libs/core/helper/sleep.cpp b/src/libs/core/helper/sleep.cpp index 5609fd6b0..1d9f76936 100644 --- a/src/libs/core/helper/sleep.cpp +++ b/src/libs/core/helper/sleep.cpp @@ -7,6 +7,9 @@ #ifndef NOMINMAX #define NOMINMAX #endif +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif #include #else #include From 90654f6122a988746d5716ed895cd6df3d7d82ad Mon Sep 17 00:00:00 2001 From: Totto16 Date: Tue, 19 Nov 2024 13:09:20 +0100 Subject: [PATCH 37/37] fix: fix the application class, add a default destructor and move functions to cpp --- src/executables/game/application.cpp | 72 ++++++++++++++++++++++++++++ src/executables/game/application.hpp | 72 ++++++++-------------------- 2 files changed, 91 insertions(+), 53 deletions(-) diff --git a/src/executables/game/application.cpp b/src/executables/game/application.cpp index 58f7a3af4..605b6a5eb 100644 --- a/src/executables/game/application.cpp +++ b/src/executables/game/application.cpp @@ -120,6 +120,8 @@ Application::Application(std::shared_ptr&& window, CommandLineArguments& } } +Application::~Application() = default; + #if defined(__EMSCRIPTEN__) void c_loop_entry(void* arg) { auto application = reinterpret_cast(arg); @@ -624,3 +626,73 @@ void Application::reload_api(const settings::Settings& settings) { spdlog::info("No lobby API provided"); } } + + +void Application::push_scene(std::unique_ptr scene) { + m_scene_stack.push_back(std::move(scene)); +} + +// implementation of ServiceProvider +[[nodiscard]] EventDispatcher& Application::event_dispatcher() { + return m_event_dispatcher; +} + +[[nodiscard]] const EventDispatcher& Application::event_dispatcher() const { + return m_event_dispatcher; +} + +FontManager& Application::font_manager() { + return *m_font_manager; +} + +[[nodiscard]] const FontManager& Application::font_manager() const { + return *m_font_manager; +} + +CommandLineArguments& Application::command_line_arguments() { + return m_command_line_arguments; +} + +[[nodiscard]] const CommandLineArguments& Application::command_line_arguments() const { + return m_command_line_arguments; +} + +SettingsManager& Application::settings_manager() { + return *m_settings_manager; +} + +[[nodiscard]] const SettingsManager& Application::settings_manager() const { + return *m_settings_manager; +} + +MusicManager& Application::music_manager() { + return *m_music_manager; +} + +[[nodiscard]] const MusicManager& Application::music_manager() const { + return *m_music_manager; +} + +[[nodiscard]] const Renderer& Application::renderer() const { + return m_renderer; +} + +[[nodiscard]] const Window& Application::window() const { + return *m_window; +} + +[[nodiscard]] Window& Application::window() { + return *m_window; +} + +[[nodiscard]] input::InputManager& Application::input_manager() { + return *m_input_manager; +} + +[[nodiscard]] const input::InputManager& Application::input_manager() const { + return *m_input_manager; +} + +[[nodiscard]] const std::unique_ptr& Application::api() const { + return m_api; +} diff --git a/src/executables/game/application.hpp b/src/executables/game/application.hpp index 9fcaf01d9..6eb3a39da 100644 --- a/src/executables/game/application.hpp +++ b/src/executables/game/application.hpp @@ -144,6 +144,8 @@ struct Application final : public EventListener, public ServiceProvider { Application(Application&& other) noexcept = delete; Application& operator=(Application&& other) noexcept = delete; + ~Application(); + void run(); void handle_event(const SDL_Event& event) override; @@ -158,76 +160,40 @@ struct Application final : public EventListener, public ServiceProvider { void emscripten_do_process(); #endif - //TODO(Totto): move those functions bodies to the cpp - - void push_scene(std::unique_ptr scene) { - m_scene_stack.push_back(std::move(scene)); - } + void push_scene(std::unique_ptr scene); // implementation of ServiceProvider - [[nodiscard]] EventDispatcher& event_dispatcher() override { - return m_event_dispatcher; - } + [[nodiscard]] EventDispatcher& event_dispatcher() override; - [[nodiscard]] const EventDispatcher& event_dispatcher() const override { - return m_event_dispatcher; - } + [[nodiscard]] const EventDispatcher& event_dispatcher() const override; - FontManager& font_manager() override { - return *m_font_manager; - } + FontManager& font_manager() override; - [[nodiscard]] const FontManager& font_manager() const override { - return *m_font_manager; - } + [[nodiscard]] const FontManager& font_manager() const override; - CommandLineArguments& command_line_arguments() override { - return m_command_line_arguments; - } + CommandLineArguments& command_line_arguments() override; - [[nodiscard]] const CommandLineArguments& command_line_arguments() const override { - return m_command_line_arguments; - } + [[nodiscard]] const CommandLineArguments& command_line_arguments() const override; - SettingsManager& settings_manager() override { - return *m_settings_manager; - } + SettingsManager& settings_manager() override; - [[nodiscard]] const SettingsManager& settings_manager() const override { - return *m_settings_manager; - } + [[nodiscard]] const SettingsManager& settings_manager() const override; - MusicManager& music_manager() override { - return *m_music_manager; - } + MusicManager& music_manager() override; - [[nodiscard]] const MusicManager& music_manager() const override { - return *m_music_manager; - } + [[nodiscard]] const MusicManager& music_manager() const override; - [[nodiscard]] const Renderer& renderer() const override { - return m_renderer; - } + [[nodiscard]] const Renderer& renderer() const override; - [[nodiscard]] const Window& window() const override { - return *m_window; - } + [[nodiscard]] const Window& window() const override; - [[nodiscard]] Window& window() override { - return *m_window; - } + [[nodiscard]] Window& window() override; - [[nodiscard]] input::InputManager& input_manager() override { - return *m_input_manager; - } + [[nodiscard]] input::InputManager& input_manager() override; - [[nodiscard]] const input::InputManager& input_manager() const override { - return *m_input_manager; - } + [[nodiscard]] const input::InputManager& input_manager() const override; - [[nodiscard]] const std::unique_ptr& api() const override { - return m_api; - } + [[nodiscard]] const std::unique_ptr& api() const override; #if defined(_HAVE_DISCORD_SDK)