From deeb5acb563246f9b747229636205c5b19b99839 Mon Sep 17 00:00:00 2001 From: Richard Geldreich Date: Fri, 28 Jan 2022 08:32:54 -0500 Subject: [PATCH] v1.16 release: OpenCL support, removing global selector palette code (it was unused/dead code), ETC1S encoding optimizations, -parallel command line option --- .gitignore | 1 - .reuse/dep5 | 21 +- CMakeLists.txt | 62 +- basisu.vcxproj | 49 +- basisu.vcxproj.filters | 45 +- basisu_tool.cpp | 1073 ++- contrib/previewers/lib/basisu_transcoder.cpp | 8575 ++++++++++++++--- contrib/previewers/win/basisthumbprovider.cpp | 9 +- contrib/previewers/win/previewers.vcxproj | 1 - .../previewers/win/previewers.vcxproj.filters | 3 - .../create_transcoder.sh | 2 +- .../examples/simple.cpp | 10 +- encoder/basisu_backend.cpp | 651 +- encoder/basisu_backend.h | 99 +- encoder/basisu_comp.cpp | 928 +- encoder/basisu_comp.h | 169 +- encoder/basisu_enc.cpp | 220 +- encoder/basisu_enc.h | 396 +- encoder/basisu_etc.cpp | 17 + encoder/basisu_etc.h | 29 + encoder/basisu_frontend.cpp | 1913 ++-- encoder/basisu_frontend.h | 45 +- encoder/basisu_gpu_texture.cpp | 6 + encoder/basisu_kernels_declares.h | 2 + encoder/basisu_kernels_imp.h | 63 + encoder/basisu_miniz.h | 19 +- encoder/basisu_uastc_enc.cpp | 24 +- encoder/cppspmd_sse.h | 23 +- encoder/jpgd.cpp | 11 - transcoder/basisu.h | 10 + transcoder/basisu_containers.h | 73 +- transcoder/basisu_containers_impl.h | 8 +- transcoder/basisu_transcoder.cpp | 269 +- transcoder/basisu_transcoder.h | 15 +- transcoder/basisu_transcoder_internal.h | 24 +- webgl/encoder/CMakeLists.txt | 6 +- webgl/encoder/build/basis_encoder.js | 13 +- webgl/encoder/build/basis_encoder.wasm | Bin 1558390 -> 1462787 bytes webgl/transcoder/basis_wrappers.cpp | 28 +- webgl/transcoder/build/basis_transcoder.js | 13 +- webgl/transcoder/build/basis_transcoder.wasm | Bin 499935 -> 472888 bytes webgl_videotest/basis.js | 2 +- webgl_videotest/basis.wasm | Bin 629569 -> 600636 bytes webgl_videotest/basis_wrappers.cpp | 7 +- webgl_videotest/build.sh | 2 +- webgl_videotest/index.html | 2 +- 46 files changed, 11328 insertions(+), 3610 deletions(-) diff --git a/.gitignore b/.gitignore index 6f256e5..149177e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,3 @@ -bin/ build/ # VS project and working files diff --git a/.reuse/dep5 b/.reuse/dep5 index 4b48c6c..0884014 100644 --- a/.reuse/dep5 +++ b/.reuse/dep5 @@ -7,22 +7,11 @@ Files: * Copyright: 2019-2021 Binomial LLC License: Apache-2.0 -Files: encoder/apg_bmp.* -Copyright: 2019 Anton Gerdelan -License: Apache-2.0 - -Files: encoder/basisu_astc_decomp.* -Copyright: 2016 The Android Open Source Project -License: Apache-2.0 - -Files: encoder/cppspmd_sse.h -Copyright: Copyright 2016 Nicolas Guillemot -License: Apache-2.0 - -Files: encoder/lodepng.* -Copyright: 2005-2019 Lode Vandevenne -License: Zlib - Files: zstd/* Copyright: 2016-present, Facebook, Inc. License: BSD + +Files: OpenCL/* +Copyright: Copyright (c) 2008-2020 The Khronos Group Inc. +License: Apache-2.0 + diff --git a/CMakeLists.txt b/CMakeLists.txt index 78dd110..2803e7f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,15 +1,38 @@ project(basisu) cmake_minimum_required(VERSION 3.0) -option(BUILD_X64 "build 64-bit" TRUE) option(STATIC "static linking" FALSE) -option(SSE "SSE 4.1 support" FALSE) + +# For MSVC builds default to SSE enabled, and determine if it's a 64-bit (-A x64) vs. 32-bit (-A Win32) build. +if (MSVC) + option(SSE "SSE 4.1 support" TRUE) + if ( CMAKE_GENERATOR_PLATFORM STREQUAL Win32 ) + set(BUILD_X64 0) + else() + set(BUILD_X64 1) + endif() +else() + option(SSE "SSE 4.1 support" FALSE) + option(BUILD_X64 "build 64-bit" TRUE) +endif() + option(ZSTD "ZSTD support for KTX2 transcoding/encoding" TRUE) +option(OPENCL "OpenCL support in encoder" FALSE) message("Initial BUILD_X64=${BUILD_X64}") message("Initial CMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}") message("Initial SSE=${SSE}") message("Initial ZSTD=${ZSTD}") +message("Initial OPENCL=${OPENCL}") + +if (NOT MSVC) + # With MSVC builds we use the Khronos lib/include files in the project's "OpenCL" directory, to completely avoid requiring fiddly to install vendor SDK's. + # Otherwise we use the system's (if any). + find_package( OpenCL ) + message(STATUS "OpenCL found: ${OPENCL_FOUND}") + message(STATUS "OpenCL includes: ${OpenCL_INCLUDE_DIRS}") + message(STATUS "OpenCL libraries: ${OpenCL_LIBRARIES}") +endif() if( NOT CMAKE_BUILD_TYPE ) set( CMAKE_BUILD_TYPE Release ) @@ -101,19 +124,17 @@ set(BASISU_SRC_LIST ${COMMON_SRC_LIST} encoder/basisu_enc.cpp encoder/basisu_etc.cpp encoder/basisu_frontend.cpp - encoder/basisu_global_selector_palette_helpers.cpp encoder/basisu_gpu_texture.cpp encoder/basisu_pvrtc1_4.cpp encoder/basisu_resampler.cpp encoder/basisu_resample_filters.cpp encoder/basisu_ssim.cpp - encoder/basisu_astc_decomp.cpp encoder/basisu_uastc_enc.cpp encoder/basisu_bc7enc.cpp - encoder/lodepng.cpp - encoder/apg_bmp.c encoder/jpgd.cpp encoder/basisu_kernels_sse.cpp + encoder/basisu_opencl.cpp + encoder/pvpngreader.cpp transcoder/basisu_transcoder.cpp ) @@ -138,7 +159,34 @@ else() endif() if (NOT MSVC) - target_link_libraries(basisu m pthread) + # For Non-Windows builds, let cmake try and find the system OpenCL headers/libs for us. + if (OPENCL_FOUND) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DBASISU_SUPPORT_OPENCL=1") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DBASISU_SUPPORT_OPENCL=1") + + target_include_directories( basisu PRIVATE ${OpenCL_INCLUDE_DIRS} ) + set(BASISU_EXTRA_LIBS ${OpenCL_LIBRARIES}) + endif() + +else() + # For Windows builds, we use our local copies of the OpenCL import lib and Khronos headers. + if (OPENCL) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DBASISU_SUPPORT_OPENCL=1") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DBASISU_SUPPORT_OPENCL=1") + + target_include_directories( basisu PRIVATE "OpenCL" ) + + if ( BUILD_X64 ) + target_link_libraries( basisu PRIVATE "OpenCL/lib/OpenCL64" ) + else() + target_link_libraries( basisu PRIVATE "OpenCL/lib/OpenCL" ) + endif() + + endif() +endif() + +if (NOT MSVC) + target_link_libraries(basisu m pthread ${BASISU_EXTRA_LIBS}) endif() if (NOT EMSCRIPTEN) diff --git a/basisu.vcxproj b/basisu.vcxproj index cd889b1..182ed30 100644 --- a/basisu.vcxproj +++ b/basisu.vcxproj @@ -27,26 +27,26 @@ Application true - v142 + v143 MultiByte Application false - v142 + v143 true MultiByte Application true - v142 + v143 MultiByte Application false - v142 + v143 true MultiByte @@ -87,13 +87,14 @@ Disabled true true - - - _MBCS;%(PreprocessorDefinitions);BASISU_SUPPORT_SSE=1 + OpenCL + _MBCS;%(PreprocessorDefinitions);BASISU_SUPPORT_SSE=1;BASISU_SUPPORT_OPENCL=1 StreamingSIMDExtensions Console + OpenCL\lib + opencl.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) @@ -101,13 +102,15 @@ Level4 Disabled true - ispc_texcomp + OpenCL true true - _MBCS;%(PreprocessorDefinitions);BASISU_SUPPORT_SSE=1; + _MBCS;%(PreprocessorDefinitions);BASISU_SUPPORT_SSE=1;BASISU_SUPPORT_OPENCL=1 Console + OpenCL\lib + opencl64.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) @@ -117,9 +120,8 @@ true true true - - - NDEBUG;_HAS_EXCEPTIONS=0;%(PreprocessorDefinitions);BASISU_SUPPORT_SSE=1 + OpenCL + NDEBUG;_HAS_EXCEPTIONS=0;%(PreprocessorDefinitions);BASISU_SUPPORT_SSE=1;BASISU_SUPPORT_OPENCL=1 false AnySuitable StreamingSIMDExtensions @@ -131,6 +133,8 @@ true true Console + OpenCL\lib + opencl.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) @@ -139,8 +143,8 @@ Full true true - ispc_texcomp - NDEBUG;_HAS_EXCEPTIONS=0;%(PreprocessorDefinitions);BASISU_SUPPORT_SSE=1; + OpenCL + NDEBUG;_HAS_EXCEPTIONS=0;%(PreprocessorDefinitions);BASISU_SUPPORT_SSE=1;BASISU_SUPPORT_OPENCL=1 false true AnySuitable @@ -153,11 +157,11 @@ true true Console + OpenCL\lib + opencl64.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) - - @@ -165,21 +169,22 @@ - + - + + + + - - @@ -187,7 +192,6 @@ - @@ -203,19 +207,18 @@ - - + diff --git a/basisu.vcxproj.filters b/basisu.vcxproj.filters index 498c859..ee34dce 100644 --- a/basisu.vcxproj.filters +++ b/basisu.vcxproj.filters @@ -5,12 +5,6 @@ transcoder - - encoder - - - encoder - encoder @@ -32,9 +26,6 @@ encoder - - encoder - encoder @@ -50,9 +41,6 @@ encoder - - encoder - encoder @@ -65,11 +53,14 @@ encoder + + encoder + + + encoder + - - transcoder - transcoder @@ -82,12 +73,6 @@ transcoder - - encoder - - - encoder - encoder @@ -109,9 +94,6 @@ encoder - - encoder - encoder @@ -130,9 +112,6 @@ encoder - - encoder - encoder @@ -169,6 +148,15 @@ transcoder + + encoder + + + encoder + + + encoder + @@ -195,6 +183,9 @@ transcoder + + encoder + diff --git a/basisu_tool.cpp b/basisu_tool.cpp index 2447943..5fa31d0 100644 --- a/basisu_tool.cpp +++ b/basisu_tool.cpp @@ -1,5 +1,5 @@ -// basisu_tool.cpp -// Copyright (C) 2019-2021 Binomial LLC. All Rights Reserved. +// basisu_tool.cpp +// Copyright (C) 2019-2022 Binomial LLC. All Rights Reserved. // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at @@ -23,10 +23,10 @@ #include "encoder/basisu_gpu_texture.h" #include "encoder/basisu_frontend.h" #include "encoder/basisu_backend.h" -#include "transcoder/basisu_global_selector_palette.h" #include "encoder/basisu_comp.h" #include "transcoder/basisu_transcoder.h" #include "encoder/basisu_ssim.h" +#include "encoder/basisu_opencl.h" #define MINIZ_HEADER_FILE_ONLY #define MINIZ_NO_ZLIB_COMPATIBLE_NAMES @@ -40,7 +40,7 @@ using namespace basisu; using namespace buminiz; -#define BASISU_TOOL_VERSION "1.15" +#define BASISU_TOOL_VERSION "1.16" enum tool_mode { @@ -52,7 +52,10 @@ enum tool_mode cCompare, cVersion, cBench, - cCompSize + cCompSize, + cTest, + cSplitImage, + cCombineImages }; static void print_usage() @@ -74,14 +77,17 @@ static void print_usage() "Filenames prefixed with a @ symbol are read as filename listing files. Listing text files specify which actual filenames to process (one filename per line).\n" "\n" "Options:\n" + " -opencl: Enable OpenCL usage\n" + " -opencl_serialize: Serialize all calls to the OpenCL driver (to work around buggy drivers, only useful with -parallel)\n" + " -parallel: Compress multiple textures simumtanously (one per thread), instead of one at a time. Compatible with OpenCL mode. This is much faster, but in OpenCL mode the driver is pushed harder, and the CLI output will be jumbled.\n" " -ktx2: Write .KTX2 ETC1S/UASTC files instead of .basis files. By default, UASTC files will be compressed using Zstandard unless -ktx2_no_zstandard is specified.\n" " -ktx2_no_zstandard: Don't compress UASTC texture data using Zstandard, store it uncompressed instead.\n" " -ktx2_zstandard_level X: Set ZStandard compression level to X (see Zstandard documentation, default level is 6)\n" " -ktx2_animdata_duration X: Set KTX2animData duration field to integer value X (only valid/useful for -tex_type video, default is 1)\n" " -ktx2_animdata_timescale X: Set KTX2animData timescale field to integer value X (only valid/useful for -tex_type video, default is 15)\n" " -ktx2_animdata_loopcount X: Set KTX2animData loopcount field to integer value X (only valid/useful for -tex_type video, default is 0)\n" - " -file filename.png/bmp/tga/jpg: Input image filename, multiple images are OK, use -file X for each input filename (prefixing input filenames with -file is optional)\n" - " -alpha_file filename.png/bmp/tga/jpg: Input alpha image filename, multiple images are OK, use -file X for each input filename (must be paired with -file), images converted to REC709 grayscale and used as input alpha\n" + " -file filename.png/bmp/tga/jpg/qoi: Input image filename, multiple images are OK, use -file X for each input filename (prefixing input filenames with -file is optional)\n" + " -alpha_file filename.png/bmp/tga/jpg/qoi: Input alpha image filename, multiple images are OK, use -file X for each input filename (must be paired with -file), images converted to REC709 grayscale and used as input alpha\n" " -multifile_printf: printf() format strint to use to compose multiple filenames\n" " -multifile_first: The index of the first file to process, default is 0 (must specify -multifile_printf and -multifile_num)\n" " -multifile_num: The total number of files to process.\n" @@ -90,13 +96,15 @@ static void print_usage() " -output_file filename: Output .basis/.ktx filename\n" " -output_path: Output .basis/.ktx files to specified directory.\n" " -debug: Enable codec debug print to stdout (slightly slower).\n" + " -verbose: Same as -debug (debug output to stdout).\n" " -debug_images: Enable codec debug images (much slower).\n" " -stats: Compute and display image quality metrics (slightly slower).\n" " -tex_type <2d, 2darray, 3d, video, cubemap>: Set Basis file header's texture type field. Cubemap arrays require multiples of 6 images, in X+, X-, Y+, Y-, Z+, Z- order, each image must be the same resolutions.\n" " 2d=arbitrary 2D images, 2darray=2D array, 3D=volume texture slices, video=video frames, cubemap=array of faces. For 2darray/3d/cubemaps/video, each source image's dimensions and # of mipmap levels must be the same.\n" " For video, the .basis file will be written with the first frame being an I-Frame, and subsequent frames being P-Frames (using conditional replenishment). Playback must always occur in order from first to last image.\n" " -framerate X: Set framerate in .basis header to X/frames sec.\n" - " -individual: Process input images individually and output multiple .basis files (not as a texture array)\n" + " -individual: Process input images individually and output multiple .basis/.ktx2 files (not as a texture array - this is now the default as of v1.16)\n" + " -tex_array: Process input images as a single texture array and write a single .basis/.ktx2 file (the former default before v1.16)\n" " -comp_level X: Set ETC1S encoding speed vs. quality tradeoff. Range is 0-6, default is 1. Higher values=MUCH slower, but slightly higher quality. Higher levels intended for videos. Use -q first!\n" " -fuzz_testing: Use with -validate: Disables CRC16 validation of file contents before transcoding\n" "\nUASTC options:\n" @@ -112,6 +120,8 @@ static void print_usage() " -uastc_rdo_m: Disable RDO multithreading (slightly higher compression, deterministic).\n" "\n" "More options:\n" + " -test: Run an automated ETC1S/UASTC encoding and transcoding test. Returns EXIT_FAILURE if any failures\n" + " -test_dir: Optional directory of test files. Defaults to \"../test_files\".\n" " -max_endpoints X: Manually set the max number of color endpoint clusters from 1-16128, use instead of -q\n" " -max_selectors X: Manually set the max number of color selector clusters from 1-16128, use instead of -q\n" " -y_flip: Flip input images vertically before compression\n" @@ -122,7 +132,10 @@ static void print_usage() " -swizzle rgba: Specify swizzle for the 4 input color channels using r, g, b and a (the -separate_rg_to_color_alpha flag is equivalent to rrrg)\n" " -renorm: Renormalize each input image before any further processing/compression\n" " -no_multithreading: Disable multithreading\n" - " -no_ktx: Disable KTX writing when unpacking (faster)\n" + " -max_threads X: Use at most X threads total when multithreading is enabled (this includes the main thread)\n" + " -no_ktx: Disable KTX writing when unpacking (faster, less output files)\n" + " -ktx_only: Only write KTX files when unpacking (faster, less output files)\n" + " -write_out: Write 3dfx OUT files when unpacking FXT1 textures\n" " -etc1_only: Only unpack to ETC1, skipping the other texture formats during -unpack\n" " -disable_hierarchical_endpoint_codebooks: Disable hierarchical endpoint codebook usage, slower but higher quality on some compression levels\n" " -compare_ssim: Compute and display SSIM of image comparison (slow)\n" @@ -157,7 +170,7 @@ static void print_usage() " -userdata1 X: Set 32-bit userdata1 field in Basis file header to X (X is a signed 32-bit int)\n" "\n" "Various command line examples:\n" - " basisu x.png : Compress sRGB image x.png to x.basis using default settings (multiple filenames OK, use -individual if you don't want a tex array)\n" + " basisu x.png : Compress sRGB image x.png to x.basis using default settings (multiple filenames OK, use -tex_array if you want a tex array vs. multiple output files)\n" " basisu x.basis : Unpack x.basis to PNG/KTX files (multiple filenames OK)\n" " basisu -file x.png -mipmap -y_flip : Compress a mipmapped x.basis file from an sRGB image named x.png, Y flip each source image\n" " basisu -validate -file x.basis : Validate x.basis (check header, check file CRC's, attempt to transcode all slices)\n" @@ -268,14 +281,19 @@ public: m_ktx2_animdata_loopcount(0), m_multifile_first(0), m_multifile_num(0), - m_individual(false), + m_max_threads(1024), // surely this is high enough + m_individual(true), m_no_ktx(false), + m_ktx_only(false), + m_write_out(false), m_etc1_only(false), m_fuzz_testing(false), m_compare_ssim(false), - m_bench(false) + m_bench(false), + m_parallel_compression(false) { m_comp_params.m_compression_level = basisu::maximum(0, BASISU_DEFAULT_COMPRESSION_LEVEL - 1); + m_test_file_dir = "../test_files"; } bool parse(int arg_c, const char **arg_v) @@ -325,6 +343,10 @@ public: m_mode = cCompress; else if (strcasecmp(pArg, "-compare") == 0) m_mode = cCompare; + else if (strcasecmp(pArg, "-split") == 0) + m_mode = cSplitImage; + else if (strcasecmp(pArg, "-combine") == 0) + m_mode = cCombineImages; else if (strcasecmp(pArg, "-unpack") == 0) m_mode = cUnpack; else if (strcasecmp(pArg, "-validate") == 0) @@ -339,12 +361,24 @@ public: m_mode = cBench; else if (strcasecmp(pArg, "-comp_size") == 0) m_mode = cCompSize; + else if (strcasecmp(pArg, "-test") == 0) + m_mode = cTest; + else if (strcasecmp(pArg, "-test_dir") == 0) + { + REMAINING_ARGS_CHECK(1); + m_test_file_dir = std::string(arg_v[arg_index + 1]); + arg_count++; + } else if (strcasecmp(pArg, "-no_sse") == 0) { #if BASISU_SUPPORT_SSE g_cpu_supports_sse41 = false; #endif } + else if (strcasecmp(pArg, "-no_status_output") == 0) + { + m_comp_params.m_status_output = false; + } else if (strcasecmp(pArg, "-file") == 0) { REMAINING_ARGS_CHECK(1); @@ -457,14 +491,18 @@ public: m_output_path = arg_v[arg_index + 1]; arg_count++; } - else if (strcasecmp(pArg, "-debug") == 0) + else if ((strcasecmp(pArg, "-debug") == 0) || (strcasecmp(pArg, "-verbose") == 0)) { m_comp_params.m_debug = true; enable_debug_printf(true); } else if (strcasecmp(pArg, "-validate_etc1s") == 0) { - m_comp_params.m_validate = true; + m_comp_params.m_validate_etc1s = true; + } + else if (strcasecmp(pArg, "-validate_output") == 0) + { + m_comp_params.m_validate_output_data = true; } else if (strcasecmp(pArg, "-debug_images") == 0) m_comp_params.m_debug_images = true; @@ -557,14 +595,35 @@ public: { m_comp_params.m_multithreading = false; } + else if (strcasecmp(pArg, "-parallel") == 0) + { + m_parallel_compression = true; + } + else if (strcasecmp(pArg, "-max_threads") == 0) + { + REMAINING_ARGS_CHECK(1); + m_max_threads = atoi(arg_v[arg_index + 1]); + arg_count++; + } else if (strcasecmp(pArg, "-mipmap") == 0) m_comp_params.m_mip_gen = true; else if (strcasecmp(pArg, "-no_ktx") == 0) m_no_ktx = true; + else if (strcasecmp(pArg, "-ktx_only") == 0) + m_ktx_only = true; + else if (strcasecmp(pArg, "-write_out") == 0) + m_write_out = true; else if (strcasecmp(pArg, "-etc1_only") == 0) m_etc1_only = true; else if (strcasecmp(pArg, "-disable_hierarchical_endpoint_codebooks") == 0) m_comp_params.m_disable_hierarchical_endpoint_codebooks = true; + else if (strcasecmp(pArg, "-opencl") == 0) + { + m_comp_params.m_use_opencl = true; + } + else if (strcasecmp(pArg, "-opencl_serialize") == 0) + { + } else if (strcasecmp(pArg, "-mip_scale") == 0) { REMAINING_ARGS_CHECK(1); @@ -612,32 +671,6 @@ public: m_comp_params.m_endpoint_rdo_thresh = (float)atof(arg_v[arg_index + 1]); arg_count++; } - else if (strcasecmp(pArg, "-global_sel_pal") == 0) - m_comp_params.m_global_sel_pal = true; - else if (strcasecmp(pArg, "-no_auto_global_sel_pal") == 0) - m_comp_params.m_auto_global_sel_pal = false; - else if (strcasecmp(pArg, "-auto_global_sel_pal") == 0) - m_comp_params.m_auto_global_sel_pal = true; - else if (strcasecmp(pArg, "-global_pal_bits") == 0) - { - REMAINING_ARGS_CHECK(1); - m_comp_params.m_global_pal_bits = atoi(arg_v[arg_index + 1]); - arg_count++; - } - else if (strcasecmp(pArg, "-global_mod_bits") == 0) - { - REMAINING_ARGS_CHECK(1); - m_comp_params.m_global_mod_bits = atoi(arg_v[arg_index + 1]); - arg_count++; - } - else if (strcasecmp(pArg, "-no_hybrid_sel_cb") == 0) - m_comp_params.m_no_hybrid_sel_cb = true; - else if (strcasecmp(pArg, "-hybrid_sel_cb_quality_thresh") == 0) - { - REMAINING_ARGS_CHECK(1); - m_comp_params.m_hybrid_sel_cb_quality_thresh = (float)atof(arg_v[arg_index + 1]); - arg_count++; - } else if (strcasecmp(pArg, "-userdata0") == 0) { REMAINING_ARGS_CHECK(1); @@ -664,17 +697,23 @@ public: else if (strcasecmp(pArg, "-tex_type") == 0) { REMAINING_ARGS_CHECK(1); - const char *pType = arg_v[arg_index + 1]; + const char* pType = arg_v[arg_index + 1]; if (strcasecmp(pType, "2d") == 0) m_comp_params.m_tex_type = basist::cBASISTexType2D; else if (strcasecmp(pType, "2darray") == 0) + { m_comp_params.m_tex_type = basist::cBASISTexType2DArray; + m_individual = false; + } else if (strcasecmp(pType, "3d") == 0) m_comp_params.m_tex_type = basist::cBASISTexTypeVolume; else if (strcasecmp(pType, "cubemap") == 0) m_comp_params.m_tex_type = basist::cBASISTexTypeCubemapArray; else if (strcasecmp(pType, "video") == 0) + { m_comp_params.m_tex_type = basist::cBASISTexTypeVideoFrames; + m_individual = false; + } else { error_printf("Invalid texture type: %s\n", pType); @@ -684,6 +723,8 @@ public: } else if (strcasecmp(pArg, "-individual") == 0) m_individual = true; + else if (strcasecmp(pArg, "-tex_array") == 0) + m_individual = false; else if (strcasecmp(pArg, "-fuzz_testing") == 0) m_fuzz_testing = true; else if (strcasecmp(pArg, "-csv_file") == 0) @@ -789,12 +830,20 @@ public: std::string m_csv_file; std::string m_etc1s_use_global_codebooks_file; + + std::string m_test_file_dir; + + uint32_t m_max_threads; + bool m_individual; bool m_no_ktx; + bool m_ktx_only; + bool m_write_out; bool m_etc1_only; bool m_fuzz_testing; bool m_compare_ssim; bool m_bench; + bool m_parallel_compression; }; static bool expand_multifile(command_line_params &opts) @@ -838,17 +887,17 @@ static bool expand_multifile(command_line_params &opts) struct basis_data { - basis_data(basist::etc1_global_selector_codebook& sel_codebook) : - m_transcoder(&sel_codebook) + basis_data() : + m_transcoder() { } uint8_vec m_file_data; basist::basisu_transcoder m_transcoder; }; -static basis_data *load_basis_file(const char *pInput_filename, basist::etc1_global_selector_codebook &sel_codebook, bool force_etc1s) +static basis_data *load_basis_file(const char *pInput_filename, bool force_etc1s) { - basis_data* p = new basis_data(sel_codebook); + basis_data* p = new basis_data; uint8_vec &basis_data = p->m_file_data; if (!basisu::read_file_to_vec(pInput_filename, basis_data)) { @@ -889,19 +938,21 @@ static basis_data *load_basis_file(const char *pInput_filename, basist::etc1_glo static bool compress_mode(command_line_params &opts) { - basist::etc1_global_selector_codebook sel_codebook(basist::g_global_selector_cb_size, basist::g_global_selector_cb); - uint32_t num_threads = 1; if (opts.m_comp_params.m_multithreading) { + // We use std::thread::hardware_concurrency() as a hint to determine the default # of threads to put into a pool. num_threads = std::thread::hardware_concurrency(); if (num_threads < 1) num_threads = 1; + if (num_threads > opts.m_max_threads) + num_threads = opts.m_max_threads; } - job_pool jpool(num_threads); - opts.m_comp_params.m_pJob_pool = &jpool; + job_pool compressor_jpool(opts.m_parallel_compression ? 1 : num_threads); + if (!opts.m_parallel_compression) + opts.m_comp_params.m_pJob_pool = &compressor_jpool; if (!expand_multifile(opts)) { @@ -918,7 +969,7 @@ static bool compress_mode(command_line_params &opts) basis_data* pGlobal_codebook_data = nullptr; if (opts.m_etc1s_use_global_codebooks_file.size()) { - pGlobal_codebook_data = load_basis_file(opts.m_etc1s_use_global_codebooks_file.c_str(), sel_codebook, true); + pGlobal_codebook_data = load_basis_file(opts.m_etc1s_use_global_codebooks_file.c_str(), true); if (!pGlobal_codebook_data) return false; @@ -998,7 +1049,6 @@ static bool compress_mode(command_line_params &opts) params.m_read_source_images = true; params.m_write_output_basis_files = true; - params.m_pSel_codebook = &sel_codebook; params.m_pGlobal_codebooks = pGlobal_codebook_data ? &pGlobal_codebook_data->m_transcoder.get_lowlevel_etc1s_decoder() : nullptr; FILE *pCSV_file = nullptr; if (opts.m_csv_file.size()) @@ -1019,7 +1069,11 @@ static bool compress_mode(command_line_params &opts) interval_timer all_tm; all_tm.start(); + basisu::vector comp_params_vec; + const size_t total_files = (opts.m_individual ? opts.m_input_filenames.size() : 1U); + bool result = true; + for (size_t file_index = 0; file_index < total_files; file_index++) { if (opts.m_individual) @@ -1027,18 +1081,20 @@ static bool compress_mode(command_line_params &opts) params.m_source_filenames.resize(1); params.m_source_filenames[0] = opts.m_input_filenames[file_index]; - if (file_index < opts.m_input_alpha_filenames.size()) + if (file_index < opts.m_input_alpha_filenames.size()) { params.m_source_alpha_filenames.resize(1); params.m_source_alpha_filenames[0] = opts.m_input_alpha_filenames[file_index]; - - printf("Processing source file \"%s\", alpha file \"%s\"\n", params.m_source_filenames[0].c_str(), params.m_source_alpha_filenames[0].c_str()); + + if (params.m_status_output) + printf("Processing source file \"%s\", alpha file \"%s\"\n", params.m_source_filenames[0].c_str(), params.m_source_alpha_filenames[0].c_str()); } else { params.m_source_alpha_filenames.resize(0); - - printf("Processing source file \"%s\"\n", params.m_source_filenames[0].c_str()); + + if (params.m_status_output) + printf("Processing source file \"%s\"\n", params.m_source_filenames[0].c_str()); } } else @@ -1046,16 +1102,16 @@ static bool compress_mode(command_line_params &opts) params.m_source_filenames = opts.m_input_filenames; params.m_source_alpha_filenames = opts.m_input_alpha_filenames; } - + if ((opts.m_output_filename.size()) && (!opts.m_individual)) params.m_out_filename = opts.m_output_filename; - else + else { std::string filename; - + string_get_filename(opts.m_input_filenames[file_index].c_str(), filename); string_remove_extension(filename); - + if (opts.m_ktx2_mode) filename += ".ktx2"; else @@ -1063,49 +1119,65 @@ static bool compress_mode(command_line_params &opts) if (opts.m_output_path.size()) string_combine_path(filename, opts.m_output_path.c_str(), filename.c_str()); - + params.m_out_filename = filename; } - - basis_compressor c; - if (!c.init(opts.m_comp_params)) + if (opts.m_parallel_compression) { - error_printf("basis_compressor::init() failed!\n"); - - if (pCSV_file) - { - fclose(pCSV_file); - pCSV_file = nullptr; - } - - delete pGlobal_codebook_data; pGlobal_codebook_data = nullptr; - return false; - } - - interval_timer tm; - tm.start(); - - basis_compressor::error_code ec = c.process(); - - tm.stop(); - - if (ec == basis_compressor::cECSuccess) - { - printf("Compression succeeded to file \"%s\" size %u bytes in %3.3f secs\n", params.m_out_filename.c_str(), - opts.m_ktx2_mode ? c.get_output_ktx2_file().size() : c.get_output_basis_file().size(), - tm.get_elapsed_secs()); + comp_params_vec.push_back(params); } else { - bool exit_flag = true; + basis_compressor c; - switch (ec) + if (!c.init(opts.m_comp_params)) { + error_printf("basis_compressor::init() failed!\n"); + + if (pCSV_file) + { + fclose(pCSV_file); + pCSV_file = nullptr; + } + + delete pGlobal_codebook_data; pGlobal_codebook_data = nullptr; + return false; + } + + interval_timer tm; + tm.start(); + + basis_compressor::error_code ec = c.process(); + + tm.stop(); + + if (ec == basis_compressor::cECSuccess) + { + if (params.m_status_output) + { + printf("Compression succeeded to file \"%s\" size %u bytes in %3.3f secs\n", params.m_out_filename.c_str(), + opts.m_ktx2_mode ? c.get_output_ktx2_file().size() : c.get_output_basis_file().size(), + tm.get_elapsed_secs()); + } + } + else + { + result = false; + + if (!params.m_status_output) + { + error_printf("Compression failed on file \"%s\"\n", params.m_out_filename.c_str()); + } + + bool exit_flag = true; + + switch (ec) + { case basis_compressor::cECFailedReadingSourceImages: { error_printf("Compressor failed reading a source image!\n"); - + if (opts.m_individual) exit_flag = false; @@ -1141,85 +1213,104 @@ static bool compress_mode(command_line_params &opts) default: error_printf("basis_compress::process() failed!\n"); break; - } - - if (exit_flag) - { - if (pCSV_file) - { - fclose(pCSV_file); - pCSV_file = nullptr; } - delete pGlobal_codebook_data; pGlobal_codebook_data = nullptr; - return false; - } - } - - if ((pCSV_file) && (c.get_stats().size())) - { -#if 0 - for (size_t slice_index = 0; slice_index < c.get_stats().size(); slice_index++) - { - fprintf(pCSV_file, "\"%s\", %u, %u, %u, %u, %u, %f, %f, %f, %f, %f, %u, %u, %f\n", - params.m_out_filename.c_str(), - (uint32_t)slice_index, (uint32_t)c.get_stats().size(), - c.get_stats()[slice_index].m_width, c.get_stats()[slice_index].m_height, (uint32_t)c.get_any_source_image_has_alpha(), - c.get_basis_bits_per_texel(), - c.get_stats()[slice_index].m_basis_rgb_avg_psnr, - c.get_stats()[slice_index].m_basis_rgba_avg_psnr, - c.get_stats()[slice_index].m_basis_luma_709_psnr, - c.get_stats()[slice_index].m_best_etc1s_luma_709_psnr, - params.m_quality_level, (int)params.m_compression_level, tm.get_elapsed_secs()); - fflush(pCSV_file); - } -#else - if (c.get_stats().size()) - { - float rgb_avg_psnr_min = 1e+9f, rgb_avg_psnr_avg = 0.0f; - float a_avg_psnr_min = 1e+9f, a_avg_psnr_avg = 0.0f; - float luma_709_psnr_min = 1e+9f, luma_709_psnr_avg = 0.0f; - - for (size_t slice_index = 0; slice_index < c.get_stats().size(); slice_index++) + if (exit_flag) { - rgb_avg_psnr_min = basisu::minimum(rgb_avg_psnr_min, c.get_stats()[slice_index].m_basis_rgb_avg_psnr); - rgb_avg_psnr_avg += c.get_stats()[slice_index].m_basis_rgb_avg_psnr; + if (pCSV_file) + { + fclose(pCSV_file); + pCSV_file = nullptr; + } - a_avg_psnr_min = basisu::minimum(a_avg_psnr_min, c.get_stats()[slice_index].m_basis_a_avg_psnr); - a_avg_psnr_avg += c.get_stats()[slice_index].m_basis_a_avg_psnr; - - luma_709_psnr_min = basisu::minimum(luma_709_psnr_min, c.get_stats()[slice_index].m_basis_luma_709_psnr); - luma_709_psnr_avg += c.get_stats()[slice_index].m_basis_luma_709_psnr; + delete pGlobal_codebook_data; pGlobal_codebook_data = nullptr; + return false; } - - rgb_avg_psnr_avg /= c.get_stats().size(); - a_avg_psnr_avg /= c.get_stats().size(); - luma_709_psnr_avg /= c.get_stats().size(); - - fprintf(pCSV_file, "\"%s\", %u, %u, %u, %u, %u, %f, %f, %f, %f, %f, %u, %u, %f, %f, %f, %f, %f, %f, %f\n", - params.m_out_filename.c_str(), - c.get_basis_file_size(), - (uint32_t)c.get_stats().size(), - c.get_stats()[0].m_width, c.get_stats()[0].m_height, (uint32_t)c.get_any_source_image_has_alpha(), - c.get_basis_bits_per_texel(), - c.get_stats()[0].m_basis_rgb_avg_psnr, - c.get_stats()[0].m_basis_rgba_avg_psnr, - c.get_stats()[0].m_basis_luma_709_psnr, - c.get_stats()[0].m_best_etc1s_luma_709_psnr, - params.m_quality_level, (int)params.m_compression_level, tm.get_elapsed_secs(), - rgb_avg_psnr_min, rgb_avg_psnr_avg, - a_avg_psnr_min, a_avg_psnr_avg, - luma_709_psnr_min, luma_709_psnr_avg); - fflush(pCSV_file); } -#endif - } - - if (opts.m_individual) - printf("\n"); + + if ((pCSV_file) && (c.get_stats().size())) + { + if (c.get_stats().size()) + { + float rgb_avg_psnr_min = 1e+9f, rgb_avg_psnr_avg = 0.0f; + float a_avg_psnr_min = 1e+9f, a_avg_psnr_avg = 0.0f; + float luma_709_psnr_min = 1e+9f, luma_709_psnr_avg = 0.0f; + + for (size_t slice_index = 0; slice_index < c.get_stats().size(); slice_index++) + { + rgb_avg_psnr_min = basisu::minimum(rgb_avg_psnr_min, c.get_stats()[slice_index].m_basis_rgb_avg_psnr); + rgb_avg_psnr_avg += c.get_stats()[slice_index].m_basis_rgb_avg_psnr; + + a_avg_psnr_min = basisu::minimum(a_avg_psnr_min, c.get_stats()[slice_index].m_basis_a_avg_psnr); + a_avg_psnr_avg += c.get_stats()[slice_index].m_basis_a_avg_psnr; + + luma_709_psnr_min = basisu::minimum(luma_709_psnr_min, c.get_stats()[slice_index].m_basis_luma_709_psnr); + luma_709_psnr_avg += c.get_stats()[slice_index].m_basis_luma_709_psnr; + } + + rgb_avg_psnr_avg /= c.get_stats().size(); + a_avg_psnr_avg /= c.get_stats().size(); + luma_709_psnr_avg /= c.get_stats().size(); + + fprintf(pCSV_file, "\"%s\", %u, %u, %u, %u, %u, %f, %f, %f, %f, %f, %u, %u, %f, %f, %f, %f, %f, %f, %f\n", + params.m_out_filename.c_str(), + c.get_basis_file_size(), + (uint32_t)c.get_stats().size(), + c.get_stats()[0].m_width, c.get_stats()[0].m_height, (uint32_t)c.get_any_source_image_has_alpha(), + c.get_basis_bits_per_texel(), + c.get_stats()[0].m_basis_rgb_avg_psnr, + c.get_stats()[0].m_basis_rgba_avg_psnr, + c.get_stats()[0].m_basis_luma_709_psnr, + c.get_stats()[0].m_best_etc1s_luma_709_psnr, + params.m_quality_level, (int)params.m_compression_level, tm.get_elapsed_secs(), + rgb_avg_psnr_min, rgb_avg_psnr_avg, + a_avg_psnr_min, a_avg_psnr_avg, + luma_709_psnr_min, luma_709_psnr_avg); + fflush(pCSV_file); + } + } + + //if ((opts.m_individual) && (params.m_status_output)) + // printf("\n"); + + } // if (opts.m_parallel_compression) } // file_index + if (opts.m_parallel_compression) + { + basisu::vector results; + + bool any_failed = basis_parallel_compress( + num_threads, + comp_params_vec, + results); + BASISU_NOTE_UNUSED(any_failed); + + uint32_t total_successes = 0, total_failures = 0; + for (uint32_t i = 0; i < comp_params_vec.size(); i++) + { + if (results[i].m_error_code != basis_compressor::cECSuccess) + { + result = false; + + total_failures++; + + error_printf("File %u (first source image: \"%s\", output file: \"%s\") failed with error code %i!\n", i, + comp_params_vec[i].m_source_filenames[0].c_str(), + comp_params_vec[i].m_out_filename.c_str(), + (int)results[i].m_error_code); + } + else + { + total_successes++; + } + } + + printf("Total successes: %u failures: %u\n", total_successes, total_failures); + + } // if (opts.m_parallel_compression) + all_tm.stop(); if (total_files > 1) @@ -1233,7 +1324,7 @@ static bool compress_mode(command_line_params &opts) delete pGlobal_codebook_data; pGlobal_codebook_data = nullptr; - return true; + return result; } static bool unpack_and_validate_ktx2_file( @@ -1243,7 +1334,6 @@ static bool unpack_and_validate_ktx2_file( command_line_params& opts, FILE* pCSV_file, basis_data* pGlobal_codebook_data, - basist::etc1_global_selector_codebook& sel_codebook, uint32_t& total_unpack_warnings, uint32_t& total_pvrtc_nonpow2_warnings) { @@ -1253,7 +1343,7 @@ static bool unpack_and_validate_ktx2_file( const bool validate_flag = (opts.m_mode == cValidate); - basist::ktx2_transcoder dec(&sel_codebook); + basist::ktx2_transcoder dec; if (!dec.init(ktx2_file_data.data(), ktx2_file_data.size())) { @@ -1573,20 +1663,30 @@ static bool unpack_and_validate_ktx2_file( } //u.crop(level_info.m_orig_width, level_info.m_orig_height); - std::string rgb_filename; - if (gi.size() > 1) - rgb_filename = base_filename + string_format("_unpacked_rgb_%s_%u_%u_%04u.png", basist::basis_get_format_name(transcoder_tex_fmt), level_index, face_index, layer_index); - else - rgb_filename = base_filename + string_format("_unpacked_rgb_%s_%u_%04u.png", basist::basis_get_format_name(transcoder_tex_fmt), face_index, layer_index); - if (!save_png(rgb_filename, u, cImageSaveIgnoreAlpha)) - { - error_printf("Failed writing to PNG file \"%s\"\n", rgb_filename.c_str()); - delete pGlobal_codebook_data; pGlobal_codebook_data = nullptr; - return false; - } - printf("Wrote PNG file \"%s\"\n", rgb_filename.c_str()); + bool is_astc = (transcoder_tex_fmt == basist::transcoder_texture_format::cTFASTC_4x4_RGBA); + bool write_png = true; +#if !BASISU_USE_ASTC_DECOMPRESS + if (is_astc) + write_png = false; +#endif - if (transcoder_tex_fmt == basist::transcoder_texture_format::cTFFXT1_RGB) + if ((!opts.m_ktx_only) && (write_png)) + { + std::string rgb_filename; + if (gi.size() > 1) + rgb_filename = base_filename + string_format("_unpacked_rgb_%s_%u_%u_%04u.png", basist::basis_get_format_name(transcoder_tex_fmt), level_index, face_index, layer_index); + else + rgb_filename = base_filename + string_format("_unpacked_rgb_%s_%u_%04u.png", basist::basis_get_format_name(transcoder_tex_fmt), face_index, layer_index); + if (!save_png(rgb_filename, u, cImageSaveIgnoreAlpha)) + { + error_printf("Failed writing to PNG file \"%s\"\n", rgb_filename.c_str()); + delete pGlobal_codebook_data; pGlobal_codebook_data = nullptr; + return false; + } + printf("Wrote PNG file \"%s\"\n", rgb_filename.c_str()); + } + + if ((transcoder_tex_fmt == basist::transcoder_texture_format::cTFFXT1_RGB) && (opts.m_write_out)) { std::string out_filename; if (gi.size() > 1) @@ -1601,7 +1701,7 @@ static bool unpack_and_validate_ktx2_file( printf("Wrote .OUT file \"%s\"\n", out_filename.c_str()); } - if (basis_transcoder_format_has_alpha(transcoder_tex_fmt)) + if (basis_transcoder_format_has_alpha(transcoder_tex_fmt) && (!opts.m_ktx_only) && (write_png)) { std::string a_filename; if (gi.size() > 1) @@ -1648,13 +1748,12 @@ static bool unpack_and_validate_basis_file( command_line_params& opts, FILE *pCSV_file, basis_data* pGlobal_codebook_data, - basist::etc1_global_selector_codebook &sel_codebook, uint32_t &total_unpack_warnings, uint32_t &total_pvrtc_nonpow2_warnings) { const bool validate_flag = (opts.m_mode == cValidate); - basist::basisu_transcoder dec(&sel_codebook); + basist::basisu_transcoder dec; if (pGlobal_codebook_data) { @@ -1788,7 +1887,7 @@ static bool unpack_and_validate_basis_file( printf("start_transcoding time: %3.3f ms\n", start_transcoding_time_ms); basisu::vector< gpu_image_vec > gpu_images[(int)basist::transcoder_texture_format::cTFTotalTextureFormats]; - + double total_format_transcoding_time_ms[(int)basist::transcoder_texture_format::cTFTotalTextureFormats]; clear_obj(total_format_transcoding_time_ms); @@ -1907,6 +2006,86 @@ static bool unpack_and_validate_basis_file( } // image_info + // Upack UASTC files separarely, to validate we can transcode slices to UASTC and unpack them to pixels. + // This is a special path because UASTC is not yet a valid transcoder_texture_format, but a lower-level block_format. + if (fileinfo.m_tex_format == basist::basis_tex_format::cUASTC4x4) + { + for (uint32_t image_index = 0; image_index < fileinfo.m_total_images; image_index++) + { + for (uint32_t level_index = 0; level_index < fileinfo.m_image_mipmap_levels[image_index]; level_index++) + { + basist::basisu_image_level_info level_info; + + if (!dec.get_image_level_info(&basis_file_data[0], (uint32_t)basis_file_data.size(), level_info, image_index, level_index)) + { + error_printf("Failed retrieving image level information (%u %u)!\n", image_index, level_index); + return false; + } + + gpu_image gi; + gi.init(basisu::texture_format::cUASTC4x4, level_info.m_orig_width, level_info.m_orig_height); + + // Fill the buffer with psuedo-random bytes, to help more visibly detect cases where the transcoder fails to write to part of the output. + fill_buffer_with_random_bytes(gi.get_ptr(), gi.get_size_in_bytes()); + + uint32_t decode_flags = 0; + + tm.start(); + + if (!dec.transcode_slice( + &basis_file_data[0], (uint32_t)basis_file_data.size(), + level_info.m_first_slice_index, gi.get_ptr(), gi.get_total_blocks(), basist::block_format::cUASTC_4x4, gi.get_bytes_per_block())) + { + error_printf("Failed transcoding image level (%u %u) to UASTC!\n", image_index, level_index); + return false; + } + + double total_transcode_time = tm.get_elapsed_ms(); + + printf("Transcode of image %u level %u res %ux%u format UASTC_4x4 succeeded in %3.3f ms\n", image_index, level_index, level_info.m_orig_width, level_info.m_orig_height, total_transcode_time); + + if ((!validate_flag) && (!opts.m_ktx_only)) + { + image u; + if (!gi.unpack(u)) + { + error_printf("Warning: Failed unpacking GPU texture data (%u %u) to UASTC. \n", image_index, level_index); + return false; + } + //u.crop(level_info.m_orig_width, level_info.m_orig_height); + + std::string rgb_filename; + if (fileinfo.m_image_mipmap_levels[image_index] > 1) + rgb_filename = base_filename + string_format("_unpacked_rgb_UASTC_4x4_%u_%04u.png", level_index, image_index); + else + rgb_filename = base_filename + string_format("_unpacked_rgb_UASTC_4x4_%04u.png", image_index); + + if (!save_png(rgb_filename, u, cImageSaveIgnoreAlpha)) + { + error_printf("Failed writing to PNG file \"%s\"\n", rgb_filename.c_str()); + delete pGlobal_codebook_data; pGlobal_codebook_data = nullptr; + return false; + } + printf("Wrote PNG file \"%s\"\n", rgb_filename.c_str()); + + std::string alpha_filename; + if (fileinfo.m_image_mipmap_levels[image_index] > 1) + alpha_filename = base_filename + string_format("_unpacked_a_UASTC_4x4_%u_%04u.png", level_index, image_index); + else + alpha_filename = base_filename + string_format("_unpacked_a_UASTC_4x4_%04u.png", image_index); + if (!save_png(alpha_filename, u, cImageSaveGrayscale, 3)) + { + error_printf("Failed writing to PNG file \"%s\"\n", rgb_filename.c_str()); + delete pGlobal_codebook_data; pGlobal_codebook_data = nullptr; + return false; + } + printf("Wrote PNG file \"%s\"\n", alpha_filename.c_str()); + + } + } + } + } + if (!validate_flag) { // Now write KTX files and unpack them to individual PNG's @@ -1985,20 +2164,30 @@ static bool unpack_and_validate_basis_file( } //u.crop(level_info.m_orig_width, level_info.m_orig_height); - std::string rgb_filename; - if (gi.size() > 1) - rgb_filename = base_filename + string_format("_unpacked_rgb_%s_%u_%04u.png", basist::basis_get_format_name(transcoder_tex_fmt), level_index, image_index); - else - rgb_filename = base_filename + string_format("_unpacked_rgb_%s_%04u.png", basist::basis_get_format_name(transcoder_tex_fmt), image_index); - if (!save_png(rgb_filename, u, cImageSaveIgnoreAlpha)) - { - error_printf("Failed writing to PNG file \"%s\"\n", rgb_filename.c_str()); - delete pGlobal_codebook_data; pGlobal_codebook_data = nullptr; - return false; - } - printf("Wrote PNG file \"%s\"\n", rgb_filename.c_str()); + bool is_astc = (transcoder_tex_fmt == basist::transcoder_texture_format::cTFASTC_4x4_RGBA); + bool write_png = true; +#if !BASISU_USE_ASTC_DECOMPRESS + if (is_astc) + write_png = false; +#endif - if (transcoder_tex_fmt == basist::transcoder_texture_format::cTFFXT1_RGB) + if ((!opts.m_ktx_only) && (write_png)) + { + std::string rgb_filename; + if (gi.size() > 1) + rgb_filename = base_filename + string_format("_unpacked_rgb_%s_%u_%04u.png", basist::basis_get_format_name(transcoder_tex_fmt), level_index, image_index); + else + rgb_filename = base_filename + string_format("_unpacked_rgb_%s_%04u.png", basist::basis_get_format_name(transcoder_tex_fmt), image_index); + if (!save_png(rgb_filename, u, cImageSaveIgnoreAlpha)) + { + error_printf("Failed writing to PNG file \"%s\"\n", rgb_filename.c_str()); + delete pGlobal_codebook_data; pGlobal_codebook_data = nullptr; + return false; + } + printf("Wrote PNG file \"%s\"\n", rgb_filename.c_str()); + } + + if ((transcoder_tex_fmt == basist::transcoder_texture_format::cTFFXT1_RGB) && (opts.m_write_out)) { std::string out_filename; if (gi.size() > 1) @@ -2013,7 +2202,7 @@ static bool unpack_and_validate_basis_file( printf("Wrote .OUT file \"%s\"\n", out_filename.c_str()); } - if (basis_transcoder_format_has_alpha(transcoder_tex_fmt)) + if (basis_transcoder_format_has_alpha(transcoder_tex_fmt) && (!opts.m_ktx_only) && (write_png)) { std::string a_filename; if (gi.size() > 1) @@ -2085,7 +2274,7 @@ static bool unpack_and_validate_basis_file( printf("Transcode of image %u level %u res %ux%u format %s succeeded in %3.3f ms\n", image_index, level_index, level_info.m_orig_width, level_info.m_orig_height, basist::basis_get_format_name(transcoder_tex_fmt), total_transcode_time); - if (!validate_flag) + if ((!validate_flag) && (!opts.m_ktx_only)) { std::string rgb_filename(base_filename + string_format("_unpacked_rgb_%s_%u_%04u.png", basist::basis_get_format_name(transcoder_tex_fmt), level_index, image_index)); if (!save_png(rgb_filename, img, cImageSaveIgnoreAlpha)) @@ -2154,7 +2343,7 @@ static bool unpack_and_validate_basis_file( printf("Transcode of image %u level %u res %ux%u format %s succeeded in %3.3f ms\n", image_index, level_index, level_info.m_orig_width, level_info.m_orig_height, basist::basis_get_format_name(transcoder_tex_fmt), total_transcode_time); - if (!validate_flag) + if ((!validate_flag) && (!opts.m_ktx_only)) { std::string rgb_filename(base_filename + string_format("_unpacked_rgb_%s_%u_%04u.png", basist::basis_get_format_name(transcoder_tex_fmt), level_index, image_index)); if (!save_png(rgb_filename, img, cImageSaveIgnoreAlpha)) @@ -2218,7 +2407,7 @@ static bool unpack_and_validate_basis_file( printf("Transcode of image %u level %u res %ux%u format %s succeeded in %3.3f ms\n", image_index, level_index, level_info.m_orig_width, level_info.m_orig_height, basist::basis_get_format_name(transcoder_tex_fmt), total_transcode_time); - if (!validate_flag) + if ((!validate_flag) && (!opts.m_ktx_only)) { std::string rgb_filename(base_filename + string_format("_unpacked_rgb_%s_%u_%04u.png", basist::basis_get_format_name(transcoder_tex_fmt), level_index, image_index)); if (!save_png(rgb_filename, img, cImageSaveIgnoreAlpha)) @@ -2274,13 +2463,15 @@ static bool unpack_and_validate_basis_file( static bool unpack_and_validate_mode(command_line_params &opts) { - const bool validate_flag = (opts.m_mode == cValidate); - basist::etc1_global_selector_codebook sel_codebook(basist::g_global_selector_cb_size, basist::g_global_selector_cb); + interval_timer tm; + tm.start(); + //const bool validate_flag = (opts.m_mode == cValidate); + basis_data* pGlobal_codebook_data = nullptr; if (opts.m_etc1s_use_global_codebooks_file.size()) { - pGlobal_codebook_data = load_basis_file(opts.m_etc1s_use_global_codebooks_file.c_str(), sel_codebook, true); + pGlobal_codebook_data = load_basis_file(opts.m_etc1s_use_global_codebooks_file.c_str(), true); if (!pGlobal_codebook_data) { error_printf("Failed loading global codebook data from file \"%s\"\n", opts.m_etc1s_use_global_codebooks_file.c_str()); @@ -2362,7 +2553,6 @@ static bool unpack_and_validate_mode(command_line_params &opts) opts, pCSV_file, pGlobal_codebook_data, - sel_codebook, total_unpack_warnings, total_pvrtc_nonpow2_warnings); } @@ -2375,7 +2565,6 @@ static bool unpack_and_validate_mode(command_line_params &opts) opts, pCSV_file, pGlobal_codebook_data, - sel_codebook, total_unpack_warnings, total_pvrtc_nonpow2_warnings); } @@ -2401,6 +2590,8 @@ static bool unpack_and_validate_mode(command_line_params &opts) else printf("Success\n"); + debug_printf("Elapsed time: %3.3f secs\n", tm.get_elapsed_secs()); + if (pCSV_file) { fclose(pCSV_file); @@ -2520,11 +2711,277 @@ static bool compare_mode(command_line_params &opts) save_png("delta_img_a.png", delta_img, cImageSaveGrayscale, 3); printf("Wrote delta_img_a.png\n"); + + uint32_t bins[5][512]; + clear_obj(bins); + + running_stat delta_stats[5]; + basisu::rand rm; + + double avg[5]; + clear_obj(avg); + + for (uint32_t y = 0; y < a.get_height(); y++) + { + for (uint32_t x = 0; x < a.get_width(); x++) + { + color_rgba& d = delta_img(x, y); + + for (int c = 0; c < 4; c++) + { + int delta = a(x, y)[c] - b(x, y)[c]; + + //delta = clamp((int)std::round(rm.gaussian(70.0f, 10.0f)), -255, 255); + + bins[c][delta + 256]++; + delta_stats[c].push(delta); + + avg[c] += delta; + } + + int y_delta = a(x, y).get_709_luma() - b(x, y).get_709_luma(); + bins[4][y_delta + 256]++; + delta_stats[4].push(y_delta); + + avg[4] += y_delta; + + } // x + } // y + + for (uint32_t i = 0; i <= 4; i++) + avg[i] /= a.get_total_pixels(); + + printf("\n"); + + //bins[2][256+-255] = 100000; + //bins[2][256-56] = 50000; + + const uint32_t X_SIZE = 128, Y_SIZE = 40; + + for (uint32_t c = 0; c <= 4; c++) + { + std::vector plot[Y_SIZE + 1]; + for (uint32_t i = 0; i < Y_SIZE; i++) + { + plot[i].resize(X_SIZE + 2); + memset(plot[i].data(), ' ', X_SIZE + 1); + } + + uint32_t max_val = 0; + int max_val_bin_index = 0; + int lowest_bin_index = INT_MAX, highest_bin_index = INT_MIN; + double avg_val = 0; + double total_val = 0; + running_stat bin_stats; + + for (int y = -255; y <= 255; y++) + { + uint32_t val = bins[c][256 + y]; + if (!val) + continue; + + bin_stats.push(y); + + total_val += (double)val; + + lowest_bin_index = minimum(lowest_bin_index, y); + highest_bin_index = maximum(highest_bin_index, y); + + if (val > max_val) + { + max_val = val; + max_val_bin_index = y; + } + avg_val += y * (double)val; + } + avg_val /= total_val; + + int lo_limit = -(int)X_SIZE / 2; + int hi_limit = X_SIZE / 2; + for (int x = lo_limit; x <= hi_limit; x++) + { + uint32_t total = 0; + if (x == lo_limit) + { + for (int i = -255; i <= lo_limit; i++) + total += bins[c][256 + i]; + } + else if (x == hi_limit) + { + for (int i = hi_limit; i <= 255; i++) + total += bins[c][256 + i]; + } + else + { + total = bins[c][256 + x]; + } + + uint32_t height = max_val ? (total * Y_SIZE + max_val - 1) / max_val : 0; + + if (height) + { + for (uint32_t y = (Y_SIZE - 1) - (height - 1); y <= (Y_SIZE - 1); y++) + plot[y][x + X_SIZE / 2] = '*'; + } + } + + printf("%c delta histogram: total samples: %5.0f, max bin value: %u index: %i (%3.3f%% of total), range %i [%i,%i], weighted mean: %f\n", "RGBAY"[c], total_val, max_val, max_val_bin_index, max_val * 100.0f / total_val, highest_bin_index - lowest_bin_index + 1, lowest_bin_index, highest_bin_index, avg_val); + printf("bin mean: %f, bin std deviation: %f, non-zero bins: %u\n", bin_stats.get_mean(), bin_stats.get_std_dev(), bin_stats.get_num()); + printf("delta mean: %f, delta std deviation: %f\n", delta_stats[c].get_mean(), delta_stats[c].get_std_dev()); + printf("\n"); + + for (uint32_t y = 0; y < Y_SIZE; y++) + printf("%s\n", (char*)plot[y].data()); + + char tics[1024]; + tics[0] = '\0'; + char tics2[1024]; + tics2[0] = '\0'; + + for (int x = 0; x <= (int)X_SIZE; x++) + { + char buf[64]; + if (x == X_SIZE / 2) + { + while ((int)strlen(tics) < x) + strcat(tics, "."); + + while ((int)strlen(tics2) < x) + strcat(tics2, " "); + + sprintf(buf, "0"); + strcat(tics, buf); + } + else if (((x & 7) == 0) || (x == X_SIZE)) + { + while ((int)strlen(tics) < x) + strcat(tics, "."); + + while ((int)strlen(tics2) < x) + strcat(tics2, " "); + + int v = (x - (int)X_SIZE / 2); + sprintf(buf, "%i", v / 10); + strcat(tics, buf); + + if (v < 0) + { + if (-v < 10) + sprintf(buf, "%i", v % 10); + else + sprintf(buf, " %i", -v % 10); + } + else + sprintf(buf, "%i", v % 10); + strcat(tics2, buf); + } + else + { + while ((int)strlen(tics) < x) + strcat(tics, "."); + } + } + printf("%s\n", tics); + printf("%s\n", tics2); + + printf("\n"); + } return true; } -#include "encoder/basisu_astc_decomp.h" +static bool split_image_mode(command_line_params& opts) +{ + if (opts.m_input_filenames.size() != 1) + { + error_printf("Must specify one image filename using -file\n"); + return false; + } + + image a; + if (!load_image(opts.m_input_filenames[0].c_str(), a)) + { + error_printf("Failed loading image from file \"%s\"!\n", opts.m_input_filenames[0].c_str()); + return false; + } + + printf("Loaded \"%s\", %ux%u, has alpha: %u\n", opts.m_input_filenames[0].c_str(), a.get_width(), a.get_height(), a.has_alpha()); + + if (!save_png("split_rgb.png", a, cImageSaveIgnoreAlpha)) + { + fprintf(stderr, "Failed writing file split_rgb.png\n"); + return false; + } + printf("Wrote file split_rgb.png\n"); + + for (uint32_t i = 0; i < 4; i++) + { + char buf[256]; + snprintf(buf, sizeof(buf), "split_%c.png", "RGBA"[i]); + if (!save_png(buf, a, cImageSaveGrayscale, i)) + { + fprintf(stderr, "Failed writing file %s\n", buf); + return false; + } + printf("Wrote file %s\n", buf); + } + + return true; +} + +static bool combine_images_mode(command_line_params& opts) +{ + if (opts.m_input_filenames.size() != 2) + { + error_printf("Must specify two image filename using -file\n"); + return false; + } + + image a, b; + if (!load_image(opts.m_input_filenames[0].c_str(), a)) + { + error_printf("Failed loading image from file \"%s\"!\n", opts.m_input_filenames[0].c_str()); + return false; + } + + printf("Loaded \"%s\", %ux%u, has alpha: %u\n", opts.m_input_filenames[0].c_str(), a.get_width(), a.get_height(), a.has_alpha()); + + if (!load_image(opts.m_input_filenames[1].c_str(), b)) + { + error_printf("Failed loading image from file \"%s\"!\n", opts.m_input_filenames[1].c_str()); + return false; + } + + printf("Loaded \"%s\", %ux%u, has alpha: %u\n", opts.m_input_filenames[1].c_str(), b.get_width(), b.get_height(), b.has_alpha()); + + const uint32_t width = minimum(a.get_width(), b.get_width()); + const uint32_t height = minimum(b.get_height(), b.get_height()); + + image combined_img(width, height); + for (uint32_t y = 0; y < height; y++) + { + for (uint32_t x = 0; x < width; x++) + { + combined_img(x, y) = a(x, y); + combined_img(x, y).a = b(x, y).g; + } + } + + const char* pOutput_filename = "combined.png"; + if (opts.m_output_filename.size()) + pOutput_filename = opts.m_output_filename.c_str(); + + if (!save_png(pOutput_filename, combined_img)) + { + fprintf(stderr, "Failed writing file %s\n", pOutput_filename); + return false; + } + printf("Wrote file %s\n", pOutput_filename); + + return true; +} + +//#include "encoder/basisu_astc_decomp.h" #include "encoder/basisu_pvrtc1_4.h" static bool bench_mode(command_line_params& opts) @@ -3032,7 +3489,7 @@ static bool bench_mode(command_line_params& opts) transcode_uastc_to_astc(encoded_uastc_blk, tastc_data); color_rgba decoded_tastc_block[4][4]; - basisu_astc::astc::decompress((uint8_t*)decoded_tastc_block, (uint8_t*)&tastc_data, false, 4, 4); + //basisu_astc::astc::decompress((uint8_t*)decoded_tastc_block, (uint8_t*)&tastc_data, false, 4, 4); uastc2_img.set_block_clipped(&decoded_tastc_block[0][0], block_x * 4, block_y * 4, 4, 4); @@ -3706,14 +4163,201 @@ static bool compsize_mode(command_line_params& opts) return true; } +const struct test_file +{ + const char* m_pFilename; + uint32_t m_etc1s_size; + float m_etc1s_psnr; + float m_uastc_psnr; +} g_test_files[] = +{ + { "black_1x1.png", 189, 100.0f, 100.0f }, + { "kodim01.png", 30993, 27.40f, 44.14f }, + { "kodim02.png", 28529, 32.20f, 41.06f }, + { "kodim03.png", 23411, 32.57f, 44.87f }, + { "kodim04.png", 28256, 31.76f, 43.02f }, + { "kodim05.png", 32646, 25.94f, 40.28f }, + { "kodim06.png", 27336, 28.66f, 44.57f }, + { "kodim07.png", 26618, 31.51f, 43.94f }, + { "kodim08.png", 31133, 25.28f, 41.15f }, + { "kodim09.png", 24777, 32.05f, 45.85f }, + { "kodim10.png", 27247, 32.20f, 45.77f }, + { "kodim11.png", 26579, 29.22f, 43.68f }, + { "kodim12.png", 25102, 32.96f, 46.77f }, + { "kodim13.png", 31604, 24.25f, 41.25f }, + { "kodim14.png", 31162, 27.81f, 39.65f }, + { "kodim15.png", 25528, 31.26f, 42.87f }, + { "kodim16.png", 26894, 32.21f, 47.78f }, + { "kodim17.png", 29334, 31.40f, 45.66f }, + { "kodim18.png", 30929, 27.46f, 41.54f }, + { "kodim19.png", 27889, 29.69f, 44.95f }, + { "kodim20.png", 21104, 31.30f, 45.31f }, + { "kodim21.png", 25943, 28.53f, 44.45f }, + { "kodim22.png", 29277, 29.85f, 42.63f }, + { "kodim23.png", 23550, 31.69f, 45.11f }, + { "kodim24.png", 29613, 26.75f, 40.61f }, + { "white_1x1.png", 189, 100.0f, 100.0f }, + { "wikipedia.png", 38961, 24.10f, 30.47f }, + { "alpha0.png", 766, 100.0f, 56.16f } +}; +const uint32_t TOTAL_TEST_FILES = sizeof(g_test_files) / sizeof(g_test_files[0]); + +static bool test_mode(command_line_params& opts) +{ + uint32_t total_mismatches = 0; + + // TODO: Record min/max/avgs + // TODO: Add another ETC1S quality level + + for (uint32_t i = 0; i < TOTAL_TEST_FILES; i++) + { + std::string filename(opts.m_test_file_dir); + if (filename.size()) + { + filename.push_back('/'); + } + filename += std::string(g_test_files[i].m_pFilename); + + basisu::vector source_images(1); + + image& source_image = source_images[0]; + if (!load_png(filename.c_str(), source_image)) + { + error_printf("Failed loading test image \"%s\"\n", filename.c_str()); + return false; + } + + printf("Loaded file \"%s\", dimemsions %ux%u has alpha: %u\n", filename.c_str(), source_image.get_width(), source_image.get_height(), source_image.has_alpha()); + + image_stats stats; + + uint32_t flags_and_quality; + float uastc_rdo_quality = 0.0f; + size_t data_size = 0; + + // Test ETC1S + flags_and_quality = (opts.m_comp_params.m_multithreading ? cFlagThreaded : 0); + + void* pData = basis_compress(source_images, flags_and_quality, uastc_rdo_quality, &data_size, &stats); + if (!pData) + { + error_printf("basis_compress() failed!\n"); + return false; + } + basis_free_data(pData); + + printf("ETC1S Size: %u, PSNR: %f\n", (uint32_t)data_size, stats.m_basis_rgba_avg_psnr); + + float file_size_ratio = fabs((data_size / (float)g_test_files[i].m_etc1s_size) - 1.0f); + if (file_size_ratio > .015f) + { + error_printf("Expected ETC1S file size was %u, but got %u instead!\n", g_test_files[i].m_etc1s_size, (uint32_t)data_size); + total_mismatches++; + } + + if (fabs(stats.m_basis_rgba_avg_psnr - g_test_files[i].m_etc1s_psnr) > .02f) + { + error_printf("Expected ETC1S RGBA Avg PSNR was %f, but got %f instead!\n", g_test_files[i].m_etc1s_psnr, stats.m_basis_rgba_avg_psnr); + total_mismatches++; + } + + if (opencl_is_available()) + { + flags_and_quality = (opts.m_comp_params.m_multithreading ? cFlagThreaded : 0) | cFlagUseOpenCL; + + pData = basis_compress(source_images, flags_and_quality, uastc_rdo_quality, &data_size, &stats); + if (!pData) + { + error_printf("basis_compress() failed!\n"); + return false; + } + basis_free_data(pData); + + printf("ETC1S+OpenCL Size: %u, PSNR: %f\n", (uint32_t)data_size, stats.m_basis_rgba_avg_psnr); + + file_size_ratio = fabs((data_size / (float)g_test_files[i].m_etc1s_size) - 1.0f); + if (file_size_ratio > .04f) + { + error_printf("Expected ETC1S+OpenCL file size was %u, but got %u instead!\n", g_test_files[i].m_etc1s_size, (uint32_t)data_size); + total_mismatches++; + } + + if (g_test_files[i].m_etc1s_psnr == 100.0f) + { + // TODO + if (stats.m_basis_rgba_avg_psnr < 69.0f) + { + error_printf("Expected ETC1S+OpenCL RGBA Avg PSNR was %f, but got %f instead!\n", g_test_files[i].m_etc1s_psnr, stats.m_basis_rgba_avg_psnr); + total_mismatches++; + } + } + else if (fabs(stats.m_basis_rgba_avg_psnr - g_test_files[i].m_etc1s_psnr) > .2f) + { + error_printf("Expected ETC1S+OpenCL RGBA Avg PSNR was %f, but got %f instead!\n", g_test_files[i].m_etc1s_psnr, stats.m_basis_rgba_avg_psnr); + total_mismatches++; + } + } + + // Test UASTC + flags_and_quality = (opts.m_comp_params.m_multithreading ? cFlagThreaded : 0) | cFlagUASTC; + + pData = basis_compress(source_images, flags_and_quality, uastc_rdo_quality, &data_size, &stats); + if (!pData) + { + error_printf("basis_compress() failed!\n"); + return false; + } + basis_free_data(pData); + + printf("UASTC Size: %u, PSNR: %f\n", (uint32_t)data_size, stats.m_basis_rgba_avg_psnr); + + if (fabs(stats.m_basis_rgba_avg_psnr - g_test_files[i].m_uastc_psnr) > .005f) + { + error_printf("Expected UASTC RGBA Avg PSNR was %f, but got %f instead!\n", g_test_files[i].m_etc1s_psnr, stats.m_basis_rgba_avg_psnr); + total_mismatches++; + } + } + + printf("Total mismatches: %u\n", total_mismatches); + + bool result = true; + if (total_mismatches) + { + error_printf("Test FAILED\n"); + result = false; + } + else + printf("Test succeeded\n"); + + return result; +} + static int main_internal(int argc, const char **argv) { - printf("Basis Universal GPU Texture Compressor v" BASISU_TOOL_VERSION "\nCopyright (C) 2019-2021 Binomial LLC, All rights reserved\n"); + printf("Basis Universal GPU Texture Compressor v" BASISU_TOOL_VERSION "\nCopyright (C) 2019-2022 Binomial LLC, All rights reserved\n"); //interval_timer tm; //tm.start(); - basisu_encoder_init(); + // See if OpenCL support has been disabled. We don't want to parse the command line until the lib is initialized + bool use_opencl = false; + bool opencl_force_serialization = false; + for (int i = 1; i < argc; i++) + { + if (strcmp(argv[i], "-opencl") == 0) + use_opencl = true; + if (strcmp(argv[i], "-opencl_serialize") == 0) + opencl_force_serialization = true; + } + +#ifndef BASISU_SUPPORT_OPENCL + if (use_opencl) + { + fprintf(stderr, "WARNING: -opencl specified, but OpenCL support was not enabled at compile time! With cmake, use -D OPENCL=1. Falling back to CPU compression.\n"); + } +#endif + + basisu_encoder_init(use_opencl, opencl_force_serialization); //printf("Encoder and transcoder libraries initialized in %3.3f ms\n", tm.get_elapsed_ms()); @@ -3735,9 +4379,9 @@ static int main_internal(int argc, const char **argv) } #if BASISU_SUPPORT_SSE - printf("Using SSE 4.1: %u, Multithreading: %u, Zstandard support: %u\n", g_cpu_supports_sse41, (uint32_t)opts.m_comp_params.m_multithreading, basist::basisu_transcoder_supports_ktx2_zstd()); + printf("Using SSE 4.1: %u, Multithreading: %u, Zstandard support: %u, OpenCL: %u\n", g_cpu_supports_sse41, (uint32_t)opts.m_comp_params.m_multithreading, basist::basisu_transcoder_supports_ktx2_zstd(), opencl_is_available()); #else - printf("Multithreading: %u, Zstandard support: %u\n", (uint32_t)opts.m_comp_params.m_multithreading, basist::basisu_transcoder_supports_ktx2_zstd()); + printf("Multithreading: %u, Zstandard support: %u, OpenCL: %u\n", (uint32_t)opts.m_comp_params.m_multithreading, basist::basisu_transcoder_supports_ktx2_zstd(), opencl_is_available()); #endif if (!opts.process_listing_files()) @@ -3782,6 +4426,15 @@ static int main_internal(int argc, const char **argv) case cCompSize: status = compsize_mode(opts); break; + case cTest: + status = test_mode(opts); + break; + case cSplitImage: + status = split_image_mode(opts); + break; + case cCombineImages: + status = combine_images_mode(opts); + break; default: assert(0); break; @@ -3795,7 +4448,7 @@ int main(int argc, const char** argv) #ifdef _DEBUG printf("DEBUG\n"); #endif - + int status = EXIT_FAILURE; #if BASISU_CATCH_EXCEPTIONS diff --git a/contrib/previewers/lib/basisu_transcoder.cpp b/contrib/previewers/lib/basisu_transcoder.cpp index c5652e0..37640ee 100644 --- a/contrib/previewers/lib/basisu_transcoder.cpp +++ b/contrib/previewers/lib/basisu_transcoder.cpp @@ -1,17 +1,14 @@ /** * Basis Universal single file library. Generated using: * \code - * ./combine.sh -r ../../transcoder -x basisu_transcoder_tables_bc7_m6.inc -k basisu_transcoder.h -o basisu_transcoder.cpp basisu_transcoder-in.cpp + * ./combine.sh -r ../../transcoder -o basisu_transcoder.cpp basisu_transcoder-in.cpp * \endcode - * - * \note The script above excludes the BC7 mode 6 tables, a choice reflected in - * the build options. */ /* * Transcoder build options for known platforms (iOS has ETC, ASTC and PVRTC; * Emscripten adds DXT to iOS's options; Android adds PVRTC2 to Emscripten's - * options; other platforms build all except BC7 mode 6 and FXT1). + * options; other platforms build all except FXT1). * * See https://github.com/BinomialLLC/basis_universal#shrinking-the-transcoders-compiled-size */ @@ -28,14 +25,17 @@ #ifndef __ANDROID__ #define BASISD_SUPPORT_PVRTC2 0 #endif -#else - #define BASISD_SUPPORT_BC7_MODE6_OPAQUE_ONLY 0 #endif #define BASISD_SUPPORT_FXT1 0 +/* + * KTX2 support disabled. + */ +#define BASISD_SUPPORT_KTX2 0 + /**** start inlining basisu_transcoder.cpp ****/ // basisu_transcoder.cpp -// Copyright (C) 2019-2020 Binomial LLC. All Rights Reserved. +// Copyright (C) 2019-2021 Binomial LLC. All Rights Reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -49,76 +49,5030 @@ // See the License for the specific language governing permissions and // limitations under the License. -/**** *NOT* inlining basisu_transcoder.h ****/ -#include "basisu_transcoder.h" -#include -#include +/**** start inlining basisu_transcoder.h ****/ +// basisu_transcoder.h +// Copyright (C) 2019-2021 Binomial LLC. All Rights Reserved. +// Important: If compiling with gcc, be sure strict aliasing is disabled: -fno-strict-aliasing +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. -#ifndef IS_BIG_ENDIAN +// By default KTX2 support is enabled to simplify compilation. This implies the need for the Zstandard library (which we distribute as a single source file in the "zstd" directory) by default. +// Set BASISD_SUPPORT_KTX2 to 0 to completely disable KTX2 support as well as Zstd/miniz usage which is only required for UASTC supercompression in KTX2 files. +// Also see BASISD_SUPPORT_KTX2_ZSTD in basisu_transcoder.cpp, which individually disables Zstd usage. +#ifndef BASISD_SUPPORT_KTX2 + #define BASISD_SUPPORT_KTX2 1 +#endif + +// Set BASISD_SUPPORT_KTX2_ZSTD to 0 to disable Zstd usage and KTX2 UASTC Zstd supercompression support +#ifndef BASISD_SUPPORT_KTX2_ZSTD + #define BASISD_SUPPORT_KTX2_ZSTD 1 +#endif + +// Set BASISU_FORCE_DEVEL_MESSAGES to 1 to enable debug printf()'s whenever an error occurs, for easier debugging during development. +#ifndef BASISU_FORCE_DEVEL_MESSAGES + #define BASISU_FORCE_DEVEL_MESSAGES 0 +#endif + +/**** start inlining basisu_transcoder_internal.h ****/ +// basisu_transcoder_internal.h - Universal texture format transcoder library. +// Copyright (C) 2019-2021 Binomial LLC. All Rights Reserved. +// +// Important: If compiling with gcc, be sure strict aliasing is disabled: -fno-strict-aliasing +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifdef _MSC_VER +#pragma warning (disable: 4127) // conditional expression is constant +#endif + +#define BASISD_LIB_VERSION 116 +#define BASISD_VERSION_STRING "01.16" + +#ifdef _DEBUG +#define BASISD_BUILD_DEBUG +#else +#define BASISD_BUILD_RELEASE +#endif + +/**** start inlining basisu.h ****/ +// basisu.h +// Copyright (C) 2019-2021 Binomial LLC. All Rights Reserved. +// Important: If compiling with gcc, be sure strict aliasing is disabled: -fno-strict-aliasing +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifdef _MSC_VER + + #pragma warning (disable : 4201) + #pragma warning (disable : 4127) // warning C4127: conditional expression is constant + #pragma warning (disable : 4530) // C++ exception handler used, but unwind semantics are not enabled. + + // Slamming this off always for v1.16 because we've gotten rid of most std containers. + #ifndef BASISU_NO_ITERATOR_DEBUG_LEVEL + #define BASISU_NO_ITERATOR_DEBUG_LEVEL (1) + #endif + + #ifndef BASISU_NO_ITERATOR_DEBUG_LEVEL + //#define _HAS_ITERATOR_DEBUGGING 0 + + #if defined(_DEBUG) || defined(DEBUG) + // This is madness, but we need to disable iterator debugging in debug builds or the encoder is unsable because MSVC's iterator debugging implementation is totally broken. + #ifndef _ITERATOR_DEBUG_LEVEL + #define _ITERATOR_DEBUG_LEVEL 1 + #endif + #ifndef _SECURE_SCL + #define _SECURE_SCL 1 + #endif + #else // defined(_DEBUG) || defined(DEBUG) + #ifndef _SECURE_SCL + #define _SECURE_SCL 0 + #endif + #ifndef _ITERATOR_DEBUG_LEVEL + #define _ITERATOR_DEBUG_LEVEL 0 + #endif + #endif // defined(_DEBUG) || defined(DEBUG) + + #endif // BASISU_NO_ITERATOR_DEBUG_LEVEL + +#endif // _MSC_VER + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +/**** start inlining basisu_containers.h ****/ +// basisu_containers.h +#include +#include +#include +#include +#include + +#if defined(__linux__) && !defined(ANDROID) +// Only for malloc_usable_size() in basisu_containers_impl.h +#include +#define HAS_MALLOC_USABLE_SIZE 1 +#endif + +// Set to 1 to always check vector operator[], front(), and back() even in release. +#define BASISU_VECTOR_FORCE_CHECKING 0 + +// If 1, the vector container will not query the CRT to get the size of resized memory blocks. +#define BASISU_VECTOR_DETERMINISTIC 1 + +#ifdef _MSC_VER +#define BASISU_FORCE_INLINE __forceinline +#else +#define BASISU_FORCE_INLINE inline +#endif + +namespace basisu +{ + enum { cInvalidIndex = -1 }; + + namespace helpers + { + inline bool is_power_of_2(uint32_t x) { return x && ((x & (x - 1U)) == 0U); } + inline bool is_power_of_2(uint64_t x) { return x && ((x & (x - 1U)) == 0U); } + template const T& minimum(const T& a, const T& b) { return (b < a) ? b : a; } + template const T& maximum(const T& a, const T& b) { return (a < b) ? b : a; } + + inline uint32_t floor_log2i(uint32_t v) + { + uint32_t l = 0; + while (v > 1U) + { + v >>= 1; + l++; + } + return l; + } + + inline uint32_t next_pow2(uint32_t val) + { + val--; + val |= val >> 16; + val |= val >> 8; + val |= val >> 4; + val |= val >> 2; + val |= val >> 1; + return val + 1; + } + + inline uint64_t next_pow2(uint64_t val) + { + val--; + val |= val >> 32; + val |= val >> 16; + val |= val >> 8; + val |= val >> 4; + val |= val >> 2; + val |= val >> 1; + return val + 1; + } + } // namespace helpers + + template + inline T* construct(T* p) + { + return new (static_cast(p)) T; + } + + template + inline T* construct(T* p, const U& init) + { + return new (static_cast(p)) T(init); + } + + template + inline void construct_array(T* p, size_t n) + { + T* q = p + n; + for (; p != q; ++p) + new (static_cast(p)) T; + } + + template + inline void construct_array(T* p, size_t n, const U& init) + { + T* q = p + n; + for (; p != q; ++p) + new (static_cast(p)) T(init); + } + + template + inline void destruct(T* p) + { + (void)p; + p->~T(); + } + + template inline void destruct_array(T* p, size_t n) + { + T* q = p + n; + for (; p != q; ++p) + p->~T(); + } + + template struct int_traits { enum { cMin = INT32_MIN, cMax = INT32_MAX, cSigned = true }; }; + + template<> struct int_traits { enum { cMin = INT8_MIN, cMax = INT8_MAX, cSigned = true }; }; + template<> struct int_traits { enum { cMin = INT16_MIN, cMax = INT16_MAX, cSigned = true }; }; + template<> struct int_traits { enum { cMin = INT32_MIN, cMax = INT32_MAX, cSigned = true }; }; + + template<> struct int_traits { enum { cMin = 0, cMax = UINT8_MAX, cSigned = false }; }; + template<> struct int_traits { enum { cMin = 0, cMax = UINT16_MAX, cSigned = false }; }; + template<> struct int_traits { enum { cMin = 0, cMax = UINT32_MAX, cSigned = false }; }; + + template + struct scalar_type + { + enum { cFlag = false }; + static inline void construct(T* p) { basisu::construct(p); } + static inline void construct(T* p, const T& init) { basisu::construct(p, init); } + static inline void construct_array(T* p, size_t n) { basisu::construct_array(p, n); } + static inline void destruct(T* p) { basisu::destruct(p); } + static inline void destruct_array(T* p, size_t n) { basisu::destruct_array(p, n); } + }; + + template struct scalar_type + { + enum { cFlag = true }; + static inline void construct(T** p) { memset(p, 0, sizeof(T*)); } + static inline void construct(T** p, T* init) { *p = init; } + static inline void construct_array(T** p, size_t n) { memset(p, 0, sizeof(T*) * n); } + static inline void destruct(T** p) { p; } + static inline void destruct_array(T** p, size_t n) { p, n; } + }; + +#define BASISU_DEFINE_BUILT_IN_TYPE(X) \ + template<> struct scalar_type { \ + enum { cFlag = true }; \ + static inline void construct(X* p) { memset(p, 0, sizeof(X)); } \ + static inline void construct(X* p, const X& init) { memcpy(p, &init, sizeof(X)); } \ + static inline void construct_array(X* p, size_t n) { memset(p, 0, sizeof(X) * n); } \ + static inline void destruct(X* p) { p; } \ + static inline void destruct_array(X* p, size_t n) { p, n; } }; + + BASISU_DEFINE_BUILT_IN_TYPE(bool) + BASISU_DEFINE_BUILT_IN_TYPE(char) + BASISU_DEFINE_BUILT_IN_TYPE(unsigned char) + BASISU_DEFINE_BUILT_IN_TYPE(short) + BASISU_DEFINE_BUILT_IN_TYPE(unsigned short) + BASISU_DEFINE_BUILT_IN_TYPE(int) + BASISU_DEFINE_BUILT_IN_TYPE(unsigned int) + BASISU_DEFINE_BUILT_IN_TYPE(long) + BASISU_DEFINE_BUILT_IN_TYPE(unsigned long) +#ifdef __GNUC__ + BASISU_DEFINE_BUILT_IN_TYPE(long long) + BASISU_DEFINE_BUILT_IN_TYPE(unsigned long long) +#else + BASISU_DEFINE_BUILT_IN_TYPE(__int64) + BASISU_DEFINE_BUILT_IN_TYPE(unsigned __int64) +#endif + BASISU_DEFINE_BUILT_IN_TYPE(float) + BASISU_DEFINE_BUILT_IN_TYPE(double) + BASISU_DEFINE_BUILT_IN_TYPE(long double) + +#undef BASISU_DEFINE_BUILT_IN_TYPE + + template + struct bitwise_movable { enum { cFlag = false }; }; + +#define BASISU_DEFINE_BITWISE_MOVABLE(Q) template<> struct bitwise_movable { enum { cFlag = true }; }; + + template + struct bitwise_copyable { enum { cFlag = false }; }; + +#define BASISU_DEFINE_BITWISE_COPYABLE(Q) template<> struct bitwise_copyable { enum { cFlag = true }; }; + +#define BASISU_IS_POD(T) __is_pod(T) + +#define BASISU_IS_SCALAR_TYPE(T) (scalar_type::cFlag) + +#if defined(__GNUC__) && __GNUC__<5 + #define BASISU_IS_TRIVIALLY_COPYABLE(...) __has_trivial_copy(__VA_ARGS__) +#else + #define BASISU_IS_TRIVIALLY_COPYABLE(...) std::is_trivially_copyable<__VA_ARGS__>::value +#endif + +// TODO: clean this up +#define BASISU_IS_BITWISE_COPYABLE(T) (BASISU_IS_SCALAR_TYPE(T) || BASISU_IS_POD(T) || BASISU_IS_TRIVIALLY_COPYABLE(T) || (bitwise_copyable::cFlag)) + +#define BASISU_IS_BITWISE_COPYABLE_OR_MOVABLE(T) (BASISU_IS_BITWISE_COPYABLE(T) || (bitwise_movable::cFlag)) + +#define BASISU_HAS_DESTRUCTOR(T) ((!scalar_type::cFlag) && (!__is_pod(T))) + + typedef char(&yes_t)[1]; + typedef char(&no_t)[2]; + + template yes_t class_test(int U::*); + template no_t class_test(...); + + template struct is_class + { + enum { value = (sizeof(class_test(0)) == sizeof(yes_t)) }; + }; + + template struct is_pointer + { + enum { value = false }; + }; + + template struct is_pointer + { + enum { value = true }; + }; + + struct empty_type { }; + + BASISU_DEFINE_BITWISE_COPYABLE(empty_type); + BASISU_DEFINE_BITWISE_MOVABLE(empty_type); + + template struct rel_ops + { + friend bool operator!=(const T& x, const T& y) { return (!(x == y)); } + friend bool operator> (const T& x, const T& y) { return (y < x); } + friend bool operator<=(const T& x, const T& y) { return (!(y < x)); } + friend bool operator>=(const T& x, const T& y) { return (!(x < y)); } + }; + + struct elemental_vector + { + void* m_p; + uint32_t m_size; + uint32_t m_capacity; + + typedef void (*object_mover)(void* pDst, void* pSrc, uint32_t num); + + bool increase_capacity(uint32_t min_new_capacity, bool grow_hint, uint32_t element_size, object_mover pRelocate, bool nofail); + }; + + template + class vector : public rel_ops< vector > + { + public: + typedef T* iterator; + typedef const T* const_iterator; + typedef T value_type; + typedef T& reference; + typedef const T& const_reference; + typedef T* pointer; + typedef const T* const_pointer; + + inline vector() : + m_p(NULL), + m_size(0), + m_capacity(0) + { + } + + inline vector(uint32_t n, const T& init) : + m_p(NULL), + m_size(0), + m_capacity(0) + { + increase_capacity(n, false); + construct_array(m_p, n, init); + m_size = n; + } + + inline vector(const vector& other) : + m_p(NULL), + m_size(0), + m_capacity(0) + { + increase_capacity(other.m_size, false); + + m_size = other.m_size; + + if (BASISU_IS_BITWISE_COPYABLE(T)) + memcpy(m_p, other.m_p, m_size * sizeof(T)); + else + { + T* pDst = m_p; + const T* pSrc = other.m_p; + for (uint32_t i = m_size; i > 0; i--) + construct(pDst++, *pSrc++); + } + } + + inline explicit vector(size_t size) : + m_p(NULL), + m_size(0), + m_capacity(0) + { + resize(size); + } + + inline ~vector() + { + if (m_p) + { + scalar_type::destruct_array(m_p, m_size); + free(m_p); + } + } + + inline vector& operator= (const vector& other) + { + if (this == &other) + return *this; + + if (m_capacity >= other.m_size) + resize(0); + else + { + clear(); + increase_capacity(other.m_size, false); + } + + if (BASISU_IS_BITWISE_COPYABLE(T)) + memcpy(m_p, other.m_p, other.m_size * sizeof(T)); + else + { + T* pDst = m_p; + const T* pSrc = other.m_p; + for (uint32_t i = other.m_size; i > 0; i--) + construct(pDst++, *pSrc++); + } + + m_size = other.m_size; + + return *this; + } + + BASISU_FORCE_INLINE const T* begin() const { return m_p; } + BASISU_FORCE_INLINE T* begin() { return m_p; } + + BASISU_FORCE_INLINE const T* end() const { return m_p + m_size; } + BASISU_FORCE_INLINE T* end() { return m_p + m_size; } + + BASISU_FORCE_INLINE bool empty() const { return !m_size; } + BASISU_FORCE_INLINE uint32_t size() const { return m_size; } + BASISU_FORCE_INLINE uint32_t size_in_bytes() const { return m_size * sizeof(T); } + BASISU_FORCE_INLINE uint32_t capacity() const { return m_capacity; } + + // operator[] will assert on out of range indices, but in final builds there is (and will never be) any range checking on this method. + //BASISU_FORCE_INLINE const T& operator[] (uint32_t i) const { assert(i < m_size); return m_p[i]; } + //BASISU_FORCE_INLINE T& operator[] (uint32_t i) { assert(i < m_size); return m_p[i]; } + +#if !BASISU_VECTOR_FORCE_CHECKING + BASISU_FORCE_INLINE const T& operator[] (size_t i) const { assert(i < m_size); return m_p[i]; } + BASISU_FORCE_INLINE T& operator[] (size_t i) { assert(i < m_size); return m_p[i]; } +#else + BASISU_FORCE_INLINE const T& operator[] (size_t i) const + { + if (i >= m_size) + { + fprintf(stderr, "operator[] invalid index: %u, max entries %u, type size %u\n", (uint32_t)i, m_size, (uint32_t)sizeof(T)); + abort(); + } + return m_p[i]; + } + BASISU_FORCE_INLINE T& operator[] (size_t i) + { + if (i >= m_size) + { + fprintf(stderr, "operator[] invalid index: %u, max entries %u, type size %u\n", (uint32_t)i, m_size, (uint32_t)sizeof(T)); + abort(); + } + return m_p[i]; + } +#endif + + // at() always includes range checking, even in final builds, unlike operator []. + // The first element is returned if the index is out of range. + BASISU_FORCE_INLINE const T& at(size_t i) const { assert(i < m_size); return (i >= m_size) ? m_p[0] : m_p[i]; } + BASISU_FORCE_INLINE T& at(size_t i) { assert(i < m_size); return (i >= m_size) ? m_p[0] : m_p[i]; } + +#if !BASISU_VECTOR_FORCE_CHECKING + BASISU_FORCE_INLINE const T& front() const { assert(m_size); return m_p[0]; } + BASISU_FORCE_INLINE T& front() { assert(m_size); return m_p[0]; } + + BASISU_FORCE_INLINE const T& back() const { assert(m_size); return m_p[m_size - 1]; } + BASISU_FORCE_INLINE T& back() { assert(m_size); return m_p[m_size - 1]; } +#else + BASISU_FORCE_INLINE const T& front() const + { + if (!m_size) + { + fprintf(stderr, "front: vector is empty, type size %u\n", (uint32_t)sizeof(T)); + abort(); + } + return m_p[0]; + } + BASISU_FORCE_INLINE T& front() + { + if (!m_size) + { + fprintf(stderr, "front: vector is empty, type size %u\n", (uint32_t)sizeof(T)); + abort(); + } + return m_p[0]; + } + + BASISU_FORCE_INLINE const T& back() const + { + if(!m_size) + { + fprintf(stderr, "back: vector is empty, type size %u\n", (uint32_t)sizeof(T)); + abort(); + } + return m_p[m_size - 1]; + } + BASISU_FORCE_INLINE T& back() + { + if (!m_size) + { + fprintf(stderr, "back: vector is empty, type size %u\n", (uint32_t)sizeof(T)); + abort(); + } + return m_p[m_size - 1]; + } +#endif + + BASISU_FORCE_INLINE const T* get_ptr() const { return m_p; } + BASISU_FORCE_INLINE T* get_ptr() { return m_p; } + + BASISU_FORCE_INLINE const T* data() const { return m_p; } + BASISU_FORCE_INLINE T* data() { return m_p; } + + // clear() sets the container to empty, then frees the allocated block. + inline void clear() + { + if (m_p) + { + scalar_type::destruct_array(m_p, m_size); + free(m_p); + m_p = NULL; + m_size = 0; + m_capacity = 0; + } + } + + inline void clear_no_destruction() + { + if (m_p) + { + free(m_p); + m_p = NULL; + m_size = 0; + m_capacity = 0; + } + } + + inline void reserve(size_t new_capacity_size_t) + { + if (new_capacity_size_t > UINT32_MAX) + { + assert(0); + return; + } + + uint32_t new_capacity = (uint32_t)new_capacity_size_t; + + if (new_capacity > m_capacity) + increase_capacity(new_capacity, false); + else if (new_capacity < m_capacity) + { + // Must work around the lack of a "decrease_capacity()" method. + // This case is rare enough in practice that it's probably not worth implementing an optimized in-place resize. + vector tmp; + tmp.increase_capacity(helpers::maximum(m_size, new_capacity), false); + tmp = *this; + swap(tmp); + } + } + + inline bool try_reserve(size_t new_capacity_size_t) + { + if (new_capacity_size_t > UINT32_MAX) + { + assert(0); + return false; + } + + uint32_t new_capacity = (uint32_t)new_capacity_size_t; + + if (new_capacity > m_capacity) + { + if (!increase_capacity(new_capacity, false)) + return false; + } + else if (new_capacity < m_capacity) + { + // Must work around the lack of a "decrease_capacity()" method. + // This case is rare enough in practice that it's probably not worth implementing an optimized in-place resize. + vector tmp; + tmp.increase_capacity(helpers::maximum(m_size, new_capacity), false); + tmp = *this; + swap(tmp); + } + + return true; + } + + // resize(0) sets the container to empty, but does not free the allocated block. + inline void resize(size_t new_size_size_t, bool grow_hint = false) + { + if (new_size_size_t > UINT32_MAX) + { + assert(0); + return; + } + + uint32_t new_size = (uint32_t)new_size_size_t; + + if (m_size != new_size) + { + if (new_size < m_size) + scalar_type::destruct_array(m_p + new_size, m_size - new_size); + else + { + if (new_size > m_capacity) + increase_capacity(new_size, (new_size == (m_size + 1)) || grow_hint); + + scalar_type::construct_array(m_p + m_size, new_size - m_size); + } + + m_size = new_size; + } + } + + inline bool try_resize(size_t new_size_size_t, bool grow_hint = false) + { + if (new_size_size_t > UINT32_MAX) + { + assert(0); + return false; + } + + uint32_t new_size = (uint32_t)new_size_size_t; + + if (m_size != new_size) + { + if (new_size < m_size) + scalar_type::destruct_array(m_p + new_size, m_size - new_size); + else + { + if (new_size > m_capacity) + { + if (!increase_capacity(new_size, (new_size == (m_size + 1)) || grow_hint, true)) + return false; + } + + scalar_type::construct_array(m_p + m_size, new_size - m_size); + } + + m_size = new_size; + } + + return true; + } + + // If size >= capacity/2, reset() sets the container's size to 0 but doesn't free the allocated block (because the container may be similarly loaded in the future). + // Otherwise it blows away the allocated block. See http://www.codercorner.com/blog/?p=494 + inline void reset() + { + if (m_size >= (m_capacity >> 1)) + resize(0); + else + clear(); + } + + inline T* enlarge(uint32_t i) + { + uint32_t cur_size = m_size; + resize(cur_size + i, true); + return get_ptr() + cur_size; + } + + inline T* try_enlarge(uint32_t i) + { + uint32_t cur_size = m_size; + if (!try_resize(cur_size + i, true)) + return NULL; + return get_ptr() + cur_size; + } + + BASISU_FORCE_INLINE void push_back(const T& obj) + { + assert(!m_p || (&obj < m_p) || (&obj >= (m_p + m_size))); + + if (m_size >= m_capacity) + increase_capacity(m_size + 1, true); + + scalar_type::construct(m_p + m_size, obj); + m_size++; + } + + inline bool try_push_back(const T& obj) + { + assert(!m_p || (&obj < m_p) || (&obj >= (m_p + m_size))); + + if (m_size >= m_capacity) + { + if (!increase_capacity(m_size + 1, true, true)) + return false; + } + + scalar_type::construct(m_p + m_size, obj); + m_size++; + + return true; + } + + inline void push_back_value(T obj) + { + if (m_size >= m_capacity) + increase_capacity(m_size + 1, true); + + scalar_type::construct(m_p + m_size, obj); + m_size++; + } + + inline void pop_back() + { + assert(m_size); + + if (m_size) + { + m_size--; + scalar_type::destruct(&m_p[m_size]); + } + } + + inline void insert(uint32_t index, const T* p, uint32_t n) + { + assert(index <= m_size); + if (!n) + return; + + const uint32_t orig_size = m_size; + resize(m_size + n, true); + + const uint32_t num_to_move = orig_size - index; + + if (BASISU_IS_BITWISE_COPYABLE(T)) + { + // This overwrites the destination object bits, but bitwise copyable means we don't need to worry about destruction. + memmove(m_p + index + n, m_p + index, sizeof(T) * num_to_move); + } + else + { + const T* pSrc = m_p + orig_size - 1; + T* pDst = const_cast(pSrc) + n; + + for (uint32_t i = 0; i < num_to_move; i++) + { + assert((pDst - m_p) < (int)m_size); + *pDst-- = *pSrc--; + } + } + + T* pDst = m_p + index; + + if (BASISU_IS_BITWISE_COPYABLE(T)) + { + // This copies in the new bits, overwriting the existing objects, which is OK for copyable types that don't need destruction. + memcpy(pDst, p, sizeof(T) * n); + } + else + { + for (uint32_t i = 0; i < n; i++) + { + assert((pDst - m_p) < (int)m_size); + *pDst++ = *p++; + } + } + } + + inline void insert(T* p, const T& obj) + { + int64_t ofs = p - begin(); + if ((ofs < 0) || (ofs > UINT32_MAX)) + { + assert(0); + return; + } + + insert((uint32_t)ofs, &obj, 1); + } + + // push_front() isn't going to be very fast - it's only here for usability. + inline void push_front(const T& obj) + { + insert(0, &obj, 1); + } + + vector& append(const vector& other) + { + if (other.m_size) + insert(m_size, &other[0], other.m_size); + return *this; + } + + vector& append(const T* p, uint32_t n) + { + if (n) + insert(m_size, p, n); + return *this; + } + + inline void erase(uint32_t start, uint32_t n) + { + assert((start + n) <= m_size); + if ((start + n) > m_size) + return; + + if (!n) + return; + + const uint32_t num_to_move = m_size - (start + n); + + T* pDst = m_p + start; + + const T* pSrc = m_p + start + n; + + if (BASISU_IS_BITWISE_COPYABLE_OR_MOVABLE(T)) + { + // This test is overly cautious. + if ((!BASISU_IS_BITWISE_COPYABLE(T)) || (BASISU_HAS_DESTRUCTOR(T))) + { + // Type has been marked explictly as bitwise movable, which means we can move them around but they may need to be destructed. + // First destroy the erased objects. + scalar_type::destruct_array(pDst, n); + } + + // Copy "down" the objects to preserve, filling in the empty slots. + memmove(pDst, pSrc, num_to_move * sizeof(T)); + } + else + { + // Type is not bitwise copyable or movable. + // Move them down one at a time by using the equals operator, and destroying anything that's left over at the end. + T* pDst_end = pDst + num_to_move; + while (pDst != pDst_end) + *pDst++ = *pSrc++; + + scalar_type::destruct_array(pDst_end, n); + } + + m_size -= n; + } + + inline void erase(uint32_t index) + { + erase(index, 1); + } + + inline void erase(T* p) + { + assert((p >= m_p) && (p < (m_p + m_size))); + erase(static_cast(p - m_p)); + } + + inline void erase(T *pFirst, T *pEnd) + { + assert(pFirst <= pEnd); + assert(pFirst >= begin() && pFirst <= end()); + assert(pEnd >= begin() && pEnd <= end()); + + int64_t ofs = pFirst - begin(); + if ((ofs < 0) || (ofs > UINT32_MAX)) + { + assert(0); + return; + } + + int64_t n = pEnd - pFirst; + if ((n < 0) || (n > UINT32_MAX)) + { + assert(0); + return; + } + + erase((uint32_t)ofs, (uint32_t)n); + } + + void erase_unordered(uint32_t index) + { + assert(index < m_size); + + if ((index + 1) < m_size) + (*this)[index] = back(); + + pop_back(); + } + + inline bool operator== (const vector& rhs) const + { + if (m_size != rhs.m_size) + return false; + else if (m_size) + { + if (scalar_type::cFlag) + return memcmp(m_p, rhs.m_p, sizeof(T) * m_size) == 0; + else + { + const T* pSrc = m_p; + const T* pDst = rhs.m_p; + for (uint32_t i = m_size; i; i--) + if (!(*pSrc++ == *pDst++)) + return false; + } + } + + return true; + } + + inline bool operator< (const vector& rhs) const + { + const uint32_t min_size = helpers::minimum(m_size, rhs.m_size); + + const T* pSrc = m_p; + const T* pSrc_end = m_p + min_size; + const T* pDst = rhs.m_p; + + while ((pSrc < pSrc_end) && (*pSrc == *pDst)) + { + pSrc++; + pDst++; + } + + if (pSrc < pSrc_end) + return *pSrc < *pDst; + + return m_size < rhs.m_size; + } + + inline void swap(vector& other) + { + std::swap(m_p, other.m_p); + std::swap(m_size, other.m_size); + std::swap(m_capacity, other.m_capacity); + } + + inline void sort() + { + std::sort(begin(), end()); + } + + inline void unique() + { + if (!empty()) + { + sort(); + + resize(std::unique(begin(), end()) - begin()); + } + } + + inline void reverse() + { + uint32_t j = m_size >> 1; + for (uint32_t i = 0; i < j; i++) + std::swap(m_p[i], m_p[m_size - 1 - i]); + } + + inline int find(const T& key) const + { + const T* p = m_p; + const T* p_end = m_p + m_size; + + uint32_t index = 0; + + while (p != p_end) + { + if (key == *p) + return index; + + p++; + index++; + } + + return cInvalidIndex; + } + + inline int find_sorted(const T& key) const + { + if (m_size) + { + // Uniform binary search - Knuth Algorithm 6.2.1 U, unrolled twice. + int i = ((m_size + 1) >> 1) - 1; + int m = m_size; + + for (; ; ) + { + assert(i >= 0 && i < (int)m_size); + const T* pKey_i = m_p + i; + int cmp = key < *pKey_i; +#if defined(_DEBUG) || defined(DEBUG) + int cmp2 = *pKey_i < key; + assert((cmp != cmp2) || (key == *pKey_i)); +#endif + if ((!cmp) && (key == *pKey_i)) return i; + m >>= 1; + if (!m) break; + cmp = -cmp; + i += (((m + 1) >> 1) ^ cmp) - cmp; + if (i < 0) + break; + + assert(i >= 0 && i < (int)m_size); + pKey_i = m_p + i; + cmp = key < *pKey_i; +#if defined(_DEBUG) || defined(DEBUG) + cmp2 = *pKey_i < key; + assert((cmp != cmp2) || (key == *pKey_i)); +#endif + if ((!cmp) && (key == *pKey_i)) return i; + m >>= 1; + if (!m) break; + cmp = -cmp; + i += (((m + 1) >> 1) ^ cmp) - cmp; + if (i < 0) + break; + } + } + + return cInvalidIndex; + } + + template + inline int find_sorted(const T& key, Q less_than) const + { + if (m_size) + { + // Uniform binary search - Knuth Algorithm 6.2.1 U, unrolled twice. + int i = ((m_size + 1) >> 1) - 1; + int m = m_size; + + for (; ; ) + { + assert(i >= 0 && i < (int)m_size); + const T* pKey_i = m_p + i; + int cmp = less_than(key, *pKey_i); + if ((!cmp) && (!less_than(*pKey_i, key))) return i; + m >>= 1; + if (!m) break; + cmp = -cmp; + i += (((m + 1) >> 1) ^ cmp) - cmp; + if (i < 0) + break; + + assert(i >= 0 && i < (int)m_size); + pKey_i = m_p + i; + cmp = less_than(key, *pKey_i); + if ((!cmp) && (!less_than(*pKey_i, key))) return i; + m >>= 1; + if (!m) break; + cmp = -cmp; + i += (((m + 1) >> 1) ^ cmp) - cmp; + if (i < 0) + break; + } + } + + return cInvalidIndex; + } + + inline uint32_t count_occurences(const T& key) const + { + uint32_t c = 0; + + const T* p = m_p; + const T* p_end = m_p + m_size; + + while (p != p_end) + { + if (key == *p) + c++; + + p++; + } + + return c; + } + + inline void set_all(const T& o) + { + if ((sizeof(T) == 1) && (scalar_type::cFlag)) + memset(m_p, *reinterpret_cast(&o), m_size); + else + { + T* pDst = m_p; + T* pDst_end = pDst + m_size; + while (pDst != pDst_end) + *pDst++ = o; + } + } + + // Caller assumes ownership of the heap block associated with the container. Container is cleared. + inline void* assume_ownership() + { + T* p = m_p; + m_p = NULL; + m_size = 0; + m_capacity = 0; + return p; + } + + // Caller is granting ownership of the indicated heap block. + // Block must have size constructed elements, and have enough room for capacity elements. + // The block must have been allocated using malloc(). + // Important: This method is used in Basis Universal. If you change how this container allocates memory, you'll need to change any users of this method. + inline bool grant_ownership(T* p, uint32_t size, uint32_t capacity) + { + // To to prevent the caller from obviously shooting themselves in the foot. + if (((p + capacity) > m_p) && (p < (m_p + m_capacity))) + { + // Can grant ownership of a block inside the container itself! + assert(0); + return false; + } + + if (size > capacity) + { + assert(0); + return false; + } + + if (!p) + { + if (capacity) + { + assert(0); + return false; + } + } + else if (!capacity) + { + assert(0); + return false; + } + + clear(); + m_p = p; + m_size = size; + m_capacity = capacity; + return true; + } + + private: + T* m_p; + uint32_t m_size; + uint32_t m_capacity; + + template struct is_vector { enum { cFlag = false }; }; + template struct is_vector< vector > { enum { cFlag = true }; }; + + static void object_mover(void* pDst_void, void* pSrc_void, uint32_t num) + { + T* pSrc = static_cast(pSrc_void); + T* const pSrc_end = pSrc + num; + T* pDst = static_cast(pDst_void); + + while (pSrc != pSrc_end) + { + // placement new + new (static_cast(pDst)) T(*pSrc); + pSrc->~T(); + ++pSrc; + ++pDst; + } + } + + inline bool increase_capacity(uint32_t min_new_capacity, bool grow_hint, bool nofail = false) + { + return reinterpret_cast(this)->increase_capacity( + min_new_capacity, grow_hint, sizeof(T), + (BASISU_IS_BITWISE_COPYABLE_OR_MOVABLE(T) || (is_vector::cFlag)) ? NULL : object_mover, nofail); + } + }; + + template struct bitwise_movable< vector > { enum { cFlag = true }; }; + + // Hash map + + template + struct hasher + { + inline size_t operator() (const T& key) const { return static_cast(key); } + }; + + template + struct equal_to + { + inline bool operator()(const T& a, const T& b) const { return a == b; } + }; + + // Important: The Hasher and Equals objects must be bitwise movable! + template, typename Equals = equal_to > + class hash_map + { + public: + class iterator; + class const_iterator; + + private: + friend class iterator; + friend class const_iterator; + + enum state + { + cStateInvalid = 0, + cStateValid = 1 + }; + + enum + { + cMinHashSize = 4U + }; + + public: + typedef hash_map hash_map_type; + typedef std::pair value_type; + typedef Key key_type; + typedef Value referent_type; + typedef Hasher hasher_type; + typedef Equals equals_type; + + hash_map() : + m_hash_shift(32), m_num_valid(0), m_grow_threshold(0) + { + } + + hash_map(const hash_map& other) : + m_values(other.m_values), + m_hash_shift(other.m_hash_shift), + m_hasher(other.m_hasher), + m_equals(other.m_equals), + m_num_valid(other.m_num_valid), + m_grow_threshold(other.m_grow_threshold) + { + } + + hash_map& operator= (const hash_map& other) + { + if (this == &other) + return *this; + + clear(); + + m_values = other.m_values; + m_hash_shift = other.m_hash_shift; + m_num_valid = other.m_num_valid; + m_grow_threshold = other.m_grow_threshold; + m_hasher = other.m_hasher; + m_equals = other.m_equals; + + return *this; + } + + inline ~hash_map() + { + clear(); + } + + const Equals& get_equals() const { return m_equals; } + Equals& get_equals() { return m_equals; } + + void set_equals(const Equals& equals) { m_equals = equals; } + + const Hasher& get_hasher() const { return m_hasher; } + Hasher& get_hasher() { return m_hasher; } + + void set_hasher(const Hasher& hasher) { m_hasher = hasher; } + + inline void clear() + { + if (!m_values.empty()) + { + if (BASISU_HAS_DESTRUCTOR(Key) || BASISU_HAS_DESTRUCTOR(Value)) + { + node* p = &get_node(0); + node* p_end = p + m_values.size(); + + uint32_t num_remaining = m_num_valid; + while (p != p_end) + { + if (p->state) + { + destruct_value_type(p); + num_remaining--; + if (!num_remaining) + break; + } + + p++; + } + } + + m_values.clear_no_destruction(); + + m_hash_shift = 32; + m_num_valid = 0; + m_grow_threshold = 0; + } + } + + inline void reset() + { + if (!m_num_valid) + return; + + if (BASISU_HAS_DESTRUCTOR(Key) || BASISU_HAS_DESTRUCTOR(Value)) + { + node* p = &get_node(0); + node* p_end = p + m_values.size(); + + uint32_t num_remaining = m_num_valid; + while (p != p_end) + { + if (p->state) + { + destruct_value_type(p); + p->state = cStateInvalid; + + num_remaining--; + if (!num_remaining) + break; + } + + p++; + } + } + else if (sizeof(node) <= 32) + { + memset(&m_values[0], 0, m_values.size_in_bytes()); + } + else + { + node* p = &get_node(0); + node* p_end = p + m_values.size(); + + uint32_t num_remaining = m_num_valid; + while (p != p_end) + { + if (p->state) + { + p->state = cStateInvalid; + + num_remaining--; + if (!num_remaining) + break; + } + + p++; + } + } + + m_num_valid = 0; + } + + inline uint32_t size() + { + return m_num_valid; + } + + inline uint32_t get_table_size() + { + return m_values.size(); + } + + inline bool empty() + { + return !m_num_valid; + } + + inline void reserve(uint32_t new_capacity) + { + uint64_t new_hash_size = helpers::maximum(1U, new_capacity); + + new_hash_size = new_hash_size * 2ULL; + + if (!helpers::is_power_of_2(new_hash_size)) + new_hash_size = helpers::next_pow2(new_hash_size); + + new_hash_size = helpers::maximum(cMinHashSize, new_hash_size); + + new_hash_size = helpers::minimum(0x80000000UL, new_hash_size); + + if (new_hash_size > m_values.size()) + rehash((uint32_t)new_hash_size); + } + + class iterator + { + friend class hash_map; + friend class hash_map::const_iterator; + + public: + inline iterator() : m_pTable(NULL), m_index(0) { } + inline iterator(hash_map_type& table, uint32_t index) : m_pTable(&table), m_index(index) { } + inline iterator(const iterator& other) : m_pTable(other.m_pTable), m_index(other.m_index) { } + + inline iterator& operator= (const iterator& other) + { + m_pTable = other.m_pTable; + m_index = other.m_index; + return *this; + } + + // post-increment + inline iterator operator++(int) + { + iterator result(*this); + ++*this; + return result; + } + + // pre-increment + inline iterator& operator++() + { + probe(); + return *this; + } + + inline value_type& operator*() const { return *get_cur(); } + inline value_type* operator->() const { return get_cur(); } + + inline bool operator == (const iterator& b) const { return (m_pTable == b.m_pTable) && (m_index == b.m_index); } + inline bool operator != (const iterator& b) const { return !(*this == b); } + inline bool operator == (const const_iterator& b) const { return (m_pTable == b.m_pTable) && (m_index == b.m_index); } + inline bool operator != (const const_iterator& b) const { return !(*this == b); } + + private: + hash_map_type* m_pTable; + uint32_t m_index; + + inline value_type* get_cur() const + { + assert(m_pTable && (m_index < m_pTable->m_values.size())); + assert(m_pTable->get_node_state(m_index) == cStateValid); + + return &m_pTable->get_node(m_index); + } + + inline void probe() + { + assert(m_pTable); + m_index = m_pTable->find_next(m_index); + } + }; + + class const_iterator + { + friend class hash_map; + friend class hash_map::iterator; + + public: + inline const_iterator() : m_pTable(NULL), m_index(0) { } + inline const_iterator(const hash_map_type& table, uint32_t index) : m_pTable(&table), m_index(index) { } + inline const_iterator(const iterator& other) : m_pTable(other.m_pTable), m_index(other.m_index) { } + inline const_iterator(const const_iterator& other) : m_pTable(other.m_pTable), m_index(other.m_index) { } + + inline const_iterator& operator= (const const_iterator& other) + { + m_pTable = other.m_pTable; + m_index = other.m_index; + return *this; + } + + inline const_iterator& operator= (const iterator& other) + { + m_pTable = other.m_pTable; + m_index = other.m_index; + return *this; + } + + // post-increment + inline const_iterator operator++(int) + { + const_iterator result(*this); + ++*this; + return result; + } + + // pre-increment + inline const_iterator& operator++() + { + probe(); + return *this; + } + + inline const value_type& operator*() const { return *get_cur(); } + inline const value_type* operator->() const { return get_cur(); } + + inline bool operator == (const const_iterator& b) const { return (m_pTable == b.m_pTable) && (m_index == b.m_index); } + inline bool operator != (const const_iterator& b) const { return !(*this == b); } + inline bool operator == (const iterator& b) const { return (m_pTable == b.m_pTable) && (m_index == b.m_index); } + inline bool operator != (const iterator& b) const { return !(*this == b); } + + private: + const hash_map_type* m_pTable; + uint32_t m_index; + + inline const value_type* get_cur() const + { + assert(m_pTable && (m_index < m_pTable->m_values.size())); + assert(m_pTable->get_node_state(m_index) == cStateValid); + + return &m_pTable->get_node(m_index); + } + + inline void probe() + { + assert(m_pTable); + m_index = m_pTable->find_next(m_index); + } + }; + + inline const_iterator begin() const + { + if (!m_num_valid) + return end(); + + return const_iterator(*this, find_next(UINT32_MAX)); + } + + inline const_iterator end() const + { + return const_iterator(*this, m_values.size()); + } + + inline iterator begin() + { + if (!m_num_valid) + return end(); + + return iterator(*this, find_next(UINT32_MAX)); + } + + inline iterator end() + { + return iterator(*this, m_values.size()); + } + + // insert_result.first will always point to inserted key/value (or the already existing key/value). + // insert_resutt.second will be true if a new key/value was inserted, or false if the key already existed (in which case first will point to the already existing value). + typedef std::pair insert_result; + + inline insert_result insert(const Key& k, const Value& v = Value()) + { + insert_result result; + if (!insert_no_grow(result, k, v)) + { + grow(); + + // This must succeed. + if (!insert_no_grow(result, k, v)) + { + fprintf(stderr, "insert() failed"); + abort(); + } + } + + return result; + } + + inline insert_result insert(const value_type& v) + { + return insert(v.first, v.second); + } + + inline const_iterator find(const Key& k) const + { + return const_iterator(*this, find_index(k)); + } + + inline iterator find(const Key& k) + { + return iterator(*this, find_index(k)); + } + + inline bool erase(const Key& k) + { + uint32_t i = find_index(k); + + if (i >= m_values.size()) + return false; + + node* pDst = &get_node(i); + destruct_value_type(pDst); + pDst->state = cStateInvalid; + + m_num_valid--; + + for (; ; ) + { + uint32_t r, j = i; + + node* pSrc = pDst; + + do + { + if (!i) + { + i = m_values.size() - 1; + pSrc = &get_node(i); + } + else + { + i--; + pSrc--; + } + + if (!pSrc->state) + return true; + + r = hash_key(pSrc->first); + + } while ((i <= r && r < j) || (r < j && j < i) || (j < i && i <= r)); + + move_node(pDst, pSrc); + + pDst = pSrc; + } + } + + inline void swap(hash_map_type& other) + { + m_values.swap(other.m_values); + std::swap(m_hash_shift, other.m_hash_shift); + std::swap(m_num_valid, other.m_num_valid); + std::swap(m_grow_threshold, other.m_grow_threshold); + std::swap(m_hasher, other.m_hasher); + std::swap(m_equals, other.m_equals); + } + + private: + struct node : public value_type + { + uint8_t state; + }; + + static inline void construct_value_type(value_type* pDst, const Key& k, const Value& v) + { + if (BASISU_IS_BITWISE_COPYABLE(Key)) + memcpy(&pDst->first, &k, sizeof(Key)); + else + scalar_type::construct(&pDst->first, k); + + if (BASISU_IS_BITWISE_COPYABLE(Value)) + memcpy(&pDst->second, &v, sizeof(Value)); + else + scalar_type::construct(&pDst->second, v); + } + + static inline void construct_value_type(value_type* pDst, const value_type* pSrc) + { + if ((BASISU_IS_BITWISE_COPYABLE(Key)) && (BASISU_IS_BITWISE_COPYABLE(Value))) + { + memcpy(pDst, pSrc, sizeof(value_type)); + } + else + { + if (BASISU_IS_BITWISE_COPYABLE(Key)) + memcpy(&pDst->first, &pSrc->first, sizeof(Key)); + else + scalar_type::construct(&pDst->first, pSrc->first); + + if (BASISU_IS_BITWISE_COPYABLE(Value)) + memcpy(&pDst->second, &pSrc->second, sizeof(Value)); + else + scalar_type::construct(&pDst->second, pSrc->second); + } + } + + static inline void destruct_value_type(value_type* p) + { + scalar_type::destruct(&p->first); + scalar_type::destruct(&p->second); + } + + // Moves *pSrc to *pDst efficiently. + // pDst should NOT be constructed on entry. + static inline void move_node(node* pDst, node* pSrc, bool update_src_state = true) + { + assert(!pDst->state); + + if (BASISU_IS_BITWISE_COPYABLE_OR_MOVABLE(Key) && BASISU_IS_BITWISE_COPYABLE_OR_MOVABLE(Value)) + { + memcpy(pDst, pSrc, sizeof(node)); + } + else + { + if (BASISU_IS_BITWISE_COPYABLE_OR_MOVABLE(Key)) + memcpy(&pDst->first, &pSrc->first, sizeof(Key)); + else + { + scalar_type::construct(&pDst->first, pSrc->first); + scalar_type::destruct(&pSrc->first); + } + + if (BASISU_IS_BITWISE_COPYABLE_OR_MOVABLE(Value)) + memcpy(&pDst->second, &pSrc->second, sizeof(Value)); + else + { + scalar_type::construct(&pDst->second, pSrc->second); + scalar_type::destruct(&pSrc->second); + } + + pDst->state = cStateValid; + } + + if (update_src_state) + pSrc->state = cStateInvalid; + } + + struct raw_node + { + inline raw_node() + { + node* p = reinterpret_cast(this); + p->state = cStateInvalid; + } + + inline ~raw_node() + { + node* p = reinterpret_cast(this); + if (p->state) + hash_map_type::destruct_value_type(p); + } + + inline raw_node(const raw_node& other) + { + node* pDst = reinterpret_cast(this); + const node* pSrc = reinterpret_cast(&other); + + if (pSrc->state) + { + hash_map_type::construct_value_type(pDst, pSrc); + pDst->state = cStateValid; + } + else + pDst->state = cStateInvalid; + } + + inline raw_node& operator= (const raw_node& rhs) + { + if (this == &rhs) + return *this; + + node* pDst = reinterpret_cast(this); + const node* pSrc = reinterpret_cast(&rhs); + + if (pSrc->state) + { + if (pDst->state) + { + pDst->first = pSrc->first; + pDst->second = pSrc->second; + } + else + { + hash_map_type::construct_value_type(pDst, pSrc); + pDst->state = cStateValid; + } + } + else if (pDst->state) + { + hash_map_type::destruct_value_type(pDst); + pDst->state = cStateInvalid; + } + + return *this; + } + + uint8_t m_bits[sizeof(node)]; + }; + + typedef basisu::vector node_vector; + + node_vector m_values; + uint32_t m_hash_shift; + + Hasher m_hasher; + Equals m_equals; + + uint32_t m_num_valid; + + uint32_t m_grow_threshold; + + inline uint32_t hash_key(const Key& k) const + { + assert((1U << (32U - m_hash_shift)) == m_values.size()); + + uint32_t hash = static_cast(m_hasher(k)); + + // Fibonacci hashing + hash = (2654435769U * hash) >> m_hash_shift; + + assert(hash < m_values.size()); + return hash; + } + + inline const node& get_node(uint32_t index) const + { + return *reinterpret_cast(&m_values[index]); + } + + inline node& get_node(uint32_t index) + { + return *reinterpret_cast(&m_values[index]); + } + + inline state get_node_state(uint32_t index) const + { + return static_cast(get_node(index).state); + } + + inline void set_node_state(uint32_t index, bool valid) + { + get_node(index).state = valid; + } + + inline void grow() + { + uint64_t n = m_values.size() * 3ULL; // was * 2 + + if (!helpers::is_power_of_2(n)) + n = helpers::next_pow2(n); + + if (n > 0x80000000UL) + n = 0x80000000UL; + + rehash(helpers::maximum(cMinHashSize, (uint32_t)n)); + } + + inline void rehash(uint32_t new_hash_size) + { + assert(new_hash_size >= m_num_valid); + assert(helpers::is_power_of_2(new_hash_size)); + + if ((new_hash_size < m_num_valid) || (new_hash_size == m_values.size())) + return; + + hash_map new_map; + new_map.m_values.resize(new_hash_size); + new_map.m_hash_shift = 32U - helpers::floor_log2i(new_hash_size); + assert(new_hash_size == (1U << (32U - new_map.m_hash_shift))); + new_map.m_grow_threshold = UINT_MAX; + + node* pNode = reinterpret_cast(m_values.begin()); + node* pNode_end = pNode + m_values.size(); + + while (pNode != pNode_end) + { + if (pNode->state) + { + new_map.move_into(pNode); + + if (new_map.m_num_valid == m_num_valid) + break; + } + + pNode++; + } + + new_map.m_grow_threshold = (new_hash_size + 1U) >> 1U; + + m_values.clear_no_destruction(); + m_hash_shift = 32; + + swap(new_map); + } + + inline uint32_t find_next(uint32_t index) const + { + index++; + + if (index >= m_values.size()) + return index; + + const node* pNode = &get_node(index); + + for (; ; ) + { + if (pNode->state) + break; + + if (++index >= m_values.size()) + break; + + pNode++; + } + + return index; + } + + inline uint32_t find_index(const Key& k) const + { + if (m_num_valid) + { + uint32_t index = hash_key(k); + const node* pNode = &get_node(index); + + if (pNode->state) + { + if (m_equals(pNode->first, k)) + return index; + + const uint32_t orig_index = index; + + for (; ; ) + { + if (!index) + { + index = m_values.size() - 1; + pNode = &get_node(index); + } + else + { + index--; + pNode--; + } + + if (index == orig_index) + break; + + if (!pNode->state) + break; + + if (m_equals(pNode->first, k)) + return index; + } + } + } + + return m_values.size(); + } + + inline bool insert_no_grow(insert_result& result, const Key& k, const Value& v = Value()) + { + if (!m_values.size()) + return false; + + uint32_t index = hash_key(k); + node* pNode = &get_node(index); + + if (pNode->state) + { + if (m_equals(pNode->first, k)) + { + result.first = iterator(*this, index); + result.second = false; + return true; + } + + const uint32_t orig_index = index; + + for (; ; ) + { + if (!index) + { + index = m_values.size() - 1; + pNode = &get_node(index); + } + else + { + index--; + pNode--; + } + + if (orig_index == index) + return false; + + if (!pNode->state) + break; + + if (m_equals(pNode->first, k)) + { + result.first = iterator(*this, index); + result.second = false; + return true; + } + } + } + + if (m_num_valid >= m_grow_threshold) + return false; + + construct_value_type(pNode, k, v); + + pNode->state = cStateValid; + + m_num_valid++; + assert(m_num_valid <= m_values.size()); + + result.first = iterator(*this, index); + result.second = true; + + return true; + } + + inline void move_into(node* pNode) + { + uint32_t index = hash_key(pNode->first); + node* pDst_node = &get_node(index); + + if (pDst_node->state) + { + const uint32_t orig_index = index; + + for (; ; ) + { + if (!index) + { + index = m_values.size() - 1; + pDst_node = &get_node(index); + } + else + { + index--; + pDst_node--; + } + + if (index == orig_index) + { + assert(false); + return; + } + + if (!pDst_node->state) + break; + } + } + + move_node(pDst_node, pNode, false); + + m_num_valid++; + } + }; + + template + struct bitwise_movable< hash_map > { enum { cFlag = true }; }; + +#if BASISU_HASHMAP_TEST + extern void hash_map_test(); +#endif + +} // namespace basisu + +namespace std +{ + template + inline void swap(basisu::vector& a, basisu::vector& b) + { + a.swap(b); + } + + template + inline void swap(basisu::hash_map& a, basisu::hash_map& b) + { + a.swap(b); + } + +} // namespace std +/**** ended inlining basisu_containers.h ****/ + +#ifdef max +#undef max +#endif + +#ifdef min +#undef min +#endif + +#ifdef _WIN32 +#define strcasecmp _stricmp +#endif + +// Set to one to enable debug printf()'s when any errors occur, for development/debugging. Especially useful for WebGL development. +#ifndef BASISU_FORCE_DEVEL_MESSAGES +#define BASISU_FORCE_DEVEL_MESSAGES 0 +#endif + +#define BASISU_NOTE_UNUSED(x) (void)(x) +#define BASISU_ARRAY_SIZE(x) (sizeof(x) / sizeof(x[0])) +#define BASISU_NO_EQUALS_OR_COPY_CONSTRUCT(x) x(const x &) = delete; x& operator= (const x &) = delete; +#define BASISU_ASSUME(x) static_assert(x, #x); +#define BASISU_OFFSETOF(s, m) offsetof(s, m) +#define BASISU_STRINGIZE(x) #x +#define BASISU_STRINGIZE2(x) BASISU_STRINGIZE(x) + +#if BASISU_FORCE_DEVEL_MESSAGES + #define BASISU_DEVEL_ERROR(...) do { basisu::debug_printf(__VA_ARGS__); } while(0) +#else + #define BASISU_DEVEL_ERROR(...) +#endif + +namespace basisu +{ + // Types/utilities + +#ifdef _WIN32 + const char BASISU_PATH_SEPERATOR_CHAR = '\\'; +#else + const char BASISU_PATH_SEPERATOR_CHAR = '/'; +#endif + + typedef basisu::vector uint8_vec; + typedef basisu::vector int16_vec; + typedef basisu::vector uint16_vec; + typedef basisu::vector uint_vec; + typedef basisu::vector uint64_vec; + typedef basisu::vector int_vec; + typedef basisu::vector bool_vec; + + void enable_debug_printf(bool enabled); + void debug_printf(const char *pFmt, ...); + + + template inline void clear_obj(T& obj) { memset(&obj, 0, sizeof(obj)); } + + template inline T0 lerp(T0 a, T0 b, T1 c) { return a + (b - a) * c; } + + template inline S maximum(S a, S b) { return (a > b) ? a : b; } + template inline S maximum(S a, S b, S c) { return maximum(maximum(a, b), c); } + template inline S maximum(S a, S b, S c, S d) { return maximum(maximum(maximum(a, b), c), d); } + + template inline S minimum(S a, S b) { return (a < b) ? a : b; } + template inline S minimum(S a, S b, S c) { return minimum(minimum(a, b), c); } + template inline S minimum(S a, S b, S c, S d) { return minimum(minimum(minimum(a, b), c), d); } + + inline float clampf(float value, float low, float high) { if (value < low) value = low; else if (value > high) value = high; return value; } + inline float saturate(float value) { return clampf(value, 0, 1.0f); } + inline uint8_t minimumub(uint8_t a, uint8_t b) { return (a < b) ? a : b; } + inline uint32_t minimumu(uint32_t a, uint32_t b) { return (a < b) ? a : b; } + inline int32_t minimumi(int32_t a, int32_t b) { return (a < b) ? a : b; } + inline float minimumf(float a, float b) { return (a < b) ? a : b; } + inline uint8_t maximumub(uint8_t a, uint8_t b) { return (a > b) ? a : b; } + inline uint32_t maximumu(uint32_t a, uint32_t b) { return (a > b) ? a : b; } + inline int32_t maximumi(int32_t a, int32_t b) { return (a > b) ? a : b; } + inline float maximumf(float a, float b) { return (a > b) ? a : b; } + inline int squarei(int i) { return i * i; } + inline float squaref(float i) { return i * i; } + template inline T square(T a) { return a * a; } + + template inline S clamp(S value, S low, S high) { return (value < low) ? low : ((value > high) ? high : value); } + + inline uint32_t iabs(int32_t i) { return (i < 0) ? static_cast(-i) : static_cast(i); } + inline uint64_t iabs64(int64_t i) { return (i < 0) ? static_cast(-i) : static_cast(i); } + + template inline void clear_vector(T &vec) { vec.erase(vec.begin(), vec.end()); } + template inline typename T::value_type *enlarge_vector(T &vec, size_t n) { size_t cs = vec.size(); vec.resize(cs + n); return &vec[cs]; } + + inline bool is_pow2(uint32_t x) { return x && ((x & (x - 1U)) == 0U); } + inline bool is_pow2(uint64_t x) { return x && ((x & (x - 1U)) == 0U); } + + template inline T open_range_check(T v, T minv, T maxv) { assert(v >= minv && v < maxv); BASISU_NOTE_UNUSED(minv); BASISU_NOTE_UNUSED(maxv); return v; } + template inline T open_range_check(T v, T maxv) { assert(v < maxv); BASISU_NOTE_UNUSED(maxv); return v; } + + inline uint32_t total_bits(uint32_t v) { uint32_t l = 0; for ( ; v > 0U; ++l) v >>= 1; return l; } + + template inline T saturate(T val) { return clamp(val, 0.0f, 1.0f); } + + template inline void append_vector(T &vec, const R *pObjs, size_t n) + { + if (n) + { + if (vec.size()) + { + assert((pObjs + n) <= vec.begin() || (pObjs >= vec.end())); + } + const size_t cur_s = vec.size(); + vec.resize(cur_s + n); + memcpy(&vec[cur_s], pObjs, sizeof(R) * n); + } + } + + template inline void append_vector(T &vec, const T &other_vec) + { + assert(&vec != &other_vec); + if (other_vec.size()) + append_vector(vec, &other_vec[0], other_vec.size()); + } + + template inline void vector_ensure_element_is_valid(T &vec, size_t idx) + { + if (idx >= vec.size()) + vec.resize(idx + 1); + } + + template inline void vector_sort(T &vec) + { + if (vec.size()) + std::sort(vec.begin(), vec.end()); + } + + template inline bool unordered_set_contains(T& set, const U&obj) + { + return set.find(obj) != set.end(); + } + + template int vector_find(const T &vec, const typename T::value_type &obj) + { + assert(vec.size() <= INT_MAX); + for (size_t i = 0; i < vec.size(); i++) + if (vec[i] == obj) + return static_cast(i); + return -1; + } + + template void vector_set_all(T &vec, const typename T::value_type &obj) + { + for (size_t i = 0; i < vec.size(); i++) + vec[i] = obj; + } + + inline uint64_t read_be64(const void *p) + { + uint64_t val = 0; + for (uint32_t i = 0; i < 8; i++) + val |= (static_cast(static_cast(p)[7 - i]) << (i * 8)); + return val; + } + + inline void write_be64(void *p, uint64_t x) + { + for (uint32_t i = 0; i < 8; i++) + static_cast(p)[7 - i] = static_cast(x >> (i * 8)); + } + + static inline uint16_t byteswap16(uint16_t x) { return static_cast((x << 8) | (x >> 8)); } + static inline uint32_t byteswap32(uint32_t x) { return ((x << 24) | ((x << 8) & 0x00FF0000) | ((x >> 8) & 0x0000FF00) | (x >> 24)); } + + inline uint32_t floor_log2i(uint32_t v) + { + uint32_t b = 0; + for (; v > 1U; ++b) + v >>= 1; + return b; + } + + inline uint32_t ceil_log2i(uint32_t v) + { + uint32_t b = floor_log2i(v); + if ((b != 32) && (v > (1U << b))) + ++b; + return b; + } + + inline int posmod(int x, int y) + { + if (x >= 0) + return (x < y) ? x : (x % y); + int m = (-x) % y; + return (m != 0) ? (y - m) : m; + } + + inline bool do_excl_ranges_overlap(int la, int ha, int lb, int hb) + { + assert(la < ha && lb < hb); + if ((ha <= lb) || (la >= hb)) return false; + return true; + } + + static inline uint32_t read_le_dword(const uint8_t *pBytes) + { + return (pBytes[3] << 24U) | (pBytes[2] << 16U) | (pBytes[1] << 8U) | (pBytes[0]); + } + + static inline void write_le_dword(uint8_t* pBytes, uint32_t val) + { + pBytes[0] = (uint8_t)val; + pBytes[1] = (uint8_t)(val >> 8U); + pBytes[2] = (uint8_t)(val >> 16U); + pBytes[3] = (uint8_t)(val >> 24U); + } + + // Always little endian 1-8 byte unsigned int + template + struct packed_uint + { + uint8_t m_bytes[NumBytes]; + + inline packed_uint() { static_assert(NumBytes <= sizeof(uint64_t), "Invalid NumBytes"); } + inline packed_uint(uint64_t v) { *this = v; } + inline packed_uint(const packed_uint& other) { *this = other; } + + inline packed_uint& operator= (uint64_t v) + { + for (uint32_t i = 0; i < NumBytes; i++) + m_bytes[i] = static_cast(v >> (i * 8)); + return *this; + } + + inline packed_uint& operator= (const packed_uint& rhs) + { + memcpy(m_bytes, rhs.m_bytes, sizeof(m_bytes)); + return *this; + } + + inline operator uint32_t() const + { + switch (NumBytes) + { + case 1: + { + return m_bytes[0]; + } + case 2: + { + return (m_bytes[1] << 8U) | m_bytes[0]; + } + case 3: + { + return (m_bytes[2] << 16U) | (m_bytes[1] << 8U) | m_bytes[0]; + } + case 4: + { + return read_le_dword(m_bytes); + } + case 5: + { + uint32_t l = read_le_dword(m_bytes); + uint32_t h = m_bytes[4]; + return static_cast(l) | (static_cast(h) << 32U); + } + case 6: + { + uint32_t l = read_le_dword(m_bytes); + uint32_t h = (m_bytes[5] << 8U) | m_bytes[4]; + return static_cast(l) | (static_cast(h) << 32U); + } + case 7: + { + uint32_t l = read_le_dword(m_bytes); + uint32_t h = (m_bytes[6] << 16U) | (m_bytes[5] << 8U) | m_bytes[4]; + return static_cast(l) | (static_cast(h) << 32U); + } + case 8: + { + uint32_t l = read_le_dword(m_bytes); + uint32_t h = read_le_dword(m_bytes + 4); + return static_cast(l) | (static_cast(h) << 32U); + } + default: + { + assert(0); + return 0; + } + } + } + }; + + enum eZero { cZero }; + enum eNoClamp { cNoClamp }; + + // Rice/Huffman entropy coding + + // This is basically Deflate-style canonical Huffman, except we allow for a lot more symbols. + enum + { + cHuffmanMaxSupportedCodeSize = 16, cHuffmanMaxSupportedInternalCodeSize = 31, + cHuffmanFastLookupBits = 10, + cHuffmanMaxSymsLog2 = 14, cHuffmanMaxSyms = 1 << cHuffmanMaxSymsLog2, + + // Small zero runs + cHuffmanSmallZeroRunSizeMin = 3, cHuffmanSmallZeroRunSizeMax = 10, cHuffmanSmallZeroRunExtraBits = 3, + + // Big zero run + cHuffmanBigZeroRunSizeMin = 11, cHuffmanBigZeroRunSizeMax = 138, cHuffmanBigZeroRunExtraBits = 7, + + // Small non-zero run + cHuffmanSmallRepeatSizeMin = 3, cHuffmanSmallRepeatSizeMax = 6, cHuffmanSmallRepeatExtraBits = 2, + + // Big non-zero run + cHuffmanBigRepeatSizeMin = 7, cHuffmanBigRepeatSizeMax = 134, cHuffmanBigRepeatExtraBits = 7, + + cHuffmanTotalCodelengthCodes = 21, cHuffmanSmallZeroRunCode = 17, cHuffmanBigZeroRunCode = 18, cHuffmanSmallRepeatCode = 19, cHuffmanBigRepeatCode = 20 + }; + + static const uint8_t g_huffman_sorted_codelength_codes[] = { cHuffmanSmallZeroRunCode, cHuffmanBigZeroRunCode, cHuffmanSmallRepeatCode, cHuffmanBigRepeatCode, 0, 8, 7, 9, 6, 0xA, 5, 0xB, 4, 0xC, 3, 0xD, 2, 0xE, 1, 0xF, 0x10 }; + const uint32_t cHuffmanTotalSortedCodelengthCodes = sizeof(g_huffman_sorted_codelength_codes) / sizeof(g_huffman_sorted_codelength_codes[0]); + + // GPU texture formats + + enum class texture_format + { + cInvalidTextureFormat = -1, + + // Block-based formats + cETC1, // ETC1 + cETC1S, // ETC1 (subset: diff colors only, no subblocks) + cETC2_RGB, // ETC2 color block (basisu doesn't support ETC2 planar/T/H modes - just basic ETC1) + cETC2_RGBA, // ETC2 EAC alpha block followed by ETC2 color block + cETC2_ALPHA, // ETC2 EAC alpha block + cBC1, // DXT1 + cBC3, // DXT5 (BC4/DXT5A block followed by a BC1/DXT1 block) + cBC4, // DXT5A + cBC5, // 3DC/DXN (two BC4/DXT5A blocks) + cBC7, + cASTC4x4, // LDR only + cPVRTC1_4_RGB, + cPVRTC1_4_RGBA, + cATC_RGB, + cATC_RGBA_INTERPOLATED_ALPHA, + cFXT1_RGB, + cPVRTC2_4_RGBA, + cETC2_R11_EAC, + cETC2_RG11_EAC, + cUASTC4x4, + cBC1_NV, + cBC1_AMD, + + // Uncompressed/raw pixels + cRGBA32, + cRGB565, + cBGR565, + cRGBA4444, + cABGR4444 + }; + + inline uint32_t get_bytes_per_block(texture_format fmt) + { + switch (fmt) + { + case texture_format::cETC1: + case texture_format::cETC1S: + case texture_format::cETC2_RGB: + case texture_format::cETC2_ALPHA: + case texture_format::cBC1: + case texture_format::cBC1_NV: + case texture_format::cBC1_AMD: + case texture_format::cBC4: + case texture_format::cPVRTC1_4_RGB: + case texture_format::cPVRTC1_4_RGBA: + case texture_format::cATC_RGB: + case texture_format::cPVRTC2_4_RGBA: + case texture_format::cETC2_R11_EAC: + return 8; + case texture_format::cRGBA32: + return sizeof(uint32_t) * 16; + default: + break; + } + return 16; + } + + inline uint32_t get_qwords_per_block(texture_format fmt) + { + return get_bytes_per_block(fmt) >> 3; + } + + inline uint32_t get_block_width(texture_format fmt) + { + BASISU_NOTE_UNUSED(fmt); + switch (fmt) + { + case texture_format::cFXT1_RGB: + return 8; + default: + break; + } + return 4; + } + + inline uint32_t get_block_height(texture_format fmt) + { + BASISU_NOTE_UNUSED(fmt); + return 4; + } + +} // namespace basisu + +/**** ended inlining basisu.h ****/ + +#define BASISD_znew (z = 36969 * (z & 65535) + (z >> 16)) + +namespace basisu +{ + extern bool g_debug_printf; +} + +namespace basist +{ + // Low-level formats directly supported by the transcoder (other supported texture formats are combinations of these low-level block formats). + // You probably don't care about these enum's unless you are going pretty low-level and calling the transcoder to decode individual slices. + enum class block_format + { + cETC1, // ETC1S RGB + cETC2_RGBA, // full ETC2 EAC RGBA8 block + cBC1, // DXT1 RGB + cBC3, // BC4 block followed by a four color BC1 block + cBC4, // DXT5A (alpha block only) + cBC5, // two BC4 blocks + cPVRTC1_4_RGB, // opaque-only PVRTC1 4bpp + cPVRTC1_4_RGBA, // PVRTC1 4bpp RGBA + cBC7, // Full BC7 block, any mode + cBC7_M5_COLOR, // RGB BC7 mode 5 color (writes an opaque mode 5 block) + cBC7_M5_ALPHA, // alpha portion of BC7 mode 5 (cBC7_M5_COLOR output data must have been written to the output buffer first to set the mode/rot fields etc.) + cETC2_EAC_A8, // alpha block of ETC2 EAC (first 8 bytes of the 16-bit ETC2 EAC RGBA format) + cASTC_4x4, // ASTC 4x4 (either color-only or color+alpha). Note that the transcoder always currently assumes sRGB is not enabled when outputting ASTC + // data. If you use a sRGB ASTC format you'll get ~1 LSB of additional error, because of the different way ASTC decoders scale 8-bit endpoints to 16-bits during unpacking. + + cATC_RGB, + cATC_RGBA_INTERPOLATED_ALPHA, + cFXT1_RGB, // Opaque-only, has oddball 8x4 pixel block size + + cPVRTC2_4_RGB, + cPVRTC2_4_RGBA, + + cETC2_EAC_R11, + cETC2_EAC_RG11, + + cIndices, // Used internally: Write 16-bit endpoint and selector indices directly to output (output block must be at least 32-bits) + + cRGB32, // Writes RGB components to 32bpp output pixels + cRGBA32, // Writes RGB255 components to 32bpp output pixels + cA32, // Writes alpha component to 32bpp output pixels + + cRGB565, + cBGR565, + + cRGBA4444_COLOR, + cRGBA4444_ALPHA, + cRGBA4444_COLOR_OPAQUE, + cRGBA4444, + + cTotalBlockFormats + }; + + const int COLOR5_PAL0_PREV_HI = 9, COLOR5_PAL0_DELTA_LO = -9, COLOR5_PAL0_DELTA_HI = 31; + const int COLOR5_PAL1_PREV_HI = 21, COLOR5_PAL1_DELTA_LO = -21, COLOR5_PAL1_DELTA_HI = 21; + const int COLOR5_PAL2_PREV_HI = 31, COLOR5_PAL2_DELTA_LO = -31, COLOR5_PAL2_DELTA_HI = 9; + const int COLOR5_PAL_MIN_DELTA_B_RUNLEN = 3, COLOR5_PAL_DELTA_5_RUNLEN_VLC_BITS = 3; + + const uint32_t ENDPOINT_PRED_TOTAL_SYMBOLS = (4 * 4 * 4 * 4) + 1; + const uint32_t ENDPOINT_PRED_REPEAT_LAST_SYMBOL = ENDPOINT_PRED_TOTAL_SYMBOLS - 1; + const uint32_t ENDPOINT_PRED_MIN_REPEAT_COUNT = 3; + const uint32_t ENDPOINT_PRED_COUNT_VLC_BITS = 4; + + const uint32_t NUM_ENDPOINT_PREDS = 3;// BASISU_ARRAY_SIZE(g_endpoint_preds); + const uint32_t CR_ENDPOINT_PRED_INDEX = NUM_ENDPOINT_PREDS - 1; + const uint32_t NO_ENDPOINT_PRED_INDEX = 3;//NUM_ENDPOINT_PREDS; + const uint32_t MAX_SELECTOR_HISTORY_BUF_SIZE = 64; + const uint32_t SELECTOR_HISTORY_BUF_RLE_COUNT_THRESH = 3; + const uint32_t SELECTOR_HISTORY_BUF_RLE_COUNT_BITS = 6; + const uint32_t SELECTOR_HISTORY_BUF_RLE_COUNT_TOTAL = (1 << SELECTOR_HISTORY_BUF_RLE_COUNT_BITS); + + uint16_t crc16(const void *r, size_t size, uint16_t crc); + + class huffman_decoding_table + { + friend class bitwise_decoder; + + public: + huffman_decoding_table() + { + } + + void clear() + { + basisu::clear_vector(m_code_sizes); + basisu::clear_vector(m_lookup); + basisu::clear_vector(m_tree); + } + + bool init(uint32_t total_syms, const uint8_t *pCode_sizes, uint32_t fast_lookup_bits = basisu::cHuffmanFastLookupBits) + { + if (!total_syms) + { + clear(); + return true; + } + + m_code_sizes.resize(total_syms); + memcpy(&m_code_sizes[0], pCode_sizes, total_syms); + + const uint32_t huffman_fast_lookup_size = 1 << fast_lookup_bits; + + m_lookup.resize(0); + m_lookup.resize(huffman_fast_lookup_size); + + m_tree.resize(0); + m_tree.resize(total_syms * 2); + + uint32_t syms_using_codesize[basisu::cHuffmanMaxSupportedInternalCodeSize + 1]; + basisu::clear_obj(syms_using_codesize); + for (uint32_t i = 0; i < total_syms; i++) + { + if (pCode_sizes[i] > basisu::cHuffmanMaxSupportedInternalCodeSize) + return false; + syms_using_codesize[pCode_sizes[i]]++; + } + + uint32_t next_code[basisu::cHuffmanMaxSupportedInternalCodeSize + 1]; + next_code[0] = next_code[1] = 0; + + uint32_t used_syms = 0, total = 0; + for (uint32_t i = 1; i < basisu::cHuffmanMaxSupportedInternalCodeSize; i++) + { + used_syms += syms_using_codesize[i]; + next_code[i + 1] = (total = ((total + syms_using_codesize[i]) << 1)); + } + + if (((1U << basisu::cHuffmanMaxSupportedInternalCodeSize) != total) && (used_syms > 1U)) + return false; + + for (int tree_next = -1, sym_index = 0; sym_index < (int)total_syms; ++sym_index) + { + uint32_t rev_code = 0, l, cur_code, code_size = pCode_sizes[sym_index]; + if (!code_size) + continue; + + cur_code = next_code[code_size]++; + + for (l = code_size; l > 0; l--, cur_code >>= 1) + rev_code = (rev_code << 1) | (cur_code & 1); + + if (code_size <= fast_lookup_bits) + { + uint32_t k = (code_size << 16) | sym_index; + while (rev_code < huffman_fast_lookup_size) + { + if (m_lookup[rev_code] != 0) + { + // Supplied codesizes can't create a valid prefix code. + return false; + } + + m_lookup[rev_code] = k; + rev_code += (1 << code_size); + } + continue; + } + + int tree_cur; + if (0 == (tree_cur = m_lookup[rev_code & (huffman_fast_lookup_size - 1)])) + { + const uint32_t idx = rev_code & (huffman_fast_lookup_size - 1); + if (m_lookup[idx] != 0) + { + // Supplied codesizes can't create a valid prefix code. + return false; + } + + m_lookup[idx] = tree_next; + tree_cur = tree_next; + tree_next -= 2; + } + + if (tree_cur >= 0) + { + // Supplied codesizes can't create a valid prefix code. + return false; + } + + rev_code >>= (fast_lookup_bits - 1); + + for (int j = code_size; j > ((int)fast_lookup_bits + 1); j--) + { + tree_cur -= ((rev_code >>= 1) & 1); + + const int idx = -tree_cur - 1; + if (idx < 0) + return false; + else if (idx >= (int)m_tree.size()) + m_tree.resize(idx + 1); + + if (!m_tree[idx]) + { + m_tree[idx] = (int16_t)tree_next; + tree_cur = tree_next; + tree_next -= 2; + } + else + { + tree_cur = m_tree[idx]; + if (tree_cur >= 0) + { + // Supplied codesizes can't create a valid prefix code. + return false; + } + } + } + + tree_cur -= ((rev_code >>= 1) & 1); + + const int idx = -tree_cur - 1; + if (idx < 0) + return false; + else if (idx >= (int)m_tree.size()) + m_tree.resize(idx + 1); + + if (m_tree[idx] != 0) + { + // Supplied codesizes can't create a valid prefix code. + return false; + } + + m_tree[idx] = (int16_t)sym_index; + } + + return true; + } + + const basisu::uint8_vec &get_code_sizes() const { return m_code_sizes; } + const basisu::int_vec get_lookup() const { return m_lookup; } + const basisu::int16_vec get_tree() const { return m_tree; } + + bool is_valid() const { return m_code_sizes.size() > 0; } + + private: + basisu::uint8_vec m_code_sizes; + basisu::int_vec m_lookup; + basisu::int16_vec m_tree; + }; + + class bitwise_decoder + { + public: + bitwise_decoder() : + m_buf_size(0), + m_pBuf(nullptr), + m_pBuf_start(nullptr), + m_pBuf_end(nullptr), + m_bit_buf(0), + m_bit_buf_size(0) + { + } + + void clear() + { + m_buf_size = 0; + m_pBuf = nullptr; + m_pBuf_start = nullptr; + m_pBuf_end = nullptr; + m_bit_buf = 0; + m_bit_buf_size = 0; + } + + bool init(const uint8_t *pBuf, uint32_t buf_size) + { + if ((!pBuf) && (buf_size)) + return false; + + m_buf_size = buf_size; + m_pBuf = pBuf; + m_pBuf_start = pBuf; + m_pBuf_end = pBuf + buf_size; + m_bit_buf = 0; + m_bit_buf_size = 0; + return true; + } + + void stop() + { + } + + inline uint32_t peek_bits(uint32_t num_bits) + { + if (!num_bits) + return 0; + + assert(num_bits <= 25); + + while (m_bit_buf_size < num_bits) + { + uint32_t c = 0; + if (m_pBuf < m_pBuf_end) + c = *m_pBuf++; + + m_bit_buf |= (c << m_bit_buf_size); + m_bit_buf_size += 8; + assert(m_bit_buf_size <= 32); + } + + return m_bit_buf & ((1 << num_bits) - 1); + } + + void remove_bits(uint32_t num_bits) + { + assert(m_bit_buf_size >= num_bits); + + m_bit_buf >>= num_bits; + m_bit_buf_size -= num_bits; + } + + uint32_t get_bits(uint32_t num_bits) + { + if (num_bits > 25) + { + assert(num_bits <= 32); + + const uint32_t bits0 = peek_bits(25); + m_bit_buf >>= 25; + m_bit_buf_size -= 25; + num_bits -= 25; + + const uint32_t bits = peek_bits(num_bits); + m_bit_buf >>= num_bits; + m_bit_buf_size -= num_bits; + + return bits0 | (bits << 25); + } + + const uint32_t bits = peek_bits(num_bits); + + m_bit_buf >>= num_bits; + m_bit_buf_size -= num_bits; + + return bits; + } + + uint32_t decode_truncated_binary(uint32_t n) + { + assert(n >= 2); + + const uint32_t k = basisu::floor_log2i(n); + const uint32_t u = (1 << (k + 1)) - n; + + uint32_t result = get_bits(k); + + if (result >= u) + result = ((result << 1) | get_bits(1)) - u; + + return result; + } + + uint32_t decode_rice(uint32_t m) + { + assert(m); + + uint32_t q = 0; + for (;;) + { + uint32_t k = peek_bits(16); + + uint32_t l = 0; + while (k & 1) + { + l++; + k >>= 1; + } + + q += l; + + remove_bits(l); + + if (l < 16) + break; + } + + return (q << m) + (get_bits(m + 1) >> 1); + } + + inline uint32_t decode_vlc(uint32_t chunk_bits) + { + assert(chunk_bits); + + const uint32_t chunk_size = 1 << chunk_bits; + const uint32_t chunk_mask = chunk_size - 1; + + uint32_t v = 0; + uint32_t ofs = 0; + + for ( ; ; ) + { + uint32_t s = get_bits(chunk_bits + 1); + v |= ((s & chunk_mask) << ofs); + ofs += chunk_bits; + + if ((s & chunk_size) == 0) + break; + + if (ofs >= 32) + { + assert(0); + break; + } + } + + return v; + } + + inline uint32_t decode_huffman(const huffman_decoding_table &ct, int fast_lookup_bits = basisu::cHuffmanFastLookupBits) + { + assert(ct.m_code_sizes.size()); + + const uint32_t huffman_fast_lookup_size = 1 << fast_lookup_bits; + + while (m_bit_buf_size < 16) + { + uint32_t c = 0; + if (m_pBuf < m_pBuf_end) + c = *m_pBuf++; + + m_bit_buf |= (c << m_bit_buf_size); + m_bit_buf_size += 8; + assert(m_bit_buf_size <= 32); + } + + int code_len; + + int sym; + if ((sym = ct.m_lookup[m_bit_buf & (huffman_fast_lookup_size - 1)]) >= 0) + { + code_len = sym >> 16; + sym &= 0xFFFF; + } + else + { + code_len = fast_lookup_bits; + do + { + sym = ct.m_tree[~sym + ((m_bit_buf >> code_len++) & 1)]; // ~sym = -sym - 1 + } while (sym < 0); + } + + m_bit_buf >>= code_len; + m_bit_buf_size -= code_len; + + return sym; + } + + bool read_huffman_table(huffman_decoding_table &ct) + { + ct.clear(); + + const uint32_t total_used_syms = get_bits(basisu::cHuffmanMaxSymsLog2); + + if (!total_used_syms) + return true; + if (total_used_syms > basisu::cHuffmanMaxSyms) + return false; + + uint8_t code_length_code_sizes[basisu::cHuffmanTotalCodelengthCodes]; + basisu::clear_obj(code_length_code_sizes); + + const uint32_t num_codelength_codes = get_bits(5); + if ((num_codelength_codes < 1) || (num_codelength_codes > basisu::cHuffmanTotalCodelengthCodes)) + return false; + + for (uint32_t i = 0; i < num_codelength_codes; i++) + code_length_code_sizes[basisu::g_huffman_sorted_codelength_codes[i]] = static_cast(get_bits(3)); + + huffman_decoding_table code_length_table; + if (!code_length_table.init(basisu::cHuffmanTotalCodelengthCodes, code_length_code_sizes)) + return false; + + if (!code_length_table.is_valid()) + return false; + + basisu::uint8_vec code_sizes(total_used_syms); + + uint32_t cur = 0; + while (cur < total_used_syms) + { + int c = decode_huffman(code_length_table); + + if (c <= 16) + code_sizes[cur++] = static_cast(c); + else if (c == basisu::cHuffmanSmallZeroRunCode) + cur += get_bits(basisu::cHuffmanSmallZeroRunExtraBits) + basisu::cHuffmanSmallZeroRunSizeMin; + else if (c == basisu::cHuffmanBigZeroRunCode) + cur += get_bits(basisu::cHuffmanBigZeroRunExtraBits) + basisu::cHuffmanBigZeroRunSizeMin; + else + { + if (!cur) + return false; + + uint32_t l; + if (c == basisu::cHuffmanSmallRepeatCode) + l = get_bits(basisu::cHuffmanSmallRepeatExtraBits) + basisu::cHuffmanSmallRepeatSizeMin; + else + l = get_bits(basisu::cHuffmanBigRepeatExtraBits) + basisu::cHuffmanBigRepeatSizeMin; + + const uint8_t prev = code_sizes[cur - 1]; + if (prev == 0) + return false; + do + { + if (cur >= total_used_syms) + return false; + code_sizes[cur++] = prev; + } while (--l > 0); + } + } + + if (cur != total_used_syms) + return false; + + return ct.init(total_used_syms, &code_sizes[0]); + } + + private: + uint32_t m_buf_size; + const uint8_t *m_pBuf; + const uint8_t *m_pBuf_start; + const uint8_t *m_pBuf_end; + + uint32_t m_bit_buf; + uint32_t m_bit_buf_size; + }; + + inline uint32_t basisd_rand(uint32_t seed) + { + if (!seed) + seed++; + uint32_t z = seed; + BASISD_znew; + return z; + } + + // Returns random number in [0,limit). Max limit is 0xFFFF. + inline uint32_t basisd_urand(uint32_t& seed, uint32_t limit) + { + seed = basisd_rand(seed); + return (((seed ^ (seed >> 16)) & 0xFFFF) * limit) >> 16; + } + + class approx_move_to_front + { + public: + approx_move_to_front(uint32_t n) + { + init(n); + } + + void init(uint32_t n) + { + m_values.resize(n); + m_rover = n / 2; + } + + const basisu::int_vec& get_values() const { return m_values; } + basisu::int_vec& get_values() { return m_values; } + + uint32_t size() const { return (uint32_t)m_values.size(); } + + const int& operator[] (uint32_t index) const { return m_values[index]; } + int operator[] (uint32_t index) { return m_values[index]; } + + void add(int new_value) + { + m_values[m_rover++] = new_value; + if (m_rover == m_values.size()) + m_rover = (uint32_t)m_values.size() / 2; + } + + void use(uint32_t index) + { + if (index) + { + //std::swap(m_values[index / 2], m_values[index]); + int x = m_values[index / 2]; + int y = m_values[index]; + m_values[index / 2] = y; + m_values[index] = x; + } + } + + // returns -1 if not found + int find(int value) const + { + for (uint32_t i = 0; i < m_values.size(); i++) + if (m_values[i] == value) + return i; + return -1; + } + + void reset() + { + const uint32_t n = (uint32_t)m_values.size(); + + m_values.clear(); + + init(n); + } + + private: + basisu::int_vec m_values; + uint32_t m_rover; + }; + + struct decoder_etc_block; + + inline uint8_t clamp255(int32_t i) + { + return (uint8_t)((i & 0xFFFFFF00U) ? (~(i >> 31)) : i); + } + + enum eNoClamp + { + cNoClamp = 0 + }; + + struct color32 + { + union + { + struct + { + uint8_t r; + uint8_t g; + uint8_t b; + uint8_t a; + }; + + uint8_t c[4]; + + uint32_t m; + }; + + color32() { } + + color32(uint32_t vr, uint32_t vg, uint32_t vb, uint32_t va) { set(vr, vg, vb, va); } + color32(eNoClamp unused, uint32_t vr, uint32_t vg, uint32_t vb, uint32_t va) { (void)unused; set_noclamp_rgba(vr, vg, vb, va); } + + void set(uint32_t vr, uint32_t vg, uint32_t vb, uint32_t va) { c[0] = static_cast(vr); c[1] = static_cast(vg); c[2] = static_cast(vb); c[3] = static_cast(va); } + + void set_noclamp_rgb(uint32_t vr, uint32_t vg, uint32_t vb) { c[0] = static_cast(vr); c[1] = static_cast(vg); c[2] = static_cast(vb); } + void set_noclamp_rgba(uint32_t vr, uint32_t vg, uint32_t vb, uint32_t va) { set(vr, vg, vb, va); } + + void set_clamped(int vr, int vg, int vb, int va) { c[0] = clamp255(vr); c[1] = clamp255(vg); c[2] = clamp255(vb); c[3] = clamp255(va); } + + uint8_t operator[] (uint32_t idx) const { assert(idx < 4); return c[idx]; } + uint8_t &operator[] (uint32_t idx) { assert(idx < 4); return c[idx]; } + + bool operator== (const color32&rhs) const { return m == rhs.m; } + + static color32 comp_min(const color32& a, const color32& b) { return color32(cNoClamp, basisu::minimum(a[0], b[0]), basisu::minimum(a[1], b[1]), basisu::minimum(a[2], b[2]), basisu::minimum(a[3], b[3])); } + static color32 comp_max(const color32& a, const color32& b) { return color32(cNoClamp, basisu::maximum(a[0], b[0]), basisu::maximum(a[1], b[1]), basisu::maximum(a[2], b[2]), basisu::maximum(a[3], b[3])); } + }; + + struct endpoint + { + color32 m_color5; + uint8_t m_inten5; + bool operator== (const endpoint& rhs) const + { + return (m_color5.r == rhs.m_color5.r) && (m_color5.g == rhs.m_color5.g) && (m_color5.b == rhs.m_color5.b) && (m_inten5 == rhs.m_inten5); + } + bool operator!= (const endpoint& rhs) const { return !(*this == rhs); } + }; + + struct selector + { + // Plain selectors (2-bits per value) + uint8_t m_selectors[4]; + + // ETC1 selectors + uint8_t m_bytes[4]; + + uint8_t m_lo_selector, m_hi_selector; + uint8_t m_num_unique_selectors; + bool operator== (const selector& rhs) const + { + return (m_selectors[0] == rhs.m_selectors[0]) && + (m_selectors[1] == rhs.m_selectors[1]) && + (m_selectors[2] == rhs.m_selectors[2]) && + (m_selectors[3] == rhs.m_selectors[3]); + } + bool operator!= (const selector& rhs) const + { + return !(*this == rhs); + } + + void init_flags() + { + uint32_t hist[4] = { 0, 0, 0, 0 }; + for (uint32_t y = 0; y < 4; y++) + { + for (uint32_t x = 0; x < 4; x++) + { + uint32_t s = get_selector(x, y); + hist[s]++; + } + } + + m_lo_selector = 3; + m_hi_selector = 0; + m_num_unique_selectors = 0; + + for (uint32_t i = 0; i < 4; i++) + { + if (hist[i]) + { + m_num_unique_selectors++; + if (i < m_lo_selector) m_lo_selector = static_cast(i); + if (i > m_hi_selector) m_hi_selector = static_cast(i); + } + } + } + + // Returned selector value ranges from 0-3 and is a direct index into g_etc1_inten_tables. + inline uint32_t get_selector(uint32_t x, uint32_t y) const + { + assert((x < 4) && (y < 4)); + return (m_selectors[y] >> (x * 2)) & 3; + } + + void set_selector(uint32_t x, uint32_t y, uint32_t val) + { + static const uint8_t s_selector_index_to_etc1[4] = { 3, 2, 0, 1 }; + + assert((x | y | val) < 4); + + m_selectors[y] &= ~(3 << (x * 2)); + m_selectors[y] |= (val << (x * 2)); + + const uint32_t etc1_bit_index = x * 4 + y; + + uint8_t *p = &m_bytes[3 - (etc1_bit_index >> 3)]; + + const uint32_t byte_bit_ofs = etc1_bit_index & 7; + const uint32_t mask = 1 << byte_bit_ofs; + + const uint32_t etc1_val = s_selector_index_to_etc1[val]; + + const uint32_t lsb = etc1_val & 1; + const uint32_t msb = etc1_val >> 1; + + p[0] &= ~mask; + p[0] |= (lsb << byte_bit_ofs); + + p[-2] &= ~mask; + p[-2] |= (msb << byte_bit_ofs); + } + }; + + bool basis_block_format_is_uncompressed(block_format tex_type); + +} // namespace basist + + + +/**** ended inlining basisu_transcoder_internal.h ****/ +/**** start inlining basisu_transcoder_uastc.h ****/ +// basisu_transcoder_uastc.h +/**** skipping file: basisu_transcoder_internal.h ****/ + +namespace basist +{ + struct color_quad_u8 + { + uint8_t m_c[4]; + }; + + const uint32_t TOTAL_UASTC_MODES = 19; + const uint32_t UASTC_MODE_INDEX_SOLID_COLOR = 8; + + const uint32_t TOTAL_ASTC_BC7_COMMON_PARTITIONS2 = 30; + const uint32_t TOTAL_ASTC_BC7_COMMON_PARTITIONS3 = 11; + const uint32_t TOTAL_BC7_3_ASTC2_COMMON_PARTITIONS = 19; + + extern const uint8_t g_uastc_mode_weight_bits[TOTAL_UASTC_MODES]; + extern const uint8_t g_uastc_mode_weight_ranges[TOTAL_UASTC_MODES]; + extern const uint8_t g_uastc_mode_endpoint_ranges[TOTAL_UASTC_MODES]; + extern const uint8_t g_uastc_mode_subsets[TOTAL_UASTC_MODES]; + extern const uint8_t g_uastc_mode_planes[TOTAL_UASTC_MODES]; + extern const uint8_t g_uastc_mode_comps[TOTAL_UASTC_MODES]; + extern const uint8_t g_uastc_mode_has_etc1_bias[TOTAL_UASTC_MODES]; + extern const uint8_t g_uastc_mode_has_bc1_hint0[TOTAL_UASTC_MODES]; + extern const uint8_t g_uastc_mode_has_bc1_hint1[TOTAL_UASTC_MODES]; + extern const uint8_t g_uastc_mode_has_alpha[TOTAL_UASTC_MODES]; + extern const uint8_t g_uastc_mode_is_la[TOTAL_UASTC_MODES]; + + struct astc_bc7_common_partition2_desc + { + uint8_t m_bc7; + uint16_t m_astc; + bool m_invert; + }; + + extern const astc_bc7_common_partition2_desc g_astc_bc7_common_partitions2[TOTAL_ASTC_BC7_COMMON_PARTITIONS2]; + + struct bc73_astc2_common_partition_desc + { + uint8_t m_bc73; + uint16_t m_astc2; + uint8_t k; // 0-5 - how to modify the BC7 3-subset pattern to match the ASTC pattern (LSB=invert) + }; + + extern const bc73_astc2_common_partition_desc g_bc7_3_astc2_common_partitions[TOTAL_BC7_3_ASTC2_COMMON_PARTITIONS]; + + struct astc_bc7_common_partition3_desc + { + uint8_t m_bc7; + uint16_t m_astc; + uint8_t m_astc_to_bc7_perm; // converts ASTC to BC7 partition using g_astc_bc7_partition_index_perm_tables[][] + }; + + extern const astc_bc7_common_partition3_desc g_astc_bc7_common_partitions3[TOTAL_ASTC_BC7_COMMON_PARTITIONS3]; + + extern const uint8_t g_astc_bc7_patterns2[TOTAL_ASTC_BC7_COMMON_PARTITIONS2][16]; + extern const uint8_t g_astc_bc7_patterns3[TOTAL_ASTC_BC7_COMMON_PARTITIONS3][16]; + extern const uint8_t g_bc7_3_astc2_patterns2[TOTAL_BC7_3_ASTC2_COMMON_PARTITIONS][16]; + + extern const uint8_t g_astc_bc7_pattern2_anchors[TOTAL_ASTC_BC7_COMMON_PARTITIONS2][3]; + extern const uint8_t g_astc_bc7_pattern3_anchors[TOTAL_ASTC_BC7_COMMON_PARTITIONS3][3]; + extern const uint8_t g_bc7_3_astc2_patterns2_anchors[TOTAL_BC7_3_ASTC2_COMMON_PARTITIONS][3]; + + extern const uint32_t g_uastc_mode_huff_codes[TOTAL_UASTC_MODES + 1][2]; + + extern const uint8_t g_astc_to_bc7_partition_index_perm_tables[6][3]; + extern const uint8_t g_bc7_to_astc_partition_index_perm_tables[6][3]; // inverse of g_astc_to_bc7_partition_index_perm_tables + + extern const uint8_t* s_uastc_to_bc1_weights[6]; + + uint32_t bc7_convert_partition_index_3_to_2(uint32_t p, uint32_t k); + + inline uint32_t astc_interpolate(uint32_t l, uint32_t h, uint32_t w, bool srgb) + { + if (srgb) + { + l = (l << 8) | 0x80; + h = (h << 8) | 0x80; + } + else + { + l = (l << 8) | l; + h = (h << 8) | h; + } + + uint32_t k = (l * (64 - w) + h * w + 32) >> 6; + + return k >> 8; + } + + struct astc_block_desc + { + int m_weight_range; // weight BISE range + + int m_subsets; // number of ASTC partitions + int m_partition_seed; // partition pattern seed + int m_cem; // color endpoint mode used by all subsets + + int m_ccs; // color component selector (dual plane only) + bool m_dual_plane; // true if dual plane + + // Weight and endpoint BISE values. + // Note these values are NOT linear, they must be BISE encoded. See Table 97 and Table 107. + uint8_t m_endpoints[18]; // endpoint values, in RR GG BB etc. order + uint8_t m_weights[64]; // weight index values, raster order, in P0 P1, P0 P1, etc. or P0, P0, P0, P0, etc. order + }; + + const uint32_t BC7ENC_TOTAL_ASTC_RANGES = 21; + + // See tables 81, 93, 18.13.Endpoint Unquantization + const uint32_t TOTAL_ASTC_RANGES = 21; + extern const int g_astc_bise_range_table[TOTAL_ASTC_RANGES][3]; + + struct astc_quant_bin + { + uint8_t m_unquant; // unquantized value + uint8_t m_index; // sorted index + }; + + extern astc_quant_bin g_astc_unquant[BC7ENC_TOTAL_ASTC_RANGES][256]; // [ASTC encoded endpoint index] + + int astc_get_levels(int range); + bool astc_is_valid_endpoint_range(uint32_t range); + uint32_t unquant_astc_endpoint(uint32_t packed_bits, uint32_t packed_trits, uint32_t packed_quints, uint32_t range); + uint32_t unquant_astc_endpoint_val(uint32_t packed_val, uint32_t range); + + const uint8_t* get_anchor_indices(uint32_t subsets, uint32_t mode, uint32_t common_pattern, const uint8_t*& pPartition_pattern); + + // BC7 + const uint32_t BC7ENC_BLOCK_SIZE = 16; + + struct bc7_block + { + uint64_t m_qwords[2]; + }; + + struct bc7_optimization_results + { + uint32_t m_mode; + uint32_t m_partition; + uint8_t m_selectors[16]; + uint8_t m_alpha_selectors[16]; + color_quad_u8 m_low[3]; + color_quad_u8 m_high[3]; + uint32_t m_pbits[3][2]; + uint32_t m_index_selector; + uint32_t m_rotation; + }; + + extern const uint32_t g_bc7_weights1[2]; + extern const uint32_t g_bc7_weights2[4]; + extern const uint32_t g_bc7_weights3[8]; + extern const uint32_t g_bc7_weights4[16]; + extern const uint32_t g_astc_weights4[16]; + extern const uint32_t g_astc_weights5[32]; + extern const uint32_t g_astc_weights_3levels[3]; + extern const uint8_t g_bc7_partition1[16]; + extern const uint8_t g_bc7_partition2[64 * 16]; + extern const uint8_t g_bc7_partition3[64 * 16]; + extern const uint8_t g_bc7_table_anchor_index_second_subset[64]; + extern const uint8_t g_bc7_table_anchor_index_third_subset_1[64]; + extern const uint8_t g_bc7_table_anchor_index_third_subset_2[64]; + extern const uint8_t g_bc7_num_subsets[8]; + extern const uint8_t g_bc7_partition_bits[8]; + extern const uint8_t g_bc7_color_index_bitcount[8]; + extern const uint8_t g_bc7_mode_has_p_bits[8]; + extern const uint8_t g_bc7_mode_has_shared_p_bits[8]; + extern const uint8_t g_bc7_color_precision_table[8]; + extern const int8_t g_bc7_alpha_precision_table[8]; + extern const uint8_t g_bc7_alpha_index_bitcount[8]; + + inline bool get_bc7_mode_has_seperate_alpha_selectors(int mode) { return (mode == 4) || (mode == 5); } + inline int get_bc7_color_index_size(int mode, int index_selection_bit) { return g_bc7_color_index_bitcount[mode] + index_selection_bit; } + inline int get_bc7_alpha_index_size(int mode, int index_selection_bit) { return g_bc7_alpha_index_bitcount[mode] - index_selection_bit; } + + struct endpoint_err + { + uint16_t m_error; uint8_t m_lo; uint8_t m_hi; + }; + + extern endpoint_err g_bc7_mode_6_optimal_endpoints[256][2]; // [c][pbit] + const uint32_t BC7ENC_MODE_6_OPTIMAL_INDEX = 5; + + extern endpoint_err g_bc7_mode_5_optimal_endpoints[256]; // [c] + const uint32_t BC7ENC_MODE_5_OPTIMAL_INDEX = 1; + + // Packs a BC7 block from a high-level description. Handles all BC7 modes. + void encode_bc7_block(void* pBlock, const bc7_optimization_results* pResults); + + // Packs an ASTC block + // Constraints: Always 4x4, all subset CEM's must be equal, only tested with LDR CEM's. + bool pack_astc_block(uint32_t* pDst, const astc_block_desc* pBlock, uint32_t mode); + + void pack_astc_solid_block(void* pDst_block, const color32& color); + +#ifdef _DEBUG + int astc_compute_texel_partition(int seed, int x, int y, int z, int partitioncount, bool small_block); +#endif + + struct uastc_block + { + union + { + uint8_t m_bytes[16]; + uint32_t m_dwords[4]; + +#ifndef __EMSCRIPTEN__ + uint64_t m_qwords[2]; +#endif + }; + }; + + struct unpacked_uastc_block + { + astc_block_desc m_astc; + + uint32_t m_mode; + uint32_t m_common_pattern; + + color32 m_solid_color; + + bool m_bc1_hint0; + bool m_bc1_hint1; + + bool m_etc1_flip; + bool m_etc1_diff; + uint32_t m_etc1_inten0; + uint32_t m_etc1_inten1; + + uint32_t m_etc1_bias; + + uint32_t m_etc2_hints; + + uint32_t m_etc1_selector; + uint32_t m_etc1_r, m_etc1_g, m_etc1_b; + }; + + color32 apply_etc1_bias(const color32 &block_color, uint32_t bias, uint32_t limit, uint32_t subblock); + + struct decoder_etc_block; + struct eac_block; + + bool unpack_uastc(uint32_t mode, uint32_t common_pattern, const color32& solid_color, const astc_block_desc& astc, color32* pPixels, bool srgb); + bool unpack_uastc(const unpacked_uastc_block& unpacked_blk, color32* pPixels, bool srgb); + + bool unpack_uastc(const uastc_block& blk, color32* pPixels, bool srgb); + bool unpack_uastc(const uastc_block& blk, unpacked_uastc_block& unpacked, bool undo_blue_contract, bool read_hints = true); + + bool transcode_uastc_to_astc(const uastc_block& src_blk, void* pDst); + + bool transcode_uastc_to_bc7(const unpacked_uastc_block& unpacked_src_blk, bc7_optimization_results& dst_blk); + bool transcode_uastc_to_bc7(const uastc_block& src_blk, bc7_optimization_results& dst_blk); + bool transcode_uastc_to_bc7(const uastc_block& src_blk, void* pDst); + + void transcode_uastc_to_etc1(unpacked_uastc_block& unpacked_src_blk, color32 block_pixels[4][4], void* pDst); + bool transcode_uastc_to_etc1(const uastc_block& src_blk, void* pDst); + bool transcode_uastc_to_etc1(const uastc_block& src_blk, void* pDst, uint32_t channel); + + void transcode_uastc_to_etc2_eac_a8(unpacked_uastc_block& unpacked_src_blk, color32 block_pixels[4][4], void* pDst); + bool transcode_uastc_to_etc2_rgba(const uastc_block& src_blk, void* pDst); + + // Packs 16 scalar values to BC4. Same PSNR as stb_dxt's BC4 encoder, around 13% faster. + void encode_bc4(void* pDst, const uint8_t* pPixels, uint32_t stride); + + void encode_bc1_solid_block(void* pDst, uint32_t fr, uint32_t fg, uint32_t fb); + + enum + { + cEncodeBC1HighQuality = 1, + cEncodeBC1HigherQuality = 2, + cEncodeBC1UseSelectors = 4, + }; + void encode_bc1(void* pDst, const uint8_t* pPixels, uint32_t flags); + + // Alternate PCA-free encoder, around 15% faster, same (or slightly higher) avg. PSNR + void encode_bc1_alt(void* pDst, const uint8_t* pPixels, uint32_t flags); + + void transcode_uastc_to_bc1_hint0(const unpacked_uastc_block& unpacked_src_blk, void* pDst); + void transcode_uastc_to_bc1_hint1(const unpacked_uastc_block& unpacked_src_blk, const color32 block_pixels[4][4], void* pDst, bool high_quality); + + bool transcode_uastc_to_bc1(const uastc_block& src_blk, void* pDst, bool high_quality); + bool transcode_uastc_to_bc3(const uastc_block& src_blk, void* pDst, bool high_quality); + bool transcode_uastc_to_bc4(const uastc_block& src_blk, void* pDst, bool high_quality, uint32_t chan0); + bool transcode_uastc_to_bc5(const uastc_block& src_blk, void* pDst, bool high_quality, uint32_t chan0, uint32_t chan1); + + bool transcode_uastc_to_etc2_eac_r11(const uastc_block& src_blk, void* pDst, bool high_quality, uint32_t chan0); + bool transcode_uastc_to_etc2_eac_rg11(const uastc_block& src_blk, void* pDst, bool high_quality, uint32_t chan0, uint32_t chan1); + + bool transcode_uastc_to_pvrtc1_4_rgb(const uastc_block* pSrc_blocks, void* pDst_blocks, uint32_t num_blocks_x, uint32_t num_blocks_y, bool high_quality, bool from_alpha); + bool transcode_uastc_to_pvrtc1_4_rgba(const uastc_block* pSrc_blocks, void* pDst_blocks, uint32_t num_blocks_x, uint32_t num_blocks_y, bool high_quality); + + // uastc_init() MUST be called before using this module. + void uastc_init(); + +} // namespace basist +/**** ended inlining basisu_transcoder_uastc.h ****/ +/**** start inlining basisu_file_headers.h ****/ +// basis_file_headers.h +// Copyright (C) 2019-2020 Binomial LLC. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/**** skipping file: basisu_transcoder_internal.h ****/ + +namespace basist +{ + // Slice desc header flags + enum basis_slice_desc_flags + { + cSliceDescFlagsHasAlpha = 1, + + // Video only: Frame doesn't refer to previous frame (no usage of conditional replenishment pred symbols) + // Currently the first frame is always an I-Frame, all subsequent frames are P-Frames. This will eventually be changed to periodic I-Frames. + cSliceDescFlagsFrameIsIFrame = 2 + }; + +#pragma pack(push) +#pragma pack(1) + struct basis_slice_desc + { + basisu::packed_uint<3> m_image_index; // The index of the source image provided to the encoder (will always appear in order from first to last, first image index is 0, no skipping allowed) + basisu::packed_uint<1> m_level_index; // The mipmap level index (mipmaps will always appear from largest to smallest) + basisu::packed_uint<1> m_flags; // enum basis_slice_desc_flags + + basisu::packed_uint<2> m_orig_width; // The original image width (may not be a multiple of 4 pixels) + basisu::packed_uint<2> m_orig_height; // The original image height (may not be a multiple of 4 pixels) + + basisu::packed_uint<2> m_num_blocks_x; // The slice's block X dimensions. Each block is 4x4 pixels. The slice's pixel resolution may or may not be a power of 2. + basisu::packed_uint<2> m_num_blocks_y; // The slice's block Y dimensions. + + basisu::packed_uint<4> m_file_ofs; // Offset from the start of the file to the start of the slice's data + basisu::packed_uint<4> m_file_size; // The size of the compressed slice data in bytes + + basisu::packed_uint<2> m_slice_data_crc16; // The CRC16 of the compressed slice data, for extra-paranoid use cases + }; + + // File header files + enum basis_header_flags + { + // Always set for ETC1S files. Not set for UASTC files. + cBASISHeaderFlagETC1S = 1, + + // Set if the texture had to be Y flipped before encoding. The actual interpretation of this (is Y up or down?) is up to the user. + cBASISHeaderFlagYFlipped = 2, + + // Set if any slices contain alpha (for ETC1S, if the odd slices contain alpha data) + cBASISHeaderFlagHasAlphaSlices = 4, + + // For ETC1S files, this will be true if the file utilizes a codebook from another .basis file. + cBASISHeaderFlagUsesGlobalCodebook = 8, + + // Set if the texture data is sRGB, otherwise it's linear. + // In reality, we have no idea if the texture data is actually linear or sRGB. This is the m_perceptual parameter passed to the compressor. + cBASISHeaderFlagSRGB = 16, + }; + + // The image type field attempts to describe how to interpret the image data in a Basis file. + // The encoder library doesn't really do anything special or different with these texture types, this is mostly here for the benefit of the user. + // We do make sure the various constraints are followed (2DArray/cubemap/videoframes/volume implies that each image has the same resolution and # of mipmap levels, etc., cubemap implies that the # of image slices is a multiple of 6) + enum basis_texture_type + { + cBASISTexType2D = 0, // An arbitrary array of 2D RGB or RGBA images with optional mipmaps, array size = # images, each image may have a different resolution and # of mipmap levels + cBASISTexType2DArray = 1, // An array of 2D RGB or RGBA images with optional mipmaps, array size = # images, each image has the same resolution and mipmap levels + cBASISTexTypeCubemapArray = 2, // an array of cubemap levels, total # of images must be divisable by 6, in X+, X-, Y+, Y-, Z+, Z- order, with optional mipmaps + cBASISTexTypeVideoFrames = 3, // An array of 2D video frames, with optional mipmaps, # frames = # images, each image has the same resolution and # of mipmap levels + cBASISTexTypeVolume = 4, // A 3D texture with optional mipmaps, Z dimension = # images, each image has the same resolution and # of mipmap levels + + cBASISTexTypeTotal + }; + + enum + { + cBASISMaxUSPerFrame = 0xFFFFFF + }; + + enum class basis_tex_format + { + cETC1S = 0, + cUASTC4x4 = 1 + }; + + struct basis_file_header + { + enum + { + cBASISSigValue = ('B' << 8) | 's', + cBASISFirstVersion = 0x10 + }; + + basisu::packed_uint<2> m_sig; // 2 byte file signature + basisu::packed_uint<2> m_ver; // Baseline file version + basisu::packed_uint<2> m_header_size; // Header size in bytes, sizeof(basis_file_header) + basisu::packed_uint<2> m_header_crc16; // CRC16 of the remaining header data + + basisu::packed_uint<4> m_data_size; // The total size of all data after the header + basisu::packed_uint<2> m_data_crc16; // The CRC16 of all data after the header + + basisu::packed_uint<3> m_total_slices; // The total # of compressed slices (1 slice per image, or 2 for alpha .basis files) + + basisu::packed_uint<3> m_total_images; // The total # of images + + basisu::packed_uint<1> m_tex_format; // enum basis_tex_format + basisu::packed_uint<2> m_flags; // enum basist::header_flags + basisu::packed_uint<1> m_tex_type; // enum basist::basis_texture_type + basisu::packed_uint<3> m_us_per_frame; // Framerate of video, in microseconds per frame + + basisu::packed_uint<4> m_reserved; // For future use + basisu::packed_uint<4> m_userdata0; // For client use + basisu::packed_uint<4> m_userdata1; // For client use + + basisu::packed_uint<2> m_total_endpoints; // The number of endpoints in the endpoint codebook + basisu::packed_uint<4> m_endpoint_cb_file_ofs; // The compressed endpoint codebook's file offset relative to the start of the file + basisu::packed_uint<3> m_endpoint_cb_file_size; // The compressed endpoint codebook's size in bytes + + basisu::packed_uint<2> m_total_selectors; // The number of selectors in the endpoint codebook + basisu::packed_uint<4> m_selector_cb_file_ofs; // The compressed selectors codebook's file offset relative to the start of the file + basisu::packed_uint<3> m_selector_cb_file_size; // The compressed selector codebook's size in bytes + + basisu::packed_uint<4> m_tables_file_ofs; // The file offset of the compressed Huffman codelength tables, for decompressing slices + basisu::packed_uint<4> m_tables_file_size; // The file size in bytes of the compressed huffman codelength tables + + basisu::packed_uint<4> m_slice_desc_file_ofs; // The file offset to the slice description array, usually follows the header + + basisu::packed_uint<4> m_extended_file_ofs; // The file offset of the "extended" header and compressed data, for future use + basisu::packed_uint<4> m_extended_file_size; // The file size in bytes of the "extended" header and compressed data, for future use + }; +#pragma pack (pop) + +} // namespace basist +/**** ended inlining basisu_file_headers.h ****/ + +namespace basist +{ + // High-level composite texture formats supported by the transcoder. + // Each of these texture formats directly correspond to OpenGL/D3D/Vulkan etc. texture formats. + // Notes: + // - If you specify a texture format that supports alpha, but the .basis file doesn't have alpha, the transcoder will automatically output a + // fully opaque (255) alpha channel. + // - The PVRTC1 texture formats only support power of 2 dimension .basis files, but this may be relaxed in a future version. + // - The PVRTC1 transcoders are real-time encoders, so don't expect the highest quality. We may add a slower encoder with improved quality. + // - These enums must be kept in sync with Javascript code that calls the transcoder. + enum class transcoder_texture_format + { + // Compressed formats + + // ETC1-2 + cTFETC1_RGB = 0, // Opaque only, returns RGB or alpha data if cDecodeFlagsTranscodeAlphaDataToOpaqueFormats flag is specified + cTFETC2_RGBA = 1, // Opaque+alpha, ETC2_EAC_A8 block followed by a ETC1 block, alpha channel will be opaque for opaque .basis files + + // BC1-5, BC7 (desktop, some mobile devices) + cTFBC1_RGB = 2, // Opaque only, no punchthrough alpha support yet, transcodes alpha slice if cDecodeFlagsTranscodeAlphaDataToOpaqueFormats flag is specified + cTFBC3_RGBA = 3, // Opaque+alpha, BC4 followed by a BC1 block, alpha channel will be opaque for opaque .basis files + cTFBC4_R = 4, // Red only, alpha slice is transcoded to output if cDecodeFlagsTranscodeAlphaDataToOpaqueFormats flag is specified + cTFBC5_RG = 5, // XY: Two BC4 blocks, X=R and Y=Alpha, .basis file should have alpha data (if not Y will be all 255's) + cTFBC7_RGBA = 6, // RGB or RGBA, mode 5 for ETC1S, modes (1,2,3,5,6,7) for UASTC + + // PVRTC1 4bpp (mobile, PowerVR devices) + cTFPVRTC1_4_RGB = 8, // Opaque only, RGB or alpha if cDecodeFlagsTranscodeAlphaDataToOpaqueFormats flag is specified, nearly lowest quality of any texture format. + cTFPVRTC1_4_RGBA = 9, // Opaque+alpha, most useful for simple opacity maps. If .basis file doesn't have alpha cTFPVRTC1_4_RGB will be used instead. Lowest quality of any supported texture format. + + // ASTC (mobile, Intel devices, hopefully all desktop GPU's one day) + cTFASTC_4x4_RGBA = 10, // Opaque+alpha, ASTC 4x4, alpha channel will be opaque for opaque .basis files. Transcoder uses RGB/RGBA/L/LA modes, void extent, and up to two ([0,47] and [0,255]) endpoint precisions. + + // ATC (mobile, Adreno devices, this is a niche format) + cTFATC_RGB = 11, // Opaque, RGB or alpha if cDecodeFlagsTranscodeAlphaDataToOpaqueFormats flag is specified. ATI ATC (GL_ATC_RGB_AMD) + cTFATC_RGBA = 12, // Opaque+alpha, alpha channel will be opaque for opaque .basis files. ATI ATC (GL_ATC_RGBA_INTERPOLATED_ALPHA_AMD) + + // FXT1 (desktop, Intel devices, this is a super obscure format) + cTFFXT1_RGB = 17, // Opaque only, uses exclusively CC_MIXED blocks. Notable for having a 8x4 block size. GL_3DFX_texture_compression_FXT1 is supported on Intel integrated GPU's (such as HD 630). + // Punch-through alpha is relatively easy to support, but full alpha is harder. This format is only here for completeness so opaque-only is fine for now. + // See the BASISU_USE_ORIGINAL_3DFX_FXT1_ENCODING macro in basisu_transcoder_internal.h. + + cTFPVRTC2_4_RGB = 18, // Opaque-only, almost BC1 quality, much faster to transcode and supports arbitrary texture dimensions (unlike PVRTC1 RGB). + cTFPVRTC2_4_RGBA = 19, // Opaque+alpha, slower to encode than cTFPVRTC2_4_RGB. Premultiplied alpha is highly recommended, otherwise the color channel can leak into the alpha channel on transparent blocks. + + cTFETC2_EAC_R11 = 20, // R only (ETC2 EAC R11 unsigned) + cTFETC2_EAC_RG11 = 21, // RG only (ETC2 EAC RG11 unsigned), R=opaque.r, G=alpha - for tangent space normal maps + + // Uncompressed (raw pixel) formats + cTFRGBA32 = 13, // 32bpp RGBA image stored in raster (not block) order in memory, R is first byte, A is last byte. + cTFRGB565 = 14, // 16bpp RGB image stored in raster (not block) order in memory, R at bit position 11 + cTFBGR565 = 15, // 16bpp RGB image stored in raster (not block) order in memory, R at bit position 0 + cTFRGBA4444 = 16, // 16bpp RGBA image stored in raster (not block) order in memory, R at bit position 12, A at bit position 0 + + cTFTotalTextureFormats = 22, + + // Old enums for compatibility with code compiled against previous versions + cTFETC1 = cTFETC1_RGB, + cTFETC2 = cTFETC2_RGBA, + cTFBC1 = cTFBC1_RGB, + cTFBC3 = cTFBC3_RGBA, + cTFBC4 = cTFBC4_R, + cTFBC5 = cTFBC5_RG, + + // Previously, the caller had some control over which BC7 mode the transcoder output. We've simplified this due to UASTC, which supports numerous modes. + cTFBC7_M6_RGB = cTFBC7_RGBA, // Opaque only, RGB or alpha if cDecodeFlagsTranscodeAlphaDataToOpaqueFormats flag is specified. Highest quality of all the non-ETC1 formats. + cTFBC7_M5_RGBA = cTFBC7_RGBA, // Opaque+alpha, alpha channel will be opaque for opaque .basis files + cTFBC7_M6_OPAQUE_ONLY = cTFBC7_RGBA, + cTFBC7_M5 = cTFBC7_RGBA, + cTFBC7_ALT = 7, + + cTFASTC_4x4 = cTFASTC_4x4_RGBA, + + cTFATC_RGBA_INTERPOLATED_ALPHA = cTFATC_RGBA, + }; + + // For compressed texture formats, this returns the # of bytes per block. For uncompressed, it returns the # of bytes per pixel. + // NOTE: Previously, this function was called basis_get_bytes_per_block(), and it always returned 16*bytes_per_pixel for uncompressed formats which was confusing. + uint32_t basis_get_bytes_per_block_or_pixel(transcoder_texture_format fmt); + + // Returns format's name in ASCII + const char* basis_get_format_name(transcoder_texture_format fmt); + + // Returns block format name in ASCII + const char* basis_get_block_format_name(block_format fmt); + + // Returns true if the format supports an alpha channel. + bool basis_transcoder_format_has_alpha(transcoder_texture_format fmt); + + // Returns the basisu::texture_format corresponding to the specified transcoder_texture_format. + basisu::texture_format basis_get_basisu_texture_format(transcoder_texture_format fmt); + + // Returns the texture type's name in ASCII. + const char* basis_get_texture_type_name(basis_texture_type tex_type); + + // Returns true if the transcoder texture type is an uncompressed (raw pixel) format. + bool basis_transcoder_format_is_uncompressed(transcoder_texture_format tex_type); + + // Returns the # of bytes per pixel for uncompressed formats, or 0 for block texture formats. + uint32_t basis_get_uncompressed_bytes_per_pixel(transcoder_texture_format fmt); + + // Returns the block width for the specified texture format, which is currently either 4 or 8 for FXT1. + uint32_t basis_get_block_width(transcoder_texture_format tex_type); + + // Returns the block height for the specified texture format, which is currently always 4. + uint32_t basis_get_block_height(transcoder_texture_format tex_type); + + // Returns true if the specified format was enabled at compile time. + bool basis_is_format_supported(transcoder_texture_format tex_type, basis_tex_format fmt = basis_tex_format::cETC1S); + + // Validates that the output buffer is large enough to hold the entire transcoded texture. + // For uncompressed texture formats, most input parameters are in pixels, not blocks. Blocks are 4x4 pixels. + bool basis_validate_output_buffer_size(transcoder_texture_format target_format, + uint32_t output_blocks_buf_size_in_blocks_or_pixels, + uint32_t orig_width, uint32_t orig_height, + uint32_t output_row_pitch_in_blocks_or_pixels, + uint32_t output_rows_in_pixels, + uint32_t total_slice_blocks); + + class basisu_transcoder; + + // This struct holds all state used during transcoding. For video, it needs to persist between image transcodes (it holds the previous frame). + // For threading you can use one state per thread. + struct basisu_transcoder_state + { + struct block_preds + { + uint16_t m_endpoint_index; + uint8_t m_pred_bits; + }; + + basisu::vector m_block_endpoint_preds[2]; + + enum { cMaxPrevFrameLevels = 16 }; + basisu::vector m_prev_frame_indices[2][cMaxPrevFrameLevels]; // [alpha_flag][level_index] + + void clear() + { + for (uint32_t i = 0; i < 2; i++) + { + m_block_endpoint_preds[i].clear(); + + for (uint32_t j = 0; j < cMaxPrevFrameLevels; j++) + m_prev_frame_indices[i][j].clear(); + } + } + }; + + // Low-level helper class that does the actual transcoding. + class basisu_lowlevel_etc1s_transcoder + { + friend class basisu_transcoder; + + public: + basisu_lowlevel_etc1s_transcoder(); + + void set_global_codebooks(const basisu_lowlevel_etc1s_transcoder* pGlobal_codebook) { m_pGlobal_codebook = pGlobal_codebook; } + const basisu_lowlevel_etc1s_transcoder* get_global_codebooks() const { return m_pGlobal_codebook; } + + bool decode_palettes( + uint32_t num_endpoints, const uint8_t* pEndpoints_data, uint32_t endpoints_data_size, + uint32_t num_selectors, const uint8_t* pSelectors_data, uint32_t selectors_data_size); + + bool decode_tables(const uint8_t* pTable_data, uint32_t table_data_size); + + bool transcode_slice(void* pDst_blocks, uint32_t num_blocks_x, uint32_t num_blocks_y, const uint8_t* pImage_data, uint32_t image_data_size, block_format fmt, + uint32_t output_block_or_pixel_stride_in_bytes, bool bc1_allow_threecolor_blocks, const bool is_video, const bool is_alpha_slice, const uint32_t level_index, const uint32_t orig_width, const uint32_t orig_height, uint32_t output_row_pitch_in_blocks_or_pixels = 0, + basisu_transcoder_state* pState = nullptr, bool astc_transcode_alpha = false, void* pAlpha_blocks = nullptr, uint32_t output_rows_in_pixels = 0); + + bool transcode_slice(void* pDst_blocks, uint32_t num_blocks_x, uint32_t num_blocks_y, const uint8_t* pImage_data, uint32_t image_data_size, block_format fmt, + uint32_t output_block_or_pixel_stride_in_bytes, bool bc1_allow_threecolor_blocks, const basis_file_header& header, const basis_slice_desc& slice_desc, uint32_t output_row_pitch_in_blocks_or_pixels = 0, + basisu_transcoder_state* pState = nullptr, bool astc_transcode_alpha = false, void* pAlpha_blocks = nullptr, uint32_t output_rows_in_pixels = 0) + { + return transcode_slice(pDst_blocks, num_blocks_x, num_blocks_y, pImage_data, image_data_size, fmt, output_block_or_pixel_stride_in_bytes, bc1_allow_threecolor_blocks, + header.m_tex_type == cBASISTexTypeVideoFrames, (slice_desc.m_flags & cSliceDescFlagsHasAlpha) != 0, slice_desc.m_level_index, + slice_desc.m_orig_width, slice_desc.m_orig_height, output_row_pitch_in_blocks_or_pixels, pState, + astc_transcode_alpha, + pAlpha_blocks, + output_rows_in_pixels); + } + + // Container independent transcoding + bool transcode_image( + transcoder_texture_format target_format, + void* pOutput_blocks, uint32_t output_blocks_buf_size_in_blocks_or_pixels, + const uint8_t* pCompressed_data, uint32_t compressed_data_length, + uint32_t num_blocks_x, uint32_t num_blocks_y, uint32_t orig_width, uint32_t orig_height, uint32_t level_index, + uint32_t rgb_offset, uint32_t rgb_length, uint32_t alpha_offset, uint32_t alpha_length, + uint32_t decode_flags = 0, + bool basis_file_has_alpha_slices = false, + bool is_video = false, + uint32_t output_row_pitch_in_blocks_or_pixels = 0, + basisu_transcoder_state* pState = nullptr, + uint32_t output_rows_in_pixels = 0); + + void clear() + { + m_local_endpoints.clear(); + m_local_selectors.clear(); + m_endpoint_pred_model.clear(); + m_delta_endpoint_model.clear(); + m_selector_model.clear(); + m_selector_history_buf_rle_model.clear(); + m_selector_history_buf_size = 0; + } + + // Low-level methods + typedef basisu::vector endpoint_vec; + const endpoint_vec& get_endpoints() const { return m_local_endpoints; } + + typedef basisu::vector selector_vec; + const selector_vec& get_selectors() const { return m_local_selectors; } + + private: + const basisu_lowlevel_etc1s_transcoder* m_pGlobal_codebook; + + endpoint_vec m_local_endpoints; + selector_vec m_local_selectors; + + huffman_decoding_table m_endpoint_pred_model, m_delta_endpoint_model, m_selector_model, m_selector_history_buf_rle_model; + + uint32_t m_selector_history_buf_size; + + basisu_transcoder_state m_def_state; + }; + + enum basisu_decode_flags + { + // PVRTC1: decode non-pow2 ETC1S texture level to the next larger power of 2 (not implemented yet, but we're going to support it). Ignored if the slice's dimensions are already a power of 2. + cDecodeFlagsPVRTCDecodeToNextPow2 = 2, + + // When decoding to an opaque texture format, if the basis file has alpha, decode the alpha slice instead of the color slice to the output texture format. + // This is primarily to allow decoding of textures with alpha to multiple ETC1 textures (one for color, another for alpha). + cDecodeFlagsTranscodeAlphaDataToOpaqueFormats = 4, + + // Forbid usage of BC1 3 color blocks (we don't support BC1 punchthrough alpha yet). + // This flag is used internally when decoding to BC3. + cDecodeFlagsBC1ForbidThreeColorBlocks = 8, + + // The output buffer contains alpha endpoint/selector indices. + // Used internally when decoding formats like ASTC that require both color and alpha data to be available when transcoding to the output format. + cDecodeFlagsOutputHasAlphaIndices = 16, + + cDecodeFlagsHighQuality = 32 + }; + + class basisu_lowlevel_uastc_transcoder + { + friend class basisu_transcoder; + + public: + basisu_lowlevel_uastc_transcoder(); + + bool transcode_slice(void* pDst_blocks, uint32_t num_blocks_x, uint32_t num_blocks_y, const uint8_t* pImage_data, uint32_t image_data_size, block_format fmt, + uint32_t output_block_or_pixel_stride_in_bytes, bool bc1_allow_threecolor_blocks, bool has_alpha, const uint32_t orig_width, const uint32_t orig_height, uint32_t output_row_pitch_in_blocks_or_pixels = 0, + basisu_transcoder_state* pState = nullptr, uint32_t output_rows_in_pixels = 0, int channel0 = -1, int channel1 = -1, uint32_t decode_flags = 0); + + bool transcode_slice(void* pDst_blocks, uint32_t num_blocks_x, uint32_t num_blocks_y, const uint8_t* pImage_data, uint32_t image_data_size, block_format fmt, + uint32_t output_block_or_pixel_stride_in_bytes, bool bc1_allow_threecolor_blocks, const basis_file_header& header, const basis_slice_desc& slice_desc, uint32_t output_row_pitch_in_blocks_or_pixels = 0, + basisu_transcoder_state* pState = nullptr, uint32_t output_rows_in_pixels = 0, int channel0 = -1, int channel1 = -1, uint32_t decode_flags = 0) + { + return transcode_slice(pDst_blocks, num_blocks_x, num_blocks_y, pImage_data, image_data_size, fmt, + output_block_or_pixel_stride_in_bytes, bc1_allow_threecolor_blocks, (header.m_flags & cBASISHeaderFlagHasAlphaSlices) != 0, slice_desc.m_orig_width, slice_desc.m_orig_height, output_row_pitch_in_blocks_or_pixels, + pState, output_rows_in_pixels, channel0, channel1, decode_flags); + } + + // Container independent transcoding + bool transcode_image( + transcoder_texture_format target_format, + void* pOutput_blocks, uint32_t output_blocks_buf_size_in_blocks_or_pixels, + const uint8_t* pCompressed_data, uint32_t compressed_data_length, + uint32_t num_blocks_x, uint32_t num_blocks_y, uint32_t orig_width, uint32_t orig_height, uint32_t level_index, + uint32_t slice_offset, uint32_t slice_length, + uint32_t decode_flags = 0, + bool has_alpha = false, + bool is_video = false, + uint32_t output_row_pitch_in_blocks_or_pixels = 0, + basisu_transcoder_state* pState = nullptr, + uint32_t output_rows_in_pixels = 0, + int channel0 = -1, int channel1 = -1); + }; + + struct basisu_slice_info + { + uint32_t m_orig_width; + uint32_t m_orig_height; + + uint32_t m_width; + uint32_t m_height; + + uint32_t m_num_blocks_x; + uint32_t m_num_blocks_y; + uint32_t m_total_blocks; + + uint32_t m_compressed_size; + + uint32_t m_slice_index; // the slice index in the .basis file + uint32_t m_image_index; // the source image index originally provided to the encoder + uint32_t m_level_index; // the mipmap level within this image + + uint32_t m_unpacked_slice_crc16; + + bool m_alpha_flag; // true if the slice has alpha data + bool m_iframe_flag; // true if the slice is an I-Frame + }; + + typedef basisu::vector basisu_slice_info_vec; + + struct basisu_image_info + { + uint32_t m_image_index; + uint32_t m_total_levels; + + uint32_t m_orig_width; + uint32_t m_orig_height; + + uint32_t m_width; + uint32_t m_height; + + uint32_t m_num_blocks_x; + uint32_t m_num_blocks_y; + uint32_t m_total_blocks; + + uint32_t m_first_slice_index; + + bool m_alpha_flag; // true if the image has alpha data + bool m_iframe_flag; // true if the image is an I-Frame + }; + + struct basisu_image_level_info + { + uint32_t m_image_index; + uint32_t m_level_index; + + uint32_t m_orig_width; + uint32_t m_orig_height; + + uint32_t m_width; + uint32_t m_height; + + uint32_t m_num_blocks_x; + uint32_t m_num_blocks_y; + uint32_t m_total_blocks; + + uint32_t m_first_slice_index; + + uint32_t m_rgb_file_ofs; + uint32_t m_rgb_file_len; + uint32_t m_alpha_file_ofs; + uint32_t m_alpha_file_len; + + bool m_alpha_flag; // true if the image has alpha data + bool m_iframe_flag; // true if the image is an I-Frame + }; + + struct basisu_file_info + { + uint32_t m_version; + uint32_t m_total_header_size; + + uint32_t m_total_selectors; + // will be 0 for UASTC or if the file uses global codebooks + uint32_t m_selector_codebook_ofs; + uint32_t m_selector_codebook_size; + + uint32_t m_total_endpoints; + // will be 0 for UASTC or if the file uses global codebooks + uint32_t m_endpoint_codebook_ofs; + uint32_t m_endpoint_codebook_size; + + uint32_t m_tables_ofs; + uint32_t m_tables_size; + + uint32_t m_slices_size; + + basis_texture_type m_tex_type; + uint32_t m_us_per_frame; + + // Low-level slice information (1 slice per image for color-only basis files, 2 for alpha basis files) + basisu_slice_info_vec m_slice_info; + + uint32_t m_total_images; // total # of images + basisu::vector m_image_mipmap_levels; // the # of mipmap levels for each image + + uint32_t m_userdata0; + uint32_t m_userdata1; + + basis_tex_format m_tex_format; // ETC1S, UASTC, etc. + + bool m_y_flipped; // true if the image was Y flipped + bool m_etc1s; // true if the file is ETC1S + bool m_has_alpha_slices; // true if the texture has alpha slices (for ETC1S: even slices RGB, odd slices alpha) + }; + + // High-level transcoder class which accepts .basis file data and allows the caller to query information about the file and transcode image levels to various texture formats. + // If you're just starting out this is the class you care about. + class basisu_transcoder + { + basisu_transcoder(basisu_transcoder&); + basisu_transcoder& operator= (const basisu_transcoder&); + + public: + basisu_transcoder(); + + // Validates the .basis file. This computes a crc16 over the entire file, so it's slow. + bool validate_file_checksums(const void* pData, uint32_t data_size, bool full_validation) const; + + // Quick header validation - no crc16 checks. + bool validate_header(const void* pData, uint32_t data_size) const; + + basis_texture_type get_texture_type(const void* pData, uint32_t data_size) const; + bool get_userdata(const void* pData, uint32_t data_size, uint32_t& userdata0, uint32_t& userdata1) const; + + // Returns the total number of images in the basis file (always 1 or more). + // Note that the number of mipmap levels for each image may differ, and that images may have different resolutions. + uint32_t get_total_images(const void* pData, uint32_t data_size) const; + + basis_tex_format get_tex_format(const void* pData, uint32_t data_size) const; + + // Returns the number of mipmap levels in an image. + uint32_t get_total_image_levels(const void* pData, uint32_t data_size, uint32_t image_index) const; + + // Returns basic information about an image. Note that orig_width/orig_height may not be a multiple of 4. + bool get_image_level_desc(const void* pData, uint32_t data_size, uint32_t image_index, uint32_t level_index, uint32_t& orig_width, uint32_t& orig_height, uint32_t& total_blocks) const; + + // Returns information about the specified image. + bool get_image_info(const void* pData, uint32_t data_size, basisu_image_info& image_info, uint32_t image_index) const; + + // Returns information about the specified image's mipmap level. + bool get_image_level_info(const void* pData, uint32_t data_size, basisu_image_level_info& level_info, uint32_t image_index, uint32_t level_index) const; + + // Get a description of the basis file and low-level information about each slice. + bool get_file_info(const void* pData, uint32_t data_size, basisu_file_info& file_info) const; + + // start_transcoding() must be called before calling transcode_slice() or transcode_image_level(). + // For ETC1S files, this call decompresses the selector/endpoint codebooks, so ideally you would only call this once per .basis file (not each image/mipmap level). + bool start_transcoding(const void* pData, uint32_t data_size); + + bool stop_transcoding(); + + // Returns true if start_transcoding() has been called. + bool get_ready_to_transcode() const { return m_ready_to_transcode; } + + // transcode_image_level() decodes a single mipmap level from the .basis file to any of the supported output texture formats. + // It'll first find the slice(s) to transcode, then call transcode_slice() one or two times to decode both the color and alpha texture data (or RG texture data from two slices for BC5). + // If the .basis file doesn't have alpha slices, the output alpha blocks will be set to fully opaque (all 255's). + // Currently, to decode to PVRTC1 the basis texture's dimensions in pixels must be a power of 2, due to PVRTC1 format requirements. + // output_blocks_buf_size_in_blocks_or_pixels should be at least the image level's total_blocks (num_blocks_x * num_blocks_y), or the total number of output pixels if fmt==cTFRGBA32. + // output_row_pitch_in_blocks_or_pixels: Number of blocks or pixels per row. If 0, the transcoder uses the slice's num_blocks_x or orig_width (NOT num_blocks_x * 4). Ignored for PVRTC1 (due to texture swizzling). + // output_rows_in_pixels: Ignored unless fmt is uncompressed (cRGBA32, etc.). The total number of output rows in the output buffer. If 0, the transcoder assumes the slice's orig_height (NOT num_blocks_y * 4). + // Notes: + // - basisu_transcoder_init() must have been called first to initialize the transcoder lookup tables before calling this function. + // - This method assumes the output texture buffer is readable. In some cases to handle alpha, the transcoder will write temporary data to the output texture in + // a first pass, which will be read in a second pass. + bool transcode_image_level( + const void* pData, uint32_t data_size, + uint32_t image_index, uint32_t level_index, + void* pOutput_blocks, uint32_t output_blocks_buf_size_in_blocks_or_pixels, + transcoder_texture_format fmt, + uint32_t decode_flags = 0, uint32_t output_row_pitch_in_blocks_or_pixels = 0, basisu_transcoder_state* pState = nullptr, uint32_t output_rows_in_pixels = 0) const; + + // Finds the basis slice corresponding to the specified image/level/alpha params, or -1 if the slice can't be found. + int find_slice(const void* pData, uint32_t data_size, uint32_t image_index, uint32_t level_index, bool alpha_data) const; + + // transcode_slice() decodes a single slice from the .basis file. It's a low-level API - most likely you want to use transcode_image_level(). + // This is a low-level API, and will be needed to be called multiple times to decode some texture formats (like BC3, BC5, or ETC2). + // output_blocks_buf_size_in_blocks_or_pixels is just used for verification to make sure the output buffer is large enough. + // output_blocks_buf_size_in_blocks_or_pixels should be at least the image level's total_blocks (num_blocks_x * num_blocks_y), or the total number of output pixels if fmt==cTFRGBA32. + // output_block_stride_in_bytes: Number of bytes between each output block. + // output_row_pitch_in_blocks_or_pixels: Number of blocks or pixels per row. If 0, the transcoder uses the slice's num_blocks_x or orig_width (NOT num_blocks_x * 4). Ignored for PVRTC1 (due to texture swizzling). + // output_rows_in_pixels: Ignored unless fmt is cRGBA32. The total number of output rows in the output buffer. If 0, the transcoder assumes the slice's orig_height (NOT num_blocks_y * 4). + // Notes: + // - basisu_transcoder_init() must have been called first to initialize the transcoder lookup tables before calling this function. + bool transcode_slice(const void* pData, uint32_t data_size, uint32_t slice_index, + void* pOutput_blocks, uint32_t output_blocks_buf_size_in_blocks_or_pixels, + block_format fmt, uint32_t output_block_stride_in_bytes, uint32_t decode_flags = 0, uint32_t output_row_pitch_in_blocks_or_pixels = 0, basisu_transcoder_state* pState = nullptr, void* pAlpha_blocks = nullptr, + uint32_t output_rows_in_pixels = 0, int channel0 = -1, int channel1 = -1) const; + + static void write_opaque_alpha_blocks( + uint32_t num_blocks_x, uint32_t num_blocks_y, + void* pOutput_blocks, block_format fmt, + uint32_t block_stride_in_bytes, uint32_t output_row_pitch_in_blocks_or_pixels); + + void set_global_codebooks(const basisu_lowlevel_etc1s_transcoder* pGlobal_codebook) { m_lowlevel_etc1s_decoder.set_global_codebooks(pGlobal_codebook); } + const basisu_lowlevel_etc1s_transcoder* get_global_codebooks() const { return m_lowlevel_etc1s_decoder.get_global_codebooks(); } + + const basisu_lowlevel_etc1s_transcoder& get_lowlevel_etc1s_decoder() const { return m_lowlevel_etc1s_decoder; } + basisu_lowlevel_etc1s_transcoder& get_lowlevel_etc1s_decoder() { return m_lowlevel_etc1s_decoder; } + + const basisu_lowlevel_uastc_transcoder& get_lowlevel_uastc_decoder() const { return m_lowlevel_uastc_decoder; } + basisu_lowlevel_uastc_transcoder& get_lowlevel_uastc_decoder() { return m_lowlevel_uastc_decoder; } + + private: + mutable basisu_lowlevel_etc1s_transcoder m_lowlevel_etc1s_decoder; + mutable basisu_lowlevel_uastc_transcoder m_lowlevel_uastc_decoder; + + bool m_ready_to_transcode; + + int find_first_slice_index(const void* pData, uint32_t data_size, uint32_t image_index, uint32_t level_index) const; + + bool validate_header_quick(const void* pData, uint32_t data_size) const; + }; + + // basisu_transcoder_init() MUST be called before a .basis file can be transcoded. + void basisu_transcoder_init(); + + enum debug_flags_t + { + cDebugFlagVisCRs = 1, + cDebugFlagVisBC1Sels = 2, + cDebugFlagVisBC1Endpoints = 4 + }; + uint32_t get_debug_flags(); + void set_debug_flags(uint32_t f); + + // ------------------------------------------------------------------------------------------------------ + // Optional .KTX2 file format support + // KTX2 reading optionally requires miniz or Zstd decompressors for supercompressed UASTC files. + // ------------------------------------------------------------------------------------------------------ +#if BASISD_SUPPORT_KTX2 +#pragma pack(push) +#pragma pack(1) + struct ktx2_header + { + uint8_t m_identifier[12]; + basisu::packed_uint<4> m_vk_format; + basisu::packed_uint<4> m_type_size; + basisu::packed_uint<4> m_pixel_width; + basisu::packed_uint<4> m_pixel_height; + basisu::packed_uint<4> m_pixel_depth; + basisu::packed_uint<4> m_layer_count; + basisu::packed_uint<4> m_face_count; + basisu::packed_uint<4> m_level_count; + basisu::packed_uint<4> m_supercompression_scheme; + basisu::packed_uint<4> m_dfd_byte_offset; + basisu::packed_uint<4> m_dfd_byte_length; + basisu::packed_uint<4> m_kvd_byte_offset; + basisu::packed_uint<4> m_kvd_byte_length; + basisu::packed_uint<8> m_sgd_byte_offset; + basisu::packed_uint<8> m_sgd_byte_length; + }; + + struct ktx2_level_index + { + basisu::packed_uint<8> m_byte_offset; + basisu::packed_uint<8> m_byte_length; + basisu::packed_uint<8> m_uncompressed_byte_length; + }; + + struct ktx2_etc1s_global_data_header + { + basisu::packed_uint<2> m_endpoint_count; + basisu::packed_uint<2> m_selector_count; + basisu::packed_uint<4> m_endpoints_byte_length; + basisu::packed_uint<4> m_selectors_byte_length; + basisu::packed_uint<4> m_tables_byte_length; + basisu::packed_uint<4> m_extended_byte_length; + }; + + struct ktx2_etc1s_image_desc + { + basisu::packed_uint<4> m_image_flags; + basisu::packed_uint<4> m_rgb_slice_byte_offset; + basisu::packed_uint<4> m_rgb_slice_byte_length; + basisu::packed_uint<4> m_alpha_slice_byte_offset; + basisu::packed_uint<4> m_alpha_slice_byte_length; + }; + + struct ktx2_animdata + { + basisu::packed_uint<4> m_duration; + basisu::packed_uint<4> m_timescale; + basisu::packed_uint<4> m_loopcount; + }; +#pragma pack(pop) + + const uint32_t KTX2_VK_FORMAT_UNDEFINED = 0; + const uint32_t KTX2_KDF_DF_MODEL_UASTC = 166; + const uint32_t KTX2_KDF_DF_MODEL_ETC1S = 163; + const uint32_t KTX2_IMAGE_IS_P_FRAME = 2; + const uint32_t KTX2_UASTC_BLOCK_SIZE = 16; + const uint32_t KTX2_MAX_SUPPORTED_LEVEL_COUNT = 16; // this is an implementation specific constraint and can be increased + + // The KTX2 transfer functions supported by KTX2 + const uint32_t KTX2_KHR_DF_TRANSFER_LINEAR = 1; + const uint32_t KTX2_KHR_DF_TRANSFER_SRGB = 2; + + enum ktx2_supercompression + { + KTX2_SS_NONE = 0, + KTX2_SS_BASISLZ = 1, + KTX2_SS_ZSTANDARD = 2 + }; + + extern const uint8_t g_ktx2_file_identifier[12]; + + enum ktx2_df_channel_id + { + KTX2_DF_CHANNEL_ETC1S_RGB = 0U, + KTX2_DF_CHANNEL_ETC1S_RRR = 3U, + KTX2_DF_CHANNEL_ETC1S_GGG = 4U, + KTX2_DF_CHANNEL_ETC1S_AAA = 15U, + + KTX2_DF_CHANNEL_UASTC_DATA = 0U, + KTX2_DF_CHANNEL_UASTC_RGB = 0U, + KTX2_DF_CHANNEL_UASTC_RGBA = 3U, + KTX2_DF_CHANNEL_UASTC_RRR = 4U, + KTX2_DF_CHANNEL_UASTC_RRRG = 5U, + KTX2_DF_CHANNEL_UASTC_RG = 6U, + }; + + inline const char* ktx2_get_etc1s_df_channel_id_str(ktx2_df_channel_id id) + { + switch (id) + { + case KTX2_DF_CHANNEL_ETC1S_RGB: return "RGB"; + case KTX2_DF_CHANNEL_ETC1S_RRR: return "RRR"; + case KTX2_DF_CHANNEL_ETC1S_GGG: return "GGG"; + case KTX2_DF_CHANNEL_ETC1S_AAA: return "AAA"; + default: break; + } + return "?"; + } + + inline const char* ktx2_get_uastc_df_channel_id_str(ktx2_df_channel_id id) + { + switch (id) + { + case KTX2_DF_CHANNEL_UASTC_RGB: return "RGB"; + case KTX2_DF_CHANNEL_UASTC_RGBA: return "RGBA"; + case KTX2_DF_CHANNEL_UASTC_RRR: return "RRR"; + case KTX2_DF_CHANNEL_UASTC_RRRG: return "RRRG"; + case KTX2_DF_CHANNEL_UASTC_RG: return "RG"; + default: break; + } + return "?"; + } + + enum ktx2_df_color_primaries + { + KTX2_DF_PRIMARIES_UNSPECIFIED = 0, + KTX2_DF_PRIMARIES_BT709 = 1, + KTX2_DF_PRIMARIES_SRGB = 1, + KTX2_DF_PRIMARIES_BT601_EBU = 2, + KTX2_DF_PRIMARIES_BT601_SMPTE = 3, + KTX2_DF_PRIMARIES_BT2020 = 4, + KTX2_DF_PRIMARIES_CIEXYZ = 5, + KTX2_DF_PRIMARIES_ACES = 6, + KTX2_DF_PRIMARIES_ACESCC = 7, + KTX2_DF_PRIMARIES_NTSC1953 = 8, + KTX2_DF_PRIMARIES_PAL525 = 9, + KTX2_DF_PRIMARIES_DISPLAYP3 = 10, + KTX2_DF_PRIMARIES_ADOBERGB = 11 + }; + + inline const char* ktx2_get_df_color_primaries_str(ktx2_df_color_primaries p) + { + switch (p) + { + case KTX2_DF_PRIMARIES_UNSPECIFIED: return "UNSPECIFIED"; + case KTX2_DF_PRIMARIES_BT709: return "BT709"; + case KTX2_DF_PRIMARIES_BT601_EBU: return "EBU"; + case KTX2_DF_PRIMARIES_BT601_SMPTE: return "SMPTE"; + case KTX2_DF_PRIMARIES_BT2020: return "BT2020"; + case KTX2_DF_PRIMARIES_CIEXYZ: return "CIEXYZ"; + case KTX2_DF_PRIMARIES_ACES: return "ACES"; + case KTX2_DF_PRIMARIES_ACESCC: return "ACESCC"; + case KTX2_DF_PRIMARIES_NTSC1953: return "NTSC1953"; + case KTX2_DF_PRIMARIES_PAL525: return "PAL525"; + case KTX2_DF_PRIMARIES_DISPLAYP3: return "DISPLAYP3"; + case KTX2_DF_PRIMARIES_ADOBERGB: return "ADOBERGB"; + default: break; + } + return "?"; + } + + // Information about a single 2D texture "image" in a KTX2 file. + struct ktx2_image_level_info + { + // The mipmap level index (0=largest), texture array layer index, and cubemap face index of the image. + uint32_t m_level_index; + uint32_t m_layer_index; + uint32_t m_face_index; + + // The image's actual (or the original source image's) width/height in pixels, which may not be divisible by 4 pixels. + uint32_t m_orig_width; + uint32_t m_orig_height; + + // The image's physical width/height, which will always be divisible by 4 pixels. + uint32_t m_width; + uint32_t m_height; + + // The texture's dimensions in 4x4 texel blocks. + uint32_t m_num_blocks_x; + uint32_t m_num_blocks_y; + + // The total number of blocks + uint32_t m_total_blocks; + + // true if the image has alpha data + bool m_alpha_flag; + + // true if the image is an I-Frame. Currently, for ETC1S textures, the first frame will always be an I-Frame, and subsequent frames will always be P-Frames. + bool m_iframe_flag; + }; + + // Thread-specific ETC1S/supercompressed UASTC transcoder state. (If you're not doing multithreading transcoding you can ignore this.) + struct ktx2_transcoder_state + { + basist::basisu_transcoder_state m_transcoder_state; + basisu::uint8_vec m_level_uncomp_data; + int m_uncomp_data_level_index; + + void clear() + { + m_transcoder_state.clear(); + m_level_uncomp_data.clear(); + m_uncomp_data_level_index = -1; + } + }; + + // This class is quite similar to basisu_transcoder. It treats KTX2 files as a simple container for ETC1S/UASTC texture data. + // It does not support 1D or 3D textures. + // It only supports 2D and cubemap textures, with or without mipmaps, texture arrays of 2D/cubemap textures, and texture video files. + // It only supports raw non-supercompressed UASTC, ETC1S, UASTC+Zstd, or UASTC+zlib compressed files. + // DFD (Data Format Descriptor) parsing is purposely as simple as possible. + // If you need to know how to interpret the texture channels you'll need to parse the DFD yourself after calling get_dfd(). + class ktx2_transcoder + { + public: + ktx2_transcoder(); + + // Frees all allocations, resets object. + void clear(); + + // init() parses the KTX2 header, level index array, DFD, and key values, but nothing else. + // Importantly, it does not parse or decompress the ETC1S global supercompressed data, so some things (like which frames are I/P-Frames) won't be available until start_transcoding() is called. + // This method holds a pointer to the file data until clear() is called. + bool init(const void* pData, uint32_t data_size); + + // Returns the data/size passed to init(). + const uint8_t* get_data() const { return m_pData; } + uint32_t get_data_size() const { return m_data_size; } + + // Returns the KTX2 header. Valid after init(). + const ktx2_header& get_header() const { return m_header; } + + // Returns the KTX2 level index array. There will be one entry for each mipmap level. Valid after init(). + const basisu::vector& get_level_index() const { return m_levels; } + + // Returns the texture's width in texels. Always non-zero, might not be divisible by 4. Valid after init(). + uint32_t get_width() const { return m_header.m_pixel_width; } + + // Returns the texture's height in texels. Always non-zero, might not be divisible by 4. Valid after init(). + uint32_t get_height() const { return m_header.m_pixel_height; } + + // Returns the texture's number of mipmap levels. Always returns 1 or higher. Valid after init(). + uint32_t get_levels() const { return m_header.m_level_count; } + + // Returns the number of faces. Returns 1 for 2D textures and or 6 for cubemaps. Valid after init(). + uint32_t get_faces() const { return m_header.m_face_count; } + + // Returns 0 or the number of layers in the texture array or texture video. Valid after init(). + uint32_t get_layers() const { return m_header.m_layer_count; } + + // Returns cETC1S or cUASTC4x4. Valid after init(). + basist::basis_tex_format get_format() const { return m_format; } + + bool is_etc1s() const { return get_format() == basist::basis_tex_format::cETC1S; } + + bool is_uastc() const { return get_format() == basist::basis_tex_format::cUASTC4x4; } + + // Returns true if the ETC1S file has two planes (typically RGBA, or RRRG), or true if the UASTC file has alpha data. Valid after init(). + uint32_t get_has_alpha() const { return m_has_alpha; } + + // Returns the entire Data Format Descriptor (DFD) from the KTX2 file. Valid after init(). + // See https://www.khronos.org/registry/DataFormat/specs/1.3/dataformat.1.3.html#_the_khronos_data_format_descriptor_overview + const basisu::uint8_vec& get_dfd() const { return m_dfd; } + + // Some basic DFD accessors. Valid after init(). + uint32_t get_dfd_color_model() const { return m_dfd_color_model; } + + // Returns the DFD color primary. + // We do not validate the color primaries, so the returned value may not be in the ktx2_df_color_primaries enum. + ktx2_df_color_primaries get_dfd_color_primaries() const { return m_dfd_color_prims; } + + // Returns KTX2_KHR_DF_TRANSFER_LINEAR or KTX2_KHR_DF_TRANSFER_SRGB. + uint32_t get_dfd_transfer_func() const { return m_dfd_transfer_func; } + + uint32_t get_dfd_flags() const { return m_dfd_flags; } + + // Returns 1 (ETC1S/UASTC) or 2 (ETC1S with an internal alpha channel). + uint32_t get_dfd_total_samples() const { return m_dfd_samples; } + + // Returns the channel mapping for each DFD "sample". UASTC always has 1 sample, ETC1S can have one or two. + // Note the returned value SHOULD be one of the ktx2_df_channel_id enums, but we don't validate that. + // It's up to the caller to decide what to do if the value isn't in the enum. + ktx2_df_channel_id get_dfd_channel_id0() const { return m_dfd_chan0; } + ktx2_df_channel_id get_dfd_channel_id1() const { return m_dfd_chan1; } + + // Key value field data. + struct key_value + { + // The key field is UTF8 and always zero terminated. + basisu::uint8_vec m_key; + + // The value may be empty. It consists of raw bytes which may or may not be zero terminated. + basisu::uint8_vec m_value; + + bool operator< (const key_value& rhs) const { return strcmp((const char*)m_key.data(), (const char *)rhs.m_key.data()) < 0; } + }; + typedef basisu::vector key_value_vec; + + // Returns the array of key-value entries. This may be empty. Valid after init(). + // The order of key values fields in this array exactly matches the order they were stored in the file. The keys are supposed to be sorted by their Unicode code points. + const key_value_vec& get_key_values() const { return m_key_values; } + + const basisu::uint8_vec *find_key(const std::string& key_name) const; + + // Low-level ETC1S specific accessors + + // Returns the ETC1S global supercompression data header, which is only valid after start_transcoding() is called. + const ktx2_etc1s_global_data_header& get_etc1s_header() const { return m_etc1s_header; } + + // Returns the array of ETC1S image descriptors, which is only valid after get_etc1s_image_descs() is called. + const basisu::vector& get_etc1s_image_descs() const { return m_etc1s_image_descs; } + + // Must have called startTranscoding() first + uint32_t get_etc1s_image_descs_image_flags(uint32_t level_index, uint32_t layer_index, uint32_t face_index) const; + + // is_video() is only valid after start_transcoding() is called. + // For ETC1S data, if this returns true you must currently transcode the file from first to last frame, in order, without skipping any frames. + bool is_video() const { return m_is_video; } + + // start_transcoding() MUST be called before calling transcode_image(). + // This method decompresses the ETC1S global endpoint/selector codebooks, which is not free, so try to avoid calling it excessively. + bool start_transcoding(); + + // get_image_level_info() be called after init(), but the m_iframe_flag's won't be valid until start_transcoding() is called. + // You can call this method before calling transcode_image_level() to retrieve basic information about the mipmap level's dimensions, etc. + bool get_image_level_info(ktx2_image_level_info& level_info, uint32_t level_index, uint32_t layer_index, uint32_t face_index) const; + + // transcode_image_level() transcodes a single 2D texture or cubemap face from the KTX2 file. + // Internally it uses the same low-level transcode API's as basisu_transcoder::transcode_image_level(). + // If the file is UASTC and is supercompressed with Zstandard, and the file is a texture array or cubemap, it's highly recommended that each mipmap level is + // completely transcoded before switching to another level. Every time the mipmap level is changed all supercompressed level data must be decompressed using Zstandard as a single unit. + // Currently ETC1S videos must always be transcoded from first to last frame (or KTX2 "layer"), in order, with no skipping of frames. + // By default this method is not thread safe unless you specify a pointer to a user allocated thread-specific transcoder_state struct. + bool transcode_image_level( + uint32_t level_index, uint32_t layer_index, uint32_t face_index, + void* pOutput_blocks, uint32_t output_blocks_buf_size_in_blocks_or_pixels, + basist::transcoder_texture_format fmt, + uint32_t decode_flags = 0, uint32_t output_row_pitch_in_blocks_or_pixels = 0, uint32_t output_rows_in_pixels = 0, int channel0 = -1, int channel1 = -1, + ktx2_transcoder_state *pState = nullptr); + + private: + const uint8_t* m_pData; + uint32_t m_data_size; + + ktx2_header m_header; + basisu::vector m_levels; + basisu::uint8_vec m_dfd; + key_value_vec m_key_values; + + ktx2_etc1s_global_data_header m_etc1s_header; + basisu::vector m_etc1s_image_descs; + + basist::basis_tex_format m_format; + + uint32_t m_dfd_color_model; + ktx2_df_color_primaries m_dfd_color_prims; + uint32_t m_dfd_transfer_func; + uint32_t m_dfd_flags; + uint32_t m_dfd_samples; + ktx2_df_channel_id m_dfd_chan0, m_dfd_chan1; + + basist::basisu_lowlevel_etc1s_transcoder m_etc1s_transcoder; + basist::basisu_lowlevel_uastc_transcoder m_uastc_transcoder; + + ktx2_transcoder_state m_def_transcoder_state; + + bool m_has_alpha; + bool m_is_video; + + bool decompress_level_data(uint32_t level_index, basisu::uint8_vec& uncomp_data); + bool decompress_etc1s_global_data(); + bool read_key_values(); + }; + +#endif // BASISD_SUPPORT_KTX2 + + // Returns true if the transcoder was compiled with KTX2 support. + bool basisu_transcoder_supports_ktx2(); + + // Returns true if the transcoder was compiled with Zstandard support. + bool basisu_transcoder_supports_ktx2_zstd(); + +} // namespace basisu + +/**** ended inlining basisu_transcoder.h ****/ +#include +/**** start inlining basisu_containers_impl.h ****/ +// basisu_containers_impl.h +// Do not include directly + +#ifdef _MSC_VER +#pragma warning (disable:4127) // warning C4127: conditional expression is constant +#endif + +namespace basisu +{ + bool elemental_vector::increase_capacity(uint32_t min_new_capacity, bool grow_hint, uint32_t element_size, object_mover pMover, bool nofail) + { + assert(m_size <= m_capacity); + + if (sizeof(void *) == sizeof(uint64_t)) + assert(min_new_capacity < (0x400000000ULL / element_size)); + else + assert(min_new_capacity < (0x7FFF0000U / element_size)); + + if (m_capacity >= min_new_capacity) + return true; + + size_t new_capacity = min_new_capacity; + if ((grow_hint) && (!helpers::is_power_of_2((uint64_t)new_capacity))) + { + new_capacity = (size_t)helpers::next_pow2((uint64_t)new_capacity); + + assert(new_capacity && (new_capacity > m_capacity)); + + if (new_capacity < min_new_capacity) + { + if (nofail) + return false; + fprintf(stderr, "vector too large\n"); + abort(); + } + } + + const size_t desired_size = element_size * new_capacity; + size_t actual_size = 0; + if (!pMover) + { + void* new_p = realloc(m_p, desired_size); + if (!new_p) + { + if (nofail) + return false; + + char buf[256]; +#ifdef _MSC_VER + sprintf_s(buf, sizeof(buf), "vector: realloc() failed allocating %u bytes", (uint32_t)desired_size); +#else + sprintf(buf, "vector: realloc() failed allocating %u bytes", (uint32_t)desired_size); +#endif + fprintf(stderr, "%s", buf); + abort(); + } + +#if BASISU_VECTOR_DETERMINISTIC + actual_size = desired_size; +#elif defined(_MSC_VER) + actual_size = _msize(new_p); +#elif HAS_MALLOC_USABLE_SIZE + actual_size = malloc_usable_size(new_p); +#else + actual_size = desired_size; +#endif + m_p = new_p; + } + else + { + void* new_p = malloc(desired_size); + if (!new_p) + { + if (nofail) + return false; + + char buf[256]; +#ifdef _MSC_VER + sprintf_s(buf, sizeof(buf), "vector: malloc() failed allocating %u bytes", (uint32_t)desired_size); +#else + sprintf(buf, "vector: malloc() failed allocating %u bytes", (uint32_t)desired_size); +#endif + fprintf(stderr, "%s", buf); + abort(); + } + +#if BASISU_VECTOR_DETERMINISTIC + actual_size = desired_size; +#elif defined(_MSC_VER) + actual_size = _msize(new_p); +#elif HAS_MALLOC_USABLE_SIZE + actual_size = malloc_usable_size(new_p); +#else + actual_size = desired_size; +#endif + + (*pMover)(new_p, m_p, m_size); + + if (m_p) + free(m_p); + + m_p = new_p; + } + + if (actual_size > desired_size) + m_capacity = static_cast(actual_size / element_size); + else + m_capacity = static_cast(new_capacity); + + return true; + } + +#if BASISU_HASHMAP_TEST + +#define HASHMAP_TEST_VERIFY(c) do { if (!(c)) handle_hashmap_test_verify_failure(__LINE__); } while(0) + + static void handle_hashmap_test_verify_failure(int line) + { + fprintf(stderr, "HASHMAP_TEST_VERIFY() faild on line %i\n", line); + abort(); + } + + class counted_obj + { + public: + counted_obj(uint32_t v = 0) : + m_val(v) + { + m_count++; + } + + counted_obj(const counted_obj& obj) : + m_val(obj.m_val) + { + m_count++; + } + + ~counted_obj() + { + assert(m_count > 0); + m_count--; + } + + static uint32_t m_count; + + uint32_t m_val; + + operator size_t() const { return m_val; } + + bool operator== (const counted_obj& rhs) const { return m_val == rhs.m_val; } + bool operator== (const uint32_t rhs) const { return m_val == rhs; } + + }; + + uint32_t counted_obj::m_count; + + static uint32_t urand32() + { + uint32_t a = rand(); + uint32_t b = rand() << 15; + uint32_t c = rand() << (32 - 15); + return a ^ b ^ c; + } + + static int irand32(int l, int h) + { + assert(l < h); + if (l >= h) + return l; + + uint32_t range = static_cast(h - l); + + uint32_t rnd = urand32(); + + uint32_t rnd_range = static_cast((((uint64_t)range) * ((uint64_t)rnd)) >> 32U); + + int result = l + rnd_range; + assert((result >= l) && (result < h)); + return result; + } + + void hash_map_test() + { + { + basisu::hash_map k; + basisu::hash_map l; + std::swap(k, l); + + k.begin(); + k.end(); + k.clear(); + k.empty(); + k.erase(0); + k.insert(0, 1); + k.find(0); + k.get_equals(); + k.get_hasher(); + k.get_table_size(); + k.reset(); + k.reserve(1); + k = l; + k.set_equals(l.get_equals()); + k.set_hasher(l.get_hasher()); + k.get_table_size(); + } + + uint32_t seed = 0; + for (; ; ) + { + seed++; + + typedef basisu::hash_map my_hash_map; + my_hash_map m; + + const uint32_t n = irand32(0, 100000); + + printf("%u\n", n); + + srand(seed); // r1.seed(seed); + + basisu::vector q; + + uint32_t count = 0; + for (uint32_t i = 0; i < n; i++) + { + uint32_t v = urand32() & 0x7FFFFFFF; + my_hash_map::insert_result res = m.insert(counted_obj(v), counted_obj(v ^ 0xdeadbeef)); + if (res.second) + { + count++; + q.push_back(v); + } + } + + HASHMAP_TEST_VERIFY(m.size() == count); + + srand(seed); + + my_hash_map cm(m); + m.clear(); + m = cm; + cm.reset(); + + for (uint32_t i = 0; i < n; i++) + { + uint32_t v = urand32() & 0x7FFFFFFF; + my_hash_map::const_iterator it = m.find(counted_obj(v)); + HASHMAP_TEST_VERIFY(it != m.end()); + HASHMAP_TEST_VERIFY(it->first == v); + HASHMAP_TEST_VERIFY(it->second == (v ^ 0xdeadbeef)); + } + + for (uint32_t t = 0; t < 2; t++) + { + const uint32_t nd = irand32(1, q.size() + 1); + for (uint32_t i = 0; i < nd; i++) + { + uint32_t p = irand32(0, q.size()); + + int k = q[p]; + if (k >= 0) + { + q[p] = -k - 1; + + bool s = m.erase(counted_obj(k)); + HASHMAP_TEST_VERIFY(s); + } + } + + typedef basisu::hash_map uint_hash_set; + uint_hash_set s; + + for (uint32_t i = 0; i < q.size(); i++) + { + int v = q[i]; + + if (v >= 0) + { + my_hash_map::const_iterator it = m.find(counted_obj(v)); + HASHMAP_TEST_VERIFY(it != m.end()); + HASHMAP_TEST_VERIFY(it->first == (uint32_t)v); + HASHMAP_TEST_VERIFY(it->second == ((uint32_t)v ^ 0xdeadbeef)); + + s.insert(v); + } + else + { + my_hash_map::const_iterator it = m.find(counted_obj(-v - 1)); + HASHMAP_TEST_VERIFY(it == m.end()); + } + } + + uint32_t found_count = 0; + for (my_hash_map::const_iterator it = m.begin(); it != m.end(); ++it) + { + HASHMAP_TEST_VERIFY(it->second == ((uint32_t)it->first ^ 0xdeadbeef)); + + uint_hash_set::const_iterator fit(s.find((uint32_t)it->first)); + HASHMAP_TEST_VERIFY(fit != s.end()); + + HASHMAP_TEST_VERIFY(fit->first == it->first); + + found_count++; + } + + HASHMAP_TEST_VERIFY(found_count == s.size()); + } + + HASHMAP_TEST_VERIFY(counted_obj::m_count == m.size() * 2); + } + } + +#endif // BASISU_HASHMAP_TEST + +} // namespace basisu +/**** ended inlining basisu_containers_impl.h ****/ + +#ifndef BASISD_IS_BIG_ENDIAN // TODO: This doesn't work on OSX. How can this be so difficult? //#if defined(__BIG_ENDIAN__) || defined(_BIG_ENDIAN) || defined(BIG_ENDIAN) -// #define IS_BIG_ENDIAN (1) +// #define BASISD_IS_BIG_ENDIAN (1) //#else - #define IS_BIG_ENDIAN (0) + #define BASISD_IS_BIG_ENDIAN (0) //#endif #endif -#ifndef USE_UNALIGNED_WORD_READS -#define USE_UNALIGNED_WORD_READS (1) +#ifndef BASISD_USE_UNALIGNED_WORD_READS + #ifdef __EMSCRIPTEN__ + // Can't use unaligned loads/stores with WebAssembly. + #define BASISD_USE_UNALIGNED_WORD_READS (0) + #elif defined(_M_AMD64) || defined(_M_IX86) || defined(__i386__) || defined(__x86_64__) + #define BASISD_USE_UNALIGNED_WORD_READS (1) + #else + #define BASISD_USE_UNALIGNED_WORD_READS (0) + #endif #endif #define BASISD_SUPPORTED_BASIS_VERSION (0x13) +#ifndef BASISD_SUPPORT_KTX2 + #error Must have defined BASISD_SUPPORT_KTX2 +#endif + +#ifndef BASISD_SUPPORT_KTX2_ZSTD +#error Must have defined BASISD_SUPPORT_KTX2_ZSTD +#endif + // Set to 1 for fuzz testing. This will disable all CRC16 checks on headers and compressed data. #ifndef BASISU_NO_HEADER_OR_DATA_CRC16_CHECKS -#define BASISU_NO_HEADER_OR_DATA_CRC16_CHECKS 0 + #define BASISU_NO_HEADER_OR_DATA_CRC16_CHECKS 0 #endif #ifndef BASISD_SUPPORT_DXT1 -#define BASISD_SUPPORT_DXT1 1 + #define BASISD_SUPPORT_DXT1 1 #endif #ifndef BASISD_SUPPORT_DXT5A -#define BASISD_SUPPORT_DXT5A 1 + #define BASISD_SUPPORT_DXT5A 1 #endif // Disable all BC7 transcoders if necessary (useful when cross compiling to Javascript) #if defined(BASISD_SUPPORT_BC7) && !BASISD_SUPPORT_BC7 #ifndef BASISD_SUPPORT_BC7_MODE5 - #define BASISD_SUPPORT_BC7_MODE5 0 + #define BASISD_SUPPORT_BC7_MODE5 0 #endif #endif // !BASISD_SUPPORT_BC7 // BC7 mode 5 supports both opaque and opaque+alpha textures, and uses less memory BC1. #ifndef BASISD_SUPPORT_BC7_MODE5 -#define BASISD_SUPPORT_BC7_MODE5 1 + #define BASISD_SUPPORT_BC7_MODE5 1 #endif #ifndef BASISD_SUPPORT_PVRTC1 -#define BASISD_SUPPORT_PVRTC1 1 + #define BASISD_SUPPORT_PVRTC1 1 #endif #ifndef BASISD_SUPPORT_ETC2_EAC_A8 -#define BASISD_SUPPORT_ETC2_EAC_A8 1 + #define BASISD_SUPPORT_ETC2_EAC_A8 1 #endif // Set BASISD_SUPPORT_UASTC to 0 to completely disable support for transcoding UASTC files. #ifndef BASISD_SUPPORT_UASTC -#define BASISD_SUPPORT_UASTC 1 + #define BASISD_SUPPORT_UASTC 1 #endif #ifndef BASISD_SUPPORT_ASTC -#define BASISD_SUPPORT_ASTC 1 + #define BASISD_SUPPORT_ASTC 1 #endif // Note that if BASISD_SUPPORT_ATC is enabled, BASISD_SUPPORT_DXT5A should also be enabled for alpha support. #ifndef BASISD_SUPPORT_ATC -#define BASISD_SUPPORT_ATC 1 + #define BASISD_SUPPORT_ATC 1 #endif // Support for ETC2 EAC R11 and ETC2 EAC RG11 #ifndef BASISD_SUPPORT_ETC2_EAC_RG11 -#define BASISD_SUPPORT_ETC2_EAC_RG11 1 + #define BASISD_SUPPORT_ETC2_EAC_RG11 1 #endif // If BASISD_SUPPORT_ASTC_HIGHER_OPAQUE_QUALITY is 1, opaque blocks will be transcoded to ASTC at slightly higher quality (higher than BC1), but the transcoder tables will be 2x as large. @@ -134,23 +5088,23 @@ #endif #ifndef BASISD_SUPPORT_FXT1 -#define BASISD_SUPPORT_FXT1 1 + #define BASISD_SUPPORT_FXT1 1 #endif #ifndef BASISD_SUPPORT_PVRTC2 -#define BASISD_SUPPORT_PVRTC2 1 + #define BASISD_SUPPORT_PVRTC2 1 #endif #if BASISD_SUPPORT_PVRTC2 -#if !BASISD_SUPPORT_ATC -#error BASISD_SUPPORT_ATC must be 1 if BASISD_SUPPORT_PVRTC2 is 1 -#endif + #if !BASISD_SUPPORT_ATC + #error BASISD_SUPPORT_ATC must be 1 if BASISD_SUPPORT_PVRTC2 is 1 + #endif #endif #if BASISD_SUPPORT_ATC -#if !BASISD_SUPPORT_DXT5A -#error BASISD_SUPPORT_DXT5A must be 1 if BASISD_SUPPORT_ATC is 1 -#endif + #if !BASISD_SUPPORT_DXT5A + #error BASISD_SUPPORT_DXT5A must be 1 if BASISD_SUPPORT_ATC is 1 + #endif #endif #define BASISD_WRITE_NEW_BC7_MODE5_TABLES 0 @@ -161,7 +5115,18 @@ #define BASISD_WRITE_NEW_ETC2_EAC_R11_TABLES 0 #ifndef BASISD_ENABLE_DEBUG_FLAGS -#define BASISD_ENABLE_DEBUG_FLAGS 0 + #define BASISD_ENABLE_DEBUG_FLAGS 0 +#endif + +// If KTX2 support is enabled, we may need Zstd for decompression of supercompressed UASTC files. Include this header. +#if BASISD_SUPPORT_KTX2 + // If BASISD_SUPPORT_KTX2_ZSTD is 0, UASTC files compressed with Zstd cannot be loaded. + #if BASISD_SUPPORT_KTX2_ZSTD + // We only use two Zstd API's: ZSTD_decompress() and ZSTD_isError() +/**** start inlining zstd ****/ +#error Unable to find "zstd" +/**** ended inlining zstd ****/ + #endif #endif namespace basisu @@ -227,7 +5192,7 @@ namespace basist { crc = ~crc; - const uint8_t* p = reinterpret_cast(r); + const uint8_t* p = static_cast(r); for (; size; --size) { const uint16_t q = *p++ ^ (crc >> 8); @@ -237,305 +5202,7 @@ namespace basist return static_cast(~crc); } - - const uint32_t g_global_selector_cb[] = -/**** start inlining basisu_global_selector_cb.h ****/ -// Copyright (C) 2019-2020 Binomial LLC. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -{ -0x0, 0x505, 0x5555, 0x5F5F, 0x5055050, 0x5055F5F, 0x50AAA551, 0xFAA5A5AA, 0x6AAA5095, 0x41E6FBAB, 0x19AE99F5, 0x1057AAA4, 0x54005A1A, 0x4459AEAF, 0x56015B, 0xBAA9A554, -0x4335E5E0, 0xD9FE5FBB, 0x2525256A, 0x9AE892, 0xC0D5FAF5, 0x5BA5E641, 0x7EDEC8B8, 0xBB671211, 0x4C9844EE, 0xEE042415, 0xE5663EAE, 0x90909091, 0xAAA45AFF, 0x15556E1D, 0xA6959195, 0x4BFF8BF, -0x5166AAF, 0x15490065, 0x6F5BAFAF, 0xFF00FF00, 0xD96956AA, 0x15AF6B, 0xFF5A00AA, 0xE0E557AA, 0x1A6F19BD, 0x69655555, 0xD0500158, 0xEEEDD894, 0xE4E4FE, 0xC71B7B10, 0x55AA5AAF, 0x50AA59BE, -0xE4E990E4, 0x5353B63B, 0xFEE5D0E4, 0x96AF051A, 0x3CC95A6, 0x70B5A40D, 0x9504196E, 0x4A0BD7A3, 0x11B89592, 0xAAFF4095, 0x55A5D4E0, 0xBBA55050, 0x1111666, 0xA5544000, 0xED994444, 0x5A56BF, -0x94A954B9, 0xFB651000, 0x604E633E, 0x14291A15, 0x56965956, 0xB8E0D0C0, 0x5A565A55, 0x65A61A6A, 0xE490F990, 0xCA87AAF5, 0x6060A0B, 0x24C23143, 0x55AA9A40, 0x505E1605, 0xCEC0486E, 0x156E55EA, -0x79978B0B, 0x4595F53C, 0x405C4AF7, 0xC1897D75, 0xD5F40BA6, 0x95444017, 0x14AD6935, 0x87C7A7BD, 0x4A4E8597, 0xFF1D7E55, 0x451400F9, 0x1112277B, 0x9A0590F8, 0x53E3492E, 0xE590E995, 0x7E730A9A, -0x929697E7, 0x2E781609, 0xE22317A1, 0xEDE9D884, 0xDDD75CDD, 0xAF1B6F1A, 0xE6909047, 0xA77DAD5D, 0x184C0D5D, 0xFAB56010, 0x5EA4F1D0, 0x11166B6B, 0xF51A7AD6, 0xF79950F4, 0x1B6B1B11, 0x9A6D6469, -0x441997E, 0x4546869A, 0x95AA6965, 0x155A6A, 0x6E68B0E6, 0x5A55A665, 0x1B051605, 0x601D8BE6, 0xBD2F1B06, 0x409A429B, 0x23272721, 0xB07454A9, 0x7E66A3A1, 0x1B6A5500, 0xA0E0F5A6, 0xBF5A0500, -0x55A5A9A9, 0x99D9E995, 0xE440566F, 0x6550BE99, 0x2267777B, 0xFA50FE50, 0xA657B441, 0xB4E29343, 0x555090E5, 0x45465B6B, 0xE654E6, 0xEA90469B, 0x2E05D2F4, 0x99594444, 0xF1C20746, 0x295AD2E0, -0xF990EA95, 0x804459AE, 0xA9999894, 0x1F41E4A5, 0x4040E5E5, 0x5481E1F2, 0x2AFF59F1, 0x6B6B1712, 0xA7131051, 0xF9406F16, 0x1B2B5B9E, 0x587E0F2F, 0x547E1919, 0xD0F5645B, 0xB1B1B1B, 0x5756A4FE, -0x46A9B965, 0x1529F99D, 0xE490E490, 0x4495FE, 0x985E0B06, 0x5FD2D23A, 0x5D0E95A, 0xF69103F4, 0x4029790, 0x1B062F1B, 0xEE594500, 0xB6539B5A, 0x106165BA, 0xD26B7C8D, 0x8B2A25A5, 0x55EAD5E3, -0x431FB8E1, 0xBEB4E646, 0x9A5A4545, 0x5015A6B, 0x90D4B83D, 0xDB8A99A4, 0x9E894905, 0xDD7D1101, 0xA95E00BF, 0x579FA5A5, 0xA292D145, 0x93292C96, 0xF9A995A5, 0xBFE8A450, 0xB990D15B, 0x45D1E01A, -0x4BD3F767, 0xF243479A, 0x7E420927, 0xF9E5E090, 0xA1C869F, 0x253A36, 0x9BAB569A, 0x4147031F, 0xA059AFE, 0xE0D6590F, 0xD5EAD5E6, 0x9A4B4641, 0x5AAA4406, 0x55EA90E4, 0x10179BC4, 0x44485999, -0x5156253E, 0x1F29E054, 0xCDDAA773, 0x5601AB05, 0x94FC94C0, 0x116166BB, 0xBF964006, 0x414196EB, 0x8498D9ED, 0xB5E08687, 0xBD564150, 0x2B8D9DF8, 0x7F12017E, 0x90904747, 0x50B56AB, 0xDBD19490, -0xBB5A5659, 0xBAF40E4, 0x6D649014, 0x1D29166F, 0x414F3D75, 0x6F929540, 0x565AAF05, 0xBD9884E5, 0xF5342A25, 0x157915AE, 0x1A055A55, 0x9019A19F, 0x64B96A05, 0x35689CCC, 0x996012E2, 0x5252677B, -0x156AA401, 0x25BCE483, 0xAA665555, 0xD6AF4B0F, 0x3F4BBDE0, 0x9404A9AF, 0xA590F9E4, 0x8191A5FD, 0x568190B4, 0x591A6616, 0x92C11D3E, 0x97D2E5FC, 0xF5A55A6F, 0xBEE0969B, 0x8918B4CA, 0xE0915397, -0x5243472F, 0x95EA4055, 0x55E6E0A4, 0x9AEBD181, 0xF4A25357, 0x11115666, 0xFE45FF0A, 0x8BC7D2E1, 0x800556BB, 0x757D6A96, 0xFA909A5B, 0x68962FDB, 0xEB0056AA, 0x69970241, 0xAA58AD64, 0xC4D9DED5, -0x5A5BF2F0, 0xBD0905B4, 0x197D7801, 0x8987EDC4, 0xFF40565A, 0x460978A4, 0xE4067FE4, 0x5DA23153, 0xB90565AE, 0x5E14B946, 0x4E35879F, 0xC72F8666, 0x1816472F, 0x9A5A4949, 0x64A0D1E5, 0xC7025B1A, -0x1B061B55, 0xFFAA051B, 0xAF5DEDA1, 0xAA955094, 0x6659965A, 0x99A95DAD, 0x9450A5A5, 0xA550A595, 0x6914B950, 0xEF454944, 0x906BB990, 0xD680944B, 0xE091461B, 0x5363B7BB, 0xF0743906, 0x66566A69, -0x4B85D0BC, 0x40E494A5, 0x1161B6B6, 0x519BD59, 0x5998401, 0x1651F26B, 0x5709BB1B, 0x6AE1D1B9, 0xD19297BF, 0x1A69FEE4, 0x6066B5A, 0x74A56491, 0xB4661151, 0x559191A4, 0x96756A68, 0xF5C791A6, -0x20297A15, 0x6B660100, 0x313177A2, 0x55054150, 0x6A969669, 0xF0B82111, 0x555A6996, 0xB666295A, 0x1EA95441, 0x6A166BA5, 0x8C18566D, 0x2797278A, 0x82A552BD, 0xF964BD14, 0x41540668, 0x5078785A, -0x5754FE, 0xF9E0E5FA, 0x15453D3F, 0x5A9699A9, 0xD9854147, 0x849494E9, 0x1DC39734, 0x67E797B3, 0x107066F, 0xAED9986C, 0xAB564140, 0x9B51A6B7, 0x5FD3E2F4, 0x5A5429F9, 0xF9A05161, 0x5A5A6965, -0xDDD88484, 0xFA50FA55, 0x90E5E4FA, 0x6BF166B, 0x6566665A, 0xE450A6E5, 0xEB45AA04, 0xDA9A4646, 0xD7A37235, 0x11431B97, 0xD41D6E64, 0xD3D3A1A0, 0x5D540E9, 0x627777BB, 0x5054A4BE, 0x593A05ED, -0x2EBE454B, 0x1ABA1015, 0x7C64B460, 0xC358B47F, 0x176F4293, 0xA6E417AB, 0xF611756E, 0x1F40D499, 0x84885D5F, 0x2F0B9B9B, 0x14BE05, 0xE5919590, 0x101B146E, 0x7B261190, 0xDC96F8B0, 0xF460257E, -0x34B0AFC0, 0xEB9140FE, 0xC5C589DD, 0x1F6D6865, 0xF5100195, 0xAF560607, 0x505066B5, 0x7E590999, 0x13E190E4, 0xA56ABD59, 0xC21B68D7, 0xE594E4, 0xF6576E50, 0xFFA751D1, 0x19A179CB, 0x2726797, -0xA1931C7C, 0xE1D90F1B, 0x7F2B2510, 0x6AF90055, 0x5F1E4C88, 0xE410757A, 0x95702212, 0x7B762100, 0x1B05BF6A, 0x16F05AB, 0xDDC5C9C9, 0x72BE594, 0xE490E555, 0xC5E50106, 0x816DAC16, 0x5540FA90, -0x156605FF, 0x3B372621, 0x2B57A67D, 0x6C661E16, 0x1E97A917, 0xE6E2D383, 0x1B40F91B, 0xD9A63333, 0x34E18629, 0xA71616E9, 0x84946D99, 0x1B6906AF, 0xEFDE8904, 0x88F52470, 0x50E990F8, 0x4182E1B4, -0xBAE1865B, 0xF48E4F4, 0x64A0517F, 0xA1F45902, 0x12177BF5, 0x465EBD91, 0x37A747, 0xF0A5106, 0x4C4E8A5, 0x62779E65, 0xDE494989, 0x7B6796D1, 0xC5C5C58A, 0xE4786B07, 0x6F07E0F9, 0x5554A550, -0x95559333, 0x747A6B5, 0xA4A45500, 0xE998444, 0xF5966371, 0x111116BB, 0x783A679, 0x95409AFF, 0xFF9690E4, 0x60743EBD, 0x1C5A90FD, 0x2B051EE9, 0x5B7A1624, 0xEB415701, 0x1B6B0155, 0x9BCB8586, -0x599E5C51, 0x510064BE, 0x50FA6060, 0x16066B5B, 0x54DA89D5, 0xA01468B5, 0xC1655E5, 0x55FF6657, 0xE4985E9, 0xD738BE27, 0x6938D450, 0x47D0E4FE, 0x4858986E, 0xE793431E, 0x1A05FFFD, 0x18939141, -0x15EE4620, 0x79E45151, 0x663AA556, 0xD1266DD9, 0x7E0655E0, 0xB6A7676D, 0x54A96AA5, 0x1664092B, 0x56517AA0, 0xD6402CB8, 0x40A7773C, 0x554F0646, 0x488D5F2F, 0xE4E49095, 0x1C7CB4E0, 0x7C27529A, -0xF6FAA151, 0xCC7358D6, 0xE8406D15, 0x6E074B5F, 0x638359F7, 0xD4E9A88C, 0xE888050F, 0xE6546A0B, 0xB9904EBD, 0x755061AF, 0xA371285C, 0xE95A1904, 0xCADD042D, 0x757F6ED6, 0xE4A91F06, 0x6D5D0909, -0xE49559B8, 0xF4B0569B, 0x8454B5B9, 0x2161B5B6, 0x855AADEE, 0x575B0544, 0xBFE4D086, 0xE484CBEB, 0xF9F5426F, 0xCC653366, 0xA3524656, 0x9A5989E4, 0x10451466, 0x71F1655, 0x9B90A4ED, 0x14599FF, -0x9666AA91, 0x5A99A945, 0x9685CD8F, 0xB8506A91, 0xB427E0F8, 0x50A990FE, 0xA5FA9090, 0x60D4DA80, 0x28E35CB3, 0x55E4AA, 0xD20B55A4, 0xE15F86, 0x36E6995E, 0x54036FFF, 0xA79D2250, 0xBA11A500, -0x404603AC, 0x641065A0, 0x9DD84A0A, 0x969B061B, 0x36737313, 0x7B65631A, 0xA4E4C099, 0x9590448F, 0xD57F0680, 0x6094D86D, 0x15D8E3BD, 0x757F7DD7, 0xB45B854, 0x6560FA98, 0x7A805637, 0xD68416BB, -0x7B767131, 0x90F9E8FE, 0xA4E54045, 0xE0411F6E, 0xD57D7DDD, 0x33CB1C33, 0x58ADD010, 0x9B1FA5C6, 0xA401BE95, 0xA950F994, 0xA851971E, 0x33CC33CC, 0x10F0B164, 0x151A6F01, 0x78B5660C, 0x33333225, -0x41162402, 0x5F0506CB, 0xFD96166F, 0xE4417643, 0x56A51A94, 0x5323BFEA, 0xD12DD12D, 0xA999959A, 0x547C6482, 0x499EE652, 0x4AC7D1E5, 0x2D3DAD07, 0x6B171201, 0xAF065854, 0xD6C4891D, 0xCC739CE7, -0x9D692663, 0x3E41597C, 0xF38314BB, 0x1150A4F4, 0xE1E50FA, 0xF4D60B6F, 0x5A54E590, 0x227AB5F0, 0x73A3D7FC, 0xD7420A59, 0x12015A59, 0x4F1999D5, 0xA90EE44A, 0x1065B9B5, 0xD10533E3, 0xBA918409, -0xE5409FEF, 0x4549047F, 0x6B57A6A5, 0xE94691AA, 0x111A6E7E, 0x45496BA, 0x49FD999, 0x414D5B8D, 0xAB10EF5E, 0xE9878505, 0x8C910499, 0xC0C5DA3E, 0x6F1B7298, 0x177D78D0, 0x687B5665, 0x3F470353, -0x1441A590, 0xE1965F6F, 0x5A5B4A8D, 0x47D7C98, 0xD1404115, 0xB89A053F, 0x8C4095FE, 0x4861E055, 0x3B417607, 0xF9E0E4E0, 0x65B0506, 0x93633236, 0xAA07A5E4, 0x77747080, 0x776160F0, 0x1672B05, -0xA54E0428, 0x520A9625, 0xE581065, 0x90C76D76, 0x2157B2B3, 0x5C5BE06, 0x151A5A01, 0xA9D5C081, 0xCBCD9854, 0xFDD1061F, 0xB66111B1, 0x9DC3D7B0, 0x650A7642, 0x8095734D, 0xD052011B, 0xE0A1479B, -0x9501BFF8, 0xE9D9BD0D, 0x7A017925, 0x69A67373, 0x41E0E557, 0x5F844124, 0xEAB0695E, 0x566B5040, 0xCCC9D693, 0xA79684DE, 0x6B5BC3C1, 0x9595667B, 0x9C33CA5C, 0x8984C5C5, 0x459BBDE9, 0x1F10A5F4, -0x22A55AA, 0x97C3430D, 0xAA569A55, 0x552E1E00, 0xD3C3C78B, 0x82C7521E, 0x5B0605EA, 0x5FF69268, 0xD081460B, 0xE4517F06, 0x4448C9CE, 0x2F69F940, 0x476DA470, 0x9F96FE12, 0x4D8D9E8E, 0x6A6A16B5, -0x1D05BE66, 0x84F5BD, 0x691E1B41, 0xE0939B17, 0x159059AA, 0x1E5792B9, 0x25A701A5, 0x439162E, 0xE994077C, 0x5CC396AA, 0x1D0D9AA5, 0x4A4A598D, 0x1B6F156B, 0x1A1B0F40, 0x34CB34CB, 0x6F542E, -0x32CC739C, 0x94EB9669, 0xDA8D4E1D, 0xC6C5C46E, 0x10152B3F, 0x8787F9F9, 0x5E42D064, 0x699B05E9, 0x7030295E, 0x495E09BE, 0xEE191016, 0x801D2D56, 0x3A0099F9, 0xEA09059E, 0x5BAB5100, 0x393D49C, -0x10E15DC2, 0xB056DD4, 0x3536915, 0xE0C18719, 0xEB964090, 0x6172727, 0xFD5900FA, 0xD10B78D1, 0x33332626, 0x50F990F9, 0x78600A5B, 0xE2B5401B, 0xAE5E9404, 0xF2CF0C0, 0x9E9D8080, 0x84E4F4F9, -0x41F0E59F, 0x90787E12, 0xE4E19143, 0x761D6706, 0x6560BCE5, 0x134A9BD3, 0x23768995, 0x22ADF6, 0x434A5C72, 0xD4985444, 0x70936BFF, 0xAB54E0E7, 0x45E7A682, 0x7A786D90, 0xF8546A00, 0x5F5E4540, -0x999A651E, 0xF9E297FD, 0xAF86E5, 0xD00B6E54, 0x5442878A, 0x50E940A5, 0x61F6AF1, 0x479701AA, 0xAE455E5D, 0x6560123E, 0x22D17625, 0x83071B64, 0xF9460251, 0x5F4B064A, 0x8742417C, 0x5F89C51A, -0x14A29F50, 0x5013BF6B, 0x76395676, 0x54A590F9, 0x40915AA7, 0xEB95E041, 0x7E560504, 0x65B9E4D1, 0x3F63A594, 0x17448216, 0x1A4F87F1, 0xF990E696, 0xECE89A50, 0x2266B17, 0x6A959A98, 0x50F5001A, -0xBF056A55, 0x74470FFE, 0x65251011, 0x9F7D6597, 0x51BB962, 0xA0D04297, 0xA257F0D1, 0x5B1569D5, 0x4F40959E, 0xEC5D1D0D, 0x51A1A, 0x1DF56462, 0xC4491A6F, 0x4B4A55EF, 0xFD741D5F, 0xE1526713, -0x875153E2, 0x9752A2E2, 0xEFDA8504, 0xF0E84756, 0xE0A196E9, 0x5FAF5C40, 0x9A3359CC, 0xE056062E, 0xB07B71D7, 0x5966475D, 0x66161100, 0x444A0151, 0xDAC7D6F5, 0xFBE8E314, 0x35098512, 0x1A7F7690, -0xAF970158, 0x666A6996, 0xD1D10938, 0x742969B, 0x4542A5FE, 0x6EBE50A1, 0x816E7955, 0x64E1D0C1, 0x105156AA, 0x6A9AD0F5, 0xB4909E2E, 0x55A6A959, 0x45B4999F, 0x3266CC26, 0x9B915EE, 0x9769E58B, -0x2EF59968, 0x3F2F0711, 0x79798469, 0x6161B6B6, 0xA79504B1, 0x9B92A351, 0x61C08573, 0xAB1B656F, 0x37271601, 0xE4840979, 0x45D1C1DA, 0xA4C4961B, 0x59A7F2F0, 0xEA9FC147, 0x635362B0, 0x9561EAF, -0x6B6762A1, 0x585A43D3, 0x8484819F, 0xD1C30D5D, 0x2123101D, 0xA0F8E4F9, 0x63676220, 0x17EB6A5, 0x90E63F27, 0xDD256045, 0x7B66A1A0, 0x64143F6, 0x41D479D7, 0xF1520F82, 0x12B44687, 0x1504BE1A, -0x90E45401, 0xC4C98E4F, 0x919097C, 0xA7A52919, 0xB9B62313, 0x9695C089, 0x30C5E6BD, 0xAA55669B, 0xD19F0645, 0x1150E2FF, 0x36213121, 0x1F1F0A05, 0x2A315099, 0x2A1E0414, 0xA3E3D04, 0xD5992851, -0x19A56A45, 0x5D0669E5, 0xA7C1F8C0, 0x84D1E5AA, 0x7292A464, 0x9040F5E4, 0xF185405, 0x1FAE4509, 0xF91690BE, 0x5540A540, 0xA1D2874B, 0x560B65F8, 0xC207E1E6, 0x646D0F9, 0x5A1440, 0xBB454116, -0x13597242, 0x413A4504, 0x66E7D2D2, 0x61DA6950, 0x519DF0A0, 0xD2926EB4, 0xA583060B, 0x247E1587, 0xE50590BD, 0xEFF50146, 0x6252B722, 0x4B9AF552, 0x42445A5, 0x5D0844D0, 0xD7C1D18, 0x6B53900, -0x7DD68434, 0xE6964247, 0xE0A50B5, 0x72635347, 0x669A6B06, 0x91549A65, 0x8F097CA5, 0x849458EC, 0xF9B09275, 0x71390D5A, 0x478BC9D6, 0x5D579AA5, 0x9ED08605, 0xCA1C35D3, 0x1029669, 0x1344FEA7, -0x5B468B87, 0xA7F29990, 0x60BDB855, 0x3430B574, 0x544461FF, 0xC5C9550E, 0x69E716A7, 0x112336, 0x3F11D2D7, 0x2F0796E4, 0xB5250B00, 0x33CC33DD, 0x20357676, 0x7B6F9272, 0x114B09BB, 0xA7F6C987, -0x32959833, 0x40D25BB6, 0x13170353, 0xD52E5949, 0x93626538, 0x43449A56, 0x655890BA, 0x2F56811B, 0xE5E4C88, 0xA6079500, 0xA4F90507, 0x6460A055, 0xE990906D, 0x156F56AC, 0x54CF00, 0x181D5A0A, -0x7C09E947, 0xAD9E898C, 0xFF914212, 0x6933A7CC, 0xB2935B2E, 0x4454D8A2, 0xA6A560B6, 0x519E2075, 0x575FA6A5, 0xB8B06916, 0x598B471B, 0x10686AD1, 0x45EA0170, 0xD0470B9B, 0x3B511E0B, 0x53D79D0, -0xCBCAC5C5, 0xDAD54CD0, 0x3542EE79, 0xB4AD4FD, 0x642DFF01, 0xB99109B9, 0xE1919B9F, 0x97B84162, 0xE995460A, 0x1060F5F5, 0x166DBCF1, 0x4214957A, 0x6C60626, 0x50FE4F0B, 0xB466470A, 0x808596E2, -0x70D1440D, 0x818617B6, 0xC8E8DDED, 0x40443474, 0x103E0750, 0x1559A9, 0x16E29FF, 0x54FE0447, 0x34CAB25C, 0x9B30756A, 0xB0E74B05, 0xE19051D, 0x402E7450, 0xF5E0D1AB, 0x87979B5F, 0x8707BA71, -0x90B4A491, 0x1A2F5301, 0x6C44D318, 0x8AC0A1F4, 0x5A6F0306, 0xE1159090, 0xF9A54183, 0x4CC7321C, 0x7E64868B, 0xFDE60582, 0x4BE77014, 0x1B902D01, 0x104D8FA7, 0x16A7CD, 0x94693912, 0x62E759A, -0x594BA906, 0x5D023747, 0xDF9757AD, 0x97364CCA, 0xFA011265, 0x12E16116, 0x7A615600, 0x501196F9, 0x5067E247, 0x2A75B070, 0xBC0196BE, 0x19FD8907, 0xCA8511AE, 0x7B671210, 0xB8F0966F, 0x600AE5F4, -0x4146858E, 0xA579C124, 0x19F26C13, 0x2320776, 0x595BF900, 0xFB059055, 0x6FD6E460, 0x86CAD5D, 0x948153A5, 0xC6C546FF, 0xE199AD5A, 0x656A566A, 0x81256994, 0x7C285400, 0x37CD6A37, 0x4CF4E1B, -0xD181E0B5, 0x90F89F46, 0x5AD2D072, 0xF1F44D4, 0xB5E091C6, 0xFF90E764, 0x656B9965, 0x833471C7, 0xE6470700, 0x521A517, 0x56620BF, 0x7A6458C9, 0x566959A6, 0x5A5FF3D2, 0xD050063F, 0x9AC17C39, -0xC1F03D19, 0xE7939343, 0x35312404, 0x76671223, 0xA0D05804, 0x7B773262, 0x5E2E6465, 0xE6860519, 0xDE909B5A, 0xB5C094E4, 0xAF019B15, 0x1A57027F, 0x7874E7D3, 0xB35674A, 0xD0854FB6, 0x916509FD, -0x431F91FF, 0x9B605420, 0x566978B4, 0xE8D1042D, 0x2533074, 0xEC904443, 0xD404A4D1, 0xB9984945, 0x435181E6, 0xDFD0520A, 0x37FC61D, 0x1540FA94, 0x876DB853, 0x9D686C9D, 0x5D7DE642, 0x556A6669, -0x6B166F05, 0xF0F06616, 0xE490051F, 0x147B0606, 0xFD76D9D9, 0x3B814E5D, 0x16E6460, 0x91F05406, 0x37444D34, 0x1B17BF00, 0xA8465A05, 0x12429D1C, 0x79753935, 0x639291F4, 0x6761F0F4, 0xBC789460, -0xF890D79E, 0x54780743, 0x1131367B, 0xD6487C64, 0x8E582E4F, 0x6A972A65, 0x1BA6D0E5, 0x17D6007A, 0x82590727, 0x95D0FA, 0x1540E47E, 0x56B91A0B, 0x8A85C4D4, 0x9F8205E4, 0x80D4C58B, 0x75D3E647, -0x5956D966, 0x74ED4500, 0x167EA440, 0x255E191, 0x31811515, 0x82999DDF, 0x11670BB8, 0x2BDAD965, 0x5AA5669A, 0x55BF105A, 0x88496E59, 0x5AF56600, 0x4858E751, 0xF4811BB9, 0xB501A7B0, 0x11B26DB, -0x767C9887, 0x602D7703, 0x1219F8FD, 0x464297D, 0xFF06DB95, 0x156A04BF, 0x5050A39C, 0x35CA4F94, 0x7F00EF1B, 0x68353273, 0x150663B6, 0x79666190, 0xDA650647, 0xA962959A, 0x96E596FF, 0x537E17A3, -0x57F9E440, 0x101458FF, 0xA4D4E441, 0x1898C4E0, 0x7E189481, 0xB6C71904, 0x9A95EDDD, 0x944449FF, 0x61E4C997, 0x52DF8F5, 0x6A51F46E, 0x9145AD, 0xD9A8DDD2, 0x8784E63D, 0xFF5B906E, 0x2998A559, -0xCCCC6633, 0xB954C0D0, 0x70B5663B, 0x531C8B25, 0xFFBA0191, 0xF4E35B90, 0x40FF7150, 0x1F075AE5, 0xD0015BFF, 0xDCC3D6DB, 0x4E54A07F, 0x7E9647A, 0xA19D4E1, 0x51504404, 0xE7D68A8A, 0xAF10A450, -0x71B71184, 0x79940A0E, 0x821B196E, 0x50413A5B, 0x5707962D, 0xD1B63962, 0x819DEDE4, 0xEEC5CB54, 0x251DBAD, 0x50BD6D1D, 0x20976E74, 0xDDC98A4F, 0x451079E9, 0x69146E, 0x68590311, 0x8045A9F4, -0xEEC58B96, 0x98CCC996, 0x94784451, 0xE6D6015B, 0x3035B95, 0x12E39F6, 0x50EE4058, 0x4D1C74A0, 0xA4291505, 0x936B67D4, 0x2AC1449D, 0xA4015A6D, 0xAFCB4414, 0x74A50038, 0xDED051C8, 0x347B76DA, -0x817ED01B, 0xDD2D79D2, 0x5A1A011B, 0xA040F556, 0x540246B8, 0xF2B45A06, 0x6A4999B4, 0x4B67D0BF, 0x31614701, 0x456C84C1, 0xB8F4814C, 0xFF009669, 0x4F4A4999, 0x907D95AB, 0xB7A49402, 0x526E61D, -0x5A9542D3, 0xF8792606, 0xA913569, 0x3193534B, 0x7A61D074, 0x51A452E3, 0x40E490E5, 0x4106377, 0x404A1709, 0x1562727, 0xC0B89996, 0x4440781E, 0x78FA9053, 0x5D1E00E8, 0x1C3C75D0, 0xD581AB05, -0x85C58A4, 0x44E490E4, 0xCD94CDCA, 0xB252E6D6, 0x1FC345AB, 0x40C5B905, 0x26693851, 0xEC3741D, 0x1B5869B, 0xA161510, 0xE061977B, 0x8A580510, 0xD960D554, 0xB53E091, 0x14B900FA, 0x3E094659, -0x6090906, 0xE6B47C17, 0xECEC9840, 0xF9A405FA, 0x90F994FA, 0x2B750A5, 0x803B3D25, 0x14AE405F, 0x6F97E0FD, 0xCD34E38C, 0xDED0D4AF, 0x96D1C038, 0x51E78187, 0x93D7CACD, 0xD4D052A7, 0xE6558B4F, -0xF6025766, 0xE54074B0, 0x6613252C, 0x257A75, 0x1B1266B5, 0xF956E0B6, 0x44D3E3B9, 0xC5C5E9E6, 0xEBD69599, 0x9F91D0F8, 0xB0A05253, 0x6E0F1761, 0x425FE480, 0xA5A051FF, 0xB1384DC7, 0x1CE31CD3, -0xEBF6701B, 0x6B152998, 0x35A62510, 0xD140E5E6, 0x9070791D, 0x3CA6D1, 0xDAC98985, 0x90917E97, 0x19BCF91, 0xD0C7CBC7, 0xB5466B37, 0xB111D25B, 0x9A29978C, 0x3196C50, 0xCAC5C1FF, 0x4F4A4192, -0xB14E708B, 0xD5E958D3, 0x73747E24, 0xEDE0D6A2, 0x1B91436E, 0x79252511, 0xCBC58C44, 0x7E64F890, 0x9F05B9F4, 0x1B55E0D0, 0x21D1E969, 0xF4558028, 0xF9E5C3C2, 0x1974325B, 0x6A94E0F0, 0xD101A5BD, -0x1A17075, 0x5B2D78E1, 0x17194807, 0xF5C24B1D, 0xFA40E655, 0x7A095515, 0xE106F993, 0x565A1103, 0x5A54F6E0, 0xF5E0016E, 0xD6CBC5C1, 0xF940E696, 0xAE316D90, 0x6A146A00, 0x9B96E9E4, 0x6351D86F, -0x5A466995, 0xD4460B8A, 0x2CC3744E, 0x99666696, 0x20257ABF, 0xA3F2955, 0xD5D0919A, 0x54444859, 0xFC5C606F, 0xA6653749, 0x306E696, 0x2528BD70, 0xA07BCE5, 0xF0A46662, 0xDC649440, 0x99C7874A, -0x656CBEB, 0x5151A67B, 0x60DB4B05, 0xD1444107, 0x514B74, 0x165025A, 0x5B5A1101, 0x7101179A, 0xD09A070B, 0x50A096BF, 0x47A9521D, 0x4B2D7492, 0x3F0F1B53, 0x1941ABFF, 0x7B666111, 0xD3C345BA, -0x1CA9D6, 0xE18359B9, 0x1590E6F8, 0xF4285902, 0xBF1B92D0, 0x1BE76D, 0x2A5582C3, 0x8979164B, 0x3C721B40, 0x33C0CF30, 0x2DD21EE1, 0xE9D30707, 0x192DF65, 0x1B92E7C5, 0x33333669, 0x1E0560F4, -0xFB53034B, 0x966A6699, 0x6F9797A7, 0xEF469BDB, 0x1943F5F6, 0x1DA7C70A, 0x74741E9E, 0xF5709967, 0x520B74F1, 0x4741FBAB, 0xDA6712B9, 0xCBC6C1D0, 0x67E2D64, 0x5E03B625, 0xC088D9D5, 0xF89005FA, -0x5A2516AA, 0xE5C7D9D6, 0x69FE5096, 0x435BE0D1, 0x7193DB8, 0x9CCC9967, 0x54613301, 0x461211BC, 0x730C6FAB, 0x6050A5B1, 0x7EB91141, 0x6A152F00, 0x69665AE5, 0xAE5780F8, 0x7D06F90, 0x2032D510, -0x4E0746D1, 0xA69C33CC, 0x1A462616, 0x36C6C6C6, 0xFFA59D1F, 0x9B6D74F1, 0x1197907E, 0x656A9995, 0x91742E48, 0xD00538F5, 0x441542, 0x40D2469B, 0xFF5999, 0x15A9966A, 0x94841EF9, 0xA5651D1F, -0xCC9C6633, 0x2F7D107E, 0x9B81411F, 0x9E59A669, 0x5E970007, 0x7E2E1F03, 0x29B5F244, 0x86C5D48, 0x548581B4, 0xF955CF44, 0xE35CB2CD, 0xA956B6D7, 0xE0E69125, 0x1969C59D, 0x550099EF, 0x68D99F24, -0x5FA65010, 0x2B1256FD, 0xF8244147, 0x1D56470C, 0x2162A76, 0x62F16510, 0xAA556995, 0x540669, 0x14C29726, 0x4790FC0, 0x2CC19B44, 0x6CD7759D, 0xD7F64140, 0x425F81E4, 0x5034348D, 0x65095966, -0x7261B0F5, 0xAF5681D1, 0x935A4051, 0x5262767B, 0x595EC2E8, 0xDB743847, 0x3C60A513, 0xC21F3991, 0xCB34C738, 0xD19AE995, 0xB9171781, 0x1107AB66, 0x5FC0D790, 0x2070F1F6, 0x6E5E1A09, 0xB5407E5E, -0x505494EA, 0xE4703556, 0xF890999E, 0xA65BF595, 0x2919A7F, 0x49DD3880, 0x94EF960A, 0x183D1906, 0x1500F9F9, 0x9DEE4509, 0xF5FA6313, 0xE0526850, 0xBFE60005, 0xF16E685, 0xF90065A5, 0x916AF859, -0xFF608454, 0xE6BF5094, 0x81D1E0FA, 0xA19FF91, 0x60D59CD9, 0x39524274, 0xD7994F4, 0x36295C8D, 0xE0503945, 0x2D85C545, 0xD1500658, 0x22172635, 0x338C5626, 0xDE812506, 0xDB57E8D0, 0xE9D955F6, -0x9F6C94E6, 0x9636CC33, 0x2A1A3542, 0xF95D80F5, 0xD4266F42, 0x1C9E5F9, 0x74A1C30E, 0x6B16A050, 0xFB03506A, 0x4218B469, 0x94D1422D, 0x427D3531, 0xC25BAD40, 0x6692B292, 0x5A50E9A5, 0x717CD4C3, -0x71938F59, 0x5147400A, 0x41BC6EB5, 0xD4A0D4E4, 0x1D0E5FA, 0xF6869F06, 0xA7E35252, 0xF4D1421B, 0xA4894DE7, 0x2D946B1A, 0xD0FFC684, 0x17C291E4, 0x7F525000, 0x15848139, 0x669669A5, 0xA7A76353, -0xA996966A, 0x2FE155C0, 0x1E1E42D6, 0x4CB19976, 0x1103BE69, 0x57699082, 0x71624AF, 0xE1445A09, 0x969A4504, 0x5602955E, 0x5A1548E4, 0x5B074314, 0x74A6CE66, 0x9038152E, 0xD8C4554F, 0x3EBB0657, -0xA8A65669, 0xB9B56010, 0x96B92D86, 0xE9D9CCA4, 0x33DE69A7, 0x5C8CD8E4, 0xF5D1401A, 0x4B59A46B, 0xCD258D07, 0xF3C3A475, 0x105DFC2E, 0xF7929140, 0xA4A450FE, 0x5B4598, 0x17137B75, 0x1B05F082, -0xD62474D1, 0x673AB500, 0xA9460B5E, 0x47025AD1, 0x6E6695D9, 0x1262B6F6, 0x6AE65190, 0x66A69499, 0xD0993A76, 0x22321727, 0x55C0C56F, 0x6F7D1E43, 0x352F53E, 0x6AD6662F, 0x62713623, 0x948484F9, -0x27161E04, 0xE996065B, 0xFED0411E, 0x8BC59A4B, 0x689E4B01, 0x40467E7E, 0x550E0F8, 0x1832D78D, 0x6CEC9580, 0x6A9E8F6E, 0x5340D4B1, 0x1449C6D, 0x22163530, 0xB4F6C3C6, 0xAD01DA95, 0x656F051E, -0x8151167B, 0xA0C3966B, 0x40F85B15, 0xDD4B8D2A, 0x24BB667, 0x52E193F, 0x56A7019B, 0x12625504, 0x11A16297, 0x4B59066C, 0x59E990A0, 0xA45C0B00, 0x92C34B3F, 0xD06F6325, 0xC68D18B9, 0x74783C30, -0xEA58C5CD, 0x142151F7, 0xDA649E04, 0xDA950602, 0x6E641510, 0xA7249144, 0xF46A1FF, 0xA950F611, 0x752E1FC, 0x7A460551, 0xB8E0D6D1, 0xE9D09151, 0xC745A104, 0x2072E687, 0x9F870105, 0x65A0F1FB, -0xD0D500F9, 0x1A901FE1, 0x6F4E9401, 0x33322558, 0x52532732, 0xDB16B782, 0xBAA56046, 0xBCA19396, 0x411B39B7, 0xDC847184, 0x31C8B364, 0x6A66906E, 0x3F85D8F0, 0x36EB4393, 0xD518985, 0x34392F47, -0x1FCF4E96, 0xF4A05E06, 0xBD5B102C, 0xFF056A65, 0x561BB601, 0xACC50A51, 0xA3733235, 0x7E1B53E2, 0x5251A0E5, 0xE078156F, 0x1F56E790, 0xA9965D59, 0xE0949C7D, 0xD87D560A, 0xD0649CED, 0x1065A47E, -0x257CE4C3, 0xE2409597, 0x71D49220, 0x253929F, 0x47673ECA, 0x716B51F3, 0x4C1C48C5, 0xC7C1520B, 0x7B593060, 0x4F88491E, 0xA566A956, 0x7767A34, 0x65149A00, 0xB6D75A5F, 0x96A757A6, 0xA050617B, -0xB007D141, 0x12A377B0, 0xC4E8D5F5, 0xE0C74B95, 0xC13C06F9, 0x7996213D, 0x9AC68F45, 0x65460B95, 0x99A7C292, 0x889C9C6C, 0xA4EDD440, 0xB0693DF, 0xFF50E490, 0x507A977, 0xE4147ED0, 0x80F19505, -0xFCC5066E, 0x74B64319, 0x103A1EC6, 0xB288507E, 0x56A779A0, 0x7C9056AA, 0x381294FD, 0x5D194EC1, 0xF0C19B1F, 0xD60A1DE1, 0x94C0C4DF, 0x7E66824B, 0x69670667, 0x461520C7, 0x7466071F, 0x96FD1A00, -0x10C4EA65, 0x93DE045, 0x6F01E2E5, 0xB196946, 0x504246AD, 0xB45E0F4, 0xABF1194, 0x84C94D5A, 0x111D27E, 0xF6951BBD, 0xE081166B, 0x56699965, 0xA1F16C54, 0x46107A64, 0x821C3491, 0x88D86E5B, -0xE5D2C7CB, 0x5203432F, 0xE616332B, 0xF9854938, 0xD2736742, 0x671061F7, 0x9248BDB8, 0x544106E2, 0x6134280D, 0xC65E091D, 0x5599E860, 0xECC245B4, 0xFE4564E0, 0xD500F4F4, 0x59FDC0ED, 0x44530376, -0xB152767E, 0x6A074351, 0xC565DE, 0xAD995844, 0x57F1D099, 0xB252D484, 0xD1984D8E, 0x5196A66, 0x2C59E167, 0xC0E9055F, 0xFD196F06, 0xF5F0C1C7, 0xFAD05152, 0x2126E0F5, 0xE9F42911, 0xC8339895, -0x8D405BD, 0x50E94377, 0x443AF945, 0x5011293C, 0x76A297AD, 0x1EE440C5, 0x35DAD9A0, 0xA4419590, 0x165BA619, 0xF60B9A65, 0x1F89444A, 0x71B0255, 0x476DF0A6, 0x61D4A1A, 0x469F9DB0, 0x32355C8C, -0x86091D46, 0xE795060B, 0x2296305C, 0x6E41F80, 0xF490E594, 0xF4E25699, 0xBF65AC50, 0x4A7E75DB, 0x1015F458, 0xB04ACD9E, 0xEE5478F4, 0x7F630C53, 0x4E49F5F0, 0xCDA3319C, 0xBE116D20, 0x4589D9E9, -0x7435434B, 0xFDD96656, 0x5F681E4, 0x99AD1C50, 0x552A5401, 0x68F04549, 0x73B66D2, 0x1F86D101, 0xD041160B, 0xF906FFA5, 0x689676DE, 0x5F4780BD, 0xF0939AA5, 0x1F0B5F40, 0x501B3F, 0xA8C193B5, -0x8C73CC33, 0xE24F7CD3, 0x9090A565, 0xA990D59A, 0xA1C14877, 0x946D8180, 0xF8343124, 0x14C1E915, 0x4919CBA5, 0xFF55D001, 0xF4E152A2, 0x46687EF0, 0xF05ABD48, 0xB7B37460, 0x1474C58, 0x94E490E8, -0xB9E44183, 0x78D32DE1, 0xC8E4489F, 0x5BDAA45B, 0xB5610147, 0x5162A5F9, 0x5D6191C8, 0x4595C0A6, 0xA57DC996, 0x6D9D0D1E, 0xF58BC767, 0x1A0E5509, 0x409BD2D7, 0xFF5C135, 0x33B7579, 0xEF035600, -0x779152B, 0x50B091B7, 0x363A3162, 0x491069DB, 0x9C4E0C5F, 0x945A1B12, 0x5490FF00, 0xB5A0B400, 0x1F82D64A, 0xB2C7426, 0x329CDA73, 0xA9995AA5, 0xF65876B4, 0x1E4E890E, 0x857AB576, 0xA52E054, -0x1D11D88C, 0xA35895B0, 0x6F196890, 0xC7143E70, 0x6BE401FE, 0x111BA961, 0x66070AF5, 0x5F07130F, 0xA15061B6, 0x8C73CD32, 0x6C6481D6, 0x6AD5A6C1, 0x14A5872C, 0x46B90BE4, 0xE5586946, 0x3163C58C, -0x1431B550, 0x91E94F09, 0x66F5C24B, 0xEE40461E, 0x97593992, 0x19E059F4, 0x94F92E05, 0x8CC445EA, 0x403D64A7, 0xB0FE5D8, 0x9C9B5C00, 0x7EDED9A4, 0x7CD393B5, 0xF1A50DA, 0x372B4077, 0xBF9046E7, -0x56261E6D, 0x51232570, 0x40153CAB, 0x9B6F6712, 0x51C0160A, 0xB990052F, 0x3788B955, 0x555064A0, 0x6F0B5B05, 0x9776666B, 0xAA069B45, 0xAFF81440, 0x91E4DE1A, 0x80D5C9C6, 0x1E9E5DA4, 0x2B65B450, -0x1213362B, 0xD766654A, 0x461346C, 0x197B2441, 0x5F9547EB, 0x15AF0506, 0x464C8D9D, 0x4021957A, 0xFE54E413, 0x13295035, 0x145E0D2, 0x4D4854E9, 0xBE50919B, 0xA76CF940, 0x91E1406E, 0x9A655A9A, -0x3E65005A, 0x1C0B6666, 0x2611AC57, 0xBE7D1442, 0x311E3FC, 0xA4858185, 0x6E54D2A1, 0x9140A5DE, 0x844EC85, 0xF4A81540, 0x1159BF9, 0x2896D07D, 0xD5E690EA, 0x40A47D47, 0x6F672C16, 0xF1611217, -0xE4096F65, 0x621D05EF, 0x9040979F, 0xC1C5CA46, 0x5B9606B5, 0x5101767A, 0x448C9568, 0xE4983D12, 0xCBC8B5E9, 0x1B15E402, 0xE1C60E15, 0x44E68419, 0x90D48DC, 0x7A9042BB, 0x151285D, 0x676B2613, -0x121644B4, 0x920F52E3, 0x56DE09E, 0x6E6607A4, 0x5E560B0E, 0xC20B7616, 0xAF464146, 0x8C5C2835, 0x474BC2C6, 0xBC6419CA, 0x5C4353F0, 0x31392547, 0x504295AA, 0xCC593363, 0x1C0C6DBA, 0x4D71B7F, -0xCC593633, 0xE71A250B, 0xE8CC599D, 0x894FA695, 0x4EC3513E, 0x39C0C645, 0x7B526034, 0xF91E2E06, 0x1A663699, 0x202599EF, 0xC1D1E195, 0x75E600FF, 0xD0D1ECDC, 0xD6DB6050, 0xE0E5016F, 0xF0910B15, -0xD68C6917, 0x6F1A3D00, 0xF5D61BA6, 0x336D1CA5, 0x7888941D, 0x78D0912D, 0xE1D1C34C, 0x592E4C41, 0x1539F804, 0xFB019650, 0xD5E50609, 0xE8C553F9, 0x411BEBD, 0xE580D1DA, 0x1CACD693, 0xAF15BCE1, -0x1104909C, 0x4B3B4686, 0xB3A31251, 0x50F5665, 0x1D4EC1D3, 0x2830D712, 0x401F0475, 0xC089D4DD, 0xB2425701, 0x40076F65, 0xA950F5A4, 0x9F9990BF, 0x70214431, 0x22753C31, 0xCC7369D9, 0xE9919061, -0xF45A1F1, 0xBD0690D0, 0x79A6C180, 0x2FDD105A, 0x584296CA, 0x116F906E, 0x58484C5C, 0xDF9B10E6, 0x5184486D, 0xE9D89D90, 0x69B05ED2, 0xD9841D2B, 0xC2C6C5E6, 0xF88947CD, 0x90696469, 0xC5C0C6DF, -0x677B0640, 0x4B479BC5, 0x83D1B811, 0x5B47E440, 0x1A419DEA, 0x3DD8D4A9, 0x8752B0F3, 0xD1D18189, 0xCCA632CC, 0x725CCB73, 0x6325CC33, 0x14464A25, 0x5410303F, 0xF8C12F85, 0x39D205E5, 0xFE850549, -0xC68710B5, 0x471F7842, 0xD34A4C6C, 0x4742D188, 0xBFD50A44, 0x1987777C, 0x5B61C12, 0xB2530677, 0xD995A916, 0x75B496A0, 0x31E61E7, 0x53939DED, 0x51705B00, 0xBA5A4046, 0xFF14A4, 0x2599DCF8, -0x7D47F02E, 0x9B959064, 0xDCD4E014, 0x38C22DD1, 0x65647C88, 0xD4606066, 0x3551E0D2, 0xD06157FE, 0x1131260B, 0x8B81E454, 0x1E1865FF, 0x1966A524, 0x4B4684D8, 0x3450F1B6, 0xE4FE41D1, 0x1D31F1E6, -0xC47C1F4A, 0x94656AB, 0x45D101B, 0xB681B712, 0x9BD09215, 0x77924154, 0xFCECD4A0, 0xF0F1C72D, 0x74D0834F, 0xE4908117, 0x65E0365C, 0x955A09EF, 0x6E744349, 0xF4692B13, 0x34750F6E, 0x94D198A9, -0x839C2DB2, 0xED929580, 0xEA609E65, 0x1A15F8D1, 0xFE00D6AD, 0xD5DC0141, 0xD90D3995, 0x6E6640ED, 0xA9B443CF, 0xE50681D9, 0x3F705659, 0x5F5E4844, 0x9A254A5B, 0x26618195, 0x8B945DAD, 0xDFD4E490, -0x674352C0, 0x9967C1C0, 0x5990E995, 0xDEC544BA, 0xA7DA444, 0x16457E8, 0x142DFE04, 0xA4D5C084, 0x13172539, 0x84FC3590, 0xA9734748, 0xFE07F451, 0x42119AED, 0x8F087916, 0x13A65D1, 0x82856E75, -0x3511B1B9, 0xA61BD018, 0x8619B893, 0x40BD89E5, 0x9A15F640, 0x4052464F, 0x9D87C1E0, 0x972C58F0, 0x84D8ED54, 0xE64D9C5D, 0xF421502F, 0xF24864, 0x59B8A154, 0x9A2596DF, 0x1441E6FA, 0x1BE46F90, -0xA8915051, 0xA5B62611, 0xF582841D, 0x825362B7, 0x55F367E, 0x415263BD, 0x3E463930, 0x68754A06, 0x1117F280, 0x8B16B855, 0xEC75E1C4, 0xA0771117, 0x669DB850, 0x6D171238, 0x47167213, 0x90B21746, -0xD92649C8, 0xCAC6C6F1, 0xE392C769, 0x60E7939B, 0x14130475, 0x56001A7D, 0xF657028F, 0x6F6819E, 0x29974C33, 0x49A57C5C, 0xD590E890, 0x6FF1116, 0x132B7665, 0xA0C60B56, 0x9844DF41, 0xA1B103E, -0x44845EEF, 0xA6D2F5D5, 0x55FA4600, 0xBF611264, 0x6AD53610, 0xED594A11, 0xCFC15015, 0x96264247, 0xA4F1D3DA, 0x257EC166, 0xB8D6C114, 0xEA90CF4F, 0x6D5A804, 0x3F0695E8, 0x9C90BCE9, 0xAB4701D1, -0x136357B5, 0x994D9E0E, 0x121652B2, 0x6D9FD261, 0x5CCC9733, 0x873B95E5, 0x905E9C80, 0xA051BA6F, 0x5F478589, 0x197AD19A, 0x50015DE9, 0x5BAE412F, 0x4111162B, 0x738F386, 0xE4835BAE, 0x5B55A2D0, -0x5E4B038, 0xF9F91014, 0x8FCBD1E1, 0xD98B4743, 0xB9955DAF, 0xC5373DCD, 0xBD1C8114, 0x250532F1, 0x24504E0E, 0x62D7C50, 0xE8D44154, 0xA8944044, 0x9D669995, 0x530C6FFA, 0x65167BA7, 0xE641BE, -0x811AB5D2, 0xD18A9D09, 0x6F064045, 0xBF902991, 0xC54F07FF, 0xF6962B11, 0xA4819FDB, 0x60F46A54, 0xE451815B, 0x7C197B, 0x9D44DA0C, 0x869640FF, 0x18C44D18, 0x40247F66, 0x5221F711, 0x510196FF, -0x353261EF, 0x44490E0E, 0xF994E956, 0x926C45BF, 0x7D96855F, 0x84D4C98A, 0xE06BF456, 0xC21B1641, 0x4B5CB493, 0xDA90D366, 0xE8964D44, 0x197C75DA, 0xD6D46333, 0x465E78A1, 0x1942461E, 0xC1356656, -0x58D631CC, 0xD773384C, 0x4A9940E5, 0xA0F97414, 0x53532327, 0x78107AB5, 0x3C091BA5, 0xA6469144, 0x44E45841, 0xC50D5842, 0x4A199678, 0x46365DF8, 0x5463E87, 0x8D2C1151, 0xFF5895, 0x2FD231C8, -0x6C9CD2B3, 0xD74243B2, 0xC4409CDE, 0xB8E0411F, 0x26670F05, 0x5B6697A9, 0x55464A2B, 0x2E0F569A, 0x4660E25B, 0xFE500715, 0x9C683532, 0xCB0C5949, 0x806C6592, 0x679B0156, 0xFE005F15, 0xA540FE50, -0x1F281510, 0x906D4F00, 0x57052C80, 0xA95BC0B5, 0x6C98C5CB, 0x44581E4E, 0xAD9D4846, 0x8352C7DB, 0xB21E50D9, 0xEB4607B7, 0x99AC9C77, 0x1509D9FC, 0x5460133E, 0x4244EE5A, 0xEF5A259A, 0x3439461B, -0x6B940B05, 0x59E94484, 0x5062B45E, 0x859B9363, 0xFDE48194, 0x325362D2, 0xE460FB46, 0xD78B98E7, 0x64A3D346, 0xE5B06277, 0x9F655A41, 0x676B5302, 0xEA950B7D, 0xFD158A, 0x775362B4, 0x75C21938, -0x861EB9D2, 0x589532CC, 0x1025190B, 0xD46B06FF, 0xB50E7C44, 0xCDD7A372, 0xB5B96100, 0xF2B491A1, 0x5E9960F4, 0xF1CC582E, 0x89C99575, 0x7AA1475F, 0x7B66C124, 0xD0D681EF, 0x44156E08, 0x8F1F1056, -0x6E67D240, 0x9A4C4951, 0xD451E4A7, 0xEA941B13, 0x7E470070, 0x85422E7F, 0x5B9690FE, 0xDE06E626, 0xC8854A15, 0x5A05ED4D, 0x80F46E1B, 0x9011F302, 0x4493D2D8, 0xE50D9D68, 0xFB764400, 0x64D1816F, -0x9965A616, 0xBF011811, 0x155B0252, 0x3D9DA411, 0x58D96D90, 0x5FAC14F, 0x34E09F47, 0x7470303D, 0x35316E5B, 0x84782D19, 0x6074B114, 0xDF85124F, 0x5B47B723, 0x91327673, 0x31A3C548, 0x6D04F9, -0x65DA62CC, 0x779B6270, 0x9037699, 0xD59A061B, 0xD140F5D0, 0x546F04E5, 0x197A6193, 0x150F46FA, 0xE0592151, 0x54A9D0DB, 0xAA55D851, 0x50616F64, 0x35307994, 0x1198C72F, 0x472E79D1, 0xFF01981, -0xF6195AFF, 0x58E66219, 0x69D3D67C, 0x3395C832, 0x5DA31DFF, 0xD66E7583, 0x802979D7, 0x1C419805, 0xA596916A, 0x6A464414, 0x64702547, 0xD31AB704, 0x91E6C21B, 0x41AF55, 0xC600DF64, 0x2D162960, -0xD0D9AC64, 0x921C6378, 0xD0051C18, 0xCC26969C, 0x3C856899, 0x56A9D3A3, 0xC8CCD966, 0xB42552E2, 0xFF055B5B, 0x4AC7E641, 0xE747D0DD, 0x45A5F75D, 0xFD960205, 0xA60391FD, 0x5EAD8484, 0x13D0E563, -0x11011BBF, 0xF4A4414, 0xCB5D0939, 0x1D6DE804, 0x2D6DF850, 0xB7E11431, 0x8B253410, 0x24D7A918, 0xA6591F6A, 0xFA0545, 0x10D3421A, 0x4E4CE453, 0x99C48C3D, 0x71D1C0F, 0xB4B94045, 0xE0815D05, -0x9D854214, 0xF5F06136, 0x1A58FD15, 0x4742A650, 0x7E66464A, 0xCAC5D1F2, 0x99A91441, 0xB06115FB, 0xC0F43522, 0x9CE9CDC8, 0x59EA404E, 0x5B42A707, 0x16914BD, 0x872DF087, 0x4114AE9E, 0x3B1284FE, -0x5E5E5808, 0x4680D66C, 0x364246C2, 0x65C2462E, 0x421C78A1, 0x1EB8D5EA, 0x28F24C55, 0x5021670B, 0x90BD7875, 0x71385CCA, 0xE7F07411, 0x1F11A366, 0x5FDFB852, 0x4C4DE05A, 0x9E0D9AD6, 0xE0953C84, -0xE5CC0641, 0xE01BF406, 0x51E4072A, 0x4D66B8B5, 0x272DAD04, 0xF2C3986D, 0x6D680158, 0x464B0755, 0x550047FB, 0x74B41D1, 0xAF58676C, 0x7A655241, 0x64B9505B, 0x4D1D4D8D, 0xFFA5909B, 0x2F0754C1, -0x4052256D, 0xB9D68609, 0x66615EB, 0x8A3D64D1, 0x2392D1E5, 0xF0A15ABD, 0xF7375B01, 0x699291A1, 0x607D0154, 0x6F19CDC6, 0x869DAC51, 0x11164726, 0xB0B50B1A, 0x9550E320, 0x257FF450, 0x3264669A, -0xDF5D405B, 0x819855E7, 0x6B97C0A4, 0x88394945, 0xBCF14411, 0x6ED499, 0x570193E3, 0xFA346401, 0xF479095, 0xE6E6850B, 0xB2F1615, 0x95E2160, 0x144D8A3D, 0x3932D186, 0x5B64F801, 0x1F0746E7, -0x1443EF98, 0xE8444E49, 0x4740EB50, 0xB9035B58, 0xD3D21B3E, 0xB8767699, 0x67D78366, 0xBD1187CB, 0x6C5C0C1C, 0x906D3E13, 0x9E1E6C49, 0x400598ED, 0x529106FD, 0xB4C10D2D, 0x740DC334, 0xE99458A0, -0x94C8D572, 0xD7D18228, 0x13E566E, 0x1BC3D629, 0x63136172, 0x51A1B10, 0xF305F4E0, 0x679F6813, 0xD38356EA, 0xD669C856, 0xC5CE5A4, 0xC738CB74, 0x567DB480, 0xA65F9440, 0xE207176B, 0x9D5E4A88, -0x1EFD6440, 0x1095738A, 0xF005646E, 0x19E1870, 0xEC481545, 0x2E598105, 0x55F7439F, 0xDBDB41A1, 0xE64F995, 0x6A9164A9, 0xA5191E04, 0xF4D1413C, 0x646EA056, 0xE3911263, 0x20117A65, 0xF9059304, -0x48366754, 0x12166B67, 0x868A677, 0x46DB80C0, 0x1878D69A, 0x60D26DC1, 0x405EE804, 0x84D990BF, 0xDAD54606, 0xD93365CC, 0x93B2971B, 0x31269151, 0x5F0E58C2, 0x19B96390, 0xA1AD444, 0x90286D94, -0xB1D10B7E, 0x40FAA451, 0x8276815E, 0x8669F400, 0xB5A61B12, 0x65FC9B8, 0x446AA55, 0xA11D8378, 0xAD9F4468, 0x21266E1E, 0x868544FC, 0x67520318, 0x858DD0EB, 0x86D4906F, 0x51D3A9A6, 0x9767857E, -0xD6C99C68, 0x33CC2667, 0x660795F4, 0xD1F10155, 0x86D90D16, 0xE66A1603, 0xF5F86440, 0xE98E4504, 0x17424B9A, 0xB0839F59, 0xE70438F0, 0x432A7560, 0x92D89FC5, 0x37C42399, 0x11617570, 0x249605BE, -0x101BE265, 0xEE905053, 0x4540DA59, 0x9729A4FF, 0xEE850607, 0x9FD15248, 0x50E5B323, 0x7579F946, 0x498459AF, 0x919C2C1E, 0x6AD78374, 0xB1647421, 0x9EE0B603, 0xA6D35E9, 0x96696C9E, 0x587A5003, -0x49454A9, 0x6D6D9393, 0xC98677E9, 0x4095C2EF, 0x9C608505, 0x15940C2C, 0x5B60D2DB, 0x1C8151A9, 0x60F491D2, 0x2B670453, 0x4F1964BA, 0xB4430B51, 0xA9860454, 0xB0E41E46, 0x1406B7E3, 0x562701E4, -0x20D1F6A1, 0x5352A966, 0x64E1D62F, 0x92C6ED07, 0xF882561B, 0x99195A04, 0xC934E3AC, 0xD9B91810, 0x474B04F4, 0x3D9A66, 0xCA9C10AF, 0xE1942916, 0xA125355, 0x32295C8C, 0x675A64E1, 0x9D906494, -0x6C60EB1F, 0x7874C1BC, 0x1CB53038, 0x56D0F9D1, 0xB1EB954, 0x7C781540, 0x5323619E, 0x6FE055A9, 0xE7440D22, 0x7431A347, 0x6F1BE146, 0x1015BF00, 0x62381905, 0x7025B440, 0x176AF050, 0x5D270EF1, -0x46AF4C18, 0x4B86D9ED, 0x8B177010, 0xFAD09606, 0xBFA15E50, 0x4701D72D, 0xA298A55E, 0x865CA950, 0x9B5B1227, 0xE0B9175, 0xF481F1FC, 0x7E5D0440, 0x1A697FE5, 0xDE84C5F0, 0xF9975303, 0x4CB46C54, -0x3ED0D666, 0xE6B07065, 0xF0661263, 0x117C93A0, 0xD56DB4E1, 0x2E5E0E5D, 0x873DE11F, 0x5512413E, 0x5E9CE404, 0xB4C10B7F, 0xF990E956, 0x84C95E95, 0xB5E04B1F, 0x86815BA5, 0x7A5CB26C, 0x42F41F91, -0xF4592E03, 0xF51F1300, 0x99D7810F, 0xB16051A7, 0x5B57B03E, 0xEE590B55, 0xC014FDD6, 0xF9C04505, 0x1A669669, 0x984C5F84, 0x1A6FD2E3, 0x1A075E5, 0xD80E450C, 0xD66942B6, 0xD050E31F, 0xBA605440, -0x50E7856A, 0x406E53EF, 0xF01191B, 0xBF055243, 0x9B25E9E7, 0xF892A157, 0x2D598957, 0x85896B6, 0xEF44584B, 0x170667FB, 0xD1017F38, 0xCEC58687, 0x443C6C99, 0xB5B83D3, 0xFD05D91B, 0xA6D72DD3, -0x6C98D9D0, 0xD66990E0, 0xDE850B0F, 0xE9964609, 0x8605B94B, 0x6DC0D196, 0xB194A5, 0x6F13424D, 0x9ED13215, 0x7064249F, 0x5751E0B0, 0x166F26D6, 0x559EC2F8, 0xE12C5C71, 0x59898D15, 0xBC015A05, -0x90D18B0F, 0xB0E8649C, 0x170B98D0, 0x8181F491, 0xD990498C, 0x76312925, 0x93B53402, 0xCC1C4B54, 0x2F3F5006, 0x56EC4F10, 0x1AE501E4, 0x6F4D40DB, 0xA3525D69, 0x1329E491, 0x400AF995, 0x2D5C4806, -0xB091667D, 0xCC6C1627, 0x425CD9EC, 0xF552931A, 0xA6D46580, 0xF4AE50E0, 0x1979909A, 0xF1750058, 0x3365CCD9, 0xBA166500, 0x86779739, 0x67F2611, 0x55109A0B, 0x51016A65, 0x1160BBF, 0x5A6C1401, -0xC4DC9984, 0x33534244, 0x4057113A, 0xF1F431C1, 0xF8A44BE5, 0x1A976851, 0xB9B5C28F, 0xFE099454, 0xB065B8B5, 0xC0217707, 0xF3831BD1, 0x9757401B, 0x1D293580, 0x7A951200, 0x20615AF5, 0x6272757, -0xE0FC2907, 0xD860B5C1, 0x985F89C, 0xC25C2C5F, 0x7F941C01, 0xA95A450A, 0x44D89A95, 0xCE1C0C58, 0x194184F9, 0x579BB371, 0x90111F40, 0x5F037075, 0xBB516996, 0x4EC9791, 0xCCEC9C44, 0x5D8404F8, -0x48FE9D1, 0x4792E3E2, 0x6F35E381, 0x5F0350FB, 0xFF6C56, 0x6050A5F7, 0x589625C9, 0x8F79061D, 0x11D0421F, 0x9061F184, 0x504662BE, 0x8FC7D190, 0xB4404627, 0xEA1F1B03, 0xAF59D0EA, 0x79E50E04, -0xCF80445D, 0x4191D38B, 0x8F51328, 0x6653E282, 0x8C5C3573, 0x90E05929, 0xC5910D2B, 0xAE479D46, 0x2F7C1610, 0x24B1637E, 0xCB001F55, 0x118384B5, 0xA3421710, 0xAA0725F4, 0xE9C0959A, 0xE5E74114, -0x4A44CB25, 0x1763BD90, 0x1B095404, 0xCF09D095, 0x5B8344AC, 0xC5C0F9D1, 0xA7615441, 0xE990474B, 0x63536723, 0x1E305BA6, 0xE56B066B, 0xCA817916, 0x9F798578, 0xD7692E06, 0x56F01481, 0x37215100, -0x17111401, 0xF890F955, 0xA68D68D6, 0xD64A06F0, 0x9F65D9D2, 0xBE90095F, 0x9967072F, 0xE01C947B, 0x12235709, 0x589DFD, 0xBB154A41, 0x2D5DC01F, 0xC58B5C08, 0xCB64DC4C, 0x9F9393AC, 0x7303467E, -0x599EC984, 0x46E111FC, 0x7A679404, 0xA90647FB, 0x40EE949A, 0x77076E08, 0x10736423, 0x53D90AB, 0x1F510BB, 0x85CC253A, 0xAA905666, 0x45EC0B4, 0x835121F1, 0x2E5A4247, 0x1D8664A0, 0x51442CE0, -0xDD88451E, 0xE85C0113, 0xFA409601, 0xA4211627, 0x459F50BA, 0x984C458A, 0xE65A60D7, 0x958143B2, 0xD3835BFA, 0xF727F110, 0x4F074354, 0x11113D3D, 0x1558312B, 0xFF08E6D6, 0x89BC5910, 0x99F99287, -0x40D4183F, 0xDA66A550, 0xA45CE279, 0x7F97A251, 0xB1B025F, 0x70772265, 0xF0E21E16, 0xE79959B5, 0x496669C6, 0xECD00716, 0x5619ECE1, 0x6E5C11F, 0x1101FFF8, 0x55A01DCB, 0xA5053970, 0x3D448855, -0x9F92E540, 0x35B8A4D0, 0x84119CA7, 0x5429406F, 0x90E05B56, 0x3752E1D8, 0xE1B42D87, 0x9454B0F1, 0xDD382505, 0x1904ED6F, 0xD94D0C58, 0x7C52031F, 0x14B06706, 0x79928799, 0x40149BC7, 0xE9DCD6D0, -0x104F4D1, 0xD9663448, 0xBD85D003, 0x358CCDA3, 0x66F5412B, 0x6E65066A, 0x6E19B161, 0x55D1AA50, 0x785C9D30, 0x162530BE, 0x7AE64548, 0xA51B9B0E, 0xF9A56400, 0x32CE35DB, 0x17285370, 0xB0117B76, -0x7CE04741, 0x9D0C51A4, 0xBF004D55, 0xAAD5AC11, 0x6599CB41, 0xFBD09444, 0x936291E5, 0x2D5EA056, 0x1129656A, 0x7FC09506, 0xD44149C8, 0xBA750352, 0xD2431943, 0x7967E182, 0xB813C497, 0x24219465, -0xC43C9169, 0x6FD81483, 0x6152E3C, 0x59947B6, 0x27F90D12, 0x54046D2A, 0xD521309B, 0xE6653921, 0x9164F4F1, 0x1521FB4A, 0x61C54C38, 0x416484BF, 0x2776B11F, 0x59A9D884, 0xED806B54, 0x1BB0D59B, -0x4E8D91A1, 0x782FD131, 0xC05A0377, 0x7A121126, 0xDFC5D0E0, 0xEF859E05, 0x7BB60515, 0x5DD26D89, 0x2E291157, 0x9F2F3530, 0xC08156A9, 0x6D91CDC5, 0xF1548117, 0xB52517FE, 0x2053E947, 0xAB5785C5, -0x479A91E0, 0x9F90FE01, 0x312484DE, 0x441BC1A5, 0x66B501F5, 0xC4617A5B, 0x916BB0F4, 0x20657C7A, 0xE25390FF, 0x1F3861B4, 0x550586AF, 0x6B8599D4, 0x9F4294EC, 0xF4D48147, 0xD0965233, 0x1E05CFED, -0x59176903, 0x2D2976C, 0xCD33338C, 0x1441E4AD, 0x4196C088, 0xF6079403, 0x969DC030, 0x64990D29, 0x2453F372, 0x8658909B, 0x458046FB, 0x11A185C4, 0x58FC1144, 0x31E641A, 0x8E47709E, 0xF1611277, -0x61F907A, 0xB7100F5C, 0x5A170B19, 0x160557E, 0x55B39D0, 0xC0C556EF, 0xBBF50299, 0xD1D23E12, 0x69588543, 0x4546890, 0x90FA4115, 0x11C5ED8, 0x68B74789, 0xC06F0117, 0x172790AD, 0x606DAC54, -0x8D488154, 0x8444EC98, 0x9A6592D3, 0xE5E15040, 0xDB031762, 0x2F099450, 0x404F0F5A, 0x1D09E9F4, 0x56045E1F, 0xF9C99F00, 0x136C6599, 0xB0C36E91, 0x1C2835B0, 0x60BE6B5, 0x462FB4D1, 0xCB19B6D7, -0x6C48C4D9, 0xD0D19B69, 0xA5E544FC, 0xE4851E31, 0x41E464B8, 0x59C6F9D4, 0xF0A6527E, 0x5333D1E0, 0x4862F606, 0x72370631, 0xC2B490C5, 0x4643DE5C, 0x54F9C489, 0xFC526C40, 0xB0A56895, 0x45C1C134, -0x768F1981, 0x6E295005, 0x950B6964, 0x4B4CD5E9, 0xEB131245, 0x447F844, 0x131B1D76, 0x99981A7, 0x500B1F0A, 0x91011B1B, 0x64E64709, 0xA45C8145, 0xB53001D1, 0xDB462885, 0xBE06D015, 0x4858541B, -0x6C86C3B5, 0x70A1967B, 0x969B0414, 0xEF485C04, 0x7FE151C1, 0xEBE7F444, 0x5341990B, 0x71D58060, 0xF5A61E10, 0x79F2C53, 0xE5E41F00, 0xBFF4505, 0xE01BB4E9, 0xBFE3905D, 0xDB7664D0, 0x956A065B, -0x12894E1, 0xBF14B401, 0x30F7A97, 0xA85C97E0, 0xF40643E9, 0xF8506706, 0x9B9B06AB, 0x5AA05995, 0x45448E3D, 0xE1D1907F, 0x24F4C22C, 0x82C2959A, 0xBF065243, 0x8785812D, 0x9A94A916, 0x315B2C60, -0x523291D9, 0xF2991609, 0x2830579C, 0x999973CC, 0x4B14C098, 0xC1C5053, 0xD1C1C68A, 0x64B67F3, 0xD09B801D, 0x6A7C1044, 0x48580954, 0x859F095A, 0x46533620, 0x592C852D, 0xA5419141, 0x4D16A1D0, -0xB0B153B, 0xE1944E4A, 0x21371633, 0xCEC9C4E4, 0xA5D70E08, 0x4E4C4DD, 0x591CAC04, 0x5B021DBC, 0x9967CC33, 0x81C0E5FD, 0xF651C104, 0x966760C9, 0x95E1303C, 0xEC5C6440, 0x50BF9F4, 0x3561C31E, -0x45A096AD, 0xFF92500B, 0xF6598904, 0x19F9C50B, 0x60C64D18, 0xD640584F, 0x2194E1F3, 0xF031163D, 0x101B56E0, 0xDE5921DA, 0xBF01FD1, 0x706FD94, 0x34CB30CE, 0xB857061C, 0x5225B609, 0xC43C3135, -0xC03B9350, 0xF001676F, 0xF0C18767, 0x6611391B, 0x4F89A46, 0x1F42441A, 0x649F0F46, 0xB5E0015E, 0x7966830E, 0x9740F4F7, 0xC8CC4451, 0x59BD404B, 0xCC9435E1, 0x3B15B2A0, 0x123C1607, 0x59468D90, -0x40E0D749, 0x14C1F46E, 0x448BD6A9, 0x659AF556, 0x50E7435B, 0xAED2933C, 0x56051308, 0xCE146E50, 0x1C904F10, 0xEC485E0D, 0x169A936C, 0x51633605, 0xDB57A830, 0x62957AB, 0xF4F14448, 0x45CAD5D, -0x695CC006, 0x104606B9, 0x81D1D86D, 0x8649F050, 0x20D1DB56, 0xE5E53CC0, 0xCB470256, 0xC629E494, 0x49385F8F, 0x65056E31, 0x9C86F095, 0xC8CC9865, 0x869D8118, 0xD1021F11, 0x87DAD1E2, 0xAF04D500, -0x4518464, 0xB857B085, 0x4505E834, 0xB1E25F04, 0xD8DD9084, 0x35978C33, 0x11A64257, 0x991A1E41, 0x66B06752, 0xBAF41443, 0xBD4A4544, 0xD6753B66, 0xCAC6C639, 0x154480FD, 0x99D19BC, 0x546EE442, -0xD0C0193E, 0x7491E21F, 0x24B0B3C7, 0xF981D501, 0x74438B58, 0x54C47391, 0x9EDD1180, 0xE697874F, 0x2E41F8E5, 0x468FDD9, 0x4F1E439C, 0x5542EB81, 0xA554FAE0, 0x1E43E2B0, 0x606D5898, 0x6587C4E8, -0x6B86C511, 0x6050A6D3, 0x1C523485, 0xF2530396, 0x4A2D5884, 0x6FD09193, 0x29978F84, 0xFE490999, 0x9189675E, 0x99277401, 0xDD6F2494, 0x8CD39344, 0xB5783D9, 0xC859EE, 0xAC701503, 0x8FC1D7E1, -0xA0854317, 0xD09E8444, 0x4510F2BD, 0xED484CD4, 0xDE5D0C1C, 0xC0854367, 0xD1642134, 0x503876E, 0x7C046A5E, 0xE5644035, 0x3D043173, 0x5DE8991, 0xA603D6D0, 0x70644B1B, 0x41C3F55, 0x799EC50, -0x5C1D005A, 0xB54027BB, 0x501703FB, 0xCE5E2D84, 0xC248776B, 0x34C31DB1, 0xD08146F6, 0x6194D488, 0x902D95DF, 0x56239699, 0x79566996, 0x46366797, 0x2075B449, 0xE619904B, 0xF1FC491D, 0x4026925F, -0x85CE994, 0xC62D651B, 0xE0F50B4, 0x60976F55, 0x5B7706A6, 0x49471F41, 0xF6D91352, 0x551A062F, 0x4145CFCA, 0x55B14234, 0xABF12531, 0xB915F0F4, 0x8AC7E275, 0x4679C12F, 0xE21353EC, 0x693602A5, -0x4BC256AB, 0x463D64A6, 0x5E7C6B8, 0x143983F0, 0x3646871A, 0x601D1FE, 0x4D4601FC, 0xB489D0DF, 0xF7814046, 0xE5A50BA7, 0xB34A116, 0x707C4151, 0x804466BB, 0xCF450C5C, 0x1329B9F4, 0xFE400655, -0xF4A1431B, 0x51D3202D, 0x74B0A444, 0xA6F1612, 0x6C584C8C, 0xC014F665, 0xD3982957, 0x36C136D1, 0x5C45CCD0, 0x9F459882, 0x91A753A2, 0xA9752C4C, 0x421B4297, 0x776A2313, 0x35397906, 0x48065762, -0x1129B440, 0xAF410B5D, 0x7F9582D2, 0x4B51E650, 0x891D0D77, 0xE59909E5, 0x705D234B, 0xC3DA9055, 0xF1B11501, 0x44BC94D9, 0x1FA55C48, 0x2A422657, 0xC41091A1, 0x18970E74, 0x7699099, 0x10616AD7, -0x1AE19F10, 0x475A6C31, 0xA27257E9, 0xC484582C, 0xD699665A, 0x17C94C18, 0xE1569B, 0x11855ABF, 0xA580D607, 0x64C18B7E, 0x7030A605, 0x2B3660D0, 0x165BE103, 0x809E1867, 0x47407FD7, 0x34E4858B, -0x90ED740B, 0x1B43C2F5, 0xF451527C, 0x5723E1C5, 0xE1D1065B, 0xA51A9DF4, 0x7F099A85, 0x4157030B, 0x1D9F60B8, 0xC11491FD, 0xFE850A55, 0xB990431F, 0xA0C78D16, 0x6F5A4D40, 0xFE4411E, 0x34426B56, -0x5014FE0F, 0xBD5DC51A, 0xC63637C3, 0xE1B459B2, 0xFA871B05, 0x4544D0AD, 0xE5E5093D, 0x3306C5DD, 0x47C33484, 0x6F1E146, 0xE4974F1, 0xDD48050F, 0xAB151E12, 0x5169FC92, 0x5055B27A, 0xD142AD5C, -0x4B16B0F4, 0x312BC955, 0x75B10FC, 0x4A9E0458, 0xA65D34CE, 0x90D366CF, 0x10099D29, 0x8B358419, 0x87D2B5DA, 0x31162EF5, 0xF61989C5, 0x1F4341F8, 0xBC4C6D9C, 0x11A759, 0x9553A21, 0xCFC41530, -0x1F05B610, 0x5B2F64C0, 0x117F1124, 0xF3D24D9, 0x44447874, 0x74351A06, 0x64C48979, 0x63C185B, 0x91F094A4, 0x4E1D1C48, 0x969103AE, 0x9CFC6067, 0x2FC94045, 0xED3844C4, 0x676C935B, 0x6E2091B5, -0x2D9744EC, 0x6A111227, 0x78DB90E5, 0x8045587E, 0xC4E4591E, 0x479BE1E0, 0x5B667499, 0x50E0493E, 0xFB54819C, 0x431491F8, 0xD3EF50E0, 0x7363926, 0x50FF6440, 0x44DC6C9D, 0xF6D9965A, 0x548499, -0x150A1403, 0xC7324CC7, 0xAFF0474B, 0xB479966E, 0xAD9E5451, 0xF9913C41, 0x1F09B46, 0x3E35461E, 0xA0C66C10, 0xA4D1D103, 0xA05470B4, 0x6F1A3531, 0x4047B2F5, 0x11472CE0, 0x3AE41631, 0xFD36A905, -0xF4436F91, 0x4A419766, 0x50699E67, 0x5408D93D, 0x112711AF, 0xF500642F, 0x160BD66A, 0x11B0BFE, 0xC2C55CA1, 0x31CF859, 0xC6C95401, 0xD9C0E5C1, 0xE46056AE, 0xF5E30710, 0xA5FF0150, 0x4454203F, -0xB6660959, 0x2522776, 0x2D586970, 0x7370757, 0x60953317, 0x81E7072D, 0x68149E6, 0x653834, 0x363D9D81, 0xB429113F, 0x566C0258, 0x51F92F00, 0xE19C5812, 0x11FB150, 0x59A65200, 0x2775E0F4, -0x106752A3, 0x7574326, 0x5CC34739, 0xDAD54805, 0x5E936BC7, 0xCFCAC5C9, 0x2FC42555, 0xD06994C0, 0x5CAC7400, 0x5D84D074, 0x6D668604, 0xE50B19BD, 0xE7969F55, 0xFF925005, 0x65B266B, 0x4743035E, -0x972C44C7, 0x5AB47260, 0x77123580, 0xD92DB404, 0x451BB8D1, 0xB94B4447, 0x9B955210, 0xA253815, 0x79AC5184, 0xE3D10C5C, 0x452410FB, 0xDFD3A148, 0xE0336E46, 0x4E287599, 0x12B750A9, 0xDAC0DE47, -0xC18459A9, 0xC764CD30, 0x2334675E, 0xF6490DB8, 0x49172679, 0x659B6994, 0x7A912691, 0xB2B76074, 0xB9E58704, 0xCC33D9A9, 0x207F6A7, 0xC405F801, 0x560297CF, 0x48140E5F, 0xC44E676A, 0xB191DED, -0x11035F60, 0x5B1F60B4, 0xA4EB1443, 0x5A6C06E6, 0x1915AE9, 0x33CD2696, 0x879F4444, 0xD442170B, 0xC9C9D9D6, 0xA1D4C124, 0xC40366B7, 0x22497E9, 0xCD18D7F9, 0x99FD111A, 0x9F6B53A1, 0xE051ABFC, -0xBC10071D, 0xA566A759, 0x6DBC5E5, 0x4A9DA851, 0x2266B15, 0x123D6E9B, 0x66E05449, 0xD10D3870, 0x1706E462, 0xAF0B9B51, 0xE0109D6C, 0xF144861B, 0x813ED01B, 0xB6496C10, 0x1ED00768, 0x60747C10, -0x46494376, 0x5E4C10B0, 0x573D5906, 0x5A02E5FE, 0xB3E005F2, 0xC05C4F45, 0xDBD58982, 0x6D13171F, 0x9741FA00, 0x61DB852, 0x8D46D299, 0x47421E4D, 0x74A94E6, 0x4DA31CD3, 0x681602FF, 0xC67962D7, -0x1560BBA, 0xF8849D85, 0x7DD6D5B8, 0x5B6B4640, 0x441A349F, 0x61B3601F, 0xD550E2D3, 0xCF18111B, 0x97673333, 0xC59909E4, 0x57DAE840, 0xBB910E5, 0x144484F9, 0xA85C2511, 0x4092D5EA, 0x89910391, -0x7D385500, 0x3D1D2176, 0x802FD41B, 0xA5D94890, 0x656E9099, 0xE66906E6, 0x4331A2D5, 0x4478E25B, 0xE78C41D, 0x3565D979, 0x4147133B, 0x89C6C64A, 0x45C9CDCF, 0x532315FA, 0x3E5A0D04, 0xB111DBFC, -0x63162FF7, 0x9E0B9CD0, 0xA758E46B, 0xA097421F, 0xAE544262, 0xA59A5DDD, 0x3732261D, 0x71736790, 0x8895A173, 0x687470B1, 0x57E564FE, 0x6A765404, 0xF5E21482, 0x667150E1, 0xC0A764D9, 0x89950C14, -0x3756912B, 0x3913499, 0x6FB553C3, 0x29920995, 0x750EC738, 0xC35C6992, 0xAA55E404, 0xCB4B0753, 0x20396156, 0xDB04F4C1, 0x7876825F, 0xD562319A, 0x592D121B, 0xF9360956, 0x47811B47, 0xD9BD5884, -0x170A35E, 0x844EE59A, 0x8684EDDA, 0x405F1000, 0x813641A7, 0x176681A2, 0x7DBE6440, 0x87C6A54, 0xC485D905, 0x1AB0811D, 0xDBA59291, 0xFA52817C, 0x3981E5F0, 0x5109FEE5, 0xC1284557, 0x573B2703, -0x30640659, 0xF1D3E997, 0x906253B7, 0x9076C3FD, 0xCA34D35C, 0xF481491C, 0x5976A4C0, 0x3FF1144, 0x26170649, 0x196B9065, 0x90693D09, 0xF0211A17, 0xAF016DD4, 0x4E449C48, 0x6F9A84F4, 0xB4449818, -0x606DB144, 0x916B97A6, 0xEBD0FD19, 0xAA08D541, 0xD71BE505, 0x1E6507AF, 0x3E4B1361, 0xF391619, 0x4264BC50, 0x60563321, 0x4A370617, 0x436452E7, 0xBE107604, 0xDDA9C18E, 0xBF5B0371, 0x906F1107, -0x55C5C83C, 0x31364782, 0x68DD9F1, 0xF99607E6, 0x2996367E, 0x5AF4458, 0x96582D30, 0xC4E4D98A, 0xE68719BE, 0x20C56C64, 0x5A550246, 0xB759B079, 0x64439BFB, 0xB1240D2E, 0x271350B2, 0x4314AF56, -0xA9998D72, 0x5E8D1481, 0xB65D7253, 0x669392B8, 0xF0919B6C, 0x9F9790DD, 0x60979838, 0x3D625168, 0x12196D58, 0x59E9448A, 0x30547C92, 0x8E317590, 0x7B954843, 0x323D4907, 0x5A4D5308, 0xD10490DB, -0x92CE4511, 0xB9353125, 0xA91F4050, 0xDC485D08, 0x2F11742, 0xB9B4090F, 0xD09891FF, 0x9503936, 0x80E3505F, 0xED99405F, 0xEA9058DE, 0x55019FC0, 0x9A1F412C, 0x471660DA, 0xF4D0C505, 0x4926666D, -0x4191C3EF, 0x1A0526F5, 0x55F889C7, 0xD33CC738, 0x7A66C601, 0xF701C662, 0x6E953906, 0x6E6559AD, 0x1626C57A, 0xE0075266, 0x67069A5B, 0xA5F70401, 0x47786090, 0x8111C53B, 0xB4640B1A, 0x269D5DAE, -0x50C4A474, 0x2A94987D, 0x44C05226, 0x6114423F, 0xB8474F1D, 0x8E0E05D8, 0x87B40FD2, 0x1F4392FD, 0x170E995, 0x1563DE0, 0x6F9AC5CA, 0x752A0D1D, 0xFF0A44D0, 0x7FD0D366, 0x51A62E05, 0xD0D5E8DE, -0x56113F30, 0xE4056D87, 0xAB3B5100, 0x46539C6, 0x7F676290, 0xB851130D, 0xF5E09183, 0x64AC5D2D, 0x55F9404B, 0xE256F977, 0x70617760, 0xEE48E450, 0xDD5E35C8, 0x94D400F8, 0x446A0667, 0xEA935184, -0x464B07F8, 0x8C74B6D4, 0x8D9D59A5, 0xCEC6ADD5, 0x2D0956A3, 0xA5BA5103, 0x31353123, 0x55FF4140, 0xA2440F15, 0x89266792, 0x44E1E154, 0xE5B41338, 0x2FCE9901, 0x95E6811B, 0x475C871, 0xAE9E4A44, -0x5E0D141, 0xE702D66B, 0x474707E2, 0x6486CBC5, 0x7476016E, 0xB1D29B56, 0x7A34C605, 0x51427906, 0xE7967F97, 0x65D29C90, 0x55081AD, 0xD6E64045, 0x67134368, 0x9101E6DD, 0x68957841, 0x3D3D5909, -0xE0525BAF, 0x134A4D3C, 0xC1B11909, 0x16493B76, 0x6B96D0A0, 0xBF0E79D6, 0x2C7096F9, 0x90FC04D6, 0x1742E472, 0x531CA1AC, 0xDAD08646, 0x9066669, 0xA7588D86, 0x913C54C2, 0x742A4514, 0x17111ABC, -0xDDD7EDE5, 0x6699C498, 0x75313135, 0xE4995F64, 0x2582667E, 0x9C5C4C48, 0x1D0D10D9, 0x5B4C164, 0x46E616CB, 0xD18444BF, 0xE1D4695C, 0x40095E99, 0xECE02955, 0xFF40A411, 0x54D2421B, 0xE1C7DB05, -0x80E5095D, 0x6745E907, 0xA6197007, 0x760674F9, 0x1522170A, 0x65181FF, 0xE0FDA45, 0x521C7867, 0x6B91D382, 0x657A83C1, 0x73C98C35, 0xB3CC31D6, 0x164B257B, 0x6F9605F9, 0x52F49EB5, 0x87592907, -0x1B10D6F8, 0x949FD54, 0x910315BA, 0x40F09B47, 0xB761C144, 0x6D039D5, 0x59B113F, 0xE5C6D9, 0x176990FB, 0x90F8A465, 0x6DB8D144, 0x4552E392, 0xC94396B9, 0x36315A97, 0x7E874215, 0x40116F6F, -0xDF193401, 0x70689317, 0x7E021740, 0xD5C044BD, 0xF1636E94, 0x5B0D34A1, 0x1027F689, 0x44A45590, 0xD443035F, 0xD7A4418C, 0xD949F480, 0x84C1E154, 0x6090966E, 0x40B56C1E, 0x9669C540, 0xA6305505, -0x1667E244, 0xC245885D, 0xD504A5E, 0xA4F0C549, 0x358472A8, 0xC414BF20, 0x43369729, 0xB1112711, 0x78644352, 0x811CB856, 0x6F9792F0, 0x1E1E4195, 0x62C58C14, 0x2619D3A2, 0x998056BD, 0x653F3410, -0x919184E4, 0x64906D6C, 0xE3D7996, 0x47660563, 0x50A91F03, 0x49F8C5CB, 0xFE15235E, 0x9783451, 0x716257B7, 0x1AB5351, 0x1710DC84, 0x3FA01D5A, 0x9844AD64, 0xE4D901BC, 0xEE546352, 0xF9547987, -0xF6834B47, 0xB651F6D, 0xE09C9045, 0xE491424E, 0x94F9050B, 0x7DA6091D, 0xB5C14D74, 0x123A699D, 0x1F413CC3, 0x9F434158, 0x55D8C8C4, 0x51106FF, 0xD36CB1C, 0x1541FCE1, 0xC3344ED3, 0x3E29D905, -0x150A6579, 0x502475A, 0x454B0F04, 0x65902722, 0x9EA055, 0x26568CC5, 0x7EB1443, 0x42186F96, 0x132357A9, 0x74091F13, 0xEE55480F, 0x7A0B4A45, 0xF01A8637, 0x937D68D5, 0xE2611115, 0x8A853663, -0x60D295AB, 0x1946461A, 0xBB5190A1, 0x6D514218, 0x7C6482CF, 0x8759ACC8, 0x7E86C805, 0x42D3755F, 0xF4C10529, 0x471F1400, 0x5394238C, 0x112D54A8, 0x55E450F8, 0xDC2191BA, 0xA5F93011, 0x1A2159F5, -0x4051A297, 0x66066999, 0xA644C058, 0x54EC9148, 0xFAFB0146, 0x1150FCEC, 0x4141D171, 0xF09F0444, 0x488E5E0E, 0x3D190F10, 0x406E405F, 0xFE9904AD, 0x101F5C6F, 0x454B093B, 0x40946C1F, 0xF0B966D, -0xC16464DB, 0x91E2D6F9, 0x97789074, 0x537C5C40, 0x44A533C3, 0x74102B33, 0x40D425C1, 0xD748C936, 0x786619C9, 0x40917985, 0x66594C1C, 0x2F05D2D2, 0x8C711B4, 0xF9602757, 0x1013854A, 0x7D6296D0, -0x3D99B8F0, 0x495D3243, 0x916864BE, 0x4E43B947, 0xE756A110, 0xA8D09D7D, 0xBF625095, 0xC1D48F87, 0x8BD47099, 0xDB631315, 0xE54139A0, 0xE4DC9C63, 0x846C2544, 0x4F0E04D1, 0xE0B15B26, 0x3249499D, - -} -/**** ended inlining basisu_global_selector_cb.h ****/ - ; - - const uint32_t g_global_selector_cb_size = sizeof(g_global_selector_cb) / sizeof(g_global_selector_cb[0]); - - void etc1_global_selector_codebook::init(uint32_t N, const uint32_t* pEntries) - { - m_palette.resize(N); - for (uint32_t i = 0; i < N; i++) - m_palette[i].set_uint32(pEntries[i]); - } - - void etc1_global_selector_codebook::print_code(FILE* pFile) - { - fprintf(pFile, "{\n"); - for (uint32_t i = 0; i < m_palette.size(); i++) - { - fprintf(pFile, "0x%X,", m_palette[i].get_uint32()); - if ((i & 15) == 15) - fprintf(pFile, "\n"); - } - fprintf(pFile, "\n}\n"); - } - + enum etc_constants { cETC1BytesPerBlock = 8U, @@ -2637,8 +7304,8 @@ namespace basist uint32_t m_base; uint32_t m_table; uint32_t m_multiplier; - std::vector m_selectors; - std::vector m_selectors_temp; + basisu::vector m_selectors; + basisu::vector m_selectors_temp; }; static uint64_t pack_eac_a8_exhaustive(pack_eac_a8_results& results, const uint8_t* pPixels, uint32_t num_pixels) @@ -3034,8 +7701,8 @@ namespace basist uint32_t m_base; uint32_t m_table; uint32_t m_multiplier; - std::vector m_selectors; - std::vector m_selectors_temp; + basisu::vector m_selectors; + basisu::vector m_selectors_temp; }; static uint64_t pack_eac_r11_exhaustive(pack_eac_r11_results& results, const uint8_t* pPixels, uint32_t num_pixels) @@ -3193,13 +7860,14 @@ namespace basist #if BASISD_SUPPORT_UASTC void uastc_init(); #endif + + static bool g_transcoder_initialized; // Library global initialization. Requires ~9 milliseconds when compiled and executed natively on a Core i7 2.2 GHz. // If this is too slow, these computed tables can easilky be moved to be compiled in. void basisu_transcoder_init() { - static bool s_initialized; - if (s_initialized) + if (g_transcoder_initialized) { BASISU_DEVEL_ERROR("basisu_transcoder::basisu_transcoder_init: Called more than once\n"); return; @@ -3319,7 +7987,7 @@ namespace basist transcoder_init_pvrtc2(); #endif - s_initialized = true; + g_transcoder_initialized = true; } #if BASISD_SUPPORT_DXT1 @@ -5641,7 +10309,7 @@ namespace basist assert(num_bits < 32); assert(val < (1ULL << num_bits)); - uint32_t mask = (1 << num_bits) - 1; + uint32_t mask = static_cast((1ULL << num_bits) - 1); while (num_bits) { @@ -7873,7 +12541,7 @@ namespace basist while (total_bits) { - const uint32_t bits_to_write = std::min(total_bits, 8 - (bit_pos & 7)); + const uint32_t bits_to_write = basisu::minimum(total_bits, 8 - (bit_pos & 7)); pBytes[bit_pos >> 3] |= static_cast(value << (bit_pos & 7)); @@ -12111,7 +16779,7 @@ namespace basist uint32_t m = (le * 5 + he * 3) / 8; - int err = labs((int)v - (int)m); + int err = (int)labs((int)v - (int)m); if (err < lowest_err) { lowest_err = err; @@ -12134,7 +16802,7 @@ namespace basist uint32_t le = (l << 1); le = (le << 4) | le; - int err = labs((int)v - (int)le); + int err = (int)labs((int)v - (int)le); if (err < lowest_err) { lowest_err = err; @@ -12156,7 +16824,7 @@ namespace basist uint32_t he = (h << 1) | 1; he = (he << 4) | he; - int err = labs((int)v - (int)he); + int err = (int)labs((int)v - (int)he); if (err < lowest_err) { lowest_err = err; @@ -12185,7 +16853,7 @@ namespace basist uint32_t m = (le * 5 + he * 3) / 8; - int err = labs((int)v - (int)m); + int err = (int)labs((int)v - (int)m); if (err < lowest_err) { lowest_err = err; @@ -12215,7 +16883,7 @@ namespace basist uint32_t m = (le * 5 + he * 3) / 8; - int err = labs((int)v - (int)m); + int err = (int)labs((int)v - (int)m); if (err < lowest_err) { lowest_err = err; @@ -12231,8 +16899,8 @@ namespace basist } #endif // BASISD_SUPPORT_PVRTC2 - basisu_lowlevel_etc1s_transcoder::basisu_lowlevel_etc1s_transcoder(const etc1_global_selector_codebook* pGlobal_sel_codebook) : - m_pGlobal_sel_codebook(pGlobal_sel_codebook), + basisu_lowlevel_etc1s_transcoder::basisu_lowlevel_etc1s_transcoder() : + m_pGlobal_codebook(nullptr), m_selector_history_buf_size(0) { } @@ -12241,6 +16909,11 @@ namespace basist uint32_t num_endpoints, const uint8_t* pEndpoints_data, uint32_t endpoints_data_size, uint32_t num_selectors, const uint8_t* pSelectors_data, uint32_t selectors_data_size) { + if (m_pGlobal_codebook) + { + BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::decode_palettes: fail 11\n"); + return false; + } bitwise_decoder sym_codec; huffman_decoding_table color5_delta_model0, color5_delta_model1, color5_delta_model2, inten_delta_model; @@ -12283,7 +16956,7 @@ namespace basist const bool endpoints_are_grayscale = sym_codec.get_bits(1) != 0; - m_endpoints.resize(num_endpoints); + m_local_endpoints.resize(num_endpoints); color32 prev_color5(16, 16, 16, 0); uint32_t prev_inten = 0; @@ -12291,8 +16964,8 @@ namespace basist for (uint32_t i = 0; i < num_endpoints; i++) { uint32_t inten_delta = sym_codec.decode_huffman(inten_delta_model); - m_endpoints[i].m_inten5 = static_cast((inten_delta + prev_inten) & 7); - prev_inten = m_endpoints[i].m_inten5; + m_local_endpoints[i].m_inten5 = static_cast((inten_delta + prev_inten) & 7); + prev_inten = m_local_endpoints[i].m_inten5; for (uint32_t c = 0; c < (endpoints_are_grayscale ? 1U : 3U); c++) { @@ -12306,21 +16979,21 @@ namespace basist int v = (prev_color5[c] + delta) & 31; - m_endpoints[i].m_color5[c] = static_cast(v); + m_local_endpoints[i].m_color5[c] = static_cast(v); prev_color5[c] = static_cast(v); } if (endpoints_are_grayscale) { - m_endpoints[i].m_color5[1] = m_endpoints[i].m_color5[0]; - m_endpoints[i].m_color5[2] = m_endpoints[i].m_color5[0]; + m_local_endpoints[i].m_color5[1] = m_local_endpoints[i].m_color5[0]; + m_local_endpoints[i].m_color5[2] = m_local_endpoints[i].m_color5[0]; } } sym_codec.stop(); - m_selectors.resize(num_selectors); + m_local_selectors.resize(num_selectors); if (!sym_codec.init(pSelectors_data, selectors_data_size)) { @@ -12334,50 +17007,8 @@ namespace basist if (used_global_selector_cb) { - // global selector palette - uint32_t pal_bits = sym_codec.get_bits(4); - uint32_t mod_bits = sym_codec.get_bits(4); - - basist::huffman_decoding_table mod_model; - if (mod_bits) - { - if (!sym_codec.read_huffman_table(mod_model)) - { - BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::decode_palettes: fail 6\n"); - return false; - } - if (!mod_model.is_valid()) - { - BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::decode_palettes: fail 6a\n"); - return false; - } - } - - for (uint32_t i = 0; i < num_selectors; i++) - { - uint32_t pal_index = 0; - if (pal_bits) - pal_index = sym_codec.get_bits(pal_bits); - - uint32_t mod_index = 0; - if (mod_bits) - mod_index = sym_codec.decode_huffman(mod_model); - - if (pal_index >= m_pGlobal_sel_codebook->size()) - { - BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::decode_palettes: fail 7z\n"); - return false; - } - - const etc1_selector_palette_entry e(m_pGlobal_sel_codebook->get_entry(pal_index, etc1_global_palette_entry_modifier(mod_index))); - - // TODO: Optimize this - for (uint32_t y = 0; y < 4; y++) - for (uint32_t x = 0; x < 4; x++) - m_selectors[i].set_selector(x, y, e[x + y * 4]); - - m_selectors[i].init_flags(); - } + BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::decode_palettes: global selector codebooks are unsupported\n"); + return false; } else { @@ -12385,146 +17016,70 @@ namespace basist if (used_hybrid_selector_cb) { - const uint32_t pal_bits = sym_codec.get_bits(4); - const uint32_t mod_bits = sym_codec.get_bits(4); + BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::decode_palettes: hybrid global selector codebooks are unsupported\n"); + return false; + } + + const bool used_raw_encoding = (sym_codec.get_bits(1) == 1); - basist::huffman_decoding_table uses_global_cb_bitflags_model; - if (!sym_codec.read_huffman_table(uses_global_cb_bitflags_model)) + if (used_raw_encoding) + { + for (uint32_t i = 0; i < num_selectors; i++) { - BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::decode_palettes: fail 7\n"); - return false; - } - if (!uses_global_cb_bitflags_model.is_valid()) - { - BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::decode_palettes: fail 7a\n"); - return false; - } - - basist::huffman_decoding_table global_mod_indices_model; - if (mod_bits) - { - if (!sym_codec.read_huffman_table(global_mod_indices_model)) + for (uint32_t j = 0; j < 4; j++) { - BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::decode_palettes: fail 8\n"); - return false; - } - if (!global_mod_indices_model.is_valid()) - { - BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::decode_palettes: fail 8a\n"); - return false; - } - } + uint32_t cur_byte = sym_codec.get_bits(8); - uint32_t cur_uses_global_cb_bitflags = 0; - uint32_t uses_global_cb_bitflags_remaining = 0; - - for (uint32_t q = 0; q < num_selectors; q++) - { - if (!uses_global_cb_bitflags_remaining) - { - cur_uses_global_cb_bitflags = sym_codec.decode_huffman(uses_global_cb_bitflags_model); - - uses_global_cb_bitflags_remaining = 8; - } - uses_global_cb_bitflags_remaining--; - - const bool used_global_cb_flag = (cur_uses_global_cb_bitflags & 1) != 0; - cur_uses_global_cb_bitflags >>= 1; - - if (used_global_cb_flag) - { - const uint32_t pal_index = pal_bits ? sym_codec.get_bits(pal_bits) : 0; - const uint32_t mod_index = mod_bits ? sym_codec.decode_huffman(global_mod_indices_model) : 0; - - if (pal_index >= m_pGlobal_sel_codebook->size()) - { - BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::decode_palettes: fail 8b\n"); - return false; - } - - const etc1_selector_palette_entry e(m_pGlobal_sel_codebook->get_entry(pal_index, etc1_global_palette_entry_modifier(mod_index))); - - for (uint32_t y = 0; y < 4; y++) - for (uint32_t x = 0; x < 4; x++) - m_selectors[q].set_selector(x, y, e[x + y * 4]); - } - else - { - for (uint32_t j = 0; j < 4; j++) - { - uint32_t cur_byte = sym_codec.get_bits(8); - - for (uint32_t k = 0; k < 4; k++) - m_selectors[q].set_selector(k, j, (cur_byte >> (k * 2)) & 3); - } + for (uint32_t k = 0; k < 4; k++) + m_local_selectors[i].set_selector(k, j, (cur_byte >> (k * 2)) & 3); } - m_selectors[q].init_flags(); + m_local_selectors[i].init_flags(); } } else { - const bool used_raw_encoding = (sym_codec.get_bits(1) == 1); - - if (used_raw_encoding) + if (!sym_codec.read_huffman_table(delta_selector_pal_model)) { - for (uint32_t i = 0; i < num_selectors; i++) + BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::decode_palettes: fail 10\n"); + return false; + } + + if ((num_selectors > 1) && (!delta_selector_pal_model.is_valid())) + { + BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::decode_palettes: fail 10a\n"); + return false; + } + + uint8_t prev_bytes[4] = { 0, 0, 0, 0 }; + + for (uint32_t i = 0; i < num_selectors; i++) + { + if (!i) { for (uint32_t j = 0; j < 4; j++) { uint32_t cur_byte = sym_codec.get_bits(8); - - for (uint32_t k = 0; k < 4; k++) - m_selectors[i].set_selector(k, j, (cur_byte >> (k * 2)) & 3); - } - - m_selectors[i].init_flags(); - } - } - else - { - if (!sym_codec.read_huffman_table(delta_selector_pal_model)) - { - BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::decode_palettes: fail 10\n"); - return false; - } - - if ((num_selectors > 1) && (!delta_selector_pal_model.is_valid())) - { - BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::decode_palettes: fail 10a\n"); - return false; - } - - uint8_t prev_bytes[4] = { 0, 0, 0, 0 }; - - for (uint32_t i = 0; i < num_selectors; i++) - { - if (!i) - { - for (uint32_t j = 0; j < 4; j++) - { - uint32_t cur_byte = sym_codec.get_bits(8); - prev_bytes[j] = static_cast(cur_byte); - - for (uint32_t k = 0; k < 4; k++) - m_selectors[i].set_selector(k, j, (cur_byte >> (k * 2)) & 3); - } - m_selectors[i].init_flags(); - continue; - } - - for (uint32_t j = 0; j < 4; j++) - { - int delta_byte = sym_codec.decode_huffman(delta_selector_pal_model); - - uint32_t cur_byte = delta_byte ^ prev_bytes[j]; prev_bytes[j] = static_cast(cur_byte); for (uint32_t k = 0; k < 4; k++) - m_selectors[i].set_selector(k, j, (cur_byte >> (k * 2)) & 3); + m_local_selectors[i].set_selector(k, j, (cur_byte >> (k * 2)) & 3); } - m_selectors[i].init_flags(); + m_local_selectors[i].init_flags(); + continue; } + + for (uint32_t j = 0; j < 4; j++) + { + int delta_byte = sym_codec.decode_huffman(delta_selector_pal_model); + + uint32_t cur_byte = delta_byte ^ prev_bytes[j]; + prev_bytes[j] = static_cast(cur_byte); + + for (uint32_t k = 0; k < 4; k++) + m_local_selectors[i].set_selector(k, j, (cur_byte >> (k * 2)) & 3); + } + m_local_selectors[i].init_flags(); } } } @@ -12592,6 +17147,12 @@ namespace basist } m_selector_history_buf_size = sym_codec.get_bits(13); + // Check for bogus values. + if (!m_selector_history_buf_size) + { + BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::decode_tables: fail 5\n"); + return false; + } sym_codec.stop(); @@ -12599,7 +17160,7 @@ namespace basist } bool basisu_lowlevel_etc1s_transcoder::transcode_slice(void* pDst_blocks, uint32_t num_blocks_x, uint32_t num_blocks_y, const uint8_t* pImage_data, uint32_t image_data_size, block_format fmt, - uint32_t output_block_or_pixel_stride_in_bytes, bool bc1_allow_threecolor_blocks, const basis_file_header& header, const basis_slice_desc& slice_desc, uint32_t output_row_pitch_in_blocks_or_pixels, + uint32_t output_block_or_pixel_stride_in_bytes, bool bc1_allow_threecolor_blocks, const bool is_video, const bool is_alpha_slice, const uint32_t level_index, const uint32_t orig_width, const uint32_t orig_height, uint32_t output_row_pitch_in_blocks_or_pixels, basisu_transcoder_state* pState, bool transcode_alpha, void *pAlpha_blocks, uint32_t output_rows_in_pixels) { // 'pDst_blocks' unused when disabling *all* hardware transcode options @@ -12609,20 +17170,26 @@ namespace basist BASISU_NOTE_UNUSED(transcode_alpha); BASISU_NOTE_UNUSED(pAlpha_blocks); + assert(g_transcoder_initialized); + if (!g_transcoder_initialized) + { + BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::transcode_slice: Transcoder not globally initialized.\n"); + return false; + } + if (!pState) pState = &m_def_state; - const bool is_video = (header.m_tex_type == cBASISTexTypeVideoFrames); const uint32_t total_blocks = num_blocks_x * num_blocks_y; if (!output_row_pitch_in_blocks_or_pixels) { if (basis_block_format_is_uncompressed(fmt)) - output_row_pitch_in_blocks_or_pixels = slice_desc.m_orig_width; + output_row_pitch_in_blocks_or_pixels = orig_width; else { if (fmt == block_format::cFXT1_RGB) - output_row_pitch_in_blocks_or_pixels = (slice_desc.m_orig_width + 7) / 8; + output_row_pitch_in_blocks_or_pixels = (orig_width + 7) / 8; else output_row_pitch_in_blocks_or_pixels = num_blocks_x; } @@ -12631,15 +17198,15 @@ namespace basist if (basis_block_format_is_uncompressed(fmt)) { if (!output_rows_in_pixels) - output_rows_in_pixels = slice_desc.m_orig_height; + output_rows_in_pixels = orig_height; } - std::vector* pPrev_frame_indices = nullptr; + basisu::vector* pPrev_frame_indices = nullptr; if (is_video) { // TODO: Add check to make sure the caller hasn't tried skipping past p-frames - const bool alpha_flag = (slice_desc.m_flags & cSliceDescFlagsHasAlpha) != 0; - const uint32_t level_index = slice_desc.m_level_index; + //const bool alpha_flag = (slice_desc.m_flags & cSliceDescFlagsHasAlpha) != 0; + //const uint32_t level_index = slice_desc.m_level_index; if (level_index >= basisu_transcoder_state::cMaxPrevFrameLevels) { @@ -12647,7 +17214,7 @@ namespace basist return false; } - pPrev_frame_indices = &pState->m_prev_frame_indices[alpha_flag][level_index]; + pPrev_frame_indices = &pState->m_prev_frame_indices[is_alpha_slice][level_index]; if (pPrev_frame_indices->size() < total_blocks) pPrev_frame_indices->resize(total_blocks); } @@ -12661,15 +17228,16 @@ namespace basist } approx_move_to_front selector_history_buf(m_selector_history_buf_size); - - const uint32_t SELECTOR_HISTORY_BUF_FIRST_SYMBOL_INDEX = (uint32_t)m_selectors.size(); - const uint32_t SELECTOR_HISTORY_BUF_RLE_SYMBOL_INDEX = m_selector_history_buf_size + SELECTOR_HISTORY_BUF_FIRST_SYMBOL_INDEX; + uint32_t cur_selector_rle_count = 0; decoder_etc_block block; memset(&block, 0, sizeof(block)); + + //block.set_flip_bit(true); + // Setting the flip bit to false to be compatible with the Khronos KDFS. + block.set_flip_bit(false); - block.set_flip_bit(true); block.set_diff_bit(true); void* pPVRTC_work_mem = nullptr; @@ -12695,6 +17263,16 @@ namespace basist int prev_endpoint_pred_sym = 0; int endpoint_pred_repeat_count = 0; uint32_t prev_endpoint_index = 0; + const endpoint_vec& endpoints = m_pGlobal_codebook ? m_pGlobal_codebook->m_local_endpoints : m_local_endpoints; + const selector_vec& selectors = m_pGlobal_codebook ? m_pGlobal_codebook->m_local_selectors : m_local_selectors; + if (!endpoints.size() || !selectors.size()) + { + BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::transcode_slice: global codebooks must be unpacked first\n"); + return false; + } + + const uint32_t SELECTOR_HISTORY_BUF_FIRST_SYMBOL_INDEX = (uint32_t)selectors.size(); + const uint32_t SELECTOR_HISTORY_BUF_RLE_SYMBOL_INDEX = m_selector_history_buf_size + SELECTOR_HISTORY_BUF_FIRST_SYMBOL_INDEX; for (uint32_t block_y = 0; block_y < num_blocks_y; block_y++) { @@ -12796,8 +17374,8 @@ namespace basist const uint32_t delta_sym = sym_codec.decode_huffman(m_delta_endpoint_model); endpoint_index = delta_sym + prev_endpoint_index; - if (endpoint_index >= m_endpoints.size()) - endpoint_index -= (int)m_endpoints.size(); + if (endpoint_index >= endpoints.size()) + endpoint_index -= (int)endpoints.size(); } pState->m_block_endpoint_preds[cur_block_endpoint_pred_array][block_x].m_endpoint_index = (uint16_t)endpoint_index; @@ -12812,7 +17390,7 @@ namespace basist { cur_selector_rle_count--; - selector_sym = (int)m_selectors.size(); + selector_sym = (int)selectors.size(); } else { @@ -12836,17 +17414,17 @@ namespace basist return false; } - selector_sym = (int)m_selectors.size(); + selector_sym = (int)selectors.size(); cur_selector_rle_count--; } } - if (selector_sym >= (int)m_selectors.size()) + if (selector_sym >= (int)selectors.size()) { assert(m_selector_history_buf_size > 0); - int history_buf_index = selector_sym - (int)m_selectors.size(); + int history_buf_index = selector_sym - (int)selectors.size(); if (history_buf_index >= (int)selector_history_buf.size()) { @@ -12871,7 +17449,7 @@ namespace basist } } - if ((endpoint_index >= m_endpoints.size()) || (selector_index >= m_selectors.size())) + if ((endpoint_index >= endpoints.size()) || (selector_index >= selectors.size())) { // The file is corrupted or we've got a bug. BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::transcode_slice: invalid datastream (5)\n"); @@ -12895,8 +17473,8 @@ namespace basist } #endif - const endpoint* pEndpoints = &m_endpoints[endpoint_index]; - const selector* pSelector = &m_selectors[selector_index]; + const endpoint* pEndpoints = &endpoints[endpoint_index]; + const selector* pSelector = &selectors[selector_index]; switch (fmt) { @@ -13000,8 +17578,8 @@ namespace basist const uint16_t* pAlpha_block = reinterpret_cast(static_cast(pAlpha_blocks) + (block_x + block_y * num_blocks_x) * sizeof(uint32_t)); - const endpoint* pAlpha_endpoints = &m_endpoints[pAlpha_block[0]]; - const selector* pAlpha_selector = &m_selectors[pAlpha_block[1]]; + const endpoint* pAlpha_endpoints = &endpoints[pAlpha_block[0]]; + const selector* pAlpha_selector = &selectors[pAlpha_block[1]]; const color32& alpha_base_color = pAlpha_endpoints->m_color5; const uint32_t alpha_inten_table = pAlpha_endpoints->m_inten5; @@ -13060,7 +17638,7 @@ namespace basist { #if BASISD_SUPPORT_ASTC void* pDst_block = static_cast(pDst_blocks) + (block_x + block_y * output_row_pitch_in_blocks_or_pixels) * output_block_or_pixel_stride_in_bytes; - convert_etc1s_to_astc_4x4(pDst_block, pEndpoints, pSelector, transcode_alpha, &m_endpoints[0], &m_selectors[0]); + convert_etc1s_to_astc_4x4(pDst_block, pEndpoints, pSelector, transcode_alpha, &endpoints[0], &selectors[0]); #else assert(0); #endif @@ -13106,7 +17684,7 @@ namespace basist void* pDst_block = static_cast(pDst_blocks) + (block_x + block_y * output_row_pitch_in_blocks_or_pixels) * output_block_or_pixel_stride_in_bytes; - convert_etc1s_to_pvrtc2_rgba(pDst_block, pEndpoints, pSelector, &m_endpoints[0], &m_selectors[0]); + convert_etc1s_to_pvrtc2_rgba(pDst_block, pEndpoints, pSelector, &endpoints[0], &selectors[0]); #endif break; } @@ -13234,7 +17812,7 @@ namespace basist for (uint32_t i = 0; i < 4; i++) { packed_colors[i] = static_cast((mul_8(colors[i].r, 31) << 11) | (mul_8(colors[i].g, 63) << 5) | mul_8(colors[i].b, 31)); - if (IS_BIG_ENDIAN) + if (BASISD_IS_BIG_ENDIAN) packed_colors[i] = byteswap_uint16(packed_colors[i]); } } @@ -13243,7 +17821,7 @@ namespace basist for (uint32_t i = 0; i < 4; i++) { packed_colors[i] = static_cast((mul_8(colors[i].b, 31) << 11) | (mul_8(colors[i].g, 63) << 5) | mul_8(colors[i].r, 31)); - if (IS_BIG_ENDIAN) + if (BASISD_IS_BIG_ENDIAN) packed_colors[i] = byteswap_uint16(packed_colors[i]); } } @@ -13284,12 +17862,12 @@ namespace basist for (uint32_t x = 0; x < max_x; x++) { uint16_t cur = reinterpret_cast(pDst_pixels)[x]; - if (IS_BIG_ENDIAN) + if (BASISD_IS_BIG_ENDIAN) cur = byteswap_uint16(cur); cur = (cur & 0xF) | packed_colors[(s >> (x * 2)) & 3]; - if (IS_BIG_ENDIAN) + if (BASISD_IS_BIG_ENDIAN) cur = byteswap_uint16(cur); reinterpret_cast(pDst_pixels)[x] = cur; @@ -13315,7 +17893,7 @@ namespace basist for (uint32_t i = 0; i < 4; i++) { packed_colors[i] = static_cast((mul_8(colors[i].r, 15) << 12) | (mul_8(colors[i].g, 15) << 8) | (mul_8(colors[i].b, 15) << 4) | 0xF); - if (IS_BIG_ENDIAN) + if (BASISD_IS_BIG_ENDIAN) packed_colors[i] = byteswap_uint16(packed_colors[i]); } @@ -13346,7 +17924,7 @@ namespace basist for (uint32_t i = 0; i < 4; i++) { packed_colors[i] = mul_8(colors[i].g, 15); - if (IS_BIG_ENDIAN) + if (BASISD_IS_BIG_ENDIAN) packed_colors[i] = byteswap_uint16(packed_colors[i]); } @@ -13398,7 +17976,7 @@ namespace basist if (fmt == block_format::cPVRTC1_4_RGB) fixup_pvrtc1_4_modulation_rgb((decoder_etc_block*)pPVRTC_work_mem, pPVRTC_endpoints, pDst_blocks, num_blocks_x, num_blocks_y); else if (fmt == block_format::cPVRTC1_4_RGBA) - fixup_pvrtc1_4_modulation_rgba((decoder_etc_block*)pPVRTC_work_mem, pPVRTC_endpoints, pDst_blocks, num_blocks_x, num_blocks_y, pAlpha_blocks, &m_endpoints[0], &m_selectors[0]); + fixup_pvrtc1_4_modulation_rgba((decoder_etc_block*)pPVRTC_work_mem, pPVRTC_endpoints, pDst_blocks, num_blocks_x, num_blocks_y, pAlpha_blocks, &endpoints[0], &selectors[0]); #endif // BASISD_SUPPORT_PVRTC1 if (pPVRTC_work_mem) @@ -13406,29 +17984,678 @@ namespace basist return true; } + + bool basis_validate_output_buffer_size(transcoder_texture_format target_format, + uint32_t output_blocks_buf_size_in_blocks_or_pixels, + uint32_t orig_width, uint32_t orig_height, + uint32_t output_row_pitch_in_blocks_or_pixels, + uint32_t output_rows_in_pixels, + uint32_t total_slice_blocks) + { + if (basis_transcoder_format_is_uncompressed(target_format)) + { + // Assume the output buffer is orig_width by orig_height + if (!output_row_pitch_in_blocks_or_pixels) + output_row_pitch_in_blocks_or_pixels = orig_width; + + if (!output_rows_in_pixels) + output_rows_in_pixels = orig_height; + + // Now make sure the output buffer is large enough, or we'll overwrite memory. + if (output_blocks_buf_size_in_blocks_or_pixels < (output_rows_in_pixels * output_row_pitch_in_blocks_or_pixels)) + { + BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::transcode_image: output_blocks_buf_size_in_blocks_or_pixels < (output_rows_in_pixels * output_row_pitch_in_blocks_or_pixels)\n"); + return false; + } + } + else if (target_format == transcoder_texture_format::cTFFXT1_RGB) + { + const uint32_t num_blocks_fxt1_x = (orig_width + 7) / 8; + const uint32_t num_blocks_fxt1_y = (orig_height + 3) / 4; + const uint32_t total_blocks_fxt1 = num_blocks_fxt1_x * num_blocks_fxt1_y; + + if (output_blocks_buf_size_in_blocks_or_pixels < total_blocks_fxt1) + { + BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::transcode_image: output_blocks_buf_size_in_blocks_or_pixels < total_blocks_fxt1\n"); + return false; + } + } + else + { + if (output_blocks_buf_size_in_blocks_or_pixels < total_slice_blocks) + { + BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::transcode_image: output_blocks_buf_size_in_blocks_or_pixels < transcode_image\n"); + return false; + } + } + return true; + } + + bool basisu_lowlevel_etc1s_transcoder::transcode_image( + transcoder_texture_format target_format, + void* pOutput_blocks, uint32_t output_blocks_buf_size_in_blocks_or_pixels, + const uint8_t* pCompressed_data, uint32_t compressed_data_length, + uint32_t num_blocks_x, uint32_t num_blocks_y, uint32_t orig_width, uint32_t orig_height, uint32_t level_index, + uint32_t rgb_offset, uint32_t rgb_length, uint32_t alpha_offset, uint32_t alpha_length, + uint32_t decode_flags, + bool basis_file_has_alpha_slices, + bool is_video, + uint32_t output_row_pitch_in_blocks_or_pixels, + basisu_transcoder_state* pState, + uint32_t output_rows_in_pixels) + { + if (((uint64_t)rgb_offset + rgb_length) > (uint64_t)compressed_data_length) + { + BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::transcode_image: source data buffer too small (color)\n"); + return false; + } + + if (alpha_length) + { + if (((uint64_t)alpha_offset + alpha_length) > (uint64_t)compressed_data_length) + { + BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::transcode_image: source data buffer too small (alpha)\n"); + return false; + } + } + else + { + assert(!basis_file_has_alpha_slices); + } + + if ((target_format == transcoder_texture_format::cTFPVRTC1_4_RGB) || (target_format == transcoder_texture_format::cTFPVRTC1_4_RGBA)) + { + if ((!basisu::is_pow2(num_blocks_x * 4)) || (!basisu::is_pow2(num_blocks_y * 4))) + { + // PVRTC1 only supports power of 2 dimensions + BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::transcode_image: PVRTC1 only supports power of 2 dimensions\n"); + return false; + } + } + + if ((target_format == transcoder_texture_format::cTFPVRTC1_4_RGBA) && (!basis_file_has_alpha_slices)) + { + // Switch to PVRTC1 RGB if the input doesn't have alpha. + target_format = transcoder_texture_format::cTFPVRTC1_4_RGB; + } + + const bool transcode_alpha_data_to_opaque_formats = (decode_flags & cDecodeFlagsTranscodeAlphaDataToOpaqueFormats) != 0; + const uint32_t bytes_per_block_or_pixel = basis_get_bytes_per_block_or_pixel(target_format); + const uint32_t total_slice_blocks = num_blocks_x * num_blocks_y; + + if (!basis_validate_output_buffer_size(target_format, output_blocks_buf_size_in_blocks_or_pixels, orig_width, orig_height, output_row_pitch_in_blocks_or_pixels, output_rows_in_pixels, total_slice_blocks)) + { + BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::transcode_image: output buffer size too small\n"); + return false; + } + + bool status = false; + + const uint8_t* pData = pCompressed_data + rgb_offset; + uint32_t data_len = rgb_length; + bool is_alpha_slice = false; + + // If the caller wants us to transcode the mip level's alpha data, then use the next slice. + if ((basis_file_has_alpha_slices) && (transcode_alpha_data_to_opaque_formats)) + { + pData = pCompressed_data + alpha_offset; + data_len = alpha_length; + is_alpha_slice = true; + } + + switch (target_format) + { + case transcoder_texture_format::cTFETC1_RGB: + { + //status = transcode_slice(pData, data_size, slice_index_to_decode, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cETC1, bytes_per_block_or_pixel, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); + status = transcode_slice(pOutput_blocks, num_blocks_x, num_blocks_y, pData, data_len, block_format::cETC1, bytes_per_block_or_pixel, false, is_video, is_alpha_slice, level_index, orig_width, orig_height, output_row_pitch_in_blocks_or_pixels, pState, false, nullptr, output_rows_in_pixels); + + if (!status) + { + BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::transcode_image: transcode_slice() to ETC1 failed\n"); + } + break; + } + case transcoder_texture_format::cTFBC1_RGB: + { +#if !BASISD_SUPPORT_DXT1 + BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::transcode_image: BC1/DXT1 unsupported\n"); + return false; +#else + // status = transcode_slice(pData, data_size, slice_index_to_decode, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cBC1, bytes_per_block_or_pixel, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); + status = transcode_slice(pOutput_blocks, num_blocks_x, num_blocks_y, pData, data_len, block_format::cBC1, bytes_per_block_or_pixel, true, is_video, is_alpha_slice, level_index, orig_width, orig_height, output_row_pitch_in_blocks_or_pixels, pState, false, nullptr, output_rows_in_pixels); + if (!status) + { + BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::transcode_image: transcode_slice() to BC1 failed\n"); + } + break; +#endif + } + case transcoder_texture_format::cTFBC4_R: + { +#if !BASISD_SUPPORT_DXT5A + BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::transcode_image: BC4/DXT5A unsupported\n"); + return false; +#else + //status = transcode_slice(pData, data_size, slice_index_to_decode, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cBC4, bytes_per_block_or_pixel, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); + status = transcode_slice(pOutput_blocks, num_blocks_x, num_blocks_y, pData, data_len, block_format::cBC4, bytes_per_block_or_pixel, false, is_video, is_alpha_slice, level_index, orig_width, orig_height, output_row_pitch_in_blocks_or_pixels, pState, false, nullptr, output_rows_in_pixels); + if (!status) + { + BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::transcode_image: transcode_slice() to BC4 failed\n"); + } + break; +#endif + } + case transcoder_texture_format::cTFPVRTC1_4_RGB: + { +#if !BASISD_SUPPORT_PVRTC1 + BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::transcode_image: PVRTC1 4 unsupported\n"); + return false; +#else + // output_row_pitch_in_blocks_or_pixels is actually ignored because we're transcoding to PVRTC1. (Print a dev warning if it's != 0?) + //status = transcode_slice(pData, data_size, slice_index_to_decode, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cPVRTC1_4_RGB, bytes_per_block_or_pixel, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); + status = transcode_slice(pOutput_blocks, num_blocks_x, num_blocks_y, pData, data_len, block_format::cPVRTC1_4_RGB, bytes_per_block_or_pixel, false, is_video, is_alpha_slice, level_index, orig_width, orig_height, output_row_pitch_in_blocks_or_pixels, pState, false, nullptr, output_rows_in_pixels); + if (!status) + { + BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::transcode_image: transcode_slice() to PVRTC1 4 RGB failed\n"); + } + break; +#endif + } + case transcoder_texture_format::cTFPVRTC1_4_RGBA: + { +#if !BASISD_SUPPORT_PVRTC1 + BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::transcode_image: PVRTC1 4 unsupported\n"); + return false; +#else + assert(basis_file_has_alpha_slices); + assert(alpha_length); + + // Temp buffer to hold alpha block endpoint/selector indices + basisu::vector temp_block_indices(total_slice_blocks); + + // First transcode alpha data to temp buffer + //status = transcode_slice(pData, data_size, slice_index + 1, &temp_block_indices[0], total_slice_blocks, block_format::cIndices, sizeof(uint32_t), decode_flags, pSlice_descs[slice_index].m_num_blocks_x, pState); + status = transcode_slice(&temp_block_indices[0], num_blocks_x, num_blocks_y, pCompressed_data + alpha_offset, alpha_length, block_format::cIndices, sizeof(uint32_t), false, is_video, true, level_index, orig_width, orig_height, num_blocks_x, pState, false, nullptr, 0); + if (!status) + { + BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::transcode_image: transcode_slice() to PVRTC1 4 RGBA failed (0)\n"); + } + else + { + // output_row_pitch_in_blocks_or_pixels is actually ignored because we're transcoding to PVRTC1. (Print a dev warning if it's != 0?) + //status = transcode_slice(pData, data_size, slice_index, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cPVRTC1_4_RGBA, bytes_per_block_or_pixel, decode_flags, output_row_pitch_in_blocks_or_pixels, pState, &temp_block_indices[0]); + status = transcode_slice(pOutput_blocks, num_blocks_x, num_blocks_y, pCompressed_data + rgb_offset, rgb_length, block_format::cPVRTC1_4_RGBA, bytes_per_block_or_pixel, false, is_video, false, level_index, orig_width, orig_height, output_row_pitch_in_blocks_or_pixels, pState, false, &temp_block_indices[0], 0); + if (!status) + { + BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::transcode_image: transcode_slice() to PVRTC1 4 RGBA failed (1)\n"); + } + } + + break; +#endif + } + case transcoder_texture_format::cTFBC7_RGBA: + case transcoder_texture_format::cTFBC7_ALT: + { +#if !BASISD_SUPPORT_BC7_MODE5 + BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::transcode_image: BC7 unsupported\n"); + return false; +#else + assert(bytes_per_block_or_pixel == 16); + // We used to support transcoding just alpha to BC7 - but is that useful at all? + + // First transcode the color slice. The cBC7_M5_COLOR transcoder will output opaque mode 5 blocks. + //status = transcode_slice(pData, data_size, slice_index, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cBC7_M5_COLOR, 16, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); + status = transcode_slice(pOutput_blocks, num_blocks_x, num_blocks_y, pCompressed_data + rgb_offset, rgb_length, block_format::cBC7_M5_COLOR, bytes_per_block_or_pixel, false, is_video, false, level_index, orig_width, orig_height, output_row_pitch_in_blocks_or_pixels, pState, false, nullptr, output_rows_in_pixels); + + if ((status) && (basis_file_has_alpha_slices)) + { + // Now transcode the alpha slice. The cBC7_M5_ALPHA transcoder will now change the opaque mode 5 blocks to blocks with alpha. + //status = transcode_slice(pData, data_size, slice_index + 1, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cBC7_M5_ALPHA, 16, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); + status = transcode_slice(pOutput_blocks, num_blocks_x, num_blocks_y, pCompressed_data + alpha_offset, alpha_length, block_format::cBC7_M5_ALPHA, bytes_per_block_or_pixel, false, is_video, true, level_index, orig_width, orig_height, output_row_pitch_in_blocks_or_pixels, pState, false, nullptr, output_rows_in_pixels); + } + + if (!status) + { + BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::transcode_image: transcode_slice() to BC7 failed (0)\n"); + } + + break; +#endif + } + case transcoder_texture_format::cTFETC2_RGBA: + { +#if !BASISD_SUPPORT_ETC2_EAC_A8 + BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::transcode_image: ETC2 EAC A8 unsupported\n"); + return false; +#else + assert(bytes_per_block_or_pixel == 16); + + if (basis_file_has_alpha_slices) + { + // First decode the alpha data + //status = transcode_slice(pData, data_size, slice_index + 1, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cETC2_EAC_A8, 16, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); + status = transcode_slice(pOutput_blocks, num_blocks_x, num_blocks_y, pCompressed_data + alpha_offset, alpha_length, block_format::cETC2_EAC_A8, bytes_per_block_or_pixel, false, is_video, true, level_index, orig_width, orig_height, output_row_pitch_in_blocks_or_pixels, pState, false, nullptr, output_rows_in_pixels); + } + else + { + //write_opaque_alpha_blocks(pSlice_descs[slice_index].m_num_blocks_x, pSlice_descs[slice_index].m_num_blocks_y, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cETC2_EAC_A8, 16, output_row_pitch_in_blocks_or_pixels); + basisu_transcoder::write_opaque_alpha_blocks(num_blocks_x, num_blocks_y, pOutput_blocks, block_format::cETC2_EAC_A8, 16, output_row_pitch_in_blocks_or_pixels); + status = true; + } + + if (status) + { + // Now decode the color data + //status = transcode_slice(pData, data_size, slice_index, (uint8_t*)pOutput_blocks + 8, output_blocks_buf_size_in_blocks_or_pixels, block_format::cETC1, 16, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); + status = transcode_slice((uint8_t *)pOutput_blocks + 8, num_blocks_x, num_blocks_y, pCompressed_data + rgb_offset, rgb_length, block_format::cETC1, bytes_per_block_or_pixel, false, is_video, false, level_index, orig_width, orig_height, output_row_pitch_in_blocks_or_pixels, pState, false, nullptr, output_rows_in_pixels); + if (!status) + { + BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::transcode_image: transcode_slice() to ETC2 RGB failed\n"); + } + } + else + { + BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::transcode_image: transcode_slice() to ETC2 A failed\n"); + } + break; +#endif + } + case transcoder_texture_format::cTFBC3_RGBA: + { +#if !BASISD_SUPPORT_DXT1 + BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::transcode_image: DXT1 unsupported\n"); + return false; +#elif !BASISD_SUPPORT_DXT5A + BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::transcode_image: DXT5A unsupported\n"); + return false; +#else + assert(bytes_per_block_or_pixel == 16); + + // First decode the alpha data + if (basis_file_has_alpha_slices) + { + //status = transcode_slice(pData, data_size, slice_index + 1, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cBC4, 16, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); + status = transcode_slice(pOutput_blocks, num_blocks_x, num_blocks_y, pCompressed_data + alpha_offset, alpha_length, block_format::cBC4, bytes_per_block_or_pixel, false, is_video, true, level_index, orig_width, orig_height, output_row_pitch_in_blocks_or_pixels, pState, false, nullptr, output_rows_in_pixels); + } + else + { + basisu_transcoder::write_opaque_alpha_blocks(num_blocks_x, num_blocks_y, pOutput_blocks, block_format::cBC4, 16, output_row_pitch_in_blocks_or_pixels); + status = true; + } + + if (status) + { + // Now decode the color data. Forbid 3 color blocks, which aren't allowed in BC3. + //status = transcode_slice(pData, data_size, slice_index, (uint8_t*)pOutput_blocks + 8, output_blocks_buf_size_in_blocks_or_pixels, block_format::cBC1, 16, decode_flags | cDecodeFlagsBC1ForbidThreeColorBlocks, output_row_pitch_in_blocks_or_pixels, pState); + status = transcode_slice((uint8_t *)pOutput_blocks + 8, num_blocks_x, num_blocks_y, pCompressed_data + rgb_offset, rgb_length, block_format::cBC1, bytes_per_block_or_pixel, false, is_video, false, level_index, orig_width, orig_height, output_row_pitch_in_blocks_or_pixels, pState, false, nullptr, output_rows_in_pixels); + if (!status) + { + BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::transcode_image: transcode_slice() to BC3 RGB failed\n"); + } + } + else + { + BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::transcode_image: transcode_slice() to BC3 A failed\n"); + } + + break; +#endif + } + case transcoder_texture_format::cTFBC5_RG: + { +#if !BASISD_SUPPORT_DXT5A + BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::transcode_image: DXT5A unsupported\n"); + return false; +#else + assert(bytes_per_block_or_pixel == 16); + + //bool transcode_slice(void* pDst_blocks, uint32_t num_blocks_x, uint32_t num_blocks_y, const uint8_t* pImage_data, uint32_t image_data_size, block_format fmt, + // uint32_t output_block_or_pixel_stride_in_bytes, bool bc1_allow_threecolor_blocks, const bool is_video, const bool is_alpha_slice, const uint32_t level_index, const uint32_t orig_width, const uint32_t orig_height, uint32_t output_row_pitch_in_blocks_or_pixels = 0, + // basisu_transcoder_state* pState = nullptr, bool astc_transcode_alpha = false, void* pAlpha_blocks = nullptr, uint32_t output_rows_in_pixels = 0); + + // Decode the R data (actually the green channel of the color data slice in the basis file) + //status = transcode_slice(pData, data_size, slice_index, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cBC4, 16, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); + status = transcode_slice(pOutput_blocks, num_blocks_x, num_blocks_y, pCompressed_data + rgb_offset, rgb_length, block_format::cBC4, bytes_per_block_or_pixel, false, is_video, false, level_index, orig_width, orig_height, output_row_pitch_in_blocks_or_pixels, pState, false, nullptr, output_rows_in_pixels); + if (status) + { + if (basis_file_has_alpha_slices) + { + // Decode the G data (actually the green channel of the alpha data slice in the basis file) + //status = transcode_slice(pData, data_size, slice_index + 1, (uint8_t*)pOutput_blocks + 8, output_blocks_buf_size_in_blocks_or_pixels, block_format::cBC4, 16, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); + status = transcode_slice((uint8_t *)pOutput_blocks + 8, num_blocks_x, num_blocks_y, pCompressed_data + alpha_offset, alpha_length, block_format::cBC4, bytes_per_block_or_pixel, false, is_video, true, level_index, orig_width, orig_height, output_row_pitch_in_blocks_or_pixels, pState, false, nullptr, output_rows_in_pixels); + if (!status) + { + BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::transcode_image: transcode_slice() to BC5 1 failed\n"); + } + } + else + { + basisu_transcoder::write_opaque_alpha_blocks(num_blocks_x, num_blocks_y, (uint8_t*)pOutput_blocks + 8, block_format::cBC4, 16, output_row_pitch_in_blocks_or_pixels); + status = true; + } + } + else + { + BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::transcode_image: transcode_slice() to BC5 channel 0 failed\n"); + } + break; +#endif + } + case transcoder_texture_format::cTFASTC_4x4_RGBA: + { +#if !BASISD_SUPPORT_ASTC + BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::transcode_image: ASTC unsupported\n"); + return false; +#else + assert(bytes_per_block_or_pixel == 16); + + if (basis_file_has_alpha_slices) + { + // First decode the alpha data to the output (we're using the output texture as a temp buffer here). + //status = transcode_slice(pData, data_size, slice_index + 1, (uint8_t*)pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cIndices, 16, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); + status = transcode_slice(pOutput_blocks, num_blocks_x, num_blocks_y, pCompressed_data + alpha_offset, alpha_length, block_format::cIndices, bytes_per_block_or_pixel, false, is_video, true, level_index, orig_width, orig_height, output_row_pitch_in_blocks_or_pixels, pState, false, nullptr, output_rows_in_pixels); + if (status) + { + // Now decode the color data and transcode to ASTC. The transcoder function will read the alpha selector data from the output texture as it converts and + // transcode both the alpha and color data at the same time to ASTC. + //status = transcode_slice(pData, data_size, slice_index, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cASTC_4x4, 16, decode_flags | cDecodeFlagsOutputHasAlphaIndices, output_row_pitch_in_blocks_or_pixels, pState); + status = transcode_slice(pOutput_blocks, num_blocks_x, num_blocks_y, pCompressed_data + rgb_offset, rgb_length, block_format::cASTC_4x4, bytes_per_block_or_pixel, false, is_video, false, level_index, orig_width, orig_height, output_row_pitch_in_blocks_or_pixels, pState, true, nullptr, output_rows_in_pixels); + } + } + else + //status = transcode_slice(pData, data_size, slice_index, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cASTC_4x4, 16, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); + status = transcode_slice(pOutput_blocks, num_blocks_x, num_blocks_y, pCompressed_data + rgb_offset, rgb_length, block_format::cASTC_4x4, bytes_per_block_or_pixel, false, is_video, false, level_index, orig_width, orig_height, output_row_pitch_in_blocks_or_pixels, pState, false, nullptr, output_rows_in_pixels); + + if (!status) + { + BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::transcode_image: transcode_slice() to ASTC failed (0)\n"); + } + + break; +#endif + } + case transcoder_texture_format::cTFATC_RGB: + { +#if !BASISD_SUPPORT_ATC + BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::transcode_image: ATC unsupported\n"); + return false; +#else + //status = transcode_slice(pData, data_size, slice_index_to_decode, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cATC_RGB, bytes_per_block_or_pixel, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); + status = transcode_slice(pOutput_blocks, num_blocks_x, num_blocks_y, pData, data_len, block_format::cATC_RGB, bytes_per_block_or_pixel, false, is_video, is_alpha_slice, level_index, orig_width, orig_height, output_row_pitch_in_blocks_or_pixels, pState, false, nullptr, output_rows_in_pixels); + if (!status) + { + BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::transcode_image: transcode_slice() to ATC_RGB failed\n"); + } + break; +#endif + } + case transcoder_texture_format::cTFATC_RGBA: + { +#if !BASISD_SUPPORT_ATC + BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::transcode_image: ATC unsupported\n"); + return false; +#elif !BASISD_SUPPORT_DXT5A + BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::transcode_image: DXT5A unsupported\n"); + return false; +#else + assert(bytes_per_block_or_pixel == 16); + + // First decode the alpha data + if (basis_file_has_alpha_slices) + { + //status = transcode_slice(pData, data_size, slice_index + 1, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cBC4, 16, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); + status = transcode_slice(pOutput_blocks, num_blocks_x, num_blocks_y, pCompressed_data + alpha_offset, alpha_length, block_format::cBC4, bytes_per_block_or_pixel, false, is_video, true, level_index, orig_width, orig_height, output_row_pitch_in_blocks_or_pixels, pState, false, nullptr, output_rows_in_pixels); + } + else + { + basisu_transcoder::write_opaque_alpha_blocks(num_blocks_x, num_blocks_y, pOutput_blocks, block_format::cBC4, 16, output_row_pitch_in_blocks_or_pixels); + status = true; + } + + if (status) + { + //status = transcode_slice(pData, data_size, slice_index, (uint8_t*)pOutput_blocks + 8, output_blocks_buf_size_in_blocks_or_pixels, block_format::cATC_RGB, 16, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); + status = transcode_slice((uint8_t *)pOutput_blocks + 8, num_blocks_x, num_blocks_y, pCompressed_data + rgb_offset, rgb_length, block_format::cATC_RGB, bytes_per_block_or_pixel, false, is_video, false, level_index, orig_width, orig_height, output_row_pitch_in_blocks_or_pixels, pState, false, nullptr, output_rows_in_pixels); + if (!status) + { + BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::transcode_image: transcode_slice() to ATC RGB failed\n"); + } + } + else + { + BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::transcode_image: transcode_slice() to ATC A failed\n"); + } + break; +#endif + } + case transcoder_texture_format::cTFPVRTC2_4_RGB: + { +#if !BASISD_SUPPORT_PVRTC2 + BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::transcode_image: PVRTC2 unsupported\n"); + return false; +#else + //status = transcode_slice(pData, data_size, slice_index_to_decode, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cPVRTC2_4_RGB, bytes_per_block_or_pixel, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); + status = transcode_slice(pOutput_blocks, num_blocks_x, num_blocks_y, pData, data_len, block_format::cPVRTC2_4_RGB, bytes_per_block_or_pixel, false, is_video, is_alpha_slice, level_index, orig_width, orig_height, output_row_pitch_in_blocks_or_pixels, pState, false, nullptr, output_rows_in_pixels); + if (!status) + { + BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::transcode_image: transcode_slice() to cPVRTC2_4_RGB failed\n"); + } + break; +#endif + } + case transcoder_texture_format::cTFPVRTC2_4_RGBA: + { +#if !BASISD_SUPPORT_PVRTC2 + BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::transcode_image: PVRTC2 unsupported\n"); + return false; +#else + if (basis_file_has_alpha_slices) + { + // First decode the alpha data to the output (we're using the output texture as a temp buffer here). + //status = transcode_slice(pData, data_size, slice_index + 1, (uint8_t*)pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cIndices, bytes_per_block_or_pixel, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); + status = transcode_slice(pOutput_blocks, num_blocks_x, num_blocks_y, pCompressed_data + alpha_offset, alpha_length, block_format::cIndices, bytes_per_block_or_pixel, false, is_video, true, level_index, orig_width, orig_height, output_row_pitch_in_blocks_or_pixels, pState, false, nullptr, output_rows_in_pixels); + if (!status) + { + BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::transcode_image: transcode_slice() to failed\n"); + } + else + { + // Now decode the color data and transcode to PVRTC2 RGBA. + //status = transcode_slice(pData, data_size, slice_index, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cPVRTC2_4_RGBA, bytes_per_block_or_pixel, decode_flags | cDecodeFlagsOutputHasAlphaIndices, output_row_pitch_in_blocks_or_pixels, pState); + status = transcode_slice(pOutput_blocks, num_blocks_x, num_blocks_y, pCompressed_data + rgb_offset, rgb_length, block_format::cPVRTC2_4_RGBA, bytes_per_block_or_pixel, false, is_video, false, level_index, orig_width, orig_height, output_row_pitch_in_blocks_or_pixels, pState, true, nullptr, output_rows_in_pixels); + } + } + else + //status = transcode_slice(pData, data_size, slice_index, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cPVRTC2_4_RGB, bytes_per_block_or_pixel, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); + status = transcode_slice(pOutput_blocks, num_blocks_x, num_blocks_y, pCompressed_data + rgb_offset, rgb_length, block_format::cPVRTC2_4_RGB, bytes_per_block_or_pixel, false, is_video, false, level_index, orig_width, orig_height, output_row_pitch_in_blocks_or_pixels, pState, false, nullptr, output_rows_in_pixels); + + if (!status) + { + BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::transcode_image: transcode_slice() to cPVRTC2_4_RGBA failed\n"); + } + + break; +#endif + } + case transcoder_texture_format::cTFRGBA32: + { + // Raw 32bpp pixels, decoded in the usual raster order (NOT block order) into an image in memory. + + // First decode the alpha data + if (basis_file_has_alpha_slices) + //status = transcode_slice(pData, data_size, slice_index + 1, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cA32, sizeof(uint32_t), decode_flags, output_row_pitch_in_blocks_or_pixels, pState, nullptr, output_rows_in_pixels); + status = transcode_slice(pOutput_blocks, num_blocks_x, num_blocks_y, pCompressed_data + alpha_offset, alpha_length, block_format::cA32, sizeof(uint32_t), false, is_video, true, level_index, orig_width, orig_height, output_row_pitch_in_blocks_or_pixels, pState, false, nullptr, output_rows_in_pixels); + else + status = true; + + if (status) + { + //status = transcode_slice(pData, data_size, slice_index, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, basis_file_has_alpha_slices ? block_format::cRGB32 : block_format::cRGBA32, sizeof(uint32_t), decode_flags, output_row_pitch_in_blocks_or_pixels, pState, nullptr, output_rows_in_pixels); + status = transcode_slice(pOutput_blocks, num_blocks_x, num_blocks_y, pCompressed_data + rgb_offset, rgb_length, basis_file_has_alpha_slices ? block_format::cRGB32 : block_format::cRGBA32, sizeof(uint32_t), false, is_video, false, level_index, orig_width, orig_height, output_row_pitch_in_blocks_or_pixels, pState, false, nullptr, output_rows_in_pixels); + if (!status) + { + BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::transcode_image: transcode_slice() to RGBA32 RGB failed\n"); + } + } + else + { + BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::transcode_image: transcode_slice() to RGBA32 A failed\n"); + } + + break; + } + case transcoder_texture_format::cTFRGB565: + case transcoder_texture_format::cTFBGR565: + { + // Raw 16bpp pixels, decoded in the usual raster order (NOT block order) into an image in memory. + + //status = transcode_slice(pData, data_size, slice_index_to_decode, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, (fmt == transcoder_texture_format::cTFRGB565) ? block_format::cRGB565 : block_format::cBGR565, sizeof(uint16_t), decode_flags, output_row_pitch_in_blocks_or_pixels, pState, nullptr, output_rows_in_pixels); + status = transcode_slice(pOutput_blocks, num_blocks_x, num_blocks_y, pData, data_len, (target_format == transcoder_texture_format::cTFRGB565) ? block_format::cRGB565 : block_format::cBGR565, sizeof(uint16_t), false, is_video, is_alpha_slice, level_index, orig_width, orig_height, output_row_pitch_in_blocks_or_pixels, pState, false, nullptr, output_rows_in_pixels); + if (!status) + { + BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::transcode_image: transcode_slice() to RGB565 RGB failed\n"); + } + + break; + } + case transcoder_texture_format::cTFRGBA4444: + { + // Raw 16bpp pixels, decoded in the usual raster order (NOT block order) into an image in memory. + + // First decode the alpha data + if (basis_file_has_alpha_slices) + //status = transcode_slice(pData, data_size, slice_index + 1, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cRGBA4444_ALPHA, sizeof(uint16_t), decode_flags, output_row_pitch_in_blocks_or_pixels, pState, nullptr, output_rows_in_pixels); + status = transcode_slice(pOutput_blocks, num_blocks_x, num_blocks_y, pCompressed_data + alpha_offset, alpha_length, block_format::cRGBA4444_ALPHA, sizeof(uint16_t), false, is_video, true, level_index, orig_width, orig_height, output_row_pitch_in_blocks_or_pixels, pState, false, nullptr, output_rows_in_pixels); + else + status = true; + + if (status) + { + //status = transcode_slice(pData, data_size, slice_index, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, basis_file_has_alpha_slices ? block_format::cRGBA4444_COLOR : block_format::cRGBA4444_COLOR_OPAQUE, sizeof(uint16_t), decode_flags, output_row_pitch_in_blocks_or_pixels, pState, nullptr, output_rows_in_pixels); + status = transcode_slice(pOutput_blocks, num_blocks_x, num_blocks_y, pCompressed_data + rgb_offset, rgb_length, basis_file_has_alpha_slices ? block_format::cRGBA4444_COLOR : block_format::cRGBA4444_COLOR_OPAQUE, sizeof(uint16_t), false, is_video, false, level_index, orig_width, orig_height, output_row_pitch_in_blocks_or_pixels, pState, false, nullptr, output_rows_in_pixels); + if (!status) + { + BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::transcode_image: transcode_slice() to RGBA4444 RGB failed\n"); + } + } + else + { + BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::transcode_image: transcode_slice() to RGBA4444 A failed\n"); + } + + break; + } + case transcoder_texture_format::cTFFXT1_RGB: + { +#if !BASISD_SUPPORT_FXT1 + BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::transcode_image: FXT1 unsupported\n"); + return false; +#else + //status = transcode_slice(pData, data_size, slice_index_to_decode, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cFXT1_RGB, bytes_per_block_or_pixel, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); + status = transcode_slice(pOutput_blocks, num_blocks_x, num_blocks_y, pData, data_len, block_format::cFXT1_RGB, bytes_per_block_or_pixel, false, is_video, is_alpha_slice, level_index, orig_width, orig_height, output_row_pitch_in_blocks_or_pixels, pState, false, nullptr, output_rows_in_pixels); + if (!status) + { + BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::transcode_image: transcode_slice() to FXT1_RGB failed\n"); + } + break; +#endif + } + case transcoder_texture_format::cTFETC2_EAC_R11: + { +#if !BASISD_SUPPORT_ETC2_EAC_RG11 + BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::transcode_image: EAC_RG11 unsupported\n"); + return false; +#else + //status = transcode_slice(pData, data_size, slice_index_to_decode, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cETC2_EAC_R11, bytes_per_block_or_pixel, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); + status = transcode_slice(pOutput_blocks, num_blocks_x, num_blocks_y, pData, data_len, block_format::cETC2_EAC_R11, bytes_per_block_or_pixel, false, is_video, is_alpha_slice, level_index, orig_width, orig_height, output_row_pitch_in_blocks_or_pixels, pState, false, nullptr, output_rows_in_pixels); + if (!status) + { + BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::transcode_image: transcode_slice() to ETC2_EAC_R11 failed\n"); + } + + break; +#endif + } + case transcoder_texture_format::cTFETC2_EAC_RG11: + { +#if !BASISD_SUPPORT_ETC2_EAC_RG11 + BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::transcode_image: EAC_RG11 unsupported\n"); + return false; +#else + assert(bytes_per_block_or_pixel == 16); + + if (basis_file_has_alpha_slices) + { + // First decode the alpha data to G + //status = transcode_slice(pData, data_size, slice_index + 1, (uint8_t*)pOutput_blocks + 8, output_blocks_buf_size_in_blocks_or_pixels, block_format::cETC2_EAC_R11, 16, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); + status = transcode_slice((uint8_t *)pOutput_blocks + 8, num_blocks_x, num_blocks_y, pCompressed_data + alpha_offset, alpha_length, block_format::cETC2_EAC_R11, bytes_per_block_or_pixel, false, is_video, true, level_index, orig_width, orig_height, output_row_pitch_in_blocks_or_pixels, pState, false, nullptr, output_rows_in_pixels); + } + else + { + basisu_transcoder::write_opaque_alpha_blocks(num_blocks_x, num_blocks_y, (uint8_t*)pOutput_blocks + 8, block_format::cETC2_EAC_R11, 16, output_row_pitch_in_blocks_or_pixels); + status = true; + } + + if (status) + { + // Now decode the color data to R + //status = transcode_slice(pData, data_size, slice_index, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cETC2_EAC_R11, 16, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); + status = transcode_slice(pOutput_blocks, num_blocks_x, num_blocks_y, pCompressed_data + rgb_offset, rgb_length, block_format::cETC2_EAC_R11, bytes_per_block_or_pixel, false, is_video, false, level_index, orig_width, orig_height, output_row_pitch_in_blocks_or_pixels, pState, false, nullptr, output_rows_in_pixels); + if (!status) + { + BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::transcode_image: transcode_slice() to ETC2_EAC_R11 R failed\n"); + } + } + else + { + BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::transcode_image: transcode_slice() to ETC2_EAC_R11 G failed\n"); + } + + break; +#endif + } + default: + { + assert(0); + BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::transcode_image: Invalid fmt\n"); + break; + } + } + + return status; + } basisu_lowlevel_uastc_transcoder::basisu_lowlevel_uastc_transcoder() { } bool basisu_lowlevel_uastc_transcoder::transcode_slice(void* pDst_blocks, uint32_t num_blocks_x, uint32_t num_blocks_y, const uint8_t* pImage_data, uint32_t image_data_size, block_format fmt, - uint32_t output_block_or_pixel_stride_in_bytes, bool bc1_allow_threecolor_blocks, const basis_file_header& header, const basis_slice_desc& slice_desc, uint32_t output_row_pitch_in_blocks_or_pixels, + uint32_t output_block_or_pixel_stride_in_bytes, bool bc1_allow_threecolor_blocks, bool has_alpha, const uint32_t orig_width, const uint32_t orig_height, uint32_t output_row_pitch_in_blocks_or_pixels, basisu_transcoder_state* pState, uint32_t output_rows_in_pixels, int channel0, int channel1, uint32_t decode_flags) { BASISU_NOTE_UNUSED(pState); BASISU_NOTE_UNUSED(bc1_allow_threecolor_blocks); + assert(g_transcoder_initialized); + if (!g_transcoder_initialized) + { + BASISU_DEVEL_ERROR("basisu_lowlevel_uastc_transcoder::transcode_slice: Transcoder not globally initialized.\n"); + return false; + } + #if BASISD_SUPPORT_UASTC const uint32_t total_blocks = num_blocks_x * num_blocks_y; if (!output_row_pitch_in_blocks_or_pixels) { if (basis_block_format_is_uncompressed(fmt)) - output_row_pitch_in_blocks_or_pixels = slice_desc.m_orig_width; + output_row_pitch_in_blocks_or_pixels = orig_width; else { if (fmt == block_format::cFXT1_RGB) - output_row_pitch_in_blocks_or_pixels = (slice_desc.m_orig_width + 7) / 8; + output_row_pitch_in_blocks_or_pixels = (orig_width + 7) / 8; else output_row_pitch_in_blocks_or_pixels = num_blocks_x; } @@ -13437,7 +18664,7 @@ namespace basist if (basis_block_format_is_uncompressed(fmt)) { if (!output_rows_in_pixels) - output_rows_in_pixels = slice_desc.m_orig_height; + output_rows_in_pixels = orig_height; } uint32_t total_expected_block_bytes = sizeof(uastc_block) * total_blocks; @@ -13450,7 +18677,7 @@ namespace basist const uastc_block* pSource_block = reinterpret_cast(pImage_data); const bool high_quality = (decode_flags & cDecodeFlagsHighQuality) != 0; - const bool from_alpha = ((header.m_flags & cBASISHeaderFlagHasAlphaSlices) != 0) && (decode_flags & cDecodeFlagsTranscodeAlphaDataToOpaqueFormats) != 0; + const bool from_alpha = has_alpha && (decode_flags & cDecodeFlagsTranscodeAlphaDataToOpaqueFormats) != 0; bool status = false; if ((fmt == block_format::cPVRTC1_4_RGB) || (fmt == block_format::cPVRTC1_4_RGBA)) @@ -13531,7 +18758,7 @@ namespace basist { if (channel0 < 0) channel0 = 0; - if (channel1 < 3) + if (channel1 < 0) channel1 = 3; status = transcode_uastc_to_etc2_eac_rg11(*pSource_block, pDst_block, high_quality, channel0, channel1); break; @@ -13647,8 +18874,6 @@ namespace basist BASISU_NOTE_UNUSED(channel1); BASISU_NOTE_UNUSED(output_rows_in_pixels); BASISU_NOTE_UNUSED(output_row_pitch_in_blocks_or_pixels); - BASISU_NOTE_UNUSED(slice_desc); - BASISU_NOTE_UNUSED(header); BASISU_NOTE_UNUSED(output_block_or_pixel_stride_in_bytes); BASISU_NOTE_UNUSED(fmt); BASISU_NOTE_UNUSED(image_data_size); @@ -13660,9 +18885,285 @@ namespace basist return false; #endif } + + bool basisu_lowlevel_uastc_transcoder::transcode_image( + transcoder_texture_format target_format, + void* pOutput_blocks, uint32_t output_blocks_buf_size_in_blocks_or_pixels, + const uint8_t* pCompressed_data, uint32_t compressed_data_length, + uint32_t num_blocks_x, uint32_t num_blocks_y, uint32_t orig_width, uint32_t orig_height, uint32_t level_index, + uint32_t slice_offset, uint32_t slice_length, + uint32_t decode_flags, + bool has_alpha, + bool is_video, + uint32_t output_row_pitch_in_blocks_or_pixels, + basisu_transcoder_state* pState, + uint32_t output_rows_in_pixels, + int channel0, int channel1) + { + BASISU_NOTE_UNUSED(is_video); + BASISU_NOTE_UNUSED(level_index); + + if (((uint64_t)slice_offset + slice_length) > (uint64_t)compressed_data_length) + { + BASISU_DEVEL_ERROR("basisu_lowlevel_uastc_transcoder::transcode_image: source data buffer too small\n"); + return false; + } + + if ((target_format == transcoder_texture_format::cTFPVRTC1_4_RGB) || (target_format == transcoder_texture_format::cTFPVRTC1_4_RGBA)) + { + if ((!basisu::is_pow2(num_blocks_x * 4)) || (!basisu::is_pow2(num_blocks_y * 4))) + { + // PVRTC1 only supports power of 2 dimensions + BASISU_DEVEL_ERROR("basisu_lowlevel_uastc_transcoder::transcode_image: PVRTC1 only supports power of 2 dimensions\n"); + return false; + } + } + + if ((target_format == transcoder_texture_format::cTFPVRTC1_4_RGBA) && (!has_alpha)) + { + // Switch to PVRTC1 RGB if the input doesn't have alpha. + target_format = transcoder_texture_format::cTFPVRTC1_4_RGB; + } + + const bool transcode_alpha_data_to_opaque_formats = (decode_flags & cDecodeFlagsTranscodeAlphaDataToOpaqueFormats) != 0; + const uint32_t bytes_per_block_or_pixel = basis_get_bytes_per_block_or_pixel(target_format); + const uint32_t total_slice_blocks = num_blocks_x * num_blocks_y; + + if (!basis_validate_output_buffer_size(target_format, output_blocks_buf_size_in_blocks_or_pixels, orig_width, orig_height, output_row_pitch_in_blocks_or_pixels, output_rows_in_pixels, total_slice_blocks)) + { + BASISU_DEVEL_ERROR("basisu_lowlevel_uastc_transcoder::transcode_image: output buffer size too small\n"); + return false; + } + + bool status = false; + + // UASTC4x4 + switch (target_format) + { + case transcoder_texture_format::cTFETC1_RGB: + { + //status = transcode_slice(pData, data_size, slice_index, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cETC1, bytes_per_block_or_pixel, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); + status = transcode_slice(pOutput_blocks, num_blocks_x, num_blocks_y, pCompressed_data + slice_offset, slice_length, block_format::cETC1, + bytes_per_block_or_pixel, false, has_alpha, orig_width, orig_height, output_row_pitch_in_blocks_or_pixels, pState, output_rows_in_pixels, channel0, channel1); + + if (!status) + { + BASISU_DEVEL_ERROR("basisu_lowlevel_uastc_transcoder::transcode_image: transcode_slice() to ETC1 failed\n"); + } + break; + } + case transcoder_texture_format::cTFETC2_RGBA: + { + //status = transcode_slice(pData, data_size, slice_index, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cETC2_RGBA, bytes_per_block_or_pixel, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); + status = transcode_slice(pOutput_blocks, num_blocks_x, num_blocks_y, pCompressed_data + slice_offset, slice_length, block_format::cETC2_RGBA, + bytes_per_block_or_pixel, false, has_alpha, orig_width, orig_height, output_row_pitch_in_blocks_or_pixels, pState, output_rows_in_pixels, channel0, channel1); + if (!status) + { + BASISU_DEVEL_ERROR("basisu_lowlevel_uastc_transcoder::transcode_image: transcode_slice() to ETC2 failed\n"); + } + break; + } + case transcoder_texture_format::cTFBC1_RGB: + { + // TODO: ETC1S allows BC1 from alpha channel. That doesn't seem actually useful, though. + //status = transcode_slice(pData, data_size, slice_index, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cBC1, bytes_per_block_or_pixel, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); + status = transcode_slice(pOutput_blocks, num_blocks_x, num_blocks_y, pCompressed_data + slice_offset, slice_length, block_format::cBC1, + bytes_per_block_or_pixel, true, has_alpha, orig_width, orig_height, output_row_pitch_in_blocks_or_pixels, pState, output_rows_in_pixels, channel0, channel1); + if (!status) + { + BASISU_DEVEL_ERROR("basisu_lowlevel_uastc_transcoder::transcode_image: transcode_slice() to BC1 failed\n"); + } + break; + } + case transcoder_texture_format::cTFBC3_RGBA: + { + //status = transcode_slice(pData, data_size, slice_index, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cBC3, bytes_per_block_or_pixel, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); + status = transcode_slice(pOutput_blocks, num_blocks_x, num_blocks_y, pCompressed_data + slice_offset, slice_length, block_format::cBC3, + bytes_per_block_or_pixel, false, has_alpha, orig_width, orig_height, output_row_pitch_in_blocks_or_pixels, pState, output_rows_in_pixels, channel0, channel1); + if (!status) + { + BASISU_DEVEL_ERROR("basisu_lowlevel_uastc_transcoder::transcode_image: transcode_slice() to BC3 failed\n"); + } + break; + } + case transcoder_texture_format::cTFBC4_R: + { + //status = transcode_slice(pData, data_size, slice_index, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cBC4, bytes_per_block_or_pixel, decode_flags, output_row_pitch_in_blocks_or_pixels, pState, + // nullptr, 0, + // ((has_alpha) && (transcode_alpha_data_to_opaque_formats)) ? 3 : 0); + status = transcode_slice(pOutput_blocks, num_blocks_x, num_blocks_y, pCompressed_data + slice_offset, slice_length, block_format::cBC4, + bytes_per_block_or_pixel, false, has_alpha, orig_width, orig_height, output_row_pitch_in_blocks_or_pixels, pState, output_rows_in_pixels, + ((has_alpha) && (transcode_alpha_data_to_opaque_formats)) ? 3 : 0); + if (!status) + { + BASISU_DEVEL_ERROR("basisu_lowlevel_uastc_transcoder::transcode_image: transcode_slice() to BC4 failed\n"); + } + break; + } + case transcoder_texture_format::cTFBC5_RG: + { + //status = transcode_slice(pData, data_size, slice_index, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cBC5, bytes_per_block_or_pixel, decode_flags, output_row_pitch_in_blocks_or_pixels, pState, + // nullptr, 0, + // 0, 3); + status = transcode_slice(pOutput_blocks, num_blocks_x, num_blocks_y, pCompressed_data + slice_offset, slice_length, block_format::cBC5, + bytes_per_block_or_pixel, false, has_alpha, orig_width, orig_height, output_row_pitch_in_blocks_or_pixels, pState, output_rows_in_pixels, + 0, 3); + if (!status) + { + BASISU_DEVEL_ERROR("basisu_lowlevel_uastc_transcoder::transcode_image: transcode_slice() to BC5 failed\n"); + } + break; + } + case transcoder_texture_format::cTFBC7_RGBA: + case transcoder_texture_format::cTFBC7_ALT: + { + //status = transcode_slice(pData, data_size, slice_index, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cBC7, bytes_per_block_or_pixel, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); + status = transcode_slice(pOutput_blocks, num_blocks_x, num_blocks_y, pCompressed_data + slice_offset, slice_length, block_format::cBC7, + bytes_per_block_or_pixel, false, has_alpha, orig_width, orig_height, output_row_pitch_in_blocks_or_pixels, pState, output_rows_in_pixels); + if (!status) + { + BASISU_DEVEL_ERROR("basisu_lowlevel_uastc_transcoder::transcode_image: transcode_slice() to BC7 failed\n"); + } + break; + } + case transcoder_texture_format::cTFPVRTC1_4_RGB: + { + //status = transcode_slice(pData, data_size, slice_index, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cPVRTC1_4_RGB, bytes_per_block_or_pixel, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); + status = transcode_slice(pOutput_blocks, num_blocks_x, num_blocks_y, pCompressed_data + slice_offset, slice_length, block_format::cPVRTC1_4_RGB, + bytes_per_block_or_pixel, false, has_alpha, orig_width, orig_height, output_row_pitch_in_blocks_or_pixels, pState, output_rows_in_pixels); + if (!status) + { + BASISU_DEVEL_ERROR("basisu_lowlevel_uastc_transcoder::transcode_image: transcode_slice() to PVRTC1 RGB 4bpp failed\n"); + } + break; + } + case transcoder_texture_format::cTFPVRTC1_4_RGBA: + { + //status = transcode_slice(pData, data_size, slice_index, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cPVRTC1_4_RGBA, bytes_per_block_or_pixel, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); + status = transcode_slice(pOutput_blocks, num_blocks_x, num_blocks_y, pCompressed_data + slice_offset, slice_length, block_format::cPVRTC1_4_RGBA, + bytes_per_block_or_pixel, false, has_alpha, orig_width, orig_height, output_row_pitch_in_blocks_or_pixels, pState, output_rows_in_pixels); + if (!status) + { + BASISU_DEVEL_ERROR("basisu_lowlevel_uastc_transcoder::transcode_image: transcode_slice() to PVRTC1 RGBA 4bpp failed\n"); + } + break; + } + case transcoder_texture_format::cTFASTC_4x4_RGBA: + { + //status = transcode_slice(pData, data_size, slice_index, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cASTC_4x4, bytes_per_block_or_pixel, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); + status = transcode_slice(pOutput_blocks, num_blocks_x, num_blocks_y, pCompressed_data + slice_offset, slice_length, block_format::cASTC_4x4, + bytes_per_block_or_pixel, false, has_alpha, orig_width, orig_height, output_row_pitch_in_blocks_or_pixels, pState, output_rows_in_pixels); + if (!status) + { + BASISU_DEVEL_ERROR("basisu_lowlevel_uastc_transcoder::transcode_image: transcode_slice() to ASTC 4x4 failed\n"); + } + break; + } + case transcoder_texture_format::cTFATC_RGB: + case transcoder_texture_format::cTFATC_RGBA: + { + BASISU_DEVEL_ERROR("basisu_lowlevel_uastc_transcoder::transcode_image: UASTC->ATC currently unsupported\n"); + return false; + } + case transcoder_texture_format::cTFFXT1_RGB: + { + BASISU_DEVEL_ERROR("basisu_lowlevel_uastc_transcoder::transcode_image: UASTC->FXT1 currently unsupported\n"); + return false; + } + case transcoder_texture_format::cTFPVRTC2_4_RGB: + { + BASISU_DEVEL_ERROR("basisu_lowlevel_uastc_transcoder::transcode_image: UASTC->PVRTC2 currently unsupported\n"); + return false; + } + case transcoder_texture_format::cTFPVRTC2_4_RGBA: + { + BASISU_DEVEL_ERROR("basisu_lowlevel_uastc_transcoder::transcode_image: UASTC->PVRTC2 currently unsupported\n"); + return false; + } + case transcoder_texture_format::cTFETC2_EAC_R11: + { + //status = transcode_slice(pData, data_size, slice_index, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cETC2_EAC_R11, bytes_per_block_or_pixel, decode_flags, output_row_pitch_in_blocks_or_pixels, pState, + // nullptr, 0, + // ((has_alpha) && (transcode_alpha_data_to_opaque_formats)) ? 3 : 0); + status = transcode_slice(pOutput_blocks, num_blocks_x, num_blocks_y, pCompressed_data + slice_offset, slice_length, block_format::cETC2_EAC_R11, + bytes_per_block_or_pixel, false, has_alpha, orig_width, orig_height, output_row_pitch_in_blocks_or_pixels, pState, output_rows_in_pixels, + ((has_alpha) && (transcode_alpha_data_to_opaque_formats)) ? 3 : 0); + if (!status) + { + BASISU_DEVEL_ERROR("basisu_lowlevel_uastc_transcoder::transcode_image: transcode_slice() to EAC R11 failed\n"); + } + break; + } + case transcoder_texture_format::cTFETC2_EAC_RG11: + { + //status = transcode_slice(pData, data_size, slice_index, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cETC2_EAC_RG11, bytes_per_block_or_pixel, decode_flags, output_row_pitch_in_blocks_or_pixels, pState, + // nullptr, 0, + // 0, 3); + status = transcode_slice(pOutput_blocks, num_blocks_x, num_blocks_y, pCompressed_data + slice_offset, slice_length, block_format::cETC2_EAC_RG11, + bytes_per_block_or_pixel, false, has_alpha, orig_width, orig_height, output_row_pitch_in_blocks_or_pixels, pState, output_rows_in_pixels, + 0, 3); + if (!status) + { + BASISU_DEVEL_ERROR("basisu_basisu_lowlevel_uastc_transcodertranscoder::transcode_image: transcode_slice() to EAC RG11 failed\n"); + } + break; + } + case transcoder_texture_format::cTFRGBA32: + { + //status = transcode_slice(pData, data_size, slice_index, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cRGBA32, bytes_per_block_or_pixel, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); + status = transcode_slice(pOutput_blocks, num_blocks_x, num_blocks_y, pCompressed_data + slice_offset, slice_length, block_format::cRGBA32, + bytes_per_block_or_pixel, false, has_alpha, orig_width, orig_height, output_row_pitch_in_blocks_or_pixels, pState, output_rows_in_pixels); + if (!status) + { + BASISU_DEVEL_ERROR("basisu_lowlevel_uastc_transcoder::transcode_image: transcode_slice() to RGBA32 failed\n"); + } + break; + } + case transcoder_texture_format::cTFRGB565: + { + //status = transcode_slice(pData, data_size, slice_index, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cRGB565, bytes_per_block_or_pixel, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); + status = transcode_slice(pOutput_blocks, num_blocks_x, num_blocks_y, pCompressed_data + slice_offset, slice_length, block_format::cRGB565, + bytes_per_block_or_pixel, false, has_alpha, orig_width, orig_height, output_row_pitch_in_blocks_or_pixels, pState, output_rows_in_pixels); + if (!status) + { + BASISU_DEVEL_ERROR("basisu_lowlevel_uastc_transcoder::transcode_image: transcode_slice() to RGB565 failed\n"); + } + break; + } + case transcoder_texture_format::cTFBGR565: + { + //status = transcode_slice(pData, data_size, slice_index, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cBGR565, bytes_per_block_or_pixel, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); + status = transcode_slice(pOutput_blocks, num_blocks_x, num_blocks_y, pCompressed_data + slice_offset, slice_length, block_format::cBGR565, + bytes_per_block_or_pixel, false, has_alpha, orig_width, orig_height, output_row_pitch_in_blocks_or_pixels, pState, output_rows_in_pixels); + if (!status) + { + BASISU_DEVEL_ERROR("basisu_lowlevel_uastc_transcoder::transcode_image: transcode_slice() to RGB565 failed\n"); + } + break; + } + case transcoder_texture_format::cTFRGBA4444: + { + //status = transcode_slice(pData, data_size, slice_index, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cRGBA4444, bytes_per_block_or_pixel, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); + status = transcode_slice(pOutput_blocks, num_blocks_x, num_blocks_y, pCompressed_data + slice_offset, slice_length, block_format::cRGBA4444, + bytes_per_block_or_pixel, false, has_alpha, orig_width, orig_height, output_row_pitch_in_blocks_or_pixels, pState, output_rows_in_pixels); + if (!status) + { + BASISU_DEVEL_ERROR("basisu_lowlevel_uastc_transcoder::transcode_image: transcode_slice() to RGBA4444 failed\n"); + } + break; + } + default: + { + assert(0); + BASISU_DEVEL_ERROR("basisu_lowlevel_uastc_transcoder::transcode_image: Invalid format\n"); + break; + } + } + + return status; + } - basisu_transcoder::basisu_transcoder(const etc1_global_selector_codebook* pGlobal_sel_codebook) : - m_lowlevel_etc1s_decoder(pGlobal_sel_codebook), + basisu_transcoder::basisu_transcoder() : m_ready_to_transcode(false) { } @@ -14053,6 +19554,21 @@ namespace basist image_info.m_total_blocks = image_info.m_num_blocks_x * image_info.m_num_blocks_y; image_info.m_first_slice_index = slice_index; + image_info.m_rgb_file_ofs = slice_desc.m_file_ofs; + image_info.m_rgb_file_len = slice_desc.m_file_size; + image_info.m_alpha_file_ofs = 0; + image_info.m_alpha_file_len = 0; + + if (pHeader->m_tex_format == (int)basis_tex_format::cETC1S) + { + if (pHeader->m_flags & cBASISHeaderFlagHasAlphaSlices) + { + assert((slice_index + 1) < (int)pHeader->m_total_slices); + image_info.m_alpha_file_ofs = pSlice_descs[slice_index + 1].m_file_ofs; + image_info.m_alpha_file_len = pSlice_descs[slice_index + 1].m_file_size; + } + } + return true; } @@ -14072,11 +19588,14 @@ namespace basist file_info.m_total_header_size = sizeof(basis_file_header) + pHeader->m_total_slices * sizeof(basis_slice_desc); file_info.m_total_selectors = pHeader->m_total_selectors; + file_info.m_selector_codebook_ofs = pHeader->m_selector_cb_file_ofs; file_info.m_selector_codebook_size = pHeader->m_selector_cb_file_size; file_info.m_total_endpoints = pHeader->m_total_endpoints; + file_info.m_endpoint_codebook_ofs = pHeader->m_endpoint_cb_file_ofs; file_info.m_endpoint_codebook_size = pHeader->m_endpoint_cb_file_size; + file_info.m_tables_ofs = pHeader->m_tables_file_ofs; file_info.m_tables_size = pHeader->m_tables_file_size; file_info.m_tex_format = static_cast(static_cast(pHeader->m_tex_format)); @@ -14161,46 +19680,84 @@ namespace basist if (pHeader->m_tex_format == (int)basis_tex_format::cETC1S) { - if (m_lowlevel_etc1s_decoder.m_endpoints.size()) + if (m_lowlevel_etc1s_decoder.m_local_endpoints.size()) { m_lowlevel_etc1s_decoder.clear(); } - if (!pHeader->m_endpoint_cb_file_size || !pHeader->m_selector_cb_file_size || !pHeader->m_tables_file_size) + if (pHeader->m_flags & cBASISHeaderFlagUsesGlobalCodebook) { - BASISU_DEVEL_ERROR("basisu_transcoder::start_transcoding: file is corrupted (0)\n"); + if (!m_lowlevel_etc1s_decoder.get_global_codebooks()) + { + BASISU_DEVEL_ERROR("basisu_transcoder::start_transcoding: File uses global codebooks, but set_global_codebooks() has not been called\n"); + return false; + } + if (!m_lowlevel_etc1s_decoder.get_global_codebooks()->get_endpoints().size()) + { + BASISU_DEVEL_ERROR("basisu_transcoder::start_transcoding: Global codebooks must be unpacked first by calling start_transcoding()\n"); + return false; + } + if ((m_lowlevel_etc1s_decoder.get_global_codebooks()->get_endpoints().size() != pHeader->m_total_endpoints) || + (m_lowlevel_etc1s_decoder.get_global_codebooks()->get_selectors().size() != pHeader->m_total_selectors)) + { + BASISU_DEVEL_ERROR("basisu_transcoder::start_transcoding: Global codebook size mismatch (wrong codebooks for file).\n"); + return false; + } + if (!pHeader->m_tables_file_size) + { + BASISU_DEVEL_ERROR("basisu_transcoder::start_transcoding: file is corrupted (2)\n"); + return false; + } + if (pHeader->m_tables_file_ofs > data_size) + { + BASISU_DEVEL_ERROR("basisu_transcoder::start_transcoding: file is corrupted or passed in buffer too small (4)\n"); + return false; + } + if (pHeader->m_tables_file_size > (data_size - pHeader->m_tables_file_ofs)) + { + BASISU_DEVEL_ERROR("basisu_transcoder::start_transcoding: file is corrupted or passed in buffer too small (5)\n"); + return false; + } } - - if ((pHeader->m_endpoint_cb_file_ofs > data_size) || (pHeader->m_selector_cb_file_ofs > data_size) || (pHeader->m_tables_file_ofs > data_size)) + else { - BASISU_DEVEL_ERROR("basisu_transcoder::start_transcoding: file is corrupted or passed in buffer too small (1)\n"); - return false; - } + if (!pHeader->m_endpoint_cb_file_size || !pHeader->m_selector_cb_file_size || !pHeader->m_tables_file_size) + { + BASISU_DEVEL_ERROR("basisu_transcoder::start_transcoding: file is corrupted (0)\n"); + return false; + } - if (pHeader->m_endpoint_cb_file_size > (data_size - pHeader->m_endpoint_cb_file_ofs)) - { - BASISU_DEVEL_ERROR("basisu_transcoder::start_transcoding: file is corrupted or passed in buffer too small (2)\n"); - return false; - } + if ((pHeader->m_endpoint_cb_file_ofs > data_size) || (pHeader->m_selector_cb_file_ofs > data_size) || (pHeader->m_tables_file_ofs > data_size)) + { + BASISU_DEVEL_ERROR("basisu_transcoder::start_transcoding: file is corrupted or passed in buffer too small (1)\n"); + return false; + } - if (pHeader->m_selector_cb_file_size > (data_size - pHeader->m_selector_cb_file_ofs)) - { - BASISU_DEVEL_ERROR("basisu_transcoder::start_transcoding: file is corrupted or passed in buffer too small (3)\n"); - return false; - } + if (pHeader->m_endpoint_cb_file_size > (data_size - pHeader->m_endpoint_cb_file_ofs)) + { + BASISU_DEVEL_ERROR("basisu_transcoder::start_transcoding: file is corrupted or passed in buffer too small (2)\n"); + return false; + } - if (pHeader->m_tables_file_size > (data_size - pHeader->m_tables_file_ofs)) - { - BASISU_DEVEL_ERROR("basisu_transcoder::start_transcoding: file is corrupted or passed in buffer too small (3)\n"); - return false; - } + if (pHeader->m_selector_cb_file_size > (data_size - pHeader->m_selector_cb_file_ofs)) + { + BASISU_DEVEL_ERROR("basisu_transcoder::start_transcoding: file is corrupted or passed in buffer too small (3)\n"); + return false; + } - if (!m_lowlevel_etc1s_decoder.decode_palettes( - pHeader->m_total_endpoints, pDataU8 + pHeader->m_endpoint_cb_file_ofs, pHeader->m_endpoint_cb_file_size, - pHeader->m_total_selectors, pDataU8 + pHeader->m_selector_cb_file_ofs, pHeader->m_selector_cb_file_size)) - { - BASISU_DEVEL_ERROR("basisu_transcoder::start_transcoding: decode_palettes failed\n"); - return false; + if (pHeader->m_tables_file_size > (data_size - pHeader->m_tables_file_ofs)) + { + BASISU_DEVEL_ERROR("basisu_transcoder::start_transcoding: file is corrupted or passed in buffer too small (3)\n"); + return false; + } + + if (!m_lowlevel_etc1s_decoder.decode_palettes( + pHeader->m_total_endpoints, pDataU8 + pHeader->m_endpoint_cb_file_ofs, pHeader->m_endpoint_cb_file_size, + pHeader->m_total_selectors, pDataU8 + pHeader->m_selector_cb_file_ofs, pHeader->m_selector_cb_file_size)) + { + BASISU_DEVEL_ERROR("basisu_transcoder::start_transcoding: decode_palettes failed\n"); + return false; + } } if (!m_lowlevel_etc1s_decoder.decode_tables(pDataU8 + pHeader->m_tables_file_ofs, pHeader->m_tables_file_size)) @@ -14212,7 +19769,7 @@ namespace basist else { // Nothing special to do for UASTC. - if (m_lowlevel_etc1s_decoder.m_endpoints.size()) + if (m_lowlevel_etc1s_decoder.m_local_endpoints.size()) { m_lowlevel_etc1s_decoder.clear(); } @@ -14405,9 +19962,9 @@ namespace basist return -1; } - static void write_opaque_alpha_blocks( + void basisu_transcoder::write_opaque_alpha_blocks( uint32_t num_blocks_x, uint32_t num_blocks_y, - void* pOutput_blocks, uint32_t output_blocks_buf_size_in_blocks_or_pixels, block_format fmt, + void* pOutput_blocks, block_format fmt, uint32_t block_stride_in_bytes, uint32_t output_row_pitch_in_blocks_or_pixels) { // 'num_blocks_y', 'pOutput_blocks' & 'block_stride_in_bytes' unused @@ -14415,7 +19972,6 @@ namespace basist BASISU_NOTE_UNUSED(num_blocks_y); BASISU_NOTE_UNUSED(pOutput_blocks); BASISU_NOTE_UNUSED(block_stride_in_bytes); - BASISU_NOTE_UNUSED(output_blocks_buf_size_in_blocks_or_pixels); if (!output_row_pitch_in_blocks_or_pixels) output_row_pitch_in_blocks_or_pixels = num_blocks_x; @@ -14478,7 +20034,7 @@ namespace basist return false; } - const bool transcode_alpha_data_to_opaque_formats = (decode_flags & cDecodeFlagsTranscodeAlphaDataToOpaqueFormats) != 0; + //const bool transcode_alpha_data_to_opaque_formats = (decode_flags & cDecodeFlagsTranscodeAlphaDataToOpaqueFormats) != 0; if (decode_flags & cDecodeFlagsPVRTCDecodeToNextPow2) { @@ -14566,708 +20122,40 @@ namespace basist if (pHeader->m_tex_format == (int)basis_tex_format::cUASTC4x4) { - // UASTC4x4 - switch (fmt) - { - case transcoder_texture_format::cTFETC1_RGB: - { - status = transcode_slice(pData, data_size, slice_index, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cETC1, bytes_per_block_or_pixel, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); - if (!status) - { - BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to ETC1 failed\n"); - } - break; - } - case transcoder_texture_format::cTFETC2_RGBA: - { - status = transcode_slice(pData, data_size, slice_index, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cETC2_RGBA, bytes_per_block_or_pixel, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); - if (!status) - { - BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to ETC2 failed\n"); - } - break; - } - case transcoder_texture_format::cTFBC1_RGB: - { - // TODO: ETC1S allows BC1 from alpha channel. That doesn't seem actually useful, though. - status = transcode_slice(pData, data_size, slice_index, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cBC1, bytes_per_block_or_pixel, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); - if (!status) - { - BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to BC1 failed\n"); - } - break; - } - case transcoder_texture_format::cTFBC3_RGBA: - { - status = transcode_slice(pData, data_size, slice_index, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cBC3, bytes_per_block_or_pixel, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); - if (!status) - { - BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to BC3 failed\n"); - } - break; - } - case transcoder_texture_format::cTFBC4_R: - { - status = transcode_slice(pData, data_size, slice_index, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cBC4, bytes_per_block_or_pixel, decode_flags, output_row_pitch_in_blocks_or_pixels, pState, - nullptr, 0, - ((basis_file_has_alpha_slices) && (transcode_alpha_data_to_opaque_formats)) ? 3 : 0); - if (!status) - { - BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to BC4 failed\n"); - } - break; - } - case transcoder_texture_format::cTFBC5_RG: - { - status = transcode_slice(pData, data_size, slice_index, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cBC5, bytes_per_block_or_pixel, decode_flags, output_row_pitch_in_blocks_or_pixels, pState, - nullptr, 0, - 0, 3); - if (!status) - { - BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to BC5 failed\n"); - } - break; - } - case transcoder_texture_format::cTFBC7_RGBA: - case transcoder_texture_format::cTFBC7_ALT: - { - status = transcode_slice(pData, data_size, slice_index, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cBC7, bytes_per_block_or_pixel, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); - if (!status) - { - BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to BC7 failed\n"); - } - break; - } - case transcoder_texture_format::cTFPVRTC1_4_RGB: - { - status = transcode_slice(pData, data_size, slice_index, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cPVRTC1_4_RGB, bytes_per_block_or_pixel, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); - if (!status) - { - BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to PVRTC1 RGB 4bpp failed\n"); - } - break; - } - case transcoder_texture_format::cTFPVRTC1_4_RGBA: - { - status = transcode_slice(pData, data_size, slice_index, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cPVRTC1_4_RGBA, bytes_per_block_or_pixel, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); - if (!status) - { - BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to PVRTC1 RGBA 4bpp failed\n"); - } - break; - } - case transcoder_texture_format::cTFASTC_4x4_RGBA: - { - status = transcode_slice(pData, data_size, slice_index, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cASTC_4x4, bytes_per_block_or_pixel, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); - if (!status) - { - BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to ASTC 4x4 failed\n"); - } - break; - } - case transcoder_texture_format::cTFATC_RGB: - case transcoder_texture_format::cTFATC_RGBA: - { - BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: UASTC->ATC currently unsupported\n"); - return false; - } - case transcoder_texture_format::cTFFXT1_RGB: - { - BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: UASTC->FXT1 currently unsupported\n"); - return false; - } - case transcoder_texture_format::cTFPVRTC2_4_RGB: - { - BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: UASTC->PVRTC2 currently unsupported\n"); - return false; - } - case transcoder_texture_format::cTFPVRTC2_4_RGBA: - { - BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: UASTC->PVRTC2 currently unsupported\n"); - return false; - } - case transcoder_texture_format::cTFETC2_EAC_R11: - { - status = transcode_slice(pData, data_size, slice_index, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cETC2_EAC_R11, bytes_per_block_or_pixel, decode_flags, output_row_pitch_in_blocks_or_pixels, pState, - nullptr, 0, - ((basis_file_has_alpha_slices) && (transcode_alpha_data_to_opaque_formats)) ? 3 : 0); - if (!status) - { - BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to EAC R11 failed\n"); - } - break; - } - case transcoder_texture_format::cTFETC2_EAC_RG11: - { - status = transcode_slice(pData, data_size, slice_index, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cETC2_EAC_RG11, bytes_per_block_or_pixel, decode_flags, output_row_pitch_in_blocks_or_pixels, pState, - nullptr, 0, - 0, 3); - if (!status) - { - BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to EAC RG11 failed\n"); - } - break; - } - case transcoder_texture_format::cTFRGBA32: - { - status = transcode_slice(pData, data_size, slice_index, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cRGBA32, bytes_per_block_or_pixel, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); - if (!status) - { - BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to RGBA32 failed\n"); - } - break; - } - case transcoder_texture_format::cTFRGB565: - { - status = transcode_slice(pData, data_size, slice_index, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cRGB565, bytes_per_block_or_pixel, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); - if (!status) - { - BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to RGB565 failed\n"); - } - break; - } - case transcoder_texture_format::cTFBGR565: - { - status = transcode_slice(pData, data_size, slice_index, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cBGR565, bytes_per_block_or_pixel, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); - if (!status) - { - BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to RGB565 failed\n"); - } - break; - } - case transcoder_texture_format::cTFRGBA4444: - { - status = transcode_slice(pData, data_size, slice_index, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cRGBA4444, bytes_per_block_or_pixel, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); - if (!status) - { - BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to RGBA4444 failed\n"); - } - break; - } - default: - { - assert(0); - BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: Invalid fmt\n"); - break; - } - } + const basis_slice_desc* pSlice_desc = &pSlice_descs[slice_index]; + + // Use the container independent image transcode method. + status = m_lowlevel_uastc_decoder.transcode_image(fmt, + pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, + (const uint8_t*)pData, data_size, pSlice_desc->m_num_blocks_x, pSlice_desc->m_num_blocks_y, pSlice_desc->m_orig_width, pSlice_desc->m_orig_height, pSlice_desc->m_level_index, + pSlice_desc->m_file_ofs, pSlice_desc->m_file_size, + decode_flags, basis_file_has_alpha_slices, pHeader->m_tex_type == cBASISTexTypeVideoFrames, output_row_pitch_in_blocks_or_pixels, pState, output_rows_in_pixels); } else { // ETC1S + const basis_slice_desc* pSlice_desc = &pSlice_descs[slice_index]; + const basis_slice_desc* pAlpha_slice_desc = basis_file_has_alpha_slices ? &pSlice_descs[slice_index + 1] : nullptr; - switch (fmt) + assert((pSlice_desc->m_flags & cSliceDescFlagsHasAlpha) == 0); + + if (pAlpha_slice_desc) { - case transcoder_texture_format::cTFETC1_RGB: - { - uint32_t slice_index_to_decode = slice_index; - // If the caller wants us to transcode the mip level's alpha data, then use the next slice. - if ((basis_file_has_alpha_slices) && (transcode_alpha_data_to_opaque_formats)) - slice_index_to_decode++; - - status = transcode_slice(pData, data_size, slice_index_to_decode, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cETC1, bytes_per_block_or_pixel, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); - if (!status) - { - BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to ETC1 failed\n"); - } - break; + // Basic sanity checks + assert((pAlpha_slice_desc->m_flags & cSliceDescFlagsHasAlpha) != 0); + assert(pSlice_desc->m_num_blocks_x == pAlpha_slice_desc->m_num_blocks_x); + assert(pSlice_desc->m_num_blocks_y == pAlpha_slice_desc->m_num_blocks_y); + assert(pSlice_desc->m_level_index == pAlpha_slice_desc->m_level_index); } - case transcoder_texture_format::cTFBC1_RGB: - { -#if !BASISD_SUPPORT_DXT1 - BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: DXT1 unsupported\n"); - return false; -#endif - uint32_t slice_index_to_decode = slice_index; - // If the caller wants us to transcode the mip level's alpha data, then use the next slice. - if ((basis_file_has_alpha_slices) && (transcode_alpha_data_to_opaque_formats)) - slice_index_to_decode++; - status = transcode_slice(pData, data_size, slice_index_to_decode, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cBC1, bytes_per_block_or_pixel, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); - if (!status) - { - BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to BC1 failed\n"); - } - break; - } - case transcoder_texture_format::cTFBC4_R: - { -#if !BASISD_SUPPORT_DXT5A - BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: DXT5A unsupported\n"); - return false; -#endif - uint32_t slice_index_to_decode = slice_index; - // If the caller wants us to transcode the mip level's alpha data, then use the next slice. - if ((basis_file_has_alpha_slices) && (transcode_alpha_data_to_opaque_formats)) - slice_index_to_decode++; + // Use the container independent image transcode method. + status = m_lowlevel_etc1s_decoder.transcode_image(fmt, + pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, + (const uint8_t *)pData, data_size, pSlice_desc->m_num_blocks_x, pSlice_desc->m_num_blocks_y, pSlice_desc->m_orig_width, pSlice_desc->m_orig_height, pSlice_desc->m_level_index, + pSlice_desc->m_file_ofs, pSlice_desc->m_file_size, + (pAlpha_slice_desc != nullptr) ? (uint32_t)pAlpha_slice_desc->m_file_ofs : 0U, (pAlpha_slice_desc != nullptr) ? (uint32_t)pAlpha_slice_desc->m_file_size : 0U, + decode_flags, basis_file_has_alpha_slices, pHeader->m_tex_type == cBASISTexTypeVideoFrames, output_row_pitch_in_blocks_or_pixels, pState, output_rows_in_pixels); - status = transcode_slice(pData, data_size, slice_index_to_decode, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cBC4, bytes_per_block_or_pixel, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); - if (!status) - { - BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to BC4 failed\n"); - } - break; - } - case transcoder_texture_format::cTFPVRTC1_4_RGB: - { -#if !BASISD_SUPPORT_PVRTC1 - BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: PVRTC1 unsupported\n"); - return false; -#endif - uint32_t slice_index_to_decode = slice_index; - // If the caller wants us to transcode the mip level's alpha data, then use the next slice. - if ((basis_file_has_alpha_slices) && (transcode_alpha_data_to_opaque_formats)) - slice_index_to_decode++; - - // output_row_pitch_in_blocks_or_pixels is actually ignored because we're transcoding to PVRTC1. (Print a dev warning if it's != 0?) - status = transcode_slice(pData, data_size, slice_index_to_decode, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cPVRTC1_4_RGB, bytes_per_block_or_pixel, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); - if (!status) - { - BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to PVRTC1 4 RGB failed\n"); - } - break; - } - case transcoder_texture_format::cTFPVRTC1_4_RGBA: - { -#if !BASISD_SUPPORT_PVRTC1 - BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: PVRTC1 unsupported\n"); - return false; -#endif - assert(basis_file_has_alpha_slices); - - // Temp buffer to hold alpha block endpoint/selector indices - std::vector temp_block_indices(total_slice_blocks); - - // First transcode alpha data to temp buffer - status = transcode_slice(pData, data_size, slice_index + 1, &temp_block_indices[0], total_slice_blocks, block_format::cIndices, sizeof(uint32_t), decode_flags, pSlice_descs[slice_index].m_num_blocks_x, pState); - if (!status) - { - BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to PVRTC1 4 RGBA failed (0)\n"); - } - else - { - // output_row_pitch_in_blocks_or_pixels is actually ignored because we're transcoding to PVRTC1. (Print a dev warning if it's != 0?) - status = transcode_slice(pData, data_size, slice_index, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cPVRTC1_4_RGBA, bytes_per_block_or_pixel, decode_flags, output_row_pitch_in_blocks_or_pixels, pState, &temp_block_indices[0]); - if (!status) - { - BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to PVRTC1 4 RGBA failed (1)\n"); - } - } - - break; - } - case transcoder_texture_format::cTFBC7_RGBA: - case transcoder_texture_format::cTFBC7_ALT: - { -#if !BASISD_SUPPORT_BC7_MODE5 - BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: BC7 unsupported\n"); - return false; -#else - assert(bytes_per_block_or_pixel == 16); - // We used to support transcoding just alpha to BC7 - but is that useful at all? - - // First transcode the color slice. The cBC7_M5_COLOR transcoder will output opaque mode 5 blocks. - status = transcode_slice(pData, data_size, slice_index, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cBC7_M5_COLOR, 16, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); - - if ((status) && (basis_file_has_alpha_slices)) - { - // Now transcode the alpha slice. The cBC7_M5_ALPHA transcoder will now change the opaque mode 5 blocks to blocks with alpha. - status = transcode_slice(pData, data_size, slice_index + 1, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cBC7_M5_ALPHA, 16, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); - } - - if (!status) - { - BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to BC7 failed (0)\n"); - } - - break; -#endif - } - case transcoder_texture_format::cTFETC2_RGBA: - { -#if !BASISD_SUPPORT_ETC2_EAC_A8 - BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: ETC2 EAC A8 unsupported\n"); - return false; -#endif - assert(bytes_per_block_or_pixel == 16); - - if (basis_file_has_alpha_slices) - { - // First decode the alpha data - status = transcode_slice(pData, data_size, slice_index + 1, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cETC2_EAC_A8, 16, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); - } - else - { - write_opaque_alpha_blocks(pSlice_descs[slice_index].m_num_blocks_x, pSlice_descs[slice_index].m_num_blocks_y, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cETC2_EAC_A8, 16, output_row_pitch_in_blocks_or_pixels); - status = true; - } - - if (status) - { - // Now decode the color data - status = transcode_slice(pData, data_size, slice_index, (uint8_t*)pOutput_blocks + 8, output_blocks_buf_size_in_blocks_or_pixels, block_format::cETC1, 16, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); - if (!status) - { - BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to ETC2 RGB failed\n"); - } - } - else - { - BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to ETC2 A failed\n"); - } - break; - } - case transcoder_texture_format::cTFBC3_RGBA: - { -#if !BASISD_SUPPORT_DXT1 - BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: DXT1 unsupported\n"); - return false; -#endif -#if !BASISD_SUPPORT_DXT5A - BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: DXT5A unsupported\n"); - return false; -#endif - assert(bytes_per_block_or_pixel == 16); - - // First decode the alpha data - if (basis_file_has_alpha_slices) - { - status = transcode_slice(pData, data_size, slice_index + 1, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cBC4, 16, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); - } - else - { - write_opaque_alpha_blocks(pSlice_descs[slice_index].m_num_blocks_x, pSlice_descs[slice_index].m_num_blocks_y, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cBC4, 16, output_row_pitch_in_blocks_or_pixels); - status = true; - } - - if (status) - { - // Now decode the color data. Forbid 3 color blocks, which aren't allowed in BC3. - status = transcode_slice(pData, data_size, slice_index, (uint8_t*)pOutput_blocks + 8, output_blocks_buf_size_in_blocks_or_pixels, block_format::cBC1, 16, decode_flags | cDecodeFlagsBC1ForbidThreeColorBlocks, output_row_pitch_in_blocks_or_pixels, pState); - if (!status) - { - BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to BC3 RGB failed\n"); - } - } - else - { - BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to BC3 A failed\n"); - } - - break; - } - case transcoder_texture_format::cTFBC5_RG: - { -#if !BASISD_SUPPORT_DXT5A - BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: DXT5A unsupported\n"); - return false; -#endif - assert(bytes_per_block_or_pixel == 16); - - // Decode the R data (actually the green channel of the color data slice in the basis file) - status = transcode_slice(pData, data_size, slice_index, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cBC4, 16, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); - if (status) - { - if (basis_file_has_alpha_slices) - { - // Decode the G data (actually the green channel of the alpha data slice in the basis file) - status = transcode_slice(pData, data_size, slice_index + 1, (uint8_t*)pOutput_blocks + 8, output_blocks_buf_size_in_blocks_or_pixels, block_format::cBC4, 16, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); - if (!status) - { - BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to BC5 1 failed\n"); - } - } - else - { - write_opaque_alpha_blocks(pSlice_descs[slice_index].m_num_blocks_x, pSlice_descs[slice_index].m_num_blocks_y, (uint8_t*)pOutput_blocks + 8, output_blocks_buf_size_in_blocks_or_pixels, block_format::cBC4, 16, output_row_pitch_in_blocks_or_pixels); - status = true; - } - } - else - { - BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to BC5 channel 0 failed\n"); - } - break; - } - case transcoder_texture_format::cTFASTC_4x4_RGBA: - { -#if !BASISD_SUPPORT_ASTC - BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: ASTC unsupported\n"); - return false; -#endif - assert(bytes_per_block_or_pixel == 16); - - if (basis_file_has_alpha_slices) - { - // First decode the alpha data to the output (we're using the output texture as a temp buffer here). - status = transcode_slice(pData, data_size, slice_index + 1, (uint8_t*)pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cIndices, 16, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); - if (status) - { - // Now decode the color data and transcode to ASTC. The transcoder function will read the alpha selector data from the output texture as it converts and - // transcode both the alpha and color data at the same time to ASTC. - status = transcode_slice(pData, data_size, slice_index, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cASTC_4x4, 16, decode_flags | cDecodeFlagsOutputHasAlphaIndices, output_row_pitch_in_blocks_or_pixels, pState); - } - } - else - status = transcode_slice(pData, data_size, slice_index, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cASTC_4x4, 16, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); - - if (!status) - { - BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to ASTC failed (0)\n"); - } - - break; - } - case transcoder_texture_format::cTFATC_RGB: - { -#if !BASISD_SUPPORT_ATC - BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: ATC unsupported\n"); - return false; -#endif - uint32_t slice_index_to_decode = slice_index; - // If the caller wants us to transcode the mip level's alpha data, then use the next slice. - if ((basis_file_has_alpha_slices) && (transcode_alpha_data_to_opaque_formats)) - slice_index_to_decode++; - - status = transcode_slice(pData, data_size, slice_index_to_decode, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cATC_RGB, bytes_per_block_or_pixel, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); - if (!status) - { - BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to ATC_RGB failed\n"); - } - break; - } - case transcoder_texture_format::cTFATC_RGBA: - { -#if !BASISD_SUPPORT_ATC - BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: ATC unsupported\n"); - return false; -#endif -#if !BASISD_SUPPORT_DXT5A - BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: DXT5A unsupported\n"); - return false; -#endif - assert(bytes_per_block_or_pixel == 16); - - // First decode the alpha data - if (basis_file_has_alpha_slices) - { - status = transcode_slice(pData, data_size, slice_index + 1, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cBC4, 16, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); - } - else - { - write_opaque_alpha_blocks(pSlice_descs[slice_index].m_num_blocks_x, pSlice_descs[slice_index].m_num_blocks_y, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cBC4, 16, output_row_pitch_in_blocks_or_pixels); - status = true; - } - - if (status) - { - status = transcode_slice(pData, data_size, slice_index, (uint8_t*)pOutput_blocks + 8, output_blocks_buf_size_in_blocks_or_pixels, block_format::cATC_RGB, 16, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); - if (!status) - { - BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to ATC RGB failed\n"); - } - } - else - { - BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to ATC A failed\n"); - } - break; - } - case transcoder_texture_format::cTFPVRTC2_4_RGB: - { -#if !BASISD_SUPPORT_PVRTC2 - BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: PVRTC2 unsupported\n"); - return false; -#endif - uint32_t slice_index_to_decode = slice_index; - // If the caller wants us to transcode the mip level's alpha data, then use the next slice. - if ((basis_file_has_alpha_slices) && (transcode_alpha_data_to_opaque_formats)) - slice_index_to_decode++; - - status = transcode_slice(pData, data_size, slice_index_to_decode, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cPVRTC2_4_RGB, bytes_per_block_or_pixel, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); - if (!status) - { - BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to cPVRTC2_4_RGB failed\n"); - } - break; - } - case transcoder_texture_format::cTFPVRTC2_4_RGBA: - { -#if !BASISD_SUPPORT_PVRTC2 - BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: PVRTC2 unsupported\n"); - return false; -#endif - if (basis_file_has_alpha_slices) - { - // First decode the alpha data to the output (we're using the output texture as a temp buffer here). - status = transcode_slice(pData, data_size, slice_index + 1, (uint8_t*)pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cIndices, bytes_per_block_or_pixel, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); - if (!status) - { - BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to failed\n"); - } - else - { - // Now decode the color data and transcode to PVRTC2 RGBA. - status = transcode_slice(pData, data_size, slice_index, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cPVRTC2_4_RGBA, bytes_per_block_or_pixel, decode_flags | cDecodeFlagsOutputHasAlphaIndices, output_row_pitch_in_blocks_or_pixels, pState); - } - } - else - status = transcode_slice(pData, data_size, slice_index, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cPVRTC2_4_RGB, bytes_per_block_or_pixel, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); - - if (!status) - { - BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to cPVRTC2_4_RGBA failed\n"); - } - - break; - } - case transcoder_texture_format::cTFRGBA32: - { - // Raw 32bpp pixels, decoded in the usual raster order (NOT block order) into an image in memory. - - // First decode the alpha data - if (basis_file_has_alpha_slices) - status = transcode_slice(pData, data_size, slice_index + 1, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cA32, sizeof(uint32_t), decode_flags, output_row_pitch_in_blocks_or_pixels, pState, nullptr, output_rows_in_pixels); - else - status = true; - - if (status) - { - status = transcode_slice(pData, data_size, slice_index, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, basis_file_has_alpha_slices ? block_format::cRGB32 : block_format::cRGBA32, sizeof(uint32_t), decode_flags, output_row_pitch_in_blocks_or_pixels, pState, nullptr, output_rows_in_pixels); - if (!status) - { - BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to RGBA32 RGB failed\n"); - } - } - else - { - BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to RGBA32 A failed\n"); - } - - break; - } - case transcoder_texture_format::cTFRGB565: - case transcoder_texture_format::cTFBGR565: - { - // Raw 16bpp pixels, decoded in the usual raster order (NOT block order) into an image in memory. - - uint32_t slice_index_to_decode = slice_index; - // If the caller wants us to transcode the mip level's alpha data, then use the next slice. - if ((basis_file_has_alpha_slices) && (transcode_alpha_data_to_opaque_formats)) - slice_index_to_decode++; - - status = transcode_slice(pData, data_size, slice_index_to_decode, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, (fmt == transcoder_texture_format::cTFRGB565) ? block_format::cRGB565 : block_format::cBGR565, sizeof(uint16_t), decode_flags, output_row_pitch_in_blocks_or_pixels, pState, nullptr, output_rows_in_pixels); - if (!status) - { - BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to RGB565 RGB failed\n"); - } - - break; - } - case transcoder_texture_format::cTFRGBA4444: - { - // Raw 16bpp pixels, decoded in the usual raster order (NOT block order) into an image in memory. - - // First decode the alpha data - if (basis_file_has_alpha_slices) - status = transcode_slice(pData, data_size, slice_index + 1, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cRGBA4444_ALPHA, sizeof(uint16_t), decode_flags, output_row_pitch_in_blocks_or_pixels, pState, nullptr, output_rows_in_pixels); - else - status = true; - - if (status) - { - status = transcode_slice(pData, data_size, slice_index, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, basis_file_has_alpha_slices ? block_format::cRGBA4444_COLOR : block_format::cRGBA4444_COLOR_OPAQUE, sizeof(uint16_t), decode_flags, output_row_pitch_in_blocks_or_pixels, pState, nullptr, output_rows_in_pixels); - if (!status) - { - BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to RGBA4444 RGB failed\n"); - } - } - else - { - BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to RGBA4444 A failed\n"); - } - - break; - } - case transcoder_texture_format::cTFFXT1_RGB: - { -#if !BASISD_SUPPORT_FXT1 - BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: FXT1 unsupported\n"); - return false; -#endif - uint32_t slice_index_to_decode = slice_index; - // If the caller wants us to transcode the mip level's alpha data, then use the next slice. - if ((basis_file_has_alpha_slices) && (transcode_alpha_data_to_opaque_formats)) - slice_index_to_decode++; - - status = transcode_slice(pData, data_size, slice_index_to_decode, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cFXT1_RGB, bytes_per_block_or_pixel, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); - if (!status) - { - BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to FXT1_RGB failed\n"); - } - break; - } - case transcoder_texture_format::cTFETC2_EAC_R11: - { -#if !BASISD_SUPPORT_ETC2_EAC_RG11 - BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: EAC_RG11 unsupported\n"); - return false; -#endif - uint32_t slice_index_to_decode = slice_index; - // If the caller wants us to transcode the mip level's alpha data, then use the next slice. - if ((basis_file_has_alpha_slices) && (transcode_alpha_data_to_opaque_formats)) - slice_index_to_decode++; - - status = transcode_slice(pData, data_size, slice_index_to_decode, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cETC2_EAC_R11, bytes_per_block_or_pixel, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); - if (!status) - { - BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to ETC2_EAC_R11 failed\n"); - } - - break; - } - case transcoder_texture_format::cTFETC2_EAC_RG11: - { -#if !BASISD_SUPPORT_ETC2_EAC_RG11 - BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: EAC_RG11 unsupported\n"); - return false; -#endif - assert(bytes_per_block_or_pixel == 16); - - if (basis_file_has_alpha_slices) - { - // First decode the alpha data to G - status = transcode_slice(pData, data_size, slice_index + 1, (uint8_t*)pOutput_blocks + 8, output_blocks_buf_size_in_blocks_or_pixels, block_format::cETC2_EAC_R11, 16, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); - } - else - { - write_opaque_alpha_blocks(pSlice_descs[slice_index].m_num_blocks_x, pSlice_descs[slice_index].m_num_blocks_y, (uint8_t*)pOutput_blocks + 8, output_blocks_buf_size_in_blocks_or_pixels, block_format::cETC2_EAC_R11, 16, output_row_pitch_in_blocks_or_pixels); - status = true; - } - - if (status) - { - // Now decode the color data to R - status = transcode_slice(pData, data_size, slice_index, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cETC2_EAC_R11, 16, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); - if (!status) - { - BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to ETC2_EAC_R11 R failed\n"); - } - } - else - { - BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to ETC2_EAC_R11 G failed\n"); - } - - break; - } - default: - { - assert(0); - BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: Invalid fmt\n"); - break; - } - } } // if (pHeader->m_tex_format == (int)basis_tex_format::cUASTC4x4) if (!status) @@ -15354,6 +20242,36 @@ namespace basist return ""; } + const char* basis_get_block_format_name(block_format fmt) + { + switch (fmt) + { + case block_format::cETC1: return "ETC1"; + case block_format::cBC1: return "BC1"; + case block_format::cPVRTC1_4_RGB: return "PVRTC1_4_RGB"; + case block_format::cPVRTC1_4_RGBA: return "PVRTC1_4_RGBA"; + case block_format::cBC7: return "BC7"; + case block_format::cETC2_RGBA: return "ETC2_RGBA"; + case block_format::cBC3: return "BC3"; + case block_format::cASTC_4x4: return "ASTC_4x4"; + case block_format::cATC_RGB: return "ATC_RGB"; + case block_format::cRGBA32: return "RGBA32"; + case block_format::cRGB565: return "RGB565"; + case block_format::cBGR565: return "BGR565"; + case block_format::cRGBA4444: return "RGBA4444"; + case block_format::cFXT1_RGB: return "FXT1_RGB"; + case block_format::cPVRTC2_4_RGB: return "PVRTC2_4_RGB"; + case block_format::cPVRTC2_4_RGBA: return "PVRTC2_4_RGBA"; + case block_format::cETC2_EAC_R11: return "ETC2_EAC_R11"; + case block_format::cETC2_EAC_RG11: return "ETC2_EAC_RG11"; + default: + assert(0); + BASISU_DEVEL_ERROR("basis_get_basisu_texture_format: Invalid fmt\n"); + break; + } + return ""; + } + const char* basis_get_texture_type_name(basis_texture_type tex_type) { switch (tex_type) @@ -16317,7 +21235,7 @@ namespace basist { uint8_t vals[5] = { 0, 0, 0, 0, 0 }; - const int limit = std::min(group_size, num_vals - group_index * group_size); + const int limit = basisu::minimum(group_size, num_vals - group_index * group_size); for (int i = 0; i < limit; i++) vals[i] = pSrc_vals[group_index * group_size + i]; @@ -16519,7 +21437,7 @@ namespace basist if (!codesize) return 0; - if ((IS_BIG_ENDIAN) || (!USE_UNALIGNED_WORD_READS) || (bit_offset >= 112)) + if ((BASISD_IS_BIG_ENDIAN) || (!BASISD_USE_UNALIGNED_WORD_READS) || (bit_offset >= 112)) { const uint8_t* pBytes = &pBuf[bit_offset >> 3U]; @@ -16573,7 +21491,7 @@ namespace basist return 0; assert(bit_offset < 112); - if ((IS_BIG_ENDIAN) || (!USE_UNALIGNED_WORD_READS)) + if ((BASISD_IS_BIG_ENDIAN) || (!BASISD_USE_UNALIGNED_WORD_READS)) { const uint8_t* pBytes = &pBuf[bit_offset >> 3U]; @@ -16903,11 +21821,16 @@ namespace basist uint64_t bits; // Read the weight bits - if ((IS_BIG_ENDIAN) || (!USE_UNALIGNED_WORD_READS)) - bits = read_bits64(blk.m_bytes, bit_ofs, std::min(64, 128 - (int)bit_ofs)); + if ((BASISD_IS_BIG_ENDIAN) || (!BASISD_USE_UNALIGNED_WORD_READS)) + bits = read_bits64(blk.m_bytes, bit_ofs, basisu::minimum(64, 128 - (int)bit_ofs)); else { +#ifdef __EMSCRIPTEN__ + bits = blk.m_dwords[2]; + bits |= (((uint64_t)blk.m_dwords[3]) << 32U); +#else bits = blk.m_qwords[1]; +#endif if (bit_ofs >= 64U) bits >>= (bit_ofs - 64U); @@ -17068,7 +21991,7 @@ namespace basist color32 endpoints[3][2]; const uint32_t total_subsets = g_uastc_mode_subsets[mode]; - const uint32_t total_comps = std::min(4U, g_uastc_mode_comps[mode]); + const uint32_t total_comps = basisu::minimum(4U, g_uastc_mode_comps[mode]); const uint32_t endpoint_range = g_uastc_mode_endpoint_ranges[mode]; const uint32_t total_planes = g_uastc_mode_planes[mode]; const uint32_t weight_bits = g_uastc_mode_weight_bits[mode]; @@ -18264,7 +23187,7 @@ namespace basist uint32_t sels[4] = { 0,0,0,0 }; const uint32_t N = 4; - for (uint32_t i = 0; i < std::min(N, (256 - c)); i++) + for (uint32_t i = 0; i < basisu::minimum(N, (256 - c)); i++) { uint32_t best_sel_e = UINT32_MAX; uint32_t best_sel = 0; @@ -18344,7 +23267,7 @@ namespace basist uint32_t sels[4] = { 0,0,0,0 }; const uint32_t N = 1; - for (uint32_t i = 0; i < std::min(N, (256 - c)); i++) + for (uint32_t i = 0; i < basisu::minimum(N, (256 - c)); i++) { uint32_t best_sel_e = UINT32_MAX; uint32_t best_sel = 0; @@ -18448,8 +23371,8 @@ namespace basist for (uint32_t x = 0; x < 4; x++) { const uint32_t v = block_y[y][x]; - low[0] = std::min(low[0], v); - high[0] = std::max(high[0], v); + low[0] = basisu::minimum(low[0], v); + high[0] = basisu::maximum(high[0], v); } } for (uint32_t y = 2; y < 4; y++) @@ -18457,8 +23380,8 @@ namespace basist for (uint32_t x = 0; x < 4; x++) { const uint32_t v = block_y[y][x]; - low[1] = std::min(low[1], v); - high[1] = std::max(high[1], v); + low[1] = basisu::minimum(low[1], v); + high[1] = basisu::maximum(high[1], v); } } } @@ -18469,8 +23392,8 @@ namespace basist for (uint32_t x = 0; x < 2; x++) { const uint32_t v = block_y[y][x]; - low[0] = std::min(low[0], v); - high[0] = std::max(high[0], v); + low[0] = basisu::minimum(low[0], v); + high[0] = basisu::maximum(high[0], v); } } for (uint32_t y = 0; y < 4; y++) @@ -18478,8 +23401,8 @@ namespace basist for (uint32_t x = 2; x < 4; x++) { const uint32_t v = block_y[y][x]; - low[1] = std::min(low[1], v); - high[1] = std::max(high[1], v); + low[1] = basisu::minimum(low[1], v); + high[1] = basisu::maximum(high[1], v); } } } @@ -18739,10 +23662,10 @@ namespace basist if ((inten_table_mask & (1 << inten)) == 0) continue; - const int t0 = std::max(low_limit, g_etc1_inten_tables[inten][0]); - const int t1 = std::max(low_limit, g_etc1_inten_tables[inten][1]); - const int t2 = std::min(high_limit, g_etc1_inten_tables[inten][2]); - const int t3 = std::min(high_limit, g_etc1_inten_tables[inten][3]); + const int t0 = basisu::maximum(low_limit, g_etc1_inten_tables[inten][0]); + const int t1 = basisu::maximum(low_limit, g_etc1_inten_tables[inten][1]); + const int t2 = basisu::minimum(high_limit, g_etc1_inten_tables[inten][2]); + const int t3 = basisu::minimum(high_limit, g_etc1_inten_tables[inten][3]); assert((t0 <= t1) && (t1 <= t2) && (t2 <= t3)); const int tv[4] = { t2, t3, t1, t0 }; @@ -18960,8 +23883,8 @@ namespace basist uint32_t min_a = 255, max_a = 0; for (uint32_t i = 0; i < 16; i++) { - min_a = std::min(min_a, pSrc_pixels[i].a); - max_a = std::max(max_a, pSrc_pixels[i].a); + min_a = basisu::minimum(min_a, pSrc_pixels[i].a); + max_a = basisu::maximum(max_a, pSrc_pixels[i].a); } if (min_a == max_a) @@ -19059,24 +23982,24 @@ namespace basist } { - uint32_t v0 = pPixels[4 * stride]; min0_v = std::min(min0_v, v0); max0_v = std::max(max0_v, v0); - uint32_t v1 = pPixels[5 * stride]; min1_v = std::min(min1_v, v1); max1_v = std::max(max1_v, v1); - uint32_t v2 = pPixels[6 * stride]; min2_v = std::min(min2_v, v2); max2_v = std::max(max2_v, v2); - uint32_t v3 = pPixels[7 * stride]; min3_v = std::min(min3_v, v3); max3_v = std::max(max3_v, v3); + uint32_t v0 = pPixels[4 * stride]; min0_v = basisu::minimum(min0_v, v0); max0_v = basisu::maximum(max0_v, v0); + uint32_t v1 = pPixels[5 * stride]; min1_v = basisu::minimum(min1_v, v1); max1_v = basisu::maximum(max1_v, v1); + uint32_t v2 = pPixels[6 * stride]; min2_v = basisu::minimum(min2_v, v2); max2_v = basisu::maximum(max2_v, v2); + uint32_t v3 = pPixels[7 * stride]; min3_v = basisu::minimum(min3_v, v3); max3_v = basisu::maximum(max3_v, v3); } { - uint32_t v0 = pPixels[8 * stride]; min0_v = std::min(min0_v, v0); max0_v = std::max(max0_v, v0); - uint32_t v1 = pPixels[9 * stride]; min1_v = std::min(min1_v, v1); max1_v = std::max(max1_v, v1); - uint32_t v2 = pPixels[10 * stride]; min2_v = std::min(min2_v, v2); max2_v = std::max(max2_v, v2); - uint32_t v3 = pPixels[11 * stride]; min3_v = std::min(min3_v, v3); max3_v = std::max(max3_v, v3); + uint32_t v0 = pPixels[8 * stride]; min0_v = basisu::minimum(min0_v, v0); max0_v = basisu::maximum(max0_v, v0); + uint32_t v1 = pPixels[9 * stride]; min1_v = basisu::minimum(min1_v, v1); max1_v = basisu::maximum(max1_v, v1); + uint32_t v2 = pPixels[10 * stride]; min2_v = basisu::minimum(min2_v, v2); max2_v = basisu::maximum(max2_v, v2); + uint32_t v3 = pPixels[11 * stride]; min3_v = basisu::minimum(min3_v, v3); max3_v = basisu::maximum(max3_v, v3); } { - uint32_t v0 = pPixels[12 * stride]; min0_v = std::min(min0_v, v0); max0_v = std::max(max0_v, v0); - uint32_t v1 = pPixels[13 * stride]; min1_v = std::min(min1_v, v1); max1_v = std::max(max1_v, v1); - uint32_t v2 = pPixels[14 * stride]; min2_v = std::min(min2_v, v2); max2_v = std::max(max2_v, v2); - uint32_t v3 = pPixels[15 * stride]; min3_v = std::min(min3_v, v3); max3_v = std::max(max3_v, v3); + uint32_t v0 = pPixels[12 * stride]; min0_v = basisu::minimum(min0_v, v0); max0_v = basisu::maximum(max0_v, v0); + uint32_t v1 = pPixels[13 * stride]; min1_v = basisu::minimum(min1_v, v1); max1_v = basisu::maximum(max1_v, v1); + uint32_t v2 = pPixels[14 * stride]; min2_v = basisu::minimum(min2_v, v2); max2_v = basisu::maximum(max2_v, v2); + uint32_t v3 = pPixels[15 * stride]; min3_v = basisu::minimum(min3_v, v3); max3_v = basisu::maximum(max3_v, v3); } const uint32_t min_v = basisu::minimum(min0_v, min1_v, min2_v, min3_v); @@ -19401,12 +24324,14 @@ namespace basist for (uint32_t i = 1; i < 16; i++) { const int r = pSrc_pixels[i].r, g = pSrc_pixels[i].g, b = pSrc_pixels[i].b; - max_r = std::max(max_r, r); max_g = std::max(max_g, g); max_b = std::max(max_b, b); - min_r = std::min(min_r, r); min_g = std::min(min_g, g); min_b = std::min(min_b, b); + max_r = basisu::maximum(max_r, r); max_g = basisu::maximum(max_g, g); max_b = basisu::maximum(max_b, b); + min_r = basisu::minimum(min_r, r); min_g = basisu::minimum(min_g, g); min_b = basisu::minimum(min_b, b); total_r += r; total_g += g; total_b += b; } - avg_r = (total_r + 8) >> 4, avg_g = (total_g + 8) >> 4, avg_b = (total_b + 8) >> 4; + avg_r = (total_r + 8) >> 4; + avg_g = (total_g + 8) >> 4; + avg_b = (total_b + 8) >> 4; int icov[6] = { 0, 0, 0, 0, 0, 0 }; for (uint32_t i = 0; i < 16; i++) @@ -19502,7 +24427,9 @@ namespace basist total_b += pSrc_pixels[i].b; } - avg_r = (total_r + 8) >> 4, avg_g = (total_g + 8) >> 4, avg_b = (total_b + 8) >> 4; + avg_r = (total_r + 8) >> 4; + avg_g = (total_g + 8) >> 4; + avg_b = (total_b + 8) >> 4; } // All selectors equal - treat it as a solid block which should always be equal or better. @@ -19629,8 +24556,8 @@ namespace basist { const int r = pSrc_pixels[i].r, g = pSrc_pixels[i].g, b = pSrc_pixels[i].b; grayscale_flag &= ((r == g) && (r == b)); - max_r = std::max(max_r, r); max_g = std::max(max_g, g); max_b = std::max(max_b, b); - min_r = std::min(min_r, r); min_g = std::min(min_g, g); min_b = std::min(min_b, b); + max_r = basisu::maximum(max_r, r); max_g = basisu::maximum(max_g, g); max_b = basisu::maximum(max_b, b); + min_r = basisu::minimum(min_r, r); min_g = basisu::minimum(min_g, g); min_b = basisu::minimum(min_b, b); total_r += r; total_g += g; total_b += b; } @@ -19653,7 +24580,9 @@ namespace basist } else { - avg_r = (total_r + 8) >> 4, avg_g = (total_g + 8) >> 4, avg_b = (total_b + 8) >> 4; + avg_r = (total_r + 8) >> 4; + avg_g = (total_g + 8) >> 4; + avg_b = (total_b + 8) >> 4; // Find the shortest vector from a AABB corner to the block's average color. // This is to help avoid outliers. @@ -19665,25 +24594,25 @@ namespace basist uint32_t min_d0 = (dist[0][0] + dist[1][0] + dist[2][0]); uint32_t d4 = (dist[0][0] + dist[1][0] + dist[2][1]) | 4; - min_d0 = std::min(min_d0, d4); + min_d0 = basisu::minimum(min_d0, d4); uint32_t min_d1 = (dist[0][1] + dist[1][0] + dist[2][0]) | 1; uint32_t d5 = (dist[0][1] + dist[1][0] + dist[2][1]) | 5; - min_d1 = std::min(min_d1, d5); + min_d1 = basisu::minimum(min_d1, d5); uint32_t d2 = (dist[0][0] + dist[1][1] + dist[2][0]) | 2; - min_d0 = std::min(min_d0, d2); + min_d0 = basisu::minimum(min_d0, d2); uint32_t d3 = (dist[0][1] + dist[1][1] + dist[2][0]) | 3; - min_d1 = std::min(min_d1, d3); + min_d1 = basisu::minimum(min_d1, d3); uint32_t d6 = (dist[0][0] + dist[1][1] + dist[2][1]) | 6; - min_d0 = std::min(min_d0, d6); + min_d0 = basisu::minimum(min_d0, d6); uint32_t d7 = (dist[0][1] + dist[1][1] + dist[2][1]) | 7; - min_d1 = std::min(min_d1, d7); + min_d1 = basisu::minimum(min_d1, d7); - uint32_t min_d = std::min(min_d0, min_d1); + uint32_t min_d = basisu::minimum(min_d0, min_d1); uint32_t best_i = min_d & 7; int delta_r = (best_i & 1) ? (max_r - avg_r) : (avg_r - min_r); @@ -19763,20 +24692,29 @@ namespace basist } } - low_c = low_dot0 & 15, high_c = ~high_dot0 & 15; + low_c = low_dot0 & 15; + high_c = ~high_dot0 & 15; uint32_t r = (high_dot0 & ~15) - (low_dot0 & ~15); uint32_t tr = (high_dot1 & ~15) - (low_dot1 & ~15); - if (tr > r) - low_c = low_dot1 & 15, high_c = ~high_dot1 & 15, r = tr; + if (tr > r) { + low_c = low_dot1 & 15; + high_c = ~high_dot1 & 15; + r = tr; + } tr = (high_dot2 & ~15) - (low_dot2 & ~15); - if (tr > r) - low_c = low_dot2 & 15, high_c = ~high_dot2 & 15, r = tr; + if (tr > r) { + low_c = low_dot2 & 15; + high_c = ~high_dot2 & 15; + r = tr; + } tr = (high_dot3 & ~15) - (low_dot3 & ~15); - if (tr > r) - low_c = low_dot3 & 15, high_c = ~high_dot3 & 15; + if (tr > r) { + low_c = low_dot3 & 15; + high_c = ~high_dot3 & 15; + } } lr = to_5(pSrc_pixels[low_c].r); @@ -19810,7 +24748,9 @@ namespace basist total_b += pSrc_pixels[i].b; } - avg_r = (total_r + 8) >> 4, avg_g = (total_g + 8) >> 4, avg_b = (total_b + 8) >> 4; + avg_r = (total_r + 8) >> 4; + avg_g = (total_g + 8) >> 4; + avg_b = (total_b + 8) >> 4; } // All selectors equal - treat it as a solid block which should always be equal or better. @@ -20257,10 +25197,10 @@ namespace basist const int v2 = clamp255(mul[2] * g_eac_modifier_table[T2][s] + base[2]); const int v3 = clamp255(mul[3] * g_eac_modifier_table[T3][s] + base[3]); - l0 = std::min(l0, (basisu::iabs(v0 - a) << 3) | s); - l1 = std::min(l1, (basisu::iabs(v1 - a) << 3) | s); - l2 = std::min(l2, (basisu::iabs(v2 - a) << 3) | s); - l3 = std::min(l3, (basisu::iabs(v3 - a) << 3) | s); + l0 = basisu::minimum(l0, (basisu::iabs(v0 - a) << 3) | s); + l1 = basisu::minimum(l1, (basisu::iabs(v1 - a) << 3) | s); + l2 = basisu::minimum(l2, (basisu::iabs(v2 - a) << 3) | s); + l3 = basisu::minimum(l3, (basisu::iabs(v3 - a) << 3) | s); } } else if (mul_or == 1) @@ -20274,10 +25214,10 @@ namespace basist const int v2 = g_eac_modifier_table[T2][s] + a2; const int v3 = g_eac_modifier_table[T3][s] + a3; - l0 = std::min(l0, (basisu::iabs(v0) << 3) | s); - l1 = std::min(l1, (basisu::iabs(v1) << 3) | s); - l2 = std::min(l2, (basisu::iabs(v2) << 3) | s); - l3 = std::min(l3, (basisu::iabs(v3) << 3) | s); + l0 = basisu::minimum(l0, (basisu::iabs(v0) << 3) | s); + l1 = basisu::minimum(l1, (basisu::iabs(v1) << 3) | s); + l2 = basisu::minimum(l2, (basisu::iabs(v2) << 3) | s); + l3 = basisu::minimum(l3, (basisu::iabs(v3) << 3) | s); } } else @@ -20291,10 +25231,10 @@ namespace basist const int v2 = mul[2] * g_eac_modifier_table[T2][s] + a2; const int v3 = mul[3] * g_eac_modifier_table[T3][s] + a3; - l0 = std::min(l0, (basisu::iabs(v0) << 3) | s); - l1 = std::min(l1, (basisu::iabs(v1) << 3) | s); - l2 = std::min(l2, (basisu::iabs(v2) << 3) | s); - l3 = std::min(l3, (basisu::iabs(v3) << 3) | s); + l0 = basisu::minimum(l0, (basisu::iabs(v0) << 3) | s); + l1 = basisu::minimum(l1, (basisu::iabs(v1) << 3) | s); + l2 = basisu::minimum(l2, (basisu::iabs(v2) << 3) | s); + l3 = basisu::minimum(l3, (basisu::iabs(v3) << 3) | s); } } @@ -20413,13 +25353,13 @@ namespace basist else { uint32_t l = basisu::iabs(clamp255(m * pTable[0] + b) - a) << 3; - l = std::min(l, (basisu::iabs(clamp255(m * pTable[1] + b) - a) << 3) | 1); - l = std::min(l, (basisu::iabs(clamp255(m * pTable[2] + b) - a) << 3) | 2); - l = std::min(l, (basisu::iabs(clamp255(m * pTable[3] + b) - a) << 3) | 3); - l = std::min(l, (basisu::iabs(clamp255(m * pTable[4] + b) - a) << 3) | 4); - l = std::min(l, (basisu::iabs(clamp255(m * pTable[5] + b) - a) << 3) | 5); - l = std::min(l, (basisu::iabs(clamp255(m * pTable[6] + b) - a) << 3) | 6); - l = std::min(l, (basisu::iabs(clamp255(m * pTable[7] + b) - a) << 3) | 7); + l = basisu::minimum(l, (basisu::iabs(clamp255(m * pTable[1] + b) - a) << 3) | 1); + l = basisu::minimum(l, (basisu::iabs(clamp255(m * pTable[2] + b) - a) << 3) | 2); + l = basisu::minimum(l, (basisu::iabs(clamp255(m * pTable[3] + b) - a) << 3) | 3); + l = basisu::minimum(l, (basisu::iabs(clamp255(m * pTable[4] + b) - a) << 3) | 4); + l = basisu::minimum(l, (basisu::iabs(clamp255(m * pTable[5] + b) - a) << 3) | 5); + l = basisu::minimum(l, (basisu::iabs(clamp255(m * pTable[6] + b) - a) << 3) | 6); + l = basisu::minimum(l, (basisu::iabs(clamp255(m * pTable[7] + b) - a) << 3) | 7); sels[table][i] = l & 7; total_err[table] += basisu::square(l >> 3); @@ -20848,7 +25788,7 @@ namespace basist if (!basisu::is_pow2(width) || !basisu::is_pow2(height)) return false; - std::vector temp_endpoints(num_blocks_x * num_blocks_y); + basisu::vector temp_endpoints(num_blocks_x * num_blocks_y); for (uint32_t y = 0; y < num_blocks_y; y++) { @@ -20866,8 +25806,8 @@ namespace basist uint32_t low_a = 255, high_a = 0; for (uint32_t i = 0; i < 16; i++) { - low_a = std::min(low_a, block_pixels[i].a); - high_a = std::max(high_a, block_pixels[i].a); + low_a = basisu::minimum(low_a, block_pixels[i].a); + high_a = basisu::maximum(high_a, block_pixels[i].a); } low_color.set(low_a, low_a, low_a, 255); high_color.set(high_a, high_a, high_a, 255); @@ -20907,7 +25847,7 @@ namespace basist if (!basisu::is_pow2(width) || !basisu::is_pow2(height)) return false; - std::vector temp_endpoints(num_blocks_x * num_blocks_y); + basisu::vector temp_endpoints(num_blocks_x * num_blocks_y); for (uint32_t y = 0; y < num_blocks_y; y++) { @@ -21033,12 +25973,891 @@ namespace basist #endif // #if BASISD_SUPPORT_UASTC +// ------------------------------------------------------------------------------------------------------ +// KTX2 +// ------------------------------------------------------------------------------------------------------ + +#if BASISD_SUPPORT_KTX2 + const uint8_t g_ktx2_file_identifier[12] = { 0xAB, 0x4B, 0x54, 0x58, 0x20, 0x32, 0x30, 0xBB, 0x0D, 0x0A, 0x1A, 0x0A }; + + ktx2_transcoder::ktx2_transcoder() : + m_etc1s_transcoder() + { + clear(); + } + + void ktx2_transcoder::clear() + { + m_pData = nullptr; + m_data_size = 0; + + memset(&m_header, 0, sizeof(m_header)); + m_levels.clear(); + m_dfd.clear(); + m_key_values.clear(); + memset(&m_etc1s_header, 0, sizeof(m_etc1s_header)); + m_etc1s_image_descs.clear(); + + m_format = basist::basis_tex_format::cETC1S; + + m_dfd_color_model = 0; + m_dfd_color_prims = KTX2_DF_PRIMARIES_UNSPECIFIED; + m_dfd_transfer_func = 0; + m_dfd_flags = 0; + m_dfd_samples = 0; + m_dfd_chan0 = KTX2_DF_CHANNEL_UASTC_RGB; + m_dfd_chan1 = KTX2_DF_CHANNEL_UASTC_RGB; + + m_etc1s_transcoder.clear(); + + m_def_transcoder_state.clear(); + + m_has_alpha = false; + m_is_video = false; + } + + bool ktx2_transcoder::init(const void* pData, uint32_t data_size) + { + clear(); + + if (!pData) + { + BASISU_DEVEL_ERROR("ktx2_transcoder::init: pData is nullptr\n"); + assert(0); + return false; + } + + if (data_size <= sizeof(ktx2_header)) + { + BASISU_DEVEL_ERROR("ktx2_transcoder::init: File is impossibly too small to be a valid KTX2 file\n"); + return false; + } + + if (memcmp(pData, g_ktx2_file_identifier, sizeof(g_ktx2_file_identifier)) != 0) + { + BASISU_DEVEL_ERROR("ktx2_transcoder::init: KTX2 file identifier is not present\n"); + return false; + } + + m_pData = static_cast(pData); + m_data_size = data_size; + + memcpy(&m_header, pData, sizeof(m_header)); + + // We only support UASTC and ETC1S + if (m_header.m_vk_format != KTX2_VK_FORMAT_UNDEFINED) + { + BASISU_DEVEL_ERROR("ktx2_transcoder::init: KTX2 file must be in ETC1S or UASTC format\n"); + return false; + } + + // 3.3: "When format is VK_FORMAT_UNDEFINED, typeSize must equal 1." + if (m_header.m_type_size != 1) + { + BASISU_DEVEL_ERROR("ktx2_transcoder::init: Invalid type_size\n"); + return false; + } + + // We only currently support 2D textures (plain, cubemapped, or texture array), which is by far the most common use case. + // The BasisU library does not support 1D or 3D textures at all. + if ((m_header.m_pixel_width < 1) || (m_header.m_pixel_height < 1) || (m_header.m_pixel_depth > 0)) + { + BASISU_DEVEL_ERROR("ktx2_transcoder::init: Only 2D or cubemap textures are supported\n"); + return false; + } + + // Face count must be 1 or 6 + if ((m_header.m_face_count != 1) && (m_header.m_face_count != 6)) + { + BASISU_DEVEL_ERROR("ktx2_transcoder::init: Invalid face count, file is corrupted or invalid\n"); + return false; + } + + if (m_header.m_face_count > 1) + { + // 3.4: Make sure cubemaps are square. + if (m_header.m_pixel_width != m_header.m_pixel_height) + { + BASISU_DEVEL_ERROR("ktx2_transcoder::init: Cubemap is not square\n"); + return false; + } + } + + // 3.7 levelCount: "levelCount=0 is allowed, except for block-compressed formats" + if (m_header.m_level_count < 1) + { + BASISU_DEVEL_ERROR("ktx2_transcoder::init: Invalid level count\n"); + return false; + } + + // Sanity check the level count. + if (m_header.m_level_count > KTX2_MAX_SUPPORTED_LEVEL_COUNT) + { + BASISU_DEVEL_ERROR("ktx2_transcoder::init: Too many levels or file is corrupted or invalid\n"); + return false; + } + + if (m_header.m_supercompression_scheme > KTX2_SS_ZSTANDARD) + { + BASISU_DEVEL_ERROR("ktx2_transcoder::init: Invalid/unsupported supercompression or file is corrupted or invalid\n"); + return false; + } + + if (m_header.m_supercompression_scheme == KTX2_SS_BASISLZ) + { + if (m_header.m_sgd_byte_length <= sizeof(ktx2_etc1s_global_data_header)) + { + BASISU_DEVEL_ERROR("ktx2_transcoder::init: Supercompression global data is too small\n"); + return false; + } + + if (m_header.m_sgd_byte_offset < sizeof(ktx2_header)) + { + BASISU_DEVEL_ERROR("ktx2_transcoder::init: Supercompression global data offset is too low\n"); + return false; + } + + if (m_header.m_sgd_byte_offset + m_header.m_sgd_byte_length > m_data_size) + { + BASISU_DEVEL_ERROR("ktx2_transcoder::init: Supercompression global data offset and/or length is too high\n"); + return false; + } + } + + if (!m_levels.try_resize(m_header.m_level_count)) + { + BASISU_DEVEL_ERROR("ktx2_transcoder::init: Out of memory\n"); + return false; + } + + const uint32_t level_index_size_in_bytes = basisu::maximum(1U, (uint32_t)m_header.m_level_count) * sizeof(ktx2_level_index); + + if ((sizeof(ktx2_header) + level_index_size_in_bytes) > m_data_size) + { + BASISU_DEVEL_ERROR("ktx2_transcoder::init: File is too small (can't read level index array)\n"); + return false; + } + + memcpy(&m_levels[0], m_pData + sizeof(ktx2_header), level_index_size_in_bytes); + + // Sanity check the level offsets and byte sizes + for (uint32_t i = 0; i < m_levels.size(); i++) + { + if (m_levels[i].m_byte_offset < sizeof(ktx2_header)) + { + BASISU_DEVEL_ERROR("ktx2_transcoder::init: Invalid level offset (too low)\n"); + return false; + } + + if (!m_levels[i].m_byte_length) + { + BASISU_DEVEL_ERROR("ktx2_transcoder::init: Invalid level byte length\n"); + } + + if ((m_levels[i].m_byte_offset + m_levels[i].m_byte_length) > m_data_size) + { + BASISU_DEVEL_ERROR("ktx2_transcoder::init: Invalid level offset and/or length\n"); + return false; + } + + const uint64_t MAX_SANE_LEVEL_UNCOMP_SIZE = 2048ULL * 1024ULL * 1024ULL; + + if (m_levels[i].m_uncompressed_byte_length >= MAX_SANE_LEVEL_UNCOMP_SIZE) + { + BASISU_DEVEL_ERROR("ktx2_transcoder::init: Invalid level offset (too large)\n"); + return false; + } + + if (m_header.m_supercompression_scheme == KTX2_SS_BASISLZ) + { + if (m_levels[i].m_uncompressed_byte_length) + { + BASISU_DEVEL_ERROR("ktx2_transcoder::init: Invalid uncompressed length (0)\n"); + return false; + } + } + else if (m_header.m_supercompression_scheme >= KTX2_SS_ZSTANDARD) + { + if (!m_levels[i].m_uncompressed_byte_length) + { + BASISU_DEVEL_ERROR("ktx2_transcoder::init: Invalid uncompressed length (1)\n"); + return false; + } + } + } + + const uint32_t DFD_MINIMUM_SIZE = 44, DFD_MAXIMUM_SIZE = 60; + if ((m_header.m_dfd_byte_length != DFD_MINIMUM_SIZE) && (m_header.m_dfd_byte_length != DFD_MAXIMUM_SIZE)) + { + BASISU_DEVEL_ERROR("ktx2_transcoder::init: Unsupported DFD size\n"); + return false; + } + + if (((m_header.m_dfd_byte_offset + m_header.m_dfd_byte_length) > m_data_size) || (m_header.m_dfd_byte_offset < sizeof(ktx2_header))) + { + BASISU_DEVEL_ERROR("ktx2_transcoder::init: Invalid DFD offset and/or length\n"); + return false; + } + + const uint8_t* pDFD = m_pData + m_header.m_dfd_byte_offset; + + if (!m_dfd.try_resize(m_header.m_dfd_byte_length)) + { + BASISU_DEVEL_ERROR("ktx2_transcoder::init: Out of memory\n"); + return false; + } + + memcpy(m_dfd.data(), pDFD, m_header.m_dfd_byte_length); + + // This is all hard coded for only ETC1S and UASTC. + uint32_t dfd_total_size = basisu::read_le_dword(pDFD); + + // 3.10.3: Sanity check + if (dfd_total_size != m_header.m_dfd_byte_length) + { + BASISU_DEVEL_ERROR("ktx2_transcoder::init: DFD size validation failed (1)\n"); + return false; + } + + // 3.10.3: More sanity checking + if (m_header.m_kvd_byte_length) + { + if (dfd_total_size != m_header.m_kvd_byte_offset - m_header.m_dfd_byte_offset) + { + BASISU_DEVEL_ERROR("ktx2_transcoder::init: DFD size validation failed (2)\n"); + return false; + } + } + + const uint32_t dfd_bits = basisu::read_le_dword(pDFD + 3 * sizeof(uint32_t)); + const uint32_t sample_channel0 = basisu::read_le_dword(pDFD + 7 * sizeof(uint32_t)); + + m_dfd_color_model = dfd_bits & 255; + m_dfd_color_prims = (ktx2_df_color_primaries)((dfd_bits >> 8) & 255); + m_dfd_transfer_func = (dfd_bits >> 16) & 255; + m_dfd_flags = (dfd_bits >> 24) & 255; + + // See 3.10.1.Restrictions + if ((m_dfd_transfer_func != KTX2_KHR_DF_TRANSFER_LINEAR) && (m_dfd_transfer_func != KTX2_KHR_DF_TRANSFER_SRGB)) + { + BASISU_DEVEL_ERROR("ktx2_transcoder::init: Invalid DFD transfer function\n"); + return false; + } + + if (m_dfd_color_model == KTX2_KDF_DF_MODEL_ETC1S) + { + m_format = basist::basis_tex_format::cETC1S; + + // 3.10.2: "Whether the image has 1 or 2 slices can be determined from the DFD’s sample count." + // If m_has_alpha is true it may be 2-channel RRRG or 4-channel RGBA, but we let the caller deal with that. + m_has_alpha = (m_header.m_dfd_byte_length == 60); + + m_dfd_samples = m_has_alpha ? 2 : 1; + m_dfd_chan0 = (ktx2_df_channel_id)((sample_channel0 >> 24) & 15); + + if (m_has_alpha) + { + const uint32_t sample_channel1 = basisu::read_le_dword(pDFD + 11 * sizeof(uint32_t)); + m_dfd_chan1 = (ktx2_df_channel_id)((sample_channel1 >> 24) & 15); + } + } + else if (m_dfd_color_model == KTX2_KDF_DF_MODEL_UASTC) + { + m_format = basist::basis_tex_format::cUASTC4x4; + + m_dfd_samples = 1; + m_dfd_chan0 = (ktx2_df_channel_id)((sample_channel0 >> 24) & 15); + + // We're assuming "DATA" means RGBA so it has alpha. + m_has_alpha = (m_dfd_chan0 == KTX2_DF_CHANNEL_UASTC_RGBA) || (m_dfd_chan0 == KTX2_DF_CHANNEL_UASTC_RRRG); + } + else + { + // Unsupported DFD color model. + BASISU_DEVEL_ERROR("ktx2_transcoder::init: Unsupported DFD color model\n"); + return false; + } + + if (!read_key_values()) + { + BASISU_DEVEL_ERROR("ktx2_transcoder::init: read_key_values() failed\n"); + return false; + } + + // Check for a KTXanimData key + for (uint32_t i = 0; i < m_key_values.size(); i++) + { + if (strcmp(reinterpret_cast(m_key_values[i].m_key.data()), "KTXanimData") == 0) + { + m_is_video = true; + break; + } + } + + return true; + } + + uint32_t ktx2_transcoder::get_etc1s_image_descs_image_flags(uint32_t level_index, uint32_t layer_index, uint32_t face_index) const + { + const uint32_t etc1s_image_index = + (level_index * basisu::maximum(m_header.m_layer_count, 1) * m_header.m_face_count) + + layer_index * m_header.m_face_count + + face_index; + + if (etc1s_image_index >= get_etc1s_image_descs().size()) + { + assert(0); + return 0; + } + + return get_etc1s_image_descs()[etc1s_image_index].m_image_flags; + } + + const basisu::uint8_vec* ktx2_transcoder::find_key(const std::string& key_name) const + { + for (uint32_t i = 0; i < m_key_values.size(); i++) + if (strcmp((const char *)m_key_values[i].m_key.data(), key_name.c_str()) == 0) + return &m_key_values[i].m_value; + + return nullptr; + } + + bool ktx2_transcoder::start_transcoding() + { + if (!m_pData) + { + BASISU_DEVEL_ERROR("ktx2_transcoder::start_transcoding: Must call init() first\n"); + return false; + } + + if (m_header.m_supercompression_scheme == KTX2_SS_BASISLZ) + { + // Check if we've already decompressed the ETC1S global data. If so don't unpack it again. + if (!m_etc1s_transcoder.get_endpoints().empty()) + return true; + + if (!decompress_etc1s_global_data()) + { + BASISU_DEVEL_ERROR("ktx2_transcoder::start_transcoding: decompress_etc1s_global_data() failed\n"); + return false; + } + + if (!m_is_video) + { + // See if there are any P-frames. If so it must be a video, even if there wasn't a KTXanimData key. + // Video cannot be a cubemap, and it must be a texture array. + if ((m_header.m_face_count == 1) && (m_header.m_layer_count > 1)) + { + for (uint32_t i = 0; i < m_etc1s_image_descs.size(); i++) + { + if (m_etc1s_image_descs[i].m_image_flags & KTX2_IMAGE_IS_P_FRAME) + { + m_is_video = true; + break; + } + } + } + } + } + else if (m_header.m_supercompression_scheme == KTX2_SS_ZSTANDARD) + { +#if !BASISD_SUPPORT_KTX2_ZSTD + BASISU_DEVEL_ERROR("ktx2_transcoder::start_transcoding: File uses zstd supercompression, but zstd support was not enabled at compilation time (BASISD_SUPPORT_KTX2_ZSTD == 0)\n"); + return false; +#endif + } + + return true; + } + + bool ktx2_transcoder::get_image_level_info(ktx2_image_level_info& level_info, uint32_t level_index, uint32_t layer_index, uint32_t face_index) const + { + if (level_index >= m_levels.size()) + { + BASISU_DEVEL_ERROR("ktx2_transcoder::get_image_level_info: level_index >= m_levels.size()\n"); + return false; + } + + if (m_header.m_face_count > 1) + { + if (face_index >= 6) + { + BASISU_DEVEL_ERROR("ktx2_transcoder::get_image_level_info: face_index >= 6\n"); + return false; + } + } + else if (face_index != 0) + { + BASISU_DEVEL_ERROR("ktx2_transcoder::get_image_level_info: face_index != 0\n"); + return false; + } + + if (layer_index >= basisu::maximum(m_header.m_layer_count, 1)) + { + BASISU_DEVEL_ERROR("ktx2_transcoder::get_image_level_info: layer_index >= maximum(m_header.m_layer_count, 1)\n"); + return false; + } + + const uint32_t level_width = basisu::maximum(m_header.m_pixel_width >> level_index, 1); + const uint32_t level_height = basisu::maximum(m_header.m_pixel_height >> level_index, 1); + const uint32_t num_blocks_x = (level_width + 3) >> 2; + const uint32_t num_blocks_y = (level_height + 3) >> 2; + + level_info.m_face_index = face_index; + level_info.m_layer_index = layer_index; + level_info.m_level_index = level_index; + level_info.m_orig_width = level_width; + level_info.m_orig_height = level_height; + level_info.m_width = num_blocks_x * 4; + level_info.m_height = num_blocks_y * 4; + level_info.m_num_blocks_x = num_blocks_x; + level_info.m_num_blocks_y = num_blocks_y; + level_info.m_total_blocks = num_blocks_x * num_blocks_y; + level_info.m_alpha_flag = m_has_alpha; + level_info.m_iframe_flag = false; + if (m_etc1s_image_descs.size()) + { + const uint32_t etc1s_image_index = + (level_index * basisu::maximum(m_header.m_layer_count, 1) * m_header.m_face_count) + + layer_index * m_header.m_face_count + + face_index; + + level_info.m_iframe_flag = (m_etc1s_image_descs[etc1s_image_index].m_image_flags & KTX2_IMAGE_IS_P_FRAME) == 0; + } + + return true; + } + + bool ktx2_transcoder::transcode_image_level( + uint32_t level_index, uint32_t layer_index, uint32_t face_index, + void* pOutput_blocks, uint32_t output_blocks_buf_size_in_blocks_or_pixels, + basist::transcoder_texture_format fmt, + uint32_t decode_flags, uint32_t output_row_pitch_in_blocks_or_pixels, uint32_t output_rows_in_pixels, int channel0, int channel1, + ktx2_transcoder_state* pState) + { + if (!m_pData) + { + BASISU_DEVEL_ERROR("ktx2_transcoder::transcode_image_2D: Must call init() first\n"); + return false; + } + + if (!pState) + pState = &m_def_transcoder_state; + + if (level_index >= m_levels.size()) + { + BASISU_DEVEL_ERROR("ktx2_transcoder::transcode_image_2D: level_index >= m_levels.size()\n"); + return false; + } + + if (m_header.m_face_count > 1) + { + if (face_index >= 6) + { + BASISU_DEVEL_ERROR("ktx2_transcoder::transcode_image_2D: face_index >= 6\n"); + return false; + } + } + else if (face_index != 0) + { + BASISU_DEVEL_ERROR("ktx2_transcoder::transcode_image_2D: face_index != 0\n"); + return false; + } + + if (layer_index >= basisu::maximum(m_header.m_layer_count, 1)) + { + BASISU_DEVEL_ERROR("ktx2_transcoder::transcode_image_2D: layer_index >= maximum(m_header.m_layer_count, 1)\n"); + return false; + } + + const uint8_t* pComp_level_data = m_pData + m_levels[level_index].m_byte_offset; + uint64_t comp_level_data_size = m_levels[level_index].m_byte_length; + + const uint8_t* pUncomp_level_data = pComp_level_data; + uint64_t uncomp_level_data_size = comp_level_data_size; + + if (uncomp_level_data_size > UINT32_MAX) + { + BASISU_DEVEL_ERROR("ktx2_transcoder::transcode_image_2D: uncomp_level_data_size > UINT32_MAX\n"); + return false; + } + + if (m_header.m_supercompression_scheme == KTX2_SS_ZSTANDARD) + { + // Check if we've already decompressed this level's supercompressed data. + if ((int)level_index != pState->m_uncomp_data_level_index) + { + // Uncompress the entire level's supercompressed data. + if (!decompress_level_data(level_index, pState->m_level_uncomp_data)) + { + BASISU_DEVEL_ERROR("ktx2_transcoder::transcode_image_2D: decompress_level_data() failed\n"); + return false; + } + pState->m_uncomp_data_level_index = level_index; + } + + pUncomp_level_data = pState->m_level_uncomp_data.data(); + uncomp_level_data_size = pState->m_level_uncomp_data.size(); + } + + const uint32_t level_width = basisu::maximum(m_header.m_pixel_width >> level_index, 1); + const uint32_t level_height = basisu::maximum(m_header.m_pixel_height >> level_index, 1); + const uint32_t num_blocks_x = (level_width + 3) >> 2; + const uint32_t num_blocks_y = (level_height + 3) >> 2; + + if (m_format == basist::basis_tex_format::cETC1S) + { + // Ensure start_transcoding() was called. + if (m_etc1s_transcoder.get_endpoints().empty()) + { + BASISU_DEVEL_ERROR("ktx2_transcoder::transcode_image_2D: must call start_transcoding() first\n"); + return false; + } + + const uint32_t etc1s_image_index = + (level_index * basisu::maximum(m_header.m_layer_count, 1) * m_header.m_face_count) + + layer_index * m_header.m_face_count + + face_index; + + // Sanity check + if (etc1s_image_index >= m_etc1s_image_descs.size()) + { + BASISU_DEVEL_ERROR("ktx2_transcoder::transcode_image_2D: etc1s_image_index >= m_etc1s_image_descs.size()\n"); + assert(0); + return false; + } + + if (static_cast(m_data_size) != m_data_size) + { + BASISU_DEVEL_ERROR("ktx2_transcoder::transcode_image_2D: File is too large\n"); + return false; + } + + const ktx2_etc1s_image_desc& image_desc = m_etc1s_image_descs[etc1s_image_index]; + + if (!m_etc1s_transcoder.transcode_image(fmt, + pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, m_pData, static_cast(m_data_size), + num_blocks_x, num_blocks_y, level_width, level_height, + level_index, + m_levels[level_index].m_byte_offset + image_desc.m_rgb_slice_byte_offset, image_desc.m_rgb_slice_byte_length, + image_desc.m_alpha_slice_byte_length ? (m_levels[level_index].m_byte_offset + image_desc.m_alpha_slice_byte_offset) : 0, image_desc.m_alpha_slice_byte_length, + decode_flags, m_has_alpha, + m_is_video, output_row_pitch_in_blocks_or_pixels, &pState->m_transcoder_state, output_rows_in_pixels)) + { + BASISU_DEVEL_ERROR("ktx2_transcoder::transcode_image_2D: ETC1S transcode_image() failed, this is either a bug or the file is corrupted/invalid\n"); + return false; + } + } + else if (m_format == basist::basis_tex_format::cUASTC4x4) + { + // Compute length and offset to uncompressed 2D UASTC texture data, given the face/layer indices. + assert(uncomp_level_data_size == m_levels[level_index].m_uncompressed_byte_length); + const uint32_t total_2D_image_size = num_blocks_x * num_blocks_y * KTX2_UASTC_BLOCK_SIZE; + + const uint32_t uncomp_ofs = (layer_index * m_header.m_face_count + face_index) * total_2D_image_size; + + // Sanity checks + if (uncomp_ofs >= uncomp_level_data_size) + { + BASISU_DEVEL_ERROR("ktx2_transcoder::transcode_image_2D: uncomp_ofs >= total_2D_image_size\n"); + return false; + } + + if ((uncomp_level_data_size - uncomp_ofs) < total_2D_image_size) + { + BASISU_DEVEL_ERROR("ktx2_transcoder::transcode_image_2D: (uncomp_level_data_size - uncomp_ofs) < total_2D_image_size\n"); + return false; + } + + if (!m_uastc_transcoder.transcode_image(fmt, + pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, + (const uint8_t*)pUncomp_level_data + uncomp_ofs, (uint32_t)total_2D_image_size, num_blocks_x, num_blocks_y, level_width, level_height, level_index, + 0, (uint32_t)total_2D_image_size, + decode_flags, m_has_alpha, m_is_video, output_row_pitch_in_blocks_or_pixels, nullptr, output_rows_in_pixels, channel0, channel1)) + { + BASISU_DEVEL_ERROR("ktx2_transcoder::transcode_image_2D: UASTC transcode_image() failed, this is either a bug or the file is corrupted/invalid\n"); + return false; + } + } + else + { + // Shouldn't get here. + BASISU_DEVEL_ERROR("ktx2_transcoder::transcode_image_2D: Internal error\n"); + assert(0); + return false; + } + + return true; + } + + bool ktx2_transcoder::decompress_level_data(uint32_t level_index, basisu::uint8_vec& uncomp_data) + { + const uint8_t* pComp_data = m_levels[level_index].m_byte_offset + m_pData; + const uint64_t comp_size = m_levels[level_index].m_byte_length; + + const uint64_t uncomp_size = m_levels[level_index].m_uncompressed_byte_length; + + if (((size_t)comp_size) != comp_size) + { + BASISU_DEVEL_ERROR("ktx2_transcoder::decompress_level_data: Compressed data too large\n"); + return false; + } + if (((size_t)uncomp_size) != uncomp_size) + { + BASISU_DEVEL_ERROR("ktx2_transcoder::decompress_level_data: Uncompressed data too large\n"); + return false; + } + + if (!uncomp_data.try_resize((size_t)uncomp_size)) + { + BASISU_DEVEL_ERROR("ktx2_transcoder::decompress_level_data: Out of memory\n"); + return false; + } + + if (m_header.m_supercompression_scheme == KTX2_SS_ZSTANDARD) + { +#if BASISD_SUPPORT_KTX2_ZSTD + size_t actualUncompSize = ZSTD_decompress(uncomp_data.data(), (size_t)uncomp_size, pComp_data, (size_t)comp_size); + if (ZSTD_isError(actualUncompSize)) + { + BASISU_DEVEL_ERROR("ktx2_transcoder::decompress_level_data: Zstd decompression failed, file is invalid or corrupted\n"); + return false; + } + if (actualUncompSize != uncomp_size) + { + BASISU_DEVEL_ERROR("ktx2_transcoder::decompress_level_data: Zstd decompression returned too few bytes, file is invalid or corrupted\n"); + return false; + } +#else + BASISU_DEVEL_ERROR("ktx2_transcoder::decompress_level_data: File uses Zstd supercompression, but Zstd support was not enabled at compile time (BASISD_SUPPORT_KTX2_ZSTD is 0)\n"); + return false; +#endif + } + + return true; + } + + bool ktx2_transcoder::decompress_etc1s_global_data() + { + // Note: we don't actually support 3D textures in here yet + //uint32_t layer_pixel_depth = basisu::maximum(m_header.m_pixel_depth, 1); + //for (uint32_t i = 1; i < m_header.m_level_count; i++) + // layer_pixel_depth += basisu::maximum(m_header.m_pixel_depth >> i, 1); + + const uint32_t image_count = basisu::maximum(m_header.m_layer_count, 1) * m_header.m_face_count * m_header.m_level_count; + assert(image_count); + + const uint8_t* pSrc = m_pData + m_header.m_sgd_byte_offset; + + memcpy(&m_etc1s_header, pSrc, sizeof(ktx2_etc1s_global_data_header)); + pSrc += sizeof(ktx2_etc1s_global_data_header); + + if ((!m_etc1s_header.m_endpoints_byte_length) || (!m_etc1s_header.m_selectors_byte_length) || (!m_etc1s_header.m_tables_byte_length)) + { + BASISU_DEVEL_ERROR("ktx2_transcoder::decompress_etc1s_global_data: Invalid ETC1S global data\n"); + return false; + } + + if ((!m_etc1s_header.m_endpoint_count) || (!m_etc1s_header.m_selector_count)) + { + BASISU_DEVEL_ERROR("ktx2_transcoder::decompress_etc1s_global_data: endpoint and/or selector count is 0, file is invalid or corrupted\n"); + return false; + } + + // Sanity check the ETC1S header. + if ((sizeof(ktx2_etc1s_global_data_header) + + sizeof(ktx2_etc1s_image_desc) * image_count + + m_etc1s_header.m_endpoints_byte_length + + m_etc1s_header.m_selectors_byte_length + + m_etc1s_header.m_tables_byte_length + + m_etc1s_header.m_extended_byte_length) > m_header.m_sgd_byte_length) + { + BASISU_DEVEL_ERROR("ktx2_transcoder::decompress_etc1s_global_data: SGD byte length is too small, file is invalid or corrupted\n"); + return false; + } + + if (!m_etc1s_image_descs.try_resize(image_count)) + { + BASISU_DEVEL_ERROR("ktx2_transcoder::decompress_etc1s_global_data: Out of memory\n"); + return false; + } + + memcpy(m_etc1s_image_descs.data(), pSrc, sizeof(ktx2_etc1s_image_desc) * image_count); + pSrc += sizeof(ktx2_etc1s_image_desc) * image_count; + + // Sanity check the ETC1S image descs + for (uint32_t i = 0; i < image_count; i++) + { + // m_etc1s_transcoder.transcode_image() will validate the slice offsets/lengths before transcoding. + + if (!m_etc1s_image_descs[i].m_rgb_slice_byte_length) + { + BASISU_DEVEL_ERROR("ktx2_transcoder::decompress_etc1s_global_data: ETC1S image descs sanity check failed (1)\n"); + return false; + } + + if (m_has_alpha) + { + if (!m_etc1s_image_descs[i].m_alpha_slice_byte_length) + { + BASISU_DEVEL_ERROR("ktx2_transcoder::decompress_etc1s_global_data: ETC1S image descs sanity check failed (2)\n"); + return false; + } + } + } + + const uint8_t* pEndpoint_data = pSrc; + const uint8_t* pSelector_data = pSrc + m_etc1s_header.m_endpoints_byte_length; + const uint8_t* pTables_data = pSrc + m_etc1s_header.m_endpoints_byte_length + m_etc1s_header.m_selectors_byte_length; + + if (!m_etc1s_transcoder.decode_tables(pTables_data, m_etc1s_header.m_tables_byte_length)) + { + BASISU_DEVEL_ERROR("ktx2_transcoder::decompress_etc1s_global_data: decode_tables() failed, file is invalid or corrupted\n"); + return false; + } + + if (!m_etc1s_transcoder.decode_palettes( + m_etc1s_header.m_endpoint_count, pEndpoint_data, m_etc1s_header.m_endpoints_byte_length, + m_etc1s_header.m_selector_count, pSelector_data, m_etc1s_header.m_selectors_byte_length)) + { + BASISU_DEVEL_ERROR("ktx2_transcoder::decompress_etc1s_global_data: decode_palettes() failed, file is likely corrupted\n"); + return false; + } + + return true; + } + + bool ktx2_transcoder::read_key_values() + { + if (!m_header.m_kvd_byte_length) + { + if (m_header.m_kvd_byte_offset) + { + BASISU_DEVEL_ERROR("ktx2_transcoder::read_key_values: Invalid KVD byte offset (it should be zero when the length is zero)\n"); + return false; + } + + return true; + } + + if (m_header.m_kvd_byte_offset < sizeof(ktx2_header)) + { + BASISU_DEVEL_ERROR("ktx2_transcoder::read_key_values: Invalid KVD byte offset\n"); + return false; + } + + if ((m_header.m_kvd_byte_offset + m_header.m_kvd_byte_length) > m_data_size) + { + BASISU_DEVEL_ERROR("ktx2_transcoder::read_key_values: Invalid KVD byte offset and/or length\n"); + return false; + } + + const uint8_t* pSrc = m_pData + m_header.m_kvd_byte_offset; + uint32_t src_left = m_header.m_kvd_byte_length; + + if (!m_key_values.try_reserve(8)) + { + BASISU_DEVEL_ERROR("ktx2_transcoder::read_key_values: Out of memory\n"); + return false; + } + + while (src_left > sizeof(uint32_t)) + { + uint32_t l = basisu::read_le_dword(pSrc); + + pSrc += sizeof(uint32_t); + src_left -= sizeof(uint32_t); + + if (l < 2) + { + BASISU_DEVEL_ERROR("ktx2_transcoder::read_key_values: Failed reading key value fields (0)\n"); + return false; + } + + if (src_left < l) + { + BASISU_DEVEL_ERROR("ktx2_transcoder::read_key_values: Failed reading key value fields (1)\n"); + return false; + } + + if (!m_key_values.try_resize(m_key_values.size() + 1)) + { + BASISU_DEVEL_ERROR("ktx2_transcoder::read_key_values: Out of memory\n"); + return false; + } + + basisu::uint8_vec& key_data = m_key_values.back().m_key; + basisu::uint8_vec& value_data = m_key_values.back().m_value; + + do + { + if (!l) + { + BASISU_DEVEL_ERROR("ktx2_transcoder::read_key_values: Failed reading key value fields (2)\n"); + return false; + } + + if (!key_data.try_push_back(*pSrc++)) + { + BASISU_DEVEL_ERROR("ktx2_transcoder::read_key_values: Out of memory\n"); + return false; + } + + src_left--; + l--; + + } while (key_data.back()); + + if (!value_data.try_resize(l)) + { + BASISU_DEVEL_ERROR("ktx2_transcoder::read_key_values: Out of memory\n"); + return false; + } + + if (l) + { + memcpy(value_data.data(), pSrc, l); + pSrc += l; + src_left -= l; + } + + uint32_t ofs = (uint32_t)(pSrc - m_pData) & 3; + uint32_t alignment_bytes = (4 - ofs) & 3; + + if (src_left < alignment_bytes) + { + BASISU_DEVEL_ERROR("ktx2_transcoder::read_key_values: Failed reading key value fields (3)\n"); + return false; + } + + pSrc += alignment_bytes; + src_left -= alignment_bytes; + } + + return true; + } + +#endif // BASISD_SUPPORT_KTX2 + + bool basisu_transcoder_supports_ktx2() + { +#if BASISD_SUPPORT_KTX2 + return true; +#else + return false; +#endif + } + + bool basisu_transcoder_supports_ktx2_zstd() + { +#if BASISD_SUPPORT_KTX2_ZSTD + return true; +#else + return false; +#endif + } + } // namespace basist - - - - - /**** ended inlining basisu_transcoder.cpp ****/ /** diff --git a/contrib/previewers/win/basisthumbprovider.cpp b/contrib/previewers/win/basisthumbprovider.cpp index 4a8c6ba..292376e 100644 --- a/contrib/previewers/win/basisthumbprovider.cpp +++ b/contrib/previewers/win/basisthumbprovider.cpp @@ -2,7 +2,7 @@ #include -#include "basisu_transcoder.h" +#include "basisu_transcoder.cpp" #include "helpers.h" @@ -10,14 +10,9 @@ using namespace basist; -static etc1_global_selector_codebook* globalCodebook = NULL; - BasisThumbProvider::BasisThumbProvider() : count(1), stream(NULL) { dprintf("BasisThumbProvider ctor"); basisu_transcoder_init(); - if (!globalCodebook) { - globalCodebook = new etc1_global_selector_codebook(g_global_selector_cb_size, g_global_selector_cb); - } } BasisThumbProvider::~BasisThumbProvider() { @@ -66,7 +61,7 @@ IFACEMETHODIMP BasisThumbProvider::GetThumbnail(UINT cx, HBITMAP *phbmp, WTS_ALP ULONG size = 0; if (SUCCEEDED(stream->Read(data, static_cast(stat.cbSize.LowPart), &size))) { if (size == stat.cbSize.LowPart) { - basisu_transcoder transcoder(globalCodebook); + basisu_transcoder transcoder; if (transcoder.validate_header(data, size)) { dprintf("Requested %d bytes for %dx%d image", size, cx, cx); basisu_image_info info; diff --git a/contrib/previewers/win/previewers.vcxproj b/contrib/previewers/win/previewers.vcxproj index 2a4b22e..ffeff96 100644 --- a/contrib/previewers/win/previewers.vcxproj +++ b/contrib/previewers/win/previewers.vcxproj @@ -165,7 +165,6 @@ - false diff --git a/contrib/previewers/win/previewers.vcxproj.filters b/contrib/previewers/win/previewers.vcxproj.filters index 9ca8c63..90f7017 100644 --- a/contrib/previewers/win/previewers.vcxproj.filters +++ b/contrib/previewers/win/previewers.vcxproj.filters @@ -34,8 +34,5 @@ src - - src - \ No newline at end of file diff --git a/contrib/single_file_transcoder/create_transcoder.sh b/contrib/single_file_transcoder/create_transcoder.sh index a041d2a..ee9a298 100755 --- a/contrib/single_file_transcoder/create_transcoder.sh +++ b/contrib/single_file_transcoder/create_transcoder.sh @@ -17,7 +17,7 @@ which cc > /dev/null if [ $? -ne 0 ]; then echo "(Skipping compile test)" else - cc -std=c++11 -lstdc++ -Wall -Wextra -Werror -Os -g0 -fno-exceptions -fno-rtti -o $OUT_FILE examples/simple.cpp + cc -lm -std=c++11 -lstdc++ -Wall -Wextra -Werror -Os -g0 -fno-exceptions -fno-rtti -o $OUT_FILE examples/simple.cpp # Did compilation work? if [ $? -ne 0 ]; then echo "Compiling simple.cpp: FAILED" diff --git a/contrib/single_file_transcoder/examples/simple.cpp b/contrib/single_file_transcoder/examples/simple.cpp index 9f61c26..64c8b09 100644 --- a/contrib/single_file_transcoder/examples/simple.cpp +++ b/contrib/single_file_transcoder/examples/simple.cpp @@ -31,20 +31,14 @@ static uint8_t const srcRgb[] = { //****************************************************************************/ -/** - * Shared codebook instance. - */ -static etc1_global_selector_codebook* globalCodebook = NULL; /** * Simple single-file test to test the transcoder can build and run. */ int main() { basisu_transcoder_init(); - if (!globalCodebook) { - globalCodebook = new etc1_global_selector_codebook(g_global_selector_cb_size, g_global_selector_cb); - } - basisu_transcoder transcoder(globalCodebook); + + basisu_transcoder transcoder; if (transcoder.validate_header(srcRgb, sizeof srcRgb)) { basisu_file_info fileInfo; if (transcoder.get_file_info(srcRgb, sizeof srcRgb, fileInfo)) { diff --git a/encoder/basisu_backend.cpp b/encoder/basisu_backend.cpp index 19911fc..abb6175 100644 --- a/encoder/basisu_backend.cpp +++ b/encoder/basisu_backend.cpp @@ -49,22 +49,17 @@ namespace basisu m_output.clear(); } - void basisu_backend::init(basisu_frontend* pFront_end, basisu_backend_params& params, const basisu_backend_slice_desc_vec& slice_descs, const basist::etc1_global_selector_codebook* pGlobal_sel_codebook) + void basisu_backend::init(basisu_frontend* pFront_end, basisu_backend_params& params, const basisu_backend_slice_desc_vec& slice_descs) { m_pFront_end = pFront_end; m_params = params; m_slices = slice_descs; - m_pGlobal_sel_codebook = pGlobal_sel_codebook; - - debug_printf("basisu_backend::Init: Slices: %u, ETC1S: %u, EndpointRDOQualityThresh: %f, SelectorRDOQualityThresh: %f, UseGlobalSelCodebook: %u, GlobalSelCodebookPalBits: %u, GlobalSelCodebookModBits: %u, Use hybrid selector codebooks: %u\n", + + debug_printf("basisu_backend::Init: Slices: %u, ETC1S: %u, EndpointRDOQualityThresh: %f, SelectorRDOQualityThresh: %f\n", m_slices.size(), params.m_etc1s, params.m_endpoint_rdo_quality_thresh, - params.m_selector_rdo_quality_thresh, - params.m_use_global_sel_codebook, - params.m_global_sel_codebook_pal_bits, - params.m_global_sel_codebook_mod_bits, - params.m_use_hybrid_sel_codebooks); + params.m_selector_rdo_quality_thresh); debug_printf("Frontend endpoints: %u selectors: %u\n", m_pFront_end->get_total_endpoint_clusters(), m_pFront_end->get_total_selector_clusters()); @@ -106,63 +101,17 @@ namespace basisu m_selector_palette.resize(r.get_total_selector_clusters()); - if (m_params.m_use_global_sel_codebook) + for (uint32_t i = 0; i < r.get_total_selector_clusters(); i++) { - m_global_selector_palette_desc.resize(r.get_total_selector_clusters()); + etc1_selector_palette_entry& s = m_selector_palette[i]; - for (int i = 0; i < static_cast(r.get_total_selector_clusters()); i++) + const etc_block& selector_bits = r.get_selector_cluster_selector_bits(i); + + for (uint32_t y = 0; y < 4; y++) { - basist::etc1_selector_palette_entry& selector_pal_entry = m_selector_palette[i]; - - etc1_global_selector_cb_entry_desc& pal_entry_desc = m_global_selector_palette_desc[i]; - pal_entry_desc.m_pal_index = r.get_selector_cluster_global_selector_entry_ids()[i].m_palette_index; - pal_entry_desc.m_mod_index = r.get_selector_cluster_global_selector_entry_ids()[i].m_modifier.get_index(); - - pal_entry_desc.m_was_used = true; - if (m_params.m_use_hybrid_sel_codebooks) - pal_entry_desc.m_was_used = r.get_selector_cluster_uses_global_cb_vec()[i]; - - if (pal_entry_desc.m_was_used) + for (uint32_t x = 0; x < 4; x++) { - const etc_block& selector_bits = r.get_selector_cluster_selector_bits(i); - (void)selector_bits; - - basist::etc1_selector_palette_entry global_pal_entry(m_pGlobal_sel_codebook->get_entry(r.get_selector_cluster_global_selector_entry_ids()[i])); - - for (uint32_t y = 0; y < 4; y++) - { - for (uint32_t x = 0; x < 4; x++) - { - selector_pal_entry(x, y) = global_pal_entry(x, y); - - assert(selector_bits.get_selector(x, y) == global_pal_entry(x, y)); - } - } - } - else - { - const etc_block& selector_bits = r.get_selector_cluster_selector_bits(i); - - for (uint32_t y = 0; y < 4; y++) - for (uint32_t x = 0; x < 4; x++) - selector_pal_entry[y * 4 + x] = static_cast(selector_bits.get_selector(x, y)); - } - } - } - else - { - for (uint32_t i = 0; i < r.get_total_selector_clusters(); i++) - { - basist::etc1_selector_palette_entry& s = m_selector_palette[i]; - - const etc_block& selector_bits = r.get_selector_cluster_selector_bits(i); - - for (uint32_t y = 0; y < 4; y++) - { - for (uint32_t x = 0; x < 4; x++) - { - s[y * 4 + x] = static_cast(selector_bits.get_selector(x, y)); - } + s[y * 4 + x] = static_cast(selector_bits.get_selector(x, y)); } } } @@ -388,6 +337,8 @@ namespace basisu if (!is_video) return; + debug_printf("basisu_backend::check_for_valid_cr_blocks\n"); + uint32_t total_crs = 0; uint32_t total_invalid_crs = 0; @@ -454,6 +405,11 @@ namespace basisu void basisu_backend::create_encoder_blocks() { + debug_printf("basisu_backend::create_encoder_blocks\n"); + + interval_timer tm; + tm.start(); + basisu_frontend& r = *m_pFront_end; const bool is_video = r.get_params().m_tex_type == basist::cBASISTexTypeVideoFrames; @@ -565,6 +521,7 @@ namespace basisu { if ((is_video) && (endpoint_pred == basist::CR_ENDPOINT_PRED_INDEX)) continue; + int pred_block_x = block_x + g_endpoint_preds[endpoint_pred].m_dx; if ((pred_block_x < 0) || (pred_block_x >= (int)num_blocks_x)) continue; @@ -586,11 +543,23 @@ namespace basisu unpack_etc1(trial_etc_block, trial_colors); uint64_t trial_err = 0; - for (uint32_t p = 0; p < 16; p++) + if (r.get_params().m_perceptual) { - trial_err += color_distance(r.get_params().m_perceptual, src_pixels.get_ptr()[p], trial_colors[p], false); - if (trial_err > thresh_err) - break; + for (uint32_t p = 0; p < 16; p++) + { + trial_err += color_distance(true, src_pixels.get_ptr()[p], trial_colors[p], false); + if (trial_err > thresh_err) + break; + } + } + else + { + for (uint32_t p = 0; p < 16; p++) + { + trial_err += color_distance(false, src_pixels.get_ptr()[p], trial_colors[p], false); + if (trial_err > thresh_err) + break; + } } if (trial_err <= thresh_err) @@ -643,6 +612,8 @@ namespace basisu sort_selector_codebook(); check_for_valid_cr_blocks(); + + debug_printf("Elapsed time: %3.3f secs\n", tm.get_elapsed_secs()); } void basisu_backend::compute_slice_crcs() @@ -670,7 +641,9 @@ namespace basisu etc_block& output_block = *(etc_block*)gi.get_block_ptr(block_x, block_y); output_block.set_diff_bit(true); - output_block.set_flip_bit(true); + // Setting the flip bit to false to be compatible with the Khronos KDFS. + //output_block.set_flip_bit(true); + output_block.set_flip_bit(false); const uint32_t endpoint_index = m.m_endpoint_index; @@ -679,7 +652,7 @@ namespace basisu const uint32_t selector_idx = m.m_selector_index; - const basist::etc1_selector_palette_entry& selectors = m_selector_palette[selector_idx]; + const etc1_selector_palette_entry& selectors = m_selector_palette[selector_idx]; for (uint32_t sy = 0; sy < 4; sy++) for (uint32_t sx = 0; sx < 4; sx++) output_block.set_selector(sx, sy, selectors(sx, sy)); @@ -707,6 +680,9 @@ namespace basisu } // slice_index } + //uint32_t g_color_delta_hist[255 * 3 + 1]; + //uint32_t g_color_delta_bad_hist[255 * 3 + 1]; + // TODO: Split this into multiple methods. bool basisu_backend::encode_image() { @@ -737,6 +713,12 @@ namespace basisu uint_vec block_endpoint_indices, block_selector_indices; + interval_timer tm; + tm.start(); + + const int COLOR_DELTA_THRESH = 8; + const int SEL_DIFF_THRESHOLD = 11; + for (uint32_t slice_index = 0; slice_index < m_slices.size(); slice_index++) { //const int prev_frame_slice_index = is_video ? find_video_frame(slice_index, -1) : -1; @@ -782,7 +764,7 @@ namespace basisu } // block_x } // block_y - + for (uint32_t block_y = 0; block_y < num_blocks_y; block_y++) { for (uint32_t block_x = 0; block_x < num_blocks_x; block_x++) @@ -857,68 +839,170 @@ namespace basisu etc_block etc_blk(r.get_output_block(block_index)); const uint64_t cur_err = etc_blk.evaluate_etc1_error(src_pixels.get_ptr(), r.get_params().m_perceptual); + const uint32_t cur_inten5 = etc_blk.get_inten_table(0); + const etc1_endpoint_palette_entry& cur_endpoints = m_endpoint_palette[m.m_endpoint_index]; + if (cur_err) { const float endpoint_remap_thresh = maximum(1.0f, m_params.m_endpoint_rdo_quality_thresh); const uint64_t thresh_err = (uint64_t)(cur_err * endpoint_remap_thresh); - uint64_t best_trial_err = UINT64_MAX; - int best_trial_idx = 0; + //const int MAX_ENDPOINT_SEARCH_DIST = (m_params.m_compression_level >= 2) ? 64 : 32; + const int MAX_ENDPOINT_SEARCH_DIST = (m_params.m_compression_level >= 2) ? 64 : 16; - etc_block trial_etc_blk(etc_blk); - - const int MAX_ENDPOINT_SEARCH_DIST = 32; - const int search_dist = minimum(iabs(endpoint_delta) - 1, MAX_ENDPOINT_SEARCH_DIST); - for (int d = -search_dist; d < search_dist; d++) + if (!g_cpu_supports_sse41) { - int trial_idx = prev_endpoint_index + d; - if (trial_idx < 0) - trial_idx += (int)r.get_total_endpoint_clusters(); - else if (trial_idx >= (int)r.get_total_endpoint_clusters()) - trial_idx -= (int)r.get_total_endpoint_clusters(); + const uint64_t initial_best_trial_err = UINT64_MAX; + uint64_t best_trial_err = initial_best_trial_err; + int best_trial_idx = 0; - if (trial_idx == new_endpoint_index) - continue; - - // Skip it if this new endpoint palette entry is actually never used. - if (!m_new_endpoint_was_used[trial_idx]) - continue; - - const etc1_endpoint_palette_entry& p = m_endpoint_palette[m_endpoint_remap_table_new_to_old[trial_idx]]; - trial_etc_blk.set_block_color5_etc1s(p.m_color5); - trial_etc_blk.set_inten_tables_etc1s(p.m_inten5); - - uint64_t trial_err = trial_etc_blk.evaluate_etc1_error(src_pixels.get_ptr(), r.get_params().m_perceptual); - - if (trial_err <= thresh_err) + etc_block trial_etc_blk(etc_blk); + + const int search_dist = minimum(iabs(endpoint_delta) - 1, MAX_ENDPOINT_SEARCH_DIST); + for (int d = -search_dist; d < search_dist; d++) { - if (trial_err < best_trial_err) + int trial_idx = prev_endpoint_index + d; + if (trial_idx < 0) + trial_idx += (int)r.get_total_endpoint_clusters(); + else if (trial_idx >= (int)r.get_total_endpoint_clusters()) + trial_idx -= (int)r.get_total_endpoint_clusters(); + + if (trial_idx == new_endpoint_index) + continue; + + // Skip it if this new endpoint palette entry is actually never used. + if (!m_new_endpoint_was_used[trial_idx]) + continue; + + const etc1_endpoint_palette_entry& p = m_endpoint_palette[m_endpoint_remap_table_new_to_old[trial_idx]]; + + if (m_params.m_compression_level <= 1) + { + if (p.m_inten5 > cur_inten5) + continue; + + int delta_r = iabs(cur_endpoints.m_color5.r - p.m_color5.r); + int delta_g = iabs(cur_endpoints.m_color5.g - p.m_color5.g); + int delta_b = iabs(cur_endpoints.m_color5.b - p.m_color5.b); + int color_delta = delta_r + delta_g + delta_b; + + if (color_delta > COLOR_DELTA_THRESH) + continue; + } + + trial_etc_blk.set_block_color5_etc1s(p.m_color5); + trial_etc_blk.set_inten_tables_etc1s(p.m_inten5); + + uint64_t trial_err = trial_etc_blk.evaluate_etc1_error(src_pixels.get_ptr(), r.get_params().m_perceptual); + + if ((trial_err < best_trial_err) && (trial_err <= thresh_err)) { best_trial_err = trial_err; best_trial_idx = trial_idx; } } - } - if (best_trial_err != UINT64_MAX) + if (best_trial_err != initial_best_trial_err) + { + m.m_endpoint_index = m_endpoint_remap_table_new_to_old[best_trial_idx]; + + new_endpoint_index = best_trial_idx; + + endpoint_delta = new_endpoint_index - prev_endpoint_index; + + total_endpoint_indices_remapped++; + } + } + else { - m.m_endpoint_index = m_endpoint_remap_table_new_to_old[best_trial_idx]; +#if BASISU_SUPPORT_SSE + uint8_t block_selectors[16]; + for (uint32_t i = 0; i < 16; i++) + block_selectors[i] = (uint8_t)etc_blk.get_selector(i & 3, i >> 2); - new_endpoint_index = best_trial_idx; + const int64_t initial_best_trial_err = INT64_MAX; + int64_t best_trial_err = initial_best_trial_err; + int best_trial_idx = 0; + + const int search_dist = minimum(iabs(endpoint_delta) - 1, MAX_ENDPOINT_SEARCH_DIST); + for (int d = -search_dist; d < search_dist; d++) + { + int trial_idx = prev_endpoint_index + d; + if (trial_idx < 0) + trial_idx += (int)r.get_total_endpoint_clusters(); + else if (trial_idx >= (int)r.get_total_endpoint_clusters()) + trial_idx -= (int)r.get_total_endpoint_clusters(); - endpoint_delta = new_endpoint_index - prev_endpoint_index; + if (trial_idx == new_endpoint_index) + continue; - total_endpoint_indices_remapped++; - } - } - } + // Skip it if this new endpoint palette entry is actually never used. + if (!m_new_endpoint_was_used[trial_idx]) + continue; + + const etc1_endpoint_palette_entry& p = m_endpoint_palette[m_endpoint_remap_table_new_to_old[trial_idx]]; + + if (m_params.m_compression_level <= 1) + { + if (p.m_inten5 > cur_inten5) + continue; + + int delta_r = iabs(cur_endpoints.m_color5.r - p.m_color5.r); + int delta_g = iabs(cur_endpoints.m_color5.g - p.m_color5.g); + int delta_b = iabs(cur_endpoints.m_color5.b - p.m_color5.b); + int color_delta = delta_r + delta_g + delta_b; + + if (color_delta > COLOR_DELTA_THRESH) + continue; + } + + color_rgba block_colors[4]; + etc_block::get_block_colors_etc1s(block_colors, p.m_color5, p.m_inten5); + + int64_t trial_err; + if (r.get_params().m_perceptual) + { + perceptual_distance_rgb_4_N_sse41(&trial_err, block_selectors, block_colors, src_pixels.get_ptr(), 16, best_trial_err); + } + else + { + linear_distance_rgb_4_N_sse41(&trial_err, block_selectors, block_colors, src_pixels.get_ptr(), 16, best_trial_err); + } + + //if (trial_err > thresh_err) + // g_color_delta_bad_hist[color_delta]++; + + if ((trial_err < best_trial_err) && (trial_err <= (int64_t)thresh_err)) + { + best_trial_err = trial_err; + best_trial_idx = trial_idx; + } + } + + if (best_trial_err != initial_best_trial_err) + { + m.m_endpoint_index = m_endpoint_remap_table_new_to_old[best_trial_idx]; + + new_endpoint_index = best_trial_idx; + + endpoint_delta = new_endpoint_index - prev_endpoint_index; + + total_endpoint_indices_remapped++; + } +#endif // BASISU_SUPPORT_SSE + } // if (!g_cpu_supports_sse41) + + } // if (cur_err) + + } // if ((m_params.m_endpoint_rdo_quality_thresh > 1.0f) && (iabs(endpoint_delta) > 1) && (!block_endpoints_are_referenced(block_x, block_y))) if (endpoint_delta < 0) endpoint_delta += (int)r.get_total_endpoint_clusters(); delta_endpoint_histogram.inc(endpoint_delta); - } + + } // if (m.m_endpoint_predictor == basist::NO_ENDPOINT_PRED_INDEX) block_endpoint_indices.push_back(m_endpoint_remap_table_new_to_old[new_endpoint_index]); @@ -927,10 +1011,13 @@ namespace basisu if ((!is_video) || (m.m_endpoint_predictor != basist::CR_ENDPOINT_PRED_INDEX)) { int new_selector_index = m_selector_remap_table_old_to_new[m.m_selector_index]; + + const float selector_remap_thresh = maximum(1.0f, m_params.m_selector_rdo_quality_thresh); //2.5f; int selector_history_buf_index = -1; - if (m.m_is_cr_target) + // At low comp levels this hurts compression a tiny amount, but is significantly faster so it's a good tradeoff. + if ((m.m_is_cr_target) || (m_params.m_compression_level <= 1)) { for (uint32_t j = 0; j < selector_history_buf.size(); j++) { @@ -944,89 +1031,99 @@ namespace basisu } } } - else + + // If the block is a CR target we can't override its selectors. + if ((!m.m_is_cr_target) && (selector_history_buf_index == -1)) { const pixel_block& src_pixels = r.get_source_pixel_block(block_index); - const etc_block& etc_blk = r.get_output_block(block_index); + etc_block etc_blk = r.get_output_block(block_index); - color_rgba etc_blk_unpacked[16]; - unpack_etc1(etc_blk, etc_blk_unpacked); + // This is new code - the initial release just used the endpoints from the frontend, which isn't correct/accurate. + const etc1_endpoint_palette_entry& q = m_endpoint_palette[m_endpoint_remap_table_new_to_old[new_endpoint_index]]; + etc_blk.set_block_color5_etc1s(q.m_color5); + etc_blk.set_inten_tables_etc1s(q.m_inten5); + + color_rgba block_colors[4]; + etc_blk.get_block_colors(block_colors, 0); + + const uint8_t* pCur_selectors = &m_selector_palette[m.m_selector_index][0]; uint64_t cur_err = 0; if (r.get_params().m_perceptual) { for (uint32_t p = 0; p < 16; p++) - cur_err += color_distance(true, src_pixels.get_ptr()[p], etc_blk_unpacked[p], false); + cur_err += color_distance(true, src_pixels.get_ptr()[p], block_colors[pCur_selectors[p]], false); } else { for (uint32_t p = 0; p < 16; p++) - cur_err += color_distance(false, src_pixels.get_ptr()[p], etc_blk_unpacked[p], false); + cur_err += color_distance(false, src_pixels.get_ptr()[p], block_colors[pCur_selectors[p]], false); } - + + const uint64_t limit_err = (uint64_t)ceilf(cur_err * selector_remap_thresh); + + // Even if cur_err==limit_err, we still want to scan the history buffer because there may be equivalent entries that are cheaper to code. + uint64_t best_trial_err = UINT64_MAX; int best_trial_idx = 0; uint32_t best_trial_history_buf_idx = 0; - const float selector_remap_thresh = maximum(1.0f, m_params.m_selector_rdo_quality_thresh); //2.5f; - const bool use_strict_search = (m_params.m_compression_level == 0) && (selector_remap_thresh == 1.0f); - - const uint64_t limit_err = (uint64_t)ceilf(cur_err * selector_remap_thresh); - for (uint32_t j = 0; j < selector_history_buf.size(); j++) { const int trial_idx = selector_history_buf[j]; - if (use_strict_search) + const uint8_t* pSelectors = &m_selector_palette[m_selector_remap_table_new_to_old[trial_idx]][0]; + + if (m_params.m_compression_level <= 1) { - if (trial_idx == new_selector_index) + // Predict if evaluating the full color error would cause an early out, by summing the abs err of the selector indices. + int sel_diff = 0; + for (uint32_t p = 0; p < 16; p += 4) { - best_trial_err = 0; - best_trial_idx = trial_idx; - best_trial_history_buf_idx = j; - break; + sel_diff += iabs(pCur_selectors[p + 0] - pSelectors[p + 0]); + sel_diff += iabs(pCur_selectors[p + 1] - pSelectors[p + 1]); + sel_diff += iabs(pCur_selectors[p + 2] - pSelectors[p + 2]); + sel_diff += iabs(pCur_selectors[p + 3] - pSelectors[p + 3]); + if (sel_diff >= SEL_DIFF_THRESHOLD) + break; + } + if (sel_diff >= SEL_DIFF_THRESHOLD) + continue; + } + + const uint64_t thresh_err = minimum(limit_err, best_trial_err); + uint64_t trial_err = 0; + + // This tends to early out quickly, so SSE has a hard time competing. + if (r.get_params().m_perceptual) + { + for (uint32_t p = 0; p < 16; p++) + { + uint32_t sel = pSelectors[p]; + trial_err += color_distance(true, src_pixels.get_ptr()[p], block_colors[sel], false); + if (trial_err > thresh_err) + break; } } else { - uint64_t trial_err = 0; - const uint64_t thresh_err = minimum(limit_err, best_trial_err); - - color_rgba block_colors[4]; - etc_blk.get_block_colors(block_colors, 0); - - const uint8_t* pSelectors = &m_selector_palette[m_selector_remap_table_new_to_old[trial_idx]](0, 0); - - if (r.get_params().m_perceptual) + for (uint32_t p = 0; p < 16; p++) { - for (uint32_t p = 0; p < 16; p++) - { - uint32_t sel = pSelectors[p]; - trial_err += color_distance(true, src_pixels.get_ptr()[p], block_colors[sel], false); - if (trial_err > thresh_err) - break; - } - } - else - { - for (uint32_t p = 0; p < 16; p++) - { - uint32_t sel = pSelectors[p]; - trial_err += color_distance(false, src_pixels.get_ptr()[p], block_colors[sel], false); - if (trial_err > thresh_err) - break; - } + uint32_t sel = pSelectors[p]; + trial_err += color_distance(false, src_pixels.get_ptr()[p], block_colors[sel], false); + if (trial_err > thresh_err) + break; } + } - if ((trial_err < best_trial_err) && (trial_err <= thresh_err)) - { - assert(trial_err <= limit_err); - - best_trial_err = trial_err; - best_trial_idx = trial_idx; - best_trial_history_buf_idx = j; - } + if ((trial_err < best_trial_err) && (trial_err <= thresh_err)) + { + assert(trial_err <= limit_err); + + best_trial_err = trial_err; + best_trial_idx = trial_idx; + best_trial_history_buf_idx = j; } } @@ -1043,6 +1140,7 @@ namespace basisu selector_history_buf_histogram.inc(best_trial_history_buf_idx); } + } // if (m_params.m_selector_rdo_quality_thresh > 0.0f) m.m_selector_index = m_selector_remap_table_new_to_old[new_selector_index]; @@ -1164,6 +1262,14 @@ namespace basisu } // slice_index + //for (int i = 0; i <= 255 * 3; i++) + //{ + // printf("%u, %u, %f\n", g_color_delta_bad_hist[i], g_color_delta_hist[i], g_color_delta_hist[i] ? g_color_delta_bad_hist[i] / (float)g_color_delta_hist[i] : 0); + //} + + double total_prep_time = tm.get_elapsed_secs(); + debug_printf("basisu_backend::encode_image: Total prep time: %3.2f\n", total_prep_time); + debug_printf("Endpoint pred RDO total endpoint indices remapped: %u %3.2f%%\n", total_endpoint_indices_remapped, total_endpoint_indices_remapped * 100.0f / get_total_blocks()); @@ -1554,215 +1660,82 @@ namespace basisu bool basisu_backend::encode_selector_palette() { const basisu_frontend& r = *m_pFront_end; + + histogram delta_selector_pal_histogram(256); - if ((m_params.m_use_global_sel_codebook) && (!m_params.m_use_hybrid_sel_codebooks)) + for (uint32_t q = 0; q < r.get_total_selector_clusters(); q++) { - histogram global_mod_indices(1 << m_params.m_global_sel_codebook_mod_bits); + if (!q) + continue; - for (uint32_t q = 0; q < r.get_total_selector_clusters(); q++) - global_mod_indices.inc(m_global_selector_palette_desc[q].m_mod_index); + const etc1_selector_palette_entry& cur = m_selector_palette[m_selector_remap_table_new_to_old[q]]; + const etc1_selector_palette_entry predictor(m_selector_palette[m_selector_remap_table_new_to_old[q - 1]]); - huffman_encoding_table global_pal_model, global_mod_model; - - if (!global_mod_model.init(global_mod_indices, 16)) - { - error_printf("global_mod_model.init() failed!"); - return false; - } - - bitwise_coder coder; - coder.init(1024 * 1024); - - coder.put_bits(1, 1); // use global codebook - - coder.put_bits(m_params.m_global_sel_codebook_pal_bits, 4); // pal bits - coder.put_bits(m_params.m_global_sel_codebook_mod_bits, 4); // mod bits - - uint32_t mod_model_bits = 0; - if (m_params.m_global_sel_codebook_mod_bits) - mod_model_bits = coder.emit_huffman_table(global_mod_model); - - uint32_t total_pal_bits = 0; - uint32_t total_mod_bits = 0; - for (uint32_t q = 0; q < r.get_total_selector_clusters(); q++) - { - const uint32_t i = m_selector_remap_table_new_to_old[q]; - - if (m_params.m_global_sel_codebook_pal_bits) - { - coder.put_bits(m_global_selector_palette_desc[i].m_pal_index, m_params.m_global_sel_codebook_pal_bits); - total_pal_bits += m_params.m_global_sel_codebook_pal_bits; - } - - if (m_params.m_global_sel_codebook_mod_bits) - total_mod_bits += coder.put_code(m_global_selector_palette_desc[i].m_mod_index, global_mod_model); - } - - coder.flush(); - - m_output.m_selector_palette = coder.get_bytes(); - - debug_printf("Modifier model bits: %u Avg per entry: %3.3f\n", mod_model_bits, mod_model_bits / float(r.get_total_selector_clusters())); - debug_printf("Palette bits: %u Avg per entry: %3.3f, Modifier bits: %u Avg per entry: %3.3f\n", total_pal_bits, total_pal_bits / float(r.get_total_selector_clusters()), total_mod_bits, total_mod_bits / float(r.get_total_selector_clusters())); + for (uint32_t j = 0; j < 4; j++) + delta_selector_pal_histogram.inc(cur.get_byte(j) ^ predictor.get_byte(j)); } - else if (m_params.m_use_hybrid_sel_codebooks) + + if (!delta_selector_pal_histogram.get_total()) + delta_selector_pal_histogram.inc(0); + + huffman_encoding_table delta_selector_pal_model; + if (!delta_selector_pal_model.init(delta_selector_pal_histogram, 16)) { - huff2D used_global_cb_bitflag_huff2D(1, 8); - - histogram global_mod_indices(1 << m_params.m_global_sel_codebook_mod_bits); - - for (uint32_t s = 0; s < r.get_total_selector_clusters(); s++) - { - const uint32_t q = m_selector_remap_table_new_to_old[s]; - - const bool used_global_cb_flag = r.get_selector_cluster_uses_global_cb_vec()[q]; - - used_global_cb_bitflag_huff2D.emit(used_global_cb_flag); - - global_mod_indices.inc(m_global_selector_palette_desc[q].m_mod_index); - } - - huffman_encoding_table global_mod_indices_model; - if (!global_mod_indices_model.init(global_mod_indices, 16)) - { - error_printf("global_mod_indices_model.init() failed!"); - return false; - } - - bitwise_coder coder; - coder.init(1024 * 1024); - - coder.put_bits(0, 1); // use global codebook - coder.put_bits(1, 1); // uses hybrid codebooks - - coder.put_bits(m_params.m_global_sel_codebook_pal_bits, 4); // pal bits - coder.put_bits(m_params.m_global_sel_codebook_mod_bits, 4); // mod bits - - used_global_cb_bitflag_huff2D.start_encoding(16); - coder.emit_huffman_table(used_global_cb_bitflag_huff2D.get_encoding_table()); - - if (m_params.m_global_sel_codebook_mod_bits) - coder.emit_huffman_table(global_mod_indices_model); - - uint32_t total_global_cb_entries = 0; - uint32_t total_pal_bits = 0; - uint32_t total_mod_bits = 0; - uint32_t total_selectors = 0; - uint32_t total_selector_bits = 0; - uint32_t total_flag_bits = 0; - - for (uint32_t s = 0; s < r.get_total_selector_clusters(); s++) - { - const uint32_t q = m_selector_remap_table_new_to_old[s]; - - total_flag_bits += used_global_cb_bitflag_huff2D.emit_next_sym(coder); - - const bool used_global_cb_flag = r.get_selector_cluster_uses_global_cb_vec()[q]; - - if (used_global_cb_flag) - { - total_global_cb_entries++; - - total_pal_bits += coder.put_bits(r.get_selector_cluster_global_selector_entry_ids()[q].m_palette_index, m_params.m_global_sel_codebook_pal_bits); - total_mod_bits += coder.put_code(r.get_selector_cluster_global_selector_entry_ids()[q].m_modifier.get_index(), global_mod_indices_model); - } - else - { - total_selectors++; - total_selector_bits += 32; - - for (uint32_t j = 0; j < 4; j++) - coder.put_bits(m_selector_palette[q].get_byte(j), 8); - } - } - - coder.flush(); - - m_output.m_selector_palette = coder.get_bytes(); - - debug_printf("Total global CB entries: %u %3.2f%%\n", total_global_cb_entries, total_global_cb_entries * 100.0f / r.get_total_selector_clusters()); - debug_printf("Total selector entries: %u %3.2f%%\n", total_selectors, total_selectors * 100.0f / r.get_total_selector_clusters()); - debug_printf("Total pal bits: %u, mod bits: %u, selector bits: %u, flag bits: %u\n", total_pal_bits, total_mod_bits, total_selector_bits, total_flag_bits); + error_printf("delta_selector_pal_model.init() failed!"); + return false; } - else + + bitwise_coder coder; + coder.init(1024 * 1024); + + coder.put_bits(0, 1); // use global codebook + coder.put_bits(0, 1); // uses hybrid codebooks + + coder.put_bits(0, 1); // raw bytes + + coder.emit_huffman_table(delta_selector_pal_model); + + for (uint32_t q = 0; q < r.get_total_selector_clusters(); q++) { - histogram delta_selector_pal_histogram(256); - - for (uint32_t q = 0; q < r.get_total_selector_clusters(); q++) + if (!q) { - if (!q) - continue; - - const basist::etc1_selector_palette_entry& cur = m_selector_palette[m_selector_remap_table_new_to_old[q]]; - const basist::etc1_selector_palette_entry predictor(m_selector_palette[m_selector_remap_table_new_to_old[q - 1]]); - for (uint32_t j = 0; j < 4; j++) - delta_selector_pal_histogram.inc(cur.get_byte(j) ^ predictor.get_byte(j)); + coder.put_bits(m_selector_palette[m_selector_remap_table_new_to_old[q]].get_byte(j), 8); + continue; } - if (!delta_selector_pal_histogram.get_total()) - delta_selector_pal_histogram.inc(0); + const etc1_selector_palette_entry& cur = m_selector_palette[m_selector_remap_table_new_to_old[q]]; + const etc1_selector_palette_entry predictor(m_selector_palette[m_selector_remap_table_new_to_old[q - 1]]); - huffman_encoding_table delta_selector_pal_model; - if (!delta_selector_pal_model.init(delta_selector_pal_histogram, 16)) - { - error_printf("delta_selector_pal_model.init() failed!"); - return false; - } + for (uint32_t j = 0; j < 4; j++) + coder.put_code(cur.get_byte(j) ^ predictor.get_byte(j), delta_selector_pal_model); + } - bitwise_coder coder; + coder.flush(); + + m_output.m_selector_palette = coder.get_bytes(); + + if (m_output.m_selector_palette.size() >= r.get_total_selector_clusters() * 4) + { coder.init(1024 * 1024); coder.put_bits(0, 1); // use global codebook coder.put_bits(0, 1); // uses hybrid codebooks - coder.put_bits(0, 1); // raw bytes - - coder.emit_huffman_table(delta_selector_pal_model); + coder.put_bits(1, 1); // raw bytes for (uint32_t q = 0; q < r.get_total_selector_clusters(); q++) { - if (!q) - { - for (uint32_t j = 0; j < 4; j++) - coder.put_bits(m_selector_palette[m_selector_remap_table_new_to_old[q]].get_byte(j), 8); - continue; - } - - const basist::etc1_selector_palette_entry& cur = m_selector_palette[m_selector_remap_table_new_to_old[q]]; - const basist::etc1_selector_palette_entry predictor(m_selector_palette[m_selector_remap_table_new_to_old[q - 1]]); + const uint32_t i = m_selector_remap_table_new_to_old[q]; for (uint32_t j = 0; j < 4; j++) - coder.put_code(cur.get_byte(j) ^ predictor.get_byte(j), delta_selector_pal_model); + coder.put_bits(m_selector_palette[i].get_byte(j), 8); } coder.flush(); m_output.m_selector_palette = coder.get_bytes(); - - if (m_output.m_selector_palette.size() >= r.get_total_selector_clusters() * 4) - { - coder.init(1024 * 1024); - - coder.put_bits(0, 1); // use global codebook - coder.put_bits(0, 1); // uses hybrid codebooks - - coder.put_bits(1, 1); // raw bytes - - for (uint32_t q = 0; q < r.get_total_selector_clusters(); q++) - { - const uint32_t i = m_selector_remap_table_new_to_old[q]; - - for (uint32_t j = 0; j < 4; j++) - coder.put_bits(m_selector_palette[i].get_byte(j), 8); - } - - coder.flush(); - - m_output.m_selector_palette = coder.get_bytes(); - } - - } // if (m_params.m_use_global_sel_codebook) + } debug_printf("Selector codebook bits: %u bytes: %u, Bits per entry: %3.1f, Avg bits/texel: %3.3f\n", (int)m_output.m_selector_palette.size() * 8, (int)m_output.m_selector_palette.size(), diff --git a/encoder/basisu_backend.h b/encoder/basisu_backend.h index 393dccd..07778ae 100644 --- a/encoder/basisu_backend.h +++ b/encoder/basisu_backend.h @@ -17,11 +17,86 @@ #include "../transcoder/basisu.h" #include "basisu_enc.h" #include "../transcoder/basisu_transcoder_internal.h" -#include "../transcoder/basisu_global_selector_palette.h" #include "basisu_frontend.h" namespace basisu { + struct etc1_selector_palette_entry + { + etc1_selector_palette_entry() + { + clear(); + } + + void clear() + { + basisu::clear_obj(*this); + } + + uint8_t operator[] (uint32_t i) const { assert(i < 16); return m_selectors[i]; } + uint8_t& operator[] (uint32_t i) { assert(i < 16); return m_selectors[i]; } + + void set_uint32(uint32_t v) + { + for (uint32_t byte_index = 0; byte_index < 4; byte_index++) + { + uint32_t b = (v >> (byte_index * 8)) & 0xFF; + + m_selectors[byte_index * 4 + 0] = b & 3; + m_selectors[byte_index * 4 + 1] = (b >> 2) & 3; + m_selectors[byte_index * 4 + 2] = (b >> 4) & 3; + m_selectors[byte_index * 4 + 3] = (b >> 6) & 3; + } + } + + uint32_t get_uint32() const + { + return get_byte(0) | (get_byte(1) << 8) | (get_byte(2) << 16) | (get_byte(3) << 24); + } + + uint32_t get_byte(uint32_t byte_index) const + { + assert(byte_index < 4); + + return m_selectors[byte_index * 4 + 0] | + (m_selectors[byte_index * 4 + 1] << 2) | + (m_selectors[byte_index * 4 + 2] << 4) | + (m_selectors[byte_index * 4 + 3] << 6); + } + + uint8_t operator()(uint32_t x, uint32_t y) const { assert((x < 4) && (y < 4)); return m_selectors[x + y * 4]; } + uint8_t& operator()(uint32_t x, uint32_t y) { assert((x < 4) && (y < 4)); return m_selectors[x + y * 4]; } + + bool operator< (const etc1_selector_palette_entry& other) const + { + for (uint32_t i = 0; i < 16; i++) + { + if (m_selectors[i] < other.m_selectors[i]) + return true; + else if (m_selectors[i] != other.m_selectors[i]) + return false; + } + + return false; + } + + bool operator== (const etc1_selector_palette_entry& other) const + { + for (uint32_t i = 0; i < 16; i++) + { + if (m_selectors[i] != other.m_selectors[i]) + return false; + } + + return true; + } + + private: + uint8_t m_selectors[16]; + }; + + typedef basisu::vector etc1_selector_palette_entry_vec; + struct encoder_block { encoder_block() @@ -78,14 +153,11 @@ namespace basisu float m_endpoint_rdo_quality_thresh; float m_selector_rdo_quality_thresh; uint32_t m_compression_level; - - bool m_use_global_sel_codebook; - uint32_t m_global_sel_codebook_pal_bits; - uint32_t m_global_sel_codebook_mod_bits; - bool m_use_hybrid_sel_codebooks; - + bool m_used_global_codebooks; + bool m_validate; + basisu_backend_params() { clear(); @@ -99,12 +171,8 @@ namespace basisu m_endpoint_rdo_quality_thresh = 0.0f; m_selector_rdo_quality_thresh = 0.0f; m_compression_level = 0; - - m_use_global_sel_codebook = false; - m_global_sel_codebook_pal_bits = ETC1_GLOBAL_SELECTOR_CODEBOOK_MAX_PAL_BITS; - m_global_sel_codebook_mod_bits = basist::etc1_global_palette_entry_modifier::cTotalBits; - m_use_hybrid_sel_codebooks = false; m_used_global_codebooks = false; + m_validate = true; } }; @@ -205,7 +273,7 @@ namespace basisu void clear(); - void init(basisu_frontend *pFront_end, basisu_backend_params ¶ms, const basisu_backend_slice_desc_vec &slice_desc, const basist::etc1_global_selector_codebook *pGlobal_sel_codebook); + void init(basisu_frontend *pFront_end, basisu_backend_params ¶ms, const basisu_backend_slice_desc_vec &slice_desc); uint32_t encode(); @@ -217,10 +285,9 @@ namespace basisu basisu_backend_params m_params; basisu_backend_slice_desc_vec m_slices; basisu_backend_output m_output; - const basist::etc1_global_selector_codebook *m_pGlobal_sel_codebook; - + etc1_endpoint_palette_entry_vec m_endpoint_palette; - basist::etc1_selector_palette_entry_vec m_selector_palette; + etc1_selector_palette_entry_vec m_selector_palette; struct etc1_global_selector_cb_entry_desc { diff --git a/encoder/basisu_comp.cpp b/encoder/basisu_comp.cpp index 10f96ce..166a1c4 100644 --- a/encoder/basisu_comp.cpp +++ b/encoder/basisu_comp.cpp @@ -21,6 +21,8 @@ #define MINIZ_NO_ZLIB_COMPATIBLE_NAMES #include "basisu_miniz.h" +#include "basisu_opencl.h" + #if !BASISD_SUPPORT_KTX2 #error BASISD_SUPPORT_KTX2 must be enabled (set to 1). #endif @@ -45,21 +47,45 @@ using namespace buminiz; namespace basisu { basis_compressor::basis_compressor() : + m_pOpenCL_context(nullptr), m_basis_file_size(0), m_basis_bits_per_texel(0.0f), m_total_blocks(0), - m_auto_global_sel_pal(false), - m_any_source_image_has_alpha(false) + m_any_source_image_has_alpha(false), + m_opencl_failed(false) { debug_printf("basis_compressor::basis_compressor\n"); + + assert(g_library_initialized); } + basis_compressor::~basis_compressor() + { + if (m_pOpenCL_context) + { + opencl_destroy_context(m_pOpenCL_context); + m_pOpenCL_context = nullptr; + } + } + bool basis_compressor::init(const basis_compressor_params ¶ms) { debug_printf("basis_compressor::init\n"); + + if (!g_library_initialized) + { + error_printf("basis_compressor::init: basisu_encoder_init() MUST be called before using any encoder functionality!\n"); + return false; + } + if (!params.m_pJob_pool) + { + error_printf("basis_compressor::init: A non-null job_pool pointer must be specified\n"); + return false; + } + m_params = params; - + if (m_params.m_debug) { debug_printf("basis_compressor::init:\n"); @@ -68,9 +94,7 @@ namespace basisu #define PRINT_INT_VALUE(v) debug_printf("%s: %i %u\n", BASISU_STRINGIZE2(v), static_cast(m_params.v), m_params.v.was_changed()); #define PRINT_UINT_VALUE(v) debug_printf("%s: %u %u\n", BASISU_STRINGIZE2(v), static_cast(m_params.v), m_params.v.was_changed()); #define PRINT_FLOAT_VALUE(v) debug_printf("%s: %f %u\n", BASISU_STRINGIZE2(v), static_cast(m_params.v), m_params.v.was_changed()); - - debug_printf("Has global selector codebook: %i\n", m_params.m_pSel_codebook != nullptr); - + debug_printf("Source images: %u, source filenames: %u, source alpha filenames: %i, Source mipmap images: %u\n", m_params.m_source_images.size(), m_params.m_source_filenames.size(), m_params.m_source_alpha_filenames.size(), m_params.m_source_mipmap_images.size()); @@ -83,14 +107,12 @@ namespace basisu } PRINT_BOOL_VALUE(m_uastc); + PRINT_BOOL_VALUE(m_use_opencl); PRINT_BOOL_VALUE(m_y_flip); PRINT_BOOL_VALUE(m_debug); - PRINT_BOOL_VALUE(m_validate); + PRINT_BOOL_VALUE(m_validate_etc1s); PRINT_BOOL_VALUE(m_debug_images); - PRINT_BOOL_VALUE(m_global_sel_pal); - PRINT_BOOL_VALUE(m_auto_global_sel_pal); PRINT_INT_VALUE(m_compression_level); - PRINT_BOOL_VALUE(m_no_hybrid_sel_cb); PRINT_BOOL_VALUE(m_perceptual); PRINT_BOOL_VALUE(m_no_endpoint_rdo); PRINT_BOOL_VALUE(m_no_selector_rdo); @@ -107,12 +129,7 @@ namespace basisu PRINT_BOOL_VALUE(m_renormalize); PRINT_BOOL_VALUE(m_multithreading); PRINT_BOOL_VALUE(m_disable_hierarchical_endpoint_codebooks); - - PRINT_FLOAT_VALUE(m_hybrid_sel_cb_quality_thresh); - - PRINT_INT_VALUE(m_global_pal_bits); - PRINT_INT_VALUE(m_global_mod_bits); - + PRINT_FLOAT_VALUE(m_endpoint_rdo_thresh); PRINT_FLOAT_VALUE(m_selector_rdo_thresh); @@ -148,6 +165,7 @@ namespace basisu PRINT_INT_VALUE(m_resample_width); PRINT_INT_VALUE(m_resample_height); PRINT_FLOAT_VALUE(m_resample_factor); + debug_printf("Has global codebooks: %u\n", m_params.m_pGlobal_codebooks ? 1 : 0); if (m_params.m_pGlobal_codebooks) { @@ -165,6 +183,8 @@ namespace basisu debug_printf("Key: \"%s\"\n", m_params.m_ktx2_key_values[i].m_key.data()); debug_printf("Value size: %u\n", m_params.m_ktx2_key_values[i].m_value.size()); } + + PRINT_BOOL_VALUE(m_validate_output_data); #undef PRINT_BOOL_VALUE #undef PRINT_INT_VALUE @@ -178,6 +198,20 @@ namespace basisu return false; } + if ((m_params.m_compute_stats) && (!m_params.m_validate_output_data)) + { + m_params.m_validate_output_data = true; + + debug_printf("Note: m_compute_stats is true, so forcing m_validate_output_data to true as well\n"); + } + + if ((m_params.m_use_opencl) && opencl_is_available() && !m_pOpenCL_context && !m_opencl_failed) + { + m_pOpenCL_context = opencl_create_context(); + if (!m_pOpenCL_context) + m_opencl_failed = true; + } + return true; } @@ -424,7 +458,7 @@ namespace basisu #endif if (m_params.m_debug) - debug_printf("Total mipmap generation time: %f secs\n", tm.get_elapsed_secs()); + debug_printf("Total mipmap generation time: %3.3f secs\n", tm.get_elapsed_secs()); return true; } @@ -579,11 +613,11 @@ namespace basisu if ((file_image.get_width() > BASISU_MAX_SUPPORTED_TEXTURE_DIMENSION) || (file_image.get_height() > BASISU_MAX_SUPPORTED_TEXTURE_DIMENSION)) { - error_printf("basis_compressor::read_source_images: Source image is too large!\n"); + error_printf("basis_compressor::read_source_images: Source image \"%s\" is too large!\n", pSource_filename); return false; } - source_images.push_back(file_image); + source_images.enlarge(1)->swap(file_image); source_filenames.push_back(pSource_filename); } @@ -624,17 +658,19 @@ namespace basisu for (uint32_t source_file_index = 0; source_file_index < total_source_files; source_file_index++) { - image &file_image = source_images[source_file_index]; const std::string &source_filename = source_filenames[source_file_index]; // Now, for each source image, create the slices corresponding to that image. basisu::vector slices; slices.reserve(32); - + // The first (largest) mipmap level. - slices.push_back(file_image); - + image& file_image = source_images[source_file_index]; + + // Reserve a slot for mip0. + slices.resize(1); + if (m_params.m_source_mipmap_images.size()) { // User-provided mipmaps for each layer or image in the texture array. @@ -666,6 +702,10 @@ namespace basisu return false; } + // Swap in the largest mipmap level here to avoid copying it, because generate_mips() will change the array. + // NOTE: file_image is now blank. + slices[0].swap(file_image); + uint_vec mip_indices(slices.size()); for (uint32_t i = 0; i < slices.size(); i++) mip_indices[i] = i; @@ -734,18 +774,16 @@ namespace basisu save_png(string_format("basis_debug_source_image_%u_slice_%u.png", source_file_index, slice_index).c_str(), slice_image); } + const uint32_t dest_image_index = m_slice_images.size(); + enlarge_vector(m_stats, 1); enlarge_vector(m_slice_images, 1); enlarge_vector(m_slice_descs, 1); - - const uint32_t dest_image_index = (uint32_t)m_stats.size() - 1; - + m_stats[dest_image_index].m_filename = source_filename.c_str(); m_stats[dest_image_index].m_width = orig_width; m_stats[dest_image_index].m_height = orig_height; - - m_slice_images[dest_image_index] = slice_image; - + debug_printf("****** Slice %u: mip %u, alpha_slice: %u, filename: \"%s\", original: %ux%u actual: %ux%u\n", m_slice_descs.size() - 1, mip_indices[slice_index], is_alpha_slice, source_filename.c_str(), orig_width, orig_height, slice_image.get_width(), slice_image.get_height()); basisu_backend_slice_desc &slice_desc = m_slice_descs[dest_image_index]; @@ -777,6 +815,10 @@ namespace basisu m_total_blocks += slice_desc.m_num_blocks_x * slice_desc.m_num_blocks_y; total_macroblocks += slice_desc.m_num_macroblocks_x * slice_desc.m_num_macroblocks_y; + + // Finally, swap in the slice's image to avoid copying it. + // NOTE: slice_image is now blank. + m_slice_images[dest_image_index].swap(slice_image); } // slice_index @@ -1055,7 +1097,7 @@ namespace basisu endpoint_clusters = clamp((uint32_t)(.5f + lerp(ENDPOINT_CODEBOOK_MID_QUALITY_CODEBOOK_SIZE, static_cast(max_endpoints), color_endpoint_quality)), 32, basisu_frontend::cMaxEndpointClusters); } - float bits_per_selector_cluster = m_params.m_global_sel_pal ? 21.0f : 14.0f; + float bits_per_selector_cluster = 14.0f; const float max_desired_selector_cluster_bits_per_texel = 1.0f; // .15f int max_selectors = static_cast((max_desired_selector_cluster_bits_per_texel * total_texels) / bits_per_selector_cluster); @@ -1110,21 +1152,7 @@ namespace basisu m_params.m_selector_rdo_thresh *= lerp(1.0f, .75f, l); } } - - m_auto_global_sel_pal = false; - if (!m_params.m_global_sel_pal && m_params.m_auto_global_sel_pal) - { - const float bits_per_selector_cluster = 31.0f; - double selector_codebook_bpp_est = (bits_per_selector_cluster * selector_clusters) / total_texels; - debug_printf("selector_codebook_bpp_est: %f\n", selector_codebook_bpp_est); - const float force_global_sel_pal_bpp_threshold = .15f; - if ((total_texels <= 128.0f*128.0f) && (selector_codebook_bpp_est > force_global_sel_pal_bpp_threshold)) - { - m_auto_global_sel_pal = true; - debug_printf("Auto global selector palette enabled\n"); - } - } - + basisu_frontend::params p; p.m_num_source_blocks = m_total_blocks; p.m_pSource_blocks = &m_source_blocks[0]; @@ -1137,27 +1165,24 @@ namespace basisu p.m_tex_type = m_params.m_tex_type; p.m_multithreaded = m_params.m_multithreading; p.m_disable_hierarchical_endpoint_codebooks = m_params.m_disable_hierarchical_endpoint_codebooks; - p.m_validate = m_params.m_validate; + p.m_validate = m_params.m_validate_etc1s; p.m_pJob_pool = m_params.m_pJob_pool; p.m_pGlobal_codebooks = m_params.m_pGlobal_codebooks; - - if ((m_params.m_global_sel_pal) || (m_auto_global_sel_pal)) - { - p.m_pGlobal_sel_codebook = m_params.m_pSel_codebook; - p.m_num_global_sel_codebook_pal_bits = m_params.m_global_pal_bits; - p.m_num_global_sel_codebook_mod_bits = m_params.m_global_mod_bits; - p.m_use_hybrid_selector_codebooks = !m_params.m_no_hybrid_sel_cb; - p.m_hybrid_codebook_quality_thresh = m_params.m_hybrid_sel_cb_quality_thresh; - } + + // Don't keep trying to use OpenCL if it ever fails. + p.m_pOpenCL_context = !m_opencl_failed ? m_pOpenCL_context : nullptr; if (!m_frontend.init(p)) { error_printf("basisu_frontend::init() failed!\n"); return false; } - + m_frontend.compress(); + if (m_frontend.get_opencl_failed()) + m_opencl_failed = true; + if (m_params.m_debug_images) { for (uint32_t i = 0; i < m_slice_descs.size(); i++) @@ -1184,6 +1209,9 @@ namespace basisu bool basis_compressor::extract_frontend_texture_data() { + if (!m_params.m_compute_stats) + return true; + debug_printf("basis_compressor::extract_frontend_texture_data\n"); m_frontend_output_textures.resize(m_slice_descs.size()); @@ -1242,13 +1270,10 @@ namespace basisu if (!m_params.m_no_selector_rdo) backend_params.m_selector_rdo_quality_thresh = m_params.m_selector_rdo_thresh; - backend_params.m_use_global_sel_codebook = (m_frontend.get_params().m_pGlobal_sel_codebook != NULL); - backend_params.m_global_sel_codebook_pal_bits = m_frontend.get_params().m_num_global_sel_codebook_pal_bits; - backend_params.m_global_sel_codebook_mod_bits = m_frontend.get_params().m_num_global_sel_codebook_mod_bits; - backend_params.m_use_hybrid_sel_codebooks = m_frontend.get_params().m_use_hybrid_selector_codebooks; backend_params.m_used_global_codebooks = m_frontend.get_params().m_pGlobal_codebooks != nullptr; + backend_params.m_validate = m_params.m_validate_output_data; - m_backend.init(&m_frontend, backend_params, m_slice_descs, m_params.m_pSel_codebook); + m_backend.init(&m_frontend, backend_params, m_slice_descs); uint32_t total_packed_bytes = m_backend.encode(); if (!total_packed_bytes) @@ -1278,140 +1303,143 @@ namespace basisu m_output_basis_file = comp_data; - interval_timer tm; - tm.start(); - - basist::basisu_transcoder_init(); - - debug_printf("basist::basisu_transcoder_init: Took %f ms\n", tm.get_elapsed_ms()); - - // Verify the compressed data by transcoding it to ASTC (or ETC1)/BC7 and validating the CRC's. - basist::basisu_transcoder decoder(m_params.m_pSel_codebook); - if (!decoder.validate_file_checksums(&comp_data[0], (uint32_t)comp_data.size(), true)) - { - error_printf("decoder.validate_file_checksums() failed!\n"); - return false; - } - - m_decoded_output_textures.resize(m_slice_descs.size()); - m_decoded_output_textures_unpacked.resize(m_slice_descs.size()); - - m_decoded_output_textures_bc7.resize(m_slice_descs.size()); - m_decoded_output_textures_unpacked_bc7.resize(m_slice_descs.size()); - - tm.start(); - if (m_params.m_pGlobal_codebooks) - { - decoder.set_global_codebooks(m_params.m_pGlobal_codebooks); - } - - if (!decoder.start_transcoding(&comp_data[0], (uint32_t)comp_data.size())) - { - error_printf("decoder.start_transcoding() failed!\n"); - return false; - } - - double start_transcoding_time = tm.get_elapsed_secs(); - - debug_printf("basisu_compressor::start_transcoding() took %3.3fms\n", start_transcoding_time * 1000.0f); - - uint32_t total_orig_pixels = 0; - uint32_t total_texels = 0; - - double total_time_etc1s_or_astc = 0; - + uint32_t total_orig_pixels = 0, total_texels = 0, total_orig_texels = 0; for (uint32_t i = 0; i < m_slice_descs.size(); i++) { - gpu_image decoded_texture; - decoded_texture.init(m_params.m_uastc ? texture_format::cASTC4x4 : texture_format::cETC1, m_slice_descs[i].m_width, m_slice_descs[i].m_height); - - tm.start(); + const basisu_backend_slice_desc& slice_desc = m_slice_descs[i]; - basist::block_format format = m_params.m_uastc ? basist::block_format::cASTC_4x4 : basist::block_format::cETC1; - uint32_t bytes_per_block = m_params.m_uastc ? 16 : 8; - - if (!decoder.transcode_slice(&comp_data[0], (uint32_t)comp_data.size(), i, - reinterpret_cast(decoded_texture.get_ptr()), m_slice_descs[i].m_num_blocks_x * m_slice_descs[i].m_num_blocks_y, format, bytes_per_block)) - { - error_printf("Transcoding failed on slice %u!\n", i); - return false; - } - - total_time_etc1s_or_astc += tm.get_elapsed_secs(); - - if (encoded_output.m_tex_format == basist::basis_tex_format::cETC1S) - { - uint32_t image_crc16 = basist::crc16(decoded_texture.get_ptr(), decoded_texture.get_size_in_bytes(), 0); - if (image_crc16 != encoded_output.m_slice_image_crcs[i]) - { - error_printf("Decoded image data CRC check failed on slice %u!\n", i); - return false; - } - debug_printf("Decoded image data CRC check succeeded on slice %i\n", i); - } - - m_decoded_output_textures[i] = decoded_texture; - - total_orig_pixels += m_slice_descs[i].m_orig_width * m_slice_descs[i].m_orig_height; - total_texels += m_slice_descs[i].m_width * m_slice_descs[i].m_height; - } - - double total_time_bc7 = 0; - - if (basist::basis_is_format_supported(basist::transcoder_texture_format::cTFBC7_RGBA, basist::basis_tex_format::cUASTC4x4) && - basist::basis_is_format_supported(basist::transcoder_texture_format::cTFBC7_RGBA, basist::basis_tex_format::cETC1S)) - { - for (uint32_t i = 0; i < m_slice_descs.size(); i++) - { - gpu_image decoded_texture; - decoded_texture.init(texture_format::cBC7, m_slice_descs[i].m_width, m_slice_descs[i].m_height); - - tm.start(); - - if (!decoder.transcode_slice(&comp_data[0], (uint32_t)comp_data.size(), i, - reinterpret_cast(decoded_texture.get_ptr()), m_slice_descs[i].m_num_blocks_x * m_slice_descs[i].m_num_blocks_y, basist::block_format::cBC7, 16)) - { - error_printf("Transcoding failed to BC7 on slice %u!\n", i); - return false; - } - - total_time_bc7 += tm.get_elapsed_secs(); - - m_decoded_output_textures_bc7[i] = decoded_texture; - } - } - - for (uint32_t i = 0; i < m_slice_descs.size(); i++) - { - m_decoded_output_textures[i].unpack(m_decoded_output_textures_unpacked[i]); - - if (m_decoded_output_textures_bc7[i].get_pixel_width()) - m_decoded_output_textures_bc7[i].unpack(m_decoded_output_textures_unpacked_bc7[i]); - } - - debug_printf("Transcoded to %s in %3.3fms, %f texels/sec\n", m_params.m_uastc ? "ASTC" : "ETC1", total_time_etc1s_or_astc * 1000.0f, total_orig_pixels / total_time_etc1s_or_astc); - - if (total_time_bc7 != 0) - debug_printf("Transcoded to BC7 in %3.3fms, %f texels/sec\n", total_time_bc7 * 1000.0f, total_orig_pixels / total_time_bc7); - - debug_printf("Total .basis output file size: %u, %3.3f bits/texel\n", comp_data.size(), comp_data.size() * 8.0f / total_orig_pixels); - - uint32_t total_orig_texels = 0; - for (uint32_t slice_index = 0; slice_index < m_slice_descs.size(); slice_index++) - { - const basisu_backend_slice_desc &slice_desc = m_slice_descs[slice_index]; - - total_orig_texels += slice_desc.m_orig_width * slice_desc.m_orig_height; - - const uint32_t total_blocks = slice_desc.m_num_blocks_x * slice_desc.m_num_blocks_y; - BASISU_NOTE_UNUSED(total_blocks); - - assert(m_decoded_output_textures[slice_index].get_total_blocks() == total_blocks); + total_orig_pixels += slice_desc.m_orig_width * slice_desc.m_orig_height; + total_texels += slice_desc.m_width * slice_desc.m_height; } m_basis_file_size = (uint32_t)comp_data.size(); - m_basis_bits_per_texel = (comp_data.size() * 8.0f) / total_orig_texels; + m_basis_bits_per_texel = total_orig_texels ? (comp_data.size() * 8.0f) / total_orig_texels : 0; + debug_printf("Total .basis output file size: %u, %3.3f bits/texel\n", comp_data.size(), comp_data.size() * 8.0f / total_orig_pixels); + + if (m_params.m_validate_output_data) + { + interval_timer tm; + tm.start(); + + basist::basisu_transcoder_init(); + + debug_printf("basist::basisu_transcoder_init: Took %f ms\n", tm.get_elapsed_ms()); + + // Verify the compressed data by transcoding it to ASTC (or ETC1)/BC7 and validating the CRC's. + basist::basisu_transcoder decoder; + if (!decoder.validate_file_checksums(&comp_data[0], (uint32_t)comp_data.size(), true)) + { + error_printf("decoder.validate_file_checksums() failed!\n"); + return false; + } + + m_decoded_output_textures.resize(m_slice_descs.size()); + m_decoded_output_textures_unpacked.resize(m_slice_descs.size()); + + m_decoded_output_textures_bc7.resize(m_slice_descs.size()); + m_decoded_output_textures_unpacked_bc7.resize(m_slice_descs.size()); + + tm.start(); + if (m_params.m_pGlobal_codebooks) + { + decoder.set_global_codebooks(m_params.m_pGlobal_codebooks); + } + + if (!decoder.start_transcoding(&comp_data[0], (uint32_t)comp_data.size())) + { + error_printf("decoder.start_transcoding() failed!\n"); + return false; + } + + double start_transcoding_time = tm.get_elapsed_secs(); + + debug_printf("basisu_compressor::start_transcoding() took %3.3fms\n", start_transcoding_time * 1000.0f); + + double total_time_etc1s_or_astc = 0; + + for (uint32_t i = 0; i < m_slice_descs.size(); i++) + { + gpu_image decoded_texture; + decoded_texture.init(m_params.m_uastc ? texture_format::cUASTC4x4 : texture_format::cETC1, m_slice_descs[i].m_width, m_slice_descs[i].m_height); + + tm.start(); + + basist::block_format format = m_params.m_uastc ? basist::block_format::cUASTC_4x4 : basist::block_format::cETC1; + uint32_t bytes_per_block = m_params.m_uastc ? 16 : 8; + + if (!decoder.transcode_slice(&comp_data[0], (uint32_t)comp_data.size(), i, + reinterpret_cast(decoded_texture.get_ptr()), m_slice_descs[i].m_num_blocks_x * m_slice_descs[i].m_num_blocks_y, format, bytes_per_block)) + { + error_printf("Transcoding failed on slice %u!\n", i); + return false; + } + + total_time_etc1s_or_astc += tm.get_elapsed_secs(); + + if (encoded_output.m_tex_format == basist::basis_tex_format::cETC1S) + { + uint32_t image_crc16 = basist::crc16(decoded_texture.get_ptr(), decoded_texture.get_size_in_bytes(), 0); + if (image_crc16 != encoded_output.m_slice_image_crcs[i]) + { + error_printf("Decoded image data CRC check failed on slice %u!\n", i); + return false; + } + debug_printf("Decoded image data CRC check succeeded on slice %i\n", i); + } + + m_decoded_output_textures[i] = decoded_texture; + } + + double total_time_bc7 = 0; + + if (basist::basis_is_format_supported(basist::transcoder_texture_format::cTFBC7_RGBA, basist::basis_tex_format::cUASTC4x4) && + basist::basis_is_format_supported(basist::transcoder_texture_format::cTFBC7_RGBA, basist::basis_tex_format::cETC1S)) + { + for (uint32_t i = 0; i < m_slice_descs.size(); i++) + { + gpu_image decoded_texture; + decoded_texture.init(texture_format::cBC7, m_slice_descs[i].m_width, m_slice_descs[i].m_height); + + tm.start(); + + if (!decoder.transcode_slice(&comp_data[0], (uint32_t)comp_data.size(), i, + reinterpret_cast(decoded_texture.get_ptr()), m_slice_descs[i].m_num_blocks_x * m_slice_descs[i].m_num_blocks_y, basist::block_format::cBC7, 16)) + { + error_printf("Transcoding failed to BC7 on slice %u!\n", i); + return false; + } + + total_time_bc7 += tm.get_elapsed_secs(); + + m_decoded_output_textures_bc7[i] = decoded_texture; + } + } + + for (uint32_t i = 0; i < m_slice_descs.size(); i++) + { + m_decoded_output_textures[i].unpack(m_decoded_output_textures_unpacked[i]); + + if (m_decoded_output_textures_bc7[i].get_pixel_width()) + m_decoded_output_textures_bc7[i].unpack(m_decoded_output_textures_unpacked_bc7[i]); + } + + debug_printf("Transcoded to %s in %3.3fms, %f texels/sec\n", m_params.m_uastc ? "ASTC" : "ETC1", total_time_etc1s_or_astc * 1000.0f, total_orig_pixels / total_time_etc1s_or_astc); + + if (total_time_bc7 != 0) + debug_printf("Transcoded to BC7 in %3.3fms, %f texels/sec\n", total_time_bc7 * 1000.0f, total_orig_pixels / total_time_bc7); + + for (uint32_t slice_index = 0; slice_index < m_slice_descs.size(); slice_index++) + { + const basisu_backend_slice_desc& slice_desc = m_slice_descs[slice_index]; + + const uint32_t total_blocks = slice_desc.m_num_blocks_x * slice_desc.m_num_blocks_y; + BASISU_NOTE_UNUSED(total_blocks); + + assert(m_decoded_output_textures[slice_index].get_total_blocks() == total_blocks); + } + } // if (m_params.m_validate_output_data) + return true; } @@ -1465,175 +1493,171 @@ namespace basisu m_stats.resize(m_slice_descs.size()); - uint32_t total_orig_texels = 0; - - for (uint32_t slice_index = 0; slice_index < m_slice_descs.size(); slice_index++) + if (m_params.m_validate_output_data) { - const basisu_backend_slice_desc &slice_desc = m_slice_descs[slice_index]; - - total_orig_texels += slice_desc.m_orig_width * slice_desc.m_orig_height; - - if (m_params.m_compute_stats) + for (uint32_t slice_index = 0; slice_index < m_slice_descs.size(); slice_index++) { - printf("Slice: %u\n", slice_index); + const basisu_backend_slice_desc& slice_desc = m_slice_descs[slice_index]; - image_stats &s = m_stats[slice_index]; - - // TODO: We used to output SSIM (during heavy encoder development), but this slowed down compression too much. We'll be adding it back. - - image_metrics em; - - // ---- .basis stats - em.calc(m_slice_images[slice_index], m_decoded_output_textures_unpacked[slice_index], 0, 3); - em.print(".basis RGB Avg: "); - s.m_basis_rgb_avg_psnr = em.m_psnr; - - em.calc(m_slice_images[slice_index], m_decoded_output_textures_unpacked[slice_index], 0, 4); - em.print(".basis RGBA Avg: "); - s.m_basis_rgba_avg_psnr = em.m_psnr; - - em.calc(m_slice_images[slice_index], m_decoded_output_textures_unpacked[slice_index], 0, 1); - em.print(".basis R Avg: "); - - em.calc(m_slice_images[slice_index], m_decoded_output_textures_unpacked[slice_index], 1, 1); - em.print(".basis G Avg: "); - - em.calc(m_slice_images[slice_index], m_decoded_output_textures_unpacked[slice_index], 2, 1); - em.print(".basis B Avg: "); - - if (m_params.m_uastc) + if (m_params.m_compute_stats) { - em.calc(m_slice_images[slice_index], m_decoded_output_textures_unpacked[slice_index], 3, 1); - em.print(".basis A Avg: "); + printf("Slice: %u\n", slice_index); - s.m_basis_a_avg_psnr = em.m_psnr; - } + image_stats& s = m_stats[slice_index]; - em.calc(m_slice_images[slice_index], m_decoded_output_textures_unpacked[slice_index], 0, 0); - em.print(".basis 709 Luma: "); - s.m_basis_luma_709_psnr = static_cast(em.m_psnr); - s.m_basis_luma_709_ssim = static_cast(em.m_ssim); + // TODO: We used to output SSIM (during heavy encoder development), but this slowed down compression too much. We'll be adding it back. - em.calc(m_slice_images[slice_index], m_decoded_output_textures_unpacked[slice_index], 0, 0, true, true); - em.print(".basis 601 Luma: "); - s.m_basis_luma_601_psnr = static_cast(em.m_psnr); - - if (m_slice_descs.size() == 1) - { - const uint32_t output_size = comp_size ? (uint32_t)comp_size : (uint32_t)comp_data.size(); - debug_printf(".basis RGB PSNR per bit/texel*10000: %3.3f\n", 10000.0f * s.m_basis_rgb_avg_psnr / ((output_size * 8.0f) / (slice_desc.m_orig_width * slice_desc.m_orig_height))); - debug_printf(".basis Luma 709 PSNR per bit/texel*10000: %3.3f\n", 10000.0f * s.m_basis_luma_709_psnr / ((output_size * 8.0f) / (slice_desc.m_orig_width * slice_desc.m_orig_height))); - } + image_metrics em; - if (m_decoded_output_textures_unpacked_bc7[slice_index].get_width()) - { - // ---- BC7 stats - em.calc(m_slice_images[slice_index], m_decoded_output_textures_unpacked_bc7[slice_index], 0, 3); - em.print("BC7 RGB Avg: "); - s.m_bc7_rgb_avg_psnr = em.m_psnr; + // ---- .basis stats + em.calc(m_slice_images[slice_index], m_decoded_output_textures_unpacked[slice_index], 0, 3); + em.print(".basis RGB Avg: "); + s.m_basis_rgb_avg_psnr = em.m_psnr; - em.calc(m_slice_images[slice_index], m_decoded_output_textures_unpacked_bc7[slice_index], 0, 4); - em.print("BC7 RGBA Avg: "); - s.m_bc7_rgba_avg_psnr = em.m_psnr; + em.calc(m_slice_images[slice_index], m_decoded_output_textures_unpacked[slice_index], 0, 4); + em.print(".basis RGBA Avg: "); + s.m_basis_rgba_avg_psnr = em.m_psnr; - em.calc(m_slice_images[slice_index], m_decoded_output_textures_unpacked_bc7[slice_index], 0, 1); - em.print("BC7 R Avg: "); + em.calc(m_slice_images[slice_index], m_decoded_output_textures_unpacked[slice_index], 0, 1); + em.print(".basis R Avg: "); - em.calc(m_slice_images[slice_index], m_decoded_output_textures_unpacked_bc7[slice_index], 1, 1); - em.print("BC7 G Avg: "); + em.calc(m_slice_images[slice_index], m_decoded_output_textures_unpacked[slice_index], 1, 1); + em.print(".basis G Avg: "); - em.calc(m_slice_images[slice_index], m_decoded_output_textures_unpacked_bc7[slice_index], 2, 1); - em.print("BC7 B Avg: "); + em.calc(m_slice_images[slice_index], m_decoded_output_textures_unpacked[slice_index], 2, 1); + em.print(".basis B Avg: "); if (m_params.m_uastc) { - em.calc(m_slice_images[slice_index], m_decoded_output_textures_unpacked_bc7[slice_index], 3, 1); - em.print("BC7 A Avg: "); + em.calc(m_slice_images[slice_index], m_decoded_output_textures_unpacked[slice_index], 3, 1); + em.print(".basis A Avg: "); - s.m_bc7_a_avg_psnr = em.m_psnr; + s.m_basis_a_avg_psnr = em.m_psnr; } - em.calc(m_slice_images[slice_index], m_decoded_output_textures_unpacked_bc7[slice_index], 0, 0); - em.print("BC7 709 Luma: "); - s.m_bc7_luma_709_psnr = static_cast(em.m_psnr); - s.m_bc7_luma_709_ssim = static_cast(em.m_ssim); + em.calc(m_slice_images[slice_index], m_decoded_output_textures_unpacked[slice_index], 0, 0); + em.print(".basis 709 Luma: "); + s.m_basis_luma_709_psnr = static_cast(em.m_psnr); + s.m_basis_luma_709_ssim = static_cast(em.m_ssim); - em.calc(m_slice_images[slice_index], m_decoded_output_textures_unpacked_bc7[slice_index], 0, 0, true, true); - em.print("BC7 601 Luma: "); - s.m_bc7_luma_601_psnr = static_cast(em.m_psnr); + em.calc(m_slice_images[slice_index], m_decoded_output_textures_unpacked[slice_index], 0, 0, true, true); + em.print(".basis 601 Luma: "); + s.m_basis_luma_601_psnr = static_cast(em.m_psnr); + + if (m_slice_descs.size() == 1) + { + const uint32_t output_size = comp_size ? (uint32_t)comp_size : (uint32_t)comp_data.size(); + debug_printf(".basis RGB PSNR per bit/texel*10000: %3.3f\n", 10000.0f * s.m_basis_rgb_avg_psnr / ((output_size * 8.0f) / (slice_desc.m_orig_width * slice_desc.m_orig_height))); + debug_printf(".basis Luma 709 PSNR per bit/texel*10000: %3.3f\n", 10000.0f * s.m_basis_luma_709_psnr / ((output_size * 8.0f) / (slice_desc.m_orig_width * slice_desc.m_orig_height))); + } + + if (m_decoded_output_textures_unpacked_bc7[slice_index].get_width()) + { + // ---- BC7 stats + em.calc(m_slice_images[slice_index], m_decoded_output_textures_unpacked_bc7[slice_index], 0, 3); + em.print("BC7 RGB Avg: "); + s.m_bc7_rgb_avg_psnr = em.m_psnr; + + em.calc(m_slice_images[slice_index], m_decoded_output_textures_unpacked_bc7[slice_index], 0, 4); + em.print("BC7 RGBA Avg: "); + s.m_bc7_rgba_avg_psnr = em.m_psnr; + + em.calc(m_slice_images[slice_index], m_decoded_output_textures_unpacked_bc7[slice_index], 0, 1); + em.print("BC7 R Avg: "); + + em.calc(m_slice_images[slice_index], m_decoded_output_textures_unpacked_bc7[slice_index], 1, 1); + em.print("BC7 G Avg: "); + + em.calc(m_slice_images[slice_index], m_decoded_output_textures_unpacked_bc7[slice_index], 2, 1); + em.print("BC7 B Avg: "); + + if (m_params.m_uastc) + { + em.calc(m_slice_images[slice_index], m_decoded_output_textures_unpacked_bc7[slice_index], 3, 1); + em.print("BC7 A Avg: "); + + s.m_bc7_a_avg_psnr = em.m_psnr; + } + + em.calc(m_slice_images[slice_index], m_decoded_output_textures_unpacked_bc7[slice_index], 0, 0); + em.print("BC7 709 Luma: "); + s.m_bc7_luma_709_psnr = static_cast(em.m_psnr); + s.m_bc7_luma_709_ssim = static_cast(em.m_ssim); + + em.calc(m_slice_images[slice_index], m_decoded_output_textures_unpacked_bc7[slice_index], 0, 0, true, true); + em.print("BC7 601 Luma: "); + s.m_bc7_luma_601_psnr = static_cast(em.m_psnr); + } + + if (!m_params.m_uastc) + { + // ---- Nearly best possible ETC1S stats + em.calc(m_slice_images[slice_index], m_best_etc1s_images_unpacked[slice_index], 0, 3); + em.print("Unquantized ETC1S RGB Avg: "); + s.m_best_etc1s_rgb_avg_psnr = static_cast(em.m_psnr); + + em.calc(m_slice_images[slice_index], m_best_etc1s_images_unpacked[slice_index], 0, 0); + em.print("Unquantized ETC1S 709 Luma: "); + s.m_best_etc1s_luma_709_psnr = static_cast(em.m_psnr); + s.m_best_etc1s_luma_709_ssim = static_cast(em.m_ssim); + + em.calc(m_slice_images[slice_index], m_best_etc1s_images_unpacked[slice_index], 0, 0, true, true); + em.print("Unquantized ETC1S 601 Luma: "); + s.m_best_etc1s_luma_601_psnr = static_cast(em.m_psnr); + } } - if (!m_params.m_uastc) + std::string out_basename; + if (m_params.m_out_filename.size()) + string_get_filename(m_params.m_out_filename.c_str(), out_basename); + else if (m_params.m_source_filenames.size()) + string_get_filename(m_params.m_source_filenames[slice_desc.m_source_file_index].c_str(), out_basename); + + string_remove_extension(out_basename); + out_basename = "basis_debug_" + out_basename + string_format("_slice_%u", slice_index); + + if ((!m_params.m_uastc) && (m_frontend.get_params().m_debug_images)) { - // ---- Nearly best possible ETC1S stats - em.calc(m_slice_images[slice_index], m_best_etc1s_images_unpacked[slice_index], 0, 0); - em.print("Unquantized ETC1S 709 Luma: "); + // Write "best" ETC1S debug images + if (!m_params.m_uastc) + { + gpu_image best_etc1s_gpu_image(m_best_etc1s_images[slice_index]); + best_etc1s_gpu_image.override_dimensions(slice_desc.m_orig_width, slice_desc.m_orig_height); + write_compressed_texture_file((out_basename + "_best_etc1s.ktx").c_str(), best_etc1s_gpu_image); - s.m_best_etc1s_luma_709_psnr = static_cast(em.m_psnr); - s.m_best_etc1s_luma_709_ssim = static_cast(em.m_ssim); + image best_etc1s_unpacked; + best_etc1s_gpu_image.unpack(best_etc1s_unpacked); + save_png(out_basename + "_best_etc1s.png", best_etc1s_unpacked); + } + } - em.calc(m_slice_images[slice_index], m_best_etc1s_images_unpacked[slice_index], 0, 0, true, true); - em.print("Unquantized ETC1S 601 Luma: "); + if (m_params.m_debug_images) + { + // Write decoded ETC1S/ASTC debug images + { + gpu_image decoded_etc1s_or_astc(m_decoded_output_textures[slice_index]); + decoded_etc1s_or_astc.override_dimensions(slice_desc.m_orig_width, slice_desc.m_orig_height); + write_compressed_texture_file((out_basename + "_transcoded_etc1s_or_astc.ktx").c_str(), decoded_etc1s_or_astc); - s.m_best_etc1s_luma_601_psnr = static_cast(em.m_psnr); + image temp(m_decoded_output_textures_unpacked[slice_index]); + temp.crop(slice_desc.m_orig_width, slice_desc.m_orig_height); + save_png(out_basename + "_transcoded_etc1s_or_astc.png", temp); + } - em.calc(m_slice_images[slice_index], m_best_etc1s_images_unpacked[slice_index], 0, 3); - em.print("Unquantized ETC1S RGB Avg: "); + // Write decoded BC7 debug images + if (m_decoded_output_textures_bc7[slice_index].get_pixel_width()) + { + gpu_image decoded_bc7(m_decoded_output_textures_bc7[slice_index]); + decoded_bc7.override_dimensions(slice_desc.m_orig_width, slice_desc.m_orig_height); + write_compressed_texture_file((out_basename + "_transcoded_bc7.ktx").c_str(), decoded_bc7); - s.m_best_etc1s_rgb_avg_psnr = static_cast(em.m_psnr); + image temp(m_decoded_output_textures_unpacked_bc7[slice_index]); + temp.crop(slice_desc.m_orig_width, slice_desc.m_orig_height); + save_png(out_basename + "_transcoded_bc7.png", temp); + } } } - - std::string out_basename; - if (m_params.m_out_filename.size()) - string_get_filename(m_params.m_out_filename.c_str(), out_basename); - else if (m_params.m_source_filenames.size()) - string_get_filename(m_params.m_source_filenames[slice_desc.m_source_file_index].c_str(), out_basename); - - string_remove_extension(out_basename); - out_basename = "basis_debug_" + out_basename + string_format("_slice_%u", slice_index); - - if ((!m_params.m_uastc) && (m_frontend.get_params().m_debug_images)) - { - // Write "best" ETC1S debug images - if (!m_params.m_uastc) - { - gpu_image best_etc1s_gpu_image(m_best_etc1s_images[slice_index]); - best_etc1s_gpu_image.override_dimensions(slice_desc.m_orig_width, slice_desc.m_orig_height); - write_compressed_texture_file((out_basename + "_best_etc1s.ktx").c_str(), best_etc1s_gpu_image); - - image best_etc1s_unpacked; - best_etc1s_gpu_image.unpack(best_etc1s_unpacked); - save_png(out_basename + "_best_etc1s.png", best_etc1s_unpacked); - } - } - - if (m_params.m_debug_images) - { - // Write decoded ETC1S/ASTC debug images - { - gpu_image decoded_etc1s_or_astc(m_decoded_output_textures[slice_index]); - decoded_etc1s_or_astc.override_dimensions(slice_desc.m_orig_width, slice_desc.m_orig_height); - write_compressed_texture_file((out_basename + "_transcoded_etc1s_or_astc.ktx").c_str(), decoded_etc1s_or_astc); - - image temp(m_decoded_output_textures_unpacked[slice_index]); - temp.crop(slice_desc.m_orig_width, slice_desc.m_orig_height); - save_png(out_basename + "_transcoded_etc1s_or_astc.png", temp); - } - - // Write decoded BC7 debug images - if (m_decoded_output_textures_bc7[slice_index].get_pixel_width()) - { - gpu_image decoded_bc7(m_decoded_output_textures_bc7[slice_index]); - decoded_bc7.override_dimensions(slice_desc.m_orig_width, slice_desc.m_orig_height); - write_compressed_texture_file((out_basename + "_transcoded_bc7.ktx").c_str(), decoded_bc7); - - image temp(m_decoded_output_textures_unpacked_bc7[slice_index]); - temp.crop(slice_desc.m_orig_width, slice_desc.m_orig_height); - save_png(out_basename + "_transcoded_bc7.png", temp); - } - } - } + } // if (m_params.m_validate_output_data) return true; } @@ -2116,4 +2140,252 @@ namespace basisu return true; } + bool basis_parallel_compress( + uint32_t total_threads, + const basisu::vector& params_vec, + basisu::vector< parallel_results >& results_vec) + { + assert(g_library_initialized); + if (!g_library_initialized) + { + error_printf("basis_parallel_compress: basisu_encoder_init() MUST be called before using any encoder functionality!\n"); + return false; + } + + assert(total_threads >= 1); + total_threads = basisu::maximum(total_threads, 1); + + job_pool jpool(total_threads); + + results_vec.resize(0); + results_vec.resize(params_vec.size()); + + std::atomic result; + result = true; + + std::atomic opencl_failed; + opencl_failed = false; + + for (uint32_t pindex = 0; pindex < params_vec.size(); pindex++) + { + jpool.add_job([pindex, ¶ms_vec, &results_vec, &result, &opencl_failed] { + + basis_compressor_params params = params_vec[pindex]; + parallel_results& results = results_vec[pindex]; + + interval_timer tm; + tm.start(); + + basis_compressor c; + + // Dummy job pool + job_pool task_jpool(1); + params.m_pJob_pool = &task_jpool; + // TODO: Remove this flag entirely + params.m_multithreading = true; + + // Stop using OpenCL if a failure ever occurs. + if (opencl_failed) + params.m_use_opencl = false; + + bool status = c.init(params); + + if (c.get_opencl_failed()) + opencl_failed = true; + + if (status) + { + basis_compressor::error_code ec = c.process(); + + if (c.get_opencl_failed()) + opencl_failed = true; + + results.m_error_code = ec; + + if (ec == basis_compressor::cECSuccess) + { + results.m_basis_file = c.get_output_basis_file(); + results.m_ktx2_file = c.get_output_ktx2_file(); + results.m_stats = c.get_stats(); + results.m_basis_bits_per_texel = c.get_basis_bits_per_texel(); + results.m_any_source_image_has_alpha = c.get_any_source_image_has_alpha(); + } + else + { + result = false; + } + } + else + { + results.m_error_code = basis_compressor::cECFailedInitializing; + + result = false; + } + + results.m_total_time = tm.get_elapsed_secs(); + } ); + + } // pindex + + jpool.wait_for_all(); + + if (opencl_failed) + error_printf("An OpenCL error occured sometime during compression. The compressor fell back to CPU processing after the failure.\n"); + + return result; + } + + void* basis_compress( + const basisu::vector& source_images, + uint32_t flags_and_quality, float uastc_rdo_quality, + size_t* pSize, + image_stats* pStats) + { + // Check input parameters + if ((!source_images.size()) || (!pSize)) + { + error_printf("basis_compress: Invalid parameter\n"); + assert(0); + return nullptr; + } + + *pSize = 0; + + // Initialize a job pool + uint32_t num_threads = 1; + if (flags_and_quality & cFlagThreaded) + num_threads = basisu::maximum(1, std::thread::hardware_concurrency()); + + job_pool jp(num_threads); + + // Initialize the compressor parameter struct + basis_compressor_params comp_params; + comp_params.m_pJob_pool = &jp; + + comp_params.m_y_flip = (flags_and_quality & cFlagYFlip) != 0; + comp_params.m_debug = (flags_and_quality & cFlagDebug) != 0; + + // Copy the largest mipmap level + comp_params.m_source_images.resize(1); + comp_params.m_source_images[0] = source_images[0]; + + // Copy the smaller mipmap levels, if any + if (source_images.size() > 1) + { + comp_params.m_source_mipmap_images.resize(1); + comp_params.m_source_mipmap_images[0].resize(source_images.size() - 1); + + for (uint32_t i = 1; i < source_images.size(); i++) + comp_params.m_source_mipmap_images[0][i - 1] = source_images[i]; + } + + comp_params.m_multithreading = (flags_and_quality & cFlagThreaded) != 0; + comp_params.m_use_opencl = (flags_and_quality & cFlagUseOpenCL) != 0; + + comp_params.m_write_output_basis_files = false; + + comp_params.m_perceptual = (flags_and_quality & cFlagSRGB) != 0; + comp_params.m_mip_srgb = comp_params.m_perceptual; + comp_params.m_mip_gen = (flags_and_quality & (cFlagGenMipsWrap | cFlagGenMipsClamp)) != 0; + comp_params.m_mip_wrapping = (flags_and_quality & cFlagGenMipsWrap) != 0; + + comp_params.m_uastc = (flags_and_quality & cFlagUASTC) != 0; + if (comp_params.m_uastc) + { + comp_params.m_pack_uastc_flags = flags_and_quality & cPackUASTCLevelMask; + comp_params.m_rdo_uastc = (flags_and_quality & cFlagUASTCRDO) != 0; + comp_params.m_rdo_uastc_quality_scalar = uastc_rdo_quality; + } + else + comp_params.m_quality_level = basisu::maximum(1, flags_and_quality & 255); + + comp_params.m_create_ktx2_file = (flags_and_quality & cFlagKTX2) != 0; + + if (comp_params.m_create_ktx2_file) + { + // Set KTX2 specific parameters. + if ((flags_and_quality & cFlagKTX2UASTCSuperCompression) && (comp_params.m_uastc)) + comp_params.m_ktx2_uastc_supercompression = basist::KTX2_SS_ZSTANDARD; + + comp_params.m_ktx2_srgb_transfer_func = comp_params.m_perceptual; + } + + comp_params.m_compute_stats = (pStats != nullptr); + + // Create the compressor, initialize it, and process the input + basis_compressor comp; + if (!comp.init(comp_params)) + { + error_printf("basis_compress: basis_compressor::init() failed!\n"); + return nullptr; + } + + basis_compressor::error_code ec = comp.process(); + + if (ec != basis_compressor::cECSuccess) + { + error_printf("basis_compress: basis_compressor::process() failed with error code %u\n", (uint32_t)ec); + return nullptr; + } + + // Get the output file data and return it to the caller + void* pFile_data = nullptr; + const uint8_vec* pFile_data_vec = comp_params.m_create_ktx2_file ? &comp.get_output_ktx2_file() : &comp.get_output_basis_file(); + + pFile_data = malloc(pFile_data_vec->size()); + if (!pFile_data) + { + error_printf("basis_compress: Out of memory\n"); + return nullptr; + } + memcpy(pFile_data, pFile_data_vec->get_ptr(), pFile_data_vec->size()); + + *pSize = pFile_data_vec->size(); + + if ((pStats) && (comp.get_stats().size())) + { + *pStats = comp.get_stats()[0]; + } + + return pFile_data; + } + + void* basis_compress( + const uint8_t* pImageRGBA, uint32_t width, uint32_t height, uint32_t pitch_in_pixels, + uint32_t flags_and_quality, float uastc_rdo_quality, + size_t* pSize, + image_stats* pStats) + { + if (!pitch_in_pixels) + pitch_in_pixels = width; + + if ((!pImageRGBA) || (!width) || (!height) || (pitch_in_pixels < width) || (!pSize)) + { + error_printf("basis_compress: Invalid parameter\n"); + assert(0); + return nullptr; + } + + *pSize = 0; + + if ((width > BASISU_MAX_SUPPORTED_TEXTURE_DIMENSION) || (height > BASISU_MAX_SUPPORTED_TEXTURE_DIMENSION)) + { + error_printf("basis_compress: Image too large\n"); + return nullptr; + } + + // Copy the source image + basisu::vector source_image(1); + source_image[0].crop(width, height, width, g_black_color, false); + for (uint32_t y = 0; y < height; y++) + memcpy(source_image[0].get_ptr() + y * width, (const color_rgba*)pImageRGBA + y * pitch_in_pixels, width * sizeof(color_rgba)); + + return basis_compress(source_image, flags_and_quality, uastc_rdo_quality, pSize, pStats); + } + + void basis_free_data(void* p) + { + free(p); + } + } // namespace basisu diff --git a/encoder/basisu_comp.h b/encoder/basisu_comp.h index 2c3af96..aa5ea6f 100644 --- a/encoder/basisu_comp.h +++ b/encoder/basisu_comp.h @@ -16,12 +16,11 @@ #include "basisu_frontend.h" #include "basisu_backend.h" #include "basisu_basis_file.h" -#include "../transcoder/basisu_global_selector_palette.h" #include "../transcoder/basisu_transcoder.h" #include "basisu_uastc_enc.h" -#define BASISU_LIB_VERSION 115 -#define BASISU_LIB_VERSION_STRING "1.15" +#define BASISU_LIB_VERSION 116 +#define BASISU_LIB_VERSION_STRING "1.16" #ifndef BASISD_SUPPORT_KTX2 #error BASISD_SUPPORT_KTX2 is undefined @@ -36,6 +35,9 @@ namespace basisu { + struct opencl_context; + typedef opencl_context* opencl_context_ptr; + const uint32_t BASISU_MAX_SUPPORTED_TEXTURE_DIMENSION = 16384; // Allow block's color distance to increase by 1.5 while searching for an alternative nearby endpoint. @@ -203,13 +205,9 @@ namespace basisu struct basis_compressor_params { basis_compressor_params() : - m_pSel_codebook(NULL), m_compression_level((int)BASISU_DEFAULT_COMPRESSION_LEVEL, 0, (int)BASISU_MAX_COMPRESSION_LEVEL), m_selector_rdo_thresh(BASISU_DEFAULT_SELECTOR_RDO_THRESH, 0.0f, 1e+10f), m_endpoint_rdo_thresh(BASISU_DEFAULT_ENDPOINT_RDO_THRESH, 0.0f, 1e+10f), - m_hybrid_sel_cb_quality_thresh(BASISU_DEFAULT_HYBRID_SEL_CB_QUALITY_THRESH, 0.0f, 1e+10f), - m_global_pal_bits(8, 0, ETC1_GLOBAL_SELECTOR_CODEBOOK_MAX_PAL_BITS), - m_global_mod_bits(8, 0, basist::etc1_global_palette_entry_modifier::cTotalBits), m_mip_scale(1.0f, .000125f, 4.0f), m_mip_smallest_dimension(1, 1, 16384), m_max_endpoint_clusters(512), @@ -234,9 +232,8 @@ namespace basisu void clear() { - m_pSel_codebook = NULL; - m_uastc.clear(); + m_use_opencl.clear(); m_status_output.clear(); m_source_filenames.clear(); @@ -249,11 +246,8 @@ namespace basisu m_y_flip.clear(); m_debug.clear(); - m_validate.clear(); + m_validate_etc1s.clear(); m_debug_images.clear(); - m_global_sel_pal.clear(); - m_auto_global_sel_pal.clear(); - m_no_hybrid_sel_cb.clear(); m_perceptual.clear(); m_no_selector_rdo.clear(); m_selector_rdo_thresh.clear(); @@ -269,9 +263,6 @@ namespace basisu m_swizzle[2] = 2; m_swizzle[3] = 3; m_renormalize.clear(); - m_hybrid_sel_cb_quality_thresh.clear(); - m_global_pal_bits.clear(); - m_global_mod_bits.clear(); m_disable_hierarchical_endpoint_codebooks.clear(); m_no_endpoint_rdo.clear(); @@ -319,15 +310,16 @@ namespace basisu m_ktx2_zstd_supercompression_level.clear(); m_ktx2_srgb_transfer_func.clear(); + m_validate_output_data.clear(); + m_pJob_pool = nullptr; } - - // Pointer to the global selector codebook, or nullptr to not use a global selector codebook - const basist::etc1_global_selector_codebook *m_pSel_codebook; - + // True to generate UASTC .basis file data, otherwise ETC1S. bool_param m_uastc; + bool_param m_use_opencl; + // If m_read_source_images is true, m_source_filenames (and optionally m_source_alpha_filenames) contains the filenames of PNG images to read. // Otherwise, the compressor processes the images in m_source_images. basisu::vector m_source_filenames; @@ -353,20 +345,16 @@ namespace basisu // Output debug information during compression bool_param m_debug; - bool_param m_validate; + bool_param m_validate_etc1s; // m_debug_images is pretty slow bool_param m_debug_images; - // Compression level, from 0 to BASISU_MAX_COMPRESSION_LEVEL (higher is slower) + // ETC1S compression level, from 0 to BASISU_MAX_COMPRESSION_LEVEL (higher is slower). + // This parameter controls numerous internal encoding speed vs. compression efficiency/performance tradeoffs. + // Note this is NOT the same as the ETC1S quality level, and most users shouldn't change this. param m_compression_level; - - bool_param m_global_sel_pal; - bool_param m_auto_global_sel_pal; - - // Frontend/backend codec parameters - bool_param m_no_hybrid_sel_cb; - + // Use perceptual sRGB colorspace metrics instead of linear bool_param m_perceptual; @@ -398,13 +386,10 @@ namespace basisu bool_param m_renormalize; + // If true the front end will not use 2 level endpoint codebook searching, for slightly higher quality but much slower execution. + // Note some m_compression_level's disable this automatically. bool_param m_disable_hierarchical_endpoint_codebooks; - - // Global/hybrid selector codebook parameters - param m_hybrid_sel_cb_quality_thresh; - param m_global_pal_bits; - param m_global_mod_bits; - + // mipmap generation parameters bool_param m_mip_gen; param m_mip_scale; @@ -415,9 +400,9 @@ namespace basisu bool_param m_mip_wrapping; bool_param m_mip_fast; param m_mip_smallest_dimension; - + // Codebook size (quality) control. - // If m_quality_level != -1, it controls the quality level. It ranges from [0,255] or [BASISU_QUALITY_MIN, BASISU_QUALITY_MAX]. + // If m_quality_level != -1, it controls the quality level. It ranges from [1,255] or [BASISU_QUALITY_MIN, BASISU_QUALITY_MAX]. // Otherwise m_max_endpoint_clusters/m_max_selector_clusters controls the codebook sizes directly. uint32_t m_max_endpoint_clusters; uint32_t m_max_selector_clusters; @@ -444,6 +429,7 @@ namespace basisu param m_resample_width; param m_resample_height; param m_resample_factor; + const basist::basisu_lowlevel_etc1s_transcoder *m_pGlobal_codebooks; // KTX2 specific parameters. @@ -454,21 +440,27 @@ namespace basisu param m_ktx2_zstd_supercompression_level; bool_param m_ktx2_srgb_transfer_func; + bool_param m_validate_output_data; + job_pool *m_pJob_pool; }; - + + // Important: basisu_encoder_init() MUST be called first before using this class. class basis_compressor { BASISU_NO_EQUALS_OR_COPY_CONSTRUCT(basis_compressor); public: basis_compressor(); + ~basis_compressor(); + // Note it *should* be possible to call init() multiple times with different inputs, but this scenario isn't well tested. Ideally, create 1 object, compress, then delete it. bool init(const basis_compressor_params ¶ms); enum error_code { cECSuccess = 0, + cECFailedInitializing, cECFailedReadingSourceImages, cECFailedValidating, cECFailedEncodeUASTC, @@ -495,9 +487,13 @@ namespace basisu double get_basis_bits_per_texel() const { return m_basis_bits_per_texel; } bool get_any_source_image_has_alpha() const { return m_any_source_image_has_alpha; } + + bool get_opencl_failed() const { return m_opencl_failed; } private: basis_compressor_params m_params; + + opencl_context_ptr m_pOpenCL_context; basisu::vector m_slice_images; @@ -509,8 +505,7 @@ namespace basisu basisu_backend_slice_desc_vec m_slice_descs; uint32_t m_total_blocks; - bool m_auto_global_sel_pal; - + basisu_frontend m_frontend; pixel_block_vec m_source_blocks; @@ -536,6 +531,8 @@ namespace basisu bool m_any_source_image_has_alpha; + bool m_opencl_failed; + bool read_source_images(); bool extract_source_blocks(); bool process_frontend(); @@ -550,6 +547,98 @@ namespace basisu void get_dfd(uint8_vec& dfd, const basist::ktx2_header& hdr); bool create_ktx2_file(); }; + + // Alternative simple C-style wrapper API around the basis_compressor class. + // This doesn't expose every encoder feature, but it's enough to get going. + // Important: basisu_encoder_init() MUST be called first before calling these functions. + // + // Input parameters: + // source_images: Array of "image" objects, one per mipmap level, largest mipmap level first. + // OR + // pImageRGBA: pointer to a 32-bpp RGBx or RGBA raster image, R first in memory, A last. Top scanline first in memory. + // width/height/pitch_in_pixels: dimensions of pImageRGBA + // + // flags_and_quality: Combination of the above flags logically OR'd with the ETC1S or UASTC level, i.e. "cFlagSRGB | cFlagGenMipsClamp | cFlagThreaded | 128" or "cFlagSRGB | cFlagGenMipsClamp | cFlagUASTC | cFlagThreaded | cPackUASTCLevelDefault". + // In ETC1S mode, the lower 8-bits are the ETC1S quality level which ranges from [1,255] (higher=better quality/larger files) + // In UASTC mode, the lower 8-bits are the UASTC pack level (see cPackUASTCLevelFastest, etc.). Fastest/lowest quality is 0, so be sure to set it correctly. + // + // uastc_rdo_quality: Float UASTC RDO quality level (0=no change, higher values lower quality but increase compressibility, initially try .5-1.5) + // + // pSize: Returns the output data's compressed size in bytes + // + // Return value is the compressed .basis or .ktx2 file data, or nullptr on failure. Must call basis_free() to free it. + enum + { + cFlagUseOpenCL = 1 << 8, // use OpenCL if available + cFlagThreaded = 1 << 9, // use multiple threads for compression + cFlagDebug = 1 << 10, // enable debug output + cFlagKTX2 = 1 << 11, // generate a KTX2 file + cFlagKTX2UASTCSuperCompression = 1 << 12, // use KTX2 Zstd supercompression on UASTC files + + cFlagSRGB = 1 << 13, // input texture is sRGB, use perceptual colorspace metrics, also use sRGB filtering during mipmap gen, and also sets KTX2 output transfer func to sRGB + cFlagGenMipsClamp = 1 << 14, // generate mipmaps with clamp addressing + cFlagGenMipsWrap = 1 << 15, // generate mipmaps with wrap addressing + + cFlagYFlip = 1 << 16, // flip source image on Y axis before compression + + cFlagUASTC = 1 << 17, // use UASTC compression vs. ETC1S + cFlagUASTCRDO = 1 << 18 // use RDO postprocessing when generating UASTC files (must set uastc_rdo_quality to the quality scalar) + }; + + // This function accepts an array of source images. + // If more than one image is provided, it's assumed the images form a mipmap pyramid and automatic mipmap generation is disabled. + void* basis_compress( + const basisu::vector &source_images, + uint32_t flags_and_quality, float uastc_rdo_quality, + size_t* pSize, + image_stats* pStats = nullptr); + + // This function only accepts a single source image. + void* basis_compress( + const uint8_t* pImageRGBA, uint32_t width, uint32_t height, uint32_t pitch_in_pixels, + uint32_t flags_and_quality, float uastc_rdo_quality, + size_t* pSize, + image_stats* pStats = nullptr); + + // Frees the dynamically allocated file data returned by basis_compress(). + void basis_free_data(void* p); + + // Parallel compression API + struct parallel_results + { + double m_total_time; + basis_compressor::error_code m_error_code; + uint8_vec m_basis_file; + uint8_vec m_ktx2_file; + basisu::vector m_stats; + double m_basis_bits_per_texel; + bool m_any_source_image_has_alpha; + + parallel_results() + { + clear(); + } + + void clear() + { + m_total_time = 0.0f; + m_error_code = basis_compressor::cECFailedInitializing; + m_basis_file.clear(); + m_ktx2_file.clear(); + m_stats.clear(); + m_basis_bits_per_texel = 0.0f; + m_any_source_image_has_alpha = false; + } + }; + + // Compresses an array of input textures across total_threads threads using the basis_compressor class. + // Compressing multiple textures at a time is substantially more efficient than just compressing one at a time. + // total_threads must be >= 1. + bool basis_parallel_compress( + uint32_t total_threads, + const basisu::vector ¶ms_vec, + basisu::vector< parallel_results > &results_vec); + } // namespace basisu diff --git a/encoder/basisu_enc.cpp b/encoder/basisu_enc.cpp index a726208..b427215 100644 --- a/encoder/basisu_enc.cpp +++ b/encoder/basisu_enc.cpp @@ -13,16 +13,20 @@ // See the License for the specific language governing permissions and // limitations under the License. #include "basisu_enc.h" -#include "lodepng.h" #include "basisu_resampler.h" #include "basisu_resampler_filters.h" #include "basisu_etc.h" #include "../transcoder/basisu_transcoder.h" #include "basisu_bc7enc.h" -#include "apg_bmp.h" #include "jpgd.h" +#include "pvpngreader.h" +#include "basisu_opencl.h" #include +#define MINIZ_HEADER_FILE_ONLY +#define MINIZ_NO_ZLIB_COMPATIBLE_NAMES +#include "basisu_miniz.h" + #if defined(_WIN32) // For QueryPerformanceCounter/QueryPerformanceFrequency #define WIN32_LEAN_AND_MEAN @@ -158,34 +162,62 @@ namespace basisu { 0x6E, 0x3B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+007E (~) { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} // U+007F }; - + + bool g_library_initialized; + std::mutex g_encoder_init_mutex; + // Encoder library initialization (just call once at startup) - void basisu_encoder_init() + void basisu_encoder_init(bool use_opencl, bool opencl_force_serialization) { + std::lock_guard lock(g_encoder_init_mutex); + + if (g_library_initialized) + return; + detect_sse41(); basist::basisu_transcoder_init(); pack_etc1_solid_color_init(); //uastc_init(); bc7enc_compress_block_init(); // must be after uastc_init() + + // Don't bother initializing the OpenCL module at all if it's been completely disabled. + if (use_opencl) + { + opencl_init(opencl_force_serialization); + } + + g_library_initialized = true; } - void error_printf(const char *pFmt, ...) + void basisu_encoder_deinit() { - char buf[2048]; + opencl_deinit(); + + g_library_initialized = false; + } + + void error_vprintf(const char* pFmt, va_list args) + { + char buf[8192]; - va_list args; - va_start(args, pFmt); #ifdef _WIN32 vsprintf_s(buf, sizeof(buf), pFmt, args); #else vsnprintf(buf, sizeof(buf), pFmt, args); #endif - va_end(args); fprintf(stderr, "ERROR: %s", buf); } + void error_printf(const char *pFmt, ...) + { + va_list args; + va_start(args, pFmt); + error_vprintf(pFmt, args); + va_end(args); + } + #if defined(_WIN32) inline void query_counter(timer_ticks* pTicks) { @@ -284,59 +316,6 @@ namespace basisu } const uint32_t MAX_32BIT_ALLOC_SIZE = 250000000; - - bool load_bmp(const char* pFilename, image& img) - { - int w = 0, h = 0; - unsigned int n_chans = 0; - unsigned char* pImage_data = apg_bmp_read(pFilename, &w, &h, &n_chans); - - if ((!pImage_data) || (!w) || (!h) || ((n_chans != 3) && (n_chans != 4))) - { - error_printf("Failed loading .BMP image \"%s\"!\n", pFilename); - - if (pImage_data) - apg_bmp_free(pImage_data); - - return false; - } - - if (sizeof(void *) == sizeof(uint32_t)) - { - if ((w * h * n_chans) > MAX_32BIT_ALLOC_SIZE) - { - error_printf("Image \"%s\" is too large (%ux%u) to process in a 32-bit build!\n", pFilename, w, h); - - if (pImage_data) - apg_bmp_free(pImage_data); - - return false; - } - } - - img.resize(w, h); - - const uint8_t *pSrc = pImage_data; - for (int y = 0; y < h; y++) - { - color_rgba *pDst = &img(0, y); - - for (int x = 0; x < w; x++) - { - pDst->r = pSrc[0]; - pDst->g = pSrc[1]; - pDst->b = pSrc[2]; - pDst->a = (n_chans == 3) ? 255 : pSrc[3]; - - pSrc += n_chans; - ++pDst; - } - } - - apg_bmp_free(pImage_data); - - return true; - } bool load_tga(const char* pFilename, image& img) { @@ -392,53 +371,35 @@ namespace basisu bool load_png(const uint8_t *pBuf, size_t buf_size, image &img, const char *pFilename) { + interval_timer tm; + tm.start(); + if (!buf_size) return false; - unsigned err = 0, w = 0, h = 0; - - if (sizeof(void*) == sizeof(uint32_t)) + uint32_t width = 0, height = 0, num_chans = 0; + void* pImage = pv_png::load_png(pBuf, buf_size, 4, width, height, num_chans); + if (!pBuf) { - // Inspect the image first on 32-bit builds, to see if the image would require too much memory. - lodepng::State state; - err = lodepng_inspect(&w, &h, &state, pBuf, buf_size); - if ((err != 0) || (!w) || (!h)) - return false; - - const uint32_t exepected_alloc_size = w * h * sizeof(uint32_t); - - // If the file is too large on 32-bit builds then just bail now, to prevent causing a memory exception. - if (exepected_alloc_size >= MAX_32BIT_ALLOC_SIZE) - { - error_printf("Image \"%s\" is too large (%ux%u) to process in a 32-bit build!\n", (pFilename != nullptr) ? pFilename : "", w, h); - return false; - } - - w = h = 0; + error_printf("pv_png::load_png failed while loading image \"%s\"\n", pFilename); + return false; } - std::vector out; - err = lodepng::decode(out, w, h, pBuf, buf_size); - if ((err != 0) || (!w) || (!h)) - return false; + img.grant_ownership(reinterpret_cast(pImage), width, height); - if (out.size() != (w * h * 4)) - return false; - - img.resize(w, h); - - memcpy(img.get_ptr(), &out[0], out.size()); + //debug_printf("Total load_png() time: %3.3f secs\n", tm.get_elapsed_secs()); return true; } bool load_png(const char* pFilename, image& img) { - std::vector buffer; - unsigned err = lodepng::load_file(buffer, std::string(pFilename)); - if (err) + uint8_vec buffer; + if (!read_file_to_vec(pFilename, buffer)) + { + error_printf("load_png: Failed reading file \"%s\"!\n", pFilename); return false; - + } return load_png(buffer.data(), buffer.size(), img, pFilename); } @@ -468,8 +429,6 @@ namespace basisu if (strcasecmp(pExt, "png") == 0) return load_png(pFilename, img); - if (strcasecmp(pExt, "bmp") == 0) - return load_bmp(pFilename, img); if (strcasecmp(pExt, "tga") == 0) return load_tga(pFilename, img); if ( (strcasecmp(pExt, "jpg") == 0) || (strcasecmp(pExt, "jfif") == 0) || (strcasecmp(pExt, "jpeg") == 0) ) @@ -482,61 +441,67 @@ namespace basisu { if (!img.get_total_pixels()) return false; - - const uint32_t MAX_PNG_IMAGE_DIM = 32768; - if ((img.get_width() > MAX_PNG_IMAGE_DIM) || (img.get_height() > MAX_PNG_IMAGE_DIM)) - return false; - - std::vector out; - unsigned err = 0; + void* pPNG_data = nullptr; + size_t PNG_data_size = 0; + if (image_save_flags & cImageSaveGrayscale) { - uint8_vec g_pixels(img.get_width() * img.get_height()); - uint8_t *pDst = &g_pixels[0]; + uint8_vec g_pixels(img.get_total_pixels()); + uint8_t* pDst = &g_pixels[0]; for (uint32_t y = 0; y < img.get_height(); y++) for (uint32_t x = 0; x < img.get_width(); x++) *pDst++ = img(x, y)[grayscale_comp]; - err = lodepng::encode(out, (const uint8_t*)&g_pixels[0], img.get_width(), img.get_height(), LCT_GREY, 8); + pPNG_data = buminiz::tdefl_write_image_to_png_file_in_memory_ex(g_pixels.data(), img.get_width(), img.get_height(), 1, &PNG_data_size, 1, false); } else { - bool has_alpha = img.has_alpha(); - if ((!has_alpha) || ((image_save_flags & cImageSaveIgnoreAlpha) != 0)) + bool has_alpha = false; + + if ((image_save_flags & cImageSaveIgnoreAlpha) == 0) + has_alpha = img.has_alpha(); + + if (!has_alpha) { - const uint64_t total_bytes = (uint64_t)img.get_width() * 3U * (uint64_t)img.get_height(); - if (total_bytes > INT_MAX) - return false; - uint8_vec rgb_pixels(static_cast(total_bytes)); - uint8_t *pDst = &rgb_pixels[0]; - + uint8_vec rgb_pixels(img.get_total_pixels() * 3); + uint8_t* pDst = &rgb_pixels[0]; + for (uint32_t y = 0; y < img.get_height(); y++) { + const color_rgba* pSrc = &img(0, y); for (uint32_t x = 0; x < img.get_width(); x++) { - const color_rgba& c = img(x, y); - pDst[0] = c.r; - pDst[1] = c.g; - pDst[2] = c.b; + pDst[0] = pSrc->r; + pDst[1] = pSrc->g; + pDst[2] = pSrc->b; + + pSrc++; pDst += 3; } } - err = lodepng::encode(out, (const uint8_t*)& rgb_pixels[0], img.get_width(), img.get_height(), LCT_RGB, 8); + pPNG_data = buminiz::tdefl_write_image_to_png_file_in_memory_ex(rgb_pixels.data(), img.get_width(), img.get_height(), 3, &PNG_data_size, 1, false); } else { - err = lodepng::encode(out, (const uint8_t*)img.get_ptr(), img.get_width(), img.get_height(), LCT_RGBA, 8); + pPNG_data = buminiz::tdefl_write_image_to_png_file_in_memory_ex(img.get_ptr(), img.get_width(), img.get_height(), 4, &PNG_data_size, 1, false); } } - err = lodepng::save_file(out, std::string(pFilename)); - if (err) + if (!pPNG_data) return false; - return true; + bool status = write_data_to_file(pFilename, pPNG_data, PNG_data_size); + if (!status) + { + error_printf("save_png: Failed writing to filename \"%s\"!\n", pFilename); + } + + free(pPNG_data); + + return status; } bool read_file_to_vec(const char* pFilename, uint8_vec& data) @@ -1620,7 +1585,8 @@ namespace basisu void job_pool::job_thread(uint32_t index) { - debug_printf("job_pool::job_thread: starting %u\n", index); + BASISU_NOTE_UNUSED(index); + //debug_printf("job_pool::job_thread: starting %u\n", index); while (true) { @@ -1656,7 +1622,7 @@ namespace basisu m_no_more_jobs.notify_all(); } - debug_printf("job_pool::job_thread: exiting\n"); + //debug_printf("job_pool::job_thread: exiting\n"); } // .TGA image loading @@ -1779,6 +1745,8 @@ namespace basisu return nullptr; } + //const uint32_t bytes_per_line = hdr.m_width * tga_bytes_per_pixel; + const uint8_t *pSrc = pBuf + sizeof(tga_header); uint32_t bytes_remaining = buf_size - sizeof(tga_header); diff --git a/encoder/basisu_enc.h b/encoder/basisu_enc.h index 0ce0114..4823c7d 100644 --- a/encoder/basisu_enc.h +++ b/encoder/basisu_enc.h @@ -33,14 +33,23 @@ // If BASISU_USE_HIGH_PRECISION_COLOR_DISTANCE is 1, quality in perceptual mode will be slightly greater, but at a large increase in encoding CPU time. #define BASISU_USE_HIGH_PRECISION_COLOR_DISTANCE (0) +#if BASISU_SUPPORT_SSE +// Declared in basisu_kernels_imp.h, but we can't include that here otherwise it would lead to circular type errors. +extern void update_covar_matrix_16x16_sse41(uint32_t num_vecs, const void* pWeighted_vecs, const void* pOrigin, const uint32_t *pVec_indices, void* pMatrix16x16); +#endif + namespace basisu { extern uint8_t g_hamming_dist[256]; extern const uint8_t g_debug_font8x8_basic[127 - 32 + 1][8]; + // true if basisu_encoder_init() has been called and returned. + extern bool g_library_initialized; + // Encoder library initialization. // This function MUST be called before encoding anything! - void basisu_encoder_init(); + void basisu_encoder_init(bool use_opencl = false, bool opencl_force_serialization = false); + void basisu_encoder_deinit(); // basisu_kernels_sse.cpp - will be a no-op and g_cpu_supports_sse41 will always be false unless compiled with BASISU_SUPPORT_SSE=1 extern void detect_sse41(); @@ -51,8 +60,9 @@ namespace basisu const bool g_cpu_supports_sse41 = false; #endif + void error_vprintf(const char* pFmt, va_list args); void error_printf(const char *pFmt, ...); - + // Helpers inline uint8_t clamp255(int32_t i) @@ -170,18 +180,24 @@ namespace basisu class running_stat { public: - running_stat() : - m_n(0), - m_old_m(0), m_new_m(0), m_old_s(0), m_new_s(0) - { - } + running_stat() { clear(); } + void clear() { m_n = 0; + m_total = 0; + m_old_m = 0; + m_new_m = 0; + m_old_s = 0; + m_new_s = 0; + m_min = 0; + m_max = 0; } + void push(double x) { m_n++; + m_total += x; if (m_n == 1) { m_old_m = m_new_m = x; @@ -191,6 +207,7 @@ namespace basisu } else { + // See Knuth TAOCP vol 2, 3rd edition, page 232 m_new_m = m_old_m + (x - m_old_m) / m_n; m_new_s = m_old_s + (x - m_old_m) * (x - m_new_m); m_old_m = m_new_m; @@ -199,15 +216,23 @@ namespace basisu m_max = basisu::maximum(x, m_max); } } + uint32_t get_num() const { return m_n; } + + double get_total() const + { + return m_total; + } + double get_mean() const { return (m_n > 0) ? m_new_m : 0.0; } + // Returns sample variance double get_variance() const { return ((m_n > 1) ? m_new_s / (m_n - 1) : 0.0); @@ -230,7 +255,7 @@ namespace basisu private: uint32_t m_n; - double m_old_m, m_new_m, m_old_s, m_new_s, m_min, m_max; + double m_total, m_old_m, m_new_m, m_old_s, m_new_s, m_min, m_max; }; // Linear algebra @@ -401,6 +426,8 @@ namespace basisu typedef vec<3, float> vec3F; typedef vec<2, float> vec2F; typedef vec<1, float> vec1F; + + typedef vec<16, float> vec16F; template class matrix @@ -504,6 +531,164 @@ namespace basisu [pKeys](uint32_t a, uint32_t b) { return pKeys[a] < pKeys[b]; } ); } + + // 1-4 byte direct Radix sort. + template + T* radix_sort(uint32_t num_vals, T* pBuf0, T* pBuf1, uint32_t key_ofs, uint32_t key_size) + { + assert(key_ofs < sizeof(T)); + assert((key_size >= 1) && (key_size <= 4)); + + uint32_t hist[256 * 4]; + + memset(hist, 0, sizeof(hist[0]) * 256 * key_size); + +#define BASISU_GET_KEY(p) (*(uint32_t *)((uint8_t *)(p) + key_ofs)) + + if (key_size == 4) + { + T* p = pBuf0; + T* q = pBuf0 + num_vals; + for (; p != q; p++) + { + const uint32_t key = BASISU_GET_KEY(p); + + hist[key & 0xFF]++; + hist[256 + ((key >> 8) & 0xFF)]++; + hist[512 + ((key >> 16) & 0xFF)]++; + hist[768 + ((key >> 24) & 0xFF)]++; + } + } + else if (key_size == 3) + { + T* p = pBuf0; + T* q = pBuf0 + num_vals; + for (; p != q; p++) + { + const uint32_t key = BASISU_GET_KEY(p); + + hist[key & 0xFF]++; + hist[256 + ((key >> 8) & 0xFF)]++; + hist[512 + ((key >> 16) & 0xFF)]++; + } + } + else if (key_size == 2) + { + T* p = pBuf0; + T* q = pBuf0 + (num_vals >> 1) * 2; + + for (; p != q; p += 2) + { + const uint32_t key0 = BASISU_GET_KEY(p); + const uint32_t key1 = BASISU_GET_KEY(p + 1); + + hist[key0 & 0xFF]++; + hist[256 + ((key0 >> 8) & 0xFF)]++; + + hist[key1 & 0xFF]++; + hist[256 + ((key1 >> 8) & 0xFF)]++; + } + + if (num_vals & 1) + { + const uint32_t key = BASISU_GET_KEY(p); + + hist[key & 0xFF]++; + hist[256 + ((key >> 8) & 0xFF)]++; + } + } + else + { + assert(key_size == 1); + if (key_size != 1) + return NULL; + + T* p = pBuf0; + T* q = pBuf0 + (num_vals >> 1) * 2; + + for (; p != q; p += 2) + { + const uint32_t key0 = BASISU_GET_KEY(p); + const uint32_t key1 = BASISU_GET_KEY(p + 1); + + hist[key0 & 0xFF]++; + hist[key1 & 0xFF]++; + } + + if (num_vals & 1) + { + const uint32_t key = BASISU_GET_KEY(p); + hist[key & 0xFF]++; + } + } + + T* pCur = pBuf0; + T* pNew = pBuf1; + + for (uint32_t pass = 0; pass < key_size; pass++) + { + const uint32_t* pHist = &hist[pass << 8]; + + uint32_t offsets[256]; + + uint32_t cur_ofs = 0; + for (uint32_t i = 0; i < 256; i += 2) + { + offsets[i] = cur_ofs; + cur_ofs += pHist[i]; + + offsets[i + 1] = cur_ofs; + cur_ofs += pHist[i + 1]; + } + + const uint32_t pass_shift = pass << 3; + + T* p = pCur; + T* q = pCur + (num_vals >> 1) * 2; + + for (; p != q; p += 2) + { + uint32_t c0 = (BASISU_GET_KEY(p) >> pass_shift) & 0xFF; + uint32_t c1 = (BASISU_GET_KEY(p + 1) >> pass_shift) & 0xFF; + + if (c0 == c1) + { + uint32_t dst_offset0 = offsets[c0]; + + offsets[c0] = dst_offset0 + 2; + + pNew[dst_offset0] = p[0]; + pNew[dst_offset0 + 1] = p[1]; + } + else + { + uint32_t dst_offset0 = offsets[c0]++; + uint32_t dst_offset1 = offsets[c1]++; + + pNew[dst_offset0] = p[0]; + pNew[dst_offset1] = p[1]; + } + } + + if (num_vals & 1) + { + uint32_t c = (BASISU_GET_KEY(p) >> pass_shift) & 0xFF; + + uint32_t dst_offset = offsets[c]; + offsets[c] = dst_offset + 1; + + pNew[dst_offset] = *p; + } + + T* t = pCur; + pCur = pNew; + pNew = t; + } + + return pCur; + } + +#undef BASISU_GET_KEY // Very simple job pool with no dependencies. class job_pool @@ -1258,7 +1443,7 @@ namespace basisu { codebook.resize(codebook.size() + 1); codebook.back() = cur.m_training_vecs; - + if (node_stack.empty()) break; @@ -1295,6 +1480,9 @@ namespace basisu uint32_t total_leaf_nodes = 1; + //interval_timer tm; + //tm.start(); + while ((var_heap.size()) && (total_leaf_nodes < max_size)) { const uint32_t node_index = var_heap.get_top_index(); @@ -1315,6 +1503,8 @@ namespace basisu } } + //debug_printf("tree_vector_quant::generate %u: %3.3f secs\n", TrainingVectorType::num_elements, tm.get_elapsed_secs()); + return true; } @@ -1443,17 +1633,32 @@ namespace basisu { const uint32_t N = TrainingVectorType::num_elements; - matrix cmatrix(cZero); + matrix cmatrix; - // Compute covariance matrix from weighted input vectors - for (uint32_t i = 0; i < node.m_training_vecs.size(); i++) + if ((N != 16) || (!g_cpu_supports_sse41)) { - const TrainingVectorType v(m_training_vecs[node.m_training_vecs[i]].first - node.m_origin); - const TrainingVectorType w(static_cast(m_training_vecs[node.m_training_vecs[i]].second) * v); + cmatrix.set_zero(); - for (uint32_t x = 0; x < N; x++) - for (uint32_t y = x; y < N; y++) - cmatrix[x][y] = cmatrix[x][y] + v[x] * w[y]; + // Compute covariance matrix from weighted input vectors + for (uint32_t i = 0; i < node.m_training_vecs.size(); i++) + { + const TrainingVectorType v(m_training_vecs[node.m_training_vecs[i]].first - node.m_origin); + const TrainingVectorType w(static_cast(m_training_vecs[node.m_training_vecs[i]].second) * v); + + for (uint32_t x = 0; x < N; x++) + for (uint32_t y = x; y < N; y++) + cmatrix[x][y] = cmatrix[x][y] + v[x] * w[y]; + } + } + else + { +#if BASISU_SUPPORT_SSE + // Specialize the case with 16x16 matrices, which are quite expensive without SIMD. + // This SSE function takes pointers to void types, so do some sanity checks. + assert(sizeof(TrainingVectorType) == sizeof(float) * 16); + assert(sizeof(training_vec_with_weight) == sizeof(std::pair)); + update_covar_matrix_16x16_sse41(node.m_training_vecs.size(), m_training_vecs.data(), &node.m_origin, node.m_training_vecs.data(), &cmatrix); +#endif } const float renorm_scale = 1.0f / node.m_weight; @@ -1632,16 +1837,19 @@ namespace basisu } } + // Node is unsplittable using the above algorithm - try something else to split it up. if ((!l_weight) || (!r_weight)) { l_children.resize(0); new_l_child.set(0.0f); l_ttsum = 0.0f; l_weight = 0; + r_children.resize(0); new_r_child.set(0.0f); r_ttsum = 0.0f; r_weight = 0; + TrainingVectorType firstVec; for (uint32_t i = 0; i < node.m_training_vecs.size(); i++) { @@ -1847,31 +2055,67 @@ namespace basisu uint32_t max_codebook_size, uint32_t max_parent_codebook_size, basisu::vector& codebook, basisu::vector& parent_codebook, - uint32_t max_threads, job_pool *pJob_pool) + uint32_t max_threads, job_pool *pJob_pool, + bool even_odd_input_pairs_equal) { typedef bit_hasher training_vec_bit_hasher; + typedef std::unordered_map < typename Quantizer::training_vec_type, weighted_block_group, training_vec_bit_hasher> group_hash; + //interval_timer tm; + //tm.start(); + group_hash unique_vecs; + unique_vecs.reserve(20000); + weighted_block_group g; - g.m_indices.resize(1); - - for (uint32_t i = 0; i < q.get_training_vecs().size(); i++) + + if (even_odd_input_pairs_equal) { - g.m_total_weight = q.get_training_vecs()[i].second; - g.m_indices[0] = i; + g.m_indices.resize(2); - auto ins_res = unique_vecs.insert(std::make_pair(q.get_training_vecs()[i].first, g)); + assert(q.get_training_vecs().size() >= 2 && (q.get_training_vecs().size() & 1) == 0); - if (!ins_res.second) + for (uint32_t i = 0; i < q.get_training_vecs().size(); i += 2) { - (ins_res.first)->second.m_total_weight += g.m_total_weight; - (ins_res.first)->second.m_indices.push_back(i); + assert(q.get_training_vecs()[i].first == q.get_training_vecs()[i + 1].first); + + g.m_total_weight = q.get_training_vecs()[i].second + q.get_training_vecs()[i + 1].second; + g.m_indices[0] = i; + g.m_indices[1] = i + 1; + + auto ins_res = unique_vecs.insert(std::make_pair(q.get_training_vecs()[i].first, g)); + + if (!ins_res.second) + { + (ins_res.first)->second.m_total_weight += g.m_total_weight; + (ins_res.first)->second.m_indices.push_back(i); + (ins_res.first)->second.m_indices.push_back(i + 1); + } + } + } + else + { + g.m_indices.resize(1); + + for (uint32_t i = 0; i < q.get_training_vecs().size(); i++) + { + g.m_total_weight = q.get_training_vecs()[i].second; + g.m_indices[0] = i; + + auto ins_res = unique_vecs.insert(std::make_pair(q.get_training_vecs()[i].first, g)); + + if (!ins_res.second) + { + (ins_res.first)->second.m_total_weight += g.m_total_weight; + (ins_res.first)->second.m_indices.push_back(i); + } } } + //debug_printf("generate_hierarchical_codebook_threaded: %u training vectors, %u unique training vectors, %3.3f secs\n", q.get_total_training_vecs(), (uint32_t)unique_vecs.size(), tm.get_elapsed_secs()); debug_printf("generate_hierarchical_codebook_threaded: %u training vectors, %u unique training vectors\n", q.get_total_training_vecs(), (uint32_t)unique_vecs.size()); Quantizer group_quant; @@ -2491,7 +2735,27 @@ namespace basisu return *this; } - image &crop(uint32_t w, uint32_t h, uint32_t p = UINT32_MAX, const color_rgba &background = g_black_color) + // pPixels MUST have been allocated using malloc() (basisu::vector will eventually use free() on the pointer). + image& grant_ownership(color_rgba* pPixels, uint32_t w, uint32_t h, uint32_t p = UINT32_MAX) + { + if (p == UINT32_MAX) + p = w; + + clear(); + + if ((!p) || (!w) || (!h)) + return *this; + + m_pixels.grant_ownership(pPixels, p * h, p * h); + + m_width = w; + m_height = h; + m_pitch = p; + + return *this; + } + + image &crop(uint32_t w, uint32_t h, uint32_t p = UINT32_MAX, const color_rgba &background = g_black_color, bool init_image = true) { if (p == UINT32_MAX) p = w; @@ -2509,15 +2773,25 @@ namespace basisu cur_state.swap(m_pixels); m_pixels.resize(p * h); - - for (uint32_t y = 0; y < h; y++) + + if (init_image) { - for (uint32_t x = 0; x < w; x++) + if (m_width || m_height) { - if ((x < m_width) && (y < m_height)) - m_pixels[x + y * p] = cur_state[x + y * m_pitch]; - else - m_pixels[x + y * p] = background; + for (uint32_t y = 0; y < h; y++) + { + for (uint32_t x = 0; x < w; x++) + { + if ((x < m_width) && (y < m_height)) + m_pixels[x + y * p] = cur_state[x + y * m_pitch]; + else + m_pixels[x + y * p] = background; + } + } + } + else + { + m_pixels.set_all(background); } } @@ -2590,9 +2864,25 @@ namespace basisu const image &extract_block_clamped(color_rgba *pDst, uint32_t src_x, uint32_t src_y, uint32_t w, uint32_t h) const { - for (uint32_t y = 0; y < h; y++) - for (uint32_t x = 0; x < w; x++) - *pDst++ = get_clamped(src_x + x, src_y + y); + if (((src_x + w) > m_width) || ((src_y + h) > m_height)) + { + // Slower clamping case + for (uint32_t y = 0; y < h; y++) + for (uint32_t x = 0; x < w; x++) + *pDst++ = get_clamped(src_x + x, src_y + y); + } + else + { + const color_rgba* pSrc = &m_pixels[src_x + src_y * m_pitch]; + + for (uint32_t y = 0; y < h; y++) + { + memcpy(pDst, pSrc, w * sizeof(color_rgba)); + pSrc += m_pitch; + pDst += w; + } + } + return *this; } @@ -2947,21 +3237,18 @@ namespace basisu }; // Image saving/loading/resampling - + bool load_png(const uint8_t* pBuf, size_t buf_size, image& img, const char* pFilename = nullptr); bool load_png(const char* pFilename, image& img); inline bool load_png(const std::string &filename, image &img) { return load_png(filename.c_str(), img); } - bool load_bmp(const char* pFilename, image& img); - inline bool load_bmp(const std::string &filename, image &img) { return load_bmp(filename.c_str(), img); } - bool load_tga(const char* pFilename, image& img); inline bool load_tga(const std::string &filename, image &img) { return load_tga(filename.c_str(), img); } bool load_jpg(const char *pFilename, image& img); inline bool load_jpg(const std::string &filename, image &img) { return load_jpg(filename.c_str(), img); } - // Currently loads .BMP, .PNG, or .TGA. + // Currently loads .PNG, .TGA, or .JPG bool load_image(const char* pFilename, image& img); inline bool load_image(const std::string &filename, image &img) { return load_image(filename.c_str(), img); } @@ -3129,6 +3416,29 @@ namespace basisu } void fill_buffer_with_random_bytes(void *pBuf, size_t size, uint32_t seed = 1); + + const uint32_t cPixelBlockWidth = 4; + const uint32_t cPixelBlockHeight = 4; + const uint32_t cPixelBlockTotalPixels = cPixelBlockWidth * cPixelBlockHeight; + + struct pixel_block + { + color_rgba m_pixels[cPixelBlockHeight][cPixelBlockWidth]; // [y][x] + + inline const color_rgba& operator() (uint32_t x, uint32_t y) const { assert((x < cPixelBlockWidth) && (y < cPixelBlockHeight)); return m_pixels[y][x]; } + inline color_rgba& operator() (uint32_t x, uint32_t y) { assert((x < cPixelBlockWidth) && (y < cPixelBlockHeight)); return m_pixels[y][x]; } + + inline const color_rgba* get_ptr() const { return &m_pixels[0][0]; } + inline color_rgba* get_ptr() { return &m_pixels[0][0]; } + + inline void clear() { clear_obj(*this); } + + inline bool operator== (const pixel_block& rhs) const + { + return memcmp(m_pixels, rhs.m_pixels, sizeof(m_pixels)) == 0; + } + }; + typedef basisu::vector pixel_block_vec; } // namespace basisu diff --git a/encoder/basisu_etc.cpp b/encoder/basisu_etc.cpp index 232e896..f8bd0f1 100644 --- a/encoder/basisu_etc.cpp +++ b/encoder/basisu_etc.cpp @@ -158,6 +158,22 @@ namespace basisu } } } + +#if 0 + for (uint32_t y = 0; y < 64; y++) + { + printf("{"); + for (uint32_t x = 0; x < 256; x++) + { + printf("0x%X", g_etc1_inverse_lookup[y][x]); + if (x != 255) + printf(","); + if (((x & 63) == 63) && (x != 255)) + printf("\n"); + } + printf("},\n"); + } +#endif } // Packs solid color blocks efficiently using a set of small precomputed tables. @@ -1126,6 +1142,7 @@ namespace basisu if (!g_eval_dist_tables[inten_table][m_max_comp_spread]) continue; } + #if 0 if (m_pParams->m_quality <= cETCQualityMedium) { diff --git a/encoder/basisu_etc.h b/encoder/basisu_etc.h index 1e3ece4..208f2aa 100644 --- a/encoder/basisu_etc.h +++ b/encoder/basisu_etc.h @@ -490,6 +490,35 @@ namespace basisu return dc; } + void get_block_colors_etc1s(color_rgba* pBlock_colors) const + { + color_rgba b; + + unpack_color5(b, get_base5_color(), true); + + const int* pInten_table = g_etc1_inten_tables[get_inten_table(0)]; + + pBlock_colors[0].set(clamp255(b.r + pInten_table[0]), clamp255(b.g + pInten_table[0]), clamp255(b.b + pInten_table[0]), 255); + pBlock_colors[1].set(clamp255(b.r + pInten_table[1]), clamp255(b.g + pInten_table[1]), clamp255(b.b + pInten_table[1]), 255); + pBlock_colors[2].set(clamp255(b.r + pInten_table[2]), clamp255(b.g + pInten_table[2]), clamp255(b.b + pInten_table[2]), 255); + pBlock_colors[3].set(clamp255(b.r + pInten_table[3]), clamp255(b.g + pInten_table[3]), clamp255(b.b + pInten_table[3]), 255); + } + + static void get_block_colors_etc1s(color_rgba* pBlock_colors, const color_rgba &base5_color, uint32_t inten_table) + { + color_rgba b; + b.r = (base5_color.r << 3U) | (base5_color.r >> 2U); + b.g = (base5_color.g << 3U) | (base5_color.g >> 2U); + b.b = (base5_color.b << 3U) | (base5_color.b >> 2U); + + const int* pInten_table = g_etc1_inten_tables[inten_table]; + + pBlock_colors[0].set(clamp255(b.r + pInten_table[0]), clamp255(b.g + pInten_table[0]), clamp255(b.b + pInten_table[0]), 255); + pBlock_colors[1].set(clamp255(b.r + pInten_table[1]), clamp255(b.g + pInten_table[1]), clamp255(b.b + pInten_table[1]), 255); + pBlock_colors[2].set(clamp255(b.r + pInten_table[2]), clamp255(b.g + pInten_table[2]), clamp255(b.b + pInten_table[2]), 255); + pBlock_colors[3].set(clamp255(b.r + pInten_table[3]), clamp255(b.g + pInten_table[3]), clamp255(b.b + pInten_table[3]), 255); + } + void get_block_color(color_rgba& color, uint32_t subblock_index, uint32_t selector_index) const { color_rgba b; diff --git a/encoder/basisu_frontend.cpp b/encoder/basisu_frontend.cpp index 324fc8e..00210e6 100644 --- a/encoder/basisu_frontend.cpp +++ b/encoder/basisu_frontend.cpp @@ -19,6 +19,7 @@ // #include "../transcoder/basisu.h" #include "basisu_frontend.h" +#include "basisu_opencl.h" #include #include @@ -43,61 +44,15 @@ namespace basisu // TODO - How to handle internal verifies in the basisu lib static inline void handle_verify_failure(int line) { - fprintf(stderr, "ERROR: basisu_frontend: verify check failed at line %i!\n", line); + error_printf("basisu_frontend: verify check failed at line %i!\n", line); abort(); } bool basisu_frontend::init(const params &p) { -#if 0 - // HACK HACK - FILE* pFile; - fopen_s(&pFile, "tv.bin", "rb"); - if (pFile) - { - debug_printf("Using tv.bin\n"); - - fseek(pFile, 0, SEEK_END); - uint32_t size = ftell(pFile); - fseek(pFile, 0, SEEK_SET); - - uint32_t tv = size / sizeof(vec6F_quantizer::training_vec_with_weight); - - basisu::vector v(tv); - fread(&v[0], 1, sizeof(v[0]) * tv, pFile); - - for (uint32_t i = 0; i < tv; i++) - m_endpoint_clusterizer.add_training_vec(v[i].first, v[i].second); - - m_endpoint_clusterizer.generate(16128); - basisu::vector codebook; - m_endpoint_clusterizer.retrieve(codebook); - - printf("Generated %u entries\n", (uint32_t)codebook.size()); - - fclose(pFile); - exit(0); - } -#endif - - if (p.m_use_hybrid_selector_codebooks) - { - if (!p.m_pGlobal_sel_codebook) - { - debug_printf("basisu_frontend::init: No global sel codebook!\n"); - assert(0); - return false; - } - } - - debug_printf("basisu_frontend::init: Multithreaded: %u, NumEndpointClusters: %u, NumSelectorClusters: %u, Perceptual: %u, CompressionLevel: %u\n", - p.m_multithreaded, p.m_max_endpoint_clusters, p.m_max_selector_clusters, p.m_perceptual, p.m_compression_level); - - debug_printf("Global sel codebook pal bits: %u, Global sel codebook mod bits: %u, Use hybrid selector codebook: %u, Hybrid codebook quality thresh: %f\n", - p.m_num_global_sel_codebook_pal_bits, - p.m_num_global_sel_codebook_mod_bits, - p.m_use_hybrid_selector_codebooks, - p.m_hybrid_codebook_quality_thresh); + debug_printf("basisu_frontend::init: Multithreaded: %u, Job pool total threads: %u, NumEndpointClusters: %u, NumSelectorClusters: %u, Perceptual: %u, CompressionLevel: %u\n", + p.m_multithreaded, p.m_pJob_pool ? p.m_pJob_pool->get_total_threads() : 0, + p.m_max_endpoint_clusters, p.m_max_selector_clusters, p.m_perceptual, p.m_compression_level); if ((p.m_max_endpoint_clusters < 1) || (p.m_max_endpoint_clusters > cMaxEndpointClusters)) return false; @@ -106,8 +61,22 @@ namespace basisu m_source_blocks.resize(0); append_vector(m_source_blocks, p.m_pSource_blocks, p.m_num_source_blocks); - + m_params = p; + + if (m_params.m_pOpenCL_context) + { + BASISU_ASSUME(sizeof(cl_pixel_block) == sizeof(pixel_block)); + + // Upload the RGBA pixel blocks a single time. + if (!opencl_set_pixel_blocks(m_params.m_pOpenCL_context, m_source_blocks.size(), (cl_pixel_block*)m_source_blocks.data())) + { + // This is not fatal, we just won't use OpenCL. + error_printf("basisu_frontend::init: opencl_set_pixel_blocks() failed\n"); + m_params.m_pOpenCL_context = nullptr; + m_opencl_failed = true; + } + } m_encoded_blocks.resize(m_params.m_num_source_blocks); memset(&m_encoded_blocks[0], 0, m_encoded_blocks.size() * sizeof(m_encoded_blocks[0])); @@ -194,8 +163,12 @@ namespace basisu m_total_blocks = m_params.m_num_source_blocks; m_total_pixels = m_total_blocks * cPixelBlockTotalPixels; + // Encode the initial high quality ETC1S texture + init_etc1_images(); + // First quantize the ETC1S endpoints + if (m_params.m_pGlobal_codebooks) { init_global_codebooks(); @@ -205,16 +178,26 @@ namespace basisu init_endpoint_training_vectors(); generate_endpoint_clusters(); - + for (uint32_t refine_endpoint_step = 0; refine_endpoint_step < m_num_endpoint_codebook_iterations; refine_endpoint_step++) { - BASISU_FRONTEND_VERIFY(check_etc1s_constraints()); + if (m_params.m_validate) + { + BASISU_FRONTEND_VERIFY(check_etc1s_constraints()); + + BASISU_FRONTEND_VERIFY(validate_endpoint_cluster_hierarchy(false)); + } if (refine_endpoint_step) { introduce_new_endpoint_clusters(); } + if (m_params.m_validate) + { + BASISU_FRONTEND_VERIFY(validate_endpoint_cluster_hierarchy(false)); + } + generate_endpoint_codebook(refine_endpoint_step); if ((m_params.m_debug_images) && (m_params.m_dump_endpoint_clusterization)) @@ -236,7 +219,7 @@ namespace basisu if ((m_params.m_tex_type == basist::cBASISTexTypeVideoFrames) && (!refine_endpoint_step) && (m_num_endpoint_codebook_iterations == 1)) { eliminate_redundant_or_empty_endpoint_clusters(); - generate_endpoint_codebook(refine_endpoint_step); + generate_endpoint_codebook(basisu::maximum(1U, refine_endpoint_step)); } if ((m_params.m_debug_images) && (m_params.m_dump_endpoint_clusterization)) @@ -250,22 +233,37 @@ namespace basisu dump_endpoint_clusterization_visualization(buf, true); } } + + if (m_params.m_validate) + { + BASISU_FRONTEND_VERIFY(validate_endpoint_cluster_hierarchy(false)); + } eliminate_redundant_or_empty_endpoint_clusters(); + if (m_params.m_validate) + { + BASISU_FRONTEND_VERIFY(validate_endpoint_cluster_hierarchy(false)); + } + if (m_params.m_debug_stats) debug_printf("Total endpoint clusters: %u\n", (uint32_t)m_endpoint_clusters.size()); if (early_out) break; } - - BASISU_FRONTEND_VERIFY(check_etc1s_constraints()); + + if (m_params.m_validate) + { + BASISU_FRONTEND_VERIFY(check_etc1s_constraints()); + } generate_block_endpoint_clusters(); create_initial_packed_texture(); + // Now quantize the ETC1S selectors + generate_selector_clusters(); if (m_use_hierarchical_selector_codebooks) @@ -276,12 +274,12 @@ namespace basisu create_optimized_selector_codebook(0); find_optimal_selector_clusters_for_each_block(); - + introduce_special_selector_clusters(); } else { - const uint32_t num_refine_selector_steps = m_params.m_pGlobal_sel_codebook ? 1 : m_num_selector_codebook_iterations; + const uint32_t num_refine_selector_steps = m_num_selector_codebook_iterations; for (uint32_t refine_selector_steps = 0; refine_selector_steps < num_refine_selector_steps; refine_selector_steps++) { create_optimized_selector_codebook(refine_selector_steps); @@ -289,7 +287,7 @@ namespace basisu find_optimal_selector_clusters_for_each_block(); introduce_special_selector_clusters(); - + if ((m_params.m_compression_level >= 4) || (m_params.m_tex_type == basist::cBASISTexTypeVideoFrames)) { if (!refine_block_endpoints_given_selectors()) @@ -297,7 +295,7 @@ namespace basisu } } } - + optimize_selector_codebook(); if (m_params.m_debug_stats) @@ -574,9 +572,6 @@ namespace basisu { debug_printf("introduce_special_selector_clusters\n"); - if (m_params.m_pGlobal_sel_codebook) - return; - uint32_t total_blocks_relocated = 0; const uint32_t initial_selector_clusters = (uint32_t)m_selector_cluster_block_indices.size(); @@ -722,23 +717,15 @@ namespace basisu } basisu::vector new_optimized_cluster_selectors(m_optimized_cluster_selectors.size() ? total_new_entries : 0); - basist::etc1_global_selector_codebook_entry_id_vec new_optimized_cluster_selector_global_cb_ids(m_optimized_cluster_selector_global_cb_ids.size() ? total_new_entries : 0); basisu::vector new_selector_cluster_indices(m_selector_cluster_block_indices.size() ? total_new_entries : 0); - bool_vec new_selector_cluster_uses_global_cb(m_selector_cluster_uses_global_cb.size() ? total_new_entries : 0); for (uint32_t i = 0; i < total_new_entries; i++) { if (m_optimized_cluster_selectors.size()) new_optimized_cluster_selectors[i] = m_optimized_cluster_selectors[new_to_old[i]]; - if (m_optimized_cluster_selector_global_cb_ids.size()) - new_optimized_cluster_selector_global_cb_ids[i] = m_optimized_cluster_selector_global_cb_ids[new_to_old[i]]; - //if (m_selector_cluster_block_indices.size()) // new_selector_cluster_indices[i] = m_selector_cluster_block_indices[new_to_old[i]]; - - if (m_selector_cluster_uses_global_cb.size()) - new_selector_cluster_uses_global_cb[i] = m_selector_cluster_uses_global_cb[new_to_old[i]]; } for (uint32_t i = 0; i < m_block_selector_cluster_index.size(); i++) @@ -747,9 +734,7 @@ namespace basisu } m_optimized_cluster_selectors.swap(new_optimized_cluster_selectors); - m_optimized_cluster_selector_global_cb_ids.swap(new_optimized_cluster_selector_global_cb_ids); m_selector_cluster_block_indices.swap(new_selector_cluster_indices); - m_selector_cluster_uses_global_cb.swap(new_selector_cluster_uses_global_cb); // This isn't strictly necessary - doing it for completeness/future sanity. if (m_selector_clusters_within_each_parent_cluster.size()) @@ -771,66 +756,93 @@ namespace basisu m_etc1_blocks_etc1s.resize(m_total_blocks); - const uint32_t N = 4096; - for (uint32_t block_index_iter = 0; block_index_iter < m_total_blocks; block_index_iter += N) + bool use_cpu = true; + + if (m_params.m_pOpenCL_context) { - const uint32_t first_index = block_index_iter; - const uint32_t last_index = minimum(m_total_blocks, first_index + N); - -#ifndef __EMSCRIPTEN__ - m_params.m_pJob_pool->add_job( [this, first_index, last_index] { -#endif - - for (uint32_t block_index = first_index; block_index < last_index; block_index++) - { - const pixel_block &source_blk = get_source_pixel_block(block_index); - - etc1_optimizer optimizer; - etc1_optimizer::params optimizer_params; - etc1_optimizer::results optimizer_results; - - if (m_params.m_compression_level == 0) - optimizer_params.m_quality = cETCQualityFast; - else if (m_params.m_compression_level == 1) - optimizer_params.m_quality = cETCQualityMedium; - else if (m_params.m_compression_level == BASISU_MAX_COMPRESSION_LEVEL) - optimizer_params.m_quality = cETCQualityUber; + uint32_t total_perms = 64; + if (m_params.m_compression_level == 0) + total_perms = 4; + else if (m_params.m_compression_level == 1) + total_perms = 16; + else if (m_params.m_compression_level == BASISU_MAX_COMPRESSION_LEVEL) + total_perms = OPENCL_ENCODE_ETC1S_MAX_PERMS; - optimizer_params.m_num_src_pixels = 16; - optimizer_params.m_pSrc_pixels = source_blk.get_ptr(); - optimizer_params.m_perceptual = m_params.m_perceptual; - - uint8_t selectors[16]; - optimizer_results.m_pSelectors = selectors; - optimizer_results.m_n = 16; - - optimizer.init(optimizer_params, optimizer_results); - if (!optimizer.compute()) - BASISU_FRONTEND_VERIFY(false); - - etc_block &blk = m_etc1_blocks_etc1s[block_index]; - - memset(&blk, 0, sizeof(blk)); - blk.set_block_color5_etc1s(optimizer_results.m_block_color_unscaled); - blk.set_inten_tables_etc1s(optimizer_results.m_block_inten_table); - blk.set_flip_bit(true); - - for (uint32_t y = 0; y < 4; y++) - for (uint32_t x = 0; x < 4; x++) - blk.set_selector(x, y, selectors[x + y * 4]); - } - -#ifndef __EMSCRIPTEN__ - } ); -#endif - + bool status = opencl_encode_etc1s_blocks(m_params.m_pOpenCL_context, m_etc1_blocks_etc1s.data(), m_params.m_perceptual, total_perms); + if (status) + use_cpu = false; + else + { + error_printf("basisu_frontend::init_etc1_images: opencl_encode_etc1s_blocks() failed! Using CPU.\n"); + m_params.m_pOpenCL_context = nullptr; + m_opencl_failed = true; + } } + + if (use_cpu) + { + const uint32_t N = 4096; + for (uint32_t block_index_iter = 0; block_index_iter < m_total_blocks; block_index_iter += N) + { + const uint32_t first_index = block_index_iter; + const uint32_t last_index = minimum(m_total_blocks, first_index + N); #ifndef __EMSCRIPTEN__ - m_params.m_pJob_pool->wait_for_all(); + m_params.m_pJob_pool->add_job([this, first_index, last_index] { #endif - debug_printf("Elapsed time: %3.3f secs\n", tm.get_elapsed_secs()); + for (uint32_t block_index = first_index; block_index < last_index; block_index++) + { + const pixel_block& source_blk = get_source_pixel_block(block_index); + + etc1_optimizer optimizer; + etc1_optimizer::params optimizer_params; + etc1_optimizer::results optimizer_results; + + if (m_params.m_compression_level == 0) + optimizer_params.m_quality = cETCQualityFast; + else if (m_params.m_compression_level == 1) + optimizer_params.m_quality = cETCQualityMedium; + else if (m_params.m_compression_level == BASISU_MAX_COMPRESSION_LEVEL) + optimizer_params.m_quality = cETCQualityUber; + + optimizer_params.m_num_src_pixels = 16; + optimizer_params.m_pSrc_pixels = source_blk.get_ptr(); + optimizer_params.m_perceptual = m_params.m_perceptual; + + uint8_t selectors[16]; + optimizer_results.m_pSelectors = selectors; + optimizer_results.m_n = 16; + + optimizer.init(optimizer_params, optimizer_results); + if (!optimizer.compute()) + BASISU_FRONTEND_VERIFY(false); + + etc_block& blk = m_etc1_blocks_etc1s[block_index]; + + memset(&blk, 0, sizeof(blk)); + blk.set_block_color5_etc1s(optimizer_results.m_block_color_unscaled); + blk.set_inten_tables_etc1s(optimizer_results.m_block_inten_table); + blk.set_flip_bit(true); + + for (uint32_t y = 0; y < 4; y++) + for (uint32_t x = 0; x < 4; x++) + blk.set_selector(x, y, selectors[x + y * 4]); + } + +#ifndef __EMSCRIPTEN__ + }); +#endif + + } + +#ifndef __EMSCRIPTEN__ + m_params.m_pJob_pool->wait_for_all(); +#endif + + } // use_cpu + + debug_printf("init_etc1_images: Elapsed time: %3.3f secs\n", tm.get_elapsed_secs()); } void basisu_frontend::init_endpoint_training_vectors() @@ -889,13 +901,15 @@ namespace basisu const uint32_t parent_codebook_size = (m_params.m_max_endpoint_clusters >= 256) ? BASISU_ENDPOINT_PARENT_CODEBOOK_SIZE : 0; uint32_t max_threads = 0; max_threads = m_params.m_multithreaded ? minimum(std::thread::hardware_concurrency(), cMaxCodebookCreationThreads) : 0; + if (m_params.m_pJob_pool) + max_threads = minimum((int)m_params.m_pJob_pool->get_total_threads(), max_threads); - debug_printf("Using %u threads to create codebook\n", max_threads); + debug_printf("max_threads: %u\n", max_threads); bool status = generate_hierarchical_codebook_threaded(m_endpoint_clusterizer, m_params.m_max_endpoint_clusters, m_use_hierarchical_endpoint_codebooks ? parent_codebook_size : 0, m_endpoint_clusters, m_endpoint_parent_clusters, - max_threads, m_params.m_pJob_pool); + max_threads, m_params.m_pJob_pool, true); BASISU_FRONTEND_VERIFY(status); if (m_use_hierarchical_endpoint_codebooks) @@ -940,6 +954,9 @@ namespace basisu for (uint32_t j = 0; j < cluster.size(); j++) { const uint32_t block_index = cluster[j] >> 1; + + BASISU_FRONTEND_VERIFY(block_index < m_block_parent_endpoint_cluster.size()); + if (!j) { parent_cluster_index = m_block_parent_endpoint_cluster[block_index]; @@ -956,6 +973,7 @@ namespace basisu debug_printf("Total endpoint clusters: %u, parent clusters: %u\n", (uint32_t)m_endpoint_clusters.size(), (uint32_t)m_endpoint_parent_clusters.size()); } + // Iterate through each array of endpoint cluster block indices and set the m_block_endpoint_clusters_indices[][] array to indicaste which cluster index each block uses. void basisu_frontend::generate_block_endpoint_clusters() { m_block_endpoint_clusters_indices.resize(m_total_blocks); @@ -974,11 +992,14 @@ namespace basisu } // cluster_indices_iter } - for (uint32_t block_index = 0; block_index < m_total_blocks; block_index++) + if (m_params.m_validate) { - uint32_t cluster_0 = m_block_endpoint_clusters_indices[block_index][0]; - uint32_t cluster_1 = m_block_endpoint_clusters_indices[block_index][1]; - BASISU_FRONTEND_VERIFY(cluster_0 == cluster_1); + for (uint32_t block_index = 0; block_index < m_total_blocks; block_index++) + { + uint32_t cluster_0 = m_block_endpoint_clusters_indices[block_index][0]; + uint32_t cluster_1 = m_block_endpoint_clusters_indices[block_index][1]; + BASISU_FRONTEND_VERIFY(cluster_0 == cluster_1); + } } } @@ -989,6 +1010,7 @@ namespace basisu m_endpoint_clusters_within_each_parent_cluster.resize(0); m_endpoint_clusters_within_each_parent_cluster.resize(m_endpoint_parent_clusters.size()); + // Note: It's possible that some blocks got moved into the same cluster, but live in different parent clusters. for (uint32_t block_index = 0; block_index < m_total_blocks; block_index++) { const uint32_t cluster_index = m_block_endpoint_clusters_indices[block_index][0]; @@ -1125,6 +1147,8 @@ namespace basisu std::unordered_set ignore_cluster; + uint32_t total_new_clusters = 0; + while (num_new_endpoint_clusters) { if (m_subblock_endpoint_quant_err_vec.size() == 0) @@ -1173,10 +1197,14 @@ namespace basisu cluster_sizes[subblock_to_move.m_cluster_index] -= 2; ignore_cluster.insert(subblock_to_move.m_cluster_index); + + total_new_clusters++; num_new_endpoint_clusters--; } + debug_printf("Introduced %i new endpoint clusters\n", total_new_clusters); + for (uint32_t i = 0; i < num_orig_endpoint_clusters; i++) { uint_vec &cluster_indices = m_endpoint_clusters[i]; @@ -1200,150 +1228,433 @@ namespace basisu generate_block_endpoint_clusters(); } + struct color_rgba_hasher + { + inline std::size_t operator()(const color_rgba& k) const + { + uint32_t v = *(const uint32_t*)&k; + + //return bitmix32(v); + + //v ^= (v << 10); + //v ^= (v >> 12); + + return v; + } + }; + // Given each endpoint cluster, gather all the block pixels which are in that cluster and compute optimized ETC1S endpoints for them. // TODO: Don't optimize endpoint clusters which haven't changed. + // If step>=1, we check to ensure the new endpoint values actually decrease quantization error. void basisu_frontend::generate_endpoint_codebook(uint32_t step) { debug_printf("generate_endpoint_codebook\n"); + + interval_timer tm; + tm.start(); m_endpoint_cluster_etc_params.resize(m_endpoint_clusters.size()); - const uint32_t N = 128; - for (uint32_t cluster_index_iter = 0; cluster_index_iter < m_endpoint_clusters.size(); cluster_index_iter += N) + bool use_cpu = true; + // TODO: Get this working when step>0 + if (m_params.m_pOpenCL_context && !step) { - const uint32_t first_index = cluster_index_iter; - const uint32_t last_index = minimum((uint32_t)m_endpoint_clusters.size(), cluster_index_iter + N); + const uint32_t total_clusters = m_endpoint_clusters.size(); -#ifndef __EMSCRIPTEN__ - m_params.m_pJob_pool->add_job( [this, first_index, last_index, step ] { -#endif + basisu::vector pixel_clusters(total_clusters); + + std::vector input_pixels; + input_pixels.reserve(m_total_blocks * 16); - for (uint32_t cluster_index = first_index; cluster_index < last_index; cluster_index++) + std::vector pixel_weights; + pixel_weights.reserve(m_total_blocks * 16); + + uint_vec cluster_sizes(total_clusters); + + //typedef basisu::hash_map color_hasher_type; + //color_hasher_type color_hasher; + //color_hasher.reserve(2048); + + interval_timer hash_tm; + hash_tm.start(); + + basisu::vector colors, colors2; + colors.reserve(65536); + colors2.reserve(65536); + + for (uint32_t cluster_index = 0; cluster_index < m_endpoint_clusters.size(); cluster_index++) + { + const basisu::vector& cluster_indices = m_endpoint_clusters[cluster_index]; + assert((cluster_indices.size() & 1) == 0); + +#if 0 + uint64_t first_pixel_index = input_pixels.size(); + const uint32_t total_pixels = 16 * (cluster_indices.size() / 2); + + input_pixels.resize(input_pixels.size() + total_pixels); + pixel_weights.resize(pixel_weights.size() + total_pixels); + + uint64_t dst_ofs = first_pixel_index; + + uint64_t total_r = 0, total_g = 0, total_b = 0; + for (uint32_t cluster_indices_iter = 0; cluster_indices_iter < cluster_indices.size(); cluster_indices_iter++) { - const basisu::vector& cluster_indices = m_endpoint_clusters[cluster_index]; + const uint32_t subblock_index = cluster_indices[cluster_indices_iter] & 1; + if (subblock_index) + continue; - BASISU_FRONTEND_VERIFY(cluster_indices.size()); + const uint32_t block_index = cluster_indices[cluster_indices_iter] >> 1; + const color_rgba* pBlock_pixels = get_source_pixel_block(block_index).get_ptr(); - const uint32_t total_pixels = (uint32_t)cluster_indices.size() * 8; - - basisu::vector cluster_pixels(total_pixels); - - for (uint32_t cluster_indices_iter = 0; cluster_indices_iter < cluster_indices.size(); cluster_indices_iter++) + for (uint32_t i = 0; i < 16; i++) { - const uint32_t block_index = cluster_indices[cluster_indices_iter] >> 1; - const uint32_t subblock_index = cluster_indices[cluster_indices_iter] & 1; + input_pixels[dst_ofs] = pBlock_pixels[i]; + pixel_weights[dst_ofs] = 1; + dst_ofs++; - const bool flipped = true; - - const color_rgba *pBlock_pixels = get_source_pixel_block(block_index).get_ptr(); - - for (uint32_t pixel_index = 0; pixel_index < 8; pixel_index++) - { - const color_rgba &c = pBlock_pixels[g_etc1_pixel_indices[flipped][subblock_index][pixel_index]]; - cluster_pixels[cluster_indices_iter * 8 + pixel_index] = c; - } + total_r += pBlock_pixels[i].r; + total_g += pBlock_pixels[i].g; + total_b += pBlock_pixels[i].b; } + } - endpoint_cluster_etc_params new_subblock_params; - + //printf("%i %f %f %f\n", cluster_index, total_r / (float)total_pixels, total_g / (float)total_pixels, total_b / (float)total_pixels); + + pixel_clusters[cluster_index].m_first_pixel_index = first_pixel_index; + pixel_clusters[cluster_index].m_total_pixels = total_pixels; + cluster_sizes[cluster_index] = total_pixels; +#elif 1 + colors.resize(cluster_indices.size() * 8); + colors2.resize(cluster_indices.size() * 8); + uint32_t dst_ofs = 0; + + for (uint32_t cluster_indices_iter = 0; cluster_indices_iter < cluster_indices.size(); cluster_indices_iter++) + { + const uint32_t subblock_index = cluster_indices[cluster_indices_iter] & 1; + if (subblock_index) + continue; + + const uint32_t block_index = cluster_indices[cluster_indices_iter] >> 1; + const color_rgba* pBlock_pixels = get_source_pixel_block(block_index).get_ptr(); + + memcpy(colors.data() + dst_ofs, pBlock_pixels, sizeof(color_rgba) * 16); + dst_ofs += 16; + + } // cluster_indices_iter + + uint32_t* pSorted = radix_sort(colors.size(), colors.data(), colors2.data(), 0, 3); + + const uint64_t first_pixel_index = input_pixels.size(); + + uint32_t prev_color = 0, cur_weight = 0; + + for (uint32_t i = 0; i < colors.size(); i++) + { + uint32_t cur_color = pSorted[i]; + if (cur_color == prev_color) { - etc1_optimizer optimizer; - etc1_solution_coordinates solutions[2]; - - etc1_optimizer::params cluster_optimizer_params; - cluster_optimizer_params.m_num_src_pixels = total_pixels; - cluster_optimizer_params.m_pSrc_pixels = &cluster_pixels[0]; - - cluster_optimizer_params.m_use_color4 = false; - cluster_optimizer_params.m_perceptual = m_params.m_perceptual; - - if (m_params.m_compression_level <= 1) - cluster_optimizer_params.m_quality = cETCQualityMedium; - else if (m_params.m_compression_level == BASISU_MAX_COMPRESSION_LEVEL) - cluster_optimizer_params.m_quality = cETCQualityUber; - - etc1_optimizer::results cluster_optimizer_results; - - basisu::vector cluster_selectors(total_pixels); - cluster_optimizer_results.m_n = total_pixels; - cluster_optimizer_results.m_pSelectors = &cluster_selectors[0]; - - optimizer.init(cluster_optimizer_params, cluster_optimizer_results); - - if (!optimizer.compute()) - BASISU_FRONTEND_VERIFY(false); - - new_subblock_params.m_color_unscaled[0] = cluster_optimizer_results.m_block_color_unscaled; - new_subblock_params.m_inten_table[0] = cluster_optimizer_results.m_block_inten_table; - new_subblock_params.m_color_error[0] = cluster_optimizer_results.m_error; - } - - endpoint_cluster_etc_params &prev_etc_params = m_endpoint_cluster_etc_params[cluster_index]; - - bool use_new_subblock_params = false; - if ((!step) || (!prev_etc_params.m_valid)) - use_new_subblock_params = true; + if (++cur_weight == 0) + cur_weight--; + } else { - assert(prev_etc_params.m_valid); - - uint64_t total_prev_err = 0; - + if (cur_weight) { - color_rgba block_colors[4]; + input_pixels.push_back(*(const color_rgba*)&prev_color); + pixel_weights.push_back(cur_weight); + } - etc_block::get_block_colors5(block_colors, prev_etc_params.m_color_unscaled[0], prev_etc_params.m_inten_table[0], false); + prev_color = cur_color; + cur_weight = 1; + } + } - uint64_t total_err = 0; + if (cur_weight) + { + input_pixels.push_back(*(const color_rgba*)&prev_color); + pixel_weights.push_back(cur_weight); + } - for (uint32_t i = 0; i < total_pixels; i++) + uint32_t total_unique_pixels = (uint32_t)(input_pixels.size() - first_pixel_index); + + pixel_clusters[cluster_index].m_first_pixel_index = first_pixel_index; + pixel_clusters[cluster_index].m_total_pixels = total_unique_pixels; + + cluster_sizes[cluster_index] = total_unique_pixels; +#else + color_hasher.reset(); + + for (uint32_t cluster_indices_iter = 0; cluster_indices_iter < cluster_indices.size(); cluster_indices_iter++) + { + const uint32_t subblock_index = cluster_indices[cluster_indices_iter] & 1; + if (subblock_index) + continue; + + const uint32_t block_index = cluster_indices[cluster_indices_iter] >> 1; + const color_rgba* pBlock_pixels = get_source_pixel_block(block_index).get_ptr(); + + uint32_t *pPrev_weight = nullptr; + color_rgba prev_color; + + { + color_rgba cur_color = pBlock_pixels[0]; + auto res = color_hasher.insert(cur_color, 0); + + uint32_t& weight = (res.first)->second; + if (weight != UINT32_MAX) + weight++; + + prev_color = cur_color; + pPrev_weight = &(res.first)->second; + } + + for (uint32_t i = 1; i < 16; i++) + { + color_rgba cur_color = pBlock_pixels[i]; + + if (cur_color == prev_color) + { + if (*pPrev_weight != UINT32_MAX) + *pPrev_weight = *pPrev_weight + 1; + } + else + { + auto res = color_hasher.insert(cur_color, 0); + + uint32_t& weight = (res.first)->second; + if (weight != UINT32_MAX) + weight++; + + prev_color = cur_color; + pPrev_weight = &(res.first)->second; + } + } + + } // cluster_indices_iter + + const uint64_t first_pixel_index = input_pixels.size(); + uint32_t total_unique_pixels = color_hasher.size(); + + pixel_clusters[cluster_index].m_first_pixel_index = first_pixel_index; + pixel_clusters[cluster_index].m_total_pixels = total_unique_pixels; + + input_pixels.resize(first_pixel_index + total_unique_pixels); + pixel_weights.resize(first_pixel_index + total_unique_pixels); + + uint32_t j = 0; + + for (auto it = color_hasher.begin(); it != color_hasher.end(); ++it, ++j) + { + input_pixels[first_pixel_index + j] = it->first; + pixel_weights[first_pixel_index + j] = it->second; + } + + cluster_sizes[cluster_index] = total_unique_pixels; +#endif + + } // cluster_index + + debug_printf("Total hash time: %3.3f secs\n", hash_tm.get_elapsed_secs()); + + debug_printf("Total unique colors: %llu\n", input_pixels.size()); + + uint_vec sorted_cluster_indices_new_to_old(total_clusters); + indirect_sort(total_clusters, sorted_cluster_indices_new_to_old.data(), cluster_sizes.data()); + //for (uint32_t i = 0; i < total_clusters; i++) + // sorted_cluster_indices_new_to_old[i] = i; + + uint_vec sorted_cluster_indices_old_to_new(total_clusters); + for (uint32_t i = 0; i < total_clusters; i++) + sorted_cluster_indices_old_to_new[sorted_cluster_indices_new_to_old[i]] = i; + + basisu::vector sorted_pixel_clusters(total_clusters); + for (uint32_t i = 0; i < total_clusters; i++) + sorted_pixel_clusters[i] = pixel_clusters[sorted_cluster_indices_new_to_old[i]]; + + uint32_t total_perms = 64; + if (m_params.m_compression_level <= 1) + total_perms = 16; + else if (m_params.m_compression_level == BASISU_MAX_COMPRESSION_LEVEL) + total_perms = OPENCL_ENCODE_ETC1S_MAX_PERMS; + + basisu::vector output_blocks(total_clusters); + + if (opencl_encode_etc1s_pixel_clusters( + m_params.m_pOpenCL_context, + output_blocks.data(), + total_clusters, + sorted_pixel_clusters.data(), + input_pixels.size(), + input_pixels.data(), + pixel_weights.data(), + m_params.m_perceptual, total_perms)) + { + for (uint32_t old_cluster_index = 0; old_cluster_index < m_endpoint_clusters.size(); old_cluster_index++) + { + const uint32_t new_cluster_index = sorted_cluster_indices_old_to_new[old_cluster_index]; + + const etc_block& blk = output_blocks[new_cluster_index]; + + endpoint_cluster_etc_params& prev_etc_params = m_endpoint_cluster_etc_params[old_cluster_index]; + + prev_etc_params.m_valid = true; + etc_block::unpack_color5(prev_etc_params.m_color_unscaled[0], blk.get_base5_color(), false); + prev_etc_params.m_inten_table[0] = blk.get_inten_table(0); + prev_etc_params.m_color_error[0] = 0; // dummy value - we don't actually use this + } + + use_cpu = false; + } + else + { + error_printf("basisu_frontend::generate_endpoint_codebook: opencl_encode_etc1s_pixel_clusters() failed! Using CPU.\n"); + m_params.m_pOpenCL_context = nullptr; + m_opencl_failed = true; + } + + } // if (opencl_is_available() && m_params.m_use_opencl) + + if (use_cpu) + { + const uint32_t N = 128; + for (uint32_t cluster_index_iter = 0; cluster_index_iter < m_endpoint_clusters.size(); cluster_index_iter += N) + { + const uint32_t first_index = cluster_index_iter; + const uint32_t last_index = minimum((uint32_t)m_endpoint_clusters.size(), cluster_index_iter + N); + +#ifndef __EMSCRIPTEN__ + m_params.m_pJob_pool->add_job([this, first_index, last_index, step] { +#endif + + for (uint32_t cluster_index = first_index; cluster_index < last_index; cluster_index++) + { + const basisu::vector& cluster_indices = m_endpoint_clusters[cluster_index]; + + BASISU_FRONTEND_VERIFY(cluster_indices.size()); + + const uint32_t total_pixels = (uint32_t)cluster_indices.size() * 8; + + basisu::vector cluster_pixels(total_pixels); + + for (uint32_t cluster_indices_iter = 0; cluster_indices_iter < cluster_indices.size(); cluster_indices_iter++) + { + const uint32_t block_index = cluster_indices[cluster_indices_iter] >> 1; + const uint32_t subblock_index = cluster_indices[cluster_indices_iter] & 1; + + const bool flipped = true; + + const color_rgba* pBlock_pixels = get_source_pixel_block(block_index).get_ptr(); + + for (uint32_t pixel_index = 0; pixel_index < 8; pixel_index++) { - const color_rgba &c = cluster_pixels[i]; + const color_rgba& c = pBlock_pixels[g_etc1_pixel_indices[flipped][subblock_index][pixel_index]]; + cluster_pixels[cluster_indices_iter * 8 + pixel_index] = c; + } + } - uint64_t best_err = UINT64_MAX; - //uint32_t best_index = 0; + endpoint_cluster_etc_params new_subblock_params; - for (uint32_t s = 0; s < 4; s++) + { + etc1_optimizer optimizer; + etc1_solution_coordinates solutions[2]; + + etc1_optimizer::params cluster_optimizer_params; + cluster_optimizer_params.m_num_src_pixels = total_pixels; + cluster_optimizer_params.m_pSrc_pixels = &cluster_pixels[0]; + + cluster_optimizer_params.m_use_color4 = false; + cluster_optimizer_params.m_perceptual = m_params.m_perceptual; + + if (m_params.m_compression_level <= 1) + cluster_optimizer_params.m_quality = cETCQualityMedium; + else if (m_params.m_compression_level == BASISU_MAX_COMPRESSION_LEVEL) + cluster_optimizer_params.m_quality = cETCQualityUber; + + etc1_optimizer::results cluster_optimizer_results; + + basisu::vector cluster_selectors(total_pixels); + cluster_optimizer_results.m_n = total_pixels; + cluster_optimizer_results.m_pSelectors = &cluster_selectors[0]; + + optimizer.init(cluster_optimizer_params, cluster_optimizer_results); + + if (!optimizer.compute()) + BASISU_FRONTEND_VERIFY(false); + + new_subblock_params.m_color_unscaled[0] = cluster_optimizer_results.m_block_color_unscaled; + new_subblock_params.m_inten_table[0] = cluster_optimizer_results.m_block_inten_table; + new_subblock_params.m_color_error[0] = cluster_optimizer_results.m_error; + } + + endpoint_cluster_etc_params& prev_etc_params = m_endpoint_cluster_etc_params[cluster_index]; + + bool use_new_subblock_params = false; + if ((!step) || (!prev_etc_params.m_valid)) + use_new_subblock_params = true; + else + { + assert(prev_etc_params.m_valid); + + uint64_t total_prev_err = 0; + + { + color_rgba block_colors[4]; + + etc_block::get_block_colors5(block_colors, prev_etc_params.m_color_unscaled[0], prev_etc_params.m_inten_table[0], false); + + uint64_t total_err = 0; + + for (uint32_t i = 0; i < total_pixels; i++) { - uint64_t err = color_distance(m_params.m_perceptual, c, block_colors[s], false); - if (err < best_err) + const color_rgba& c = cluster_pixels[i]; + + uint64_t best_err = UINT64_MAX; + //uint32_t best_index = 0; + + for (uint32_t s = 0; s < 4; s++) { - best_err = err; - //best_index = s; + uint64_t err = color_distance(m_params.m_perceptual, c, block_colors[s], false); + if (err < best_err) + { + best_err = err; + //best_index = s; + } } + + total_err += best_err; } - total_err += best_err; + total_prev_err += total_err; } - total_prev_err += total_err; + // See if we should update this cluster's endpoints (if the error has actually fallen) + if (total_prev_err > new_subblock_params.m_color_error[0]) + { + use_new_subblock_params = true; + } } - // See if we should update this cluster's endpoints (if the error has actually fallen) - if (total_prev_err > new_subblock_params.m_color_error[0]) + if (use_new_subblock_params) { - use_new_subblock_params = true; + new_subblock_params.m_valid = true; + + prev_etc_params = new_subblock_params; } - } - if (use_new_subblock_params) - { - new_subblock_params.m_valid = true; - - prev_etc_params = new_subblock_params; - } - - } // cluster_index + } // cluster_index #ifndef __EMSCRIPTEN__ - } ); + }); #endif - } // cluster_index_iter + } // cluster_index_iter #ifndef __EMSCRIPTEN__ - m_params.m_pJob_pool->wait_for_all(); + m_params.m_pJob_pool->wait_for_all(); #endif + } + + debug_printf("Elapsed time: %3.3f secs\n", tm.get_elapsed_secs()); } bool basisu_frontend::check_etc1s_constraints() const @@ -1373,6 +1684,8 @@ namespace basisu return true; } + // For each block, determine which ETC1S endpoint cluster can encode that block with lowest error. + // This reassigns blocks to different endpoint clusters. uint32_t basisu_frontend::refine_endpoint_clusterization() { debug_printf("refine_endpoint_clusterization\n"); @@ -1380,6 +1693,8 @@ namespace basisu if (m_use_hierarchical_endpoint_codebooks) compute_endpoint_clusters_within_each_parent_cluster(); + // Note: It's possible that an endpoint cluster may live in more than one parent cluster after the first refinement step. + basisu::vector block_clusters(m_total_blocks); for (int cluster_index = 0; cluster_index < static_cast(m_endpoint_clusters.size()); cluster_index++) @@ -1400,156 +1715,255 @@ namespace basisu // Create a new endpoint clusterization + interval_timer tm; + tm.start(); + uint_vec best_cluster_indices(m_total_blocks); - const uint32_t N = 1024; - for (uint32_t block_index_iter = 0; block_index_iter < m_total_blocks; block_index_iter += N) + bool use_cpu = true; + // TODO: Support non-hierarchical endpoint codebooks here + if (m_params.m_pOpenCL_context && m_use_hierarchical_endpoint_codebooks) { - const uint32_t first_index = block_index_iter; - const uint32_t last_index = minimum(m_total_blocks, first_index + N); + // For the OpenCL kernel, we order the parent endpoint clusters by smallest to largest for efficiency. + // We also prepare an array of block info structs that point into this new parent endpoint cluster array. + const uint32_t total_parent_clusters = m_endpoint_clusters_within_each_parent_cluster.size(); + + basisu::vector cl_block_info_structs(m_total_blocks); + + // the size of each parent cluster, in total clusters + uint_vec parent_cluster_sizes(total_parent_clusters); + for (uint32_t i = 0; i < total_parent_clusters; i++) + parent_cluster_sizes[i] = m_endpoint_clusters_within_each_parent_cluster[i].size(); + + uint_vec first_parent_cluster_ofs(total_parent_clusters); + uint32_t cur_ofs = 0; + for (uint32_t i = 0; i < total_parent_clusters; i++) + { + first_parent_cluster_ofs[i] = cur_ofs; + + cur_ofs += parent_cluster_sizes[i]; + } + + // Note: total_actual_endpoint_clusters is not necessarly equal to m_endpoint_clusters.size(), because clusters may live in multiple parent clusters after the first refinement step. + BASISU_FRONTEND_VERIFY(cur_ofs >= m_endpoint_clusters.size()); + const uint32_t total_actual_endpoint_clusters = cur_ofs; + basisu::vector cl_endpoint_cluster_structs(total_actual_endpoint_clusters); + + for (uint32_t i = 0; i < total_parent_clusters; i++) + { + const uint32_t dst_ofs = first_parent_cluster_ofs[i]; + + const uint32_t parent_cluster_size = parent_cluster_sizes[i]; + + assert(m_endpoint_clusters_within_each_parent_cluster[i].size() == parent_cluster_size); + + for (uint32_t j = 0; j < parent_cluster_size; j++) + { + const uint32_t endpoint_cluster_index = m_endpoint_clusters_within_each_parent_cluster[i][j]; + + color_rgba cluster_etc_base_color(m_endpoint_cluster_etc_params[endpoint_cluster_index].m_color_unscaled[0]); + uint32_t cluster_etc_inten = m_endpoint_cluster_etc_params[endpoint_cluster_index].m_inten_table[0]; + + cl_endpoint_cluster_structs[dst_ofs + j].m_unscaled_color = cluster_etc_base_color; + cl_endpoint_cluster_structs[dst_ofs + j].m_etc_inten = (uint8_t)cluster_etc_inten; + cl_endpoint_cluster_structs[dst_ofs + j].m_cluster_index = (uint16_t)endpoint_cluster_index; + } + } + + for (uint32_t block_index = 0; block_index < m_total_blocks; block_index++) + { + const uint32_t block_parent_endpoint_cluster_index = m_block_parent_endpoint_cluster[block_index]; + + cl_block_info_structs[block_index].m_num_clusters = (uint16_t)(parent_cluster_sizes[block_parent_endpoint_cluster_index]); + cl_block_info_structs[block_index].m_first_cluster_ofs = (uint16_t)(first_parent_cluster_ofs[block_parent_endpoint_cluster_index]); + + const uint32_t block_cluster_index = block_clusters[block_index][0]; + cl_block_info_structs[block_index].m_cur_cluster_index = (uint16_t)block_cluster_index; + cl_block_info_structs[block_index].m_cur_cluster_etc_inten = (uint8_t)m_endpoint_cluster_etc_params[block_cluster_index].m_inten_table[0]; + } + + uint_vec block_cluster_indices(m_total_blocks); + for (uint32_t i = 0; i < m_total_blocks; i++) + block_cluster_indices[i] = block_clusters[i][0]; + + uint_vec sorted_block_indices(m_total_blocks); + indirect_sort(m_total_blocks, sorted_block_indices.data(), block_cluster_indices.data()); + + bool status = opencl_refine_endpoint_clusterization( + m_params.m_pOpenCL_context, + cl_block_info_structs.data(), + total_actual_endpoint_clusters, + cl_endpoint_cluster_structs.data(), + sorted_block_indices.data(), + best_cluster_indices.data(), + m_params.m_perceptual); + + if (status) + { + use_cpu = false; + } + else + { + error_printf("basisu_frontend::refine_endpoint_clusterization: opencl_refine_endpoint_clusterization() failed! Using CPU.\n"); + m_params.m_pOpenCL_context = nullptr; + m_opencl_failed = true; + } + } + + if (use_cpu) + { + const uint32_t N = 1024; + for (uint32_t block_index_iter = 0; block_index_iter < m_total_blocks; block_index_iter += N) + { + const uint32_t first_index = block_index_iter; + const uint32_t last_index = minimum(m_total_blocks, first_index + N); #ifndef __EMSCRIPTEN__ - m_params.m_pJob_pool->add_job( [this, first_index, last_index, &best_cluster_indices, &block_clusters] { + m_params.m_pJob_pool->add_job([this, first_index, last_index, &best_cluster_indices, &block_clusters] { #endif - for (uint32_t block_index = first_index; block_index < last_index; block_index++) - { - const uint32_t cluster_index = block_clusters[block_index][0]; - BASISU_FRONTEND_VERIFY(cluster_index == block_clusters[block_index][1]); - - const color_rgba *pSubblock_pixels = get_source_pixel_block(block_index).get_ptr(); - const uint32_t num_subblock_pixels = 16; - - uint64_t best_cluster_err = INT64_MAX; - uint32_t best_cluster_index = 0; - - const uint32_t block_parent_endpoint_cluster_index = m_block_parent_endpoint_cluster.size() ? m_block_parent_endpoint_cluster[block_index] : 0; - const uint_vec *pCluster_indices = m_endpoint_clusters_within_each_parent_cluster.size() ? &m_endpoint_clusters_within_each_parent_cluster[block_parent_endpoint_cluster_index] : nullptr; - - const uint32_t total_clusters = m_use_hierarchical_endpoint_codebooks ? (uint32_t)pCluster_indices->size() : (uint32_t)m_endpoint_clusters.size(); - - for (uint32_t i = 0; i < total_clusters; i++) + for (uint32_t block_index = first_index; block_index < last_index; block_index++) { - const uint32_t cluster_iter = m_use_hierarchical_endpoint_codebooks ? (*pCluster_indices)[i] : i; + const uint32_t cluster_index = block_clusters[block_index][0]; + BASISU_FRONTEND_VERIFY(cluster_index == block_clusters[block_index][1]); - color_rgba cluster_etc_base_color(m_endpoint_cluster_etc_params[cluster_iter].m_color_unscaled[0]); - uint32_t cluster_etc_inten = m_endpoint_cluster_etc_params[cluster_iter].m_inten_table[0]; + const color_rgba* pSubblock_pixels = get_source_pixel_block(block_index).get_ptr(); + const uint32_t num_subblock_pixels = 16; - uint64_t total_err = 0; + uint64_t best_cluster_err = INT64_MAX; + uint32_t best_cluster_index = 0; - const uint32_t low_selector = 0;//subblock_etc_params_vec[j].m_low_selectors[0]; - const uint32_t high_selector = 3;//subblock_etc_params_vec[j].m_high_selectors[0]; - color_rgba subblock_colors[4]; - // Can't assign it here - may result in too much error when selector quant occurs - if (cluster_etc_inten > m_endpoint_cluster_etc_params[cluster_index].m_inten_table[0]) + const uint32_t block_parent_endpoint_cluster_index = m_block_parent_endpoint_cluster.size() ? m_block_parent_endpoint_cluster[block_index] : 0; + const uint_vec* pCluster_indices = m_endpoint_clusters_within_each_parent_cluster.size() ? &m_endpoint_clusters_within_each_parent_cluster[block_parent_endpoint_cluster_index] : nullptr; + + const uint32_t total_clusters = m_use_hierarchical_endpoint_codebooks ? (uint32_t)pCluster_indices->size() : (uint32_t)m_endpoint_clusters.size(); + + for (uint32_t i = 0; i < total_clusters; i++) { - total_err = INT64_MAX; - goto skip_cluster; - } + const uint32_t cluster_iter = m_use_hierarchical_endpoint_codebooks ? (*pCluster_indices)[i] : i; - etc_block::get_block_colors5(subblock_colors, cluster_etc_base_color, cluster_etc_inten); - -#if 0 - for (uint32_t p = 0; p < num_subblock_pixels; p++) - { - uint64_t best_err = UINT64_MAX; + color_rgba cluster_etc_base_color(m_endpoint_cluster_etc_params[cluster_iter].m_color_unscaled[0]); + uint32_t cluster_etc_inten = m_endpoint_cluster_etc_params[cluster_iter].m_inten_table[0]; - for (uint32_t r = low_selector; r <= high_selector; r++) + uint64_t total_err = 0; + + const uint32_t low_selector = 0;//subblock_etc_params_vec[j].m_low_selectors[0]; + const uint32_t high_selector = 3;//subblock_etc_params_vec[j].m_high_selectors[0]; + color_rgba subblock_colors[4]; + // Can't assign it here - may result in too much error when selector quant occurs + if (cluster_etc_inten > m_endpoint_cluster_etc_params[cluster_index].m_inten_table[0]) { - uint64_t err = color_distance(m_params.m_perceptual, pSubblock_pixels[p], subblock_colors[r], false); - best_err = minimum(best_err, err); - if (!best_err) + total_err = INT64_MAX; + goto skip_cluster; + } + + etc_block::get_block_colors5(subblock_colors, cluster_etc_base_color, cluster_etc_inten); + +#if 0 + for (uint32_t p = 0; p < num_subblock_pixels; p++) + { + uint64_t best_err = UINT64_MAX; + + for (uint32_t r = low_selector; r <= high_selector; r++) + { + uint64_t err = color_distance(m_params.m_perceptual, pSubblock_pixels[p], subblock_colors[r], false); + best_err = minimum(best_err, err); + if (!best_err) + break; + } + + total_err += best_err; + if (total_err > best_cluster_err) + break; + } // p +#else + if (m_params.m_perceptual) + { + if (!g_cpu_supports_sse41) + { + for (uint32_t p = 0; p < num_subblock_pixels; p++) + { + uint64_t best_err = UINT64_MAX; + + for (uint32_t r = low_selector; r <= high_selector; r++) + { + uint64_t err = color_distance(true, pSubblock_pixels[p], subblock_colors[r], false); + best_err = minimum(best_err, err); + if (!best_err) + break; + } + + total_err += best_err; + if (total_err > best_cluster_err) + break; + } // p + } + else + { +#if BASISU_SUPPORT_SSE + find_lowest_error_perceptual_rgb_4_N_sse41((int64_t*)&total_err, subblock_colors, pSubblock_pixels, num_subblock_pixels, best_cluster_err); +#endif + } + } + else + { + if (!g_cpu_supports_sse41) + { + for (uint32_t p = 0; p < num_subblock_pixels; p++) + { + uint64_t best_err = UINT64_MAX; + + for (uint32_t r = low_selector; r <= high_selector; r++) + { + uint64_t err = color_distance(false, pSubblock_pixels[p], subblock_colors[r], false); + best_err = minimum(best_err, err); + if (!best_err) + break; + } + + total_err += best_err; + if (total_err > best_cluster_err) + break; + } // p + } + else + { +#if BASISU_SUPPORT_SSE + find_lowest_error_linear_rgb_4_N_sse41((int64_t*)&total_err, subblock_colors, pSubblock_pixels, num_subblock_pixels, best_cluster_err); +#endif + } + } +#endif + + skip_cluster: + if ((total_err < best_cluster_err) || + ((cluster_iter == cluster_index) && (total_err == best_cluster_err))) + { + best_cluster_err = total_err; + best_cluster_index = cluster_iter; + + if (!best_cluster_err) break; } + } // j + + best_cluster_indices[block_index] = best_cluster_index; - total_err += best_err; - if (total_err > best_cluster_err) - break; - } // p -#else - if (m_params.m_perceptual) - { - if (!g_cpu_supports_sse41) - { - for (uint32_t p = 0; p < num_subblock_pixels; p++) - { - uint64_t best_err = UINT64_MAX; - - for (uint32_t r = low_selector; r <= high_selector; r++) - { - uint64_t err = color_distance(true, pSubblock_pixels[p], subblock_colors[r], false); - best_err = minimum(best_err, err); - if (!best_err) - break; - } - - total_err += best_err; - if (total_err > best_cluster_err) - break; - } // p - } - else - { -#if BASISU_SUPPORT_SSE - find_lowest_error_perceptual_rgb_4_N_sse41((int64_t*)&total_err, subblock_colors, pSubblock_pixels, num_subblock_pixels, best_cluster_err); -#endif - } - } - else - { - if (!g_cpu_supports_sse41) - { - for (uint32_t p = 0; p < num_subblock_pixels; p++) - { - uint64_t best_err = UINT64_MAX; - - for (uint32_t r = low_selector; r <= high_selector; r++) - { - uint64_t err = color_distance(false, pSubblock_pixels[p], subblock_colors[r], false); - best_err = minimum(best_err, err); - if (!best_err) - break; - } - - total_err += best_err; - if (total_err > best_cluster_err) - break; - } // p - } - else - { -#if BASISU_SUPPORT_SSE - find_lowest_error_linear_rgb_4_N_sse41((int64_t*)&total_err, subblock_colors, pSubblock_pixels, num_subblock_pixels, best_cluster_err); -#endif - } - } -#endif - - skip_cluster: - if ((total_err < best_cluster_err) || - ((cluster_iter == cluster_index) && (total_err == best_cluster_err))) - { - best_cluster_err = total_err; - best_cluster_index = cluster_iter; - - if (!best_cluster_err) - break; - } - } // j - - best_cluster_indices[block_index] = best_cluster_index; - - } // block_index + } // block_index #ifndef __EMSCRIPTEN__ - } ); + }); #endif - - } // block_index_iter + + } // block_index_iter #ifndef __EMSCRIPTEN__ - m_params.m_pJob_pool->wait_for_all(); + m_params.m_pJob_pool->wait_for_all(); #endif + + } // use_cpu + + debug_printf("refine_endpoint_clusterization time: %3.3f secs\n", tm.get_elapsed_secs()); basisu::vector > optimized_endpoint_clusters(m_endpoint_clusters.size()); uint32_t total_subblocks_reassigned = 0; @@ -1647,51 +2061,91 @@ namespace basisu void basisu_frontend::create_initial_packed_texture() { debug_printf("create_initial_packed_texture\n"); + + interval_timer tm; + tm.start(); - const uint32_t N = 4096; - for (uint32_t block_index_iter = 0; block_index_iter < m_total_blocks; block_index_iter += N) + bool use_cpu = true; + + if ((m_params.m_pOpenCL_context) && (opencl_is_available())) { - const uint32_t first_index = block_index_iter; - const uint32_t last_index = minimum(m_total_blocks, first_index + N); + basisu::vector block_etc5_color_intens(m_total_blocks); -#ifndef __EMSCRIPTEN__ - m_params.m_pJob_pool->add_job( [this, first_index, last_index] { -#endif + for (uint32_t block_index = 0; block_index < m_total_blocks; block_index++) + { + uint32_t cluster0 = m_block_endpoint_clusters_indices[block_index][0]; - for (uint32_t block_index = first_index; block_index < last_index; block_index++) - { - uint32_t cluster0 = m_block_endpoint_clusters_indices[block_index][0]; - uint32_t cluster1 = m_block_endpoint_clusters_indices[block_index][1]; - BASISU_FRONTEND_VERIFY(cluster0 == cluster1); + const color_rgba& color_unscaled = m_endpoint_cluster_etc_params[cluster0].m_color_unscaled[0]; + uint32_t inten = m_endpoint_cluster_etc_params[cluster0].m_inten_table[0]; - const color_rgba *pSource_pixels = get_source_pixel_block(block_index).get_ptr(); + block_etc5_color_intens[block_index].set(color_unscaled.r, color_unscaled.g, color_unscaled.b, inten); + } - etc_block &blk = m_encoded_blocks[block_index]; + bool status = opencl_determine_selectors(m_params.m_pOpenCL_context, block_etc5_color_intens.data(), + m_encoded_blocks.data(), + m_params.m_perceptual); + if (!status) + { + error_printf("basisu_frontend::create_initial_packed_texture: opencl_determine_selectors() failed! Using CPU.\n"); + m_params.m_pOpenCL_context = nullptr; + m_opencl_failed = true; + } + else + { + use_cpu = false; + } + } - color_rgba unscaled[2] = { m_endpoint_cluster_etc_params[cluster0].m_color_unscaled[0], m_endpoint_cluster_etc_params[cluster1].m_color_unscaled[0] }; - uint32_t inten[2] = { m_endpoint_cluster_etc_params[cluster0].m_inten_table[0], m_endpoint_cluster_etc_params[cluster1].m_inten_table[0] }; - - blk.set_block_color5(unscaled[0], unscaled[1]); - blk.set_flip_bit(true); - - blk.set_inten_table(0, inten[0]); - blk.set_inten_table(1, inten[1]); - - blk.determine_selectors(pSource_pixels, m_params.m_perceptual); - - } // block_index + if (use_cpu) + { + const uint32_t N = 4096; + for (uint32_t block_index_iter = 0; block_index_iter < m_total_blocks; block_index_iter += N) + { + const uint32_t first_index = block_index_iter; + const uint32_t last_index = minimum(m_total_blocks, first_index + N); #ifndef __EMSCRIPTEN__ - } ); + m_params.m_pJob_pool->add_job([this, first_index, last_index] { #endif - } // block_index_iter + for (uint32_t block_index = first_index; block_index < last_index; block_index++) + { + uint32_t cluster0 = m_block_endpoint_clusters_indices[block_index][0]; + uint32_t cluster1 = m_block_endpoint_clusters_indices[block_index][1]; + BASISU_FRONTEND_VERIFY(cluster0 == cluster1); + + const color_rgba* pSource_pixels = get_source_pixel_block(block_index).get_ptr(); + + etc_block& blk = m_encoded_blocks[block_index]; + + color_rgba unscaled[2] = { m_endpoint_cluster_etc_params[cluster0].m_color_unscaled[0], m_endpoint_cluster_etc_params[cluster1].m_color_unscaled[0] }; + uint32_t inten[2] = { m_endpoint_cluster_etc_params[cluster0].m_inten_table[0], m_endpoint_cluster_etc_params[cluster1].m_inten_table[0] }; + + blk.set_block_color5(unscaled[0], unscaled[1]); + blk.set_flip_bit(true); + + blk.set_inten_table(0, inten[0]); + blk.set_inten_table(1, inten[1]); + + blk.determine_selectors(pSource_pixels, m_params.m_perceptual); + + } // block_index #ifndef __EMSCRIPTEN__ - m_params.m_pJob_pool->wait_for_all(); + }); #endif + } // block_index_iter + +#ifndef __EMSCRIPTEN__ + m_params.m_pJob_pool->wait_for_all(); +#endif + + } // use_cpu + m_orig_encoded_blocks = m_encoded_blocks; + + debug_printf("Elapsed time: %3.3f secs\n", tm.get_elapsed_secs()); } void basisu_frontend::compute_selector_clusters_within_each_parent_cluster() @@ -1739,8 +2193,7 @@ namespace basisu void basisu_frontend::generate_selector_clusters() { debug_printf("generate_selector_clusters\n"); - - typedef vec<16, float> vec16F; + typedef tree_vector_quant vec16F_clusterizer; vec16F_clusterizer::array_of_weighted_training_vecs training_vecs(m_total_blocks); @@ -1800,12 +2253,14 @@ namespace basisu uint32_t max_threads = 0; max_threads = m_params.m_multithreaded ? minimum(std::thread::hardware_concurrency(), cMaxCodebookCreationThreads) : 0; + if (m_params.m_pJob_pool) + max_threads = minimum((int)m_params.m_pJob_pool->get_total_threads(), max_threads); bool status = generate_hierarchical_codebook_threaded(selector_clusterizer, m_params.m_max_selector_clusters, m_use_hierarchical_selector_codebooks ? parent_codebook_size : 0, m_selector_cluster_block_indices, m_selector_parent_cluster_block_indices, - max_threads, m_params.m_pJob_pool); + max_threads, m_params.m_pJob_pool, false); BASISU_FRONTEND_VERIFY(status); if (m_use_hierarchical_selector_codebooks) @@ -1864,235 +2319,105 @@ namespace basisu { debug_printf("create_optimized_selector_codebook\n"); + interval_timer tm; + tm.start(); + const uint32_t total_selector_clusters = (uint32_t)m_selector_cluster_block_indices.size(); debug_printf("Total selector clusters (from m_selector_cluster_block_indices.size()): %u\n", (uint32_t)m_selector_cluster_block_indices.size()); m_optimized_cluster_selectors.resize(total_selector_clusters); + + uint32_t total_clusters_processed = 0; - if ((m_params.m_pGlobal_sel_codebook) && (!m_params.m_use_hybrid_selector_codebooks)) + // For each selector codebook entry, and for each of the 4x4 selectors, determine which selector minimizes the error across all the blocks that use that quantized selector. + const uint32_t N = 256; + for (uint32_t cluster_index_iter = 0; cluster_index_iter < total_selector_clusters; cluster_index_iter += N) { - uint32_t total_clusters_processed = 0; - - m_optimized_cluster_selector_global_cb_ids.resize(total_selector_clusters); - - const uint32_t N = 256; - for (uint32_t cluster_index_iter = 0; cluster_index_iter < total_selector_clusters; cluster_index_iter += N) - { - const uint32_t first_index = cluster_index_iter; - const uint32_t last_index = minimum((uint32_t)total_selector_clusters, cluster_index_iter + N); - -#ifndef __EMSCRIPTEN__ - m_params.m_pJob_pool->add_job( [this, first_index, last_index, &total_clusters_processed, &total_selector_clusters] { -#endif - - for (uint32_t cluster_index = first_index; cluster_index < last_index; cluster_index++) - { - const basisu::vector &cluster_block_indices = m_selector_cluster_block_indices[cluster_index]; - - if (!cluster_block_indices.size()) - continue; - - etc_block_vec etc_blocks; - pixel_block_vec pixel_blocks; - - for (uint32_t cluster_block_index = 0; cluster_block_index < cluster_block_indices.size(); cluster_block_index++) - { - const uint32_t block_index = cluster_block_indices[cluster_block_index]; - - etc_blocks.push_back(m_encoded_blocks[block_index]); - - pixel_blocks.push_back(get_source_pixel_block(block_index)); - } - - uint32_t palette_index; - basist::etc1_global_palette_entry_modifier palette_modifier; - - #if 0 - m_params.m_pGlobal_sel_codebook->find_best_entry(etc_blocks.size(), pixel_blocks.get_ptr(), etc_blocks.get_ptr(), - palette_index, palette_modifier, - m_params.m_perceptual, 1 << m_params.m_num_global_sel_codebook_pal_bits, 1 << m_params.m_num_global_sel_codebook_mod_bits); - #else - etc1_global_selector_codebook_find_best_entry(*m_params.m_pGlobal_sel_codebook, - (uint32_t)etc_blocks.size(), &pixel_blocks[0], &etc_blocks[0], - palette_index, palette_modifier, - m_params.m_perceptual, 1 << m_params.m_num_global_sel_codebook_pal_bits, 1 << m_params.m_num_global_sel_codebook_mod_bits); - #endif - - m_optimized_cluster_selector_global_cb_ids[cluster_index].set(palette_index, palette_modifier); - - basist::etc1_selector_palette_entry pal_entry(m_params.m_pGlobal_sel_codebook->get_entry(palette_index, palette_modifier)); - - for (uint32_t y = 0; y < 4; y++) - for (uint32_t x = 0; x < 4; x++) - m_optimized_cluster_selectors[cluster_index].set_selector(x, y, pal_entry(x, y)); - - { - std::lock_guard lock(m_lock); - - total_clusters_processed++; - if ((total_clusters_processed % 63) == 0) - debug_printf("Global selector palette optimization: %3.1f%% complete\n", total_clusters_processed * 100.0f / total_selector_clusters); - } - - } // cluster_index - -#ifndef __EMSCRIPTEN__ - } ); -#endif - - } // cluster_index_iter - -#ifndef __EMSCRIPTEN__ - m_params.m_pJob_pool->wait_for_all(); -#endif - } - else - { - const bool uses_hybrid_sel_codebook = ((m_params.m_pGlobal_sel_codebook) && (m_params.m_use_hybrid_selector_codebooks)); - if (uses_hybrid_sel_codebook) - { - m_selector_cluster_uses_global_cb.resize(total_selector_clusters); - m_optimized_cluster_selector_global_cb_ids.resize(total_selector_clusters); - } - - uint32_t total_clusters_processed = 0; - - // For each selector codebook entry, and for each of the 4x4 selectors, determine which selector minimizes the error across all the blocks that use that quantized selector. - - const uint32_t N = 256; - for (uint32_t cluster_index_iter = 0; cluster_index_iter < total_selector_clusters; cluster_index_iter += N) - { - const uint32_t first_index = cluster_index_iter; - const uint32_t last_index = minimum((uint32_t)total_selector_clusters, cluster_index_iter + N); + const uint32_t first_index = cluster_index_iter; + const uint32_t last_index = minimum((uint32_t)total_selector_clusters, cluster_index_iter + N); #ifndef __EMSCRIPTEN__ - m_params.m_pJob_pool->add_job( [this, first_index, last_index, &uses_hybrid_sel_codebook, &total_clusters_processed, &total_selector_clusters] { + m_params.m_pJob_pool->add_job([this, first_index, last_index, &total_clusters_processed, &total_selector_clusters] { #endif - - for (uint32_t cluster_index = first_index; cluster_index < last_index; cluster_index++) + + for (uint32_t cluster_index = first_index; cluster_index < last_index; cluster_index++) + { + const basisu::vector& cluster_block_indices = m_selector_cluster_block_indices[cluster_index]; + + if (!cluster_block_indices.size()) + continue; + + uint64_t overall_best_err = 0; + + uint64_t total_err[4][4][4]; + clear_obj(total_err); + + for (uint32_t cluster_block_index = 0; cluster_block_index < cluster_block_indices.size(); cluster_block_index++) { - const basisu::vector &cluster_block_indices = m_selector_cluster_block_indices[cluster_index]; + const uint32_t block_index = cluster_block_indices[cluster_block_index]; - if (!cluster_block_indices.size()) - continue; + const etc_block& blk = m_encoded_blocks[block_index]; - uint64_t overall_best_err = 0; + color_rgba blk_colors[4]; + blk.get_block_colors(blk_colors, 0); for (uint32_t y = 0; y < 4; y++) { for (uint32_t x = 0; x < 4; x++) { - uint64_t best_err = UINT64_MAX; - uint32_t best_s = 0; + const color_rgba& orig_color = get_source_pixel_block(block_index)(x, y); - for (uint32_t s = 0; s < 4; s++) + if (m_params.m_perceptual) { - uint32_t total_err = 0; - - for (uint32_t cluster_block_index = 0; cluster_block_index < cluster_block_indices.size(); cluster_block_index++) - { - const uint32_t block_index = cluster_block_indices[cluster_block_index]; - - const etc_block &blk = m_encoded_blocks[block_index]; - - const color_rgba &orig_color = get_source_pixel_block(block_index)(x, y); - - color_rgba block_color; - blk.get_block_color(block_color, blk.get_subblock_index(x, y), s); - total_err += color_distance(m_params.m_perceptual, block_color, orig_color, false); - - if (total_err > best_err) - break; - - } // block_index - - if (total_err < best_err) - { - best_err = total_err; - best_s = s; - if (!best_err) - break; - } - - } // s - - m_optimized_cluster_selectors[cluster_index].set_selector(x, y, best_s); - - overall_best_err += best_err; - + for (uint32_t s = 0; s < 4; s++) + total_err[y][x][s] += color_distance(true, blk_colors[s], orig_color, false); + } + else + { + for (uint32_t s = 0; s < 4; s++) + total_err[y][x][s] += color_distance(false, blk_colors[s], orig_color, false); + } } // x } // y - if (uses_hybrid_sel_codebook) + } // cluster_block_index + + for (uint32_t y = 0; y < 4; y++) + { + for (uint32_t x = 0; x < 4; x++) { - etc_block_vec etc_blocks; - pixel_block_vec pixel_blocks; + uint64_t best_err = total_err[y][x][0]; + uint8_t best_sel = 0; - for (uint32_t cluster_block_index = 0; cluster_block_index < cluster_block_indices.size(); cluster_block_index++) + for (uint32_t s = 1; s < 4; s++) { - const uint32_t block_index = cluster_block_indices[cluster_block_index]; - - etc_blocks.push_back(m_encoded_blocks[block_index]); - - pixel_blocks.push_back(get_source_pixel_block(block_index)); + if (total_err[y][x][s] < best_err) + { + best_err = total_err[y][x][s]; + best_sel = (uint8_t)s; + } } - uint32_t palette_index; - basist::etc1_global_palette_entry_modifier palette_modifier; + m_optimized_cluster_selectors[cluster_index].set_selector(x, y, best_sel); - #if 0 - uint64_t best_global_cb_err = m_params.m_pGlobal_sel_codebook->find_best_entry(etc_blocks.size(), pixel_blocks.get_ptr(), etc_blocks.get_ptr(), - palette_index, palette_modifier, - m_params.m_perceptual, 1 << m_params.m_num_global_sel_codebook_pal_bits, 1 << m_params.m_num_global_sel_codebook_mod_bits); - #else - uint64_t best_global_cb_err = etc1_global_selector_codebook_find_best_entry(*m_params.m_pGlobal_sel_codebook, (uint32_t)etc_blocks.size(), &pixel_blocks[0], &etc_blocks[0], - palette_index, palette_modifier, - m_params.m_perceptual, 1 << m_params.m_num_global_sel_codebook_pal_bits, 1 << m_params.m_num_global_sel_codebook_mod_bits); - #endif + overall_best_err += best_err; + } // x + } // y - if (best_global_cb_err <= overall_best_err * m_params.m_hybrid_codebook_quality_thresh) - { - m_selector_cluster_uses_global_cb[cluster_index] = true; - - m_optimized_cluster_selector_global_cb_ids[cluster_index].set(palette_index, palette_modifier); - - basist::etc1_selector_palette_entry pal_entry(m_params.m_pGlobal_sel_codebook->get_entry(palette_index, palette_modifier)); - - for (uint32_t y = 0; y < 4; y++) - for (uint32_t x = 0; x < 4; x++) - m_optimized_cluster_selectors[cluster_index].set_selector(x, y, pal_entry(x, y)); - } - else - { - m_optimized_cluster_selector_global_cb_ids[cluster_index].set(0, basist::etc1_global_palette_entry_modifier(0)); - - m_selector_cluster_uses_global_cb[cluster_index] = false; - } - } - - if (uses_hybrid_sel_codebook) - { - std::lock_guard lock(m_lock); - - total_clusters_processed++; - if ((total_clusters_processed % 63) == 0) - debug_printf("Global selector palette optimization: %3.1f%% complete\n", total_clusters_processed * 100.0f / total_selector_clusters); - } - - } // cluster_index + } // cluster_index #ifndef __EMSCRIPTEN__ - } ); + }); #endif - } // cluster_index_iter + } // cluster_index_iter #ifndef __EMSCRIPTEN__ - m_params.m_pJob_pool->wait_for_all(); + m_params.m_pJob_pool->wait_for_all(); #endif - } // if (m_params.m_pGlobal_sel_codebook) + debug_printf("Elapsed time: %3.3f secs\n", tm.get_elapsed_secs()); if (m_params.m_debug_images) { @@ -2133,17 +2458,25 @@ namespace basisu } } + // For each block: Determine which quantized selectors best encode that block, given its quantized endpoints. + // Note that this method may leave some empty clusters (i.e. arrays with no block indices), including at the end. void basisu_frontend::find_optimal_selector_clusters_for_each_block() { debug_printf("find_optimal_selector_clusters_for_each_block\n"); - // Sanity checks - BASISU_FRONTEND_VERIFY(m_selector_cluster_block_indices.size() == m_optimized_cluster_selectors.size()); - for (uint32_t i = 0; i < m_selector_clusters_within_each_parent_cluster.size(); i++) + interval_timer tm; + tm.start(); + + if (m_params.m_validate) { - for (uint32_t j = 0; j < m_selector_clusters_within_each_parent_cluster[i].size(); j++) + // Sanity checks + BASISU_FRONTEND_VERIFY(m_selector_cluster_block_indices.size() == m_optimized_cluster_selectors.size()); + for (uint32_t i = 0; i < m_selector_clusters_within_each_parent_cluster.size(); i++) { - BASISU_FRONTEND_VERIFY(m_selector_clusters_within_each_parent_cluster[i][j] < m_optimized_cluster_selectors.size()); + for (uint32_t j = 0; j < m_selector_clusters_within_each_parent_cluster[i].size(); j++) + { + BASISU_FRONTEND_VERIFY(m_selector_clusters_within_each_parent_cluster[i][j] < m_optimized_cluster_selectors.size()); + } } } @@ -2151,20 +2484,120 @@ namespace basisu if (m_params.m_compression_level == 0) { - // Don't do anything, just leave the blocks in their original selector clusters. - for (uint32_t i = 0; i < m_selector_cluster_block_indices.size(); i++) + // Just leave the blocks in their original selector clusters. + for (uint32_t selector_cluster_index = 0; selector_cluster_index < m_selector_cluster_block_indices.size(); selector_cluster_index++) { - for (uint32_t j = 0; j < m_selector_cluster_block_indices[i].size(); j++) - m_block_selector_cluster_index[m_selector_cluster_block_indices[i][j]] = i; + for (uint32_t j = 0; j < m_selector_cluster_block_indices[selector_cluster_index].size(); j++) + { + const uint32_t block_index = m_selector_cluster_block_indices[selector_cluster_index][j]; + + m_block_selector_cluster_index[block_index] = selector_cluster_index; + + etc_block& blk = m_encoded_blocks[block_index]; + blk.set_raw_selector_bits(m_optimized_cluster_selectors[selector_cluster_index].get_raw_selector_bits()); + } + } + + debug_printf("Elapsed time: %3.3f secs\n", tm.get_elapsed_secs()); + + return; + } + + bool use_cpu = true; + + if ((m_params.m_pOpenCL_context) && m_use_hierarchical_selector_codebooks) + { + const uint32_t num_parent_clusters = m_selector_clusters_within_each_parent_cluster.size(); + + basisu::vector selector_structs; + selector_structs.reserve(m_optimized_cluster_selectors.size()); + + uint_vec parent_selector_cluster_offsets(num_parent_clusters); + + uint_vec selector_cluster_indices; + selector_cluster_indices.reserve(m_optimized_cluster_selectors.size()); + + uint32_t cur_ofs = 0; + for (uint32_t parent_index = 0; parent_index < num_parent_clusters; parent_index++) + { + parent_selector_cluster_offsets[parent_index] = cur_ofs; + + for (uint32_t j = 0; j < m_selector_clusters_within_each_parent_cluster[parent_index].size(); j++) + { + const uint32_t selector_cluster_index = m_selector_clusters_within_each_parent_cluster[parent_index][j]; + + uint32_t sel_bits = 0; + for (uint32_t p = 0; p < 16; p++) + sel_bits |= (m_optimized_cluster_selectors[selector_cluster_index].get_selector(p & 3, p >> 2) << (p * 2)); + + selector_structs.enlarge(1)->m_packed_selectors = sel_bits; + + selector_cluster_indices.push_back(selector_cluster_index); + } + + cur_ofs += m_selector_clusters_within_each_parent_cluster[parent_index].size(); + } + + const uint32_t total_input_selectors = cur_ofs; + + basisu::vector block_structs(m_total_blocks); + for (uint32_t i = 0; i < m_total_blocks; i++) + { + const uint32_t parent_selector_cluster = m_block_parent_selector_cluster[i]; + + const etc_block& blk = m_encoded_blocks[i]; + blk.unpack_color5(block_structs[i].m_etc_color5_inten, blk.get_base5_color(), false); + + block_structs[i].m_etc_color5_inten.a = (uint8_t)blk.get_inten_table(0); + block_structs[i].m_first_selector = parent_selector_cluster_offsets[parent_selector_cluster]; + block_structs[i].m_num_selectors = m_selector_clusters_within_each_parent_cluster[parent_selector_cluster].size(); + } + + uint_vec output_selector_cluster_indices(m_total_blocks); + + bool status = opencl_find_optimal_selector_clusters_for_each_block( + m_params.m_pOpenCL_context, + block_structs.data(), + total_input_selectors, + selector_structs.data(), + selector_cluster_indices.data(), + output_selector_cluster_indices.data(), + m_params.m_perceptual); + + if (!status) + { + error_printf("basisu_frontend::find_optimal_selector_clusters_for_each_block: opencl_find_optimal_selector_clusters_for_each_block() failed! Using CPU.\n"); + m_params.m_pOpenCL_context = nullptr; + m_opencl_failed = true; + } + else + { + for (uint32_t i = 0; i < m_selector_cluster_block_indices.size(); i++) + { + m_selector_cluster_block_indices[i].resize(0); + m_selector_cluster_block_indices[i].reserve(128); + } + + for (uint32_t block_index = 0; block_index < m_total_blocks; block_index++) + { + etc_block& blk = m_encoded_blocks[block_index]; + + uint32_t best_cluster_index = output_selector_cluster_indices[block_index]; + + blk.set_raw_selector_bits(m_optimized_cluster_selectors[best_cluster_index].get_raw_selector_bits()); + + m_block_selector_cluster_index[block_index] = best_cluster_index; + + vector_ensure_element_is_valid(m_selector_cluster_block_indices, best_cluster_index); + m_selector_cluster_block_indices[best_cluster_index].push_back(block_index); + } + + use_cpu = false; } } - else - { - // Note that this method may leave some empty clusters (i.e. arrays with no block indices), including at the end. - basisu::vector< basisu::vector > new_cluster_indices(m_optimized_cluster_selectors.size()); - - // For each block: Determine which quantized selectors best encode that block, given its quantized endpoints. + if (use_cpu) + { basisu::vector unpacked_optimized_cluster_selectors(16 * m_optimized_cluster_selectors.size()); for (uint32_t cluster_index = 0; cluster_index < m_optimized_cluster_selectors.size(); cluster_index++) { @@ -2176,36 +2609,74 @@ namespace basisu } } } - - const uint32_t N = 1024; + + const uint32_t N = 2048; for (uint32_t block_index_iter = 0; block_index_iter < m_total_blocks; block_index_iter += N) { const uint32_t first_index = block_index_iter; const uint32_t last_index = minimum(m_total_blocks, first_index + N); -#ifndef __EMSCRIPTEN__ - m_params.m_pJob_pool->add_job( [this, first_index, last_index, &new_cluster_indices, &unpacked_optimized_cluster_selectors] { -#endif + #ifndef __EMSCRIPTEN__ + m_params.m_pJob_pool->add_job( [this, first_index, last_index, &unpacked_optimized_cluster_selectors] { + #endif + + int prev_best_cluster_index = 0; for (uint32_t block_index = first_index; block_index < last_index; block_index++) { - const color_rgba* pBlock_pixels = get_source_pixel_block(block_index).get_ptr(); - + const pixel_block& block = get_source_pixel_block(block_index); + etc_block& blk = m_encoded_blocks[block_index]; - + + if ((block_index > first_index) && (block == get_source_pixel_block(block_index - 1))) + { + blk.set_raw_selector_bits(m_optimized_cluster_selectors[prev_best_cluster_index].get_raw_selector_bits()); + + m_block_selector_cluster_index[block_index] = prev_best_cluster_index; + + continue; + } + + const color_rgba* pBlock_pixels = block.get_ptr(); + color_rgba trial_block_colors[4]; - blk.get_block_colors(trial_block_colors, 0); + blk.get_block_colors_etc1s(trial_block_colors); // precompute errors for the i-th block pixel and selector sel: [sel][i] uint32_t trial_errors[4][16]; - - for (int sel = 0; sel < 4; ++sel) + + if (m_params.m_perceptual) { - for (int i = 0; i < 16; ++i) - { - trial_errors[sel][i] = color_distance(m_params.m_perceptual, pBlock_pixels[i], trial_block_colors[sel], false); - } + for (uint32_t sel = 0; sel < 4; ++sel) + for (uint32_t i = 0; i < 16; ++i) + trial_errors[sel][i] = color_distance(true, pBlock_pixels[i], trial_block_colors[sel], false); } + else + { + for (uint32_t sel = 0; sel < 4; ++sel) + for (uint32_t i = 0; i < 16; ++i) + trial_errors[sel][i] = color_distance(false, pBlock_pixels[i], trial_block_colors[sel], false); + } + + // Compute the minimum possible errors (given any selectors) for pixels 0-15 + uint64_t min_possible_error_0_15 = 0; + for (uint32_t i = 0; i < 16; i++) + min_possible_error_0_15 += basisu::minimum(trial_errors[0][i], trial_errors[1][i], trial_errors[2][i], trial_errors[3][i]); + + // Compute the minimum possible errors (given any selectors) for pixels 4-15 + uint64_t min_possible_error_4_15 = 0; + for (uint32_t i = 4; i < 16; i++) + min_possible_error_4_15 += basisu::minimum(trial_errors[0][i], trial_errors[1][i], trial_errors[2][i], trial_errors[3][i]); + + // Compute the minimum possible errors (given any selectors) for pixels 8-15 + uint64_t min_possible_error_8_15 = 0; + for (uint32_t i = 8; i < 16; i++) + min_possible_error_8_15 += basisu::minimum(trial_errors[0][i], trial_errors[1][i], trial_errors[2][i], trial_errors[3][i]); + + // Compute the minimum possible errors (given any selectors) for pixels 12-15 + uint64_t min_possible_error_12_15 = 0; + for (uint32_t i = 12; i < 16; i++) + min_possible_error_12_15 += basisu::minimum(trial_errors[0][i], trial_errors[1][i], trial_errors[2][i], trial_errors[3][i]); uint64_t best_cluster_err = INT64_MAX; uint32_t best_cluster_index = 0; @@ -2215,7 +2686,7 @@ namespace basisu const uint32_t total_clusters = m_use_hierarchical_selector_codebooks ? (uint32_t)pCluster_indices->size() : (uint32_t)m_selector_cluster_block_indices.size(); -#if 0 + #if 0 for (uint32_t cluster_iter = 0; cluster_iter < total_clusters; cluster_iter++) { const uint32_t cluster_index = m_use_hierarchical_selector_codebooks ? (*pCluster_indices)[cluster_iter] : cluster_iter; @@ -2246,99 +2717,73 @@ namespace basisu early_out: ; } -#else - if (m_params.m_perceptual) + #else + for (uint32_t cluster_iter = 0; cluster_iter < total_clusters; cluster_iter++) { - for (uint32_t cluster_iter = 0; cluster_iter < total_clusters; cluster_iter++) + const uint32_t cluster_index = m_use_hierarchical_selector_codebooks ? (*pCluster_indices)[cluster_iter] : cluster_iter; + + const uint8_t* pSels = &unpacked_optimized_cluster_selectors[cluster_index * 16]; + + uint64_t trial_err = (uint64_t)trial_errors[pSels[0]][0] + trial_errors[pSels[1]][1] + trial_errors[pSels[2]][2] + trial_errors[pSels[3]][3]; + if ((trial_err + min_possible_error_4_15) >= best_cluster_err) + continue; + + trial_err += (uint64_t)trial_errors[pSels[4]][4] + trial_errors[pSels[5]][5] + trial_errors[pSels[6]][6] + trial_errors[pSels[7]][7]; + if ((trial_err + min_possible_error_8_15) >= best_cluster_err) + continue; + + trial_err += (uint64_t)trial_errors[pSels[8]][8] + trial_errors[pSels[9]][9] + trial_errors[pSels[10]][10] + trial_errors[pSels[11]][11]; + if ((trial_err + min_possible_error_12_15) >= best_cluster_err) + continue; + + trial_err += (uint64_t)trial_errors[pSels[12]][12] + trial_errors[pSels[13]][13] + trial_errors[pSels[14]][14] + trial_errors[pSels[15]][15]; + + if (trial_err < best_cluster_err) { - const uint32_t cluster_index = m_use_hierarchical_selector_codebooks ? (*pCluster_indices)[cluster_iter] : cluster_iter; - //const etc_block& cluster_blk = m_optimized_cluster_selectors[cluster_index]; + best_cluster_err = trial_err; + best_cluster_index = cluster_index; + if (best_cluster_err == min_possible_error_0_15) + break; + } - uint64_t trial_err = 0; - - for (int i = 0; i < 16; i++) - { - const uint32_t sel = unpacked_optimized_cluster_selectors[cluster_index * 16 + i]; - - trial_err += trial_errors[sel][i]; - if (trial_err > best_cluster_err) - goto early_out; - } - - if (trial_err < best_cluster_err) - { - best_cluster_err = trial_err; - best_cluster_index = cluster_index; - if (!best_cluster_err) - break; - } - - early_out: - ; - - } // cluster_iter - } - else - { - for (uint32_t cluster_iter = 0; cluster_iter < total_clusters; cluster_iter++) - { - const uint32_t cluster_index = m_use_hierarchical_selector_codebooks ? (*pCluster_indices)[cluster_iter] : cluster_iter; - //const etc_block& cluster_blk = m_optimized_cluster_selectors[cluster_index]; - - uint64_t trial_err = 0; - - for (int i = 0; i < 16; i++) - { - const uint32_t sel = unpacked_optimized_cluster_selectors[cluster_index * 16 + i]; - - trial_err += trial_errors[sel][i]; - if (trial_err > best_cluster_err) - goto early_out2; - } - - if (trial_err < best_cluster_err) - { - best_cluster_err = trial_err; - best_cluster_index = cluster_index; - if (!best_cluster_err) - break; - } - - early_out2: - ; - - } // cluster_iter - } -#endif + } // cluster_iter + #endif blk.set_raw_selector_bits(m_optimized_cluster_selectors[best_cluster_index].get_raw_selector_bits()); m_block_selector_cluster_index[block_index] = best_cluster_index; - - { - std::lock_guard lock(m_lock); - vector_ensure_element_is_valid(new_cluster_indices, best_cluster_index); - new_cluster_indices[best_cluster_index].push_back(block_index); - } + prev_best_cluster_index = best_cluster_index; } // block_index -#ifndef __EMSCRIPTEN__ + #ifndef __EMSCRIPTEN__ } ); -#endif + #endif } // block_index_iter -#ifndef __EMSCRIPTEN__ + #ifndef __EMSCRIPTEN__ m_params.m_pJob_pool->wait_for_all(); -#endif + #endif + + for (uint32_t i = 0; i < m_selector_cluster_block_indices.size(); i++) + { + m_selector_cluster_block_indices[i].resize(0); + m_selector_cluster_block_indices[i].reserve(128); + } - m_selector_cluster_block_indices.swap(new_cluster_indices); - } + for (uint32_t block_index = 0; block_index < m_total_blocks; block_index++) + { + const uint32_t best_cluster_index = m_block_selector_cluster_index[block_index]; - for (uint32_t i = 0; i < m_selector_cluster_block_indices.size(); i++) - vector_sort(m_selector_cluster_block_indices[i]); + vector_ensure_element_is_valid(m_selector_cluster_block_indices, best_cluster_index); + m_selector_cluster_block_indices[best_cluster_index].push_back(block_index); + } + + } // if (use_cpu) + + debug_printf("Elapsed time: %3.3f secs\n", tm.get_elapsed_secs()); } // TODO: Remove old ETC1 specific stuff, and thread this. @@ -2837,7 +3282,81 @@ namespace basisu //debug_printf("validate_output: %u\n", validate_output()); } - + + // Endpoint clusterization hierarchy integrity checker. + // Note this doesn't check for empty clusters. + bool basisu_frontend::validate_endpoint_cluster_hierarchy(bool ensure_clusters_have_same_parents) const + { + if (!m_endpoint_parent_clusters.size()) + return true; + + int_vec subblock_parent_indices(m_total_blocks * 2); + subblock_parent_indices.set_all(-1); + + int_vec subblock_cluster_indices(m_total_blocks * 2); + subblock_cluster_indices.set_all(-1); + + for (uint32_t parent_index = 0; parent_index < m_endpoint_parent_clusters.size(); parent_index++) + { + for (uint32_t i = 0; i < m_endpoint_parent_clusters[parent_index].size(); i++) + { + uint32_t subblock_index = m_endpoint_parent_clusters[parent_index][i]; + if (subblock_index >= m_total_blocks * 2) + return false; + + // If the endpoint cluster lives in more than one parent node, that's wrong. + if (subblock_parent_indices[subblock_index] != -1) + return false; + + subblock_parent_indices[subblock_index] = parent_index; + } + } + + // Make sure all endpoint clusters are present in the parent cluster. + for (uint32_t i = 0; i < subblock_parent_indices.size(); i++) + { + if (subblock_parent_indices[i] == -1) + return false; + } + + for (uint32_t cluster_index = 0; cluster_index < m_endpoint_clusters.size(); cluster_index++) + { + int parent_index = 0; + + for (uint32_t i = 0; i < m_endpoint_clusters[cluster_index].size(); i++) + { + uint32_t subblock_index = m_endpoint_clusters[cluster_index][i]; + if (subblock_index >= m_total_blocks * 2) + return false; + + if (subblock_cluster_indices[subblock_index] != -1) + return false; + + subblock_cluster_indices[subblock_index] = cluster_index; + + // There are transformations on the endpoint clusters that can break the strict tree requirement + if (ensure_clusters_have_same_parents) + { + // Make sure all the subblocks are in the same parent cluster + if (!i) + parent_index = subblock_parent_indices[subblock_index]; + else if (subblock_parent_indices[subblock_index] != parent_index) + return false; + } + } + } + + // Make sure all endpoint clusters are present in the parent cluster. + for (uint32_t i = 0; i < subblock_cluster_indices.size(); i++) + { + if (subblock_cluster_indices[i] == -1) + return false; + } + + return true; + } + + // This is very slow and only intended for debugging/development. It's enabled using the "-validate_etc1s" command line option. bool basisu_frontend::validate_output() const { debug_printf("validate_output\n"); @@ -2889,29 +3408,7 @@ namespace basisu CHECK(rdo_output_block.get_base5_color() == blk.get_base5_color()); CHECK(rdo_output_block.get_delta3_color() == blk.get_delta3_color()); CHECK(rdo_output_block.get_raw_selector_bits() == blk.get_raw_selector_bits()); - - if (m_params.m_pGlobal_sel_codebook) - { - bool used_global_cb = true; - if (m_params.m_use_hybrid_selector_codebooks) - used_global_cb = m_selector_cluster_uses_global_cb[selector_cluster_index]; - - if (used_global_cb) - { - basist::etc1_global_selector_codebook_entry_id pal_id(get_selector_cluster_global_selector_entry_ids()[selector_cluster_index]); - - basist::etc1_selector_palette_entry pal_entry(m_params.m_pGlobal_sel_codebook->get_entry(pal_id)); - - for (uint32_t y = 0; y < 4; y++) - { - for (uint32_t x = 0; x < 4; x++) - { - CHECK(pal_entry(x, y) == blk.get_selector(x, y)); - } - } - } - } - + #undef CHECK } diff --git a/encoder/basisu_frontend.h b/encoder/basisu_frontend.h index 4ff6d40..cda73f3 100644 --- a/encoder/basisu_frontend.h +++ b/encoder/basisu_frontend.h @@ -16,12 +16,14 @@ #include "basisu_enc.h" #include "basisu_etc.h" #include "basisu_gpu_texture.h" -#include "basisu_global_selector_palette_helpers.h" #include "../transcoder/basisu_file_headers.h" #include "../transcoder/basisu_transcoder.h" namespace basisu { + struct opencl_context; + typedef opencl_context* opencl_context_ptr; + struct vec2U { uint32_t m_comps[2]; @@ -51,7 +53,8 @@ namespace basisu m_use_hierarchical_endpoint_codebooks(false), m_use_hierarchical_selector_codebooks(false), m_num_endpoint_codebook_iterations(0), - m_num_selector_codebook_iterations(0) + m_num_selector_codebook_iterations(0), + m_opencl_failed(false) { } @@ -73,19 +76,12 @@ namespace basisu m_perceptual(true), m_debug_stats(false), m_debug_images(false), - m_dump_endpoint_clusterization(true), m_validate(false), m_multithreaded(false), m_disable_hierarchical_endpoint_codebooks(false), - m_pGlobal_sel_codebook(NULL), - m_num_global_sel_codebook_pal_bits(0), - m_num_global_sel_codebook_mod_bits(0), - m_use_hybrid_selector_codebooks(false), - m_hybrid_codebook_quality_thresh(0.0f), m_tex_type(basist::cBASISTexType2D), - m_pGlobal_codebooks(nullptr), - + m_pOpenCL_context(nullptr), m_pJob_pool(nullptr) { } @@ -106,13 +102,10 @@ namespace basisu bool m_multithreaded; bool m_disable_hierarchical_endpoint_codebooks; - const basist::etc1_global_selector_codebook *m_pGlobal_sel_codebook; - uint32_t m_num_global_sel_codebook_pal_bits; - uint32_t m_num_global_sel_codebook_mod_bits; - bool m_use_hybrid_selector_codebooks; - float m_hybrid_codebook_quality_thresh; basist::basis_texture_type m_tex_type; const basist::basisu_lowlevel_etc1s_transcoder *m_pGlobal_codebooks; + + opencl_context_ptr m_pOpenCL_context; job_pool *m_pJob_pool; }; @@ -150,10 +143,7 @@ namespace basisu uint32_t get_total_selector_clusters() const { return static_cast(m_selector_cluster_block_indices.size()); } uint32_t get_block_selector_cluster_index(uint32_t block_index) const { return m_block_selector_cluster_index[block_index]; } const etc_block &get_selector_cluster_selector_bits(uint32_t cluster_index) const { return m_optimized_cluster_selectors[cluster_index]; } - - const basist::etc1_global_selector_codebook_entry_id_vec &get_selector_cluster_global_selector_entry_ids() const { return m_optimized_cluster_selector_global_cb_ids; } - const bool_vec &get_selector_cluster_uses_global_cb_vec() const { return m_selector_cluster_uses_global_cb; } - + // Returns block indices using each selector cluster const uint_vec &get_selector_cluster_block_indices(uint32_t selector_cluster_index) const { return m_selector_cluster_block_indices[selector_cluster_index]; } @@ -161,6 +151,8 @@ namespace basisu void reoptimize_remapped_endpoints(const uint_vec &new_block_endpoints, int_vec &old_to_new_endpoint_cluster_indices, bool optimize_final_codebook, uint_vec *pBlock_selector_indices = nullptr); + bool get_opencl_failed() const { return m_opencl_failed; } + private: params m_params; uint32_t m_total_blocks; @@ -192,13 +184,14 @@ namespace basisu vec6F_quantizer m_endpoint_clusterizer; // For each endpoint cluster: An array of which subblock indices (block_index*2+subblock) are located in that cluster. - // Array of block indices for each endpoint cluster basisu::vector m_endpoint_clusters; - // Array of block indices for each parent endpoint cluster + // Array of subblock indices for each parent endpoint cluster + // Note: Initially, each endpoint cluster will only live in a single parent cluster, in a shallow tree. + // As the endpoint clusters are manipulated this constraint gets broken. basisu::vector m_endpoint_parent_clusters; - // Each block's parent cluster index + // Each block's parent endpoint cluster index uint8_vec m_block_parent_endpoint_cluster; // Array of endpoint cluster indices for each parent endpoint cluster @@ -295,10 +288,7 @@ namespace basisu // Array of selector cluster indices for each parent selector cluster basisu::vector m_selector_clusters_within_each_parent_cluster; - - basist::etc1_global_selector_codebook_entry_id_vec m_optimized_cluster_selector_global_cb_ids; - bool_vec m_selector_cluster_uses_global_cb; - + // Each block's selector cluster index basisu::vector m_block_selector_cluster_index; @@ -330,6 +320,8 @@ namespace basisu std::mutex m_lock; + bool m_opencl_failed; + //----------------------------------------------------------------------------- void init_etc1_images(); @@ -351,6 +343,7 @@ namespace basisu void find_optimal_selector_clusters_for_each_block(); uint32_t refine_block_endpoints_given_selectors(); void finalize(); + bool validate_endpoint_cluster_hierarchy(bool ensure_clusters_have_same_parents) const; bool validate_output() const; void introduce_special_selector_clusters(); void optimize_selector_codebook(); diff --git a/encoder/basisu_gpu_texture.cpp b/encoder/basisu_gpu_texture.cpp index 3f9fb67..0b40297 100644 --- a/encoder/basisu_gpu_texture.cpp +++ b/encoder/basisu_gpu_texture.cpp @@ -15,7 +15,9 @@ #include "basisu_gpu_texture.h" #include "basisu_enc.h" #include "basisu_pvrtc1_4.h" +#if BASISU_USE_ASTC_DECOMPRESS #include "basisu_astc_decomp.h" +#endif #include "basisu_bc7enc.h" namespace basisu @@ -1150,8 +1152,12 @@ namespace basisu } case texture_format::cASTC4x4: { +#if BASISU_USE_ASTC_DECOMPRESS const bool astc_srgb = false; basisu_astc::astc::decompress(reinterpret_cast(pPixels), static_cast(pBlock), astc_srgb, 4, 4); +#else + memset(pPixels, 255, 16 * sizeof(color_rgba)); +#endif break; } case texture_format::cATC_RGB: diff --git a/encoder/basisu_kernels_declares.h b/encoder/basisu_kernels_declares.h index e24bdd7..b03e2ea 100644 --- a/encoder/basisu_kernels_declares.h +++ b/encoder/basisu_kernels_declares.h @@ -22,4 +22,6 @@ void CPPSPMD_NAME(find_selectors_linear_rgb_4_N)(int64_t* pDistance, uint8_t* pS void CPPSPMD_NAME(find_lowest_error_perceptual_rgb_4_N)(int64_t* pDistance, const basisu::color_rgba* pBlock_colors, const basisu::color_rgba* pSrc_pixels, uint32_t n, int64_t early_out_error); void CPPSPMD_NAME(find_lowest_error_linear_rgb_4_N)(int64_t* pDistance, const basisu::color_rgba* pBlock_colors, const basisu::color_rgba* pSrc_pixels, uint32_t n, int64_t early_out_error); + +void CPPSPMD_NAME(update_covar_matrix_16x16)(uint32_t num_vecs, const void* pWeighted_vecs, const void *pOrigin, const uint32_t* pVec_indices, void *pMatrix16x16); #endif diff --git a/encoder/basisu_kernels_imp.h b/encoder/basisu_kernels_imp.h index 0468805..dcf1ce0 100644 --- a/encoder/basisu_kernels_imp.h +++ b/encoder/basisu_kernels_imp.h @@ -548,6 +548,65 @@ namespace CPPSPMD_NAME(basisu_kernels_namespace) } }; + struct update_covar_matrix_16x16 : spmd_kernel + { + void _call( + uint32_t num_vecs, const void* pWeighted_vecs_void, const void* pOrigin_void, const uint32_t* pVec_indices, void* pMatrix16x16_void) + { + const std::pair* pWeighted_vecs = static_cast< const std::pair *>(pWeighted_vecs_void); + + const float* pOrigin = static_cast(pOrigin_void); + vfloat org0 = loadu_linear_all(pOrigin), org1 = loadu_linear_all(pOrigin + 4), org2 = loadu_linear_all(pOrigin + 8), org3 = loadu_linear_all(pOrigin + 12); + + vfloat mat[16][4]; + vfloat vzero(zero_vfloat()); + + for (uint32_t i = 0; i < 16; i++) + { + store_all(mat[i][0], vzero); + store_all(mat[i][1], vzero); + store_all(mat[i][2], vzero); + store_all(mat[i][3], vzero); + } + + for (uint32_t k = 0; k < num_vecs; k++) + { + const uint32_t vec_index = pVec_indices[k]; + + const float* pW = pWeighted_vecs[vec_index].first.get_ptr(); + vfloat weight((float)pWeighted_vecs[vec_index].second); + + vfloat vec[4] = { loadu_linear_all(pW) - org0, loadu_linear_all(pW + 4) - org1, loadu_linear_all(pW + 8) - org2, loadu_linear_all(pW + 12) - org3 }; + + vfloat wvec0 = vec[0] * weight, wvec1 = vec[1] * weight, wvec2 = vec[2] * weight, wvec3 = vec[3] * weight; + + for (uint32_t j = 0; j < 16; j++) + { + vfloat vx = ((const float*)vec)[j]; + + store_all(mat[j][0], mat[j][0] + vx * wvec0); + store_all(mat[j][1], mat[j][1] + vx * wvec1); + store_all(mat[j][2], mat[j][2] + vx * wvec2); + store_all(mat[j][3], mat[j][3] + vx * wvec3); + + } // j + + } // k + + float* pMatrix = static_cast(pMatrix16x16_void); + + float* pDst = pMatrix; + for (uint32_t i = 0; i < 16; i++) + { + storeu_linear_all(pDst, mat[i][0]); + storeu_linear_all(pDst + 4, mat[i][1]); + storeu_linear_all(pDst + 8, mat[i][2]); + storeu_linear_all(pDst + 12, mat[i][3]); + pDst += 16; + } + } + }; + } // namespace using namespace CPPSPMD_NAME(basisu_kernels_namespace); @@ -582,3 +641,7 @@ void CPPSPMD_NAME(find_lowest_error_linear_rgb_4_N)(int64_t* pDistance, const co spmd_call< find_lowest_error_linear_rgb_4_N >(pDistance, pBlock_colors, pSrc_pixels, n, early_out_error); } +void CPPSPMD_NAME(update_covar_matrix_16x16)(uint32_t num_vecs, const void* pWeighted_vecs, const void* pOrigin, const uint32_t *pVec_indices, void* pMatrix16x16) +{ + spmd_call < update_covar_matrix_16x16 >(num_vecs, pWeighted_vecs, pOrigin, pVec_indices, pMatrix16x16); +} diff --git a/encoder/basisu_miniz.h b/encoder/basisu_miniz.h index 8627abe..049d013 100644 --- a/encoder/basisu_miniz.h +++ b/encoder/basisu_miniz.h @@ -236,6 +236,7 @@ int mz_inflateInit2(mz_streamp pStream, int window_bits); // MZ_BUF_ERROR if no forward progress is possible because the input buffer is empty but the inflater needs more input to continue, or if the output buffer is not large enough. Call mz_inflate() again // with more input data, or with more room in the output buffer (except when using single call decompression, described above). int mz_inflate(mz_streamp pStream, int flush); +int mz_inflate2(mz_streamp pStream, int flush, int adler32_checking); // Deinitializes a decompressor. int mz_inflateEnd(mz_streamp pStream); @@ -880,10 +881,10 @@ int mz_inflateInit(mz_streamp pStream) return mz_inflateInit2(pStream, MZ_DEFAULT_WINDOW_BITS); } -int mz_inflate(mz_streamp pStream, int flush) +int mz_inflate2(mz_streamp pStream, int flush, int adler32_checking) { inflate_state* pState; - mz_uint n, first_call, decomp_flags = TINFL_FLAG_COMPUTE_ADLER32; + mz_uint n, first_call, decomp_flags = adler32_checking ? TINFL_FLAG_COMPUTE_ADLER32 : 0; size_t in_bytes, out_bytes, orig_avail_in; tinfl_status status; @@ -971,6 +972,11 @@ int mz_inflate(mz_streamp pStream, int flush) return ((status == TINFL_STATUS_DONE) && (!pState->m_dict_avail)) ? MZ_STREAM_END : MZ_OK; } +int mz_inflate(mz_streamp pStream, int flush) +{ + return mz_inflate2(pStream, flush, MZ_TRUE); +} + int mz_inflateEnd(mz_streamp pStream) { if (!pStream) @@ -1348,7 +1354,8 @@ tinfl_status tinfl_decompress(tinfl_decompressor *r, const mz_uint8 *pIn_buf_nex common_exit: r->m_num_bits = num_bits; r->m_bit_buf = bit_buf; r->m_dist = dist; r->m_counter = counter; r->m_num_extra = num_extra; r->m_dist_from_out_buf_start = dist_from_out_buf_start; *pIn_buf_size = pIn_buf_cur - pIn_buf_next; *pOut_buf_size = pOut_buf_cur - pOut_buf_next; - if ((decomp_flags & (TINFL_FLAG_PARSE_ZLIB_HEADER | TINFL_FLAG_COMPUTE_ADLER32)) && (status >= 0)) + //if ((decomp_flags & (TINFL_FLAG_PARSE_ZLIB_HEADER | TINFL_FLAG_COMPUTE_ADLER32)) && (status >= 0)) + if ((decomp_flags & TINFL_FLAG_COMPUTE_ADLER32) && (status >= 0)) { const mz_uint8 *ptr = pOut_buf_next; size_t buf_len = *pOut_buf_size; mz_uint32 i, s1 = r->m_check_adler32 & 0xffff, s2 = r->m_check_adler32 >> 16; size_t block_len = buf_len % 5552; @@ -1362,7 +1369,9 @@ common_exit: for ( ; i < block_len; ++i) s1 += *ptr++, s2 += s1; s1 %= 65521U, s2 %= 65521U; buf_len -= block_len; block_len = 5552; } - r->m_check_adler32 = (s2 << 16) + s1; if ((status == TINFL_STATUS_DONE) && (decomp_flags & TINFL_FLAG_PARSE_ZLIB_HEADER) && (r->m_check_adler32 != r->m_z_adler32)) status = TINFL_STATUS_ADLER32_MISMATCH; + r->m_check_adler32 = (s2 << 16) + s1; + if ((status == TINFL_STATUS_DONE) && (decomp_flags & TINFL_FLAG_PARSE_ZLIB_HEADER) && (r->m_check_adler32 != r->m_z_adler32)) + status = TINFL_STATUS_ADLER32_MISMATCH; } return status; } @@ -2479,7 +2488,7 @@ void *tdefl_write_image_to_png_file_in_memory_ex(const void *pImage, int w, int // write dummy header for (z = 41; z; --z) tdefl_output_buffer_putter(&z, 1, &out_buf); // compress image data - tdefl_init(pComp, tdefl_output_buffer_putter, &out_buf, s_tdefl_png_num_probes[MZ_MIN(10, level)] | TDEFL_WRITE_ZLIB_HEADER); + tdefl_init(pComp, tdefl_output_buffer_putter, &out_buf, s_tdefl_png_num_probes[MZ_MIN(10, level)] | TDEFL_WRITE_ZLIB_HEADER | (level <= 3 ? TDEFL_GREEDY_PARSING_FLAG : 0)); for (y = 0; y < h; ++y) { tdefl_compress_buffer(pComp, &z, 1, TDEFL_NO_FLUSH); tdefl_compress_buffer(pComp, (mz_uint8*)pImage + (flip ? (h - 1 - y) : y) * bpl, bpl, TDEFL_NO_FLUSH); } if (tdefl_compress_buffer(pComp, NULL, 0, TDEFL_FINISH) != TDEFL_STATUS_DONE) { MZ_FREE(pComp); MZ_FREE(out_buf.m_pBuf); return NULL; } // write real header diff --git a/encoder/basisu_uastc_enc.cpp b/encoder/basisu_uastc_enc.cpp index ca2b325..271bbc6 100644 --- a/encoder/basisu_uastc_enc.cpp +++ b/encoder/basisu_uastc_enc.cpp @@ -13,7 +13,11 @@ // See the License for the specific language governing permissions and // limitations under the License. #include "basisu_uastc_enc.h" + +#if BASISU_USE_ASTC_DECOMPRESS #include "basisu_astc_decomp.h" +#endif + #include "basisu_gpu_texture.h" #include "basisu_bc7enc.h" @@ -509,14 +513,14 @@ namespace basisu if (pForce_selectors == nullptr) { - int s0 = g_astc_unquant[endpoint_range][astc_results.m_endpoints[0]].m_unquant + g_astc_unquant[endpoint_range][astc_results.m_endpoints[2]].m_unquant + g_astc_unquant[endpoint_range][astc_results.m_endpoints[4]].m_unquant; - int s1 = g_astc_unquant[endpoint_range][astc_results.m_endpoints[1]].m_unquant + g_astc_unquant[endpoint_range][astc_results.m_endpoints[3]].m_unquant + g_astc_unquant[endpoint_range][astc_results.m_endpoints[5]].m_unquant; - if (s1 < s0) - { - std::swap(astc_results.m_endpoints[0], astc_results.m_endpoints[1]); - std::swap(astc_results.m_endpoints[2], astc_results.m_endpoints[3]); - std::swap(astc_results.m_endpoints[4], astc_results.m_endpoints[5]); - invert = true; + int s0 = g_astc_unquant[endpoint_range][astc_results.m_endpoints[0]].m_unquant + g_astc_unquant[endpoint_range][astc_results.m_endpoints[2]].m_unquant + g_astc_unquant[endpoint_range][astc_results.m_endpoints[4]].m_unquant; + int s1 = g_astc_unquant[endpoint_range][astc_results.m_endpoints[1]].m_unquant + g_astc_unquant[endpoint_range][astc_results.m_endpoints[3]].m_unquant + g_astc_unquant[endpoint_range][astc_results.m_endpoints[5]].m_unquant; + if (s1 < s0) + { + std::swap(astc_results.m_endpoints[0], astc_results.m_endpoints[1]); + std::swap(astc_results.m_endpoints[2], astc_results.m_endpoints[3]); + std::swap(astc_results.m_endpoints[4], astc_results.m_endpoints[5]); + invert = true; } } @@ -3562,7 +3566,8 @@ namespace basisu basist::color32 temp_block_unpacked[4][4]; success = basist::unpack_uastc(temp_block, (basist::color32 *)temp_block_unpacked, false); VALIDATE(success); - + +#if BASISU_USE_ASTC_DECOMPRESS // Now round trip to packed ASTC and back, then decode to pixels. uint32_t astc_data[4]; @@ -3590,6 +3595,7 @@ namespace basisu VALIDATE(temp_block_unpacked[y][x].c[3] == decoded_uastc_block[y][x].a); } } +#endif } #endif diff --git a/encoder/cppspmd_sse.h b/encoder/cppspmd_sse.h index 9a97eeb..4c61bab 100644 --- a/encoder/cppspmd_sse.h +++ b/encoder/cppspmd_sse.h @@ -1,13 +1,5 @@ // cppspmd_sse.h -// Note for Basis Universal: All of the "cppspmd" code and headers are OPTIONAL to Basis Universal. if BASISU_SUPPORT_SSE is 0, it will never be included and does not impact compilation. -// SSE 2 or 4.1 -// Originally written by Nicolas Guillemot, Jefferson Amstutz in the "CppSPMD" project. -// 4/20: Richard Geldreich: Macro control flow, more SIMD instruction sets, optimizations, supports using multiple SIMD instruction sets in same executable. Still a work in progress! -// -// Originally Copyright 2016 Nicolas Guillemot -// Changed from the MIT license to Apache 2.0 with permission from the author. -// -// Modifications/enhancements Copyright 2020-2021 Binomial LLC +// Copyright 2020-2022 Binomial LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -20,6 +12,11 @@ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. +// +// Notes for Basis Universal: +// All of the "cppspmd" code and headers are OPTIONAL to Basis Universal. if BASISU_SUPPORT_SSE is 0, it will never be included and does not impact compilation. +// The techniques used in this code were originally demonstrated for AVX2 by Nicolas Guillemot, Jefferson Amstutz in their "CppSPMD" project. +// This is new code for use in Basis Universal, although it uses the same general SPMD techniques in SSE 2/4. #include #include @@ -1330,7 +1327,7 @@ struct spmd_kernel __m128 temp = _mm_add_ps(_mm_shuffle_ps(k3210, k3210, _MM_SHUFFLE(0, 1, 2, 3)), k3210); return _mm_cvtss_f32(_mm_add_ss(_mm_movehl_ps(temp, temp), temp)); } - + CPPSPMD_FORCE_INLINE int reduce_add(vint v) { __m128i k3210 = blendv_mask_epi32(_mm_setzero_si128(), v.m_value, m_exec.m_mask); @@ -1668,14 +1665,16 @@ CPPSPMD_FORCE_INLINE vint uniform_shift_right_epi16(const vint& a, const vint& b CPPSPMD_FORCE_INLINE vint undefined_vint() { return vint{ _mm_undefined_si128() }; } CPPSPMD_FORCE_INLINE vfloat undefined_vfloat() { return vfloat{ _mm_undefined_ps() }; } +CPPSPMD_FORCE_INLINE vint zero_vint() { return vint{ _mm_setzero_si128() }; } +CPPSPMD_FORCE_INLINE vfloat zero_vfloat() { return vfloat{ _mm_setzero_ps() }; } + CPPSPMD_FORCE_INLINE vint vint_lane_set(int v0, int v1, int v2, int v3) { return vint{ _mm_set_epi32(v3, v2, v1, v0) }; } CPPSPMD_FORCE_INLINE vfloat vfloat_lane_set(float v0, float v1, float v2, float v3) { return vfloat{ _mm_set_ps(v3, v2, v1, v0) }; } - CPPSPMD_FORCE_INLINE vint vint_lane_set_r(int v3, int v2, int v1, int v0) { return vint{ _mm_set_epi32(v3, v2, v1, v0) }; } CPPSPMD_FORCE_INLINE vfloat vfloat_lane_set_r(float v3, float v2, float v1, float v0) { return vfloat{ _mm_set_ps(v3, v2, v1, v0) }; } - // control is an 8-bit immediate value containing 4 2-bit indices which shuffles the int32's in each 128-bit lane. #define VINT_LANE_SHUFFLE_EPI32(a, control) vint(_mm_shuffle_epi32((a).m_value, control)) +#define VFLOAT_LANE_SHUFFLE_PS(a, b, control) vfloat(_mm_shuffle_ps((a).m_value, (b).m_value, control)) // control is an 8-bit immediate value containing 4 2-bit indices which shuffles the int16's in either the high or low 64-bit lane. #define VINT_LANE_SHUFFLELO_EPI16(a, control) vint(_mm_shufflelo_epi16((a).m_value, control)) diff --git a/encoder/jpgd.cpp b/encoder/jpgd.cpp index 563fa74..fec8b71 100644 --- a/encoder/jpgd.cpp +++ b/encoder/jpgd.cpp @@ -23,17 +23,6 @@ // v1.04, May. 19, 2012: Code tweaks to fix VS2008 static code analysis warnings // v2.00, March 20, 2020: Fuzzed with zzuf and afl. Fixed several issues, converted most assert()'s to run-time checks. Added chroma upsampling. Removed freq. domain upsampling. gcc/clang warnings. // -#ifdef _MSC_VER -#ifndef BASISU_NO_ITERATOR_DEBUG_LEVEL -#if defined(_DEBUG) || defined(DEBUG) -#define _ITERATOR_DEBUG_LEVEL 1 -#define _SECURE_SCL 1 -#else -#define _SECURE_SCL 0 -#define _ITERATOR_DEBUG_LEVEL 0 -#endif -#endif -#endif #include "jpgd.h" #include diff --git a/transcoder/basisu.h b/transcoder/basisu.h index f33baf6..1230b59 100644 --- a/transcoder/basisu.h +++ b/transcoder/basisu.h @@ -21,6 +21,11 @@ #pragma warning (disable : 4127) // warning C4127: conditional expression is constant #pragma warning (disable : 4530) // C++ exception handler used, but unwind semantics are not enabled. + // Slamming this off always for v1.16 because we've gotten rid of most std containers. + #ifndef BASISU_NO_ITERATOR_DEBUG_LEVEL + #define BASISU_NO_ITERATOR_DEBUG_LEVEL (1) + #endif + #ifndef BASISU_NO_ITERATOR_DEBUG_LEVEL //#define _HAS_ITERATOR_DEBUGGING 0 @@ -165,6 +170,10 @@ namespace basisu { if (n) { + if (vec.size()) + { + assert((pObjs + n) <= vec.begin() || (pObjs >= vec.end())); + } const size_t cur_s = vec.size(); vec.resize(cur_s + n); memcpy(&vec[cur_s], pObjs, sizeof(R) * n); @@ -173,6 +182,7 @@ namespace basisu template inline void append_vector(T &vec, const T &other_vec) { + assert(&vec != &other_vec); if (other_vec.size()) append_vector(vec, &other_vec[0], other_vec.size()); } diff --git a/transcoder/basisu_containers.h b/transcoder/basisu_containers.h index 1ca4bab..e1aed70 100644 --- a/transcoder/basisu_containers.h +++ b/transcoder/basisu_containers.h @@ -12,6 +12,12 @@ #define HAS_MALLOC_USABLE_SIZE 1 #endif +// Set to 1 to always check vector operator[], front(), and back() even in release. +#define BASISU_VECTOR_FORCE_CHECKING 0 + +// If 1, the vector container will not query the CRT to get the size of resized memory blocks. +#define BASISU_VECTOR_DETERMINISTIC 1 + #ifdef _MSC_VER #define BASISU_FORCE_INLINE __forceinline #else @@ -348,20 +354,81 @@ namespace basisu // operator[] will assert on out of range indices, but in final builds there is (and will never be) any range checking on this method. //BASISU_FORCE_INLINE const T& operator[] (uint32_t i) const { assert(i < m_size); return m_p[i]; } //BASISU_FORCE_INLINE T& operator[] (uint32_t i) { assert(i < m_size); return m_p[i]; } - + +#if !BASISU_VECTOR_FORCE_CHECKING BASISU_FORCE_INLINE const T& operator[] (size_t i) const { assert(i < m_size); return m_p[i]; } BASISU_FORCE_INLINE T& operator[] (size_t i) { assert(i < m_size); return m_p[i]; } +#else + BASISU_FORCE_INLINE const T& operator[] (size_t i) const + { + if (i >= m_size) + { + fprintf(stderr, "operator[] invalid index: %u, max entries %u, type size %u\n", (uint32_t)i, m_size, (uint32_t)sizeof(T)); + abort(); + } + return m_p[i]; + } + BASISU_FORCE_INLINE T& operator[] (size_t i) + { + if (i >= m_size) + { + fprintf(stderr, "operator[] invalid index: %u, max entries %u, type size %u\n", (uint32_t)i, m_size, (uint32_t)sizeof(T)); + abort(); + } + return m_p[i]; + } +#endif // at() always includes range checking, even in final builds, unlike operator []. // The first element is returned if the index is out of range. BASISU_FORCE_INLINE const T& at(size_t i) const { assert(i < m_size); return (i >= m_size) ? m_p[0] : m_p[i]; } BASISU_FORCE_INLINE T& at(size_t i) { assert(i < m_size); return (i >= m_size) ? m_p[0] : m_p[i]; } - + +#if !BASISU_VECTOR_FORCE_CHECKING BASISU_FORCE_INLINE const T& front() const { assert(m_size); return m_p[0]; } BASISU_FORCE_INLINE T& front() { assert(m_size); return m_p[0]; } BASISU_FORCE_INLINE const T& back() const { assert(m_size); return m_p[m_size - 1]; } BASISU_FORCE_INLINE T& back() { assert(m_size); return m_p[m_size - 1]; } +#else + BASISU_FORCE_INLINE const T& front() const + { + if (!m_size) + { + fprintf(stderr, "front: vector is empty, type size %u\n", (uint32_t)sizeof(T)); + abort(); + } + return m_p[0]; + } + BASISU_FORCE_INLINE T& front() + { + if (!m_size) + { + fprintf(stderr, "front: vector is empty, type size %u\n", (uint32_t)sizeof(T)); + abort(); + } + return m_p[0]; + } + + BASISU_FORCE_INLINE const T& back() const + { + if(!m_size) + { + fprintf(stderr, "back: vector is empty, type size %u\n", (uint32_t)sizeof(T)); + abort(); + } + return m_p[m_size - 1]; + } + BASISU_FORCE_INLINE T& back() + { + if (!m_size) + { + fprintf(stderr, "back: vector is empty, type size %u\n", (uint32_t)sizeof(T)); + abort(); + } + return m_p[m_size - 1]; + } +#endif BASISU_FORCE_INLINE const T* get_ptr() const { return m_p; } BASISU_FORCE_INLINE T* get_ptr() { return m_p; } @@ -952,6 +1019,8 @@ namespace basisu // Caller is granting ownership of the indicated heap block. // Block must have size constructed elements, and have enough room for capacity elements. + // The block must have been allocated using malloc(). + // Important: This method is used in Basis Universal. If you change how this container allocates memory, you'll need to change any users of this method. inline bool grant_ownership(T* p, uint32_t size, uint32_t capacity) { // To to prevent the caller from obviously shooting themselves in the foot. diff --git a/transcoder/basisu_containers_impl.h b/transcoder/basisu_containers_impl.h index 6555171..d5cb615 100644 --- a/transcoder/basisu_containers_impl.h +++ b/transcoder/basisu_containers_impl.h @@ -55,7 +55,9 @@ namespace basisu abort(); } -#ifdef _MSC_VER +#if BASISU_VECTOR_DETERMINISTIC + actual_size = desired_size; +#elif defined(_MSC_VER) actual_size = _msize(new_p); #elif HAS_MALLOC_USABLE_SIZE actual_size = malloc_usable_size(new_p); @@ -82,7 +84,9 @@ namespace basisu abort(); } -#ifdef _MSC_VER +#if BASISU_VECTOR_DETERMINISTIC + actual_size = desired_size; +#elif defined(_MSC_VER) actual_size = _msize(new_p); #elif HAS_MALLOC_USABLE_SIZE actual_size = malloc_usable_size(new_p); diff --git a/transcoder/basisu_transcoder.cpp b/transcoder/basisu_transcoder.cpp index 0b37333..ce8c661 100644 --- a/transcoder/basisu_transcoder.cpp +++ b/transcoder/basisu_transcoder.cpp @@ -224,32 +224,7 @@ namespace basist return static_cast(~crc); } - - const uint32_t g_global_selector_cb[] = -#include "basisu_global_selector_cb.h" - ; - - const uint32_t g_global_selector_cb_size = sizeof(g_global_selector_cb) / sizeof(g_global_selector_cb[0]); - - void etc1_global_selector_codebook::init(uint32_t N, const uint32_t* pEntries) - { - m_palette.resize(N); - for (uint32_t i = 0; i < N; i++) - m_palette[i].set_uint32(pEntries[i]); - } - - void etc1_global_selector_codebook::print_code(FILE* pFile) - { - fprintf(pFile, "{\n"); - for (uint32_t i = 0; i < m_palette.size(); i++) - { - fprintf(pFile, "0x%X,", m_palette[i].get_uint32()); - if ((i & 15) == 15) - fprintf(pFile, "\n"); - } - fprintf(pFile, "\n}\n"); - } - + enum etc_constants { cETC1BytesPerBlock = 8U, @@ -7532,9 +7507,8 @@ namespace basist } #endif // BASISD_SUPPORT_PVRTC2 - basisu_lowlevel_etc1s_transcoder::basisu_lowlevel_etc1s_transcoder(const etc1_global_selector_codebook* pGlobal_sel_codebook) : + basisu_lowlevel_etc1s_transcoder::basisu_lowlevel_etc1s_transcoder() : m_pGlobal_codebook(nullptr), - m_pGlobal_sel_codebook(pGlobal_sel_codebook), m_selector_history_buf_size(0) { } @@ -7641,50 +7615,8 @@ namespace basist if (used_global_selector_cb) { - // global selector palette - uint32_t pal_bits = sym_codec.get_bits(4); - uint32_t mod_bits = sym_codec.get_bits(4); - - basist::huffman_decoding_table mod_model; - if (mod_bits) - { - if (!sym_codec.read_huffman_table(mod_model)) - { - BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::decode_palettes: fail 6\n"); - return false; - } - if (!mod_model.is_valid()) - { - BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::decode_palettes: fail 6a\n"); - return false; - } - } - - for (uint32_t i = 0; i < num_selectors; i++) - { - uint32_t pal_index = 0; - if (pal_bits) - pal_index = sym_codec.get_bits(pal_bits); - - uint32_t mod_index = 0; - if (mod_bits) - mod_index = sym_codec.decode_huffman(mod_model); - - if (pal_index >= m_pGlobal_sel_codebook->size()) - { - BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::decode_palettes: fail 7z\n"); - return false; - } - - const etc1_selector_palette_entry e(m_pGlobal_sel_codebook->get_entry(pal_index, etc1_global_palette_entry_modifier(mod_index))); - - // TODO: Optimize this - for (uint32_t y = 0; y < 4; y++) - for (uint32_t x = 0; x < 4; x++) - m_local_selectors[i].set_selector(x, y, e[x + y * 4]); - - m_local_selectors[i].init_flags(); - } + BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::decode_palettes: global selector codebooks are unsupported\n"); + return false; } else { @@ -7692,146 +7624,70 @@ namespace basist if (used_hybrid_selector_cb) { - const uint32_t pal_bits = sym_codec.get_bits(4); - const uint32_t mod_bits = sym_codec.get_bits(4); + BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::decode_palettes: hybrid global selector codebooks are unsupported\n"); + return false; + } + + const bool used_raw_encoding = (sym_codec.get_bits(1) == 1); - basist::huffman_decoding_table uses_global_cb_bitflags_model; - if (!sym_codec.read_huffman_table(uses_global_cb_bitflags_model)) + if (used_raw_encoding) + { + for (uint32_t i = 0; i < num_selectors; i++) { - BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::decode_palettes: fail 7\n"); - return false; - } - if (!uses_global_cb_bitflags_model.is_valid()) - { - BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::decode_palettes: fail 7a\n"); - return false; - } - - basist::huffman_decoding_table global_mod_indices_model; - if (mod_bits) - { - if (!sym_codec.read_huffman_table(global_mod_indices_model)) + for (uint32_t j = 0; j < 4; j++) { - BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::decode_palettes: fail 8\n"); - return false; - } - if (!global_mod_indices_model.is_valid()) - { - BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::decode_palettes: fail 8a\n"); - return false; - } - } + uint32_t cur_byte = sym_codec.get_bits(8); - uint32_t cur_uses_global_cb_bitflags = 0; - uint32_t uses_global_cb_bitflags_remaining = 0; - - for (uint32_t q = 0; q < num_selectors; q++) - { - if (!uses_global_cb_bitflags_remaining) - { - cur_uses_global_cb_bitflags = sym_codec.decode_huffman(uses_global_cb_bitflags_model); - - uses_global_cb_bitflags_remaining = 8; - } - uses_global_cb_bitflags_remaining--; - - const bool used_global_cb_flag = (cur_uses_global_cb_bitflags & 1) != 0; - cur_uses_global_cb_bitflags >>= 1; - - if (used_global_cb_flag) - { - const uint32_t pal_index = pal_bits ? sym_codec.get_bits(pal_bits) : 0; - const uint32_t mod_index = mod_bits ? sym_codec.decode_huffman(global_mod_indices_model) : 0; - - if (pal_index >= m_pGlobal_sel_codebook->size()) - { - BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::decode_palettes: fail 8b\n"); - return false; - } - - const etc1_selector_palette_entry e(m_pGlobal_sel_codebook->get_entry(pal_index, etc1_global_palette_entry_modifier(mod_index))); - - for (uint32_t y = 0; y < 4; y++) - for (uint32_t x = 0; x < 4; x++) - m_local_selectors[q].set_selector(x, y, e[x + y * 4]); - } - else - { - for (uint32_t j = 0; j < 4; j++) - { - uint32_t cur_byte = sym_codec.get_bits(8); - - for (uint32_t k = 0; k < 4; k++) - m_local_selectors[q].set_selector(k, j, (cur_byte >> (k * 2)) & 3); - } + for (uint32_t k = 0; k < 4; k++) + m_local_selectors[i].set_selector(k, j, (cur_byte >> (k * 2)) & 3); } - m_local_selectors[q].init_flags(); + m_local_selectors[i].init_flags(); } } else { - const bool used_raw_encoding = (sym_codec.get_bits(1) == 1); - - if (used_raw_encoding) + if (!sym_codec.read_huffman_table(delta_selector_pal_model)) { - for (uint32_t i = 0; i < num_selectors; i++) + BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::decode_palettes: fail 10\n"); + return false; + } + + if ((num_selectors > 1) && (!delta_selector_pal_model.is_valid())) + { + BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::decode_palettes: fail 10a\n"); + return false; + } + + uint8_t prev_bytes[4] = { 0, 0, 0, 0 }; + + for (uint32_t i = 0; i < num_selectors; i++) + { + if (!i) { for (uint32_t j = 0; j < 4; j++) { uint32_t cur_byte = sym_codec.get_bits(8); - - for (uint32_t k = 0; k < 4; k++) - m_local_selectors[i].set_selector(k, j, (cur_byte >> (k * 2)) & 3); - } - - m_local_selectors[i].init_flags(); - } - } - else - { - if (!sym_codec.read_huffman_table(delta_selector_pal_model)) - { - BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::decode_palettes: fail 10\n"); - return false; - } - - if ((num_selectors > 1) && (!delta_selector_pal_model.is_valid())) - { - BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::decode_palettes: fail 10a\n"); - return false; - } - - uint8_t prev_bytes[4] = { 0, 0, 0, 0 }; - - for (uint32_t i = 0; i < num_selectors; i++) - { - if (!i) - { - for (uint32_t j = 0; j < 4; j++) - { - uint32_t cur_byte = sym_codec.get_bits(8); - prev_bytes[j] = static_cast(cur_byte); - - for (uint32_t k = 0; k < 4; k++) - m_local_selectors[i].set_selector(k, j, (cur_byte >> (k * 2)) & 3); - } - m_local_selectors[i].init_flags(); - continue; - } - - for (uint32_t j = 0; j < 4; j++) - { - int delta_byte = sym_codec.decode_huffman(delta_selector_pal_model); - - uint32_t cur_byte = delta_byte ^ prev_bytes[j]; prev_bytes[j] = static_cast(cur_byte); for (uint32_t k = 0; k < 4; k++) m_local_selectors[i].set_selector(k, j, (cur_byte >> (k * 2)) & 3); } m_local_selectors[i].init_flags(); + continue; } + + for (uint32_t j = 0; j < 4; j++) + { + int delta_byte = sym_codec.decode_huffman(delta_selector_pal_model); + + uint32_t cur_byte = delta_byte ^ prev_bytes[j]; + prev_bytes[j] = static_cast(cur_byte); + + for (uint32_t k = 0; k < 4; k++) + m_local_selectors[i].set_selector(k, j, (cur_byte >> (k * 2)) & 3); + } + m_local_selectors[i].init_flags(); } } } @@ -7899,6 +7755,12 @@ namespace basist } m_selector_history_buf_size = sym_codec.get_bits(13); + // Check for bogus values. + if (!m_selector_history_buf_size) + { + BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::decode_tables: fail 5\n"); + return false; + } sym_codec.stop(); @@ -7979,8 +7841,11 @@ namespace basist decoder_etc_block block; memset(&block, 0, sizeof(block)); + + //block.set_flip_bit(true); + // Setting the flip bit to false to be compatible with the Khronos KDFS. + block.set_flip_bit(false); - block.set_flip_bit(true); block.set_diff_bit(true); void* pPVRTC_work_mem = nullptr; @@ -8741,7 +8606,7 @@ namespace basist if (!output_row_pitch_in_blocks_or_pixels) output_row_pitch_in_blocks_or_pixels = orig_width; - if (!output_rows_in_pixels) + if (!output_rows_in_pixels) output_rows_in_pixels = orig_height; // Now make sure the output buffer is large enough, or we'll overwrite memory. @@ -9440,6 +9305,12 @@ namespace basist { switch (fmt) { + case block_format::cUASTC_4x4: + { + memcpy(pDst_block, pSource_block, sizeof(uastc_block)); + status = true; + break; + } case block_format::cETC1: { if (from_alpha) @@ -9906,8 +9777,7 @@ namespace basist return status; } - basisu_transcoder::basisu_transcoder(const etc1_global_selector_codebook* pGlobal_sel_codebook) : - m_lowlevel_etc1s_decoder(pGlobal_sel_codebook), + basisu_transcoder::basisu_transcoder() : m_ready_to_transcode(false) { } @@ -10778,6 +10648,8 @@ namespace basist return false; } + //const bool transcode_alpha_data_to_opaque_formats = (decode_flags & cDecodeFlagsTranscodeAlphaDataToOpaqueFormats) != 0; + if (decode_flags & cDecodeFlagsPVRTCDecodeToNextPow2) { BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: cDecodeFlagsPVRTCDecodeToNextPow2 currently unsupported\n"); @@ -11001,6 +10873,7 @@ namespace basist case block_format::cRGB565: return "RGB565"; case block_format::cBGR565: return "BGR565"; case block_format::cRGBA4444: return "RGBA4444"; + case block_format::cUASTC_4x4: return "UASTC_4x4"; case block_format::cFXT1_RGB: return "FXT1_RGB"; case block_format::cPVRTC2_4_RGB: return "PVRTC2_4_RGB"; case block_format::cPVRTC2_4_RGBA: return "PVRTC2_4_RGBA"; @@ -16722,8 +16595,8 @@ namespace basist #if BASISD_SUPPORT_KTX2 const uint8_t g_ktx2_file_identifier[12] = { 0xAB, 0x4B, 0x54, 0x58, 0x20, 0x32, 0x30, 0xBB, 0x0D, 0x0A, 0x1A, 0x0A }; - ktx2_transcoder::ktx2_transcoder(basist::etc1_global_selector_codebook* pGlobal_sel_codebook) : - m_etc1s_transcoder(pGlobal_sel_codebook) + ktx2_transcoder::ktx2_transcoder() : + m_etc1s_transcoder() { clear(); } @@ -17334,6 +17207,7 @@ namespace basist bool ktx2_transcoder::decompress_level_data(uint32_t level_index, basisu::uint8_vec& uncomp_data) { + const uint8_t* pComp_data = m_levels[level_index].m_byte_offset + m_pData; const uint64_t comp_size = m_levels[level_index].m_byte_length; const uint64_t uncomp_size = m_levels[level_index].m_uncompressed_byte_length; @@ -17349,7 +17223,7 @@ namespace basist return false; } - if (!uncomp_data.try_resize(uncomp_size)) + if (!uncomp_data.try_resize((size_t)uncomp_size)) { BASISU_DEVEL_ERROR("ktx2_transcoder::decompress_level_data: Out of memory\n"); return false; @@ -17358,7 +17232,6 @@ namespace basist if (m_header.m_supercompression_scheme == KTX2_SS_ZSTANDARD) { #if BASISD_SUPPORT_KTX2_ZSTD - const uint8_t* pComp_data = m_levels[level_index].m_byte_offset + m_pData; size_t actualUncompSize = ZSTD_decompress(uncomp_data.data(), (size_t)uncomp_size, pComp_data, (size_t)comp_size); if (ZSTD_isError(actualUncompSize)) { diff --git a/transcoder/basisu_transcoder.h b/transcoder/basisu_transcoder.h index bf3aed3..3327e8d 100644 --- a/transcoder/basisu_transcoder.h +++ b/transcoder/basisu_transcoder.h @@ -34,7 +34,6 @@ #include "basisu_transcoder_internal.h" #include "basisu_transcoder_uastc.h" -#include "basisu_global_selector_palette.h" #include "basisu_file_headers.h" namespace basist @@ -190,7 +189,7 @@ namespace basist friend class basisu_transcoder; public: - basisu_lowlevel_etc1s_transcoder(const basist::etc1_global_selector_codebook* pGlobal_sel_codebook); + basisu_lowlevel_etc1s_transcoder(); void set_global_codebooks(const basisu_lowlevel_etc1s_transcoder* pGlobal_codebook) { m_pGlobal_codebook = pGlobal_codebook; } const basisu_lowlevel_etc1s_transcoder* get_global_codebooks() const { return m_pGlobal_codebook; } @@ -248,17 +247,13 @@ namespace basist typedef basisu::vector selector_vec; const selector_vec& get_selectors() const { return m_local_selectors; } - - const etc1_global_selector_codebook* get_global_sel_codebook() const { return m_pGlobal_sel_codebook; } - + private: const basisu_lowlevel_etc1s_transcoder* m_pGlobal_codebook; endpoint_vec m_local_endpoints; selector_vec m_local_selectors; - - const etc1_global_selector_codebook* m_pGlobal_sel_codebook; - + huffman_decoding_table m_endpoint_pred_model, m_delta_endpoint_model, m_selector_model, m_selector_history_buf_rle_model; uint32_t m_selector_history_buf_size; @@ -442,7 +437,7 @@ namespace basist basisu_transcoder& operator= (const basisu_transcoder&); public: - basisu_transcoder(const etc1_global_selector_codebook* pGlobal_sel_codebook); + basisu_transcoder(); // Validates the .basis file. This computes a crc16 over the entire file, so it's slow. bool validate_file_checksums(const void* pData, uint32_t data_size, bool full_validation) const; @@ -770,7 +765,7 @@ namespace basist class ktx2_transcoder { public: - ktx2_transcoder(basist::etc1_global_selector_codebook* pGlobal_sel_codebook); + ktx2_transcoder(); // Frees all allocations, resets object. void clear(); diff --git a/transcoder/basisu_transcoder_internal.h b/transcoder/basisu_transcoder_internal.h index 2422d78..776a998 100644 --- a/transcoder/basisu_transcoder_internal.h +++ b/transcoder/basisu_transcoder_internal.h @@ -20,8 +20,8 @@ #pragma warning (disable: 4127) // conditional expression is constant #endif -#define BASISD_LIB_VERSION 115 -#define BASISD_VERSION_STRING "01.15" +#define BASISD_LIB_VERSION 116 +#define BASISD_VERSION_STRING "01.16" #ifdef _DEBUG #define BASISD_BUILD_DEBUG @@ -46,18 +46,18 @@ namespace basist { cETC1, // ETC1S RGB cETC2_RGBA, // full ETC2 EAC RGBA8 block - cBC1, // DXT1 RGB - cBC3, // BC4 block followed by a four color BC1 block - cBC4, // DXT5A (alpha block only) - cBC5, // two BC4 blocks + cBC1, // DXT1 RGB + cBC3, // BC4 block followed by a four color BC1 block + cBC4, // DXT5A (alpha block only) + cBC5, // two BC4 blocks cPVRTC1_4_RGB, // opaque-only PVRTC1 4bpp - cPVRTC1_4_RGBA, // PVRTC1 4bpp RGBA - cBC7, // Full BC7 block, any mode + cPVRTC1_4_RGBA, // PVRTC1 4bpp RGBA + cBC7, // Full BC7 block, any mode cBC7_M5_COLOR, // RGB BC7 mode 5 color (writes an opaque mode 5 block) cBC7_M5_ALPHA, // alpha portion of BC7 mode 5 (cBC7_M5_COLOR output data must have been written to the output buffer first to set the mode/rot fields etc.) cETC2_EAC_A8, // alpha block of ETC2 EAC (first 8 bytes of the 16-bit ETC2 EAC RGBA format) cASTC_4x4, // ASTC 4x4 (either color-only or color+alpha). Note that the transcoder always currently assumes sRGB is not enabled when outputting ASTC - // data. If you use a sRGB ASTC format you'll get ~1 LSB of additional error, because of the different way ASTC decoders scale 8-bit endpoints to 16-bits during unpacking. + // data. If you use a sRGB ASTC format you'll get ~1 LSB of additional error, because of the different way ASTC decoders scale 8-bit endpoints to 16-bits during unpacking. cATC_RGB, cATC_RGBA_INTERPOLATED_ALPHA, @@ -72,8 +72,8 @@ namespace basist cIndices, // Used internally: Write 16-bit endpoint and selector indices directly to output (output block must be at least 32-bits) cRGB32, // Writes RGB components to 32bpp output pixels - cRGBA32, // Writes RGB255 components to 32bpp output pixels - cA32, // Writes alpha component to 32bpp output pixels + cRGBA32, // Writes RGB255 components to 32bpp output pixels + cA32, // Writes alpha component to 32bpp output pixels cRGB565, cBGR565, @@ -82,6 +82,8 @@ namespace basist cRGBA4444_ALPHA, cRGBA4444_COLOR_OPAQUE, cRGBA4444, + + cUASTC_4x4, cTotalBlockFormats }; diff --git a/webgl/encoder/CMakeLists.txt b/webgl/encoder/CMakeLists.txt index e365e1b..588d91b 100644 --- a/webgl/encoder/CMakeLists.txt +++ b/webgl/encoder/CMakeLists.txt @@ -20,18 +20,16 @@ if (EMSCRIPTEN) ../../encoder/basisu_enc.cpp ../../encoder/basisu_etc.cpp ../../encoder/basisu_frontend.cpp - ../../encoder/basisu_global_selector_palette_helpers.cpp ../../encoder/basisu_gpu_texture.cpp ../../encoder/basisu_pvrtc1_4.cpp ../../encoder/basisu_resampler.cpp ../../encoder/basisu_resample_filters.cpp ../../encoder/basisu_ssim.cpp - ../../encoder/basisu_astc_decomp.cpp ../../encoder/basisu_uastc_enc.cpp ../../encoder/basisu_bc7enc.cpp ../../encoder/basisu_kernels_sse.cpp - ../../encoder/lodepng.cpp - ../../encoder/apg_bmp.c + ../../encoder/basisu_opencl.cpp + ../../encoder/pvpngreader.cpp ../../encoder/jpgd.cpp ) diff --git a/webgl/encoder/build/basis_encoder.js b/webgl/encoder/build/basis_encoder.js index 2820331..4f48e89 100644 --- a/webgl/encoder/build/basis_encoder.js +++ b/webgl/encoder/build/basis_encoder.js @@ -6,7 +6,7 @@ var BASIS = (function() { function(BASIS) { BASIS = BASIS || {}; -var Module=typeof BASIS!=="undefined"?BASIS:{};var readyPromiseResolve,readyPromiseReject;Module["ready"]=new Promise(function(resolve,reject){readyPromiseResolve=resolve;readyPromiseReject=reject});var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}var arguments_=[];var thisProgram="./this.program";var quit_=function(status,toThrow){throw toThrow};var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof process.versions==="object"&&typeof process.versions.node==="string";ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;var nodeFS;var nodePath;if(ENVIRONMENT_IS_NODE){if(ENVIRONMENT_IS_WORKER){scriptDirectory=require("path").dirname(scriptDirectory)+"/"}else{scriptDirectory=__dirname+"/"}read_=function shell_read(filename,binary){if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);return nodeFS["readFileSync"](filename,binary?null:"utf8")};readBinary=function readBinary(filename){var ret=read_(filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){thisProgram=process["argv"][1].replace(/\\/g,"/")}arguments_=process["argv"].slice(2);process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);quit_=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){read_=function shell_read(f){return read(f)}}readBinary=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){arguments_=scriptArgs}else if(typeof arguments!="undefined"){arguments_=arguments}if(typeof quit==="function"){quit_=function(status){quit(status)}}if(typeof print!=="undefined"){if(typeof console==="undefined")console={};console.log=print;console.warn=console.error=typeof printErr!=="undefined"?printErr:print}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!=="undefined"&&document.currentScript){scriptDirectory=document.currentScript.src}if(_scriptDir){scriptDirectory=_scriptDir}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}{read_=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){readBinary=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}setWindowTitle=function(title){document.title=title}}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.warn.bind(console);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["quit"])quit_=Module["quit"];var STACK_ALIGN=16;function alignMemory(size,factor){if(!factor)factor=STACK_ALIGN;return Math.ceil(size/factor)*factor}var tempRet0=0;var setTempRet0=function(value){tempRet0=value};var getTempRet0=function(){return tempRet0};var wasmBinary;if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];var noExitRuntime;if(Module["noExitRuntime"])noExitRuntime=Module["noExitRuntime"];if(typeof WebAssembly!=="object"){abort("no native wasm support detected")}var wasmMemory;var ABORT=false;var EXITSTATUS;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}var UTF8Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(heap,idx,maxBytesToRead){var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heap[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heap.subarray&&UTF8Decoder){return UTF8Decoder.decode(heap.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,heap,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function UTF16ToString(ptr,maxBytesToRead){var endPtr=ptr;var idx=endPtr>>1;var maxIdx=idx+maxBytesToRead/2;while(!(idx>=maxIdx)&&HEAPU16[idx])++idx;endPtr=idx<<1;if(endPtr-ptr>32&&UTF16Decoder){return UTF16Decoder.decode(HEAPU8.subarray(ptr,endPtr))}else{var str="";for(var i=0;!(i>=maxBytesToRead/2);++i){var codeUnit=HEAP16[ptr+i*2>>1];if(codeUnit==0)break;str+=String.fromCharCode(codeUnit)}return str}}function stringToUTF16(str,outPtr,maxBytesToWrite){if(maxBytesToWrite===undefined){maxBytesToWrite=2147483647}if(maxBytesToWrite<2)return 0;maxBytesToWrite-=2;var startPtr=outPtr;var numCharsToWrite=maxBytesToWrite>1]=codeUnit;outPtr+=2}HEAP16[outPtr>>1]=0;return outPtr-startPtr}function lengthBytesUTF16(str){return str.length*2}function UTF32ToString(ptr,maxBytesToRead){var i=0;var str="";while(!(i>=maxBytesToRead/4)){var utf32=HEAP32[ptr+i*4>>2];if(utf32==0)break;++i;if(utf32>=65536){var ch=utf32-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}else{str+=String.fromCharCode(utf32)}}return str}function stringToUTF32(str,outPtr,maxBytesToWrite){if(maxBytesToWrite===undefined){maxBytesToWrite=2147483647}if(maxBytesToWrite<4)return 0;var startPtr=outPtr;var endPtr=startPtr+maxBytesToWrite-4;for(var i=0;i=55296&&codeUnit<=57343){var trailSurrogate=str.charCodeAt(++i);codeUnit=65536+((codeUnit&1023)<<10)|trailSurrogate&1023}HEAP32[outPtr>>2]=codeUnit;outPtr+=4;if(outPtr+4>endPtr)break}HEAP32[outPtr>>2]=0;return outPtr-startPtr}function lengthBytesUTF32(str){var len=0;for(var i=0;i=55296&&codeUnit<=57343)++i;len+=4}return len}function alignUp(x,multiple){if(x%multiple>0){x+=multiple-x%multiple}return x}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferAndViews(buf){buffer=buf;Module["HEAP8"]=HEAP8=new Int8Array(buf);Module["HEAP16"]=HEAP16=new Int16Array(buf);Module["HEAP32"]=HEAP32=new Int32Array(buf);Module["HEAPU8"]=HEAPU8=new Uint8Array(buf);Module["HEAPU16"]=HEAPU16=new Uint16Array(buf);Module["HEAPU32"]=HEAPU32=new Uint32Array(buf);Module["HEAPF32"]=HEAPF32=new Float32Array(buf);Module["HEAPF64"]=HEAPF64=new Float64Array(buf)}var INITIAL_MEMORY=Module["INITIAL_MEMORY"]||299958272;var wasmTable;var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}what+="";err(what);ABORT=true;EXITSTATUS=1;what="abort("+what+"). Build with -s ASSERTIONS=1 for more info.";var e=new WebAssembly.RuntimeError(what);readyPromiseReject(e);throw e}function hasPrefix(str,prefix){return String.prototype.startsWith?str.startsWith(prefix):str.indexOf(prefix)===0}var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return hasPrefix(filename,dataURIPrefix)}var fileURIPrefix="file://";function isFileURI(filename){return hasPrefix(filename,fileURIPrefix)}var wasmBinaryFile="basis_encoder.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"&&!isFileURI(wasmBinaryFile)){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return Promise.resolve().then(getBinary)}function createWasm(){var info={"a":asmLibraryArg};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;wasmMemory=Module["asm"]["Z"];updateGlobalBufferAndViews(wasmMemory.buffer);wasmTable=Module["asm"]["_"];removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){return getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}function instantiateAsync(){if(!wasmBinary&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&!isFileURI(wasmBinaryFile)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){var result=WebAssembly.instantiateStreaming(response,info);return result.then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");return instantiateArrayBuffer(receiveInstantiatedSource)})})}else{return instantiateArrayBuffer(receiveInstantiatedSource)}}if(Module["instantiateWasm"]){try{var exports=Module["instantiateWasm"](info,receiveInstance);return exports}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}instantiateAsync().catch(readyPromiseReject);return{}}var tempDouble;var tempI64;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback(Module);continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){wasmTable.get(func)()}else{wasmTable.get(func)(callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var ExceptionInfoAttrs={DESTRUCTOR_OFFSET:0,REFCOUNT_OFFSET:4,TYPE_OFFSET:8,CAUGHT_OFFSET:12,RETHROWN_OFFSET:13,SIZE:16};function ___cxa_allocate_exception(size){return _malloc(size+ExceptionInfoAttrs.SIZE)+ExceptionInfoAttrs.SIZE}function ExceptionInfo(excPtr){this.excPtr=excPtr;this.ptr=excPtr-ExceptionInfoAttrs.SIZE;this.set_type=function(type){HEAP32[this.ptr+ExceptionInfoAttrs.TYPE_OFFSET>>2]=type};this.get_type=function(){return HEAP32[this.ptr+ExceptionInfoAttrs.TYPE_OFFSET>>2]};this.set_destructor=function(destructor){HEAP32[this.ptr+ExceptionInfoAttrs.DESTRUCTOR_OFFSET>>2]=destructor};this.get_destructor=function(){return HEAP32[this.ptr+ExceptionInfoAttrs.DESTRUCTOR_OFFSET>>2]};this.set_refcount=function(refcount){HEAP32[this.ptr+ExceptionInfoAttrs.REFCOUNT_OFFSET>>2]=refcount};this.set_caught=function(caught){caught=caught?1:0;HEAP8[this.ptr+ExceptionInfoAttrs.CAUGHT_OFFSET>>0]=caught};this.get_caught=function(){return HEAP8[this.ptr+ExceptionInfoAttrs.CAUGHT_OFFSET>>0]!=0};this.set_rethrown=function(rethrown){rethrown=rethrown?1:0;HEAP8[this.ptr+ExceptionInfoAttrs.RETHROWN_OFFSET>>0]=rethrown};this.get_rethrown=function(){return HEAP8[this.ptr+ExceptionInfoAttrs.RETHROWN_OFFSET>>0]!=0};this.init=function(type,destructor){this.set_type(type);this.set_destructor(destructor);this.set_refcount(0);this.set_caught(false);this.set_rethrown(false)};this.add_ref=function(){var value=HEAP32[this.ptr+ExceptionInfoAttrs.REFCOUNT_OFFSET>>2];HEAP32[this.ptr+ExceptionInfoAttrs.REFCOUNT_OFFSET>>2]=value+1};this.release_ref=function(){var prev=HEAP32[this.ptr+ExceptionInfoAttrs.REFCOUNT_OFFSET>>2];HEAP32[this.ptr+ExceptionInfoAttrs.REFCOUNT_OFFSET>>2]=prev-1;return prev===1}}var exceptionLast=0;var uncaughtExceptionCount=0;function ___cxa_throw(ptr,type,destructor){var info=new ExceptionInfo(ptr);info.init(type,destructor);exceptionLast=ptr;uncaughtExceptionCount++;throw ptr}function setErrNo(value){HEAP32[___errno_location()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";path=PATH.normalize(path);path=path.replace(/\/$/,"");var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)}};function getRandomDevice(){if(typeof crypto==="object"&&typeof crypto["getRandomValues"]==="function"){var randomBuffer=new Uint8Array(1);return function(){crypto.getRandomValues(randomBuffer);return randomBuffer[0]}}else if(ENVIRONMENT_IS_NODE){try{var crypto_module=require("crypto");return function(){return crypto_module["randomBytes"](1)[0]}}catch(e){}}return function(){abort("randomDevice")}}var PATH_FS={resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH_FS.resolve(from).substr(1);to=PATH_FS.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};function mmapAlloc(size){var alignedSize=alignMemory(size,16384);var ptr=_malloc(alignedSize);while(size=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity>>0);if(prevCapacity!=0)newCapacity=Math.max(newCapacity,256);var oldContents=node.contents;node.contents=new Uint8Array(newCapacity);if(node.usedBytes>0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(newSize);if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+length8){throw new FS.ErrnoError(32)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(32)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var errCode=FS.mayLookup(parent);if(errCode){throw new FS.ErrnoError(errCode,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"r+":2,"w":577,"w+":578,"a":1089,"a+":1090},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 2}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 2}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 2}return 0},mayLookup:function(dir){var errCode=FS.nodePermissions(dir,"x");if(errCode)return errCode;if(!dir.node_ops.lookup)return 2;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 20}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var errCode=FS.nodePermissions(dir,"wx");if(errCode){return errCode}if(isdir){if(!FS.isDir(node.mode)){return 54}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 10}}else{if(FS.isDir(node.mode)){return 31}}return 0},mayOpen:function(node,flags){if(!node){return 44}if(FS.isLink(node.mode)){return 32}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 31}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(33)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}}}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(70)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){err("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(errCode){FS.syncFSRequests--;return callback(errCode)}function done(errCode){if(errCode){if(!done.errored){done.errored=true;return doCallback(errCode)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(10)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(28)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(28)}var errCode=FS.mayCreate(parent,name);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(63)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;out("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){FS.forceLoadFile(node);return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){FS.forceLoadFile(node);var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags,offset){var buffer=HEAPU8.slice(addr,addr+len);FS.msync(stream,buffer,offset,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-28}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-28;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-28}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;if(!node){return-44}var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-2}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:undefined,get:function(){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(ptr){var ret=UTF8ToString(ptr);return ret},getStreamFromFD:function(fd){var stream=FS.getStream(fd);if(!stream)throw new FS.ErrnoError(8);return stream},get64:function(low,high){return low}};function ___sys_fcntl64(fd,cmd,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-28}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-28;case 9:setErrNo(28);return-1;default:{return-28}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___sys_ioctl(fd,op,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(op){case 21509:case 21505:{if(!stream.tty)return-59;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-59;return 0}case 21519:{if(!stream.tty)return-59;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-59;return-28}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-59;return 0}case 21524:{if(!stream.tty)return-59;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___sys_open(path,flags,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(path);var mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}var structRegistrations={};function runDestructors(destructors){while(destructors.length){var ptr=destructors.pop();var del=destructors.pop();del(ptr)}}function simpleReadValueFromPointer(pointer){return this["fromWireType"](HEAPU32[pointer>>2])}var awaitingDependencies={};var registeredTypes={};var typeDependencies={};var char_0=48;var char_9=57;function makeLegalFunctionName(name){if(undefined===name){return"_unknown"}name=name.replace(/[^a-zA-Z0-9_]/g,"$");var f=name.charCodeAt(0);if(f>=char_0&&f<=char_9){return"_"+name}else{return name}}function createNamedFunction(name,body){name=makeLegalFunctionName(name);return new Function("body","return function "+name+"() {\n"+' "use strict";'+" return body.apply(this, arguments);\n"+"};\n")(body)}function extendError(baseErrorType,errorName){var errorClass=createNamedFunction(errorName,function(message){this.name=errorName;this.message=message;var stack=new Error(message).stack;if(stack!==undefined){this.stack=this.toString()+"\n"+stack.replace(/^Error(:[^\n]*)?\n/,"")}});errorClass.prototype=Object.create(baseErrorType.prototype);errorClass.prototype.constructor=errorClass;errorClass.prototype.toString=function(){if(this.message===undefined){return this.name}else{return this.name+": "+this.message}};return errorClass}var InternalError=undefined;function throwInternalError(message){throw new InternalError(message)}function whenDependentTypesAreResolved(myTypes,dependentTypes,getTypeConverters){myTypes.forEach(function(type){typeDependencies[type]=dependentTypes});function onComplete(typeConverters){var myTypeConverters=getTypeConverters(typeConverters);if(myTypeConverters.length!==myTypes.length){throwInternalError("Mismatched type converter count")}for(var i=0;i>shift])},destructorFunction:null})}function ClassHandle_isAliasOf(other){if(!(this instanceof ClassHandle)){return false}if(!(other instanceof ClassHandle)){return false}var leftClass=this.$$.ptrType.registeredClass;var left=this.$$.ptr;var rightClass=other.$$.ptrType.registeredClass;var right=other.$$.ptr;while(leftClass.baseClass){left=leftClass.upcast(left);leftClass=leftClass.baseClass}while(rightClass.baseClass){right=rightClass.upcast(right);rightClass=rightClass.baseClass}return leftClass===rightClass&&left===right}function shallowCopyInternalPointer(o){return{count:o.count,deleteScheduled:o.deleteScheduled,preservePointerOnDelete:o.preservePointerOnDelete,ptr:o.ptr,ptrType:o.ptrType,smartPtr:o.smartPtr,smartPtrType:o.smartPtrType}}function throwInstanceAlreadyDeleted(obj){function getInstanceTypeName(handle){return handle.$$.ptrType.registeredClass.name}throwBindingError(getInstanceTypeName(obj)+" instance already deleted")}var finalizationGroup=false;function detachFinalizer(handle){}function runDestructor($$){if($$.smartPtr){$$.smartPtrType.rawDestructor($$.smartPtr)}else{$$.ptrType.registeredClass.rawDestructor($$.ptr)}}function releaseClassHandle($$){$$.count.value-=1;var toDelete=0===$$.count.value;if(toDelete){runDestructor($$)}}function attachFinalizer(handle){if("undefined"===typeof FinalizationGroup){attachFinalizer=function(handle){return handle};return handle}finalizationGroup=new FinalizationGroup(function(iter){for(var result=iter.next();!result.done;result=iter.next()){var $$=result.value;if(!$$.ptr){console.warn("object already deleted: "+$$.ptr)}else{releaseClassHandle($$)}}});attachFinalizer=function(handle){finalizationGroup.register(handle,handle.$$,handle.$$);return handle};detachFinalizer=function(handle){finalizationGroup.unregister(handle.$$)};return attachFinalizer(handle)}function ClassHandle_clone(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.preservePointerOnDelete){this.$$.count.value+=1;return this}else{var clone=attachFinalizer(Object.create(Object.getPrototypeOf(this),{$$:{value:shallowCopyInternalPointer(this.$$)}}));clone.$$.count.value+=1;clone.$$.deleteScheduled=false;return clone}}function ClassHandle_delete(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError("Object already scheduled for deletion")}detachFinalizer(this);releaseClassHandle(this.$$);if(!this.$$.preservePointerOnDelete){this.$$.smartPtr=undefined;this.$$.ptr=undefined}}function ClassHandle_isDeleted(){return!this.$$.ptr}var delayFunction=undefined;var deletionQueue=[];function flushPendingDeletes(){while(deletionQueue.length){var obj=deletionQueue.pop();obj.$$.deleteScheduled=false;obj["delete"]()}}function ClassHandle_deleteLater(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError("Object already scheduled for deletion")}deletionQueue.push(this);if(deletionQueue.length===1&&delayFunction){delayFunction(flushPendingDeletes)}this.$$.deleteScheduled=true;return this}function init_ClassHandle(){ClassHandle.prototype["isAliasOf"]=ClassHandle_isAliasOf;ClassHandle.prototype["clone"]=ClassHandle_clone;ClassHandle.prototype["delete"]=ClassHandle_delete;ClassHandle.prototype["isDeleted"]=ClassHandle_isDeleted;ClassHandle.prototype["deleteLater"]=ClassHandle_deleteLater}function ClassHandle(){}var registeredPointers={};function ensureOverloadTable(proto,methodName,humanName){if(undefined===proto[methodName].overloadTable){var prevFunc=proto[methodName];proto[methodName]=function(){if(!proto[methodName].overloadTable.hasOwnProperty(arguments.length)){throwBindingError("Function '"+humanName+"' called with an invalid number of arguments ("+arguments.length+") - expects one of ("+proto[methodName].overloadTable+")!")}return proto[methodName].overloadTable[arguments.length].apply(this,arguments)};proto[methodName].overloadTable=[];proto[methodName].overloadTable[prevFunc.argCount]=prevFunc}}function exposePublicSymbol(name,value,numArguments){if(Module.hasOwnProperty(name)){if(undefined===numArguments||undefined!==Module[name].overloadTable&&undefined!==Module[name].overloadTable[numArguments]){throwBindingError("Cannot register public name '"+name+"' twice")}ensureOverloadTable(Module,name,name);if(Module.hasOwnProperty(numArguments)){throwBindingError("Cannot register multiple overloads of a function with the same number of arguments ("+numArguments+")!")}Module[name].overloadTable[numArguments]=value}else{Module[name]=value;if(undefined!==numArguments){Module[name].numArguments=numArguments}}}function RegisteredClass(name,constructor,instancePrototype,rawDestructor,baseClass,getActualType,upcast,downcast){this.name=name;this.constructor=constructor;this.instancePrototype=instancePrototype;this.rawDestructor=rawDestructor;this.baseClass=baseClass;this.getActualType=getActualType;this.upcast=upcast;this.downcast=downcast;this.pureVirtualFunctions=[]}function upcastPointer(ptr,ptrClass,desiredClass){while(ptrClass!==desiredClass){if(!ptrClass.upcast){throwBindingError("Expected null or instance of "+desiredClass.name+", got an instance of "+ptrClass.name)}ptr=ptrClass.upcast(ptr);ptrClass=ptrClass.baseClass}return ptr}function constNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}return 0}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function genericPointerToWireType(destructors,handle){var ptr;if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}if(this.isSmartPointer){ptr=this.rawConstructor();if(destructors!==null){destructors.push(this.rawDestructor,ptr)}return ptr}else{return 0}}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}if(!this.isConst&&handle.$$.ptrType.isConst){throwBindingError("Cannot convert argument of type "+(handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name)+" to parameter type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);if(this.isSmartPointer){if(undefined===handle.$$.smartPtr){throwBindingError("Passing raw pointer to smart pointer is illegal")}switch(this.sharingPolicy){case 0:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{throwBindingError("Cannot convert argument of type "+(handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name)+" to parameter type "+this.name)}break;case 1:ptr=handle.$$.smartPtr;break;case 2:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{var clonedHandle=handle["clone"]();ptr=this.rawShare(ptr,__emval_register(function(){clonedHandle["delete"]()}));if(destructors!==null){destructors.push(this.rawDestructor,ptr)}}break;default:throwBindingError("Unsupporting sharing policy")}}return ptr}function nonConstNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}return 0}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}if(handle.$$.ptrType.isConst){throwBindingError("Cannot convert argument of type "+handle.$$.ptrType.name+" to parameter type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function RegisteredPointer_getPointee(ptr){if(this.rawGetPointee){ptr=this.rawGetPointee(ptr)}return ptr}function RegisteredPointer_destructor(ptr){if(this.rawDestructor){this.rawDestructor(ptr)}}function RegisteredPointer_deleteObject(handle){if(handle!==null){handle["delete"]()}}function downcastPointer(ptr,ptrClass,desiredClass){if(ptrClass===desiredClass){return ptr}if(undefined===desiredClass.baseClass){return null}var rv=downcastPointer(ptr,ptrClass,desiredClass.baseClass);if(rv===null){return null}return desiredClass.downcast(rv)}function getInheritedInstanceCount(){return Object.keys(registeredInstances).length}function getLiveInheritedInstances(){var rv=[];for(var k in registeredInstances){if(registeredInstances.hasOwnProperty(k)){rv.push(registeredInstances[k])}}return rv}function setDelayFunction(fn){delayFunction=fn;if(deletionQueue.length&&delayFunction){delayFunction(flushPendingDeletes)}}function init_embind(){Module["getInheritedInstanceCount"]=getInheritedInstanceCount;Module["getLiveInheritedInstances"]=getLiveInheritedInstances;Module["flushPendingDeletes"]=flushPendingDeletes;Module["setDelayFunction"]=setDelayFunction}var registeredInstances={};function getBasestPointer(class_,ptr){if(ptr===undefined){throwBindingError("ptr should not be undefined")}while(class_.baseClass){ptr=class_.upcast(ptr);class_=class_.baseClass}return ptr}function getInheritedInstance(class_,ptr){ptr=getBasestPointer(class_,ptr);return registeredInstances[ptr]}function makeClassHandle(prototype,record){if(!record.ptrType||!record.ptr){throwInternalError("makeClassHandle requires ptr and ptrType")}var hasSmartPtrType=!!record.smartPtrType;var hasSmartPtr=!!record.smartPtr;if(hasSmartPtrType!==hasSmartPtr){throwInternalError("Both smartPtrType and smartPtr must be specified")}record.count={value:1};return attachFinalizer(Object.create(prototype,{$$:{value:record}}))}function RegisteredPointer_fromWireType(ptr){var rawPointer=this.getPointee(ptr);if(!rawPointer){this.destructor(ptr);return null}var registeredInstance=getInheritedInstance(this.registeredClass,rawPointer);if(undefined!==registeredInstance){if(0===registeredInstance.$$.count.value){registeredInstance.$$.ptr=rawPointer;registeredInstance.$$.smartPtr=ptr;return registeredInstance["clone"]()}else{var rv=registeredInstance["clone"]();this.destructor(ptr);return rv}}function makeDefaultHandle(){if(this.isSmartPointer){return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this.pointeeType,ptr:rawPointer,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this,ptr:ptr})}}var actualType=this.registeredClass.getActualType(rawPointer);var registeredPointerRecord=registeredPointers[actualType];if(!registeredPointerRecord){return makeDefaultHandle.call(this)}var toType;if(this.isConst){toType=registeredPointerRecord.constPointerType}else{toType=registeredPointerRecord.pointerType}var dp=downcastPointer(rawPointer,this.registeredClass,toType.registeredClass);if(dp===null){return makeDefaultHandle.call(this)}if(this.isSmartPointer){return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp})}}function init_RegisteredPointer(){RegisteredPointer.prototype.getPointee=RegisteredPointer_getPointee;RegisteredPointer.prototype.destructor=RegisteredPointer_destructor;RegisteredPointer.prototype["argPackAdvance"]=8;RegisteredPointer.prototype["readValueFromPointer"]=simpleReadValueFromPointer;RegisteredPointer.prototype["deleteObject"]=RegisteredPointer_deleteObject;RegisteredPointer.prototype["fromWireType"]=RegisteredPointer_fromWireType}function RegisteredPointer(name,registeredClass,isReference,isConst,isSmartPointer,pointeeType,sharingPolicy,rawGetPointee,rawConstructor,rawShare,rawDestructor){this.name=name;this.registeredClass=registeredClass;this.isReference=isReference;this.isConst=isConst;this.isSmartPointer=isSmartPointer;this.pointeeType=pointeeType;this.sharingPolicy=sharingPolicy;this.rawGetPointee=rawGetPointee;this.rawConstructor=rawConstructor;this.rawShare=rawShare;this.rawDestructor=rawDestructor;if(!isSmartPointer&®isteredClass.baseClass===undefined){if(isConst){this["toWireType"]=constNoSmartPtrRawPointerToWireType;this.destructorFunction=null}else{this["toWireType"]=nonConstNoSmartPtrRawPointerToWireType;this.destructorFunction=null}}else{this["toWireType"]=genericPointerToWireType}}function replacePublicSymbol(name,value,numArguments){if(!Module.hasOwnProperty(name)){throwInternalError("Replacing nonexistant public symbol")}if(undefined!==Module[name].overloadTable&&undefined!==numArguments){Module[name].overloadTable[numArguments]=value}else{Module[name]=value;Module[name].argCount=numArguments}}function dynCallLegacy(sig,ptr,args){if(args&&args.length){return Module["dynCall_"+sig].apply(null,[ptr].concat(args))}return Module["dynCall_"+sig].call(null,ptr)}function dynCall(sig,ptr,args){if(sig.indexOf("j")!=-1){return dynCallLegacy(sig,ptr,args)}return wasmTable.get(ptr).apply(null,args)}function getDynCaller(sig,ptr){assert(sig.indexOf("j")>=0,"getDynCaller should only be called with i64 sigs");var argCache=[];return function(){argCache.length=arguments.length;for(var i=0;i>2)+i])}return array}function __embind_register_class_constructor(rawClassType,argCount,rawArgTypesAddr,invokerSignature,invoker,rawConstructor){assert(argCount>0);var rawArgTypes=heap32VectorToArray(argCount,rawArgTypesAddr);invoker=embind__requireFunction(invokerSignature,invoker);var args=[rawConstructor];var destructors=[];whenDependentTypesAreResolved([],[rawClassType],function(classType){classType=classType[0];var humanName="constructor "+classType.name;if(undefined===classType.registeredClass.constructor_body){classType.registeredClass.constructor_body=[]}if(undefined!==classType.registeredClass.constructor_body[argCount-1]){throw new BindingError("Cannot register multiple constructors with identical number of parameters ("+(argCount-1)+") for class '"+classType.name+"'! Overload resolution is currently only performed using the parameter count, not actual type info!")}classType.registeredClass.constructor_body[argCount-1]=function unboundTypeHandler(){throwUnboundTypeError("Cannot construct "+classType.name+" due to unbound types",rawArgTypes)};whenDependentTypesAreResolved([],rawArgTypes,function(argTypes){classType.registeredClass.constructor_body[argCount-1]=function constructor_body(){if(arguments.length!==argCount-1){throwBindingError(humanName+" called with "+arguments.length+" arguments, expected "+(argCount-1))}destructors.length=0;args.length=argCount;for(var i=1;i0?", ":"")+argsListWired}invokerFnBody+=(returns?"var rv = ":"")+"invoker(fn"+(argsListWired.length>0?", ":"")+argsListWired+");\n";if(needsDestructorStack){invokerFnBody+="runDestructors(destructors);\n"}else{for(var i=isClassMethodFunc?1:2;i4&&0===--emval_handle_array[handle].refcount){emval_handle_array[handle]=undefined;emval_free_list.push(handle)}}function count_emval_handles(){var count=0;for(var i=5;i>1])};case 2:return function(pointer){var heap=signed?HEAP32:HEAPU32;return this["fromWireType"](heap[pointer>>2])};default:throw new TypeError("Unknown integer type: "+name)}}function __embind_register_enum(rawType,name,size,isSigned){var shift=getShiftFromSize(size);name=readLatin1String(name);function ctor(){}ctor.values={};registerType(rawType,{name:name,constructor:ctor,"fromWireType":function(c){return this.constructor.values[c]},"toWireType":function(destructors,c){return c.value},"argPackAdvance":8,"readValueFromPointer":enumReadValueFromPointer(name,shift,isSigned),destructorFunction:null});exposePublicSymbol(name,ctor)}function requireRegisteredType(rawType,humanName){var impl=registeredTypes[rawType];if(undefined===impl){throwBindingError(humanName+" has unknown type "+getTypeName(rawType))}return impl}function __embind_register_enum_value(rawEnumType,name,enumValue){var enumType=requireRegisteredType(rawEnumType,"enum");name=readLatin1String(name);var Enum=enumType.constructor;var Value=Object.create(enumType.constructor.prototype,{value:{value:enumValue},constructor:{value:createNamedFunction(enumType.name+"_"+name,function(){})}});Enum.values[enumValue]=Value;Enum[name]=Value}function _embind_repr(v){if(v===null){return"null"}var t=typeof v;if(t==="object"||t==="array"||t==="function"){return v.toString()}else{return""+v}}function floatReadValueFromPointer(name,shift){switch(shift){case 2:return function(pointer){return this["fromWireType"](HEAPF32[pointer>>2])};case 3:return function(pointer){return this["fromWireType"](HEAPF64[pointer>>3])};default:throw new TypeError("Unknown float type: "+name)}}function __embind_register_float(rawType,name,size){var shift=getShiftFromSize(size);name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":function(value){return value},"toWireType":function(destructors,value){if(typeof value!=="number"&&typeof value!=="boolean"){throw new TypeError('Cannot convert "'+_embind_repr(value)+'" to '+this.name)}return value},"argPackAdvance":8,"readValueFromPointer":floatReadValueFromPointer(name,shift),destructorFunction:null})}function __embind_register_function(name,argCount,rawArgTypesAddr,signature,rawInvoker,fn){var argTypes=heap32VectorToArray(argCount,rawArgTypesAddr);name=readLatin1String(name);rawInvoker=embind__requireFunction(signature,rawInvoker);exposePublicSymbol(name,function(){throwUnboundTypeError("Cannot call "+name+" due to unbound types",argTypes)},argCount-1);whenDependentTypesAreResolved([],argTypes,function(argTypes){var invokerArgsArray=[argTypes[0],null].concat(argTypes.slice(1));replacePublicSymbol(name,craftInvokerFunction(name,invokerArgsArray,null,rawInvoker,fn),argCount-1);return[]})}function integerReadValueFromPointer(name,shift,signed){switch(shift){case 0:return signed?function readS8FromPointer(pointer){return HEAP8[pointer]}:function readU8FromPointer(pointer){return HEAPU8[pointer]};case 1:return signed?function readS16FromPointer(pointer){return HEAP16[pointer>>1]}:function readU16FromPointer(pointer){return HEAPU16[pointer>>1]};case 2:return signed?function readS32FromPointer(pointer){return HEAP32[pointer>>2]}:function readU32FromPointer(pointer){return HEAPU32[pointer>>2]};default:throw new TypeError("Unknown integer type: "+name)}}function __embind_register_integer(primitiveType,name,size,minRange,maxRange){name=readLatin1String(name);if(maxRange===-1){maxRange=4294967295}var shift=getShiftFromSize(size);var fromWireType=function(value){return value};if(minRange===0){var bitshift=32-8*size;fromWireType=function(value){return value<>>bitshift}}var isUnsignedType=name.indexOf("unsigned")!=-1;registerType(primitiveType,{name:name,"fromWireType":fromWireType,"toWireType":function(destructors,value){if(typeof value!=="number"&&typeof value!=="boolean"){throw new TypeError('Cannot convert "'+_embind_repr(value)+'" to '+this.name)}if(valuemaxRange){throw new TypeError('Passing a number "'+_embind_repr(value)+'" from JS side to C/C++ side to an argument of type "'+name+'", which is outside the valid range ['+minRange+", "+maxRange+"]!")}return isUnsignedType?value>>>0:value|0},"argPackAdvance":8,"readValueFromPointer":integerReadValueFromPointer(name,shift,minRange!==0),destructorFunction:null})}function __embind_register_memory_view(rawType,dataTypeIndex,name){var typeMapping=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array];var TA=typeMapping[dataTypeIndex];function decodeMemoryView(handle){handle=handle>>2;var heap=HEAPU32;var size=heap[handle];var data=heap[handle+1];return new TA(buffer,data,size)}name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":decodeMemoryView,"argPackAdvance":8,"readValueFromPointer":decodeMemoryView},{ignoreDuplicateRegistrations:true})}function __embind_register_std_string(rawType,name){name=readLatin1String(name);var stdStringIsUTF8=name==="std::string";registerType(rawType,{name:name,"fromWireType":function(value){var length=HEAPU32[value>>2];var str;if(stdStringIsUTF8){var decodeStartPtr=value+4;for(var i=0;i<=length;++i){var currentBytePtr=value+4+i;if(i==length||HEAPU8[currentBytePtr]==0){var maxRead=currentBytePtr-decodeStartPtr;var stringSegment=UTF8ToString(decodeStartPtr,maxRead);if(str===undefined){str=stringSegment}else{str+=String.fromCharCode(0);str+=stringSegment}decodeStartPtr=currentBytePtr+1}}}else{var a=new Array(length);for(var i=0;i>2]=length;if(stdStringIsUTF8&&valueIsOfTypeString){stringToUTF8(value,ptr+4,length+1)}else{if(valueIsOfTypeString){for(var i=0;i255){_free(ptr);throwBindingError("String has UTF-16 code units that do not fit in 8 bits")}HEAPU8[ptr+4+i]=charCode}}else{for(var i=0;i>2];var HEAP=getHeap();var str;var decodeStartPtr=value+4;for(var i=0;i<=length;++i){var currentBytePtr=value+4+i*charSize;if(i==length||HEAP[currentBytePtr>>shift]==0){var maxReadBytes=currentBytePtr-decodeStartPtr;var stringSegment=decodeString(decodeStartPtr,maxReadBytes);if(str===undefined){str=stringSegment}else{str+=String.fromCharCode(0);str+=stringSegment}decodeStartPtr=currentBytePtr+charSize}}_free(value);return str},"toWireType":function(destructors,value){if(!(typeof value==="string")){throwBindingError("Cannot pass non-string to C++ string type "+name)}var length=lengthBytesUTF(value);var ptr=_malloc(4+length+charSize);HEAPU32[ptr>>2]=length>>shift;encodeString(value,ptr+4,length+charSize);if(destructors!==null){destructors.push(_free,ptr)}return ptr},"argPackAdvance":8,"readValueFromPointer":simpleReadValueFromPointer,destructorFunction:function(ptr){_free(ptr)}})}function __embind_register_value_object(rawType,name,constructorSignature,rawConstructor,destructorSignature,rawDestructor){structRegistrations[rawType]={name:readLatin1String(name),rawConstructor:embind__requireFunction(constructorSignature,rawConstructor),rawDestructor:embind__requireFunction(destructorSignature,rawDestructor),fields:[]}}function __embind_register_value_object_field(structType,fieldName,getterReturnType,getterSignature,getter,getterContext,setterArgumentType,setterSignature,setter,setterContext){structRegistrations[structType].fields.push({fieldName:readLatin1String(fieldName),getterReturnType:getterReturnType,getter:embind__requireFunction(getterSignature,getter),getterContext:getterContext,setterArgumentType:setterArgumentType,setter:embind__requireFunction(setterSignature,setter),setterContext:setterContext})}function __embind_register_void(rawType,name){name=readLatin1String(name);registerType(rawType,{isVoid:true,name:name,"argPackAdvance":0,"fromWireType":function(){return undefined},"toWireType":function(destructors,o){return undefined}})}function requireHandle(handle){if(!handle){throwBindingError("Cannot use deleted val. handle = "+handle)}return emval_handle_array[handle].value}function __emval_as(handle,returnType,destructorsRef){handle=requireHandle(handle);returnType=requireRegisteredType(returnType,"emval::as");var destructors=[];var rd=__emval_register(destructors);HEAP32[destructorsRef>>2]=rd;return returnType["toWireType"](destructors,handle)}var emval_symbols={};function getStringOrSymbol(address){var symbol=emval_symbols[address];if(symbol===undefined){return readLatin1String(address)}else{return symbol}}var emval_methodCallers=[];function __emval_call_void_method(caller,handle,methodName,args){caller=emval_methodCallers[caller];handle=requireHandle(handle);methodName=getStringOrSymbol(methodName);caller(handle,methodName,null,args)}function emval_get_global(){if(typeof globalThis==="object"){return globalThis}return function(){return Function}()("return this")()}function __emval_get_global(name){if(name===0){return __emval_register(emval_get_global())}else{name=getStringOrSymbol(name);return __emval_register(emval_get_global()[name])}}function __emval_addMethodCaller(caller){var id=emval_methodCallers.length;emval_methodCallers.push(caller);return id}function __emval_lookupTypes(argCount,argTypes){var a=new Array(argCount);for(var i=0;i>2)+i],"parameter "+i)}return a}function __emval_get_method_caller(argCount,argTypes){var types=__emval_lookupTypes(argCount,argTypes);var retType=types[0];var signatureName=retType.name+"_$"+types.slice(1).map(function(t){return t.name}).join("_")+"$";var params=["retType"];var args=[retType];var argsList="";for(var i=0;i4){emval_handle_array[handle].refcount+=1}}function craftEmvalAllocator(argCount){var argsList="";for(var i=0;i>> 2) + "+i+'], "parameter '+i+'");\n'+"var arg"+i+" = argType"+i+".readValueFromPointer(args);\n"+"args += argType"+i+"['argPackAdvance'];\n"}functionBody+="var obj = new constructor("+argsList+");\n"+"return __emval_register(obj);\n"+"}\n";return new Function("requireRegisteredType","Module","__emval_register",functionBody)(requireRegisteredType,Module,__emval_register)}var emval_newers={};function __emval_new(handle,argCount,argTypes,args){handle=requireHandle(handle);var newer=emval_newers[argCount];if(!newer){newer=craftEmvalAllocator(argCount);emval_newers[argCount]=newer}return newer(handle,argTypes,args)}function __emval_new_cstring(v){return __emval_register(getStringOrSymbol(v))}function __emval_run_destructors(handle){var destructors=emval_handle_array[handle].value;runDestructors(destructors);__emval_decref(handle)}function _abort(){abort()}function _longjmp(env,value){_setThrew(env,value||1);throw"longjmp"}function _emscripten_longjmp(a0,a1){return _longjmp(a0,a1)}function _emscripten_memcpy_big(dest,src,num){HEAPU8.copyWithin(dest,src,src+num)}function _emscripten_get_heap_size(){return HEAPU8.length}function emscripten_realloc_buffer(size){try{wasmMemory.grow(size-buffer.byteLength+65535>>>16);updateGlobalBufferAndViews(wasmMemory.buffer);return 1}catch(e){}}function _emscripten_resize_heap(requestedSize){requestedSize=requestedSize>>>0;var oldSize=_emscripten_get_heap_size();var maxHeapSize=2147483648;if(requestedSize>maxHeapSize){return false}var minHeapSize=16777216;for(var cutDown=1;cutDown<=4;cutDown*=2){var overGrownHeapSize=oldSize*(1+.2/cutDown);overGrownHeapSize=Math.min(overGrownHeapSize,requestedSize+100663296);var newSize=Math.min(maxHeapSize,alignUp(Math.max(minHeapSize,requestedSize,overGrownHeapSize),65536));var replacement=emscripten_realloc_buffer(newSize);if(replacement){return true}}return false}function _fd_close(fd){try{var stream=SYSCALLS.getStreamFromFD(fd);FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _fd_read(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStreamFromFD(fd);var num=SYSCALLS.doReadv(stream,iov,iovcnt);HEAP32[pnum>>2]=num;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _fd_seek(fd,offset_low,offset_high,whence,newOffset){try{var stream=SYSCALLS.getStreamFromFD(fd);var HIGH_OFFSET=4294967296;var offset=offset_high*HIGH_OFFSET+(offset_low>>>0);var DOUBLE_LIMIT=9007199254740992;if(offset<=-DOUBLE_LIMIT||offset>=DOUBLE_LIMIT){return-61}FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[newOffset>>2]=tempI64[0],HEAP32[newOffset+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _fd_write(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStreamFromFD(fd);var num=SYSCALLS.doWritev(stream,iov,iovcnt);HEAP32[pnum>>2]=num;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _getTempRet0(){return getTempRet0()|0}function _gettimeofday(ptr){var now=Date.now();HEAP32[ptr>>2]=now/1e3|0;HEAP32[ptr+4>>2]=now%1e3*1e3|0;return 0}function _pthread_join(){return 28}function _setTempRet0($i){setTempRet0($i|0)}function _sysconf(name){switch(name){case 30:return 16384;case 85:var maxHeapSize=2147483648;return maxHeapSize/16384;case 132:case 133:case 12:case 137:case 138:case 15:case 235:case 16:case 17:case 18:case 19:case 20:case 149:case 13:case 10:case 236:case 153:case 9:case 21:case 22:case 159:case 154:case 14:case 77:case 78:case 139:case 80:case 81:case 82:case 68:case 67:case 164:case 11:case 29:case 47:case 48:case 95:case 52:case 51:case 46:case 79:return 200809;case 27:case 246:case 127:case 128:case 23:case 24:case 160:case 161:case 181:case 182:case 242:case 183:case 184:case 243:case 244:case 245:case 165:case 178:case 179:case 49:case 50:case 168:case 169:case 175:case 170:case 171:case 172:case 97:case 76:case 32:case 173:case 35:return-1;case 176:case 177:case 7:case 155:case 8:case 157:case 125:case 126:case 92:case 93:case 129:case 130:case 131:case 94:case 91:return 1;case 74:case 60:case 69:case 70:case 4:return 1024;case 31:case 42:case 72:return 32;case 87:case 26:case 33:return 2147483647;case 34:case 1:return 47839;case 38:case 36:return 99;case 43:case 37:return 2048;case 0:return 2097152;case 3:return 65536;case 28:return 32768;case 44:return 32767;case 75:return 16384;case 39:return 1e3;case 89:return 700;case 71:return 256;case 40:return 255;case 2:return 100;case 180:return 64;case 25:return 20;case 5:return 16;case 6:return 6;case 73:return 4;case 84:{if(typeof navigator==="object")return navigator["hardwareConcurrency"]||1;return 1}}setErrNo(28);return-1}var FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};var readMode=292|73;var writeMode=146;Object.defineProperties(FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}});FS.FSNode=FSNode;FS.staticInit();InternalError=Module["InternalError"]=extendError(Error,"InternalError");embind_init_charCodes();BindingError=Module["BindingError"]=extendError(Error,"BindingError");init_ClassHandle();init_RegisteredPointer();init_embind();UnboundTypeError=Module["UnboundTypeError"]=extendError(Error,"UnboundTypeError");init_emval();function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}__ATINIT__.push({func:function(){___wasm_call_ctors()}});var asmLibraryArg={"K":___cxa_allocate_exception,"J":___cxa_throw,"G":___sys_fcntl64,"R":___sys_ioctl,"S":___sys_open,"x":__embind_finalize_value_object,"U":__embind_register_bool,"A":__embind_register_class,"z":__embind_register_class_constructor,"a":__embind_register_class_function,"e":__embind_register_constant,"T":__embind_register_emval,"q":__embind_register_enum,"c":__embind_register_enum_value,"H":__embind_register_float,"m":__embind_register_function,"n":__embind_register_integer,"k":__embind_register_memory_view,"I":__embind_register_std_string,"B":__embind_register_std_wstring,"y":__embind_register_value_object,"d":__embind_register_value_object_field,"V":__embind_register_void,"p":__emval_as,"r":__emval_call_void_method,"b":__emval_decref,"D":__emval_get_global,"s":__emval_get_method_caller,"u":__emval_get_module_property,"f":__emval_get_property,"j":__emval_incref,"t":__emval_new,"g":__emval_new_cstring,"o":__emval_run_destructors,"h":_abort,"w":_emscripten_longjmp,"M":_emscripten_memcpy_big,"N":_emscripten_resize_heap,"F":_fd_close,"Q":_fd_read,"L":_fd_seek,"E":_fd_write,"l":_getTempRet0,"C":_gettimeofday,"X":invoke_ii,"v":invoke_vi,"W":invoke_vii,"Y":invoke_viii,"P":_pthread_join,"i":_setTempRet0,"O":_sysconf};var asm=createWasm();var ___wasm_call_ctors=Module["___wasm_call_ctors"]=function(){return(___wasm_call_ctors=Module["___wasm_call_ctors"]=Module["asm"]["$"]).apply(null,arguments)};var _free=Module["_free"]=function(){return(_free=Module["_free"]=Module["asm"]["aa"]).apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return(_malloc=Module["_malloc"]=Module["asm"]["ba"]).apply(null,arguments)};var ___getTypeName=Module["___getTypeName"]=function(){return(___getTypeName=Module["___getTypeName"]=Module["asm"]["ca"]).apply(null,arguments)};var ___embind_register_native_and_builtin_types=Module["___embind_register_native_and_builtin_types"]=function(){return(___embind_register_native_and_builtin_types=Module["___embind_register_native_and_builtin_types"]=Module["asm"]["da"]).apply(null,arguments)};var ___errno_location=Module["___errno_location"]=function(){return(___errno_location=Module["___errno_location"]=Module["asm"]["ea"]).apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return(stackSave=Module["stackSave"]=Module["asm"]["fa"]).apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return(stackRestore=Module["stackRestore"]=Module["asm"]["ga"]).apply(null,arguments)};var _setThrew=Module["_setThrew"]=function(){return(_setThrew=Module["_setThrew"]=Module["asm"]["ha"]).apply(null,arguments)};var dynCall_jiiii=Module["dynCall_jiiii"]=function(){return(dynCall_jiiii=Module["dynCall_jiiii"]=Module["asm"]["ia"]).apply(null,arguments)};var dynCall_jiji=Module["dynCall_jiji"]=function(){return(dynCall_jiji=Module["dynCall_jiji"]=Module["asm"]["ja"]).apply(null,arguments)};function invoke_vi(index,a1){var sp=stackSave();try{wasmTable.get(index)(a1)}catch(e){stackRestore(sp);if(e!==e+0&&e!=="longjmp")throw e;_setThrew(1,0)}}function invoke_viii(index,a1,a2,a3){var sp=stackSave();try{wasmTable.get(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(e!==e+0&&e!=="longjmp")throw e;_setThrew(1,0)}}function invoke_ii(index,a1){var sp=stackSave();try{return wasmTable.get(index)(a1)}catch(e){stackRestore(sp);if(e!==e+0&&e!=="longjmp")throw e;_setThrew(1,0)}}function invoke_vii(index,a1,a2){var sp=stackSave();try{wasmTable.get(index)(a1,a2)}catch(e){stackRestore(sp);if(e!==e+0&&e!=="longjmp")throw e;_setThrew(1,0)}}var calledRun;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function run(args){args=args||arguments_;if(runDependencies>0){return}preRun();if(runDependencies>0)return;function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();preMain();readyPromiseResolve(Module);if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}noExitRuntime=true;run(); +var Module=typeof BASIS!=="undefined"?BASIS:{};var readyPromiseResolve,readyPromiseReject;Module["ready"]=new Promise(function(resolve,reject){readyPromiseResolve=resolve;readyPromiseReject=reject});var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}var arguments_=[];var thisProgram="./this.program";var quit_=function(status,toThrow){throw toThrow};var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof process.versions==="object"&&typeof process.versions.node==="string";ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;var nodeFS;var nodePath;if(ENVIRONMENT_IS_NODE){if(ENVIRONMENT_IS_WORKER){scriptDirectory=require("path").dirname(scriptDirectory)+"/"}else{scriptDirectory=__dirname+"/"}read_=function shell_read(filename,binary){if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);return nodeFS["readFileSync"](filename,binary?null:"utf8")};readBinary=function readBinary(filename){var ret=read_(filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){thisProgram=process["argv"][1].replace(/\\/g,"/")}arguments_=process["argv"].slice(2);process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);quit_=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){read_=function shell_read(f){return read(f)}}readBinary=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){arguments_=scriptArgs}else if(typeof arguments!="undefined"){arguments_=arguments}if(typeof quit==="function"){quit_=function(status){quit(status)}}if(typeof print!=="undefined"){if(typeof console==="undefined")console={};console.log=print;console.warn=console.error=typeof printErr!=="undefined"?printErr:print}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(_scriptDir){scriptDirectory=_scriptDir}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}{read_=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){readBinary=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}setWindowTitle=function(title){document.title=title}}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.warn.bind(console);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["quit"])quit_=Module["quit"];var tempRet0=0;var setTempRet0=function(value){tempRet0=value};var getTempRet0=function(){return tempRet0};var wasmBinary;if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];var noExitRuntime;if(Module["noExitRuntime"])noExitRuntime=Module["noExitRuntime"];if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable=new WebAssembly.Table({"initial":333,"maximum":333+0,"element":"anyfunc"});var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}var UTF8Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(heap,idx,maxBytesToRead){var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heap[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heap.subarray&&UTF8Decoder){return UTF8Decoder.decode(heap.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,heap,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function UTF16ToString(ptr,maxBytesToRead){var endPtr=ptr;var idx=endPtr>>1;var maxIdx=idx+maxBytesToRead/2;while(!(idx>=maxIdx)&&HEAPU16[idx])++idx;endPtr=idx<<1;if(endPtr-ptr>32&&UTF16Decoder){return UTF16Decoder.decode(HEAPU8.subarray(ptr,endPtr))}else{var i=0;var str="";while(1){var codeUnit=HEAP16[ptr+i*2>>1];if(codeUnit==0||i==maxBytesToRead/2)return str;++i;str+=String.fromCharCode(codeUnit)}}}function stringToUTF16(str,outPtr,maxBytesToWrite){if(maxBytesToWrite===undefined){maxBytesToWrite=2147483647}if(maxBytesToWrite<2)return 0;maxBytesToWrite-=2;var startPtr=outPtr;var numCharsToWrite=maxBytesToWrite>1]=codeUnit;outPtr+=2}HEAP16[outPtr>>1]=0;return outPtr-startPtr}function lengthBytesUTF16(str){return str.length*2}function UTF32ToString(ptr,maxBytesToRead){var i=0;var str="";while(!(i>=maxBytesToRead/4)){var utf32=HEAP32[ptr+i*4>>2];if(utf32==0)break;++i;if(utf32>=65536){var ch=utf32-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}else{str+=String.fromCharCode(utf32)}}return str}function stringToUTF32(str,outPtr,maxBytesToWrite){if(maxBytesToWrite===undefined){maxBytesToWrite=2147483647}if(maxBytesToWrite<4)return 0;var startPtr=outPtr;var endPtr=startPtr+maxBytesToWrite-4;for(var i=0;i=55296&&codeUnit<=57343){var trailSurrogate=str.charCodeAt(++i);codeUnit=65536+((codeUnit&1023)<<10)|trailSurrogate&1023}HEAP32[outPtr>>2]=codeUnit;outPtr+=4;if(outPtr+4>endPtr)break}HEAP32[outPtr>>2]=0;return outPtr-startPtr}function lengthBytesUTF32(str){var len=0;for(var i=0;i=55296&&codeUnit<=57343)++i;len+=4}return len}var WASM_PAGE_SIZE=65536;function alignUp(x,multiple){if(x%multiple>0){x+=multiple-x%multiple}return x}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferAndViews(buf){buffer=buf;Module["HEAP8"]=HEAP8=new Int8Array(buf);Module["HEAP16"]=HEAP16=new Int16Array(buf);Module["HEAP32"]=HEAP32=new Int32Array(buf);Module["HEAPU8"]=HEAPU8=new Uint8Array(buf);Module["HEAPU16"]=HEAPU16=new Uint16Array(buf);Module["HEAPU32"]=HEAPU32=new Uint32Array(buf);Module["HEAPF32"]=HEAPF32=new Float32Array(buf);Module["HEAPF64"]=HEAPF64=new Float64Array(buf)}var DYNAMIC_BASE=5650448,DYNAMICTOP_PTR=407408;var INITIAL_INITIAL_MEMORY=Module["INITIAL_MEMORY"]||299958272;if(Module["wasmMemory"]){wasmMemory=Module["wasmMemory"]}else{wasmMemory=new WebAssembly.Memory({"initial":INITIAL_INITIAL_MEMORY/WASM_PAGE_SIZE,"maximum":2147483648/WASM_PAGE_SIZE})}if(wasmMemory){buffer=wasmMemory.buffer}INITIAL_INITIAL_MEMORY=buffer.byteLength;updateGlobalBufferAndViews(buffer);HEAP32[DYNAMICTOP_PTR>>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback(Module);continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}what+="";out(what);err(what);ABORT=true;EXITSTATUS=1;what="abort("+what+"). Build with -s ASSERTIONS=1 for more info.";throw new WebAssembly.RuntimeError(what)}function hasPrefix(str,prefix){return String.prototype.startsWith?str.startsWith(prefix):str.indexOf(prefix)===0}var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return hasPrefix(filename,dataURIPrefix)}var fileURIPrefix="file://";function isFileURI(filename){return hasPrefix(filename,fileURIPrefix)}var wasmBinaryFile="basis_encoder.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"&&!isFileURI(wasmBinaryFile)){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(){var info={"a":asmLibraryArg};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){return getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}function instantiateAsync(){if(!wasmBinary&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&!isFileURI(wasmBinaryFile)&&typeof fetch==="function"){fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){var result=WebAssembly.instantiateStreaming(response,info);return result.then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})})}else{return instantiateArrayBuffer(receiveInstantiatedSource)}}if(Module["instantiateWasm"]){try{var exports=Module["instantiateWasm"](info,receiveInstance);return exports}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}instantiateAsync();return{}}var tempDouble;var tempI64;__ATINIT__.push({func:function(){___wasm_call_ctors()}});function demangle(func){return func}function demangleAll(text){var regex=/\b_Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}function ___cxa_allocate_exception(size){return _malloc(size)}var ___exception_infos={};var ___exception_last=0;function __ZSt18uncaught_exceptionv(){return __ZSt18uncaught_exceptionv.uncaught_exceptions>0}function ___cxa_throw(ptr,type,destructor){___exception_infos[ptr]={ptr:ptr,adjusted:[ptr],type:type,destructor:destructor,refcount:0,caught:false,rethrown:false};___exception_last=ptr;if(!("uncaught_exception"in __ZSt18uncaught_exceptionv)){__ZSt18uncaught_exceptionv.uncaught_exceptions=1}else{__ZSt18uncaught_exceptionv.uncaught_exceptions++}throw ptr}function setErrNo(value){HEAP32[___errno_location()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)}};var PATH_FS={resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH_FS.resolve(from).substr(1);to=PATH_FS.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(63)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node},getFileDataAsRegularArray:function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity>>0);if(prevCapacity!=0)newCapacity=Math.max(newCapacity,256);var oldContents=node.contents;node.contents=new Uint8Array(newCapacity);if(node.usedBytes>0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(newSize);if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+length8){throw new FS.ErrnoError(32)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(32)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var errCode=FS.mayLookup(parent);if(errCode){throw new FS.ErrnoError(errCode,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 2}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 2}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 2}return 0},mayLookup:function(dir){var errCode=FS.nodePermissions(dir,"x");if(errCode)return errCode;if(!dir.node_ops.lookup)return 2;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 20}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var errCode=FS.nodePermissions(dir,"wx");if(errCode){return errCode}if(isdir){if(!FS.isDir(node.mode)){return 54}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 10}}else{if(FS.isDir(node.mode)){return 31}}return 0},mayOpen:function(node,flags){if(!node){return 44}if(FS.isLink(node.mode)){return 32}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 31}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(33)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}}}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(70)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){err("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(errCode){FS.syncFSRequests--;return callback(errCode)}function done(errCode){if(errCode){if(!done.errored){done.errored=true;return doCallback(errCode)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(10)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(28)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(28)}var errCode=FS.mayCreate(parent,name);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(63)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;out("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(29)}return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(29)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags,offset){var buffer=HEAPU8.slice(addr,addr+len);FS.msync(stream,buffer,offset,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-28}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-28;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-28}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;if(!node){return-44}var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-2}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:undefined,get:function(){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(ptr){var ret=UTF8ToString(ptr);return ret},getStreamFromFD:function(fd){var stream=FS.getStream(fd);if(!stream)throw new FS.ErrnoError(8);return stream},get64:function(low,high){return low}};function ___sys_fcntl64(fd,cmd,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-28}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-28;case 9:setErrNo(28);return-1;default:{return-28}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___sys_ioctl(fd,op,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(op){case 21509:case 21505:{if(!stream.tty)return-59;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-59;return 0}case 21519:{if(!stream.tty)return-59;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-59;return-28}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-59;return 0}case 21524:{if(!stream.tty)return-59;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___sys_open(path,flags,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(path);var mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}var structRegistrations={};function runDestructors(destructors){while(destructors.length){var ptr=destructors.pop();var del=destructors.pop();del(ptr)}}function simpleReadValueFromPointer(pointer){return this["fromWireType"](HEAPU32[pointer>>2])}var awaitingDependencies={};var registeredTypes={};var typeDependencies={};var char_0=48;var char_9=57;function makeLegalFunctionName(name){if(undefined===name){return"_unknown"}name=name.replace(/[^a-zA-Z0-9_]/g,"$");var f=name.charCodeAt(0);if(f>=char_0&&f<=char_9){return"_"+name}else{return name}}function createNamedFunction(name,body){name=makeLegalFunctionName(name);return new Function("body","return function "+name+"() {\n"+' "use strict";'+" return body.apply(this, arguments);\n"+"};\n")(body)}function extendError(baseErrorType,errorName){var errorClass=createNamedFunction(errorName,function(message){this.name=errorName;this.message=message;var stack=new Error(message).stack;if(stack!==undefined){this.stack=this.toString()+"\n"+stack.replace(/^Error(:[^\n]*)?\n/,"")}});errorClass.prototype=Object.create(baseErrorType.prototype);errorClass.prototype.constructor=errorClass;errorClass.prototype.toString=function(){if(this.message===undefined){return this.name}else{return this.name+": "+this.message}};return errorClass}var InternalError=undefined;function throwInternalError(message){throw new InternalError(message)}function whenDependentTypesAreResolved(myTypes,dependentTypes,getTypeConverters){myTypes.forEach(function(type){typeDependencies[type]=dependentTypes});function onComplete(typeConverters){var myTypeConverters=getTypeConverters(typeConverters);if(myTypeConverters.length!==myTypes.length){throwInternalError("Mismatched type converter count")}for(var i=0;i>shift])},destructorFunction:null})}function ClassHandle_isAliasOf(other){if(!(this instanceof ClassHandle)){return false}if(!(other instanceof ClassHandle)){return false}var leftClass=this.$$.ptrType.registeredClass;var left=this.$$.ptr;var rightClass=other.$$.ptrType.registeredClass;var right=other.$$.ptr;while(leftClass.baseClass){left=leftClass.upcast(left);leftClass=leftClass.baseClass}while(rightClass.baseClass){right=rightClass.upcast(right);rightClass=rightClass.baseClass}return leftClass===rightClass&&left===right}function shallowCopyInternalPointer(o){return{count:o.count,deleteScheduled:o.deleteScheduled,preservePointerOnDelete:o.preservePointerOnDelete,ptr:o.ptr,ptrType:o.ptrType,smartPtr:o.smartPtr,smartPtrType:o.smartPtrType}}function throwInstanceAlreadyDeleted(obj){function getInstanceTypeName(handle){return handle.$$.ptrType.registeredClass.name}throwBindingError(getInstanceTypeName(obj)+" instance already deleted")}var finalizationGroup=false;function detachFinalizer(handle){}function runDestructor($$){if($$.smartPtr){$$.smartPtrType.rawDestructor($$.smartPtr)}else{$$.ptrType.registeredClass.rawDestructor($$.ptr)}}function releaseClassHandle($$){$$.count.value-=1;var toDelete=0===$$.count.value;if(toDelete){runDestructor($$)}}function attachFinalizer(handle){if("undefined"===typeof FinalizationGroup){attachFinalizer=function(handle){return handle};return handle}finalizationGroup=new FinalizationGroup(function(iter){for(var result=iter.next();!result.done;result=iter.next()){var $$=result.value;if(!$$.ptr){console.warn("object already deleted: "+$$.ptr)}else{releaseClassHandle($$)}}});attachFinalizer=function(handle){finalizationGroup.register(handle,handle.$$,handle.$$);return handle};detachFinalizer=function(handle){finalizationGroup.unregister(handle.$$)};return attachFinalizer(handle)}function ClassHandle_clone(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.preservePointerOnDelete){this.$$.count.value+=1;return this}else{var clone=attachFinalizer(Object.create(Object.getPrototypeOf(this),{$$:{value:shallowCopyInternalPointer(this.$$)}}));clone.$$.count.value+=1;clone.$$.deleteScheduled=false;return clone}}function ClassHandle_delete(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError("Object already scheduled for deletion")}detachFinalizer(this);releaseClassHandle(this.$$);if(!this.$$.preservePointerOnDelete){this.$$.smartPtr=undefined;this.$$.ptr=undefined}}function ClassHandle_isDeleted(){return!this.$$.ptr}var delayFunction=undefined;var deletionQueue=[];function flushPendingDeletes(){while(deletionQueue.length){var obj=deletionQueue.pop();obj.$$.deleteScheduled=false;obj["delete"]()}}function ClassHandle_deleteLater(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError("Object already scheduled for deletion")}deletionQueue.push(this);if(deletionQueue.length===1&&delayFunction){delayFunction(flushPendingDeletes)}this.$$.deleteScheduled=true;return this}function init_ClassHandle(){ClassHandle.prototype["isAliasOf"]=ClassHandle_isAliasOf;ClassHandle.prototype["clone"]=ClassHandle_clone;ClassHandle.prototype["delete"]=ClassHandle_delete;ClassHandle.prototype["isDeleted"]=ClassHandle_isDeleted;ClassHandle.prototype["deleteLater"]=ClassHandle_deleteLater}function ClassHandle(){}var registeredPointers={};function ensureOverloadTable(proto,methodName,humanName){if(undefined===proto[methodName].overloadTable){var prevFunc=proto[methodName];proto[methodName]=function(){if(!proto[methodName].overloadTable.hasOwnProperty(arguments.length)){throwBindingError("Function '"+humanName+"' called with an invalid number of arguments ("+arguments.length+") - expects one of ("+proto[methodName].overloadTable+")!")}return proto[methodName].overloadTable[arguments.length].apply(this,arguments)};proto[methodName].overloadTable=[];proto[methodName].overloadTable[prevFunc.argCount]=prevFunc}}function exposePublicSymbol(name,value,numArguments){if(Module.hasOwnProperty(name)){if(undefined===numArguments||undefined!==Module[name].overloadTable&&undefined!==Module[name].overloadTable[numArguments]){throwBindingError("Cannot register public name '"+name+"' twice")}ensureOverloadTable(Module,name,name);if(Module.hasOwnProperty(numArguments)){throwBindingError("Cannot register multiple overloads of a function with the same number of arguments ("+numArguments+")!")}Module[name].overloadTable[numArguments]=value}else{Module[name]=value;if(undefined!==numArguments){Module[name].numArguments=numArguments}}}function RegisteredClass(name,constructor,instancePrototype,rawDestructor,baseClass,getActualType,upcast,downcast){this.name=name;this.constructor=constructor;this.instancePrototype=instancePrototype;this.rawDestructor=rawDestructor;this.baseClass=baseClass;this.getActualType=getActualType;this.upcast=upcast;this.downcast=downcast;this.pureVirtualFunctions=[]}function upcastPointer(ptr,ptrClass,desiredClass){while(ptrClass!==desiredClass){if(!ptrClass.upcast){throwBindingError("Expected null or instance of "+desiredClass.name+", got an instance of "+ptrClass.name)}ptr=ptrClass.upcast(ptr);ptrClass=ptrClass.baseClass}return ptr}function constNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}return 0}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function genericPointerToWireType(destructors,handle){var ptr;if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}if(this.isSmartPointer){ptr=this.rawConstructor();if(destructors!==null){destructors.push(this.rawDestructor,ptr)}return ptr}else{return 0}}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}if(!this.isConst&&handle.$$.ptrType.isConst){throwBindingError("Cannot convert argument of type "+(handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name)+" to parameter type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);if(this.isSmartPointer){if(undefined===handle.$$.smartPtr){throwBindingError("Passing raw pointer to smart pointer is illegal")}switch(this.sharingPolicy){case 0:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{throwBindingError("Cannot convert argument of type "+(handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name)+" to parameter type "+this.name)}break;case 1:ptr=handle.$$.smartPtr;break;case 2:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{var clonedHandle=handle["clone"]();ptr=this.rawShare(ptr,__emval_register(function(){clonedHandle["delete"]()}));if(destructors!==null){destructors.push(this.rawDestructor,ptr)}}break;default:throwBindingError("Unsupporting sharing policy")}}return ptr}function nonConstNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}return 0}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}if(handle.$$.ptrType.isConst){throwBindingError("Cannot convert argument of type "+handle.$$.ptrType.name+" to parameter type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function RegisteredPointer_getPointee(ptr){if(this.rawGetPointee){ptr=this.rawGetPointee(ptr)}return ptr}function RegisteredPointer_destructor(ptr){if(this.rawDestructor){this.rawDestructor(ptr)}}function RegisteredPointer_deleteObject(handle){if(handle!==null){handle["delete"]()}}function downcastPointer(ptr,ptrClass,desiredClass){if(ptrClass===desiredClass){return ptr}if(undefined===desiredClass.baseClass){return null}var rv=downcastPointer(ptr,ptrClass,desiredClass.baseClass);if(rv===null){return null}return desiredClass.downcast(rv)}function getInheritedInstanceCount(){return Object.keys(registeredInstances).length}function getLiveInheritedInstances(){var rv=[];for(var k in registeredInstances){if(registeredInstances.hasOwnProperty(k)){rv.push(registeredInstances[k])}}return rv}function setDelayFunction(fn){delayFunction=fn;if(deletionQueue.length&&delayFunction){delayFunction(flushPendingDeletes)}}function init_embind(){Module["getInheritedInstanceCount"]=getInheritedInstanceCount;Module["getLiveInheritedInstances"]=getLiveInheritedInstances;Module["flushPendingDeletes"]=flushPendingDeletes;Module["setDelayFunction"]=setDelayFunction}var registeredInstances={};function getBasestPointer(class_,ptr){if(ptr===undefined){throwBindingError("ptr should not be undefined")}while(class_.baseClass){ptr=class_.upcast(ptr);class_=class_.baseClass}return ptr}function getInheritedInstance(class_,ptr){ptr=getBasestPointer(class_,ptr);return registeredInstances[ptr]}function makeClassHandle(prototype,record){if(!record.ptrType||!record.ptr){throwInternalError("makeClassHandle requires ptr and ptrType")}var hasSmartPtrType=!!record.smartPtrType;var hasSmartPtr=!!record.smartPtr;if(hasSmartPtrType!==hasSmartPtr){throwInternalError("Both smartPtrType and smartPtr must be specified")}record.count={value:1};return attachFinalizer(Object.create(prototype,{$$:{value:record}}))}function RegisteredPointer_fromWireType(ptr){var rawPointer=this.getPointee(ptr);if(!rawPointer){this.destructor(ptr);return null}var registeredInstance=getInheritedInstance(this.registeredClass,rawPointer);if(undefined!==registeredInstance){if(0===registeredInstance.$$.count.value){registeredInstance.$$.ptr=rawPointer;registeredInstance.$$.smartPtr=ptr;return registeredInstance["clone"]()}else{var rv=registeredInstance["clone"]();this.destructor(ptr);return rv}}function makeDefaultHandle(){if(this.isSmartPointer){return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this.pointeeType,ptr:rawPointer,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this,ptr:ptr})}}var actualType=this.registeredClass.getActualType(rawPointer);var registeredPointerRecord=registeredPointers[actualType];if(!registeredPointerRecord){return makeDefaultHandle.call(this)}var toType;if(this.isConst){toType=registeredPointerRecord.constPointerType}else{toType=registeredPointerRecord.pointerType}var dp=downcastPointer(rawPointer,this.registeredClass,toType.registeredClass);if(dp===null){return makeDefaultHandle.call(this)}if(this.isSmartPointer){return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp})}}function init_RegisteredPointer(){RegisteredPointer.prototype.getPointee=RegisteredPointer_getPointee;RegisteredPointer.prototype.destructor=RegisteredPointer_destructor;RegisteredPointer.prototype["argPackAdvance"]=8;RegisteredPointer.prototype["readValueFromPointer"]=simpleReadValueFromPointer;RegisteredPointer.prototype["deleteObject"]=RegisteredPointer_deleteObject;RegisteredPointer.prototype["fromWireType"]=RegisteredPointer_fromWireType}function RegisteredPointer(name,registeredClass,isReference,isConst,isSmartPointer,pointeeType,sharingPolicy,rawGetPointee,rawConstructor,rawShare,rawDestructor){this.name=name;this.registeredClass=registeredClass;this.isReference=isReference;this.isConst=isConst;this.isSmartPointer=isSmartPointer;this.pointeeType=pointeeType;this.sharingPolicy=sharingPolicy;this.rawGetPointee=rawGetPointee;this.rawConstructor=rawConstructor;this.rawShare=rawShare;this.rawDestructor=rawDestructor;if(!isSmartPointer&®isteredClass.baseClass===undefined){if(isConst){this["toWireType"]=constNoSmartPtrRawPointerToWireType;this.destructorFunction=null}else{this["toWireType"]=nonConstNoSmartPtrRawPointerToWireType;this.destructorFunction=null}}else{this["toWireType"]=genericPointerToWireType}}function replacePublicSymbol(name,value,numArguments){if(!Module.hasOwnProperty(name)){throwInternalError("Replacing nonexistant public symbol")}if(undefined!==Module[name].overloadTable&&undefined!==numArguments){Module[name].overloadTable[numArguments]=value}else{Module[name]=value;Module[name].argCount=numArguments}}function embind__requireFunction(signature,rawFunction){signature=readLatin1String(signature);function makeDynCaller(dynCall){var args=[];for(var i=1;i>2)+i])}return array}function __embind_register_class_constructor(rawClassType,argCount,rawArgTypesAddr,invokerSignature,invoker,rawConstructor){assert(argCount>0);var rawArgTypes=heap32VectorToArray(argCount,rawArgTypesAddr);invoker=embind__requireFunction(invokerSignature,invoker);var args=[rawConstructor];var destructors=[];whenDependentTypesAreResolved([],[rawClassType],function(classType){classType=classType[0];var humanName="constructor "+classType.name;if(undefined===classType.registeredClass.constructor_body){classType.registeredClass.constructor_body=[]}if(undefined!==classType.registeredClass.constructor_body[argCount-1]){throw new BindingError("Cannot register multiple constructors with identical number of parameters ("+(argCount-1)+") for class '"+classType.name+"'! Overload resolution is currently only performed using the parameter count, not actual type info!")}classType.registeredClass.constructor_body[argCount-1]=function unboundTypeHandler(){throwUnboundTypeError("Cannot construct "+classType.name+" due to unbound types",rawArgTypes)};whenDependentTypesAreResolved([],rawArgTypes,function(argTypes){classType.registeredClass.constructor_body[argCount-1]=function constructor_body(){if(arguments.length!==argCount-1){throwBindingError(humanName+" called with "+arguments.length+" arguments, expected "+(argCount-1))}destructors.length=0;args.length=argCount;for(var i=1;i0?", ":"")+argsListWired}invokerFnBody+=(returns?"var rv = ":"")+"invoker(fn"+(argsListWired.length>0?", ":"")+argsListWired+");\n";if(needsDestructorStack){invokerFnBody+="runDestructors(destructors);\n"}else{for(var i=isClassMethodFunc?1:2;i4&&0===--emval_handle_array[handle].refcount){emval_handle_array[handle]=undefined;emval_free_list.push(handle)}}function count_emval_handles(){var count=0;for(var i=5;i>1])};case 2:return function(pointer){var heap=signed?HEAP32:HEAPU32;return this["fromWireType"](heap[pointer>>2])};default:throw new TypeError("Unknown integer type: "+name)}}function __embind_register_enum(rawType,name,size,isSigned){var shift=getShiftFromSize(size);name=readLatin1String(name);function ctor(){}ctor.values={};registerType(rawType,{name:name,constructor:ctor,"fromWireType":function(c){return this.constructor.values[c]},"toWireType":function(destructors,c){return c.value},"argPackAdvance":8,"readValueFromPointer":enumReadValueFromPointer(name,shift,isSigned),destructorFunction:null});exposePublicSymbol(name,ctor)}function requireRegisteredType(rawType,humanName){var impl=registeredTypes[rawType];if(undefined===impl){throwBindingError(humanName+" has unknown type "+getTypeName(rawType))}return impl}function __embind_register_enum_value(rawEnumType,name,enumValue){var enumType=requireRegisteredType(rawEnumType,"enum");name=readLatin1String(name);var Enum=enumType.constructor;var Value=Object.create(enumType.constructor.prototype,{value:{value:enumValue},constructor:{value:createNamedFunction(enumType.name+"_"+name,function(){})}});Enum.values[enumValue]=Value;Enum[name]=Value}function _embind_repr(v){if(v===null){return"null"}var t=typeof v;if(t==="object"||t==="array"||t==="function"){return v.toString()}else{return""+v}}function floatReadValueFromPointer(name,shift){switch(shift){case 2:return function(pointer){return this["fromWireType"](HEAPF32[pointer>>2])};case 3:return function(pointer){return this["fromWireType"](HEAPF64[pointer>>3])};default:throw new TypeError("Unknown float type: "+name)}}function __embind_register_float(rawType,name,size){var shift=getShiftFromSize(size);name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":function(value){return value},"toWireType":function(destructors,value){if(typeof value!=="number"&&typeof value!=="boolean"){throw new TypeError('Cannot convert "'+_embind_repr(value)+'" to '+this.name)}return value},"argPackAdvance":8,"readValueFromPointer":floatReadValueFromPointer(name,shift),destructorFunction:null})}function __embind_register_function(name,argCount,rawArgTypesAddr,signature,rawInvoker,fn){var argTypes=heap32VectorToArray(argCount,rawArgTypesAddr);name=readLatin1String(name);rawInvoker=embind__requireFunction(signature,rawInvoker);exposePublicSymbol(name,function(){throwUnboundTypeError("Cannot call "+name+" due to unbound types",argTypes)},argCount-1);whenDependentTypesAreResolved([],argTypes,function(argTypes){var invokerArgsArray=[argTypes[0],null].concat(argTypes.slice(1));replacePublicSymbol(name,craftInvokerFunction(name,invokerArgsArray,null,rawInvoker,fn),argCount-1);return[]})}function integerReadValueFromPointer(name,shift,signed){switch(shift){case 0:return signed?function readS8FromPointer(pointer){return HEAP8[pointer]}:function readU8FromPointer(pointer){return HEAPU8[pointer]};case 1:return signed?function readS16FromPointer(pointer){return HEAP16[pointer>>1]}:function readU16FromPointer(pointer){return HEAPU16[pointer>>1]};case 2:return signed?function readS32FromPointer(pointer){return HEAP32[pointer>>2]}:function readU32FromPointer(pointer){return HEAPU32[pointer>>2]};default:throw new TypeError("Unknown integer type: "+name)}}function __embind_register_integer(primitiveType,name,size,minRange,maxRange){name=readLatin1String(name);if(maxRange===-1){maxRange=4294967295}var shift=getShiftFromSize(size);var fromWireType=function(value){return value};if(minRange===0){var bitshift=32-8*size;fromWireType=function(value){return value<>>bitshift}}var isUnsignedType=name.indexOf("unsigned")!=-1;registerType(primitiveType,{name:name,"fromWireType":fromWireType,"toWireType":function(destructors,value){if(typeof value!=="number"&&typeof value!=="boolean"){throw new TypeError('Cannot convert "'+_embind_repr(value)+'" to '+this.name)}if(valuemaxRange){throw new TypeError('Passing a number "'+_embind_repr(value)+'" from JS side to C/C++ side to an argument of type "'+name+'", which is outside the valid range ['+minRange+", "+maxRange+"]!")}return isUnsignedType?value>>>0:value|0},"argPackAdvance":8,"readValueFromPointer":integerReadValueFromPointer(name,shift,minRange!==0),destructorFunction:null})}function __embind_register_memory_view(rawType,dataTypeIndex,name){var typeMapping=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array];var TA=typeMapping[dataTypeIndex];function decodeMemoryView(handle){handle=handle>>2;var heap=HEAPU32;var size=heap[handle];var data=heap[handle+1];return new TA(buffer,data,size)}name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":decodeMemoryView,"argPackAdvance":8,"readValueFromPointer":decodeMemoryView},{ignoreDuplicateRegistrations:true})}function __embind_register_std_string(rawType,name){name=readLatin1String(name);var stdStringIsUTF8=name==="std::string";registerType(rawType,{name:name,"fromWireType":function(value){var length=HEAPU32[value>>2];var str;if(stdStringIsUTF8){var decodeStartPtr=value+4;for(var i=0;i<=length;++i){var currentBytePtr=value+4+i;if(HEAPU8[currentBytePtr]==0||i==length){var maxRead=currentBytePtr-decodeStartPtr;var stringSegment=UTF8ToString(decodeStartPtr,maxRead);if(str===undefined){str=stringSegment}else{str+=String.fromCharCode(0);str+=stringSegment}decodeStartPtr=currentBytePtr+1}}}else{var a=new Array(length);for(var i=0;i>2]=length;if(stdStringIsUTF8&&valueIsOfTypeString){stringToUTF8(value,ptr+4,length+1)}else{if(valueIsOfTypeString){for(var i=0;i255){_free(ptr);throwBindingError("String has UTF-16 code units that do not fit in 8 bits")}HEAPU8[ptr+4+i]=charCode}}else{for(var i=0;i>2];var HEAP=getHeap();var str;var decodeStartPtr=value+4;for(var i=0;i<=length;++i){var currentBytePtr=value+4+i*charSize;if(HEAP[currentBytePtr>>shift]==0||i==length){var maxReadBytes=currentBytePtr-decodeStartPtr;var stringSegment=decodeString(decodeStartPtr,maxReadBytes);if(str===undefined){str=stringSegment}else{str+=String.fromCharCode(0);str+=stringSegment}decodeStartPtr=currentBytePtr+charSize}}_free(value);return str},"toWireType":function(destructors,value){if(!(typeof value==="string")){throwBindingError("Cannot pass non-string to C++ string type "+name)}var length=lengthBytesUTF(value);var ptr=_malloc(4+length+charSize);HEAPU32[ptr>>2]=length>>shift;encodeString(value,ptr+4,length+charSize);if(destructors!==null){destructors.push(_free,ptr)}return ptr},"argPackAdvance":8,"readValueFromPointer":simpleReadValueFromPointer,destructorFunction:function(ptr){_free(ptr)}})}function __embind_register_value_object(rawType,name,constructorSignature,rawConstructor,destructorSignature,rawDestructor){structRegistrations[rawType]={name:readLatin1String(name),rawConstructor:embind__requireFunction(constructorSignature,rawConstructor),rawDestructor:embind__requireFunction(destructorSignature,rawDestructor),fields:[]}}function __embind_register_value_object_field(structType,fieldName,getterReturnType,getterSignature,getter,getterContext,setterArgumentType,setterSignature,setter,setterContext){structRegistrations[structType].fields.push({fieldName:readLatin1String(fieldName),getterReturnType:getterReturnType,getter:embind__requireFunction(getterSignature,getter),getterContext:getterContext,setterArgumentType:setterArgumentType,setter:embind__requireFunction(setterSignature,setter),setterContext:setterContext})}function __embind_register_void(rawType,name){name=readLatin1String(name);registerType(rawType,{isVoid:true,name:name,"argPackAdvance":0,"fromWireType":function(){return undefined},"toWireType":function(destructors,o){return undefined}})}function requireHandle(handle){if(!handle){throwBindingError("Cannot use deleted val. handle = "+handle)}return emval_handle_array[handle].value}function __emval_as(handle,returnType,destructorsRef){handle=requireHandle(handle);returnType=requireRegisteredType(returnType,"emval::as");var destructors=[];var rd=__emval_register(destructors);HEAP32[destructorsRef>>2]=rd;return returnType["toWireType"](destructors,handle)}var emval_symbols={};function getStringOrSymbol(address){var symbol=emval_symbols[address];if(symbol===undefined){return readLatin1String(address)}else{return symbol}}var emval_methodCallers=[];function __emval_call_void_method(caller,handle,methodName,args){caller=emval_methodCallers[caller];handle=requireHandle(handle);methodName=getStringOrSymbol(methodName);caller(handle,methodName,null,args)}function emval_get_global(){if(typeof globalThis==="object"){return globalThis}return function(){return Function}()("return this")()}function __emval_get_global(name){if(name===0){return __emval_register(emval_get_global())}else{name=getStringOrSymbol(name);return __emval_register(emval_get_global()[name])}}function __emval_addMethodCaller(caller){var id=emval_methodCallers.length;emval_methodCallers.push(caller);return id}function __emval_lookupTypes(argCount,argTypes){var a=new Array(argCount);for(var i=0;i>2)+i],"parameter "+i)}return a}function __emval_get_method_caller(argCount,argTypes){var types=__emval_lookupTypes(argCount,argTypes);var retType=types[0];var signatureName=retType.name+"_$"+types.slice(1).map(function(t){return t.name}).join("_")+"$";var params=["retType"];var args=[retType];var argsList="";for(var i=0;i4){emval_handle_array[handle].refcount+=1}}function craftEmvalAllocator(argCount){var argsList="";for(var i=0;i>> 2) + "+i+'], "parameter '+i+'");\n'+"var arg"+i+" = argType"+i+".readValueFromPointer(args);\n"+"args += argType"+i+"['argPackAdvance'];\n"}functionBody+="var obj = new constructor("+argsList+");\n"+"return __emval_register(obj);\n"+"}\n";return new Function("requireRegisteredType","Module","__emval_register",functionBody)(requireRegisteredType,Module,__emval_register)}var emval_newers={};function __emval_new(handle,argCount,argTypes,args){handle=requireHandle(handle);var newer=emval_newers[argCount];if(!newer){newer=craftEmvalAllocator(argCount);emval_newers[argCount]=newer}return newer(handle,argTypes,args)}function __emval_new_cstring(v){return __emval_register(getStringOrSymbol(v))}function __emval_run_destructors(handle){var destructors=emval_handle_array[handle].value;runDestructors(destructors);__emval_decref(handle)}function _abort(){abort()}var setjmpId=0;function _saveSetjmp(env,label,table,size){env=env|0;label=label|0;table=table|0;size=size|0;var i=0;setjmpId=setjmpId+1|0;HEAP32[env>>2]=setjmpId;while((i|0)<(size|0)){if((HEAP32[table+(i<<3)>>2]|0)==0){HEAP32[table+(i<<3)>>2]=setjmpId;HEAP32[table+((i<<3)+4)>>2]=label;HEAP32[table+((i<<3)+8)>>2]=0;setTempRet0(size|0);return table|0}i=i+1|0}size=size*2|0;table=_realloc(table|0,8*(size+1|0)|0)|0;table=_saveSetjmp(env|0,label|0,table|0,size|0)|0;setTempRet0(size|0);return table|0}function _testSetjmp(id,table,size){id=id|0;table=table|0;size=size|0;var i=0,curr=0;while((i|0)<(size|0)){curr=HEAP32[table+(i<<3)>>2]|0;if((curr|0)==0)break;if((curr|0)==(id|0)){return HEAP32[table+((i<<3)+4)>>2]|0}i=i+1|0}return 0}function _longjmp(env,value){_setThrew(env,value||1);throw"longjmp"}function _emscripten_longjmp(env,value){_longjmp(env,value)}function _emscripten_memcpy_big(dest,src,num){HEAPU8.copyWithin(dest,src,src+num)}function _emscripten_get_heap_size(){return HEAPU8.length}function emscripten_realloc_buffer(size){try{wasmMemory.grow(size-buffer.byteLength+65535>>>16);updateGlobalBufferAndViews(wasmMemory.buffer);return 1}catch(e){}}function _emscripten_resize_heap(requestedSize){requestedSize=requestedSize>>>0;var oldSize=_emscripten_get_heap_size();var PAGE_MULTIPLE=65536;var maxHeapSize=2147483648;if(requestedSize>maxHeapSize){return false}var minHeapSize=16777216;for(var cutDown=1;cutDown<=4;cutDown*=2){var overGrownHeapSize=oldSize*(1+.2/cutDown);overGrownHeapSize=Math.min(overGrownHeapSize,requestedSize+100663296);var newSize=Math.min(maxHeapSize,alignUp(Math.max(minHeapSize,requestedSize,overGrownHeapSize),PAGE_MULTIPLE));var replacement=emscripten_realloc_buffer(newSize);if(replacement){return true}}return false}function _fd_close(fd){try{var stream=SYSCALLS.getStreamFromFD(fd);FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _fd_read(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStreamFromFD(fd);var num=SYSCALLS.doReadv(stream,iov,iovcnt);HEAP32[pnum>>2]=num;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _fd_seek(fd,offset_low,offset_high,whence,newOffset){try{var stream=SYSCALLS.getStreamFromFD(fd);var HIGH_OFFSET=4294967296;var offset=offset_high*HIGH_OFFSET+(offset_low>>>0);var DOUBLE_LIMIT=9007199254740992;if(offset<=-DOUBLE_LIMIT||offset>=DOUBLE_LIMIT){return-61}FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[newOffset>>2]=tempI64[0],HEAP32[newOffset+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _fd_write(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStreamFromFD(fd);var num=SYSCALLS.doWritev(stream,iov,iovcnt);HEAP32[pnum>>2]=num;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _getTempRet0(){return getTempRet0()|0}function _gettimeofday(ptr){var now=Date.now();HEAP32[ptr>>2]=now/1e3|0;HEAP32[ptr+4>>2]=now%1e3*1e3|0;return 0}function _pthread_join(){}function _roundf(d){d=+d;return d>=+0?+Math_floor(d+ +.5):+Math_ceil(d-+.5)}function _setTempRet0($i){setTempRet0($i|0)}function _sysconf(name){switch(name){case 30:return 16384;case 85:var maxHeapSize=2147483648;return maxHeapSize/16384;case 132:case 133:case 12:case 137:case 138:case 15:case 235:case 16:case 17:case 18:case 19:case 20:case 149:case 13:case 10:case 236:case 153:case 9:case 21:case 22:case 159:case 154:case 14:case 77:case 78:case 139:case 80:case 81:case 82:case 68:case 67:case 164:case 11:case 29:case 47:case 48:case 95:case 52:case 51:case 46:case 79:return 200809;case 27:case 246:case 127:case 128:case 23:case 24:case 160:case 161:case 181:case 182:case 242:case 183:case 184:case 243:case 244:case 245:case 165:case 178:case 179:case 49:case 50:case 168:case 169:case 175:case 170:case 171:case 172:case 97:case 76:case 32:case 173:case 35:return-1;case 176:case 177:case 7:case 155:case 8:case 157:case 125:case 126:case 92:case 93:case 129:case 130:case 131:case 94:case 91:return 1;case 74:case 60:case 69:case 70:case 4:return 1024;case 31:case 42:case 72:return 32;case 87:case 26:case 33:return 2147483647;case 34:case 1:return 47839;case 38:case 36:return 99;case 43:case 37:return 2048;case 0:return 2097152;case 3:return 65536;case 28:return 32768;case 44:return 32767;case 75:return 16384;case 39:return 1e3;case 89:return 700;case 71:return 256;case 40:return 255;case 2:return 100;case 180:return 64;case 25:return 20;case 5:return 16;case 6:return 6;case 73:return 4;case 84:{if(typeof navigator==="object")return navigator["hardwareConcurrency"]||1;return 1}}setErrNo(28);return-1}var FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};var readMode=292|73;var writeMode=146;Object.defineProperties(FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}});FS.FSNode=FSNode;FS.staticInit();InternalError=Module["InternalError"]=extendError(Error,"InternalError");embind_init_charCodes();BindingError=Module["BindingError"]=extendError(Error,"BindingError");init_ClassHandle();init_RegisteredPointer();init_embind();UnboundTypeError=Module["UnboundTypeError"]=extendError(Error,"UnboundTypeError");init_emval();function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmLibraryArg={"$":___cxa_allocate_exception,"_":___cxa_throw,"J":___sys_fcntl64,"S":___sys_ioctl,"T":___sys_open,"A":__embind_finalize_value_object,"V":__embind_register_bool,"D":__embind_register_class,"C":__embind_register_class_constructor,"a":__embind_register_class_function,"e":__embind_register_constant,"U":__embind_register_emval,"s":__embind_register_enum,"c":__embind_register_enum_value,"K":__embind_register_float,"m":__embind_register_function,"n":__embind_register_integer,"k":__embind_register_memory_view,"L":__embind_register_std_string,"E":__embind_register_std_wstring,"B":__embind_register_value_object,"d":__embind_register_value_object_field,"W":__embind_register_void,"r":__emval_as,"t":__emval_call_void_method,"b":__emval_decref,"G":__emval_get_global,"u":__emval_get_method_caller,"w":__emval_get_module_property,"f":__emval_get_property,"i":__emval_incref,"v":__emval_new,"g":__emval_new_cstring,"q":__emval_run_destructors,"h":_abort,"x":_emscripten_longjmp,"N":_emscripten_memcpy_big,"O":_emscripten_resize_heap,"H":_fd_close,"R":_fd_read,"M":_fd_seek,"I":_fd_write,"l":_getTempRet0,"z":_gettimeofday,"Y":invoke_ii,"y":invoke_vi,"X":invoke_vii,"Z":invoke_viii,"memory":wasmMemory,"Q":_pthread_join,"p":_roundf,"F":_saveSetjmp,"j":_setTempRet0,"P":_sysconf,"table":wasmTable,"o":_testSetjmp};var asm=createWasm();Module["asm"]=asm;var ___wasm_call_ctors=Module["___wasm_call_ctors"]=function(){return(___wasm_call_ctors=Module["___wasm_call_ctors"]=Module["asm"]["aa"]).apply(null,arguments)};var _free=Module["_free"]=function(){return(_free=Module["_free"]=Module["asm"]["ba"]).apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return(_malloc=Module["_malloc"]=Module["asm"]["ca"]).apply(null,arguments)};var _realloc=Module["_realloc"]=function(){return(_realloc=Module["_realloc"]=Module["asm"]["da"]).apply(null,arguments)};var ___getTypeName=Module["___getTypeName"]=function(){return(___getTypeName=Module["___getTypeName"]=Module["asm"]["ea"]).apply(null,arguments)};var ___embind_register_native_and_builtin_types=Module["___embind_register_native_and_builtin_types"]=function(){return(___embind_register_native_and_builtin_types=Module["___embind_register_native_and_builtin_types"]=Module["asm"]["fa"]).apply(null,arguments)};var ___errno_location=Module["___errno_location"]=function(){return(___errno_location=Module["___errno_location"]=Module["asm"]["ga"]).apply(null,arguments)};var _setThrew=Module["_setThrew"]=function(){return(_setThrew=Module["_setThrew"]=Module["asm"]["ha"]).apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return(dynCall_vi=Module["dynCall_vi"]=Module["asm"]["ia"]).apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return(dynCall_vii=Module["dynCall_vii"]=Module["asm"]["ja"]).apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return(dynCall_viii=Module["dynCall_viii"]=Module["asm"]["ka"]).apply(null,arguments)};var dynCall_ii=Module["dynCall_ii"]=function(){return(dynCall_ii=Module["dynCall_ii"]=Module["asm"]["la"]).apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return(stackSave=Module["stackSave"]=Module["asm"]["ma"]).apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return(stackRestore=Module["stackRestore"]=Module["asm"]["na"]).apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return(dynCall_v=Module["dynCall_v"]=Module["asm"]["oa"]).apply(null,arguments)};var dynCall_i=Module["dynCall_i"]=function(){return(dynCall_i=Module["dynCall_i"]=Module["asm"]["pa"]).apply(null,arguments)};var dynCall_iii=Module["dynCall_iii"]=function(){return(dynCall_iii=Module["dynCall_iii"]=Module["asm"]["qa"]).apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return(dynCall_iiii=Module["dynCall_iiii"]=Module["asm"]["ra"]).apply(null,arguments)};var dynCall_iiiii=Module["dynCall_iiiii"]=function(){return(dynCall_iiiii=Module["dynCall_iiiii"]=Module["asm"]["sa"]).apply(null,arguments)};var dynCall_iiiiii=Module["dynCall_iiiiii"]=function(){return(dynCall_iiiiii=Module["dynCall_iiiiii"]=Module["asm"]["ta"]).apply(null,arguments)};var dynCall_iiiiiiii=Module["dynCall_iiiiiiii"]=function(){return(dynCall_iiiiiiii=Module["dynCall_iiiiiiii"]=Module["asm"]["ua"]).apply(null,arguments)};var dynCall_iiiiiiiii=Module["dynCall_iiiiiiiii"]=function(){return(dynCall_iiiiiiiii=Module["dynCall_iiiiiiiii"]=Module["asm"]["va"]).apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return(dynCall_viiii=Module["dynCall_viiii"]=Module["asm"]["wa"]).apply(null,arguments)};var dynCall_iiiiiii=Module["dynCall_iiiiiii"]=function(){return(dynCall_iiiiiii=Module["dynCall_iiiiiii"]=Module["asm"]["xa"]).apply(null,arguments)};var dynCall_iiiiiiiiiiiiiiiiiiii=Module["dynCall_iiiiiiiiiiiiiiiiiiii"]=function(){return(dynCall_iiiiiiiiiiiiiiiiiiii=Module["dynCall_iiiiiiiiiiiiiiiiiiii"]=Module["asm"]["ya"]).apply(null,arguments)};var dynCall_iiiiiiiiiiiiiiiiiiiii=Module["dynCall_iiiiiiiiiiiiiiiiiiiii"]=function(){return(dynCall_iiiiiiiiiiiiiiiiiiiii=Module["dynCall_iiiiiiiiiiiiiiiiiiiii"]=Module["asm"]["za"]).apply(null,arguments)};var dynCall_iiiiiiiiiiiiiiiiiii=Module["dynCall_iiiiiiiiiiiiiiiiiii"]=function(){return(dynCall_iiiiiiiiiiiiiiiiiii=Module["dynCall_iiiiiiiiiiiiiiiiiii"]=Module["asm"]["Aa"]).apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return(dynCall_viiiii=Module["dynCall_viiiii"]=Module["asm"]["Ba"]).apply(null,arguments)};var dynCall_iiiiiiiiii=Module["dynCall_iiiiiiiiii"]=function(){return(dynCall_iiiiiiiiii=Module["dynCall_iiiiiiiiii"]=Module["asm"]["Ca"]).apply(null,arguments)};var dynCall_iiiiiiiiiii=Module["dynCall_iiiiiiiiiii"]=function(){return(dynCall_iiiiiiiiiii=Module["dynCall_iiiiiiiiiii"]=Module["asm"]["Da"]).apply(null,arguments)};var dynCall_viiiiii=Module["dynCall_viiiiii"]=function(){return(dynCall_viiiiii=Module["dynCall_viiiiii"]=Module["asm"]["Ea"]).apply(null,arguments)};var dynCall_vif=Module["dynCall_vif"]=function(){return(dynCall_vif=Module["dynCall_vif"]=Module["asm"]["Fa"]).apply(null,arguments)};var dynCall_viif=Module["dynCall_viif"]=function(){return(dynCall_viif=Module["dynCall_viif"]=Module["asm"]["Ga"]).apply(null,arguments)};var dynCall_ff=Module["dynCall_ff"]=function(){return(dynCall_ff=Module["dynCall_ff"]=Module["asm"]["Ha"]).apply(null,arguments)};var dynCall_jiiii=Module["dynCall_jiiii"]=function(){return(dynCall_jiiii=Module["dynCall_jiiii"]=Module["asm"]["Ia"]).apply(null,arguments)};var dynCall_iij=Module["dynCall_iij"]=function(){return(dynCall_iij=Module["dynCall_iij"]=Module["asm"]["Ja"]).apply(null,arguments)};var dynCall_ji=Module["dynCall_ji"]=function(){return(dynCall_ji=Module["dynCall_ji"]=Module["asm"]["Ka"]).apply(null,arguments)};var dynCall_jiji=Module["dynCall_jiji"]=function(){return(dynCall_jiji=Module["dynCall_jiji"]=Module["asm"]["La"]).apply(null,arguments)};var dynCall_iidiiii=Module["dynCall_iidiiii"]=function(){return(dynCall_iidiiii=Module["dynCall_iidiiii"]=Module["asm"]["Ma"]).apply(null,arguments)};function invoke_vi(index,a1){var sp=stackSave();try{dynCall_vi(index,a1)}catch(e){stackRestore(sp);if(e!==e+0&&e!=="longjmp")throw e;_setThrew(1,0)}}function invoke_viii(index,a1,a2,a3){var sp=stackSave();try{dynCall_viii(index,a1,a2,a3)}catch(e){stackRestore(sp);if(e!==e+0&&e!=="longjmp")throw e;_setThrew(1,0)}}function invoke_ii(index,a1){var sp=stackSave();try{return dynCall_ii(index,a1)}catch(e){stackRestore(sp);if(e!==e+0&&e!=="longjmp")throw e;_setThrew(1,0)}}function invoke_vii(index,a1,a2){var sp=stackSave();try{dynCall_vii(index,a1,a2)}catch(e){stackRestore(sp);if(e!==e+0&&e!=="longjmp")throw e;_setThrew(1,0)}}Module["asm"]=asm;var calledRun;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function run(args){args=args||arguments_;if(runDependencies>0){return}preRun();if(runDependencies>0)return;function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();preMain();readyPromiseResolve(Module);if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}noExitRuntime=true;run(); return BASIS.ready @@ -14,8 +14,9 @@ var Module=typeof BASIS!=="undefined"?BASIS:{};var readyPromiseResolve,readyProm ); })(); if (typeof exports === 'object' && typeof module === 'object') - module.exports = BASIS; -else if (typeof define === 'function' && define['amd']) - define([], function() { return BASIS; }); -else if (typeof exports === 'object') - exports["BASIS"] = BASIS; + module.exports = BASIS; + else if (typeof define === 'function' && define['amd']) + define([], function() { return BASIS; }); + else if (typeof exports === 'object') + exports["BASIS"] = BASIS; + \ No newline at end of file diff --git a/webgl/encoder/build/basis_encoder.wasm b/webgl/encoder/build/basis_encoder.wasm index b0539c5c9f5cfeae9e645bfde317c86386794ec0..306616da2fb67fc15bb73fd6b8db8fae7de73ae6 100644 GIT binary patch literal 1462787 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
NQv9=!;)JCbFH%g*L>~z$ek`OoX(`qeDKI4c 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�_`%i?XVHgKmP^4L$YBjQF%XX7b8 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%0Dx#m7>E&f>5!_O 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

niW1CUv(e7v(wGs6 zWX+$A&P*lM)ijrA9O((C2K~0pLrKgGHyJ9dACC}B}k?@uLR`8|ax28-OJ zL=Gf%^J+W+zm^wCjmT4b=&^E@wR@uHklV34x`1TO?r0Cm)b8k9lGg6%Y!bLTJeL;j zjegu7#g0#_MSG&x*rPbLJ^qkAiiz9f74|6pZjUdwN3ni;Jg7&)nB7UlvWv(QUj*k( z_7mfS@d3{rx*eV~7D`_nkLRT;<4!2O1lJRLi@K-BTSDoj@hN%fig;Bhy)0gvmp&)n z8cJUh<9MU*0%2RcE|k7BPV&B68lM?TFORq9r7w(M z6iUB0zA%)=uZ*9cW%tHumi_MdxmotS_<33OyW+F5>^bqSEc-q23$pC~_~I=4ig-55 zo)Pa1+1p>A|Jzf$mgPr|auTgu@oD%w)X_jv$UIP7Exi$MU|XQ!@8 zvU7^i(qFax^=c~w3f(OkTSpZK)k7)y+e&pG;Hp6oe}Zt4l08fif2>^+ZCENytk92$ zq=iI7KE3~QNIeL&Nb)AzD2M!yu#BXQT%%{nI!Y1b3-Jc&9e_-sT8dPkWfA*35Od2Z@6tHEOq{Pb8X{&G@;skb%^(6ep>SA&g+AY6rKn~$IHh%RR zGM@=w9lJhn6M_Z5ttH{NRdFksh?|IGBP`tG{9^iQSiI*Dg+Tml#8Nz$tnobS?i{uh zD`%0NOV)Xw6?HCI?|GKbIrcWJ4lTy2?0FW(xnzUqSq0~k8PBui%_SQ>k90VftnfT* z-CVNC^DJy^0(+iSY%W>ldBn;&q=!-Z(UO@=CJ*dBb^3#y#p@tx%(Zlul5-Wi!1j}N zaj!G@mNEE|{cp|~{K)=_sFU~@dm}tKWKGApLvFXS+;QR(7ZAlN!z)BtfP{n zv_c|o@Z!ot2nE=1&N+k_R!grZ-C5hmt8%MKk6ox)p1@`_^H1C*e#2k(Ot23kBA>tl ztl7EUq@Hl;1d})DTFu>6DPV9yG~4ZI1K+r&YMM>b_+|#Jax{lEJ`~nHIV@uHm0{W0 zg1lwb0@l<}SZI);T~pn#xCa(qnzgG|z}hkt)_pmwE#0stx?t4{SYtzBq0NSNjdjCv z%{gn=NC9hlD69u^Skv9Grn}nJC}6D^3hTif){1Ue>$_kz3s@_M!V0Q4G_kT9)}}64 zqXn$Vp|DQo?V9X{6?efJD`2e|3JcXb;C@XvtgT(J#tT^6hQfL{hqbL6){ZV%tpZju z6xJg-tfU*(nO(3Z3Rvrg!g@4^wXPf1&MsJ!1+4W$VLg_^THg)pye?Q%1+4Z^SdZth z+TF0u?}D|WfHi8ckak%vU_}|vk%2XbHEOU-6BW;SzQdBGG&d!cEU4I9gKT8hR<~c7 z6o%*(%vsWF(qn&S<}BDJd{mrK97B3V0ai*!_(h5ASxO%y)fx*Ebt6{_zcG0Y79PxB zl&G4j=Rz0Dq6v5~QZtB&Q0-PKD}9uYvB6`;C71YkF$l=*0|=N!ycAPtC-*x)Ai@Xr>Nzlp0qt#?@8h zRzV@9k=|sBT4zJLL;m!$(RS81l5L1YBwHmF%|;#MKavFbk0eHPLK?oHf+!Vlz))}g z?k@cPp;_O6D*-h;xcur5NV{vxzpW}ixRoudD6w`TiIL7G;#J93B(+uXS`0h&WGzA` zEkNQ>3!2nv@OwS!v=A0T&ql061X|dp=}Ds+y|S}jDkr^_lTzjNUfFp*mACa)-d3u-&MW(3L*+HSmDiLiukp&h%29c;xAJ7E z@}yVx<(0}Sdn>OjRbJ_peO;$An||GRUQwz%;+0*Xpz?HY<>^x8X|H^LHo{}QmB&hz z$GozOP(a?&TX{>V@(Qo)vKy7BdMi(rD!09|3yoAB@2xyusyt3*4xEU|ZZ8#2rT9+G zC0j(1tSZv{7N$S*z`=Y7kO_{>1^bBKG~q>Th8=+%bA{UIn(nkXL`Qn zf}UTPGo_SwHpb66h=+wtmNHn@;fnT(|^9n-g+40oUjS*ti1k+i8VLkV&K{)J?u zk0ZKRMZH|l?F5W$ZYPNLUzc2wvj4#U4HWza3VwS32~*!iIw>|s6MpwcNf5Opv)Tq} zrtIVN#Rwr1XvYf2ED7EU1mse+bbO9lKyHe^Ro3w(lGfATUH0pUlM+w;_1|0e>xihu z>%YJ3*MsuzU%zMBuLphIU;l$;zaCU{fBg@a{d&;K{q_I6?AL=L?yujw?AL?t?XUmQ zvR~g?9=JbV_Uk*!um8!iUk^&PH~zk5zaI2xfBlooem$tp{`#ku{d&-r{q;W$ulr7H zuXWChazyqj8`7j8!yx3~dd20iq#CwJc34m_Ffe8_k;%=>*CR9D0cdMMw#Pa6ChPmGKp?#Q#qhvwD_*Kvz&}yoFKvO0?54c16V?QBqoBix^_DUvf-^vKBj- zwe%)5H|+VWUt)Ia$?Vh_MK(OJSBeSVj~!Fn%OB^9;*RsGH$w)4r|g=KQ-7RP_D=0H zUr)U=VS^aiWalh1!h5B8t_p?#X^}8k-VmFmM{f2Eh@BW}&M3^D6Wtg_Jr(K#G?_gE ztl=iE!tB{&;tKpRz>?WBz`}D)-kWlL6}!$%BbZ|gvuCTjU4dB!STcJCSi?=IF0+dW zdQ7N+b7mMTV67h7E>{)=Yjt=|GU zH!l`u&mQw)zu7au+A$Pgh1qjQH@*Vv4Y-%tGr-zB6jovO+}sT-@ZkVUX3qetGZa=~ z_Uv@S3QRe`lG!uBI(;ZC*KR};r+32&96G>~*)za8Whg9H`UUHhZdmiuHG8b;~~A7)a;si4qdc5Z}UA&)$>l?q@1OtTNsjL-!x03`2Ss6L?P+Bn^-oOR(I<>TL&c+gFGO4uhZGKH~NL_X?rKx8~q|r zjr3Rj3$!*dGw1KQDR*o6;W?!TOu5@ik8xanaJ#O9ICMzY>eXVtt1s1JKIsjhmEJBI z=*^{1-V3^8os*RpbRaLK?+p!<-7~|Dkg-b0p#CozaGtiR`?diP^OUIjzmom7P2K3ISQC z8)n(gI{m9zvYLHK9O53!QlJvL^4nDqmCyIDD<*|Iam(Sdg1`YDANI?WA<_pU`iY2 z?7aXtw}uvmWb8D!0|dBSND$y!4!Dy;;7$OS_X6D9B+E5>!Hf*t59Dw;8WZ4J4!Era z;PPI8o7;s8Q!j8on8W1+OMq)R;7%<7m-hnP+&I0u+}_{F;jYf%S`N6Y7l6xq0d8&~ zFKq9$_qH7F${eocfV*-5xV#tO=4SfB@($eFbGXwvT+0D>dI7k+7vSc51;s7|a6gp8 zU6aGL9B|hx0GIay+C1>SLARl2iz44z~#LFmrWVC9B|i`+xxK`?%Eu#<$$|(0l2&e++anYw>xROOy+)J zGxiWE@kIYU%D1(ttix~IgzI+W`1{OsTy|lVA%o+D+cTT5Y`E3T=F8ELUSn>0ssj0z zOuKhv#$JppEp~S^Pp~cvZ*HiONEJN6*19Ey4QMPWasZoWbuf=F3?s7d!om-+%j}jB zl>ENjIFNzSg47GfO#?X? zH-9*G&`kqwTnEg+X#MF0;~HQN#w{NPrsVDAW{(VvmYZHMZuH2(xY5JFlpMX>+LVFO z>e36wZB02Cw|5wrl8=`gJ2Eg@OnSk%sUrvDrVayBa_@>wr_I1oZ;jhFtTiQnF87;^* zIT$x<7?_ePm%B`5V8r)(!MMXz4#q7S2Bzf2wXq8~V)MOVaQQ6n-MBHsz?2-gHgtgz zSMLS0p&N|bF$_$}cgqbmwt>Xl6%)soxQkJ^nWo2tA!|h8V)ax!w@hCae?)gZlquOy z(Q}J=ZpI1IyzSs3eR-xmx6YuEcy3wJ_GHwPC~goUz%=ba4qP_|Lx*^}_1YY`+|Z#i z+G-A5=L82Xp7GsUT0BlI-MP*=BOkI-dqKwIGh&^ zkn9x2=42bq*^JK?JNO(d-H~jei96I}j%?^^lo4vw`E@+mV#1M@brZR^XCjyF7tP?g zW#+P6)Z38#PMl9OByE@@p2UowR@hO^Ma_-9^)`AvJMFNeDwb#8D?Gshytdb~6B69} zkku=kz(T$CUe8Wd5W_vISNMO0dh5KNoys5(d{%F3Z~L}-Jv+%kRPd}`+*>d9dUpDQ z$n;sgLe&c2UE}ra^ax?FvwDS!9_mecy-CNj)_%iFp=ySDE4`kbOxaPDsA2UA(L2;z z;q^uwo+KNqSE!idbFg=g)q1^YuO~su>J@%nq28F+8}oXS+pJz;5(xELUXQ2`?sGMY z&y`UITYctd#o?9;N95#gwHQg6&&U!;%IhsoQeJOylJa_sla$w6oTR+o;w0tu7AGmM zw>U|8y~Rn&>n%=FUT<-d@_LJtl-FCFq`Y34q`agcsrZz_M~Z_*b{yO2^Aye7*nG)2 z6GOZjy=e!fHpm7Q*tnLBoGskQDc#fm9!DIBBZEk(2lc}sD~Ro+tAJ>@Nh3zfX3 zu=>ec3XNCZQkeeaErkP8OoAts4#zg#TMAFA;&5!{Erlp1Z>btn0x#(m!9{A5yGU(x z7byzmB89`0T%>TAl8Y1$Q*x2QVM;DiI84b!3Wq7VNZ~Lg7pW0bv5$wdk$ zFS$r2`xQ519#)AHdUrseO}!AChyQYRe5w0t;-Y58yv z)AAozee=wmjlw}pD-Q=TEgueITK+E8H@DB(C>+GJ@^BE-^5Gz+<&pmuI*4g?mU0mD ztuEVZpK#<~4q^re&1dK!Cfw#kWC5?->xd(<=|gxAtxVa~#2yCc*bx!mB%IrpO92MJ za5JaHj^hQaZ^7x7ojdzcAyqgZtEej^ukeIDazU#L+ACEQcoMIt^`kuy@UhaXL|stw zJ)ZEE>}p;+Zv`+%1rudVFpaMXCI(A)1Ggde&lgDZ zKT#@>H}rvgdjRq8Li*Do)obYueITDNkmlN=R3LBc14)c0L!^a@0-^5+&w4Gru?%vh zo24w_&Ne-bdLrQgd(;y<3$K;Olz*44S#B{id(=rv-D{<6I~yMSD+}wDqJZY6JCxfz zk0PGsWyO-6LVWHx#ct>IeHM6^X{PctVT*-dNiwIRN$-~>?bwo0PeQ-gk}W!Bd-_?= z!tqPR{4mED@0)qR$k-+i7}O1j&RheGc|tA*j@Iq~D#?0JVo!uO3fqhd{b1)t*L*9F zAVJ>tb7U7YH74tX*thwxt_eP@>EqPtoF_=?gm!>B&&{50(9`p>C%M;l_6D~c6`shB zQa(yUuiRgo$8Q&5inhp|mJHFz+IS0x78o`$+8&tcG-RflHk;Jnxs|QEPK7#H=e7}# zLuRzRP8bkP+?md(%wO!DkCG*P{Mn02sz> z4^YA|k)dRZGPhEaSca1A%DkTv{E*2|!gkwi^y`!miGd6y4E${LYm}U08A>?6Iva5) zHi0zAP_k8-_fgWZ3?-*4gAWN-M`bA4rVOq$+WI3y2^SdRNIilNbwdFl=*V4mtPQF% z*C$bPR8E1g^I_ zpl&YN?0K*^m+T06m2dGpIGjt8kXQM3&x6T4kP670OV03e@Hv;vhP=vmdLFFKCFg{^ z%FpsVxSdPlkXQLu&x7H)q!aQgKi%`-c`kWQ$g6yt=fU<|a%RY@d>8p~j|bC6yTIFh z9b+&SuV4&DFf&Xu4h@c_873GF!mywS*d{cQd4rikmI#iyVTouIVOSdb8=BJiddRTA z7QYM&?3~N6(2(-KnFN*oR1$0ed`1@CO+3MmAb?UB78vDen(TX`E&RM@heu!`AfHSC z4L>v0hdpfaCq87f^*aPBxlJS(TLBHaiS6L zl&PW-&&qJoh|iE2qalmMg(TbeMiEr+j_LPGp7+GFSg16KqBpgt?lmuJJWhB^2UP6McvTesgIZToPlvQ>V!`<_tOj-}K5+jZx?7}e_z_TXl))0O^F_{f*+*;- z&H^NqLan%K<)@eZy4kr{uUIeZ>1USxy6>uo*FU@L*L^oVy#BzlU-w<~@cQSL{krd- zhu8mX*{}Pqd3gQLm;HJ;7~q(HaM`c>E_wL+Uo89ettK^v*Z*?aulufec>S-I{krdl zhu1&9?ALu4JiPveWxwvb-{JMYUiRz0>m6SIVtCy)vj?A>^ix#%7XI_WJVMo#I)asZ z^{^y3D?l_7<3OP&+8^BOmEDyHm)k5V#8|S zf{tFT7UP1S+0iSpwPX?jM;de@Z9!sVGED}@A>ypLF)hR$a~u+Llj9I_kfK*7 z9hex*=rC;SGZ&d-_yj!Ufs4$-F887PJu8_ylQy%nQ82q^cCsUGv|mEt37u*hbn*e2 zkq=^Dh}|(LcN@USE0LFlO`FHXX{$xx`PS6{c!3oLc*TjUMd10C*#LNfHwJieI`UH< zi@@`(x&iP4vkdSQaB4~Le2Z`ZyudvJJh>q)37&6F4uBWfX@Dnxq$R=gEztq+0)Gwg zzi@@_O?*Z@v zj}GvPQ(23^^R4y)@B-5g@QRaJi@$8F-5tnRlBoi}wFt(x&y2%gw6GuKes4p@`^BadmI_POX;!m6l z>7dNWn9OgSBdp~7omG~qdk#40g z(>OJUR;i72Lk*|>^hQeL@o-XQHoBMg@$(!%)7txZq82u5J^c|+0Foh_r%&<(JXyDS z`eUB>q)gsCeTpZ(d{u~E|Ly49ReXt0=!3LLt)MY#8m(7*X*Qiu=j`l})Iy7x;hR1Z zDLULoG?sqT#)7qjQ#gmZCcK?d0YtEZ;Z@LSp`1zBQRgD=pK&vuN;sY)uZGogd!wH~ z&XS+m(azYR&Q$pW+;m*#DCTh!1Jia~944{n%SV1>X(_?1E*+-1JuC%g?dW2NutQ5~ z=Y;hgbaSgzcRSVhmiIj<&UWX_g5LM|lq3D=RB7&guU)O&`Mx)Dw1imXZC#*ap;owS zLUE)Cbx&JlQNgHff3f~r(C1csE?4H*{VVvt5l-5Iu#OF^Ur)2R(^YvWc;IOuF2hCP z9l<1yeb;ZuunjP7Pzc*=NM8eEMMI*tbJ2AmcX-U`o_k;|`Twq!qM3st+K zpBa-C*a6Em=vi(cJ}oC^>Q)Bsn10hd3KGmG>EC;H1RW=jB<&uJf0>zzLnLYJ8rXib zQi~+*yvvJVa(N_azr-S|nmI5y+Y6-_ikXQekX@0aEok%_0?rZqS+S!D{=8oFh*y9I zjXssrEBvO|(fo$-*aJ#i(CCfKW`0xbXnw;a{x6>NGH@zN-q!pV}$!O*5AF&&Q( zYX$0T4CX^5)R6-t*?r(DuAJG@R;rb7Nim^`*Q6NJFcHO=CaSbz zOyj+z7}KzB#hAtdI5@`iiJlnK__{(cBIw}Ll!cG>pwWsky^fvCBdKCcuPI_od-!M% z8m&qj@=B)`F{V9yvLIjYW)UyP|}ZISXlR7pB?gRuwU(F)&)(C>ncOt%w=@ z>O78g5nI~gP+7e!26Yy&Duk+LIWXHGj#X)E5GNxnJ~&wh+j@7IZ7CA!5YMWNO~J-2 z#68OHay+cQli1cb2C}WJw8XZ&sGn_RRlC_%C@rzA?EO*z{C_^S#WqFGwk#jmmgNK6 zvV34$mJe*p@_}txKCmsz2exJTz_u(O*p}r3+p>IMTb2)O%kqJ3S$>IZ%j)*Ct(V$q zYRL>4+j?u^gEjFlY%5Y|{BIN6l5~~1WId=2YDqBjyX=}4+tI#Xg_0{CKc^_v7I+r< zL*gPkJM1S(nKZHIwA#bxWTBlXBgO~sTbL@qNhM9nHqcbaC3|MW%q*N-i2$SD8{t$TN873=x~!Qe9pfM8tyx{l$3v(Yq~W$% zV>h^BY)Lz|WYiOVbdZ}x`9`%n?EaCR)O`HYk|~uV#G{n_;cgarVC-eMSqOJ7M!HDp z;$^V1?UamWDv=vvEg*H zBmBojdNV;femag8cMNj0(81<_J8nh5VS->L+u1r+OcN8N%fHK^f*-a?Hp3yp!lDJV zQ*GRS+?uS=kFlND;f9g}Vr#mA3X48hPx(P5dubeE)`6-uc7)1q2649!rn$R)tVDWu z>%%|#>gUcL;laH+{DI|;iH95?esiHdJh(WYRkU@@y)?`xLtYx@lOZn+^U08xhWTX3 zO9RQ$y)@9Q&D8)QlnlG*?vo)e4fDy6mj;^@?xnFs8F^`#PlmiSwyQ*58s?L6D^i=gm{26Y?rQ-Sg(D zLAV~(f1k>?dEPuV&J1~#@AABPYOD)+m9Hm1GM8XBh*#oIjyiJ+<1mRzvxc$YMnlG8 znt4@cJXRzSuD&E+m%?KM@xJ7-L9AhHKx5`-(bn0KvHg>h6~^SMv6aMBoH3ou=vsW?n|sW?nG`EQKr!s_(^Lj;+36$dNOX*GDro@g6C&jjseOdby} zqX7Shmy+NO@e&ezBQ7Js;B_epMz~8z(4k&Tf|_-Z1as8^68tS*M1uFl3rXtOR`n|AY<|sIiCd2 zkv$~%k?bbHtK_*PXUeN&OdcoalHk3viv*XJb4XY`caoq3o=qY{oh(0Nx&Ovk?!PgX z`)`cp{u_p>+u5h+QU~ zULEN>(xk(ZkePHEWs^?%T2ZP5laAY80{3SEaXA>*iRPQSw84SmJhm-<%4cy`JfwF zKIlf454w@%gKlK`pc`2}=th9BZe;nO8#U+)rkmW9GfJOU8^2pk-*f#c?ywN@Hqbl%<60)L$+m`@8G1?@sbC)lY!)%o zUc$hHLyT-j;OKG3r)*0iX;yL0z{4bNzK9Xz8XcMR*bdoIy^8RSyw6o}=qRT0p#NC3 z8}yv^W%~&cj!JZ8EDtku9#el%ia5g?OD~e-Seffg#1n_@nqrBNkv}5|&Y}lVP%Ra3 z`7c_~9BNgAYc3T*m^pq3r#9Du@H~dWt7}b80roa@NFzDF2(`Y`uCKnxZ<$m9p6?OY zv1Zp!s_5-jbU{(a@4P<0T<2|8XHQYb@6SH3T<0xT=iH(WMtZ)LUva5#J!yBfo?X=O zd%eS@oLuoqo&RBV&M4||h5|S{%HR5?6+Ne@t6MIFDpytq!3Z~b?x zv$?3__n?QXLmdtm#`AfGhs~G6Y9Q7;3K&rpprOp_#&}AaMHP-#Qcw?7tPXd^Q`9Qz zunTt}6f{AjSFI&;-q7LRq>SQ;c+PA)DMcHMkG|;b$&+cONe*KMA z3U{Nb7k*d#`tY&tD@il?Aegf2m&jR)b>~3K6fs=%*b~0FLTpSX&ImKB0jXAr?%!#= zh_rsq5u0yy=GzOSD4IXz!)socyehpe8G)|%KNRhc_Ty7K6E|m)E66{@Jen~LQ+hQs zY*c>`@D9bhnckiHj7{@SW5)D6DctVL8KHb8bA*L~-G_r3XiGnfZp z01PohpzpqHS5C9onI_jKke!IY`2!m@Tf&t>SJm8)m(~|2ci%eQ#y} zO0wjS-K8|>bI$AAAE&!dpVNK1`w_|NZf*{X9>O*H6+4uJmFgT(DKP~w&$sPq@_ab- zd42i9OE0}W`y*U>LJ<$99FVe=DyH%iS}FTt{?Wbk#UK1wP?#i#b?)(_|6DyXspsE! zkdJB^`v^Inh=a)hm!r|+wf@$9FWp~vlu?{YXK^T`mFL@>+dws`Cv~N4b(OZkPO#lX zkDFls2M3eAzyH#K+3ce%q*acs>Qi;>ze-(IB%!n*iQ-j%>w&J!hWm3{)w>PcC5KT z;!H+&Cg!wBZrrNtgx`rVxKq{%UyTHAzjeabB7rMeonVfdq`^h2PWaszgBw1b@OzQK zm6T5S7m>gnicT=+Ow#y`g7Et>#`6W?4s+cAnz{ro3&joOVI?Cv3(}o)%X)6 zUZ~zuVI%oO^US7)1&=fbPCRl~1sNx~VjlvlT}eqv*w>a)*$!bgq>cYA4JdrA7!wxT zW#tZUQd{e5{0~aEc?AJHp45N1Qh6*SPtu}^35$=7<^o=r{TSk<_L$MS^y^|)@hG!D z$S)FF6~^XEUtZk%$xnWAc7CXC_<`9)Vtw+H-7hT8?|tc|3$yd}`k`+*3v!>E4V48; zoN;f7Q@Agac#@n|;@|)0N&F0nhswOAZ1%vnlvpP}%^+PMynT1Uh>-C2#>FF&=6HTalJW+f` zGs3a*<44sZ8sTUaXb)-;u#g-zn!Llg(NfyJ?Os#@8x>MGH29O%-TJJXm<={ACemI7 z^iFa}>c3J+E03k8R_GSzmvjrNdw%va&*$mBksbRU_%GRYbDwK`v659oLFjWrO2mYu zof9uCE;c?}dw$=CcfNA_cRlf+Wg*vaZl4&imKfOMT);R@RtGea7bLMN-7g#&Lt_dCh>Vz3c;eZua#6zV!ZI>d8I4uijvgp{{)pxx)6(9U1%z; z6=YMc4QoBJlJYAH1fP{g+(p3r&&9OEc`C~U2={hDQmDWhC`X+7mHJd`Je_9UcyfZ| z2})Jc*lAd!4db{R`FGcERKd|AmnhH+Dlm!Lj~^SYZ*i!k!iLc{?8}Eo>z}Wt-6%6= zO`+B8&QmFO1N&>I6;3hz`wMMa)rBy_X8)XN26%s%!R$x;s+#99&dyY1%!fp`n(u2S z;_*Z}9nz!PY?S%N8n5Lrb5y_B5fvq?7-!DN9Y^&~rQc#^z%M>%+@0H7qVTY4Ww2yC zKCv^|f?Bk@nU7?P6rbI>Q7RHxL-#rC7uzS&aXH`+zs9a6t7)}4<44wO+LR2|Y9vs} zUJ}DJDwaV)m9>z?d97qOEB9%68@(2#v%7g(Z)UQbjAM8jdbL=Cb*tCvSgSjlsZS7} zhE_y27%ZZdW;blxnewleal|ZBw~Qi8PC0O~exWPvJ6**pm`LYHhhTzqDilH0&QmH5 zjk{^Z3GHC8B9nJf!`f-7W1!O8s2zKf)Q1`nou*^~FEwtk4c%&KxpAaf6^5ue$u2bw z(A!oo@Abom4BeA_XwCkzA-u)1ltPHJp~pYouSF&LIiHAuVh?+l;v6@=JC|TjFZsY8 z_y>E`8m+Gr`&!H|l9>NS(y*rIfh4LO`f$;;X3Q~s=`-Y%+r9f$l@n%6x5Z=eRee<~ z!l$Zv8mBC*8ZiNz2Bz9-tr*`G(z>>9Y(%S@5vkS9s-Yqs8eY(aIJ?v8YF0T4QOjKT zXDsQwEAhy1o57rC2#7p^z!AqH3)+bX%qzK9O zbbk&*wxKH5xw93P?7Azi(q_Z6`g$F!(zB8SwzhZdlBDp7(T%lg## zg2ZmxLMzW=z^92(XG~g5f*y^Pd)?6C$#dRt16!%|C->(vLWRo zs4X9SN=4qZ)$jS-63$#@7Pp zsxTOac#VqwsNdBGm?+G1ipO@-({T07nN-J0hPd0K((F3f-25T=lS}PD(vWDLo+pb@Guq@Sia+@z4HI z4oD~W;Ty%}raV^WBu=W`heMd03+*3btrckesHvdX;bksZnVCL!n1Rx~`)hY_!~$jaoeh!r<|I zplqUiu&fN*^UDfO=Nydn;(;Tts~W{(b}-mtdSyClI2bFV)SUsehZ+S2=xjYr5!Q@m zbsZH9!=tncY!B;3@erVPVZ$gcMbs%=H;PvqH3_4m)L7fi_764ggUH`~qcmT8BQx!Q zi|*c~1&6w!^9Nl%7(5NG(`nvg*{5l>?P_+Wy>0RQi98qp^0t+01$(ctk8+;P+7>Br zg0iS>^^vnfXAL>DCZfLgKC0BcZM8M5U0kuFmr+)I7((-{-&>gp!8Uq376f zT39x_y%M?Le;*YhscaklF9dGE268ILbm@%b7O3u;4eCHk(?=`K?vqqf5{v%HT?#tMgm<9M zL-DML&O_mOaFUOg@LOYZN$0&U+t|Su6FVBN{a*F{SZB`rdVRAVYCiynz3Tl)B8XWkNHbl}twAJ+@ZR(IJn?(wYYM6rw0bmVPQA0^U zctiCAStF^?F3!mrzMX)18WM`?YED=&W=Q4+*juTBefg*AGOXE?0WT^sAe2Hmx> zI*c5p9n`H67dR0DY#e1oNTeV)a8LvolWd_vVUr{Y)d*pf_L8<^|4`jhbZ9pldYmLm zdVdEmO1j2%?76GjdM+;=L^i;AlMTk6m3pqCdfm(Rq4%wdZ6~?1v|~$-qCaZHtqly) z^tg>e8?fyYS`T&QkMWKm@bO+mq_YBcGqPwgNjmUKq78f9MHO4+V|p^-XLHfJMGIl;QX z3RT(zVaU=R0y&yMadNlCD$WsweY&fl)j9ZG9yThXZy|3|mSaibSWT z_WuG6M~V#^jvB)>oc{lBYdGJWK7;UX=`p1uf+$!ruY#9)47_e>Fa4+=l3%P2bZRf9 z^5fbILu0w}_04NB$C1^4xjIZWG+J69r&Yq55y}4(!JW}F%Bq6^;uD= z!T#UcG zLq)@gY$2*A?Pndnx~BB3@2F|1vaIdkQ%S#?iX#Q3Q^i>o`64aFl|4@0(_N&rYhoxg zmX3*`&~n;rrUo%xKi9V%D*;k*2Ez5~2Ajg>qg)XXLM9E+X8F|}vph3?`z-HMzm^d~ zMcrM-2%X4OAlNF=(04U$W^GGX=(C8W&Ov!hEn2r!;aXXFS*jMnij%Y=Y7s*YuU?gD zeTN=YCF>3yJf#`=LleTxJBoj)l_*t0sU?(#TG~#*>xPo3aB2((mlx? zbEvfX=L4K|BUS$HL)Ve2r_$R8rU|{r2h!lu;sb=Ir!I<-NuBa~nQhUL#)_%C4|x0_ z(Fgj652U#9r{YNUDr!(IYS8r!)_@PZ2G{NP+sT&^}^ z|Fje=Er7X#C6VS!VJv^ssu}>Sv7OK&TIW(&xq@PH(3ct7i2B|YET!(t3|b*3C0hz> zwLb!13Lfm&KVUMX!SoN94lZ`CeH8_76|gN=Ex>tAl)u*mYsZbgrG-H17Ylo39T`)V zs4lhU0RXqB?D6xW4zsQR>bY(^e!~Y)OndhP9(ex}|GlL!8h^0#bf$A?4Q; zQoeKPt3ovXSmKh&OM~hk?AnsPxtvBf?M+@*&0;QH z0<<+5XNOW>+Lhh1U9OkOR79{;JJ!k&?O_0QZ@>lP)pSIR&5Gow?fz+-Aj(e{fM$_u z1*lv#ORuIlqK1+Zt7a>tCCMUFIaHWyhA5R!L!{N-HCwZ-jO(kWg-AqK>ro7wDUOmT z?<2M}TV2O>9Iv|{;8awLIi4~uy z^=*fos+Y415`>N7c6rjSX|RgFRJKH|qJ7D)-YTgUPBeC|x^SYXD=eH8CDpe}bx(CK zO@0ihmca~$a-dSXOw7L-i9(f3nv8Y~pcU$+1xQz#wUpVarAE#Y&BxX`mloWHjkiEq z?NSzNDN_?WQiS)*0I)x`*%0l|C`DEmQekQPJjRzaH-VINKL^-o89 z*13@(qpfB2_gc+`8QvYK`${a(!taVKSZXcU4ANR8)Lv|-h^X2yTqZfRre0$>`8I0p zYLdg2l8_uRnj{DJ5uZHjlEY;ZGN_xB?0iE`O6`liT7C4jEL-q0$+0{wNe+oH)IZh? zT7#Ul+Qw43M2W~NR@|1SCCNcYRt&l`@w9Sw4`n^T_-q z=Lq4UOY5T*?s;K{J)yPuiTNW-syH4{LEH)+=0pugT+m$%PahuDUKcz5M>8p#*q${S zv~nUx)A+z3yQ-|MC#=CiVr%S?`j$%Nbn{A2;|{5V%@=E&72?Mib-7yeT-C7pf2~!z z<+sA2v2>hjHogzR^Uw!sbGCI^Yu0r^LJfbF=0gwXB&F?ogy$Lldz3Rb?8wWN7wuG6 z{F`4m(4B0C;~v0@pPeqDvNfKo$F*Az+1SQ;+PtOl2|J*aHg9fxg8i8uZBL~76^|DM zqw2va?kxC^<9<%98~-y3aY*rOkmEYgwraq4y@(~J8qOhBRrJ%LYX>Jvs+{NbrmE3b?m3KdlKo8@e$%K8RX3+CS)#jH^ zA8l^@0P3~6A`Q|_X(`BLGU{1T%7(miphP1diuvoL?r={XsfA7fH4_z=g29C@qT40{ zI;;BlejWyu3DVVk`)g|&|5Js-I9{_FJwe}OoDSjtifmOaJ~>U7>1w`He1v%}eiUEf z|FP_wd%3KePu{gp*dbJxq+Q`^s5GAB+)c7kydTahl!qUvAU}M?&KM=lGcT^;M#HaE z>K3WpA*saxvDjGBoWezEsNOh~)cpdv-|IGpZBq5 zWfZRie&duWhu9j`xu8{$f#V$h)CcNn0f-B7#1$Pit;=sinKIuI^r~4A=snq>dKTLt z_rgrhgDEf%D;>nr7Ca+Pe;;H$fC1S@R$X+BKBa~nnj}jdTOozMlk9X>!m81G@j8OW zzGDZij*yVEl5)U4$3PCf=KI88XBW{=HKE?D`yjRb(?4ShXq?0wK)xaMX_y z`tXQM-O4?Aonv-#J)zdzhCoMXu+ux z*qIE_N8b3_nr%t4D^Y)W>uYPcr)Xy)(J(|lI}?r7Aquvu7}~ptMvUFi2dI^mva14( zz6orN(XR*M1maj25c8SfA4Y%B$!}jF&>2QeM-S^@qs&x2LbOUANU;afI@SZ#@9-Yc z0O0?4CgFf5H>C#lHqJ84l*hdjaQ!2*fOihuZ}8e`{#|c)P9%84_j<$AxtBCNLP4pA zsx>^lxoCK9(kmMtS&dq(A!EF;!Gp!2r@Nsc5h*fKn154-j!H~S2C9I;g*-;lig*TsayTGO&$LI2^1|*<)6aI|qqlvd#h*>sL;k1Zq5id8el5AKHhwM@=0; zz76b56kAoZ66D>|2?W+M4rz7c@m1BY^ek5v$BQ=3#Y zSc_Qap+%^&zCZaB%5_)g_v#3tC9lc-H#ObR`adhDQh z+8jJ-#BL*UitNNAQeCCFice{CASTvxG9U27x}f^vOkZ;t>C7#=9DqC%9u_zxaE$cj ziJE%a14`S(w>;WNJMZ%=`g9SWs;H0_q@}y$G=|I8HJ3-FM9?XY<1*Ow9xJIfG?XfH z53-o~BPQLlaA@7u+Q^*=f>HfU-i0a*ZFtp1Y+p?$X|2z*oWvAWCg0jLROg}Z@~4$% z4#2~HlGmhj?c^BF+u8Js%$OtE*JVJ}DbWW~<*$Nr4H39cD$Cz^E;6wiELWO1QQPIRm zlYKUup>+thLBcw`+&r^Novz?YuZn|*DHYdjOG0Ki>vnb22)-V)jE0nv)O1e(z|%yH zwGPMTecD`SrKFcW@(9)83TOO9QNZZl>UdWY@^v?NT3hTw1CCu1|21|M6^ou~u?F~z zN~qzwRYb`>ipXg6u4qkVU7)o}Lvu>w<4?`0h-h1uLO-8c+^ekVt1Q~BQ*H=jk9(C~ zsBVJqq{VFwhL(L#8RT!Itw+jG3(2cRKQW-iY3oq|I_@wV7 zJJ5G*apVzXou=Rxb>LwqN%+Qyh>U`&sWejQqXm_T-KltWX;Icwz|bnFMMRwD3Q}95 z%-aREEzz-p8drKf(NI#0M8``~TcQ&swJp)ff*RL`JkhC=S|mDMlG+lTDXDFV?ylE2 z$r?_Y>!h=4DYp6YPpy{fXy$0W{_j`mn1c+)sbkUzwpDw1SOmFi|D8Sk6D|16=?^Oj z><)xQ8tPwQ$X+KuM}|XHuEQxJLV|GZ$>!aNnNZ*J{wKbWqaz{C`z1+g45w~QCR&6U zvQN93YvpviN&}5~fQcZ=d=$-bO{l)RfzTxj*6dH}Qz}RXY`lI!OI_7Z6*=Gp={YD8 z<)SE(bgjf=(k!e5`mCmrTU3!fcRwM|`#sqc|9}J^hLAt;1#)Pm-Bd)S4ArG&&@-^g`Buv)3@TsJx-;2fkorv^nQgI(8*)LsmU6I<$8NuHHI z6k}Q18qNa$h^ZHKNJ}p>7ce{@LF%}YD@HBNo`B?P(elOE)#vIq!x*u zC`oOJK3Y=S5`n(Xy%{OF*i-@d1KF?B|ov}h2+CJii#@m1q~18J8t&Yob-P)OQDks-BzH|J{x;R z3sj10L#hFmqD5!TcF(Nz0K%yv)&PhmSz?6hBWUF{Sql-<;%avbW8u~;Y3TwSeXMG6 ziHp>}Zg-!MYVUD4!2%WInKdz18~9esX;M1-SjNMNqD5t`A8Nm-t4b;p7Sy_^LnT#` zUzT^g!ccusqM|wWu(T&vOyL@<2h5?(-H{pxkf>Clpqdo-xHxMRR1@JLxuwEpw|bkW z+we}L6xNh+TjLD_rHmWLo8q!hS)?1s8_P=Vaf7EzqwX1p^KGe&m%m8AY5T<{2kQuX zCOdzz*+FIJO_{PhaZD?Z>CX7Aq0L)1W&Aj_6@NGJ3l_w)x%FqqD(kh3agnLR>K-QmOh6jpG!_c?81k$SJD~Iuu4!gd zxbH;s^ru(|JfST>wjp$mQ)gDS)S~4)dL1THvl0??0~TU7Hc3xc`XO(cbOr4_ddI}4 zZ%L+@_os;yGv$6n{8mCQnPQ<9nIf23leJ7)nx$(i(^M*YjRiuIw$sr|Qr2b$<4@~D zY%0Y3Sz}w0f1*mGi66uIgh9u0OwhpASDuvlYYnMO`P0u;XDxDdPHY)f9Oz%2OO#nj(a& zrid5lRa0D3q{w4toh_r+&92rm_!X~|A}jmHI2IbqxOQoZ5IR!qj~%?mkda_np{*@N z?ke+I4=+s-!txXm%Tiu?NAvYN(+e`3aUT`BVQ2cRjHG8PN73qil;i(f)n0V9d4*dK zdpYSu=S!;U`8KdPADDdCvAj{6qmX!{Eh%J=x;UGG$MV$_l6y;gbo>xTt}eSccOmQ8 zoW}KPb@7I(UFTSj%wXQ_kXFbD=lD&O@kI$MpDGHuI+o9hN+I!3=_n-k!%|3gTdrP6 z6F$5}=7q$`fkLvbRLB7pvf+i~7+(}Vb=CeVg>?5(lVyoK6}oXBE+%Hb5_t((e$gx= zA;>ynUtTsn8L$`ldO>IAP{BBbZ$&xC7t6aZ`Gx3mla7)fw|q2sFJ7{Xj7(N;N^lF zT$^^Ge$y4!Tf*A@t~M`xU5oiw`9kk$KYOhRqeOV-S`m0!qIv#W5!Mpn>1##MLHl#p zilAC7UMqqY1+B5Hg^V#tCu4BXAP(CUhvN{kO*AJ3kyxJ2S$IM3H3tA}F%}`X8G?>b zW7d}Dh7Kh+keJYsRzhgRp3rz(LR{g1_Dh?!642svdjb!(5|D9ag_~$gKqW@gZc9Kq zbbA8FTM5W^v;-#G65z50641_LQ3al8=}6$ARsvc_{t5?E^qu-n&4VC|9wPP7sj zE)tk-OJIW~Fx-~Fh9wC++DgFIN7O(wZ3&E80wZk+j4nywR4W0k{#X@uwDomZb1_nSxdZtql9xQjm8++8l37Ve66-Wyhi2ij7=8H5z3+fvxIB!zQj3V4Hf3J2R#koQR1)NMgUkG^Y3 z3Qw0Q$mzt&aHuT>?kFXN-Ijt3UOg;=1U!?BWSL&8f6qT0rKi`$IcNX^cLbW0pOQ0xk| z4ebrJEt+rL*o>NF?6xW0z=Ba(ca^${8p6`E*^A6d_@rjsuz?l~z%k?|iw~TAKojaF zXM6*e<=ezV4~?hD7uAP++2NGB*nJ|bdPJ^gywISXPd(ItJ6}}hv42UIo#U&fEz9>B zY4>Vrrz7pqr?g@7Srm7@Cnk@qq%9Y%YjoCu6Bj%xR`9M%${Y47b?7SU;JIMnz#UfI zWsqAgmN;u!ttx!m6Blm^{(RdLA3&=_CFF((d2Pg2s5Z~QId;Y{HeDZm?>YBCEQiK+id8>my zWlIqQwiGeY*&YMlqj(>kZWUX7?ih7a(Q%8B(yZzgmXZX>nF_6ohXE3z!ajRnv*%Me z&eN=-C~6N*=#SjVkH`m$_A?&MV#FVRruE}|>qojg7c=lBq(9?2Fa4u!X2$HjSX!sS zNlv*d?}gTP^jzgwzZ057l31_ds3Fg4EL*>MpVU^;+L0iwRAkD+Y0{ISpX?U(mHqgc zc^sF%0oGPwiPc{h=P5#EEuapUZ!4^$@qh4jAd%2d`=(O zk54WC@u}92KiB%P#XLyjn{kjdjCp;LdCF2n{Q0GyQN*7wi-;obMYQVytrUpmSVROO z7jsbgr(31?h2=l~LhHw0Z2j0O;xFpQqD;y|W%{L7JiL!(N>V0hEDB&Ss4W=+lHTSJ z`GPj_u-LeYKALO2$Fyo^>%}ytY)dQy7OYKz=_Wq*FpeXi2$RyBYuSlDc3~X)d+1^f zyn?x+9!M#)nxSqT>MfgZg@P1z<6m4sBx^dEb8l8*E-0AO)nZQfF%y4U^`Tc`a)~+g z_<}ioI}$8t)+%|^rDRSp5yhx(V-BiZ>`N$jTVT$X6`8ZNAO&;&;tJxrCf8uG($IY2 z6?-jK zX5X?nr3&vRS<>uZ7N=C;-RMf1^<{BN_1(>?q&cuGPN}@R;gmE7m&GYncQ=ia=Bj0J zO2yrcpQJgoEKaGmvlpTBy{x^Ms#&Z5I3d^KsZGHw1(a40g##*uFVXo@ZDAMMo@8nN$g5r-6*jFbXL1Tmcw`R$+?Ylhe5 z9cTUnn(?4iWC5lkqa@Vj49)Fr%VHGclX5 zw4$`W|4Qro-&y|S@3emWYU{^V;$Mx4Ylmk?^5XIcFLp%u-Q^K}mk1N=5OH{z6n+n# zKeFdv=u7utFxQh`x>7sYdzSiC2ig16j)ZR09$UT0dXFY+Rm*x0io7h+SPAbp>M-I4r}5fK+BbqA$a|6c=0#L{*&JO@w|@vE`J|5hc#DpEtpwpOe9VS%qy zkgVV@RI&jXT*xf97G!2&Kgp_;DWt`W!sf!>k6UDT(Y6^5{zO$b*PJcgsjJD^M)wgM zZANz;*6<|hWE&#B2RNIfr{Xj!R>-(8Bfk9^Gtopw(dvaXGDiJ=WYq6QM!ggn_2M-d zwdEUPRIXS$fz`pN%&1El6}~Y>dB*R>sBb-Ew$bS&e`G^rN8%z)ebal@A8O?xGV+zk zu$N)jvK~c~>xv@1N{&g{>QS)6dK4Nq=NighvPZG#Vi>J$u3k+R1X!wK>-jiyecKP$ z?o>CA;4`dWt_TH0B@=jnE6XPnZ`YPUl>aGl+U83$n zCP*2B1eL6+po+fBdKS-;=v6sC^uX3y6yx%#)EPfcfa!SGor(1>BjIcciKF4_l)XCi zfU+KsVB{Q3z zEjlR%=cp_OJ0z_W4IFz$TV`A3gXqgW&2{*6G;bVo@~B5YZtEQz`33BQ7fT?TLjs_ z7NJI$vj{dw{JhKnso<-`g*|p?AInpt0+$(Ch8&7n?(#>n7c5yrFlV`XqIo9$QMxTFK`{jxvViLLmK=MVvP9I$4fh>;>-1TfUF}E9Ovsgo ze91{GSIvymn~W9N+1i^zrP4v`)-XXxXqZq*4HGsLJBEod-bRYbsnOEv{cSz^{~so> zjt>2;4wLJWkkF6p?xMyokyPXFSM0cc{j=RXO;!7JNN!DfFa-#@HJ{v?bfFKEW13mU zOe-`D?%%q>2O0iO@^JI)f56MqrXamp+VimP_n~JDoXnHsgzCm}-fwRHah3<^{@Pdh zAV*Snk&=2W137-A_$$S{-C`m!-ZSP_i)ly7-y=>*%f!omYYkNlQ8yz5gk8d`_Z~FE$ z_@qzAE;uvr9v_W*0d>vWd&I0;Oig&bdwR*B_wg^FLUeq@IZJC!o;r>7n6-~MIl^I~ zB{}rO$oSF6$alrEa2T{B+2t{BiZT0^#9Uqg`Eetsm-Uk6F>i@6S@i43J&EOHl*Dpw zuK(A1wRU=nr*h+YnY};v)c4P3{d@ELhi9`oPvIS%%?9>P-~OrDY;f=8=l||(wu;~W z{%khH6Uje0n>C2?4`;L0d;j!L{_$+KhL{Vp+1kC2{x_eU&4&5l=V!BZdz0k+Y}P|C zH=C{B`_oVCpUpPxUA_9lvss`2HsUd_^Y1o#Dx;p}nCEc4=eNmo-|S@xUb4)~nR}_X zcpb()hZ{V<8$I`KtndD8Yp7=vVIbQU2D9y9Rd!Pt$|gf2+Ywf0H-|OZEn#go6^650 z!@BIY(39OB)@RdUL-xMV=Ua{YlK5Y?lLR$)7OoK8TyI?E^{X(=E1gBG^8r#Vyl?S& zgK$`g&_LK4p+=a9&~Vrmp^>mXLSx~k2!${iq4BUILKETU2u+4tA~Y4IA~YRtjnGWE zEke7)?LhgiFX_>*T~Fn^!p^|okOR6!Ena>xIJwkj0px z7!%YoywTucw%+Gx!Lbx?&4!(y|5Dzwn6FpS5i?>e=!O|WL(u>h^S+r>b2Gnkk=J70 zKSO9Jj_Qj!Z=J~ozGp4>yFq0vr$h1-K>D3os7@1(=1w0t{hQ0d5XM1<1|k1$cc}U4Ua@O#zOE zwFS5_3>V;aVO;^jwFvJ0-Va=V*T?KWwPw!;m`vlQ$L(ANe;ZHn+{*p$Q`u;^g-hRW z=IZqw+`B%RZ4NhOA#BgGur15OM7AYt&BjA-c0+hyc4L^vII3}nPMr(8*Dvxe$_CyU z?+bnW+aLP*7YBI$9S8&bI~WG}cU4%$ze8b&e;c8}zpKM){#_H+@bB8NmVbxCF#oO# z>-ZPJy*U3fc`q^|NeFGr<5{CuqG|SdK2_H&KvQ0k&1=zL?h+^GP*Yl_NM~3pr04 zE#^Bkma8=K^$Yn15pLF4uhQI`7IL1hTFh@zlUC_kn-_APv|7xk)VMqt5yC>wM&n|B zt7J))?v^d&T*1AV-=+rVfr*eWKMAVFPg!vf&b^z%n;2VYSb9_Jeb;9>MegK?k4BeUZ zfRpZb5~Fq|z28X>IEeu}lRn_2gH9R|>7bJiIcZF!LryyEq#)8^CmnIpxJXBw^q`X_ zM0(IkET5=clOi2=(nC&~66ql)adU!VO^d`rkKjk0G$YcZPCDhJ-6EZG(&H7_X?y{) z@178a?|T&s#E4HuqOk|Wh-V|w7zAR(#Yi+3ffx}tJ4@4;WIlIffMc5xjZNm|2Jw6( z8lyn$^JgN_SOsFlXCu*=1!BYtk!b7!G2+EYG=_l~@wrGemVp@YQY0GFK#X`f5{+#j zMtreCzqI}XWR#agp$5hx5F@@EiN+!jBfb)e#v%|Sz8ZgDH5%kAXd)Hk?0*J5?|(4&9F;j3do|pA`0B_ZV-vD zMxs?5#A3b{iQWw&@k%6mH;Ba7BhkA-B)$=e-VGx0%}Dfa5Q%R^qIZKxd^-}o8${we zk!TeMv2wl}iQWw&aZy5lrz#F)(awoN#l3MO@##qP#*M`Dk?4&ZiO)o$H*O?88;Rby zk$52zy>TP)VkCOwM&fgk=#3kRmm<*{Hxe&LqBm|NzN(q-eX1i6|J$CvCJLc9StMSG zL~pW4d_5Aq$s+NMNc1L)#5W_+n=BIFibQX+NPIgIy~!f+ok;X1i^O*$(VHw1pXNL- zW+T-Bf`(WYh0q%!5}%1gZ-_{IHWIxdBJn~bdP79w#Ypsqh{We2(HkNXFGZp^L?m90 zL~n>lyi!9cxm_g(vXZ|p3MF^;M&cWh=x+Rq%$oNFGQjPL?YpAzt!Ghu+Z%3Tg@tIB zwcV$c5WjsJ#{jnpxlF$Ii=UBS8`>@p&`Z%ZWFN@B0@)8D71w?_03zkqko!TT)*A8v zh!k2w4uVLPHRKS8lvqO!gGhZf6w<% zGeS+nH1t`a&$c385PG47UKDzK^sICMLl=dj>P7UN&~q*HX`!fh@z?W0QS2i6j8Ig% zh(0S6WiFx@grdep^rFyNo~5sEq$e|=Ucic~}|2t|d8=tZF@PZ51i zC~8wgFA2TWLN5zNRf@m9D%4aXE97fJ(U9V=SA0t zLeYUD`nFKCpNPIA6ul>+?+QiZiRjZcP}6X%ROf}F=)_;25sHcv(PxFC+(h((P}G`; zUKEN#6Vc~{qRK?{lF&;n^s-RYm-y=yp{A}_FM2_=ms^-!BV~` z6a^yw`kYWyhlpMhdZ~q87K*wMe|<}+sRx$S+d|P2;;-)reW!)KD-_M3$fyU@Gy(he zl28Z4F2 zcnWH-Q=j0L^smICJqi4HEYMleBfKa&X(*L*qDS~?(PN>`iyq-;M32RKR`dv85Iq*` zqUaHRPV`u`OQHieALrT;^1BQk`S}vy6R}7y1HTyIS459RdR6oYzb1Mt(iPDo{JQ9| zNNy(qcpMae~1vgc#T!DF(| z@|?r#MG1kQDM~1MQ9{v+5{j;*o{1#{k4e1=_-s)U;5Ukrh+dRLbbbD8ED3o0{30iW z-YjwizEI>Sx<0uObF`C0bgK!Z{m%4akuvaGigq!kTt>UZwPtVYr{`h{cFkF}c`3&9 zThI7??pQ-D#D11ujQG{@S|68z=8x6n;P67_Sl-VbSC=-I4mIwR*pC2LEwM|4gCI{{ z@BPo|y8E-~bS|A^->ET?CTt0Eu#9SQ=*m&9?=-YuFM42aScp|(A-0Q!=VN#-hG%2= zL=2f?EZ(CYJmkTH9vt@Ipa=JRu-}8ZP_>stLXSTvLP@PA95TQ)ZPmUc{+I16!Clma zo4j}{5N8E{BIuyb!TL^GovkeG;fH$TKd0GD;OY+ncZ9n3z1Ds)U#G24kQsJN*&YL$ z7R2Tjs|JGD_hRWn&~<_)1Z@;FE@)Ix5Hu!eOwjd$Mg(mVG%Sb*xLK(d6a)7=*S8qe6~=90A!V7Z_CGpJ}%T+^9i9EQQn?U3T2fd zw&+=*8h75Ni$WKLTC1KDs?q7~`m|71DPqf>7kXZ(we2%PpAl-U`>arnbZ_4aLRqDV zEqqa^N>@rFZ_dZ0VhPOiwMXH}&*D7pF^?w6r2* z1Nf%1UEffH_W=ymagrEBFcDo|RjUCt!Qkd0X;nEYgy-~*vVYBJIOMmw=$7ZT_v>IR z(EawFu!8i%V88A+N%zfmk+0UkBv8kNv)-4Jzr#r{X z8PD-@(sR6=_Z%;$KF7=1&+&2sbiAAc9WSRr$IF?}@p3YByqpgmFQ-Ju%URL!6(+{N zuG3*Lp$~pD6QgxBQ^IDvhfRAAoAMqu={;=1d)T=5u;4vx%zM~~_po8_VGZwL1Kz`W zt%t2EyH_~@OGi@&E9c-Xky1{>d8CvxaTY1%WGqck>6G*F=13{0y3WyM_xmPhYup`u zwqEVCwWjDeTWjKeui3iE;o=}oM>963YcyjIR_mb_cB&1|R7_zM_;>|px%GHx0zXl~ zlTN;$z)x0ivm0^vY$d-=K0%@{R`QMVs}g*!l8=T_ho7$GV`0qU^OgMiaJ|FNRPs$> zlf%ze^37qh!xt(!27$vDD|r?&ho7tDdB`2URLQr5Ee>CE^ZYNHS9LE6 zI;EJ)$HTaFt$q0o;RcVsKff{D=-`2TD?Z>>;QR9loWKoyAm4@;xPb@r?YMy(cnIgi zn;blxPimV|IULD%Xk%00gZa(c9~F2!zeRhm0w2od3~u0w{8nu_i~4AOn|8wmp2~06 z?!7fctNi^ze*0%;t)bZPTxZUND5=uILAFE%R---7qjIZ(o@Y_<)fmr1REjmc^UYCV z*2vB`MP*upI=?(hgy8{f|O#tt- zc!2NfGyxo&B7j+w1n_Bs02YlCz@0zTJf# zGdkfq8bnAe&HXYW;Vp!AE zn-_J2mt+u%B}+oOX%$Q3p8Dfc)$Y?jRgG@Iy$aGVKOgA;i zbW?*&H#JDQsg*gy`&&-cJ*qu-Wyz1Z#!Ut8N*${AU?Je>9P6QDkMTFYvI=qZ8e7gD zvbB`jUy;S{N;IpGK~^DytU?A^g$%L^8DteQ$SP!zRmdQ#kU>@+_g@p7%*%G9G6Z0a1yIE*E?b$EbcoV`C(qTBl2BJ9pM*d-rtS{g$nYbuz^ z_9&Rl_9~dj_9+<8zDq&K?olw7-K$_E+pl0a`+$N*cAs;YW6W|}=fWEtZqw|83eTn4 z0fmcc_T384rrGx>d@{{Gr0|I}yIzgIQTSFR z`o{m*CzUk-Er2BycVN+k)>9oa9{DyO`a{ z$UGYETL?d}82)znz(V+b=C23C{)KQ5;BSR{7sB@ed@|g#5dJ2>kA&}92p<7B680^G z2LL`1_AZ3K0r10N&qDZKfFBCYh45j3!(nbA+z;@BVRj*W2;k%4?uGC@03QqQUkKj~ za476v2nPT@8tz&MA6%SgLP?UtaS5^>Zko@yv?EN;Bc}$#j(HX~t`9fQql0e>x6Gr1 zZw^!Q=-?sTI-doWu5O!02hYRp^I6UWJ3WsMJ|5mTpN(_cXXku&L%1>Qn$KQ8cg$y7!}f6Je6~Ft3;nFE9aEQ|P}UQySdsN8uC8Rg3dc{f9tsU*-N2`itXJcp zN7ifP6gSVx@369Fj#Sp`SfwKC^{icy^#;}~$$Er!F0#Ik)i1K%$l@nij|FByvOdma zAOVY1v8&OJwbq@Fz!H{aj+X=$sZsSNB7qZK$2rl}Z`0pvx-o{uHk$NF7O3$~_Su(nszQlBXvtozlp3}`CJGeTHSuybbTE6Dv?^L#NS zGnHvdW@^=xOieT;QwL4SoZ!)vZ0C8>K#4UaQ&vsMlu}bN<t$qo$o1V_69|z0DZQ zLWyZ~#@I{8l~~gPjj^mx6#8L}P7E?``eBW(48lBajJ;6^bGtEin-G{}jNK}P z$=?{eT?mzfvBuV7o}yN}nR7VlG($j5rU}qzrU=k(CJ9W}sY>%12cxWk0Ig_@038YU zzd*@`2`G~$FiL}EqQ=q|J0;M5pcre@&7L>^_b>i~ul~Xx|Irl|`^3Z!f_T?K5X(9U z;#3DgJ+FfxzH|`8jt+vjV1z%Q9EW#R&n>~vF2SEzf}dG}KiZkxL!Ib@o#*cQjuJC-}P&aup~VaI}F zYaQF{*c!(+Ikwud>m6%2Ht5)pV*`$@a;)yys9M`JrD7gueYV@9SZ%LlqmEgn4`)`} z!X?7R_eo<758vv~N;*!d9HZ z6D9%8jYxM*m)g8!21U9PG?4BD!$^065u`i87}A{}Al(VZk?sT&NOyusq&tC@j|irb z?gTSP_Zs#K;O<=Op%Wh))j%{^vK@iPAC&Fp6Fp z=no15&g9ED!j?ZMj6{tXCcpLigTfFsNrQ>W%(xB;V^@QS>2g?qP#DxEa{_{%KPZfL zjVmVDHTr{s7%;KEiD`mAD98s5HKyc-{-7W@Ob)UCz=T7vZ@IN*C82=%g5{5Z3s2P~kg1J}P7NX|ZI6 z#^(osh(4f=!P7JDsl(q4a1+-$GO zBG(@jrb0=ta4U_^9~9=uQxK+Td;TCWcOuZR(AVe>0&^;NG-0N%)*l4sT4WrydP9E@ zn1hc)n55nLgTUO3*b6t&?EFDs&OQQR6xE792uu%$JJg-Jl6*xWqL=bX^4o2K}2z1KmX)$XS~?aOip{N z1l>!;+waAj3*A<{xnnF@pc;3Uj)LQ3*eV_OAC;xU=VhOMo{Qznx=EQbWvqd;%1V7y zmSCkkI$<`duDmaa|7E4xo*nZD zt2`L;py9!457v0F)`MXWw2YV}-1}j{1`kF&xXy!(9*lV~;en46E+4V)20ggmgH0Z6 z_8@qWd60Xs#e;DVZt&nn54L%*)r0M{Jrliii^UJOk`rdVz+1r_@W$S}DS)%rCkq*9 zTF?$b>Vjvj`h+-gF76@Y?*(Hc$AXzmCWFTql zh-9E%K{JAwj%5b}C4yuHV{v_eo)*o%F`0d12xH8?jYwe3zUvUXn0+J2TFgG(IDpy5 z%Bajf-DzNE-&&b{y3+u&Pj?z%_UTRo%s$;|fZ3-z4KVvwA;U2HMhmk~n$mVzoZFfE z$$Bd@1zB%n-Y4rDne55>24;A&9%ou7>n+UXWSujClQp)lvJOnuWWAaBnXET4DUX1XzxY2GVrI_5~&hvmWS#dHb}ftk0Mc3~ti zGu8xfVK|bVNSnrllg0-jD zbP1w$X@xgSP}Zdt*%oePU0OlSf|Pa1B-&GoKzU!QO#tP5tyTh*@3qE)@#l}E$ZjaCrl^mv;YrAR2G;Vb zyqG|Na4-_Yi}#`0e1oee~@2;x)90iM;6hOA7Z!}xeH^|oX4GP}Jh!;00fZ`?vP~4;diklQbwx)02+M2#W zTGNMPs7t!_n8NvpAof1#Ll$Shv@3%S>`V`+wD)K5LTor3QnBG6KX*wtOq;LLOZoZ` z{HPV4h4$^CytXqvWNoDg2Wfj0!#la`Mkt;52t}afGB{$P+J={0t85$@m+Q1+z5d6m ztG)D-HILy}tmpZ<bCA^ zKZKt0C!Q|la#MyIK@iMqsyw16o$eRy6Hn3mqSd#SQ@r~bDG*^^`AOPe0LfDG?u`ytoM5nZw&G@SyPJk!OpKy(Ez1rqe2 zcw`XrO!vk@L!JePkZ0o#AHb$h$+Kw(CC_x(D^$rd_NLVJ!6eeC zfc)o)I@ZEr zkI##SG+PE6wpAN&$+}ywIAgys(6uS+EY0bXHsU49ff(@;~S8k ze5S8@#3OBLG8-^38TY{se?UJ}(2Yk%$4V5BVtnI~(R&#m?DQqM8$dtkyBqM6d$O7- zzNqSX1N16L2lD~4a&tll&C#9-W>BdKrctm7rck#DCQ-f#bPW~3IEpzzKusqYLun@% zL4_w6MxiHYpxzSUhgBuCm^CW{DYw2=nxFlXuYOfc zwRgjB{NYSCRHs_n_0QcDjZL6t)Ro+=CP0{|3G{GbY0<%ZjHelRPcRMd33PWM!6dvV zn1J^LS|23{@Sb1{-V=<#dxBwjPtbt(1OxD%pcmc~)G%HMl58_gkXRFJrb>OxDeX<5 zR#Ig*S+fbUma`_XrnDxowzVd(#r&PP*2k;~ ztkYQ&STD3Dux@EhfcR7s=rK-fg5D)fu*$S1n!yLb$IC(B{O1xw4FXF9aWz0pcEwBw zQS-2g&s3A^9V31L`yfPqMwj`JppZzC-NO=E615mensk*8D;H=o$fQc9T^XhczSQ&d zRr0I)?VFfTACECobUQxc2OODF)0C2|qWX~xGddFnKjxM{b25{sg8>8!h{Y5&<|^K0 z+MDoStg1R&M^z~n74oWD0;pSF)rzXhWS3Y~E3K+lys8vsX;tBvRn^K^QB_%zX{#zO z8ps+|6+wiBsH!RkRTXDd)k>^tx7y%jUa^Ymn^r~93CfDf#%r1$+=VXVdhplNv?4uN zI?(Yv6*~j^K?=hY(sz~7AX6EEqRME{u;xyKP&ODl`gKebgF!(PgF)k(7z|2|1$mfoQp@pDL${h%^FX!2Alqy2hB>XgWN6)sh!4;2celo=f_ zPNf&s>s?9n;%)Vx>#NmFbF7>qVw;MSL=~s%MXORYS8=Rp+=5OfjmCZHoB`G`iR%qRdkku%cIOjLz+Qds^iP_RXQO8x( zJ_R$>gkYMQ5KK`Gf=Q}DFhMm4#;FEDpc(|a(2-z-Y7h)l4T1*MAQ+$;1ie&)poY#v zuZKCI`-@!dsrokNWw2|#)bU|(bzNP|sozKDwH2W*tXn`u8N=O7mVd%D=aew7t%v|c zcY`X<_`LQa)U|a@s3;Tj+Kf;a*Nvf~OwMaJLS0>#hl(;aukDB_D7r^fl<9fxM@&P} zm7=1|%xgnJLqNBSin4oNdsPetCVHpL&1z_RVXrN`pezkLs)a^V-YP;LzQp zq8ymlwYk_;*5aZ2RNgHW^EzV~hCt7v@z9`ofxRUtw>a)l6}3@;Gq^Qq_a=dQ`>S9~q*(;^IoCoE9_q>AN*&n~@t*S-xP*6@17XsNX-po&s{P zSd-BF-Z*b^!)9Wezil>>xEJmXSK z!W`8pj|(}BMuQPAg#ls88j2Qa8q9a~*Hh|E+RG-kbWYTJG{xHN!A#+6IFiLOh#$D-lJUS zN1Gc_i)=B)n1MZZNaKzlHA&X*u2f>@!nam>nc7w*OIG*N=Nfn9P_+gnRZx)WYurUH zl_aVEe6`ZcQkhC<-G`1Dm1=t_+GsV|0A}mt@)=gzzRd=pdNalpRI{4&B{H!kH1AsE4!F5 z$$&SSOonN-RjPuX2S?HEW*)P`@))=(sC~)2PX-?BEb33ms&k})!E3`Rbmdj+$63_| zZjnZR@GturKBst|LJ79guzR<81)dbN%EME63}~&ID_=%qch)tKBz45=zf04e)9I&O zc66(~C^73-Npp%z)EYli*+_HC5<_udNr8GW%2O3E&DGLeEo?_Z`W}EOnCJ~sM!xig z{_iC_5m12WosHZ~Jl6TJPDIDN;U8Lv0($RZ(!v~wDyl)IqAD(xHbR31ITz5J z)&Rm+Pg1g5dKD^%J!kpoi%FUu ztY5#e5vbJT2#l$>m#IwVTOEW-KMul}J_Y=S2co`SHV~E0H$D)5qraM--t}0wF1(mx z8sGEl|M8`Ff8xxUmuGiX+4d3oU;h0|PyIG%0A*42|N8u||HliUtZ|xOkX?n2pOD>! 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 literal 1558390 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ⅆAGe`^A|V1HZwP<4^Q^#G>e->0g~`aASXg` z49o(DiV2RraErzV!C|t=@%%*u&utL7^{gFSRoRhNPtjsoES_QY zjp&}27-=Czz^T5%wvt}OZT~UaQp>z#az-3z8&eOzH>8aj=wecPC^Kg3wU#OlF*J<& zdW5)6=bf#eHfe?$(oZb8d;NsV_P%}^&HL%m=hrjFZ*(I&I$ZTklYUAji=Lsm>KRZv zkxZ05g9mKkk^Z8W3FQIMur8IdDKDjIqBUQZ9qok^tqHK4P0AA?rFP2;PWF;PyDCf1} z2mb}pK=1fE%FabhYHI8NOr0r`vB+D^-e4(mDvjEN<4O4K=aF=$_8;xyoX<|rX(Ng| z2tb3g9AgQ=NFuKm6RyfpR~z2}G1QjU7qHEgL0{um#@W~+_nR`-n+xuHO5Zw@twQMO zA|+}Tw<>{D8DLc0;kFHE^o?m<`(L8h`b@eVa?M$m*&pVVSztoFZJ1CG(|W^%`ZaA2 zV505XU*d!-0vLY|1-m(yYDfq?2vW3sXi@HCnNqjXTW*t#T&V zE*dOESepr;FPjN$3P>v4#+J;y5elp%GrIJP?Kz}JX;!tvqBl9_m5yCU6z$E9Oj3_| z_}V5M>Jm&T#qRZyO{3okOi}JA{A_;{ud}IMuQ!?=7d6&KCMKd*yE7V(`N4$tAA#I3GXcvjp*P$ew%$7@oF z=>CeHWuN!sonG`i&0y?kq}2iQI5)#5tdLsS9k{Zm>9~wX;lF@X z$U&4_9_?;9FuQQm>);L?-FL6sLv0~)TC~Xw99%%fTTUd6N7L!!Hj@@yduwk#-P$*w zc02GHDD46SEVldfn9)}QS2lb#x;yk$=_dNBbi4ZUx~aG_43+h?q~8XH?@7d@OkqsQ zPVi_EV-iT)WaEy!mRK&pOa3 zI#`t+kw*G3daalvQ0T98P->kz2@t9&_~)y2j4zAh>B4%qf4^4Cfg+qBPWWxRG6v0r*$w38CivlmtRs8 z#pRba);E=3IFi!bGo5UEbAEKqieuRVCVItH*`_GIu={0UUwmn`y}A7IlIiX?vB5?% z)s?oK-8E#@=*dyP+jkxhUUj*Egx5kwoCIc6FoRuH|RRg?1j+WVxZC&NHUD$|o z2u)byD#o0pW6^|O#&&M6@-X%=orRijVK_uWtfpM8bC?@jT`;Sc#uZ-6y;bnx@7{3# z!~}}nvFBNyR(Ge^=S5yknRT3nXnF_jipP0iDN8c0IHP*pP|{qM&Tw2FFy0X!Be*x_ zfx{81VrF8wjGbH~7tKAz%qq8wpe!2^2}es+59N zDFv%i^OI}9W@q1lCBg&*Rt zS-mji?D7GL#3THq`qYvdq1a|47<^Z5K*sou2Xn>0WM`)m2ENB^y@PhhCH`jcH360q zP_zyFOw%KibVnDoYzHS>K*$tbkb;VHz{6JXu&JwSq{!xzv_f>1ATF_^h-r%0LJ?aj zf{PL;vPCg%vUaF)lxkv%9;3K%Ne7!KVkmah_Z+0hc=q+O(Wa}ldj#PfcRI3Cy^bIlKiXTN&Gy? zso_av%jAg*jAp;)T({($1fJ3h5n@Qw?uFz$rqv4(x=0iCLWDU&MtUJaA|cIQNY0lU zy%1wBAgLE3=*d;?4OhO69lW8FuM56uAQ?tkr$z9Xa|ZGHEh{F4^ZDk`v-!&TRFVanWOH z7nY4C9M>dTTV0>|eUS=PQL-*I{~ItCC1H7I!6Yt=##%2g0{?SSUN1Ch^GjK;0zm(o zdT&s@Wn@wB4gK|!B(GPAVQ{YKvfdl4-gjVp?Ji{ZbYbmE{07m6o#JHug&e2tC}7w> zvXWN!kKA$lgV`QLNQKB8^Z)YS$g!|$mxf9{N~#a)vYK8_Hny^nn^I2lEH303gRFT2 zQ$t9;iskX6trQ2^9>)j^?5e%gjC^@;Ci-RBIt6nUXr^i^n*_K}08mbRGh-1=SqCvr z39>|9V}k5+-a@vOOROyE>QJRrC6-xjGy?z_4j`FiQMAS`UH~QvCC6Z)t3wx}_lC}y z%(LD?8t;-J)o3xt17W383B1r}mJhHe^U-7A>C&er6lT&&hgbOko`iA{A){V4q-bIG zNlG!>1`|y{eC89tM9;op(njl%Ay{kHmJy7W4xQ|-OXF|*U8cE=11Z1(=m7t7M-R+rHR=IHT?3zxAA#-vHe*H&brP>Ye4XdGwYj?#sk1;lg0l^g5T#j?(B2@wc#&%I-dTgZhPGg~p6( z7-U*u#tqF=TGv~=fdAgM8>z9h zz{(<+V@+cIeRTaWmT`ZklgwF&n4;011qa)B;bT>~kZ_3>*X`n3SBny1X*uC?bDyrD zqxG|Wh>V?7&OXp7k^)1Bl@rnld(_&*;|#ra9ynhaaxqDKB#UoVvCK=)JUS_x7}~BA z9eR~&Rk<)BPjs?XyJu{Ywngj$?OJffow$$;N?lYcx*s>KA3?^dvlS(S6!L>W!}$?C zXH>F;X;k$lp9;EOg{dSLsgjKXWp2}9b5;PDy(l+4FR(IwW&0~}B;}e@P@Q@ie;Kq8qj0;$P6j;aXQ8>OJQJWHHV*|*mQmVz zG^ceSqrae|Ds&|C-j;e_RMR3B6ke-8Mo-V~ICK~)!t5J7gu+EQ2Y&i6!9KLKKb4!< z=Y*JVV08fT_4gB25o+x~V~uK}q0jF(TyCo5rfeNC3Y_w zwTw;;2%xQKQ@sh8S#ZN)b2hArRI%DU%%h{zRh&DSM$ODEaV3!1+51SQ@UpW)y$CwR z7Zzol(^P}#FC^ct%I*?uDou*kIvI=SK(YRhrK;r zgyp>;z&c!?cKxEJkNvTEo=bv`1-t?c4* z!LM+@z-KSr&UUNbNTmrBj~2_XgRZ8eP@28Km2P@6^29~!%m|EAE@4eZh@o(4vYXe< z=;D=j1SP@C#3F1Yq;@Tbs8th^D9sBTBdMr(vR{vahush?nHb*zmbwsdUBfD^9AVt+ zjD>Dnwr0tM*_ws1zzxIS9=f@Jp9$P zBzwI|7iEahvgCTT4l#rFibjMvxgNU}a^#FU%d*148GjxUsocM$q8TF#@WY~hSrS>` zN-U(gnxJ6;J`d`13SjAIkH7oCKOPT%L>`I=M!^Gfq+)H{NDOp2eV5ZL$g$< z!5K!vdC7(A#Ihk~v9rm}Rk3X_EVs*WJ?&!KR4d;&uxvK+b?+4;8!KN456Bepy}rPZ zQWD>HKSqTWPH$-!U3Lokz`g?gUH*Yl0qVW{V?rNt2(Dz)`q04#eQeQ3JO9858>+?p zV@4mNy63kKAn8t+^27M;3YJG7Q9a(07)t|CGdliP1336!4dBoK{(%z&3zlAA_YnkB z`~Z2fu*+$)N0_W;bE;%o&q=baH={?^jX5#0sLCmk1;bg$5Fw38LxwG+WKDkLaP~V` z>B8jqd5IQ$y;#Olf9$ToSV`)AdAozL48i``a|dHFKI@N72V=FS>MQwWgR#+I?9Rbh zSqSvyJx`JpO`4Rn3BFP3U4nomQ&(R1%yf5{afKvdeD|fb1=9c=y(LW^?Y>M&E|res z{N!aPy1SEIdR&z3)Z^tDhQ3wZ zRpY@nt{x-os`1#$t{RUfyJ|eP$T*bVVONdEG{%-V0Aj_>{+QSZ|2SzSQ}K(E>Z9q- zLF0}~d(*(B{nJ2h6HwJ|_j)z~tn08_&S!%}rO(n(_%O4AcXc6H%=Sv3T~qo5rsR~q zo;^TOy3K@E`g!Y=eqOKi^VXC;=}KSE7N98IqyQ^DU8nS6RwafRyz>k8snXKGtY^(y z!j+z~gJv?2mA`v6VulsIDZ`wk;|lLkIF~&!50_>!9Tnb@fr0g`(Ejr0TC`c*jJl#n zDcV`wn3aLx#&%#i8Kr0$0kB%7=nJ0*R?OChn+b#!*};q&;ARf2(z)$(If*G<$|P6% z1<#{&aURMjOGhXHEv1zW=0P%+w_9CAe+bjz93#(+GafTJvJF%gGdvNQA4#MqBb`^FHg-rw_voM`tbaryn21aOM0l_F8Ekb9K z!svq0TG&`HVyB7(=iqLm&F1XR?k;LYV8K@=L%5cl-VB3T_`}SM^OHxu#jEF@E)>mKud(sw|aG8yu$cInSU627?K}uK>qWR zGXF3JFeE?Yo&0Gp|FBUwBtPSs{O7;m{B!~Np`-$T&$E7*KKUwaYr{Tec$I(DYaj^`P5VoHe0_m z^J#9o=#+Nd)TUK8Z6?x*Frha3%@cPfJ279}36phmFSG7Iyr$h_Okl;-s&m-38XqzR zVd#{cFWbd(rk&|cubh1;X3xQi)GV#ge62remoxQrZ+ezD1!t(pq+MmFam_S*F4OSE zOv8JahA&|n-fh#c&8JMcq8}z;^)<7yIwhZ#HOcaoPr3O7%yg_-naMeys@bVEEXdy{ zDD#tqWBcoJS5q()N(oai6iNwGFceA&Q!o@t30n>pN(oyf7D|cUQjnE{tq|?jQ#(u| zm#zuxN0vjmq5`Ff0cgCpP*g}|((MwFXnU<2eY@g!w10M59-#^GwVBFh1xE|B&;R;F z{P(pP7CQ?D&gLby9jo1`x5?jmD1i&RSd!={jU=IwV9xf>t_2*zaVdoAUHfU#g1gR0 zMI$e%8uoeu_UXLs_TVa6eTBNbjC%wcdPnW;9t_IEx_V4{7VU59D(x&-);-|~pSkxY zZHg(B&uz9{RgLd8Usv0Z%vdRsjU}2@jlP(AUImW2gOy+!qD$ zd&rDA#?N!WK#5Y1)bfnO`V*NiWR!tk+f6pau-)Sj!|4lp1+BC)v5jMxXytCR*aJ7W zSwvcRVwEPC6R@YGZGJYtg7_V{Hvyw0nogsx2pj-uH`vs; zS<-AQ0gSA;&yot5zK}mS>yxBy+ZXCjf*U&Ej=yVm!)=GlEM?7=9D6CQgUvSxA|k!b zk!rQcEGw4Sr(=DkGv@%r&N4$fV)YlTu0joU(6C##nX#iKJoA|cs)%b{I2M;IAf*(!-XEJ_Ll zWnPhG)n}JbOQNh4!o&7z6a|r})B8%63-7|Bh!if53v|`F#MUltv>4PV9M~09fmTDF zk9x^&=0^|Jg38fA-lG$)*9z!B8tF4=g=0M$Z)kf2aTeq6xZaGx5YWf$UZTx_oW%&J z!o2WJ>T(g12bMLdlNm~3mrdDCA4EQ-hCb;avU5Dw!nvh`GHi#Q0e*fMU&;8iw}ytO zz1bE!h_YB5iRg`3EOo3x8@|%XP1~T>8>PszK5wK`J61O>(^@Kr&cL#svc_3=3c9j! zIdtG9hmN-#I^jxnfr=bDdo$?l&6o>>kwa&12A#bLI#c2e;?6-v>x3|)#vC$3yM-5c zLp2qu$2Nehz#9$A@n&z1?Uj%jwg&NLWOugGUvRsNCUZWiAh=$yU|*xQgTkETJW!1H zLJKe2j$Hqe(F~)+927>+`fw0u`C(4KAUcLYBMon`f$C=%*z@z^%eQJ2)2(8EfhTugF837e8##UYAGT$TuhY%GRY16wY*`Imvtn3I=$Pg`0lU9Wz%Uqio$?08!_rCVyKzhG+AFZ-hYi}|2>oaBM{ek zSd*FzAK%8Vv@Dw5w>zFp!|a!KQ*w=xVG-mHV?X=a?sz*WP$S^?DiK6gVtK6sMa<@I zHzY?un1$K5b~|8Xluro;bJq*zvS;j~cMKljPrS!>(4_2-9-qpBY~`X@o((Mc_DF%M zk7|pGkeAru{#ai07!iVkE{Boa7*SK;gdIQn=4O9XB*PB3WF0o`L$p%WW!i){wPjt* z!ekrF>1#<;Boj!C?$MujnZ+;ixJ!i6-}dXX7$lgHPyE z-OIJd^!8F#<7T2x{O@b-G`Z1G(-Br~DZ{X&v<)fB;$;w} zbYcg3>PAmJnXMhgRZ5B*rOUa`IfM?AkgJJMijov~3~FRnUdukOlzk4@#_^U?>JQWb zFXYuys?REAkFgHe5a;N-vjXQFFu)j*A?eDjP$s_uXB~}|9^|?k9UHqo$k*NAmhHXZ zDX0||!1-C#vf3&^I@f;4Ss@LjHfJ|kz>Neu6mqyb25NP?FS`kwiLQ&}`U~nI|uJW#cOF$c%T>M1pI}=%|GXXT%MO*EFMB5r@UIZXljp z$A(ZJ^MV1F<0?E0t~v!cLm0qF0nU(kEg?4o2boDT6*dL%2(~OSgI>}r>#L>1+3By1 zYZq5*G^P|Sz55em5nd#&V4=KDdIXY-JnY|!Qd!FNQrYz9Yr@M5)$KH{9(HojuJr0+ zzAEaHU2A_SWgZrleGMr9!^X6)$}+L78p>8vVv)YOetJaAvT(pO6w#RV6HgB$E(@Us6GR7!|z4^i@Jq(!$0hR;Dk>0nv6Ha(Jnz zOfr%wINQ;^0k?G{(%S(M=OP{pcUYbe?rrVm>$XjFDBU154#=q#EyIF~{UD2u+(N?m z$SrvLh?Wzq$i;p*Gr~M9W3gPX2W{(GPLG3R;_2RQkMcO*jUVw_cyi^U zM=?6=K%`ZMax{+|%Oh>U>LOKr;@_fjf@~Z}NbOQ-#mKP=UqSepvs#e&tQISX@Gbdw z&9YEu5ZxU5nEKi}GQZ~gwtNZ5w8AtIYdIO*q1Q1jg3wLasMWCvFW!d!>T)R#FAo~~ zPv7;UcihJ9@7d{ZZqg0jFi%tlw}0|vqy-vOz$z<@_VxP!C%7obTV0YAMj+@apIN~& zNAJ-h-z}4!ZZN)@uF~3=CEnFKK0(*AfYIG06)y0#b0tCix(tUcmd%!!@zpMh3gg$Q zEhLrOR{&O0vxFwbGFjPL(z;AOokSvO9q7$4S_y+{xdz8f+AX_(L5t&%#W7^T>NChz zel@=hY!ridOd7T94v4X3w{FF&=O}+R`$y%w=lvg=gzF#G65NZ@K-(>p$N>;?nD(+E zceRJz+ibcQaI!wR;PulAPmoHha`sRK-T@R4GP zkFwLjD$Pg8IvdH@nK!bo*Zv5a4m=*RpnrTfxa86^E$AtSmHb!xR`R^NmHgATl7D8m zTgfY!l{|sKDy6HitxEJ_+8Mf^^}Lnr*7L%u+p~!NLwC&d@t7PEK2jm zHsL5&$`v=C0kWW$-6A0&8hs1PM@|eaq1(_@-qIN$ zsSLBHzT!(N?}k~U8)S^lP`rRHNrD9mVz^(I`gFM)`H4T1a7>yJ`|H)fG9?>F!vrTgP!J!t#>JpJ6mSyE(1`T_CN2CkXs5*O^ z@HwQ>)jMaatNI+$)LfeW771pZ);jiE*tsqZI~O5f|;5%Wg&eg8?NqJSi{w`-o>d-oH6 z{y!i3%*kt>{Mg4o^GpA=`zlhO`a2(7x$%x;Puzc!^uTrUf&1@|-Y=LOC_0!No;;a^ z*WC8||Mu_g`+xrAM^9e!7azRvU4Qx~e~&zhyyo`ree8exowB(K34|pEulbXSt{w3b0>1LGL-wk!v-TyQsVwWc^rGfPFa6JC2OYx*c z_19_)Wq0b8BY`$J{9~h>Xrw3;Ggyg}fINT50cf`L0#`U&XqNLAeL^;KCb))DS2w2z zoNd@j9=XvVFq+budw5nBA@ZRnF$d$%Ve8 zVU-?BLEFQRUwtBFtMI_hANj@=Cj^+Y_|uzGJ#pf|M<0IpRmV;oKXKryhadm!iDPMW z?91_92s@Q*^R3yR-;v$P?)MBg z5W>eRAgGpo^X|X0ON?sSAN<+31Ma8GeD0^CXrmDh7mFBJfWVlvc&5zze|Ad7JSm#8 zCsLgozBdmTIi9v$ui-lS*nMe-=9TcOdFd$8b92Y&QtudAuog`XWW%!Z%$YN{OK~{G z$yZ>0doce*+B$KZcpX|FIer`@q!G5bN#lfi&(I}AfvWv~`FCG+;=qqzx(KQcR6q1? zJsjc={Oh0jLw$YV{ada+2Kq)y^qojsluR-587OSeoj#U~Qq8fnQ6@Uz%`MYKa?<-g z*F*uHw2mJ?aN}NL$oLyOzy0`$W9pb=N%&}AUiv3#9|v+BDmKDbx3$&b*f1PV{1XXU zV;V?}-mw(cU<3bsmDh196%4!&D;1+#>xTEa(RARI5AVI~7#SPK?cA-eeh4&3v^XJ4T%R7;K@m{zzDuby@PPOuWr{~dVEr!Kkd#DUJ&|NXDgl|TO2yY}+< zhtUkJ2X|hgQHubZ5n*t>%13)X2N8e(BUbRzpEG#K)=B%hDUCq8j8nxusx6 z#p8h8hU2jjAonV)qx4|T(}O}V?#k?i%`&o?b2qI>4z?@YZ^e8de-S8>3BP&<8uevs1*=1r(gt&-pNUUp*G!Fs^bN7BoGcqQ(ec4wd<`FFytu7y!qIPPu<@gV^fGJO5*&81&qS;EdYBW3+UjN zy!rV3I0~FdMtI^kFlq4AbzGF&pb)(4=(WOY8@JlLdc2NPn^}dK)dI7yW|M0?`wwBY zm5iSxU;E?(Y3oCL6;Yn|zq7q~GMzd}MV$vYEJE=gIGMIj-v0?sWP|$-nTQ)tNY%+h zL)t-(iDZ=Gh*w(pC84BkB`%r7$1x?FOvWDIoQzARlNV!3M$;`HTZW>~e~#@&3yxX5 zLWt57@(5|5Sef@`$u<@Db@YJa_wsLp>cw2g1R-3$Ks%HG4?)o5rZRO8tSCW-?9x$v zcp?yq5T=#*kEM}oupW`C*Bvo0>ebhCsMmi1^$K~^%j89CCBpPttFPx!D{jx9cWc!b z)Y^!mzp8~;wA|h*NLu^#Ye>3P;8r9Z<|HjbZHc6VoTMQN7vQH+PU9jfQWP{Eb3KG; ze6xJb^W>_wB;q**k%`v1f2^Q&h_6TM+yv!leQcl)MeERRkJhB4!og7o5brJ3Wt&b%xnP`0if~G|igS0;3Xx$}~h0LUq zZB8b8$sl_|ZAiFetsesMw;b{7@dG7(DirbSk=Of!A%7|q`RieWPI7v0(COFr`bPQczOiUldg)dyUhBjf@%ABp%LkX{)^E~WnrBtgYG2X$w~7uhUa?4J<%6uG zlr;c89OUY(Dd&u^T4yU@u2A8_W+CHTp(0+H`^8JVdY9Q7-<(L?JY>YiqvG_lAq|5c zOC?L7#&z64`rQmDsAnLU8$qJ6hQ6r+17E9&z3^_t9L(WaS{idYsy|V(r~+Q34R8YZR8iB zWw{)4IJJNJop&YSsr`wn-+#{C50;r#k!6M=dO)?1T6$HX((Xl-wXqD{KTCPh{`30E zE31w6U(gp^Ruk>Ns4ut`{gL)wSje!SVw0>M4G|ygS?3O*Tc%snYv!SdLs(fU#O~A} zohH>xS8xK7PKZL}4V%U55_4Gw$&T9$7ZE}%qbsqfhq=hgv&#)to>p@Kh_Q@*(zN_! zgvR^pkqnV1f<~37iW?~;R76{SA?)j6Rhpruyp6f0v5+dES8YCtEl*KUL<6|cjxpr` zHe>fbfQy2xz2JzA0S7J$(6Ul9`tGX~(PRK`4p-=}=CuwQ0Klqc;#PWN2H=G%3{S=^ zay)?oHoTP|$;UO?&TX)lJRj+f3by*d1j?{rPNm5#mqP4zYMy-RyuKByrJamuL&;vM zSB`Hh&Q=zCC880ps3&7T$&@INqLN`;uNR84!z9nG5Hf-?EOA|V&?je7)Mpd~Pt?M_ zuo|Yy(kfTr=61Of1u3QL30%QM7rQbHO%+Pe&o=U0h>ozZdLxqoZtPHpQOs*N*p>5e zA)(lV7A%oA`J!bxY^9B-{nQ63#r@GA9{jv*Ao48(UvC)rnj84KeBf&~Whr7uVWQs* z{Tkl)gk+GVhfaaZ#iNw43>zT;ns#C6a`J%$MOiBJb{U&%XbnfC!edan9rC^bndxkR z)sPSKqK0CS%WH*d#HDMpc0}4Jk%v9_1hr^>D@SAf!gh#08gG}_g&f-m?R)$pXhVHHnOzk&JC z>N-B$U&pU(SjR&f*YQwM$I9wDzT1zeyEd$2W#c+lsDt|ivK_{RF7hU4#Jap}R#y*L z19uPL(1P{|af&XwCMZ}Now{3i>!|CAMfOwY`gSZ5-5=`?Ng1#EA$$Mw-K+#@yx$#uB^_8nTzrTjPy}ln-!(Lld zNY>zfa_tzK+{!)gNCmp@y$q=_BT(Ng7TKVKzv!ym9EWDk6n8$V4k_kRuJ7U*px=`& ziA;HPY~7F9-jdq~XUqH@hdn zW5-bXa0?_)T`S+_IWFL^A$OCidWrL2kEQW_>BL?gGb1_gV|#UcQcK+X(pc*aL>yh- zDrco!`Rp^01GcVP&s*yHR$m?14i2nHV z8rbn*`ax(U_INi7GyA-^xyQXe!qCwx!@GHAU*h_5j~#A?GKV1S$kMwd)X^7|?xk@2 zS+&|&eoQ4x?w_S8jOe_q691O%v9Q$8n>5ndX-}^bp|g+pdKI%$ zP1E{A56$1Jb!Bc@-T8TBcP$HuMF6^Mu_S<=^%L^r0?s%4E~k`(m#k*skz{t@2T_wnM#{jN_(VIBpx@dm0PUlat~ zT2Xjz^%0UNh#nI#)`@r{kjuF1X{x`#QTu(~^)y~RjWka$qk<74;Nt*-0RamUDqyoj zKRlMp!M2JJ$yacSt))FyvYG-a3z1f5;aou5;*Z%i1)-vqIvK0kqF_Grv7^xD1sAx0HnE$Dhi{PH$0k)c5b8V|{3EKU5*$`BPc=mD>?J0fG-E zEjWbcc<_-~qFq2@hbSjmWKxOn1P_t-0ZnU~AILL1HbKze6}4&ore+fAW&d~yTxT9` z%8y3B=|eb9t>*9Y0(9G-*`J`ukZ}dO!$J0)U;pqK$+S5+vP}|Xzx25ed{eu?fRG1! zUi?7bF7E*i^p(?R>KtL+8h}atqi#R`Qh+sc!6*F-L&7c$8_FqlM)95b@k##!wxBA4 zNb&(2JwKH*lXP6quS;ee8lgFFL-fsh^5KsOQ= ziP=Jddjysfk}c!)TGwCE0Bx@M3v%<%smc~k3;b?mbip2pC^&XE0*EWAJRJs;7X%hJ z90XE@%Fz_mS~ZMvvdHcXK%`+z)a=erx6M|6HAX5FsVlXbrU=krP;Z&IB+y8Jl!Ubn zt4>Pmdf{B+3-%-PFZa2(iv2Op7L6ujS9-LYavE6^jzy|E{uL~k8gx7`h5KlthFEw|7F9c$E}t8;6>f{D9u0=t>qL=?HbQ*LDAp+MedB@)#i|`j3-g43XEg;C-r5*c79LO}K~!_I?nd zRU6y0GaY=uS3-}AM%6V4ak>Zu^tJgG3e_9ph1{u40c6<&ca@mHJzn5}q|h#7#G*M6 zo3I%gzdqrl{J_M)4XH&1Iu)Gv4+1((vKj!6ThkHmT%pvZ35P3IJ;tfv018WkBF9qs zd{QewYkSk~G1ehBV9D=$0%{^sU^9iBK+Q{yWHSS4apw^3cJ?G~O>^$Mb474@(&>GV zUJ>j~Mtk4!6~QYLj0KAHc#`LXw!mMGsy*{8#Tq^-;8oCGBq)e_NBnCgl>MZ=IE?gD{uJ8(lhkb?XUX*nU9~+L1Rgi0`II);UT){#mf*LVGlxH_?*RwrPk=8tn z@DevUHC17)qOtsrFy@_tz{K>dYco5!44SR$?2E3`f{Ix~aq0p?o_&El){8|Pt%cA9 zo*N9@vnskBFT}4ls^AX4QGPMMvG_7gx2&tr5Abzzo!*dbv^cAy$xtv3Jh1TA8?Ht6 z>ZuDD>k==NeDjsz9`SSy1UClEku+{?WI~XS5jJak-;5EwSoXddBil4aiu8<;L}P@t zWHBZtso^wJI2+p8BOJnM9cF3oUK@uo`EajTN{dTW_%%auZVeyZvyLQL3>cEab}QAd`5xT2dq}^ZjX+$in z2drv%#gtXeOQmRa*{3LZimC_uvlr1{wUknmi@IcnyEoOdr_p0*rC>wcI*+r?c;x|%l#e$wREhwG z3Vm+IXD$o#$)_8dP>K{dAOZYw1r(zxop_APx!v@val&?9F;a}<+TLhwB*>+#L{l3(k2k!q#1Hj_uj^Q3xp({UnqKGv) z&r;6yrM$XGi8E=Ja_%QB<@UstFgJH1z z2=`GisTjr44|s^kCl%vzU?(Rz8GUL}G1rF5!f7!lwID|iklQNOpNzx){V4lA7^a>) z)G1Fjbo#LweXD7D1jIhw|FbNSlfb{fFwAV1EGr1q8tHr*-0rr*o+I8Rk#8)0U{MQtTuRinHQ53<<-!#+&a+( zYr@Zrn7!UDW6LT<%UovEi8UdK8g-ywvS6M~pLw>}vcW{kY-q-;KC($`X4!nJO`mzT zNz2Av;bpc-%cl9y@^H-+?;48sZ6Hq1SRj7k3cPTyb|n)=lh8c^djz0OBh$R|X-g{A z5{)5ROX|5mPh%G4atgs$s5UJJeMnl%TBchxy@wlxF2>T-7xQu~8l4fB{Q)fJ*KDWQ z)jWDi11(>SdRK;bCrRlHUHZhrCU85VW zsibPKsG-p;nGxn4Wm==9)B=ziCAVC~kWa2pVHV1hs^S&{2kv8=#qc|+c~`Z& zW!2{GZf)3ZIh>>25TX9iZe)+X>UAcS>hl;&(_cN)AG;|o>9XC^XK(j5S205@*QZYpRLm6ys@N3Zd7A!;w?+R+ivR2tRySHv6cU-PbzuX` z>{OZ6Swc#+z2j!0wh&drY&@IBjjGNk>88C*tEOx#QS~grF&G0ka97}QZ5`ep1wbRM zYk+IuL#PY}BtWeJ@{ss1s(3LYD@i@E0;vqRsBf0)1DUA@z#!XS%+&S1Z0dC0rgchK z?$KzzXIlfA-wiTXHbGsub2n62IEV7#kqhk);!RC!mC)h>1_##U(xlbO?J z(we_K6W&Zr;9dfNHkBuBaXNaE#78(upY0RoIFzVc)NF!*8&#vv+un-tF9wfjvjLg| z$IxgjcmNFJ5%LIxh+*SY?A=&LZm~^*Nm~>PXc-#e;*+px6Ie`fE1)f_@a=T5B-jSD zLe8)xHjfxslWsy5+BkzLJ`MJaS;2J*5UT=F>h6}YY-^5`&BoQJjv=mz+gWGut+L!) z1yWUk3eM*fV@Q_A45tJo)47;8M5Kzn+?FBwRvKJ__D8xO`lYD}TT8MpFiGlpI)6T% zKOgZOL7+fHu*;tQZFh`TG#F)1@%0Me+Dns~*(2y=H0f&JG=dP4y$|w@{x>>;c3m?J z+QTGTNO?hnIKx611>W8yI(2t6v~ca8Zn~EF@^h3kD%1_yrRD z90|k;2@GVm$1n226dt1kT>kQ@HU0RaYG5o^Rc02h>An|Lt_=SKIit;dJMoGdA@}Wc ziMN&-UsP?X$?N*iB%>aAfluuun{Pv3UIy{Dpg=YyJ-VE~IB+i)rNcKqCnV~9RAgv;o7gd1>@?P9k03rlgxx`~6tuu4IxH{<5z^2ET zom@V&<;7MDTTn-`6aTbgm*+B5;||{<(FpmkVD+_LV_(!13Je;)tB(AQq?{ z*PqV=Pxcq^7+LII$fLQ~-OVFB(!GdBeX;v;9<{~p#XPEu-90>lBi&1Qgp1uvd9a0g z8CM>`qP}P}myYZ5qizT-pt)a2FF(?Kg(%X|JOU{6DM?O>#BX@>@e_5_-&*N(uSlA+ zGH+opppMY3=S^LlE_+AU>RR$LzFOtid3?p?*DPP0q%{0+7ZhJp<<|v#Z7RPmBtR518AHIUJtni7nWTew1t!o5LtqxYhD>{UHEEKyW&$(Q8HNCw z-+!NT?{~kduk^4DP1i50 z%Hb6kelg(}m&4Ilt9-3ex0b^(XH+=%X(U_9;p~YkTsA73%i*Z{70%5Z$)<8R8|Mnw z@_VKn&IX^tFCzS+ayay)@Qs9TEQjMVLE#$+-%t+6ye&a&TxG%R^SN+^}56(KciI3#s}FrmV_?11!r0ew@jO5<6Sfbv}%#z3Sy7>iY7!2{-;iMWynbWdUAs-Q5$WC}fpt3Sl@>3rb~3AH|n9 zwMdf(FVMn0dm58OiiOLt-1qL2QUqn=4YZDoQTA2mRw zaiaC71G%nZQ@TT9sH&$@dI#Trt)m!%^`Ub(6;?7o2*4<8&@EnNUMGOHqF%HuHf>Wl z#BuS0q5j;}Vv(h4Y4b>ZvFiK3W%hLb^)XnPI$4({6Kg3QxF-~?bWZ@D>+;CL{x zsS@eGz<$d=A#)LvEL*M;TOhWq&VyNsHJ0#x7!zkSm#Zbn=O=FHl99l4>8>#Mo-d`+3zX9EtSZUYD=4m0WVXAM$~YDw+ofZTlLBM%u|K$}Vb2)@eBJYn!6X zO(Lzu7kpu8Jt-(Jb^Qv-?~I=gbxO)!Kfx`wxZ|-VOW*%Gg~|&wrry+!amx4^)x6q8a~zH{V^+R{xRcBk>gXiZSH7BfH3Qr6WeB*D(PTptlJo@&wXAE@ z8Wi~>wV?@CZF%W5#ewTi6&D~Xla_pJ2iN-nP4>7jMCO?#{21__F48Xd{s9|YkK-Bx zsLNbsX;`w}QevxHNHP?4P2+U9TO)&FtAeb2QrU!CYXIZT&MC7+Kv`HLB9wA(0EB8H z6T6fv=)|)xEkzt6Je@e&BUIVR!#PoEx7K0M1^^zoeurSWtfW2&-NBX*fTZ&}L>Ce? zeM1E}=yIc_V_ingRH+lD)js}{)KoJ(X1Sz(QO~g9g`DE;JVkK<|A5!=F>x_X05&o= z)1{8^mYW1|=G+$j6=oLRfWV;AtC~lRmYLbTOW&_d)qSfF+0-h3_0~?MJUu2pkVrlLm=HCM>Dh43N%+C zeorE>BjGYXx$ZGZRvlJzM5Xwmk#vI^uG6P6uJS;$=SqxY+U;@L=D+tw_zI(luY&=j zm2ZUT#^5c7>;xdlrS)u{Dd^cS33XEx3|5*2T6Gu!IlxYIpPf*IPk)0UNXk58aC|K~nj%O5 zS!XY7Psm`Gry?u79|3}D(nKjMYpanT@BGo3M{~jgN@{0ctM{&@lxH_a8{FO(_aU{} z`XX!ZeIXN6OIHzbRzbVB(R>Cxs3C1%kT*PGoC%gN5!n-bDNH9!%Z9xPUR6nmoA)K$ z!h-tzBh@Uecyqz^C2n}4H8LO7z35*G6{(@jUMU|H3!^(|9y^PBf*mGuYq`M(V6x=d z6Oe9C(AP=>#==Si!z;EN6qvHepy)csgC5X~C&t5{>9twPN++6CICmy}S_ho60#1Nc z`Pn_xcJH1*mO|Q$q>eq`!WReKoEZ(LA~>-f4W@%wAG(GimnL%Yh&&rcqsL+onXf5$7dO=L_q2X zQinWv&4J`**CGCU)IXu4DI8mom0^?pXL=aZFNw1fx3B|UOs2s)`{O#_(nOD?OJb>l zrJKpqoCi&N$wu4Qm;MuFriLQh@3|{o$ZZ3p+DfK%dL zb1LjELb(jdLG}%Fk=+c($~26SNYS!VX1@yGq}a$D&o=9qj;`t{!#}dStuBj>E%>Pi z072>)KzH&4(^gOHN9|7<$OwWGh9QLzX*gy8bcP&M@_J=(Ao+n&CNg1;V_XDLBH>)L z%CJCcp;Rz&n`@AYZ#m2`14#b{8aOd)Jtl6agF9+?gO35SH;~uF`1tm1Z@IRM@exS# zIiE!H=>l|=);`z#8n@e8^HK6p2rh|TKsKiNxO@~)cN9S4gu}#=^XzTeUzB>=dKY}f zLf+cljAq?1NDruW2-Mt1%Pm&cbbY9c`J#=hy7HK|gV-?1 z`%Qfo(ou>sb>52pN-7c|hCQZ}#=f^qAU#`e3FLBb0l)BX(5qwAdweq-hCMZG1yn?r zp;$#4HpJ)kF@<`0uv!{l5buidRbU+Pn(;M)aa!!gkeZt#SG~^|0vaIG2jk*g$OZiz zJoFOIZIC|28LB-6XL#8X1rNuouwr}4!@4vK$JLdiz(jeLF0d}i&Bjp}S*u!%K5Jq}v}&~Z2487l#-jR06X2Y@wY9}i%8thDJT;r6vij#1JvokOxo zf(Yx14*bo;;?oGZorI|dyLTj7v40=)Sz@quRLo~BW;&1g0x`@Miotvec@^0z*>s1* zJ&yayokxdvBw16rKJDO3#!9v)Nloe?ojgR(1#NK~bkgpjcx>(W4*Ot%3 zY3d<@?4u&LJTI}3?;tKm=H)?$uFqh}H{-=<#0Mm)CC(pHf|Ib#c$XC!2Qm9PHpt>X zVmg3Yve2AU&qh1Q-N1tK>Azd2jUR}MWi;i;521VJ-`Mh5IOcZbK_sshH?Qb`@_1oR zehg)CKCx!JjyUOF_wgdV{Qb#ETrPZ{t)|vFYSMYXv(*HDq^4ZVK3h#X=yJ9;VQO^N znsi{PI=n_y*c-c`(P3b@x&eD@#3MHm5BA2&+e}{c_d47CgX#1)ECl^&(VrNGSYK5E z5Jt@iV?AR;fZJ}1)2+kX5J7cx*ReBa9Ou|NM}(0&HH`T7Q%}=4yQEe>^)_?nE^&wX z#*41S>|=$jV(thDnlOv9o#e!<0xTG_>d>Bv#^w3l*5(dcIq(?53$|gateAKcqN#*#K_H9dHGYx z)VT85^*ffVE?+Fj$z3Qdjxopb;n8046DlFdlCFH<7%jiRxs|^P=dd;y#}Q5*sbM-I z*kZSl<9k>t$b*vTKvlBcIjq0y+E=Q7g8q3U=*kgR zB*MFLK!Sa>dDzTxOIqjTVTM{d;RQV}jlv>VcFq6^zn!!)v>mHBEKs zC9rk3NI6C_;*cV8>1Mi+Ze&GoMLOvQ4unGy74i&bVE!b-I!pb8+(hSqES#(C36}gvq7Pj6JFdIcDQOdl1BTbM?qozd9I;Jq zMBL5S==Q|@LFya~maY<+1ljvg^I`yLGq}`%07}oddtV6c6mtIgdHhcaJh^$gLqO$l zx@#V+7#Y=QH-NZ%DHFJnS;RPT07c0%e@mie^cDojw~PDagaOSl3CAW9#j(euTaP8k zu+zqqpIlLB*}0E^P>Iu|#HTCrgEs22_x`O39oX~e5@pzCez819=_JeO!Uw(B7XliR zG_UB0l4x+08h_pAmxV??Z*$fim5(y%hfFOp@mFMe)MsKO7E>@X)fy^0)guJwv>rUe-0 zD@iQMkcT}RZxD+vvBc7`D1AlI)5D^tOGTSya;Yq_a90**#Mdfo{jjX{XDKUSEZZiY zwq$I~cSpy(J~ig^5g+9Y9G}BBb5xzvx?6Q%S4R(YsUu^acil-3eREx-+OH5hj=)w8 zZwd?v^rPSLAY)MN?}n}{JN=M-_e@M{8RatTrpMzW7%FlPSU7mH8ZJ8%hboA|Y>yJiVfe)gR+KvWgks@RyiS{zgKrasfc7w6*+^R_xdo zU;MD4;o2@9M*iq+zS-JwBE7}KL>V@C?`a?5HHQ|f43Y#&qAHe3-!zRNLyubF3zG6X z-&nvF@Q`!p^Ra)wu6Hs_1G~>R(lpAx7PJ}Y;=D+Eqe1U3j+4qLqIXwz;wEUT-Tq-U zte=SINjsC<;>7X1CZ_VgM0=aSHS-p;#HoaKc`sQ^ZD5;h?m}4EOa#4GP=^Qt^?9u0 z_bR;iJJIG9!EyEl3~Vj(w=FWrp0qV3=vYDe&pzCX| zKBOX)vlCQ&zipQ!xs>wVH%w6P{Z80sW~ujsXx`vOsxsq(Du4%U+cLmG15MQCygAqs z{4AJ}zL+X4Re4vQY1ReXUAbtrdaq!#Du>&GpOHqP*n*e%!xgZ0(=IA+LlV;vGqEl@ zARFNL4R=9hzC~n+M0u{Fr0F2Ay>$nric~1~`cfptyB&4g>V@S257G?GZ`@A0?;Y1M z%=?k1dN3j~5dhkT^LPC6&V{$HD4?|sayGnsPiuR;BG@4{zBHox+TRA0^5!^0Y5?Ux zLlr%>MNW41)Bju>H?+{U$n{1N7wU>xu|=+3Tl1lWw+m&{Hckmlb)PoEJyGW90tu$T zt~gTz&}^3+OMk5Yz87+zCko-Q*}rdg4lVPU;=SQz*c-z2Maght% zQpuJY#>_oZH^wN`vJYLuv$xngA&JT&pyE8DcS1x)s`q?ImkRfOH{9H-2kqahGxia6 zIV+5<1@~>zAFNF5;!R%a**mO*gPRyQl^cg!Tn;TOf8pHGU}9U)?ZVaT-HEu{?ebTt zR%_jEz1wXxTkTF4Le=zvpo_Qpc}<;K9iT9?)s9}YkzblowTPD;7D`ezts-BcHiyun zGqx{fDl*G+cneL4n1t0crk>-z3SRLgMns_586SjNhoFaS@?g7PUoDyPR69-gB_j~N z%-vWOr(j8qFQobw5B8}Phnig(08OO;7PHp9QsZjJ0mlWHmN2&Yc?Vw1tg(;_ghRL* z!n49i!+D2P_^ciEA{Ib6zItin&0Ew+I-s%=&7|w$#U<9YAWa*M{D3rCA6`J~o5R-E>ouBweyz7=Td!9- zX3kY{y{^_*?pnY0w=}!w}SV5g;$(l29UoV&DZuO~mSP zwcjX{m@*CsYi}mgZ1g7m93@%@Qp9WzXJPwG5}u-Y%8q)!Y}5T76r}(m;{-i>+W%fo z(Z>paa5l(T_t~DTgw|$u5mP7n3Pd?Ja)DjR^}8ov&@Z)t1C;>C)$U`N5R|+)VQjZ)Vtv68}m~S62qjqr_yP8C|uXN~29Dx^gqP zmz}pAfyf-P z+omFxvtK?86C3|_aS_W2FCUf^vHc=8En;^Rv6mLHFDhbZi`bn-?5-kqcM-d%h`pkS z-CM-IxQKm85xcL5^O~FgJ)mk zum#*vCUiX5w}Pq32L+r@ODzDBaHy%WPFlQ&@Ttw}gyoP#AKN6y3?{=%Y~$$uKz4Cj zWI9);-09An3Qs0z8vBSzJME=YY-BalZrWgx-%2ObYJVCbaLObDIcBXVQ!LZus9*2v zxBvi`{eUFZ5i3gZYl&)I5_Q@ACIC0+u;fVsti~ z<%pUNHL{5-U1#sGHcEUAuu_ChsXW(XvC7aS`LutV#+u57aXb=iFe@i=X5#c|8$krR zt7N^D*3#E3CDRB9;0*LNB(wmym*B0tkK)!7j^X%Cb#aE-q!6wJh6|<>FG7)M~lp*C_HbWtp`ssnxRM z*C=soa`Ef70LEp?IcqsntL$PIyN%eb*9So`f43RpXa9-b&;D(Naq*1SrQq{oqEFsn z{^TA{w+{6-TT6PIzEnp$z{8pe>Y(8)(a61woXKn=>vHi@J7XtGN7%Aj#ypatnSeyZ z*RjG$CQQS|7nUyR79v^-)m8?!!UT2jTIrHE6+uGW*%HSK%DHqyvL!(YjZ&3#%1$`e zNtO^ZUzdw!p#h$l?nSkVUj0INw|&?wKCzQKH-i$;fqK(!Khi8aHmf=nVBX*Vp)jhw_Bik`S%{3vO(|%GeuL1=;qa*-7}L*mx2z>bD}n^SW`t z(U{a{r{_+xLPCxtg^Ai1Bp`Ts)d69ln{cO|EX8ml` z&pQ3s@}#9V%$#64i=+P)lO%E1D8bA0bCrHxte-vl*{PpP_0!kS#roN#pAGu4B?(hJ zTl4yX6T<06Yk~Z1E}m8#rxW)CoLAfv?9&ft8utXd^~1SG41V;J=!esidjif+vW1`@ z&RDXEtsh$m1$x7}b>zQ%de`iagw@C;Eauv21t60-xvF0Qy-q4~vK7)zBbT!fOc2F< zLVV=r;ch~y?c!eI|L?osy~aF+awX6jlM35n+i&hSm|4hCx&8;=f8g44<)~!W-E2nx z$27^w42> z9==7>=hdP~;NcGyKAP`a4bnhc@koXl>LTg>DLd(I0soY)MhN++<&Xv)?7j1XeG1t5 zEAJq*v7^vf?=ZYMgW-lGVw{+w3GduyBw@U}Oin~_Sfv!$FjFp>#gJneBr2F2SQP9I zuAsX6+8=!F4@k2m7nrf-P*YO2dQGZkfb)fn9UxCfg*@#fYkz+R`T18pl1>!)_~gj@ zn)zhjb|oFd;|eSpcJWT7;M=?Zso3ze*OV7Tvk9@1hA{5fJ=&injzytRuEAUFO`UH{qeMM@1Z$izuUdx znEg%eEjbXs#=YUgUHH!Tv1TIJ*%+N-8a!*kXXe#u4s zl0{*NP>On^i+ZC)VUSUZdXtNKlSSd6t`zlV7xiX~YK=rKx~N5qLSJ6WHE>Y_i|UL- z9d%JhEeg-prCe`uQE#y*+|`$&?r~A~SQK++DeA2*>aE)D66vVBbO%8T?fYyX(vj+e zElVG;pH78Q@er{TNwr9p445Z{6`8x3TCz^8wsK_K$nQLnV9g3v7Lr(D!eSyVx27ImkKy3?WxLbIq>xu{oJR6%GK^=cRO zYKtle&7ywVMg6oz6@+F{uW?bj@KoZQ??#LI85i|47F7_MMZMNVz1E@%LbIrU>Z1Os zMHPf*QS66nu-;`+1)*8g>s-|9EUF+hi~3m?^|KaL5Sm53-bKBBglOVX`a;7l^%nFc zlK`YAc+j}WeasQFo=TjinYm?D!Lz$i)^H@kEomL znT$5ks(;R~SkpRVZ$nRSu^;h6Eh)E-VcrTN1ngg{ySAv?%}u z7y&BYZm>EhIYK}m6(3U;Izto|mF%Ck@fncdT}=IxZM%Ikb57~b=JVV&d@MBi7|+0C<@Gu;0;UTQl~WYrsD5Ko(Q!S z6XO}V={lw9I)y0f6yq-wKZ=sQQKa5s}MAd*^+Sz4{j>BOAsZ2;plkJ8O;h%*FD5~LmJ?qL)c z-NSg*)-Uu3>2ooZBk>ZlJoKLDAci{>A?ugP8`s_9IWYN&{A-h-(x&k9fN4T7 zO&Co4<}gkCNMPb33`3mx^8JZ}E#~+<9jc=gz7Hk4OL9L5o9BQDTS?Jo$6(?&r_Iif1SWid=r9;l7S_@pe!2${1R&UXxFQ~dgh-83A# zAxi9Klswz*zkChG`IFw{K(=34b+V@GUDXfG=mPbq_mDXBE*s5{`jP{eD?znZ zZv<8T1&wMj!SXUQ-#jQevL-4&*(_{8*SDNK{T9SRCuB@FbdNhM2^8g*$Jp z6f6(Ov5_2x2w7K>a)*1&@~D*xkXuZ+(5~q z+wkh(GJ_E8ybM)E9crw_Y+V_%RV|EV)ct+@N8u|qf88xBGnV?9_E}Mc%dU^Y4Cc2Ddj1{PuyLmTh(80A?;YK-cSexwgPbi<=4LYQ1r)_=dzxcN{6v zAWXO>V&}s#M!OJ2AyROtuD>k%^51yd7BtNYnH`3p;#SDcVF?DNs{{6sRde3e*%K z1!{_r0yRZQftn(uKur-+pr!~ZP*a2ys3}4`YVg*C?ztdus*c-Q*cCdzYj0Q1X~#pQ?48pVi{4&5r#&6Ly<{%PL7&t1h{E>G zX+K79SIw~j6lD9IwoM_IWnW#@aYaZD?J!La^)Mudei)LsVi=OQW*CyUY8aBYZWxlc zau|}gb{LYkdKi+oei)KtVHlEQV;JH)PA!*$aW1$>)|puO%U%uxab}8wizP1Lq9S02 z;y2kU#4|84x~Pa3(Ght6Wf|pg9-BPNVTq*;eOV zG==-#rfBJ)+2t^VLfNqDWT%5A%p7GZgp~4waLLz^YbbI+OFax-pMLU56XVA}`;GeZbw&I-Xq z4gojGk3w*fL&0MzH+W2#;M9H571fn+Z1Hexe{OJ0=5S1|gky^*gv8N61u>Z}hzc6e z?Uy3P{z%1Z5o2`y?BJePm}d#mrECbL?qvTJ<%Vk@0utR68I?vxrBM!?Vn(QR#?wji z*kkFm6)iuBvS64rk&cZcX(}Y$@v1|l{*?pT`776<=C54mp1%T3f4yuQ85u}+G~O-& zURmH&CkZgFo z&#J_=N_4xjsx?kR%6?>3t5y(jsVWF~W3usaOc*yL)1qEqqglnRXxv&Oc3h1sNVQZW zgI0}8Hs*t-T&)Ji^J(Z*PJ~lNgr#a3Ar7Y;FfCfC;qZK_TS4=s>T;Uj@YrMAIh)Bi zHp+gOQ+PXnMUR)iio$(@CIiF2w%8H#uV%O__c_%;vJU?RXcDzGVKY4LMCP!Zl zRx&KJ=dc9A>_am*X8&$#$Jz*oFl?-`+L4kM^(%h1q>N3%pYTbV!$2I@9G#@Ue7cyV zL)kB|n0JfLNR7!Cws5R4o3%x|pWMId@?~5;P|Hqz$_kNI7T1I9!ziz`0h&f+^mZm# zgxlOBjRxX-wvXc(vJGslh_ih8l9@VvN%@j|B(?LtRxTTfN%iIn>tX(U;Xaa|4qZ{d z4qA~vUrv)BEn@b2!?rbxw&jcQkrLH5lB_Hijkt>4=Fu?(>*8?;TC-Wns{Gr>Yi^+#k5hKl(#pFY-h>@1cV)CI=#Ax|tG5IhnVpvw`>dXesc>b%a;ObE8 zC{|ajl~^R1#;MReDQ1=8$-|Wo%>u3hGx@+SVhYUUBe94nFq4nkBBsDhKKhE70yFtY zEn=PzW^83STy0(%f*HTGbgM|i%+(%4R~DGj%F(IhZZmD*f5`;IJnfg_=o&n7aIU(? z5fCPVT7TyYb&(X3vZJUn-Y7+jaz|Jt^yLKqUlL)_)>(%WFy;pu7~5H3%&RI)EHaG2 zZdZ*#H#Aod#h-jhh$FE$pC}|DjFcBS#kfDZ3;8nNr(nt&6^3%23m%GjFf~jXL(Ca3 zYcG^G4w*cpIKmIiXcnQDIANZLlt5NQ&Y@AR=RrAZM(=J1mot=IoS)~Qf~-^v0BuVl z2N3ce*_L2WUCzzz;8htC!rgX22|9PO4KW7e8Ue^rG11D%W=39q4ldg&F%q@l!r(x@ zyvVGTskvMnsZmzH2>2smCX$=nXehw|Ks65AW_vyPbc2j)-}%IZzDEattnTRf)J>)P z5IC*1DvbsE86;x;XkFbHxP6%+ShW#h5t&NgIg`+Fc|4-Myc_F?^=hg6leyF_$W2@J zRTrd{r}qvT&7%_J^LW~vh(eA`LleX5X){VREJjf-$PyX^$_L#z;YmYXXQQ+$Z3m;r zrZT;ytnR3Cwcsw+;5<%`ixoZFz315St#m zLD;z3GyxbaW80xgfil);r73EKgRzimE+#MgW#(IWT;-*Miv*4+HwFNIxIqSqtgsLp%;*?wb-pbi247>jS%oN79h)#Rh z{H7C>VvvO?$%x*8Q+hw)>wft!-4oo0o{-(FKm6RrMHX!eSyo7`9I~X4YB}Uyh1By9 zPTiSlbR~P*7gHxC;9`A1%5ma6bC0z zcM=U#YUJgCMN08&Yfd@kt|G{%L$whu;PT*+M^BwTX}3T!Lz%2w4)xp8oJNwwOR2m` z&;@!kFVd`ry)G8p_;ygd5VV{5B%fNME#RMS8IhYwL>i zns)>((5T*`{L9Os9-6*3Mg1-=k9lP^Gn$28efQ%Z{_?3${Yq7rWQOI>p4=0Knfa9= z`6}&Ec}MlceG(bvTU1MzBdiN-dli+LEVH=r9dj!LS)69X^DJgtZ16NCoy!mj>4V z5mOtlFn5v~=WHc8GcDCr8C#RoGcJE^Y`m-tT>MCD3rN*27axz!?+m+Ce|2p93^Da( zSObmILapF#MGaUfj8mX-Ofrerw${QH@ID(KGPg!~0fouy4{v6=1?54b@C9vIINgS9 z40$taE%^SDZJYDLI;ZxJVH<-56^qE>f?CVbk#7whxmIO8p+y~s=EU=&tZROT8BQzI z#xo=*3_GHxd)qaqgVzefj;Q6{up`>+-u4t$M%WQ;abegIb=(_vL>#GBUhIgxtqyiX zoaR>8OA8w$?1(r>t}yI~yuA*l6x&@GcXNBzcu?1ASh|-L7D{t-LEnX4UDzrenhR1F zc1>ZmbnRSli3_{V+b=-{#y2_tt*W!am}y}yxYUJRFS90#yeGPJ3JR$ zrs0Y;PiC{)W%!rOZcP*^3Rv@IWhd)$0vP}$6m!J9g=_U=aXK^KM(Lp z*W{lE`J{jH&zJFuVO9P)$0t3Ne_qWeMppUfAwKD|{PP+fOw6girOEP&wZLZ{gw!{HW*%&W={ zPOspdg-`k#^EyJYSRfBZy116#f*%ip8?K0%B9!jKVw5|}CXybBpai@fa9)XPN$iuG zQYnM3z?*?9Vk?PUD4mOyXu6Jb>v&GW_=nF!xB;0=){|#FK0ekH%x(10K3pGenN*0- z)gJuWo4h7f?Tx0WIlOZd0BKwHhUjf)(uR3yj2dLIa&uJYm?ny|5`tq zHvMar3+eqU+rxGD`iezKmZyFY>daBrIi@NqR3ZO?D2G(EE7cX~%5uewD`8prgXfU{ zq=P`&d(S;P4Oli18qcAO(?bwuo_qEJgwAs)ILB15Az9f7qonGiYawtGQn@le>ctcl>ixAhx7gD_X=&C4Kn0Yvveh4#; z3oqeRQNly`z_{@Ir%U;B{9Z^4gdo>~hrr4VxIlxROk=2W;jrY`*zxc~Shrkw{u~#| zpOgHBv?a%d^0%Ku{W&hk4=!fG1)egYkc78d`#r6Aio3GHw?}X?9D>4X8i&&=3s_zT zS@VdNva$@d38&7K0_TN0+6>cXw!koePec&>gA$6d0(=sgV^6T2P)suTM9A0^Ttq0w z8GIUZR45mg@M-*TJE0sR;*-rm{BID-O;(g_O!G2Aai>SDvC_*4?Hc1Y?s+AlT)|1K z@!OZ$Tp|W<^Unc7d&v}^#&NGE6vush+Qf4mq3is_qZLLzujpK}PBrV02Y>c9oPU~x zsbRV@g+F^^uD0gHNryMJq&#KUZ?&-*W(?0)7qWZs4+z_o1jZ)q?=~5|Ulc^u8*{9BxOr*kvS*2vcutP*JtQ7C}Bn*=cPtrj#N8-7BI>;VaVnG_G zx+#%DxWcuHcV|;x$=e6PI=Y+R>`I@Z46v~v=||Trk4X`gQ?TM)T}E6^!N%F@6qRy{ z*0>baatd@FtIMdBQ{ZLSJQk}hc%d-W4GZ!VR7sNKbn;WlhK0AkV`0w&nsxfzCbSSf zkZxG$y;6(fD47=D;$brzULbhWY$u(7W>He&jX8Kgt>qx3zesQ?6$H8)PjV%!KhR_QPnt_;;|CRv8>e3 zM*J;Zx#Y}b7$$_4(jE=1yaMi)^v63jK-M*6}eAy%BPd|k$ZrdEq z6CL7P9~1R%z!&r5k*sxCGc#9jGK6^axce05LUm9ghdnZkXw9`u*!xD@ZhtBaWAD>j z<_mEJ%rJC%&qQ5xyaX{$R91Ch_ui^P1?-rr;g*{!quo@g+blqaJkKVy3Vv2eV~}fM z5lus8;Qm=%g-QKplPk%T;pj?&ae*Iz#8qQoHN=CyRWq&qdP!)Z?)tPL#ai1MLLzp+ zbdvw0F-;&7lNuiq zB8&t`P&!Sd&drPAuv0iNUcr@N;vx#?{@3Ga6*s) zlA|X3*8i|se{vfHM|$evhvYj;0tZb}V=0(sU`q@(^lbx&e#*Z^+?7Q+v}zxbzenqX zTGn_QmM**phB&EcF{*TpM@>jLGaX|}4*E?~jTcF1fp7?N3g-WzP@Tp2yb5Hi%*32& zS-5AN{}3~iGB|B1@3O{y5p$6v zT9MHz-cJQ2*oc4mXxig4#pA*ZNVCo&q@BiDAYw&< zKyiMaQ+6;;=8hwfTQt{kK3Ng`W7KRR9y*HV&Ev;N;f@m8{c>p{8eO77kqjAm6S<|2 zSY|~saAhM^Q;~2G5i{MD#J#@@+i3vLJkd9JDk+@=d8YC-rvyj(k_8-CFs9xo8G(Nv zhBZH38y3{>=h6JILPJJzlsAJ)g`0-MO~p`4Yt#mZAYEj0i0c?h+dj z{b49jdB{H<@b3Mwv9%5?rVUfT88h87>>$y|tylpGWFSTt&`K7iUfw}p%eY6U_ z#`7>!9N9N`VMdMTqZR+?3tfygaw`^dt3bDg-`>?4C+Hmkt@6AWLSvxPO6~o1nBRz% z2glUz;=XBdLAFhIEHhE{ey3tZz!E6 z6|`t%ue`7>Kvh^v1--uw+aH;VCfS96Gk%%%TpiX3kJ5SRdUimU1JtvF z++C0blEOvQXuKq};#~I38Ll@NB%x%;uYP!Qb`6tHab1XAe1OR&;%?f>C3tf{lwvyT zMh7-bC>&C|B`oYWG@muHOErb^McWwfq5B3ThC>`h-b7Yk{&CPpUY&fnpl4CLEKr;krq9@BE(5-{iJ$WOP%)`$qWBRbsS4&V%((&1+ zfSmt6=AA4M6C@Uu^T&^-6xZ>JI(N@^8FfaAfI-0qN+>WzcwThdWWHE}#0pcLM=(Cv33cju)*QrnJZYpU1#xCr0 zisAXoOXy?KjH-)pim0Q~li9aExB+rrFB-Og42V^476R#o0}*+cy?!ZSM4E!}uy*I$ zy4dpT!C<0anfCupOi$J(CMKq9`i`pc^mKDNoSv?@)s*lxQJ9l+js}8348-jzhhV25oEA2D(GVe87x)k2HgLPYCkQy1hl)e7>_GIc4!LjvDGSm?dV8q4--)X^}c)z`AVk*c-<&zTpmu=h5jjhvcs zk~VxOZE=MnpvzP|Y4tuI;e8^wIc?DrKw|x^O%0rL>b`6~0WJ-Xbae@k8?~)2O))Tt z1dPNkBBBPNF<={4;P%_)+Ddid+)%e)gfPB@(dl4-mAm@Fq)YAP@-^b_qY`#D_%}f( zhq^P4td~;*_gm2`>&_OT7RS5xxStKtu@>pO zsUO@=R4pv()()sxxNatGe1YHsncbU&zguArJcZ+c4Ufs*ZRFTXbLG?TdEyNQuGj;MOdV zJdNxK1B6+~PiV5_t}I89U{PzAs}U=SYJaqsBCKBNE_jvyFngH)mffmMfxCIEU0hOQ zxU!_Cfd;L#c=qYa$Fh_B8dj982Q{H;@hO<$+ggsRZCnqa8AkT3h?igz%(kBi(d~fO zQ&RPT*9xOC`}zkqWRFUFCyp#)7&wtni^~uR0Foo&?@EG2mzPlKKKIy4Fh(uf{t)?V zTZ5iBs7N$RDG7JDgj}OSMG$A)`waFhx+InL?$#7Y^)hpKpcS*0@P&9OLp3@NnBNS@ zz@=vDXDj-%Rp=p3ng?iz6yjPuuzS(^08r59eJr!E*{St`F0=Ls)Ybq9g0n~^L0zv z2S4@OXX3@D7Ltb_`lK)M+n+o|hg5Gke(1lx>hE6mx7R!&u=A?tPko499tJ#n-4jo+ zXUOn-f^dF_BK7b7>HS}B{`P0Cd*X(FdH+AV_;X8Ny6)5yH&nj&FMjK{e(T@zN_v;> zhF4zu@78_i)1>>~;xGQ@8xDV7>3-(D>EkR3HLHl~A z3Kvzw#k8(u?FhpR+*YeNSs#4s0qsM|DN1rp4iI8>U|4GZk@ko{MDH!EfO#O5sVoKw z=Dg5toU!~BYXzaEQckea(pZ9&WFdR@1dVeg=$tD-?_3F{&y`^2TnVSNM+$44gxr;H0?3nyIJkTz-6nAwfsRH&IWFaLp^byna#rjS>qoqozjCTbk zZ86+Vw&`Y=Ia>$Eq~2xqpy@P*@?#bowA)k)V!;9vi@xmp=#D0likVGWhy3#}#d_g{ z#IMQO=zcO(^eznW{Qwe-tOdHge;s<*lBkcb(@8L;Ienu2zczHS^#6DQ=e}S_2yf}Z zf)0U;S%lK48i|OZYQwK#vL1r?0DTbh&?0aJdeBj@cim``w6eP9Zgb{M^ET5Qq)%|n zbRuba5kU$pnbyWsCg#_i=|@{Oq}Uk*2S{mejROJ8If|T8No1q@16SbApjRZDQ8LSr z90)YgQ^@QAEO#4Nnp<_rit3o;)~b%FQi_Estqfg-NyF}W50Yk4DQ~_~-h8FJS*1-? z+9a=4T2ULN9RW-9w0I_Dl!RzM&Wakh-v?5)YG&Ox=tFJE1T-b8CIpv1P0gl?t2a6>rNXiaG@0CTssY+Ygp9Qn z+;pAV%tAUMw(5P4I<+Efm>#7-wHAu?5T-#^x1Bf}WFi3IMwXT_s=cv!i}ax|Mv?|P z(~$;XkUjdnX$?JEG8J7Ur7%~rMe0}n0IeeW9Vki#IGgeHO8 zNW)r~T(Ox1IJZ1c_!dd!@WH!`aTTI22!$IvAetV3gU0gy;wE z09t5xJ$n%4JGMJmU~}g-=t`=GAxTecO-ay5SC*D?B**Fkghf8mhqwkvc}Q5iMoh}hLEfE<=+jS^qh{vLnmMvB>wsRT}BuPEKD6tl*r83Pw;UYaSPM!2s9eK&8JmJgK-)4@!p zgE_RY7FLh{Psr&%H~APhXa19Hhw3p?-aepm@aCvvD{?>Yf2VqB~vO&F}xY*&JI6za!iGoX4tAYY3P zLYwpHeN_gjP|%>yu{<9g&5L?O6WUP?k4rJlyXa2zW7!ZV6nWB!ml+d-O{K+d;&>Wr z{bO>j){{_pz!fzjaoIQ3Ss1G%?aM+bbky;L`5V6w{vaA?s*7A@!6v?l%&UIV9xXIp z&z`MnvaYrNtR6K_RNo;$qIs%=>0ud~RY{lK2|UfLqk$#Ru>Q;Yo_RIzdn9Wamn!{< zjCyo^7j~D&``rb6)7pQhf%B=8Tw=rh)Ptwe$%W~+_orwGXh=AHH(`DsLz)58_B1O{ zIf(>FRb-sR5P?fMBqA*yX@yAeb;aT?^{IF0=)xoE`X||EvP<*W zWmgt7r7Y&+2b0N%-=4^`U3U7JX_+A>QxCry-k{mZ*OpXOEE_f;uXil#VfM$=Z*RAz zZRy|8?&}Ic9nN6Qf!fEuhQ)mLE?0X~_#DbijJ9dwQ+@SV#r8Uf4Rg^Xb@|H9J2_B}BdL~I=pB!NyD*A{80q-R-0 zNedIHc#6#%5vildqJA>QtPBF)Mz>&1s`vI0kLYB|SvZkQE`)D?c;UpaV#Hi~3d(xG z=v^dUE;shb(e_Ud;zYMQmA3@~d`HrIfC45Tc`{k|B-~T7y%ZgA-&H-M{#B>c1sXa# zV>|6iW-_S7?n{t?${BnJ zh+{Ak;Q%60YN5)d`}BCjt6Sg6GA-zg{dseGO~ zESoB)1Yt5o7FZx>Y5@WgQN@|S06~=BRQbBYSDBQ=B?oFG<08$Zc70t^`hr$fK{1ds z@C(QVbTea94OzMjyY#N`jU0iZHfNNLgXg4QM-n-q~w>Ki`8{oU45=)=QZLx^J^tyWzd;1Nivt~ap#wJehK zhi>_>xLx0mPHqIkR1gtJ4FYNnd!t*XvKHtNxtRiut`Ro0bHU8jc*~+>Q??aa?O&;e zEpD>GQrD5YO*+-5B)l+RJ++|uFd97d@B<6c!>_GqhOxu{%#ZA5aaS@NTm-H8?bsrf zGT1d*Wq$=tM}s8NXGKyO0tGxm(?nY9i$6s|W?RgZ?^xVd^CZzojK>z$FO%5`(XKC^ zCv;^p6*(n^!P}YjH4#%dYblM()rsjx5=%KtebuC`*#TKLnQ(-xS%{AJMb;5)*qng$ z>^d?@Z6Zn!5Zk@5B^XPa@TzLZXF`mcd_-z$V@E^>fS%jrtq4@IIIFIW!eWeTYDKvxPqJgvRJr^Cn0Scs z5koCB91E{vKofBogzyJVuiDela#8%ke@jsTP6Yu>T}w$mSttp`c@oA0T`P(6?)%i; z0Ks{bV`S1fLo!mAmEc~A`7b7o$dC&ics|oLG=I!y)RVJ8HIz1zY43hf7Jg4 z{1@_94kp1&_^bUckp!aX8wmsDQv#L6V)pH*4#j5RC zeK-Vh*>?Hg82y(76ZN1PR@gUY5BO46H1L%pUHU4)XY_CWip(e~^3~>|8iR>u6@9$^ zt8!QQFtp$>OK|g{g4D_L;Pa zu_K6}dCWj=4 z7>DEJ4b{*;AR{qmnXlAPTX{eL3}1<8?7%MfwI4dMED+p3!(r9~r8^|0Jw>~ z^cn9Ft03FRV#5svh!h13Fxif34`NLvdC?c6Hc+Er1C)HAUR01;%~L8iJsQ z38@`3GTbqn0j4^htSH91l;5KBg~U3fJqD5Jk$c|@1p}i< zt62Jn`q*>>aKjZUlv*mG6p}w9l}4uFR?nvHo(m1W^7$4D&W@Hc0eS)B8P-CFI2tNkvFhOwq*J}`Vizxy z3`>YO%{pmH9Xl;v0s?rm;i|(U+|vv1VN=BkVEV)>O)?>A%;Nay)&_PDgvg-Qv$oi2p1C43uCP=kQOd`R)^kw?@@`)X_R zsPBd3QX7q~8L0ZG`92-f!4_kvb>w54|B#DlI;Wk{F$J9&(ZH{dT1V=u<-RmvMLX_G zgLZ95e;dF<*=70Kwp0DQA7_T+EO^05|3 zSr#|WD?9ruxjs@EIP$!FxQof33PdnGk<^dT$7W3`18ngm&A2Qzj@kl3+8)ggT$D?8 zUhv~pUy{Rj6?|+NF0Mrt%Q~iKfbyHSKq|I~hV7oSHqrED(}%lN2a&dM!5C-jnH!M@ zRq;_2-Bj)H#2cGTqJQ4(imD)D@d(B=t_@)UiPfci;Nr)9Fk<-Rdc|^0uKXH)Lf9!P zYT(T}12zr=rmmIc3n=G&%Zws~(V{xCFeoU&hvxMX#Ilg`9R4e=wM=$E1$}6W)W4)Y z(Tqa(UqCN-B6)$jgt|}+Yq1?U)ph6|a88;jf&d_i{3* zJf4IL?~hRV{KI*5o=>EfBpr;EmCgAlLU0Y<+o{ zDajMvs{F(Bf(@CaC{JI`SzDXx+UHp%*3C2yX})l^t1DQ!()i=9@ziZF7yx!t#E%I8>N4y*3~)MBsMo>K9~TCw%K!iq zuKPU<*fjsxV4yC80c02qz+`x+{up7PE;kH348UYC)P9UGP?y0#-G&EXG8pQ|b80lZ zB%N_!ID{|QU^H_lrc;f}&xfIkpN*K>W}`#K4iWR1cyUqg=FwaDXV=wxTbA*Gu1LZ2vV>n zmWpXII*f@ZkX#ikyp#RT9?USa4JK9wnqX~DQ%h)YhE1$$wJ#FE@>Olx>&+ophjuIl z_d8PGFQv{FUzRvqFlU!e+SZr?Ui%o>Y=pEz{%_WyjHqaVOmKUVRTWwlG&bz;nBjv> z?po(aE@7Di{8}K`E5&fn>fzY#_$+RgGEfcapZmvpfK8KMiXoJtL47bjA*&mSfszgncg_Rn@HS zgf-S{Ix~%uK<058AXW9Sb(FqheSu$=kxqW7@y+@gB^g>MC=w%TNThZn=W`Mk0^yAe zyR_X69AW?kVlefJ&Le^db~0=`g?Ds>>M#Xkf1#EOBHvV{6-lte!ke@cQX#T@MP9+j z1eC^fjar2sv;2m0*9z!WKHc&Xgl$)bGBIQkzD*vkkyko4SL%$qDdn}mH4cyilwhA-U*hnGL056Xe z3GyN)>ouh>cK5>tydBFp%nnDXKrWKu{EnAZpv7*i*Py38d*>+TVXCPuxYhj8-<#HqH zxu??y3luZ)GxWpx++YDIN(XeB;S3SQ=#eR*YqP98vESA}5*oz~APM)FagVJw4P_{3 zI22Xk%+gCqi(MH;ES2{68&MtqXiN%^YIBdU8uJ4C*$Wt<(l^a)c-1az#To)DI&+*} zfF7uc{l3#*waZ3WEDKtrbu-p5ys-bwn=*`*RnXdAgMOPcJm{Oeyo{FEsPkQsysQXy&Ap`G305 z%sWb%|Lj6D&z3TO@j^52E@l4Gg=XGc%KUFGH1obv=0CsC%m+)E|KdV3A0jjQ`OY1h zt~v>_7NR86mqt1Rn5nY&PEKgQn%E)^vBXCt-3R(zCSg9iueLpx4pLXE4ZpzjG^wKI zbi3%;HZd*AeAMjSTkZd&5pDFx?Q`y<74c`;p3?IV_4I<_AM>thTX9)C!=G%n?lAXM z$yVCZk^W=EN!ES8o`~*G`#hh}^VDxnXQv*YW(#e9^kD@&{g+|(?XNJA67b(BKzmhs zCK;PJ1fJqU{O%F|yx)DE^q-IV=e<-`%bpEjcuL7T40M0=9^SL}F^$x+Z)0Cr>0RI7 z$~)ZeW>*dtPbwYH?Rq5cG3y?Cl~T9OS=_vP&>MS#-;~b|o{vd;%=0%w#1Njpt_>5O zkFw9E=i}OPnU9!V)u+wURbG+~olelEF1^B?HBnix-VvztBq(|FSF@y1>P6cvrjobP z&phs7N0i4~u%F>^6t}=U2K^~LI0CH4oACh5<4v5n=kZ2dDe(BE{zg51v44>sZ|H-H zJ;5*ZH|g>7{mpv(T%YaGJ;B|wD}tWX__`UzXWKK5d_n`VgC)gV2f$))_sCAm-rgdM z9(y}F04RGK2rheD8~~cVy?Fq1_V%U$0NUFd2f%1=zcc_$d;7%!klNcD1^{bszc2t^ zd;9qTAluu|4S?F-?v@Et3&1P%mS$h|5*{FE1RE!IgoAxGr`w}9>dcTfJ)(uxq|dhq z2JxWyP6MbP$D`0E`Xl+CPkG=CtFf2-bh z#(NJ0Z**_izrWtSB?p3^c5m3p-|pV9oxjPwaUkHj5`L1c2jcs+5-NlyF&uZa^DB+8 zjp9739Y=0Kt-zL|sWMXh3z*_MJ2~l&5ox(%8y$$ldJ9w+Yp3kl?Hqr_Cd;RkIZ!Fo zWFqCmzRKm3B_1nMXtSPe*EJfr5M6>Ms@ZiiE~w}sts4&xfoG=P(P;8-3@D&g0ow3& zZ(3K;0&dUdCO5L8EIdhLqLMLy2EO}8E~he?qQUaqD1&TrE-OEN2-x+gRBLs(au+F$ zz3XIx265D16(38Q%a}0eyNN{_->qc>nzuG42s*CqgUMbenObC#WY;%~S+Y|s1*#wl zLb|jr;tEB`ESzQrhATkwt*0!2dp} zyWlJT0NNiEV%nxa2$Xs%VzsDM=nk5J=M+~PhG~SzjpPokUK4#LkQOQ>oLsV?2VNj_ zTr}>z2UABi19gPMf$3D~bz0vK<9S1PY6?O%w1UP}i)R2e9f4{{tK_X}`5I-rr2?`w zuw|58f+BGJZwCu+lANjfs!3oG&M{xRPRCA72JO!@=(YGA^ggz-^biyg<0X2b^T@*F zgK6VQT9GvF*pfocIOHXOabrHEvs2$(r>g5urg66EI9sanFMX7LX0zzKB*C+=ZamM< z$VmLmB*a*;&V|agubQ2~iucSUch!q#K|47&42wCxtfE7gb=`$#MU!M%tJ#(d&AP*9 ztuI{t$dg6G&ky3=K5v|D9jTV_%IRQ-rx-l(w-Qfsm!Za1vzZIcy03uv;3&lBQ7wvj ztCs$M*TNYVA>ZEqAjB~9usfUc>~#-5lr|SGyWnyeCsr9a_(87e zDjnmmW+yAXpK^zO#p_{U*ytFS$Lu?H%-?1Kly;H;VO$th7~_ge=!ea*IrJMa_uPS^ zu{x4|D}a6Dq~{LjE{nG}$gDHG&2}M-eZqND_7${Yp_=;?*$=3dsZAVLz-ZejbWD?7 zhQK+}k>}16^d^}aIuJvD$ z$G#_+1&3^Zxgf+4=Mu^AkDU80R2}RTDxKS+14j}RG3!F$f_`+8!*!O{{9umbUvvmD zy(e|x;#=rLv}WTeGSX-_i$WTJJKcg56pjACm;oRGJOvxk()B20uw&}|xAc5Ai@u=u z`vwGVL6y?zQq0Kc@>@anc^HVKLzQAjG}V_?M^JRh&Un`3RK4w$ZlADS(ZPdAfA)6h zAo>E{FtFbh1@6j465Mc*jSNe0^FhQud%Nu*qM*IqaS&0`-tIgY?RIakIf(Zs3%lze z-jVF>?t_@i*xMTpvK1c7r5}aA>7d9>Z$}SCH@LTZ5281-uww_K+XU_XEDmG!*4>GO zZAgF>&w=<30wFvR+e0+HURh&~OR_RMw7XT(Y-%72&E12jU?NHQ`*_ff#1)G4 ztuLf+)g*}ISe4hWQYG}Pam-{P4h^N#DvI6(wu~im zGlu_u9oEhoE#fEA&sn;(Ldu_o%R}QzmsAWW`dmk+ShD)Y=(LxwRJABABQ0rb=_*+8 zd?_r#%Q-S<6b*~WA}x=!>a^Z4>K&+UrnUSwq zxq^WvEYd5lo7mO1AC1fpd_rO1q}qEV5(>o-;1WEty+_&pvW19Vdl~#qs}hI?6!M~$ zFt+uuY;LV*+1!-rvPp%jy-*gY0B8G!R*v#fP?6n8*wqRFdH{Nv%kErYD?4#kj`9I` zk=>SbE<19=R~y*f6ib}~(=-PSPpmVY&T zSc3>FHORKbE!$ZdBn}5Y1jx7sS@yFui0w#o%&qKW8pJx*xdK03Wu<5vq={M0sOtXNqLjr3 z6ovJ)HNb$`88_^-l2zasG&K?{2F)9>;wFMZjGPg;GoDeby^#(vP+_DCfY!j|JYxZ^ z=!!W>Kr<)|Ow>pt(7JF;ngJ8{yc&z-_W<(d0aTgBuvCcw2%bEE_GSPwPCS72W&qlo z2hbqHa;F3!$BGL84KgEcuqvE!8bzm;1e=H<2ax<8K;ArnDpLTG+5>2B#QHD;5b41K zXm19fy?Fo)vZm7*SbyuV^AJE_;KBwCAMPPB#+-1dKQ!1BngfW&!2`&f2T)oF0RxSB z0PW2Hv^N6~zUcw9Hv`b#1fUH?-6&FQ@qeIFqTtF7_?QsTV}l4*o>K(eQV4H~emQF_ z`mMsucp09xv$apVCd8~qwhTjO#% z7yTNTbXNhb_y7z*Ksz$%!ECG(j64MGD)K;5_1L#J51`5{NWlOcPaZjdD4?tqO{TmF z`v7Q=(S;=dq2B_)GI`V-c_8PlBo8Fk0>GR+EbP3SOw?=llfxdUCxi>W8mc7G9cAE-GSs&wFPRH&LWm2M*9u839oR)yuO^u#4#mClNMXM8hDWm8Wcv{UaOle-lU#IpqMl}%oB zX9=UqN{9@I_Zb%Sc?URi8Z?VVxpFA8^NWTGTBen<(hX4-Yx&9=O^?Ld=oZO_B3mRQ zo|hKMj4tgZQAma99;vWsqb;Y8{cQmZP>9l}xP+S|I}$i+8_5X6>pKvSq@Jjje~He1)v?oKbyJ z6_r<=H8@O{CixYzYT=ek?UZT7>{rO7)C$>ykg^W96|z*ES|L{rD3)t(g>0QbV{C=& zDixtCt&a7|)2X$M?Jd7TMoB6HV^HJ^WY#1iR>NG}d!{Cbm^hZ@<@LUC!lpKVzuMuP)`6HVUr40+9)qAoTHY{ZFhHgS1 z%D~X!WPI;kc96rRQS#hhHz3WYV?Eqs{0OS`qfFQFYfSQK;cdEfQ+fCT`Av+^qzPjkOSbR37M*fp zfzl1e{2JF${6msin3ctvPG&OGB$-*zRf1*7w&GrGtO5%V#7Qe@!#I?;DARnM%;2UvEF@sAJb^Ky zv{|O<1x7_PT0iVH7C*Q2-dikswvxt&2MZDq3%vlXj}D@IEf(*!f2LNG_*hzs0`HZk zgcL)pq!NHMu4}&_ln`g^8re9^Mf+t0WxtG|#1I4f;TLSlTrf%Y<|kwV2Vy;;2Z62i zyJ6ERvaYS-YE7xzgA&e=;@KIMqL&qwnll=_C~4Af%)2&`sIa<51h!U2I^-W_ZkYr4 zCj5jI>W!5e2>75*kyGulQuW34OLmI{Ha0wvdi~ z5*JrUN9?|^2<0=0H8YN-z>;qc@BnjJX9E;qa4|W^fo`!`x zRwN&j5dpJ-mz6T)0-e7xeRLoPS?Yw2GhH3oaay7?yf|y=P%qBf+Ec{Ygm!vy*3rfT z&-vPk#1b`SmolxrN}SE;fGf_}J4(Ge%RvpFH9Fhle`bR18oHhLv~hYbAQ)7+a)oY; z3N@Do|5Fr8#>get<>^2W)GkkAp33IbSsY%#&g>^=AG~;{P)`e^a!53WoABZE0GVH2 zvBbcw4w%ECM2}0B6R^zdr@qrtBlkml52uui&0)fM2bOQa1kKB41|RFcG+iDz7WY1I z%pAo-7I1XG*0WO>Kq>!7aJ)!URHqzPoA$ptS3<|AUJq)s*?{0l*I3%vVBpA+o(A!U zE@6-GCU$W+{V-YRgXhUltF}F(w+7#%)Os%wr z6HcKIy%2jtrq?gno4rS2?pG+`rLfgwfXam7R+UWt5{1~Y7{)K=YF!;r1zvj5G3B5` zxVQ_@afmX&LvdoNvmuX*QMs&j#!Ny<1K`EM1PhgxV6puice>8-^ zQxGsj=+}NmMNB)c|5kS% z#c=D?#5A$$v)a{CQjw8S)nwyGj?#gxkHar{T!2dyNoG{F~I)(70gJD!KQnN7HT7_7sSUZ>!e`K2<*|%U({71KB6Q;xv2nNJncK`fH zckNRU6L!`@I1bmq-t%jD`)8tP<*NTJ(>IDt8`=Iac*j41PKo&+zxUnSC}Ozw6-pos zz4lJyLAT7)z`S@P!k)0M)uM!XV~v47w9{g?S0Em>Q6 zeXoi#N_&}@v;s{_bmMciPEc$pV5#s^OZEt)O68;xzHxytZk6EUOGdvmsHCUTxGq-= z7>#2)NSo2Nh`OYk<(C}tV}^gCxmO_;4=y3Nl_&AtL{KWA6!#YzDxpBD6G+2o60osC zzIg9GXsx*yb9;MKQmJjxw4@?TQ0)b9 z`!d>AQ{tdlvrMK^y8YmH*Z2v9p&J?L$Y=%6L+wt>dytTA!;x0@?V(2#ElvsgHrPftnbpVAp@-;!K1!Sb!8h;;rb9Sk7d zBP4!jO`#WC1T0?SIQj{m6z+1BY9Toi_XH(#?&2(w=5)K~I}BAKT`i5EYaAFgF_XRC z+bBl&2mpN<;?c{0Kr9`uRjXtB$UVq%#&V?h0M!nK;jA_6YK!G#L8gVHevM8jT%X$-D}>23n^V8*LK zk$=Ky75LunJ`<#9n&<+eA#X0P*-1EUAdrdD>6CsU%VjBbMnIv@Pxw#fKVF3$vGq_I z+czD21Zjn4HE5>fIKnG{(2n_;ww^K7O=bstuDB9~9$!e*5@Xhx1`pjpoZ+bKngRsHp{qgBDAGbS&L}P+(9Bd82wDX-rSjk|m4Iu$*Ij$ZH3ZLJvTJ z1W+%x9O@kbuN5)sv~87k3&hz*)_&PWmR~|>3{7}Otg*FzENF41@vZ%SY*jz}J->cG zQgtBogH4J;3xaLys(xs#Q%YvZ<$i31K!l*$i{cAk5o_a9+ZMg><Z@5>MKQPw^#s)DAq8o%k|PRx^vp=9Nt7%mNMdiwpAbO8VlfK=rW1=#2*BTQ;THl3 zS2*1 z?SgUJd>7Zgl(Ygo2N;4l*%!kCM6sFhQ9gw8F>=5|Ya&*ij8fLmIJ4f|N-Lrz z^L}GCTXPl(0seSC|krQAUfigdJm6{1F&4Zs!25<(z z=-4%hr=^}^=Px~!=B-x$t<{bwMjc^Bs{aIqgo1S-57_KNatJfdIyYyX(@`^P%WM4F z;_1h8I;yJWEg@Xh3BgFe#vdEfq<}0@k20}a(sLDcFR4Q^W~d?QkfL>kHgS!~wVx*YT~wGEr~~UZp@!lo+&I$r5W< z4A5OKIwB~oQv`@i<#pek`ovncSBL;29Gf^t;-I_vfbPIY)@{#M#7V?v;5J9Z2blb} z!re{@pAml;#!yIszu4kWoz{NfE0pEP4Q{WO+=l?2buTg#b1Q$iw)?;OdIk;6 zs3A?v3Cd%M!s4HaWJHkY{!L8S7PZ*-b5UHA3tyZ2ULKt<4$%Esu+PnP?Say5QO5p; zBo!yr^LrnBC6Y{Z&qwFQmWZevSYb}muY>vz!oJim_M04Ydy{tfx9#kOKKU^x1+#d` zSa?7ZhWOpRD6#~KD9FmKISm4}FFbQO_?R_Slrz?BPM<|06vigK+-URJHhQLV!;KoS zW|VpcVCOE9Oj-ff%Gu`k%;hFWl?&~Sh4U=!ovGZ&_VfVTnFeFyMH0PN_s^^`&(J^0 z*;&o-;D`3c!g-eV&Qxw>dv;291~|7|6tTlt-9I~UKXW;*^sFuy+8Yb!S=u{Oxh-}? zDX9>yGXW#Zr^U)Vlj8o0@ecUIweUry;OHdq5aY$}`n{Uc(n8?UBCmCS6HR~*!aNqD z$Xoc7CpZ<ay8BH_!VwcutVkWL}X<~SZov^AEJ$nl=ofxn{~iJK@Q zZ?8tqTI7*xmd}bX7U7u|_t{qeOZ1lNiOu5k0)pQnmIyi#>V9VGk6ef<8l+)F}6 zLvktGF^V5WLN9oG_03DnHgb~%Zd4#|4TecK!3RY^v~)K%?Mwl!5iW8w!3Klu!Q#Y6&;@)Aj0c!u z-LE&y+5n}wKbmhO(3e|%G|veK>K|&sCx(t@MTQJJ0``gqcQHR9C~t?s zoKW{sBKkSkv?JGG9pK%(%g6-7E6%IU+=QZ1&dBB>46yl+6uXxSm@juz3$ZP=;|wC=`OxoR&~rOfJ7TXXeB*m zSHcr3AkP*;mRbG4rYD8gOc`_lFNUK;og&)HwN{kO zrZW$X_-Zi|wKbmXjcaA<;9r`2UQM~X;^pDyH1VHbWp}2lDnqi9;1zXl09#%tizSG7 zF)Y$6i70Co!u$3=tpBMrx-<&^{UU6QDDzSE)VDtR@c)G1=I$lp=)qT+3iv-riVc>HN8`NkW_pr(V=^F+*RSztdrk!SjLTi5MKQJvLM9MFJm>%NT#s$A5- z94T4?%Pn9sN-E8{uFewan<+oT_=yxOSqF*!7ZoOpiVOFs=R_ei$Wu|F!LBu^-H%PQ zaH8eg^irx)`On-CGK)Kggf*`O$KGpkQV5+~y5)55~vfjM{%JSD3Cxr`lI?H`n zy6>0PUqJMm6eNOiL|anhB2`Gd7||B$O7nbRZDBEjpMzSb^S)_(qe5(le`+~zLv3xh zvIbId2V=7&2=@pfkE1no^Bn83OqfjMe)Fb8f|7p=#I3ZK*w3NGV2jO@a`Ft;&}@NQ z<5ga)9;qIoNy`L2qut?owX)Ks6$YJCM{2fMK|oy-s!P?&Aj5VCi1J#Ns7Kt}=aolP zx6<0@PS5OB^;!}`2H2D|1sydA@!{@pAvt`0*1>Twum~QMk@jiKK{F?wmLB(SsB(Gfxx^wOln1%{A?CtcCrB29iLK6#dbP+iN+N>9-j$86Kgtay+TFYJu$??5yD=&iz)H_1BF zNvbEwpiYKC^9J;(ZT{4j!pQKVIC6zVPlgU^1!4d(r~@GRBxQOnRm&pKk%hhPfS3gu zDLF6OTh;zBfyV_SPHY)}7GQehuONwFq~4lRw7H$|CR@Hr*`kKVtSN!Yp2FXND%$Dk z3C2=3h^z#}WEluBBAAiO)m(wk(I8PxOL-?PZvd^pxn6@+o1kVn=V5f6398DDOP2$R z{E(U$K{d*vPi(b8GP@Zp29VrYBdkNKs)IH5*xhL%1|OUpgJKbm&>)jLBT=5{_IFeJ zh%bDJ7+wHeZ`zYfZxoAUXmMI}&tneRl#X%0C>5tdwaqNO0~zs?f*ft~L4K^^VT`%y z?LSq`wLK!~hVZ}~+R0E0G-@#}L0yJ`&~1@bqw%NGGG`mb_rIX4P#e71uzUDHU&!*uu$e7CMwUCE_#@?(1Uca;?C;WQa+wm?Q z8Wr`ID)LD#a)>d({ty#rw>L#cr?M$yDLS21<%w{JIzb)6(8Y2K{T|eO!sappj-412 z?^%`VG*T{DR3aQ1s+XZbEDVHrRzY_p*&~y--~8=F?D0qzKZ0m%39B27kaIXBkK3&cxSb=H(w8o74EM)-(Ad7>8>WR66@Pu{GiIEGw~ z{8{gBnOBSA6N#Z&2!<;gv())1ny}NeVZ5LoKV%^Pa;>JGDs>QPRhqSz7RaL4Jw(4^ znThBUn-CA|w#eJA6dYe9gEmV26psgyKxq2_)JW>B`JX0fKX6+gjoYh_F^$uT3G9Z= ztiv=gCMgS_!Q%8&QjUFMpd9n=Q;E&sMkxSM}x9Za}C+s(f{|ISc~S+^ahsc05J^l>UWG z*R_p8q6@v@c+J%@2{+Avm`=11Eoir`#qmn!m~`>PZDHE*$zbh_jo;ju0t(3efMI^L ze^5}C0J6z}kagU_4^=0tF+^VKHe*?mP{w4+rU-Pf`}OdbF7q_p4LG@%aZlZT=}HfV zGJDLfWLtC(@&%~jJ%J09<>k?Wiw#03Ta*$D#}FhSU#LF|IRmf3r%TBmOm+8UwIw&V zM-NZPTR9KY#(SxZ>DT$!<~@v)88ZpdXi!~zAuCw4bG~OaUoFzkG$**NYZgnRm=H{YHhf4I?#OJUL}_gN<(OJ{yePTeH*hr#h-_}~u{8KSO;$v?+b!vp z!%5eZ^h!(GS*mBJ#k_7fv+8-BCB1$)N%g$mlJ=D9*<&%+4`)_A*IUxTcsNZJ9kglB zbSYJ(A%%K4*eqg8o%?`Kykk|OYP&;;!p_}s=K--^8>=t+i~cW)BKMC6Wx2?^+EL=x zhF>-JUu2f0soLTvE7Fw;ZHs30XAO4!`mS}|YkB&QTP0AjBBpZ|>TS_XNbmaeS}41& zm(VupbDEn>$GvvLf?qW@ar+4w+fzc|e2(c6OI5}!UuON-u;(hMC+fVn4b@Or{jRKY zS2l6i4P0J!En`79?)48&OQia@ygWDspX&eYI5cOX*1`XdtKiwxe5M)EX8#vYuTLZW zA4RD?wK$IXl}0Eku;+y@BjD&vne`N#*w{@iyYxz0srOjoX1M$^GoMYf5t^QduLVwy zijP3ZMVVQXCnxE*KcyOgv-(#CL{XgRNsdOd)$VpDr>1AR-R?w()lgb$~1o9+IR*j_nHJSvO(&b{m4yO&Mza1VfT%OdMsIW^^Cu8}q^R)5q;Pvv=u zM4juU!T@X+mYUVs{|h7RgZaA#Y<9YzN14ajBxjjD;i;?AVdHIHY^{ElAxT&MR^C*n z4+`%U4M1V9<3S(C5;(s_4aHJ0JyrOdoY zy*dk$Pbtd*UrWFD=tl;Y8aUlArY>d*6eA|>Yk$N7A^416vW(SEz*JW^TFt`6 z;Zl}W{p>f41UP6ILE4Xx$%Q)hdv2t{5}bCwz!)J2J_mAPaj1;Z`U>m;r`0SngdYs! z$Sj-Ap5>g?S$b z0uy|60$a9fLXOUUzix~r9P|LbYM27gzAo)+S)P0zd6Pvw=JRk08S-dt=;uK=W@NR& z$2yb&glpBhe;Ie4ZpG7nSQ)Xq!)UdUM}?bp+Elu`zqihCL>ar=FthCJ5W}*puVmrS z7uvXlXFnpI{fOVpj{Fj+;1Ze2nxA8L-XJY;dKu?Do*zzlL_|AtD25mw0dg(GbzL#z zrKoa&OH_MNSvtD1bRP#ED33!uQYfh&^}_dR6CkTY<>ED9;omNHA?o;sBFiOv=tAfW zU2rEDZTIQZ5kTwZlL64@vDNHn>@XXy2GqZL<*xaCjz=O`xQh;{`i-UP2c>-VNm0Fr z1ck>cVEc#*Jyn$&htMggqJY=~l2!rf=ny$PrS^a-|VXjV=vhb=;3> z$#@^(*nRaQU;PMkZ~h_($aD+*&e<2)z%j*HG>Az2)j@<7$TucqV!u+>YqTvomSoEn zt{3{UjI_W3D#oflil;!k;wkWbr4M*Yy+3E*Da>GaN-0WnCxxe!qOc(#3O(|mAa<8T zp(P$fiTN_M%2Aj~5XH5MK`#8C6NN^05H(E{gW-7!cSx+q+6R%5%kuq<*H{dmy!tU& zbd6@XGI9l_63vvgcy6ea`}sLfF2{Q=kpym|;Q|gsp=+!n z)|6|kB--L4rgIH~vE|neJ>;J#QrkuTW)aiq=Vv2L)iZQIFrv-_(_A}`!+TO2wnm90 z-+Xg6De+gbZ#E5CP2ZJG-E~8@`G1~&_QLS`WU>0ciNoE2IJ{|keJ$1hXhjaw&5{X55#I z$!z-CLCv)@){J|-a?Oo1W@ZPzL3_DYwt*cv=eTG$vyHHe4cW#Fj#;{*vO!yUvTJK? z+HU%SZ%)=F-2+ymHfj*tw42lAVV-$IK)1d(eBU{fy_C8O@OVmr$!%C7cL_@x0%3`h zfXk*@i2na-vL(lb<$~=|1wDFmme6bVO`#G97#2tqA%6i%PW!*i!b)wvKk;Yiq~AZb%?0j+jH2!lnJ>c@Pl!YR-!($S!UhzIK8jMK>7y?0G+o6VNHwiB z#KLQ(ePW4IVQ<=FFCmbMEV!!gvB#^W0ek$aVlNTGnC2)-^a>?`X^%b585l;kCmv|e z32dI7iA=P`^jU?K$q^_-z6k6{da<))9`G)B^m^C?z_@jMi-H1Z!_dU9jH}FP28}Su zJ(CzQPV|-oiXyYP=|;B+W%A1&IaglKm=hFSCxVA+J43qdao|Fis92XOs_n{gq z5TP&QBFi2Ar&*Ks*`qlexwm;E6DJ!7uIbsan;yu-xkL=ba$2S*Wm7~&1P=5Zdo$kt zWYLnjm7SAmgP2|?%ZL`BkcBI4TwBo&MEJxbiA;!1mc&T~zE>#7;iq)`7}o8lsyJ(5 zMl7W^(4>3VqF@fH#!-RMNB^WPLsDM?ga&>((60#!e)9}0=@Twh5=M%$rO=N_iMAnf zN*Ppk6x4Rrt`9YR96+7oegW80pvKy!40Y5h zIc_dxoM&-COCRl0IpQ!=TMnpn?HvJg3E>x~5x;E5Qe2SLH$;Cn8pQ7`#q*$2KmVRm z{LSdai+T?0^df;L*r}77lJOb8H~KSpeoeBE;=}!E(|l>uXa>{hNBAD$t9-YHFzz_4 zoJSeAUjQ;d>%{9}eH+e3kE52p*^vX;ztUFdGB(Ci;ndukFyQqg6&GJ&dcge)jRGSA-#d%CKmdKuN(J2?H zM`QDw!o!&R0fsItsWc297Dmo%mb9aPVJzeNNZ08zb5EDJ?tb#IN5@5PN4?R)P#{{B z89-e3mBE(WcuKvxb_vcay^kU=+}ak^dTaqqZfwfq4*&bVV9asMug%Gv){m}hV~+U$ z53CAncVf^sgwx#|#|50;%Ts?TW;)Lvr#zI6j7Px|lv(eMyzgx#18JZN;jy)Pb*N(|coSzMb z3C#}ktY;I1D6YWo$1A)0@cdBikftH~XE zo>D;Xg$SG3hXW?Ay=H4ne4d33h5YbP@fGRChGS?vTzNBREATt*(@+bGSI*^yS#su2 z9BpwGuT%!@Zm>3TYz)|}>Mc;#PJ{;(Kx`wSQO;a+>d5LF78<^`&|o=X3k^nv$W>Zu zEVo}B!>V;Sd=G{1O88z6HDS0R(@2(osadIC{r0OEeokl@k|Ue=vjKvLkR>t)@~pPR zXesS5(6AYj7R!afakXD4-{?QD_a7cP)r$OD<6OususeslzZPQOzI;XvgcTDH7g`T( z*1V1lrshD+W2G+RIUawNQO3;Pe9EL;_BwJACLcWfjk76Zep8-9a9vbY+rn5{Qi{1F z6V=4Z>72r3rN9(GE%-L3fPKMOrT{tinF3Xzub4864$#HV0h5>5#Hzz#=-!_7XvX&_ z_+mG1mbc3@T^IfY_=AaOAh575YujJ}>`F1~M@9BDg9WfrS^!z>N-WGTfXs)%0!WSJ z1@IT(NMqN(HyW#kk?u!#+h6{msOPZ!fq60e0yC;i;7H@otl1(H%No`iyRo1kiH& zz_}J+i=~uvEPySv0$VJ=#zo+5glrd3rD&1nd#2JKdPIeg*HWq}$Hz__yj-f=SEF(f$TB ziAb?%+^ea)-^XG)YXJ3|vLI!QZ>mI&k?XbiI)ut{uS;KV^A{DVJ<=B}HwQa*~ zdn=fSAVcS=T^(&(?C7??G-x|1+78=FwauLm-{rQttUYJ_SH`u??e|i@i?%IxblaEo zyPf)`b-}*hZC%l@#^ts0MyQU)Qz5-!9k06z(nH5>Q5YaSbX-#+2a&dhgc0a|orOd3 zoFndH(<;;FLSlGhVccXB{TC{s!4+sxlExN`l$ze;fG3=#ptN$>jRgjB*36MPB~mk5 zPod6d!};Mjf%Av;`0Sh?KAphJhxmM?4#DU7YDcz{&*HLH3L^Bm*nfCmOd(7h86wWE zQ3|v;(Abwtt5sCVU2|3rm zRpG-^tNAbkU*f}dZ!hp+ziNby2;F70jJmbySjC5@27DL^i$OL8gx`q#0w>33;KMN> zV>z&&9ZcZEIxu}Md>HLdnGdTnf#X^|*);W9woIE<6V;j|AeP24hv5m;qG9UHtLtQC zb)EF<6<}gFUS3`CDlI(G_OQskdUc&1tgh3=8p5Jltgf?rdz_7M4J&=tgNYe`X)uEb z0EaZ`YOtt2zrhrmUc723OWU8t-g6zw1O>aN5qABkZ?t9BbzoY0STY@>WTF$>{~+ZI z@IJsglquCuQH~8KYM&0$6I8*Q27y}1;xXINGRA&ou#9nz$O7ou z?LHf|^`p9WF_&%qu-L%EQCULUP>L$RED+k}YLpgTR;N*`R)d=_#i})xO%Ao%*5nAx z+p6UK8uX6CtJYAfTD4f!L#w0KtI1-$YWxbjhmoz?TGL;ri&iam&{rf!by)JIW4+=U zMUV!hsW{6L6~hO?OCQ5*F8X~PEL6nySLpIW<#%Hh6@^j3Kt?Ng1Dg~{Xz*YbF~n-| zbCs5{u4JJ(`xQhrA3YG&xVuBPAgZmkKoHe1>mwzIYO@vyq8i6rqy$lI#sWc9)3x}d z5Y=Et1cIoB+)p5gYLgZSq8ch3L^EkQ(N_ggjYqfpqMFfoMO2fJ8$`8@OC~UxRPf^< zci7D^xf`@FA}_Q27>RzUZ7-^UDG*$={bM72vDqr=hi(T^4Vw-xs*y|cK;w+2-b6L_ z0Bi&Xq8iQ-gM7>y!d)`%SV#KyIQY=D#A>eRoNS?Mq3JXDCQw{0DR&Qd;%ux$L6cz%x z~GLx5hlRD*5qZ0^7uCkLbzAWa4^u5J>n#?Hu7uJe3`bEeq1!{?c7F_v9RqK zk4`usUrrRX^cLhRZsQqE;>owJbWl9tF^P~H$T#qqy7VAb@+}&%+RLZwG79ECHb ztew8hW3lp?2$kyaD%CEB;b0yG}PUr`1vNie(`Us^H3a?d4r=eEM#E+@Lpw+&* zsRcd8LESW_)vCIwXtk_v8fvvd{~$qP3wH9R(bKL7J9krWq2jk*j^x_aR>82*e`r-J zI1HntXG)ej!)#k-KRSCYU(B=M!MGx>TwfJej#g9esRr+;1|O{kAE^e9SA&O>O1lTE z!6&Pk@2#fZSq&Z`D2g+CwzZg!c*fCo*tL*wiWNxL~V0z)x9Hxbzj=IXQyVn@>r?w z4ymvgQe(g@r~bN6%~DJADfS*r&D}E!BUro#u+-ZJN+9+dC;s!L_zD)jI4J@f9rm?zn`Hj7#`~ zaS0!*BqZ+RAv_ujpA4y^v2edn9fgIDjmE-1JUy5Z-w(fsvG7zWzJi6P$0fY2(x-x^ zLG(MuCA_VBu@y6237m z;alSp{;HCYxW5VE(O7saq>jeI-}}^2Sh#yM7Csc}lcntMhTqYZ$cLP7i|r`>Bc=HH za>5^sOZeEhgpZF)_+%v^arcL?IGhJ0@ITHJ;btKfB|52*{4UAjU{`Lb5BO9DQfVdb zh}5H{-5d%^7?D4e!s|=JJ@VLkC(B58?6LJbZt|}QMD88}Zzqu9bj;oH`1&2E3Ea&? z1CcvI=y8SCD0C~KM--Y<=rExN6#E_MUJMX$YLGrjJ zmxC%%l1^5ke0^}!h7L(2!uwm=RZF0gVYd$i;#ok*IQYJ=oc#JdfA@_~9e8Q_dcvQ+ z<#S*8&Fn9sb@8ot#VLL|KcAHl0A$CmP05I_DD2;wm`FftU_}E@N>m-Xm}XSb@zeKt@AAS z(C5|-Snw0a*6rxC;M2#rfa6()jG<8XH{6LQ%%I*Kgz*c15Z9!gBpkfoBIJ~ayYBAW ztMmEehkibtQ#9OPtdA$v{@gklvEbl3RlWXaTR%Y#=J-m9EXao1 z2OAa)ih64JCN8GZ((tQO3h};X zDYUT?nyiGPz7nD{Eiyp=3n9!x2R|KkPp0lD^n*NcJ9$HdE734~Q`$-JtP_U#4FDaxbFc#5?`r;f^0NDTIR|pjoQGdB9{qIZT56)y z_}XRn7uev%xHsV6uK5l>dBHbvCqB9vtg9=Ddz9a~t_KNj`fGrwv(|%0Ke5^Ik2eT+ z#94gTI}Re_%1Ald-Psi-fG3?)?C!a1UH9MQK44|}L#OsiVP!Wa_=DB&Wv0Qxxm^)sU6VFIjCYfdAij7ReCg>Bhp}UsG4^FPj$|G z@?9(-RTncW)CDHI4`-{(43g;*!`nSv)5HRR|4@??wc^d{7Ep>n@ZC1M4DAfpX6;6u zUYms2eOKE89gnh0hEz2A+Ar%u*JRP}gc|J(+K%e%dI=A2M!PVIN<1cXS$lF`W0tti zRUNrMCc$0JDK)>4X7$0XZ{1DUsoI5U9A03!}qzLs7VGt@hGQbuX`Z zoELc(&F(^DosuThcJGsB6*y+7jIMG{FasRaJt$)x@#8KDpKJ1}fR0mQnSm?itk4Hj zl57lr_fH@#|EP5qbuP7efWOO3WXSP%ATH*gkwdIoK$U1~TQQyPrxN&OXLF|>b+09C zRnd$0);eEK;^ttQxL8(>ga7GkwCs}WrW^HoB+pqItMFKeP15khM|Za_K~ODcB9^0j zDBdjdnh>Q^dLMt1c)C@N$AM-@{A&_HQYkU7t0wB5v?q(xMIcHq&znKCDIibVgo0r;kr=5f%7UFUR6@R?WrKeK>Kyk#rx6JAWd%0ldszsVk+c|0k)vJUw9) zTbHXhJVU^~#M~fX_@dS5$JzY44JW-gkqz(2q?c5aTyu%Xm8iB=RO?^)9a;8Y#$&7f zSL2hmM`KIKga&8X=>-$!l`YpXai~K;H@XL* z2}a~5P!?@pmc(*l#8d1lF-1KrdgPzt`Cam?dbwkQg*yNII`i62qU~ItAmP7$MvEfLpT*N`=LWQTrF!^MBP zHsGFm=u<0N`M~}&+>drY{LEJ7D%|e$$9~l(V8u@Vve*W3@pV7!{oqfJq&FO|HcRPt3LOTOxeN*a%9sdeA72lk~J)Ke{%EpJOWa8-w*%q;^*m)ePN|`x$b(E(X#!( z4PReluzmiP|M+{qG5xngu=QgFTUthol{DBwo*~%!u`2l%->Z~SIw>gPDij)=O(hJS z8iK+P8L_IXHjJT721Up-1VukqC2uG&^weigzKg4ZB2Pv?y7Z=FpL^5xe{=GZ4~5x& z@y{G7etqUh-sZO_pARweS-YT>SA8h&+?I=Df%G}ND?_IRV_9~yJ8|)OAZx!b)O5oA zGQ`;a2y3zz6+04MveYyrsx^vUFS?}G=(Zf^>X%+~b^5}0Z~C2Ad`KFe+p_4k+xqQQ zoBEf!W;nr}66=tPMp5L8sxDRjXS=c&{MJqX{$(FRZf;fT5)PP$w`HB%z>%s*f$!)u zO|y0vdO{!LjINq8RGFFut84Zd-Q9l{9sJW?gx)M+21%hSIfMDhyL(_Fs$wE4Vd6jg zsb~`s(E0Cb_aSN$kAaKq?KP+r3oO_ek`rKLV6I@zQS?i2G0ht=>)S<=LJFb80D#KF zIK~bwO+aDzQs>)z;4Le%VI$j@lhH{ zlC8EQ+_T*LRvZB(o`~gkKZ|}QilPIzP%WEgyBDgR_HxgxP|Jxw(pKt6$-($qU8f(uz=}x?To#P|`NwYgadD|b3%y=&u*;t%C<6$zU&nDxe2iH0JefAoU zl98qD>=|z*BR#8RJP}9kmOohMjz2ZmeUZD9UtfJ{&asrSUw>iutF`V!czvvOzf$Xd zxz;^i>wc-${bH^AUuxY4Yu(S++`*T*KmFlcH+Ofub)EZy{aSe&m~fBtd)__5@5KGU ze&2hO;t!ox{KFTz|BD~nx}U4LKj+6^V%WmxD~N|bn(KZ!ad-1Mp16nkd?|7N#OI4i z_gJm_7btR`w)`v4SpM7ikpI(s$bXU#`QN^>PWeAu>wc!z`DQIRtUR5vS7wD>sqtDZ z-zU=^qr8xuNPD*Op41Ctgr7)zZBGcS=G-%yMrHN*`F>L&wM^rJMmgEWmx27+O8$g^&7bwRssH2eZxGKdy2{=C>gDfu^EF`z0p;?|zqL`fx zhwD%|-X~RyriF^$v?3{*xhaM`?b2m?5(vQX%#2=#ENY}>^NDwWc@M+%aenHh+KEZx zrV+(xdU}@?CIKQ76}5p44D5_;(gt`|DO5{*1Pb7C$%`KNeqM%xY`T`laimJgiMlbg z5Q+^NQeDuKX-ux1*XS4|)a$F46igK@Akv_r3Zzxj0HW5w;#>zCY-bvossHiThPpx+ zPq^7OxtvLOrGPZ16gTy2775KKHR?DiGV%Ik+WEC}HAwU?|q_-JNur#_F$bw`r9HxooZB&Dgt^`dRX_)%W z=oJdAJ)3WE8w~eNvh@6YIjG1bj5RCvt=4=Wbp4936h!a_BuoOecmf@=r$ zH&8l7P1#=R2sr~F<-m9j*q}%cTO*q*U~3y}b4pvzdC~+}c=f4(O%6eN(;8q9gyCfY z8}X>7uFa-BaFD?&PCtFv*g>y4- zwoYlwIS*9>$NH>Mz$Fjgz2NSVEPc3$H@MdClN(1u1{Wvygi4hcaCQ1{H5gB5cxpMH zFtw;M_cn;OMO7ZUiEKjwU5dH-W>O9vz$bb(0VQk@L>mL9IJzn@MZ7_@abItv%oRharI)0niA3GFS z%FkoI=343S1`+numm!|!Q_Sqy5t;hznDR;N3`T}4`qUU z2k=RI=YU4}s%($Wb*|5qNs*Z`UZZpMe6Cy*6)%qI=v?RfTyXU4oTdB)9ymO2bmPXr%+BS}?tcB1{O9`of;HDHH-NJq9A$L=p3k4NHsC5JfS#Sd zl%L9aQ&2Edhb z?DJ6v;Ve_7Tv~?!d2ZWE^=Xg>dMO7?fcb*#U#Jmb8!{3SA+f1!tGq9qlbwr$xP4i7 zAF~NP#YDD6?*%|@eB2&}bdy#oKV1?Tdh|5M`jn|IZqj;l&LA#jsS!dYcs7B`Y#6xW z2T003;~HAjHZk>jU1NyY>DYaDC9xh*gxw5$a@jR@=3U&+X|8n;84_YSB`P>G^rm-j zyZrN00`uK4C7K1nWpHgfgwmA3#DgI#6J{}WZ1SW+6UG5PkL!8WjR#bUSpSPfDdX5F ztJ_m@be2oyzOyp;hB{;eZhe*)lh9qy_$k32S@+NAr?Qp$Sr7f};kR>DKfCsb0|PT| z>aT|1LrH6@Fv_|pE7H}hBk4~BRRH*T`j1c(!XExcX$(u9B6_9AvuX-ljfTMMhRkFOe1N z=l))exxwx-kku^9RfhY5AS!&BF z3T~DMNriNoD_Z>X3<}ANS7pR)ks*xRve`03@q{mY7P-f|CkM?wUx8Z4R{46`JQ|Xb zRsv}W8o=~Wi^BXbuw@j+`^uoP+;3fc3)4xrYlLL$w{k*R>YuXEQChWL4yF%IkV$6x z%(7zmUgGaqE|9zY>#r6=(3?PG(6%(wA*~1KtsijZ0b$9yk5{^lu*Q`Sr8u1mH6a=F35#XSd*BMfO~jNK!?D=W z8OIVv7)&E9VSW_HY7AtuC`gbgQ&n)XGI(0K(3t<5&Tw}Lv8 zW!y?YLc|*hZP=Ahlz5XCcatvjmXN#AFWvG-XB#NwvH=Mdat$(q@h15zCtV>BoUYdWjSEf`t0g=MV|u<=;qX0R4c3;D*%TNoZX8&}Ui?H6bkaNoXoNPb5?- zJC=mdX&4C!BMhdIkQ@Y$A|c?CTm{+Sq<9Z9$p-s2LYVE0h1(%q&*m)L3}FdR^BwF* z_H=%~9dDEx?I^p4#@5Ka&fa{ixkupXEXmr&i?mMh!d>JZ=dC#w_qBRCBA<4XVxOsd zq%HYd`*V(*dC`%RMTn&#GuZBTlYE1=O=61Zu{g`0mJpJPDzEpJ{Z4gOWCAOt|qe??|U@40#Za}gW52gGJzBz zX-|*mSWZA`$)bf7N8(%unIg((Y-&%~4N)k{pTWS^}0h^`0rkk0px?Z~*j7K}x38pwONP`op1+*Qqzoi-$ z;46BvNFW55v_>^FEz(D8HI4F0!KP$z@FPmcy>7Y~8mS9U@>ExIFW$qm&TKN&9@4E^ zvdVE5<|}XaE644#*uSW--&l`814m0T%h;~M+|R!tS&+LW`<1;k-R^&J#bCkz;*vt< ze{q=F^}kwjh&%~Ccw)@NvR+%z(i4V}E(q1k#yE#nHQAhB+r!@?g98${rH>7Zjgbxx z?cjj{5oO_3E!)I^P!a!7ywJp-Lw~lL_8iJ-xHD0=8T}q-eD(ZS`sHEO&S#W`)fXP&ozZI=1U z@-1o_N|aL+9wG0yPJXOGco&VAg#e?wPi}PCu6q#HltAE}Lr82(Hmf1F!LMcOJdq>a zLW3d-j`jJS*TvUH^$~yz{Gi37e>QzZZB*XLHp@q4q_JjB7v9Yx@szi&T)#J)25!Ji zWCV#$ME4*XFee>H)H~nV9QUN7DeLZF57ON=q`QLwOLvEfbKcBMcUMx2Nq2|ARH3_D zq~5-MtgpNC`Y}_8ky%`f6|Z3`nF)0s_jXZlB3ab`N-Xp~5UFYJCieAY`GAp>FpeUQ z5H6z%MUtvV-9|~T_vxW>)GdToUrWYnywqEZ9KazVj04SLOU`}0W^u~2WNVdHXz$i% zQ-zjntzav(WSqhlun}LNrgUer{d%4k|eROlWq7L@|7mcca# zMFH0)!`6nZRlsFh#SH;x5M2RRp;g?lueV{KRYYDOG*mg2QF#GZ%WLmo5PA*)f)Z__ zS!76>1$51UZqaM+nn8QlM0;oY#6o-596(g)6TSAX&?kEB-B5+n-l1bKJ*Nm`otox3 z>XF*J86b;Tk^0)ZEmGW_qd#bI;PrXNZX(aMQq1-yQPi!;q;qMo*q)2x?i{2c9?hj4 zSLjUU6=4ZvfZv~QvyOAqYqNQbUSSg`DPrnkl0p|+wPu*}Q`O`(;BJu2m{pUzFy=wB zsqV^^^P*NMnYMXvUh21Uo&f-{2OvYf9}9)@0EN_kV?j|KdDTA;ooBx-MANv}10H_R zS(Za!vBT?z>EsNRCRxdL*=xC)ep(ZfKCTVdUE_;*?VF8+6-<1kvxGa zO(!y&OkrmOXGP|+O`(X_z-9U7NFTNL%teH(sR0QeKXBkReT5H`^EK_2?H4(3$Ceus~SQBh9k> z;Cx9+XZinv;Ni_NePnIv6FkWoii)v$;sS}54RKj-p4LDIk~DbmJCo2K+th1kf>2TE zPtg}$RiiJ;H?l8UPs)8^E=TMzc@{mJo!8#3F;$n{jC#c^3cYF+z2b*glSyEslh!do ztl?`&jiTBN=%FekQ9%f-#GwkUNDzFaHJC!SFbDoTRUPRBi3i4S+uC!a@zA?C{yZV^ zC2YuXkfu%Rl!hE0CCzX^k-Ya1K`lTq)r-_Y?S_<Z zCk;R0>e;M>+zI}PjYXVr`aw7Juuz%bzkW#<}iUwv+uX6ML(fQ^osql z4;_;-J#Nf(&!2J9qPu^s&0Tgc=lCXy2vJM#G_)wjWdTXu?>uwv%nXI zD~RYIj$Rcbj&FbEL3b@OHLSo^%T-L4ssQ2I{{&I(L2O&23hEs#OWk2r6pk#2ZW?Lrm0QoHqL*kC}9mJG~p$|F9MN3R7j;?q7G9X2^P^mAy$L&y3fE$lt;`}JF_on)>nl&0}e9^GnTP_d;_wzSYV2^2&n zR84-WWRclC>tn3yOnn5bQl}XC<)EV++aoYq%d)HT$;)_FT0ER)vPnEILscVssOO)H z9%_GO(8J|42FAx#SuwmOZcN@-5;G~gC$Ie`T$x<}bVvco+^LBM()LOL z!>p9@q!Ze%7u>CBhu~U+Qx2#^(+sNTZXv0(o>8yXGdqK8(5yUadnRC5(I6+t=5?M@ zVm)IV_e_ z(haCT;^+o_N7gdxule;%Fms9;y2O!|7&bE{Fl@;kJ$fka25^D$wbfT`p8Ts-*woid z?@u1)yjE~=Hwt;~w#V(sw76$i;H87t?B+Y2L+xbhKoVXboj{3z04GB!`?Sz@)&dVa z2@laYPDqJ4Q7AD}EFVpYIRkA=+c_a6=A`LGvAseK3ILLup}C;Iz^!ml`$&bM0zC8p zrct81$ZPf&mwRnu;uK8==tf(Gh9QX{C<$g>4~TWKG=P-49C8V~LQep8#F(KdPob#G zmq}02&5=8GCn4@O^{S*f|CgExWe9$~FiZki!6b8{!rg@IOXGcr*NlzjIsR59kJol(;@%9?@U6PX-C9mui_t4x%-eg#sOG{iL$z~7kc!2pFmt?qKyI$x4ffl5SA_8hXH}>%kND zxrus!REi~L(StRm9$0^6E)6%dzSgqYmquFf`G8t|Q1|Pj9!es}rZwUWICf-e-)6G! zZsKX2wgE4C^;As70dn+NYggf7ohw7qJA)*D*{5i% zZYuw@R0>V;!_TgiwWS(`V`<^^zk!cwqg^y+&2u09$8Ub`-|fko`z4wgTq`S&pB}WJ zHONOl@SYzHqOtY^UU;_Fi!^`>CpHxXIOu+t?fUOdB$K+E zxmcBlVstr(QgCz-PLjxMlG6q;Q7MW=xAIFvxRrBSrGaiONztdAVqe~_R;wY`o&eNN zfG|(Wx>&bp8wLRrhls^w&D3yc3F=o{vc!<05RO=5X{xJk8OzjV5i4XjwdBzm%wz$? z&c5vOvh*z+Bk;Haz9qA+1asd>kvVHC{nS%{9W92k_Rz&o=v^QiF33h4_PW*zvr82X zYM@>lHjLLGss+|m;G+UVDhz*kJ!N3Jk*E2PKZ4{Too^7Y~2v(p$K`E#;8%sH{L~DQ& zqF`S_hmQQpREzyuP%X@Gl|z0JvUUDyM9$(i4oqy5B#(8(hdOT7i>x&M{9CQ5Rd}1= zmq3P3drxqHxy|dJq(fjG5%HqtGH+($;zF6n66jcAz?dK~%!`t(K9NP4DY1+x_C?78 z1w>0tJq~TZIKcS5^=)wMVY&UJ9l zpg?ss%82-KJJ{3^ddjmIyiqh(P#)APgF#VVB+ApDF_foy?TOFdZxN5W1-1huwu*!_ zdPLIrX6;n%g{NSHKbqz zh8XLzIYJRc<_E5f#-aXawYTq>uVAE%1W^k<`+cohY8yGIip{ZPdb`w~pexeK{t^bO zL<_2S!@Ekux8n!M2k-m-`+k2tuxcZiLgoSwS$WVG=<4k|Iu&?CRboYykkC(KgY5r< zn*Rqi4^!R$XVe@$4{Bzu+R-~CqVIFt8}r(Zb1bSqV-%Gss&jKKsiE%R76F{^g0v-V z7~T@?5brsECW5N+J*sbdt;>3@pZozu318dS+NWNwuZ1&i7uC%j^c2i1Qjn$v8{$R zf_Wj_Bs?!cAyA>)9D)01-IQ!`>gbZCcHF=7ljDySTd{N@DRA3~1-`a2QmG4~NL4Wo4%mLPNfFmv zzG8}0Zj}rArhDt#4z~8#8@K8xj*qAX8ALmg2t|7Mg~~Dfn)JVd_RAZOI+Twz*!g-B z4}O^8W@d#eq$c9nriWnO-ovXCvhKvw^0d?x-0#gzVIR2%Edm5Z?jiqE(AK!B9H+h- z(57t#+BEBy_`oq)S4&O7mY%(d?JK;hNjGkfPs{ce%*!UxOcH2NL#T(JITMuDAeF2I zHX`jWZbb%DwNFs^NlBT4&Sn|SQ2w= z8Z`}1pFoi*qrx!NP=VNMQNmgxRaTLmrnJXpM#@7TSzCEcNQO$tC>oWKwWt?e86&Ow zAGBj|hFgtm=F2l*XfQTy06kN!MP7E$D7GG)mc}QwEwt5HstoF7E=cW}Cw|{SKY{Ex zP3eWw1{+TlziH>*8hlTlgS5;rk?y(yQ7KtW7S-5Jh@QDzbLUCrffLA>e5qKtkZout z6InQEgePeL#747}+*;PjOE)qGrO0c<4IDdtgD}(!qJHeirw;GQnE~YD@&%QR`f30&`jswA`=yU^NU5+3q&#^iWV->PEkjR&eS2Hh+(rP%EB$M35$iF1|%N`&yIB5BU!$%Gr#21)F zng^-hwiCjSVwUC+`R#c&pwNPh7FLiF2|v+EiR|p_vurhh^1`U&{eUq!?aiIw`V%FT z+(o`WiQ6zr9BFBAab_w$te&xk32x?fEb>Mx3_dmcNnw^|awwDT2gCBgIo3l*8&<^9 zM?nm3IoN5)4TmbI$%7A}8V8|ABU6*V!JT)FTf3yG)pSQ5nv?Wz2S3_n7*3VLpMEma z61NgxCAq=MZAJZ^xD(}4UYcrqX^IZuXjnH|aj&87EG)V6RhJTgj-w5&%Z3AzUQAM_ z^O>o5?tuH`f!<64Kk$MQhU!cChHQgFNJ5^;@%OTPErB`RbdVPS4s?m)Ml;}ZIBC5W zLZ=vCxQm=M;V^e<86|OdKMxRqWlT4&)x$&(k{!Tq%r;VEP1WO_#;RZEtKR}9QKxpP z+iI2;a$L>Y9QJF59SiVHn5Hszs(F2=dA+as9QsbpouX!GaEqEJ`!I8$4$PwHe$5aH zhE2S0aN^JH)P_D2IPzr+WN3d4&>4n$Z$5dEFpk1grXo7M1V8&VL%ADtB~D&4YhG_9 zeA?Hg6Q_P%)WHLG)2K=F*=uE!hU-CI5w}XYW0Y}o7W1ldjXfT4_t`jYP(hiZWD^Xu zFo-GEwA-kEyXJE|Gfxw5)@h|C=_yx6Xsyx?;t2*T1IVqNj=-TEJd@In?1js)QxR`n zhq|~bMLJexB6fZW7zJ0C=@-!ao)P-g(`qNN3|Es}x#Gu@DL|-~ZD*U18nq_988t)< zh6&8ZO)&OzsK&g+=NJ}3xHF753mW5_ui2jw8jP@Pr)u0p2`Y*lBWDUss{kB_0&DkY zga!o=DL8$gQ@za`<*zN{p|&@h)a@4>B$Tj|5R36CW;OfrjygG?aWY6FlWK(byJ#dS z7ijF|CLDH&!YW(){e5aQj|xDG?V@aFsDYYATh!0wf^=}5f{^c?#9Jf8W39;s7N-Nq z)K-LUsR*2Kv)U}^da?|F))oQS6a`3JhI^K37Exnx0&8n84k{u(Z@5QRlRr3sKr*NpZ9nt)hyY`6(^yWE5X2h8^|bsw%Tn`H`El_E%0My_$K zvfmqzBa9i<9SvM35Pdd7foX;fKCdfzZLq9)n5{2^F%u{d;nZeRm+@H-53&)^{zlY- z#eccX^j_*@h%x(;NaTmOs6evry44lTl`CMZ&RoIVstVxKtBVL^+Owt20OpF4#3>N^m)WuXj9avrA(Ibm?C0%kGzZt(DyNXg|v!J`-PQ zgvq`Iu`YE;8}kfMjq9c>dG{qcokK93fQ3vj#qF>jA^{p(gEb#OppTLKqBAta3Y|`} zv}xyuHf|v~l`%$qpTv+t-<2N2$oEhWJ9xf_d$Nwk4_8lSw+qRUo?I*~BzN>U-{*UG z53_&1_x3ns=6kdUGvIry#|=fk$9vog}e9s;BUiJ>b14 zd4hm;+KL3Z7<~|UJVZX~BR5#&$q;$MM?y8^d?Z9Z>?5HBA|DEo$9*KDOXPzg@|cf= z-x2xQ5P8%`!Z3)uFGSw!BbjnU-V-A4_K~nFBJT{5clbzFa3XIHkw<(as}+&AhR6^2 zNX*xXJRBl#@sV5}Ch|~-yxB*>Q;1v%kq3Pw7yO8PGV`cAZC_RcMV<&E z$3p@UmT;m-;D?RC$&m1Hk?=@JAi_!N%67CEML|DR+BH{LsK!hdSS|ofRBoJW?rZDPwDQP;uS6Mg(%(W?ALNRtJFOLvk{hjXA z&v-NflD;zz(E+rfi`=sQ;NFeO(2%{fpwo5a1>a1LH9*Af{}A>RL@HXWoI>!bkIt3YW1{S*!lWX24p>`3N*@f351@c+pSCyt1 zsauQ~COyUqF>9#5Fid^wS(kpP=4|FF=}UqAa`u>ko63Me=r=J$+diQQv%#1TZyy=P z`#4oT1Qj)>+pzJHvSZ|v?Cyz;+o;6Ur$rea&ws*4rS^`5#Ay2zC1hXaWII*5}(asL(3H=3-%a=VJR<1BwmKU8lf4`r z=YRO^`<}d7H_R)+ohYgnm&+MY9+ZO@SA*ND!G&rtqc832jF9ng`Rb`C!+yTn&VOkK*iE&Ap~f&MVrOsr6ZWDL>+n^y9m?WbkWHKZxQ6jVhg5y z^)-TQiO8OB^xCQNSW{MA!BAM3+fFDspcg78{ZDhZ+^20Im=yA%Vz#kd6GGr+9Z#to zX+o!Az{<$rpu+C(g=YG~L%(+M8|0QL&>$M8$kY`SVNisDA+R)fAzs^V7?LcIMFUgW z6nF?UUO-&n(fXC?d=RaOyx)nJ$Z!j_0Dpx^RNJ3?Rztt@gxMUnv5WfqzD{7BB}K46`CU6*A(qVZ=)tqCpGV(5N#^2Puu82ylJn< zmj6VsfCENZ9{qvE7?2(a^cW!j6|tD@#N{O*#IVFgwA&GJW*tKf_Kwg^&f!l@g=|pm zQCe*-pXMn~7vp?KnTD8^=ST^SS#=;)9Lo~{STh1M^u0XN(d;lnfTT{D7Ns~Q7wozY zBkN;iSUSO?>bt={S%9JA7D{0rI-@Y2mUZX?5TDS~WLcy0{S+M`*K~Bm&vY^yv)YC1 z?VFm=y%upzuZ(NqXBl@Px|_;TPvZ74V|a!I5gmKIMAo0&ruTxrIUW+EzzL2709(b@ zHZ(xB{ieZE)INI+CgQYDQMyyfx@0DHS;IT>#->$w_~4=RfNnRs|EZogX;+u=H8-=E zab^-5d}-TV*e6p%UGH)65xP-~|3NZ9qhTxgn^Mzpwup$itewA+?to?$_g``Kck^G^xmt|3nr)#Q;lZ$RD+ zZ~Ccrn~q(Do$WCO5R$l6-KN9gr{nI+y-_YpySNG%yof5Y`i@(*5T7_t#YjTu`(A;epn^CFVX8VI(e!o?#au&_FOS5?9PRQ)0YDtn_!Y$ zSL$dhebUx9l20-aN`K;VKeze$sAlX%e0(|6R<|Vjjw|U}fiaW|)2hl3HRQhkKqS>O zjk&l-%gR$~a8QJC12(k1?w={b^fmbOTHLA2R~2*J?iIp>K1`|3r)wNDB#Wx;Z~|RK zudXe!*cnaV9Z%169_Fx<19K4?4=75y<}`yCSsyS8b`Z`GgA`o^kgf+N4727Y zhU&i~=AeS_?Qu`14@tQVEv~9HYwzK-?oE0yru8Ov>yR7s!$8PdB*p!tlPn#jR&^Gi zc#`wIfsg=10w$PKvri^09JZWrya~>ZrNqO0PV)OfemlnasNx{}R~Le6)w% zgN9m@170BXwJ7NhR6T;)l46pm)KC#yN8xIofXi^)4gss%%ytvr4bY<|p+Q&HtVx0% zCPQhi1y1cfk;o{bz=7QoBKBz7gBJleTAM3)WzcAcOk7){KSsdEk(_oD@UH zeU3^}Nmkj4ElYCQiFFiP@*{~&J{ib|P9T5G=L1x!X-iQ=<}->_32sn24mgg|W0G`_ z2!S}=WH52kF^>cRX)sM1lt1M#wz+}F^wf8yq+=n&gEEjTF4)1*@m)a>uZj!A}VbN z)9x9mf7vc2#dDELqr11gbJ|J8SbBzFDl6;_44++KfWG%mY7cW(4+|gn~)>Cv}~B z@h;<^01PptUPH~keZ{_k1EM-i>6DS9y`Bq(-so1PJy->X-OooH?MZzROhJgMDkomF z)Ya42w`QHTB-OTPWq@j<48w+|Xb~xVi@1?&bEDcK$tZ*75B#7JX3jKR0=Dvn2%0FI z@wmBk5)8N+FBp@sF0EF+1%#-cPFJbgizh_08H)-@8v|XV`~x;PPi%=dOTN0q(dY)) zK${&5d(3Q8;Ip-RKzlU{hw$f40@fzG*I|V&pOgVGKo~g*j2H3`v!DnK88c`kyR5Il ziMWXyV@3Vt_uV&5ZW!a*Tk<6>Nj5|}I@8r{?vApic=vE}2Rj;w%~9_h^3Fl;9PrMp zcV@ifytBv7offIRT2WzI-f#pm88zw7yc?%)z28L!r`yD!{ zwK}ZU9$^i0bo2#Mjkcng_w{(K3>#hG8QldM;#A-_MV7>{;J|ju>3XN-9bm0U?oV{> zB;Rt6(2&*{mJdQA$$$9e=v0<0<{hrQ=qSrL3Q2$!~qrcuypi0XGDqabG{N}O% zW1qyLr~tJ>-@i1@cONBdA68e_v;jkdGH#9B$cc9&|IIH_mqe((bwg$AmRi05-$FRE zB0{Z%fy_UjokDGtj6-FEizL3$l{{)V7p{E6X|3+k_~L#0DQ~e~gSs)~JE7e{<%{fW zvwte{`=_jmPPGlrm_tz4n!amjREDlWByNnG7>M-E0-|bL|AGS{Z^a&Dh zRn4`0zH$gzvV<odDp%q*!`3irhda0LW9>q7tmYXN~4xn2qaqXh&wCtU*q5a$4a)&K;MKlCBc zE}BYQ!qGZT8wiMB6D-&u*bHN0cv$E_eqC6!3>MnI&>vs{+f%?|EWiTU9!d+=MKEJ5 z|I%k;Y-<)cwE{N~85NKbJfHr4QrnTKCkrdkgL}jUa4@2@25{hm3^?7)aGib9LTEV8 z_#Fhd0=ldNtT7KP&S?U$##aJs>?MFjfBxW|njxzKY`g^6C}*w(z{al&V8G&~0XFv1 z0261V4tKd$i?b47hC3|}PGl!GzaSu$`DI`l%{DElHYQ?{zw5b(v9$Ph#%WyvNFD7m ziI$;Wi6SMPEy#}aRSGylqn0CHvxMWgUL?`n0`aa7j+Nf!r8QVw?vMtrHWHRy=dvq5A`i45aJUEVaH$tqcMT|UQhV#{`o?k`<5{fwf%iGF>)Hr;bo5?11By9Ux}5tW3{ zu;HZ&RomHku34C^mlP(p;HAnE0M;u@uu#LqLcCO2g5r8*O$DAKK$2BzHaS)-%(6-2 zLEF7{(5kle2S9*j;Vl+yZns|_jMpz+kk+zJ)4SIN?)8fm(A%snR_ygae*I#n0(;c^ ztZD0m)4gAAXn!N$FPV@_zF#!^z4Be*YPao*3BcMj6`97Gu{gY^Vl!6CTgR|#fJO~$ zzwEg&)3Zsx+0b^igPIlUg)`bJ7u&{L?JahtfySDmYOFw%YPg8tiB-u3B4;}e#AKau zh{*lrQ+^G0GZH-Vg90X5z`J_yx9vQ->jhg@IG;>f(^}}gz>ZAMnEQ9TJCD}5Ns%0b z`$u?#`blZK0X1>ouAxOIQ5GpUN8}9JLXPKS9M|TwuQ0C&J9J!IciTpZK|=4HsqPIG zAu&aF%ES+LfC3-Jt?|0QVn?Hcw2Iu4J!q>(P2mDM8(!s>9H518AY#)6C>9AudOw|- zXn72pouga#TmI{RSbuQPSztsE@5;rplkQ?t~rCueJ@ zU6}z4o_#;kVTq#bR_`#Qjx1a|MTu)0rq{~{f7A(l7&Uzqql-d1x<3AXF6Faj)=`E@ zPpMw}8tJ9i7!8ce_dbPG^rH!nodanTu#3Bu+)P&l*k#xBix4cxhrEUtebV;qVV6MU z*&KhL9WKxY^xoA@5tCqmMUr$;ZAtJMHeaMLMs|LNO&SwXjI`W137}Ld0~FcKI-NiA z*Qu=kWY7=7@tLfv)h&!p<)=O*Smp8hk~P zFq~6QBJI4Sx?;Dh@G;IB2P6a1R5df)5>N@v3F+b*o3#S>l%58mGg&($=%#He-6lVS zCXkA@B>r>^kuW6I_ZVEpUK%}a08-3p(_;XFB{IW7q|C$6Xxaj85cn8L!+Mc;6zGjo zNS_`feLAt?0EDX~sC#OAZG!onLzO&{DLN>=Lo1_?GZ?s_PJ29D>Hx8qj7bz>@YV^5 zuLBaUIz((#gPB%G(wdtrMs`blP3W@ZG4GoN(2A%ambLnyyUBBEYMO~KyO2O@k;d4AHWDbG%>7(nDUt+ zy1t6=TuU3B31!n+mEFAGMn9CSRPJM*?JHKlMNll<71hI~Oly66OF!@7&w(HyWMHO-KM^}cFH2jW8j zf~qtHP);s;zYy!dsCSFH&c<%F@5UC04`M_(dgu4pB0ngJFwzt^+`9sO)WyIzWD-x( zSeu3N61gpF_2$zqP1U@_+&?XiPU^Kh3c1XsIvv4V*;d09`@PI>QMT_S1jOW;BN9|< zZj;F*w`2X1Vv876M4VrJQgTr|FUT{F=P{rUFGsDEZfTL9qRSfRPmx4eKbb?fpn1bU zuZ>kRHgG-S-GqKjm8{J!v33eO{iM`+8rJU@7&jS;uA?E3Eq@XWpJJmIX@lnw)Y&S$ z$!*edz%39WY?;lbScNyS3Qw^LGXaWKm`CWf_?N4&C@5uX-4dC=q5F2t#&L8bh4)d> zLz!D6#A7W!G@=lesEt;F{ZQL;T6#|D0Zc$DHGu&*8k^!r#KW;;!$pmPqyXR{C?60w zg|aYB(;vF~dW)uW3UI510h*@(y56D@{K<4`5cKJW03qF8m;j=a+!%;m4<9c-o6=4f zJMeT|&$sA-IrQb_g>6HZU%f-KMZKd60$kUqg28uO-5!DjP+*I}5H}7WL&uLTs#!>+ zzzC4pI&IikUlW?{$-ktN;Wv<78hMqQoSI8t=6D2oSBS33r- zfoc2F`N?4p3i5-jY|u#!xX>V|nTm!|K8hL8x4J}n8c$J}+$V8$g!*BHTSt-) z$~E-~K4J;V5`9?`3Z2d4D$}zed?mOa3@+!xmhKT;rF%5we=dZd58t0J;)DC;;9d>x zv%$R*+-Krk??lv?clkSYB{*I7`~d_1v;DHS?{(hdq3J z`R|K)=Po|`s(gwkGtF|Op1V0C|2eaRiErv0&(5g0e7kQ*H~+Pwo{{|7!aJIOw(ySS zU+`Wm_-O=Zqe&J!$nsn?b=bfx?-ta{>7=|{4;#GXokqVr#BP&4uKf4>9Z4C@w5NE~ z)|CzPFZOVEx=7ZvWJH915T+kuA0X`zM%(ph+Sw9g%6+<`Hp#k_-{#@6J&Obvj3b3Y z&&VIj;}hkn#oMge)(!peYy{oZ4^KwSMLabz7j4wfq<(mcYc9gd-CV?r6m!V4_!-j= zxANyAd#?@qY4Mwx-uYASHeCzoqB zNHj;**=6vyb^o-};azkR#&Y~#7$okQCA>Ar-!bKg?sj!C_3}?5@2ElZxQ0en+3DDt zGoA5|-#gvOTCbKC8;mx*qbOqy7DNpui5wP}R#wOWTqH^+CcxS?DWac<(XSI#<4<5AAA1b|h21?XAErH$`m>P)>l)y1 z=J3}*Hj8=S(inp1q}c7@Y1e>80Yc#ERW2z7)r`7SGg!cR@3n9=#zu=YR`E$( zsBM2Rjs5n7l;i_j4GFop;R^yI`VpLr^f*SvK5yA9yKPOAYBY(S2v3-ddV$Y$jLHyW zO6kSReEk$GhBS>?Y@Dm8xCT)xtWJK5ur}W`xKV@wSJxYy#D}!R&o%%g!M4pfgSv{U z5tD>YSkV^ty;PVjO3~PW{bno}wzBi?8iL#Wf-z1M1cK*WtBs|R(b5f7CLK3b;Zska zfeBz%YDOT}RH49DNl9W!$?B7e=U**#%zMbnKtju4sr5R-s;T*4seRe!eA%_NQuD!= zeJ->+WH9Zm)f&SG-};b&0<1lawQAslWgww%eaO&UD+3=a12tI&3a}c6U>lZ!ayB`p z6{693Y64*^)SBgBI&JwGQT*C5*CA85L=bn6uoR6XCWYmw!=6`2d~zj5^3 ziT%IGL60ddJ>A4Mf?p2J>)2K9TP#MJs~Ly+HKs`uth-KA81{(ESzpZ%C4&h zF%6!$S!FP?XI`>G9W1dPi%4rlOW|A$Fm$1UWLz~UlySdqJQAkp^!JqOeD7+5RiMEM z1}6+0aDzLt<(i@LD9`mWsn>qPTV#gm84Zs4(SKrgV-#36H1v3jCdmI07gq#{hPO!5Y9_#DmKU(z;D0zR1-I z;`FzV#AW`BIjJc_zBog2UzCv{2{mjUfQ1Lkq)9Vmyo;V2N*Uvl&pup!rv1}ZQx}lrP@m&olT0?f2OYNDN2>K9OHWzUuMbS1t)@`M? zuWyt#pq+@5jq2YrwGBfcqWd+oUwy4q*G2}OEwDiRuP&=G3Nwv(QH4hcfU(cp7F5jxe~77nRNpOeA{( z!Ouf2UDlH|i}EYhT1CYx;6yJgaH@s!`%Np#Q^VENy78lH&3Tw$2y{FMxuVhiLOtF0 z&`_a8C9BT=S{0VpSC-25n6oxOY6XqEzP_vIW`ISBlhtACbbfIRj)^mitGWfpnFSp5 zskG!6Y;xKzPEsgXSKB`kq5J4W=;T?uydKN|!JdK*ZLG9B6EVq_Ujf89{Dc7V9_X2b z0r~`!u5j0~itXWm9?__Hc1|MXa8Tec7N9lA1Yrl$maEeIz4GV{`*!;5UZ_F0!|vI914Yt=S72#?5l9SNXGwuQCbtA2o-7J)|Z zFXMvGDjq;Epa+?XI-46h1cze;ZNUURSz{3bj`&#ZAcI|+haQe*}e7=p3w0dc9c|>?79hQ!w$&Q-VwYoc zALStJaUvS6e=*I1YX21_mSmJ1nd~BEC+?(Ru1qc-2&YjMA=9*qJfG4Ik zrYAVQ*PJ<>wH96T)LBT49o~vGHBV_zSQMq2LKFnENyl9MjA{Y(M5OYTzr?1qdN?-A z#=L6@W~djj_;@632uYVUm*k|Qc%=);;m#^$=nY1MCqSRstZO55r^gkwrY>7GV7_Sq zM;ApKJmN@c4&5p*jw`wjYSVR4g|0&uT+_NPD}qQiSSeqWa{a?rJGYJ5Wj)(3C8T)O;-iL!o@DOp{fOmmZ(( zuEU#tQHSM1G|ev~8qD4UBL7$I0(_&hBz->#HD9Hld*~kYvv(UqL-4`DI0WOf$?FE= zOg{Yj!MI@?BRlNTJ#z+`pJ6T8O^y?X_-pYu+`9!Cw3Hv+@Zp3aB!s1O$;+r%3URc_ zN*3VImb(X~fMXd_+y%te;uLh0BrU)w*!@K5RZA-MXfSwf4mu@?ZbCM}B`7s0YwQrR z1S6bfHtJ?+R*qV~BArpGA|1IF6~#qG(DhJ}Wvi2oO;Ayh#Kc;IWQi8O5m9YupOH}I zK>qNRp}1=Y5_MA7vaz%WfwNLaY~)PpXEGf$-C;#6EbRi+3ZNYda*oc(cIQ8eT5Xz%vCIUSD!FNH za*dlyRV#gW`zyBf}~{)8XB;q`|tV6#cnuMwMDE3g?_Q^jW3bx%3gz~*ZnwqU$g z1PetPEt2BvJDqoJ;?5~_@j`xwNc19VJYVy+`|^LI3Al;rDp3iC5?J5g>ZhdCQonZR z{W@{noWCQ;*6cQBTM z)t77%5|3Qkw9BkYSVmfceiMw|I})Az4Y`d{B|Kqf9Mlq~Qjl|aAvfktI2z#^k7p+# z0H&mTzqX1r8OSLUbQ5KtHbzoe*n#z8CmmCi(X*DBr(AH8BIKfPNV9cQH{0f?QI2IK zQ=^ylOr+I%N6jbXLAZ|F#&dnjsc*EH0wx#SSV)2{9@mZ3TNT)`0x_=>3S^H2w_PN) z(mK90z_1xshc;?MYF4}03^82<7M`L_g~}NV8|cx+1xE{X zstmsjrtu?D=`i?VtT`tV<=|^~#^og)MNmGwf7ih>of}O#k;po3D`%!+Ox002KlXjb;z&~%NS3n@d-i+;0WSa(4iA&oQP23t#g%JSEzF)`D9k)X>LbFP5b&Qd-gQd)FI-Q$2h6u=vi0iVG z{?Cic!anr^uObF&;OCJPtVL^COy$&h>=&|SyvDHBLt8zE#U{uH&J6L!fY<~y1HHcW z2!s`xi;f6j;#k_=$&%&RhEcdMKe2+W?>=0kWogY}4A4!b zfI$o%Z+)w;dW0_jE&5{gP2tcP5H(dw>q*=9#B>g>p(jEun|y8G6L{RBC#cG@MD%;Y zUJ1QZ^+YBg{FuN8(TaQdr% zQY|y$+M1PUtEXQ*+A^yG+D>S&b;)Cb!M0aap_?9UC&FO!LP(tz41|NAQX>1Z{Ot*w z4}qq@F=Myu8O3?tG+TYP@D94o7M`^5I5z5WEbil&-X;-_(F&U_AfK6F2FJL*JXmX( zqxKeu?GM(kb@?2v)LP8ZYOMkvV>Vc2m`tV!{B=yGN|jVKFqza*aq!Ze?O8`bA+Rim zpfPZwXd-(cF%&^I!C`HB71joZCa^YMt}A{6nGX!kO5TR$Rmdb~5mXJF4n<41y}K5F zBP~t4nu4Uz^EcYU!rzQZW|5FFgINJ3;Au#qgH9T zcoe)o|+oDWldpKwW-R5Bx7|-X2dQf3V-|D4Xbr+ z!D0U?(j3HCN8oNsmIZoXNJ1$R z)J6}cmQ_p2R%0FZ{GBHgbdvI=VZR?|AlO?A7jn3At|`Ze*nK|yf|{k^5QP-h?L^fi z=*}5PZ>pPCzfj|mFp;rsY~l?@HsY++L2`Wz1eC_0B(V;- zphC2WH60+P^w3VzRks}@IlWkCik(RrBUVKPV-Le-KlykN8I=yi`Xb7VO@mowxX`?B z#Khj%8HAl@Z)$(e+GGxcq!b{~W z>cb;Ji^`9E`4XAH%lNLT(Wbqwj@fRQXRy8gyJB>Q(>jKrO=OMcaBYyIR#h1j>Q|IC zxeY2ZtWyi%XxV&~>NgCM+TeSFF29WQsTnFV0K(c)X()B7t)0$aHug5^Q=A$+a=9*EZh5?Cort~DXn~x zB&ky1?#d@{wfZTmd_p=~{j{h5DgWXB9NM;PwaC4UoGp+M2K|^5^os)n*6}<_6E@EI zSH5V(lFcnBJr}8>{OUip(U2G$4g52w^Z~|k#RrFgo%fMwo&U8>mgx|ZY|u=tt3V0?zD?exuH`FJba7{ z(ugglRN2xc9W7zPmuCK_2_@wJhm3gC^4*+3M7o_^*GGIhtHX>+S#yn=U>t|fE;_ui z)FQl{S7yLH;g1<8TDCWO`>GxBsO}{cy(=WD3x5o5)Z*c3n^Ede&N%9pMKoT`+BC|e;G7e*}`-^hg#p~FCdmE{o#41C(F^PT0hR5mS&MY2Cj82}bZPR)=QH!#Yl z1*j2L$mOxiCKs&hTr>=CL)IpjzWmC_Wn{&VtcV|6TcMjQiz^cO%%dyf2Q#z$D0_zm zox1C1`U|@)sbg79@w_d)=7c`L;?Bs=vi-DW)z(v&vYv`>W#3;etK1vol*=|HT2_s( z7-B^{^|AA?g~Uj1!6M4c5tC>Ot%Z4|lZA|kVxi?eFbnNivC!%S!7sE;t)(qnDjR;O zY}zW>Tx7X#=p()c3+;Ms@pZ#`YUx$8th^y#o?5{tTfJ>f#T37_m^>Zn$4&x60mpZIgT%AA60Hd>PMN<$jm3xK-|V8EL3;za?j0 zncjVNeeLBJ&NobI(9I^7=X`(2FTKS?(6sTK@8Abaj#oKfX)uw}bG{+v%B6Sk!?Ge^ zl5C1YnewY4C29$rEkRwly;N|%;Zved$sp%z8?jl>^3He$*sN(AwXZ5T zU*jy9lg8-6`C3?(r75yMA-OJYoNv%>>T|w{%{iMuH9vupKIdy}F`RGBIA2}Q_BErx z9U+0$D{ENZAa{4igwYdH*O}}MxtUCRc z&CGAu^fRPfvH4{BJ>fZDrk~$IfpJ%j9E;B*=DuRAM46cCr4jf>9GI1_gnb(JqlL-9?sHBG2$T z7atLzNezVq`~^u%gFw*5-viI1*TLaAC~)z#w+;nYdp}1S#64shoGRS(b4`?`>|EGV zc_Fj1>OhAMnfe%8E)1ee-4GK$I#@A#5aQ2a6v&JQEWZ*rkOK?lD$m<2(;+TOE2hnx z@aVLw^Ybl8+mIvpr;+Fc$uXJ3FaN8v{RnHHDnxU}zyK)iLbq=+GDKJ<)rwpm(HLOJ zP|cR`lb)iiiMHX1&S0~3znQ7nZ??qwmExt68=gI)ua9y(UKYw(x_edOd-iU<_^z3=@wl)*dQ8E@USz91VBMqI5+6(s1 z%mb#9)u>t)TtqbJMMipI8Wfa3Q&BxVf)jP#lO#>;(y&C{dm@&itgir!pja+1*U;Vn z$eRNe18I;EF%DN$zej3yoZ?|YpCz;gj+yTvap0h?`s(kimOh%-l5s1^3p7wFN<1tv zHc3DpyPt)Etn}SY8H?VcSpi$@^lZ5UeNY1s?6Rnj0L!u`dT1JqcnF+FPx<7CJpjM5 zBu-fRC22^6HO8QPYithTo zvL(V6RkIopc3tOv@6I}}jH0Cn-st2;(VK+SosTkIayE7#nIYPA@2d=~4S_FElQ@ik z=`$JRiEH|h;E%FOB0ST0v274n=x3wyT4_3d0%_3fqpwVdmd<@WOqmOCT~wGR6ybZ3 z)lMrbZQ_w$&1c{&?F^iUQow8#84dTJy(TV2+PR0hu@VVjSVzcXZhx`;G|j@!7q{1@ zF0>x5zm0i+8Pk|;rYek>AkN;D%=zUjEXRcK$3E5~Qv37`Ke4aeo-CmmSQ9anOoqe_;_8 zvQ7HVTLuv(?2glS7ON2muz|JBODc8V6KI_P1T`|~#e|K=qckH`2X}_QUHt9kZ#RFl z{O#dy9~JB|9Wf0_m%Vg02LHXs?REq(Oip08+oeF9O%T}SG6kZnOCWRm*#C~P?N0Z( zS+?Y(^3J-ws69={yVuQtSY3H%5CgG{Vr78Y11|1Qrn3FQwmaSa_Zqgjnd9{zp!n?J zw|(+G`ttHi*?zZIk-OZkO5_c0zq{c(rujIlkGtLORX^_2$31S(%8#mj@_nKDf9TYV zD0-s`+<)oP%fZ z=g%c5`q+mr#koXqKH@SdzdzP9c541E8oO&{V@dRlXzZ@R#%6BU`Q!1$PYR%SFq-d4 z=V(UPpomh`SrkXEK5C}5(Y?kJTK@SEn#iw2C}UiSP#D=@M=6`YpJ3=zx4bgWgD#+t z)?GvynTG;+kDfD+(R-$|QF|%oW3Kx#km(V?N4a`88w>iS!a{)R_-Ysjf!RQ z*dmg&tTc#hrKH{u)=>4NZb-;BW=sB+=zGZosTg-1j${{^^ci+Z%-Co*zw&MalWr~< z`yz`aG2%yl@15q3QGVq;{RG4>EhTi6vDU0p@1;g@KT3}~oS25JC~6`< zwvcW1@tYYxKI}pLQfW?}Nu4{u6cgyVxb*Q$kEi>gAK2bY-MAihaXd&aTE}}Ro@`}q zjJA3NKr5+0fUXc=#3KL?pl$&HM!*9QU<=LTEfby!`k3n!2*6Vf3lxJ^kId}_1XwmW zZZzFOhnEi!|_R{)YqQA6t724bThBS43(tE>uJjrWa`i_wZ zL?3rs{$?o5NI_vdQXX(O6!RTg!<5fhy^SFiOV!?2yO;#BgMSJCV~M)~vM`!XXgx6U zv-35=z;QPr?uI=`Nn`>0W47ioDqu3e7V~!odO1xo&)>*U}z&_rHp{e4H z!UK3yM!Y26z&swHxmVyGd%^}|6_Xj9x5Fx8v}#-5D>J4-bkZ&*dBkE}tUV$hZMKeX zM-S=`*LQJ9)Eld8L(EO!2_J~Q&Fh(I1Pv#}PHL{4SRMBU=E>LJ-<8Psdd9%d)oEs| zjDB(gQ;wWwj9*SQbWg?+3NJH9RF!tax_A3O^fT*=Wr%R=r=29T3=S3r>(_dB^KdWi=&)i$uf>|)J?EJUK>aG zb@Grxfs%#PW>HKR58um1lkOAPwgYI*CQtEryEVScG)h4uE^@LD^GhaAT{eib(P0CM zJdg{M7|Cn1ft93br1M;&AwVbEeLL}70N49ggyAVmCKC+j)B2t&JM$d4agjK9G7x6?LbRLD6kLCxle}FLM zDwecOI3wO!Z-~K<#rdb=Q^uHOWBFkgE#i`FJm;09%p@%d%FP@^v{3(+TIP5W(9QqH zP_s0{3NY#6?wU%|rKC_A-l8-YJow995!qltGE zwLRrW060S`Ho+Vtk>!B06ai#1A|@b)gf51f92x5xYzBVTG%-w&gbiL3lL@ut)wQTM zqng5@#9Z_W{oJUZdHw8PSXkhmIv7V_hkmdmKF5N>Pn&O9P3BkhTG?E5hkg#|2T|Ev zG#j!a5tQ{{emJO=&0v07%F4TCWF1%d<@#ZlJ{R4lpM4=KhZu9LP5hwYD4WCla7_|4 zwXE9~78cX(zTJoQZI6C#)=#EX*3?Z3S{tkn6QO8sRa5z9eLSR}8T}m8k5kqS@=fX| zSVh3s3t4$ujjYy>Ta{wBeqN@ZR9UT+7(G#BI-P$*_MP-l1eF3Mvz@fj`Mi2E*WeW(t6)6v1Hb+jR9T>2*m}IS}3trDN%~O zVqme@zkU+6YuEbis<{z+NI{G?XDHglp}oRX4df_E8D&FfHtUko-J@G-sCMc0nSJ3a z=dw3yOQ}EnH?cllVA%oeIP9A%OSS zurk@*I`Ek1I|h}$#>VS~o$#>e5R%*-K3h9J;nwdBB>LS-q6sB} z{E_H)1`_?7N}_2c(w*ic|LuW9U#=wDs6;mN^M5^%=(j3~b}A7xkCOh?K%y^I5;-M; z(v#?m1Bt#+Nt7xPG@V4BA4qhyl1TW;i3pI0ISHY!ak|;jn>gL%Xm897TUr#STO4)9 z9GXyS%oz#!VqHfE)6=%{CEVC1U&1*G`4XN0Azza2RK6s2%9o_6O^tMhvEe{k_xZu8 zg>1ieeKohA`9dMg0&=<3%`k2B&+R(J>*)*mi(}tAA0;H)&XXaV+?3nGUS$&M=>H8Q zi%B*DY2jKu(&{k@Qddi+L$Mc;ASGPtqA30leD~ZAd^^my72j6#ZNaz2d{g+Q%(n^O zCi88^x7mE#@om4?EOz_XDJXlN+s1$U5W@9n34fN7vkBL;xDCW@us8|pe4Os9dmr>U z_#~4gPORUMcxkn}>vYyLL+&mxvDt;azqdoS>w zbbI+e0=)U7oDl|;Kl5$Dx5a!@_@>Oa3Ew93ZN|6ReB1GDFUr>5l(P2#lNq;%vJ+s! zA1M=Xia+y-{_ixOD6XzACR#(>wD~6RO_;BZukFi5Cz1stPfqCUphRElThOj>598tc zrO;kN9)b$ZmSd$5#sUJyDa08+`yjPhp?&Oe#5SP3Gz-J9Q_dThJ2>Z=J2?L%a|h>< zST)XKPn@b|lZRBtZ1Q>)H=DdQ-6!Ww>3%s&aeA}d?@n)lG&Ui3yR8FD{=|p7%y6S~ zL?I^9Yy_ISkmy~7Ix8FdxCikawCK1R{W|R&NrNacK2m!SzZL+FiZ8g#iZj|TqR*aE z-KKn&joweiYzVPY%|=sM*jJ66W^H(awL#$@Q5ZIb&&2*nh<$&Et!o*1zan4e3xcU8 zxi80Op&*qHA2#M&D3->W!LtbcX1tbG44uoh)AqS}g=C-=?6bK?XekC8VjpT{L&*I) z74e|%9il9n*EkGol5>prX0Hl~kiH z4s}@J1KeC!4E8tpmP9&I2jHBJ7QUa{w4ZoQwPyGmPNapsfQeexzfuyVj>t>!^J+sVV z360eJ*f)Rg+RfjyX7iatFV*~X^%l@IrsGRBf9L9%W!%eHn`5v{t#q1+$6bRHNTP;# z)dor~-j*o`&vMKC>;lmz0{lF;mQHh41!IO;i0SMG9rUCJ#Fw4TcrN)&dWihT7Jc^g zR#>v54D@8}808ykz;+!t4XwSQ;K2kyK6QKlh*_@Pt%N)B`3-MkdtHK~e9&IEvj~e| zY4BmEMH})Wi{GP{S=u4XhDG=YOM`Edvee5gUaU}NX@)Fgi!d9O1>Y8B5hQ%Wyj-Qs zl7uYdi?RizH28KLkJ2M~Y^-kr1cvGVs0r?lu)uin3dH^l@*CJf>Cp@?{$zH<9eJ2F z*#uSX5I&y#zTVP0va7^77BqDO%WD){AbovKN!z^u5@&tQTC@roS4S{#dwg`d-W~ z>&46}y*L1=^*wtjj8Zxw*tKHRYU$U*s1@neprhZ8&KD|r%pa8WSX_oj{LLJghyFAg zwmCGx-j{na88UJvcjy&!i7-On!SN%mRYJq}yr`eKq{NlERG|J~&&%{12GeuqvI?ZO zBbD=o!kG?~&u(XVdd;N?cj&*B-lRtcHv9}6!wR>C`#M;&TfLdEBk57zT@+h8>8546 zN7^ccScXhhEUX=Q&6tm4Y^l$PDBr~@1vl}5x{+J9p9i4TX#5rG=>dXWRdD9M&v?S^C;fg>LgW6i5gf2 z;7HI3Y7sP9EJ5CM6T7%UUr}1xu7{F_+~yG6tjCdt+$IIl(AadC^?eAX86V{BxNQV! z_sfg=@96jC6`?O1Bnb``Za^zW;^WX9g1j_$fQck?X7Sl{hhLMJU6KMOZpRsWwsF{I z*D&}8gRxNu3^dXX7#6Z=W)tPn5IZ24)MjDXltUp_Q*IKpE=i_M!^)I{j`EQ;nM6n3 z(TCZ&DZRW#VmWsV!SjTV$B*zy_@Z@;Wx2=&##D20+E>k$RC8_V=h`rsi$lvC;7fAn0dIsp z03N?P3IlO80N!$Wz?Zo^;LBV9zMsnj-g0@sm$^LP%Ul3Hmf>oFrr`8# z5M%JJcCVIKC@zA-#7>hT5epnodGbp-5o_i?N9%Q+L&h>R7r7(pZRk8IY17?gl=?=O zDVRy`9b%b3CiJOFz)A?YNLU+<2SLeaE;Dh%?IR0nP|A9UP9k zElCmMUy)H}jADyNQJZz*y$ie=PX7E`B_leINH{X5NJ!aP+_%!H$_H zK@5~smzLhj)eHzU3J1uM^D(ydTqV$T0`}-2IyZW_=Q73yRiDtN$EQ!*?!ySv1&8q6 zQNEjf-zB&E@wMwnF`K0QEy%a?E$mxyi?bMH>dpKod|TO6HuE13{vG%~9Q-@+e<=7J z{vQqg6#wPm*UQs&MtS-amZ1gZP*uHOl`chXU;A^H&pX!sJi_OlYkwZ)^VYRL14HN5 z{;azu>Dr&i`P^Rn^8`#-#!9vY7-SF#f5Ta}WCI|u7Uk-1W|kt9T^2V<9J-$#U?JT` z;?Teuh|?M8*s{3I#4+jv>0p7_h7ZQcek2A%2htJH8}f?0-g(D`h78^IZ|7BAkaEYV=h1$chuAn@JHcJC-7BM5pWFwtYK!wdoBm_3CvSxlYXsT@RqTv^OkgJ8N?712P zfUxb0G2$B^Y={u+YJh9#po<5e8^@R2ks2>PH}Wfzwc&o5+tKtxOrWV)qGjbjHu5KB zAxyVXLIIcgq=LAzW$t6ay%^jjTp@lt(B@uI?L~{N)G~jtiAadAL=&eo}r6q=Ki$6anXB#h3?Qm1Y=N$2B9?V`-u_jp;AIX^G<9hF14I9Nv z6w}#`tGUuL#d@dy0uwviw*E2=PienmT~$DaF9>OEP>34gPppHMw5amJ~x;))}7^%OTc}A}Q8C;5b53G={A8J}L6Jfrjh2&l(Oj3j-JOeUmqQ6UZh; z&7ZuxO`m*^U3V~)-}1`$|HwPC3F^KRy{8VFLDB<_2 zF=L8>>@#C^jjXMFC}P;KSezo-iU2js2zV(&2OrT@8dUrYnS4R#&!5*J3>urN;R+ULc1qbBCMOoQ{;u!0zf_a8ccHJ;qeYQb7@RRCtKfML_C$Tg8J zd3#4{qF(ZH&j$jA2Qf91ki|raax~PHBIu(lNy8oCR%7_~i5lu-Fo*g02^lXAOd4kb zhd3XAshv)5%_nmXhPkPNxs3d&uWm$_$8<7Sb`XMNN|U@M2iFB<`rF8#lIo%iD{@U6 zLTAflLpRvO_6_-Ea~PEhoyrr`sk=FBTLijVW>LUPuf3TAj~CL@LP)8Q{{J>3S7&*>i!Bk>GJ0u$M+&B^QA8^SbruT3+M}Su>|`(E5ml^c3-x#AZ;pk64Q?}a!5--}1&qZdnZ>4g{r!wcgK)Q9i(O@6(1-sGK!yz`)? zK8D&OsmN!IKZQrS6!0we>)U>mFfWzis8G0FIaA(o`ZgcU`p`k|wA_*7wWahncT~<% zd#CJz<02Q>468jCozU8?}0YN8l+C1VJHs@tt6+ z5?ol28TJ-R09|@E1b8+8DOvCuMh&P5d7J2n@kMn%Mm-1jHJr@hd`3DyxUYsm!1=Va zeQ;mJ*&5Ez$0;w+&qeoh28i=>(i6hH4<#U+pN-RzU%(>`i;xv_ePnyYjCQf(B zJ(~Hn-uE*^rrvvx z^i8cD&k(uGdrvN=Gv4>_j>Q$i|MTQeUiw1-h0<#y5IXgLF5hI z`^v@ifcHI3q3CU3Pm_;9)AZ?2$o0bZ(^?uoiH~( zA4&ff+rJsk=zPRBUq*Y``MWV)g2DEZuEjK6PZwoit#oy!=??1zpy_UvY`>|RdW0|( zaqtKl!T4^9kKT?>Gd5x8qu1bUoR40OvuQqh70%}Q=zg53`RG2JE%VX6I9unVdvK=b zqmww>=A#oh+vlUZadyl{ci~{E_?0+rK01z*&PO?wa}J+rL29~P^U<9+GxI2NH{I^} z=;b(j=A%1s_RdGQ#G&L~1c`7zSJ)3U zXE4kIUBP6F1X~jML4KO@uta~qwq4Qf(c5t~q)V`-aAZXaVtz2B`1>KnBbK67q`*!D zmy)cEcZL)fEk(CT0fzi=NWld#tA$%p)WVZ3z8xFpqxXgs?+Gc`)skYeNC7VVFCoSI zLW)b4VyZ|1MtmTo_>qv}2}{9y7`_(p;(rY({!vKrK}+F^6rjeBg%m#;Qe3tavg~FM z13^9#Qv7&G@nK6bTciL@{%J_@(U9UvOL3q`0kZs5Nb#|d;wLS|!6F4H^K?k@(;)?H zC-68_q&PAkeJZ5*WJvJ|OL4SFar=Dqb0NjggcPu_lyOIq;!bY%g%qC-DSp0|Pl75a zX4e){mg;8y;=3lXHglwgG@+Tl5CShG`Hpmh#Gd}OQttdD+#}>l692)BIral)cj5nu zC8FeQ9KZ56k6*CMt>(hlnF~*6?ox2!=qwB$XD)o4xzDLkle&QD;t*QMkT<}W`I}6rlc99XeuIgHT^yTQ zq`bmz94#+sCOSU+#&|Z5fui~&|i z#}$g&|M_)iw->OA?7wo|*%1}?8~>}e)eatJG-l9|F!GRK2y#9FRnZLY&H9@ zUw8Hc)$E_U?(7Gv+5hErXFpWU{u|ew{b)7&Z(euyJIG#AC9IJc31DI$zrZ|XYuI}` zoA^Mq_{@%Mr1I%}`k=Ng$uYLd&HOob5qf$KO$t(M3+5ChUi1`%HjJ=DDDfJ;VR1g1hb$O5?KdV*cS&279ky|B2KBx{B6xj_>`SQiOW0K{;r4+Nc3BCx7bOJJ>`SQk zOPHyaaK}IiGgiVKMG1jA`w|-c5_VThc=33m>Z zu+K`kvnU~uY+pjRU&8)s3EKur*l#6lD@q7d+n2yC?t<63p;`hLLo0B&!AjU(ln@BF zFJZJ_!bG(MRCX#QOjrp!iV_0t_9cwV0x(&jZCZ^d4V;@a>?9=%A)2JCerP66UzQf6vgkJX_POir8)ttf!r5*&O?$Y`21MWdO zC|T-t{bolkjl`v-k5)n`j^wzPrMJmToHBe` z!h{6`>+3-%CWMBLF_Sav9i&1E9d&n`$^z(tARhUbB4tqRahN2Ys7+sk|59L>n5RlL z>UMI}h{)IzlAZai^t`#7kMs}6r7hurabRY(!oG7DGlLiw$EC;Q>_r-jvn$P&X)jVl zoL%X0=A4+vL;MZ#cPoFo7=M^QJr#UJ7-bo-#-t24Q(2#MjVf|CYRW-=j#gJ8Fh|3S zZ+n2O|F+;Gvg~F3#3V?wTl!(xIirCK3wlRW@}^tTt(s=PPb2BNuWO&BxwD#PpHCyPyH7J~X@IcZ3ELdh^J z&{Q5{vPdmsWviSiIT-(eGo`kjDLHX6ZHMUk01gbo4LFDABbgU~iP(p8s}7ypVj=h9 z9GZ{z;J}jX#^E>x^MEebSyWqREE&!*okg{E#^P{}n?W`mNy$VT432C_M`p%Nr%$r{ zcCXH&+U_-W7Ijnn8i*_>!pt1>n1(q+cm*F%>P)EZCUhp$))~|7IGi!f<8a1w8_qpC z6XG#voe8yd>U9{0W3pRuIIuc|!+{m+st&Af#-Zq!;cy0V5Xb3Eh<@tyi#fcn#^KMM z-p7H^N$=y3=mGDW)zOfpWd55V|h@R#uh z(-!Jl4R-H9`a<1>vQ~o}8pQ0j8fUH6Fgo@UvRDalfm2)?t5{=&CTlH>RpiI2o4?J* zYGnCX(Irlg^BQ9SrxnHu=oDjB83n%Dz_b~K3jwu8m};E%7Nd|vapECQD{9NJma!*1RVF3GAJ=l?pqN>D|0>EA$1UoH7$&CzO3TY{+ z1iOalrNG`cu$$ynVCRMTqSm%*MIoD-UlQ!n4{@4-f7MLl3-Q}r#6^ImJC7!>GG7!O zP3}QB0Li+`J4emrU2@Qef?fV8AVT{maj>l4!(nIH#X%VgC2MvQi8BXcN)qssH?B#t zEji{Aw$px0@+-f#LCDIK5zZsI{S_ny)Anep5Rhl%m!37i_U_cHER2p!S|tVgpo1q3 zZCXarG?#l4%0zh=$+jQquV&~YzKB#tw1>1srIj3Iqy7w<4)^|HEu+yhE;bX7lm$0` zfHW94ozaAB`7FGSLH}meWj)fYylv%006U94C2wm{dFRNhNSdXjU9h9x`@vYfKWKd? z9@?fT>ODjavFR}ZSxV1pd1Uf?=mA5;gsYv+Y)fWBeUcoc^(|0A076)QQ>;0O;<9OT z10ci%84+N?2+LPx}*2(5@qcHlK3?m2))=#hplL+a?vBs z02o?7*j9*dIj||R&8GE`4G>kb8JQD~_*dq2x|+5$ic|$IKv-Ps6lThFCxi-5DIU88 zMP%(h&@gt%eYrF`>nElO5~1nEl$eihG#oQzR}7;~jA)I}n`92~sb5myyo*MU`R8pc z=(7fI=ikP0>>o6jO~HVl8mL8(6hN;?XqZaGY?*Lw zAmMD0P-qDb6+ve8Y;vdw9a8A1ZvxVYC2GmzG_D!=Kn)?94K$OMJdEN3Ls|GpE-FtWy2bT${KG7Xv zJrPIs>JRnG>Z$*bUpT?1n(D0eyP8Aw?#e}Q$aKiDih&EB(D@pUF6fJ7$iCvEN~1X< zD-#h=uy$zbdcsJAKx62ka+M29k3uF|k~GmLX~=S3$KWYF6G;gHX@9`{c@n=2HV-^GWfbWmrt{U2WbA@&BIYd-$qCwO zkY=e>cw94V0?Y(TGcBkq!81<_;8Ut9k!m@v#AZPfXH;(@W5{9BccaG{J1&Qvlya&Xj6{dA6Yof2Wb{Da5{kgK_wXzKssK1J~kN2Y5%8&qWyDoFzDq?whuUiwJN52JsbNhZM)D zv+xg6PfxWg(VH5lGlT(v0m-wCADf(*0dyPHA1-bRCBTSI+B9B|-u39(Mi_4zK{v%# zN+i!VB0@#|8e4ziRknU}>xAaR{QN!IDI55x{rX3jWb2If-}>xF3+m zVbL$KRsxTBr47AXy7aeUqxc4(A!Ib5g>ikaYl32r13<2qgR0@eu-{*aqKeK)S8#I~fHLV=NcTJ@*lf;>?JCo|~OQ-xys`qD-7QtmRNjJ5y znq>3H%KqD(M$DhbA>z!YwWd*H&1v+KP5;}PL)YJlwdRnx=(XlheZ4uv>ltuK6D)cx zV)C;B{$4Zg!jQ~GL(n7~UTc%nV9CX)L!@vLE#zEv5)(bg(p{5NOY2BcxON+H&ZuYH zy~{UNT^X{g=Z$k`bc)&~3Z}*k$JLneXEL6BrzjEYv-yiP48_R=A13eg#5@y*Mck)u zSZc&%dVL5>wswwMlchYfJ5Qn)zZQ`VmEM>XtoG+*AV$kSC$7{FZ-Rg#<3)K0A**GA zdXH?~!x=dK|GTXjo5lK&MKD6S!kFkKE|1RL}8phM5#B(AC#)dZoKd*4XLGJP*Dsf83df>pFIOOvB4jr zx~F}(9>NS$5heakxft#us%ueL5bPI(X$MlZ$|RU`uyCcIsSs5uXq!c$N7gUMg{Yz~ z_SzJLB3i%t*$`DJ=zvA>*g?M_ZGE+t6$Kp%;Yva5QY=ZOpgTH$*a*|hu54>2+4PFb zDa44S9Y2qRR`U^yxw&9F;O@^OE+yE;(V`eDrWUgZyrerjPor=QkELm2$lfHnsc688 z86t~DFf5aalBt*&jg5bi8V@~o7LG~J?O;cnC9|h&OlOeI#5-_5m0`^#-=D+N=05(tcWyS(@Ud?l0 zIQlnQNa&YNsE3hm_I^O}1I%isGeAM26ZL2=8W#fV?gtY?7d$uypNlqffeB}dqkEh! zT$RJw#&H17c3FsG7BE((7MtzXITDxV@=yE+J8jFPc9yf6x$!b;oSDj{$J5CDi&UHd zoJH65G&{2*O8N=;Az4N*V)SH4?oPXrGG-*7IL&%dBtW}CAYef#Vk7~~d#BI%f0}LPMe87Wl;RZQfDGSWI}tvIMwuqn~^K0EN3t=w(>Z8xLt{}o7ClktyE-%!v(E{nMCF`7Ldtal8RKx07y*!j z93!}0olhrmeBMQD8h_5k`u$NvV9AH>io(Ck`c}7Z_3+K2S{Bu+Ms+Q!TaD^jRIeH} zX;G8as40t@szzsEnyp41u&4vosDl=Duo`v9q7GG~j#|{w zYSbMTbw?4^`NxfT*v_bQ4!~{|UU;c~uXzy;9ua>mHd!1!M+mUQe5%>==w2|*eq4K8 zZvShQPM~x~4Nb6_n?ODhX0QYsn((ou_qr+1OYwN~w2u8Is{S5$T6=@Lp#m3A+XL{9 z0lyy!0&x$e?C`8`)2{a~(d*UatfunFe7_f7Ey{`>CBi^x{TV);NgU+ZtFZng`XW&> z$g0A;L^Oy{Ob4LJoT_22jKf?w2J18IMoe>vG1+5V-|4C3KG=5oYz*IH7I{!iG?^cQ z7t(U*qSiITjNn8^oSOAOCn)kLsvlupV)7`Lq?LL!>d{}?U~kV`vNQ&4mdOUI|4Ka_ zQKNX6~Hm3_?KTQ$j$uzt(^NoMHh1Hh?7rSd|O{(#G=;fXkv3 z0MQl%^xiiRz>c!|^7TWY)45cOhc4vs${M)hKYAH0=E++|n~es{C@*eV?O++FU5gpw z{7B|t1GMGs<#&&mfZuj}68L*C8dB%6$$%rI##Vq!dhg|xdD=wB;fAILB5*ZB4&<8+dmOx|fB{Sbl735CYG_@z7t;-QTurFW z{1j_dgJ-tVWHvDL)lAdxqR~%#9pTd=(PtXNc^qL0 zA4Nz!S!8iy7Ir~Nn|4g#UG4X&@I>GWpT|+$p{ol}vhk@jar174QN#fmXMKmcfIrszzhNKZ7pxuSXoSK zWmb;EMFPl*Xh1!Kwd`lWP-8I;>RqTy8SLcUGH7A(qgNor07R4rPzZ|T(E*OH2cjf? zN5T`;r>7!CsDuqgez3t}Dk!F53YdUTYzyUC1!@#WzpN(eg=93LQE<+y^g-<*x#%|) zhayWP2!-h@>1;p)S_c@Fr30=?>D4xot7sGay;R8T#J#`58A|90EE-VDBvH1)Vd~Wb zT|LO!HWWIh^_|g((@4t#sS>s_cG=)U7s`P$T5c^%GWcMFTa*(PJJVnrSnPB>>{nno zBeLjRA=RNAeOPDJ8`CQID-HM&@gY@y8QNzE0>A91w%BIRpeBGT`Tx!@gJI&AnTa4z z!7sBEi_N=6e%aV}vZL@Mb%T&utadtNz&7Rqc}?J#6XTa%LYHigc{F8{M-gFo&|Ok_ z@ZXV3_Jax>)wkZ@1JJ$wNjC&~3iLvNrD}gN83I^8+@DN^z%~W8{T&-P)+h}<9j6Mr zpCXT8LmA5%WAs>R2|Cw#AoV%`*;kV zsA-1B+NBhDjLi6Y@tEuZk3;75@YtAR!wu1!<#>#xUc=(LW-8=bQ_MIIh>9ma*NTIN zur^Z% zLk|e`-qL~5wbib6KTU*2^e)#-xd@){0muYLQ<%$Ta+0X~v;;N1_q{ta<$wp?Xi5T6 z^d=qEH9pFuVf zPByAY(U$IvOucXy))f1|)ZEL-O&TL>%-AKEAP&OhIN3$jyetXf{48~nrn7+V;n@ZD z=z#kTX^WZ~G(vY!O>xC@?gAdInu}`O{yKjevvmG5FY*$HL^T^fgSi0-<|qbJfg?sI z>xi>OE)i!F{kfRpFSv0lzMI#SoI@*^Vb!Mhsxd#;do5-g!h>hjhfyxQ38o$sigmh+ zFu8c`49-u{iI29o&U8wp=Z;lai~JH$MvJ=P7Rwu(7kl>PTC6-xuD%Oth0*`sB? z*PK^bOYL>IvZb&DdfCkmEcHa36<{yKm2Kt0x8d+UT-i{Iv)AD&4Gm>+>)2k2v!eVX zadv{Bwv2T+3-B<|Q)!6Q1(u>%Me#hXqEsve@OG;N=ZKTBstq?L=z9<|U@fVTXI$2h z_W5Z3hcw?OFtBmbrX==yiW2aN8{+(O`_~K)FrY#iXf<4?>8F?4t)=|e9+XBqOUTcw zCvw0(Ihg!oKgJItqQ^xX%=bSDAt$p4+^~1)h4Ph)IB$z}tvXi{-;(@!eW&L*FzXV{l*DbZ{~@*(N7 zF~2xrKEl9#8Kl2msc;4;x4VxS^=dI+h$WhOGd%zx>e^c&%V-@x{>MCAAnq6`KeO!Hy`cZUco9>R77BWGblzzZcnc z2v=Uf&0nbbq}AU2862H@$2WQhaSpwsj6bu*d08>WZb9nEBqMi!40U8${xQW{A9=-P zWC0?F^+ErtBWa#TaYb|Yc_kwJ9~GtxC7t_^;lm$=4@T+!NG)b?8QyQBIF2I8mV*whVJv ziNF-v3kK0>Ey^kARvJyxfx4dS(kDFi4 z`?w7z`5s@nAtw1AKFkA3TIb2ssA{TGDKSIPsXr00o@aPbcj1_|_YkM3I-F&C`mq(! zl+J=q2l0aBr?JrCUm(`{W2u;<@fk>ok^;;kDF?r6q)vQl=|6?2vgKHo9seM@wqwh7NV0m; zy|QM)OlDTrnoO0Nj)dZ5))-s~0Svf77^mBT45&$(PD282NWdY#6gn`03E&O^0v%`p zX$aFZ)wdo-I;$N=N{R6%`whDA|j7$iFh@jC3V?&$#o;Q%d~FP>QJeqEhy z;a(p$CR*CZAAp~+R8)+KSvay$E=-RYrlz;v+9e|5G9SeGr@=Zd(M=D2MZ!bAvbrz~ zq(cd)oe>`_e?=H#Zmq@IFQcYI__ zQB83q>Wd5XEX$;2LTY)GkO?T)6clTkl?h)zC?iJ4!ztltPHFAPDb6`^dva$SK3UPWCJVi@b} zbW;j%)++hUS|#4pkOtk<8>c%E-y8-O#2PD-D)BrVr zel%=mJZ#V~joRztpowV2L94bf9<$SZ+&Y2b8no8|Y1qJsL#E>h);BPW!0D0wi)X~} z_9e1ut>WRAqSi6UL zY`i|{pcb2_*wc5vKP!IZVr}ni6r%ihq`is8Nv5U_9(lwY+UZNS4+7gnCD2+xhc~1n zfzots1WIfp4CMg9tjke04Vc>#x3;cUh@_gl$0dgCJbUd(5(9NE{`~;r*Hk-j_mdZJ zAfWi5ZD9w-b`y~nQZNL4sl`<6vCvyYa>m^=?8Demg?$()Dq)k;Ti6744TMdOwy+5q zr7RI8l^|@gg&b8mS`K14dA%Hy{G=@BiL_SG`6jtpU}L!#hJ#PCmk(47q0CnY z?UT)_mg1sZd7#p`WUiz5gYfucKmOBncJSd;j^H_*f`pfDki25Qt^&q;60VKM1jdy-S{PUI7{j=dN3-W^&>ck-BvrQ?xr){0f%yA#HgF^-FBjhzrj zAdU*-<5A)8(E}SsWnkLPZt6_FPlRurGqig_@w|=5iDe+fj^+Kli7&}M*vcA<6|?C8 zM%Sx2k;@baeDvSggc6lJu*$_I<#g)g2RE5c9TF)i`=)Y6P1a`Al+*)X!;I3cdjZLO z|6Z6;eudZbj6!N2XO!OJjPfhfc_%ZfUCpS;=W#|&mN+U2;cM>}}R3)E%pV>XFZFr}U-gAXZ!O*_(yd9<~(_ROk5ZZMdvq^U*+eWD8 zkiZ{)?l=UT$1&}DP+mN=)}cUQW{MZnu`L|t_EcF64Y5(L}RlP^5@M{-nIr)#Ny5G-vx}?VXM1BfvY`ONmdsk zzLaYFz-`oU`IXw%3AK6P<(XJZo?X*ek?z>t|19a*{yduoI6u$!J8wR~(2)9`>4aEb zqzcjYgGJW6J8Kr?;|YHk^qlrqeW`56#8;6*3wtZlTJlr*7gEVkbV`llYbr24fdBx= z2i9<@XyQI6Y$C@t*+c@H{6o7@w+GKI8OKT>Y&?#_m~ezpuh-%1tQ%ghN29xR?yT=T z6U1}w@IH2?aHwMW?*TfEJuM^(4Ut9(X4Si$u0w7IJpDXE9ZElBrOF`!@;=7KZkKp@ zuq5#Eq{zV-7OFg??@2cT4_)%|uy`t_AEM36_ca0Z4_-cvyu8Z^ynI!VczK~_D8DKw zM7vH(3NThY{H{?RzK>i@(9=XP1G#ThryeE_oB(jXvYDh?TG6@DE3l*tnhV*-;?wVH z9_Vnd;=y^(D|z^ODrckISLA7#BVX_h?bhIqp?-^7Nkpqbk%o1Ym74GnNCLd+7Er@` zR(26hX&o&q2!bu!o>(la4X(DNq6#|bDY2m%_v*Z>-51bu7D>=jgP^58K`S>&Pzi)x zq`kcdR>jE|&n<;*PGBRL3~ex!xjSCG?fqfr3Y)%KQ=K%$t%TInjjXmiCkh`G(|^ zWeM)FL=_a0dgzcskWZ3}PD6x5P6VLQ^ET$r+Q$8)C=TRCUFz0^jZ=pG37YV?pUk>J z6aHidhYNZC)(=-M1xp)KQ2@~(!`%|>7C;y;HF00hVyC;3I% z!<<5dHA#DdK!Z%^DL4(J79zb0P1VC@be3nayCB);Bo1{(Y=rfX4q(O*$8)NUf?33^Vg=bPv`%WP7h*0X^o zWmOQU&8w0obvRE|)n+QyvMQ-m>)9}G_CZjZv_aih=8XyMtYtPSS?k%L zKCX%;ZCRDHt;2b$sy0)*mQ_jZTF<84TGcSt!!7zy`q$xXL0RgCp@Q5Zn-sD2Yz$Xf z8%xHP*`$#j&Q{g7nQFFdn^d#)Y>Zf08#uaUZPL*WXQM&oSdZvb%c`WTt>EC zZOd%Z+E&@%CYoX_sEXGO>f1<2N&akH{&>Aza@k^i0)v^LEt!NKNinmoX(ZAWY-O6r zMfj7gOvA+R6{g~z%&#Un3RSEZ(N6t!4S%~kHT)QIt_ z)L5%4_1=1FZ`;*D?h_0%tJG3ak@`SAHJ8-Z%D$qO8hdx8?$uN0L#g|<)OkpKWj!?- ziCWoL)lwf0sjsQ0UKvV#Z7uamNPV=P`p8h~>uRZwgw!|GQy&{j%`FR6pTH)nl{eK> zA0JA6qL%u2Nd2OE>RX0V-&#wJZ$g!Qhf+%rrT`lGQaDNI>y(;h_%vMW?JV5P8M3hO zoS%Q&pmKmhoN-xwpB~*Id2m1Pm^|Da z26Bhw;Z#VyL-O#_ka~yY;T0kE4#~qSL+TxphgXHvJ0uUU4ykuY9$pht?~pvaHl*Gm zd3aq&y+iVFI;7qqd3b$Dy+iVVm|t^zhveZ+A@vT)!$Z}y{H{1HzcWtDM>d_7<)rvq zn3L;ioqjy`Nl7{Gza1{x*jqXI4yWZKG5HSXC01Q7eTNhCd`!N>naPcoE`5hn6Pp<) z-{IVRM@+uM$$23r-{I_hS4_Uc>G|%Me24S%Ju&$XC+L$g`3`63`(pAPPSK}g@*U36 z57|1)Yv=dGN%~LYBz^S1^(4Kxqe&|5ok*Cu4Fv{_wL>Q|$}uW>l9tKMSy#!;S;yob zkI6kr%j9OQtK?>_V{*(tUAiY}ncTc}mE62_OpaZGlY5eu$<16>$<18Hngd~>zG_7G3q-{(lWXE>ngeV>zMqrF}WvcncNI^mD~(= zOnxaQ_arToo5QY>o5POD5vm#(Ptr2ES?nsgS?rkn^D((6X_?$Sc9q;bc1-?-nB0@J zOl~H-N^T}QCP&(0U_437^9SZZ^A0ZZ6A{rWSAc16dQU%FmXI>d5C~I*yxWU$ z)_HhuyAfu~5aLc9uJeD1Pr<3;tZ|ZD^RyCEN{Ptqz+J}?ZbDc(C(k1&CoB#|UIkF$ zQ}dy|%x!C55ldBHCpLUV09AeMZ1{?tsruU8@D+(t^>tyxR|H4Z*QE_#5fN2i_iy-$ zB&hnDZ}^J9r}~N;v61#7*Qvg)Z1{@!ruuqh!&js<)z@Piz9NjNz8>H36|qb8^_C4^ zk*-u#o-rC{6E)YLe+3Evxo(MKmEbEH9FaJ=*WM00lrKnwQ5}LP!Ay4}q9C!W z0Wpdw$h>M_M-c_VQSIv}q9CfQeH}#EnKy{qlnTfHb<0ZM3iYXphH-KAitt2(n(2B z{`XWxL~;~a@EBX`_)%nOUKUxJmqnK5Ws!x2p;qrGvNSJ?EX~UzOLGfksZ*6r@a6BR z%HLC!d|t~>MOC!c1jVk`o;IeKa5u1IS*7l`dK3+$HIG&~!k$2G&;_C|d_bjz9sYQ* z20>jbeJLp}WN5Pkd!&P=Ru%@0F3a1%9E23Iz^u$cto3`hm99Y*Y1M1ZB*c|l>nh=? zO+s8-s0(GGZ9)*L)(;loj8^JMQ%W?KQnI4YMybH8!0VtMHY%VpIs{E*v(!cE1c3a0 zY5MR{idW7ksM-2LVi^@gee#zJ(v9@#ix%sVC9J-xx~Pfrbfjp6)AaS>^AH zHjBRuraI$%9+y21+FKpQ3$|JANsjE;vbt0u>ufcw=>%B;lkI~PzQ}~tb(5-B14^fI z#6jKD=ssv2x47ciG1flQ`Nfl&4$1%F4UJv6;Y+_6JLh$ozhWHl(GLcLiALxO9l$tN z{NV?8k;x~E5?gD{>8os;@Z#1KryM$0vGDqn@|7`%fwEQglLP-0sJ(Tv?Aho?lhpfZ zlX&$NX^|$CAB>g}0AIXF7I7gdQqs!K!&-O@vS=iU9;A{d8}sK;1P<$B&a!2hi0nv|}j7abov?51{M% zI{r|qO*aHOurNNJb$t#R!Nfpemek(CD^oCK|;v*5Z5eRQ6?{)3cenh8JozS;5Ln4&PU+LsCxUiS(@J z!7HR-qUClz)lxqs7lf8dX^ed@hsC4+$@2eH|0f$!&o(=C`qH!WnKVjc2(1 z<}=)W^BHcxQa-1kCf%M1=UzJ%KVx-T|b zcR|a>BKd{b+ZWx){pz?}1M^wh)hI6VE45~ks$=tW;d%I6_w9{+in*YzCTK*{sN%B_ z0qidDRYFM{Q?><(fTxcH`+x^0Bd(~lQl#$*h&&dJIGGL!y1 zcsRz|eas1ndyqH}J&OeD-I)7NL++xM+g`Kl1t^WiKe`(kEu>X~aA&O$gP_F&5Sn!m zyeic|XcZBJyK1>h5UK)3Ko~7#toZBDj=O7x&@pauY^hSv4Kna>-f^Tu0y4OolqD;=vFK${&s|4l# zS}7$cReMH28EsFi1m%HRAr&Z9DI=hamNH&^F*N9pbs- z&3?54^e43JI;-)?m z))(c@NmJjq42DaWBmsiog*_uq-dAL!!ZuZx$*p!giI z_recy3>JQFT*$jD{0p^(KQLx-;lDHK?Pl%9av-eW+*Gm1o5h>T!#n46eP32w{PRWD zUa~Fbx|9v}m~j9EdPr+Bk5>mSz$d-L<#0PNt1Z$>tvPb{JAX83uyQQp;|%Wdqb&w* zTI(=Yv|5DBK2VgFn%=a8sVsSnD>tAZCR?LCorgM_6bh%oj$zt%3`E|kNK8qmeO7~) z`Fy@+$^d&2Oc`7VpJPNkPbAyNLCMZLs5YNQn^CJmS&` zo*ozTJ+A_r_vjEEY+`FVQP-)Su&I(!u-E{ZHo>#a(P5znbPiW0S%An1q;G+z;OIc> zjkr|p=ul7ItmY$=1Ya-V904%NDq&jRInLx*t|rKLKh)bDxsZ68Nfyg}I^4Svu0~8W z%8b!AEMQ~;gRGh?8<{?4j+nkCquTl^nZ9`4?B4{_*P#Q&^a-rC-?GT`5fhm{znSUt zo0&epnd$SJnLfXn>GRtTn7)_mJcgORRwu#cgpSj!%8YNKdFD=s89;iPjuZ2xh!w!BF0CU zGJ6Xd>PInL(3s76!`Kr_vk7llf^k{i&_!&;8eaY{MJI_KYxPqwN_lnX*lI!&t%=yy0Mk zBa6B@Zy4J$0>)@tHsKAqyeja9u>^skdwojYPy`RsF`z@xJXo)$TrY9NTOprQ2xN;$ z+2?uJF4rJjn(ZJwVin|CAui{wn9bQCX0scaO&xgiB1_tdd?B!t-9qdn+Wx>!wncEc zWQnCPC~!ZI1Su+IizEV$Xilt=i8o9SGC`Jn@B!PL+2a87|_zO)4Ji!Cn|6r<>w~`yZ*4r*AYFEuK(n&?*E|v`h4mISHd-%UY^#am6G99 zaENeF+0^5NzyJj=f6>7l{MB(rT+r!Qf}tbCmgsAOZsD@fNiey6x9O6=s^`qCl>oZ? zFqmhTR=VQ*YP)agvH(u(2tXvbh;;yQT;10ch#b8LeMl5S$c-SfyA#fOgqftgYJ{2G z9^qzvg!h-nh$2tf0aYadZZkKGy*{X=$uM5*T1DJAUf|1@-CQvz0k{tQG8w_^*X3kU zRp2Bq+CBK<`pgq zhVw_mu^4f~TlI!pfTo!?gwy%V))37MAOfcYmp`RJ5t10E3E@X;<9K}SV9jm~*6aYR zh|Hm{gekgJa4_3^$KWtBf9;TUwuUVD67dj%#X1xdi2&;jHzp3jrqIYlW4)ArUJoYZ zn^z5{T)^s-FPJx=QzqC@Z}_WwMZKd0LP*Rc8>}HF${_|dJuPJhRbIe{ zO{vmoNrg7g1kw2!yET(IMDC#={!A5Q8o4zulUg-NAzr<$MrkdxIPlXxP(4pT&E&p- znjkSp4GKwE@SgOvW!V>S zGz(Cuqu>;J^g!_TP1Er9N0dA>+lQ{i=Pmp+@P}Aqe};&HwgN0RtCOZTJ_9QDAk$v< zDfDB&)p(L4CbQ-EFWuTH*l;?8; zX<|7-9(nSNd=AN}h?0*LPyflh>6X$YzBSkdP`|yMlJe7ArqD4rmGzk|Q|PdmQhavH z6y2EO(v~R}Vv5ggnPMrX`23bB_Qw=o*pMP>i`A21f_MNJX9ncf1S>}m%;$KD-NTI0 z-_OVA6Y+V0rv~udG5kn)W*?8w55*@Ixh|JoR3=B9pO4{nL?Ie@G=8C+7>4z9dQO=- zJ*Q0l{n79}duw<$UgPZ9dt&xikxI@wUr98+I$uiAt~yVJ+?;RLCi`YRZsRnN@#%Jb zyEVC+2dbE3L>dv~lM_K1Lakeq7DJBEEiyjN`{%5FRX z7H@>Tt5n{8JWBCc;+{+%=q-WNym(0d44D$5%gdq_-$ys4Tg0K%&eR|ie=!qYkcv-KfC7}RKZmn-Quu#f%cLmi zBni>o{#q7b~0H zt}=*naWPhgvPeudW$A~qDmI?r8Lm#n_~CL1_K|>=Rcs<9KvSupgl5@@-aClY^AJ?s zc=%+amp4x4tPx`I`r{~w;Xe~jZGKCB5Y*xlRn+~G@)FHZ=ZkeOR1?A(HgRjH7^35> zxqPlBBBOe`Zc6ePsSuYlFU{~)I~7~of4B^s-Ewo zDLD*#Xf4poRVeKf+*Gs$xb6JVL%l=b5=;VnTQNBKq5P^>Ay#Lhyh5y5E5FL#g!2P+ zH^L&N_<9v#MZ$_JOHj|D!(=Ry4c>$y!eRsl)Q>xaRVh~mrrf01E`DiJekF?k>PKML z#MSH)|AGz){w0|BWH5VT{w_>#JuT{`rYPp%U!K~x#^o*m1;@Bx{`yoa0n3N(R}0~n z`~E&VG+|29_Uit=F&wh!1hGxEzyIHAsYy!YveRPnb|yb*fha zK-H>~mEbsB%Ups3_iDQ^fg|-Dg_`?IXsn=BJk(caQc&)yc)ZBeTSsflhQAz_t_U2I zA(ntKRf6u1TN3Iw^}T1yoBH??+5rDv^-S51&`=ttoBGOrrDYqh>5HjwbrVLz;fdO4 zC>JZb%(;NIGpMkhL6`K6RHF>!3(Gc2s;Y)K-h*yX4YA*}4UtmRBVz`i>xg5?_8#mw zTs_4&=!Iiy=;Oh*kz12%S1HSd3mUn2DN8O3CHn@*HGuNW0}qo4b0)%A$IJBM7t(m> zTzW($G3ZsVRK)^N1<9Zc#(E5gPlF5jzyfVjeE$}6S7vC`PRD}cfn||9P+iK0+ukY9 z90X*sJ|J{*=HN_w8bkveIcLW z!`z50Jq~8{hA-r6SiV?5uo`D&6i7#$!S`p{{-K$4=HcRDmQ9XmClGpVW4VtSsySXf z{7rJ5FnJm&;FEtO_3F}TZhfCejt4J^tO8J}i;NiyERWQ7Vv`V>hcg2$G%T5Pbs_~eE;1ds8HHsHc2tq|25bT9`HpsT%lw)^u3e)hS;uvOfF5rWAR5Lg> zz|IITz&I|F5@qH}Ex{^dL5@BN;wJ*cUy*U?zT(gSXucgG-zkL8CwQtKu)eHr{<5T+ z+!lMfcrt+a*XsD#s|bGAMEhwe{l8OCpXbi>pw^HApo|n+QX^6r{!Ni0v4@R~I8crC z2o6-Zu>%|^Qnu^h0aj@{L4?@rUkMkjRakLZMA!t(8vZ^%Fg~ByunD}zhUd9kJ>9jM zYtDkM()Wr^7$v4W_Xa3|x%Lp9K%cM)CgY^7Bn$4=RK8QD*f&be5y(X*vY>c8O_XFI zi)0~?hnYflm)s5kN?5A2HEodfj|l;wN0gW-3B_elVpA}mcNmQl6Cx1$q4&5HI}(Tq zbh`rrK>`y9^@@!oMrYcl@cvD7E2}u$emkcVzbc1+K#kW}0%!mj!?Um#c;uE-@ua}8 zNPesuXDa&=c#kt{x23QOq`Tr=aqtbdrLtU}c(BKfg}Rl3FKCYNCV0;N@-VQ#tnI=d zd6$o;;}|bHAg!k{aT7=2)T#A$G(DeY{An74pnUplyC*KksoqtV>Ki@Yn}s_Q%_Tx` zU?qx7Hee|)=^Cp!2pu?7JRaM0z{F5o&J6xUn={Xhl6Jr|+W8!I(leE8_axW@SpSe?^Ph~GVY+_%a3- zWhK|OoUnbKb^{0y0()(4nc))$SIVbm+uff{*^&MHAI^8*%FFl6X4Bl7E@}HG!sVDW zOQQ~La%W7#+f4)Uo7d$CwfOG;IN$x9RAa$DfQu?+@Gs|$`LuqF51shd>?7ntD1_K; zD(_H4^?sj=yKh;l8=K+J^XDUPbF>bsGVJ1+=4A*O#n_lwmbS5QfNH5|HCzR zW64=ylL2Dlr|x?5`uc5;_ZRN^qo26)j(Dl{T?zkT=eBUy_kHUR-Jy?)_y)Mah5jP% z>o5KvWtYTeIcpEn{=~ii^Bs@f^-uoQ*%v>4*AKjX@5$~v(<)~=loJlyrSuksCKoU2 zCJ~K)zIY4W#d;?h;JS~flskX`Ytl?!Byjd$_w~1Jfb}0d^|E58u>Qk;_#0mbe0SY3 z^&LP9%J#k8JM?&&W@tPOk7~s z(i5ICVffTI8LB3Ks2cZfjeHVWi+)yO&Flo?NV3Co^{OXmkL9j4Y~7Hj0m)>5LzyV_F1>gWcI3)d*IrGnel>m~s| zb0LxWEV~#b(jZiguZqaNndbOLqlouDLv^h;+1LSxg4=^x5Dv;QP)I{Kgws%UjiCDz zA=fn+G;s_yn#Q>MHmI>cAPwDR8H=*99oC=<3d7V0hAs)|C1WG;eOv{tK2XEM2$DF^ z_U`vXdIqCFO96)y%8io}bOjI?hP)HH4WtZJbsul&(sA~!B1QagL2u}D#&Ekp9rtxD8b-kLseo8IC0#cu}+jH_3|Ryl|kf@DsulI zGOr@LgUE#t3AEp&1Bc)*7seenEj!bGX9Jdl)%ciI-=sVV3ja_HXp-&G` z5l#O7q1b0*>^~oh{R_paQN<62cxYmy_~G)sQ0QF_QLWhUwELf1?H=^Mc=&$x74Ua8 zX*0C+3=!AQbYGRUe=AGJG)U($P-q@bsDN#pGJzbAHp24}b!M}8v>~gtNBoP)-EWSG z$)uY9k|_heQn+r~F~8%xrx!IH*aGYIgtASK-wYuJR}Y4>IF5Wrg} z3S2D_G}|C)A~ej6<_)nTYy!9xCc2*?~DPEJ{LYbfK{ zUP|rsE$yBVlg(&zMmA+$FrJajXs&b76PHoJVf#Z+&eI6xW)sB9ST)yk%U|dYJ_}YT z8E+IwAM&;oDl}KGiC9%=u09i2Z-Mh90AbM+>coYlP1GYNV4y%fxPvCx#p!4B@8T_lYxl@8IbAE+b@Qw?a1Dqi z=$#=nXumho_Y2%p1&Y&9NW9h>Ok3Tvxb+4%K%Ow}Ow;hL!HVCCuZ)L}Q04E%yREpR zWGHf?tsYcK-HSkTuhVothVOg=*b^|jN#L2C0>Fh7WM={3*QEb`P5uHbU?Ks?&(Ve; zNeF4fVnKqQX*ZKPEE%m+P1g!IED?Q_1~g2Igyv=sofI$0_z5#gM6pgW^hc8)?Dn)i zjjkDBgS0mRDPY3A(5+ytk)XfGX}XNe_x&0= zk0Duk3F8vrXCRUGINn=x`ce%N6tEnQXY?Xtg4RVVO9LvQZd<}IFKGa@sEY+4ns$(D zT`du=np1TsYVBA--HDR;7sj&I!_9A26-{4IC)oOpUe-7XPJ$=RhbfcDj-inMJ?^`O z$&=IHxTZ)dEG6H%lq__Iv_5|47jt#KX1r;lXD9DUlJ$?~W7t!#`>6BiPyL^zY(X&6W_oMgcXEVh z8pFg3mAoenAU^ip&Mkq1=5_WkwI}Rj{CG9p$v*3CY__mGc^iEG6c29S3GxL&TJF;0 zCgOYC0}tO7dH|sYc1dc_%fBHO`5JE6%g6t152&a38j4T*IsJl)`SL^O__Y2 zN`+rGPaRPspa{g>lqL~h%zPq^=M$L2EAvzH18YeMM_IQTvhy>BGVvR-GGnMj53!33 zKH%Hmucd$qk_Pit=0Lo1$m@WSn{8j}l3_B!Y-xbmObOOvz=#HCT7z=y5?Kby^%%;c zS)rRELQ%Zzv=C3Zj42n&Lky=S6-WV*y|b3_im1>?G??L=wy7vF-4!69dPK9^3o?^T zg>=J1lD&9!h*Af7A~*w`=S?(&O(kzw0>b-iW_w*_dZ8xby=JOPhltjYmTBH*qwYY* z+Z+)vK6rT-H`t?QJ=7Wa_4dYH4UY(SD(>etN%!-c#QpMyILwZ8YeMl>1E0y#^b)_lv;o%Yn=oP3O=P+7 z5`tu&5nv(Sog9HMZ)Qq{N;qCQ`XIufG3P>YHdy3f?2 zj)zqEoTIHPNf3CD$xPSY z5AV%mt%tbM)Kml%P1L7!@l6B$kd+WnR1JV|k%Q;uSoNf%kR+}Z2C_ED9@e7?*cEsJ z6RJ3%anOsO235)tPd7{OzU>mcf4c-fvt5Fp-7djX+a>tGb_q0dF5AoxZkOOg+a>t$ zb_qVRU4oBpm*C=d2|l)60#S?0_QSv3F2TpQOYjTZCHTed68vA=CHTa434Uq21fr0a z?T7z+y9A%yF2S#Cm*7{oOYm#kC3t$f1pjX91b=Q#(RItIRGE^6el=f*jXgC zPKPT;rB4cSde>>^$guU&KjiX?N9Ws`L>fEonYA9fT<#T?A!u_|U5CyAUw`aR-~pv% z=#7Q;CfBDw^(dSXiFi60N zJoaUd7fE;mgh8SeAY?x-fK*ois30JK5ZncTlpz|asO0y>l6eNmB#8)+wTn3*tJ*LM zLtiP|ZbQ46C#7V8ZbaxMgc(v*Qr~bF!rYYI2YNrZ?$cT10AxDUee@QyVYqmAd>kFN z&g$xP6{UeNfMP6#M8gKUt3O6ZsyN@GqeIi!V`+Spv1G!+C6~d_q{NZNC=cE_1gmjUtrt1-&J}W|O=#efk1>TjT6{kxQ5#fE5;4)TSSXVE2g~A2 z%hZ`zuvH{<92&I-1;v`WOxK9js?t=2Mj8rInudb2LJ`$g(on=30%|}*2laAxUNkf$ zpk7o}BHbczIR#X}I7#rc zgCKH`;xmIF>g3|z4}!F}`0YUuTLmJ1Cqyi_*$qjg&hdB=&{pxxZ_Tg54X_6bP}xMQQ8X$_z&b2K4jSiw4+dP9}=3*p&v;YTU;jSZ>Azv0=nOuz2Re{OS?9x#U&QK@9+uoiN*4 zb3uv5<$2|TpznFh!w&BK`MV%opdBjyz_*N1AB)Dlkf(9XVSu?<&(6v+2CC7vPdq+L z@(Ze#V^BQv>+>3depn8)eb<0s?IUsglpea;2Q=lcQ87=|@W2@`Kxfq%r&!d=;Ry{d zNtcCo73pe5(se43F6bpv%K?tlcMq1uRdh=of9W&EZ!QupNvjNKit|Jx^~om?Q=CJq z7xIph?h?TT3Qdii=tfY6NcRAgbU;Gog(06h3kE;)t3JK*%%^x@%GbQFKe?=a4P7ZF zT3rdzfvs`pMOL!vyeUzAAU64>fxqMOF8v-4m&7m(y0pFkeeHAujBiMP3S8KGmAJe~ zhn7>%D4jm_>tqhsi{5(6)bb2xt~Hyk20wBv8ApP&R{tB`xi#LTm;TuYgRkA)pr zHKIxJsmDF+e=AfAXpZ+h$&U449TET95C$biyJMtdUd&-g{W~|NhpZ{pU73dyb`d8T zc3q}kJZwt_82ttZFW>-Ii{^4ar%&_zj1`^mlGXtDQG9c6k46l8`qkdDdgFG^+N)Er zO5}04$BK(14@?tz+yegcX!bbN(c8nqFsqt3`G@Th|7?Q&$eCzMhe&=uE zp8!kxGczZWG;7?^9BbXN=jMq!?wGt|>O}jFJ8rt8vot+3dk6n@@3`^U?Z@}N=$5&8 z1@+(fzU4c_Sukz)7owFcZxSXacdqjvN^AMsn&VH*`#gWx2X&6xWZ~5G3R6z{O=S=} z*SRKsxVC!3=&kdD7<<@>AR@}cf^--oMcfKN(oap#6k}B$*dh)!6c;`v;~0{P#;SO7 zlD;!r%eGKVb*^Sh*xMh9Stw>YSHV00-xvGU?p>wEu-`!zX7324I81wkP z+{vr=1D%8MeNPF9n=swkBUmt`QWJL3)H2Vm;dDyWk%4Y!8NZ*MeYnBw>}?n0oh4Qa z3Muw`b?drB0_^?CY@Y z-`|;1$pjk;HVI;V2w|U;n0o>fAjAMz8{jqAaj0G$M{*tg4db1*`%|pOnh;YS9a}l} zD2fGErU>BJL?39+<*l>D!Pi4`^D}32U^`Px+1@3h^FI6{A>i7?Ri4S?ad5FbMA5?gWN*Zf6 zd2Kw{o1~)sfY!Wm&&~gx0eF*qZ)niQ&-gQ=Mj8u(42nha_LnQ4s;9 zjv4BPKGnB6xXo6BJy!HEOGD^}0+jFEj3GW?9tTXiOPw+Ob zAMy67)NdIKQggC~?F7KIuySTFg>O3Xa$O7bVwXRV`XPDH(Xc~vY7Zt8)Oh1!B(AA1fXv$`@Cf{HD zRoIU758gL@z30v0ucm+kTZk7p8`!+_dW+fnruT>ttHVK283xZYhIDytuD7*+7@F&I z%t$1g6Aw%u&gZd<>Rkmvz2d8_c^Bl~xXHv3_AF8J4T@^zI=Su9$tRCV}o0)7@`dBQo6&#%FGt;X3O=h^{HxdU3QFbP$+H+ZlD z>R>)=;1my5!441BK|wRF#ch)0tYH{t@RsVWsSjhFmR8ZRcDdeQZO;VWUqG}|ER1R> z#pD;~km#c><6|_n`_*o163+49Ie5l1Y^9En00{S!`=BR!eh{h~NStWY`pr`0U&s(C z8oX*{FyAlIA`} zKBsu^=7&+?IQUWr50$}JIM^?PuXM0i24Cgi-ZJ=V2bap=YY2|#*nNhQUrTU$5PY2z z?=HWdc5q)Ad_BRLLE>}%dUg5rO$1wmuMhbvExf(IQYKkX^A*xuO)2~G-BdiDFXeml zUf$0S<%jbtSBL&9vX`@H;>>rwdGGS{9?(Lg4^o8j*Otr!zEmMhZ?9&m%8WzXm(yR4 zv!7hccYB!e^Qqm82AF{cBgXUHJ`P3<4vqVm`eVMqLaJ?SE9c0~T7QOJEZKby7zbwJ zUI$da~lCXS6_`5C-uF}Z?mJ)nr+{&i@_;n=0%$&n& zs;xJzd5F6u=bbLHwI0`J?L)q!gSCw_fU>*j1cBaO1E(gO!4nxi090#nX`Zt|*CCzK zte}6#r7s%Cby+BCw;Hm$h<=Jf5gQ7~mz=2w4Oyat`s&!BE>~N^3}+DTot}g=(k?5} zLc59!FIp84t-=O|T*mnZiOwe=P!LooPn#m3!sARqvgLN^NqfpxT==CV=J&}OYFTA^ z(XSF*OytwzeBo_$J_7$sW`QS*ITQ8Gzc#eUQTFH_06n`c5Ohp=$DA zG0tG<7|K<}TmOY+n5N=$fr^uRBA*M?dk*SNSzPHbUc5^?O4jOoBvvfmNeJSCPym3X zA%fqcVwH+puQyN#*w8rBhRefSPbdulCn;g}0V}Uyh(nPT?UpA^jmR-rJswB;)Jvbp z7sQOtGl&Z;QXSN2v7^@3fb+m&Gr|@^uUaT3R>AQ}xDk4nO)uuiI^IH-uxhq6sBPvA zZMm1>>UwA1X8i=x`BJLeXMt`j$y)C!G5;-&JBNzJb0nH_iQ(sBi+0fT!d1eVPDgdH zFw3}abqiy>*2kyUlGeg`AP#kWP#xrm}!u}Bk^v@)Y^4l~6d7(cT*e$tO6elmb{{EXEO&{Ib) z1K*EdhnE$Jw*r`(d6NM`$aH=Y-U28%?I@%m1jTEy@vo3#@$3jv1Z;@7fnb1DHSu+&@n#0Sbik{{vm6aqwzf}kCi&t}8=)5*sEBP`)Eore%Qm7|I|H{;PXE|OWeHT1 zZ<;FdO6w`&{G19#TrcVTOm9jgr~+|g6MrJo=O053f$gg7zQAkOpJm! zAQQvGV5%KKj7&8Xy_(Ei4I@ZJk#UDD;{XI!?83+f6RS>`)u5n1X^ZXJ&Di(|e4RXK z(hW*f+rN@Nz^vRuV#GM>I{HLh18>O$?wOYRZLy%m7alkN2_ZnlCR$s3XSP=CdSH5D zpNcHL@HT(fJjRg+r2$i0plX^u3`9(7aF87&rXMY#QJv~7a!a{5+ma^E(h4nE69O=OHxG#MR)ZJniPSe-H7wXbEeAj%CwiEG(NrRXeX!thkpszs>e zNl*VIVmrDL(@t|tyDR#@cvFnzg>1RULkA^@8v1k+8|f=~u$5lq!Df1n2i3BaFfPRk z56IrtJTi^46ec{{#o-=M;2Ref-HWCVtILIjRI9l9yq(9~3EWI1@~Co{$NY&b&pA7v z+cyx(-&vg1IC}@1e(8Glw10a+PIAB?9H3dZD{mFFXTN?14F{? z)VK6Fn&epOKz*AH)VG-gP|=(M(~CT#O46TFU0bVIeMCxN2OFPLJ);eXTbX81F1`kX z7Q9kh$A+@&s5KNdNAn&x)ka2S+}5U{wDvg_s=vFcK3WzfDF4cK58A4|J)C-Q*lNiN zcqn8uwlvQ)@#bo`O1Brs?!)(xj2?jacAa`p^>z&3Da-{tXJ|GOQO7LyJQU?7V5}Ap zB!dyKE?J}jm~>G}If%#eu?K89g)$W!qU;SuOu-VMY7^rZEkb#tj|`H{715g5ro_j* z@S+J86%)Pe@?-eiI+0d%aW)z76f1)3Q~acZGio>_5&fybVlvP_$gFh6iaeo-*phi- z42;8c)Qn!MY{KHmxqLh(!vl#nWJ1z`h3)N@?hA)RBjg1_+vgl7Xcg)PAU3yh7$C35 z_tY3(vMOw?8;wOnG3pQ+gi2Ai+%7`Sp{3qfIhGijtnxXPpz?eweMHU>Rr89in-%n) z4o!%8eJUG<4MubW7~O_Z7zZ=0QFfAa&+yPfT47Y5l}0;xQ8180{iMk_KuwQek%H#? zwC37Ak!CWNJRxlYDz`Ya(bIc9q+oraFsO$)6PLfWw(}Oe`Mxt7+Wu& zREf=hpY!7BjJU>|28@eoVqFPkB5DnFY!~ zwj+N33oPx-mx<)iuhRaD5W9;{@`_35ie^%B7rU=-7uTC>N>rEn^Irc9YL;VT8bf@(w+oIlOx)B9>FIVE-SPoa8WN`ki>{z zN?%gYW_E=ZB~8ABYd)~`Fr$)^J+pWwZv@Wg$+S<86}o#=KDp)3QSY2Zo&b2Co}LBV zl=dP1INihJi`Wk!*8x%#5lRiTs9^+K*ii_4%t|T4MpyXiVRW35%jWFDn*?k=`LP!h z_Ar)V#jTpv45v-Gk*cZvD4NdxqHPxNKFKY0YH#*Dt1`u zE~Qz#69RUuc=Vl%O7m+!$jBDQR&k{<4uevMA;|U+97tr#(6jm$PmuTIaNd(^F)tTz zXmi8ePHb)h%HV>fdrR(Xw7FM=yxrlvdr;)d_z#tt5cUXvtGZ3y^U%b}NVQr+qZuZDKgpmYzJ&;c+aS9l}$| zuW^hhv~8Ru<93}TP^u8Q=m0RmP75Z4Vd^(ZVLr9VW5+vGYhyS2GGmt<`V?0 zE{`l#!H{BC`&gQ4?guwJS`>Y&gAc^Irbcsv_FugE%^?X$OG@u*m8qa z1US?|fZYVD$Hq6(RpL%gg9EbgXQ0l8198}FI{+SsgqXv!xSr!xOemhq zg@~Uzy~>)w%-3EGi)AqhnqBg+(>$865{72N8GTV z#Gc?8Bxr|KHB|*a7;1P7RL@L43pG)pn9yn9sC`al^3lWvIdp)6Hts1J_b^S8d205}J;}7?5-}4&lR!d7>@O) zx%f%ziq_&{R$b17j^&|591rAM`b5M!x@-5e_#;v?6l6siu8a({@6AKZeC~fkTLQ}H z3`TgBZYlscMRy?J$Pf?ZywBm#3Tm*XpvFE7IV=^0>jW({5|xcUX_`QRs)7c?jD3$s z^?xz!F z-$Ot3uw7VRLVVNV0GQN3_Cv4o#a_GA0}Vh{Td-B$jqrnrJdXB3qF}>JlW)G&;c~ zl4l^1yaW=-OGzT5WX%WpL?TtmoPOrje>``&|8h?&ySG)Jh@%5$dP^)72HF**70HYb9=TtFu&I%gGYRV|K6Ji&X7OeEzuQzlS zoe(!EQRgk|oVKAn(&*wSU1AV3akdqzwi6d?X(~Z_>PH8ou zAUcu(7STE^$yDIO(2p>4+aGMeWIXplYVKf=U;(w=VijXsDRzCkA!1O(OgYO0iaM{E z82-2}Hqb^0o&h0vi3p+1HJqh{tk4%OjZeu#5Px*xCMo2IHh<4#Bro?x^jQrPCbz}} zx3j_oW!3RXF9jwz0TZrK-$qQ}S;GWE#sr=Bh>Lo|Q#@E9t zIbZ_QNtgf?ZQssFYxsGnDJatl5|LAp98lH+sW&@Uh~ImBR-P1^pLx=rB#&9o_Oqge zu%?&T@C3hH)G7zIJb7MuTbb$VbwZ6kn7l zQmQN-{Yc7Di$1oHfw5|6ND3!rZvD(B7%5FlyRms@Vlqt2jfpFClH)Hb?xv{mQ=B<#2#ND)7_334VS&Z(S$oS@+V*N6?sIawwQNT(C^C31p~gA5#{ zs3T`05R(!)OT=UXtx5mGfEzK{@#L*x#B6ER?7?ywIW;tRkJLa_$l1{+qofk)zNlLh z*{#zHm?R{0@#feltZSU@{wB{MEKVX86FY>hNyJv>?+CVzx4*cQ?iY=~uXgKj0(P+U zzb=l8-rs~oo+%D}dn5B+mmi^i^yNpA*!BP+EV6IZK=L)*YGiVGK7>+beq8UKcck%= zdQDWVSlRiMDq<9AB{L`^I8h;oE5tpbdW%bc;!PjZIuu30s16KVpS2wD1hKAX(#u07 zsOn`d8%MNHe$AOCo5V)(zt^-!X}swHB>%0+Na^p``4{%bAKloHAR zZ=?ACh7x_LmS{qWB>89*UmQyG|JD+9lxW_G{>xCJXKRVHN^)JQO8SeTM1NjOG^s=| zu_XGlp+wKr63Orit3!Gs#R{LcVmy-5niTVU;7w(IuLq99^;pg+HRaR=`BIMIk}u$>cIscdQ2)`hFk%WqWl`Sih~6vU2H#d3SkQ&ISy$tZ4LjO zF8+#*j5N>1muA25)g1`ayffF%>U<*IPJ<8^2IIF za+Lm7VbANd^ow(BA-Ca2@|=}y9R`Lu^fYui*|@r{i$1#AnX*c`tT>6EitQTnqV2ZQX?0r1-hwj_l^J(}olcs%Ebh7y`m2#4~tSWGH`sk0)G3bBkR1zIHO7^G__$gyDL zfQ7CSYjB}Uqj-q7hwj&#SM~dV*{%X@pvkYG`5cB%JDg7~{{Q$=>2;Q+7T_lcnMW zl0;ti6}#9|`r~5xaiRRU+aDWRQAs*ie(#pw=k*<_FmSts{pE)PO6u~jP!jr(>vYcb zFy>>e>B$E%D{TWZ0hQ3!L_2{#PIyEZi~pRR7B(lv7bNWz%`2_~MwE{C(eB9yu-Mmc z@!=rqlw2M`iB?#;x_Oq(PFad3YbZqo)TO{#tCTTHLCSjHpcJI{lp;?+v$3d&=UNoE z1eM}=5a_qi5@v`J9m7euSP`f7oqo>Px6swmz1)ZZP8TB0Zs zDGwemvD-y|-0e(8b$gR;XUkjbcF7FHz^(T8_!x*qiaKO|R{E4Pxdwy&JcDWX*__@u zldB_Wi_NHVAUVU4r?a$%7Zss9!p6P5!TYl2vhWLOb(EuT1>ohei%pr<=eaU>H((V} z^E<#Q7_89gr0 zZfej?(7_sRCvGD+DG4(H4wn$bE+{HyUZye^$P z%WB5XRh*vgJZZo6>hwk0c&uYO61K_NOAu?xPkb)jn1#@U2d_;DK``w@`qA)uaoWmb zW+FUUdJj8SRue9>@a;N%SXk+!CA~x5A!576tMnCQuqqeIP4Or!dr10t=a2VWnS`I= zK*?>{Nmd@!vv|6{$6JPG@p<$Fs^m_ehMmm!uqG@?`>nLp$BBD>am;-irI4843tV(^ z4?KmGPlS&q7w`_M=eyEAR}SV&n9N{UeKdJD@&Km!EZWy;h2N7BKdr+O{ap$pFPJ90 zi|=qWXgpKm@lwEdIz_u&;*qBDeMaFArNqy8)t(>?CKN}Liz(mc9XCTZWWO`M2IR)Z;iFi`|i!`MEmudf4-p-Ga`%1$HDEer0|G;k^pKHzj^=ekI`rh5t=T{6fB$@BxM2&qbMp570YP3V$Faekwn}_c?_> zjKd$Mm!O#cNK9fiu+zW{7DDHPtzI7aTWTdx5AxQBf zX-N5_X`iFfd7qqz6#rvs|8UMxV8Y&>{X|Oq75O2;2lf4@QsS@357IM775xsKjale@I?MBDFkhtTD`{k5x z#~pVgaW^UMS5v;-!>e zpx)@@*T>NH4!tmjUg*$`F?6Ft$7ATYLpR0HO%9!ip%V_>978udbW04~qMLy=Lw?>Z z(M-@EY1;V>yxripD|x%pZ+m&$>$e5o7W{UAH{rjIc3|-~W)iHFn zLn|?~;?OlQbd5vT#?ZA6yO;Lwp6Ix^e}36^wPoj;OEV=QJ?Zye$>A>{NnZ(K4= z9QSXU_`##|FQh{Q;DHv=<8*io%{avUr2aPVP&bCU4snU9zwL7f-M2%_4#_W-kY~R` zc?{(a^+5gvZHsXDS{^6!Td}2M6=A8+ab^jgYO6?CIVY`+eUZ4p z)&8QFQ@#$oB6|%~RVBm2EYZ!pM_HJ0*e324~m+8}FvG2j+;2D~`sHYrbVAIVDeR#S!_>Cbai=cAu=Ia$)GR9-9 zOg$A|Wc*UkLnS*azRTLW!&1A5ix%^h9m1WL1ut#_E?T%6xIz-fj(u`qhKf{I0fiZh zfy((W&dEs<5uDBc@>jls1Fje)oatSI^y=7y`3>iK*D@TetH>~sMe=x^1aT|bQz>FV zp6`|@j^{a8F&?jl`QY(-glIfoBOiB?_#>g@`L47#sppd^(m|dVQe=BPU)^Kb!Q86H zO0$x^ve#ks7m-));xqn|@>#O&p@?aU8)q9L`_m<4e)Ckl8!%=7DPbue!DO0CaTWW+ zQW@DFY$xwQLdIVC8W@EQ?bm+D`~%oqbqZt}96=y(kIu7<Rp!5 zp`)Aj@?Cf#WHZ_4ro78kM zE!NXempLsnp8G>x9Xlx!XDmwGKVTv>7RVr=LKQJP94jIzU+C&j{xqGTV z$7X{T^S(x160ozYV8re(aAk*In=l>p5(Z=a5<9+&Y@vjaW{S-%ufze7ZQl%&Q;QC6 zH<*zwbX@UJZ^vJkPo3&tFZ0zT=Y5TY)K3J$IqL14L&z^V9n(-RvEKCtYjd27W^2vs z9tri%k`vEBpyaN+51xgp=hi4dn3W&YWV~WEpI!wosr_K6o%dKf5ux^(Eow*hyBFTKGjsm%d&h|95Jstl87*f`?sv|AvJORO#y{o zrpmrvKQ9e6?uF>Rz(lVViC#-Y57j}dBzg$DD^9G>s4|TwjNmiar;;qtGAt?spNS%2 zi0H{{mZp3+pE%XuCwLR67?#&=9uZ-PuGnmd#M|~@{CYi@lKp1=Fk(I-C1Eqi{o6%7 zXHQ@)&l7{7x9Z8M`cLS|LHtMbB;AvG!ed|1lk^y%V33U+zn+x$dLDaDWUt{tDX3y3 zzw# z3b#w#AEc9oYE%k`1VU0cUA`zO+%DD$UV{{lmSa!YC`u{Zoc22ULkh=Q?Y+w`OV)63 zdb+=4mq{20gM}m9=VlT(xZb)1j_ruO*=cXrlV+-?EpQKfwH>jvO>h;x$%amUS!&1p z6|&1(7!ETC(qw#wzd9RsBW(-vm==*8_yJO;Y>s9r7a=~8vuyi_Oh7JskI314!d~x& zYuxQbWA`n?PD5~6r`JN+W46zT`9D$Ruad?O@%HkE`8i_p)bo2qaOOP zia_YDZMXCzu{e)NB_;7tlp#qQJPcJtxoZa>OoRmXA;hB$yEqz*J)_b6biOZa3jJgj}Y4*V?<5IvT}HtgHsq_uCqrrNhdG+?wOf@T%&&oK;pD2wKa7-(^^ z$EQeIi}T+$&rybwvWB2~5R}FE>OuL9ev%~CEJJk5u(NQOI(`Q0TSezV+_w~;AT{V; z<|pPNF&O_R`K*2>rTjXUIP$MGBCuB2+%DI zz)^#i20=l$|G^40<&1z2-~tN=aJkq1&h=Nf?61EY-2~rnqcCe$JJ4!yGF?F)URHU^P8p6&^)-iQj7=aqKhRniLXNj2SEHzA(o2X$- zRr&$VlzSryO0}AU8F6g>j5K}vk8e%Hv z0ESpZRi;4EcNC`+v;4iFsf3FRN| z30R(0*b$qOO|dHMT?K1x>^4DKdTB5EDfN@iAs!Iq;(KtYCl_mbtNz+cl)3ycuT^uc z`>p_X4cp$TaY{ev5lk2t>+@P*4!TbR#w=d#-JJIX00+i(3CWA{zCyRcvrVHi&JQY- z=U4DRcqdRf4~bq<(TncwR{vbSN<>%G0aNpCNY^tQ7MdV6`ex0g5c_VQ3~U(LRN z9+l7RN=S;}ctlcaQRx!fbVT-ZJXR50jpd!NVGrA@@ikf~87abpeNHk7=R6;hAh!!;Det(^S85^ppOl_)~Ba(YOP>Kf7a(qQ^I-@lsY`E9a6QK#pFK6p`ntCTS$nOsHT zb0vB>CmG9g_W;-C&;wY!yT_^?Kw=4&haS*N#EQDa65Yv&*wQd9Nj@n?LmNhpZX)n; z(R&nsCDTLkWBFpO_QlcKky~z7`+7}oY4!V%@Y1#SB<>Vm_UREsl)V7}BKmwnivZS+ z3x-}Lrr~`Q2Beodiyq~CRS&G!q?b3U2ZltLhT*72eD9#*>jDPst<|=7v^Hdzo7Ps7 zVOsG&B*=7a9Xd46Iha1E5Kpw{G}2J1TAiKIIxWfEq=oBsN# zGlROX)9ml&C~Aa=$O>u@%#1={dFEyi49hd`6%0c{O~bHD(;E>i8XDAB2EnpMbo^|k z`8Ll?$0+$!e+)wy@SOK3)g&Sa!lPoYVK81O$?ZhCUw!~5~9t4Y*PkN z{RK;6`bhpLo6~Ht!%$4cv*rm=4AoHexxjKFh=G&hjX`(>sV2QEgwmJk0Ja53@VVHFn22>-%DJ zGzTL`qh(m)`)x4|sp-b<&}M%{Qqz^Z%cccqu_&Ao!?Gz^Vk0ug<^vxbQJRXNb3IBy zFX}lJrKw0qEltHKi>0Y}^|3S+X{n{D$Vo56^p>V}qBNEABuzzdDrqXENScb+RMJ$+ zvNRP3GnS@OrlhG0mZl#`AvM@FE%#K zTk;db11~e61W7ovEx{T|RS`~1?kQMGgGpq7!&O2PRyA2kwT2*8XV`RHHh$CDMqMEe zXeFdwKFOjKW{$Dq%Yv?8;OjI`DrnX!!M(2wlGKIy!k2aVmgZeDUxno2mNNF2rSDhi zc>d9;H$-1!#E&UKuC`$JOc7bFg8e;C)bV*KZ;0B`4s7Aqcy;-bkME~(^d1s!8*8qI zo4t!vN?cMb|(y#}AA{uBsp0WuBkL4xU#h-Gaf!TT>=S zv~>ju)i)d&rz*^Iy#y&p$pp=GD@cI^=d=zfNPdFhUJ`=Xju5mlgT7*DLU5)`oI7Y1 zUtbS9I8}bd&XL5eGKldA!O1eno}VDs=Z1O_8xZ8QRtVnW;8+>NNKfs=Jav&n7cmVo z1Vv(>`v0@{Hc)m|*PZA6c%OCa^L2vutrRR(j-G-;@C!U9LL>urqu~flQfCt1REyt zq~*k!kTfy#`|oq^eead3gk(EjZ7+;V@7{CI=RW)Fz0cnJ>~lsx@k*cgNom!qoY(k7 zJXAq}viS8r5f{}p{lpu5B0j2wfGTs|=o4{L#WYeTzR@S*rOKJ3GVup|B5tbd`-!3& z^z)c}Caaup_KDBPak5H$t519`Mlh@rZ}N#>j*;W5#G8HMartdliF8rp}!xp=O9qTC{bQ2oc~( zOg*UO$wu5P{@IP3rz=!yv?TH-l7TN?K6)Mg>@q6KTLph6pl<=-hG?9p*Y%xCC>^9U z(>MWEpmb1DqjZo!PwHsRvJg&8(upq7s2is#FRSrm(cr9mK#0vN)=fqMWP%opxls3* z)c$a75S+Uw324?8KWVtn%pM*qOZyC+al-0u#NU=v z_Z)D9CQvUBm_}WNL@V@~OS5AMN9^s$yJUK(J)a>!i!#EK6l>LYv*d&vMFOvFB6 z(00~!igh|I)S>?A7|xvX^oHVyaMSdh~@z zF_b|~rxyuNoZ|B@I)-6~{#XhPi-DkblyAzZlhv#s{~`tmtZM<**?VF^7}#8&0|I1% zR~grxw>Ofn^l{h#+$aa*5>})_KIW;AMR{Wch8!Rp*ChXZ-NnQev`Q`-s&a1V4S{E% zxlYc?_7>}Z*NpmcFQQ8$B3(#|B2j^9cJfVEExPT=4fY{=v(FuZWrWZf&L__KpRNAq z68niS_vNnkKiBE!)zO>yCfa(8fE#aA(xuT`{g(&g@aewKA9>eNKHnD-zIGScuh=ee z)bihLzpsuK!}rCq!0o<*eWqdap;Cw>=s6|3ZKl_93=t~hzcKUap z_5Hm{2DG}bvWPE@K8x(D!IgdCJdO3`N&528C#dgfC6M8rcT>f0k?=xDP>Ij{wp#R6 z9J!YqpH`0hl<=-!e$N*)p5G420gdF>+V^MWHzBI=XC1@Pny8Iz^ zLC^N~kab7}1-nP>?SQ^9JBv5n`cP~S11G5K=%{i>yJOYUb)?YM_ph3zlsqndc0 z%hFyX;ci=Tmqz#5@2jJG`R)8+Gy8)yt{bH|o|eSnt7%0Y6x1~F)M0dhIxL|TXmkf? z#qqQv7F(kCC}ysR0HKS00MISbYpSG60!iUE2%m@G%tUlkAPUi?l$Hsh5n0E0s1Zq3 ze4}Q;R%>OyY|r7Tmi44&R7(ZRjzH!_`u*;Yu55wKmgLNp!`}2#qgG_ofpNOBb}F1I zE19V(sR-+qh#10xfk^Cf#C2+*qE=ba=+{wED^!#{8WYwdzM~)3Qcd%J1gZ`Dn(L zo)l5$d(QMAUG5y-y5?Xb&5K3Tu(quTKz`SnSXj+$2T?eS%R1Y0wU|b}eNWm`Pv}!m z_ETq_N@x6!XAmhprTzF$s!tBP^zaUM&)o>y(d23bsvU0sp$@9bL)p5J1&K%>&lvjH zpjBL|YSG3>{4JkYgQE>xDUf7*hP{o5Vf+&c2sQ9 zh@7HN`>R>%n^U(vVF-?=neFW9>n21pR{Y+>8dQ+HJ5be+Y@z?+MZ99eZ9MD#~f>Y<` zleJm)r8G_V#dkLDQ2+fHK9;jn{yyQ7<_e|Bi!WYb5y5IZM852Q(Ooyx=1VMmf-0kf zzd%U2+Kzp%XOF?_gW+QoDP46up^GUKc2`GUOuI?(_S?}bNKM15DPOvY0{hkujm1?_ z1*r=!H@xPc`bCE*`!JMtVb#~$| zYx|1b#lQcp55AZ#7%o0hb^HMMz<=TW*cAs4=Jf|ZW~BP&yPn7!d~nl0{+a(qjqL*n z&x(jU^56l=G#+&I2M5YV^9O!G$fYDIarJ|t>YxAA?MK@m{Ov0aUilwxfA{*|+5Ooo z4jjC)_7DH=10VRnAMxl*(1j~sclqa6edQD6`_uF@KlA3DzpH%T_rCo8P1pXu9^dzR z{qKuB9^n7E`W(9EnpbW+|0|P!^R@5$?t|*tfh#|E_=ErHlKX%2yUBXsK$ksWl)WC5 zEgpN^&H*t&1v}n5b`v728zqo+)Miiv5bb+r$D%8Uze|uJDW#&$xwr#nDyYb6WZ=TD zCm&v0Y~`icm;Gf84guEq;CNbzIrk+PmyqmSM+oMoGm1hQeZvn580yRT# zZ&ABdQu&@<@mI)#WZu9ET+0Lc2EHcx8uRscBRXAN!G|lZoy~YeADIgb>593pXZvQL zN-9v1*@G$uRQd|2K#~Be7*O#iP$}3H@G3#22{TYJOk-KlKXsl?z!XjZRqR1k2&-bj znW&#@#l4JV42_q-@IN9imq;7(xbte|&?7wDM@j@R2o;P@h+Qx-h0ZZ5_*dtcc2bIX zNjdhZ+LrSI7oMjK#}dpzjpl$#ca%~%n$&xWWEGB%p zb}HPeBJvPP+T!t!TqQ=S6yirIL?(T>G`kN#4Oe zc)js5fUS~{BM6Kl0V9PGj#BW|d|QYo1uEqO(uhd`bG}7PBcVmyQSC{)n{666kx#c| z*?wV*ioxPeyQ4O)mHVmnQ}vU9I^U-)Tymzdd(aPH7bHPc9VmG0G9=Js78KrMGXeV$ zISak-55GTdjm1W7z_3vpycqR~xa`}SL7L05O3-QTx9-tEaLzg}Thmm~9!D`{ZFdCvIGZxj` zGC{#44X#W`)pDsx&&PpovQ;Yv&?}OTX=Je&cTre5f<}tUrkLoq2tRk*x+?MVG$uwA zB8)Pu#?G(HTxJU%)vOI$S+Gde84sX4>e|WgH9CB3!Yce zR|ckHiWnXh-stFItxi-3O>aCXzMKx1Q8zrmmd_99`fV5pqT-of5`byY=F+;vG=*f# zBP1lK5gPA{v`>cB>#9$*|03d;E@dWUjoa?rR+<+mY_b{6y2%!M0_?9{O_D$=ID^Te z?BFeEXn-YUr%jgzt|dF)V`G_Sm#bLhs7|YV#$WSD9+Irn#r*@==(E7xvd&dr=)c({ zCY!c^8=f|P-Y`>$$7G6|hego&wS@N2$%|t%I$OZX!UB$12I>hi57|hAv%>sjQWC*p zTv?XAlEJOqTwf>=?s@2#l*3z~;ne#ZZJE9p#_nv*3e{!Vff(ZN7eLAa;Py*3tU)5+ z7X}{x8zxiut-EW6W;6A(nflp;YHBu3xQA9-=5jVc*m5?BYVROoMn-_e;0$KWOX{c2 zE;fof$6|CVXqlvMN19MLX(f`fh5nb)IgV9m)jZt1G%s0e-}RD5JZ$TTep*ARgmGATmsR)&C1A28%7(mVIFOiKzSdhEf^c&T)ebfr$eB6(7 zg*s|W>NwX1X{HYKE$S?Kf@Lo~bH*^3-r)231bsA89^qYa8{43Te!3N3CVff%?1YBD z21ZrYowY&fK6|6k&n0h7X7V9HRhiez_VKT`>bNOt8WyUQ9jMN*0C zN1{z~Zt8tulLLsnOzST=&>@%Dn+(UvF=WwfbIk-l<~> zp-XwSLboI5)U0^}yC-l$TamO(5 zWs|_#R_KS>tl2`{7=^(qnTnxDo9R^6*&`i{vE>zT{4tN?^TP{RYZi&Zrqr_-YJDU8 zNZ0*Abw_DOYrC%-yucP(7fRUGWTEG={Rj`>v~_?-+{H}T$UYDht6)w|{HFNVC{q{$ z22g2LKpRC9h9ya{qVL&jAq^USar5q65l;cAezKjjgj+!Vgq5IVMfwLeurW*?7QqLU zm3)a`6y%j_fo_4fu(LE1Gv!?-5M!fj*yl}5Z2Ts4?{69;nEMszK^-mv62qT<@Kq@gs)2zHKn zB|sBY)Nu3@ph@$^j~Yyyo$Y99yfDT|q|PmZBl-@>kE8=ZIkBcnM;WadZ^*P^FxNyh z2PQ%{vTZ{DAt3)yMa`iR32+@6zT`zeOE5#!XJM8AJ~JuU*jFwqVRH0!+!%}lXIVFX zyxH%^6>So%V?j1FVjPVvxZt{*p$mbS-zAe^4XFrfIU#|m<4{TMQcZ#anmjGz&bvXb z5I+5cDMTqLO_!im&j%4A_O_#k}jmB`*2pFC-vi&;Rmin)4#K7(lFs#HQKfqDKXT{X)K3XgcaA4O(k`xh0HJ7=@)5)I?dJa{;^pe5@~OiVeDVBB6S z#nK+N4K*vfvrVGvEfva$*J#DTFuO5}Qs6ZiYLp)+FN90(Jo50+8X>Rt3Bpx<)B+Lh zy*97u3KAuG+XSzEC*-NDi?VJ-6pg)6QPO#Ttt)z@`5?#g!+zKg8~Nyue_=X17+0%a zv&Mhcp2XOCXTRh$hB_pksEbJGrU*B49P%N~CUSTLdvHk#3Sm`dw>tzvnX)a0rve7) zB&`N`fGt^?ph6S*6V!<{8e}2K8^bE!gXehRY|4> z&ayvBS)$3EP)iPsc$yOr8kH~)ie)S=9$CEXZLWHG@wcP5-3WTcJ8Jh}*t%^0-S{;} zRl$k7FjT(X7hG(8KN;)Q>yhY=ZcTg3va-d+`L}7?6B;6t%unu!UN;7Ik|n-Nxy9^m zs0tjxVt?b%+dsE!XZxKgJCfd2R{Fw=(cM;2nehCJ5slVE&LkS>=)FZg$>j@%F!qdYuFEMH0V!`}3e)uk-JD$66`q@EZXQfyfd& zN}0KvAs!xr*xgG(R@)JmV=p@$Ktn?S#?|;Nx~_n;04uI?E$+MP?kBPvu;wOEfZ|9b zJ2YD(v=fK-cVk9r*SmyZv`5tA!}oxs>EXOaH^Ej{+uzmp-^Jc=l59^~*cMLQ^c0Vm zn?u|BENPP})#g3jgf{JbqHoh$qD8uTHiI?j%Y8x$X{u%0JrYOPe!>AYH*LR~l!%!kUlaWZc!)he|rV>PTj zwHIa*ZQ*5+p_ie0r|VPntei+7zKzhkxbx4H;(Kk-)as;Cm#7r!zQaSKu{p%v%@vU4 zVvVxB0KQ1*A*{GKzw=Yx&cd=U{yMr^FvDsaOVr@=^AX==W?5Wx3L_mAUkoV*ZX)qh zE>}q|LnIfm`IYJK!fVUFeu3BQAHoGoPzKR?+dQq~x*plGQ7?ne#+7g?)vw`zFWINZ5 zlHyg@V~h}4K*Fx&tzA0s!~Amu9K!)-)>#}so&06tZXg3EK#{^`l|hNF)l)J`6z*K= z_e1t5Ds2D^BtZ`NsKYDtY0L{E`^=7Dq~yt2X;v)n9p=pPj3(og`f&W3FLGV4#F53jPNw^^-AEh2XX zHUrw~YrrH!f%H$S^K-R-mg2o}X1WTRZw@ez!Vud`Zd)DQA_?SU`OJ=e{|g8zkNx;JyH%a*`T9Q&P8TmydA)G#Yi5hT;r;J;Pq}~B z#Xn5w!OrypFvrXnx*Z`F4aU4~S?GMqc9#e8zT3hN)1qO)7CCE!2U}F}E%_P67qIV{ zJ*0XUu7NLGx>><3pdbTRI9N-l&({-~)a)qO`t`p@i-T-}s%#l&BHFm5@Xyg?!C^P$ zQiuuj=+<=#Wq;%(R6YkMp}2GsvW=Q*_j|>`!SR5JjF$#rez54ow8gJgu3g;tIp?ylM4gRC@|CyD$Mce%#J;LDnO z?%?bJb9et=KAkRt4EAv6+b-u@BUAwm&fE-4QgoLdxHTohk?hV_{~9-v@Yz^-0&{D4-7IqvWy0!2yBYL|+mBsS5I8 z#*HO4`>5^AvX&F0;=0FbI2_2f;V7i zsIX}F%(cB(e%%cz7NiT>^?zEE!gf$#@>5l@~l+si9tb`SE?27PkynJ~63Qo`R#a)j)1q%LceR$b z>{?(p2M62;=UrXvI+A|;I#EdU4LYt;+$j=Shxb~s9AFhcW=Hf!frXkd6l2{o-&z|A z^EGm_;Tx`x!Z=cxZ!m8BX0mAv1YOo)jS9IyhkaE=UM&@Tc2$ zNE-qBN9Z{X`Amv!w^BYu?p}S1&h=i+VKUj%e5Kf3?VGEG;%h3n|Un*UBiVKSKRsS`!KIddl-5}E5 zIOl#4DzqovbF&V;ijvq+tWVfPuqth+}?RBPTDUiru^ce&fa59@oS%n8iN_B9SQ-_t!E`0@> zLh0346%qZ3uYoiT0!BjvuwslBsLqd%1O^gVLR}U$mX>E#IKA@1nZ#A-k|nWBf?kur zUt8J{n-X#~3QiBgw>q!4iJRtCN7E$CWUL4VlNK4%T0k&qn{^f_oty8jWhT~!*RAsh zA#WZdG_4~>_XHXdJ-7D315iGphS9sV4~h&Djt@r5fVgz-wj4ENqgovmOo`oxn5fO&|v)KipuO_jzfvsTJT@+3{tI zSGD)+t4$z_$!&HGB0#YZ{F8?xolvji>?5(Dh0W&bZW2hm`D36P(CySLQ0=02LD%{AfDOO5o8O9rOv|fUgUq2Glr1wK zkvc5mR<^F@ipU%hIoMW2;VgdVH>HX6JI^2Fe7!FhosgW}VfqD)>^d5adrrW-P6gT7 z;u~NJeqp!Xp>Cqr1-_OPMVyxYc|uOY;+%X7@m*@P;<;0dFxK z*qt9jt%Zv@Fv2qsdVurj*|~f+ytY6R9NGe4kg~t+O5Y^C?G7f-MYAiYp$~ZV?Ym;H zIX}SEnSO)Hi>H2Wy136`1b|drHqO%K2Nef`6~4pTsbU?0|JyGYQ=nP8M47NlxU>P)V237m?$a(foC`%ICRc2-HR=AAEVuf#O9I!6i$y<6SnO z59SrEhF@fv?c!JA5=3Bu+hxjEJfN{{QIm+gMy*pkUFZf?zVBgXw{t$Jb~s~~D*7pm zB6IxS%kL(Bf0|$P3dOtm9W9=II4HhJ!956CoD`3nT97#lPkCgxO8$#7C3!PTVi@HW zt5NoBFqu_)Fmyh0OR;I%3Qj~h3 z1(^_PduD?${7a-kPJ;$H`(v#LgFcHbmn~Cd%tS-cyBu1kQA7FT-R2lfwRuVDD5s7t zPtrhpe`mQrw1&XGd_Gn!x;?bPvIViK18LL*;@jrwBM{57l-BY@oidZFr-MR4x+e7; zb1kydA=`o;vf1VMUv!c2z6RRXhjH&-Hp>>v^3n06voFz+F=@;i#=be@&?{zsLUqF`0HI5HN=Hb5k`y^QUawZS8(7V!vGq^5%%B;mZYN)(KWR@DoKX3 z8Yr5JBk!1&dFsO%YCBRO_PD4C=uENR3<| zb*DV;G>L>unWSp3J4JuMU>cz}=hK?+9M-j7NI7_bh#l$!X5SEX8>^aieoEa#_q&ts z;nJZ&f+|r~TL4KTGfrRE^ib@ywIVcpUz)~H*U%YPqvI66CU1IKs8JkaZzn)3 zAY)GHFLe0k%Ma#L!!qa8fXw;fyvq1n2M^@a!#Sr1a*DJllmWA3^PrJW4Gh#nSuMMf z&ac@eYoQBAt~mIi@aT@v$Vs}>Rrspx!w+_+j1tJLK|7IrmBcDpW7!hR&0sEhI@PZm zzm1>qJ@jcCNhA6DL%K+SV;q6Vjt2BvDU5hXAE{w@Q*b zI5#<-L^1oJC4*D#DI&P`;ygw%-G){otaV-eh{{*nJ7*P-cx9nhmUcucVvb7cu$H4x z8yET_wpCnOT|>?`CXj)AS{5i{tZl7!n1h1%X~}D)U_l&HJjZIKvywDR)i79dsfAEl zetkAiYkf)s;_7Aw6_pV;NvtPmtiJ(bB8qxYB&)<0$cfRm z=(?_vS;(`CM8CK`jQUK8(WkDeTN4_w7WhM_;SFEV{o$FjDHB00?)$lEPgFrPA_aL8 z>j^5f6jg&3k_M>>YDgx8SPDmsvWh&3G@>dZ4~GnNS93zva`;h1_vxo3em`!FSGAPn z{J^r~V{_)FJ_v9|X9bSN`RM@?w8%hh%?%aWAeN~N2IPUIehXMbm1*7hT`sOayR%Ov zNxCn2n~Ofmy4$ca?Hp)e>iK1xV{cw0B1jHrEJoe{L{7jAg>nO^NxcI;`zw@{0wXz!)@B5|uU*Hic z7QN=uUwr(E`&n76yocej=Oxj5^V(0Tve*6#0r6q9IbMMws>cfCU}7)J<6q5duZeE? zt|#t)Zw?x~=G`BE;^O=B`umj0di!Y(%+bqkjKl#KB#-~^ezHfenSR~Hzj^;_-t&v+ zUH;zt-HMBaXKYn%n0#D8LfL8(inHxoXI@k# zmZT4jw-XWx-C+Na-4%Q3PV_76U-|9K%U39&8;k(D7%w1H6&IptW9I3K1~K%3sn!<> zgQ^+KtqP%+rLU4PwY%{L{3MGN_r7DA1BLH;$8`1+W}M&uj_Gck(B?o_^s3%Nnyu%y z&7dXKr;B}kr(8lhb0ZL^z8UL*EeGE(=5M%LULI6EUCmQ=Znf8pk>i*ubB4mu+>JT} z;|M;|QFdOHFCt%5d}@(fOb8bGj_Jam$LoxcYJNgXvmWwUpSp*e*d)@9_OmW8Wp1)L zY^#~5b1*rf?cewsf%-;^N2##Bq{5|b|E$ltpR7#YP}@th9(uuQJ$@G_RbC?NZ^IEtftnlMvm{u*QfwIxF7Oa6@tN9tg&I;*BL8Y z-L@qA&-?86_OnAhxO&IvO263BR^IE2E%u9@w3T=J>|g!ms#D9hvUN%4Ui=4x-g9NK zgs~tC^}E$SDBuVG_rAc>{Q`@NcTyzo7rAgr8-MAGe6lPOtBryDOZ)VBpZ{n-|KdK5 zB=;LwTHud;fyY-Y@Rj~Xx#m}v95rBH9MZKFBXbk4(hr$KZbRafw9wKku#>zQyRldU zbBv3oelQi_%YX}WSB@Wj|7At{vu!viuD!SX^?Z~w5?&n<&zXe0PAO=NRy~9YTXBRQ zMI=hG6GfufMr)%iE{|Fl?vk$1E8`+ z=w5L%$%>mVx_Z;Au(EG9(KU;7OJk#+<-3 z5Khp5OWRo7r1=s^_@-{urPSSs2?(l-Z+3C?lT*d9-qb+o`Q{}x^U1oi*k$?J~FeuFSb+Ojq@VaKd2+X69R zKtIM+>PRzg?E`8u?gM;86V0RkGwm5Ff^>J@hPjQWX&kXL0$Ph-ih=YGo9t4*7O^4K zgv>?wDKy5PKO7$OVLX6+Yt93Mr`V&Deg@i#ild4m<2kK*P{;0Hl3yXIodJflAo;L~}JF zphxf3DIeYjO|ZSOFnv$!l3E9fQJF8v2Myu02LO&C@ze6)81kfe&*Gv2ciQ;KvNzLq z#Lt^X0P&)vTj*SD<3P_lG!9lT`a0BT*@t5&dGY9TQj*ssfX*|5nil#Cj8~CrldtMQ zDW4Rb)5BwW&?lpON_qT?;nO3}p?A=yC(AsKgokv0net3o^D{~*-oChagepE-etyVO z@AI?I{tRpd@SuF>X)%vl=L@7*Jd6b7f`j@ao2X2H0Aw)k97xPoqK`HvoiYVHou2_o zpd;CD#ANk#I*w-roFeyuXOa0A#?vH<%>+Oa{m>z6vKNoDmS|2GRXi4+p%e5%{)hgI zGF+Ec1uL42Ky|gjgDq|UB_v2mB(Ca1FbaY+ZAg^TAWA3E%8<;{Typ=joZk9;E&JWq zCT?F{j_b$RGSp2#|MVB*1%-S;B5d8(GDD#%hvyJI2|93{92#}+#k^${8)vbtB=v##J4 z)W=ExkpNbaBpV9IqQa|-y2ZXO2D;sPV{P7sjPyZcl!hovBc4KX6`{J8;(a3~BdIC|IlB>QYt)eMy)J9B;)-#fL{cHFPzYqLn~YLQoQU zQvvw>P-E~#8l#bv$U9tZttOcjoe*bI08*rrW;iEXw=W~LB^|?o|1zZoBcg#Av3GaQ z)pgf1s-&H zeo`^LF{y_39!aoJD{z)-7lt4pRu%E28K!!KBhXHpqFK<9KP*Pm29s{?@Quyec`NU9 zQ)NwMtdNJ#@R)FdF7a}BOd3&%m#)!8Pvf!jqyreJ%@4r9qpCbs_B$m{=fq7*n3A|U z%{dm9p5rzkl%>#}{Olba&hD&}RLNy*IV$e(;T-$0(LPMMuB~7zajr$M@gn$tlnDIwbON-^n}bv>qB?V2TQeHoC0Sa?g2W1!xb zfUStwgxj=$GuSGzXw=Ob+$u(crdx}R)6I^9!y8xx z!W)ay!U#1wjna>B#OeM}6=aOORAaSm_O1!2RC@vA&SY}mU1 zT$pj&1gWf)nz-X#1sJV42n!n%KIE9Xl*-t2ep+>s|E=)T@Ho(H=H?D{y<=yXnvG0= zSq7VKN}g~)VTv2V;Pwoq=_yLn<6U?Y-nGk#X^J{k#DmE4LlaZtUEAXwpSulaq{2Tx zGdRLoIpziT&}v?m5T>?VXG*fS+`1O-ok^$hToBH!V_@S8Sd6(l#het+IfVV<>_aT+ zb9T%SaB>yvRKM#OvJo@P2v`flf>PZ76|syjP1_O6=b8b@4vuYS>A+Nnuf zwlY&5z<|`Vrqcyeu_z6T#h{1KNKM8NylM{i0K)4Un+Rw$+_{G^pw4i7fZ=-5%b^#>y!)lyaZqrJjhlRTs={WAWE=ZqZf)RkF+iB)d&(FFoTWsJOrCO zH+!xouQJw)ufTgrRH9p`PXk!}y-;bofrKW1zab6?O27fJMb9N~(my{?e)fFOPzpx@ zz90i}`)T>vbHnB^H=JP9o*Om{7122ial@MDhSYNjJEn21;9BAAW-hI0h9ex8S5iK` zr@NloxVB3K(uCiJ*`rB}@KFaeOtAS@T zd=QXu{KCos8*7V=jRrObPxI`IVO6Vv2t9}`Lzo1nE?o=#nGfhWKw7K@KZ=sHoOD%` z)q7GEB#+xA!%PEw&$MiD*H|3fjb=mum!%ft(_EKqX*Vp`NG_XO`e!rqy#_*MM4&{WaS>@J9VTFohF5xmK;XM4#jVLig zo#}8e?xE(e$=Xbn+tWFZBMQ3Q7f5eCMUJSv82xSNbas=n~}bE6ccSRse?VT5Ov8!L*3DoLdrw#$Ul)= zrx!_cs==P-Ok=D9Wa1|uh2I%R7JncSdB?Oz58k1y$MoMZVWXVyS zDa9@z46fa|ajj;V=Yn4KIyc(R7nzj9-`fBnUkF4*m0kAMjiTcVmgDB*=1Aj4HfCJP zt@R4FGCV2VEQ5{9o@`w9WaF}@!Er&5q>L-$WCBe%n$9ec^8$<2;h*q=ww|Ga(tS1d zHGOp?ttrcdb;IJh?;lKagtA?$GxA>^^@)H>=uVoSK%ItGU|mw^KY*2*1H9J{QDG*+ z!MHNJeE{MiB=0CC0ipm@<*=s!nKhbmOpxCQNYn6)0d4-&RYI;{-c*R(VlQzA5F(!wltDUNpG!cv*4f zafj^q@XEue#meO@w^m+@iCt#pvDC_yr*)#0#}@U3m1ksG7sr8!Cs}#Tl~-PK*_GF1 z$cT<%<=K;As682m+S4G0Hie8W96w0R$eREFIp@g1QN4P z=&&k!`?g!{UCK9r%*mSxLE?CtOK#F~H134_RhX4y4crq}B_1U6r&mHdoD|2*1TBix z+2$fFP)dR@N3!5xkPy2{Rw&pttXZ@r!)6HOV3Tg?2FpkX$x+uYudJ6z z%ghjz8!|(9y%xe&rS3H|1Qb~!&ncN9f>QFNW{AQ1mYN|vKqOyj2`#lh7blR?Q+ zLqZ{G>UP;5pm5q0G`+ktq`@}5*MQF1>%A~EQ7%@g*gsp2RI&EZeejvcRR}LfFdIdX~^VI4T-gb$)P`_z(_{qB416E zjVj2dAe3!)2Fwg$%c)TTl(0jnMg)JY6gMUiR~4bh8LmaB*Vf!1SiMOiTn`%}ixu=6 zOHEiSbqQV32m+0pM_l6P8p(%J z)b-6briQ_I!-}DTfFoqR5<6SNZywDdg;K~*N!UEgq~*O+80z3fI}(?Mx~CcxK!@=UZZ>nI)X|i;T7?k&y%X$)v~E15T<>d zm-s1J3)B%(gj`73rV?zkguT{1>Dqo31QhiNZ}ew)E{v##Jtv^GxiF(0RDH=@AP#Ft zWlc0n6a?TeI;3ajMcY^{A;e%$gp}%yfK`16%;g~3!mBk50!62^_DI%kQ%$to*@sYt zdJX$TP))1>-P?XN?LbR48tkJLX0^3U0{sIfCmRht(`d??Xq_?itV}MIX4dl-G#gD- zB?NUCIzmd?zl32!J)Myl@w!Y4Vt^~`hRY8qBz$hpI6+0&8OnZzXV!rFLa|T1LV{6O z9K;jLl0X=m1_H4h&9$DE=6O1KB^snmgBH~dd;~d+f%++A*n?A85#DkNRaK_(Lm*%w zgWB&h@4y&947Mo)+HdK;;WoHEnXdR~Y&t)Xd%v_05P-YmAg{2&m)8S0dv(hy1qPe@s&Hku}A z2W|nTaDc-3Te4VnwXp30dx5tp9L!@t05q6VDGCQ_9#A-t6ozk4wymxWY4u0DMma!5qLxpE# z8Dn2yq{Dvg(BT z7?G>^aJkuS#H_3t@7 zXwUe-vmwQtYImgD)939ITfqf6SF-quZ~(}Dixn7 zdLCSK#FLg$kfTX-lC448ST@N>zg|&Kx~9 zk<4-hr9X@_#w^vn@X%r(&a~IMt5B`j_z|Ki_~yjWw0P{Xh5VwG{a-?Rx0;6|Oi>q< zDISt{_L)4~j|NzZvJY*Q-=RXZ%gIp31Mtv_G#y>SW{MuJ=SNe42SD)dK1(U8QQnB4 ziaZ54mrrB)M0bOu`E=fVt2jDR9DVY!Pv~k8>nQ$T;vT4HP%O(mw4p6L9tky6tv`my zR@`Dqa_kRkQR#6pVA?e4Fds%t>r4ATcY^Js|#qO%+=` zkA_~g!49FlaJ6Yi+@w&N5P}}F$N7QB+K2O$!vIM{oSlK8A8Y!!u#IAx$@%kg_wj^62Noa?&<$@3{nDal$5O+~y*!Cpn_R5+LA& z34oY%G#5I9k`vpI1y|HMf07*9-DQg*2zs$f?y7QCB_yHU1V~tT{2L{p@g$7}=Z z0Wp~esT9MPkN`roh!Zyo=G zjYNqsPE!F8n$eA8!ElYkcS!6OL4x6n7QtCKByZ#`9U^a>n8-0ql;=LuyJ7AS!F7%E~3&W7{b^GtF!oz{7PZInsON zb@CCSI?#a+(zS55>RO!}GE|TrLma@Z?tDHuboCf*>v~;H2zGbv4z9hFgIbtZTk5U`f{jRELRCKoFN6~};N$+$cobY}FJV&~&dp|Dt0i3h zd#6W0VWy#!{rE#Via@PIuJ*M?Ip9zO@J=Vp%Zpv;T3yIc{ii#zQdA}6i(SG!g|u5r zIh-7N_%A;Gzabhr9XOM00t(4VS96tvDnk^K16HXhB**ji6cvR`1BIj!C?rNcC}fu7 z=erBnek4c*QBp)r)y{_B`~Ab5ck{WSfQqKxznL5s4k#%OaUMu}spjs(JLobZc`-r^ z`n*LPy*pj&4kjL;qrs6WxUrXxV{6^pO(ZDsNS|#PBq?N{Pz4AlC4awq49P(ai6Vjn zwlGf$==kEOMte~KFGGHDE!J$I2y7Y+FrqTw7XvA2tW`_HEMk5*$_Ij3nzT-k0g$$v zB!u?&|IxqD-zeL$&lVdYy(sowo_6Z-RZ+BKF}b5`LObmBC_pD!OvX6Q72G_S~x^y zM}~k}@qBnrly%vIMc`7!B-sCu&khzfwA{obm@=1&NeJomV0I_}B_y!s?aH0y4;J~B zAB8=630|v!s_cvsl%-#YEb61!D-<9=+&W`%r_`jVubpzLYGBVr<|ye zOx7&0*9b(=$bj?R9HG0}`4~ViE;_MA=mKk&HWO>3-0WBzjpCxJ4WeKBHtypH zuNL8bzhwt>g>%00ji**Q)R^u!ijBK&(c|rTt7z}KB_A<`v(+3!>l0*e@F@=i9Iaao+C7@AaejHXjiFnd~8ACLJ>ARd{SsP z=soAA+2){ZO_^8`^LF<6SW!DH;KfH2C(%yn-9)ex9r~YDD5|}kB zW^Q7HANr_?oi_oj2mB*`3eY-C0fL`T;_3eI)V#^gc(THU2gL6ey3~V=sY97;dH8@& zk*J51bs!4~AXn!PEtZ-usWY_872`bm(qc~~S@x?9Fxgv(A7_C6j3EHfDK8>f(@rT* z69hNag^+f9%W1zVdfsg&w(9s$o!KHCP1zp1T-tKki7h#0@-|qZcscbn-a={g;~d!H zN(yMH)>=bH#-RNafMa8^6P2X`0Bv_-J2=FMt6dlqgvED(6<9ZS-~zF$S8U+?wJI7x zM3NVInU?CvOlg*5LJ+V}I8oHQotp)2gu$4{Ih3P|G6Z=B(SbcX+0Y=ty%+}a0hS|n zBHqL(*K(4PV`N^;th)}e{Izi3mX7TrIOAx^(KRlI$K9-cVH{l=fu1_SPl@ndZ#ZYH zn6HbB5%Mrv1pmwfm2Uc8i;4IruuI<5u3>=}7&p|}JDAIZ*Z67}zCYZgMX0=xN4cGu zE1r+OtZ_6JCEmrrbpC|N6}uu);m zAmD9u^+LW?TQJuBLib!XywII1SgXX3+>>usaQE{73p{N!KVLr`;$4Hn=Tc&QF{KMu zhzc;@BY`-|I--m|M4L*8Ag*|dgub}=Z=_J9!!sH*HP;Y<1?cn8DfuV7`OXu!A(P!h z$!8urSVxGLCXS97%VLKrd2~rK;qCATmLNr^?Ho#tE=w54qzu~FW;c?(Q_-uNZd7%# zB4sbc+AF^n296{%UVgFuiv*?bvPM+h(%jatAwwb!B3HMg0ON>-*) z^%8Mc>(#nCs$Du*r|osUtE2talEIMchBbjY z0~_{qU&)5+3}UCK``7BCxGpLSjvN7&S@e0MZc^&JG1~85zz>vBcmIy}y03!RH{1r! zB7<)i_4{MJnQ~j))Ie9d7rO}|!7BjllzSChH3pq);1rbj$q58$DR5%rBmr8C?siL* zmo1AQHGpJ}?HuL1JbBn254nr%tkXk!6B5xGaq2xnAk;&Q-s8$Ege$ZXx!jy~iTc7J zdUSF<^pd(+><&FGp;_qz!E;JfR zo|;=nJIWp9BkoMVOBIF;I=sW#qigfdEEfNKM0Z{C4UvM5cfpU&EMD0oJ+Ph^{xs{r znWHFF*n%s#5qy85=+^uk`g6`(;U`dRM&vIpfzlw7adb^V?d!@OGTT15?h6oouE#>A zU7hlcd#bv@&cxOEM;&Lwq`fd3Iq0Pp0vmrEC;%bP4M?Im2vRsGG}db7s5K265ymAX#$p{{dugXLZK1>{CrcKw2v?)TV9`rYiI zV#3FUf8DqOW6a=3-I=xHmm(X?y||xl-su4JCaoEmk=YFdf?VDN4#Xcb*oY&ljFem* zztTExM)#(UNY3hz4KWHn-@9EFv}l?YJ4x+m6eO)wwabD_zj4_LL6JsSm^o)E zD`Ya5li*Rt<3I+~vp&>0f3Kq(0b%-3mxt7?rq)vnR$vfe4C>86Y{4Y&D=M*N5b6TZ ziP!?X1q--B31qzQ+$ez^0dWOb@Gt;-0K_N|1>%PJ@fr|xP|RJZxoUJTgmj+`t=;6Z z?nX&_Y@%vzo8%mKw*2XhIIJ?_kaHS{WvrxiI&3GLmW)l(>|wX=@D6v+-7-PZOW+TI zBR^q^5eICeEegga3;GS-ODncoTCuZP^NfpRk+IR6)ci)b2_mFm6D_w1cZi;tX3cR_ zou|mf#++%wl<6W~C+Qzj)rtKBPDA~posCGjV%Fc3@n%p`_enLAJ&$Q@t_IR&kP~0z&y{_lR0#4B)V=|I6d6K89PMtBg{hYaJQ`o zQrU1HW+CykAB{iV2HoNu#OZb8un`%Ey)#~`#YtVV#pXydK5|1;{L0__$yfgOn_SZZ z@aRJ>HOZG>_{`7#_n&_4ovywAkbymX_|*IVvHwBm7}?ls&QTWb`14P{|6}3f$o@ms zHz5~eDQjMQs$W5s=cMH&qFMQY7GQDoY^b~&Y?Lt;2-h(`QX;UJxQqK2w0red!j!oH zYLZQ)s^byQMg@M$ku)hplqZ{Tz%4xxB2_k7kCJ(p5@3y-;kE*~=ETq)g7AR%0)$1f zp-NQ7f*YIq+Oj#Q6itK0$xoze@fQKOD0^Tuo(Y}I=w!2a5?X0Skx_NCm5=ngZPmNZ zD0?eRGYRuhm+>TtunfiC(2v4c?2m6V2-XT5WMf9XO1Ch^t9LS3N=n5zDba0}erCF> zty=Lr!9#Z!vA2e#VV~)Iuntx6+7}WR@-svTB%`&wrUsd=Muaz3%!Hf4%d1Fl%W-Uq z%!uzswEYkP5_m}d$GA$5X=Vg90_uiaeJ+3P34Ttvf>4UDM2zcQ8j+Lf%@{&b+)dP( zGwG;KeseG@Rzh)XHcUWLJhnzMUetLeDK>T^%sJ?0Mp=)5b&6sm#ed7x1Eg}hUjXB* z?o(oUtm;NAr*ZR15vE}}!UGoEV6AJSS>E(XG=qv|$Y=?L*eI)v3Xoa69>&n-PdUb& z%x(IR>*xsf0CrWNvg&F(t}(H500iN0NgCCa0j2W-+%Y!@y`Dob>thk+_1RFpojue8>c}8d{R(EUe>+@A>N>f zOV>+7@uFcUQf7H5PWPec42s&;za#?U!yz%hf?~}>@oAu___O>5D6-pfqdnpSn5X0b z0s;wCwvYb700K&^j8tz(z6g|lge~PD2q%d5f+BHk(Ga82kUSk=MX-KEZt?`TC0dPW zmCDX!y4Qf!Gjw--v1V82i|mGsSV82WQcw(SDyNFbouzOxYl~#3D%dc~=h^U*=!Mq! zB6U02CZr4%Q6n1X1ROYTDOnT@8Cj}9>PBQjHYS7GBdjt(+PWe)W(SiE#Xpjb+!VWZ zmNY2vx_&P9jZBIzV-z7N^wZomySIn>?b_MwXU8yDXoEciS*OjKo>4QfXVI>^FlS<( zh#ghn*My(qtQlamU&kEj)jd&g+<^q5h5s+aU_cJ=4=6s04=9DfOT@ts3_}SV(5{5l zetZu(_>pG|KiBgOW?}zGCF#{6GJx@cpV3f_zVIw2)6|bc9W0^`gOG)Ul#U>YPF^*n zvhRQ!#T~W-*3MVvR+88#(;wyq(~mZLO~wS%fiT;-OPmY1W)4E@uX|EY?+?SS3U8jT0efdji^Q68Ni{=v`heW9ytBZu&1;SOFAJfi(tsm=0YdvvmM*7 z;XQBib_EtTqyo#lIphc|K0<8h3{~|zL(is!M7}diA%pdJxy~?=WoI@iuHp!z+>|55q{foG|pWXx$ZPuIHzEx}FLyK5lPOp#Z;FVe| ziTRJ-t|vGRzDluAg3XZ*`n_=!$MxM^k}B{ai;x zL@%A6VXMq9wP{PiQto`YCUcoK(4X%3z@I!mnaXml#HUi_9k4Z1{?m9^#wt@h)iE(z z5;innN_*{JxOSMrJi()0EAAH+pFUd|(RxM2C;cNEJX|557xuH&|IGOx=YM9j|G^!2 z-kD`w_Me2FpcR0zha@1R&au74Sk4D{m@MMl04E117!^Fy`8ST7DY4^!(2=SAkD}bw z?Ml*Y~mNfCLVLl#ZIdT1y4F?0n;d~4M zpmU?sPwU17`;BjuQR43UO)ws*MY%vk8bCR~o^j1ACcdm#hvKJMJpVZ};)<8)I@RO6 z3R_ZVug{gQGxmC{d^PT_{IozNOG+)NbHz$fo&gW6H@EwLubV~Lv`MBpj*f2HmOLyS zT4Qsv4sSLd#kMdn&Y?&_qSBTYeWSQhDDg16brZEVlU>tAm<1v1y>`VMY`&=P%17aj z{^~q2X5=wh(ce;RxRw1H&t}8WZUG%0*Fa;9Mb)QB=jge2AT{8`GyX>1mv$Cjv5M=T zzCmBd5A|!wbbtl-HU37C@gzGngcBDr7(|RMHl{RynEsOn>2rLBJ7C@(GkRCpa} z&0<7(7^RAyw(nP z-d{Iky7tSgI)E-+3BTAWs_Hv`W!5H)`c`$Fi~qPyCBAbY$KM3!H>#0?n7NkKiYrlh zF>|P3B%}>E?McWSucbKdq1r$(DeK27MIev7lI(Fj&(Uub7)iu*ag^gNY&YhT2h2}0Hb<~+5!#wA>leTPwZkO zLLz!gM_6{oB0VF$Q6XJR`6RfTL!EWV>r>Tj%L!d8jwcKF;9X7ugjkOWX%I>FbJA~#5tepXKTR4Jv-IjncZTv6 z#|(TjjC!UWj+FGTF-ZJ126!th=o*8XU1Ojj$!2;xclptDP;d&#{1vrGhpPP7%+$z&Cb!n8-@XxWk^W;{UdX%XP4^EqKx zv^jZte207Ic76(Nr=sGkDcpoyQnwr%*MNB7PDaflQ^cniCiHKs^Z&@-Z?HnuKsV}z zKRkv5W-3J)Oz9Y-5FVs#x`A8)GTJ_mJy>y%9cUTui|^<-svoaRDEvtqEzzgY*yAe! z#mPS2;=%;$6K3dUPqDKX|BbOKp_!ADgxpKCpOgC&1EAabXB~8?w}-EBj|ou^72Dag z&GbW=^rCs;1@?#7PHBEb0N`*+*3M@zx!jmp2BdWg(9$R_3Z3IIP*JlGYR;Q7eCx>` zxz>r6>I9jcA4Xp(F2T=_n06~oDaR{OU^v+b4*_eS*USkoTsa^`A?rrAA=~>3)m2&T zmea}II<4HJrNTDhlAEBDN4lw~YZze$CDvbTjU535yFa3-fOFacI?Y%)QXy*(BEU}3tvN$u&57vneR-?!J^ z0KM4pHH3?aH(=v7mLzL$EDlNS8r0SN^J2V9A`3DIztl6QXz~1R^2~Cfa2mY0sI7R2 z)SkmG{eH|Fv$sH+8?aL;v2j2HK;{NAz(UbLvDOz{TdaoVF4k*&)>7prB?cTm$^@Ul z1N5IDi4Q-V9o>RuuJvW7NA3KuTfDDgxIO!`qffriftuIPTgDf9>;Bd4IkKJOu7pd)?ijb7Mb9?^>*%|o(P z4Go2I#)v_2yloU9Vwpiu$RJY<;8EK@B2b_;rVAg6wTWbhns`z2quQsMBqspr*hYaA zvqv$1iboI=v8W03a=>8^Lg8dSg-I6DRw6lqJY#6AvBKd~qr(=slxQ?upAF?nJ6~Zy zbIJ1@O$W+u74z4VRxA?5c#00`_xW*$5NH z4J37$N9PN_7D zvAqfnr>As}8@;7SZef`rWY_&-#*0Zs-Du|n+DS-bt~DoPB4d}}r8zJ`{jnI!p(()$ z*kDTVctK7k{5K#8dg@DSND&oSm+6QWyB%Ls$Jx^OHZ{MJA8Dx+-sG7-r?sBr`f;`sN@oKy?WWjq+&D|Z^p5CtGG5fPPdykX z=Zh%96>8nh#vHnvKvzSdT7ItJJDQ)pke}1j;~r6`T7I4c!_kHOLN6em-`k0YFlC@J z+|<|0=hW}>+}XHby7PPa1-9*L?L9H;~zNqTG%2DH`ugsq!PXkp$%Sa?tH98 zWVb_?2m`@aGhapP_>{`sR<3TUtYLNDYTUWmcS=Nw8w*)&G)!$zEP)!y)3Kgasg z0_3fgI!<;pLK>&j8no{^mO(!Cx%Nv|6{R?h+eVa;IP-&ig!BUIpz zdAV@SPaM-c?{|2A1^K+%do7>p<(S9x?e;ym%+Mu{Z8Pz^W|cOj3pM169^77v++!u~ zo9LbQ;<)LQz%%TShr0vGAN7IUoOi^S>yA(>pJ(zq1ecB5D)SRUPdaq+-sMdHy zUsg5d+TPP$Zj`J@kkNQB@{*{5Uyu;7=X(H3+C>rpWDn1dZsy(^KsKW&PXKy})NT>~!0*)Q- zZq?I@SVia~ypNZ~s^M1MR__Z14LV)a%BU&-u0!2!GH+=1T?2zDt6dh&P{nyPYp;lA zV#on2zk|^Xf zU5os*Gp}RehvS3wvn&M(f1)NVn}Ma`*AW-KP`?;ff3aYG(F)UAL7cEb#ML0=<-5!v zxbp-;0ZjnGBRnYispV(j4csGg1}`q3!nquU9?BPT5G8}eIjHV9ifI1u|CYD3=sU}8 zwVPQGL`K+JwxA{W8o3Rmco(Tj?K5@mx*_H=i6_5j++EQnW7?}2e(qM8n{eC2XWno& zZ@{Ygqp=CGYL18?6pJLS3T#@A2aT1uolcYtayyQCMWRJk0G?XWFPz9uflW`GgoL#r zVT}bb=`n@^yose9nDi>oq*r++ErNP$-l5x_mAbu@Nq0iGtpF}$Rky!ECcO$K-GE7> zY>?dKu?m-^9`si(+PYuIjqV&n@fj2)(@Yq=%|a+LOXFNwV0@|0UZeyY17mU z;6mVwlPc>5a~ba7V>W<0T=&y$7#lkSDpom)vF|lWZ+V3AhZH=*^kqA)UV^5rxOMiGCL%HI-yx1j7fFh76?;GbxeFiWN1XkY>3PY z0(o>{aBRFp737;qY)qT^Zvt;FJ&wP%yt!<(WTM|B-n_KhmwEHaM8KDM^FKLnmNNHc z-u&&xo5e{)WpSfE72eD`ItAWLu9tc9cO-8{Hd~H2vuk*HL-X})XwsL7=C|R72Ksh7 zM3e3QDG*Il3a}Y|c|)Te@ORRN2I{yB(bURsxQ+VTMMMJbc2DI_hxwydv~FWBq&-k3 z+Y^Be6sCZ?wa~PYbC!^zW8DtrGdG7u!}hzu_CcWS9tMs9+ec;iXjO)fb})QsV_T_E znn2y`9vBCt=(X<2?m=$MTPRbw%?m@ZlqrfGlXJ7J_HV&>&aTx2Q}GCPm#;+AuT%p7C*iV=zNbrT0Zy0M!4^r1*2OO}GNDJ5;w2`beZT}J*$?9Mu=@d@Y$VM`v2W%v5 z{f_!0q)uiFsr-n&tA`nLM8`%lW!mfpnw@FQinoyv(*w00_*fb?M!bzgZaA`$Fo9+& zk*tcn#LKE3*+^vJXzx+fU71m49DcRd>wNuiRoWo8y^RF-7qgLcyp2RKAf$|3<>>{w zDApHVZyHu>&_=?^Djlq5VYH=!bPa;q7ULR|;sMMLQwWh$@q{S6W-cE8I{p!#TsN29_Je zvXK5w>P1)6dS$hljYMa8F;@0%ByC5$6e4^u@_e0aB%Bd+BbD;HZSgMpHWHij(?q6W zYel7p@fal=2`&>uh_sB2WCg4mSsAN_Tdnjkr;l2#U?W)%3JA?svXPvCW@aN1nvJZ8 zW_=sUcQTqGIT@NI6`Cb0pcx=zwZV~6!ep20wZHhF2TK>94pN(qqy-fdrNn`RwZidF z-Hx%7KwVlc!g_2Zc3|$r#o|{|i})u?7mL^Ea4F0$}wRWM{>L8g^Si5 zanWQ%X$lSG#F)z}GQsSNcM4R@f)#T1+0aDJdmc?zlX2V@%tnqyPn5Q_wI`s*q@l-T zu$_7Im>fcn4MLCU%62w+D(FG>lc7gxJ0rGM5cN)u9ve=A9@IjgyWss)HZx(t?E{7hgxi5AJdZ3@P2o)1BdM2FUYQmDr81nTq z;nIHat!2VxtKVcMytLY7Wxbb~a3DD^GvR+iCR}@&34i-B;b3xpX(o)wb}}Z6JHKSL zmznT)786Dtvm6t~&;R8u%IR%Ul9#FDw;y$syl_fel<4HtF?yLgqWxsI^_@i>QHLx; z9ZelAWi{^X{ODx&ExNeIE3zwJYkxINOi3)UZuE**0`b^yGIM_23z@H?qJVj z-v2UmB-;9}Xy|C1VCayVLh2CHowt~Q46SLdct$PT_I6w_bfEDaGIW>|ASbV+I3+fc z)CR4v`(55%;I;E^T)SV(K4>o>dbL-Mbiy{WMgTHz=&;?dTzb9M#*`!eoCl@=XO4i1 z^vtuVcI6Ey)h?W=!|oSP_YrUCP!x)e&aTvKV5YxTpRF(cfX5Qw(YBP*?O;~Wb~$uh zZn8LolW~EQwVfw>Hz82%3kAb=_}%ge$~7}I`q0ths_x|^csaUUd~+$mEjE? zxwQG56LYgUKnZAK`YU12_gY+C0$G@`!y<_UyfCaNEgw=JpJ?}}cFA^Z&+HxqWmR5( zHl*p+FSUCJV^*+xj1^8rW%n4@19lIyr&M;2wo<*_W4+Y6`%wFq4*W8PgkvF+5{FD4 z<0m^7vfdvH(Q@f-r1LFr^57yonLId{M2GV=rOCrrrERbRfFY)ouI97eg1wJ5<@J91D>N(2j*@c7>d}aEh3vVH=Fl z-*gj8O&+L-E0c#0@!i+9*mTR}aT<6uY5Sek5MJ2E zM$Kb=>wy?LRfU6_WFI;aGG^?t?h6c_2+{q>s`}&yH_hk)-Cc50#~l2n)gCjW$2jd1 zZ&|l0_+y(~y`Z{B{D}~mY;Mgb==Q`)-8Qa1aBOoTblVCbI|Om$8$Px<0#_fy=rLwS zk8m&+8<;MkASkYpUONwhd0jy@HZWb7Je-+4>XR5tj$nqp)Lx6FBvGgQ_M<}%C? zFZY-uJK2Pg#Q0ZNToUZFa7SD!U;>Hv|@#oVWKON`uj?4T!`uR(NKV%i(V@}=nF zO?%j~y!3jqbDLgfWx2p^VX!ZGZWDq=bOJ*cPJ2qso(^}Guu{32mg7S~IR{M$=Rs`d zD-+1q&y-86!MBVlmkoZCnex(VmlgY7X3Bl*$IDDvYwVwnDcezymznan6;sx3=rouz zqU|X#WpcgDl)odHGD6v~PqSyr=mKBf$IRxZzmKtlATN{5Z!40i?fq$xO!oMvKr&4e zzz+E3eav^-K1Ob%pv#hd3>#+INQjlz)uXqQR1W{L511+((~0aPE$k$sv1q}A`kUR| zoT-Mvjf-MW+1+v226&RmL03hpCb}R~4!&v@ON2cx9U|tQ*HLex^(n&SW*{-n%sqmH zaJg)c@e%cM)L%Mg>^3r`Gm}2zkmyG=QR`9C#6O7={}wwBsZG`sS#! zJ>u+%o@Ta3Y}1RbBG4)qS}TjpiL0)zi*3kH($%a4nrb~!Leai?a=sRx=2S~f1$;Sd zOLm)+0G6)Y&6?Z7sMvHX*jh39y&8?ef^tN_4~Bk*VOgs-Kx@^WtkqPl67P&3;NS4@ zYtWA^{*n!;uYGkuUlB27PT_OP55auHIf&Rm=Ai^Q78lLv#yuzmMhAYt(=P6a6v&Ub z;WiJrR$m%hvKgUtl~sb`OWH$&I%WJl(Xk>`metTnYU@|Tp8e98fO6Ib*qM(h8g#q6 z*)_YHm}5*)Df6DXxn1F$Qk!&QgAw}lnP4@DVG7B1WrN6*LmqfN~=!!kkXQl2jA78ob0P@ zywP!qwyEFoZ`vWHusXD0Au8ocwx@C>W6RZHCX}eC1&gS}IpL-dPWa4era`Q;OSgxy z4h$Q_I@a$pShopsBg|u2R9MH2nh>kZZ6aNm2QorE1I2WS+bncV9M=X!DEiV~_7^`o z5XW%N$1!wNdGa`h=MyDpAdcadfjEZaietDLdxtw8oIiiTZ3%G<#|zi%o+r0nX-A2O z)a#ysrg9*T;dd9h=_VnPi7ZAc3G8%e$Yb?7(5MzF=ifYG+;N_&=`X~rZM)=(0=fP{Wb%G z=g|W*#>|VEM*jW(Ywhc~L}X=FRaVuJ$T}dL-I&}&h4G{@!}!Be|sj9y2H99f)+38A9dRsGNz(SrfHWBCT^b9GDd!c_Mk7ua}|sA?WVvnmjzDGqDP+AOKsN>a5IrHV&Js_MU50OY$# zw6M=6MawBNC0c`uXythf*H~PXrgfIrdP2;K@POH3R(h?!$YO?>Z82LZ#B61Tm|-7_ zi&c|#Hq%K}-*RGqKEO920$B_HW zw#x%r$!Ext#~jmK(Pm3?1-+Bz3VBec%@x&gB#+@nK){!IP0ned(9< zbDV6yZ#Q00vbjilm)2*$j9h!g;5_cdE4KD>yxZgpvG!7g@yJjop?SPQvN{h^-S$CT zod+>4F$Ovx((S`p-S+BS={C{GOVXacpmbMH)3_6To~Lo;t{&lk9NGVv#OY?(J{u!T zT7r|}Eo1bkbuWkY2dZ2 zlzL6(+w%|);@v9ZF`}+5^vjrKVl#>dyef4(ibo?xuP)V1@rW^c-8@DwCs#hRc)+Zj z6px*-*Ax%dWu=3`mLhG1!fInZ5cDV})`z?~KAzH|i_2l|*!^@D;rv&h^CH~5t<>#e z5w0#@3JcCv&SDY%1Q%h&=q(oEN7?6U5l%E9ILPNL!eo?~w+Jgn4;yK*2!F8_VI0!a z7GXI{7F(33+M*~%Z=oGOXWCKrf{f2|wIc+}dD?Mlp&d!!h0XrO(vGOXDcX_HDZn>! z42A4nr69~^rXbus0oOfXTRg5>42|8KzCcO?fh7YX|rM9)Vr?RFd7 z{j_cLFA$Cj@Ok-bkpn;o~aq6hX| z#N+`fXkS|P+Hgqfb#JoQI4hh2D<&UA9^O|4p)&cPv8popAow(fRBN1>IG;N=wBMa{ zY`AV5umsoz-?uW569!ssg7A80jL`U*p&q>ADeq z0X_=H#vWJ;Z%RRUE&DWt%IRRN$^uX&Cw2Kdp%Z-?DzhiV8OMk|6r+KMb0a$F?bEnS z=SPq6oPb#<2u~$T)ZsGkV7%3oeeNjwH1zl_`!p1uf@o7Y#Xb!c4zKt$K>mungNp4e zU{#li(H!a$gokiNWRT2*ZBU=KQJ*PZ4WbV1{i=I4RCJGwRq?W_>&`-DT(CXGtASNc z9gm6!%u}JArUKu}Z|5Mqjg)s#pnTh@Iq7-yX>7}}Lyqd+g#u2A!ZgLFadnDM!(w(sr3wV5Do~>&P^0M1kb7#TJ43}cB~FBX zR-|e(N|oIik}BL8lB!KfRhO=-ER#|Ws*L*u-5DdeE2wM@OetZT4GAmV8C40ZdCfjo z61F*2!i=OKVK_152|&VDW=I%AR^;=@<7Iifj69(yK(dqbjzpc&ozcZ7iK^uVd8Xtk z2MNLx7LLF-g77M{B!YfTcTQTL+KEhdd<34D}CJ!#?W6iEMfldAe$c#`WaTxG5h>;m{Z} zm|VFR#%M=$U${nRQI;%QYdkqWpBx%eaQwwOPWC=!@Z(pUMEFMG&{#`r_$_|?)&ydm zC@!3y{PuATzh$k}ju(^;4MLTwYk01>(i&a{Csh*&S6+$Z@8r;kS>>WbgB5%&(GAuj zV!alhIU?4g{N9+=?Wk}yK(X5-Yed<$;{_B5EO-)=%66j9^OWrxh;^BC5Tbx=r0ZdP z#^Q+1g)(7r3Y#PRIcdMJ&nv^Fv7KV@E|G%{QM8X;lVyo-l1rnFrb`RqC0!K!wFLz} zU=oz8g-c_Pc)r4=ae1zQutXFB(nmn}hk#HP^(@<#fQTzV_+T77N$38ok>>Q8fb6G{ z_660FgFL+%DYcbtVzB#jRyO(T`-R7=4|F?MK&E?Ql3X_hBzj`n(RK5j1*DJ1t8b52 z5|FEu;hGQ-B@M>tDV-XA<-F%2@UFQKU&NrB;nzS1VbwkTLR_=#rYyvpiC56{J-7#@XS&Uzfh{GJFx0<%GK#JMk=;HezzqaJFLYwiM$MK|=xEl#n3SuES}oXXC&| znvX`T-MzW7cFKpCV(n<=v3A`e*3PYJtewsRa!#>!T?MfzM-x=;6l>>}qu$(d)SFw? zSUX(@mvNvciLrJwyV(l&6l*u&cYt=DN32~pj$apy?cS#uYbPmV=ZURO)}yD4wF~vA zr@n%hdgCK_&wA@w9`$sb$J+Hc-a$Z8tXDdJDeKA`)l8|;s5~!ZliKH=DvjFm$$gz5 z!nFpnIkUF>vm={=zGF(+kHT#p&Dq3S3H-J{T77ocZ@c3?rb;CVTD{}VsnQ5bZ9NV6 zU9FwhX-x1IQ>CabKkk4-U-Gh?yQNp&krYijrcKk9W4fpBTiJHiq1cjR+7885;h5gF zpS9tbUQdqcwUeORDB`ZK299Yvyo>Cx4x2hsaEZR&&Du)P`cW9#JKbRw-4Xa6or$<( z!*-Jh2tHu({qB9^K;q5GKVxa3D9`JsEA9p({t@m88bDS>BR74K^FPRn;VWX>@k zkbLVYlX;_B(${VTz#mzx=m<^$-5l-}}+83-5H4D1qX6ir8F`s@~}b zlA?ey#>b>o^=C^}{a3?--~3i)FUl>tsBt|`x~Qj$maF2u{9F4FC1x*w`^l61Ve;Ef z6|=%c-JdCDB{Kd+7BhCW7BexIqnNGC5HnV5yc1=f*v6=o$apdN6l&{;JF4Qz^2lA( zhh?5vCX1y0JQp=Jl8@$GPCT4}@l*@gf$f|x?swq>dd-vl~9Sd#G?RImiZge{@+Saaw zI?wd2&r`ePwxyrs38)6%IkM_18y5Dtqy<&#Pn?h`hAw#@V{yDTNkT7`Uh4JyC1WLL za#mkL7AnqaF(}xkRL+_rJ9`onlRW}E_Dj-*63;wStOdq=yguvsG=YI&$U0eMiXCd? zlfZ};R?UpQGSp^S@(VL0E_$4v{MPB@w4Z3j1+NsCJX5R-2IPYuLo~S;s=;esHL-BB z#;^pYl>`RsUhb5q5SV(mOM!{qo-Z)-`&<>6W}hW6Ed-`zfiV!Wgmxi|C20U;y5*T- zp~sxUo+2vzl!BXn^M%9u?EeS;24q zkZ3?ooR<+T+U$vqpFM*q6^~1ZtsRi;Zwc-s&0oBsnYW=iX|XxwqP}EUM;i*k}Az-YyS+Cwi+@xQI7GH+czPU*aJ&`ur*NvKls`O_nmldXyNpCl|{MyPtaw zEq&2jUC#`=I_WoDt@{mEo0(xR$^9okUw3>RfQNvZRlSr@c&l3+mplF@2XCF>a3d|{ zM~_Yc{6JD9qa6w629<;oh?i%EHI64g_k_1vE;u4c_wB9T;1B*Jg4B^GYqfNjd2+w$ zftV96xN0CK@m>+6Dbro%(I<|@%t4x-&>2Lm0BNexCp}Lp{-X#|nbv?bfExSqR^Mih z+670_TjP|SsMS(Z+vtL8_zpLOE~%zp#ib(PGX|?Pe1~ObSi4g;6hWHzdPCjSjdEzI z3e!YYQ1+UNdnluEFIn--ZO!G6Ji9?@m|ITu>{gK=wjC}JtCovgo)}ia2U)vDk+?`= z*mm7nZK0FOk>D{a3ZcuL)z>*L!9y0MJPT*_esoq}mk(sbWFG#X|7>~rn;+d=I(g?b z3%8a6jk9rQW_c_}Kd+7eKwxq3Z9Yb*N%^|RxAoU|#$VCL?)cbuAT_gZd!LWZ(-R!C zoA1*(e(0Av?N?H&VF|(#f4pZ1^yEoT`gKVo{Y(G+`|_+mK|YZ-7K>JXJum(HyglFT z2fD#SC$&?tP`vSNR-F??F?DeGt>7qxPsNg>5##?yEAa|=&21s6=;Ivt(4>Z5b3ZW)98lL>Qa-Si8<96AR_q4J|zxfy12f}70-W^@`deW-yQdeDqo5ByR z3cqz?;nS1N52$ph-nGl#z2}Qj=-t%2_wwG|GF+@4o&08fvNu1T*PFLKW^aD1-n>=m z&5!fmyixQ<0Oi2^q&Y0Sij&_k0qrP!yV@7N(8w?m&K;Sbs4s8RmySm!>%6)0 zle{-Uy^)<^(U7n>Z|uX9C8TQe4NWv&EU#JF&>gj`pF~0EouL6F#>jwVB+5d#WF8jK zLCn^Ubl_qZw4w-2~y+fC)yuK(z^N`y_O{#kYq=D-^9; zMeC?&-7i`Xi`MH!>#d^ocF}sLXnm(>d6u~cQKHpnOOucJUApzt;)xmzA`w>;!-mCxZJ_c0H- zTOM+^JmhY9$ldagyX7Hw>;0mC9&#V^kh|p}cgsWW))Nn|n{mk9j6?3GhCGeoe_S^I ze%bs_%jSPpHveJS{4dJpKPsF5b=mxH%I2S!&Huh^{*PtzFUscsQa1mxZ2oU$^M9v# z@rTa;+CbwElZ1AmKL`xEpAy_+_JQ|WodEC(&Cn-#Vt#VTb35LEG=$XTHN~Z zMEvBWvLy{sZF(Vj9;#CWAt~LKm9A+cK7zZ{M_52aA>tgc-CQw~#X?6$=?Gj_xlcK= znT~w*%@vgw;mA%pvi|1EPCT-kjyN*Y=NzUZTW_u$#&beC@=zw1&$*S3Tv0s>A2~`# zE>jgF9=V^6V8-2#M;@jl+i$Ksj7MHiN51~%%IopSTj|Kon=5a{BX6f8qc>OHjz``} zN51wZ2AO~TJL$-sH&?zBkNhAVxoTrc&;DLIGM3WxRXZj=l z)xm!n&-qz8vis)B&*G7vrz4oSKaWR#k&Ya`x$=v6w`_^bm{Nt%SFDlOry3(sF~kX#Pah@}uUW4(pFT{e#`M9`X-pp`RAc%up&HYN z2}NRc-8r8=OsK~6VM3+plTUCa)Ka`^F`-Vg7i~f@13pCjk#rJJP0oO47ys7j&|3nV z&A-wPkyTHt$`536xBm9Y4e}42^qBejPx}LA$WLWz3mu&PHEWx$e{bdqEQmVc$1_j( zIh*DIm8ZihWN`eC;(@;dcQBB~<%a)5!H5%%Lj(WX2{2J0VBvcQ+1It%_^ME@v+Dq z@qGDYS$k>GGuin>u6ZOQ6UN&9|thU&OD7!_@CT6akeV|}Z)iHobnUgg{`D`ge zf;M02yPRZMeg_B}zxyYD`qzm~T3kne{oTL#%Rl|cjqk{inV6q(Pkl7Lqi%l~H+P%l zJmN2i%u+gjuvT^mB~E(a4xvk~*~0$%qet1bKhXAayw1@+mCk@2I$=*QVjZvp6Jd#A zJ6VDNcrDV3x1bg8LV{yA-{n3%(^UtIFI4_9<$}f=3}^=>42B1Gr++Z=09NzL*4IV; zzZwDUmflIMTLTg!%2mcMXJrV7&@gWW0mWLXq0aKbdHKnvT#*Z}&M|I!dK%HTq45@L5jPG(3q7iVrGTjwcHiY$!pYkVy#$1m^!af{pe6in z+!aLcQ`~AP;|JrBt&1_H3g6C|1L6dTwZtxakKtjL-4&EXz()L7J9z@I-8%UTMvnjd z@PL=8WA8#9)w68jkH9a$Q?z-gE2r6&u;UGWxc^j9i=72 z=W#GTggvNek!=5L{1)eM6Iu^Wq;&2dj9=3oj=p}&wNvY^1T4ec{c4GroeP}tvf|3KvnIEso;L3vIkno=^w zt#oE2y7oBkND#hT70t083&NaR@pQ{i_ngD466f6TEZ(vg9_YjyT%9}s)JF_&0SGty z#N8Mq=Z}nOBk2vx-(FD8$aS1r{L4AKN1De@C6woje3{<9TrPnn#CcaZSF(LLlKroYM-A;#v>K zaScZz!|^F!pFH{h{_{UuWvgRNqIz*l;h0~~j){BZCs;bAG8v-UiBdAHaQMSD;&)IJ zc(Q)?yN!4G3x=?kpv!RvU8ck$>&N97QWn>&Vg`{Jg!wbEX31XHz*!DrEEQ3pasFIB zbL>u4b+XVlRVN9)w4spd%rqpZ&S-2@4GNCOluXv3H>5##bn@eDq=zGzuA)I{7aA1T z9e-}3W3N*xBi!OwZtB7dYtUD74a%!}iQ(fWwBE`!=mXvCD0_`>ND?XWxFYGdeb&&R z_t2nxCB8P-jIx8MK@SQIN^KoI<|m^;^_G$v{XV)As&@potviXSmF`Rx>z;@1>=wH7 zE$L3&q^0hZpfiDAiVF1m(!mT&MQhRzg!qoNCjNRfytJmHdaX6Z?#8rAitrhV878(kIN%s@~#|p~FItNf~r+35jjUVmgsiaQuR!%!)6%e6e#e<@Ra_nq3rn8V*qnyJZxdfKa7EH!nhr5tGGNwZ zPDo?(`j`-`kektzzmhEa?{X4aaOxuPx^|pe0CWSk1WG@_xkq%v?|+*VkJnDe*ARh` zL;*1Ap1 zcr?=*q>OsEIlb2HNXo!9+3fan*njR2JF~;YoF(4dyel@@?Ih#aqEW`%(`CF+9f%&R z93|IXV{9{0sp`nfymHFk+lW9n3K6>Njgi>Whnv$!yIOcW!6c46u~>jv=)X6mp{EcBK0 zqX>r%3sYy-TJTAlIu&z<#m{JDv|%uHDrS&Pohvm{Ct5^RQ)lyhQzzLtX$4_*s+&61 zMPOm-JYb90;yXi}OdXcO(ytV)oCt_7;GCxi#AR13 z;G6~szJPOH3^<29exax!vL_IHVdH!jHcrKk$!(m^1kR~x|JS1{bb;d#UW2WI^_nKUK5$Rt0ydd3cvsB|TsBA>KVUOKmyadyNbl*7#>AuIX zMM^_~bRRU4ZnEs@)?K`UxoWIz|BCOPar?*Xi%56PoDK#jVN8H@&sL4sgk^Hl5tIx= z+?$}8gpY1N4aB`yK-{!|xQ`8S9|Lh8&xW`g#klKOaTDS`v`Zfka}z7ZH+=z!`}j); zaSLVMuR+{VxD9bPgd6vGp&D5&@SOfWuALm>mXk*iH=g~ALflul$Ey<%_ccS@xPfbe z3g&H11>NXW`1c*)?xAQ?>*He>T)|X%1^c1r!U^o<%fu%lVVBP~|Gh-3a$?&M+3|M36V(c~Ai5U`EYUY8F^cQQA$9ciK;oMEc|^Z#{6-{BsI zFbcVp=UWOVJRG!>GduVpD3fkhDw&pvVdhN`M~L3#-gML~RCPu_m43+t)Y$Qsf2sFa z&QbIB_#6&-N!c&8N_&LMZ;lc3AVRP{hy@%f(8u?fo@KN}>FTJf4!VnMe ztF>@>wnT=qk4?TnJ((i!YGVlPN+b{nu^m5o=L2y@PW8a}4gH$w_}hj5LtUwyPENaZ zJ=xFopI_jdiR>=j^2xG(-FH2?WuJ^wenArUvgSNk2D!o#;i!T$WuK z>U}^k;@h7QNejc-QZf8M8UFiPX7~w4x8vW*L3I)qH}=zY41ad#JzmYLQA1o46>Ajm_(~S8C7$W{j+DWxyv0m)Wc8jjo%O09p3+I~ zLz=#mRm-ZfK@i~yB}l&MlO6RI#T9dL`!`45g~+kqT3udV;=VdFlTTYel3x}~TIL%` zDvRYwk0Z=iqJ91J%*P#W@6&a{?&(mX)Q)}L?iy>h}D7yt4UKR3$A4 z-<-q5hv7GLAoXT=2c3=H-;rkAK@FLzdOx)JlZPCQ?+>Mx92_=7Ej1LN{)FBn{j$bn z;Y~wK)rZLDO6CQ7kTE=lrcB<5yAI#|HC-JHzOO( zJo7dSEZ?-Un`aq;PD^2*l#V7MMxJ?e7el?@6A_jwqfCZO3&eJfXTC=wiO2^XAvEmnknAlLj$a22-n5B?L3+epD25%k04ESOu8!z%0b0l)k} zrWmS%8`XKF_VZULvJY&#wc`cVQUUh!&!wo0NoTVfq(C2P6MO03*vd3e|_=H z$s_>%964iz^+@KK@AK$sM9FC2FJIE?9h8RCqbk)8?b6$*=(gDw?PO3MX9QH3q%$5A z>=d`!V=bmIQ?^AYRq1lqSI6z|^!>axXb`L$kpA@(*xCB%nP-mnRNQ~!nd_K%=6aSr zbd~fI>sQV*his|!huprJ*V8HH*D=4V6mudBm{b-tNRhiphQtv~<6wpdQFeBb9n-c$ zP|c+2h`MZ!I2j*jhfltoMkt-E$!mA_uw;1quqkv3|aCXw|_&wyUCO7Vs_Ak zV&2i>yo(m~6LJiSIaOl9mgtlRi0F;8?4`5u5$A9dS}&smSHt?j`1f>&qwHd@i*uSGwZs#ihB8`E@oza3yL|! zUuPEB_2OfSIhs#vVpO1s!?8K!8BqSn6B6|egn)HwAUbZB$%Q$ston?n2eqV_V^=71 zei78skvK)>Vd!)EqpTp+kUPQ@^S&OBI0{LbNM>69b>nopryJ`{zE$EfZb_bUok+Uq zk|x;=N8F*=Cs`A4lDqswVlMG3osfBJH^A`bAIic>WnM7_NO$N`V^qC;lLvmYR1NjM zayn*a+1EEyUwuKD=AN|944!V?R}@N4*6xdfr|0IwWNjyuVVp(Q?rZ*vF)4Q*-wN@< ze#u0Zyn-pEoVnRRAv!DX@C4>A4czB&#T|czj=xfNJf+D}|1m_Y)AWEWuzJc@-0^bUwfq|4L=1zB|q7`1Q@RFNHSY57)85Akz6U!C6EWO&u_HE<}+DsJly6PM?R42=} z2*o3G+e=a%sLt~!=69t*ZRtMFcJ*-A10O8~`rP8~vI~--d$2T|6(V%amLD4>i z2E8W@ItursK}XV{+v@5J4LbT58nhoZ=z%q;-cnMdqL_bLy0af3g|7qbskBQbbYF>6xG;W?t8af&L(tT zE!69-m$P=fpj?OB&l=*yB8)vAp{(2Bi2{*|;HCpsJK4Ut639-#$2JF0ZQBAKwHCD# z#k`%CB61myv3P%vafxb5`N&u%+u@$Acb&&lsuA4_1KoNMUMhfhplOB~baSKpjx#$B z7F{olcv8>B%#yb5wfgUA4FyeM$q8K58FosxU2VR8%O~E&>ka9h75{1p>il)1R!$FuL~e!AV@jM zYOb0@H6!hymiaHn)ji5?^6)oj2?%-dY65aI35YMK?%{GnZT>c{n)y#QS~Uz#Q7r>g z%&+iNlsoiOrRTAkmbRYJOk1bh>$AFTGp(|gucvPNf@-&)!`5>E?#nc1S81enLcDi* zS8Pu^Nyf27ql_#3d5Vk|1{d4Ret2DO89_i95pP5<@%}Re!@JvCP|Vrnwreu4-LK>X z+xLKN=^popn<1IYF`fZodzUSvG(}BbwTIkhd&xF3Qp`W5sZ(VaVoy{k<_lAYH+lYM zabfC&3vUn?rVbGD^V=XkrK!UvywF$dS{J5{@rH$|Q_tVBFm)ED&Wmg6m}36arVhLQ z>45mc##z`n&lvzk7dFnq#;LnQzgbeu7dQ?G*#gJGCDAT)#%GG- zm}36S@a-nAl>Ag6*x`0eNp%}gDpJe=izCHcWQ*u31Thpo`+9&y)WEvsS*jr2yF$AA z6{K67V`#%A(mg1VZfYKXK9FvZ%jr;HKa3Iz2z&K9<8_?_pn%uULAu{&*dmHoAl=6` z)Xzw_JPVxo+BBrQ`0g2zZeHIEq)0mQx1fVjb4p**gMZe+6Lb>QxyXj9wcV^Pf4#PO_B%r_&&d=rX!q?N1CGfI%# zM2a^4A1K=4^)mON=%93$Tq*a?KooLmA8m-zyg@RVSp)PEgQ@bHrHC~&NR^2E0xT&?GRYTz& z5A3C5ob;Rn$g*uQWf_1UtS$4ZcvNxI>1vap9@^%ECT2rfiAk!Q7aT7P3J}7G zyd|(kqMl;!B)9uev~0-L`io@Xk+Pkb@GzgKI0TeQPsZQY2W(b-sOnfygLUjJwZxEJ zeRv`sEL}L&&kzam!vo3LWo|vb46y`l#zEbSg$+Ki*ukxjPL^Qca_6CQ5Xzx>FyuT~ z!?M7FSa?kfseYVn~QUApB;(M@VR!4zKN2$WXFMm$o77dVhYL)n?~OW-_|tMAnI!p!kGZerjX8RlmyeLkCsM^3ckGFSOW!L>MZN0 z+sB{ZQdW`+X1HX=c+y?)*?|vt}OhAwfu%Qi`)kqPV2F z_X8=C$3zpPVm$mALrR94Q|8SNtGs!phC@LZV-2G3@t*&9Pq$MX1*5<2i}m}HXaB@! z|3qiM#lzu>zrd`Yb|WPvS0x4)FpU29uX(JpzGSx(9zuNj>XP0xt-R=&su&K-DuxQA z7>Q6z;`ZaERK<{%s~8URDuzSZfDhrfYr>RO3|qbeA9A3@6{7#r3SV8?j4f9&Z0Uk{ z9k0D3MIvcditdNuYa$hO`1+xaP3v3C=((2*2l=JotK!Cx?Ea8_13D(nKH6`vQplP->uyY&04E2C%qsk z&mIoPm$h`uEbm60id?0Llqlf(a!L$U%8k$263FRi{37@k^RnL;6JYuseui2O?`W)f zTS!@;cHONdND-@N!{7eX<>hasx^_1>IHj%~bYaw}>Ojy+b?w~B>)PEA&x3DcT|0kF z)U_Mb>e`Jo@z5)Afp7xv?~Gs7!ClrI-GLYC+wvE3CWW=AYsWGx;|awp$z9a7Berl+ z*KSeQE>-G_v7cHCelA7wx?1SY)cR%7dcSD>s%SkfT7OiuJ}g>KmW$>em(AalP1PJa zxs{g!(hplBy8xS`U)}2IE^b-xmzA`w>;!- zdC1-Jkh}H7gX?A-ayR3UyQv{hqq(SSxAL~$i>1XaON(2U7Pl-dZdqE~vb4BmX>rTa z;+CbwElZ1AmKL`xEpAy_+_JQ|WodEC(&Cn-#Vt#VTb35LEG=$XTHLaV)RrMpI5 zI}oBqT|2@wWxsQu@1(1!boZTj&7sD1b2c-2qRRbis8-SI?SJF3_< z>e{g(|9QO6FVcN3QrC`(d5yYuRJ!|ByiZ=&jskU5x6+g5b?si7sB1^1yJlUxdsFJ# zji=PLd->_>+P&twc2u;BrR_*jPH8)W#i?aSX}hD-RNXERUF4#6l(vg??I?4XorasI zDrZM&yL+c$d>UTWpI(p4QT30c56Lr*8A4l0RTj^J%3z zb%W#Cb?VZ0)%*dmh8;L@{H~TiAbtk`dgAHW1nDM1t@Lbr=Lbw~Qk`2$pF zfOc7@ZV$i1M}h@oX!jjEO6qm$j`Sj$b?WZKS~;pyM=Xg#{mMFZPT4^IfV}iUs#B*L z82lqVh5QWoD|j~pQZ;}LrQoE=I(66h}I(2kYxsCYuZcNhe3`f)J)ZyMub?Wwj4AY3VlW${2ox1CC%HEi)Q+Hhe zWTj4>Pf2y^6!-)m+jZ*fc9PQx=ty}aK$ZzbT*jr*jj=|lPTk1)1L}3^bnN^(b;sXT z82`LFb%e~?KlD1mu(>Kaj(JtXL~2sMyLnbyjT8uTGtBH-8Z3 zJ>hKFM#l&s*%Q|&(FI~J&-JYB~pI)6h7TO(j92%m~aj8z-4!X?++`{>F z>JFqqZ2~0?x;ImUW=Vr8gUZoa$oQ3e`gv(k{Nrlol|J#5pG{W!yqRlIs?&{eaB~w{ zFQ2H=CmPf^%2DuT-mhKBLy`CasC)zp&PPJ=UqqwI+nIj4$rsK50ahk3)r@bkg|f68(+-Fx6`Y2>hhHbkAI{9Q83dh59K}c8eZF?R?e+c zhxz;p8H!`(S`H~;RBmxwD)3Sm^SXlAO-aAqf0kY-h-!VpQcvYlV79Yr#yz-x$ z-%!-4D~q>`Vx79kZo%f|^&z-)sg@KqjFdzGJ96qGaJ!mBfGvTN2ym|I)cO7IP^a$B z>G%#JK!lU))Rnt5@>EctI}$4gJZ+}Ds6(vTyiQ$A;@hZGxBc{W>b7O5RW@>;aGkns zClQEs>bCt<-iv;6b?U4kKE7NlIfjzQZUX?Y4b^UZLcHN-Jyo5$Ty;Qt=!APB-jW~a zEJK)7r*4fETuFdIly+y;sgs<*O3CZg#SGV2f00nA{ihk0XquY5Dv7|XI(1KD>da0e zurPIalhW`rikdG>9i-H&?KvC7g{kvmm^!Lcm+LE%2rNt;bT&&uUXpiWE%@@7I@LvB zVd`LwHtWUTaajpo=+!SI%R$UmGH&EHms=I)5>a}oBC2IoZ7hlQqqbFRoG z;^4)Za89lKR~62wY5&`05`hJd;|vodW&a)?xdo1+S_PkmaZ?l2Dvp!t)IB52RjE^V zE26fyaDn7?>Xe_A(A;{RI>69-bL-R@>2|rY`xT_S3;!>Bse*J<5(n(vDBwsyr(Cd1 z?+#^5z)?C`1)F?fkZ$scPKN^TlVL-UGfCS|ahBn<;{Ztaj$$L_b!{oSl$h$g;vcOs zBl$XEj*-$()TxWbE-Fa(mAp<}Rv_IG!nSHmb?P#4R@zvARiyiARAW)6t|oC(jVlT1 zo~;`12+K6YUDT-~jlk)cl)D#)xQ_~mn-)BT`|uDhh5PtK?kgU0I>bG`~v ze&Qm`hl}r@Q>X5Ws2UZ#Tdz|Wh1+%N8o~`*wJ@g;%}y9Ai9il0T1B0@S5+5blvkm8Rf=;rPy{R-R|uBcizzdJ!jozKj4xvt@o^DGd|VA9 zX4jUAUnygNE_pq)QmHhPHh*{W=#=}XnsndhLBt?5*8>(J6|Ll?Fdq>TSgc8xS1X%Z zlCFAFvS>4WEj*GujY6$wRHEY-^{Z$$IjSH7m~NOV(cL0-agj~|dra!wyg2DVJv8}h z`j1ck>aPfieS_PGhPKY9*sKKNl9hoWjHC8_E~WKz{pS~9-NR8UNLO_JG%^kd`#<^J z((iLwQE|@8h{yWYsmPj~k*dq#O3uglErb!8M*iM3#=35cQCK<4xw0-mmj(u!p|vS26~zjP za_30?N?|VP5}kj2{F0VY{^`FSxD@V-5nL9a>w7?4fR2(jl>&5(KhLdSQhpa+Z$T1v zwYiR7!cYAQrc|3NUIdq6pCITY4Cf|M*3T_9m%oSC@q$mhi80PM_!zulNjmROH{}hd z2^62FR#&bvh0YMrQT5&aN8fy;C*(cQQPQU1Xf>@-1?BL`E58C6QZ%uz>#r7nk;4Lp z+W1Jn^pdg-xS$;44yDgS-yT!qO!ui5lsk^e8>siu$PeM)R6)5;QBck)BBUktBhLB2 zWirAPTT4N?V{W1p5v0&)6qI9k!x=uIC@6Pb(zzKQWS0+e48b4D3(8UOA{CUQWrC+}k0OM~LU58KLVvhAXB$dtwNG`pjxX4JwFNl8xMTU$cYyv08{$=QspaKvc#nYF#_rDQDl!ztup5aYh~k9 zW$s$N%3P|duoJ7ysai{_GPl#HGIx{A2uRQ#+7(iYaKRz8l(NbkDQd>b4ic-(frq^e z_hd`|V2M*QCRUkSBmQPymAO}V-<66?brxtd)qkwW)Xpn1l}^5A=JBu@5r=1@%ADp9 zNr4u20@$!n@NQv zwldh@%_?)RMA=c5IR{}jbBB56MN}kvLqctteVpw}lTrjhx24M5Jp_(+L7t>W5`S)H zH`zKu7FUg=yXwP*tIUmEW$xZt_VU^IAsk6=LhJYP8c7ZgJ<6yP7hZ8NMK-g_+->Z} zRq=k!;v8k9aZ;7JowM;b$v}lgbEvMOUcRLcLJ)rkg7_dzRGCB9}`9mhlf|G1SKFD`xg_@x>DC za{9%p%&|^ipkC7O{CY|CDs#hBFKGze03{J?T3wIjOTNOJ`bx>Dn_p$_D`wR7;{~T- zm>6~a$f*1HRpy3g?48iUm;>mn#GHIiRpthfARY@wPgI$+v5B?}w_}w#<#v>|M8(J` zM9sc!s^j3qRp#!GcP>_CZiijG3F4|CQzM9{DsxqW_>OfNRpzw8m|A6SJgv&yHAW1* zW(et%sxntsoofw(ILo${-8FQZOSVldFckIYpZ(^yQW)87X;7O>smk1;stviy+)eII zyU?Joq$+d!;U=Lm;T3+RsMASBCh4lY${Zm|*uE@$9HUNWsxtSwtIS~=Pz~-bJ8^D8 zi@57XozAr|K1YLo0}blPiKIavNQ1702hyNxF~o+R&(NT%j!U$HY|9I4&=;fh%0ubS z2UXpfs?6Pu3Up?bInrMOXEmzKeNtNUxuqpPyl|DdXVIEvl{s62A75)WtIYX!&#pBc z8gxOe`Hfg*F4vk6#FN&HwK=Ilg|)}Dey3Jt4h&ehjp~|d8zF*twaOetz)!OWmE5~n zD8!N(Hb1Y*+->fAyIjuZo9MSwpq4MFR+)Q76TMnx?iOfZEi~zXWm6_FjsU^tZaoYy7qEGy%3SdsV^pa!XCwY;s?72F zB0(HRzkco_Rp!1`C5ZRKex=Hs-@gjMvk#-J{gf2El+F$r1aVcFTg$7=4WN|gDR^n2 zZW>0~^eS^>9)3JaK$=zN#z{bYK{W+$Zm7)W#{<~#d zbmy=Aw){1@EMcQyMTDTx>I)f_JjY z+%-mz6udVtkb+nFf8%C|eMlmRBWyWAye6;OLkclx8yTz2eN0oQ$_-qYItx>W^va*y z2618PJl754Q<^%eGMDQs2;vJ<$NU(S^Nh9N%VX+P7lDPTBZ9cn2!HPYbbtVYg{k90 zEV=6VOidjV#Gl&K0WX|hW$uNBb2fz8I4KGQ@wN!!`VZ;W7jRA@h%ewAc>uBnoFm|& z6M%DYx)(MM1o4H9^BLMW8=-(~a)NloX`q_zmERf8*~2fpUc~!H)Q5$}&RY3pH{_R9 zRSw8JUHPMWD&-*;W&!6U94GCPsq?-pIKJr){Z>g3U*I?kY10O;D>i zPO38Zj4)TF${c({v7&C_mCLKl;V2YATx5%gT)_?;gU`N^SDC9|-Jq4@3er7MWo}JK z_x%de?Fu6i>4xlCNm=OP7;v%VxRvYrQTDAv16>o+O(xt!J`Onm(tUUi z()|sFEuwe@(tUpt>6T}K6G>5%VrMEyck$gbBHg^c8A$hv7!z|<<4qC7IqAq{zHo8u z0dc=PtIFJckjt{l+O4RAnqvKhPWHTP3Dq9HL_~=!`(Sm=I&hp;+8KYmSC(x+&2wz!`G`p+<4cl zsdjNe$kTS16U28SK^&rFogiMVGG|hF7Y7L1Pj*8|bEb0EyK8tfNEQQ$`A0O5RAo-t zSl3}wf8E5hTV!7;h|#Jux6WLI)tT3s87WI{LSkxCSHaC?;J*YBm#iEvXM8)M`lJ-Q}9Y7&<5iiUvm6mg! zOL3|pmNXgXfx2HJwxugd%Jr5OAgpq6b$c!?$Ae?W!Ss!~iL8>!VA+ion(hoqzXy{w zewP!tA!DktoH?0)LmzNf_0hwl#;(}3*tcSJp`x-}2g0!U9f%5uJ!Qm<~CCLAlv zi4EJREZ1>mxuPR*T$+{Tcq(yvyS(Tf$*F1GB6at}F|^@PK^xX-MP<4C8WxkBHVh-u zv|${n4cajE0QD0(VM=AW9!rVl#|oqG_mWMkEaz|mA|T@Xi^bX6kr>Zp(CfiZ6_bGd zjkxUHNR{QdjxhOzC}RRF>;jE6cs6_1Ju#X_e)YC@yJE{y@s3T3N1}X!6~}Xm4{u zh0jj69MFMKYY=^p_x#6ux}5?dB<{Xge4@#-Rme*P3piVq*kf^NP*W0uMw&x2u)qUihJ~C^vqJcB3>wYyVJPSPr8Ze zu1U#dPBx-INpF3@w@-z|Nf_|D6V`dW-&&PezUANlhx%F z%G>giEo>uw>?$dB=iRlHeKgF7)r(}kt#|5VQNrFh^N2N=k3bgxpa!YeofMSyPmxQ7 zn;{H7@bco=KH}=M4=0%_XRSx7CPtLjS`tNit(7S1-K5|E)?tDJ=*$`qGdjg8SlRqr zpksNj`_*1AtJnQA1a3;N-Q6SBXZL!*;+4AnXXBfzGVw%CL8pHE$&=g(7;Yx6YrXS& z#NM3FujieoI%ci&$R3@?mQO=o>pU~*xpY2{{(0V=$4KA&Tg+2uaol(}YaLMBdDTIS zRKGmw{UO9}UY@z%VF!zZr)()kvV-!V5&ivpNH}`uom}g536VmzRJ2Z^a=L}e86}mY zoWyY|qYso@)EcLc#&HxCW~MX_XKw^0gCFS+Yn*LqoUPCogS;O#PA_Sk5fgVbYvOJ- zG!6mfOHv)a;1p4_k;?&vKb}8#x97~=J{qTW8a6~OzQWvU$s5n3C9><1{*+ za^YY%YyOlPCnkiS*>P(er#4pnxCU1MneFRbPgXTfuc0UDHF3UUHpH!y|A4J4A&;x? zvtiUG@aIJQu3(O;M-a8&|CB z=XMfnak7)kC!Ja+#qH&+oU$Ls?qZ#sP&gl>lfr%-hz?uQs-DF+Na5h^b!B1&DV;3; z9Vr%OZZ2Piq#<|gA+SG)>O{C$0N8`aBzD-=#YDI86nLg93+ za5~spD4dwlm=wD7mb14^lLse72g$@CmYm$Up(BOUi3+Ei6i%NB-k+s#Kmt+)ifAeH zlfv-@tjvYNAvXI03TI=E!XYE16wX#uI9(J@d^9T@my{^F9u-cb<0-&sLg7eBKgwoy z+zQ83`CQ?2rEr89Oj9_DXsjA$%46A3I0(kd-zg-aP&g}(bA_Wi?{$UKQmDE9FPWcI zHsy5gfsdhV_L*osm3-<>so$q<1ZpP3+xsi?_4facAqXIL9vT4m$Ha(OL8IzN;=?&2f z+L!Oy`V&t2U1mCahH#1Fo6%CBXqoUtj!HL;iQOEsTCZ#4h4{0JV}sQ?@Jz&IKY)97fZV}UNtSnsOwG$2Bj5Lfs8q91;P)m0`}R4-sF#U09NhLSe?%_)iBst z;+F**wipQsVbhtA5Vwqk^db_Xv$T~J60%B{RjZz- z$gkijbghfqyA{5=q;xGDb8-7sT@bHhP&V}>8nD$cvzr~9GU(h(`qfJ(CHV1-zsj2f z(7C1^JR@r3Ro!ItzaC$O@SashKjUlJ1Ve^M0~<$)VLKlH;dFMGCGx@DFhN$>39C4{ zN1Zdqs~Umjla)6q=Z97FMe(V$09YSC^3TmKTmoUJ(Ze85S%i_<;Gv zKUPGX2xp34*NS*4u85?a@LJK>JJ;P@rZ`l*rH#GwrD8?I==6#>Kayi!O{Pn%h-CNa z(xFTL+LR>1B^7$*`rL>g$0#>P_~D)I_ER13!S05Qs`L2rU>08+D3x6 zS`j)zh0s-+QN&hcRJXl_~ak_N!fBp4;_iz3~ zVKS^{f7Cun`df1R(_gRc2@~RM)KGz zDNS}H1dX4Ply3+@yDbFmE*kjmX*hD!Daqf2pdBkIj({{7cm;x%30FJK4pHd0CJ?l{ z%%OWAXncD{Gb<6a!#I}`g4SWg)`Xz-m`pK^MK2t&5ix?+F@nY)E{C|U$;4holPTvC zTm(VuH_Xchf|eIRWP_9@(|iPNe~x)c=p6N6B7%04N9&>xWjRkVFK=24^cZs2kwZpU zDeBN)xu1=8F`OoE#C<{4F1~jDF8my$m?U_Z_Ypzc&F#d7t+=wh%+DiFA7a<=finwH zrO^VZWy`XxHX+RvyV7dg<;CYA&ExHppl^kj8Ax-LO%9Bh5qw~z>Em&vyB;xBoGNBF zYegV#-vO9f)zIpp^9S1Zu<2+~f|Oy*&CK;^W=gs>n=s<^5&f0PFrbsY$5;WF*RqAS zwR7PP*^P7$_B8P>njwl}K3N@;mRWcr{Ir%pEIsHxQ;Kaa9caS{8L?*ZVALs;x?IUm z*QG{%`gAjs1usJedDo{lSZjD&@$m5bflON^3cL(z#G~qMV7CkeCFIravVqR-X1XZH zg4y#)9aFJ6X;+qR3553>S{U?O!xPk{ZkDtrGYX9&-N(xA{f3MyQQpz1Yg!Y6Y%tzK zUq+e`EuI%9%m#NG0VVgt==axH!Flow!EEtn`eDa!#$y+KxXQo6i~TUZ^@_x>t(Y${ zmvmhzCN;$1=&y5m$KG7_q1U#|&~a(o~}TM{A^@f0DV2+tQvh|IOy5zi0I>@eH?>7&9#pO{)q0puHUhc?=%0#Ak;TIK)Xdl}h6K2*=kCm4i_{ z5xJr`w3Ly9QCgNXJ#2Z@{*cso>K79l{X^D8iO#mZk?vfR;xJ-+h9RQa3-ts+6-NtG z00nYGDnXVTo~tf7#}a3cu^`=97_jVau?BAh>K11Nfa9-|Lb0YA_zsVTqr(abtX2gO!l8Vp83(?o&2x3-OvsWh7EEsJu zLoR!UyufO<@GCthHJjgWp=K|(R(}cA?20tu`D&JGZVNTb+VN#qvu3uUW>5pJ|9-}_`9kCBa&yE;RBAe&# zc%AFl!fgy1o2v<6>W5orVa#s3plF4={EX10KF4W-E)A3KQmFxD+uHvwda%Kzb)c9? zmRL8q#MwJ0OTakCWZVF$wUtZKNbPyoBkJ2rNbL|ycUW4w390oj;9QWUYmhj?x}u=6 zON$qP1f?xG72T7iYot~Ple!soFTF(ti%t+NT_F~l7K79qsoQoSr|1ee5FUoSguJb@pP&1qmabv$AT>#5_upv)%Kide#s4x3q~UXvkL z`-`&IwsljlhmBqWEW z1b6T2`&M>ca*_j4oikiry!kW8T`9NT`0`26nI>+j0m87Z&k?&QJ_66h$Kx@6GHs^B z1WdH5P2&kYfElQWqCyFS(k|6zcB|AUst4IGiu6Npmhxf1JhSta6iOyF$tD&pig-S00+TOj)*q=C8DAk6aXahg>z;Ee<;HT?0n<1L>jWni~Tm*?Ip4{-ek_PJr zDnyziNb{IOqo9_(u<0di$9Lo}yHF{?;Dvct@RQ1f1Q&3(;_+!JsU4Km!0^*Lk1_~5ry0p?{XEKTOSj3Gt&U4& zKFYRv)!XHgT<>=2?}^>sPTlqer;H1x6BC|jN8NXRpXVu7B80KX84klwpa?R0keW03 zU06{_S66D->ysMxaz(=)dWPii(~G5HbEN2bY1sUJb>wNGVP~z-UqTJLA|;rRCt7uY zztpfR3k{35EXj{wRt?Lp4#T`&bW8T!q=qHZX3ilMS$uO zG*zm|Q#n1f8eNyI^^67x0b~(*S{NXoO9RB#Ez_eZSrgO4NC9YyS@VD@X3by9F@^$d zkTbYKn1|ayc8g2++&g2_=KFw87-$KNg1cY_jBuzGc{L*r)vn@DZR1d#01nkoI8;H~ zD~w#irnv<~b4rpt9S#+3SQor_lr?auzBcCUAmYZ{IFwHpmcYr$b~JER;!yY;lgaB$ z>p2^}FGNT8;=}uLdtB3=q~F+=3x~o)EO4lP#G#_mTi{Uc%RC$^b-Xlst2h+&;ApFt z>?|9-#-Z|FCmgEmb=BxK4pl)DVpj7piBJ16Xr~K1GqUKnG74_R*d4x?2AULVndHJ!kpokL6eeM*QI0fp)M#ZO4GgB*@T0ndr4R&YQUxq^fI8$`!BXah z13L6|U_`nZJ^~C!J|2&K))810ID=RsAB9l`X8`Mpu#`yAm#eVU)`h51{l|j8A~ouO z&5R&T>hk=z|L;HhfBx?K*=C4$(U!0mVJWz}hNZSjYSgI4YT0JW@l2Nh!g$d+HEN5s ztm{2tPjzJBPbFB&pPDxv9$2ycBYF__9%U`2Wy|}f1WS#g^qU-&gPD;W)z5Shmv{y+ z5>b%yD3SzdTKsbub|gHiAIVXMVXJ_q#lOWINHDBJNVEadE7XKReNaae+F!nDB4|RJ zCX?5hhp^Om;g^a{Q!l{^`KHM)T(H!Ig+;PZO2{-=Dv67QrzS32v&98Wsls9^HcjWS zqN*~}NwC!3ieRb199U{XehOC9R!x2`Mfnj+zQT(7BFhg_fv^ac%H?Op@>9Z^x%{A! z%=8)LldwLk`jfM2gJCo*)nVyFbOE3|5B3r)g-eE6AaMqk67>>{A6Sa0Of3O%4n#i% z>?7_U34-}7=)=DuP&UC*eu(AbAp}biYSx?t*uR3M4vS3_t@@^^r!Pm@jRKY$U=?y` zDcjYDA%E61wSlFGgBB}u1T1x#M@01;=o?J|t-vhz#2KDJzR|?pPAUld*&dudX&$>r zHW`QA1WT>?j{F5IHNs!SKm0{1(w2#xX8tH3Ph55z@u_KzPA(TtPcD~qvNaUFjT$Pa zZ??#E6k(~Fl1giI>2*02EH(Lp>?;z3GqR!vJPPr^f~BITsDP#X%n`zGaQf@r_6qHj zW49xxAHrwsb`DETQ>+txo~Kv^OO>oB$kP%pib!ioM8ATvRy6G8Nez2Y5w06GSn9>n zusMwMyfkcnzd9_n(6F;s=r5s$U6B$@uoSIX8aBaF3k`c3SGg~%hQ$WPFc&P9+aRl6 zz9%&-JM8dX@Trvo-Xlr`v(U^5I54#@!FqcA{d z&oDsvre=T~E({P>_RVN?eGUx}gx=GmY28jt4-zp5l3HOqOByJl4J30Ys4rlk5p{qM zAy~?x)yyXVhlDhU4dr-dcEURftlkGex&v}Pj-J5PurIudqk<=13b(>OKGdB+JRbHf zcB|v=9L5^%Q-+eDIvG`~T!Mue1FJD0v6->&6z?j}^c>BMy`BYkt27tlpm&SiPSIR_|+r?!apJE@fbK z%c0of+0aUX)wDtktfu9_>Xt5u*U7zE23F7PW-A=SS_9^yul*QU-Ew|A#?FsLDm?ZI zML4%x{#CcC;oSOhUWL;cK!u_o$F;y}E@1Q(SS?$gucro9dz2WqCr^xVE-QL9kBHXL zFBS37{Lu>gd6cV#3?|YF)VimRab2s&xRR?1glT*ybjM@fG3>KdUjJ$!r!+FfFZ4K0 zSwuoeS0_n(5>HEHe@0++*Ut|8R!udcSkV3fajL4w+1DT5emNEt=90DuPm^k7y%7sK zGh@fI$AYF*BWsbar>*hKR3i~4?K5R6Ia1~aR?qBs8Jd#Aq$r+xs*x&8Ixp1-_%cZo zG?!Cgb+-ttcB>LtJ)9C)Epdj8R}HLIiR4B!Kau-Y>185M5xOzZf&>pWR0thz0S8u( zIWECN7DX(L3X_QHJ29|&EE?VhlX>_*{kxT@>Dw`Cn)C_$e@V-DikcpiV(`phE4&R3 zAEms5_ha6{V?|B(xCS|O)bt$%j~#_^I64i-)u`#aF>3lCMonL4f++9cSY#RM%#*lb zGHUt=ArY^YZ_j9se@LWSTqVVQ0i8%u)0!zgMNN-*K`|-M2!#c_lg|`_+R%vtDx7z4 zQ^A@`VHBw-c~YJZJ?|J)of3S!*_bIL!d(*E(HESOCNC~Q0+J$FF+Xa0Uf#hGU5} zUzdRSj`TT-PJ$4FryoZKt4z##1nkgQFF-rSJ8OA#4Ja7)YSlH6lJk`8!>LizqsUlw z)bu3+1H@1Q1WT>~GCY(kDA_P9ruG_OO>txlGdfDX`=V4 z0k6HBvDzC$7mKlohmW#ShLdB!EN8N(@KV5xEDYVug@QUMYC1|XkaEPYat~A2uzWB- zThXEd106N3n*kkml~&6FflEUnr5y=`^rsvHeCy!{l3Ou_hEA-f;xW-3B-#powXt*MNg(?^Asc4AbR0_fl#YDnGzqJc&GKTO_% z?g7RyGoNh)SuQjc-jR2vF%{xG>6w|XH3ynunhG*~xs2i09>Wh&b?i@l2vbH@Ay4M$ z6|FjYMa+h_=Omy~(AF-o&aAQ=Qq(jbBvHhS$3H-u?KxQ+6yw~-KX5g=mM-ZV=}vPo ztZA!898HwwmZ<^;CW1$%8J_c$TPvXo!yM=$CKR1@d zk=P^!)yn1g>}o6tLCtmlfHq!n$*t+C6iX7VJ?ScE{h540)>ZNktedu~OiydF<#FHm zdHQj|?Z-%QY0e4iK?;FM-Htkz^HOP-NIfXJoyP-A)2|bKo~K`xc5|HtcipsA#8={l z)F|>@$th}T_G(kjqFO66L>XC!MRJN4P|fC`e&Hl|iuHM#n$7Q5cM>erY*j&3*Xl2! znq845Oilt?v(zjps}^cjXkIc2zpQE&CjlmUox6I4Lz8Nj)qbWSf{p(f8zMHztA@x_ zliY@g4T}Jf7Bp3=PJ+@3(UNraIancE3oC@>{qt*uAoQLdb;+7CJ)je^)4HL5?<#7V zfG2_HU`&ph?m23@C*W)w%NB}`h%|&(9k379X?HMXY^Ww^sVnI98kl~`Q_XRuZhhZcfxo_F~C_adP>@f$6ZftHw(^i&@I`oB^C*=lapo zgJHH7U5~I*qvNI+j^fZjrz|=i>4h^pZdhrgjZ@xhN<67RZP{yExvAHq$zB61#mttD zmqs4m4_DY{70Knj1u5gDuYkELq3P~WPnQ2*yZT88%1NFDD7Yd-D_f77BhHP9``8-Q zA*j8R0)jGpRbmS}`h~#On~%rioBBAy4Fn*ljrd1l+ektO^hpO(&OYt0)~o2#uuKi@ zWPP=G=~xhh&09jBTo+@H?TW;1b|{hG9HXTfhbZt3IMO@19Jo*DlZk5+ z(bAUo3cp!p>Y;vVKC-pW(I?{hR9}H9uAF^VNY!}h{i*A9jz0DEPV2&g^HK+MVS)Nu z#VcK`yp)iuQ_!a*E*73BE?ZGt`m@Dl1~FAhuqS0^%MR00W+*_n8@dU23M=mrZo2l= zz>^-kU&s$x(G)2u`GEvE3wZkc%8&NcQdyvv75PCbSiS1;()*INiETAl9Uv}C$tr}) z9DGVx3Zqimd&R6$idREV-8%GCiI)~iL3bMQ(v?{d0~ZYN6v#k)3IR`LytE&px++h7 z2(8NU9H{m}+7r=g?uk_KMG?~&hBErrSfDvXI#GR?83Ol2ZJ;M8vx=A=B0M-QB|Llj zMw38`E~13tct%+;by{VrRGtTFs{I~;85|uPLl)^9!KxnXNO$BfmgXKFAO7L-*(s>0 z;%f$cD||f4dNL}cbU@!w%4u0nP7_m8{Y&ZO z*=H}xDdeTu=UR=aT+LpM&=VRKrnPl!*cy>NmAybcWJy|fuQE#KGXw$kJy+Tvh<)~w#Z$D? z7wYMXc2LQSiZ~g+d@&Sl`4s0W+9?kqPXLOR+H2%dy@;;m%vs7-%XCfIYNej4Z1t-s z+pTky?Ut48R#Z+&*>25Hw$6^a^&FIKskNS6*(y6~RoM>7?3$GAR>b+Yo|m%Ssyo(e zmh8j=F;CfUf%6vy{pKj!KAvUSA5yog5}!N|5PwWnxuMU}_ac}kvu6x=THQ361{mm3 zS)cXDH#K9F#g9fEkK#ZyO*CD0qHV%4*(QA0HqmsUUD_tK>B2XKZK84BSxgsfu+Q^! z0g_77Ww|rtdD3w*VHezhMRq$5F>zu6t29%sE3^awm>MRlU!a&_R zf0bD~Me43GfRen#U$xZb{MBn5m*gRg*gZ*O!e6}|`K#9o{_4MexN^Iw`m-DPt9#rs z@mFtXPdLgz3_{|s61go}Df6(Bt+aa*>6}VuyUY7mYK)8irXt-G$1oPl%(42{h zSv%pj03P_N@aUxGg!ZU}ma4Y_#3rV}|ZtP#EIvNBfRCH;2dxQ1`5bNLK)l(ECyjB&ub;v)&=QA2d!iT00HQWzZ&#tnkqb+bwDSGjU|GL zV2Utpj@LWR>B&P9J07PB<<^~nJPHWa&hms;{#@hlK0-LWX;I#g>*+L+X*2ui&f8#Ga(g_k`Sc= zQp&t=Mc$CeVyy}hwST@)LWF1_F>)s4LbSrGB7tT_h_D%A?H{8D!|9`f{xXYIIyX%% zj4j2*QQZo>8Tn<=x0XCeJXSpCOa;kwBg;iaL&jNR$lgX;IThN@a^ac4R>KdmTs*|` z^oJOROWOW)$1On?W?9{nOi!?^ND8YpJVOZbv$s^DLUqUZW+}U-j}~?PoQjn;oA(5k zDi!M?4~#b2)>+b|M$7w54%j3y6IygE^uo=Q^Wvabln0E;wGb--^$oxB7fW$jP~MzY zs>9=9)LJ$$a`Y%`L}S!fGZ&Nh(ic~=7>!ZnyvQ93t%B1!e?c?ZYQ};l$HJB!3);8h zPEjSGxCjs8B0PwTaCF4Z?RIk!Zge}Z1Vo^nhGTx8=jmEi0@`8`-b#Aj!p1~UCT23A zqr4m#vu34xs9mXqh`-XbDGzYmYPihG-wWA`u7-2hK&~`ZsB%i}z6-12{C*2HTro}O ztmR)?HOzyfB15>C8s_YU8rIG#-wl0P)iA3!`KWR=%wKgi%z@cz7;9msA;TWwGdE-~ z>8pm!RFl49$N)fk1`SRo$goW-hEuO9amF)SF?j42Rt$ER?Wxb96=Q?Bm_GbfpFSLz zIepmXMqVtH+|7&am>1g-heE;5HtKgUlVQ;IF}4L~g!XtN_cXNSX^4O81AP1j`+~jz zEVLS&Bx6+$(I=WaR8nQgqRuwhTQGfTb+pS!_oBnHMX|iterWn^2x~e6+E{EMb zV+NscI3kp^VwIlba_F!f&adEMirf`$+2!DtT@I_dAYLc3sKEc|a+ul8P5?GP%l7oE zd(q|4(T_jluSz7ib#yswV9&;f;3X(yhHyx}UKJdT`1ZmzF~nN7YoS61LlH;Mnf$ zDq}`qj)J7h|(DY%umbxRp=n7OH1T#tg&i^^6&I zjn;*(T^Bm+vMEBh#}-(Ew+b$j3tjGU*yFea4_TD*j6PaC4!hCguqTg$ina~^&40PP za^s`Uuct!7t1HV(LwO-u$S)sDV4;OG!Vs<NfJXrBa`*MAW1{x(OH$%z^H?c7oek}^DOo@G}w!b?FP zacJqQ9Gw~bsIzRT4BP-94~O_uz+&~EjUQ%v2icP5E@;ZKpqnKLJH7^hAN(oZ@ltX; z3f<;hAVnaYK7a5JZ;Bm{doi_UH{L0CJO<6WQVVDnaa-S?6wJb({ln56kFsDbuoN#K z0z7E}kfEdnoDF1&Nfq%WO(gEc2QtH1@}?~D#I!Y)!V>?{mX&XrPg=V9aty}AkoCcI zAmgIzx+05~3Smv^CMkp%l+maPl*pnoUY?e;+z;Y%-|}(~O?WQDK-x4V$fB7q_f{cZ?%ncoKZwh{&MKFCrJNcI{kFT) zsjA#E!@w;s_ij~}`?eScY(&cCer7jYgdjDR`)5p$Rbd$HXt`(9BH4q7MLMbpvO@d& zepp5q{bqA3E&3iS2JieuzaQlr|1e{hul*-v)#BARmVL~;x(2Q-`?fHnXVjC~F*u0o zhVmyzeZgOw%u;m6zk>*N$n@q3+Y=>VO@?W2yfl*cH_pg7#rhnN>7e@JYuD!^vfQiA z#~6*o#EOd>IZe3TdN>ZZqjHiC-3!-6(YYG-Vqe_3yhEB+OgeRmX$SM)dIV37&4`8q z8HAq9h}7LU1JMa|c%}kzeS+BvBu~QfJQRrXut;Z+J)UPW!JKDG&tsjDIv#aKmu}lB z9C`5*<6P5w-K6)D7rE@VoE0&d&`hOgoiRh{#p(pM3M?E~hOGaHiIVh($fJ|A_@LJr813rOb6yvhtE=MO=BkJ)*VKw?JGo+W# z5Y#9apkk62tJjl(7B{p?9XnCr1_-5*`FCZC9T4H&E>Jls0 zLuH9ALontg+)`?~a)xMy)iZg9Xt1J?6YTx zM1<2@67foW8-1pq1Bs_Cc;<%9OAK3r!8HrFJvh8aCI&H-*i-{-D*ojR6%q1b*hq-^&xA5`av6%z zN;X^3nvz&LjaF_=wVKwHtbn+ua;?97PnGHumb;Vco=Oj0-BV$Vu*fVG>JUC))lBru zPKMxA6KcLXj3yLwJHG7Pgd$Pyv#CRwPz43N{_aS$g-Vn4#48+iHSy=DMBa3I{gx8q zYbq*{_l|z#^~RSQ6%Dgo>M@y>@ntrsZL*0Gmh>_i!emyalRa+>zD_e64Q>Q5tYhs$>=8V%c_7HuI#cJ@cZSb#+H+_ZsJ*%{__-gK36zH8h zUC|bj2Kt^PZuy)+E-^trH;bet&X1t+XDh(KYe!(_AQ>F1I|7^JlT1bDdCYeN@)W$e zGSd3x)4d~b%R7Q@+!5$3^j87^W!XQ&j-bLh_Ksj$HKX9}bWMmYiujG3^|o z3No+230YMV`jD`Pc!L9t5!k|%uhX?#%z<9Yz1UKMNv1A9weSkK6g5~v2_TI|bOB%J zyjHSR{v$&q0TLY0T4$!G)vLA=Or#u=AUznfO3Nqp;6X(49fb{`j&J!W+he5mN_#2k z-DG$e-}C8F@9rgg$rqFb?3o8?5w+^gZI7gSOM9tX30bx3t=JygQ7oN?L5@Q(P=2)Z zU|vKcDb)q5CYY%ShnTRKBBI)`nDRYEvY6&`p{o{CM@xUb*SsA8E~^o4n8k%=udS8E zxMFLP2dynj)~oG_mnNa`r8+9f5KT+~WN=dafXJ!xXuroa$@bS0O`(h^Wr3N@cOcf3 z{#R2@;>uy^!?CanXLkEUk;!YP*(_x8`V3@pFCvrUIx?As;WT9OFEGIq3VHV={_!D* zw5y7yz}iR|Kv~qI-!?$^6d{EffXT?fB?^kP_91(Ldm&P5z6(c z2xTJ_yl$F0v$r)--0#Iu@TI&;QErAk4}bwnjFF04*#$z0$h^o1<+^au_2(S}Rkuez z_Xs7yA)g6CISxnRZi!H?higJ872a*M^m!wca}`Jvp=>CSd|7@T3gnA{P_BPs2<6fF z2<2Y56OK#CS&EYLG!W&T=F<3LLX=}3v^hm$x|wH$D5=RR5Wi79;|3=8jnd>!YizPy z%PcW*jlGdfZeOr~C?_Gxe2TCe`u(-eEbQY`f+(?&Y7k{Z8`dF8n^P5tGHS!3=woh9 zEg;I?Br3OnC@bjM0-{`5K$HuJQt;c04^dtZp9VxJ5VOP}as;A|Q_ec)>A}kEQvxg3 zv7FXR%V|DXxt=U1U$6ix0r~Oxy=Y+N3>o~Gh~@Peh~@Q&SmHNYAeQhcrz4h6{^h@2 zAeIYG<(Gm}xj-zB&gWDv5KG{y1}S@iSmGQ@gc-b^GAXKzu`3~mV=CLz=ftU8AeO5i z7yyKnvOp|hPJCWTmH8A|AeNN~j|HhR6S*XYy*g5%$|GEmDkF0-P8oPpBHb@Yl?zhk z@zUHds|Bf2v7_flRnH|=eu{`?fkDhcET^2aKrF?}ThJ>%4SJ;!%SjphWDrZp&LLtW@&4r8ScHLp zF2le-O~f+CAm$;KljkfD%LQWjX$6Ew#BxFgKM}-|6qmi2;*z59OC%szJ=*}ooH#iA zAO0?BFIUe^d)X2GxilUTj!sNAg*cRDjU*WQtCdk`NI5L2+_FgqN4{%im-RtaPD*r< z&Qh5|Ns-`mmIo|_<9D!m{htus=Ru#;R!s)v`d$)=2yPKz_Z3EEXg%04@bR8xffAdqqn zGL@Gnp@9By0*IaxKxCn>XtaL3*C3S^X(Y^27#cVJ|Ji$&5XrNAzb`W0krA00S(%-c zRauV{|H^uGS3jq^x@PVmDlT*9LA7)TF^Cb&VhjU!i0s8&RjV1{=5`4N(~D~m_7w;$ zj242?LIMfyLJJ87SvJ>53mI(Vg#`j_3|`o>b~a-C`F_v&KQkgK>oGIkbCV(~PWEGl-}Lc^>6uYE?h)MG8@>AdBlxyAWj;*z;{&h|(h$qV&ifQje;I zD0Ll(&{Jr%N=30(&o^eMTqA7W*!zDB1}b~jHTb=8Fk{!g-ueagx- zh`RmH-GC}Z8ZxIrwBiM20x80NLfQ2p&qmo6s}E#LMXE;ssm7f;UkhOsjzz^5-pL3{ zy?7y3tTGcK!j3pGR@-zb>H4&du$5^ys%_?_`N%%jeb>)2-9bQ)uQw`PGAUZ`gh(oMVKZ2A)4_uTg zQHNnHQ=1p1GTH&*i8^>xQU_KwFG{5aPDQC)Mcx@-9=RyhFcziKS*q1isY?Ii<)L;P z)M42)Y3!M(LqDeuFIkkTucu-u0`Ke8fycA(&nimgRbtuBSd@w)Iyq^GMX4xGRj)~p zI=qf1000C2bzC;>>VjezsvAaEad2IzFB&0WS#r`y+%^?oH%S0(5?BF)343B9c%u;e zdhF>Xq)&y|UnTa$88^{o#9rknv-hGXGmR)i3F>o{0d91{p1>Xa%`1O1il_u%+yF&UB-c9j@c^mdbGe>7$IBSV`jy3KhA6 z+XTMbpN%@=;3HHE)nrnWUxf3`FyYc9hi?TnGDZCEJ*xzp+Q`Lr)T-HyTyuo%t*Y>9 zg2*2w*m{z{=`|s#pi2)n_BSuVwhPAZmh3!bHCjX%gzFMyeY)Q0Nw#au9>fb4p_?S| z0kTDuz+HlEkV@935^Mv-1CTNgjy}dUCanW%WOg=ypsM<%3RlJwY{Ogv_qy|HX6O{E zGvkd@j|{ypQdLeoN#JSXX6T-{ptQo7eNILb2?g#!Xc z4vU=}nFWfEIR58F)!?H=cD`D~zNMUt6sYUwt`!cx#zHe7IB}ZeU|wtvqa~l@S}eIX0GRWiDL5v_90X3ew`BsZ{-85|DktxmH|i#h1>c6(7B*h<`oTis3E4 zcCDC(ORq#L-a5Nh42_`N|0^lg{2LbWPYL+XqZMB{i&k8mbgmT#YMJGRq~EAke2y|N zVMuEK>a^m^VVPEZx7Dsz{mILlUuvkv%jI(JxLQ9}^TeipJbUH(F%2A-=*L?y_N|h! z*Y#s}O{?g~TS?9I1ywckTt7}8o-crYyaE7MDan^tD9M+jlAM?I`4TJ1Wj;}@miW1n zjJ9_Mr}4Rx9D9}6>Sec(N9RiN7tv{4D#<0*S6T?3E6HDc*YUZMY~PdvOFXIumZ%Ss znggCI$t2#NE6I7!VN6WFt*+y9CHYIIB$uprt&)8Dv~wl-+=;A?i;5-u)jE-_B%cPr z7gUl7v-q-mlAjhK?B`0d0y-3>op&`oSCYTXk=5s(0?TW`knS4Z_sX=&(Aj$4o>dFj85<{ z(%H5?CNuJalu&#}-@Y+>OCN``%y(!X$J^fHW4f3VA~OAm$?>2c>$IQD$T{nYv;R=WWse=4w!%t|ut}TP~}`-M+0GyfYhgl+=V0N?!J2 zzA;yVL4WaPtDW^vKAvxc{*jiEe|ORqy;DvkOD#!<{;TYPv{--@P+Kkecj>yET+17N&`)4le9!~?>^?KU1fDG z=F?BIUb?oJ-G{yyr^O)6?!$a`#{{Ux8O=Z6K0TZ7uA9xn7o5#^HJgW(*?c#j&HKe{ zv@SmzRu|@b&1GRL=AV-bNTSD`_SdU(;RmgZw(eOg^F3e8T>4&_3{?1DKAWJ~$irdK z5U})g_B--*$2IfbCpvYY=V*s*H~Hnpw=_R~ z0Kx~}tz1R0+YOnxGBTyiXjF&z(DUKOAeQdutc36y@T;X3saqPGl8HfGrz2ewA z#pr%9dRUCUUW^_Uqi+-=p@S;|L9yw3^qFrG6>N8TgLJsz2+BU=yJO8ntI z`{@W0-hMoCn2sDgXdlKSSJIIS587Aak&upDl*r}#9H%4q9w0RN$ena#??L-cJaR7` zIegH*7mvJ?j!--2op|JaIyet2&YwiaP?5e^pQ=7)=maBo4ipKwSan?=}Pgbx;BXAvGy zgk}+LE-2j*t}nvXML1f7Hx}X2B3xO7%Zm^e;l?7|T7=t+@Nf~nx(M$q!d+sG5oL_l z4=stTK&b-gE7HjQrNT%g3=yGn^Z}uGacygkJ|I*BeUNk-=mSDE&eMoPh92O61ls7 zFu(qU%=aOfum5_VfFa-KTxm@!eulT{`VUv007KLX-(7ja4^f)OVS5oeWIi8+>3n#S zJyg>3aQ@5d{_i_Sv#)YIoXj4~JM(Us%sbya%07^?@gB$dxXwrCWcC_r%RRW_LAZA^ zd!wxZkM3rd^l_M7TyR@-4i_ch2panpPPufFT@Du?cOP-(Maaf%Pp3cKkS?uCV`x4~ zsn7p~EA!sTc6X!Q>7r`x-9bN!<%H(o+Q}yqYGdu)RXgXx9H+eN?#Vy;{O3}>(rV)yay1xt#u9G&LQ3T;m`_3%rXx%@)_!w7oQ?P#Q_kTt zS1P!Q7g6O`RCQqoq8zJQLHT!NC7^_x3ZuQIGAroMs@^k<6`K02{FAJ#t={35Oy9Nz zr>OS0YO9T1rv(7VlbvkR3m24~;uh1~t}A}Av&b$KPebE8V(#yR3!dOmBZ@=p(lvV; zb{|u&O~oPZhM|&Q(rhkZhS7YkG0$sd@=JX_ca@G_na{N}A74;ydA-XnxE>SM6xV1& zb?4oP9-vf_V+mxt*;SbZOe>Vq3;j2BCjY58M2|(HIK(cso<4K6jv*{EWBJniur9^K zCyixvt*835IlVUR*i^H+j2q+jBPK!d3#Pet&eQdCW}dv)So=Y^gbW5(zjMT7vyq=`2%LVCcM~^Fh=KW#A1SlJ>SIG= zJ^9c05g_9re7OCXWt+{v4iX9R;otdjV5BFz;A~&;>{C4Ikz=c+&kko)-d02Our2bo zZQBcy#SL}>>&d=Mge{QGAEWtGz_C031p*cSedh?Y)Un4$V=ftln-n?{j#501x4gK> zE{2$i6W;he>L#`V5+VwgV59yIO4m8r?zKAYjg5}%I0NpSNb1FtY!Ad1ZOJJHbX2m= z9)#dZBra19P=Qfr{S=#{t0S`3o(ISFk1{F;1tz-@Mn|)wxrqB4N0CU~$!>9zOQu4Z z$%?B-hHwDDmK2xUP|PtFZoDlbxTB}3W~8`>{)2m54hNKqie}njc2j3evVE1^+Gjo3 zi9HHQLa+8j>P$W%k$1y;7<9L6q1qGqgX^$ys&B~~ODSt}47(Kv#=M*i%K8VjkhwG4 zhNA#rqwj2WShU^=)Arn-VAuTR;14+p5tg}Z4Rzb*7TcmGP`)$JH$jXDgD(+1i3D>y z1QEi0VC%Cd3l*)zaE`8RE-pA*!Qh03;>)pn#6rtQ15iCs_*U<#R@LZ&xG|E`&c z=&iOB?K@_+$E#=`r`L$cahj_ysM5Yo7Vp_~WOF?o!N47Mzr_>BAP>bUnLYahg!2Zb zew&_i80+PmM0;CI1e_Bl_H{a@aldCg*%R+aDvy4WD*E&z_1hNp6A2W>-WI9WjYPP? zcNPzVEMbcA_M1AB|3tC*b@PO+!`caCG0j&%OlPnGZ)Yz|#Hr{HEtbwJSu4Tn8n#?u zN%e(H^DaN$+6=vHB8>}rw;3ztiSEeIi`>-~OlPwpjREEsEUuhHDd`xVDL?{n5`myF z(=cRFs$v2mTk!Mz>HquR{-X}crx7+}qGFjO!;G{s8HVR=aE|4up9qFA32N*}Xz8A0 zTcFU+W4=+oNrFLFSPZ)l2NE6*X59&|eh}-XrfNnUcO@f!>q}6m*NI_|xtaF3TKtF_ ziBV8E;4O8_u8>A$?jk7h1P)R25#-ngIrsxPwuKyYb&1%HRXpCZQ3SI7d^drqJU=s0#{6e4<$fS*BRvuAff1{j7*qlt{~f>gkGpAp%mUk%S4f!48CX_I*&Gz$?Tj% zCsWu;Rq>odgH(Usltcus=i$&8E(#@ac+R2EIdnzdd1XxWoJ0SrI5ftarY-k3r9&g3 zF1O{LE6=B`xaX|-oHeht-=aL@x++++YQ)R9+70K*bJ9W2m1nfXbLAQ9&lgj9?#cJ_ z(mN!7g>c{P=?IRL$>9#Bp4f4t8}RdN%r_KJp9~Awiqy~Jb|9ECTG!Oj0F{2Nb#1?5 zUBi4)TG#euUE6zxb!`jr##KLw@Hne=EmjM~YE@X*(zUj(5d(;;J}aKhU2kGt+YMQ= zt}%L+buCNonze2An%1>Oo4wzlb#1MescBtnc$vy+zd8cJe%Qjb|0=C(anH|eUAqdH zUyatat6{x$?UpQNG4Sb31memH>)I9B{9equcC^g8b`{$iij{GefQrRf5gWrrdA?_gdQcCTw;aTv7*mfR5BoYY1Yh0?Zzvk| zE!p;leB-yn@D}bS3}-){Zzurb4T}_~Lj{?i&iVl-{G#>yI3VB9IrBZttZ&T!-v7KW z)1-pc00>UIudoT-$>D~*c)L$dAX@+Kzu(ty#6}Q9E zeSjk$zW}a5{xHxga*m{=2`bc9_`sKnw0028u#a|e1b5|6u&tC(hK1ft$y~KHByQv+ z>np~x?>Fy%BB%F4FO1oDk(To7*kNOQiKbFHeeel}Ti)!4`tL_XM@N64ZuxY>-V87O zv2WC$|GUcK_jSp`eDP_t`f(V03gb@}1m^IP|M$P}`m5v6c;P*me`O(LODja0mSJQN z2tihS5vw)iqaP-Oix%s)9TUCqFUX%U)GD&l+hT9*W7Z{!kR|N$s+~vt(Bt-UZfg&+ zA;734Lp~>5FFW)$+=Q3rh++(QhaY1X*Cjgt>g<*voIl4f>E{&O%H?t?vMv)s9JHbVj*)mPx!uqbonGWka+{#%lE1e zsA=m?#tN}WsNrWCHF`DFV6PJNbL0C6@=oI`Coic#O3Hn@0Bgsv3NEmvr2b9iW0>!2wvl83 zEPm$X_kfA*Zf9eo#eH>VCYOXBl3zxkuu)|yNX30IA94hIC4tm$4?ga5d!Mco4i{sA zQZLSV$_FoU$OryK;s9oQ4shlB@NRqh0i==MN0 z@i!16{#FZJj=!--{;eLm?B8POGU>}H6Lk_J|Aw>Mdc`}lclGfpFTuxj_NG1@y4)u` zmvJ}SCvsZ=_im627}g#`m%kD@_$7`KK(QmF2ycpAT&jgGUk+apO!pCok7oD7CB^jExDI*D=YDYSs(FH zhA#I-Hij|kO!e=dWFyXw{Z$>>r#@_4RYsjbwm1)v^~v^x5>6N;U&H}!*HcOh582J1 zrfy}onfv=;*DQae5hCvpd4NA0%0oGnU(Y*f`2oA`5%(l}oB6!0+jDCeVtqcZ7g2C= zK5wV__=2*twA!D>@I5t$D+1wSYdGF54}^35vlIxY=5WG0iZBquD0J14QxOD|Go?pd}&3K=gpG zWKk*ozYJZzBqE69748>u?IpQ{56k1gNFUBSAf_1rOwrAZ`fw$861=2_cw&S2*-{S46Sf1 zdc7=a`5GWzjauHBQv@^;j6=F&H=@OE$Mgll`ic16HL2mz1mJ5(v=|W_d}WzE1&$H5 zeCcF%487P0mk3sd*L1?(QKVLPvNt*Tc8nG~5=LLteL}bZtS+~7e?|0fq_c=x?kQ?n z{}HtefhQO@a{D1~&KZ*o%5s_g;A6sr2*13~T%mH#m4!OKPt@`-?74gZG=O_KY8hUn zL>X~RI9<*vc{$iIzyLVh2Ro6=#?o8{;gZ6{E)XZev_1DcLbwCT(^Y&pZf1)j5N!We zm9UMu#aIZ&Z)YHF0u}%$UP8_v(tvI`4#$eExdK=fQOg6tfYDj&na@e`9Z|~?u*N2P z%!d124r54PBWf8s)(TsCD>Mt;}?T8gG6~*A!Du@qDY#} z)XuYTNNdg^=4`yqGQVEZYnN*V-2gghj|rboj$t>idyxn6f--8^4NF-I5$n92Cu~_U z@nt(t6Fw=<0LEDKLewucAyw3JpXg@GY%ID>2QN-XwfWpo+X*X)QOi44uHcMO-N3R$ zoC&cl(hNlSt|@A{504{BG)663bnk_C9WsVsD45P>d)26A3rNSXO92vqlL!RVW-p|u zWku%KqLwL4fs9#;THZ4?B5Ilbv8-4MZ;mHQR_?(B2rU-fTyAs3A2dDOBNB+wh$Gsv`ZC5+Xd@2KU<^P@efmq#sMNXS7$-Gm(LQ-jgrXG=_5w*NtDu_|bAaPu{ae>t@ z3C&}W!y)~STCVUR1lP?5AG#6w&?bE7HmV%Ne#%BcRy54{5YhQnK17u8HM6Q+m{-n+ zj&;GE>|JhhV+kL6R@CyFtJu+3U`Oz?iEdwKNBd$&hdj^hXjAOS8J7)qwE5!fh`#o) zBkgYDNs3xVI~F6FMEs#4ueb&lF2k>(_vIMTq+mqkt~3}?M3S5vMH2&bw`4)gqhLXe za89!zLFp@DL6ZVl^H9$9)YqY$D_GE^!h#NA0W#@iTZsjU;fr_1j?#x-;Fn=RIq!UF z76jvbl`KfxE*8Xgo|y%GMN!Ko3nFScu^>yU;Z2#!T5Z(5a94hnO>x+35Pyhes9iPoz14`y)*_(K&fkrTsMtIwTxkbEulD*07 z-dx2{5cq02VsEBt`2tNVN*NZ<&yXXwEYTE3J^V?E5*idya=5Q#^psO5KoqR5P5mLv;~@)`4HbsF4W z_L(C`_j7KUI(wvi`itdp&g!F6^=4b5_SQcYm(PKOvq!>S82W}qawXJC4g>L`U*%#{ zJjs!j4B0}9t3)k-kvMeK0td&fEx7s1k!uFb7$JTfbuZR^@0HnkYFEbE%0me*R>vgEFL z7xT!wXSJ@qo2+ZT;8$f`lhtsIbuBt;ibXw(b?ww@zIxf6{do1(wYcYJwyy01=KImQ zM&*j=>s(=7ds7y(81odX(mlhvcDIP`s9V?W%I5cC)-?*#sU|?(y0%|LE$_%n6{D8- zV$?Ea2qu{C%BbZFF>3h&QOhw>S+V|DAm!DFMo2|`^}<&l;{v3_nF3{hpW#ia`8q7C zhh6pq0x9l@gkZEJ)Q=cL`J8ww{C_9d0kw=6=SO23&t(`Sb~A?P+N{fMXO!ZQi;HMI z#q<%fbdov#a}Yy8KLMP_3xf3Ok-Cm$i%+PYe({r7z~_g$C6T%+B!_ofw~UdxzUw?j z>JDm=x(<6QB6VwFnndc#KVL-ZPAF+oMCwv8c{XuK2U)p#PsPa&6@1C`zP+^(aZJIy zN)6NTO3ZUA!6 zI*cv0i+R~0e_zuF0h0QlG-a4+K!D{#jTCg*p)&=cm4uHk^cd{Vj;Eq{61#YSXB)Q( z2YD+OCfs(wY4@{vi=a;KJa!o<*`trfoJSxk!7s%`uur$y3o4=+6xd}zhX~K9OEA`B zP+0^5P$xwIs!qdy8^dYxYg8RgwEzh~#TDcLR6>l)0959=&%J%RPKW`h3Y~7pKMk9?i*uYxka3kZss;Q%-IA}F?W_P6yuAM@+C9lU*?uQ5v@BA~Jq z2Gvk(<*g{Y09ex>+*fEkXov{kXbApqGBa~Cs>KUc(TOQ@zx30@y$FH&bmOoB) z-=hDQY6LollXOO*=_L98W_R@M8!#I_4rlR3Y^ZO0kB{^2TZ{R5_pL8i_bq~=khIRb zZ^f=(_l4T`MW-JYBRBW)u}8(RZxo|%7bCNDpXVMP9+`1_^!?(zm`Z z#j*WjbXbh86r)g#j*F4WrtfmEIObd?AM=uX4jy!%D&z6C-(v-=hZ)j%H*>Y3fQKq%Bs z0q{9OE!1`B2XQs>c6Ps6grbgtx^DsLvHMm71705d*LL6f15C>Er+?u|rQ=q42p%R` zLO-Qd(8N2jq;Hih%^mI2Zy363JqMOzfYY(=TDP$mKCa&(LbyQ7B z->*g1q;6XKcUO1QO21W8(qpGBTx;>ST1tBS4J(X)tEZ&Y-NrR}i)>Kt8dK6$fn-EVIw4WB%_1e80_p5Of8-8qV-At=sVf4Gm5QDt z5OD%6R(8`GbG9=#&*IjMd7D_yV%AhlN$-jgU;`#MD?JSZ-d*N?JLP5$HNu~{M^fCb zng!8E2!F`CwQgE5mFr11V?MK0{>*n9*#fiV&-4Y=jxv;MI77C;-ZMJN?77A{`L2Qd zT2?V-3ura55T-U@$}D}7mCJaBY=P6um>R%b)qU4z3#`jG)$-B@^Hxq$$p<`W zYUWdghXbAK*UTbhy)05$=Oo$c!5mQbs!sw{>@B8bcZ}s zYHc?yPOqgLt?Z_yIyuiq^wBeDAE~#O6xX;3@{k*Z7b2zJ)(diMGXGOVn=aAH8chjx z5X;m}D~5hVqK#)VGLf<%hso2VT0{f~YrGL3%Fv7b4^t}Rg}r{ zrYSbbt|A;Tgc+Q%n-)-Ji>DB#+D z(&uFhPLgP# z%w#d0NEsq>ltq8eAR5qo1BV)+ND(>mRNt58-Q@YoQ&#DwmB0)>G;Q#qy~u~A@SzN% z2eB6)qL_$=IUhn_Ztx-cn?yboyE?*$EIO;3)->!zKID9I8y7>k7=`?*AkY0PS#Q@? zv7@(%I^ty#JGvX$5y4is2%q9(ljl*d9hs3f*wOT5*%1(#^Q5zN(|T2m$OXZ{ zn6f~Ms0NhrZsbNqH?1ZMy7i@GLATCX5E2D)JRIO`EC``l-L!HRMCe-zjZyQgG3mS* zVq0x0*QvQ8?s{=pl~Q}xdFeZ7mew*;UOIvcBFiXDP}=BrXx&m8CDuTw_*A6tOx?5` zUXt?C>y#UM`HXH_=~@K+ZE2dw--;cJ&qigx3)0^Tc{eRaFq18q34bsXchkDEw3}9= zZ*zTG2z)h$68kozyhOTO7S7E}Fsx@NXX~c5DbBdMn^t5eucn)pWv%sdwx%iIfyFgj zN>;jQu^$vegdyg6=@f+&4}6)M3%rm?WKlptl+2XNUT9&8kWn?8ZRe%?*$6cVHrvWe zKR`$$$On~Fae#s?lo0V~31q;~4WKA8Bb9Rm5inYm-Lx*|dFdAdE)3eahOAIRFDNhl zusqJJdelJa&PIh2>aNcUL@~}%--jZa%1ehao+yf4au|rm@(?eXw9nL3tA+AZ$xE+m zioZq*vJg%iVJlbIL}UE$p3(CT+ta_H3WGI414yIjqooBb|x4qbH9`ijxNZLOEdp3F+G`i7UOGzz{X_*JZH?1wE}6l{KFia~;x zGh5g0qK({**0sA~y>;!HEM_tAX`OYgAP`4|b?s2rwL*43lFcu6(|TUneJ@(q>azRY zA}@WQfQr1E7H-w+v746i!7wsjpA$!SQF-aRI1Q(NMHWK;Q`OV!ih59L`5Q$yEswBB z7TvVo2*fx}!W#-O8FC`O9fmh>H{Il^dCZ<1R!TNk#w)`g@MFwOz3Jpqh49?0W~P#} zom%uL30;>EN}U=y`JTU=KOvbb@0|5DUPKWT&WTq>ZPr&fpmJN4Hk~^G`)L|WI@DBe zisPLU9NmsyyO}%AGXc+s%A?d1^@j=8>B#u)dDJ*OO#QNmIYjir0@|fMf7vff&7z!T z-xm%9*Z3hpp)6UxZ(3trM^yd1eUfjb+hnDMA$8uHPp1Ug zs8_Yg+KkDZtg5Q9=WVjc--G1VZL;35*V>8Gs+EV?riq9 zNH>4YHd)|t*(S@)n_`=+o5FB@p-t9J?PmeBiy7bZwdJ^s-UgxXdkdEI#L7=LXlk2& zkkP*C%nh;feYnpmo!SW|zqGAKc0}V$#c(Gf)3vc@6TJheO9!*VieQEkdXpPzGN+ zPO^8x4cG*PX-2+5EV{9}57u!t=yJEREhrm#0@^wLVx=hs5;b1rG9s^0*Hc z5826|HpN$Xo4G#-bpHZ+rWzrv5_n4Vu3W)G#TC6Crt+gtW6yw{)DY$^=JS^4bA~=x zZ>9P80{qb_wum5Mc0r!c_0{;-^}(7FTQqdg@d58e`z~TlQ`p@!Mi!-sAJ_-A!?br+ zP20k1r85F%PPjDjl)9igZ40aG=WJJS3cFJ$m}=M^bI$uu#@@=5$|{7D)kq55A_$MLzIT2$LfRSk@{eb*#5o)wqwxodq7J0}*#2X*cs1SOw5sv6q<^Ci4N0C~o57u7Z z2g{xH96GkH50=`rvY*_!(FY3xuXy7v{WRpw`Iux-mMiQBA4Iv+Ck(>1R}JubK)mrV z?7M)8iY}!-Sa2Ug*UUy?e>wlG_Q85zOqBL4+F^S5y-Xjhq6f{{`d~G>(5MxX#H!8k zj-p~{*i(ji4d8K+XsHoNqYu_5s6nq4Ks)xqx)L@aeT{hIvJckgDVtJf!Cqt4?@$cPC^aD|T*=keR_s)z57wrl0XJDK+_2R?STSJcbrZg#4^|#; zJcyKOv)TvCT{?6l%r@XMRqPZ9DwUVh9tQc=Bi5(<<&%s`)4_27%pREtpen|1gOrRcbocdr@A&tq#iek)7FXH3(OR6B`_m^DD}YtIS7RU&s7RDBk+_N(GyRF!PeotR`_~AFK)=Iv}>Y!G}@;+z38& zo5&G}z4#DhMZ=sA5!6`aLwhH)W3wvSFwSy5^o}mLlfB1HVvjWeujzjt<0*4tbv0(MasbjcSQEuCk-ii?bu_$fx^YK_^ZC1$99KN-^Y# zYmBRXuwIT4jSEKPhKw~vl=@&LZdCNaDp?TofPzOB)Cj~h3lfxuSHXhHrfqo;=6Wf1 zT^}s^wy71PSWt=z$0t^5>K>LrtK zO{LzkkU@k@r{h40+GU+`+apq;+>Kn!!AX8C7`21UrALBb>Dk=%MmPYtW7pAvMlh2` zX6rk(K3EYipV0>kfv=X`wXzS^%V)N#4_3@n|59@E2bC1X?xOv+1TBY77d!c~I=GPC$SQDZqi0+8C$ls3QjnP1( zG|Z;Us74=Ac-ywb%PHm^8ivvNLVoTr_Z?!FV;2g}OkC3!@q<#EpH)T`(XK$ zsZ>;F!U|_E343Aa8y3lx3M>5+#ETx0X-s-eeVAKlag})E-x!Ccf=%ijiKckk0(Z`# zQ#bgAs(8+!Wxs!(PL+S2IW%qp459eSph?6VCnfQmL#Kw1=N$T+L(9^VN-Zzv&=pP$ zhfVAk4qf5g=Fs%WtZ?W{H4cq2e;tQTtT{32l0!S*_=~}z(cPBE8=ouBWiRpEihHg+ zBm1ABiS(am)?D<#f;D4uK4;D6%Ck)vcpQ=~_7&*2zvasFZ;&;oK3F!qt+(;pm9)~v zpK8s>L`LwQOb*pPSonF=2Md>X65=tss1MftK+)1@UBlVZ!XSQT>l)^ZWL=}e=TWq- z9j&#l6%G-de#Smn4ZjH1wRCN6UE`6#)-^rb*0n=yYQfG8S=SVAyw)HWeeh{r|M8&VQuDvOXS&Vs#_2ibz?uCp#E22B<*0ouT?syUF+O=iYHDwC2ImTIF zD#jb{&+yn>SM1#c{h^FEb|0)=9DVe`a*T1a50;~5`{8Sk@u#Z&H!-ol&+rySbsd&9 z#4h{LF>`kaLPC*=aklD&rD_ob3g(@#wke`97Nu}0g1i$}b~^Z$USxUj?V+r`JatBd z0r3}Vk5xp!%HdXtWd5PP{|IZUK350jp0yp;(xBWyHEL5qxoA{`gdk~BkIC*Zq7pY# zK%$yox$c`nbQP?uq*rJWBs(u_n+?X`45wf7Ysp)UQc)KN^)r)^f>`;sl|edXx$ZJ(kAkKwg(mp}#u z*;9W~H|&Mq(Js-GGWEV#>*Bu6kMhcemT&vyDHx(V9b-zoAJ>(p{^<+mM60;4}qCow&xW_0C++CNkIsQDj*9m;_$q6vsM*xdIVL6oo^D#cac{cA}{FG(u-Zv-P6=v$~B|kU>KCDM1A6% zUYq#9ss!s4Rf%%qF7LX&2-fzRGLwof9FlP{9J3{3`1k(&m;d$u`M-A%Pn^&5$dSx! zEG-^-C)=HkHvKu-UXFBu2|f;0rm{~7tjj>l$T9^~sUCZUbi$c;Vi0a1Wh>}AF;TOv z4rv~Op+#x(4O^dx>t|yLG*g6G7i8YytU)aAhzKB7jN4kQIOWdwqKL&7I&7KAP(hA7 zJEFEWrhgUSSUT&C=b7~{{N4)Xn%yksU3Vsjo1g#Oli$+hNnAKJd4h;EdGZ?0GI=z4 zCXa}}Y{|i-voHCY$>*_ZuX^%`veUl`j{q0=dz^Ja?76!ZLbV7y|LX*{f=t-4;n@2K zEWBm+2sx=wYz~7MVK1u2YKsaHs;$^w_ZXeT1h$E;%~(#zQ#X<)00rn$aNm{)ls*XR zs}d+XyG@;|BzJFw$l8xa~%Fl{5-Il z3OSkW08cp~^X}#O3xbR)DbshQit=GXHh8>6>k7>fVQ>>_MudEWmN`E24upwo!tBDl zpk;eNDP@3I+6pb(i?r;D$iXp|Cet!?ff+|yb|sR7E8)0G4kR{7D?2^A_8gO3Wp*3S znB6bxG%L<;1%vo+A?K*Ox(qTd&^(sLju~>4XpS;SS%)BxK3^|}IQo2r@I)yB z(Wk9QpA>x_U(NK1f)Em(($ph;DguwA)R&^qEmv0QQ;a^3K}{fLbK<5?j^@qjQ_RU& zL7$wHR-sQSprGjU3Vi~O+JCJ8oPs{JKNfw8*^N#5)Ll=TEIOGs4Kd6?nuI0$)>;=-1|MG2ZpVd8%KAzUb+- z{8S(FQ$6xi^|%?6&{LVTcaAON)-%Fy<4(ofvFMdH;~jxKKZ_mH1w6JH?`xGMh1?pP`aQ>Q@eNshL?aEU!>1_MykBjBo^I9rnEw zt|H12h%Y$V<+mZ?dq;ML-Vz?E%v5-!6I2^KvQy)cgVQ{cRw94^@?nofBsYd9k~#&F z4P;;#A;U`=;13>2%MG?KsFgdF*(}44lFRP^&^#z*_~i0Stfs8h6YKRJBvIHGfXRgn zFT=07SXCOfut4$YLK+@aq~Si>T$P4<@JMn;Ffd4lPdt)WOD|>~nWi3j>Vg4wmY1Vz>xbeK|puI9esOy?z#Q+0wZuT1NJBJ>?B8P&W zps%fXdq_R01XSk$j%g%)mxypu{5@53=gnQ3?wU@lr0#hT-COP|`V%x0zC8 zNt^`x?01e-TP6%XX5t5kHnTwIA?nakz(JU^2k>Ilm_{=JMsU#GTq%O`FdWFIqzMDZ zv5Es`DJ9gX6$?4N`gt?feB~pIgfK@`Z0GRA?7|-5ksg94(|m}FB&F$0oqnpkJC+j! z>miekoqdifeO6=}kIlYh*%Bk0fMQ#q7=NG`r3_9oR5q%P=>C%|KA~YAuTRGsUS&Gb zJdVLEGJ(A22;o2py+#65K`X*WOtRCf30~2G!UX|piai>!P}Tfm)f^eS=Eye7;cC%k zHzOlg>Snal(?`pIX%ePl!c~s*H4e8xv7C$4Zb9MIK?>>FnyuQHqjfC&pYw-Q3f$#7A zd=`EcNFQD;(uW$-!;;N`BGU8i9O)Bbv!q?nsxLFrcSTu*_K<~y?~Ilpy7XybdbGZL zp)mdF|Msu`oB!*-{QW-)FNo>Q>kCY8on!hrdxyjQR$w}YoC25Ft0 zM?vbL1!6u_6LA`S7gJsSHf|sE#zE8@QHu}=C=bU`G)H~(qvptA2Y&=Yv1bj>?%bx(CZQPOC=LnVc$=ynbtO^ zwy*JfH@kt+7+s8UEVQGlgGA}~^PnM$>jeGkkPr=!N=N#f5TwM1Of`HEI--v|=%9$t zn40k`jxB=@fMOjaLPVOTLP~B_HO&-KqEZD?F|oPnBY6v499Nnq>gOTX3WBrixuzK} z6+h~#xJU;q(z}d51}9vDW=MU8%N!YfJiCp^No&xHq-)+#OJSimwHpNORJU|w4N7Te zHnOG}ZIbd=0Xmv63pR4eh7o1jfiP*B+fmcpj@f>E#NdVN)n@S4H0u?ZfTLP@%jlyg zn?0&_+txI@(r#VT>3UINNAdF)Q{jx`d69lpwZ2&Q{NvxGrs?R5%hEKlldA^EZB{5doTm|eYc-;;P&Utq?dz0HqkKD|{MH(jzurK3 zl+BC33cSDgYVrPJ4ezhl@Sbnyc>i06_b#a24VR^CCX{Ei1lOf(3fYkXzktZz)E6P? zXJYL+vNx|U_`57i;_v6ke$M3QDq;O)X7U({gzAZ>^R3S0Ij{urBa=sDiNSG5FflkT z*9{6SA-K+Qii;cK1>Bp_z=g7g`%zI4>DWfcl5cDTDl=k_X< zb1$l#+ai$LdAMA1*D%ZI+p&n7oGHnpZk01e4)EyQw}T_QkhuMFtWpwj?U={|&s?#P zuo?q6Ym)+FCEATDDyP&1y_$twDGcS**QuOo;udl}@yP6A&*3E# zF9p(k)~CYdERd#IH^b$aHR_GRfksK?ByA-I%uO@Joy4e1tty^Lh0LKcSnX8EoM0md zqe24}2&~aQ`}&>k4h>HyEmNd@%F}5Oq7A_+?bB-Kkh~dA3^C^S4uT!pXY_NH+UG@p zFZns;WSuS1KF{L(K*I)l(6Ro>fBd)q;ctADav{W>@JLeW815uLXVgA(KWB*A=Owhy z>kE9bukm;wegL2mGbg|=w9hHpC(1Hd7SR9)XY_N`F5v!#^bDD7^m85-E)Uh^zFbJ5@^kVHDRj@; zCpF~p0Hb~G3&NB38K2OIw69Nx(^LJ(baL_?q)7W*`y^Eqo%71!n3X&W(p^3rMNj4Amf*U#CAxnj=JKKIc+ z_e<^brSIv8UhPuu=Ty>r3|dOs=P(2@CL)=oeO{9Gc}Z*_9U$s3Tqv|px#OjM>PJ8a zY^-RXXGU{fS8AU*ZZFY39o%0-^iumgh3G4^&og3sE|4yFb%OHUgz`}!U5@gH4U|Xw zq{i*5$NS5#7Vj_D@cyud_k26Y``kIzgIY;($CJ&#ZqeT>zzRXPCGG4*t`BrE099V+*k;$_H(mruvAVo>d zRC-q7ohlM+$YWP#ma`x5bmHVpiY8vq*Bw8Y=RRCRbiF5PQptUAzP!}Nt2lkAhl1{f zj|Zn^Kjl8W6OQFERoH6hkz-6Vd;gHY%iM=lI;cZtj3wo((k^1|1KP_tTpJ^bJKuhj z2X#(n*Q&V>SHqis1X%Y$((&wXH+=RORI+y{@G`*1DhKIkl*L@D=Spris7?!gI= zavwZ$7J^64Lhz`X`!G}%0=`bIp;oQ4dYWCT?<0~A^whyC$$jusu|J@zzZr8MQVuYy zgt&b=_u(pvKKvr(K6sT_wx?&yeYlo~nH#Eb3!)os)`HB>lKZe(4>EVHn9=MWLa&Y4@a~~8nNz$hCmydxn0vw&zVZF-g zCQ4Ye)kK3wBR{a7v{4#7q-#IP8u@``?t={;uD6#PJW^ypX{Md8!_+y~OwLp4gS_|{MV>eHp}PbsMF|C&5Uc_! z^VElH92aB)tO^_>1>#%KHQ6`57*>AC*kX4{C|9-eYePY$YRdJ5h#>$9#U7e zn|aOyU|G~Fxh?$=m28;Zf&9)$e9$){9Ty}!xLyh7MA#mP9z!7gp(mpm&)OH}jl_t3U&DxWQRBo%0|= zRK%)Ovt&oGhryE=mTu|*sV=zN%6T9R8?=Jd6RWP2qLB<02(c1%Q_jOq3SHR+t#(Va zszYa)b{nB{H=&g;DC>1%6=X5Ag6jd)9nq3St_h&ZdBBcH+O2XPAm0jI;nj>*R43Ej z)6^qc?J)65E6Do9%X$WJ;;|JZ>lEohnXGXJw5pZ`STbwo2@uO%F`iv7!%+klr_F(i zt{&>AZZ@e}0%ZaeK%Bs?1qHL$=0T?^2*qJem8LkxfXTtq`3axvczDb3|b zl)fF*o6t#By&;D-<~;PM-USfl2E9Sdc~E^2;SjYc^dZZP(iSYU1mHC0JczK;T`JiE z=76w#1H~GZH*5>s(M+~dBuc}mRu7D^El>cOI$p%88w9e&>FlJ8 zJtAcidaaMZaMg_!ktjQ$SIl`(+bSCUsFOrYFWHL7MSzWF64m^D)_%XF3iW9lxhm7% zH&y7z3qavw+NF_xWh9D`YsH+^>#33RaHdF zJLEYn!}6VkEqQRJ%+$7z|}Y$OJAM>*XKcc8v?~m)M|xDnkv%s?HuW&XYRKM>7DZ+ zv`559_|9kvqUT{KFo`c3rWaPc7sT}D^#!K4B&ov3&oMo@`p(%qMwm9b_*sHN*RkT? z0DFf;SJ*q>>g=5ZORyd*pxC=}9?1AtNy6DdTmiBf!u7}4=;-(BoCj1&=R6FZ^DvaT z>Hq{H=ixds>s1YQSi516z6sx!VmNy}YK(n;xQ?Vj9LjZFcrUyzjWK1(GjV8+0$g90 z&ZrNRhSQ-Z(iwZw8OP3(m&+E56hb`=jRwMA|na|=Z_ z64Ve^aT4e|tn2AxUrDXc)lBoYNlbERrq*9V0Ht=8avgfsFn57r9o)?|Ov)cD(J&8^ z*hz$!#7>z2Fgm45Zh1*rl+D!Ui_X# zv2wv)zDZb=z zwQhL|wPj@2L5f4lcqE(7)m3WcZo==~HTX?7+B&t;NZwtE1C#@r9pfMBhue1A5NIMrG8|!x&ZJ6SSCLKWmz}U90a8lh z4!QU@@<0>x#a;?Dc{3b`-chC|6i5K7^OnW>WEyoX9g~qHy>*M*^%Q8*R2$}uUbHbco>?CukyO!VU6B`L#+ey>8zv?Y-7M5{I?%w))X zF(g(i*KQ`8;SR7_iPlISx`b3^5LC1oHlj7kASfbh9A;vhVIBu{D)Fn@8mF1~rOLIq zdix49nel4k94gA2Ud-l|6umXGouUzTR-d@dD@Lj~@kZELIq^en`ubT{duA+|HS=Vy zvQtp|RR;L-pWx!OEl_)&%z%{FBz7r+50ygrVOvn3P?O%#?9x2wCxx2W%z)KkQwNIj znwRx0uvmQD0Z+CypbUHrH5nF$Km>@~5GZRwt-NM0hMMdoLjm$a#SlotII%KtONKz; zjg`-?v9aih-e&kQ!BjSsZDR<$!I9063A&|^K{NzXUK4YKP=~--EgON9 zw%t?vTVbdGa^w+|S7aVAI!F?{mTE+ALO8qn2AWMkGeU+j1iI6l$-ja%!pJ7> zC)q`&bFnl8)~8dF|2UnC*0a&T>SlS>I*ur|o^MSm8KF(SCA0h_83GY%6~Qw~2sUCZ zL4;8ZkBo-EM$wb{v`Ykw(~dpK}$#nsZj~sR;-+DGh-yeNXZ4 zuBJt?VH*MgdgLLnQt7fPdNK$%BnJ<{Xuc^lHM=UgJssd9P_il<7iK{afE$)(!L#GI zQ1&!pSIvQML@YN6ScT;(Z6qvDrHzn^K$=FV$r~xuWVwN$j_PnQ*#z%ZLrv241-`fE ztl%^7{R%e0D!$*7P4HKM^w~)O&SB~_BRqq9nzIlCt^olP#NBVP4|69T7E$9`To^N%e=fFy&$5A-% z$gYMM+NrfEL|`D|R;>y5G16gTK>gx8LIrk6Jj3`V3lX+4OC6dlH4nEq#SWZc zMkMQZvMtAn^ob{#g)IVE&nZzF626OZz&6S>Exx%rP_ZvI1Mw=qu@Eg0GS zH;v{$orTU~^B=L{GXM2?1K-x&ZalL2&m)`vJhJ((qYDu9W&T5@EzN%`r-@lr=D$s4 zAZu_<-&1s@g>Cu~V4;dK@Q@TBcKs6xa>0 zP^5eq&WE9?mg`Vv3Vrk&(M>l034n2@8EVUn7(k6LT05Kn2Eb>o+R0J@R0H%#Q#3l& zS5zpOrm<916JmxbA*NxeuoS7jIC`9li6rx%bkrwV!%|V^m0%!0Lqg0}MUCo9@2nWo zln{faurKr93^>Dng=wZph_ND-5@MpIq6~swk|0+qQZb^U(S5j_xD~1O=D(^UH9S3Q z^c!`n=|n6CX4aVhNbT|hV_G_G{u97sQ>uccyByZRa!?0LBHWgMr6{66v(jVdc5eQg za$KO9dhC?uzoN&^Ry6;)#V;>*GX9(2Y+wDX`$zG16Rdiqg;_SU;pFKC(Npf3J&cw? z3vPEPf5SOpb^x+5m;mgCd76-E(9O27%mAe5I((%#E#?iiD5K;sKctW?+TUdR7+$#M zid-+8Ii&rzSOI^E5>lcK0Yh@n>?`f&Ix0OzMXDGBl2~tKJ;11_fFC-I1Wb6;HTp#> zyrx#d8f-EkhH&0HnFSW5g{dT&7frpxc6X!Q>9$x1$oK5ncKO^^bM+Hxvic!AMyV_0 zyBnYXT=@~j4@HF${Qv{ZfA}B%_J2yX+w}t^DE;v7|Lkx7^YRDz$qvHt?^cfHy^dA< z09HT)L3zorGw@YbK8n}URLeFewM>HG#h0Q*8bGE3A7Hnu-e(HivDK7@>=2u2HT_O6 zyCK`C=|NA7Fs9(;O^1}^#1@fX0liTlJO1(nyn^01cP3gHpJa#Z;$dmF(T%ySumS)v zz47TXC2_LNHk77~_KzHGiCatbMn+L*;l)YH&%nL-03$g|^hRjKSfs`Uq-D70SLhAS zI&l~1DDx*2PNZiGg5Ai)tCAiSJ|b(C6W!4=dLGu>a2hU?{2j1$Jllq|&hEquFy~m) zi9WUz0#8MsUE@s4Ils6vFP3L&>|b$tECw*$9iF zUjfh^HC~gf5KCS=7Ax#hO4N@k-~?V+3*N>;KngIBXN zgVsE{dzyO0)6#ggq%O8agv!LDhmduOw5FW6@pRp+`z+wvS>quj!WDNIpwK4j9UjLH zpfbqP4j(ql}-gp2(u7OA$`Krap%HMaXI5rcum|55Esi! z^k5X}LC3r-(F4v;^uVK%9uOCt(*uPF)5lU=Y^c*s4?HqG80DG>6bK<8(gSNEtrw;T zg(i~d!Ln%*&>?zI)kLBi#8Z8~>48V4LLQkOcvPha9nk}|P4&_Zp=Wh^zy&P3=z*C8 zU&T5h7qA-EI#s;zDzR+OrUcMs6325Az{Yl@i9{-ZLJ9f<8iNwE@o0W0yXGDaDuHRa zLtO4aIKHt=7%=z82^0<^$0yUhyxlbHKF%&3(VjI^zN23%lQ~+{Vkjb^B5|ELY3ND{9frtgG}AwU_~@vs2W zrnLdg+g72MW(y${QcvVrOB6z9C$gdCk_0Y7A#x+W1Y3|m$3T71q6(?1kCSjs2{KY4 zac9Y;1%KESe;{2*JKl@A(?k2Uo@5RFP#5V?uo8cWB3*+&T$=1EY7gp@%qF|{tzcVOpMJJEWihIWTY!d@IL#$Q9zaBaZ$p;;!U97u81}|8W2&pN8w9KJ(qDDlK ztN~YmbL=rK>EJZj3Edg6$TPUf0aEB|P~@xwvcXT5aHh}^r=xo*_F40sW#`Zx<3y)j zh?=SdmiD87`rVTLJx0g%-RoMmb2WT-xbsOS^|`5sS1+yV;ma?ro+05Ue`-xrUwUcn z3<>k;(u&rOlE3WI`WaeNE`{ZnR)*$PwI9dv*SLJKyA8Y3MZ3kRB)cQZJ_b|~ZkcgQ zWxpc{gYMmIoH<*I+ltK=ETJXd(3A#f;T_fe0la}fc!S6ZExhZ}fJEyj+46cjNg8kq zZ$CPnoS15=w^K4z1s02XyWURDS5rZ#QW|gz@5EP46C2V1=EcoY8X&rmSNq~i1JS&g zWMVLOA~Ft~%ah=d-IE9?aHYU(1!Bs{vO|glJ z;8QwWLo;wC9zZp9Fk74*hGi=c^C!StbA$h56+B{zbOIX(hQI4n8x zij;u(r5(mlAt9msNyt_FOy6P|g^1>bCu69`I++pfd(pv;Mlufb6G3L>8Jv&i_LyvG zR&xBE4A&KXytpfau5V0sv~bjhO&cw@qS10M8Z8HNTPyeHzeq+(4Q#fI*2>GBN1~}L z0mjF2k+NH%W*wY1HtljjQBRpH*)|=kZ4T?hvHH%iVYfoESRVg8-}n7byf?^(ZP_HH z&O&}1L`syoNINuoF+1<*RT@YR?asv2Z+l{uymQ0L*pQ7k7#!22mJ{3jHj-aBw+c?9Fi-r5wlI4=+45;rl>Rc3lhh*ti?yV3 zMpzNkjFh2Tjg=WFn{X`CPc--=c{3yGDCs@Z$w{0{<_2cO?KZK5!RUoeft8+DZwoe6)}Lk70%d%cn~bZH`dD(c7)i1}A*l-rP>fg}Pl4#M;6ezk*;w)x z8}=dK8ovPo7D{}ZQaww*3wVSMvel1&e~SVEGZCAMR?wVB*NXEs&ub+OIPp9LDQuFO zi{~r6Vr-r#qlMv!S8~s{Y<p;Myn6*%S?*p^T*gkm20BY2#R0GH5N5q3F`)dc)?lIA_90MrE6TSRvw1XfR#K5 zp()g}Rnb&Z-$AjN1~{{Saj|oFZv389jR@|EM_EZVyQ}ll6#UY%-D!ocT6c;*fBKu0 z)GlZ(jAaVoFAIo*mn(iUi`eWfwkF-nWQbf8s#SHZq>LDij+7hMR##$DM4*^sWLoCU zA%F@1AOR^u)P)PWUe(d`zvzwstGC-%KI{CEe*NPOB>w*IEl6r}2##ZBT$F@hnax_T z4AWGU%vKu-A%=vZs6yScDS9U4WiEJAcnmF%rH2CMCqb!99Nnkt6^437MAwK;btq0N zSw>MZ2Y7!}xpfx<&HjRB&QoI4kl=QeIuKAXiIUll3MVFiNkuC}FULMBxIFlAJ6(9Tm_hq{{*FVi6Zp1<0(7im3vm4le;n9bN*E9FA(Hy0z#}Mk9^8$%sli`caO@^-n)`8HMqSFAgu1C3SN=nWPO~(vC)y15s z9l;I@qc|15*zkqCLXDzYT-|0$PrAZBTq%7E>tjT&SUtkb8p%i*BO?Ef-4;?>@(jRJ zX|?Qq(Xg(W>XYK?c4YWcm}(=g&UsZSt}bd%rCx1St3L5&Ue(IrmdnqcwZ$;S*Rmf= zW}V{dEIg1?&w1D#iEwc+MIPaTTKtR%mq9MP;}_2*GVnHev^}!$KFA|nC{~8{B#(BC z8JTqf`uqwG>00}iJqksfOx3rXVojXnE+9tDUNuc6C*slG(^L0eNrX!!wSGHNIlQi| z_!3DXOHs{0{5-tEQ-au# zEmxMHgk=^}ca5#_gvvWY<-H?i-^*lf-?B|49UQ1oQkh8>@`gZR1j^Z_5NBRP5S0 zdM6#f%$m1dJ0Xg7{4U!l9UnPQF)`o2zu1~x~ z?`V*3pm!bWThMg9;vNRsemT1Tzry-U2{7CCw;Hg9!v5tv`D77=b1Pd<%K(5t^FtgS*1Hjq!xw<09 z*5(F)I_0pKUiW62)o;qhl3)dJO4^)z>XVO_$?)vK83g%}|(Ulo!j1mvlLwb>b%FtWB5GtWB3IUQ)%P zV3U`vHxfmwaRm&)q?MmG|yqi#6e0&b{KK7 zunf&}E*n3n12fnTV>uLaeJ-O52V(9wB|m^gCfCFRiEHE<-x!Bt>#;oc%;h^-OSLQ* z1qOZJcyI&~;)mBJjFdHT$Oy%4iLSRlw~}{Z{tIN9Qpr1zF{S($4hmvSRC#twUH_nniR^1JD}6InVZ8#bt(ic1{eZMDJ>F%Kl5W6 z3NTFK7LFn@)*iH57LuKq7^#|9@;p&STtA67ja)|oW-$0fR#PDgNTgqMGAD}S;Qon0 z>f+g0>-MATw`!t`&EUs8)BUWuLFW=RDFXuX_osZdX` zGp_b6sQ^?)wdo$z#0eNL>03(b={9V>Hv@YNYAv=g^3T)0rMhVO!U5OBmm<5j+K&L< zdg29`UguA>#0$-^o@0kmkh=i#@_fC9!wKJk9=}YU>aoMHyGomP|IyWVOY+hCSF`1SlF$@FH zy3aDgV*v-{tcY+*?8%fg*gs(uRX()b*nue7_4`o5Bv~yX8d2EO-3O({o`jB5L?fM? zh=wmHgMAaxaIkMqG?G}joM=G4Th1e>x#T4~pVB-4mt@x;m8&NZSf*r1{)_-q+jZz^ zJY3&V0NjV`yA>DT%1j~vmiC}%iCB3Qr9CYZayvN7Io;E?dzb^Xw}w||G4@abk8*bL zo+{}m9}c7xmH=WQ-AnO>!x7#hffYL28MAI9wP2IGnLbCDZu&Oc%SMa*^PFb;&wJzl z=^t)vyz|+O*8I^TJ2+ODD!Hr}{^@%k+IQQn4?67N{L#s*4bo#-|C5bOnF0rdXtqg_ z4I15T4?pM}#t|1xg$Ojl@UOqi0e;fQ6fP&{!0e7bKi`?CO5OR>p-H<8 zazFOtKT?3!Q)ClV6V{e6op?P~Dhhgixth3X7^z} zyJOicJh}PjL|8Rv^WAl`dH8~}`L3S#urizP=CgUfn2l!gGZ3L%nC~^01&wn4IWm)1 z=Ibvwm+xsVUoYm8^&hmqm(M0>HsT}(4FL;ASm0vb0;;C(^Wd&QY(o(`omm@bVKbn3 z+A~af10W$X-E>Dawg7MEzubrhF`$F2?7p{?=LoNc9>bVd4zH|1%g2MfLj2j^nm-e?{r_-(9*kjgbbWU!(uckM($JR z^Y)8lhsDT=@cuOv$Bv89onmya7`;=B?iZtn#pvtB=ut8HMlmv$`DqcN^&W;MAM;*% z^!?(B9~7e>7NZ{(qaPQekBZSxiqXf#=%>Z#(_-{=qZt0I9DZI7|Cr(Y_(9uKeON5H zM_zJ|yyPBDbU%;0SL3rA#dv70N*_q$@ z-Fxo)Th*;Fp2S+ctUnzvx!kY-{0>! z=bm%#t?H^)$st{1bt`$g%xuWN{P}wR|H9e_5crO z!VE*f2r~=?Bg`-qj4;DcFv1K&!3Z-91tZKb6pS##P%y#_L%|5IdY?0ff)QpI3PzY= zC>UXeppmjE9JACu^_lrPpO_ zT%etg%Y5LhJ&)OP6@y|86t>ZRq62=q4t^RRJL&p_$I2Yhib@L>`$aC^adm$elasKK7AE6vlxP4a<~Eua(?`3d%GNe$yjZ z@m%KTnV!Sh_>CV?=cmw`*g;F88?r{(7X(GyNldur+U<04tO|0f=E`gJGa8x%zSiQDo>J;2YukPsSfHa{PI1kI7WqoxL6}*a=ri zt|B^I?wki^W_z0t0*_Wm9@wp=6#Z$3gOc%R2XO#uB*!T6y+nn=&ZLvWF| z`uHNU;$qN-oe~ReeuVS=gOS||7YxMy;R59#ite5Vgo>Qv{+)r~sMz;|{Y6c!)?O^Q zp(Gyh8p=5#{%R;$P1#Bzh^p)bG(x;%L(XjL><4&FKW=@ER-l*^OWNk(@>d|SKEMso z9wTj0sy_7iiU_I$ad9oP&=6XZ%2gPi*^O8GWL_wWHdL0x2#E}@rjUUY3{i3Gz^I0s zdBFzz`VKe==b;rrkMgcc0w-ZdQ`*O`%D~J|6Rf>no+fJ7i_^53O_NEPeFmH7Jkm7n z<mk$RL3m9QT+cLVpA`zImC2MKT!zP)CVPQRnGZVCTXF%P3+Kv+hLQI?>Hi=+@;OodoXsi+>D_BP?5JMV(BrBaL0KClc(^gIut$ z2NtNJ#7HbuIZz~~pW3b^C;^_`fxfI&+5(Zv+dwMCQeqM?rkaZ1)v$yRZZU0zXSlYK zZ4Q`K)55B{F%^5{E@Cak`y#vAiKEj{Q_i z^zE#ZY&Z8|#C%#b?kCa`hiHj(Gm%=CEzS9;uY?U-niF{{h+*)51Feyviz&Cn)WRK- zaHbQ%L|PfXGtj5$J_ow6|USFs5w`$H^VExFF-^+yMqR zpO^8c$Q^?^8l5`mz^(9vdroEIJ~83+_`$#Zwco707kcKV2~S9WctUFB6A`R?oZx=h z#U^f)FO};mQND9)^n~<0%@0YqAAh`BXiNzFL>{OY`NZ@@dPUJo~#jfglBqp|4_XfwLN-n%X)VZ!9JSat%{!odiR;AcjJK< zu`tVUlp=r-i@?Hg8TT!T5c^|mOweD{xeS!byn0_!&P)pkeQ*MYq%${nX-L(hpNjs!>g_Xn5E0x%VcNNmD3o3~Id# z*OfY_-`0QF3NuNlQ25sojo0l~F|}N>*iV2xgv5#+_))4$suR7L(l1M6h+i3ZyWZRf zvhkrkRWA%>sy133e-Sb5ZVGj!aCuYpD_rol{=7qIn};KA5Xs{QRST-v&|kI(wZ=ax z3_i|$(u%UdFFdpH;p9MWg7J_4iH*M;(M^yS)TQSpDtwD0#QYhJ;F)mW0yLs>U2qg! zu=%)YX@Z&=UiqpA8bwBW13Hwq1wV-Atn#Y0+nmtmN*kJB<{<4ujLJ0Slf7S%Ov1XL zt{#vJO}M@Ly8_^kRX4m+jA$}PUexlSkLc4lva>uTGFwKB|^er@Ek{Wv6uLF9;GK#=f&$U*H=WsyjCVob5-Yfl3JDc;F zp0@K2u-7Y-Ex>Y3h34VX=nJ+Y5T?*_e@QeQ1dI0tmk*cZ;_in_`c@B@f~88dMwYhp z1?Dgnwz{5%h;@UL;UC{jWYa|l1R$D8VUKCum5+y4^8zf!MNs}k{kG~Z9*OKA$b^(+}F2oLO4@m;Q0U@u1=g^c`UN$5bHxNQKrM&Kk24B_j(Y^_# zXElFF&qYG1#DNlj5=zhNF^Vd3UmYw1K6cU@lGnD$i-MvY!?%bRn?IO}ta9|4f=k624VOV7 zY{jf%{ja+xkz*dcmf(`~MI2cOThVLerJ~nt(GBn!CwnS2h5og2;Ud)D)*VH!iFp## zhRz!PN*2Ao!mGy-ZAyRO9Y}>#hZsbV8zMo3b1;t_naeOO$bz# zxGi`y4_I#^VQQg|#iWa}{n5foiKRG`2du4fbX6AkUI`< zmKUr$9Qieg0YcW`n2frp5Kd8ApbLzqZvjU8d(2$yo8Qr*$t6 zQS+p>*Qg>Y57OCvGh#erARcjqR7Tn|FFcUJ76kDYqhCnN={Lg_Swz1B1v2z7g*8Ns zmVI#u{ep(#L2ujXaD*l#4U0L}O4DM}`=;T`j%A1}=*>yZp#{Bh!Aki`yPn4&*EoZJ z&r=HuQ_XIUM^E*7Hr19+us^aqnh;i8P!@%u&vzD6J#@x*nHerE&Nx)LBBp4E^YGUv zo%3}_-{u-}w%i0{$LC?T82}jA9U2dt?cF;A$TpvCQX1lHi{Mpi#u|_9Ys+ZlpGM># z^bW1oEYIQ?U*&V{Atf%8^H1}DRb)DrUbM(}?eK}lxXpnjceE9wOC(skNa`TO(pORt z!Mn&_u0=={x5Da5P)k}%P$LA}2by}SvC40bRVO-UN3SBCHv?}@^eBIG=v)lM$l05d zD~5o(52R&W8n1ZVt}i|oPAKc+If~YOBS9p#GCtN>+j!40*+L`&@u&u+uzRe(+6w|; zg8N};E2KtKvAZFw<0`4Rtd0ZLNB%o59q$nR2b*F%i`#Wawmx=GYkllS56vR^a-#LI z%lb$+&5E3pE@#0RlAh5}GO^G@&(Xk;u(f@ZH_?AEB|(&+lu_~VMp4jGlP#QpgK7cQ z+KJ0W4`$%=wX-kb)Sk9;Rg<}5sm#~Tww71z0%~h#Uu$PiaXYEOEbF#*u38m5YhK$I z&6ohD0G`L~J|z*D?UacDBDq#bD_M%blP-8C6oHEuyvIQVf`*xkK$u}E0w2Xhc>F}* zVG92vYk?l>_b649h)fn z6wDkd`xH*!GQtgVY|F@k+*8(&#_X&i;|9IhQxr$3sphS6kh?3@^)jloTsZhBq9X{$ zNIMI1^SE-5yE`A`_8n*ma;x43y*vwY`=#=5k>-Cpv^~fz4-Fxr803zP4T>G3pK--a zs1-M%R*EK6kEax1vt$;~>qA_Omv_syiLiqOJO5(N>jD&y3XQ#+8wJ@n|FUO4&%23pY1X@s55T zj8r*sWjP*gq&~^`KIum4lSdk<>)4(Py}OHy)Tx8FY@}Wk6+fDhntG6X)<}J_8001# zz_fah8)8wAnj_kxZTrK^EvLoANy z^hCh`lC59clLuu@v$#f84X!I1^(-<5h)F6!S-(H7c#x5;HOa%4UuUn!bwn=lB4!;C zt#2_G_$4(&gyjz?m?3sGG^b2CXxRz-L@Zl*#8Q`~3UioWGTy^{WD&~^Mn(}!%P+_x zmiTlwdA9w8F7Sw@hI1=W@m%La8Q^;4R^Ck#5Ev0%0*)0Ug1Gbq2Y(ZWxaDD3pC+74 zx|+DM9@q|Fl*s1pYqcASd2&Rmfa0PQ%;C;TtV}i=67Vhij0zu`jcXD*f}d2_m^t=f zDIC&^0aQC`KhMwEk*Z2Q@z) zx=TJogc;(iC$$V>fW1LWA*n^lcuGd$Ng70Z#_RUwbv^DygbbtKwVM_8oWJ@FyZQ}X z{Q@tiZ9EuGPv_{^eV)$IDW-EQdXUPkRT2-p8xv&O&Qms4=}@%W4p)g?2*J{hrr_v$ zqX>@9A&=;r*HM=nIC?`z297=$j}Q!S+CWa_tHjvFFha0wFi%XO-BIx)14p+u14p+b z14mDEgWt!r=ewgRrQvFL%Jn3s%$R0DpWET7a20~_XBeDiTRowh20DeAly`%p*bRZO9D=56R8H1o3zmjs~omx&}*&gE9shS`UU@q73l3w;e5 z8$d&=VUX>ypiG)dBDqq8vwS$*GV$Cw*ga8sdbKxNlXqCDHwr8uVWF#-BjW_FlMAxA zV%0xaiy#+Y@lLQu997q!Gr-~}yrqPm=WMJcqC!&wAL({f4d2yBJE|5RT%%^+mO zuYl>|pRaR{Hj0MzF)Y5JuyShRe`b)(S7Uj9__%&of{Gis3n&nN+#$xQeA)z8C3qm- zocGhxoq%}gPEBBZ7QvLdw~%>aPbcUMc&w2|Y`LPoTMIZjb`7OdLvJCPY%OGSZh8wi zIo1M*$Bws9cx5frVW0CBaB{2#5Rc$3zg~uX_tPId+%9 zdRPx{#+Ii9>tQY6 zE`#;37I1Q`#b7g7I1RxIS}Lf-f}m#0Q7O!TfoV&Ysi24y0_emEl|-tZ+QUL zja@`?;RAk4)FGT4Yh&N@Z^ky^E6@!pX5V$kuRj&IlVPog4~`^TlIe<2-RV zJdPoR0+JK7lDuw9lCe{UlXDD~0w-qyM@5_*d-;rgV1ya=fe~id2S%7-9~fbVePDzc z_JI***at?KVILSFvJW^pHpW(1XFbdq3PzY=C>UXep1tZKb6pS## zP%y%aepkj&Fv4wb$ruVoc-dPrhJq1h7z##s-LJ_Q3P$*Aa5VMf`Ra5DL0K8W8HZ zME?ePO}7s&S9-tl-D>sOh$(v(Oj#C2OcG{pU@>OrWFe_3h` zD^TYk0MyRi46bcFH~hPH8INME5hN{&n(m8`v}dKBGGPHMkqna7jxtDEwhOSc4oQ2q z1W9Yzf20Ur(*ygXz9Z9~ku6d21eljW&Eee6=xWfdP`5qrIv=NmMa$Z(9=?lSHHSq@ zCKI_5brxl`H^ZVuS3@(W=F6~X+wiT1iXOhIKR58xG-Qn;j9%qF)DpmOkH(@^62?g4 zDt6>`Dd2QQX%T$pShQv?WLUJ;rKY;n4eSpfw}4i8bTX{6qp)b3v3IX$y_>9T6fSlw+B(!i6H2&gaoTx3H?#bS5kq>4MN6}=Xf=gq zV=us>t>;Sd4H=)dGhDnL^VNRBv1pNhGGwe0A5s8|mW@87C<1Ujt0?ABmp63;*x1qK{AfQvx}G21$d7L3 zM=#_@FXl(L^P`vZqgV4IQ^xJrOx)X%3tNetH}mV>%8%a8kBnOE4x<)3GHS6SqZT_d zYOy1u7CTyiMJuss3yBNpqI5pF=u9!`CD(I^P_!qtU?doLB}ymX)zXeF2xbJfS_l}~ zH7Kw63Dh!-EvVqyB9@lT*n-Nt=`GmUb{FdPj<=kPEvVq(z2Pm`*w(To zva)M139JQU>@9D3JGMM6lfbTdC$>bl1X6Cxffe7b?$kKY;3z|-)wBVD#xOI)@*ER%du#0n2l|1ITkH; ziP_lrBn>wf^jIR7z{r9sOFAf4H>L-`vY^dkfPk@v#R0G^aI|35ZX0Ut$Y5%>%shE| zB7n;$C*k}=NVP!OUYZa{CQ2c&Pl|f#sI|t{FPJ8B2ut~Um9-IU>;=k*3kGMXjD4`a zcu7rt#y&9A4Eylx8TNspX4nUYnqeOpYKDDas2TQwp(6Wa3=Tt8ygy5ZnxvmKhJpj` zq4PrN3pwDElYgDEUdZi@#a`*Uq8%PYB`ijjW*Lii;c3=3t#b;wqzf-#LDU82vtD?C zuxLBNjIM!2D{NCrik?>By`^#;{UI#%4DC4lB(z%(sxo0!&DZkG1qF2UFI*^A^R@S} zkMe51x>xhHugzi6*0XB9c&=E$;^&knWcQV-`TQKgMmtxo=CgBN&4++d`V9Tu_pNa9 zYCfx!vT8m>8o8jJo>yjpt0O`TA7z5$QFYu_od-4WS>1=7&Djd{5%}w`zqpvYBwPg}z&CamPExP1IGT z_d$AvU%sNu8Dh!Isd8*ESP`t+-f>4*wAyD1e~n#isWx@L0m!eIYQuK$s^&8++H99) zFXNMmYP)pSv0|y2mubm6E!sq#Zfe6M{@-!vP%Katov`<{W6|Oz@oGLsSg&+OShU;3 zTjPi}jBH4OP!u%BqFu=_XD!*|tgvWTWSz5#p(dwEm7mP<5g9~8(V-5z#E$CtmMrIp z6s2-CpMtB{(I6UB2|cZOMZ$`I5Y!~JSywfm{umam+EmS_cUiS+K8Dx|?x@`cBh;gE zBgdje*D00s6*yuJi*{S2HsraH1=)|23=uVYX`l9Nuj8D{OZx_6!Ay_#h@Tl1+m<{b zY?SzmGkIy>u1J1U7gO4Yhu|V_WwK(`v&bm)GKf=XpM9iYj%y5MYt$vPX~W9=RM4{_ z1lm5$csqC<(ScPdc}Uq32NK%cn?Y<6VdERms>BOyWhPoR)*?jpG_Uf5)c~UHQrOdm z1fj2mwMvF;tQ~o0aZbA;6wzWVDy3G*fM|QFRbtCiOPnFKOWK7fa|Y*>O(dZjLXfN& z5F?Zj9X4y4&m4%>hNmz`+ms`g=V(x#qt$GVEKP5pl1WDYk><#@`ow||nmErW%n|7r zagJd0o|1?*#yEjaI7e(#tnEXYqg9(Dn;@Skxq}%UpPio1POn@^*29TuFu?)|=314z z7GQ#BXQyYCWD$inn;pyXkjR~zowW>w)@O&Z|2R7s=o z8R__wRQ+k3B={?BM;0PlP?{vf@ux9KMXlg;CMmhi)QFROp?%DFN%>1A)?@KDc=Az} zOWlY z$zehWz*mxL?yE}Gksf+p&Pq|Xs=fzO5Ldtx!{n?$VVkIo)v&skUOaob?M2O=+8%e7u&)OZX6cqJN(~NIV-B4A{p`_JTMsA=|mt{v~xqu6wWlq zEz=xX3iYX6dk~8%=p!m-5I)2Fx7O zoNZ*VX^eo%fCjHet@{U+?J-kWFtkgaI)tZM1)d_&e#uj4Qc}21Y;-+dJS8;RB~Kl~ zQ;5@iokC(Qd1}d1I5{4=PRVO@T%H2`hy_l@ZZzpl?JJw~Xn<|k<*?~aPXo+=dltE> zPNV@w;2w6SIi3cHlYpJGF$~-cMKg$;WljRzN~m-Lb^~V&Zy~u#73t(_=;VZoD$E%B zFx@d_d_@?7QpQ)%JSp5dTp5@1yQGX8Hf=9r%Y06hajSDA;I4|tBhwn zfiiwUI<`B;AEu0B%LrS>+_XhyTI2IS{XALoHbXZN71C zCtOAz;-ZMrVbhL^Wjqilm*v>Bh044Jpq}*{Dib(M z%IA71(a%bFhL@vu%du&RfJAIsi-mMCFzd&_rnNwqcf4-Dlw;E>|BZK5>C+UOHadZ3 zv1ui}x>&}tYAJ5itzv5O7#*7ytII0mDt?`C$#0)TJr6?)}u`;SKA(4l;q;S{@xaS#X21LU0AhX_JUR0wZM~M)e_D* z3ab`>pbfcAPSfT|f0|&`b||0mZrLKLK*akoQR*JO8yPid#S{4pnQ^6`^WdB__-tY;V`}7qzZt zSh-D`d)x|4;shUo7W{2d^#!5RUUUhut-wT|g$j95ClE$bI$^KT1&#DYX3^1UnOeN? zHdPd*(@CC#qVI*CASTE`PtoX*muQU3g`RC)D|Fg+UhAnVQ4R{|wA@Cvudxc~v>ImB zdXkMiMW-cNw#nn|S9C#+PP?tbupwRNMRxcg%^x~sE2WCwVVhvAqtkNa1(#4QeC_D8 z!|*gKFAL13@a{GdLxxT}GIUyXd;~rokl9aa#*m-KMyGvJm9$+aWumyceJ3T^WvHLy z3#sP;?-AkMD`CsEur0!`cy>5RJloQJ=i}L-7|&isp_|6D1NS4xX-(6Ke ze7urHv_U=%aZH;gQ5)fl@<-+o?R6`s;2dJuNSVA{?I5X}zF(I9t9+L3|Q%4@zJ zG4_bjF^@mtZ99d#1 zn(`1fSeUrNb=3?y?K+R9mGEfLC*=MFVe6rVtsR}VOE{aw)&TCMMo=IxIkL@xi#!ul zFbty@$p#WB9hM@4%`&Kzw*Vb)kS%VSwar|pz7 zKHx=(Roi+vN2ev%4d$9fr?stzC94;q(@x)<)F9D0m@!2B85?9_u5biMJYE;&D&d`e+++ zFrvbB8IWenoA}%Q zvq-+oq0=6U*|g9v1~%%#Utn6bS`OqvV9|{7CWiB-0tY3CC~1}m zmMxo4*s_VV(WmqgGA$&w82EhUTvIr2W!lbFP3DS)GG93@U96!sQet9FD<^;)Rhd^( z{cYtOWV=enB(RtgMi@JK5I!XlcsM%kQUsoK!8@S{T)f~t4kFOeXv{3ZMl)(xvSClx3fz)8-Q3F;f4q^m8*uW|Ul&OZ5*= ziL_P0O!4th^YZai|4>jriA@xJ3fM%^r{L(cC7*(jHfWPM}}^8lzuq8irrMyux0nn9;Ehv{XgNAH719lZlBq0`1NH`Yxkg}Eug#Q{?a za~IHQSBZ$^VQ#-v-t&k~YY}Z(>(elI+hgDOCZS?QGU$Xk7>8~`;k1xV?|WKxFcJ!3 z?xP)y9_Ge~aTm?-v`i@W62~PM(P{0C_PkJG8s;{?OcjT^Tr@7MtARJgy1_$p-fYz? zN7$zPBaGDZCoxiO3)WbTR5Vg;3)V+7Qdd39J*%Ou7sK2{H*X~~uGm~M;Pn~F*{xCPBGhR0ci1S&~X&JZQj z&WCbV&WCm*HmQYn3zv64^cc?DdL-zyt32G$X&;JH2`zI=zU^pFU9hbx)1E@RbYdFX zW!t1_XqVD!p)J8-q>mf)DxuznqIJlt9GzCtUj_bWg5)5Hn!+9LV7x6jjNinw(UH{( z-vFmo$b@q#~4#PODg*C$h`013E2_F?8CzBSfJR z<^nIYhKSk%`CSMJ4k=7)%>*sGVMN5TnMW*jS*qx^oQ>H%Qdbn*Ct^ul(ju1l9;XpY z`nk!o?Q&f(MW;=a`CSL(iddyZDU&=lZVW&@Cj^N7&edL7@r<&^}Ng-+Y@sgv`Op{ER(?m!nP6y3BR(P=NUp6cmjee|JNZ9$n* z$*C~2kg0cdSohFpj!sL_+!UR*&h@zAH12d!gn+83SB^Og9Vf+#80l3xl#A%Jofx}! zpjf4~bczvmx~1P2KkJG1jMweU>w4Uau8TOdt$u(0>No6aLmCk}EgKXnG~wv9zUQo? z)Aq{fwDS*A0d|f~+cM66%El_~igsHeC3YcnT01JD({`rlv`XfP=(JoO(P=p{blOga zPD`|vhai=iuf`Oeww}Ynaui`1{rC2khVwy#L zZiS~p3c>g@44t;6o-{)G3D9ZlF3+Aqvmv<>a;JmPjL>OCCDvcFx4KR&hGN*a+!y{H z1D%$@m7Zdtc0kLgKsh`At!e8L!_S7?!1Zj%?Z}4Q zj%>*7$cEgGY{>1%hTM*9$nD67+zx%n?a+tZ4wo2y5v6ZOv}u@j=klYFA6?Fm_Vc6b z`O%I1=w^QOLVomOesnuOG6uC@GX}LIV^BLX2DKw&P&;}vzxS>D$f(868nxJwQHvcJ zwb+qSiyaxY*pX3-9W62Z(3dfTE=Q2KC5E3yV~OFn#PE|B#aJVQz{KKPV)(HGilZ)m z9ziiFd|6`nDeZcR;rAE6@|ADkAEa!R^k4JxUIQ1fT=THR@WY3u5GH_smeaY!@Kf!} z62osrO864PFDpgHRU6|Gp2$gVJL7YTC~>gh;+(ZpfQMUR_(gz(M@CrG!tvn2;Yrn} zFiA@cztfqd!;60&b&`@LhM!7wmKc6Z3_l`+bqD>Mmc%YX&N&eDBw#PDNRxYtSYr68&>kOa^J%4c@F(BQt|uTvin|=B zeu?3CG;ZS(!;gBgjw9Jw78UiGhQ_+Y@S|jOiQzXZUmiaYmnDYZXCAb6iQy+0j%=wv z46Fwj(`S5+C4qT z@Z+8WhM!OXwd>eChTm!q`B%d5TXhUSZQ`y+E;0O;7=8ulz$J#?62tHFjNx~wS~XPM z%J_f#%m4ac{|B$s`Nq~Yp*s9-GOm2NF$R(FKl!z4^~U{6mGSLKdiHXK3vM5b+LXYN zne+Fmwinr10f`Q8v9%gU*OK=0wH-gIJYO41Y@XFFahzqBKb_LY(CTHsUG;4Q*(q^9 z6mkAKR&5O2UlHdoRpZX+vOOW;Lyx^~c*6oF9fJR(76Sx&AH-k!NSPY*ELQ zzriQqpIl=<|6a5mzF*`CCF*~}KU$?~hV`^;34PwuR+>UI>?Z}4Qj%>*7$cEgG zY{>1%hTM*9$nD66+>UI>?P!Vf*B1F1o?Smb8s-o`F^CP1cyUwV^j*MFD$f(7Rj9To-sKt(qTI|TE z#g2?x?8vCajvjBEze`fNN;rROw@{j_Wq*qNx9=_2V+(5Bb#J*5Tb{nf?&)^d&DgSj zE4k?{FT|GX0{FLUUW_dlZ-J(6Ew^I}x$G!mLfU&dwy-V0%ii*8Y{AY(S<*GH$CmTA zlGnZEtFdKUsOff121|BM!pBkTQc_&`;%&p`d zZ+SPiJS%O|p8Q^HdFod3p0~UoTQ1y6-uITfu_fF}?t07DW6QN$$=AK*UTk5*<9pun zpceM-na6ePLr@@a$LjxBBNgJ3Oeb!^x0?7p|KHLta>56#e9 zHe<^Qo5g#}PHgEu63!nCRq^Lsj?Y;#R1rAyC(BT9fN=hx^o1Po$;rPyVc%gSjTvpe zbp^Bw*}e*~{sJ4hj34~<44HQYnZMR&i?c|7CSY{g*0t^8zZ>GW*edQigsN& zBiz1cv>|P4{P9Km!=@Y0(jE>**T=PSJ?xKbuk58yVoQu;_gl6j?Fpgr zNLRF-;6U3;vHR1(XdtJQaQn6y9y~4Uat&3OBKu$u5H@b9k3VAM`19Hxlc_d#72*ZE zY+xli?z>db8i~<;Y>b4SS#@tO%JNE=z*P)Dr_Y} z)3>X<6|zEqkQJ*unpSZ8M*4*IcOk}R*k>qP?Af%VZME<`X}j{ZF}t*MXl5nnmG1M5 z8ji7$@Nh;{M48ZL`yo}>d4;wx(jM&Wf_)GM3=c2ZI1nMKrysCO%Ezs*(W*=+eyh0O zAX_tuY`S>7g73sGvVpR=mMLKWJ!3|dD|AIDrE&%JxDk3@t-!upWL-l8iquFKC;`Yc z;LHJ3lL}Et#5l$6Ti1N{Gu%EKp28d*6B&*l&j$ns_pso3AZnBADcN|1foShz7jtqN`Aur5Mk12XZ zysp{d+K0?e??AkW8d{tkCRMW|-EC%e*bNeik+$RPbaPb26`LJ68mhhL#CsaEGrt(| zeAoy;Sle*w6efw(m!G~#>J%oaGc!pn)}O{C6}5uXnWW@4QzK6Dh4!a#nvUY7Dk_MH z^<&`nMUlaxR1_I(wpghkGFTdVX-9G%N?>nP3Hy|7=R)07lxi=zjkbe{CMBh#5zmwq zzpIhmVu}hngztFTi~Dgd!n*2JW@Egb(ZX-hHMqc`*k>lg18cPwU=TA3fn+s ztcKOS^db@rtztlTc>j7Bpdxm;oMNdFkJ~a8aTQ5#Y9a%+feD`S99FTuu1?qW%575+ z*Ra`-QV?g#V2@T1x1xf$<>THuV%$%R+ebI+(&+Zcu_$5XU{)Ns0gW31eTV-WD2xo9 zj3x64JRk`Q4I`fj1j`T-+i+bx(;RnAb7U#hr+#WPuz^JdZDNBh2wi#Hl;zQxwsTcO z%Ic_}D~}!NmvyO$qLoc4kE?7Zso6U~Z8GI?BZv`D8PMSM6Px}aEwata?DS89+xOV< zl;iff+Ql})OP)fLlESs*sUvynB)EN#9Z#`{<>C>EwdAQKPvPWv=sI;0+`eeiqx(gZ z-qgObNsk8Dc3lpe?({Uk_7R%Mi8R1A8X!)Bdf7>ExCWTx_W5dsW)L~coCLU)Q0WGH zqqaOf+RFY8s$G!PbMC-BqnFXtGUMwjJ?k;8}$%s>8kwa{26yb~RYYth7U zU*cNPm)Pei{p0!)`%zW28wesDF+nF<*47U2vyE#~-{KqXxq80Go5$^*<+`b|D>mVx z=pLx*Vz~i(;UYTNeH5~&lXpux`HFP%bug0%{YWQoU8DBy39PtR0@ok>7 zJEx4x`CU@ROSpX?=^o*&{mdxiD~BoL+eKx3o$+0FWgLI&tTLWC&QQiLO2*&Pn%*Sjw+)r24x-V$2^GMjW2V~dZFi&4{L;{?bbb{qM3W@4PIDnVQwar=0Y!xySQ_A{QJLO zIT-&8kJ&I|xM5K<_7@-Eny^ewMlE*tZT0ybg|PY5#_aBQ&PG|CpKuRC1VKCgxT4g~ zR<`N71yF3PFHexEce&!n|HKBEq|9uLUkI()G1h$po|znEQ)z&FabVzioBWpK3a(5| zJ}z2DL;JAfg7D$$`%d1Bs$5NN4ITr$0fBJ=;)fJan`yL>{0lh+Mbm`t8w^@(=J|e{G&)Xc9*LGS+l!{GdM>oworQKNwEZ z^I~z%?DoQW&1X)uTooGj+KesjvXt%j-n1#W5r%XUlY7BLaJBgW-%1GvH6pF^tVrvP z60I{yGqetv%-l@q<<-^uA27)xcBW7~#3aY(`YV0+4>#oph?6{h@&SGC6sPx>|M~}X z^1KAMq9y6Y*Ll{H&c=s;>s{1OJjslt4VFQTIj(XW_Qr@XsGfs1KCY=(BoQAlFD(K+ z=m3rJ=7gJVVl*w__c5VgVt!ZZwQ9A(b9E&vxW`qp+w_>b^m-^5NE{R6HZ8E+WIWXK z#8R6)-Y(Y#JCmN6zQIz5lp8uq;0_-hL>9C~v`e>b6HQHq&)Wr17I`;2P#~z1!%#QNWacEtzYP zxOqylsq3^_Cmaez@1*3M3|XS}g-CRuQx^`>Yhlavr!B&T_+&UqB)Xx``ABpqMxs}x zYyDUM_y7EV{hjy5fl0GS^y<9xzhOJUq3*?VMW3^ug9-dxDH84H7+E`4-a*dJi5>}q zXmYyh@BZkDKJIzC`*3ts--z@`)w36?r(ZlsNn5IfD`6Lnqy=S|xA6&Ia5rg1sp*6* z2(KHin&Yb!i{1@SC}Pjqsc#NFIyc47SL2!;OLl1Bnc#?a(}N=+GPua(AK~HMBIkJF$ryT0#TS ze=zD;uq7j=~Ut=sHvH)d0C1HU+sgdAw>wu>sR*;r?@Od4vQwuA~XW*j! zk#Q&-Sz;;9CfFON9GBA zO!^)~j5C#mLl|sZ7A3{k&G6pyQ7%mNwTDeLGQy`i<{6l_%2d0cEDA%P?<`7s=!|dW zGj3F)8BcCA<9OKHVF#J@XmfrcpYu(dbLKjmcn?Q?=4YD$I5xf_pi3+Z`D~M+5NF#n z7Ldni2^r#^^G_r4Ps1}dSdhgrzVt`Uc}VseZ6S_j^B@$*vKd2rEC$U3R+(b1h75AV zPzP6A%++Wr^M~53&_qNvr9H@OlpZWW+T@QSafraSWdooVm60XURir*Q!it52+BJl7H z9+x6eq4*}Vq`*9k>JfSIE5{N6<(w^x$e%<6E?)2+2NAd!ac?OCo08bFdii)L#R+lm z@e+ZV!f(3vX=s5bSNNCe-|5J{#fW>4gY0AJ$kjjb_)`7zoROvMGnYrq-k($dP*6XK zO%#0!*hJznOiMF|%;k~$6i(kV!UJ$@%Lt9SR$vWeePj*u0I0g58rDhoH`Tl~E(NH~ zVS1UBQ$7;Z{OAa39bl8k05$yxr2utfK0w`;uK}wGhs~-?y(~cOm*N9b);_Lo4^Y#= zLV!9p;+tdzk9L$5yA0igV!4t{-{j8+=}dt7XcNi<)c641g!*(4_blX2%uQzNG(g=j zI|na2S+~(MQ`PHZ-C((1z{0#At{q{kZeoh%wyN@MXN}Zww2``7Hd3!iIm(Pw4A_nv zsU08TPH}`kiILhlEhDvqhDJA!VWe&{zMELBX15<@q+U3Qkvc`(D;udnRQza0>Z%8* zXQk9;F+fc?fNAvrHN>I-HU8#ufO_Zw>LCGY4@$S?O5Rf}$b-HF76|%=XYUMHFo_Rh zv44fbixikyI`Il#jHk`@y+<@W56r@PVTHFNvUC8$%G@W}xzm%-(xP($QCc4n69GRYA?d=IJu;bg)54Y&T6j&yMz!XauF%QmukGvV1^eVLd06)HA)Jc8yR?b_qr*;~cj*5m&z|f7)Hr6kfGp!A-t;N{Vxv zQd0WGFun3Vlu*KxG>H830_IruFII-!2ga%jb?-);62W#c)|kYU24l?>+8rV#j<`c4#!>L6aI~+d)OCa3 z$F!Rq5jCrL_)@s8RfW>ZaLJfvL7!XUdbk9^_%qgiPS>j^bn}y=>|O7r4Sevt4IPAL zewN{q{ImX=i@oc_Qnj)3;bL4KJg94NAPrC0A$GE^D@fz1{nD*u9|;Z61W%!j^2@(g zjYqKZN}djx0y3l&Rm+LmwKbMEDWNm9+CBa z@{lTgt`HGssXVumScorznl`dTWyC#gd`o#Z&uA%N^r4!wpxyy~cZP+z_nnK$+56RR z0EtJn{3fj`kR|Dfk2+Z@qQjb=SSR4iN1vpabk8dK5ln~_Bs#K1r-;A~4)hg+Llr-2 z+uUPKxs!G&pb7ogQbH}~cqD#sBHZ@uuF8mnm6vXySES^wh_p5Y39w^{M5A3kY6qjO z+HDVN1R}7kE}HIk!ul#@qD`YzZp0ngKzvgC%VKvn)6ZLB%b2TFjPCmRfS()8g*fW+ z-q*PcMzUh`c(H{zsD5(&d|GR?tC(I>F{OIU;f^*g*;f#hYP>cIHC|1KwpioUBEy%^ z3UshJ{`f!rmw#M?y%7zT1;slukl>|&O;D>QNrjbCEzFKSc2Xb?8)|-8C~nn)!Q};3bUy8n)Hwe474x&M^u}+Kt(tJDi3Hx~=Ol2X6ERYh+!c7% zsvEVW+p-Re6}eU{S4XAh!*~{y0&o%FNtKeXz_?!-Br|Mlxl~y({%CESv#o5FHNAV0 zZP%S`&xrERBixPhg&wr(Yzv->DF2MK%PHkEV?F8N^Sw*PR%Mv?uKJMPeN<*o@82Qp zxvoy0A;vn}NnAhb0%}TNz+FF0^dWqJ?eabjHk+W~fKD}{lj8~Som<46^?cPFe~WF>~C6If`A)kwO8Kwv|KjUemRg|CWgR~Pl(QcgOMD4PY zFNz-Rf|c?`vA~Ii!e{41^np1}%-ArwD>iH{WW)N=EZE6eu!+Y37DU)FaPWO&o&}9x z_dQ)RjE3W!1=nCfF&AmM)0K10S+GnvtU+NVOYT@e-3_grISZD0SBC|Qy_;ph+1`Cr zWm4LG&Xm?TiHzQD4S_N_akm1>3M-f}HoV>LwNk#uTfesW})y;=j;h!NQ6QU0-}^ z?xCTT@8d+Z@+b&W(DvM1Q66ksm-0tDYp*iUl_ID+kiisY;qj6>YGl8d4l$&s0n-OP-n zIHDhFGTv&4pWKY}JM<=ghs;Qhq8Z7NnUOW!;P){WeIs?KsCIZaNi5>6QqqI_h)%N{ z8)i953DGam&qw%GlobTwj?5n$--&4Mp58 z)6X8VDilnm!m5Cqg6!=BrTIttVZi$-Ob}_^jxv{t71miFrBqh3S&?wll$ghd)ZT(c z-b!cXkKhiSm&UqOn%@3?1pop3(R_*<37iIgIwQ)(y_re z;DFwbUQN#5Prl&>ISx*#j|eg}foPC7wUANcHA#aR<;*`qy%=+lk3R!1-GcJtDIVJDIOtB9-*p|3S8VHP zK%nz=ADi1|cE>`H=(CQ$Cnqb2WC6eyR77SuJsn?*pbItxZ`nG> zZ_AD8dihpvqX=7vpkMA%_38&!m8y{5x9(GA{)t2?P~;uf21 z;%7eD-8^<@lWiHj*`9taCGzQESw5dlws@Xlv%Fr-c-%6+t89GHizZ6s0i!Y(R)8^l zWdO0@z0s=LMr87hQX??$B!y#xOr33;mN1sivfbFY14wS@Lhe*`>`rQEeZku-x!mdQCf+>=uQb^aNkj91$-uhgwS}=yDTIgi9AfKE*;)2{+ppZtpFt zjBs31(nY~pk!0-i2VGRV=Q`GCQ_5zM5y&JE7u2;j48pcfM+V?Xlt1$#(nXu@U^QLz zCr$dZY9zwM&9GyV{_Op^m`s+WKPM~E(L^IrH1e%1D`{9jF%=mv^2mQiNgp8|UrKZ> z1ub6yV#DH>(n-_UPJy2@%ktFtS@92F)grT&Uy9R)l@14Rw*OM z1FH=LS`W|ciYru74*}DWLo({28dFo&iQQW6t#nYl=}LM)>X;U4kkOr@7HaWUX`y+X z)tsE9!@2@$eoI$Cdpxcut%07*E1+}E&Ulll8+6?jP(78-EYdcj0$T8ON}Gtj&Vsh# zst5{bv#5X~pluvTaI~;7qpKLT^-96BpBu24nm&rmwlT@Zt)QApU6@x(b3a%|=j-WO z(OHT<8l9!>%vsIm0l8Y5IZG{>DR-8xOD)whp7}|Y(xgVR9;B8^TU;xurO{71RZ9=| zeW4(t=aHG_;5*U9DtSw4*lPpwYc!@aep0C#gWT=4i*8%+ldd9BGC!%o?qz;bQ%_~g zbO-?Ee$tJ@JYIs{E*L54Kx%2XDpmRsj|qVjgk?5goCtmlu~MxLK@iuN|8r>>LA^gQflNfRZ34tF1w#I za*0m$!^x%SR440XN-kYl>X~~~qeN;mvQW^P1Rolvl14YFm}&^2ntQZE)JsY!3Fb1` zccW5D7AheNF6yF`TEI)*2f0hd0^$Qy(yrVVWQp*6>71E+lqvvxtKD2Bl`nuS;{B9TYNwLAaDQ%TjzLRJ~ z%()&mg;yDnJuGmWG6>{R;uSV=yJm?-x`U1@Gi9Vi7?Mtjr}M+I;{!#6a>||Mhx#NN zsn7}&NEt??ktp9t`4%zJs2MJ3vA2vIt5>n3EcrsY5A7_`NYUU}uR<|FOf<41OEhYG zqLHp5vELGnB&C%%#G8;i6jOfe$m&(>$P$h0$P$ejmYKxuK^Z(}r-?>~cC$fMD~U!V zNKz?qDv3t1+D_}i1y3|$d^H`64RbM{Xw+nJV!&gfk&P0=cFaU0QiQTf6{ZvYB$3m+ zn9y>Z5*5;w3MDFOOBpG0=8(|RagQQc)|!`*Iqo}Thv@5h5{1W+>%bEDvhmA>owBB~~pL)C6L-4qah zwB}?k!iU8mUZeGyL?ig!`l#^3aT1MeB+Ch4mc%!$L!zp3!MwyoqkLZC$ex8yH7__jGfr9Q+M*02z|CgJ%T^eQWu_F<*)quR~iEAEvh;G&6aR_u}J3M4}sr z@|A4oks9+1qs3&R3?q?AA;V~W)_@+x45O)QyJ$d{X(eVDrNs=Rc)!~b5KMv)m?xNM zKu3bv3h7*i(Fv)BFyQBmYRrTd9S~GpNHxG5#;6WnJu{&r)kOcMl^aqLNRTI*&~O)v zt(nmHiS;Sr24L`!8AeETNP>&nn9yxWbfwnI{U$B6%^yr?&_78+631Iqr^pRjL|}!O zVPqzBd>?*XNh z8&pNn|J1+#8KeKHd!XsUefmd%)H=b(3%9m!e_u`lhQ( z8AdA#cnCg6Xho`LT|YF#2-q5B7_B0aFi+T-kvqw`cYDlK$p$UO+#*veElCLTZ6>z} zwGy>sL2l7}Xs3hd^W35ngm%1yjv_QuJj|@8cgG6t45Wu1H?*Tbj{Ki7mgBia4aC3a z7OnR@bmbXF(glvtMh%Ipo&p=dbn05Hf%XABDdjdyLpW#0L1z!oci%u8?Rf}is)(vF zS44#sj)GQ>!xU28(K$^%N`V*t4;By^Vy=j4M$@hGtu9w_5-5bD-n$}-SC~5KJvLD? zMHD?yil|B@3L%_LmdY#{mmNrO3ENUx@HQ)XT#9H{CdbwSmBRd8GNK9=hi4WwQ{9v) zqL@{#h&E!Xd$c-C5zVZQuB8<5FceYjiWVE4O|1@7MCHU*syk;JgmC1OusM<<%4YT^ zQt|!_w9NOUNXYHQ_T0iOPATz5%F?t~P$bSuk;ua~`OufWIGiwu`zUOaF1SCZ4%x!<)FCs4uuY_nZE2l*Fsoq(XPNCMB$B<)8<9Xt zXk>o_4`)Usi4jTBMsXrB`Hj*yCVz-6-UMzj+Kiee>;o4>_OVabG?h~c4L9WTk+5=P zjlJmJC6^sR$#~D^vKNTmIf3dGp08+(L{diX!Z^xlor$v-A@L|uyK;!i#uhIkZBwvT zJvrz*cEG9y6&DPzpAhxW>Wn9){@MF;>aQ=UKc^Xy+l+|({8N9lwRn+ZQ$IxS)Ni>_ zr^41-r_a{5*^@0|voAKYh)vm=D3rZek6-}Gk@nt3_IRB*cC4c`WDy)R!7Q0b(UWxo zF=Pm&T@}ZLbEbc={9De@3eVd`UaVz-n-v9aX!XF&sscAFX=@TLdf>)lOcr$(x(6bO zwOh_~-JysRec|_1Xig7XN(`ouJY2kEI?ozEv>F39D60zG5N6R17=^$M7=T9xZqQw_ zz>S=2F>piCX$;)hkp*r#9=Op}WY)&OP5YAtZq_tN`afU0yiyOqti;{-B8!O zc;Kdq(_LTBO#?Sgqu4bkW)xm+D+OaDxy2p`P{J_9+E!4)LtJ&4WgF`kr-a z9dPvuxeOw@Z`6Ni^oD>0MJU;nj1MmlSMKCY+5QZA96Dt=YGacEvz8_$4(l2gr6$ED zMEbO%HZDAf+U$l9c4O3LjpH?o+JFsl(EF_mAhu<7;f)1#;aw>v7PaBougE4k2~Zmg z-5o`3&a?b;ye9}&dF}SV>#?ZKilR1qcV(O`aWDR+f#S%}iWi#) zpMK{=m6ReZ=z9##yj2^M!UYaFPd4Le=}>^>XoNOGk&Yow@y|xqgU{v8FXkfZFgv)Xof-}nYL$n zU5#MW%c<*+*@3Qx~OPIjs*xi##neZK$IS1@go1MXok#D zpP>vxuOYBKTsFlzs-|pOJuHi{tjM&TucIP>WWW%aY1=Wq4d8PY2xfE=R;*}-95ByM zY$_cQ*?W-M8m$Cf8l>NEU|5{Z4PC~uWayrpNJLDthOTcx$B%LDFf!@GL@K9=9uR># z%q1yiPcMqRDEc8aIlwYg;9{Td$DNk#`|-Esln&-1S4Mv)@~%2opAAcPBqgc z#S>D^*#(s|pKYp%S*=G?&CVjKu~2Z9rl@i9G{wkWS(;)iKLV+}D z6ii&*L*Eq2K>XA~SIPs)0RS9@b8g@c&_R`%$aVZyR2eLjJ4?&(5jbp0RSj}B8O~M{z9nAsArs7%V%)a zT5dJ#D%6wH!BsQ+)vac$3trSswkwg@2QyMS**$IK;TIRL42v2KD(UKw#Ms%t zUdQCe*iR#4<+|XnglfkGDgL}9ud*%U0;Gh@#-PmcwpsZ6 z4Ys8Vb=_v)L$Om7cD**@oMKC@3*Avg4AM<2qH0-@AEc|augVx?1);BI3t$|{zNd^v z_I>eUv+t?Ma_f-{J+tp4Qo3;)xa1fo@r|h!mnF;F|4mktCb{+y5qrPLD`Gur(IY~h zE$@*RT26ruTk27S1)26prW@Ul7snn=fev{b@Zt)NiFYNI?Q4}0R#iK@x9i1U(JG6i zECF#7S3^M1+aqR*Ifw$#-kRKrHCfK~qO$Vr{=X?>U2j|AZP~@6>2Dj;M4Ikj(OZ0w zPT$tXU$1F*iP(MoO$5b@qkkp7ZByg#Q)X4K{1~?thL(3cWN1y^%?+)X>xiK>c}Gc= zUf5g(m6&@QD_$#F_u*&q)#NIuFi;%VrEFCAqbN9Mg(1nfz?aDK_`bQ~Vu%_{*z2Mp z3Z@$(0n=IRF-i%r$_mMSooBZ7GdvKM)xJe+4Z)IfMj8uRQ^Hl=Uv)Kyi1Ci{+)Pg? zrjM$t#lp)b{gv(3Qh!Cf*^ecf{GS^n^icks)N<_*#3Tswh%d9tTHdv&mer-m(QV|7 z_s}${(;m^-!~8d)0(CTwnC%yH#E3#sdAB1HZa$(qg{%`I(X5I_68w>YjYm__&_quK z`qmH_T}3;zn@XTWMO&5ryLu`rTEu;X?FnyT%@~PRM9_z*Xl3ZzM^@1k?q{KZ_}5Ar z!NXNFir`o!w4pXPN4m6pmyFZBs2ws`#Oam-P~dbWUR$zPB$!p#>FF3xj|2nbA~mJc z+tE~~XO+oxdJZ$4-Yzno-i|C1w(2^)u9E5E1XHn!Bp>TXKrNmnm_^+*Ma4>(0DgCZ zVILR71HYQ}GrpD;PFY*fMn86Bg;O;P*fE|IPO&7rIt8(WrUYqDFx-GhQ3+Gdn~g8q z%Od-@xEK$!v10HZuGw2A6g%?Zau2JSf^RXH6BAA?td(?oY4%&ZC+ks7`hZY*kwaR6 zx1pW10(i~hg*HS`%o>(vD#dBRVhjWIZR2^8MOd)Pnv*{O5MN1Rt!J~R@9CSh${NRu(p)C^qR^ez0gE(HRS{1L7?3L<8{Rz)ar06@<3TWQoAp7y9$8Af@l%=D_VPp z(YmM^U-?GZi*|@v8-#`6 zEM92KtquD?RX}S$mbKAwYlCfJWo>la+UOLmjp=@@3#<)r`byS@@5hR6?bZfJ8gteL z%Dt>Je`}=6%3;=q^{BPL+L#8-7g!tgsAO$;&>Xp+N6*kdu_=nyhJCGub7pO*Kgf{7 ztPM(-7jt1YTV${@{94Q1+TeXXp^gV1VQtvkF0wYJZ@a+Su<G+;4{PJlZVI#nYlBj6 zQUgxg+UWjOS{t3*+UP%mwb7Yc8%CFpZfyu4siVaz5)A1=Eb3@%Zf)31!21Z?h1N!I zYHjq6vNn2|wP90t>ej}g-K;pl?1*4?PSe_eSWu)M)!MMJf`T7zZFJnVW!45;b2@s0 zTN@`O9Q4>ZUGdDkwXx3bid)CAHpuBb+S*t#YXhJTE!Xqvlbaly(d0Pn8Z;~ERY%$# zM_V1X)Go3*T8P`iwjE`w!A1jJK|t z_lNs-SOgzFqt?fnL#&T8Ssa9o;&SU_yI_6bRa;sg(fXKfWwEqA;9FC#`%CL1&n0!= z$kO_d|4J^^hr~LT)PE z6Sh9))Tag3$AW7fFY9A|03K)SgH>^9ePq^0o_D^qK9<%8zG=&}TE;#eG1F>keJrhy z;wIy>$|Ny+Tz%!7{blUK(-)T3$I|+so}!qv|Jk=bX4R)f*2nxckD2u`Hvo^Z^+Cq7 z!d`}+@W1~%$<{GyL7FmG>O^xb#ZuW&^^|M?wW^MOyGq_%{YzH9w=)iE5(FQ6_pxt*VsRwK#(j-eyxv2FM4HCGdbR;H-3rMoG&st}TD0cM~} z4?C9bXZRGvzxk=!!MOFI5=n`NGXxWrLg->Hgj7fv95rLECi~NNK;M?mmp#X*&xFhYCE@(s32}>JDW>r74~k1-FUpLXZUrF zTjIr$TVeuXJK|`P)Tl%QL+{V(3cM7D2Q8{Au)>-`T|wI_a*&iWgQS%~gM@=N&mUO8 zF3PK?^qHPpM4&#Oz-%JFQkvQ0?B)TEQF&%s3;CiEtt7+v%^8D`BVD!-Rf4FXW%Bv-#amYaY)UKLY&fR0PYR&~c=U2`7OO~r<*|uD+nz`w>Ts1Kj|H^I4 zzlv3JP7EwwHRmsTOjphMf%vIiHM3li$7j`?b=EIfHRmo_uA0kL6Z85|SErYr;h`Fu zCkpS}XW1jWv^C3qJ1o|sM>exHAIyq@LsreX%O2NNb8aAhT31cMZB#uHZgI|kzL~7t zuYLo6Hi-6r?rvt>IY@;!Y>!LgXSb4f_5E$Z>{aoE-b&uKiq*Gp3Df>&TC+2uJ|>h` z8w=P5q`S0sD|yqdd&h4i(xsS+Fx*?O;WK_m!Hvck5BDC)6*alK@6h~K?7UfTOb{J3=JeYPc_tF~40+rKy( zs5<*kfFW2VF2LcRu4s?21D^8W-~1hmQ|%`|u8k{S9<2att<4KU4Zu?URL!tKTEzEu zi5cPo9}_>&Pqgpq?>Tks6-8e8(jT#x7wkx1D1#Y)>)VP6+ei?iC46~T`i0_R$ip%~{4R{Mc)fvxmWki>CQd>Uq^UQ)i-l7nPk!-%U zcXv$x?<#U&v-I{aj{EQR#^3#Rb^L?>m#JX4vI#vB>Un1pYLf|<^?q^Odv79upW66a z_Z3pDtpYQr>0{vbliy3sP4;`ZEBN+X33JKkZzL%pS>Bc~0bf57GDh-)|bZyVuHPcKQ#JVt63bW zHvCy|v%jPt74`oHZ#0JLf5@l4|91TRzCJD3&h}xy#TWJA_xKzW&ifsmq+P?In|_cm z9)EF3Xan}JKL*KVT-9~s+YGW@qc$ku$CrrW$DiTTeuhtb!vFHS6@P@?$|HWn?k~b2 z%APX*(eHv-L>`0nl26^Ps{)VUmx(nq?4p5J=}JRX;p9q2we};8V)9b;-t)CT;!sV0igbAC{=b)v=MS(3to_Hjw0kT0 zL%%Nh$9#J2ww?YCSa&b|KY#YaAO0Wz{2%?v|H^ZIRSkT8OP~MUzxW^joB!c=|I7dB zrRQr8^!;D_%m48I{IkFOkN@?LxZvN!AO3E<;n(BmZ^h3a@VTG-@e0iIrJP?6&~-vY!{o7vuH!lm(%w<~7v* zpU3mxjGx~bO1`|24(qp*+Y;qt3r)Z2Qs*u*pwu16$}+@`=uGU@Z|hn7^zdhP4a<$# z*w}DEx%JPhk_?)j-xKluQ6zQ_f4HJCtN{iwupssV7SZ3$L} zf5t8!T4H!A^u$U9X}x)uwfD9<^9M-^09RZ(K7uiLK4+?$SOdsk z#eEkOl=|+275i?hNvZFVO+($fle2HR@3u`&jnMVo_a=|t{lTr|ceLW@eZ*b=*?+%z zEBP*zJN}N2emy_>$2vkJ{D9Awe%a;NZ-}NOrKCEEwVJ(ulvJB+k8Q zs$5$Ym&Osqf_G-htH>6vY))b zGnu^PTJ45j)sFU`|Nq&0_aHm2`_8W)_kHioTmS=*#85=vE82!^LZn`xO=%-Emjd{b zs7fR8&P}W}Ik-BP=V+6-E**!)w|`9M%@&FbOOpF|;9F@S1UGo0UK^9Z^|Y zrdLdvj${j#DT&%>E7&!?OK)f~pYQK?x^Lgd3Au~k&*OJ~@AEsqlN|KB zOuCUhyYj~5O20$;^!*MoOIP(RVB(q|S)n&kx5J-&ZiRF0y1)9?_>g*fo`uPdUP^~h z|M*Z+Zm?T`OpfT+b1^}3^GOm(9rdK>JbjF(#4xGAIcVgVMY|nDzPOUNS@SH_FE5Zg zdN)CbEy5C8oLqN*tAAL>Fo*h;Fr*`hOLrzyU_<8!H}ZG;H+gb&N&KuVk)J?UUdYom zlG=9iSD1ivLaA>4m9EMyFgcs8{yXgWDGs$g1V}lfkC>tsgY#8j@kqr{?oqG{Rp_iE zVvCf~m(lZ)zM!!KK#2B~wM7HvP#Mf7HpLze5T*x%Ifh9NHb72C z=&VI~Mz`8e8v#wK>zpE}p+?8(+V15;QSzR(b;i};uv64)jhzW;$ypa=Lhc5csL=|ZWD{j%4C*tG%|ql0wgfcsV498T#TQ?o_Rtp^c+)_Ls1~tP z>sTJl$z0a%|7pxT?0XOASP4K|)NCNxwq`rad&|l}Ql?a4W17(3@*O$$4O6^*q}KICEGe5<(Zh3ZgC2U`(pj{D{Ka&+|9rxOH=12D zpFf7%ZI1Z=XTgnYc>XZg?_-X@?v>#i^7LcFU4g!O)OQNzHxS-%grs;ZN#i-wH`}8O zrU0d+IgZhuqPe!w+#3f?iZ-3(K&Ua2Q^i)%-h#|TWRTfy%7?#KXt}o}GuS~heHl;b5F3<$Ux|b@b!U+;^Kd(X77Y{~ zHqH;w(@uWCz}`l6G)OPdjR0SpGr@Rs0>+$hDNexAI+upA^R)w)fH48)lW^9#+D+Kv z7I2<~F@2hbF}BZe4*=xqFouf(;r0qZZUMal$Sw&48u zzi}xzpPV;1=f8mW0gfqnKN#n4H+a82z?-bh($ywm{j6Xuo1w(#MI9QsXs~XN@OhRD z(Saacni<1qzNv^1DlTB%27O(&7`udF?iALGvta#IU@bUu4X~B~Wlw_exmAK%_zZa9 z$LGFW!RMwGpyKfO?J(;{y5n%>7@aYEX2Zhab-g>6^roF3b*-HYikGo2yJe(-4RL>|}S)tuBO)#3VBvCDl4PV}pT$-_9O{F@b6Bc(x5 zc242$(9?(5M41IA^ST>%4z@oGG7 z4W@Y{6v4Adt+&eSYV+WXs7b=Ik^TZOuMRo@N=w!~W|c4nG%Vc(H|+5)Kj5d@<3hy; zmX`ArD4<4CE9w?69*j{w3x?a5oVo@E&l?}^=Yw+VJ ztR$6b&5Uk{RW83d#uC}!_mwMo{kA1$E5Gnh7MEcS0kXPX)p=88*SqQkuxuT7wSFQ0 zIOi80qe}pfW;iGK`smXw)Q|jxZtrgm_ivC6dVk*9$Ty+zz1f?QkNd$P&dBDZTA|1Q zZL&lgpHsCwd;_p0YFb1ktB9of#|;+L#cqOy75dTNSk|xo$F+{I_bzmNc=9T&W1gk5MHx12$Qe@!8ZkvdFsV=bhCq=TH(_I?Bv& z!gZWX$0F|>Cs1pOPQKwa!wLGfW1M)S&JER16WiBGE-fgqcW5euu?zGY080@#ib`vOMToaNE&h7o~y^9#T2 zgiu9(o1;nOz^s6W$N0iKx$6xauChFkj#eUvDGVesxh&*BM=1Kc@R}iq4t|-%Fy?14 zjJJ;=2dcmbIo`|;w(pH$%ug_kUiSSZa&TwJv1`OGc4ya3BZsu38OSjYa-irJ>|zW# zc1g>bKn@NA61$k6K#rcVxB@wB&L)xL;^(K4!{%rbIeZ`AwXjEy2VRy{*H{+5oJo*B z1LO}sZ;;c|%)X#Nn9d1{Vm(F!6(2H%1Kw%Mgt5zgnX8+P>*EI21ab^)$@WUY;HXwq zjCTIXO*{mJih*0iR1DF9*-xBg)mUL*@N=CCMg_fW$U)nAy5g=J6a@gf8&3WkxKKE* z$aiUi*9@RF6vm)~z=%1g_P`x^!aTL|19vRRQ$po!{FVM?8yz~xB{=fRJjzSL)-Bok z=?44Uq{8S22VK|J-{}s(@VmEuSgts%wPl@+z}gY6@?=!sbkkD}3vrjxE$REIAX4 z$_1HSmAyqkV`uGB|1elExT*`RuhLPGIuv_vo*wgc3Z1JhMd<4Ok7?RRKhMOjc;!DK zf5?7{0q0$q16h0BrV03MKMSo9)LxTWpnE!^C%OaButzL^rODKDHk5GYuc9-YA&*9f z($|F2I6tvKIe=TD+#C~&a1*MnYn6LfK99cMcxQy`oLBwhH$}EhH(*~Y6xzM93>s=e z=J=#TDcoFEOWq4b_NfR+jg6$GZ`MYapg{RyID`PzT;~!QeqgJEVA9-$0{9S?hx7PX zMe9ap@}grgusCHS(3*HZeTFV(+`7dR*rf$zZ&m}<@Gp9>KO4ZOuUZ=Dav)n;!cH~I=}PQW4n$3} zYp@^}1_|BhXK%oIY+@aDIY%*)sc|hecC!Nj^XlxNxv_~F0k)LJmt#PUIb-`aW{F<_ zw(<+ehhOqQq}iM3j$uglrYt3IV1z5l5=bMt}-*{t67{g+g*@BmO3C%!$xHd@9o---w z@corRJ<;uG2!10Lk5k@BxHigFx2d0+qz#uT+Em*uf z?_rqOyK&4~f(l?`;5gTIT>phT(;aw;(2@>yRiRvZ@TC?l#IPkEhYuc0^nrQ!tlh^G z{603`mPJOGzk)Gm_z8wtwkXA`%k*{L1SD<*BKR5rld5n=U_NOs*j-ztDQg#)J-qcW>vn|LVSEhe+s(yFR0mk6_7?~ash7BU1lNQU4o&`x;3iCbF- zBEYC&qAMB(JT*Pa@?LUujbU#lx2-dT_#TK-P)AANyrkQB^NH4NYyJPG9-L-E(VU?0 zoa&E5a4WavFc&>MdE&MuiBByyYMBYa`ua`=y%438?U(aC)el(u1OkjSn=t34W)pq~ z&4!hJa3E+lTGDbn0EK(Q$VTrA2;H1rhgq~Vh{|37?y*LNXuvLBTF;{OyawP+f<|IG za0X{O(&zAa<-3VETQ}^aa3MkULK2ivHtzOqNP-H1LlN5wjw_|HKZ6s1)0H%(?dP4MC4F3~fG(C$E zg`d*1lxD>AEG?x-b5D7I@5&rSY6gdgL0Qo(}mcO){qtP=4tx||lf zcz|r?FnB0^PVxc6n&qumJ(tWQ%cVn(p$F;GVg(Zj7Au%?T6b8fbPO0S6l<8BTZ{y)93K0rQhth|N3A2+MoRcC$jiptPEC z;qK1E$=m(y2N+Pd`(P{XTI6jG+*L(g7jD2&u_2wb42?j1c9a=jSa;nnnCo^pXPk~_ z!&od%>mMA*r)aKC+`TLoY;NASCMy8v%khtK=4BF*S!!eX`j}M$$8G)+VXgQUTxLuy z8Wl3yP9nDYQtHERGL%j`>>MW{Or;KD^6Uf43}wX$396wZTJt*Ghvr)=;HjGD-KhDP zQL==N-}Cp}ozqw&%r?^CYx$nzN@74v7_qFBdg+yP?KsS;lQ-9l1BFIMy|iW}gBUf= z0yUeiP|;MgX-0rt))>Iyx=4srO7a@o7s*qUvPn(CG)Xr^6D+ZKvMC!`U4TfJ1%~vOX9AqM_nUBgLD?$<0+Mt|%uh-;_g-0n$d+UB@J>JWbKES!gCfO|X&@%h5{43QeD7 zkM93dPde-Z$^S$12P7yb%w|@96eU_J3l#k5%><=A`sw>_Zr%3*RIm?d_VS)eMR1IP z_(i$_9m170cD`e&hU(`;^ayl_9X05kF&bx9Z@ZxBC^mdRpITdM%t`k z&8dChEImXCl(1(_4~a7JW|bWz?nL!Z^i#TtloiC&AWGFKhP5GAx%3xoY~;OClI1OG zZRc%Yc+ws%drW%}7;n&-ur&KOf8vw(pFDN?{APR~E(Q5QuxIJqQNA|aomr4RsNtyP ziS9_CqlH#`GMv*opBB7$-k^slJRl-s4*>C#wh1;`qYvzBLAr-kGkxWKqIDhE99q|b z%>>aj6d&m@jW-5JM{Ble)dMIN1!)1@a~Y|iiLfvZwPP>l1m^YP9SXYMFi_>vq9djd zOTX3dFyIGhubP%rBT!Q`Q!BERVM1xBLFvi{3_5(45X2cr=w3Wepqi{j zV4(eqwd$(-0Yw zqHV-0$4&7VNh0}kVN>RZf&&Qer~s5U-X&zD8)BSgomNDEpye!l!Z586h@wv8xXD=d z7AM?L@` zO@^`xgJ?7D03PO>ol}ak&oj-H8Y^nDX-4(d^lv%Mv{9L6LZx4;X{M^b z@zY#IJfCPxPXl&|ezT@p7&<~fi}AngsfLAxZ3lxmm69Criv<@#8NlogqTKb-qAg*e zGy)YFRuO90Are7xMC^FM%SdimE&t>;M@15;;HwjO2vCK2|#zFtgvMzj2frJTIf6E zP@(jK7DQFy6OCMj0D(5OauG?{_^ZSB!SfQuTN?;aPmHv-he2`)7${zQOu61M3~B}= zaTZt(Ts|L||5=_=O+ioAz#RVmJQ*yca;#LQiu9VA3bs0wQzbz-z*7dgDqv+8z}j%X z0y{Gbgc7KX(~Tn&&?N7$cufgUQ%9E(Lk3XXgF+~jCg9x;468dJ$}^*zbyk{2EZi8V zkboF-+8RTn{xlldWJqbiuy?+frvvsy_KHylbOdwJWRNKcyK&6gCCsC}0Xr;4Lp9nV z$Z&#gvR&@AoIyFT;ws$~d|9?ztVjk0A#8?}=RAgwIBnx&vg958eJ)q{G<9fsh zHO(u6Pp%ko8=VDI9g$s4+`XUG3hvDf+&y+4cv)m;+@T|UX`r_4h}LYc;!G)Z8MLMq z?Nc=^5j4Ap;@Gxtmku}kwJP}=!!zQHP5#kx{~yJeM&0gz;#;m*ldJJ{O*wQyjQpWT z7v+;j#^+}qUF>hhLmX+^>ZpA^JeJa!_CHfc^BxtJugTs={SV@d#NDGF)w|E7zG!jr zTR0c%*G5#Ml?tYqN+Yk*)-MvCvPDh?2^L1w|E2nnrMa)(t;J_<&a!<<{U>B79%7J0 zlH9sr&ai;2B}l%F`u}5{54eME%E8=R?cX%?1#OI9H~pk##~u*rXw?n{m`ROS1qxOK>yb&!{CCX&My;Tb?aslIA=?ht zh&djB8q@*ZHT|{&isV- z?#n5uaqHU6>qIol6B?nff#!j8sSHMXmpMJV^UpGs9!%{^?%<^@NGv0+Ri` z`YjMvUYxLPoI?2g8GEU03ScY6nB98+KOI5`U_!surC#90vM6+Mr23!0b}ojb%jRC# zra7$+CY8p({z_wWaj(-IRrGCD^cGa=nLSrkX{9P0YSpTe9-%zrJ+~mD@kgw#Gx)OW z|C|={Qy=f&Fx})>&jCxd=g543)87{bqrD5YVhX8>I<>he;!+c3^oQ{g|0<9c<1 zs}orV;0>_eL{8biZ_q#Si~d`S4kn|{6Dt6R5a+5u15VFB+S^^k!DeGwfgfwzy zwSpDj6xd62dCeMtLdfWmMcrR)GHiMZ;=s#Ls&yPOgK~ZtGiZ%b#!SK;-G7iPd*zO; z>Ib`2`0>E8)m(6R0aklXGHbhnt-NIg&&wkYvtfK{I=IpDfBnC6{aT;0d#2kz?ei%`k2xwh8b1n>OoP-Xtdu~-Rj z$wC3VSB`!zR{(gtHm7K%k6v$j`xNnp_hteAfTxVlxY(kSPCe zKi+?rZnhkdyt?MKit?ZLvf_TNjdipfn?rqh@u--lrC_1kV<3F}fM ziwV>qU(tFFHpsVb^X@OVnp~R}A1;nSf)@;L0z8T;RbjGXwLyXceLerSiCe&ZI)FQW zsJMC9ZoZht9XVdfUZNfF39F|maTB`O)I1Fq%hN*RPhs6N#rCe)XU`mwK+1}wOp1!V zbX2m1o0pLxO!{{cttB`3SK}XePg;mHe4**5tMGt>WD~+qkeZ$W;`EpC)WXq*Fn5Jd z_(o&mwc}l_$Qu#?YDJ*K>Y@d7i1bXG5xV2nXAAj*iI|SNCDen$z0RvM79fn;&vq5l zgW;b z43uCHJzw+1VB7%ZFB6IR#Nc=m#2Isb|88nPZL}bm zZl2*}7BuNT?-W%Lb^FKmQ@C~8*$*Lx?M%p!DSE{(hA-!t)@QQVr8yfHjT&4M+b5)f;sQzipBsWyf((5EDob z97n~bMsVC@D>zQP-3Z6opjX9lLs&T~V{j=AI3630o8=)KmsV53aU%;XmJBH(9M`f` z6~|Gyz;V7=SR10Z19sw*Q=@qsMgN#YGc_`in~xZF5(dwc^ZrAN(O{O0$O*hL-gGYA z5PI6O%YxW&J%5Y7ujg#rPH_inK?@WwC@9Jjw#D$bBp_x<4gsSgiq}kY7BVXPV2K0O zDgOv&m8MI`MN?raU|wd=0dh@kEc?J1o!wDLOpJaQ8>_8mu_fuzS|z=s9Y(S)N~qx0 zmlFI3YRN%vEr1goEH{BXlqk!b6rf-~%)Ld@i+L(M1BQg#PnckG15D^vF`-^yLL)tr zHL&^NcAx_+4QUoIfnYYco!RPIDzlZ^5w`=1qLw_v;VMjEDY=RX36mlP74c_p^Zxq) z5)FU>nEAp0!i9X&-v{zHN({h1AVbxGke^Z}y8u%y6Uq8d5SPp0k&)DR!jK&gVmuI)*ZhfK6`1jdvbddOu}3y|cOI*I&H8mR|NRFcCATvwJcrK^+LOinPa))8DH ztDd_Ig0NNIto~y>Pz`|PEOVjN3dGXz_4{ceYD*h7Pf|qR_XNAo23>8#p5Gh#v zG(|K*Ip!IN+V0ujmssQDrx;Xk*`#d$9b^Q&Tcda&$A8?dVhPh_v+F2-uvh7)`Zfjlj5UXv0DZ6Cz(g#H)Ht3rZy1*$fkHK%_#(H z<}lD2v~SO60jNrc@mZ+(EKCifUQWV{VE}GT0&~GjO#*zpVnwmN-THCznB;>ni&pVXL-6J+M&r&mn%&xRlsyxVOF)|urAaD{J-Z*VDV=}Ol5yHX5qyf)BxUGf? z0Se!64yWi(slK=A0{R8-jJ@{RF@R^@#dNJa#!VBh@lHdNF`q&Gf?|joH z-1zx_U6_ymz1{p=svL9lNB$5xfVvnZNBqHAxkaq6^xgZ5b!h&9Ax_>xTs|RJp(=PJ z4W_2dori)j)mu4S1L8@}N$2q5(e1VoN-RxHOf)iHi4>Jk4H}-W73Tk_7>(Zm@WeV? zcJc{nPIL#E9y1!X3zFa`(IAr}%4J({(t3XXa74tkRT6Q2>btQs%s4Zuw5~eCy!rmm zkihT4fg1y<`U*HUfpbiwO`b`5y zvgrjFOrOWl7?0t?rrRZ?o`{F7Ls2ZnIY;y|mNfrFa+C>a=ciZ^fnenI=Be2i5czGg z4)qHI#kc_9lL1v=;!FFZ(7vL!tT9%Z#V}MWGw*>aYZjHkQFd5aI@z=7$}lx|SXu4T zmDP7#8NrX^Fq`gKW5<<+#hTFsOjp+2ab<+!U8-lT9aq-6bY<-wSJu9CWt|;Y*12?L z-5pofy>w;09aq-7bY*ipu59komCf(CviVC_wy@*M7A{>`f9Pv=Bd&qr?mQ@~k8ut5 zTUU^_HOYct+uF_&_?0$zYs1$m$76OOn)4BRoi)l=h_r9WTCIs$=?~1R!z-3okK&}l zuOYeWi@fsn;ofw9Hw;b4hcs;A+C%|Ttgg&4ygHP#+U+?ZQ`%p|=A(D)PsA7{7PG)~ z+4*zAmT3tGaD!3ZXQw!;d@;UA)la55yj6;!7PqdWUbU1hQ(J1uw^`pn2j5ipHxr_B z5f%yu?W|kWcb%^AO-E+G`F~gvLM-Lln`fU>3cuS%e&QYs?c&RZq*zuvs+d#<0b5Ht zl0kDy0wx$_JvKe8;jSiw<7Tohy&=c}#(z6onYk#qbPf|KUi-M7Ut3nn^3B}@(%I1LI)l$n1xNNxMyDZ`|rhNgFy>y)Qr4|L+$ezS}qQ(BvpvSEURSR zt-jk0lnh^S*}{zJs_(>F8n0U8XP8}(XowpQw_`wJ!vSiH8I!Fiwvpv{cq<0=AJ?>` z=qrKfB)&YXC1Z2GDY2w20xJF@IpY6mN&I2-sI^ce7+#IUE>w)PJmw_U!Qqqc&yW&DYsMo2>*Ytn{0@Lyfba>7k(>R#b)KmibrtV4&ezROpGg1 zBM3Z^uC7O&I`R)`;}`B>)IOxnTZ)j@@@ChQX>~A#yw;ax8^&Mm}VmXlLb( zwP1$Cf)bcKmA0UTnt~QI<>Ctfmu$`ou&B()G-~qsP0=^;6lBqxFzjy5e)2{x0jbsR z@tA}^qQj##?aE>|ArNDM1R!^6DmuKy0wBQkMkOZUYnP~~3~rzz*YztEfl6uLw&`-I zhE%A-Pp~N90LQgHTGhX>O@lxPGpJndr^#rn?;6WQONM7pr0#ZtZ(%_S+~Oga!3qp` zqDFEAhoB+FHp|fknZB+|(gvjMS5xl#07KLy-YRRi15*}%!Qtp!b-^a}lHojxsAek}^u4d3ZQ9F6@C z_6FzGidb+Y6fJ2Bi?x*L#oAz?@vIGoYWKOj6@6iD8hA7}_+-cd#tkkPVnDgUDT7kx z`>LARkjjRfB})zDa>hA-jk0WPKB^Skk&;g7l>ymyaOV+DO>$S0i6~t~?Q5>BqfIO> z50y9@O_KGF{1f40R_(KHws(1WmA&I|Azpqmywv{3u(nL{q-^O{?W<2eX4ST>TC&xU zF3CP^+ozujpT^WXr+W9;%Q+4$BF}5WYS$~;T|3+_Rc&w}+ecPhCBQvTLJDLW>5L#s>#~fr$g=Y6teB}qy*|^-XeQG0akO3KQ$i+xg$2H zX>A>tX4$fOfnZpmiL3pGlxdHd#2qVFWi3DOG4w&Yg?|#SwBjiBYR{}!2v}atX9w8! z`!PJF;alO0f6Ep))=aL+2AbrtiLI?NHKVDTXWRrcm$S2n-`bg7f_xGRBN*2*;5wfP zmU}XX-xSPZgPB~%4zu|ZW@3~@&?tbPH3%)>Vz114C0$bLdH_HY0H9Ey0szn_3yXkR zn=H&zPF8Z614g8vw$`AOToyD({e}!g1aDYJ2`Pwx9nLJrmS|negvm(>t1B|0XHvon z!TVIt#-vH+Z!t zyJ9O0!-fLG-jIzU7vQQQm%vp;u1RX10@qwXmwi+XxX3+cHEfGq#A*cO(zX$=p+GJ+ z8}fE0a+!}GGk6B^C`dubg>@|Inno_!DJaGSEOU`sz=~Z);2l<(;gX}+``q39G^-zG zUga?Yi2~y5;@gm><+rS(rbb{$KtZ;Amk7woW_oN~Sdl6GgA214)VXla*kw=bQkhmr z;)`!I@JgxUJ@Lw(y}`v=;;nW_U;t}*WQkc62WHQdGp?ppNtSaqjg=o3%s^lv|1KZ; zt1<42BrxeCCb^3Nsqdu7au%$)RBD&vr|_bM%|H5Wb&q~eRGpYSQ`JofP9jbBeR#a2 zn(lST5bW0hQ?Os2z?H9FUoSZDi0Q&yw5;JwR{>!orYiWpB-S8m*Cv z)TAak_(N;X)2M3t6>ccF0kU>lUgC8kw4eIxVKlO)XV$M6Fr@3O`uTdR`XklfF6-CU zXsdskw`ha1)j$1;041+~T33K&LC_FEu-L_zU`L(2aT}&OJI$8~4XMpVasy$@OA8Fx zFsx1E1HpG0j~yR;c~59EPa_3BC`PUa5WZ)8fcmz=2PJmg1|M{m$5!~z4){Q#tVw*B ze&zT;M`qyzBb$K_)0LF?F#XE$VP^gK3tuaIn90V1zjG!&=!6%;2O^i{ul#c{2=HPv z)dqMN%I%;Gmlb@iLYZ#&(>1atI2RkrOUG`d-2sJoXUw*4DNoQJMzIj-u>kFRkf%LX%Y9cyRP@oZHp zF}%Nl$x}YV@L0}YKCq_T3s4yjKCBq4Aw#|fr zb5zx3C~ulQNL`j=f5t1R%P6yKqTSM7kbit=?$$H0;jw)#vlo$ZEMt^ptU|d ziK}HqjnFQWAbqt}&{j*d#WIn}jm=nFZs1Tl1{!w;5R|b%iX7$Y2-K*ANcuw40|M~P zh=Mv}c)*Ixq3C=}4&aP}+>8p2&_WFr5)AXDLV= zE;47;pMWkgl@`jQOoy3j3<8x`#9BH9PAi@$CYr?>&1x0}&NE`COw%tHs^XZwH^ZNg z(u#5juW-&tB?cl*o%@42x{*H!%CW%@dXO2X8bD^i-o&}AU~L$H3&SyhrPP3-8}iI3 zBhWj^&Ys=D$%hTmmO$tL5+|Ao1tmcN3bSCR_z~C*lrGV)2+%3;LJGu?lbwec)p{QAo|A38T=J>DS)fVG_gMBq~{8uAS zY@v_L`Qjo8`+X1@^MeSMkGdswu|?K*y(4&=D|uI>E-Fc`sf#Mo?fzniybr_4|sgA^;0TS1EaF^8hRU35zOU~T$7wSA|0m)$82 zZkvGA!q%NaTR#-tQgn(HXz$eh+jojAAeRX#dBn!2Z_n19+O1B#r|49@=+uvI->JpR z?i44@OmymstviK-@=$cN=v1TV)Tg)al#WoiJe;~}s#8l_cWS>nb*$)Av*^@MY~QJ? zFS}E3nCjGltvhuM_Jg>i+{AEDln60NncXl+Q~+a=f6G!gz+@`fgK+`2Z4VX4PQ(A6 z#4Tpw@R4#2KSBP12*%w1g{0ektbzBC*juujG_H-3BjTe^rN(R1BmQ&7{#bu;o^rwR zK7EWWC*=Q1j=)?a{%gZZVWQe4Yj-??`Qf15ABkKg7p$Fudo-vQ27pH5Ic2@%Zh{eQz!1+KJx- zTbo)L!cB`5N5>>lBscR|B}!%?Aw*Zkcd9A3j5=tNQQ4x_4c-n!0I@Kt}* zdF2~8$|!d_2=xR6&x}N@*jfRz&15X)@QBfEZ9|9uq}iOWU3c z_MjQD-aQM-&szO|Aq9tbFCPWmwqx47Kjve2D(qM0sGsp@wrA_{ z?m#sy0@ho;3EeJH0#fL|F-j6`@Gs>b2tT=@yu%FP{RzaPJbUcHgIrjKc;6i60p-Jn zK`FO#L4dnp6Ltyv2d%)f*c?SLfB1$?hV1pMu>x;}xF;A>#i0i^XymtBaXE{`DJc3M zP}8^5$6zo`I)s72L;YFAEKgWLYp{++vLGeU6{1p&FLp1Ok<7vgrx~tt|J{hxKl!@{ zv4djf%uxrd09?O=>E=Svqj5AGSGIviv5SDqwi5UwBMgx<-T)!T%xZ_)(K~Fw8WIkc zqF&1#o;8H%T2hR}Kr77=nWaG&d-La5$}jikr@|blx7e1C$q1FxDUyRZQt|3c0@j&d zZ=Rhx>avao)$1_RW_ttlu5hiZ7w}(k+3>=4qR^CbokRcuB)QXadPjUD4#7+nyHHrr zd6x77G|Pk&To*RuGahx+#-UoFXa>vo<(DYIe8=x+<)5RU(!eLM`lsDHD^%DdVAW89 z97_4z#t=6cNXR+Vx*h>T^WPh;GQcGN?hUJ2;lp3Un+&X6=tD!b;|UIZxIuHHG+scsO48bMctdqM}`Cv?zBCj~m-+7db-9c`^nzkxdg)s^ zy?Q!H)mzY=Q}ty`uQ;GjFVeRpyw_@ar3u^ga`L86+_uvTFTKR{e$M^$VS0@Zlj_1q z+Q{<=^2Mf?#UCTx43;-Ww$PBzsWfAoQ#h=*TCQ6P^+xNa;?{CihEiKVUSx}bXJm`l z%jOjIMzM9poJ!ODy-XauXt7-PRg0rI0nH*G7Au7DHN27*!M&Fs>s>D6C6nj9(qlP*bkJ)8dh{pgq8>@edSgRf?MlUlBn1TVn8wM}P~ zN{-zG0Og=EzG18aHB(~wR%el+&`VJ+zTG~&K9P>Cl@$-KPkcP8yPBGfd|uV;cCX(k z8Oo(bIZDk|4TH~;%gN7XK=d(_tpLor$TSx~0XdX<5If2?&jH&aNn3RDc{YD_PYM7;*H!fK!^teVi=kQM?m&yM<|q^Ussnq?N?>zeqTd z|7@`b{^yDtQ0APW%hUDlzig5Thp`lcL;1!9q~R%Pq2fvOAL!EZBz$nG>P%DWGB=G_ zjv8x^Jcee7(H@u?3p1ft;VMFAi#&$KeA}+3w7}|A-=^W)V!oT~2ML?qG?>{WCbv1e zE;+AwauNeTY)7HyT;3#PF5487@A6Qg}jyzfNxm`RN7^qi2~6KE6^-7{tR#E_K>v- z19E{@1u|i4Ic%F_e8g*&o9{|x|Hgfay@>;byBNTdpeTjPm7HJevoQpOJC6N0?$n@4 zHfa1kPBro5SO2APfS;|C(?c_V@#rAd6*`A_d}2H(8gj>%YSZF-I7|Ack?Co<9DYAW z|8lMf0)STGkVgL_$uvW%74*N2R4b-M0t-m$gA`GNRR51FMd zfWnUsUMs9qQRg_C4S@|(&M_0sQEif8Qo*YOn0d-0%~O&1)d5yAz1Iq0Mvb`14UbdX z;0>m412}t$8X$kK6EWq3rci|@+p@h@`ORNZ>S_6@fgyf<9(5nS!or~(C2@GOxMD0J z;HGUU1>t$&tN|bW<$x41QO%`G2;&$IN{R#=G>}RLy;dM4i_?S*n(j;m182)1lE{K| zjNTS1)VWdyiNlJi22oT}DdP06DTJB;y>F{L?^jYZqF| zdeRa!G1FS4XoO{t{HI-gXJPd&vUr3gW7)wZ;`Y^Erm%*d@(`Sr+OIxNf*QC(OUNwThI@XJtvLka3UEL5|>3fTn zovl%PHYW)zXM*{n<(;J$Q%txJQYGU5^<}}#zOj)i3m%vD(^R-4AtfCNeqcNWI6Wdb z5!D+sN!q;nxaWsRj_A1y^Z3=W%vXm|m!VKXdFX?eWDbQoxwSBtiUgc2!y9mVOmHFy zxzKtNgHtKgdE=0x;#VhJUN=ZFxnuU_Onj;`(V*{b1v(Szu9qUf@m?4oIOiGrZbmKN zyx6=Ey40E{qTLd^OqnyLq`MRs^%gLFm5S2qD4t-#TWIGyh3`mARcsxAJJQav9Th@T z&6WIbm5K-qb$*DaufS86AxuTkK6&LpooTvnE%Om{RsCF9R7;;ECeL54jo2SU)akAi z3KC`xnqy(+Y=x+GX`hCu0nubM-bWsa&AyV7iSPD_nn8c%=6k}x=^jo4%N=SvGpLP{ za1(FgP@_5e%h?w8zHsx}ul%QiKT()5)3&y69BpJo2Tf@!hug?&ig4(oyu5U@`=Glj z0`3WTLH&2!!&ECRp8(F8VmBG{y4$ZUJN-I3;Vy-H6YvW|zqAt$Ve-l=%{xrh#MmK{ zPVqg#v{4RFiRIVP@8F6fnLcG|DmD$FJ0kliY027Seakc8ARB)`HQ+iO*cKeRf?T}rL59Ui}K6C(rKc{ z5U6_51Sla4YeUng0ToJ*76ITy!MSM@ghLSI2t*H%iF%swU`%r$sv&a2?8F9VWQSD{ z1;Y^+B;SRoe?VnK#Ra^J0z~-jY;dMwaXAo~c9S_o((2m4YXK3Zi*!M3k)S3RXR<%Q zLNoxno($+2fKg`@d?V;c0gA8`^&j=i(yYh_H0*5vdt8(%~DF~;yndO;L{ zp%MY!cASq8#6obDQx zD)Y*0P)Y?!1N-1+#E)(@n$b4^EBxr_prC|PGb%YwcfSWlxZ(140dv`vJzuYoWT+RDYYGsZa^ zS4~Y6@`-H*JkbDf(gB`P_j_{}gJn|eJwu2eB0a}4^+XJmW#whKV>YOPW z+f@V4e2|WDZOI(=9>Ax-IC=)7tdBEF5s5=vaVfLZ7kz7ta_2w`qPo3fpn+*;633;) zh0H6jBoZ=qCLN3SiH@1_M4sZ6>_d?-^^@Uv-J*vYCG<=bXu&lJPMa1$oLEs2K=x}( zxcWf?4jzvnfNDX;QnkZVV8Rc$Dwl7y;*kIXZqhS?T38~oz8wi5QKyhmn41@;Mud*> zZB;TRoKIu;Yveyu7n;J#HhwWS=89ita$FTT4}%W+-2ZtMW9fm;u=m5(f*?leahy!(AIf;;ChCSp76A|Fs09!aJtdeWt~J1)MH=Bv}-MYv62; z7RU-mM#&!7ET&V6d;ta;kg)1#JCPsDdO98^gP7yfjv(v_M%7XrTd_P~oKu@n_RW-% z6*@Xgf={SpT-uwjAGIrF65$FA`(4gH~>U3o~=&_XST1Gf?gb-0SbJ=E{ zm|if~A;7O(YUTlPBG~VfVNWwxH$6-S^X7F)OARx@&LDvR2b1O)GP39%+OC)M89rF}(nPGrn!u^%UHog=rs&>w5fj z4l~m^y0x}8-N!L-Svo=H6&~L#z{Mw**4DPL*Ys@xE&*?vFs3_H0h(0a;O3hFw94VN zoM)hrrga@cX`}#Iu=UK2tkf+Aaeh8xVZNJxF3LYa_7jrRWOhgbz7qnRf)-E-VUj0a zQsBQbbT=vRDZ4!|x#Jg+a433;4Ti_qgxl?Yb)M`>I!}icm=4<$N60_nZj39)Uz&`U zW#@p&Rl!Io%Cy_UXY=yh7CV?t8H_tdesgt0g@*j@z?hU5=IVBNA;VDa#su~i3a2^SY@fE;nF##VcRtI_`nczG{-Y^d+lkRGQ zQ`=mXw~ToAO?aOjk0PZOV8LF1zeSZb0~aYZ#eWZ?%Cz6o5k}Z!yl6eEfV73B4T=(A z0r)nx%adbWbT*83&j3@`81r3XA_AY3$plprfGaa&#IOE4iU4OXU=ny5`Xl%4_qJ*{ zjU>}l?;@|HdOq3O=eCW=9-}!3gD7l8Bb`85&gDLd8wxGlTJl=C?d4_(6LZ?IG z5JpnXPMd!B$?=}+^cG6ZdH2{{E43~&pwUfPcSSb=1N&(71nm#-){fuAadA);O2a8m zM$>1()%V%YGLY&uBMV(-5L z@@=sa7HUV0_UqU*#swr~!71ei=^_j@tk~(e`!l=97hpiM!=`mMMrJNYGpM8drOz(* zH{)SAi8|^3M!X+O_KOKSprr!W*bu?*5AN4-7|9WKlHcSf{OFm%rGHL4<=9+Kv0sPj zT4~`a$KCMw9XcwNj9gLvd2|rFjq~5}+k;VO*w4Cm=<&g5ez+?qQF_B3sK+$dx<0y^ z{J{N{`CU;w{y*)=;Hztf5pfFhwYbLr{mDRH!n{GX>eNR5#fWo!tcl&qe_?m~bnY<1 zg^nIz`!m|oJuFHyUY*OX{d_zXAG~MS1`gyx0J?JTh<$>?Q63K#IkL9LKh9(*{<9oX zWSL4+{%`-dl>dvvU6K-7F<5|ka`eMsFaLT#l1EBu%K-~Ip@CG;v|=#u@iBajcvrrk zwJ<*E$O{1I#G`wwC1ogy6~IXNR?LB;9r$xRm?$_&IhTqYfv9UdQaS00auzKukv%8y_**w;1x8eHB*KdIQa2!VZ5Zrz1a6tN%6; z&R)t!$8@GfJzH2M4Mq!?lXYB)y(-h$(&^oEc_wNSYw5Amo@uu<5DGcuP&1oo%`^8s zpAZt4Gf^bJ)kJ|)(Lf0vlJrPMmsSTUKeRgm5QyLs@_`?WBKSY)BO~}3S>eex)?dqZ z^FxU}+u0mxW%&Uk<;UV$HqQ@DD_Pd0P;k+T2>K%EDB(nV*&Lz zkziVf!55ZPH8MQwhA$~OBA|mNz2vFUf%X$AV~BCn%6O|pE2dTBpO9Kf z{=x`FvPx~$0Miy>uDp%Cw-KX~nrKJFg1UzyasZ30q&f`IA!;5f5+ma+AV+g^$(qnX1O|~K(sEeUW96SrGi&Pezx!f}lL8;aCgF?qYa@VH&tFE9wqbFy*H`O`%ad;RGI_ov)ap0K zHzwC{Vbk%VU#{kY`m@=;F}aposY2X-&|luEmptOhExJ9mxp~8l$-8vxQC-xGStcg;d&o^yZ;v#1qXW$6TDfPDK)>{o}`a^$@HAApH}_xjp^y|@GMuUgAd5P z&z0@meht6RgzHn``W#o9PoD|b3*q`gxLyp`^P&Ey!u6SOeJ)%tgzF1j)$T?Aojj=D z>=e0|3tBSK^qhEpIN1Psm`K)1;Ic1%c9E$hFEgx$+-o2ye^!yN&9&8>Tn(rwhPcPc zh0~`)DM)0nslqCMFkbH8D;nBN(UIBs)Qj?`+x;6sf!}X--)wFwhpaWtLNeSC{TP%H z{OM8tfU2PU+q!>3FQT%v-lKUG^Kc!v0q)5v_n^wPUI}=ovWr|aFU%RIXBDXO0e^Xm zUOKA0OSg_HZ`ZAVa;KO3;ONPR{RyaI)!*kAdaTAk1G_Twc0H|Y(Y=SlL#8{@v@ji3 z2yC<8OuJprhwH;dxp2Los~Q0v>Ks{ZB!IPAhAy-+G^@D(1g;2xQ93=k zB=+6?l?r1eV`J8Ew%KqZunXyT3&g&b+mdbC%RBY5V4K_)Y_t620~7%LK0K;q)t^8M z_69_@>wN&}vCkUYwBKZeDaiHhRzhr3Z^Sn33ca8(7^k!=oYJon-kVWsBga^1-n8TcD)d;FK`WQm&eXI z?J-o(1Tg8~6XlotUjZqUSq(HfnA|svG~wcER;j>ZjFGGH#qPC6bShNM%PF}@63*wq zYDwp_e<$vnz$9&q&8s@fim`S0oDVb!bMrxe`hFU0-I(6$?IM1BP~jS8ZKLd!MqHgk zHDD0nde%QmPwOhCc!6m{xmTH&fr`F;QPAP{cfwWB)^9;y*J74`*o(u*>@zs2-U33u zxU5Q&BMCYI4vvS=VHS+q^Yj=%A}{BMWDDwsb34cfftM5gpqoEQH5bhf#H;J_R9=y8 z{~qEk>#9xhzV8 z@0Xs!^>Ohsu214L(Dgi?09~KZaU=!{2tcE~!7tYtB+|?;9P2Ei=yUm`K%Lx}Dy!1l zNw1jSpg-5)_a(;-^rT>_h5o-0qUno-C_(^y57FEde8ZQ!dm7v#W?F!JU!x|21#J zT&bEDuoN1a82(=5ufwNhz!CTDQo`^6K7RS2qEcF))pi_0SbhGVlA5f(-{Sn7DStM} z7jgW8%_oEb&(Q5dQ6GQR7c9_~AG`8@hNBHhbST=Lf3CRQlmCHkb777ulz3=cNd$*J z`U0=*c6TnHo!#z{2O>q9_%~gWvHg7=ny#bZ4Kd$ubn*=cMP05!J5gP|K~o1x-z;81 z6di28oYMwGiIi;3*YQ}%WtEeHUXCp$0L^;P;{ITAYc2r|q~MpgGGkyV$EF$J2D^$X zG9@Mz5$l72Z8`=hA4U4=!LUOo9Fq49jfH+dy%H8sYSXad@0!DsjPLgAgW=an`}HAy z8QI?JU%%hJmWk4n8<9FT2CRb!zYivN4w^79Mk$MttDQ8b>d@|GHkqv`e{&lzo&z9n zycdOn!_qhMuYPt>whp{XhGUI$N>_tkJgm$4s%{%I$iM6m^^RRk1ZA8^I2Fw9t@Zyc zNz)CH^$LLrl{WHo{8f^4$rHFtzyBf~k!i*lF3OQ51HD?f5I#j=>oB7{tCZ|q&u|c} zM%5Pgd@tfihD< zNTAFF%1k-R81?{*;LszhSTWt9VnWlYm9ZOKYdE9%bc<@EIW zvC&k2llohXrvvY+$=suClhvtE9x1+@^{AI>Exozb%Sx6^s22U{_znamEcbeWiR!JD z{l?I;K4Y9we<)7_%L+i?rMla6{tgfI{*rOl<+pMc6!5VArqtV^zvA!eXM&_v{h>Uq zhk6|h;?bv3ZEEX-dFwg@@~+!@c&h>qRyhnDn%q!%%VTA9@=&&5z_r>em+!gHa0o;H zM@`)j#+`vli#f{=!_WH@GhDeN3q#9U{ux-lfRG-^e+Lc0`jZ~Su}wVJ1~^yX4|#z~ z)KRF{`Z~+3L;T>jY9LJ;>@iUfBf~bCslQB}Qq(%8W?|Qwz>vizc|pORZ~;Ua zB#2gCoAQuQfjMRwg}fIj zN_oeHbO&{|K*ZGW1UAqH?zW@_99aWJE5}hUx3;4t#4LGFKQKgN={UnW{pIPGBG=Q< zqJ@~f87*_3?!Y3}XSOVYZ43I~QwqV>7;Px8B=b&KEbK7T1z~v{8$D|~!HNTM>X|V% zBiKZ)7V4#s5H_K7#%ye#hEy}F6P!Q`Ox#%EWC+2`l{Bz4GmAY=6Y z!zjTPRff|?ZGvq=Y_SB0ILW^Q5!d@asxGNOLBq07DD6EHJqwfQqbwoEvhP@cfPHik z1&nv0QjDl?QK_3q(-q4S6{O5EWjRpZef&rFWyum4UUC3#w-QaG&PT_j2mc|hB{TR? zV(t!-*oXF>CN;jbS1Uy#hywzy?66%-rDQFmhlrRS_^(YdtB=5=}K1V_FsDXzY=~+@t+MjP-&T zt7H0y^6*nzctz02Fx`27o{RBQiZLKqgpFWSL21YxAXlLvsRquAVQyfc%BnAcGJ(F% z{Nu9X-9TcCp#`0RpgVL19t5x`2+wr}!17h6HK-x0s~bpXkX+#qS_p${c{ebdki2w5 z60!$Y%ZaSA>P{$6ZV#N zm?RZH5r-5%ksn!Q)tyk@R>V;^LN~->cHE8Uaq5IgX{#I9hm6ufGEu6^NkP|geNE7) z(G9Uml~s2_d7Bh4Ep!96fx0t-M$e$Zg8&VFkD&2Ffg3Pub%SH^G$9J};rv;{O@l=1 zwk5&Acoeh)*g*~JfeO>$&afabtu+5S6knS`@wGtlx8&(jW3Gg7iqpK`UFjk21a@Qn z)P;ZgSxbfC$T!ZZmz#ob?xbIVAJaW!pwrxV1Zv~P!hg;9EN(2-)wr?LGM9<(hkH%( z<@7E1@Go>xk- zCN7^|)|^kHIHGCB`2jSx%D1M}7zg0phh34-*!8IR&)_%TjOua1KRIg-CLh6-b|Q}v zx;hd{y~|BSfvZB|=x;dN(md{pKUNqC1YnE=+-?el;vcA7@&K6zEzM8y3)VtSEm#}c zz_cF-$qrQAxSsQ*TW+R>>y)et7;SL;Mj=7WiRlK6DrLv6_UtvCzgUw5P{PlkB^djt z1Wd)2;@~jkW|ciDiC`R$)<7ofjk6{=52g?nD5G*Mwg!8&%JCedTS|Qd3J9?l^&xz1 zfUCd;W-T*Kf~AF)YG!L8f&@ySC9_g&7rO*dxe$_G9LgJ{0IQ(QYzV4(z+VMK(40U@ z#hA+QNA*XVxz+&r^rH?#=E!Wh4&7_JxrkO9IIjhrxf$9NPXd2j3ZYigpHQ9-nc5YC zv}l3Wtp#XCz;Ij9C_qxeL1);yktKJCuQx-@07-OG&JOjI9Q%KRtu^~UN?5VHdDQQU zCeQFE2J1zSNiT&PnVZK187YUgQdy(lm!+&dj;v-9QJ(1T1Ud&lhAAsxfawrzlr3vu zN6G;6w(h9Mii$89oXDuc@Gmj41{4!Wf$eSplP5!#yXAs37|6rPx)H#qvnT>g_y~Ta zb9VTN_A1~5JA%YJSsL39{{P0d4CTLkW82VG2O$ev6QRPSwJl>%=4}c`4n`t2ALV$? zG|NOFP;<;k3{Noeb8J3 zO~}f^nV_`mx0=`-`u3*Q$?%N1Z(_Dth2T~$zRGT zB9|o07OFOiSEo^qr2s`Qy!4;)I1;tYNkqF5GI_v3x7o( zkS~Iym+1k)Kq_>2Q{aVQAJ+07TLp+9KpHcid(EvTNy)w%urdFapIPj`TjCA>qV{l@ zdV`=xNs_`BDv`RU`BU-y^kaMZl4<0jRv)XhvIyArmQ-@TomoHZO_K>CrDvEnMkp@j z36pV3*{%9d7Qg06#|z~rJcWg&QCRk+!vMvzBy;zXQ?ERQaxjSg zI*_*N4-SSF0kG`9h>nT$ZI%;fcjyCdCZ~lHpz1U*6H-nCDWq~5)QoGC4ucWNF#|*) z*rbYj3?}H3GAm2JZRrje_1$1ncnsO!V#*qR+X{=Khw>P*9l$_bvZ&DiF}NeYiY1j9 za2I^Eq~eN>^D=8N@FELueEkl__bT{7fg9NQ?T2V>428H$CLJ2n`1_n;S- z2MxoqFM7^xTA5sa5;zF*sO9(EQNpGs$OQ{qb5{Vw13Ew+_Eg;b#eewgpLzcOJaz7qCvHTm zOi<2%g_X5n55iA~zozoXnC>h<-JYW-RO`&SycA0kly zh6nD)*t=S05OMVXus#6liaeFlV)684Y`#aH77_VT_g8O7_MS*S&Q6SHNSoSby5K~< zg~KkWRQi=>YJtj8*ZvHe7L_IV`b3V3on(&<*N-COwOfDgS^6qm8fE`(u&9yp{-Ml1emMma9QNn6cska zG&xH_E7T*V$$eNQ&@l_^>jci8Q2v$j`*#=LOH=DE-<6BXyUVnd)$Y=9RkU%w>~%xE z-3Ljta%G_c5<{2zFKfW*=-L;fmHD?ubN0X3FO|P(hac^^hCgb}&2va3yG; zr7Bs#RlK*iz<3>8zYVzNlU}b^=b!yA>Q%ZBs{OL6&3~{k%?(f@%=uax*W~L4SGGVzg{>VEs{g1A{vs2KQvRJ`n~P;B?*CAnnU3IL)Yn;goPXWL1EG2B+yNl(fOY zUxkxZIsvCA<6eP8&jB2pt!DnBZb1h_Lyi5~_kiNKZVXqSFL9NpLILWm8_l9{3e2j> zZoMWgAXRIk+tjqj>iUyPU0raYK=$7P*>^Wu6aR~}LQu4T6F@YlzG~ZMwFTK4MGF@y zEp!4>G;-xVK+#nNB1E`k-qez&$lZYYLIB_he{Iu)A)msZ3iy(%CEWJdW*2UuC~cTH z6v3O+HL5gxpricsC>iJ$R4C3CztT*QGV+vs$ce=*n|~ zX~X6}`r69&shfx<)VzBnv(Ejzh3@mDb^IPBUyuZ6yvML!d3fR;9BkceKc-jKH+;KF zVk28zKWa1ZBQ^oJ@D|L814^+3<*Z3+nOlafam&ycUSS#XMPV84qh}tN$irY6a_5$z za2UJr7_D~5HiLLJro<#k_wyDC^N^xu9->;}aa2FUJ^=_3X02U`ZEX;WTrX!GS|wPK zkiati9n%j@KtEWMXu2XU@9CH#URzac6`sY*?NVFuU@g`?8J6;3foktu2XfA??l7i zQO9bbWASvygw3i+d(;T4xI~X|;F26kqs0F)SsA3E&e9_^jBP-*B~kzN7qJ~EVROx2q#GHE|+z<6mC(m^sn_+(oPQUObmV|+ycVkUQ?8Z?79t$fn|T->#Y zz^_n&Hn7)@E@ky4_WE8#i=Xem%^8jDy>X;;WXG-JR%%w@{Z=NX<9!BlR*>FEKnQ?4 z`lcab9VX*u)M(3(4SFu31Gs#}gp6O};uJ5jUu;MObHHDeO4wB-A}oT)17}k966jd3 zOeuGI6{GWkL9lG#*VZJadz_r;ct=9wz@RVkG~1jUI;v@xU}b453bRgAYi~f;I?>+-Yf7wmvgSZR zEf+15V2QAG`?zKg_@P?u2Oa>g-G40@Eb8WlmaDx_Czu$-1Kt7lg$;M>ZnpzbHZ@<< z6|Z-21$~g^DMi>}w_7$Gt`1_Qt` z0(cz9_*vo@p9`myR1St^^*AQkjzQS4STR|m7SvRMbc8vRgsPUGJ8Rkt4y9WDOt{zl zUkvyAxIg8a6AicK!Ec!0Dk{@_wr@4Nf-bHq5zJKq;n1P7-K&`KtI$|8Thv{)7jedW zxyjM<3gilOE5d{$OZbYg_hFr9opg!>NWsNTZRDwRUuU?yJ~qtXLgDV z(D9U9RpZYVc#H%55Ff_&F=}nbbIv(0KiZtJBA;3|RS%y;ASyZ;b7R4oM zTa)~`L8Q|Uov*`Yc#;)H8R|4WmW;AHB5+KcGwB+sRz_{8QLToj~>ZrF+ePCdLzOwsu`WK3bLC}&9L z?dg-sc^L^s@q5{G5{EL&wFF23NC2kQC}0W585;8rni{WQ;jN3CPP@=G_u?DrU96V= z0gqI2#rHEo8Fj{EpDJk;3lucnlJ3I{7LoD3a13~oFm04C^)AY@AjmRGL85^wUH!rZ zLkrr!#;3HeE&;}-twd_1*m!PXVJvHl1MgN?KE{zws3LSo)i5mlkcz@% z@x*mmLoL?aYDx$E6d+>}$1qgjtBy&gGYVr&1{zTlCZh8JJ+o2n z7^@`Dj%xCA>L$2^uMeVIOopLRtnjjgy&%d3Vuf|;3l=B^!tRk78%N+UUbwZB!pL*0 zxwn(Tr$gcXP70q1g%@{H_-rVAK1%_CON&hQKXOEdNp#_R72E{T+8A&Vju7;QgCK=)|kaYRPNV++v zja(SMWXgkuae=lK-ffAB;p++^W#vg(4x8`o>V-JH1$FC=%8S@?3-l;Ll|p`8oOR%m z7WmN*U@o2@IYbFETt*GEafth-CBT97QveBUK;N=S*S_V-Gq|A706=&zkdAH4&NXww z!&MbFEYP>!rDB|lohf){s-aNIBwQAudv?V3#FqYFLa$k`Kq8QJkmOl!%Y^+jYH#`F zJgeEQNBOB65&VD+X0-yH?Ph@`|HiNF&LZicHm+{>lOtg?gQ7w&JkivH0XFqukqIUr3y=q8R7;=Dw(<#YHC2u7Q!xsG0SYiGnkf;R z(iqZ`O$C%li~%HgY(@}9ENL=fP7tCn$D^c;S}h0-Oe*n_2?W5HCxEaC7v-W&hx(4W zv8^>|7NT+7QsFB~YNc3+O@P0#lK+prcLB5Os_s0`eblX6b?b4fRFX=nlC;m&tMo!8 zSt`k8*{V~L^{@>XVqz!2;F-|C)U5$a778R`Z${Y6s@tYjr(A5AhO=8z0hKV@gxqq$DOlr}iUJ z^B&bh-%qw6Q5BQ7RIWAaF2x1Opeb786vZCHav+;BSNzR}&2S1m zm&Eofie@DgJ?Q|{YiU>lXiMd!X(POe;(T$RSb&}N0}XLvsDiDuW5$=2oDYV5fR9dr z;L5J{mz{PQwtO%`pPq!%XuvFJ!frAk^QQQYIsV~tk>=4Gti@bmTXB=YC^l+N7Zn>a zPmGH70B-FE4IMIO+VkOz$sw^y!(vq+*qXrR_q~*3yv;}6P}XSB9`9TgWt!TSdQ%2k z)`y{KLmLTqj`xPySFauQML(oGhrB9|Mx}!o#AC%N37d)>WkCBG0qtxdJQV1hYJWl< z?2+E&kzTKyCl(;RE=791M=GcrTG5-rr~awf_Nf#8Q^0<@K1PdQo=z2!`!^|k_-bV^P zd_07Y66$z1^M~+J3ssKC3YsL3@zy`7FcZZ`V1=Lz#Sv4B1~B!%_30zX523rD7t)ea z+Tb|XVEq)zx|y>0ezwShj()7*SpX}+<5nJ(TIG3MEH&jhKfgQz%gS?p`SLtom{*?j zX?ZNNpgfP~%kzYl=ZR3BCqj81ZIwsG6i`;0N0%?n6Z1<$&-m7{$b!;5;Y(Bdxk902 zG|!Jw5jYkW`tmy15sh{(EYKV=Qp8|hB=v?xQ*Tl#l@JE1B@AH|0C^b5`ivhr*ZbfG zAKV1xy%~z-#mp7($}6;9Ri*6|qJmrD?cK1=wG~r-A263;-v}StW_LTlzG^fu8pY&Q zA;9>Wmh*9v z)w>PuGEj$`U7FnsqVL9b$i+&~vKa5zXcFtBzO)-oaD>@j0!CF2Q>qv3CCyv2y%zQd zx{`l>8VB?RNtQF%)>9tl0HPL(QZXVuvXDTo>?tF2*pRbASt*PeDWTSFbS2+m{Mj$( zbrnkE&F{$(nH{cXx~S;v^WmgI@*AcI!!%Eq=uGq~})q7bFqRc2&vwwAnVDsiVu|BDz{oY=hVp@86&H*%j4D`i$?$f*Pv-mB!_-k_Un{#pUXYkkO z;wN(PJpO~Z^zmGLEEjjV_;4#g!`H0u99<)E0s15^CWmfq`g7 z9T+1kMTM~K6Nalj@_CT$qlg$#Je%cX0z7xhm$eNoyH7-dtK~&{bcqqAyalZk!ED^i z)aZvs_J~G`XjE*^s9L5up=ny{bpZ%dRP(s4fgw5?0J=q@QITBD;|11a9U_8shb1F+N-r0eFvpL7AegUieqWb za6R4Bn&>=HH-R36MA#Kno>W+~8Wq<@p)?)cYAXI@{Ml!u0ZBR;mga}g8?Dw)kA67w zgy>cOXD+CsMKEOJD|8SC46GYG9W#@J3iPF}XAxoPAlZb*3{tJg$iG7zh#0W9g${;( zrX4CK&{i9iBN7z!!W4nhVzAjN4dDD2@I+FM*6jtOgJ$MaY*muh0msW68|4*PB@ zT=E?)CTqN|(i%lFzSu<`^m0F@Zr_Q3!R-Vu#68hgO4^U%Kc9LVf|)fbT%|r7cTogx zqv2z^{!KSL%XEimzmvyn2A_&jP2Ox)Jea;P2tBA>2OZwmsS>Sb93-^Q%ZIcK%~(x7 zTr?eNg_eJdxxV(d--vCsld*IU>vo53=)jMbnwo1NRJ>dKI;&H7bi^$pL0SkI2hbvx zMqKI(Re$}T3k|7ISJ)tF4UnGDowk;|ZW$01-4)tFB{YxS+JY5bTv$MewhDN&FW^nS zfHGmEfGjXttW~rgiY6o%E}E?X%M?xRa5E)Y58m~xsl#FTYdXjj-}>mD9^A2iZmcJR9l*V0A+DENCc9}#4{e4VN}PUz~gX3+OpQV3%LqA z0)B^`Run-Rx|+elF!QHhkg+6~Rg%hUnS_;DtSvenEOKa~-jiBmFsbXJ$IzAt?i$7dH^ zuCu!R)<9H)j&R)nz?Agq4EZiuHMeiX7+f+4oNofx%T;sqk8xjm$=K;pGYE??P$1+~ z@cZ!zsq-wDXjK=3BmXt+YK7AI9WEoFGcCj%-BMX>cH6roo| z=(UPi5yS$n>MKFG0>LO0s zH!E&sv$4)E4OUC@yO7lqvnD2w8jf173?m||<&aG@gfYyYdYI7xHtiiM%}83;qyv2G zw~qzur?mRsRxXT%Ays~8@v(rFUi(-O+)6(d_?mqxHze{&d_yCH+G=EkH@Z#|dVn&^ z)6Yl5V)W30Vae_DX7(~-T3h^qQ8^63>xr#Jzb>cR=o*!T^A1F&sgju5|Y(Kjdo zv29|4L;u|%)w1P|FNF0)7X*m1TOrIm(r%kOgU@S-b2T~tQ8R{9&8UbqnXierGwWs} zox#W6W1gWf#Yx3~x8er1F9cR#JT+le^g6adRrzY2S<%IphO00i7c7T{=|TY#>!nP9 zY{?HTElf+NXN!V}xTsgV76!#dOMcLy&E@2WOA{cU+48CK`>ZDx6JDR$Z!aQTFD<;n zJnf@v@rsEa*44zGGpM1(BDXNaeT*w~LSm6e;lgpAX;d&TileYoPaF5$n@Ng(TUe@s zUe}wHX2sY+wLMid58_~jkEH<8_@TM7p2mut;}1*qG?RB%1na$wfT#*RH;TBN82g+l zC1)^}7Pg-=rR4O=bE%ZWnjoAlX`5-;*eowsSSXr?r_R&2lx_JLWHt<7t_H&j&7hVI zgUujGB1_L8zOc*;0+nVE{K1kcmgi0p|A%PEWoOWHrY)D9LC={|e&17v@r?Q?TYT(Z zB~7BmrcNrv`&CDa4|L8JADcRIZ?Gtv5vC5SDd+h>?WaOzOPPS%zYtk5tBynEcs&UHX$8z$xUXJ&;dA!<8a>iD zKDfmPvPUFQ_J{=7BPuxPgF`-;B3Q$pPBG{-Ll=K_{%|^=Gt%~jbbp;E4mw}Nj=30} zT<=<@_RdvB4u#VAUPb3i;cn3$GM!#Ujn!iv-A{YjE+u#TT1PKx=5P_~N@jX^K{JQt z*A=!z-1lMTpl;VjiuGYyb*nPUb!t8vJe#0>&?C8t@aD6i5jQ~wSFUu|ef{1xiIFl4l89Y^=|L)Z3Mn_*cDik_s zU>$nW$x)y>Z?)r4oT3;38wohok>_4342pfe02-HJdCa^&S1%`)rP1f*UG<6)`iI)bu>MX`$PP)V0W49Wrsw^ z&#IU;r~SU>ECVa4`cCg>`#pUj0&o^iGb#IbeGA?dvcb~3@ZG7?+y}`(0N*VAuOn>1 z+qJ&m4N(psV#X+?3&lj5(qk!@y@f%m!-drZE;~FA*fY+m`qLClz8Q_-H9n;Q=i9?+ z%34cd6l#FlJQ%eU&eO1m=2JFU3T}y9ni4}y`!CNRpj)5ZDenOr0wiT5c{FktZ;(bkA?mB-srlU zGSEc|eG5%9B8RIuCq5AmD>xXBf?W<@m^b=k551cdrjs=<+c3u{M0dE$jq1`Wqx3cx z)-0r`r)Z?pCY}zuVOfsgyd4>KSQec;vzjE`iP}J)kvRru{00--HSc4;RQtS`2)F@n zc}C>qh}0Sp@AxoQbeik+l&F(6$cu35+Wbu>KuTObp0H@E=)^E|KuKX>%Tz1$dQ>F#yVwh}a;=@QBKEkElOtLm)lhT}a|0{BK`JU+=t0`D>;`GIq*q(%qTWkZ zjyj5KV*h z*OqQSW@%`_{?zbf@p0bXel#41IN7Ne16HYND7qEw+aq6llHg?eR21jdC!RJ4G}gwf z`SSJv85)y^El$G<#*-Yyc%kzSNJ)MC$Vk(Ok6D3pJaH#<4CVpiBUaG!4`ji5)#H+R zgpn^9N_bpmgDE8>&T`lQlPbkx7|D=LX&5{W`55Y?VILdS$pm}rbY{U~n{+I}Vq;c( z<=v@c3zjxMQ5^TNebTmA+QEt9K_5Fb0sn7lQ(D90z#`saH_N`#Vy~PizEWhfPVZ2(*Gv>&<6q296lZ-WmZ>2wL@Z72QW;Za(Hkx8TD~AIFi~L=uVCggZ$$OY zpxEKgL4+mHdvB8GR>&^^167ApH8^z!M69k^4r7a?_)11IjJduvgt|yflPm#@_3eW7 z)g5S+7VB%QZD%r9JZ5*0bS6Kqvt`L;6s=R{2NVG|{QSQ&RcK>1=QyQmy;cghd^?tchk^DN0vm-N7v-nO9IE8ekEc>AK*=wFra;2nL(0ZK;=!HP%GhN;J(kr+kRx zrwm1wQ1;8Yg0V=sZG_iMi{Y4@-1p!LtR%}i&k0vSV0MNFo*d3)srDpP1a$m zlMMPb&YQX==YP>RMYo#5xM3X+I{)u|Q>4ux+eICPTDtNT9gb_Syf-1j+)&k$t`8=f z%RE#D31gI~Q}RuB+R-?9N@X0@lzd0)oOb+WM!8U0XL|YF9j@MJvmRL<+IfTi&?t#wtA1F%Bh_ zxlTJQ$Eymjy6n}wCTI2YlW&s`#t0!P`03zK zS|Ns>mhfDKLYsTuGPPZ2hUn}z_Q+R)>>ZGZW6O0w34wo>LuchEjQwHrS_ge zp(p{H1CB!^6eL=g8_c-Z&&2i+#gQhUT$t&Ur;BV~f#rt#(nQ#iQ9a_K8`8>ACPh87 z`1#TmoG=|0${}!Zw3I+6Oo!4FroU4xmToWHMuA+j!6{bB8K2a}Qq+WVs4OqTZiQr9 ztsXj;TK`a?hzP`{twU2|{RNAdN8ri?6 zlAp-pQS>U+bk#43os4SuM@YZRNm_kZES=WK!Z9umjgqLoZ>_MF8{AXF$Jtp^3p6>+ zCP1yHYE-?V+X?FWkzBu28(|^{^FLVsm`DfiEE=>a-AFf^gMF~g5dGO?0T7#0mk8r%kGxyCToAJa+(bAVhw25R8#EXcbg6L=_)z>o+ ziU~9?g4ZQ%%1;ETqKrPZl1q&=!u1W|#srMB{d~hd)TH0bibc&>(|~59b)wl>Mb%7& zS;|LTZb6E~@2`CWH4A60cSRi8=cmbh;lUOs*H*cX1(mZe`I_sKRH#+Cs#UIFm1ESX z8Zh#R-&C#;D%TNGeU*KxNs>!djwu)_$Lz4mF;LRVSv}h;Cm7B)xXSG8{kPTrctc@} zCgPnq&{?@DvW22pKWAqui+D>iS&y>Tf48K2N=mGjE;6A*iJ#Hs7B0ef5+4$|qdAS- ztpp4&Ylu%PlRHp~oP``{o#O*mZ|EZM*l?f!ubfQ^D0deY-ZP|&77OjjOH-(@o_@MB zE(sxjogmHQquE_Yv!Ttz4X>9KYV}qgY zw>MuX8eXbYs19RLfRbv9Oge-H0T+{%sy#(2C+DK%o-fz|^$yOETbWBSbJtv7Fw$ro zemc&co;4;w4bwq!NR2F&RfXAwZ)AoDtyP)jM+YSe(%+pr*{F=f1?qwCGF6CE1&X8< z;_KE8p;X~X6r0KR#owofC6RYLt}AZqOeHz5c!AbdA@!BGK%w$QMQWQh8FPMV^+N8T zvI4_J&2k`sv&UJ1yV3#^@dYNbe1R*;S8`?ja;~h8rezgPlnCj2iKX{jUxRyd984zu zwNLptn!MzZ5Bm5T;-C6&MT1#O{NrEpaV&F_4?gJQqr~rcpO3F2{@=b;F!=Sv|N0Rh z-$49JANO%b{GmI1JSP6&Uq=StAb#INKE9Fo`x=(Ki73r$@y#@LDK|RQvYTo2C@E`V zF{GGav~Hs~lk}Z+C9$&|csQoVSEnhO?+vNthTBr4iDQWRTm~aW9V&xd$`C0dZ7Gs} zN83_*NLkmGA~ojvwiGD|H?*bbNGHP~_bsU!B!K_Uo}Pd+gI=Z}!-$ z$DZu5M~`wB=I3iokL(?U$00qg$R1bdaWH!v)Fan31>gZaLgm9F-hT^8f6|xqCOwH1 zSX~J_gGnVp#gLQ|CVc`git`p%9&w!`5C*PYcHJYcf5i2TaB#=CNkDpgu6v&m7s}yFn zXzANLEoBK8%GM;0a+4e$CY$6@Zjwj2Ngm}Ud6b*vQErk)xk(=7CV7;b|NzmZE8&O>#@o zw9h8FrD)n`liX4??X#(9DVp}#B)1ez`)rb1il%)w$t^{kS2oEl1wwG)Nj`5Hz`R8_PM0>uXGxAJzkMKxgc#Y`O5`q1IZH$(pDvZz94ON^7w+Z z;pER2q^(IFTadOk`SOCak>t?@X`{&(7No7Cxz77k`6FeOpEVyLVgsVssD^P~LuyvG zcz$M$#PN(1U|O)?;ie$R4rulcwxwwHa$qqBquINvEk(08qc6r*X!d6G#ZokTGx}mF zn!OnlVJVuu8GW%7o$}AZ)1&u4<2xK<6=0AjLX=V?S28+BYvNN^Gh@h$3+QWwR&6UOAc;w7;VLH6;2 z0VTBhJ^4iw$(E_#hc8^e0P;hqpUcv_;c z+l%!Nyr{09N22({X8mWmZhk3QlFEN?o|E#b>pyB-$Y(N!1WuRC+I`V_*kDW6G zm{+Estv1-PUA&qMrA0p5o%<}RG_`4!7W37W^EeH=T~T-I^8z}~8G2It`C4}SuM~UV;E?`Wo*o#0;3f>Vnfk|d>-U_yqVNC&mFQD@ z^$Gy!1|iB?bZ7O?6+{6_@%2fC_4D@lMM*K{z(xFG;=9xv>3;^hned@^OyuG3M`hnv zEaB?<&A(QRcaf!=G4?`a-v}g8d_6ly$>)Egn^!!9WPn7t{-5vlS@MgM-}|bdmA3#; zA$~r8+C`;AW%9k4(pa)5Q!h3M7J78Ynzi4gA(BV;&P=}!gXl>i`X{5$1c=`b5T7=Px*(Fz(ffRIg%lK}ANmgL~BA#tiPO9&U$+`_neK#|&<#!F}Ds?e=hAYlC~-;KmK^uRPpk z9_}yN;GQtJeFpb89`1mL`_FA~Pa51ogZn!VcZG-h+cvmw7~CO)`?iNW?BV`Cg<}g- zdli**$g=EC-`yJNbm})X7+|)Z*h6^l-E3c;Q|zfPknz)sVMFrC5I#Ui3Iu@riiwM& zyv7Ikh1S!}KHvf$J>fzc@H-zY0}mYWIg8H<$sW-X_zQj?-aAu2BHHs9ua!|_?}=Re z8@c#Xx%hW-@wra~2h#rAbqfls{L}dd8Qi;~pNw&3y(_vkeu;L4C|JB+k-Le+irhnF zSdkAAX$bU8yio<;72VR)@7Sg|| z@Fn?7OzH=fctbvsdGKviuZeemZiT_JJm{fn4;d8K$2xfw&7k@hgOcjl*oPFC-Df%< zmlzEerE=1L3@a(M<+ls*289oD!GywZ!L=y-H8>cBf6s;F3V*f0;!5~U`4A_3pb+;$ z#%{Jhrd4~N%IuhHe~iVnnw zTCaaTyzbKL1A2W~e6aPJkzvSLeM|A>dc8ZIY`y+B;q`!CqtVzE?Om3qA~zN+<_;c4IQ)9b@}y&=A)_4?<+>lJ!^tzM7B*R@{% zY1l_a z4#tV2&!Tu*Py6B{VvwTvsGi2-s~tTO#mDrtGd^y&!^J1`G#2l4w09Jb>uFPb($T!S zSe_>rZ*{aL2R!vO%IO9gFN&R>hB3mSt>h?WX(4n$jtH724f2!+Dgac3UYr5WU(SMTPD074|3sZI3tFqiDB1zR(^YOCOKx zaa##$d>}eZe8P?Cu8i`m+wOMz*v$RzdFBUPsfpW>r5FO0ZS@=as!S&S2gkbC|}{Z7PH zK~}}nCU6@ILF@0uhTJ%O_X6?0po|uSLr!?QP@Do?F=dcBDq?r+2#{wS+TX2_H6vgI@MNtgC94;3Y8MZ{vuq<%S#)3S|(khPPlOa48!t)`tMLgwE z1T4f1S6vA~)C)sK#5|W0-$?2wjn%L+{xDgV2R^~5k)h~af&a{j{N6tx*|@o`Gq#ILHQQ{ZMC`#5Eme{)Nx*v)vOk5h6s zYJHr-H)9U^=+p-mpj1NAStk|gW2vZ6nHqW;LqV0AGA)PUgq?va!+m`^$GG2^1)w(l zmUIEAO&7EPU@JKpH3+JckaJWnS`JVJX*s|sQOf~#Yg!Ia*l0N*&~i|-<$(KeSPo#I zwv`xd2cnIN+jvGRH4*LLv3rsQpyt+1M&ktRRPP~Rnb}LQev&n!=Hkg{AHncsw4Y$h zWHdoAI>|Cpb4Ypz2@nh~Cm5QHCJA~cS!u8@os13`O72VQ*TCN(;l~c?|p8FkEgJ_NN#)dC@9EXA8q*9>W!F z7$yzF6)6TzY_u>`TNsA&81}Yd7%~idQw%PTp{s>qbsoc18-~?}VJgM2DUYGMg<&L* zVOtx95yP-8#lXpuRxN5R45N7rQe*}=`eM{DY)CP1BBh0)r-k9lJO-T~Z(+F7F!ZJv z#`73@TNtj&V~~@O7KW<~!$68*UminW3&Y_&22XFStkmMLVK7(FnpvEjY1N{?g`qQ# zLH@8?Wx(o*Svi=NffF~va1M>4zpRsohxfEpD0@)fd636Q^(s!*5cDqj$8vJ-`~Bz^ z&AHi=9`rSO3Yr{ge)K3!kd~_l;LwzoFt;C32t5q?B2ok;X!Jh{ZZfVa(;5L?r%HT) z*uBPU%@SLn5Q=Yd*C_k259&Us`aqT7i+8rvv86i{5AxC+abK%{$V&HADDO83-SkB9 z8wyLhCmMb49yg|MReezR!LSdU5BQ|pJ)sL{OD?fnYL7UPbkklLU-$|5!p2cFrUeyG zi%{cgVbzmXsK&AMNy}H`c>1KZt#KlK(!$r+nLcS%Y>b=pGqBK`ZCqkUau+KGhQzVs zt+Z(!$=!YpY4jvxn3f}kZb7&t*bJvZApIyo16GS57NaFWcZINDQMeNxl(U|<+SZ3> zIp1d*FA$483=f{o^bfF^tMc#G@YXUIlMQ2~b3; z1Z7}4c+Wu>q>E6qYFeMoffo*CQJq*ibKg;owggr~bJ8+!O(Q>ZiPFzQj$PR#4 zhwYVJFy6o*p2Z$%GXaf&M_@Js+*JlQpwtxZsvI1rvpv2m4X!s2cV!L^U4n-jHMk9V zxX~QkXbLxCaNF{5BRM$Ehk&6I)xiDxV?F}p&Z;$3O8wRSLER)b8x*W z+~o$hKM!|#4vyojzI+D_ZeJemU=EJ+^d9bj!CjVzJCK9xN#PC|+~z#op&Z8hYP9E+`54X&4@^GUbZkgfa;YK{%GQ-Kkt@d!s3?~maDul3nc2`x94JnZuf7J)R# zpxc5<-N;m@4ZuNxNFcH8-)$zAc22(?vD9h3>_lT&M7~Y91`!(q$Bx?=!OF>KE5Y{3 zXbZu~$!IeHyKI{X*reP@fN0qu=#m`UDS6WoAboBiK!9COuvT&`rX-SMJK4A9NLQzW zg~e=xN_*1jD`E#Ykv*>h0P*xn0>slp1c;|s5FnmT5&&{J0pcm<91>3t5FnmT5FnoJ zCqO*iM}T;W{~X6o%w7VvboLM+dyf+!ZSN*H%EEg^w2K&Q1ncrdw2kYA{^x9r>g^S4X zwm2GK!L%I?vv~N>Dz;ko-@WAQsmyBGKX=L5Q-Rg8KXl32Q)$(*|K25M zPeoPB{`;4lJ(W`}`yX6#_Ebo<>j`zVJGZvqOR96jzv zWJKLQh3$`gjnqUI5ns^7aWaXtnr-Z!L!e?uvy_a_*pBAhUayOL0A~UFNxr8zng>WCrHQtUZC9EEoG=Kq@sihWe`)_8rdfRcORMz8?E->KQx@5Uf zGlX(&ZO4_8T#rjy!GOzd{#mqK|B&HY*^VovzaE$Lg8`RYvRo)ULb+T!u9O&iT+$Q< zT)MDvAs3;s`rQmyS39nhGJ9Oo83tT!+O~`%5iV3Op6WQ>M@8YDAWU_MkLBXpQVrX)ilLNDby%n*Tlz_<9=%S?=%f(vsQuZLi$=Rhew?b? z7OdaqRSI2_ZsWG=BZEbnPQiNJA`1*LuUj&QzV65TckjgZUEjYWgmWSM zjy@;_qn?A})L?WARh>IbN%xig2SHjPp9+OE8?Px8j69oy5y_zVWWha8AFBGG?t@_; zI3K9kS4e3P3{^N+g;;TiJ*(vY5peNgv7)dyN;slr38DilAh zxUWL-6Im5LrkGXX-zi3E?^6K?&(oyf$&#G=OW=DXwvKF2xu8YSfz@7*ZW&E4zwa z)e)4q<@iWeaIXeE$vd1=#w)zyR*l}U5@YkU86Hh)+E8LrHnlg945PMaLo)+Hp^dJ( zaV(dll(=zxUW#j+$ffuapU^0XPq^b~zPmB{ItD-4A0Nv~%n;(e97%CMyP1TK1ttt7 z?J8+MZ1@~VFy!KdQN-otn~rg&2u0m0H>?<;l}$Qd$GovqR+3WlAFmS(50cs2_x;~5s+E1#BTJS&aGz%{<0G~>eKSuF7M zW_U&^O>e8GdabibS-hvPh8Zh*<_auZGb~r;O0zX9jm0R<)&-^6DmH+#=(~36E!|z|)oCxrWkowMxScy6UN} zB}&sJES`}9i)j>X99)}~rZX!IDmyDp=OU#+SH)G;#;ky6Pga`iY~1W2Ul_%T(z<&V z9XHsRj}<-p1eVPimOYfF-)8tGw^?PdQEV}AZC=n*Xw1fno^=9`sr#)~n<-5_Z5#Zu z`L?Ntw&`ak1WTW}GJeUJ?>bTAEq&@{=`$_{fqR#wQsoA1iIW6wbJNLER}{wYD4C{H zZ}v3Z9$Z~W`}c3vZ@$E%v| zDz}oi2kq^ZO?Rc+%Hsih9BsN$Txm#CD&Uc(8*$@2?zhL)O+57OZoi~=uDhesJ9Bfh^v-p6we-$)X`wd~pnh%;OiS-v zcWb0~t~(BPY#>0tyPhDC-kDp&rFX7-y>s1dlisiFturOGo_3eL}^|yU|QvsCT!%QG&!ksDMMt0jWUEK z#0;1kgi?mE7?=Umm4q^2+EJQfxm?14sT)SD&3LKJ#DbZYQvrJui?x#OG8HhpzSc zG-cWh<<1!^wV7PC8%%kVtIS}^^cTvVGgN95;WoFG+)Hkmv6N{nlsjjn)MjecZYbqV ztujL?(@`k5)Dywntj)}--AKxtS!G62rj=0coN-c{iB-FSlsB=;45VDzV>!d5HuI`> z<0x-ll^I8EN^|FolG;qG+6|+;X;o$zWx58HJZF&9W>(d16y?pTGNUNdE+}`-7^%&q zs@)*Un^a{6QKnB&?wlb~n>iH{N^X{TbE@6xI5!P~a_5YY+Dxh14WYa#Rb~ifIs@g- z86cU3QmT4rH$dvMasER$Kr*Xt$WcxN3yYYey`&A&3BKQMgVdke>?~n}gmE;&oCL~UkwX$Ir8Y>&fVajyuu~9! zgu!3P+aQGp^jO&&Y>>RAQFw@Q?kb-X7PzI_R1l#~kJxuk}izP9CygH=)}IoVueXAZ`fcqdwd z4o)g2^wAMJ&!|clRV}T^S7_Yn~ zP|jkA4e}<=0!Cu9Xcve#0@|(I-uQ^ka}Qz$@B;DnKRG)gHr73e*~<&WoBrfXgxGZV zAZA`K5O4L9vkvNnVYITCHNHT+!B5UGsFPzq24cqh0`ay!Ih&wPchG~Ft-nCLnNQ9f zsFNc_hQ*Es2*g|Xo314q`SwlEx z#DGbQu-F(7rVES#53=kS@F2^M0S~h581Nv=jsXv{>=^JM%Z>pLvg{b}Aj^&c53=kS z@F2^M0S~h581Nv=jsXvn9|JyRx9h8E$ucRl&DN*SMv}Mn!E>|gR0dn!B%*q&pFtB* zomQwpIk@JM4K212Pni3R5sXXv8k7yt76K>fYtZeK^ff5aY9j#xT7v+wD<(ida|DQF z8we2P))Qb6v<}oJeGPi)YtWsL^fk!X?Q7z5p^SWZ6`-6;xsrf$DTfGR3A)^NA^~?$ zhCi1RVEA*8fD8u+F#MSy!0=~30fs;O2oNYQBf#)yF9C)>QoLh(G){nExSJperapse zya&9g&tPWiGw6=fT#^F^gE7ymiFsq5R}ecIOnnC3kzndG=%$0I4;XU?R9dD!62-U> z?BsEo`mhl0;>rz<;Xytg|Nc(SnUS}hob$%o1Mm{)_46m@WX`RVbYcp$-J>wwa!I#= zw9TV*ZPHMfJK-B}li?rc?7_Bew7+lCCBH2T>3=ynCzZjob8-$9T6S{I;^E|+#XqD| zYi1E?#nZ_-OAjaKEFMnIS^OTsn}w$x^3%yVOAjaKEFMnIS^RFnulF$FCK2BDD`P?m-A6Cy7P4K;p;%BSa{`AvhEjD918zaB#6RAGFMtUMsD3bBZr5R2%k zaOf@OA^ucA^nZo$w?e3#hS+lC5%&o3rwxoSMcgwV@n-^}-wEMwhfp~UvE|4kt_!iq zuu5!%obAwg#r<5s^1C7YYzUPtIVYQ|R;SPiLqhqG!4Rsf4=q6X2LZ+Jhw%48sBFnY z3s4RVrL6}Fh4SGADE}~^_)j7Hk0DgH1ez#b1W-FG8qn$rB4u?h{H(Cain#hh)Zg^Gf+Q z0mWa3@IQx8*^(z0pgbs)-!K?Lq5Q^zQvO{)@n1stw;@!vAtf<`02qQlNxTQN1(mkKB;i=`@l3G_DmPjhj};ZaJk4N<5E!l}NYe^hDZI z7BE<S8mqgwvTZLysIrySNs!j_ob($E~ z##AuuOg=`v8iQ%$JfNp->C-3m)SEt?(-Zf5+484EWCmZVduhQNr%Q9Pl;5S(Zs=`@ z(4gA7=93dD!9S9pjT7$Ns*WI91e=K8@@lYBvR^R&uZJmcFPFh^WERa*2E$IWp!R{s zUVDX=e=XM#iMjjuuY&U5@a`nC{MM8Iw_bbn-gYCr#>YTF+mZXK*Hwwlq*~@1;=NQW zR{cIqin)9E8B#VX<>yH;cMtC|cMqg|h!oBt?uy<`%77y8BEqIEJ|=j@ar#}+Pm_`; z@{{ zik+w!N&GjT$a$~8w`b~^g7(S0OVC7_cL`dl83*qYG*sqYg0}MBCBR8@HF5jND7F@B z#sfZ1qjBM=kJE0=c(;$!bj>*Naayk#Py09x*o=?*IBnRBul8}8u^Aunaayt&pYU-S zvl$=vaoV#PAM9*qaay$*U*_X9Y%|{HoQ z(CHjUDHGRcVHsEfj;PF2eY4k=uG{D z&>J}3K;3ML5L}pSl+R>TAx45Ejn$k;%D(qKJ- zlj?$rqK)Hj*^myq?wsR|Zn4x*0y*C3c2lyei*^v>bkS}CR3zgBXi?bH*LL+@0#qy9 z=PfPDJ_1xL`w4bPjnS>+RR;+6OU2Rc_DSKA6Q3qXCZi(+s6LJopa{8|0Oiav0yH+q2~gvlAmG&2Ndk^? zT|^7%{7Zn`vIgdT1xy40`Rj&+*-iooi0mz>@9uG8#ayX5S)d7Wne^GnX2TD)7wef^TN%g7y`>qZ?{ zayKT~VI@?&MhpgKpj(vAPA4^P`cX(r4hBBDntRW&&-kWrPU%N`3!GEZ@g%!DSO=E0 zKgY_Tb4vcU@(youBhnTR!6ZoZ7PI3`Z9Pz~>ER7r~d3Lyxa@Qt1Nt5M>rGUrHZ6zEXBN;sW@* z>FgrqO9`gOCqo~9+TsHEo>;1UDFyZTTBnvSfUk9OXa_!1tY{ z%9qkqt?3GO20O9{8f*E-R30er1fP4oIArQ{x8>r~SP@U>1h&BK?Hc8{-h zvgrc&TBn=l;Y(?~$JaXDbOC&=6HfE+iTE?p7k8f2pNjm;J5Dn71X#pB-t2?d_+Tl! zC7lJb#Rc;53>q$VsYJuhg1Qg5Dp-lCvko@NO6mKtSXvP*mXMvWH8Qg$C%jc>LEQ(# zK5#zZo30kjmio+W2~ml1q#J{4lZb0a?EZmtk6C=W_I^!~4(S#XFG2T~M(1Q?Drg?g zG!REjFU`ZL211xAt9jra)XB)S&^(-OAX%A?nTN9ttcj&~PEC#Sc0_HqLR_rTGSxw2 z(q@X(X8z+fC&A1|S58w_K56Q0zGk1Ma8@45Wrd^~R&r{f>PTip8N{-$THb?m&&kNt zKRM9^Q?eX&k)zq}!y!+Sq37w2g7tYg%@dr8?p{{=BswiE!%(Ly2 z6w3-ifvk8`!3s^`RTWhcxgEYptde9ezi}iEqR}~n$n_P}r)HnjsY|%>>nV4o!)pZ1 zq6~^>8Uu*WVs2Dp?quO5?Pn)&Xn&bURGO2~S1^#`{w3IvMy2fwmBqgRQuD%eQAmpy zkJS8=TolsM#Ut&xsOkra*{%c$8jo_4KY&m+jR*E+GU>qZS9DPpytJsc#JCuQE88pH zQ74_9iQ?j1xyonAL~*tSIT$II!npS)r@t$tVmi^+XwH17`&HY{P3Qj9!HZHZZ=R1hxuV!4u)$nx4{~w+Qkr2(~MOp>Z4HGXbLs# z6^crM^G>v+7jFddF@|a0KvRg+WN?O=;vFt5i^K6`akz^tF0;&>hWXx9!)zS-E{492 z1ni2wSdg@Usu{gxr!>swPS`sD{`WzlZ0>|Tm1rg5PS}$?pCp}e&Yf@z4tK(sYodB? zCE-rk6Ua1ca3?G;!sa}f4ScU4#_%9sEyOa4Fz3N?Cv47xE=!N9<4ljTmBa|_;`uxXR!P8jd(===JSujDtPE4F(Da3d^xIE$MxM6Zv_ zx&UpGrJG^IY9BY3!XrLzh7qGaZiW$Ce4Mh%b+F|%m%_1+n_*HR zI1Yn+cBQ@&#TRsI1a`^$(k22Fof`?zN;U|f>M;RC-VvY;+&}=$T~7d|U&q-nwmC)> zNZ;9I`p$FaXqa)gt;D!I5N!sylxXA!Ln@4GrHky64c3(es0j}dV4rmb0oGcR1lVp} zPOwG#O%9q#+u0?(;sgO&#{C579QP5RfxL_WedJyOw3B-XSa-$=ScY~Jw5%Cal*gDz zrfNK{S9voCJ!<*|MWh}z1A~TAkD7$`_-f0mdB{2>on}``C2_e8ML=Ph)D|OexJ?Jo zCD5|>=V_U|buMAZ6=+xL0{s~`=z0#(vfo}v%UVepE%Qn9Xjuy`qh+n6jFzQYpUbq& ztfK-g%Pgf*W3E8UEIrUNiw9a}@j%Ng9%z}x11+<7pk)>hw9MjxmRUT|GK&XVX7NDF zxEk|fXqjbMNXxu`Zm}3CEqi-v?A0~h^Dne4kf#?KdHUheGVx)l?bpK)J(xcz=U$_Q z#=)FZqSQx^>@RS?0^W=@&4RiQsy@(1DeeNBjP$Mw>5tFZT@{Lb=ksDZ6~j&9QrBr+icLo9 z?%9}8G)@<7lY!co%eGKVi+?r43j!Hk5MXej;FZ2=^Ncb=#enhkx;d?uj54Uz#T#X) z%;WYc?jkVunKCVFj}ZzjUAz{Y21bY8$MVNmi5pWwXoEmcnR&)1^|UR0cTP_m7Gsy$ zWE8t-dO$7?Vo+B`;GFUL0Z#4?YV;}r1}$fqfqMK{!^|pR$nusHK21zQ%R~bvI+$_5 zt(6k?DoTmjRhZcY+#8$Lx^go}x5%lC$xRGiI~3K6yxe9kVs;gC@U*L8=Iw?rW4=G@ zmp{9%GM~`RxIUFjVCn11Ju*YYx`*6$%~vj=&7i{=ZW(kK!!3gjGvAOwhcVnT=rD#` z1|0}c-j2h}H`s9Z<{L8TNc2hu9cI2EgN~z0kwJ%LlGHtY*j=C9cI2EgAOy_kU_^uy^=u( zqthF7I7MX8u?AKf*K)Agk{x>KG+tnUA^8Cr&@5hLykT)O>e%SxX4HW#zhKO$1NYd9 zn^6a6))Y6R4wOxbWBMZF4U5Z60pksen^6aTX#`_N9n(H;Mjc0e+>AP|_Hi@nIO5}G z)PZ{x<)tZQykT)O>Nw`(X4J9S$IYmNQ^JBbqYlpeDsDy{oZwa5j5@aaxEXceH(Tju z)Unma&8TCikDE~kXWs;4Mja=8+>AQLecX&XoR6DP2ir&-7lVB%aIg$9v70{V*W5G% z4^FAj7hTLi8G7`_=p%$(W-%?}j;=Q2jxG~@dQC*Zi&NG0PWOs-^lCxaM1ZifkpPjQ zL4Y6>6PW1JD|u)GPY6lt2`~d$hszLF7yKgV&f#H@!G+9u(FZ9v6McH!-XQh#N^E%n z@Q5wXCqQhujsUUcS^~tDYX}fqP7)wnoghHqI!=Hw#xa6K#u&Xa)Hq6TRE8S8GUAvf zI3gpCURiaV(1O-0qmRP`$0TU=${^%Q0?b1W5nwEG1p%fblLQ!&Tuy*l$w7jx60~|{ zaxy`H0m^;?%u)6cV4QLpfs>%sE9;j%1PE{A1PE`t2~ty!Ubi8LMZLkm6c{bK_6d=;FPY%(4*j-Ofi32STQu%ZAzed0+g1I z|Gz7N0_|t&aHo`40=1Gd!O17h6P#Lbnc&n)$^@r0>vLIff)5FINrn5Pf)dEmgWzQG zAUIh(2u>Ccf|JFA;AHV2I9WUhP8JV>lf{GJWbq(4Sv&|%77v0G%Iu2~oGi;i!RcC? zK6%0EEiJ*R?_UI`XGU;>N$`qyycDtNp~oLV3(kUN5)M>IJ%Z*PwOs!gS2|Ub2maU_ zZj_7Ib;vrUEXv1Ab2*^MEjm&I0`3wpzlX?0u0Lq)2WILV-j8oAVbubQ$o7gDPh=z{ zCk_KUyz3g1S@1Un+Rc^XHly@DL7<9CDCQDMCMt!5`{k*ZZ58gAPrRtqZ>lfVt;{LK z1tndgl+F~N-yYEIm+6g*Ohk<7NjQ{#Omp+^Ea?iLqy&Hc@xeUI-xy4KPb4t@D&>87 zn7=ZZa7Uu>pzG&bt*akN`nn~B8z}|juXx^>$MaQ#3HMV9hVvQV2^U&&EhI@_v81i7 zGIJ~hm`!;+U$mr+Ef{}|b?YKY@cfCvr1wdZz#$m$jOOuhcQ{F<79P%Fk&tyMxwt%> zl+G3i=c!022Q;SN=lXDxYAqO6M-r-e7%mVeslNroDJK%rizyAy=PZd^i1DO=%(yGu z9$wGm`2&Ml-Gbo+5_rPhoin}-|IpIXn>#_onIeFO1ETgzF1duon1*zp>!c3PYUs;B zeR5BMEoP=n2a}3*PM*Sw$?&P9ek>kP67%e66h(9Eer4s+_+?yQ-@$O6elnVlruPC_ zJvHJ6M&cjm@ySRre2CgX2m%xdr36j)j9r6?LB7p!L`0PIet$@T-cuL_K=86Q?|T%^ z>`{RdN$56`&?%C@wmI%JttQO7>gmRcurbGi099!82e+G@+9L1K-M6P8Bh@pf6=h2? zsr%@ytnkBUPUGSeY~pNxgaB>+iwWR3Uqk>8d_8BZCGpCe2O^yv=%^oqZUh-MR3fVq zdrLF*pJCAnK32(B|58C!N4i#>mGEdGkzgEB>NEAX0wI)k=E52;G$hik(CLCc)hMM|=<>^jJ>;%`~9UHjfdJ|nS=hpJ%e%#`>HMmeP!lch9z-|v z(oZ#B?q0_Km%nm^PA-UI;Q%s;YEW5kpyx-=Npm}nmEJW(d{SJ|U8imU+%Hql*}wmp zrwU%Wf<1AWk;2AiZ=o~=C}pMyW+S(~7=6mU>?6u|?vY3S;qbr0#Yt~ed{d|whJ|OO zN&EH2OOG%HU-5FMFp6&0S<9FHibi5oqslk_INvMB9qy(Ec8k4H4;$)UXXPs5l;seN z;uPA8!_ZcFe%N2*&WNa1nmY1Fk6d>+eyKH%AGx-tOwaYz3aW(tD?~Nb48WR|moPIc&ZaEz@A3Ea@->@FTs7%A409CNPOye(|jJ}Y@UojbdF^&JkWb|knfAwVar8JJw#h26g>oCAb5^>rW{@ob;SIeMJFsBobg5iK|!G#}o?7ZJ4rVbU*5f^>>wA z0o`#5FlNA>s&PlXI>gR()jub+$$6;#rl|If7ne5O-uO}Z_ouqTT2 zQ)q0RuD;`KiWaBq?|55do1&%0_UU0B#`I90b{?Q(ddx>E)8o9{p_iT02Z?SG{=X}Vn|lUl9(Mvs1d(zQPnB8 zb-MW0>FC8Q5<8~1-0{)m>BFbug4;5^=8kwPLC+oW7*JcLFT3NTjUsQ!OPPGQ)s4M% z`su^^dl6-1m=|Bj>oLRPwpyTN@tG*REe&q>^f=`zJgBDwcdKAemyV6ZKv;~QD=TwsV@_Y(9d`21-CbSpcmYp^no65<9aBn^^2kP zt47? z@zd<9luI2^q1dgAZ)U7I8}-Gw*3+pZQs%}jsYFsoEy1Z;4{puA6Z5AI+Z7nj8l&@i$;*Ci`Uve%|2%q0f9*(Xh%FHd< zkXx-GJ1muI!L4D2GyY3I{K-u3u13}Iy11x;Hl`ua^VaJz4g3k8GMv0|7IExNZp{e1 zaWnawNdEd&tn%#yBI(ILQ2{nWXp1}Plu?ZZd0-!A<87oP`QNc<5`YfOq!4uK9Hy?# zhOCJ_ZZ7s=!SWbXB!=|1k0!lmA;DN7tJgQHgoR|awN8+pX1pq|_LxauAk7paQf-^V_Soa6^A z=$sIr1CBCLcu1#U z%>6KNIjKTQJ7Ofw(o}N0tDH%0zg1xpT{99Fi&LbsvwkKiG)XO4YQa(wokMC_scae- z_}_72gx%sI|9dUgp?N0tT=y&%2`6X>1OSE?onbQ`Gp^C(O>{>=Qe46Hdiavyy9~Z0 z_)>s}o&kS5ja;JW1<|jnhQX{bvwCp+IY82x0aBHWY77aeIWAtrj#OwNh~;^1SQNYV zh;CZM!v0}B4qXIsEgs>G%pL786=S_G|$q5w_gLHJ#FJf)Jn}E^mgvd*;ovkobDjm@uk8E zrf^Yhh@!O0I84sJb4X(mn^GQ|F)q6`Mfr#?Gy{c8K8AqM)f}gq;#TQ+bg&ek9H@tw zm!8SQCPcFlb`wkJgcaHtPqJA|yki^D^#s_}`?~x}ROzgC)mX`^XZR^Id0A)ew{Ye( z9S(aC-j&jKq_S=mQSs0aw2X8$B?fDnwL~?Q6>4fgr4~>gGb>#w;9!-v+!cP+kjmh3 zm{`Myz|jumU$dA=`wS0@Ie;&Ra1@gceq|t_axmHq2){%NfOyTs>ky+252GujJITrP z;#bFRR1)E`rqN9szPCLQ?P8{$a`aN!_0FQ1c3rp9{uw!I6r7C#5uzf0bg;UYrK12b z>|iK#NZROOWVEQ0_OUYh6m!9-jV|>GDTnw>KkFG{8{; zGGVZqZ&1xQv}&%L^UKo%9TokN-o$F`J4?iGeqZsr2LjaAW$MNGD52E>)G$LH^jxM@ zHExNr7QUYTOS=ZrUxEbj$HHJ@9fQMQA!z_s1gIYXs{rzM4J22^16rL~03K>H5$z_wFtVMNR})@vR2s3&}2Q)z!l|$y$NfjeU ztbJTG>8Us|!^H6D4R3q#=nJXm>WGjqM9hP)XeSN{ONFC^>)ghX#=5>rAP^$Yl`~E= zOf-(ttVp_y)JofQ8uX%ty-7E}6avY`Z zmAz1EzNW8U=$rm)koSc}T=4ZJz6jY@;Z#&DLn@dq9MD>!0;+hlmx^b_q>$DQlrXMp zQJDYb3uO);iz#%KLBS$F_tUn>!#~ir2-CKksQ^}>2}sAWMumw+pYmy>cou>}6Pvw8 zB_;K`H@VqYq{CP&fh#g5Dqa>T@(3KsykmGecDnFPs4Fj?-jJWk?Ub^-44jeeW!`IY zFcml051+`*$CMb`gb@hld@4l_#1<005-rSA08K2|45rl(Ekn>FIRs6hXjO^T5=A8w zh@jf&!c~=GEC@5w8bi@qvsKfY*{W)Ec|zog7}UcPN9M3ffz6YBQLR>*fwZ;AUOTc} z>4g-3?61$)$ggk61|(%F8jK7kz<*u47cN*)j-ov@o93^1kbKP1h2NGw8-q4EEv>E> zL-o0$34*yPOm9Qg7Ma4mGY!kc`B$65zzjosZCa`bOx@f>?p5;wGHRs^OiBB6rszZA z>!T3b{H$KIyY!L#kjVAq{NX*10AS)L0?_Kd+k`fq?#Yjm7 zijl$6UV*?s`La}qpik{uob2>6v-k^Sr>&`SujY4E?v=(senRJ7`Kih(vP3Id-?;jc z?=?A4crW>09f&=`lJAGqO92HO0m>2^DH!___v9x>QnS)5@m_6^XUcO~tqpWc#1F+h z6iOm;T>|B5>w+A`vc|~GhTJPp%>3fIL{kq*Fuxee0+48gCkrA4&?qrzMiq=<7-nU> zC``=V$aB~VA)9Q;!RMV7!yY(n$wRg`C&3>&i<<3>zQ)u@3NtWu{ik3d;oqGroMqWQ zOyG*AZgr(5&YEH1VD~hA7jj7;tOnr}z9O=^3`M|3IrPL=i)eb6^!YVaJTZzI54FWo|d$s+?j=_frMda_%^V7Vz zTM6jP?o@&lS$%}kn~j*ROvP}kq%Z4}zN}c13PWJ!mc9%wln?0@ZRD`Px}d&nG+35M zs1kpKY{+roR9}XY^^9}k&ujj}sLzVY`JWz2&i(X|jgWtKt2F7evmjTkg6aIQEj zy$>YEwRG9J4+cHu*4dh)`m(* zem9zhe^WbBuCmHyXUi$e(XKDNi5rRp1>}SmYb?#z@v=Y?|3_hPs|zZj`10DRL7{ zq7N>Gk`A9~Fi})&%@jt6hIo|Wwt0rrHKg(lNaN)6}`yPw)Zg3rXeDztIc465cHVXSE`tei#d zSa5@4#fT5t98qkA*bnY-on?7vXK`w@MwyEywCO8jS}odDR1Sv*gx@W^}R- zh6ymX8EiZiRcJPz;w@N_aY9LRMCm10lnus~X=&!qMX$U69n*z3zLnY?K6U>cqM|w> z=d%ig2X?I*We-O0m7Dj!!);L;>&5+dysh?83ICmZYP$E1k7i`5rQB7S%1Ix7b`tF) zedI|dt>%JE7W_OZFw=AfW|93Ywh+6eqn~@j>E!93bgM_?PPG55E8m*D?|t9-$2ZMV z-41prZcW}iSJp$P9tcYzMAyM{F&SXJQhM<$r;#+WG!_^d8ZSxTS<{0s)+(;T#uwX2 z7y+I_Cy}rc+9qdXaHP>~)CP0WM)@q~(4e|DK3REYS;bgb$#9mfX|}-ZMYnc_039ZU zDuce@3bPKFHB@QzZ1%X8$9fBZEbL1qL#-6D)JYj`r2sSJN>^+4$mFwdOfejBBt?ti zn}Y>iX`G_8-Mb3oS=67?e{i#!wrg2KXJSXQ*R|ml$HZ36!al_fVr#Ui6>lVWk(@=h zZboL8Y`#so&1}RpD2`znX2_zzE4z(kTInA&xodVqFV`xvZL`)1cdvg5*>QvZ9%H73 zrPbmBXxVtv_IJ0dX{QIq;Q2D;EV~*y4~9;Oq_UC{DoMNs6%k*lI%%^<$16n?K*ZSBl5HCzXzMPO;#3uqwtwqCkILrz-72Nd1I$R2ryiB8TzqA^-KbSylUvUMfZEc^ zyQvAy^ToeFQLAZDhZ{Nc?Axa3M}8pmh~&N{MjP0Bq@`yUI7Pp~(9^S;Dxvf!2j`c5 zzF`p!Ee$2KkDVzagpB0ep))Lf8F(6e1%@nh4la`jy~8+YlxJ*+V7{zvl^G0tRh;8@ z^BWz$t1ai$B7kF>f*~@rtI)zi1W0J{n9dJT86)CMtsZA$aD?Mg!NM~W;!bY zZ_P?D%D+jLmj6qk@J1KC8;t6XD0=xwLy>cbUyi|b`Hhy=p|^K~!axqcf;XDq1q_29 z`OMu%UiGS19lnc=Iz3-^_->$H^{UFbyYD*k$Rode_^w**RH1k~cAOk$sBB^^aP<-IimBAltFjo0MpvtZcFauESNsdn;gP zlP^TImwn%rqP|lISMRs#L<~$-hvxVU)rq1zRh=LEL6FaZ+!gLJ{D#@7q14`Ben+8D zq%%TWFX)pw>l15vK*&^2u=yjr<+C2glwq3s0EM@nnriDqgH#Tmd5RDFy7}BwNyuHR z{bHe5cq85p77mMh=M4)!e(&KAe5z4AI=t)X4gVCcnYyq3X)P6LLYGe{0vJ&-U#@d^ z-(COh@~4izXyVb!uD;`M58vlXM|pkj$A9@j;zh-$e(?{!e)vAc+>z&h_3*v--q$Gp zhAVzhDNp?6#DBT!Cq`GH9A5$DORIw-}#IG<86n3 z!p;`BEa5Y+3<<6bm`~@s|I^e*l;!4^yyW*jbFY<+r>73zE3U0vf0ZkLgoD(Au;jRs zMO{aTR;NB9eE0przg5D$KlR4?REp<`!}rCVS&rDs;_-Bpv^2{AQH1w5KVn6?4?QPZ z%X_KOr{DS5&;8mLK6L25S2D447|3Qt;4=|3%gBLp!(!dnz`n(G-b)*_<@UW~`e%LS zH(a^B!QWS8U=$W@?j%3f3{PnDT#FY~x~W`?X9;PGBk<7Ceh2`&T#FZJ@#05n{wsWN zD*3>tp5bpTHU^h&l5=e%@Y!gRb5qZ;CYgKIn`G{)yPsR5q@7MZ8>3|E*%>9@UUHFX zZ<7B$WF$^kC{Yp`q)}>H(L}hy@|3>tE1OZY`D>LCu?4Huds*GZ2XR)l11<$&&Nhbq z5gdDh@OlS4Mc#7a??VV&u7iNZtHXA=bpD7K)-;NVnc@k_)N$#DSf_IRmx?jlb$Vz- zFjP_fGJC4$o)Dw>e&v$cjVGo&yD=q(;g>%C@e8vXQz^Ugl9#MZ*^PUB?(Hph<6kY# zP_@_{)ik=>_)-`$II{Qi`R&GYF647Gg{b%Y8$Q?F0=??)TJ46#zY?WPl{)^geMroi zF?|b}opYbLOL)D^0@5vlgQuIvDZO8X0M1^%e5AI~$6Bd;_5Wk_xB@2f+Q$H5=6o@Z1PczOxw(cNwmAnhIWvIn>ATVr*itPiWs%hk9lIW58NwTu%vJLG47F_I>^qOTn zRyd&yVM$AJyoH>WCTPn*mL{c7kPCqf#%ri5QkyKLikqrd^OUNl@CeP5yR7uEm^;m< zF+Dy~dIYjOS9+G(jI~7Q$8n}@K4|lRxuE?wJI1ZV^3Qg}i@RTHEVf))7g%h_cvCCe zpay0)gtX}d8VO5!dq77eZ?YydBU@lOphEApX0GuK6SR8BdN>_aMKx(7k4XoqA1xNj zv5cyywc2GG(%MNzS!@Goi_n^@&#Fi3svWqK$W~C^ycFRRvY0;*lJ$8j^tCe^r=|F zeb&Z3rP77go4w8bS;Iftof)Kc zpzRs!u$`Oc`cGN9T}Usx+%#0}XVP9Zq9FRDM!GtYkxKmYl#SL6b;X2#{*0SZK~P+a zSsPC=^wE~B%E6Sou1?Z!#Os`=v3Ca)U!HNEhk9@)Bg($h(5LfGpcK`G{ZP1zgU)! z=yh`3#9pbJ?e)p>4$D0p^XgE8T}{lc&xs*C`Gl1|?sYOGusajgqWYF-2T_OSjVD_} zk6Y@b)T@;6Zbx!Ya=%Fixxg}>Wj9~00qqYM&yx$&AFvTCJ+0p^IJN+J!NroikSsvh z3bx|t{Mc)wd1kdy!7V0*&~A~|D->KYz2LH|CV$mNF}>hQJ#Or_Q)e%e!;j<>Y|rv4 z`X|^Y9#OE-suJsyZ4yb_!c;?lu#&w?Bpe=#q(6{2hWJD}Vb$wb=WOZdoS~wQ9OtZ7 z$D!Cyz5HyoRUIwn@;dUIyl*VGE5X9<=SVyPQ!KQ_9cf-zQb&h1!F6bj&Ez~|~Pe-jyFgR>?Io4r$ zmz&Aj^7`n?fe%}5PZZ5jSHpEThhnbM9QD{7N`1BFV7p!CL9Lg+J|bZS-!Cttpj2^A ze3s5d0-`bvgmqx+gk`leI-9bs>>3Tq_$!AEysXW+g8klqhEpg8hW;=xw1v(;E@iAg zqk~Eec^Q?8%3K=p&o_o9pJSCv@_eqg%^R3QaX@`O(*AtCe?Ed)sO7#X4DS75cmE2^K-AXd(ian3HRoc8VVx@jsk8E~B9 zaOX^iI%0p!9UX8obKpBqGH-^3jS+xx$5D)dml73hruYQoj3la}KMas{BIyXO=(Q~( z>9_z=7K9KNz3LfIExdLtXjD)E&y_UW_Q|#ZNs*c~nHEv92jXlOx^4_yBDT zBOqnxDLrSphKyQT18N+;5oa~YiF+(dc|(zMiIfLa=1pPHQXcdV&aBSo!@#nXHPmg` zdzpuelu;Ndk4a)Uf~74>fzw%X2Gxo~f9HC{G9nX*ZF{TuNS+AFE4NQ^C%jG?DY{N6 zNzklKbo@=#b$YDyow`nk9-!H^imnr-Ka(kH1Z(I4tLQqp9-!2h%f+^?GvX`>LnX14 z4PD*8QKU^>yl70MySjK0*MMPSRz1^o@Ji7Z?#)8DHyFvQ)UnwX?#)8DTg-0ZE<@Ah zm4Gcb+qzD3RpE|47e;bj2c>6N^_0?sH44Bc={nR&ENdgi7RIUmvUQz_c60o->pI__ zW`iJJMWcbQb;w@M1#|A>8cnAjQz#Kn8esqou#7E%$QYN=g}!lG3EX2En{d!me zN{w`Ul$ufMV5~zjh}xP4v#Co&N3OAK2_X%rQ$qTpi76eGnr4SmBkqwaHO;k^8bw`2 zscEjJ)HHJ$E^9hexh<})ZFP0+ZiYYg38T8is7Qg+$IK=siu$Q2qhQ^f+umch9~qxXa; zy@>kWM}ofX+8fX?7?K&$5LPR9tN%ktr2(3hN1N}E^1z)^-bKHRsJKzdaM$2xeZ;y1 zZAJ?Z99!N==YVHKUBM$3I)|<9NvK;bBB9PkZeRK2fwJy|3bhDE!HiXzHo5Y|*io4( ze9@(2mFZ9Zp<@l4IeQvMix#cSxPXl2#?F@MZR{vYdC^uUt%xGms-0!{2&iB%RpC`U z^{f8SuT@gz-zU&@r0QuX*axNwz0U{I;B>dcK7e_8>h0Seq)vIg%(BpvN){sz84y26 zK+wgkI8xmBr{bV`@rl=0-yWvqj!)NJFa zp)G7Rx&E*PHq<%K`L<&K<115}dwM)WyMNl(%ZttgSBkDq73`YPoEKWoJK9@E787-< z*rT(UUi6O7^^tFnDRr+z@w0IOMhDY>K*0!;nLwH&_0b>3+y;>(10cl}ZQL>IsI``C zXpx1=h;y0M>Zlv8UdIlJ#eIO-MeNCX7m3Z~b(Hw0FzOz~^h&VZ$;Dag9)09>RO;RY zMd}S228-peUJp@FOX-g6MgX8Y4q*VDbnTO^ryEUo9O;zfbdzQq^T_rMipDAE%}z<* z5x?Ksq#ib})*R~H6-`i^Odd7@A%27`!XNEEvr67_>37Pge3Ydz}>H15oI zGar3GtwxNeklq8N?9#imLMKZbM0Gu`n48A9Tzc!N-ITnf?4ej;tOl!ToElQgRZ8YnDe4)kRYW6B5)mfDJp2nW znYb;_LlWA7Z+5YmRq7>n;C&&!;e8QzI+v+KW^ulvUScdOxBfz4{(Xlo^DLMQP%10+onNtoV}3TpG}4M+o5tC5JTov$nCka&Oe-T8_r#=cR7}%v z9+ywfP@Yc4oq3Z_Q&uuixXdGVuDe%8aoZe9Njc=2wIzdd9pz)iX?bEkE-#ccTyk{W zZ*bOH-}=f(^Uq57xDK^FDwpgNbo^hXi8#9?^4Pi7*w5vk$WdRd^{4qqo4db)k*@d# z0}W!e{zvHK>NE^$ zH-K8s8lW|UsSt|@b*L;?rxV@O3yelO>i3f~t<4{2nIV3_V62!uK=VY>_@Da9Ll^pf z-i^NdCzCScU9F~~wUR+bvARZAr+O=gm^kH@F41AAVTMf%d44ujNAqW z)4RAeKdi?Jmgm428a3T=##2oPHem7bhHgJ|--*$sf81QrjkY?O%fU(Azo(Y<)-(mN z`;{t9s6VO4dc(T$j}6iU(8K{ zms_{K;)G2iFhoO-7BPArt@_1mm~X#8n+@~h7szH<9$#&&$je>IevfH}YV|VjAfYr5 z<{zm`{^bQd99fpTKL#!KBlS<(aANDV1&3k`&0^TW*SZBn$S63iamWDoD~N#dqhLSb zlB(SL&!2ua>`Ua%;)jz53Gmf73$a%(FfkJkB=-~Gv;RH<9Qn_9lG9)# z^T}?4rX{({ASJmI2L!Cn>>(`6M`TE7;gP zZ(o(erg^=6rLGavFj4rpxjd2-<5>mV6ZPt`0cq26BUaahQ$-l9EMnqq&FQll8W*k2 z|7lbFZ`k}sd&YtWW&5l~N{}UORM;5#1uzA#V)O^=u+lN>^F5O zTsQAhaew~_j$rM|kFo9G)Ie$(@o%0cy+yz=Jd%dtwEva5&OBl(x6a*JvvC8871l3Uq;@o?{E*b*kNXbM` ziPSXuTkPGnxx^@)iy)-1cm^agc2V?zC&B~Gqecu_)f;UhHX2JiiF`fBK;xJMZ~n5% zZz=GH+d=F)Srb{>Y9#L6mU);nQKSHSCz!};MWt)8(ok4K%gQe{g9?`=DuIMw38jHX z`LlAVH+FW#C7BXL4BGY}eICkqVMj!&wde?A;?^Wgg0m*_c-aH4NL~*YO#+v+nTatl z8A`gr7btp5Q>1dv?rpswzF$Ko{g6V8xD)em$*x9*G#J*M3FaEjOZwr7f~hBb!*hSqM4<#k(50u zk&C}xn?zP}W)5T53x^X3>Zkl`YGUb|H1SrcRY_}un3ERZt=s?QdhrO8RgK2i`bq=d z1B?YLH==~iKkWe03DgaLqte@?98Sodh;Y-BD1`6I3tlhS`X^Z=fYAxPkaDk{_%;@i zHzgo43C=wsg;)A6nggG4zt|G%eKPB_#Gv`!O@C_?eho*!H^)Uh9ssTrI02|hYw7ZS z;^R+<#e1q5JpnJ}Eg+4>JxK+#3W74CnSh&`rd6}M14m-*k7=7sSn8z6(81-UtU~j> z9UfxgWnJ*cda2)Mnotg%xCXd>wt*|u-Ffw-G1EPM^@0MAzoZ<21ZB0D#;K(XSC*2eXP6a(JRM z1vO7}wjgyRI#*CT5}j`}{%Ek=ccG$1Q7{wgot1jlkOy=7-=zz`(1tHw_rG zsJvguD)?MrFOexZq7#ZCo9R4*0e7mjMxJbaRBnVDhd;uL4k#`#9h^3}huIz`RaFj! z@3I6KDcV?<2i=}Fv*UFRBG~>jOo9k(lMq2_3RNI&+#G#DyE3>Mj)~*klR2xzWgSh) zCDYDRBw>wcs!tO~089=7 zR$RzUqH`UZ1G+mU-ND_pz<@bxo2e+!s_a7rLO-Nbd4X1qrUDU(GoFrOXmbF%ov5H4 z0CJenDP%O%wUe>xTq}Oa$D5{GLG2iFnsLPs9ivW@F8`rx-f4;yKjax`mK4;E3^Y-S zA38G7T*-gvnuAg$iXZX}j&xBwGC11xLq`V3I)3Pyj|*Ktzf^QC>%dbIhhzkG|~D@b6*xo6JPM z$#_3%5^?Z14ri7I`sTpl^qDaDi+M79n9nAeyXPaVZB)XE9E)|vp~epbvT=CI%e!o{ z#%aI|Xz#P~Y5N5I2|nEFAJ$dedgLQaAvRH>U={!H*+eq!-D#3xlLDc&Yy@k~j!O0I zOr%O)y;Y}&6a*#`*Kod_i6lK%R$1bQc-rl4bDl)quIYtt-7R$@H6J)O6+L3dsFBo( z5j%#Aq>fRM&qbmV5RsZEDghBm9f?XnL~2K(^Enj`T_k$Epyr7_Qjj_lJyB3Q5@Pzi;B`M* zpLI+bU6x2yt>{|K#|JSMFfaf@c{#x)QL9&LVlcc(vZ>5oveq=E=CAcM%$A|l{A`cy zM~e8X1$d>W@w+uP9m|rhhh)eh@ySNopC`Y-M%c?ql&JMDFqP2LDr{6}(*NH~WK%Vp zhj-?vRJ!Kj@f?*x*!%*b7nRzgW14jMAgn>Lcz?->10b5;#K8G8+mltDtVC=G3}0Fi zTgReS>nrgEZrI^@R=2sXf2*W5kA#|eld0e?gYBH?Nrt0Ht}n<-7b{6Q@-bI9Iv^3X zUsT@N$*JspLv4txtYqOCRYxH5JPk9K3#rv=P>q*i?ph)NZ5s)-zr zi{6k^P2PlLZ;92A#+#?xEK*os#BI+w44sO&amFb(&am=yqIPt+@{)Y+EUjK3?OR`ubm7xQ}t37b50TjfbPRRUlgMK53( zk9QI)4osdv9OvoFXOoP){zH{-S)J!<-xGSS7)mf5=0g2^UW>RYJq%U zIW5Klh7LrjktwIB%QD5}-~w@Crg;6XQv_wo8ZXbZkGaa#L}iLEQfwBKDV%`n_@2CZ zIA4~sJdrU0H8Rx)4*c^JN4rxTT_Z)j!L61emak`cN35OVP5HFt8nq ziNOc%P)K7wSnB76Y*I)z!g4;KLh{6n_y9hQVFq4EYJZ19%EXML5P5M;bc)@;%v7eV zW*`W+VzNU@p5RQt%rl7!+q0-WimK03OoS9FI(w05q)u+Q-R5$#9>G{8b}t)FtB?oK zd?T3+Rux4kd{f)An>hE?oo@Cp2X(ugU3KcoLzPrLXrNhK>)$}lLUR5g8_TN`jNil7oc%vn3m1@24E%w~mOOIb*i-G-CUKG75 zac!*#<3xCVtq7ZlaCNN+a^3jcS`qZD_m#CG&^4{4wIXOEFKN+Zs;D;%)*&6$wNB9SMwE0%IKs@J4-C70$O4unji#@O(!C`0Az+aar810uPvUC2&!e`L08UyaM@Qkd>YVehgOE)^+oZ0}__-jRY1_{*586z%Z9vJ{qz6l4@&wRof> z1q=*GVYVZM{mW9gQlx;9fv0eyBLx{Hlv{HhDSUWY3eOcO$dJLxaIzzXgOuA}Xe3*-wFa!) zqgb@HM&*G-W749nHT2vX#-gn?z8FgwG3eR?8x1AST(K(qUq(xVT8ds>z7*xW7L84- zL$>y$PCkswWy0Qvv;J{2L%D-qh-m?uW1$z;(F^1HP)}<~$k_T&mmyfSMxDJ?(t=b6 z#<?Pa3z_-r(Ljs#XvB#%fA)iv=*p=y|>vW8n^!LrCePxSt-9-iWtD zX{0jZX0JA18TOlU&Iain(`G5WR@!>Dt2^z`CvBHzzQoD^PfRQxn8D17CH>?GiJHakE;6eo9rg6GnKp_g$dK0unvwYyGhoS z4O@=gxmMciVCh4@YiA(tb!cZ`pu0ctc%czBphB48Exmr|40S?i`_o2Vy?iMq1>jhV^Z={X%Cl2r<6W^l!ibt~;@yB0j|9H9mBSW5h{Co-N&#_g~ zADs&`XFtYL?gBW;DRN}KgbZ6&Qe3EWCWrYtOA zo(%nDx1_J^$Iq_(@w4q8f3^K14TX~gzWi1Fn3qg>D2HEb$BPxBV82!rjQvtC6VA@$ zJe)6Jjj>Gal&|Om`|)!tfBang$6s&%*ls*XYBy^^(y+$si;br&mEmtJ|BNF3Mo~l* zaWA61onfVbEyp6VUVf5?{&)|iU5eja`QvZ4fBdcXkL@D1Q1Z4{Y6G1IWY{R*J#vl2$)tnv~VjG0bJ?CH;`So*pg3&-A z)O#6mo#?ZWf$MXZhC_D^HJ&6dv0Tvzq!ijNVUG5)eAi-9ddw;X$=8j4bp;Wx>292l zrKOI>skIxY=ZvvGU+S`}s68T$cw_H0PT!t{wL4p(dy;z5I3Zu_b~FyETpUX%ciU*3 zZL2oU@`B`z^H*08UygE-nmvrx%deHR^K37_z(8#E!LZ9$sEn>BmdCO6g~jp3XVNOK zh+``Vi{tA{EKOF#u{DCl@g*eN$SdO5D!}6SDv^S&h+}%b#qot;(!%m#S-nh?w>ZAm zW0bClW4gM<@#P%$jVt0Ti1%9@U$7;uz7=r_72cO*NvnTFoI-*3MOV^ltcX*n@4l=` zc;|h2y$a>s7fwlQa7CO#b@!!F(i&P3r%>E|@sqUHt%y^o?en>+c{Qq3+=_Qw;{CBP7&F^O7qZsfZE3r2;eO521#71Hdla8;OTDh#F zbB$Q0>x`Fp_oPoL;I4$FQzFw5G-D3_u(rfm(Z466oP@kAz*JcIe9(z}iGbU#5uCm-C70ClT(DkGmq2!JEL&E@TsI z`|0Qs2a>O#`55qrQh^XfS4%QI+mpQP+E0Jfq}ei88hEOZKK!!jON#dUZ6%3m!-2Qi!HV>VxHM`?fm)%N#aTlwSH+CP51{bM`vugAo%5$;J|SsCG# zt_Xj$GQuAbVTvOt*@N#%{uMfZY@Yv4U*f+T0Q)U1DPuoAM+x^gDmEmZ^5Js(M2;tAXc&2rn zjXo;QKm>V#+mkS?I>|Q5h|PfNB-{9c%uwni`^eIm>LUAi+LJJBI%8`T z+33-}kg8>)2SvW45 zrq~__^vas;wCw}6lO9N0*-q)I?G!#xJ9)nE*G}JgzMRtApwqAfJl7|8d%Jz7oHEcYgUk@;}PUoxi!-~ZK zlRz%0Emq-dRN;8wERw$Chc$=PvaIu_`mSUh@37~K&^Njkp~WIAu`P06gm%X%7FnH( z(C#?JBCB%|+8w7@WOXh=yWU8$Q|2ND~0M#9V$Qa?*JMr&Qh;;hx=WnE_G+)L)R z6)RTAoz~p4>?Ahnp*?e^!WqFqUH`zz2KPGnkSokJeMrR=!`!G7gL4yEuqy`M8RQ3= z!xr7!=JNSj^4y(s0c#RS)ee&O<018Rka(v6j1Tp)q;36~rU|LqLE?x;v2ZP&$C9R` z#W50!izE7mjkAbU;%Y*U_WL7IM^kpWTj!1}Z-)rDe9dzby4KCyvv$_j6fMU6Hu;|5 zKAdiHM^n^gHs0cU^sT75kuy3&PUIdmLoxh)PT15yRIND~iAf;Azp8jH0pH>mi4tsK4l>F zw@I2ZTG?ob%lUunJ(*WCqOfPT$)jG9PadBGF+w$uV3UNs6rKpNnJ|FA6F!jJ9bIzZ zC1aJ&XIblFNw;`jP0sS*v8K>Z>*`_i=dzwNt&8QKh6$i>$jqtEmls()v*KlPcsdMl z-9plUw?sMX)XGG|+i*X@x8a`Vnfm=m%e0pRqasHot^KT4>UVK9Ut~bYu5|;J)Sf1| zHqbO-CTN;)%-A(etZJGmT;nYNv}Q|t^mp6^`2VK~Ed-bNPN&JQ_mq1sRDV7s_a(h7 z0|Zu&b@ku#5;nGSuqdWV@8hSZkq~gJC$SPE z#N1A+2i+UL`{&pkB)nLbx0U^*q&dNKjUOrgYB3+MnDB-7jk&{O+QsGfNmC}p%AG0r zJ~4Ye%`ay4!?kC=V72pt%239uRE||rzHh+foJ$Gs^U=6hMb5O|CuYN9>cF}0aGebL zp4R2fu8&q$UvGl4m7%iOjq{GS!Ui~2nw#9#{U45H;X-IvvMXcmjxqa|#avkcSxl=_ zmk*ScG55xp?D=)&j!qTJnZ$D5-S}sXO7+4F4~fPrIS(bgu$A^a^bemodN8d&G(7zM z2h+ZXe*JSlbTI9ID9e8AVA|lZuG0t8frn-v_}PQ$;6pcG`UeNoA%6QW4yNmPRrZ$- zrcI*!ql4-2L;vwV{F8&}dSWgfOh+Di>OcLpgXt(A{Kmm_0~uXCm~Ql7lM}~0%3c1! zX8(NL6Pxg)w|GWdJ=?pz5W$O-dI2*p?lv#{q*vu0uh@20-#sw?db%U@rBk6l-5DC` zt}u}94uk1*7)tkqb?LpKneGk4=}cIk-WNvF`@?AZK-iGZhK=ciF!}u9&m>9rk)YVO z%n4X!@!mTwJ9e>4+RGb;N&Mf{0I3>wEWKniLfU^ zA>13G$*?y&|H{}(0q6hDBJ&KJs!3HbJ_l|kN@`n_;|XH zI%sP)+CyyTv9o>cdi}98<3~X7qhKlE8v#UT;zqLEr1hYcrlv@6M(#MvzU#Calp-CWHH+uHUr)jMi;ZY z!d-x4VZ&lJ7RCTKg^i2Zrm%_E0e|4*TR!|LZQgU1_iAGjaC z;rFHEVTN~7_TsYpULHr;linSs(-3y2Y1ox!VQ0E6Or?`yM|w}_O}B>%j#lIit!D|Y zUnk4H(8u5Y(9d6%j&|4P=&d`^;+lwK_4;=$1S*{oON0*}`k6r&18`JRA>7Zl(RUcoTg5H!h? zfC~%?hA0gIzAO|BP)-6#2m-`}f<6f`^)`o$OM1UC2^;6i^8_2_c$6*)qjTk1f|0rM z48i)j@-)HlTzQJ1Iai(}ST|P=1VeM>2?CyO<5EZ%m@AJGH0JQP!+oi_@&G~KT$zP! zsL#PSxX!>lZG7v&a_z$2&%mf(=4`SunIH@fo#EW{VqMR-;gIR1`Ke*z9HZX|j?#4m zN9esWQJGNmA%uClkzkIVB$!Quf*JagV45x^n4(t+Ch1s$K;IHf(7gm>Fi(O}_$NUV z7K+{c0E<) zuJR#zkts0;P+?wd))XPaF7;%E*)gu!0b#fLw8ChcSj;wxFsYOpIRL|tg2N`}%10eP22M1l>sH_MedrdIzUGGhA7m)nh3;*uSTLZ5r`3Ai$rT85F@@GiIyga5#NYJYa$RM z-ikzPA`m0K8Hv_JAVz#E60M0qjQDmWS`&d7@pdFy6M-1V#N0% z(V7Uvh|lU#yL}o(Kt{PF3Qgn#CK8t-(FaTI4f#1|sb2TUYhk3=6Zk@#XH`hbbV8~r`_+BLXFo?t@@pStZ$SQtC6e{kW8;Q?FqIYg2UX4WW+(>*r61{UH z@meH$=SJcSk?5TpiPt01J2w(vj70C;NW2k=-no%@GZMXXBk^?!vIo?;K>W9>{Dvrm z-er+^D-ylSBJs^g^e&6Uw<6KIEE3<2MDMalyd8<&Ws&$!Bzl)c;=7UPT^5P&MWT0E zBtFNDSyok42M8K$SrkI=h)8@s61^iL@meH$M?~Tak?0)}iPt01J0cQaj70B_GZMWcBJma%l35v2av&@Do1##1Z{A3JD-ykVBk}D>^yZDk+mYza8;S2kqBn0O zz8i_&ypi}`Bzp5k;`4fv(h>x+LS7SvLVBY`;tP@JjTVX5Bhecz5?_o&Z?s6f5sBVt zk$5u_z0o4^ts1J_UNst!mFI0yD33QqB;JlhZ;D8KClb9WBJtfw^rnc!_af1oA`)Nd zL9M)3Sp!+t*F_;~uV5s;7>QoNNW2k=UcpGb8HrxONW9&HHoHf;09h{Yh(a!2>_~h! z61~`w_+BJ>u_N)tUi4*a93V^ZhA1THg^9$Qk?4hq#CLm9zIUrIK=$o>qVTO}k$;Q! z&Q1x@Zt6rpI~Ad3mUN-w>p=XF*T3{xlz%=w#2e?*^9?xyawJENf*j3}V<1v)E!uGq zskMeY0wRUhkP{$MWeqtAA|=+41rVvPhMWR9l_QUWJenhCL8Po&w8ucCrW$e%L<*`Q zPk~4^HRL>qlu|>UE`dEQMZ(Z$gg(d7-9Z8hTCWwRYqeguc*5uM552Mqd>AVjI07^hO)KDfDI=eMRUiZS)&LztKit z75Zu$eNE_VZS-}aueZ@Rguc;6ZwWQE(5mpJP*VsEeM_jRf`+~=)RaI&Zwoc`&(L>- zn&M~ZyF%Y>XY`&>Q}*oFXUm|b=^1)S=q2d@hAs(3)r;sAp;y}Ib3#$?;;&bQqS!_B zd7-Fu5xpi9WiFyG2t|#H=yjpj+vtlzQQhLNH-ws=W~I6*6m>2B`l?V<&+OONgrcRz zUtbrBeiqR;grb>6^p;R`vWUJZ6m2Y`ZwW;Yi|E@z(ZC{lTPV6$MBfpL))morg`#go z^gW?yS`l5UfSP7yWxgWx3T(xj{W+niRuR1_^lBS@UMT8R{Pmhp6sd^5AQTlUqSu9@ zJVo?Hp{Pv}y&?2Q8@(wMRVn`Zx=>S%tdMUAMMH|e-V%DNjlL-qttkHbmQeJeh`ucp zO(>$bg`xvR^c|sSKM{RbD0)vs-xG?)6Vd0Ypr+wisjdn|(TTr4FBBCgqSu6?+(h&R zp{O+xy)G1mCZaD2MU{!@4WT#M=uM%hFY(t~LQP${Tpr(OXzSo4Jh{RuC5Q+*C(d$A{J|g;}P}Giy z-Vlny5z(7MQ8gm^mQYhIETgxDqG7~eZwp1Yi0C^)(JCVPu2A%eh`uKjO(LQ%^njY? zU@2c0iUJXTeNiZ?Lqu-~z0pQ*3PoLrzup#V>VYNoj!?9O`0Kku-)*Ds2}Lu=GwKC3 zO~AgrAryrm{(4g=sz9EUP!s(Y`8}a%0F~BFZdYI(7qqJfE#U(s`;ocwMX_AKqjTk# zBX|s|SOC=HP$T#VRE=(^C!j{~Bvf@e)CH&!JOx$l2=!5@5j+c3)q?sM)Cit~s`5j9 z3Tgz;L!}C$K2w@2e>E2ES>UH*fi8(2;U&?Dt@u|&kMMJ%$3k5dJ;Kk69*cEN^a#Ho zdMwy=(Ifn#=&@)wL4{7Qsh6FnB`b9*(*en<3Jymv)c@t*PGy$2qPcd3jXkhd7{v#}UgM9*7H^t{DH z&s$9Nyv0P%TTJx4#YE3rO!U0PL|2iXjV%Tqi}V`crMzW;U(H)a^t@$6&s#?Hyk$hs zTSoM}Wkkp0|MLc?*c1w}9w*3y7Y# zfauD4DYgK3%=!($D|tNuaW3^jYL-#&&3*n$1L6iyqcFB_*PzW(esjvo|jzoyyT)Q*{iYS z;4#^2HAGilLg44~5{jOeQ1rZnqARKAV+p}yQf~uZ%S!_MR$da(^OA_J&#%RjfXC0T zbCC3Qo+I!Jd5)s%lNVx+;PI1p0I%mM1K(D(>oMgb+KpZWgMNB3rT|U~ts60>p&}eQ z)BH_Jz!{ca6?l4EweLdd=d;gLWq|N<3CCNUYt?k1bh7z_9K7X#9!J6Nnu6hn{?GD; z9C0`hJoSCer1=_r@L4DHuL53DvUWKCirD;En{-&lAhhL>XaObih) z_WM&FJm$fp9xQlp!h_=;9QEK(sMrG&q1WG;IK(2fM1}0K*wB$A{x98EfcvQmPCfN- zG#3&$65}LIcU1lGtid^!4z)w0`RkQ*F5s3!z=uME<#8DKQno>7ogi}@k#ZsiG%IM6 zpcz49f~E!WqC7h)f;J196f`a<2$~QyA!v&r4vv>ND+JLrc~ftrGXpaDUtpt>N= zv}NT0v`rA_qD$$dxtW~{ANq+_>1TD;+|Pk{KPz)q@Ip8eN0@^g0m+0M1)&`|76&;7 zattI0ISxWYb2JX}2*@KKTZNnep(i*V2RR9H5@bTi0tj8j5jn^ykW(O=g**yEU$UJ5 zau!7QImU!M20~}E`v7td1QS8FF+iRIVKlH619BeZe88dyAGTrS{C@tb*TNuI_QHN^ z0nP5qt7tiFUZiRPnxiTIkb4tv8<$stM)& z`K(a3C}NLZ5~^wEeYzxcNvQSe6``7(-mlLIWs4&A>{X#xg<9V}FZ6k#*1Ok)YNC7p zz95t>irB-~g^C?`AHOK{MWNQqH-w65ct771YFiYQ)p~m0-^iZc=P%?9D5&e%CSDI% z*3qBQhgoCL*&!W+O5uWG*7} zLgqmQXDU&isOY~alDW%j;|tK{-z3*Tr6U)^1;Q64K!0_WZa`M z=_72$N7%HFuqhv5lRmx&+fWRzLX1h%(SR!?*|tb2 zgjp6Tg*;0mr4VV-r<6`1)$WdzLa=R(ltQ*`iIhUTNgGo-g@hZAltRdDj+8>q-4!W? zsFN zAm-8$B_Y|Dj&!K{1-P#f5Q;pvz-?RZ28U|cryjakGNnx5(=NAY9;6+5I}r7kEBV%-e+5*!m25sZHdaPW_yO{Hbqwx zJsXcou;zHSIV#AS-m+>m zZWtP#hkm~z-S5ks`vha6cn-Q&k+NTW40x|#j2q7a-zyl)$47zp2*xZ@Yb>obWiz<| zyjw5^l_!CB3C7y;1n^G5JAECe6={Z2avb^&!8?5Aw_WgdUlQIU_#R&?YTcS)cq{As zeqHsF_EZiSL&|R}eIp-8^vWy&{UOgv^u#m)eSqC+p!G3r4YWJfufde1a-gkst(R8D zm^{$Fx-3k~VhSE;Q!Kq@^IIjL9ocTcA2=Ht%DN}efb#^jofhac+bn^pR6T*lng*kt zrU+=FNdj6Y5YR9a1hmN*0nIT=Kua_UXoLX*>Myfns?PN`nHwj#V@U@>Rjceee=cVm z9(v(xJNADH1(=opV%YH6hx-4`?;iM+R^8Babz!}<^7Soy0TO+a%@(;BMU8*BQRA(P z`y03SR(dY{s9y!ST0WCiCli`iT0C*Ab+to*qc}0tOwRUvccSJ^UyF(>mjO}Hy_JAW zaW$GLt_GRnYLF?e2ASe&Q0xo7HO19vrnnkpimO4UxEf@wY>+9g2ASe&kQ7%dbBaZ^ z43&HFV1ulQwT*mh|CR*$WZ)K|O`YWqyRia}kD zrCdgmDL8Ea4^BT4O3@Vjqaw_wTx^m7H9ajItEFHjJ*;3leMrGndPKow`aKFl`mlnD z^kWLf(xVDS(~m1?rl0T@=D3D2g2_B1^tp2SNrhL+=`n>%<@9?MUMi=5OX0KS^!pS( zQ%;X7e7c-|zru^<^am8aS4w|S;k%{u5ryxR(!Z_nb}9Wk3g0fJe^=pKrSyctH%sXc zDZEum{~k+A?3=lj=N{kUc%|0a4~Lo=hxad~yES0vGPu)HIxToM`;_24f@iW%3%*zI zboL{H_X?iM;A~6jjNr-aM+M&}IAlL2_pWNy7gY z;x6B=u={el3(Mc>%PGz)!k)`;tHE&ZWwsEuguR#1)3=71%joHMhx;z0r-yL=PuL#jE~neWRQS;4bP7>%;BvYnoC*DG zU!BpApHS8l$QH8RiA5z@4`Fmj)@X9dx{2i*Sr21dM%L>w=_2b9b`Z!K5vi;rHG6lJyu{No0K&8%$)qnQbSs9uEjXvObF}5PyZMm}jsvZ6)s%O@h0wvjstZ zysBYmBygwcEO(mvO%lG&6*9^U!WEI%gsc<7wUJkau-aeB;5FY6GAxAaC9eosFJwK( zdqPHpa1G^UA)`XzN+>Su%?d$&u)9^&W|t`k?0oS+h7d#?yJA)93j+T_aj9wp%~TC` z)2iBBGbQACA#A*vdUCadK&-Z|=0X@5Ch1ERBz-Boq%Xym^rgU(z7$o`mqJSVQapLe zpkR`|NLWc<3ezEdk;Rg}NM=c2Bo#5Kb5xMRT6<=Hxz&H7A=TOBt-%nsZPH z_in5?*)BH4%bJrdM^nkHIoV=1WzCwCy%SU8tT|I5C=}M5Y;l_EXU)l$g(-#Bob0kJ zW$<`w&U=I)ysbI63qhb;bFu|v+MYG%4k1W*C;Addvu~kraJA}MFDcra`^54?MuJ- z_22xre|n1(6t!a)LCx1iP^)zj)L2~vwNV#AP18kCi*ymx5JvbWL+veCt$1=w@IF>p#>R51W#Id^_TkqIb$A%r-;#kwMLC4lPHsIKhV-3e9#4}AR z%4IhDvOONfYI`f4aLg*bkXmgQQmf`dYV})4tzrwQ)o3BLsw|{dhlSJ%zmQs~7g8(k zLTcq);P$Y!rE&?TqkgP$w4@|L?fJ>U;s`|(1eo{jKawY#^B@x6L4~Z04FDy zgp(6Y!O01x;p7C`MyqJaC~yK}KwFUy!(l5FScIk; za+m9sVG9&^hq0nTqznJ3DNIGP4@o_we^B5y#*`XJTK++S4KX2UpajWI@ZIhW7WSxS zC~}XYl@XjpAtQJUU5wxyY8b&&>5PK&>3s?=meTtbK3z(ATtqu2>8!$MOX-6OFO^d6 zH*1$9<>?UZkfd|e8i@T78)Ea>hooB2NT}tk!K-1;I)9D^@P&AlZ4Gt)eki^g*RG8^ ze;*WIl2^ln*7*-YL5x1DbY`vdXQBAwyc!;`&VK-kuh6SneDmM^P!NUUUg19L{QICF zBhN#avA&;yfb4{!u^3m^?}dO&#qkg;a`pVZ5RkR-IF{w=_&pGi!FZuyZO(PuFbx6O z4BHF4>Gq+p8v-)>6od(60sm+QB*a3OYNKTTiNh*Lsb z8?{QD6<*+TZa6ngEBv&creI*{exg%&HX>^nnGvXajJk2#rZGwtb+D7hSY8p25x*iH z^I}CjX3vUv%&`^mn29UmF<)22V^*(-$J}2L4-T;+9(-g)JhXttSX){g*Skkqh*o97 zz=B351jj=!>+dRlZ+JcqXA`A|ivw94%(HBoDnFvf9PxUC=K*}_0P0RKK5F)rA7LGs zTOa7*Nb`A!KOR10^(dnQE!IL$+ui^-IiwVq!O?%AEiLUy4zw*5?Wh+`FRJzETu;fF z8+Lr;`QjAsb#jcdtgsgINV~9lF0x%%+{+$`2`M-ve|vaevAlaxo8^O=4^+BP(-v&* zT+wvy-bRZ5Pk+>bjAOiN^J}GIaa@z~%~wyREbg@z5T#zp25LH?!F?o&|4R#{Jw4+Q zhCEp3LDPd_57v7y;=!l~+Cxkd^K(J4$+0mH?($%>2jd>>@L-n*K3#COVW|vyu*HL| z9^CCg@F4Xd^I)3?lOD(i28Gz}!ITHAf>|S%maUQ5=ip|0u|fvt7*OkDpjknC1aVxb zwJ{J!h*}u~NvDM?14#*nF#}13hBX68WrsNfX^{bY2GSA*1`VVI4lEi-T02Y{s4j^6 z^++5+9}<)Z(i)icmfS_{(4ub#oSH@7ILw(v-)1;6i@v*H#4P&8;Jz&S@P430pS%RH z=#!TKTl9@+(I+nfEc)anfJL9Y1hD9nmjD)h@)E$JZwRi&qHiK!^l6;$RMtBY8e~1i z>XfXvBm2qv9#*boJ&BYj>us!R$vQ)xlQnByWgU>*WPLZQVY1$ej3(ne0cpTQndJ}mj>6b6*kd!nTOAurjLX~y{MtUK9X*^)$ z))a8QY@7tn*OLJ_UuaGM=PS@L;CyL13Y@Q5o51;Eb^thE<<^1oX00RMB>Eaf#Zew#yfDYP)=ur?$(Ne`>pYU8uIp7mRAVd?l&2%a@pHyL|1b zw#yf#YP)>3sqWRXQmD(16T1ldoY9)y-s+A-P zs8*6_omxqvY6b%IORXePDz%bClhjHQ^-(KHbVjWtQ50qFY?<1EQY*=w-gcTFT{{D4 zS~6y~?$qIvH#pR5fa(H3Su(3r0Ah%XY>kR_*n70tnId3wcr@Re;&U>Q*T_hVdGvL#JYIwkB0M!+M&jPA*051Wmy8xE} z)q#Ll0JS*)_#B|hjNHr;ri$EUnlQ~02|b}Lw!KxWt7UEd_cZ>iYPo{-Wk^Da$pt$_ z(pGug9LZS!UL|3u4iJENKt5DjZ{f@%tspbx>m#cYsj7U+{BT+kOcEzj5URGaj9>EP zj3);0!IL4=S|~S~$P1;&_C4AVqesQWo)%Sxd4w3_7YKFN2QhAdJ!;N4qJj85TlW&2WOB zYtjwNt=Ac)H1A2;qnaD)@vTk+s{6_(t*?Zhpzl!(_u(8y=&5}u`)b0|DJ^25`UWH1 z%3xwjW3@p)HX3gXS9%#I>pz2yu3n<6F?woJOj$`QkYO$b<7C~siGf5Pk=|MML&=BI z)odo!TH$o_^F1~k?T28_8a2skEnexwV<*#%APDB+P~0z`W`O;+ec~zlShV_9v;KW3 zzsezS5Q4u*-ugk`ZBzJV%<3r07(ef$O9AD}uY5W!QPAGj&&&KxX=w9Sg+7f^*yH6t zZQg8pHPm~E)uW-VIQC?mhPuYMmB{?Js@9!DGUgRZuwUC{>Bxh(%kn&W7@9mag6_@% zh1B-m!x#DAWBci9nGn-&y@xN@G9cz15An#4{?TH50Cj-_jWN^(t4c4ep{ishYE{$1 zLDCb@m>Ax51i{4Q85Ia7CU2-fFfn;R1%inMhhSop4#C8x9D<3-sVVWq#AX~66O#v1 zsA6JrTM8&9#^IC3JDB(wSn zVsBAEKbg~Qs2jbi_zO9`t|?=5-o)1Sku_D5rji3tYbA}jrZo|eO>=xib^M4f>x`Tq zneP&YK+JbZM45ejW{kA&C|pLbLho&DVLM&ax zj3*DV{$a?se(gVe{p;$ghc^9-KbcF18dR%CUEmA9*ahlFd6{l^0jxwEsyLCCjG^r% zbZC2mS=ydphPEe|rtJx)XnTT5+MXcL_5>5OJ;4}lPcTZ`6Etaif&to|pibKpR9UDH zBIEl4Hd^O;$e@W0?I|Nn|XR%BCkJX-V}X8AKHVh#xb{AAyVL zbTEL}%10wD9mKr*p@jd%s%o%xRh42fWqiiEvc%AxckxMtJ znWcH6hO4ONH*}7gfXz}9f*GnoFpbnCn4%g4lT?EsPz{0!szESDH3&wj20@c*5DZWa zf;!b8sA^|Z0P_AzS$#=O(!8wojRcP4qu?5}8zVk;Sw|2Wyc;5A0*f*q#G{cCF6#&) z5N9M(CNJv@LW6pJq)c7bA%q6^aHLFM)+vMrc{5UGF6$U#2FkifnZ2xY2o3t7NSV8= zg9r_N9^SDU%wN_S6_bGN4yPQttTU=ZP#TePkehzxvV>y?Pnh-(nI`)^jW^5GTNPX`(#lqCnRwcd$B_}LHV9qhoC9d| z|DA%aU1VxOgPdd&idI~R+gB%T^GY3e(yAoMmuU@|Z(SitIwho1NKL&ccgV)b*VW#Z zN8CgqYoe31wUzIuG;Wr(r}i1Pq8K3@erX@7r2p7gdE9oTO3j~Zcqth?KIY2J->9sU zCd4?WI3y-K-$q5K)w7j4Qhm9+$s zI;%D{T2(71qh+$FR*n1&l33;h8#6^&OVg&6v?>jg>UoAXGff-Sy>(ASTPYFLSA!*@ zb0Vp!E4fcYlW|Palog?%sq~2MkA{n%e8Y&0*@RpNF0qs*u z+0q;0ED_}AJ}S{@@d*dZTz}|Ov(Tk^YnX+2^-$#y>EN^3o4uA*j2omCjhITF4lZ%+ z>wcPnNAb8uqn9$gL9jeW{NT)m6m&MlTNf}!9Xlv*cv??d8%P?+s5k4C(uMt>={Ya< zf@Ov|aK=)@JUBmHV&Mt>VhQO+c%GFf!8ul*1dp-uBsj~;li*Pf%m_|#d`56GWw3J< zJWUlml4c5yr`r@9OD7c^N$+7ExF788BFv{d6wIYl3T8RRBberpjbJL>tza@`n@eig z9t9KWy$YU6d18T`w3K}>sipTRm`U$fFvjU7!Dz}x80<5BP{BaDPeDE9T@a~ga|)95 zLoK8OlbIJ6;u{N+R`Y!l)ANex7u2@ZXeYexUoAU2= z;3=LDw)=PY_;(-uGU_=N)?MG->)-K|gFfI@2L-$RJFJqyvV&hn{$f$x^_|=&5OcqO zx6i+O(7&7Y?+$z!4gSNQ%RU_DKbOsik9;osNciaIvX6#?pUV!01E0$dw9N-X0iGJq z4uk{Y;E#Lw(HMRthVwD}u)_BDKgPW8FHRm0VAeV)Z}fHi=GzuEfqZ!o=w(*|{M0L8 zb;}!)i!4~GOKeqD9Fh*j`vf9hmd2igIK|IFj$|WPJPuIO;{Ybg*f8gxmQ>}fLacb2f(9S!7 zszqQA)_S$Ts1~ZdYazX^meh6R#zIGDaBwvp%AoXLD!y@-L50AAC_I(?PH?UsR3yqN*wGgeaz9aMYQVKJIJ2L$Q``d%3@dC5ruS ziq7fB%sIWCKGSLxfd=Cp1m8@?8$oo}P6VB_5@9lrz>H$G#Ip}$^5@QCNgL6Fdi=qB z!lSimk9t5)K$uT>7GVqoBoYrnm``{biTyC8IYpZ0>Rh|k;M3qdz~Fn<;4|P&;WPgG zEI3a#`2ID&&$HaJLbG?R?-{fT>=VS0;3G~#kJr+}NJpJCCX)8FiFM3L6CxdR(g{jz zWjo>cNpNCXLMNTH;3P|E!AYl_WC@*e(mC3~Ds|5Br@%?bzIw_@=bdCjQTWheffx~E$}w*ep!ao3I?wutra}&(e4*MiAfQMl*OhVr2{|$eqOP`Ira;t3 zhD?J@=g16*ddGg51)0r}BOq#V`{gLe(H!Y=ditHXHvND;OV@ToTKEp7>THqCQ9K~F z$c{V27TKc?u|;+x1?UTVZD%Vk_+F7?Zs)tT^p=j!YhNXu)nr8u64F zwHo-88EP7M-i%)j)EU(^X?K+tXP0uS2Sd?n>UY+g=b{at>67Q8nGVNAv$^9U16DdN z+Fm|{eEtBAi?F29S~GZnJ&rJVv;wT66i_Y?x?K&;E_XGwt1VU1-DIw11#UWWS3@&q z`X?U7J^RrN(@l;Nvkt#PO>PY1&ByNH4{&1`*gOi=xiJiEK8328?z^I|kw%i~B5XQt zixRkL@={1&%65J}OQnvT=88>^KGWt@OcqyCtye{}c(Ps8bfgHI<+?gYEawI#^EgIR8 zR~scSGHRn_L@sTVT*$)E!lRKnph@6bh$op-kp&3WYG_&@br8A>9sx1{g2fIR7l`l6 zML#p6{KBg>%lrw=xIdxY-m2OQ5me25R|N0_`x7z`KfAvj7Yxz0&KL!w>|V185UjGi zW&woJ={1`K!S2axHU+})Mf;$d(;(tix(Q!+N{Tf@AJcgG3)gJdUyVnb+3(DwP1g)d z&@D8>(h>J-!{T*Fi$oft$-0GLAl;^*o=z&LvTh+5)nd$0T~pgAA2Orip6E)Z&Q@CP zmu3L1U|Xa&@ePngcog3NI|ScFE@Nb|iS$QFd~<_^5cl2X4ub(km*u1R9t}9~d_WW5 z@O(^fi+Db)vxw&-dq>1q8QgJ5Ypc&{6&)R@+66dJfXxCNjo>KSdde~ll}yv*+x0Ip z>I|*vyllYPSRD=)o5FozG8_K#=0MRD z-PJb7>+x$M=RrtGTXp6;+6w$(b_A|^T3J({7 zL5zB)!8cj>x0s4kP zf;l^stt)#&nDUH8_XcDxJ2k9cIWdxB0__lE^{V|dGE!s>O9TmfFrnXVega8J zwDe$FDoBn6EcYIna%#n8dG^??N;wvwW8eTQ91GxzVHL*$+gCUin9*J!={($cW)!=z zd)%YI?c_}1QDBx|QBgRErNmN3{NQiKZ5X78^nA=L1trG4UJ~41QJ}il9EdX@H3g9E zR2wv^+A38n<}@LAeiZW*-Sn@W3pJfmuDI%7W8+NOawuWBu;&?bG01W;$Z|1AxoEum zwG3^bezB*lZ8Wl+&Fb39M7N*xO{(CVR1;|sam+WVMpN6QYQl-Fw7phZR`E3dDOfYX z0^FJ4WV&6!3D`8jBPq7T+T7xB5{049Hw&lOT(y>y3b!ltAYi`4?hcDvHBQDIA1Q5W zGPE#Yc7Zf4_6XiAxQfCBJT5pv)dHTNI(xYlgD)2D6=jR&o@Ec$Y0PEIGN zD|au3djNKEODFKA2!lOI7T6e-SlbfT%c#8(#$?96F5Kl;u{X=Qek6?hVQ7d9Uwl!|C~M=MnLhAE@$(RE@$)6CN`V&(S176=P-=Ew(}28bHhxV^TbQo z_Z0+n4-XPW!tI0MKDJi|Y@X=39zmLE!v<-DZ7@jlZKFY&a+?g&(rrtT&`diat+zcP zJtre*fT(Ps0I?vW@`9>BqXzlCnXW6aN8_c`{3h<9W%yjg;|*DC&pR*7GE6$rKyT`< zj^F%@moDRVP`hb*i$_}RLZ;mxy~T5`hQ+I*@!G20SG|?Si>h|-^j12kKC?mG=YzPP zt<9Q$ZaLiI4hxCJ9AeV9xDaDRON>oz%(D!Q4 zuh*#g^f<$YXCF1@#{kA4jL`fL29P5RKM3pSItX<{$fmFv0&H7^DxzaU7>BTdK>#5^ zf((WU2!q;h(Z5fPb3i`|)8`-XC>?s2{sA}XaMnLzGjK!0RR4fCGLCq!GfV(;Th+&@ z*>EBP*}OSMFsijVw<5G&$BS1Zh#v|XZWHttA$CE<4L#f? z=)po!+qd>uP%hFAqHv3?uj3XQR&};=)sP51@O7ORA$C^W4Z~b+ihi`~XRU-7^{%^N z7^}is#m#kKfypfES2J=XHH|$RdBN|o!3nY7^s@;G5H8KhXxDgi&CklKex7S(!*o2< z#H=VlQ`gSYTD-;~D0_Ct|AG;o8>^JdfFN|xr#}+E(&oC~m5@r%j3qHvQozg?+2??$>RfRUY zOAF4I&Ul1)KP}!?i#OTgy|#u&iMQ1@Iu>uT#mjC!a?%0yL%@VrO`T6hL?`ms_BKpb|5q)I}jR@9el)3_k@l z=_*%9es9pOkkoY|^D0Y$9y+r}QUR6Jgagt*R;3=uS^)K#*VJL18YGB|)|~#Z3H#4G zFOc-Mf8qW}kKZ3rEMUnPzd!PO@%{+Om11%vYS%}m3=bXGN2c2p;&6S0+KJM2eFS#r z*GFm{*GIT_t>@q2$8bc0?6x&6mi5BQdS!}J)1Zqws-~_Lr{nHOF+7xKRm-B{?ns^i z;v;6zD`BGM<7R{RW=+9BtWnm1hXL64TtxFU^lu&0tCBZ$s-7MGpPzMyVk*B8brU= zp)(AViIQ+R-3Fi0&01tGr(|SfxEvRiir|lUIYl9;Bk%~S zEdB`Cj%nq$Brw)PsJ3rOC=nRDS?JpZ2D>C-7Z}V!-`Krb=-UMbv(UE-3}&Iv9XvBY z%&q5Fy})2vw5tp80)v`Hh9m82F`zX|>;i*Igd#9XeF&P=hd@Wp1a;~|P(`69NYYWN zl~fLu4< zNv*xyP=8j2`m^E+*dXbTrgYm---NQrord}*qGkVt5R7K}|E_9g`t{G0&RfnE?6O^e zs2oU@BsbUhk|9#;2XuP<&fKJc5>l+1mK*I)vXR9s4VXO;Ot2s(Fu~$X%T4Y@Y^Fn! zh13O(NjH-k7u#(!3;X*qc5?U$UN4(YXF1DE@A=F=_g3J>sGG4VLE}%Rz9?5SzHd^Z zvUmzQpm++3v3Sa0U~n+nJI&^0Ss{HiH$xvaGjv%m=Vs`b&JRd-u;YoXi`CT3&?lhe zX6TsCW41!mv2WpVFrCK$V-iZ28M;~gCy3hKB`cFb-<}z|8HU5FRd17*s~Cp&x?#Ao zcf)WMO~se!^Qw83+$vnvb*peSg`^p;zP1yF2zZ7M@#GP z&<6Oo|N3o!e;XU%UoH7!4V#9FmR#aUF<<})Gi`-dUfr0t63Wd#jHbNkb+QPh^??SW zfvl<3@D|Y~r1Kj@-)MYQ_9RmW5{)^aod=Q)(pGe&&{)#SukvkqE0`&q6@<=}A580m zulznpA~eSPt^8(MUnzb23qRwMHL(e{rEF70XC_)Iv1C(U1jci(mQfsih$Gu_j_rmP zYaoXBWT)h?1^1+ubCa4SK@mdda&Av@?}6lA(n$7}raxR_DMZt!OdSPxSlBg7Loyk^ z-E$_ZGhFCX7FN=^X%iS&e`|nF=w}Y0HE@%aUk3deJx0s?Y`gUpRS1J-bZGzB_7*7|Hy7JYE?#3gvMK&pr&FLEtnaRID>)IA{H?SaEORK#0gHK2}*FlfQB&{ z69TJ17|h^ZyliH06#?((`#tC0_r7m;D~b~`TRUTy`rh~6bI*CsbDr~@=ht}-Fe*^H zHB5O;7l_DITOa~pQ72F&o5oFv;2|xxtgEz6iEd@wq_{`PeJHk+dl* z0xy_j!LGY6u%jX&s3UZ$j1vAYH0%4^hg zg&NgfqsA05g&JxQYFzH?hZ=~QSr_PAY(sQ5oUsO3&aHZMY?7NVd#m(-iE+v%HHK-J z=FqktX7n#>tW>F2Dvc~;?R|BuW~P6?V7|RwGrAZ|G%@&Un-E)P3aAY#pJmsgfJ*?* z37%%lJ&g_#DKgO^B{!*hbZ@gqA%)FGT|y(!5~cP~3ABK4qJUw-u^-$OlraXZj!Q*buA@Tjj-MKnhkCQ^$#FB8&n@r;BpPvE&tb^VL53WKXq-DO#lz^S6F!<5u<_Mxb6+l9Y62==!xI{5~j9`J? zJZ{NMoDD9CJ>xyalt9<2uP|PQue!1%(xGoL4%$c6H$@vLkZGy{_T*hj@M*vlUZVgO z`SiFWv;@UgcRhPjbcgn+>~7rQ`o&YKyB$)*d`E~60-Bx?qaz0|cX(^$@#PM0ja&H)uf4R{Azt@y&JXfX z=|=PNsYJXK_DHF~BKdwPyL-gUzDJljq@M>F&R~FWWeK(5#6$y?dT-CH&KG=iI8Xa+ z@Q9W6QMAagc@Dd{N9$Obyn&niuH*W7;y8Rz5&+>C?0!@ZOznOQxiG!^aW3wDgfC)q zE82JM9-Jphkm)E?D3@*|qhU|1K;*--PWS~m9Ub=iTK~MhLih_ltxqm2%*!kc=7L-Y`_y;!-xm8~B0!Z0FrY0`h)Wl^D4?UM2?s+aPeDhoq9P`d6MutyhZs>x`4&}Ze zEC#wnEGWuL$Z8UqR6@J6d@d-FC(NLBvD4Y%!eI{WaF|0o9HrD&{2~HPILx6P4s&34 znDjJJJbopv$d>A6CF`K!NFkV=QV8@>fAB-uC=CjM1#B&0ESVC$=b<>kh3GBVLCZ#x z_ht$K11Lml!fI%^2$||X2vKG9bF2`kne~#lNqH78L_;B%9sD3sorX$;&fSJ!&C_C~ zr|4cyi#=TxEL8?r{#M9yJL|zx$G$R!fWa06?M*5K64x6Ffo5$~2#~ln0W=U=LD#{76j_ASRr8kd|8Enj>Gwz3W25BGAab{Yoxvn z6#~mjV}(E*nVI;tQwW5JYLcK3%ub<(RZ4-cW7KHb8YW@XSX8dAD^;lBqfHfp3N^FU zA|hN^SCZ)mVx2%uQz7{Jp@ujqoy}u~cTyo(n2^>NzFKKrD+4ZP&AYFULeQU92>KHW zL4QgikUcwPGC?&rHuZs(RXEy4>Hrh|Z&e*QS!awO7mMbY6ys!Tl9UG=6ND&siyZyD zdv$)J;#GXNbTcxr?+TefeMjt&{4kUwc1WgV?qZ?}?rg-)@P5gp-Tx1rylpWGv32oU zm5|;hN{G3#_^Fi;%Z0wfo3tbNng&Drn&yJ9Nudh7(*YV>5p{ z4FdF=QEj-O+Mv`B9Fid#f0b<_@CJ;~X1~1Ut5k{rs~S9R{Wr@sQ*$|2scJu>0gt&!jg-+;@$12E4n5j zS<7stu3#|Y{~UGYmo`^dln8IEuK1VLm2N{_3G%@Iht-uYwAh9(U0snYHLc>;e8|PTGH)(WV}1gBeW{jPD)?VF!41(J#Pi|oPbV< zp7+R`;>t{dN&~}1x>~f4g(zOlUMd6QdTgsf)c_Xm(12$n7Rh5phuN4;){4fj>^L?n zLYst60uydWW|P!lp3BjdiEa@nC44(jK2X`L5CQZMHdHoSQ5kkKfU#1{$tozt{6r~c z-!t+GS^!k$Y+q2Bu1TP>nTpDkM1kNYsO%^CL@0_CN;{3ccg{PZT}p8~{NfM|Vc)9V zcmzVa7w4mdOM_5%B-$of&3xI@55dCRfm$VlB|1e6^g{JN5a(jAoWek@?&T$E4LhzMT=&2htGja zESQz8lhr%!^zQle7!Q4LiA+e!K;1ea>qn2~eoZEEiC&P7Tgrz?(OOQluZhdNCd_iO zKt(AIu3HmE*~Yo7q%*ru3Tm8SwltI%|HPh-5$Ufo3PXu6rU!R(&jM2>Z`^%r;dR7{o#8UEw}z2&=7s_)4peG+SO=WMqci++InmHML?6|>2aKzoJUn;2{FL5#ixf!@#Oh>)AheZAFY3}vtm%Wio z90510QY-3^KNV!n{_yg^aMsAb1xizY%nuFc0r%&CZ3m;C#GVR%9MU7eO3I)66*^J% z;Kl&uQh>P#zZM0&2Zy=J9imN_ZJ?!ABX@*Jgnt?*z=u1ddDc=hT>AxBc}Vufw3HPv z$yWj(vVYk5*OQT+*G(&+8Y9&j)s&d$P!2o%>*Xu(HN10C`6C-o(;MUku7{q(E}c)klGY z&Mns(iz%-TA#8h{Bbv#k0F9r-j<8^9i4!vM4mGy(*iuL6pI5rd0>`Qyo!;snYmDu{ z>WxX4D&kB+oD>}(zYC`U?ADtR4vd|d;Bk!Fr!ZW-V%33Dfx7Zk7zg?@lr2RlNW<7^ z7`3X{3B|xLn4vzFgqBCzg7r0yG-#(ACfPmXah6ZF8fUFE!V%(hbDY&0HuA4pt4^T{mFQqlg(pai9>-XVWy9Sk%%6G#{=^tBFKFIGpPg} zi3FNbuz@<5*Q-BMTT(fzzdSA6vHAn0?pXcj!X2x>%nCeX^;d)%cdY(0I&jD8ujonc zSpAD|$LhZ~+_CyEg*#UNec_JPU*-(HVD-N#+_C!0*ugUv{{y_UIE7|_R5SFCC= zg7+ud=}Z)T6@8TqJ|*sP5oTcl=Thqag6Krwh+8_bxu|>`8;pgnu9B}|6qh90T8v=b zfJbDk1XR3)%%uyv$d5$F!|m0ak> z*1LAg(yvXI{JU%SaCe{_(tX*cJ=zYGrriNAkY|u1Z%c-wu-%L;L!j8_F4UyL6Y1#m zj+rk(l^PPlIf4knh84CF?D57TMGU0JMlZwF#pBC=YSqf+l4O69xC(HqVoy)K#M$fT z&rChnUQ3n#+|+Yr4AAo{Q_tDA;^$wOdanIUD*x=%bM0=@^XI0X!?KoiI&rro%vFx> z9y%kPdMfIR5cqPEjdB(?seSr`+K1S{EovV>j}eLJQt1fgu%}Y`Ln$1%+*YL=$;4zH z>68eS(jQ7elH69MIAf)JvTmDZXH-;wD2imtZB-Nliqz3r70@3F%u;}V5iX=b_{UWm z<7k)iQnRtX>e3(T!dAp>RhK8{;nAE5=nnStg@Mqs%?psPzR;Xk4bz%D&yHz>^>VU<+#{mq;mcvHt$c<2FLBz7Ein|Z_3tUZ z!Lw+mctaO!f$Sv&qOO*oOO7xuyN_V&5Cyc09jl}Haz^6z>WDo6N6PNWa+m(n^HkTv z#k{KEb$n3fe*FH?D}eX9s)b^9qVi(qrPo_f@AY-PXc`Tmi~dWmcSyav#2JN=;)YOf z7LZXavc4G)EObPCH1NRs7VwbkLte)RH6HdB!(#6}oa9{;#gHqP;uZhUdAV!E8+o*^ z5dp7F^!vB4nS;ZsobVdT36rr%K@lR|^edt$76B=-$k07wtaBAnZ-JiH)IZ<8f3yj> z{bKZv;RsrS^%MEzWyidn@5D`P&LyWR?^%i$tEJdQBqDHgi5AL5ah&31X!QWVMgVV| zx0y8T>dcCfB9-}H3k9`ll?cqW){7J}Fd~l(%syHS^q^bpuAn+=sbq`R4IC}38$^#8 zgeSAGU45IDRTOs?8~|cnSUf!V=Rm1l#8|T~hO_S+aHCYRwMFYJOjFhcS!ODW)_L8t z(#YhZcc=CHw9(LzNf0O=99y*Xddi~pV5%+$ixxZRLnsfNkL9K|Xf58HuTlFFC#^}_ zLip7;4TBb@5ZRCrX`}H9krpe7o*~jk;}s(9ec>4*EygPWe}91eD9Z z=xICCgSIna&03Oi%fQq+6TUVoeAredg_3m@P&W9etxUHEE0fMv(Wl-pFgs~vDnjcR znF@{hKG_QJT1w38$Q&{o$ZNcOQ${)(g~&W;smyq>yt2>Kv(H}HD6b4QvN4_8(8ly# z0V7~agE}@f30s(&^l*jlslQ8{Y8q@zXKiER@#h%94h4GJ1&6OsyWoiGlyi^}eYpb2 z#>}7)*w3Y>!2Va~1z!G!@pk6X#6^t*2b@2{+b!TZVE<`S(ZwK z#b^{ElQHY3G#)r^(E_0-ePiPn;7l05utP~% zXh8s9KjYVpqJwDs3Sf_oU$fK3ubU=~U!d;4gz;=|g>P4)Nl9nSG=Ckc8jwvanCPlqqd<9M!(yea*A3Ixp$3$v(}_C6 z+MzW=D1+W)#2Z`iCrw|3&?kX?B8rS53wf$Bef?8eVGtdJX87sX#PFp|Jz8bp$~2yG zL9C1>sY@wa=h>&3p;E4ERDn3ibXc{t`IgH-R-CxYJ1hYSOF&kzJh7iq3mJzT%k0L6 zc#ua+Vsm?&k_grDL>uBUwlVtpi2%&X6gR}jZH<(R+Zt71Z2pRy98=braWB3wlg$$$ zgtdZwu*4>nPyCzhn3QhGR`fr#@ZM}RYdZy2BVCba50|au64pYQ^?w;9auDPK@-5i4 za#XHVPHKcfjs{Bg9P<{cA@C`PlM9w1$XS^5>!;GggKrz6RO|o2cYr&-L48N&O_viK zIIjG0Et=76VS({k&S13l>yd@nrhOQk&Z{KD9U8WlYC{H#3nZsj|X+W=I5XnNgS##e9o%mv!(3e1Q4c}vsl-Y$f<;q$y)|M`|sKVQ0jh+zu;K`6kN zF3?$5U~6b1)L?R&s$p9w5NgQF^)+k{P0+TR098{p><9(;(gnIFCosG-)E_?2h3To! zuL}jj=a>X0Kfj*0b94Rjr>~Qlv^*a!kA};K!sVmk^2u=dRJi<(x`caU08xwvA1M;Slj%TkCcsu)OwGWnvdCTz zmx|)&C%}7RMc@N4vPlCB>aKxVOC559DgZF5qv`CUcHZ;%fxuD(5AMO}>jNZQx(}qW zm+}s%=KDj%N5kd5aJiRvF%y**0Lh)cW z-E$hc;=yjAZiOGD;XGEwD5U%ud+*f^l|&cl)ywBARL-zL?@Qu!DmANzV3#wWj>OUt%kI z2*qHCom+cfNb(cZN8Pz4YLv$fjpxhzab*!OG#-QtfA$T^eAhsNv<6N;s}H7#R zo(`TVk~{V-)Wm}7hFOm%D$)808>z`R`qlt3QfSVo@dfT!b03pGtFpzS47Vvx5GCG| zFGLeb;@9LPLYZjcQ?o;kmzq5$U0YH#v*c6M%nPDkgN~mU6+o}d&*-Gn?w8g5#Aiqo3k2a*G7oEaH((b9!Glj8!|zii*N8I6aH3zv$CHb z;Ty{}U#Qzz+MgjOx;7)pwCmb9jPcp{W}j+%uKwo6{rm{u;M10rRKZ3HMGcW)Lz<7Y z>Dn;)UWjk(hI*|2rr4i77T=%~IZctMTOlmq{M;5UwqMVe4^dN?X|~Z8mTq&n#x6Rx+IHVtWK{F^Y?0txXga zv>n+hr3o@NqABaE!FNj+TGA+)#a`iTqt=H|n}apDZ^T*f>)=EK_o)H#9QrY&kJbaT zz?liN;E{RUy+y4BQpM4UD%R48pTzf#%OVBH;{E!tC4=K}9Z?Y4V&`i}M&MYv9QMFY zT9kui>w-W*LG2Av%SVVJ=CYlRl`V1CqOXjm0 zCi@|!SNg0q)H-!{DHuRCshZ0fZ}w_AL-1xn@l3>8iIv==tPl5kI$AHJF&b!%8*t5} z!>JpfTN^b%)RYK_mzwH`J;&EoKX!v32rDJsx@?8LyplU*OL;awT+SV5&m{--@`zQm z+;e!i$Yt+g_Fkst)7XiX9hy&{(!BCQbrG`Dg7tX3UWnJT@%nJQo{87f@w!H@ik

!c^!f=l=CcH!XO=7E?;i$hoel0!o!{!VSW|B-YTq>Fb^ znjLcYskifk<(vs9N%2gJL>(D+>$JSk0#9gK*trp(_i)>abNLt3i zL_mvNq)f@KeW7@E@?5AO(~yb4fNSl|H7Lb*SSI0YP( z-RSv?q%Z2aORhCo&SNd_-VohhMk3Yq8IC*9H7Rz4i=RFp-@Xv97vuHG97>VhA$eW; zvH0vlyq=HOv&7jjdSRBZ^pvdnPx`t)dzvfF*fOH#SOQ$`biAU;P=2i0+#iY)Z{*J& ziPv*3c58A)zsai$qjEEnbyTg^LRS+f>lv;B;m@<>^ms52^z2F7X>3=~cSCE_o&2!RhvK5h>rA>z<4&&*3J=_q-MpJrnI$lpjb6)@Inz#s({M;r1(ccBA7jm7wZcNfl0@&5 zHz6Rf0IJQ1fcl%Ak6 zoQ;}2S8|yRZNYqwkCO2@n2}cyj#yZEkJ-G+!4?0BoIMsy70+YpZ z@+2T>BGnZF7Q>iVZ*#rR3~jbctgW&Zk@Tj4Q6MA0Yc>m3Izn8ge=E=;}D z!Dn6G=WndvGjSZCkM4lD&C&Ck%nUFyz?38Y%ET};TU)5hQy_{_IEhn}wC)-vB-$5H4S@A;?wAE}wO;elRH`@r0 z{cJo3N^M!2hZEFO;VFdk##Fe-RN&-Ojnh+*lD1lKYq~Q+!gRn&!PY~C?npi{50OYx zM}1%s)~{Tz!B=o+d@M&imC;~0!*q&l((92oUeL^0R!Z>>sc!syUs$cGpJyh2J~8?8 zLgVL7wYyVN_2rnBk7au&HK)ZEPoQGUqpwerCvSVG*!t*ufBBp8UisONTGyoA@^VY6 z)t3IBc0$BAL9}h@TG)75l<{RNfGQpaAaL13xZW_@M(9(b#W@@x62C<}h`M;nu+*Z3 zhMk5mnN+^1+SsX9FbUZDG*aw?$uZ4oMHN~*a)t0^)vJmUV5YxTzH99oQ-V0CUeIt< zmCA>3O5)qIo-fel_2ff0R~ZzOvA=G8xcb8(s%$NjlN63vhpWFYlT%-zrvNhmO;F8acK^P`9k)6weWn9aUSv^pPRoCq{c zw0f|~VasIEtoeX37C3{3Xlw#$vxGTz{S))DN&m>Uv@a`$&MuS-_#+<~TQQK807d6C zWfJM{%T|EeS&y^wiY)IM+&i)Fm!G5?&MYYv>a8JypS$}sHF$4}G8U$At2t%ef{UC3 z6pF@VM5X=NTTOb-BMO>)ZEN`9B@MJfa6IvW{OA%KkG+hUPQP)|!r`eF zZ82(z+~O}9dk-Jg_7!HQO2EExeYwP>2a!U1Lm@;hE1ML8?@m;+RF$Z!=}b8ysb*i* zR@Km?H<1!LqsGt#ccP&|aG7k218P(VIySt3GF<}Gb0|?))0uKi($;~ht>9O5TP&25 zZ3&kK2q-G3SqLW!-Ci|U*M#IcUFcv{sII9q<){RvyQ}8-ylQSztEbSRst|xwg&H15 zO59VmRaYa0ZVKvqt3q`(ou=cGYTg1#Db_(4$eE&T;=k3g?y+wfyxW4r;t*y#wy#ip zIU!4>EL$i*2ZZx4!5BCA*k?d`>w^kr8tQG8~)f485?T+^mspHu>n$aB0U<^8ulsoV5 zVlB`e`@1ZB$K$g6jQw46;Vt{SBz;nj{aunWxnqA9CO_S=ze{K2aJQlf=eyfAt9*A* z`^9{Bx2A~i4rwa*?jG$I^WDALFXp?qn0VnU3M(S*a?yFe!cw)wz#Ys)%sjLJ6R?bd zRm`FFCPX4wN#thC5pgqSoG#2?T>y^g6mgIe316%$phmo=_3GR?oMSW9qGUZu>~Z4? zB?1(sqej?YbJyVG6vEzGbx+(>rPMkx(>3o!1Z}2kTf!zR?jh>LhM5#Rs?Y6$pj|90r`{EhkFg zCLs`4un*NiVK|{RMUd9rkgk#Qbt>Y@33yb^I*86z6XR_rN+;CMZzicSkMzrr1uzll zWCLI@5VOm_(Nw`7#l)23iJ`EMNt!j%upWo_Nk)U+x6vVmgn4gMqJGw*Mt!0MxrQtxo{wG@XuG1X3=*Js!ktOi8AeMB3Fd}B-X-F;_?b#cPCB19~G!IG{89hA|w)ekfh=`-#IC2ybhpU*P&b1>+n>!R|;-+v zZLmf2+q4Q@O)d6P7BpEZ(Gp^{7-MRs7Uv{jk?Fp-s=wHnmXjIZF6eevYB8t3T~#f1 zRM&d77|^6D)2iA9a#<5}WHodC_;K7$p(9Fvg_p!O-@&<@Qv@QF#ACS1@3rtMOdXhH z_R5^xkBm;@Cnb(5-xAj&jz1KyIAU`2K5flDMINciP-mIB#SJ{+Q}G-qC-9su z&tb?nnwD50QIzzZQc%dsC}YbpGhdoeye$=Do~f9S+7J&4^R?*KUcdv8qoH34&=+uo z7L(tJt~**#oi(_TkpdtJL9*9vA1-0~MST!1DZpZw>jCG=F4uZP+|}ORH;c^D0?suy z56^Np8>SoiocYm5vMD^>+)1(?p#^w=ciCMgE|?72tQ8i;$Hh88J}!}-_#}N}wZ&(q zt0$7r})h#LjIxh?X|Lu8cY{3fV0Y@+&}iwQ-d=`@ImjdoZJ2tTXj4Rv4r} z%F1mg%WuY9Rn7<7m-e-8z87^5Sz9xVrQs7Kbn%4|<9@YWpqy?Ica-kHti+BpQ*~`oQT?H=E!4%oxM7q~&0;6};8bAR zJn6ay)K#T`BBP7UUliSN^Xbc|3z>KG0^eY?b#Iusk4DFzd56kA?u_3s}o6|XFo*gE>k zL)c!_2-|X5I8G3zy)fCx{MWFN?J~T$k+{h=Y=+GX^tzd9Gc1y015qquL1mlKhZ}5$ z{YJq5#(Q=Tzp-C@WAUnYj9yi|`X9outPP8eXT*u@%O@ax;0s*sI?uNuAjkWAh&U}+RA++ISQJgL~G z)vD0y#pe7&PzdSYgK9t4n+s;S*-|K6eM=%boHp=S>TN}rDl@7pe15#D}MzE$@XWrLn|(2^{SYYj9^Wi@z&5r zm5$94cKryR8$+{8V|Z>sw(v z1ytmW!+8Q4opCtF!Xc-@lg{>Txi55QpJg}h+y4Z=_oyRzml?cTw2lq!V`fT>GUg(~ z!J!e%Z@P#zrV>g+l!ZhZ-__qscA{2WBO>0ZoTyf_(x54C z^pVo2D&H*MW3AEm(oW;|;g;3|QU%>!{VAAHh}6==JSO%k0A?wTI&}RWdh7d+yDobG z1W(u7vFkJ%x=zdLdid-RXYFj({ko2*l?UZruPX6I75+~(l+lQuK> z0d$Pj0>5QH)(6>>Ne@H zz*4X9DqUrW<%z<&(>f<-PXc;%A+Af8B3!T&>lY?uUGQOs{fSjPyL_ydCBtL7;jebf zV?_&p20sidr^`B%%FGx9dW3~;OsI3KXr)+D;b4M{h?KIWgQFB>ix+qbpDH7KqU=`q zv{y1UhK)?Iyx5=(G7~`Ihqm!00A+T)s8I>$>_Bth!nQ?5pp=)6n&QXG@ledFE37c9 zNIZwPKI!p^J5lA8)U>5MkO#J; zyF(DN8B&WBz>!Dkz$r+_b6IyCj-FB!j4cFH%(&(PF>)yqtkY8yF@3C zp{j~Q1^YaaZ6sn5ew!#h{%5uh_5@lL_`Kmj#iqv=Chu8Thir2>fxN zjz+?93_0~oa$psZb&#tX5eLpBY@2PE)G8kA`WQz=By-s$EqhEI=p zX(lALDgrjhLAD0?V963aJPt%j`53E~c_Mqeg0lhSPiypXgF_oEHXI-- zuU@KAk8aidaZ~Q1>l)@F5h@n!Xvt72a*zj(ksP~d&ZgnGKk9s6s*UDeq-0?hh*;5r zpF`%fpoO7)sb>C(JeqzE0ZdCxSBGU=`1Kp+mEB*1g{>)!l!g#G@5XTpfl)wlHZ|LD zAH`1`q?D9D{5UgcaEqj`B7|(b%jpKoe;qDA<;&?7oA{l&32ncH8uNiLS;JI0qfBR1 zd_Zy!9tfl+<`&=q1BCLR#G61B51A_TBL_?t^|Gi>zoLROsVIY&Vvmp`f-z&kIasW+ z;M;e`y%s2zbwH*>jO#G*oC)(xb4GDI=t(#w!D$Xo9j8rwJcCG7VdX|q?HqdNJr#f< ziyR8E7IrixIpbS$hp^)w7sZe<#65vd#$}GN<1&wq!)0MO$CsTGh}hIZw?_&-7of%5 zqp$zowYAqhG+GEA?0)r|>_YNw&sM+TWb%5?RKLkLq^PT2^_#>)Vq)Fu_jaWoa%-4G zi{p(ZV@t7tSZ}N@*5Z$upPK6-j)u4KG0qwz*Q6;6{o9!Se1;IQ}g5%~&>3B1O zK|-LeH|bQVp6K8dbifcwkX14SVLb?JTDF1^r>P{>S|P@{BLf@anQY!>CqXzwXEn8p zaHd2=kGP~nG~3Wp6b)%9ii>JV5+J0d%S#aw)h{NFC@azwouJcdQo@=2ZxoVC6mg*E z7X_5AXAWxP>0I?|l)W~EFW5N-D^(?w9mzBsJXD?F#A>|`nB!Z8|L<%5_&c6TU{Rpph~ z&SZtHY1pQ57Qh2IA+6)mWAH2rOyF$_ya~Kju+?~*f^8aa-SV%RorN5mc*C>Un&_zt z8#Ej%8z04n>@l3Gi9hxx^d@?%!rC8VPu)h-^~IzyT@fUwW>;5E{(9o8FyVNlpxFd> zQ?O0rt^%*_>=by7&caeenp5C4aF^pm0k#f|kCH8y%*U`bMc*%0@?S|f#c+Y8jQR4p zTGq)FRgq!1QT$Yq!5uB{c)7ZwQ>Zhc%kzxGqBno(-TZCn*CFvoJyb|8NF#A6mN4VPv0 z&n4v-@we_CqUsH?ViN;I>6`^c;@vvAOru1s%WwyU9NaQX*S5=8fJ2xS6|s`-4s1dl zaZ0LALS@||cBR<)Gvy)ynT#`Xtuka?4|eI$W$ARZEb*BOdkcp<^|RQ*^L&Lu5*0=` zdEJDZAceN@5}WxZ#uM}3GD@@pVW_w05e36G)er@vfSC|>A~^Vkw~k}6H8VmK49V;C zcs4wC6wE9_cVflpJE#aEado&qVU+ys42ik+9vu*V2@Vg9i-+?0Hn2J|69L@(lh zowz!B6;#PkI*BUmK5P!gD~6^c(@x_@%dSDaxn6sDqtZs6q@aeHLl8~NbkZDfBp&n3 zwq@CkWv^pQtnXT1w6fF?q31MY&LhXHL}fqAM3#UUHD;;l9@5Il4409bUOOS(lr06? zKVUB0RWxMrdV~s zA_jw&X9gw%Da-P%s*k*s(IS_gNqR^C@oT=2PHPa^FaJ`l+gQzP3qio4%~&aINnHdZ zSOF|xL;JzTL4?D25eQ3wy5N@;YaK5Eb%&_xi7eVcNZZ8n8Fvunl}ApEiTBb!vsfs> z(UQh1xCLF2VcFgjc_&Y`W5HM)(SWok7^wciL}llt-e<&Vqr2CDK9#bUvdP-0-+Yxp zh8a58kC=t4vAJwxHYcS4zSCrLsK-}jb9}N9o1=ZnCpDWRqK~e?<`h$frU{1w+B&+g zUomz@igI6+WtraBNxtfEh7&Wqk`BB)dI-ZLkK{tyxHy$H z5=ExbtR^(hVU`mIB$%%58!2|S$h|HBQJC<8{H<(GhB0qzEYOpJgjQcI!}n>{(Tt}X zA68_=lz~_@;P3;UBgyDdHSiYNi7gbjKpdhQV3{=@qVeF*D$=tad`i?CAYER8mco0r z#_>?qXta17BRy^U!;JDBR1^l^^@KGp316gPgJnJVbwyg^;^4z6B8=7G&u%#Q0-v6u zib!OjyNt6?P|xC^Bx|Q5(O;O*G){_h2T^>d9eY7@j&>~gsO%TPU<;eXeupVY_6yym z(A9>_ms4LIJsr5gb2fY-U3!fuvPo7Ock{`n?43_)E3{NHx?-4geZr5)nV;wS}NGglX$?p^G&lG$1_jvym$a-_r)5RYs`bz+L?#1rS^`wQ{6+NNTzXjczX*Ew4<6tZd_l$TvjFRTT2@#d3X`(TUdw)?5=qcB(t2D7s0^ByvUEui^Tt6Y&?)mVO|8U_d?`) zDqa*T64T+6xDcsRl*-JaXkQBvPxOrDyh-jR;9>>hXEVN>0^Ra^TwqX}jNn7WzOtX5 zkUUk~D59zMh#Msy^$*rmkyzrlulzZN09Wis1EPQ`a}XiA~j? zHJgf`b<6+R5H2=8qYv+BLP!b8pfWgB5O&LtpYnG%G`^z~E6wjzL|T^(OVyXX*x;_l zhq1vL&Sryk_hN&)8{fqS>+dETtb6#+4C$W6hjixtCZv?m$|;jj1t;Oe*l-||m(|}z zLyAa`3=O<(SW!d*y)v})4UI2iOOSCOJxXY5RxOFJ>Xu&K_%51kM0QgxA@YisC=U+y zKJAWKV23rVsbBtVXB?Xe)0!3k$6W*ex9|l!nj8FR`b~LKz85dD6Va7daxG_{ZKt`D zt`TCR|?mr2;ZGStV-#sI#mjgYxq(FE>7b%+qBJrDfEELCy#` zeJ8Ao58=*pPv>s$~5Ssd;ESWyIX=*P*t_` z6NuIPK;uANr43~j>O7#oPS73whyYr6RIfg5Saya1y|U<0XW=3eM$Z(I|Kl$mr0IKW19hl6*M}4&8s3I`-rH zGhP038>(|U_A4PGRivw#y=34ya+4s42R`6RyuuTIA*qPOp)y6VqD!BUJjsfW%B0w` zySa33&Tf}b46&AvePBDY0~%$`e|1)b@0O^A?_QJbBOwQoqbf?|sFKqcS(bgFubJz*lw0;;Ds-b|FV-!I*)a2WUN=Bx;Ji#HQ0 zR4dI`tb@{Mm zobb(C&<02);2a~#ZTORsjIx6nPS)oC9-DJ-6!&bHinMoyalSRV0~{~`O>X!IMRjw5h77w5%agp{Bo zz@~h8C1Dcav3(86IEDA5{QO`4(tmpAonpQ0wbG-ft@l0C8hkPrAMXEHPA>1T(TQm- zqgjq5b6CFGE@S9tO7sz)jW`0)6_YwCJdyo{^R{(i@FXx}wvsd0nmPn0f+f91EY9ck zm+(H1I}k~$*N)cAl_{vwZ(=QRuPZ%PQEI1;s@96GVTH2mYMYSoNd*Z;?6CU_J<$;n z@}9E^k#Gx`Vm|7iIJ#D5sVZkqvKdT>&WVM}@RK7az~yp+ z(8EvhKEFe#S2{El2=NxK{E6GO!sm$6JY{)dGsH<~7m(sE45$fuPM`r*ri|e*2UJ=Z zB7zJ%(-fwrE1O@7ws(IGbCr+Z>H7tsC)jV5?P$thDXmA=!fFrN7M2LwXAj!+iIR$$ zK?++fdc~FyQ{cwf@&-uUvgM7$+fd2;D$&#w5lDuMB0#{ci-3H16Cf{e;k-hQJ765d z$vEWUxOcni%q@1H=mf6q>Y!E%e(6}Qu17*SHPHlnk`xu%z(8y*+8->oz4tvu=YylI z54}D~PQCuU{7t_3-J_j9sGB$c_l(od^I{Y*lC}Hg*Xl}h)y@wTeozKkzHv8WlN{VF zmCTQ+nmux%>Zy9SkL%sus25V3s7QNs2ZeacY;0H_R3?rOXh9 z`(zrn093z!75armu)wh&vXEc~cDuo@@}4}{RYK4e)g`ayC_HUg1IujgX0_I&47)}| z_>h?=0zNoO^L`OVQzxc1v9NJc<>x(6Z=BDdF)YKBCeN2hOBFNiwV~1l7pj85zvcLl zOl``PcqOGzZc0zeG!yXlj0mWe#Y00h#v1y>#OQ2+FP?n$Y+Ss)%DG=YF8Mp^6)G}qdyP(}?>xNeEp>NyixjGO4bdNZ&h-(iPn z!*S;-tY||fa%%z+!Np|K;ZIduiH$enIk%DwK*i}UDQfEC49X_O=O~`l+l5&IH(`l# zAc(YRcte(XYr+D;;IjN|(vnurtlms~wU(F$S8WMj#8q3;vMw8Q#ps!k8}8}Vd;%u* zX_NPmzX+BS4TWs|VdR-;+%oc-f!+R<)Z!5%+@!mhm5{=syQHQ&)}skhhYVyZTUSmL zQxmZc7Xn1pl-D)oq+=+wyM}`L2V|N%{DUS%iZ9o{CcHx^gQxuCDXatXqb%+#XN{Bu z68cCAPN79O(QRKmQ)oao{Jn1fZ)Vf^Q~64%+&SId4$o!xQh`j$5uB1A`XcqY3j6lG z0yxY6EWr}c+YUW< zSTEL9xns1)l$Bt%oRMJ>$+Eos7uP9ML&k|q$6uEUOBBoz=~*+PSH20EjM_j3X*6ci zHG^mUsRGViw*eQe*~@#);JG6M321ZG>>1-!0%Q|#fgMp=F@S3Z`x>!2^OCXJ0Pb&P zysr^5BNTg<5E}C&{5OOmZA;Q_5GrW;N)U?YNC=H*w*NPTew7G?ogN0f9eFrmcVNNkDJb7}BNx%NjKc8$@91Eg`riV5g{_%b4+kAt&;4Ay{R_AsM-Y(C*7 zLYUPmoutP*d@B18A<~hV~M1NX$da7 zxauGep2~YwSjL1w>!)ljR4}(Su|iHi;*;K1Wd~bR ze{Ds!dbop!fGR71EJ{@Jkmy<`fVqpxM(RES2Ns-t`cY^XGmS(T7OBEz?%>Qqp@n@a zS+p@$6|zx~3e^R}d8eaomUKLYD$R^Xs^$0Ku&_|oeHED1lGMU#1ke>5L((sQ>W|1y zt~6U1l9eM=BUH8q)@}?^1EKi5AV^f`<(LVI1-BAHvXaK)9AR{=0?W6edFFd{zNVm==)B^^q`jY;T zzRGGzx2Ugw9C0mMDWCbpUCRl$U?S*#@I4Ut;D2ZHlX0pi?+k70bJ28CKK+ZkXn|UO z(pd4I-r)1WgjE+S1~D2CrxkaEHll!ZoSL3b$IaGDV4J~i-4CR*{uMuknoC) z52vM$#4l3kb#jayF}HT&op9?{Hd88!{y_ciXv)0#BE?5s-`^YhLuHAnkmNXANHNk1? zjiVOlx8xEN$Dk3rM0&rirEx zw4n!q#4XQqkJ<9hlCHpl!fr$-Gocyj6?6b%(-?58Oy2xZWsn*!y96QC`)(2Y1z$+e zqTPdlMG?N!P_%WBD<8&7(f-yjKD<#sLpP-i(5CSY`(u-uYUI0I)MiMuiAuJ>Q&`go zHkJk0K{|GIfdVzsnQE(3w*?{BZIQ-x+?E0DhHdHu-&}JgVLT(iK*#_9vu9BM*^zvGVFBR6wPpD}?XR zmS&GL*CEVdYc8CKf=igkd~=IP!Efk8kxx>?P2w}Nq6P<=LJfQxseu;7(p~wYEJXR> zAMo1!YPKS4x(G#YcBnDk1LwNN25L-Xuz6zx5f)1tgs#>Z)NJr4vMuC;{}A2E9B2(~ z<}0@+@jsvbkugV2`EwZH0c0=6W~dDE+J+%d`%uGdjhDwq+j+75e;jo$Ml!^(1kbb` zu^meSYSg7^Wec{v3OIZ#`4LPTz`Fp0EqbJB3t(fvG;I7i!Ko00sWMb^<*7H0<}ho^ zc0{(MVs7{9FvZl|`{28=MZ^3}uGvbl)h+*H(mF`o1E4){B`)Un$_u%UdBXqP-^Bo2 zliO1mP9K+`#ej8_vlAPd9S>OxgDt!eLCgp-6I`hJOoD^>BfUh!<`dkWffZ>>f?-h3 z(mg=I3JS;3Thg-&r-sQuF3}q^&{VDSZg0`of`_G4AB8&gmEOVpz2q>XIQ0RaGfAJT zbw=+ad#~4212@6maXx4xVHhf?q#mUyP7bA-dQywwigaY;q1-UxyumSvGhB@=S8WH6<#D1zWX&Rx!epEJ8meSW>$Y5@#+#}< z5DDX+h8&-2E7!c^J0^#K;>PQuRV5z4i5O(BPey@&HFWN&UNhlAu?0q;vF-XNX3|-q z?+lSGqzcVe)Fh7e7wu<9zQQ}rc)-{-2kb}WARtYsFx!HEf}EREoEj2I&1 zuHj?LR>J?#rZ{q@g-b3@;vHIpn@9Ng)?||+!6rP^pK9*5wA|vW;5=d49^4!r`SkP_ z5RKt+Rx~9n!+y`QwwA#igc#pzLq+R#sa!-bo^cvc3p8{q6q*_QS%9FSE&l zQCUNn<>Zc1jx?R1ltG#_3>dTYJ;ck8y5-B?G~WSEeI#*?+$#={6_E;vh@~L7GdB;S zd12Q4R+P2yO^}VevLo<1CqOs83g1Thm%Y~V8Ag3kJ~TM^5E>y+b*V9VBXfrtcVgJ% zO?c?aLMs*j)Vi~3izeRLGJRv<=&R6GCN2(=sA42XM+{D1>jq}d9? zKprM_iaBl!z++$?MuT^x%tLRuve=0pKC4OzPhol>0aKrw)~P)hIjxZ+8i-Melq3#l z0fi`NG;UMzGOB&>kSoCoj8`STc@1Tj%we?`$3*Ih3ANEmY!_$k7TqMAJ?fvplFOH8Cv@D%2obAzVsSZBbJLka`nNqq}@B;S-cOPaec3RB0061cwPb z{{#(yK4Sn(3Pm~F1~r_LaKQzrl_25epQ<#ASa+d#$cc6L9rPK%g1$fllE_?xg@*AQ z6@37r7Joz2J-nP4Jh})$dp3FyBMVbij1r$^e8Mlq;HNmi6)u{d4BQ|{qTRcRnQx1l5Z2vV?r@^qp(C$m6-rnIK0;739FDsEq^QrpVdu;P^ByYL1opb2xH`ua9N=V8L)qyM5_JpyqnWg|lk|VTm3HIO zP^1f4mcVlO7&6ga3L*mCT4-pe#d|fym_%ym zz1e=^fLN`Cz!dt#K!PadEX9rXuzHC3B3-G%P-SpKyD>H8cuvSadZ%MMgt*u{T@{10 z8bGjhXWR@lM#utHxr4DAn}9?$l&;D~(16zCZ5ftkKnoT{0U}PJ-?K6VXA=n|&Hu=wwOHaLP2$I5XDQe=ow;+Hlyb2JF$9UhCslmLr@ zBQZ)qXzG-}LJNJSO{vyC4WlN7tb*WV@PS-M+4=<>oR%3GVunIL zm3gS>U<$rB>3?Qhx~QI>#UkJ5aTdrMEQoGfzR=0E+-{xtwaMJb14X*_wba3tuT2P5 zs)bst{aeXF{mp*GXfVJo)&mOOiO9@xSqOpiwF&XZkqro$;eQp(*euptMLp%h;VO%K zw~(hv)`OF9w%=%`M2^yN9I$D`O*jEh<@@07wFz13J1Be%x|%HR)af|HupJ)m@fTR; zRY;du*XqJd(hmP6Iy1y&OORMHI{Z^o^WN&h4N1%YWm&kk(s<2Vl1dhsUu|08LwMA1 zL9&XVm?;N$avCD(=5s(nsu(Uv?^FOKnBBIDP$v9JlAdFC6JxgiQ8gdGktP=;fX z^{lKcEKQWvCO4nJtqFZ1}4BegYs2T>ym7@*w_xKnhjAjpr5 z=I&CCzZwE9!jrfeVVwX=oK!vPKxBeqYr$RM8o&WIwnCs{7`zY%5epmvoRDY$8K&8S zRFt!#C5xJ*W4_C1s=8h^thSICv7fph!#R&#Xl6WMqaCru9Si{x951Fv$}NY>m%mNT z?-0ryoz!@o@R&{A3QdTiA&r*|-6Y7IV=Iui3S^c@K&GAi)3?jYLIYU$M*E zvY9>1?a}ojrR&3nOwPc9@r-7UjJ6&b+&WVDKPVok*6Y|rME|a1+Y-@Me|w|x8(4SVi)k}M*kPiEJiFt){CUIjg>P;G_Z73GSl#SDWikYPR=_ry=>F8nk~$zwiUe*F*~rI zL9rXU*v%=xhcW#XTaO%u(WR@!4M!Np9oPj?9E%(H&5z;sYV;YIJ&b_4X}$?JP2i@8 z{;KZad=4@YvEyv@ooB1>;3KjxRcm}ox)OSfywE%1kqPa>9A}Y!hh%6il=3DnV1w=khhn!mLTF_>vSwqTf z+kiEQkzThcYp5{f=CK@*+9hI$p=Kcn9TOCEOi)zK2TZfEP5t7+(pA+3WpW<$R9#wI z%3_1+%=m;D3vUFLMyzoc2bMbvZ&z(#jH|>@ekIk?fMvqX8|XvW;06jOd{;SLZ4W92 za?TFLi8Mj1RU<9bvQ@u4+mmoL_?o$6Nf9#bj=jv%%bp@chM)bzZG*LRq|@F?DRxEI^f8^X78a8i;2wgqvm4rd1=*za4144BK5swf+LmrUqx<+ug3Ya$5JN%_a0 zSLn>&Cyvko)7X!W6rB6`y?^{;f9Yh@=p94*=FKpH4!aq0pVvGPlE;bUJ5MCvc_R5P zYC*6@erhpLgg-Qnv69sUcywIJh80nD#@Zf2l@SXH4mqb&;<8j#!XqcDLZgC*$z>N^ z{yyp<3#T^B_P;MDoB)-hibm2fPmOjxFdFBHQT(^Jd81`F+MgTc}gh~-y{ zb{Mf1MYWir8pomXorlVI9x7M9x6E~HC*{~9^~bkTbh59OJ_daUJU?H_R#0GrPnCKG-;7I8vrt3IzA?>JXOTWEzbpMW3yG%+>xqo+ zbCNlbRm4cx<+v++y~kfO9;}hD+I622Mx;UGQ)m623!k=Q@^b8jqipb_^e(uUu$pKX zWk_^m90ZHOGeFF?ixj*NlLn)pZ*++=m4V`_&ZiDzq%-C+^*1=Y#0~ixU7f|e?ymWc z-+&HYtDDdpchSDBts@@!9kIayvS6s!(zQ$}w!+yT)2rHqT)}ZbAwEqBnN2LaS>u;O zy=bCtmQ?1fVLaNQFez}SJmHK2ONrQ@ezx&6;C4s4lBg;C$ZXJm1Ftzf#Ge5m#w92k zN_utTRIk44Deb@S209180YCgyb$sIL`u`~VX@V!O+WzrL+p zdx``+yY-CN25IihBy9lPR~{($=}nukbrYe(3|O#m)Q1HNA|3nwwOpCj^u3V76~d1P zf!c53neDa8@1PE$NcUw{Lh#GUnHDkoWENaEKuM zA>`t&NQgmPh}NsF*5u%@yG7g~aXi(-7eL6Y$u4b18#rt*;5uzmR4rnWrhTZ~Z7mp9ovEdn`3v z1}uVH*zpy5wp6%h1*5-!NRD+7J1(EI*poM-GfELc- z)Q=`*?hC`duQBZ3uKqlotcP~+_RwL-WbQC)nCZSYrBbu)q6BNQrBAfPbxcgZ*~W)& zM5=E>z4m4?=gZH(FBq=7;+Z-fh_y-uFsndj$a1SlZ!&lep;!+DNa|Vy;50IXfh=2r zT`>`hIm`_`TXq>%c$nR#T7=jkCAQ4?9YM;L;D;4~L6&Zdt&SmvPIX8odM;YoL6{?6 zgWVQ5s;NZN;(nP#G9=PBV>@v_kUryHyRWEG8MmuOWmTA^(OEYN>I{^O3>+L00u1AP zUI#=v4Mfobba^eIM*9c@D!upw^c5YYc{O5Z17c~(_#_G>;u8}oiy&#HMl%&Yk+Exh zV(|r^64!|h6*g%zkiT##OMQ<|75J6Ytz6wwu`wzWhmZtRlGi&-G0g$IFG-M~o9&q* zdJN9EMFbi~(1^mWRLp3!z8nlwsGI`AsAP<5Ad1we#N8u6O}4NBY;L%2e!In9tRUz0 zNVf9DUkD-IJ;WcS4x1-+ShfOTf~WUo(4VFURd8vcDd0|d({5sXN~1EPn& zFKHQIltYJEF&{JceC7jK|CC{+XJHTn^r^QijNtWNNj74m{`qEe~6AS?C&q6LU zB4rWta`L~ayGeNq>zzy-`;yn2KX?$W8#tE$WeJQ!KF}a|tPqoa1Fwno{C4@r?^9d9 z!A5CNUu3asA$^5b_WjxO-SUZFAvV8!zKf<0*2#LgS=lSy@{e8i3T2OBju4<{gO3L3 zSI7_0#5<{)X?ebP*hU=ZX>%UCvpvOu*@{tK{MdFZ^FfZk?ZuxUDag-}a86#?kIVgE zWVd}L(^8BaA!C)vyZnoDvrGYGR>y^95+w^taybw#w};EU;c_3f5e0@dhMT`QrywH~ zc<%on-!Fwy-xXgkz=DY5U)7>cRhW4LGONs^QgW$)BA5!<{3D`UVcuU*6| z&qs1mWH~|s+yfC9?-Ma;=(gx&N7%@!d=GJX4sNE-qy6{(@@UsL<&U=vksvSl`3w=N z1v=x?x}pGI?v_7rNyK&;0t%Ur&g<~L2!(A3jP zfxcgqS$(dr<; z`RL)WrRD)dAyH;d*GT|bka6i;kCaPiHA4J&L_f~!N9#3N!uuj5vhh&X-+p)yRE5qpVv-=s@)g7Eg`hKrUt&KcCW-DZueP! zlvg^T-O$`3Pc~~#Bi!uf#b$F)Hk!MvdjI(+Y3@QS;^rRL;|p$Xvqlgiry4mEYcMV! z){ltGv#Ra98d-})+{kG?Ub|`|Q0-JBS0q4JhOP@HF2^EnWc4O!D_^ca)QeTr@=-raBTVt~p69{s0 zoYrD(Zt-;d;TF%R>i?`3pGSaHew5D>wIh0rEf(SSF&baGYTM}qja-iPy6tD; z54U|qjhy)uZ8KxXZ9l2U7bn}cPIw7PMa-E6fP6QvPgeHa`A{*3P=&osjGJSg5;5b^ z4T|L>{|(QMJo?`EYTC8RpZk>f#s%tCa#U(4Vh!s{pKX<&ap|)vjVOdLtch-$;rgLw z60TzaYq3WGqBWdY6cM?kY` z{z)}>F+TPXKdHwTCmU4u!Oa?+o-t=*Wp40%{NV;KsODc*gJV&01MM`!6(O$m z;0tbL)9D{ZYW?&-(`-z+h*hh*bXJZ1uTRq0TC=g!dc5Yw=yRC)7EwXc@~70|<@nf0BpD*yEuA37TgKCWBW738CA#4RU0#UwnoN|rx$f;nHS$rl zeKtOJ+voN8>}1;qtd6vhB-VHO3ut^=g4gl9SZSDn@rOHoMlJk%HB4S+f#Y`X=OJ00 zn)C1AxXXvG+VW(VDO+Rv-f-`B@1u^tRI_4XRkH_qNb<(UtiSszO-;)gMWZR0a*bO} zg zE$ecRNHdJ>f5pc+sor?|0wxilEJ!Q-d;ao0<1bH#FT-#sPPKs@u}P4?aLQ>f&NK=5ZzuR^PYOV7e-JUm5qbF zGJ#*B7@7e{!jg;;B$$;YA&8JIFNA)fRzX`VR8j{TRV57O*8$u9}L{`qq=KwBmWzfO^28D)wN{1CMJWsr^#-1Gd{HJ)~GnA8Zrv^0! z3~UGwmfbZ>m|1L-Sg~b>#VQ=)XG}J~`RQ%t7UqON9TUtx+LkGkuQk!Wm-hU~Q`;py z;N`d2C+x9HJn|CnRf{@FA!B0Bi#dL z`VliRBO#bsi zkPU~nlZ0LQ zOCn*nHX-cUYa;A{hVNzcpllHK)^)=-P1wsO?1ead3)e!}q%`#K4K^A+@x%X%;d|Lj zBy6k8nq(sI(IC+F>?Da};E-y+Ri+NJSvi=QhOBpSCUOfKVKVwD=C3nY-BbX_s^gr7 ztj$_?@LmV;9047xGvxA64|c4Q_!9a=iTlS~h#z%rBzJz;0o`=fT8oD*nwdS_FtCr8 z=*=hGbUy}(}%|C|o z49CecQjCbE9c(bJ9OKFL^`2JOHlfT9w@*!|FTYZ};-#+?8}dU~D))=6#$^5AntRTPyx!x->i&%-76%JT=3oiv{As}9HJZly<3u(j91N%t{ z?Tq$ka{FJ*TqNApC$K-4FXTz;Er+&-&oFbDwAjM?`3kc&w`~?xVreu>T4J!doghi0u537Y<_7WrygsLLXZ{8`SMsDkx;6O|UtgE}v96$ohO#?RK1M|2sbcL8dB)fG zv!*PbK9KyLehqFLaQoSC+vE0kbxUa9)4o<^|NXe^XU1iJhg$*mIj-gDzeyEUm0#3* z&KY^u*Q$a))34Cje+;*3>`!$|BGI>j9zdNb@gUjp3IJF1E~~!(qw)8DIR5_g+(ze8 z_LSli6x>kacM7AtlzD9PRFS{J>~ogb*mk7b_)Mk|Ew0#0wCf9#8zyT;RC~#*=oWrM zdXHsf3A3+_9~94|Is&pHa#)A?xmwOe=Kv_!&j+!M^RbPyRU2nFYvWwA4T^u+HqOxo zRCGytf%_;6jrwy&_^{XqvCy3AYGya053=mA+;dQ&q6X**@_Cg}1l*JTE&65xR$EMm z@RfJ<>mDq4sxXLhV8G#)gcQpjNi0x3v{y$nFU+q8;e|o>rnDv_ElOP{`Hmjo%a%7e z(`H2iA(371Wk*jrKA-|$`JJ*<2dPD$$X9O1O~)~F1Th4!IHlz_^egZ{ECwuCk`Ity zQLY;ugGSSlBYYi!h(7b^LUO=^2$yjan#2G>@pD-zpR+cc(p|?dv_)`u4TOK;+Qip8 zsjYM&8DA$p!6ud(U~1Sn-1v82i{_PRzar7FZi zB82Jy2b4;VVWCcg=#>c4n0N%XzmyOD3}DOCr*OxqFLQit8VuhXJSR(1;7=?XY<^7+N&@JkJMT>Sz;-958T)({bjIrzDI3SWn8wdZ1XY z>_kpH-4Z1uBUB*PMEbsNiJB@O3AYQOJ}h*ah)0Qm>MP(LolG&8813k^C*zLt30k(; zt?5RJV9sz>8Xz!H5Y3Lc^7ksHM-%$%^ATcDq>Lp6+)M}h37q;C8|-FhcujX*A{ z>L3Iu`3O8^^16g+UCiIXzC!lk0L9gsGnd`4IfmHbCC#a#1|NW3mc&%bG_>kiWcqfB z)r5DaeKMmh(R`eYnT5X_hTR}*GD!&CFo-}lEJ#i>Ln&S|Y3PM8!D)ciVua!5|7GuO zpzOM?I?wy=eO2#Oy(;NhF59x@#P_`@w(LmQJrKuVU|sn$u>lR81zxnFMURK^lxk)y zMQt*J6Fnyi2r!+($XE~qg)I^VY!KK1kr-0YVi1E8s%Z_anU#j>Mh$M-%@RR?LK}O2 z|NlAnzW1uiw(KNMV2!lu-LLbp&p!L?v-dvx>=WlQ9pc^IqN!|B39d^fxHQUiBJMEf zjaTV(#vn(o$@(=?ro+q?)3LA~%Y*f4+Y$}SR~60sjZQ_z2PEyJL7;9TV#WwYA@7sPGdq%;4PrED#kL2;q$?pNLl(rTz(?aSHR3cz?TJ>U!w@-p z2qYm5a2#i}1@^T9fte!!@$6R+h!Z6c$G=iQuqY+*#-z}<`vjJBrWSaT*HKQvOyL-( zGX}@n;@2xqr&C|6MSr>t~V2ehaF;8U@S9OA_9kdu&vdGE;2k-YRJ2ck98|{9G zAs@}Dy>Y@>2?3z2mIVlbC!@o_NOf-SognO+v?mfU!lXhGc~|>*zTIrV%`Dfxt;ki*_^ejAILIT(AmUWB z*a}d`Q?ZRFfoeH1_|e0u23+>cZBElG!YBjQ?tMWT87ao)5yJ(>M)mO{vvo0MR#)K9 zT8s@09ZkJ)*BH(zVrxngMsHe-s}GEx5*J8R;;X?U(2XyiJhnzse8N0lJacT#l?fbN zy5H{}V{t~SG|XN_uU7mDyB=!V)Al_T=q}p*VBFTV0i@lP?NZBBo00C(e7qe84k)n> z$&0?DW$<8HVn08}auU-cyv#t$RForj0VRT==f_eEfoFQ%Na&|}Ih~n2X z#>iM^sRm+Wt6RD`6z|X_4O-VVaY8qtdy%=d3*Tk|a9Z2GDM@%v->$7lPd$K=_9DA8 zR(~t+sDY&!ZK%?m`n_SElSu55c&~h$3_p}MFnE+pGBMX}h+@JSBvkTpOtJTbPnzPG zbfgkee4L1coiMR!nrYtvK~N4Pid8?#k#&euqZ!G^05TZmy{lcBakjDCIRKuv`z&Gg z_jJN^vyGWn5Ym|?ge)&b2$^eO5LMSPHL|1CXe5vbwL$k29XAv-1t_B4pkaGfPy}gU zTNDOp#d0W+f*38D@#tVM9a>HFuWX07M&|y$H?M!Ar98+iHDOblmlCFIH2#RE05VP;^$&-bs&fZXKTC zpfE2!>!Hf=c{@TuUDpAV!tbA!m?ykGz6f%i`^&=%fp;bs0px(#S{8@dKs_ry$%TAoCg=dnwKA8y9hKr!i^=LJ_AJ z!tH?t5cbENyIBWk*+Q_k_>F4bMB~3%DBc_;_$GrsO7PFL%83OT>Dd;2uPPHweb2C4 z4J`wDMz}4WY)O7<{~z!f276K*=DmVF;cmX*ZO^)f`M?DU{@>RN@Uj5Y=V6#_qPc`d z#|c4+0&S0y0Vqt3H;X?-`EfHrTBsfIlZ#l+Nb!riLzRLE=&4jZ2ND|OHv&_mSsNAO zXojD}y0kLLtSfNEL4)Y%Fjf}Cg|>HhD}nfL;dzk}{Y|))i2c{PWo7b|uch$(SN*h~ z@2CAs-6B6@GmFjIs&EnfMMoMDI4XrWw#d=MeGeR2M^1D zOSi9^m5~0oKBRxwhx7{(Qd#->D#1(rv@iD4{=II&z!|P^^*5+Rf$5-X$xj%*XL`g? z#F0JlJ%*{G-bwXj!WHuqT?{imgR^Vcsd0M0sUYd z7Xz-Ysn=Cm9MKm$R>7u&6mkyB)X>h- z?2;784!`MVUs;H8lYk*w`hwJ;5Hf+91rUx4ec7cMC_3;tolQ6>xEPdSRwu(7%wBt% znFj)^qdK^P%#ApgBjIV!kR#Fs9%(TWb|}H7;*7=)KjO&xfZ?8YQ(|%Sv+}XI#`xVBY_rQ}jK{G9tgYr~O z;!AWg=%tD%f&n;2hmd#}XJ;LYB42&Y&ep2L5~|tRV&ITqq%;Rxc9U9wkY*ksMs$xiAL-pJIEX!= z$2nq{1Vm%UFA-L^{KVl8ulS& z+J|%qfhuDk()a&{_aQMB*;YqT&!jl!{Ydhi(YRd~Ttc1=7JmO8;dfJVvqr|zwEbf` z@2vQwi_s1&mvr0#O}jOUJ7hsYQ*9~M*zZmVd@=--EDi=Ko--v$h4Tt2`FaR}NRrV( zo9K^^dk>?gfW9OR1mQh5N~T>@CIUu?_X{IO3C!aty~ugRe%$NXF4$zdVEZX4T}}3g z-JIy(<_~Xv{Mu}`Ry_1+xkAk1$%*S|aWoi5lJ?OI?k7?V<+Xp?%}zRa&wN@K{CWU? zz{ZgR_Zid>PO7Pp;047PrUAY#ZbB#??@*Kv8M-P8kMC*>MJOl_0rWh?2qgj{t8iH$ zzvxxMmksBP4w=I@7N3ejC{2FB_@c5~Q3_&Zp$b)2>sKZeBfb~Ag`%3C)`trxis%Wo zP8S^N1^}UXnx0-57dEu$r1tJ)b1#MQX92TbHDaevhW)lfEJsMGej39-{+Wuenl*%#4i1|)Xc zzM&RBMvG;ZPKvpeT0E{!Q`PD!^eI|A)M*1PcBeT|sfK|{JW#b*HIywL>a@9jr&;(? zeW5lw%`(SIoi>NEq(Q8%JDGV;D541jtZlNqTQFT7ALq1gF(-}EKN%jS%ZGlCwd;8e zeZsc4uMrm$S%mD41)LR!*>Q?hMyKa$_tr$`9EwJ0G7V?qS@TGpjFt?KaeR>R?BHYx zyH4q>HjZeU#svBn7Xp@>`D$L>z|{y&6u27Jg42IuQOSz0Ggz&xjBw3hCsb<=eP zp-=O4UHgawr6X?Q*%bN8#F`EZ-W!6-++rF*%BO_MkO%N+TD3@tL zrLK7f9Zo3ITw}^7OaQrMOG9XIt+R()U)pu<)PMku~x-Us-ZVL_UqOgD&bHFy#2c5 z99{1WwMw67p1CdoU8-=a&$`=`?D6@Tyt*RYTVtazox3TS(J1h{`>sjX(h}u3RVNO` zbx9tcPBU>Ko9e?EZa3(5Q}O~^IyQ#4dzp(#z6sHTI0jG#(Q(-DEb|Gsa1dop+6P&d zf$~1mKygJn__SN%0Y`!KMDZuTZWY_;RO1thZT-%8Z8e8WJ{y`%K?{wNRfgp(G$%F# zWRy*#CE`Qo+Or)wN)S z3JR=A;&C-SF41D1i@;V2ag+R$gk*>zXG%X)PuHD*}QoNLcXQ6~H z&_IQQ7KA~c^iC^k=6;ozj(N|Dj$TSnY=bFG10t$E$u-HL`a?1%gZw_dPkP&p#TtC2P&h2iu_dW5aRNP zrGTI%XpC4|2{{#Bq(m@LS9rln{xW#Mr}*{YrPNZu%L(HJy2?ddgsfbSm!lP4M$Q&5 zWx?VOCt0-@#cCQJ6ZR~@MfdF1A5UhZyGJ+(5-Zf)Scr!6qo1s-P%;vC)8fGwWs8Pt zdM`qi7%0S#lHylCDb^e!{n!;ZTapqo7KOBnKT}H0vkGS;aYB$CBchZh*&f^NTc7Go zKt{Yh%$kM|$xPpuzAqp7WfJVZ>5*=OYm$6NJOFSaPVgHyKhd51@%XS<{0{&*`E#Ar zX$hJWcA=EdHKGh9y&GYhDy(ASekWe%^i?wc0#Z{_X$Ti?Z5Wz_#;zl}oKR9T;X_@))SV1U4=XO3cWRe;s8eTrm0`JY%_o}=v0M&X*ySl&qgb{ zH-l1W&5A`OS)}PAmHFR#SWTVZayCsEDBmSXpVUzyknFpQM?WQ!wR#%KvR?dgIJ$IG z(j$D6P`BUG6GqT*xOI@CsK56O`>sKrg3R@)M_PTlul#bKMnJuoFN=G*V(7P6Oj+g9 z;+!HDH}`7AZGP3_oFW$YU~Yf#Lt$vvcR z)nFv8X>Rk^e(k@$@t*L)^)A$l&wa`qO)}(zW7C*>5(<{p=LMF&1l!;03Tt~v@$}4^ z2npfkrujxk{0@?Mo;2cn&*_TDds0`xoMuHk-Xe4Vb-cavy5w(sYf<}DynUAZv#w)P z@=@yjLQMS&-2Yv?e-~@XG5J2K*&jhV2?+bfB7!8JQ}qH;i3LwU270wd&>ul&=*4U& zxZe|NycevnwCX29Kp^fvq$qNd%eypEJ9XOsZZzyg{D5U^^Y(iC4+#JmH>j$3$wHbV zB|8fv@w`kHNjf`|yDsAy3EutQhB#26*Aj$x; zg{S6s$f6R7Xq=58!n&;7eZ!lxD*~x|zchhTNGXUKFpO`RC;`NaNV|#*X-6IaIwm?_ zkdqH9({ygi;|uPbuo!m6_tj$9nYb8sn#C{){iS7&TpDK-rrtOmu__T+RG1W3@mB^g zi<%niqfRz2gk9zJ_oL%m;P2NCVm*%L}&xe zj~IO{Lhl_2LC*6|x;(WZmiEn6u&@S0oasJ1LSKox#|#gE?MH=?`SMA{rvWCEuD+LGsG&?io~;;w;0rKocn4oc9~>0Ok*24_%ER3{hG za(4vjto3w--$H5}vPOkEM#;UEc{c z!!(a6)`)p^x~_8pg;3M~%5hEUt`4Thd`&(zv%Pzv6uOBb+sT#<&T87p%AHQNvI2E3 zAad+jjjW>n0$r4In{xhcXEP&`*10)~E!JO4=n7&rp@a^HUsr0K(mR@8^ezX9)p1$K zsDsg9Q45yk!D7XKPVb&6Sow+7Dmnc6vRT!sejS(mYjGFDLryJ-jEFuZ-BR|H@b zYcPLgo^)nOQK4p_j4cC`Wvt!mQ`vw~8o*!KfGTMT|3F(ub53IG!&xO|DWJl~5^!4D zvlQ?kWj#P4`c?1c=ZZ6(TLdjuJt~6C^%Ir8shRx3s0?4wKFwx2>Bx5}7wijnXPx=X z!Co&V8eA-}Npm{7WnaEdRze)+et~1+wUUyC$?$xwc0!dRRv)F_ihJ1tEvk&-B&5HQ zE5ZkAxg@vasbU5C_CSW|FWesH7L{GZ{T$=I9p1h`+701$mIUk778c~7r5T2s##e*& zqH#?xBA`)XRKmGvH0#YCCfY&B$Yqdx)?9~|`#7=NQXlqGb2hd<{!2AztdIc(fnVxE z!V)5@Cfc^6InvlP?%SVd-4dcOyCm$b_v8huGXu7dYeDMuDH+amVsYHr=J}^7P6@YR z0%N)!bTN|k+HtVO9*0gZ2JM;}SFD517d-ZK)gi!eRQ0@^B4~*j(;yvGu(5WAVg^!R zf_SoHB*{3hSGU^K%zNqZ3M$(w#xw&p3S=;3p0xERBekjB#h?FLw2l_@n9No=MY-4K1sfQQ0s)l?`Cwnfz4)s-z|SLrEq1Rd7~G#S;6)4T0m8&434X z%vLN>D=v_BIPNR5M7-vvyNq1BwM7~~#}6hr&Gt-*(_Qu(nUS?VoDo$Yv7Q5D>+6$1 ziU@u3S~5{;=Ld}&F=?{?vOzkN)?qp|66?S#JrPSNuZ5sNlDRm2QZI8{G>|sgnt|A= zT5B2<@AUZ-(J8hOgv+|bhp^Ww1HCX4VJ?#ul}|ySkx(zmoXTe2mR1dv13KUqmnZ7(<80&DPoM7=CdPdD+^qC+y zDU>Vljoud&(OU75UsYw+RKU+|ow23r2RG60o z*kklbJ@g5|*YR%L?HzW`9s0)bN-GV0Lp{PRYGCY}*arHBR_i5@bAbw(UmPTgCk3vE z+xd8{3EqJ$IG>i;?$N_;TaoDa$cPAoCJJ;L5Z>u#=*@jhzwxDjs@37{Y5j!I7?cg7 z>s{J=tNcXO-OxN8o>bjUseFDXb4u~|p>A=N_(~9PGCbs zc5njJC+h9*)r`9-nPM_v(BG;{>(6e;F5sw;RC;<03R3*N&cuG7%r7=re!;A5YZ5)sQmhB}}fQ4xM|L@x@$Gb1<| z(=PoSHCUxHmzfF}K7%_I<(FHMsEc{b#jw(;MP4bM2T+();W1Jo{MQ0Qj-NKP^JodF}G-1d-oQ)`}xewn(xa z@K|uPmZQ^Ey$m~A=U3pzNZ;Zzw-D4$Oe=6&9+6kvjD-mP(RiH~(Q;qR8#GRerc)UI z3N9LfTM%%fNWY$sfXxHg5j@Kb*t`LAAsUY-D3E2+w2X$O`?zre;&%eY{bu}R8bdnj zOlW59#2Gks|-2bbqi0Or-fZELe=2+n<9;aa;J|=P?|?>B2T0dIt0Z zl?9&@ur+r~${P&+%Q~i69%>^}-9AX%_0z}06OilM&xI#VZGQfFKZi~H>^RX| z;_-kx#ie9&P)9H@MLxll6gx_%qEkat-;q&6N6{uV<2D7HR|5|?=6{*P)GDe2pL~4W zs|Gqkcm9!X-e2!B>0Mt>J%4+FRbgkGB1F9mmE@mo^ z^=q9eW@c9BlQDnNhMNsgO9*d5tPCHL!Z^++JQOx184%pYED|B`?ChdT+|b1`q!r9X za6Z(`0~2xB;unan9K-g)dJcFP3)l9CL=wOw9VgIV5<8k>ID3x;2+ZIQpzvnR09lyn zpy1E|(F&gXgGcd z*GZi!Mpgk)HhBQ)irEN7Xop4ZeiMZty&_%6y6bLA`1hS*O+qVen1s~Sr}zDE_u?PY z$8Y`)$mZgM!WG8W-g~vY1|=3XEg|ws_xx%B5W5?=av_-tSl2IL-CzMQ5-}4BP%tsw zhXOFi?yD7_He!Qg{mU?75Dyd9a47kv_)C0C7fct&e`yWC_ihy1;P@E_DqPUmpmoPZ z>i~Lr_FPItV6)8m6guEt=;nFd(;RW<%Z1go;oA{n9|eYWd3H4ATAZQ8I2lp{%$Q{=PV!V246wQ|!oZ`jiJ4b> z?ITJ^6~MN6UAK!gRz^ND+eqbAT)KHrnlK+{hH@m~1^-%Yl8W9CcE{IP<;>r%^+NG)oWI4jQ@vi_ zt=|fL)bq((BX!h^zlhYqA)V%K$^uL3%Wc-_Hg@PMpDCh95t!`l0oj$4C4Ge;##gvK zwQG~BsYN;oXU;>|9aiQdha+Y14boda+Ma>i zxN|ANf_c~D3*-%rHp#*r1Zk096qmf%XX6`!66vi-g<*$ggP5dI$6X~QVdgMFtUTzL zHAoxBoFAA=BqzCGx>v{MNYxdzt41BNdv9gS3! z0(HK;M5V7$p0e8(5kEvhmip^-2Bf3T<*$^c?1{w>o9DmWvXr2Rq7=6d4!2a23RsFG z7V_}IQHcK+Il~aQrT@d=rvL5u=i_(iPe-sJKuyVQu@Z~Zaf{Lr@*=;s!e$ajWcb`jOk=j@E!vJ#^gjvV9jx z&Quh}gI*q(X!jI}&$FxB>(2A|IT**!oV6x(G{TaYC;$&yJ0QI|lCn92aV0f|N*FMu zy@PRq1SX-3W5%CI8MTF807&{?VI3+JNKuApk~><$ zg>LET&&AuQ0tp3Sc*}$P0{VHNizyWW7{#IN2(l>Hb46V-M2luiVP6qY zA~CD|n)QLh6DP8YB^vw@=V1|$<^<>%hTu7&K6J^kRAv%Y#Z+!GtLZ^g`GO%pXc`IX zgx=31qE-VP8KBf5D$R9thV=_|Y?nZBV#|s}A5QjaG>w`F57%S>`^W*seRp^ML z0Z15*Geuu#m3kdIQ_z5wQA49%TS>bGw78}@F1mou2KyOm#ORiI9){IS|*(B z16pGdlKd(c&h{}?MB$8xpR{dH6qfeJHuf~mK?DM*NVk-g_LLm4Cnlhw3%w^$o{J!T z8A$KTfHSKLl|VZmc!nxI!mV_2ZjW*s1=@wzBG4|VF_l0IA@>E^1&Z|a`enx%OZ(ME z8QOwGSv^K+inquvVTnS`JyfYYvp@-_GOvaF_y#pHs3b$Hhs7G6@%zK!Jt_8+M>3MW ziJM-Y^(r-K4(x?Pe#F)pg;JBUIi;q=Juc~Bcuz@tDM_=1zU`F(D2l>@W7Z@iU-bYL zVzP9Svodr#`v_}}-a4ViYlOjYw77?vlo2m!m1ML%aA^dkI>Hzi7XJ7?3jg;!SI!~I z%!HRC`vPy6Y`HW$#G&gnD6OG&LzFXlpcOS30sye$Cu)bA*(gzI=q=eGR0|7aa1Gq8 zqftWg?+(YOWmZNhd0+?2lD@WIiXep(8Dyro56m%+2nH&xt@y!bY$auHla5yrhYKI1 zfBXq^6w7g0I0=F$g_j74gd@}mtkssbksIVbBCB;r6I(*l&^K(o?$#@dE#ihP>lJG^uz_UbL$1%(@&ufjA! zCUv|jwr`>Cs9D}^dZ$sGa%A+?tVQUH#2XFb^;|^M*yn=7Vir@v6XlDQmEZEvV&c!J zX_zjwc(aKV*oQZA!Ctw6%h)Y~@>%x9+`7XX-So)X4wA_X(=2z0kGXy>o?%Z5_Qk1Rim0GIEG67GGr-(n#vE{f1!2 zMa_IzMbby^Fr2~G%M!{;Fc!#3hzr?Xu2CDDq{e^~|JblyUok}x%Tr@l?Xdf-wV_*S zwh82_;&%)WUd1~E@Zia=b;4EC8YTjLnO9#km&p2|66KXrzZ?o!o7Xob8<_-nn!u#U zWqk)-O;M7O*uB^;B5-}{xm@%PJf3V~M6wXg(k+@_CBuWFq&O*%suPzFOi&{g*BPQT zWCw+Y`nxQ?jZ(FxVFvmwlMPT{?2Sz0Q3)FDWN;hr={JU*fgT}?-Uws(AZ+kwt*!Ae z6(82>VJ#0b;LGo6LQ6=Y)yi(fh#CVPG!ir%Chow=forf>@DP~IdMR*$nxQ1EU2VE$ zas+*qZjD`I)LUKkYDK;H#3zDTS z4RGbr6=?vfZ-rP)h~|7|8tUkkMK~7L^3kveKCo6z`lMtTIQd$$a$h8xOG1ocRZMm2 zOGCiTm$_~Ol|cpwM1TQ`WXb_A)Guh6(n=3zI>(XL^~vTgZ^)K~i#NfUCJSX`p$r%_ zNhzT(mV{T5s4)nECLsm3NV=qxfZa6Y^rbT5i)cyf?(yvFJC_l(E+|A3Bo!# zj>2(HsB7YEwSMtJ29Wnc9Ac|qij&ThKjVQQdb_e#zrKd#W29+5~=F8 z1{I4j2?yBnhTryYP`bd;Hkf?|?eg@Y`aAg3`^(ck-0z9^FJ$cI$x?<0Ti+SM#gW)F z_XIR_8;gx&#lQaO%jVL=g;uGc^m<|#!xa-l4Myh`&vFK!;BTDx!fif7R5 zSn-mJnJtUC%Iv*X{L$kPoh&8T=HkjX(i}!9B&TgT#Rs1d2tDVOyH(d9TxEHn`2Htc zf+s-n6$;ptAjz;J$aS;RC@uCqf%J5$S^R)YIzpT`o%K6 zcKJB{?PdCRvIrN;=WxQb_*tc2DARMqP)Pr-GW{JsGSTI8bX;0IrS$VF+Gl ze!)-J`6ZRMy^TN&aPy6IG7qNO?xAkt;hB(&CtMoEnKaPI0Qd!P;AawV#xW zO8G}h$*K1NtP>*5*ezIZi7Fu>eAj!)1;`A%_-8${zWzWI3pWTn{Mg z4}OfSb0d)!=E@w{+2S~R1krte%&|{7_9@3~nPaxh@ncnvN6E1_=GdbgA61TCnWI0tK= zq%#+?V6Um_eUdD=^Bdz#$Z7Fkly#QXaC6RC=b-S7$%nlPZ*g%C@_dE>(yJGH4tnY< zlgTIuYO> zhqB_Y{r*sRpFYsX5mg;!yB6}oMK>jQvUpp~`d#mQx`*S+G4C$m7cT1!cul9{OV;M|l^iOw9Imn)CCi+$d{S93U570D%PdH6fwW$zn(`1?ddl)SWjQ63s3~U< z^vspyU+UpMTh%g0mPHa4ANqMUq0Dlk%p$K(vS>qH+4|3r<){+UMMsqN=ahB67EvrG zQ0Mq;mE-rxLHsZ0AX;5o{GoCjDsvnv!CI)mS|rDuQvRh<;&~MtUxF1ps7$jbQ8ExR zd$r<&Pnyg_X)F_DU3*8$gl&pIhnFoGqm6>>{iIVX$R4}5Xy9`dxc`~&_XcS10fhhS zNkG^ZTgP4>TIY(NC)w8G-@BM#MDyzxc)huJ(XVaFF#*gn?OjzIcuEjrP;n8(X~ls? z;?0ZS^amt+Q`%|m%R;ZONdrQP#WagZPAI6DzFmCI=?Ux+VL64@6J?>QB*mZU8y{+w zkb62TjFgU{k7?kkJUnNt7s>u5)#i{lZzrvfNDXQKTk4ehb)1=8S2&QbuqJy6-Ha83T2 zE0rXVj)eEK@yg`jbUm)cW7u@C->2TBs<2n>k4q;a0I!OoEyc0^?UDZN=d>}oIGTif zgsfF5@rek)?VqCSf&+Q6x765LKU`yLL%JE22i?(I)a9GjiH-K^+gvgJnsFYb_{s0^%ITr1aT5jylkKFLK0$y6cp4koN=DPKV;#V(c< zScrJv`rBGne5s` z7sMeF!(Tu^lUCQ|lup1{(4~o9z++ESd$h4(1nUfINEqh>E-)p6+@zJXo?KTu&yG9- z-j>{uw|IZYAs@lS)#-bMG_51~vZtp0ygGd#Twn#Ezi^g<1?bB|q>#;euTn~Hs4 z{%g#Htrr{8nJ|RzwP!4*Au8Zc&89uxGD4eWad3l*_sjesq}F!AT++=d>TW^Kb(>OZ zZAs8Lz1}_`*YpuBBJuE0EvT!kD?`p~P@OJ5e_++L4JB-93Lo#5TVKwOq;62@oiNwZ z^Iahq>i~5B-Qj_zN(l~araIwC)>!2AV!OxotCic;&GeqWC339TQbFOXE&p9j}b%> zFYt>b(v|G#5Ll67un8rOYr7|HrR0Q#)YWooFUEHjy)(5P>|tgRW4jaj{m8Do`JVU0 z90bD}xw4jMqbS3Ji+Uamv0A|phqT9pM@PAhjgSSYDvWj6)r<)s32jpaok_tA_(F>| zpA)tWod~^bY{OoiQ{|d1dn;k|s+^OeA;G_kMX+WVw z33E)?m-!?LxwwOMt>spLA6{%_uRcCK+G|SB!8N;UD0n^Lkw9=GUnM4^H~EfmJSeHc z24_m?BYPIc33;ib#-~9vSkZ1g^{%$?g$13A!N*Y0GNtw(!hVbNj!q+Rb;y~cjWqsg z?Im|;{TnV%72PRMtd#5Fae)%3k}m5CRNKzEez?Z&rg58&h3t~xz-8e7t8zxYD1+E? z>>a3Sc)6TN^#mj9HVt)K%Prh~nE1-tu|}$8pL+74Y0{6q^YEQ})hbppiPRp)bWX zhk)k2fR;B}0J<=!l6N5D;?!r?aL5tIOmX`M+%mNjPr#Mn2Z!8xWo=$e<9aUeIFWF1 z>ff%Jc00=yWs^NgZ=GngwCJW@5suvYiL&)~BJ8`F1ops2Um<}$I$I=Ey|x?)uc_x= zt@XtpeE-ru1?bSFpkxRS0jWk;LPYC7&muQ0;9)U9lMD0wyMvhT4!qbS{9-=P z?>TP75@r0bo-bX-l_pvJYESz5bhC#6BkcS;z_SJkviE~$gl!nrdE1M>N@j}2{RH9A z=S|6Y(cEE~wUU4(K?j++{Ym!WFu6%G$FT}7hy;viZqk#m9Fo$-d8u4Bi{4^Ffv$Qj z;I;2Z9D*mn6p#}rfT9_aqhjU7p|{-^eP^YDC_F5a14>X{+mx_zxS?~>xMhlF;R-Q# zQ^Lq8Z*`PWd!oo|dZffD6&IPnIc82%{)P3g09oDRvI%)`5 zO!Wa6g3=q5ksMJt>|)_FtX1A^(G5hYw^OWimQ2U~V8D1OyN~1};bw$}G9a};sIE_o z_O5&cjbN=Xr)~}C+ACdx$Gdf5lh-G~`ki9DCDxJEw^6``^u58xp4tz zd?tB-fGs@b$nspK9ze%oRd3w`TY9}0URwR_$c>+TOzVC`M}?LfyzccD##}t=n9!ry zuAzJK=~lH-4KrnN!3@AU@CSs_f6)cn`yf{IK{y?b5%DbZJWr-udU~%uFyn`;YFr=u zelbq^K%P9+0d|hS>NcsKo6ViEBIzUy4uuV6F@9$H?P>i1QfXG`A_&QcfEZj`UV7=j zab)V!Hs<5sAf*?L@J2pr+!l_Iw7L4aAo76~RDW^sT=iv5Q6VIZjfvVz`ZgM`4VP zdhyFTRxwA}lO8N8xrb55C`z$K)MSs)o-|%>lb^!^ldzz)EsD==?iWM3{aAm zzLCf1D*46hek-F|r7+crJvac-O0`N1x%G8bjQ0@rYB-B#7{7Gdl&j~4gL~hY>Q!s* zz4p4h_>HXgnzFH9_eR#r1}>|Ca>=2^o9RG?hK`d7v1#lz2??w3rT)|R@q{}CE*hdZ zc+0ZBN2oH;`Zc82JW@N)d-~2rQEYX&2!YHK*=8n)WG=WSeAmi^Y}c(xG%^T}ls)sbk7l zRrO7E(z3Tx>ab;R*Q)ad-rgzn`sg0@8%0KnrY`tpnXvH;9k#iPfhA?Oy=&)AL?)7Mz`E5BJ0#aDg@MLyCz|C9 zOqKsJ)lRjp;$vOxRBL3?Q#|#uP4>UVr~rX6C<+<^rOW(B9Q5cnSTGNrSJV`N#WR80 zf)x{pQee3*Igc{J6z^t+PtAc(l2Qjgwd1FBv!SRs?FLWJO&U*-akUMSV-zsU25SaZ z4iq7aIwb&g=!)v0>g$rXaADwI!UaxX`;oAq^T;pdUBLHSeJ7G%ujFNdZk3=@CCIt+ zNd=1SCRbuCZxpg4k9ZA#fUabIP>l84ay zU!z8lf8zS&s^R>*u1@~D@GV#Vs|WMT_7U>GL;0!gy;mpKhSb+woqT{@5H0${sqsU5EqOZO#K(-+o)Hfxa>yo#JcO;l{GuuDO%+mfCRM|ct{+Fg;v^^J` zQrkZjuaAW*(uttCSwHtqODy7s1tawWec*5!H7E<#9R1pYCKA{Atb)*vczzDM8Tu#Y zV4*@0voy5c<$xfsE^1YVRx?vFy|Fq3d%>?&2(&O6)f&#rQLH?8yLd07G@Q)y)JN8^ z9gNk}7>g`z{mq^Ab9axvzxKYG4mOyTZowK3=*UBB*bkI$?*G@9DVmq6%Os|_6Ywsn z<=%HX$F-Q#&Vd|60KhGM$4v-LpLOtAS9{c^3&EE5_tv6IA7EL4b^Dr?$&i6+c*`P} z9Rrn**+t|*gVnrD4M#y!Hu1|)gJuRpgt6Gyz46+s(WBm%Pvx$G^Q^vuKmstqKYrA@ zg{aVZ7StN(@U4IA5 z8aKe0TFw?~Stb=QAods_`y)cn)D1~Ojm^D+MX&K4&@r?IDlM8aXN4kto>kS+`P9cW z9k?kLiG%~->9KzQU0RUqcOA_?qnXTxc3F>wk8)tpoz0*IB>{rVg@x>?2aFB$K2QZ@ zf~%W8CAcv1W4D^!9W3}T*{V9 z#WI(b%!QY(0^39I7%AttU{ZnhkInh8YQ{k_FY zkCvM)vHAF$+50J?3dT2ARqBRGV~Z7RIg!J&R6rXw!E`ZX@3AVNjVNEb zJ5!t4wNr~qJqaGDDsY#;{9kZHIFdkjaW*iYHV>9TA3_>LNH0cMIA*UC@_|rCw2+%h z5uksbddOkFE#fb&hL+$iS=z zlqjZ}j@z1!U)Ud}<1*)7rDQsujX8Vqx?k^^ga)SLJ=Ju)r#~I1yNVZ>j?o_=h=*uM zIUSG3GRNPMQI@CU(N~|2_r~d%nwL$-dl-8jH^8{kbi4Mux=mf|nSBn4r0F31L7GLTF$wqEkZxMqV#b6vyG^rd|da!&8+(u?`{Fj_QlB8m@re4hg9<>+bYqzA|wWbWULCvmK3itm>c$ZAvDvf^eB+;g?H`_Hh}9KXPdjot?`V z{<&Nl_#JW?#qE$wU9m*4bmLzKXF1H|fij^VwZM~5N`=13n8I+2&{}T=gi<-n3Q6C? zH#>AGeXyp5D%Rl9r^3&1$!!-aPz*>}?Pyso`}lY5eA%*AaR`#insoAsvMeKGtSoE1 zEUWd3W#KdE9E1{}#Idq0qjIt=YgJj+>V8>67Q+>d56?0&p=-JQ;XtlM)_c4F z_e($Vr7}Zq$%0AEi%VC@nn8U7MmtWt3f5K$*@39f054!^7k-?tQBF&G%EE-rMH4m` zP1szj345`euotOG&Bvxw^5_%1ux)Rp33~;$ECWkG^itX8OKJ#>V8#g>AeT(oOw__j zFiKSux3s%T`j&3dM^gQtFoMs|xoG<4;;1T1r*C1Snz6vvSupDU^!>)8hUvSHnsWMn z&8UG?G?{bJWX?sCIhWzd{OnQlkBDlJ?_PCkuMp!=eHIkcpW5FbiW!{RhgTJrsjSDn z=ZAo>Vys^8W4f$Go+I1uz+8HH(hLTpJiR=DbIviS=x9P9_&Dn zF!9OegI88DSJVCh&5e4Q?d&3CR4+Am;+nv;qWL>3OVYvvc{H!e?=xi12<@+XO?(Ie zFuG{TkG7beY=Fbo2F5rG{VObSMDbiaES7W{A~6;hcPwT+!&5suVh`9>=5 zSD8JZ*)3S~F)L{@)XoGr8GhLak(!ZT)wUla%6$oK`_dJ+s`9vy2?@)6$M6l9HHTIi zw@7!cRa5*POyr*8)6JCQd0j?S&fzPFTT9b);W1_C$lbvTD9X5*IP!F`w?X^eF@zgU z^q#}gFoz{DYF^eVMMEm6`4L0jD!S?WmG#dzoE<@W<7(ZT;DNz%sG;GM0$}WW0hhURoxqX-bwG$l|MUqWaQM#w*O& z%P8YjP*KsvS8|Z7L>GbaBgJDVl?4)7i2Jv*mGTJ!K9G1~IPo>b z?>ez#KzQMNBZ&wCx`B%}#d4WcM2P?DWR3_yfA{F8!3Fdu`#q{jX>Ry&puhF?`QfjN z!;i;@A4OSEgpY91;=97%+Sb0cTe_C%Xlp6@I0|&uL*j0j3>6QuM3S z4Dc_@TDNmB6Aova@oJX8nG6j7;qQOtuiqDiF-5Ro=9W+oEbad@>mUqmO0FqLyUx6T z&Ld;mn!Thxfj?|?U^`Sguu))_FsgGf4wZq28dn)zSo`w$DdxPt2;E^|*8r$LKtz6b z5YekCpPjvSB9JTHfm9M2aBT?Z3+?vFH=J~tW}Cx@^*C+HH4g{hwFEMBNDwGk`w5yn zWt+ik23{%SkT$@x1}BGiT=jsLV7Txvy_0(oP1iyltGDu>X2DK>Y-~nJ2*?k+wWBSo z;hqp^a(vUqPWFZRh%>QoV85z(<`I#+sW>2pW(qM1mu~A+s!q4Ft-A^Fhr$O=0tFso z+VD$2{PJuJ)^hs(5UgQ_2>i1;Wx&o~A>d~4Lqzx#(FChm06|WAf}wQ!=+QZY5~W3S>!?tm)p9#1rUE%HM{woAVJA)XEgi&86)A_c_sAtQ=C4i%0#>mM`Xn#T zxKGL;GO%_nR#P)fd{o7ouC%2_J0sYata$g@o-8zC0KUy8OKg+$K8fgbLN04-Ch8eb z)NkW#Xn`7g`b;hKw3g|MQ&_!o23Oq!jIBB}?R4KLuFn|7fipVMl9Sk9uJ zS!G{V&dGi``nHN=4shsrV23)^d`D3Z>|g5p6Ct@4p~US64jV?7!0L@BmL9$t^(q= zAn%BZ=!yX+Rre{coX8t10;#a?$<_rRU>Sn@?zp-aC!s-7_ zlrm3@*S+!Di&u68>hpc!fZ%Cy9 zu_0Zw-^>cBhD|i_5d*(F!gdPFR#Ig zs&r|-L1d?7Hvno(z$Lxe>G+|Ia_LbnerU_U6EF`v0h^zs6>Qy7!wN=ag7bD6@4TE1 zEN`c1REzgK6_)QO;s5eQ4x{ddn3CO0zy-T4y`nbgI5RS6;Mrb0m61dorgr z@`%1c^%IP1I-it3bO1-I0DQYWpOkyFASmsYeGY-RXCGg=>D|m|@ercha%?L$vjooJ z=?Kn|LG<3}VrFhzA)KSKx4=1kjG0)scn9+~aNVN`#G#OBDiK)18GC%VOOt!>5S|pw z;4?Te388rU!w3Za$WuAMYpI*D`xU{W!H8JIkM|DEo?&K_95{$V8&(l{@Cyc2qja|{ ztpvyc1<;lFBD=vSJne}uI+#pWvBf88x3MM7Q@ERxqvKK>*}Gggf|J1nD;(KTL>%oa zL1_jf;wV~Smf6W?56q0)k=ZBMz$CR()*PqLB(o)6i8pwsj5uM~DT~-x z`XoZ0eJ0u0_HVWpg#HD~67P>H+s&O(xF7t`a9HcVJ-Wto25}7o0aMA%n)kxYj?y~d z8h?A9Xl@C)S5W$Ikkcys!wIe#Q2B4@63ymj={#0yN8@Iy?y7(?X}qh+Mb@abAyx|r zUaao`Q%C$ch3T+)3pOC_ZBW-;F2CccVSoEJ%w%=YcY&bJlN_sy?|;<#uCQ=T*N&HX z&=<8<$5ebzrK&5zT|-X~3_aa9^t7+9<16Fd;m0S3ALoW2=Z7B`h94J)A5RTG_T+L4 zZsINg6uZI4xxvSRh^SKKTc1sd8h~!kmcML$q8<~niMtpH1+~q=uR#3OsJ@v*i+CY+5O2HL*LHtcNCuuW98%WiQuv50Q3JQH!mC&o-Nuh^OYMlRR^{mbVNwm>!bQ3sOyHALtPRng8~cd6&ye{`|t?`aa^CYe*a(8-@3d0 z{_K5qZPDv-P*qKMrlKxKCSBF(Fbcus8GsimiNlF@SD!BClO<}MrlC=V|Izp#S$0wytq<{C;KJp`%sB0i9n%%7&f8^Mj3Pj;{r%6ep8!jATD%2 zg}md<5^Dpg0QERgI;DHi=M2WawE>(RFYO0MW4ZH!bbcjBIjE^@yS^`j^oR{k8%k>t zkx>okApkXqhx#Cvr)dBV;5`F)$c##aQAegRbai0mG*rca<#Bs45f9Bm`rzogSQD@Z z+_221-s~~*u$xk<_x&Zs3*OuBZ+q-k4r>;Y5Oi-XQkqak*yy1c#jWUk?(eJQ%uwzB z0~UqFbaitih2IHHbjQKi%DJ+YbNyD<%L-@~-}yc8@*Q!Y?1=rb#97ra3!)zspo3-Y z>vx2{Cxs3ch(!1x=-D^i5qo2Sy%NM;AH?B~*fZD>B!AV8*wgQb^O?;$Zwg2`!-VN^ z#8pUoE{^-tuIDlE0QEQZ7?+)MHe3y293JWOg!ecM8BXrnQrK=}5JS z*u#~6r}Ku*ZKsU)(=U(r)55#*aZZZrN6eBN!*I(Z;+!gXUDeOID?|g!wte#gPV6 zV>Y8XHr&@|@8pzqV+}SgHsU9(2%3R= zb?|_7RhHCJt?kCLDFsMJ;xmx)9KK~UE#41) ztN4@BH^mgOhSm|yaJutmx?pN1?@o8#!lyQ$prZ=6A{|W6Q{oyN2#M<`$hNN2&Zl;A zRF?V)=M>wAiFnA7Z$iu+NKuRpw3_&Z_?Ins-A+~l&gHb;H-94uGR%EDZ4%50X_>#7 zI?Ck17baix&K1kSzopepHF2*}3+%odH3QUMvz!1hQYNslKaBhp^6683HyFH#rGNj1auuRxd|n+BvrcMZCq4f^8m;6xN*(wt)ip z&Bu7=xIoWOon{c?o5U`Zfih37NSik$918HA7;m(O#1zKpxa40#WqF2wR3YQJUJJqH zAZH}BEhOm^GvQV*NpW*`ejc*?^yL|X!W^m$>}!sKMtD66S|;;zh(XZ4uY2iMuUAod z=L)zWrjR+@T~DP&4!zg5^OL`8T^G-!+lf*2{`?Aq_-KCVC-!xH|Ifd}?~-I2@o4ia zevwvfNm`u^)R<8+9g-FF7{@zq+1hy}&kv@l4BFe?^BAQ{=B`YJL$zTx51p`&+1?aetvm z#-yQLjU6O9r9?dcrJhNfIt3s8GJg1c{J`F(>ypn4dw_|o@NE<~dcQJ-(kOShI90@! zC?y##E`0D?l@}q-cH|e~5>BbO+l>)%cqh5kgyNKJYGp57mS37*mT$OAmv7zC9b4DA z6pRrid7U)6a`}pY z1U{q*V!u?i$lA|vtMIG`C#!Q9f`W)*LFBn>aGvtsr_i}qAf}1 zQlQaz(v(jZsfAiO3}ek}PBhfx4;$Pl)XXut?2YsCQ_eF{nm?D!Q1QAMhA1mkddVW} zXfdWGD^lkT#jGqYa^y<5s;*e{TnHg=!;2#G>!%)oI@AeW;w-`zjN6~A<(D&p zF3T_f)^#u^U}YVzTzG0W4jty7t~@3$rejBMo969 z(`Fdx<~7V{sQ%)jOTd49{by_1(*6U3@{)BkO;!m+9>7+mFQ_j>ZBkDSRG36vR{X9H zrybGX1J$~$<}dVnHGiD^^oOU>Fm-cIkdg6RoVpiRp1Mz#Q}-h6RWAq64)^6rbr%LI zbS-YWZR?k?1}SRYsi4$B0qAjeT3JR+AJlZ*-X)rj8z@cZb&ijy=`2NX?~58B)^rAo z1hHW*nyp7oXQ=P!3Mvem&g*3~)^vs#P2?v*(+SM(|L1Zq!?{;roL?R;r(rj%qoOwl z`#!4_(_ITg1fR3F)7t0>iGHPX$zh8l8kfvn>pPY!^#*D}(m5trTaB6v2`r z))3>|aV)qGQmf@x{&kUVpmtHsvuu0UUTR+ZF^)&hFuSC_Ow;UYv7ql6-aP@|hbh`3mM2vz6M{^4r_w z<+wjB<_+?!K!!uCjp`kT5rZ?u$Lnyho$ny3t}KajS$>Y>8Mu@s)6Lg zI%1BFP)S~CN!p*%m!Bbcb>~w4EQ{>JzT!S``q`i;TxQI}+U%Kg*-!)X%eKlZAuFUu zad=f{Kb~Lt z_*~~oX0w2CyZ)dqcO>QtvSp(#o$izOKwS<*r!GrswIk<1`8!N4zFUXOnu2F`|o#R-%PhZ!4u; zx^<`=jk9c}o)ZLD4OAE#u%r_=Y^)xKLMyC{Vz4F@Z6jc3T4P%@J zb&8#Afi_%n2i1;*Zhv_q34UakMZYgk90_D5IVqN<>pqE-!fO~*%gx;C5*xZ^doF^s7_TP+XeUs$mVowaL!ix9pdI<5v8J*F+7asq#?V3p z=V-jn2e9V*V0G6r&We9G0F*E*4l5z?P@mJfyu*5r(U7fky)*>qJfMlii4P!@SE(o^ zeKMvF~h3{ZsDGj%vXjt9q>3hKoap)Cb{6Zp%~a+pg5QX?=~Ai(Jp8}SoRauv7gVZmH8!v z)*oSgG=}_Sh5G<-Xky91;-zwNyHq}H0)y9_^%_Ecf;tR_cgO_ImrG;xN>DOhG&pkY ze!@emOnIl6y{Romo zoTgt>-nTjL#(XqP@vkGVB!kzIP5f6@;v^Bw!K;MZw*h{9yHSl7&QNw1!D;?B#Df#M zLAP1Zbt5mZIpR>D!&bRsITK1zJDjY1l4B<Oy(ct+ z!GfZ`6h>5C3Uv}uezh~`0M1PJ3KkqwJLlb;#DASlfw1KkVfto?gO$Y`nNkDqJPAdb zTCvE3ytt?w+=cv!GEX~e^lscAQpcPMHH+XAtz?>{GT(-lI;!7I_7y`%!X!^SL>fI&< zv+S5#o?Q(Wi=yph(bGC6g%il8mv$!soPw;-kaKVLwY6S7a7S_Sd{TS$HE`&4m^S-E^ZTBMeYBhrPga~t*OXF-d5>P;^o5kuK{M7I7!uM~}n(NS4aW+@-;HDF*eyGbzy#qN9StUiUYZH)_@zHK}-?Xf$I!- zoJ4lxi!cEj3kP16%W%=H^absC5jvZ8-yzV0gRIoxnL`L2aBaZ`XFj(eS>%gLI zFmmSqz{u%;v+n45E{-8y6T7>lig|6fS;lCVbb1)rgPs1>&uBCXCKv^dzq1_<(_kgD z1tXuxFOcemz$MkITEVH&QsF5CrJ-C*ewmNKPFuwpHV3a<-E)A>b~r<-wM z6xWo9M~S65KIT0TDd*okzFLJW_DOG^v6i=&*H-A$;H@l@9v zq(N{&hew0HJwBz-%R&TIfi^4jBZoViUM|nTBEVoCv2j+Uw&`-X`!)FpcIGFp)jmp= z*Q6MuxM9ED#JhWo5B#WFw8+*$Y>N5R)v3sFO4*cWs~()^<|@za#b=$zaUHCO=X}Es z8nRra2WMGdW!X@CWS^?>9_*Sr^IjeK*d{>|yXjMgXKnExoe=a2951GG8A{VEen=a- zgAEjmesKMYdnb;i-2@6v;^RDzUOI@+Cx<_uSn~OW;m@a*eBMW81BLG$eq0=WJT?4? z(qy{*j`;)cx(Xs$6t8{Z6zWg8-P41C?U@CdD&g)ufjqG`4%$yJSXE;nPpqoSHds~6)+oN$5H<(0*@tGJ zVWg0LRn+?sHi}R0cD}KJd^BS7V9S(b1lMHtPW5v(V};`b8DoVNoP!ls&5ISb2J*!U zt9-*1RxSJa0yzk=F@QSzy>xDu9X-!u7ko4p_EYfTEYh8`&c{qv$ znnkE-)j*C|6J#7nj}$2SRZSwSs;1RdK1Q`_3S?(E`ZdW31z`hD6@*q9`??rw!qam0 z#GCnaM*JxrX{;^8c<$l#Q@g&FAUv=%@4a>Axd&lu;=Ob6x}U4u5cu8Cn$E*;cWnxU zi?az2(_!(Ses~R*=WA&R%Yjlv4!5TOxS~YEgsyp zl}1|=n-pTKg2^aU*8QYKroGKz)D{e2!8^#SO zSmp8zGkSSy@Y#TYAGKP*-Q{WX9c~0rG9A5}ZWnt`60z*FdnxMeC(=vrBeo>=i}4 zIfS3A#TzXVbwZD7U&mF!Y518M*{B`9x`coEBx$KZaN?IsDN_~J|Ckuge~@x z@Dm?6=maS;K5(E1lBFLwa8`u8@zzPCGO1}Gvf1>mQoB>_#~V2={Qx&kiMwwF8wtUn-VAOK{CLgbENoZF$MdOg+Q}ji%yoO0 z6{Fh;b$|YyJK1J2p0Aq8-^8K}S=>olxE4|JlStYd3uCd(TFoWk8NSQ%HPm&YW&Z7dHbT_+`<(t8Rx_ zcE5|GHQ&=scWQizHS z2*p+IvjV-J^_4(>^JHi&ikq&4wYyF z7^@9o16aOw5`M1zUvD8#rh|2S$iiE0O4y9{Xr8mv%lGW`(lueHmsXkI@{5Ae1eRzm zXu5MQ+h?@*t3waf*}TzZh`^&A@oU{JkQTjMn(o<{iBti_|A&XxOm9qB+GcREe+dFv z^-WyH0rNkWpIDsLr%}ck7n*gfPiweI#?7>&GdaHFflMjbY($5G$P824kihX!O=#h! zTjdCpjL&_f+jXloK&c0rCALW7e2UlOHct~c8W=`<|k|t`%zVeC5m4xHDMo84hvPc zGM3>uIZH~kbXQl)6DUkhskMqG58J!vQ_<3^uuo_Dn8B=G&A z9YsrOkes)9d#phvY8Q)Zc8%WSbWVSdQ>dj`?r~E6>VPGCoaht^S-!_9fK?j=3)#@H zCS1DT&U}VW{mqanPazl@JTUKc^HJG%Q_T@*wv0RS!3eeCuq{6nR*>xRZ}Ttf?UA@) zSr>}TFNEqD?8-?7hH;0%h6pQ3fa^gY92llWp$y*&m=y#;bU-H)@8f1pptBGq4h`bM zH`43)=E~MQEVgUf16B@npYEQgDT`n%@8nf}p$uq8x9sb@#e3^L+l6_&U8uB1`31y! z?tCMG|iRtbTA0 zc0cq@VJI&(X%@dZR-2G!k(aXH8T#E4^b57%2LUMF1w!*mO15^{O!wFss5S1#23lZ|GT<6$r_J zPoi`dpz~%cVOFUm^J#=~0e@14z#n>9C>RN${ZHeqTLWsQ=zRdD79Q5-HLVRe#|m^! zT9Y+4-z8M-%^<*r7=cQH4(>xz!UD8O4Lv#Pi_+^jC%ylba=C1S?t z(1?z`UG#f`Igo{gT4yZuM%$i2HBc3_agfp#7Xu^Q;yQFv$vt#Q(_%g~4nzhaNj~u& zCaC89{~vqr0$x>d^$+iJPR_~YB;*7VZV@<%AOS(H0;1JSZV%L=q$y2qppX z22rD8rEh~K+*NFe0$!ks7V9llthUnk1x1Uk_Kg}8yp{Ha7OcYe`>omgoP7?7sr}yX zdA{fS{()rAo>{YI&6+i9*37J#%?ruZ)~A!W`i9}i_Ev#cUr0J*dM~%2d7&26D~Lw} zVnzdE<*cby8M)Wk6m~hU2_nezRHxXsnA{;NThf=xQ4HcH4N{>$St7EEIH+jYu9z!m z$;XPE2qWiMB8uQkh<*)|Lx=|!Mk;|>Tsm=@kb-DVX{D2Bc2i7(vqB+?6C#--3K;vX zlYR1du+xjvox+!rWwwd56Ebh3;m01rc^le5tA5GJJ|c#q^bybozyNJ{;}@1?uJSEb zsnL24G&VAR>EPc}4q+de$2OE1xRir&2g%=>7n`}T3j-DQe7s&9X~Q^dF3;mK4afrZ z32J7j7fCm!*T{>{c2To1*sAYCwY&xQ0XJvr_|luof>yH>fOw(!Og04B7E*DchfN4Ahswz!5^7mq#DwYzYqxrob=egq*yI5kEpaeS!xRz}DMi(4)u6;d ze~G|>q%@x6bi;iI6^d}Bvn4nu)fT9^$5*8l?_KLlO2>$ zv_K4YK_Cjiw3~AxPBt)wg5L}B`aL#-nBB>&pT0H=b>KA%oMVf`33*U3+?jMspCFy6 zF%_gcipVTE(4R2ZA}hc))KsujwD^vPjZK`O1$0ARa5<8k zw=Y(bL6gCkblfN=!SukNwt4t>aVfWgkoie|Axg=xzyY9ug?S9+(h|9}sAy^I;?a4my+dPw!hhPFW@nVaFI=b4SqtUi?qN&e91c}DAE543IJmVsRN;WQFopAhRydJ1b&E^^b$i&M z70w|j9ImHhAwVl!^FA+V+ry$XC^V@ajxVdU?=K#ZPiIh=oz|k1?xaWrLJG59c?}U} zS?J@ES(LuFCc@SW(cz@>=sfhxz=A7(aUVU^p(r1{%4&+Qt#iUV#YqTE-%X*^7bSjr zpV+sWt8GE9wuf@{sL9o~uDNzuRg6txsC{i4EeV#F|q zm;FK)hE+&7I?e%;t~Z4)IMP|eOFD{$A#Ip)YsOWZmY zmf>mk625PB;=Qs%w}4 z5?o$mM-mT-fr5ipq$smTaN-IH-VW`dBRSjVxe~|((wX)IIvuAVhT2BqMkmuUZk-Wf zCx`5AM~@~}s9EfXVl9yx9AXO$xb;PP(KdDvUKvHTf-Qka=GZDz73uQ!EZ zV`Q!xt>O@l;&j#AN}&DkhsF|?K7q=L+XaRr)Jc{ZT;$4X>PTCq@y5;#Dk3U;cXJXZ zN&?yui<5FetAv0C4Z=9*L<8;35Ihh$iAM;Y7#xQYG95J#GWXpPf)@r?O%TEsJ&0i_ zdZNLvSt1lO(TLF@??n3LF)ntZ0cJB4H_-sU8R|CC0LvMQpJ>EWf-F)ky~G{$|D%`w zk6tpzpsw{&a5g~|0_B0#8BT*RQh(^e8B^CvCpU^Y(RL4nDl*4-d}P%LJC=Lp2w_`2 zR)>7!u>iq1N6+z&zD`Ukp}laD%wc*hq*-6kgasa<4aQ-n(VrHu`O_%b=xQ_!9Gr_= z2GuZaJrATg4~IVw4gQhlfG^rqQVdCkQ5&%J;ZA^WaZz1jU1l|O(NL^wV*o+#re@;y z5Qd83#(A)=P@P1qhGIN~`jT$|_#?+Vry>G*3;b^G0eG?cN&^?lcPt*<$HF59u@ltM z)!hMvjVvt7N(E@8V66|(a*jKmHiIA~~-&2%tvn}*mXhrxx?ii271p~|g``FcSEj}? z9AgfDIJhTvb*yqt(RVe1MTEk(2t|&18!n61CEQAkMR>Dtq(x&^=)3G_$H{~REvTGC zgiJ16PB+|;Sq?1l8ZVodn4x{A$XrXqV9>>O5r-hL2GI~)XCoSYv``T7zDR8CndsPB z07A#X5f#o5fENo{qUt%xkSxR-eGXnTiC-kOiqx4!1YifmA-_i-aKXY2s~L(0zAGS) z)+FkOv)>iI&m8D7BoOb!vfM(9@llpmys5BhC1mQ1rU(%#4*Fv7fY-?A%Eh%>3Ti>& zf-Uj_Y6KNV)z}#40tXavwL*AWJ4E&z~29n;{}0I~qnA(7}G z#2`Z0AwZ-Cko(*_1VG;)23fD|5FlCu#B@qzj0O-lxDGLhi3nq&Qw*^h1I{gW!Uyz! z63M%LJ7!cj4Io}Am=>Xjv$@gT+2z^X@!qiz3TL|LL;VRqhz#FwH;Sxj1{C}UrY6Fz z?cOgU9X{xOTBI(a0KE)vaa>NIMJi^hEPl|y#2k=TCv+uEQL$Ykq2lr8(YC8w+pZDX zc6Djn6`nZ+acJAs3ENfc7)#^C!$_rNngIKd)+jem;>0GktkGD+#K?w8wCt8d%2o+J z+lTlF*(AZP0>WIH|DNg7qDl-QxSnM0f_uz0+dnIn7P3J#!3n(adoU>hJxA;xKL#cZPW|!c zRbVuvh_es4T~6WE1?c|l`?%QCg{H;tWM8i5jdFy@n+&PH?0KJa|ccW?)_e zmBtI`Py_s;24FoxrY>R)@a=cA1}5d`_I}U*L%a{CTt2+rA@4ysTui^0_jIrq-eXJ* zNRG+(b0r6D<#%^nt#B~`S0u_EYzjD9oXhtB^;qbjQPER#Xy@@~9_%k$eYS zfQDRVz{kr0Td5)zqsJ=WGM-ij*%S<{j3N{mq+knR7-oTRWw8|ianS{MSOD~Q%@4pR zRfuG#w_!vxiU8uXeuB{%juBE#$p(!Ppb@{;KuYPhXmpquO(d>xB%SmCm)QufdK}(! z8bN)6)dZ|`f{nbg7X}V5mH?4*OQ~jq6F{Ki6NBSCk|2LlG?wnrAF%?AWjOqo#)O8( z9WZDBKq3(izMM8=6vYV#>(hoh0ezWm#}!ZZVdS2Y8q2dsvQ~vc(3J9J#8fUTM44qH zi!K|T-H(w7Girl%aH0-&%5~0g$^*GWQR?PMHBnNn;J;MDj6zb3RVO+vyQEH#6F4LV zDvJcvNmOdb^AW&V48jCKRWC~x(k5`opvGe!`5xk*}+WRZMbxg6+5fj zU>IhfI=9=H38)PU3UnLf*4-wgIjFDDZQuoO3TvQ&gzaXxF)*Tpa$Rd--FRj{3&mn` z%*4WhAcXfK+(E%Y;nWuxyMjGMB+is17$4^}ijXc66Ha<)WGE#fMjh10lFM`DF@W9P z-q2;bNdxvMPzr%ayKI}C<6PYq=vcZ| zVHF71UV_`+CZeRw{t!xMpg&-z?t4f=e}Kmk=Y`(CJDvRYHm&_RSYYi<_jg+8Vz0w{ zR-4~q%R9B%?$Ty^v^LvgwAt>3+0NyZlx|KK##}o>)zS=X!SZAU26@btkpi89tx3-A z@kFPSg(R#4V78AgfnyjjP#jOD#@~|Rz()iWO%+;VBHm!dHjM1*Z>iX2Rdd8uSN7#z~}CB0V*}KjI84Hoq|8TD@x84LA_s z^2TD#F2Xk+j({ITdOwVCMoS|I4_VY?*i1tVSX;MJB!?JLR$$r5PjnXBhur6B3T9XMz>{Oe+(Nk zh7B3hfF~MKo@hvUq9NsphLk57GDbHf93^t&XkFoCjc+2>Z{Q9LVjAUWD(Q5Hh`~Pv zAM!|n0c~!hI@92GZGiD;F(YD}K|2PasByBuk5KG5BUZ4>$Hi z1ImN;%#MS~;*fw+$vCX=ihmR(nD#mBD>gM9W)Nrqd+}K9@a>dMQ>=raol$@Q@nt3K zVFC0#?u^G0taq>F%rb$^4QDM41h#9Qts|K5$Tneb0!$j01cCiO)uBi5doI9ZEB= z$Q449T=Q@zRZz%_7!J_;Ux8Z(+nG@8uF{ZtIlS5cO}@<&m~qbTH2 z4R}Jx0MJ7iiG^8-+*0ER(2P!pwqkyO%SHjXgk1t?@|Q(PqB6jb%>=)= zaR`Xu;~>KLf#O9*3Vz~g?4m|=+hQwEgZs&Urd1-`4usb7ishI*1gw>)&#Z8NaUVcs| zNs?VG}|jkU0I&!%JM{4 zmM6NhJkgcCx+{ZzF+7MKEWSjG3^Wm056-ZeNmvR<;OaCNOu;RGBs3=%-_frqeNH4% zQm}kc2}WaN7EffMnl?5D3giQ*FEv6NS#()qJ1{a)wouSt^ryZYT=U}uCTL_yb9-JeelJu7=(~Q)tTyT?itF3b1Q2KX|~A z6OGPV;_EJ83%AcHKRAG+TsNd5g_9AA4jvwKTYhqlVx8^%B1VP-bizkiQCYQis)Hhr zxKa9yL&f_3;-GMnE)13|A8$O#OSzS;$TTBS#Mi)gs?6~Y9)+gqU*Wlkxn7)u^aTolZ>LJa5kvw^#@Z3P z5NpX#WTJ+^1aK%0oTk&8v@VfO;(!T8?rCWikonT+W(4dpDM(vmG{vIzFy)V?WJgo7 zqZ{yqWXlthEl)_cJR#Zggk(ntEHQf7bJ~kO2W5yJDFx5rd;w9WDdwr*?q3QTNv*pt$i$1%|yWZ2+NG;`5A;=(6q@i^!mn>@w&>ynYC4PVf!p zD-`L~P=`W*!aRc3&X4|4r6GbFYV65XbDT0R#5za_>mHH9eK^0K{rs=Uk(|~*2M0B!us<$gH)F3v(^lbu&RHsy zQVD=O>JH4ZsXJK9%d{MzC-XjFqL3{RFpd3~c0cMwI2^A7@d#zH7b8xOTa1}dX?9fj z5e&f4j0d-_@aP8pf=4W58l_@?3m32=D{0%#Ck&)*d}1E3mE#e*xC7mqEpF-skNP>Z zLWJRRIbhlwv@NzUheKVK!z*F-MB~MU`&i{tXqd|ic#`$a(27JO83m6Jh`llz845hv zjRZag8T0cBBA%=VW>*gWxN~r_bPp_S!?#yPS}+GkUT902rvB0tk#`rBiWtP~98G5& zzAFer1|XWkY#QwnheEaC?w0w)rU=X@fPr^Ls3Z4_}o1jnP@para32v zCQsH`r%GBuXj*|zgHl1h`Jrj^by}&U>Dwd%MONvwrINNHG~WuHcB`Z{fC+Y58yq@y zH99YfYz#}rtWx;HNhXrvY8#RpQXt7&buv8_?Z_dklKg~D#$6F1$-Ir6T-vLXTf>rD z&E$PLd4E{)elz(1l3kP+m#mF=z4Z>mZxAm$lI4j?$P;>)P0krKllPfVAd>h)=KFk| zyhuM_;xW?-h!G_HFkwFs_mn3hv`fnx4^)HN=8`vz{eHvyW~B4{Ri4`*pBzPpLl?v% zyLe*rAhI*HTNSN~Xg`b&Y%Qn8S7DM3vr%3#p{T;CdaP#Q_5|K69K~yeaWVw@9{PX| zEb72L-FaFAx0|GJAVlS{Y06>C@1=9(GpT6^=(B6jq+ZyB7k$v}nbg7l!A%dO4!JM$ z#{CzLz9zLNC&|uC!$?o}4{1&v;!kTr-neH{hc@}~y}&h1$RO9&r>8ghhdz)xtm*y< zDA(m5>=%d&n~=whbo$f$k&-itXHv}^7otGqp;ab%F7yx4?*xwqrA_!UfC--VK5PWfeG!Y^VwRey5?v;vg~}BP)0hi5gasl8i?hzLbZ@zzW=NVPHmt zE6ELY9xnwqI5+d-fd!TnJn(JgR6JrUQqIQ%_kj+?17`go=uk`xoZyNySZY#5>IFlc z1}HR)Ysf8^KdC}Ttjd%d2OxiFTxn)Bw||g?&|UmqOx$?ZYM{i#!IX?c3@<}DUt;K< zABi5V(EMj=Ie1D0d zF&m4rx*?{Y#PGyfH^AUh5dV1+(+$gq@rc1$Z-27H#N%FXA7T;^(^q1AI0>GBnC^(_ zBQZFn?(dEmT%YdmEiv73%Dx9;5)so&VtT+`H&J511M&f32QJ9QuY_Qz$=WcMmJlKb z9H=FJB}9i;)|m4y{7Q&xWUL{^VT8EU&BagrN(c@bQWFQL#jnJ{#aJkJ@D2c>7#~1D z2$a&UzQCV|zMw@pslv}tpd*px1mVFK^NV!t66~Q~@p~}<>1y#ci z4PWjX7;?a?1s7IL;MG`az?5XjkZXAjM9T%=3q#;t0Ofu%65Tb>T)6E(Qr$I@%o|dn z%9!k`fhop}5jD!ssUuMG*Y02eL&1$${D#E3Q6z<)vCv-#VK+EM>WIy1Xrkpc&?TS( zR}09Ci!|cH0DR%x!G$}&@TU#LxdDr0RuftVj@k8XsB8qitf6CoCRp$KZr}ozoK^jC z7tSa|E$7S@D+ug1uoXZo(J%x8!7YS1`OlK*HO4xi^KHGXg}D3LH=X z#iSj*739LP4$dEr6ayU=?V?~jB=f31G!pJ}YyC!FBSXAUi`;2-s(M+PbEe4J3$75k zQdap5Do%PwK*ER--x#(7%WdNUV3z<#2r%4H032fnmOX_4Fc$BD88VNDb_Iv|1rx^) z$8Zc`eonZBdJw$NB$!taqun&AFq?%*7O5UtETGeen-Gv@HTWC<3| zDG3924+r?^v{%_Aj9n3=uy0z|2*O?6BJ9nM2@|#uvmkW+uM&nCws4FZ1cXr;fG}}~ zhkv|9*#3?QlO_ld77-vUgc}qJaKmMC11Rb2sYL`FV++Dm1q|je0>jz0&_s;`4}Yp4 zkVeghHjVY(h9zay`We>=U3}{Ky>kZFk6|6l;DLpuI<@t6{b4G2TU4pG-#RK}Wh~ML zao{&Lh{oRu1ZD^#)xWkS)g!Z;WqG{|cu4GzUybw2;T{fE==JFPaF-R!8??t(sRRG1 z`-E#bqyandb!t_u-?#zdbN_E)@bc&jbE2qVP6RozdC1|th&6Piz&=+8P?AA#_0@BK zf_zEPP`~`sSLRD{viE#hV<$fC$%l|!X~&_~hkYe1B6^>qiUsdk+%`QY=6DRopLL<2 z*JV8Bfd&Am`ZMrzi&|a_(T`Z}cjJjj?tAf8m|Faet*cEz*Mdm|ZNZ6AY6Q(9>`AZ( zuBsJ}C39s(p`Dyel4UW3F!AD_cwpqy2W?kVqk2`T-y5hj6+f@WTmzkqJM-gvVD@2z3ds`H;|$xI8QHxVCtX8Ook$ zT%&`y28BGIXk2Z*%K@l~#+D%RJXN(=AJ?^Ps4FKH}}t+FseAff_Z*- zjv7np!L2P^*uaEy0(XdD31elLh~@If89cuiwZAgb;rsvd$0Yv2%9=A6n!C+zI8nQb==5GQBlcxHhv zr<~!#6w|z50En?nGnt4xz|I|=an5un^uMgO!Jw0C*}x2O!NhJHaQ5OVZyNHWj5LS@ zc##JGeuo;11a$flhHPC(NG{Srh~B$!LBlhK$CD^M5=*ai#)_LLB}sBcr(#Y|lMJ}L zsWFtD2$+d6RdQ(wipEF+%}5zRJU#pc8MGLOQ^+lzPLuUGT+dh3I*p+bMiN_0;?Of7 zI3oiuT98H&yaQCITE|@D;KT`HtVtY3HmP!9@N$LQHqTmwiTI!Yfz z*PV+g4<4M6+#Z{Y1eM{Zq65WD@2Iv+DGj$7X5=*x@s9T^*gSrK72e=Oeq&cWL ztm0hIasT&93KT+V^`qQaum=K)6)Ly)3g}wwcx?q)&Vl3(i091I@MW;4akBz{cq8#C zEJQL9{L5kA+bVbd+!^QSP6Q*d?}7Xd9CSq!aHeda(tO|z(3pPi{?r^pxK{vqfksZ% z)(o1FrW=#vr+lMssu;2;M)0CP``hBECUa@Gwo#wwCSCD8Ce zGA=PwF&Gl!^r=OFxRzC5CdK^VI`T?c0QkT)DrD;x2DhjGbr{s(UbPf6!Ow6d|B#d(f4?dg{q5R6{k4jF7<>%@Q z?JABd6CosLa8a8-z6#q0pj5I8S9qe4h^1Qa_>kgLc&{qf_J(okm0jBdcH@#KdGIBOE-=;#9l$^H2!Zy)4d>gh(neJtWI;fFt^tsJK($|Edr7yAYH?T9T>k zfN*jgx`_G?gE_Xa9SXA@NGrL_jZ93I#g_#uxx7lmC0Cx#m)`r*5Dqj55O&A2dDI0E7AA=f&x@D z28?x)sc>`PDkbV21$Fzwi<2W5`f6cJpwPg;TY=*O&>j^y>WXbP_@Xl015rpxg!P4E zuB&QOy1CNHan?3iX~dwHr$G0S8eEWRt32)!HY?B5Pmm2(-i6BJS1Ql5N70ZPJa}#m z5A+@^4*4-Z(^DaQi5#bD#c<;M1&aeXQcGRu#|?CSssI|foW=m&+}Lk#y}P@J8Yi!y znmQ2&oLx8gd58hEk}z(7LYeR}2M>k$x|^b0$cfcWF>4HVQ*W@FdUZF&iWa*m5~Q2j zm`d*rKkP`XdSgdVZjF+641?HfK}%W*=@bXr2pTdL1JYUi#LM|o_3bU%$x5aIDKLLhF#Q5BTLxpWZLHwdLU630 zXM>Ct;){wtgt3BL$5?^B6c{U@a^T?4<2XQU!-@4fwu*^U>vg;lr$;L#7jSwsPAuLM zClW-k(NwaK5snk5`pAWyN!&NOTS4Vv?~7{fYi0PzAaGm&7;VOJqErJqUqkcR$v?@l0U5KrG&&qOB}@` z2sc#XC_%xv{t`za3&wSqILcu#&LeRY)nMFUiK8?JG>g^wxk%kcGC9ocYV7*PS-bke30Ua7lj5QOZkcgFP z;P4^jrpX%zT^4~|uS~;uQ#HeU!&aPO7&ERxgAUnFMTVpE^((yCQHaN&7>@}I>*v4U#=Am_4nl?706w3)?VwOxBO7LQWLF5}k^@w;`E(`@64b@~7Pox`qZ3 z549u4U}B0}L{Qw|Zt0T+h?P=&`F{kU2gDM{#AiTH-^q!fOL zm>(ogz%RabpV9+1^D3N$U4_H^tFThDDuu>8*Q=p!{5`5D&{!mltYmjkf8(9R7`fT! zBh>b99lUb83j3-w^33X>`E`$^AV;=u=~4rtR#=!~8n zF%Uk|P?}&MjwbpeEk;p~cF3sC!8>F~=inVy9A^VNBnE>v&g6ttkh4$pDi>BKFa_YB z$;oJCbT#y2zB}cQj>H@UCusecXHaKDbqa+3BM>~AWTkslj82ash8UfWB@oEG?0NE> z7$pwdOa5pwOhK}6Xg~%so?3+-2RRTswMrKst=u&jQapM)S)GB|Yf|nc)Jk21CkW$J z{|LgM7?-+H!$guy;1L;)QCL(Ujc)m)A$Uw1jmJ$_d}UszM>0K9r=z0Xklqc9;5Ig< z^?>9l6jXv4xgQ&?z6}-+A3~S9RcA&u04kZI)i*&H9s*W3YZz1`00UCN7Tr@6SVKBI z@+UxSH}oMAgOvuI&h;i0Wh2&17h+j0kW8|rCI1~$F|(rx&K4vIq+?Q`)4}Ip zdYn#=V|tuU7lAVKBNj3v-f;-&bTmgWzitjG1I^*KHAfIeS5sh6O}7eGGYE4+SRpX@ zUaDKw>9QbICJa9z8t3mp{loom&N6W3RYJU}JX%7W4tOOr5+;`yGhM1H94JVFRTUk4 zg^7i{fmB#tKpJ?3K}L0jodHh5Y0!Z8w9c?}%$%@E;Ukcn>P$u6UgfrCI)2CW(d zqBCg9AP|#5`vn1S291`%meDdWW8mHX!5v#F7i5H+CxbFNu}RQks!eWPJe4TZ5jXF0 zYK4{Q4w;T5aXgI>)1K22nVskfM_@XlCo6&J2$%0|(-A%Y2uw%x>?9hf{)OoXH(0TB z0$`braNE^39nq7Oz;r}URsz!zJy{7%M`W^MPDe0PVXef>M@Oatqj}FK&3is+-t$TG zo=>g$B27mgcx;*RoQ^P^N`p^MOZep34d_wPlU(Gbz7z#yKB+pmh^eQP_=bGQl;mHX zejpdh=>}OPeX#I^zTk8O*b&c359x~zOq)gjqqf~sJ*z?zO= zg<6&qOoPf9FsOpl5y}nbAu=8D=;;WIY->6~A=6eg0x;wL|2iG9O(oFDJDrZe@sLwD zDxL8D9x_+yr0a7!68Q{gBSRiY845SQlnWIa2WB#t2_Y8nD{xj+V7hT3VqhJ4)EnB! zgeHDXhf+P2Pp77F9y2UBUl?YeFGOP=gI~;JaGM8ateD4eI}olbE{wUvK2%{zxAJL! zS~GkOIrZpl-hlbEDO%A1(IPI>a@9kDn`=(^7L+{kO;mYqH=kS0C%)4s@r~wlwfU@f zf&=_^D{cg%HOTs=z==-%h5`7_sn;36{;b-^06gV{6IkDmP_HruesSv84A3TTWdKTo z?4+MoJ=mElUwo$T6&b)UXLAoiSZ%&>BEt!d3(q)Lx>HYSpem`XFw}C>4DNj#mAHQr zXAZS-935ekRq5k4HV8DcOn2bhqK!{&WCo@?T0?Jq>Gf#)DfMYJulk&t3h z*dm)cg51y%pXdm3cSn$WI)dEW5hT8OtZR;u*0evR>&uE8 zH!M_r{~PGP1YL`TQf-!s<%#9p|8HBKsI!ZkJ_ESN&^v68!RI%q$+^`q+K@2B6ZSS; zUJPz8z}pA_SfrN+;FO>44&s*Y-4}^_ieSh#MpdRp4m7Y>WavF{ahbx4?10M)zRX5f zHZ#n%d@QNMZSs(Il*39k6dSM~Hs4`r;w|7tSC`^+riZ%SIWf@T7cxNzC37KSibcwA?5)IkNQU;Guj)7Z)eMQS(0a5jN& z2S~J46&nzI!_h-l99Z3Kq!hW3Om^9v>OG?hZ3=e2b^Wa)G*qDfCz-5-I>Up4&?k*@5rm23T2Q=)OXI}3KZy1v3QBN}r zcTR?PGwi}NP#lI_qz^m<3d)4KP{@n6k%vQ7W?E7xkud=x;VhzwL;#Bn9Iv_}(xZN9 zqwhHzeS0kWpg&M8S{NobK_}>v3)*BK6zO#J_Ta{GO*Whjgsb$VMv@^(Ce<+GX-MD? z4>Z8#754)|zmsx$q96dSqAd_$gHV2h4Apd4%!cJ-sAt{<8*!^OCE#g>;Vi`PZiXG4 zWm~NxO=!bj|YO#{@>{*bU`b&8+qy;*bwrGqX!#P zi4!=FfuIyPrQ+B6#%yc~_C5d$*@vGG#0oE1u9Z`|lAsR{({;%Sr6HFd$RQIH#&e`t zqhnKey?=7*s|aA&LKC6Z5a}2vD#7z+7#gNvHxv(YF$(7ak-}Xppp0R^!qOnmmZxyh z8P`N2EO%K6fA&YGjXE zzPQ73bScV!Q2=JcSO~pV0lXW?K8gt}RWJ6;shiPk@T$QXFrgG268cyJH%JqQKm5V& z2uj}N(q8P0zy=tEs0y3~#eQfBn#y~VeDla<;vlCbyBq9Q*!+hcA~Ou2rOz;^;Pumf zkM~Xw9Q;__eK19ks=bT(G1!n-4D9w)mpRnXSZf~b>CF4%7LF~@*FD{rwE)M%k<3Pts=(cEZ9)nK7o z9g6B-qpHD<>Qs!$$!}x+4Njhl32;&!&elUBgtIKPu-zyUnffw&4)53d!_c#wYcyJIVS?H(9Tune7- z8jm_K&cnmGNh0p3#|>z(8(=z4G$tVhe({qh8aW6FCagp_VN$^n%XfcdDs+Hvtz0GG z^8GZD7Q=AkDAf%;#`ZuFti#O>4DXdLAYRUrw%tsFg`u7>)4UkR4`JEb_c46-@iDD9 zn`f32b*+F|;r6bHcDh$NZzF-1k}Q1Jzz{ozYb0o?C`)2#{Ds*I9W+>|%@C!Vi&%No zLr-7DfWQ|NQ7z!_{coU6w4=ownZ|LVp!Hj5dB1_C_Ft0-So<_?G^J@8B^Cxj;4okk zN=E`WuZZHLSsUlzsv!j;z{|8)puS8iLXQ=;`?E|fslN}vjFu$B{-PVXn9x$5+t0hC zG$ms-CBt~C&lqN8>iz+$CeVQz4MfIXMoSo>iAJV=;QSI3jLCdlYGmoRQal{vumvb- zB9lmb!h!etJ68AB_ibd<*Ehf`rxj-)wlW0}Q}tsJ9}|swiJfT7hXfl#oplp%*aD$6 zX8|2!5VMCKtOD8!P`_t_zDNUEdFudC9F^y###83A!F+ycrt{VUDT=O0!2BjwLiQn! z;SUhz%>*oIjbj48Un1cX2p?y@24{t8yVSRpVMsKVzYSZRunLZ7)Pm1d<6t~%24nSH zio{ovM4I-QPb_H}3TNi_OZuh80eMa|+VLbgTamU!!b6>hofDjg%rMLoFkvXZ)S4QZ zX&Cia`1RwOWWPt=uT3`T1wYoH+q1q~&F3CIZ?DHCiu=u&H|06b*=|0+l;@?;4LWBV zo-D53HNp9wv2&X7brR;kl zG6f4YTpq*hPrZo4!O(A1pzoqE^6|}R6Vx0^)Y@TizIDO*7PB!p-(u|m&bN|<-}gdi zjDqv6+viXlhWQdxUFspiM+kfboptd`b+1~icueCEhp8!d_}o66%)oRzD$9@``t4d_ z({DG*^xM^^B2iWP+v5BjTsah!`7ljP4W=Ws5-PaNkMN9 z^K}PDB>FZlBS{4|r12mj5)jN#MZYjHCpcwc4j=#IvQ29=jUM0g9AH=n`)4QiMPp@A zIL>B!k(b-3kH35FM9DM;aA$~b7etcZ zAm%w(xp>8H6fCs_5B>_@ud+#Mr*gN{(x)h))J6a6<2&U@CWnwBgv-ATeCV3v1e-C46#rJ9?2NTMi z<}yP#X3JiHP`b!8LwVx)&k*#gPp8hI&ouzooL{05W>M@5hV8>9=(*UBM-D&OR%5bmW$uy5EvI|z#F&<;chN0 zoTTttg$NagPZaQ?Q3z~AD*Ow$w#CzROu=fPe8dQzNOkJX)pB7B*O##d3b@47DBQ8j zlfW3{BYF4MDg=-qOHcGv#(^bx`Pkg%Sx8ExH%3Sc6XxX!a+I5ZM(N)$Jk(2a5P zQU^5z8?f{gU4?Z;u0cinUgI4CLUIzFnz{9?j_d1fG__DhEIAdQYC`HtIOdROM8)D% z7zcS4jssQdR^Ix6r749CJRv1KvWf?$Ptl9%27HystU3w>V&R=xb$r>2RgVm>I!;-l zC{$Xi4k&$(AlAgbud?s~S;ET7(&B3_FP5`Kp*pofr2>Y13fNAsMxA1G5iHsB*}HIByl1@ z0pboiF`EK{8%v<=C^bYB9%+*rJ+%N38U@Ai6sW92y1fs&pr*SRqTh7!!(iqJjp?8s z-`;iofN@#oEdSoPEV{-vFneqRvlTW6X3zf%24%>P-s9IcsL@TI}-b# zfVsazs~wMN-tK0^RtPp@9&rSs#PCMcT`<^8s45M#*gMjpCxsaBVOG(&Y=vRS=RQ{| z`V9WLu1&^Y=QS{8_quEuXulHh2{Xg)4l-z+b-WaJT4f;TEUohAj48F+nECM+# zAYs^F7Xq=Rehz_Kg5|9P5LvxG7}aD(H3y@txyV{4kND%Z;NSLua^e^#vly9Ys`@v3 zh_SX6x1I!>q+aM5>clhyA(>{J(dpMPxQ}RVJvaAKZ+{Ym zr4)y7=yn7|Q0wn#h#Kdp@D2+!%Y5A`b9AFzeQulN1sZv8ux0lIgS&&RA@g9=_DP2~ zQ4apf~bTT!;3_7yRGxNIP;V*WrwebeFW2l8UChaIT z1S|y%J2ZPx3$G+%P{256ZZ8?$1SuV$Qf=SCNbjF7$55y4gCCn(JzT9Bj;GTXtF{eS zo1@ed!!aTwF2dIvzvD4tVVpK3h}|~^0k>A{NDz5m>?#jzUMr6Tk>|~>^1wQ_@<1uJXWIxAI63 zc|HYypAx=Bf^Q6hZ)nH>-}(geNDz7c(p4VJ1*~!;h&*SyqRk)7BSGZ34-Sdn+oqU7 zSmj6%c^>L2Pg*dK1d-<#UF8`T%p*bMdAX}RBZGM)h&%_o$}={YM}o-H-c_Cn!8{T~ zp07L4vu(Jqm)bvEor-3+ie|Tp>9kt`?w%N{2{=1vYd}13tTiAW;oS;()^?RAyjvm9 zmag)IcPr$1tgAfX-3oc0?kZ1sw?dv5W2`O`7wjVNmJjd%7XVpeC_&`;P3L*`vk8tv z8UQj}#j^=~oi+jBjs!?f2sQy6?gPb#Hv#e-?RI?WjAP%38;a!-o`J4>BfMG<3-o%YfI`j^Xt?1ByBaaRp^(wax{mrX9I&=p2 zuIkW##Hwf=dKmXT>CkTYRqD_SvA7#vN_!(#CFsyQv8uZceG;pB=+KE+m8e4vaVklN zn&VWQ4m}*Fy6Mo4I2Er$&%~k01oJC#swYD4#VM!Sei4VC9zYhWzGlR3iAVxOtoqI# z(F+mxce6qCM#MHoSUCD1Vy``-FCq?Kq<-Ix?lj;g!foAzn+P4pM`A$*LU+XrHxYU` zUbu4X2uWKY{9(N0MyMSZb|81t2=&AWwSNSr)E|sc$?Crul0RRIke=u3 zOBknWAHjO|Q~iB?%&`^Mkn#E`bqb}cFGr{oBa|PqYWQ@wFjR^OaE1VPNDGfgu2cOo00d&=H0UOn`^6YN1w-R81q*;1CR=?O915n6P!E+C5SY2>}>t zV)#{O02i77zxBagw{@gCG*V%C%T~?dCctN%5qXgbaLNa_-?oveev}#!fEW1LMs{@$HRY&_%xFb=hC3EvB_J9Wh_nV&+TCok{jwgxP41 z8Oa!E)F5Vw`A>Vy@hbrHxjn{UuGQmILr;@(gxBM2Hz-Hw7d=H2AoLc}b=;AjqRS9> zHUPJ&mz85rFDu7?^|Ept>m`~PIU0J4Cf+knJqUvwd3*}tXM0O-gx={boI>b}K z!ZXA@)JJe5^di-VlX>6mBe)Uzx{rnXuD&W#r#{qIWD=>*_Z5AQ(A#}Q-!n&F(f4iR z)V;|ZP+!O04j6xpPKQ)LZb>GC*}2}pR7AosYu+@zXHZ41$GXlHKCB|w(_QBZA6Stq zXm@o=VYqdJTtUmL(_G>94RXEMHHG052jqIS>s;Z}0OShVd7V-iJ`q5!przMouJEY< za{abz3S~^-oYJ8rh+IKy@3)i|^eqw4 z{hbRaAlm|@|K28`|7j;8-0DNFV_oM87f|H-Ti3b51r)iy>pEAsfFjqu=UE-E(|Uyq zC~`G*ohw{Gk?Y~EbA<~ia_#6kSGa&8*PgC(g$pQhz14NDZ~;ZG_q)zDEGVE7M6S=e z&NVWaOM=LCvg=%8Z|E*0LFBr#Uze>MK5Ip;wcnTPTXvzw@oL+6wQsz(K>o|LPQ^rh zxF5AXKKIm@P)>DdJhl5lL%nT;TOscltS6wh_XFSu0(gkMjOJ>H9rCUPDRyo9c-pn^ zbqM(f3vxGceknK)cL@2u1^Gfh7&j-z)42I#hme1=AYUcU`U$Mi2OUCwXhH5L&eao$ z^UobZ{{!`kneQ``Bw|_i>@I5Wsw>F9Tad31^85Jt4-4{*0hlx%xP+6&Qyt3uX$$fbLLL{$Z#snhrv-_Ls7EzU z5K)5$yAKmJy9K=$ZI<_&XWVE(9NmN0Zuly_|>*R%qdPt zUa`lVV9dvUb>b;2*L>zWZHJLbOG`>P=2m-*Om*I|#k5ru&!@JS`u}3govA@QI%aDi zrtR$6Y6Y05Q*HF@X0CVbF?ozRVUIb^m&TMy84O zso`A%gAr1x&9(?Z^0X}?ia6f1Mfe!eW{bFp5hrXBen$MqpkOH@8S$tsLh9FQi*2xZYt~3;5Fo9EfjsU?2vRLw#^5C){^9 z)SZsNa!~_z>tO_6s*YZO5##8k99!<=xz(-FBjl=bp2&&%Vp}GP>|IY$en{Z z?p(%|>3c&#er$oP=@jHX3#7SIkTn*_L!E;B!~%JuQ;`3#Kwjz;eOYlpf-kL*<^w2BbNFfsWm@Rn?pgiSRn6r3i6-@@-;y^6o!W^koqB=fjn%1 zJlHA7Rtx0WPC*{AKwcq8hc)_{1@aa_I&7n#TOfx!Eohqs@=2#4Ef&bhPC*{EKpKXE zmJVC`F$-i1K{_ONy9M%Cryx5lkUgD(?6g3B-6_c97RWmU>9D1rut5HsARRWqlNQJ+ zf^=Bvr!0^)7j}kamj&{4ry#p6kOKtiklbHbARl!K^0Wo=w@yKxu|Vz^c1}UwO9FfL zF8a{wJ$tyO={fXwL*IEq9LQkffA+~##@mgiGXuR@{VS2Xu4LY5qz<)Bvq6hcR z;V`pb`w+m>4~KM(gzls+MpGAKQMcdih_sw+qs2$gZS#>6XJR=FOUKYSp2CHD7%}@E zmQUi~>jIbI{uw;da9a!>15@zH0XXX7f&?5ur#CDdM8z|-8(iRUQJm>O2hiA5j~SKP zxeFccqO3~w;@$(gMZ()udxYXVFq|uSk{Gvtfb%E>o{@&lGm`juJ{M2;X^LkgptNTs zm;r}f-U+82CZT947a6(*9<4Hm#}g~U{=nX64SM}Ckuf0rj&=x2RLEEnVi?4!f~C)M}&=&A?V`m z8I9H7|2=n4DFV2)yQjt-^!FrXHh<4(xQNrUJ;vK#yp7Nsv>SX5T-347SmE0f>4tx? z_eV@N`x7L_-k<1qV|Ez!EPw@i7TjUH2@!_(FAm)=;X>_}o?>^Q4(Tc2w%{{632vGh z2u9-JLl49w7X3KjB#k~GZqc}^nxe)_EyCQQp#$JW%6patwljZZkRR|OMTZh047!lw zy7|x;n-B_aG61EZALxs~J>CfL4xd1W(lT#Qk4X1D>GZXEe8=4gU~hOldM^4B+*B>! z{J>c|=3zhMRRbHpNPG#%>Z82Rrd@YaUD?#KCD+$2GRl{f*Oix4mET;JQBqr8YslZ6 z@~X0|vf2g4^0J!R^6DkVvf8||nw*-F#briabzMnS?&6Z`%W4r_R#RG1S28jX8fDa# zt;ngaSzJ}#QzI16>sj;Y}R#h!sRFYp+z5uzFEL)ttq;zR@`I5R?qs$EDl~k40 z)s@Xycuo`uWtRN1s_ZLu;NQb zFg_!5j4gU>@hqKwF(P$nd>}b*_ADXCLwh3xQm7CNwdrlQ^(?mu?3XE0?j5Z zZnehsWpx=4Y>KM1;EbBQ@)c!OhUVgAQwYu1+}gq=3#u0{ttqRmg@~5dYApH7mM*QX zsY48~=_tXa#UwP&6qxJSZvstLchk}`V?l<>&&>yU1$Y~s75=VjYD#Vjjm%tjUD@K2 zr5&WqE-x*smabPDnq_u%)iU(QK=A=-p{(Q^3kunWXu@EZHWpM>*Oswn0cMof3K-+2 zFI#MOYyD!%J6ux0$Sh8E14^5K0MB2fqtt+Xivy#e}TyNA_V1h$fY-t(` zlXM;HCD@symdlDu%h*AR7oz)t8(H$k4p=L)r{4>zr$a9Cs&9lK*&r-B%0v}qL2DIM z&sbV=!?H33nK5gc zDkv_To|T=GJ3ZS>n39!KjQ`VSWMxk+)`BJYL*lh~N__4#H7UC|H@`TqIA@lcW)dJ7 zi!-Lq$edD~pIcAPo0Ds`Kll(#%_tZ@@{$g63HQ%MmQgTnjuuw(($DkET<7=8BLoxvT{CgR#6)>okL-5jC>0lp~>5;Sx0Uw}i9Gmcj&*!ZNFuEvYkDm<|as zIvB1w@)s;B!|+qOu$0Pv#=?cQWp&mY%o*C2mCNmE=9`&Td%Zo)d^6K195kIUD$j=M zl(9G~Crc`Vp#eb|!*pF?Tuv#wi4kHGAS{-E8HWc@EYnN?jP*|Vz=#$c%yLk3$v%~= z*CB280p8?kd9Bu9hyf)sG)%*wR7I3lL|&lR=txoY3t>VpTe84}lVQsY3+4GGiAXR*;BJK3uesv9*~)ZYHDu5-0+-} z=Vr{x%_;_h;>?U<6DX_{(yPabb7-_OOv??B9f(qMtip&OP>al|h4}^9v-0hU0s1>k zoSI8zVRD5`Ftv4VW`T@O#U`h|55z`bM;Jh%m7BzZ$7)*MR19J{xl`@LT5Xa!V_F`7 z*j#!bwC6rIaY0_mf=Z!Uv`kJ(EsW$kqoe4W@Yt-fg(b_X&H>J^s=g6=CJe>wvYMNi z5*|OTq_)x)ms7I5x<=^9uBoZEW091M%<sT38##l&hvFz$qH+xomsUE%`UTNMq9IK zd$eh%ijXjOra3)=nHY$hF6gI~2)Py#$TZF5+C|J|6&MnkSyNV0R~FFg0ApAf0P{7} zA~h3fCWNR>#7`?3kcyr=LkV33*aIP@Y{xXU$flj6MEn-mPK$BWwlc%J$MCh{;vdS0K$$)0d zh;~s`>{+D{sN5wBz_i-3StWJl)hy7;nO|AHREB&21=&8m+SVEbpI&Wi2}ZCvm(`W! z*Og$|1@9tkB8;^#I%L3}oUQUE7}qUZh@r|@P`#wKu4Wn6TnKL9XHHLiTIwpdQIFs0 zqehl3u3b=5zO=4v$(ZFORoR9SJI8Hg0VWaYge^pGouKEmA$hHIK9`ppqb}By*o7GL zF~!5W6Ml&6r@&Eel$VzS3V%k8({SbNK^7q4ehIkIqwR@exL6>9>kwe3YXo(pFAh$h z0yFo8ve<%J7)C4TIt6&vlfT2vr7L2Mb)>0B|=m4fMT2hu3hh+$YvMt#j-vIAeJP+fU z)(5=rx)6iyaT#FwGm?3xbe)NLmI9V-$UO7=;Do^#Z?l69g%@F>#ZW#?CQ3sxopJo> z3_iROI(uh+{#xmQ#S@2CxK^q2r#=!_S@g!Lr{ahm08(bB?Jj!B!8Pl34%u%pHb zzC|)UDXyp`ZA@E)v`Zw3dd}?dh|9A@QV=#Ejz5h|n_^2u9Mkt8o`S;kZTKbs$s>l@ z+4&^@?N7qoYQkHv4d3Of)We}jL6QmvX35BT+GgCAt=TI)8gtSxl^wjMJW8R{`n}c5zjT{&b+z94w0_}e=It@xte_RiC;ZC1y%?}#w*cTE=6%&+rCM@q zrCLu*MlG4d(~`$!V+R(G8e_^yX+O067_HQ`;a4N|z7_F#;R&ca+p-C1{8>YoDdz$a zW-rpnE5dBYZ)Hh2j1t|(j04?pE%J_GyYiiM+v~!3i*}Yp86h0w;hy7t!C}Q%HMX7{ zbnz3&!FUUnT(QE|a~tB2XCbzYXf^ojs;m7ld#*2wF=HnBVbV~B(uVjKmY^4u`c097 z*!c%7^K)aWHULc9tSea6aJl!D+Z}E9zP?39!LFy~X3cZVHVRsH{HpE9#hEV@pLxGx(4ay0AKhe}{N~+O z^=Zqzy>I?`WkUDsU-&v}!_=gK5nn%b`NAV>8yg$X7H!+vZ%JWN^V;S|Upe(k#IA~- z?lL1cY1giK)y7%l?9SQc?^o_hGIkn8XLnw8r0u0X)qM*K%gX0C@(wf|{_5*9?d^u| zmgF~f740m1dG5}<_QqrFmp+%D-+ti8nZE8_>mF_1?~2>@?9wHDBAS2x2k({lH}6eo zPCvV|?NAHWKU-c{*fYUlq!+YgWo`WGmDxqc^94Ja3}4wlFJCZyep25diL>Xfo85Y# zZEs=G?4pXkkCru_Zfrlf^Pb;%V?3VBQLhe6-?X#P-SgVKC6inK^Yg+bN#6U`-*nl@ z=Ino5d3E}-+wT4Kquvwm_DauczPS9!#Frj>KH}`Puq)_eb|!anU2a&i}aK@UgExy!sCx_N`9dHL0=j(`%l*?Xhd( zruO#DfA*ULf8BO%Wo6HV_ipZc@Ij`)N8?R5zJCpZ~+H=*TnGbxt=SX8-VdcD>>`x0mH8$roetzO@ z_eEJ*b2sKhzWUd;w~K}}f8KZ+;!xkTVdIXLb~WJ0k@WPxeRO-lU+113+Pzn0(vt_0lasw?w#~k(?D-uz51t;9)Y#tGex^Cg@OZD? zF!AlTi;IpOaG!9k{d?njXGHP{PqL9c_v@m~`Op2Tti<<|TPxpg88r01Pu~5!@T0v0 zGIKuN^Ky1}(Wc5GhxfMv_~SphbMJk~k#O6GuNc?vXlZ%)s_cXJ|7_i`ArG`P z?>L>e?dU7>4mLjDx9wo|_5XNh%BD$~e;XW~v9hu4$mxggJ}+k6#6iZU*^h4?;F_e) zY;woM&wa1$(|13ASLICEiLZ&boZi?3o2^Lk847_Q&75A9u`d zZThz9g@q*vp7eFEe6dccuioF#aL?Us&*rJwFP(buCl{`CbYC?Ijr;g)ue-77;GgEs zE_$IoeU~?}v2<~D&msMm{b+_tZ@$0Uy{l;Uk%kQ~4H`Q3tShFMV>(&UgR( z{=VaXn^&~Q9sQDH#ch4|eRa>hMYGe-Zd(zZ)4s~no{<#A_eE=i=!L z?;i2Sh)F$r=jIk|I&yGpY2SIyHwu$I$;s}WXCL|Mnq5tK%{z{Smz=Y8_ zUHit#q?>U9*s-wkXE%--m8aZ=1;r*x5)$GTA`RL5eCq90s`1Fv1qLP_gPnVS!6*V**{;=?yyl=i~Khjv) z^A%4KrjJJ+&1;X?nf*mh&Za+JT=VlktWVBNC|%O;(AG!ZdFNRAyY3fmyz#o1w-w}l z<(@cqO7_baCHa2UcmAHzTUYIw^V$O$)x93?)&A&`WeI=Zcqn~9@inU(HgEQhaKD^r zG&Zk2vLrFt*O+j@ExS*x`(Wju`6pU;?H+q3eeD+?-uwFNWs4RMXmM{4Fik3etN`AGy>4=fHp1QQzNLhYM#VhXQ$KBPA-~RUX51Wo$7+H9vvEAc1@_NrF z7T@0ZO?u&3_rj!<3&vl1+oM-q*t7q_s$M(R_rLRYRJxk(0Od>b~}+ zYjY+&Hs0{ejEQeKx-X*ap&PHeH#hgs2iIMH%a31w{q@Mo744_nBCGRS3JS+OP}uzJ zqmv?y!fo5K8a8&jVZpkSFZ4`ExarY5BhPM1Z*Ff~clM>r>*jygSaja8{_YD0_PlwX z<0|zv@}I4Zd~e zBj5b}y*ah}lNP5REuIp&XNQ?`G0&a9ue-#d5H!o+M}Vb1}PUu|pLe0F2DW9`m`>#}!jEc)s1?^?IE zB5&`hw!wSOH15c2Z2YFB{*Q;|KXdgbX*=5sjctYAx9=|g$hdanr{m66y9)ABAAHPc zN%++huAKC(WxmpwD-S=I?Ag4oM{Vu6z6;83+1T2??Wb9d&GnvD?=C*vH2Y>Bj8zBioh?P;DRHcH6sS&Unqz1xmwpD*)$GRA!{x?%0F{_=48kyR17*)5M=Rk?F*&astC`X>BpT|vag z_aBb<$-HUm+Q0Z7ci(l-v5gUH*IfR`*IPH#Bv&6;aa*sl*|#jpcTKvYu|*|T7q9#1 zCs)oZ+HmV_5lJfj;1%vod(SkduPJORnH;%XUE0>(cG}~f=NUJ8!2|6rkvr>`*4=n~ ze#wpQ3$J&iMNDrQv@T{=nQuw1T;^-* z3pdT)Y4pFS@V+-*d#C@bH}3e{?U}de{=XM{b8bK2Sv9l$KYu$pEB$o&h^5;WPwIYV z-NXO!&`+j4+q0r#;mhuRFP&^KRC53FUYj3i+c~!}>G}Jw>fhpcY|uqLFNwG{vgz2) zb+29BvMH|LPv%~EWo1%za(aAn-?zrTHTI%{Y6DF;x_sRiP5q|-(U|yNOwv z4lQfAGLd~@3;KOi}TCg*?eV>=6jc)|Mw?Tjhd^k z%*-m-aOiC114}<^D|q~lM?cGMT)g6DqoUwcdiJ%&{mV9O{BHfnr;psd%P3glJ@Dgu zG74JKkLCTfVt{9-WBsISuFZbx^6vA?1}#6BTACbr=S*kL=_@@`if>gJ_w;@J-r~H6 zf0kJJN{_tdvoBc=lcC_TqP4i$1eb;@8iflUi zWv|K$oEtVZSM)Vb<`q`BUpW&$sV>1csBC@NZ4Y1fe6oA}|3%rG$2E1VkHhCAISEOG zBtU==)+#7f6a*BiXaZSSToNFGunCxieX#<93yOl&YHt%D!LSIlfCXzs3o5-@K>_zR zVNo`B63ug)bFjNI$cahdAQx{2S9OZXkt zzcj}MZ#`urCf3HqC-?e>hgIhn6hs+b(OFX$+Ruzk*Vx6yZ>>L@2QOYfrr^dnJgBLa z?|S9S#^1^9WACQ~y)5Fj7+Zdiqr)L1ip~GJ-npB|ATpflkDDw!+jgj3rM@`U5a+#)BwV8D=O)!NMicQ-?b98{n?`j7(z@c0 zN2XW`B*cP3BYyDKkMYUna#?wZvVJ%5^JihD1zE+-GvS6_+Xk*5=GT{pMj;2a z$9g@iZX~KP@bPyXlcK}C2!-bNUB}IyB(7RWgYNXu){m$O zDjUuo&d&C*`?xrL*T0E@w4&>;j=LRItvnmi!wSZloA^tX_j}6XO2p+H-|rM* zGG@Mb#U~r0jUW}Ffq=}^iE3h`sS3sT*Wz?K^kWD_3b(f4j}vzvIdtr#v5#{0)^WGQ z+$O9c}6q}du_ z7zr|$vrg!SrnXd+6>a;DP^7GDQNY0~EG>FDDU-GBpW?CU;R*$P_yD_p#%kr&4Tld( z^Y$ZSZ%s3v1j5b==JC%rQg0tOgN(frOUtvCsT)XC7YpKokfRVFirUz^1a z8$;sQoil2hfd437kkOp=;rD9z0^!hG#y7OW8&u=?UFqtH^OK{bn12=W*o!)H>rGOA zXJivrVxXA_iAaI`88b4F9(6LspguUibe7lE9ez?XoFqNfWS5P?5tUT=?FvXdj%!=yVKB#Gjl z|7;0gj~8gYc6XFByeB$*OG=*L7P)#XG>*^4g=uTzR_@p(lP-^DAP2|7D-;h$O50oM z74WIOm{7~!Cz&|`@gC%}n+vsXi8AG^($?25B&MPzCsFK-(>={}3C8$x6wh>ZxIV7` z(YCRCp)V;&`?GcTUTo=W7CrcUYEe~6LY2?ho~T55k_bsROE!~FOxPk|T#MgjIyjj9 zHfmG;niy#sj1QSmx^LvHhAx>ik#OEuR#iU69$s0wlgi?)lM}J=F{L>dj@?mA`x0_O zcCB)yNq74VY+fGrFWHA>Nu$~Z=1yq9d@(_?|Fu>H<&CiDWXm>jUuWT`Bgp>h!(Dy* z_+!0U@T``D$V}$shgV`UxTI82nps(^NG zn-QrrH;uvEAMp`e;H)Nu#(AC9jXbZ)54qX(+sXSvjCJZoL1tQ+-R4iPKN!!Ya??x` z!B1Tz36qW7ed@zqzp1a^Ix6Jklt#bx)k=sp52e zm>Le(nR0HP@`UO$uL-pe?`7|DXKM5Edvcv0Fk#DZ@f54(JP#9s4{!OsMdP1zNgE#s z^J85*3R1Wm@+Z$Hs-anpf57Gwsyzx!Y27*NF-N4=M-`5D%$-j3P?7?JOI$Oxu{$3J z)d|5giM3-Z6-P7=U@cxOhSi$$?KU|qPO##2&Qr)HN}ILT3OSMAUl$f>0G3WTH*S~S z9vBNcbAo%t7HR8Z2|W`XtuwC}RUB-EsdO{auCmx6DiZc-NPol@RzLuKhl9=qQ@)u(;v*{)L;TI%)vySwbKD=l^Zk94vA;l9`|y_#=E*Ss)1jpwaV(? zpql1bb4uF2ku5&6!kYT48$D0=T0OR6X1x0Ks1rSz>d@dZHp z4IA%Yl$W{vi-Do% zX}(G(&A}m;bENC0Vp^Iv*@jeWheXW8ah?5=eWJ>egh?$CXI}% zE7I=@x2h6(;h&OueVa0`EK|$nnoBz!>_krMN##myKUf|LNsozqSwDM%&7j4~cYVjb(mT*-1+_^I3{Q_K=orb8No_InQtA^XbY;Kj z!$7m#LoDXUYh8Y9cN@0paV8LY$7Mek!(C5`nTf01+$LiXn?P*vpBj0R`gmDc`uz&t zi&s;=4ARx(*2iozGvhTGQ!g{gK_~uX^V^K$?`b=_Z%Uo>@D69O(fxy;w7*6a(@ka$ z;RAzLN7aINiMpW(-}BxKLcHcyCF~X(a)D;dJCVL%`{{Z?44c-L2d$tdjfTq;r}u?^ zqe#~hsQoMLbUebQTW*yNW{y0|?(XhYwpI1BFEdjs@)Tt>l_p8%w>(oh<%wv0z^}+F zcs(qQWEM(NH_~Tp3QBFQW%X|I%3FEVJu7V4`4x!`l4As@EE;ROJdg8xtCL?;ia|?$ zVF>3((ah~Lk&o}36*oF4$A+r95*aTvkZ4i$U;w7v%d3|ec0|kQwCFrm z>o27t05hFfqt{`hE47(| z8nfgi0rt|wJ}=ouV)2EoX&1m-KuzE4 zQ7w$GKKLpq=<#u;k8bkG#zS?M$)(N(-Lu*e-u#khz@hsn{&) zyc>%D_qs%J!&hK^yzQWKo4W4S;P~;xhi)Txk3?FsbW_Q7l0d>|4!5)FuKZ{DnTw&k_FZ6k*I_vDSVCSN zk2O6cKt8*((qfv4T@8Ik1a|*$3TMUbU$1!6$8yblEO5VScjuN)0_? zn)Tslfe+%(24dDTmLnDLaWPI5XIvInOH08^0&5iG5{MjGw?6PnvBTDMZJWhs-7af$ zGH-W<{ql#<-V}FCdJltF-J{Z_X&mLEIR0+3zgb&TrKx% z(HQt!Y`CcU&zCi_8K_@7Y^$(@OE;y5fd!G3i-UvqpEJA9i>d!kT~d4DoEMW_u&v-H z>9^Nh(-iWgiMxgCOMHJ_Rd`5f$Y0^*uHN*cEk3$tav3$^qAUrSh0ij@LQ>b)9xJzh z`6!r~H(DbMN~h-xDV~UJB~j|eJ(Zf&I` zjdk(-{|J+}b@^FsAP03^jd79evhn|9v$#=S@4hpe0F|4{wuIj~+YowOy(?Bw!`2a+ zn|FL^Jk|fSQx$j>EOe~x@U~ayazF1bSCM(L;>*W1DV3Ff^n%v{!Cb44o+frlCj!ldx+lr2fVQbRB&zq?T<*i`^n9#J)40iaA3%D~Man?G~1SiYB$nIi|*whT(^H8YRb&Q4xGg&$LRRHIZtq8*;G)$!O zEd#9a%~jRBBat2}dDg^(WW4H0q>K84eYPX`(ow~vM*L_}@U`sH{j9uzut_@g*zJJk z$()eif){MvJ2Bu)mrVXbKPi=g4jiM#}!-^K8Wn9Og_g>B%&PZcAj2iPNR z!_K`q)qW$_BI@o%@Zs3jnff^4HDzp6L%WKrzP_j4#;__i{_5c=qR7bdPEQ5PqhpGa zo3#cDiLo!1(sK#tl+A)T*N;}+Po(;9S+J?nm>FIQ%_>5mmYUXpf&I3QnajxA?^Uj> z57#udWQV;nI<(0qyLD$_$WRdJ$X%LsvnuRMMFJx|W1Z>MckoDZY$KC4MIy*4CWI|# zV+FMHAVMO@>B;i!GHwOFiDf!{%JSievio}fzPhMmHi8z} z(xt0Rj00ryJ1Oq5IQF7lj9>YxEqLS0*N2^})i(;&wzo(96wk$r~+&K27ES)&=0KE9~q7)w+N=51j@-!o| zINB_me3{4Qo$^=`d8GStApZtKdSN2iHK$Qrz#aV+Cko$K%w!M-^#=kq_<;}wecO7C0RII)`Px7?Qp2i z8Cg1kRW~JQyrj@nyK?L^T-RoOFqpXgR;)rf{<4-!(JJs4_jNSnhEpG`xS{q5OH-uN zA~*PjjZrIpPW3AgDyr^|_e3`*F10Qg9P8@7e4Br0I#HUa__@2ii-q46-&Mg6q@C9t zV2$u2eyL(xHul~1{!epI(V={u?$*kNTib6&e(ZM3VXH#`&vd;DHKcGw$Mh)DSO zzH6lxb^GMl@>4bh^nRlA;d4m+mv-+cVi;SUMRwqW&zLo;25ZzUSx;hZu+OVXf}w~E zA&(XQU7hJHH2sstVfh4qk5r+mFdgdqN#}go^ON0DnLH+@uV+Z;@h&u0OLlang^c7M zo|ReHEUK3??iTO@&%PA6>)7u`#$LKw2iWfJJR#;0nbatp@wxo7^kQvA2)lSkP2aOO z&R1VfY(AjPG|yLzM6Mc=yG{CzXiOqM22rctuo8;|Nr&p1~e*rzIfE;|w^7L=i-9*=dId;T-+MOcJbn^!v|y~ z?EBrECOU6+xN|t`nK^Aojo^Hh+|$@R)#PI{KF|D&;+ntX;LGmr8;MtoA6Jw-iOIs5 znC`KJ#GhkAUmeSTg?HOf<`lWR-e2)l(QihZ#mlmnnuy8WHSC``N7qrAq!-Zzoc^hv z28j1sBsGq`L|xUNL<^8SrwclM{@Uzfx)BRj<<*1RvjJCi|W}2KBUB<`b(v)p1$)bfuHx(kx+f7j3Ef z)&1)Hx{##Fn23Dg$S%fiXu&;B)htVW&|+h!g?#TK7VQuFpjkC6d=b0S!^p^=BOWiE zxx`H=-cqRE^Xc`z0`X+>5ZjD-xuhjBP~NM!$JwZUdM|4?!)OvvfyU1EM=bn!NN8(&MB~k_qbZwg!Z;QhLz@@vhTK_Y#fNlZxiZycX;hwv9no|ij9E=?}rj7y?h;sjeuDhf;U zN8a|t1+V0R6~re;58vVSekt7%*F4G&msMkeljHZ0Rlj^ne+#w51@G`=T+ZrgvpINc zr7DcfaG=iOllwTkjatD+=C`5Pw$@r@%kPshn&{XMuid$*L%!=p{(#mX zjm{BMZ9ixA#HR`UHJ>&lV!wJ?9gOmiA;QXzjlhH8^xuE zl*I02yyj8pLVL;3eQjfi@UEyynjR}C&2{luarG!om%E&w&zPXhhBIC<;>N;u5A-Ik zyry!Swf-{dKvvqoom{7V$WgXcl2To7%HbvP9Wtc2bC$i#%VSE>DK;ei8S0L4GIN%G zJ*dsuYE^7ug=j0)j<+-kg=@d;Z3IKITh|^1IkZGXAhYbTs{s$R{3lU=)N>Jx`t4gK zwxOWlWc1cit;r=OOf%&KP`rpyH*rr>tp(Gm&aS4z=cw)uhbe+C(cgwy3L1R)0X%u$@4BuVY|}=~pY+(~ z4?HH@uiYN6+{F4tLOAXdanUppE}C#II`)kz`(1(Y8iTOt=#+tdyvsbFRm*voWwkk0 zKEL#zw-IgleF-_x~tP z`q_>U!irRfAQti9K-;f$IbJ9A{&ZAVyzpXp?F1aL`j1*=abgI(C#L&0BVG7))j>zT z8O@U1+HCh&pb|{(btsohS4Oa+etsf4nqSvmmdy3{`h>=Lc|p^c20bo;Lt&}=Yn6ge zAs3E~(alznW9*}e-k)wXJ*Zph1y4&Op702^M_>4w`fuVq75vKLhecr9)-ii}HQCwc z-z=hCv|13EVzMq(;h$o2?DD%h)E3= zD1MXNV{vEeoXQCJ!r%OYbkz&L9To6qaEl;TQCQd7rw9K8PGvWkTi##Am_P)fhw6BE%W%(v=MPR0b|;+K9WWo#Cb zeOp3s2OD`dBh8P`;Y~;2#p2pmIy-q|Q1FU@VJYExcQI4Ee;OCg(0u*a{W{g6ZEzA7 z$d{LUL#L>fH_V($heg50q$80|D~F}w@ugBlmF=%FDHl32b39#It#mV5aY&mDnMKdp zeJpliaHD7_{R2bJ6aJU3nY>|UI&_InMHrrOtQLn1!9U*yWN*$i#Mvl7B~YTo`kDU2|xJh%EVS;H_yp!fl@c%S@I9TQ(eh z+>>rOnpFcY;2PaM>ytQO`&gi5g~WW9RQN>jA~=o3WWW^PAmq}Mafgb~+T!WZLlWn+ z>M(=AFwToVhZuf z|PxH=DkEOtdX>*)aXHLlPt$zCbywQ&dWy zHfxWP&6Sh+`A7T}gAPuv*%)BwWk7Y^F)IM2X!;s*c$#O+5BMi!VIS6hZNM`n(SJ{q(G{?Po zayeBbOM-=$$YwBXni5{1`KgoR6YTa8EtJ*aI{9)mux?tIP-gl0<<_>4QsTST^Ri~b z4*PZ;^T2CD^)0?4=)|k7M(}lz>%OWqsR;7DM-0((K z`CU%f0;?Zp3fPQo-&TaOY-x(D4D1$lqVV6!vS&C><+EGUxPmC%_~*DskBj;Fk3G`= z6kxZAQ)Zz*zhHWXf!v9 zv+u{ly-M~HlPQD!kAmgfJtB`dNrn_l4V7KID*iWAv)wE5ww_)jvW0H8795~a&3(R{ zbRaa9tJ=p+*-u6tZgK(?7q^<@LWoS2miXh>oC6WMnf5MrNbK=IzG8e~eDKzW2p5}V zeDbJSZvKs&!rW^7^29s&rW0aFXuldZrJ0Ln6w?CTKEAQM z^f#748ezvm>2~S~g*WnV>JvNOSkctd9*uixFFe5a3140#J!n0&j3cz+e)7Ns zj(iHMS+5tH+1Gt1sOEmk-Ej0yO!(Lt-+a~Uhy%UUmy7=h@g;2b_NLL6x`xpQ#tdeu zk_(55if1(IE&5o3dilNFN0D{HFUt0A!7$0P4|Zgj**uzPm1v%HC(8ZJ2-;`E&lqCc zj#2#dEKIv;T_eiyLh41IaJ*Tg#nsxn^B%`5X$9#lrx0<(kmBxe(CQ-Rmf@GpA*G0e z=Y#a;I7Zlljf1w>pxyZRW>Za3aqiU$Q1}xJB=!s^^mlF=Dx=dD>H(Zm}l>zHM99cyX%Atsze*1 zOSG^1o7gusGES-X&rv1#9zadBbCS%7hF7)kz2?vE3&Li7=gaWz**_egTh?iEURG+q zC{ek#^ML8y^tH?B__KTsVr)3G_`_6ONQH}izrB}i?B%3X8Stk)-E%`%?4<%J+xB$! z;)1)4l91$m&nx#2|cMfU0enyTJzMvy#cO6RYi3+7TEe9jE z>PB&Xd)IAcsyX;-^gDBhR{nUfT~}e~i6LbHQv7=kZWx6D`%RI z%eH2k9M9JfNw#DGlL;${{4psvKeA2-yR;TA;oYZe@!vB;!u(pV98B4zuFWvTRj6^1 zelI$N!+SZCPktq9*ugRT`nOSS8m5AmRTCiFkx_&@OCE1w4n-**U(!mm??>R1RKul9 zV7SHfQrS)lcBm}!t8riaBtBj+eF9%mp_0^ud;g2W-K)?IFS|Uss9be7x zky&GDdCam1*FojVAflP(_sUS0CAYR~G)LP_1A_%t3qI}c(ETSq5O2M&Ld&7N2!)Z!$Yk`2jsbbOtQ*^oLkodSr;Y49;LTx&d}Eo%+?w! zKI2LJ?+mfhCOb?U2M%+@Q{}P<-zS2#B|YC5m>^<7n&}VJ%?c~SXuoGECFN$ws;xqo zuR`yi2zA2yab8YFos7ic+anX(@H}ejU0uFl!vCQ7zRs?F?dYf&!@pTN;?({57EgcI zG(@JFI9Mq=dh41+e$_#mEk^f9cdrQQ$DNWE2yunYq37M7B3#^-N2d!E5AM1hDf0;R zX`r!fEHy##&2nGU$?rJafQ#}qSp!~Rt>f)J4*de7is&Dm4XUIOLVI@9a7)?$k*m*SZd7E&LSDD z>tJ$kgCM5RJ;+Lp4gS3#%sHS$sZB5Vyv#{M^nVu}e@F>uF4mMTN`Js9={+)dAe8)@ zKZb4Svt97DPRa_bqI9x0mYDim*s@5^lE#OFFvU z73Zxy^bpYwU>lf$(hSjhE1ck&h7b-}NB(;;tMyN;xuC!~`iJBlewR;MUvYm0zIXXa zUuo>mDrbd8y-=)96z7)3uj2W)WZ4BO7-QD{Z(eRGc4U=~M;b6?&fP5nijgS2ET#d! zBZ6(q_YX1|e6<2^DZ23^m+kIzTIA~R^2Fo>y)Em})lXM+cn>?z=tV%o~z8u&f z_2!-Leu7LK@G`Y5;;nk8gYj=*-o~G`hgx{7{6CJ9>qpIM-N{1s?u>uSIr}0PaDSX^ zb21U(S?`#>wUf?vy+Tf1bEdIbI_b!UuoT%V)AmrOqrJLS9jmmrxRLvha;v`xKCaxb zEUU51hv{RoFlh%q*UKX=6z|7saiT?$*{6E;tM&@Ugn>H@tq+Y7HKTzGqcTK_dskrk z>6e407dU>A^|qmoJ|EU9shycdWfmGmBH>O_ER|Y4Z0VX3&L0o`_={y>1)bq?&49&* z>*f{WVdzqLA&oGwuRiZ^hZJdW$y|jVOrU17jQd ziQ+ej!kuSCg2GGJkJPh>ZM$?u#3I^W+TbE@N@fm+gSYg^%std8 zjj&jYuPdEU`dL|T`Ub01$H%;>=;U}lk0?orZ&li*J>!%)gP%nujVkWvkqp2&r-PuuPvi!)FaGPTRszP=jQ0C~NVTLGe^a-%x@V|4Jm{*MIM7a!K^{t{Xp! z96DFDmnLeV%&#LewFObQgYwji4DzU`TKxn8&+BBz2z)fwmw%PBtSsi^mhgQZ#yfB= z&V#!1OfH`j*hURfRnR>hNCm>Lb0Zh%9{)*Q#PzG~{h62MHl)c~vZ+yU&Y1tO{a&M_ zpu^?1^lEgx`@-{v{;zT!&HYOgD`ZMX<<88Qb7ycxqiv0YZnuuVB4FTYr1QrzjChNY zsb5n3rq1Wq406mCEUhKRHp18R*Sax$O89uV5>`9jcH?lWi^%3aeFKBnuP^H8t34;j zc8-@V!pz*UxNS*$tEml6u6}buIAl$rg8n40AMLu27k*V0KnLF~u1NDX_7547XLuUw z;zsc1!V2=Klq%{F^C0IXQ@bvon&N*pfuOaa?#_(K23u$~Q#VB8CElU$Mls>PBSYVE zH%GSbKh%HU*4!i&dd)5iI&Y2F^zc60Xyd~lD-9s@T79{37GsuhCoZ@9JF*xqtSXp3 z-#@U2#Y>K;cDLl%#(W#w`$*8wq*?sv<`!QzLezAzp56-`rM8i03OJ@Thsdvf=`Us} zvC2b`$a7D&y|p*9Z^b@^-(bB)ktQ3%Cyw=h;p!XlD2HR+nPZeYDDzlj!e<9`cOUxk z_I2)S`odtGVfeZ?_i3m9SYftRTS-2aJQ8-?)~Bo{&L`xX2T|qq){ZMzE8@3r+g_{s zYa2n6c>`6wBPj6)UaTid{BD4-E@KK&{Cy%wZ>hEy%OA-t|AsYd0sWjDo%{N zf*TPv1rq{qietU(Iwo=Vx9rc(DR+(QXBs<8#KcuId}cnsAnf8`^p_cM`RJyCd(R6F zLewp+(Kge2`YKn4ptt@E2LmBsbC0m zmEff=W#hds&jrUR-d@R8ME1Jhu=3BJY_H3faA>nwf4sS)Op(kWdM7H(E$t`zQsGm6 zm7GnJ1?A}$M>#E=)2T5HWywm$TkWsxeuE}tlzHbAL1q(c61a|G=0y=)kowrWiDS(1 zs{@_{NquqI)bIb*(fD8+HsTV2mabTPtxL3@zsmLH;Ai+Tf_f%zmD(wca|&^B4pVpJ^KNO+Skc{y6IF`Qj3J zN`-RbfugM1^JrO2f-ufIER|vWDOjH_-W}qi$a4Lcub*lc!QXqOLGZ@#`wEcFuYq(^%`x{PTAaqkr{KT8iEl``W6; zGvFa_F?^$|Jl)#x!z?X_G%N4b?nRb22p>M}*Sf5yiHlN^5lFb^M7Ng=r-+N+YiJ@o ze?U1j|nT+A$-36tg2XLonj^+cl5q2h&hrX*@oOQy?t)Wg4uJ_MOc`lJU~xKP&-Ht0@#|?7$YA#<^rs@xTvj)&;ONe$7C#Q+wyAxumxa5oqWcu( zrKi(aush>t^OA%NmN_QxBB#B-G;Qn4T6e>UL$4N76{0%M7OZdI5q903eUtu!A;TR7 zX=+7`O-d_^)s?75L@o`SNAYG+pKvcn2M7%PyC&+s`nbTu?viPzQ`stC@K$&_$XA*p zK5vyjQCya;V%yl59_fnvqL<-#QM^w>bzd(VDNrg?QWa8luD8)vM9#gWxEE+z%EjWTKj5P}dQ$BX~a|sM9Tc8bcSFnAj3CDSo2gxB=vys}EXE^e5~o zq0?d?ZCzFP=?PU&j3tl9s8tC6ZQ&zK{So}&>)O|nBIMe^ye(P1K2Au-BxGvKKeDhi z_^S|S+O%Lq^qtcFCz{Jl{glMsvg`{XOOuF~hqZGW{FKi^c<`UEpS=;#w&~bx4z7B_ zDEeQ1R0_j;3oDIv5~q2W9%)NmLk#5Frj)W$)nv+jskCEe08AhhIc2QK-N9Gf>N##p zshJ%PeXLd2{q9_6$ib46l4Z3)BJb%zR zQ1aV+H&JWFPxe%4zfuX}E){*=*P+SiJ4`p(dcVetJ-W5>rxA`rN`Ve%wAnG@^iY+* z|4Q(GD`0~JET-6h5qP0n9H6^Oz>q08Vt^3HAh6#7go7eL8G(qPjE9mznE?5LqXDD> z93pfJlu6J^P$okkgYp7s0)`<&hz80=&?dmAK#M_{2E74CV`wcFhD@NPfNu&_f+HP5 zH%T&sdVtg%`U%)tK;W195Ci%e14EWjJSba3uYlAJx&n^&&{@EDhZcY%TYCv6ZzDmA zK$K+21soyB8^n!)4uP@(R14xZgwBC73_Su|dx!yJpe4|97z=85gK?ntpMn36pcjCH zg@hOg)DncjKx?2V;Qs^27K>^w12G#xKVfl@Ei?=`Y;8MCUXO!tz}5f?&|e)pa3p~< z0^5dz8ZqEHP(U<>&^QLCzosy>5ZVmRZV_}4i$Gq`JBVG|0h4Jk284uxKnAWmkYgbB zWx(GBiqJn1oC4ZB^Y~X`o-vor>%)H~-~rZq(fgVs-V5iv14A^;Gv|5io0nlSNgsgT zCB%LL7&fS@|4nltp|yZrL$1JNgZBy$yAF^c@5%qo^_9+5{C~Wn3{*6i&zDgHz|iyA z1)VUte2$ol@-H9nZS;zInf~PdwnhEwDPWG)qpwS!&$&mv&aw4+?{(1={4bb`5jCIl zr}sPO2OQa7b;0CjAj5z*MR6{n-Y_7c6k0~pdm7E>IA{Q%NBjf-i$DeXo&tQ#=cu6` zfnU@)+MoW3@9TSC7h3Dzr#n}#UWfgt8z!5hvHgu`sCtChMOR^R?0XV5&?hu%wD1p` zIeYzaPG?U3mn*#wl$uL=son|d2x3ozdPrz#4#9tmT!YCA^!g|V4TpUku!Mm6zX=u3 zYt7~J@#!_uvcA$eCB5Ff94G_7`PX4`D7ZRUy&e`k?$B$Ch4clo{xTE5J&tk=fCvZf zbW{^9gA5p=PaeH31{Bc}I0A|O$Q}mX?F>i;&;np+0O8Pw6?pc5Mk9hY)7#>~BS3ir zCa(e(=%WFxdEPsy6MaJH{TaM35YPw!6MaIX9@tu7{4IK7Xq}J;Ks-S7VGj0tLF3lv zCi6Ks6+I310n+E_`J#GYhcSJQKE_ZQtroRK6Iw=nqO>hQRBkw*qh-_w9U!XXFrTC0 zq4975qH-Jti$Pxy29#iMz@Qrs-Ga#`1{eeos05VI1BMKC_Ch5lrUrxsrp5~(14Ba- zQ#1jI7L|ZLj|CS|e`lcWjNTaRi8;v}4O$mGYV{&e&uw6Xolm&A1a1!SXm3U(s0Etz z%{X6VYyVp^$3~Ud6aOs%C->gw=nr!pd0rV}UjhuQ-bf2dsPPcUiD+Y?2{ip1K%;Mf zb9L*v=!Iq<{ShWJ-s_?Hd_T}@fL6bN%26JgP&wK-@Abi@9YW>r8xZBAjqzTNhu8&L zAV+yyCSV+d%p2bzN%?a}Y+w+A#D=u(iQ!2>?~ zjSeQC#;^c|CbXZT!x0uhG@<>}7$AB-H~?G@a5X>{Ks2G32-QJrqX9(i(THpSegM!B zAnI=gKsSJ>?OK2=fM`PP(c2l^w13%y&FJ*^=R%M#2Ke6I9h5x*{?i@;M2#34(;B@w+NKc7?%M25FmPW(Q|YGhz{e>I?*eS*834a zwC;5PSzut&2b1$apPhTE&gc3*fcAqqMEmwXQO}>ZLHToOUjH9_AVbrfACS+H|InY~ zLF}9TFxdg{|F)f1{ag3FE&ETP>oFG(8pnG@kk7~Q7Yn8TAqMy5g#nmsg|hUbIk8>^ zJ)k7SehO6V^yRr=KyhA#+Pp8bOYgvB@|>E!5^yg8&bMGt`Cezv{5|z|uD_;pzEIu2 z_2*RHo1rz$m(fhGI(IUEIhZ5gOZEBuVa_W!qV)Sy1OEO2`g-SVQ9q~zJ^YowH=TE) zcLU0Q<@3JgGnD;LYd!mKncnMMD04@>qxZh_Zs+O)EWN9_dH@e~3-B-hs93K$Cz~sx zM^p*T=FCxx`O;i*PJl}F5>$xF^$hmdJ(&C{`n;ZJ=vDqnzV|9+kjE({E$@7 zLkF#ZMl~Vu2+|K~Q64&e1ss$$Z;xuA)SQK$kIM8q?{!hxTzW5`(?<2?5-Odq9}P>N z{z;={Gy(hnMqq|k{xVuBY{tfCHNJwy6EQ z)%$ZpgVgJzIqGcAA$m?|ReIDr07`$yqpuC9q9$ln^Rc2j`ZRZbXkBQUH`Rymw~F4~ z91ryZT%o9s3w86JK<(!p%$+eR1X?KS&t|TDQBv;=)z{nT?dELtm7+1t%jUvE(KWO?sc;037JyedPblQ6KvF&>WZm z*MH~wOEvEc_5BZDsK@v9>7zsIL-BokqB&YM2>BoR{KZ0RK~HX8|Gmw;{(BpJXs8=~ zXh3&9&0TQxs{AcOqx|bU^ny7Wy<&4$4bbd2k74pBbAw-?4BY8s)aSq+sOn?V=l?i& zy>ER`dQW;W<$n`8_BJq}%w-r1g@QN07*O;yO5ibglmbPNK!(LqC2B-l*z{Ha%6kv#@kVpnZ z5*`)cLES+6ebQI0p96rI0GL)_z>ETiM+gXkpdYm24d!wz;J?4-KA_|Sh+u$d{#O}{ zuh24@^n47+0T0z<&&zyJ9x6xqpbX|Sco@NgfwJ-mOkQDtTYw?qjbI{Th$Ry!5Y@l} zXS%=&V@$Hdn;F@_G$I3`8(L#c$V`Gc#TE>ofmI1ihDca4WdVU~OhU*;3y6Tmk*Ny| z0F5VO78vT~wEvOA|06f~ANl_e`}bE9GN;jK=4hgT>CICxB{G;#&;oq|QzkIxFCB-; z#?uMl>=VJ@6JQ3wX0Yk?86enCLwgn$i^CxZ=nn(~B9TZUk;w}d7#bQGQ791DU=d9I z@I&@&^$9JZX?7MI&}SGJCZXLF#)58)_ENC^h6M!3=EUfogo=T#UW{6xVjwrf zvcMW34sM6+p#xA1#Ddw-7Z3t>Kp#L0;aF%0wBVNz9=;6L<{U6_U|8)7eTJz6>x^W~ zB4{g^F!*3NP(2h2cY>)v5hR5;Fc)fo;@~bYgkB8Gpb>}%9f!8U-C)@6gpq>*IUkC_ zd<9*FD3~QsJeVl(Fn&-YB!jO(PS9Z}0rG?W!5*h__&OMTFNG7Kr(pf?1X$&~0S5if zm?SWi4}_$cuc4ce31%5sZ#9GhFdLwgP$GN_a)v&KQlJg+MhI+00N)0~_7!j{^bD-B zo`RC$AHbBu6_W-g0h^%&Of&Q&WR7ux(!nHS6Gi}?hEicIhGY;|c8mtGQxK7}N%3!FR#h zX9bi4g~1Z&J183-1e1(4a4s|rg+u>_cEI<*+N(EaCs>V+fHE-`p!?A8n6=O@Fg*&# zL_!y#T=*xj##;^Th9co8=zC}<`~XZ(*285(Q zu>*#NF~m@@7LWtX0APZ#fGyxfFb!*pu>i0TW?&c?I>rKP2RXy`0GJp%*bZI>Gq6?| zI{-^zdyGBC8Uy}k7xI9e04&5TftSGUuswDW2K)~##tnADIAI(xORz4GH|z>vDaHkM zf!D%L*ku?O0Bc}Zj4Q?&z2!lUg zh1XzMFbm!QdtujNSO5ZHHinJy#;~w{kO=k%;EVBt{ooMrN1GgsAAn%kALEbVV*IcI zC<+z=2*e0r0UQbYV>e&~03u)^Mu^#n5n#hW-?!t?C8Q-JH^hnLL~`Bl(en5r2|D ziA(aM_)$RnBSHXyBmp8o{3-qv0ZBlLK!hYAX(LHM5l}$;BN70?q%b555mJPdFj5$4 zDi6O<1l95?&F-5c{T9aWDb(T5{T3^HfVA5nE0-&;}w`jCzS}0;PF`DR2 z7PA(!p!G%e0GLg7A^uurllhLCi^DqCc9a?SRXnm0v0JkPj5df8E zy=S9mlds6D$*aku$#d3o7PP*I4PZ?ZO9Vg#_JV6;P3$J`Ce|!#7PP*|AAoO@ zp9p};uimfGuPIpM-{jxKZStG-n+2^e5&{Tp5{Lk(z^=TFf~E+Ouu0gou}Ls1m<6pb zk^l&93KIcPh1G{OhBa*!Ntz^0qNcFfuvyUhqF4YCO)(+>s+jti#+asLQEXG}|6}Y; zpl++GJKweTKKt~2-?!iCJB!}#^793+wsE57oPj>F((*_ z|KNMi9_?6v2pA>*Fc-(J>m z>OT#s_6xO#sC~sY(9mc}2L2ZDHsJp!L)yU9My572Wl)W&A^itI zU|f6_~H zm~Kf>0P|3$tmfNqe{O!~+=$D>!|Z?Kcia!)S*v)Ib*AxpWN z@pYuvb`sc3`o1|?=%sDoZ<{gjfp2{IMIWA@4!8N*$hSB867lO{IYC+N`DL{$y=`P8 z*xH2?q0NAgY;Z=HswNv~`f!3L7$;xAKZ}3FD}Mrgu9<8whn_{p^N~*<|08vl52(jux{8QOfscrvmA5~iCc=E0L`FK+_q1a`a?p!SNyv%90ei{LkL z49fr9%9iX2j9WLDLe zxMm0c0!8K$^=z;TwR*fS^TjH9yWl4g0t0do9Uu7D4N|ACdA{&$0F7KEo_YN{2<&hr zqb^xwzDjQgoq+VHr--D=hIUn!%oE>j1o)c`{Bf1tfY})h%ucvyb_N|#H#_B%krj}j z9pW86nZGNUApQmi-U`K-DKmd}28@CHVSEz!E4hQ-21S*VW~UfjfmjCyQS_47v3p<~ z`7VbJ`3r)Tje*@C7zeW8!OSb9}pt1??_+`l=@!duc+Z*^} zt9}N|AU-pLXwwWv3(z%#>WRn#h?qgSVuH~Z(_Ybp@i#p3Rw!qfU&o`92lR{a>C0c_ zpjzES8M{&J@OM7S5o|H{%R%h$oY@-mZNPIA?4$VzmOUO(kX^<##M&R_-$(QpJE|At zFJ;4ct1LOd-+jRLU=8x4SYDwVADD8rXv+9pj^bDS1QV|2@K1f})Ay78@hHd9sRq$W zf}oi&f5X)*WtZ4jdCu*4UzV!{^md^!nnbY0I0w-K%~o@@B+5?jV?lpL8+ykJI?&I)~Y>vpTOt$Kx=R@u;=%90a2-UmLPtif1SX+x+l2d3UEntHMWDkk1K8Q)5@p>{g- z{bc%FKo6Z}(9Dua^de>vJs!OrWn#|fr7-?Vuek;4@kJ6lyU-XWqxcy_k2$+W(lZU_ zZ=LZJ;xoteSb!zNtWWi(L%SY!SOchcn6oOIWZo}J*2(8>#Ie1B#yW}rV3t~#*|KJm zi@upHT4vTd5m^BE)~pc!lWDJLlC8W+F2m^YJnJHA2JZ3b@O-Xb_t0!& zJLc<1Z`O?9e*}9$Y|z~`c)nzczsY96hx%C{zLI0|dA3xW*3^OOIby1^X)=EmU*wGV z?gO9C)?jQjW%eTiEE+h0kh)!S+d^WK7i!C1u$4u)QTgSh?HaY6Gkk4!Z=-O){ zYM1Npk{d9}l1<{fjU@IrV62n7SWHhci}~0rQzx56YGxLRh15OMYEiqh;KQwoXa=* z-8g|h*U&?!5kw~ff+oWHv~19qIsKSdO*@3Y$X24ThdE=Ei1<3vTc(K9JW4;p=y-eJ zvl98-!UthVKl72WFPE__?K&oG7avTDNCmCcOUpXwZ@#W z_3b*QF&>ykEpHmrijVpDMC1E5RiFB%RXdUPTIdzg3!oG6q5F$De>b0EYg#p34}X!q zE!h(iWiyXOd>!e{6O1o^pTbw)mh1_Mu$eJ`8wr)U2C>ywCBBj_{x#SpN$BtKTXo}R z{j#Awl_eYayN!8`F{ z>kIx$w(w`&ZiBW}?*f$#W2&-bg7tYH_&l)&W7Y8OI;J)pm|CT1YU2*5m}%)`d@Iq0 z+Ud~ulj(B-J#;ET6B{SdiGcJ6dWd8bk5p>t!-=~ozdb?n365}X-dgyFn z%>5(zTw^>1jcJ;A`(sPK)_7JnhE5Gksb{&TRN0JKCn-zv4SpY{5p>sx@xbXA|3NIY zFtK6Nj3a#$i?mFvbRx0<@U7A`iQ&oqc#KO~bOL~DV1@XyUd1ALKtC#c54OkqGFGZ$ zV;7Ygwj`_MT0b{$jc4@{+0G?ih+$GC8^8J9|COh3oNg{jGZ#-q|lrxZjd;-g0X zj!QXo@OM}>L*gx22^IDbDVuR9i4NCmfw770$_kHgY=CdWSlCn;PeEf^B)Kg6{%lrb^lxz^L?9{&1zp&dToMTzg@g(!MlPlb~D5Jyio=;j(ck6&T_ zuJ!bJ6n`Zv%+GbZ71~xkPE1ucw5zgYgzN7?c5n{+?(e#5Po@p_eqFeiA*vxC{&2H}|;~_nE))A6fEpd+6uPkiQugA}eSN z`!V{@_124S5DGCSNdMy+3b^tPWA`<_+5I(ldu=irdqGtLzz5{syKp#BruQJD@Qvg9eubMe^ z$xv>0=wg!Iswy;;o3`_xE3iw>;l}tZ#GQJf}zn1_V;(rQ#E*LLYLoa5$UJ^aP z{O#x1Tj}8kpHGReWWmktp_em#H;J9d3XFNE7p4DvA8?}^c*NSRz{&O;9~#pJ`7GIE zz7}#0?eaH3^%_2_Yy7`ruyQ>e#jMbOL4Os`WjJy+=Q1kmxubD57k zH00%)rr$Z9_NwUR(Bpd=)M1alZtLmu2!H46`F3{gF-ANdu(IXbBOl#3dbI1?*|mp1 zIp(k5CVKk3PkbeF%-3E=`t%2=KEy|r4ehEd*(1K&@OZ{)1N<&P;|Mu>5-6Hnrfzch zowF~+w!hY;S&qjD|YlR%~S&whW zo?|+82h>0h@O}_m1>C#IZ+i-Tu5qq(%4ad)fT*$L^I9*Lk^b@MF`s-pvIYEqPp@qG z_Q*#YM^84kz?q$le3lN#QSXt@k{O!?QS|wDLaKTPsBHZ9@K=)fZbRYUAQSLyt?cb! zqYmU#Znqpq#(>&k4}rc}#&{nxE}shyP`^}`l$|wXPmry(z15iQvnAV%!OGU!-b!MU zcK>CV-G7(N5Z`^E@9O^=>+v;#1CUX0Z{jN*?!UV?AYToK_;0|Q!HwXzVOsa=watJ0 z5k2bC7f-oHn(wG>Zu--#Ek4M>G+eZ}$+eCodTH){xAoe7J!0DJGxzmRb^qVg*L4|r z>UDqZ#6JI$!G(O4jGA<}%U_|fa}1C0MrG$3B$ssOW?0a3Xf%u-%we|7Snb!_QC<4j z+Q4Thk6ZOdpjbq#g&vkukrcFTI| zfsxuqo9Y^3{&&goboux2`bn+tTyv=;zZ!i+06c z>T}i8dHhwqyIYpzxx;O2Y)Ma<*{=9#SKnux;^nZgzrk=`Mj}0f|L2)BY-c)f1@Z1f zqy3V}hR=cBgFD`3H}lRh^caIYJ_KHACW=>A0Av-yY zjf-J5uc7_(nV`pvGdR!ioC{-szk}~%`+U=lo@KgWv6d^wc7T7<%fe)uowL~q!(U{! zyoKP|u(rox3#MMk({AuY;sc8dW3$1I*xlo>MSnn={H>GEk~_gO(Sy0$wV`?oe`U|? z9PrDMS)Rn*hQkTE4K#0PQwYRwfYCh&d-z(@9sG>R#$Ukyms5r}4IYANdYb%v1yk}I z7+&&g0J{qvSH{0AvFuVeMaDLazsSI73)H*im%xxmePnlXrd>P{=G(*87RZ|-@$3>u zp-pTi)FsQzS6_F)Sis_`p1@y~)t<_JyTmuJg>Er|trfC6QEbVsHTn8sd^s1Jhrqce zP(MbW&x18(Ob1t(_ULKic)r<*p9K>P%gS!<4j2TFneON;U(Xqw%{OVq`)rf1p0x+& zK%jaYIxw>W4{bVO;wTn(MC{hUmoWaV^|JWfq%N6`o$2dwHi6Gq^$I?!Yz7DThKIk% zJaQWW7}55|j zJM{SgtZtMs_%#!lJVSraH-qFkFu`IiVQ`}v)`?^2orNCk{pbKJr1Ii`Db~;4L-cGD zti$@kj{1Pr4Mb0bArE3p%pmeja-GP(9mp@Lw`KyI>Dh;$A<6v4qhUMoE*OoaB#D86P&F?{)Hb06Qu8 zev$W*P3CJDrm#FAA7JrR?*Wxf^?+ZN3=`jNtZn&{@eDGKLOFF9U+|~?R@y(`gj>hx z?|HDgu+Wn$%+BmP*goHk7H7i*!+`qCExW|{x7JfW)R@nbu;a=LLB7OK zWE^38VZAn>?`iiqe4;;K0Na}(zLHCP8zon4scfj80V*5XQ(3Z1e76yX>DwSm9@DlE zO}!6B_aH3fYt3l(GiKEKKK{R)ati+sk>A9-ewnE*&oWh5tSZc%*xRm)zs+;dBUkGe zm|g&XkKB?(^Cf0fkNPOXkQZmL-i&262@}5teQz>K*2=%7*q-mW&eLZH!=6*C^`=0&EJ^#QX5&GFZ(+w11h2Hoilj570)+AA>OY zU7lTNCi8P(0%7l9c_+yXw=c)gV+>#~mBSW)C96F3y+M*bv|zm%Cm)&*$&>tfFtS@y z$L1B_Vl!zxOFs_6YBLtix02t_5TlDty>T`SFY}CluP>_p^{3jp06pSC{`Og~B;%}d^vE>M32`N@b6WidQbjR zHrQ8LGEP2kW3u2Hz6Rqdn?gNy*wp8jz(T$myZBvun*Jh}LHsAjQ%__2LNlA50}~7@ zE4FqCqn$X0FXy0#EpoUPSG+Ia-x-%RmgkvxLo6uq5ftYotT%F&g6&;{@tERo9KVDK zF9RwNU&%4~JA)}qE@8PDBh@qbsIs9wl_l%=yNx(Z-v*4Q#z#oTt~bfX`LK{z!iI7` zT6@;_zn+3IUcQn1euj8oZkjdj8DW*0_$>Bw#Qd$#@h!y@2*f!Z!Cz!DabORv17?;u z1$G<%1X%J(i>D!$JS_$jw*kHk>~ZM8(gV$#X&rx&jrf`9!2~llaiDrNfxnau?Wru8 z#NTaf#!_Rd{9=5BX5gq3-Q{+`Piz!)PTfpZyZ1D_scL6K5K`IKndmOgJuFGc& zyDR^ZTz?l+)@jB%2~=-~&h*QM_EeT^GJm&`OrXC8?ag3{g(dzjYZt;oz81X7EFw>1 zAOB!B7xOoh-_M#^;}X-VoDCBQyUV|~8clZkj-huRdW<`BI~&4Zx zAE_9*eiD7f20m;6t63tS7chT<{K`j;^JRhjUBcptxopDXsa}o{bIPW{HHfn05`VX` z;PVYM9~eiW6*_EMS(c8`-}7L#xz;7FAU@Av`+Sp%oDCBUV<`4^$`c6W z^IA_i-1Zc2zOSIS!4&^1Ct!>C2>6wpo6c}!E6oJY1m-lQroVT?G^1zIrV%@|Kd zh#?-cgS^I+9A^He6i2YYw<__KT-Y<|pO{OSPsUsIDmkpOp*@u)=frm#sTwTuE?Rnm zfcy{|-VOM28LZ|Z+P}=q3*Vv72h4n&^2cDwd~U@KnneE`m|)fsSl+}~@5eia9%BG| zsr)s}XURrr3uF3Fg7tMPnqEmAQ+L zDjV8US+aq@+t3(oAePu4FYI{N!|0w5yLbh-*dz+i!f@grzBMZR*mLPwVsx>o75L5v z`?q3cc`6bA8l?k%Uo^KPv19%mpN0;=!0w{L=b=-4Te2sXJQX>`r0~Bs#FsT-H8bS% zls6U$DcH%h;*HF(KGk5+#9FfC`Sm<8R@q=*WyvY|yp7FRYFzO(HD00S9yYZ;{*-=$ z_VGLSH2p;mqxktQD)u=hTP9SbB!` zRF44vGj1T3SZ#o@d%YPK&d27jfy+%S_pFKa@ef9>HatXr6YtW+rjk3`RA93z zApi@Si5?^77ox{}F7X|~kN4TIuLt%({A1oJ{y1r@#F95cCy_reyKIYX0CPKx9S2*C zUm!8$dm-_a9Fnh<0@tAszJ}1FUL~d~8|W^8*FOn%f0zB-WkDm1ZH4)}_CH4cM)6m&#QGcQ!3M($#>5O#PvWD>hW1pJ ztT2DKF@|y506R5*ykJ1>^=9av4-0t(xENOJY3!d5tIe1e4w2u)yKpY-Cim&ERwbCU zl2<|R7%@M99#3u-&SKqEywAec*?VBlM_^TaTe1f;8S_qrA;%7M#|E&F5%O8KgfX#i zQI}k|8{*$dOTRv+FDjb?Yd2-dA@SWt#KYzq8fHw6`>COO7Jn0E99f6`c=LV5ZlTBgf+ZWmi2Bfc z=$*tk!uWPzAlG0lO88eIjzWa|oyvb?f%zKhaDC3fe#4roJ|(6q8`@P_lAloDhauy+ z0c>)GHiUwGk~8Y(!!BL{UQT&tL!FCE$c1&zU1P?XXH6t`F?uhD35I=jVGi9211!LPM_ir;!2beF*9NeWZsj<1V4y(+mbXDZOJ;^= z`t5qOTY|w_lG$TVOr&$6vAtuy^z19Ku|lE47{Q)O$48Da?C^9z zE{q-SmDa$Q9P_u(AvHlrEHv?z%rIYjFmBQf0o6TxRM~Vc@XNk5FXwRO9{Ls=Yvhza zY}1}tP<^Jl%NVL`XisIy z9{YCNSljX?eyUBuwf_y=46dR5%lvxIzKpUM`!4;xi5Q9XJOea<*iYC=_Z8?4(Br8C z;PSqRmAuBcwYHbD@Ahr2>_zD30b&x~wIf?Adl~$bEx}XV$!AHM;a&va7!q{x->-Xq z*)U!i%fh8`WB%@gWsTWIkH0BkL&(@0`P<(HZw42FcY~h*|Au}m4j1`-ShLC*zYWGY zBbGVnx5w}yv*@c&va^QlUFO@`v$xo_r@pSCe()A&`Yx>O@RWf3`(J>YTK{v&4)NW_ zifI?izGCLrV`&DThUbGj6W`c9Ncj_dIblOD`xXe8mm$9jIrs0`NZGHK4&1d*FOa4# zeerQ?_>A!w5)9^6NYhT5N7mDDt!o|0e?gBch_9b@_P4A0!0>PCYxe$C8F}h;&pNSt zZ1gDX3Klt!X#!X%-oXLCpQTstLHi+k{1i09vuy3`*Xx=O|A-!S>FYg?Yjm;Oz0PMh z#c-N7J!pRbz<928B+*Md`}MkpI{NuEJr`@jxkdF)^>m(pQ(wEgW#p-Ed)|pX@#1v+ zpCBALh72*8-uVfR6+Nh3by$fr_>&L74*k4Kb51(`S@b*zBZ%gm4&3g3y{Ms%zHdwR zgg^%}?`G@}6d`*mxDWh-Z%g)k1UQ!J+_+EAucMz0(`85u$0su(uc^-zoE@0Yz@w`& zGR;?;ZI~=Wxkj5IYe#&fn?GgSqiZ1Dj^gtlvl06c%+og+vLqpWr8U97=8fP_Stouk zgcB@Z!sGL-wH8MDb)sJI{if|~-#CjKtW$jy((R?z z8GO~Gn-4qb(H9}#dEPyE3X|^3t_l9B?baXQ`2@(SFvpDtUE0OJ(Y@#~F2Rvqs*ZHx z_nQrh58(Sv=mb~LlnAop0I8pa99g3qjN;Rcj5+xuzw$adi2ukklPy~nIY@lMQNNy$ zkCaXEe&d&sj@b|8#0GlMAi#71+0NcMsvCrd_{jWlQ!Ty3OEA_?*BN zE5I59x=uWK3y}}wledaDBy;T3rVBxmr=2zgrRo*@RoM)V`en(i*^lI((R=-FnY{nTMs+g$rnv_#4-BtOW1MEyC(c~lV5%oVv-}aQ6738bxaih z+T?f^BFTim#*r-iMFx`h@1aai%x*%5d=)sNY|0;{pG*-p>^BhUhQC?*Cm6`wrt%qC z4SX6sr4GlZA*)mm;jhZ3e7|3o3=rRKWOaR5BS?I)CFB!_Z9e&B2)wgxzWN2zoj>e! z;}3IMo#PDU3)yl0I{Ezt6KoxY++jLbcOc!ykmnCN**arSu9?vTW)@U_KVb3;`nN{( zGp5_TX=O|H!dVEpn@t#tOsv7UIgr;vF?QG% zmtUjpQ*E*SsM)DK;_NgZF+25y*_p6*vwmeK51DX-vE(RPx!#~{=DvN<$v5#2VzoUv zYApUs7E@b@A2mCv53X#<9wfKJeC|SUbGh2Xgv$c?8zjet0R5VT6>m1T@om*EBsMvr zdIqR$XisIyBK~e;2LfaRa=#0CEret5v*FfbkgTWJ@a(ImSbNARF1`rq7^m%1t+V`s z)2%;gMvVtdc?l`Wk=637%TbXBot@>q=*3u*?lw&nTPAfr#W<>sSiPs`tW-Gi5`2DoaN3 zcN^s;%l8_Lo7xnrq4(KI;+rBSZMF4Z&8YNFf%xJ` zZL0y1IAQ%{TpIVHM?4k}7>|6Gtd8&B!}5MJihXcpOZJ!x!PZU0hU2*j$jLPpY(_AD zqmX<;5n{R*#9!o?{GC7uiTE0k6RKzMQDw8Z-!Ds6$>(j17|#tLZwF0ooj^Qvy^Yr% zf^<8_##4`&YUv@Tn)m_)dzhHN%m$~#k@ajAxesEJBWWCWtfvO1Og=}+UFii|4;Z(M zzsUIb=pI`4nriGubQo7*QDL1|yy?GuSYs*jc2BR&_n!jsm2AX6ZR%65OX?3cRIerg zWz)h(%93&7yNxPK>ITdawJFrS!?r$toVL%g^~R%SQh3CfOdp1%CwE(y*a7QTIrT-8 zEPV!Y$2HAH1CnfFB3yr~HC~DdfmBR=#yHFa$$I4I9_II&N#uhoTe7$0RSJ!p%!n8! zA#XNFiM+j$F(>9gF`m{}@$NHUlN?hM@ipO1U#jm!h&g4GT9qa1_`40|#0Jde5o?~1 z?EQgFR=#MO(@ShJ@i6{B=+t8mFs2-RCg$PsL(Zu2xLJfgV-}DTiz&yJ6Jy$a(20-l z_4UFHt~>ZE>5q%XMo4@X-)}^RaTS;gqr}a`#x)E4-2k$0$o!p=-$E4sBk~tnAb%H- zVj>&k*igNUzbYHrQ(02?A={`=S+>`}&nmWrrh9{3M7{=r_cGh8{a2IpzTnI%k1(d> zE-@cf9wxsZGRp$rMIdIDwF+%>+yH;;m3z@+o{-muaguC?9@xY5ev=&D>f7?|F&Cn> zn;6G1wz!tAkziApe3mUCK4&duoFsK`p>|XJ`-~%xs&_rU6H+#`r?O;|`MZs^EnhMh zCLC22mhSuPvh=7~j!&`6*jMrYL8lp^&*QL3PS3H?A#t33)1(RynAQ+dk|V3F*wojX z4L|GajcWIkxA==(;_n93o1q)g;l4;^b@@BVh5a<` zLez~RezBo?HAE~a8|5LiScFw0(kcnZM1_y^K9$7dy(!+8%TyTizB}yB6No+-rF0+LMiy!@qXXisIyIsR^=HDqkoz)!X5w`)Ic8@(rK`&8Q?ujls5PO9(- zW6BSfMNYA^!k5VJ$ILYI8Hg`PSBSkSM>^*km%_d1x%BM;NZkh=$wue?Jq+(RDfffu z#C&KjBugJ8HV~yAYw#Ko?jOnLIY%^wCZDH?w`7g`iv+|^jDJr-P^vy;jZ)b}?)S@* z4f1&#Dafr2V#*Cje=xOA+iC70GwuJBorb<_682fA;n8o7GR}vm+GOt`^80HX)w~Y^ z7ecZRaU0^85Z{MVz0dl3$rAUC_%Au_Y=L}la9`Y@Z6B2e>-;Umn*Pg&HHek;66gsn zzM4;oujG*VS%VZA_lbRpV`|r`lTK zOB|J(xry8(ko4qk=%?%=_YnF0B}mV&Kzu<~6?A-cLHR+ak-HZ?9*_tfH3i};S+n=< zp?{R|`ye{u6^3Qj`I}5?$gx`&AJzy#OmSb5Aa8}aPu>!5WCed>kR=fas{|yV>K)>% zvY|bdC2RP*4duiJnkU#2D)x{w&U^vV?Ls^Dz6>e*Gj7d&kTHeu?4NCyorlTqFGF5_ z4{}FD6vtw{7x8xwI@1omp{HwA2Y)5UycBx_@3Z)RGdd8SLTJaNyqk%&$V+Uk;gfGS zGUgnW28|HkCCF#VQs&dN%Xsw2MWFf|sBCCYWyvwu-)+=-EZb|a-lg>mUTRaBhsp29ASv5+Xk7?Djt}M_DDk(Jxfea=mB+e8T{2?7 zwn3#Q-#?5F#4(8VYpnA(5gW)&3(>v?^Eg62k0Brh5E|WgBRo`1!#;g8f-{2!T25oDOOGIJUp<5<64rKvMS3whh*=MDB4& zugh)7CQPWqabx#I#wH$g)_N)Bwfsd6$%753N9;dfi#!s%9oBi`4Y?SCK-!=e#^#Oq zthlo#5#uR!$;^=bDhoMCjK@IrAu(0iaE(;im*n$s3zZJb_8MB>$uFUApLRp`Px0jx zTgp6&?KcI6Hg1QR6m7rM*6a@X{U{{WwYC5`RN&ZP9|F3^{4LoZ&>pW&a2Z?tl?>St zwpJ*09>8}oxjP{atVkhUMI4PK0dmY8_{7s0yRj_2Kg+RBYvKpLwu0~ zFkY(nfy##VRF*6e-)%%J$GO+=cnE@c3!eRBw_u;bmsi@p{S1BhF8+UyxO1GGwKifO zaK;@Ge+O-km)(1|4}PSxL-PUl?wzmop)AO@eSF1fNJTPu47 zd$pA<-yS4)gct5ddW8l%7=VgYkNI=8@|71V=u%USlK)1+gjVpxYzl%*7kb#I^P~m|5!qkO~MVC z*(1K&@a&j2S12%UYEy9Sjn=jQ9=r@3qkbj*{ZrajuIT9S^Y~n0T)Ti*$obs{OVcoHBYi-Z<`)YrzuNsGKe{;;=ZS;uC z9z<62zz8taTiEDeGhm1P_xzu*Ve|nu|4(H@j}7YV-|$7{G2Wi@6}~*~*Xx@1|A-!S z>F4Rl8a_`2#p!fcXrBm2_e$`xJss(y*Eak0vZ|xs4g5&E)T@SnQ(wEgWhCtFU%IhR z*%`$$-!F@8Tw-dMpJKo119a;}?B)NuYXZN>zW-gW`4PQr;9L9jb{y)`4>PQ5@Qus_ z9;4Z_R&c~`e;54Go{n_UbIg9dfa>TM)ph!p4x&i^RG;bJ)YtqSt1^4`{l716 zeVDKA++A}#&lC@^^ZX=RQ=fybcmefK^2XUaILmY}kY3zo)9iAm2PgS@d1t@g#88($ zwl?7SsR>@fNWKbNAbS^hD^Y)pBd;*GYrxDp&PDt5{5tw!bsbjB8IV22Q~i2N|3=yD z++zJQa^EpyL%T$0gYBcn^RL=;{506IPr&}Ym9J6X;@rq9*bcgyz7mdNDP(qD8fdp} zv2EBChZn%L2M2lKFaB-m%~VG}U4JRB4c|qPtSjShk=t$|K==ZmhL(94MuG0E0c)EL z;O~~+j{HY|gl}p$3$ty)eZQWNzm$1UfO#w5@37m)j8*=h9#v>F^FVw0YfgLiCDV?+ z)watVCr#mR_1mNfw~oc9xbu(QmVpyFvI~ zwt(ojm{x(K%pARCDtv<@ulTSAY?M>puU9wJ(H}9}92l1Xj2LI={CY(`QZ|FzSU)Hu z+uRv#!?1X45TM*W-G>u9(RG@)Tc>)+aiX_#D@MQTcSAog9l}i0(KS$9F9~!Tx7sd8 z*>tqD8@-gHsQdM5@*jPtb)DUyd_7+oi7zaU4;?En-ojidV2g!p4PsYRJh${Fs-s`W zpDxVDPL%lax#}VLDBbdHt1{9tf3Od1B{Q#fA@(-#ULV=W0XMt6&vxVQb+XmJx9Q5a zy>#*}o+{uMrONMNRedUC%2&Gi#BDau?zN5@2CCk(*ke91%~ zBfno}b`~5rUW3?`nZFLKg}@dm>;wKHjlG3-Swejqd`8{ko3B^B%`Y2dz}&G94vg;x zTI)35K|XZA&Cfq&cap#F9jEb2&Z#(iAnV;UWhxlzao4A}OH)2M}j;6eg^&R9Q$CcU9-GEpPq8Fh@ zjst`LCHaeV@UOUp1%nC70@bZUEGe4_{!*6AGX~qpl8bBTXtQhy!Txz}uyKzKE^c>% z$$R-Fi*I>>*4;Lc`J|^cET1Hwz z<})%_JF^8qF zsoRWgBZE)$d*I;52TVVZd zGJlJVouJQC#8)zgAJVP*HuO}+E!GR)f=%+i$u|kgl40iWHh5P*EZi=*&dZii?wseA z$M};v?37#g*n#(yS4`YZ4kc;(Kk>%Ar@ZXqleQY-P7~H?k~$HeFJ))zNiR56j&pCe z_=xS}uVlG&WDmpQKX4&Uh&j!S5PCUcJLH0QPSK)>PRNqWBxF++(Ya!%lR5j}5!u^1`*dZ5W1T zuza`Ejy>fCi2KC5%}!z*HEvAt`7(~+J?Uu;lU}-Y#Ma{Yi;R|T+e7Mh8;)Fp4(pB3 z+_toLGl0x1&akr#JX91X%rigZaGVhbds} zHXv40{2jqY2|F

!5&m%p5gNc#Qfg>ux} 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 dstVec) @@ -174,10 +174,9 @@ struct basis_file : m_file([&]() { size_t byteLength = jsBuffer["byteLength"].as(); return basisu::vector(byteLength); - }()), - m_transcoder(g_pGlobal_codebook) + }()) { - if (!g_pGlobal_codebook) + if (!g_basis_initialized_flag) { #if BASISU_DEBUG_PRINTF printf("basis_file::basis_file: Must call basis_init() first!\n"); @@ -532,10 +531,9 @@ struct ktx2_file : m_file([&]() { size_t byteLength = jsBuffer["byteLength"].as(); return basisu::vector(byteLength); - }()), - m_transcoder(g_pGlobal_codebook) + }()) { - if (!g_pGlobal_codebook) + if (!g_basis_initialized_flag) { #if BASISU_DEBUG_PRINTF printf("basis_file::basis_file: Must call basis_init() first!\n"); @@ -1050,7 +1048,7 @@ public: uint32_t encode(const emscripten::val& dst_basis_file_js_val) { - if (!g_pGlobal_codebook) + if (!g_basis_initialized_flag) { #if BASISU_DEBUG_PRINTF printf("basis_encoder::encode: Must call basis_init() first!\n"); @@ -1059,8 +1057,6 @@ public: return 0; } - basist::etc1_global_selector_codebook sel_codebook(basist::g_global_selector_cb_size, basist::g_global_selector_cb); - // We don't use threading for now, but the compressor needs a job pool. job_pool jpool(1); @@ -1076,7 +1072,6 @@ public: params.m_read_source_images = false; params.m_write_output_basis_files = false; - params.m_pSel_codebook = &sel_codebook; basis_compressor comp; @@ -1135,8 +1130,7 @@ class lowlevel_etc1s_image_transcoder : public basisu_lowlevel_etc1s_transcoder basisu_transcoder_state m_state; public: - lowlevel_etc1s_image_transcoder() : - basisu_lowlevel_etc1s_transcoder(g_pGlobal_codebook) + lowlevel_etc1s_image_transcoder() { } @@ -1195,7 +1189,7 @@ public: uint32_t output_row_pitch_in_blocks_or_pixels, uint32_t output_rows_in_pixels) { - if (!g_pGlobal_codebook) + if (!g_basis_initialized_flag) { #if BASISU_DEBUG_PRINTF printf("transcode_etc1s_image: basis_init() must be called first\n"); @@ -1273,7 +1267,7 @@ bool transcode_uastc_image( { transcoder_texture_format target_format = static_cast(target_format_int); - if (!g_pGlobal_codebook) + if (!g_basis_initialized_flag) { #if BASISU_DEBUG_PRINTF printf("transcode_uastc_image: basis_init() must be called first\n"); diff --git a/webgl/transcoder/build/basis_transcoder.js b/webgl/transcoder/build/basis_transcoder.js index 9e285dd..b42d977 100644 --- a/webgl/transcoder/build/basis_transcoder.js +++ b/webgl/transcoder/build/basis_transcoder.js @@ -6,7 +6,7 @@ var BASIS = (function() { function(BASIS) { BASIS = BASIS || {}; -var Module=typeof BASIS!=="undefined"?BASIS:{};var readyPromiseResolve,readyPromiseReject;Module["ready"]=new Promise(function(resolve,reject){readyPromiseResolve=resolve;readyPromiseReject=reject});var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}var arguments_=[];var thisProgram="./this.program";var quit_=function(status,toThrow){throw toThrow};var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof process.versions==="object"&&typeof process.versions.node==="string";ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;var nodeFS;var nodePath;if(ENVIRONMENT_IS_NODE){if(ENVIRONMENT_IS_WORKER){scriptDirectory=require("path").dirname(scriptDirectory)+"/"}else{scriptDirectory=__dirname+"/"}read_=function shell_read(filename,binary){if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);return nodeFS["readFileSync"](filename,binary?null:"utf8")};readBinary=function readBinary(filename){var ret=read_(filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){thisProgram=process["argv"][1].replace(/\\/g,"/")}arguments_=process["argv"].slice(2);process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);quit_=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){read_=function shell_read(f){return read(f)}}readBinary=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){arguments_=scriptArgs}else if(typeof arguments!="undefined"){arguments_=arguments}if(typeof quit==="function"){quit_=function(status){quit(status)}}if(typeof print!=="undefined"){if(typeof console==="undefined")console={};console.log=print;console.warn=console.error=typeof printErr!=="undefined"?printErr:print}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!=="undefined"&&document.currentScript){scriptDirectory=document.currentScript.src}if(_scriptDir){scriptDirectory=_scriptDir}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}{read_=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){readBinary=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}setWindowTitle=function(title){document.title=title}}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.warn.bind(console);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["quit"])quit_=Module["quit"];var tempRet0=0;var setTempRet0=function(value){tempRet0=value};var wasmBinary;if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];var noExitRuntime;if(Module["noExitRuntime"])noExitRuntime=Module["noExitRuntime"];if(typeof WebAssembly!=="object"){abort("no native wasm support detected")}var wasmMemory;var ABORT=false;var EXITSTATUS;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}var UTF8Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(heap,idx,maxBytesToRead){var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heap[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heap.subarray&&UTF8Decoder){return UTF8Decoder.decode(heap.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,heap,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function UTF16ToString(ptr,maxBytesToRead){var endPtr=ptr;var idx=endPtr>>1;var maxIdx=idx+maxBytesToRead/2;while(!(idx>=maxIdx)&&HEAPU16[idx])++idx;endPtr=idx<<1;if(endPtr-ptr>32&&UTF16Decoder){return UTF16Decoder.decode(HEAPU8.subarray(ptr,endPtr))}else{var str="";for(var i=0;!(i>=maxBytesToRead/2);++i){var codeUnit=HEAP16[ptr+i*2>>1];if(codeUnit==0)break;str+=String.fromCharCode(codeUnit)}return str}}function stringToUTF16(str,outPtr,maxBytesToWrite){if(maxBytesToWrite===undefined){maxBytesToWrite=2147483647}if(maxBytesToWrite<2)return 0;maxBytesToWrite-=2;var startPtr=outPtr;var numCharsToWrite=maxBytesToWrite>1]=codeUnit;outPtr+=2}HEAP16[outPtr>>1]=0;return outPtr-startPtr}function lengthBytesUTF16(str){return str.length*2}function UTF32ToString(ptr,maxBytesToRead){var i=0;var str="";while(!(i>=maxBytesToRead/4)){var utf32=HEAP32[ptr+i*4>>2];if(utf32==0)break;++i;if(utf32>=65536){var ch=utf32-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}else{str+=String.fromCharCode(utf32)}}return str}function stringToUTF32(str,outPtr,maxBytesToWrite){if(maxBytesToWrite===undefined){maxBytesToWrite=2147483647}if(maxBytesToWrite<4)return 0;var startPtr=outPtr;var endPtr=startPtr+maxBytesToWrite-4;for(var i=0;i=55296&&codeUnit<=57343){var trailSurrogate=str.charCodeAt(++i);codeUnit=65536+((codeUnit&1023)<<10)|trailSurrogate&1023}HEAP32[outPtr>>2]=codeUnit;outPtr+=4;if(outPtr+4>endPtr)break}HEAP32[outPtr>>2]=0;return outPtr-startPtr}function lengthBytesUTF32(str){var len=0;for(var i=0;i=55296&&codeUnit<=57343)++i;len+=4}return len}function alignUp(x,multiple){if(x%multiple>0){x+=multiple-x%multiple}return x}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferAndViews(buf){buffer=buf;Module["HEAP8"]=HEAP8=new Int8Array(buf);Module["HEAP16"]=HEAP16=new Int16Array(buf);Module["HEAP32"]=HEAP32=new Int32Array(buf);Module["HEAPU8"]=HEAPU8=new Uint8Array(buf);Module["HEAPU16"]=HEAPU16=new Uint16Array(buf);Module["HEAPU32"]=HEAPU32=new Uint32Array(buf);Module["HEAPF32"]=HEAPF32=new Float32Array(buf);Module["HEAPF64"]=HEAPF64=new Float64Array(buf)}var INITIAL_MEMORY=Module["INITIAL_MEMORY"]||16777216;var wasmTable;var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}what+="";err(what);ABORT=true;EXITSTATUS=1;what="abort("+what+"). Build with -s ASSERTIONS=1 for more info.";var e=new WebAssembly.RuntimeError(what);readyPromiseReject(e);throw e}function hasPrefix(str,prefix){return String.prototype.startsWith?str.startsWith(prefix):str.indexOf(prefix)===0}var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return hasPrefix(filename,dataURIPrefix)}var fileURIPrefix="file://";function isFileURI(filename){return hasPrefix(filename,fileURIPrefix)}var wasmBinaryFile="basis_transcoder.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"&&!isFileURI(wasmBinaryFile)){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return Promise.resolve().then(getBinary)}function createWasm(){var info={"a":asmLibraryArg};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;wasmMemory=Module["asm"]["K"];updateGlobalBufferAndViews(wasmMemory.buffer);wasmTable=Module["asm"]["L"];removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){return getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}function instantiateAsync(){if(!wasmBinary&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&!isFileURI(wasmBinaryFile)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){var result=WebAssembly.instantiateStreaming(response,info);return result.then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");return instantiateArrayBuffer(receiveInstantiatedSource)})})}else{return instantiateArrayBuffer(receiveInstantiatedSource)}}if(Module["instantiateWasm"]){try{var exports=Module["instantiateWasm"](info,receiveInstance);return exports}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}instantiateAsync().catch(readyPromiseReject);return{}}function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback(Module);continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){wasmTable.get(func)()}else{wasmTable.get(func)(callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var structRegistrations={};function runDestructors(destructors){while(destructors.length){var ptr=destructors.pop();var del=destructors.pop();del(ptr)}}function simpleReadValueFromPointer(pointer){return this["fromWireType"](HEAPU32[pointer>>2])}var awaitingDependencies={};var registeredTypes={};var typeDependencies={};var char_0=48;var char_9=57;function makeLegalFunctionName(name){if(undefined===name){return"_unknown"}name=name.replace(/[^a-zA-Z0-9_]/g,"$");var f=name.charCodeAt(0);if(f>=char_0&&f<=char_9){return"_"+name}else{return name}}function createNamedFunction(name,body){name=makeLegalFunctionName(name);return new Function("body","return function "+name+"() {\n"+' "use strict";'+" return body.apply(this, arguments);\n"+"};\n")(body)}function extendError(baseErrorType,errorName){var errorClass=createNamedFunction(errorName,function(message){this.name=errorName;this.message=message;var stack=new Error(message).stack;if(stack!==undefined){this.stack=this.toString()+"\n"+stack.replace(/^Error(:[^\n]*)?\n/,"")}});errorClass.prototype=Object.create(baseErrorType.prototype);errorClass.prototype.constructor=errorClass;errorClass.prototype.toString=function(){if(this.message===undefined){return this.name}else{return this.name+": "+this.message}};return errorClass}var InternalError=undefined;function throwInternalError(message){throw new InternalError(message)}function whenDependentTypesAreResolved(myTypes,dependentTypes,getTypeConverters){myTypes.forEach(function(type){typeDependencies[type]=dependentTypes});function onComplete(typeConverters){var myTypeConverters=getTypeConverters(typeConverters);if(myTypeConverters.length!==myTypes.length){throwInternalError("Mismatched type converter count")}for(var i=0;i>shift])},destructorFunction:null})}function ClassHandle_isAliasOf(other){if(!(this instanceof ClassHandle)){return false}if(!(other instanceof ClassHandle)){return false}var leftClass=this.$$.ptrType.registeredClass;var left=this.$$.ptr;var rightClass=other.$$.ptrType.registeredClass;var right=other.$$.ptr;while(leftClass.baseClass){left=leftClass.upcast(left);leftClass=leftClass.baseClass}while(rightClass.baseClass){right=rightClass.upcast(right);rightClass=rightClass.baseClass}return leftClass===rightClass&&left===right}function shallowCopyInternalPointer(o){return{count:o.count,deleteScheduled:o.deleteScheduled,preservePointerOnDelete:o.preservePointerOnDelete,ptr:o.ptr,ptrType:o.ptrType,smartPtr:o.smartPtr,smartPtrType:o.smartPtrType}}function throwInstanceAlreadyDeleted(obj){function getInstanceTypeName(handle){return handle.$$.ptrType.registeredClass.name}throwBindingError(getInstanceTypeName(obj)+" instance already deleted")}var finalizationGroup=false;function detachFinalizer(handle){}function runDestructor($$){if($$.smartPtr){$$.smartPtrType.rawDestructor($$.smartPtr)}else{$$.ptrType.registeredClass.rawDestructor($$.ptr)}}function releaseClassHandle($$){$$.count.value-=1;var toDelete=0===$$.count.value;if(toDelete){runDestructor($$)}}function attachFinalizer(handle){if("undefined"===typeof FinalizationGroup){attachFinalizer=function(handle){return handle};return handle}finalizationGroup=new FinalizationGroup(function(iter){for(var result=iter.next();!result.done;result=iter.next()){var $$=result.value;if(!$$.ptr){console.warn("object already deleted: "+$$.ptr)}else{releaseClassHandle($$)}}});attachFinalizer=function(handle){finalizationGroup.register(handle,handle.$$,handle.$$);return handle};detachFinalizer=function(handle){finalizationGroup.unregister(handle.$$)};return attachFinalizer(handle)}function ClassHandle_clone(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.preservePointerOnDelete){this.$$.count.value+=1;return this}else{var clone=attachFinalizer(Object.create(Object.getPrototypeOf(this),{$$:{value:shallowCopyInternalPointer(this.$$)}}));clone.$$.count.value+=1;clone.$$.deleteScheduled=false;return clone}}function ClassHandle_delete(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError("Object already scheduled for deletion")}detachFinalizer(this);releaseClassHandle(this.$$);if(!this.$$.preservePointerOnDelete){this.$$.smartPtr=undefined;this.$$.ptr=undefined}}function ClassHandle_isDeleted(){return!this.$$.ptr}var delayFunction=undefined;var deletionQueue=[];function flushPendingDeletes(){while(deletionQueue.length){var obj=deletionQueue.pop();obj.$$.deleteScheduled=false;obj["delete"]()}}function ClassHandle_deleteLater(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError("Object already scheduled for deletion")}deletionQueue.push(this);if(deletionQueue.length===1&&delayFunction){delayFunction(flushPendingDeletes)}this.$$.deleteScheduled=true;return this}function init_ClassHandle(){ClassHandle.prototype["isAliasOf"]=ClassHandle_isAliasOf;ClassHandle.prototype["clone"]=ClassHandle_clone;ClassHandle.prototype["delete"]=ClassHandle_delete;ClassHandle.prototype["isDeleted"]=ClassHandle_isDeleted;ClassHandle.prototype["deleteLater"]=ClassHandle_deleteLater}function ClassHandle(){}var registeredPointers={};function ensureOverloadTable(proto,methodName,humanName){if(undefined===proto[methodName].overloadTable){var prevFunc=proto[methodName];proto[methodName]=function(){if(!proto[methodName].overloadTable.hasOwnProperty(arguments.length)){throwBindingError("Function '"+humanName+"' called with an invalid number of arguments ("+arguments.length+") - expects one of ("+proto[methodName].overloadTable+")!")}return proto[methodName].overloadTable[arguments.length].apply(this,arguments)};proto[methodName].overloadTable=[];proto[methodName].overloadTable[prevFunc.argCount]=prevFunc}}function exposePublicSymbol(name,value,numArguments){if(Module.hasOwnProperty(name)){if(undefined===numArguments||undefined!==Module[name].overloadTable&&undefined!==Module[name].overloadTable[numArguments]){throwBindingError("Cannot register public name '"+name+"' twice")}ensureOverloadTable(Module,name,name);if(Module.hasOwnProperty(numArguments)){throwBindingError("Cannot register multiple overloads of a function with the same number of arguments ("+numArguments+")!")}Module[name].overloadTable[numArguments]=value}else{Module[name]=value;if(undefined!==numArguments){Module[name].numArguments=numArguments}}}function RegisteredClass(name,constructor,instancePrototype,rawDestructor,baseClass,getActualType,upcast,downcast){this.name=name;this.constructor=constructor;this.instancePrototype=instancePrototype;this.rawDestructor=rawDestructor;this.baseClass=baseClass;this.getActualType=getActualType;this.upcast=upcast;this.downcast=downcast;this.pureVirtualFunctions=[]}function upcastPointer(ptr,ptrClass,desiredClass){while(ptrClass!==desiredClass){if(!ptrClass.upcast){throwBindingError("Expected null or instance of "+desiredClass.name+", got an instance of "+ptrClass.name)}ptr=ptrClass.upcast(ptr);ptrClass=ptrClass.baseClass}return ptr}function constNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}return 0}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function genericPointerToWireType(destructors,handle){var ptr;if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}if(this.isSmartPointer){ptr=this.rawConstructor();if(destructors!==null){destructors.push(this.rawDestructor,ptr)}return ptr}else{return 0}}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}if(!this.isConst&&handle.$$.ptrType.isConst){throwBindingError("Cannot convert argument of type "+(handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name)+" to parameter type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);if(this.isSmartPointer){if(undefined===handle.$$.smartPtr){throwBindingError("Passing raw pointer to smart pointer is illegal")}switch(this.sharingPolicy){case 0:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{throwBindingError("Cannot convert argument of type "+(handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name)+" to parameter type "+this.name)}break;case 1:ptr=handle.$$.smartPtr;break;case 2:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{var clonedHandle=handle["clone"]();ptr=this.rawShare(ptr,__emval_register(function(){clonedHandle["delete"]()}));if(destructors!==null){destructors.push(this.rawDestructor,ptr)}}break;default:throwBindingError("Unsupporting sharing policy")}}return ptr}function nonConstNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}return 0}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}if(handle.$$.ptrType.isConst){throwBindingError("Cannot convert argument of type "+handle.$$.ptrType.name+" to parameter type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function RegisteredPointer_getPointee(ptr){if(this.rawGetPointee){ptr=this.rawGetPointee(ptr)}return ptr}function RegisteredPointer_destructor(ptr){if(this.rawDestructor){this.rawDestructor(ptr)}}function RegisteredPointer_deleteObject(handle){if(handle!==null){handle["delete"]()}}function downcastPointer(ptr,ptrClass,desiredClass){if(ptrClass===desiredClass){return ptr}if(undefined===desiredClass.baseClass){return null}var rv=downcastPointer(ptr,ptrClass,desiredClass.baseClass);if(rv===null){return null}return desiredClass.downcast(rv)}function getInheritedInstanceCount(){return Object.keys(registeredInstances).length}function getLiveInheritedInstances(){var rv=[];for(var k in registeredInstances){if(registeredInstances.hasOwnProperty(k)){rv.push(registeredInstances[k])}}return rv}function setDelayFunction(fn){delayFunction=fn;if(deletionQueue.length&&delayFunction){delayFunction(flushPendingDeletes)}}function init_embind(){Module["getInheritedInstanceCount"]=getInheritedInstanceCount;Module["getLiveInheritedInstances"]=getLiveInheritedInstances;Module["flushPendingDeletes"]=flushPendingDeletes;Module["setDelayFunction"]=setDelayFunction}var registeredInstances={};function getBasestPointer(class_,ptr){if(ptr===undefined){throwBindingError("ptr should not be undefined")}while(class_.baseClass){ptr=class_.upcast(ptr);class_=class_.baseClass}return ptr}function getInheritedInstance(class_,ptr){ptr=getBasestPointer(class_,ptr);return registeredInstances[ptr]}function makeClassHandle(prototype,record){if(!record.ptrType||!record.ptr){throwInternalError("makeClassHandle requires ptr and ptrType")}var hasSmartPtrType=!!record.smartPtrType;var hasSmartPtr=!!record.smartPtr;if(hasSmartPtrType!==hasSmartPtr){throwInternalError("Both smartPtrType and smartPtr must be specified")}record.count={value:1};return attachFinalizer(Object.create(prototype,{$$:{value:record}}))}function RegisteredPointer_fromWireType(ptr){var rawPointer=this.getPointee(ptr);if(!rawPointer){this.destructor(ptr);return null}var registeredInstance=getInheritedInstance(this.registeredClass,rawPointer);if(undefined!==registeredInstance){if(0===registeredInstance.$$.count.value){registeredInstance.$$.ptr=rawPointer;registeredInstance.$$.smartPtr=ptr;return registeredInstance["clone"]()}else{var rv=registeredInstance["clone"]();this.destructor(ptr);return rv}}function makeDefaultHandle(){if(this.isSmartPointer){return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this.pointeeType,ptr:rawPointer,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this,ptr:ptr})}}var actualType=this.registeredClass.getActualType(rawPointer);var registeredPointerRecord=registeredPointers[actualType];if(!registeredPointerRecord){return makeDefaultHandle.call(this)}var toType;if(this.isConst){toType=registeredPointerRecord.constPointerType}else{toType=registeredPointerRecord.pointerType}var dp=downcastPointer(rawPointer,this.registeredClass,toType.registeredClass);if(dp===null){return makeDefaultHandle.call(this)}if(this.isSmartPointer){return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp})}}function init_RegisteredPointer(){RegisteredPointer.prototype.getPointee=RegisteredPointer_getPointee;RegisteredPointer.prototype.destructor=RegisteredPointer_destructor;RegisteredPointer.prototype["argPackAdvance"]=8;RegisteredPointer.prototype["readValueFromPointer"]=simpleReadValueFromPointer;RegisteredPointer.prototype["deleteObject"]=RegisteredPointer_deleteObject;RegisteredPointer.prototype["fromWireType"]=RegisteredPointer_fromWireType}function RegisteredPointer(name,registeredClass,isReference,isConst,isSmartPointer,pointeeType,sharingPolicy,rawGetPointee,rawConstructor,rawShare,rawDestructor){this.name=name;this.registeredClass=registeredClass;this.isReference=isReference;this.isConst=isConst;this.isSmartPointer=isSmartPointer;this.pointeeType=pointeeType;this.sharingPolicy=sharingPolicy;this.rawGetPointee=rawGetPointee;this.rawConstructor=rawConstructor;this.rawShare=rawShare;this.rawDestructor=rawDestructor;if(!isSmartPointer&®isteredClass.baseClass===undefined){if(isConst){this["toWireType"]=constNoSmartPtrRawPointerToWireType;this.destructorFunction=null}else{this["toWireType"]=nonConstNoSmartPtrRawPointerToWireType;this.destructorFunction=null}}else{this["toWireType"]=genericPointerToWireType}}function replacePublicSymbol(name,value,numArguments){if(!Module.hasOwnProperty(name)){throwInternalError("Replacing nonexistant public symbol")}if(undefined!==Module[name].overloadTable&&undefined!==numArguments){Module[name].overloadTable[numArguments]=value}else{Module[name]=value;Module[name].argCount=numArguments}}function dynCallLegacy(sig,ptr,args){if(args&&args.length){return Module["dynCall_"+sig].apply(null,[ptr].concat(args))}return Module["dynCall_"+sig].call(null,ptr)}function dynCall(sig,ptr,args){if(sig.indexOf("j")!=-1){return dynCallLegacy(sig,ptr,args)}return wasmTable.get(ptr).apply(null,args)}function getDynCaller(sig,ptr){assert(sig.indexOf("j")>=0,"getDynCaller should only be called with i64 sigs");var argCache=[];return function(){argCache.length=arguments.length;for(var i=0;i>2)+i])}return array}function __embind_register_class_constructor(rawClassType,argCount,rawArgTypesAddr,invokerSignature,invoker,rawConstructor){assert(argCount>0);var rawArgTypes=heap32VectorToArray(argCount,rawArgTypesAddr);invoker=embind__requireFunction(invokerSignature,invoker);var args=[rawConstructor];var destructors=[];whenDependentTypesAreResolved([],[rawClassType],function(classType){classType=classType[0];var humanName="constructor "+classType.name;if(undefined===classType.registeredClass.constructor_body){classType.registeredClass.constructor_body=[]}if(undefined!==classType.registeredClass.constructor_body[argCount-1]){throw new BindingError("Cannot register multiple constructors with identical number of parameters ("+(argCount-1)+") for class '"+classType.name+"'! Overload resolution is currently only performed using the parameter count, not actual type info!")}classType.registeredClass.constructor_body[argCount-1]=function unboundTypeHandler(){throwUnboundTypeError("Cannot construct "+classType.name+" due to unbound types",rawArgTypes)};whenDependentTypesAreResolved([],rawArgTypes,function(argTypes){classType.registeredClass.constructor_body[argCount-1]=function constructor_body(){if(arguments.length!==argCount-1){throwBindingError(humanName+" called with "+arguments.length+" arguments, expected "+(argCount-1))}destructors.length=0;args.length=argCount;for(var i=1;i0?", ":"")+argsListWired}invokerFnBody+=(returns?"var rv = ":"")+"invoker(fn"+(argsListWired.length>0?", ":"")+argsListWired+");\n";if(needsDestructorStack){invokerFnBody+="runDestructors(destructors);\n"}else{for(var i=isClassMethodFunc?1:2;i4&&0===--emval_handle_array[handle].refcount){emval_handle_array[handle]=undefined;emval_free_list.push(handle)}}function count_emval_handles(){var count=0;for(var i=5;i>1])};case 2:return function(pointer){var heap=signed?HEAP32:HEAPU32;return this["fromWireType"](heap[pointer>>2])};default:throw new TypeError("Unknown integer type: "+name)}}function __embind_register_enum(rawType,name,size,isSigned){var shift=getShiftFromSize(size);name=readLatin1String(name);function ctor(){}ctor.values={};registerType(rawType,{name:name,constructor:ctor,"fromWireType":function(c){return this.constructor.values[c]},"toWireType":function(destructors,c){return c.value},"argPackAdvance":8,"readValueFromPointer":enumReadValueFromPointer(name,shift,isSigned),destructorFunction:null});exposePublicSymbol(name,ctor)}function requireRegisteredType(rawType,humanName){var impl=registeredTypes[rawType];if(undefined===impl){throwBindingError(humanName+" has unknown type "+getTypeName(rawType))}return impl}function __embind_register_enum_value(rawEnumType,name,enumValue){var enumType=requireRegisteredType(rawEnumType,"enum");name=readLatin1String(name);var Enum=enumType.constructor;var Value=Object.create(enumType.constructor.prototype,{value:{value:enumValue},constructor:{value:createNamedFunction(enumType.name+"_"+name,function(){})}});Enum.values[enumValue]=Value;Enum[name]=Value}function _embind_repr(v){if(v===null){return"null"}var t=typeof v;if(t==="object"||t==="array"||t==="function"){return v.toString()}else{return""+v}}function floatReadValueFromPointer(name,shift){switch(shift){case 2:return function(pointer){return this["fromWireType"](HEAPF32[pointer>>2])};case 3:return function(pointer){return this["fromWireType"](HEAPF64[pointer>>3])};default:throw new TypeError("Unknown float type: "+name)}}function __embind_register_float(rawType,name,size){var shift=getShiftFromSize(size);name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":function(value){return value},"toWireType":function(destructors,value){if(typeof value!=="number"&&typeof value!=="boolean"){throw new TypeError('Cannot convert "'+_embind_repr(value)+'" to '+this.name)}return value},"argPackAdvance":8,"readValueFromPointer":floatReadValueFromPointer(name,shift),destructorFunction:null})}function __embind_register_function(name,argCount,rawArgTypesAddr,signature,rawInvoker,fn){var argTypes=heap32VectorToArray(argCount,rawArgTypesAddr);name=readLatin1String(name);rawInvoker=embind__requireFunction(signature,rawInvoker);exposePublicSymbol(name,function(){throwUnboundTypeError("Cannot call "+name+" due to unbound types",argTypes)},argCount-1);whenDependentTypesAreResolved([],argTypes,function(argTypes){var invokerArgsArray=[argTypes[0],null].concat(argTypes.slice(1));replacePublicSymbol(name,craftInvokerFunction(name,invokerArgsArray,null,rawInvoker,fn),argCount-1);return[]})}function integerReadValueFromPointer(name,shift,signed){switch(shift){case 0:return signed?function readS8FromPointer(pointer){return HEAP8[pointer]}:function readU8FromPointer(pointer){return HEAPU8[pointer]};case 1:return signed?function readS16FromPointer(pointer){return HEAP16[pointer>>1]}:function readU16FromPointer(pointer){return HEAPU16[pointer>>1]};case 2:return signed?function readS32FromPointer(pointer){return HEAP32[pointer>>2]}:function readU32FromPointer(pointer){return HEAPU32[pointer>>2]};default:throw new TypeError("Unknown integer type: "+name)}}function __embind_register_integer(primitiveType,name,size,minRange,maxRange){name=readLatin1String(name);if(maxRange===-1){maxRange=4294967295}var shift=getShiftFromSize(size);var fromWireType=function(value){return value};if(minRange===0){var bitshift=32-8*size;fromWireType=function(value){return value<>>bitshift}}var isUnsignedType=name.indexOf("unsigned")!=-1;registerType(primitiveType,{name:name,"fromWireType":fromWireType,"toWireType":function(destructors,value){if(typeof value!=="number"&&typeof value!=="boolean"){throw new TypeError('Cannot convert "'+_embind_repr(value)+'" to '+this.name)}if(valuemaxRange){throw new TypeError('Passing a number "'+_embind_repr(value)+'" from JS side to C/C++ side to an argument of type "'+name+'", which is outside the valid range ['+minRange+", "+maxRange+"]!")}return isUnsignedType?value>>>0:value|0},"argPackAdvance":8,"readValueFromPointer":integerReadValueFromPointer(name,shift,minRange!==0),destructorFunction:null})}function __embind_register_memory_view(rawType,dataTypeIndex,name){var typeMapping=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array];var TA=typeMapping[dataTypeIndex];function decodeMemoryView(handle){handle=handle>>2;var heap=HEAPU32;var size=heap[handle];var data=heap[handle+1];return new TA(buffer,data,size)}name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":decodeMemoryView,"argPackAdvance":8,"readValueFromPointer":decodeMemoryView},{ignoreDuplicateRegistrations:true})}function __embind_register_std_string(rawType,name){name=readLatin1String(name);var stdStringIsUTF8=name==="std::string";registerType(rawType,{name:name,"fromWireType":function(value){var length=HEAPU32[value>>2];var str;if(stdStringIsUTF8){var decodeStartPtr=value+4;for(var i=0;i<=length;++i){var currentBytePtr=value+4+i;if(i==length||HEAPU8[currentBytePtr]==0){var maxRead=currentBytePtr-decodeStartPtr;var stringSegment=UTF8ToString(decodeStartPtr,maxRead);if(str===undefined){str=stringSegment}else{str+=String.fromCharCode(0);str+=stringSegment}decodeStartPtr=currentBytePtr+1}}}else{var a=new Array(length);for(var i=0;i>2]=length;if(stdStringIsUTF8&&valueIsOfTypeString){stringToUTF8(value,ptr+4,length+1)}else{if(valueIsOfTypeString){for(var i=0;i255){_free(ptr);throwBindingError("String has UTF-16 code units that do not fit in 8 bits")}HEAPU8[ptr+4+i]=charCode}}else{for(var i=0;i>2];var HEAP=getHeap();var str;var decodeStartPtr=value+4;for(var i=0;i<=length;++i){var currentBytePtr=value+4+i*charSize;if(i==length||HEAP[currentBytePtr>>shift]==0){var maxReadBytes=currentBytePtr-decodeStartPtr;var stringSegment=decodeString(decodeStartPtr,maxReadBytes);if(str===undefined){str=stringSegment}else{str+=String.fromCharCode(0);str+=stringSegment}decodeStartPtr=currentBytePtr+charSize}}_free(value);return str},"toWireType":function(destructors,value){if(!(typeof value==="string")){throwBindingError("Cannot pass non-string to C++ string type "+name)}var length=lengthBytesUTF(value);var ptr=_malloc(4+length+charSize);HEAPU32[ptr>>2]=length>>shift;encodeString(value,ptr+4,length+charSize);if(destructors!==null){destructors.push(_free,ptr)}return ptr},"argPackAdvance":8,"readValueFromPointer":simpleReadValueFromPointer,destructorFunction:function(ptr){_free(ptr)}})}function __embind_register_value_object(rawType,name,constructorSignature,rawConstructor,destructorSignature,rawDestructor){structRegistrations[rawType]={name:readLatin1String(name),rawConstructor:embind__requireFunction(constructorSignature,rawConstructor),rawDestructor:embind__requireFunction(destructorSignature,rawDestructor),fields:[]}}function __embind_register_value_object_field(structType,fieldName,getterReturnType,getterSignature,getter,getterContext,setterArgumentType,setterSignature,setter,setterContext){structRegistrations[structType].fields.push({fieldName:readLatin1String(fieldName),getterReturnType:getterReturnType,getter:embind__requireFunction(getterSignature,getter),getterContext:getterContext,setterArgumentType:setterArgumentType,setter:embind__requireFunction(setterSignature,setter),setterContext:setterContext})}function __embind_register_void(rawType,name){name=readLatin1String(name);registerType(rawType,{isVoid:true,name:name,"argPackAdvance":0,"fromWireType":function(){return undefined},"toWireType":function(destructors,o){return undefined}})}function requireHandle(handle){if(!handle){throwBindingError("Cannot use deleted val. handle = "+handle)}return emval_handle_array[handle].value}function __emval_as(handle,returnType,destructorsRef){handle=requireHandle(handle);returnType=requireRegisteredType(returnType,"emval::as");var destructors=[];var rd=__emval_register(destructors);HEAP32[destructorsRef>>2]=rd;return returnType["toWireType"](destructors,handle)}var emval_symbols={};function getStringOrSymbol(address){var symbol=emval_symbols[address];if(symbol===undefined){return readLatin1String(address)}else{return symbol}}var emval_methodCallers=[];function __emval_call_void_method(caller,handle,methodName,args){caller=emval_methodCallers[caller];handle=requireHandle(handle);methodName=getStringOrSymbol(methodName);caller(handle,methodName,null,args)}function emval_get_global(){if(typeof globalThis==="object"){return globalThis}return function(){return Function}()("return this")()}function __emval_get_global(name){if(name===0){return __emval_register(emval_get_global())}else{name=getStringOrSymbol(name);return __emval_register(emval_get_global()[name])}}function __emval_addMethodCaller(caller){var id=emval_methodCallers.length;emval_methodCallers.push(caller);return id}function __emval_lookupTypes(argCount,argTypes){var a=new Array(argCount);for(var i=0;i>2)+i],"parameter "+i)}return a}function __emval_get_method_caller(argCount,argTypes){var types=__emval_lookupTypes(argCount,argTypes);var retType=types[0];var signatureName=retType.name+"_$"+types.slice(1).map(function(t){return t.name}).join("_")+"$";var params=["retType"];var args=[retType];var argsList="";for(var i=0;i4){emval_handle_array[handle].refcount+=1}}function craftEmvalAllocator(argCount){var argsList="";for(var i=0;i>> 2) + "+i+'], "parameter '+i+'");\n'+"var arg"+i+" = argType"+i+".readValueFromPointer(args);\n"+"args += argType"+i+"['argPackAdvance'];\n"}functionBody+="var obj = new constructor("+argsList+");\n"+"return __emval_register(obj);\n"+"}\n";return new Function("requireRegisteredType","Module","__emval_register",functionBody)(requireRegisteredType,Module,__emval_register)}var emval_newers={};function __emval_new(handle,argCount,argTypes,args){handle=requireHandle(handle);var newer=emval_newers[argCount];if(!newer){newer=craftEmvalAllocator(argCount);emval_newers[argCount]=newer}return newer(handle,argTypes,args)}function __emval_new_cstring(v){return __emval_register(getStringOrSymbol(v))}function __emval_run_destructors(handle){var destructors=emval_handle_array[handle].value;runDestructors(destructors);__emval_decref(handle)}function _abort(){abort()}function _emscripten_memcpy_big(dest,src,num){HEAPU8.copyWithin(dest,src,src+num)}function _emscripten_get_heap_size(){return HEAPU8.length}function emscripten_realloc_buffer(size){try{wasmMemory.grow(size-buffer.byteLength+65535>>>16);updateGlobalBufferAndViews(wasmMemory.buffer);return 1}catch(e){}}function _emscripten_resize_heap(requestedSize){requestedSize=requestedSize>>>0;var oldSize=_emscripten_get_heap_size();var maxHeapSize=2147483648;if(requestedSize>maxHeapSize){return false}var minHeapSize=16777216;for(var cutDown=1;cutDown<=4;cutDown*=2){var overGrownHeapSize=oldSize*(1+.2/cutDown);overGrownHeapSize=Math.min(overGrownHeapSize,requestedSize+100663296);var newSize=Math.min(maxHeapSize,alignUp(Math.max(minHeapSize,requestedSize,overGrownHeapSize),65536));var replacement=emscripten_realloc_buffer(newSize);if(replacement){return true}}return false}var SYSCALLS={mappings:{},buffers:[null,[],[]],printChar:function(stream,curr){var buffer=SYSCALLS.buffers[stream];if(curr===0||curr===10){(stream===1?out:err)(UTF8ArrayToString(buffer,0));buffer.length=0}else{buffer.push(curr)}},varargs:undefined,get:function(){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(ptr){var ret=UTF8ToString(ptr);return ret},get64:function(low,high){return low}};function _fd_close(fd){return 0}function _fd_seek(fd,offset_low,offset_high,whence,newOffset){}function _fd_write(fd,iov,iovcnt,pnum){var num=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];for(var j=0;j>2]=num;return 0}function _setTempRet0($i){setTempRet0($i|0)}InternalError=Module["InternalError"]=extendError(Error,"InternalError");embind_init_charCodes();BindingError=Module["BindingError"]=extendError(Error,"BindingError");init_ClassHandle();init_RegisteredPointer();init_embind();UnboundTypeError=Module["UnboundTypeError"]=extendError(Error,"UnboundTypeError");init_emval();__ATINIT__.push({func:function(){___wasm_call_ctors()}});var asmLibraryArg={"t":__embind_finalize_value_object,"I":__embind_register_bool,"x":__embind_register_class,"w":__embind_register_class_constructor,"d":__embind_register_class_function,"k":__embind_register_constant,"H":__embind_register_emval,"n":__embind_register_enum,"a":__embind_register_enum_value,"A":__embind_register_float,"i":__embind_register_function,"j":__embind_register_integer,"h":__embind_register_memory_view,"B":__embind_register_std_string,"v":__embind_register_std_wstring,"u":__embind_register_value_object,"c":__embind_register_value_object_field,"J":__embind_register_void,"m":__emval_as,"s":__emval_call_void_method,"b":__emval_decref,"y":__emval_get_global,"p":__emval_get_method_caller,"r":__emval_get_module_property,"e":__emval_get_property,"g":__emval_incref,"q":__emval_new,"f":__emval_new_cstring,"l":__emval_run_destructors,"o":_abort,"E":_emscripten_memcpy_big,"F":_emscripten_resize_heap,"G":_fd_close,"C":_fd_seek,"z":_fd_write,"D":_setTempRet0};var asm=createWasm();var ___wasm_call_ctors=Module["___wasm_call_ctors"]=function(){return(___wasm_call_ctors=Module["___wasm_call_ctors"]=Module["asm"]["M"]).apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return(_malloc=Module["_malloc"]=Module["asm"]["N"]).apply(null,arguments)};var _free=Module["_free"]=function(){return(_free=Module["_free"]=Module["asm"]["O"]).apply(null,arguments)};var ___getTypeName=Module["___getTypeName"]=function(){return(___getTypeName=Module["___getTypeName"]=Module["asm"]["P"]).apply(null,arguments)};var ___embind_register_native_and_builtin_types=Module["___embind_register_native_and_builtin_types"]=function(){return(___embind_register_native_and_builtin_types=Module["___embind_register_native_and_builtin_types"]=Module["asm"]["Q"]).apply(null,arguments)};var dynCall_jiji=Module["dynCall_jiji"]=function(){return(dynCall_jiji=Module["dynCall_jiji"]=Module["asm"]["R"]).apply(null,arguments)};var calledRun;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function run(args){args=args||arguments_;if(runDependencies>0){return}preRun();if(runDependencies>0)return;function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();preMain();readyPromiseResolve(Module);if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}noExitRuntime=true;run(); +var Module=typeof BASIS!=="undefined"?BASIS:{};var readyPromiseResolve,readyPromiseReject;Module["ready"]=new Promise(function(resolve,reject){readyPromiseResolve=resolve;readyPromiseReject=reject});var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}var arguments_=[];var thisProgram="./this.program";var quit_=function(status,toThrow){throw toThrow};var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof process.versions==="object"&&typeof process.versions.node==="string";ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;var nodeFS;var nodePath;if(ENVIRONMENT_IS_NODE){if(ENVIRONMENT_IS_WORKER){scriptDirectory=require("path").dirname(scriptDirectory)+"/"}else{scriptDirectory=__dirname+"/"}read_=function shell_read(filename,binary){if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);return nodeFS["readFileSync"](filename,binary?null:"utf8")};readBinary=function readBinary(filename){var ret=read_(filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){thisProgram=process["argv"][1].replace(/\\/g,"/")}arguments_=process["argv"].slice(2);process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);quit_=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){read_=function shell_read(f){return read(f)}}readBinary=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){arguments_=scriptArgs}else if(typeof arguments!="undefined"){arguments_=arguments}if(typeof quit==="function"){quit_=function(status){quit(status)}}if(typeof print!=="undefined"){if(typeof console==="undefined")console={};console.log=print;console.warn=console.error=typeof printErr!=="undefined"?printErr:print}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(_scriptDir){scriptDirectory=_scriptDir}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}{read_=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){readBinary=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}setWindowTitle=function(title){document.title=title}}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.warn.bind(console);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["quit"])quit_=Module["quit"];var tempRet0=0;var setTempRet0=function(value){tempRet0=value};var wasmBinary;if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];var noExitRuntime;if(Module["noExitRuntime"])noExitRuntime=Module["noExitRuntime"];if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable=new WebAssembly.Table({"initial":157,"maximum":157+0,"element":"anyfunc"});var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}var UTF8Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(heap,idx,maxBytesToRead){var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heap[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heap.subarray&&UTF8Decoder){return UTF8Decoder.decode(heap.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,heap,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function UTF16ToString(ptr,maxBytesToRead){var endPtr=ptr;var idx=endPtr>>1;var maxIdx=idx+maxBytesToRead/2;while(!(idx>=maxIdx)&&HEAPU16[idx])++idx;endPtr=idx<<1;if(endPtr-ptr>32&&UTF16Decoder){return UTF16Decoder.decode(HEAPU8.subarray(ptr,endPtr))}else{var i=0;var str="";while(1){var codeUnit=HEAP16[ptr+i*2>>1];if(codeUnit==0||i==maxBytesToRead/2)return str;++i;str+=String.fromCharCode(codeUnit)}}}function stringToUTF16(str,outPtr,maxBytesToWrite){if(maxBytesToWrite===undefined){maxBytesToWrite=2147483647}if(maxBytesToWrite<2)return 0;maxBytesToWrite-=2;var startPtr=outPtr;var numCharsToWrite=maxBytesToWrite>1]=codeUnit;outPtr+=2}HEAP16[outPtr>>1]=0;return outPtr-startPtr}function lengthBytesUTF16(str){return str.length*2}function UTF32ToString(ptr,maxBytesToRead){var i=0;var str="";while(!(i>=maxBytesToRead/4)){var utf32=HEAP32[ptr+i*4>>2];if(utf32==0)break;++i;if(utf32>=65536){var ch=utf32-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}else{str+=String.fromCharCode(utf32)}}return str}function stringToUTF32(str,outPtr,maxBytesToWrite){if(maxBytesToWrite===undefined){maxBytesToWrite=2147483647}if(maxBytesToWrite<4)return 0;var startPtr=outPtr;var endPtr=startPtr+maxBytesToWrite-4;for(var i=0;i=55296&&codeUnit<=57343){var trailSurrogate=str.charCodeAt(++i);codeUnit=65536+((codeUnit&1023)<<10)|trailSurrogate&1023}HEAP32[outPtr>>2]=codeUnit;outPtr+=4;if(outPtr+4>endPtr)break}HEAP32[outPtr>>2]=0;return outPtr-startPtr}function lengthBytesUTF32(str){var len=0;for(var i=0;i=55296&&codeUnit<=57343)++i;len+=4}return len}var WASM_PAGE_SIZE=65536;function alignUp(x,multiple){if(x%multiple>0){x+=multiple-x%multiple}return x}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferAndViews(buf){buffer=buf;Module["HEAP8"]=HEAP8=new Int8Array(buf);Module["HEAP16"]=HEAP16=new Int16Array(buf);Module["HEAP32"]=HEAP32=new Int32Array(buf);Module["HEAPU8"]=HEAPU8=new Uint8Array(buf);Module["HEAPU16"]=HEAPU16=new Uint16Array(buf);Module["HEAPU32"]=HEAPU32=new Uint32Array(buf);Module["HEAPF32"]=HEAPF32=new Float32Array(buf);Module["HEAPF64"]=HEAPF64=new Float64Array(buf)}var DYNAMIC_BASE=5552064,DYNAMICTOP_PTR=309024;var INITIAL_INITIAL_MEMORY=Module["INITIAL_MEMORY"]||16777216;if(Module["wasmMemory"]){wasmMemory=Module["wasmMemory"]}else{wasmMemory=new WebAssembly.Memory({"initial":INITIAL_INITIAL_MEMORY/WASM_PAGE_SIZE,"maximum":2147483648/WASM_PAGE_SIZE})}if(wasmMemory){buffer=wasmMemory.buffer}INITIAL_INITIAL_MEMORY=buffer.byteLength;updateGlobalBufferAndViews(buffer);HEAP32[DYNAMICTOP_PTR>>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback(Module);continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_ceil=Math.ceil;var Math_floor=Math.floor;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}what+="";out(what);err(what);ABORT=true;EXITSTATUS=1;what="abort("+what+"). Build with -s ASSERTIONS=1 for more info.";throw new WebAssembly.RuntimeError(what)}function hasPrefix(str,prefix){return String.prototype.startsWith?str.startsWith(prefix):str.indexOf(prefix)===0}var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return hasPrefix(filename,dataURIPrefix)}var fileURIPrefix="file://";function isFileURI(filename){return hasPrefix(filename,fileURIPrefix)}var wasmBinaryFile="basis_transcoder.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"&&!isFileURI(wasmBinaryFile)){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(){var info={"a":asmLibraryArg};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){return getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}function instantiateAsync(){if(!wasmBinary&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&!isFileURI(wasmBinaryFile)&&typeof fetch==="function"){fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){var result=WebAssembly.instantiateStreaming(response,info);return result.then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})})}else{return instantiateArrayBuffer(receiveInstantiatedSource)}}if(Module["instantiateWasm"]){try{var exports=Module["instantiateWasm"](info,receiveInstance);return exports}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}instantiateAsync();return{}}__ATINIT__.push({func:function(){___wasm_call_ctors()}});var structRegistrations={};function runDestructors(destructors){while(destructors.length){var ptr=destructors.pop();var del=destructors.pop();del(ptr)}}function simpleReadValueFromPointer(pointer){return this["fromWireType"](HEAPU32[pointer>>2])}var awaitingDependencies={};var registeredTypes={};var typeDependencies={};var char_0=48;var char_9=57;function makeLegalFunctionName(name){if(undefined===name){return"_unknown"}name=name.replace(/[^a-zA-Z0-9_]/g,"$");var f=name.charCodeAt(0);if(f>=char_0&&f<=char_9){return"_"+name}else{return name}}function createNamedFunction(name,body){name=makeLegalFunctionName(name);return new Function("body","return function "+name+"() {\n"+' "use strict";'+" return body.apply(this, arguments);\n"+"};\n")(body)}function extendError(baseErrorType,errorName){var errorClass=createNamedFunction(errorName,function(message){this.name=errorName;this.message=message;var stack=new Error(message).stack;if(stack!==undefined){this.stack=this.toString()+"\n"+stack.replace(/^Error(:[^\n]*)?\n/,"")}});errorClass.prototype=Object.create(baseErrorType.prototype);errorClass.prototype.constructor=errorClass;errorClass.prototype.toString=function(){if(this.message===undefined){return this.name}else{return this.name+": "+this.message}};return errorClass}var InternalError=undefined;function throwInternalError(message){throw new InternalError(message)}function whenDependentTypesAreResolved(myTypes,dependentTypes,getTypeConverters){myTypes.forEach(function(type){typeDependencies[type]=dependentTypes});function onComplete(typeConverters){var myTypeConverters=getTypeConverters(typeConverters);if(myTypeConverters.length!==myTypes.length){throwInternalError("Mismatched type converter count")}for(var i=0;i>shift])},destructorFunction:null})}function ClassHandle_isAliasOf(other){if(!(this instanceof ClassHandle)){return false}if(!(other instanceof ClassHandle)){return false}var leftClass=this.$$.ptrType.registeredClass;var left=this.$$.ptr;var rightClass=other.$$.ptrType.registeredClass;var right=other.$$.ptr;while(leftClass.baseClass){left=leftClass.upcast(left);leftClass=leftClass.baseClass}while(rightClass.baseClass){right=rightClass.upcast(right);rightClass=rightClass.baseClass}return leftClass===rightClass&&left===right}function shallowCopyInternalPointer(o){return{count:o.count,deleteScheduled:o.deleteScheduled,preservePointerOnDelete:o.preservePointerOnDelete,ptr:o.ptr,ptrType:o.ptrType,smartPtr:o.smartPtr,smartPtrType:o.smartPtrType}}function throwInstanceAlreadyDeleted(obj){function getInstanceTypeName(handle){return handle.$$.ptrType.registeredClass.name}throwBindingError(getInstanceTypeName(obj)+" instance already deleted")}var finalizationGroup=false;function detachFinalizer(handle){}function runDestructor($$){if($$.smartPtr){$$.smartPtrType.rawDestructor($$.smartPtr)}else{$$.ptrType.registeredClass.rawDestructor($$.ptr)}}function releaseClassHandle($$){$$.count.value-=1;var toDelete=0===$$.count.value;if(toDelete){runDestructor($$)}}function attachFinalizer(handle){if("undefined"===typeof FinalizationGroup){attachFinalizer=function(handle){return handle};return handle}finalizationGroup=new FinalizationGroup(function(iter){for(var result=iter.next();!result.done;result=iter.next()){var $$=result.value;if(!$$.ptr){console.warn("object already deleted: "+$$.ptr)}else{releaseClassHandle($$)}}});attachFinalizer=function(handle){finalizationGroup.register(handle,handle.$$,handle.$$);return handle};detachFinalizer=function(handle){finalizationGroup.unregister(handle.$$)};return attachFinalizer(handle)}function ClassHandle_clone(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.preservePointerOnDelete){this.$$.count.value+=1;return this}else{var clone=attachFinalizer(Object.create(Object.getPrototypeOf(this),{$$:{value:shallowCopyInternalPointer(this.$$)}}));clone.$$.count.value+=1;clone.$$.deleteScheduled=false;return clone}}function ClassHandle_delete(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError("Object already scheduled for deletion")}detachFinalizer(this);releaseClassHandle(this.$$);if(!this.$$.preservePointerOnDelete){this.$$.smartPtr=undefined;this.$$.ptr=undefined}}function ClassHandle_isDeleted(){return!this.$$.ptr}var delayFunction=undefined;var deletionQueue=[];function flushPendingDeletes(){while(deletionQueue.length){var obj=deletionQueue.pop();obj.$$.deleteScheduled=false;obj["delete"]()}}function ClassHandle_deleteLater(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError("Object already scheduled for deletion")}deletionQueue.push(this);if(deletionQueue.length===1&&delayFunction){delayFunction(flushPendingDeletes)}this.$$.deleteScheduled=true;return this}function init_ClassHandle(){ClassHandle.prototype["isAliasOf"]=ClassHandle_isAliasOf;ClassHandle.prototype["clone"]=ClassHandle_clone;ClassHandle.prototype["delete"]=ClassHandle_delete;ClassHandle.prototype["isDeleted"]=ClassHandle_isDeleted;ClassHandle.prototype["deleteLater"]=ClassHandle_deleteLater}function ClassHandle(){}var registeredPointers={};function ensureOverloadTable(proto,methodName,humanName){if(undefined===proto[methodName].overloadTable){var prevFunc=proto[methodName];proto[methodName]=function(){if(!proto[methodName].overloadTable.hasOwnProperty(arguments.length)){throwBindingError("Function '"+humanName+"' called with an invalid number of arguments ("+arguments.length+") - expects one of ("+proto[methodName].overloadTable+")!")}return proto[methodName].overloadTable[arguments.length].apply(this,arguments)};proto[methodName].overloadTable=[];proto[methodName].overloadTable[prevFunc.argCount]=prevFunc}}function exposePublicSymbol(name,value,numArguments){if(Module.hasOwnProperty(name)){if(undefined===numArguments||undefined!==Module[name].overloadTable&&undefined!==Module[name].overloadTable[numArguments]){throwBindingError("Cannot register public name '"+name+"' twice")}ensureOverloadTable(Module,name,name);if(Module.hasOwnProperty(numArguments)){throwBindingError("Cannot register multiple overloads of a function with the same number of arguments ("+numArguments+")!")}Module[name].overloadTable[numArguments]=value}else{Module[name]=value;if(undefined!==numArguments){Module[name].numArguments=numArguments}}}function RegisteredClass(name,constructor,instancePrototype,rawDestructor,baseClass,getActualType,upcast,downcast){this.name=name;this.constructor=constructor;this.instancePrototype=instancePrototype;this.rawDestructor=rawDestructor;this.baseClass=baseClass;this.getActualType=getActualType;this.upcast=upcast;this.downcast=downcast;this.pureVirtualFunctions=[]}function upcastPointer(ptr,ptrClass,desiredClass){while(ptrClass!==desiredClass){if(!ptrClass.upcast){throwBindingError("Expected null or instance of "+desiredClass.name+", got an instance of "+ptrClass.name)}ptr=ptrClass.upcast(ptr);ptrClass=ptrClass.baseClass}return ptr}function constNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}return 0}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function genericPointerToWireType(destructors,handle){var ptr;if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}if(this.isSmartPointer){ptr=this.rawConstructor();if(destructors!==null){destructors.push(this.rawDestructor,ptr)}return ptr}else{return 0}}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}if(!this.isConst&&handle.$$.ptrType.isConst){throwBindingError("Cannot convert argument of type "+(handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name)+" to parameter type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);if(this.isSmartPointer){if(undefined===handle.$$.smartPtr){throwBindingError("Passing raw pointer to smart pointer is illegal")}switch(this.sharingPolicy){case 0:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{throwBindingError("Cannot convert argument of type "+(handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name)+" to parameter type "+this.name)}break;case 1:ptr=handle.$$.smartPtr;break;case 2:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{var clonedHandle=handle["clone"]();ptr=this.rawShare(ptr,__emval_register(function(){clonedHandle["delete"]()}));if(destructors!==null){destructors.push(this.rawDestructor,ptr)}}break;default:throwBindingError("Unsupporting sharing policy")}}return ptr}function nonConstNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}return 0}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}if(handle.$$.ptrType.isConst){throwBindingError("Cannot convert argument of type "+handle.$$.ptrType.name+" to parameter type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function RegisteredPointer_getPointee(ptr){if(this.rawGetPointee){ptr=this.rawGetPointee(ptr)}return ptr}function RegisteredPointer_destructor(ptr){if(this.rawDestructor){this.rawDestructor(ptr)}}function RegisteredPointer_deleteObject(handle){if(handle!==null){handle["delete"]()}}function downcastPointer(ptr,ptrClass,desiredClass){if(ptrClass===desiredClass){return ptr}if(undefined===desiredClass.baseClass){return null}var rv=downcastPointer(ptr,ptrClass,desiredClass.baseClass);if(rv===null){return null}return desiredClass.downcast(rv)}function getInheritedInstanceCount(){return Object.keys(registeredInstances).length}function getLiveInheritedInstances(){var rv=[];for(var k in registeredInstances){if(registeredInstances.hasOwnProperty(k)){rv.push(registeredInstances[k])}}return rv}function setDelayFunction(fn){delayFunction=fn;if(deletionQueue.length&&delayFunction){delayFunction(flushPendingDeletes)}}function init_embind(){Module["getInheritedInstanceCount"]=getInheritedInstanceCount;Module["getLiveInheritedInstances"]=getLiveInheritedInstances;Module["flushPendingDeletes"]=flushPendingDeletes;Module["setDelayFunction"]=setDelayFunction}var registeredInstances={};function getBasestPointer(class_,ptr){if(ptr===undefined){throwBindingError("ptr should not be undefined")}while(class_.baseClass){ptr=class_.upcast(ptr);class_=class_.baseClass}return ptr}function getInheritedInstance(class_,ptr){ptr=getBasestPointer(class_,ptr);return registeredInstances[ptr]}function makeClassHandle(prototype,record){if(!record.ptrType||!record.ptr){throwInternalError("makeClassHandle requires ptr and ptrType")}var hasSmartPtrType=!!record.smartPtrType;var hasSmartPtr=!!record.smartPtr;if(hasSmartPtrType!==hasSmartPtr){throwInternalError("Both smartPtrType and smartPtr must be specified")}record.count={value:1};return attachFinalizer(Object.create(prototype,{$$:{value:record}}))}function RegisteredPointer_fromWireType(ptr){var rawPointer=this.getPointee(ptr);if(!rawPointer){this.destructor(ptr);return null}var registeredInstance=getInheritedInstance(this.registeredClass,rawPointer);if(undefined!==registeredInstance){if(0===registeredInstance.$$.count.value){registeredInstance.$$.ptr=rawPointer;registeredInstance.$$.smartPtr=ptr;return registeredInstance["clone"]()}else{var rv=registeredInstance["clone"]();this.destructor(ptr);return rv}}function makeDefaultHandle(){if(this.isSmartPointer){return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this.pointeeType,ptr:rawPointer,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this,ptr:ptr})}}var actualType=this.registeredClass.getActualType(rawPointer);var registeredPointerRecord=registeredPointers[actualType];if(!registeredPointerRecord){return makeDefaultHandle.call(this)}var toType;if(this.isConst){toType=registeredPointerRecord.constPointerType}else{toType=registeredPointerRecord.pointerType}var dp=downcastPointer(rawPointer,this.registeredClass,toType.registeredClass);if(dp===null){return makeDefaultHandle.call(this)}if(this.isSmartPointer){return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp})}}function init_RegisteredPointer(){RegisteredPointer.prototype.getPointee=RegisteredPointer_getPointee;RegisteredPointer.prototype.destructor=RegisteredPointer_destructor;RegisteredPointer.prototype["argPackAdvance"]=8;RegisteredPointer.prototype["readValueFromPointer"]=simpleReadValueFromPointer;RegisteredPointer.prototype["deleteObject"]=RegisteredPointer_deleteObject;RegisteredPointer.prototype["fromWireType"]=RegisteredPointer_fromWireType}function RegisteredPointer(name,registeredClass,isReference,isConst,isSmartPointer,pointeeType,sharingPolicy,rawGetPointee,rawConstructor,rawShare,rawDestructor){this.name=name;this.registeredClass=registeredClass;this.isReference=isReference;this.isConst=isConst;this.isSmartPointer=isSmartPointer;this.pointeeType=pointeeType;this.sharingPolicy=sharingPolicy;this.rawGetPointee=rawGetPointee;this.rawConstructor=rawConstructor;this.rawShare=rawShare;this.rawDestructor=rawDestructor;if(!isSmartPointer&®isteredClass.baseClass===undefined){if(isConst){this["toWireType"]=constNoSmartPtrRawPointerToWireType;this.destructorFunction=null}else{this["toWireType"]=nonConstNoSmartPtrRawPointerToWireType;this.destructorFunction=null}}else{this["toWireType"]=genericPointerToWireType}}function replacePublicSymbol(name,value,numArguments){if(!Module.hasOwnProperty(name)){throwInternalError("Replacing nonexistant public symbol")}if(undefined!==Module[name].overloadTable&&undefined!==numArguments){Module[name].overloadTable[numArguments]=value}else{Module[name]=value;Module[name].argCount=numArguments}}function embind__requireFunction(signature,rawFunction){signature=readLatin1String(signature);function makeDynCaller(dynCall){var args=[];for(var i=1;i>2)+i])}return array}function __embind_register_class_constructor(rawClassType,argCount,rawArgTypesAddr,invokerSignature,invoker,rawConstructor){assert(argCount>0);var rawArgTypes=heap32VectorToArray(argCount,rawArgTypesAddr);invoker=embind__requireFunction(invokerSignature,invoker);var args=[rawConstructor];var destructors=[];whenDependentTypesAreResolved([],[rawClassType],function(classType){classType=classType[0];var humanName="constructor "+classType.name;if(undefined===classType.registeredClass.constructor_body){classType.registeredClass.constructor_body=[]}if(undefined!==classType.registeredClass.constructor_body[argCount-1]){throw new BindingError("Cannot register multiple constructors with identical number of parameters ("+(argCount-1)+") for class '"+classType.name+"'! Overload resolution is currently only performed using the parameter count, not actual type info!")}classType.registeredClass.constructor_body[argCount-1]=function unboundTypeHandler(){throwUnboundTypeError("Cannot construct "+classType.name+" due to unbound types",rawArgTypes)};whenDependentTypesAreResolved([],rawArgTypes,function(argTypes){classType.registeredClass.constructor_body[argCount-1]=function constructor_body(){if(arguments.length!==argCount-1){throwBindingError(humanName+" called with "+arguments.length+" arguments, expected "+(argCount-1))}destructors.length=0;args.length=argCount;for(var i=1;i0?", ":"")+argsListWired}invokerFnBody+=(returns?"var rv = ":"")+"invoker(fn"+(argsListWired.length>0?", ":"")+argsListWired+");\n";if(needsDestructorStack){invokerFnBody+="runDestructors(destructors);\n"}else{for(var i=isClassMethodFunc?1:2;i4&&0===--emval_handle_array[handle].refcount){emval_handle_array[handle]=undefined;emval_free_list.push(handle)}}function count_emval_handles(){var count=0;for(var i=5;i>1])};case 2:return function(pointer){var heap=signed?HEAP32:HEAPU32;return this["fromWireType"](heap[pointer>>2])};default:throw new TypeError("Unknown integer type: "+name)}}function __embind_register_enum(rawType,name,size,isSigned){var shift=getShiftFromSize(size);name=readLatin1String(name);function ctor(){}ctor.values={};registerType(rawType,{name:name,constructor:ctor,"fromWireType":function(c){return this.constructor.values[c]},"toWireType":function(destructors,c){return c.value},"argPackAdvance":8,"readValueFromPointer":enumReadValueFromPointer(name,shift,isSigned),destructorFunction:null});exposePublicSymbol(name,ctor)}function requireRegisteredType(rawType,humanName){var impl=registeredTypes[rawType];if(undefined===impl){throwBindingError(humanName+" has unknown type "+getTypeName(rawType))}return impl}function __embind_register_enum_value(rawEnumType,name,enumValue){var enumType=requireRegisteredType(rawEnumType,"enum");name=readLatin1String(name);var Enum=enumType.constructor;var Value=Object.create(enumType.constructor.prototype,{value:{value:enumValue},constructor:{value:createNamedFunction(enumType.name+"_"+name,function(){})}});Enum.values[enumValue]=Value;Enum[name]=Value}function _embind_repr(v){if(v===null){return"null"}var t=typeof v;if(t==="object"||t==="array"||t==="function"){return v.toString()}else{return""+v}}function floatReadValueFromPointer(name,shift){switch(shift){case 2:return function(pointer){return this["fromWireType"](HEAPF32[pointer>>2])};case 3:return function(pointer){return this["fromWireType"](HEAPF64[pointer>>3])};default:throw new TypeError("Unknown float type: "+name)}}function __embind_register_float(rawType,name,size){var shift=getShiftFromSize(size);name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":function(value){return value},"toWireType":function(destructors,value){if(typeof value!=="number"&&typeof value!=="boolean"){throw new TypeError('Cannot convert "'+_embind_repr(value)+'" to '+this.name)}return value},"argPackAdvance":8,"readValueFromPointer":floatReadValueFromPointer(name,shift),destructorFunction:null})}function __embind_register_function(name,argCount,rawArgTypesAddr,signature,rawInvoker,fn){var argTypes=heap32VectorToArray(argCount,rawArgTypesAddr);name=readLatin1String(name);rawInvoker=embind__requireFunction(signature,rawInvoker);exposePublicSymbol(name,function(){throwUnboundTypeError("Cannot call "+name+" due to unbound types",argTypes)},argCount-1);whenDependentTypesAreResolved([],argTypes,function(argTypes){var invokerArgsArray=[argTypes[0],null].concat(argTypes.slice(1));replacePublicSymbol(name,craftInvokerFunction(name,invokerArgsArray,null,rawInvoker,fn),argCount-1);return[]})}function integerReadValueFromPointer(name,shift,signed){switch(shift){case 0:return signed?function readS8FromPointer(pointer){return HEAP8[pointer]}:function readU8FromPointer(pointer){return HEAPU8[pointer]};case 1:return signed?function readS16FromPointer(pointer){return HEAP16[pointer>>1]}:function readU16FromPointer(pointer){return HEAPU16[pointer>>1]};case 2:return signed?function readS32FromPointer(pointer){return HEAP32[pointer>>2]}:function readU32FromPointer(pointer){return HEAPU32[pointer>>2]};default:throw new TypeError("Unknown integer type: "+name)}}function __embind_register_integer(primitiveType,name,size,minRange,maxRange){name=readLatin1String(name);if(maxRange===-1){maxRange=4294967295}var shift=getShiftFromSize(size);var fromWireType=function(value){return value};if(minRange===0){var bitshift=32-8*size;fromWireType=function(value){return value<>>bitshift}}var isUnsignedType=name.indexOf("unsigned")!=-1;registerType(primitiveType,{name:name,"fromWireType":fromWireType,"toWireType":function(destructors,value){if(typeof value!=="number"&&typeof value!=="boolean"){throw new TypeError('Cannot convert "'+_embind_repr(value)+'" to '+this.name)}if(valuemaxRange){throw new TypeError('Passing a number "'+_embind_repr(value)+'" from JS side to C/C++ side to an argument of type "'+name+'", which is outside the valid range ['+minRange+", "+maxRange+"]!")}return isUnsignedType?value>>>0:value|0},"argPackAdvance":8,"readValueFromPointer":integerReadValueFromPointer(name,shift,minRange!==0),destructorFunction:null})}function __embind_register_memory_view(rawType,dataTypeIndex,name){var typeMapping=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array];var TA=typeMapping[dataTypeIndex];function decodeMemoryView(handle){handle=handle>>2;var heap=HEAPU32;var size=heap[handle];var data=heap[handle+1];return new TA(buffer,data,size)}name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":decodeMemoryView,"argPackAdvance":8,"readValueFromPointer":decodeMemoryView},{ignoreDuplicateRegistrations:true})}function __embind_register_std_string(rawType,name){name=readLatin1String(name);var stdStringIsUTF8=name==="std::string";registerType(rawType,{name:name,"fromWireType":function(value){var length=HEAPU32[value>>2];var str;if(stdStringIsUTF8){var decodeStartPtr=value+4;for(var i=0;i<=length;++i){var currentBytePtr=value+4+i;if(HEAPU8[currentBytePtr]==0||i==length){var maxRead=currentBytePtr-decodeStartPtr;var stringSegment=UTF8ToString(decodeStartPtr,maxRead);if(str===undefined){str=stringSegment}else{str+=String.fromCharCode(0);str+=stringSegment}decodeStartPtr=currentBytePtr+1}}}else{var a=new Array(length);for(var i=0;i>2]=length;if(stdStringIsUTF8&&valueIsOfTypeString){stringToUTF8(value,ptr+4,length+1)}else{if(valueIsOfTypeString){for(var i=0;i255){_free(ptr);throwBindingError("String has UTF-16 code units that do not fit in 8 bits")}HEAPU8[ptr+4+i]=charCode}}else{for(var i=0;i>2];var HEAP=getHeap();var str;var decodeStartPtr=value+4;for(var i=0;i<=length;++i){var currentBytePtr=value+4+i*charSize;if(HEAP[currentBytePtr>>shift]==0||i==length){var maxReadBytes=currentBytePtr-decodeStartPtr;var stringSegment=decodeString(decodeStartPtr,maxReadBytes);if(str===undefined){str=stringSegment}else{str+=String.fromCharCode(0);str+=stringSegment}decodeStartPtr=currentBytePtr+charSize}}_free(value);return str},"toWireType":function(destructors,value){if(!(typeof value==="string")){throwBindingError("Cannot pass non-string to C++ string type "+name)}var length=lengthBytesUTF(value);var ptr=_malloc(4+length+charSize);HEAPU32[ptr>>2]=length>>shift;encodeString(value,ptr+4,length+charSize);if(destructors!==null){destructors.push(_free,ptr)}return ptr},"argPackAdvance":8,"readValueFromPointer":simpleReadValueFromPointer,destructorFunction:function(ptr){_free(ptr)}})}function __embind_register_value_object(rawType,name,constructorSignature,rawConstructor,destructorSignature,rawDestructor){structRegistrations[rawType]={name:readLatin1String(name),rawConstructor:embind__requireFunction(constructorSignature,rawConstructor),rawDestructor:embind__requireFunction(destructorSignature,rawDestructor),fields:[]}}function __embind_register_value_object_field(structType,fieldName,getterReturnType,getterSignature,getter,getterContext,setterArgumentType,setterSignature,setter,setterContext){structRegistrations[structType].fields.push({fieldName:readLatin1String(fieldName),getterReturnType:getterReturnType,getter:embind__requireFunction(getterSignature,getter),getterContext:getterContext,setterArgumentType:setterArgumentType,setter:embind__requireFunction(setterSignature,setter),setterContext:setterContext})}function __embind_register_void(rawType,name){name=readLatin1String(name);registerType(rawType,{isVoid:true,name:name,"argPackAdvance":0,"fromWireType":function(){return undefined},"toWireType":function(destructors,o){return undefined}})}function requireHandle(handle){if(!handle){throwBindingError("Cannot use deleted val. handle = "+handle)}return emval_handle_array[handle].value}function __emval_as(handle,returnType,destructorsRef){handle=requireHandle(handle);returnType=requireRegisteredType(returnType,"emval::as");var destructors=[];var rd=__emval_register(destructors);HEAP32[destructorsRef>>2]=rd;return returnType["toWireType"](destructors,handle)}var emval_symbols={};function getStringOrSymbol(address){var symbol=emval_symbols[address];if(symbol===undefined){return readLatin1String(address)}else{return symbol}}var emval_methodCallers=[];function __emval_call_void_method(caller,handle,methodName,args){caller=emval_methodCallers[caller];handle=requireHandle(handle);methodName=getStringOrSymbol(methodName);caller(handle,methodName,null,args)}function emval_get_global(){if(typeof globalThis==="object"){return globalThis}return function(){return Function}()("return this")()}function __emval_get_global(name){if(name===0){return __emval_register(emval_get_global())}else{name=getStringOrSymbol(name);return __emval_register(emval_get_global()[name])}}function __emval_addMethodCaller(caller){var id=emval_methodCallers.length;emval_methodCallers.push(caller);return id}function __emval_lookupTypes(argCount,argTypes){var a=new Array(argCount);for(var i=0;i>2)+i],"parameter "+i)}return a}function __emval_get_method_caller(argCount,argTypes){var types=__emval_lookupTypes(argCount,argTypes);var retType=types[0];var signatureName=retType.name+"_$"+types.slice(1).map(function(t){return t.name}).join("_")+"$";var params=["retType"];var args=[retType];var argsList="";for(var i=0;i4){emval_handle_array[handle].refcount+=1}}function craftEmvalAllocator(argCount){var argsList="";for(var i=0;i>> 2) + "+i+'], "parameter '+i+'");\n'+"var arg"+i+" = argType"+i+".readValueFromPointer(args);\n"+"args += argType"+i+"['argPackAdvance'];\n"}functionBody+="var obj = new constructor("+argsList+");\n"+"return __emval_register(obj);\n"+"}\n";return new Function("requireRegisteredType","Module","__emval_register",functionBody)(requireRegisteredType,Module,__emval_register)}var emval_newers={};function __emval_new(handle,argCount,argTypes,args){handle=requireHandle(handle);var newer=emval_newers[argCount];if(!newer){newer=craftEmvalAllocator(argCount);emval_newers[argCount]=newer}return newer(handle,argTypes,args)}function __emval_new_cstring(v){return __emval_register(getStringOrSymbol(v))}function __emval_run_destructors(handle){var destructors=emval_handle_array[handle].value;runDestructors(destructors);__emval_decref(handle)}function _abort(){abort()}function _emscripten_memcpy_big(dest,src,num){HEAPU8.copyWithin(dest,src,src+num)}function _emscripten_get_heap_size(){return HEAPU8.length}function emscripten_realloc_buffer(size){try{wasmMemory.grow(size-buffer.byteLength+65535>>>16);updateGlobalBufferAndViews(wasmMemory.buffer);return 1}catch(e){}}function _emscripten_resize_heap(requestedSize){requestedSize=requestedSize>>>0;var oldSize=_emscripten_get_heap_size();var PAGE_MULTIPLE=65536;var maxHeapSize=2147483648;if(requestedSize>maxHeapSize){return false}var minHeapSize=16777216;for(var cutDown=1;cutDown<=4;cutDown*=2){var overGrownHeapSize=oldSize*(1+.2/cutDown);overGrownHeapSize=Math.min(overGrownHeapSize,requestedSize+100663296);var newSize=Math.min(maxHeapSize,alignUp(Math.max(minHeapSize,requestedSize,overGrownHeapSize),PAGE_MULTIPLE));var replacement=emscripten_realloc_buffer(newSize);if(replacement){return true}}return false}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)}};var SYSCALLS={mappings:{},buffers:[null,[],[]],printChar:function(stream,curr){var buffer=SYSCALLS.buffers[stream];if(curr===0||curr===10){(stream===1?out:err)(UTF8ArrayToString(buffer,0));buffer.length=0}else{buffer.push(curr)}},varargs:undefined,get:function(){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(ptr){var ret=UTF8ToString(ptr);return ret},get64:function(low,high){return low}};function _fd_close(fd){return 0}function _fd_seek(fd,offset_low,offset_high,whence,newOffset){}function _fd_write(fd,iov,iovcnt,pnum){var num=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];for(var j=0;j>2]=num;return 0}function _roundf(d){d=+d;return d>=+0?+Math_floor(d+ +.5):+Math_ceil(d-+.5)}function _setTempRet0($i){setTempRet0($i|0)}InternalError=Module["InternalError"]=extendError(Error,"InternalError");embind_init_charCodes();BindingError=Module["BindingError"]=extendError(Error,"BindingError");init_ClassHandle();init_RegisteredPointer();init_embind();UnboundTypeError=Module["UnboundTypeError"]=extendError(Error,"UnboundTypeError");init_emval();var asmLibraryArg={"u":__embind_finalize_value_object,"J":__embind_register_bool,"y":__embind_register_class,"x":__embind_register_class_constructor,"d":__embind_register_class_function,"k":__embind_register_constant,"I":__embind_register_emval,"n":__embind_register_enum,"a":__embind_register_enum_value,"B":__embind_register_float,"i":__embind_register_function,"j":__embind_register_integer,"h":__embind_register_memory_view,"C":__embind_register_std_string,"w":__embind_register_std_wstring,"v":__embind_register_value_object,"c":__embind_register_value_object_field,"K":__embind_register_void,"m":__emval_as,"s":__emval_call_void_method,"b":__emval_decref,"z":__emval_get_global,"t":__emval_get_method_caller,"r":__emval_get_module_property,"e":__emval_get_property,"g":__emval_incref,"q":__emval_new,"f":__emval_new_cstring,"l":__emval_run_destructors,"p":_abort,"F":_emscripten_memcpy_big,"G":_emscripten_resize_heap,"H":_fd_close,"D":_fd_seek,"A":_fd_write,"memory":wasmMemory,"o":_roundf,"E":_setTempRet0,"table":wasmTable};var asm=createWasm();Module["asm"]=asm;var ___wasm_call_ctors=Module["___wasm_call_ctors"]=function(){return(___wasm_call_ctors=Module["___wasm_call_ctors"]=Module["asm"]["L"]).apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return(_malloc=Module["_malloc"]=Module["asm"]["M"]).apply(null,arguments)};var _free=Module["_free"]=function(){return(_free=Module["_free"]=Module["asm"]["N"]).apply(null,arguments)};var ___getTypeName=Module["___getTypeName"]=function(){return(___getTypeName=Module["___getTypeName"]=Module["asm"]["O"]).apply(null,arguments)};var ___embind_register_native_and_builtin_types=Module["___embind_register_native_and_builtin_types"]=function(){return(___embind_register_native_and_builtin_types=Module["___embind_register_native_and_builtin_types"]=Module["asm"]["P"]).apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return(dynCall_viii=Module["dynCall_viii"]=Module["asm"]["Q"]).apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return(dynCall_vi=Module["dynCall_vi"]=Module["asm"]["R"]).apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return(dynCall_v=Module["dynCall_v"]=Module["asm"]["S"]).apply(null,arguments)};var dynCall_i=Module["dynCall_i"]=function(){return(dynCall_i=Module["dynCall_i"]=Module["asm"]["T"]).apply(null,arguments)};var dynCall_iii=Module["dynCall_iii"]=function(){return(dynCall_iii=Module["dynCall_iii"]=Module["asm"]["U"]).apply(null,arguments)};var dynCall_ii=Module["dynCall_ii"]=function(){return(dynCall_ii=Module["dynCall_ii"]=Module["asm"]["V"]).apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return(dynCall_vii=Module["dynCall_vii"]=Module["asm"]["W"]).apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return(dynCall_iiii=Module["dynCall_iiii"]=Module["asm"]["X"]).apply(null,arguments)};var dynCall_iiiii=Module["dynCall_iiiii"]=function(){return(dynCall_iiiii=Module["dynCall_iiiii"]=Module["asm"]["Y"]).apply(null,arguments)};var dynCall_iiiiii=Module["dynCall_iiiiii"]=function(){return(dynCall_iiiiii=Module["dynCall_iiiiii"]=Module["asm"]["Z"]).apply(null,arguments)};var dynCall_iiiiiiii=Module["dynCall_iiiiiiii"]=function(){return(dynCall_iiiiiiii=Module["dynCall_iiiiiiii"]=Module["asm"]["_"]).apply(null,arguments)};var dynCall_iiiiiiiii=Module["dynCall_iiiiiiiii"]=function(){return(dynCall_iiiiiiiii=Module["dynCall_iiiiiiiii"]=Module["asm"]["$"]).apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return(dynCall_viiii=Module["dynCall_viiii"]=Module["asm"]["aa"]).apply(null,arguments)};var dynCall_iiiiiii=Module["dynCall_iiiiiii"]=function(){return(dynCall_iiiiiii=Module["dynCall_iiiiiii"]=Module["asm"]["ba"]).apply(null,arguments)};var dynCall_iiiiiiiiiiiiiiiiiiii=Module["dynCall_iiiiiiiiiiiiiiiiiiii"]=function(){return(dynCall_iiiiiiiiiiiiiiiiiiii=Module["dynCall_iiiiiiiiiiiiiiiiiiii"]=Module["asm"]["ca"]).apply(null,arguments)};var dynCall_iiiiiiiiiiiiiiiiiiiii=Module["dynCall_iiiiiiiiiiiiiiiiiiiii"]=function(){return(dynCall_iiiiiiiiiiiiiiiiiiiii=Module["dynCall_iiiiiiiiiiiiiiiiiiiii"]=Module["asm"]["da"]).apply(null,arguments)};var dynCall_iiiiiiiiiiiiiiiiiii=Module["dynCall_iiiiiiiiiiiiiiiiiii"]=function(){return(dynCall_iiiiiiiiiiiiiiiiiii=Module["dynCall_iiiiiiiiiiiiiiiiiii"]=Module["asm"]["ea"]).apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return(dynCall_viiiii=Module["dynCall_viiiii"]=Module["asm"]["fa"]).apply(null,arguments)};var dynCall_iiiiiiiiii=Module["dynCall_iiiiiiiiii"]=function(){return(dynCall_iiiiiiiiii=Module["dynCall_iiiiiiiiii"]=Module["asm"]["ga"]).apply(null,arguments)};var dynCall_iiiiiiiiiii=Module["dynCall_iiiiiiiiiii"]=function(){return(dynCall_iiiiiiiiiii=Module["dynCall_iiiiiiiiiii"]=Module["asm"]["ha"]).apply(null,arguments)};var dynCall_jiji=Module["dynCall_jiji"]=function(){return(dynCall_jiji=Module["dynCall_jiji"]=Module["asm"]["ia"]).apply(null,arguments)};var dynCall_viiiiii=Module["dynCall_viiiiii"]=function(){return(dynCall_viiiiii=Module["dynCall_viiiiii"]=Module["asm"]["ja"]).apply(null,arguments)};Module["asm"]=asm;var calledRun;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function run(args){args=args||arguments_;if(runDependencies>0){return}preRun();if(runDependencies>0)return;function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();preMain();readyPromiseResolve(Module);if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}noExitRuntime=true;run(); return BASIS.ready @@ -14,8 +14,9 @@ var Module=typeof BASIS!=="undefined"?BASIS:{};var readyPromiseResolve,readyProm ); })(); if (typeof exports === 'object' && typeof module === 'object') - module.exports = BASIS; -else if (typeof define === 'function' && define['amd']) - define([], function() { return BASIS; }); -else if (typeof exports === 'object') - exports["BASIS"] = BASIS; + module.exports = BASIS; + else if (typeof define === 'function' && define['amd']) + define([], function() { return BASIS; }); + else if (typeof exports === 'object') + exports["BASIS"] = BASIS; + \ No newline at end of file diff --git a/webgl/transcoder/build/basis_transcoder.wasm b/webgl/transcoder/build/basis_transcoder.wasm index 4b9c3437170cf226600057096490d0a2fa8d74ea..13ad6a8ed28dc8ddb4cd1df99c1a359a2c4c0efc 100644 GIT binary patch delta 137926 zcmce<3!EiaRqtO_=h^4ceY&T+r>A=!b!uKclT0#`$IN8%n(8EznG6X*xC)|35EV}k zkC`+hN=$Vi36Y>YPIN%P8x=)?+#A8`0}ulj2oHe?0s<-|@(>WYx$5=f|8tT2zrVGs z>eT7!gm6Uy)2C|fwbx#I?X}lld+kSk@x2@WX7J~FTX}w-H^SfNdt3PX0sm0q2{S6SXeUMb<_YC}D2e~%c_HC_YwQ9W0m`%}+-{)wLt z{N-SInfJ=l4bM9EQ?T|%zx2`I!+}>Wl}1Wqfmdr({7rsojbCn*y;7x8ulVJ__x(=L z2r6qze#Ni*<x=zx4ed@;>SNPxhYgKgH|$|HXU2_kY;C*8dUj zwC_LF`-Ja5&HK3T|ETvd-~S2kFMNNC_fbE%;Rf#`e(IbrYwz*j=D*c{i~sxn@Az->kNvj)TmEnQcl(R~)nEJ# z|Be0|{BH*TkObcdz8-un`1|0i!B>JW2VV;QE_f(-F!*Bdh2U?4-rod&9eh6cT=07T zv%y~lp9%iE-#dQ%(}9(vLO&J!WpM11!2`js`=^6X1Rv-3V<7)U@X_ES!R!1F2OkRV z4?f7#2ZHwp|1)@B@ZR9Q;Ln5i1b-I1J9t;{&Y*v~yfOLx;5+`m```Beum6AifAII+ z;@{#g`}_F+*ZsftzvzF>-}g8EgZ|(9`~KE{$p5Op?@NB;%MUd_9Gvg_Nr)gqZ?5YF z2TKP-ud^%i+kSlOS10BJFY?O=Lw~&LwfttYGv+lzzxh{zUm+6-UVKw8@7Ltf-BffDeM{@JzjRg)WP8(J?S)v6IM z_4+TbofW%(7#!9EZL5HTAIExwQYyM$}02Ufmh%&orOC`&m~tzxi)|a86RYd9xSa=PyQU zw$SwP>9>yW@;u428ZY*`Q?$apey=;ze_L~ZG82x?b?4x4L}cB$=fVd0seChT z9qUDnc&69g9yaEK^-(k2@k9`L4#OSPF5DjO0L|}(I}XL=&JM%sHk;vgRihaPOTE|= z$|8@Q?XzJc+_5)U-wexF0k72OAV!Vf)_;Dh>+k5lx;5u-@88qfn(T`9Uj-}s!yR#H zsn@-z36FF0K{;xKfjHo~9tPrI4rw*SL0}v-1(3Rd(Gm8cHd3J6;Hb+snG%RwWLYI= zM{SVMMH(R$or~5|l7z$WWYplvTC`;CQt5Sf8~=XT=ymsmqp`o#-NjF^)V&~F6EFL{ zc=SZ~ob<7EqI+KYSUJ(XI2?)n8~K0t5}IcH(e9;TJq28rgcJO)9Zt-JQ*r(1Ty$3V z!r1G!?W zb}#33pNi4TL1@i{quq@qY3U4DR=p%h65jVo`9k%-uw9xB%iXbXA|9iAmz1v=j)l9` z0Ar|^-e?2N#aJ_Jh7(I+`$QM^L;Tti!v za6z{cH@ah`g9&vXJK1d*Rm!cXp^l?a$&Ec^+&jltHt#SL!)A+abGh_wMih5>L3e$t z3_R|fBx^H%^~%y#Jw=xWPxAFhwfCl7c@5U%geqV)VP0aiLrHw>U-5c?~MERF_@^UZLkU23)X zfxk^xwVQArj!>p`!kKVyFOzh|WYOIaR*;Qk1a>2wu|Kr48tb-<$L z2kP6EaL*w$3`QAJAUH%yrNqhC({`Xvw#C2=>-vL-P(>r!uyCki6n}1ci9Igr1 z&}Xm#7@fvmdJnJZfD=|UoHqn1Uu~%Ll#}4BVia1#qEUb6UnNKmhOPMWtJ_{`7HTpJ z6WvzWc20=)e|ZCt7id!S!gn#*-|@0Vj=$`YIF_8KzXx>)I6)0Sb=JF7=`o@}LL} zSg?Zxmg1X^BP)S94SmTUdAKOIb$%9TpBR-bnN zjWk=0c6-!$L*Y!gtryntKq}#UT*LZf+A)KhsLiG$b3B!nPDJzZBmQymwG$&LlycOH zD@!LNE|Pb~Gdwqx;E}Ki@TTO*T-*Q(%pcHGCNqzKYA54=gWCC&dLlYsB|sw%fU5b< zHt^Y2aD7SQKx|X)R-eIrE z3}Xv~fjPy9n@cB7&|c&zdu=9Ena_1yS#-0Snu(fIS&?4TuyX|#*x%$HDr`XV$-}J zFj*7Yw1+f38jP2)aU^Qap#nUGO~jRnraLWF5C~<+q{T=RP7g_|;iT1a(qeEZV@*uX z$i<`Q#YySV+=&RhvWfF}A+>cpZXKGl?wF@vRY>1`Jl;)uneLjWPZiSt+&?-OSC>vW z+7wU;9c&$))X;An9ua>MRytJb5nxzj4FRdutr4I@(6$-D( zs!6bzBAL}*{NTIBWs2g)v8Y97sVqgwq|BGsi!V9W1BK2v64&EeT#d0{aVZW$LkNU` z?GZ{N{>+=p@-khLUr1`kpLto`k}4Te4|@d*pG>nf<4@)of+f%aW%5XbM#rDeu|A(; zr7)1zq4AU9G&+AIn$&Ff3px51a`Y4i`gCX+2Izm6qyJrwo}@q{Kdk}=_+QQOznbHx zu+_+aBS-&6j-J9+qy8;JPvrf4E5~<0N#qRf|0yT`PdR!DTaEm`=IH;Lqo=T5FO>|V zG4@BTu0iEAIb;=@OY!o<45N4(f(c8Fd5clNS+9yc`6SzrI~LZ9D zIawC;17&q*U@xpR9Y{JtX-*H zFZb^2SO-_CV1lCg z#*FFj37ozEcOArLKV~zcgP96Wo6@y<{a0@Za~(v7r&BeUmKqR?@?nUepd42@-77T^ zPj!Xfn%>hz26}tuJjQVFXbq=jI@ky)d`M9Z3HpZAXxiL097hEi!`5Lo&-DXMV z9VtgMj4Vg98Q|_o$o$h>lFpEK9RkMLi+W8m9T&O{eIYoZ@E|$T&QxDg&wHioSuJvq zKTX0Tr*EEqb>8cmFug9ks7LY5_|-S};*LU_a6*K2&<_ipu(I?ss9vELExW`q>IXpP&D**|;x2I+e`T8=n-TW87xFwjJihH++D z0T3J95?sO9R~7hi!x|QRike`-(JZy1X6SBOZ3C{xq9JRYw=_*W|JXK~>A5q}t;{&D zQ12CHIh;m3Os;W_ezn!x<9Q49+YyOPw=>AJ#y5c~IntKfZ(Uga&Mo}Uf2kTJ&HIS= z(uFawk*Pt(yajU#Z~gRJKFz3JItVN1^htR)6)d!7 zj08cV$`S$j;|v678lF^K4=anH$f+5_Cq(u=WX%lWB$5Z~B&|Z?Vl>wFnzF`gP~ZdJ zOMT*bxMD9!^ng=$i+=G+mig6e+g4J-vCeMznAW1p!dGc9&12MjnK&tU^{YX;;>19EE_u!pO$A`F$Xo+@$r zlv7U%A8Ir#$hf6CFbr%L=!uS={MRwMtfIezw3iPNWa z7CbgbSQ+=BMW9kD; z&gotbAh*>Ecbnl`zWLTD#%#nT4Wf8a+2|kwO}(T9FmL@=owGApkq-u0#>9qc)eGCM z9B17g#%78XycLHoUhUz{SoaghELRhAhBIu_aRX>NuUG4h4n^k30jnn+q>`i{Ge~(} zvq%oJP=XB588l^qhH1)p31T*BKvG8O43gtn`9pll3=Pwi0ZVC?*arNXq;pC1|ec`5;q9t{PbKcNP_aCmtm#}4+Ynjk++$5*lLaG}`x2A*;Q4_VGd!9$i!9C*m9_!`CTOwdS? zqcdC$y0cU$v0jG`ncrbL6hG+v4qDu8)zWZMCG^h5F{T3l-kgl3KwqWjf z&I8(ZBUz-2H#%d41aX=A&%JPFozd6wuA@(bGgqy$R^I=O3#ZwR(`0Ln3dX;RAJiJU ziQ6EhrFiBzqnJRxLoy;K_zxiF%>hRs*UBk+C-=;4*`}pv=r1>NNkME~-5eOeiqw4>y03uIX_NE4{h98 zK5#<&XjymkOC6v0V!zswn#TlL_*4qZxFqAzW&xdsMy5fqmg)kr7%iS$ zHaHE1ucXCNW*Y&fH8xGVv8j=dO)Q2e%a3Xq-a=lh=F#BPh_k^d&GXnIjY$;!G7z%UQC`sQ)!(8%!vk(Y76ef#7VGGD%LJf6N>O>Rtzjo24WL@lO zf6qGeG{*J?Wr8)|e(_$9WqXB)h*t>%nUI)1JLiw(=paKs1%%)QfeADY!jq10Qu#g+Wgq8~?a&ankDq4pn4C_F=yWQA z$4~UJXtqX8`f+d+u7N!!Oi$#xmJzLkt|LSS0>6#FVw}~QnMw#L) zdIS+G7G8`pB`g!dahqK_WZgWl0;uksv=`a{7EOsWc68=&UI{TTHUKxPPtn67FF zHakPGdB_lSL^d}BV=F@6t7g$=pUK<~Z z-fL@)PS3@gu^9)v+g%d@vqm-8%LGGEULtW2+&y%_yHhYZuJ-n7_hu6}1N^cBxUh`y zUzyS{i8>PfArh}!N#a*mk~qaN2IB)=%Gh}Q5RKnlN#l(xY5Z3KsEV7>8LPi-psXgp z@7@MA`5gzangp1kn=kt{mN77+&ZA;6`Njj@tAvEj5L*U#c?NJ2FxanTFh|^AuW&HP zY4;h@H0WzH%#7S?GJugIe4s*qEdv(lvGG!jKu_*dM(^$nGo$zG8KA)4Z)C6nxi{qG zN(FMs?`5bNz2C|J1$w`m!3y-=7@1y zuvV81LqiUf1wPo+G-T`#GCqvu!w|mZch7RAWhuC$F3VXS#j|R=YB7f`Pc{ry`p@_; zn@X6Z{*PUGXR!ro&0+a_nMP zAe` z8C}0XR|DA!vKr0KAe(p^(^7DO?x_q)g@XcJ4Q?ywYJ@w3E=N{#Xo0N8I>Uu*Nke9m z%0VNZOUT8bVJ`(0#GtV+g%;?(Sq;W8V_He0FblWcdYd&Xa1q11|JD{l=pGH*0f^hO z`xx$%q7q@H7vKGWwI1rgF0uID`@KvRG2SQ;F;55Jweek zhh%PsU{(tUQ)6PV$95(3qCs|ZIE0$zHGgCUJv9w^hv=DOV(h80GH%TGD3UYRWQg3; z4tVB&te|I3iqTUmW%SGu0h+UCeu@Cr6s~G-POH{GaQHV8Vn$m3AGqhZyqF{h7`W(k zJ|Z{jev)tIuQ%i0Od)vD<~7S77w%M!%VMng)l)ex+o;Xsmb;z^c``?4|D8GIlQ}Y* zt#Q}2QWihx^n>jMg%_3<@)Xulq)9oV<_r0Y>XNimM7%EtbJ^Acxv;s z`O#_#FgJvnahV7JF67xW`2f5w2TrqNnYPj1t4y#cTH$3y+YB}0P}>w+t=GHG^f6x? zugKmsWQrveTQtYqYc|mTgQJs)rASO^inBxpmCy`op7MZ>q+g^1X~{hWIiqC+&Cq z0$CHVpqi09W2Jx{dPdg->_7#&CSV6G&@}-I3f)Y={XN&ERWyN~k;mlepaprdWU6he z`EK@f=yJQ+BU{1Ogwgh@_vjMTVdV;bCH^Bff^k+-xV{aC*}nEX&8Ev< zZ%>Id@~39@1ct5SSK@c(NZC^}gMl=ymF2=hekFcSj-Nd>GZ^^zh{}*H%va*~<>=W{ zGlPjdp6d|$2XplFiTcOs<7(tTlH+Gj%{YBpjr_-R^z5k_r%$U<|K$Ci+qA&RfHWt2 zBHYtz&z{(1k)fxOaqIYa%VY5$kfb3KTZ^q!^h1t|AQ)O3bJ%&_kYAl)GPs%n zp3E`nxMrud8;XE%hM3v(=^W8wR>Z{%Hn=$KA?85}gJou{6D=qXkFiCgo?2v-&DQh_ zaSZ2A6yg{TFdWBlu;Dm{gJp3Hrsgh?;lPDJh64--G8}9;j^SV{;}{NVW3dafIKXfm z16ab0U^tNB5LX5=9JCO}Z~zv(QHB1y7z% zP@K#|CefK>5@nJts*_T(F>eJWXOl%~AQEUeqio4XfDv?>oB=WYYD z!O+2SaRYY7`wZG|Lf{G(an-{*iyhTs9l=*PsTex!pN5TXnT5eY?0;rj>+?SGFq8^3&D3(ze##VA+ReVO6QWck3n=oVN6cAsE7~4uLs){|kGz zcIBwCGBwJj8yUtO4kMkR_rJ-u>=4&aJC$tb0$rIo5$Ep1Zg|!qmfp0)H^~|t;$ruR zT9j25R%>~uGO|OZ6O!;Ua)xb$DQyFO!lK8lD#aYkW^GqN5VBn0Hbv>McDPlrgq1xJ zbOk!PjvT93Di19!5R}Te@ZN`P;EOBhORYcW-?Uu9= z!3L8+1M#U1h{kY1f)2-Qkt0AYV0s!UOd&l^YUplYb?Em$T zhVOX$)3*7gbL?e7JGs4h(=pW)O{g=4=<$~|V^7p(T-~%E(S3*)z(iPPEiA? z!PG!bOI>wYzM>&aW65F>sTGn3eHXOo6_h`jioRYD{X5?M^ym4B=}N7@O0CEWr*DTu zpRuB?A3JP+JDQBv`fgb|E{0d(0}+D z^>=*X$DfumRV^@8Eiz?0jQ_*(Sxr1uC!UJ+C0P0eC!R`ylgbZ<6Ap??uF`Ss88;c* z>Z26G*@tWe)B2^RN(liPpwCxHi zQ_#2l<2q=lawb$x&RUI4kB$Rn8I(__*FNP3*>~bHTC(Fn=lN48lBi^o&^hN!64Y=Y ziC|D%DhcOf7=sBUs!kL-9Q`Pg5WQRyft!tIl5m+)NtA{qQMGwsCW%@m35^P=B$9zB zBnc6ts-;Jfgfd$4kR)nc8WNYZ`49s_6T_-PpXpu*4z9)zywUdZVx?LNg`Re=x-a7C z<)wIeqwB|-?0u3Xx;FNaay&P{m5!Zc;ozQyUAI%bT)bEi?NnON=0Jm4EetHgE;|Cj z>|c7rhI4I*%qZ-12^op%QhZ+t5>cGiD{A(C>4xo_q&cZ$XEY}$YWZRB_&uQz8~sn* zuzfyWn7`u^mgZUp(>~a|cpWYYNh~R`zwudfiL#{uO2e{^Tcav@VW9)2?i>&fUV|Aq z@jIhJm-mCTFat^%lm$aEr_ji>KtV;psDn|}MG&Pfrv)K2)C_j+nDh7X>A!E9DNje) zPr6t94GDWt1$1A1oK2_na<8-VR(V?SAD3(_p*lSxL} z37l$P&gQgu`PonU8pcy5&H+}MK4|uuYiVSenhV;IEr_XHt+lvm0s2kJFQZ>R zsr$LC3=^=))nQ4l{h#=$sboFM&kbZ7xhJr@5zi8@VkXow7rWRl6!1db(bkJLg<1)d z&$dpNt}*)Cf#GWW3%Xm8Eq7kXkB+L9V*fDLInw>YKzq5ze`YcE!tpuKLK1;Y8iZ>I z%Ha_&EOW5s9Jw9m>C9GlM>x(MS~!5+vnVX&-#kviJo&nsWXWTan~$wp6JJ2E;i9lc z_#&L_U-Q$m<#AH_;m>UEzw)QY=J2DaCdc^o+v8y)w;y6-L+?cYPk;L2vmYZ}UgNQN z)ARNQov<2~!?Pf|D|uWQLfAuI7zJ}RgVPMblKR9ehzn8Q{nfuez&UMJAC%T@%t1mZ{p`lt**=m*LQ3B zIjAYxd~lcFWw~-bV5uE(%?GdYxm}FkWsTGPUefLAXMcB#elFfIUndmGce9YkV`J5ox8kWzjj}BOs5#(`og0$W?e%3;+k>vKn zS(=0{Zm|ga@U0x+xZypqnwTN4&*sle9A4reZ*gktk-RiMu7K6YlWVF^U zXpA<5+_Shubg)f)U@4kew9bz)Z z)-Q(Z8H7f(v1>a$OEb`DqgaXNs5-ZA<*WcOR>+X@p$GB7@%L)HT+Udb?E8lVRHx$M zEE7=GR9EFCg~CUaIEO=Ti936)^x2iA18{<1GvaCtP-rJ(fEF5NfW6qqkTfCoV_b+( z=OQ5*;Cv*Jwa@4xGYHi5Sadec1lBH^MMxJQl3p|_fvlI^^T5m627qI!u@rilO!VMn zvOC7)<%(1WH*KNXt|#ELuD5m?UD-|yEInE|@~nAki?WG2t_Nsi=pBxb1ICkP@fN|M z+}VEl*jY*2+Flnso`CX-wqG0Wru$;b%Hg=|aWrS=Lu#=zgSE`A)(UntvzyTdYnM5K z6RwlGJnbw`+wyF3#yHO;)utt_4zr8!_^-#Jqy{kD)I&hC>b3k%=~sY`J*1`@Nh$Z* zaO2@<(_A!5b$MQd9MuM}(K_dx;hRDp)fe@U7QI};<1BQ@LD6Q+ zlAZMU(lIuiMv?UbSNf(!Xh@Hkc%!3dV|IFIAq?zt4Dg&X0KhRY`X~$#?_18T7d_&` z#cp^dlX|qMQ0jKQf0v@T^{!ag{=Lte{!#kZ5M_E4=4oRus+&AbSR(?>suk~VrqU3_p5we>oc{ugZ{r;LoYdYBfXpw!m$53>_sh(+vD{5qs?Aw)4RrE$` zGou2zcS!~EoE8Yc6*x0oVE=)au6-J&o+=HOHU)dpNXUlO^Rs$&7Acx*VC+&9aad$JW)oFSUM3NpY=B& zJC#q}^oRaoF5n>toDAof3%h0<>Zw7gXU3r}<4~1ts9N|=j#yNs$=GxqjacQ)^43#} zP|qwveT7AsLGnATi%0cLJy_4w<%uEYuZtTS za$To~M-|rg2G8VY!`|R-ExO^5XdO3f?+u>KPjzo#i#RiTgXcIbTf#~#RPNB-Qqo>L zGTxzfJwF`KJID`2p2E-A-r!1ppk?b-Q+x6Bc!%aw`DyG84mWWgG0XGLBiGtbNiMfH zaJkPj2m8F#t&l_l7KDTqZccAytS>|%@wp&KJJMAu!ZWNxEI^gHyg3=+n=adeH z=g0v^eycg)bvfYk$HU+ln#6d4=jhkUOB)R?C7fvRcZ7>`1oKbSxGogZYGj}>0aiy9j6gNA)(oH|FPuwi^AhSo1nRwb{m5C=S2{!SxNh=f2S-oFESb?AY-M#v` zpnEwMrb_2%FyWkG;#sx{XDbYuXGY-#476rgwEV!#587o8&UNQ(?s+z;HKJX^lW9#p zCH|ryuy`l1f7#@di;|D?I^l#cn0%JQUFqa=Et5~VBvQ3(?x}I27lm?b%h}ws8owe* zXN~0*lh5*s$tO2X<`&P|Q6qR+J33B(Q88Tpa{6m5*0XoboST$Zv)N|&sF(?;nypsz z`Rk*if~iSt8QgTrjLo*$>ZCEtn9USW@q`EZNwkESU*O=>5u5up#RBD+VVRl|j|@ z#br10aQB~!R7j}{qfB>3wqpaZ!Du7~8kt2f{DCP^|0@@bhq4Y#OOwdbdYTU&XY{iT z4ys&v=+rp1p+oYRCVxR5#!d&=Kqy1V(N^~P2qNNu!VRRd~P*MOgq3>FM)0Lpu=9+;fEo;%ukOmGK3oh9y5VoXaetK z3fL)1czf6>2)AqJ8P)?E=%@tVDGFFwQiV(9-&rB>lt8Mnx}<%R_Gd8f3AdU=RS`5# z2TjXRL*N_21FC>3L#Hixrvb+>5ATp_c$ zMGN@Ze3Pi!v1lJtNg(Yir@iW({jY zZi3LXAi-t-%Na;~Q!HFquk-1mrB}00f$gn5ZsV5p|tpwk(EQ zkO7JNdWc4edwNKzdpO!N7i~crJTHPBc0&MNlLi5{Eg_F$Lk}q%d4LTz=HgajJ7kYq#>-u&Z1LRvL4#UCKUF(kHM6a#7IG9_dkBi`X8<$<#4l(xgzbX zD2uYPBD2IrrC2hhK;>|>!9_WFP74G;DHKR_YkgKA5B=S@Orw{By4XZ~Z2@3$tx+^U z?o}#n7u;1~Ydu0&0zK$(bnYDei=$AvfB`rG6WH3230Mzl(=V4~=Ij!BRg`PgbD5@m z3;$HI%zPP8zbq5q1TwT>H})8+=?xFO0_?xt6eyzaJr*Nmot+mxJj()DS)YQ4y9bjE|{lpFv@ZoQ00T3H@W z9sGzt)&KHsx>O!bW%(neY0EA)WNy;9x!uN4#!V!kIF}X!D2IrX6oKco900ByLQw6j z96eYcQlx@)o?dq(oMIBzV&c_gx>aY6l~kBmc}%8)a3YOO5g~e}eB(4WMWo1LQ$%AF znS?lhXK=#ipRC z*wjXgO|g{Qi_USeDShvW+2lGd*uIJd;{Ba%wk+vI_SHAfUNMKgEnc{;|D>1gJL{iH zK{W|(=BR8rIA~u7EYts!9^X0Qmw92#C&#*FeW9=azTe#1PI~f*ym&+C{Y=y!t)6@8 zBOCpuU+SOxTWgb2SbwuV(}x}g`o5p}UOuyAefKY_a$!seRlYy?qg<|04f(8KnWzju z^}YH;p1$M82YbpOAuVm?3*x(!Q=b$RJaAvXQ$9V_!;;#n6xJ5}J76mjm)W-jZ{}Nq zzw}bwK1Awm&8WWM{g9T^-KPe-H8y92wV!{p1vh#iRhB%^LFD?f!m-#!=ivU#afQ+>h zm9W-4z#bEk=4QY_HopD%-SeHWe2glCe2*s^w++G#f>$H4fA(Zrw=g9nt`il1l2Gaa z@8_(PZdOWZxKeB_dm_>SI;a&IAoK75)M)w9%yd(f~Elt5!8A#hXR{(pP<+HFp!zbooLynJqF z8SXu5l38+Y#kdxhws%@7z>w>*JcFH< zn{vj2gZ95fe@W~djmlUIK7qCr-*sF0_*F1K|Kz)ZtMg%{#FZgV-uQ}jNvS)ggVq`E zR@sbqm&drzl44P(bJdG(u561+cLSpUoxWob={H{LUiFb8-;wv$hP(-mEz`6zCcEEFOD`V z{8!?Cl}Z_8(Q%m?4n;*Yd%8>AQ7BZn|Cv{fGN5P_vR=l1FP%ruDydG^p?0HGG@zmy zmDnzq0(sV2kA@J&P8=C)OTNX)RWy?T+wt;wYC_#6Wp8WUn|1{(&*&L<(O*jVJj~cJ zBBV4qCnRS1z1uK372P@(-#ugYwvj5pL4K3?H6Pv*G8v~M@X<78iPLepTZ$|27k}tY z6E2D2Bd(BA(&7o*^AK8CdtSGU(^ongjkg2#w$#FrxrDGVUl`PCQj4#jEp}NeLz~zb z(Tk}3Qv9I@2>NhJv|B12#6C|zjL$1|>nI{mj6%%swZBI(U$4ui^-P=AQbi<3PnbE0 zv%^;s^$}mD9#ENC)Z*+B6n_*n?t)_}7R?%I_J8b^bI-DcxfW_hp@SN=eTK!1xP@bk zIG^C+w4_#C*HEF9y$IS|$R^TjM7qmCfB^&Hh>A&EG3bBgsy3r*$af&vsy1SKKVuA# zCQ64`JdAzn+bI;z!REAPgTmLcEICv-NPf6>wZbWiuec=rpM2${}R-E)U~ zpQqBiqI^+FFb|v^1}iDlpTl;p0y}FJ*x9SVb`8T=v!#%8hJgkGsRE?Nb4AcJ9SbFp5W0SmB8R)Jl*3hc5~V3#v! z9aNBWxPD#{HA$N}E&@~7!YZ&UR)Jl)3hb&JmMPL9vl5t8My^}#z%S4^R_4AVTHwv> zs;fDL4CfXuzT?e=m=Aa+^o4!tn>EYA`RUsQ%C>NB`etpra8~+et-r86eKY-7*qpwZ z1}$t#-_8yDzw@ilOa|Q{>kU#$*Bj{lh35EA=?&`Z#qRZk?hQ%SL?+Y~%nW)%hP77> zsYU~nh=vY1RIk#n7uD_8k4COy_j_Y5Yfh=ej}WK}HW&(HImS_M6+$7SJ{4WGXb-&wR(@Y&iV z^opVL*P%OOw<>y7=v71KuS0is(9n~Wm8}WCX88Pd_)aNSC0`eM-O%~#(4F;M6@5hL zBZkgj&=W-OEbFTH4dHVL`3@uL?jX2=UYO11f~V z5jjXPM+y3~uiyEEDpP=h7ogKDI(FLXY3@NF3O7K}vVebn=!O0+Z~G$70M4jfmJHES zNBggS{hDdu!3sDmDrpT#5{09kW_j@S)5^lp+aWj(r?O0uq?0YhEODjpzj0D2)s-pL zEQM(4aGsh{R1oVo!zrb_Ak9983K~%+ajnC##gzUdZtw`xV>5Z17 zy#gM$GnS_U~){(8Vmz})qw5D3oB$j#> zsj^%4ayBn#8|sQCveaFq$_UxZIlP?1MNx3DqS-9@T#{u`>}5AEyA5?kGg|5%Qe_?N z`almj_D2F9qOsYIId%1*{OAK{|zF6v|q{>ONm&R>CP*g#GKk^G#p3-{1Y6`~36z&-vYbXAOcH%r*jI2pC8#prSf~=Q9nptFm>jJ?Q`0 z?|voOJ}VQ9spF{5Nepl^n|^j=_?V@g-W|W;Hj0%`sfk*^R5|`d#VE^AS8-t=>g6B^ ze8tPN$s&_MduD2AZjInJ8{~`3_pD6`_CNaOH@xGIe(!>k@Ad!Ttsmg;AH40g{JrKL z{r%ECFZbWvzy1%WuD{7bHj3E4$OX$OlrYdFKi~Y#ac#gvW(o@tXC{C|^-3ho^kOgG z-r26%C1EwV#iJow+}YXxAAfl5nveyGv+<7$hw}R4|KlgaH;nt!31R%@fMY^i$Q7S{ ztHJ_QpRnd)uYcG7c=qM5)!o#iHsyu79|oOM4uT7(t#Itw(9t87qpIP^v2KWzKT9y6 z1BH!8yWRfoKN2tHgZ*dx(T45eF*c6C^kg{FohTtw_rI`9i4!zB{|?V}*Y^Kla`r;S zZWl*4`a!8&X}7D@cDvTrfAx`eyU}hod2Ef+5G6|d8YhmZU+0|u!+$ihr{f@DyK}A@ zokWJevCgmfT;EUOqx$sg8M&VMD7mf~P>Ab25gBttChP}7W1W}z@G?Glzs+yA^r?X1 zLVoj)H$L5tA`mb^2>PHcn}YN~Tl=vMe)^zon_XpLdp`ISL71%Y&bc6I6G-QXyN+ZO zHdfG|{ga(+I@19CnDoOI#}NuxbQE#H*)9Fl#oEQ*s6J=#SX_Wce5d6&B4Qx1j@lu%b~<12b(07gtRc&t zFDRSQfyFGhH9kuA+kZTJz6518jF)HaW(v;i*XMn2uaCe7pK_q=yn_8#|LN?uvCcJO z$jO;6fd}IiuT^(Nxf)X3SpR`PU3cY8?J7*cgyJ@t`W5&;v-#*mb*)y+gmYRU8({%{ z{+%0Z4PrM;Z2H%}^BOKf!aOy?wK7Nm*#^hV(ZW38I>9hmZN37~W2Onj2_~7EP)5F5|m%GbN#@SjHj^o6hj32!G zxK=#!dr$Ht&UHS_!9gVk*`+9T<*VDJC{bN5XBo#KHh&gjD*w7|5`relAe6%}^xY1c=3 zCY=?LK>GzooB!DI8ye0Ys-;A4KIn97DwwA-wE1Z<%c|JAg#3nb zIHI6GO(EL0$X}MYxpJWklOBvQn*z=r3nRz)t6M}^#OaV$Jz|&)#m1~gPbONW#NpTC z(UUp@(+OC!XFZCA@&>DJ)G`oHRoyXvt^Je^yC3V0_#LoRG9={5q)z)082(}2F&n_F z?K=>w$X?~L!WFn;%VC0v&<1ykR$>sp7^c!hHkztF9ClUpS(J-Lh|0&4N3Chf&LZGg z84Fwykg;Lqmx&Y)*pM!Wjhaa;msV|WV&bZ#vVtvRqb9E^WkW01#s)0h`{r^F3d~Xu zF7{wn(Y&-lXdbD7@ya2&y}^Dbr`_&n-u;B`XC^oZ4P2rrb~Hn)^IZ8e)%jq({VF?0 zMi4q*h9lli2U5pAg!iyRSoMe|LBtVvYO-gYO$G9+m@MOU;jPd+p-<%}SuE~6wss|2 z_WC}kSA9smaPr}Ai&TkSylx4G@lwZ@;s)*@i7anmK59e-Ptv+2+6VXuGUZ@5m^Yf~ zKgZXB1@AC|4Q*A&c2^Tev?bFf{R4dpON-JUsXfYcQtc)+9*H|TC8ceT;fR_^YdKx( z+avMwKp0XQI|MV*j-j-bkJxKG`|^ePX*FqPQxh715=w` z=&7AZ)**MMOByni(3$VAf6w(n((6C(J?kdffXY`4>0w0jkS$tH!f(81dvH^)fB$KIyQ~{D+ZXEUEq?V^qjudCc~u#cn&knMF3HRJcG(5r7si$&GLC z&Rj9S_`K`7Tp`)@-Qz4p5*cSFXtyCK(i;hNbR^gra7y{EaOCaLbpHy^^De*3{=Oz! zd*`XnPX*Jvu+d9Vht+JR6s>EtLZ?$j9cJt~ky1)zx_`?5sbH(iGOjG+g)HL-Jax6a z+_K6Y%EGizA7dPp!u_-B@+_3{II?gN?RcJr+Og{Y-Adsmb*YnMj8Yy)mgWJEM#5)&c!AC?ZC^H*Khs;3V zgZsDn+xwrre|`jCo4bDEpYQcYJ`}gL%k)Jj@CqJzq;_Nf$sbx+0r`y&UC~m!uEe+O z*nn}g|BoMCM!onJ9n(%1<{U3g^%U{wqFm^&;LlJ_yzkNw9@cF0-mzqFgr0n!85|yPt^PNqD86h8hs$@Bs_)Jj%`Z zQxq_culIQ?s7gV&SQJ#@AM*C%hrZtFU-r>G@xOfC4zu+-9om^x>hybG(FtA6h&(-a z4&Z^tZ~6*{SK~K)qtjV~o*Mk3rl9?MKRQ?XN2q=LqZ^aY`ptI*>}~aLve6<66rU5L zWqGky@Mj-T)yr^%Yb1{1xBU*sc4^K|iya*V{pz?%;#1k=Hoopk&;ENb{z>WeTjU;C z>#`-zOKV!PnkGfU$TfZw{H~+w5)~eYC|WfsN0CUb2$LV6@FcSexniaG-f!?KZX^)V z@X0UEt-bFp$cASpo41*4-u(^EotbcyfN%h(#dgy2*!hiGAS_qHMCiLF(V6E^1AM8! z_hbA0UH#{OY~G*mzxHFBd49J&f8}G*{H4?!%R~#ye++x^Yhbx^DKNc!?e*gn*SWeg z)<5^-pQ}6-;xF#EKXKIm%l^|oabcNj+m7^K^NHPfH?<@E4}Rj{Y&&dmXW6*c!CC~E z`B@(k8Uxx7PtTUwA%CQQ+3DNLK#unBKmA!kzIQ(mH$8=TPYB)XKmU{Gw_f!@g9y+O zpah_Q!zZt3n&lw+Uz~Y#!-f{+ZclwC#epQNhnb*lgkWqS0NG=@=4u>4*aT;$k&W;oLtt1Y ziT&6o`Qx9o*=z$AaL=^h-qO}wTp<39SZsl=ZKG?C*?huPm%3Z9B;Ghh1aD9yl*81W zyR)0RSg$UJ0%1^R&vxMAJq1Kpx|A$_nDm37Dpccdu!Wq-hE3)?N<&G&ndv+-4F!Bc|g=F6ZXTy}{djiuSHnh_b}M1>@!Bh*ZKGXZ?4~ zo)}{AckqFma7&8bk>{`eqW>xX-cvv1`%h1PTsJn7z@AN;y0fyRVIFM%Y|Xz}lCz92 z(7;XW(2DWQF%4dfjL*{c1M5V%P7-4d6b+$)Perh&bXM~~_ zr?v(Dl)vrNC4qm@JX3bD80l0;Nwa(ILy@k!GfQNC0o|Qx|EV_y{`q8jAn^A;{V5Q- zquT4d6OQA%N5om7h~FFOsTi209fP~+ixhjYf3LRLyp1%%v|jU%BY#v1@UYLeV)M1c zM%(NE`h&AAWj~D-kRJ5!dvHB_dhPU_0q#x{xSh$~UzPse!LRU^)Atv-{p=48hQU=a+BQcc))o?AUxTb1mEk@zO>X3gL)sv)}y6?9AOb7RElO5?M1)`+`RM zUiuXlR9h9rWq(lYuH?3rvwO^OyY@wo%Is`^_g9;fssX1$>RO;nPf#`bPyFgE7Y^$l zQN^C6?yQYyU&u<3_1j#LrQCE6x=gCNs3xv{r>8Y1`;Z8mTNI*6SApH><#9S&mst(lu)>p&bir-+OCnN1dM7qpBk7A?%am&mTZLBL>Lxkl+akI0df7#!!OJq#p zob{~KaPo^Hur)F@oE1)C$Z*OJp(9~R=A8)+-Or5s>9`;5zX|Y^>_%sZX2y+;S0o^r z80XN81sZ|SlCSyV)B*w|QfQi(N;HTALItG2R+^%?{{bwuW%#L;B+1_c=9eZv8uWit8Yu)4Es9A`E!GU({d9JZlPiK z*5~zYrUe^x^@7=Q5pXtsAkNmHz>z|M3~5$VP7#aAyt-05N}XCEW@#oLK)&JIYm!vT zofpJD+K*Z@S#>vES~pK!2?9E}x>95o^-`5%UV?t9yVy#idoo?c9n6%Kr;4Ib7VKO_ zZ|NQMrd1X9Kcu&DnXM+y2d1a5ro^gv#FdaVA#Q+LmW9uv_AV^F6^LuD4#SC_|{`l`q}H@3NMBL(Gp0_kt*=Lp0&by`ts+HcaDX5F>WZ-z=8 z(p{B??q-Emvck@zG_xAWbyejZE)(en{k#8}u)mrQV^=VS|L<-eDm-xeoDnzStgws) zw{M5ik93&~(`ht&mfc6?I5un2@z8lpG@sd$Bj|_yi~jvdxTdILK1P}m#h*=$C^;2= zHzQgvs-fa6PAlr_@M;{=hioaX*Z98|~K3VPje`SFB)6St~sr(d}|8K3wqd*pb;%gQm7L zD>yB;UwLGV-9c!f>(}aL^y{>gOy#*QY{-Iog)TlAr-0^NTpj?UfV&;o%xTbTc3v=K zOSKTBsS1;*Fq@_FDp$s1fVV|#-s*)_YhJG(O1yIDZU4~Qi-z79oC`#sS$L!TyKx%| zsdo*(-ZA|8q2bqe55L~atEPmGeWuZhM%1;+&H+)JvU228lHb`zd(+2Sp?49^7z->) z>7| zT<>yTZ!bT#TFxJ{q~{cJKF1(Smb12GFUzNHsrpkJmT`0`<`o$Os@E$V?6tn(*I(;i z-((p^^^r)c$J_ko%gU#&EBWjEnNvSo^4FIccCI<~OC^7P!>mOws&so4X}5xYS{D4T z?9C#aeCnemf3B9j>?!+`r~bXXcver)D|3-?1~+T#Ml0c*t!~$mYi0sogby zKko089DP1h#vT-QigUY{%WgZxtJPY4q|<4&N5?vyPNV6a`u&=}$v^MZhijPJ^Vqx1 z9`{oZ*Ze0}UPe@7?9^hz-&Jip@GsQ;C;PXZ`gq-cIyrWZ!0mabj`FiR%}A?U#U&F} zg6oW(As9XKzdCe7$Odb4d|(r$JYsvQZD_%m*Lj-)6uSm|FpItl!LdE`Z2@ zD=@op((T|yaG;$HwM^n!6!N>8xAUM4kNj{vm3>HhVxd2MVrO9b#MqKPaZo6IVsByk z)XGyilasJr0c`DC5ou{&gCrw?Kr*hYR3ggng^l3w$x-m}; z^VDvZ$_yn>-jXM8&62%sdFp(gx+72BnWvter|!yA&&gAF=c(M`m@;^trQ*=-@-E1e zFU*to=9%~BsTbv`2lCWQ^3+T7)XOY2*80y|`1ldQGOo>g9GG}z^6Vw>aWGMAfOm~Y!U~V%PyD@+1*+3 zr@a#_$%mMtBT+EN!oB>!K)1jxe+RWEI>8ax`M!_-x^xGL%pco(S!?SQV}5AA9u1 zLss}%dD7PZQMv)EI~;icsf3vW;IqQY0{|`F=|i<+}oCSP-7NeL(Z^H zk-*h7e2GY&5w{PeTY0Pqgl^li`Hn6QAH5Xx>GVk#!#bF@C`*20{NqN?Zksq8Yir>Y zcU#~POfN=Foho86SKFev#iV|W^0k`F8WJgdR)LfTPx|~Rdj@$L<<3RAD^HWFa;9?+ zvH|>H1N1{Y2;;y(v2gP3SKP9^eDPgTh|pS#Z;!fng=;d{9AYRhCU1{6-1VApB7?3+ zP$e)o-Srwi92DNg?kF;iX33jFVUK06e4PfoE#Vx%^+Mce>9s7qYv~)p^Q4dF(h3AfYo5`h972=Fd&m&Z8Rq&!;-dAOGlyiLlo^^7c=?t~vJCM;yxd?(jg z!sj!%71I?Kx}1rXw*Jm&BQ@Qq3WivuMFpY zHJZCCT7RdIpQx=|>wk~*bcc$4oq?M;A043r_ax8Vc}4#z@0$#|Bd4A_L0_PcVXu$T zF#MK}u^OTW-S5i;NRNJ+=4ELCY30LcmnDy+$!LqqiYi4~8n+7xnunwMoI`Ajz&|=4JqdO409uxZ3wb+f?F>SM-wSxH$~*ko+BB7 z$T2KB(FA)a4o7QJ#H}gfmJD$lh}wxkADoMlHHV|g6mv(4IiF$f1aks{YeGK$XBVTo zdhbdR&(09f0g>$)?y6KiYBZBl+>;{i&JfQ7Q8&V`4f%e~%;9JqS0k7xFHA8n$T0VU zxfX&m;kvnKoj!@>5HCs*_h*O)K%9Z#x{$AC6%a2?5iiLQF9UHz^guk!HMya=qx-~FlPoi!Tt9IUf>Rr?RaewO6uC@M8`_rfHTI>Jp^&CpG@!yT@jB1=W z;*3`OkQ?Gz`{C|&K8BsS1Khk?&c=Vn!&c@MFro(L3S2wm&-I`5zL|+iyy-U{ZJVvCPATDBRe1g4zk}&Y?uQ?MJib_|tFs^jql3bL(+) zLT!RzN{la#gq%xMqSgIVFDAm45K3c4<{ybl)G&3J0Pw~hInOfZJL6C&TUuiKSeIGc zF7F)LlAm4FiJ!CaWcWFYCg5i$lHq3ut^q&uxCZ=er$PAHhWEnH*6uV7y35;QdtP`5 z&pFMa5AOW*p%+F8P1H zr|x}AryFL*-~T6eUfrrw+o@BhPMtb+s$7jg7psT`)re-0(1OHBFV*r(yis3IH60J@ zE!!Z{wD`E40{Zo3*Dz!gi2Rx*b{V3XJSwLN6cnmSczR>f@`a`Zd>z zDf(jAZ!#sa8t}tsL%RF(7$s_k50f)rO&;Y7f4LqNys)(mzyFNav7_$%ru~2T-RmZk z50AR_%kOqBFGT{@t3`}JxWdGFQt?6V4qFt5k9PHHiqTCv#@y&!?Z-+oa>~oWnxjd& zLXvDAbLE3M;+-m4l$joplVQx^7ZbW9TX9_Ol2stqlUzbfzC4CrkKd=q+|tS$QS-{O1ag$NS2oOLED>-hpq=_4R_bUuNaZe>sr~5$ z034&)n^<7yjp$WWY>ZHX4FHX2He(4S?*{bvoP|=cjmfIoUJM z9oa4K#WIhA!^%H!@{4)sh*DR>N#}f5oE6zI4|I!-Kn1ir!|O>gZ}LZwhtaYgcn$PFbQSm@@iK7uBz zO9re$XUM91m({H2mfTQf1-;2l(wsu!wkFriy*v7iVLI$QVsn+-5T^f8pDwAzA$Ear zlUW8R37!$+ts%&}kgJhsP<^LP!?814tl|o4Lx(Fxy_s;e6we>7kE(EDltV!b=!=z* zkAD~F${Xyh_=Gb^DtNWlGaU2COWsZMrG}IjAT-)aC}X*yDZ(Rv6e8qfIZp5h>JRs@-b*rp_in@NK-YlS4zrHYpZR;ur{N>d~6DaFFRk zt`GzTc&$j+S0c_!;{aw`i~ULR?Xp|euR0q*m>MT1*DZFVLmrHV`;t<0(ShW&1#W&h zD+lRT*Ca$LZ`QlQXl86O6yKa&v%sxb^b(6fmxr=fX$)9cB(lW7`B=J;{BVI=vMg=P zCR-#TBRAAs9q<5HesM+CltQ79oW0te<{n7yTH+QSr!At>po=P4K6I%OYOxy&nEIW> zreiOb%yKB|I&F#m#JtU2^AgH+QKK4(DA#xmiP^PYRSdFZ*S65(i1j z-IB!PZmh!T{$^4^CZ2%(j&rEXLOOs2%6ZR!c2ET$FCqXH;*frYl}1;*|CTvx5~)*5c%4 zOW9>zM$5&&ti3swg2{O2o21G{26HTh@GxUwJ)QluxraYUld_Ee!dsyW%WgURu+YeY zxanrrs>(?+dx#1+90%b$_Xf0D9c+ppz;5jd*US6bjCya1QZhi_bCF(*|Ua9dZ@w|q%q1a*eCLdhp7F4cq%wy3{iA}1>nV@YB zHFwx}#P_m_9DXuosdx~M@BGb{B1J?=ik~?#dyDwq8%*ECT2F>nqkZgRdsE_Tu}h>} z5vy$ObR7fSsaHoG4_py~`^f$nX2A55$=Kx5940Os)E*b1tJeJ}{q}&V4O3JZ7XJeK zXEnM@nB2er4ctbDPz|YDNAN(3WpDh;8+y>FaA}?)ubAn(i(kAoa&(0El5%)9bJ1z+ z0$qG7X4GAAbczfDyagIC^c;$_Tc|GndT;_b;8LvByFofJ6mL^qxn9?6-Zf}w97Tm> zaHU&vzI?#9;!0H-ABu!r#r<#xXch;Abao`$SGjWKFCZq7m`KXSXn9qaCYj>ePVVdmXO5*XO=gZsVt`V> zBUlthV!9P`*`m}TFEaFSIeB2?&;hforv&Qd|3x^Wir?PA^wqVE*5ZFqzXPrfCO!hL z+r>LzazZ+Oo#j4-1!!q*!;!%{T7)sSwh~NL4m=gj1(C}0#X*h@qP{nk`yf>{T=XUj zKM+~ubi<;4Wl{0tH}oi#Bv^3ANJo=gj8PJfVV*{rOMEMAjcaFI_23;>VMUE$2wJha zW2HmQXKzH%xwsXs5kF1uvNGsyw6*wDtsqoF6n;9^EO3M!s#y+;LJ(yxrCl^fw=7r; z;uc(l`zf0Jt3A$CSBs9JI+~hUY=u9)kr8x2EVU23+4zr-VBl*gGdK*=4NdmJHbtXf z%OsiAQYw~94>8bCo=ByM1?FlW2>C7j$R;&I$(;nyz$#;a#ne zCBkqAHF?az;5==k9~MrfmcsC!-6C(=;8Xw=suah7V>buYv+s*KxV6YR6~rJngFAQT zH60Ye5eJTa1Oy=%P?Q1f4FIAEg*X7e@K9zd-HP|w4egG?-Z0?oYbOTTU7RJOjNtKu zaKph7?3*PHXj!;bkslgQ334HQl8I4#j{vy9w*^JuPglF=mD@}mZ#OKcQNFq(^TPpv z)aFDb=N#llD({({Y$o=&F=yDieSrPB)8V@f;pXf~x z1<4)(R7m~OSv;8@b2c1A=p;4sciQ22Tj5KsuB8(HBj&Bpi7ho4oQ`h}S&GC-0&z8J z#vDQWX|cgpV|0#%9+_IxP~1U3PWf9)ofOm-w@6UMB7dmjaA8MUR+^T_6=l?NN^;-9?(V@S-q|B&MAA4HJJ`+V zAeC$0)syTx#GUJcyMKL%+vqBV5)-Ap@Ki3fAb5K&vl4(h$HSeCpT7wkQXgyle7Ny* zU*qR}ji2|}Cn_VmelQ+>q%nC<8ymhZZuq*O;p^;%ug&_ZjX!H( zT^)xse2q7JjW&E$ty+v;^S)c^)mOT7u~!f1a9TC6keL*9+>Ysl>?X=XXNjG}0sQ9n zsFS#%H6L5Ia* zSCM^^AA^ef4|nBL*@hu2MZEYxWY0!9y%^+~5H%y}K&s4R2RK5gCx#{;C2Zw|jl5j;6$%|N6qukIL;;A>D6h~mGX1s0w4q?; ztq5ZJip!I$*Sld<;0Gj>`n8zWm%j5?qhb z#}@$-0bYXgcnKO1D+W|-Ehou}`a$9pLHP;-7Ilp3HDsd)?TY*2yc&t%<$J{A$LcCe z<8n&RTF5#YxA+zU-JaZdgzJu$mylg?cY6z zH`WDKSY^`*(49O*++5XcwBo0Q@YIpEzE5fFmWp*0(wUrhj2jbvNvIY@rv8`{ z^O58o$GD->ln>!1OV(5yjE9($T^l)oVH{?ha%5uWH&n)ek|FuS5vW9|lH{yRwR1S; zFuixNKb}cOd*AP2`3T}AJCj(4AFAc3%N|{dv$rQyU$#cK#`rLT(iZ8p>@WbTG7+5Vy?*6h{x*6Dr zOZk*0`7ww?CMj{FGFao6!zT`IG)r|1PcZeA%DqZ)O2jsaWaQiFic9WZ@fCL~TG+|t zp|82OuExKTs_t65d@q|e zs&&b?zV7DH`lr6`CQzMtWsNH7gjy*%D_%0ZY*Y&;*@ly1xz&JRS8EH}Iy%bXAl0#X zIj~l`j<9OAR&i2*JgYcKZhFwQ4$0*O_^G1AKy(*6`R51SAxZ1W?l?c9&B0yUzqd1N z%LlP5T$Oii$(bj+P43F%eSoa^du-~s2P_VF3z*`*&UHK#rQaKQO{l0AAer>Wa%}S6 z&2Bv}$Fq**HzX%*cJD26B{P@^?$nmPgPr(=$rGF1g7)I=QF!~CB6s_l$=E4w!2nQN zEinElo+YA;c~ia+_1*paQ`|y#_P%}Q`%~vUsWq;7_$~Z%i-c`^(1e|c z*e%AFnd&k)0ZBjq9Es%N2Dl1-Sej#Amcn6g->~*Jth!^#&rfw@M+RUFQg##Q-kLx^ zT1?&gViaVx$roB_*e4pUD2Gpz5RJu%=4B|X9(S5MwbITiZQGwFty8UhnP<}`arrjB zcrZ;1IkTaKA4r2IX2dO&26mN!@>B{_lWoz(l&mG5X2mqaMn1kw+8VV{Ol(;D7HuAM ze726ZHlwMOdpi*pX=<<tQvP=+@V^{kyAlUwrYnetiB>^ccOdrjIo zu}Y6~ClxKNr8iBdsv|-=W`Q2*>WlgTH}FUoDT5`@qN4`>0WI{;J!}8YeeSdN&pKu! zr~X;TY~<8G>sXWTCXH9eOq0;qzqY#mF;=17q~%7NZS2_kc{5-l%mo4*lckW}p{zM^ zg!4^P;>ge}nfE+5xa`|`NF8m2OlO%LKj|Ws2CM$t508ARAts{a$dLI2tP%Z zDqeW^+s|~z!?zfIOlVp*-Tm#e+>hPSU(4|_r})x^%!)8}YXc7R^qv}1MyT6+t8G@< z#s={c%>q=f@gwH69E9Kf`?K9{chd6lxozqLsdbse8lVxd||XElXB^h&2I!zML>waV`@EkD{Py{-%+%MOhy$?@Vp4udh(XBcN0Xc6RUm zrJ=;*=$RQHN@7~;t4;L897s(A!V&2boCc9IMhL_AN9+~~AOaIgkk2^!BY$DV%mB=x zH);y+1Qr#Rhog4kgU*|R101l@z?|?QcmQ>vDiU=-TuL7BC-5xYO@=M?8bzF1kAI|E z6zX`Q;MBD!F4Yo+$X1I&DMS<;tro=vU83OHwJ4p)@)n_ws@Ms9sl(z>sn@_diDDd= zSd-K}^*bM9%2|cEgzZ2Y-PI5+lLZgnSs%Zx29MQ>6=VIsgz1xIK!mE5UzY(zd@a5X z9?OwhJmZd)xh}bBaIJBjS>YX*q@@+InD$Gym3eAa8Kj&}Gqh#NtyzYaET)+Z9-f1m z2*KzQGTD97eBm&mDBQxNmH7@jxXtEh6)2`z@dcV(X|PZZAV<%MUsD+_{2#|OXN&&` z`pZ1}OL3L^GdK0fz^q;4p>EA&PvPd{d*DozW^*KUUGDsjj61jv()HW2aubeid`oMf zI`sgEvx!K_UDmQ><4fE!cT%$TC2mROB;y3yCc#LtwvFZAT*4EpFC5Kul1+ub%W>Au zS?f2Pbm^z&D<}<^`B)7=+!xC!UD2K&&`%I<(0}nYkIOxmzyIUJO1;53?X~9&#Gqaq zRdSbbi^0brX@L&CUvM#nL&i+#`L87%G*OZa6!?)iY{hYR$V%15T&3Ioni8O7Z*C!3 z0k>CbnEhzbR6IZI=JRS`v=Nb%)d7MxBxhNb5hDz%lVIf%>1icms39{LVI&)tg{M|c zE@*?9T->xQ99dcSy0b%CeajW7_hY9usjwL}79(zMG+g}45B3xfO5X4?R~}fVjU`p# zu!?_B2P`W|LQL*@nLDqttdI*_;fo=wxz`mzM=FK3%i19{YloO)B|i=%LASDb;0S_2 z75d9|2~B-D&Gw#-Lv+bduqz$J15rF;SQ1wn12v}6=MNt%wARN5vWKudFCO-kZ>1O48{oq}hmSRKG_j0%X1Y{&U59_*E zbK!%Yrl>@YsQG!Fw$&VJ1z8ufU(ygi+g#Yj^AOE#EkW|!S8*Ha0~fmIBuBr>btHYS za_6*Ze1aavJ^B8H4(aD4b43F-I4|e0J-PK&Zt>>RCAHhRwT|EY(Oy{iWX_{q^B3oP zAR?SLe^F~Qe_2Dc4B?{SpIj+O9)E>fSjo{{BL0y!ngL;UTVNvi2a9UXYzk%Y2H-sw z+maa;YAuvwD`sVylQpGw&!8oX_HcPspVx`UHxQZ-oSNCvu%omi4T-z#2_zPgEN+Yj zVpADgKMP^>$DGWr9!PV<%7c@xY82wEt%v$)ULT0PupVN{Ag8^WU%Bk+flhE36ufK& z$?smt+o_w>vrkHSW{88QygpfZAuo>nxu=~FYJa}?57ZZ?{3lnK1E$p%??lKI|BFqg zSW?PKpJ^mKC#Aq9UGb11)r@0M`F}GA8Us$)4jhHb|9ltEVUx!_X7+FV=rP{k2{ciH~tK99}bNle5JNnFn zZNbu;2D$j1{sZ-Cxkd7kb|Ja=9rYk@uYu$Rf|ox)uC52U>fq#kioyd|>OEs;AJT}FbZ&Sk2_LT2+W7r(#0r1u@1oc8KzUA?i|f^xeW z;4ySVeYWdsAchT=8rt|*^&r>PKnxomVM#s6d#fN7jM}NmW9&WkFuSWT9vdEGyXrx% zt%2CXbRJ>vt_QiM1|maotZEs1$KeDWbftkPx%f5iKRW8MnOt;{8y?A!Cl~P@^w2yl z<>bdEfA>unxn}1+mE3Z%`&>6lrcGFpumzlqZ{Jr;{(P%j*NsF%Bubk!^4_gjR!)y> z-!?VVq&x4T0QfIM4~)62YJJ9awA zN>rqsuJ7hA1UWr&Nz{yxs@NeAb#MMp7@S; z^%NJzj}rR$yI=UP3$N6x!T3oT-#H;%EkBa^EMZMgP$v1@y%iJ@-W`J%itg32l&f(8~g|O z0scOIfd2_U!0!x;`(5EX^Dy;dJxA$_Xutv*uHrgqKR=Zq;4B17Joap>(AmtL#1u*} z1ubCrRM-o!t-x1%lwak-(kK=f7*E7`tUdAgj`|YUbK-|M%;&)Xq*>1EcsPA>9HM6* z_saPEZE>3!&Dqq(cwX8_6cExH@Kc#W4}!rbs~oPSWDHJ)TmWWoY)b2CHN?&6U#(OM z%59&Dm)eWfb8C&2YmyON*BhXrJPhv}I*_)~o;Bb;m!4wb-I;OxeZy{A>zX;@InZ3M zG___*Un)zrrietTkZ?DSzizKq!n8&QZXO9}CpiL9Y1EK4k6V7#=JiJdTBjIb15llbedmR{Gg{%Xrw z8DN=5cVRRky{ehlbY(c>ic~hZ7^U;hK^Jx+*vLg)^jJQjONyc~IX{~G2u;IHO0>od z(-^|OG3e%}l^Eq-8CO76SK1&g@LbqY|NE@}!-6mZDxd~Hqku0@sF>v$Lrfffl-UOH z68mI%uKwv#!en{Ao@QAjQ|_)3H!HdQ(a(toTGJpJox)#NX-pB80Dw%gF+Slim)+ae z?a|l{cFk-P<#{zglB6f41^UUMmD2ko@`zdo*qj1#=^-p}mt26&oR+q6fvUA0a9#>H zPk@6FKRKS8D;xvlFy~NpMMf!PB*;?4Pp(v^kyz9$_AQMTXd`P`lFQ%VdMg|g2xN%5&`A<*O!O8#H`6HuXxXR3 zK7Cfup{yeu0xD}|%I31aUQ3$g)fx4m8qlj;?1h;m-1qWTrSprbFm5++`9R?L6RBP? zs@6-k$`xa^tqXe{)G}42N)EWUO1)cPAQwkVaGD!L5rYC*%>(O@Tp?O?8Z)I7mAMbI zEgIa$^x`Oi(`8vHKz;ngTNu>-lQr))`2V26lK53dsU`>aL(ipowYb~{k3<>j%aaZg z`cyze;Pd^1u&tZ;J_#2 z-a$0)H2B#de}0PK^?7Tu^NDaUx%i2&JFgj&YXHk+|H10+-ST0z^R{0`Jz;t>Fwc2=4Eu>i|h z^6-=4a+cccKe$E1kQ&|2)sSM2kTRseh7{r!UfP9_JcNm1YC57lEFY{VdL@VWo=EnP z?L19G=i8Y9%7IducwBh!&i$rxrA3$GY*0g+BpkW)a0aMFS@$F96CU;W^9(Jt*~_D$ z^_-8bwIL$~F-|DWnI`(opin#4K9Y z!&#yS42E^`*h9qhKGx{A-MR?fR=cP*4J$@Zy7f#uZFrb5LOkwK&eIgEPc$X}P$^BxJ(NoC6-{aNws@`@gM?O3Qy4s34rq#aqp5+)rgA+^ ziIGB6z25o}p`=s&^fcwyz8MJxldCFC4Q0gg%rqrcKbb0w4ZZd>rB=~g-+IxM4>izK z+Vd(+bysPs*V7aa%6gir_Hh#z(KB9%@f2NzrqV7}tdB-h-So45eV;~CG+2FP4M3uv zPE+iN!GWi#XDB1hiT!F?TKQCEOL-EDh-j)Y|Ex4sElZ=0L?W7M^)#hp?37%(smOD ze*GYHWW=LJ(OMdhO3}{geLotgC+)dWPbVCyMm>F=di0ht9I2s?P!B%uwUTz2%+M); zq1MGJ@uY%NT&ZjLv_6(}li5ZoJ?yZ!ay$=WNkr!o@2kQ>31#~uu2Au`Ry4|4|w1N7wPx1ut74@V8!fk1lbmpZUZ@xoMm zE6+t^?_$P%O|TQ$k7)L3Jwr|Y9J(I65*vD=L!F#=#Pa!xB!Kc4pmL|#6?B7>PTczH z@Wem79l0nxftidpV6v1P%62;Dv|s5opjCFVl%f0KEtALsW$suY7BEOu%BEV^aWzc| zSu{_GakD0Q%a!gRuAiINQ5?~5T0`q;pG*^Vame18q6Eed3v|vZR0?O3SjcZ@e^a7O z80SF3?4H%p7P?0|8HYm^Kf|G*!`X$Ei|9W-|{kn-Zis z!(pZaX}6Z?q7*Ij+mL~%y{=_?*&X$1^MNfJ;Ayk8WdpQ~ux}Zc4Snf&1gmQr8;Z1P z?I=N*32XdN~o+B zNqexHu#wEA?GcgSqok$-8ua=klxPK31=E3G;1mTgrCg>1p;?ny^s=|qXwZ{M}3)+Bdx17YYhQf<6w%kh9|~R`P7wW zU<+tc4U8s55#mO40Gz!4)!=AXRFZA@^y1XG42)Nu5geFU*rj_LR@NR3TL}MS*M*)S zo%*1aBt#}n&-s;T0r|wow{qi+wTL3Pm*9&)y{aPmQ7`!-(rHN%Bv}z{Q6$|04x6Gr zN?>1XY7L$p;z6i1S2|@ho@p-hr*sL*>8!w%AciL8#^O+4ax2IWrV;wdG$nB$okuTY zq`r7fiAIe5I!hTeD321IQF#*vcJ05|Xb&9G)ET&7O4S*x^~55= zr=ua(A4Efve){+mv3r#tS0qL3MmHjMKhP=QywL!Url5DlLOW5f59Wb&p?v#qVoQm{>QorU zqNDXxP*s1W^Is}PR)4KU(b()%0CN)+%%BX@-5;ocQfPO(rvhH$Fi>!&(nSS5jZ^@O z#N1Y@O}not5u%<720*!Ze%isDN0X_@4NV=W155$`OklE_G^T2hsRk_TZcg^Obu1z6 z;0#p2?I%%zSBlTpBkBEM`gI+G3gE;uQh{HQE7k6$%ur2<`DVKI;s;Cd=RPFIl` zFUS`5Mk=V4qU@|zDvT!=#*7N;rg+8JLdqNpH7!G`snKd<^P$<68qtSzR17sv+Yp&C zAF;~=>B0nJSfeua0{Y-o-)Yf842m1mE(~g^l5VQf%s)JJ+&I+Cb8OEVWDg*8iqbID z)4&|2a!lxbNB3`wJ*^D<`6zgs_<7e!W1j0<+=DP$|IkmB| zZk{&dGtsJXkZ9-xC%v)-mJd@JZg(H+W;`pFip<7(_F{Y~=~;<)h#Jkau|^`TsR0;Z z+wSM0o>UF6%tx?+u!y!4Ak!CUAx!lFk0e|E$}Q9FrOsc6BNa(02T0h>c4TZDk!B=p zElhUgi6I_p?QBD4uefhPRBsfr5hAcM6N%YbEwVK$3fUxe=WIV@_Iw;)wPU}({Cc-E zeA8rd*7fd6tU$LW-@hJvqBJm=4Bz0+N_g6ufI(9yC=MC;S1OCko z?$9n&q$lV?M|8qSp|C4iccVMry(f9&jqb)gD`Io(FobTc`5N#nzOc zJQt`?mq5yGQ7@*TcApJcD}|Lrs|n5z4~yud{sWW zADTx;FzYd{#>yjp%uVX5R8U+ghDwe5?B55&XuVJ6-#xr2w~7T-_e;n#5$tj33;4ao z;VrWz8st6#d~qVU)s=@B(ILJOCnkcAIO4k_y##C97HlZxiL#q-l$#R)_u4z7zA1aw z6;WK)kt84^0)QGprfmqVt^OVWaqJu>g1wHkE{oHfvU3!7pS%_OXVU$fu*BVuH#Ee5 z-65C*+_2ytNS=EO2f_OspY~{LG)&T{k{)yzM2s5v2yrFFaZ4YsycRb~9D9t3;9*Ca ze$U>VUf0dFa1(V=h+{cLPQQW5; zY5ryS0&$BK_b-mL#nzRc3Xw|``2|Pf5{q0++_>VtY`2_%7hz zp5p)3;X-*HTd0xp0)2nf5x*ds$2V6_CW60r#Ltfw@Ez&<6OQ;O;wnlRmvS=7C4NN| z@japMe|E%A#QQ6Z(F!70D)KXq#Ff^*3F6i$?sJZ`H5Rv$xPuk6rtGI_8X=^R+P~wswe26DVzvD<;XOU}(JW_z)cja}_ zkruZuBd)i3;^NYfaHGGIh1xQqvW4amnrEQ}gceu`x1G^^3q^z?3#~|pVTFASOr)O^ z_PH|sTAA$push2<-^BZ_wyH(H`U9>#T1{xRg%%Q8XrV=f7FkFtgaHeo7vuO|ImXi2 zGG<>ovD1_+*q4rF_0?lvc$>Gc#V1#kaY_2Q#1hBTuW|cYntm;{FC5WZ#%1=kJpEek zpFqyKAp>l9mHq&0!SaMZ3&}}AvxT||;pV)YeCt-%(bvaUpT(m;whEd~PJVN%dqst# zbo(w%s{+5A+t9pnjcezdcV4gowB1No-RuwhDWbD9(I54q zGH9ljAA1=%P)WyVMqMzjh~=f5feRQP!^>ScR=*P)oJ5@DCPa#JBVo@Zzm} zj{3git~J6jh}{lewoN93+M6(~MHdhm(gxSvyKm=YfH@J%p?VifE3`OzdJz+{X51?qt+$N%K_m0$(%X zv}Pi#=7wsM&X2kUFGPp71$7l2rsdICLmyj}R+tp&k%paDpGqI|r4vp|C&KrO^OyR5 zC4Wf;6;yCrz)V}*wuOZaizD#5fQ~fO1YK`oS?d*01QrFff-cE53ss`Y>jpW5(<+JZ zRkmY*nW0hvp>kWiI*vRphofZ4-?{Eh5Z)yCPBGU#MW$YKM2dQr3P68-1xe-a+=2@a zg7TP+h)v=}D4e~srIpZ14;u)xTc3>l#@r-gGxYUcG9pGBI&<7f)>B@3-)#Xas z?{LGrzJp%|c30b@p5){^+=546;TpMhVOKXUQmXxb6aE;IB!x)O<#5o zIu#*(OB8XmfYzO}Qbv#BBVRn>w0I(X@m2Vb?v%A-GFnx@X1$i< zcBUm8_0TIG*>B>la3_1_sBdk!SHInB!~68hQ?*yxT@O*wLW;;I!6&LVBVfP4V$R1O-LNDcWFzNn;8^WDYz@4$h zY-r-0Ic<#hEaMu{CqLj$udx3RFDUCL&x{7^P#MljYnx#j#68Dcbu&Cxw;5&+WzrFc zfjMo2d-3kaIzPaNw$uYU6{~K9tNUOeY}ww2I-Yvj49l*Xtup`GW*9LC_pkgTf5A8u z;U5{m4DtszHpNMSDv%!pkBN|og{x0F*3Chnx7q_bgYZuxL-!lqc9sB<# zzg6icmPe=*8z6xB&7Pj{k;<9)S#3es=5O?o3Trm?JlUGctm z`K^q1S5GUd$>tDW?TYukySm-MGb|5eDHeeYUMeIqAcj9)K6^KAev2}5K@{gv0gu8= z*ca|pn%}`l^r!mtqfSWQiIDCaT3^IF{I-W2@2L3J(EMV&Z&$7PY4IKs3i4t!+{gr4Fov0XJXV*aAuTBDyXgb+~mRBWwyU2}gIR$`A&8rrTmF}n^CA*D?(XXYoD@r=`i4X0EUnY95MOH zfjg}+-3UO4(LZzTWN~uR%z|*^!=+%DzwhtdPrMmbCcbZT1Tsj{~a9uDJZNw8xChd9eb|- zE10WfL;F8L-7E+zMq@%*w0b(_c~Yy6s!4r*kXxmQfKSy^r>DF+Qq#!Rp-Gh2Kx$e3 zlu`?#GM!#aXy(TTGxGRCAgs}vXsJ@Aw>d!6(VH=T-4#gb(YLBbLNMb7dQ&4C=&hJh zrnSfD-^^jM_TV*|T^3g>jE|(d+6BhdYP&jS|BSoZgHV&L*bz-^FRg(y*benlXq>g| zLceWgQ)?SlHnphIw5hed?gf5td$C{s&M)EThD3I?EX}s7MJsE&T6C4RtHp9dyIM44 z+SQ^I)2{YVTU{4VUs##GBvj%4?op5u@uFqq$!?&F7IkE)oVA%=D2;H7ktxCz ztUmqp(SpI~5W|NaYqOQ3kS-NAf4dP+>gKPs5T%H?8p_n1LOlYMr49k3eAcEf4|E1u z0onXT6@q`$9niDx`q^C~?lH=i&8~eYPUg#c@NZagbD~kjMds0p=;3Hc(F^GeKH-E; z9YOg4RAXu@NNLpg55m_pd^T0_sSI`aRO{>TshoBAR5O~aH8cZ%s%pkO!|B1(X)NW5 z#(xnBXFzH_9SW%pRHZBpNNu1hs*M1st=dUrb<7jTR3<>osiINv4QNd1aL5ZJYHbazni1{E_derF70yGq zaBkyuQu9!yAT8-iA^X*AcV=61DWf>oz?>TONeNvyaQJTYaLged81VaZ!s(Wc2)|_u zwXG)TxBpG`I;rH6&${8WWQNBU8b2~LQ^zxWyvd{WQAlqzxF9$o3#sHg6d1%h{koJm(qFSPNfr0 zODDp21Sz(mf|uXNyGEvj8bNYIza-2_zqEvoWHq%-u}|Vv;Vs~+UqHObYe38Bl9bsV zck=m4cslM-LSdBcai_pECDcfibpDI$KLKIaG)}&A9aCgtDYmF*sQ@KZt%BrL|KgUP zfdIZ8s%7fcv=&yRDVR!=>>!lzECn|=6#Tn?aT8}?aKDA~NUuw3vvII;`xQ@%wThs~ zYdf)w5?^CLc&cm&Bmx60uS>$oyGICt`;TXSeyOqax-)R%2zJWgv#TFT&> znrW!6c*4_*N0-!4{C&qP0_p=m)E~&mCbV+^5<)3#0N0{~q`z^15u+EwK zq(d0x;Y+4Xv(W-3?WQXtLR589JSVvq?M?EF&$|UD^oVrF(2v-D?)UGZQ9LPQs41p1`9Qu_5hOYU7;FJ6|s{0naQ2rl+-mw8)VM(Kr^ zE3@UzIy0Bf3?(Oi3>U(We8CN@X~ObL1XWiOrfL?&g;2f8X=ovw_Mtbq?qew2&i9!rwJ+bPgZCS z;(fm?Cg*&^t$*3AYY>p*AAglqAifWO8Ta#tWqz?WeuU6}5dRpzO%~r=go=xcFq5GL zc=RGjD-{&%# zFzv9WJ~V4J8-9|4{CHN7(;rJ)^4pm~l8JA*u`>*-U!Mi>j66;aZNN~gW&>tH<$LeU z`I4Kmg8yb_fS4Oy)q)SH6>LEj{K=W~C7s{qDKr6mZf1bAU?7Tp@s+Qd^O-XwU!|2}0{G3$0C87x(L;=lK=#iJ zlEmLh%ed;n+SoL-D)~WH#%@3|N|RY~Mrn6aMn#ppZ)SiP|4j4@2(a}L;Qj_UVXMcm zHD^|A3HDQU?UH4rCaxwcZk7(f)|fKfKU;=GQ`bPgJ}ZduRZ%IA%m!lB0zp?E2JTnD zVLVstw6C{*LkwUgPq-%y-$r;&8vZB3y=nLX!hLD@VZxRE^y622bf)2_ z2zRC7%fE?ICkI5y{W**KWg0gS4-)r{X>miu{o6N- zTuq5-cvpzQMx&-_HT3b!uL5 z&|t%O52?b+{5UEOq%5x_&ZMID0UpLHZUyEJ{>qShP}CZym25!<^^ie*%omhw{l4pa zp)&u-qCc6IZ>w)L?~*LcZ7~dh<<{< zS>@r0#HK2x)kb~Ul-%6 zzMB!AzTU@|2u$I^V*DU~o}vzeqUe8+64sXi z6iFQpNeS4+j{+*vTOS_*Nwtbtjy+P2T9y0@z?G4q zP}h%X0NTr|F+s)360ZB=J%ByI-=~8V?ycX0m&DinJ4}ZA5vuz{%0)<>OhQQxhP3Iahr*$}l_QE&Z0eetU+iu+JQ+!MzT^_hk!E9`z6`7qJG zFZ%j5U+Rm(Z+pb^8ihYdSY)B_rwEIsD*R2t8T`NdaK#ed{=-`44-?KZf10pX4rP9r zuojNr5dKfWP*kUVz2ir|Sf$)XSQu6KvvuL`5Ej)c{*y z4d9ss{{_)uCKY@!sr=N9jtXY~EHKFrf9&SX7sORRnXQz-1gCids+ZQLRWhQViz$*L+PU^@3hKMEu3%w8zr+-aJc9 z$(@v9$g3Ci{#6LhWW8SiQ4wD1WxaX`UavI~2^d7APXc*6wP|d>XA6CI`o2hXXT+Nyo@uMo-JyzVqzxBoa zxUslLt6=vU*kdW!Pa45~S_S(GVAw!C<)x^fHG(}BRI-uy?o6%A8u#;RagRO|*uPc5 z9)BjVUsS=K`dLN8Kg)pqvI=+kW6uEgt18&l&jj{(70iq8p5~~38qxi_3ilo>ZWh{n zq6+3W3A2DbSp~ak#>Q3B;s5t4+(&1GOTqr53ijD&0{cxB?4f4@`_EuqC7p;rdM3Ev zR*U=3X99bw3ig(tKf`!ET?I>iZadIfQ1^eTaPOzMruZ6YSeuytYNX-cRl)wr!0t%F ze%}c8hbox1M9uL&z>w2VjsMsPx4#PKcSW<%=1!MQ9Es}f@e>qx-P6V7&R_Ee@TiLH z*@PF%{a=yRbN~L9ty~1(%I(KOp$CTm(&T>#L+7s#uI6}TVGwTE81MOsRP#~}qkdl-jz_I}krInAzN5+F zvEhcObv#^X+GBLt=}p5OH;RJ>d>N z^{o7c$WbQd7RQ(7;2HuL|B{EIk8(GBs^2{ z!fy2E_L^~?vh(QH_qg!b10tVv;h#b-`)#+7yFV{AUNBQt$H}rt3;t9p> z06$9Dj&izyl_-Q6%E0uFFl^>sR_WN!Mo~Y=p{EIxfJc{dmw?Y6bNr8phk7 zir|%3z0O6L;U|d{6se~rH|4mm-}Z)M-E+Cl!(g{Th#b$rM0)ChZ?TrKBWa$1#e7$FH4i& z&I1D+ppa=iSgn6n=$~=!(Ndc(mTuWXxNi%uJL`aqdl4j`&ZQB00M2$hLk?I0T(QJm zM^KJL!iDAurWr(I3>$JPqi5*C+so}9XTwpu5camFa9t(bgtMPK^%RN|-V+f8T|-Zq zd^!pN`6S9Dv8m*8sx8O3=_M}<<<|!4197cu0|rN-jj_^6_71s%DiJ{jdRK-nFm7vUfg-}S^fQI#7?=V$k1CGiW{*t14BeSlyBK)2Q+^a$ zpQAzTE`-2L1b5(9ig^h&iCDVj9*)B*Fr|hRPJyF*(!ME~OU#rS?BrX=P>iS{{YqEd ztTJdC!)WLSMjw|kfCg7QL(VDMlHWIn6J2-d;3;3q=rc&(l*Fy!(vTtC(i$Ge z6u+Z2T+S4?D^DH%fjhJAR#`$-2&ecztv1Eyw}prGT{syJUJReIhbc83aG;aCuPq#> ztk1WFD=3Q-II)W+ayM1kMf#QWv|Cy0+QVbX@%r{~)ZLlDZzij(DD6Q~EEp?VTENr6 zQR)E)jcfHJ58O`tLr+;0kJ6y65K_6LqoNqXpPHZe)=!yQMdh)?h^H~7E3>9pev;H^Y(4nG>$9z$GVwPR-$opi2_dM9?7~q5u{X zAJHH~0k`TGLyBAU3n}c;awvZo8tJC^d*(+(FU7}(+1iZb{dq&EyxMyOae7NZ~! z2|8PQD2TL$K5g96R%dC+6TRUGrF8U#^Y~fb7miSvWjNDkINLIupJniA=liq^EDb?P zWW*v@Av>kq&X@`VlcR8C+*2_|h?pvE+Mv^4@95d(-6m zeDVX+k{?Ku_mM1mWm0-!xz2bQarusB-0dslh<>f>Jb!16WcX{im53xW+BqVe}&jkshtIXmwvFWnuDM~mOS z8($X9cUk)GXz8x<^4-@SR$+z9MT;W?S+<)@iX}3PmP9RkLvS{3Y z3%ren?vC0s@Flyjgfws%8{niZ_28`_@kqRk^HVuYCbdC)h-_#BWD4wTgLs8(kb`(! zHo!rQo$V+;(IocnK|IPU2K>Oy=ktT48u7ywoDx60xL4)}UvdlhK{{9n77+$Q@PfF& zbi&kh(XucA2|*xyCBGU7OO=IM%dvn0;an-=_B!`46~p}pbG?F`#uaA8u-`CmEtvU7 zC5w@5D|f}p82WRiRWN#xTaH)SiJ5OPdZ4?F7%s_Sb|#qis3U48Mmvfz?@m>|c{_;W zZhbUrK<18+7%n2;Y+Qql|4WCZ39Cfhl!k7y%WZ{jcxE-@c0t9q`qH>54ly9+p%q%_%EF6Qh2s} zQB%)xt)QG0lq02? zduNf>CElFS--*0@OIiG##Pz@Avf*%LMP-r}?%0ONNE>*VfF~u@I@#s&4=ECzR0nPB zq9Z#;w*u6Q#{iYpOw1Fxt%P*VqD!qK%xw($y2)Xzzl~Px)Kxmlgjji=fR?xJ@M2X( zypUIC9}oEjnx$&ngK68?d)61&B3x7p zY$=4f4XkNhW8s1`@!-c$tND_LXm<%MmHe?Gpu+*u4y2XS2)!GK+^u&T*@o&dL3P6_ z|5jRgKKbP+a!%eVIMrO*JzE7@l+`=&5h`f+6}0g~CtI@$9{y~QRK~)qmVQ6vDMw-* z3*lO?V+dQloW@Jx;^o?t1;sOymGi>CdZ{`2MaQzV+!7&hve=IYYv45&W^na=IL7Zv zLduC+EyN7Ncd6n4(N7S$RlyP}MQ=hGt59V)@QiNijAZG226eN^4w0M~t8&eI@TlGI z7Z5m`3wv653zTM4Q1Ma&62FBm_UB5DvwCwto`)lVjr1|iOBfq&X*csrB(GI7Morr< z;opw!my|qLfxz`FeR*k<_Ec=u1zNepZmvptMEZ@D@C-_^Y>PLufdrQtas=g#oPRG>^oe?oo!{dj>(H)E)0XVo zGzeXb>$JZ+%MDaejX~uMiI>F8S!vzM!eU@A#4`dtDsP<2kK+n(-Af+Q+0B4x#7LNh zLb{Kw&_sZTZ=A7D1ns!S!WoVhO1{iQn%@o|%N;Yz)>bBC(T59VjDq_J(5j)faVJ|yFtC|hro57BdngXd6WRJT2c4eu zFkszOdW)b42ym?)WRk;^AbH<{u)k7vs4SUKw@10#kB#1P1v4S&8OCEbd(aOTaUt^I zLNECsBTW)E2P7AQ!boGBmUJ!IK~G$LJ(f&xS5PBNqfJvlazz8HHfxEf|#)28^KC+{<)@J&JC1!j<~fjEf`C#r>? zE(uQy_dK4gV^4u3b_{FY_LGg7MQmIPSY2^2AWC3k6Yu@WoaD0ca7Dj8bS*6k@wRh? zE1i$?m1$<`F5jqMS;jdV{OJg`NCvX*geP_>l@iDe zO9^BO&)O^8v;y~)QGgvX89MN0`8ZW}E5R{zP2;bYHWGO#eb-37^g3&ZDNo!`DF zT+n^#o;X@AH1JjynW0hj6a|-3!K7x?w^yqU`aSud9|*j>g{6Y=!ANtAcrWX&kf`s z6ZRUjTYux$SUSa4oQU!7Wbq*!TsD9KnZ#IpXhK0)lIgI@&d!ld@ z4_YG=AoyRnoziwQ_7p90;K_Iqn~{Tb)WC}+1@YcMilBIP@lC^pVPZvDIwM)8mU}Ky zJhxC-H(OHj;x*yQ&Iah@`ZeJ?_rm0BYr;42bNa#Iag}d&;8Sq{+Z!&TaAXAQ>npLy zu_Fvv(DcIuhKkW{?p@{OGD9d!V(X4F!{dzPCHg6|eAGhz$bCMItBYG80G^xka|4bk zHI4NKjc{Da?a({PXfovIA-|3C;vPv;>MhPW+F8CkOF7{VI?26O0=4{m!&VSuxgNZo zEc!xdwHs{Wok-G6J6Mrn(K>n}X3EZ-s%7xr2?}ZT>BUD%45lFYqcJB2Rvz7uWZtP5 zX;oTxsAZC~oAnxJ9L2?`Fj8uZIv9BFRtjzEmd-faqB&cptf_h4W-U!XbDRfARkH%B zX1YgFGkDGM?16r?YO=<^mQmlr*1>I;qnCJ(-wcH*`cz9xxPh}-cK5f;F)z+rsbp(> z?H3mMFLr05WJ)-(6Z(k%fC~*Bd9f^2gg-V6uVo*p_l$WS1`^7#-IAXY$=y7E9(90L zbsj{9Q|ucl3`fP94k)15!+9k1a1Mun#(3M(iFhkArCjTvMh*vOF+SYmrj6y0w@j$_ z9OU~~;|x_EG%UedrAC2|^+AV63-5bSW)ljSlT&{-*rWTj;Jg`p>K?}!~><&qK?K4JDo zZ4C_rg?aus;Vt3xFyfl~mU4GpBP%#5qm^Bxbwgu&Yf+>rgJk(=tuyD-OMZ9H*5Q=7Y|ER-p+!5xe` zml$>W8J<#Gn+eki1Q>kNhDtPo0g)0X%T9Ps!C*y3#2 z-@ck3F{YNS(2ZQ!+4LadDO=f@-C_=59dm$jbAWt8MMN0-HewthsngmB_p-@U?O(hn zt0O;C3*}wgc-9-X#J`)Ng?D7Rr?v3NXK$jPvt}kx_^=D8#g>B7Jh9!u=ExI`A%`WcE12exTvHGh)!j@jchC%IlCjd1Ew3TG2a;e<7m`t60sDHX7LFsyRY$*$3(6N$Ve zma}0BX)Y-2n&;-IjZXwqFmDio4miGMl{lN;8;Saq>vkI#i7;c|J=&M{(Ymlu}KS?_xvM6r6_=JL=N5WNBM08_#-Hv%NY?dbK5W)g`?qOL~nZ@d{-% z*F{;j23fA_kiABuE1ZGNXg)&0llKM z?y2o%Ci4#1H%vw`wLYG%KIWjk)2;hR6V>iNH%of1CDqg3^OS^;vp#s9rPb5k8CkY7 zEUBLM&did|w4{34`?DV^s;9jd zXGt$^AfsFz#SKFZ=nr*b01fb?T?GOlTc0F)E(*Ue#P(A$ye`RR5^`wWp6+BJCS=`a z?E@e`^05bNHW8K0ms~=y%=5=77$YIGNglo5A(=pld1N;jr@X}FMJ=$!b4$pWCf$p1 z`m&RKe-<`X{#S*&Qc=WjrDp}2v}^qMY-_I>zwAO9_XX@g9ELa~nW9ulb5qw1eDAiH%%IVzd<3 zEJor9Vi%-=&*lc4wV0RAY&_Uci8+Lf2rsN5Ua`h%M6_cBrp1p3Ng5Bzg$v=Yaazd` zsSU@UQZxdR{QY*>&Ihj4wt}{2-C~rasHpE9L|N@xB}4k3(txyY_2vF|i@op}a3)t` zwVv@Du)aFHN0M+u{I4ky!8I8|=8$QQ4x}UF&iUk{XNE%+w%eL+LKXWAwCA&d8#6au zzviAFY4wThY>kk98&PrimbK5& zGV+aZ+-Y-bTGRgYmW8y82Ie?M*6Xx0HIn|rh@P#L|Nk}88z3KmxBumc{?Df@+&1M$ zdN3YZ#to9VMpQI~o5XYxB4;uZ$xEFXLAH9`tS3lr9Wa0YnhtwwZP+DK zdvS+RZ`G(Ld(Q~_TrPR;8R6X5Wc-qsr$ljWp5kzN)j)B~>TSGq!Y}X1=gtVbQZ)QG+u|+P|M!@0kSkiF zRtCd!f_1ndudxE$dV!e~I~^jW|ys1afu9H<3Jn!3)$n%Ia#~K=2VAWYT0#XUtdLA#i_0y7q+zo%}x1S z(9C~9t{DQuc)^T;*r0|nmW^t9OWejmiO%ixO2amt5Q)NMz*RZ!J>`MJkcXut-l`W# zLmiDdgYkLhlE>JP&a#1B7#(ZBI#ABnl_A|b$vUj&hj)%6t5Qzr>S{a8A3rCjUljJw z9i`GsF)9$l20X1adC|Gy(1>Lonx0vex@7dCaL758F?6!Q4Nr&TJU|DB?6TDzkAk{B zjZBAMVdWOj3s<9YM<9ogH;p8BUc{9V#+8N0PWlx>)1c%2c1a34ms}sLOMjOmvZ zT_h>gu{JzjwhGdk(V#czw6l`|wQnpGrn<2B)&Fu~z`ssnuZC$!{Ky*N4095mAXm(I zHAarch*(;UK;&1%vT8(H$nt6gJ4->Vs74^uD`KJ=fh4bpmDLF3cSWpOET zqKb?RqKb?xqKb?xqKb?xqKb?xqKXWQs4xmuY-Au+WMmOlWMmOlWMmOlWMmOlWMmOl zWMmPBjLKT|R=Wc0`x4QF$HICkA%w4`GD5P@GFc^AXt|DpEVN?1_HcrmSRZ74tMzF; zM)Q`sdOZhI7CLBskTrjOfW3l69=txtTD+d4E{i*KeIVn`wYI=n%#!%g>0^~eWR0yt zWNofSWKFL|s0S4qzM>kF^`sh+b*LIq9jmO~tb0|6te4e@th3dKtjmfx%I0C#^(sh) zfoeobx#aK~k%5jD`jhS*3B-Y*;69SvMtE4)pGw^a+DpB7%)b^K=*Y1db6oR!^~m96K68p@u(t2`2o?9STE z?s+>ev}BzgPKzz`8yvIS{=K$5cC`YhoyX!ib}P%irp3-n3oO*W+Fl{W>g~$v?MmX8 zhrO%Sjcb)TxK_Ox%&NuPv+QBBYR3Q(t{12`ji^5I72*7aV=1cT^cwXF2Eo;=BWcz} z8m5JnQvSH{sn?u}*}AVwq|k^O95;Eiqo8j@%}9#&h1XtN9<*Z4i`^x>l(N^Ke(O{U z)w-R6OZ(8qUps%Cso`C8j?U~}at!omuc1iK-x}Eio(k&0V-C0#M5NDxoTO*Lp3E2g z4$2y2+>a@NXf!vtTiP%39HpZ>@4eQD>16dvc19^d&O}etmeCWGs(}FgX<3mki+_V- zlAa+Kbx$iWX}>U>KL#BRMMJxJfiKM`vY-vmkngqRD-Q4CU8LdNa#bD;GU~}yuL?(# zp&>VTKs`SLejzledZOWsRFo;JbAhjO*WLFn++-9tz2DOYw65Qfjc>nvCVMO{s+Crm zu{4dg%}TC`LmqXdW#ln*Ewp@Iso$TfGETf2B>P9SEkQxU29Y1b$m|bfS#JzO;{)k9 zl&8h`kDd%L&7YHnn<0rbx(zx=gQAW!sCVenV6UX^Hi;2DyDYgP7xhXUK&2sB0F|Bu z0d_T#FE|`nAN2CWT4J1+?J=qqUc2I!p)5h2z?Vhv+*PiqRf`a&8S8_!KCbl$TcTvt zG^v9JsrscP(G$EneNtma4l_H|dD>;rmzYzSxtA0JBLwp;jqdhnhIP zLGd-qLX<8$T8?bxK_$&TD-Qp^_Ra*%uA8nPmV?w&^ybYdF>fy+~hFMb8A6J42qy* zVyA~5)n!xroiogQ_#o7jCvuQPxCJsMGMIBY8H`PDr+IWcQ(o+%pt{(lo3jZ+`8wFM zRphDtkC^5+jy)V)0+CLnC(I)bUb-hb38}46P`)u}xk7S{ABDwqYQpK<27tJiM8N{OjS%7N6tuQmoJ%>0RSgYA5=xOR6p zWWBP3JZP%`rDlt7bp-9z@z;@ki8v;|BGwVvk=^m(pS`1&MAW-9Dnq?jX@(@d*ml?3 zQR&5Z6Rv?)#q|bl*BF{KrvgjMHEhp?^AVr!^$ZKnI{)%@8`s`@{kMZVvKpooAC&QUaum8gAm!56JZI4F|CU6P6DjJ(1GUK%c$4qx#FjM4VpCnR%a*wiU~;|q2{SP-S%-}~l|Qb@IqRiM=24VNZ;^b2hXaa9 zWAl=KT+WltILwq}?DaVE^U_eYcPHu_-x5+G(;a#oNC?JcL8aSjeH%EKWqIN*1EcSSUL$T}&H@TBLBr8#NOm!^I< zlvZ+5-!N2jcFw6>0#+JMkZHZ}g$oR-)D4@!&{({{;2PUE)1CfwFP3Zt6e!y~hVTxp zU3;?WbqGR9+_i>Qi-k$UvYPm(<7NH4=6XB|Qqk z2-W-KVCRu?9EW^3FN>>Es(1D)g-Sg*aPOTsdcV75Pws$~_Z(5D8WGEk3P_O$A>xU_j3hK@iv zHG@6bYF3X^>INFC_~_E1mW^S0k?90qr8^KxUAus<4v52jao|kVwg8<ya+lRK*byy*#$1x^`0l5Icl^u=C9Y!Dio##??PcZ&bv^UCJIRursI7W z3e%*N9p(moK8y(@wWJi&XiO*gKs2U_W^(7b0ne@qhf!g*dDkv;gGt_n!ZguOB05a= zVY}C7miqz3N)od2@rRI0P!$TQZreZlAfq6z|$Mky#M39Ij9G z!Es$}yI^iG&4=wL1+L4!|J-1@cO8Io&ASeq8_aOa9#|5nwi$g+`|Q2ENY;-ZkfzZy z@dDS>I}0zsO}*RU1;VL!d%S=-_0Gl%tW)m}cma6o-4QQPPrY;SPC!$b`gg(){8R7F zco~G$`zE}MMC#oIFT;^~cg4$?q~6`|GBBxkcf9bNsdo>&43YCnF}){#)X8b|T)d1{ z>fH-3y5-b64=>}EdiTc5*rncm@G^j@cVE2Ssn?GrAq-`jAgOBze3~j;@vJE-bag@yEsIJJiKRdy+^)+Z!AzC9g+HAbsZPO*Y zb=uWSHtqiI=H8kAVitbb>A9KA+k=T{5#WBctmA^PYE{Pttz)zZ0QzF{O5tv4Q1LMH~2e-v?m#S z+QU$8F~VC6?bb+tLh!e_SH@5>q5p@QWp9{yLKo}jTU}mzx8K3oP!!W4fo;@?*ZB|8 z(0(nA(kVHK&SlZ%tX#a>zs!vE>v;n8X^a!FIEs(NhyfPGaO-&lw}}!!DeFuMuj4T} zUKlj9yIe$_f$$NhzlRs-Cw|2AOm(sKWt=lbEcVI6)wBUtNadWq)a=~rQcg-2d{>UD zoah>7pImCXeUkDPNhbRwlRsj*XS!0VX%a5aQQxKYK4Sw)Rv##~;__^dz{+VF4u0~m zWu1M{SuU4oYGXM}=#Q9*Q${8XeZuJ@6FyGD+Q@{Qpis5{Om%^qx%+F-DN0oRE5JQ{D&PK{t?=g_Oh3rV~#YZ4A|$+F|%iv-3^e^JEg1D zeO=l5b9aj9Ggp54iwh|$ZmF1f%>#iw?PAkEMfcUD$>t0Ur$o3e!Ku#T*F)}jz`6wo zamHo7ed>Af4j&`Dqw#C zbGMkivp>AZObP#N|9p`-utT=p)QWB{s_X8Ku~(dLDr)l`=bJtB{r&l7<^j8sXfZIM z$-b&`a3eNd;*Hn4b2eq;jt>S4GUryg1bnz}D!arZa@kp*Hj~4L?W#{>!f}TE;-}5@ zF&{+RkAjXC91;g_(XnTa5ZPaR+Uys8(3USS2lE-Yz^sVY+|*&8yue(nAzOB#SrqBA z{k<2OvBw?luhlTjx>j>qdbDU>IlK{5T3AaEY@PWUZe>q&7r@5rs=jX2V1%V8Q6!of zHMv!20d}{W7SxIr@d5s^xZ(?#H?jAgYvM5Xne)t);&`W2bY<8b&NEd^MeFVkv}9E(59iin#wxOjiH@^QbR3Ll)08VxVjrb zEzI{CmL$-vmhI2ZGxKR;-}$CbmJI;ryi%n&!``FT$`x_yRU9Sm!a6-Dh`NZF;*d^%1{FBQivsaEa+{KGR2R#KiIHOU$(9 z*DiJ?+>ieomzarmadSpW-8&a z_NB|ruEq6#!F>K-`JK~YFS*=|C;YI>75*x(F}=o?-FZH|_t>hl4Xg>neC3vNg%cS0 z;?M1mFK1>&_T|gX^cq_n{Q;Y=$)PO7UtR1)(T=GS~ahj!(&Jq(}DK)i=k}F+r z{E?~Df0@YdR?@9@;lueZb(}~L-~2=B((*~&wR+__TCtAf(zHU=N@E9;U%DLo$uh)@ zjYeQ|C?8$3Kw&o^{~)H0sNRX-K3v;K;Q0m5hNbIF(dE?Q!PH&#tm@(%2Tv;!;`?l$ z{|tr#Gqz}TBF3Gc12)NEiJGI}hvcIc;0zsS=TPRLZ6HCkl1|4G1i~EymNePkilfBq zj&8^>4&g;E7jxbt8<)Wp*(~9_BqNa2Pfu74qf$SkfUy;XBG*ivkl9Q#fr0&wHB%Q2 zN08pfW!tf#D*e~%H&}NR(*`%$*=x+~gTxJn|{Dnt5?c;lz>a;*xTUDAL|LsBV4i_;9>QU6^!q50lU{BxM^h9T;j`LH;MXBRb z@95$T#A{s0H}PkZfZfu7tG+W_dS6m}8h4$KTZFtTYIGrpg+NUi(PHd^%P>`x_@iP-w3-~(iCRz^!gOTO}Wm8ch#Hn*}v12FOF==4ZbNo4Jh`+1H(wr2&P}cpt_d*I(0mkI-XA* zzxR&ew!M@D)Z6x74W*9;)8BktI*4l%Fx75N@<>JTwZt7Pf)xT0Wnx(2cQu6fHAdXK zt%z@KE8^RuBJ5TBn&SJDIY_m`#iw)Qd!usrR;97u-%4y6_ah&-$VT(cl-k3OcgBt- zyW{cB1)t)0S4nS9d>+qPc*?u8imiFFbHQKntankX@%>J|P9;1S-!J6rmTwilhvn;$ z@0BMy7u=0+L$7?B@!cffc=>*V?`nLt4HM+ug!j{moFv~*@V$(0Rfl{V@jWYFmwXT6 z`w^biW8~X_@7wZ?mG2IGUz2Z~eCzRjQNBL;*5SJX-`a`tt;MJQt*uR#cMaYb@osVz zuEzJ2e6GTC@jWV^t8f**`{Z*Kz5CFne6GUZ;9D)9t8f!OJgYXl`fdj3 z;;*9lJ0KBj?H>3kQ$6^!1*V5v1`D-f#%rJMwAU^$%iEv2sYAwrxKbrY!A{)Il4LOI~Ik-yWVgXcaql(t5W z#@6^sT#33mipZ~?8Tf}2@c=0rInk~@fV*=S+|%Lbz$>$D>;&!y->ZvW4tsk?#9jrfVCK&g*M_ zFe({3xOSKSKbq`G2bzVuJFIYQGW8?QIWVKak*z^^DD1r5gZZ&Ma+$L<6L@En{lkG~ z``p@%#1-tcgUn8~hc~9AVPhj{z*7gy1&=04UTIA7Ok)yw4wB z=vk95Wx21LJq%VATus&dg77?^44E1A zR+|>IcxSm5C2Ru^VnQW0o|ZlG=Ai1ys$* zB2|bP6Q?ghD4GenjcV!0ew?}BoGZTal{H^`;_B;ar=7K+@4QC;g2w7*uQOu{NJav@ zS!54gXMP*@+ui@wY{%z=|7yP79y+f3&?0Rx@zDczk1v_co&E073s#PW#p3UdFqK-) z&bQwG-`|?eud=NIhoPjjd91`s~ZtH2P(|~d8hgoCdo<*{lh1kLnlyfWH8MU-5 zn#k!u`~I8F#5ohGnqI-@%M3OHRdy!P`pq4`3M*)(FpZ95vK;GiblID3M%7ZCX)r#1 zEV9h_-3+Iq%U!#fWqdH6Fjz%faB|t5DCCe0PzF@<2W2!3py{(mycB3~9u4!67@9UK6(M&5yZ6lErWL1w7Qke)+RYk6c^9V)m#FFxb9kSTR*dZhgVj_Cw@@gB~ zNWj3vWg(NPRhnHLY|XaD8T566j?57>Q;Uh&AXBd&pSqZg=yZiwL$)b-J0m`}zKgSh^< zNUok zPd>?A4gBy1et2b-9F^!Wy1=ebyqjsl6%-luf^cc5K^q;fDf380tynIDo%}F*-tIlp9<#rk0Xhr?hjs*;E{!J~niDW|0s{Ontb7Qqn zTIxz~d2D%18ZpyF^tgyI36k8(ygvyL7aa0%beSvItr(f4XokQoDfvnv zB?83Kqi^ybdgCkYqX|N;TugN+0ORJ)D8+6wNcotz{9&-LAg9d6-Jz4*IMz3jY4oJ(nqa@|1L)SwnRR}nOe`)sVxCxdd)FN1(QXXIKg4Rq~ z)Q2=TSn1g+Fj1;+4Va>zTZ5%^!@w}$$Mr}|*)_lu_zwfr7XVkxEXOXZUk`OzXmEJM z;J)6#6pvSF_lLWE+E(e2l||%SSpTXna|*YXv&AFE(aI1Ku=L68G%Io4o7 z$#Eo%rUzkK3=6Ph4^6rIEn4jQ#TROOdBkGd;nvh1#T>1F-kV1ICAY?QIg2p{pfGi# ze~w7w{leQka^V$i^9ygzAu!jyMl8Jfbm3(Q)fO+-vC6z4fYb)(3W1{k{bmpFA5D^5 zeW&LdsB;-5k(C-~sr&dJ;N+-;_DJ0|H&vNo$TO(Q#_r-`=gOoHd?i|a{! zL4>9>E{J(i0wKEs^lu%<;g*DeLBQCsao7R$&@=_z>Qzh zQ&vk9T_cuC#+#+mfk*EMB}-)zYQx*H0iY_1<@Rz9#zI8rON@BCT9{7+cn}?%%3LY* z$ij>m!Km?W6c1hsOWcZC^o=cgoJo9OjGuQ!tr97mV3VVj_USuOR=TN|B(6_AMLVLk z#nh9S-@wh+A)YLL^|i0Z_rn=M5vvEOuOofE9~~ZzTKCn`-?0AmY5nWb`qw77jF<_| z^n1Nm4tqL0_SC0>OXBZZ%g3WMFtzax+{inkK(Am0|0(gz227B%X$(O2z9f62L{ieX93zKX?q3 zeZrzXgmlLTjGRT{MpIbus@8}h&e*-b&Ut=_fF}^id=^24xH(X+kP?s2b~Fk>Ps5nJ8a z_+b{uNv!je%i~MO`PoAe$-HW}Pk+zsQd>3}Vv6;P1snN0*Bxq9`U zfpeAh^rmz5@6L(vKp9BHNAIOMTfh+Y_CW#}&E4n(lR1M{N_rEyCd=hCMQmgrq+?fT ztUwkJVxT-;r!q7GO{HDNi`L=>fVsiaF1|pKR93jhLek_0ArW1b0CHhZ_=XwZ+N8ed z#1ZPboNfDGW`2uoXG`&CsN6pF4c^vn2g9ICn=f)o9_sCfJ_Zg0;?)=`Y^)nhqz;51o%uYf<{Y?PO`*^cd?h!hSN9~4_C8MVJF;g z4yd{IB7!?bmF5+EOu(m&2jt4l9G7ar1C4CrQxc1lFeuW4YFmaQPmba_E=4;R-P*r# zoJt{r#Df-|XW|V6u}w}Ro+4o|bHA-(Vbj*Ju(|B9urLY>Z@CX$uCNf%;dQW3PY5+7 z@NzD}g0a%;^bX&NbdSBdNU%^Cm*T9RbqBx>XPf9;QypiqrIaGA3v@{9T#ZQEB&6jD zj1*~Mgolw9b}B(yxkeyuBhEHA;B0dP&Q2MDv?!<;vr$N!_ek5EA}tKTmPniTNGl5Z z{|wS5xG2mN0_wtlv0N>S|6og4E{-!hTj-*3+yL^L_(_hyI&!AtIsU1baySU(LJ(vh zfG1)4K{+1;ZGbX3&Aff~e$(@&u}YBW(I?aoy|`D`{O*ThrBermyiR?bo%JoVU9B%s zrN6GiTqj%Kh{D`(zRdIF5wu0_J)oF%eR&2F)u1o0adgcUtJ#S{Jk9WT73R?jSFFpK zD9n*;R1-?>;i}wI-3@iQs+?LJiVepieR)kR2(p^-OkGCWbSceU@UYU{b>2ZZsOF`6 zg{p~NrqNuY9A4g|SeWnDY!xA;dCoImxk{_6g5?>J%}bWKIA2>{t*a1u#@UIMDFg*S z+?ZWjQKRAw*NP;Cdy# z=Joo;T$Z-H-Y+krjp`Q`1U-0KXyM=KR!v&n9Ae(<_p716ZT736egOcaHFYcFyQRf7 zZO;h(cogqLTryrvClut2r&Ft7nbpA_@UpVhhpb5qRRSTXvVHX-7%GQoNd^#t9%EK- zC9|K5eq{W1Mm?V%rtxz`%I;)LT-)j7(dDrct$QR&gPFw$?qAGVqn5bK38rI2^y8@J zW4z4jMcQ`M?&v9egcnxx9Q93&X zRxa!~Tz7u3S*V8zw4)J($i_ z?oDk4hZMTSTpcahI)!#FT|;tGXm5!oU2pejf|d*>cv!RBF3Gk_l5L0JlWUwdeurhN zQzlWqHVcW+8+a7*>6xkMG3qGfCWn+H9);43Tk9BNZmYyxCa9YT5^BNuLfKIj$tk{H zz^q}>%kr$j9uN=&Ax}!nkf&`3wMv!jD$D3sBGfkac_gW59Mwir!MHS#3T+5C&5i2t-8-Nb$JGYWW7Ckzm(-57}WX$uW_P_&Nc>2XkPEuWpTX;;R;w z+)O8!dDm!}fyhK=z%@!{&@*0@L}tjbuAm7>+N%ArS zieWD^fKnTIfET=LbAqm1;}SvFt?V$JM0q)v^X9#hb2+Nb;TA9F;s!6goU82tx5&Uh zof!&JgHVn(O`5!Y{1LMv%-h8q&CZjZRFK)4D9ht77kAhjHkzIqBXA~)1TVVMVA-KE zViI8H^cfai2}r=I2%zL7Tv|eBy**hv!S666tZ$4P@=^nklg7P=UxI*`k5*kJnS zda>3xnmLb+W5-~yKaim8d>S)MyMhJ|BV#XllqG^Y44U6*4gpTYiltv0Gt|ReXMXz~ z>0~WcXsR5qtK_;p!R`j#bYdvzt8|y8L#Z`J3$ zz=qG!6;55CQAZ2GXK^BTd(l1P^#0wtEfJSB*rXWQOIY9Ko@HF58LwUJv`hn@>Lfp`VADHQ3dTU_eV`lrzIT3dWPJYZ> z)xG*t9ZsrZp2xQ{k>fR7^_l)db8vXAUG_uMyJx?-8Br`^AVZ$&*iAm%Fy}~Uszyhh zG(U7ZLk3Lo`?U62o_57`VW2LNtzo26Q}xqOsWG0*&(7wa)(#C1PX zhF%%W$>U$MtJ7%@`H@-3&9EzeWMinj(euElYD2>xG-5zu9MKnv({s0fMpYo83yF)C+5T&ilNe#CaEVXw@DS6cU*!{7oFsR zd~hTHEkmGOeh*p5nnFBKSsNf@i~;A&K*2a07gEsW`+Sd?s7UF8X2avFiA_f|2LAMK_xOa55{p3%1 zc6E)t?WgA68aCpk&zZJP)ulHr#eFg3VEP&pBARO>262ZKmxt!! zuPM7i)qJ*0^vK{QJPtjzSisbo_upub@J?|vPEYn`OXl|Dl?wA(>xwxex=tayL= zuXmNmF_R0VVYRZLcDTAjT zqd2UTS<2iR#W5DU|1V5sI+x1^D-g7tpBvcuidP=kN9|?Z2P|HZ)thCf*%u!-Qvf%3 z#nDYDmnLZ@d0aSVo>6wre(x8$%oneF?%pM$i|p!^MHLviA_PRhsUr4|K*Jmg0imJW zO{k+`Bs7db!`uNx3k`KOjIkFPg7oyp+}3kt!zlW*jU0SlPIPvhvbynEMiO_`(Zn}~ zT#B<7J#MDY=L(d}wQ{&y&jMhraJdl6V9~~%3d=I!v0`!!#Kpu-DhsO8Y6OXS>0L52 zj7{n&9js_m0g{yw;wTKfc454$;&zi12I+EPPF^T8E?j2h8t{CF@W`mXJwVvF@=X*L z7eKan9g+9z$iI`l^a(S&2|$#AN7g>@g!yht-miMn>=I75k34A(PlIM`GLwqa+1@CQ zFFqNGCD~-AbufsS0D|hT*%*{A;p(70dy}cWi-k?=tp+)S-ou4v221-SQ~==jn^QQt zKUvHm?vur?==FIhH9HvsXmT|a+|(sSB(!X45q;dnuHIz2$HPie@m9*r+Z~=V4 za)p%X=`&7o8M%D9t&H)MdSjY+0>DvI**r<^t|kRRgCq{}vKnHjGU$K}-Kq`H9G*`$ zJ|i5-HSmW-X6U9OeedS16_e}CG4gyMC5=w-`QdnGRNQ3CzvOT|eLdJ&O2VkIIUyS} zQF>((;+|JZI=H$NG`qt)5i22jo-D8TK}6o3xbjOyd4>Ft2{r~wZp5^75z6gGEo)$& z-Z9s(X(05DuHE=clbyGkm)_H?^-H3o@?rL;AzyY74eq5Zc=y@gJa4AxQhn89Nkjdk#lE&o%Ro%rn~y01MfZ@ zZ6*_gY!ESf(FmHOk|3x#4BkwucMu4xR zo3IlN@vB}m^IV1Zyl9T9ZOEDeyiI&~A_>0+nF%y$^)O9%(w7%-C-uu`pR%ColydgV zN5Z2V0p;PUyi&=uLxmTiILSn+lQ=fdv}b87w?W-ktr7*V4V)C0J_;jCFsluBZw#Cf z4dp6P6Bjq_L%%oUYc)VkG09ea;FM`4W#qi6V^mq`oA(N7S2=r-_+XJIG=EOl&l0^? zC_Q-k|M#8GW4q;G>LlneBi1E@Le@w&5 z=&-@dF$Aue@P>I=R|Hsb1sOPavLT1SP67XeDzrgOg3}=^W-Z0mn!oBT5=A{Rw6oR0 zC2(h!aul63VTTZ&B`?^Z1@xtysuOu>|PGl_fPM&Fh^3>^W-ajVKcL zqeYQ)O&W^S#1JMFsR@dN+fyVsJVto9OvgsKvO-6coX$x^NwW=pA5+{eLR1MRjjEtZ zwU^BJUA1XaDX`KHYnGgOg%FaXc2u$=X^A2p%gW1zRraBm%;ae`^b9sXZcMNf9t6Dk7o?d*#b!LDu!q zZhG1D*8XWQf*fugMq2?9+c;uyfVMsFB~$vp1FWfk#$t;Hd7tCEwhgg9d;Ooy{wWL( zt~T=oq6VS}8?9V=9FceXZ1i8|O~*U>R>d?|fSv)4Rxidwzd^UTL8x`40VNh0%ro6^gi)H8#wFnj&)c z`oF<&{Jr*xKK!@amz?g=(t#}?C>7XWaa2ru!blMuCOU1PP;F;NI5wQrp7)yRuSKpi zoL?93<>p4#9RX(7x4yRs4PYvW4Cn-qn>b#)A^;#erJS%`so0Kj*xu|XOtZ@cd2z$# z;{Zsp0>sL+q&DiDts9U;?~8Vkhu7R_0DTQ8*4IZ5DE1e$rKW{U9gvI=RoW0&$tmsX zfE)Ngy@!<^gfeA(k$!-ALYE6$Ac3#5628HHw@7-Z_gNefGaRN&7?AaSmYsEnqKb2U z#a0)w$ z<^K?3f>9j0PO8c}g!K6MMkeAv2_d;u2kRkSWxja%xQN$tPm4~S1wXP01#sKc0K&(L z7`J1jq(@SNlR@J)yiM{(cHgVa#IV^O^R$`B3%*KQAhJ)9t@a{9?TuHN_p>~*u_bB= ztJa--yAHPP&!C^sB^`ygCf{Q6EhOLOtygBF6yQgtMe@6{KP5J^r+sh@+cXe`h zuN!@ss~4r>7~I`_y9w>$+eLgQ-_CMpt=xg5Lx;lnmdM`Dx1EAo__k1FE8kWMFY-l? zRxa=@P@(QU@d#=;%a>i3GH(R4C?F8>O@x|gjtCp$!YU)e3NEZXB5almn>-?H5@GByOd1i`=@L#H z5tegd6Gnv1aACrh;WqcVu<;|p+FjVV5n<8UXI7`)h|xGMpgCE}6=84qwW&;rhKuVx zyF8VI+=ZDJWB@SBmQVQ9wWeHZW7UgptM=~~1P{hnl-g{^b!Oaj)B-F+?YtQUV_)X? zW-v!bE|gqp*SNHcNz3}aWm?XV?9c8SpN0N&h|8J3ji(^1{g+i|?svze?7o+m`!6lE zRc8%9_B3l9i!HKd^4OC{0*-hOBLPb3#jdQG`+fGF97SYQhE+>=qi8D`+I177t<2}0 z{`1~A;KD^~xqC$%9#rYUr`slaQc1UWx}y0Ad|A8rdNXOymiXhcv%Wn3eTWj?QRr40 zbH}%Wf$alSCG5N-dOJ)7?dy#!x7g>eH)H3pC?Bk?A+F7lYuy{ng~UWIv1Q7&`VHoS z^&=Nkk@=m8H{GAKP@LYjTL?3vTwX!Q^3-%teY1|qKM0$_JGz6gEV ztU%5^S;1Xwt~ZD&*s|MONnUg5*+bY`hqsd6C2w}gx9BNqw5_%V*=2MWb*5KnJtz}% zDAb}jT-e8YSe1$c>Z1*0dWF6!>t0+z-d;fl&8~p@N>cY}V3c&&mo%K_ zF1k{3!zn;Mox~f}7oOB1h*I1L)xa7(H#!P%>Mk1z0vz9nNq~x^ZlA?fM0ZhVv8|yL z5=zu9PI<>}h={@qB1HR>Yp!NQ6n|pN)U;NYwp5@} z@Sf}FDqU;S6uQ}^*3#-7)pX}%`O!5nn30cGQJFNmPSR46mbLt9)bj)O^yf^^Y}_s+ z!3ZW@i?C+Yc;jyYwl@B)>1j!`w9qWFi3t$}e;SQ(dYvCIwTz#Sx4R5D9-A1%4VNuThFpKzR{ z_lmiI*Vla(#lmR_UAy8E)B_3o9bYgz?9hhMh!w2yamz_aVR}d1tYGn40YCgRzf{Ze zDbFN}HE6T9eZg#MX@lpIQI@YoCTBm=6!q3hceCrN1za1Nm{|g!5r5GLl|B>VN5OP| zAzu5dPD+-J1NC+M-QSi<*=khENa`p_HHnc+pQlB-8T3Q2Y1vX3KSs(9sN>IEj*QEZ zA%}9gqMkCpE!m}E^!E6Vzm;)!sx4_Bs}!2~@j6#4`y_DhxJz?U&BdSpRcCDCYo05W zu&Cj~_be*ZURj9xYX6xQ)5%JjFSFrxM}cnKQ;_1lbSI`~%d*~BMYn|fR+>)ShQfdj zDhK5N+Z!ZD2OR(M)vx{OR2L@uHut0SQ9nygy;Bw^8x%huh7lK8;qb@TF4DA8I~b$7Zri~*fg*6 zy|b!u2rvY=T@-!1Wh2ZoS5DBGmcC)vN6~s^Vgz<^_G4YTWtnJho^%xTn7t(vjR_C5 z4`ib9hff@co$(oGr2$nJk401qFdvy1%_7(*X3?oF?s(MgTZp8CeWdHIHZA2P7Ac8Q zZjz2%1fyoweuX$pCje2`NN{Oz%F{;WNw%S;- zcW0x2sk!3vzBnmRDK77dQ$=8&YX_>%0otTS46^@9n0C|=#+%jKq|d;HwSZho*K~rL zkRW#HqeV89J%*YDLxt05W*F;&0ewFYmW{Kw=As>rUjJN)b+}jPNofiCB1z4U*Ee7( zZjYrmJ1o5?#ZrZXrG(N7Z7P-|GjLwZz0Dniw03?znh;L6@5@Jf9$0TU7y(#x30Epw zZ9$a|6yipVkRQ7YPzQtx(CHe--%HcPklA14qiNA50GervjtjqF2b!V@HLR>oS4#m$#y(#{wsq_=VZzEcIVyVBxzC$o4%QY zZS5JX2y7wuZBy)PLwsu!-_BQJUn&Ns;$JHErDC8CHnZf`#lIYW;m`;%uxIOXpq=|G zGrn_6kjVJE!VkPCz#ZRPtNjx2-tw$@ zbLb_ec5#@Jv&Cy7XWRRpHOI~8h;1A5`A1}ABPtXBP!3&&d`ylG94eD_KNEjnjxHRJ z$|1>PGphXMElyemG0vs)3t3Y-JPV%sJ}x$f6jcx*iSS^dxnec?ak4y z(^8trMUs|k4yu{m8r5toM!nP6mGY|^X|bcBWvCz$>~}4>o$400MMbx;9aoH|_vndE zSEO6Z+_EXsdqXk$zyw!Fu3iX*YdOpLLMFGkLiTKlW=`iV&gN|{Ny97Bxh>HS2Wv$t z#F$_GpDs!EwU%g1q%~-4Yc!EHXxG+gYIwVScWd;qxr?>jaCC1f%O0N+^pQ_XMH>ML zJlzV;^20`&mLK*3{PI(5i>7M%8QQrm+BIYlj&G0N7k<@#xfJykzUrO_kAs8kC3x-M z+M|CDZy)+jDOwX^n(hOg(cbMaGMU&jTkXZt`|ZDVMw2EVmhd(30NO6l83&YIrTum4 zDJpJnZ|RKs!ozI7D;nH)b`=)SGjTE@4SUu9^XmJGXYET*GUh$Ul5)FChfgLO++ zv~T!M`(ju0j>IIMfm4LfS91b8rz7gI%etdVc-YXT-O;UKxW7H1Cwf=yjzY?@G00B(fuv8aH)9BsjOmV7940y>fT)vo13j4f3 zFuhpJVNmstB|C9!^vMu@cx?3btmEA6dwQes(-*)Icfq@9L|L{m#rmk0<8GGYOu3sC z53LKv<*)9IjvPBvDKls?`JgtFWYZ0YWt+xDb9a0YXm*y4*I1Xk0R0%~ia^Js5v;Oe zK=GF9Ub}o;wB57?suQrQ3$A+Le27L(O{w#=_l=9bl3ze=+0p|0vGLJ%OW&sB44_;+ zjq_2u3Q}EJk0ZI_6hIVj%9p0W2zf4ti=c2jG(TPw>3CjH97_Y0QNd!-#hxdS+x$Yw zminT9Db-nO$2gW&+Kc<5ueQ}g#l3yZ9zG%32un3(V)XX#i}vFaqlwKa*H*gMuALZ7 zH8&c&)1+wH#57!rYZx_Mh7&1~;9fe=Hcg7&a^&Al!juDJwV}izXn5PmGbWj0S5W#{ zSXvjxx5I6o5q1Q@_+oM0=^Y!830E~0SK22hM}wVV5Sif8gQxO;5T8*f-V)lQj*f0e zpFZZ8Xk}Qm7akMsKfa~d5t`5hCg2kUCJb@Lx3&~NY1hxrbldO)(LhIQv6;A#KmHBk zAGg}mJ`hdmXe%};On*Uqd0X)ad-}U_z4qY`Fn!u=>j$H?Vaa~wgVEO}bri8jt-R^a zmE=o%xx=1yZ1kZiom4`w{{``1J5eRM3`yG9cG-^Oq9ZvNyyUp(yHG#e$loKcMt*uU+-ws3+{TYd#!J3dh+y{O2eB^NRoU9v@Ar zjW2#ST$%AXxAl!@WP*oDlE%xw9RDJ|?`sHuJO179AH|pDu%3Pi{_*%vssjUMM~|Ld;kyLcbGJ9=RP-aCF0eGl(BKaHNBkTJyvcpCSm zXtG`NQgk!N;tzP4STof9O7vPE-tO)UUi-BF+&V_Sq0@UZ?R`97amh}2BYX7D?z7{Y zGLPVU&3%R**(Ec1Jl+@H;zGaiR`|d7bKQ`&)7E7kif;K_cIXf5GQXP;-S>Fb{_87#rhL1e!1E9w&7Uy=jNf`wB^*lFBfgoOoG;brD%U5$J$$pcHJzc zzO86a-cG5%TC@wd$Fccq#i8EWxnujIpPbWTYj4lJ8f`kSWvF&!?oTHB`-@wOPuOGL zott8>c~|b<+>4jA6u($dK)=2EUAd~gSO08$R}S-1@5)u|gYUsxdQUDtH1R#T|A?Xu zSGNomkIDhE4L@!fdhQgt?z^nje&?zjAiJV<$X=Zj$R266=iEWB)<4=hbmW~b=+kZX zz#pl{7q;0kKUR+~ZX0^$$2o!Qfj0Zh9~Ac;RD^%Tal=Dx_KZK_SpD6$p~GIv2_-(& zZjb56ljy8=JEs%J+H>0NYn^$3a9+E8qzlKYPqz(Qt?`yXg?}%gV z|7y2K%~9%awc8zcQtAiDFURHw+lL<6Ie+e6(HR>`L+?Hze`7wnA&SFAYZ2XILd)$d1gwD9K7E#8MV9Amt zq~ag@%}?dWE6|V>d2YFR(+FpHKhv{+}uQ2_k{?X}2_HksN zYmJdAK)*CBsc7VfGn&6I6`#(e2^(9MX57|ybOkpbo&lnV+iTCsPcp|IZohs`e!9cQ zQ}(pKJtu+ex;<^jxk>oOJ?-AOYl8A$_XJOO89eFaosT;HxMPkzZpBdpCkhOT>z|tm z_H6HgSw zW8C}im9eEY`LTBPdHKU#^Sk!S1P{{G$B5ORs+mWa{zzRfF)dwT@v4_g#VL&;DfH9& zQ^?2bN!e9ST9Jn88*hBMRw|B73u%mU(VNNmrZhG!esn4Zj&ZA_qMI+eFi>n&H}o^^ z7jGo&w%o|TVCdBI^V6ef^{Nj0#S8OqkN$|`Zx`lQM;p%Q7`o)5{Gf?=zia5V)mVvR z9qt%vyOfJ**~c#IDE{Zrq|5WWW;zAAZ@;+_a`x+M@)PXoYx1*PBxm|)K?+tyzS)JJ zyhZp#yW5rd*)H<2k&z$060{RK%{j#0a3$y{_dA_?V)6I`5~9B95c^^pxh{!3DUIBC zh>fpGa=wy84y2LgL+vGL999lou5|x^tBzu5ZT>c z+hKoxb$(p&TMB@4eUyOL6!4k?NpJX|Yx30tzj<9pv8|JmIy?0*e}y3a1A!qT z%WHhcG%L{kQxNB_s`)?u^7X#1JNeGA7hIE{F(HW0Tub2DL3|V6tezTq4Vs7hTkvJq zgFi|t2JfB#|5e{Jf2C;meYv){coKg;Dm z*T;v~<#+B>dH1+@k0A37w+CF8->0VVZczGnlTM_^#%6QWAa*ZnqfmUB_?0hwl~Kj%R6-Xanw#B<_cCe<*SP z1oyFt`x)H&oAWli_x1U?u4659LLJcGgv0E4*XO63+uvqyxgP9S2QT0^fzIo%bcAhP zn}74i75vZLJ06D`2YQ# zTh))z$ToTGXAPRJy7%03&pr3tbIv{YQSbTt^xZ*ec-i`q zA|Xw~^!j@5jo0jOc+st&p2D0i~;zQYjn?YcwDXhU%4iePm=LjD||#@bGXc3d&?eQE57unu?*nLeXGo z;J@sZrRq%Oj7qIsYF5jo(MnWnR%sZ2)=g&jl+I2!jfKrxqa0L+OO-HcjRv)9sY}b{b!?k^~_p$I10iihC%qG;5p&d!KcFTnqYT$ zZSc}4d~$GG7(ONVSUCLpC=8OY{#)T4(JP`ihxdg`m+w!mz2;3JKk2pCyivc;eQWsK zd&7Ie-w)ps{$6-j_=fOz!~Y%qujm`m-$lO@{w@FhCi;5xwdkwSUq^oxeIUp7oaK_oBO_ zH%D)Z-Wc5#y&?MD=sV#*hW{)4yYL&~UxmAmhsVPghr9XzgW;#c&xcMXwT0}5l_y5!h3tt# zySJ1VTq#L!*cAmXic%K=3q%|w4+l>&1f`=%xRCwc(ADYvU!Umgipow%KEiVx0K6-z zIf`2Od7gPHCm;Fy3H>{(6zmUO>E4@>e;TON4PI6n#m0NqW>+A7IUiMIHGBJ++OsBomjm$^u!4BJ9(}rVaJ_yASt)z z4XRzQyPaxEJ&Be(iNNa%Jhry1b0hAoUD5iwD__wdqcR6FT76&k9x;dC$#_IhCF_?;r+vQB9=efE`$9LGgv;$+ z{6x#`-EJZ|7Iu=+rS^vWv9Z+No zw2zWwZql892#`qxOK)%kJEy6){0tkEV{B8!hsY*%Mzq?w1c4n0YovHm>(rBqP){b6qcnRm8C!JgmfhGAd|8*wNpr4C%ANK) zvRaEx^ciGDojM7d+qHh`X=nN9o*+UZHrIJ6rHe4ImPBxap3(oTckI`{^Vd~IOIYMm z-3>P@ZdfY8`P2-0+-++Z7-g zW^|_F#lNE0>qW2Ei(bEWm0mBY*Pqs|_xE}OCRwM~T_Xw8)Al-@fW$7;;m_lwV=8LZ zxnaK_j_Lj z160#L(xrd?4MY94VYekkL-MhH*JEo)dg@?@q8WP3)bQlhO_QPf!Yi6(H{oy`8Zlzi zi7UI%2=XJ4A_T+LW$7zQDPL)zl_We0%qpq^jn!pM%7B(0;Gep?lI*>*8RW{M>Xilh z&MS+t0bRjct}6u}L z(9UR%vmm0>iD#sHw>8U+p}HgzWisPgQkM><@Ivfcd$qwuYNyzNwA)CD$9SR2ip+`9 z!sX1MDxLG65DmugffPheg>lE!Gjk4@!msHlBhq2-x#%fX} zTXB=@IwomKujP2Hn>E{B$=d(y?)cQ>!{KyjbVD!^PDB%>a-}jyns&MbZBlVJ~w%oL2*%@8fm zw!GxF<`9vGNLAWEwi-wakh7DLRZ)&BNriWDaVb7KnORmV;rP^iP{!YAjQ7(`J#|Ngl))f0EB5X^;WJ zb|sZ)^R&>$@so$xaB?c#7}Pe}V+jt3*b!VU@jr2&=LGLh zviJ9NSwYeh`#^jfn<}}#FIn%&sU`RIfh6@*Y^<07h&6N$WY8DwI*bvM)DsKsrk?3% z*Stou!jNpD6>v%bG^l19vu<1wa~hsGo(tkf!}EhD9JDe+8^6qiFbxpoq;!DM0Y}Be zO0w9^4U)!U(l{V5vM>LNzWkkw$xiai{rOXU`R@x4&m}|4OCC3sSNbXs<!Sl2(`abZNb-`cO z1%KJysa3fe`d4+~U)6=r(^f-&TNnJcE_j}{8ur)Z;Atg!O&2~->~xGZV{?b*P}S;n z`Y3q_ZlcpsQ^~Q1Fk7h74wfxX#&$Wt>d8Z}T40znoP|d6Oiv zlmsbe0f?Rf(4a6Iu$-JcIi8&Sqj6}!4ocexYFVz|^d92m#tf+S;O^pMlzC}YN zd4G`;9hDQ)IAE>~Wg{zq<6$UDNYD?%McGr88eT*Y%0&s&=+>mePtFP{{DKo=V3!k7uR8gGaKdCJDhM1ZI5A|UR^f!ujTM}Tk^xQ(rB=#VfnW`C zVo2>O6%|zrPE@VPDx44nDsdW4sGMc@b0Q67FBnb;i~5IO?0vi0XyHC!34Dgsu1_Ar zk;j|96h(_^LsR=|~)!rzVdeUt) zmzqfyE*ajpuno7HR3M2^xv6bf!Mvb?TfX2}UT`e;#SL_0_DfsZDaLJp93}!Qy!nQz zM#J{Jd0c;~bno#uRLhiLAje=Ds-@{R${Ki>W*3H{21Af&kDE@SC(-4T7=xx%U^0Tu z(D*^R^Az6|5B;joXShS|Loc^CL@0mKgrTCB?5*vYv?o!_W*(D71&=6Eg8~&knn0z9 z>HfzmQBfgLrPE3jKJp5I(!}ia0+li)C3iK68t4v_D0->r4q{(jiBd40X`L67PCS)& z0=z^;r3dPX=d+8#vCn^pO3w^Jm`V3 z=g6`-ujZS@$QxTR^5#Xyq?|VEcpk#o|b06&E$uKse8l8k0l$B3@ltVKi(LfOG|`S(j_DF z*s&Lgvb-=OHuDs$UnXD3Ug<|E1JggrVF6kGLgYipaH15#XpHuIKJoPa((Y2tP4B<+ znEiJnt9B;xV3vian@y2wl8XC*=Fu3TaT0tf+@6~gE{w8V%d{VRq-cj?G{7t9!5`^o zsn1DIT)$qH#RtX&V?ZRb7hb&PJOq~TheR6haz*!>!W_#Lrm0*kc6Q_Rrc^y;k&bV^ zy4g7|2(VIAKnnhEo-&Pv!BT1pRU~b``S|{0KfH$;6S4Y~K-*e~{Ui(auG{vcY4X(T8M$&~bF%4nz`U^i5(FOi`%@9iqB zM3^Q|#IsV0te~Jk7RpobW${)A!J6HKUIoM5v|a`DWPvW~p&RQ$rg^nf-IN}_HQlrx zzKI^bQV-wSE@X~wLpPy^Znm4&LpMkJ5zG~mx{8Ft(>@7B1RqI4bJ5HNwI`uy9*c73 zD*fa{Xa31Pw6T^>V_9uEp6tdo7=6Fq?6f!9#J87>T2pe9WEL#C(2Ptak40(rb?v!$@=&~X z4)7lq;A!`fkVhB3?W{x({zbo0P+2@RlKcrO=P`a%&;!4@3tl`mlKctqe(b4{^Rg~{ z@zhB2r`6EEstaB`HIn>k1$x7NTNk`|Y9#qnCtZd5*L2~Fr$&-L5#8{dAsUaP;YTt< zZz*}`f2=X%XvzT@L{ps?gwo~M6`WqZNEw(rtEFVuomNBe@#Besoo8Kh=pg(a28WbGnvxInjPWk40thD(JXUp*&2bNVoHgZ zNG#!A*F39K+yBBBW5sHu@rJ-Y{O}t23-}+CGRJ$6?!DPp&Yd`O)Lfw4EamlBJderl zSV2gZT(@a-LaTWWLdTNN{YiM+byL~3*R_1=W=s9Tiqv^aec(^R>{oZ6=UoE7K4?UV z#CR`u-)RDgyFeaO<{^pty(?(7bBmwbdwkOYdoM>E=aAH%#nX`UX#)n|bdERpgmv%(yv0}99L`(( z!79APAFRMze8YE&#qUGs4gMfHZ}8JWeBR<4zEdoIA3ksK2l07}KZuTTmmB=A^juR7 zG6Lz|C8hnaRjTseZt)pq{UT)6-$znUd>ZQ?QH|evW}f5_D;lLEDdXsy-)l)9;+Zo{ zPA6h`2ss!6!hner6Sw-k@%~)k=)G^{AU346oro2{p~a)-J29O@VB~i;aV^ik*(EAB z;`T{cC5zctE|^Xwb~kvH0LSExBX;Tvk11J8B<0w#2Fv@(h@d&o7*objo~}jdJiSUf zqOXv4<*10k@kt)k{s8L&ODQcUGmBWBNw)`*J(Lw+;y+SB<`aiO)>!mOC7-0_fSpRp z?z?bu0r#tbT_b{K449yq2cA$Gl?wymIG;GBL};|CXsAz}wN%3l-}3TvmUut$TIxIZ zqA6A{z0fRsuqIeH2yY4d+oU)n zQANLw-_i~a25Aw3X|u8*S!1!A2ICF;APlZoLpGup6~#Fr#bTn3!c18Bs24r501(1v z_Gubg+_X0!4H*y{r>rCqae9;@SeLyt8T0bk%gFXL5^Rqzl0E0*jVT07?qUO>nH(Bw zp(I%(V}?0LBki_&dAP9EXgRIm_?;ADifbEhYzhiDh)8HZ3K5AZCG|7N0$I}vOVC>i z7pJ}b7eA6z*glO4?Ww!9DYA+G2kj}vnb~QL9+p$^ z@YwE%NL%uQU)~i2NMDU5DQWT+Uh4fg6(y`a$))Gf|LSi!r|c|Rj2kvnlLJOPp`q0_aEqmXWV>_{I2&PH7w zQ%}<9u*r}8H5byz+_GsjGIiu5>;SfB@5EYL#@$3iuv zWrnR#7#2b6stF(Rk>_qwe^gt3G=Q{n(ySF~B752y3`X36VWvU+)CdNeZfJqN+0_k= z6}rLV-85uCohZ=V?5c*xRAfd)(ynfx%)m;B?R{brXVqX0%cU_8Dr>I@F%=C zq21{5Wa99%>fUO~*z{SKjdI3p`&Z$wHszAH9Y4cy-EXV`DEGq@bHE1SH^~64E$q(< zCu-$7DvKMtqJ0>NwOvzW`=a_*!dETw1S`_#r8b|^zk0rEnS)lQ>!xa7m9GYOA>W3J z_hhDs&92y%tbF;)({^rfH1#|Aj_PX3v;H;tKB47Gn-X_Ab@@7FJc&bf>bumGS*7VS(*%6p5!%{rOLSFsb1Gv zsw`ZAH|)bJGq(b*Y~3kn(?AyQRJ<~K1>UF+uWa86yuZ^+>LXW1@Km(2gaz6XJ0i40 z%Gx1&=rg)(kWtK&`tZs!=Ba&bc(Xc;J~erzQ<$&Y7Rq+tQs!S+I0LB|v2B@dW3uyz zOJTdt)iI|a+(F+U4s6{^?)z|9h=N3=h#_}-&v&#rBpMPvLb@j~pTx#U5oIo%5P+-| zzMwi2pT4;xWqkFDn>(W7J_5WaFmGiAKJSqX;xo5J`0!GD=+raR(nDvS%K*Bc+7o#1 zWDuXZFosXPRJ6{!Dfoy5dESd5!MegX?ag`9vcEd;dKoRP^7lM+rpnk>pV0Ht8GLwX z8h#obh0ESZKAorFNSosL zZ#nlssK3RmWd-Na&AW1H@Cji>FX z)=Cn)YA~h}V*!c#yTuFska%@BaqYD>m(moWU@PuN-^(Dw*%Q*2H_$UhpJm&wTDQQ4 zdf$Fq;kLzNOOn@|CwZ-6sbWx`>NSw1id~j!zOzN2EnR%?Lz}(rs;Sg6)DfqmQLhwe z6oy9o8??H&4~+;`&*n*e)T#eZMJs72(3Un>5Y^+A_zWV+u0K3=iPb3)%kv5{?#?x; zA0ZQNZ9b)|tf`y@}Ml2`Dvln~;`1N&Bu@zbZSv|V{nf56b29CH3s{nl?)z0o4x;uYu6ej#?65e**`on?{DL#&+FqRYnz(9 z_BJYed*qJ|Oxw!3MZ&rZ=BFMTs3-6CW{F6!RH2!;;sAlNQmv?4UeK3UDT)!PP=xIr zIg&>AsZu-v!BRQ9)RO<+1uC8@MH)cz8z=K)1Cw)rzt_N1g;V{bx;}pb-k%$ov~vIk z|HobQ#Zx88pA5Z@4fKJ3s0&^^Rg(OvAA8Cv21Ea`E`0G+N%E)F(0{TEUOZKj{HY&( zf&DXG@ZzbG*i#w?tD*n1E`0G+N%E)s*uW&m2GC$SG%%UG9dOw}h8p1}bia8cNa@_+osLdBb{!{w5Wpt#-bv^STlj>*u!T<>3|siLm0=5?T7)eW3Gyl3xP^^ppJoP8 zv64PVY-QNOLz;>8Q5Bys7`E_fgJBCx%YJZebGO139-=Q=;S;1aELzh?RS~Vo_C1+{ zO?j8o_14jJqZv$k*t(P6@{W+V!|c+^UDFjDUdXLnDUS`QdeY3y`Lr$tBzwIK=+pXm zL%LZyfp?=sIUX~0D{y<=JlHyLc-^ez?A)i!?JJl=jv2ZYNW3CG1&NtD1I=Fcl)1C| zkch=_q1RU+_PW`s{Nz)nZQ`2C1(|oDhZXwa4DFajf~rY?OR7MAe>CWiEgA&wHM{VL z#(3cN2>$L{;8KlWB;m5|OG&HvKUBm&TqbzGa$e33&6kDAYu{_zWEf6Et4+{H`d7+` z^3^Y8t*YYB%n!>ale%a85DQipX&z3>$`zx5EyKmR)6{0XY`W7id{$Txz+IeP2j{@j z(Lh;S)?&+JQMBpK(7r}1dfXT7o0|_5wH?v;jz!V2Sk+E*IYyJSlpe(`9z}Pmp8eYH zO(}tO_VWNRwktyLm}Kar{U&$Lf#xt>L=^do<}kcwon2DMQUzLwKqp~!Ak#R{!LaA#VGBpqfkkTzO{HN)%CapFkznJ3jn zsADmCZ5%H2mFNUWk%opTl2u)i%%CfhbqLg`$SK?D$>0)-9N0RT;DQlUg@5Wl&Z{=7 zjyR7yBRlpJ({s%MCU8(9FU=}s_V%BcW~n!XFDy0@rm@=I+g_|f= zqh_d&njue(PB9`PkTVVM*b#4iG%Nb*B+y!;zDr;B@Q+XbjGeIUqfhSx^zlx=vc_uE zi!zpVtqaG*JPt1QQ_BJTF17D;Ke;w6ZEuggbI(%`gryDbv24#%UG|2bic|Kvv-9_e zWQ7q`Bk0oMFDu0dJg+N#t*aERUEgbyGn;q$=-x#?x*LQzN6)M@Ffi z3=PSDJA+o^4_6zA66Bl3(d-#d+mIdm*{6GIqCRS(|2xzWYLfmHoLb3YUbRM{mu}uD8mf*0P1adfgJbHa&mtOSay#YG~u4?#-H1| z2?__Wj%yRiL&4&`Z2uxB`@qj_eZt=T^S4}Prz@4Fs8F{7+T-cSl%7&z`?;e+yWwp25P&F6@l$UAY(n_s;;LV~QGY&Fq(ce(oo+t1ud<913)mQqCVm1NZCHTKA;ea$aO+a( znFzo3>a^CeA81=n+_*GH_vB|zq&lr#JBm{O+Yp76b#7}PGU`f&>r4Tr_ zxaLPfmF!RJn`C-^Rl59AmsPU8|9P4~A0!W*$}fZPSRS2U0yg^KlJHfH1)ew^?KJTs zPCqLC!WA9KY$m@3FwrU~^|t^(X~E4NSf1a{JnLClM_Yx6j$1szZ9Rd^^~Dxs5r}0O2UIFxAmooa}hUI z#I0XgNCMZIivv=~U5L-Kl=J4|vg4LL4yx>sk=UTaEbX&gi`tQn_Bm9dySTPuN48R| zE!S8^MGh8YXCk?f8Q>mQWtX=*Z_!0ZNawCGjx3Gl#-;? zZk~@)wmRu*r)?xCi%YPAxSGr!mF9}qBzJybjcpLCCKKxEeBye8)pMxDiCEjc&!g;L5 zG2*c#@;+$f__oL=8#)rtVuxA&VUP`RWgvXoDE%klVvuBQ_SH(VLWdI$f9J-N3P-=QxX*vZZ`ddQiLF)?Axb~_O z$B@KfitTc&JyEHrYFH5+=eUy(KizWA7CGm7a(K?kA;HKwm6jzmU2?44Bj?T!53mN^ za)f)?Aa8&n>A0&YXQtzv<;1FY*4N8(UM~rr4Q&28g$-0alN@UmRnsejRpaj;iO;5U zhL6POx*^^=@kOvh{gSFYO~o7j+~ti8|HBn%6MhZ&$;s%vZ$|7*OE$(okkRT+>|J~4;5JL)1}ou z)faR79S6J}Q*}QueVMAt40An~*S`!9n%C8rv{ijP+Y|b1&9hvM8aW%YzLS0M7vpr? zK<3=+!FatG891I7DC1@w30xV5%nvOy0(5&AGOq{E*<%j|$+7#fYkp|L#KG^-nKL2`?WEFm8zSlF#=G6z!T4hC{R9us3qV2w35+VL#?M}lt+c9n$lm*GuHaf( z)7dn;bi|$8iO=mI!Fgrt7bwcDo=4oy4q~?!)+)A5bvu1^Jm=Ms;Hw*5QQhO8GyN2X z@J9!R&~{0NZ;;h7t@lSk%sp+rc4VJ=@zgbR79(U3^AJ2i5ynHtE#rjt-s&Djw3u~~ zR3Xm`z@S9vB8{V~lJPqp|L$<+zcBue^+q6+e|!by3~|kHt=D}mwFT78w8nm!z_Vp+ zR$bfYV%5cSUKa_zt{JN<`@Bp&@p8Y)H-o%TZY+_4u> z%vulaMV$w1&m`dsuP?Z0N){F@USA9qzSn@hXt*_uhfZAUDzH1A{kkwtt91X_rb}xF z(ayDzbQw%w-CKG$u}UFM7M63^q`j?zAdPrcA)Jgnw26Kw9dt%b`xZ9X%-XyHnP z1Q)LCwr7jW6RGu_`A#^Nxzp@lEucF}8ize_Tkprc(t$~vi01EBg!x_Z+9bE3kV5hW z?~LKnT6t1VlENIzwlv8F)Vif+V$@Pm`&x^JcZJ>%AI* zlUSPE+4Iy*_Q+9#W_qupZvD|NX(~Ck(KoC|*kn$a(KVF4{dxaSu&7nA=>H;X3eG6( zq65AkuLEM#FJ$$0;0P;-9K1R4OeZfo9iwTrnc|KWGbV=hikTv3KQvWb>vp)aj=FP} zxru!Z+HQxg#8 znP=Iwksz*38*R$Tw6Vr}%Dj>5%r$SkSU(rGFGc%sW2Y-KZ>%yk92HO7o87v0?9O$& z+=$toK%rkIZq&tN)IQUuj%&$X(ZC?l)Ny15BT$BZ>X;UD$MZFJUBJrjF-{g4lVlHlI3{lYE9pM-EOMxj3(@UaSjsrY-HwCH>qHpG}*`0zx(X zJ*cZH^c-9@=jW8=VzMaj?zE7aYnHpS&qshvZ4OEtrI_(D6}IZ_FV)N6<)5l|GD6z4 zmQRM|j|57wr8^q_37a!By-6P0g#LSI6XoR?@K5D+Rs!-pl*k8!u=lBe#1%yS0N`qH z+I$D$J-9#>>(3zJQYe=q1DMPax83F<wWme8w#E!wpB9;>Y)^r-b$m_)U}3x(HTXUyBKSVjB>mIVDRqWS z3;AoebPgyD+Urf-Ui=8^b^{1{ZExGEDDjp)9-YDu73npXCDWDsP%u83(bT$Iw3JrE5AcVt`$u ztj8`Z+T*QMa6@!f-JGX$J#$p39@X0@=czV{x(#}pbL;p)OG{aII+QfNdw%aWeov;j z!Diod%YWC3Y#pL`rZwefxSz@!1?bcbNFg9(rqLOVM)J&ITU4Yc%aC^N-o+GW-6XNNcbcZi5BI;xm}!2smA%kM5Ld@HJTPOMJV!2A za2F6oAm@yZyU=njaGMUs7tY0Jzy_Wd0A+SY!X{$_p|LX@kD5E_!ADEdUTh3j%oP1$ zlx!&82yCl&xE1sW{AbY({$Jo~HjlIZxp2W<=%?54LQt1kgrgHb4*uxY7iM*jSJ)25T)c(0*ugt z10-zs6I()AlLZI#;5pDA%2MxS*W9%JDHX-3w2??t{dK<0R-?Ytqtoq{(RS+&#+P`O z^Sl5g6_bE)({SQfvldcE7-qBgzi1|$$v$?|`loK9B}Asq=){Osql@2oI;xz@kU)1K zp*=oApei=_DtOMTAi-Bb%&M=7t6zM6(Hd}Os7Q>OrxapCa4zMuFq)2TVsS2L+yZ{h01xS@F6Qxqrm`4o_ z9~l7_@q@7waRGFVFZftF35xDr#kT>di$`JQA^VHt z=Uum%9M(667|n{)So4k2SQ#_KlilMw@dia}z%y)!i)alAK3c=qWrmAr4G(v`{myVA zd)`Z?ub%B66+SFwH4HCMpss{R!OW*9dYH2t7uRMFy=3ybSsAcg;1y01mvh<;vp#mD zm4S64d)AZ9a~@~x zSvn{C*3It9aVb9>)c&$^Jai;S;mGy;U_?;}7 z#>|~Ivkq2gmNdoOsKShOj5!b=iONGu1bD8;qb2TRp(O%67Frthp(SP=7Ft^8LrXwe zWT~e8Z}Nll$P!1?EV2YLMV4lFJu}+JFGv(xBEqE561Xh1G?a&yz^Tv@(J4Ypgnl~l z4!=^%g%9mXeYYp@YrD+Qh~Vor&{FRNn+ZCb1FqtD#x1+|T*SB6_&!)`A&y9k%D#TI_F>^W;T)f3ZwRA<3?K%nVI+_>YgKE@CO;kjDZBOugqqeOt%ZZq> zvPz<~q?-}=KHiW%$v`qRy3ztFc#0nE7i6M$zTTWLrrEK|{qHIBe72ibhSNP&*pRV{Lmqt`o`A*M8`NQp!Ec`FDktu9rg0miefCi_k0a-*I@vRp5VJ;Di5pVfsFLCapTM9# zV|2l0WiZ;R*?)TFrXP<95~xpnXO$%Im?z&|1;(BY*UrM-kkiCJS^8=ru zu#gPvu2+48uZw9&WP(mR+N!-i6}A%CO5ER@-SevTgvUpd2j6aEO=ywjwd}}9ZC}Q~ z-y{UGbvQ1wqORxV7&6nN_#h9RhJC5Gpm!20L%C8 zh|Razcwg7fOIL12MMcNUd=|^sQzD1m0audg!ujY3gK7LQw?45?q%z!yl*dEhfl^o@U!_8rj@qx8_}|b_ zSzQ4gZ3>r?k;BcQoRpV`ojM^ZUrwkCq6nAdtU-#jBQr&$G-NHZGB{+}FM{~Nmq>Fb zF7hEZD*oUcw(WxgEF-XI!mZg8O!8B*53lKKlj7E~cUZUTMi+a%BYzbGkGe&hfON>dD%$*&%3`AxM>@1`jR9Z#G12W zU|*B@!!P}xJd>?F6>=hSN(!k~W#btv&!+8VS34Y!rw9*wqg-jOt<4Z@^2LjCcgpjD*=g-r42 zz?>+A3>|1MD%74jKLGe17vJZSXU+t?AUUq-jun7HebH}Zsm+%8KB7hvw2GE$vajAc z@k~zx+cc|JG%*v79hB^J8sUs^Uxf;jtgLVf0&^bu3IPh;)M^!G58OJp(<-uR*nd@2 zLnfLep)lB0>#ItZ*@ zh#?Ev=yrqcr?h@&uxVJ7v||AATZqe|RUUz3ziW*SM_fiQ2~!0PRD`W_=$fF;cj4e~ zyPTZ7FKmzGBYsBNItX%5QgTsBc;Cq}T$dvM{#$vj>U_6l zJ(Tsb?t29~!^Yt_b<&awEy3<{r+0!r>F@A>abn>cx#CQ7R(6hs8UkU#o?y=L; z4KKvQY9Sz@nCDwax8h21>2rNguvJ41rzqR>>Nr(Zx$O1{lE7UBOd!wz zvU#?0@6B$*aUxHwn5tfQ2tHThYhiV+DS)vORMy%wi{&thy_Vb>_!7DeZ+0cvy;YCy zs>;2$`1g5xhqC3kq_hB-vn;LT%JfH(wr!QPvz3-D{`y3?A#1;8;;ao&-(TjORmz-e zW!`UP7FQ{A{wifIurh0YL-oA>H4~3pSl71Rnqpal6HBXmiF`c39A5J(M>CQ@PLNNS}ey+x3Ib{ zLz2q{OAggSGWK73%bN)q?g@;i`*-JW7YW<`3-Y%MUATwWbMsg0p8aR%Z`OhPx8`r> zS-~^%x1D;+-uBvspB#`z6GjQ17e+>2pWyvJE{wS#6inV_j)M(0#y83!iifVyZxGk) zH{_ecY%Ct0D>%+5<_qx5wS@v7-He;oP7W+#U--)|iY{ve+nhsZcfm1SNpt}C$l&?w z;XT_^v*TZi&XYX;9>kKS~UQGW{Y!vY^RaQ=F5liJn6M-J$7 z!y^XIUk`6GzdC$f=<5c~Uk~mz-m1hm1kN|05CnY*$^^kiTMs+Nq9-^_!8Z+_zaE~! ziUwL0{iwi44V=Fo+(vp2+~Y2pV2)%PUpHMIO~w|oi(j|l5IY75GxM213}Ki|$skSZ zw8_b@j(6IT%&EReO;`d0>1K|w2@)GK%5tZ++7n8Z-Badh_Uo^^?r}p%zHOq__j+t? zhmTs5YiH2xGCqYc@O<8A7@EoLl3|;Hs=0xixZc zBU5`Q;T^%&1q>n%m~3_dX1R@Q&7Bj|r0dR4U)-ldxUwe5;+(`lR`w6CpH>l$MGU0l zcojw1OE8d?CBHpAMG=Bj1L?_7_RZH%Du?3%gE>{@s2V;VF_=@bYE(!e!U3X(3v_bD z2XaP=9Jz@DId$czosAVa+4XlC(Yg#^phUC4HM%lqR5_F2(n&sFMqh&uISTZ^ox4*q zR`Q<^6I0Et1O;8m_mhN$e>;MCI&I!MZLo8Ijw4p?<;ln`LR#o`fK?KSq9<>2w>j7S`m2+RS$M@Q8jyRA9K|`SxED$E03+}L18JXX4UO6SG_{0IDVqf?>>fB z56WCoHR1lpT=l7T97#phqd!8`{Uc6}XCoP-?l6u(=Eu|4D{PE}yrB~P=#o<9a8~`BrD!OPZsbC` zk|trOb4&qq3&n>t>){{zzm$CB?@D0}bF^ai~| zyf8c$k`EK=kCMH-?L9PCkE3koudYoaS9`OPS=^{3ANjh!Z%bj=`+1IsxaAr0agbU+ zLr{z50H6Rs^F^-5=fp z)u|exf4ZgrMi<@tt1s3q;pD!g9@q8DM+MdGFxp2! z?YAvo$ISAtWP70JKr?`Yy+(NI+o6llhF6N71rO+_zyaag*0GR!S1Sxgef1u+2Awcl zW}jRAjoF*t@ZO7vE1}YCi)9{K0&$Ss@54-O1$cvQP--aA!Km6o_UgMXDPg^{Pv7-- z_WM8Hcz^VcFuUYfks_e=M@mcPsQ>TmO{FKa$n4@a~-@*qbjD%rw&oMwNKlal#l`vDJc~u;c0`yf(1hL%D_(@{Q436}7^BLupa}+rFTg9EttN&JM@0vC zSp#a3H+0A#ac*e1f?`z68cpiqtI6omSdqmDJ`zFX_|vcgdSQD=G*xu7=#%WHbkP5Z z62^rhW)ahUBbzXd$Ua0GLJFA@aSUm|G3vUApa z3T=fcaK|ELvc$&Fl3#%{A|Q8Hbg^&ePX9CSf1LlBiS{v)XF6%Z)!E=`-5DY_jt|_g zw_lZSdC(dF#Ic46IfVz3umvIwkrDkgV!oKH#lmQzwPl?gNdmRVUP_xyBqmvrXq{d> z>I7B#vP1;>6S7LEhJRsBm))~Oj_EBUBlUSCH05~X}d;8=L4~ntSQch zN^p?{T8?t_Qs)PYmpb+3u84z;8XG2dd?pq$ID6b-32ecOI|qP|s)wX+tBb5hsWwKn zkPkf?^3&k1c5zpaGO9ds22v-f`?k>2HC71M!P`iqJ`Glykp8RCCRMNqbu~v_Rgg8(VeGn8wL?L$#e@;2o??u`;eh0vTfs;mFfuhnAq5J>8XX`etVy8KjWC`xkViCi;*CXS z30y3H*p{3nn*(n%ee2PcVJ#lGlCR+0fb z$=nD<`PH zw%%p;-&bDSK7t@p4E5UHFCBF9F0olX0uXhHiw$}uUcz1 zhnpiKJl3_u23>#4O>6<0YzNgg=cAJ$N~$JLh%nH6^f}_;9>_IY=gRs5&vuwv>*XPz z3#9r{eOr4KL_hbKF+H(|m0>N!qaN`Z`;p+aUK%zVe3W>wqU`^B`^KNKy$5tZtk9RV z@zC@oZTpet3G^jxnz~AB0HQ&i*5O9O*Tr$T)T6&ghR z5Mmbz#?QNZw&Tc62pdgn~I19qB-3xMN%!RziY!&HMa}&j|B(dXe*oGwH>~dHitw~L3tp`#CH6qfXp%YvmP^=(Gn`4vZF_%$0SMsBWz*57s#G2sNrc z4GUsO8i|u^sbz$NnGT?C2pZ-tS#xqY9UC)>jUa95i>EYXTDXPvapg=2z+`Du7YQk!E_}%Nb zsIo_|BYWk$*B9)|Sv7&$ZeXPzJFDPDuXDt#GJJ7rNzOAlhiE&AF4VJ5*w30BYlDCd zO3<90?HVPNAtKT=fmRuYj)>&XAb3DbQ0AI*{`F&fX@ceqM{cu^x zwy1_#)l&gv6p^CcB(t5W(KtFAw;8TO7Y!57#^$9>#ZT#-WMx3+mj$!RYL(WXvkj7ooXn zWv~)He#_9$D`^*%^wrVs)zMZRItE~spm~e|d#HaF!9hP|`*psaOzT?5|(V34kMofAXlU)?{)xQ<}sV{64 zDAwgDo(T%JEYe$;?j>YUa_4)?iyI;_Y~&z!!)#qBNvgP$#{bOtpE-wP%g~r(+cl)W z6CJ_r*_7-c-hiZ+-=491cjorn7!K=@YXjoO9m_{*`v7pDH4;M?9FSW`*O{L&hEl;- z@DUh!igh>Fo~eUvgG3x1q%c&OtusH=?JAfJX6k6D;*ALu=BRjMy98cl{zm;A%iF-Q z4!8d4NqB>*HGC|Y!i%DeZnT`}zUeB+HQhJjMQ&~PjZM_;^;$xyxv92v=af^tss5_a zYr8P{WWc0>BY)VZe>|S;{oswI&GqMG_kZw=)OgLLllcYyIEsz$CB)&JX4i6)VKQz# ziLJ+5p1>Xs2{c$lgn2;g@k}+y*PhfYjG{FB6&L(b942dz3N_%bX3F*}6#kdM^sDvY z?PK)_I2SzQ71Dh;E9$o3@NN40@!MRG#n$nAe>Ue2Qz_*gd*5wx+VvLmN6_#4Pk`9= z4(0E?txiUeV?|Zhvuz)`ApGm>XFqgl__gdeK6F`nb`mP+1{8m;(Uv%Le(P-EEzuJw z_ZA>Hs+J5evlku>IMj5Dd~T(v*Pjn}ZSSliuE8OKt1>NmwmrN=ArffR1l9^|2NjtW z%gz4kL*_0hB^&$j=50T{u3p~^LbDWciMbaOL+wJNYHIuzO5Sh$eP8zU4{x2=x-L25 zvvBsiIh1|rBlDA??u%ezwV;cZG{KUkTl>*-w}))^)G!h;TTtH(Zu9| zH;!k&^sy_6AeUgB?489%6~!W(=7${@`G63eVIe&0#u8x)$U=k>S_N5QTe+Tmn+nzt zgZ{o%G(<)0^P!>&|J3uzP2Ug&%3z-;i9*&6UAFJz8|-?{wL3^OPQ@EU-;TY5+#2GCiWEi^gVT@X0QMFT0;MQC#JjpKLR`N?P!X937qXC7<6{)E8(docNV z7*l%-Vp|x&3gatpcB!w~#QDGmkCP8T=L~GHmipK`%`3MEdn%Sb!w*4sVxJ1Z%fTuo zCt(D%=A2MRiB@%d^3^_u@a!4#pfTiuf+0$WA*8AlH5YYh*Hw_fAUYo8xn@SN-^pO_D~X21N2GkE@Od;Z8L;`zNcaMkGy8OkKLfxESr z!K{}PzcWtFtwXKRZ2Xg7to#)9+?YM|$;092v&%kpQJJ1UoIUSTJIgpghqK@N)V_}OUi&9%HDGF3r*Yl zsZ%{bl(Snub3yaI4_VrhQUawkPWTihw3JXHA$!7SE+_DP%V!?X-w)e!{j-msFVL~& zB-H(bu;t!((r!#-_`1pcHM?gq$QD1ldnD{!6b1WdZq}DYKYKBF{_eAT`Fqyq^!LAh z?l6DwWAq(tJ95 z@}IM_tFxWxTXo?bjI2NZfPd4b>UX^Qb~k-n>yqqkf4)5>#J%ZxIOF_c2A-g{KVTpule3{dwybCr6_tOhl1XSJH5)NXlOE z#f@d-vqd1l=`!Ca7ejH_@j7^bSN)c`XdNva?T=(MDQ-j;q~!_-kt7PjZd)N}T ztLECcNJEY-)5B&q*%Hg@6ezX!GOVacL7VQe@w5TJ*FU)yl5k;Lv)`b!4?3WJxpPh! zAc=~mF)G&V4rn=uYRNEn8vG%~FvU`W$Mh>hMR^jo@;obup$_ zlQl|p&@ld@NV<*V?4Pb_w7OZ1qGDCaE2>#ls!8%Y<#6cem^QAP6B>!HG(asAUzv0u z5Bwvzp8dfC8^cESxd+Z_vVVI)9U-T^k&XVv)<4|7i&((?7|PU)8r}u-&$ZY8oy>nf!mlFX_vi2L$$#(5fA7wJ@8nl-ug%|2d48w^(D$});v z{r;(bS(6ai4v&e2pU?4_d?Zrr>&~dtIuFt4CZyjDSEQU=nQ(VEVLrNx;0T51qaWDX z9uJ=@9`4Zt^pW;J6h{n9p1#2G28joce@dc$KNo3H3fkyS7Nww9XVYv|$_gwo+G=gq zoeYHaqX*OyMj-1iG?vQ~bb+5zteQ0SBnk_)a(&7VOTbI4zt7}u{;RUw@WEF9YoUMGWAz6pciH>a`W^|C?MiKvV zTZb2#8iNCen|M#|gny_a9iZSOjE+)05_`6*i+>dUod4MQqxRp!+&+8D*VfIvCps-7 z=0@rYFarHRl!afPPLaR9&coVD{=~j~g;|(gcqv5Ll3{WP z0{U;nHWB!~#JN3Wz$BY$0^~TfswcB&|IPHwiKsmSe_7D(TNB1{Voi8m+O88nhpn~K z$lHG~$;4F)njb*=vd-VEoB3M~a-4?VGr5#0(h_#fLfN*84L6y#vZ`(Cc!TTPVxQXW zg`P01U{)rDJ}H-2NioI}X6G`B2x1aBhsqv^C{_57HA($oOl%8_El=p^L|y|9 zKiu!9MOn^h<%*bJQ^d@*Oc65)A^s#)Y|!3Nw2`Zz%HL7a$hwE7wQnDsb2E z>q`$T+ZuLln&c>#oFP+TMhWvTXS+hYHZnkQ!$dj3qcJH))_tECADYKJ&=*kx#(&i4#otOf5i=m6paoVAaIQG;q>WcL{ zOb4QXjp3StoI&^=ogR&yI?zauh$oLQ?)X~QuGF_z_wP*5IVJd_>y z#-?;w+mN|ve<*p-?}#F@M9dtky(ggAvI=ZQ;*NNv*{5Z2 zXD(wv=A^RZYv?=>a}>6^#Ym4o%^2hI@&TcN${G5LoJq6F4Kw?YMI4n|>gtt$s#iIm zSh2>zly2pA-k-yARDC0~a6GQ^d{s`}X@ASDa(}aZ(ek2lOI^M4z1@cMITzK<9Yejk z8%4u8X+!P)g#Yt#^M|bEsI~#V=S{aU(&KyHbP0A0FHQI7ozS{kd&+g8Z21uJKAaq{ z;~A09>g|i+?P&vV*XD2OX3fU5Gfmqa%Uafc^pdDMZNAA}+()TKuCsRPs2UkU#E=z7 z-b`tyih{1HwNVwh*3K>IqibzcY$PQ$sGo>(dT`iXdm01W9Sy67CQG3-YVz4Rc zx>Nk|!`c(H>?L=w#uRG_lib5X zczYfes)v`{!@~dOCHJrz_L6&8iuUm_2`&D45$BblE0#I?|Z?jNT0W}X2Y)kDEXIC9hCpP;koZs%6%_IxotG4 zs~6(X27`8Z$5GGuDs_heMrBb`B>B9d)?m!{BK4?GmG?~5x$mWo0io`>U|PLEblqGr zNkj*4jO_}1dXG)%^24NL&7;~k;C)><@HXGKV;SxIDE<^`yl|(8in6^<6(mf(&08Xd zZ<<)%NEy2;-^2{BO*^qtU6VkVT_!=X>QzjFc{mDM%H%2vU?u^^Sc7bFqGu8UnFPG4 zK9it3)pMILFd4~}7t7~3;a-OoCPC^;eWinbXv*g^qR?^74tg%KbyIE7A!aLs$w%7rPUW5tZfWTrPS=+??sm_#GP zZoRc?^ZAIX&F3RtLz_t`^@MUowU0O}!1 z!Ko$zCX>3VNhl_Ree)0re(F68X;B}8|E`ahgt%24RLH{zFVu+v^UAL^7g+xJwI;F} zIX+av2I#gv1EuS+@JOo(kr(>*QRJBZN2>8{eq=$8iJ=Y3GHuUAS^W0;M za3R9dIbPkQk(XgM5*d?wssIHb9&VJ$LoP?jys?J<^Lz5*FUNmYUOWi6{261oDqFA1tZEH2u+dkk7_nJda)<-`E!+*hkuAYna`icKuqNowen>| ztF~WQIWAg6Uo>;c8(Kqr!aVYGnra6FKSj0ufuEw1_-etJziSS?I8am}lhpGkjGHi9V!hyC$cv=K}iV7pu}jzERVdTu+wfG|%=W{z|Wp!EwF zl_G`SV{asi7^k4Pv?{27FbYfRX12rytt~N#pIWpHfnwBOZx>c(&wp@?4S+9w@RBh& zLS>vT19hpjIs4RuGvxg3gBS33{Z}r&;wLEgilI*H{m_@(H7rW{Fy6yw_`nMFgs7ss zIR8Q|mxk{mx}V%f9)XXb{`FF}@7uH7*_!?Ix7U}U_F(o)-=1Ih8@8P)M%WaD++Jb@gS_6JkMuzvv6L4W$0Ev&Q`7=Y6pJhC_DC@+4D!IOM(6u1e``M1?4adc`5}FH{Nme9Y0Z9$8Zt?gzDzz zLiWISF3#rud46_uItZguxiU0Vtqr$YjppcBtJNB*x3Zu8=S|@S*^U3~suvJw<9K2A z#((~?GRH{9viA3P3^je)&hP$M<)v&*7*%5S2jAUBnFqh?_#1w&S91P)n?`i@Fh}&{ z?`;ZyGh6)L8Gya|d)vAdeCT^W8K&9B?_W#$bG|PmC+zRrzweqCv^l{yUjO|#noXP8 zUw(g%jX43+CniVy3~_dfL)a)kv_G@#6Cbv1=X(M^e~5d+E#2Le?WAyAwGZZOOX-K1 zCxzg8AIw%u>4!--lccz95A_+A(huZF!Ku-Npa*u2CE6^Zm$-vOP8bbBZnMM{kY|xt zNy-*@>XqMOsVhLwBoXIr5NT|QDgKNL=8kuBC%d^*-P~!H78Ubt(Y(6Z zZuYuv;q~3z4c*+0-CWnrZFh6yZtmu8?wQ@(Ek$k`%y+ZT>Sk{%vV-m2+#TKAbGo@Z zySe9ebIM%05tBa^<$&;adfE2?*Plj&S*Hx^_07X;O02i;mZh z>qZpJmPb{&bw;)-38x(0B?{@CZ~ z*08;hy{|k~wG|n7wkqS;>fj^MfQYuT%N8ImOILUx#QiL}F%rgD$tIJ)2gS5SUl|pi zwNk-;2M*}56NrjSTp`aHLBDF2wDQ9-R)xYFTItqJ=D3br63W;2@~25oz4$aOZ?g*! z-Bzb)Bl=d7nW4x?oYC2R+v6B6u330TyzzE7Tcq)6 z4L3&GhTCs*Gex4aEdcL`*WZ3ye1?l}cbgn#))v`kIzdktuWcu|&2AHkPJnI8pDOax zEe5dOIlwjw9p3=C-EDSfQeeGnle)nQp8*8PB#^v?WM5>fifmMo4ShxCt;j|d+0a)c zwpz}3IViWP$hkHDysbNTlZPJpI)Bc(w*+4bDt+$XK50)0Ab5zO$ewsF6gKel^LDx=tzhe z|MPczqN0O43UblG5k_WYR7Mm8+=DVRZYVmSs31{MQBlK;yFlLW@6^4|(&+}?&*yy! zPv2X0Pi?18ojP^u)T#K}c|6;GRJ$agbSaJRj}y z$@&oY{){D9@lN`(ZzuX=h5Rkdkc?u{5)#|BlP%k=tj`R*OCJC%XDPb*Ji;lko~VF- zRp4ZU06=dF*pmTLMtu=91i^d2MhZEQLRK@#K_Ew=(8B`U8NSopZDR)&8S0$W1`v zT@%E40Ar9Jh64c*kYdXpB>K5#WhZV z=VoBP5%DfQ*&lNjKhC0)!;5ZFvLSSnjUL?woP&HsX*n(jJ*%FZfJV50y%iMEv;{>P zZ9x%0TTs2+7F1uh1=VA1L5xrO+QY(r+h^gpEht2`1%w8Yk0nMx6#KlPD^UwM+^>-m$n)(Xk1%hc!n8^f{b9)ZcwXBk97b@F%v zD`+a^LljQb`g{&!t(=eSyaBw)K-YKTcO; z%Y2rVikAkJsw;5v6Fvu=!qRB+P=(ZD7U9g;z8=+9JsJblgCE(2f+0)%uMN<(Y?#u$ zx;r?UslJ@qlvR4_r-||lyQAJ+Bt#lwp`ndQ21#DgrCqdI(auNb?d$}r`MW-F*9U-^ z$V3-6OM(4)3Qh%_7*QzM(v1^QS=H!#N4>B4m0;ATuj6#abg%)m@i+{lN*>c-kH>mi z%3~dp36HgiH9XcJhwzv}LgBF*;e^L3u*73!4coryUCD0rv{XOoyf~3&dWM_}tyzW+q!X{+!>Ue7vEet-E(85>0jKdR) zLdPSs*TU@fhs5abTc-Gg3*84p-(~lr$DaG=-ld0bShgN6TU>VS50?j2l0EBNh_sg z3>pZ1sI&8>k;AQCx3Y~*a_pT7efXhkZ3fNqfwNM(TO7;pB9a? z)V89p*Y#mlE%a#b#8qFHoId2%uY7^Upj*@Uv+NoFL^5b|K9*)Dmk+tsS@mTUMlJI) z!)BqYn!_>e?7XU}|2l~Me3gpaWs9$j*w(2!o=BsG&X zparbM$vcmjLrSK9<*p=94)HY5(8rm(WjM{WoQ=DMb!8N&F_n0&)+-hdvonK2F~q03^eiz0dr$?>hhY<%4IURLuSi)^W%ZC@aQ3cV^H zAFQV1UtMV`Q|x-EOj*R764Q{j#fqo*b|be2Vnte>G3m-fL=f$i-mprYXV&B}4d0?F zvj0eNx+(>K5>*Z?S-UIxR28neq(X(xPVYq`#c$8S|9b&jzIaa%>Mmf;<8yC(#d`)J zodJ=H{X<4g{%IJ0ky7c-ihf-D7g%Y~EbhS0ag7wDJVE5$!7Q%6hSUH0hWm?seSO14 zg~LK_c(`lW4G-tlK9Yi-zEal)7x8^~$W& zr>Xv;1?HrSVLSq*DU!uKxS_FkQ_sv0f6T<0PRft93=a z3yfhd{qFY+s!TDQ3%HA-LT3&~1Jws9QSj<@=%XZ`KaipdsSSg^5}aiCDGYp2PKCIq zivfp<;3-x)#=+C+XJ0p1mQX~6|Cw@}JWZ6U4>?R^P#wb3O~)->N2`b;T$1C%lG;H! z=#erUb5RuaB-f20-7u1nM=OjUK8Q0%T?kcN_0mg-Z%AI{>Kh#n1_E?W)YJ@bXSeg# z#YZUvR2sG1Zia>$>L{stsi~F1$6}Rhi{Q;FL1^O8gVmXBa0CU!a(IW|uZ3=uYz|#hCYm_{?*wq^sLpb6(kPltLevjjn zEo0TCJNRN*1jqLWm}SF?RSc>z958x$bf+R=1$zxws)( z>z@i=0lYtdD#$5rIMvBS+(uT!G-mzy~vvL$x}}b znOo>I+;EUHCHH_WzhtbJjj&-W>~xViZl2`!frnH2a!ty9JQ+%MHCGE;S&b(jU*?t+ zOcqN1Ym)Zs%Yc3P#iTnO7Y;Nq3XJZtow5|nm4-?q&e9J33 z-O6G}Qpd_{4N=xOta^f&!mM}guCGO^t8RuQ8aU z`IvCn*9SU-I!My?^^VTqZJj~PdH_c8k>-V6PkZ94I)j&W1~2XmKI}Tu9_S3--x<8S zJ=nkqv^^}30v&l__S9Z2%%0kVS9S)muWJ8_eN}t#6&<0S7HVY8-_h~$X&s@h9ibCC zLK{0mD>_1B9ig6%P-;`u0Q;3YoppYEBR(x=)a%!DR{V<2;F~*xdpm>dKDW`pi#tNk z=?FcAP@_dmr*(Whwj;E@BNTOnnwCRGlKFZ-@v=Ls+}alwZ26%prbkx@)Sq zD(98lY{4p|n?Kh@z1O`m8c*K7(yhTdu(k-v>k}*8Ax z0LMeTK%`+>-&q?Io5OA=3r34E*hyBea`iK~KWZENzra@S;&|W;9g1h4PkKA{s+l|x z6WxVyrG8BE>y^`Yv7HA8;w+rh^15gzI5VnVaH$(vvNKxTHxLwEDJ&NXxqMe|Z+E34 z7t{fYE~-I>Ql8`S8}Y&KL3OdGf;S6dhO299BN8v#fkS|~5q3V{WZ7yrjwHtX$U3Ag zm*i|daDwNM4`dGm9F-MRIU2=)E2qf-e~)y@C>udzy4WDk#Rj9|$3Ti*q1Dv9EM-|zfoUqO<-XV0ABsW)?$+RXw($XJ!;vJkot?nH( zr%tSEmDGc^ISygfu+#3Il@=|GIAM*}_4wlhcs*{90?x@ry~+M5x6!#|V2xWk$ffBB zC)7e3LUm;>*+RTqn>=rgTQ)IY=@qgjx8#a7?mV)2D9r|6A0635Yu!@odT29iWiB~~ z*u@l@w-VV}&@om`H!9m_M%h=db>k;dHl`f<(`vc1vip1+Ljr6QqH@qKiW(VM7pt8? z@`tq!uWre)>)g^lE3j3GOV+v3MOsUG+C;kO__lP3x`1J}2qL0>@d(ch!X>wo;|MuQ zh-!5$y`N9sw%(0W{pxzRXv<bPC3b2 z*1N@&^8WSi8M&)IGjP+i+wS^49lCGk~$VbGrI)R>Xk;3_c7F}RFk(JwuyKQvqZjh_7ZMlaV@fZe9)yg zj2|`!8hilej}NqeL>zl;h$`l`_4t71ka3qXo(g(uR7Wr6O+k-;%WtA+i!&LAify90 zO4CzYj>yIf$|5PuLuuv$#vtUv7}XRF)b;9B9z8Sc-}xJhOb_G%R2l#(tpUU!PjXhNQ>OQi`al_pTCiljPHYYa>W0mevGJ%*!xJw~EFJr+g1dNf9Lq%^>^ zsGwyaiJ-DD(kI6_^Q`E2t(jzjxW346ySWv6O))}_O|Cn%0g~7fs zPO3OB#*YOf>@dLNw^SRf2V#7L^z$O`?9u}cN}%=sqUC*>S_4RN87Uee-!ojfA)sF6pVJkZ)KB9C$Mm?V!nd5n<9V)9r@7B#XMCW|q$SV9&N zSqzcIC|SrfZ5dg(3dtOxc|I42Dn^s&z(`*vO&4(8uQ4I!?1&^n~BS;Ht|xb*PAd%r-+n*%6Dw@PX>F}ySqDt<)uYz}N2)$htS7?6-- zgsX84t*YO}9*{pE*t#7L#tc_X1mWo>MdsGzY*gEuM!Jou?iA!>3xiZr5IlFaa>4GD z44c`w6y}C@m`)JylQ`hk#rQwG>yebDz+74}LJcsztr%g6n4VUQ5Y`~7(uxxDi0N*{ z2#>^cwPI2RRc^%?p8-v+7-L;9m{yE%PCkWJj4?G1{N`Ix>Ir~ytr+8X(k(aJs$G6y zTq{PnA|`0X_&&*}$o%NS$P5}LGecB}Sn(a;vkox0ogqJuR}0Jg8DU}7!sY?dQ=Wx; z{C8p0!WADja#eoaJ}hL~_bwmq0{=du>?4Fp11R~h@Mz(p4-1PHF8Hu;XyLpM3xO8S z`LNJu;n0VLJPW4=-7|q#?Z~5-0W7k ztq1NH@LdV(lZuT4jO@BpDp!}J*O5OJtcQwmBgPH~hRO@95|wBCDp+owB@@gxe|oL! z(t(j>r7#X>xw9xa?*zB>L@k$)3mlYg9vP97r1NJ1h4}<4C|-2Lhv>5=5RN$?q)7q6 z*laUCa)NtOql?v_Y10a(VI^cr{({ySWkTGrs0AXDc##KkcQ+3vIDG?`B_3p{T$n4^ z0(luKek~oT7d@%=^5<33@vD;FS2ppg02RqEX9G)ybEti!KjK9 zYD(TN+Tl_5Ayz6%Q1l@x-bDy?pde|V(pmeSZ_+3Yd}-Q7N%$W391t}cEeQAY*g{S5 zxHr2P$>}sw*vSh!w9+LXInhn_v^O*P-bt)ZAG=A`PU|u?$=YIFW;d~@Ew%-sCRtlp zfv9EHq_jm{Z7rgcLa&nWlmw?)qXxmPBdF8PZ5lBJ>Kg{H%sbRwMo{lP*^RCJP9Cae zcVI*o2KbTXI+?EzNO^}+lOB{)B-RZKs@s$ApX`n}nk_*rV}ckN(e(DLeleID#rhKw z5JRBd5(Ps%@?w4k3GLFhU^Usg#cgu^Nn?xK!DIgxw{|54!VDY?Rc5hAw#yHu1LP+e zMzGz(dfgIkh~4Qck>AeLcx9+Hs?VeiS&{iEwCn8X*5Eh^psSO8vFkpSf@$Lvyc6{< zrZ@t}LP(VilmcizB0g$xu_31HLFFi$TM zGXf^PYLrXBm2NsfGk`If?gIydtfpk{S>XEcI8-MY2)YvwlAO2IojinaW<5@wuqni* zwq8m;ywy$S7@Wzgwz@^*IlEyn%B9~m{4qLFAxUAIJ9<0Xkb_*BcF?^P>%@3JHmmXH z9uDxip5Ik(%Y7MMbeez_h~;Gz`GXU-P3(&IKAOA0m%MkI8y;_i^BIO&hRFxFF;2o5 zo6mR|DQTf;h^GU!N^Qn!xQ@AGS|49buCtg*os%9p+F)jpwiOTgigI+GS)HR}4R*M} zV#=Z?Rt}kcWy1_C)jMM2{%pO4W{sVDYfDEj+IbO`V{bXA4;{TsH&BFYI?F6M`iO!MS6h`dPz@j(UuW zpk}>LA9(5YB?VCrF%65VT$m-$?q!;wJ4?`&B`9Sv#U?ykc4XPFo0-WSiK+5X2q#5P zv7g;6-8Zp??_6yR5eG3h5!Owa#XiaP4sBIgzS3h?3v|9JA8uiUBRqWq%?Laov&UA{ z$1SSVe$tBATP(I|+O0v2@)q1?r>$_T>}|JYYuq&I_Hbr(*DzaBPFv;0KBem7l?=Q% z0I@yUR#P>EAUk=)K+$n4NKRWvM&_b@M0U}BzIEJ6Tt#C>V<8_mJwQ=vj~+Bt5mJ3INCbJ*8D+gc+PKxUvQI~pi{*~_Ew zLT-z}(lfm+lxYc7c>FRlmxW^i5C9l$B#^Bv53{CGL>`$_xk`7gr(Nelot$&uU z2GEa(lF3Kh#QL^t#$DvDd;LWy`Bksrtje|^+`?u*Sm9jZHG|b7lD$uM^+jtGLqQlu z@dpZ9BNu?l$Diz;+gMY{!KZIe$1IqKh+-!V@hF+*BhKUoPB| zqlHoK3?}w(J;hCyia9D86_bab;wCB_1(vUM_}6SwKi6$;Pzq)y%&ellsm&>0tV>+@$Z%+=|8=)*l?o`eE`dPTpkwT^XQf=~~HWtRHUQO3;->dpNOB?7?6= z;`}|i9iHt|-PxM$-V}}PvxH>%VMh-#w$E}hqSh(v?}ir93yL2$SwCEh(J0n0Aeb(1 zUCFAaxwYqPSHs)be^7m;Xr0JUx8?+xP}ODw5o^b6P^x?~4CrZR7p`CW(Dfq&xX_#J z>$X8zkSl`jc*1Op6W)D@>AWjla~^#uge9;O)*xUJ$_|+Xidv9b*Zn8v-Cf)9wXMJL?RN|$mp;!OLu7$Sj`D8vk>7rvJK>PX6@M{L( zCGU*f>LWXozv%_;uaA{XYP zqy%Q@Y6%{u>A3O(7sLmy8I13E+hBEheDS{w#&^AKFlIhwh}5gE538>Ws~3gU*M`;C zgwGjD&#VD)YI^5OATjC*;!#l^qj@n%>3 zqpSYG#rrQc_`R1I{M9^w{~QnC@8<#h>)vVbzjxK&xyoB69sUlnw8_P~nkWj{YOTXm zHw3sKWw)`;nsoyjtm2GJ<8s>p=@PHKr2)5Q9jC3z{00}+#<7UUW;2!x2=uRzxfED1 zMNP3>_NeJYom3x8Q<09<2@FG&@cF(eJs`DSIC8BC6GreIdhy9MPToEr0Y2~`Ca*bhqoUNl( zqjoqk$!e#YTryKfK$?{!UJA6RZ;#z^`HNV8(ZTg4XblJOBCtJoquNk|#o z%si_YI#Xe+0m_Q>DZ{B3D@0`Saf7an+Bt{rta{ziXjVP0@XU>)@4L8hPA}Fs;CWP4 z8cVChUFBIv5^q%++oh{w30alK@MIw?AuT^>F;X zI6qX)L)9alPHxb&`N5WZFa*13=}dj4uN^K)>a8jUX%$%ksERytwN+Fx@@B%+lRL)i zt;%-5Pa1rqrrOpu+O5h_4WGo#3Uwr?`2y<9S(vA(^3*+AK2u-bgwLfFGS?|uNcP9w zTj2`ATwp?FBs&H9o=n*R`!o86%R3ESxO|R=h}qNCsy*U(uExm~EWPqRC+e-7u%b_M zN{22P@yRmcST*gav4gEdEN2UhCYf2N;B-I%4r*gOUNQja3Vgl5gOF|>m)ElkPQJkgGBgv+rU|A*@1XSi=K5!6V*D zuP%nAqG`2(97?@k6OU@rry98!Dy}VU#pSkmoaz7ym%?$k5Y51aHFXkre_YfOVlg8S zlM1m$Z7H!2!)K7mDhB1}YRFYUMMyM=y=);`+}^G);Yo)j!~XouP)u(meIw+2mGHCtmd>X0^7)ddB9>0s}ytFI9`D{T-} z(dXw5S!-7(iP$)p5Q!{ql1N}A!e9|5nH3R9ArTz{@FX%I(I4wI zjM<4Fz_3KlNkb7y7b8k3P&g5fXYSc(cw48au{~FCKJxd;@;>&%3lwc;S&-RTumx`!z@w=wA0YwQGKYWueWH(zafSg z4RMAK+_kryy~S*BgzYUCB($Rz3WTOothG~v!8a45B0e(~23TKAHJIAuZloex-73H4 z3^1quCaGBc(f?Z;eeH;^Vg5=E3~%UZq4a4g41v;|5XSQ7^q%DjiYAMo+7d5FP+ciK z*=25Bo}Ri|^wia&r{X;Hv}8Vdf{%)x5N0xZDyCQ+6g@4;=xGpRCGCwGJz))NDL^vu zMo%Mi=t*4JWSn}%OF2x_89n(4=}>y&V206CktQvA40>X(#^^~0IedT6+?1YFA1dnW zEqd~AEqW?u^pv)|Nl#F4d&|*bd3qYm=!wpojc6wxG*WuPQjBIoPlHU$Mo;pLgUpRh zF~6p)Fo&KHztj3#OJJ=ndO{mS4xXMCN}r};a!Ye!if_>q(~;<@E%Ac%g!;<(lW;gz>6^t-fQ(R5iL2SHjB&C!d)Wuf$GqifG%3E;Cr zxPwwWz%u6j>m6LfJ0$B!Umbf!*~^WbILV7Sk|m6bpBy z;X*WQ;Zhow1Taxyk6>rzgUJ^!bQ?CVV(uN%PIA33?$NB7i|^@@=xZlKF_$;(Jsn-t z$+qeh$<%JQ$lJ#jYk3R;C5?%S=IXIuEpT1Gv)YHRB68 z4dkZ99&ML!)|vH4@~+)(X^dTyqEH8wW%xld9XK{)xO%@$|J(vjIdr((y$GwkAr*AX z025Y_{BE~9yx|LFvdpt31Nl)URahbsRj61M7)QDXSQ|hLVw@Mu>}J_hbF{W_CaldA z<&;f}$VNJJ$gK{?iQKG$CCR81B;sO^Gq)uzgd$Gk+&Q`DV;qu6&0@ZW5&l$^<<1^6 zSx9hb<}U3L0dWXlT5|u(-BX^{!w@fXkY56dj&{bX0Jx)MH5c3@S z$f1yA_HW&~(NZ)q)A}mgWhoOX$#sA0p4yqN@(OoYnTpBrTTc?d!c8}RG>&yUrMIg{ zpbV)^mg|& zK&L5oyHm#6riTDmrX=a!rIW;jOi6;iL+6THN)qLdQiFW`(i%JLqBaxCOu7Mwy8BidoJLUZHC@DzK4wZ1Ovf`_#E?2H(?wv7lr8*;Z_`B(YSTqDbN88( z8JYXaRak=AEup4k!a5tzn^NC!wWLV#3>x&IxI3LU^X4;$46l>6Q zR&vaYo=PFFXJ|laR+%zQZ z$(J#wwUW#IUyo@y+F@EXaJ~i+($|935R6<`qFrgPOM|8~D+7PFx6c#FGvFSyu^DNDQzr!9CTMIY=-oZ-h_uv-{sD#Et8hwEO3BE@vIttwBxR`YAd4>f@c+GKFFbx z9u}I*qm>cSo{a%O$Br$dK6GICyqVpYZ2x8i@(@`0}L$af3 z3&Cjro$(G_|V<`bJwo@tlVAW({e!1MI=R zpNzRu)NQ?vrL9axQYM|YiS?di=oZkNrd^halh&@R*S*&WDGJkGH%8x{2R4JvEWo)` ztjY;}-O~16FL(4hojxdikC%TY)$1G>o2S>)wK>v*M-5VNiW+Gp=ykGz6w1EW%UXnc zOeuRI3-uQI!e*}z13|AdQFN=*MI|xx&Y+QY zY@f|xHbeQ2t)gebppuS7Z^;>DzS|HW-a6LnUz!~|0t6k)>~3mHxgM@d&D6(Fb9$@K zY&z%IL1fc;CVwz!+B>!rD6m~?J3}h4T&6luUHpL##68|16G-J;;gjnB_8; zb+L(H?PQ|l8E>E%L=nI4Bb9Zrt@PP-u@yXd+LI%a_AIAij_g~wHw|~CPfcvL($DRz zd@*_Cb#85lJJRbu98UaIF`Xwc!p`JpW))j&6mbP*3n5!;u=Y|YLiqK2(YCJGi5$+R zENC?mx~4;_CN(M~NTrDbL3aXfwvH~5v z*d1N*{8Jwb$ull?rzTet+s9VInVb@eN@q?~DiS=4E$-Pv3^uVV-=m0##p*xay!@?ht8)jF@k`uk$yeUz`WsWSM-1@) z&Ldw(2Vi~{*jP{fEU1+jj>>vd);DhZMD4gJ!W62 zm5(3bBu9Xi#B^;8)OMlNk2}NYc(MVSzgKa7eFJl<&bJVr4z6;n zrg>iD@F-7u&N*=6VLG@LYhfmo{_PV|P)!FPa_0TKpYLb`rvt2sdl9CG_->YkIB6N8 zUxxUO(nogL#AD!F1_0%XjNbUrXJ-+({s9;A#O-tP5N~mP#Bu+_bZ{FUZIOs|W`Wx! z>YTBf4!+>{Hg0iM;@Eqh4!+{}Heqq&#IfF*4(@P#TVin`4!I=Iv6-U5qULL}>l z=>P{bQBAGwQZJheBdAK@FmWdHqcv9hicf?Od%L%i>oDM$fi04iTuraOhO^*0w z(KO-16#j%GemXjg@CJoHMuGb zI@ThOA@T%8e$Vmo1dBU1L)IHSIdNb~xY3XH^srRpXK%}STW)WYyiMBMGTwxj9@^iN z?7z&7bZtm`VMB7@GWU!IpYXlri`t%2?whPAQK)_-uSAFQcDTK*>#? z8d_(e^=W8*XEV%Ay!4UL7+~mT`BwtbY_$_-OsWJk;%A?A9kmz}%S`^2wk79Z?*6J4 z!Spn^Bl}WIL$y{(m;QTgRJK(}PhHVwjG$q-a8=YSa~ZCLNi==id&5d}T*M(Yt^(0i zEDpZ47ej|Q5(A&DM=zR1R*0wyF?>XQWHFTqieMI?4I5d~)(_WZi#5jh^QD7@p%~X+ z4cp=vSGc=21%t2gn_w20ARFWOB?98(nqA^M1N6se0wS(?u3Qj>JH_DZBhn-11MxrSBNaBt-oX{egIw>#wU2$O#Rys4ha5uMJ(DUul3Aml{vX?3c5+*OX!mZj^ zW$Ji>sj8N0<_fp2k)|1$r=*dNlGH`u60MtI6BKHt=_#7~D6iT#FvCVS5v4uxqX!S- zgfopo>Ab79hC4Dg?uicHU0VyPm=N$;#}XiqgRvL0sw8-e+^q7v)}g@Txf>~j$N5a0 zJYL3%iN_8WBRp<&m~`;G#xb?>yq=@cdS2yl>%sFmHFzgi4c1_nQ{mHe6|Q-Y7~(UE zkEq{fWUfW1O^-$;#BwYhqOsaIN}90w{nJ4?+b2i=DFbcR=su2L^9@ol$*Wm4%dMAq(-1gjO`O3HyAATIfrFC3O@tzh*gfFstHykX*7B9(;D_w0{ z7uW)UDUSMQjmcraN7UnFhoMJDc3-*@cfB}C(V#*G5-X`M6%|mtjd{w31@vpgr$ZkH zXw9Kt*R?4)fX2RRy`}0)Q}v~(aMR@(Mn|fCLv}SKCAK`0zd|fXE_shDxbEcg_qgRl zC?@DA{QGXLqXXpJGTU)qd5=5i>=CNS2TNO>Wm#5=dv+rHjavL+QTNvR1_UG$@Xk)w zEOQhQZ0bULJ-boiYJV5n<0bjae{w6I)z7DB#SEP{6xHbwpZCBl5b6VInCsZSN!c=~ z?3elMc~7$^!e`$%C;K0g{i*0DD2%7?qzuz4Q&ed>Dj+2yiL!-rtl&?2RDUZ&=c3s7wZY!^?EYl zU*)1RECJ4c^700IjhP7 zJ1f5iyxCe86@o1Pzqr;Nn=HlNzA?lsPa7~WNSzZhqXt?yC?9kEO)j|BYAu>+Z^xop zCT7{9nI)r%PeZm4#*l7jeazgc_fmr~$gN|(Wx>q8VvY*fikZJGn3?I@7tDx4H5@wP z*@TyF{gHTU29xkEbFl@3*QPtlI$LDJx5UWge}U=OFMA6t==%`niNw-B71)bJ!lL^X z>yXfJPL7N^N^C#ECy@c%&-{KzRU*3(!0@VNK)N|`kr)CzPl<|zk=T*Dyzo6rn9XMq zqJ3xSj2MziSmwzE?WeM8TmX^}nx6^FDL&9#s7R%&#BEDqn!R@~PB(oi%@2j$(ix`d z-<~aWT3~6Gcx-HDnMRcxyQx<-KJYf5s%JM_WU4n;4DE_AvBx~#qmXL;3X_Ve-1m%kX9kq z6Y+sGf=ii{o^nCS-o39-y_ciVpzGz$gl`NqvT(zvDQ96h*u$P^4_f&6ZonA?Sq8-1L5v*enTtKf zNDuEbGiKt0F^ld4^$Q-V%V`-hYRFx5F&>eq(yHNjE7-6qcEf&B0AIi1R(;f@u~tyk zTe7EFH>FHl)~Xn!*s7S}O+0O0jNu@g3{8}JqA2_S24mPC2xDx0KS50W|AVMT6I0y2 zU=((^O~V5jc@4CaS07@28?H29p%+B|X8)-B*xql3;kpBy6wLYvY!7r$mmDMd4BE*{ zm4Yw#WxW^yV&o-U4S1>=Xs4=0#I{kDm_7`tgQy1LHlh-|5mmzmh1K#gs7e)qt1N2O z2VcJ21KPP*USZt2wOC}d&%0PY0M*3t-&w!(f+4aJ)l%jnv)Sl$HZ2~byh zKGMQx4$V0QhxSw5FoMt8AHuQ1rl@LahCI)bV5kd|us?0I+# zBe2I^sD`rTb1B-u{3lJ4p`*2aE=5PC>*pmf^{JHSA$L&NCUOP${n090Q>`{~?aIg% z6;g}XYRnmJ#;+eV$5)v*@o5&<{b*j~9gN|d0D=Sfm;qfRAl(X!ZHt&3t;M@JhjMlxKW z9BbiX85)N+Tr5=`CZmx?J2Du%mL|i6(zM}XDZx%$kii^WAOz`7XFGH(i>1Y~fGDeq zWnjV6VpPq-l=jG%%JinJ$`&_K#?8;|<6A|yVQ`Y#i_7>$E&Su7WeRbNGY?cGRF=681>s^v>rmtB z=qN+@M22wGgY5{PmKJ03L zJ;qWK?cx9rsU0|r;uoEMrBvc*6v7rDcwjXUT`@c8K~Ms1t)m>3a*20YtMViQm0+e^ zl1-i|mrBXYu6L`RjkSm@ZZR{TsZX2!sBTL#OUmuGlD_(+V>-+}mZG{9p<_I}&nbe{ zaGF0a$%EIsHBaxMl5`Yuuyht}jp)+{Zhb+*i^x8#!|T#7SwSCA)5L>$caVT@o?WX&nlq zS}SkyLq4IygjCqLE<`oUUK$qO=VsrR{OW2qnjE}=Ev9K}%z9m_FbY z*?(X$+m>TrmSZw`6-t&}A9JIBHY9pwKOC(qx@F79^i^yxv0CHXAf#JVHrNAkg#d+; zje!v16;R{50p?Yt%S-Z+tK6cevx_|)w5yZGP$#wYN!k`?OH~W}I{GLxHVTw_ZszEd zwEVElE6G`ChtBLyQCMkJS9|qBA$OLw)fCH?&YCW2uW7RHCU^L@2$@e5)|S~yTCS+a z$!tk`W;FW|_0CgocB2hV1IGQCxmMdGptBeFvIdte95WwG_(^P{bK;tqJ8{*PvANqe z?N4-0ToauW*F>Xj=CY*i%N?7WmZfu(Sh3WMkK4uQ!rHsIr3;%vvZ_r*Risea5y~_7 zcmpw0?!E^QCovbL&d$D)xSty^>KH3S1G{3KbKs6IeEun z?r+Y;ry6$Rbf%LEtt@SalxVD=IfQZs4wbxyO-46Tu`$%J!xVtDY{aE%Hv5JnpX%!5 zsTgjr5^Ea%T#)>q zqudk`Y9^1i@_Zu;XIQDX9%ZHOKgvzNP^C!PQaQZ^NMD<&${*E@f(5ECH!hyCMveDMnF8yQ7jnJItN5cDY^F zLtbQmXI{sTz%o56hh^+q*wr^h+?qT%ki71bZu2qLzr~>Po}*Z)#IOAZi`Dpk{Es}q z4;!c|8nvGf#Fr9(G0%d<7pud`FF)x(2+0=u>W~0sPwn z0Ow@@H!c8h2>?q~#J>3f;&O7r?QX&f`O^F#mw!6V;?DWMlg0H}7T*IzK3>$2E*heD zHRNUFVP*Ve0f1{WfZxtvNU}ex#cTh2UR+U&=Y2J8$mR2cBv1KFhRy{5F3tdMS^!{Q z2JpoN0DhkV+_M0{#?Rs(TOIP_`2k{Fja5StOm!%}7PteziEJuHHa!{H=+nWrEKq(o z$>vj(u~YzWxU+?;Hh{P3hO^clv%U@0IlZ2Htzp_s{Y^kiLJJ_rdi2ySxvj?+@}moW4KIdt)RGyyaU1 zac}yb@ZOicU(I`e`u;)QtLgjAyf5PYt31Q_q6Y_zfs7DWj(==%Z%*Sz<1ylXGbe5_ zac{hPph4mm;5d<2-rbqu1aa5TiCaS4jb#5H#OLXRUJKn#NFAat5Ad!I(fcDxoxUgE z_8p@5>v?aeNA4zY8v)<93f)CWS?T>A-jx+|M||-w2I6b^1@SHXT^fJV-u>Sn1E=X@ zvN~$8VZ4v8VynyIsJbYn?wUr7vN`~G7&pEE%pLsd5O+}3)T42=JcIhJLEV{Vw4wuO zWd`(`?wa(dsdFX{VR@A1Q1@i+3W(RBT<&^mmRKt$k@1I+vUe$CGl*|8l&_DkSI zWXC~df_3pl4-FVGZjO(K$jTWD#XvniLDd%2o9>0f#FqehEx!}fYBymU0zN4NemB6m z_<8_^h?D063w9qo+UG2+56AlezT|%f;#-lLjf&q-9z*fKk@>?f6)v`{tH1W zNG;RH%lMed-(M8jDS+G>ezSiE4cldss6wvn<1WF$IB5e}P&lZ454t@pP3F0>kK^%8GxD&*yf7~Lf&dMb3 z{Zd-an-_pdt|OOa$|YF<0yiAV2R;pH3h3$ufRfr*)9QX`A&5T*!m9iE1t8)(l3Tx= zR`=@*z$9PG%DHbLh_0`t4f@3b5NgmLKa)1-PYVDge@`|IHTexcSqQtHVt|2S4gh)4 zZwBIP`1u*|>p{m9n2?S5!8Za4T0n>KjlgO`|L*{siMg}jT})OSB^2aUBn{(FrO@BZ zW~=5zsJZQ1Hn$1dOK7(NEdlNBd7;1Egud4D{z{tncRHaPfGP9uHoyxMtaV zI>A%udz;Xou*~l1+fc@sK$Z0Lq%{$LaQ>c<8*=wCFUKllWof7yigtAS1;Z_Mre zUp2u$W|?<_&xJnFg!b!^$A*5W3H|A;;td;~a|Q)qLiztR!M~b;KL+&wHlcs`1fYMN zLL*`Q_6dOhrkVL`e){;d^4li#J0B04qvY}Ln&AKXc;G<)z6pJ^K|eOi|Imc~EYOAc zdPa~IRDVoIP@{9~|EUT7T?4-(1%G(n0ryA~`c|aY!jk9Sjswyw=c%pn80xr%W9g}yt` z&bE%EDArWzcmvBx6`!L`@*6D+KioOQILFcvbKM<+nx1&M#LyRx_o*N}V#T2yZqZ?5 zd4b@9RyMQaa90IS2GY{Yf97@^ZIHXcXrBj{Q9c_P3D49xw54otx0C_t;54q+eTQ0-E{w!^M=)zke z@aRhc;AmaW4(9=I9zfW@clmq}p@+yVm<1-_D#Q2Pd^y081t1j7UkNsA1b{*PLJ&m{ zVT3quEg8qkf(@eu%3vf2fIXxI0Q}Xdx~g^|2pmHw3mn=lkOiDW06hx=^mqWX7Cy8Y z4LVHL>ttcx9S(&6K;A9@Fv~QYSun8G1Y38Q#I6Y8i@#XW@V8f2)4?aOsK&0mhriu%AAd1x<1e?34)Q2+6oga8@gn|~ z<1zjg;&J|lF}B}PE}q=Is}{m!#Gk}0bud(p$XWg0~WeU;E<{{;@NX#Ngj`I@A|a6!VO zv|U%nu%oEaj90rH9mQ|!1aGi>-%<1>wjTJ^EzBP+5C(>5@mbXDJcRkaUX0@!SW zEPUakzP<`%P4KDPTSZg*DnZr)7t(}R8LNsL@(u)NRU7hZ13VP-DZGWkyt0u?8^Ato zO!I%g@?qxSPL2iZZ_JLvN}3-kug!5g zQ#SaT6S#wsT$u7FNf`-dHBgHfuH>`X^KsAN)jqz_~*AXkC zJjZ$vn>Ky_p&xscl*M9;v5UioNi^+;RG- z24&}>X619VDrc>NSTMOWK)WuQBT|w|;I8wxL`~z|lwq-1mCne{s`%DnA$&;lGBh08 z!Ze4@Y(2HiX`!_!Z8V?S+mSZVNVnc-Z#vV7+*(-+xi&$Fu)fmRoDs?tr$*`v66Ji6 zX>C%RWnCyAhaFv*B}V?6+l_PD!=%Rla~g0+tr<@0m(E(J6@>HX2wPg~&I&eE!-zA5 z=}>y>yhF*4B+#(nNbELO!jh^%iy+BFL(L-`SdOF%> z-J#nd%m8O=ewXUMGt@IUP8+OtWKmS!WFq67U#;)Z^sE=t#sW+rQm zm-K^CQ#xJ_t-F!Z_K8Mk<I`|6oP^3@f|if_47rshNf5@Rb5 zLT&ko4O;*@DnP&WTW-BOEcxWO+^WelMc~}jRWFfMNlFIGI1MESzvWiC70JrG-4P>a zjx&+qL{}q%ha^SJ<#yi9-PR{F)*Qp1)ZU49wT?Ux~PX{^@hDk;@AUtdD6 zOmUBx(+&4XD>AFp3m?npB)_}cMLYWc?GeF5xU%fYC%eDR?Uu4CWCW_!vD1*73XY0H@b8nz zRkxNpta`Mp;SNszmUh7{71?W%6^ktHs=hI-2iSqKs^eCu3-Gd*t9&;fb{PV#{mOkS zg4>z^Wz8!!Sya{ppxGRKm0howGH-ampx^WH; zsq#kcW7R$!AdkB54%N zkW-fiQ+sS{H&M72JGo6Xkr!2l4k8`=w7MG7CzY>ao*q|qr0f}nhH+;q&)IU`cVib& zgsa@XrST^{fggWl8Gp)?kOcaZkjAEhy+okcn4-(@v8Z0EzEmBCI%ESqn!+gXDkM{b ztDb9D`fj_&P4|6VHvmItGyq3q$wl|LlNM=ks#Lt)a<_s?MR)eG9ddD>rRDbJaVsF2g@)&Iz9D})S;zT zUTG*f<9o(3c7D$td*;||Jod77bLE)ZXpabNl@jvMP~mnlDJpRpDMe+~KTy`h5!%uC zLwSsylUu&$rYQdV-*f9J9>j}dsUNKyH5{{0vhF@B{@nZADU*lQLtTRgd2R})c!ZmD zr;a0M^r<%|AGy!XG-$k~Z=xdQnt^dmm>9hwuBmj_i;cxtbo0JXI%b|5XX4MwR`X725O&)@j+1xqcYSL;zhdiC;|$CjUE81|;BVDB5Fpl9KarTr4$9Hm=%N8sQk>bO%d4M)8YCiemmBoM(arP=T>z0XHX&I#CvtT;un)I{biJ4- zY3S;D!5e9NMIkxEZ&b9d6;5`1-;Ih2{?GUExp;c=neV&htHCBKJLFJ_YzRxrN~EX# z7glq#P$k@CHsR*SrD(wAZJrY83bfznB**?h9w;rxqmy_2!1a^uzx}{Xjf;cQV_*@q zi8^)9GfV;N_MemHFmgRdtKC@l)4J0u_jiXy!({bo%3h-Fs6qQf6#7%+`fzcYI6{%^i*th08QO+NcWx4x0L&anj( zYelNS=pu)lko=swIaSEjbWqSYQg-z|>_K*z9^3$k&kG1#8EX)S?D8Bk>e9^ArJ1Sg zBA(1l_AFnVobYXjn?vKXaxTnx-3jBwZ@$&wJk6m*rF;`lo#^b<19r;={L|(L$W?Dl z5#pA-RgW%9&S&H6j1ssT|nkPW#>u3800@wK;xTkQFlgoeX2G*WlX9#GePZ#av z!9Y4+IlZ{XVG0U?rBZ={Hk`ixV>jAu%1N5a@cN%0yG;$I53eWY(I-YLbum+qUT{wH zAsVHuIU2((W#?&Z?z~Ej2bUdA?&iT%I=+hW`xssMAeVDYhsNfwR7w}0a7I19ndy>1 zj)S$ELQd!eaY!anKDp^9Zev5yb*irqB*>k?pTZftl!&aVpS7V*%g}8}2oqB#^s<^! zQ%)n(ButUsHUH(RFA@v{k#%c2KU!R1b0paoG`CjXopo1iAd_0gkw=NXCEaCdkYZJk2Ly0Fl{_ zEP?;F!+$&9zU|DuB`+m8xxDeG@U#`l`+sVA{wI${nkUG$T3n?WTu1t|q&{1E%|3s~ zf96nOI%oUOVA?+4;y>@3^LbzT`8NL<$E?lN$qRpm)q5j|YzqGrJtjOMK-m)pAPh;) zQuJ-<^D8_Re`gxr;Xl9FKbXDr@fGU)O(7CI#(3rk*8~DWZ!StaxF%;FhpJDDfnM>#@OGbOU9`rB1>QwfFN?Y} z@Tp62;cDPg6W|G!LOr+yrW3exg~zco4V)(g@li9JfDaHoaH9~!>t|{cJf>!FnHa$Uv}C5Xj0f{T!~>DJ#)Hc+>O62ny_^Rw$C(KvT&!e(BTIzf1=KSBaQe4u zZ5V)rAb76ul}m1U&@F4&mEv_Mk&FJ!eK3BskQdncW`C3zq)6P2DaQPFvS`LH1*b_B zQ)1;HWeUD1qMF5&BM#0Jg98dq!3w5}Gyif~iYp4-yD5gNprRgPa7GbLHY`fQLl1@F z%>oaB0+LtJK7erh$hk_z^sy|H2V@)*bF-0R`sJyK7+mynMp`j)yCaXNIF`iGfMN!s zfoPBz9MN#JS}}thiIhW9{AzFzy<1T@yTaXSa^El9dm5{v;T!6!ArHC^pXz#R5~r=v zE4XQL7gj!0Hbp+kO<{y=pJVIS9PlvW;#a`JiNm)PjwJNv*!;`wj*qP0 z81D_Yi4)WUm4K$61Br}-Ai4g48$P@B**u>&Kj+MUn4~=pL0Vqj?RlB0K@%920aYp{ z)rZ{TVNAq1|LflM0#@79 zekxc4<6xm{??=Eg>|GlUd^@h*HLFjEFj2|g5N$XCt2i_PCP_waL$I0xZI_Mrjl83z z%U91$#(wRVG+t_JXe-`?)#@{()q&O|FWin4UZ}iJW0k4~h){oLK;o3p&B0ua`{s>P z+NA&>WACHvM3?tm$T-aJi3&W4lm-Ydox3mOZ_n-vYhZ`ziV>8LBbm9d*3tT3;(g;n z+fQT~qe?+s%iny*uMq*2s%mHMnWU;a`Qmh#XG&Y6e z?j-A~qoNUm=Dkwq2)LLmF7b9sbD*+e9Z(z#e8o$vV7bAt#29eP!83&6?4qO<{+lTU zEJIEluJ>`s3KwjK5G-*%uGx9x&B5VHK2KgK)j;>+26Q8FL(`!eY`PW80;EgDLzT8q z2n7ZB&Dq z!Q@Ymy7x`|_bs^FHRG#d{0+S$v?K7xcib|ReEgt$-Nd)r0KVARW%!uu=F@-|XT4`;C|b+eIU32~OjbU?VA?D?bH5+3+qa?2mxisdIG z^)Nk%(+AaMs8cHOfe&K&XPO?+{@{;>l7oMA>qqjlq?fXp0<{tAkd~gDZ26PhxGF!Z z>ES|4!fb^Y&Kx#dhXV&%)vS)j6Celp5Uv>Q!P`t_?1kRGrDHul@GgRs)N{tvM@`=v<~oNs{^YktHZ4i zyC?N$bzpW-9g@jM+(aoWZp$NX7~;-x1;)6j&NN?HSyp!JDld^=E*Ty|kB6C7Mm4Lh zFcl3GE{&%;xfv=M)0|jx9e-!4w>tqU1*(i38CVL02lZ)&w`engZ4*+#k|#>=B8{pZ zRyoP#8ZaPD=;U@A*duE-rjC}69IP>4b>V1ZFLfU$kw<5tx`tB86C~%W&#hEm)9VIh z0=W^L+6sV}bQp9Z${_R)LLdh%+rAHb$-omaomSpc=iON^+Xg$SB^1%)2vYtVQc}-O zjX5}{CkU8~7XMbE9>k#Bp3N!>_JQlk9Q5hp0Zs1ee(qE0uI1uhQ{M?B_i{NQlHv`a z!sNEnZjvZOeVFT*R@fItTq{Wg%14cob}um_nXTt+Hc2yqiqNg8Stm#UL;5LbXH?9| z=NFq*BohZ56ltKmM>UhgiX#f-rzpmI=R~b1>Y}UgtS7{&RWjkl)9KDxt16}BlI!x} z(t_Od=aaAH!!ge1N;s3~^>X;5wi=u)OT+l8MCO_3k~5Sk>r%KS+!Fudrti`VGS#hj zi&P3VELLiElVXn7o4@;u^s{DRGTi$A@b(?>QB~Rh@7-ycOvsl3@Qp(c88KYiUpN`U;+K13n)d`vXH$WY2*|<#514-R8?eH_6R=Z8TZ7^DFKkYl zLgM8&)Gf7Ythfr6ehvdiGwF!I2dNCp$EESID4sg?NS~xBQUM3`QgqZ9H2Q{3Dj3FA z#{R(LZQST_erS!}4@?DmaP$B#K`cj4Ltrlu2R{ixfP%J*P%Gi(ED9Io)Ex|FNREn8 z$a%8^^bH79n`h)sM^Vo_xB)>Q=NYc)RYv_ErPonHYBu^!!3dNQMrbrZ#JFS_CW&ZN zNc@rDS8EUr$E`t#FR?WU??Lt&^rA{8puz=}~{iEl> z>J*oz3y0GMZ6?;$Ni2VEBoxl%sssT6Kh_mItiS+N4=ij*!i@Q#D3%{$K_Yo>%ikI+ zcL4}t5D;OwTdKq%D?tsnPB(tUAp~K>^6M@q7QX)J58D+MlS*v&=Vr!eGrwVy8aXd^1Uu;3qv< z^iCa2Xp_LXr9RvonJl`T(JayD^R3jeaSKuh-QIh3W9_5q{&UQylA)3=G#ipdTbD{X z0)=>PWF0cC3kY)e@ZY8fA>Rvgh+o`oU;Fj{i!N{z64^PVt8C3>6d>VLT1J`FjHVj~y@pj7ZVtsy3 z^*PJ&5dyN;pW1=X?7#sl5I$smX!rXoE8cRyzqN8(?)P^px21l+({jHz#rOLu^a-%e zay(=A@;N)O!w&4S0#z@a((hM)w%>33Y`_2T)BS!MDA9eg$c{sayU+#M&AaVR{mKq3 zvjeqOAiVmNZa(<4-F)O{ySe_SyV=k(ct1*cEru4KzGn6NGXx}B9Iyk2?7&x6ApEWM zp^X;bS@D+9;<%ODGFqHaxh@Z@lGM2;G7l=K_ST19Yh^=QVpRo@Rt3hmS8^-Dpz{^*gnQ&gWC{mU`#f+1+fCBi_0 zIkXy^kK4SaTIBn1d|(t@2SfIN*ZjwH5pwa{1ao(_7|?p@78Hj_WkeXD^Z*Af5L(b% zml>EY+M<19y0|)Z=~lY|1`^C|(?vl?z8eiTUD?m$!T{~-4adv?Hn*Q{G}pXnhB&MB z(rtFj44l&Pq8Xx%YPpU1@(ht1e&Gc?GC%}>?1l6gg0Da%is1L7h?)*)0im9U*G%K^ zPRaKgE3k5~&xQmA6X;KkBa3AM^s|V%jc-mb$LH6g$O=TFMZkzq*^9$RR7Wrx_v0f5 zAWImq$pKS%zyThuon{n);cBl5uv5kl>n;P-C5tH3XRrp8`g-U(K8D)EKwRoL$W1}O zlL{%+iZZN#GOWdm@jzcU?@JM9KoR4FRwv+|Z8U1LA=9!BD6*22Adluy6XV9=b$06% z@!13#F!qwQD@H%Sv9TDe7v*^XbbljAH%|*mryrwm)J&6e~#k z)6+k=&H6x=m*dlnJ&%xeM2ottR1MosmSxDX8aQ;q!6nahv2J>c^Y8;{Ig_f6-d^Z` zp?rrNX}*{$+O`W4*3=UbTAHClt;&2=y2BU05+LyY*>8895wUU z0(|w^=uHdNnG@4Rr*Kq6@Q?HP*6PqsD$H>JbMQ7azhp1uHCl-WxK4{C1wP^hjc}U* z%Ao+|P=EqPP)`oE3zZBMo+0Z?Wts#$=dg8}7hJBqN~{!77*#ybe4u;|qo}$)#^HOZ zEnXc(7r~ha0Rcc8H-#e5gLT!kAdcgVJrC$mOoNff3tSL3@>m8&Xmf#^P$WM9%6B&k zP;bLbFVgCC=#L!cy&2-xFb-63_|7+QlTgd8vvIf}`#Ca{g7`|+P8IZ0xDXrU3pev; zhj5{A0ABmpz>z0K z-uSGEDr=(5f*c^ff+m8WU8(Y}lzE^FaW!70vaXU@V6oz|CaEk~iJ&nIKQ3#s%9<>* za7Y%HHAQ7jky&BT=(xP8DsQUH!$DeH*3~KtPH@o}6jX6p(^S?pnU&Zqt4d{6$t=i; zabHz4E8It`mU&6d@}{fLrpv74W?3^-)(n}I(kyGH%9<&&Qk!MXQdzS|T!}uMF<^M$ zN*t8J`U{7tAa*Xu_&hmf0*#D$j-<)+URjnoM0#2P*hQg(l1C=)Kswbw&hDCgdNSZf z-~u23(#?I@&_Ux&sL-MH4J-ji<_ly1;lQQXs05VHL`CqAjjLclbP!*xK&Ds#LxWwl zQZTYqZQFYK7$zm3d=S9t;-ISQNKp)>xG_R%S(UOJt3@6t`s7c$GDt z_Z)yy3QZi%F{(doIQnSVXnD8}oh8T;RcKNJrp_2ZYkA^8hL>+P2?1VIsg@H!Re>Q1 zb8B0ROdt|Nf`5tkP$a{85`{ z9VqJO*!D{B|Pg&+38`EQQ~idTR` zZ5lpmRnR^RSAuv<0*qpU@fdf7R0P&CfcIJfO8E2Vn&(?TL7tPl!N}w0WyV}=Gn_T9 zd*)$m=AMAaEU_TrRZ3L>Kzpf@$NJ%2NC*wkV!_T?ff-rUVkxSCcQl*VWl!0^Ru?2E z9vu4sSb46H+9lR?i5t#Ap%egJ-XG-~mly=E=3@j>Q*BR%H(>q|S3L*(TLWSPlGIUL zkabJw{97ZU4mCC;J|Tygr2-d4Mo*hZ!0d2Fl^t*tr|c6i%2f_rla@#2aw*s|gt^At zs3k+F$@2=1jv#N2Tb9t&RO#abe7%Zd~zOT9Mg(3RL~PF@e=$=1oWUbu%U+reg=AB?g0PN zoJ!aEe1Sz?Q4e4rkXUQ6(C|fMVXBRwSbuYZNv9*I!bXgr1Ch+MJp+7&iN|^v4bJu? zE+p8a!KM128O^^um_Yax3{}1Q$xitKNkq^j*(vr~{FwyN3CUOK|f}%Ufl7~Q`jUcODvp6Ko3z~EuEYZ#dVyN)FHBzL7Q*VVJ3NsDJ z%9N6^(ES~QI&~RW<5<+P9SFLYr)3p{MM{Rovs2CG_9SR7{L>O#S_-R#br{%dY)4)m zS3-S(hsa=k3Zo|uho;uyel?+t^T0?KVH~Nji{mjSFdZdu(vB~(@r4{aZ?mIhd-c#yT-|A2(_Um1wI)r5U=2$K%NTS4>_j9`QPyfv_A$q5 z(dwRR(q+yVfXZBEf%-w6xkF^}yi<#}k}W|O>*iS0=+%Iv$t|7+lLLxY--Tt&(t#q& zJlJ03Q_qScbu*=d$cG*Z`U0pOI|pP43WuKPYa$JjXkyeyJJ6X0f9JfeauhVTYU z|A0Jp6h-`pUb(7MQXIU0C4>WFwh%feo>1;&G(Hp6N6M7WOp%7&%90d?3S)&5)n{kK zQml&3jHN(X#;Uu-QsC2wDP3bJaBswvZm|?tw=ku6HQ40`DNAJVpT_>6D<@4PBbM7oM=iEIMI|SaH1(u;6zgZ99leTy<*K< z&|wj(DP`|EQH3o-onx4yjF9p18GW!<$=oxk`IezBbiE}*UFl;>hPqKbEkoU76W%8b zJ0O{Ob|1|iL?6xWd>_s3bRQTN$#T8=Xy~KSTWO!z`%XsFX>%7%iOyX#B|3L9B~0|Q z`yZ>w9!D(29#1UA9#<^I9$zdaI(O0L?crKwu0-?pxMQE$J=D0%9)lYsN$4WoIP?zLLm}?5fIq|8jW$Gt|q8Dir+?Dmw&H%_A-F4>$ zx};7r)P-p>x0?#d6OWz<=^-)Q^nFK;c<3gL1g+Kx?Wj3s( zxh4?>ZIjdce~5i8BcDYRdi)gj$!_%~cyT8jCkNaDk=9vEr>C<8OC*`4q3Ppyf0HTG zsj-Ew3(v7s1^o^_Q$_Wsn=S!D0@5G^C0wO&&QUwYfSOPiHqH}$SA=r$t6j1}{#_Qz zxQBr&#$s>Ccns_XCzLN}yTO1uv4_JpiHC&vbIIU*>^L=DM8Wv1<-9nvB8Za~6hPBx zkoR5CpxbJ&CX{Wp*ScAInX&dVRaoleZl2x#z5~yXwcekmda4l!|h!irSi!x`9g!3&h1{4IP2N52wTAO^Rl~qBI4gS*^6a6|@&%B(l zl9NX@3bj>U{7=MN=5i__L8AdVm9S~kq>HRQ+HAv3S9)Z!V2^3F9%yC3Kd@|BC{xxw z7Pp^Z^8>9BSPd%t$wpd1h{bjgFNNAcK9gw`@WOwF6-0M}8Sn_F1>uMh3<-u$q+GCD zLN+?kpF$P(lxFkxI5-TSVGRR%Ckz7(*~0*?5{)obR#U`B+0;34K+TPzWo|rLp3;{2 zO?Oey3YeJ{$XXEuU#fcFR#mzD)0aA=p8Ca@vqV7wFef{Zy&{;6mo_trHr9u2tPg>? zr+xSbeAphy%ccU^Hqym^T@Y)w?J3RTvNUeT*+5A%Up!l6B&tsH#+!N1S)%pwFJEdE zZs|K=f5*&bz_f89YuU1K@{knDTjPX621v?w5XuibNDQzFc!4-pFcDgQ84Lr7xK-jb z5x1TLcr=ywOQ?I5dj(8v`)Gww>LvEkaA}3t8+zl%(?{!tA8#Lxn}m_?8MDzcxmOMU0%|`ik>p-k#7D{fo_nI?p4XWu2q{rOa5z!f z23!ZOi&EgRwuzV3ceE{b8ri&Z376}b#W&X7e~$7+Gf#8?{Z z6P!L;ALXl$9=uHCs(RbTKC+6mIkoA)X+;W7Z8~HZ;Wbvbu`Jd!ti?gNILM&8?kf7Pziz@af z_4A-gOdSHo(Qa3=rZILEMy(g<7H_K9P}%MUR{Pzf?G98S(56eNz4?W3;=IX)Zgw6Z z{QnNXrpk_kU|QTYcz3J2xaHYZ0SuNiWT|c5n;^uVt{@mc64XLITLCg|KypU^B|xGk z$@fcH!kRYpr!d+di?^55U-k!U=Cm1A6Mg!`{v5%_QMN6n#iX-;L%RHT3I2J|5Rku5 zAi;SN0V-I0dMzoOi*_{C%%D6=(a(FYv0VY9#tR&>g z58~@$^N)tenfwzi$bC=304G0eAqG{cC5&!hyoLqv=Gp{YnS#rvMDwO_S&U3<`~W5Y zBAY@RJ+T$a!SLfCp@Dwm4>@JLSud4)v0k{@YIKjpHpRHD>Z3;(+`zgl8Q$xnOu|G7 z0Vx#jx!dLvBvq!I__9iZvK6wSQxvIxXqpfHrU+emP>Qt=jDYwE;~hwQ^kj`uxXe8l zh#U_WDfldN+Xb+yWYA?ke7?w)!2||#JVY?2AHD<;q9B+x8Ocz{1_8u?S`x;PV>rwEK9nbM7csN;Q?io;X;~o@u zsb&O7AqjK~Q6y1dc1ft1&s`weNxYB%XaPm6;m4y$rUeUP0v(}C7FEK+B>}@qgBE63 za8;OL;hw?_t6~Kfg?m8@DL^T3k~;tknhvsoaru^Nq#2N4751+J2{-NuB#4$pbUXuG+N_qo6dx&2Zk>Vagn)xZ_i1 z8(}25;*+jnA&;E`Z}-$0b%89DS(}ic2fkfb=#N+ZVfP*FbQQH_|1i zKukl2kQkn8@XmUae?aQ&W<|Lt+KJJUT$FM^@s*wtO|r`2&`a-o+wBV%N7n9Hpr0%4 zGZm{5OAXTnqO9y%wS}Tugt&8JUzbN$Bt)?Opy4~@SmYB#bL9Q}=7VuaOM2enZ$2EA z&ini_Jvt($hvyj452B+wlp%8L#i?%`19N^Q3|}+ zJN2N)LFpn9N+K_mPcspQy&DJzpeqmIo68yUTu_#PCQ$klwl{U_tS{~;&~Gc+a0Gbz zNg!Ksn@{%?IX$|dQ;s=`eOHZhVQ_YuH?D-7=!f|(6>R7!?BF-CU|O$e>e;d2&|V@p z1D=ECU`?Wd=+URSq?agyFoILrYb9z?UIjyrxdC6pkUZu?0n9EI74;#CU*~BrLh@t} zN!1e8aN?A&5^>^`q(W!) z(ORnz4xFqr9mw2mR2q~(DJs;nkJeU&aNuN}>p&zZP-*8zPq5DGqXksj`F(8A_35Jp zt&_D2qNh6-_R&JB;6+gp|KdJcJC$~cb=Ck(kYuF2N;aa$UVZy$9aLIB9)RftQ~y3% zM-?iDu%bdGeY8%JDFE>|?Sm+0%Z^@vD9+>T=!J-4+U)2> zh~jL{j$Vu?CeV&vf@r24HNtW#k%YOlOBje|#iD%?#jM)7{Sd{}+R^@qVt(ytF`}4c zJ6eKhC&}4BPa!W53djv0?tg%E)`wF@dergJwV6x zD*O@Pp8XfmwVeYzfujh>BxvM`qY`Lo@n;Yskc%X8!ep05pV()xcta5UvDvUL2QAWJ zk|k+x5bGOmF3~r5UXnFndBdY4FUX{-y%NZSn_}pIbc{>FK?4=vaX7Cs50^s_@|fpT zh<3hQ$#&#Pk1-P}LJ-IcQh;F@W}MZvkfnkQl; z+6K6AGZs874ROFi$T{lkTpWUJ^e_%1p!;4k&mJy1=pD@w!$n8`6nbryZC`3=mqT;7 zY`EyBPch#cE(YNzP$uR$)@@2RYs$p0iBTQP#gL8|kC7|KgPEjH8-N{6A-qEe6wpO& z0IGVgRCMA9PL{&vMHG>I$*V>>o(N3VFcgd!C&@7X##R8fE}WF5S%@u+w<@`n@pq8<=1|d2|JwX|s3^IF&U4sZEOlU6CJd@*gabc1qtJYa z?sudURdxs*CGMzo@(skYG?IeCScx0E_mqmx+31b1yozH*03GQ7t&{n5g`NSK5F9{I z^Dome6lt@i`Ob)9ltv6QUad)oJ1=7a#^Evbk)j}JgG%{eO}gQhDT&*c%Q9Qmq?;#4 zh+xth6<>@JPV1Ycvc%z)xZ);LGPXrz%DwAxT8&=dRmwbb+(^-?*E1?(ft}&>lUm3H z+wGLTty4vh;FZP;M~M!J52^SUh*ysiZSqbnzf9%xRYzI=S1Mkw%6CmX`D@vyml1zt zl<1UrOvSe${>~^-nE0iNuSMKlDLN+pS;e0~ymuwaf286o5T9BpO3yr^OC+%%`@Dmb zvn{M#;{>E*YtlJ+zs@{TDJ~bH+U!4C^y?bAE!|jqd%Cgb4hfxw2Y{NL#r>a?(}Q>Q zcQO5NYtUKT`?>DF+T1!?^zzmJ1CJB`fd7lq%`3);JpF1jbqv#gOf$BeOfwpnsPryZ zhxj%DP@5=&dso##NO~UN5Ec-ZmyRw1J@t}&-yZX}F`@uwZx4?V9r4Ve&Pz9V4h8>; z_z!3cO+RjZ!k)bvnj~J}a~LUb%Iblp2|=d{LcLuK6DTC4<7Cf(10XB!q$Yho>h!;q z2ro)THXKdDp;D|s>TKLP!|DpUbCJDZLBbGu#gVTi1q8zAgu|RVR-6}xZyPS)?>{G* zmpB!oMK}DHK-=iX!j)P`{L-S4fOPp+3HB-$uci0>7RoJ`>9KM(bQzAe9>ZlIw8hG? zE^$_g%`G}Zep3exA*8X1@U|hRj=hu3<53qRSHo>08bxJPx;4*K^K8#@t?ZQe0n zv@eS0u)NBn*Jkwcm-W&7cD(312t#6jIJ*i~tPKkY$$=_mR7$fR)d#B!KxEwThK;lD zH{2zREnj&3-OQ^eh)0s|5m=p0{|Z#++ivDe6m2~)Y1DMhXFl<`$TcTS6a(Guu`clV z%2N}?nZ1_@-+j4`VAwg|L7Ub_(C_5-nkd3JA+N&0Nj6tAkxLjUh^ENJZGQNoXj4Gl zyfA!7&1EX331K86n#ZWu9QlFhVj3@rak$*)31s263SH-BTE7|AZ@TrHX8roD-&E_D zK6CjUUH9_WYyBq5Uz}&+x)F4M)-PBY8OO~H>lcfHuc;*lyaCu>2jEUO0C%~x4S=+8dSV49$lj*29gC+2r&a(JT<5&3g^LzZJvL^f{u}=KLtX+1{_5_^B7Lm@|pzc9o z8g1z#}kTGsT$#Y6Y(GQ_g6WaRiR35diMDi^k8^ zw7$W+kc6dT6=71>yA~oX)GRGarUjd&d1YFlS=t#)3kM3CCAO6X+crx}muYR9rMYEV z>t<=4WLkc+w0xOHtW)D+r&DDb5wpr@!@)Aqao567`wigcJb)xty)16t@F%e3P8ELW zPa?aTJ0#33(0A0dquCpWw7aiROuzlsvIb7bp|IEm%Ju&&cgj9 z+=}B8feTgRv0wZZoNPl`hWiruD)NiJf+KF&X}GbVokru!Ru6IB!&~5L_^0&{j}5>p zDupgGp-zKOPhc0p&Yucf9V{i#7hXEgZfWq?M?ghTHS7@s9;tG4;`v9AmKI0dQt_}V z-{N>%DzA#SI8bcYE%pW`A9&%c*$8=?518txme%KE_FxA}Qz!gdF_ig;zeOWlcL> zx_gZuV(sJMQHODh`WWLtQTeggI36qGt|EhalPZLPL<^y_0E}7*27tqkxaFT{Z&R>F z*c-TnRQUCBZb7GK=?uSO0iwqy2^Y|0(e5^pS%1>r~ zvdWhzWo@WP1>R62!jQ_xjKscIGa}o-jJV=vM3#|Hep&;Sg)mT8+(2U$9g)D0W#Ih9 zWz1EL0ky0$K{qZh1?WW=JAwypoWbA1_>3WH-@P&vK*%RUXMqv%89f|u;TmvEuLAjn zKT0sNR+Rh-t_|B!GB5Ot&s_7sTcW62G8CV4z%RgUH_Q=vnP1GozBdQb&vCWOQ<;G) zP-HZc@ph7EEKCNgM}5&JPT>l>Ah*-NPA6wR5YM*aWD7}!4m^Kgrd=bl&P?d5FTulZ zg^pGsZ{H*p41^NZjsO0@SzFJgrLV%`hSrw8TCSJ|IPZ@cTvse%`2b# zbj^cdylHl4-~1)|Kn_t;{{FRk-R?0{Cc)HsCP0yoFmS}kLz0TYARSJBT#jP zkHUlzs5U>kRvb>Jn^Y-54D|V4z5=&(UFOGgMeA@|3e3si45%UTD5(`l>|X*Wg0>hd zC1cQQntArbio?xX{xOz>2fA^?VlARVJFTzyLvMf@j)J&lqwq;YOvPmk!t6OHfOa$%Rny3F?7(F1AKp*DDw#h8x9 z<=a!PKq7BF;0Ln=9ty*P2?cM0A&Eg~uwZRVh74y_5c+v(;ylv%D#(ynE>Jur^F*0TSLvHg;vVf+$UKRGt2y@Pni1k-}i1<6Cp(P73oI`~nEPAaxUEQ?b{=;q`> zMi`@3p%GN*%G!F12}ybwUSeccbRM~#*to#1aU-Y>(a)?xPDd26A=1bxl^&CjQ3?hD7^fOz zA{Z_8A(jCm(LqAt0;G4s;TtJF-7u-$0w~7?LhW)KRs$Ie#iU>%ib9U&ZdG`$<7zhR z=HW^TDKMYVO9g@{=;EF@V%Tkv+*@32f5>cnj;zqnAMM@q56iURlyhpdfR zA-3{k9@aoWC*n5T)2>Q6pleWf}Y&QF}g{Nr$#o8(U^r^#gQ*9GNQ<) zCcy)7h#z7KAnZq{pgAQ%)-S-b962&K@vAjPmQoc=!J5ed69Y%@9XA9s106PC1$XS* z3ac|6%aXsXF=$D>Gz<+#o@!{+Iy7H0aTtXhk5uv}DYQ!B=VUm7_aRU<^#S)ItjcUi9Ukg9fpXQs^mrgavu*>4bSi$%TLKbK7&-qM{{JMT zw1BD#QVl>=MLCv|=f4UlV*$iJXw-464Z^}VdoTw0AEbLbYzdTm!L(=qpgYiM1LXTw z^Fkyt3Ws?ks~LAC0Rw6+AxTaIb<3j|APin!#WAo5Qlkt87hE^0#n8x|N7*wCcM6phJS0KI`%;hy zEigJ2-H8Vy{i#Fm;H0kOR4|4~`Y$9^CLlvluu4Y04d`Vci#r-*F?K%-{l!BZRIK2l zvNSH{=+xM_KCMjhgzP$x!%jpTYZ;3k8V{!=lHFP56A~n z@gJR@gi+wlRS73 zB^!1q@HgC{+7HCuloCi%9XL;cluUvo;!e;`h*Sbzs}NG#lT&R^z#0lYRt)H1K7EI1 zYi?O6GTMWTa^+Zg#0y{srkT5q1vIxgo8YwwKy;~i?S9D3BoqCxSQ7YKgK`IZiI;mx zlC_s$V^MnwdKjJD1j4F0egb(;#ZNgm<|T_nN^Fkhm#Vw=LjT!0wyU)lx@0VFAghoC z_^Ay;t~4j`G{M>ma5*pm2?57O`#V~a{e--%bzO6i9TZ!ZFg&uXD3*jTF(P&rCDPOc$-=6eX8k>)ILuOj9E}`! zcAG#>gzFDS%{VE7H646&@#%7&YGc!f%2F{G&24wb?{vNKP?SR+yZS6b8KU-Vq4*&!MvCr%@Tc>svr&TFHa$u~1otBr3}gQCa17 zJ~tdgWe-sqJM$^1450r4RL0e83zZRyqB6wDcvOZBD0C!vK^holVe%P2i^@WwGVJ@I zZ8x94TNEYn$#@a~Eb#vXv4uixSu@7`FCn()=Mh^d#AYcVc7mmIP5^ddQGulBZ9b`bSMx{_4KrasCz)k@i zYRDvz5zS1Fh&ElZW~oV(8s#*AEQ1UT_-!t8q*Je)#Q^onesgR@oEgrx)X5%-ZO|O6 zZ3TMW{y^zOTW_p*nxEGl!w+|J-7(Z`tnf5NF$-FIhzBN2r)r9m=LD0vOW2y?IMO@wbPQ%wUpDcT|lb2E}11DZ^?8CCwP+yOOd&#CTNqS!jw8> zsPiSS=uz8jGaaN!$Fl1wA}5X7pnC3HC~ zi~WJSHfvN$Or(AWxW@IuaRodq%2^&#V5SIh8YeH(g##v%4crH#4HuMQ(9jfv2 zJ60obFxerQgj3Y1xl-JuQ3y3Xaq84OOAdvhyq(dagsEZhO2Wi3nlyiEE@6r|2@_73 zA)>*1lMw(1$-_ZQ)`K@7lApx6!F*H)<1w0lSOSG0WQZi7S4G(L@iS0~>GF|A>qJHh z+t9&d-Jk*sPf)Z!PE6cN`Vb0L@O&Dalw0Bl*eUX_u#}-O1#l%+U0hwh5D-IBgM6OE zB~si3TqtfPl6Pk!pTLIBnti1N#(|<{DQ+?|Zbac|u_A1SEf0qq1{FGTI7;`FB9Wf3!CV!%IM?xzZ?y@*s)H zN@XfPWVY-H9K|ZirpR|dvqe$>gd!=1RmiUMdumN#xB=-?o{>N|VaudSmx`y)O%bSO z15#%S9#MUHo`QWIz{|U_05AP-E4kEX$)zGF1sYLIXveDws*H z6j>7j9X3EmrPQCPmdKh5wDqdKdM&!hzT&(pitb*jc`aIo5gX=<%SCn=`Ta2@`7nU} zC0av=t5F72p2{&_wK}|zC?2f>rx@};DX#Z&V$XvOBM4tW(gwPB^AV5ZNcwE-(w2NW zi2|xBF1>WYln57~=b>p^o~1aOU>84~R7O{}L@sM(H=~!hWFM%(lL_=X3*eGIS~MTL z4+f^@1jAHvD9IIW&?s4xscMj%ARmKLE=`D6JKAOAx-5qziL9aYI`OF>eGTIRk_W4NHfBSpZkLSSg5z&`+9yf6r;1R+m?h)5=!>%nO;;Rpj=q&z8)S2=hI57Y`K z992tk(yU)2=0H^JcmKa6DxwZ0`$1}K#!-v^CP(cwlO7Po7b=cgNb+&@4r#`S374ti;8iRDVPzX9O5vvG6f$qE4?w>)*M68ku+?To6vGDsaY$eLbhY$Ebu zN0Q8ijfV}u8Ot$S2^g0Ojlr0Nfpua_7-`&q zsP&+P0X)V=91|<}v`&Dc1;~KWsPhV1vf1w;!K-7xneve6sN44P%hrl6&ZQ3AM|f$i zSe?1$j&vzb00WJ!SV_jVJJQW-9u|Yf)ClZ0)^(J=x53LKUi7o>G;|hE?AOUUK|CS1 zM_U&v`XD#*7M+tI$4$E4%#g{PL}=sim5jPf-y`C};_s70URa+Wa4DLfz!L{>jTnSQ z3Sf@|gF7_PbU+W`Ze9X4HF_|S_=Kx62XKgyX5RaV7^tV4?>-_5!-3Lb$^-7!Sb7m~HR!%u4qn=Na-YSs zAv6+%9*!JmtO3f9qDYOwT>Pk*mzGW#LVrjhG2H-w&D3?GA`!Gsjo)p~S|_dzCkOog zrS!r{7~`d7Y8>6HO8Qm+n}n-{fEGTJP^RII{9b_@G>a(;z_1JgJpzCsCHf4P;k9Ar z%?~&^K3HnGp?Z;^@JhqgDm;!Q?Shq{3~USclQR z(R_YAgyzJc*Zg$7$mxgYukC9t4qg(%YL>T|@RB@Mj$1NEaLOnz&A5U2*wnC@VS2&Q zTOBcnZUB#wnc~oNfy~r^m-`!9hq&&hS0^6mg0BZ}R-EiGp0iWY^8{WBOh73tO!=KB z`kg24I~Z)?g-(9QRQ4Eq6`xw;P>G=d?>O~6tNgV+)ex?M(SJRl1DDhAo!kE_v;zdA z!o|`)0Cr$^IBdRMgbxZGd$8gHeZ#}hX+R(lz?X?;@nhnQ^V9tIi46miQ7m%M6ew$yj1fvz-_Gotb%zZa2*>c$oHLa z^6{_vX6Yu;9$XDqBh2=kT!v2GOCt!emQbgQb7FSc$lGYfV~2K416d33IvHsKW{UPH zgb+;pn&X=^)&;)tDa9DRIV^m0NPL5e8u;eJsj3(P>oyR--lCN;2UW6mc1)r&mhbFj z7sh5bY!t1qR~|xlE^-5#(GO@>@l-Mh7LY7PuOv98j4b(xVk+lY+Ko1VELsb+_fKb>iYvvEAI{_?J zfFm-C9v8p2iFC#jqNm>89QcG7W+$zELbUa@=XKUR-#&+)V7~r@=#WO{5lkH3NUhiW zD|B4>KKX;xbdX6r{>uUmqi1h%3-TR!T^!|%@9`J2j2QqUCfI`7G0w(#*o52Y8Eql~4((+V z5xfeqe%kM|LNO^^^#} z;5-96_K-PfmH+@0$iA88BSH0snFxYts6ZcN|;# zPWs4*ekVVx(S5$}%|q{t<4#-~8)AO(ff$nsB!D@*G~1HD5Rr$NBR>@F!@u-uS&F<` zmIAJeR{gjO6iCKz5(Fc4)htn7gW!cWs+zo*KXoS#BoJ}A*P>;f%gDPLlwB}mhWU>V zg*Wy4#d`cTGc)ZYk(Vy-g$e6=j4*J4$Gqqx(Ifo-^O9H#cf^1k|NkzDwQxtwocSl= zaUg?N#M;XM?uX^c04|3OZ6$9P0SVtx_l#gj^Gv8SZ+Uh2SPa(XWv@Km3{m%vyb`c0 zKNgdVKnhbZCGX)oFwA&Fo&i4sdl>-3Dy!rRf5zKP$v~ii0p4n=e_1y#`b0!hKuF?l zG@1TSMXNR;NUMR&F1(h72jEC?PASqBiRx}74wQbXTYJDI z|5Q2upPRMIx5io=M``nNDL+*%f^trd_czb{S!@YFp{StcmNQQRw|MtBiSlKnHjf}GF1%Z8RgPd zgz6T!zfci)m_h_M)mb+bGl(Rq2=#!thNU8)%ZT6|R2Fl}2-T+!Z1#K@keRsR&P?1g zMMU0)?~|@!ho*`R`=UJA@jYWM-YnYDEya_YVWlLB_>bl7GY(-{!+Yk?UJ@~B3r{N; zIU?Kao;H%kbkJY-RD2B;3QXbQ4hyUR`2shs@xg@1Zt+}zOadwZu*v6P8gPvP&s~~V zY!ON3*exPQII7KgTf{kZJg{kt7-4pQTC_6jtMpXxH3;|06V*zSgNsTCVfoUQE8q^g zlFS>P79DWQPe#B8Moo-yW6a$AwBWnOZu|#>3cq5?6H*c&z7i3vj4scJ z3(e|h#Q5;nE|CaP%@`){rqGMLl$f8C7#6}|+1w}l;x5~hciqxA;g&Kyuvi8j6*I?D z(sc(s#|LmJ5BkmOAh}&ZPh7b7#v3G}NHXIns9&H%#t%4n#Yb(EVEo~46)!}QrG}RQ zu*j%luHnB9qz9I!hAyo!T@Ka)RT8QVrP3iD?vX*q#$5x}bHHV6+QbEX0K->&C51>g z76a~`;XXYogta%=V7%Z28whp)Ow9mk45wFxF?WfQ5f8ZIx(I7LHW1%a>ax91aAW3a zqN_RBD-3LIRX1H4kKzhU2u8XvU;vxR(*`fB5K#&ZRLNwF0orcl!1@8llYaWL3o93Q zw}809(3Ivz=w1mvN6l1fxhN$N(b)7U{qdq3M8vqRgp$!2Lr23%ccXDA(jOyKjZW}h4-g113D97GpQ&D<`2iTI)ja)@84!d5u4Jjl=A#bMP?GI>Wc>gY#Z1hC zdR>om0jp9d_kfd!x8m(}-)syE-Qd{yMkmG&Y~g=g8|1>lNFD4i{$si^QC6=*8kZ;_ z9Ma(;0W%NhFIDn3I@lw9sxjeOu&*Qv8m7WC7lIZufhlZB`kluJeUo?O=&AG)69K1~ z0{sbJLVyS_iV%WjKni9Be_;IzvTAd>n0%+Sb_Tw~*bLrM!1K9@^av-&b%6nKX}F)f z3xjc+-#jbwFO(HR@ONa|E9v)%S)lv{0mn%!eNEy=UIwFvOhty;#Ny=amf*6oJR;83N zWmWoARBll-;5mRjS@Lgm=?Ei zI0&b9pgV)Mi-Ha^2VF-pbbJheqt(HQg9$_u%+y)*zU^=V1>K8IRXV;l-}sFPN_Ty_ znYJ5mqe4%n)Y>HXvMO!@6fRMf*>;D>H;rwglS_`$oUu)`3jepj1i||!z!VRqkdQTS0Y!11eBg-Rd|-#@ zaV5=`z@lN{fmlMs=Tp6)^}w}0n$C>``B8IZjvb-|%Hu?vTOX7Xr{*gqo6J|59`o=n z(Hgx@-YvR!fc6#}s6-EWJRRR9?y9(|hY6p!Tbw=i=Xyqk$iLS!oJykSZu6oSfI~@G zU7=)Hd>A5_3ZeuG90NzX0tfw%DsX@Rk%}eBh3UjijgUhv5Vt(GfX5Xc?#e|19)c^% zVVUSFcTyyS0J1#5kvt9@+|2_oBN5%H)(j4<=0e+&C?|@K>=NyKV8$VTQF-D&4cr(H zZ?Dj?NF2mq6m{xc>fEnMw84@)4X_*fV8amv&y!@2TTVL3EcQ^GU3jSRYc{`WoPRVJ zguATRV0l<;26u^!fq^uxVvdMunCIvkrc9`Yrf?8gU=0nP4FO7E9c0Xq4gnrU4Q9~} zk!`l!B|62hm={jtYv2=##Nx@jM3264BL`XL$e|arrj1x^nMdPnj*x=V&_ZMD5Ss{b zU>DTv|1y^11*GWuahnhB7C8m1^XD3B+%4K9+n5KlieRdlxJPsj+jxaD#8dIAD27)c zpIE0vFUgwz1ZMpN^n-YBf)pSIeVBO?u^^p5Gr^vFL837oF?4d0G(ak}(Fp-b8cs*2 ze}+v!4eXd~1eWNhp^&a{Xm~*0i~3J-$cN27;^aY!$G6kG=no?Q3Zs6121F$POFX;; z(WHW3GhX1GSAaL6%D-Ai96Z$TyjD@}cKE{h+rczH+$8#?e=R@RRC+pF`v;NbJA$k< z%-8XQY380kh-}AghtkXs{~*eZ6^GJPwSFpw{kkYJKHi^!y&Wn=aM%d@F96?Xd;s@* z!g%3OnxB@LGQE$FsphOdiu{WE>}q)X1&m{7@q!oK+~cKa=ij4KXh4XZ1XixUJ@Q`m zLQ16eOT!!LC=Nl<`0U5$j@~NM3^@1uo!R(D(Yot8SxHFeIQ{Ke>|S>jFQ6GO=v6of zMPm`&&Nd6{#hLw4iXf3MEj##)ZnPrjrXB#o2iHJn?30zj#=-s;RpV4Hq@f`VPM=oR ziyM>nLWt`uKEOo#Up3n_h%Nj`;L5mkvnb1b(jfY@K{2&Y-}2hnPhy<%U7x-`0A_u`OJsO9=gmZ>V6g#87$mEZ^c z19(ndwV7D8fT0sB9GY9ekaKI^{+=lQFD>If&6aT-=J;;{lw>@91!MJo47BI+-D{40 zUtFJ&sReOj$PwricuCmI@t=tc^kL?j&)}HO1~csTAjA-{TL3gk2IX*#3ihPwA>Z_n z2K5spE4Nw=ApgL2s-I{^$8;_TP2wf907kG#=mic^Q4I@JOHGt{#a~3b?70fxU53PW zbtHsYUHlhur3Z2~t2V#+i^$CHtSUo4WMz2$o0|fyC_0*fCQ;aNE?A&nfZ(&5ECgTM zBwGF32o41n{ax7zexeB{o9)fk`$c0bDoEj$^zDWJ!&HE3Dwgtm20tsSAtrbrVpmp(=@XXNR>ta51 zNaX9o&7+4z^(Eax*c24mrvo66`A&J1b}Tg>p$bsyhrSe-=%dU( zehOZsCjJ;}OFI(U zE;FD0O0?>W{Z<?uRYuf2IQ8(Ji#S`;x<=Lho!g9u`@8NAtVGqEGj?0K#@DE zxf*9o5jp<-!0CU*y!R+p*IM)GqoQMMhvzOrzs>jq>H`%pclaYm#pVB`$oTKzRWfsj z-i=+8EpWR)*GhNj-4pFJ|7+%w9eQi;Ud)CpWj?h-@5M2yPoVTOG>q|ocjy=QW}z5I z6;F?yJ|EDu(J9gNVd3*FzCHc7x@Ig$@Ku>BzZ2DA<4A&U_ieh%rD^5mnl^sCrj?eu zT;s>PTtn+Nm2Rr5J6=<|sp|26959ZqdMbC_rV;+UO08`3Q=|Hi)+@BKx{W&;_xI}e z{P+_eR(0smVc8d}wWG)1-D4c68@=s!pUzK9pZfe){a0R^)!zBlQx{L!zcdnwoUB~8 zsm;vtteT}Y>%+Uh-|gI7mF=3W4a(ZQdGsvpq;_&s#k3ErH)m;^w91p4M(l6gnL8`5 zynOPsk$P$UiVyzw)rqDi&3|+LYnv-KmG2t0skA9_u<3&5h7WJ5-+v;{wYheE&0CJ- zbi(H*T4U&@ZWYf!C%PhXRQ+nF>5!dQ&gZ?tS=3qFoe|6%u^FKFhmwB^q==N|&8`AXQ#b)Q{K@drK|p)mS3GeZPJX@^H&+p z)pwN?PoB1^rm8YaJFw;InUmL-SGuxY`3LT4Gr^tTedn6KtBZo2IkfB#XdN<1%p)A)8}Va=h)F`&eP6)RV5tZOm~_U|t$`gY%K zW#5cCc}99pb@fnx#)j-!MaLc-eP(|5)cGTGbLW?ho^-T6oSzTVk98FzCU4(Z^1!je ztVmO&=|oL`&Fvevvd`OZkFPvf?>gdG`d!2n&iwA~e64uYSCwmqKeuD@ME`xaRKH!< z;f#C!^6sJXecKB9l^oc*tGKvwb#-J=^K+w&S5il_elogu3S^!v7xx9|K&WatL6gUPLCsw->Q%Akmc;MYb?;0gTR=fLes%(lJDt~!Rj(^ptf&DM;P%*Tuv9RFU z4Ilm9^|)TKXT=XIo}V%?&0SQx`^#Fx_}hmo7cRQ1@!3+NV(0e{+;`@DJv}^NKsXY4 zyu#;-tZ4YtsEW$xn~FC3G9!~_%*rlobKON(7)3S9X1O+3R_tH6a%YD#dLDf$>&7h1 zYTiQ+=SEyr+b6ws|JA)dOP{dn=BdMm>FcVp?r3_ULwWg>O{qgRzt^~P$R(RMI#)Cu zi`4yCxAeBHk=rV=r{s;gxXp{pe%SxEIjgen=$deCMenBZfb6WJ*O^TH?v#6Z_tN?Vjf=TnlQeZoO{w>d5gwb+5g8Q-$`WA~0!<_9J7Tn(W$MvORO$ zLyLM{KIN|NuXP`g-6}k2Q040V4QnUmjTWz!=ezUsU7Jom{I{{2SCrOls;nI~<;k%d zSJl;(uBfRitt;K0Ij#So;;$pyt0O~JEO;-!WNG8`zqx9-`~10wr&U!fqjw;isXR#{$IIORE`Y-8KH>g=i+ z6|L^QyOY^z=dillGj~opcD1|AsJ!8Z(i3GPwB!35k6m(6an{CFwUq;mJ3lp18aN!4^lpilW ze!OXaq&j=IyK>5u$@|xrHaRyHe_2wp`lDWR9(~`;@0T`dW}CfhAAaYZgGKMUp1=P3 zD|f9cEB%|R&!{2AySiohcjQgjI_Z}1){(zm-gj2c<2g<1XI_`~-KxDs1>?sqUbtqB zue)nkrWUDLx_@RkGv6Oc>v;2)?`uDv-(kX$J)5`mJW;gt%TJcP^2+3^XB5=v{-Yju z#pY+Hl$NgYj+);T*_SbDXI0(%SLeUfv|_(jI&;K#4MR7aeDlVKbIqx9#4W9tKb)WX z;XZ$dGsETDv8u(FwjF=db^fOG&^0w$aNf;TyIuK@yJqRHzy8W6EB2r1377AWG`aQt zuVgf%gbw? zT|dC1m9JaZf8nZ>*;mybeLg!a?Z)+YcuuY^s%eVUp4@ry+zCHMDqA0H>pHW2_D!Sp z5yqG0dUgI?cfPr1=$Hpb?V6+woiO2e>F8>A_Pa|yDtq?o%(eT=vy(E83EooEWz516@fFStA};EW$44l zzk6@wwQpt3DEeaj5YNoNkGkWkdmlTvH`TTH3tv^)ft{B}wr`$Tdfk}LvmbSab1M&a zb$;^3do#n=xeGQndA(z2Y#UY6w5DRqk?qfxEqw0TiNUX)th}?oYxIb_>YH|d`R2l= zS$&Tlo6=+QTNNe49&K7OYW0-NVt;vdf#+}QB5O{rD%O{7no?W5aaHB7e}8A~(yG#J z-#2#JdLpv1G!i*px8S3_6aHt+UpjAUD%aMP``!-UHGZEqZq|1$!!sK%+7TolF_QLnho;~m86JH#Q6c_DZH?zQK{N&bK-|f-*%^v>xCr7?o zSFomLm%eVrvC@rg&7tAP-sJ`VrNemX;ixKQk|FM{SvN)rSu` z?;CxYG45;ss@C~)jK;cuj^2oIBc?iWXil5uSNdnnGr$vu2)=oWnR{8d*0nxw(|FH7PuRJd^&C7 zb6ej3?E`)1B~HHV+L{IV`mp*n10HVtez#teyz|3@9d6Wby7t=j)4;_U?Tv-w$4%RE zsHn8MV)=WozxC=MR<|#EbW8Ua-|0}O7Tyk*dn&KmM{(?>AXNcr}zctHO zS8USSb}PTfPa?O@DZOVE>|H)4E@?ZpMK06SWWh z>cRUidp5hOYRWEGo1I4&YDRwBX*p|_H*Ojg$=bebMB6%jLx*nJ=R0rltT?!-_P60N zb*q!x+&60Q;OeYd`9-Pud2jZ7vuC%mSsJGCoN2XRu4r@leILzy`IT2MIWxpCn+3;KX?-4ac@JqrA0K`H-sO&$#_sd)o#FCj zO&jjWUG!pOq^S1GPMvbx$F)&EHr(KA=-9DGk7JSWvC`3r6K=>adiFEtig8cvIou_6 z!GZ@KJa(jM;Y0fm8|m|Ji1b^!ugN{N&Ak0DOql%6n!y=0OXjuv?#YlgXUyP!{mWMF zJz2f{n$H`{9>0D4=f#m3H{7IEm3?1SJZ^m3$*WiWXnuBV|6QB4vYEd6yBGB>t1CKK z`b|}Vdy{Ss7(1@`sf)wu6DD_<*ASYN@3~{BC^&-e}~ED|4LK;qZt@-kp{;`oWr_E5gZb#{M-g z&!t^C>1dl-d4pd5x_t1E@onb*m@#$OzR!jaUG&)_!%XL$AAMah;ETftYaebb8nb!) zTcdic?&hv&e1G=MTgDEUGD=I!o-$M)-2do%uYHvHmoNU2ey6urWL`LLq;77momMsF zJa0q8n%cge6Lo!yA1>WBv;4-Hx4l@uZ_=iUp<(~g`qfq49*k@qwQ+s(dv3no>5}k)Nb!UYpR9d&%FW;PGu-drxYxKnb=WtHO17rw?Q&-6WlfPQ ze)amxw|H~CxrKEbGTJ@2eaW7h+MNepIcv?7@=e9=hZ;_PR+<((JJ{QmSWvL4^z1V- zoo&x>UUYHd(9WygEv~A|-9ODecF*@OZrHTHVd128%jPs4EsD6xTBUl6pDNfDj$|Jz zsw*lVvgqxHzn|=@IIz$2(y{sycTr{~9+@tFzVDn-8P4K9#@layKBaWpM-$f`eqiX< znakexx$mf3lr_Ko&WLM&iGK9!&~JuaIqc}_A$7&=o%Q__#%Wd%u`qnyvMt9dlh2?1-s|@as9QZ^tn04& z2jA({`i*I|Lf>$rf5xJFN=8RkeY>H2+s+AdpFOMR$%*~TQp#U{WkdGo(|Wf{)82nO z?UJTiPj}7N;n`0>%ID4N6_~SZ*3Hj*homif{ksi4R@R*J+~~K9hC6aH294_W?s=21 zTwbxdf4?1(k(2Xps|a^reCfCpt;Vz7<2tskeC>ouGa`|LPgKmx(*9VcC04d+HQ=E4 zmV1{x_+)zDr6=Fo&|_M+(aWEC^xWkI0_3Wn2D$dqy=>UG2X{ zKUBQNH=y3vcIXB5H(um=<&`(ytiSZ#k8b>`Z?7Ns4)*CMyH48fUAq0DHB0whX@s|# zi6u1$j~<=i|K^1m**Dc>_U-6?)$P0DL}}uHDO*3Qy>mfw|AuRx%em{ezkTw>@8449smR_^vx-)jw>MwYf{FwVx+MRFs)2H4%tM>4=Bl{C4{OZmUqy39F)@4lpHg}%q z9HAW>J*qt7`p1N(_hyC1J~=(1Zuo60PL{m#YUPvvudX)%ODYZ9$2q`(lu}U95SN~kF(kTm+#ia!lP~0`ZaIe&~MWkF>XF!1?E~%4RPBmGhsWa20<|2-S;#-D1*Jhs-nrBYirQ`bpMjp zF)7>EI7sumZI=Y4ctaruwed?Wc_?{NH*h(&Eo9y za3Kix`webe75cUCODJJfQ%By57_?f3bQ6h5m6e7;LmDk^qe^d`1tUT7)pUWKU z%McCo_z3!obV^N*rF?{oBod`AzgMUawn%XC1mW=g6{VuuurT~pET9ypSL!jk=&s6Eax?`KG62b=_GRyn~G{cOlws0E&?@2}Bylq{4g7UrNy-IpZ~UnooG z{Amj4rapFh#u-eRVkexZ%MrZ~&kTEycZr>q+Mg*-y@P7`BA zb_$7nF#Ibj%UOjDiSxQF(du7RNIADV|2qGGjkHa^!b(qp7HvCv^Wk_lo}OYMMi5Z^ z9aHu6T-CA8zf?DSO4zh4MK~}xrVK}+UU{toLMeZ-s?u$?fJCR7{`kb=3R?S@$zec^ z1?~0)Peg6{4Yuad{mgxCWKE8=H{1Ck8L$rHO;f5`7)TB#Ow#ywquM{=swO@VV8*(% z=OxiMOQ%}ID#V=HKVaKg z=`8)aJt%4Iq_923j<)I7P09+I06fvscpnt2!-JtmIRi1na$PX)4WiY8&oJ7EF*3qf z?Qa~Tlstd_2CSKVqk!)USj|WW@AbLSl!8%*Pu%WY=+`{*Y}2X=rBB&+ZVeTm z4$|~*JH{Oog&bX>A{T)TLAE_dqM_0iezwdte@og(2%EuhUvs|H50oWrqx zBrDs%Yt!5@${QlrXm9Z>W&}kD;!cqX;bbIIRLDd*#R+jAYJtDy(K|ii4OTEY5 zt`sxEj^Y^oThp(vREb3Dt9vC5i?~jkj7#O30eB6GlNuB8&VQY-PBn%>rCnL>F#0pr zI8IbEK~V^P3n=VX|9P8-*;mJAgMklXuvD5hJ&=tELka?} zdS+3&b6_ypbkp2fDv1y)+V>;VUIcVLEh39OTwSMPK)XOx@LRPgL3J8}QXiBtUcQ?4 zB^h_0wmoT=o*u7Go1RR^1)Y6MWwx5d-`BKv-4;0KU>q)^q6UT!x4i*nGv8S{gbfaN zkE&Q7#9CdrucXDBgpF7Clmo7@oSzA1jI*ipcVDb!#ZU>YIf&K7gwZgOcqTXGds(Um ziyv6KNXx)(?Qt!yvvg!wcXf4n*jLofO{OQ8<;Wm{Qk@|5Ta_-K_5?LPL>jzM*-KIL z=MV|1dg82Ip2FT%SnDb(@5#X*SZz<0mWk{5l9N~j6os;1l|%cx$;mG=XpluUcG~SOjpqrd(eHU?E11-!GxM1|+srR5k$B-`oKnpF zPK@Co9HDC#ZKm01T3P$bij1Ko3iZ{HUK;Il!p)5(;u{I48)A29rMwGlN?7r}Oi5hO zvuja&rf2#C^V*mVaxeR9p51P@mE)yasg+f$=q#2X8)}PwHJP@^$T}(|Du>eahl0c6 zxu@w*s%10E>F_#9sT`T>`Ox23^-_T$c`uxuMG%eXe^r=oe>2V65u^hVV^{OXEKO^L zh*|zjf}E2VGpAr(9ebnGO68I{lJRi)Kuo$%kk^zVd%=kaCl9(8OGod_cMip{wC;{p zUpVrPyJ8%qk2KFh9=zfXkB=#mDqVX#R6g$3Ury&n&ibS}_Ro&q1Wc}1r?aXo6BAgd zx8lZyKF&T`g^T+EAIkagYekoeM786ruvYS$Vrb_hvRsC;9H2|iv z;8jr2lhb4$?bOpPM{2AS70!8Ga~i$;niYZ-B=M5w5o^UNQSkQDrxR4F`Zn&!>Omhn zyG-@P&Ej8Bgo841$c3erSfeo72%281ic%tZdOu>Ag)cT-^lM%EDx#-s8@J zO$j|5k+IL*>fi)O)}}8VL^ORBABAJoYr~MtVWlYL)#W%d8G9^2t*8@aex=qdvs(K_ zYG)hQ*X}^-#_1r`YSCcA5|5p6vw3+6w4LR$aExl)jw;c72rTV91_Ykmk(0xq%;;F) ziJ`R%bCu7NQocEvaIv2foLo)=*0@`K(RKY*qw+p*-VRI^?z3b|6IIu%h~YDoFHZzM zjK3U++(cRhmI0@EXl|St6jx11!tevDWaE4UE}~{r;PoPh?Wvm9g(te!Y{*K#(;525 zYxZIbwB)4VJ`$t6k0%OJX!50}=c*Z|gjcNkcOyYqHptkk9n`h3<(hGHHNCrVY}X4;jXTe|uibs>aWFY& zw2B>+O3c#9p7QMZk*fLwfc!j|8nT9jq%KX z*oiwk{cJYlg4(-d*6{b)`5)fKs~6R}?ajm@N-c!ZVMCYeLQbpp#j>iXT5LnZo>LOD z>49e*%D`@TEo4Kx_hMBx{hO{*C5|C1x^`NfR9=3V(*L67_hJlArf1FVsmFqv91A_D zoXkzZbiO0`UQX|_`wE}KI((@r`!w%6o^1bng_&pjR#K#WS^LC@t?}UR9c_xhgQA>x zOuV=o-ZkAGD@sRLzgG$W=)lu;5^tl?$3QAWOv0UK_^_sQbew{4)i`X+&Agmm0&s<_ ze3fV^)d|&N9w%wCTCf+-kh|F&3{Sat_;z>i=xSe7&Vr`A0x?-NGxsCK|&vgR&hp8#Vz>Bu`{7h6ZEhjVRB3t5%O?V{iM9@Oj z=hd3Yki7n&OJ8p((TWmCVEhPwWi&Y6hDjy8?{1%%4q|KGOzRvM6P%{Tl_jn>u7LgX z_V|vo=(AtZHaHPj=b>*iJ1Kg*s^R zqLOhu!hJ2n)~G;&!ziCdtWkZDYp=&BMrBiK-s36OIpNg@894!=Q$+m9I{^(-S)9Lu z=WmxxO#5#wcR6)uQ8M9|@!=!%KwtNCo@n^JUiu1T*_>AcoG-cl^obq4qV-rnTVRi~ zq-tvCFtd*`RXeWaGNWrtizg`2IQvax7NV)R{fukRZprb!{o5W3Yh|+10a^VXzxL`} zX|iIei`xuwyxpSqHpw5*aOb`a8kw5N*}?F;5;hT&{zG%RU&g`?4zi z^f$t5?uRph*rwUqIQ9*BY-C-VlCHXWpw@0dMRI)iv1uc&iSL>iWja z&{rl$w%TPj?ak-tf{c&fBiJ@5Lr=+ekW$k&T6BK^^ogAYo-;t%V-f%3z2?M~`=IcVS7ITr7;XjmzPi8Ic`>@>h`;ADZIpNZ_hj z#UJ#J*hdiP2@>CR-q zp^V5&!-S<_2;oMN2xk*=j^OBHap0GCPY9@dX?{(0FDKR zJX6+fJF<~|eJj1I&C4w&Xdh;k-K^R}Wc^a@ut+(gZJ$GoW&HMBt6{}F7)%95bwr$e z!b*I65aDf|T1Ot7uC+;awN)I>a+YhdHec6{P&cpQqi4K`EEVw92s1h`8{GNq$}a@; zeQoY&@!&a|5y{WQ3*|C2p@6YIkZpGA2O-ZC>}%g@Yc{lIc?Q~^^05C%8xZ1iNtlYI z)J(JLugcVwF0{pIE*mnw7#8pDiIvI6C#&hE8X4wFZhKvJ82;hvTPmN>6j>@EVzXc9 z7{2WHWWPMNtm58yZ&ZVLg>ByOSZCL@JIo_9Vu4sD`Ms;HlY-e7-&w{CB(!J`QS{94 zKPsr!_5Js}|7i#+JR;RS490f9_eW})l->YN0e+Y@y;2d2D9KH0|oN%Gt z(pnMeULGUx@+8YmOZ}i9n{=@au;1Ttmd7w6<0H{#&C<)nB25{GTC}IC|M@%T?#YR5 zhcxL{Qkg!&LnnM`6sGj|O;0gjA)ZPxm1MZpmuMB2oXZd8DvMqSPsaSAogrGEA4Ghh z0>2F?y%r3=pomiL`Zm@NOEIH-UfL#_UsQB>fJ3QL8tZsIQgKYC@Bh6m$Tz;NJzlLG zm+^n3bv~li958+sA^^}IoGtR&25P(lJVS%u&0XEQX%p*vr3kj@3LevtS-rJ_&W|yc6HqncNaY=D}EZ2fi|}|V2$8? zgA93fQu+$xx*2kc*k9`}dnOyOB+OxinJdhBxUMSd@3fMQc(U=!s65)hbZ;Gk@rElf zi@l2X7)T%l@Lv#F?RS|zj;i~8lQp9D90!Z`!Io`zWq+X03}BuqF_KN=Kg-Is0P}29 z$aZs+lUvl6f-KEqdn=P&p`M6Q<@&0VGyyb5AZTkxj%pY z?IK}Pu7n4a#S^0uA6OqKwRqxkd&IV6S?)?Oq^T{u{&r_c(pI}r8pE&R{DbbGL&Ge) zOU+oupL@#BsoxD75jUF0aKiqg`II_@y(BZd+(4WnF^@LRk7|r#Z7(j%S4j2md*g!F zGT^1grzOXR7=5P%d*T{KsbRuOWN>2q0i06u$5G;YL}Og=9#7J>jNVqef}XX?P#nnt zKZi-|r|masfhcWJw5-%IJBW?l-B#>3lx zL+OoAVf$|`J*{W=o0AoPq#>9&l2tzWA7rX<$1%(!VnF_lEib?@a>`UL@*jfiUazE> zwxeRfD1w&xHdU$>Sk?*EgoVJ>AY?d^P*dS8OCAp0*8T=$R_ffm*QBL~r?|M2oU`&Q zE~dw9Gt2*dNi#Eicjj8TU*{>8S#&a@C+@y5Ev{^jIum6?#*_|drYYJ{bSkGfb}#7- z!<5Kg%-228)N|PPxZep>Ii@88Q&b$NN` zqqdJ~%&(FGf(0$W)XOOHHu_nzEo&y(*~Ma{8SmzBY+?P-(gb^c9UXjwu=eT02kSR) z^*-LAHnp+E(kZQtV5C%M;getC5j!zWd>?Afs`Ft6Fhn_jYdddIE$Y>8iLnh|xKFj+ zxHDe9mGTE4d)h}5e#Jrz6izr7p8Vc|`XSG3{k+hqsHDMM#x;hI$127(VRe>`&mRLV zcHGT>FUQ3%W@Thuk==^$+(}5Ecq%$Yun%haJvvOcW%FR^f|Ge0lsYP=XB0C<)_sZ9 zvzuB(ThQm7mnD~6|2q`ek<7&gGTt%~TrD*an-m{`Byc!&CUH^hTAqY?8Z>9;+*a~luvD2nL1L@Vs$!vRqh6v2DD zqq~*(6ahGqw(ulCC;B}HrTkTuzOT8})CUigvjUTPfjj|iN2=XG)lTuMQUu%0vlg}|_r{=~MNzKGhVw9tf%`o|*I_brNm9&~ zJGxv8HHnsOZza+Ct&J7Q%Vjw@?L~IY8%mTk^B`hMTwq47YihX}jp2UBKxZAYt=>Va zJa3ocxcD6{zhEIMDE?2)iTqSqe?eV+A3G;M9@eq$8}1H6>)({t>uE@0+eOK z7)3BMji!G+UK;3Q#jiZnFySdd!!LDT`gT^{D^f4%SeKR&OZWv;Efqc{Q~xDqWYlV)q^7f?2E1wq=5roAn1hNYIKVy=9ZcoqhT+?Kuoz?I-t#&vHF>C+H*d@XB zTwUrH3usT7r(Dt{j1h7w;wljjl04%mjSgw7i3F=jlVy<$H(y}97%m9Jr&%4ts5Ea_ zQPo$ShX7_&ZOON+`iO#MX5nQSa-7M#N$C^?9hoyK5nE4m<~>3ML$jQu#?7KZ%|>Bb z!`OB+(L`18e!@s&@<60X)GGTC@4}5#GcH@qH z#9q1mln-hZe+pr4KW!=%8dAB~N-&tw%Ge zfcbQjdzXF0gZ58Y8VV=o$AtW+te3$l6fy}g^$h~AJ{@-`3#l%e2|2=dzN`wJ7Z^%= z`8HmHvGSAv+QNd)U)4z)XnlvmapYm}eV_ACoo2WsNhcEz!YAt^BZg``uoWy&Y1@)( z6&Dd(e9TjcYqcjUmkQDvbnK8p$5hLiYbUuoBUX+OPaNTcVZhI($F#C?!LtTU3C>DB zC6ylcmkm2Oxnv^Unuh!c4h$IxKck$g*V^tkXMPdsEE4@|k?2=#>%I02_tGm>yQIEWJkyop1B& zY#x=g^M|q!iakM=k%o#^iP=BNq338?`SYF`bY7%({2TP+Cq+!@6Zh1&EL1cvX%6uk zUR%EDpbE9cWPfAtqmdBuCSzs4#4%VhZTC0J7?eg7+5V3|H2e!_lhN!*TJGIreRAq@ z^XYj99|wzeyGI;%;_GB97RWmp70mDPmit%dY`?gaYmd0yly``LxAHkP<$(RJRM|Fe zL47*vaGMq&yRzL1%`qY?HAZ*O(GG=cXWKfdoY>QWOxgI7cuDZ~y6`o2iI~Ju%WUbb zto-as%qsDa)MA2%U@u+=SP-nZv$C1N9VhB0Fad+T!@|mFBiS#j;WhJp3LBkK$P%;n z6`=@f0P!dLwn*oB5yv_=|0cM7uDG}|hk@Fick?9w9btrlR>bdp%f!@|D*mF(OTq40 zBG`>TEAs|_g1`R&eC5!SFXG9*Yix@`PcCL3V)}%wsuC2~>Q>U&cJ#v!&4Gw#fQs^F zndRb|A6b?3qx8)sLos1vmwctlH{pl+@RQ44b9}MeyuAs86)vH~!LfOBc>d2v3X5jd zn-=y{Shb@2*^eV?*xy2uXe1dY{9;dp>ZUpaN>xcds~v?u{1Oo_cnN@0Dc zm2lToL}dN4#=+8$KDO7Sj9iNl)XqL||8;Fz@N%oneS`)oQ@6i{J->px1#y*dZs0rW zZMBf5(7YX$!(Sw*igHd6IuS6+HpvZtYJU(a<40eTZ|}j8_-v@dyhW&3yi_dT&~eD( zUh0NbM9gKT8Z=ulyX?zkG^cFM;(^6p65-h7lt3Qvb}`X&b7$<;JOS1IV&<~Ed-Z%y zV(yEwfd+E5{KQrl?dq&OsIWFig4tf3rt^33Wd2JcczNHEnhqwK&|SqM{Vo zS8LiTR89-jf?fXvFD;XW7QAKT(mV322{gjHP-}r5>SP-8>pf<%lY3?Mmzoqs@b}z~XIKph+VFjeNotG`M;+#v4 z;Yj^Xlsu>9^%V(ADXfvvI4jfxmcnRtnCUjk)VPtYeH5C9sJuC=7ABd?Q?55OxG%S9 z8pC0Le37t!psmRh*v-X5Fq% zS>v^cN4|_B9kU!tQqVi)j@kyd_IA3I^i3wna!L`1amw+5&4F|?^FL`bOmwC#+5EIr zZDeeZW0A>#+=w|Qpi3iaw7{CC{N;=XL=EN_GAGop>3TuZK2>#^1-eXyj_`Zg&K{A_ zrk?(ZQ%k79F}VXf@pg67!7D4V2z&h~NT0)vHV_7h2XUN@G@r zy9~?M1{qnZ|1J+%v%F`wT3ym+5g5#}nSWH$)vo;~J`iJ@Tc)Am_a|_SLjA&wD)Se4 z1T&oTSMsTHYOSW)a?5%m4i~UhG2&{uZn3`O=CAWihH4*n=+WqNHvFG$k>RdA@#^=Z zZBleQ`_;{uc-4kABT9-O;`!7p4z#-->waEUMaQv<=Fms@uW+5Sq=j3$Vzz}+1||QD zC>DELx=iSJWc>Zb{6|{*37q0R2K(!p+io_PkQSrM4ngiN8#-9U>)TS}fr=~w&f+#@OWO7K9{d$T5v1vUw0x4JcBkqcxs!PQ6Sj!D&vJ(ux|B#N7 zGSzNTKX{DBn=TcG`#xoDDDIVfKhGTGu~IC4#cz|@EQs=Zo>W|F33_a2uQ?O);B1H! z#*a2R6?r}ajcJPzw_+Ih}o&G%N)Mq_d&NeADH- zJ2<(7hbOlcLSv&d)K$apcc9CC?Y2q(^x^8>aB3SK``VR+CdWMMC=?Pp3ljV4STXr- zK{hH>@ZWi%&H=>|xh6I58^}p*=8XJbNjreI9rRgooik0Ua^=slDziX0lJUFj@S ztCsLoVqP{B@4@hI%vcmCBaPYmznhFMa-=B6Bj%BX&RvZxQxk3~6jO)U6Hc{f`Uja0 zzgms4=H9wXr@HxENIX7h0n9sqvE_HokwykZ`ua4kcGR-k4acVLPy0zk%Z->%zdP0HWX{D1LLx#>Y2@CJA3zw1qg8^l3fXJv2S^h=V2c%5Q^D%QvsgsE2&WKITgj z_F%HT+~Yzpew0QhLL`oQq4%It!Wv@-?pYwQJu+&f9t~U)nZ}jfzYY*DP7W)6rujwG z+J`v$d|55Wcchy@3)M0)b|@hhkFOlDc1a3jj)&~}c4cT@N0>-GxN!4Lt1{jQ;%Znv z0Xvvmn{%vP0M@NZ)5LhJK#hc3#xFdXJ0zhnkLBy#aOp2()7N~-`-9k1og+&^!X+5( z$W(=OZGNed1cwTtw!~E0zL#6HbB*&q*!#*_El+e;QMQDo+EMkUyhI;2(+?Ib>(0n4 z*VlP;UE(*6faJnA=QT7s{4v((!%mEAp4)XMV`LIDneK053i>@Xvm>4@dM9S@y~Jfj zoQFT#ZLkdF-dy4G4j+yUMV}0i{OT52cNboka;h-Glk(h;-EZnGoL*(=(s_jRYKH1- zU!J`AXZ~pdV)0j8qcy~iyZFnXeVbr)_)>y|Fuc^;G(C$(!&tkgXCLVhgfHBHsZmVG z{cLQvevgu?;$z;G(JJf}g<@PA+>jLIHl<%H5DxpsVghi;^d zsZJM#Z}iu(%B7sQGja=G9qVPEqn8JkBA8=UB>hGUQw_gT=W!4y3u9vU=C$2{%!vyr zs_aHK=j3_n2Kg+bYyz-jxNpQKbycCX+M32RPL+$hb?WpbCPlZBNpP{$e+AZiyqBl? zPKh9DK>SHD%X?Tdk8^>rjIdgOm`)hPS$@Egf$E6PYy24-6u`OJ)jrxb{5>y5kHUECGKq&+ zJ*L%x>CBC}vk)Wzv{l<87Zzhb;k0o^{i$y=A*Xz_58f{HFpHvQSoj| zBrOa4Uu8R5`76X_Lb;=SZ+cAgC3N9vYyGfm&*@iKBrpSZ+=Y<5XcG&+g!ru;FKkJ; zm}nHCF~&aJ*W%BbF-%g}c$geeIo@%l(JBjZRzCfM!#8g(ZSSvc7NI)Ep{2;#p@ny> z3Gda_!HJdc&a!p3SUfzZM75)x4#1=ar=9nS?+h=oX%N){j$532$*N-?JkYABE(=s3#JV0S2hF7{- z)9hn@i0ymK8XyxE-gR}2hxA73PRg_UA*1+K+-x4rg5VHw=8u6QiX0_Bg5Y`{$Xsme zP3~WvEAtz!Rm)O@V;J$+z_%{G;g7RuwjEg}*~3Ej_2x`!Kv&n1yLWEV-w>AsqZfp2 zeD{EG@%3uU?V57j$wY}h^t8PXR2ApL`Tk*KX|1i}+I6z{-8*+zD-T~xOW*N9FdBm9 zWF{Q6csxDA+9?_qoNlw2uRO9s&ReH;lcTN&H>E0#ikv*VO)`qa5!car?svi1z}vi7 zuSM-s=m*gUGqXxv;s(fO&U~Jc$1Ia9W#)xm8IC%Y29%C&&6C`Jkyn7gM^jEyJ*3}C zMOGBSF9$dY`{#kf`5m^>25Wgy?SuW&pf?kvQm@euM(hy!@^;j+^&xzWU=1|hH`yE< zCwqTAQx?(ZcFV?JI@MN_$)^$KQ2rPzN1-f{WaKTDSy?Zh=uZYN_?6SPPUV%RE-axn z(k>>))Io_7IqALTPwK$D@4!*=&;_i}F4jD7BgxXsl=ZW~XR#|U#tO48;AxP+7oCa! zSFwat*@hdP+=EOHm&xH1m@%wsHpfHd6iT}Qu5k`k9Uazp{6Z=m6C`ym zVj#I;*$w>Ww`IP9RSTA0yu>nJ#=BtQyX%CyUTPsZ5f!{E@^VX2u_&obKJicnReF{{ zF+13C-l54Pv!n28cF}&$8d-+R*S>zreOQ0*wey0vgguaU*v1A98Uvu-aOz|XKAYK zf-f^PG~+o@pGE?%s$)NTHlSIviNKQ-CWCqed;QriFCkhM7cW_0&Tcs**G)S|o)ZL8 zX1RN2d5>fE#HO+Iet+F?k9s(R=vTyJ5@>ns;y-5K<<$Pm>BnpN6(m^brLXf5c%{m zmdWhAT_8vSGShiwy%)hQx4oEbA2uXWJ(ZRB3eQVfAe}NcxWm^x{^1xPr)DX481cQm zFN6o_Hf#wnHzHkZ&s^_sS*1}W4rZHNomHi+97Mm9?b7>LovXG9W)x`di$xftf)k;q zuW>fWE$CmS|7=aL8hs%ddRWq-7P-5)WC)_w`W(?g2fxh`<-_;|wu1IX@V4a`<0>sr z8zJr=QAZh3xK6s~gc`~m*{7ESKIk5aG#bstj??3@X{5T@bWEnP)fdD$DH}t-Z)y^s zWfOF;PoCI*Xs^)y_|4seEPuz`t{%=FF}<_eEDNI-DR6U-*UbVvw&Oi`QZ!ohX7*l~g-B zi{qVf-}aFlukdo!c(+YLeV$yNlq?gdvb{~VgCZu%zMgfvbH+bv3GoBlEz77mByJ}= z_$-k38{R6+wrZ2$JgwwsU|1ito%2^=Hb*kc3_SEI*B%<>;&k=rc!m3gi`qYOkF*mn2N;mc6{zVVK?Oj)3Ju$H3KrxXJ`*^#DB>(7H zWp9i%gF&j6v42|V!%n^n|99DqbNoW^MnO(=MxT!p*gl1@uxB1$q6j|2aVE^L^xPli zi+>}mnXR4XFSdrhWmD8*j3~5?R_7;w&S3y=-#mZEBJ9*ssWf!ugh|xbet1)ocQhr1 zavrVzkQ!l+UvCshw@*?~k|ipf=>vhFeRdFjXCcdiC=vUEue;XLTvy=J+a3BT9yk4l zZjwasx|Ez^vzagI?FCmi61wMwEQ^^9$T!DpRB;C;TGZaYYa{)C5$upNTYb0Ut9efk zRA|m9S#ehjzv*vRr}ZBrns0wlafNUn3ilM*-;8Yh)(!7ywackTjd)0FD440VD#6fDHnH1OOOPFTwmiWg5y3 zx-x@|F+Ty|jA0Rglc8AZ&mE3(?baWJ%^7CDgkhY z$OhON8JcNG@Zj~pKD-;k=dOOF5hw)p8O)PD#~Cd0Q;Z=34R5}s1|aqaq#Y8rX`k#j zpX~Rrm6QUwZ-E?|Asm7D|Fg02XhhF{bc4SW_7hi;S42<%(K zelct<|HD_rJEIW`VB$0^;Qk|AgnbO`{{&lj%L_w6)SfZ`%A7;KMpgjI6x1Q~NdV^n zX=acX&^!QTfvf}|TLATy!G;2;#Rj_`QtcUaWd0I~sqjv1lc47SY(rFOq$c& zYY^(C4eV}AMg0o93(`=3*#Ic$-Er7OLAOsBOmpeis5vt1mVWn<6`%cRJkNa;vFA~y zWB?6W-GE&*H1@A)x{10Ad-=BvrkQ&iWp53;8KWOr`q)Q9eEQLh{%e|^q3)v5IE72| z;c-;P!evMV>hs)!Ph}JWfkMHP7M`;x6be4M5!A`kAg&95T##sc2;P#W9yL-AHuodZ z4{T8*qhRx;MITW$29j+=-$rRqVVa{hp`Y8JMjm3IEfMG*l=gQ_vrXhjN{xkZdks_> z7P@Z$?G@PO`hDnkWYow27CHkNv>`0Cr^KKQV|(xAU4!BQjmERYv1z||QUxFxCy z5Ci@77f66~lc1>~VhKc<0I`tiOPE{qH;9K8y@VgqCgGA-zXajE4kti-bNwWE3x(2^ zEojc12H{cF4J~Nqnqv&(TWkWkxnST?Rhl#-*J2E#de;Q{dn={~rO}!+w{QDM9W#Y4 zCc%{UgejDp41>0BOq;i*U<{+$Z3=BWYS3<)LUzYs(0LEPT zbJ`G;kB7?6z@V)V4<*!N;Bh*Fhrap_235!K&BkXjhEctWhraBDDNQ>bdSd`>*YVJ; zE< z$uTg``ago70*%Omc|%Gw=z;$`z@V4FJbclSd<+na5t)YI!!T*+yP=PU12bX4&|m{L zG}>T4`vxn96a1q37Xe57Fa249wJKP9iu}Lg{{)CRhH4T2Q>dYGgZO{5p`wooj?FbR z5N^nsPu39I^B??M5wyq#`^7xNsLA%A5zqzLgOY5ptIP~f)_s_g!L|jq^Rl3GHdsd! z!+_Xi{X1arHc~p6lNdM_%o(oCc-T_lOqER%a7w^16b9E&^XC>D?B_Oq)(xB?efIxv z{QvFce|_u!I)(xa`CksIw8fIR4Sy4GPtc#)|2E^lNB+O?|1J%U(7+`dGMu0)TP)FV zM*vp`Ew{ruVhp2Lo(*yA;Q4L9H?pDqpZSSw=nRY{hGDhY3(rrt#PqDS(L02(0^zRc zgx!X644NOTd3}`row){10CTMWkRRtP%o$ReK@0qk2y+Hq0rQ5Z!=UHE+0bdYGp-*U z!<;pch93Xd8iFD|9bo9WK@;qQa_zAR9~HbcO97*-z1{>*&?hX3e}Kn1`(EGxfq4i3A-I$KsIS)Cn_Oar2QcvF>Oy z!w8NY{qG1unpIfFN1k%*|ME5vZ8dy48V)M?e~49|#i{=->Q=)O(lB{g$D#RaK3#CL zK4M$k4*I8yc-3(z;=(?xVZy`=F3HTy@CYX(1oc!E90k93x&T|Ev4Q;f zU}ShRV5l1Yqdqjmz;%tob^;5nT8p(LBG$O9b#-(1Sm)_Q_3@?A88J%uf@<%IWqo`e zhGbBNE7sB2a6Nr4LnHJusP?mOBS$0fa%kYQzxiJubo&&)ANJGakh>f9%a6yO`&Spc zVb_`&%F}(+|D8E8MbLRS>_&-!_k_?eE%#)hkup`1oIr+>n2FcyEpJupuA7q3U$gPo*Lf*!`npYQ~XMW66H7z;k( zd2oXbiBk;Kx?{ik*s(P*XXt<-QRL91JJu0-uNWeEU;{qt4X{r6q`N7gjL-ah_zL)$ zuaZMr4=gcOf5r@Frh&VxfVO&0Abehw*UYD diff --git a/webgl_videotest/basis.js b/webgl_videotest/basis.js index 73aaf58..f89ea8e 100644 --- a/webgl_videotest/basis.js +++ b/webgl_videotest/basis.js @@ -1 +1 @@ -var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}var arguments_=[];var thisProgram="./this.program";var quit_=function(status,toThrow){throw toThrow};var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof process.versions==="object"&&typeof process.versions.node==="string";ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;var nodeFS;var nodePath;if(ENVIRONMENT_IS_NODE){if(ENVIRONMENT_IS_WORKER){scriptDirectory=require("path").dirname(scriptDirectory)+"/"}else{scriptDirectory=__dirname+"/"}read_=function shell_read(filename,binary){if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);return nodeFS["readFileSync"](filename,binary?null:"utf8")};readBinary=function readBinary(filename){var ret=read_(filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){thisProgram=process["argv"][1].replace(/\\/g,"/")}arguments_=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);quit_=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){read_=function shell_read(f){return read(f)}}readBinary=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){arguments_=scriptArgs}else if(typeof arguments!="undefined"){arguments_=arguments}if(typeof quit==="function"){quit_=function(status){quit(status)}}if(typeof print!=="undefined"){if(typeof console==="undefined")console={};console.log=print;console.warn=console.error=typeof printErr!=="undefined"?printErr:print}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!=="undefined"&&document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}{read_=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){readBinary=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}setWindowTitle=function(title){document.title=title}}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.warn.bind(console);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["quit"])quit_=Module["quit"];var STACK_ALIGN=16;function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}function convertJsFunctionToWasm(func,sig){if(typeof WebAssembly.Function==="function"){var typeNames={"i":"i32","j":"i64","f":"f32","d":"f64"};var type={parameters:[],results:sig[0]=="v"?[]:[typeNames[sig[0]]]};for(var i=1;i=endIdx))++endPtr;if(endPtr-idx>16&&heap.subarray&&UTF8Decoder){return UTF8Decoder.decode(heap.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,heap,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer)}function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>0]=0}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferAndViews(buf){buffer=buf;Module["HEAP8"]=HEAP8=new Int8Array(buf);Module["HEAP16"]=HEAP16=new Int16Array(buf);Module["HEAP32"]=HEAP32=new Int32Array(buf);Module["HEAPU8"]=HEAPU8=new Uint8Array(buf);Module["HEAPU16"]=HEAPU16=new Uint16Array(buf);Module["HEAPU32"]=HEAPU32=new Uint32Array(buf);Module["HEAPF32"]=HEAPF32=new Float32Array(buf);Module["HEAPF64"]=HEAPF64=new Float64Array(buf)}var INITIAL_MEMORY=Module["INITIAL_MEMORY"]||749993984;var wasmTable;var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}what+="";err(what);ABORT=true;EXITSTATUS=1;what="abort("+what+"). Build with -s ASSERTIONS=1 for more info.";var e=new WebAssembly.RuntimeError(what);throw e}function hasPrefix(str,prefix){return String.prototype.startsWith?str.startsWith(prefix):str.indexOf(prefix)===0}var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return hasPrefix(filename,dataURIPrefix)}var fileURIPrefix="file://";function isFileURI(filename){return hasPrefix(filename,fileURIPrefix)}var wasmBinaryFile="basis.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"&&!isFileURI(wasmBinaryFile)){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return Promise.resolve().then(getBinary)}function createWasm(){var info={"env":asmLibraryArg,"wasi_snapshot_preview1":asmLibraryArg};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;wasmMemory=Module["asm"]["memory"];updateGlobalBufferAndViews(wasmMemory.buffer);wasmTable=Module["asm"]["__indirect_function_table"];removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){return getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}function instantiateAsync(){if(!wasmBinary&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&!isFileURI(wasmBinaryFile)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){var result=WebAssembly.instantiateStreaming(response,info);return result.then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");return instantiateArrayBuffer(receiveInstantiatedSource)})})}else{return instantiateArrayBuffer(receiveInstantiatedSource)}}if(Module["instantiateWasm"]){try{var exports=Module["instantiateWasm"](info,receiveInstance);return exports}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}instantiateAsync();return{}}var tempDouble;var tempI64;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback(Module);continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){wasmTable.get(func)()}else{wasmTable.get(func)(callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}function demangle(func){return func}function demangleAll(text){var regex=/\b_Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var error=new Error;if(!error.stack){try{throw new Error}catch(e){error=e}if(!error.stack){return"(no stack trace available)"}}return error.stack.toString()}function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function _abort(){abort()}function _emscripten_memcpy_big(dest,src,num){HEAPU8.copyWithin(dest,src,src+num)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){requestedSize=requestedSize>>>0;abortOnCannotGrowMemory(requestedSize)}var SYSCALLS={mappings:{},buffers:[null,[],[]],printChar:function(stream,curr){var buffer=SYSCALLS.buffers[stream];if(curr===0||curr===10){(stream===1?out:err)(UTF8ArrayToString(buffer,0));buffer.length=0}else{buffer.push(curr)}},varargs:undefined,get:function(){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(ptr){var ret=UTF8ToString(ptr);return ret},get64:function(low,high){return low}};function _fd_close(fd){return 0}function _fd_seek(fd,offset_low,offset_high,whence,newOffset){}function _fd_write(fd,iov,iovcnt,pnum){var num=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];for(var j=0;j>2]=num;return 0}function _setTempRet0($i){setTempRet0($i|0)}var ASSERTIONS=false;__ATINIT__.push({func:function(){___wasm_call_ctors()}});var asmLibraryArg={"__assert_fail":___assert_fail,"abort":_abort,"emscripten_memcpy_big":_emscripten_memcpy_big,"emscripten_resize_heap":_emscripten_resize_heap,"fd_close":_fd_close,"fd_seek":_fd_seek,"fd_write":_fd_write,"setTempRet0":_setTempRet0};var asm=createWasm();var ___wasm_call_ctors=Module["___wasm_call_ctors"]=function(){return(___wasm_call_ctors=Module["___wasm_call_ctors"]=Module["asm"]["__wasm_call_ctors"]).apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return(_malloc=Module["_malloc"]=Module["asm"]["malloc"]).apply(null,arguments)};var _free=Module["_free"]=function(){return(_free=Module["_free"]=Module["asm"]["free"]).apply(null,arguments)};var _basis_init=Module["_basis_init"]=function(){return(_basis_init=Module["_basis_init"]=Module["asm"]["basis_init"]).apply(null,arguments)};var _basis_open=Module["_basis_open"]=function(){return(_basis_open=Module["_basis_open"]=Module["asm"]["basis_open"]).apply(null,arguments)};var _basis_close=Module["_basis_close"]=function(){return(_basis_close=Module["_basis_close"]=Module["asm"]["basis_close"]).apply(null,arguments)};var _basis_get_has_alpha=Module["_basis_get_has_alpha"]=function(){return(_basis_get_has_alpha=Module["_basis_get_has_alpha"]=Module["asm"]["basis_get_has_alpha"]).apply(null,arguments)};var _basis_get_num_images=Module["_basis_get_num_images"]=function(){return(_basis_get_num_images=Module["_basis_get_num_images"]=Module["asm"]["basis_get_num_images"]).apply(null,arguments)};var _basis_get_num_levels=Module["_basis_get_num_levels"]=function(){return(_basis_get_num_levels=Module["_basis_get_num_levels"]=Module["asm"]["basis_get_num_levels"]).apply(null,arguments)};var _basis_get_image_width=Module["_basis_get_image_width"]=function(){return(_basis_get_image_width=Module["_basis_get_image_width"]=Module["asm"]["basis_get_image_width"]).apply(null,arguments)};var _basis_get_image_height=Module["_basis_get_image_height"]=function(){return(_basis_get_image_height=Module["_basis_get_image_height"]=Module["asm"]["basis_get_image_height"]).apply(null,arguments)};var _basis_get_image_transcoded_size_in_bytes=Module["_basis_get_image_transcoded_size_in_bytes"]=function(){return(_basis_get_image_transcoded_size_in_bytes=Module["_basis_get_image_transcoded_size_in_bytes"]=Module["asm"]["basis_get_image_transcoded_size_in_bytes"]).apply(null,arguments)};var _basis_start_transcoding=Module["_basis_start_transcoding"]=function(){return(_basis_start_transcoding=Module["_basis_start_transcoding"]=Module["asm"]["basis_start_transcoding"]).apply(null,arguments)};var _basis_transcode_image=Module["_basis_transcode_image"]=function(){return(_basis_transcode_image=Module["_basis_transcode_image"]=Module["asm"]["basis_transcode_image"]).apply(null,arguments)};var ___errno_location=Module["___errno_location"]=function(){return(___errno_location=Module["___errno_location"]=Module["asm"]["__errno_location"]).apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return(stackSave=Module["stackSave"]=Module["asm"]["stackSave"]).apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return(stackRestore=Module["stackRestore"]=Module["asm"]["stackRestore"]).apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return(stackAlloc=Module["stackAlloc"]=Module["asm"]["stackAlloc"]).apply(null,arguments)};var dynCall_jiji=Module["dynCall_jiji"]=function(){return(dynCall_jiji=Module["dynCall_jiji"]=Module["asm"]["dynCall_jiji"]).apply(null,arguments)};var calledRun;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function run(args){args=args||arguments_;if(runDependencies>0){return}preRun();if(runDependencies>0)return;function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}noExitRuntime=true;run(); +var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}var arguments_=[];var thisProgram="./this.program";var quit_=function(status,toThrow){throw toThrow};var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof process.versions==="object"&&typeof process.versions.node==="string";ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;var nodeFS;var nodePath;if(ENVIRONMENT_IS_NODE){if(ENVIRONMENT_IS_WORKER){scriptDirectory=require("path").dirname(scriptDirectory)+"/"}else{scriptDirectory=__dirname+"/"}read_=function shell_read(filename,binary){if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);return nodeFS["readFileSync"](filename,binary?null:"utf8")};readBinary=function readBinary(filename){var ret=read_(filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){thisProgram=process["argv"][1].replace(/\\/g,"/")}arguments_=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);quit_=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){read_=function shell_read(f){return read(f)}}readBinary=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){arguments_=scriptArgs}else if(typeof arguments!="undefined"){arguments_=arguments}if(typeof quit==="function"){quit_=function(status){quit(status)}}if(typeof print!=="undefined"){if(typeof console==="undefined")console={};console.log=print;console.warn=console.error=typeof printErr!=="undefined"?printErr:print}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}{read_=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){readBinary=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}setWindowTitle=function(title){document.title=title}}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.warn.bind(console);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["quit"])quit_=Module["quit"];var STACK_ALIGN=16;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;HEAP32[DYNAMICTOP_PTR>>2]=end;return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=Number(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}function convertJsFunctionToWasm(func,sig){if(typeof WebAssembly.Function==="function"){var typeNames={"i":"i32","j":"i64","f":"f32","d":"f64"};var type={parameters:[],results:sig[0]=="v"?[]:[typeNames[sig[0]]]};for(var i=1;i>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var wasmMemory;var wasmTable=new WebAssembly.Table({"initial":7,"maximum":7+0,"element":"anyfunc"});var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function getCFunc(ident){var func=Module["_"+ident];assert(func,"Cannot call unknown function "+ident+", make sure it is exported");return func}function ccall(ident,returnType,argTypes,args,opts){var toC={"string":function(str){var ret=0;if(str!==null&&str!==undefined&&str!==0){var len=(str.length<<2)+1;ret=stackAlloc(len);stringToUTF8(str,ret,len)}return ret},"array":function(arr){var ret=stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}};function convertReturnValue(ret){if(returnType==="string")return UTF8ToString(ret);if(returnType==="boolean")return Boolean(ret);return ret}var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i=endIdx))++endPtr;if(endPtr-idx>16&&heap.subarray&&UTF8Decoder){return UTF8Decoder.decode(heap.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,heap,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer)}function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>0]=0}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferAndViews(buf){buffer=buf;Module["HEAP8"]=HEAP8=new Int8Array(buf);Module["HEAP16"]=HEAP16=new Int16Array(buf);Module["HEAP32"]=HEAP32=new Int32Array(buf);Module["HEAPU8"]=HEAPU8=new Uint8Array(buf);Module["HEAPU16"]=HEAPU16=new Uint16Array(buf);Module["HEAPU32"]=HEAPU32=new Uint32Array(buf);Module["HEAPF32"]=HEAPF32=new Float32Array(buf);Module["HEAPF64"]=HEAPF64=new Float64Array(buf)}var STACK_BASE=5738768,DYNAMIC_BASE=5738768,DYNAMICTOP_PTR=495728;var INITIAL_INITIAL_MEMORY=Module["INITIAL_MEMORY"]||749993984;if(Module["wasmMemory"]){wasmMemory=Module["wasmMemory"]}else{wasmMemory=new WebAssembly.Memory({"initial":INITIAL_INITIAL_MEMORY/WASM_PAGE_SIZE,"maximum":INITIAL_INITIAL_MEMORY/WASM_PAGE_SIZE})}if(wasmMemory){buffer=wasmMemory.buffer}INITIAL_INITIAL_MEMORY=buffer.byteLength;updateGlobalBufferAndViews(buffer);HEAP32[DYNAMICTOP_PTR>>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback(Module);continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}what+="";out(what);err(what);ABORT=true;EXITSTATUS=1;what="abort("+what+"). Build with -s ASSERTIONS=1 for more info.";throw new WebAssembly.RuntimeError(what)}function hasPrefix(str,prefix){return String.prototype.startsWith?str.startsWith(prefix):str.indexOf(prefix)===0}var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return hasPrefix(filename,dataURIPrefix)}var fileURIPrefix="file://";function isFileURI(filename){return hasPrefix(filename,fileURIPrefix)}var wasmBinaryFile="basis.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"&&!isFileURI(wasmBinaryFile)){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(){var info={"env":asmLibraryArg,"wasi_snapshot_preview1":asmLibraryArg};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){return getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}function instantiateAsync(){if(!wasmBinary&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&!isFileURI(wasmBinaryFile)&&typeof fetch==="function"){fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){var result=WebAssembly.instantiateStreaming(response,info);return result.then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})})}else{return instantiateArrayBuffer(receiveInstantiatedSource)}}if(Module["instantiateWasm"]){try{var exports=Module["instantiateWasm"](info,receiveInstance);return exports}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}instantiateAsync();return{}}var tempDouble;var tempI64;__ATINIT__.push({func:function(){___wasm_call_ctors()}});function demangle(func){return func}function demangleAll(text){var regex=/\b_Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function _abort(){abort()}function _emscripten_get_sbrk_ptr(){return 495728}function _emscripten_memcpy_big(dest,src,num){HEAPU8.copyWithin(dest,src,src+num)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){requestedSize=requestedSize>>>0;abortOnCannotGrowMemory(requestedSize)}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)}};var SYSCALLS={mappings:{},buffers:[null,[],[]],printChar:function(stream,curr){var buffer=SYSCALLS.buffers[stream];if(curr===0||curr===10){(stream===1?out:err)(UTF8ArrayToString(buffer,0));buffer.length=0}else{buffer.push(curr)}},varargs:undefined,get:function(){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(ptr){var ret=UTF8ToString(ptr);return ret},get64:function(low,high){return low}};function _fd_close(fd){return 0}function _fd_seek(fd,offset_low,offset_high,whence,newOffset){}function _fd_write(fd,iov,iovcnt,pnum){var num=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];for(var j=0;j>2]=num;return 0}function _roundf(d){d=+d;return d>=+0?+Math_floor(d+ +.5):+Math_ceil(d-+.5)}function _setTempRet0($i){setTempRet0($i|0)}var ASSERTIONS=false;var asmLibraryArg={"__assert_fail":___assert_fail,"abort":_abort,"emscripten_get_sbrk_ptr":_emscripten_get_sbrk_ptr,"emscripten_memcpy_big":_emscripten_memcpy_big,"emscripten_resize_heap":_emscripten_resize_heap,"fd_close":_fd_close,"fd_seek":_fd_seek,"fd_write":_fd_write,"memory":wasmMemory,"roundf":_roundf,"setTempRet0":_setTempRet0,"table":wasmTable};var asm=createWasm();Module["asm"]=asm;var ___wasm_call_ctors=Module["___wasm_call_ctors"]=function(){return(___wasm_call_ctors=Module["___wasm_call_ctors"]=Module["asm"]["__wasm_call_ctors"]).apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return(_malloc=Module["_malloc"]=Module["asm"]["malloc"]).apply(null,arguments)};var _free=Module["_free"]=function(){return(_free=Module["_free"]=Module["asm"]["free"]).apply(null,arguments)};var _basis_set_debug_flags=Module["_basis_set_debug_flags"]=function(){return(_basis_set_debug_flags=Module["_basis_set_debug_flags"]=Module["asm"]["basis_set_debug_flags"]).apply(null,arguments)};var _basis_get_debug_flags=Module["_basis_get_debug_flags"]=function(){return(_basis_get_debug_flags=Module["_basis_get_debug_flags"]=Module["asm"]["basis_get_debug_flags"]).apply(null,arguments)};var _basis_init=Module["_basis_init"]=function(){return(_basis_init=Module["_basis_init"]=Module["asm"]["basis_init"]).apply(null,arguments)};var _basis_open=Module["_basis_open"]=function(){return(_basis_open=Module["_basis_open"]=Module["asm"]["basis_open"]).apply(null,arguments)};var _basis_close=Module["_basis_close"]=function(){return(_basis_close=Module["_basis_close"]=Module["asm"]["basis_close"]).apply(null,arguments)};var _basis_get_has_alpha=Module["_basis_get_has_alpha"]=function(){return(_basis_get_has_alpha=Module["_basis_get_has_alpha"]=Module["asm"]["basis_get_has_alpha"]).apply(null,arguments)};var _basis_get_num_images=Module["_basis_get_num_images"]=function(){return(_basis_get_num_images=Module["_basis_get_num_images"]=Module["asm"]["basis_get_num_images"]).apply(null,arguments)};var _basis_get_num_levels=Module["_basis_get_num_levels"]=function(){return(_basis_get_num_levels=Module["_basis_get_num_levels"]=Module["asm"]["basis_get_num_levels"]).apply(null,arguments)};var _basis_get_image_width=Module["_basis_get_image_width"]=function(){return(_basis_get_image_width=Module["_basis_get_image_width"]=Module["asm"]["basis_get_image_width"]).apply(null,arguments)};var _basis_get_image_height=Module["_basis_get_image_height"]=function(){return(_basis_get_image_height=Module["_basis_get_image_height"]=Module["asm"]["basis_get_image_height"]).apply(null,arguments)};var _basis_get_image_transcoded_size_in_bytes=Module["_basis_get_image_transcoded_size_in_bytes"]=function(){return(_basis_get_image_transcoded_size_in_bytes=Module["_basis_get_image_transcoded_size_in_bytes"]=Module["asm"]["basis_get_image_transcoded_size_in_bytes"]).apply(null,arguments)};var _basis_start_transcoding=Module["_basis_start_transcoding"]=function(){return(_basis_start_transcoding=Module["_basis_start_transcoding"]=Module["asm"]["basis_start_transcoding"]).apply(null,arguments)};var _basis_transcode_image=Module["_basis_transcode_image"]=function(){return(_basis_transcode_image=Module["_basis_transcode_image"]=Module["asm"]["basis_transcode_image"]).apply(null,arguments)};var ___errno_location=Module["___errno_location"]=function(){return(___errno_location=Module["___errno_location"]=Module["asm"]["__errno_location"]).apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return(stackSave=Module["stackSave"]=Module["asm"]["stackSave"]).apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return(stackAlloc=Module["stackAlloc"]=Module["asm"]["stackAlloc"]).apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return(stackRestore=Module["stackRestore"]=Module["asm"]["stackRestore"]).apply(null,arguments)};var __growWasmMemory=Module["__growWasmMemory"]=function(){return(__growWasmMemory=Module["__growWasmMemory"]=Module["asm"]["__growWasmMemory"]).apply(null,arguments)};var dynCall_viii=Module["dynCall_viii"]=function(){return(dynCall_viii=Module["dynCall_viii"]=Module["asm"]["dynCall_viii"]).apply(null,arguments)};var dynCall_ii=Module["dynCall_ii"]=function(){return(dynCall_ii=Module["dynCall_ii"]=Module["asm"]["dynCall_ii"]).apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return(dynCall_iiii=Module["dynCall_iiii"]=Module["asm"]["dynCall_iiii"]).apply(null,arguments)};var dynCall_jiji=Module["dynCall_jiji"]=function(){return(dynCall_jiji=Module["dynCall_jiji"]=Module["asm"]["dynCall_jiji"]).apply(null,arguments)};Module["asm"]=asm;var calledRun;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function run(args){args=args||arguments_;if(runDependencies>0){return}preRun();if(runDependencies>0)return;function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}noExitRuntime=true;run(); diff --git a/webgl_videotest/basis.wasm b/webgl_videotest/basis.wasm index 91a3f219b9d5b798352bb87c49c2a23c6f54cba7..616761b1b15d822a699f518687ba8341d4176a7e 100644 GIT binary patch delta 105750 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 W*cP~(eF6OEWWbbqLNdQ$_WuAHd}^lv diff --git a/webgl_videotest/basis_wrappers.cpp b/webgl_videotest/basis_wrappers.cpp index fd6dcca..a758fe3 100644 --- a/webgl_videotest/basis_wrappers.cpp +++ b/webgl_videotest/basis_wrappers.cpp @@ -3,8 +3,6 @@ using namespace basist; -static basist::etc1_global_selector_codebook *g_pGlobal_codebook; - typedef unsigned int uint; extern "C" @@ -38,9 +36,6 @@ extern "C" void basis_init() { basisu_transcoder_init(); - - if (!g_pGlobal_codebook) - g_pGlobal_codebook = new basist::etc1_global_selector_codebook(g_global_selector_cb_size, g_global_selector_cb); } #define MAGIC 0xDEADBEE1 @@ -53,7 +48,7 @@ struct basis_file uint m_file_size; basis_file() : - m_transcoder(g_pGlobal_codebook) + m_transcoder() { } }; diff --git a/webgl_videotest/build.sh b/webgl_videotest/build.sh index c614d6c..91e76d6 100644 --- a/webgl_videotest/build.sh +++ b/webgl_videotest/build.sh @@ -1,3 +1,3 @@ # rg - I haven't tested this shell script yet (I use build.bat on Windows) -emcc -s EXPORTED_FUNCTIONS="['allocate', '_malloc', '_free', '_basis_init','_basis_open','_basis_close','_basis_get_has_alpha','_basis_get_num_images','_basis_get_num_levels','_basis_get_image_width','_basis_get_image_height','_basis_get_image_transcoded_size_in_bytes','_basis_transcode_image','_basis_start_transcoding']" -s TOTAL_MEMORY=749993984 -O2 -s ASSERTIONS=0 -I ../transcoder -o basis.js ../transcoder/basisu_transcoder.cpp basis_wrappers.cpp -D BASISD_SUPPORT_KTX2=0 +emcc -s EXPORTED_FUNCTIONS="['allocate', '_malloc', '_free', '_basis_init','_basis_open','_basis_close','_basis_get_has_alpha','_basis_get_num_images','_basis_get_num_levels','_basis_get_image_width','_basis_get_image_height','_basis_get_image_transcoded_size_in_bytes','_basis_transcode_image','_basis_start_transcoding','_basis_get_debug_flags','_basis_set_debug_flags']" -s TOTAL_MEMORY=749993984 -O2 -s ASSERTIONS=0 -I ../transcoder -o basis.js ../transcoder/basisu_transcoder.cpp basis_wrappers.cpp -D BASISD_SUPPORT_KTX2=0 -D BASISD_ENABLE_DEBUG_FLAGS=1 # chmod -R a+rX . diff --git a/webgl_videotest/index.html b/webgl_videotest/index.html index a302a4a..4962018 100644 --- a/webgl_videotest/index.html +++ b/webgl_videotest/index.html @@ -508,7 +508,7 @@ function rewind()

.basis file: - +