From ff4509a49629c2e547a32bb212c7888793766687 Mon Sep 17 00:00:00 2001 From: Muhammed Efe Cetin Date: Mon, 20 Jul 2026 13:37:14 +0200 Subject: [PATCH 01/12] benchmark_sources/generic_iree: add support for IREE testing pipeline --- .gitmodules | 4 + benchmark_sources/CMakeLists.txt | 6 + .../generic_iree/CMake/add_test.cmake | 131 ++++++++ benchmark_sources/generic_iree/CMakeLists.txt | 31 ++ .../generic_iree/baremetal/baremetal_stubs.c | 284 ++++++++++++++++++ .../generic_iree/baremetal/main_template.c | 256 ++++++++++++++++ .../generic_iree/iree/CMakeLists.txt | 77 +++++ .../generic_iree/iree/iree-source | 1 + .../tests/add_vector/add_vector.mlir | 6 + .../generic_iree/tests/add_vector/main.c | 2 + .../tests/add_vector/test_config.h | 81 +++++ build_programs/CMakeLists.txt | 3 + 12 files changed, 882 insertions(+) create mode 100644 benchmark_sources/generic_iree/CMake/add_test.cmake create mode 100644 benchmark_sources/generic_iree/CMakeLists.txt create mode 100644 benchmark_sources/generic_iree/baremetal/baremetal_stubs.c create mode 100644 benchmark_sources/generic_iree/baremetal/main_template.c create mode 100644 benchmark_sources/generic_iree/iree/CMakeLists.txt create mode 160000 benchmark_sources/generic_iree/iree/iree-source create mode 100644 benchmark_sources/generic_iree/tests/add_vector/add_vector.mlir create mode 100644 benchmark_sources/generic_iree/tests/add_vector/main.c create mode 100644 benchmark_sources/generic_iree/tests/add_vector/test_config.h diff --git a/.gitmodules b/.gitmodules index 5f56416..80f3a75 100644 --- a/.gitmodules +++ b/.gitmodules @@ -68,3 +68,7 @@ [submodule "benchmark_sources/audiomark/audiomark"] path = benchmark_sources/audiomark/audiomark url = https://github.com/eembc/audiomark.git +[submodule "benchmark_sources/generic_iree/iree/iree-source"] + path = benchmark_sources/generic_iree/iree/iree-source + url = https://github.com/efectn-forks/iree.git + branch = rv32-fixes diff --git a/benchmark_sources/CMakeLists.txt b/benchmark_sources/CMakeLists.txt index c6a91d5..1d85adc 100644 --- a/benchmark_sources/CMakeLists.txt +++ b/benchmark_sources/CMakeLists.txt @@ -10,6 +10,12 @@ endif() if(${BENCHMARK_SUITE} STREQUAL "generic_cpp") add_subdirectory(generic_cpp generic_cpp) +elseif(${BENCHMARK_SUITE} STREQUAL "generic_iree") + # generic_iree requires FRAMEWORK=IREE + if(NOT ${FRAMEWORK} STREQUAL "IREE") + message(FATAL_ERROR "generic_iree suite requires FRAMEWORK=IREE") + endif() + add_subdirectory(generic_iree generic_iree) elseif(${BENCHMARK_SUITE} STREQUAL "MLPerfTiny") add_subdirectory(MLPerfTiny MLPerfTiny) elseif(${BENCHMARK_SUITE} STREQUAL "embench_dsp") diff --git a/benchmark_sources/generic_iree/CMake/add_test.cmake b/benchmark_sources/generic_iree/CMake/add_test.cmake new file mode 100644 index 0000000..ef5e481 --- /dev/null +++ b/benchmark_sources/generic_iree/CMake/add_test.cmake @@ -0,0 +1,131 @@ +# Macro to add an IREE Benchmark test for Spike +macro(add_IreeBenchmark_Spike TEST_NAME TEST_DIR) + # Build spike if it isnt present + build_spike() + + set(TEST_TARGET ${TEST_NAME}_IREE_Spike) + set(TEST_MLIR_SOURCE ${TEST_DIR}/${TEST_NAME}.mlir) + set(TEST_VMFB ${CMAKE_CURRENT_BINARY_DIR}/${TEST_NAME}.vmfb) + set(TEST_C_HEADER ${CMAKE_CURRENT_BINARY_DIR}/${TEST_NAME}.h) + set(TEST_MAIN_SOURCE ${TEST_DIR}/main.c) + + # Find necessary tools + find_program(IREE_COMPILE_TOOL iree-compile HINTS ${IREE_COMPILER_BIN_DIR} REQUIRED) + find_program(XXD_TOOL xxd REQUIRED) + + # Generate IREE LLVM features based on RISCV_ARCH + set(IREE_LLVM_FEATURES "") + string(REGEX MATCH "m" HAS_M ${RISCV_ARCH}) + string(REGEX MATCH "f" HAS_F ${RISCV_ARCH}) + string(REGEX MATCH "zve32x" HAS_ZVE32X ${RISCV_ARCH}) + string(REGEX MATCH "zve32f" HAS_ZVE32F ${RISCV_ARCH}) + + if(HAS_M) + set(IREE_LLVM_FEATURES "${IREE_LLVM_FEATURES},+m") + endif() + if(HAS_F) + set(IREE_LLVM_FEATURES "${IREE_LLVM_FEATURES},+f") + endif() + if(HAS_ZVE32X) + set(IREE_LLVM_FEATURES "${IREE_LLVM_FEATURES},+zve32x") + endif() + if(HAS_ZVE32F) + set(IREE_LLVM_FEATURES "${IREE_LLVM_FEATURES},+zve32f") + endif() + + if(HAS_ZVE32X OR HAS_ZVE32F) + set(IREE_LLVM_FEATURES "${IREE_LLVM_FEATURES},+zvl${VREG_W}b") + endif() + + string(REGEX REPLACE "^," "" IREE_LLVM_FEATURES "${IREE_LLVM_FEATURES}") + + # Compile MLIR -> VMFB + add_custom_command( + OUTPUT ${TEST_VMFB} + COMMAND ${IREE_COMPILE_TOOL} + ${TEST_MLIR_SOURCE} + --iree-hal-target-device=local + --iree-hal-local-target-device-backends=llvm-cpu + --iree-llvmcpu-target-triple=riscv32-unknown-elf + --iree-llvmcpu-target-abi=${RISCV_ABI} + --iree-llvmcpu-target-cpu-features=${IREE_LLVM_FEATURES} + -o ${TEST_VMFB} + DEPENDS ${TEST_MLIR_SOURCE} + COMMENT "Compiling ${TEST_NAME}.mlir -> ${TEST_NAME}.vmfb (${RISCV_ARCH})" + VERBATIM + ) + + # Generate C header from VMFB + add_custom_command( + OUTPUT ${TEST_C_HEADER} + COMMAND ${XXD_TOOL} -i ${TEST_VMFB} ${TEST_C_HEADER} + COMMAND sed -i "s/_.*_${TEST_NAME}_vmfb/${TEST_NAME}_vmfb/g" ${TEST_C_HEADER} + COMMAND sed -i "s/_.*_${TEST_NAME}_vmfb_len/${TEST_NAME}_vmfb_len/g" ${TEST_C_HEADER} + DEPENDS ${TEST_VMFB} + COMMENT "Generating ${TEST_NAME}.h from ${TEST_NAME}.vmfb" + VERBATIM + ) + + # Create executable + add_executable(${TEST_TARGET}) + + target_include_directories(${TEST_TARGET} PRIVATE + ${TEST_DIR} + ${CMAKE_CURRENT_BINARY_DIR} + ${CMAKE_CURRENT_SOURCE_DIR}/iree/iree-source/runtime/src + ${CMAKE_CURRENT_SOURCE_DIR}/iree/iree-build-rv32-runtime/runtime/src + ${CMAKE_CURRENT_SOURCE_DIR}/iree/iree-source/third_party/flatcc/include + ) + + target_compile_definitions(${TEST_TARGET} PRIVATE + IREE_PLATFORM_GENERIC=1 + IREE_FILE_IO_ENABLE=0 + IREE_DEVICE_SIZE_T=uint32_t + PRIdsz=PRIu32 + IREE_SOCKETS_ENABLE=0 + "IREE_TIME_NOW_FN={ return 0\\; }" + ) + + target_compile_options(${TEST_TARGET} PRIVATE -fno-builtin) + + target_sources(${TEST_TARGET} PUBLIC + ${TEST_MAIN_SOURCE} + ${CMAKE_CURRENT_SOURCE_DIR}/../framework/spike/crt0.S + ${CMAKE_CURRENT_SOURCE_DIR}/baremetal/baremetal_stubs.c + ) + + set_source_files_properties(${TEST_MAIN_SOURCE} PROPERTIES + OBJECT_DEPENDS "${TEST_C_HEADER};${TEST_VMFB}" + ) + + target_link_libraries(${TEST_TARGET} PRIVATE + sim_spike + -Wl,--start-group + iree_runtime_unified + iree_base_base + flatcc_parsing + flatcc_runtime + -Wl,--end-group + m + ) + + target_link_options(${TEST_TARGET} PRIVATE + -nostartfiles + -T${CMAKE_CURRENT_SOURCE_DIR}/../framework/spike/lld_link.ld + ) + + add_custom_command(TARGET ${TEST_TARGET} + POST_BUILD + COMMAND ${CMAKE_OBJDUMP} -D ${TEST_TARGET}.elf > ${TEST_TARGET}_dump.txt + ) + + add_test( + NAME ${TEST_TARGET} + COMMAND ${TOOLCHAIN_TOP}/spike/bin/spike + --isa=${RISCV_ARCH}_zvl${VREG_W}b + ${CMAKE_CURRENT_BINARY_DIR}/${TEST_TARGET}.elf + WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/../.. + ) + + message(STATUS "Added IREE test: ${TEST_TARGET}") +endmacro() diff --git a/benchmark_sources/generic_iree/CMakeLists.txt b/benchmark_sources/generic_iree/CMakeLists.txt new file mode 100644 index 0000000..a09705e --- /dev/null +++ b/benchmark_sources/generic_iree/CMakeLists.txt @@ -0,0 +1,31 @@ +# generic_iree - Generic IREE/MLIR Test Suite + +message(STATUS "Setting up generic_iree IREE/MLIR test suite") + +# Configure IREE runtime for bare-metal tests +add_subdirectory(iree iree) + +# Verify IREE runtime is available after configuration +if(NOT TARGET iree::runtime::unified) + message(FATAL_ERROR "IREE runtime not available after iree subdirectory configuration") +endif() + +# Directories +set(GENERIC_IREE_BAREMETAL_DIR ${CMAKE_CURRENT_SOURCE_DIR}/baremetal) +set(GENERIC_IREE_TESTS_DIR ${CMAKE_CURRENT_SOURCE_DIR}/tests) + +message(STATUS "Baremetal infrastructure dir: ${GENERIC_IREE_BAREMETAL_DIR}") + +# Build spike simulator if needed +build_spike() + +# Set IREE compiler tools directory (where iree-compile lives) +set(IREE_COMPILER_BIN_DIR "/home/efectn/iree-prod-test/iree-build-compiler/tools") + +# Include IREE test macro +include(CMake/add_test.cmake) + +# Add tests +add_IreeBenchmark_Spike(add_vector ${CMAKE_CURRENT_SOURCE_DIR}/tests/add_vector) + +message(STATUS "generic_iree test suite configured successfully") diff --git a/benchmark_sources/generic_iree/baremetal/baremetal_stubs.c b/benchmark_sources/generic_iree/baremetal/baremetal_stubs.c new file mode 100644 index 0000000..8cda87a --- /dev/null +++ b/benchmark_sources/generic_iree/baremetal/baremetal_stubs.c @@ -0,0 +1,284 @@ +// baremetal_stubs.c +#include "iree/base/api.h" +#include "iree/base/threading/thread.h" +#include "iree/async/proactor.h" +#include "iree/async/notification.h" +#include "iree/async/util/proactor_thread_runner.h" + +// Dummy bare-metal syscall functions to make IREE run in Spike enviroment without Verilator +#include +#include +#include +#include +#include + +extern char _user_start; +extern char _stack_start; +#define __heap_start _user_start +#define __heap_end _stack_start +static char* heap_ptr = NULL; + +void* _sbrk(ptrdiff_t incr) { + if (heap_ptr == NULL) { + heap_ptr = &__heap_start; + } + char* prev_heap = heap_ptr; + if (heap_ptr + incr > &__heap_end) { + errno = ENOMEM; + return (void*)-1; + } + heap_ptr += incr; + return (void*)prev_heap; +} + +void* _sbrk_r(struct _reent* r, ptrdiff_t incr) { + return _sbrk(incr); +} + +void* sbrk(ptrdiff_t incr) { + return _sbrk(incr); +} + +// HTIF (Host-Target Interface) tohost register for Spike simulator +extern volatile uint64_t tohost; + +void _exit(int status) { + uint64_t exit_code = ((uint64_t)status << 1) | 1; + tohost = exit_code; + while (1) { __asm__ volatile ("wfi"); } +} + +void _exit_r(struct _reent* r, int status) { + _exit(status); +} + +int _write(int file, const char* ptr, int len) { + for (int i = 0; i < len; i++) { + tohost = (0x01ULL << 56) | (uint64_t)(unsigned char)ptr[i]; + } + return len; +} + +int _write_r(struct _reent* r, int file, const char* ptr, int len) { + return _write(file, ptr, len); +} + +int _read(int file, char* ptr, int len) { + return 0; +} + +int _read_r(struct _reent* r, int file, char* ptr, int len) { + return _read(file, ptr, len); +} + +int _close(int file) { return -1; } +int _close_r(struct _reent* r, int file) { return -1; } + +int _lseek(int file, int ptr, int dir) { return 0; } +int _lseek_r(struct _reent* r, int file, int ptr, int dir) { return 0; } + +int _fstat(int file, struct stat* st) { + if (st) { + memset(st, 0, sizeof(*st)); + st->st_mode = S_IFCHR; + } + return 0; +} +int _fstat_r(struct _reent* r, int file, struct stat* st) { + return _fstat(file, st); +} + +int _isatty(int file) { return 1; } +int _isatty_r(struct _reent* r, int file) { return 1; } + +int _kill(int pid, int sig) { errno = EINVAL; return -1; } +int _kill_r(struct _reent* r, int pid, int sig) { errno = EINVAL; return -1; } + +int _getpid(void) { return 1; } +int _getpid_r(struct _reent* r) { return 1; } + +// Prevent unaligned load traps from Newlib assembly optimizations when accessing string/binary data inside FlatBuffers. +int strncmp(const char* s1, const char* s2, size_t n) { + while (n > 0) { + unsigned char c1 = *(const unsigned char*)s1++; + unsigned char c2 = *(const unsigned char*)s2++; + if (c1 != c2) return (c1 < c2) ? -1 : 1; + if (c1 == '\0') return 0; + n--; + } + return 0; +} + +int memcmp(const void* ptr1, const void* ptr2, size_t num) { + const unsigned char* p1 = (const unsigned char*)ptr1; + const unsigned char* p2 = (const unsigned char*)ptr2; + for (size_t i = 0; i < num; i++) { + if (p1[i] != p2[i]) return (p1[i] < p2[i]) ? -1 : 1; + } + return 0; +} + +void* memcpy(void* dest, const void* src, size_t n) { + unsigned char* d = (unsigned char*)dest; + const unsigned char* s = (const unsigned char*)src; + for (size_t i = 0; i < n; i++) { + d[i] = s[i]; + } + return dest; +} + +void* memset(void* ptr, int value, size_t num) { + unsigned char* p = (unsigned char*)ptr; + for (size_t i = 0; i < num; i++) { + p[i] = (unsigned char)value; + } + return ptr; +} + +size_t strlen(const char* str) { + const char* s = str; + while (*s) s++; + return (size_t)(s - str); +} + +int strcmp(const char* s1, const char* s2) { + while (*s1 && (*s1 == *s2)) { + s1++; + s2++; + } + return *(const unsigned char*)s1 - *(const unsigned char*)s2; +} + +void* memmove(void* dest, const void* src, size_t n) { + unsigned char* d = (unsigned char*)dest; + const unsigned char* s = (const unsigned char*)src; + if (d < s) { + for (size_t i = 0; i < n; i++) d[i] = s[i]; + } else if (d > s) { + for (size_t i = n; i > 0; i--) d[i - 1] = s[i - 1]; + } + return dest; +} + +void* memchr(const void* ptr, int value, size_t num) { + const unsigned char* p = (const unsigned char*)ptr; + for (size_t i = 0; i < num; i++) { + if (p[i] == (unsigned char)value) return (void*)&p[i]; + } + return NULL; +} + +char* strcpy(char* dest, const char* src) { + char* d = dest; + while ((*d++ = *src++) != '\0'); + return dest; +} + +char* strncpy(char* dest, const char* src, size_t n) { + size_t i; + for (i = 0; i < n && src[i] != '\0'; i++) { + dest[i] = src[i]; + } + for (; i < n; i++) { + dest[i] = '\0'; + } + return dest; +} + + +// Despite the fact that threading, synchronization, etc are disabled in the CMakeLists.txt file, IREE's initialization checks for a valid proactor and notification vtable. We provide a dummy synchronous proactor and null runner factory to satisfy these dependencies. +iree_async_proactor_pool_runner_factory_t iree_async_proactor_pool_thread_runner_factory(void) { + iree_async_proactor_pool_runner_factory_t f = {0}; + return f; +} + +static void dummy_proactor_destroy(iree_async_proactor_t* proactor) { + iree_allocator_free(proactor->allocator, proactor); +} + +static iree_async_proactor_capabilities_t dummy_proactor_query_capabilities(iree_async_proactor_t* proactor) { + return 0; +} + +static iree_status_t dummy_proactor_submit(iree_async_proactor_t* proactor, iree_async_operation_list_t operations) { + return iree_status_from_code(IREE_STATUS_UNIMPLEMENTED); +} + +static iree_status_t dummy_proactor_poll(iree_async_proactor_t* proactor, iree_timeout_t timeout, iree_host_size_t* out_completed_count) { + if (out_completed_count) *out_completed_count = 0; + return iree_ok_status(); +} + +static void dummy_proactor_wake(iree_async_proactor_t* proactor) {} + +static iree_status_t dummy_proactor_cancel(iree_async_proactor_t* proactor, iree_async_operation_t* operation) { + return iree_status_from_code(IREE_STATUS_UNIMPLEMENTED); +} + +static iree_status_t dummy_proactor_create_notification( + iree_async_proactor_t* proactor, iree_async_notification_flags_t flags, + iree_async_notification_t** out_notification) { + iree_async_notification_t* n = NULL; + IREE_RETURN_IF_ERROR(iree_allocator_malloc(proactor->allocator, sizeof(*n), (void**)&n)); + memset(n, 0, sizeof(*n)); + iree_atomic_ref_count_init(&n->ref_count); + n->proactor = proactor; + iree_atomic_store(&n->epoch, 0, iree_memory_order_relaxed); + n->epoch_ptr = &n->epoch; + *out_notification = n; + return iree_ok_status(); +} + +static void dummy_proactor_destroy_notification(iree_async_proactor_t* proactor, iree_async_notification_t* notification) { + iree_allocator_free(proactor->allocator, notification); +} + +static void dummy_proactor_notification_signal(iree_async_proactor_t* proactor, iree_async_notification_t* notification, int32_t wake_count) {} + +static bool dummy_proactor_notification_wait(iree_async_proactor_t* proactor, iree_async_notification_t* notification, uint32_t wait_token, iree_timeout_t timeout) { + return true; +} + +static const iree_async_proactor_vtable_t dummy_proactor_vtable = { + .destroy = dummy_proactor_destroy, + .query_capabilities = dummy_proactor_query_capabilities, + .submit = dummy_proactor_submit, + .poll = dummy_proactor_poll, + .wake = dummy_proactor_wake, + .cancel = dummy_proactor_cancel, + .create_notification = dummy_proactor_create_notification, + .destroy_notification = dummy_proactor_destroy_notification, + .notification_signal = dummy_proactor_notification_signal, + .notification_wait = dummy_proactor_notification_wait, +}; + +// POSIX proactor factory override for bare-metal RISC-V. +// Returns a dummy synchronous proactor instead of attempting POSIX epoll/pipe creation. +iree_status_t iree_async_proactor_create_posix( + iree_async_proactor_options_t options, iree_allocator_t allocator, + iree_async_proactor_t** out_proactor) { + iree_async_proactor_t* p = NULL; + IREE_RETURN_IF_ERROR(iree_allocator_malloc(allocator, sizeof(*p), (void**)&p)); + memset(p, 0, sizeof(*p)); + iree_async_proactor_initialize(&dummy_proactor_vtable, iree_make_cstring_view("dummy"), allocator, p); + *out_proactor = p; + return iree_ok_status(); +} + +iree_status_t iree_async_proactor_create_platform( + iree_async_proactor_options_t options, iree_allocator_t allocator, + iree_async_proactor_t** out_proactor) { + return iree_async_proactor_create_posix(options, allocator, out_proactor); +} + +// Thread creation stubs (unused in single-threaded local-sync execution). +iree_status_t iree_thread_create(iree_thread_entry_t entry, void* entry_arg, + iree_thread_create_params_t params, + iree_allocator_t allocator, + iree_thread_t** out_thread) { + if (out_thread) *out_thread = NULL; + return iree_status_from_code(IREE_STATUS_UNIMPLEMENTED); +} + +void iree_thread_release(iree_thread_t* thread) {} + diff --git a/benchmark_sources/generic_iree/baremetal/main_template.c b/benchmark_sources/generic_iree/baremetal/main_template.c new file mode 100644 index 0000000..8622a5a --- /dev/null +++ b/benchmark_sources/generic_iree/baremetal/main_template.c @@ -0,0 +1,256 @@ +/* + * Generic IREE Bare-Metal Test Template + * + * This template is used to generate test_main.c files from test-specific config. + * Each test provides: + * - TEST_NAME: string identifier + * - TEST_VMFB_HEADER: C header from compiled VMFB + * - TEST_FUNCTION_NAME: IREE function to call + * - TEST_NUM_ITERATIONS: number of test iterations + * - TEST_INPUT_SETUP(allocator, device_allocator, session): setup test inputs + * - TEST_OUTPUT_VALIDATE(out_ptr, output_len): validate output + * - TEST_CLEANUP: cleanup test-specific data + */ + +#include +#include +#include +#include + +#include "iree/base/api.h" +#include "iree/hal/api.h" +#include "iree/modules/hal/module.h" +#include "iree/runtime/api.h" +#include "iree/vm/api.h" +#include "iree/vm/bytecode/module.h" + + +// Simple IREE allocator implementation +#define STATIC_POOL_SIZE (1024 * 1024) // 1 MB static arena +static uint8_t g_static_pool[STATIC_POOL_SIZE] __attribute__((section(".noinit"), aligned(64))); +static size_t g_pool_offset = 0; + +static iree_status_t iree_static_bump_allocator_ctl( + void* self, iree_allocator_command_t command, const void* params, + void** inout_ptr) { + switch (command) { + case IREE_ALLOCATOR_COMMAND_MALLOC: + case IREE_ALLOCATOR_COMMAND_REALLOC: { + const iree_allocator_alloc_params_t* alloc_params = + (const iree_allocator_alloc_params_t*)params; + size_t size = (alloc_params->byte_length + 15) & ~((size_t)15); + if (command == IREE_ALLOCATOR_COMMAND_REALLOC && *inout_ptr != NULL) { + if (g_pool_offset + size > STATIC_POOL_SIZE) { + return iree_make_status(IREE_STATUS_RESOURCE_EXHAUSTED, + "Static pool exhausted on realloc"); + } + void* new_ptr = &g_static_pool[g_pool_offset]; + g_pool_offset += size; + memcpy(new_ptr, *inout_ptr, size); + *inout_ptr = new_ptr; + return iree_ok_status(); + } + if (g_pool_offset + size > STATIC_POOL_SIZE) { + return iree_make_status( + IREE_STATUS_RESOURCE_EXHAUSTED, + "Static pool exhausted on malloc (requested %zu, available %zu)", + size, STATIC_POOL_SIZE - g_pool_offset); + } + *inout_ptr = &g_static_pool[g_pool_offset]; + g_pool_offset += size; + return iree_ok_status(); + } + case IREE_ALLOCATOR_COMMAND_CALLOC: { + const iree_allocator_alloc_params_t* alloc_params = + (const iree_allocator_alloc_params_t*)params; + size_t size = (alloc_params->byte_length + 15) & ~((size_t)15); + if (g_pool_offset + size > STATIC_POOL_SIZE) { + return iree_make_status(IREE_STATUS_RESOURCE_EXHAUSTED, + "Static pool exhausted on calloc"); + } + void* ptr = &g_static_pool[g_pool_offset]; + memset(ptr, 0, size); + *inout_ptr = ptr; + g_pool_offset += size; + return iree_ok_status(); + } + case IREE_ALLOCATOR_COMMAND_FREE: { + return iree_ok_status(); + } + default: + return iree_make_status(IREE_STATUS_UNIMPLEMENTED); + } +} + +static iree_allocator_t get_static_allocator(void) { + return (iree_allocator_t){ + .self = NULL, + .ctl = iree_static_bump_allocator_ctl, + }; +} + +// Override standard C library memory allocation functions +void* malloc(size_t size) { + void* ptr = NULL; + iree_allocator_alloc_params_t params = {.byte_length = size}; + iree_static_bump_allocator_ctl(NULL, IREE_ALLOCATOR_COMMAND_MALLOC, ¶ms, + &ptr); + return ptr; +} +void* calloc(size_t num, size_t size) { + void* ptr = NULL; + iree_allocator_alloc_params_t params = {.byte_length = num * size}; + iree_static_bump_allocator_ctl(NULL, IREE_ALLOCATOR_COMMAND_CALLOC, ¶ms, + &ptr); + return ptr; +} +void* realloc(void* ptr, size_t new_size) { + void* new_ptr = ptr; + iree_allocator_alloc_params_t params = {.byte_length = new_size}; + iree_static_bump_allocator_ctl(NULL, IREE_ALLOCATOR_COMMAND_REALLOC, ¶ms, + &new_ptr); + return new_ptr; +} +void free(void* ptr) { (void)ptr; } + +// Global output variables +volatile int g_execution_success = 0; + +// Main entry point +// Return codes: +// 0: Success +// 1-10: IREE initialization or runtime execution error +// 11: Output verification mismatch +int main(void) { + iree_allocator_t allocator = get_static_allocator(); + + iree_runtime_instance_options_t instance_options; + iree_runtime_instance_options_initialize(&instance_options); + iree_runtime_instance_options_use_all_available_drivers(&instance_options); + + iree_runtime_instance_t* instance = NULL; + if (!iree_status_is_ok( + iree_runtime_instance_create(&instance_options, allocator, &instance))) { + _exit(1); + } + + iree_hal_device_t* device = NULL; + if (!iree_status_is_ok(iree_runtime_instance_try_create_default_device( + instance, iree_make_cstring_view("local-sync"), &device))) { + iree_runtime_instance_release(instance); + _exit(2); + } + + iree_runtime_session_options_t session_options; + iree_runtime_session_options_initialize(&session_options); + iree_runtime_session_t* session = NULL; + if (!iree_status_is_ok(iree_runtime_session_create_with_device( + instance, &session_options, device, allocator, &session))) { + iree_hal_device_release(device); + iree_runtime_instance_release(instance); + _exit(3); + } + iree_hal_device_release(device); + + // Load VMFB module (provided by test_config.h) + iree_vm_module_t* module = NULL; + if (!iree_status_is_ok(iree_vm_bytecode_module_create( + iree_runtime_instance_vm_instance(instance), IREE_VM_BYTECODE_MODULE_FLAG_NONE, + iree_make_const_byte_span(TEST_VMFB_DATA, TEST_VMFB_DATA_LEN), + iree_allocator_null(), allocator, &module))) { + iree_runtime_session_release(session); + iree_runtime_instance_release(instance); + _exit(4); + } + + if (!iree_status_is_ok(iree_runtime_session_append_module(session, module))) { + iree_vm_module_release(module); + iree_runtime_session_release(session); + iree_runtime_instance_release(instance); + _exit(5); + } + iree_vm_module_release(module); + + // Initialize call (test-specific function name from test_config.h) + iree_runtime_call_t call; + if (!iree_status_is_ok(iree_runtime_call_initialize_by_name( + session, iree_make_cstring_view(TEST_FUNCTION_NAME), &call))) { + iree_runtime_session_release(session); + iree_runtime_instance_release(instance); + _exit(6); + } + + iree_hal_allocator_t* device_allocator = + iree_runtime_session_device_allocator(session); + + // Checkpoint static bump pool offset for each iteration + size_t checkpoint_offset = g_pool_offset; + int all_passed = 1; + + // Test-specific setup (from test_config.h) + if (!TEST_INPUT_SETUP(allocator, device_allocator, session, &call)) { + iree_runtime_call_deinitialize(&call); + iree_runtime_session_release(session); + iree_runtime_instance_release(instance); + _exit(7); + } + + // Invoke IREE function + if (!iree_status_is_ok(iree_runtime_call_invoke(&call, /*flags=*/0))) { + iree_runtime_call_deinitialize(&call); + iree_runtime_session_release(session); + iree_runtime_instance_release(instance); + _exit(9); + } + + // Extract output + iree_hal_buffer_view_t* ret0 = NULL; + if (!iree_status_is_ok( + iree_runtime_call_outputs_pop_front_buffer_view(&call, &ret0)) || + !ret0) { + iree_runtime_call_deinitialize(&call); + iree_runtime_session_release(session); + iree_runtime_instance_release(instance); + _exit(10); + } + + iree_hal_buffer_t* buffer = iree_hal_buffer_view_buffer(ret0); + iree_hal_buffer_mapping_t mapping; + if (iree_status_is_ok(iree_hal_buffer_map_range( + buffer, IREE_HAL_MAPPING_MODE_SCOPED, IREE_HAL_MEMORY_ACCESS_READ, + 0, TEST_OUTPUT_SIZE, &mapping))) { + const int8_t* out_ptr = (const int8_t*)mapping.contents.data; + + // Test-specific validation (from test_config.h) + if (!TEST_OUTPUT_VALIDATE(out_ptr, TEST_OUTPUT_SIZE)) { + all_passed = 0; + } + + iree_hal_buffer_unmap_range(&mapping); + + // Return exit code based on validation + if (all_passed) { + _exit(0); // Success + } else { + _exit(11); // Validation failed + } + } else { + iree_hal_buffer_view_release(ret0); + iree_runtime_call_deinitialize(&call); + iree_runtime_session_release(session); + iree_runtime_instance_release(instance); + return 98; // Buffer map failed + } + iree_hal_buffer_view_release(ret0); + + // Test-specific cleanup + TEST_CLEANUP(); + + iree_runtime_call_deinitialize(&call); + iree_runtime_session_release(session); + iree_runtime_instance_release(instance); + + g_execution_success = all_passed; + exit(g_execution_success ? 0 : 11); // Signal exit to Spike via tohost HTIF + return 0; // Unreachable +} diff --git a/benchmark_sources/generic_iree/iree/CMakeLists.txt b/benchmark_sources/generic_iree/iree/CMakeLists.txt new file mode 100644 index 0000000..e76115f --- /dev/null +++ b/benchmark_sources/generic_iree/iree/CMakeLists.txt @@ -0,0 +1,77 @@ +# IREE runtime setup for generic_iree tests and MLPerfTiny tests compiled with IREE flag + +message(STATUS "Configuring IREE runtime for generic_iree...") + +# Configuration for bare-metal RISC-V32 MLIR execution +set(IREE_BUILD_COMPILER OFF CACHE BOOL "" FORCE) +set(IREE_BUILD_TESTS OFF CACHE BOOL "" FORCE) +set(IREE_BUILD_BENCHMARKS OFF CACHE BOOL "" FORCE) +set(IREE_BUILD_DOCS OFF CACHE BOOL "" FORCE) +set(IREE_BUILD_SAMPLES OFF CACHE BOOL "" FORCE) +set(IREE_BUILD_PYTHON_BINDINGS OFF CACHE BOOL "" FORCE) +set(IREE_BUILD_TRACY OFF CACHE BOOL "" FORCE) +set(IREE_BUILD_TOOLS OFF CACHE BOOL "" FORCE) + +# Bare-metal specific configurations +set(IREE_ENABLE_THREADING OFF CACHE BOOL "" FORCE) +set(IREE_ENABLE_POSIX OFF CACHE BOOL "" FORCE) +set(IREE_ENABLE_RUNTIME_TRACING OFF CACHE BOOL "" FORCE) +set(IREE_ENABLE_WERROR_FLAG OFF CACHE BOOL "" FORCE) +set(IREE_SYNCHRONIZATION_DISABLE_UNSAFE ON CACHE BOOL "" FORCE) +set(IREE_CSPRNG_USE_STUB ON CACHE BOOL "" FORCE) +set(IREE_SOCKETS_ENABLE OFF CACHE BOOL "" FORCE) +set(IREE_HAL_DRIVER_DEFAULTS OFF CACHE BOOL "" FORCE) +set(IREE_HAL_DRIVER_LOCAL_SYNC ON CACHE BOOL "" FORCE) +set(IREE_HAL_DRIVER_LOCAL_TASK OFF CACHE BOOL "" FORCE) +set(IREE_HAL_DRIVER_NULL OFF CACHE BOOL "" FORCE) +set(IREE_HAL_DRIVER_VULKAN OFF CACHE BOOL "" FORCE) +set(IREE_HAL_EXECUTABLE_LOADER_DEFAULTS OFF CACHE BOOL "" FORCE) +set(IREE_HAL_EXECUTABLE_LOADER_EMBEDDED_ELF ON CACHE BOOL "" FORCE) +set(IREE_HAL_EXECUTABLE_PLUGIN_DEFAULTS OFF CACHE BOOL "" FORCE) +set(IREE_HAL_EXECUTABLE_PLUGIN_EMBEDDED_ELF ON CACHE BOOL "" FORCE) + +# Fetch compiler from host +# TODO: add an optin for compile the compiler as well as runtime +set(IREE_HOST_BIN_DIR "/home/efectn/iree-prod-test/iree-build-compiler/tools" CACHE STRING "" FORCE) + +# Bare-metal platform defines +add_compile_definitions( + IREE_PLATFORM_GENERIC=1 + IREE_FILE_IO_ENABLE=0 + IREE_DEVICE_SIZE_T=uint32_t + PRIdsz=PRIu32 + IREE_SOCKETS_ENABLE=0 +) + +# Suppress warnings stemmed from IREE source code +string(APPEND CMAKE_C_FLAGS " -Wno-type-limits -Wno-unused-parameter -Wno-missing-field-initializers -Wno-ignored-qualifiers -Wno-cast-function-type") +string(APPEND CMAKE_CXX_FLAGS " -Wno-type-limits -Wno-unused-parameter -Wno-missing-field-initializers -Wno-ignored-qualifiers -Wno-cast-function-type") + +# Remove -Werror to allow warnings +string(REPLACE " -Werror" "" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}") +string(REPLACE " -Werror" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") +string(REPLACE " -Werror" "" CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS}") + +# IREE_TIME_NOW_FN stuff +string(APPEND CMAKE_C_FLAGS " -DIREE_TIME_NOW_FN=\\{return\\ 0\\;\\}") +string(APPEND CMAKE_CXX_FLAGS " -DIREE_TIME_NOW_FN=\\{return\\ 0\\;\\}") +string(APPEND CMAKE_ASM_FLAGS " -DIREE_TIME_NOW_FN=\\{return\\ 0\\;\\}") + +# Math library +string(APPEND CMAKE_EXE_LINKER_FLAGS " -lm") + +# Add IREE runtime source as subdirectory +set(_MLPERFTINY_IREE_PREV_SYSTEM_PROCESSOR ${CMAKE_SYSTEM_PROCESSOR}) +set(CMAKE_SYSTEM_PROCESSOR riscv32) +add_subdirectory(iree-source iree-source EXCLUDE_FROM_ALL) +set(CMAKE_SYSTEM_PROCESSOR ${_MLPERFTINY_IREE_PREV_SYSTEM_PROCESSOR}) +unset(_MLPERFTINY_IREE_PREV_SYSTEM_PROCESSOR) + +# Create unified runtime target +if(TARGET iree::runtime::unified) + message(STATUS "IREE runtime::unified available for generic_iree") +else() + message(WARNING "IREE runtime::unified not found") +endif() + +message(STATUS "IREE runtime configured for generic_iree") diff --git a/benchmark_sources/generic_iree/iree/iree-source b/benchmark_sources/generic_iree/iree/iree-source new file mode 160000 index 0000000..b58ae9c --- /dev/null +++ b/benchmark_sources/generic_iree/iree/iree-source @@ -0,0 +1 @@ +Subproject commit b58ae9c5d1b3b12381f5ffc567c999318d485fd7 diff --git a/benchmark_sources/generic_iree/tests/add_vector/add_vector.mlir b/benchmark_sources/generic_iree/tests/add_vector/add_vector.mlir new file mode 100644 index 0000000..662a215 --- /dev/null +++ b/benchmark_sources/generic_iree/tests/add_vector/add_vector.mlir @@ -0,0 +1,6 @@ +module { + func.func @vec_add_i8(%arg0: tensor<4xi8>, %arg1: tensor<4xi8>) -> tensor<4xi8> { + %0 = arith.addi %arg0, %arg1 : tensor<4xi8> + return %0 : tensor<4xi8> + } +} \ No newline at end of file diff --git a/benchmark_sources/generic_iree/tests/add_vector/main.c b/benchmark_sources/generic_iree/tests/add_vector/main.c new file mode 100644 index 0000000..0cbca02 --- /dev/null +++ b/benchmark_sources/generic_iree/tests/add_vector/main.c @@ -0,0 +1,2 @@ +#include "test_config.h" +#include "../../baremetal/main_template.c" diff --git a/benchmark_sources/generic_iree/tests/add_vector/test_config.h b/benchmark_sources/generic_iree/tests/add_vector/test_config.h new file mode 100644 index 0000000..274eddc --- /dev/null +++ b/benchmark_sources/generic_iree/tests/add_vector/test_config.h @@ -0,0 +1,81 @@ +// Simple test to check out if IREE testing pipeline is working +// INPUT: {5, 3, 9, 7} + {1, 2, 3, 4} +// OUTPUT: {6, 5, 12, 11} + +#include +#include +#include + +// Include VMFB compiled module +#include "add_vector.h" + +// Test metadata +#define TEST_NAME "add_vector" +#define TEST_FUNCTION_NAME "module.vec_add_i8" +#define TEST_VMFB_DATA add_vector_vmfb +#define TEST_VMFB_DATA_LEN add_vector_vmfb_len + +// Output configuration +#define TEST_OUTPUT_SIZE 4 + +// Test input data +static const int8_t g_test_input_0[4] = {5, 3, 9, 7}; +static const int8_t g_test_input_1[4] = {1, 2, 3, 4}; +static const int8_t g_test_expected[4] = {6, 5, 12, 11}; + +// Input setup macro +#define TEST_INPUT_SETUP(allocator, device_allocator, session, call) \ + ({ \ + int _setup_ok = 1; \ + iree_hal_dim_t shape[1] = {4}; \ + \ + iree_hal_buffer_view_t* arg0 = NULL; \ + if (!iree_status_is_ok(iree_hal_buffer_view_allocate_buffer_copy(\ + iree_runtime_session_device(session), device_allocator, \ + 1, shape, IREE_HAL_ELEMENT_TYPE_SINT_8, \ + IREE_HAL_ENCODING_TYPE_DENSE_ROW_MAJOR, \ + (iree_hal_buffer_params_t){ \ + .type = IREE_HAL_MEMORY_TYPE_DEVICE_LOCAL, \ + .usage = IREE_HAL_BUFFER_USAGE_DEFAULT}, \ + iree_make_const_byte_span(g_test_input_0, 4), &arg0))) {\ + _setup_ok = 0; \ + } else { \ + iree_runtime_call_inputs_push_back_buffer_view(call, arg0); \ + iree_hal_buffer_view_release(arg0); \ + } \ + \ + iree_hal_buffer_view_t* arg1 = NULL; \ + if (_setup_ok && !iree_status_is_ok( \ + iree_hal_buffer_view_allocate_buffer_copy( \ + iree_runtime_session_device(session), \ + device_allocator, 1, shape, \ + IREE_HAL_ELEMENT_TYPE_SINT_8, \ + IREE_HAL_ENCODING_TYPE_DENSE_ROW_MAJOR, \ + (iree_hal_buffer_params_t){ \ + .type = IREE_HAL_MEMORY_TYPE_DEVICE_LOCAL, \ + .usage = IREE_HAL_BUFFER_USAGE_DEFAULT}, \ + iree_make_const_byte_span(g_test_input_1, 4), \ + &arg1))) { \ + _setup_ok = 0; \ + } else if (_setup_ok) { \ + iree_runtime_call_inputs_push_back_buffer_view(call, arg1); \ + iree_hal_buffer_view_release(arg1); \ + } \ + _setup_ok; \ + }) + +// Output validation macro (no printf - bare-metal can't output) +#define TEST_OUTPUT_VALIDATE(out_ptr, output_len) \ + ({ \ + int _match = 1; \ + for (int i = 0; i < 4; i++) { \ + if (out_ptr[i] != g_test_expected[i]) { \ + _match = 0; \ + break; /* Early exit on first mismatch */ \ + } \ + } \ + _match; \ + }) + +// Cleanup (empty for simple add_vector test) +#define TEST_CLEANUP() do { } while(0) diff --git a/build_programs/CMakeLists.txt b/build_programs/CMakeLists.txt index f0ceb8b..3ea2483 100644 --- a/build_programs/CMakeLists.txt +++ b/build_programs/CMakeLists.txt @@ -17,6 +17,8 @@ message(STATUS "CMake Version ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}.${CM set(BENCHMARK_SUITE "NONE" CACHE STRING "Benchmark Suite to compile. Name of the top level folder in /Benchmark_Sources") set(COMPILER "NONE" CACHE STRING "GCC or LLVM") +set(FRAMEWORK "TFLM" CACHE STRING "Deployment framework used by benchmark suites that require one (TFLM or IREE)") +set_property(CACHE FRAMEWORK PROPERTY STRINGS TFLM IREE) ##### @@ -165,6 +167,7 @@ endif() include(${TOOLCHAIN_TOP}/CMake/toolchain_build.cmake) #include toolchain macros +message(STATUS "Selected FRAMEWORK = ${FRAMEWORK}") ####### ## Compiler Selection From fd7100389e309f384f7d5a934b92671ad0922198 Mon Sep 17 00:00:00 2001 From: Muhammed Efe Cetin Date: Mon, 20 Jul 2026 13:37:53 +0200 Subject: [PATCH 02/12] benchmark_sources/mlperftiny: integrate IREE testing support --- .../MLPerfTiny/CMake/add_test.cmake | 185 ++++++++++++++++++ .../MLPerfTiny/CMake/extract_tflite.py | 28 +++ benchmark_sources/MLPerfTiny/CMakeLists.txt | 26 ++- .../MLPerfTiny/Int8/toycar/CMakeLists.txt | 6 + .../MLPerfTiny/Int8/toycar/benchmark.hpp | 156 +++++++++++++++ .../toycar_int8_data/toycar_int8_model.mlir | 116 +++++++++++ 6 files changed, 509 insertions(+), 8 deletions(-) create mode 100644 benchmark_sources/MLPerfTiny/CMake/extract_tflite.py create mode 100644 benchmark_sources/MLPerfTiny/Int8/toycar/toycar_int8_data/toycar_int8_model.mlir diff --git a/benchmark_sources/MLPerfTiny/CMake/add_test.cmake b/benchmark_sources/MLPerfTiny/CMake/add_test.cmake index 945be90..1a94c5e 100644 --- a/benchmark_sources/MLPerfTiny/CMake/add_test.cmake +++ b/benchmark_sources/MLPerfTiny/CMake/add_test.cmake @@ -294,6 +294,191 @@ macro(add_benchmark_etiss TEST SOURCE_DIR) WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}) endmacro() +macro(add_Benchmark_IREE_Spike TEST SOURCE_DIR TEST_BUILD_DIR) + #Build spike if it isnt present + build_spike() + + set(TEST_NAME ${TEST}_IREE_Spike) + + # Allow external override of TOSA_CONVERTER_PATH + set(TOSA_CONVERTER_PATH "/home/efectn/iree-prod-test/demo-simple-mlir/tensorflow_model/myenv/bin" CACHE PATH "Path to the directory containing tosa-converter-for-tflite") + + set(PREGENERATED_MLIR "${SOURCE_DIR}/${TEST}_data/${TEST}_model.mlir") + set(TEST_MLIR_SOURCE ${CMAKE_CURRENT_BINARY_DIR}/${TEST}_model.mlir) + set(TEST_VMFB ${CMAKE_CURRENT_BINARY_DIR}/${TEST}_model.vmfb) + set(TEST_C_HEADER ${CMAKE_CURRENT_BINARY_DIR}/${TEST}_model.c) + + if(EXISTS "${PREGENERATED_MLIR}") + message(STATUS "Found pre-generated MLIR model at ${PREGENERATED_MLIR}, skipping TFLite extraction and TOSA conversion.") + + # Copy the pregenerated MLIR to the build directory so the pipeline can continue smoothly + add_custom_command( + OUTPUT ${TEST_MLIR_SOURCE} + COMMAND ${CMAKE_COMMAND} -E copy ${PREGENERATED_MLIR} ${TEST_MLIR_SOURCE} + DEPENDS ${PREGENERATED_MLIR} + COMMENT "Copying pre-generated MLIR model to build directory" + VERBATIM + ) + else() + message(STATUS "Pre-generated MLIR model not found at ${PREGENERATED_MLIR}. Setting up TFLite to MLIR conversion pipeline.") + # Locate TFLite to MLIR converter (tosa-converter-for-tflite) + find_program(TOSA_CONVERTER tosa-converter-for-tflite + HINTS ${TOSA_CONVERTER_PATH} + REQUIRED) + find_package(Python3 REQUIRED) + + set(TEST_TFLITE_SOURCE ${CMAKE_CURRENT_BINARY_DIR}/${TEST}_model.tflite) + + # 1. Extract TFLite from model_data.cc + add_custom_command( + OUTPUT ${TEST_TFLITE_SOURCE} + COMMAND Python3::Interpreter ${CMAKE_CURRENT_SOURCE_DIR}/CMake/extract_tflite.py + ${SOURCE_DIR}/${TEST}_data/${TEST}_model_data.cc + ${TEST_TFLITE_SOURCE} + DEPENDS ${SOURCE_DIR}/${TEST}_data/${TEST}_model_data.cc ${CMAKE_CURRENT_SOURCE_DIR}/CMake/extract_tflite.py + COMMENT "Extracting ${TEST}_model.tflite from model_data.cc" + VERBATIM + ) + + # 2. Convert TFLite to MLIR + add_custom_command( + OUTPUT ${TEST_MLIR_SOURCE} + COMMAND ${TOSA_CONVERTER} ${TEST_TFLITE_SOURCE} --text -o ${TEST_MLIR_SOURCE} + DEPENDS ${TEST_TFLITE_SOURCE} + COMMENT "Converting ${TEST}_model.tflite -> ${TEST}_model.mlir via TOSA" + VERBATIM + ) + endif() + + # Locate IREE compiler + find_program(IREE_COMPILE_TOOL iree-compile HINTS ${IREE_COMPILER_BIN_DIR} REQUIRED) + find_program(XXD_TOOL xxd REQUIRED) + + # 3. Compile MLIR to VMFB + string(REGEX MATCH "m" HAS_M ${RISCV_ARCH}) + string(REGEX MATCH "f" HAS_F ${RISCV_ARCH}) + string(REGEX MATCH "zve32x" HAS_ZVE32X ${RISCV_ARCH}) + string(REGEX MATCH "zve32f" HAS_ZVE32F ${RISCV_ARCH}) + + # Generate IREE LLVM features based on RISCV_ARCH + set(IREE_LLVM_FEATURES "") + + if(HAS_M) + set(IREE_LLVM_FEATURES "${IREE_LLVM_FEATURES},+m") + endif() + if(HAS_F) + set(IREE_LLVM_FEATURES "${IREE_LLVM_FEATURES},+f") + endif() + if(HAS_ZVE32X) + set(IREE_LLVM_FEATURES "${IREE_LLVM_FEATURES},+zve32x") + endif() + if(HAS_ZVE32F) + set(IREE_LLVM_FEATURES "${IREE_LLVM_FEATURES},+zve32f") + endif() + + if(HAS_ZVE32X OR HAS_ZVE32F) + set(IREE_LLVM_FEATURES "${IREE_LLVM_FEATURES},+zvl${VREG_W}b") + endif() + + string(REGEX REPLACE "^," "" IREE_LLVM_FEATURES "${IREE_LLVM_FEATURES}") + + # 2. Compile MLIR to VMFB + add_custom_command( + OUTPUT ${TEST_VMFB} + COMMAND ${IREE_COMPILE_TOOL} + ${TEST_MLIR_SOURCE} + --iree-hal-target-device=local + --iree-hal-local-target-device-backends=llvm-cpu + --iree-llvmcpu-target-triple=riscv32-unknown-elf + --iree-llvmcpu-target-abi=${RISCV_ABI} + --iree-llvmcpu-target-cpu-features=${IREE_LLVM_FEATURES} + -o ${TEST_VMFB} + DEPENDS ${TEST_MLIR_SOURCE} + COMMENT "Compiling ${TEST}_model.mlir -> ${TEST}_model.vmfb" + VERBATIM + ) + + # 4. Generate C array from VMFB + add_custom_command( + OUTPUT ${TEST_C_HEADER} + COMMAND ${XXD_TOOL} -i ${TEST_VMFB} ${TEST_C_HEADER} + COMMAND sed -i "s/_.*_${TEST}_model_vmfb/iree_model_vmfb/g" ${TEST_C_HEADER} + COMMAND sed -i "s/_.*_${TEST}_model_vmfb_len/iree_model_vmfb_len/g" ${TEST_C_HEADER} + DEPENDS ${TEST_VMFB} + COMMENT "Generating ${TEST}_model.c from ${TEST}_model.vmfb" + VERBATIM + ) + + add_executable(${TEST_NAME}) + + target_include_directories(${TEST_NAME} PRIVATE + ${SOURCE_DIR} + ${SOURCE_DIR}/${TEST}_data + ${FRAMEWORK_TOP}/ + ${CMAKE_CURRENT_BINARY_DIR} + ) + set(IREE_WRAPPER_SOURCE ${FRAMEWORK_TOP}/main.cpp) + target_sources(${TEST_NAME} PUBLIC + ${IREE_WRAPPER_SOURCE} + ${TEST_C_HEADER} + ${FRAMEWORK_TOP}/spike/crt0.S + ${CMAKE_CURRENT_SOURCE_DIR}/../generic_iree/baremetal/baremetal_stubs.c + ${SOURCE_DIR}/${TEST}_data/${TEST}_input_data.cc + ${SOURCE_DIR}/${TEST}_data/${TEST}_model_settings.cc + ${SOURCE_DIR}/${TEST}_data/${TEST}_output_data_ref.cc + ) + + set_source_files_properties(${IREE_WRAPPER_SOURCE} PROPERTIES + OBJECT_DEPENDS "${TEST_C_HEADER};${TEST_VMFB}" + ) + + # Define IREE_RUNTIME_ENABLED to trigger IREE-specific conditional compilation in benchmark headers. + target_compile_definitions(${TEST_NAME} PRIVATE + IREE_RUNTIME_ENABLED=1 + IREE_PLATFORM_GENERIC=1 + IREE_FILE_IO_ENABLE=0 + IREE_DEVICE_SIZE_T=uint32_t + PRIdsz=PRIu32 + IREE_SOCKETS_ENABLE=0 + "IREE_TIME_NOW_FN={ return 0\\; }" + ) + + target_compile_features(${TEST_NAME} PRIVATE cxx_std_14) + target_compile_options(${TEST_NAME} PRIVATE -fno-builtin) + + # Set Linker + target_link_options(${TEST_NAME} PRIVATE "-nostartfiles") + target_link_options(${TEST_NAME} PRIVATE "-T${FRAMEWORK_TOP}/spike/lld_link.ld") + + if (${COMPILER} STREQUAL "LLVM") + target_compile_options(${TEST_NAME} PRIVATE "-fno-use-cxa-atexit") + endif() + + # Link IREE runtime and spike sim libraries + target_link_libraries(${TEST_NAME} PRIVATE + sim_spike + -Wl,--start-group + iree_runtime_unified + iree_base_base + flatcc_parsing + flatcc_runtime + -Wl,--end-group + m + ) + + add_custom_command(TARGET ${TEST_NAME} + POST_BUILD + COMMAND ${CMAKE_OBJDUMP} -D ${TEST_NAME}.elf > ${TEST_NAME}_dump.txt) + + # Add Test + add_test(NAME ${TEST_NAME} + COMMAND ${TOOLCHAIN_TOP}/spike/bin/spike --isa=${RISCV_ARCH}_zvl${VREG_W}b ${TEST_BUILD_DIR}/${TEST_NAME}.elf + WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/../..) + + set_tests_properties(${TEST_NAME} PROPERTIES TIMEOUT 0) + + message(STATUS "Successfully added ${TEST_NAME}") + endmacro() diff --git a/benchmark_sources/MLPerfTiny/CMake/extract_tflite.py b/benchmark_sources/MLPerfTiny/CMake/extract_tflite.py new file mode 100644 index 0000000..b904e7f --- /dev/null +++ b/benchmark_sources/MLPerfTiny/CMake/extract_tflite.py @@ -0,0 +1,28 @@ +import sys +import re + +def main(): + input_file = sys.argv[1] + output_file = sys.argv[2] + + with open(input_file, 'r') as f: + content = f.read() + + # Find everything between { and } + match = re.search(r'\{(.*)\}', content, re.DOTALL) + if not match: + print("Could not find array data in", input_file) + sys.exit(1) + + array_data = match.group(1) + + # Extract hex bytes + hex_values = re.findall(r'0x[0-9a-fA-F]+', array_data) + + byte_array = bytearray([int(x, 16) for x in hex_values]) + + with open(output_file, 'wb') as f: + f.write(byte_array) + +if __name__ == "__main__": + main() diff --git a/benchmark_sources/MLPerfTiny/CMakeLists.txt b/benchmark_sources/MLPerfTiny/CMakeLists.txt index 2aff10f..60f1cc7 100644 --- a/benchmark_sources/MLPerfTiny/CMakeLists.txt +++ b/benchmark_sources/MLPerfTiny/CMakeLists.txt @@ -1,19 +1,20 @@ # Add test addition macros include(${CMAKE_CURRENT_SOURCE_DIR}/CMake/add_test.cmake) - - - ########### # Add tests for the benchmark suite ########### - - #Set location for build binaries set(BINARY_DIR ${BUILD_DIR}/benchmark_sources/MLPerfTiny/) -if(DEFINED FRAMEWORK AND ${FRAMEWORK} STREQUAL "TFLM") +if(NOT DEFINED FRAMEWORK OR FRAMEWORK STREQUAL "") + set(FRAMEWORK "TFLM") +endif() + +message(STATUS "MLPerfTiny framework selection: ${FRAMEWORK}") + +if(${FRAMEWORK} STREQUAL "TFLM") #Needed to run TensorFlow code with RISC-V toolchain. These flags need to be defined at this level and at tflm library level TODO: investigate add_definitions(-DTF_LITE_USE_GLOBAL_MAX) add_definitions(-DTF_LITE_USE_GLOBAL_MIN) @@ -54,8 +55,17 @@ if(DEFINED FRAMEWORK AND ${FRAMEWORK} STREQUAL "TFLM") add_Benchmark_Spike(aww_int8 ${CMAKE_CURRENT_SOURCE_DIR}/Int8/aww/ ${BINARY_DIR}) endif() endif() -elseif(DEFINED FRAMEWORK AND ${FRAMEWORK} STREQUAL "IREE") - message(FATAL_ERROR "WORK IN PROGRESS") +elseif(${FRAMEWORK} STREQUAL "IREE") + # Use generic_iree's IREE build instead of a duplicate folder + add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/../generic_iree/iree ${CMAKE_BINARY_DIR}/iree) + + # IREE runtime hedefinün bulunduğunu kontrol et + if(TARGET iree::runtime::unified) + message(STATUS "Building MLPerfTiny with IREE backend") + add_Benchmark_IREE_Spike(toycar_int8 ${CMAKE_CURRENT_SOURCE_DIR}/Int8/toycar/ ${BINARY_DIR}) + else() + message(WARNING "IREE runtime target not available, skipping IREE benchmarks") + endif() else() message(FATAL_ERROR "UNSUPPORTED DEPLOYMENT FRAMEWORK SELECTED. SELECT A FRAMEWORK WITH -DFRAMEWORK=(TFLM/IREE)") endif() diff --git a/benchmark_sources/MLPerfTiny/Int8/toycar/CMakeLists.txt b/benchmark_sources/MLPerfTiny/Int8/toycar/CMakeLists.txt index 6d00759..db19cd8 100644 --- a/benchmark_sources/MLPerfTiny/Int8/toycar/CMakeLists.txt +++ b/benchmark_sources/MLPerfTiny/Int8/toycar/CMakeLists.txt @@ -16,8 +16,14 @@ # See the License for the specific language governing permissions and # limitations under the License. # + +# TFLM framework tests (always built). add_Benchmark(toycar_int8 ${CMAKE_CURRENT_SOURCE_DIR} ${BUILD_DIR}/benchmark_sources/Int8/toycar) add_Benchmark_Spike(toycar_int8 ${CMAKE_CURRENT_SOURCE_DIR} ${BUILD_DIR}/benchmark_sources/Int8/toycar) +# IREE framework tests (deferred - requires IREE-specific benchmark implementation). +# TODO: Add IREE benchmark test targets when framework-specific benchmark code is ready. + + diff --git a/benchmark_sources/MLPerfTiny/Int8/toycar/benchmark.hpp b/benchmark_sources/MLPerfTiny/Int8/toycar/benchmark.hpp index d75e6f7..6d644c0 100644 --- a/benchmark_sources/MLPerfTiny/Int8/toycar/benchmark.hpp +++ b/benchmark_sources/MLPerfTiny/Int8/toycar/benchmark.hpp @@ -5,10 +5,20 @@ //BSP includes //#include "uart.hpp" //Includes for benchmark + +#ifndef IREE_RUNTIME_ENABLED +// TFLM framework includes (default). #include "tensorflow/lite/micro/tflite_bridge/micro_error_reporter.h" #include "tensorflow/lite/micro/micro_interpreter.h" #include "tensorflow/lite/micro/micro_mutable_op_resolver.h" #include "tensorflow/lite/schema/schema_generated.h" +#else +// IREE framework: use generic definitions. +// TODO: IREE runtime harness implementation to replace TFLM-specific code below. +namespace tflite { + enum TfLiteStatus { kTfLiteOk = 0, kTfLiteError = 1 }; +} +#endif // IREE_RUNTIME_ENABLED #include "toycar_int8_data/toycar_int8_input_data.h" #include "toycar_int8_data/toycar_int8_model_data.h" @@ -18,6 +28,8 @@ //Due to scoping/dynamic allocation issue with tflm, unfortunately need to include simulator specific in this file #include "simulator.hpp" +#ifndef IREE_RUNTIME_ENABLED + class Benchmark { private: @@ -103,4 +115,148 @@ class Benchmark ~Benchmark(){ }; }; + +#else + +// IREE framework stub implementation +#include "iree/base/api.h" +#include "iree/hal/api.h" +#include "iree/modules/hal/module.h" +#include "iree/runtime/api.h" +#include "iree/vm/api.h" +#include "iree/vm/bytecode/module.h" + +extern "C" { + extern const unsigned char iree_model_vmfb[]; + extern const unsigned int iree_model_vmfb_len; +} + +class Benchmark +{ + private: + iree_runtime_instance_t* instance = nullptr; + iree_runtime_session_t* session = nullptr; + iree_runtime_call_t call; + + public: + Benchmark() { + iree_allocator_t allocator = iree_allocator_system(); + + iree_runtime_instance_options_t instance_options; + iree_runtime_instance_options_initialize(&instance_options); + iree_runtime_instance_options_use_all_available_drivers(&instance_options); + + iree_status_t status = iree_runtime_instance_create(&instance_options, allocator, &instance); + if (!iree_status_is_ok(status)) return; + + iree_hal_device_t* device = nullptr; + status = iree_runtime_instance_try_create_default_device( + instance, iree_make_cstring_view("local-sync"), &device); + if (!iree_status_is_ok(status)) return; + + iree_runtime_session_options_t session_options; + iree_runtime_session_options_initialize(&session_options); + status = iree_runtime_session_create_with_device( + instance, &session_options, device, allocator, &session); + iree_hal_device_release(device); + if (!iree_status_is_ok(status)) return; + + iree_vm_module_t* module = nullptr; + status = iree_vm_bytecode_module_create( + iree_runtime_instance_vm_instance(instance), IREE_VM_BYTECODE_MODULE_FLAG_NONE, + iree_make_const_byte_span(iree_model_vmfb, iree_model_vmfb_len), + iree_allocator_null(), allocator, &module); + if (!iree_status_is_ok(status)) return; + + status = iree_runtime_session_append_module(session, module); + iree_vm_module_release(module); + if (!iree_status_is_ok(status)) return; + + status = iree_runtime_call_initialize_by_name( + session, iree_make_cstring_view("module.main"), &call); + } + + inline int run_benchmark() { + if (!instance || !session) return 1; + + iree_hal_allocator_t* device_allocator = iree_runtime_session_device_allocator(session); + + iree_hal_dim_t shape[2] = {1, (iree_hal_dim_t)toycar_int8_input_data_len[0]}; + + iree_hal_buffer_view_t* arg0 = nullptr; + iree_status_t status = iree_hal_buffer_view_allocate_buffer_copy( + iree_runtime_session_device(session), device_allocator, 2, shape, + IREE_HAL_ELEMENT_TYPE_SINT_8, IREE_HAL_ENCODING_TYPE_DENSE_ROW_MAJOR, + (iree_hal_buffer_params_t){.usage = IREE_HAL_BUFFER_USAGE_DEFAULT, + .type = IREE_HAL_MEMORY_TYPE_DEVICE_LOCAL}, + iree_make_const_byte_span(toycar_int8_input_data[0], toycar_int8_input_data_len[0]), &arg0); + + if (!iree_status_is_ok(status)) return 2; + iree_runtime_call_inputs_push_back_buffer_view(&call, arg0); + iree_hal_buffer_view_release(arg0); + + Simulator simulator; + simulator.begin_measurement(); + + status = iree_runtime_call_invoke(&call, /*flags=*/0); + + simulator.end_measurement(); + + if (!iree_status_is_ok(status)) { + simulator.terminate(1); + return 3; + } + + iree_hal_buffer_view_t* ret0 = nullptr; + status = iree_runtime_call_outputs_pop_front_buffer_view(&call, &ret0); + if (!iree_status_is_ok(status) || !ret0) { + simulator.terminate(1); + return 4; + } + + iree_hal_buffer_t* buffer = iree_hal_buffer_view_buffer(ret0); + iree_hal_buffer_mapping_t mapping; + int result = 0; + + if (iree_status_is_ok(iree_hal_buffer_map_range( + buffer, IREE_HAL_MAPPING_MODE_SCOPED, IREE_HAL_MEMORY_ACCESS_READ, + 0, toycar_int8_input_data_len[0], &mapping))) { + + const int8_t* out_ptr = (const int8_t*)mapping.contents.data; + int32_t sum = 0; + for (size_t j = 0; j < toycar_int8_input_data_len[0]; j++) { + int32_t diff1 = (int8_t)toycar_int8_input_data[0][j] - out_ptr[j]; + sum += (diff1 * diff1); + } + sum /= toycar_int8_input_data_len[0]; + int32_t diff = abs(sum - (int32_t)toycar_int8_output_data_ref[0]); + + if (diff > 1) { + simulator.terminate(1); + result = 5; + } else { + simulator.terminate(0); + result = 0; + } + iree_hal_buffer_unmap_range(&mapping); + } else { + simulator.terminate(1); + result = 6; + } + + iree_hal_buffer_view_release(ret0); + return result; + } + + int validate_benchmark() { return 0; } + + ~Benchmark() { + iree_runtime_call_deinitialize(&call); + if (session) iree_runtime_session_release(session); + if (instance) iree_runtime_instance_release(instance); + } +}; + +#endif // IREE_RUNTIME_ENABLED + #endif diff --git a/benchmark_sources/MLPerfTiny/Int8/toycar/toycar_int8_data/toycar_int8_model.mlir b/benchmark_sources/MLPerfTiny/Int8/toycar/toycar_int8_data/toycar_int8_model.mlir new file mode 100644 index 0000000..f2412b2 --- /dev/null +++ b/benchmark_sources/MLPerfTiny/Int8/toycar/toycar_int8_data/toycar_int8_model.mlir @@ -0,0 +1,116 @@ +module attributes {tfl.description = "MLIR Converted.", tfl.metadata = {min_runtime_version = "1.5.0\00\00\00\00\00\00\00\00\00\00\00"}, tfl.schema_version = 3 : i32} { + func.func @main(%arg0: tensor) -> tensor attributes {tf.entry_function = {inputs = "input_1", outputs = "Identity"}} { + %0 = tosa.const_shape {values = dense<[-1, 640]> : tensor<2xindex>} : () -> !tosa.shape<2> + %1 = "tosa.const"() <{values = dense<40> : tensor<1xi8>}> : () -> tensor<1xi8> + %2 = "tosa.const"() <{values = dense<1462485049> : tensor<1xi32>}> : () -> tensor<1xi32> + %3 = "tosa.const"() <{values = dense<96> : tensor<1xi8>}> : () -> tensor<1xi8> + %4 = tosa.const_shape {values = dense<[640, 1, 1, 128]> : tensor<4xindex>} : () -> !tosa.shape<4> + %5 = "tosa.const"() <{values = dense<"0x82F5FFFF5DFBFFFF54FDFFFF1A000000EEFFFFFF3901000045FEFFFFADFFFFFF000000005500000001FFFFFF68FEFFFFAFFEFFFFD6FFFFFFADFDFFFF11FEFFFFA2FDFFFFF8FEFFFF65FEFFFFA5FDFFFF45FDFFFF56FDFFFFB5FDFFFF78FDFFFF76FCFFFF91FCFFFFCEFAFFFF35FDFFFF41FDFFFFDFFCFFFF2EFDFFFFDAFDFFFF4BFDFFFFFFFCFFFFA1FCFFFF87FDFFFF6FFDFFFFE6FCFFFF27FCFFFF43FDFFFF01FCFFFF00FDFFFF9EFCFFFFEFFBFFFF80FBFFFF10FDFFFF52FDFFFF93FCFFFFDFFBFFFF02FCFFFFB3FCFFFF50FDFFFF2AFDFFFF02FDFFFFEAFCFFFF1DFCFFFF7FFCFFFFFBFBFFFFECFBFFFFB5FBFFFF43FBFFFF45FCFFFFCCFBFFFF51FBFFFFF1FBFFFF02FCFFFF64FBFFFF14FAFFFF8DFAFFFF2DFBFFFF02FBFFFFA4FBFFFF76FBFFFF66FBFFFFA2FBFFFF1AFBFFFF77FBFFFF69FBFFFF5FFBFFFF1CFBFFFF51FBFFFFF0FAFFFF61FAFFFF55F9FFFF76F9FFFF3EF8FFFF3AF9FFFF79F9FFFFDCF9FFFF21F9FFFF04FBFFFFE2F9FFFFC0F9FFFF28F9FFFF3AFAFFFF8BFAFFFF39F9FFFF07F9FFFF0FF9FFFFB0F9FFFF0FFAFFFFB3F9FFFF8DF8FFFF0CF9FFFF59F8FFFF50F8FFFFF7F8FFFF76F7FFFF56F6FFFF42F7FFFFF7F8FFFF0BF8FFFF91F7FFFFE4F6FFFF65F8FFFF63F8FFFF5EF8FFFF33F8FFFFA2F6FFFF37F7FFFF9DF7FFFFC1F8FFFFF5F7FFFF8DF9FFFF39FAFFFF7BF9FFFFE3F5FFFFB6EEFFFF24F6FFFFCBFBFFFF71FDFFFF090000009CFFFFFF0C01000058FEFFFF33FFFFFF8BFFFFFF0A000000C3FEFFFF26FEFFFF83FEFFFFAAFFFFFF5FFDFFFFB0FDFFFF28FDFFFF78FEFFFF41FEFFFFE8FDFFFF56FDFFFF39FDFFFF84FDFFFF46FDFFFF5EFCFFFF7FFCFFFFE0FAFFFF57FDFFFF1EFDFFFFC1FCFFFF58FDFFFFC8FDFFFF88FDFFFF02FDFFFF45FCFFFF1BFDFFFF28FDFFFFEAFCFFFF2DFCFFFF7AFDFFFF45FCFFFF05FDFFFF8CFCFFFF0EFCFFFFECFBFFFF4CFDFFFF34FDFFFF63FCFFFFF4FBFFFFF4FBFFFF47FCFFFFCCFCFFFFD0FCFFFFBAFCFFFFF5FCFFFF62FCFFFF54FCFFFFD9FBFFFFD1FBFFFF51FBFFFFD5FAFFFFFBFBFFFF85FBFFFF41FBFFFFDFFBFFFFF8FBFFFF40FBFFFFD7F9FFFF98FAFFFFEEFAFFFF91FAFFFF85FBFFFF3BFBFFFF37FBFFFF6AFBFFFF46FBFFFF9AFBFFFF29FBFFFF08FBFFFF0AFBFFFF67FBFFFF45FBFFFFC0FAFFFF9CF9FFFFD9F9FFFF84F8FFFF91F9FFFF34FAFFFF2CFAFFFF5AF9FFFF16FBFFFF46FAFFFFFDF9FFFF82F9FFFF8BFAFFFFCCFAFFFF9DF9FFFF80F9FFFF9BF9FFFF1DFAFFFF3DFAFFFF25FAFFFFE9F8FFFF43F9FFFFACF8FFFFA5F8FFFFDEF9FFFF9FF8FFFF75F7FFFF42F8FFFF44FAFFFF52F9FFFF79F8FFFFF2F7FFFF5DF9FFFF26F9FFFF07F9FFFFA7F8FFFF16F7FFFF78F7FFFF2CF8FFFF4AF9FFFF6CF8FFFF0FFAFFFFA7FAFFFF20FAFFFF64F6FFFF84EFFFFF8CF6FFFF12FCFFFF97FDFFFF2A00000072FFFFFF3A010000A5FEFFFFCEFEFFFF29FFFFFF04000000F6FEFFFF1EFEFFFF3EFEFFFF6CFFFFFF04FDFFFF91FDFFFFD8FCFFFF51FEFFFF87FEFFFF69FEFFFF65FDFFFF42FDFFFF8AFDFFFFBDFDFFFF8BFCFFFF5EFCFFFF31FBFFFFBBFDFFFF3AFDFFFFFAFCFFFF81FDFFFFD7FDFFFF7DFDFFFF19FDFFFF37FCFFFF5BFDFFFF77FDFFFF25FDFFFF48FCFFFFC9FDFFFF5EFCFFFFFBFCFFFFB7FCFFFF50FCFFFF0CFCFFFF3AFDFFFF2BFDFFFF3AFCFFFF1BFCFFFF27FCFFFF20FCFFFFA4FCFFFFD1FCFFFFD9FCFFFF03FDFFFF64FCFFFF47FCFFFFE7FBFFFFC7FBFFFF63FBFFFFB2FAFFFFE1FBFFFF8BFBFFFF2BFBFFFFF1FBFFFFF2FBFFFF17FBFFFF1AFAFFFF92FAFFFFEAFAFFFF9CFAFFFF98FBFFFF42FBFFFF5BFBFFFF6FFBFFFF5DFBFFFF8EFBFFFF8EFBFFFF68FBFFFF53FBFFFF62FBFFFF73FBFFFFEAFAFFFFCEF9FFFFD2F9FFFF34F8FFFF5BF9FFFF4AFAFFFF5CFAFFFFAFF9FFFF07FBFFFF47FAFFFFE1F9FFFF1DF9FFFF4BFAFFFFC5FAFFFF5AF9FFFF6BF9FFFF77F9FFFFC7F9FFFFD2F9FFFF30FAFFFF9BF8FFFFD9F8FFFF54F8FFFF59F8FFFF8EF9FFFF66F8FFFF16F7FFFFECF7FFFF63FAFFFF56F9FFFF5CF8FFFF00F8FFFF76F9FFFF27F9FFFFC1F8FFFF42F8FFFFA6F6FFFF18F7FFFF05F8FFFFE4F8FFFF23F8FFFFCFF9FFFF6FFAFFFFD0F9FFFF19F6FFFF69EFFFFF69F6FFFF05FCFFFFB1FDFFFF22000000AFFFFFFF52010000BEFEFFFF66FEFFFF80FEFFFF96FFFFFF8BFEFFFF08FEFFFF6EFEFFFF92FFFFFF0FFDFFFF78FDFFFFC8FCFFFF48FEFFFFC7FEFFFF60FEFFFF3DFDFFFF59FDFFFFE4FDFFFF1EFEFFFF0DFDFFFF73FCFFFF40FBFFFFE2FDFFFF96FDFFFF19FDFFFFBDFDFFFF39FEFFFF5FFDFFFF17FDFFFF47FCFFFF86FDFFFF95FDFFFF3AFDFFFF66FCFFFF83FDFFFF60FCFFFF28FDFFFF18FDFFFF8CFCFFFF14FCFFFF49FDFFFF34FDFFFF51FCFFFF1AFCFFFFE0FBFFFF3EFCFFFFAEFCFFFFE2FCFFFFA9FCFFFF0BFDFFFF5EFCFFFF5EFCFFFF22FCFFFFD1FBFFFF27FBFFFFE9FAFFFF08FCFFFFB7FBFFFF07FBFFFFCDFBFFFFC2FBFFFF0DFBFFFF67FAFFFF98FAFFFF17FBFFFFF5FAFFFFB1FBFFFF6BFBFFFFC6FBFFFFCFFBFFFF77FBFFFFB5FBFFFFC8FBFFFFA8FBFFFFA9FBFFFFF2FAFFFF4CFBFFFFD1FAFFFFC9F9FFFFDFF9FFFFFCF7FFFF47F9FFFF12FAFFFF4CFAFFFFFEF9FFFFF5FAFFFF2AFAFFFFEAF9FFFF11F9FFFF50FAFFFFC0FAFFFF38F9FFFF6BF9FFFF5FF9FFFFC2F9FFFFC0F9FFFF53FAFFFF9BF8FFFFB9F8FFFF38F8FFFF5AF8FFFF77F9FFFF10F8FFFFB4F6FFFF3BF7FFFF1AFAFFFF1BF9FFFF1CF8FFFFB9F7FFFF73F9FFFF2FF9FFFFCBF8FFFF4FF8FFFF42F6FFFF08F7FFFF2EF8FFFFFBF8FFFF38F8FFFF93FAFFFF1FFBFFFF17FAFFFF74F6FFFFD5EFFFFFE8F5FFFF6CFBFFFF42FDFFFF2D000000240000008601000007FFFFFFA5FEFFFF68FEFFFF83FFFFFFBBFEFFFF25FEFFFFB1FEFFFFDCFFFFFF47FDFFFF98FDFFFF01FDFFFF59FEFFFFA7FEFFFF46FEFFFF12FDFFFF47FDFFFF14FEFFFF62FEFFFF62FDFFFFA2FCFFFF35FBFFFF6AFDFFFFAAFDFFFF46FDFFFFC3FDFFFFF5FDFFFFE2FCFFFFE5FCFFFF36FCFFFF47FDFFFF7CFDFFFF47FDFFFF73FCFFFF5EFDFFFF33FCFFFF3EFDFFFF29FDFFFFC5FCFFFFFBFBFFFF64FDFFFF40FDFFFF41FCFFFF20FCFFFFC7FBFFFF7EFCFFFFF0FCFFFFBEFCFFFF61FCFFFF06FDFFFF5BFCFFFF7BFCFFFF8DFCFFFF25FCFFFF38FBFFFFAFFAFFFFDCFBFFFF8FFBFFFF1EFBFFFFB8FBFFFF7AFBFFFF60FBFFFFA7FAFFFFC3FAFFFFFBFAFFFFDDFAFFFFF5FBFFFFACFBFFFFE5FBFFFFD2FBFFFF6DFBFFFFA6FBFFFFE4FBFFFFB3FBFFFF8BFBFFFF70FAFFFFDBFAFFFF7CFAFFFF85F9FFFFC8F9FFFFC3F7FFFF37F9FFFF52FAFFFF71FAFFFFCDF9FFFF97FAFFFF10FAFFFFAEF9FFFF0AF9FFFF3BFAFFFF30FAFFFFD4F8FFFF4DF9FFFF3AF9FFFFA4F9FFFFB3F9FFFF3DFAFFFF9BF8FFFF88F8FFFF3DF8FFFF1AF8FFFF20F9FFFFB9F7FFFFF2F5FFFFADF6FFFF48F9FFFF56F8FFFF81F7FFFF08F7FFFFEBF8FFFFB2F8FFFF22F8FFFFC5F7FFFFCCF5FFFF4FF6FFFFC5F7FFFFA5F8FFFFBCF7FFFF71FAFFFFE4FAFFFF97F9FFFFC6F5FFFF02EFFFFF"> : tensor<640xi32>}> : () -> tensor<640xi32> + %6 = "tosa.const"() <{values = dense<"0xEFF0F3FAD304CFE803F3FCFEC9EDFCEFE2D4FD0501E5FCEADDE9E4F3EAF7D4EEFA03DCE4F4C7F30CFBFADEC4E0C409F5FE0410DFCBFF0EF3F9D7BCBFD2ECC900EAE4E7CFECCF08E6EDE6D9DBF6BAEED2DCDDFFD7FDF2BAFD17F0E0D7F2E9D6FAF5FFD5ECF4B119F4EDCFEA160DE6F601FECDE4E7F6F6F6FEE608E904C5F2E3F3DAF808E8FAE8EDF0F8E1E4FCFD01FFF0F2C0121508020506F2EDECF5F54307F8FDFE01E714AAE70B06FEEB02E5C4FC1F1EFB15E8EF04FFFFECE3CBD1EEF8C4EFFEDEF1FBF1C105E0C0DDFFEFDEF6EDD6F8FA0EF91AE1DC0A06EBE6D8FDEFC4EFF7F2F302C311F6E2EBE3E92EF7E40FEBF1EEE9F407D90002EC0C0201C5F9D73AED0B0CEAFC00FCFBFDCBE8EE070B01F5F2ED05FDFE181813EAFCE7EECB74FDFBF72305F201ABFD0400EAEEEFFDE6F2190C141A05EA3A1420FCD707F605F9D20DF2D5F6FB08B311D8B6ED10E5ECEAF8DB0502FEE91BEBE3F8F20ADDE8E506D6E60FEEFBE6AE01AFF309F80C01F7F0FAF5E6E5D70619E4F710E800040DB537CA6CE0F622DEFAFCE10DEED1F52D2DF6F5E5ECF703E803292508E4F7E2F6C351F1F7021E06FB03BD1406F4ED04EFF6EDFD0122061BF8E84A044001DC180A0205DC150BEDF20809D0F8D1D3FF09FCFAEF06E30714F8ED02FFEFE2F5FAF7E6E7FAF8E230FC00F2C7F2BB01FAF712ED0CEF00FBF3EADA1A05EA0D15FD0AFA0CC12DD35ACDF016DCF702BB0EFDDDEA3B2AF2FCE9F6FA09EC0C23290CFFF4EAFFD72107F4060D10F905D73000F9FB00E7EAE916041DED12E2F313151BFCE90609F80009EC1009E6150ADC10F4E303F70002F107C5FF00F4EEED09F0FEE70605D9FFF00BE82CFEF1FDF507F5F6E1010FEF12E5FBFE04F80109FCD30D00F405EE03E41CCA3AC90612E3FCFABFFEFFDDF20F230B06FA05F424EA1706191617F3F3FBF81B16E9080A09070DDB2EF00CFEDDF7F7E5162016E712EFFAF227EDFEFBE5F6FBF529D01115E90A0FDB0E16DE08EDF70AF10FC6F5EAF9F1EE09F225F0110DE401E616EF04ECF1F513080CFED9030FEF0BF5DEF30BF91501FDE9FAE9ED07E114FC16C12DDB0006010F06E4F5F4DCE7F3221BF4FA0CFC1AE92107020201E7E1F106261AE6F914080002DE16E819F7D80B0AF1FD041003171BF40DFFE1ECF0D3FC10F8FEE804FF02EB1DDF12EED0E4FDF303E91BDDFCDEFF05EB02F8EAEF05FDF9F7F912F518F806EBE6EAFC09000D04F2FE10D9ED05000705F70AED04F400EC0BEB0DC42CCCF5F80317ECD407FCD4DCE92526EE03140B12EA2517E9FC13E9DBF7012320E3F6270BFEF9EA19FF1209CE070DFB1C010A090D3CEF10ECDFE5E3DB131AF403E703E726E621D70702F1E80EF70DF109E201D6FC05EB010CCAE1FFFEEEE71304D619190BE0EAE7F000010B14F6FE0CDFEB050000FFF6F7EB20F406FA02EC17B829CBF5F5FE08E3D01917D6E8E52117FAF8110211E6160EE2F009F6E404FE0819DE0F1B0E10ECD72C0A110FBB0505F43803100B0C21D51EEFE4E8D9EB141BF406F707D834D91DCFDE11FEF305F408D8F3E107E9EF00F40C11D8FAEEFFF4EA07FBD1180E08DDEDF0FDECEEF226EB0307E3ECFEF5F30D03FCED1CEF13F3FEFE1EB12AF5F8F70DFBEEDC0A30F0E8F22A0E13F6EF070CFAF7FAD3FCF8F0EF04FDF7FCE3280B0F1203E32F1214FDC416F6FF1CF10109F9F9DF29F7FBEEE9FC1809FC080D09DF18D611DFCCFCF9FFFEED0BECE8DC020BE3F20DFE06F90BF2FCFDF71203F01FF3E6D9E204F0E3E9DF04FB0CFDF6ECFFEAE51210FCF2FCF4FF06F6FD15CD0EF709F31211F1D71124F7D8EF20160FFCF10C030FF9F4D91002EAF00701FDF4E7111407020DEE1E10FBF2D112E90104F2FC09F706E9030C01E5E9F40F0EF50B05F4F209FA16E3F1F8EFFD060402FBEACCF407E9F608F6F90CED04F7F6F50703ED05E8E6DAE109F4FCE5E50213FDF9F9ED01F2D90716F102FAF0F10DF3ED07D1FAF1FF01001606DE010BF4DAFA2E1713F90CEF02250BF3F919FAF2EF03000C0AE7F7170AFD06F4FEF7F9F1DEF7F8FCEBFB0A000BFBF5F40FF4E103F0F624F6F4F2F5FC0C0D1BED02F3E5F2F80AFBF4FADBE2F1EFFEF805F410E6FCFBFEF6E212F2F7E2F8EFE8000703EDFB031AFEE6E0DA04F7E6071109FCFFF6040AF4EBF5D70BE1EB11FE070CDB00F5F5E8F7370613FA12E90B2A09FDEF02DE04F9FE040209DA030A0CFEF4E802F5FDF6E107F4F1F6F105F30CECF60604F1E917F2DE13F8F6E4FBFF19FF0EE901F2F200FE07FBDF03F2DAF6F013E500F9FD07DE0708F2E30CF8FAD4FCFBE80615F704FBFF0E04D4C5E5FCF5EB15111FFC0E0207FFFD00EEE404EBF910FF040AE40BFCFCF8EB1D05FEFB12F20F06FA13E1F4CEFEFFF607FEFDDC03FD02F7F8D70200F8F3E92CF1F608E502EE02F7F20F05F4F00CF4DEFA0401E6FB030B00FBE804F0F7FE1017F6E609F7E60EF914E2F004F712DBFF05F8F502F9FCDCF0EFE80015EE04EDEE0CFFFACA06F9F5EC15060707010509FB0808F1E700F20907F7F4FEFFF9160CF1EB070A000412E5FFE4110EEAFADAFCFBF6FB07FAECFE0902F9F0E9EB07F5E5F224F2060BE401E8FC05F50008E9F10AFAE20601F7E60902F6FF06E9FE03F8F1111E01E5F9E6E1020809DFF0F409FFF1EF00FEF8050009FBF1E6D2F608F1F9F8EC0DF816DAF9FEF8D60BFA0A00EF070F0305FFEEE5FCEC0CFCF8FBF0FBEA0F12EBEB150E0DFF09E703F51E0BF6F3E9FDFBFFF50002F4FE0B0A0EE905ED0EFAF6F10EFC04F8F006F108FEEAFB04E5F10DF3E915FCE1E715FE08F612E5E509F4F408110DDBF2E6DFE60204DFFCEB01F8F6F80902E412F810050BEAC4F9F5F1FBF9F607FC0DDFE50500DA0DFC1EEDE80110FFFA00EDDF0FE40B00FB04E2D0F10307F2DC120B0CFA040A0FF9F510EADBF2F9F80704F00FEC05F8040BEAF006080C130B1EFCED08FFFFF2FFF6DB06EEF1F307F2EE04EAE3E808EB11F403E1E6F3FFFCF91808C7F3E1DFE5F6FDE0F5EFE50BE3020504E70B030902FDE2E204FCEAFCE7FBFE130AE5EB0902EF11FB0CF3EAFA0AEB0202F0E21BE80DFAF808E6D6FC150401F20C000BFC02FC0309E10FD2D2FD00EFEEFEF011F1FFF300EBE8DF070711294424F7E50B06FCF8EFFADE12D9FFF0040BE9F3F0F9EF05F102010BE4F2F812F0FE1B00D1F6DDE9EDF6E8EDECFBE0FDDFF3EEFDEF0E0CF9F3FBD800FAE6FDF0F4E20D2427F3F10C04E90B03F0F7D6EF00F300F8F8EC1EEE04D7F51FE6EEF72E041D1D01030606EAE9F117040ECAE2F705F0CDF9E6F7EFF80D09D9E9E0F605021F6615FEE406F70006F4F1E40CD1F4E70C15DDFF090FF5F109FD0B25E5FAEF1ADAFC15FDDD05DEDDE2FFE8EAEA01DFEEE8E9DFFCEC19FDF5F2FDD10402CB07D610E21F0C55F3E0110ACD080CFBF5ECD8EB1AFAF0E7F311F5FECCF329F1F3FC2D062217F5FC060EE5EDE9020C0DD8EFF405F8CA07E6F0EB091F09F1E6E501FCF90C61090FE60DF6FA05F1ECF4FCD0E6E5050DDA070E13F1EC01FD002AE9EBE506D4E90705E203F4E6EBFFF4E0EF06F0F2F3E0E505F21E05FDF9F9D9EF10CE0BCD13FA16FA69ECDE0606C5060F03FAF3DBEA1DFEF3DEEF06E704ECF615FCF6041715FCFE02F507FCFEFFE5F00901D90D00F7EEF318F7F9E3150D0209DFE8F2F3FD0641FE0BEF0B0FE5F7D8F50AEAD9E9E0F303E915FC04EA03E6F7F316F5DFE2EDCAD7090DEAF5F9E80BFEE7E402F012EFFEDEF0FFFE1E1816F7DFDFE4F9F60DE30309140137E6DAFCFBDD01FE03F6E40502F905F2D4F4FEF0F6FDFB13FE08F7071DE80E1100FDFAFF00EBE20807D20C0FF6E1051704F3E505FBFB05DEEEE8FDFD0231F205F9FD13F1F8D8FA0FF0DCEDE2F1FDF520F8F5E51CE6FDF510FBDEEBEDC3DA0B09FDF5EBEE0BF4DBEB04E121EA00ECFAF906161019F7E4DEE0E5EC0FE4FDFE130D1CF3D8F7EFE8FFFA00E9D90A0BEEF9EDDAF70FFFE0F90417020CF3E815D802200BF2ECF3FCECDF06FCD3EC0804FAEC0113E5ECE8FC000BD9F5EE0AE7002D00F80A03010DF6E5F7FB03F0EEF6F1F2F51A04D4DD23F009F508EBE90FEFCEEF0DF6F1E6CBF5F3EBD9ECF2DA28E4F4F1FEFD13090205FCF0F4E8E8EAFDDFE8080915FFF7D3E5EBE6F60000F4C5040EF3F4FAECF839FAD6F7FF070BF3F4E30ECFEB1E10FDE2FDFEE6E70DF2E9E908FF0AF1F714EBEEE5FC09FCE3F4F507DE051F04F20A0BF908F2F3FAF204F3F00AFAF4F41005D6DE21EF09F20DE30815F1D8F812E9E5EEC7EAE6E2E3F7F8E320E4EFE3FC010D03FAEFF5F1FDECF408EDDEE9100620F5EBD3E2EEFB01FEFA08DBFC14DEF8FFF6ED45F5E5FBF8F008D4EBFA09D4DD160EFBF3FCFEDFE708F1FBF205EFFC06F003F4F7F30905E9ECE701E0DCEF03F5DA040FECF9E40CFBFBFCF1E5130BF8EA09F4FBF607EE07F706F3191BFDE9EE03EBE704ECDADEE0F3F80AEB0DFBE6E2EDFE01FDFDECE5F5E9EC0922DFECEF0FFE1CF5D6D8E9EF1C0002F70AF6FF11DBF9F4F9E62CFCED03FAE50FECF1FF0AE1DF0E03F202FEFCE5E3F7FA03F7EEE5F103F9FA05FBF90BFFEF00EF05CCDED6F5F8DFFEFBE8FDE01BFB01FAEFE3FA0300EC02F9FD05FEF408F5FCF70004F0F7F1EFF4E3FB0DE8DEDBFEF205F4FB0ED5DBFB0204FF00F7E4E6E1E6130FDFF0F1F6F60701CDE5EFED22EB02F300E5000CDBEDFCF2F422E8DE14FDF3051BE3030FE5E504FBFEF101FCF1E3E0F4E8F209ECF70BFFF7ECF7F4FF040507EA18EA04DBF516E0F4EBEC060305F200E3E616E8E7001A0130FFEFF800071705F7E3EFF7FDFDF3F7C2F106ECFCE9FFEC04D1F4F9CFE2E8FEE7F90207FBE6DBF600F9D4EBF5E3E5EB08D9EFF9E8F9CFFFF00FD0070BF0E8EEE0081AF0DF1803F70109E70F09DBDFF4F4FCE3FE07FB13E304D4E80FEFFC0DFAFFE5FF0FFB141810D919F10DF2FA16DFF7F2DD10FFECFD06CFF62C02D1FB16FD48FDE3FDE0072810FDECEE02FD00F8EECBF70FE4FD07FDE803CDE6F0CCE7E4F6DCF1F8F5F1F9DBF0EAE4F1E4EDE8FEF4FDDBF4F3EBFED5FDFD15CC0918F7EBDEF7F50D0AE50DF9ED0E02FC1F06CAECF8F109F10602EF16FA17E5F0EEE8F3FEFA14030306001D1409C600E5F30305F9E8FBFAD715EBEC0003E0061A10E0F4EB052EE4E2F4CA0B140B0009EEF1E80803ECDF03FDE2F309FDE5F3E4F0E6C3EE01FBE5F6F1D2CFFAEDE6E0D703E8FBF71E0405CEEAED0122F2E80D09C8F61DEBF5D108E41812EFFDECF210FF0F2007D5FFF1F917F30EECE2EEF1FAF3FDDEEEEBEB05121C14F0F70D08FBCD01FAEF07FE12F0FA07E50FE7F2F7EEF4FB050DFCF9E0F708DCDAF3E10DF502FD11EFEEFB060CF7DE06D9DFF8F702E3E2EFFAF4C6FC03F7F4FBFEEDDBF7EDE6EAFCE4EEFC080A142CC5E9F41126FEE20D01D5E70DE8F9E308DE2413EFFAD3FE070E080B06D904E7F60CFB08E5E3F9F3E4F3FFCFEAE7E90305EE45EFF3FF010DE208150BFFFC2CE506041903E404ECE8F3F1021AFCF9E6F2F3E2E00D090AE007FCEFF3F618051202D3FDDDDC03FEF9DAE1E9FCEBD113F6FDEB04F006ECEFE1CBE817D5EBF316F31824C3F0FA140BFAD80CEEE3E3070606F8F5D31B15DC01DF040608FCFA05CB1FEDF7110505ECEE06F0F2E31BE0F5E3F804F9F160F1EA09FF1FE90D131907F310DC0F0338F4E414F0F4E7F0F71501FDE6F7F1E9E2080D06DD0EF9DBE5FA24FC03F9D2F1EEE50CF2F1E5E2E3FCE5D61900F8EF0AE808EBDFDEBBED16E9ECF718ED1213C3F0FC0AF0F7DAFEE9F6F1040E0802E1D31B15D406101501EF02ED03C22C02020B070AF7FAF1D608DF22F1FCE70711EE1440F2E408000FE100FFFD0CE504DE0D0111F3F824F5F7D205DEFE03F9F1F7FDDDE7EDFF0BD50CE8E3D6F91BFFFBEEDAF7FBF110E7FA0BD7E1FDFEDD0D04E9F00BF6F6EED7D8CDFAFDF5FCFB02F51D17C4E603F9E1F8FAF5FBF2F7F5F9FA01E3DD1407DDFD1A1BF1F8FDF30ACB261108FD090CECF7DFE800F00EF001F9070CF7181CF5ED04F8F8E2DFE3D4FEEF09E5150CE20D0C2E00F0D30ED7F3FEF2EDFB0AD2DCED030ECD0BE1FBD8F50805F4DFE105FEDA04EB0B12E2ED0514DE0803EFE90006E7F9E6D5E205EFEEFFEEF5FA321AC4DDF6FCDEFE060116DCF5F0FDEA02E5E8180AECF0FD0EF4F5010F07DF0F03FDF70D1BF5EEE9EDF802F30408FBF404FC1304F8FF0CF3F3F3D3DDD0F3060BE61613E60F0126FFEAE2FDE4F7EDF4D8F800D9E305F611D10BE4F5EFFEFA05EEE8DDFBFCD9ECE801F9F5F9FF10D1FEF7FBF6F305E7FFEECBDA0AF2EFEDF8F3EC2714CEE0E8FFE4ECFE0513DAF6F901F80607E0160B01EAF2FF00E8161A0AE606F9F3F50225FFF1FADFF4F4F3180BF8EB01F80BF5F9FB0AEF01FCD1DCD2E60913E203FFF00AF90E09EBF5EBFCF4E603DBF1F1EDF806EE0CE609E5F4FAF3FB0DEFEDDEFC00E8E7E0F5EDF0F9EAFFCCF0E9FB0DF509ECFCEDC3D3030002EBFEF8EC0E14D1E9EBFBE2DB010410E3ED01F7001016E10E01F9EFF1F3FADE030F13E9FFF1F4EE021DF9FAF8DEF6EAED180B05ED08F9FEEFFDF80EEFFAF6D5E0D7D40706F0FFFFF7FDF006FFE7F9E6FCEFE90DDDF7F0F5EFFBED0BE809DBF311F5F600EFEBDFFC07E8EBE5F1F2EFFBE700CFFAEBF818F70EF2E9F7C6D3FF020FF102FDF4041AD6E4EEF5E3E100FF0CE9F3FBFB011206E50FE6E0F5F0E6E8D8F20315E0FFEEF9E10403EAF8EED3F1EFE61000140D0EFDF3EFF7F114FBE2E9E5E7E7BD04000A051706F8EAF7FBF0F8DD02F2F807EB00F5EEE7FBEB11E4FADFE52EFEF2ECF8E1E5ECFAE0FA00F1F3EDFAF201DA0FEFF31AF60EFAE100DAEC010F05EA0409EDFA40E2EBF9F5FFEC01F304EBF50007031000DD1FDDD9F6F5DAECE1000014D8FBF50AE508F9EFF1DFD9E0FBEE00FA151613F7FBF1F4F314FDD8E9EFDFEEB0FE0711FF190AFDE7F2FFEEFADD01E9F303EB0BF2EAEBFEEB0FE0F3E8DF25FAF3DDF7DBE7E3F5DDFE03F1EEF5F5F405D312F0F31CFB1700E0F4DCEB091105EBFA0FEFFC3AE1E4FFF709EEFFF3FDF1F90708000BF6E020E7D9FCF6DFFDDF05F71BE5EEF608F30703F6E7DFE8E602F6F3FE0BF617F500F3F9011401E1F5E6E4E8BFFB0B0CFCF8FFF8E3FAF0EAF2F5F7E4F00AD8FCF6EEF1F4F301D8FEE9F30FFAF6E7F1EBE6F402E5FCF7EDFAFEEEF10AD100F6F31A011900E8F1D2DE09FF10F8F70705061BDED6FAFBF5ECFBF7F4F709FE01F605EBF2FEE8DBF9E5F5F7E3F4F71EF3F3F80104FC01F4D5EDF1F7F9E9F101F5F21EFA06EFF4010FF7EFF9DCEFF9D3F90503FCEBFDFEEDF1F3EAFD13F4EFF701DCF3FAEC02F7FDEBD9FDED030500F1EFE7FCE80301E2F7ECF0F8FDE3020BD1F3FFED08FC0BFDF4F7D9EFFDEE0501F70A0C0510E7E2F7F3FBF6F9EBF3F408FA0AF8F8DBFCF5DDDDEDAB05DDCA00DD17FBFEF7EB17F3EFF3DA30F4FEDBD2020BF4EE45031CE8E3110205010DECF014E9FB08F3E9E60E19F9E80101F551F903F5F2E3F0FAED29FF14D6E7EDFC0113ECEC04E80AE705FECFE5E3FAE0F2CF1006F0EC06E317FF09F9FEF6F30A01EAFAFFF012140A11E2FCE4DF070705ACF6FBFC0A140400C4E202DEDAE3B102E0DC01EF19EFFEF0E90C04EBFDDD2DF20BDDD40CFDF5EC35FD13EDDE0F1200F308FFFC07FD0008EDF0F20904FAEEEFF9FC3DF6FAF6EFD9E7FEF023060EDEEBED00F009EBE407EB04E9FDF4DBF0E6F4D9E8DDFBFDF2F10AE21CFA0FF600EEEE0E00ECEBEDFA020B0710EAFEEDEEF703FAB4FEFCF80514FE00D1EC06F3F6ECE818F6FB02171AE3FCF705DF0100F7E317F10AEBF00EEBF6E5F0EBFBFCF2081DF1D0F906F4D305FAFBED05F41DF1ED02DCF113F9F8EFF5F2E1DE0303FE1412F6E4EFFBE7F5F8DCE8E1F2EDF9EDEEFAE5E1D5E3F8F109E70201FFFE011EEDFCDEC708FA09ECE4F3EDE807F0E5EA0A03F1F3F1F1F5EBECE001EBFDEDFE0602F9F4F62AFBFAFB0D1FE807F016D2FB0BEDE20BF5EEF3F20BEFEDF4EBEBF4F8FC060FEDD3EEF7E1CAF1F601E802E81EF9EEF8F5F70604FCEBF3E5F1E301F705131106D7F0F2F6E203E5DDE8F4E90CEFDBF7E4E8DCEAFE0B1BE805FB07EE090CE3FADDBDFFFC0CF9DEE8ECEF10F6E2E604FCF7F301FBE8E1E0D5FDE9FBEBF1FEF8F0E90310F2F8FB0220F102F00CCCFAF9EEED0FF4FBE3E419F5DE05EDF3EBF5F7F819EEDBDDFFE1D6FDFEFEDD0DE71EF3FCED0900FD0D0EE4E6E1F5DE07F40B1BFD0FDEF6EAE9ED0EF2F3E7EEFCF0F0DCFC00DBF5F5FA050EF5080AF9F30306E406E1B8F8E405F9C6EEE3F80709FBFDFBE9E3FC05F1EED8F1D6FAE5F7ECF9F7F5E1ECF9F7E6EAFB0421FCF3F002CEF5F1EDF009F21CE9D414FEE5F6F409F2FAFBFA1EF5E6D801ECEA1003F6E618FC1DF4FE06EEF607010AEDE7EBDFEC0900F41EF516DCE9DEEA090DE7F9E2EAFCEA03E4E8FBD8FCF6ECEF01EA0E20F5FE0007F90BE6B400D2FCE5D0FCDDE60305FE0BF0EDFBF9F8E9E3D6FBD6F9E6F6E6FBFFFDE2EEF5E7F5DDFC041FFFEAEEF3CDFDEFEAEFFDEB0CF2CC04FDF3D8FE0CFD04FAFF1FFFF5D90FE9EE0AFCF5E1180E0DF3EC17F0F804F1FA0AF5F5DBF409FDE816EE12E5E1DEE416F9F3F9E3E0E5E6FAE7DEE4E1F0DFEEF406E0001AE3F91019FD0EFABBFCFA08CEDF06ECD9ED08F307F1F70E00E5E7F2DEF8D5F4EC00E4F91011E7ECEDE0FADAFA0121FBF1FCFACDF6E9DFE3EFF201FDD800FDEFE0F604F40901071AF803E9FEEBE2EEF700D4190A00F8EF11FA0501E9F91202F0F0FA0504EF18F817ECE6E4EE0DF0EEFBDCDCDEEFF3E1DEDBE6F6DBEBEBFAD9EA15E5F8171EF31EF4C3F50F12D8E205EEE6E60CEC01F8FA090CE4E6F9DBF0D4E8EC05D7F80D2EEAF2E6D902EBF5F627F2F40B01C709EFDBE8E7E306F4F2F4FDE003FAFFE1FAFFFC140009E7FAF1C4DEF106D21FF2F9EDF809FD05FFEEF6F401DBFF07F917EB15FD1BF4E8EFED01E4DFFBDFD7E2F300DDF5E7E700D7F0D7F6DAD40FF3F71827F21FF4C1F9080FE8E213FEF5DB0AE2050AF20902E7ECFBE5EFE7E8EBF2C7F20F1EEDEEE0E6F9E7FF0629F4F708F5D305F2CCF3EFF20EEFF9F8FCEFFBFA04DFFDFEF6290CF1EFF0FED5F0F1FCD61CEE00EBFA06EFF6F301FCEDF2D9FB0FFB16E016FB1AFAF3E3EC05E3DDFFDBD6DEE900D1FFF3EDFAE0F0D1E2EAEC0FEBF7121BED2500BFF9080CF9E31C0309DE03E70109EEEC05EAEEE8E4ECECF3EEF3D3F0FFFFE9FBDDF2F7DA001626FE06F0E6E5F8F5CEFCECF713DEF0FCF8F7D5050BE201EBF33507DFE6EAFAF8FFF2FBDE1BED00E9EC0CE6FEEC04FAF9EDF60A01090FE401EF13EDEFD2F410F1E5F5E7E8E1E905D306F2F0FCE8FADFE0F5091DE5FC1509EA23F5BDF20BFEF5DC1AFC0BDC0DFD0F0DEAD80FDFE5E5E2E5DCFBF6F1DCF6EAF1FE10E4EAF4EAF6F928FC02F0EDF2FFF4D904EBEF01E8EFF4F7F5F206FEE2F9E8E925F5D9D4F2E0F8EEE8EFEE20DEF8E7E80C0AFFEE03EAE5E9FF01EE1210EAE8E709E1EAD2F3FBF8F8F0F0E6E5F102D20FF50400E505FE0DE6072604F618FFEE14E9BCEC08FDDFD7050607E50A080D03D8E105D5E6FCE1F3E9FEEAF0D8F4F8F60A11E6F4ECECF2E42BFCFAF2F9F709F5DA01F5E3F5F2DCFDF0FDF9FBFAEAFCE5F416F5CEDA00D8EEE1EBF4EF19D900E5E803F8F9E900ECDCECFBF3E9100BF4EEE80EE6F1DEF6EDF809F3EDE6EFF0F0D10AF40DF9E60BFF12E8162307EE1A04EA13F3BFE406FBDDDEFB0108F4030FF900DFE400D7E500DFF2ECFBE0EEDAFA06FF090EF002FAEDFAE320F402E604DE0006E30701E3EDE1E50BE2F5FE01F3EEFFD8F80DF3DFEB00E1D1EAF30FEC0ED400F2E7F9F104E2FFF6EFF4F7ECE50CFE0102FA1CE9F2EBF6E2F105F5F0F8F8F0E9DAFCD806EDD50DFB0D01050AE4EB1F0AD919FBBFD20907F4E1F5FD09F80701F50BEAD5F5FCE903D5EADEEEE1F2E8F9F7F5FA0BEEFB00E2FBFC1BDFF9E3FEE1F301DCFCF1EAE0E9EC09E7F0110BFD0001EFFA16F0EAF4FBE5D8F10A0EEA0CFC10FFE800EE02DEFEF101ECF7E4F90B00EF0CFB17E2E5E1F6E5F2F9E9EAFB00E8ECDDE9D3F7DED000FAFD09FA04DAE61514E2180BC1D60812FDE5FDF1F1F91BFAFD00F2F2F003F0F5E0F5D5ECD7F3DCECF4F2E203EDF701DDF4051CE3F3DEEAEBF108D0F1F5F5EBF5EA07EFFEEA100D0406F9031F00E7F0F9E4E9070EEAEB060C0BFDF009E5E5D9F5F707FA04CE0D0706D8100502D6EBD00500F1FDF3F4F3E0F8EFE3DBCDEDDBE0ECFBF40B0608DFF0100AEE0A1BC4DF1310EFE108E7EA0103F0F1F505F3EBF7F4E5EA03D8F1E3ECE6EBE2DEE104FAEAFBECF4F221EEECF3E6E5F307DDF2FDEEFDF2F5F4E502F50802EB04F8FD23F2FAEEF8DEF9FEFEE3EEFBFA01EFEFFE01E7E8F3ECFA080AD1030F01EE0707F0CCF2CB05F8E915FDE9EBD907F5DBEFD1FBDFE6F0FC09F7F605E5EB17FDEDFD06CBE11F0EF0E2FDEAF705E2E8E4FFF7DCF8EAFBEDE010E3ECE9EDE509DDDAE309EFE806ECF1F129EEF1EFE7EDFD1ADFF80DF002F207F3DD02FA07FAE801FBFB20EEFEF1F1DCEE05FEE5F2FCE309DEF3FF09F1E4F8E9EC0F01DA020905F90603F8D2F0D7FFE9DA06F6E1F5D007FEDDFCCB06DFE5FEEE0DF0E907E4F01BF6EEFA04CBD72213ECEEFDEA0004DBE1E809F1DAF8F8FAE9CD07E9E0E6E9E308D8DECF13E5F706DCFCEE31F1EEE1F4EF062AE7FA09F80FED04EEE5F9F20CFDEBF80EFD17EE06F9DFD9E40BFBF0F702DE18DEEA0309F1E5E9F0E106F6E50DF50CFC1903F8D3E7E1FAE2D5F1F0E102C9FC07D6FBCF0AD6E6F9F90EF2F912F1FE11E6EDECFCC6DE1C0DEEF900DBFD0BCBE1F30BFCE7FBECFEE8CC02E7D1E1D5DBF9E5E4CC0BED04FED301EE2DF8F2D7FCE5FB20E803FCF71FD9EAF8EBF7D502FBF1F8FBFB11DFFEEDE2DCF605EEFEF601E40CECDDF6F6F2F3E6FBF9F800FCF9F505FA1EF7F5DEECE601E6EF02ECE906D3F6FCD9F3DFFCD8D4F7010C070E17E8020AEBE5F2F6C5F31B07E8E903E1FE02D5F1FF1DF8E507D9F0F7E2F0DDD5E1D6D2F4F8E2EFFFE804EFE1EFEC2FFCFDE002E90606DB0BFEEC17D9DD0AD5EAEFF0F3EDF4EFF20FDDE7D1F5CCF6F0F2FDE90BF1FAF1F2EDEAF6FDF004F3F20BF1DAFF0CF71AEC06F0F0F4F5E50616EFEA0101ECF6DCF3F1F9F3D50CED08F70D07F00202EBFBFCF7C902F10BCFD501EDFBF4EC000D0CF2F7FDDEDBF4DAECD8F0D1E6D9F00AE7EA0ED801E8E6E9D82BFDFCE506EE0EF7D908F5E407E9DA0ACCE7FEF0F6EEF2F3F70CEED3CCFAD5F6F40406DB13F4F5E8F2E3DEFBFDEF0FE7F404DBD50619F119E514EFECF7EFE60E1AF0EF0310D6F0F1F8F2FF04DB16ED04E40A08FB0008DB0508F2D6F7E70BC9CAFFF4FAECF70B12F8F1F7ECE9CEEBE6FEDEF0CEE8DCEA0CE9EC15E9FF06E2FADC1BF1DFDF00DD0302E1F9E6DB10F0D5FFDCF2F301F0FDF8F50408EEEBE0F0D2ECF60705F407F601EEEBEFF0F8F0F004EFFAFAE4E5FA120221EA05EFE6EEEADBF402E6F3FBF8D4E7EDFAE103EFDD08FB04E9FF0AF0F112F0F707EDD6DAF716D5DA10E7F3EB06050605F0F1FFF7DDFBDFFFDCDEC9E3E3F103F3EC01DFFC03E807E522F0DFE404E5FFFEEA04F6F1F9F7D9F3DFF8E0FEF1FFFBF30F10F4F7F5DAD5E3F90BF8ED00F1FFF3EF03EAEEF0E700EAF5FBDFF6FE14FF25000BEFF2E4E4EFE6F8F0ECF6DADFF1F7F2CBFFE0DD0001F9E903FFE7FD0FE302F8FCD4D81115EBE70FE6F8E7F5EDECF402EBF4FCF4E6E002DCD9DCE4E3F6EAEAEEEADDE9FBED0DF430F0E1EF13F8F6FAE5F9FB03F5F0E5EBE3F3F6EEEDF7F7FCFF19EF03FCC3DBE1EE03F5F2EFFDF6FAF3FF05E2FADF0DE7F0FFECF1F90F042B0502FEEDD8EDE8E00EEAE1EBD4EFE9E7F6CDFEDADCFD01F4DDFAF6F1000ADD0BF9FED8E60D13F8E900F9F5E6E8E4E4F805F5FDE702DDD901E5D9D1EED1F8ECEDE0F4DBF102E40CF92CECDFE40EF3F7FAE2F0F80205E3E4F2D8F8E8EEF2F7F2F9F81BEAF9FBCBE1E00DF7EFFBF1FFF0FDEFF3F5E501E217F5F3FCF3E9EE0AFC36F80203E7D9F6F3E712DEE7F4D3E8F0EFFAD0F5DED102FAEFE406F9F407FFD20AF4F9DBED0219E4DC01FDEBE2F1E5F00308F9F1E6F6E7E3F9E2DCD3EBD3EFF0EEE1F8E0FF04E602FD2EEBE3EB0FF301F9E5F8EAF30EE7ECEBD5F0F6F6ECF0F1F1F519E8F4F6D3D5E611F4EAFBF3F4F0F8F6EFEEE9FDE711F0F8F9ECF2E701FE2EF50006EBE4F6E5E70AE7E9F8E1E9F4E5FFD9F9E2DBFDF2EBE60AF0EC07F3D70FF7EFD5F4F811D8DB0FF8EFE2F6E7F2010902F5F0F1EEDBEEDDE4CEE5D9ECF7F2E9FDE70305DD02F325F1F2E50BEEFA00E0FFEFEDFCEAEBF2DBF5DAFBEBF2F4E3FD09F6F8E9D5D6EC03FAEBEBF7E8F7EFF8F2F8EAEBEC05F8FF00E5F6F006011CF2FDF5F7EBF7EAEC0FEDF4FCDEF0F8E0F7CAF6E6E8FEFFEEF302E8DCFE07E1F7EA01D8E70A0EDDD717ECF5E3F6EBF60006EEF8F6ECE9E9F5D4E2E0DFE8ECEAF6EC02F8EE08D5FCEB16F9F3DDF7DEF806FA02F5E611D3DF02D9F2CDF5EBF8F5D90205E90BE3DEDAEAFEF5ECE902E9F4E9F6F7EDECF7F001070007E0EEF511FC24E604F7F6F2F3F2F402F6EBFEE4E60AEEE3C9F4F1DC0003F2F6F9F6E20814DCF1E2E8D7EC0013DBDC14E8EDDAEAE30B09FAEDEEF5D2F7F8F7D6E6E7DAECE5F7EEF0F2F1F2F1E805EC25FAEBE4FDE7FEF5F80301EA15E0CBFEE3F4DBEBE502FBDC0317E810F3DEDDF1F3F2E2F4FFF4F2F200F7EFDC04E003F5F2FFECE3FB0BF824EC05FDFCE9E9F2EF06FFDBF1E1E2F0EFE8D6F0EAD5F8FFF0E5F4FFE70B05D9FEF2ECDEF6040CE4D606E7EDD7E9ECFB07FFEAF7E0E3F1E3F1DAECDFEBE3FA06E4F6E1E8F9E8EB0EF028F9F1F502EEF3F0EBF4FDF704E6D1F9E8F0ECE9E3F803E8032CEB0EFED2E9ECE0F6ECF0F9F7FAF609F7EBC7FDDDFFE8F8F9F3EEFE03F224F80100FADBF1F3E9FD05D8EBDAF3E9E3F9DEE2E3DEEEFDE3E9FFF8EE0BFBDDFC06E9DDFF0008F3EDFFEBFCE4E7EDE60406ECFBE1F2DCD5EEE8E7E9EFE701F4E4F6E6E10EE7E90AF71FF7EDF1FEEDF1F3EEF100F2EFE9D5F9EBE9F3F4E4FC05EAFF2FED01FFD6E8E8E9F9E9F2FAEF09ECFBF6E6CDF4DCEEDAFDF6F5F6FD02EC23F8FB00F9E5F2F1EBF9FEDCEFD2F2DFDC07E2E0D8E2E701EAF410F6F90AF4E9F9F9FAD7FFFC07FCFF05EAF9EEECF2E30109EDF0DFF9E1DCECF3DDF2DDEF03F2EEEFEEE825E3DFFBF421EDF0F9FAE9F6F4E7F4F9E7D5F0CFFDF0DDF9F4F1F9F9F7F72DEEEFFFD3EBF5E502FDE000EF17ECF9F4F3CCF3EAE1E5F4F3F5FCF2FCEF1FFDF90D00E6EAF2F7FD02E3F4EBE7E4E204EEDDDEE4D711DBFD20F3F0F6EAE8ECE6FCD20CF8ECFC0016E0FDF3F702E4F30AF0F5DCFAE8E9ECE0E8F4D2E703EEEBE5FAE212E6DAEEF520DFFCFDF7ECEEF2D7F1F5E5B9F6D3FDF1E4FD01FDEEFD02F525FAEBFDCDF500EA1214C5FFF319ED02F5FAC9F8F7DEF9EEFAF408EBFCED22FC000FF5EAE6F4F6F2F8E5F1FEDEF1EB00E9D6F2EDD80FC1FA21FFE2E5F7E7F3E4FAD306EBDCFBFF23D8FBEBF611F5E409FD06DAF0E5ECE9D0ECF7DCDDF9F6E5E4FCE50AEEF4F7EC22E6F9FAFEECF0EAE6F0F0EDB4FCDCF3EBED2006EEE9FFF7F31AF2ECEAE7E3F4EA0F0BCCF5ED0AE9F5F106D4FBF5DDF2EDF4F6FAF1F3FC0DF4EE00EFEFE8E3F4FFF9F5EDFAE9EFEC02E2E3F6EAF10DE7ED0CF7F4DB03EAF0E6F9D0FAF3F1F4F518EDF9E0F806EDE6FBF70AE2E9F3ECF6D2E2E5DFDBFD01E2F3F8ED17EC0509E52AF5F7FCF5DEECF4DFF2EDEFD8EFD5F0F8E52EF1E5E0F4E8EC22ECE4E3E7DEF5E4FD02E1FEE303E7F4EB0DD2F3F7E4DCF2DDF7ECF9F8F90EEEE305FBEBE0E6F5FE09F4ECF5F7F5EA18FDECF5EFF518F0E5FEEE01DAF4DEEEE0EBD3F6F6FEF8E717FB0BDA00FBEAECEADDFDEEE8F4EFFDE8DBE9E0E50DF2E1F5ECEB1AE6E8FEE829F9F0FCF0D9F6EFDBF6EDF3DFF7D8E6F4F701ECDAEE0406F427F0E502DBE0F203F0F7E8F5E9FFE5FCF3FEBCE5EFDAE5FBF8E2FFFDFFF220FEE80A02F7EBEFEDF90ED6FBE4FBEBDC0FEAEFE3E5D6FEE0F806F2F5F0E7E9E5E2E9D6FC03F2FFF918E01704FDFFD8E4F9ECFEEEF4C6EBEDECE5EBE8F404FAD5F5ECEA18DEDDE8EA1DF0E3FAECDBF2E9D0F7F1E9EAF7E1EAF0F909F2DBFC0F17EF23F7CD0DDDE6F923F5E9E8F1EA05E1F7EDFBC0DFE5D3EAFAFDDE0405FEED2402DD0F0203E7EAE80B06CC02E9EFEAE313F0ECDEDFC8F8D20110FBECEDE4FFE2E6F4DEFB04F1FFEE1FDB15150E01D7EDF5F409F2F6C1F1F0F3E8ECECF606FFDAE8EFEF09E4F3E3E218F3E7F1F3D9FCE3E4FBF2E4E9F3DAE6EBFAFFFED6F712F3FF1DEEDDF4EEE2FC25FBEDE1EDEFF0EDEAF0F0CDE0DCE6F1EDF4E10408F6E915F8E1F90AF8E8E2ED1506D7F7E7F0E5F406E6ECE5D7D1FEE01409EFE1F3F2F4F3F8F5D7F212F7FDDA0EEA12040FFBD1F3F7ED01F7EAE1F6F4DCF3F1FAF811F9E3E8FFFAF405FDEEF60FF7FAE0E7CCF0FAF1F8E4E7DAEEE0F1E8E9DE20D9F411D00810E703DCE5D8EB14FA02E1E9D9DFFBF4F8E6D0D2EDEAECEBF6DE1203F2EB0AE2FCEA040EE0E3E3E201F7FFE201EDF3EDDCF0F5DBECF1F717F9EEDDFE0EE9F4F8EACAE8FDF8F7F210FC0AE507FFE7F8FDF2FA06DAFEDCE1C8ECEEED00FCF5E7EFF6EEF2FAF9F80B0B0105F2E5C5F0EFE9FADBE9F4EBE1F2E4DDDD1CDEF512D3FE11DA0CE1CED0FA0EEE06E9E8DEE601F7EFD8E5D6F3E7FAF4FCE90603F7E20AEA06F1FC19EEEEE9CC03E804EFF5FBFAF0DEE5EADCE3D9EC1BF6F8DDFC05E6F0FFD1C0EEF4F4F1FB12F5FDDA17FEFA08F0F90606DFFDCED8CCE8F6EBFBF1F1E8E9DFF405EBFCFE00110004F3F7C6F2E3F2FBEBFBEAEDDEEDE7E8EF04D5F810D70418E413E7D9CCF1F4EA02E2E5E7DF03EDF2DED9E4E5E5F1E9FBE5F307EFF1FEF6F9EF0719ECE1EBEE11EEFAEAF8EAE0E4DCE7E1D3DDDEF415F3EBEF05FDE6E4FAD7CBFAFFF7F2FDFA01FDDB05F9ED01FCEF07F8DAFFD6DDC9E3F0F4F6FAFEE8E4ECF80BF1F3FAF50EF802E909CCEFE2FF08F0F9E5EEE1EDE2E7EB04D1F30BD90617ED16E6D9D1EAFCF2FCE0E1E9DFEEECEEEBD6E4DADEEEF3F9DBFB01F4F904FDEFEBFA18EED9EAEF08F304DFEFE7E0E2D4F5DDCFDEF0FB13E9E3E715FFE2DFECE1D0ED06F9ECF503F8ECDAFAFBF0F709E803FDDEF7E2E6CEDFE5F1F4F9FBDCCCEF09F5F5F1FDEC0EE7FDE203D4F8F405FEF5F7F2E0DEE8F4DD05F9E30100D2F410E815EAE5D8EA0CF7FAF1DEE5DFE6E3E902CFE3DAE0DFEEF8DFF000E7FBFEEBE8D40427EED2E3FA13FF0ED8FEE5DED7DBF8EBCFDFF6FEF9E1E4EF0602E7E6E7E4E1EB0302EFF50603F4E8EEF2E7FDFCECF9FDDBFFDCF4D0C4E1E3FA0DF7E9D6F00FFAFBEE01F407E001F0F9DFF5FD03F2EBFAE0ECD6EA07E40CFBE2FCF4D3EC0BE508E6F3CEEEEEF803F0DDE3ECE7E6F5FED2D9E4E3D7EBEEEBF0F4E100F5DDE8DC0930DCCBE5F30F0611D60BE9D9D7D4FEF5D9E2F8FADDDFE0FD0203ECDFE2E5E5E3FDFEE8040D15FBE4EFF6EDFDF0F00500CE04D8EDC9B9E5DE0812F6F4DFED0E0303F208EF07DB06F7FCDDEEF1F8F4F3F4ECEBCDE608E5F6E7F7DEEBD0DD1FF5F8E9EDDAF6F0EBFD05E0EAE5EAEDF2F0CFDCE7E6CDE9EBEEE9F5E6E9FBE0EDE00824DED9F1F20A060EC813EBCFDFDD03E9DCEEF9FAE5D7E40E08F9DDD2E5DCE7E9FAF8DBFE071D06DAECFEFAFCF4E0FAF9B902DFE2D7CAEEEC0311EAECDAEEFFFC000102F108DA02EDF5DBF9EBF8EEF7EDE3ECCEEBF9E3F4ED07EBECD5DC2DF8EFE9ECE5F80AF7FE06D8EFE7DBE4E1F9C7ECD7DACDECEDECE903E5DF0FE7E9D2FC21E4E5F3FD0C030FCE00E3CCECDDFCDDE1EFF8F6E8D7DF06FCF6D9D6E8DFE3E4FFF7E1EF030BF5DBF2FAF4F3F9EBFBEFD4EFEAF0ECCCF5EAFD10DADEE3E8FA04F9F3EAFCF1E2F1E5F8D3F1DCE8FE00D1EEEEDA08E1EBC4070BF3FCD4DA28E7F3F1DBE30524FBF5F5CEFCE3D6E9D1E4D0EDD1E1ECF8EFDFEC17EEC51FF1EEDBEB29F4E6FFF9EEF20DE0E6DDEEF3DDFBC6E4F4FDF60EEADFED05FCDAD3F0E6DAE10C01D4DCFBF8DBDDFE02FEF8F0EA18F2E4FAF3ECF6FC0300F1F9E0D3EDDEF8F3E6F5EF10E5E4E7EDF3D9E1E5E6ECFBD7F7F4F100E1E9E51B0C0AFAE0D828D4EA06D6F2FE2EF5F0F1CAFCF0CFE5DCE0D7E1CAE0EAFDEBE3EC23F4BE160DF5E6F527F9E9F6FCE9D915EAE1E900FDE1F3C3DFEFF0E506E3DEE6F802DCE701D7D5F105FCD7E5FC01CADC02EBF30BDFFE1EEAF1FFDFF3FDE90CFBEFF2CDD1E9E5F4F3E906F317E4E0F3F4F6E4FECCD2E2F9DAF1F0CF0DFCD6F7231CF7FDEEEA2BC2D4E8E8E1FA0800EBEDD700EFCEDFC8D4D2F0CDDFDDE4E7F9EB1EF8D80DFFF3E1F13BF9E206F7F7F00F14DDE9E20212EBF6F0E5F6DCE3FFE4ECE905D0FF06EAD3E3F8F6E0D001FACBCC0600F500D20A32E6EBF4DEF0F0FA10F0F2F5CAD7E7CFFF01F30E0003E8DAFEFBF8F6F0C6CED40CF9EEF0C90A06F516030DEEFBE2EA22E7B8E505EDEDE900E4E6D80DE7E2E8E8D8C9DEC8F2D6DFEDFAD013F6EA00F3D5E9FF3FD5D50023060E0212F9D7DAF2F2ECFDE6EEECE6E6E9ED03EA04D0EDFFF4EADF07FDDFDCE604F6D5FC01F3F9D9ED20E8C4F0DDEECFE901F70B06D3E2ECC700F5EEF703F4E7D5F2F70DEBDACAEEE20906FAF3D6FF240212F606F9FBE1D608DFCCF102FBF0DFFAF0F4D60BE7F7D3F1D9C3E0C8E1EBD0FCF0CF15EEE0F900CEDA0E23DDD6002B04EF02FC08D4F2D5C4EEE4CF01EDE0F6D500F7E2FAE9D9F2E2E9FD120AE7EEF1060ADDFDFCDC09D8E511C1C100F1EEBAE603F60814E3E2E7D6FDF6EBF1FEF8F3E701F203E0F0EBEFECF3F8EFF6D6FC21F2EE03FEF2F5EFE50AD5E0E3E9F5F3F1F9F9E9D2FDECF5D8E5E9CFE2D2DFE0D7EAEEE717E6DF05F0E8CDFE32EFD3FAFBFCEF12E205EDEAD9E4EFE4DEFFEEF2F6EAFDF5E8F7EDD8EDD8DCFDFDFBF5E909F6F7D7ECF3F2F4DEF51FD5D7FCEDEDCDDC00F2F3FAEFE3DDD8F7F4EFFAF4EBFCE901FF05E6FFEEF4E6EDDFEEEFDEEE25EFFC0004E9ECFAEA14DEDBF0E1FAE9EB02FCEBDCF6EBE4D8E6EAD3E7D2DCD0E1E9FAEA15E7E618F4E5D8F82AE5CAF306F1F007E1F8E7E7F0EFE6E6DEFCEDF1F1EBFB00E5E8ECE303E2DDFBFFEE01E40DEDFBD9EEEEEEFCDFF51EDFE7F0F1F3D6E405F5F2FCEDDCEAE7EFE3EDF9EEF1FFE8F4F202DC0FE600E9ECBFF3F2E6EF13ECC506F4ECF6E50014EDF0E8CFF1E5020503DCDCF3EEE9DFE2E8ECE7DFEADEE3E4F9EC1DF5EB1AEEFDCCED33EFC8F5EFDEDC11D9DFEA07F6F9E0E2DDFDEBF0F9EB02DEF1F6E5F313E3D9F4FAF102CA0AE3EFD4F2EE02FCE6F025E4F3F5ECEEDCF60E0BDDFAF3E8EEE6F0F4E5FAF3E8FCF1F5F804E110E808E2E7D7F4F2DDEE1DEDCEF1E7E8F6E00314E2F8F0D6F7DEDFFF05D9EAFBF1F0D8EBD1F4E9E2EAE1EAE401E60BF6F616F2FED9EE33EAC8F9EEE4CD12D4DCEB06E3EDD9E0DEFAE8EBF5E901DEF6ECEBE60BDAD9F6FDEEFCD804F1F8D4F1E8FBF2E3E420F1E6FCEEE4D7EE0711E302FAEEE8CFEDFAD9FFEBD9F7F3EEF706E6F7E706E6E4F3F4ECD0EB35EBF0E8EEF3F3E2EE18DDF3F0DD08E5D504F6E9EC03E9FDD4F1D2E5E9DAE1DFE2E9F3EB08F5E70A01E8EBFB2FE3D7FD04F2DCFAE0EAE300D5E6C9DEE5F1E6DBFFEFF6E0E5E1FBE9F2EDD7F001EC01E6FDF803DA01EDDCD5DAE807F4E40701FAD6DFF709F107ECE8E1D0ECEFE6FAECD9EFF1E1E904ECE4F007E4EBF6FAE0DDDE33EC0804EBF5EDDDE114E4E4E6E306E9F601EAFBE7F9E1FDD1F7E4E7DED9DFDDDCEAEBF102F2E501EBD8E9F334CDE2F415F1EFF7EBF2DEF3E0E6CCDDE7F4DBE908ECEEE8D9F100F2E507D4E101EFFCF3F7FD03E107FADDD1D8F8E6F1EB1CFB0BD2DFECEA0501E8EEE4C6F5F4EDE2FADEEFE3DFF30B00D1DD00EEECEE03DFE7D630DE07FDF1EDECD4D310EFE4EBE0FBE8ECF1E606E8FED90EE0FFE3F1E4DEE8D8E0EBE8F302E9E6F7F4D7E2E835D7E0F51AF4F002EFFEE8DDD6EECBE3E7F0D9D10AE5E7F6E20003E0EA07D9F201F5F204EBFF13F1FAF7E2D6DFFCE3D4DFFFEBFDD7EDE4E405F8E8EFEADBF4F0FBEBF1EBDEDAEFF7FBFCBBE3F6F5E4DFF2E3DFE630D9DE07F3E1F3C2E61EE7DAEBD1FC0104F9DEFDE2F4DC13EAF7DCF0E6E0F2E6E7EAFA0C08EFC00DE4E6DBE033D6E8FCFDE8E40DE30AF5F3DBFEC9E0EFF0EAC51BD6F8ECE801FAD5EAF2D4EE04EEFAF4F3FE11E8F7F7F1D1E501DBD5D900F1E9E2FDEBEE0AF0D8E2DCD3E1EEE8F2E2E9E0F3E4FEF0EDEBF2ECDDE9F7DFEFCBFE35F1E205E10405E7F421DEE4E9D3FAF1FE09F7E2D8F3ECF4D6D9D2E5F5DCE2EEE2DF06F209E9D81AD5E9EAE327ECE4FF05E9EC08F5EAE3F6F0F7C9EEE5E6E4D703F2F6DCE4ECF7DDEBE7DCE0F1F006EDEAF5DCDBFBF7ECD9D30502F6EDF903EAE2E9F9F803F1DFDFDED6E4E0F4F4E6EFEBE8E408EDE2F004E3DBEC07E0EDDAEB46F2F4FDDEF9F6E6F22400D5E4E0F4FD0F04F2E3D4EFF1F4DCF5E7F8EDE0E9E4E5E2FDEBF8E9E419C4DCEFEB13D2EFF61EEAFA02ED01F1E40301DAE6D9E1E0E3FFE2E7DEE6DEF3E3DADDE2DADBF5FDE1EAFCE3D9EBEEF2E5DEFEE500E8F509F4D5DCF8F206F9C5E5E8D8E8E4F202E3EBE3DFEA0BEAD5E705E3E8F9F5E1F0D6E832F4D1F9E3EFF5CFEF28F9D9EDE6FB0415FBE9F6D5F7E6F9ECF0D3ECEADEEBE6E3E503F1FAE6C618C0E5E9EC0DDCF3FA1DE7FB06D513E9EBF801DADDD6F2E5E40AD6EEDDEFDFEFDFDDD2E3E2F0F4F9D9E500F1DADDF1F4EBECF8D5F2DAF604EBCEE5F90B07FFCEEDE2D2E8E8ECF7DFDFD9ECEA14F4E3E0F2E2D5FFF1E4EAD1F62AF6F6FBD1F6F0DFE824E1DAE0E1F8EBEC00F7ECDD01EDFCEDD6DBCDFADBDFE4E8E801E4FFE5CE11D5D1F1EF0EDBED0F23EF0B03F301E7E5F8FFD6F4D4E2E4E3FBDAEFFBE7E4EFDEEDCEE0EBF2F802EEE0FDE2D9DDF3F0F9E608E1E6E9FFFFEFCFE7ECE910FAEBF4EDD1E5EAE7F6DFDBE4F8EAFDF2F0DCF0DFD2F7ECF2EEE3F31FF1FC03D002F2F8DE1DF0D7E3DAF3E3E700F8FADBF7EEEAF7D7DFCAF6E1DEDCF4DAEDF3FEE5DC1CEFDCFADF07EDE60015DCFF04FCEAE6E5F9FAD7F6F6E5DFC9F6E1EB05DFF5EEDD02D0DFE6F5F101EFF6EECCE5F3F6F3F0E007F5EDFBDDF9ECE3F3EEDA00E1E8FAE3C8EBE7F404E7D8EDF0EEF4E6F2E1F2E8D4F2FCE4F6EFEA0AF4F2FFCD00F2E3D728FDD5DBEBFBE5E402FEF9D9FFEEE7F7E6E4DBE8EEDDDFF2DDE3F2FCE5DD14DEE6EEDEFFDBEEF102EA020CF7F0E7FAECE6DBE6F7EDE4D00DE8E003E809E4CCFACBE2E8F3E9F8F607F1D3E7F6FDF0C3E001E4F6FDED06F8E8EBE9DCF7E3E2F4E0CFE9E0F3F8F0D8F0ECE8EDF1FBF1EBEDD7FAFAEDF1F2E403E8F502CA00F3D2CF14FAD6D3FDF0EFEC00F008DBF7E7EBF7DDE3DAE4E6DDD7E7DDDEEEF4E0EC00C9E2DBE013D5E9EB05F41009EDF9E0F0EAEDE4F1EEE9DEDC00F7D7FBEF08F8DDFEE3E5E9E7F8E8FA05F3DFEFF207EBC3E705E1F80107F8FDDFF4E3D501F4F0F8EDE4E4D0ED01F4DEF6E6E4F3E7F802E8ECE2EAF2E7F4E6F40BE6EB01D305F5D6E20EFBD5D8F5F1EDE403FBFCD7F4EBF0F0D0E5EBF1EED8DEE4DED9F6EBDEF006CFEBD2D607F2F5ECFAED0615E8EAD9F3E4F5DFEAFDDDE1D2F704E0E9E70500E401DEE3DBE6EAEAF913F3CDEEEC07E5D2E7F0F2ED12FBF8FFECFAEAD1FCF9E4F5F1E2EAD6ECFEF0EAF2E9E7E9F3F9F9E6EADFE9F4D8F6EADC0BE1E202CF0FFACBE215EEDAD8F9F6E5E4FFF0F8DBF3F3EDF4CBE5F4F1F6D0E1E4E1E1F0F5EBF205E1F6D3DE00FBFCE6E9DE030CE4F0E5E7DFFCE7FB05E5E6CDEAFBE1D2EB11FEE2FCD0E6E5E2FEEEFE10EFC3EFEB00E7BDDE08FAE605FCF2F6E2EEF4D6F2F9E9F2EFD5EED4E700EBE5F1E7DDF0EDF3FAE1EDE5F3F8E5F8F0D305DBF4F6C409F6D6D21EF7E0E3F7EDDBE6FCF202DDF6F5EFF8C9E403F1EED4DBE1E7DBE2F7E7FC0BEAF1D3E2F0EFF4DEFBEB0905DFECE4E5E0F9EAF6F1EDE2D5F2F5DFDFF110FBCF12CCE5EDDF02EE0210F3C9F8EAFFE5BCE2F6F5E80201F1F5DEEBFADCECF9EBF4F5D7EAD3E909E8E4F0F0DDF4DFEEFAEEF3F2EDEEDCF8EED208D0E6F0C404F4D8D723FCDBE9EDE9E4E9FBF3FFE9F5F4EFF6D8E115F8EDD3DCE5F0E7E3F2ECF80FF0F5E1D5EDE4F8DB00E90504D1DDE4F1E1F6E7E2F5EDE9D9FAF4E6DDEA00FED019CCDBE7E0FDE9FD20F3D1EDE9FCF7B3E2E9F4EE0206F1F5DEE208E7E6FCECF0F5E0E5D7EB07E5E7EFF6DAF1DBF3FBF2F0EDECE1CFF6E8E1FED4CCF9C8FDFAD9E220FADBE3E9E5E5F0FAF1F9EDF6ECF2F2DBDA0E00ECDAE1ECEDEBE5EEF0F304F7F8E3CAFEEEF6E0FCD809FBD4CEE1F4E4F6E1D903E8EDE005FBEDE0E9FDFED80BD7D4E4E3FEE3F318F5D2E2DFFA0AAFE7EAF9F1FE13EEE8DCEA0EEDE8F2F9F3ECE3E6D5EC09E4E3F1F6DBF0D3F605F6F7E6EFF2CEF7E7E705D7DAF1BFEFF7E9DE22F0E6DFEAEAD6E3FBF5F8E8F8ECEEF6DFE80C06F4D6E1F1EAE2E9E9ECFF02FDF6E2CCFDEDF4E3FEDDF5FEDDC3EBEFE4F5DBDF00E2EBE2FBF7EDDFE9FCF5D5FBD8DCE7D4F7EAFA0EF7DCE3DFEF0CA9E1E0F9F0FF09F1EBE4E304E4E9F0FAF1EEDDE6D8E218E0DCF1F3E3EFC9F6FAF504EAFB01DFFFE6E304DCE8E4BEF5F9F5DB3205F2EAF0E7DCE1FCE1F9E0F1E5ED01E9E90C02F0D9D9F2E4D3FBEEDD00080AEDE1DDF6E5F7DE0BE8FAF9DECFE0E9DFF9DAE9F6E6E5CFFEEDE8E2EAEDEDD0FBDFEBEBDAF3EEF604EAE6F8DEEEEEA6E4D8EBE5F7E8F6F0EAE201E7F8F0EEEAE7F9E6E3DF02E2DFF0F6D6EAC8FBFBEBF8F301FAE7F6E9D8FDE9DFEABDEEF5E4E23007E6F3EDE5DFF5F6D8F8E2FBEFEEFBD8D507EEEEE5E7EED6E9EEDDE2F30FEBF0EFDEF5ECF4E21DFF08FBEBD9DBEFE8FBE7EDFAEBDDF5FDDDE9E1EFEBEFCBFAE8F3E0DFF5ECE902E9C3F9E401DEC4E3D9DCE5E9FAEEE1DEF801EAFBF2F5DCE205E1E9E5F4D9E5EBFECFEBCAFDE8E6E3EA0A05FDF8F4D2FDE9FBE9BCEFF0EFDA2606E0F6E7E8F1FFF3CE0DE6F2F2F1F8C8D8F4DBF2EDDDE4CFE3E8DFF2E80FDBE1EBEBFCEBF1E71B0607F9F0F5D5E3F607F0F8EFF4CE04FCCEEDF6E9EAF2D2FBF6F2CFDA07E2EBF9DDC30AEA18CCC7D7DDCCF4E00EE8E2D50AF8E905F3EDDED904E9EDE0E6F5E6E7F6CDE9D4FFE7E4F0E9060603EEECCCFCF5EBEDC5E8EDD6DD26FBE3F6E9E7EEF8F2D1FCE2FDF1FCEFC1D8FADDF3E8E8DDDBF8E4D5E7EB14C6E1E0E5F9F1F4EC210C1401ECF6D8E5E7FBF0FBF6F7CC09FAD5F0EFEEF6FBCAEBEBFAD9E9FEE9ECF7DCBDFEE317CFCDE2E3D5DCDF17E6E0CB11ECE607F6F2E7DA02E7F0DBEA01E0E7F4D2DFE5F9EFE7F1E60301FCECEAD002FEE3EFC2EAF8DDD923FADFEFE7F7DFEEFAE7EFDAFBF2F5EEBEE4F9F1FAE2EFE0D3FBDFD8E7EE07DCECD5DDFD02F2F411F2060BEEDCE1E2DFF1F8F110F3D108F0D7F7DEE7FCF5C9E4D4FDDCF4F6FAEFFFE2C1F2DD07E8CEE1E0EDDEF005E1D8CDF6EDD7F8F300EAE6FFE7E9DF07FEDDE7F9E0E2E1F3E9F0E9ECF8E2ECE6E9DBF0E4D5F8C9F902DADE290CDDEEE4EFFAFCF7D5FEDAF1E4F4F6CEDDF803ECECF8EACDF5E8D8F1E20300F4D4DB07F9F5EBF6DB0702E3CFE7E0E1FB06E81FE2DEE904DBEED9E7F3F2C3F5DAECD7EAF3F5EC04E3D2F2D3F5FFD4DFE9EEF9F709DBDADEDF05D1F4EA00DADA03E3DDE70DF4DDE9F7E4E2CDF6F106F1F3F5D8EAD7EED9F2CED7F1DBF4F8E2DC3B12E0F8E6EC020AF8CFFBE0EAE1E8E6D8DDFC07EBE1F7F2DFFBEDD5F0DA0A09ECD3D702F0FFE508D11300DCCAE3DEED08FBDE18E3DFDA18D0F1D5E2D3FECBF2E9E3DEDBE4F7EA0DE3E7FAD2F504E0E5E2E2F4F713E3D7E4DE10D3FAEAF0DCDC0AD9E2D5F7E7D3EDFBE7EBDBE9F6FEEFFDFBE4E9DBE8F0F9E1DFE1D0F2F6F5DE4318E3FDEAEFFF0601D3EDDFE2E2EDECCEDBE80BE8E7F2EFC8FDE3DDF1D70A0CE1D4DDF9EDF4F505CF27FDE0DBECE3F10A1BE708DDDBDF03CFF5DEF1C7FCC7EBD8E4D8E0F6F3D708DDE2F7D3F5FFECEADFEFFBF007F7D8D1E706DD0BE8F7DDE2FAD7EAD5F8E8D8F0F5E8EBEFF1FCECF5F6F1E0DDEDE5FCF2E2DEE9D7F2FEEBE43505E9F8F5F002FC05CAE8DCDDD7F2EFC9D8DF0FE5E5E8E8CBECE7EAF3DD0300EBCAE5FFF2EBF9F6C82DF6E4E6E8E5E9FE23F004E3E4D4FDE1EFE2FFC6FED5E5DBE2E3DA01ECDAFED8E8F0D0F5FADEE5E9F202EE0EF2DDD2FA02E911ECF6CCD0E3E0ECD7F7F8D9DDF0E1F1E1F4F2F207E7E9DAE6E5E8F8D4E5D5EADFF1FAD3E64AFDEA01F9F2FCFE03D0D4DAE9D100E1CCDAE309E0E9E8E8E6FECF01EDDB09F5E5BEE5FEE6F1F707CC4FF9DCF0E4F7ECF816E4F5EFE1E213E8F3F506C9FECFE9D1EAFADEFCF7DDE4D7F5EBCAECFCD6E7EEF6F6F223E5E4D3F307F114EEECC8DAECDEDFCEFFF0D8E4EBEAEEE2F4FC0306FBE6EBEDE9E9F2D2E7D4E2E6EEF9EBE845FFEC12F7EFF40202C6CFD6E1D6EFE8CDDCEA03DFE6E2E6E8F2DF02EBE41C10E4BDE2F7E5F0E609BE3FFCDAF6E7F1EBFE1CEEF0FAE4D205E6F7E100C903CDF2CBF0F4D3F4FAD9EBD1F5FFCCEBEED5E8F1FCEFE903EFE1D9F20F0014E6E3CEDE02DDDAD3F7EDCDE3E3E8E6EAF0FA0AF302EBF4E6DDE9F4D5E4D4E8EAE3F7F3E54A09E41FE7F6E90505C7C7CFDFE3EDF2CBD5F000D7EBE7E5DFECECF7E9E1232AE8C6DAF0EAE8E00DB42E00E4E9E7E1E70121EFF4EFE5C7F9E9F6CD03CE03C0F8CBF2E3CEECF8D8EADFEB08D1EBEBE2EDEE04F5E3F4FCDEDCED100007D6E0D1D401DDEACFE8F1C2EBE1E3D3DFFC04FBF9EDEEEADEDADDF5D5E7D2E8E9D5F1DAE73E09E40EE3EFE2F606C7B9D0E9E2EFF8D1CBF2F1E5E8E7E9D2EAEBEFE4E21610EDC2D6F9F5E5E004B92AFADFD6DFE9D6F40AE7F8DEDFC7FFE9F2D6FED704C7E5D9F5E3D5F2E9DDE1E3E3FCD4E8F0D5ECE400F2E1F8F4D5DAFA08F704D4E0D4C2F0E2E5CEEFECBCEAD8DDC1CE0C09F405D0F1ECDBE9D6EDCEDEE4E3D6C2EAD3D53200DBF2E7E0DBE60CC5A8BFEDD8E3FBD0CCF3E8E8D9D4E1C6CEEFE6CAF10DF4DBA6D1F6EACEE503C13302CDC7CDFFC2E2FBE2E2C4D3CEFCDEECDCF3D30BC4D7D6F4F1C4ECE3DEEBDAE1FCD5E5EBD2ECE3F7E9F3FCF7D4D7F8F7D70DD9D2ECF4F2F1D3FBCBE502F20001C3EAFBECDED4060701DFFBEBDDEBE3F8ECF8D2F0FB03D4E1F4C6F20FF8FDDFC3E3BE08F3F80211DFC90008F700DDC4BDCEF0CBFCE8E8EBD0EDD30CE2F0E7DBDBFABCF7D6DFDE05DCFEF0B70018F6E2D3F2E6D0F9F8FED4F1F0B41BF5F2D6E5150CEAF501FDCEE0E5F7F9F3FCE3FEE908BEEFE4EAD7FF06D6F7E1F4DFEDEAEF06FBFCF6ECECC1151606FC0307EFEDEDF80348FCFE03F5F0E212B1E90AFA00E6FBE9B8F52410F912ECFD02F500FC07D5CBD706CDEF00F1F3FAEDCD0CDFC9DE06E7DCFF0EDA07F913FB1FDBD11305F3E1DB06E7BAFBFBE9F817BC19F7E6F6EECE2EF5EC09EFEBF1E0EC05E3F9F9E6F50002C0EEE820EF160BD3FA0203E6E9E0EFF50CFFF0F0E9F004FDF6101615E6FEE9F2D977E802FC16EEEFFFBA02FDEEEBECE701D6E324F80E0E09FC390A240DFD12EDF109E10DEDF2EFF602BF18D0BFF01BD9E8F324DE12FC03E41FE4D2FCEF17D5EAF401D0F416E40003AA09B1F81F05F2FCFBFCF102DFEECBFD16EDF80DDEE20012B038E34BE2FE24C9F9FFE3F6DFE5FC3D2EE6E0DFE5FBFFE8FD212C0ADCF8E4FCCF4BE2FC070EF1F5FED61C02E4F004E1F3DCED040EFE0F01F74EFA4414F42309EE13EA140609E40504DCFFCADD010EEEF7EF2BE9130A02EDFBFCE2E7F606F0E6F1F1F8F23AF9060CC2F9BE050F03FFE816FCF805ECF3CF1201F8150DFAECF90EC029E736CAF714C6F507C2FCF6E7EE5027E7EDEBF30608E90C21350DFAF8ED03E417FDF709FFFCF700F43BFFECFCFDDAE1DC08040BE809E80016101C0CFF0C06E4081AEA0D22DD1502EC17F3ED07F9FAFDED24CB0BF4FCEFE703E806E81009D609E20BFB33FBF611EE0DF8FBF50D00EC1AF5F4040201F300F4E512F2F5EBE904E510D91AC70C0CCFFB02CAECFEE1F71A2103FFFE04FE20E21404241514F6F9FA03140AED0502F80709EE39EB00FDD7F1F2DD10240CE30BEF08EF29E90B15E4F0EDF937D10A2AE30A04E91516E709F3F806F327C800DEFDEFF007EB2CED1B16E10EDE17FB08E5F405130B10FCE40901EB0F06D7F90EFF0AF8F7F4FBDBEBF4DA17FC13CF18D30400FB1308EBE5E7E3F4F23212EDF609031AE418020A0301E5E4E90F260DEFFB12F0FB07F21BDC10F3D70809EBED070B06061D040AFCE3F40DD4F7FFF9FDF20017FFEE11E61AF0CEE307F0FFEB37CF10D3F802EE00F1E1ED0C02FD02F815F128F30D04F0ED03080212EEEF0111D3F9070602FDF008F004F0EEE10FE114D417BCF6F3FE1CF2D9F6EFDDE8EA391EEA03170E0BE81C15ECFC12E3DFF0032713E9FA2400F8FDF41EF70704CE060CF60E01070AFE3FFB0BE7DEEEFFD90B0AF6FCF401FC1FE81DDA1807EFE819F40AF725D112C9F403EC0706BAD80400F4F01602C92D1812F7F6E9F4F60410FBF0010BDDF4020A05F3F0EFF225ECF6EF04E424C81EBFF5F1F50AEBCF0611DDF0E62F10FDF8140309E40B0BE1ED09F0E600000D09DE0E17050DEED335070D0AB90407EE2D0309040A21DD19E9DFF2FBEA0F14FB020303E72FD920D4F315FEEE0DF004E210D819E2E600F5140DCCEDF3FBFAF20AF6C82D0B0FEEF4EFFEDBEFF70DDF0509E1F1FAF70207FEF3F31FE909E900FA34BE29F3FAF30BFCF7D90233F2EDE8320A15F7F10C06FBEBF7D1FBF7ECF203FEF9F4E527080C1404E63C1214FABB15FAFB11F6F704F8F4DF28F8F6F400FD140402051B03DF15D60EE1DCFEF7F702EA06F1F9D71103DDEF0E0006F202F6F905FD15FFED2FF0E8E9E5FFEED6EADDF3F20BFCF4F0FBE9F2130AF5F201F6F9FEF5FC23D00FF60BF11911FDD60E25F9E1E42D130BFEF412FE10EBF2D913FFE3F70505FDF2EA131002050FF7270B02F2C711ECFDFDF5F60BF004F00212FFF4F6F81203F40712F5EB05F912E201FDEDF30505FDFAEFC800F9E2F404F6FA07E709F1FEF808FFE713E9EAEDE706F4EEDDE4F61002EFF7EFF8EEE50712ED0102F6EC06F3E712CFF3EE00FE0A1312E3FA07F6E3F640130EFA0BF6032805F0FC1CF8EBF3FE030C08E8F713FEFC0AFC04EE02F4D8F3FBF9E5FD020005FA03F611F3F311FAF814F3F0F5F5F9050D18EF10F7E3E9F808FEF300D6EFE2E702F306F30DE201F504F5E012ED03E3FB00F0FE09F5E201F91902DCDBD9FBF4F3080F04FA05F9FD04F7E602D802DCEE0E010610E0F8F0F6EFF744030FF80CEC092D06F9F203DE00FAFB070205D8FF08FFFAF8EC05F200F9DA07FAF2F5F4FDF008E9030503EFEF26FBDC08F9F0E4FB0111040DED0DF7F5F9FE04FDE108F2E5F0F61CE602F6FBFEE40409F6DD0AF507D5FD0EEE0716F1FE00F51003D6BDE6F8F1F1130C1AF40C00FEFB00FFF6EAFAE4FC10020408E804FCFEFEEB29FFFEF70CF30A07F410E3F7CEFBFFFB07FFF8DBFBFCF6F1FFDA01FFF9F4E42DF1F608E3F9EF01F2FE0C06F4F31EF7D9F603FAE8FD060305FAE814FAF9FB101BF7E70DFBF10D031CE1F1FEF406E10304FBF1FBEF08DFF205EBFE13EA01EEE10800FBC10DF6F0ED13000700FF0801F50B05F9ECF7EE0B00F6F8FA02F4190EFCEA170700030CE800E5100BF2FAD8F4FBF9FC09F2EEFA0BF5F2F7EEE703FAE3EE22F6080FE3F9EDFDFCFFFD07EBF417FBE10101EFEB0205F10605EB0B0DF8EE0E2501E500E8F2FE0C0DD9EDF004F7FAEE0300F201F71102F3F9D4F505EFF2F9E106F714D5FEFCF3D609F405FDF30C0C0205F9F5E5F1EA0EF1F5FFEF03DF0E17F5F1230C0AFE04EA04F8200702F3E4F4FBFCF703FAF2FF09FC06EE08EF0703F0EB0A0207F9EF00F30BFAF6F704E4F719F3E90DFDDAED0B0201FC17E8EE11F5F0081609DCFCE7EFDC0008DDFCE5FCF2FAEF0F02DA12EE180C0EF9C8FCF2EFF3F7EA03FC10DAE603F9DB0BF81AEFF0040B03FAFCF4E305E00FF9F707E3D9E4000DF7E4200409F7000E09FAEE0BF3DEEDF4F80609F107EB02F3F302EFF30D020F0F061FFFEB01FAF9F400F3E702EFF5FC1CEDEBF9EBDDEC07F108F507E4F3FC03FBFC1805C702E1EDDEF603E2F6E8E102E6FD0905DB07F7120605F3E905F7E9FDE6EDFB180CDBEE07FAF20DF60EF7EFFF05EB0100F8E916E215F4F908E6DBF11C080BF81EF710F602030003D708D2DEFC00F0F002F009F4FAE7ECE7EBE60D0211254322F2DD03FEF3FCEFF6EC11DD0BFD1700E3E8EEFBF4FFFAF50502E304010BF8FD18FED007E5F9E5F4EDE7E8F3E1F8E7F3EFFCE707FD03F309EDFFF3E0FBFEF6D8072F1BE6F809F1EC09FDF1F8E2F600EFFDF5FDF21BEC0DD0031DE5F5F4380B2D201DFE0902EAF5FC09FC06CAF9F507F6CCF9E5ECF7FAFAF0D5EEF1FEF60B166110F3D6F6EFFB15F9ECF50FDB0AFA1202D7F7FF1C03E513EB1311DD0CFAFEEDF514F8DD15EEE7CFF3EBD7E1F9E4F5F0E9E0F5E711E300F014E500F6C004E917DE121C30E6E70DE7CC0807FBF710E7F414F6ECE4F20EF503C20125F0F704350B371610FA040AE602F6F60607DA00EF05FEC604E4E5F20D13F2ECEDF30CEC03015F0607DA03F3F811F8E1FD04D9F8F405FEDA01081F02DC07EF0814E4FBEEEBE1E105FFDB0E01E9D5F3FBC7E103F3FCF7E5E303F41FEB03F413ECF109C701D712FD08063EE3E001E9C6060800F91EE8FA19FDEAD9EB04E50ADD0014FAFB081C140CFD12F402F60019F4EE0AFEDB14FBF0EDF213F6F3E51F0BEF04E5EFF7EB020241FC09EC0813DFF6DAEB10EDDDEFEBF2FDF00BFE07F5F0E9EEFC07F5E8E8DDCCD6040CE0FFFCF1F8F7F0D4F2ED18F404DFF10201290C18F2F1F1E4F8F905DFFA0A0C041AE3D8F8EDE1FEF6F9F5FC0A0DF405ECD1F4FEEBFDF20614FC11F6091CF00B23FDF7F20119FEE00C05D5130DEFE1041404EDE60FF7E203E5F8EBF4020032EE03F8FB16E9F3D4F31AEDE1F2EEF2F9F810FAF4EE0CEEF3FC02FBE5F0DDC4DA0A05F9FEE9FBFEEDE4DFF7DD2BED09EDFEFC0A1D0722F3F0F2DCE4F20CE6F8FA0F0E05F1D7F3E1E7FEF5F6EDE80D10E9FBEADAFA0AFDE0EE0A1A0211E3E51EDEFF35FFEDE4EC08F8D905F8DAEF080102E60110DCEFEAF3E002DDFFF4FCEEFC2F02EF07FCFF08F4E0F010FEF7F701FEE7EC0A04CEE316FF00FBFFEAF315E7CEF10DF7FAF3CC14E9E3E2E6F2D42DE3FFF5FAFF180AF915FAFA09EBE9EAFADFF0FE0717F3F3D9E5DFE0F602FBFACFFD0BF2F2F8ED012EF9D8ED000B08F6DDE31CD4EB32FF04D7F508F2E40BEEF2EC090015EDF60FDCF3E5F2E8F0E600FCF8E6011D05EA0A04F5FEF4F1F40BFDF8FF1510E7E80307D1E5120203FA09E2151DEDD6F810EAEF01CB12E0DAECF4F7DA22E3FCE8F7040F00F5FEF3FA16F1F503F1D8F1000423ECE3D8E3E5EE0300F809DFF50ADEF5F9F6F635EEF0F5F9F50BDED5F313D4E2250000E6FA07E5E706EBFFF807F4FA09EC00E4F9F600E9E0EBF105D8E2F100F2D70109E6EDEB01F50AF4F3F31B23F2E101F5F7FA04FFFDF904F62729F9E4F105E9E914EFEDDADFFAF50EE60DFCEEE4EA01FEF0FDF2E8FB06E90A19EBEBF3FEFD20EDCEDFE5EF0BFD02FB09F6FF04D9F8EDFAEC1CF5F901F8EC15F5DEFB10E3E71CF5F7F9FD02E5E3F2F00601EEEBE80DF3FAF7FBFC04E6E700F205CBE2D9F3F5DCFBF7E3F3E50DF109F3EDEDFF1EFAE4FDFCF908FE05F9F5FCFE1014F3F2F5F2ECE90A12F7DBDDFFF011F1F80AD9DDF705FCEE02FDE8E905E41302E7F1F0E5F60BFEC8EAE9EB19E4FFFAFDE701FFD9EDF7F3FE19E6E717FEF80A21D7FF0EECEA10F1FDEAFE06F0E0DDE7EAFD0AF2F015FBF5E0F6F6F9E7FF08F218E906DFF015DEF2ECECFB09F8E905DFE220F1FDFF17F83502F3F911F817FFFEEBFCFBF9FCF2EDC0FE09FEF7E7FFE70BCFF2F4D2E3E600E1ED070A01E9FEF5FFEEDDEBF4D9E2F102D7EFF1E0F1C5FEF908D70805F2E8EDDE0D0EEFE31D03F9060FE11008E3E2FCEDFEE1FD13F310E0FCD2F10AF3F815FBFFDDFE0CF5FB1514DF1FEF0EF5F614E1F7F3DA0700E4F30ECAF33314E1FF17F34F02DFFFE8FC260A02F5F706F7FBF2E8C80214F2F50501E104CAE3E8CFE9E2F7D8EAF9FAF5FDF2EEE6E1F6E2EDE0FDF9F7D7F3EAE203D0FA030DD30A18F6EDDBFFF50207E90FF7EF1206EE260BCEF007E313F1030BE510F211E5FDE7EDF404FF15F80401F4021210CB05E0F7FE04F3E8FAF5D00CECE3F216D8082525FBF6E6F633E5DDEFD602170B0118F8F3E406FEE6E71307FBF00700E2F5DEEFD9CAF3FDFFDAEDEADED0FE02E6DBD600E804E81E0704C5EAECF428F0E21408CAFB16E2F6CB15E90A0FF3F8EBF40D03FC2411D80801EA1EEF0BF1DCE5EDF4F40DDBF1ECEC05130A1AEAEAF80300D300F6F602FC0DECF6FBE005F0E7EC04EBFC111E1CFAD9EE0BDEDCEDFB06F9FFFE21FAE8FA060AF2E71EE3F9F7F702E0E2E8FCE7D0FDFEFAE4F3F6FBDB0005E7E9F7E3EE03F406162AB9EEF30825FCDF1602DBEE01E0F6DD0BE51113F0EDD4020317FA0B0BDF0DF6EC0FF50AE7E6F8F1E0F60ACAEAE6E7FF07DC4EECEDF3FD12E408111BFBF926DF07FB1CFCE9FFE3F5EBF10A280FFAE3ECF6E2EB001D01E502FFFBFEEC16051200D913E4EFFE01F9D5E4E3FDE4D712F502DBFFE912ECF9F8CBE814D6E7EE05EB1A1BBBF6F40E07FAD410EEEEE6020203F5F2DC0C15DDF6DD090412F3FC0AD127FAEF120307F2EF07EDF0E622DAF6E0F601FAE66AF0E7FEFA26EA0C0F2A06ED08DA11FE3CEDE813E5FDE3F5FC1E0D04E6F4F1E7F0FA18FFE10DFCE6EFF01EFD05F8D9FCF6F604F8F4DFE9E0F8DFD91BFCFDE304DF12ECE4F7BDED15E6E4F10DE5140DBDF2F801EBF7D400E404F0040C08FFE2DA1014D4090C1B00F6F7F00AC7320FF60C090BF8F2EDD20ADF2AEE00E40711EC0C49F0DEFBF914E6F9FF090FDDFBE2110211ED091BE8FED00EDF071703F1F4FDDBF0E20706D70AE8EFDFEF0FFEFBEEE2F6030509ECFD05DFE4F5F7DF12FCEFE6FFE8FFF0D5FAD3F9F7EEF0F9F5F12119BFE5FFEEDCF7F5F6EEFFF8F8F6FCFFECDC0902E0031723ED00F0F711D22C22FB03080DE8EFD9E6FFEF15EE06F7090CF51121EFE7F1EDFAE3D6E4E000E800EA1A11E3081A25F0F5CE14DBFC16F7ECF90CCDE2E11207CF08DF09E4EEFD03F2DDE90308F3FCF10E0DECF1FE09E011FAF1DFF2F8F3FDE4FDE805E6E3F1EBE9F6371FBFDAF2F1DBFB04040CE5F9F1FCEB00EEED0B04F2EEFC19F2FDF5170FE61714EF03081EF0E6E3EAEF02FB0311F7F900FB0C06F3F6F7EAF5EFCDE0DCF00304E61715E408011DEBF0DCFEED0101EFD2F605D3E8F40503D20BE10800FDF007EAE7EBFE06F1E5F207F702F9F900D709EAF9EBE2F8F707F1F2DE08E8DFE7F2E9E72A1AC8DBE4F3E7E8FB0813E5FBF602F60113EA0F0709E3EF0A03F10C2510EF0F09E700FD2BFEEAF6DAE9F5FC1B14F2F0FDF604F2F5EEF8E503FACEE0DDE5040EDF0301ECFFEF04FAF0F2E904FCF6FAD3EFF7E7FDF7F5F7EA0DE5060AF5EF11EBEBEEFF08FDDFEAF8ED00F7E3EFD3F8DCFD03E200F707F0ECD7FFF5F7EBF5F0EB101AC9E5E7EEE7D7FB0314F1F101F9FF1025EA0BFEFFE6F1FE01E9FC1B16F10502EAF4FB25FEF8F5D7EAEDF31B15FBF602F5F7EDF9EBFCE5FDF6D3E3E2D90001F1FEFEF3F2EAFBF2EAF8EA04F3F405D6F7F3F2F8EFF2F3ED0BDD041EF8EB04F1E6E8FE0EF5E0EDF3F0FEFAE1F6D5FBDEFC14E608F9F4FEEFD7FAF80AF5FCF4F1051DD0E2E8EAE4DEF9FB07FCF3FCFC011515EB09E2E5E7F3F2EADAEA0A18E903FEEEE6FD06F5FFE8CCE6EFED1108081806FBE7F1F3E6FBF2E2E9DCE6F7C402FA11FF1404EEEAECEAF3F6E20EF5080BE805FAEEEDF4F4FEE4FCDFF93DFEE8EDFBDCE7F306F2ED04EFEEF8FCECF8E30FE2F417EC0900E70C00F0FD0608E802FDE7FB3CDFF0F4F1F9E900F0F803F2FA0B040B0AE012D5DEEAF6E6F0E2F70517E0FD0400EA05FCF8F6DAD3D5FBF2FEFE0B1E0EF5F0F0EFEA00F6DAE8E6DC00B8FF0219F9170AF5E3E8EDF3F7E108F3030BEB0AF9E6EEF5F2FFDDF5E9F536F7E4DCFCD6ECE900F1F009ECEAFFF7ECF8DC11E1F117F3100AE4FE01F1060C00DEF604EAFC37E0E5FBF70CEBFCF1F201F80109040600E317E2DEF3F8E701E4FDFC1FE8F10100F80506FCEFDDE6E006FAF10305FA12F2F9EFF5FB05FBE5F6E4E3FBC7F90611FBF7FDEEDFF2E6EEF0F9FBEDFC0DD9F8FBEAF6E8FAF2D8FBE8041EF5E8E6F6E6EAF70DF5F2FDECF705F0EC05D9FEE9F215FB1306EAF9F5E307F50BEAF3FF040719DAD1F6F8F7EAF7F7EA0009FC04FA04F5F3F7E5DEF0E6FDFCE9EDF71FF6FA01FD0CF902FBE0EFF1F501EFF004EDF419F8FDEAF3FD03F4F3FCDEEF0BD8F6FF04F9E7FBF2EBEAECEBF913F9F5FFFFD8F3FEE907EC07DBD8F8EF0D0FFCE9ECEFF6EB0A0AEFF1F1ECF504E5FE0CD7EBF8EB03F70CFEFBFCF3EFFDE009F7F4020B070CE2E0F4F2F9F7F4EBEDF908F90FF8F6DFFAEEDCE3E6A80BE2D5F6DE15FE05FDE81EF3EDF4DF36F5FBE3D6000FEFEF420017E0DE0CF1030210F3F21EEAFA07F2E9E10E0DF6E7F800F54EFF03FBEDDBF2FDEC2EF51BCCE8EE03031BEEE801E904EC0E05D8E4E3FCE1F9CB0E0BF0E802E110FB11FD05F5FF0702DD0201EA0F140815DCF9E0D60A09FEAEF100FD0C190002C3E3FFDFE4D8AF0BE1E4F8FB18F206FAE41603E8FBE82FF103E6DB0803F4EE2FF90BE6DF04F6FEF70A0AFC12F7FA06E8F3EF0AF9F4F3E7F7FC3D04FAFCE3D0EB03F130EE11D3F3F103F312EBE404EAFDF40600EAEEE6FDDAEBD5FC03F4F403E210F30FFA02F1020DFEE1EFF9F101090312E1F4ECD7FB05EEB6F907FB0917FA02CEED02F004DBE726F1FFFE2F18E20608FEECF6FBFCF713ED04F4F610F6F2E9E6E5F3F8FCFBF5E9D8F90EF4E5FAECF1E90BF31CE9E302D6EF12FE0DEEFDE1DBE10A0211E80DE8F4F0FFF203F6DFEBE6E8FCFDFE05F2E6EED2DDF1F80FED0BF707EFEC11F1FDE7F80AF5FAEAF2E4E8E502EEDAD90CE4F6EEE1F5F0F5F3E802E800F4FA01FF05E5F539FAFDF72519EA0E020FD9F007F7EE0AF2EAF9F40DF8E3FEE2E5ECF203F9E9E0DCEDF9E4DFEFEBF3EB0BEA1DF2E5F1EBF805070BEBFDDBF0E409F414EF09F6E5EFF606F503DEDBECEBF70901F5EBE6F1D5E9FA0E1DEF0AEF11E3F002E4FFE7F703F7FAF6DCD0E7ED0FF4D8D602E4FFEDF2FDDEE9E7DC01E7F9FDE9FAF6FBDE0521F3FAF81F17F6070206D1EEF7F7F70CF0F7E5E61F00D416E5EDE7F0FBEAF8E4E4DC00EBEA04F4EFE111EA1BE7EBE40401F90E1FEBEDD6F2DE0FF414FCF7FCE8F4ECFBFE11E6EFEAE907EB01F3F102E6ECF8F90510030A02FBEDE6FDE50EE9F3FADAF3F6C0D1E0F60506F3EEF3D4ECF7F9F0E2DFF9DE02E5F304EFF4EEEFDF0208E8F0F4181BFEFC07FAD2E4EEF8FA09EF16E6DC1B08D905E605EAF305EAF8EDEFCF05F4F715FCE8E51B011AE1EAFBE6F103FD1BF2F2DFD8F0130000FAF7FFE5E8E3FA1B12E4FEEAE504EB0EEFDDFFE3F7F8EBF005F7141BF8F7E3FEFE11ECF3FDC8EDE8DADDD5E0FDFEF6FDE3DB02EFECE8DCE005DE00E4F7F7F8F9F4F2E1F8FAF9E8F3111DFEFC02E8D4ECF1F5F5FFE40AEED2060AE4E5EA09F2FB06F2FEF6FECE16F5FF0FF8E5DE1B0F08DFDC07E2F201ED0A0C09EBD5FB16FAF5EFEFFEEDE4E6F52E04EBFEECD2F1EA0AF2D1EEE8EDE3EFF009E60411EAEAF01200140104FEF5EED6E6E6DED8E607E9F8E2E715F2D7EDE7EB01DDFCEA00F3F90A0EF9DEE9F3FCE6EE101EFB070EEDD9E5EAEBEDF2EBFFF9DB030BE2ECE5FFE70011FFF9EC0DE001F8F7F2F5EFD51B09FAE8E202E903FDE60B1413E6EAFE1203F9F3F609F5EEEFFF2201E1FBE6C9EAF50BF3D2E5E7EFE0EEE0FEE2ED0BEAEAF61BF027FA0AF80CF1E9DBECE0E7E10CDFF5EDEA0900D7F1EDE7F5D4F7E9FDE1F5022DF9E4E5EA06F7F10526F00723F5D3F6EFEBEFE9DC02F4F6F707D40FEBFAD2F011F3F9F515E0FEFDD9E0EEF5D11CF5F4DAEFF9F1FFFEED07F00FCFFD100516F6F8FA09FFEFF6FD15EBD5FBEBC6E9F311E7E9F0EAF4DBF3CDFDE2D509FDEEF61EE729FF07FA05F7F3DDF4F2F5D703D7F8FFE609FAD9F4EEF1F5ECF1EAEAD6EC071BFDD8E4F201F5011829F90125F0DEF6EFDF04F3F102FAFEF501E608EC01D5F20FEB040300E8FA01ECECE9F0D421F9FCD4E602DDEDF7030BEDF5CDFC100416EFEEF30005F5E5F91DE1D606E5C4E3E30BDCEEF8F9F1E3EDC9E8F0EF09F2EEFB0FE62F0CFCF803FEF5EAFE0108DBF6E2ED00DAF4FED7EBE3F5F1FCFBEFF1E6EFFDFEFCE5E4FFFDE6052D2504070FDFEBEBEBE709EEF805EDF3FAFDEFE6F90ADBFAF8E602FEEDE2F2FD0AFBEAF3DD22F8FBD1D40CCBF6F20A06F4ECE70C030F0EF6D9E5F5FAF0D10027F0DEFEEDD9E3DF11E0F3F705F3ECF6D7E0FD1917ECF700FEE72D01F7F003F3F2ECFCFF08D9FFF9FB06D0E005CDE1DEF3E6EF00F6F0EFF6EBEE1006E9F900F2F7092405030AE0F5F4ECF1FBE6ECF2ECF0F5FDE60600FFD7F1EAE1F9EBDED0F3E803F5E4EAF422E8F8D2D605E9F8F306F3E2F0F900EF180FF5D6E3EFE8EDD40513FDEBF3F5DDE6E70BDFFEF90EF7F404F0FEEE172010F5FDFEEC21ECF7EC02EAE5D9EC0403E4050703F9CDE7F8CCE6EBF2EFF407E9EBE9F7FAEF1A0BEB03FAF7F1EB2701000AEDFB00F0EDF5F5DCE4F3DEFDF7EC0AF4F8E1F0E6ECF7EED1D101E0FBEAE8F2F519E000D3D7F6DDF3ECFEF0DBF4F6F2EA1606FEE1E4F3E8F7E2080302F9F6F8DBF3E9F8DAFCFB0FF4FC09F302ED1C1E13E9F906E923F3FFE601E4E5DBE6FD08F5050CF0F5DCEFF6CFE8F2EBF1F405DDECECFB09F91409EF1105F5F8F619F70AF8F9E7FB04ED0101DAE8E5E80EECE60DF8EDECF3D6EFF2E7E9E4FFEFE8F0F105F111DCFEE4D8EAD9FFE200FEEFF8F1E8EA15F707EDEF04EFFDEE0AF400F0F3F7E906E2FBEBEDE208E5E711EEFF0A0EFBEBE4FA09D32AFE03D905EDF8D1DFFA0EF80FF9E604DFDFF0F0ECF3DEEDE6FDDEF0FFEFFBF509FEEE0902E6F40E13E200F8F5EDEBFFE705F2E2D7F0EE07F2E620FEFBF8FCF9EFEFE5F7EBFCF1F1F30902EE10010EF2DAF7DB02DE000005F7ECE5FB1300FCE7F601EBEEE40AF9F8E7E8EFE70AE005F4D5D6FFD2D6FEF2FB1304F7DADDFB0FE21F1904DC01FBFDD8DEECEFFA15EFECFADAFEE7F5F6E8EFF9DDF7D6ECEFE6F4F6F8F6F202FDE5EA1618E7FAF5E1FAE904DA00F7F2DD00F104FBF9F6010EFC0106F5EBF4F0EA02E9FD0507E2EC0F120AECE506D3E6D7F7080B04ECCC0F0A08EAE406EBE4EECF0F16F5F6F5F4DBE6F407F8C5CE03D1E3E8F8F81518FCDFE5FD06F60E2BFFDF0DFBF2E8EEE6E600FBE5DCEFE2F9E5E8FBDAFA07E5FCDEE7EFE8DADDF401FBF3FAF7E3FF19F4F205D6F6F005E7F505EEF2F9F9F4F2F803FA00EAFBFEF4F3DF00E8F8E80B08F9DDF60909FFE3EBF2EAEBE5F2FA060FFCD0FB11FCF8EA06DED3F5CC0F0FFA07FCE6D6DCFA0CF9D8D60BD7F0F5F1060307F4E0E30302F70B0E05E61DF2FBD6F0E7FC08E8DED2F8E1E0F5DF03DBE80EEB01E2E8F801D0D5F501EEF70CFAE3001DF3F803D6FCF919ECF816F1F7F807F3E8F30BF8F7E9F6FEF5F6DC00EAEEEE0014FEE0FD0CF809D0E3F1E8F0E5F3F3F311F7D7F60FFA01EAF7E4D9F4DB0C01F4F5F6E0E2D3F514F8E5D30FD8F508DC03FAFAF8E2EB0502EE0D040DD921F1FCDCECE40804E3D9DAFFE7DEF0EFFCD5D403F1FADEE4FC00D0DBE2FCE50D12F0EDFF23F4F6F8E7FB0327F7FA14F701FD03EAEEE804FDFAEAE617F5E4DE0AEFE0EBF714F5EC0116F71DC7CDFAE5ECE8E5F4E306E8E4FF00000BEFF3DDDFF5E903F9F3E1F9E2EACBEB17F1E1D71AD7F4FDEB04F70B06F8F4FCF1E9FCF90CDF1CEDFFF8E1DB0507D6DBDCFFE8EDF0DEFBDAD500F4EAD6D9F2F8E3E3E1F7EC1905E1F50021FCF6EBF4F1F91EF00005F410ECF0F0F8EAE8F5F6EFE705ECCFD102E3EBE90A06E2FBFB17FB11D4C6EED5F4F1E504FFFCECFDEFFBFC0BF1EBDAECFAEB09FD07F5F3E7E9D8E410F8DAE515DCDFF3FB020A2405EEF1F9F2EA00F906F51BF2F2FAE6E90501E0E8E116D2EFFEC8F2E9F0EFF0E4D6DDE8F1F7DCFFF6E819F6EBE8F926FD01F1F8F30304E60000E609E1E508E1D805E6EEE5E8F6E2E0D8E9CBFCD904F7EEF9EB10FDF8D9E1DCCFF7FCEF0EF9F900EFD5050BFF03E6EBF3FAFD02F9190BEFEEEB05E406EAE4FA04F0E30CE3FEFD19FAF5F8ECF3F90CF907FFEDF8DFE6E6F1FEF5F1FAFE00E1FEF3D1E3E2E9EBE2FCC9E9EBE909E0F605DD11EEEDE6E2240001F7FAF304F2E9FFF3DCFAEAE30ED5D315E8EFE4EAFCE7E4EDD4C600E100FB0401DC0EF8F2D3DFD2C9FAFEEA1AE9FBFFD7D50F1CF60DE2F9F0F401FFF52117EFF6F211D6FEF7EDFC06FEE215E7FDED130306FEF2E1FC13F812F0E4F5DDDEE4F6FBEDF2050CECEBFAE0E1D5D8F5FFE1FCC7E5E8E509E5F90BEC0C10EBF1E915F1E7F1F3E2FA00F1FBE7D006F2DD00E6E106F6EAF5EDFEF7E0EAEFDCF2DDFF000700F504F8FADCDBDFDCF9F0EE11F801F1DFE20315070EE3ECF1EDF8FCEC05F7E2FDE7FCD3FBFDEBEB06E7E609F301F506FFF5EAFBF4F212F616D9F4FBE4DBF9E4F5EE02FBFDFBE6F8F6EDE4ECED05DFECC5DEF3E701F3FCF5E2090EF2FBF419F0E7F5FDEDF7FFF00AF9E6EDFFE0EDECE9F3F0EBFEEEFE01E2F3FCEFE2DCFCFF05F4EC06F5FCE7DDFAD4EEEDE611F6F4E8D5F104150DFEF0F1F4F8EAF104F6EFEBF5E0E3D90711E0D407DFE901FCFBEE0CF0E2F0FFE70402040FD70DF9F4EBF7EAFAEAF5E3DBEDEBF6EFEDF8E2ED07E8E5D6E4F4ECE7E8FDD7DDF607F9FBFF24F3E8FD10FDF4F8EB0504FFEBFAEAE2EEE107E2E7F7E706F7EDE907F6CBDD00F7FCF1F6FD07F5F3E2F9ECE6F6D91CFCE5F4E5E0FC0A0F02F0EA03F8DEF9FFF601E3E9D4DCE7FE07E4D704DDEA00F6F4E200E5E7EFFDE41008FF0EE80DF602DFED02F9E7EDDCD0F1F2FEFBDD05DDE202EFEBCCEEE5EBE6E8EFE0DE000CEDFB0922F0E3F10BFBF7FBE20100FEFDECECEBE2E6F6DFEDF0E402EBF2E4FFF6D7E4FF13EEECFCFE08EAEEDAF0DDE5FDDE2806EAF4E7E1F004050DE7E80BF1DF0409F804D9ECDFDEE20507ECDB04E2DF03F4F2EF11E7EFF6F3D60C02FD0EEE02FFEFE0E906EEE0F5DBDFFFF5FEF4D8F7E7F0F4ECF0D0EAE2E1ECE9F3E9E10F10F1F40A26EDE9F708FEFEFCE806EFEE01F0F6E6DFE103EBE9E4E3FFE6EEE7F8F2E2DBFC17EBE700FBF9EBE5E6E9DBECF7E52401F6F0E3ECE800060AE9E80BF0EB00F8F3FDE3F2E3E9E606F8F5E409E7E5FFEBF2EF11E0E8F6E8D91203F305F0F400E4E5FA00F0E1F8DDE2FBF303F2E2F4EEEAECE7F0CAE4E8DCEEF3FAF6EB0E0DE9F3FF1EF2F8F206F8F503E407F3E5EFF3F5EFE6EBE7F1E7EFE9EFEDDFF3FCE8E1DD0209F1E9EFFDEBF2DEECEAE7EEE9EC150AFBEED9EEF0060AFCEAE5FAFAEF00FEF807E8FAE8E4EB0DF4EACF01E3F3FEFAF4FC05DCD4F2F8E4FAF60807E404F5E7DC05F3F6E8F4E1E7FAEFF3F5EAF1ECFAF6DBF2DBDFF5DEE3F2FD00F9FB0EE3F0F911F8FAE8F3EAF60AF802F7DF03DCEB00E7E5DEE8E5F6E9DEEFE0E40EE3E9E8FD02ECEAE608EAEDD4EAEBDBECF8EC121102F1D2EBF80F020AE1EDFCFDF9FA0603FDF1EDE8EEE31EFDDBCFFBF0EB0001F5FDFFE7DFFAFFE2F2EFED0BE6FCF4ECEFFFEBF2D8EED8FA00E0F3EBE6DCF109FEE0F5E2E1F4D8F5EC02E9F201FBF4F4F91FFDF1F0F9F500F9F40603E305E8D6F6F1E9ECDFDEFFECE2F3F1E511F1EAE805F9E9E4F206F7EBE0EEF0D8DC03DB1709F0ECDDDBFE0AFE07E5ED0007F0F10603FCF9DDD9EBDE0506DBDEF8EBE8FAF9EFEDFBEEDCFBF5E10400EE0AF402F2F1E0F7EEF1D7F2E2EBFEE7F2F8D3EBF3F4F3E3FED9EDEDEC03E408D4ED05F2FAFBFB21FEF106FEFBF9EFEBFF05F5F5F5DAECF1E8FBDFDDF4F4EEF601E511FFDEE804E6ECEFF00100F7E9FEF8D3CEFCDD0F03F2E9E7DCFC01FB02F1EA0408DCF809F9F0FDDAD1E0EC0001E7E3EDE1F0EEF4E6F507E9E1FDF1E30714EAFE00FDF3F8EEF8F4FDE8EAE2D5FCEDF101D3F7E4E3EDEFF8E3EFF2F3ECE508D5E919ECF5F70219FEEC05FBF9F4F1F00005F1E0FBDFEEF3E503EADEF8F7F3EE00E50503E2E201EDEBEBF102F70ADFF0F8D4D6F1DDFEF7F5E1ECE2F901F9F9F3E20804E3F805F3F0F8DBD5D5ECF4FDF3E3F0D3EEE6FEF10019EBEDFCECEA0404FCF500F8F4FE07FCF4F8F5ECE8CEFCEBF2F5D1FDF2E8EFFCEBEBDEF9F6E9EFFFDEEF30E7EAECFE1CF4F309FBF1F4F3EC04FEE5C904D8F0F8D905EBEEF3EC01EAF5EAF500E3E413E5F5FBE709F616DCF3F8E4D5ECEFF003EEE7EFECECFEFBF2F5E61507E4EF05F8F2FCE7DAEFDFFB05F1EEEFDFEBD910E50523E8E1E3E6E9FCF2FFEC0DF2E2FA0413ECFBF7F6F9CBF1ECF4FACFFCFAF2EAF1EFF1D2F4F1E1E8F3EAEA1CECEEE3FD19E5FF0DF7EFE5EFE301FAE4B007D9F7F4DB07F9FFE3F013EAF6F8F2FDDCF118E80C0DCA03F919D9FBF5EFCDF4FDE80BE7F8EFFBE5FFF6FDF3ED18F7E8E904F7E8F4F3DA02D601FEF4EDE8F4F2DD0CD00224FADBD8F5E7F9F0FCF004E5D4FF0515DFF8EAF209E4E1F6FA07CFEFF7F5E3DEF2F6D9E9E9E8E2F0F7E910ECFFE7F61AECFA05F9F0E6E6F3FDF5EAB108DEF0F2E52A01EEE1F500ECEDE9F3EDF1E210ED09FFD2FDF20BDDF9ECFFDAFAFCE904ECF6F5F0ECF304EDF0E40BF0EEEFF5F6F3F1FDDBFDDE0308F4E1EEF3ECF40AEEF413F1EFD3FAE9F5F0FFF7FBEEE1FCE807F0F8E2F6FCDCE2ECF60DD8EEF3F0F3D7EAE6DAEBEBF4E000F7EE20EB0A00EF2000F608F0E4EAF5ECFCF3EED6FBD9EA00DD3BEAE2DCEAECE6F6E6E8E8EBDC12ECF4F6EA05ED04DCFBE702DAF1FCF1F7F5DEFADDF5F7FFF6E8D708F8E9EAFBF4F2FFF7DAF2EA0A0908FBF6EDF0FA15F0EC03E3F6D1E8DDF5EEF0F8F7F1F4F7D40FFF0BDFFBF3D6E4DBE0FFE4EDECF400F1E1ECDCF9F8EAE305E3F423E8F5F0ED2101F00EEFDBF4EDE706F1F3D607E0DAFAF10DE4DAEAF912EDFCEDED08E8D70C04E8F1ECFEF300DAFCF6F0C4E4F5E702F5F4DEE8F500FEFEF5D60D00F2EF04EAF309DEE4E1EFFBF3FDEBFDDEEADAF8E9FF09EAE8E4E1E8EEEEEAF0FFFEE700F516E81608F7F7C6DEE6EA00E4F6D3F6ECFBEEEBE7FFF2EFD904DEF51DDFEADAEC17FAE20EEAE0EDE4DD0DF3E6E509E8DCF5F60FEBDDF40625E9EFF6D512F1D71220ECE2EEFBEE08D7F9F8EECCDBF1E303F4FBD8F2FA03FC00F8CD14FDFEEDFDE20401D4E9E8E8FEFC01EFFEDAE4C9F4DF0715F6E0E2E5FFEFEFF7EFFCFDED00EB1EE5101B03F8CCEDE0EC0CEAF4D3FDE306EDEAE5FFF8F0DAF8ECF20BE6FDD4E812FBE4FEF1E0FAE1E70BF6E1EA01E0DAF6F601F8D6F00CFDFAEAEBE3F500D81321F4E4E4FAF4F2E4F8F1E3D7D9E6FA08EFF5DDF7FBF9F5F3F1D70103F5EEF6E80AFCDDDFEFE6FC10F4E6FCE3DBD4FAEB1812E2D7E3EEF60304F7EFF40BF200D211EF14090BF0BFF2DEE905EFEDE001EBF3F5EFF50400E9E0F605FBFA0508E4090BFDF6ECE4CDF0FBEFF8E6E6D9FDEBECF0E2E419D9EF0FD6FCEDE00AE1ECDCFE0FF4F7DBF2E4DDE700F1D9D5D1F8F5F8F0F3DC0AFAF2F7F0E3EDF6FF09E4F3DBD3F8F3EAEDF2FF06DFE1FFEDE1F1EDF81F07DEDEEF01E9F902EEF1EDF5EDFBF804F80FE907F7D2F3E8F7FBF8E3F0EBE6DDEEEAF008E7F4E4FFFCEFF9F907EB1E080802FEE6C4EDF1EBFEDDEAF2F8ECEEECD9E512DCEF11E0F0EED215EAD6D30907E8FAE3F2E9E4EA00E7CCE9D8FEF206F7F8EBFDFAFBF1EAEAF9FBED14EDFDDEC0F8E6F2F4E80B06E1E2F6E1E0ECD4F72104EBDCF1FAE2F506D3E8F1E9E6F70705F5FFDC10F6E402DAFD08FAE8F6E1DBE6ECF3EFFCDBEFECFBE9F40AE605E8110F06FF00F3CEF5E4EAFAEDF6E5FEE9E4F2EBF5FED1F40DDFF7EED719EEE0CC04F0E3F9DEF2EFDDF9FDEBD6E8E3F1F50AEEF0E4E3FAEF00DDF8EEFB0213EEF1E7E105E9E5F4E900FCD1DDF7D9DBE2D5FB1A04D8E7FAF0E0F600D9EE05F6E8F0F9F80000E309ECD4FFDEF70DECE7FDE2DEDAE9ECF4FFE6F9ECF3E8FB13EAFBE7080CFDFEF905D4F0DEFA0EF0F4DB05EAE6EAEBF0FFCBF006E3F8EBE31EEFE4CFFFF6E9F8DAEFF1DFE5F4EDE1E2E4E4EC00F0E8D7EDF9F20CDAF8E1FAFC14F0E6EAE701F5F0E8E1FBFFD1D004D9D6DDEBFF1BFBD6E309F6DDE8EFE7F6F701E6F0F8F7F9EFDFFEF0DBF7EAED09F0E5F9EEE8DBE6DEF4FAE6F8DFD8F204F9EBF5E5FE0AECF8EEF9DE00F000FDF8F6F1F2E5E1FFDF0BF4E0FCFBD5E8E6DA1BF2EADCFB0DF1F4EDECF1DFDBF4E3F5DFDFE3EBF0F4EBDEE1F9E50AE2F0E0E00825F0E2E5ED09F9F6E1EFFF05C5D704E1D5E1EEF805F5D3E9FBF7EBF0ECE605F7FEF2F8E9FFFDFBF0F8E5D4FDE1EDFEF2EBF2E4F8D6CFDAE102FAF2E8E1FE09FBF5F3EB0104EAFFF8F1E5FBFD00E6EDF8E1F9DFE512E213F9E2F5EED2E3E6D60AF2F4D402F3F3FAF0E4EDEBDDFDEBF5E2D5EEEAECF7EBE9DDECDF09E7E6E1E60B2CE3DEE6E300FCFADBFD02FCC8D006E8E2E9EDF0E7EFD2F9F8F3F1EBEBE605EDF6EEEDF10E0A02EEF9E9DBF9E3F40AF6DFF6DAF2C6C1E0D80FFDF3F5EAF20E05FFF8F5F804E30305F2E5F0EDF9E9F2F1E7FDD6E013E7FBE5F6D6E4CFD2F6E8FBF3F1DA08F1E4FA04E4F5E4DFFEEEE7E1D8F3EDE2F6E2EAD3ECE3F5EBE7E3EA0B1EE5EBF2E90102FBC90703F2D2D511E0E5F0F3F3F2E5DB0E00ECDDDEEBDF02F2F0E6DBF30C130CE6F2F2E8F7E5E001F2C3FEE3E5D5D1E7E70C04E4EDDFE806FDF90BF0F904DDFEFDE8E5F7E4FFEEFAEBE2FFD3E4FFE8F9E808E3E6D9D107EBF9F0F2DD0C0BF1FB04DCFBE3D4F3DEF3DCE7E6E2E3F2E4EBD2FCDFEFF8EDDDD90319E8F6F1F50608FCCEF5FCF4DDD60AD5E3EFF5FAFBDFD807F5EED3E2EEE3FFEFF4E6E1DF0400F9E7F3EDE2EEEAE803E7DBF2EDF2EBD3EDE40804CDE0EDDA0408F5FBDD08F2E6EFF5F3D8E9D5E80600CAE902E5FFE6F0C6020EEAF7DBCAF1DF00F3EED81518EEF4F0D605E1CDEDD9E1E2E9E3F2F7F9E1DCE20FEEDBF4EDDEE5E91CF8F5F6F9EDF8F9E3DBF60BE5D618C9E1EF02041AF6D6F0F9FBCEE3F3EFF3E600F9D1E6EFFADAE3FAF5E7F9D4E91EE4E6FFFDEB0AFEFB02F4F0D5D4FADBFFF7E2FCDB18E9EAE8F8F1D8D7E3E0F4FED4F503FCF4E8EBEA130E00F5EDCCF1CCF306E7EB0D23E9EBEBDB08F4C5EEE2D9E5DBD9F4F606E5E1E018F6D7E60CEAF1E81AFCF9E9F7E4DA02EDD5FC1CF0E013C7DDEFF4F507F0D1E7EE07D2FB04DDEDF5FBF8D4EBF105C7E001E3DB0BC8FB22E2F8FEE8E71AE90701F0E9C0D2F5DBFDF5E20CE51FE6E9F204F0E5F7C5DCEDF8D6EDFBD60402D7FA201FEFFBF7E0F1B3DDEBF3D70400FBE6E7DE0BEFC6E5CACEDFEFDAF1EDEDE4FCDB18FFEAE806E7EBE731FEF2F9F3F6EE000CD6F6FBF20004F0E7E1FAE9E811E4E9EC0AC70C03F5E7E6EDF4DECEF7F7C7D4F9FBE4FCCC0933E2F1F5E9E9FFFF0DEAF9F2C2DAF1D406FBEB0FF409E9E3F80AEDF9EBBDCFCC09F3ECF9D3010FFE18050FE8F9E2E2EDD6C1EE0EE3FCE2FBDFE1DC16E6E4FEEAD9E1DCDC06ECEBEBFEBE06FCF9ECFACCEEF62DDAE6F51FFB05EE0CECF1FAE3DEFFF2E0EDEBEAF0FBE9FEE9FEC500FF01FCE8F7F9D8CBE803F7E7F4F7E1F8D3EF26E4D5EBDFEFD4F0FDEC12FBCCE3F9D401EFEAFAEFF9E7DFEBFE06EDD5CAE7D70AFE01FFE1F4350912F406F0F9E5D2DCD2D1F90EF8FFD5F2E6F0E00FE7F7F4EDD8DDDCDEF800DFFEF0C003EFF3E404C9E00110E1E8F322F6EAE802F7F111C8BF00E0D106E9E9F8E5EFF5D6EFE3F4F8E8FB0A0508E3DBF60210E9FEECC60CC8E315B9D5F4F1EBC8E300F10F02D8E2F1DBFDF6E8F4ED01F7EDFEFBFBE7EBEAEADFF5F0F106E3F32FF8F4FEFEE9EFF3DEDCC6E7E6F1F8FFE9F1F3E3DB07ECEBEEE3E6E7DCE8F3EEEAE3F0DC0AE5F2E9F4DFD6F721F2E2F4F0F3ECF9E6F50A08CFDF07E4DF03ECFAFCF9ECF8DEEEE3F1F2DDF707EDF5F1E007F1FCE1F0E4D7F4CAF820CBE8EDEFE9DED9FCF2FBE9E9E5E9D8F6F0E9F9E6F5FDF10006FCF1FAEAF5E8EFD8F2FEE6E630F5FFFE03DEE3FCE5DDCDE6F1EAF8FFE6F8F7EAE700EBDFE9EDECEAE0E9F2DFEFE2FBE00BE8F6F7F4DFE4F51AE9DDEFF9E7E9EEE6E80A0DE5E600E4DAFEECF8FCF9EB00DBDEE2FE08EBF503F0E7FCD20BE8FFE4F0DED1FDCBF621D4F5E2EBEDE4E504EFFCEAE2DCF6DDEDE6E9F4E30301EDF9FAFDE809E3F9EFECB7F1FDEFE920EDCEFFF1E6F1EBF7DBE4FAE1DBF8FAF9F800DAE5FBECDDDBE8E8F9DFEA02E6EDD6F9ED1AFAFDEEE6F0D8ED2BF7D7F3E2D8D5FEE2D50928EFF6FBE5DAFDF0F903F4F4DCE3EEDF0817EEF5F8EDE8FECBFFE5F3D8F5E0E200CDF924D8FDEBEBEBF5F70B0AE7EBEDE6F9E3EEFAE3F7EAFAFFF5F80200EB0AE6FFE9E4CBF2FBE8EA2BEED5EBE1E1F1E9F8EBDB01EDE0FFF4D6F4FFD2EFFDF0E5D7EDD5FFE6F004E8F2D6FDE708FA08EEE9F2E3EE29F3D5F7E5DBC8FEE2D2051EE0ECEAE2DDFAECF4FCF0F3DCE8DDE1F60FE2FAFAF1E3F9DBF6F1FBD8F0DADFF4CDEC1CE3F3F1EDE7ECED0413EAF2F8EFF3D5ECF9D2FFE0E4FAFBEBFD01EDF1E7FFEEE4EBFAF4DBE345F2F0E4EBEBEFEDE9EED3FEF3EA07F9CCF8EDE5F503E9F8E5F6D9F6E5EEFDF1EBE3F2E4FAFAFAE4FDE5F5F31EE6E7F2FDE8D5E3EBDCFE1DCEDFDCDBE1F5E8EA04F8E8DAD8D6EDFFF3F6EDF8F3E7FBD9FAF806E4FEDEC0D9C2EA06EAF5FF00F8ECDDF706F5F3E6E9EBDBE8E9DAFAE0E4F1F9DAEFFCF2E2EE03EAEBF207E8E3D743F60503E8EFEAE4DFEAD5EFEAEC05F9F3F8E0F9F1FDE2F8E4FAEAFADAEDF3EFE8E9EDE7F4F6F5DFEED8F3EB25CFF3E709E8E2E5F4E2FA12D8DDDFD6E1F8DAF110FAE1E1D0E7F40CE40EE9ECF3EEF2DBF4FB07EC09EBBFD5C5FCE5EBFE12F705E2DDEDE30CF1E3F0EDD0F2EEE4E4EFE4F3E6DBFA0402CCD7FBEEEDEC0DE7EFD03DE804FFEEE5E8D9D0E6DEF0F0E5F8F6E9EDDC03F204DA0AF403EF08E1F4FAECEEECEDE5F5EEF4DAF9D8EAE221D9F0EC0FECE1F0F3EF00F9CEE2DFDEE1F1D8D510F2DCF1DAF7F7F8E90DECFEF1F5E7EEEBFE18FEFCEBC3DAD300E0CFF4F5E1FBE5EAE5DD09EBE5EFF7DEF5EAF1F2E5F5E7DFE901F602B6DBEFF5E4DEF7F3ECE139E6DC08F3D8F2CCDFEDDCE4F4DAF907F7F1D6F5EC01DD02F900E50AE5FA02F2F4E200FCFBF4D7E8E9E3E6D717D2F6EDF5E4D6FAE5FA0B08D6EFE9DDE6EFF0CB25EAF3EFDF00EEEAE6F7E4F4F2F5EFF4EEFE12F3F6E9CED7D600D8CBE9FDEBE9F8F4E5EC05E6D8E3E4CFE0EADEF3D6F3E7F8E106E7F8E3EBE7E3E6F3E2FDD4FA3FFEE005DDFB03F1EFF2D4EFEAE1F4FAEFFFF5DAE2FAEEEAE0E6DBFEF0F2F8F7EED509EAFEECEDF1D5E7F6DC10ECEFF401E4E4F8FBE0FA13EDEAECF1D8E3EBE20B02EEE1DDEDE8F3E4EFEAE5E3F1FEEDE4F8DCE3FAEBCEE0C20402EEFAF5FCE3F6E4F4F400E8D9E1E4D6E3D9E7F4DAFCF0F1E20DE5EBEAFFE0E5ED07E6F7E0E54EFEF1FCDCF5F3EEEEEFF0DFE5EAF10807F8ECE4E2FBF3EBE704F10EE8F5FDF1F0DD02DFECEEF6F1C6DD01E4FFCEFCED14E4E7F2F0F40A05FDF1FEE4CAE0E7EB06EFE2DCE1DFE7FBD4E5EDE0CBF8F0D5E6FEE6E3ECE1D3EBCF01E6F8F2EE00EBE4DBF4ED09EEC2EAF0D9E9DDE202D8FAE9E5E412E2E1E1FFDAECF9F4E6FFDEE13C06CDF7E1ECF3D6E8F2E7E3EFEEF90D08EFE3F4E404E8EFFA00DB05E6F7FEF3EFDB09E4ECE9DAEFC1E5FCE7F4D7FEF213E1E4F4D9020511F1F001DBC9F1EEEA12E8E7DCE8DFE2FCD5DAEEECDEF8EBD2E502F5E3E1E2D2F3D5FED7E9E3F1FCE4E0E2F20807F3CDF1E7D7E5E2DEF5D1ECDEF0E61AE8EDDDEBD6D400EFEAF3D9EE3605F4FDCDF3EFE1E3F5CEE4E0E8F3FAE1F8F2EAE80BECFC02E0E6E9F4F1F4F7F5E306D8F2E8DCF0D9D3FFEBF5DAFA0A1CE5F8EFFAF3050BF2F0F3F1CBE1E9EA06E9E3F7DEDFE1FBE8D8E9F7E3FAF7DDE3FDE7E4E0E4D101D60BE5DFFCF3F2EBDAE6E9E111EEE5F9F3C9E5E8DCF3D6E6E9FAEC03EAF7D5E8DFE1F7EAF4F5E6EE26FCFA04CEFCEFFFDDF0E4E1E2E3F0F3E0F8F4FAE5FDEDE7FAE6ECDDF1F4F1EBF7D6F4E8F8EBEBF3ECDC08DBF4EDF1F90FD6F6F3FBE2FC00F4EBF4F6E5E5E6D4FFE7E701DCF5DFF1FCDCEEEEE9F1F7DEEEF3CDEEEEECD7F6DC09F5E805D9ECE7F0F4ECD105D5E100EAC2E7E2E5FEDEEBEFF4EEF9DDFADBE9E8DEF2F8EBFEF1E61004EE01CAFAEEEAD4F1ECE2DBF6F9F6DAF5FBFDE709F0E6FEF6F2EEE201EFEDF8D5EAE9F4EBECE3DAEB04DDEFDAFBEDF9E3F2FDF9E5021FE6D3FFE3E1EAEBDA19F4DA02E205D3E1EFD9F5F0E8E8EAE6FCF3D6F0F6F2CCCBCC08E6EC07E6F4F5F5EFE7D3FED4DCF6E3CFE3DCE6F4EAE8F2EAE9F1E704ECE1EBD8FCF6F5F9F2E20AF5F304C8FCEFD7CEEEEBE2D203F1FEE6F9E90BE5FFE7EA01E3F0EBE0F6E9E1F2D8E7E7ECE3F7DCC7E8ECE206D6F4EBFCEF07FDF1EEF60CE7E0FCECDEE7E0E10C00D0FEE9FEE9EEF7EEFBF3DDF7DDE7FDEFE4F6F6FDCCC8D70DDEF00EF9E4FEE6F5E3CC0BE7ECFAF1E0DED0E2FDEBEDF6E2E9F7DD02FCDFEBE8EAEDEDFBE4F511EFE903CF02F1DAE1EDF0DED3FAF4FBDDFFF6FEDFF9ECF0F1D4F2F8EBFBE2E3EED8E0F3E7E1FAE3D0EFE3D8FCF3FCEEF2ECFF0BECE3EA0AE3EAF6E9EFDBE5D8020ADBEDE4FFF4EEFAE8FBE2DFE5E0EA09EFD1F2F100CDD8DDF6ECE81DF0E4FEEFFAEAC806F0DCF8F6DFE7D7E0FDE7F7F5E5ECEDE802F0DCEAE8ECF1DEFCE7DF0FEADF00CE0BF8D4E2F4DEE3D3FDFCEFDFFBEAFCE3F7F5E9F6CFF3FFEC01DCE2F0DCE6ECF0EDFDE1E2FBE5DFF7FD04E6E1DEFD06E9EAF6FDDDF1FCF8F8E5EBD4F301E0D4EB08F4EFF2D900EDDAF6E7EC06E6C6F1EDF7CEC2D90CF4E10EF3DDF1E8EFF4CCF8F1E3F7F1D5E7D5DCF9E6F6F2E1E2F1E000F0D7EAE8F9F3E9FEEDD40EE6F2F5C006EEDED1FEE6E9D8FFF5E7DDF5EE07ECFEFAF0F8CEF50FEBF8E4DDECDDE3E0F3EA08DFE4F7E7E3E6EFFBE5F3E703FDE8E2F700DFF003F7E0EBE6DDF8F8D6E4EF05EEE00BD705F7D6F6E4EE03EFCFFBF1F7C2C1D402F0E10BEFD9F0E9EEF9D6F8EEE4F9F9D4E3D5DE03E4FAF0EBE4F4D2FDEFE4F1F9F3E7E2FBEBD511D9E5ECBF01EBE1D5FEECE6DFF5F5F3E1F3ED05F9FCF9EDEFE0F11DF3F5E6DEEBE4EDE2F0EF04DCE5FCF8D8E4E5FEE4F7E3FCF9DCD2F90DDFED02E4E4ECEEE101F9DDE2E5F2F0E012D701F2D8EEE1EC0CF2D8EEEFF2D1B9D1F6EDE409F6DAF1EDE908E1F2EFE7F6FBD9DFDBE201E101F2F1E1F4CF04EFE5ECF2EED5D2F8E6E606DDCCF6C3FAF2E1DFF4ECE5D7F2F3F2E4EFED02FBFBF1EEE5E6E814FBF5EDE0F4DDF1E9EEF600CEECFEFDD0F6F1FBE9F3D5FDF1E2C4F60FE4EDFFDDF1E5F4E60D03E8E9E2F0F1E800E3F8ECDBF1DBED01F6D7DFE6EFE3B9D0F8F0E50306D7E4ECF00CE7F0E8F6F9EFDAE0D9E503DFF9F0F4E3F3C607FAEBF6EBF1E9D0FAE4EA0CDEDAEDBAEAEFF0DDFCE6EDD2EFF5E3DBF2F202F4FFF0ECEAE9F11002FBE7E0F7DEE8ECEAEF0AD6F2FAF8D3F7F0F7EFF6D9ECF7E7BCFA08E5EDF5E5F3DFF0E602FAE9E9E4F2EBE1F4E2FAEFCFEBE5F1FBF9E0E1E6E6EDB1D0EBF3E800FCDCE3F1E802DCF2E8F7FBF0D1E5D8D913D7EAF4F6E8F1BA04F1E902F5FEFEDC05E5E008E5E6E2BDF1F5F9DA01F6F9DFF6EAE5DBF0E506F2FCE9EDF9FDF017FBFAEBDEF6D9D4F7ECDF0DE306F1F5E5ECE6FDEA04E6E7F4E3C8EE09DCEDFCF3E9DFECCE06F1E2E4E7F0E3E5F3EEF7F4D6EEE6E9FDEBEAFAE6E8D5B1D7DCEAE1F2DDE4DEF2E8FFDDFDF0E5F3EBF0E6E2DBFBD8EEF3FBD8ECBB04F5DFF1F700F5E1FBEBD502F0DDE9BDEAF3E5E1FCFBE9E9F4E7E5EBEADF05F208F3EBF1EBDB0EE9F8F6E7F5CDECEDDAE600F1E8F102E4EBEBF7EC17FEF1F6F0D1E707E5F00DF8F0E4E5F202E3E3E5E8F0E8E0F1F6FAE6D9F1E3E9FEEDC6FAEEFDC4CFD6DEDCE2E6F0DFD1EBFEFEE2FBF4EEE3E5FDE3E9E1EFD1F1EE03CEF1BF02E3D9E2EB0A03F7FFF7D000EFFBE7BDEDECF0D9F6FCE3F0ECECF1F7E8D418F403F6E8F1D5DDFAD8FEFBDEEEC8EAE3DCF7F4F7DCDFF9EDEFE8F3ED1609F2F4ECECDBF6F2FB15FFE3F1D50100D2EBF9E5F0EEE3F401F8D7D409DAECF7E1C70EF015B4CFD1E1CAEFDF06D9D8E210F3E306F1E9E7DD02E8EBD7DEEAF7EAFACAEAC80AE7D7E7E40503FEF7F0C70200EBECC4E6E9D2D9F3EAE5F2EEEBEFEDE6D805F10EF3F6ECD0DF04D902F6EBECCEFDE0CFEBF4FDC9E2F0EAEBEEF6F41A0BF9FBEFEAE4FFE4EE1801EEF3D40301DEE9F0E9F7F7E3E2F7FDE4E3FEE1EEFADFC301F011B4D8D1E9D7D6E30FD4D6D51AE8E007F2EEEFDDFAE7EFD5E4F6F1E9F9D2E2D906EBDBEBE601FAFCF3ECCE0605E3EEC1E6F5DCD8F6F0E2E9EAFAE3E4F0EDF9E507F3F0E8CDEA00EE07F0EFE8C8FDDFD6EAF7F2DCE9E4E6F304F3FF09F0F207F3D4EEFADCE919F708EED705F8DDF3E1E3FDF3D9DEDF01E3F0F4F4EEFEE5C3F3E600D3DCD6E4EFD9F0FED1CAD4FCE9CEF7F1FCF4E9EEEAECD905F3F0EAFEE2E6D6FEE1E4E7F4F7DFE8F0EADAF1ECD5F3C9F4FFDFDBF902E1E8E8F3FBF2ECDB09E8FEE7E9E6E1E3FE01F8F7F5EFBFF8E5D8F4F0E101EFE8E3FCF5F2F4F0E0F4FEE4C9EEF4DDEF2BF115DBE8E80DDFEFE0E4FAEFD0EAE5F2DEE5F2F0F2FDE8D3F0DAF1E7E0D5EBECF4EF09CDCAEBE300CDF0EBFDE5DBECE6DDDE0AE8F3EDFCE5E8BE04EAF6F102F7DCE6E3EDD8F2DAD7ECDBF1F4E9D7FF04E7F0ECEE03FEE9D70AF700E8DBD0F3E20303F8ECF4F4CD03E7D4F3ECDB0AE9ECDFF4E9FCEC00D7FAFCDDC0EBFBE7F72DE708DAEBD825D8F2DCE2E0F8DAE4F7EAE5D7E6ECF103EBE8FADBF1E4EFD3E3E0EEEC12D2C4F5E508D0F8EFECE9DEF7DBE4CBF2DEEBF101E8F0CDF4EDEDEE07FCE7E1E9E8EFFAEBE1DED1EFF3F6D90007E8F5F0F5FFF8F1DDFEF6FAEAE1D9EAE1EF07F5F5EFF8B704DEDBF5E5DD0BDEEEE5E9E7F000FED40BF9DECFF5FFECFB53F1F5D4E8DC0DD8F3E4F0D3F5DADEE8EADFDCF7E7E1FDE6E4F4DCF0DDFBD7E3EDF4E501E5C6E2EDFFDA0BEAF1EAE7ECD8EDCCF3DFECF3F9E9EFE1FCF4DCF2F8F1E2CFFAE6FAF6EDE2E8D7F1FAE9DFF4F0EDEDF9F6FFF1F7D7F6F3F4DEE8E1E1DEE709F1F4E8F4B7F4E1E8F8EBDE03E9E2ECF0EBE906EFCD11F1DFD9EEFFE5EE59FBF3DAF1CF03EBE9E6FED0F6EFD8EBE8EAD402E0E4FADEEBEDDEF3D9E9D2EFF0FDE808E0CFE202FBE712EEEFDCD1DEDCE7C7E8EAF5E4F5DFF1CA08EFDEF6E2ECDDDBF2EDF2DEFAD7EDDEF1F2C7DBF6D9F0F203F3FCEAEEE0E1FA07D7FFE0ECE1F8FCF201EBFFCC06CBF7F3E9DEFAE7D9EFE4DCF104FFC825EDE2DCFE2BE9E05AF0E5E4F1DB21FEE1F902D1F4FCDBE5E808D0FCE3E6E8DDFFEEE2E3D0EBC5F7FFEFF618CBD3E403FAEF19ECE3D9DDD9DEDDBDF4E3F0E9EFEAF3CE05F6EEFF02EBF2E0F8E8EBD6FAD3E1E5ECF2E6DFF1DEF40301EEF1F0EED5DBFAFFE2ECDDF1E0FAFAEFF8E0F5CFFCD8FDEEF8E612E7DCEEE2D9EEF303C21BF4DBE6F920E3E35EFEDCECF4CC0DFCEDE800D8FAF4E0DEF202CAF3EAE0E8D7FCFDE0E6C4E7CDF802E9E2FBD9CCEB0003FF17EBDADFE2E6E0DBC5EEE0E3E8E9EAECD900F1F7F316EDFADAECE7EED5F4D2E5EADEF1F4DFFCF2EB11F2F5E9F7F1D4D5EFFAEEE4DBF0D8FAF8E4FCE3EAC7F2E7F7EBF7E92AE7E7E6DEE0E7EB06BB12FBE4DEF40AE0EC5EFFDEDFF5C202F6F3D204E0FADCE8DBF6ECCBECEBDFE0EAEC04DDE8C5F2D5F207F0D6F1EBC6EEF706FE06E0D6E0DAEEDEE9C5DDE4DAF1E9E7D7CE0CFCE7F3F9EEEAD3E6DFF0D8F4D2E6EBCFECD9E1F2F5EA01EDF0E6E6F2D2C8EBFFEBE6E6F4CEFBE9F3FCE3F2BDEDEBEDEAF4E50EEBE0E4E7F0E6EDFABA0CF3E4CBF00ED3E145F6E7D0EDC307F6ECDCFBE2FCE5D8EAF9EACFF2DBE5D6EEE3F9E1E4CBE6D3E804EADAF2E2C0EB0301F303DAD7E3C5E6DEE1C4DDDFD6F1DEDFC1BA1A03E4F8D7F0EDD3F0D9E7D5EBE4E4D7BEE4CACFE0E5DEE2F4E1E1D2F8D3B6DE08E3E3F4F4D2FDDBF7F3D3F3B3D2F2E2D200DFF3DDC3D9E2E6D1F1FABC0DFCD4B9E32ABECD3DF0CEB5E2CA02F0DEE1F0DD02E7CAEEF7F8BCEAD3E2E5E5E5FDE1E2C5E3D2E901E5EFE7E3BFEE05EFD010DCC8F2F2F0ECD2FBCAE500F90905C0EAF2EBE3D50508FDDBFDE8DBEDE8FAEEF5D2F4F9FAD4E0F1CBF10DF701DCC0E3BA0CF8F10213DFC9FC06F302E0C8BED3F6D3FFE8E7EAD1E9D708DDF9E5D9D9F8B9FBDADDD80CDFFEEEB60620F6E0D2F3E7D202F8FFD7F3F1B31EF8F3D7E4130DEDF405FBD2E0E5F6FBEFFCE1FCE908C0ECE3DEDA0402C3F3DBF4D8EC00FD08F3F2EFF3ECCA141803F4F902EEF3FDFD113B000600E9E6DE0DCAEA08F10BDDF6EFB3002C00FD0BE301FEEAFAFE12DFCEDB0EDBEBFAF305FCE4D802D7DFDC08E2E2FC1AE70DF01AFC20D4D32009FEE2DC0EE4B806F9E7FA23B920FDF2F6F9C432F2F702FAEAFBCDE602F1EDEEE3E6FF04C0D9EBF4F81606BEF00B05E0E10902F60DF3EAFCECFE0003E9010915E00A05F9EE56F106F600EDEDFADC02F8DBFCE1E005D1ED36E308F8FAFE31FC180A091AEFFC17F90CE2FCFDF6ECCBFEB8E2ED1DCBEBEE33E514EB0EE124DFD20AFA1ECFE80303D70519D90217AB15BDEE2A14EE01FC0CEE14DD01C5010DFCF3FFDCCDFD0FB422F10DEBF624B7ED08E6F8DD080B4227DFD7EBEA05FAF0F5152109D802FE03DF30F3FF00F9FBF3FDFA2001D5FAFCD8F2D8F91100F1FAF7F44EEA3810EB2F0CFA1EFB12F80CEB07F0E5E7B400FF0CDFFCEC31EE0DFB12EBFBFCE8F2030DEDE6FCF3FF013AF90318C101CCF81A0C05F0190DF60FE908CE18F8051303F9DDF90DC717EE01D0EE12B8EB0FC907FAFCF65917E3E4F4F90DFDEA091C2B08F8FF0407EB060DFC07EF09F6011241FCDD00F6D4DFD7150904E1F9E2FE16091308E8150CEE0B25EA021BE118F6F004E50906F7F601EC22D0FCE90FEEE702F30FF5180FD414E10D0230FEF115EC0F07FBFF1206F51A07F0090110EDFDECEF11E9F3E2E805EAFDD5F1CC0907C2FA0DD2EF00F1FC2018FAFD030E0318DE09061D0F17FE0DF907060EF5FDFAFC0B0A0A39E7F1FFD5EEEFD8172C0CDEFAEB07E527E5060FE2F0F6FD3FD5FF2AE60BEFED0D0BFD0AF4F908F72DC9F7D409E8F805F52FF42423DD1CE216020BE3F00E130B16F9E90FFAF20D15D7031210FFF0F3F8FBD0E8EBD118F702DAF4D20002F01410F0E3DFEC08F53307E5F60D0511E008FD070304EAEEE6131812F8F209EDFC05111ADC01F3D60707E6EA0E1302E81B0500F1E6F20DD5EE00FCFEF00123FAEFF8ED11E8E4E90AEB01F045C319CE00F5FA04F4DFF20D06FD0E001AFA28F30C16F6F109080917E1F70218D2100A1AFFF5EA07F2FEE9DED80FDC0DDDF8BAF2F7F11DFCDCE5E1F1FBEF4312E2021A0BFFE10A0DE8FD14E8EBEF0B1B0FF4FA13F7F7F90C1CF4F803CB050AEE05060805E5410803DEDDF515D4FD02FA00F7011115E912E21AFF04E920EB09FE40C525C1F7F9F50EFFB4D40601FAFB1D04CD37171510FBEBFBF21315E7EF0411DC09041403EAEBEDF823E7E3E102E31EDE00BFF3F0E80BF5D0EC03F4F9EA3E06FAF5160102DCFA07DFEF0EF1EC000907FAEA0709FC0CEAE537030808B90108E21A0A02FCF924EC10E3DCFC1EE5030B010506000223DB14DA010D09EE16E504EB38CF2CD9E7F6FD1A07C3E4F9FBFFFC0DF5CA41081306F7EFFCD4FC04EEDB070BDF01FFFE02FEFDEFF91BE8F6D3FEF833DD11F4F4F203F8F8D9F62BFCF7E8350810F8ED0C01FCE5FAD7FDFCE9F20201F8EFEC1B040B1000F2441016F6B712F7F403F9F600F3F8E821F5F1FC10FA0EFF00011603ED0DDA04E7E6FBFEFB05E30FF816D521FFE1E9150405EFF9FBFC0A0014FDF03DF1ECF7E5FFEBD0EEE8DBEF0EFCF0FDFEF1F71008F0F4F8F7ECEEF4FE27E104F502F81106FED6091CFDF3E02D120201F016F612E7F5E01102DFFF000BFCF4EF080E01040C04310801F1BC10E9FAF7F5F906F009FD0113F706FEF90DF6EF0204FCEF00F606EA0C02F3F307FE0AFA00C515F7E3F40AF9F507DB09F205F609FCE81EECF0FBE804F7DFD8ECEB0C09E8F4F7F6F4EE080DE902F6F5E5FDF5ED18DAEAEBFA05010813E6F8F8F5F6FA3E1204F709FEFB2BFFF4FB18FBEAF6F809090AEDF210FAFA0A090CEBFDF5CDF0FBF7DEFF07FA02010CF50DED011D01F204F2EEEAFDFB01070AF919FCEAE8FAFF09F311D2FEE1E701FB05EE0ED8FFF60AF9E510F30CE10214F2FB0DE7DA09EA1806D8D8E2F8FFF9090AFFFEFDF2F5FFF9EB05E6F8DDE60DFC0212E6F9E7F2FEFD420403F209F0033205F9F001E0FEF6F50C0107DDF706FEF7FBF409EFFBFBD401FBF2F0F8FCED05EF0801FCE8EF2A04D702F7EFE1FE02080502F50EF7FFF6FD0304E715EEEAF00114F107F5F9F9E40209FCDA0DFD0CD7011AF40418F2F801E51103D6BCF0F8FCF4100A17F107FBFAF70205F5F4EFE7F510FDFF02E907F6F910E92B00F7F307F5050DF60CE9FAD0F9FDF70900F8E1F1FBF4EC01E101FCF6F6DA28F2F909EAF7F500F9010803F0EF21F8D4F7FDF8E9010DFB0BEEED10F8FFFB0C19FDEB17FBFD0E0F15EAF6FBF4FFE30303FDE9FDF412E1F512F1F711EF00EFD20803F9BF16F9EFEE11FE06F9FB06FEF00B0EF2F3EBF304FBF5F0F504F9160510E51D0BF50105EC03EC1308F9F9D6EFF9F6F909F8F3F10EF2EDFBF7E9FDFCE0E31DF80F11ECFEF003FDFEFE06E7F311FDDFFEFDEBEFFB02E90EF6EE0B0BFDEF072108E507EAFFF51408DBF0F202F3FAF20400EF06FA1601F908DDF002EFECFBD904F80FD309FFF3DD0DF1FEF7F20B0B0104FDF0E7EAEF06E8F6F9F108DF081007F2270FFDFA00F006FE1E0708F2E0F0F6F9F502FDF7FB0CF903ED11F3FF06EEE103060AF3F608F30CFEF7F802E1FC1AFAE903FDD8F003FFF40008EDF111FBF102140EDB09E7FACF0501E1FFE8FCF5F8F01303D61BF51B071408D1FAF1F2EEF7DF01FC0CD7F104FCDE0CF612EBED000703FA01F4E6FAE108F5F804E5E0E3F90A06E81F05F9EEFC1606FCEC0AF9E2EFF4F30507F104F0F9EFF400ECFF11FF0B11FD1AFDE8F9FCF8F3FAFDEDFFEEF30023F5E7F1E9DCEA0DF9F7F7FAE8F4FC08FDFB170BC711DBF4DA01FCECF8E8E504E4FA0909D20CFD18040B06F003F4F803E5DEFC1A0AD6FA06FDEE06F30FF0EA00FEE5030BF8EE06DA11F8FAFCE1DEF414081FF721FD02F30009FB03D800D5EC05FDEEF201ED08F7F1DAE9E8E9F716010721321EE9DB04FFEEF5E900F30CDA0A041202DEE2E7F8F5FEFDE505EBE504050908FB1707D213E2F8E900F0F3EAF2EBEEE7F3F1FCDD06F70DF80F05FDECDCFE1AF9D4073313E1FF0BEDF307F9F3FAE3FE00E6FC08F4F411DC07E10C03E0F3FD28044F1A230BFC05ED02FA0FF9FCCB120202F1CCF3E4F2F9F5E9F5DCEC050CF10513480CE8D4F5EF0214F4F8FC0CD80A08FDFDD1F3EF1106E609DE0CECDC0D05F211ED1202DB1CEADCD2F8EFDFE2FCF2EEE9E6E6EBE20CD110FA1CFDF7EBBCF50E21E50E2814E3EC0ADDE20EFDF7FC1BF4FC0BF103E3EB0BE4FBCF070EEFF40D27FE5A101B04FB0EE713F1F8FEFCDE12FA02F5C7FBE0EDF60709F6F4EC0216E5FFFF4B07FCD7FBF2090FF4E40007D8F700F1F4CFFCFA1303E0FDE403EFE804F8E10ADE0409D417F8D9D7F5FBCBE602FDF6EBE9E800F919DC0FFD1F03E701C3ECFB1A02FE1021E4ECFCE9DE09FDF8FF2AF0020FF9FCE0EA08DD00DB0206F8FB10150128FD18F9FBF5012BF0EB06F7E11400ECE2F70AF0FBE71909E602E5F7F9E7FB0133FF08ED0015F6ECD8E60EEDDAEDECE7F8E608F9FBF8EEE3E0FFF5FEF1EDDDE1DB0215D80AF0F1F5F8F4D6F6EB20EEFCE7F6070E2E091CF3FA04E1F8F8FCF3FA0706050FE7EAF8F7EDFFEFE8FA02FF0FED05F4D7FB03E5F3EF0707FC10F9010C080A2602EFF1002CFCDE0B01DA1411EAD70A0DFEF5E90CF5DC01E302EEF2FBFE28EF01FBF418FCEACEEE1AEBDDF0EDE7F7F00CF6E7EE08EAE8FDF202E6F3DFD4DE090EF10ADDFCFDECE5E4FADD33EA05F105FF16240B21F4F606D8E7F30AF3F8F60D0CFAF5E8F4F0EB01F2E8F2EB0010E5F9F1DEFF08F8D5F0090F040FE3DE18F40131FFE8E1EA0FF9DA04F0DBF50A01FCE9F90BE2F6E9EFD901D90702F8E9F72501E80AF4FA16F8DAEB15F8F200FCF9ECDF0FFFC8DF16FFF7FBEFF0EF17EDDBEB06FCFC02C91AEDE8E4ECF6D537ECFDF7F7001A120012FA0618E4ECED04EFF1F80918E8F2ECE4ECDA0004F8F1D1ED0BF4EEFDEDFE1FF7CFF0FCFE05F4D9DF18E9ED29FD01D6EF0BF8E60DE8EFF20B0212ECF00CE0FBE3F0DDECE00B0CF1E2FE1105E61102F005FEEFF010F4F10A1106ECDC08FDD0E00E060000FCE90B1DF7DCED06F2F70ECC1DE6E1F0FBFADE2AEBFEEFF1040D08FEFDF00020EBF90306E2F6FA0923E7E1E9E7EAE20E04F9FBDEE605E7F4FDEFEF21F0EBF6F7E903E1D6EB0EE1E31CFEFCE5F213E8EE0CE9FFFB0DF2FA04E600E700F504E8DBE5FF0FD5DDF6F8F3D90109DFECF7F9FC0CEDEDF21816F9DF04EBF0F10807F8FEFDFC182403E2EF01F3E81CECEFE0E9FDF812F21204F5E5E900F9F501EAE6FC16EA0D1606EDF6FA0624EACDE8E8F7FB0307FF02EEF6FEE2FAF1F2DD0BF9F301F4E50AF5DDF208EAE515F4F5F8F610E2EAF5EF0804F3EAE709ECFBF403FB07E7E2FBFC0ACCE2DEEFF4DCF6F4DAEFF001FC06EEE8E9FF1C08E101F4F5FC0614F0F6FD05010AFBEAF7F2F7E8150EFBE3E8FDF31CFCF80FE0DCF501F5EB05F5E6E91CEA12FFFEF2EFDCFA10FCC9F0EBF40AE90704F9E0F8F9E0F0FCECF309EAE31CF5F1FF1ADAF901FBE708F2F9EDFA1BF0E7E2E4E8FF11F2EE14F5F3E0FCF2FDEDFF020019EB06E6EA17DFEFECE7FC10EEEAFDDDD81CF3F41016FD32FFE80219F212FD06DCF3FFF3F9F0FBBB06030101F0F7E914DAF0F1D7E1E3FADEEB0EFF01E811F800EEEFE9F4D7E4F4FCDAF4EFF1E9CC050304D7FD04FAEBF6D6FEFFF3E224F9F4FE0CE30EFFF1E1FBEEFDE4FD27F215E4F9D1F20DF5F716FAFCDC0508F5FC1811EF1FEF0BFAF00FDFF8F9DA0402DCF30BC9ED2D1BE4091BEB5003D9FEF1F523FD07EEF305F3FBEEF2C30C0EF7F708FADF06CFE1E2D2ECE3F9D6E6FEF5F3FA06EFE5E4FAE3F0D7FCFAF0DAF4E5EC02D2FD0909D40818F6EFE3FBF5F70BE914F0EB0D06E6240ADDF00BE30CF3021AE311F40CE602E6F0F3040014F10C02EFFD140EDE08DAF2FFFAE9E1FDF8CE02F6D5F31DD507232F07FEE9EA2EE9DCEEE7F818F70311F9EFE506FBE9E41F01FFED0CFEE1F5DFF2D9CCF7FC04D2EBEBDDCD0117E8DADB06F308D91E08F9C5F1E7F522EEE11E00CFFF16DBF8D012EBF710ECF5E9EB0303F52213E90806EA16EC0AFEDFE6EFF0F312DEF2ECEA01150527E9E7F502FDE2FEEEF5FFF003E8F900DBFDFFDBEB0BE5FE11201901DCEE02DEE2EB0CFF02EE0219FDE4FC0407F7E829E0FFF4FF01E0E2EC00E8D6FFFDFADBF4F3FBD9081AEBEAF5F5F605E805171BBAFBF3071AFCE21EF5E3F2FFDEF6DF02E1FA10E5E5D7F9FB1BF80608EE0CFCEB0AED07F5EBF9F3E0F50CCFE9E5E2F808DB5BEAEEF4FB12F006091FF8EE18E109FA1CFFF4F7E2F7E6F509290405E7EFEDDCF0FB25FCEDF101F900E71803100CDA1DE0F8F80BF4D6E5EBFEE7D915F802D701E513ECFC0CCEE913E0E4F1FCE81A0CBD05F513FEFFD80BE9F2E700FF02F4F0DAF819D2EDE2020213F6F403E41D02F20BFD0402F10BECF3E821DDF2DFEEF9FAE478F0E806FB26F50D062E07E5FADE14F941EFED0DE1FAE2F9F6200111EAF6E9DFF5F718F5E5FDFDE4ECEC19FC0306DA07EEFCFA02ECE0EEE8F4E1D41D0003E106DE14EDE40CC4EB18E9DAED04DE14FDC201F809E8FDD7F4E30CEB0A0605FFE3DD021AC8060B1600F0F9EF03E22414FC070B0A08EBF1D10DE229F2FBE70109ED0A58EDDD06FE0FF2F6FE0413D5F1E6130115E70B15DFF9D00ED6070A0EF7FAF4D9EEE60AFCDBF9EDECD8EE04FAF5FEE503FA0A01F6F305E9ECEDF0DB1300F8E700EDFCF2D60FDCF7FDF1EBF0EAE92308C7F9FFF4E0FAF8EEE30AF303F0F704E6DF0107D203141FEBFCF1F50BEB1E29FF010B09F6EBDBE6FEF616F203F90406F50A2EE8E9FDF1F4EFD5E6DC02E1F7EE1C0AE3011C1FECF2CB14D3FC0DFDEDFF01CCDEE71DFCD1F6E403DDEEF2FFECECF114FEF7FCFD0210FCFAF700DC10FAF5DDF0FDF2FCE715F003E8E4EEE6DBEE3910C6F0F4F5DD000B0105E9F2FBF5E906E9F1010AE9ECFE13EDFDF41007F60C1EF5FE0519FCE7E4E6E90902050EF5F7FDFD0214EAF7FCEDF2F7CFDEDBEEFDFCE51709E3030119F3F1D501E80101F8CFFAF9D1EAF817EED4F9E101FAFAEA08E7F3F214FCF1E70202FF15FDF7FCD507EAFAE1E2F7FF00F50CE302E9DDEFF3D8DF2E0BCEECE5F3E8EF020913E7F6FCF3F7080EF4030E04DFEF02F9EE0D2205FE020EEC02FE260BE7F6D5DFFE041C12F1EFFAF80001E9EFFCE60102D0DFDCE5FD08DD04F8EBFAF10002F3EBEEFF00F404D3EEEAE1FDF905E4EEFDE5FF02F7E713E9F8F31000FEE1F8F7F70FFAE3E7D4FADAFDF5DFFD00FEF105DEF8F7F3F5F7E0E61512CEEDE8E9EADE020512F3EF02EBFF1721F30102F9E2F3F5F6E603180AFDF807EFF4FB1E10F4F7D5E2F7FE1C12FAF4FFF7F6F9EFE900E5FD01D5DFE3DBF9FCED00F9F0F2EFF5FAECF2EE00FBEA0ED7F4E8E9F4F0FFDFF3FDDAFD17F5E704EFF4EA0A04F5E2F7F1F709FBE2EFD8FEDCFB06E102FEEDFF08DEF8FB09FEFCEAEF0B10D5E7E7E6E7E401FD06FEF4FDF2022116EC01E8DDE0F6E8E0D3F3070DF4F902F1E7F9020F08EBCDE2F5F610070916FFFDE4FCEAE3F9F2DFF8DEE301C6FBF50DFC12FFF3EEECEFEFF2E91000F811E805F4ECE6ED04EBEBEDDBF439F3E6EBF5E7E2FD01F7E908EDEBFBFEEEFBE911E5ED13E904FEE21314F2FB060BEFFFFDE30422E3F3F1F3FBF109F1F90DF2FB0706130BDA0BE0D6DFF6DCE8DAF90208ECF90804ED01FB13FDDED1D700F5FBFB0A1A07FBEBFCE8EDFEFAD5F3E7D909B8F9FC18F60F06F9E4EAF1F2F2E80A02FC11EE05F6E4E9ED00ECE1E3E8F634EFDDDBF8E2E6FCFEFBEA0CE9E900FAE9FDE111E8EB16F2130BDF0413F7030CFFDBF5FFE2061DE2EBF9FC14F205EFF50AF50203040602E110EBD9EDF8DEF9E1FDFE0FF3EE0104F8020613EEDEE6E209FDF3FF03F60AFAF5F9F10009FFE0FEE6E6FBC4F1FF0FFCF0FBEDE0F2EAEFEBFEFAF5F411DDF2F3E7F3E206E4DCEAE6FF1DEFE3E7F3F3E70408FAF202EAF906F5EA05DCFEECEF0FFA1404E6FB07E804F60EEBEBF9FF0D08DCD4F4F7FAEDFCF4EC070A00FFF908F5EFF3EADDECE6F4F3E9EEFA14FDF4FFFD10F9010DE4EFF4F502F2F302ECF017FFFAF1F30004F7F003E0F00AD9F0F906F8E3F7F2F0EAF2EDF51AF9FAF303DCF1F5E704E50FD5DCEEEB040EF6E8ECEEFFEA0F0AF1F2F5EEF504EAFD12DDEAF9E5FDF608FEF8FDFFF0F9E40BF9F001090E01E1DFF5EEF7FBF7E9EDFD0AFB0BF8FAE0F3E7DBE2E2A407E0D7F4E00FFF07FBE81EF5EBFADE37F8F9E2D70210EBED450416E2DF0EF105FD10F4F31CE9F604F5E9E00B0FFDE3FB01F251FD04F5F5DDF3F7EB2DF11ECAECE802FC18EBEA05ED0BF11104D4E5EBFDE2FDD00E11F1E7FFDF06F80EFA05F3040403E20309ED0C140B16DEF9E2D3070802B0EDFEFE0E130009C4E1F7DBE1D7AC08DEE6F7F710F40AFBE91204E5FEE530F3FEE8E00805EEEB30F90AE7E204F401F10810F911F0F503E9F6EB06FEFFEEECF6F93D04FCF5EBD1EEFAEC30E813CEF8E905E90FE9ED08F007F80DFAE0F1EFFDDFEFDA020DECF2FFE403EE0AFB03EF0B0A01E8EE09F9FE060312E5F3ECD3FA04F2B9F605FA130BF910CFEAF9EBFDDBE421E9F7FD2203E8070509E9FAF705E911EAFDF50110F7EBE4E5E1F3FBFAFAFAE8CFF618F1E5F0E6F1EB10E518FDEFFCDEED0AFC0BF2EFE8DFE9F9F607E10DE3F9EB02E4FFFCEBEFEDFCFD0BF4F4FFEFE7E4E4F80115DF07F207E4E10AF7FDE41209FAFDEB08E9E8E002EEE2DA0BE9FAF1EBF6F5F4EEF6F8E60EFAF7F5FFFEE3F332EDF0F91EFDF505FD19D8F6020BE408EFE5F7F810F6DEF9DFE4EEFBFAFEF2DFD4F0FDE6DEEBE6F4EC11DD1C04E8F0F0F3010809F2EBE5F5E8F8E904E80EF2EAE7F8F9EF06E0E2EC06F616F7ECF4ECEBE1F1FE141AE60CED0EDCE5FFE9FAE41607F8FEF2E8CFE6E511EDE1D900EB06F6FDFAE2ECE0E9FCE60303ECF5FAF3DD0519E4ECFF1FFCFFFCFD13D1F2F00EF609F3F3E9EB21FCD316E0EEE9FAF1EDFAE2DDE102EDE902EFF1E219E318F1EAE90AFBF3111EF5E1DFF5DF01ED03F500F3EDECE9EBF40FE4F5E50405F9F7F0FA04EBF4FCFA0D09FE0D01F4E8DDFAEB08E915FBD8FBEBCECDE2EA07FEFEECEFD6F20107ECE6E3EFEEFCE60107EFF0F7E7DC0300D4E8F70C05FAF50505D1E3DE10FF07F20FEFE52008D505E005E9FC02EAFBE5E9D407F1F416F6EBE622F315ECF3F8F7EAFD0216F6E8E1D8F002F8F2F40AF2ECEAE2E30C13ED0AEDFBFFFFFEE6EA03E104FDEBFD04EF101DF4F2DAFA0407EC1DFDC8EEEAF3E1D0D600FB02FEE1E0FBF2FBE8E9DCFCE5F8E40EF6FBEA01E6DDFAF5E5E1F4FF0CF7F600EFD6E6E00CF3FCE405F4DA090CDEE1E40AEE0806F303F2F8D018EDFA12F1E8DF19F5FCE8ED02F4E9F9F7070F02EFD6FF01F6E4F008E9EEE9E8E11D04F00CF5ECEB06FCEADEFAE0FAEEF1F90EDDFD11E7E7E60D030B022C01F4EFDFFCEAD4C9EF01F404E0EF06F3E7F3F3E9F1E1F2EC15F2FDF61FECD8E9EDE9E4F7040CF50208F6D5DFD904EBECEAFEFADD020CE2E5E102E20F1100FBE80BE50AECF4F2EBF1D816EFEBF0F007F9FBF7F20B1603EBEC06FA09E6F206F4F6F1EFE91503DD02EEE2E70B06EEE1F2E3FBE7F1E80CDDEB09E8E6EE14EE18FF2EFD06F2F4ECE7DDDAEA01E6FEEEE8F705E6F9FCECE2DDF5EE0CDDF2F13EEDDDE5E1ECF101F50EF1FF2102D2F1DE07F2E9DCFCFDF8F404D708E9FCCFFC12F1F7ED13E505F0DBE0E3F7D41AE4EBE3FD0008F6FCF406F6F9CF0314F018E5F40BF805F6F7E20BF0D401EFDBDF0409E7F8F2E9FBDFF4D60ADBD10EF9EFEE1AE71C042DFE01FAFCEBEEF3E7E4F4E1F5FDE4FE01E5F7FEF0E4F3EFEEF6D6E9F828F4D5E8E5F0F40DFE11FCFB28FDDAECDFFB02F4F0FA0101F4FDE1FFED00D5F915EB06FCFFEA03F1EEEBE1F0D623E8FDE9EE05F4E6F60605F9E1D0FF0AF30DE3E8FBEA08F6E5E512E4DF0DEEDADBF6F9D4F9FCF1FEEAEFCCEBE2EA13F2EEF20AEE260C23FA0002F2FAFFFEFBE3EEEFE9FDE5F405E4E3FFF2E204F4EE03EBF8F30BF8E7ECF1EFE811140906FE18ECE6DED90402EEF6FDF8F9FDFBE8D9F807DD00FCE900FAE9E4F8F107F4E3F6DE27EA01E9DE0BDEEBF30FFEF9DAE80AFC0100EFD9EBDCFDEFCEE919F0EE08F3F1DDEAF9D1FDFEFC05F5F7DBDCE91B1DF0F5F5FDF325FF1FF102F7EA0700FBFDDAF705F609DEE50CD9DBF5F0D6FDF1F207F001E2FF0A06E9EFF3EA04FE020AF511E9F3EFD311F8E6EEECFBF0F6FBE2FA0000D5FDE3EBF6E9D8D8F1E400F3DEF1F724E1F8DEDC08F7E7F610EAE0E6FEFFED1104ECE1F0D4EAEFD2F204FDE7FDF2F5E3F0FADD08010A030107EDF0E51E2114F1F101ED16EF22F4FEEEE2E5EAFEFAE7FE1200FED8ECFFD7E7F0EDDEFDFFE8FAE5FAF406150CE7FCECECF7E40701F30CF2FCFED60DF1F4DBDD01DEFEF6EA01F8FCDCFBDDF4F4EBCCD9FEDBFAEDE3F8FC17D3FADFDFFBEFEAEB0EE7DEF2FBF4E50EFFF1EFF7D9E801DEF6F306EE00F7EDF2F6EFDF08030AFE090BF0F4EA1C1B14E3EA04EC13F927F1FBEADFDEECF4FEFD0216ECFCDFEDFBDAF0F4E1E1F6FCE0F9EAFFFF0F0A0AE80AF5EAFDF4F8FCF8F502EDFFF107F802DAE6F1E70CEDE802FBF1E600CCF6F4E4E3E8FEEDE9F0ED09F712CDF8EAE1F5E5F5E110F5F7EEF6EBEC06F5F4F6FFEEF107EAF9E307E0F8F1FF0DEFFAF0F5EE04EEF813E9F00610F4E8DFEB0DDC210225E3FDF5F0D2E0F101FE0E01E20AD9DFFBFCF1F4DFD9F0F4DFFC00F4F302FEFAF3FEF4DDF901F6E8F1F8FFF2E6F508FEF1DDD7F4F007F0E615F8FEF309F2F6F1E8F1EF02EAEFF10305F20EEA0CFCDFFFE5F5DB0CFD0CE7F5E10401FBECE901EBECEBE3FBE8F8E0F0F0020AF5FDECDAE4FADEE501F4F90B05FAD8DDF212EC181A26E3F900F9E2D9E7DE0107F9F2FDE2FCF202F2F8F4DFEDEAD5F8EDEFEBFEEFF8FBF3F1E0F401FDE8F0F2F0FADFFCF8F5FBEFD502F805F9F0EFF70F000904FEF5F8EAEB0CE2F30100E7F0130009FEED04DCD6D2FC0209EAF3CB19F6FDE3E209D5E6E6CEF806F4FCFAFAF4E404F4DECDE4F9E1F7F0FDFA0616FBE0E0F707FF09281DE10BFFF600EEE5DE03F2F1E3F3F1FDEDF9F7ECFCEFFCF2DBFDEBEAD0F2EB07F5E4EDF1E8FAFCF7EAFAE0FAEEFAFFEB09EFECFAF6F6F2F0FBF404ED05F50200E0F6ED01EAFA06F3E4FC12FBFCF4EEF6EFDFDEF4F5FFF8FECC02FDF7E7EC0BC6D5EFCCF5FC01FEFBE5F1E407FDECE3EB03E208FEEC00FA0CE8DBDDFF0DF9030E20EC1EF106E1E8E4F608EAE8E003EAE1FDF305E2EAF20005E0F9F3FDCAF1EA00E7EB00F6E906FAF6EEFCDEFBFB0303E913EEEFFFFEF5E8EC04FAFCEC02EF02FDDEF8F3F7EFF30FF6E90310E504E4E0FFEDE8E3FAECEDFCF8D0F8FEF8EDEEFAC4D9F8DCF7EB00E8F7DF02DF0409F7F1E607E2100CD4F4F807EDE0E2FF0EE9FF072AE620EF07E8E2DFFF04E7DFEC0FEBDDF903FDDFD4E80000DCF5F8FED1F8D4F4E50307EFF0F9FDEFECF4F1F5010E11E30DF4F809FCEAEDDDFE00FDECF00706EFDB00F1E8E9EB0FF2F50B1DE31DE6CD03EDE7E6EEE5DDF4EDE0F7ECF5FCF5F6BAE2FCE6EDDF04D901E806D3F807E5EBEE0BEA1504E5F3EE14FDFDE7F7FBE7EBF630EF1EE70905DBD3FF07E1E3EA0FF3EAF4F9FAE8D0E300E9D3EEF2FFE2F5D5FEEC1200DEF4EDFEF7EEE500F0F81305E302F008F4F1EFFAD6E1F4F8F1EEFDFCEAD6F0DFEFE7FB04E3000020EE16F4D4E4DDEEEBE9F7FBECF7FDE8E7EAFDFEEFBBE8F6E7F2E313F7FBF602E0ECF7D5E406FFEF0303F6F7F52AF6F7E4F0FCEAF9EC2AFE23F0FF0DE8E10100ECF6ED1EE8EDFCE6F5EAEED305DBD4F9ECF7F0EFF8F5E414E9E0E7EE0AF4FBF0FFFC05F6FEF2FCE4FEE8E708E3CFFFEAEFE0F1F1E6ECDED9CDFCDCFEFAECFEEF11F8F6E8E9D7DEF2FAF403FBF106F3D2FC05EF0CF3D2F000F9ECE22109F6F50005EBF9D7EE0EFCF8F515E4F8F51BF2F8F2E3F7F603F72904F1FCE3F8E7EDF5FAF404FE04EFFAF1E7ECE1E9D7EEF7CAFCEFEBFBF1EEFFD809DBE2ECDC0BFAFDF501FA04DE08F5EDDDF2F0E710D7CE0FF0EFE2F1F6E5E5EAC9CA03E100FAFE05DF0DF9EEDEE4D4DDF5FEF210E7EF02DCD6091AE416EEE5F304FEE8E42C17F5F80710D7FAE9FB050304E818EDF7EE170207FCE5E4F609FB32F3E6F7E1F0E0F5F3F3F30B04F1F5F3E3F1DEDAF3F1E5FDC7F2EBE2FBF6F209E700FCE1F4E4F9F0E1E9F8E7FBF00FF0E1CEFEF4E001E7DD00FBEBF3F5F7F8DCE9E7E1FAE0FDFE0107F701EFF1E8DDE5ECF6EEF60BFDF5F5DEE1F617EF12F2D7F0F2F7E9DC0DF3E8FCFFFADCF9F9F9F305EDF00CF7FFF60AFDF0E6F3F7ED06FC36DDF2FDE9ECF1E3EDF9FF00FA01ECF3FBFBEBF5EEF2E6F2C5EAF6E3F701F0F7E2FB07EFF6E7FAEFE5ED06EDF7F403EFF5DCE9FEE4ECEEDBF0F1EEFDF3FA0CEFFEF1ECEFE0F3FAFEF5ED06DEF702E3F8DEEDE6EE0DFBEAF2D3EEEF0FF902F3D6ECF2E8E6F7FDEFF0FEFBE8EAFE03EEEAFCEC0309FDFDE50CE9E4E2F9E802F8032BDA0EFAF2FFF1E5F2F3F6EAE7F3F2F5F3FFFAEDEFF3F9DED3F5FDECE4FEF3D2D9EB07F4EBF405F3E5F414FEFAF0FCEEFFF4EAF6E4DEEED500EBEBF3E90006F9F3FDF4DCE1F8F2F6F3FB02EFF418E1FFEDEDECE01805DEFFE1D8E904F8FDEED1F8F6DCF3F2FEF7EBF2EDE7F7FE02EAEAF9EA060BEFF3DB06DBE4E0FCE90CFBFD23F00FF700E1E9FFF4F0F3E1E4FEF9F9FDF503F0E4E9FFEBCAF8F3F0E4F9E7D3D9F80BE3EA0205F0E1E912FEFDF3F5F8FAF7FAEBE9E8E4D6F0E6F1ECE8FFF5F9ECF2F0E9E6FA0BE7ED0107F6E90AD8F5E0E6F4E2230ADEFDE6DEDDFFF101E7D009EFE0F8F9FC00E5F6F4E9F002FCF0EAFAEFF70BF4F5E714DEEDE7F1DF07F6FA22F00603F4F0E704E7E4F7E3EE0AF7F7F3F1F2F6F2E004F0CEFBF3E5E8F7EADEDC080FEDEAFD08ECE9EC12FD01F5FFFAEDECFBF1F4E6E0D000ECEEE0E701F1FAF1E8EDF3E1F016E3E80402EEE8F8E6E8E3E9EEE91C02EFFCE8E5D8FCF403ECD106E7ECF1EAF6FBF0FFF5E8F4FEE2FCF604F4F40BEFFDE50DDAECEDEBE205F9F01CECF601EEF9F5FFEBE7F5E7EDFEFBF9EEF7F0F4EAD8FEEFC8F9F7DAE8FEF1F7E90207E6EEF7FFF5F6E613F7F8FFF8F4F3E0EBF7FBEFE4DEE5EEEFEDECEEF5EE01F2EAEFE4F708E8E8F203DEEEEEEEEAF2ECE3F40C0CEEF8D8EBDD02FCFAEBCEF2EFECEFF3FB07ED01FCE6F606E1F5E3FDF20808FBF7F303D7D5E6F7E7F4ED041EE402F8E9F2FDF4F1EEF2E8ECFDF0F2F7F7F3F6FDE4EDF0D8F4F8D9E1F8F406F7F303E0EEF4F9F5F6DB03ECFB0604F0F8DCFCDFF7FEE9D7DFE5EBF7EEDEF4F9F202E4F1EDF704E6E9E20CDFE5DDF3E4EAE6F3F30612F0F8D2ECE609F60DEAD7F7FAF4E2F80502F5F5F7F6EA15E6E9E9F0FA040804F6F3FDDCDFE8F5E2EBE9E524E3FFF8F50DF8E8EDDDF1E0FD00DDEFEDF4EAF10DF6EEF2E2FFF2D3F2FAF9EAF0F9FBF1EBF107F7F0E406F808F401F800DDFEE8DFF1F5D9E8DFE5FDEFE2F906F704EFF5EEFEF9E2E5F009E8E3ECF2EBE2DBFDE61111E8F5DAD5EE07F006ECD2F601E9E0F603F901E9E5F5E7FEF2E3F7EDF90205F9F2E2F6DFD7E7F0E1FEF8E821F603F4F4F7F7EFECDCF5E9F101E7F0F7E3F4FAFDE7F4FCD908F1E501F804D5EBF8F2F9EAF109FEF2FC05F9FDECF8F503F0EEF5DDE8F3DBF5E0E2F3F4F1000BF106FFEDEAFCE2E1EFF00BF5F7FFFFFADAD3F6E80D10EEF1E3CBEAFDF2F6F1D1FAFBD4ECFDF8ED03E1DEE6F4FCF9EAF7EAED07F9F2E9E807DDDCECF4E5070BE61004FBF2F4FBFAF6FAF0EDE7D903F0F003E3F7F7E9DB02FBE106F8F1EAF603D8E90CE8F2E6F40404EBFB05F5F7EEFCF504ECDAFDE4EAF5D9FDEBE2F6F5F7F905EDF905F3E1FDE8DEEBF30EEB0CF9F4F9DBDDE9E6FB07ECE7E9D1E6F8F4EBF1CEFFF8DCEDFEF1F3FDDFE3D9F5EEF7F7F2EFE203F1FDF2F119E2E6EBF0EB08FDF90703FBF3FB15FDF8F5FBF1EED202EEF1F9E4FD07EADC0FECE7F4FDF4E5F9F9E3F123EBECDDE906FDF5FF05E9F4F8FDF400E0CDFFDAF0F6C504E8F4F4EB09F903F4E9FFF3E60AE1EDF6EE14E91AF7FBF1E6D8E3F4E90EE6F5F2DDD8F4F3EEEBD308EFE0E8FFF5F500F0E7EBE8F2EDEFFEE9EAFCED0EEFF41EE4E0DBEBEDFBF0F8FB09F3E2F90E15EAFAFDF301D8F1FDF2FBE2F60BF7D50EECECE2FDEFDCF2EAE2F010EFF3DCEC03ED0305FEECDDF0FFF6FBE0B503D7F7EECD03F706E4EF1CF8FDFEECFAEDF010E30708D50CEE1CF3FCF5F3CFED02E10FD402F4F1D4F6EEF2E8DD14E7E4DFFCF8ECFB00E5FDDCFCE8F1F8E2FFFBEE0DDDF72200DFD8FBEBF3ECF6FC00E4D4040A11DFF5EEEC0EF1E409F305E1E310F6CBF6F3EFE2F1E8E2EBE6F9E604EBFCDFEE01F8F9F7FEF0E9E80CF4F7E7B700D8F1EFDC24FCF4E1F800FCFAEEEBEFFEE609EE06FDD906E50BF4FBF0FFD8F600E308D4FFF6EEDAEEF5E8ECDD09E1EEE3EEF7EFF200ECFCE5FEF6F7EBE6FAF80206F2E916F0EDD7FCF2F0EAFD07FEF0E006E0FDF1F3E7EE01EBE303EF10E8EAFDF2D9EBF2E4E0F0E8F2E9F903E513E606F8E70711F4FCF7E7F2F706F9FAEFDBF9D4ECFDD634E5E7DCECECF6FFEEDFF0F3E30CF1F0F5EE0EE604E8FDEC04D7F0FEEC06E7E7FDD2E4F5EDF5E7D100E3EADFF5F1EEFDF7EDEBF402FE0CFFF0F0F9080DECE005E1EFD7E9E7F3EAF00DF9F2F4F5C90DFF04E5F1FADFE1F2E104F0EBF0F6E906E8EDE5FCF4EBF200EDF613ECF9E4E10B0CF204F6D9F3EBFDFDF1ECD707E0DDF6E607E1E0EDF71AFB01F7E80DFAD40000DFF0F406E302F6FFF9F6C8DFFEE40EE9F8DBD9DDFAF4F7E9C501ECEDE9FDEAF80BE9F3E0F8F7E5FAF5F6E6F9EAF3EDF407E9E3DFE3EBEFEAE7FAFFFAE4FBF41FEA110EF3FAD4E5F6EA01F1F0EDF8D512F1E6F202EDEDE101E6F80EEBEFCEDC0108E603F0DBE9E6F102F3DDE904E9E3F0E30DE6E4F50231FAF703CF1309D70118E4DDF803DD0CF5FAF7F0CDD2F7E009ED05D5E5E5FAF3F8E3BD06E6FBEDF8E00A03E6F4E6F0F7E2FFFCF9E5F0DEEFECFB13F7E1DFE904ECEEEEF7F6F9EFFCF126E60D1DFFFADDF1F7E80CF6E7F1FCCD23ECE4EF08F0EDDDF5FDF002EFFEC5DBFF09E6F1F6E2FDE9F7FEF6DBEBF6E0E3F3E300F2DBF20E090AFFFCD7F410DEFC1EF3DFE903E5F4F500E7DFD7D0E5F90BE7FFE1F1E4F3E9F3E3CFF1E6F6E9EDE40FFEEDEDEFF1EFEBF6F7EDE7EAEAF5F40A11DDD9E2EE00FD07EBFDEB0DF406DB19EA0F0704F9D9EFF8E40400E7E409D818F4EA020AF7E9E2F013F9F4FC02D609FC0BEEE6EFD7F9FDFDEFE4E4D405F0F3EBD8E012DDEF16DC00FEEDFFE9EBE0F10EF3F6D9FADCDDE107ECDBD6D1FFEDFFDDF6E206E4ECF0F1E6E5F4F007D6E3D7D8FCF8F9F0FBECEAE5EFF3EEF2FBECEE1309DBDFEEFBF1FA05E603ECF9F1020805F003E60302E1F2F9F8FB05E3EAF2D8F8ECE60503E3F7E7F908F1F2EFFFDF17FA1700F4F3CEEDF6FDF9DCE8EDF9F4F8E6CDE108DFF019EEF303E10AF1D9D6F906E5FBE1F9DDE3E800E5CFE9D9FFEC09DDF5ECFCE5F3ECE5E6F0F4DD14DEECDDD0FDEF03F2F6F9E3EAF0E8E5EEF7D6F41202EFDFF7F5E9EE09CCFDE9EBE3061B02F2F2D80601F701F3FA0809E5F9EAC703EFEE04F1D8F2F2F5FBF402E4FBD0090018FFF4FADBF7EDF6EFEAF0E2F7F0EAF1DEF1F2D5EE14EBFE08E709F5E6D2F3F1E0F9DCFADADBFC02EAD3EBDFF4F711E2F3E1E1E3E9FCDFF7E6F3EB12E4E5E5E806EDF3F9F9F3DBD9F2ECDFF2F1D2FB0900D3E7FBEAE7F901D3FE02FAE5FB04FAF8F6E000F5ECFEF3F20FFEE7FCEEC1F6EBE800F5E5FBF4EEF6FB07E7F5D302FA0AF9F10BDAF5DF00F4ECE8D407F2E8EAE0ECFACFED0CE6FFF8EF10F5EED4F3F0E6FADAF8E1E0F401EEE0EAE2ECEE08E0E9D3E8E1EA07DAF2D9F6EF0EE4DBEEF000F6FDF0E9F1E7D8E1FBE4EFE9E7FC0A00CCE200F3E2EDECE403FA04E3F907F7F7E8DFFDF5E9FCF3ED0DFFE8FDF6D4F4E6D901F5E1F7E9D501FFF3E0EBCF03FBFAEBE5FFE40BF105EDF6F4EAF6E7E3FED808EDE7F804D5F0F3E30DFDEEE8EC0AF1F6EAFAEBDFDAFEE5EEE7DFEAEBF3E5EFDCDDE2E207E2F4DAE1FA20DFD4E4E808F301EAF0F5F4CAE800E3EEEEE3F0FA03C5E4F7F7F7F3EAE214FF01F10AF3F8FAF5EDF8EAE304EAEA0301F2E8F0E3F0D5D7ECF8F2F4F0E11100F2E9E9D50AF8FEF4E9F7E608010ADDEDF8DEFAE0E90FDC10F0EEF1F9D1ECF4DCFF05F3E1F9F5F3F8EDEEE9E7D103EDEEEADAF9E5F3E6F5E4D3D6DF05EBF0DCE6FB25D4D7E3D9FEF102E1FFFDEECDDC00E6FCF7DEE3E3FCC9F0F5EFFEECEAE212F6F4F0FFEF0500FFEEF6EDE8FDF7EF10FFE9EAE6E1D6CBE3E0FFF4FAFDEC0B0BF8F0EFE1FEFBF3F8FAF4E4F9ED00DBF0EDE101DEE414E2FAE1FED4EBCBD8F9EBF107F4E103F1E1FB00EEF4E4DD0DF0E7EEDA00EBEFEBE7E3C4D7E2F6EFEFDFEAFB12D9E7EDE7F7F503CC0501EAD6DC0EDDF9FBECE3EFF1D006FCE7E4E8E7DE0DF9EFE5E5F30E0B0BEAF1F4EDFBF6DE0AFCCFF6E9D8DFD9E6F2FDFAE6F9DBFB06EDEC00DBFEF8E9F5F3E5E6FBE006DFF9E7DE01D9E601E7F6E30DE3E9D6D601E7F0FDF8E2030AEB0003EAF9E4E005E3F7EEE3F4E7F0E6E3E5C5E4DDEFF4F2DADCF20ADBF1EFF4FDFB08D0F1FFFADFDA10D5F1FBF1F2F9EDCBFFF6EED7F1E6E508F9F0E3E8DA08FAFAEEF5ECE8F5F7E710F2E2F1EFDEF8DEE6EB00F7CBDFE5EA0BF9F7F6D2F8E8F0EEE9FAD0E3D9EFF300C2EBFDF001E4DFC3F913EBF7E0D6FCE4F8F0FDD6090FE8F4EFE4FBE6E4FDD2E7E8E1EBF2F7ECE7DBE0FAE0E0EFE5D3E0D511EDF1F208ECFE03E4DFEEF1E8E413D8EDFB040807F8CDF8F5FCD1ECF3EA01E401F9D7F2EDF6DAE6F9FDEEFAF1EA23F2E6FFFAD92AFCF117F4EDD1D4F1E804EEEAF8CC05E4F9EFEBF7D0CDEEE8EAFCCCFDF202FBE4D0E90515FCF9FDDE0ADAE703F5EBF91EE7E6E8E7F3FADAFAD9D7E2D3D9F7E9FAF0DEE605EBDFE2FEDCE7CE17F9F4E206E4EA0EEFE6EDF0F2F201D0EEFFF2FEEFF0CFF7EF08DBEF06D6FCEB02F4E8F1E7F9C2DEF5EFFD09FAEE1FF7F2F8EFCE43E7FF10E5ECC2D5F2EB01E8E206D910E1F7F5FBF3DCEFC9E6E9F4CEF3EFDE0B00C8F81524EB00FFEAF7B5D6F4FCDAFAFEFAE4DEE5FAF2DDF0C7D6E0EEE0F6EBE3EAF2D80AFAF0E202DCE9D428F8EEEF01F3F00906DFECDEF7FEFCF4EFECFBF2D719E9ECF70BCA07FCF6F8E1EEF0EAD3EDF0C1D9EC02F9F9FE0035F0F1F8EDD615FF08F6EEF2C5DAEDF504E9EA08EC04E7F5F6FAEFEEEAC3D4C509EFF2ECDF070FF616FC14E6FCE0EBF0D5BDFA12E7F6E3FADED7E40FE4F00BECDFE7DFE70CF4DFF4F5B9F5FBFBF4FBC7E8DD1FD1E8EA22EDF9F10CEBEEE2EBDEFCF3ECF7E5E5E306E3FAF4FAC90AFB0607E9F0F9DAC5E3FEF4EDE9FBEBF502EF2FECE1E1E3DEE8F6FDF502F5D4DEF1F600E5F1F6E3F0E7F3E8EC08EFD2DAEACD0DFB09F1EAFC35FE0FE50DF0FEEFE0F1DDC9FF14FEECD7F4E2E8EA03E4F704E5D6E2D9E700FFD609EFC0E9E9F4EF01C6D3DD05D9E6E823F1EDEA05F9E6EECECCF3E3E319E0EBE6E9E3F8DDEAEAFA01E30609010AEFD2F6F70DECF3F5E009F7DB13C6DEDFF7D4EBE6FFFC03FBDFE1EBF4FDEEE5EBE2F7F5FAF8ED00E8E8F2EFD1F5F0F201ECF72DEFF2F201E7F5F8EAEBC7DEEAF3FEEDEAF3F5DCE901EEEAFDDFE6EADAF4F7EBE4EEF1DAF1DFF6ECF7D8D3DC12E5DCEAF1F2EAFFE5F7FEEBD6EC01EBF010E8F4EA01E1FFE4EDE7F8F6D70908EAF6FDE004E8F8E4EAEFE8F2F6F21FDBF2DBF1D001D9F902EEE5EDE2E4F0F3E4ECF5DAECF801FCF503E9FBF3FDDFF1D7F7F2EEE62EE9FEF208E0E9FDF6E7CDE0F4F0FDF3E9F9F6E5F9FAECE4F6EBEBEDDFF4F6E2E5F1FADAF3E3F6F6F3DAE1D80CDEDCE7F4E2E5F5E3E800F0EBF2FAEDE70DE5F9EA00DF01DEE2E60909E50304ECE904CC05E2FDE7E8E8DDF9F9F323DFFCD1ECD806E606FFF4E7E7D6EDEAEFDEF0F4DCF300F1FBEE07DD0AEBFDE1EAB3F6F5FBE81ED8D1F5F6E7F5EF05E9EDF2DCE3FBF2F6F9FFD4F0EFEAE1E9E1EBF8DBF501E3E7E6FBED05F2FEEDE3E0D3DA1FECD2EAE2DADC05E3DAFE01F608F1F2E80BF0FFF0F6EBE3DEF0E20A1BE307F2EDED05D7FAE0EFDCEEEBECFAF6F21FE503DCEDDC1CEA0A21E4EBEFE0F1EDF2F4E8F5E0EC01FBFBF609E30CEB02E0E0C6F5F6F6E828E0D6E2E6DEF5ED00F4E5FBEAE8FFF1D2F3FFCAF6EFEAE3E0ECDB02E4FE05EBEBE2FEE6F4F506ECEAE4DBE11BEAD2EFE7E0CD03E3D9FEFFE8F7E3F1EA03F0F7EAEDEEDEE1DDE0FA13DB0AF7EFE8FDE7F1EDF6DDE9E3E5EFEFE417EDFBE9EFDC0DE40529E4F4FCE6EDEAF2F2DEFFD7D50009EDEF07E9EFF505E6E2E603E6E5E742E4ECD7F0E8F3FAF5FBE0F8F6F20BEBCBF9ECE0FBF3E5F3EFF1D8FBE3FA06F5E0F1F1E2E3F5F9E4F6DEE6D710DFE7E600E9D7E6E8E2F1F7D3E8D5E4EB07E7F2F2F6E4DBDDD7EF06FCEEF5F4EFEDFFDAF6F302E7F0E6D2D2F0E400F5F6F806E615DBF612EEEDEEE0E8F2EBE4E1F9D7DEF50AD6E4FFF1E0F90AE6E9EF11DBE8DC41EE01F3ECEBF3EFEBF4DEECF2F00DE5F3FDDFF2FAEEE0ECEBF7E3FDDBFBFEEFE0F7E9E6DEF3F8E0EAD5E9CC17C9F3D906EAE0EAF4E7EBEFDFE4DBDBED06D3F30001DEE4DCE5FB13EB04F5ECEDF6F8D7EEF202EAFCF2D3CFF5F4E0F40107FEEC0BD8EDE9FFEFEEE8EAE7F4E9EAE6E7DAF9F2DBEC07FAC9E100EBEDEE16D8F3D73BE0FFEFF1E1EDE2DCF1DEEFF9E7FFE7EAF4DCFAFBF8D902FBFFE90DE7FF00EEE2FCE8E0E1E9F9DAF6D7E1C912D0F2E10CEEDBF3F2F2F3DBD6E5D7E4ED00D0D2FEF9DAF2E4F5FCFEEE04F800EDF9F0E3E5F616FDF3F2D3D508F7DBD8FAEEE5E505EAE4E3F8EBF1E4F7F0FEE7F1F7DFE8F4E9E9F7FCF7ABE2F0F3E2E2FAEDF6E932DCD6FBF7D5F5DCE8F2DEE5FEDEF7F8EFF6D5E8FAFBE2F7FFFDE414EB0704EDE1EBFEF4E9E8EBDDE3E0E2C200C3F7DEFEE9D6F9E2F8F8E3DDEFE4E8EFF9F0C50FF7F6F8E702F1EEEBECF3F2EFFBFCF9E5FA11F0F2F2D6D411F6D1D3EEF8EAD61DF0E1FBEDE9E2DBE0E0E7E5E4F3CEE6F502E5F9EBECD8F3E4DDE4F2E8F1DFFD3AF1DEFAE2F605FDFAF3D4ECEEEBF2EFE700F5D2EEF0F2EAECE6DD05EEFD01F2E4DF06E7EDE5FCE7CDE2F3C9FBE4F2E807E1E4F7FAE4F0F1F5EBEAFDDDECEDE7F70BECEBE2EEEAF7E8E9F5E1E0F30BEFDBF5DAE3F1F3D8DDF8FA01F9FDEBF9D11CDFEF00EFE7DFD8E0E8E7D5EEF7D4F5F900EAFEEBDBE20ADDE1EB08F2E7E6E849EFF0EEE1F4F6F7FBEFF3DEE9F1F3FB03FAEBE0F1EFF6E7E705EE10E8FB02F0E4EDFDDDDDEAFFE7BDD8FECFF1C9FEE415E4E1F7F1FBFBE203F3FCF0CDE8E6EAF1F9E2E2E8E3ED01D7DDF7DECCFDF9D6D6FBE4DCE8EADFE707FDE301F0E600D709D9F3F9F7F2CDE0EBF2EFD9E704D0F2F6F3EA04E9D3D70BD1E0F5F3EDF3E9E439F7CEE7E4EBF6DEF2F4EBE0F4F3FDFD01F1E2ECF4F8ECE900FED70BE6FF05F0E4E503E2DBE2E8E9BAE0FACFE4D0FDE918E0DBF6DD08F3E9F9F5FFE8D2FAF1E6F9F1E3E5EEE2E805D9D3F7EAE0FDF4DBD9FDF4DAE1EAE0F10BFDD3F2E3E5FFCF0ADBF018F1F6DAEBE0F1E9E0E3F5C6E5EDFCEB08EEE1D7FBD0D3FEF0F3E2E3EF33F9F4EDD1EEF3E9EDFACDE3E7EBF4F2DFFAF0E3F6FCEAF40AE0E5F0F4FBFEFDE9EF00D5DFE7E5EDD7CFFAD5E3D1FBFE1BDFECEBFEF8FAE9F7F4F1F9D3ECE8ECF0EBDCF5E5E0E509EDD5EFFAE2FB00DADAF8E6E2DCECDEFD0A05E7E802E8F6D8FEE7EBE9FCEEEEF4EBD3EDE4E4F4D2DBF100F5F4EFE3CEEFE3E5F2E801E4E9ED1FF2F7F7D2F8F102E8EEE3E4E6EBEFF0DEFAF6F6F0EBEDEBF8EDF0E3F0FFF6F1E8E5ECE2EAE9F1E7E3D807CFE3E7F4F00DD4F2F5F7EAF5E5F8E7F203E6EAE6DAEDE9EAFFE6FAE1FBFBD8F7F0E7F0FBD6E0F3CAEEE7F3E3F11404F6F002D8EDD30DF3EFD7FADAE7F8E2D4ECDEEFFEDAE3F5FEF3E8E5E0D8F1EADAEFF5F8EBF3E40BF8EEF4CCFBF2E9E1F2EAE4DEFDFBF2D8F8FEFCF8F8F1EB01FCEFEEE509F1F2E7E8E3E9E1E7EED9D1EB05CFE3D3FEE8F6E1EA05F8EBF7FDECD5FCF2E6F0E8DC02F8D702EB07D7EEEFD4FFF3E9E9EEE3EDF4D3EAF0FCD7C50106E8F504DEF4E118EDECDCF2D9E4F2DEE0E5DBE8F2E5E4F4F0E7E5ECF5EBE4EED0F9F7FDEEF3E208F1F3FAC8FCF5D6D6EDE4E2D703F5F5E5FFEE0AF4F5E7E605E8EFEDE3FFEDE5E9E3E6E4DBE2F7D8C7ECEED8FACCF4EAF8F2F903EEF1EBF4ECDF00F6E1EBDDDEFB06CCFFF4FCECFCF7EC07F8DCF8E0E2F5EBE0F1F505D2C4FC0BDCF610EFE3ED03F3E6CE00EAF1F7ECE7E1D1E4FAE6E9F9E5EBEDE0F3FAE3EFE2E5ECF5F0E5F50FEDE9FAD000F6D5E7EAE9DFD6FAF9F5DB04FCFFEBEDEBF0F2D8F2F9EA02E3E5E4E4DDF5DAE1F8DCD2F0EAD4F2E8FBEEEDF0F40FE8E8E3F6E9E7FBF6EFDBE6DAF50BDCEBEEFFF6F8F7E605E5DFE6E4E8FDEFCFEFF006D3D301F3EBEF1EEBE3EF05F6EDC9FEF5DEF6EFE5ECD8E0FBE5F4F9E7F0E2E9F5ECDCEFE2E5EEE6F0E6E20BE8DFF7D007FFD3E8F1D6E4D6FF01E7DBFFF100EBE7F3E6F7D7F1FFEB09DEE0E5E4E0F2E2EFFBDBE0FCECE0EFF301E8DDE2F30FE6F3EDE7E7EF0004F9E8ECD7E802E2D3F606F5F7EDD80AF1D8F2F0EDF7E4C2EBE9FDD9C0FC05F5E80AF6DDDFFEEEF6CBECF2E6F6E6DEE7D9E0F4E2F4F5E1E8E4E4F0EDD8EBE0F1F3EFEEEDD20DE1F4EEBF03F6D8DBFDDDE8D301F8E0DAF9F70BFAEDF8F6FDDBF30DE8FEEADEE4E6E0E7E4EC02DAE3F9EBE4DFE8F9EBEEE8F70DEAF0EFEAEAF20408E3EBE6DAE7F8CFE3F504EDED05DA14FBD8EFEAEAF7ECC8F3EE02CFBDF5FCF3EF07E4D9DE03EDFDD7EFF6E6F8EBDBE4D9E501E3F8F1E9EBE5D9EBEEE4F3F0EBE5EBEBEAD30FD3E7E3BE00F2DADF01E7E6DAF9F7ECDCF5F70B07E6F5F4EFEFEE18F2FCE9DEDDEEEAEAE0F1FBD4E0FBFADBDDDCFAEBF2E8F10BE1E2EFF1EBF001FAE7EBF0DFEDF6D7E4EAF0F0EB0DD711F5DBE9E3EEFCF3CFE5EEFDDDB6F2F1EEF004EFDADE0CE50DE8E8FAECF2EDDDE3E0EB02E3FCF3EDE8E6DAEBEDE2EEE6E5D1DCEAE9E205D2CEEBC4F8F8D8E9F5E9E5D1F5F6EDDDF1F70A09E7EDF2E4F1E709FBFDEBDEE4EBF0F3E1F6F9C7E8FA02D6EFE5F4F1EDDBF300E7D3E7EAF0F3FEF7F3E6F8E5F7FEE2EEE2EEF0F3FADF09EFE0EDE0F8F0F9D0D5E7FBE8B6F1F5EFEFFEFFD5D70EE812F4E6F0FAF8E2DAE3DDED01E2F8F0F1E8E9CDF4F8E7F7E1E9E2D9EEE4E70BD6DAE5BCE8F6E6E8F7E2EECCF1F6E0D4F4FB0C00EEECF1EBF6F10A0002E8DEEBEBE7F5E0F003D1EDF7FEDAF1E9F0F7EDDBE105EBC9F1EFEEEFF6FAF4DFF2E5F3F7E4EDE3F3ECEAEEE206F4D3E9E8F5EDFDD9DAE5EFF3B1EDE8F4F2F9F4D8D50DE107E2EAEFF9FCE5D3E8D8E416DCEBF9F8F4E4BFEBECE900F3F8F9E7F2E5DC06D4E7D6C1EFF8F0E9F7F5FBD9F8EDE3D6F0EA1101EDE7F7F907EC0FF8FCEFDEEAECCDFCE8E10BDBFBECFAE5E8E3F8EFFDE2DBFBEAD6E2F0E0EFF907EBE2ECCFF6EDDCE6E2F5E7EFEFEFFBFADEEDEAE8ECECE9EEE6EFDFB2FADDECE9E6D2E4D010E305E3F3F5E8EFE0F2EBE5EAFEE0EDFAFDE5E1C3E6EEE1EFF4FBF1EBE7EED300D9E0DCC2EBF7DCF0F8FCEAE3F2E9E5E5EBE210FF00F1F1F4EED803E9F9F7E3E8E4E9F4D8E700F2DCE904E2E6E9F1EF11FAE9FDF6DBD7E4E8F5030CF2EAE6EFF1DBDCEAE0F2EEE6F4F5FFEAE2F2EAEBF3EBC7EDEC07CCCF00E0DCEADDE0E0CD0AF804EEF1F6F1E2DF01EAEAE9F2D9F1F804D6E9C5E5DBD6E3E90604FCF0FAD0FCDFFEDDC1F0EFEAE4ECF6E4EEE6F1EDF2EDDA21FF02F7E9F2D7DEF4DB01F9DBE3DAEAE1DAF5F7F7D5D8FBECE5E2ECEF1208E6F9EAEFCADBF2FA120DE0F6D6F9F2CEE7FAE4F2F3EBF500FEDEDA09DEECF0E0C904F01DB7D000E5C9F7D9FCD7D5FC0DF5EDF9F1EEE4D90DECEEE2DDEBF9F7FCD1E0CEEFE1DBE1DF010302E6F7C602EFEFE1C7E7ECC9E5EFE5E1F0E8F1F0E8EADE0BFF0CF4F2F0D0DCFDDA04F6EBE2DEFAE3CDE9F800C4DDF3E5E1E8EFF31507E901F4ECD3DFE7F51512F2F9D4F8EEDADDEEE2F7FCF1E7F502E9EDFCE9F2F4DEC6F3F41AB6D7FBEED8E0E2FFD5D3F119ECEDF8F1F2EED9FDEBF1DFE3F8F5F2FAD8DADFF0E6DAE7E2FCF604E8F0CD05F9E3E4C5E6F8D1E3ECEDE0E5E7FFE5DDF1F203EF05F2ECEAD2EAFAEE0CF0EDE1D7FBE4D4E9F7F2D4E3EAE7E8FFEA02FFEDE50DF9D5E4E1DFEE1A0A09F4D8FFECDAEBE2DCFEF8E6E0DC04EAF5F4F9F1F8E6C5E9E905D1DEF5E8F1DEEAF3CEC6EFF9EED9EEEEFDF5E2E9F2F0E008F9F2F4FDEBE0DEE4D8E0E6F0F1DDEEE8EED8EDE0D7E8CCF702D9E5EAFCE2E4E6F6FAE8ECE115F6FCEBEAE3E7E4F802FCF4F0E2CBF6E6D8F0F6D4F6E8F2ECF1EEE7F9ECE2E905E6CDDEDADFF02C0712DDEEE4FEDDEDE5DEFEF0D8E8E0F8E4EDF0F6FCF0EBD4E3E0F7E3E4F5EEEBFBE406CBC606DC02DBE4EDFFE7D5E6EDDFE60DEEF6F4FCEEE1C8E3DFF0EDFEF0DEECD9EFD6F0CBDAE2DDF4F7E3E3E6FCE8E9ECF1FEF1E8DF190D00F3E5CBFDDFFC03F7EBEEE5D902E8D5EFF7C5FAE3F9E7EBE2F0F3FFD9E906E0C6D7DFE6F5330001DAF1D011DCF1E5DBE8FCE4E0F2F1E9E2E6F2FFF3F1EAE7E3FBDFF5F5E9DDF8DC0DD0C017DD07E1E9F6EFE9D7F3E4E8D7F5E8EDF801F4E8D9CBE1EAEC01F6E7E8D7EAECF8D7E6D1D3F2F5EDE7EE01EAEFEFF6FBEDF2E40B0DFAF3ECD6F3DEE209F2F2E8E5C902E1DEF1EFCDF9D5FAE8E2E2E505FDD3FE06E1D7DCD9EBFD500CF2D5EDD4F7D9F1EEE6D7F9E1DCE2F1E5EAF5F0EEECEBE5DFE0FCDDFC03EAEC02D5F9E5C409E4FFEDF9F1F6EAE0EFE0F0D6F5EBEAFEF6F5E5ECD3E7DDEDF5EDE4D2E6EDF6F5DAEADAD9F4FDE1ECEAE8EFE8F6F8FCEAF8DEFF08F1E4F4E3E7DCD90BEDF2E3E4C9F0E3E8F5F4D2F6DFECEBE7E4DF07EFC904FBE1E3D6DAE6F25212F4DEF6C8EDE9E3EEF5D3F7F8D5E8F0EFE1FEE9EEEDDEEEDBE101DCE600F6EF0BDFFDE3CE04F8FDFDFDF4F5D7CBF4DCEED6E2EEF9F9F4E9DFD5E0E8E9DEDBE9E4DBD5FAEDE3E1E2DFDFF3F4BDE7F1CCECE800FAF8E1F0E7E51E07E408EDEED8EAF8EC09E3F4E102D3F0F2F6D1EEE1E5E3D6D0E6FFFBBB10F3F0E1E5FAEDEA5509EEEAF4D00104C802F4D3F710DCE0EE0CDEFAF0F5DDDC04D5ECF6D5E9F7FD0201F6F7D1CF19FCFD0B01EFEBD9D9E8DFDFCBF2E9F1F7EFF5E4D8DAEDF2ECFAE4F4E3DEEFE5D9E3DAD6E4EFF4DCEFE5D0F3FC01F0EBE4F0DCE11CFBF004ECF6D8ECF9E8FFD7EAE3F4DDFAEA05D500E3E9ECD8D2E4F504B709FFE9EFE1F4E5E85517E3EFF7C3EE07DBF6F2DAFD04DADBF906DBEFF7ECDBD400E3EBF6CBE7FCFE05F9DBE0DCC618F7051700F4E1E1DDE4E6DBD2F1E7E4F3E9F8E3E2D5E5F3E816E4F9E3D7E9E8D4DED5D9EBE0F3ECF2E6EAEE07F7EFE8E8EEDAE10BF3FBFDE1FDD3EBF7E2FFDADADBEAEDF7E606D114E0F7EDD6DDE0F007B60608F1EAE1EADFEE581BDFDEFABCE8FDECE0F5E6FCE8E0D7FCF0DBEBF2E7D0EBEEEDE3F5C8F6FEF508FDC6E2E9BD17EA0713F2EED9DED4EEE4EBD6DFEED9FDE7F3CCDAE0F1E7ECFAE7EADCCFE5EBD6DCD6D8EED2EED0F3E3EFEDF6EFEDE7D9F1D7D304F9F4F5EAFCCAE6E9F4FDD8E3D4E8F4ECE700D5FCE2EBE5DEEADDEFF7B601FEF0D6DBE6D4E83C14EAD3F1BCECF6E4E9EBE6FFF0D3E501EEDAF3E1EFC8EDE6E5E5F5CDE700EC04F5CEE2E2BB17F7040BF0E7DBDDBEF0DFE5DBDAE7D8FFE0ECB3C8EBFDECF0DBE9F0DAD0E0E3D4CBEDD4D9BEE8BEE4DDE3DDD7F5E2DFC9F9D7BEFB02EDEFFAF9C6E1DAEFF9C6E4D0CE02E1D307D3E0D3CAD0DCE1CAEDF6B1010CE1C8CAF5C1D62C09D2BBE3C3E4EFCEECDFE009EECBEA00F7CBEADFEED2E4E6E4DDF9D0DF09EC04F4E2C7EBBE23FCF7EAFDE7D1F2F5F0E8D3FCCAE104040907BFE5F3EDE7D70309FADCF5E9DCF1EDFDF0EFD5F5F4F6D6E2F0D1ED0FF904DBBEE2B914FBEF0610D8C7FA04F104E0CBBFD8F9D7FCE3E3EED0E6D707D8FDE7D6D9FDB5FBDDDAD30FDAFAEDB80A20FAE2D4F2EAD102F807D4F2EEB41EF8EED8E4120EEEF308F8DBD8E2F6FDEFFEE5FFE707C3ECE6D2E701F9C1F0E3EFE2F90F0504EAF0E6F9F6D4111AFDF1F2FBECF917020B2E140EF2DFE9E211DFE507EE12D7F9F0B7172EFAFA05D2F5F8E8F2F1FAE1D5F212E7F4F1E40BFFDCDAEBCAF0D404DDDFF209ED07E325FC23D0DC281105E6D80DEBC70DEFE9F91CBE1D02FFEFF5D33BF3FC0504EA04C4E3FDF8E7F1E4EF0907C2CCDFD80F11FEB5EA15FBE7EF260EF003F3E70CFF04FF0BDDFAFD15DC162C06EF3C120CE5E9F9F101FBF5F6D40BD7E100DB123EE001EBDDEE22F40AFCF216F51620071ACFED05FCDDCBDCA002E317C1E4E81FED0CD61BE02EDFD6170424D1E3040FE70F0ADDFD0CAF14C1E32418020C0419F91EDC12C2040609EF05DFD3010BB30FEEE500F01BAFE611E402EC2113391EE5DBFAFA03F8FAE70C1608D70C1F0DE21C1004F0E20DFC07131501D101F3D8ECE21F1BFEE4F1E3E642E52904D32E0E1128061CE4F9ED0AE3E2CFA01DF608D7F3F11EF300EB21E905FFE9FD0C13EEE5010108092B00FD0AC301D5E5180D15F61B19FF17E813D21BF0070E0BF8E4F908C50CEEE3E0E60AB5E41ACC170411F84F0DE7E6FB050BFBF3FF182301F804200AEBFA2201FBDF16FC0C223BF9D902F1D6D9DC340F05D9F3D7F30D0808FDD0110F03102AF2F106E41DEFEDF3D81B00F6F4F7F210D3EDDD1AEFED03F617061D10D518F010042709EE03EE0D0FECFC1014FC1C0EF60D0014F1FFE7EB0FEFF0EEE504E8F8D4DFDA0104C0F717D3FC0406011911F8FB07190219E50008150B160224FB05F91DF9EEEF050E131C34E5ED02D6F1E7D82E2F0ED8F1E4FADD21E0F9F6D8EF0D0143D6F222E70FE4EBFAFE0E08F2F704FA20CCECCC10E5FF06FC30062927DA1DEF190503EDEC00140B18F1E80E05FC111ADD0B1218FEF4F2F7FDD4EAF2D217F4F6DBE2E0F906E30E18EFE9E2F71EF42407E205160107E9FAF3FF0800F1FFEC170921F7E6F7F7FE042819E6F5F6CF06FFE4011118F9D718FBFBE3E0EAFBD5E911020AE6FF20F7EFF2F1F6DF06E601DDFBF63BCE17CC0FEE040AF8E3041106F60C00220813F70909F6F310031311EB060C20D31D0B2207FCE013F1FEEED8E00DDDFED8E4CBF0FCE31206DEDEDEFD12F6380FDA0B1D05F6E7FA00E1040FF001F3131018F8F7F8FAF9F42320F8E905C30301EC160807FDD53F08FECDD8F411D8F608000EF6FD170FEC0DEB00F328E71CDFFE0443CB28BF01FAFE14FCC1E40904FCFC150ADE2613140DFCED02F92214E8FA0C1AD912031402EAE500F61EE9D8E7FFE708DFE1CAEEF2E101FDD4E4F9040BF13703F1F61600FEDFF4FEDBF610F4F8020A0101F3FEF40208E4003D05FE09B30002DE1D0AFDF8E520F006D1D8FC1AE7FD0B010906FC1319E606E0F00120EF16D7FFEE47CA2ED4F0F5061C0ACCF001FD04FD08FED936091107F7F5FEE60B0BEBE70C0FDC0DFF06FEFBFDFAF819ECEBCFFAFB1ED9F2F6EBECFBF0F9DBF1230505EC2D080BF8EC0C00FDE5F9DEFD01E8F602FEF7F1F50CFF0D0AFB01491015F2B10FF5EE01F7F8FFEDF6EF19EEEDFD0EF80C02FCFD1001F808E5FEECE3F80BFE05D80EFC25D828FDEBE61F0607F2FE01FB0AFF0F03F93CF6F0F4E503EBDBF3EFD3F710FCEB0603F4F50F07F1EFF0FAE4E4F4FF1EE1F6F5F8F800FDFFD50418FB08E82013FE07EF18EF16E7F6E60B05E0070008FAF6F3FC0B0307080C350BFBEEB50BE7F8FCF3FBF9F20605FE0FEE0901FB09F6F0FFFAFFF103F504F30C0303F308F409FE0ECE1FFEEFF514FDF408D80BEF04F707FEF41EEEF3F7E805FEDED9F3E50F08EAEFFFF9F5EE0A07E8FAE9EDE0F8F7F211E3E2E7F509EC0211E8FAF6EF08FE2E1304000A04F030FFF2F91300EFFDFA0A0309EFED0AFEFE0A1710F1EFF4C8E8F8F4E4FE07EFFEFE0FF307E603220AEC04F7F1DC00FC09FF0B0415FCFCE5F9F509F51FD506ECF4000306EC0FD903F70BFFE312FD06E00313EFFD17E9E30BE61A04DED5ECF903F40CFF01FCF2EBEAFEFCEDFBEBEED8E30AEFFF09E900ECED09FB360403F508F7FE3408F8F0FFE600FAF70F000AE2F20504F8FD0309F1F0F9D1F7F8F0F1F6FFEB03EF0BFDFBE3F1280ED6FFF6F0DAFF021104FFFB0AF409F3FDFD08EA20EDEFF40D11F704F3FAF9EB070BFED210FE06D70115F4021FF5FB05DF1302DCBAFDFCFFED11041AF30300EDF20403EDF5E4E0EA0AF5FBF7EB12FAF020E82104F6F407FD0713FE09F1FAD7F9FDF30402FDE7E9FE01EB02EB01FEF1F0D51FF2FD0FEBF9F404F8FE0601ECEC1102D4FBF9F5E9020A0310E5F306F204FF081303F01CF8FC14200EF5F6FFF4FCE20102FAE105F70CE4F70AF5F514F802F3CF0CFFF8BE2100F3ED14FB06F7FB0AFAED0B10EBEDE2F2F7F7F1E8F4050016FA27E31911F20306F200F31106FEFAD7EEF6F2F607FEF6E910FEEFFC01EFFCF6DADB14F6100EF10EED08FCFA0005E5F40204DB02F9EAEEF9F8E910EAF5090702F8001A11EC10E9FFF521FEE3F5F402F5F6F006FDEA0FFD1200FDFFE1ED08E8EEFDD503F808D01905F8E715EAF7FBF60C09FA01FEECE8EAF0FCE7F3F2F50AE307091CF12210FCFB01F4FEFF190504F1DFF0F9F7F7FD05F9F309FF05EF1EFCFDFFECDAFA0407EEF91AF20CFDF5F900E0001304E605FAD8E901F5F5FF00F1F30D02F2FC101ADE10E7FFCC0DFAE604ECFDFAF8F21805D322F515041703D6F8F9EFEDFBDE01FD0AD4030702E213F00BF1EFFE0201F9FDF2E7F5DEFAEEF3FDE4E4E9F90218EB1806FBEEFB1A03FEEE05F8E1F2F4F60108EE0CF4EFEBFE01EC0A16FF0511F511FBE6FEF802F1F400EDFDE8EEFC14FEE7F5E6D6E70DF7F9FCF3EEEAF512FFF61811CA14DAF9DD0DF6F3FFF1EA0BE8F70D0ACB13FC0E050C01F504F60502E9DC021A0DD30B0B04E909F50EEBE6FFF6E7040BF4ECF7D2FEF3EFEEDFDDFC13F735F61709FEF80210F708DFF9E0EF0BF9EEF5F9ED13FCE2D7FAF0E7FE1A04FE1E2214E7E011FBF9EDEA04F107D5FDFA0006E0ECE3E8FA00F4E707E3EEF8041215FA1908D718E0F2F414E904F2F6F2ECE7E8F6FAD20BF703FE0B03FAEAE2022701D40A3110E00D0FEBF70BF5F2F0DF0300DDFA13EDF307CCF4E9FEECE4EAFF1AE76E11191AFB12F70BEE21FBF4DD190CFBEFD2E6E203F9E2E50BEBE80612FAFB133303E5DF06EF1904F500FB05D6F405F400D7F7EAF406EEF7E401E0E7080CFB27F21101DB21E9D6E008ECFBF0FCF6DEE0D4EBE6DD0ECF110318FFEBE3C5DD1E35E5102B0BE4F909DBF717F1EFF30EFAFDFEEF17EDF10AD5F1DBF8F4F0ED0518E27705160FFC1FEA1DE00CF7F3EF1F03FFF0CDF3DCF8F1F40406FCE90518ECF6FF3901F5DE05F22706F1EB0603D8E406F4F3CEF9F3F7FCEAF6EEF9EDF10303ED25E5FE08D61FF8D3E5FCF4E2F2F9FFE6E3DFECFDF413D817041D03DBFDC9CC1131FCFE1619E6F5FBE8F411EEF6FE1DFAF702F60DEEF809D9F8E2F7EFFAFB0B10ED3CF417FEFE04FF32DDF4F7F6E91B03ECDEFE06EEFEE5090AEE05E500FBEEF40029F605EDFD1516F0D5E412EBDAE3EFE8FBDC0AF5EBEFF6DBE801FD05F7F1EBEFD9FA16E113F0EBFDFEE9DF02E71CEBFAE9FA0B0825041EF5F7FEDEFFFFEB0204FD05070FE3F7FAF5FB07E2E4FBFD0401E203F7DD0202E5ECF3FAF3000CF701FD1A002106F6000231EFE4FE01E01712ECDC100AFBF8E902F5E305E50FF3F8F4FD1EE700FCF4181BEBCBEB1BEADDE9EAE4F9E616F4DDE708DFF000FE06E7F4EADBDB0110FA0EE1FA03F2DDE900DB2EEF07F507041320071BF3F4FCD3EEFEFCFCFCF30E0DF9F1F5F8F1F20CE7E4F3E90104DEF9F0DF0104F6CDF5FCFE080AE6E31307FC2307F0EFF30DF7E1FDE9D4FB0B07FEF1F803EFFAE6E6E106D81109FCE2F417F7E70DFAF928F8D5EC11F4EAFFF2EFF3DB22FBCBD80EF5FEFDF5F6E615F9E0E1FAFA0505CE13F1F4DEEEF5D23CFAFEF2F6FF1413030BFE0609D6F1FBFE03F3FA0B1AE5F5FAE4EEDE0DFBF6E6D6F306F8EC00ECFC14F7C7F4F0F00BF2DEE614FEEC170502E1FA05F9EC0BE0E4F40C0513F0EF07ED02E2EBE8F2DE1515F4D6F906FBE71609F114FFECF007EEE50DFFF7F6DB1FF8D6DD06FC0904FBF0FE1800DDE3F8F20312CD0FEBF0EBFDF9E02DFCFDECEE06030F04F3F3010DDE000F0FF4F7FA0F20E5E6FBE8E9DD19FEF6E9E4E906F1F600E7EC13F3E1F3EEE0FDE0E5F103F0DE0903FAE9F719E7F611E6FCF50FEF0303E401F507EE05F2E0E60A13D8D4F4F3ECDD0317DFFAF3FC0104E8E7EE0AFB02E413E6F2EEFF010405F9FF041A07DEEAF7FBE817E9EBE6F4FEFA0EF91111F9E3EA02F6FF04DBE4F902E9112115F0F6010E24EAD1F3EBF8F40A04F9FBEEF6FCEEFEF2EAD201FEE8FCEBDFF9EFE7F7FCF7E102F6F8F7F81EE4EFFEED05FEF8EAF204E7FFF90DF506EFE6F7060ACDDFDFEDEBDFF200D5F5F6050301EBE7E5FA0313E80EECF8F5041801FCFB06EAFCF7E8F4EF07E3150CFBEFF1FAF21602FA19E5D5FAFBF6F509E3E3E507EC140A16F0F3E1FE12F4CCFBF1F9FBF00D05F9E4F7F3E9F4FBE3E3FDF2DC18E9ECEF0BE106F208DFF8F600F3FC29F8EFE6E3E7F615F3FD0EEDF3E507ECF9F508010B15ED0BE7E90EDFEDF5E20510F4EEF7DFD616F1E01A1B0D2F02E2FB1602150008CAE7F7ECF5EF0ABC0605080CF3EFE60EDAEFFADED9E5F1E3F411EBFDE7FBFB02F9FAE0F5DEE4F6EFDDFEF7F3E4D3090803E0FD0100EFF5D2EEF9FADF26EDF0EB02E413F7FFDCF1F305EBFC32FF18ECF9D5EB13F60711F6F9E00D07F0011F12011CEF08F8EC08D8F8FFDD09FDDDFA05CDE82719DF091BEF4E01D6F2F50225FA0AE1E9FFF5FDEEFFC4110C000104F2DDFFCCE4E4D7ECEBF9DBEAFFE7EEF800EDE6E202E3F4D5FBF5E8DDFEECEDFAD4000D08D70A13F4F3E6ECF3F00CE618E8E6F603EA2507F4ED01E914F40626F4140107EA01EFF4FF03FA0DF71406E9FE1A0CF509D9E9FFEEE1DA0002D102F3D0F917D6FD202D00FBEBEE2AE6DAE4EC051AEC0B02F3EEF109F8F3E027FD04F30BFADEEDDFFDDECEFA0407D4F0EFCDCD0317DDDED619FD0AD61E00F3C903EBF813EFE521F7CF0310DDFAD4FCEAE60BE5F3E6E4F200FF230C03FEFFF11AEF0D08F2EDFBE9F915E6F1F5EAF4120C32E9E4F705FCF300ECF202E6FAE7000DDAFE00D9EC08E4F70C180006E0FBF9D8E3E70A0A09E60906FAE8020101F8E529E1FFF807FEE0E1F107EED90100F6DAFEF7ECDB0A16E4ECF70DFB07EA09120EBE0FF6090A02E31DE7E5F3FDE3FADFEFD8E70CD9E3D5EDF3190006FB0300F6EE11F504FDF502F7DCFB0BD9E4E9E4EE09E463E1F1FAF713FB0A081CFAEA0FE80FFF1A0CF4F7E4F7E3F30424EC0DEAF9E2D1ECF91C06F3F006EEFCF418FE0510DA1FE0F8FB13F2DAE6F6FEEBDD16FBFADA0BE60BE9FD07CEE811ECDFFCFBEE1A03C014FA16F808D603E4EBE4FA0204EEEDD3EC15CAEADDF9FF10FAF5F2F80F01F11804FF0DF311ECF0F11CE7EFE6EEF4F8E87FE9E90BFA25FF0C072409E4F1E614FC40FDE90DE1FDDFF9F21DF618EEFAE2D2F0F81200EAFE02DFE6FA18FCFB0CD80EEAFDFD0AEEE3EFF0F0E1D8220500E709DE11E7E20AC4E919ECD6FFFFDF12F7C511FD0EE503D6E9E201E8010404F5E6DBF915C3FF0312F8E7FEF8F1FD1116FD18130816F0F7D504EE25FBF8F00101EB0D64E7D90B040AFCEC02F814D3EBED110A13E8FB1DDAF8D10DD004FD13FC02F0D0EAE70906E0FBF3E5CFFA01FFE804E10DF40E08FEF706EAEEE9E8E01A08F6EA00F0F8EED209D8F207EFF0FCE6E41CFECE0C05F6E102F7E1E003F4FBEFF5FBE0E3FC03C7FB0E19E2F6FAFDF9050E2A0311100806F3E0EAF6FF14FBFF0001FEF60D3AE0E506FEEFFACEEAD201DDEEF51812E2000E23E9EDCC13CFFAF805F508FDC6D9E81D07D3EFEAF8D3F4F1FEE5F3F020F6FA0806FC13FC01F4FDE00D03F2DEF503ECFBE30AEDFFF3E3F2F3D8EA3200CE07FBF8E00B0BF300EAF7F4F3E800E2F0F905DAE5FC0AE2FCFB10F70B031EFA0705160DEDE8EDE412020E08F8F1F7FF041EE2F10BF9ED00D0DFD2EAFAEDE5110BE107FD14F8F1D0FFE300EF03D6FFF1C7E6FB1FF5D7EAE7F3EFF7F109E800F422F0EEF50AF4031505F900D7FAF8F4E1E8FEF501F100E201F3DFF503CEDE2BFDD404EDFFEBF609FF11E9F9F5E9F5060BF3F80BF5DBEBF7ECE91022F40FF20BF508FF2019EAFADFDC0A03220CF8EAF8FB020DDDEA0BF2FD0ED3DBD4E1F8FBDA02FCE900F0010AF5E7EFF900E50BDAF2E0D8F9FD0FEEF3EEE9F4F6F0ED13E809F71DF5FAEF04EDFB0FFCE3E8D6F2E5FAF3E402FAFDEEF5DDF800F8FA06D5E41405D401F2EFECE30B030BF3F1FDDD00181BF6F700EDE2EDE8E6DF081AF40FE803F8FD00171FF2FCDEDF05FF220F05EFFAF7FB03E3E70BF0FB0BD6DFDBD7F5F3E901FFEEFCEDF701EDF1EBF9FEDC11DFF4DEDFF0F008EDF7F1DEF00CEDEF04E907ED15F6F6F4FFE6FB07FCE1ECD9F8E5F803E502FAEAFAF7DFFA060A010CE2ED0A05DAF3F1E9EBE807FC02FCF8F8E703230FEFFCE5D2E0F1DAD7CAF606F505EDFDFAEDFB04200CF3D0E4F8F818061012F6FBE905DCDF0601DF02E2E4FFC9F8ED05FD17FE05E9EFFAEAF2E20607E214EB07EDE2E1E508F7EFDFDEEB2FE7F0E8F2FADF06F6F0FC0BE4F1F800ECFEEB0BF0E917EE01FAE00D05F0FF0E0CF609FCE00510E8FBF4FCFDF60DEDFC0DF5F8FF091806DE08DFCBDEF0D0E1D0F4FFF3FBF00507F4FEFA2503E5D3DDFFF005FC1118FEFBEA06D9E90505D6FDECDA04BFF7F512F30D0109DFEEFCEEF0E2040AF216EC08EFDEE0E708F6E4D9EEF529E3E3DDF7F9E10CF3F9FB0CE6F0FEF9E601E50DF4E71FF40F09DB0009F6021200E002FBDC070BE5F9FA0713F50BEAFD0BF1FBF9080501E90BE9CDEBF2D4F0DBFA02FA05E4FD07FC020124EAE6EBE30FF2FCFD0AF506FCF900E5FE0E05E304E9E9EDC5EDFC0DFCF3F6F6DCF9F0EEEBFBF2F6ED16DEF8EBDFEAE10AEEE1E7ECF912EAE6EFF20DE60DFAF90003EDFE06F1EA02DDFCF7EB18FA12FFE6F8FBE905FD0EF1F6F6FA0A02E1E5F7FBFFEF02EDF0080400FBFB08F9F1F2E8D5EDE4E8EDE9ECFE0508EDFAFF0FF9FC17DDF6F8F506EAF9FEF3EE140200F5ECFF0BFDF307E7F4FBD6EFF703FBEDF4FBEFF1FAEDF416F2F8E906DFF3EDE2FEE10FDCE1EAECFB05EEEAF2F013EA0FFEE8FCF6F2F804EAFD12DFEB02E102F906F6F4FBF5F1FAEA0CFCF401080CFEE4E8F8F0FCFBFBE3F1FD07FF0AFAFDE5EFE8D9E0DFA502DAD7F7E30B0405F8E81CF1E8FCDB37FDF5DED6090FECE947061AE7E20CF608FC0EF3F412E5F9FDF3E7EA0A1803E10304F04EF902F1FCE5F1F1E828EE1FCEEEE5FEF512E7ED0AF21AF110FED1E9EEFAE2FAD41012F4EA01DD01FB08F303F1000402EB0509F209160A13E100E7D6050409ADEFFA050D11FF0CC7DDF5D8DED5AB03D8E4F9EF0AFF0AF6EB1101E102DC31FAF6E4E10F05EBE735FA0EEDE603F900EC0210F508EBF6FCE8F1F307100FE5F2FCF635FFFCF6F5DFEBF0E626EC15D4F7EB05E30CE8F60FF519F711F2DEF6F1F1E0EDE0070FE9F1FFE1FEF108F307ED020404F1F0090BF606050CECFFF0DCF6FE00B7F5FF021405F613D8EAF3EDF4DBDA1AE8EEFB12F1F7FFF90EEF03F30DD716EDF0F60113F6EDE0EAE4ED01F0F808E8CBF31DEADCEEE5F0EC0AE7131806FAE1F407F603F8F2F0EEF1E9EFF2F012F0F5FE08DCFBF9EFF4F312FD17F2EA0CEFD1E9EAFA0119D9FAEF00E4E10CF200E5F703FF0BEC020BDADB08E6EBF10FF1F4F3FEF6F1F4EFFCEEE81007FAED01F1E3E729E8E3F415E808FBF21FE501FF16DB0DF3DDFAF413F5E6F1DEE8E704EAFB01E1D1F100E0D6E8E7F2EA0BDC141DF6F7F1F6000201FAE9EAFDF5E9E1ECF41401E8FCFEF2E5FDE2E7EC26FC27F0E706E9D9EAF7FD1217E202ED03DDE2FEE7F9E6FA06000EEEE5ECD9DE11E5E9F106F303FE0FF5E7F0DAECF3EB0209F3F2F7E6DCF90FDCDEFC14E811F8F31CDBFAF016F30CFDEEE9E825FADA0FDCF0E303E6E707EBDAE404E8E4FFF0EFDC15E51309F4EF0BF9F20513FED9E9F8EBF7E2F4F80600EDFBF0E4E8FDEBF9EA26080CE9E90F02DBFC01F70E04F90206EBE9DDF8E509E7FCF6E40CE7D3E8DBE103F70802F4E3F2081AE4EEEBE5F2F0E90903F8EDFBDDD8FDF4C5DFF8FDF500F4FB0ADAE5DB18F905F904F1E52408E3FCDD05E206FBE001E7E7DC0AECEB10F9EDE11BF6110A0AF800F0FBF70DFBDCE4DDF9F6ECEAF41203F201E5CFFD05F60DF216010EF1E30100CF0BFFEC0106ED0120EAEEDFF3FA01EA00FDD9FDF4F9FEC9D500F8060FEBE8F1F412E6F5E4F8E2ECE415EDF9E006DDD8F9E6CEDBFAF1F9FCF0F5F0E6E4D81DECFEECF9F8DD0E0CEED4E20DE51402E903F3F1DB1EE5ED0CF1E6DB0CF6F4FF0A0304F2F3F20419F8F3DF05EFF0DAF51AFBF3FFEBC80DF4F60DF609E714EEEDF5F8D7FCE8F60318E1F217D9E4EE08FDFF000A0200FFEE0311CCC8F8F9F814EAF3F5F600F603EEEBD7ECEA12ECF5E521DED5ECDDD6E007F8F4FCF8FAFBE0DCD617E1EFF3F6FAE1060DF3D7DF06DD180DF5FFEF08EF17E1E7EBE5F0D30AEEE306070B08FEF3F20924EDF3F20EE406DBF50F04F6FEF0D207ECE300EF02E216F8EAF9F4DEFEE2F6F41CDDE012DBE4F60BE910FD07FD0A05FCFA05DED5F5F3EC0EF4E7EA0CFBFA12F9D9DCEFEF0FD9E8E641DEDFE4D3DBED0EE6F4F9F51308DAEFD919E3EBE3F5FEF5F603E9FAE8FFCB0209E9FDF012F010E8D7DDDEF7D613E5E8FC0E0713FC00F3FF0AE1D90513DE0FD6F90E0F0706F8CCFBE1DAFDF0FBDA0BFAE512F2DF02DCF9DE13D4C317ECF4F315E918FF0803080A00EF0BF5E2E9EDE6FF02EBF709F7F417F8D7F3E9F1FDD4E4EB31E8DFDFD4E3F50EE9F402F619FEE2EED607ECF8F1F703FDF900EFF1F101D0FB0EE60CF8FDF20DE9E6E5DFECD818DEFE16090704F3F802FB11E1D7FF00E401CEF10004060DE9DB06DFE90BF2F9DF07EFD712F9DC05E9F1D0F1DBD91AE7F0F005F41D0602FD0B0FEAF326EFF5E7F0EEF605ECF20AF6E318F1DBF9E4EE07EBFAE611EEF5E4DFE1E80EFEEE0AFC0EF0EDE0D20EF3F1F4F9FAFB04FEF2C8FB07D603FAE20EF6EAEBFBE502EEE6F0DD1CDD011B0202F1FCF70BF20ED8ED05F3F0EADCEAF0F7FB09D3DE0AEB0009FE10E9FDEAC91AF9D90DFBF8DEDFE00623E4F1E9F3F721F9FFF31302E3012EE4F8DBFA050713EBE511EFDD0EF2D8EEDCF10CED03D906010CE0E3DDE101F9EA0FED0AEBF9F2CC1EF8E7F2EB00EDFFFBF3E6FF02CF07D9E202ECDBE3EDDB04EBE6ECEF1ADEF3FEF40507F4FD0DDEEFDC08FCED05F2D9EDFDECF004D3E3EFECED02FB19F1FBEAD928FDEF080303EDECE6102405EBE7F9ED13EB02FE0DFFDEE20AF0F5E2FA120A0DE6EE03EAEA04F6E2F2ECECFEDEF5EF0C0E0CDFF6D4E4F7E5EF07EE03F3FFFBD01EF1F5E6DD01DA05F6FDEEF6FFD207D0E9F7F0D0E6FAD6FBE4EAF3F40CDAF4F3EFFDFFF2F20BDEEFEC0CF6E204F4DEF308EFED0EDCE6E2EFEE06FB14F9FFE0E22802FD05050AF1F1EF0F1D05DFE5FBEE0EF508FC04FCDEDC05EBFBF5F914EF08EBEBFFECF008EAE2EFEEE6F9E1F8FA11FF07E301E0E401F5DE05EDF208F8FFEB1AF6FFE6E2F4E310EBFAF1FBF5DC0FC5EDFAF1E6EFFCE4E1E4F303F109D6F3F6EDFBEAFAE911EF0AE507F0E8F9F0E4FD0F02F20FEAEBD1EDE0FDF22314FAE6E711F3F8F0F412E8ED0807FADFDDE906E31CFB03EC040DEBDAFDE4F7F60006EC11DCDCFF0EEC01F0D2F4E6E5FBF8F9EF02F1F8EBEDE2D6FBF3DBF7EBED04FFE7EF1DF9F2E3D5F5EE0FEDEF08F703EA13ECF3F7EEF1F209E0E6E802FEF205EB0613EE01EEFADB08F218E305E406F0F0DBF30BFFEEFDE8EEDDE7E5F3F4260B06EDE9F9E3ECE5E402F8FE0AF907D0DCF10FED111102E20012F9E8FCDBD800FEFF0206EBF5FA15EB0DF9D4E9E0D8F8EEF2E501E3F9F5E2E0DCFBF1E7F3E8E7F608DCF40AEAFCF1CE03F80EF6F9E4F812FC0E01FD00FAEAEA13D8E6F9FEDFF40BF90720FF02E9DDCDF8F70CE8FAD31EE1EED5EA0BEAE6FFD4ECF9E902FE0416EA15E5DCECE3DFEBFAF000FB01FF05D8D9F6FFFC051EFBDD140CF40012D9D904F0F8FAFFF6FAF40EF002FDEFF7E5DBFFF1EBCDF7E206F0DDDDEEF404E6FDDDF1E909ECF20BEA04F5E4F9F100F1FDEDF908E70CF0FB0BEFFAF706E5E9FAF3DAF707F0FA06F1FCF9E0DEF1F4FFEF0DCE0DEBF2D6E80AD8D602CCE9E8EBF8FFEF19F717E8EA05F1EFE70AF9ED03FCFEEED7CFFC01EE0003F9EE250502EDFAE2EDFFE6EFFC15E7E20004FEF5F3F600F8E6F9F0FACDF8E201E5E2EBF6F416E3F8DDF2E402F8F50EE00DF4EBFDFCFFE7FDF30103E109E5F803ED0003FFEBE4FCF9DBF601D9FFFAE808FCEEE8FFEAF2F00BD000EDF7D7EDFFD4DA0BD3EBD4E4E1F8E42CF710F6F414EFF6E71007D6F8FF00F1DBCFF8FDE3F9FDFBEE250CFEFAEEDEF7FBE5DFFF23E1DFFF0FFCF8E0F4FCF0E2F7F0FAD509CBFBE1F7F3EFF505E5ECDCEAF000FBFC1CCB04F3F805FAF5F0F0EA0D05E0F7F8FDFAE30702EEE3DCFBF8E6040AD21A12E509FFF5EAF5E7E5F3FBDFFCDAF0E1F9FECFE212DBE7C7EED8FEED38F207FBE20DF3F1ED1601E1F7F80EFFF9D3E9E6E2E4EFFDFB27FB0105F0C6FA02E4DE0029E8EAF910FE03DEF2F6D8D6E6EAFCE40ACE06E108ECD9F3EFEEF3E1DEFB0EF60511D2F9F002F4EDFBFCEBCA04FFE3F5F7F2FBDEF0E7F0E0ECF6ECF5FD0BDF131EEEE6F0FBEBEBF7FFF4F706EED7E3E106FBD5E410E4EDCCFFF7FD022CFCFDEDD10405DDEA0500F0FAFB1BF8F5D6E0E9DEF5E7FC012FFEF70005CCF800EBF80B34E2E8F905FBFBF7E0FCCFD7EDEBFAEF00F3F5DA0BD1D8E6EBF8F0F5E7011200EF0FEEF7EBF8E9E110E4E4ECF2F4D3F7E8DCF6E5DAD2FDD5F9F2F3F9E708FBF405F6DEF1F7FBF1FEFFF107FBD5F3FFDD0C01E8F311F5DECF0809FC012111F4EFCF0E0BEAF9F20FE6FDFA0DF6F7EEDFEAEBFDF30605FF07E0F3FDE6EDF9EF090813F2F0ED02F0F2F4D6EDEDD1F6E9EFF7FBEBFCCDFFC5DDEADBF3F6F6E8080805DB16F5ECE6EEF5E311DAE2FEF4F5D9F7E3DCEFE9CDCF01DA04F20601D80D08EAF7F2DEEFFA03F103EEE708E3D70112D415FEFBFD19F8D5D51816FB00211BD6F5DC1803F60BE60FEFF9F10E0102F9E0DBF702F512F6F002E1EBF5EFEEEDF10DFEFEF6EAE505E3E9FDF0E4F4D3F1E5E8F4F9EB0ADDF6E7DCF3E6DCF5DBD8FEF3FAEE20E7E1D6FAF3DC06E8EDF4FCF1ECFEE5F0E6EFE8E6FFDDF7F60601EFFEF9ECFEE5EEF8F8F3F4FF02EE06E3E9EA11DD12FFEEF501F4D7CEF8F5EE012400E2EEEC19F6FCF5EF05FA01F70100E9E5F2F0EC00F411DDFA0EEAF304E0E7F3FC04FF0AF2EA000EEC03FAEBE7EBCEEDF2E8F205E4FAD9F0F5EDF6E6E1F6DEE107FBF7EE12D9F4E2E7F9E0F5F0E4E6F9F4F6F8F005FA06F2EEF9E1E2EF00E5E6FBDEF41DF1FBEDF6E6EF04FCF603E0F2DD0BE307FFEBE7FEE6DFEBE8F0F70320EFF4F8FE0AECF1EC01070003E600F0E2D9F7DCF8F4FC04D7130BEB0407DAECF6F3ECFCFEF1ECF513FAF9F5F7F7D6D5F103F4E407EAD5D0E5FFF7E5F8ECF8DEE80F08F9ED07D5FAF4EFEDDAE5F3DEF2F7F3E7EDF901030001F6EEE7DCE2FAE1F2F5E4F437E902FAF4EAE51302F411EDDDD808DDFBF8E1EEFBD9F5E4E5EDF5F80FF501F8FB01EDF0E8040AED01DF00DEE9D7FADCFDF0F7FCF21309F6E7F4F5EFF2F1E00309F2EFFB0601FEEEECFFE7CEF1FCF9EC03E4D1D0F004E4E5FEF1F1D9DE100AFDEF01E5F5FBF8E0E2F0E8DFE2F6F7E4EAFAEF02F6F2ECF9E8DFFDEAE0FDFEF1EB2BE0F6ECECEFE11E08F106F6E0D1FFDAFBF0E200FCDEF4EAE9FBF2FE13F6FAFCEE05EBEDEFF10BF300E80DE1EFDEEED4FCECF000EC0C0EEDF7FCFCE4E5F7E80414F2EEED08EE05FCE906EECFF7FFEFEB01E6D9D2FFFFEAE7F9F4EEE2DF1108FCEE10EBEDF5F6EAEBEDE0DCF5F9F2D9EAFAECFCF6E7EAFEE3DB0CE6DF01FDF4EC1BEAEFF3EDEAE511FEFD02FCE4CFFBE1F7F6E401F8EBEBDDE8FAFC0416E9FEF9DF0DF0FDF3EB08F003EA06E3F0EAEFD6F4EEE9FFE4FB09EBF905F8E9EBF4EFFC06FBEDE811ECFEEEDFFDF1CAF600E7E900E5F6E2F7F8E2ECF4E9FCF1D81701F4F909E4F7E9EAF5F4F6E4E7DCF2F4E9EFE8F2FB0AF3E7F5E3E501EADDECFEE5EE07EEEEFFEFE3F3FE08F603E8EED0FCEDF5F5DDEDF6EBE9E6E607FC0820EDFDFBD90AE5F4F60703FFF8F3F8DFDBE0F8DDE7E9FA00E10607DFF50AEDEDEFF1F0FC07F2EDF10EF00100E3F2EADBF9FEE7E7FFEB03F1ECE8D5ECF1E9F9EED20801F8FC0FE9FBEBF5E5F304E8E6D0EDF0F2F4DCEB02FDFFE2F1E6E9FBE7E0DC05EBE6EEF9EAFDEBF3F3FC10F4FAE6EFD906EA08FBE6F507F1D4E7EE0403FC17FFEF0DE6FFEBE6F803020AF4F4F0E4E0E2F5D9E1E5DE04E20508EE0C0BE0E5E0EFEA070ED6E9E60EEEF90BF4F2EDE504F3DFF304F0E7EBF3E8E8E5EBFAFAEDD9060801EF0EEEFEE8FBE3DAFAF5E4D9E7EBF5F4E1F00D0503EBFCEAECF0E3DBE7FEEAE200F7EEF6DFF9E60C0FF8FCEED7E008E000FCDEEE06E5DBE7E7F810F508FBF1F8EFF8F7E5F8FC01FFF6E5E7E5DBE3F3D4F1F2E306F50502EAF709E5E5E2F0F1010DE7E8EDFEF60504E8F8F8DB0AF6F10204FBDBE4F1E6F5E2EEFA04F4EA0403F4EB05EBFFF5EEE6D5F3F6E3E9E6E6EDF4F5FC15FF08FEF9EDE3D8E0E2E703EAF81CFCFCEBD5F3E70A0B00FBF0CEDDFEE0EBF6DFEEFAD2ECEEE4EF12EA03F104F3F2FEF6E0F002F8F6EFE6F9E0E1E6F6D5FA03E0F903FEFDE8FB05EEF6EFEEECF20EF2E9FCFAF506F1DB06F7E208FBFDF3FEFBDFDE02E1EEDDF1F10CEBEA0402F3EB09E803EDDBF0DBF4F8DDF4EEE7F1F5F8FC10FCF803FEE7E4E1DEDDF009E00E1BF4FAE6DFE7E5F7FEFDF3F5D8D8F5E5E3EFDFF2FBDAEFF2E5F40AEC03E602E8EE09F4E0E806F3FCF5EB0EE3ECE4EEE0FBFAEFEFFFFF01EE0C0BF1F2F9F4F2ED10F3EAF3F9F90DECD816E6EAF50100EB01EFE8E415E6EFDAE5F808F6F004FFF4F60EE701E1CFF3D1FCF5CBFBEEF9EFEA0CFC0AFDEAFEFEE8EFDBEEEAF00ADF1B17FAF3EDDEDFF1E107F8F800DFCBF4DCE9E7E1F5F8E2EFF4EBF50AFA04F3F8F1E7FCF6DBE8FDF00AF2F519EBE5DCE9E6EAEDF2E4FDF6ECE90622E1F500F305F9FE05EBF9F7ED17F5D310EEEDDE03FAE4FCE2E3E400ECFADEE7F2F801F4FBFCDCF00DE7F9DEB9FACEFEEFD4FB010AE3EC19F9FBFCEEFAF9F0FADC04FFDC06EA1D1BFBFCFDD8E904D80FDF01FEF0C8F4D9EAE4EB09F8E3E2F3F4EB0303FC02E3FFE4F9F1DDFFF6EE0BE4F92204DFD9FBE2EDE2F5E4F8E5DBF5041BDBF3F4EF0D05F10BEE06F0D924F2CAF5F8F0DCFAF2E4F4DFF7DAFCE7F9DDF0EC08F5E8FC02EEEB18ECF6E6BAF6CDF6F1E51A00F9DBFBFCFBFDF4EBF104E9F3EC04F7DA02E4090BF2FA04D9F700DD07DC04FEF4CFF0E2E3EBE902F4F0E2E5EDE6FBFF0403EDFBF304E6E1FBF8FE02F4EB14F2EDD8FCEEE7E0FCEDFBF2EEFCDE04ECEBE9ED0502EE04EA10F6E209F3D2EEF9E8DBF5F3F9F1F106D70ADE00F1E8F023F5EEF8FDF8F613F6FCF0DCF0C7F5FBE028E3EBD4F1EFF509FEE0F4F8E9F5F0F3F0EA09E301FDF1F708D7F6F9E605EDED03D4DCF5DCF1E3DEF5EFEFDFEBE8E904FB08F001FBF91EF9E7EFFA0604EDE202E8F2DDEBE6E5E1EFF9F6F400EDC513F7FAE3ECFDF9EBFFDE02FBE2F5F8DC09EDF0E1F9FCF5FBFAF0EC06E9FAE0DFF81EF4F0F5E8F4EA0BF2F5E8D7FED9E7F3EBFDE2E7E9F320FD0101EA0A08DCE6F9DCE6F400D80311F600FFCFDD01DD09F9FDE8DBD1F7E3ECE0D5F0F8EEEBF5E6F515EF06E604F8E606EEF0EDF6ECF0F0F4FEEBE3DAE8E2E8E0E4E6FCF8F0EAEF28E60E0EF6F9E9F1F5EA02FAE8F8F6D511F7E6F006F1F8E9FCECEA02EEF3CDDAF316E8EDEBE9EDE7FFF5F5D7E7FAE4EFEEE806EDE9F3F837FCF505D10C19E1E510E3D4F8FCD50D15F2F8FDD5CBFCD4010404E7E6D8F8DFEFDACCF5F6FBEFF1E3060DEEFFE9F8FBDF09F2F5E9E9E2EBEFFD0DF6E4DDECF8E3E2ECE7ECF6F7EAEF30E30E2005FCF1FAF7E60BFEE1FAF5D71FF7E4EE14F2F7E7F204E1FAE9FBC6DEF718E3E3F4FD06E702FBF3DADDF0DCF0F2ECFAFEE0F00A1503FE05D3F21BE6DC18EFDCE8F7E2F301F3EDEDDECBE6F003FDF2F3F4D7FBD2EBE2DEE0FEF8E6E3E50C08F1F6F2FCF1EC04EBEADFE1E8F5F30E0AE1D8E3EEF8F0FDECEADB09FBF7E227E7060C0200F5F7F0E3000BE2E703E71403EB0011F9F3EEF014EFEFE5F5D009F11BE4E0F5F9FFF40AF2E2E5C40AEFFBE8E5D616E3EA18E1F8FDFAF7EBEAE0DD09F1F4DAF5E1DFE3FEFAE4DED300E4FFE5E7F106D8ECE7EBEAF9EF0B08CCD7D8DC06F706F406E8EAF7E8EDECF0F4EDE21005E2DBEFF9EEFAFEE3EEE2FBF8FA0E1AE9F5E5010BF4FEF3FAF812E1ECF0DDF8F0E603FCEDFAF4F708E7EADBF4DD12EF24F5ECFAEEF4EC0AFCDBE3DD01F3FDE4DDD60DE3E917F6EBFFF004F1DBD3E601E1FBE1F2E2E4F1F6F5DDF1DC04E305E4E5F8FFDBF3E4DEE405EA0414D4E0E0D608F20AF4FEFBE3FCEAE5E8EBEBDBED10FBF4DEF8F6E3EBFFCEE8DFEBEAFA2014EFE4DB0508090EEBF90612E1FDE7CA00F6EE04EDE2F4FDF1FDEAFBD4EBCC0AF829F9E9FFFBFAE802F7E7ECD5F4EDF2F0E6E9F4DAE715F2F806FD01F3E9D3DCEFD8F5DBF1DAD9FDF5F8DEEBDEF7F60BEFEDEEEAD6F1F0D9F8F6E30416E1DAE2E80DF000FD09F3DFECECE6DFF0E9D8F407F3D7E6F9ECE6EFFAD5EAF6F8EBF20A0AF4E7E4F9000B0AEFED0E0BE4F8EEC2F8F8EAFEF2ED01FCE9FDF0FDE1E9CAFFEE1BF4E40FEFF7DD08ECE8E2CAFDF1EFEAE2E5FDD7E60CE7FE02010AF2F2D2DFECE5F4D8F0DBDD0500F6E7F0E3EEEC03EBEADEF2D1EBF9E0F1E8E8010FE3D2E7F104FC0EFBF5F0DCEBE2E9E6F6E5E6F603F6CBE2FAEFDFE6EAE1EAF007ECF30906EEDDE2F6FD0808F4E90D0FE8FBF8D5FAECDC00F5ECFFEFD105F7F1D3DCC60DF30BE3DF02FD0AEE08F2F0F2E0F2E1EDFBDDFFEEEDEF08D9EE00FC05FFF1EAD7FFF3F2E3F5E4DEDDF0F0EFE7E1EAECE7E4EEDFECD6E400DFF3E4D90620DBC7DAE60EF812FAFDEBE9E0ECF1DFFAE9E0E9F702C9E7F5F3FAE5E9DEFDF706FB0AFBFAF5E6E4F1F50912F1E40012EFE4F4DCFADCDAE9EFFBFEF4DD12FBF2D6DDCC18F212E9E0FCFD07FF16E9ECF9D9F8D9F308E505E9F8E6FED6E802F6FD0EF3E8E4F0F6F3E2EAE7E3C2EAFAEDE7E1FDE2E8DFFAE3DFCBE401E6F5E6DF0123CCCAD6D408F50FEC0AF0E4E5E0F4E405F1D8DAE4FBD3F1F6EF02DEE9DFFFF5F3FC06F7FBFAF1E4EBF60A0A07E60C09E6EBECD8DED7EADFEEFD0501EB1701F2DEDFD70BF709F0EAFBF3FDEE05E0F1ECD9FADFEF10E8F4D907CEEFCDD60400EE13F5E9F2EDE1F6F5EFF0E2D9FFFAE8F0E000ECE9E4EBE1CECAE5F1E9F0ECE2FA0ED1DEE2E8FBF313D910F9E1EEDEFFDD02F6E8D8EFEED203F6E5E6E0E9DCF9F5EFF1E7F6080502E2E9FA070707DD0B04D2F2F0D9E8E2ECF5E9FCF4FED90BFAE4E2EFCF0EF200F0DFE8F800E605DDF8E3D9F4D9F101E8F3DD14DCEBD5D80BF6EA03FBEDEE04E8FCFCEFF2E6EBFDF0F3F2E1F3EDE6E3E6DFD5D6DDEAEBEBE9D8F406D6E9E8F3F8F31AE2FCFBF3F5DD06D8FCF9EFEAF5EEC6FCF1EDD9EEE6E3F0F4F3EEE8DD04F7F3E4F4F2070303E618FDE0E9F5D806E8E8ECF2F7D8E6E2F6FCECF0E9CDF5E6FFEBD6F7EBEED9F3EE00BDE0F5F308E4E0BFFC19E8F3E4DA01E4F2E900D9F60CEBEFEFE4F5E7FD07D4ECF2DBEDEEEEF9E1E8E8E9DAD6EDE4E7DAF10FE7EAF608EEFD0CEFE8F1EFF4DF00D5F3FC000001F3C5F4EEF6CEEBEEE7EFDC0800CBE504EAD5ECFD060805FEE82900E9F4F2E22C01EF16F7F4D7DCF0E9FAE5E6F4D406E409E8DFF1F1D8E8F4F1F7C1F4ED0404DFD2DF0F1CF5F40DDD07DFE303FAEBE019E7DEEAD8E6F9EAFDDFE2EDCEE2F7D905E8ECF1F5EDD0DFFAEADBF816F5EDEA03EBF00CF7F0F6F2FBE4F1C5E8FCEFFFF4EED1F7E901D4DEFED6EDDD02FEDDECF2F2B9E9F1F5211500E524FDEDF4E6E138F3FC06EAECCCD8F1F4F5DFE1FFD60EE005F7E8F1F1FACCE7EBF2C0F2E6E413FDC9F40F28E3FD05E8FCBDD3FC00E3ECFAFAE0D4DAEAEFF3F2CADFE5EFE3F6E3E7E5EBE400F7E7DCFEE6E4F525F4EBF106F7F3070FEAF1D906F3E8F1F6E9F7F5D816EAEAF501C5F2F7F3EAD8F2F7E6D4EEECBCE2E802120313F836F2F6FBE8DE120108F7E2F1D3D7E902F5E4EAFBE308EB0AF8E5F302F6D0D6DA0AE8F0E0E40D09F512EE19DDFCE9E9FEE4BBFF0EF0EEE6FCDACAE103DDEEFAF4E0E7E4EA09F0DDF5EAC5EEF8F7EFFAD0DEF21ECAE4E720F2F7EC1AFAEED7FEDAE5F3FBF1DFDEE0FCE1F3F3F2CBFEFB03FCE1F302D2C5E0F8EAEEE20207FC22EC32EDE6DCE5DFECFC02FCEFFDE5E0ECFFF4E3E9E8E4F5F008E3DB0711D7E1F0E10CF9FEECED062E0305E312EAFD01DBF3EBC2FE1103D7DCF3E2E0E0FCDBE7F1EDDBEAD6EEFDF8D9FFF4CCDBEDE9EE03CFC1F606D0DEE91AF8ECE30A05E5F0DEC6EADCE413DEE1E6E4E3F0E2E9ECF101E4FAFBFD13E6D2FAF300F2EA02060F0CD714CFDFD4F1DAE8FC00FBFDFDEEE7E6FAF3ECD9DCE1F9FC0BF1E10006EBF4F5E5F0F0E7FBED0124F5E6F205DBF605E7F5D4D8EFF2FFDBEAF5F5D7E3F7ECE5F2E9EAEFDBF7F6E2E0E5F2E6E6DDF1EAF6E5CAF511DDD1E8EDF6EC03EF07F8E5EAE7EEE7F40AE4E9E7F9E4FDE6EBE9EAF4D8FBFEEFFBFFDD07E0EBE5E3FB10FC12EA20EAF1D4F0CF01E6F9FEE0EBF8E5DEF9E9E2E9EED4EEFD13FBE503FF02FB02EEEED7F2E5ECF024EAF4EF0CD8E90CF7FADEDEF9F100DEEBFCF3DAF2E8E8E8E9F0EBEFE1F6F2DCE1EEF9E4E7E2EDF0F0E3D3E90BDAD3E1F1E8E9FCEEFCF7E3FBEEE0E6EF0BDFF3E5F9E500DFDFE7F507E1F0F9F2F203CA05D8F1E8E0F60AFF1CEB21EDFBCDEFDB0BF106FFE7F2F8D9E6EAEADBE7EFD9ED04FBF8E405F413EB04E4E6B6F1EFFEEF14DACAF6FCE0F8FC05F4F7ECDDE4F9E1F5FDF8CDE6E3E8EAEEE2F3FDDAFBF7DDEBE409F1F5EDF6E9E9E7CAF21AE5CBE3E2E5E10EE6ECFAF6FF02DCE7EA0DF0FDECF0F5E7DEF0DEF516DAF6E8F1F903D706D2E5E6E6F90DFE11E419F504DBE9E51FEB0621DFF6FAE0E9EAF1F0DEEDDFDF0605F9E90BF410EC0BE5DDCAEEF1FAED1DE3CCE2EED9F8F8FFF8F0F6E9EAF7E5D3F5FDC5ECE8E5E5E2F0E709E404FDEBEDE70DE8E5F100EAF2EACFF816E0CFE9E8EED308DFE9FCF6F1EFD5EDE803F2F2E6E4F8DEE1E0DDEE0FD4FAEFEDF5FBE600E2EDE9E1F1FDF10BD712FDFBE8EBE10FE9052ADE0102E5E7ECF0EDDEFAD9CD0B19ECE10601F5F80EF3DFE4FADFE8EF33E5E4D5F8E4F20CF5FCEDF3F5F40BD6D1F9EFDCEFE8DDEAE3F5DF02E204FFF0E3EDF9E6D6F5F1E6F4E2D3F10CDAE4E5FDF5DAE0E4F0EFEFDCDDCCDEE906E7EEEEECEBD7E3D9EFFAFCECE9E7EEF8F7D9FFECF7F2E7F4F5D210DDFDFCF3F3FEE817EAF513EBF5FBE0E5F4E9E6E3F4D8DEFD1CD4DE010AE7FA0FF4E5ED0AD8E8E732EEF9EDF2E3F403EBF8EEE5F6EF10CFF4FFE2EBEEE3DADCDCFAE4FFDE02FBE3DFF1E9EFD3F1F5E0E5D5DAE613C3EDD903F4E3E5F3F6E3E7EBDBD0D3F106D3F0FCFDE8E6E4E20102EFFDEADFED02F7DEF1EAF6EDF2FFFAD216EEDDF9FB01F8E914E3E8EBF3F2FFEAE6E7F1ECE9E1E6DC0202DEE20811CFE305FBE8EC0FD1F2E130E3F9EAF6D9EEF6DCF3E8EBFFE603D4ECF8DFF1F0E6D2F3EB04E710EB05FEE5DDF7E4E8D9EAF6D7F1D9D3E80EC8EDE205F7DAEAF503EFD8E2D7CADDF600D1D1F9F7E3F1ECF203EEEEFFECF8EC03F4E6E2EE0BFEEDFBF9D828EEDADCF9F0E3DF0AF9E1E1E9EE03E8F4F3FBE4EEF1DFE401F5EAEDFC0DB3DFF300DCDBF1EBFCF125DECDF7FDCFF2F1EBF2E2E202DCF4EAEDFCDBE2F4E9E2F5FA02E51DEF1001E0D9DFFAF9E0E1F0DADBE6D9EDF9B9F2E600F0D8EAE907F5DAE8E0CFE5F7F5EEBB05F7FEFAECFFF4E1E8E8EBEAF20001F5E4F007F3F1FCF7DB35EDD1D8EFF6E3D51FFBDCFAD9F0EFDDDEE4E3E4E7ECCDE0060EEAEAE9FBDFF5E5EFDCECE2E8E7022EEED8F7E8ED030FFFF1D7E8EEEBEFE5E602F8CEE7DCF1EBEBEDDE0DEC0500E7E4D905F0E5E2FDE0C8E7EAF0F3DEEFEC03E6E5EA00F6F3E9FBDDD7F9E1EAECE4EE08F2ECE3EAEBE9E6E4ECD5E3F70BEADBECD2ECF0FFF8E11EED0401FDE4F3D720E9EC01E1EFEAD6DBEAE1D7F5F9D4F4060EF0F2EEE8EE0BDDEFE402F1DFEBEC3BE7ECE9E8ECF40BFFEFFEDDEEEFF1EC03FDE9DAE7DCF2E1E205EE11ECFFFEE7E2ECFBE4D8E8FCE1B6D7F1F3F0C6F9E911EBE4EEF80FF3D707E8E5EAD3E7E4E9EAF9EAE7E4DDF2EAD5D7EFD3D407FBD9D3F0D9DFE8F505EA27F6E203EEDEFBDF0CE0F2FDE8F7DEDEE6F9EADBEA04CFF00B02F2FCEEE8E10CCBF0ECEBE8ECF3EA2CECCAE2EBE2F4F6F5F6F7DCF9F0F7F1FFF3DFE4E9E2E7DEFEFDDA0EEA0202E7E3DEFEEBD3E1E9E6B5DFEDF4E3CEFAEF1AE4E0EAEC1FECDB00EAE2E2DDF7F2E0F1EFEAE9E8DAEDF0DACEEFDCE903F6E1D9EEE6DBDFF708F42CF5D2F7E6DAF9D90DE1EE1CDDFEEAEADCF6E6E4E3F2C7E5050BF4F9F3F8DF03CEF0F5EEF0D5E9F328F1F1E5D8E8F100EFFBD9DEEBE9F2E8E3FBEEDCEEE6E3E3FEE5E4EEF6FD00F9E6EBFADDD8ECE3E6D4CFEBF4E0CFF8FE16E3ECDF070FF5E0FCE9DCF1DBEAEAE8E7E4E1F0E4DDEBF9F0D4E6EDE80001DBD8F0D8E3D7FA06FF2EFAE8EE01E0F6D906F4EDEBEAF6FCF4E6D5E9E0ECF3D2D8FD0BFDE4F0ECD9F6E3F2EAE206D5EBEF15EBF7F0D8F2F00DEDEEE7E3EBEDEFE7E1FBF5F1E8D3E8F2F6F4ECE4F202F5EEE8E8E2E9E4E9ECE2DBD8FCF1E1E9F6F10BD7F1F0FEFFF8DFFBDADEFEEEE8E6DCE7E7F0FDE6F6E4ECF9D5EBE7ECF7F8D2DEE9C2F3E5FA06F235F9F8F3FCD5ECD211F8F0DAEDE5F4F8DDD8EBDDFAFCD7E0FF0DF8DCE9EAE6FAE8E4E7EDF9DCF4E601EDEDEDD4F6F3F7E7FAF2E1E2FBF9E4DAFCFDF8EFDFEDEDFFFDE7EEEB09EDEDE4EBDBF2D7E7E8DBC8EBF9F4E5D2FDEAF5E7EC000000F2EEEFCBDDECF3EEE6DCF8F4DE00E9FFE1DDF1CFEFE9F2F2EEE3EDE5C7ECEB0705C624FEE9FAFFDCF7E220F4ECDFE6E4F5F3D9E2E5DFEBEBE2E3FCFFECDDF1FDF1E8ECDAF1F4FAE2F3E500EAF2F0CEF3F9E0DBF4EBDFDDFAF3E8E803F205EEE3E2E103ECE5EBEAFEECE1E3E6DDECD4E3F4DCC3EBE7F6FBCAF1EBF8F4F704F205E2E9F2D7E8F3EFE9DEDAF202D3FFF5F6F5F0FAE9FAF2E3FDEAE4F5DDD4EDF110FBC41E02DFFE0BECE9E50BFBE6D0EEF3FDF9E7E2E4D4E8F6E6E802F0F0E4E6F4FFE8EFE9DEEAF4E6E5F507E6EAF1D6F8FBDAEAECEDDFDCF2F9EDDF08FFFDE6E1E6EDF4DCEBF7EE01DFE3DBEAD6FDD5E3F4DECFECE7F2F0E4F7EDEAF4F30DE9F7DEEAEAE0E6F5FAD9E6DBF006E1EAF0FBFEECFAE3F5E2E6EEEDEBFCE4C7ECED0EF5D21FEBEDF615E8EAE80DF9EECBF0FCE6F6EADEEFDAE6F7E8F400EFF4DAEEF4F1DFF0E5DCEBE6E5E9E303E3E2EED6FE02D7ECF3DBE3DFFC00E0DD00F5FFE4D8EEE5F9DCE9FDEE08DCDED9EAD8FDDCF1F7DBD9F9EA01EDEEFCE6D9E4F011E802E8DDECE8ED0403E8EED8E4FDE8D3F302FBE9EFD4F9EEE0FAFDF6F4DEBCEAE604F9C015FBF8EF02FAE3DB06F4F6CFDCF3EFF8E1D9E8DCE7F0E4F6FCECECDEE9F0F7DDE9E8E5EFEEDFEED006D9F3EAC5F7FCDDDFFDE4E5DAFDF2DADBFAFA0BEFD8F2F705E2E90AEBFCEAE0DEEED7F5DCF1FBDDE0F7E609E3E7F7E7E7E7F113F008EAE4EDE9ED02EDE8E8DBE1F3D4DFECFDF3DF05D9FEF5E2F7F2EEFBE0BCF3E70DF9BD0CF2FAFA00E2E1E00AF2FDD6E1FDEFF9E3D2E6DDEC00E9F6F7F3F0DFE0EFF9E7F0F4DFE3EADDEDCE07CCE4E2C5F4F9E0E1FFEEE4DFF5EDE6DBF6FA0CFBD4EEF7FAF5E617F5FBE5E4D9F6E7F4D7F5F2D7DEFAF409E1DBF6E7E9E8ED11E8FCEAEDEEE6E8F5F1E9F3E0E6F1DDE2DFEBF4DF0BD3F8F1E7F5E7F404E7C2E6E90903B603E8F4FCFBEEE1E015E60DEADC03F5F4E4D2E7E4F301E9F4FCF1EEDFE1EBF8E6EDE7DCD1DCDCEEDDFBC9CEE7CDEEFFDDECF7EFE2D4EEEBECDDF6F80CFCD8E6F7F5F2E209FFFDE3E4DEF4F2F9D9F6F3CCE8F8FB06F1E2EFEEE7DFF305EBEBE2E1F0EADEF4FCE7F9E5EFF3E7EDD6E7F3E5FCD8F1ECEFF9E5F9FEEBC5D9E3090AB40AEBF0FEF8FDDDDF17E412F9DBFA00FAD9D0E6E0F600E5F6F9F6EEE2D3EF02EAF4E3E0DFDDE0E8E302CDD9E1C4E1FEE6EBF7E6EDCFEAEEE4D4F7FB0FF4DFE5F8F9F9ED090402E2E6E5F6E7FCDAF2FAD6EBF3F900F2E9ECF3E4DCDE0BF1DEECE7ECE6DBF7FADFF4E7EDEFE7E9D7EEEFDEEFDFF0F4DFF3EBF4F6F0D0DDE1FA11B004E2F7FEF4F3DFDE15DF08E7E3F6FFFBDDD0E7DBF01AE2F005FCFEDEC5E5F9EDF9FBEEF2EEDFE7DAFEC5E8D2C7EEFDF4EEF9FDFBDCF2E9E1D4F5E50FF5D7DFFF0303E908FBF7EBE0E5F9CC03E5E600DAF3E7F003ECE8F2EEF4E0DDFFF6EEDCE7DCE5D500F0E4EDD5F1E7DFE2D3F0EBDBF1EAEDF8EBF3E9E8ECE1E1EEE1F901B313DCECEEE1CDEAE519E009EAEDF6F5EFDCECEAE7F100E7F40A00EDDDCAE2FCE2EB00F3EDEDD6F3D3F8CEE2DAC8EDFAE0F2F5FDEBE6E8E4EAE4F0DE10F3EEE9F4FEEBD8FEEBF5F1E8E3EAEEF8D8EBF6EFD8E5FE03E8EAEAF108FAE6FE00F1D4E0E2E6E003F1EAE7EDEFD5DFE2D0EBF1D5F5F0F5E7ECF8E7E7F9E1BFF0E611E6D016E3DEEEDAE0E4EE0EF607F5EBF5FEE5DCFEEAEAEBF5E0F90706DDE3CDDFE7D5E2F5FFFEFFE3FDD1F3D700D7C5EFF3EAE8EAF4E7F6DCEFF3F0F3D91FF6EEF2EEF9D8DCF4E2FEF3DDDADDE6E5DCF5F1F6CED7F70DE5E4E6F50D06E3FAF503C9D4F0EDEE08E4F5D4F2F0CAEAF1D9EAF5DEF6FCF6DFE409DDE5F0D6C200EC21CFD51CE9CEFAD6FDDCF0FE0AF8F2EAF1FCE5D808ECF3E7DBEFFF0B01D9DCD9EEECDEDFF4FAFF01D7FBC8FAE3F0D9CCE5F1D0EAF4EDE0F5DCECF7E9F0DC08F6F7EEECF5CED7F8DEFDF3EAD9E2F8EECEECF4FFBFDBEC01E4E9E8F60F07ED030005CDD5E7ECEA0CF9FAD4F1EACFDDE6D3EF02E0EDF1FAE5F8FDECECF7D4BCEEED24D4DA18EDDAE7DFF9DCEDF916F0F4E9F1FDEDD6F8EDF6E8E3FBF902FBDED4E7EBEDDFE7EDF4F206DCF4CDFDECE3DDCBE5FDD4E9F2F2E0E8DDFBEBDDF9F003E9F5EEE9F1CEE5F5F10AEBECD8DFFAEBD4E9F4F2D1E1E6FCE8FEE201F9EEEA0F03E6DDD1DEE9F5080DF7D6FCE6D1EBDECFF8FDDAE6D5FDE8FFF6FEEDFBDCC0E4E50FE7DF11E6F1E5E5EFD6DCF9F6F3E1E5EF05F7DFE6F5F1E80BFEF301FAEFDBE6D9E0E1E0F1E8D5F2DCF5D5E8D5DAE3D0F605DBEAEAFBE3E8DDF000E5F3DF17F0EAE9F9F4E4E2F708FAEEF1DBD1F6EAD8EDF5D3EEE6F00CEFEFE0FEEBE0EB06F2DFDBCCDBE8060516DEECE3F6D8EEE4CFF6F1CBE9D8EEE3FAF3F9F7F3E1D0E0DFFEF7E70BEEEB03E203D2E10CD404E5D7F007EAD1E4EDE1F716F4F701FAF5E0D3CFEBF0E4FCE5D3F3C9F6D2EBBADEDEE0F4FAE7ECE8FDE9EEE1EA01EBF1DC1B07E8F2FEE4F5D9F90AF1E5EFDBE3FFEDD9EBF5C5ECE1F50EEDE7E7FDFFD5EB09F2DFCDC9E0ED01FE07DCEDD105DBF0E6C5DCFDD1E1E7E6E6F7E9F6FAF5E4E4E0E304FCF70DECDD02D803D9E320CE09EDDAFAFBEDD4F0E3E7E3FCF0EF0701FCE7E5BCEFE8E306EADCECC6F2E8F2C8E9D0D6F3F8F0EEEC00EDF5E3EC01E7F9E00E04DFF106EEEDDCDE0FEAEDEBDACF01E8E0EEEACDECD3F712E6E6DD0FFECEFF09F3F2D6CBE2EF1906F6D6ECD3EDD5F3EACEC9F9CEDCDAE5E3FCF7F1E7F3DDDDDCDF06FD011AEFED0AD3F4EBEE0FD702F8EBF404EFDDEEDEF0DBF9F5EE11F6FEE2F7C9F4DDE103E2DCD3D5F5F3EFCDEDD7DAF501E7EFEAE9F1F1EAF004E7FEDAFBFDD4E107F8E3DCD510E4F1E7DACDEBE9E9F5F1CBECDCE810EAE7D80BEFC206FFF302D1D5E2E11A08FADBF6C9E6E3E7E7DCC6F6E0D6E2E5EDF1FEE7E6F2D3E4DBDC0BFEEC1AFAF114E0FCEBF708EAFF08EBF505DBCAF8D7F9E0E1F60019F6F1DFE4E0FAF2CCFBDBE3D5BB04ECDECBE5DDE0F1F8D2E801D2E4EEEFF1FBE0F9DEDF15E3E40BFFE4D0DFFCDB0BDFEAE102E1EDF6F3CCE4DEDC08DECFDAFEF9B512F40B08D5E5E9DA12F5FCEAF3CDEFFAC6FBD9C2FDEEE2DAE8FDF5F7F3F3E0CDF3CEE00F0FEB19FE0314F5E5E1FF29F30017ECF403DED8F1D8E4DCF8F0F911F0FCE2E3D204F7D70AD6E9E1C4F9E2D6CCDDD7E5EDF6E9F3F1D2EE05F4E8EFE0F9D3DB10D2F0190AEBCFE5FFDB02D5E3E7EFEAF5EDFED5F3E3E315E0D5DDFB03AE09FF0912D7E2E0D91005F2EFF4C5DE05D4F1D4C6FFE5DDD4EDFCF3EEF8E7E0C2F4E0E40701EB15010705DECFEBF920EA0821EEF6F9E4DBE9E0DAE4FDF0E805E9FFE1E9C4F9F2D819D9EBEAC3F1E2CFCAD7DBEFE0F5F4FAE5E9F00DF0E5EBDEF5CFE203D2FC1C07F1CDE6FDDCFED9D7E4EAF5F2E6FFCF03E0F219DCE1DBF903AE07090D08DCDBD7E11B10E7E0F6C2DBFEE8E1D4D5FCCFDFCFF0EBEFEFEEDFD6D8E7ECE300EFFB11F90A02C7D6F1ED20D6081FE7F0EBE1D1EBE1EDE4E7F7DA12E7FAC9E4D302E8E004DDE3DFBDECE8CFCAD7D8F2D3F1DAF7E5EDEEF8E4E5EBD2F9CED4FADDF20905EFC8E0EDECF7D9DFDBEEFBE9E6F9D2F2DFE50EE3EAD4F3F2B502FF03F3D4D9CCD80209EED7EFBFE1EFE3E4CDD9FED7D4DDF6E9ECF7DDEAD3DCDFE6E203EFEC18F005FFCCDDEAEC20E70519E6E9EDE0BCEBDBEAE8DCF1DD16E6F2B5D4E713EFE5F4DDEDD9BCE7E2CBB7EED7DBBEECD0E5E1E4DADAE8DAE3C4FFCCBDEFE4EBF90FEDC3D7DEE2F4C6DFD2D50CDFD5FDCED9CFC4FEE5E2C3EFF0B1000BF5EAC2EDB9C2EEF5D6BDE2C2DAE6D1E2C3D00CCDCCE3F8EADFEED7EBDCD6D9E4D30EFEE220F105FFDEBEF2F628F3F8F6F5EAE9F4F5EDE9D3F9C8E307060602C1E2F7EEE9DC0505FADAF4EBE0F2F1FFF1E9D9F5F1F7D6E3F0D8E90DF909DBBFE0BF1AF7ED050CD9C8F705EF00DBC5C0DAF5D7FEE1E3F1D3E9D401D8FDE7D7D8F9AFF4D9D8D40FDBF7EDBA0A1EFBE7D6F2EAD6FBF606D6F2F1B31EFFEBD6EB1210ECF50AFAD9CFDFF600F1FBE700EA0BC7ECE4D1EDF9F4CCF2EBF0EF021209FFE9EFE4FC02D70C1FFAF1F4FCE9FA1E0204241D0AE9DFECEA15EAE607F214D5FAE7C02528FCFAFECDEFF7EBEEECE0DCD5000FE9F4F0DB04FAD9D9DFC8F4D4FEE1DCEAF5EC01DC28F61FD6DE281504E7D803EED910E7F3FA0DC8190402EBE3E53CFAF6050FE808C7E6FAFAEBF9E9F91007C8CFD7D21D09F4C5ED1EFBF2FD2B11ED02F5E8110E02FB13D8F5FF11D6193C05ED2C2308DEDEF7F90707F4F9DB0ED0E8F6E42C39DF01E5D6E91FF305F7DB0CF423220E1AD0E0FFF6DECECB9E0BDE12C7DAE600F108CC1FDE30E8D61D0D1FD3E1FA13F419FDE7FFFAB912C6E41D0610120917FC26D910C706020DE911E2E30907B905E8D60FF10DBCE71AE808F627102A21ECE3FD02FEFBFFE1061302D9102C0DE6101806EBD704040A180AFFDB04EBE1E9E93820FCE4EEDFE739E92200D4230B142A0F1DDFF0EB08E6E2C7A224F30AD9E6F609F6FFE121E80F00E4051313F0E6FF080C122401FEFCC8FDD5DE170915FA1A170217E80CD019F004050FF9EDF706C606F9D7ECEA03C2E71BCC1C0218F43B0EEDEBF30B0300F8FA1519FDFB08240FEEF72507F9DA100113202EF9E003EFDBD9E4421709D9F4DAF0040C05F7D5090E04122BF8EA01E31EEFE7EFDD19FEF9F3EEF402D4EDDB1BF1F9FFEF170B1B0DDA16FC11052606EFFBEF090DE2FB0A13FE1B09FC09FE0DEEFEEAE30CF2F2F6DE02E6F7E5DCE5FC06CBF814CC0A000EFD0C0BF9F7FD1FF81EEEFD060A081203270202FA26FEEFEA060C1D1B2AE8F005D9F3E6DF3F2B15DDF3E7F0DA21E0EFE5D9F2170241DBF01CE713EBE3EBFE0C03F0F6F8F90AD1E6CF17ED0503F92A142320DB13FB1E02FBF1ECF515061BEEE90210031814E4070D1300FAF3F5FDE0EEFBD617F2F1DADEEFFA06E00916EAF2EDFF1EEF140AE20A22FB0CF0F4EEF904F7F60FF217052FF8E2E2F700092A0FEDF7FCCD02F9EA290D11F4DD18F3FFE7DAEAEAE2F01A051ADFFC14FAF0FBEEE1D916DDFEDDECF819E30EC91AF60A07EFF0151102F101FE260D04FA07F6F6ED16FA1907F90C1623D61607180B01DD1CE604F6DFE912DFF7DAD6DAF3FBD90D09D9E5E50716FA260DD90C2604F8ECF4F8DA010BFB13FA140925FCF3E200FCF62B17FCE508C3FCF9F13B0901FBD13403FFCAD5EF07E9FA11031FF1F60E15F010ECE7E938E31AE1F40428DA1CC210F90611F6D6F60C05F7FA0C0EEC12130F00FBEC08032A0CF203101EDA110013F5E8E611EB1EEDDCF003ECFAE0C7D5ECF1D7FC02D6EFFC0E14FA2603F0F31D01FBE3F4F5DBF411FA05080AFF13FBF8E41004E7113A07F609B6F9FEE33908FEF4DB14F200C9D7EF0CF0FF12031004F50F19F105E0D9F72FEC12D3F1F035D021D5FFF40E1807D80006FF00FD0106E822100BFBF5F606FA1506F3F70D14DB0FFE09F6F8FB06F01BF3E8D8FCFC11D1DAF5E5EDF7EBFFE2FB1B090AF3260B01EFF10901FAE7F9E3F605EAFA07FAFBFDFC00F91607010C4A0F0FF1B907F4F011F4FDF7E6F5F113EAECF102000A06FCFA1003F504F1FBECDBF712F802D900FF1ADB18FAFDEA260406F30B02FD07010B08FE2FFEECEEE703EEE9F8EEDB040EFFE90A03F7F30D03F4E8F2FFE6E3FCF915DEEAF0F5F7FAFD02D90615F80BEC1815F802F614F915ECF9E80107E40A0600FDFDF7F50807090D0F310DF9F2BD01E7FA11F0FBEEF10300FE0BEBFCFC0406FEF6FDFCFEEA05FA06F407030AEF06F6FD0302D80FFC03FC19FEF409E30EF6FEFC02FFF813F3EFF3E704FDEDDFF1E917FFF0EB03FAF6E60901EBECE7EFDFFA00ED04E5D8E4F207E70210EDFDFCEA07FD211600050DFFF63104F3FB0AFEF306FF030213F0E904FB000E1B0EF6EEFACCE3F4F4FCFA02E6FCFB09F203E0F9180FED0BFBF7E1FCF61204170409FC03DEF6F3FDFC0FDFFDEF03080505ED12E60AFE0101E41402FCE1FE09EFFE16FAE808EF22FFE9D1EBFCFEEC0CF70AEDF1EBE50706E9F0E1E5D7E407F10007EF07F3EB0BF82D06FDF60AF4FE310DF7F5FAE80104F90CFD11E2EDFCF9F7030C08F2ECFAD3F0F2ED05F7FBE901EF0CF9F9E0EE1E0EDC02F7F9DDFCFE1A0809FB02FA0AEFF7FA02EE11F3ECF31619F7FEF4FF02F30F04FAD6140002D9010AF6011903FE01EB1900E3B8FCFEF8EB0FFC1EEC0306EAFB0BFAE7E8DFDCE803F9FDF5ED1202EE25E52105F3F20AF50A120405F5F8DCFA01FA01FE04E7E2F3FBEB08F1FE01F4F2D712EFFE21EDF9EE03F60205FDEAED0705DBFDF9F7EEFA000C13EEF407F705FE040E01F50EFDF9102910F7F2FEF400E803FEF1E20AF608E9F5FFF6F40EFF00F4D811FAF8BD2600F0F111F401F2FE17F6F20F06EEE5DFEBF2F7F1E5FB0AFB17F72DE21B10F00609EBFAF50C0401FDDBF2F7FBF30301F3E303F9EF0507EF01F8DADB03EF0B14F013E706FF020104E4FB0809DDFFF9EBEBF3EEF10EF2F7140F02FBFD120BF30CF2FBF22800E8F3EE01FDF7F103F9E90CF61203F9F7E2EC05E0F302D806F805CB1F01F2F216DDF5FAF91BFFF804F7F3EAEBF0F7EAECED010FE30AFF22F01D12F9FE05F3F603120708F0E2F6FDFBF6FA08F7ECFEF902F427FE03FCE9D6EDFD02F7F722ED0A00F7F902E1051804E605FADEE4FEEFFCFE04F5F81204F3F8070FE40BEFFFCA11FEEA00EAFE05F8F214FFD61EF7140814F8D7F3F6E8F102E306010BD00405FAE912E50EF3F209F903FCF5F9E4F3E1F3EDEDFBE8E8EE02F91EE70D07F9EBFE100101F40400DBF3F7FF0106EE18F8E4E2FAFAED0F1504050AED06F8EC17F50DEEF804ECF9EAF1F90CF8EBF9E6D9E903F30602F5EFE4F916FEF00C09D104E3FFDA1400F7F7F0ED13EBFA08FCCF1900080B0EF3F7FEEF08FDEFE60C1B10D1070EF9EA06F010E8E90AF2F20500F6E3EED4F4F0E8EDDFDCFC12EF3AEA140BFCF90606FF10E7F9F4E80BF9F7F7F3F01B00D8CFF4EFECFA160603191707E7EA2DFD01E8EE0AF306DAF6F30404ECF4E6E100F9EDF70AF2F2F5071516FE16FBDF09EEF7F21BF00DEDEEF3EEE8E5F6F2D30FF8FE0309F7F9E6E1FE1F07D7102F0EDF0C0FDFF809EFF3DFDE11FBDEFE0CF3F7FACDEAE9EFE6EBE3F411D86E00171CFC180108F52EFDF2F70E0EF8F8DADDE30BF7D0DE0BF3EDFE0C04FC1A27F8E4EC22F424F0F90AFD04DDE20109FEE7F9F0E308EEEFF4FCF5EF0B110223FF0DEDDE14F7DCE113F30EF1EFF3D6DECDE9E5DD11D2110313F9E8E0CCCA193DE3152A09E6F906D4FE14E6EFDBFD07F2F4F517FC0601D7EDE0ECEBF5E4F50ED073FA0F12FF26F117E41AF6F003190602FBD2EADB02EBDFFB0800EB0014F8F7072DFBEFE91EF638F5F0FB0603DAD4040AEED8F8F7E6FDEBF5FAFA01F90207F722F0F8F5DC1203D8EC09FCF7F5EEFEDFDFD7E5FAF010DB1C0119FEDCFCCAB90E3CF907181DE3EEFDE2FF0AE401EA0704E7FBFC11F70901DDF4E8F2E200FFFD0CE039EE1502FD0CFE2CDAFDEFFCF31801F3E9FEFFEF04E3F704ED04EB02FBF6F60022EBFDF10F1323EFD5F010F2DDD9F1FBFCE206F6E7F0F5DEF6060B06F9F4EFECDBF50AED07F9EAFE04EFE901E018F3F8ECF50B031E0220EFF3F5E500F9DCFC0DF80A0C10DDEFFDE80203D8F1EEF813F5DE0BF5E70AFCE8EBF7F4E60813EFFEF21AF81C0BF9090529EDEDF506E8140AF2E61001FD00E9F8EFE206EB0EF602F4FC18DDFC010A1624EBCCEF15F4E2E4E9F2FCEB14F6DCEA05DBFF040C04E8F8EFD7DBFA0102FCEDF300F9E6F1FDD527FE02FB0105111B0519F0EEF1D7F0FDECF900F41411FBECEAF9E4F90CD9EBE3EA0CFDDDFFECE908FFF4D1F9F6F50C0EE9E50908F81911F3F8FB0700E7FBE9D7FB0A0BFFF5F50401FAE4DDE60ADC0D0804E1F50EEBE91111FB27F1D6F404F8EDF8EDF4F9E824FCD2DC09E90BFE04F8E217FFDCE0F4E908F1DB03EE00E5F3E7CD3A06F7F1F3FB1114050600FDFFCFEFF6F108F902111DE9F8F1E0E6E30EECF8D4D8070000F200F6000BF2CBF7ECF314F9EAEF0EFEE70E0FFBEB01FD05F10DDCE4F20C0A0EF5F0060400E3E0EDF7E41313FBD4FAFFEFE8171BF210F6E7F6F6F2E708F4F6FEEA24F8E0DD00ED110206F5F91A02D6E4F7E208FDD2FEE6FEEDFEE8DA2B09F6E5E9FFFE1105EAFAFA03D7FE0B0600F604161FE7EEFBE1E2E216ECF4D4EC0702FFFD03F3E80DECE0F6EEEA05EEF1FCF9F2D70408EFE6FF09EBFE17E603ED0DF50208E0FC0606E7F9F0E4EF0C10DFD4F7F1E3DE0729E4FBE7FC02F6EEE8EC04F603E912EBF4F3F6F40E05FB01051A02D7E6F5F1EC01E8E6E40103FF01F20C18F4DFE6FEFD0808D9EDF2F9E90F1810F4F00D141BEED3F2E7F4FA08F3F2EEF706F8F606F1F0D1FEF2E9FBF0ECFFFBEF00EEFAD9FFF7F1E9040FEAF908F00FF3FAF0F909DFFA040CEFF8E3EA000908D3E4E4EEE0E1F51CDBF2E90603F9F1E4E6F6FD11EC0CF2F702FA0A1400FC09EDFEECE1EDEEFDE2FA0CF7F0FB08F506FDF824E4D4F9FC04010EDFEDE2FAEB11FB20ECEFEE0509F2C9F9ECF6F8ED01FFF1EEFEF1F4FCF2E5DEF6E6DE16F1F5F610DF10E309D2F8F9FAED091CFEF8EBECF1EB16F60713DEEFEE06E6EBEA0F0C0E12F313EBEC07DDF00BE701FFF6EFF2E8D714F0DC151C0E3000EEF00814170308D1EAEAE6F5EC00BCEE07010AFAFDE8FFD3EC05E0DDE4F0F5FB13EC05E2EDFAFFEFFCDEEFEEE7EEEADAFAF2EFE7D3FB01FCEB050105F6EDD5EAF8EEDC27F1F3EE08E419E903D6EFF602EB0129001BF0FDDFE416F91314E6F6E80B00E6F92017071AF506F8ED08D6FB10DE0AF8E1F800D6E8240CD7FE18FB48FEDDEDED1425010CE2EAFDF600EFF9C6000DF90706FCE1FBC8E2EBDAF2E9F7ECEEFFDFF3F4F2ECE7DA0DE4F1E4FDECEADA03ECE6F7D2F60A01E20F10FCF5E3E3E8F104E31BE5E4EF09F426FA00E9F7F112F80820FB180C01F2FCF4F90B07F007021004DFF8160CFF09E0E200E8E2D90319D407F2D6FD10DCF7191AECEFEE0024E7DDE2E3171AF912F6F5F7F507F6ECE01301FAFB0E02DFE8DD00E7D3FD0100E0F5F2BDD3030AD6E3CF2A0305E821F8F6C90BECEF09EFDF22EAD50A0AEFFCD4EDD8E105E1F6E4E0EE060B23010FF5F9FB19F31005F9F604E5040FE8F300EDEE0D172DE7DCF704FCF903EFEF03E0F1E90525E005FBDEF403E9F5030BEE01E708F7D8E5E5F91509F10DFBFEF100FBFAEFE815E9F7F91002E1DDEF07F9DAFFFEEEE405FCE0E00909DCEEF213FC01F60D0C09C115F5000A05DE1BD9E5FBFAF0FEDEECD2E00AD7E6D3EDFB1A000AF00BF8F4F30EF809F8F50BF8DC0604DDE4F2EAEA07EB5CD9EAFBF712030E0F1CFAE802EA10101F14EAFBE8F4E5F3FC1DEA0BEE02E6CFECF50B0DF5FD06EA00FB0EF7F704E112EAF6F81AF8DFE4F4F9F4DE12F7F2DF0FED03EDFCF9CEEA0CECDFFA02F71501C115F80CFE0BCF01D9EAEDF60B06E7F2D1E713CDEED9FA0912F5F7E5000600F015030307F21BEDF1FE10EBEEF2EFF3F5E973E0E108F92307140F2107E3E8E6120F4406DF0EE7FEDEF8EA19FC12F100EACCF2F6050AEE0F04DEEA010DF6EF00E0FFF2FDFC11FCEAECEFECE9DB1E01FBEB09E70BEEE4FEC7EF16ECD70204EC0DFDC10EFC04EF06CEE9DCFBEFF80B04E9ECD4F10DC8FC0112FEEDFEF6E802061C0110090810F804D907FF12FFF6FBFE01E60C59E0CD04030D03F407FB10D3E1EB0E2619E9EC1AE4F7D309C8FF030FFD04FDC7F1E5FA0EE60FF9E9D5F8F8FCE5FCECF9F70908090709E7EBE8EDE41608F6F0FCF9F8F7D802DBF8FFF0F4FBE7F01103C80706F3EF03EDDDDBFBF8F2F8F8EEE5E0F3FACAF60F1BE7FBF900EF0A02300709050A0100ECF2F80E0302FE0B01FAEE1233DAD3FBFEF6FFD2F0D900DBE2F51435E7FCFA1EF1EDD011C6F8FE02FA0508C3E4E50D11DA00F1FDD8ECE7FAE1EDF506FCFA070E0E14F1FDF201E50603EFEAF80BEC00E904EBFFE7E1F4F6DCF62801CB04FAF6F00DFFECF6E601E7FEECF5EBEAEFF9DAE6FB0FE600F712EE10FA20FA07FA1C06F7F3F7E81CF6160901F6EFF8101ADCDDFCF8F403CFE5D7ECF6DFE91131E606F00D00F0D3FFDAF9FBFCE2FDFCC4F4F51207DFFAEEF7F6F0EC04E5F4F608FDF4F50F03060201F702DCEFF7F0F2F105F506F3FBD9FEE5E3F209D1EC23FFD002EDFDF5F8F9FAFFE30AE5F4F8FA11ECEAFBF3DFEEFFEFEE0C23EA14EA0FF408F1260DF303E9E513F5290FFEEEECF50C0CD6D801F6040FD1E0DAE1F7EBDD021EEEFFE6FC0EF0E9EEF1F5EF06E4F4EACF0BF6FF04F9F8EEFEFEE5EC10EBFFFD04FFFBEF0FF8FFFFF8E1EBD9EBE5FB02E905F809EBEFD6F6F2FDF50ED6EF0907D003F2F1F2E3FCFDF8EE03F2E303091EF1EBF1EBE7F0F3EBE8001DE713E108F9FBF61D0FF908E7E612F026130EF4EBEE0500D7D601F5040DD7E4E1D9F6E6E70120F3FEE0F603EAF5E7EFF7E70AE3F5E7D500EAF804FAFBE4FD11E4ED03EDFFF4FEFEF5F609F001FEF5DDEDD9F2E4F812E806FAF9F3EDDBFAF80AF914E4F5FE09D4F7F1EDF3E6F9F8F3FA06F0E8081713EFF5D9D4EAF2DFE2D4E804E506E7FEFDE9F80A121104D6EC06EE1D0C1716E8F3EF00D1D0FF02EA04E7EB04D0F9E5FDFE2D010CDEED01E6F7DCFC01EF0AE904F1D8EAE0FE09F1E8E3F435DFF3EBF5F3E7F7FDEE020EEAFCF3F4E701E903EDEA23EF06F9EB03F9EAFD010AF114FBE8FF0FE2FCF4FEFFF100EBF70600F1FC0E140AE507D3CFE8F0D4EADCE7FEE4FCEE0204EFF6FE1D09F4DAE907E90E04151CEEF5EC01CFDCF803E003F2E203C7F8EB08F220030BDAE903E8F3DCFF010310E706F0D8E4E20508E9E1F2FC2EDAE5DFF7F4E7FFF9F7050CF0FBF4EFE509E70AF1EB29F51402E3F9FFEF01020BE209F8E70208DCFCF9070AF0FDEBF805FAF0FA0E0001EB08DFD0F2F5DBF3E3F502EB07E20106FCF6031AF3EFF2E916EB02020BF8F9F5FBFEE0F20003ED05EAECEEC9EEF208FC0BFCFCD8F5F5E5F1F4F4EDFA10DBF8F2D8F6DEFFFEE5F5F10319E3E9ECF008ECFCFDF80607F402FEECE907DCFAF5F121FA14FCEDF5F3E504F114EEFBF2020202DAE7F7FAFDECF8ECE50508F8FB0000FAF2EEDDD7F3E7EFF3F2E9FEF508EBFFFF0BEE0110E3FEFFF80CE4FE00F3F20BFD03F2ECF4FDFBFC03E7F6F8DAEFEF03FE02FE02E7EFFDE4FB11F3F3F401DEEFF3DA09DC03EAE3F2F1040DE9F0F3EE0FEF00FCE8FEFAF8FDFBE5FB10DCE703E70AFB07F6FBF5EFEEF8E30CFAF6FD0E05FFE2E8F5EFFEF5F3E1ECFA0AFA0AFAF9E7F8E7D3E3E1A90BE1E1F8E2020500FDE915EBEBF5DC3E04F2E8D1090FEEEB440418E5E301E808020DF7F60CE7F9FAF2E7FA0F17FDE00403F146FAFFF6F4E8EDF4E52AE818D6ECEB03F71AE5EE0AF311F004FCD2E8ED00E6F2D30E11F6E804DD04010DEE09EFFD04FFE30C08EF0C1C0714DEFFE3D607FD06AEF2FC110916FE04CCDDF4D4E4D9AF0BDCF0FEEA040003FBEB09F8E4FADE3AFFF4ECDB1005EDE735F710E8E5F8E9FEF20312F803EEF4F5EAEC080B110FE0F9FCF52EFBF901ECE8E7F5E52AEB0CDFF1FA0BE815E4F30BF709F400F6E0F1F0F8DFE0DF0410EBED00DF02F60CF00CED000202E4F7030BFA0F040DE801ECDCFAFAF9B8F4FF180912F809E0E3F1E4FEDFE11FEEFEFD0CEAF9F6000DE9F0FC00E523F6EEFEF414FAF2E2E7E1F1FCEDE9F4E7D6F41CEDE2F4E1DFEA0014191505EEEAED0DF4FCF50EF2FBE9F5EF04ED06FEF11708EC08E0E1EEF3F9FCF3FCF002F7E3E2DCF8FE23D8F5EA01ECE50AF10AE7EFFEFAFCE8F613DBE809E5E8EC07EFF8F0EEF4E3F306EDFDF20614F6E7F2FCE6EC2FF5F6F110DD0AF3FC1EE3EF0B01E819FBDE05E712FBECF5D6E5EA00E5E5E9E4DEF301E5E1ECE6E1E5000D1A18F2ECF5ED09FCFEFA07EA03EFF8DD05EE0311EA190005F4E0D8E0ED0C0201F9EBFFF3EBE6EEF90C24DFFEE703E5E4FFEA07E6EC00FEFDECDFF6D7EC0DE6E3EA00EB0BF8FBF2D7F3F0E3FDF2F714F1EAEBEFE1FA18EDF0F010DD11F3011AD9EDFE00FB1A02F2F6DB22FEE211D2ECE2FEE6D0EEEEE6E404EAF0FEF2DFD90B15190CF7E00CF3FCF90D02F7E3FCE606DD0DEFF210F01EF7F9F6E0E8F2EF1113EDF3EE0406E3F4F7F20410F7FB01EDEFDCFBE119E5EDEFEAFDEBCDF6D8EEFDF7FFFDEFDBFFFF0CE3E0F2FBEFF5ECFF0BF1E5EDE6DF0000D8F4EDFCE900F10208D0D6EDFBF8140004FCDA210DEE02D1FFE4FFF7C7E7E9F2E10AF3F80EFADFDB132714110CE6FFED03E909FEEFDEE3F204E804ECFE16F920EBE00AE7F203F3010BE9F7E7FB08D906F5E8FA15EBF916ECF5E4F5F013E6EBF9E4EC02F20ACDE9FCFBFC08E8E1FBEB02EAE6EC0DDEF2EA0EF2EBDAF1E5E002F7DCF4F4F2ECFDF0FBEED7C9EAFEF20DFCFA05D21215F7DFD304ED0BFDCCE9F1FBE420EEFB0DF0D4D60730FB0006EE06EEF8E4FF1608EDE5FAFFE9FCE90411FB15EEDA1AD0F000F8F7EEE5F1EDF406E9FBDDF50028DEE90EDBF1F70DF314FBF8FE08E602FE1BD5E2F0FDEC0AE9F1FAECEFF6F7F2FFD0F5F10BF3DFDB03E6E0FAEDEAF801F6E9FFF8FFF8D0BFECF7E8FF02FA05D90C14F5E1CFFEE80D08D6EDF113F118E8F8F2E4DBCD0327E90900F40BFBF9E50224FFF2F702F5F8FDECF316F80FF2E917C3E1F6F7F5E8E5FAE4F604EFFED8F7F62AD6D509DDF3FD0CE728F6F4F60FEC05F413E5EDECF7E405EDEBF400ECF507FCEDD9F8F60FE9DADD27E7ECF0DFF203FFE8E6FDF91605CBD5EEF9E2FBECFE02E9FB0CEC05D8F7D2F600D1EDF31DF311EDE8E5DEE1D30D16EF0804F310FB09E5F913FBDF0003F201F5F2EF210718F9EB0DBDD7F1F6F1E5E3FEE00E03EC02D8F9DD20CDBA0DF2FDF416E629F7F3FF0FF006E219F6F6DCF3DAFAFCF20200E8F20FF7E4EEF0FCFBDEDAE21EF0EFE4DFFA11FBECE503F915FAD0DDE8EBE209F5FF07F0FB0BF8FEE0F9D4F103CEF4F808FA12F3EFEBDFD9D50E06012104F705F900F6F72006DAFDEEF4FDE5EAEE1D0324EEF516C4E101F1E6EAEAF7DA0F02EC05E0ECCD05D9CE0DE6F9F406F42601ECFE10F6F1E531EF07E1F7DCEFFFE8FD01E1E90EF3F1EAEAFBFFF0ECE200F904E3EAF304F801DF09F508EAE5D8E5EEEB05F7FA09EE020A01D4E8FFDDFAF0C7F1F3F4F3FEF00BF5E8E1D80F04012302F5F8070100F21EFCE207E3FDE9EEE3E71AF826DBF51AD7F902F9F6F6E3F7D217FCE508EFEED7F1E0FA14DAFBEDF5FC29F4E6F316E9EAF13DE209D800F2000DDBEF09D7E702F6F7D7E5FE03F3F6D7EE0C13E3F5EFF6EAFFDB10E509E7F4E4E500F6FAF6EE0FE2FC0300EFE5FDD400D0C4E5EFE8E8EDE114F1F0E0E91108F201EFF702FA0A02E2FFEFFBF9E512E9EFE1F313F515DDF7FFD6F0FEFD05FDE2F2D82402F208F7FAE2F9E3051AFAFBEAFFF323E2E6FC0FEAF0D81AEB07D7FB030205E3F6F9D7EFFC04FBE5F3F6F3DDF0EBF01211E60BE6F8E9EEE00EEC00F5F3E5EC02F305F3E40CD005FC05F7D7F9D800C8CCDFF5DCECFBDE0BEAF0E3EE0707F4F0E6F0FBF0FEFCE3FDF805F2DC14ECF5E2F90FF316E5FAF3D2F3FEFD0A00E6E3E12507FE0AF705EAFDEB0018FCEFEB06EF24E8EEFB05E8F9D40CEA0EE3F705EBFEF2F4F5DDEE00FAF6EAF8EFF2DEEBF6F8060DF214F0FAF3F7D20BECFE0BF0E100FC000CF5E9FFDA13F201F8E2EEE207C4CCE3FCF2F2FEE7EDE5F5EFE9020CF9F0E1E8EAF4F500F111FCFCF2DA0EE506ECFA1AF317F107E2C8E6F4F9191CDDE6E10EFD00F1E40EE6F901FCFBE2ECEB0BE52FF2F3E607F1FAD908E006E3FCFAEA07DFEFF5FDE6F8FFEAF0EDECF3F7F1EBECF602F2F8F7F0F0F2D0F9E7F201F2CC0001FB01F0E0FEE111F6F910E6FDF307E4D5E2EEFDF10EE8F2EE03E8EFFD240A16E8ECF0F6E3FFEA1800FEEAFA02E6F8EAF61BF211EE04EDC6DFE9F71515DBF6E7F7F0FBE5D403F00B04EF01D3ECF50FF02007EFDC04F903E00AD9EFF502F2F9FCE900F002E9FEFEEFE0E9E2F2F9E7DFEEE801F9EFF5FBF5EFDBF1E2EBF1FDC701F3ED07FBD412EA11FD06ECEE0B0203F6E1E3F4F6ED16E2F000FFCAF600240D1FFAF4EEE0D4F8EE0B09EEE010EDE8EAE7FC0BE919DB0208CEF3F504FFF2EFF1E3EAECEFEBE8ECF607FBF200D9E7FAFC021314E9D913F2F3F11ED9EEFFF8EBF3F9EB05ECF8EEF6FF13E6E9E5F500E4C8DCE608FBF4F50EF705D7F8D6FDE8FCD0FEF0F40A05E90AE305F709F1F0FDEF02ECD7E9F407F70BEBEFFAF5C5F1FB1901FFE5EF00DCE9F0F4FD08FEDCFFF8EDF0E0F7F9D710D702F8CDF1F7F705FFF4EDEB04F9FDE8EFF4E810F1F4EEDBE20000F214F7EAE71FEA01E808E6FDF3E7E6FB0BDBEFF3EFF7E7FB1BF5F8EEEEFEF4CCD4E505F5FD0417F314D4F3D8FDE6F2D707F1EA1607EF0BF103F006F9F2F8EDFEE0CFE2F113FF04EDEFFBFEC4ECFA0905F3DBF5FEEAF6F8ECF30700DCF3FAECF7E2EBFBDE11DD06EAC1E4F3F01802E9F9EA12FA00EAF500D507F0F1F0DEE3F9FAEE12EFEAE821EE00F301E009EAE7D6F916DCEDEDFAF8EAF116F6F0ECECFCFAD3E3D507F0140D15F40AD5E9D3F0ECF3DA11FCD50D05F912F0F7FDFFEEFDFBE8EEEDCFCFE21C04F4E8E7F9FFD0FC00FF1B06D9FAFFF3FAF0F2E80EF1E7F5E7EBFDEEF000E51AE101DFC7D7F7F12102DE01E00DFA01F1FAF7DC09EDFFF7F3E6E7E1F200E3E7F71EDD06FB01CE0EF1E9CEF51DDAF8EDF5FCF6F21AECDFE5D7F4F6E0EADE12ED25FEFFF7F9DEEED0E7F508D614F9DE0300FD0AE0FC0602CCF7F8E7ECEBC6C8DD04EEF8E6F1F8F2E3F8FE0C1405DCE2FBF9F9EF00021AE912E5E4E8F8F8F504E41EE604E4DCEBF8000F01D6F4D90405FEECE2F2E609F411F5EDECE4E0F006DFECFD1DDEF8F80DD807F5EDE9FB27CAF4F0E6F8F1010EE6DDE8D7F7F4EAE400FFE221E4F8E1EFEAF0EBECFC07E502F9F007FBFAF5D60EEDF1F3DDEFD4EFDEBBD5E7ECD603DC03F4F9EAE20324FAFFECD8F2F10AE9060109FAFED002FDF6FBF90CF718F8F6E9E507F8041217D5F5D0100BF6FADE01DA0AF503F6F701E2E9EE0EE8F2FBF9EBEFE7FDE9FDECEBFDFE08EDF3E3EEEDE900F4E4F3DDE8ECF2F3E4F902D312D8F4DCDCE8F7F0EB0402F2F3FEF4FEF2F2FDD90CE4EE03DBF2D7F2DAC3D7EDDFCE03DE13F60DF4D40C2CF1FBEFD3E9F612E509F5F9FAE2D50F0AF105F71A0520FDEAEAF315F8051326BDFBD71606F30DDE03E204EA01FD0305E3DFFE13EBF6F0F3EDF5DBFAEAFEDEEE03F5F6F5ECDBF6E3E00B03E4F5DEE8E2F1EFE0F611E40AF6F2E5E8D0F5D9DDFEEDE10504ECF1E401FBD206F0F3FCE6EDEFF7DCD5CEF3F8E202E106F90AEDE8FE27F5FDDDE0F8F001E6FD0207FBE4E4FD07FE01F10BFC10FCF0E4D4F6E907160CC2F5E717FFFEF6E3FCF00BEFF7FEEFF3F2F6EF14E8F9D4FDF3FCE80BD9F7E2FDFAF601F2F0F1FFECF104FEE5EED9E6F4EFEAE9EC01E306010BF4E8D6F7D8E602F5D800FDE301F7EC09D1FBF5EFEAECEFFCF1E6E5D60101ECFFE6E7F204D2E5F511FC0CE0F0F4F1F2E500F616F7EDEAEC07FBF8F30CEB0EEDF8FFC5E8F3050EF5CE01FE08EF04ECE9FDFA0BE3FAF2E8ECFCDEFD06F3F5CF0CEBF9FB09DB00E9F7E2F2F7EEF3E902F4E8F910ECE5DFE30CF6E2E7EFE1DBFF1319E9FAE2F8D6EE06FFDCFFF4DD0307F4F7CDECFBEAF3EEECEFE3F3DBDCFE11F1F8EED9E3FDCDECE90FF926D6F500E8F5DF14F61707F8DBE307F0ECEF01EE05E10DF9C2E5F5FDFCFBDD00F7FEEE06E5E900EA11DAFCE3F1EEFCD90101EEEDEA07EDFBE5F7F500E8F3D900FDEDF5ECF2FAEDF907F3F5D9E20AFFEEE9ECE1D8051A07EAF9E7EED2E30901E5FFEEE4000AF8EBD9F3F3ECE6EFEEE9DEF4CDDEF300E903EFDAFFECCEF7F115F523D8E7F4E2F8DC1EFE15F902DFDB00EAEFE902FB0AE50BFDCEF6EF0100FBDA05E801ECFEECD904EE10E105E1F6F0EECFFFFBE7EFE201F1EDF105FEF5E0FAE0FF06E8F6E1F4EEF5050CF8F7D8ED0AF3ECECEFE5D70E0E0BEFF9E7EADBE30BFBE6FA00E7F801FAF5DEEFE9EBFAF3EADEE0ECD2D6F1F8EC04E9DB0EEAD1FEF519F71CE3EAF9E7F6E00FF419F605E4DDFCF4E9EA05FF09EF00F1D1F4F60304EBDD03DD0BEF0DF1D5FDE80DE807E4F8FCF1D2F5F8E4F0DCF3EBF0EC04FCF9E5F7E4F5FCF4F2E0FFEAEEF300F0FAD4E806ECEAE9EBFAE80B05FEF0F2DBFAE6E011FDDB06F8E504F8ED03E6F8EAF3E0EAEEECE7E2D8D70703E1F7E7E605EFCEEEFA10F803E2E602ECEEEEFCFD15F6F7E9DEF504E9EAFFED09F1FDF7D0FFFB090CEFDB03DC08E604F7F1F9F5FDEEF5E1E7F1FCDCEDF6F0F5DAFFEFE2E70DECFBE6F6E7F3FFEAF3E6FDEAF104FDE8F1E2E807F0E5E7F405F906F2F2F1EBDCF8E4DF04FFD907FDEE08FEF6F8E505EFF1D4E5EAF2EDD9D1DDFC0EDDF4E8EBFEEBD1E3021BF4E1EDE300E8FBEEFC0712EDF5E8E8FE05FCEF07F314F6EAF9D5FB010104FFCC12E6FEF0FCFCEDFAFFF8EDE9E7E8F2FCDBEDF6D4FCDCFCEDF2FF0DE4F2D3F3E1FB07D1ECDCFEE6F00F09EAF4EBEFF9E5EBE9F7EDF20AF004EFE7EDFAE4E1FF09E1FC00F50BFCFAF2CEFDFCF3DCDDE4F7EDDCD0E10212E703EFEAF2E8CDE7F814EBF3EBE8FCD900E1110217EB00D6EB05F5F1F503EC0CECF0FACCF40EF9F7F6D400F2F8F3FFF9DDF8FAFFE1E3EAE2F9FAD4F900DDFDEAFAE8F0F00CEBF3D9EFE8F902E1E9E2EDF1F80A01EE01E0F4FCF6FEE9FDE3E808F516EDECEE06EEECFD00DDF8F7EE0801EDF1CEF3FEF2EADEE0EDEAF2D9E9FF17F905F4DADCE5D5E3FA05FC12ECF8EFCEF9E212001DEC00D2E4FEEDDCEF05E605DDFF02D3E912EEEFF3F2FAF500F0F4F4E6EDF2FAE2F3E5E8F4FACEFA0EDBEDF9F4E5EBF504F403E9EFE4F402E4EBEFE9F2F8FDFBFA02EAF3FE02F7EBFFE5E015F50FE6EFE40CE2EDFD02DFF5FFEB0DF7DEFBD0F5FDEDF1E8E3F0EBF6E0EAFD05FD05F1D7E5E7CFEF00FC1312E6F5E9D8EDE3FCF11EEA09DBE0F6F0D8E602E90DE40101D6E50BF0EBEAEEF0EF08F0F2EAECEBF102E807E6F4F1F2DCF903E7E5F8F5EDECFC09F4FEF5F5EBEF07E5EDE7E9F6FAF4F60CEFF0DF0804EFF3F6EFE420F310EAE7E608EBF0FF01E2FA08EB0CE9D203C8FDF9DBFAECF8F0E108E3E1FCF9FE08F2E0DFF1DDF1FEFC1E0CE9F5F7DCE7F4E2FA18EA11DED3F8E6DFDEFEEC10E7FC02E0E706FAE8F3E1FDEAFDEFF4E9E1E5FFFDF818EFEAE8EEE2EDF0EFDEF5E7D9E5FF18E90000F5F8F0F9EFF0F3E2EA07F5F3FDFCF3CB0CFAE8F0E9EEE2090119E9E4E3F9F9EEF7F4D0F901E106E0C101C7FCF6DFFDFC09E1E410E5DBF9FDFA04FAEFE204F3DDFE021F1EEFFA01DBF103DA08FCF705EBD0F4E3E2DA03010FE8F302E9E0FFFFE408CD09E0F9EFEF02E4E400F1F92400E3DFFEDDF3E7F1D9F3DECEF2FE11E202F4F6FEF9EDF9F2FEDFD915F5E4EAFFFAD0FFF5E9E4E7FBDE09FE15E4F0E006EFECF9FADEF307F202EDC6FCC3F7F7EC19F7F7DDF3F7E5E3FAFAEE08F3EBF206EAD7F8060908DFF109D401FDDF02F9FE03EDDDEEF3DBE1F8FD09F7F6F2DBDAFDFFEF0CD1FCEC01EDF4FBE6F6F901EB15EFF2DFFDEBECE8F6E4F8EFE1FADCFFEEFAE3F1FAF9E8F9F1FFE4DFF7F4E6E701F2D2FDF7FCE4F805DC14F319F2EEE11EEFF5F4FAE8F805FD07F2E2FDBAF6FEED25DAEAD4E8EBDBEB05F0F5FFF3EEF3F7E7E5FE0302FAD8F60CD204FAE8FC06E404D0E9F3EEE2D5F3F308F7F3F6DADF07FBF2F7E901F51CF9FDF0E9FBFAFAE503EBF9E8EDE3E4E6EBEBF6F0EFEDC60DFA04DEEEF2F6E8F3E8F4E7DEE9FCEBFDFAF5D2FCFFF9E9FAF2EC10FB13E6DEEB1CF0EDEFE6E2F402F101EBDC08CEE8F9F6FDDBE6EAEA19E8DD03FA0110E9DBFDE2DBF3F9F0040FE2FF00CEE505DBFB19F4F5DDD9F4EFE1D6F2E90AF7FE01DAE816F3EEE8F005E407ED03F5E5E1E8F9F3FCEBEBE6EFDEECE4E4DEF7F1E1E3E820E9180BFAEFE9ECECF0F6E9E6E5F8E80300EBE110F9FEDFFEF1E709FF0EDDD9EA12E3E7E6E7DEEEFEF0FED9E605DBEEF3F804EDEAF3EF2FE8CF03E1041FEDD814EACFF8F5EA0F12E0FB03D7D303D0F41EF5F8EADFFAE5E5D5E9ED0E00F8FADEF70DF0E4E8E508DE0BEE07F1D6D5E0F6FC0DF4E9E8F2F0E9E1EEE1E8EDEAE0E725EB182008F4EAF5E9ED04EFE2E6F6F20F03ECE11CF8FEDEF908E304F514DCDCF211DBE3F2F9F0E900FFFBDFDA02D5F2F3FBF7FEE1EE0012EED809E1EE1FF0D11BF2D6E9EC01F8F0DEF2FADBD4F1EBF519E403F3E200DEE1D9F4D91BFBEFEEDCFD05F4DBEEE4FDEA09ED04E5C9DCEDFA0C08E3DEEEF5EFF6FBF0E6D2FCEAECE11AF10E0A01F9E8F1E2ECF9F7E0D4FF03010FF3F517F8F5E3FA16F4FBEF08DC00E717DEE7FAF6E1F605FBEEEBC817E4FBEBEEDA0BE2E80EE0E9E40203EAEEE3DB0AF3E7DCEF05E9D9ECFCECD4DF03E4F004DFFB03E7EB00E0DB0FEA240BDFE5C9D401FDEFF4EFF1E1FBF4FDF4DDE8E4E70AFDE5E8F6FCEBFC00E4ECDCF2E2FB0512EAFBDDFC03EBF8EE00EC02E0DEEDF0EFF7F0F5F9F2F7E90406F0F2E905E507E319EDF1FAE5D9EE02FFE8E5DF0EEAFBE7E7D903E2E60BF1DAE3F711EDE0DCE503E2F1E1ED07EFEFE6F5E6EBE70BE2F805DF02FAEBEF01D2D618E72215E6EFD0CA06F5F2F4E104DAFDF6FBF2DADDD6F109F5F4ECFBFADCEFFFCEE4DDE5DBF2160EF3EEDA05FFF907E400FA00E3EEE6DEF5FAF6FAEEECF3ECFBFBF005E1FEE103EF23F0EB00F4DEECFE03F3F5D5FEE2F4F4EEE9EDDAE909F1E3E8040BEBF0DDD7F4D9E9D9E805E1ECDEF7E8DFE7FDF4F80EE7FFEBE4F405CEEA0BDC1D1AEEE9D1D70BF5E7F9EAFEDBF1F5FEE5D6DED6F802EED8EFFEF4E3EEFCD6EAECECDCED0601FBF2E3F5FC01FFE9F302FBE4E4EEDEEB06F2F7F8F001EBF2FFF309EDFCDBF8E71AEBE60EF2DDE702FEF5EBCB03E5F1F1EBE3F8D7E802E5E9E50714E8F9D8DFF1E5E4D7E501E4F4E9F2F0E5EBF2EDF40FE1F0F2DDEE09D8E701DE1714F4E4D5E003FFF2FBD9FEE1EEE7FBE8DFDCE1FAFDECCBE7FEF3DEEDF0E3E8E6FAD8EAFE02F3E7E0F2F90101ECED0500E9E9F5F3ECFDE6F1FFF5FFE0DC05FD01DFF0D80CEE0AD8EA0204F0EF0007F6F8DEFDD7EFFFE6F9ECEBECFDDED6E60710F7F8EBD6FDF3E3E0E804E5CDDCF0F7DBEAF2F2D500E3EBF0E0E811D8E6FBD31E24E9D6CBD80A01F900E2F5E8E6F200E0E4E0DAEFF1FCCBEEFBF5F7EAEFDFFAECFAE900F8F4F9EADDEBF20A0EE9E8F802EDD5F2F7EFE9E2DAF600FCE5E40E0403DDEED91AEC0EE0EAFC05EBFD0F00F0FFDD03CFF80BEE01E0F6E6F4DACFE8040708F3EBE1F2F6E6DEE006E7B2D0FBF7DAEC07E7D7F3EDEAE2D6E515DBEBF9DD1625D9D6CACC0AFEF9F0EFF6E0EBEA05E6F0E7D6DFE1F6D7FA02F0FFE2EDDFFBEEEAEB03F9F4FDF2D9E9F10C0802E7FBF8E6DEE9E7D3E4F2D3EE0301EDEF170501E5EDE10FF20CEAEA00F8EBF3FEF6F9F2DBFED6F213EBF5CE05D2E7D2C2EF0FF80CF6EFEFF1E3E9EEE809E3C5E2FAEEE3ED04EFD9F4E4E9D6D3E901DEE500D90C14DAEAD8E0FDFBFBE0FCFDDCF5E505E1F0E9E4DAE8E4D305FDE8E9DFF2DAF6ECE8E6E2F5FB0B01DAE5F80D0408E2FDF2D5E0F0EFE2EFF5EFEA02F9ECDE0EF9F4F1FCD814F205EAE0EEFDF4F0F7F6FEE6DAF4D3F106E5F6D312DCE4DAC5F706F2FB00F6E906E9EDF4EB05E9D7E2F0F3E2EAF2F2D3F6E0E5E1DEE4F8DDDCFAD00910E3F3DBE6F5F903F0EEFFEDFCE407DAF0EBEAEEEBE6C400F1EEDFEAEFDEEAE6F3E4E1E1F4FBF2D9EEF4150003EB0EEEDED0F9F006F2F1E7F301E4E1EDFFF8F7F9FDD8F4E5FDDFD7F7F1E3E0EAFD08C0DAFFEB04E8EAC0FB18E7EDE4CBE3E3F9E903E3EE12EEE6EFDB0AECECFAD7F6EFE4F1EDE318D2F6EAEDE2E2E7E0FDD61314EEF3EEF0EAF7EBF3D3FCF0F3E00DD0E3F0F406FBF1C0F0F1F8D1F0EDE8EAD603F1C3DAFDEEDBECFC020702F4EF24F1EEDFF0041E0EFA05F8F7DEDAFEE9FBEAF107E704DC00D7DEECF3CDE4F2FBFDBFED02FC03DEE2D8161EF6EA08CBDBDDED0203F7D919E9DAEECC02FDD9EBE7F4F0D6F3F2CE1EDAFDEEF8F4DAD8F201DD2315F6F4E8EAE9ECE7F5CE08F3FBE20FC9CFEFE804F6F1CFF2EE06D4EAF6DCE9DDF4F3CDE5EDFCC6F1F6EC0F16F0ED20E6EEE7DE02200304F5F7EACFD1FCF4F4E4ED0BE20BDBFDEBE2EFF4F6D1DCF0FBBEF1F3E210FDD8F10929E1F502D6DFC7D9FB06F3EBFEFBDED0CEFEEDE8E0D0ECE4F6EFF3DCF8DDF3E602FAF1D5F8F8E11D23F5F5EDF4F9F1E20FD202DB08F6FDF5E7DDF1FADA12E5E5F503C5F1F5EEE4D6EBF5DFD6E6FAC8ECEAFA050308F82EDEFFEEE3F7030A0FF1E2F1DAD3F3FAF5EEF101E708EC08EEE2F40FF0D5CFF110E8EEE9DE0C06FE0EE71CD9F5F1D6E6F4C1FA0DFDECECFED7C6D516D9D5D8F7EAE4ECF205EAEEEDF1C6F5FDFDE2F9DCD91B22CDE9E50BFBF6CB1BEAF9DA01DEF6F3EDE3DBE3E4F6E1EDF3F5CFFDFBFDF6DBEE03CACDD500EBF0E20002FB1BEE26DEE8D3E2F4DF090AF5EE02ECDEF9FDF6EBECF0F4F7F004D7DB071AC8E1EAFB0EF8F8FCE608280E00E714E6F607CAD4F7C7F9110ED2E3F3E0E2D217DBCBD1F6EEE9DCFEF8EDF1F4FDCBE4F5F2E8FDDBBD1D09D5E4E800F8ECC107EDF4EFE5CF07DBD004D8E2EBE2E3EBE8F0EBFAFBEAF9F3F10DD8D6EDF801F5EBFF020D05DD0DC0DEC2E8F0D10F09EC01FFEEE4F4F6F3F4E0EAECFEFB09E5E3000EDEF4EC03F0EEE10BE4001F00E2F307D8F008D4D5DEE0F1F606DDEEF5EFDAD60EEDCED6F4F9EEE402F5D8F5D6F6E5F0E5FEDFEBF7CB2314E4DAE6D8F2EAE0F4F207E9EFE902E6DFF9DDECEAF5E6F5E8F0EBEFF1DDF5F5E8EFF7DCFAE6EDE4E3F60DFE06F019D7F0C6E9EDEBF605EDDFEDF6E2ECF3ECEDEFFEE0F3FE0EF2E80208F4FBF707F1D9EFF4E3F31FF7EEF10DD5E316E1D8E5E6FAF50AD7EFFAEDD9E1FDE8D1CDF6FCEFE901EFD2FDDD02E2F1EBFAE2E8F1CF1B0EE3DDDBDDEBE7D7F0E905EBF9EFFAE1D6FBDBF9EAF7E7FAE2E5E5F403E5EDF1EBE9F8CEF7E0F5EAE2EE07FF0CF113D7FCC2E6FBF2040DF1E8F2FCD5F5E7F2E3E603E4EB03F7EEE900FCFDECFCF5ECC0EF02F3F30FEAC3F9FEDFEE04F1D1F2F3E0E8FDDEF7FDEECFD805EFD7DEE40802E004EFD606D419E700EF0ADEE0FACC2317EDD6D5CFE7DEEAE2CC07FAF900FDDECF02EC00EEF4FBE6E9F4DBF713DBF7E3EBEA01D2FBDAEFE9ECEF03FC08E911E303D5DF0104020D0CE4F1F9DCF6E8F7F4E0FDE9D80401F5E907F5F6F203F5E7D4F1FFEEF015EDC6E1F2DAF0FFF2DAEDFCE7EDFAE7D7F3F2C9DF0CEBD9D6EDFA0BE70BF2E30BE018DEF1ED16E0E7F9CF2213EBDCD8D7F0D4E9DBCC0AFAEAF2F1E7D3FCEEF6E7E3FBDFE9E5DCEF0FD5FAEBE7E4F9D9FBE3FAEBE8EAF3ED0BDC0BEEFADEE0F7F8FE0B1BE4FCFDE6F3E8F5EFE106E9CC0D11E6E00304E2F50C07E5E5F8F2DEF327F0DCD7FCE4EA13EADCF0F9F2F712D1D7F6EDDFDF03DFD7CFF9F403E815F2E201E403E0E1F7FEDEEBECD0220AE1EBE0E7F8DAC0DED8FFF7D8DFEBDCD3FBE5EEF1EBEED8E9E1EBFDF5F0EBE2E4EDE8D8F4EEFEF7EDF0ECD10CE4F6EBF2E4EEFDFDFCFB0CF0F4FAE2F1EDEFEAE6FCE7E1FE14CCE0FF10D8F30C07E8ED05EDE2EC25F7F1EFF5E4EC0CDEDBF4E7F4EF15CAF4FCE3ECDD00DCC8CBFDF7FFE514EFD5F6E6F3EADEF202DAD9DCD81A0FC6EED9F0F7E4C7EDDCF1EDE9DDECD1DBFED3F0FFFEEBE8E9E7FF01E9FEEBD9E5FDEAE5EAEEFAF1F9FCF4D111F7D9E9F8F2E9FFFDF6EBE9F8ECFFECF0E1F6EEEDECF4E004F8D7E00813C3DEFE0CE7EC0DE0EDE424EDF0ECFAD9E801CFD9EFEEFDE709D1EBF6DEEFDDFAD1E1DA05F511F117F4DBEDF1E7E3E3EE01D0E7E0D1190ACBEFE0EFF8DACAF6EEFDE0E2DBE3DAE6F8D2D6FCFAE6EFEFF800ECE8FFEAF4E500E7EDD7F30E02F6F8F5D71FF5D9CDF9E5DBF0F409E5DFEAE904EEFFF2FBE3F4FDEBE404EBDDEBFC0EB5D7ED0EDCD5EBFBF8EE1BEAC4FC01CCEBF8E1D8E5E704E0F9E7EBFBDFE7E2F4E3EEF205F521F722F9D9E9D6FCF5E7E5F7D8D4F1D627F5BAF5EDECEFD4C5F0F406DDE7E1E0E0EBEBE8C206FAFAF3EB01EFE4DFEBE6E9EEFDEEF4D9F409FBF9F7F3DF27F4D3C6F4E9DCEF0608E5F3D9EEF0E3EAE2E2E5EBF7DBDE0B06E0E4E8FEE0F0E503DAEADFF6E2FF23F7D0FEEDE8FB18F6D5D7EBEEEFF5E0E7FFF9D6D7E8F1DDE2F1EF0FF016F4DFFAD40BEEEAEA00DCC6F1E62BF2DDF3F1EDE9E2C701E504EEF8DBE9F3D0E1E8EAEF06F0E3E1ECE8E9DEE6E9D3E0F4F8E5D2F1D7F5F9FDF3E315EE04F0FDD7EAF207F9F7FBE7EDE9DEE7E5E5D9F508E5F30903E5F4ECEFECFEDCFFE2FFEFF1E7EC2FF0E2F2EDECEE16F5D0FDDFF1EDF6E501FDE6DED3EEF2D2DD03FF13F212F2DEF6E408DDDEEC01DFB4DFEE2CEEC7F9F0FEF0E4CBF8F9FFDFFEE7F8E0BFE3E2EFEEFFECE1E3DEEEE8CFD6EED4D204EBD9D1F4DDE8F3F1FEED16F9DBF3F1D4F1FBF3EDF7F7ECF1DEE5F4F1EDDDE611E4EF11F7E7FDF0F4DFFECC07E8EAE100F0EB20F6BFEFF1E3EE04EAD2F9DDFCF0F7ECFEF1DCE8D5F5E8C7F6FEF112EE15F9DFF7D40EE3D9E9F0E2B4E8E72FE1CBFAF504E8E2C4EC0AF9E5FAE5F7D8C6EFF1E3F5F4EDE0E3DCE8F0D2D0F2D9E5FFE6E2D7F4E7E6E8F6FFF718F9CEE7EBD0EDFBF0F2F513E1F7E7EFEAF0E9E6E5FCDCE60B02EBF7F605DBFCCF0EF1EFECE4E6F51DF7E8EEDDE6EC0FE5DFE1DEEFEDF6E1E5F6EAE1DAF4E3CAEEE7F6ECF70DFBF1F9E202D9E0F6E6DDD1D5E428E1D0F90000E6ECC00802FFE8F7E6EFE8C6E3EBEDEAE5E4E6E1E0E9F5EAD5E8E4E4FCF1E1D0F7D8EADDFC04FF1DFCE4E1FDD8EFF3EE05F6E6EEF1FAF7F2D6E8DDF401E0DCFD06F4DEEFEFD9F3DEFFEBE20CDEE7EE0DF1F1F5DFF3EB14E5D4EBE5F0F0F8E1E1F6EFF3D7E2E7EAF0F1F5E3F70DEFE9FCE4E4E5ECEEEFDBD6DFF822E2EFFAEFF8D9EAD503F006EBF2DAEEF4DFE2E4E4EBEFF0F7E0F4E1E7F4D3E6E1EBF7E9D7D9ECCAFBEFF701F31FFDF4E2FCCAE8EAFC04F7D9F1E3F7FEEBD6EEDDFD09E6E10306EDDDE9F0E1F3E3F8E9EDFCE9EEE7F9F3E7F6DAF7EB03DDDDF2E2E5F900DDDAF6F6FBD9F3EDDFF6F7F5EDF015E5E800E4E3EAE0EDEDD8C3EEF22DE5DAFEE7E2ECE7DE03EA00FCE3CDF3DDE1E8E5E3FBFADEF8E3FADDDCEED0ECE5EFEFDBE7EFE7CDF5F70100C90D07E4EA00D5EDFE0703F2DCEDDFF6FAE6DFE8E2EEF5EFE702FBE7E0F4FFEBE2E4EFF1F5FEEBEFE5F9ECEFF4D2F0F3E9D1DEEBDEE3F5F7E9E6FEEB04DBF7E1D5FEE8F2EBEF05E7DFF9E2DCE7DFEAFBD9BCE8E427F9D3F3E5E6F2F2E9F8F4EFF8EAD8F5E6E5E3DFE1F504D4F9EDF0F3EAFAEAF4EEE3FAE0E9F3DDD7F1F80BFCC7110ADEF30BE6E3FBF908ECCFEFEBFEFFF2DDEAD7E900F1ED07EEEBE6EAF4F7E6E7FCE1EFFAEFE1F401E9E8F2D9F8F6E3E1DAEBDFE3EDFCEEDE02F7FBD7F6E7E4F3D8F5F4F307D8E3E9E9D6F6E0E6FDD6C8E8E91DEEE9F7E4DDF4F1F7EFE3E8F6DDE1F1EAF2D6E7E3F108E3E5EAF6FFE5FAE1F0E2E7ECE6EEFAE5CCEFF60AF3D415F3EEEC12E6E7FBFE03F2CEF1F3E8F9F3D9F6DEEC01F6F703EAEFDBF2EFEADEE4F6DFEFEBEEE6E2FEE5E1F1D901FDDDE2DFD9E5E4F802E7DDFBEDFED6F1EFDFFAD4F3F9F40FD3DCE6E9DBF5E5F103D5CEF6ED2CEAF2FDDACCE3F0F7ECE9F3E8DFE8F9F9FAE6F1DFE4FFE5D0ECFFF9E2F0D3F6EDE2F8F7F8F6E1C5EEF001F3C20900F6E603F2DFEFFAFFFAD7E1E9EFF9EFD5F2DFEFFDF2FA01E9E8E4EDEBECDDDF00E7F3F6E7E9D3FFD7F0ECCBFAF8E7D6E6E6E6DFF8F5E0DBF5EE0EDAF4F2E805D5F404F0FFE2DFF2F2DAEDE8F506DAD4F3E738E4F1FAD3D4E5F0F7F5EFF4F1DDEBF9F0E0E8EAE5E3F2D5D8E3F9F6D909D8F8F2E5F4ECEFFCE0C4F5EC09F8BD00FDF6EEFCDADEF9FDFF03D9EAEEEEF9F4CEF0E1F610F3F7FBECEAE6E3E8EBE9E308E3E9F3E8E6CF00CAE0E6CBF6F4EAD7E5F0E5E2F1EEEBDBF2EB10E5F7F0EBFEE3F213FAFFDCE6F4FBEFE6E7F603D3D2F8F33BE2E8FACFD6E6EDF4ECDEF3F8D9EBF7E4E0EAF2EBE6F1DDDCD5E8F5DC10D1F3EFEAEEE1F30AE5CFEAF203FCB5F7F5EFF1F8E4DEFB03F312EAE8F5F1F7F6CDF0E8F610F4F300E9E6E5E3E7EBE7E2F8E1D9E3EAE8DDF6CBCBECD2F2FAE5E1DBE9E4DBE7EBF4DEF4EB10E5FBE8EDFFE2EF0E0302D9EAF9F3FEE6E7F604CADFF9FA3AEEEEF2D9D4DEF1E5EBCCF1F1D9ECEEE0EAE7F8EDF0F5E6E2CFE2F4E401D7ECEBEFF0E0F20BE9D3E2ED0000B3FCF6EDF5F9F6D90000F116F7E6EBFBFBE9CDEFE4FB0DEEF7FDF0E9E6D7EBF8EDEAF3E3E7E5E9E3E3FECCD7E4CAE6FAEBE0DFE1EED7E4F0EED6F6EE10E2FBE6EDFDECF80A0805D9ECF9F7F0EBE8F306D2E2F3F82BF0F3EEE1D4DADBF0F3C6F8F2D8E7E7E6EAE1F4EFEEF2E7DED1EAF1DDF6DCECF2DFEBE6F0FEEFDCE3EAF408AFF9EDF6F4F3EFDDFE05ED0EE7ECEAFCFEE8CDECDEF126EEF408F6F4E1C7E9FBEAF202EDF4F0E9E4DAF8CDE5DBCBF5F9F9DFDAF7FAE3EFEDE0D4F4DD0FDFE7DCF307FAF40AFDFDE4E8F8F1DDF8E9EFFED8F2ECEC2AEDEAF2E9E3E2D6E6F3E0E9F9CADCE2ECDAE5EEDDF3F1E1D1D1F0EAD9F2E8E9F6E7EFDCEBF4E6E6FAE8F7FDB2FCE9EBE5E4D0E80D04EF0BE6F8EAFAF3E7E9EEE9ED0EF5F50CF9E4DECFE5FEDFEA07F3F2ECE3F2D1F2D8DEE3CCF2F6E4E5D9F5EBEFE6E7EBE4F2D90FDFF8E6E601E6E406ECFEE6F1EFE1FDECDCF3F4EEDCECFA28E6E7EAF0F7FBE0E5FAE6E0EED5DEEDF3DCEAE6F2F0DFE1CFD2EDF0D8F5ECF2E6E8F6D9E9FCE9C3FAEE0EDECE02EFDFE4E0E8E216F7020BF1F3EA01EAE6FAECEAE8FFEBFD0901D6E3D4E2EDD2DFFEFEFDFFECFCCDEDE0FDDBC9F0EFECDDD3EEEA01D8F1F7EEF4D61CE4EEEDE5FCD7E3FDE607EBE5E0D6EDDEE0FBEFF5CFDFF532E4E3E6F8FF05DEE2F6FDD7E3E7E7F1FDD5F1D4F7F0D1EADED6E8F3E1F6F8F1E0E309D2E6EFDBC207F21ACCD708F3D3EDDC02DD13E90FFEEEEBE801EAE4FFEFF5E0E7FF000FFBCFDEE0F4EFD8E207F803FEE3F8C7F2ECEBE1CEE6EED9DFDBEBE0FDD9EBF9E9F0D806E1FAEADAF8CDE1FEE008EAEEDFDA06E8D1F5F1FCC2E2E824E5E6E8F6FD08ECEAFBFEDAE7DDE4F2FCE3F7D5F6ECD4E1D4D2F200DCECEDF9E1F3FDDEEDF9DBB9F9ED22D3D904F4DCDDE2FEDD15E31DF5F1F0E500F1E2F3F2F8E2ED05FC06F6D4D7EBF2EEDBE6FBF2F704E7F2CEF7F5DEE4CDE9FADBDDDAEDDFEFDAF8EEDDF9EE02D7FAECDCF5CDEEFBF211E4F1E0D306E5D7EFF2EED3E8E41BE8FDE100EDF1E8FB00E0E7E0D3E1FDF9F9F5D9FDE8D7EDCFD0F9FBD8E6D1FAE5FBF3F4EE00DFC0ECE90EE6DF00ECF2DFE8F6D701E601F6DEEAE607FCEAE8F7F2E71605F204F3E5DDEBD9E5DDDBF5E6D6F4E5F5D2E7DDD6EBD1F801DDDED4F4E2F1D9EE03E5F5DB15DEECE8F703DFECFF0C00E8F9E5C900E2DBF3F2D4EFEEEC2FEEF0DFFEE1DEE6F1F4D8E8D9CFDF06F507DCECE8F3E2EDD6CCF2EFCBEAD3EAE2F9F0EEF2F8E4D2EAE6FAF4E7F8F5EDFBEB05D409F8DA08E2DDE80BF1DFE5EEE2F725FCF805F1E8E5D9CEF8E8DC00E2D1F2D3F5CFEBC3D7EADFF8F7EDDFCEF3E8F9DBE903EAF5D618EEE8F0FFF8EAE50311F6DEF9E9DA0CE2DBF1EEC8EFE9EF3EEEE8E602F2D3E5EFF7D8DBDBCEDEFBE6F8DAEBDB01E8EFD3BED3FACCE1DFE2E6F7E8E7F1FEE5E5EDEA01FCF6F5F6E0FAE302DC1703D30DEAE4F002F4E2F2E5E5E30DFBED0BF7EFECEABEFCE0DC0BE7DAEBD2F2E3EFD4E1DDD8F6F5F2E0CEF4EB01DFEC05E6FBDA0CEADFEE0402E5E9ED14F4E5F9E9C510DCE1F5E2D3EFE0F244E7E6DF13EDCCF7EAF7E9E8DFD1E017F0E4D5E9DAEBE2F1D1C7C3F5D0DDD4E0E3FCF4DFDFFEE2E0EBE7FFF802FBFDF0FEE0F8EC26F1DC07F2F5E709F3E8EEE1F0DB0BFFEE15EDF1E6FDCAFFD6D908DDDAD4E4F5EEEBD9E8E1DCF8FDEAE0CDE3EFFFE8F109E4FFD4F9E3D2DCFF05DDE8E514EEE9F4E6C3F8DDE8FEEBCEEFE6E43DEAE6DB0DDFC000DFF4F9E0EAD4D51CF4E8D8F5D1E5ECE7CCD7C6F3DFD8DBE1ECF0FBD7E2F7DDE5EBE303FBEEFD05F308EB03ED2BECEE0401F4E60BE8DCEFDAFEDBF10C0023EDE0EBEFEE05E6CD19CFE5C9D002EBD8DADAF3DFF4F6E4D4DBD1DDFBECF0F8DFF7D9E5F2DFE1F000E3E3EAFEE503E9FACA1AD8EC0AE6CCECE8D244E6CCD806E0B909CF0605E4FFD9C618D8DBE3F4D0EDFDCDD6D3C2FAE9DFD9E9F2F2EFDAF3E9DDEBDFDF1215ECF00A020CF8EEE2450202050AFAE609E5E8EED9EBDC0901F818E9ECEAECDC13EFD11BCEE7D6D5F8DED4D8D4EBE6F1F4F6E0D0D1E711F3EBEFDDF9CCDBEECEEA0310E4DEF003E4FAE1F4D606E0F2FFF0D9FAEDD84CE7D3DD01ECB003DA070CE5FAD1C912E8D9EAF4CDDA0AD7CECCC4FDDEDED2EBF6F1E9E0E8E7CFF0F3E50906ECEE0C05F9E8D5ED3DFBF70E16FEE802EAE9EDDFE0EA11FBE609E3F0E5EFC709EECF19D4E8E6D0F0DECED3D1EBF0E7F2FCEAC8E0EA17EDEBE8DAF8C7E4E6D0F91318E2DAF201E5F4E5EED902E7EEF1EFD709EAE94AE1DFDB02F1B100E40BFEEAEAC4D318F6D2E2F4CFD607E6C6CCCFFACCE1C9EBE9EEEDDADEE3DCE9FDEAFFF0F9F00507F6D3D8F32D02DD0D17F8E2F6E8DEEBE4F3E5FC05D915E0ECCFEBD70CE6DA06D9E5DCCFEBE5CCD5D2E5F3DAEEE2E4C6E2EA04E0EBEBD0FCC6D8DDDFEFFC13E2D6F1F1F5EBE7F2CD06EAE8EEEED6F9E9DE3FE5E6D3FAE0B9FADAFDE8E1EABACA04F2D7D9EEC9DEF7E3C5C8D7FCD6D5D6F2E8E9F2CCE8DEE4E3F4E9FFECEBF8FD01F5D6E5EC2C00EF0911F4D8F5E9CFE7DFEDE5F003DB1DDDE0BFD8F01BE7E601D7EFD5D2E3E2C5C6E3E9DCC5E8DBD3BCD8D6E5E4DEE2C502C3C7D0E5E9E717E6D5E8E2F0E5D1F2C0EEFCDEE0EFD2E0DCBF39E9DFC2F7DBB7F7E4EEDDD5FFA5B2F6DAB9BCDFC7DAEED8C0C0CC09D1CADDF5E4DAE9C1E9E8E1DBF2D909FAE4FBFD02F4E3CAEF3500FFFEEA06D9ED"> : tensor<640x128xi8>}> : () -> tensor<640x128xi8> + %7 = "tosa.const"() <{values = dense<1105921578> : tensor<1xi32>}> : () -> tensor<1xi32> + %8 = "tosa.const"() <{values = dense<"0x86FFFFFF8D2800008333000016380000B10800005821000018080000AD0E00004C1100004C200000CA020000340F0000B3190000972E0000A31B000053140000873F000065150000810C00005F21000076350000DC2600009219000081FDFFFF5008000090130000E7F7FFFFBC0800009A230000F6290000081A0000C61D00001D21000021090000E90F0000E1090000C71400003F230000620D0000830E0000A80E0000820600006A0F0000DC260000900900001F1500001205000052080000182B0000BF0E00002F11000056F4FFFFE80E0000A61F00009F1400006C1A0000A00A0000A4170000CF1F0000302000006F160000D2290000A72C0000D81B00004D120000F8F6FFFF6200000091250000AA060000AF1500000D120000C30000003C2900006B1000004C200000A4130000CD160000BA15000012F6FFFFDC1A0000CF0E0000D3350000F10F0000880E0000F6270000A70E0000E7200000DB1000009B060000C921000011050000DE2A00002C0A000011280000592C0000EC0700008C150000D7110000052700005D160000302C00000C2700001A160000DC0E00008E0E0000331A0000722300009C1400006B33000048160000D30B0000DD1E000096FDFFFF7D0600000F0800002C100000FB150000000D00006C0C00009FF7FFFF1B1D00003F130000D40D00008C0D0000DD0F00003F0F000091190000D31F0000"> : tensor<128xi32>}> : () -> tensor<128xi32> + %9 = "tosa.const"() <{values = dense<"0x17F10D1712FA060A0CCA13150141F11308FBEBF3F4E5F2DC1809EBE3D105E60A1314FA0A0207FFF3F8EA0312FD31B9D4F8FEEDFA041DFB1FEB0EFDF901F51A120AFEF9F213D6FDFCF1F7FB0EDB4F27180EEFFA0301111E050B0913171C090EEB312D23EAF9E0F4250004DB0DD2F40108FB082E0A16F2FBC40FEAFDF20400E509FF0CF20FF4F50902F504030CEFF403FBE30BED05F9FC0606DAF8050412F1FF04E9FDF8ECFEF4F2EB04FE0104E1050601050E1DEE0AFEFFE1FC0F0EF70F06DE02FD1A08F8FCFF0601F50511FECAE8F40A00F10DFEF9011ADF06E908F9F206F010F3E9FEE30EFC0CE2EBFA07EDF80BF4F6E205F7EAFBFB08F5C910E5FBF3130601F1E91E29D705FB1010FF0406F8121B042BE81510DFE70AE3FFF10CD51309CF00F6FAEDFEF3F0E1DCE8F2090D0FED0D02110DF3FBE9D4EBFE1811EEFEF5FFDBE0FB001801F2D4FFEDF7EDDFD9FCFCFDDCF21AE7ADD40914E4FF15F20E0CFA03153BE6D70D0507FAFE0213F4FF120008D6F91114EFF5E209FC07F6F7F3093305FAE705F5160A0CE5F503FCF7F0F21DF4E9FD07DCFEF20219090E0708ED12E110E2FFEBDDE7FE0EDCE208FFF70C15FF1AE4F6FDFFF004FEEEED0A16F6040A02FFE3F0FA0BF6EDED0908032EF6210AEF14D71FF6EEFF00F30801A4F5E9FBF204FA11FA06E906FCFAC703FFEDFC1ADFFE0EF2090915E4CFF1F8F02600FB0CFD0E17EA00DDF1F4131E01F81E06EDFCF6F206E8011D14EA10F1F612FDF10604EDD8FC17FD06E7F6E9000215F10EFF0EFFE5E400E3F2031319120B0806EE05F6FCF9E415FDECFBFB190200F4FD16FC1116FE3E0FFB0A0601F20D1300001D03E9C1F2E5202707E502EB000301061323EF030B161A0200E1FAEE100C0B0408070C0CE6E8FCFF041A0D08F907FEF4D4F8F50C0C0BEA1C03F3E91F08FBF6F306EC0101F2FF1DE9F70AF5F30309F5EF1412F6F3FDFAF5F215FCF7FF07F0F7F9EF07FDF4F9120C130B08F7062BF307FB20FAE9E4FDF1DDFBF8ECFEFB11F1FBEEFEEFE8E3FFFBF9FDF60000FFF7E60512F5FDFCF4ED19F0F207F7FC0A04F70AFC01FE03040AF609FD0B01FFFDED1A0C1307FB0508F314FAFD11F9E901ECEDF5FD0706170B0B08F915F1FF0F0200F5F611F7170AF80B0307F4F2E5F4FFFC130413FBFCF5E905FCF7060621EF0507F6F80CEEFE08FF021304E6FAFDEB14FE05FCF7EC0A080E010AF3F304F1E6FFF4DAF9EEEB0001010202FFFB0BEE1324EDFCFD02040E0E0A0519120000F9F3FB0D0417FFF104011304091BFCFEFFFB0CE9FE07F8EDFFFD02250913F7FE05FB14EE00F1EC1408F110F9FAF90013FBFC0908F90412FEF504FCFE08F50DF2000501FAEFEB03ED07F603F5EEFBF305F5EB071AF010FD060207FDF2F405F3FFF9FC0E06FFFEFCF209FE0505FE040C0D0AFB00050BF4FE0501FB0111F8F6EFF71AF419130403F5080CFCEDFEF91111F2F60FF9EDF1FE0D06F3F6E41DF702F01FDEFE05E90206FF17F3E71CEF04EDFD0306F7FC08FF150BFDFBFAEDFB10F8FE0B1B04E3EEFA03EFFA1EE5F208F1D903F90700160BFCF90C1AF515FD06142313ECF90F1414FA0201060FF40CF0EF07FCFE07F611F61206DEF5FD20F801F7FFEB060DF1FBD3FF05F7F7F2F4F8F7F8DAE7EEFCF6FEF6F7F40E02EDEFC6E70D20FE170324DEF91805D133F108FC07DBE003FD17FCFCE9EE020B812302FA07F200FF05EA00D2120B07042E1001FFFEFDE712F1EBFC090FFB1C00FF05DB0E00010013EBD80DF82A0409FAF8D001F1121709FFF2E1150CFEF90BF3EEEDFD01271D1B171AF609F6EA0106FF020206F800F8E72FF2F917FDE303FB0502ECF9E910010DF7EFF836F2E4FA08FC11F90A0A0BFFFCF3F604000208FB0DF6E5070BFFFCF902DFFDF4F60812E9F5F30E360CFB1604FDF4F9FC0903FB051404FEEA06FE1305FD0A0FE103E0041D19F3FC00FFF71DF40606FF1130F5F90BFC1804040C032E080BFDF2DAEAFA1DE1F4F00C0302FB0AF4F304090D1005F91C0A01F4F3C632EFF625FDEEFD000AF1FEE5070C02FB00FA05FE0811FBFD21041DFAF5F2071D090206FB1502FA04FDFA01EDEDF0FEF6F708EC1FFBE610F5F61C0C050704FCEA00FDFFFC0906110DF70DFD0F080D0B07FB03C8F8000F0AE90CED19DD07100C11FD07D7F9FF0A1606EC01EC01ECF1060C0C01FEF801EFEDFC04E90BEDF50DFC0B0E04040808010EF1F9F7130DFFFEF50B06EFF70CF3EDF7EE0012F10AF5F2060A0042FE1BEFF3F8FAF401FD02FAFBFF07D31BE6F406F6ED04E804F801EC33FAEFF50411FBFA090EF31DFBFAFD0DFA10F3FAFEF8EC12F6F0F4E8FDF1F708F10A06F6F60E0DF0DBEFE4F5FCFBF6FE04E7F7EBF80C0511F303F504F50DFFEAFDF0FCF1FD19E40CFDF80701E4EF0415FA07F408ECF2EE03EB18FB12FB06F3FAFDF5F5FBFEEDEBFEE30FE6FBF40A14E7FAF7F1FDF10E0301F7F2F8F7F705FF071010FEFDF3160DF3F7060D0A03FA0508E6F5D6F8040805EAE0EB080DF0F6E2F5EC28FFFE1112090404060BFCE2F8EA00E505FEEDF902EB080400F21205FBFAFB01F2F8FFF2FFF403F6EB02F52406F20BEEFFF110FEDCF3030203030700EB0DF927EE0FFAF6F603FBF5FAFCFFDC030BF708FC2FE3D61BF4080502F7F3E811FE0DFBEE1B0D02E4F302F1FEEADEFBFF030B1BFD08FD0CE0E8FC00F70C07F5FBE60A0914F6F6041419F2F009F9FE170FFCFC0B0BF9F9F80507F0F5F8FDFFFDE60AFB0C0B010FF4FEF90FF10B12F9060DE40522FFFB0F0FFFFCFA09F90D1506F1FC0DEFEA01F4F105FBE4000302F3F5EDE9EFFD17F802FA0A1BFDF7F4D503000A060D00F2000708FB00F9FBEBF401FB0EF2F6FFFAF1FF1007E1041F10F4DF16FAFC1E0FFB0008000AF4E9F9E6E90FD9FDF5D208FADBFF01EEEDF8EF05E5EA0A09E80AD707F0F0E414160D0CFAF9FDFAF0F80701EEFF01FEF3E5F4E2F12010F8F2DC0404F4EC05E503EDF7E412F205E10EFBFDFF11F802EAF316F7E4EB0C01F3DBF5E2080DFC05EB01EAD5180C0E28F4E70A26DAF7F1E70B10FB3EF80BF8FEE1020105F3F9E2E80DFAFFFF130BFDFD070DF60FF019FBFFFBDC01F10EFDF1EB06000600EF07FF18F0E902FA0BFD0DFAF20008FAF1040402F5EBFAF3F904FCFAFDF50EFCFE19FDF610EFF5F50D0D00F1EA0BDFDC05F90D1510040FF6F9F50FFC1C06F8F407FE0B0A1508FB02F4E510011404E7FA0BF2FDEEF80BF70EF8EA0CECF8E30EFAFEF3F3110D00EE04FB00F101030B03FAFE00011F0005F50DECFB050914FC0324FD0BFFFC030BFBFB03FCF80106F9F7F70B02FAF40309F3F2110B03F0F9080A0B0EF6120904FCF9FF03EC00060BF3FE04F411F4EAF3F1FDFFF5F1FB0EF9F701F301F9F60AF7F2FD0DF5FA0503F4FCF7F8F9FE0B07F7F8FE091201FE051006F7FA14EFE92429F21B0CF7F30215FFEB05FEF8FDFEEDEBFFF3F9F11216F3F2F1F42B0005DFD3EF1AF6FEFBFA0DF9EDFAF6FA06E4EB19DFECF80906F4EBEE0AFB03FFFDFFFB1401F8E507FA10E8000001EFFFFC00FA06F7FDEB12DEF4090903FED9F50B12EDF4FAFAF403EF0620E0031F0F04FCF30FE5F6E71400F80AFA1005FCF5FB0A0A04070C01EEE3F51705FB00FBECF4FCFBF40405EBEF05FC06FAE1061A02DA0EF5FE04E4E9DAFCF5FDF9F8F6E6DDF3EEFD06EEFA0A00EBEEFCF6EEFEE3F0FA070F01D1FAD10C000B0BEA0FF6FD031905EDFDEA08F3FB0BF8F3FE0303EC0404EAF701FAFAFBF330FC010208FBFFEFF909FAEFF9F20AF90018FDF9F300060701F2F404FFF0030C2FF81BFAEFF2F2F21705F5E6FCFBFEF621F8F80101DDE7F208E702DDFAE7DF051AF4EDF5EF1EFCF0FAFEF9E60FFCF7010CF802FC0A0CF31AF504EEEF06FBDFF7F9D603FE0507F3F706ED00FBEC03F100E3DD06F0EEFA20FB1DF9E0EF0DEAFFFB1BF003FC00FBF9D4F415F90407FFFBF6F00D0E02F4FF1CFB08FAEAFDFAED221015020FECFCE6EE0BFE05D9FB0313FCF9FC0B130BFAEFFAF1080807EC09FB081109D8F003E50DEEF112FAFE01FF20010115F608FCF6E20BFA010EE905230506F01CFEF10A07FAEDEFFAFAFEEAFC0BF304FBE01F08F707FB09F4ED10FCECFFF001FBF1F20A0709EFF3F3F0FF10F2F801FA0F0613FF09F90914FA0EFFF8FD0CDFE80406FE071CFE1F170ACA39EFFE2EF608FCEB02F2D61FFB091700F4F2FD10E80C0E0527F0020132F80C0C0EEA01F812C1F90FFE1D001E0CEAD71CFFED1B0F0205F4390527F6F20203EAFF06EFCBF3081DE9D425F20A100E0D000EEB07FE11D024DF0B0D06EC29F614F812DD0DD20FDAE10012E4FADAEC18092DEF0DF2F80ED4FE0CFD05F10E0110090FF3FEFE08000A0BFB041F06F0F0E1FC17F8100E09F6FBEFF91BF40503DF050B04FE17EA1AFDF7350BF9EE1109EF05EAEE030DFFF80E24080115E40806F70EF7E9F70FFF0D070EFEE3F4ECFB1802E728EEFCF303FF030601D0FC07F1FE05FB06031200F8F2FC09EAEC0E0310E90B090307F702F00402FD0E1605F4061AF40A131C03FEF8FAFDF2100DFCF6121A1F0CFDF5ECF6FB06F7FCF1EA0EFDF801F7A6090AF9F3F810021B040AE1FDFDF9E6EDF316F921EF0C0B0BFB0209EBFBFD1BFF2007F10E09F40FF7F6F100F905FEF8FEF318FBF9FCFCF704F40A0822FD0300E610F5FEFCF0E908F7FBF2FE1CFF09FDF50601F600D8E9F303F4F9EC1417FD18010AF4F9F5F909FC01F7E809E9F50DFBD41F10C5CBFE11E8F6200F090015F6170BFF0307051C07220BEA1FFDF101F91C23F7F7C302EAFC180A14DB08FF010556F8FE00F7FE04E9E60D03060B01F706E7201D0B0A1AFC18EC1B15F5F513F9E0FD10F51408E713EF05D10213040225F9FBF5F431FCE3E007FAF00E0BF2F31B0F1AF107FFB5FF08041E051309F712EF16F510EFDE0110FFF4FDFF150FDFF7FAE80314EB03170D07EB02F30115FDF900FBEF0DF808FCF6FBEC03EEED11F1FEDBFC1B14FDF0001A01E7E4030221E20FFEF5C71F110F0F17F2EA0CEFF613121C16070FFD0602FEE7E4FCF623ED0413FFEFF5F9EBFF20F805F6F31210250E1AEA0514F50DEA03FDF9F4F4E5D6FC0AEBECFF09F8EEE9F7E20E0A020AE6F4EC0D0D15EDE0EEE30413F0EB00F4FD1DFFECECF401E60518F4CAF4FE1BFA07F1041B04F1F30C06E7EFF5FB0A0F041CF4F8F0E4EEF7FB1101FCF511001C0FEB07FC0D05F4EFF50A0FFE071814EB0102DB10130A0DCCEE15FC0DF3F3E5050BFDF7ECF01F22101B0E02FC09F00907FADCE7F814FAEBFEEFE40DFAE70004F6F111EA06FAF7E4F9F7FE00E6E4EEE802DA23D7F7F5F516F2E8DC15D73001FBE52BF6E1F817FD0C2F0D0A0DD90D0900DC08E53303F3EAEC06FFF4E9FCF2FDF804F604FFDAF7FAFCF50D05090601EC131C0D0506F902F7EA02F81B08F4150110FDEBFA1505FB16E506F206F2FD00FD2202FF14EC00EB05F80309FEFA01122A24F4FB0107F7FC2102FA00F201CC15061BEDFBF60DF21AF0FF00EEFC09FEFB1103EF08FD04040AEA0402F8DD0515F7FAFC07FBF800EEF6EBF5E4FA0BE5F2020EFA01FE000210FCF9F90AF7FFFD0202FC0CF8FE07E5EE0BECFEE10EF5FE0C2604F703E2F101FAFCF60011020CDB01120D01121EECF402F317F40032F0E5E309F4071803FB11FEEED807F0E809F413F6D8EA0CF6EAF2F2EC1E0422F7EAF32E081D02E711E0E6F9FD111519DAF6EF010CFBE6FE0415E238FA0403FCE90FE5F216EAFD080B070EF71DF7FCE1F7EAE9ED1C07F5DC19FAEFF809FBF027ED07030FF5F50201F8ECEDF110071403EB0F1C0307FBEEEDF7050CF804F2021706FDFE070D0517FB07EF01FBF8F7ECF2E0EDF8FDF9FA0619E5EFFAF4FA130600FAEB010C26E9F8FFED11E4FCEF03EE0AE9111601F5E7FB26FFF3EB140B0FF9EBEBFDECEFF8D8220313F7F2E4D3D202F40000E8EAFDFEE50EF9E423F602E3FCED0108FF05FF060407CF05E5180EF206EF1EFB04E5D6FE0301EBE8E8391913DBF504080107F0F5FB07F21DE60B14FCDD001D02FD1213F023E91306E91A100606F011F803D82B1005F4FFF843FAE703FA07F3F7F8FCFC04EDFB031E0812F30F05FAE2D50EF6F0DBF22812F9EEF5F7FD030CF20E0412E3FC14E2FD251A14FD04B70BF21DECEF000BCE0C11F1110709F9F7F9E700080CF0F007FC18F0F4F401E1FE11FFFE0AFB0802FBF71A0014FE0721E4050CF8FC0F20F406000B0CFC08F71304F11607E20FF0FBF9061B04FB0B13F8EFEE0E0D1206F40DE5011712F7E7FCCF08FA090CF9E00EFEE230F5E3E8FD09EB05FAFF20F4E316FA02F004F50BF401FED302F52524E9F8F707F0FBF0DCE905F2000010F70B0CFB08F413020510150912F501F8FE000408F7FDF3FF00FCFF100704FBF9FFF5F8F20D0EF8F2FE0CF6FDF4F3FBF3F1F90F02F544FC0005F40BFCEFEC03FBF8E9F90BFA04EF01FBFA0008FCD415000EFAF0ED00130709F6F527FDFF0501020305F8FEF3F90F08FF071212FD080CF7FC00F5FF09F10E11F9FCE90EF30A0D0D01ED0713F20BE02808ED08F309FE02F403FCF7FAFB0EEB0115F609E106F6EB3A1EF4F0051EF41604EFEE0DFBF1050FFA111804F80111FDF9F813090DFADDF20005F1FE2603CFF4E7F60DFAF7F804FDEEFF0612F9DDEFFFFEEB10FB2200CFEC17011509090EEBF608F3ECEEFBFB080CFBEF1BF4E8F4F80AFEF802F808FAF8FD04EF07F10A0604F7F108EC0BFEE108F7EF0DE70B0CE52409F007F7FA141525EAE9FBEFEE0FFDFDEE050CE8FBE6FD0D1AF2EB100DE62006F3ECF3E9FEF8E1FBEDF7F310FEFCF1F915F1F707F11E04FA0A03E9EFF60EF1D60D00F50B00E606FEF5E5F60E0107F10201060D07F108031AF70FF41A0700F418EBFEFE010D0605EFEBE8EB130401060903FB0FF604FC02EF0EF30D03F9120AF6E6E2F302FD09FA12F1FEFF020E0007020CFC07F3F20605FA2101E3D4F40706FCF91A0615F8D9F5E510EE21F5FEFFE817F920FAF70ED317F603F507EDFD0CFF01F50716FF07ECFFFBF80419F5E50B02F61605FB02FA01001816F802FDF6F8FDEEEAFBEF13F61EF4ECF8F3FB0319F8F5F70C0001FBEF00F306FBEE15FB06FA09F90B0100E50611FFFCE9FCEDE2FBF5FC00FDFA090AEE2017FC09060800FB09EAF70604EEFC14F3F801F8FDED0C0F0C0500FCFCF5F7F7F3FC9CEB170006F406070D0D001A011502F9ED15FAFF0A1AF1FF110412F40C001BF807111AF2E8F600F6FF33ECF609EE06EC17FC06020DEC0308F7FAF5FF27EFF9F816122417E9F4FF0D0C28200BFAFAFF0A1005FAEBF3071B0516F9FE0422EEF206EDF4F3FBF006DD1D00F202ED17DAFE01F71102FC030A16DDFE0318FDE2F608F2F4071EF702FD0BFD02080B0BEEFBF9DCEC0605FAD101F5F5EBEC0ACD04061200EFE0F3F5EF0EF80CF804FD070A06031F0DE1F7F90B2316060C08FE1BF1F8EE07D7F91D0E150113D7D500ED091BF00FDA08CFF5F9F6180FEA1910F3F0FA14F8000214E32B25EFF70112F8FBF731FF0216F8051304090513070EEB1FFAF7FF081BF90F0EF10FFDFD09EFF20D13DAEB08F6D6EEFCF7FED40906F7FEFAEC1EF90CF3EB09E302F41500EA0FF4DFFFE9E50AF6F408DA0501F804F900FCE42D180CFCD3F2F30C141AFCF0DD00F0EE13F6EBFCECF2F2EBF504EDFF1AEB273D07D9EE04110EE43BF21BD90E00F302E9231A00EFFDF2EB1405EE10110153FA13D8FDF4E8F4FE01F7F01EEAE61009F3EC23FAF2D80E0006001AFAEC13F100DE0A08F70A0507F826F730F853F9E907E7050F0628F6FBFCFA1B0A0614020FFD00FEF4EEF7F0000FE6F419E307FBEAE3F31AE408FDF5F5D3EA04FAFD22020409F6E7FAF4FADFF700EC080BFBFD1EF5FDF506F0F7F8FA02DBD701F50DDCFB08F9E4F8F40A02C618FAEE05F6E4EF0400F1F10BFDE824FE0317F6F805FFFBFD0C00FDEBF8E1EC051FD51BF70E03F00E0E0209101F19020BF6F1081A0C0204201D02FBD9EDF2F8F7F3E724F7FF10FC2EF1FF10E4DFF9FDE60101011AF50005F9EEFF143611ECF20BF2F5EC1B0DF20808FF05FFED02FEF21EFF0B0B0E05F1FD03FB1AF1E90C0EE6DB0CF8FB12130FF20A0F2AF916F40409E4F81002F60B09F01C1BF4E7EDFE0B04F801EA1A0B15F9E6F20D00FCFE00F9000C16E7EA0810F11CE905F80DEAF6FD16EE1103E3E707FB02F7FD042101FEF7FA12ECF903EFF20AF4040C15FA0E161A0AF2FF081DF003F810F8F419F2FE1DDF00E506F1FF0C04F20EE7E4F808FE19EE153207FBFA1B08F605EB1609FA0A19F5EFF7BDCEE602FF04CE011D02E8130EEAF8F50702F5F504090D0AF309FAFB17FD0AE7E9FF0DE70909FFF2F7ECFEFB070506F809F9ED15FFF401FEF9EFFE0C0CFB191C2223F807FDEAF0E516060109F3E9F6001206F2ED0003EF001D11F41E09FE0218F8150BFC040E0E04EEFF1B0601F80802F4FFF4E903F2F20B060802EBFFFD12EBF6F3F7F7ECF9F90CF20701FCFF03F30309080BFA07F5260AFB0404FDEEFEFD050CF819010A03FF070B130202F0E80BE809F6EA080B352312F10E0D0C09FDF50B150A1F1CE903FB20FE1AF70004E4DEEEF408111CD6E40AEDF6FF0EFC1BF900FF0215F7E6FCEAF612F6D60D02F1050905F3F8EBF6F807F8F6F308FE04FCFD0E0EF2020B20FE040C2501EE1407F427E502080E03FBD30812FA00070DFF02E7E60204DF00EF05FA050BF2EDF3ECEEEEC2F2F3EFF301FC060DFDF507E7DE0EE90205FAF5E6F601FCEEF4E4FFF606E9F1FFEE1C0FFFF9FA00F022FBF71D0BF9FBF606F9EEFBF0EEF6083A100FFBF30B0AFCF2FCFC0EFBF70EF6FE05030A00FC0A03EFE6FFFB0606EEEEF2F00AF20EFD060EFEF920EBE9EEEFFDF2F6F903FB27F1E6020B00FD02F107FDF7151621FFF5F71EE7161210F30800FFF2FAFEF2EA0500F7EDFDFD030002E40BFC031009F903F9EDFA10F601F70010FBF7F50FFE0209EFFBF5D001FD09D90BF2F007F7FDFDF7FAF100FEA608F1F9EFFC06F609040D14FF1608EEF40BFD071509FC00F10613FA0F012509F4F008030D020504F708FEF918E4ECEDFBFFF9EC0116FAFA0CEFE70F160113FD07FC162700EA0B141306EBF3043E0906E91C04DCF3D9E60DFB09FCFDE50E0C0CFE0501F60DE819D3F4E51B16EBE0F2DCF209040106F2F9041506030BFBF829E819F3F4010FF704FEFB07F3F4E9D6F5F5EC19FBF019EF01FAF902320405100EEAF804F408E506F7FCE406ED1F03FEE61D14FBF3180504CADC01F9F90D110D1B01DF101122E9E3FFD1FF200AE4E9E60A1419FCF359001605F21529F637CE0500030AFF2819EEE3FE03FADCF913FE150F01F30AEE06FD170A05FDF10DF9FCF1F423FADE1111FA12F2F00B13E8FBE130F5072321081A1306341D05F1FE12F90B021B161914F112FA05E9F8FD16D5001729EEE6FDF3161012FE02F91107E80D0E10F3F5F40AF401FF1C11E7FD03F7E9FD0708F70FF002F31AE7F2EC00FE0BF2F6F4F2F811F405ED090AF1F906FE0FF30CF8F2F104FD1302FDF8EFF502FF02F5F8FEF0ED020705F41AFA0310F60D0EF411F7030BEE04F9031C01FB070DEF0BF8F7030209F408120FF118F4ED0BE8FE07FFFB03F50EF4F8EE010903FF0403F91210100508EEF6EB2523FCF5F2FCF0FC05000A19FFEB09DAF6F100E2EA00D5FA1EFBFF201DF9E6F0D3EFF3F9F211E8FE0DEDFA0AEE12FCFDF62116F30D030105020BEFE700FDF5021B0E0EFD0EF500ED06F30DF801EA10FF18E6F0E5032308FB0B0B1107030ADA0EF0ED01F905EF04FFF6F10209EEF3F715ED0307F90004F5E4F50AC5FE24080E0E26FC0DE6FFE4E908E5F7FEFEE5F7F7F0EBF5E7F3F9F708EE030FF4EFFD1CF6FA15FD2AED0D0001FEED08ED05E11707030007F20DFD0FF700041601EC0CEC0906F8E51A2AF60304F80CFE1A0D00F9F329E8F4F9200D0005EBF7EC100EF4F3F7F3F60202FF0FEB140AF51B04E0FC07FF2405FA17F4E9F4F516F606FFF705E602FB0201EC24C91AED1708FCF9080406F904000A05FFEF0407F2F615F3040AF5FA12FAEFFF0AFB06EF02EEFFFC1B0C04F8030309D60D020C03F0251EF8FB07FC1A03F7FDF4FFF7FAFC20F7F4FF0201F1F3F90F0DF204F7F0E707F2F6F908F1D90815FCEBFEFD19F4EBF5E5010BF7F8FA0BF2EFF7030B260B06FEFF0505F5F3FAEEFA09FD090705FD0504FB02F8FEFE01F40301D1E2EFE401FBFEF3FA22FCE2ECF9F9F4FE0BE1F3F60B09FC0C13D10807060EEEDEF802FF050B03E70FFAF9FA03E6EBFC01FD10020016180ADA01EF07010403F4FAF40D06FBF80A15FB0BE9F90E2F0D2BFA200DF909FF060BF9E502EFFBE7E907EF16FBFE1B00101CE913FC0C05FE0A14FEF2E9FC0B1309F5E9FFFAF1F401FDF6FEFD09FBECFA0CF604030919F1F512030A1BFE010201F6EFFDF6F5EFF8F1EF040609F60AFD02E8F103F5EFF6220E00EEF300F70705EAF807F9F503FB04F90804E3FE00F806F1EBFDFA07090BFE0CFD0DFD00E9FD1FFB1406FDF6FE030C12F2F0FFDBF4EC000100E507F7F2E2050B07011C0B07D9DDF7FD0113F4011DF3FC130D0400001BF808CEFCFDE7E9EEFCF80B0A0ADFF207F208F4F1F0E609DFDB0AEE14E6DC09FDF0D70A0C16F3320202F402ED010026F20E0DF40302FAFDD9F0CF0D23F8180706F6FCD7FBE5FB0B1C060E1BF111050F00160AEAFE00FBFD0203EAF00C012B0DFEEA100FF30000FCE800E7FEEFE602FEE40FF51918EEE1D704E002ECF3F9FAF1EDFB1209EC0AF80F08EEFC2305DA16F1EA11FAF1F9070CF90B0FF2FDF70FFB02FCE500EAFD02D710EF0C17ED09F6F808120CFCEC0AFC06160718140B14F6EDEBF319020CFF0305F40001F3E3F509F114E10804E217FF0B0005F3E609F30B04F627DDFEF5EFFAFCF8E302F5F0F6F614EB0001FFF906F317030A03F500EFE711090AFDFAFE08EFF814EBF4FC04FDF9F01DF6030DF3FAFEFA0906FAF9D8FC15F50804EC0FFAE70315EC0417F4F90C01FF0DF7F1F6F5FB0400FE03F805F6FBF6F8FF0F1DE70200EE19F1001230FD05123503EE00F6FF001AF619FB1701191AF1F4EEEB031D142704D9F0F7F601FAF2E90DFC0313F3F8F6E7F8F0FB0ADAF7F70218EFF22FE50412F0FB0633D60CE409F9FDDDF6FBFB1CDE1BFDFFFCF4E6F3FC08E80EEAEAFFE0F010FBCF0CF70106FB11EC0DED11E7CF05CD20F408E803F8FDE4EE0E0440FF0900D70E12FDF6E7F40E0BFA19FFFE44F606EE06130FDA11DF07F5F7FA07EF14D7C8FAF0FAFDF113FEF7FC11EBDD17F608F60DF30305FB08EC011905E7EDF30715EAE5EA0B14DF04EDF5F3E301F4F4D1FCF3FB0904E61111F4F60115DFDE040413F1F7FDD904FEFBFB08C2FA04ED00050723E612F818F7FCF9F9F7071123ECF5FD1646FE2106F1F616F0FE130709FAFA17BFE7F5F2FCEE03EAEF13F9F10710ED1AF30EF70F0BF8F4FDDE0B07FAF21500E81BEB0A1DF2F503FCD6F218E602F20D06E60CFC0102EC06E706FF0E10E4F0EDF2F5032C1F0B1007FAF00D17F80E1107FAFFDD03DFF906040BFCF8F314F9FEEDF411FDFFF7F7EE17FB0A06091CFA0200F7F21C25E5EE070207FDF8F5F60618E6EC0A05CEFEDBFB00EEE6FFFAF8FFE902110914000400F00F03121E23F40FFF050D021D27F2030E05E0FFFC23F202F9EB04FBFD04FD0605DE0107FAE6F60E00F30CE92B07011711F820061108FDF41A0E19FD0D18DAFA0600FD09F31114FF0BDCFF1A3DF102F7F1EAF3010BF3F6E1F6F2FFF2FEFEF714020BF4E9FEF9F50604ECE40A0702FE172C14F20C1EF0FB06FAE308120A0E0B150D02F5FEF313F823F209F306F5F719020C0D07FFF306F40A09FD090316F7FF2432F1FCF610EB0AFFF002FD01E502F622F61603E5FA12F2F700050208103201EE1304FD09020C0817F407FF02DDFCE0E3FA1D0413180002FF0FF509E4F7FEF8F2FE240709EB0108FFE5DFF4F700E1FC06FCFAE8FC1794BAF906241801FB0AEC0816052CE9110CE5FB0707F021E1F7123B1C2C37EFF70F18EFF2E2F7D0FB0DFE00E30EF405DECAEE081C1E0B1EEBFE05F0110FF60953030FF7DEF700EF07120E05F41813091B060FF50CBFEFF61831190624EFE2F1FB012814E9E52B03E60DFE16EDFA0FF613E10115EB0AED060B1BEBEDF001F9EFEAFE07E20B320C17D3011110EBE3FBD4F7E80407F303EDFB15E61003F8F1F0FAFB00FA1306F702020202E9DEDDB404F429E4341619E000E7E9F8FAFD05EB1308F5F924D5FEF703F107E8E0E3F7080C1CFA06FA08ED1406ED1210F43D03F40011E60114E30FD5FA080704E2DF0FF000FAFBF7FD18FBF3F60701D400030B071101FF07F20AF80EF509EDFA0504080106FD0ED4FFFA0A18FD002422F5ED231DE7FE039AF112FBD8080301F9ED0BF60F00190253190117FF0B08FC09070930E001031E0CFB07F708DEFDE527FDF1021B00FAEC05FD2AFED605FD14290407FFF305F503FBF905E4FEF0E5FF02EFFE14F402020901F911F707E2F7E8FA031512F818F5F13BEFF6F803F501E5EE0315EE1911F910E90008E5EF10F70EFB0712D30DF4F7EA14F517063011E9FCF815031AECDEF0FED5FFF0E8140AEE28FFEEFDE0250611FF0E0504F8023CEC03E6F7FEF2E9FAE3FD1CF5DAF5FBF60B020008FBF615F6FC13020717E407EEF6E7F6F81002FFEF01F4F0EDF4FA01E50BF5FA0D0A140E0B1F09F3F8F4080405FAF0070105F107D2EFF002FD0DEAFA06040D280F032F06EAE9DCFBFE110C14F20504EBFEDEF207F5F707FECBF60AE7F3F0FE1AFA0E1B0344E806EDF4010408FBEBEF1CF7F6030400E4E4FDF20C06FFFAFE2608E60BFC15D811F9EFFC0CF2F902120A18051207FD0FF2FC0202050009FE031B0515F348F6FFFE3603FF19F3FB07F014EBF5F0D80EE7EA0905F60B1FF2EF03F90FF2F9FB15280610060DF7000013ECF905FC09FC0D1515F705FEFAFEEEF11514FC04FF0502F60505FDF223FA0C29F80EF2F4FE19F715FB0CFF05F4C5FFFD07ECF6FF0FEF03FDD7FC100200ED1B00F700FB15F30FF8EC011EF61109F801000AED24F00D0311D4F40E04160DEAF80BEF0EE6E3EFEA0DFAFA06FD040E0AFAF7FCEA07FE100007FFDFDA47E3F6F0FA0EF6FEF809F718F6F519EEDF0D0617EBD609E9010B03EC09FBF6E1FEF4E7F6FC06060F05C701020F05FD06F3F7E3F918E8D2DFEFF4F110F0EBFE0601060DE2FE08F50222EB080909FBFF0004F107F701F702F3FC330BF6040D0BFBF6F9FA040406ECF811EBF32BF7E804D904EF0B000CF70A05FB07F4FB0DE7F6FF19FE25FD06FDFDF3FBF900010C070701E8F7F7F50003E8050A090A14100CFC0DFCD7F2DFE808DDFE0106ED0316FC2414FA1ADE0DEF081D021016F8F8F81506050209E9E8F3FDF0FE0F0AEA0E02F017F1F505FFFC0B0307E9F109FFE5F1F90EF9FFF0F9EE08051706E611130205060DF9FF03FBFF0D09F916F8FBFB08EDE906FAFA01F1FFF20419FC0313D21C01ECFDEE0CEE09F9000AEBFEF2FFFEEAF602FCEFFDF2FCF9FFF9E9EE0303F80CFB0D05020716E80F0202023E0EEEFBF4ECF0FDFFD307140C0409140D0EEDF700F104F1F8EA05F1F5F905000702F907FDF90204FCF50B05F602FE0AF0F9E332F1F8EE0E022D0808030707F1170BDD070AF8F004F6EFF8E6FEF3061605051F21F60B0402F303FCEFEBF8EDF3060500EA00F20307180CFE000EF30607F706EEF4E3FAF60DE903FD06FCFA000DEF0FFD07FEFDFBF5F7EEE7F7F3FA02FA01FA0308070EF91A12F1060EF7FD030502EFF009FCF50503FBF3EF0000FAFFFBDE0DFA040DFBF9F9FEEDFEF5041107EBFFFBFEF81505EFF306D600E70601F9FD0F0C0C0D08FE00F2F6EF2B1207000D05FCDA06FA0CFBF2011114DF11FBFFFD05EDFCE6E9EAF512FD05F1060F1DF200F9FD07EAF3F5F70BFD0605F3FAFBFEFBEF0D0AFBFF0A0FF60BF6F90CF61204E7FCFFF8FF0BFA08E8020DDF0CFDFBF5E407FE04FAF8F3F11E11F4F9F4EE0701F819EAE9F90DE001F00103F60607EF1A1808FCF822F209EC1DF8ED040D0BFEEA090E0EE10E0311F1F80D1204050BEC0AFA0C07E42B0305F6FFFA0CFB0B07020215F8F7FA100A0AFBFE0CDBE0F303DE1F07ED1D0EF015F5F4E617FCF90DDCF8F00CF5FF10F8FE061CEDF0FE0615F10CFDEEF3120A05FFF30215F215FC0AF1EAFC1AF609FE2A0F1604EE04EE0B0010F6040B1E0B18ECF30206DA19FE08EC18F42012FCF40511190A101E19FA0DF5EC28F4F6F210E7F401F903F7090EE01824F517EEEF170CEEFAF4E1F5F507FAFB1F12040F030AFFF2061607F1DC34F2F3FBFB0F13EBFB12F803F8032BF6F0F108F9FDFA1CE8033222FA05F9FCFB01F5FAF50416FF0FE1F7FA0EFDEEEE09FA121D01FF02FEE81A03E50800F2001100F00704FEEE0AF6EE0A0EFAF4F90002E1FA1003EDFFEAEFF1F6EA05FEFDFBF9050B06FE1808F60BFE0201F90415E60C07F7FAF7F5EEEE02FCFBF9E808F1090FF8030215F4EDE709FA1C05F8FAE4FFEBFDFD1AF3EB02F4EDFD06FEE20A1AEB02F41605E8F40108F20EF10AFDE6FEF7EFFDF6FEFE050027F8FDF307031D0718F5FCE60DFE07010805150300F1FC180A0AF40C0AFCE4F2F008DEF706EC01FDEFEBFC1110E7F1111BFCFA12F72325E2050902080C00F8002607F905F1F508060B19EDF0081BEFF90308EAF0E5FF24E5EED9E802E8FAF008EEE307100AE8F913FE0605F8F50ED0E10EB112F7EFF407F6FE04D9CFFE19F401D8E707FDECDE0B04ED10DF330EE703FFFEFD1F190B0608DFEA100515F809FC02F2ECFF0BE3FE10F6F0E8F6FB08F9FDF500E1F800F2FC1AFDF71804E1F22FE0FA0C1DF7F5DC02FA12F90F06020FF1F506E1FB070AE702E3E102F3DF120F02060E06E8EB0CF72401FFEEFF080304F20DF113FCF8F4E930F7F50FED00F52611F800F1EAE90EE90810090E0BE7D9F9F508FEFA0FF4FEFCE9F30B01FEF0F9E0FCD5F5F118EBE80E000015F60E07FA1A0AEF021708FE08060903FC17060914F6EA050315FA0B0D141E09F2F2F8CEF5F8FAF7F40EF5F01F0D18EF0CF8EDE7FF14110607FAC7050306031FF7ECFF03F10206E2FB2003F3CE1C08E6101EF50009F8F7F810EB17F7F21411F5FEECFCFFEA0B0FE8F2100205FE07F3E2F405061D03111004F926F40801FFFFFF07F3EF0BFDDF03FA0B0DFEE80C01FBF40DFCECF7F313FCEBFEFE0EF50D05F5F5FDFC2B11FA150CF005FC05F005F9020F0601FEF9FE0B09FDE1000CEB020CEE0708E011DBFD0506FC08FBD80EFC200EE7EEE8E818F4F0EB07FBFD07FFF5090E0CF1F4F916FA08EFFFE905E5DBE8FC29D1FA1AEA10FC0FEB03FD140D08E103DBF806E9FF02F7E424EF0AFD132302E5F3FE06FEEF04E5100407FF17F90209F20BE4F00B0BE800F6F5ED03FF0B180510F6FFFD02FFFF1828EE0AF10DF8D90AECDA04FCEDEFECF1F5E6EEF4EE0215FAFBF3F2031DF5FFE31ADC1AFD01F20FFA011CFCF908F109FFFDF303F61C0F090FFBF4E50111F9ED01ED0200F90207E9DA25F8F10113E90201D71FFE2313F41400FE1717E703FEF90203F905F428EDE806F201EEFDF4FFEBFFFC0002110305F513EFFE0FF7F0FD070FF20AFFEFF02B09FC0812FC091205F90D0A07F10C16EEFAEBFF0B02FEEB120201FD1000DDFB0A04041807EDFA0EF3FEF30A03F9FA08F30CF60003FD05DEFC030A08FC0DFFF1DF080AFBE510E90D03FEFEDBEDFB03EA030301E8FB110AFA11FFF5FAFAF2050EE1F6EE11FC0404F0FFF004F0DB01EA09E21403DBF9D40E0CF70A28F909F0F3E9020B020105E6F2FF0BF8F8F6F0F3E2FCF80BFDEB06DA2D12F3F4F1E9F8F2F8BFF300FAF8FEE7150DE7E1E2F1091FFF0A080F18FAE5E74F10080AE3F3120E11F7FD05FE0C0018D8FCF1E20FF7ED23FA050EEED5FCFE092225F2FE15EDF1F50C4510110FF7080BF00EF2F5E9E7F0040E11E800EB071D1919FD04FCF50707FFF8010CD40016FA0717FE0EE6F7FC0318FEF4FAEC370E042807FEEBF603FBF1EDE408F3FF13FEF0F208F30A13F926FCEEFD0DF0E30404040203E5F5ECFD0A0303F206F6FA18EE16F1080902F3FE0DF9FC00130B1517F0D5FF1EF3F308F10713082AF1F71A0F170CE4070BFD0F0F0704F6FE070AE804F70AE8E709120B030412F102EB141009FAFDF8FB0312F8EEEDF3F10A16F801E30810EAE7DFF3E828E808DBF1F90FEE01F0F2F6E4F60E20E2FCE721FAF81CF2FD280E04F805230C0814F1130B09E9F4FEED04ED040212EBF2F1F9F70107FE050901F812020400F2EEF2F71AFE16F6FD01FCFFF0EFF512FEEE1501EC07F7EC07060D090BF3F008FE0D0F000025FDFA18F509F116000F0C101A0904F5FDFBFAEFFEE8F2F9070111F5FF17FEF2F309FBFB050B06052509E50809FFFF09DAF5FC030903E902011009EB0513EC0CE804080100E90E020A09EF020F0EFE080FF4FB0B0C092614FE0BFDEE02F4EF02FF0010FBEDDDF20702F6EB0F110AF9022404F405F9F0FA01F3FA0AEEF001DAFE0804FDFC00DC0807180A0716D9F9F4F5FD2414F901FFF60CE5F701210F12ECDFF6E2F22AF9EB17090117F4E9F204E014FF06FCFDF7FA11E6E706FB0BFA1809E30612FBEAEDE410F414E71420EF0DF1F6EA10F9F31403DD0907040614E9F6D7E0F90617F00AF0070EF9ECFDF3FD010BE1E20A02E9F509F603050D02FB10F8FB1804FCF20202EBFFF40811FD00FA1101050A0E0A09F5030D0DFAFBEAFA0CFEEDFAF311080507FAF10001E8F110EEEE07F708090002FFD60E0403FF180EF9F208E904EF0303EBFED307E8FBF5F5F1FDEA00FB100EF30BFE06030B09F61BFF03FF07010FF00020090CFB26FB16F223E9081903000BF8F5F0E414F01EF9E31EE003F1D6F8FEF9F6E8E6F5F2E30DF60DF1E4F9F60F2D14FAEAE2E4F60DF8160628EF010711FFDB23F6EDF1E4FD0C0D21EB02FAEC0A0811DD06ED0F20040417FE1AEDE50CED1BFFC22B010F0BEBE6F003E1FCEEF8F306F3E9F1120502F02003F9EBEEFD120610EF0104F6F0F11817E9FCFFFF04F3FE020CDD09FAFCFB1104E900F6F0F8FEF101E9F4EDF1FB08F5F20CE7FB0905F9D800EB27FC101DEF00FDDC2C04E5FEFF09FEFAF5E80112F300FB09E10BE8FDFEFAE1040B1E0D00FF0909FCF1FB0003FBE6E6E91CEF00E4FE2402110EECEBFAE6190022F8EE02FCFCEDFDFCFF02F5EDE4F7F8E305E90EF7F9EE0F10ECFBFAEC0408E2DAFF12F7EC0E11F10EDF11F6040AEEFF06020DF911E7051BF9120CFDFC010FF70C08EC11F6FF34E30DF6090EFD02E8FA2EECFE0707201B1100F70AEAE80A08DAEDF6FBF0190FF8FBF90F00FAF716FCFD1603DEFBF7F9FF14E000180DE800F0F707F6060B06E6090A07E8020CFCF0EC09FA19FAF5CDF0000AF8F8F90EEFFEF20A01FEEC1309FF0CFCF9FD00FA03F8020EFDE70CF513E3FD0407ED1309F50E0BF4EC040FFAEBDBFCF9D1060D15F116FD1B07FF16FE0503FAEA01FBE808060FFEF006F607FD03F2FE0AF31A06EDF00CF3F8DAF903EB07EAFCFF0504F5F8F108210AF1FAE3FE00F7F000060514EC2BF604FAFC0E0D010E0AEA0E08FB000D0EE50002EC031FF908F309FE0A0BFC0BFAF108EAFDFEFAF802F40115FF03F40003FDD90D0C060A03F2040FF6E3FDF4E7E70B1103FE0CE61CEF04F30AFDF10801EAFE1B09160A0AEF0EF70CE7FC0F1DFA020507FF0808EB0BF1EF1C00EEEBF2FAE901F803EAFB07F00E12E5EEF1FDF60CF603FCFE0DF0F7080DFDEFF80B00FE10080205070FFA0D00F004F2F40ED70FEFFAFE08F105020106220D070FE80DEEE30E06F908FD02F0FBF2EC09F907030212D6F1FCF60C11E9EFFA09FBED0FF010F6F9FEFF00E6DF06DDF8FF00D702F2090AE30DF9FDFEF0FF0DF5EEF80006E80BF80602030AF4F7FAF31DECFDE10300EFEDFB09F70B0908FCF6F5F8F6FDF4F9060809010203065103FD09230DF8FFFE3808E5F3FFF3F0F9E8FF0B08F9EB0812F4F4E703F3F30407000200F5FAF6F7FCF6EBE7FEF90CECF0EBD7FAF2F6F4020004E7F6F50AFCF3FD1BFAFBFE15FC9F0F03F1E7FD05050F0A080707EE17F8F20F011AF5660BF1F3F8EEF50715DE07F5D3EEFD05F2140100070F1105FA12F3EBEF0010F800F9FE11FEF408FF0A1502000006E5FDF511E9021616F707FE01030A0D08FBFDEFE5FFEF0DF8FBF3FCFBE60AF91E11F0FA060BF921F2F901E2E4F301FAFBFBEED4F30419FD07F201F00C0204E50804F81A01F2EAF7E5F5EFFD02FD05F9F5FB16FFFC11F70DFFF903DB17F7F6ED02E7E5FFF5100AFE0506F800F8F6D9F7ECFDF4050A08E3F000F90803F6ECECEE05FA0CFB18F30F05FC011917010CEFF6FAEEFB00F0E8F6F405F3F102FB10F9F50D050DF0F9FD3B02F711FEEFDDF8F20707EF09ECF5FAE90A2306F00808010005FDF301FCE3F8F8F4FB03F710060711F1F70DFFFDFBF8F90CE7F10EED010501FFFEED01110102FDED0EFDF7F0FCE402F1ED03F81307EF0FF609F20705FD0704FDF5160702ECFD231AF1F906F1F9F5F9F7F9010E02EE0B13070407F10FF7F0100907F5EE0609F008FF070B1E06EA01F6EF13FCEFFD09FCEEF6EF06EDE6F6FDF6FFE7F50C0008F001F9F806F109FE0511E5F7F74AF7FEEF0204FB030CFE040CF6FEF0E8ECFC09F5EC1109FC0F06F501EBEBFC0D011417ECF9FC0AF602FE090EF10E07051700050AFD0CFCFB03FDF7F903F301F5FA04FBFA0CF4F307FCF4FFFAEDFFFBF6F7EA03150A1006FAFAF10B02EBFBF30B08F507FE0214F7F9FCFCFEFBF404000A0202FCF0FEFC09E917EDF60606EF1717FB05F600050B0207F004EDEF15F3FEFAF312F019050B0E04F806F8F2EFFD1A041B0A09F81912DDF10A0004F11A120103F6DC19E6F208F3E7FAFD10F81615D8F202F10AF3EFF0F20DE812EFFBF9F4FE150B31FEFB0909100EFB010B04F0FFFB040205EF20F900FAEB0B0D00E8FBF60CF2F211E71B06F103F3F8FEFEEBF8E4F1F012101FDB17F8F8F3154B0BFDF10715F6F5F3E6F30202F30616F7F3F204F4FC0EF90BEB0002E9E8040215FEFAF9F8EFF40CFBF1E80AF8F6F3010BF3FBE51606FA01F2FF03F8FB00040BFC0201FE0A05F414FFF9F9FFEDF7FE0EECF00DFD060BFD05F7020B00F3F1FC00F70D081008F704FD0AF8F50BFBEB0701050E0411E8FCEF07F9FC0E05FDEF02F318FD0305FBF7FD090CFF25FFFBE90CE9F407FFE7EDF709F1FC0FD5F9DEE3E30EFFFA02F604070EFB04E70DF4112AF9FBF720FD05FE05FFFF0E11EEEEF007F60107FAE8EF1DEEF11EF40CFE03F7F3F705E20F08FF0407EC05ECFCF0FDF1FA11FB00D40FF113FBF71BF2EAF3EBF2FCC911F3F3F7F310FDF804F3F803FDF809FFE9F5ED05F90EF5F3060FF6F8FF14090710F9F50EFF12FB05FCE703F90BF709E7C115FBF612F20118F32A0CEC0C00151AE915220CFF0AF0DDEAF8EAE9FF2AF8053DF40C00C20EFBF915D9030D16E0EF33ECD5EFFE1AE8261CE1F404DC08F0F5F5FDFAF8FFDFF9E0FFFFFBF90C0308D3E2E6FC0AFE0E0B0FEB200019FB881503320FF4021A020605F601DAF52F0514F314090CF8011103E5F70210F202F80DE3FB0AF110E615F3EBE700FFF026FBEB02F8FBFBFF2907F521FE0132FCF6F3FCE1FCD6DBDA06E7F2FC1B17E2ED0FFEEDF7FDF808F0F702FC11E5F30803E1F0EA01DCE7F5FBFF11DFFDF5E9EE0FF2E9EDE9FA1800050E0B120002DCF9FBF1FE14FCFB0CF2F51806D3F4E8190B0712FB0617F10BDCF60BECF826E6FAFEFCF3EEDE091F000CF700FF03ECFCFAFEFBFD02E8FDEDFE2710F20607F0FB12041208F1F5080613D4F7FF1319F9EC05EF08E910070EE3FA0401FC02F5FAEE0026EAFAF30BFDF801F60DED11EADDF0FF01FDE621F9ED12080DF30EF92107FAF1EF08FB0EFA03F6E5FCF3F80307F40EF60BEA1636F707050D080FE6FEEC0C05F7F9F6F108FA07F7F6100C3008EDFFF9EBFA23EFF36607FEED040803E7FC07EBDC01FC000604F7F10A07EA0400FD0506F823EB00F202F107180CF3EFF610FD12000410E3D7F4ECEF0FFDFF0DFF05F201ECF7040EFFF7F8F80BE200033900FAFF1DFAEFF003E80A0EED08E3F407F015E71202FC0AF51000FF1BFB14F302FCFA10F9110715DFE304FAF40BEFF9F209F8F300F4F720EFFA1516DBFF09EE06091604200C01EAFEEC031800FEECED0CE3E51EF3F2EBFF0FF7F80E0D120E150F1927EF11F9FFE41400DA20FAD903FCFFE50309F4E1E8FF0C03EEF6FD08030C17031108F7F70402CAF106FCF0EAEAF8EDFAFCEE1EF606F3F7110009F10607EBF4F809FD04F8FF03FBFB0F0B1A1E0415EFE3E129FD1317FFFBF906FAFC171C00F5D903DD09EF1D170DF2F304FFEE04FC00FC0CFEFC0107F6F50013E5F604E3D7FF00011CF2F1EA2911FC0AEB0F09F8E1F6EBED0DEB1317100EF21107080BD9F9FC1803FC0D12EDF70603EB0FF10412DB0C280710EDEEFD1A010DF702FEF40C3B050B150BFA0D00EF100A0F12EB1401EF07010503FE0D02FE1CFCEEEA0DF901F803F5FF060F03FDF7F6F60115FE23EEF311DDFAF8F71B20D3FBFC0CF10D02030FDA0D08FEFCFA04FDF703F6F00B0AF718FFE006F106E71CFB061908FEEF0008F7EB0F0C0C020401F3ED16100908FC01E8F20A310F0202FFF50A0608250F08F8FCF2F20E10ECE8F6F7F81213F109F6051DF406FF020E02F018FC0B181BF814FA08FDF400F8FEFA0BF70FFDE704EAF707F8F0F9F0FFEBF8FB03F9FBF0F9F300FFF51BFB13FEFEFB0300F61806FDEEFCF213040907001CFE04FBF51400BF22FDFF0EF1FC08F50502F0F9F8F20B04FD1005FE0302F6F5EE03F80FEC130AF9000AFDFEF11504130DFEEA00FBF408FFF30FFE1E221DF6EAFF03E8F6F2FF090305F6EF0604FE05110AF0F3FD0AFC0514F2FCED01F3FEF5F5FEFE15FD0529F708F6E6F804E7EAF818090002F014FB01FFF302FFFAFBEFF807FE0100F8FCF504ED0E150BFC03F3F6FCF8FCF91D090CFF0C0107F8E2FEFBFD03EFF9FE00000103FD15FD06FE03F8E914F5FD0F14FEF9100404F8F3E212FA07FDF800FD0A080BE7EFE7FDFB101F1A26F613E206DF15FDF2FCF6050EDFF7F115030BF60FF1FE0BFFF9F7DAF906E417EB17EC0B0601051207F5F9ECFDFCF7E2EDECF2FFFF04F212090911EAF0FFFEF80CFA2504F01708ED04E5F5F927F3F10104FA04F9E6E7E713ED1F02FEEC0CF402EA24010706F80B21EDFAFFE90E21F4F9F000FE0400F90EFAF3EF04ECF6011701F517FC1011FE0F01FC000CFEEDF3E8F4F7F5ED1BF10FF70A10FCEB06F9FE0A0F1412E40B0FF403FA022A07FBFAF50AFFE50AFA12120D0804E40BEB0E06FBF9F9EE00FF060B06E6EDE20E050AC7F501F91B2002F92200E20F09F2FCFEF3FA04FC14110F05FC05F1021B0BF8F30BF80A02FDF8110210F5020304030802FBF00310E4EAFC02F3100406FF020FF40BF4F305F80105F1000505ED120503FA000900F2F82111F70303FDFEF40FFAF5F60007E219FDF4FDF7FD04FE02C50D0704FD0EF206050300F1F80A11F8020506000B0DF5FCF907110AF0F716F9FBFF1315EFF20710FA15FFFDFC1917040D02E6DC0104CD01F203EE1C06E31FF1002DF006F4E3F0D2F80EEA11F305030018FD0012E8F9F8020CF2F312EA2705F4E9090A1F17F2FFF50103FC020B1119FAED19F70703F2000B20F7F0F6F308F2F9F50013FF01EF0DF909DD0BFE51FDF105061811040D05170E1AF0F80D220A071D0E2103EB1B0500F8F8FCF7D21118E1EA0E042C0AECFA12E30500F0F7ECED0BF0F4FF1104FE0EF904F3EB04021313FCDFF2F11506FB16F1120B02F8E8E900140111040DF004172CFCFE06F70AF30BE9F9F508FDFF0217F2DA10E1F1FAFE0DDB28F7FA00FE0AE7EA00EBF2DE05FBF30DFD04DAEF14F00A0807F1F7F7F40F01FBF20501F6E3F108F8FE22F4F5F503E319160A0B1DF3EF0CEB0AFDE800EC0F110404180C15E5F60AF10528F6F908E9F2EA0EF108C9EAF105D4050214EB100E06EBEE0C0001FB04E025FF0D10F8E6E6140A160D0701F70002F7FFF40500FCEE0B07000A0C0FFFF011F4F8110210160EF4FA04FA150EEF040EE31906E8F1EF0DFD0EFC0A02EA13F600F421F0E922F7E9080C00FD13F6E810FDF4F0051D08040003FE0A1604FAF8FFE8F5111704F8F90904F2F3F50DF3F5EB04E001FCFEFCECFE05F417FE0F04F3FEFE1E1B07EEF408F2F2FEE50216ECD0030702EE03FF01FBFBFCFBF9D3F90BF607E0FB060D00F808FD29FF05F20A0B0C0F10FFF0F31001F901F7190CF80F03F60604FA02F7F4081401FA040FF602FCF8F3260E04E9F104F2DFF505F80CF313D8F3F32BEA12F90B07FCE5F0F1FCF309F0D7F8030C09060317F2FF02120EFDFFF710F00506FFFE0E23F50AFA07EDF70E0F2326021101F7F8F1F000E90CF6F3F9F210F602FF0B08FBEDFD2BF11215F6FA120B230404FDF7EEFE02FB34FA01FBEEE401F3FFF107FAEF0506FAFD0515F904FAF6E2291AEC0C051705E9ECFA150EF1090FE9FE01F017EC21F7F515E801E90D1208FEF3FEEC13FE000301F502F8F7FB170BED04051120D1FA06ECEC0E00F8F5E4FAEFF1FF3FF3233F0E1300E304E8F7EDF801F9F3030B0EF6D2FB190607E213FCFC18210A03E5DE0AF00AF8ED05FA0807F3FD100BE806E60CED0208F309EA14FE0DF90C0CFE041B1CF1F1F5FEFEE6FE0CF122E4EEFB09EDFCFCFEDE23E311FDEDEAE5F3070DF0F30B0018F5140CEDFE070B0101E914E805F206F514F520FFFCDD0CF9F90EF1FEFAF807FC0CF21EFF02EF09F5E103F9F50808F6F32FF716F50EE60008FAFA0CFE280B16FF0EF3FDFFEA00FAF7070207F712110002E901F7F016FB0904FBFA2C1006EB14FDF7000A12E40DF3F5FE00FBF1F9ED0001FDE50D06FFFDF3FC08F3F2FCFFFE03F8FBF6FBFBFFFE18FFF2DD0A05F2FEEB0EFFDB20ECFEF21B02F50AFE0EEFF309070500C51100FF1FF0FC06F9F8F30C0A0E11F90C05EFFA0012F0F6FDF8FFF516F80A0C09DF19FDFFF10712FA10EBF1E8FA000300EEF60CF7F2F7EE19F400FFFD1BDDFAE81502EDEEF807F9FA120FE7E50112FDD416020CE9F7EB0A1BFE0501F7EFF6060300E40523E336E3FA012507F7F304EDFE16E411ED180EFB06010BF20900FA1602F9FA19030EF40318F7EFFEFB00EFF1FDF4F8E4DD0806110BFDF2F3F5090702E101F1131BFCECE208EEFAFF00"> : tensor<128x128xi8>}> : () -> tensor<128x128xi8> + %10 = "tosa.const"() <{values = dense<1994356874> : tensor<1xi32>}> : () -> tensor<1xi32> + %11 = "tosa.const"() <{values = dense<"0xA2000000620500008AFCFFFF3B0100008CFDFFFF70000000ADFDFFFF94030000010200003AFAFFFF96060000DB0A0000951300005A020000D2010000E40D00004E000000BBFFFFFF93000000D2FDFFFF8E02000006070000F3FBFFFFC406000060000000AD030000590800002FFCFFFF5AF6FFFF5D040000A8FFFFFFE202000025020000D7F4FFFFBCF6FFFF7BFFFFFFE0FBFFFFB80500003F01000010FEFFFF1B0C00007D010000D50D0000120100001A02000029FDFFFF180400006D0300004E070000F608000081FBFFFFBE010000FE040000E8FAFFFF28040000DB0400000AF7FFFFF9F5FFFF4D040000F20500003B000000C1050000840A0000260A000021FEFFFF180A000021FEFFFF57F9FFFFD40400006BFEFFFF42FCFFFF9BF5FFFFE1F8FFFF280600006CFCFFFFF7F6FFFFD80300000505000062FAFFFF91FFFFFFD30C000092050000A517000033F4FFFF6C0C00003B08000036FFFFFF0CFBFFFF04F9FFFF85010000DE000000F4FFFFFFEAEBFFFF99FEFFFF2C0100003A000000B1FDFFFF22010000B8FFFFFF8D0300004405000041FEFFFFC50B00003E0C0000C8FDFFFFC002000069020000B7060000F8FEFFFFDD0700007D0300000B0A0000D7060000C102000065FFFFFF1A02000057F8FFFF000A0000030000008BFEFFFFFBFCFFFFD81500009CFEFFFF97030000270F0000D6020000D1EEFFFF50FAFFFF"> : tensor<128xi32>}> : () -> tensor<128xi32> + %12 = "tosa.const"() <{values = dense<"0x0A12F806FEFEF3E10A01F5ECFEFD0DF3F90F0C0E0B19051F0DEF0FD7FFF20104F204F6F3F305F7060209DE08D20D03ECECCEF4FEFF0DEB21F308F9EAEB25F4F70FFDF8EDFA09100914F500160CF800E805032C0D0E090700F7200A0000FFFD1519FE0CE7FFEC12EC0CF7F9E30201EDE504FA0A0B00E1F815FA00120AF50E03060207030407050CFF080FE00EFB03E20A0AF6FEF702EC08FAFDFA05F3070409FB010BF9FA02160B00F5030806FBF405FC0302FE04F700090C0C0FFCFCF9FEECFDF90200010806F709FD020007FDF80C090401F8F60802FD010902FF00E9FF08F70302010B0FF8FC0807FFFEF3B60000F80304FE08FB05FC1300010101F70B14070607F9110A00000AFE02F81110ECFD0DF300FD04F404F715FA19FF0702FB070904EF070009070A03150508020B100EF622E20301FAFB101DC7F1F0F40007FAEBD2040C071605F80218000E080D050407FB0502040AE5EFF2FBF9F606C4DEFA01F00BF302F8FF0DF4F80DF7F6FF09FDFBFEE5EC021204F8F403FC0E0605FE05FC1C091305FF00F9FBF802FD070BFE06EEED0DF8F707FAFBF0FEF0F9F3FD09F4F80406FA04EEFD010103040701F8FE030F07F9F902FE0003F5F90A0602FC0701040300EF0C07F8FB070EF9FBF808090B0706FEFB0501010C000502F6F5F7FB0A08EB02EC00FE0F0BEFFEF8ECFE00FC030010F6F7131310FE0007F907F8F215FD07F1050606FD01FA0D05FA04FF0AFDF8FB0BFEFF0EFEF6FEF00000160CFF08FB0BFA05F0FBF8F6F20508FA02EC11FB0F0A0608F90A08FFF502F304FF0DF5010300130F0FFA09040502F601FD06EFFEF407FEFFFFFFF8FBFF08080F0703D701F2F1020BFD060B000AFBF90206FFFE01FE0B040CFF170F16ECF6F70B20FF1708FDF91C05FCED15EB090A0414010404F9D5FB01FBEC05F0ECFDFF00070409FCEA01FE01E8F7FF0E090E0DFB0312F3110007F60C05FCFB0507F7F80AF11204FCFE07FBFCFEFF140A040107010004FAF7F8FD090EFDEA0ADDFE010EF9F709DDEFFC031B041100FB1F05F908080701FBD9FAFA1409FD02F8FBFCE7FDEC0802F9FAFD1AFFFDF6050F0202F6FC100300060A19FB03F60EF1F4FCF71215F2E50FEB00FE020F07F60FFEFEFFF5F20D0F1BF5FF06F60803F8F4FE0A020203ECFA0A151901050E0502020BEBFEFB07011F000AF1000A090300FE14FD02FC09F5130001F4DFEBF1FDFA10020709F3F5FEF905FEFE00F500E0FA08DEFB160C02FDFA0BF70DFEF6EC00FBF9F9050501FEFFE9F4FDF20F0702F5FB1404F30218FCE90B0404FDFC10F710091600FF11F6FFFEF9FA0103F9ED06E5FBFE00FBFCF8FB18F4FE04EAFDFF100CEFFBF0F503F10CFCF8FDE6F6E6EDFA0B01FD09FD060100F0E7FDF705FEF00206FDF8F4090F070C02F6EEFF010B0206F205000F040B03120703F6FBF8FE07FB0000FD010508FB1DFDFE0F040E05FEF10CFF1710F00B00F50B03FB0606F1FA02FF0A1F0E07FEF20CFAF104F6EDF300F2F706FCF5F4FEFC000AFDEFFAF008050DFEFE000AF6FF0EF7F9F8ECFB0CFDF2FE03010C01FCF713EFF400FC070600FC0D05FAFA04FCFAF610F80309FCFA03F91206F809F3F80704F10F05F30AF0F7FAF60CFCFEFF0000F60002EF0513FBFF0000EA0515FDFEF605FE090006FD0311DF00F3000712FB00060202F8F70705FBFA010B05F6F2F6F8F8FF0500F707F7E4FA05F60413F60708060A0403020700FDFD04FBFAF8120606FBF8F9FCF5F30D05FAF604FF0600000716FEF7FF04FFFE010F0FFB01FF03F5FF0906F709072E03E70117F703FB09FCFBFBFC0122EB05FB05FC00F2001403F8110000FD0D0E09FC0303030005FCFFFE0EF607030700FCFAF8040CFDF8060306E9060DFBFBFD010508C8FC0504F40901FE03F1FD0B03F50403FCF91501FB05EA07F910000105F8FCFC080FF707FCFC060406FAF3040404F9FEF80AFFFB04F703F1F0E0FFFF010210F729FE0BFD100301E60A0D01DFFDFD0700FD06F0FE0507F3F905040D03F5F802F607EFFDFE12FD10EDFFFD01ED0909100E01EE031C02E6E9FBFC12F2FA07FBD3F40F07FCFEF808120FF80BF0F4DDFFF6E2F9E40404FCFEEBFDF719EAFDEA00F2EEF702FC00F9050507F803E211F7F803030FFC01FFFB0E02F907EFF40507ED01D50F04F2FBFEFEFFEBFB040F04EDF2FA111D06FEF7010BFC07FCFCFAFE02FB00020DF0EA00F5F10509FCF9ECF6D7FEE0F00CF9020BF8F703EF051DFF0E1CF9FBEC020004FEF3FEF0021107E0F7F7F2E6D303FD0EFCFDF60301FC09F2F80C03FAF5E50EF8FDF802FEF2ED06F8FE08E4FFFEFC0F0FFB0603F0F41316080CF8FC0209090103120E0BFA06130B04020606FEFB06FFECF2FD040AF0F9FA0A03F7F8FCFE06FFF802FBFE01F606040601EF16F103FEF818F5F908FC0501050607F9FB08020204FCD204080804F80FFF08FEF7070007F002FE02F8FBF00606FB0E04FC0A02F9EFFF0CB0FF04F7F3DE0109F7FF02F9FB0503FE2F0913ED0AFB080AFC0AECFCF9FCFBF9EF06F709FB020606041519FDF6FAFAF403F21BFC27E8FA0A10F6FDFFFE0504FAF304F2FB0B09170CFBE50D140DF50410FAFFF90AF60808060DFE0C12FEEF08F0FC09E4EFF0F8F201F0F6F4FFF0E9040307FF02FC08170003FCF8FE04F7F4FFF506F707FBF414F7FCFAFB05F50803E404F8E6070512F0F6E7170AFEFEFFF4F7EAFEF8FB07FBF0E6F4FEF61CFD110D0C0402FFF708FF0EEDF6FAFD000609FFFD081FF6F404E9FBF109EF07FEFDF9F001FAF0F3F6FCFD02FEF6E701F7FFF20105FCEEF1EC0FEAF9F6FF040DEDEFEF07EBF90BFC06F8F6FE080D0FE905E6E8FAF00805F1F9050706F4FF020A01F7EF0109FF03F9FCED00020EF8F80EF41A020109FDF6F426E20216031A0100FAB7EBFBF0EEFB07FDE9F3260BFCF705EEF8090715DAF30D1416D412FB040510FF19FEDCCF12010EF2FDF1EE0B0106021E0002FCF401F5E205FDFC010A07FFFFF4FBFE0714F4ED0B040002F7F9F916CEF4FC120223FE040214F90A0404071F01FFF3FAFDF0FE011005040701F20A0D040F00FCFC0D0A04F611FF000813000504F4F10BFC0310F5FEFC003014F1F602EFF50EFD01F605F30403F6F90A17070F0AE9F9022000060700FFFE07F8F50CFE04F90601FFF7EF060D1106F9F7070307FF03FC05E9F4F8F903FEED0101FF07FEFBFC0BFE05F904F9FB09FC0606F4F511050303FD071508E805FFFBF60306FCF3FC0C0BFD01080EFAE505FC0EF70102F103F8F41B090502F909E8EF0FF8F518091800FBFF13080301FB0CF1F7F90700F706060D10F500FFF8F0F905FD080201FEF202F6FAF805F50DFC02F00D0902FC09FAF501090023FBFDF204F90A0302F211FF01FEFFFA10070005FD01F410FCFC0A0503FC0F05F4E1FEFEFCF7121A03080903F8000AEFFB00FCFC0100FF0511FDFCF41905ECFD03F9010C070EF9060DFE0302FFF8040206FC0C0D10FEF6F1F50BFD1026070DF6F410FB00090BF3F80BFF12000600E70710F9020F000409FAF9FEF20102F7FC07F5F6050DFE01FAF8FB01FF08F0FCF50D07F8F509FCFB0309FF1201FE00000C0CF806F5EAF102F80E05FD13FC0AF807FD0707F90B0AF41604E9FA01E5FA100EFAF2F805F6ED020805292209F003DDFD14130BF607F8FEF617DDFE0E03F40400FDE1F5F809E60AEDEC020E09FCF7F8F9E01F280D0FFD08FFE9F72500F91AFC21D7FA05FEEA03FE01FE05F312FFF9DA07F6F2F2F8050B0D11FBFA07FF0209E007F4E50510EFF4E208F113060DF408FD001C0FFEF00212F2FDFBFE020BF3F507FEF5F400FD0DFFFCFCF50DF4F81202EB0401EF0101FC05FCF3000A02F60E0C100DEFF610FBE4FAF7E10306F0EFFA00EEF205F217FE0E08F60E0BF6EFDDFCF00DE8EA0000F6FA08F4050D05FEFE06D006FD100E03F8F2F107F8FEFE06FEF1FEFFFE000C0F011406091AE3010307FCE1EC08F9FD1213FE10FC18F31EF50504EBF9FD02F7FA09060909F2D60BFF0BFC080004060DFD0F000BF3FD06FC05EE02FF140700F5F305F2FDFC00F90EF3FCF503010BE0E609F30A000600F9E8F60D070AF6070CF70310FCFB080DE710E4FD100907FEFFF311FAEB080616FBFD07F8E00408000101050C03EA110CECFCFE04F90819FA0A11F90CD9ECF61D070207040F07F208F8FE01F10AD3FD01EE12F203E5030A04100D04F40105020002FE08FAF1E915F8FCFC10E1010F0C12FB1106FBEC0FFBFEE4FE0B1BFF1F060CE815E3F8EE08FE10140E04110506E40EEFF6060501FBF60F0616FAF916010FFE00EBF9EF05FD0312FBFBF7E203F2F9F702FD090400F8FAF7E00D0B03EBE20103FD0A0D0B05D3FBF3F7E01A08050207E806E618030CFF02FDFDF8F8E9F9F1030FFADAF4DC050305FA0FF501F2E4EFFE02FE140EF119F90A03FF420117EBF7110D1D0C0902040003F1000C080DFA00FAFCEB0AF40200E60202FBEB0BF8110BFC020BF502F7F802F6010609E20A06030013E917FE05FCFB02FAF9F306F801F506FFEC0A0DF5FDEE08F811FA08E7F80B13F705F606FF01F502F6F30805FC07F810FF00FBDAF40301FBFB0CFD1EF60FEE030A0F040705EF04F681FBFE0CF51202FC09050005F2F4F6F00701FC0A03FB3302FA02FD19FCFE04F208FB070208F80B07E6FBEBF8F805FC010703FB06050917FDF7F902FB0005051FE904090E0CF2FF04FD00ECEC060E0BE801F210FC12F8FDE7F8FD1AECF4ECFD11080A01FB0B09FD02FC0DFD110A07F102E51401F608E201EFFF00EFFB00EF0FF2FA01FAEEF7F8260BF4FC0C14E500DCE6FE0117F9060B030A130DFA02E82002E0ED060CF8E8F3FEFEF705F8FEF6FB02E308F80BFCF809FDF9EC17E8FAF2FA06FDFC0600F0F802FAFB0610F81004053314FA06F91009060EF60200F0FDFD01020307FE05F10FFC081DFA0DFF1D0BF704E4E8FAFDF90407FD0300F80E0409F90C0F02E907E6060415F503FC18F8F6FE04F206FAF1FCF90403FAFCFA04ED01E9F100FAE6F7050C0101F6FE031DF6F70E0110F41BDDFEFC06F6010D071908EAF70DFD0506F010F6F50414F41A0C01F8F5FAF0120B06F7F5F307020807FCF809F4030906FFFA10FFFA17FF0CFCE700F5FBF908100D1201110DFDFAFEFEFE0708F81A340301F70A01FA1002FDFF010A050AF407100CFB0005F8FF0A01FB050AFA09FCF40002FB1BF7E5F4F8FD00FCFFFAFD0401F9F3F40B070003FF041000F6FDF8FA1009FBECF7FA0903F2EB0706FA060EF6F60DE308E7EA00010003F7FF14F90A0905F305F6FF05FA0CFFFD05F8F00700F80B0A04FF0B030D1D09F0FEF7F8F8071619F1D905FBF3FF0910FCFA02DE0DF3FBE9F612F705F5F6F9F100F7FDF8F516EAF5EA1C04F6F9EC0217140BED05FE0102F60B06FF0500FFE6FF06180EF706FC1607F80307DDF7FD1600ED140605EDF511FCFCFA04F30418F7FB02DFF4FBFFFA0AECFC06F80AFA0E04E8FCFBFC0012F00A050B07E3010C08FCE815EB0503D7FF030F0E0910F208FEFD07040B02F9EF0C13FDEEFA020113FBFCED05FB0FEF0D0FF606000E0100F40A03FB05140907091AFFFCDD0D02FBFCF9E90A13FD01060209FD0628F306080A0EFEFBEB0517040CFE15FBEA031504F5FEFFFFFD10ED05170E1503FD0BF802F20017EBF505F8FD03FEE7FF06F609FAF7F400E7FF05F506F703000D040A05020004F6FDFB0004EAFAF91000F20EEF1DFFEBFCFC08F4F00612130EFE080501F8F5F2F1040808FD06F9DD0406FB030409FB0BF7F6FBEAF9F403020EFFFE000F040AFBFE14FB08FD07F8F7D6FD08FF01FFF9080D08FCF804FBF60508240B0503F2F5030D0BEC090F0216FA0E0CEEFFEC01EF08F7060CFA13F61802FC06FB0F090707050DF7F605FCF3DE0500FAFFFBEDF3FF0F03040CF7060AFEFDF7EFF0FCF906FEFCE50AFCF9F5F0FC00FFFDFFFFFC0BFEFFEA05100F080000F305040D02FFF7120101FAF40A1CF2F317FB111DF30AF9F11203EE0CF9060707FC03F308080008FE0804F7FF00080CFDF70BEFFF030C131009F0FAF2EE0A060C0407F602080502F80AEC0206FDF2FAF504F502F108F40507EDF7FD060107FDFE0DFC0CF1F2EA0201FD0A05FA11090E0BFB03F216FFFE1DF80900010119F709FC070E121CFFFCFAFEFC08F917F3F7F4FF03F703FAFCF5030DF909F4FF0EF7EEFFFCF7FE060B0309FE0FEFEE02FF03FA0D150302EF08F9110606000D08FE0CF70EF1FC0EF00F0209FE04FDFFF50F040C052108F60B02F80505FFFC0C020BF50BE8EEEBFF0BE3090F0CEE08FEF4FCEE11F7FD0415F913FF0903FD07FB00090709F603F90AF7FF02FD030CFD080C02FBFEFFF5FCECFC00040501F7FEF0FEFE0B040704ED0A0301070801FF0C05F6F5090105010302060202FAFAF7FF02FA03F60405F907F9FB070302FCF70504FC0E040401001200FDFEF926000303FF0B00FF04F9010505FB07FF01FD00D9F30BF900FD1501000BFD02FEFD0101DDF4020509F8F7F103FBFB0A1EF6FFFA050E11FEEEFCE600EF0E17E908F6FB00FCFDF90A07FBFEFF0CFB0001F90EFC0DFF09070505F7000913F615050712090510F9FE06F6F60C0215FDEE0304010D0814080310FFFCF201FF020203F5FD0402FD0EE9FB05F5F7F6D905EE0708FDF8F902FDFEFA10F5EBF80313EE030609F014F2FCF703FB0501F7F2F410050AFDF0FFEBFDFF08FB060BF801FCEE01F8F902ECF10B05F7F20D0C11FC030001120BF803FB01F4FB18090904FDF9FE0503F7F810F3080004080607F3F00B0E07FEFD1611FC030309090FFFFAFB0B080604FDFF0E01F1F208F9FBEEFEFFFEFE01F8FFF3FF0EFAEADF0AEE0FF8EA04FBFAF7FDF4FBFA15E800EAEE14FDF801F71206F210F70506FAF80B0706F8F60603F0E7FF011B1006FCF5F5F208E7FD18FEF40A0DEE07F8FC14F40D081EE6EDFB01FE00FB02F9E40905F5FDE8FD01FEFA02010D08040B0E04FAE705FBFEFA1001EEF4FE06FA0602F4F80010E8060200EB03F801051209FF0CF603001911F9FB0BF7FF15FEECF81AF2FDF70A190605F9FF0010FF010605000106000000011100FD01F8000C03FFFCFFFB0601FCFEFBFE06E4FF0704011C0200FEFFFF0602FF0303FDFEFCFF070604030100FD0306F8FFFF050003FA02FE02FDF904FE02FFFEFE0401FFF9FF04060000F102FEFD0F0003FD0404002301FFFE0200050800FB0000020203090202FE05FB0703FEFEFDE60106FF07DCFBF90E0AE9DE0005FCF2ECFCF4ECFC050B06FE0B13FFF0E7DFFC1302F8FCE4FF1106EB02EE0D0807F70009D9F91005E6D104F2FFFEF107050E07F20FFB00FD09F919EEF5FE070DFB0910F3FD080AE904FCFA0201E80105FC0211FD0408ED0513FD00FCF6FEF509040AFC250400F8F0FDFAFDFAEAF109F608FDF8FDFC0B0EFCFB0006FDFB0201FE0207FEF602FFF7011104FB03F70802FBFE01FAFE0CFC010A0401F3F700FF03FFFE0700FD0CFC000100F7020104F104120908070BFEFFFE0001F7FE000706FEFA000EFD02FCFE05FCFFBDFB0E0405FEF20EFA01FC0202F20DFCFF00050D1AF1FB02011405FEF50003FCFCFC00FEFD06FA090200F80102FE01FCEF000000F8070300F30500FD0703FEFD02F3F9F9FB090FF6F80BFCFEFB01F60AFCFDFBF3F6F9F8FB0DFFF8F017FBFEF601FE0210F5F2F8FD02F90A050106F707EDF507F71402F1040205F9FAFD0FF802F9F700F8FCF80900060500FBFEF6FDFAFFF0EDFEF90BFEF9F4FAF302FB00FB00FAF9F700FC05FEF9FDFEFFFFFFFEFE07000400F909000D03FDFB0A0E06FEFF050C06FCEEF716F7020BFF080AFAF70404EAF908FB09E70400FC070EF501F2FC090BFF03FE0CFDFC01F90B10FE0108F2EE09F9F1FE0503F4030008E5F10AF6F205020C09FB05FDF8FCF3F00107F00AF317030108F704FB03FBFDF4FBFCF3001201FC0AF5F50903EF19FB060DFE04FE030018F509F0EB030C17F6F5F3FB090B00FEFC06091A04F60714EF07F20523F909FF010AFF050AFF0100F1EDF6FF07F700FBF503D801E9F50417FDE8090501F7000C05F303F1F9080804090101E704EE06FAFF1502FFF70307FDF9FF04FF05EC001300F50201F810060EFD090804FF0B041707EC0BF5EB09061501F6FF01F9F6E4FD000312FE0AF4FD0600050402FD05F005F1FEF5090905F60C030DF4FD12FC08F9F2FD0E11050BFB02F70106FC0CFE0506FBF704FD00080702F3040108FCFF0509F40CFC08FA110C0204FF010304FCF80A0008F8FF0904F704FB0007FD0A0E03040505F803F1F60F03FE06F6FA0301ECFDF9F5FCFF1BF30105EE070603F6FDFB10200600E8F8F9DB0BFCFCFB0A0F0D02EFF9F413FDF1FDF305F1E6FE01FEFD0706011808F8060208090605FCF41305060003FBFAF5FCFBFAF6F4070DF1FB000CFCF1040A04FE030B01FA00FF0B06E60204FF09F801F300050DF70013F6FCFE000EF90812030BF111FBFD08FAFE0803040B06FEE8F90202FE0110FDFC0A03FA0605F1F0F110EF08FFFA031402EFFDD7F2010DF305FA08FBFE1003FC0FF801FFFDF000070601F101DE18FFFD080FFFFA0D01FB14E9F6EE09ED0D0405E917FB1403F91917FBEB02060205F314FBE9EC12F904090AF3F00612F8080502EA0BEEEB0003E9F40F1305F2F603140509FCE81200F819FBF0F8F6F90106FD00050E01FEFAFEF70502FBFFF3FAF900000C03FAE6FA040CDCFC0D020CFA0608FDE5FE02E60EFFFF00050D0A09F4F5F812F30417EA110BE4FAFE1802EBFAEFFAFEFE0B0F03030F06FC03FDF817FD0608F90E0CFBFFE308FE01FCFDF5F4ED00EF05FEFAFA040909FC030809FD06FC03060200FE010700FB0C0DFEFFFB0308F7F8FAF3FF04FB0500FAFF07FFF50DFCF30300F8FFF0F9FDEF03F30104060B180CFF0202000303F3FA0BF0FAFD0E100E01B6040DF3040AF7F60CF0010D0C0CE700FE18F60BF9010403F4F9061610FCE903E8FCF802F10A010D04F6FF0002F2EB0109FCFB01F4F5F4EC01FF0D0409FCFCDF1A07F80400DAFC0106F8FF08F6F903F7F8FCE5F2FAF00507FBFFFF0D0803F9FB0B02F70802080A0BF7F9F1FEF7FCF9F7FC0BFE041305FDF80A00030A10FD00FC0BF701F7FC021107FDFF110705FCFCFEFDFDFFFC06F701FDFE0CFC0807010BFF090709FAF7060AFDFC050209FBEEF9F1F6FE010C0B0DF1EE02FEF6F8101905F7F00AF9000F080409FC0007FCF5000B01FEFC050AF412080A0909F4FD0702F810150EF5040022FBF40206FA0204F3FBF9FC03F5060BFFFCFE02F5F7FCFEF9FBFB000406050417FBF40800F104F403FEFC01FB0C0D0107F9EDFE0001FDFF0104040507F6FE0B05FCFF0208F0FF0DFA0FF3FD0309F6FEFDF607FFF6F3F808FAFC03FAF804EC020F1B0100F60BFCFAFD0503FDFEF2F2DF020203F5EB0102000601FA00F30EF4F805FEFE0407F3E90401FEF3F9FAFEFC1109041000F2F3F603F4000BFA03EC03FE0002060AF8FF07E40B00EB0B00FD0405F81DFE2402FF160B0300061100070007F709F00011F808FAF0F8FD0BFCFFFA00FD030807EEF907FFF9FD0308F8FB000400F11AFEFDEFFFFBFBFB08F41F06030C0DFCFF00E1FBF8E3F6F2F3251CFF0515F5F501EEFB0FF1030303FDEB0EFB09EAF7060CFCF600ED121A06110106F7010F02020CF41DF70514E909020702FA0A0EFE09FE01EC150006FBFA0806F9000E07FDEBFB0605FE0DFC02F2F1F3F3FFED0C1CFEFC00F702F9F90404FEF6FF0EF7FB02D9040109F303FB03FCFB14F9FD0BE9E7FFFEFE100106E9FD0BFC01F8F9F8FF0CFB01FD03F6FC0DF4E80D1607FA04ED07FF19AA010AFCFBF30001FE0CF8E9F9FE0707EDF6060BF7FE05F4EF0BFAFCFA01000908F905040D040703FA0FFB04FA07FA0FFFF6F705FC07F5FD02F8F70203000BE50AF6FF00FCFF03091AFCEFF806F7EDFA0806FEFB0BFE0107F209FD17F90407EEEA07FB120A16FBFC060C02E904F714F004FF0112F004F300EDFCF2F90B0210090FF3F7F6F5F7F5EFF8090F05E913F80AF6FA00F8FB11F40711F708F9FAFCFD0E02F9FBF9F3F505011000FAFD02F607FEF9F5090512F8110B0AFC0CF20901FD000109020E110C0DFEFEF70102060BF20B0C0103FF13FDFD0508F3F5F707F901FE0507F910F50007EE041D03FCF3EDEF070A120F060C0E1415010309F1FFFE110304FEFB0109030CED1402F621FC040C0605FCFB110400E2F4FFF20507181A0306FD1A13F7E7020502D10301FBE7E0070A0C0E0BEDF4031014F808EDF8EDF30BF502FAF411100B1610EAFD0EFC17F7F40E000607FF060C0A00FF0EF7FDFE010A0306020E03F9FB0302F9FE0D02F406FBF207FE0300DE010108030F09D20100F6FCFE05030304FEFEFA020006FD030100FEFB0305000AFAECF1F700F8FF030100020000FB041402FEFEF703F10A0002FBFE3CFE09FDF30E0AFBFF02DD08F3F50CFBFDFFF6C9D90309F90FFBF80004FD0007F90503E10A0004FF050503030202FA0DF5E50308000108F4FDF9F60B03FE05FA0300000501F4FDFE0602E5F8FCF600010005FEF010E9200A0707EFE316010701F8EEF3FA1803E2DFFE07000208F10BFC08FCFBECCAF70FFA0805FD140EFA120B090C120BFB1211FC0F00F9F3EF08FBFD1205121AFF17FBF9CBFE0DFA06FDF7E706FC0A08F2EE06EA00F60805041405FD0E1802E70AEDF000E0EEFBEE0C0EF01AEFFAF307FA1AF2DF03F51AFFFE0C02E21CFBF7060710F606FDFF01F60FFFFB200011030D0609F60C0B07F905FDFF0B0015E505F9FDF208FDF9F30000DB0AF506FC0D02F9FCF6FDF4ED1D04FBF6F106FB00FDE40DF0F60E05FEF0F0FF02DB0CFF0503F7F008F4FF02F2EAFB04EC04F1100206080D06F60709060504FBF402FEF6FE0803FF01030301FBFE00FFF90003FBFF02FDFAFE020BE3F304EB0007FC080504FC13EE0911FAF2FFF1010100030704F50E08F6FAEEFA1200FF04000401F1FE020503FCEE0AF804FC04061B14FC14EF05F6F40507021807000C02F901FFEA0DF8FE0203F10D0905FA02E8FEFFFFF40AFFFFEF0113FF02FE00080006F9F905FAF805FF0A06F6FA0C11E8FBFD02FF0E09F9F9FE04FD02F200FE0AFBFBFDFD0D05FC220EF107FEFDFAF7FF09FE0308FFFF070DFDFE030807040901FE1206F90309FCFC05FC080BF3FE010306EB050CF4000101FEFEF9F7F3FC010BFFFFFE04FAEA0300060CEEF9FF06031D03FFF8FE06FDE71101FFED0F02FAF0F407F3FEFCEB06FBFBF901F3041B050AF3F7FBF6F1F80E00F7FA0CFE0B08F901F0060FF50CFDFD00F9E6F3EB0FFD060BF5E6F802010BFBFFFF140503ED09E204FC10FD0EF60503FE0407F507EB0AFF0001191622E1F5F0FBFD1103F3FEFAE80101FB0605F8FC05F809F4F8F00BFCFE03FFF3EA080D03FC1207F1E70C0F07FAF8F4F8FFE409F20F041103FA01FAF9F6EF05FAFB0300FE01D3ECFDECF5EC0400F10208EAFD0E0BFF01FF12F903FF0B010EF906F70C01F0DDFBFFF4EEFB03EEEE0612F20D05F810FB0208F7F8F3FC0C0419020807FC0B09EB0502E9F9EEFA11F0EEFCF6FAF001021C06FEFE0AFAFDF60A0B0302FAFC0F0A0AF20312030DEBFAF9F604FD07FDFBFBEB08F9F80318EC03EFFEF90F010A04FB0AFE090010F2010802F40E04021605120BF5F4FB05E6060509EF030A0807000AF41B0504F9EFFD06FC0700F20EFF03FCF6FFFDFDFA0406F9FB040D03EA0E06FEF805FBFAFF0C05F402FBFAEF030806090000FDFEFB1917000BF60EFE03FF040A0CEB060C170104F6F309EDEE02FAFBFBF70FFEEA02EBFDF7020FFD0D0901FFFD0A02F008FD1110F506F713F20FE1F905EF0CF7F5E7F2FFFC07EDF10008FE00EB0F11FC09FD09FBE801F10BFFFA02F8040F0101050803EF0106E30603D50904EFF401FA0403FF03FBF20E00FA050501010417F5EF08FCFB04F8EC090B030A020705F708F10101FCFD05FEFA00F7FD080BF101F203F0FF07FA09FF0609FE01F3020B0EFB03FE03EC06FCFF0702FA0105FB06F9FBF6F6FE05F703EC05F70603FDFEFA020E03FF030CF6000FF8020909FF0F04FEF8FC05FC03FE00040F01080000F61A000502FB08010A0A0503FBFE030BFE060308030703FFF8050603ED0800000700FCFA01040709041E00E9F8E90D0FF00E14F7F602FBF6FE010CFCE9F3FF08DA01F2050DFFFF06FA06FF0A0CFEF4FD0FFC14F10DFA1415FC071E00FAFEF7FBEE0A0EFFF012EDFE100207050EFFE7030BE206FD15FCFCF205FF0BE9FEFD081001FE0308F90606F3F20AE0FF04FE1608F102E606F60603F906FF08FEE9FBF9060AF40EFEF7F8FA14FE090A0800F6FF000802F8FFF3FA00F6090205F7FDF2FC0102FC07F6FFFBFB0207EB0206FEF904FF0500FF0A10EC0BF4FC03FDFF02F4FC0906F20505F602160211080404120501FAFBF2EBFCF5FBF7F9FBFF0307F208F6080A0405040D0AF511150413170C0406EFF9FB02FF060C0802F901E8F8FA0800FC04FF0102FA0EFC1F04FDFE0103F6000CF5E8F0F3E60FFBFB09F803060516F5FBEEFA11F9FEE6F401EC0A0308F6EFF5FFEFF0F4060CFB03FF06FD02F8F3FEF40BFB020CF5F5110401FCF60709F511060CF70320F003F70AFA0D0308020E01F211EDFE001A03FC0B0909F909FA15010DFD0BF2061B03FC0602E7F2E1FE06080701FD01050001FCF8000BFB08FE02F3F9F5F6F6FEF9040106FA030BFE04FB0503F8100EF8FEFFF9FB030A06FF0D00EE05FF07FFEE0D00EB0A03030210F9020904FFFCFFFB070101F9F50B10040D0A0819020505030E0106FFFE0910F7080201FE08011703020004FEFF06FBF9F515FFF803FFF30A01F6F6F7F7E801FEFDF5020406000804070A07FEFFFE0107FCF208FA0C03F7F6060003FA03FD0E09FE040703FB01F4FE1D0DFC0AF80E02FCFC020E0A08010E08FB00FF01FFFB0909050AFC0FF302FC130AF7F40821080A050202FFFCF3FA02FEFF0E0DFFFBFC06071AFFF9FDFBFDF207FB0B000502FFF006FCF9FD08FDE9F514FB0AFF090A0D09FD0FFA1205FFF6FC06000507FDFAFAF815380703FD251200F60505FE040304060808FC030BFE01FA09FDFBFF1A0001FD02FBFC02FA01000303FCF2FBF1000506FB0504FE02E6FC08030805FB04F802F4F905ED0403FA0411FF0602DB020A07040102000402FF0AF70FFF00F50509FD01FFFFFF0601FE10FE0705FB0AF0F40101000306FF12E8FF04FF0BF50C18F1E20CFD090C030AF1FDEFFC01FA03F0EEFEFB00F4F80109000A0C000603FAFF0EB2F307FEF5FDFD01050100F5F2F500FF000210090F090D00F5F40702FB0F0BF10CF8FA0DF1EDFC06F30302E201FF150109FE01FF10EF02FC1111F2FC0105F5F1020907080CFFF3F8F80B08F313F9FFFEFC0300080602FEF11508FBE708EB0005F6FEFC0B0604ECF4EEFDF90A05081C0115F5DFF306EE13060FF9F8FAFEC102DAF9FEFB04FEF818F1EA0A1A0215F8F7F403F5E800F1FC0505E50106FAD3F9F7F7EC1F0A090719F912011200F4F7FD010AFD140F03F30409FC03F605F6FC0A12ECF40B0824E7F906F60BF2F6FC0A09FF000507FF070211F2F8FC1207FB0703030604FD0C04F50CFB0405FE03F518FEFD000BFE0D0AF2F7ECFFFC0006F60704F7F4F7F204F9FAF910F9F702EF000C001604F0F500F5EFFC070602F9F80304030A02FB0200FFF50E04F900FAF4FB050210F2FBFCFF0AF100FB02070D0318030E0FEE16FF0D04FFFDF0FA13F3072403061705F3F71D1105F8FF07F607F6E2EBFCFBEBF8F20B01F6EDEF00F107F008040AE906F80818FBF91704FE1907041A0814F004ECE50804EF13F4F9F30405F403E4FF010C03FBFF07CB0403E5051419F7F91910F005FC0C0AE0E2F2F2FE070CF4FCF8100BFAFB0BF50206F2E9F400F702FB0901F10E1A13F0FFF110FCFBDD05FCF1190B0404FC1002170001FD0507F400F3FB0602F7060200FC07FBFF02FBF71207F802FFF708F3F80209FB0A00040004F9FD040908080602FB12F7010AF404FAFB0AFA05F9FDFEF6FA0A010201FFF9FA0F010B10FBF1FCFB05FC050113010B0101FFFCFAFFFCF8F7FAFAF8F5FE01F9FB090D0B03FAFCFE0100470DFDED10FAFDFAFEF6F2F7EF070105FBF6FAFB00FDFE000E0CF7FCFBF710FEF808F00BF60D18FD0A04F3080C0E080B02FCFEFA0B00FEF5FC06E9090609FB0202F402F90DF80EF801FE03171AF503EBF9FD00FD0D05F7EE0EECE7020008EA0E04F1FE0F05FDFEFFFA0DF3000303131708FAF8FE08F615FAE1F7E7FA03120FF90503F7E8F9FE01FE1AFDD8081AF0FDEFFE0C1910F617E912FDE80CF703F0FA110A090307EDFEFDFE0404FE08EDEF0CF6EEFA080819E10801FCFAFE060E130EF7EF0405080B00FFF10CE7F1EE05F9FFF2FCFBF5FDFB01FFFBFBFFECE6FF09001D0C03FAFEF2FE14080312E91500F8E4130C220DF4050F05FD05F40E04FD0918F30CFDF5E90500FF18FE0BF5EE0301FC0C1B1F2105F7F6FDF5FE01FAF8FA00FA12F7F90A08FB010C05FFEA050203F80EFBF6FAFDEB02FD03FE08062211FD0509F506FA0DF20100F5E7F4F8FAFFEC0511E60801FB1109FFF4F9DC030DFF0611FA1002000516010401FF03FFFE16FDFCF8FBF20117F001F70C0FF70AF4FFE6F6FDFBFEF8080301E510FCEFFEFBFF10F7050500FCFF1805FBF1F6F207F207F6FF0B0F0AFC04040DF7F1F6EC04F6F3EBFA00FB03F5F5EBF5FBF9000EFF2204FD04101DE300080512FFF305F002FDFC110EF3F208F611C00BFE0FFAF90508EB0B1F06FBEF25FC0FF7001A0A0EF9F2F710EF12FADFEFC30500FCF803F80DF607F5FE040209FA08EEF9F817F9FA0C08F405FF07F2FDFF08FF03ECEBF7FB000008F104020F0409F1FCFB01F70612F6FAFF0EFF06EA08FEFCF7FEF1F40CF4F9F501FEF2F7E101F5F8F1F2F30304FA17F6F70BF9060C12F8010AFDFFFF02F1FAEA0A13F1F7FC02040305F2F7F4F90A01FD02EAFFE904070D0709FEF60208F500F9F6050209F5FC1003FBF7020110F0FCFD06F6FFFF08F4FAF713F80208F6F7F3050705F60400FEFAFAF10F0104F8070101000408F703F5FCFFFFFB000DFD01FC0106060AF4F8F80C07FDFC05FDF8FBFD0208F008FB0B06FFF5F2FB080905FB000504040607112E0B0C0001040108FCFC04020302000502030E0A08040AF9FCF50309FEFD02FFFC100101FE04F009FEE9FBFC06FEDEFE0F0803E817FD02E7FCFB1012FB021110F6FA110B11F6020B0705EDFB02F611FEFCFA00F3F4FBF505FD01FF0E0DFB140903FCE4F6F1F2FA05EEFEEB04F002030DED05001703050AF7FD06EBF20102F6EAD3FF04FA02FE00F90213F7FC06EB03E8FDFBFFF2F9F402060D0BF71200FD02FD020D030C03EB06F1FC0E080004FAFCFAF4F9FB0DCA0DFE0DF9F6EDE4FD06FEF304F5F9F0FD0DF8FFFCF2FE01190A18F601F41B15E00502E8FA010E16EE13F50A05FF080CF80507F2FE01F8FBEAEC0DDEB405E406110812FBF8060908E7FCE2F4FE06EB0400EFF704E6FF18FCEF0EF80DFDF11902FD09ECF716FEEAEE0D01050309FF07F90A02FE2401070EF9F40AFE2906FCECFF0A00EA0E0D04C913FFED0CEE08E506FFF6F3DE0CE9FE190C050D09FE1AFAF30C0BF3DEFF0607000608051000F9F80900FFF30DF3F600FF00FBFBE406FC0AF9FD03EB040603D80FE3140318FE0411FFF8FDE8FDFB0F0500F0071D0013FA03F9F41B0F09070703F801FAECFA08030906FE00001E03F1060CF2EEFE01FD061212FD19F6020702FCFD04FB060CF707FDF9FDF8F2FCF9EBF5F90409051908FCF900F805F60006061509FE12EC000AF6060D0EFFFDF7060204F90302FE02F10608FD07070B000E1912F8ECF6001BEFF9EEF7FA050224FA0A1D0301050B0A0607FA0914F8030304F720F5FE0405F300020BFAF2FC07F702F80401EEFC070CF30616F903F41C03040311FC00F6F9FEEA040F0CFF06F8EFF3FA01F62AFB0300FDFC021423EC060EFEFF051904E6FA1CF6FB20DFFCFEE8FC0A0615050019080C1003FCD7F9FA09F93409F2EB0C20FC1EFD04EB18FA01F8F201FBEAF50BFB031B09F10A0703E6FDF00BF402FCEA00E9FE0306F917040BFD0300FBF602F001FD0AF405FF0500F8EA030B0AFAF205FCF2FF000404FDFE00030905FCFB05100001F90603FCF603FBF902FC05FAFFF8F60208F8FBFDFC00F61A06EEF706FD04F70B10F106F80001090E11FD04F9FB05F2FFFBFE00FC000305FF0106FB01FFFE030504FBF903F801050008FBFDFC03000205FE0001040DFB020207FDFE03FD0A05F900F10107FDF6000BE8F914031402FE0B040800000BFAF4F90501070604F90D0709FBF603FEF805FB0602F9F7060F05F8020108FA0402FEF3F6F8FBFFF81703050600FAFC0810000C01FEE10307FBFC08FB1003F50DFF030BFB0207FEF7FE0B040006020503F9FBFA05080605F50011FE0AFF0B07F104FDF2000106F9FA0C01FAFDF803F409FEF8090001FFF1FCFBFF080603F8E10007060B010502060A0909FA030B0303F7080FFA02030712FBFCFFFDF613F6F6FDFE0A01FE060B050BFCFDFC03FBFD06F801F9F9020A120900FDFEF2FEF7FEF7FD00E30DF7FDF908040EFA030BF5F9F4F20F01FC01F008FDF6FE0B0212FB030D0AFFFBFAFEF9FAFC0604FE01FA08030203FFF7FCE707010209EF0311FE20F5F902F6220017F2093700D5FDDA0B0A10F70B0D0207FD10EB10F0FAF6F7FE0A1308E506F7100B0306030A10FFFEF61008FBF3FFF7F3FC0D1008FFF3F8F1070409E3F3040C19050125F90D0EF30707FD011DFC0E050EF8F40402F1FA16F101FE02070403040702FEF7FFF2F11507FC11FEF81B03070201FB03FE0103D6FCF6FD02D9FA04FAF3FEF9000800FD08020104FDFD0101020C0401E6000B05FF05FEFE00FF0AFCFA0101FD09F7F3F100050801021900FEFF01FF010106FD06FFFCF5F5FE03FC06FFFF072CFEFEF6FF0007050B02FE06FBFAFDFF01FF00FEFB01030732FD00ED01FA0104EEFD01F4FBFE00FF09FA02FDFBEFFDF700F6020F06FDFFF6E9FCEB02F8FEF21713F6EEF8FA0CDC1DFEEBFDF4090E03F60411FBF909FA01F9160D08FC11F4F9FEF6FB0700F7F902F50D0204F7050808FF1A1AF001FF0FF3080710E31126F30F0A02FA0B0C0AF908040307E903F40805F9F3FE0504FA06ECFCFFF70507FF0EF910EDF100FD07F805FBF609F50FFAF5EA1B12E80CEE0A1BD50AF61221FA0008091517FEF9FA0ADB0A070EFD01E5D202040F010BFEF3F8F2C110FEFCF704F0FD072A08FDF209070CEDD50E05D7DCF609EB01F704EFD903E9050105F4090321FFF7FB2FE314EEFFFFED05FFEEDCFE09000D02EEF81B1C0D020C0AFE001BED15081101FEEB0CE71E0BEFF700140EFB060907F7070FFEEAFEFA040AF30811FDEC09FC060BFB0503FDF1FEE1FD0A07F8050AFAF105FEFEF406FE060A10F6010C0A0803F9060BF7000B0201FD01F907F70A03F0F00501E808EDF7FF0706FF0A0604FFFDFAFAFFFC0436FA06FBFFFB07080B02FE0F00FBF7FE0BFDFBEB920306F2FCFDF4120E02E700FF10FEFC02F9F61008FBF7F803051B0207050305F6F0FC01F6EBEDFFFF1111200FF81A0DFC090103FDFA040B05F4F6FC040318F0FAF409F9EBE90FFCDDDD02E61C0D041409F801FD090602F9F9E518FC04F9FCF803FDFCFD0D04F9F00020FAFEFFFD0EEFF60FEEFF1FF131FC0F1F012707FCEB20FEFDF5F5E61BC7F1001B070BF202FFF80AFD061E0AFB000E02ED060DF4170DF90DF5FBFD020000FA06F900F2F7FAFC090002FCFD04000308FC0AFBFEF8040405FAF6F2FE0DFB1003F9FAEEFDFFFFF50601FE0400FC0B0300F7FF09FCF7F505F910060AF71B01FE0606030AFC0907FAFF0D1106FB04F904020DFAFFFD00FBFF00F903F2FA00FBFDFC010006FE09F4F800F9E9FB0313E2E30D12030B21FDFE0301F608F60112FCF6F805F2EF10FCF50BFD02FBFF040AF60408F7FA0CFF00F6FFFF040BF0FCD907060FF1F817F60605FC01060106EDE9180EF5E7F1F305F9090507F1FE10FBF7FE0207FC0A03F906D0FE01F5FC05FE01FA0CE8F80306EE06F60B080002030F050912FDFDFAF91700FDF9030202FDDFF2050AF3F50C0BEA0C05FFE104F6F10EEF09ED0B0F07FFF8F90C0C0E0209FBF7EE0FF0FFFC01FBF6080706101A0B07F50006E0060503020DE3E6F500FFF8FF031FFC10F401FC09F9EEFEEC11FEFFDE081502010706F7FD00F608F709D2F4F6FA0F05F820F30A0803F9F2F807FC01100315F7DEEC08F90EF80903FC0FF502FF1400EE0AF3010A0DF9FF0A06E52110D906F3070D1A0910F5F50B0DF7FEFB10F50CE5F3E807F1ECE3F1F6F2FCFD230FEA01010D0412030B0CFF0112F9DC030FF404E7FC0EF4030D0BF7F016FE1EE606D6F50D021BF309F61013FAFC03ECECE8DAFE200B0A030F00FF1CF00BFDFA0410020E10FE0916F2F70404250406FEFC00F60EF9FA0B0BFB090EF91503FFFEFBF9FBFA14F2FEEEEC0EDEF8FF0E0817F8EB0AF8FCFBFC00EDFC0106E7030BF8E1F6FE0BF7F400ED0AEFFFFFF2F90A08070FFB041CF60F04F7F8FBEF100E04F0FE0804F70DFDE7F601DD0D150512F704F1FDE908FDEF13F60F0E071EF8EA08E80104FF08EE002B04FC1513EB04E50E01F0FD02EBFCFCF0CFF712FC08F005F7FAF0EA05FEFA0600D90C0D0A0A14FFDB0E00F404EB02F9F405ECFE09F3070815F105E1EEFA03FB05F1FEF6F8060308FB14F7F4FC0EF80012F603F40AF816FCEFF9050C08012703EBF904F704F5FF0408010515080415F3F20CE20801FBF905F0F9040CEE02E9F3F8FFFD0E0212FFDCFD06FE070E090D0310010BF805F1F9F80CFBF5070803F4FF0104FF00FB0904F201FFFFFA11F3F605070606FAF60102FDF112F7F810FC0808140000080DFE03001105FC0001020C05F0F8150DE4010600FDFBF2E6FE070CFEFFF6FD0BF1030301F801D6FD0606F3F802F7F9FBFEF2E0080307050AECF7F3010D0906FD05FAF20BFE01FC01F5F4FB01EFF3FB1002F9EEF008050203E9F5E9F5F90BE306F8FA0A0AFBDDFF040106F00DFF0817EFFBF90505EE27EDFCF00D0808091A21050608EF1904FB03FE0D0AFE080106F8FAF1E2FD05FEF609FFFF0004FE0603FB120203E5FDF901EB0F0A030CFDFF12FBF3F5081004FE08FEF8F90B0CEBF907F802E6E7F018C3FE130E00140A06FC0311EDF00D0608030E060AEBECECF8FDF9F2EB0E11F5EAF3F507F9FFFCF1F20D0108F9191DE30B18EE0D12E6FE05F7FE09E80821F7FAE5FB04F20E020FD60DFE000A1506FEF506FC070805171417FDF302FDE60902EBFEF8EFFCF6FF05FCFBF803FFFFF31B0711F109F4EC0805F30A09EA01F10AEDDC09FE06F4ECF309080301FEFDFDFC00010206061502F901F1ED0C00F902FF1507ED06FCF3FA0719F8F905EB110C0206FC0CF009F90207F9FBFB0202E90B0DFA02FF1BDCD7FD0709FEFDFDF708F80313F6FB00F2FDF30507F1F718FDFF0BFD01FBF80FF8EE02FD04060CFE0002FCF0F0FFF6170005F4F813F8EA04FAFDF9FEFCFCF9FC0C0E0A00FF1AFB00FFF2EFF3FC00FEFE1119F4060200090604FBE8F4F906FDFE1101F504FFF5F4FCF713F2F202080E0CF9F3040B0304F109FBFE12FE110CF70DFC0AFE06FEEE07FF12100104FE13E7F10EFBEAF901FB0402FCF2FDFD0D06FB0C0B0CEFFAF6FCF9EDFFFC0B10000E0BF40600F5FB07100AFB05FBF80501FAFB06F403FF020302FD0D0B00FF050601FFF6FB0BFB02150E09F4E7FFFDFD131605F307FEF906FD03FF020001F2040E0618090803F7F30B16F2EDFCF8F8000E01F007FEFAFEFD010806FC0913E8FBFFF8FB1503E9E70E1205FDFE080207F7F30F060EEFFAF70CFD07EE0DFFF8FE0CFDEAF1FE10000105F4D2F60CE5040AF60E0CF50CF60E01041804DBFB06FD0107FAF0000AFA00F7E3F50B01080111EEFEFF0903030CF7FCF21C0D09ECFEFF0DF321DDFCF90209F60C0A0B06F9BBED0EE5FEFCFFF9FCFADE0DF01AFE08E3F2E8F90FFCF8F8F813FBF7FB0BFDFF09F9051B0D07FF0FFD0521DFF71FFA201213F4F11DF8E4FE1FFDFB0D01F80F35F8FE010CE60FFC060B06F5FEF109F7FBFFFB05FBEEF6F10400FE14FDEEF7EC0DFEF0F214EC030601F40605F9F70904FDFEFCF5F7FBEEF10AFEFCFE030C12E7F300E00707F40306FBF8DE110202FC06F20E010502EB1F02FFF5FF03FAE706FEFBFEF9FFFC01061A05FAEDF80BEC0B0B04FEFEFB0404080812FBFE010C0E03E706020B0010EC06FD08FFF6F608FD07F7FE08F9FB0513E9FEF502F1F80002F8F2070DE7F4F3061407F6F7080F0202FFF50201030407E2E4FAF8FBF504FD0DFDFD1912F1FEEC00F60DF8FEF9F0FC12F9F5060DFD15FF0400FFFCFDF805FBF9EC07060303FA000A01FEF90107F5FBEE0AFBF40600FEF40F030AF407FA02EDFA00EA031001F7FFF9FE100DFF020704FC02FEFBFCFDFEFBFD0000FEF30301FE0401F7FD000301FFFB0003000202FC3103F9FCFFF2FDFF0000FFFA0201FCF8FF0204FCF8FEFEFDFEFD00FEF8050104FB01FD03FD01FF0206FC03FF03FEFFFDFFFF0602FDF900000BFB0104EBFFFC01FFFC01F2FD010100FEFCF80201FE00FE01FDF8FEFC02FE01FBFF02020311FDF801F9091608F9F600F60E12FB00F0EF02F302FBF4E605FD1109F80FFA04E6FE0902150FEF031306F2080B12F1060B080AFA0DFBF804F6F40B1103FF17F10DF30C08F80E0AFC00F9FE020EED10F513F101F30427FDFAFFF7FEFB04F3FA04050AE7E51E02F8F9EF07EFF5F70E07EBFE05FAFA141EF902EDED02FE10EEF207030F00EDF3FEFC04FA010F01FEFE030108FDFCF501FFFF0AFD050D06F703FFED05900200FA0E04F6FBFE00E8FF06FC08FE0713FBE90502FAFAFD10FB01FC0507FF0B02FCFBFDFCFC00FE00F4FBFE1402F709FF07FF0A040108030407FB01F003FEF80AFD07F7FD040D10E1FCF4FBFB150FFDFD0AFEF50FF90410F1F9F2FB0002FFFFFBFF09000A0606E214EDF20BFE020504FB04F505F314FEDEF9FFED0CE8F610021A040E140407FEFD0E2BF41209E5F003EA0EF5210F17000DF91AFE0226F605300F0B09031FEB210CFB05D3EFD808E6F7FD09CAFB060D0DF70A03F5F8150FFFF51AE60215F9F31611F8FCFE1110FDEDFEFA11FF0B2003F0EF06EE10DC07FBE6FF0AF6FA0304160BF6F3060609FFFD0B0314FE19F8FFEBFA0CEF0204F20900F50BF60D17E40102F202030FF90A06F2F201E701FBFA0A0BFDF9E4FDF200F300FFE9EBF8EEFCFAF5F7221FFAF3FAFCEDF5EBDC03FDF807F307FF05FEF7F50B0A0F02F7E5F5EEF00811000DFEF2021D04F0FC0AF3FAF8FB01F1FA000D01040505FA03FDFDEEFDF9F5FEF91811F817FB0C11FFFC01FBFCF904FBFC0206F80306070116FE01EEFC13EEFE01F0F8FFFD04F500F3FDF9130608F4F6F6F70902F5080407FB0DFCFF0AF6FDFF0608F9FFFA08F8F00D00FAF902FE1703FE0D05060000FE19050906E9FC050705F2060B08FFFCF808FB02FD0806FF0605FE0204FEFDF810F8F4F9FC07100307031213FCFFFA020EFEF806EF0DF402E104000705F5080A00FA08FBFD0A1200140A09EEF5FDFD0FFE1502F7FA0613FC10EAED00F6FEE71809E111FB060403EEEFF805F800FFFF00FEFBF4FBF7111D0201EBF90A09F8F7FEFE04F0020FFDF105FC09FD0F020C07FBFB0DFFFBED0DFD0E0202ED0CE402F606FD05F7F61D080EECF803E9FDF6F4F21401FF10F205FFFC14FB100B03ED0903F60A0804E9FCFDEF000809110719F50DF9F2F50BEFF502FF0209F3F3F907F4FB050900FEF8FBECE40105E6FF0A160AF2F4F7FD01FCFF12F901F3010C010BFFED1309EF02FBEFEF07FF0E0FFF0CFA14E806EA01FEFC11F20704F6F8F9081118040E09FEE90109EEF60EF5F9FA0E020413F31A0A01FB0504F20B00060DFB0401EC0804F101EE090206F4F5F6F6FAF20CF407FA01EAFF0AF90909FAF100F906F800E50810F6FD0AFB03FEF4F6EFE50713ECFCFCEEF0CCFF02FAFA14ECEE0202F0FFF6EAFCFB06E7F6E4FE0508F8FE110810F109F400F8040B1105060CE6FC04F5FBFB01FEF916F6E6FAFF03FBFD0611E7F8190AFDF206F3FCF91300FDFB02F611030A0C11F4F7ED060FF3040919F0E502EAFEEDF404F5FB03FDF0FAF5FEDE040A04FCFD0512F8FC0101FFFFEEF2FC1BF1050A05100BF80C090EFB17FF05FD0B13FD11F1F605F3F402ED0C00FC14000108FEFDFBFC020E07F70CF5FF00FB101601FB0708FA08FB07FE0FFC0CFF0201090808FDF4FCE50514F10409EDFC05030F04FDF005FC0800060B0B0A03F206F50007F4F5F7F9EF04EDEF06F30BFAFC10F9FB01F906030AFDF70406F1F615F9FF050605FE0A020107F8F8140702F70000F6FE0D070608F703F9FCFA01FE03040A030D0900EBF9FF03FAEBF90002F9F9FA07FEF7FC04F7F5FA000DF50DFD080318FBFFFEFA0AFFF5080E1DFC0100F8FF000B02F4060309FC0905F10205ED0604FFFDF904E2F7F3FA03F8F1F902F6F80901010A03F9EE0EFD00FE0D0A05FBF1F7E10DFCFE0406F8F4EA0BFEF6FB0300FBF7EA0507F8E7FFF7FEF0F915FC0400FCF2FA04FDF1FFF604F3E6EF0713FAF1FC001005FDFAFCEF1209F3FEF7F60AFC030A00F80BE7F803FC15FDF603ECF9000EFAFEF104FC030F0605FCFA10F905FB0CFAFEF00EFC04090EFC0DF902F20A02EEED0800F3F608F609FBF8FC00FDFDFF13F005ECF0FA0BF405080218F10608EB0001EA07F2F1080A01070EFC0BEE03120105F0FBEEFBF80AFC03010AF8F4FCFD03120DFD0101FBF1F90511FFE1F4EC02FF180D03EF07111118F8FFEF0DEB0B0638140BEF19FEE8F41815FF272EF800061EFAE6F20AFF0DDF100607FDF9F106F8051A08E902200AF7160BFFF62ACD0F060B29FD0CF402090D190323CFF00714CFFAFB11F611FB0BE1E6F006F0E2F3F81A24FA0811FE1C0E0FFFF91FFD1A1ADDFBC40811FBF9F8FFFA09FC00F4FE01070D08020702050502F2FDFFFC00F8060C00040501FDF204040507070717050804050407F608160706E605F007F600F7F5F307F6F709FCF8070408010302FBFEF30BFA060EF8F7FAF8EF0502F9EE0C02FE180102FC0DFEF10D0505F9FA0A0AEE0D03050C14FA0502F40EFAF9EDF1050CFF07FE0604F6FCFE0006FDFEFE0F"> : tensor<128x128xi8>}> : () -> tensor<128x128xi8> + %13 = "tosa.const"() <{values = dense<1315670656> : tensor<1xi32>}> : () -> tensor<1xi32> + %14 = "tosa.const"() <{values = dense<"0x7CFCFFFFB5FFFFFFBA05000004F8FFFFD0000000390300006103000088020000EB030000330300002803000085FEFFFF48FCFFFFBC040000C30200005D0300009D030000EEFCFFFFC0FAFFFFBA0200000B000000A20400005B010000D80300003CFEFFFF65000000C8FEFFFF58020000B100000022F9FFFF56FFFFFF6D05000047FBFFFF49F8FFFFE2030000450000004D080000CF050000610300002A0100009EFEFFFFA005000042030000FA020000DF0E0000B4FEFFFFFB040000ADF7FFFF27FEFFFF6A0800004601000053030000CB0500009FFFFFFFD2FEFFFFA4FBFFFF8A000000A20600009CFCFFFFC6FFFFFF6B0A00002E070000C8FBFFFFA0020000FCFEFFFFA6FEFFFF8104000072FFFFFFA001000058090000FEF9FFFF01FEFFFF7BFAFFFFA4FEFFFFD5060000A00100000A08000055FFFFFFF5000000F0F9FFFF520100003D0400003A0000009E010000B0020000E0FFFFFFFDFBFFFF5EFBFFFFA4000000BF030000630100001A01000001F7FFFFBBFDFFFF13090000CB0000003B0100001DFDFFFF07050000A90400004FFDFFFF5B02000019FFFFFFD0F9FFFFD6070000C5F3FFFF37FFFFFF09FBFFFF9AFAFFFF14FFFFFF9EFDFFFF5A030000DD0600006304000046FCFFFF9001000079060000A8FBFFFF5F000000120600006FFDFFFF6CFEFFFF9709000094020000B3050000A303000003030000AE070000"> : tensor<128xi32>}> : () -> tensor<128xi32> + %15 = "tosa.const"() <{values = dense<"0x03F81404FAF9030204080103FA0501030007FEF5FA0FFAFAFCF60502FEFDFFFEF90602FA0704FA08FD0BF703FE08FEFD05F2FD04F9FF0201F90101F4FB000202F505FF03FBFB02FC08F70C0302FDFEFA00FCFCFE03FF0E05FE02FEF901020BFB03FF0803001106F8FCF6090300FBFFFD08F4030004020B04F8080206071100FC04010FECFCFD01FFEAF2FF0504EF030500F7F705F9EC03FC01FB00FE04090508F901F8EFF90508FA0004F7FE0504FC0FFF0906020605000000FF02FC01FF02F9FE04FCFBF7FC0404F312FA01FE01050100FB0101FAFC05030204FD0105FF0F0CDDFEFAFE00FB0A08F4FBFAF9FC06F1FD04080506FAFDED02FD02FE06060109FD05F4FF05FE0304FB0504FE0AF80201060B01FB00FFFFFB09060AFE09F6FE0904FD030006F806FFFB03F809FB04F90103F1FA040502FD00F602FAFAFEFE06FEFEFFF8FE00050000FC00FEF300FC05F70005FCF5FB0802030EFEF708F4FD00FEF60A040106FC02FF00070501FA01FFFEF6FB050703FD00EC0403F904FCFAEAF5F702FAFBF503FAF4F7FF0204FD0101FFF50F00FCFA0A0600030A050103F9FC000107FDFFFC01FDFA01FD0000F504000617F800FA01FC04FDF90001030C020802FC0100F6FE07FD02FF0F09020D010105FAFC0800030401030606F4050703020002F8FF09FE03EEFEFD010503001006FE01050BF8020303FC0505FA000706F401F805050901100703FBFE06FA0303F70506FEFFF8FF06F500FA04F6FFFCFA06FD02F41710FC0207FDFB04F400FFFCF7FB0005FA01FBF8FF01030301F5FA0C040002FF0BF9FAFAFD03070100F805FA07110005FA08FAFAFA0203F7FE0200FDFAFB070E0B00F6FFFE0206F8FBFCEFF7010500FB00060B0108FEFBFF00FF000E00F8F4FE00E60605FB1004FC06F30CF9F8030AFFF7F3FC060A000DFCFFFE05FC060201FCF7F7050CFBF6EEFD02FC04FAF7FEFCFE06FFFA00FFF90DF502FEFEFE04F70A0406FA0202FC040109FE07F801FAFF0A0109F7050103F50CFA090AFFF600F604F6FD0603F9FCF6000402FC060302F70AFC0101FC05F80100FE07F805010315060EF7F405060AF6FBFDFA0D030007F606FC00F011FAF504020107FD01F1FCFE02FB050408F9F100FD03EC09FF11E7FE08000309FE0D000304FD0101FD01EFF8F6FFFBF5FB02FB06F5FAFBF8F8FD02FB0400FDFDFC0200F5EC0905FF0DFBFE0DF805FBFA0A010205FDFE0EF8FCFCFF05050AFA0208FD11090CFFF8FC03FC0BFEF90E06CF01F502020A0B08FF0004FB090300F108FEFC0F010DFDF5FF0607FD07FEFFF7F404F5F903EDFEFB0003F7F6FC020104FFFA07FDF001FE03030804F9F6130201FB07FEFD000500060FF0FB000505030304FF00F7F706F403FC01F1FEFA030CF901000205F80004F103050801EB100104080403F90A04FC0400F8F50410FD1806EE06FE06060FE301FC0100060B07ED0304F808F3030BFFFD00ED0CFBF5FEFF15160410F00002FBFAFC04FBE502F3FCFEFDF1F9F0060BF8FD02EA0D0AFF120006F1EFF3010E0514FF0D05ED0AED0204FD1AF7F8FA01FD00FF0901F000F403FA0605FFFC06FC0100F7FF0EFC01062507D3121712FF0FF911FB01F6FEE8030F05FD05FF07FF03F9FA04FF0400FC030602F1FF020609FE97FEFCFC010B05FAF7F8F8F9FBF6FB05EFFC070603FEF9FE0B0003FD00FC05EFFEFF06FDFCFA09FCFF2307FA02FD0604000501FE0104FDFCFF03FFF9FDFD01FCF3FAFFFCFAFB01F9F803F3F90AC806F9F707FF06FE0112F4FE0005050800FB00FFF504FCFFFF02FB0000F8FA05FB00FD08FDFE03FB00FA040005F6FC01000303180000FCFDFFFCFFFFFDF3F803030301FAFFFE0202FCFE0509FEFD120107FFFA02FF01FD020203FFFBC201F400FEF601FF01FFFE08080203FEFF02FB0500FEFEFE01FD00FE0403FC00FAF300FE0105FF0306FEFFFE000AF801FB04FD01FE05F503FD0905FE0D010401FD0402FC0D0207070305FDFC030102FB0805FE01FB0103FF020BF8FFFB09F90407FEF8010403090204FF010B03FCFCF6FD01FBF9FEFF00FC000206FEF80501F500FD0400FFF8010EFFFE00000904FF02FF0600FEF800FF0403FFF9FDFD0CFF14FEFB06FF04FF0004FDF60300000501FCFB00030200FD080005020DFE08FE0401F8FC04FEFD0908F71612F709FE0EF70902F2FF0A05FAF8FD040501FB0403F5FA030403FE0703030308FF05F60B02FAF6FAFAF20505FB0D0EF1F509FFF70CFAF4FC00F60B0EFEFCFCEDE8F90B1101FB02060910050405FC03FFFFFBF3020111FC04100BFEFCFDFD0200F502FEF5F8FEFF04FDF9FBFD0A12F3090605070DFBED0EF8FA0905F805F4FBFB0407FDFDFD04FEFE0206FCFF0F0400040006080301000003F3FEFAFDFFFCFCFCFD000101FDFDFE000BFFFAFFFE03FD01F7FB03F8FBF7080302FF0304FCFB00070BFFFCF3FCFC07FBFAF3FDF8FFFC08F700FE04F0FAFD05FEFC000206FF000402FDF5020103000305010A0B0E050400FC00F9FBFDF3FCF303FE05FDFEFE00000D0500FFFEFFFF040404FF06FB0301010205010402FFFF8F190401F803F3030204FEF8F7FFF9F9FF0000F9FFFD070100FFFDFFFE050DFDFAFCFCFEFA0202FAFD0702FE0CFCF5FC010101030203FF0801FEFC0102FFFEF80105FF0B0407FC02FBF9FC0001FF090106FD000801FBFF00F90301FC040802FC040000FCFC0F0001020101F902FF00FB0000FCFCFF01FB01FAFFFE0C03FE00FE0100FE00FF050400010701FD0000FEF40103FF03010202FCFFFE07FC020002FEFFFB04FE0000FD02FE00FF01FE0502FBFBFE0602F504F8FBFF0103FE03FFF1FF03FEFFFCFF0602FD02FDFD0600FE030001050200F403FD03FDFA0208FF010101FF02FCFEFFFD01050CF702EF0803FC0B01050601FEEAFAFAFCF9FD03010501FC0AFCF60BFC030CFB0704F40AF2F90006EE050102F5FA080900FD00060B05F40502FB0200FF030702F8FE050309F504FEFF05000806F50104F80001F7FEF0030609090803FBEBFEFE0009F8F905FEFB07F6F408FB0000F2F70210FEFE05EAFEF70008FEFB08F808FEF706F9FC07FF0500FBFF06FEF9F502FFFB03040100FA01050203FD03FDF80602030AFEFCFEFB050B0105040301060003FE0405FDFFFE050C0002000902EDF8FD0AFE0401FF01FE0FFE0506FD0BFD00FDF701F908F9FC0A04FCF707F906FEFB07FFFFFD01F506FAFF0209070804FF02140005FCFEFBFD04FBF8FC1302FDF6FD0308F7FEF400FAFF120804FA000A08FFF9090B010007060006FE01F40303FE000FFFFFF50304FB03FFF402F902F2FC0AF80102FDFD0708FD030DF8000602FFFF02010101FEFCF5030005060402FC0001FA02080C05060702F8F50204040CFB03050CF804FFFBFA0B05FC00FCFEFBFFF8F9FEFC00FA0406030501FEFA05FB020102F402FB0000FE0110FA0703FD000AEB0001FA0301060305020703FD06DDF10103FB03001DF9FE07FF0801010705FD0407FF01FFF40602ECF6F702FCF9E4F900F0E6FD051DF806EEFDFB04F903FB02FF00FCEB02FFFC01FFF7FDFE000906FF030809000502F4FCFEFD18F50702FFFEFE0AF8F6FC04FA0101FF03FC01FFFF010504FD030701FEFFF0FD0CFE000C010501FE06FD0105FA0303FAFC07FE06EDF8FDFEF9F6F204040602FEFB08000C06FB01FD0CF5FC0206FDFF0502FE0C0509020401080608FA030100F5FAF9FFFBFD0408F60CFEFBFA0100FA0002FBFE0B0C0105FC0301F5E6F301FFF8060907EDFFFAFC00FEFCFEFB0001FC04F705FEFF0704FDFE02040100050508FF06FADEFFF3FCFC1000FEFA0201F5010605F90104FE04FEFF09FDFDFC0BF405FF01090609FBFE01E2FE04F700FFF8FF020AF703FE01ECFBFFFFFB03FDFCF5FFFDFC080505FDFBFD0801050103FAFBFFF707FD06FC0505EDECFBF909FDFF020C01FC00FDFDFD02FC00F3FF03FDFA010510F7FD000203FE1100FC01FD000002FFFEFC020201000602FF01FD000400FC0101FF03FD0000FE000000FCFFFE0200FFFFFA09FAFAFEFE010501FE010001FC04FBFF000203F90007FF010401FC05FB011BFE0100F8FA01FFFFFFFF00FD0201FC0000010305FE03030100FEFCFEFC01FE02FF00020A0002FD06000001FD00FE03F705FA0306F8FC0302F7FDECF9FDF106000BFE04000D06F308F9FFF301F818F9FB08FC120B0004F7F90F090D000607F907F500F80705F600FFF209040502FE12E4F80D0803FDF80405F10302F0FED20AFDEFFDE914E8FA030108FEFFEA0EC2FB030BEB020F00EB0D02F900FDF9FEF4030301ECFF10FAF303EAFFFAF40303FEF90FF1F6FC0AFA0406FFFB0107FD02070501FF01F904F60105000107FEFC0507FB04FD0102FAEEF8FDF9FBF6060302FBF700FCFA0DF3F802FCFDF8050DFDFDF9080603000DFC0901FC080409090501FCFEFAF903040DFD0006FEF6FB0203FE0503FEFB010500010306FAF3F3FB11000205FE0405FDF9FEF90305FCFBF3F9FBFC0605F820F9030001F9FA00F20804F8FEF6F60D11F1FD0EFC0D0712070FFCDBF9F6FF0FF7220EFFFCFE0904FAEAEFFE01FE000204040502F501F9F409010CDDFC03FC0DF000F513F7EB02F8040B03FDFB030CFDF1FBF1F900F50AF908F5F2F5D5FFE804FF0BFBFC0205F3FDFDFCFE15010F050309E301F811F9100D01F9EDFF08070AFBFDF7F7040000F20705FE07FFFE0BFE05F901050003FEFCFC06050100FE010E03F704F6FEFB05FD0301FCFD03FEFF0107FBFF04F90CFDFAFB06FB0413FE02030308FCFE01F5000506F7010402FD08F601F4F6FC04040301F901FE010200FF00FFFDFC0503F8040002FDFC0305FE05FF06000DFB00080F020304F9FFFFFDFAFD04EBFF01F9030007EAFF03FFFEFAFEF5F1F903F9180204FF04FB0CFD12000E0307F305F501FEFE04FA05050DFE050308F4F8F5FBEB14FDFE04FCF9F901FFFDFC06FAF40CFF07FE04FFFBFE0814FF03FEFB06FD0007050FF9090509050B060306FEF60308E8FF02FD02180CFCFAF002F605F1F6FCFEF10405FB08FCF7FBD2FEF70903FF0405020126F904FAF12BFB0808070200FA06FBFC3907DB04FF04FE04FC00FDFCFEFEFEFEF7F2FE0307FCEEFA01F8FF02FF1A09FD03FF03F5FD000302FF0403FEFF1B0306FD02FAFF07F8FE09FDFEF3FD03FEFD04FC14FE08F7FDFD02F9FCFD0304F1FCFE0703FE02FA01FF00FBFC00FEFD0301E501D6FB0FFB0C02FB0301F9FCFF05F7FE020A06F502FAFD0100FFF8FD000000FA070000F104FD0B04060A09FF00FDEAFEFFFEFB07F6FB0008090800FB0102FF04FD030107040D02FCFE08020C0CFA03FC0910EF0A0104FFF906F9F1F305FEF1080401F9F4FA14F701FEEFFCFF03FDFFFFF3FC0006E903F61DF8FC000D0B03F3FBF901F6FC06FA03F60BF0FE01020201010200FFFE01FD1D0400FE00FE0200FF0402040102280103FF00FF000300040004FE02FD0002FFFF04F602FFFCFF00FF0200FE0001000005FC0100FE01030001FE00FFFF0102FFFF00FE03020400F9000401FF0205000302EF0102FFFDFD0000FF030400020303000300FC02FCFCFEFD020500FFFF0003010303FEF9F80A06FA07F9FBFC0204000504FC0300F90708FA090AFB0000FE07F90500FDF9FFFB0500FBF4F408F4000501FDF9FD03F2F90B02F802FB05F005EBFEFDE5000005FBFB08FC0209FEFA09FC05F4F8050211F60202FFF911FE0CFA0604020FFB09FB01FCFD06050309F4F308FEFBF801FDF4F8FBFBFE0408000115FE0102F80EEEFD03FB04F909F403F7FAF71101FD03080BF8F408F410FA0108F9FA00F7F8000A0A040501F6030501030AFFFEFE0501FFFD030407F80101F5FBFCFB020DE8F805FE0E01FA08F1F10AFEFDFA070D000015FE0FFD0EFC05F40BF7FB020408FC02FAFE000001FE0B04FA05100406FA030405010F01FA050FFC0701F8F4090BFB0DF4FAFEFF0DF6FBE90C0705F3FCFBF5020005ECFD04E703C3020000EBE101080A092126F117070307F10906100E07FCFB02F100FEF9F9F803020BF5060AF1E413E20E0DF1FB091E070F0AFDFB0013FDFFF510FFEFEB0A0700FFF7E40AF902F70E061A0A112707F906F41302F5FD0903E80CEFFF0DFAFCEBFDE9080D1A0802F0FBF51702FE00F8FB11FA07FFFC00FC0B0102F9F0F1FB0103FEF70200F0F7F8FB04000BFA06FEFEFCFE00040304F801FFEFFEFDFD0109FFF90100FB0AFF0BFA00F9FCF90301000C02000506F9FAF8F9FEFDFCFEFBFC0102FB000219FE1407FB060AFDF90203030106130DF80007000300FB06FEF901FC0403060002FDFFF4FD0206FF0401FE0903F9F5FE0102000904F106FBFEFF0406FDFEFBFEFBFAF2FFFDFC02000907FDFDFE0106FEFB010102F90CFD040402040001FBFF01FF01050B050406FFFF00FF0404FCFA01FFFC03FD00020000FDFE0102000002F804F3020419FAFB0607FF0A010AFEFBFF06FDFAF8050705FC06FFFB0A060408F8FCFAFAF5FFFA05020209FDFCFF030A0406F30F010012FFF9FD0EFE06070301FDF8FBFB0A0DFAFFFE02FCFAF903FD02FDF904080105FAF0FE0104EA00F902FD000AF6ECFDF90103FC00060B07FEFCFFFDFCFBFCFCFFF9FF0602FDFFFCF300FDF2070BFF02000C05FCF7F8F304FA03FFFDF3FC06FEF8F3F8FEECFD00F3000FFD060104F8FD0209F5F8FC02FFF60002FEFFF4FC04FB0401FF0400FAFC0400F8F901050100F9FEF50305F4F9FF000702F7020006F8FEFAF80003FA00020300FC03FFFC0207060500FA0901040202FDF9020C050502F80502FEFF0005F9FDFD01F002FA0202FFFFF4F605F704FBEDFEFF04F8FF00FCFA0BFD080304FEFD020005FEFDFDF1FB06FCFF0501FEEDFF0501F2FBFAFE0500FAF700FF08FF04040305FCFA010206FCFAFB00FFFFFEFFFA0101FEECFCFB000801FFF9FF00F602010501FF06FAFEF902FE02FA040300020203FEFA00FF00FE00FFF7010300FFFD030109F9F6FDFD00FD06F9FFFEFCFF040106FEFBF604FEFDFFF707FC04F704F8FBFCFF070403FFFD01FEFC0AF9FB0C0CDCFDF80504F60BFA0A0707090DFB0EF905F5F9040504F301FB000CFB07EF090DFD09FDFB0D0E0BFA03FCF607F8FE14F204EBF10E0006FF0CFCFC04FCFDFEF309F5D7020000F104040A03F90CF9F8F20AF4F6040A13FA00FCFCFCFEFA03FB0406F5F60C03FBFDFDFF0E030F0C01FF0408070402E101FFF211E8FCFD0304040106F60506FEFEF602FC01FE09FCFE02070109FDFD0602030103FBFBFDFBF9FF05090703F40008FE0B04060BFFFD02F90502070103020CFCFEF20403FB0207FEF50106EAFBFEFDF7F5F8FDF9FF09F4FD02000308FEF4030703030200FDFE010600FD07FBFF05040105FDFEF8FE06FB06FF0605FEFFFB00FF0609FE05FD07FEFE04F7FBFC00FF0200050200F705FA0FF902F7FE07F7F9FFFCFEF503F8010504F90107FAFC0A01FEF6F80103FDF6FBFD04FD04FD06070303FFFCF9070305FB020503020104FDF5F102FDFD00FA0100FCF5F6FA0AFCFBFF04F706F3F5F901FEF6F8070A08F70803000802F402F7FB080AFD0702FD08FC0201F700FD01F3F504F50C0712EFFC02FC00F9FD03FFFEE9050D04F416F8FD14FAFA0003010D0505FF0901FC07D615F8010DFEFFF8FF0209FD07040D060604ECF7D51CFCF3010601FBF8000202FA01FB03FDF903F303F8F3EFF3F607FB0BF9F4020306F008EA0AFE01EBFFF604030004FFFB0101FC04FEEEF7F9000603FDFE04F8F7FDF00B040C05F60EF90DFAFDF602FF00FF0401FFF606010D00FC09FDF8FAF801FF030402F901FC0207020BFDF9FF0A0304000600FFFB0001F2000409FA04F4FBF9F1050A090003FEFD0202F8090AE2F504F80A01F50AF7000FFDF9F700F50908F805FFFDF7FCFA04040305FBFF060203060FF6FE0003010E0B00010300FDFDFEF7FF060102EF04FC02F50CED00F906EB08FFFDFBFB01010203FE040021F8FAFB13060E040D06EFF10206F50DFEEEFAF701F4FA00E2B100B608FEFC04F804FCFDFD01FA080CF2EFFF0DFF01FB08340D19FBFC010702FF02FB0110F3FD290A1402FE03F2F70BF8EB00FEF94FF804F9F705EE14070B03FC06080AFAF600FFFF0804F9FDFB05DA01010102FBFEFA02020D06FBFC0105FDFFFA0101F405F406FF04F80104FD01000504FCF502F7030500FD04050003F7FE00FFFCFDFBFEFE0200F90400FF03FCFB050300FC02FA04FF01070600070804F90108030404FF00FC0401FE0401FE0103010D0004010AFE0504FBFE07FF010404F8FD010400FF0008FBFF0101040106FC01FF02010E0AF706FA01010FFF06F8000EFDFE0AF1EF0902E900FBFBF40DE401FB0CFFFD04FBFCF71009FE08FE06FFFBF717FB03F9FAF5F0020504FBF509090C0A0C0800E1F81307FC03F5FFED04000DF6FEF8FD0808FCFF07EEFA0B0E0007F7F1F2F602F9050708FDF2FE02F6FF08E8FF01FBF403F5F70C020D000BF2FB16FE02FBF20205FF01F4FBEEFEF70219F7FA0006F905FE0405070208020DF902FC000A03010C0201FEFB04050503020308FB02060301F4030B0AFEFFFBFFF5FFFD0DF8FD01010305F509F10201FB020006F70905FE090C0007071707EB010302F90402FCF0FEFCF7FF0001000C04F402040F00FEFF04FAF504F60AFE00FFFEF60A06F7060E0BEEF70E00FB02FF0203F8FE0905F4FDF910FA0C0808010002F0FC0604F0F0FA0902F80A07EDEEF8FA1807080514090A10FEF120F1FE0200050507EEFC18FFF202F50C06F205060712130AFCEC06FEFD04F908FEFFEF0AFBF6F20DF9F3FCF20801F7F9F4FD01FB1501FA01FBF30704E9ED0009F90B05280C0004F90DF2EC0D01FF00F601FFFEFB050001FA0303FE09FF0003FC0AEEFBFF0203FE07F9FB00FF0705FC0701000B060202FC0C0104E001FE0201000BFC08FAFFFEF9FF06F808FDF900FB00FC03EEF3F7FEF9F8FFF9FC03090002FF02F602FA0700FCFFFE09F3F601FA000C040305FF04FD03F8FCFC00020CF200F8F4FE0404FD08FFFD00FFF0FE0B01F8F70000F7FF0001F80300FC050306FD05FE03F601FEFE0401FB0403F4F8FF00030105FD03F9FB02FEFF0205030103F302030303FC04FDFDF604FA05FCF7FE02020109F8F903F6FD0208F8FE05F7FDFF0219FF0514FCF407FD0503FE0702FFFFFDF30402FF09FF040103FE0202010401F6FFFBFF02FB01FCF9030109FB00F914F809FEFAFF04F3EA0000FCFF06FFF8EC04FD01FEFC030AFCF90202FDFAF4FE040A0403E804FEF0FAF8F60600F3FC0C0102FB00F5FD03040006FBF20A0EF1FE0907F9FFF8F119070D0A0111FF1501020402050304ED0108F7FA07FBFDFBFCEFF50801F8F705F9F50103FFE8F0EEFEF70301070406FEFA04F8DFF7F80CEEFF010905FAFF130007FEF2F8F7FD0C02FF07ECEE1605F401F3FEF80102FB01ECEC02FAFE090002EF150DF1FBEBFD010BF3FB0A04FA030610FD000206FF1AF80004F803ECF105080B0302F5FFFEFFFDFD0401F8F913F704F3F7E7F5F8F8FD0A0005FF00F501FC0608F8FBF9EA04F80EFFFEEEF906010805FF06F6F206FA06FE0F000CFC0D081603F20AF3010BF200FDFEE909FB09FF090506FFF9F30606FB16F90BFD04F1030502EF08FDFE09F302EF090A02FCFE020305050DFF04FE04040AEEF6FA05F803F70A0A010EFA04FA0EFE00FCFB00FCFE060CFBFFF5F709F107F9FEFD01F7010D08040406090CFEFC0402FE04F4F30CF508FD0609F10305FD0306EEF3FAE8FE0AEB090D00FDFD0006FCFE1AF8F7F90107070A02F804FA02FC08FFF8E606F00910FF020904F519E5000201FEFDF6FB0700F805090003FA0801FB0DFC03FAFE10070009F402F3FAF8FE040311F50CFB0DF30E09DA0CFF06FFFDF0FE0101F8060008FA0501030109090BFBFD04060807040712E8000B05FC0C0007070CEF060BFB03FA03F409FCFE0800FC00FEF403010202FF0800FAF701070202FDFAF80203060703000104FF050B0608F5FD03FE01F60412022203FC02FB130002FEFF0304FCFA04FAE9030DF3FFFDF8FA00050110FD03FAF204FC04040CFC000000030404FBFCFD0A03FC0A03FDFD060001130604FEFC05FFF808FCFF02FC0504FFFF09FCFEFF07FDFDF7F5010000FCFDFE0CF9FF040200F4020B0009FBFE0304FAFDFC070DFDFC0404F806FDFB0107F1FFFFF5FB02FF05EE11FDFDFE0EFF0BFE0501F903FE0A09FE0E01030A03FEFF050202060401FA0EF60101080008FA0904F9F7FEFEF8FA0F00FD00F4F2FFFEF7FF0610FBFCF5FFFDFDFDF808F9FC08ED06FF03F6F5F6FE030DFEFA04F8090CF5FF02FAFD040300F2ED00F6FD0A15FEFC04F5F601010301FD0106FA0402FDFC0CF2F906F8F7F8FDFD08050203FEFBFEE7040603F1FFF4F4F50911FBFE01010803020407FBF7FBFAF7F2F20B06FF02FAF90407FF0BFDFD0611FD0AFE02131602F1FAFE0708F8F3050106FFF8F3FA020A0BFEF80207FF01FC09F90605EDFE09F905F706050F0000FA06FFFEFFFCFC16F500FB030DFC03FB0003FBFBF30BF2010A070207FFFE0006F8FE01FDFCFB04FE050201110A000203000503F5F603FF09FD06F9FCFF0305F904FD0102F8F9FF090503050BFEFAFA0200020001FB07FE05F8FF0101FAFDFA03EE0902070103F7FFF8F6F7FC140CFDFFFE04FEFFF9FE030406FC040600070603F902FDF5FBFAFE0106FF03FFFD03000002FDFAFAFBFFFC04040103FE0502FC00020600FE00F90507010304030604FE0403FAFEFBFA040604FFFD0504FD04FFFB03FE0301FB01FCFD000007F6FE0300FF010009070401FCFDF9FDF8FFFE040C000502010306030AF5FEFC04FF09F8FA03FAF708E0F60803FC04FE1A09F6020103090F030F090204F404F1EF0FE0FF0E02E902F504F4FB24F202F7000503F905140D0CFF05FF0403071520F70018F7038108F4F40F0106F400FD000EEE01FE07005BF007EFFB052606020D05FA08F6FCF10B020211F7F7DF00FB0C03FAF8FF09FD0B06FC0AFA0709F909FCACFEEB05F905F928F2F401F80300F2FD05F21904FFE804CBFC0603FD05FCFE0BF804FDFBFC0005FEF7FF0C0405FDF6F1F9070500FD0A1707FB090DFD00000305090504F700E2F90DDE0AF9FB0F0505FD0401030603F60B0509FBFAFE08000CF3F7FDFFEC0B02FAFA0107D60207FD0CF7FF03FD02FC04F302F1F6F4FCF90302FDFD01FCF7F70904FB020206F7FDFDF90700000BF008010008E8FC01DCFF050009FF051101060C11FA0201FCFCFD0608FDF802FAF900F510FEF8F5FFFE010104FDFD0200FB390706FEFE07FAFC010203F105FD05FE000AF9F9FFFCFDF904FEFA03FA060AFEFF19FB08DFF90402F9FAFE0DFB06FF08F3FBFD0704F00504FE01F306FF0004FF0200FBFFFC02FE04FA09060406FA01FDF6FA030AFFFDF9FD00FC0400FC03FDFB06020106FC0401FE06FAFAF704FEFB03F8FBFC030306F4FD01FAEE03FA06FE050203FBF601FDFE02FEEEF4FEFDF9000300FCFCF90109FF06F90B090A06F507F807FCFE0403FB01FC0C02F9FE070200FC0E06FE07FE05F8FC080203F8FFFEFC05030611E1F40C00FD17E3FBF9FA02070008EA0CE3070FFAFDFD0401140CFAF4FDFA070603F9FD0209FF08010DEA0BFEEE0DF8FF09030BF6F703FC0317FDF80C0EFBFBFDFC0E291216F826FC0204F0FE030506F105FE10E2F50CED0CFA0B02EE022AF2F70A0B20D00AEA0D070102F515F8FCEAF810F10A19FAEFF9FFF3E4F805FDEF05FEF30503FD020109FD07FA08F60108F305FE070DFD05FF0E03FBFC0102030306020903FE0BFAFBFD02FC06F6F7FCEEF90400010CF8BE42FDF7090903F102FF0103FD060101FCF9F3F5F80A04FA0B05F40CFF060AFCEDFD0B01EAFAFEFFF8FD070D02FD0BFCF3060C0FFFF3FC06100106F708020503FEFA09020100F4000D0EF9FFF303FC011007E8FB03FEF302FD01FB0006FAFC10FE08FEF40CFF0FF9FD0409FBF90CF708EBFCFEF80601FAFB06F40E02FFFD0106F81001FFF8F503F9F9F706F0F9FC0CFF06FCFF0805EDFDF401F3E703F803FE0605F9FE0E0EFD08FC0803FA04FE06F3EDF20404FDFE1816000904F5F2F6F5FDF500FEFDF50506F1FBFE02F7FB03FA0B040AF4FDFFFC00FD07FC0604F40B04FA02FFFFF500FFF20FFC07FCF9FBFA06000808FDF7FFFA08FC0500F80003FC0602FE02FFFEF900FFFD0507FDF9F907EBFCFF0004FA020004FBFD0F0406070605F60704F4FBFFFAF501FEFD03FA04F40502F5F803FE02090809FDFA000306FA03FDF60602FDFC0805F707F30603050EF6E70504F8FF00FC0DD5FD150DEBFAFB0DFA0100FE02FEFEF40F01070300FFF7FDF503F7F6FF08F2FCF000FBFF0713000F11F114F00307FC0106FEFE0AEDFC00C2FDF7FE2208030509FF0B01F9F813F604000609EF0FF6FBF200F50DFF010B06FF02E207FE02EF0105F5020B0208FE0503F900FEFA05EBE8FDF201FF0106FDE8FD0A0200040AF90100FBFFFFF40500F8FB03FC0200FF05FF01FA02FFFC010103FEFEFD03F101000A00FF03FDFF07FBFEFEEF02FD06FF020407FFFFFE00F9080EF70E05FFF0FB05F5FE05030703FEFD03FD0AFE0DFFFA02FDFFFBFCFF0200020800FE0AFFFBFF0101000E02FE04FD030501FF0601FDF90DF2FE00FE06FC00FC06FB02FEF80503FEFE00060205F600FA0202FEFDFFFBFC10FD04050108FE010104F909FE0000FE01FF04040302F606020202FE01010000FF010700F9FD01FC020DFDFAF2FA040608030F0309F20A0A0010F404FCF80401FAF801F5030100030305FC160908FEFEFCFEF6FDF9070509F8000705FD0805F70501FC060307080DF30804DC07F1FF0602F80608FCFD07FDFF0FFA100DFDF50CFFF6EA060502F1F20406F906FEED02150F120709F704EBFDF5051108FCFB05F3F6FE02FFF3FFFA05090010FE0304FEFB0300FAF90406F90EFDF4FC07EAFB020D080619FB0B060DF701040AFDFFF6E6F40303EFFFFE01FE120FF4F300FE01FC13F0F70005F8060104FA04080602050503FD0100FEFEFEFE0B0104FD0A080B05FB04FA05070600F7FF04F60206FBFB07F8FBFC02FC040503FC02FFFBFE09FFFF0400000702FCFFF6050103FF0A0C05040BFEF308FB05F8FD0106000BFCFEFE000101FF03FF0602F609F9FD02041904ED06FD04FD010A0501FF05F603FF0100FA030103FFFDFBFAE1080701FC070C0211FF0102F20805FB00030D160B030BF803FCFB05F807FBFD07F8F10EF2FDF20301FC0E00190200FDF5F6F4FA14F4FA0CFB03FCF5F5FE01FA08021CFF05090300FEFCF2FC0605F6060BFEFC0605FA0601EFFE0A0907070801FCFCFA01020003080002F70EEAF9E8FCF9FAF40006FA0B010CF300FEFE06FB04E600FBEAFF1503FF0406FDFBF904F00D04F4F5F7FB130003030302F409FD0307F70A04F9FEFDF503FDFC0AE1FCFD03EDF6E50CFDF300EDFD01FBF31D0800FFFBF703F20D1419030009F9F50EFAF50301F5F9F30DFEFE0910F407EFFBF704EB03FEFF03F105F2EE02FE08FB00FC0B0301F803FFFC05FCF500FF060206FA010D031B0CFFFBFBFDF20705FF0F02FBFE07FF070A03E70F05EC0706F801FE0603F9FEFE09FFFBFBFF12FB0004FC03D303F4F4060E02F3FF0B0C02FAFCF5FEFEFD060D01FF04FCFC05FC0EEFFEFC0008FBFDFBF70D09FB00FFF8F7FDFE0AFDF3F8080D06F7050501FEFFFFFEF3030007060CF3010604F5030000000002FAFFFF01FE0014EE0102F0F9F8FCECF70CF906FA05FE02EA02FBFB0AFCFE02F9030206FDFD04FDFD0A0AFBFCFBEEFA010AF406FAFD050107FCFCFDECEBF904060FED0206E8FF0200F100F501080AFF0F06F7FBFF0E08FCF8FF01FF04FC0809FD03FD09F602FCEEFEF802F9FAFCFE0405FBFFFDFFF1FF01F2FFFD0BFF020C0400FD00FBF6FBF70BF5F111FB0CFEF7FB0DFC0BFA02F71CF4FB09FCF911FBF603FAF8EE00FD040DFCFB02FFF705FCED020004E905040C0FF60B0308FC0B0100F80700EE1306F1FB11FBFB05F5F60503F5F6F3FBFEFCFF02FFE3F52DFC080A030E01EFF4000C080EFC04010AF00A0B01FE08FD04FDF20405F8070F021208F5FA040308FEECF7F40C0D09FEF7020201FC031205FDF5F805FFECFDFA0B0500F801FD0006020AF9FCFB03FD0DF9F2FC070206FD02F8FF020402F7FDFE040600FEF70B001D0BFEEFF6FF03FC03FF11F5E8F3F7E6FC0705F1EDFD01F7FA0103FBF711FF01010607FEFEFC10051401FF01EF0400030903F5F5020FF60704F1040510FA03FF03FC0714F90504FEFA01050803FF0304F90000FC0104F8020506FA050402030301FD0A03FDFEFCFB040C11F303FE0405F80002FD010103020606FD04030BFF0BF90702F4E7FBFF1E040A0B0D0B07FF0002FFFDFCFE0BF8050302FA0A0404FFF80005FD00F904FCFF03FDFF03FBFDFB04F4FB05FF02FC0303FA040401FCFF01FF0206FF06FA08FD0804F30303FFFD010DFE05FC0DFE0203FC04090AFC040601FFFCFAFC05F9020407ED02F8FAEAF802F4000207FCF9070303FF010FE3FC07FFFF10F20300F6000103FCF7F20BFCFAE7FA020A09F9FE000B06F80305FC0DF4030003FE04FF030202F4F8F801F6110AFFFCF30EFF14F20508F1FD0302FE0A0505F504FCFC05FF0BF90CFC07FF01C40403044CB6FE02F6FE04FDFC0B0000F3F54EFB0007FDFB060109FEF6FE04FF22F7FE01FDF722EBFB040008F6ECFDF4F600FFDEFFF6FFFF01020106FCE7FDF8020004F703FFFFF7FF01CC01FD0402FB0B05FCEA04F5FC00120503EDFA0B07000F010103FE02FDFCF10302F80703FE380A32FC0500FAFA0B00020200FFFC04FFFEF4FBFCFF01020401FF04FF010402FD13FF0507FCF8EF0905FF0505FC0AFE02FCF403F510FB0BF301F7000C05F2FB0002FC06FEFFF6FF0EF10DF8040002FFF41309000802F50D010C03FEFCFBFA0406EFF10709FEFCFC0103F70BFD080F0008F9F50BFA01F2FE00FAF707FC09090A0506FF05FCFDF900FD00FF040401FF05FD06F8FDFF0802020402FA00FF06FB00F8F5000206FCFC0BF4FF01FBFDFF06010102FB04FF03FC03FAFA02F9FC0600010703FFFC0706FDFEF40209FC01F8FDFD020300000401F7F5FF050D040903F80B05FCFB0C02FC03FF070103FD03F8F80409FF03F6060005FB00020501000002030702FE0703F90FF40002010906FE0B00FE01F8070001FEFE03F80704FC02E9F801FF4DFF05FF0002FE01FFF91405FFF6FCFEFF00FFFE0AF6FDFBFFFEF800FFF6FB010002FD0203070003F9F8FE02FCFD0A0500FE04000400FF000104020200FF03FC0102FF03FDFD020001010AFA1C17000100010101FC01FBFFFEFE02FDFA000106F8F7F70504FD03FFFDFBFE03F9080AFBF50400000501F9F70408FDF2FF03FE04FD02FE03FCFC01FEFEF70705EE04FDFEF5FE0E0309FFF3FFFB0103FB02FC02000910030AF5FD0409F9FF0003010EFAFB02FD081700F30104F2FCF700FD0FF5F4FE0801FCF902FF000800FE080C04FEFEFC06EA04F009070100080002FDFAFD17090003010303FD0104F10E0AFE050305FD00ED07F00B040E0408FDFFFF0AFDF401F9FB0FFEF500F8FE05020004FFF90F000500FFFE050707FA030C010408FCFFFEFFFEFF0208FA05FB0B04FC02010A010103060100FB03F9020EFE02FD0D09F607FEFA0700F2E806030404FAEFF9FD0006FD040605070401F30AFBFB10090D05F4FAF4FBFD0806FFF40A05FCF903F6FB0D0001040307F8FCFFFCFDFF07FC000100F8FF02FE050FF8FF08FFFF0609021307FF05020207FD0405010C05F8FF16F303FB100205F60803FBFE000A01F9F601F8FCFEFEF00302FE03EEFCF9F80502F6190000F5FD02FC0602FFF901FC04FE09FB040503F4080406000906FB0BFE07060E07FFFBF707FB0300FCFA0203FF0B0105080407010201F9F8F20EF609020401FBFE0001FDF703F4E906FAF80A0AD101FAFA08EFF10300F8FCFA07F308F8090F0AF9F50002FB0405F50603FEFEFCFDFFE306FB0901F8E8F70B01FA04040CFE1602F50900030704FC0602FB06F106FF05FB0604FDF905FF0C0203F407F20BFEFF0CFAFEF70207F3FD0103ED030E04FBEAEA01F110F702F506FFFF0AFEF500040A0309FDFCF5FFF3010101F00901FE03F1FE060CFE03FEFE010505000A02F906F7F509FB0A00F7FC080B00060CFFF4FC110F040AFCF7EEF8F8FFFC00E9FB01FD0E040CF0FF0C0206F30103F3F50E03F7120CFE2202FA06050AFEF6F7FC08FB07FE110DE0F700F5F9FF05FE02FD03F901000600FF03FFF8FB00F5FFFD06FB06FC01FDFFEFE3010003FFFCFCFBFBFA09030606FFFBFB04040208F802FBF803FC02020200F7FD04F4FCFE05030002020108FBFEFFF50101FF030103F804000BFCFDFE00FD030801FF1106FC08FB0800FD0000FBFCFB0004FFFEFDFD05FE03FEFFF6FEFFF90A00000000FD0612060D12FD05C904050518F3FDF902F7FAF807FC04FCFAFE00FEFE0A090607FF030007FDFB05F5ED0100030B01FDFE0D0604ECFB04EFF705FBFFFFF500FAF607FF05FF01FF040A030100FCFBFF05F9FFFDF8FDF9FC0004F702000502060203FA0E05F004FF100E060203FC01FE01EBFF06FF0402020FFD0A04FF01F9FD08E803F10BF7F70108060DEB11EFFE04FD0504EE28FDD5F80FFDDAE90FFAE922EEF6FDEFF707F409FBFE07ED3605E7F10C11F518041CF2F71022FC050E07060DFC1D10F908E8F0F90C070AFE08091CF7F804FFFEF80201F70C0F02F209F4FA0B0C0F07EC04E8FD10EB03F707FC061F01F804F2FCF9F8FF03FBFD09001EFF23FCFAFC0204FE0204FDFA0902FB07FE0202F7FE00E2030600010B01FCFF0802FD0702F6FDF900010204F7FDE7FE00EDF6FE0D000CFBFF0C0503010308F8FBF5FC0803EEF605FB020001000303FAF4FD0F03F8071207FD040805010616FFF2F9F30A0104F700FCFFF70409FF09FF10F6EFF9F7FEFB010602FD06FD0601FA0105FF030205FB0BF3000BFE07F0FB020801FFFE1408F8F3F2F9F204FC04010101FA0800FF020103FCF9FBF3FFEEE904FF05F7FDFFF80606FD0700FAF1F70BF802F9F2F401F3010801FEFA0603F801FEF4F7FD05FD0705F504FE02FC05F7FAFCF105FE03000001FDFFFAFDF9F1FEFD07050D040400EEFCFD070A02FF060806FF0305FE0004FCFD06060107F90715FFFC0B06FAFB000C0AFBE3FD0402F9F603FCFEFB0DFEFC04FE0700FFFAFD07FFFD0005FF0007000104FF04FEFF06FDFAFB05FFFEFEF701FB040504E0FE0002FF01FDF501020700FB02F901FEF8FBFCFFF60904FDFF0307FBFE10FEF4FFF403E70706FB05FE0A07FAFE0201030B01FCFBF90BFA0203FFFF02FDCF0405020F0103EF05FF0601F817F6FEFCF506F0FB16F8FCFF13F504FCDF07FEFC12F1FBF70001220804080CEC00F4FD04FA11EE0800F5F707FDFCFBFA18EAE00A0A030C030FFE010B0B07FC05F7F9030707F60F08F7010CF11609FEF609F9F9E5030F08FFF7F3AAF8F9FB11FB0CF905F6010DFDF80103FDF809F7FB03E418F4FF01FFFF06FF04050304FD040101070101FE04FF0200FF02FE01F908FE0501FDFF00FD0000FFFE03FF02FE02FD000E01020403FF01FDFF00FE03FEFFFD000203FD03000200050105FC0202FF03FE03FE040601010007FB0100FF0703FE19010402FF0200FC0101FDFBFF00020303FCFE0103010704FEFF020B000001050404FB0905010402FF0001FF0300FFFAFD0407FCFC0103FFFF03FF00FF05FEFAFF08FF000101FE020500F6FDF5F800FE000005F0FE05FA02FEFCE6C5FE030203FEF908FD03FBF801030506FFFD03FBFF00F7F501FB0402F70E0603F202020106FDFDFCFF06FD0202FEFFF4FF09F0FFFAFCF8FEF800F502FFFFF7FF0200FFFD06EF04FD0706ED05F7F601FF08F5FAFBFD080DFA0704F400FEF908FE02FC040300FC00FF0A030200FD0D040AFFF9060302F70600F8F8010504FCFFFB06F90104FDFB00FD02FC02FC00F4F4F300F2F805FC01F40505FE0508FFFA0D0A03000002F703FAFFF801070203FFFD08F6090608FAFEFEFC04F9FBFAF2F7EBFCF900FFFD02EF03FC0006FD00F4021EFAFCFBE41201FB07150800F2FD00040702E701020600EFFF05FFFD04F402FC00FEF409FE09F5F80308FF0CF3070E0402F9FA0109000607F9F90FFBF217F5FF0103020B080DFE0602FBECF9070503020A06FEFE01F5FCFFFB04F50B0203FBFDF903FAFD04F502EA05020608FDFCFEE7FBF2FB09FD0009FEFEFDFCF4FFF60101EA0306FF12EE0001F70703FCFE1710050A03FF05020201FD00FEFE06FB0500F9E30206EDFC0B09FE06E5050BFEF603120007FF14FDFE090407F40005F90203140504FB0102FA0304FCFCFEFFF7030EF8F6F4FD180707FAFCFDFFFDF601080EFBF504FAF60005FCFE11FEFA09FF1200FD0B09FF02FCFEEA04FDF90208FB0304FDFAFFFB0104FC03FD030008FD0402000003010402000805F902000E00FA0103070EFA030BFC060202F5FBFFFFFEFCFEF6FB02FEFE0C020502FE0404FA05FBF2F60A080405020302FEFDF7FF0010FEFEF601F903FE0B060A01F902FEFEFDFBFEFBFEFF0B0306060701FA05F3F40301000DF1FE0301F50507FA0604DE0A01EB0203FE0BF303FF000007F60004FC1BFD0B0D000303F2FCFFFBFFE7FE01060D0306FD020D002403FC0D0600F3F5030C06FD0001040E01ED0807FE0AF902FEFB0915000100FBF7FA04FEFBEB0600FFF80319F3ED051F0C02FD0304FFF8FDFC0CF9FFFBFAF9FA050AFA040308FF05010104FCFBD5FD010400FBFFF4111EF9FCF40303FEFEF801000000FA01FF04FA07F5010306F6030005FAF902000404FDFA0600FAF9FCF40303FDFFFFFF05FAFD010807000001FCFF06FA0A010C020BFCFE030301FCF6000702FC0003FF00FFFDF8FF0302F80307F8F4EDFE0001FF0009050906FF050101F8F6F8F6F6FB0002FF0B06F8F7FC05FEF5FDFAF6F4FAFEFEF9F9FE1FF807F805FAF706060D47ECFD0DFB01FDFAF811060606FFFFF514060106F1000A070212F74EF2EDE40B0DFD07CEFA08031818FA03FF00FE04FBF606040213FDF812CEEA010D050EEEFD05FF020404F7FE00F0F7CA000AFC1001FA16F909060612E7F7FB03FF04FCF9F8F0F209F914FEFD0FFC09060E0D2F24001EF907FF00FE0203FD160704FFFC00000303FBFEFF05FF030102FCFC0600FE050602FF0305FFFC0202FA0001FA0207FF01F70109FF040109FBFEFD0608FB010604EB05010204FF03FCF6030200FDFDFDFCF6FB0A0201FF0402FD05FFFF0006FFFAFFFFF8FF0104010703F908FE01020109F9FE0500040600FFFEF902FCFE0300FBFF0407FD0CF800F1060102FAF50AFCFA07F3020CFC1204070CFDFD050A01F7F8F4FF01FAFE0B03FC0605FBFDFC050501FCFDF8FCFCEE0808F706FF06F8FDF9FF05FD07FDFFFD00F6FC09FC0811FFF60CF80C03F910F3150108F2010001FDFCF8030105F404FD0C06050601F5FD03FDFF04010302050F0BFB0507FC07F80004FCF307FA03FD02FD0401000502FD070000FCFCFA03F9EE030EF7F4FD050304E4FDFA392D0AF90005F5020000EDFC04F90EFCF305FBF3F707FC10FA0400FD01010400F70903FE090008FFF2FEFCFA0AFA000201FF02010207FE060200060404FFFB10040703FD05F5FE0001FA0BFCFEF7F908ED0001FEFE05F902FFFB0201FF010503FFFBF006F0FD0DF4F5FF000CFB02020205F50AFBF8010801040403FDFF01F7FAFCFD04F714FA02EBF1FEF716F90A1E08F1F60318F200FB0AFEFA01E9EDFEF716F60300F4FC0DF9A7F2110E34FA0904F400FB17FD03050BFBFF0400050902050F0E05EE0E03FCF8F805F3FD0DFFFC04FA1608040AFCFF150AF004E200F708010A01F1FA0F06F10701FDFD14F80BF201F8FEFB07FE0E0307F8F10009F4EB0603FFFD0201FB01ECF0080BFEEC07FB05011BFBF6F5F80B00FA0802FDFE04FDF203E6F806FE040807FD01F6030009FEFFFB080609F2020B07F60710FBF7F2F2FE0CFFFBFC0606FD03010A011AF8FF0FFFF8FFFFFE0409FFF0FAFE05FCFDFEF8F500080402F9F9050204040305010403F80DF6030FFDFE0DFC00FF03FA06FC06F8F8FC01FBF3ED030202000005F910F70500FA04F9FAFFFA06F6F4FFFEFC09FF070803FBFEFF0401FFF0040A060802FEF4F7FC010102F5F206070105F5FD01F80E06E90EFCE7F4F3FF0007020000FE08F900FFFEF7FCFEFF03F7FD09000504050B04FD02FEFE06F8F6FCFD02F9050AF9F404FB00FEFAFD01FF010100010006FAFDEC00FE030401FB00FBFE29F4F0F0F704FA03FFCFFE08040206FF0BEDFC000A04FDF20309FD020109F60F0AFAFBF5FEF600D7FBFF2006FD0AF9020BFE0A02FF07F9FCFCF20207FD02FBFDCBFB0B04F9F7F800FCF209D1FEFC04F907010CFBF404EA0F010304FF0700D905FCFC0404FFFD0CFCFCFB03FE0AFFF20408FFFCFE09EB0D0503FBF1FBFA02100000F702010810F7F6020705FEFD030402FCFDFE0001FA03080EFAB8FA07CEF3FFFCFAFBFC0305F90B0104FC2502F9FBFBFAF609F9000803FE0FFEF913FFFD0307010CEBFBF9F80206FF04000DFD04FA0B0A030AFF0E0602030AECF9FBFBFA000003F80100010102FF1112F9F7F100FEFF03FF0004FF06FDF006FB0513ECFCFCFEF4F900100918FAFE0C0103FE13FA09FD00DBFEFE0900FC050704FBFC0703F70504F7FCF902F5F90DD8F70E00FFFDF1E609040C000CFAFBFDFA00F8F60FFE0C0403FAFBD6F903F805071F0E05FDFE0108FEFA14030417FD1500FBFBFF060AFAFEF90CFF01FEF8FE010406FF0200FD0DFF0001FDFFFA04030401FBFF01F8FAFAFDFEFAFFFF01010105FF08FC0204FCFFFE03FE080100FC00F902FEFCFF02FDFFFDFA030203FBFDFE01010201FF06FD0300F701FA0203030003FE01010100FBFF01FF0103FEFE05FFFE04F701FEF30003080500FDF805FE08130806FDFD01070215F4FC05F10DF9FE07DF11EE020102FA05F7F40AFD0101060204FC0101F90609FBEC030207FBF7F8FD0504FDFB0B02F6EE09FB06F508FDF7F60FFF04EA0BFA03FEFFF9F900E90208FEFF0AFEF9000003F50900F0FB04040100FA0705F9FD000E0501FF04F8FEFF0BF103000CFF010EF607F3FFFEFD0B0301000BFE03FC0200FE0101FDFAFEFF030101000103FE03FFFC020001FB00FF03FD0EFC010203040703FCFBFC0201040306000C0502030000FB02FE02030308F904FD05FD00FF06F8050002FF00FF0CFD05FB060B0301FFFDFD070401FB02FEFCFD030601060701FD0403FC0002FE04FFF7FD01FD0B04FD01FEFB02FAFCFBFD04010100F9FBFC0004FE0706FE0204F9FFFD050302FF0AFAFFFEFBFFFEF3FE020202FF0505FAFB060D0301FBF9F3FEFA01FE02ECF908040806FF0102FE04F3F003F9FCF40A0B0104011D0600020100F9FC03FF0304FFF3FDEF06F7180007FB1C000B0D08F80701FAF90800061019010509F906FE0D01FFF704FCFDFEFF09FFFAFE00FBFAFC03FFF901F204F405010108FDFEF308010000ECF610FEFE030C05F8F3F7DEFF0911010106010C0A011AFA02F1FEFBE0FDF6F3FCF4FE02FF04FC041702080005FB00F7FCFB0FFCF90109F707E306050705030EF1DB07000306FA020007F8FD0400E7081014FCF8F5F30105FD0701FF0903F504FB0B0904FAF402FE01F6060009FFF10C0D02FFF903060302F5050508FA0504F203F4F5FCFF00F9F8F60901F9FC020405010802F802FF0D09FAF607FF050D02FBFE03FD00050409F8F6100CF9F201060CFEFDF7F70008F9F701F5FF080B0200F505FC0C0C04FBF805090005FF110A0AFBFFF70F0A0B04FC0801F20301F402F6F2FB0701090206FA0206050907140D07010105FF040CF7FFFF01FFFEF3FEF801FDFEFD07FD01FC0102FF0409080109FFFB0B0DFD00F80401E805FEE3FE02FCFAFEFC02FE0802000506F7FF1500050005FB1702070A0B00FDF202FE0F05FD03FBF901FC00FF050A07F90401FEFE00FE07F7FD010301050403070CFEFC04F008FDFC01FCFDF613FEFFFF0500FB02011508031502F7FFEC0501FBFCF9FAF902FEEFF7FF05ECFAFAFA0E08FEFCF0FB01060400F6F902100402070510FDF4F80AF005070A18FBEEFE040919D9FDFA0E0C0A00E008F9FCFBEEF4E507EC09FD03F306E91A0E06F6FCF6FFF7F8F908F5FD06060AEA040200FF0008D8FB000103EF17FDF00AFEF908F9FAEE0002FDEFE6FE08FDFC03FE05FEFD0100FA050306F9FE00FE0303FE0200FDFE03051407FE03FDFFFFFF0001FEFAFEFE02FE03FCFE000300FA01000300030101FCFD0002FF0505FF000001FEFF00FFFFFF01FFFFFEFBFEFDF5FAFE0706FF00FD0301FCFC00EF03020301FEFD01FFFEFBFFFF03FD05FA02040100FE02FBFEFC0205F7FEFFFCFBFDFD010503F60A0803F7060702FF03FB010802EBFD0907FDFD08FDF9FE02FA010102FBFAF4FF03F9FBFD06FA0508030300FF08FD0FF903FAF5FC0001F2F1FDF601050303F7010904FDF900F5F500FA05F801FCFBF1000103FF0204030504070007090CFF0103F71103FDFCF70104FF05F0F6F7FFF502FDFA0101FB03FE0903FEFEFB08040307FC000201030901FFFFFFF807F206FDFB000A01F1FDFDFDFD06FF01FD02FA06FDF7FB04FAFFFFFEF8F904F9FD0006FFF703FF0A0003FF0107FA040107FD0004FEFFFFFFFBFBFCFF0AFFFDFEFBFFF6FFF2FE00FB05F80201FB000407FFFF03FE00C80005FD05FDFF01FDF70303070403F5FFFDFBFDF500FBF5FEFA06FFFEFEF40900FEFE0B0C07FEFCFC00F5060106FD031B0404080408FCF801E1EA0308F7EAF80D0403F9F7FA02F900F40608010204FE12FCFE00010005FA110203F405FE080102F310FE00FEFD08FF06FF0000FCF90BFD01FC01FF0006FD0B00E505F8E1F4F0250B04070305FCF908DCFC0203070306FA05F7FCEF0E16FF0AFFF80312F5FE09F101FEFEFE01FF04FDFD0003F6F6F8FB03FCFF0503F701FDFFFF01F9F5FFFFEAFC02FAF3FFFEFBFDFCFBF70102F5ECFEFCFFF7F4070109F6F9FBF50505FEF801FBF806010A030A03FAFE0AF2FA01FDFE03FDF7FDF50604F3FCFB02010602FE01FB03F6FCF700E2FD1501F8060203040003040903FCFDFB00020309FC"> : tensor<128x128xi8>}> : () -> tensor<128x128xi8> + %16 = "tosa.const"() <{values = dense<1442237646> : tensor<1xi32>}> : () -> tensor<1xi32> + %17 = tosa.const_shape {values = dense<[128, 1, 1, 8]> : tensor<4xindex>} : () -> !tosa.shape<4> + %18 = tosa.const_shape {values = dense<[-1, 1, 1, 8]> : tensor<4xindex>} : () -> !tosa.shape<4> + %19 = "tosa.const"() <{values = dense<"0x7C0F00000C0700003BDDFFFF89F9FFFFF9170000BAF5FFFF772100002F030000221500004FFFFFFF8DE4FFFF57F3FFFFD8EFFFFF78FEFFFFAB0800008EF8FFFF660D000095020000520C0000690200003DF4FFFF30060000D5EDFFFF941800005E1200007D0200002ECFFFFF490500003518000033FFFFFF1F0E0000E4330000BD1900008DF3FFFFFF05000047170000C21C0000EBE2FFFF30100000A4F8FFFFB30D00009FF3FFFF88090000D802000015FEFFFFB10F0000240F000087FDFFFF2CEEFFFFC20E000048F3FFFF40F5FFFF7AFAFFFFC50100005809000050DDFFFFEDDAFFFF4AF5FFFF5EFCFFFFD907000014EEFFFF0BE4FFFFF2F7FFFFC7090000F41B0000F1130000FFFBFFFFEBF2FFFFC00E0000A5F5FFFF1B2500006BE3FFFF80F1FFFF9EEDFFFF691B000086EDFFFF621A0000C3DEFFFF41DDFFFF8B04000017F4FFFFA60200005D1600005E140000D61700006722000073FDFFFF70F1FFFFC5F1FFFFB3F8FFFF44FCFFFFC3020000F7EEFFFFAC280000D5040000AA100000E7230000B8FCFFFF01000000130900000616000054E5FFFF0BECFFFFF4E1FFFF28070000C6060000551000009B0100002F0500000BEAFFFF4F030000C51B00004BECFFFF9A040000F5F6FFFF81FDFFFFCE10000095120000D21D00008604000092FEFFFFB11400009BFCFFFF13FBFFFF31E4FFFF94EAFFFFA6100000361F0000"> : tensor<128xi32>}> : () -> tensor<128xi32> + %20 = "tosa.const"() <{values = dense<"0xE4FCDA00FE06FC11EBF203F8FD0BF8190D051901053301F7EFFAF50524F9FC0BF8FDF300F6FAE9FF0C01F737E1FE04FC078D1CFF01FEFCFD20FF08F1FADB0404FEFCF7FAF7E2FE05EFFC05E8F6130914FB51EF01FC0501020831FAFDFBFBFCF9FFFF0204020225FFFDF8F310DF02FF25FA09FFFCE5FD13EF09FCF3FB070C040B08F8E5FE14FFEB0303FFEC0C0DE1FA1CFE000003FADB0CF702FDCEFD0FFB061C1E030B0CE0FBF9150F00FCFF0FD108070827F908F30A03FCE802FAFB1EFC01AA11BD1A00FBFEFAF6FF01F4FEFFF215FF04FCFBFBFD017F0403FEF004F8F61AF0EE020BE1E5F9FDF8FB020008130504E515FBF803FCF301E0A1FD0CFBE0C7030CDCF4FFFFF9F6FDFF02061BF91012FFDB04041AF6FEFBF3E5DF00FE01DD0BF7FBE8FDEA09F5FAEDFA22FEF604171DFD03F0DAF0040E09FD09F402F121FE0EF902F400FAF41705F0EAFA0C2512EFE607F5ED051409D0000AF1F905F8F6FB02F02100F92102F506FCF1FBFFFEFFDA24FDE40300FC0101F9E3001D0115F8E9FE02FA1403FC18F80FFDFFFCFD07EDFFFFE90607FDE705140E0508001613FCF905FAFD1B09F803EEF5010CE808E702160E05FBF409F1FBFEE8FB1BE9113C3FF9E20001E6113C3CFAE00202FC14F907FF050600240206E114EDFFFF17050AFAE9EFFAEDFFFF04FEFB081519310408030F12F3FCE8FCF60AF71E10040902030204E6FFECEF02FF031E000393F90012B41C00F9020BF0FAFD13F1FB1F131505FB13E40309E9FAFECC2807F701200603FF01F702ECD7FDFD01B219FFEF260403091AFB0102F1FB0F0736F6FE01130200032BEC010AF1FD00F8C90801F21B060C07F116FAFCFAFB04BBF40B0EF4220908FE160C0702FB0505490A03020319F9E9EFFB0F05F9F32DEEFD0303FE0B0100FB1C04F3D90E000415AF10FAF9FD08FF000501EFDAF5D2092700E7CE05FA08FDF3CFF8E9FC071703FEEDEF1C04F0E9FFF337050503F1120717FA16E104FFE30B04FC0711FF0F09FBFF04EFFD1302ED0408060400F60401071DF70619F300FC03040403FF93FC05FA0A060311FAD70AFBEBF40406E5FF07FDE6FEFACBFAF5100E05FD0900F9E21203000EE605FDEAFCFC0E08F6FA01E3EE03FFFD1902FEA5FB0412F210081C0D00FA010307F20A32FC050B271201F51D12FDEFFE01E410F914040CD8F108FCF209F6DAF4000FFFFF1902FEF709E408F508F8E010FFFE0AFB06000000F004FA4BEE05EC04FA000913FAFF02F8CFFDF6F60B0822F90D03F9061D020010E3EFF2FF07FCF025FAFA0CFF07010DF7010AEC0904FFF602F3FEECF9F9C206FE070104080C0004D5EDE0FAF510E70AFE0FF3FF02F2FF04FD040512F4F5F9EAEEFE0CF6010D01FEFEE4F90123FF0906F115FC0CF0170C26F2FDFF15FB0FFD0510FE1A02F8040204F301D40DF6FDF6E7DCF9FDFFFA"> : tensor<128x8xi8>}> : () -> tensor<128x8xi8> + %21 = tosa.const_shape {values = dense<[-1, 8]> : tensor<2xindex>} : () -> !tosa.shape<2> + %22 = "tosa.const"() <{values = dense<37> : tensor<1xi8>}> : () -> tensor<1xi8> + %23 = "tosa.const"() <{values = dense<1085889731> : tensor<1xi32>}> : () -> tensor<1xi32> + %24 = tosa.const_shape {values = dense<[8, 1, 1, 128]> : tensor<4xindex>} : () -> !tosa.shape<4> + %25 = "tosa.const"() <{values = dense<[10945, 12630, 12251, 12268, 9983, 11335, 13857, 10233]> : tensor<8xi32>}> : () -> tensor<8xi32> + %26 = "tosa.const"() <{values = dense<"0x03FAFEFFFDF627FA01F8FC0400020AF7F60002ED09FFFB09030007F60509FF0101C8EDF800FDF9EB02F2F90602060103FDFE01F00B00FDF4FEF7041BFE01FC03030621D607F4FEFC1205F9FEF701ED0209FCF20E050501FBF700E4F4FD0802E8FAFDFC0002F0FF0E00FAF7D2FFFE0AF4010707200AFAFD00FFFF37F4EF0300020114FC012E07FFEEFCF202010101FD03040002F6FCEA010404FFFC0200FE00F20004F700FF0000F40100030003F5F2C1FF0200F6F901FD051AFBFD044DE814FCECFC030503010600EE81F2FC070200FC0A03FDF9FFFE00050904FFFFFB0B000100F502FEFFF9FFFF1DF207FB0100FD000007F303FF0004021901FEFEFA040000FDF80203F51FEDF6F5FF0CFEF901F61004010FF3EF0704040D02F302000CFA08021B0804F90509FD040009000BF5FC0EFD060DF3E200F407F8F7FDFEEF02F60000F901180CFD13FDAF20E3F3040308F30405FBE2FCF2FD17F322FA00ECFB010514F107F8FCEEFED1FBF21DFA0203EB00060F070BF9FD0F08FDFDF0F80212FCFF1CFFFDFCFE17FC01F2FEF706FF040003FDFC01FDF300F501F50203FFF2FDFF0AF70200071F040D00FEFC031802FB000205E3FD03E71010FFFEFF0609FD02FEF907F9FE0DF001EE01EC06030FFCFB0106F00200E803F50704FBFDFE010D0E02020804FC12020800FEFEFA02FD02FEF5FEFD0AF6020401F4FF00F7FB01F8FE02000FFEFF01000114F8FBF7090103FD03FCF0FC0502FD0115F8FFFDF916FEFD000101ED17F003060603FE21031A060A000104030B1800090703FEF11704FF00FFE7FB01FF47041705060600F10202F6F9FDFAF7E8FF08EEFEFF01F936F1FB0C04F5F8FC07F9FFF2020CFD00FCAE0002E9F2000BF3EDFB0B060000FE11F8100C00FEF401000302F21AFDFFFF05FBEC050BF1EC011BFB01FE07060810F202FFFCFA03FFD60308010A0903FD010EF8130401FD04F7F9050EF60A12020F05FF02FD02FEF7000A17F30009FF25FC000010F9F3F1FC19050FF3CF04F7F3FE0517FE00FCFAF6020302FE11FEF901F4F01C07FEC10702ED09FA26FD030901FE27010E05FFFDFBFFFAE8010001FB02FF02FAFE0F00FE00F3FFFFFEFF01FF0102FCFE00FEF201000000010004FF03F5FE00FAFFFCFDFFEEFF07FEFFFBFFFE01F1FDFD01FF0102FEFA000200FD0001FCFDFFFF020300FFFE01FFFFFE01F602FE00FEFE00FEECFE01FF0100F7FD0E0301030200F71301010C0001FA0100FF0200FF03FE0201EE1A080102000201FDFFF800F9FF000100000FFD0002FEFE04FC0005EEB2FFFE020601FEF70402FEF426FFF007130008FD00FE03FFF3FF080215010505F602FF03FB01200EC8FFB601EB00F90000F0FC0000FA08FAFE02FB000001F7DFFD00020302FCFEE707FEFE000E00FC01F104FEF7FEFE0811FFF4D7030200030302000A0200"> : tensor<8x128xi8>}> : () -> tensor<8x128xi8> + %27 = "tosa.const"() <{values = dense<35> : tensor<1xi8>}> : () -> tensor<1xi8> + %28 = "tosa.const"() <{values = dense<1439819856> : tensor<1xi32>}> : () -> tensor<1xi32> + %29 = "tosa.const"() <{values = dense<"0x08010000D1FFFFFF22FCFFFF6E000000E0FFFFFF8501000056FFFFFF21F1FFFF19000000BBF5FFFF4EF7FFFF8D00000041000000F4FFFFFFF2000000C1000000CAFFFFFF7FFDFFFF23000000FCF0FFFFA9FEFFFF7A00000093FFFFFF3D0000009D000000DAFEFFFFA50000002501000044000000FF0000008AFFFFFF6EFFFFFF3FF7FFFFBFFEFFFF1D0000005DFFFFFFEF000000E9FFFFFFF2FFFFFF7E0000004F06000028030000B4000000850100001D00000086FFFFFFDAFFFFFFF5FFFFFFEDFFFFFF2DFFFFFF07FFFFFF7C0000004A01000074FDFFFF4E00000003FEFFFF90FFFFFF62FDFFFF4B0000000802000077FBFFFF54FEFFFFA4FFFFFFFEFFFFFFB1FEFFFF6F0200003D010000A9FEFFFFDA000000EA0000003E0100004B010000B4FFFFFF340000002E000000C8000000E60100005CFEFFFFA6FEFFFF22000000270200006E0000004A0000004E01000026FFFFFF2800000033010000C2000000460000001201000007FEFFFF16000000A5FFFFFF39FFFFFFEDF8FFFF5C000000BA01000050F2FFFFB101000026FFFFFFB0FFFFFF8F010000E1FEFFFF180000007BFEFFFFEFFFFFFFB3010000E8000000280000009B0000000B010000B9FEFFFF21FFFFFF1DFCFFFF44FEFFFFD1050000CFFEFFFFAB0100008BFFFFFF66000000AFFFFFFF49F7FFFFC400000020F4FFFF090000007200000093FEFFFF64FFFFFF"> : tensor<128xi32>}> : () -> tensor<128xi32> + %30 = "tosa.const"() <{values = dense<"0x03030100F6030401FEFD00FEFF01FFFFFF0004F7FF0000FFF5FE00FBFFFE01FE0201FE0301FDF6FFFC020101000000FF0202FE04FE00FF01000000000DFCFFFF02F902FFFE02FE0000010000FEFF0000010001050204FFFF020400FEFD0000010000FF0001FF010000FE0001A4FFFFFF01F6010304000100020001F40001FF020100FF00FD0000000001FF0000FF0002FF00FDFF00020100FE00010001FF0000FEFF00000100FD00FF000002010001FEFD00FF02FAFFFF0000FFFA00FBFF000100000000FE010001FF0000010000000100000000000001010001FF0000000000000000FF000000000001010100000200010200FF000000010000000100FFFE0000010002FEFD010001FF00FFFDFF01FF00FEFEFEFE010101FD01FE01FF02FD02000000FDFD01FDFF03FD00FD00FEFDFEFEFCFE0101FFFFFF030201FBFE000002FDFEFEFF00FB0101020001FEFFFF03FE0301040202FFFAFDFD0102FCFE020003FEFF00FBFF0103FDFF00FE0104FE01FFFD0000FE00FFFFFDFD00FEFE00FA00FC00FFFF0000000105FF010001F8FF00FD000000FEFF00010EFFFF000109FFF600FFFF00FFFF010100FF00000001000100000001000100FF000001FFF701020001FF020000FFFD020000FF0001FFFFFFFF000000FF010001FFFFFF01F9020101FF01010001FF0103FF0000FFFF010000070000FF000200FFFD0901020000ED01F5FF05F80000FF02000100FC00FC0201FAFC00000000FD010000FD0500FFFEFE000000FA03F902FDFF02FEF90500FFFBFE03FE01FCACFF03020001F50201FFFCFDFE0100FF01FEFEFD0102FDFFFF0103FCF607FF04010000F90203FE050100FE0000FF02FFFF0100FB0E040003FF000BFF0001FEFE010102FCFDFE08FF0000010102030000FAF6010101FD0100000200FF00FF00FFFFFCFE00FFF6020301FFFF120001FF03F801F0FFFE0204010701FBFF0001FE0200FFFF00040000010801FEFB01FDFF04FFFF00FF01010300FF0100FD02FAAAFD00FFFFFF040200FFFFFF01FF0001FDFF0300020000000CFCBE00FDFDFFFE0603FEFCFAFEFF0602FD00000202020204DC05FFFC000200FE00FF000100FE00020002FD02010200FFFFF800010000FCFF03F901FDFFFE03FF01FF00FD00FF02FDF90001FD04FF01FF0104FD030300010003040500FF04030300F50C01FF02FD0104FF0101FEFEFF01FF01000003000103040002000201FB02FE00FF02FF0001FD02FF00FF01FF01020100FE01FD010101010100010001FF000D000101FF00FFFF010A01010001FFFF00FF0000FF01FFFF01FFFF01FF0101FF00FFFFFF000101010101FF01FFFFFF01000401FFFFFF00010101000001FFFF01FF0001FFFFFFFFFFFF01000001FF01010000FF010001FF0100FFFFFF00FF01FF00010001000000FF010101FF0001FF0100FF0001000101000000FA01FEFEF7FF03000003FEFE01FBFFFF00FCFF01FFFFFAFBFB0108FCFCFB03FFF900070001FE010801FCFE02FEFE000300020404FEFF00FEFF02FD00FEFF00FF0001000102FD0200FFFBFAFDFEFA01040000FD040600FEFE00010000FF020302010202000207FD0300FFFE03030000FFFEF20000FF00FF00FF00FE0000000000000000000000090000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070CFF0001090000050205FFFC040301050109F8080002FEF7FE01F9FB04FD0BFF06FD05030701FB0913FC01F3000A0401E7EEFEFBFF0003FB00FE020006FF00FE04010502FAFD0207FF04FAFF02F80DFDFAFE030106F80304FA070701F800020002010302000DFE01FF04FBF1FD00FE0406FC040802FF02020503F5000206040003FD0000FD02020101FFFDFCFEFE00FFFF0001FE02FC01000301FFF900FF03FFFBFD00FFFF00FDFE00FE02030002FE0000010500FF03FE0300FFFEFF01FD03010401FD020101010100FD00FEFF01FFFE00FFFEFF010000FB02000502000102FFFF000201FD0100FF0101FEEE00FE00FE030101FEFD02FD000000FCFFFCFEFDFF010100FD0000010100FF00FFFF0001FF010000FF02FF00000100FFFF01000001FF00FF0000FD01FFFFFF01FEFF00FDFEFF00FFFF0000010101FFFFFE0200000001000100FE0200FF0200020001000200FF00FF0101010100000000000200FF00FE000000010200000101000100000003FD00000000FFFE010000010100000000000000000000FBFFFF000002FF000000000000FF0000FC010000FE000004FFFF0000000000FF00000000000000000100000000FF00000000FF0005000300000000FF00000000000000FFFF01FF0000FF010000FF00000200000003FB000000000000FF00FF00FF00FF0000000000FC0000000001010002FD00FF000000000202FF04FE00FD0003FD01FEFEFF0302020000020001FF020002010301FEF70002FDFF02FE01FE01040201FFFF00FEFD0103FFFF050201FF0101000202FEFF01FFFF00FFFCFF00FFFF0201FD00FFECFF01000001FE0303030100030701000101FDFF00F704FF00FD0100000101020003FF0000010000FE0000FE01000100FF01000002FF01FE03F903FE02FE00FFFD0001000003FE00FDFEFFFC06000100FFFFFB040001FFFE02FEFFFDFD00FEFFFEFF03FCFB0100FE000001FFFEFFFE0102020201FBFF000102010100FFFE0101FFFE02FF0000FEFB0301FE0201FFFF0101FEFA00010400010101010001FF050000FF01FA030001FE0301020000FD010000FFFFFFFEFCFBFFFE020001FF010000FEFF0200FF000402FF000002010402000100FF02FF00FE00FEFC00FCFF0103000100FDF9FF01FD00010001FFFFFDFF02010103FF02FCFCFE0903FF0300FE03FB06FF0303030000FF03FDFF00FDFF0000FFFD0201000001FFFF000000FE00FFFE0102FE000301FF01FE020003030101FF0004FF00040300FB03050105000000FA01000002000200FF03FE03FDFF01030200FB0102FF01FCFE0104FEFE00FEFC0000000001020401FE000301000102F904FFFF03FF02FEFEFDFE06FF01FF01FEFE010102010201FFFEFDFFFD0003F9FA030201FF000102FD0000FEFF00FF0101FD00FF0000FBFFFD020204FB03030100FFFA01F800FF0200040202FF05FB00FF0500FCFFFF000401FF02FF00FDFC02FEFB00FFFF00FF02FE00FA0301FEFDFE050402FE010503FE01FD00FE00FD0400FD02020505F500000104FDEDFFFEFE02FEFD00030101010105000401FF02FE02FFFFFF01010004FF03FC01F90000FD020102000101FFFFFE000000F9FC00FDFF0100FFFFFE010000010000000000FF000C000001FF0000FF000A01000000FFFF00000000000000FF0000FF00000100FF00FF00FF000101010100FF00000000000004000000FF00000001000001000001FF000000FF000000FF0000000000010000000000000000010000000000FF00FF00000001000000FF000000000000000000000000000201010002FD05FD010502FF000300FC010207FF0104010002FFFEFFF50201000600FF00FF03FFF802FDFCFE0000030203FFFB00FEFBFDFFFB0000000103FE05FCFC010004010501FE00FF01FE01FFFE0307FF01000100FFFE0300FFFF02FF0201FF0001F9FF03FEFFFEFF02FE0104000003FC0103040700010100FFFF020201FFFFFC00FDFF00FF00FFFF0000FF00010000FEFEFFFE01FFFDFF06FE00FE000100FEFE00FE030000000200FFFF0001FF0401FF010800FF02010100010400FFFDFFFF00FF0101000000FF0201FE000802FC0501FF02FF01FE050000FE00010100000001FE03020202FF0001FF0000000002FDFB02FF00030101FEFF010000FBFF0100FDFF04FD0100FFFCFF0002FE0003FE00020102FC000002F901FF01000003FD04FE03010002FF0404FEFBFF03FFFD01FA04FE0501FD00FF01FF01FDFC07FC05FF0103FE0103010B02FF02FF02FEFF0002FF0201030701FE0001000302030100FEFDFDFDFEFDFFFF00FA050201FE010302FD030100FF0200FEFF0301FFF20200FEFE03000102000000000100FFFE01FF0001FF0000020000010001FF000000FF0000FE01FF01FFFF000001000000FF00010000FDFF0200FF01FE000000000001FF00FD0100FE000000FF00FF0100FF00000000FFFEFD0101FF00000000FE000001FFFF00FF000100030002FC00FDFF0000FFFF00010000FF01FE00FF00FF000002FF00000004FE0401FC01020001FF00000302FDFFFF0001FFFF0102000003FE00FF00FF00FEFFFE00FF050100FFFE04000001FDFF0001FFFE020101020405FBFE0000FE00F900FD01FDFFFBFEFF02FF0101020002FDFFFF030003FF00FF00FFFE01FB02FFFCFF00FB0200030001FF00000002FC0102FC0200FE0000FF01FF01FE00000101030100FF000001FE02FF00FF00FF00FF0001FFFE00FD010001FF0202FF0000FF00FF010200FF0301FF010000FF010101FF000100FF010000000000FF000102FF0000030001FEFEFF00010101000001030000FFFF0001FEFE010100060101FFFE02000002000001000100FE00FFFE020102FEFF0101FFFF0000FF01FCFEFFFBFE0100FBFEFE00FF05FF04FD000004FF050100FB0102FFFF00FF0000000200FE01FE00FE02FF00010205FBFC0001FA03FFFF01FFFE010000000200FEFF0000FEFE04FC0105FF03FF00010100FFFFFFFF05FB02FFFD05FF0100000100000202FF01050002FF00040100FEFE01FDFF02FDFEFFFF0001F90000010000FF00FF01FE000000FF000200FFFFFF01000000FF00FFFE00FE000100020000000000FFFEFD00FF01FDFF00FF000002FEFF000001FE0000070001FF0000000001FF0000010015FFFB000001010005FF01FFFE0001010001010100FE0100FF00FFD301020200F9000000FF01FFFE00FF0200040000E600FFFF01FE00010000000001FE02FF02010000FEFBFF00FEFEFDFF010000FE00FEFF010002030102FC0004FEFD00FC01020009FE010200FF01FF030201FF00FD02FEFF09FD00FF00FFFE000102000201FDFE00020001FE0101010000FBFF01FD01FFFFFFFF0101FEFD03FF0002FF0103FF020000020200F100010000FE02FF02FFFB01FFFEFFFA00010200FF00FF00FC00010001010000000001000000000001FF00FF0100000100000000FF01FE00FFFFFDFFFE01FE000100010500010001040001FF00FF0200FF00FF00000000FF0001FF0001000001FFFF0001FF0000FFFF0000FE00010000FF0000000000000100FF00000001FF010000FE010101FE0100FFFF00000100000001FF00FF00FF00000001FF02000100FE0000FF00000101FF01010500000001FF00FDFF010000FF0000000000000000FF0001FF00FF00FF01000000FF0101FD0102FF0100000000FF010000FF000100FE00FF01000000FF02FF020001FF00FD0102FF0000000003000001010001FF0000000103010001FF00FF00FD0100010000FBFFFD02FF010000FF0001FF03010000FFFF000000FE020001020000FF0100010001FE00FF01FD00FE000001010200FEFF0000FFFF00FF0201010000010401FCFF020100010001FF01010004FE01FF000102FEFF010001FE000200000101010001F900000300FF01FF00FF0301FF01FD00FF00040000FD00FF03FF000100FF00000100FFFF00FFFF000000FF00000000FF0000FF0000FF00FFFF00010000000D00FF01FF000000FF000000FFFF00FF000000FF00FF00FF0004FF0000FFFFFF00FF02000100FF00FFFF0100000000000000000000020000000000FF0100FF000001000000000000FF010100000000FF0100FFFF00000000FF0001000000FF0101000000FF03FF01F800FDFE0102FA00000003020000FEFF03000201FFF7FD010202000200F902080401FAFB0202FC02FFFFF8FDFAFB0202FF0205FB0000FF0011FFFA000000000B0303010003FF010100F4FF0200FFF7FFFE00FEFE01FD0100010001B300000B04070000FB010206FF000000FF0001FDFE0100FE03FDFDFE00000001FE01040000F901FEFE0102FE01010004FE04000101FE0001FF02FDFEFC05FBFFF902F5FC0100FFFCFE01FFFE0500FDFEFA04FE00FEFF0203FFFE01010000FF000100020301000102FF00010000FF01FE05FDFDFEFF03FFFCFD010003FEFFFDFD00000602FC010002FDFD0100FFFE0001FFFDFDFFFEFF02040001FF0100FFFFFE00FEFF01010201FE0304FEFE02FFFE00020103FE03040000FF0401FFFEED0200FEFF0501FF01F602FD0003FF01FC00FCFCFF0101FF02FF06FFFEEE0000FE05FD00FA0406FE00FF0003FCF50102000002FB01000001FFF8FE01FBFD02FEFE02FB0001010100FD05FBFE01FAFE02F60001FDFA0200010000FC00020300FA000202000301FF00FF0100FD00FA01FC00FB01FD000103FF01010200FCEEFDFE010001FF00FF00FF01FF0002000A0101FE010102000F00FEFF000801F9FF000102FF01FF00FFFFFEFF00FFFF00FA02FFFDFF02010002FF04FF01030100FE00FD00FEF6000001FE01000100010001FEFEFD01FE00030101FE0101FEFF0002FEFF0001000200FFFE000101FF0002FF010101FE000100000202FF01010000FF0000FEFF0001FF00FF000000FF01010000000000FF02000000FF010101FFFF010001FDFB0100000101000001FF000201000101FF01FFFF000100FF01FF02FEFF00020000FF0001FFFFFF0000FEFF000000000200FF0002FF01FF000000FF01010100000000FF06010100FF02FD00030000FB000200FEFDFFFF04FF010101FF000003F40202FE00FDFEFDFFFD02FD0207010301FDFE0003FE050001FE0400FFFDFFFF010002010002FE000101FE00050304FCFEFF0201FFFEFF0304020002FF01010101FD0100FFFE03FFFD0202FCFF02FEFD0401FCFFFBFFFEFF01FEFE0000010400FFFF0001FF020100FF02FE0101FF0000010203FF0100FE000201FF0100FCFE0301FFFFFD01FF0103FCFCFFFE0000FB00FF00FB00FF0004FE00FF00FC01010100010200FDFFFFFE01FFFEFF01FF010000FF00FD03FC00FFFC0000020001000001020000000101000000FFFC0201FFFF01010005010101FCFD000202FF0201020001FF00FFF5FAFCFF01FFFBFDFCFF010001F9FB03FFFFFFFE01FEFFFD0102FE03FDFE02020100FFFAFFFCFDFFF900FEFFFE00FCFE0100FCFD01FFFE00000002FFFC01FFFB000100FAFB0200FA0101FDFEFE05FFFC01010104FFFDFF02FE02FD02FE00FB03020101020001FDFF00F900FE050000FA01FCFC0100000303FEFE0202FF000200FEFF0100FC00040101FFFFFDFDFF03FEF0FF0002F904FEFF00FD00FFFE000006FDFA0106FF01F9FF02FBFCFFFDFB00DEFDFAFDFEFAFEFCFF05FD000207010100FE020003FF00FD04FEFC01FD0300FAFCFD0000FCFC0107FAFF07FA00FF02F8FE01FF01020202FFFA01FE00FFFD00FE0000FEFF01FEFF0000FFFF03000002F30001FFFE0101FF0100FDFD0001010101000000030300FEFFFF01FE01FF0100010000FF000102FF00000000010002FF00000300000100010000FE0000000300FF00FE02FF01FD00010000010100FC01FEFFFF010000FFFEFEFF00010001000000FF010201000100FE0000000001FE00FFFF010001FE00FF0101FF00FF00000100FF0206FF00FFF902FEFCFC000100030201FF0005FDF7FBFBFFFFF4FFFD04FEFE0201FEFE02FAFE03FE01FFFD010B02FFFEFF010201000201FB01FE00010101FC0005FA0003FEFE000102010103FE02FD07FAFEFDFE0102FF00FC03FD00FFFE01FE01000003FEFE01FE0002FDFB9100FDFF0100FBFFFF00ECFE02FF01F7FF0005FF00FFFE00010200020300000001FD01FF02FFFE01FDFF00FF01FF00000100FFFF01FF01FF01FF000101010101030000FF0100FE00FE0002FFFE010101FFFF0101F901FFFF02FFFDFE01FA01FEFDFEFEFFFF000001FFFF010100000101FFFFFD01000300000100FE0100FE0000FD0000FE02FF0201FE0002010000FFFC000203FF01FEFF01010200FDFE01010101FFFEFE000101FF00040000FB00010303030002FC0200FE01010202FE000201FF0201FEFF00FE010203FE0100FF04010100FE00FF03FCFE030101FE00FD02FE03FF020002FFFF03FFFEFF0001000101FFFE00FF0000FFFE01010200020102FEFB0000FF01FCFFFC0103FF0200FF01FD0101010101FC030001FE00FF0000FF000100FC020100000201000200FF01FFFF00010000FF0001FBFF00FF010001010401000003FF0000000500FF0000020400FEFF010001FFFFFE0000FFFF0000FEFFFF020000FFFE0002FD010000FF0001000100F900000000000000FF0002010100FA00FF010000FFFBFF0100000000040000FF0200040001000000FEFF0000010000FF0100FF00010100000001FF0000000000000000010700FFFF0001FEFD00FDFE00FF000000FE01FA0000000100FAFF00FFFF0300FF0002FE0001040000FB010200FC0003FE010304FF0005FFFD0002000101000002FEFFFF00FE02E60101FD00000101000002030000FE03FF00FC01000101FF00000000FF00FE03FF000100FC0001010000000201000107FE010000FC00FB000001FF0001000100000000FFFFFF01000000000001000000010000FA01FE00FF0100000000FFFFFF0100010002FF000100FFFF0000000001FFFF00FA02000100FF0100000000000000FF000000000003FF000000FF0101FE0601010000F2FFF903010000FEFE01000104FF00FF000100FF0001000100FC00FFFD0003FEFF0102010000000001FEFF010200FD02FF0102FFF902000000F8000504FFFEFF00000105FB01030002FE0000020305FE000102010101010000000000000100000DFE01000000FF00FFFFFF00000102020000FFFB010000FF0001000000FE010001F800FEFC0100FC0103020401FF00FE01FC0101010300FEFAFE0301FFFE010001FEFF020002FC01FFFFFEFD0000000103FFFF00FF01020106020300FE00000506FD02FE01FFFC00FCFF01FB00030701000103010000FBFF0101FD030100000300FF00010001FE010001010200FFFDFF00FE0200FF02FF000101FD0203000202FFFFFE0100010000FE00FF0104000202010000FF01FE00FDFC03FFFFFFFE00F7FD0107FFF1020100FE0101FF02FC050502FDFCFFFC0402FF0004FF00010201FF0301FFFF00040104FF00FF060302010001FC02FD0000FC0601FBFCFEFA0601FE00FE0200FD0000FAFC0502FE00030200FF03FE0003FEFE01FF0200FFFEFC00FE01000201010000FAFFFEFFFF0000000102020300000200000001000102FEFF020100FA04FE0000FCFDFC97FF02FF000000000000FC00FFFF00FCFFFFFF00FF09FFFE0300FEFF02FFFFFFFF00000000000001010304FF0302FFFF00FF0100FF000202000001010103FF00000001F8FAFE000000E00000FE00FF0500010301010000F9020007FE00FF07FD00FAFEFE04FB070400020002FCFE06FE0001040203F70000FC02010004FA07010303030202F801FEFE05FF0403FD0401FDFFF80200FC010200F9FFFFFB00030306FBECFEFFFFFF01F7FEFF0101FF0602FEF7F90002FD02FC02000203FF00030601FF00FE02EBFFFFFE000303000601060101FEFDE001FC01FD01FC00FC0100FE0300F500FE00FFFEFDFF0009FA01FCFAFF02F1F9F400FEFF01FE00F90204FFFF00FFFF0101FD0404FCFBFC0501FD00FD01E6FD0001FC04F90004FAFFFFFE01FFFFFEED0404FEFF0111FD00FF07FA03FB00FB000AFEFAFE01FF00FE0302070101FF00000302ED00FE0100FD0303000105FF0203FAFD00000102010200000101FFFF010200FE01FF04FD01000002FCFEFFFF0100FE000302000200FF0002FFFD00FF0301FE0003FFFD0202000A04000201F9FFFF00FF01FFFFFDFE000203FB010401010304FEFD000003FF0002FE00FF04000201FFFF00FF00FF0003FD000101FA0000FFFF01FC0004FF0102FDFD01FF02FF0001FB0101FF00FF08FEFD000302FCFDFEFF02FF01FEFC010301020200000000FE00FFFAF3F2000102FEFD01FFFD03010004FE02FD02FF00FDFD0104E00201FF01FE03010201FE0103F9FF010000030AFDFEFA010500FA0300FD02FF05FF010300FD00FF000104000003FCFEFD0003EFFBFE00FD0200020100F9FF07FDFFFF0400FEFC02010001FEFDFBFA0102000205F9FE00FFFB0B02FAFEFFF9FE01050402FE0002FFFD00FCFF01FC0103FE0402FCFF02FF03FD00FE01FBFD0102FEFF030202FA04FCFDFCF1FCF9FCFFF90100FC04F80AFFFFF6FF01040505FEFCFDFD0001FAFF02FA0002FEFF000200060504FD0100FBF8040100010103FEFF01FEFE04FE0202FDFAFF03FEFCFD030600FD010001030001FFFF0006FD010104FD01FFFE00F9FAFDFFFF0101F805FFFEFF0004FB030100FF03FB01FF0002FEFEFE000100FFFD0201FF00FC00FEFDFD00FF0003000200010100020002FC00FF0104020200FEFE0101FC020001010001FD03FFFF00FF0000FD01FF0002FDFE03020200FFFE000002FF0001020101FCFDFE03FD0200FFFF010001FFFBFDFF0100FFFFFF00000000FF0201FF000000000102FFFD010202FA00FDFE02FF0A0003FE0102FE0200000100FF01F802FE00FFFF00FEFDFAFEFBFFFF02FE03FD01FF00FD0100030102000203FE0001FE0100000100FF0000FF00FF030000FF00FF00FDFE00FEFF0300000006FE0201000001FB00FC01FC01FFFD0100FD000000FC020100FCFE00FF010001FD0BFFFF00FE010001F700FD0103000401F1000000FE03000101FE01FFFCFE0003050203FFFFFA000002FA03FFFFFD00FE05F80000FDFFF80B000AFE0001FE040101010002FE0000FA0000FE0002021BFF01FF0300FD0401FF0AFDFF0001FC00FB01FF000000FEFEFFFF000003FFFE0304FEFEFDFEFE01FF010002FC00000001020400FD02FF01030005FFFB0001FF00060004FE020002FE00010104FE010101FD0900FF01FE0202FF000002010002FEFCFD02F901FDFDFF040003FF02FFF403FF020201FF01010001FCFCFE0202FFFE0004040000FD020000FF06FC000003FFFE04FF000001FD0300000000FFFD000002050002FF010100020401F90101000100000002FF00FE0304F301FC00010002FFFDFDFFFFFE0104FFFDFEFE0001FDFD01FE00FFFDFEFF01000101FF020002FDFFFFFF000102FFFF0301FF01FF0302FBFD01FF01000100010200FF02FEFFF7020300FF02010200FF010400FEFEFE0000FEFC00000101FEFCFF00FEFC030201000000000002FE00FF0002FE00FF0000FD03020201FF0001FF0100010002FFFFFC0100FF01FE03FEFE02030000FC03FF0100030104FC010103FD00FFFE0300FD03FFFD01FD000001FFFF01FF01030100FFFDFFFF000002FF0101FFFF01FFFF0000FF0300FD00FE01FFFD00020202FF00000502FEFE00FF00000201000102000000000000FF0002FD0100FE00FD01000000FD0100FAFFFF0100000201FF0000FE0202FF02FD01FF01000201FE0102020000FF0000010201000000000103000001FE01FF000101FFFEFEFF00FFFE0101FDFF010100FF00000001FF00FF00FF0301FF00FF040100000001000000020000FF00FF04FD00010001FF04FFFFFC00FB0106FF0502010007FDFDFF0103FFFE01FDFCFDFFFCF9000207FC09FF04FEFAFA01FFFCFAFD03FFFC0503FF0004FFFDFEFD02FF00FFFBFBFEFD0002FFFF0302FFFFFC01FE01FF02FAFDFBFDFDFB00FFFE02FEFFFEFF00020201FFFEFD00010201FDFFFE010000000100FF0100FEFFFF0100FFFDFFFFFD050000FF0001F5FE000000000100000200FFFD01FFFDFF00FD01000100030203010000010301020002F8FFFE00FFFF000102FEFF0100FC000200FF000100000201010100FEFF0001060200FF010000FD0400010101FFFFFEFE000001FFFD000000000001010103020100FE00FE010000000100FF03FF000200FF010004010001000000FE00FC00FB02020201030100FEFCFCFF0000FEFF010602FF0007FDFE05FD020000040004FEFF000001FF02FBFCFFFE020303FE030203FEFF01FEFFFEF702FF00FDFFFE0501010006FFF900FF010100FFFD000100F7010703010103000001FB0001FFFBFE0001FEFC0000FF04FECCFA0300030102FF010401010003FE00000301FF000200FA00010001030000FF000000FE00010000FFFC00FF01FE0400000001FE01FFFFFD01FCFE00FFFE0100FF00FD00FE0201FEFFFFFF01020100FEFF000003FC0101FF01FFFF0001010300000102FF0000FF0000FEFF01FF02000104FE000000FF01FF00FEFF0000010201FF01FFFB00FF01FFFF00FE0002FFFEFF00F8FFF8FF0301F9FFFEFF0100F90003FF020000AA000100000100FCFF02000000FE0000FF01010400F300FBFF00FF0000FD01FE0000FE000100FB000000020F00FFFE010000FEFBF902F900FF00FE00FBFEFF04020002FFFFFFFD0000F6FE000100000303FFFF000F020000020101F700FD0300FBFA011801FF02FE0702000000010100010100FF010200030100FFFF0100FEFE00FFFE00FE0000FA00FE03FEFE00FE0200000000FFFE00FD02FF00050100FE02FF0203FE00FD000202000004010200FDFE0101FF01FF010100FFFEFC00000101010001000000FFFE01030001040101000101000201FF0100020100010000FF0200FF03FEFF02FE01FFFE000002F30000FE0200FD04FE0101FF0000FFFEFE0301FEFE01FF0000FF00FF00000101FFFE01FF02FFFFFF0100FE0000FF01FF0300FFFE01FEFE000005FF04FF0200FF00FD00FF000002EC010002FFFEFFFD01FFFD0100000001FF00FFFD0100FF0100FEFF0202FF0500FD04FF0000FF010000FFFFFF0203FFEE00010000FF000100000200F9F7FC01FF02FBFD0503FDFF09F90003FEFF000301FE0100FD030303F8FEFFF034010004FA0800C9FA01010A01FEFD000000FF000100F9020500FEFE00FFFC04FE0201FC0101FF030002FF01FEFEFDFE000100FD0102FCFEFAFE00FE02FF01000000FBFD0001FEFF00FE02FCFF00FDFE01FFFCFB00FDF8FE020003FF0002F301FF0001000100000000000000FF0001010000000100000000FF00FF00000000000000FFFF0100FF00FF01FF0201000000FF0000000700000000FF03000100000200000000000000FF0000FF010000FC0103FF0001FE0000FEFF00FF000000FF0000010000FF000001E1FF00010000FF0000FE03FF0000FF0200000200000000FF0101FF0000FDFF0001F904000103FF00FC010100FDFF02000000FEFFF9FC000100FAFC04FEFE010402FFFC01FD00FD03FF01FC03FDFF010302FDFF00010001FD01F9000504FFFE03FA03FEFE0002FB02FD0301FFFD0001FD02010201FF00000001FF00FEFEFD030401FF0001020002000003FFFEFBFEFC0000FEFF000600010101FE020000FC000101FB020001FFFE01FF0102FFFFFF02FF00F9010100FE000100FD010100FF0100FF030105FD0000FFFB000000FFFE0201FC00000201020100FFFF0001FFFFFF000002FF000200FF00010003FFFFFD0001020001FEFFFE00FF0000FEFE0101050100FDFF0207FF00000001FE000302FE030000000101FE010200FDFCFE01000001FFFF0002FF01FB040000020201FFFF00FF01FD00FF0100000102FFFE02010000FDFFFFFF020000020200000000FE00010101FD0001FF02FE00FFFEFF02FCFD0002FE0100010302FF0002000102FA020200FE02000101FF0000FD00010000010000010000FF0000000000030000010001FF01FEFDFFFF010002FE000001FD000300F50002FD020103FE0100FFFEFE00FE0204020303FE02030202FC030400040102010204FE05FFFF000400FE01030102FD00000106FD0002FD03FF0301FD0400F803000204FFFCFFFB02FA0002FDFD01FA01FFFCFAFD02FE000000FF00010500000000FD0600FFFF05FF010400FFFE0007FE040001FDFF00FE00FE00000102FEFDFF0000010001FC010103010001000100FB06FE050200FF000501FF02FA00FDFF0000FF0102FC02020104FE0100FF0100FF01000900FEFD0000FFFCFEFFFF05FF000001021604FD00FF00FF04FF0303FE030401020000FB00FEFE02FC03FFFFFE00FCFF010002FF00FE04FD000101FD01FE01FF00FF00FFFE000000FCFE03020201FC02FDFF00000000FFFB01000000FFFF0202FE000100FFFFFD01FF000000FF00010302FB01020000000102FFFFFF030102FF04FD0103FF020100030104FF01FEFF01FE01020001FF000300FE0201FE01010202FF0000000000FDFD00FEFD00FF0100FE00000102FEFF000401FEFF02FF01FF01000101FBFE0202F9FFFFFE000302FF0007FD0400FF070100FDFBFFFD04FD01FFFFFE0103FF00FEFF01FEFFF903FB04010000FDFD040000FF02040204FEFA0107FF00FEFE0002FE0100FDFC02FB01FEFFFC000601FEFF00FF0203FE0101FFFF00FF01FF0103FEFF01000304FEFD0300F600FE0001FB020003FF0100000402F90101FFFF00FFFF0001000001FFFF000100000001FF0000030000FF00010001FF01000001FFFF00010000000200000101FFFFFF000100010101FF00000100FF00FF01010002FF01FF00010001000003FEFFFF00FF0101000000FE0000010001FFFFFFFF000008000100000002FFFF0000000000000000010000000101000000FFFF0101FF01010200FF01FEFF000200FFFF0001FFFF01000000FF030000FF0100000000FF0000FF0300FEFF01FF02FDFF0001FFFF00FFFF020001010200FF000005FFFF01000100040001FF01FE02FF01000201FE00FF0001FF020201FF0304010100000000FF04FF000102000002FF010000FFFE010001FE01000201FF020001F4000100F8F8FD00010001FF01000000020201050100FFFF0105FCFFFDFFFB05FD01FF040D00FF02FDF904C1FAFBFF040200FFFF0001FE010100FA00FDFD0000FE00FC0201FC00FDF7FEFFFF0100030000FFFF000005FDFF0201FF0002FF0003000103000000FF000200FF000001FAF701FEFE01F10000FA00000402010503000000EA01FE010001FE02000000FDFE0000FC0200FE010600FF01FE00F9FE0101FF03000002000100FE01FDFEFFFCFF01FF0402FF02FFFE02FF0003FEFF0400FE0303FD00FF0000FB0302FE000202FC04FFFF000000FE020100000101000401040101FF0100FD04FDFE01FF01000101FDF800FE00FFFD0101030002FC000101FDFFFF020002000100FB00FE01FFFE03FE0202000300000302FFFE0200FC000000FD01FF000100FF020501FA000002FF0002D70100FFFFFF010102FBFFFC000002F7FF01FEFE01000000FEFFFF000003020000FA03FE0301FE0004FF00FD0000FFFF0202FF00FF01010BFFFC04FFFF00FE000002FFFB000101FEFFFF02FF0000010001FEFF00FF01000000FE00FAFEFD01010500020000000101030001FD01FFFDEE00FF0000FFFF01FE01FFFFFE010100FF0002010001FF01FEFEFFFFFCFF00FE01000100FF0000000001FF00FE0201FF03FE02FF03000003FFFE00FD00FF00F900FE0000FFFFFFFFFFFEFF0100010000FF0000FF0002FE000001FE040101000100FF00FB00FFFF0000FDFF000002FFFF01FE0002FF00000100FF0300FE0100FF0000000704FE000100FDFB05FF0000FEFE0001FF0000010201020001FF02000000FF0201FE0200010101FF01FF0101010002FF02FF02FC01FE0102010000010000FF02FF00000000FF00FEFF00FFFAF900000000FF04000001FC01FF010100020000FC0000040400FFFFFEFFFF00FE020000000003FE01FF02020000FDFDFCFF01FD00FDFEFE0401FEFC0102FFFCFE00FD02FB000000FE01FF010102FDFF0200FE0000FE0000010101FF010101FFFDFF0102FD02FFFFFFFE02FE0001010000FF00000000000200FD00FF02FE01FF00FE0100010002FFFF030502FEFF01FDFC00020000FFFEFDFBFFFD00FF01FF01FE0101FFFB030100010502FBFD01FF02FC03FF0300FC020103FF0002F6FEFC02FEFF01020201FD00FF050301020101000200010001FE0200FFFE05FEFE0500FE010002FC04020003010200FA000003FFFFFD02FFFE0100000100020200FC01000001F900FB020105FE0103FE0100FF02FFFF0001FE010102FC000102FD00FEFDFE0001000301E900FEFF0901020000FAFD0108FE010301EF0002FBFE000502FDFFF50000F80FFFFB01000702FE04FF00FD00FC0101FAFFFE81FE02010101F7FFFE00FE01FE0601FFFBFAF8FFFF0C08FF0300FF04120000000201FFFCFDFC0000020002000105000202020201FF02FDFD00FE0000FBFD00FD020004FCFF02FE0202030107FEFFFFFFFC050103000004FF0102FCFE00FA0401FF02FFFA0101FF02FEFC0302FE02FF010300FEFC03FD00FF00000501FC02FA03FEFCFFFFFF01FDFAFF0001FF07F806000102FDFD01FCF7FF03FF00FCFE010001010501FFFD030001FF01020000FF01010202FDFFFDFF0101FDFCFC000100FF000300010305FE04FB03FFFFFCFEFF010002FE01FF0200FFFDFF01FF01010201020002FE00FF000001FE00FC00FF010200FF06FEFE0002FFFDFF00FD00FD00FD0300010400FEFFFCFFFF000100FF02FE01FFFF010301FF00FF020000FE0102FF01FFFD00FE0002FF000101FB0003FF0001FDFE0201F804FF01FFFA0103010102FFFC0100FF0001FE01000000FFFE000000FF030000030103FE04FF0101FFFF000002FE0100010201000100FF01030100FEFDFFFF030101FEFFFC00010001020102FE0001FF020006FFFE000401FFFF0301000201FEFDFE0300FFFF0000FFFF0101FFFE00010002FE02FF000000FD00040102FEFD0003000002020601FF01010004030101F8020509FE0400FB04FF0500FF0000FE050005FE02FF02F000FB04FEFEFEFFF8070301FF04FA00000203FF030100FF010102FC040101FB0102FDFE05FE0101FEFC0004F80204FFFF01040606FF0105FD0102FD00FE04F90302FC0000010103FEFF0402FE0205FE03000007FEFD0001FFFF07FC0700FDFF00FEFDFB01FF0100000301FEFEFCFE0100FFFEFEFE01020001FFFD000000FA00F90100FF02000002FEFD0001FDFEFD0002FFFD01010100FA0101010400FF0000040201FEFF0101FE0001FF04FB020000FF0B0104FD0001FE00FF010003010000FFFF0003FF000000FC000200FEFDFEFF000003010100FEFFFF0100FF01FE01FF01FF00FFFBFD01FBFF01030100FE010000FFFC0400FFFEFE00FB010001FE000000FD00FF05FF02FEFEFE0101FB00FE02010002FA03FEFFFCFF000001FEFF0101FE02000301FF03FC00FF00FDFC01FF03FF04FE00FF0101FB0400FC0101FAFF00000100020101FD02FE00FF0200FFFEFCF6000300FD00FFFFFDFD01FF00040003FF000000010101010000010001FFFF0C000101FF00FFFF000901010100FFFF00000000FF01FFFF01FFFF00FF0100FF00FFFFFF000101010100FF00FF000001000300FFFFFF00000101000001000000FF0000FFFFFFFFFFFF01000000FF0101000000010000FF0100FFFFFF00FF00FF00010001000000FF010001FF0000FF010000000100000002FC01FF02FF0002010002FFFEFF010100FE02FC000102000200FEFF010000FFFDFE010001FFF9010000FF00FDFF0200FFFF020000FD02FF0100FE00000400FF02010104FEFEFE010001FE00FF00FF0000FFFE00FE020002FF0100FFFD0000FFFFF800FFFE0100FF01FFF700FFFFFFFFFD02CDFF0001FE0303000002FFFF05000300000001FEFFFD0101FE00FF00FEFEFE00060402000001FE02EB020002FEFD02FE00FD00040205FF03FE00FDFE020101FC0402050007F6FF000100FC00FE0101FEFDFE01FEFEF501FD020000FFFF0000FF0002000000FE010200FAFB00FF0503FE0000000100030003F600FBFDFD01FF00FB01FD00000000FE00FDFF02FF01FE0001000202FC03FF0104FCFD0301FF00FFFF0104020201FF010602FF00FF0000FDFF010001FFFFFF02FF010201FF00FFFFFE0102010303FDFDFD03FFFF02FFFDFF0200FFFFFEFD00FF01FF000001000100FE01FD0003FE010003FEFD01FF00FEFD01FFFCFF00040000000001FF00000003FF0002030501FE02000203FDFEFD04FE05FB08FF02FA06FF00FFFDFA040002030201FD01FA01FF02FE0400FBFF0106FEFEF902FF0008FEFCFE00FF0101FC03FE03F900FFF7FBFE020B05FCFDF502FEFE0101FB04FB01FFFB03FA05F30402000502FDFDFEF6F9FEFD01FE00FF00FC0403000201FC0001FEFE0801FE02FE05FFF901FF0003FD0402FFFBFEF703000001000000FFF800FF000001010000FF0000FF0000FDFB01000002FEFF06000001000100000000FF000000000000000000FF00FF000000FF0000030002000100000000010000000000000002000000000100FFFF00FFFF000100FFF9FF00000000FF00000001FF00010001FF0000FC0101000001000000FA00FE00000100050101010102FF01FFFFFEF10000FD06FC02FFF6FEFF02010000FFF605F4B4FE06FFFC0305FDFB0601FD02F6FF0104F8FDFE0201020204030B03020002FE060802FF0800020100FF030402050300FBFA04F700FE06000004FF04FE07020005FF000000FDFFF80500FFFF0105FD030008FFFEFBFD00FFFDFDFFFE000301FBFC01FEFD020D00F701030402FAFC00030106F70100FE00FA000001FEFD0B0007F70101FFFCFB01FC07F9FC0101FAFF00F9FF01FB0403030204FBFE02FD02FC15FEF9F201FF01FF00FF01FCFA0003FF010205FFFA14FFFDFC02FD040F0203F9FD00FEFF000103FE01FC0100EDFCF903FFFFF703010005FF0100000602F9030000000000FF01010001FF0201FEFE010000FE01FF00010000FA02FF0000FF00FEF7FF00FE01FE010100FE01010102FE03FC01FE000100FFFF00000100FFFF010002FDFFFF01FFFEFE01FD00FFFDFF00000202FCFFFFFF01FF0200FFFD000101FFFF010000FFFF010001020303FFFFFF01FE00030000FE0002FFFFFE00FFFF010100FF0100FD0003FCFEF9FDFD0304000101FCFFF7FE0000FD00FEFF00FC01040201FFFF08EFFF00FDFE070203FD01010402FFFC03010502FEFEFFFD00080102FFF7FFFEFB0105FFF9FF02FF00030102FDFD0005FF05F7FE07FE000401F702010200FE00000000FC02050002000000FFF3FA000000020304FEFFCEFD0302FE01010001FEFE00FA01FE040101FF0301FEFF0000FCFB000101FDFEFFFE00FEFC0200FF000000000000FB00FE0100FFFFFE01000202FF03FFFE000007FF000002FF00FD02FD02FE0000FF01010003000001030101020003FD0001FF0201FD0202FF020002FA0000FE03FF0000000100030001EA0000FD010101FC020101FF0001FFFFB500030001000000FFFF000101FF00FFFD0000FF0000FF000100FF03FFFF000104FFFFFF00010000000001010000000201000000FF000000FF00FFFE000000FDFF010001FD0200010000010000010100FD0100FF000100FF00010102FF000200FFFF00FF01010001FF01010000FF0000FF0000FF010000FFFEFFFF000201FF0000F800FD010000000000FFFB0101FF0002000000000000010101FCFD01000002FF000B0000FF010001FF0000FF00000001FFFF0000000000FF0001FF00000005FEFE0000FF00000001FF010100000000FF0100FFFF010001FF00FF00FF01FF04F9FFFFFF01FF00010000000000FF0000000001FA00FF010000FF0000FA00FEFF0000010201000000FF000100020002FE02FC01FE01FFFFFFFBFF0100FE0200FEFF00FFFF0100000004FEFA01FFFF000002D1FF00FFFFFE0001020101FD020001080103FFFD0000FE01FFFDFE00FE03FDFF00FB01FF000000FE060200FFFF00010001FE000000FF010B00FFFF000000FF00000001FEFD0101FFFF020000FEFEFF00010301FFFCFF00FEFEFF00FE020202FFFC00040000FF0300000000FF03FFFD0102000100FF00020203FFFF0100010000FEFF0000000002FE000202010001FFFD0100FF03FFFF02FFFF0000FE0203FD00000002000100FF01FAFEFE0203FE00FFFF01FF0001FD01010002FE00FC00FF0200FF02FFFD0001000000FF000004000801FD0001FF0000000000F70001FF000200000101000101000100F80001FFFD0301060000FEFF0100000100000000000000FF01010000FF010001FF0100FF0200FC0102FFFF01010001FE0001010000FF0001FFFF01000100000001FEFFFF05F600FF0000FFFF00FFFFFE0100000100010000FBFFFF010000000000F7000000000000FE01060100FF03FE020204FF02010206FC01040000FB060000FE0000FF030101FB0004FE00FCFE0300060002FAFB03FE04040308F800FD03FEFD01FE00030602FEFBFF00FF02FE000506FFFD0202010100FF0101FE030002FD02FE030104030101FF000700FE0204FFFF01F900FD01FE0300030305010202FF0005FF02FA00FEFF0101FF0103FE0300FFFC01FD010004FE03020002FD01010004FFFEFFF2FE00030103FF0300FFFF020300FD0102FFFE01000003FEFF02FDFBFF0001000202FFFC00FF0001FE000103FEFE02FF00FFFE01FE010100FA0004FD0304FE00000101FF0103040201FFFF00FDFFFFFF01000200FE020101FF0000010100040100FD0101F8FCFD03FE0000FE000101FF01FDFA00010100FF0000FFFFFE00000000FF00FFFF0100FCFE000100F701FC0002FF030201000200FFFF01FF0200FE01FC000200FF00FFF9FD01FFF8000101FE00FFFE01FFFE01FE0101FF00FFFFFB00FFFEFC00FF02FEFF02FFFE00000000FEFE00FEFF00FCFDFF00FF0100FE0401000100FF0003FEFC000AFAF6FCF900F602FB01F5FE0801FEFC010102FD01FA020103FF02030306FFF9FB0004FF01F3FCFDFF04FF00FE03020E0600FDFF060601030309000203FDFDFCFAF9FD030F00FA030106FC02FD02FDF6FFFF0305FFF705FFFF0200FCFF01FAF7FD0000FF0009FE00F6010006020A00FD08FFFE0002FE06F9FFFFFF08010402FCFFFE01FD000005FF02FEF9FBFF00FF01000103010100050100010201FF01FEFB08000101FA010004FEFFF902FE0100FF000100F6FFFE01FE000101050001FD02FEFA05FF010001FEFD05000101000003FD0200FD00FFFBFFFDFFFA010000FE0101FFFD0000FFFFFFD80000FD0000FCFDA0000200010802FF000004FF00FE00000103010003010000FFFEFF010100FF01FFFC000001020002FE0100FE000102FF00FDFD00FF0000000200FF01FFFF020100FFFF00FEFA00FE01000100FDFF00FF0002FF0002FFFF04FFFF00FF010301FF01FE00FF00030100010300FF00FF0100FFFF000000030103000100FF0301FE02020101FC0000FF000000FB0001FE000000FF01000300FF03020400FDFF01FF01FF0002FFFF01FF0002000101FF01FE0001FF0000FFFF00000101FFFD0100FE00FC000100FCFCFF02FF000000FC010000FF01FFFF00FBFFFF00FF00FFFF02FF0000FCFF02FD000001FF00FD000000030200FFFD010000FF00FE0002FFFEFF0100FDFF02FF01FF01FE0000010002FEFC00020001010000020000FCFEFF0100000300FE01000001000000000100FF00FF030100FF00FDFFFF00FD00000105FFFFFF030101010100FCFF0001010001000001FF000100FFFFFC02FE00FC01050001FD03000002FEFC00FE000001000001FFFF0001FF000501FFFDFF00030001FF0205000000030000FF0100010200000100000000000000FF000000000000FFFF00000000000001FF00000B0000010000FF00FF0000FF0000FFFF00FF00FF000001000002FFFF000000FF00FF01FF0000000000000000000100000100FFFFFF00FFFF0001000000010100FF010100000000FFFE00000000FFFF00020001000000FF00FF0000000000000000000000FF0102E0FEFEFF0102010001FF01FF00FF0001FF00FF00000001FFFFFF00000100FE00020101FC00FD00FF02FF00FFFFFF0000FB0000010100010000000100010101000302030002000000FFFD07010000000000FFFFFF00FF00010000000001000101000000010000FF00000100010000020100FFFF000001010001000000FF0000000000000000000000090000000000000000070000000000000000000000000000000000000000000000000000000000010000000000000000000300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010202FF00FFFF00FFFE00000200030400000302FAFEFF0102FCFF00FA01000200FC0001FCFE00020001FB0303FFFD01FEFD0805010000FDFC000100FEFF02FD0002FF02FE00FF01050102FEFF00FD01FFFFFF00030000FE0101010000FFFF00FE0000010302000001FE01FE01000500FF01FE0100FEFFFF01000201FEFE010000000100FEFFFFFFFF00010102010100FF01020000FFFDFFFEFFFF0002FF00FF00FFFF020000FF00FFFFFF0202FF000002FF01FF000400000102000004FEFD00FF02FFFDFF0101010001000100FC000000000000FFFE01000103FF000000FF000000FF0000FF010000040102F700FFFF0000000302FF0001FE02FD00000100000001FF0000FF010103FE0000FA0000FFFF0000000000020BFF0101FFFE00F901000000FF0002010000010001FE0001FFFFFE010100010000000000F80101010200000100FF00FFFF00010000FF00FF02FF0100FE01000101000001F902000000000101000100020000010000FE00000301000100FF00FEFC0601000000F3FFF800000100FF00FEF300FF00FF0501000100FF00000101FEF60100000100000F000100000200FFFF00000000000000000000000000FFFF010000FF000A01FE00FF01FE0000010100000001000000000101000100FF0000FFFF0001FF05F1FF0001FF00FF000100000100000101FE0000F901010101FE000002F600FF0000020008"> : tensor<128x128xi8>}> : () -> tensor<128x128xi8> + %31 = "tosa.const"() <{values = dense<33> : tensor<1xi8>}> : () -> tensor<1xi8> + %32 = "tosa.const"() <{values = dense<1185020333> : tensor<1xi32>}> : () -> tensor<1xi32> + %33 = "tosa.const"() <{values = dense<"0x0D0200000C010000A7FFFFFF5A02000042FFFFFF47000000A50000005DFFFFFF4C00000004000000EBFFFFFF82FFFFFFEDFFFFFF87FFFFFF040100001300000094000000540100002E00000070000000EDFBFFFF220000006E000000E5FFFFFFE3000000F0FFFFFFAEFFFFFF1D0000009BFBFFFF2500000089000000C6FFFFFF820000005A000000A2FFFFFFAB000000E7FEFFFF250000003C000000EBFFFFFF320200004500000038FEFFFF13000000B7FFFFFF45000000A6FFFFFF120100004C000000C1000000B1000000100000005A000000FA00000048000000EAFFFFFFE8FEFFFFE0FEFFFFBEFFFFFFFFFFFFFFCCFDFFFF1E0000009CFFFFFFBAFFFFFFC1FFFFFF3E0000005C00000078000000A70000000DFFFFFF410000001D01000077FFFFFFF5FFFFFFD6FFFFFF1E0000004000000009010000B2FFFFFF8200000013000000C7FFFFFF75FFFFFF4E000000580000002E0000000500000038000000EDFFFFFF21010000160100005400000075FFFFFFEEFFFFFFACFFFFFF3F0000008BFFFFFFAEFFFFFFB100000042FFFFFFCFFFFFFF5B00000000000000D8FFFFFF8F00000023000000EBFFFFFF5D000000F9FFFFFF1C00000045000000BDFFFFFF2D0100001F0000009BFFFFFFCA0000005700000096000000E5FFFFFFF1FFFFFFE1FFFFFF4E000000550000005DFFFFFFC20000000E0000004C02000004000000"> : tensor<128xi32>}> : () -> tensor<128xi32> + %34 = "tosa.const"() <{values = dense<"0xFF0003FFFD0007020000FD05FF01FD03FEFF0001FF04FF0501FEFFFF00FD01FE0000F3FB000103FF03FD01FD01FDFE00FD00F703FEFE00FDFD00FF01FE000001040100FEFCFCFF03FFFFFFFE02FD01000105000000FF010002010005FEFBFD0203FD00FFFE00FE00000100FFFEFFF200FEFF04F8F7FC000100FDFEFD00F9030000FF0002FD01FF0101FF00FD0100FC0106FF03FE0001FBFE00FDFD0100FDFDFEFF01FC0104FEFCFE00010701FFFB0500FF0003030201000000FFFD01FDFC0001FEFEFAFF02FEFFFFFBFEFE04FF010200000001FB000601FFFF01000200010103FCFF00FBFF01F8F80101FEFEFEFFF800FAFF03FEFE0101FD01FFFF02FF01FF01000002FEFE01FE020100000302FF000000FD010301FFFF01FE00000100FE00010000FAFD00FFFF040100FF00FFFD04000001FFFEFD010200000000FE01FF0003FF0102FF0100FEFEFE02FF01FD000000020100020002FD00030300FF00000301010000FEFCFFFDFF00FF02000300F800020100FFFC0101FF010502040102010000FD04020101030902FEFDFAFBFFFBFF0501000500FDFEFF000701A600FFFDFEFBFFFC0002FDFBFF0001F408F2FEFEFDFF000705FAF600FB010AF0FC01F900FEFD02F606FE01F801F8010008100401FFFFF7FFF6FF05FE0002020805F800FF0510030200010CFF00FF0103FDFFFDFF02EEFFFAFEF9F908F2FE00FDF6FBFCFF010102FC04000403F900F4EBFEFF0102010403030201FCFE04FDFDF701000301FF0104FBFDFD0001F9FE0008FF01040B0006FF05000301FD0200FFFCFB06F500FE00FFFCF300FDFD07FE0001FF020001000103040002F2FBFBFFFAFFFCFB0003000301000109FF0303030001000102F6000605F8FBFFF503FF0802FFFA01FA0200FFFC0403FF000501FD00FAFFFD01FFFFFFFD010000FD05FF0103010100FD02FC00FD01FF0301FFFF00FFFE0100FD0100FE0003FEFF01FD00FD00FF0101FF01FEFD05FFFE03FF00FBFF000500FC09FF00FF0100FB00FFFD01FD030401FF02FE04FFFB00FC000002FEFEFF02FA06FE0000FF0002010000FDFA000003FD01FF000100FFFFFE0000FF00FFFFFFFE01FF000101000301000101FFFF01FFFE00000101FE000100020101FFFFFF0101FFFEFFFF02FF010103FF01000201020102000001000000FF0101FEFFFFFFFFFDFE00FFFF00FFFF0200FF010000FFFFFF02FF010001FF010000FF00FD0100FF010001FF00000100FD00FF01FEFF00000200FF02000001030000000002010101FF02FF00FD0101FE0000010000FFFFFFFF000001020100010202040000FFFA03FA0000010001F80101FDFF0000010100FFFDFF00F901FE0000010000FF00020100FF00010001000201000101FFFEFF0101FF00FF00FE0100FF010200FE0100FC00010100000100000000FF0001FF01FF00010101000000FF03020000010001FF020101020101FD000000FFFBFF0100000100FF000100FCFF01FBFE00FFFD01FC0100020001F401010100000002FF00FF00020200FFFFFFFE00FFF7FEFD00FFFF0201010000FF0002010000FF010104FEFF0100010101FE000000FF00FF0000010000FFFF00FFFFFD0001030002FF00FC00FF0100000003FF01FF010000FC02F901F7FFFF05FEFF05010000090106FF010000FE020100FE0002FF010301FE03FF010001FD00FA0001FF0100FEFFFB00FF0305FC0101FAFBFFFF0000FE01FB01FF01FFFDFD00FE0001000000F2FDFF02F9F9FE000700FEFC00000105FF000000FDF908FFFD0000FE020604FA0000FD00000001FF03000000FE01000000FF01FEFFFEFD01FF00FF0200FF0000FEFFFF00FFFE00040101FC06FE0000010101FE0101FFFF0100FFFEFF0102FD02010001F600FD000200FE010100FD00FC0301FF01FEFE03010000FFFF0601000001FF02FFFF04FD000202010100FEFF01FFFF0000030002FF03000100FCFF01000001010101FE0001FF00FEF50B00FD0AF010FC050B0104FDF104FBFA03FF01F9FEFFEC0AFF0101F8F0F500010606EC01FE0500FE00FFFBFFF802F603FEFEFFFEF7EF0A02FEFCF9FA00FBFCF90C0000FA0A06F4FE06F9FC06F8FE00060AF5FE03F006F50FF305FCFFFC0CFBF901FC01F9F003000100FC04FFF9FFFCFB01F607FE0600FA0300F90000F200000001010000000001000000000000FF000001000001FF0001FF000100FE0100FF000000FFFC0000000302FEFF00000000020001010001000000FF00000000FF000100000000FF0000FD000001000000000000000000FF000200000000000001FF00000100FF00FF0000010000FC00000000FF0000000001FF01010000000000FFFD01FDFDFFFD0104FEF90300FFFFFB0001FF00010CFD00F902FDFE0105FF0805FE01060502FFFEFE000000FDFE02000000FF0102FF02FFFFFF0100010200020002000400FF0502FEFE07FDFF07030001FDFEFE0002FB0104FAFC0101010303000100FC0201F80400FFFBFE01FE0000FE02FB00FD060202050102FFFF00FD0000010101FFFF0102FF0100FF00FFFFFF03FFFF03FE00FEFE0000FFFF0000FB01FFFFF800FF000002FF02010101F90400FD01FFFF0200FD000002010200FDFF000200F7FF00000201FE0000FFFF000200FE00FDFA00000102FE03030000FFFF0102FE00000101F700010000FF00FFF300F8FA00FFFF03FF01FF03FF010000FE000003060203FFFE04FE0200FE01FF01FFFFFF00FF01FBFFFE0000000000FD02FBFF01FF02FE00FFFFFFFEFF0200040000FF00010000FF0000020000FF01FE00FDFBFEFFFE0002FDFF00FFFE0001FF02000100000000FEFF000200FF020000FD0004FE01FF01FE00FE000001020001020003FFFFFD01FEFF01FD00FF000100FE0000010001000100FFFFFEFF0100FF02FE04FF0100FFFE00010201000000FFFF000100FF00FFFF0004FEFF010000FF01000000FF000200FF01FE00010100FF0000000101FE0000000101FFFF000104010000000001D6FF0002000000FCFFFFFFFF01FD00FF03010002FFFFFFFF0201FF00000200FF000500FFFFFF0002FFF900FFFEFF0100FAFEFF01FF0201FF02DFFE02FE0100FC0000FCFE0100FDFF00FEFF0101FE020002FF0200FE00FEFD01FEFE07FF00FF0104FEFF0100FEF2FE000000FFFE0100FD0201FE0000FFFF02000000FF0101FEFF00FD01FE00000300FF01FD0000FFA400FEFF0201000000FFFFFFFFFF000202FF0001FF0002FEFEFFFF01FF0000FBFF02FFFEFCFC000201FEFC0003FF040102FF0000FEFE000500000001FF030102FF02FE010303010001000006FC00FFFF020203000101010102FC030100FFFE0101FE00FFFC02FC020000FDFE00FF000202FC00FDFBFFFF0400040100FF0104FEFF01FF0000FFFE0001FFFDFF01000200FD0002000005FE00FFFD00FF030000FE00FF05F9040907020001FB000BFD05FD0101000000FBFF0400010002010301FEFE01F000FF00FC04F8FDFD04FA00FF00050304FE0401FFFF000209070000FF0004FDFFFEF801FDFFFCFFF8FEFF00FC05FF000002000201070002EE00000103000003FDFCFEFF01FF00FDFD0001FFFDFF06FDF801FFFF040001FFFAFE0200FE0902F90202F810FEFB09FD03030100FFFD0600FFEDF3FFFA0D000000FDFAF5070009FBF7000103040103F9F808FBFF01020706FAFEFAFD07FF0308F6FC00FA06FE1302FF01FA0FFF0206FA050204FFFF0513F9FF00FD0F000303FEFAFF0101F8FCFE01FFFF0002FD00FF0200FC04FE090101FB060007FFF504FBFF01FBF700FFFFFDFE01FDFEFF00FF01040002FFFC00FF0400FF0001FD0504FE00000100020002FF020301FF010000FEFEFFFE00010402FF02FFFF01FE010102FF03FC010001FE0002FFFF0001FF00FEFF01FF02000104FF010005FB0304FC00010000FC04FF0100020501FD07FFFF0003FDFFFD00FE03FCFFFE0406FFFF0000FE0100FE0100FF0300FF00FFFEFF00FD01020001FDFEFC010000FF01FF0000FE0000FEFFFF000100010001010003FFFC00FF010000FEFDFF00FF00000002FFFF00010000FF0300000100000100FF000101020100000100000000FFFF0002FF0000FF0001000002000100FEFF00FF00FF00FF01FF000000FF01FF000101FF00040204FEFD0000FF0000000001000100FF01FF0000000003010000FFFF000000FF000000000003000100000B000001F9FEF90000010001F801FE0100000000000000000000F8000000000000FFFF00090000FD01000000FF000000000100FF000000FF00010001000000000000020000FB00000C010000FF0100000000FF0000000100FF0000FF0507FAFCFAFDFF0AFFF6020D0002FCFF0501FC00FC0504FEFF050200FFFE050004FAFFF8FEFD0208FEFC01FEFEFA00010607FDFB000900FD01FD070703000CFD06FCFD0103F904FD00F8FC05FDFC0001FEFF06FFFDFE0301FC0301E700FC00FAFA01010301FFFD040003FFFDFEFA00010106F8FFFB01FCFD00FFFA010002FF00FF03FEFB03FEFEFF000400FF01FF00FF02FEFF0003FAFB0400F8FF00FD010BFF0100FE040000FFFFFFFE0103FDFE000300FD000200FEC5010001FB02FF0000FEFE01F900FEFC02FB0102FFFCFF0300FE01000000FCFBFE00FD0500FF00FA01FFFA0002000001030000020000FF0300030202000203FCFEFEFF02030005FF0100010100FE00FFFFFE01000103010102FE01FA00000001FFFE01FD0000FEFE0000FE06FD0000FF000100FFFE00030000FF010200FF01010104FF0200FE00000102FF03FDFF02FFFE00000001000000000001010600FD000200FF01FF0000FFFF01010003010200010100FFFFFF010401FF00020201000103FEF6FF020001FD000004FAFD0300FB0603FDFBFFFCFE020301FE03FF00F9FD000102FE000000020202000000010101FFFD0100FDFF010100FC00FD010101FD00FB010000010100FEFE02FFFF0001FEFFFB01FDFE03FFFE000000FD010000F80302FAFFFE03000101FFFD0100FDFE0101FF01FE01FEFF000000FFFFFFFF07010105FFFFFE03FD0801FFFEFC060BF50002FD00FC0009010104F8FAF60600F5FF050601040000FA0BFEFF0109FDFAFCFD020202080102010600020304FA0701FC02F8000803FE05FE0304FD10080208FE0701FAF2FEF806FE0100F903FFFCFCFDF41008FBF701FE01F9ED0000FE01090101FCFF02010BFA030002F707FEFBF5FA0303030BFF00F5FC0501080301FF01FBFD06FFFA05000002010201050000FF01000700FD0000FC0401FFFA02FBFCFDFEFF00FCFD0400FC03FF050201FB02FFFF00FEFF0501FAFE00FE02FD01FEFFFC0102010201FB03FB009809FD000000FF000000FE01FE02FF02FEF8010101FF0101010300FC01FC05FDFF0102FBFEFEFC02FB04FFFDF9FF01FEFF0000FF0000010000FF0001FF01000000FFFFFF000001000000000000000000FFFE00FF0002FAFF000006010300000000FE0800000100FF000000000000010000FF01010000FF010100FC0000FF0000000001FF0000FFFF00FEFFFF01000000FE000000FE0100FF00FF00080001FAFF0000000200FF00FF01FF01FE0000FF000000FE0202010006030000FD01000002FEFEFF0600000303FD0102FF0000FF01FF01FD02FF0101FF00FF0001FFFFF90000FE0002FE0001FE00FB0002FE00FDD701FC0802010201FCFE00FE02000003FD00000105010000FCFFFF0001FE0002FE01FFFD00FB000001FF000001F103FE020003000100000101FFFF0001FD010102D800FDF901000000FE00FFFE000000FF0201FF0200000301000201FE000001FF01000301010101FF00FF01010000FF0000000001FF0000FFFEFE0000FFFFFF0002FFFE000100FEFE01010002FFFFFF0000010001020000FC00000000010000000000FF00FF00FF000000BA000002FD00000001FF01000000FF01000000FBFD030000FF00020601F90400FD02FDF8FE0BFEFF00FAFB00FE00FD000100FF00FF03F900F40101FB00FFFC04FE000602FEFDFF0100FC020000FD000100FD08FF03000201FDFFFD0103FAFDFFFFFE01FDFFFBFFFFFA0100FF010100FEFE010203FFFF00000100FB00050204010100FEFFFF010101FCFCFF0602FE0605FE01FDFC0000000002FEFFFF0101FE0002FF000001FE0001FF00000001000200FEFCFF000103FF01020001FF00FD00FF0000FF01FFFF00000001FF0000010000000102FE000000000100FC000100020100FFFF020100000500020000FF0100FE00FFFE0000FF000001FF01FA0001FF0100FF010000000101000000030100FF0005FF0301FF010000FF030100FBFE000101FF00FF010200000100FE0200F40001FEFE010000FDFF0000FB01FF0000FF0200FF00FFF90200010001FE0000FF0101FF01FF00030001FDFEFB03FE0301FFFB000206FDFF02FF0200FFFC00FF0100FF020201FF01FFFF0102000101FEFA02FFFF00FFFE00F900F9FFFF01FE010100FF0001FF000201FF0001FFFDFC0000010202010100FC0000010000FF0100FFFFFE02FD0000FFFD0102FD0304FF00020100FFFF0001010100010000FF00000000FFFF01FCFEFF0101FFFF0300FF0100020100000001FF000001FFFF0000FF0200FF0201000000FDFF0101020100FF0202FF00FFFC000002FF05FF010102020100000301020001010100FBFB03FE01FFFE01FEFD02FEFFFF00FDFF02000100FCFD0300FD0000FEFCFCFDFE02010000FEFE0100FF0101FD020000FF04FFFF0001FFFE0000FEFFFB0000F40002FCFF00FCFE07020300FF020100FF01000400FF03FC030000FEFF01FD01FF0401F801FE00FD03FF01FD03FE050102FC03FF0302FDFDFDFD02FFFFFE010000090505FFFD08FE05FBEE05FB030309F50101FA02040303FD05FDF400FF070F0209F6FCFE01F7FD01010606FC0408FF0100F6F3FB05030100FD0801F90000FF030103020101FB0004F501F50800F80000070100FFFCFE0102FD02F9FF000EFFFAFC02FEFAF3E003F9FFF802F6FEF6000202FCF0FBF8FE0403FEFEF5FFFEF900000201FC01000001FFFEFE0101FF0000FE020002000001FE01FEFF0000FD0201010101FF0101FFFF0000000000000000FF00FF00020101FDFE0000FFFFFDBE00FDFF00FF02FFFF0203FEFE0001030100FE0101FF00FFFB0000FFFE00FF010100FEFF0001FF01010102FD0001FFFF010103FF03FF0201FEFEF80001FF030201AE01FDFCFD0500FFFF00FB05FAFFFEFF010601FD0302FBFFFFFEFF02020004FDFEFF06F9000001FDFFFE01020002FEFEFEFEFEFB0301FD0200FF0301FC04FF00FEFCFFFF0300FFFFFBFE01FDFD03FD020002FE020100FFFF0104FE00FB01FEFFFF040101010400FB020201FD0305FFF500FB02FA04F6FFFEFE0001FF01FFFF00FE0000010100FF02FFFF0001FF02FFFF0101FF0200000001FF000000000000000000000002FD0000FFFF0001000101FE000000FE00FF000000000000FF0102000000FF01010000FFFF0101000000000300FE02FFFF00FE0000000001FE00000302FE040000FF01FF01030000FF0001FF00FF000100FF00FF000000FFFF00FEFF0000FE0200FC010201FD07000301FE0100FA00020001FBFCFCFF00FF0000FC020300FC0202000001020200FF0000010200020002FFFF0100010000040202FF0000FF0000FBFF010006FFFF0102FF01FF00FDFF010100FD000000010100FE01F90000000002FF000401FE0000FDFF0109FE0700FE030103FE00FD0D00FFFF00FE0000000402FF00040000FF010000FF010001FEFC00FFFE00FDFFFF01FF00FF030200FE00FDFE00FF00010101000101FF0000FF00FF01000300010000FCFFFE0001000001000105FF00FFFFFB00FE0200000203010100FDFE0300FF0402FF010300000101FD01FE0002FF000000FC00000001FF0300FF00FF01FFFFFE010101010000FD0203FD00FD03010101FC00FFFE010105FE000101FE020001FF00000202FF01FC0301000000FF0100000103FCFF00FFFF01FF0200FF0101FF03FD00FE0001020100FF02FE0801020202010003FE0000FD010000FE0102FD000103FE00FFFF04FF00FFFFFF0003FFFFFEF902FF0100FFFE01010102FC00000000FCFF0101FF000504FFFA96010207FF00FB00FEFD00FC02FFFFFFFC00FB00F8F1FE01FDFA0002FE00FEFAFFFEFEFBFA00FE0200FF00000300FC030107FF0CFF0204F9FF0001030003F6FFFC050BFDFEFFFDFFFF0100020001FEFFFA05FD03FF0500F2010304FFFE010400020103FD00020100000300010105FF0103FC020502040202FDF4000003FF00FF000000FFFD02010300FFFFFEFF01010100F9FE0002FE0100FE030000FD04030001FF00FF01FF010007FE000100FC00FEFF0100FF0101FC020001FF000000FFFE000300000000FF010001000001040100FD0000000001FFFF00FEFF0001000101FF0000FF0000FB000002FFFD00FD010600FF000002FF000002000100FF02030F03F8FF010502F4FB04FAF003F3F900FA0501EA040302FEFF0002FB0003FAF9F2FD040408FDFD02FF04FFFFFEFF0AFFFDFFFFFC00FF0101FEFBFE00030302FFFEFD02FBFDFFFD04F8F9F6FFFF06FD06EAF6E00602F9FDF8F9FF0400FEFAFEFDFC03FBFCFF0002000102FF00FFFDFD00FD12FE04010100FFFAFD02FF00FD0003FDF7FE02040002FD010103FF000303030000FF000200FF000000FEFFFD020100FB02010101FF030102000100FF00FFFF0200FFFF0201000100FF00FEFF010101010105FFFF00FFFEFFFFFF00FE01FDFE00030100FF02FFFF0100FD010200FFFF04000001FF00FE0100FFFE00FF01FEFF0000FF030100FF020200FC0000010203020101FD00FE0603FF00FE01FFFF02FF00FEFEFFFCFE00FF0002FFFFFFFFFF0201FFFEFF050100020200FF000101FDFF0100FB02010101010200000102FD02000200FFFF0000EDFFFE02080001FFFF0000FFFFF801FDFFFEFF01FE02000A00000000FDFCFDFFFFFFFEFFFF00FFFF0001FCFEFF0000FFFFFD00FD00FF0100FEFFFD0102FF00FFFD02FF0004020501FF000002FDFD020001FF000001020000FE00FF000000FE00030002010300FE0101FE030101FE0100FFFFFF0100FEFF01FE02FFFF0000FE00000001FF00000001FDFB0000F70001FFFCFF0000010102000002FCFFFF000000000201FFFE00FFFFFF00FFFFFF01020000FF0301010100FF0200FEFE020301FE01FDFF0101FF01FF0103000001FEFEFFFC02000002FE00FEFEFEFE0000FF01FF0001FE00040100FF0C00FFFFFFFF0004FC02FE01000003000601010001FF010000000003000001FFFEFC000103010202FF010001FF01020100FF0303FEFE0200FFFF0000FA0001FF02FDFCFE00FD0102FFFEFF0101FF00FE02FF01000200FFFEFDFD0000000302000000D4FF0000FF00FF000000FEFF000101020200FDFC010201000000FF0000000300010001000000FF00FEFF00000000FF020000FFFEFE0100FF010004000205000100000100FF0100FF00000100FFFE00FFFC0100010600FE00FF000000FF00FF00FEFF0000FFFE000001020000010402FFFC01FD01040103FE01010103FF00FFFE0000FAFFFEFFF6FFFF0302FE00FB00FDFD010001FCFE0100FC02FC00FD0000FF0000020104010201FBF80001FFFD0CFCFEFEFFFD0001010100FEFF00FE0004FD00FC03FEFBFFFFFC0200F9FF02FCFF01000302FFFF00FEF801000300F8FD03FD04FD04030001FD0101FEFD0001FEFD03FC0001000100FE00010105F50002050200FF01FBFE00000200FF01020000FCFEFF0005FF01FEFFFF0001FF000101FFFF0000FE01FE01000102FF00FE01FF010100FF00FF0003EE01FE040A01000000FE00FE02FA01030100040005FE030B00FFFF010200020001FF0000FE00FFFEFBFFFEFDFEFE01010201FEFBFEFF0000FFFDFF01FEFF02FF0000FF0101FF00FF00FC000103FB0200010000FA0301FE00FD000000FC00FE010003000200FF010003FF00FEFF00000008FFFF0000FE0400FE00000104030100FFF80102FF00FEFE0800FFFD010000FC0202000002FF020001FEFF01FC01010001FFFD000500FFFFFF00030201FE0002FF020000000000FCF6F6F5FF060FFDFCEF0BFD0207010100FA03000F07FB09FE090200FB02FDFFF60301110403FF03FEFD01FF030301FAFCFB0107000300DC00FFF704FCFB01F20FFEFCFFFAF5FCF900FFFA02040200FD01FEF30001EE08F800000203020C0000FCFFFDFB0100FE03FFFD020D01030004FD04FD03FD01FAFB00FFFB0AF719000000FEFE00000101FF0502000201FF05010100000002FC02050201000002FF03010100000102FFFFFE0101FFFF010100FFFFFEFE0101FE01FE000301FFFD00FC02FF0001FFFDFC01FEFF02FF0100FD0002000101000103000204F700FF01000100FA00FC01FEFFFC0300010000FF000001FD00FE010201FFFF00FF00020301FF00FE06FF020102FDFEFFFD000201FD01FFFD0100FEFFFF010101FF0100010300FE00FC0500000609FE01000202FB020001FEFE01020001000001FF000101000002FF02FF00FCFF00FE00FF02FFFE0200010502FB0002020100000002FF00FD0001FE00FFFE0005FF0600FD00FC03FD01FD00FE02FD00FFFFFF0DFFFCFFFF0100000000FFFF000000000000000000FF0000FF00000000000001FF000000000000FF00000000F900FFFF04010001000000FF0600010000010000000000000100010000010000000000FFFD0000010000000100000000000000000101000000000100000000000000000100080000FA0000FF01FEFF000000FF00FF0100FF010000FE0BF406000305F901F2F70405FF00FB01FEF906FD0302FEFDF9FCEF01F8030A0202FCFCFF03FBFB03FD01FFFC060300FF00FFE302F9FDFFFFFAFEFB03FB01FFF90204F7FDFDF70104FEFEF0FF0800FFFD05010503F701F605F601FFF6FE02F90DF9FE0B00F7F9F4F90303010201FDFF050AF1F6FBFE000002FA00000106000000FDFF0802FEFEFD0104F901FF0002FEFDFFFA030002FE0600FBFDFE00F8030304010204FC03FF0206F00BF7FFFEFD00F90106D00BFE0000FC00FC00F8FDFFFFFEFC0000FCF90006FAFEFE01F9FD040101FAFD060100FD0004F8020002FF04FA02FEFF06FF020102010000020100FB000002FE020101000100FFFFFC07FB01FF000100FF010001000101FEFD01000100FF0100FD0000FFFF0200FD00000203FF00FF0102FF00FE01FE0001000001000001010002FF0001000100000102FE0000FAFF0000FA0200020201FF000100010000FE010100FE0200020100FEFF010002FF0100FF00FD00FCFD01FE0100FF00FF02FFFE00000000010102FF00FEFF00FF00000101FEFFFFFFFF0001FE01FF0000FF0102FE0000FEFF0000F9FF00FD05FFFFFD01040101FF00FF000100000100000000FE00000301FFFFFFFF03FEFE01FF000001FDFF0000030101FF010100000000FDFE0100FC0000FEFF00FF0000FA020100000000FE020100FFFEFE00010000FFFEFF0004FFFF040004FFFE0102000100FE02FF02FE02FDFB0100FA01FF030400FFFDFF0006FD04FBFEFE0000FD040302FF0004000102FFFB00FFFE03FF00000101FD010001F901FF00FEFCFB00000003FEFFFD01FD01FB04000002030302000001FF040000FF000203FF000000FCF2020100FD030201FF050000FDF8FE0100FF01FEFEFFFF0102FBFF04FEFE030700FF00FFFFFCFCFF000400FFFF070200FC01FFFD0100FBFFFFFFFF010100FF01FE01FAFE00FEFF02FD00FFFFFFFE04000001030301FEFF01FE0201FF00FEFEFF0207FD02FD0001020505030100FF02FF0002FE010000FD0500FF010202FC020203010100FFFF0400FE030000FFF9FFFF00FDFFFF04FEFD01FC030001FC01FEFDFF00FFFF00010000FF00020000000001FF020000FF000100010102000000FF00FF0000FF00FEFF00010001FF010003FF00000000FF01FFFF00FF00FF00FFFF00FF00FCFFFF00FF01FE02FF02000001FD0000FF0000B6FFFF02000001FCFE00FFFF0001000002FFFF02FFFF01FF0000FF00FE000101FD0200FF00FF0001FFFFFFFF00FC00010402FC01FFFF040201010002FF0203FDFF01FF05FF00FF0000FD00000102F50100FF01FFFE01FFFE01FE030002000600FE0100FF01010201020200FF01FC040200FF00030100FF090100FE00000200FE00FE03FD00FFFE0201FFFCFFFF0000FDFA01F301FD00010001FFF600FFFD01FEFBFDFFFFFF000100FE0000010000000202F8010204FCFCFF03010100FBFBFFFE0000000001FFFF000003FCFFFF00FFFE01FFFD000200FD0000FEFA0006010403FCFF00FFFF00FE02FC030003FCFFFEFC0006FDFEFB00FE030301FF000009FF020004F902FC02FD030200010300FF00FF0600FB02FE000300FCFE00FF0000FFFDFC03030402000308FFFF000000020004FE00FEFE0000FF0B00FF010401FEFFF80102FDFF000100020002FEFE0A0000FF02FE01FEFD0001FE05FD01000302000003F5FF000000020102040004FEFE00FF00000200FF020005F7010000010300FF000001FE0100FF00000001FDFBFFFC01FEFB00FF0000020100FE0000FE010100FE03FC06FFFF0202FE01000000FCFF05FF000001EE0101050601FDFE00FE030000FC01010206FD0200FC0100FEFDFE0300010201010102FFFD0602000000FEFFFEFEF501FE0101FE04FE000400FE0303000401FEFF03FE01FE02FD00FE01FE010002FD02F90003020200FFFF0501000002FE0001FF00FF00FFFF0000FF01FEFDFFFC0008F700FAFD02FCFC00000501030402FDFF0000FEFF0001FEFEFDFF00FEFFFDFEFD0802FFFE0003010101FEF4FA00FF04000000040001FB0500FF0004040300FD00FFFBFF010200000200FD04FE04FF01FFFEFF01000004010101FE01FB000301000302FEFF00FEFC04FFFF00FFFA00FFFF0302FE0100FFF300FDFF0302FB01FF00FEFE00FFFE0100FF010100050100FA0305FCFCFCFC000000FC0104FBFFFAFFFD05FC01FE000503030200FCFD040103FAFEFF0000FFFC0100FFFF030C0100FD0000FF00FE03FB00F8FA0004FEC30002FCFF070101FB040400FEFC0603FFFCFAFF010500FA01000600FCFE00FCFE0202F7FE00FE03FF0003000203FF0304FF0202FFFF01020203FB01000000FD02060005FE0203000000030000FF01FD00050203010300000005FFFC00FE02040300FE01FF000200000100000002FE04FF0000F4FD00FFFE0201000106F8FD060102FFFEFF0101FFFE00FE0001FC03FD00F90000FC03FF01FE00FCFC020000FF01FAFD01FF00FFFBFEFFFD00FFFD0007FE0102FF010000FF00000100000002FD01FFFD0301FD000201020003FF010101010101FD0403010000FCFE0100FFFDFF0100FCFF01FD01FF050202000201010000FE030001FFFF03FE0201FE00FF0301000000FFFF01FEFEFEFE0100FFFFFDFE000001FFFE00000303000301FD0000030101FE0101000000FF01020001000200FFFEFCFE010001FE00FFFE000000FD0000FFFFFFFF040100000001030001FF000000F802FF0200000001010000FD000001010102FF000101FE00FF000000FE0001000100000000FF01FF000001000001FFFFFE010000FF000101FF00FD0000FF00000001FE0100FF0200FFFE00FF000100FF01010200FFFE0100000000FF0000010104FF00030101000002FF00FF00FE0200FF00FEFF00FD02FF0001FDFE00000000FEFFFA0201000000FF0101FEFE0101FF01FFFF00FE01FF01FF0001010100FE00020000030101FFFD0000010101FFFF00FEFEFE03FFFF0701FF00FFFE00000001FF01010000FF030001010101000001FF010301000000FFFD000001FE010000FF01FA00FFFFFF0101FF0000FD000000000202FFFF02FD01FEFFFFFFFF0007000001FFFD0000F600000000FE030100FF0000010000FD02FE01FF00FE000201FEFF0100009A01FF00FF0000000102010000FFFE0000FFF60003FF00FFFFFBFE0000FF01010200FE0000000104FF0100080201FF010000000101F900FE00FFFFFEFF010000010002FF00000000FFFF000000FE0203020000FF010000FC0201FD0004FFFE0200FB0000FF010100FC04FA00FFFF03FFFFFE00FF030100FF00FF020000FB00FB01FE0001010000000001FB0001FEFC0300FEFF0000FF00FDFBFF0600FFFF0000FFFF02FF01FE010000FF0001000202FF00010201FF0700FEFF03FE010002FF05030002FF0103010003FD01FBFEFE02FFFEFF04FD0001FE000005010001F9FC02FCF80000FE02FDFFFDFDFF07FF01FF0300FF0102FF00FF01010200FF0101FEF70001FD03FD0004F603FFFA0102FDFF0401FF01FEFF00010001FF0000FA020300FF01FD0200FB00FE0100F901000003FF00FFFC0000000001FC01FE00FFFFFE0100FFFEFF0006000000FD00F802FF0100FCFE01FF00FE01FCFDFFFF0106FDFE0200F70100FF020000FEFE0701FF0002FF02FC00FFFD0000FE00FE02FFFF00FFFE01FE01FD040001020307FBFF00000203FFFE020002FF00FEFF000100FBFFFE03FB0102FF01F90000FDFFFD01FE02FEFD0000F900FE03FF0500FFFF030301FF030700FF0100000000040001FFFFFD000202FF01FE000101FE0101FF0001FFFE0301FD0000FE0100010002FCFF0000FEFF0002FE0105FE00FEFFFD01000002000101020001FE00000000FEFEFE00FE060000FEFFFE02FF01FEFDFC0400FD010000FF00FEFE00FE00FF0100FF00FF00000300000001FF05020300FFFFFFFDFF0101F600010004FF0000FD01FFFE0004FF0100FF0003FFFF0001FF01000003FD00FFFEFEFF00FEFE03010002FEFF010100FEFFFEFF00FB000000010001FF00FFE9FF0000FF00FF0100FE0002020101FF0104FF000001FE0000000006010000F70201000201018D00FF01FF000001010201FF010001FFFF02FF0401FF0002030003FE0001FEFF00030100FF0301FE00FF00FE00FFFC0100FF000101FE00000202FC0601FA000001FE02FDFF01FF01FFFBFBFE02FE020001FF0001FF010101FF0001FE0000FFFF010001FD0002FC0000FC03000002FFFFFF01000301FF0200FBFF0000FE02040001FF0200FF01FF00020000020100000001020201020000000100FFFEF9FF00FF020200FF00FFFF0100FD0400FFFD0002020100FA00010402FE01010100000100FFFFFFFF01FF00040205FCFE0002010000020004FE000002FE0001000101FFFF020102FE0002FE00FEFEFFFDFF01FF02FD0100000100FC0003FDFAFF02FF0601FF000000020002FDFF00FF04FFFF00FFFF0000FE0100FD00FD02FF01FF00FC0205020000FB04000004FEFFFC010301FD00FEFD02FE01000002F5FCF70CFF0000FEFA0201FC0401F600FF02000003FEFB030100FC01000101FEF7FF0101000000FE00FC02FE020200FE0305FBFF02FEFF030100FF0405FBFF03FDFFFEFFFD0203FF0103FC0300FD01FFF9FE0001FD000302FA000103000200FE0601FD01FFFC0001FC000002FDFD06FBFF07FEFE0001FEFF0200FDFE020100FAFDFB03FFFB000004020600FF03FE030100FF05000901FE000100F5FF03FFFF020100FF000101010100FF0100040B02FA05040704FB0301FF05000201FDFD00FEFE02FC04FCFF00FEFCFD00FF00FAFFFE00020101FF0103FEFA00FD010401FC03000001FF00FC01FEFB0000FF01020201FF01FF010202010004FFFE0201000101FD010100030000000203FE01FF0202FE01030000000203FDFF000000FBFE020000000100FFFD00FD00000000FEFD0102000101FF010001FEFF00FFFBFF0200FFFF0202FD01FF0200FD00FF0100FC00FD0001F9000100FC02FF0001FD0201FF0100FF000302FFFFFBFD00000201FDFC0400010001FF02FEFE02FF03FDFC0101FFFBFE0001FA0000000105010000FC0200FFFEFE010201000002000101FF010101FE0102FF01FB04FB00FFF9FDFDFDFF0000FEFD000101FE01FF000001FB0100FC01FF030001FB02FFFD0202FD01FC01FC0000020101FDFCFF000101FFFE0205FEFEFFFAFB030302FFFFFF00FB010300F9FB03000001FB0200FD0508F9010201FF0201FEFF0200FFF6F806FFFAFCFDFF00FDFD0102020101FCF901FE0100FFFD00FFFF01FF0002FD00000309FF0302FF000303FF01FFFEFF0204010101FE0000FD03FCFF03FFFE0100FEFEFEFE00FD0101FFFEFD00FEFD0001FF00FEF702FA0303FFFEFF00FFFD01FEFE00FF05FEFEFE0008FB0000FF0001FC02FFFDFEFD01000200010003FFFF0000000101FFFA0200FFFD050200FE0001FF0000000000FE0000FF00FFFE01000000FF0101FCFC01FF000000FE00FFFC0004FF00FE02FDFC00FF0103FF0002FF000002FCFE03000104FFF503FE0001010200F70001FE0000FD0000000001FF0100FE0000000001000000010000FFFF00FF00000000000000FF0000000000000100000100000000FF00FD000000FF000000000000FB0301FF020000000100FF0001FF0000FF00000000FA010001FE01000100FF0000FF000000FF0000010000000100000000000000000000FE00000101FFFF00000000FEFFFFFF00FF01FFFFFF00FFFF0000FF000000000102010100FFFD0000010005FEFE00FE01FF000200010001010001FF0200FE040001FFF800F70000000001F7000300FF020101000100FE0100F600000100000201FFFE04FFFF04000000000001000001FE02FF02FF000100000200010002000100000200FAFF000300000001FD0101FF0100000003FFFB01FD000001FF00010200020007FF000000FF070100FF010001F20101000000000000FF00FD01FEFF00000000000100FD000200FEFF000001FF01FF010000000101000100000101000003020000FF000200FD000100FF0100FFFD06FF00F900FFFF01FF00FC0001010000000000FFFD00010000010202000105030001FFFF010104FF0000FA01FDFE0006FC000502000301FB0208FEFE01FD0305F8FC01050001FFFF010000FD00FEFF02090001FC01FE000200F90003FEFE000300FF00000101020000FFEFFEFB00FD01F90C0008050206F0000004FBFC00FB03060100F9FB00FEFD0300FC00040404FAFCFC0101FBFF02FB00F805FFFFFE01010001FE000802F0010100FF010100FF0201010100FE010200010002FFFB01FF000201020002FFFEFE0004FFFE000200FF0001FF01FB0002018103010101040403FF0103FB00FFFCFF000001FF010000FFFFFF000006FF010001010000010001FE02FF00FF01FFFD01FE0002FF00FFFD0001FFFF000003FE0000FEFD0001FE00FEFF02FF00FF0200FF0000080301FE00FCFCFF03020009020501FE03FFFB000201020303FE030102FAFF1201FB01050204FF03FDFEF808FDFF010700010310ED00010011F604FD0001FE0301FB0000F8FCFD02FBFF070A04FFFE040304FD01FB0001060402FB06FF00FBFF00FF0202F8FE0105000001F8FE0000FF03FE030200F9F700FFEB03FE01000000FFFFFDFF0000FF02030100FF00000002FFFF0000FF0300FE020100000000000000FF01FF010002FF0100000F000100000000FF0101030001FFFFFF0201000000000000000000000001000102FD0200FE0201000000FF01FFFF01030000FDFE0101000101FF0201FE0000FF01000200010003010101F602FE01020100FF000000FD0100FFFFFE0102FFFE01000002FF02FF01FD00FF0200FF02FF00000100FE0001FE000000FFFFFFFEFF000000FF01FEFFFEFF02FF000001000003000100FF020105FD03FF01FDFB00010700FF0200000003010001FCFEFEFF000002FF03FE01000001FC00010001FFFF0101010100FC000200FC0102000000FFFF0100FF0001FFFF040200FAFC01010000FFFE0202FFFE00FF000000FEFFFE00020001010304FFFFFF0000FFFE0101040003FE01000001FFFE0103FF00000103FEFFFF000301FF03FE00010200FF01000200FFFF0101FFFF0100FF01000100FE02030002FF00FF02FF020501FFFD0000000001FF00010104FF00FFFD0000FF01000000FF00000100FEFD00FE04030000010200FFFFFEFEFFFF00FBFCFFFE04FB000000FBFD02F805FD02FF0001FEFFFF0003010000FF000001010100FF0101FE0400000001FE0100F90000FE0400FF00FEFF00FFFFFFFE060000FEFD040000FFFFFD01FA0501000000FEFF000100FF000102FFFF0002FF01FF0200FDFF0001000200FFFF000000010100000000FFFF00FD00FD01000002FFFC00FE00000200FEFE00FFFC0100FD0300010001000101FFFD00010001000000000200FF0001FCFF00FE000001FF0003010001FDFF01FFFF000000010000FFFA00000000FF010000000100FDFF000001FF0101030101000000FF01FE000400010000FFFF0000FFFF000001FE0000030104FE01FFFCF902FF0303FFFFFB040107FD0006F9FFFC01FF000000030101FD00FEFE02FFFF01FF02FEFC030100FE00FFFFFF00F2010201FF0105FF0000000101060003FEFDFF01FFFDFFFFFF0000FFFC0100FBFC01FBFD04030400FEFE00FE0100FE000102FE00FDFFFD0002000400010101FF03FD0400FEFE02FEFD00010003F9FDF8FD0204040206F6FFFBFDFCFB030002FE00010100FAFF00FB03FF020301F7F800F9FD000001FF03010000FD00FFFE0101050100FFFFFEF9FE00FCFE0501FBFE0001FBFFFD01FDFDFEFE010B000002FFFE00FE00FBFF00FAFFFF02FE0000FFF800FD0400000200FFFF01000801FF0003FE000004F70104FC01030000FEFF01FE0100020007010101FE01FDF90203FF01FFFF01FE00FF0000FF040100FC00FF00FF0D08FF01FE010201000001000000FF02FDFFFF000200020100FF0003FE000000FD040101FF030001FD00F6FE01FF0002FFFFFF000003FF00F9FF01010001FDFE0400FCFF00FFFF0004BF02FE03010602FE00FFC8000000FD000101FE0205FFFD00000202F8FCFFFF0300FE01FEFFFFFD00FDFE01000000FF010300FFFDFF0101050001FFFE00FDFEFE01000100FD0100FD000100FFFE03FF00FBFE02030201FDFF02FD0001FF010201010003FF0300FD0200FE02FC03FEFFFFFDFD000100010701020200FF00FE02FE00FF02070103FD01FC01FEFFFFFEFF010100FD0102FC0002FEFF02FE00FE01FF010001FEFF0002FFFE0303FC00000001FF0103040003000102FC0001FFFFFB020001FFFE00030100FFFC01000201FDFF00FBFD01FCFEFBFFFEFE0002FF0004FF00FE0005FE00FE03FF01000101FFFCFD0200020002020102020000FFFF01FE010001010002FE000000F900FFFEFEF7030000FC00000200040201FFFF01010000010000FD010001FFFEFFFFFF000002FE0100020100FF00FEFF0100FEFF00FD0000FF010300000000010100FF00FE00FF0100FE01040102FEFF0400FF0000FE01000000030100FDFB0002FF010100DA0100FFFF0000FF00000000000000FFFF010001FF00FF00000001FFFF0001FFFD0100D6FE01F80101FD02FD00FDFE00FFFB0401FD0101FF05FF05FBFCFD01FFFCFCFFFF020101010101FF01000000FEFF0000FFFE0105FEFFFEF20201FF00FF0100FE03FBFF0101FA04FDFAFE0302FDFFFC010101FDFE00FBFB0400FFF8FFFC01FF0600FB00F903030005FFFF02FA00020200FBFD0106FFFD0100FB01FDFF01FF020103FD030213FE00FFFEF607060404F704FD00F4F0FDF601F9050AF2FD00000704FE00FFFEFDFE04F2FB08FC05FE0A08FE01FBFCF4FDFF00F9FEFEFA100100FF04060E03FC05FD07020509FB0103FD0BFE0CF8F7FA02FF0DFB040307F70505FE010209FEF90B02FBFC0200FBE6FFFE020200F7FF08FD08020706FB04000701010000010100FF00000100FFFF01000001FEFE01020100FF0101020100000000010100FFFD03000101FCFF00FF0000FE0800FF0002FFFFFF0201010001FF000000FE0101000001FF00FF000000FE0001FD000002FF000000FFFF020300FE01000300FF01000002FEFE01010001FF0001FD01FD01FE00FDFF000101FD0002FFFE000000FF01020100010000000000020000FF0101FF00000001FF0000000000010100000101FF0002000101FE03FF0000010001FE01FF0200FF000000010001FF00FE00000000000200000001000000000100000001FF0000FF010002FF00000000FF000000FF0100FF010000FF00010200000000000000000100FF00FF01FF01000000FF03FEFEF8F008FA000302FC0202020003F7FF00F602FBFDFDFB0000FDFF09FEFDFAFCFD02FEFF15FE06040102FC00FFFE00FDFE000106FD00FDFA0205FE06FF0003010101FF01FBFDF2FFFDFF060000FC00FAFFFBFCDF0006FBFB030204FE0503FFFD0100010001FF00010902010103FDF10000FBFE000300FAF5F7FEFAFDFEFEFD070603040106FCFBFA070107040201FD0000FD01FAFFFA000300FDFD050200F7FFF80100FCFC01FBFDFF08010001FF010102FFFC0001000000F6FF01050301FCFCFF0600FC00FF03FAFF0402FF05F9010500010301FC0304050002FD0101FCFF00FC020308050100FE04FFF30104010205FBFEFFFF01FE00F604000100000101FFFD0000FF0000FF01FF0100020300FFFF0000FCFC0101FF0000FB020201FF02030001FEFB01FF000000FD02000000FFFF01000101FEFFFDFAFF00FF0000FC01FF00FFFF00010001FDFEFF020001FF040100FE01000001FFFD0001FE02FFFEFF0101FF02010100FFFD000004010100FE01020100FD02F70201FE0101FF00FC0102FE00FEFFFF00FF00FF0002020002FF0300FFFD02FC0002010001FEFF00FD0001FF000400FE020201FEFEFC000001FFFD01FF01010102FFFFFEFF000102FEFDFF0203FEFC0300FE00FE00FE0000FFFDFF000300FEFEFF00010000FBFF00000002FF01FF02FDFF010003000000FEFBFF01FC010200FD00000000FD01FF000600FFFE000000FFFE00000100FFFE0100FFFE0001FEFBFB01FE0000000200010005FE000000FF0400010000FAFF00010101FF00D1FDFFFFFFFF010000000100FF00FF0101FE0501FF01FFFB00FF000000F90200070003FF0001FF0101FFFFFD01FFFDFFFB02010100FC010200FF00020003FC00FFFF02FF0001FF00FF0000FFFE0000FCF3F80104FF07FF08FE0107000409FDFF06FB01FFFA030001FFFC04FDFCFD03F8000103000406000102FD00010005FE00FE0701010001FDFCFF020301F60202F00704080403F80200EDFF000300FF06000302F70301FF02FFF902F8FE0701F9FF06FCFD000100F3F3FFFEFFFC06000500FE01000501FF0704FA01FEFF0401FE0102020104FFFDFEFE00010302FEFEFE00FCFEFE000200000001FFFA00FF01000000FF01FE0001FFFF030000FFFF05010001FFFDFF00000003010101000001FE0000FE04030002FEFE000100FD02FE010000F7000000FFFFFF000000FFFD00FF00FDFFFF010102FAFF000100FEFF000301FE00FE01000101FEFF020000FFFF0000000003FE0001FF020002FFFF0601FFFF010101FEFF01000000000000000001FDFB01020001FD00FF00FF0000020001FEFF030001010001FE00000000010001FF03FF0101FC0100FF000000FE00010000FE00FF02FF0000FF0001FC010000FF01010101010001FFFEFD0000010000FF00010002010102000000FF00000100000000FF0000000102000000FF000001FF00000000FF00FF000000FF00010000010105000100FAFFFD0000000000FB0101FF01000001FF0000010000FB00000000000001FE0103FF0002000100000000010001010103FF02000000FF010000000000FF00000000FDFF00030100000000010100000000010200FF00FF0000000001FC00FF0000FDFF02FFFE01000000010000FFF8FE0200F90000FD010400FF030100010000000000000101FF0001FFFCFF00000000FF0000FE01FEFF00FF0001FD0000FEFE0000000100010100FEFEFE0000FDFF010102FF00FF00FD00FF000101FF000400000000FD0101FFFF0000000106FF00FD01030100FF0100FF00FEFD05020001FEFEFD0102020204FF05FFFE050000FEFEFF02000000FFFFFE010101FEFD00FDFEFBFD02FE00FFFC00020005FCFF00FFFF0000020002FE000301FFFDFD00FEFF04FC030101FFFF0200020902FF0001FDFF0101FEFE00FFFF03FFFC00FE03FDFF0001010203000000FFFD010001FDFF0102FE00000700060100000400F40100FFF705FDFB03030000010103010300020CFCFE05FD010001FFFF01FB00FB0301FF02FFFF02FFFE030200F9FF00010400FBFFFE00FF0100F9000100F8020001FFFCF9FFFE000000FAFD00FFFE01FC0002F80005FEF500FF000101030301F5FFFE0301000000F804FD000001FFFF4800FF00FFFF0200FF02000101FFFF0000FFFE00FFFF030100FFFE0101010000FF0000FAFE0000FE00BE00FDFF03FE01000302FFFEFC020202FFFF0002000101010202000001FE00FDFEF6000001FE01FFFF0001000100010002FE00FEFFFD0101FFFFFD02FF01FDFF05020001FCFE00FE02FEFFFEFF0001FD02FF00FFFFE4FE0104010301FD04FFFDFE00010201FFF9FCFE00FF050304FD00F602F7FDFBFAFEFFFF01FF0107FEFE0500FB0204F70000FFF7F000010309F708FC0000FFF808FFFFFBFF0800F80601030000000801FF01010203FC0301ED0400FE01FCFF01FFFEFF00FEFE01FA020004FBFF04FFFF04FFF4FC0801010401FF0202EFFE01FD020106FEFF03FEF6FFFE010301060000F70800FC0102F602F8FC04F6FB05FBF5FDF5FE01FB04FDF5FC04FF00FEFC02F6FFFC02FCFF00FD09FDFC0500F802FFFF0109FEFD0005FF06020102FDFAFF0207FEFA02FD01FCF90503CD03FD08010001FD05FD00030003020BFCFCFFFFF7FA0104010303F90304F3000102FB02FAFFFAFBFCFB0009FF000102FC0702EFFE01000000FF00000000FF00FFFF000000000000FF000000010000000100000100000000000000FBFF000003000100000000010300010100FF0001000000000100030000000100010000FFFE000000000000000000000000FF00FE000000010000FE010000FF00FF00FE0000030000FC00000000020100000000000000FF01010000"> : tensor<128x128xi8>}> : () -> tensor<128x128xi8> + %35 = "tosa.const"() <{values = dense<36> : tensor<1xi8>}> : () -> tensor<1xi8> + %36 = "tosa.const"() <{values = dense<1442659867> : tensor<1xi32>}> : () -> tensor<1xi32> + %37 = tosa.const_shape {values = dense<[128, 1, 1, 128]> : tensor<4xindex>} : () -> !tosa.shape<4> + %38 = tosa.const_shape {values = dense<[-1, 1, 1, 128]> : tensor<4xindex>} : () -> !tosa.shape<4> + %39 = "tosa.const"() <{values = dense<"0x33090000F8FFFFFFE7FFFFFF6BFFFFFF6CFCFFFF25F5FFFF03020000D8FFFFFF14000000880000008BFFFFFF3EFFFFFF880100007EFFFFFFEF0000002E0100001E0100008A000000CC010000E7000000B0010000920100002AFFFFFFC4FFFFFF1603000068FCFFFFFDFFFFFFE2FEFFFF86040000A4FDFFFFD3000000D7FFFFFF3F0000000EFBFFFF02010000AD010000CB00000042FFFFFFB1FEFFFF88000000FCFEFFFF6400000094000000EFFFFFFF9CF9FFFFD9000000EC02000058FAFFFF93FFFFFF79FFFFFFA8FEFFFF36FFFFFFCFFEFFFFD006000099000000AAF8FFFF25000000380300007300000049FFFFFF46FFFFFF5FFDFFFF4303000092FFFFFF26020000E90100009C01000074FFFFFFF3000000D8FEFFFFC2000000150100006CFFFFFF60FFFFFF59050000150100001F0200005A000000FDFEFFFF7EF9FFFF3F00000040FFFFFFAD010000E2FEFFFFC8F3FFFFBFFEFFFFE0FDFFFF8E000000DC0100008DFEFFFF60FEFFFF32FDFFFF0DFEFFFF72FFFFFFC200000011FFFFFFF40100005CFEFFFF01FDFFFF7E000000190000008AFFFFFF2000000085FFFFFF1AFFFFFF8C0000001F00000094F9FFFF9C000000DAFFFFFF2C0700007700000073020000BFFEFFFF9EFFFFFF050000001A040000D001000074020000E7FEFFFFBD0100002E010000A9010000160000002D010000DEFFFFFF2B020000E6F8FFFF"> : tensor<128xi32>}> : () -> tensor<128xi32> + %40 = "tosa.const"() <{values = dense<"0x060801FE06F6FA0103FDFC03FEFE0D00040DFB0302FEFCFFFEFCFF16FC02FDEB02FF0008FE060800EC02000201FDFCEFFC0804FF040200FAFCFEF2FE02FC04010001FA08EEF70CF30004FFF2FEF9FAFB0700FA03FDFBF814F80504F804FF011503160600F7FE03FF13FEFFF7FCFBFC17F8FFFEF407FFFFF90C0100FAEFF2FF0701F70000F900FF000101FF00FF02FF01FE00FE020000FF03FFFFFFFF00FFFC00FE00FF020101FD00FF0000FFFEFD020003010102FEFE0101FF01FE02FFFE0101010304FF0003FFF9020100FFFE0102FEFF0001000101FF02FDFF01F9FE00FF0002000102060000010003FE00FEFB000005FEFF01020200FD00000104FC02050102FF00FEFE00FE01FF01FF0000FF01020001FE010001FEFEFF000102030202FFFF00FFFFFFFFFF0001FF01FF000101FFFFFFFF010100FF00FF01000001010001FFFE00FE0100FF00FF00FFFD010100FE01010101FEFEFFFEFE01000200010000FF00FFFE010102020000FF00FE020002FE0001FF00FF00FEFFFFFFFEFE0200010101000200FF03010100010101FF010101FF0001FFFE0101FFFF06FFFD0102FCFE00FFFFFD000101FE000402FD01000001FD0003FDFF00FF0502FD0103FCFF01FF020001030301FF0301010300000005FF0301FFFFFEFC0200FCFFFD010002FE0200FE01FF0000FD030102040601FF01FFFE03FF0001FF00060301FF0000FEFD040401FB040102010200FEFAFF00FF01FE02FE010000FE01FE000001FBFEFD0400FFFF050002F800000309FDFF08FFFD00FC020004FD0401FEFFFF00FFFF020002FFFA01030300040000FFFF0003FDFE0002FEFE00FE0302FF03FFFF04FF0200040102020300FF0902020002FFFF09040000FFFE0008FE00FEFF05000303FFFD06FDFFEDFF04F7FC06000311FF0EF6FD05DFF400FFFE03F7EF00F8E9060A030AFDFF120406FE0000060EEFF805F0FBF501F805F909F709FC00FEFBF00601FA04F7FE0904FF0407FB0300FCECFC0600FEFDFCF90DF505FE0101FEFCFE0800FEFD04F7FF030000FF02FFFF02F90201FCFAFBFB0B0DD4F5F90006FEF8FB1316FAFA02FF01F90000FE0101FF0003FFFBFF01FE01FF01000001FE0000FD0000FD000001FF0300FF0000FFFE00FE00FEFFFF00FF01FFFF01FEFF0002020100FF0100FEFE000001FEFFFF0102FFFEFF000000FE0003FEFDFF0102000200010201000101FEFF0102FF000100FFFF000103FFFEFFFD01FD0101FF000004FFFDFF01FE02FFFF0100FD00FEFF0001000000FE0403FFFD010000000200010000FFFFFFFE000000FFFFFC01FFFF000003FF03FF0101FFFFFDFD0003FEFFFF02FE0001010201FE00010002000100FE0201FF0000000000FFFE0102FF050000FE06FFFE020000FFFF000101010100FEFE000103FE00FF010201020101000100010001FFFF0101FFFFFF01FFFFFFFB00FF00FFFF00010400FF04FFFEFF0000FE0100000100FFFEFF0001FF01FF04000000000001FF01FF03FFFFFC040000FF00FFFF02FFFE0200FE00FDFF0301FFFC0404FEFF05010200FCFF0001040300FF00010600000100FF0000FD050000FFFFFF01FE01FFFDFE0100000103000000000200FEFE01FE0101FFFBFF0003FFFE0001FF01FFFD01020001000101FE0001010A01FFFC0300000000000101FD00F9010001FA00FEFA0102FF0005020103FF000102FF000000FF0201FE00FDFDFE0002000001000000FAFFFD00FF01FF01030400FF01FFFFFF010100FF000100FC01FE0304FFFF00000300FF02FF0501010000FFFF01FE010104FE02FF00FF0400020000FE00FF0300FF020102FFFFFE0001FDFD0200060303FF00FFFE01FF01FBF8FE00FF040000FEFC01FDFF0100FD02030001FFFD0001FDFF0300FFFD02030400FDFE00010102010200FF010300FF02FCFD050001000200FF00FCFE00000100FF000302FE0003FE010201FD02FEFFFF01010101FE0300FE0004020101000001FEFE0001000000FEFFFD0300FF000000020000010001FFFF0001000100010201FF00FFFF01000001FE000101FC00FF0000000000FF02000001000001010100FFFFFE01000300FD01FFFF01FF0300000100010001FC01010000010002FF000101020000010102FF000000020000FFFF010000000001FFFF02FF02020000000002FC0500FF0000010101FE00010104000001FEFBFE0002FF0202FEFF0000FFFF01FFFB0100FCFFFF00FF0001FF030AFFFF00FF0003FF01FE01FE0001FEFD01FDFFFF00FEFE04FFFC00FE02FEFFFAFF000101FFFC0100FF010101FFFFFE02FFFFFB02FEFB0202FF01FB05010002FE03FDFEFF00FF05FEFE00FE02FFFC01F801FDFA02FFFFFFFFFF04070404FE0202FE000700FFFD00F0010502010203FCFE0000FF0100FF0101010002FF00FCF40100FEFF000203FF01FFFE00FD00030402FEFCFF02FAF90301FDFEFCFF0202FEFEFFFEFE02FEFEFE0001F9020601FCFAFDFE00FEFB0200FCFC01F903FFFFFE01FF0101FD01FE0100FD01000101FDFFFEFFFFFFFDFF000000000202FEFE0401FEFD02000200FFFFFEFFFF0003FF0100FE0001FDFE02000000000005010001010102FF02FEFE000100000200FFFFFEFF0100FE020102FF03020300FD000101FCFE04000003FFFDFB01FFFE00010000000100FF00000201FA0202FF01FE03FFFF0101FCFF000100FE01FF03FFFC01FC02FC0000FFFE000001FF000001FF04FFFEFD00FE00010101050001F901FEFF0501FD00FF0003FEFD0001FDFEFE00FF01010001FDFF0000FFFF020100FE02000102FFFF01FD01FDFE01FEFD01FD01F5FF00FF0000FEFF000800FB00FE00000100020200000006FF00FC0300010000FE0101FFFF01FEFF0000FFFDFC010101FFFE010002000003FEFE0001FFFF00FFFE0001FE010001FFFC010000000001FE00FF020200FF0201000100010504FD03030000FFFE00FF0100030006000102FE01FEFE0002FD00FF030205FFFF00000100FE0100FEFF0000FF00FF020200FE0200000203FFFFFF01FF00FE010100000200FFFE0200FDFF0002FE000000FFFFFFFF0200FF00000000FB010000000003FFFF0200FDFFFF010000FF010000FE000002000201000001FF000200FF0000030100FFFFFFFE00000300010100000100FF01FFFCFF00FF00010001FFFF03FF00FF01FC01FF0100000002FFFF0101040102000001FF00000002FF00FCFF02000003FEFF00FE02FF01FF01FFFE01FE00FF00FF01FEFF0100FB01FDFD00FF000002FE0100FE01FE00FE0001030102FF0702FC01FDFEFCFFFFFFFF01FF0100FDFEFB00FF010301FEFE0402FF02FEFF00FFFD01050201FE0402FF00FFFD02FE02020202FFFEFFFF03FFFC01FFFA01FCF800000100020000FF0101FE0001FCFDFF00020101FE0302FEFD02FD0000FBFEFEFB06FF010001FF0000FE0100FF0000000206FF0002FAFEFE01000000010003FEFF0200FFFEFD0100FEFD0202000102FCFDFC020000020002FE020101FF01010001FD000000FE04FFFEFD010104FF01010000FF0102FF0001FFFF00FFFFFFFFFD010101FC0002FE00FE0000FC0103FF000403FFFFFC00010200000102FF000101FC00FF000001020100FE0104FF03FFF80007FC060106040202AD00E60100FE00FC0800FCF8F7FFFFFDFAFBF1FAFF01FF0102030700FF01F302F8FBF8FF010CFA02F416050A01FE0305FE05010400FEFA00030500FFFA01FAFFFE0105060200FB040304020200FF02FFFE020203FDFB04FDFE03FFFEFBF9FEFF01FF0AFD000306FCFE00FEFEFF000200FB01020401000002FE01FF00FFFFFD020000FF00FEFD00FB00FD01000001FF0100FFFC060003FD00FF0001FFFF010100FFFBFD010002FEFF000206FFFF00FE02FF01FE01000300FF0100FBFE0000FDFFFD01FF0002FC01FFFD010001FE01FF02FF020103FCFEFF0104FF000002FF00FC02FFFF0100FAFE010103FEFE0009F20003F109F6F9FB00FFFC01EAF7FF1004FBFB0402FEEF01FAEF09FD12F80DFC01E1F80904FE08ECFA0AFC01EBF600FCECEFF8FB060603E4F9F2FEFE0CFEFDF6FC07F8F8F209FCFB07000007FF08F9020101071201F20E03E9F60BF400F40505FCFDF20A030DF0EF0A00F40BFDFFEB0BFDDEF401FCFEF71601F1F7FF020705000400000000FDFF00FF00FCFF02FCFF03030000FF0100010100000200FD0101FEFF00030301FF0002FD030302FFFF0100FB0301FF010102FF010000FF0005000100FD0001FD000200FEFF01010001FE01FE0102FE03FEFD00FC0001FF01FE01FF00FF000501FF000100FF04FE01FD000002FE0101FE0004FE00FEFEFE03FE0003F30001F600FD0001000101FF0004FDFD01010200FF0101FE000101FFFFFC00FE0001FC01010000FEFC0200FD00FD0100FDFCFEFDFE01FF0400FE02FE02FA00FE020201FF02FEF4FEFF0100FFFF0101000200FA02FB01000305FEF7000100FC0100060102FFFFFF0000FE010003FF020500FC01FFFE00FE010101FF010000FDF70200010300FD01FE0001FF000101020100030001FF0101040000FCFF040502000006FC04F6000105FF010402FEFF0801020202F8010000FEFE00010201000002FE04FE00010100FC00010301FF01010305010503FCFFFC00FAFE0007FF00FBFD01FE0002FFFDFF03FE0200010C02040200080401FDFEFFFB0401FFFE0203FDFE0500F40301FC00010002FA02FF02FD040300FF00FF010100010305FAFEFE00FDFF02FDFEF60000FF0103FD0202FE0501FCFD05FEFC0001F8020001FDFFFF0200FFFD0200FF0409FEFC00FFFD0104FD030303FC010100FD00000004000101070100FE0203010205030200FDFE01F802FD00FAFA00FCFEFD07FEFA0302FE01FE03070201FA01FD020000020E13FD00FA060001FF0902F901FCFD00FAFFFFFC0300FFFE0202F7FF00FF000206FF0402FC04FD060304F8FF01FD03FC0001F6FC03EE06FEFEFE000300FA0503FEFD00FF0F0206FEFDFEFE05FF03FF02FF02E90302FCFF06030612000101FDE3FFFFFBFF02030405FCFFFDFFFC0502020202FEFA01F8F7B7FAFBFAFDFD0000FF0308F90403FBFA010107FAEBFCFD06FC03FD01FF00070100F402FCF80706050100FAFEF8F905FEF800FCFFFAFDFE0AFDFD06FFFF020104FFF8F904FDFAF1FAF2FD02F6FE04FA030001FDFCFEF6FB04FBF80003EAFB030B02070200FD00F4FE04FDFC0206FEFDF7050206FC1AF601FEF60CFE04FC04020000FF0600FF0000FF02FF01FFFBFD0404060101030100FA01FB03FE000200FD0000020304FA0000FDFC07FF06000101FE060003FA09FE01000300FF0307FD0502FCFDFB0102030300FEFCFFFD00FFFB0303FE02F803FCFC0700FD06FF0001FBFFFDFCFE00FFFE010100F800FE03FDFF00FF01020200050CFF00FFFE03FE02FFF200FFF5FC04FF0000010201FAFEFA00FD00000000FE010101FEFFFE01FF050100FDFF01030101FE03FFFD0005FF010103FF02020205FFFB0100000300FDFF00FF0702FF0101F30200000001FE0102000300F902FF02FE00FB03F6010000FD00010101070102FF03FE04FF03FEFE0101040501FF0101FF0205FD01FFFDFD01FEFF0001FEFE06FF0000FF0200FE00020300FB00FF00FFFE010001FFFF02020004000101FF0102FF03FE01FEFF040001FF0103FC04FEFF000000FEFFFFFB04FF01FEFE020503FDFE02FFFE00FE01FAFE020600FA030100F803FE0200020000FFFE0000FEFF000201000101FD00010201F7010103FF0300FEFFF9FFFE04FE00FEFF00010100F60100000001FD01010102FDFF0000FF0102FFFE010001020100FD0101000000000000FF0301FF00FE0100060103FFFDFF0200010000FF0001FAF8FCFFFF02FF030200FF0600FF0101F90000020105FF0300FF01FE09000201000001010301000002FDFFFFFCFF0203FF0101FEFD000100000101FFFE00FF000200EDF602FEFB1603FEFE02FF0203F8F602FC07FDF9FD02FEFD0300F900FD03FC0313FFFB0EFA06FE01F7F1EDE7FB020009FDF0E603000802FFF700FEF60503FDFBFDFC02FBFFEE06FAFFED0400FF03FC020801040201FCF90CF90600FA02000402F90305F50404000BFC0100FA0108FDFD04FFECFD03F9010514F6D3000606F300F6F00001F400FA00000002FC0406FC0604FEFE01FE01FE010200050002010200020102FA00F40A000402FE05F603FCFE01FAFE0104010200FD00FF00FF00010002FF04FA000001EFFD010203FFF9FF03FE03000B0002FCFF01FF01FC0102FFFCFE0001FFFE00FF03040102FEFEFB0004FE020002000401FF0003FD010BF80300FA01000000FF06000000000600FC00030400000000FF01FE010001FFFF010708000101FBFEF9FC00010603FAFBFF00FF00000001FDFEFE0001010100FD01FFFE0001FFFDFF00FE0000FF00FF00FC00FD00FD00FF00FFFF0000FF020000000001FFFF0000000000FA0100000104010201000202020100FFFE0400FE01FCFF01FF04FF0001010100010100FF0101FD0000FEFA00FF000203FFFFFF00FE02FEFE01FD0000FCFFFB01FFFCFF00FDFCFEFFFF0101FF00020203000101FFFD02050100FE000102000101FEFF02FEFE000000FF010100FD0001FF03000200FE010000FFFF01010002FF0000FFFF000200FF010000020001FF01FF0000FDFD00FF0001010000000000F601000000FF010101FF00010100000000010002FF0000FFFF00FE000000000000FF0000FF0000FFFE00FF0000FF00FE000000FE0000010002FDF401FF000000FFFEFF000B01010000F7FE000000FF0007000000011A000A000000FE00FB00030000010000FF00080001FF000000FF00FF00000100010000010001010300FF010200FF0001FEFE01FE01FDFE00FFFF00FFFF08FF01040000FCF9FD00000001020405FF01F9FE090202000101FC020002FDFF01FDFE010103FF06020101FF03FE00FD03FEFD00020001FD03000601FFFBFFFC000103FF03FE01000403FF0200FD000106FE02FE0400FEFFFFFBFFFFFF0102FF01FEFF02FE070103FF00000001FFFFFF0100FE01FF00000001000001F000FE01020000FE01FF0000FE000001FEFFFA0100000100FD01FF0101FF01000101000000FD0001FC040100FF00010102FF01FF00000000FF01000100000100000100FFFFFF00000000FF01000101FF010101000100000000010000000001FF0200FF00000000FF0002FF0000000200FC02FF010000FF0202FFFDFEFE000103FF0101010001FF0000FE00FD000100040000FF05000100FEFF0400FF0500FFFE04FD0000FF050300000000FE02FF0102FFFF0000020102000101FFFE030000FF01000103FFFFFE0103010000FE01010100000001010100FFFFFFFE00FF00FFFD00FF0001FF02FDFF02FF02000000000000010300000000FF0100000100FDFEFF00FFFF0001FC000000FFFF00020000000001000100FF000100000100FFFFFF01000101FF0000FF0100FF010507FF00000000FF000000FD0100000006FEFF00FF0000FDFF020001FC00F9000000FFFF0000FEFF000000FF0000FA00000000010100000000010001000101000001000000FF0000FE000000000000FFFE00FFFF02000100FF000000010000FF00FF000002010001050000010001000100FF0101020005000000020100000000010001FF00010002FF0000FF0002000001020102000000FF00030101FEFFFFFF01FF010002FF010100FC00FFFF01FF00FFFE01FF01FF0000000000FF0000FFFF0000000100FE0007FD000000FF04FEFE00FFFF0100FF00000100F8FF02FF01FFFE02FDFF01000001010000FE00010002FFFFFC03FD000001FE0002FF0001FFFE03060401FFFE01FFFD0000F60000FFFF05FDFF00FEFDFFFB00020001F800F600FF00FEFFFFFF0000FFFF00000302F8FF020100000300FF0000FE000203000100FFFEFF02FFFFFF020101000000030202FF02FE010000010200000000FF0000FF000100FF010001FF02000102FE0001000101000100000100FA000101FFFF03FFFF0100FF00FEFF01030001FF00FF0000FF00000001FF30010101FE010000FF0200000101000002FFFF010101FFFF00000101FEFF02000001010101FFFF000003FB01FCF400FEF4FFFEFF00000001FF03000000FEFF00010101FF01010402030100FF010002FF0003010001FBFB02FE0101FFFD00FF0102FFFF0003000100020101FF00FF0600010401F50202FFFF0001FEFEFFFFFEFCFE00FAFE01FE00F0030101FC0101FE0005000002FEFF00FF00060101FCFF040100010001020001FFFB02FAFFFF010000000000000000FFFFFF00FF00FF0100FE000100FF0101FE00FE00FFFFFF000001000101000000FFFF0201FF0100FE010102000001FC01000000FF00000100FD01000000000001000001010100000300010200040100FE0000000000020000FF00F900FFFA00010002FF000001010100000010FFFF02FFFF0101030100010300FC0102000101FEFE0100FE03FF0202000012FD020002E7FE05FD000100F801FCFCFDFDFFFFFF0201FE04FCFFFAF000FE0502FF04FD0303030000FF05020902FC010101FD000100FEFFFA02FFFAFEFF00FCFDFFFFFFFB02FE02FE110002FBFEFFFB01F8FD020300080001010000FE03FCFA0004FF00FFFA0601FF00071004FD0001FDFA0400000000040200FD0103FE01FFFF0000FD01FF00FF010000020000FCFFFF02FE00FF0003FFFFFEFFFF00FFFF040101FEFFFE0001FFFF0005FB000001FFFFFD00FD000001010001FD00FFFEFFFBFF05FEFDFF01FEF90500FFFFFE00FDFFFD01FD0B0300FEFF04FC0000000202030201FFFE010000FE0501FEFEFF000000000501000000010000010001FD000000000000FFFF0001010001010001000100FF010200FF020000000200010001000102FF00000100010000000911000001000001020100F5FF000100110001020000FEF601FF0001F700F000000001010300FD010101FF0000FFF101FF000100010000FF00FF000000FF00FFFFFE0100000000FFFFFF000000010100000200FFFF00000000FEFF00FD0100000000FE010000000304FF000103000202FF030102FE000002FE01FF0000010100FE01FF0002FF03FF040201FF01020000FF0100FF01FEFE0003FF01010003FF010000010000FF000001FF0100010102010000010100FFFF0901010001FF00FE03FF00FAFC01FFFF08020001FF00FF02010201FCFFFD01FF00FFF9E9FF00020402FFF9FDFF05000100FC0000FB04FD020900000000020100FDFFFDFCFF00FF05FDFD08FC0000FF010302FFFFFBFD00000203FF00F9FEFEFFFAFD05FB070004FD000003FCFF020207FB000201FC0100FFFDFEFCFCFDF701FDFE01FFFA00FF0403060002000000FE000300000200010001010301FA01FE0201FE0101FFFF0100FF040302010001FF01FC050000FD0103FF0101000202FDFE11FFFE00020003000004040202020000FF000001FF01FFFF0103040102FFFFFF00FC02FFFFFFFD0004FE00020000080302FF00FEFE00FEFFFF02FEFBFEFF01010001010000FEFFFFFFFD01FFFDF2FF00F701FAFF010000F9FA0602070205F703FA0000FF07F70408FD0802030400FFFAFDF9FF01FF030100F700FC02F2FFFD02FCFF0303FDFFFAFDFF020603F80201FC02FEFFF1FAFBFFF901FD03FAFFF800F7F80AFDFCFBF4F9F207F9FFFE0004F0FEFED0FDFDFC00160001F500FF00FC01010002FFFFFF02FE02010205F0F8FF0001FDFBF500FF0001FDFFFD0001FAFAFC0201FD01FE00FEFEFE01FCFBFFFBFFFD0703FF0401010403F80709000300FEF7000600F90007FE0302FCFA0303FEFFFF0801020202FD020005FFFE03FD03FBFEFF050304DBFF01010503FF00FDFE01FF00F8000004FFFF00FBFA020604FBFE0402FE000001FA0400FE01FEFE010101021603F400F6FF03FC02040CFF07FD03FC030307FFFCFC010500EB050AFB0C01ED02FD020403F9F51A03FC0B0A07FEF90B01FB18FCFFFBFBFB0100FD08FB0902FEFD1407F9FC01FBFC03FFFFEFF9FF0D0400F10CF7FAF7FC00FB0AFA02040605EBFAF8050305FBF802FA020D17FFEE0106FA05FF02FAFFF8FA00F504F508FF0200F901FF010004000102FCFF01FEFBFDFD0101FF0105FC02FEFAF902030001FE060101FF02FFFFFBFFFE0105FB03FF03FB01FFFD01FF09FD02FF0006FD00010402FF0000FE00FC02FEFBFE04F8FFFF01FFF805040402FE02000300FF01FF03030401050202F800FE030204FFFE0104FFFD05000200FEFBFFFF0207FB00FF05EF00FE120007000001FC00EE0102ED0903E9020AFDFE06FEFFFF0304070300FD0102FC03EAFDFF02FC0700FEF90000040EFBFCF703F700FF0502FC0200F900EFFEFFFA0305FD05FC040301090301020100000707F60004FC01FFF8F9FF040909FE0F02FBF80107FEFDC80D04010401FDFD03FC03FD0003FEFF00FFFDFE0204FFFF0000010104000101FFFE0003FF0300010002FCFFFFFE00EFFF02FE010102FD01FF00FEF8FD00FD02010102FEFF00F5FCFF0301020200010201FFFF000200FFFEFF00FF01FF01FCFF01FDFD020101FCFF01FEFB000001FE02FF00FF0600010100FF0102F600FD0104FDFE00FF0101FE00FF00020100FDFF0002FFFEFF02FB040000FCFE0003FF0101FE00FFFA00020504020202FEFEFFFBFEFF00FA02FE07FDFEFE020002FFFF030206FF01F9FE000201FFFE03FFFC0104FEFF02FDFE0708FE01FAFEFEFE0002020201FBFF02FD0301FFFFFF01FE00FEFEF8FE01FE00FF01FAFFFDFCFC01FE050204FFFC01FE0B0205FEFAFEFC04FDFFFEFA08FDFF04FFFD000000FFFEFFFF0000FFFFFFFFFF00FE020100FFFF000000FC0102FE0000FFFE0200FF0101000100000103030003FFFF00FF0102FE010000FF0203FF000000FF000001FFFE040002FFFF0001FF0000FEFF0100FD0400FFFA0301FF00FF00020000010001FF0001FFFF0101FF0101FF0001FF0200FEFFFE01FF0002020102FD00FBFA0001FA0203FFFF000201FFFC010106030B0002FFFFFDFBFDF903FF020100FF0101000307FC000601FB0007FAFFFF02FB02FD01FF02FFF6010201FE050203F7FCFBFBFDFD02FC06FEFFFE02FF0304FBFF030100FD0500010200FB0102FCF70000FF0001FF000B010700FFFFF708050202FFFD0200FD0701FE020700FF0BFDFFFB01FFF70101FEEAFA180404FCFF00030204FC02FD18FFF800FAFCFCF2F10307ECF9FD04F703EA0605FD05F4FAFCFB06F601F306F4FCF1FEEFF30BFDFC0000F8FCFEFA0208F4FCF8FB09090FFC0710FAF9FC000001FD0006F8FFFCF8FD09FCFEF4090501FAF9F9FEFEFDF902020608F803FBF503FF030CFF0503090703FDF7010100FF01040301000000000001FF00FC01FE0001000102FD010102FFFF000300FF00FFFD01FE00FEFE01FF00FF0201000001010001FEFF0301FF000002060400FF01FFFFFD03FFFFF8FFFF000004FB00FDFF0100F700FBFF01FB01F6FF0000FD01000000010000FE00FFFFF702FFFFFFFD0001FFFE00FFFF01FFFF0200010502020000FFFDFD01FE0000FE0201FFFF02FE0300020000FB04010301FEFFFE01FF00FF00FD00FE0100FEFF01FF01000101FD00FDFF0001000404FF0100FE0600FFFFFDFD010100020300FF020000FF0000FE0200FEFFFF0005FE0100FFFF0100000100FFFD0000FF00020107FE030003FEFE01FCFE000100FCFE0100FDFFFEFF0001000601FFFEFF0200FFFE02FD00FB00FE0200FF01FFF5FEFF0800FC010101FE00020504FBF901FF020702FF00FEFFFFFFFC030205FC0103FEFF0102000102FDFFFF0400F7FF0100FE00010108020401FE03FE00FE00FB0304FFFFFE02FFFE0300FEFBFD01FD0006FFFFFDFF020103060102FA01000002FF07030204FEFD0200F60000F6FFFD01FFFF00020002000903FF0201000000FF00000000FD01FD0201FF01FE00FFFA00000201FEFE040201FEFF00FFFF0000000302FF01FE010301FD00020001FC01F5000101000100FE0001FF02050001FFFFFF00FFF7FF0102FFFF0001FF02FEFEFC000003FD0005FF01FE0004FF0005000101FE010002FBFFFF020400FB0200FB0101000100000101FC01030300FE0001FCFD00FB05F80204FFFFFE06FF01F402000103FEFD02FD010100FB020702FFFE01FFFD0100020203FFFF00FBFD0501F803FD01FFFDFF00FEFC010203FB00FFFCFFFEFEFE020401FF02FF01FE0204010203FEFD0105FE0002FDFCFE00FBFE04FE0103020000F80303FE0007FF0304F7FD00FB00FD010104FD0002F803FF0000FBFA0CFC06FEF9F904070001FB0006FB0200040507FC0308FD0902FA00EB08FCF7030305FFFC02FEF80103FDF8FB05F90004000003FB06FDFE03FE05150700F5FB0407FE0103FC00FFFD06FFFF00F80102FE0009FE02070A02FD080A05F5010603FE0602FC0106F6FEF801FE000100010000000000FF01FF010103010200FE0000FF00FFFEFFFFFF00010000FF010000FF00FF010002FF02FF01FFFF0101FF0000FFF9000100FFFE01FDFF0003FF00FB0100FF0101010000FE0102FC00FD00020102FEFF00FD010100FFFE00FE000100FF0702000201000000FF0102010000FEFFFF03020102010302FFFD0200020002FB000100000401FEFFFDFE01FFFF0100FE010200FE03020000FEFF00FEFC00FA00000101FF02FC010000FF01FF00FF01FF01FF000000FEFEFF0001020302FFFE0101FEFC0000FEFA02FDFEFF0002FE0202FFFD0001FE0000FFFE0001FE0003000101FD01FF04FF02FF000004030001FD00FEFF0301FEFDFF000104F40101F8FFFCFF00FF01060102FEFFFF000200FFFF01FFFF00FE02020002FFFF0101FFFE01FFFF01020206FFFF01FD01F9FF00FFFFFEFF02010001FF02FD0300FFFCFF0102FEF3FFFF02010001000100FEFF0402FD04FF040000F7FF0001FDFF0001010100FF01000003FF01FEFF03FF0105000102FFFFFFFF0002FA0102FE01FA0003F900FEFE0000FE0401FF03040601F9FF000200FFFD00030400FFFFFCFF00FD000202FB0000040200FF030401FE00030400FFFC0001FF02FFFF00FC000100FCFE00FC01F9FAFFFA04FE0102FFFDFC030401FF01FBFFFFFBF9040001FBFF02FFFDF90001FD0303FEFBFC0703FE060005FA0504FEFE0702FCFFFD01FF00010000FF00FD000000000100000001000101000100000001FF0000FF00000000000000000000FE0000FFFF010000000000FF000102000100FF00FF000000FFFC0101000100000000000300000000FD01000000000001000001000801020000000100000000000000FF00010004FF000101FF00000001000000010201000100FFF20300F4FF01FD01FF000201FCFCFE02FD04FCFE030103F9FF03F00002FFFCFE010003F9010A01FF0303F5FEE9FD00FE00FC00F0F5F502FF03FF01FFFD03FD000100FF02FD01F901F802FFFF02C601FF0002FFF7FBFFFD03F504FE02FCFE01FF00FF0501010100FDFEFF000404FCFC01FCFBFDFEFEFFFCFEFDFC00FFFE0100FD00010000FF010300000001F90002000802FE0101FF0000FF03FFFF0000000200FF0000FE00F601000007FD01FF01000201FBFC02FF000301FF01FF00FFFEFF02FE00000100FF010000010001FE01FF00010100FEFF040100FEFEFF01FE0500FEFE00000002FE01FAFF02FDFDFFFFFE00FFFFFFFF0101010002FE030000000003010000FE03000300000001FC000003FC0100000000000000000001030201040000010201FFFFFD0001FAFFFEFFFF0002000301FFFDFEFF00FE02FDFF01010101010001FEFF020200FD0002FE00FF04FFFEFCFF03010000FF00FFFFFFFF0200FE0100FF00FEFCFFFE01FFFF00FFFDFE0202FE00FF0101FFFD0000FF01FE00FFFE04F50000F7FF02FFFF00FFFF020201FF0002FEFF010001010200FE0000050301010000FEFD02020202FF0101FC00FFFE0002FF0001010200FEFF01FF0400FFFC03FE01FE010003F60300FCFD0001FFFAFE0503FE010102FDFF0001F9020000FE000001FF0202FEFEFFFEFEFA0204000200FD0200FE0300FC03FFFCFE00FFFC020201000201FF02FF0000FFFF0201FF000000000100000000000005FF010300010101FE0200000001000202000102FF00FF00FF0000000001FEFF0101FE0100FF00FFFF00020B02FFFFFF01010001FE0000FE00010101FB00020100FF0200FF010100FE02FE01FFFE0000000102000202FE01FF00010100FF0705000001FFFF00FE09FF03FFFEFFF9F902FDFA08000210FEFEFAF4FBFDFAFA040AFCFCE900FDF80701F703ED04000301FBFDEDFCF3FD011503E4020DFDFE03FAFDF6FA05F9FC0806E7F1F40CF50802ECF10A01F7FD0008FD0E030F0004F50003EF0004FEF5FCFEF3FC0C05FB06000F030BED01F6F705F706F3F00B04FBF9F70AE1D6000510F5FBFF000000FF01050001FEFE03000303FF02FE040000FDFF0201FF00000001FBFDFD00FC05FF01FE00030003F702FEFF0302FF00FF0103000101FE0103F8FF0001FEFFFEFD0001FFFE03FA01FFFE01FE04FF05FF02FFFFFB0103FD020104020202FE0000FF00FFFEFF03F3FF020100030000010101FE030100040AFEFF000000000201000100000400FF00FF0400FEFDFE010000030001FF00FF00FEFFFFFF0202000001FF0001FD000201FFFE020100010103000200010000020000000100FF00FFFF000100000200FFFE0000000001010002000301FF000002FF0001FF0100FEFF00FFFFFF0200010000FFFE0102FC010000FEFF00FF00010103FE01FE01010202F70000F800FF010100FF03FEFF02F30003020201FF0000FE020002FE00040200000101FF00FD000102FF01FF0103FF0003010001FE00FF0301FF0100FF02FFFF0002010000FFF700FD00FD0002FDFF00FE01080004FEFFFC0000F7FF000000020000FFF9FF0002FFFFFFFE050201000001020000030101030002000400FDFF02F30001F302FC01FF000101FEFC03010202000100030200FEFF010306FCFEFAFB00FB03FE0002FFFFFE04FE01FBFEFFFF01FFFF00FD02000301FF020202FE03FFFFFDFFFEFFFEF3020201FF01FE03FF00FF01FD04FDFDFFFD03FEEEFDFF02FEFE00FE0202000101FFFF02FDFE030001020203FE04010201030200020C0301FF07FEFA0CFBFD091600FE0004FF0000FB09FE0204FD0DFF00F908F806FE08000402000AF5F70903FAEEFEF7F9FCFFD90502FC01FBFA0606F205F701E30A0AFEFE0608010405070604F9011F0607D6F8FCFEFFFE00FF040506FCFA0404FC010008FD08FD05FDFF1801FCF8FF00000BFB01FE040805FCFE05040BFDFFFCFD060BFB0003FFFA0300FE0001000102010100FDFD020100FF020001FF010000FEFF02FD02FFFF0100F50700FFFC020101FE00020005FD00FEFF0702010200FF03FEFEFFFFFCFD0801010307FF01FE00FE03FFFD02FE01FF0301FE020000FF00FD01FFFE01010103FF0000010400FFFD00030105FE01FFFD000700FE02FF0102FAFF000000FE000C000402F8FF02FBFE020B020200FB02020001F9F8FC000102FDFD0BF0FF05F001FAFEFD01FD010901FD0701020105FB09FE0BF601FBFF000205F6F80107FBFE0201F805FBF8F0FF05010202FD01F2FE06FD08F9F5FB02FA0306FD04FB06FDF6F4FF04FFFEFDFE0301FE040405060104FB01FD0400010300F9FB05FC07F900FFF80101FF0001FF010001FD00FFFFFF000200FF0004FD0000FD0200FF0103FE010001FEFEFF0102FD03FC000101FF0101FD04FD030000000000FE000101FF00FF02FFFF0300FEFFFE00FFF90001FE01FE0003000500FD0000FE0201FF00FEFE010201FF00FE00FFFF0100FFFD00FF01FE02FD00FF01FF00FFFD0101FFFFFEFE0002FDFDFE00FF0000FF0202FFFE04FF0100000001FE01010000000000FF020001FFFF01FD00FFFE00FE0100FFFE0000FD02F700FAFFFFFD01010002FFFF02FEFEFEFE010002FF000002FFFE010002FE01FEFCFDFE040200FF0202FF00FEF9FFFE00FF0100020400FDFEFE00010001FFFE0200FFFFFC01000102000201010300000200FE04010101010200060203FD00FF010002FFFF01FFFD00020001FE0001FEFFFEF9FD00FEFE0301FCFE01FF010201000504FFFF0600FFFF01FD01FE00FF0303FD00010000010100FF00FFFF00FFFEFE020301000001FF0001FF0100030102FFFF00FEFD000101010102FF010100000202050100FFFFFF010203FF0105FE000201FD01FF01000000010202FF05FD05FFFF00FDFB03FE0201FDFB0503FC02F702FFFD0001FD02050101FDFFFF000002030501FA02FFFEFF01FEF60202FDFF0003FC0507FEFF0500FF0002FFFC02FCFF0102FCF8F9FEFFFF01FA00FE01020200FCF7FE0002FC0400FDFDFD0300FE050604030001FF0A0005010301FE020200FFFC0201FD00010000FE010205FFFF0203FE0204FF010001FD00FB01FE01FFFFFFFF00020400000300FF0400000300FE02FE0301FDFF020000FE050204FFFC03FCFEFEFE080201FE0102020201080003FFFB00FFFC00FEFFFDFF030201000201FEFF03FF0105000202000302FE03FFFF01FA00FEFF000401FDFFFD04FF010400010101FF0B000200FF0201FE000100FEFF00010100FD0001FF000002FF0300FF04FB00F8FD0004FDFFFFFBFCFEFE0105040100010800FF0001FF020000FEFDFF040303FF0100FEFF00FAFF01FF00010601FD0000000301FCFFFE060100FF0102FF0202010000000000FEFE040002FF00070001FFFF0103FEFFFE020001FB02FC01FFFDFE03E3FF00FDFC00FCFC01FEFBF7FC0004F6F40501F8FBF1F80503F9FEFCF9F4F6060AF8FC0100FD0102F90105FAF80203FF0704FA00FC0707FEFF02FAFF01FA08FEF9FCFE0AF9FA00F8FAFBFE0D0301FD04FFFD01FEF80100FFF8FDF802FF0302FFF901F8FEFE0002FCFC0C050BFDFBFBFDF6000203FE0A00FD01050000FE0300FF000100FE02FFFFFFFFFF0002FF01FEFF00FF010201FEFCFF01FDFF00FE0304FBFFFF00F9FAFD02000502FB000100FE0000050000FEFF02FBFEFF01FAF8FC020605FF01FF01FF030100000102FEFFFFFF02FDFE010402020105010001000100FF01FF00FFFAFE01FAFFFD01FE000303FEFF0BFCFD01FEFFFF000401000000FEFE0000010200FD000501FE02030001FF0200FFFF0007FC010200FE00FE0001020300030202FF0005FF01FFFE02FD00FEFBFF010002FEFD0403FFFE010301FDFD00FEFFFF01FE0202FEFE00FF00FF02FCFF0601030001020000FF0200FF01FD000100FFFF010005FCFF0701FD010100FF00FEFE0200000400FD0000010000FF00FF00000000FF010104FEFD020101FE0100FF01FE0007FD01FEFF02000002FF00FFFFFF02FC040106FFFFFDFFFA020001FCFF00FF030101FFFFFEFFFEFFFF02FD020001FFFFFC0100FFFE020300FDFCFF01FEFF02FF010202FFFFFF0002010300FFFCFE00FF0200FFFEFFFE00FEFB00FE00FE01FF03020201FE020200000100FEFEFF00000002FF01010202FFFF00FFFFFFFD02000AFF01FF01010100FC0101010200FE00010101FFFF0100000109000201020000FE0101FF00FE0101FF02020201FFFF0100020002FF02010000020001F90101FF0202000000000000FFFDFD0000FF0200000400000301060202FD020000020A02010000FF0200FCF802FAF803FFFFFEFD01070E0606FE0503FB001100FDFA02EA010902020204FAFCFFFEFEFD01FD000102FF00FD01FDEF0301FFFFFF01070001FBFB00FBFF040505FEF7FD06FAF80402FC00F9FA0109FC01FD02FD04FE01F6FE01FA041203FEF6FAFAFFFEF903FEF9F704F904FEFDFC0001FF02FBFFFD03FCFD03030201FAFE02FE00FE01F9F9010000FEFF02FB0201FFFE010000FE00020400FE01FF00010401000100000302FFFDFD000202FE010000FF00FEFDFEFF02FF0103010200FDFC000301000000FE020202020003FFFDFD02FF0209FE01FE03FE00FFFFFF00FE02FEFF02FF01010001FE0000FD000400FFFE0001FD0002030101FB01FCFDFD03FE03020001010004000001FF0301FFFFFD020200FF00FE00020200FD00FF0000FF0100FF030200FD0001FF04FF000101000002FF0100FE010101FF010000010000FF0100FF01010100FFFF00000000FF010003FFFF000102FF00000001FF01010001010100FFFFFFFC00060003FE010101FD01FFFF01FE0001FFFC030000030000FF0100FBFF00000000000001FFFE040000FF030101FFFF0300FFFFFE0100000601FF0401FC01030001FF01FC00FD0001FEFC00000002FF020505FEFF02FFFDFFFE01FFFF01FD00010202FF01000300FF01FF02FD0201FE000004000000020000FB00010000FE00FFFF0202FF02FC00FF0400FFFE00FFFFFE02FC01030000000204EC0000F0FF0B0102FFFFFEFDFF0109000306FF00010300FDFF010202FD0407FE01FAFDFD000200FE09FE0201FBFFF9000303FE01FE06FE0200050104FF08FF07020103FE00FCEC0401FEFAFFFFFF01FDFF01FEFE0202FA0006FDF2FEFEFEFD0200FE00030301FB0001FF0506FF03FD0003FAFD00FE00FDF9030A030001FD0000FE00FC02FDFD01000000FFFF0101FF02FC05000001FF000600020000FF020200FF0300FFFF0300FF03FFFE0001000300FE01FC01FE01FFFF0202FF01FFFEFF0201FE000101FF000303FE0201FFFF00FB00010400FDFFFE01FE03FF03FF00FE000001FF010000FFFB0100FE0100FFFEFF01FF00010001FCFFFFFE0200000202000000FFFEFC05FF0102000100FDFF00FF01FF04FF04FF01FFFFFFFE01030405010002020202FF000001FFFF01FE00000000FFFE0104FFFE000200FF00FFFF0001000000FD00FD0001FF0000FF00FF020101010100000000FF0102FE01000101FF01010101000000FF01010104FF00030100000000010100FE0101FFFF0000FF07F3FBF6F5FAFD120B02DFF3F90D020403F7ED03FF07E0FC0001F1F603140CF702FA0B00FDF205FDFEFDFD02FC07FEFEFC06F50803030103081904F6080FFDFB07070A01FFEE08F7FA03EFEEF009F3FD000C0500060708F6FA0409040F03FBF80000FB07E91004FAFD03FEFAFDF5FE05080C0012F205FDF801FEFEDDFBF5FB0B00000000000300000000FFFF00000000FF0100FF000000FFFE000000000000000000FE00000101000101000001FF000000000000FF010000FF00FF0001000307000000000001010001FE000000000600FF00010000FEFF0000FFFE01FC000000010000000000000001000001FDFF000000000000010000000000000000000001FB0001F904FB03FDFF020405FFF1FB010000FFFCFF0701FBFA01FB02F7F4FFF9F7FF0AFE0B070401050015F21102FE0401F7FF1001FFF7FF080301FE03FF00FCFD06F507060E09FD0501FC02010C0AF702FB03050204EDFEFD0802FE040302FB0000FD040BFC080BF8FEFF08FE06F000FEFEFB01FDFDFC01FDFFF8F801FF0604FCFF0001FFFEFEFF00000000FF03FF000003FF0000FE0000010101FEFC03FF0002000201FF01000001FD00020004FFFE00FF00000001020002000401FDFEFE0200FF02FEFFFDFC01010001FF01FFFE0102FDFFFC00FF00010005000200000102FFFF01FF000201FE010001FEFEFB00FD06FE0102FD0101010100020001FF040001000001FFFBFF00000000FFFFFFFFFF020001FF0000FE010000FF0000000001FF0001000100000001FF00FF000100FF00000000FE00FF000000FF0000FEFEFA0000000000010000000500000000FB0100FE000000040100FF000C000200FF0000FFFFFF010100010101000005FF0000FFFFFFFFFF000001FF00000000010000F5E5FF01E2FF03000100020003FD00F2FF00000001030300030201FDFF00F7FE0400FFF7FEEFFFFFFFFFFF02F1FD02FF020300FE020000FF0901FEFF0203030202FFFEF702FC02E601040303FFFD0301FF0400FD000204FE02FFFFEEFC02FFF601FF0101FCFE01030000FEF900FC0103FE03FFFF00000102FDFE0201FBFE0401FFFE0001FDFE04FE01FB000203FFFEFF04FE031A0118FBFE00FE01F808FB0405FFFF0102FA010900FFF6FFF0FD05FF0201F7FC020104FCFE0100FD13E8FF00FE0001FCFAFDFC07FCFAFE01FDFCFCFD00FD010102030200FDFEFC03FF040000FD03FE02FD01FFFEFC00F502FE06FEFF0004F704F8FFFE0202FE0200FCFE0102FE00EC0000ED0200000001FF00000200050101FD0001FFFEFEFE00FBFF000303FFFFFF0005000001010104FEFEFDFFFF02FF00FF0203030101FF00FF01FF000101FF00F60003FF01E902FF00FFFF00FEFF000000FB00030600FF0100EFFF0000FA0400FD00FEFF02F8FEFDFFFCFF01FDFF0101000100FE0203FF0301FE0108000105F7FAFDF8FE01FD0000040000F901F906000F0203FFFB0202FDFFFEF601FEFE08FFF8030200FF0004FF03FF0101010100FEFD00FA00FEFFF5FD01010104FD02F80100FCF80104FA0603FC0507FF040AF800050206FC01FCFFF402F10402F6FCFB0001FDFF01FF010304FEFC02F8FC09FD02FBFEFF04FDFCFD0503000204FB01000000F9FFFF02FF0000FF00FF00050100FFFDFF00FFFF08030304FE00FFFEFF01FF050201F902FF0000FC03FEFD010001FDFF01FEFEFF0304030301FEFEFF000302FB040100FE00FD02FE010002FF0000FE01000203FC00FF020101FE0101FF0001FE01010001FEFDFF0001FE03FE02FF000101FDFE010102FD00FF0100FC00FD000000010200000000000300FF000101000000000000010000FEFE01000100000000FF00F9020000000000FF00000100000000FE01FE00FFFF01000000FAFF0000000400010002FEFD000100F50100810000000000020100010000FF00FF0000000000FF000001FF0000FC0100000001010100010200000200000000000100FAF30101F3010200FF0000000101FE000003FEFD01FF02020100060302010002020102FD00F100FF01010000F6FE01010002FF00FDFF010104000000FE02000000000FFB010303F1FD01010000FBFEFE01FFFF020102FC00030201F7FE0001FB0100FE02FF00010201FFFE000100FE01FFFEFB000005FF01FFFEFFFF02F80102FD0000FD000201FF01000100FFFFFFFF0100FFFF020001010200F80002FFFF02FF0002FF00F9FEFF0002FD00FC0000000101FFFD000100FF030300010002020100FF0301FEFB0100020100FF0103010101FFFF0000FF0B000202FFFF01FF01FF0101FF01000000FF03010100FFFF0002FDFDFE0100FFFF0100FEFF01FFFEFF0101FF000301FE0100000000FEFFFE02FF03FE0100FFFE00040000FFFE0000FF000101FE0001FAFA01FFFC010200000100FE02FEFFFDFF16FFFFFE0001FD0101000101010201FFFC000001000000FFFF0000FD01FFE3FF000003FD000002FF0000FFFFFFFFFD000000FEFF0201010700FF01000200000001FEFE02010001FE04FEFF0200000004FF010000FF04FB00FD0400FFFDFF01FFFEFFFEFEFE0203FDFDFFFD000102000201FF020100050002FE0103FCFE0104000200FE00FE02FEFDFE01FD02FDFF0000FF0101020002FF0400020106FF030000030300FEFF00FFFD01FEFB0001000403FFFE000101FFFDFE0301020302FF0100000202FE020101FE00010100010100FC00FFFEFF00FE02FFFFFD00010401020203FF010000FDFDFEFF030101FD00FF04FDFFFFFFFDFF000000FE00FDFDFF000101FEFFFF01FF0302FFFD00FEFF05FCFC00030301FFFE0202FC0200FE02FC00FD0202FE0700FC030000000301FE01FE0101FF02FFFDFDFEFAFF0001FE000102FFFE0001FFFE0502FE04FFFF000000FEFDFC00019D02FCFF0200FEFF0100040008FF030000050002FF00FC0000FFFFFEF903FF01FB0002FDFFFF00000100FF03000001FCFFFE01FDFFFD00000201020200FF00FD020001FE0101010103FFFE0000FC0000000001FF00000001010200FF00FD0201FE0003FF00FF01FEFE01FFFF0100000000000002020000FE01000300FC0500FE00FFFC020302FB0AFE02FFFDFF02FC000105000203040002FF020100FEFB01FDFEFEFE00FF0101FA07FCFD0201F902FFFFFF01FF00FDFF04FFFCFFFE0105FF0202FF010100FCFD00FC00F8FBFFFD01FEFE01040400FEFFFC02FCFFFF020006FFFEFE010002FF000200F903FF000001FE0100FFFE0400FF000100FB000201FFFF00010201FD0100FF01030201FEFF03FE01FEFFFD01FE01FE000102FF01FD0000FE010203000101000003FD0201000000FFFF02FEFFFF0002FFFEFE01FD0100000000010101FF0101FE030001FD03FFFFFF0001FF00FF0100FF00FFFF01020200FDFF00FFFD0100FF0001FEFF000001000300000001FF0201010000010102FF0000FE02FF03FFFFFFFE000001FFFCFCFB0000FFFF02FFFAFF000104FC00FD00FFFFFF00FEFFFE0100FEFFFD03FD000000FD00FF00FB0200000003FEFF0000FFFFFBFDFFFD0102FE0102FFFD00FCFE010101FE00FEFF01FD00FE01FFFF0101FFFC000001FB00FF00020002FFFFFE01010200FEFFFD01FDFFF90000FCFE0201FFFF000101010101010001FF00010002010002FF010200FFFE030002FF00FCFF0001FFFD01F8FFFEFFFE0000FDFFFD0100020000FF000104FF010002FDFF00FD00FFFE00FF00EF01020000FFFEFF0302FEFDFF00FFFF000002FFFE01010A0003050000FEFF01FFFE01FDFE0201FF010001FDFE00FFFB010000FC0300FAFFFD030007000000FE08FDFDFEFDF902010000FDFC0100FCFA02F8FF01FE040002FB040000FD0101FB02FD0100FDFC0302FC040104FD02FF0105FFFF000404F903FFFE02FD02FF00FEF9FD00FEFC01FD01FF00FFFA01FF0201FF00FF00010201030200FA03000205FD01010106FFFD05F90000FEFBFF0105FA000200FDFFFFF0FD010110F6FE06FA0004FE06FEFDFF030100FE00FD0002FE0506FB0406E700000A00FAE708FE0103FB0103FC0003010002F7FBF7FEFFF902FA00FD03FE0709FD0005FEFCF9FEF7FD03FF01F800FDF107020003FDFF02FEFF02FD01F806FD020DFB0213FFFB00FF0002FDF801070D04FDFEF804FFFF00FF0CFF0700FF"> : tensor<128x128xi8>}> : () -> tensor<128x128xi8> + %41 = tosa.const_shape {values = dense<[-1, 128]> : tensor<2xindex>} : () -> !tosa.shape<2> + %42 = "tosa.const"() <{values = dense<39> : tensor<1xi8>}> : () -> tensor<1xi8> + %43 = "tosa.const"() <{values = dense<1638001719> : tensor<1xi32>}> : () -> tensor<1xi32> + %44 = "tosa.const"() <{values = dense<-128> : tensor<1xi8>}> : () -> tensor<1xi8> + %45 = "tosa.const"() <{values = dense<0> : tensor<1xi32>}> : () -> tensor<1xi32> + %46 = "tosa.const"() <{values = dense<0> : tensor<1xi8>}> : () -> tensor<1xi8> + %47 = "tosa.const"() <{values = dense<89> : tensor<1xi8>}> : () -> tensor<1xi8> + %48 = tosa.const_shape {values = dense<[128, 1, 1, 640]> : tensor<4xindex>} : () -> !tosa.shape<4> + %49 = "tosa.const"() <{values = dense<"0x0A0DF40704FEF3ECFC1204FE01FBF8FFFD09FEFEFE01FDFBF70100FDF4EFF0F2F1FDFFFBFDF8FBFA01FC0700F90306030201030204FFFC0101070802FC040CFC010802020203060801030B0904050B0704FF030503FA000603FA0E0EFCFAFD00FAFB00FAFCF9FBF7FD02FA03FDF5FEFD05FE08FE1403FE04080606000405FD02090BF40807FDF4EDFF1204FDFFF8F6FEFB0BFDFE02FFFAF5F501FE00F7EEF3F1F2FCFAFCFBF5F8F9FEFD08FEF4FB0403010201FFFE00FAFB01090700FA000AF90005000201FF080401040905020309090702FEFE00FCFD0501FA0C0BFAFAFBFEF7FDFEF9F9F8F9F6FAFAF905FAF4FBFD00FE06000C00FCFE05FFFEFC0301FBFE090DFA0A07FCF1F0FC1206FF00F6F7F9FA06FDFDF900FDF5F902FF00F6EDEEF2F5FBFDFEFBF6F8F7FEFF0600F7FE0300010005FD0000FBFD04070100FA0207F9FC0603010102050603060B090301080B0402060503FE0000FC010B0BFCFBFDFDF503FDF8FBF9FBF9FDFEF504FBF8FCFEFFFE0BFD0C04FEFA0400FEFC00FEFBFD080DFF0B05FBF5F0FF14090202F5F3FD0004FCFBFAFCFDF8FC01FF03FAF0F4F2F5FFFDFFFDFAF8F700000600F701090409030500FF07FB020808090600050BFB04090203FC030C0A05030B0B07070A0A0503080608060505FF040D0FFF020601FB010301FCFFFCFD0500FD03FAFC020406FF0F020E02FDFD020302030502FF050A12FB1008FBF5EF001307FFFEF6F4FCFD01F6F7FC00FEFBF3010102F6F0F2F3F6FDF8FAFCF7F5F5FD0205F8F4FB02FCFFFFFFFDFB00FAFC020500FFFA000AF6FC07FF02F901060806FD0C0405070A0D0405090405FC0105FF01110E000003FEFA010102FBFFF9FC0108FF05FBF7FD01FFFD0E011102FAFD030303050802FD0D2805F301081628EB1000EA0A0A0714120A030BF9FD05E90F0E1A05010FF216F7EB1012F903F6E3EB0C07FEE116E904FA13F607F615FDF2FA081E07140800EC12F816FAF3FCFAFC05010607FBF61810FB1401FFDEF4FFEC05F61A2AF3FC321201E800E40AFFFCDBDDE61DDDE5ECF30708051342D017CFDE24131BFDEE3107FC0324F3F707021728E714FAE601FDFD08160A070EF5F70DF4050107FC0B05F30CF5EB130BFFF7E4E9EF0215EBDF0EF20CFF07F208FE0D00EFF9081AF811FB03EE0DF90EF2E4F5ECF90A04F904FAF21710FA10FD0BDEF1F3E902F61029F0F81E15F4DE05E109F606DCEAF51EE2E9E6F500F4070B42CB0FD4DA290E12F9F32F0CF10C2D02F803F40C1EE915FCE70908020F0B0FFC08F6F20DF5090C0FF90716F20FFAE11800FCFDF3F2E20A18EAE615F40FFF11FDFC010300F4FD101DFA10FD07EC06F312F8EEF3FEFC06FEFCFEF7F31E04F610FF09DFF7F5EAFDF4132BFAF72915FCE802ED100005D7E0EB19F1F1F1F1100A0F0943D019CDD82B1108F8F62B0EFEFE2CFDFF03F30421ED14FBE4FB08FE1011080215FBF00FF00D0D09FD0F0EF310F6E70E0804FEEAE4F2070CF0EB18F50AFF0F0608FF0308FDFD0921010D07FFEC12FB19F1F2F4F7021405050908061816F80F0005E6F2F6EDF4FB152200072E1603E70BEA16FA0ADDDFEE22E0EEEAF10A0A07143AD411C5DB1E0E0AF0F1300EF8FE23FAF807FB1626E40B05F40505FD0F170AF712E9F50FE802060BFE0C08F00B03DC110AFCF8E8EAEA090BEADE16E4FAFE13F504F60B08EEF40D1AFA140103E709FB1BF1ECF7F4FE07080008F5F11612F91701F9E9F7F4FDFEFB112AF4012DFBEEE400DE0BF20AD6DBF215DEE2DBDAFB04060A30CD0EC8D61F0E0AF6F72D03ECFEE911EF0B07F8FD093F171412330FFD3E410725150FE1D4EBF6EB2214F3F81D211AFFFCF40CFE031207DCE3D7BED0C4BEAB9BAAD8E80AF5F3FB0D0B0CFBF60A001316110520FE19090EFFE80E0711140607DEF204270FF1FA06E6F4FBFDF503E8FAF5EA0CF1D4F0F8F4EFE804F5F60803F8F9EE04042207160706FAF60100ED110605E5E5E8E8093444261B1933351B31461B1A110AF8D0F207FB0C1917140A3A2F2A3203000E2723FDD2E2EECECED9CDC9B4C0DA060A0804E8223413FE0A170105101D2C1BF41E1A090DF6142A180E16F4DFF9F10807EC01FCF10211FBEBFEEBECF3FBF9E4F1FC031F04050F15F3F3F308070F230C0B13E40507FADAEB01F6FDDA14DEDDE3FA082945110D11211A111A111E091707E8C0E8F6F61017FDF5252D190A1812FD0D15F00FDCE8FAE3DBBDB7AF83B7CBEDF7D4FAFBF703E8F10CFCF0F6200300FFF80902F5F4EDFF0CF10127DCD5F601F1F500E4E8DADCE6F0F601F6D4FD0D16F1E0FCFDEBE2F90D2311FCFAF00E0304040EFEEFF5F90204FBFAEFF7FB0AE9E7E0EFFC0A27FEE60C3D1FF53222030C1212F4DFE700F11305010C2E42362C19F4FD0E1605EDFBF0DDCAE6BAC5AE8DA6D7E6FCF203FA1813FAFAFAF10C0703190DFBDFF0FAFF07ED020FEE1906E9CCDAE308EBF5F710FFEDF8F5FC0BF9EC010E02F4FCFBDB01F7FB0612FE0D1203F9F60A010A10F902F900FCFD00F3FAFF02D7E4E7EEF70C21EEFE142A3211171901010104F8E0ECFAF72B17F302232F302514151104090D02EDEDEBEEDAC4BBB5B49EC615F806090E1C2A33220D0F11132B29292113241C22FBFC0510161E0EF6E3F100160DFC09F7F7FE1A0DFB0100FDF81F07FCFEFCF6FF1E15EA06FBF41517EB02021B162AEBE7F501EB07F2DA07F4FF111BFBE00F060AF9E8000E09F80D1104010603FB01FDF8090A00040CFDFA04FF0B070506060109DEE90BFDF8010AFDF8F8FB0103030602040E0AFF05FD06060D070B09FC060204FEF8F8F601050207FEFE07070402040100F9F1FF02FB080802040906FDEDF40208000D0F0B0203080206FE01090C06FD0204FDFCEEEDFDEE011111F3D006040CFBEBF602FDEF0C0C01FE080B02F5F8EF0905FD0507FCFFFF040503030001FF04DBE704FAEBFD00F8F9F6F4F5FE01FEFFFFF9030200FAFFFB03FBF8FBF5070402FBF8F7F7FDFEF6FDF80007FE04FE0000FEF6F7FC0900FB01FC06060D02F2000302090E0E0AF9000A070301000208F6FD04F6F9F8EDEF03ED070D16F6D901FC0F06F7FE06FAF5050403FA02FC02F9F4EEFE0402FF06FA05060603080A00020405E5F204FBF5F2FBF8F2FBF3F4FEFD090005FF03FB030003FA0A03FEFEF907FCFBFDF5F4FFFAF4FEF9FDFF0502FFFEFCFCFDFD02030AFE01050702010604FCF2F80307060307FD0202030600FA060EFD00FEF400FDEFED06EC00070EF8D902000401E8F70B01FD150DFDFF08FEFFF2F3F6FE03020200F0FF08080A0C04FD04070DE8EF02F6F3F904F9FAF6FAFD0806020504020507040B0A09090404FFFB060100FCF6FFF8FBFDFBFBF6F900090AFBF7FBFFFB0407050807050405050E09F3FCFD090805030501020505030000091102FFF5FFFAF3ECF1F9F0080B12FBCDFF0204FFE3F405F6EC060BFBFA04FE02FBF6EC0202FAFF06F7FA0104000406FE010002DCE60000F8F8F7F6F8F8FAFEF7FF0E06FAFFFFF5FE01030106FE0C01F1FDFFFEF9F1F9F8FA000108FDFB080206FF03FBFBFEFB0203040300010B030602F5FBFB07020A03FDFE0201FFFE03000304FFF4F001F9FCEAE9052705F0F8FC1923FA1701EC09060C0F05040406FAF60DF0111009F50E12031107E80B08FE00EFE9E5FE04EEF316EFFFFC09EE00F2F5F0FEEE040E020F02FFF000F71B0B0201FA020E080204FC001010F50F01FDF7F1F5E2EFF00719F8FB2805F1E9F6E7E9E905F9F5F51CE3E8EEF908F7E9F51308351F1F16EB07EBD20D01F60C21FAF504FD161FF0110BF90DFE020F04FE0716F7FA11EC100D01F6100B031C05ED06001003F4F3EEFD01EC011F020CF207FD01F7F0F8F0FA000EFE0C0704EE06FD14060202020A0F130A0C04F7160B00100002EDF2F6F6F9F7070FF3FB1B0AFDF1FCEAEEEF10FDFFF61AE7E2EDFA01F4F3011709301F1318EDFDE4DD08FEF70320FAEC00001917EF1502F1160C030602070411F9F50DE90407FCFC060901150BEA10FF03FBEBF0EC010AEC011FF500FC08F8FBFAFCF4FAFAFD0AFC140502EF10FA160809000602090F08070801170FFB15FF06F6F8FBF6F3EF0815F9F61E0EFCEBFFE2EFE91002F6FA26EEE4F1F907F6F7FB10072B1D161DF6FEE3D10607F7FB26F9F0F9001518EA0E02F4060AFE04060A070FF2F60CE8050100F10D08011006F004FDF8FAEDEAECF9FEECF217EFFEF301F6FFF2ECEFFBEF050CF603FEF6EE05F816FDF9F5FF01110B0305FF0A1711FE0D0602F2F3FCE9F8FB0A13FBF71B09F9E502E2ECE70FFEFBF41DE9E5F0FB00F7EFFB170939291C1CF4F7DCD10F02F6FC27F8F1FE050F14EF0BFDF20A10030300FFFB08F1F905F10C01FEFA050D010B03E005FAFDF9F2F1E9FAFEEDEF1CF50EFD06FF0AF6F8FA00F50514F70BFFFEF205FB1FFFF4F70401020702090B061307FD11FC06F5FA00F3F6EC061EFAFD260404F003EEFBF61200FDFA21ECE7F6FF0E0DFA0214053420161BFA03DED30FFEF3FE0301FF020403FF00FFFF02FF010301FDFF00FFFEFEFFFDFCFEFE0101FF0000010200FF00FF000101FFFF00FEFF0000FEFBFDFFFDFFFDFEFEFEFE00FFFE0102FFFF000000FF0000FEFEFBFBFE00FCFCFEFF00FFFF00FF01FF00FF010200FF00FF010000FDFEFE000000FFFE01000000FEFEFFFDFE00FEFCFFFDFE0000FFFDFCFF03010001030200FFFFFE0000030403FF0000FFFEFFFEFEFCFFFEFF01000001020202FFFDFF01000100000101FF0100FEFDFCFDFDFEFEFEFFFCFDFEFEFE020300FF00FE0100010100FDFDFBFC00FDFEFFFEFF00FEFEFFFDFE00FE0102FDFEFF000100FFFBFDFE010001FEFFFFFFFEFDFDFEFEFD0001FDFDFDFDFEFFFFFDFCFEFE02010001030100FFFFFF02FF000201000101FFFFFF00FDFDFEFD00010000030200FF00FFFF0100FF01000100000202FFFFFDFFFDFDFEFEFEFDFE00FFFF020300FE00FF0000000100FFFFFCFC00FDFE00000000FF00FFFFFD00FE0101FDFFFF000000FFFBFCFEFE00FFFEFFFFFFFFFDFDFE01FEFE01FDFDFEFEFF00FFFFFDFDFF0302FE000201FFFEFF00FFFF0103FF00010000FEFDFEFFFFFFFFFFFF010101010100FFFF00000000FF0001FFFF0201FDFCFDFEFEFEFEFEFEFDFDFEFFFE020200FE00FFFFFEFFFF00FFFCFBFD00FCFDFF00FDFEFF00FDFFFFFFFF0201FCFFFFFFFFFF00FBFE00FFFF00FFFF00FFFEFF000100FEFE00FCFEFFFF0001FF00FDFEFE0301FCFF0100FDFCFEFFFFFE000301FE0102FFFFFFFEFEFDFEFDFF01FEFF0101000000FDFF00FFFFFF0101FEFE0001FFFDFCFCFEFFFFFEFDFEFDFEFFFF0102FFFD010000FEFF00FFFEFDFCFD00FFFEFDFEFEFDFEFFFEFDFFFEFD0101FCFEFEFFFDFEFEFAFBFE0100FFFFFFFEFDFEFEFFFFFF000102FBFEFFFF00030001FFFF01FD00FFFDFEFBFCFAFBFCFF000000000001FF0104050300FFFCFDFF0002020103050101FEFCFBFC00010501FFFEFDFCFEFCFCFD01010101010002020000FBFBFE0100FEFEFEFDFFFE0001FF01FFFEFE00FFFEFDFE0200FE0000FDFAFBFEFEFE02010100FFFFFEFEFEFBFB0000FF0300010402FF00FD02030202FE01030100FE01FD0101FFFCFAFEFBFBFE00000202010000FEFE040503FFFFFEFD000002030303030301FDFDFCFCFFFF0303FEFDFEFDFEFFFDFBFCFEFF0000FF010201FFFBFBFF00FEFEFFFFFDFEFCFFFEFC01FFFEFDFFFFFCFBFD00FFFD00FEFDFAFBFDFDFDFF00FF00FDFCFCFAFBFCFCFF000001030204020102FDFF030001FEFE01FEFF0004FD040401FDFDFEFCFBFE01020101020000FFFE0204030000FEFE000201020306030101FFFFFCFCFE0103020101FFFF00FFFDFFFF000202020102010000FEFF010100FE00000000FE0002FF0100FDFE01FFFEFDFFFFFEFDFFFFFCFBFAFBFAFBFEFCFEFEFBFDFBFBFAFAF9FEFF0202010305030001FDFE02FF03FFFF0200FEFE01FE040603FEFCFEFEFCFF00020302020102FF000405020201FF000202040505080705030000FFFE0002050303030203030002020403050505050403040401020605030304030101000103020300FF00010100FDFF00FF000001FEFCF9FBFDFEFF00FDFFFCFCFDFAF9F9F9FF000202030406040002FDFF0301030002030100FF02FD03040200FCFEFFFFFE010100030200010100030505040100030202030505090604050200FFFF02040506030302020301030204040404060603040505030207050204040201010103010301FFFFFF01FFFFFC00FFFEFEFF00FEFBFAFBFDFB00FEFBFEFBFEFBFCFBF8FBFEFD0001010206040001FF00030305010001020202020EF7F8F4F2FCFC231E060F0F201900FE01EEEFE0ECDCE7F50108040508FBF6EFF4FE0404F204011126765F0606FA090607FD0803FF030D0B03090CFA08FDFF0E0DFD01FDF902FA06F7FE1001060F02F8F3FE0703FFFB0C09FBFFFD020A0302050101070BFEFA040804FCFC00020CFE03020C07F7F4F8FB0C080B040306070F0B0C00F9F1F7030033230D130C1F180A0E13EFEEE2DEDCEAF90F07FE06F9E9F1F3F9FB03FB0A02F6FB2379640903F1F80509010500FB0907FA01FD020B06FFF4F4FE00F7FAFD06FA06F6F8FBFAF9FB03FFF1FB020305FA0A0806FEFD010BFF0507FC0B0608030606FD02FD020805040F03FBFEFDFFFA0B0403FF010208030201090905FCF3FDFE073A290C1E1616170A080BEEEAE5DFDAE9F10D0603FDF900F7F3F4F9FDFEF701F8FF1E7F5D0DFFF3FF0D060C07F3FF0307FBFA070700FA00F7F4FDFC01FAFD02030306FCF603060705FCF8FFF8FAFD0A06060505FDFF0B00F601FE01000E040604050BFC02080B110001FF020700F7090908060BFBFBFF0002FA0DFBF6F60201FB301B051A13201C100505F5EFFAE6E2F5F60A0CFDFEFFF4F1EFEAFBFB05F8F7FE172868520802F8F9100D160B04FB0306FD0005FBFBFD01F8F601FE04020602FB030A06FBFFF6FAFCFCF0FF06FA06030700FAFFFC07FEFD07F7FC040E02FE04FF0B06F9FC04010210F90103FDF9F800F5FEFE030BF9F6030AFB0A00FDFFF80E0120210816130F11031215FEFEF6E7DBECFD170FF2030AEBF0F205FC0307FAFDF70F2B7F630D0002F8030100030709FFFEFA030901F6FCFCEEF5FC02FF02040D0D0B0504FAEE0705FBF7F2000305020205FF06FDF903FCF6FF000B060401F900020504080503FAFE03FD01F4FCFBF60AF7FEFA050008090FFBFEFBFE02F7001604F9F4FD0C0909110C06FA02040714120A080D0903010CFFFFF9F2FCFE0009100F0500F7F5FF0506F9FFFD06F8F4FF01FE02F9FBF705FEF300F7FBFCF2F8FD00F9F8F80508111BFFF9F4F5F2EFF7FB0802010004140F0B090DFC010304F4F70708FE0C0506FE05FAFC0806060700F5F2FCF4F804FDFFFDF8FEFB00FEF7F8010E01F8F6F4FD1304110AFFF801040D1B120E10110F06050F03FAF4EFEDFEFAF5090B070503F7F90705FEF7F806FC00FF010100F3FBF8FCF6E9F404020502F2FB08FB04010A060613FCF6FBF9F1EAF1F2FF0A0CF9FE120605061101FE02FDF9FD0305FCFA0002FB0702FB080102FEFBF8F5FFFCF8F9FCFF0200F7F8FBFEFAF7010DFCE5EFF9080D0F070904FAF7FB0813131B16190D0C020803F9F2EAF0FE03030B120CFFFEFBFB030C05F8FB0BFEFE0305FDFFFF05FD0100E7F404FF01FCF9FEFCFBFFFC1113162100FCFCF3E9EFE9FA010406EBFE10070A010C02040D01F9FC0B080607FE07000302FB0909080801F9F7FAFFF6F5F8FEFDFEFCFCFA02F8F10A15F7E5F7F6070B04070E0001FAF80413120E1316080A080E0704F2E7F201FE060C100F0DF8ECF90610FDFB01FFFCF0FB03F701F902F9FDF9F0F503FA01FAF800FEF8F2FA0C11101E04FCF8EEEBE8EFFC050B03F3F907080703070403050708FE010D090A060CF60008FF05030C07FB02FEF9F1F701FD0000F907FA02FF01FB051203F4F10506100E010708FCF8F908191B0B0E140F0D070A03F5EEEFF5F9F703070F06FF01F8F5FF02FC01FBFCFDF400FEFA03F1F2FAFAF3EBF4F70102FAFBFAF2F3FA0007040D1BF2F8F5F7F2EBDCF5000106F7010D06080A00020404FCFC020007020E080205FE070303000602FAF5F6FDF7F5FD00FAFEF4F8F523457160341C402E3319272D15040C09061118110200121512030D182026141F302421181B1719030D150B1B221C1B0508151613161218120D110A01090D0F0F080C0FF90A06050A1D11100E12FDFEFD0B0E0F1A080712211411291F0D1B0404060214010D03020C0200FE04FE08FB050202FC000403FF070D06FF060705FC021B415738210A2A2630181B1405020AFD05151B100C11F4FAFF090E1516171D1D1E1A1A0B071B08FD0A081C1F1919180A1B0C151010090A26270A150D1A0C110D111F10090511040813100B080E0A0D0E18100D051402090B0E0211120916000A071612F30D011218FB0809040C09FD0F090FFFF710070D090511020106081209121207E9E9EBFAF702040205F3F7030507EB0DFB0901F2E7F6F803FE060E000E07F80F08FD000B1003050D0A1C221DFB0D100A08140E14110A181B1917F8EC00090B070A1D1C0E1616190E051701161000091001141B05FA0B1000050E121510010304F6F70112050304F50AFD0404F9090D08030CF7F2F708FCFC06020005F9FDE6DAB6B4BBD8D1DFFCEFEAEDF9FFE3E0EBF4F6F8E1CFD2E7F3EFEBEDF7FEFB06FEF2F9F9F5EBF0FBFEFAF9FF07F1F2F9EAEFE7F7EFFD0601FAF600E3E2E4E6F7F5FFF70001FBFB01F2EDF6010501FCF6F7F8FF06FEFC09FCFEF3EFF3F3EAF3E8EAF6E9FEF70700F7ED0110F7FE03F3F7F7FA01FFEEF7F8FB01F8F4FBFCE907FBE1C0B9B7B8BAA6D2E6DFE4DCEADECED6D7DDDFE2D9D2D0E6EBEDEBE6E4EDF0DADADDE4CEEBE5EE03F6F4E7E1E7D1CCCDC9CACEDCDBDCCFD4D2D1D5D6D7DAD6DACED6D5F1FAE8D9E1FBEDD4E5F5EBE9F1E1ECE8F1DAEBEAF2E9F6DEE6EFECF4E8E3F4E4EEE8FF0CFAF0F2ECDDEEF4EAF3EEFAF60802F7F8F3F2F5FA05EFFAFDFA0206010803FE0E03EFFB01FBF9F1EFF7FFF8F6FBFCF9F8F5E8EBECEDF813261AF6F4FDF9F4F905FC01001A150D090CFEF4FD0BFD0200041B081002100902100CFA1506090907FF08050100F6FA030FF4FFFCFAF5F7F2010C0AFAFE00F8F410FBFF00FC0B06161803010D070103FAFDFEFCF701FE0C00FD0C030A11080F0A0CF60505FA0304FB0AF801FEFBFBF2F2F3EFFCF7F90203FBF2F1E3EDF1F2FE0F2918FCF4F802FDFB0404020316110C060403F5FD00FDFC0008130815050906040207F7000C070703F201020006F7F60909F9F8F6F8FEF7EFF60C09F70403F2F4080A0605F101000E0DFFF80202F8FD04FE0003F3FFF202FDFCFE070114070F0D0EF90606FD0B07FC13FD01FC02F9F6F0F9FAFAF3FAFDF7F9F1E7E3E9EDEFF81C301DF4EDF7FAFAFE0401FDF7160F0A0B1102F0F206FBFB020E0D0B0CFF0808020605F30302070D01FE04FFFA01F6FA0505FDFBEFFDF4F7F1FB0E0AF7F800FAF00102FEFFF2FEF70F090300FCF9FBFAF9F9FEF7F006FC01F7F00805F711FF0A0E07FE03FEFC0205FA08F7FAFAFFFEFFF8F9F8F4F0F5FDF0F7F2E2EDECF1F8FA14261BFDEDF5F5F9FBFFF602011205FE0706FAF40409FD0008040D050E0A1005FD0305F901060003FF040BFF0603F8050306FCF6F0F8F0F9F3FD0F09FFF805FDF502FFF8FCF0FBFD0108FBFBFA00F8F8FBF801F6F903F8FDFEFC01030007020BFE00F90501FD0508FB0CFCF1FFFBF7F5EDF3FCF6F2F9F5EEF8F7F4EAECF2EFFB15291CFBFCFAF6FFFAFF01FEFF18090C0204FEEFFC0C080A0D0210121115180E07110B00070304160BFF050904FFFAFF0512F8F7EEF7F1F6FAFE0904F9F2FCEDF8FEF5FA07F6FDFC0D0703F602FDFBFC02FF00FFF108FBFFF8010802FC040C150E0D000913110F0B07090A07090404000201FFFF02FFFEFAFAFF050201040304070606050306080C0C0C02F701060204040402000000FE01FDFF0000FBFCFEFFFD0002FE0000030101010304020205070B0C020407060409030805040106020003020104030002010400050001FF03FB00FF01FE00FFFDF9F4FE07070A080807080200040D0B0F0F00070500FFFF03FDFBFBFDF8FDFDF8F6FBFC01FEFEFF0002FD0100FF02FF01080A0802F8F804FDFBFBFBF5F801FBFEFCFAFAFDF8F8F8F8FAF8FCFCF9FAFBFEFBF7FEFFFFFFFE02020805FDFD0100000400FEFEFEFF04FCFBFBFBFAFCFEF8F8FB04FCFFFAF9FAFCFAFCF8F8F7F8F7FDFAF7FD0305070907070302000006030A06FDFEFCFCFCFDFEFBFAF9FCF7F9F9FCF5FAFF0201FDFDFFFDFCFFFEFCFCFD000A0B05FCF7F8FDFAF9F8F5F5F8F9FBFBFDFAFAFCFBFEFAFDFCFAFBFCFDFEFFFBFDFDFFFEFAFDFD02080704FFFAF9FEFF020002FDFAFD01FDFDFAFCFEF9F9FBF7FBFDF9FAF8F5F9F4F6F6F6F8FAF8FCFFF7F5FA0104030704060405FEFDFFFD0406FEF8F9FCFDFCFD02FEF8F9F8F8FCF9F8F8FE000403FDFDFBFBFCFCFDFD000206080900F6F70101FEFAFEFDFBFFFE03FFFFFE010106040202010000FE0102060405020404040504080A0703020305040102000400FF03FFFEFB00FEFCFBFAF8F900FCFDFBF6FDF7F7F9F7F7F9FAFEFEF8F8FD0304050506030402FAFCFF000305FEFAF6FD000100FFFCFCFDFAFA00FFFAF8FD0502030300FDFEFC0101FF02070B0B0D04F8FA08040301040300020506040200040809050504070608010509090907020608020509090D090505070808080C060804050503FF00FE030300FCFF04030005FDFDFFFCFE0100FFFDFBFDFEF8F90204060B0B07070505FAFCFFFD0003000A090205FEFAF4FCFFF8FDFDF9F9FAF4FC00FBFC01FAFF0501FEFAFDFCF7FC0201FE0402F8FAF9FAFEFCFBF8F4F4F3F4FBFCF9F5FCFAFDFB03FCFCFD02FBFCFFF8FEF8FAFDFBFAFAFDFF000104040C070203FFFC0003FCFBFEFC00F9FFFAFEFBF9F9FF04F903FF03FBF9FEF8F9EEF1F8F7F3F1F8F2F1F1FAF8FDFA01FC020A0108FFFBFEFEFDF9FBFBFCF9FAF7F2F901FFFE0102FCFDFBF9FF03FCFBFC04070C090603FEFAFEFDFDFEFEFBFDFD02FC00030102FFFF01FD01060303090406060101FE0206090502050304040A11090D0B030705FF0302FCFEFDFEFF01FFF7FCFEF7F600FEFC0404FFFBF3F7F6F8F0F3F7F7F6F7FCF6F1F3FDF10100050304030306FFFE0002FEFD0200FEFE000003FE03FF010603FF0404FF00050204000A0C0905FE01FFFD01000508030403040C09090909060E100E08080F0E0D0E130A0D0D0906050B0B040C09050D0A041111130F10060706050409040307FB0403F9FAFCF9FA0204030000FEFCFAFDF7F7F8F3F7FBF8F8FDF8F8F7FDFAFFFD00010004010301FDFEFFFEFE01FDFFFBFF0101FFFFFF010301FDFE0000040800FE0202030A0905FF02FF0601FE01FBFA000301010001020108070400010604030A0E0C0B0B0407080603030B080B0A0B0D10120D0C0B080B020503FF02070600FCFDF6F7FEFCFA000004070101FCF2F6F9FAF4F6FDFBFCF6F4F6F2F5F9FAFEF5FCFD01040000F700000300FF00FAF9FC0203FFFCFAFD0500FCFDFDFEFCFC0301F9FFFE0508060100FD01FFFEFB0000FBF9FCFDFEFBF9F7FFFDFBFEF7F90103FEFF02020200F8F9FEFE00FF040202030403060A0B0C050302FAFE07FCFCFDFF00FFFEF9FBFCF9FFFB02010306FEF9F3F8F6F2F2F5FBF8F8F4F6F5F4F6F7F4F9FAF7F9FC03030607FBFDFF02FEFD0103FAFCF7F9F8FA0105000202FE0002FD010504010104070A02FE02F7FBFDF9FAF7F5F3F2F7FDFCFFFE01FBFCFDF6F4FEFFFCFFFBFFFBFEFE01FE00030304040203FD0205080C060403FDFD00070608FCFE03000703FFFF0000000000030405030001FE01FF010002FFFFFDF8FCFDFEFFFBFCFBFA0008090E06FFFFFE0502010305FCFCF8F5FA0105070606020303FC0005090C05090C110C08FFFD0002FBFBFCFBF9F7FC04030403FF05060100FCF9FF0101FD0100FCFE01010603070705060302010706070C070502000202060605FEFF030104FD0102FE00000000050201FEFDFEFD0300FF02FDFDFFFFF8F9FCFBFAF9FDFDFB01080E140FFCFD020502020503FEFCFD00FCFF070305040304040201050B0C07060F1007050200FE03FBFDFEFEF7FBFC06050105000106060301FC020104010300FD0100010204050708050405000205050B0C06FFFCFFFD01070400FFFD0207FDFDFCFDFDFE010002050100FDFFFE00010200FEFCFCFDFBFCFAFBFEFAFCFFFCFE060C100BFCFAFF0403000503FFFCFE00FE0205010304010204FF02050B09020409100D010100FD00FEF800F8F4F5FA00010000FE02010000FAF7FFFEFCFDFFFEFAFCFC0103000303FEFF0002FD03010805FF0100FFFCFD000202FEFB000101FCF9FCFBFCFE00000500050200FBFE05FF01010100FDFBFBFEFEFEFFFCF9FBFD0006080C0A00FD020102FF0303FDFAFBFDFAFE0206010001FFFEFFFC050B0807040A0A0A0402000000FDF7FBF8F5F1F402FDFDFDFB010100FEF6F6FCFCFDFBFCFFFCFEF7FCFCF9FFFFFFFFFC00F9010205080200FEFCFBF801FF00FBFBFE02FFFCFEFBFBFC0000FB0205030402FC0101030205FEFBFD00FBFF00FBFFFEFE02000000FF0401FE0303FEFCFE00FCFF0001FF00FF00FF01FEFE0000FEFDFFFEFDFCFBFDFEFEFCFFFEFFFEFEFF00FDFFFFFDFBFAFDFD00FFFDFFFFFEFEFEFDFEFF000102FFFCFDFFFFFCFE0000FFFD0001010404040506090605070201040205000100010000FCFF01FE010000FEFEFEFFFFFEFBFDFEFFFAFDFCFCFCFE0000FE0300FE03020402FE0003FEFDFD0100FE0002FE000101010100000201FFFF01FF00FCFE0100FFFDFFFE01000001FF00FF00FFFDFDFFFF01FFFFFE00FDFDFEFFFD00010204000200000101000104020001050707050706080D0708090402050405030500000001FEFEFFFF03010201FDFDFFFFFCFEFE00FFFCFC00FFFE0000FF020300FE00000400FF0003FFFD000301000303FFFC02000002FFFF00FFFF020100FEFD01FFFEFEFCFEFC0100000302010002FEFDFE010000FEFF01FFFEFEFEFFFF060302030101010301FFFE010402030101040906060A090A0807050403030202020300FF0100FF01FF01FFFF00FFFF00FEFEFDFBFCFFFEFBFDFDFDFFFDFFFEFEFFFDFCFF00040100000000FF010101FE020300FE02FF0102FEFF01010000FFFDFDFFFDFDFF00FEFDFD0103FFFF00010101FFFDFCFD0001FE0000FFFDFEFDFE000203020404FF020401FFFD030302010306050703060907090605040202010100FFFFFCFCFDFEF9FEFF02FEFEFFFFFCFEFDFEFDFBFCFDFEFBFDFDFC00FD00FFFD00FEFDFE0101FE00010100000000FDFE010301FEFF000301FEFF0001FFFE00FDFDFEFD0002FFFBFDFE0200FF000202020302FEFEFFFFFF00FEFEFDFBFD00FFFE0001010200FF000100FEFE010201000001020602040304090604040000010200FCFDFCFDFEFDFDFDFEFFFE020300FF00FDFDFCFAFEFF01FBFEFEFE0103FFF9FCFEFDFAFBFE010001FE00FEFEFCFCFBF9F8FBFDFBF9F7FB00FFFCFDFBFBFFFEFCFAFDFDFBF9FBFCFEFCFAF8F7F7F8FA01FFFBF7F6FAF6F6F6F8F8F7F8FAFAF5F9FBFCF8F9F7F8F6F4F6F7F6F6F5F8F8FCF8F7F6F5F8F3F7F4F8F8F7F5FAFB00FD01FEFE0100FEFF00FCFFFFFEFBFFFF0000FEFC0201000104010402010101FAFE0201FCFC02030301010300FFFF000000FDFFFEFDFBF9FD02040501FE010202FFFF060300FDFE000303FFFF00FF03050806070203000100020303050504020103030401040401FEFDFDFCFBFEFDFF00020000FCFCFEFBFDFDFDFDFCFC0004060503050402000100010000FDFCFD0004040301FD0201040304050607050603FAFE0001FBFB0006050302030504010301020404FFFFFFFDFF0709080403030407050509080302060302030201030208080D0D0A0A080804060A0A0C0A080A09080808080B090708050300FFFF03010203060603030502FE02030102FFFF04060908050304040304050501FF00FFFFFF02000402000302060407080707070702FAFD0201FBF8010A0704030303020003020302020101FFFCFE02040602010203050003070603000002FF01FEFDFD00FF040907040203020101020305040401000203030200010303FFFEFDFEFF0000000002030200040201FDFDFE01000002030707060607040405060303030101000003040301000200030507080805090807F9FC0301F9F90108090201FD00000001000000FFFEFDFDFCFAFCFFFE00FFFE0304FDFDFFFDFAF9FCFDFFFFFAF5F9FAF9FD00FFFAF6F8FAFAF6F6F7F7F6FBF8F9F6F9F8F7F9FAF9FBF6F8FAF9F8FAFAF9FDFFFDFBFAFCFBFBF9FBF9FEFEFCFD0005030305030201030201000201FEFEFF00010101FF03FEFE0204020602050302FF000300FDFFFEFF00FE01010101FEFF030000FFFEFBFD020300FE00020001FE0000000101030201020203FE00FFFF02FFFE0001010201FC0002020101FCFE000100020103050201000200020600010101FE0101030502050302FE000102FCFBFAFF020201FCFAFBFF02030504040200000100FF00030203FBFDFFFEFBFBFDFC020102FFFEFEFBFE0001FF000201FEFF03FEFE0001FDFC000303FF01010000FEFF000100030402020201010101020103020202030404030105050504050101030502050305070404040102040402000001000105030302030201FEFF0001FEFDFAFD010400FBFBFCFE000104060302FFFF010102FF020402FDFDFFFEFDFDFFFD010201FEFDFFFCFDFEFCFEFFFF02FEFE01FFFEFF00FDFCFF0202FE00010100FFFF0201040304030201020001030001040302020606070403050305050502030405040705050704010302040405010100FFFF00020201030302FFFEFEFF00FDFCFAFB000400FCFBFBFD0105040403000200020000FF020402FFFD0200FEFF01FF020101FFFE00FDFBFDFCFEFFFF00FEFF03FFFEFFFFFCFD000400FFFF0101FEFFFFFF000402020201FF0200FF0100010502010104030503020302050504020204030106050709050203030303030101FE00FFFF02020000010303FEFEFD00FCFCFCFBFF0101FDFBFBFD0204040202010101FF0001FF010402FD000101FEFF030000FF02FEFF00FDFCFBFE0000FF00FEFE0200FD00FFFDFD000401FF01010000000101010403030302010200020301FF03010201030303040005040605050101020403070608090404060404040402020002010105030402000604FFFF00FFFCFFFDFE010202FEFEFEFD020503030301000201FF0001030603FE0001FFFEFD0102030306030505010705FF05FFFCFCFF01FF060805FFFCFC0505FFF8FDFF01FEFEFDFEFDFAFDF8F4F7FCFAF9FEFAF9010201010103FEFEFF040B050501FD000500FEFCF9FDFF01FBFAFB00FC00FE02020101FDFFFB020102030A0A0D100E09040501070401080C0C0C090A05FFFEFDFDFFFF01FFFC050100FAFFFCFEFBFBFD00FE03030400FBFE010808FE0403FF00FF0303020203FFFDFE0101FEF6FEFF00FEF7F7FDFDF9FAF9F4F5F8FBFDF7F6FA0200FEFEFDFFF8FEFE01070402FFFCFE03FAF7F6FEFDFE01FBFDF9F7FEFFF9FF010504FE00FF02FFFE03080A0D130C0302FFFE06080502090909090802FF00FD00FEF9FE00020103FEFDFFFCF9F6F8FF0000020400FFFCFF010405010402FF02000302050703FCF9FEFF0200F7FAFEFDF8FBF8FCFDFEFFF6F2F3F9FBFBFEFBFE0202000102FFFEFE03060904FFF9FBFE05FCF9FCFEFE0003FEFBFBFBFBFEF9FA00030000FEFD03FFFEFF0B0D12130D040501FF050508050A0806090A020201FEFDFDFCFD01FFFF00FCF900FFFFF90001010102FEFF01FBFCFE01070102FD00FEFE0302000700FBF7FD0003FFF5FCFF01FDFBF9FDFBFEFBF5F3F6FAF8F8FDFCFC0400FCFF0303FBFEFD0206080301FEFF02FDFBFE0102FCFFFEFAFF01FEFDF7FF030500FBFBFB01000403080B110F0A08080103030604020A0A040906000102FDFDFFFB010202050200FA020000FFFC0305030001FFFDFBFEFF010400FF000001FFFC00050404FCF8FDFF05FCF5FAFDFEFDFBFFFDFBFAF9F4F3F6FAFCFDFEFE02040000FD0000FF00FD01050002FCFC0002FFFAFCFEFDFB01FEFFFFFBFFFFF9FDFF00FF00F900FFFEFBFF080A0F160B05000304030303050D0B080A08FF02FFFEFEFEFDFF01FE050301FA0404FDFD030506030E07FFFF060204FE0003FF0603050400FC0505FEFAFAFD00FFFBF3FB0608080402FE0205FCFAF7F7FB000307070307FEFCF9FAF9F8FAFF0009FD010401FE01FC05FDFAFBF600F9FD060402FEFEFEFEFD0504FBF5F9FB0501FCFEFFFA01060307FFFD00FD03FD050802FB05FCFBFDFE03FF0000EFF8EFECF6FEF6FB0B07FEF4FE0E05FCFC040A030104FEFF04070906020403FFFCF9FCFD0303FCF8FE0604080802FDFD0000FCF4F5FCFF020B08FF020904FD03FDFBFE010007FC010806010302070000FAF801FA00070402F7FCFBFFFC040601FAFEF9FEFE0003FEFE01060009030001F706FF040903FE0600FC0003030104FFF4FAF1EEFD02FAF80804FDFC070C04FFFEFF0302FE0203FDFC01020703010504FFFC00FAFCFEFBF3FB050A0600FBF60002FEFCF7F7F9FF040A0D050907FCFB0304FDFEFE020FFF02080A0807FE0BFBFEFAF9070405090801FAF4FB02FD0508FDFCF8F4F8F5040301FAFC04F80802FE00F507040307FFFBFF02FBF7FAF9FE0000F7FBEEF4010702FD0B090001070A07FBFE0404020102FFF7FB030706FDFE070402FE00FFFBFFFBF1F804060600F8F6FB01FCFEFBF6FB00040A08020B08FE010601FBFA02020BFCFF05090904FF08FE0403FA0605FF030607FAF4FBFEFD0405FAFCFAF4F8F4000101FAFB02FB0A01F9FDF40504050B01F9FCFEF5FCFDF9030000F0F8F2F4070D0C080F0D06020D0F0600FF0506040005FFFCFC02010001010706030204FDFE01FAF3F703050503FFFA00FEFDFFFAFAFE00080D0F08110702020307FEFC04070C00FF0B0E0A08070AFD0A0A01060503080906F9FAFD05FF07080000FCF2F6FA030404FEFBFFFE0B010200F40703030B00FCFDFDFBFD03FF030500FAFEF2FC00100D080C0E0D0A0BF8E0DCE3E9F2F0EBFEF1EDF3FCFCF6F500FCFBF5F8F3F0F0FB00F2FAF4F6FBF2F8ECF2F9F1F9FA01F8FFF9F6F9FE03FEF9F9F6F8FFFEFAFEF5F8FEF8FDF7F9FDFAFBFBFCFC01FBF2F3F9F601FFF3FAFDF9F8F1F5F8F3EFF3ECEAF6F0E7F0E6F9EAE6EBE6E4EAEFEDF0E7EAF7FCF8F8FAF804F6F9F7F3FEF4EFF6F2F6EDFCF1FDFEEDD6DDEEF7F1EBF4FAFFF9FFFCF2F3FAF2F9FEFBF6EEF0F5F9FDF6F0ECF2F4F1F3E9F2FAFD0204FBFFFBFAF7F8F9F700F5F6F9F7F7FBFEFAFE0400F7F8FB01FFFC00FEFFFC01FC05F6FAF901F3F7F6F1F8EFFBF9F4EBF5F0EBF3EFEFEFF3FAFCECECEAE8F3FBECEDF2EDEEF5F6FB01FEFFF1FCFCFA02FDFC00EBF8F2FDF6F508F2EFF3031004FBF7FAFBF500FAFC01FAFE02080C03F6F4F9FC0100EFF4F7F9FAF6EBFAF3FB03F9FF0203FBFEFC01F8F7F6F0FBF9FEFB0207FDFFFF0200FFFF01F9FCFAFD00FEF8FC02F9FBFDFB05FBFE01FE03FBF4F7F8F7FBF6FBFEF402F7F6F6F2F3F9F703FDFDF6FD00FCEEF3F8F5FFF705F8F900FA0100EEFFF8FEF9FDFE080E0F131911170800050407FF0C010B0E181E1515080A0BFF0806060802090604FB02010C1202FA02FF07F7080802FE00FD03F8FAFA0406F9F6F8FBFC010903F9F7FE00FDF4FA0C03080109040D080A13130504FCFB000B0C0E160A010F09FF0C05FD0D110E0D0D0A13FE03F6F905FFFC0002020403040D0BF90306FFFE020510171615191E1C120F0F150C0A0E14171A2A321C1A1410110C12121413101612140E1610170F0D06030C130E1215160F0E0C1B0B060A1514130A0715FF050F070613140D05080A161315101C19151A13201E1916130F092221272020221F170E1F210A261F26231718230A15080408050C060D130C04FE0D0F0D121119110FFDFC0003070F020F08FF01F6FBF4FF01FBFEF7F3F5FEF2FCFCF9F9F9F0F8FFF5FAF4F1F5EDF8FDFA010603F0F4F3EBFCFAFEFAF3F1EFF3FA01FCFC000302FC080100050C02030E0308000503050508080C121310191C19130B110D0810FEFBFFF9F9F2E8EBF9F7F8F5F5F4E4F0E9EFE8EAF3E8F2EEE2EAEDE4E4E4DBD1E5E6DF05F30204060E080500F9F9FEFF0103FDF5F7FEF5F7FF04FB000403F9F4F2EAF104FCF4F2FEFE08080202FBF3F606F3F1F2F4FEFDFBF7FD00FCFDFAF70105060A06050B080604020803010F14160A0D0E0E141C1B1513190B0D1A160E0B0205FDF9F3FAF8F1FC00F5F2F6E9ECF9F0EBE5DDE4E4EDEEE7ECECE2ECE5E5D3DBEEE906FE0802100B101206030202FDFF03FCFF0100000A070806090508F3FCFCF5F70405FAF3FF040600FD0503F6FE050A0809040706040B0C0702060D111012120F0F0D1E1E0D0D0E1010070F0D11201B121C1E151A281F161F13181913130F0C0302E8FCF6F2FD01F8FDF9FDF6FCF4FDF8F6F7E0F7FCEFEFF2F5EBE8E4E2ECF3F304040101FE02FF0304070CFEFEFAFF02FBFC00FF0102FFF90207FCF8FCFDFB0106FCF200FFF7080905050BFC080BFD03030508040708090AFF060606070B12140C070C161712121816131310161D1A1D1C21212724171D19131A100E1300000703F5F9EFEAEBF8F7F600F6FB01E6F0EFEAF4E8F9F3EEF2EEEEEFDBE9D8DFE7DEFFF5EFFAFF02FCF8F4080607FAFA06FBFAFA01F701FAF9FC070500FFFBFBF4F0F8FFF7FAFCFB0B04FE01FB01FAFAF1F902FF040BFCFBFCF7F903FDFD06FCFE020707FF06090704030107070A091007110E0607121B19190C090903050B01F8F7F6F4F1E8E3EEF7EDF3E2EAEDF0F4E8E9E4EEDEEAE0E4F5F6EFDEDFDBD7DFE4DAF7E2CDD6E4EBE7E8F1EEF4F7FEFAF9FAFEF803FF00FBF6F4FC01FAFBFBF6F9F8FAF4F6F4F3FCFEFFFD0001FAFDFCFFFFF9FDFAFC0101FD03FDFF020404FFFE0502060205010108FDFEFF01060303020406FCFEFE060700FD01FFFE0000FDFE01FF040204FE0306FF0003FE05050705050401FEFEFAFD0600FC04070203000303F9E9D6DFF0F9EDEEEFF7F8F6FEF7F8F6FDF7F9FF00F7F6F9FE02FBFE01FCF9F6F2F7F4F2F7FA0002FE04FDFFFEFEFFFE00FCFCF9F900FF00FF000401FEFAFF0408030404020104030400FF0406FD0103FF00FF060608FFFDFAFEFFFCFFFDFDFF04FFFDFDF8FD03FF0502FCFE0004040405FEFFFCFCFE03FF060403FE0108FF0102FFFD01061000FAFBF3FAFC0202FEFC000500030203FB040302FC0805FFFCFBFDFDFAFCFBFE03F7FB0203FAFAF6FEF9F9F7F5F8FA00FC0006FB00FEFCFF0202FFFEF900FFFC03FEFA02FC0001FBFEFE03F9FE0103FEFE01FBFDFBFAFDFDFCF8FCF9F8FAF8FCFFFDFDF8FF050000FAFBF9FCFCFAF7FAFFFF030204030102FF02030F1C1A1A1B1A160CFFFE08090406010D08030A0905080F1008060D130F06060505040100040400FE07FF00FCFF01FEFAFAF2F7FBFFFC00FFFAFAF8F7FDFF05FFFBFAFE00FDFDF9FFF8FE01FEF9FCFB01FE01FD0002FFFCFDFCF702FFFDFBFBFAFBFCF9F7FCFEFA01FBFCFEFDFDFBF9F7F1FAF9F7F9FC010105FF00FFFD0001071423211E1D23221B070D0C0C0F090C110F0F130E0E1415120F090A1A160E120F11100D080B0B030207070806FF080B050801020603050C080404FF0200050903000706FFFE050209FCFE0607000105010507070A080703030502020603FBFFFDFFFCFB020102FDFE0203FC020802FCFEFCFAFAFFFC00FBFD03060000010203FA00FE0D05F8FFFEF804F503F3020619130AFAFBF2F3060DF7FAEFF8FA10FBF50D1D06F7FCFAF801F3FBF50B0F09ECFBFBF3FCEDF2102A2E120904FA01161C06F7FB0A0816EEFA09FBF4F20AF5132624F7F008070AFDFFEE04F6E013130D0DF9FA090F2BFB02FFFA03EEF70DFE0800F1F5EBFD08FB03FBE6EEECF4F6010603FD01060A0E06F30A02F101FBFA03F8EF050B0B03F4F1FD090DFFF5F8E9FC16F3EA021A0BF100FF0902ECFCFD0A030B070AFCECF3F6F50E2827110611FA0017100AFFF9FB0607F203FFFFFAFB06F307192E0CEA09FE05F4FE0D07E5DF0A16FF09F203090B22FBF803F50B040B1601F508E8FAF0F80700FEF9F604F2F00A04040A08FDFD0A07F4F401FEF90D0E0EFFE4F007001203F5EDFC0D0A04F8FBFBE5F7FFF20B1AF9F3F0FF04FDF709FC0008FE030AF8E8EDF0F20E25190C0E0EF508180C03F0F9150609F6F1E908FBF517EF121D24F8E90504FCF6FD0103DDDC1D1FED04F8F0121821F90B0AFB13F3F012FDF7FFF3F0F1070F110C09F0FBF6F403FE121316FB04FE0204F6FC08FB040702FEF4F6FDFA0500F2E8F41318050FF7EFE509FFE6FB1004F4EFF500F3EDFBEE0CFF050204F7FCF5ECF10A181B0D0E11FDFE19170EEEF1040611F3F3F000EEFE0DF0160D22FAF6FE090C01F8F308DEEA0C20F4FDECEE11221CFE0B0D071102FE1300ECFFFDF4F20111050A08FBFBF3FC07030B1216F700020510F702080D0C00060DFAEB091405F7E9F1020E13FBF1EDE9E8FFF2F6FA12F9F5FA040405020A0213070AF2F9FDFAFCF6060D221E0E0D0D00030A0A16EBF5040A04EDEEE9EEEEF503F0101C2C03F2FD0A0B05EEFE04E2DF1321FBFAEDF4160C1CF9F70F030DF8F90A0FFD05F3F6F704020800FDFBF6F0F7FC030A040701FDFBF9FD000305050709040204030403040D0F0804FDFDFF0101020405030705020303010402030108070405020102040206060301050402FF01FBFCFCFCFE01FCFDFE0100FDFFFD0200010002050100010203FEFE0102020405030102FF02030304020400040200000201010201FF000101FFFFFFFE00030100FCFE0201FF02FEFCFBFF020207050507060203030704020A0E0702FBFC00FF010203040508040203010301FF01020708030200FF0202040401000202FF00FEFEFCFCFBFAFAFDFBFDFE00FFFDFEFDFFFEFFFDFF0101FE00FF01FFFE01010202030100FFFF010002010003020101FEFF02000001020000000001FE01FFFF00FEFDFDFD00FEFEFFFFFFFD0204030604050807010304060301080B03FEFDFB01010202020404080503010200FFFF01020807030302FE0202030200000003010101FEFBFCFCFAFCFCFDFEFB0001FEFE00FFFD0100000203FF01FF00FDFF01FF010302020200FE00FE03010203010202FFFEFEFF0102FDFFFF000202FF000000FFFFFFFCFE0200FD02FEFF000306050705050706060405070501070901FDFBFC02030101020504050403010300FFFF01040505020100FF030405050100FF0000020001FDFDFEFAFDFDFEFF000100FE000102FF00FD000202FE0200FFFFFF00FF02020202FF0200FEFF01010000010102FFFEFF00FF0000FEFF0101000003FF0000FF0300FF0302FD000102020006060705040505040101070600050803FFFBFE0200FF01030204060600FF0100FFFDFF010707010001FE00010202FF00FF00FD00FEFEFBFBFDFAFCFCFE00FFFE00FE0000FFFDFDFF00FFFFFDFF0000FEFCFFFE02000001FDFCFDFF000000FF01010101FEFFFFFFFFFDFEFEFEFFFF00FF0200FF0201000102030300FDFD0101FF000203000102FFFEFAFC0203FF0204FFFDFFFEFFFF0001FEFAFDFEFDFCFEFCFCFEFBFCF704FEFFFEFD02060502000AFDFEFAFA0600FFFC0601FBFD0501020207060500020200FEF9FE01040307FE02FAF601FC0D0105F90200FC0507FDF8F70504FD09FCF4F5F8FAFCF6FF0502F904F7FF0405070BFF0501060AFCFDFE00FEFB01000302030401FDF9000302010104FDFCFCFEFBFE000100FEFDFEFFFEFCFCFCFE00FFFA000402FFFF050A080208130505FEFD070200FB0D04FDFFFFFD070405090604010503FEFF04010302080004F9F8FFFC0D020AFB02FFFE090901FAF90408FD09FCFAFCF9FCFDF5FD0701FC05FA0003050C10090505090DFCFBFB00FEFD03FD010301010002FBFBFFFDFC0606FEFCFEFCFEFA020600FDFBFAFDFB01010002FBFDFE000201FC0205080F05060E0305FF010902FFFD0800FB0000FA010002060504010503F700FE000405080403F9F802FD0D000AFD00FF04100B02FEFB0906FA0AFBFFFBF8FF00F5FD0801F701F501030A0B0B0706050C0FF8FEFE03020105FE03030102FFFCF9FBFFFCFE0507FBFFFCFBFE010602FFFEFEFFFDFD02FFFF0201F9FE050600FBFE040809050210020501FD0401FFF70400FF0100FA0300040703FC000101F8FF0000020507FC02F8F902FC0B0009FF000103070C09FDFB0A03FB04FAFCF7F60201F3FE07FDF501F7FE02090A0602FF04070AF8FCFB03FBFF02FE000004020400FBFF02FEFC0705FDFDFE0001FE060302FCFE0001FFFEFAFC00FFFFFB010200FD0304070A05020F040304FF0300FFFE0502FE0201F9030104060500FEFF01F8FE00FF05040601FBFCFDFEFC0B02090604010209060603FD0D06FF0E00FFFFFEFE01F3FC09FDFC08F8010309080C0301010309FC070401FCF8F801FAFFFFFC0607070104FFFC070A03FE0C08080500030C090508050C0D0A0B050402FFFAFB0A0B0C120A0D0B080B070A0A030703030200FAF9FC0201FDF9FCFAF600FFFEFAFDFD0100FAFBFAF7F5F1E9EEF2F6F4F6F3F101020201060E090F0A08070A0C050D0A15091110091313171E141013130B0F190E090B000903FEFCF8FEF9FE02FD000100030001010206000301040302FF040B09100CFC010707FEFFF7FB040304080B020C100E0E0304FFFFFC050805030901F3EEF4FDFBF5F6F9FFFEF600FEF9F3EFFAFDF8FFF6F0F0F4F1F0F3F0F0EDF2F503FE0303070C040D07060E0508100A090F14151B121315151A1411110B0609160C02060800FE00FAFEF7F3F8F8F8FA020200FFFBFE0001F4F7FE00FDFFFB0B070B0A04FB010302FCF9FEFFFCFDFC0406FDFAFCFE0402FAFBF5F6FC01FFF7F2F1E9E9F3F5F4E9ECF8F8F7F2F7FAF5F5EEF0F3F2F2F2F0EBE8EAEEEDF3F4F3EEEFF7F2FCFE0805030809060D04090204070F0709090112090E120C090907040B0D08FF040403020300FC01FBF9F7F900FF0504FAFEFBFDFFFCFAFF0200FF0003070800FBF9FF05FD0206FCFE02FDF7FCFDF6FDFC0107FEFCF9F8F8F904FFFBFBF8F3E7F1FAFDF7F1F4F7F7F3F0F2F5FAF1F1F2F2F4F6F2EAE8F2ECEFEDF0F6EFEE00FEFDFC03090A100F0A0F0A04080301140C090B010D0A13180F0B0A080D0B110E071202080BFEFFFC010100F7F8FC02060100FEFFFF00FE040204010402010E0B090A06030D050004FCFC04FEFE0304010C09060B08FBFF01010605FF0301FEFEF8FDFCFFFDF8F7FDFE0204FEFAFAFAF5FFF8010600F2F4F4EFF9F7FCFCF3F200050803040709100C090D070F0905080D10110F0A101419170A060710090C100D0B0DFEF0EBF4F6F4F9F4FAFBF7F7FCFDFBF8FAFEFDFCF8FDF6F9F9FCFEFDF6F7FBF8F6FEFCFBFAFAFAF9FAF1F80201040602030003040505020101030002040405FE02070304010005070506060306070A06010002FE00FBFC01FF00050100030201FEFFFE000200FBFE0102FEFCFDFD020102010304090201010300FDFE0301FF02FEEDECF5FAF8F9F7F9FDF7F5FBFDFEFFFEFEFBFBF8FAF8F7F9F8FEFDF5F7FAF8F7FEFEFEFDFAF8F9FBF1F90301020506030304020505FFFF0103FF00020203FD0004020300FD060707070503080608050101FFFF01FEFE00FE000302000202FFFB00FFFF0100FCFEFE02FCFDFCFE0202010003020501FF010000FD0202FEFDFDFEF2EFF9FEFDFFF9FBFDF9F9FBFCFEFBFD01FEFDF9F7F6F8F9F9FFFFF5F8F9F9F8FEFDFDFAF9FAF9FAF2F90604020202030303030403FFFF0004FF01030405010005020200FC0105060505060706080602000102FFFE0000FDFE0403FE0202FEFB01FE0201FEFCFF0002FAFCFDFFFF00020002020302000101FFFCFB00FEFCFAFFF6F7FEFFFF00FAFFFEFAF9FD0000FE0003FFFBF9F8F9FBFAFD02FFF7FBFDF7F500FFFEFCFBFBF9FCF2F60202020605040205030404FEFE0004010201050502FF020101FFFC03040506050304070701FFFFFEFFFDF8FBFEFCFD0400FB0200FEFDFCFAFCFEFDF8FBFD00FAFDFBFDFE00FFFE01010602FF0000FEFCFAFEFAFAF8FFFAF80200FF02FF03FEFAF8FDFEFE010202FDFEFDFBF9FCFBFD00FFF9FBFCF6F7FEFCFFFFFBFBF9FAF5F90100010502020003010306FFFAFE02FE01010304FEFE030201FEFF05040703050107070601FDFFFEFFFCFAFBFFFBFF0400FBFFFDFDFBFEFCFDFEF9F7F9FCFFF8FBFBFAFC00FDFCFEFD060000FFFEFEFCF7FDFBFBF904080207FFFB00FCFFFE02FEFD01FBF9FD01FCFEFE00FE0C04080505050201F9F9FC0001020002FCF90707FAFAFE04FAFD080503FBFFFDF8F8FA0001FFFFFEF5F800FCFEFDF8F8FFFFF5F2F1F1F7F8F7FDFD01FF0504110B1C172514131711241E17010A1009F503F2F6ECEDF0F6F2FF03F902FBFFFCFE0F03FD080109060F0B000805FF010201F80001FC0108FAFA0402FEFBFB00FDFD0901FF030602FCFFFAF6FAFAFAFF02F9FB04040402F8FD050200000103FD00FFFCFDF8F3FCFCFD04FAF7FAFAFBF8FCFC03F9F8FCF3F4FD02F9FF04030609010E0B191728170C130F191A12FE050DF8EEF9EFF2F0F5F7F8FB0202FEFEFEF9FCF80B03F700FE060303F9FC0301FBFCF8F8F7FE02F80402FDFFFAFAFEFC00FFFE02030409FE000200F8FDF8FDFBFDF9FFFBFFFF0705FEFC0108FF060306FFF9FDFFFD01F9FDFCF8FBFCFBFAFBFEF9F9FD07FDF5F2FAF2F1F0F6FAFE0800FF08FD0F09151D2A150A15111B191201111302F3FAF0F3F0F6F600FDF809FDFFFBFBFCF60902F80BFF050C0E030506040200F3FEFF0700FB0503FBFAF6FDFBFAF8010303040402000405F90302F6F3FD03FD0001FDFF04FDF6FD0006FDFF020204F9FDF8F9F9F7F8F900FCF7FEFAFBFEFDF6FC03F7FDFAFAF7ECF7FDFE020A080309081604181C2716111B14172210FD050B00F1FAF0F6F3F0FAF8F2FAFDF5F8F4FCFAF60702FC02FB04060D0FFD010001FEF903FCFC01FB030201FFFCF9FFF7FDFDFD07040305FB0509FD03F9FCFD0202000001FDFD0200FCFC0003FE03010501FCFD00FCF9F6FAFDFB0403F9F1FBF6F4F5F603FEFEF4FBF7F6FDFC00010301060E0210091A1A261D0D1A11101018F8080E01EFF6E8F7EEF6F5FEFBF801FDFCF8FBF7FD0303FB060205010706FCF3F3EEFD0BFF08080609060A07FE0003F7FAFCFEF4F5FE080802FFFEFBF9F7FCF9FD00FE050409000403FDFDF8FE0302FDFBFCFCFCFD00FCFF030002F8F9030A040205050604FFFDFCFC00FEFFFBFD00FE040B0605040203FDFCF9F9FDF9FBFFFDFBFBF8F6F9FDFBF5FEFC020202010203FBFDF6FBFD03FEFF0705020206FDFCF6F1ED010F000D0A06080A0A06000406F7F7FBFBF2FAFD090A03FDFDFCF6F8FAF7FCFE04040709020500FCFEFBFD04060301FCFE0302010101050604FAF7040C080505080B05080301FFFFFFFDF9000202050F090808040502FEF5FC00FC0201FEFEFCFCFDFFFFF8F7FD01020A06030204F801FB01050400FE0A05010202FBFCF8F8F30711010C08040A0B0906000202F7F801FEF5F7FD070802FDFBFEF5F7FAFAFA00FE030502FF0301FDFBF7FAFE0204FEF7F9FCFAFDFFFE020001F7F70004030302020704FD00FEFE01FEFFFB0102030109060507050501FCF6FDFFFE030400FC0101FEFE01FEF80101030B00020405FD00F600030601FE0703020105FDFCFBF9F50916040A08000808070605FF03F6FA03FDF5FAFE080702F9FBFEF5F6FAF9FAFDFAFE03060300FBFBFAF8F50200FDFAF8F4F5F7F8FDF8F7F7F8F3F4FC01FCFEFF0100FDFB00FCFCFBF7FAF8FDFF020404060001FF0703FAF8F8FBFB020200FDFD02FFFD05FEFB0402020403030100F901FB04FD08FFFB0706FE0104FBFCFAFDFB0611030C0705070C0B05010705FAFC0302F8FBFE0A09030000FBF5F4FEFDFDFF02060408030902FDFEFEFD020304FBFE00FCFFFCFEFF02FBFEF7F90205010706050807000200FAFB00FCFAFB0102050B060506030A07FDF7FAFDFC06080501FC0204FF01FDFC0402010907020500FDFCF7010200FDFD0804FD0002FB050804040101FE0000FEFCFD0204FEFAFCFFFDFAFBFAF900FEFE0405FEFBFBFBFF02FC0001040505010406F8F8FF00FCFCFE00FEFDFEFDFEFBFDFEFEFBFE04FDFFFEFB00FDFCFBFFFFFAFEFF00030701FF01FEFE01FD02FDFDFFFE00FF0005FFFFFF0305FDFFFFFEFD00FF0502050504030505010101FD000300FDFCFFFD00030405050300FFFCFDFEFDFBFC010403FF00FDFAF3F7F9FBFDFFFDFFFEFEFCFAFD0201010302030400030405FDF8FBFAFAF90000FF00FEFCFCFCFDFEFBFAFEFEFCFFFEF7FDFAF9FDFFFDFDFEFEFD000502FCFFFFFEFFFDFF02FCFBFE000001040300FF0003010000FB000105060403030301040302030000FE00FDFCFDFDFBF9FE020201030201FDFC03FEF9FA010100FDFDFEF8F4F8F9F7FCFEFD0201FCFDFBFC0101FF0404060500030706FAF8FB00FDFB0100FDFFFEFBF8FAFE00FEF9FCFEFCFFFEF9FAFBFCFDFBFEFBFBFD00030704FC0203FD010200FCFBFAFD03FFFF020201000404FEFFFDFEFEFF010406060705040401FF01FF00FDFCFAF9FDFCF6FCFD010201000300FDFDFDFBFBFE03FFFDFBFBFFF9F6FDFCFBFD00010403FFFDFBFD0103020503070908030608FCFC03FDFFFF010604010000FFFD000302010203010101FEFEFEFEFF000100020204FF0505FF0104030404FFFFFCFDFE03020204030003070401FE00FB0100020303040906060602FE03FFFC01FEFBFBFBFAF9FBFD0601FD030202FCFAFF01FDFFFF0001FFFF00FBF5FBFBFDFF0102020300FBFAFC0101010304070605060804FBFAFEFFFAFAFF010102FFFEFDFD010202FFFF01FDFF01FFFF01FF02010000FCFD04030401010104010302FF00FEFCFF020200040101020304FEFFFEFCFE01020104040507060504FF0001FEFEFDFAFDFCFBF7F5FB00FFFEFCFBFFFFFAFBFAFCFDFFFE0001FF000003010203030202020100FDFCFBFDFFFEFE03040400FFFAF9FAF7F6F7FAFBFBFAF8F8F8F8F9FC00FD00FDFAF8FAFDFEF9FAFEFE00FCFBFBF6F8F7FBFDFAFFFAFDFF0502FEFEFF00FEFE010102FAFE000103FDFEFBFCFDFE0102030405040300010302030401FDFDFAFCFFFCFF0201FF00FFFD00FFFCFAFBFDFEFE000100FE02030403010405030301030200FCFAFDFEFFFF0205060500FAF8FAF7F7F8FAF9FBF9FAF8F9FBF9F900FEFDFBF7F7FDFDFFFDFCFFFCFFFFFDFBF7F9FBFDFBFDFFFDFEFDFE010002FE0100FF000204FEFEFE0004FF00FDFCFE020303030301030100050303020401FFFCFCFCFFFEFCFD01FFFFFFFD0202FCFEFBFE01010003020106090804060609070406050402FCFAFD0002040709080402FDFCFDFAFCFCFAFEFCFCFBFAFCFBFB0101FE0000FBFAFFFF02FFFF01FE0001FDFDFEFAFE00FEFF01FD02FF02020103FEFF0002020106FF01020407FF00FCFEFD000303050405030203040203010201FCF9FCFAFFFCFBFF000002FDFC0003FF01FD00030201020204080C0A0608070909050807060700FF000406040A0C0B0804FEFD01FF00000101FEFEFDFF00FEFF010502030200FE0602030200040203000000FDFE0001030102FE01020404030200020002020202010204020600FFFCFAFD01020004030002FF01030302020300FCFAF8F7FAF9FDFB020000FBFCFF03FFFF0000020102040204080C0C08090607070508060606FFFEFE0403060B0E0E0705FDFDFFFEFD00010001FF00FFFF00000101050302FD0001020201FE02FF020102FEFC00000101FFFFFE02FF03030101FE020202020400000101FF03FEFBF7FBFA00FDFF0102FE00FE00030100FF05FDF9FAFAF4F7F4F7F6FF0001020404FF02010103FFFDFCFCFBFEFF01FDFEFCFDFE00FDFDFCFDFE0300FFFBFE0101010403FF020401020300FEFCFDF9FCFCFDFCFDFDFBFCFBFE00FF01FDFE0102FFFF00FF03FDFFFFFFFAF8FEFEFE00FFFDFFFFFDFEFCFEFFFDFBFDFDFCFDFCFEFEFFFE0002FEFF01FF0203020101FE0100000000FEFE0301FE0102FFFCFEFFFE0104FE02FF0202FDFBFBFEFBFCFEFFFEFBFCFEFCFDFDFDFBFF00FF0201FDFF020303040302030202030200FCFDF9FAFBFCFBFEFEFDF9FCFAFA00FFFCFCFEFCFFFCFCFCFEFDFFFCFD00F7FAFEFEFF0100FEFFFCFBFCFBFEFFFEFDFCFDFEFEFFFCFB0001FE02FEFB01FF0102FEFF00FC00FEFEFFFDFD000200FDFDFFFEFCFEFDFC0004FF00FF00FFFBFCFCFFFCFCFFFFFDFFFDFCFEFCFCFBFF00FF0303020003040305070201030402030002FFFEFCFEFFFEFFFFFFFEFB01FD000301FEFF010105FFFE01FF00FFFDFF00FCFBFE03030203030301FFFDFDFF00000100FF02FF0101FEFF00FF02FE0101FD00FFFFFEFEFCFFFF01FEFEFF000103FEFC00FFFDFDFAFC0103FDFDFCFF00FDF9FF01FAFC010304010001FFFF000000010002040403060706060706010505040406020100FEFD0102020503010103010407050203020505040305040603010303FDFD02050508050406030302020103050103020303040001020204030002010100010100FDFB01FE02FFFFFF01FE0301FDFE01FDFAF9FB0301FCFDFDFF01FFFB0000FCFD000503FFFF00FE01FF000102010302040506090707060702050306080701FF0000FD0004020403010303020404040303030405030305020301000102FFFE01050306070307070501FFFE0204010202030302FF0000020001FE0100FF0100FE00FFFAFEFEFEFEFCFCFBFDFEF9FEFCFDFBFBFDF9F7F902040402FFFEFF00F9F9FCFAF4F9FBFB0000FE04FCF7FBFAF5F8F5F8FB00FE02010302070706070909080B0A0A0D070B0702FB010600070405080103050000050502FDFCFDFE02FBF7F9F7FD0000FBFAFEFFFAF9FD010604030503040905010302FF020103070708030101020702FE050700FDFEFDFFFE0302FDF8FE02FEFAFCFF0304030200FDFCF6FBFBF6F4FFFDFBFEFFFEFEFAFAF6F6FCF8F7F3F4FEFDFDFDFEFF0604FF03090707090805040104FFF9FAFAFDFF03FFFDFEFFFFFDFCFC0301F8FBF6F6FCFAF7F5F6F6F6F3F5FCFBFCF9FCF8FAFE0604FE0305060506FF01FFFFFE04040600050705020501FEFD0A0900FAFEFC0002FEFEFAF8FC05FEFCFE020B040500FE00FDF4FC00F7F5FEFEFC00FEFCFCF9F7F7FCFAF9FBF4F4FCFAFB0004FF04020302040606030D0305040300FBF9FEFEFD04FFFFFEFCFB00FCFF01FFFF00F8F8FFFDF6F5F5F5F9F8F8FDFEFFFEFCFDFD01060301010307020805050402050703030504060000FE0301FD080A00FFFFFBFEFEFEFEFDFCFC0400FBFE050E08060805FDFCFBFAFDF8F6FDFEFE00FDFD00FEFCF4F5F5F6F5F4F5FCFD0000020005030202040D0B0B110B0A08040500FEFB0001060501010102FFFEFF040403FDF8F8FFFFFAF9F8F8FBFCFAFC020201FEFE0000070504050806080A0704020403070504010707FE03020504FE060604FCFFFFFF01030102F5FC0600F9FC0209090003FEFAF9F7FFFDF6F6FBFCF9FDFCF8FCF9F8FAF6F2F9F7F1F5F8F9FC00FFFD0206FBFC06040406080A07020501FAF6FCFFF9FF00FC01FAFCFDFAF9FEFFFEFAF9FBFBFEF6FBF8F4FBF8F9F5F9FCFAFBFAFDFE030202000504070807040200FE050605090506FDFE020402FD060304FF00FC0100070501F2FD100B0E0C06F900FDF9040E05040F07FFFA0503FB0A13040708030501F4EFF403FEF50C1613FFF6C8D4FE0201F9F80105FDF10208F8010208FE040402FAFA04FEF0010CFD01F3F7FFF5FCFBF602F7FBEEF2FD0209FF000B0D00FB0301080A0D080A030105F0FBF706FC0502FEFBF7FFFB010806FDFE00FBFD05FBFCFDFDFEF0FD00FB0606FEF2F4FB010E0608040B0300F6FE0A07030C080F05101004FEF0ECF302F8F9020705F7D4D2FCF6E6F301F7010100F003FEFC01FBF60301F9EEFAFC0404F9FFFE0308FEF6F8EFFAFCFCFCFDF2E8FAFC000400FA0002FDFA050600FAFD0A040402FAFAFFF8FE02080BF901FCF8FD060704020600FA03F9FDFBF4FBEFFF05070406F8DEEEF403080BFE08120701F6F80002080C1716120A0A08F9EBE8F903FE04060903FDCDD5F2EFF900FCFE02FEF7FBFEF0000202FAFF03F5F300050BFFFB01FA0910FAF9F7F704F8F3FAF8F1F6F8FBFF01FEF80603FC05010306000B080E0104FEFEFAFDFE0B0A0500FFFD0201FEF7FC0502F6F504FBFEFFF909EF0004050A1102EDFB0306100500000D0DFFFCF703070616160A09070B07F9EDEAF502080D08050104C5D4040304000C0704FEF0FEFCF7090609FF01FBFFFE050306FBF707FF0703FEFBF6FCFDF5F601FBE9E9F4FF0209FE00FDF6FE07090101040A0D120600030002FA02FD03090108FB0406FEFE090F02FA00FFFEFCFE0303F20406FDFDFC06F6F509FE141702FC0605F6F307100C0504021412070C10FAEBF6FAF8F7FF090E05F5C5D6FBF9F1F5FFFF05FEFDF6F1F80101FBFBFCF8F1F3FC0203FC04FEF0FC0300FAF6FF07FAFEFFF8FBFBFB03FDF7FE000504FE0400080508100C0D0D05010803040504FDFBF8FC010403FCF8FF0903FEFB07FFFFF7FFFD03FDFCFAFD07FFFBFF0204050704020001FCFF030202020204FF00FF03FDFCFDFF000307081512090608090203020201FDFF02FE02FDFF00FEFDF9F7FDFCF8F8FE0100FCFCFEFE010006070406FFFFFDF9FBFDFDFDFBFFFEFCFDFEFDFFFEFFF9FD000302FEFE0100050000000100FCFCFFFC000001FFFAFDFDFF00FF030105FE01FAF9FB0206FDFDFE0203050402000001FF05020603020604FF00FE00FFFFFC000004090B121208060805060601FC03FFFF02000201000000FCFAFCFEFBF4FC000200FB02020202040702020A0101FFFBFEFFFEFDFF02FDFCFD02FE03FD0001FEFFFF01010206020600030002FEFFFE000000FB0104FEFEFF0003020504000002FCFCFB0306FCF9FEFD03070502FF0003FD00020704000405FEFEFF000102FEFDFE01090913140A060707070604FEFEFF000101FFFFFE00FEFFFCFFFBF9FAFCFE0301FCFEFE0106040607060C040200FEFA02FDFEFFFEFFFDFB010002FD00FEFD0001010105060405FFFFFFFFFF0101010402000002FE01FDFF0002020202000101FDFB050600FCFCFE0508050404010103040203020204030001000000FFFDFEFF05070A17120B060603050605FFFC01FFFFFCFEFF0103FFFAF8FAFCFBFBFE0100FFFD0000F9020306080508FE00FDFDFAFDFDFFFFFD00FDFAFA0202FFFFFEFA000100030604020500030000FD00FFFDFFFEFEFF00FAFCFCFFFF02020000FF0202020103080100FF0403070803040704FF0102090704030403010403000300010105070B15150B040B0705050302FFFF000100FF000102FEFEFCFBFAFBFFFD00030200FEFF00020207050509FD02FEFEFE03FD01000201FEFEFDFFFFFEFFFDFEFFFF01010402010505FF02FB0001FFFCFC00FFFE00F9FFFBFD0302FFFDFFFE080600191908FCF4010C0708080A090DFF0301FDFFFDF9FC0307EEE6F0F3F8F5EEFBFBF7F7F8FAF9FEFAFFFFFD0A10FF05050609120D0209FC02FE00080E1101F8070301FDFD0001FFF7FEFD05FB05FDF9FEFEFDFDF9FEF9FEF30D0C06040203FE0001070902F9F8FE0BFAFB0100100908040AFE120E0F02060905040202FB050B04FF16170400F5FF0B000803060D07FF05FEFAFC03F8FB0006EEECF4F1F3F0EBF8F9F7F2F7F8FB02F900FD0205080009050A131D140406F80503FC060A12FEF906FB01F9F90203FCF5FEFB08FB04FAFAFEFAF7F4F2F8F9F9F20D0801010103FEFAFC0805FFF3F7FE06F7F9FDFB08FF05FB03FC0A090AFB0408FE08FF05F8000A01F81116FFF5F2F70A030706040D09FD0705FBFB07FBFC000BF0ECF0F0EEECF1FCFDF7F9F9F9F700FF00FF03090A0208080D09171503060008000307101206FD0E0005FFFD0201FDFDFEFC01FFFEF8F6FDFAFCF7F7F9F7F3F20A0AFD00FD01FDFDFC070300F3F2F909F4FB01FC0606030209F80D0708FBFE0401FEFDFCF5FA05F8F5110CFEF2E8F40C03080A070C0C060B00FFFB06FCFA0107EFEBF2F5F7F1F1FDFDFDFFFAFEFA03FCFF04050F12030C0A0D0A18190A0E020D09070B141307000A0404FFFE040400FBFFFE06FC02FBF6FBFEFCFCF9FCF8FBF30B0701080307FEFCFD070500F4F7FD07F6FC01010A06070006FA0D060DF80003FCFCFDF9F4FC09FDEE1111F9F4E8F60E040308090B0A03090701FC04F8FDFE00EEECF0F2F3EEF5FEF7F7F8F8F8FA03FCFDFE000907F706010000140CFDFEF5FFFAFC020B0F01F905F800F5F1FDFCFAF2FAF702F701FBF700FDF4F7F5FCF3F1F30B0702040001FEF8FA0606FDF1F4F909F7FBFAFB090601FD07FB11070CF900FFFAF9FBFBF2FDFFFEFAFC00FEFEFEFC0A04FEFB0202FAFB050200FCFC03FDFAFC0809FE04070307060304FFFD040301F6F901040C0A0100040002FF000A05FBFE01FAF80B0E02FCFCFEFFFCFCF9FFFFFE060A03020400050B0205FE08060500020A0F05000001FFFCFAF9FD00FFFF07040506020504030204070006FCFFF7F7FA02FBFBFAF904FCFEFDFBFEFF00FEFC0D06FCFF0403FE040401FCFBFEFFFCFAFE0607FC0403010707FEFE01FDFDFEFCFAFE00000906020302030307030404FD0002FAF9050AFEF9F7F9FDFAFBFBFDFAFE080902FEFFFE070A070200080703FD070507FFFFFF0400FDF9F8F9FDFEFE05000205020406040202060300FBFAFCF6FBFFFF00FCFDFF00FEFE00FE000302FD0A04FD0202FFFF020403FDFC0102FCFAFD0905FD03040105060302FDFCFD00FCF8FF00070B0804FF03070506070809FFFE03FCFC060CFFF9F9F5FAFEFEF8FEFAFE050E020101FD05080A06000904030306080A0300010000FAF6F5F8FFFDFB0204050104000900040305FF01FBFFFAFAFCFCFEFE00010100FD000301020303010C05FFFE0001FE020B060201020400FDFD0608030604FC04070403FFFF0100F9F9FF0006090802080805070304060AFEFC00F9F8070AFCF8F8F9FDFCFCF9FEFDFD080BFE01FFFF08070907010806050003070700FF060001FBF8F7FB03000004FF050505030B05050305FF03F8FBFDFBFDFFFFFE01FD04FD00000806010303070C05FAFF020200050C03FDFDFF0701FCFE0508FE0206FE03050200FDFDFF0100FAFA01030D08010403030204000402FDFEFCF6F80509FEFCF9F4FAFEFBFAFFFBFD0706FBFEFEFF040C070200050400050307070201030105FCFBFDFB03FEFE020102040505090A0402020504FCFBF8FAFEFFFDFE06FE0302F2F51808EFEF010C1311E2F0110FFDFE0FFCF6FBFB00F1E8042628F3F0FFFD0201F50A00FE09090CF31002FC0C11FCF306FB0917070B01EEFCFB01001322FDED040208F2FE0505FFF5FCFD0AEBF701F80408FC07080801FCF0061504F2F90605FF0C02FD03FAF60C0F031405FF0E0510090006150801F901040714FAF8F5F901EFFA190EF3EEFE09140AE6E50B12F3F90D06FAFCFCFDF3EFFC2630F7EFFCF70307F2080104090A0CEC0F08FC0806FEF8F4F805170701FFEBFDFDF501101BFEF506F80AF8000C01FDF4F2F60AF5FE00F40005FEFC0202F7FBF40F0DFEF5FD0007020A04F9FFF5F30C02FB08FEFB05030C05EFFF080307F70105031DFDF5F60103F6FE150AF4F40605150ADDE8080CEDFF13FFF8080A01F5E1FA1E2BF0E9F9F90507F903FB02070809F70A07FD0007F9F6F9F902180E05FBECFBFDFD01131501F803F70AF9FC060503FDF0F306F9FAFEF701FD00020302FDFCF21014FCF4F7FE06FE05FFFD04F7F40D05FE1404F90706130BF507130405F606070719FFF4F704FDF4FE1609EDF002021A0FE1E20908F1F90EFFFB0300FFEEE5FA2232F1EBF6F30206EF000204070A03F30F09F80314FAF2FDFC02140A0504EFF8FBF8000F1505F4FEF704F0FA0306F8FAF7FA0EF5F400FC0A0605FF0102FBFCF6151407FCFF0205010B0304FFFEF70F08041405070D07110DF7050B050CFC050BFD0DFFEFF2FEFBF3F2190EECEEFC010C07DDE70405EE010BFEF8FAFEFFEBE1F7202FF0EBF1F50005F300FD03020601EE0D05F0060EFCF5010108110AF901EBFEEEF900161E05EDFEF70AF2F40506F9F1FBF90BF9F305F804FDFEF7FE07F7F6E30B18FAF7F9F8FAFCFC0000F9F5EE0DFAFD09080308080809F303100C08020A07FB07FFF1F3F9FFFDF6F5F6F8F9F4F9F9FCFF02FF000102FD07060604FFFFFEFDFBFDFFFD010402FBFEFE0100020404FFFCFFFFFBFBFBFAF6FA00FDFEFCFD0201040404F9F5FC0204030103FD00010605020001060A0702FFFDFF0201FF010605030000020501FE00FEFE01020102FC00FFFBFCFFFEFDFDFBFCFEFAFDFDFD00FEFCFC0001FEFF01FFF9F8F9F9F9F7F6FCFF0103010000FEFC05070705FEFFFFFDFBFBFFFFFF03FF0000FE0103070704FDFA00FFFCFBF9FAF5FAFEFBFBFDFB0002060401F7F5FD0203030203FBFF0408070300040708050000FEFEFF0000010407040102030500FFFEFFFC01030404010100FBFEFFFCFCFEFCFDFFFCFDFFFB0201FCFCFF060100030502000003FFF9F9FAFF0304000202FD0005070805FE02FFFBFAFD00FD0104FFFDFF000001040304FEFDFF00FBF8F5F6F1F6FEF8F9F9FB03FE020101F9F4FB010300FFFFFCFC01040604000105080700FDFE00FEFE0103050502FF02020601FE0000FF04020405000102FEFEFEFBFDFDFEFD00FAFCFCFD03FFFF010105010204090B06040503FFFEFCFD0406020305020005070804020301FDFCFD02020406030100FE010203030001FDFFFEFCF7F8F6F2F8FBF7F5F8FA00FF00FEFDF4F3FCFEFDFDFE00F9F9FF030403FE00040A0401FDFCFEFCF9FE00070800FF02010201FD01FFFD03040302000202FDFEFDFAFDFCFAFEFFFAFCFEFF0301FCFE0201FFFF040B0B080605060600FD02060603030301000608080604040200FEFD02030509010203020304040503FEFD0102FCF9FAF9F8F9FDFBF7FBFC0200030201F5F6FB000001FF00FBFB00040102FF00060704FEFDFDFEFEFE00020506020002010102FC0000FE06030504FF0202FB00FFFCFEFFFDFDFDFEFB02FD00FFFEFB010301FEF70410000607EBEADFFB02FFFB000B0C020F142A1D0D1C0B130C070B0D05F3F2EFFB00FC101A13FBEDC4D700F1F7FA0A0209FDFC0704F5F8F7FEF705FEFDFCEF06FEF2FF0A0403F6F5F8F20003EDF1F1F2E5EDF90109030204070206FDFB02FC0B080EFDF300F8F30304040A0B03FFFB06FEF808F7FAFFF8F404020103FD03F3FC040A040807E5E0E2E9F705F70A0B02FF0C15272411101811100A0D1105F8E4E9E8F9FCFD0D0703F0D0D5EDEFF0FA0DF902FE05F3FBF6F7FF00F7FCFBF5F502FFFC0CF302060803F8F7F6F8FAF9EFFAF9ECEBFFFA000301FDFD09FFF8FF070106FE0A0AF703FAFB07050C0C140EFB00FFFDFB010605020403FA00FEFEFDFCF3F9FF08090802E0CFD3E003F7F30008FC0C141824160F1C1A211B0F0E1409ECE3E8F303FA0D14100FF4C2D4EFEC00F9FAFE02F8FE0205F3FE0A04F3FD00ECF2050406010105000B02F3F0FAFD05F5F6FCF1E6F7FBFDF6F90C00030B0604FE03FFFF0A0A0AF80B040402FA07130E04FA00060502FDF6FF0500F1F410FFFFFCF8FEF1060A070E08F0DADEF4FAF9F7FFFEFC010B172217141220220D0F081213F8E7E7EF0801141B0B02FBC4D1F4F7FFFC0B0905FFF30506F50404080304FCF8FD0701060B0112130EFCEDF9F4FD00F5F2F3E9EBEDFC01070F05FD0606060403FF02080B0713FF070FFF0D000A020E12FBFDFE0102FD030B04F8F1FF060602F805FCF0FF100006F9EEE9DAFEFC0300030300050C0B2722201A100E0808071A17F7E6E9F1F4FB101A1A07F2C2C8E8F2F1FF03FD06FFFCF7FCF5FCF6EFF5EEE9EAFBF704FFFDFAF7F9F8F7FCF5F007FEEAF3F3F0F0F5F1FAFCFDFF020710070706030200FF010D030704020D0908130A0DFCFEFBFF0300F4000AF7F6FC0804EEDDF3EE02FF06FFFAFD0500FF03F7FB030302FBFC01FEFCF9FF04F8FF080003000200FF0405070C0F1A1C1C0A0E070506060E140E03040604020200FF02FCFAF7FDFBFBFCF8F2FCFB02FCFCFAFA00FDF9FAFB00F9040500F6F7FD03FC000501FF0401FCFAF800FDFCFCF8FA040303FCFB06FDFCFE0402F6FCF9FAFDFBF9FFFEF7FAFAFC03FB000000FF03FF0509FCF700FEFB0203FEFBF8F6F5FEFF060802FDFCFDFD05090A04080C1F1A0C010E0A01FC060F10090303FD0307FBFF0503FCFAFDFBFAFBF8F3ECF8F8FBF7F5F6F4FBFBF3FBF8F8F7FE0201FDF801FFFD0504FB0101FE00FF03FDFDFCF8F4F600030204FD060804FF0102F8F6FAFC03F7FCFDFCFCF900FD02F90300FF040508080EFCF70403F8FD0000FEF9FCF9FE00FF030400FA010308090B06080A1C1C18050A060808060E100C08060202FCFDFF0703FEFAF8FE01FA01F8F8F6F901F7F6FCFCF907F7FF01FDFAFE00FBFDFFFEFE070909000800030302FFFFF9FF04F9F6FE08020103060D010805000202FC01040108FFFE0302040103FAFEFBFCFFFC010206FEFAFCFEF9FEFEFEF900FDF902010404FF00FCFFFEFF040203030D1D2114090A090A07FF110F10080706080600060601F8FCF90001F4FBF8F4F6F7FAF5FDFAFA01FFFAFCFBFD00060508F8FEFC00030A0D0802010700040101FE0309020503070708040410050909090203000207080807070602050702F8FBFFFF0001040900F8F8FFF6FD0201020101F6F50504F9FB02F9F8FCFFFE060202000816170E040F0B0603040E0C03FF0902F905FBFE0503F9F5FAFEFAF4FEFCFAF9FCF9FBFFFA000802F6FEFF01FA06010103F9FA040A060604FD0205050402FE04040801FD0302030700050B08030B060401FEFF080E02FF07050A070705070C07090D090601FF030500FF0204FDFCFCFEFFFE03080703FEFD03020101FAFF0306050302010103020001FCFAFBFEF9F9F9F6F7F8FBFFFDF9FDFBF9F4F8FFFEFEFA0100FD0201FFFDFAFA0302FBFAFCFF02FCFDFCFFFE05F8F80101FEFDFE00FB0006FFFE00FE00FFFCFEFDFCF7F8F6FE00FCFDFBFFFEFEFEFC030304FE05070B07090D050400FCFC0300FD0000FDFBFEFBFE00050B090700FD05050200FDFD0605030201010204000104FAFDFDFAFBFDFBFAF7FAFA00FEFD0000FAF4F9000000FB0001FB00FFFFFEFEFB0302FBFDFBFFFFFFFFFEFD0004FBFA0001FEFDFEFEFD0001FF0203000001FC0000FEFCFAFAFCFBFF00FDFFFC01FFFE020201FE030003FE02050400FDFCFE02FEFAFEFEFFFAFAFAFFFF0409090800FB03020200FAFE03010305040503070104090000FF01FEFEFDFEFBFCFF0203020504FCF5FF040805000306040602FD01010006030000FEFE000000FF020102FDFB0306FF0101010006050204050002FF00FE020100FEFF0100020200FFFC01FD010505050501FAF7F5FB0300F7F8FCFB0100FDFDFDFBF7F7F7FEFF0005060900FCFFFEFFFDFAFD030105020207040501040AFDFF0205FF00FF00FC00000407070A07FFF9FF060B09050709050705060302FE05010200000002030201010204FEFC04080102FE000006020002040101FF00FE030300FEFE030002040500FDFF02040B08080502F9F6F1F902FCF4F3FAF90100FAFBFDF9F6F4F8FCFFFC040301FBFDFEFE00FAF9F9FDFF000103040304FE0104FDFEFEFCF8FBFDFDFCFCF90001010604FDF9FF04050303030402010102FCFEFCFF02FE00FBFFFF01FF00000002FDF8FDFF01FCFCFEFD0100010102040201FFFE010200FCFA0300FF030205000202070C070705FAF90108FCF100000000FEFDFD010606FE04040500030404FFFFFDF9FE030805FCFEFFFFFEFEFDFBFFF9FCFDFDFEFE000301020305050502FFFF0003050306030204010303FE020101FF0103030100FF0201040203FF020201FD0204FF00000000FF0101FCFCF9FDFB01FC0000FCFE0001000100020200FFFF00FDFDFCFDFBFFFBF8040BFEF404FF0202FFFFFB00060A0101FF03FD000401FCFBF8F8FD030904FDFDFBFEFFFBF9F9FDF8FAF7F8FBFD00FF00FF000203FFFBFDFEFAFDFEFD01FBFE010001FFFD02FFFDFD0100FF00FDFE0100010201FD0100FFFD0100FEFDFFFFFCFE0001FFFCF8FBF9FEFAFEFDFCFC0000FE02020201FEFFFFFDFFFDFDFBFBFDFBFA040CFEF200020101FEFFFF00050700020304FEFE0301FEFFFCF8FE050603FCFE0100FDF9F8F9FCF6FBFCFAFCFE0200020200010300FBFC010001010000FE0101FF0001FB010101FF010001040301040203010401040201000304FF000101FE00030200FDFAFDFD01FE0100FE00FE040000010303010203FF03FEFFFFFCFBFBF90109FCF2FD030400FDFFFD01050700020505000003010000FBF9FC020903FAFC0001FCF9FBFB01F7FDFEFDFF0204040504060709FF0002020203040402020205030403FF05030403030306070502070608090401040402000303FF0203020103020103FCFE01FF000103030200000202FF0106040001040001000003FFFEFBF8FF06F9F2FE000201FCFBFBFF0404FD010303FFFD0000FDFFFBF8FF020503FAFBFBFCFDF9FAFBFEF6FCFBFCFC0100010303020002FEFDFFFEFDFDFFFEFFFD00FF0101000003040100020103070100030202020200010303FF0003000202030001010100FCFBFFFCFEFE03FFFDFDFF00FF01FE020401000201FFFEFFFDFEFEFCFB01FCFFFC040902FD0103FEFFFF0200FD00010404070802FDFFFD030401010103010101010202010201030102FD0002020201FBFC000104050202FFFDFE000202030201030107070700030405020808080A080A0906100A0F0409090B080A070B0B040A0D0D0C0F060F0A090504040101050502070305050608140C0B0B12FBFD01FEFEFD040704FCFE0203FF030201FFFE0203020606FEFDFEFF040202FF03020302020200FF000000FE0001FF00000301FFFCFB0001040202FEFFFFFFFF00FEFF02FF02FEFFFF01FF040002FF03070207040606040E0B0B01060705050605080A02020804070A0209080501070201020404FE03FF020004050F08050710FBFEFEFEFDF902070401010100FF000002FF00FF020204020000FFFE0304020102FF02000102FF010000FD0101030003000203FCFBFA02FDFC0200FBFCFCFCFF0000FFFFFF01FFFD00FFFBFDFDFEFDFE010100020304FF090603FE00FF00FD03010201FBFF01FF0102FD000300FE0300FDFBFFFCFCFDFEFBFAFFFE0601FEFF00FDFAFCFEFCFB030403FFFF0302FF020201FE00FE02010202FEFDFDFD01FFFE0002FD00FFFDFFFE00FFFFFFFD01FDFFFDFE0303FEF9FC00FD000002FFFDFDFCFBFFFF01FFFE01FFFDFDFFFAFFFBFEFDFEFEFFFEFF020201070000FEFCFDFEFBFDFDFB00FBF9FBFAF9FBF7FC0001FCFEFCFBFBFAFAF9FAFCF9F4FAFEFDF7FDFCFEFCF9FDFAFBFBFF0406FD0100000102FFFF000000FEFE0000FEFBFCFD000000FE02FDFDFEFCFCFCFEFEFFFCFEFDFDFCFAFCFEFFF9F5F9FCFCFDFDFDFBF7F8F7FBFEFBFAFBFBFEFAFBFAFDFCFDF8F9FAFBFDFDFAFBFE00FDFFFAFCF6FBFAFDFBFBFBF8FCF8F6F7FAF7FBF6FB00FDF8FBFAF7F8FCFAF8F9F7F8F6FAF7FCF7F8F7FD0820F7F3ECF5F3EAF40FF9F3FC02090C051201F7F2F9F8FEEDFE0104FDFF150DF2FFF8F0F3F6F8F102FA0BF5F3030A0100F8FFFF0E09FAF8F201F7FB02091EF7F905F902FEFC040AFAFF05060DFE0F03FDFC0202FEF3FD0100FB111604000103F9FAFD0009FEFAF9050BF90401F000FFFEFA07F41900FDF7040602010D08FEFF081BF5F1EFF7F2E8F40AF9F7F706070A061706FBF7F9FEFAF2FCFE01F9FE170EFA05F8FAF9FAFEF100F90AFFF90612070001FF040C0CFDFDFD01FBFA03112002FC09050300030A09FB0009090F03040202FD090400F7000802F9171708FF0006FB02FC0707FCFFFC0605F80704F9FEFEFDFF05F815FDFBF500F8040406FFF7FF0D20F3EFE8F7F4EFEF0CFCF8FD050D02091709F9F6F8FCFAF4FB01FEFAFE140FF901FBFBF8F5FEF4FCF705FFF702080308FFFC06120CFEFBEF00FAFCFE0B1F02F9050404FBFF0400FCF706020BFF0304FBFA01FE00F5F903FEF8121005FF0304FAFAFAFDFEFEF5F5FD06F6FCFDF802FDFEFB08F5100402F4FEF6FE03FEFEF8FE0526FDF0E7F5F7ECF30EFCEDF6030507061707F9F3F4F5F9F6FEFEFFFAFD120BF0FCF9F8F5F1F4F2FDFD00F3F10003FC03F9F8FF0E10F3FAF3F9FEFB01071FFCF302FAFFF2FC0501F9F508020AFF08FFFAFDFDFFFBF1F300F7F80E1100F9FEFCF9F8FAFDF5FBF5EE0005F0FCFAF6FEFDFBF70BF8120100F3FBFA00FE01FDFA000626FCF9EDF6F3EAF210FDF9FC0107040A1800F7FAFC00FAF1FE0300F8FB120BF805FDFBFBF9F7F702FB08FAF60410090D06FE0708130302FB0702FF000D2302000C0207FC06060701FD070B0E0809090002060408F8FE0501F9141405040707FF010002FDFEF8F5FE0CF90500FF0504FE0109F2140101F4FAFCFCFC02F8F703FF02FE01FDF7FDFF0101FF00040301030607060402FF0101FFFE040200FFFFFF010303FEFFFEFCFDFF01010202FEFF010504000102020402FEFF000102FF0000FEFEFCFFFCFCFEFDFCFFFDFE01FFFCFBFEFDFEFF0004040304FE02010105040304030203020105020301FCFEFEFEFE0100FFFCFCFEFF04FCFD00FFFFFDFBFCFF0002FC02FFF9FDFE0101FEFF030201030605040601FF0300FAFC010500FFFFFEFD010201FFFDFDFEFF0201FE0000000104060201FF020201FEFF000202FEFFFFFEFEFEFEFDFD00FDFDFEFFFFFFFEFCFC01FF00FF000505040201FF030304040003030204040000020000FCFFFEFEFE00FEFBFEFFFCFF02FDFDFEFDFAFCFCFDFBFE02FE05FEF9FCFE00FDFC000104030202020404FDFDFF00FFFF0206FFFCFBFCFE00FF00FDFCFBFAFD0001FEFEFD0000020201FE01020200FEFEFDFCFEFD01FFFCFCFBFCFBFDFFFCFBFDFEFF00FBFCFDFFFF020001060603030102010307060404050302040103050403FF01FFFFFCFEFDFBFFFDFE0101FCFCFFFFFAFBFBF9F900010206FFF8FEFF00FDFBFF0300FE0206FF0001FEFD00FFFEFD02030100FCFE00FF0100FCFBFAFAFFFFFCFEFFFE01000203FF000000FEFEFBFDFEFFFDFDFFFEFCFAFAFCFAFAFEFAFDFDFD00FFFDFBFCFF0102FF03060601000203040509080405080506060608050802010000FFFF0100FDFD00FF0101FEFD010100FAFCFEFFFF020103FDF9FE0002FEFCFCFF00FCFF01FFFF00FEFD0102FDFE030300FFFBFF02FEFCFEFEFCFCFBFE0001FEFEFBFEFD0004FFFD00FE00FFFBFAFCFBFFFEFEFEF9F9F9FBF9FCFEFCFCFCFE00FEFCFBFDFF0202FF03060505020603070B080908070909080A0809080805030200FD00010200FF00020403FFFE040303FFFE0003F602010800FF1222240F040001FE030615171A1B161204060D0901F6EEFC090F0BFDFB000CFF02FFF5E1E2FAF9F7F3F8FCFAF5F9F7FCFFFAFFFD000400FB000101070905060304FD05FAF0FBF9F9FD010802FC080604FAF903F8FC00FD0000F3FCFAF9FBF5F8F6F1FCFFFCFDFEFC0300FCFEFBF8FCFBFB00F7F8FE00F9FDF503FCF5FB01F9F91A2C2B120C0501FE050D1313151A110D03FC05FEFDF1E9FD05130A02040A09090B03F4DBE2FCF9FCFC0003FDF2F80300FB05FC0302F9FAFC0002FCFF030A02FC080104FFF8F9FE00F6FE050205040004FCFFFDF9FA0100FFFF00FBFF0302FD03FDF8FB0201050304FEFF070B0504F8F8FDFBFAFB01FFFFFDFDFAF2F2E9F5F8FB102A2910FD0508FCFF070A101A211406F9FBFEFE00F1EAFA060E0F00060C05FBFE00FBD9E50101FAF6FFFDFAFEFBF9F2F4FCFCFDFCF6FCFD0200FD02FFFCFF00F5F8FBF8F7F8F5F8F60606010209010607F7FCF6F702020109FEFF060906FFFDFBF8FF080702040204FE0503FC00FBF6F802FBF907010201FCF7F7E9E1EAEAF6081B2306F3FA02FCF80C0C0E15121308FAFCFCFAFCEFE5F7060C09F9FEFE020605F4F2E3E4F9FCFBFBFEFCF9FEFDFA00FAFD000207FF01FF0102FCFEFFFFFAF801FE00FEF5F90302040408FAFD05FDFBFD0307FFFFFC02FE00000201030104FDFAF4FF080B0A0A05040A04090402FE01000602FC03030502FE02F3E8DBE7EDEE03141A04F7F707FCFBFB0509080E0E03F4F5FBFB03EDE4EFFC0804FBF50007030000F6E3E9FC02FCFCFA01FEF7F4FAFAFEFEF901040400FA0203020504FC07030501FEF7FAFFF6FFFEFB04FBFB040001FD000100FC010902FE03030009050001F9FCFCFD080208010202040205FE000006FDFFFF04FB01FEFD031312F7FD00F8F9EDFCFEFBF9F9F5F4F5F6050C070101F6EFFCFAFF130E0801FDF7FBFB01FB0004FFFF000403090A0C01FFFFF9000301FEFEFC03FF0206060000F7FFFCFEFFFBFFFB00FBFBFF00FAF3F4FAFCFEF6FEFBFAFAFCED0702F305FD00F6F7F6FE08FAF7FAF8FEEEF7F90603FB02FEFC0B070B100B070300F4FBF9FFFB121BFB0003FCFAF2FAF8F9F6FAF8F7F3FE0607070105F1F3FD000614110A0A04F80002FFFE0301010504060C151013070B050405070807090706090C0A090404F909030900FDFEFF0502FF0409FBFDFD0302000201FFFCFD03F40E08F8070004FEF9FFFDFFFFFBFDFC02F7FD040D0B090B06FF0607080A09050701F6FEF7FDFE1616FC0400FFF8EDF4F8FEF6F7F9F6F5FD060A0E0301EFEFFB01011410070A03FBFF0203FF080B040305070C0E0D0D04040005FF0004FE04010205070404FD01F706FA0903F701FF0303010A06F8F6F2F9FAF4F6F7F6FE01FDF60E00F106F801F9F6F900F9FAF8FBF506F2FDFF0E02FF0100010507070908050A05F1FDF9FAFE1715FA040604FFEEF7FDFDF3F704FCF5020506070502F1F2FFFA00100F090A05F5FF030001070607070407030A0A0D0200FCFDFE0101FAFBFF050309070AFAF8F8050103FEFA01F9FE02FFFFFFF3EEEEF0F5F9EFF4F5FBFBF9F40FFBE8FEFCFAF1F0F0F7F9F5F5F2EDFAECF1FA0A01FF04FFFE05080A0C070A0201EDFF01FCF91716FBFE0401FEEFFC01FDF7F801FDFAFF07080A0504EFF805FF03120B070E04FEFFFD02040707020707070D180D110C050304020A03FF000608080B0A0B03010008040B050004FC04FF010009FFFCF6F900FFFAF7FAFAFCFAF912FDEF04FF05FEF4F5FD00FBF9FBF509F6F6000E08060DFF01080F0E0A09090801F3010302040204FDFAFDF5FEFBFBFE0003FF03FDFAFE0102050202070302020201040200030208050306060103FDFD00090606060203060606030207010101FFFDFE0101F9F9000001FEFCFAFBFD00000102FDFDFCF3F9FBF7F8F6F7F9FCF5F7F9F5FAFDFCFCFD050004FF030205030200030608070C060A1111130D0A17100C1416130E0EFF04FEFDFEF8FDFAFEFD0102FF010201FF0103080507050501FF030203080804FE020306FD01FCFCFF00030A06060505060501020203020205FFFF0103FFFAFBFEFBFAFFFDFC00FB00FEFBF9FBFBFEFBF5F9F2F6F8F7F6FCF9F4F6FAF8FAF7FCFFFEFDFF05F7FE03FFFE04000005090E120A050D0D130B0D18100C1517140A0BFC01FBFEFBFDFCF8FBFD00FF00030402FF010200FC000102FEFFFD0202040404010402FFFFFE0204FFFD010807020002FE02FFFAFCF9FCFE01FFF7F8FCFBF9FAF7F8F9F9F9F8F9F9FCFDFAFCFAF6F6FAF5F5F6F5F4F6F6F7F8F3F6F8F6F5F3F9F902FAFC00FEFE050001FCFB0307040509070D110F10090F15170E1311110D0E01FE0000FFFC03FDFE01FF020001FFFD03FFFE01FE010603FF040300030402FFFE010501FE030001FAFEFF01FFFD00FBFF03FDFEFFFEFDFBFEFCFA01FFFDF6FBFCFDFAFBF7FAFAF8FEFFFBFAF7F5F5F8F7F4F3EFF2F9F7F8F8F3F9F7F4FAF7F8FBFBFF000402FF0301FDFEFAFB0A070C0E0709110C100D0E18141313161612130105050101FD00FE0500FDF902FDFC000103FF0300010200FFFE00FF06030406060203030503FEFBFEFE040403040404010203FEFF04010202020100FE03FD00FBFDFCFDF8FCFF03040101FE00F9FDFCF9FCFBF6F8F7F9FDFBF7FBF9F2FAF9FEFBFEFEFE05FE0106010502FF03040C0D120C0A1612130B121A19131914161615FF0305040101010201050404FFFD020704050405090A0B07030102FFFE0303050402000002FEFEFF020400FEFDFDFF00030604FEFCFC00FFFE00FD0302FFFCFEFD0201000001010202FF01FFFE0401FF030103030505010102FFFDFBFEFFFFFB01FFFD020001FDFBFC0404020505070602020303FE010202FDFBFCFAF7F7FBFA01000302FEFF01FEFE010203FEFE04040404010305090903000103FFFEFF00030601000101FEFFFF020602F9FBFBFCFE0101000300FBFEFFFD00FDFEFFFEFCFCFE010100FEFE0002FF0002FFFC0301FE01010304020201FF0000FDF9FBFCFEFAFDFFFE02FEFEFAFBFA01010002030302FF000401FFFEFF00FFFCFEF8F8F9FBF900FEFEFDFAF9FEFCFCFFFF0000FF01020102030207070A04000302FDFDFEFF01020101FE02FDFB00010500F9FBFBFC0102FF0100FFFCFDFBFCFEFF0100FCFBFEFE01FF000100FE02FEFDFEFCFB0201FF0202010203030101FDFDFAFAFCFBFCFAFEFD0001FEFBFBFBFC0101010202030300FF03FF00000003FCF901FAFAF8FBF8FEFEFFFEFAF8FCFAFC01FEFEFFFDFE030201030109090704010002FFFBFFFF0203FFFDFDFFFCFDFE020503FBFCFCFDFF01FFFF00FFFFFCFDFE03030101FDFAFDFF030201FF000100FE01FDFDFE0402020101040304050402FCFFFAF800FDFEFDFFFF0105FDFAFAF9FCFE0204080705070104030100020101FEF9FBFAF9FAFBFBFFFC00FEFEFDFFFCFB02FFFF00FD0101010303020506080702FF02FEFD00FF000200FBFF00FDFEFF000502FEFDFDFF01040201FEFDFDFDFEFC01000100FDFBFEFF03FEFF00FE0001FDFFFE00FC0201000502030305050302FEFFF9FBFFFEFFFCFEFD0005FCFCF9FAFDFE03060506050602FF0602FE0202FFFCFAFBFAF8F8FAF9FF00FF00FE00010304010403050100050703040101FDFFFFFBFF0301FD0000FFFF0005080603020501FDFE030503020100FFFF01FF010208040104040401FF0609040302080503FF020401010000FEFE00F8FD0202000001FDF8F0F0F6FAFDFF0202FCFFF8F8FDFEFBFAFDFF00FF0204060602FDF8F9F9050B090904060708070100FDFAFC00FF0504010203050101040401000000FEFFFCFE00FE0000FFFE02000108050603040300FEFC0102FE0102FEFCFD0001010704010107050300FF030505040706020304020500020201FEFDFDFBFFFCFEFEFCFDF9F8F2F1F5F9FCFFFEFEFDFDF6F80001FCF7FCFD02FEFF02030500FBF8F9FAFF0506080405060407FF00FEFCFD000002020003040403020301FFFF01FFFDFDFEFD0000FD00FEFD00FDFE0507060400FE00FEFCFF0202FFFEFDFBFBFAFAFCFF010101030102FFFAFF0208030003030204000100FE0100FD00FBF9FBFEFEFE0101F9F3EBEEF7FBFC00FF020000F9F7FE01FBFAFAFD01FFFF02FF0303FBF9F8FBFE020504070505050502FD0000FF0201FF00FFFF020805020604FD0001FEFAFCFEFEFF01FE00FFFF000001020604020102FF02FCFC0201FC00FFFCFBFCFCFE00000104070602FCF8FF03060403050102050405010200FFFDFEFBF6FBFE03FCFFFEFCFAEFEDF7FBFFFEFC01FFFFF6F9FCFBFBFAF9FE01FC0305000201FBF6F7FBFD03030605060504010101010101040303020101050605030505000102FFFDFBFEFEFF0101FEFC000002000307050301030000FE000500FCFEFEFCF7FAFEFD01010102060603FDFBFC0207030304030502030201FF0202FFFCFCF9FBFF01010000FDF9EDEFF5F9FEFDFE00FFFCF2FBFBF9FCF9FFFFFEFB000300FE04FCFAF8FCFF000405060805020500070100F8F3FCF9F8F6F7FAF8F900FDF7F3EEF0F9FFFFFFFAFE060402FD0200FBFDFB01FFFCFCFB00FAFBFDFCFBFDFAFEFEFCFB00FF0603FBFDFCFDFCFF0302FF00FCFFFFFDFDFFFD02050200FDFFFF0005060403FE010200010203030400FF000003030302FCFDFF01000102FE0002000301FF02010001FF00FD020000010700060401F7F3FEFAF9F6F9FEF8FBFDFCF9F5F1F1F9FF00FFFB00040601000401FBFFFE030200FDFB00FBFBFAFCFF00FFFEFFFEFFFF040403FEFFFF00FF040606010402FF01010105010407040101FCFF01020503FF00030503FF030202020002FF0003020303FDFD000000FF00FFFD01FE01000202FF020201FEFE01FFFEFD0600070102FAF6FDFCF9F7F8FFFBFBFEFEFAF7F2F5FC0200FBFC01060700000101FFFEFD030200FDFDFEF5FAFBFBFD00FE0102FFFE02020402FCFFFF00010207060202FF020000FFFFFF0105010000FF02010403020202FF0104FF0203050001020102FF020303FDFC000204FF0200FFFE0101FF000004040101FDFEFFFE00000300090303FCF7FFFEFDF8F9FBF9FBFAFEFAF5F5F9FB0100FFFDFF030302030302FDFDFC00FBFEFFFF01F8FBFAFBFDFCFDFE01FFFEFF00FF04FDFBF9FDFC010301FDFEF8FCFBFCFAFCFBFF01FF00FF00FD0002010000FEFD01FEFA020201FFFDFBFE0201020202FBFBFF02000102FFFDFCFD03FEFEFF00FE0101FDFCF9F9FCFF01FE080503FBF4FEFCFAFDF8FDFBFBFFFEFCFAF9FAFB00FFFFFE03050806000405000202010300010104F9FEFEFF0203020502020001020204FF00FE01FF0406040201FCFE0200FEFFFD0106040401FDFC010201000100000001FC02030204FD02030201030403FCFDFE030101040100FF010300FEFE010000FFFFFEF8FAFAFCFF0000FE02040404020203FFFFFFFF01000100FEFE01030000FEFF0201FEFE0101FFFF00040300FF00FFFEFE00010302FCFEFEFFFF0100FFFFFDFCFEFFFE0302FF000100FFFEFF010202000200FFFF0200FD0201FFFEFEFEFEFD000101FE0002020200FF00020100FF0001FFFEFFFEFEFE00FF00FEFFFDF9FF0202020204050100FEFFFF0203030404030200FFFEFE01FF000100FE000402FFFFFE0100FF010101FFFF010602FEFDFFFFFF0101000200FCFDFDFEFCFFFEFFFDFCFCFDFDFD0001FEFDFEFDFEFDFCFE00010100FD01FF00FEFE00FFFBFE00FEFBFB000303FE010202040100FF01020202020200FEFEFFFEFF01FE00FDFFFCF9FE0003030205050101FFFF010303050606040400FEFFFF00FF0103FFFF02050001FFFD01020000020101FF000301FFFFFEFFFEFF000001FFF9FCFEFCFDFDFCFDFCFCFBFBFBFD00FFFCFCFFFCFDFBFDFE00FFFFFFFE00FFFFFEFF0000FEFDFFFFFCFC000102FF0103020402FF00020102020000FCFFFEFE00FFFFFFFEFEFEFCF9FC0001000505040201000001020405060404050002000201FF0003010001030101FDFE0201010001FF0101010202FFFDFEFD0101FFFF01FFFBFCFEFDFFFFFDFEFFFDFBFDFCFD0000FDFCFFFCFDFCFCFC01FFFE01FD010000FF010000FDFEFFFEFEFF0002020003020202020001030302010202FEFFFFFEFFFFFFFF00FEFEFCFCFF0102020507030102FF0000030403030404030001000000000102000001030100FCFD0201FE0002010000020402FFFEFEFE00FF00000301FCFDFDFDFFFFFEFEFCFCFDFDFEFE0101FDFEFFFCFEFDFCFDFFFFFFFFFEFFFFFEFE000000FDFDFE00FFFEFE0101FE0002000101FFFFFF0100000101FFFDFFFF00FF00FDFEFDFDF9FBFEFF000202040300FFFDF7F6FDF4EEF8F4F6FAFBF9F6F7FDFEFAF8F7FDFB0401FAF9FD0303FBFBF8F7F9FDFDFBFE0100FDFCF1FAFF030504FDFDFFFDFF020003FE0202FE0005070901FD0302010000040200FFFAFBFFFEFEFDFD00FD020103FEFD00FC0803000100040207030603FFFDFD0108FEFF02FE00FE01FCFE040604030400FCFFFC00F8FBFD02F8FB01F9F8FAF7F8FBF4F9F9FBFFFBF7FCFBFDFD0100FEFAFB0601FCFCF9F8F7F9FBFDFF02FDFEFFF3F902000105FFFAFDFBFBFCFCFEFBFDFDF9FBFC000501FBFE00FFFCFDFEFCFEFBFAFCFCFEFCFF0200FDFEFE01FEFCFFFC0502FFFDFCFDFD00030601FCFCFFFF03FE0001040204FFFE02040602020300FFFDFBFEFAFBFC00030A0D01FC01FCFCFBFBFDFBFF0501030301FEFD0100FFFE030302FDFEF7FBFCFE03FEFDFFFEFE00F3FA0402060600FFFDFCF8FAFDFFFBFEFDFDFCFF05020302FE0003FCFD0200FDFEFFFEFDFDFEFDFDFEFFFDFDFFFF00FBFB04020200FEFD00000105FC00FE00FD02FF030200FE00FE010205030303FEFFFCFFFAF8FAF6F8FD08121205FE07030503FCFF0305050404070200FF0206040203070301090201FFFF0303030502FF01F7FB0703050C090202FDFCFEFF000103080806030608050501030700FF05040000FEFE000001020102010101000100FF0104010001FEFE02FC0204FEFDFA00FCFEFBFF0100FC00FF0001010100FEFFFBFCFCFAF8FAFAFB0307121005000D090A05FF00FE070907080705FF02040909FF040501070A0202FE02060804010300FFF6FA060301050301FEFAFAF9FFFDFEFEFF00FF0401030205FE0102FBFC04FF01FDFBFCFCFDFAFFFEFE03000100FFFBFEFCFFFF05010000FE020304FF00FBFDFF02FD020002020200FF0201040305FFFCFFFEFDFBF9FCFD0402FD000305FFFCFEFF03030505030301FE00FF010001060503060805030500FF02020101020202050204FF00FFFEFDFDFAFCFDFFFFFBFEFF0100000100FF01030101FE02010202010300010403050100FD0000FDFEFDFEFDFDFBF9FDFDFEFCFCFDF9FBFCFAFBFEFBFBF8F7F8F6F8F8FCFAFCFF02FDFA010105FFFE030203FF0403FBFD0305FEFEFEFF01030505040402FF03FF00020307070603070904020101040600010302030502020102FEFFFFFBFBFFFF000100FFFF020203010101010205020003010105030303020706050300FF0100FDFEFCFCFDFDFEFCFBFEFEFDFBFCFBF9F9FD00FFFEFDFAF8FCF8F6F8FAF9FBFE02FEFE00020501FF010301FF0404FCFC020400FD00FE0303030404020102020103040508080404070A0504020104040102060400040503020300FEFCFFFCFEFE0001FE01010202030301000203080402010204040303040208070505000000FEFCFEFFFFFDFDFDFAFEFFFF00FDFDFDFFFBFEFFFFFCFBF9F9FBFBF9FCFDFFFDFF01FFFDFE0102FF00020301020403FBFB000500FAFCFD010303060402000103020305040608050507090503010106050203030305050403010301FDFFFFFCFCFD01FF0000FF0302030000FF0301040302030101030305030306040402FFFEFFFEFFFDFDFCFDFEFCFBFCFFFEFFFCFEFCFDFCFEFFFEFCFEF9F6F8F8F9FAFBFAFCFF00FEFEFF0001FFFF020001FE0603FAFBFF0600FAFAFF0105040404020100020103030002070403070703040002040301020203020403010001FFFCFBFAF9FAFD00FDFEFCFF000001FFFCFEFE00030002010002010302FF000505040100FDFFFDFEFDFCFDFBFBFDF9FBFDFDFCFCFDFBF9F9FDFDFCFCFEF9F5F6F8F6FBFBF9FCFD01FDFEFEFD0001FF02FFFDFD000000FA0606FCF6F2FF0A06F7FB0102FA0B2427150C09070AFF0200FE02FFFBF9FDFDF5030907FBFDF0F5FDF7F9F3FBFDFDF7FD02F7FDFCFCFBF7FDFEFBFCFDFFF9FA020608070701FEF6000B00FE030C000404070D050301FB030A0501FDF100FFFCF9F800FCF601030703FFFBFCFF00FEFBFAF6F9FCF6F600FAFEF9F1F6FC030003F90005FDFBF9FC0A05F7FC0802F9001C2B1D0F0900FEFCFE020501F9FAFAF9FEFC00120D0B04F8F4F8FCFEF9FD00FDFA0606FDFE05FD02FC01FFFC0005FF01050204070C0B020704080C0302010C030814050A070503020108010203FBFC000406FDF600FBF8FEFFFBFEFFFBFBFA000002FCF9FBFEFCF4FAF6F3F5F7ED06FDFCFCFFFFFDF5F3F70302F8020906FD082121150C0E09040903FC0002F9F5FAFD0302070A0A04F7F3F6FAFBFDF0F9F5F9FE00030301000001FE0401FB0005FE01FF0300010603FEFF00020803020108030405090C0D07FFF90002FDFF01F7FCFD03FCF4F8F7F6FA010301FE02FBFDFF04FFFA01F9F9FCF0F505F6FCF6F3EF09FBFCF8FC0300F3F6FC00F7F4FF02FFFFFC1119120B070600F90602000302FAF7F4FAFBFE0706F9FAF2F3F8FAFCFAFAF7F2F5F302FFF9FFFF03FEFDFCFAFAFFFD0100FEFB0006F9F801F8010CFFFE0004FD0A0A04090603F6FAFDF9FAF9F7F5FCFBF9F8F3F5FAF900FA01FD0004F805FCFFFF02040600FCFE010201FDF6FCFE08FB06FBFD05FCF9F0000000020302F8FA050F120808FEFFFFF8FFFE02FFF5F5FFF7EEF9080504FCF8F4EFF6FCF9FFFAFAF7F5F1FBFBFBFAF0F9F9F8F4EFFDF8FBFBFCF9FBFDFE00F9F9F70700F6F3F807FFF9FF0201F8FDFBFDFCF9FFFEF9F6F9F7F9F8F8F4F8FBFDFCFE020109070903FF06010406090100030AFFFBF0F8F902010203030504010100FE000302FF0101FCFEFFFDFC000201000000030200FF000504FFFD00FFFD0101FF00FFFCFD01000001000200FE03030301FDFEFCFCFDFFFEFCFEFCFBFDFEFF0104FF00FE0200FBFBFBFBFCFCFEFFFD02FF0006FF00FDFD00010100FF0000FEFDFDFEFBFFFDFEFDFCFCFE020100FDFF01FFFFFDFFFFFF00040202010304010201FFFF010101010100FF0000FDFF030302FE00030201FF030804FEFCFFFEFDFFFE00000100FF02020201020003FF03030300FFFFFDFEFE0000FFFEFEFDFDFFFF01020101000403FCFCFDFEFDFDFF020002020206FF01FFFD00030202FEFE000100FEFFFFFEFDFFFDFCFE00010000FEFF00FEFEFDFFFF00000200FFFE00000003000100FE00010100FFFF00FEFEFF000200FEFE03030100010604FEFDFFFEFFFF010100FEFF01020200030201030003040300FFFDFCFDFBFEFFFFFDFFFBFE000103020103000502FDFD00FDFEFEFE010003020307FF01FDFCFF020003FF00FF00FE00FEFFFFFF01FFFDFD00000201FE0101FEFEFE01FEFEFF02FFFFFFFDFD00FFFF0200FFFEFF010000FF01FEFCFE000200FEFF02010100010604FEFEFF00FF000001000202FF02010001020202FF030301FCFBFCFCFDFEFEFEFDFE00FCFC00FF01010203010203FEFEFDFF00FF0002FF020105070203FCFC010302030000000001FF00FEFEFDFFFEFDFDFEFF0000FE0002FF00FDFFFEFC0001FDFDFD00FEFE00FEFF01FFFF000300000202FDFD01000100FFFE02020202010606FFFEFEFFFD000100000101000303030504010401060501FFFDFFFDFDFDFEFFFEFD00FEFC000103030204010303FFFFFFFF0000000200020005040102FFFE02020301FE01FFFF00FEFEFDFEFE01FEFEFEFF0100FE000001FDFEFEFFFEFDF6020403010306020206FFF902F7FAF9FCF9F10100FBFAF6FF04FFFBF8F6FCFEFEFCF8FCF8FF03FEF8EFEFFDF6F1F902010201F9FEF8FDF9F7FAF6FBFFFD0102FFF8FBFEF9FFFDFBF8F2F5F6F4EFF0F7FFFDFA00FD03FB00FDF6FFFCF8FFF7FB00F7FEF6F6F9F4F4F6F6F6FC010200020907020404060309FDFD06FF0302FBF4FAF8020A0E0605020401FD03FDF9FB0007FA010506FFFF03070901FEFC00010201FCFC03030406F9F7F3F002F7F7FF03FB020005FF05F90409FAF6FAFEFF0005FDFD00FF010103FBFDFE03F9F8F7FCFC0008FF04F8F800FC08FE0902FCFFF40801FDFDFA0709F8FAF6FBFCFFFF0300FF0602FF070106FE0D01010AFF020104FBFBFA060002FFFE040704F7F7F7F6FD0100041014100C03FB060406FBFFFCFA02FAF5FC0002090705FBF0F70CFEFB08090405040C02FAF1FE05F9FAF5FEFEFFFD040003040305FCFA00FF02F9F6FE020400060205F8F2FE0112070E05F9FAFA0807FEF8FA0207FEFCFB0100F70109070107010405FC01FC120A020900060704FFFBF8FFFFFDFB00040700FCFDFAF9FBFBFD0B121A0E0B02010202FFF8FC04FAF5F2F0FCFEFE0801FDFFEEFC0906FF06110707120F00FDFA040D00F8F7020303060D080C0C09050906070507F7F504080C0807040DF8F400FB0C0D07FAFA02FE0B0709F9F8FB0906FBF700FBF7080503050500FF00FD06F904030304FD010301FFF6F7FAFCFEF6FA020A05F7F9FBF3F8FB05080B16090603FFFEFEF9F9F9FCFCF6F6F4F900080B0800FDF70405FC010B0A0D0E0F0AFB04F9010903FEF7FB0000020D050C080C090C0905030E03FB000002FF13090600F7F7FB0F0B0A05F4FAFD0A090AFCFAFBFEF9FDFB00FAFE0305FCFDFE0204FAFBFDFAFE06FC04FFFAFBFCFAFF060603020203FDFFFEFC01020502FC000200020001FE0100FF0303030300FF000301010503FDFB01F5F80201FEFFFF000001030707030202030704010100010201FBFDFEFEFFFDFCFBFAFD00FBFCFD0500FEFD0102060500FF0101070803FE020308070800FC0401FFFC02FAFCFDFAFDFFFFFC050200FBFAFCFBFBFCF8FBFC0106040300FE02FE00FDFE010104030200FFFEFE00FDF8FC0104030301000202030400030302FFFEFFF8FCFEFCFDFD0000000001000401000202FE02000102040002FFFE01FE0001FEFEFCFA00FFFCFE02FEFDFAFE010200FEFDFD00050705FFFFFE05060900FC0201FCFA01FCFDF7FBFEFD00FD050201FCFCF9FBF7FAF7FBFCFF05050400FE03FC00000202FF01FFFDFFFCFAFDFBFDF9FF02000602FF0000000100020402FEFDFC00F6FA01FFFF00FFFF0201000102FE0001000002020200FFFE02FCFBFCFCFFFEFEFEFCFC00FBFD00FFFDFFF9FAFC00FDFBFEFC01060302FEFD04050506FDFE00FAF9F9FCFCFAFAFDFD00FF02040401FEFCFAFAF5FBF9F9FDFE07020001FEFFFC010101000002FFFFFFFDFCFCFCFEF8FB0201000200FFFE00000102030101FFFD01F8FC020200000203050301020601010203010304040403FF01FEFEFFFCFFFDFCFCFCFD00FFFFFDFBF9F9F9FCFDFEFBFBFEFFFE020200FDFF01020207FDFE01FCFDFCF8F8FDFAFFFF040101030300FBFDFDFEFAFCFAFAFC0008020001FF01FCFFFFFE01FF01FEFBFEFEFBFBFF01F9FC00030102FF000201FD00010003FFFEFDFFF8F7FB01FE0001FF020102040305040302030205030300FE05010402FD0102FE01FF0203FFFEFC01FCFAFDFDFDFAFCFDFE0001020600FEFF02050305FCFE01FC00FEFEFCFCFAFCFD01020103030501FFFE00FCFDFAFCFEFE02080F00000D040DFFF21005FBFF090404090F04080FFFFA031007FC0B0301FC030711FCFC020C0804FB100F11090612FFFF00FA08FE10FC07090301F0EEFE08150AFC0A0E02F6FB05FE0C050D0AFAF6F3FA00E7F7F1F1EEF6F4EBE2E9EAF5E5DDE8E5DDE0E4E3E2ECECDFF2E0EEFAEBF2F0F1E2E6E0DBDAD4D1CECFE7E4DDFFFC0807F7040EFF08070707FBF5FF1402FE020501E9FC01FA01FDF5F4F6FC05FD19070705050608F9FEF7FC05F907040801FEFC0A07F7090901030C00FFFCFC0B0504FA00FE06FF0708F9FEFD05F8FDE7F6F7F701F0E7F4F7FDF2EDEBF4F3FAF8FDE7E6FCE2EAF2F8F9F0DFE9ECE7ECF2F6F0EDDEE7E1EAF6E7EAE3DAF1F5F503F7FFF6F30D06090D06FBF8F5FAFBFEFC01FE02FCEDF9FBEC00F6F7F6FFF8FF020A0C0A00FB020D03EE000604FAFE0707FCF004F8F9F8FD1BF8EB0D0BF707F809020BFBF7F9F6F4FF0EFCFFF4F9FD07FF0703F3FAF1F1F9F516040C09031125150FFBF816FE081027150FFEFEF8FE06FEF70813FFFB040B121A0313111221250BFA01F7F3FDFE05050BF8FD01F9EF0AFCEDEBF2FDF3ED00FA0AEBEAF80BF6FF090CFDF9FAF7F5FBF6FDF904F8F2040FF7FD0803F7F3F3000F02FE06F3F3FCF7F9F4FAFAFCECF1F901FBF3F4F201F5FF070300FD00F7F3FD080E101C080E17241823020A2E291F14211D231A0C040C0E080D25212218131334211C272E203236F9FBFCF8F2F0020308FDEF06FAEBFA00F1EDECE8F3ECF100F1FDF7E4ECF0EAF3E2F3F8F8FAF7F6F70406FF02FBE9F2FE0307FCF8F904FEFFFDFDFCF7F2EDF3FDFE01F7FBF2F3F2F3F7F304FCF50309FBF5FE02FD0005080F0A1A161E12161D27181D131335242016241D130E0E15100700170A0D2103020E180C03050617180C030F1A110B080102F9000504FF020403FB03FD0304030F0E0A040509110D0607050D0B0909070604040002090508060708070603030505070707000502070705090809070B07080A0D080503050606060105080A06040509070A0101070206060A0806060409030703060A080808070605030504FD00FF030200040305010701010F19100702FEFEFBF8FE03FD010201FE00FDFC02040B0D07080608140E060308060C0A0404040103FF00030503030401050407070404060303FE0303070202040806040706050301040204030503030100030704020303050701FF00FF000105010305FFFFFF010101060307050402030301FDFCFEFDFEFAFE070000FF01FFFE060C06FDF6F8FAF7F9FEFFFBFBFEFAFCFCFBFCFF010C0905070603110A02FF000707000303020300FDFB0201030103020103FF04030201FD00FEFFFDFEFF0204050402050203020000000002020101FBFF00FFFEFFFC00010001FEFCFBFA0203FE04FFFA00FEFEFBFF000104040503020100FFFFFEFEFEF7FC03FEFEFC0101FDFD01FCF8F5F3F2F0F8FDFCF8FAFAFAF4FAF8F7FF010602010302030601FDFCFCFF040000FDFD01FEFAFEFE01FDFBFCFEFAFCFD01FFFDFFFDFEFDFEFEFDFCF9010204FEFF0201FEFA02FBFDFDFAFB01F8FAFCFFFEFDFEFDFBFEFCF9FDFBFCFFFFFCFF01F7FBFEFCFAF8FDFF030600FF00010100FD0001F9F9F902FE00000001FEFCFFF7F6F7EEEDEAF7F9F9F5F7FAF4F0F6F4F6FDFF0102FDFCFA000201FBF6FAFAFBF9F8F8FDFDFEF9F7F7F7F7F6F6F5F4F5F5F7F8F7F6F5F4F4F5F2F7F9F4FBF8F5F9FBFCFBFAF6FCF6FAF8F4FAFBF9F5F8F9FBF8F8FAF6F5F7F6F6F2F9F6FAF6F9FDF3FAF8F7F9F8F9FEFD00FEFBFBFB0301F8FCFDFEF9F9FF00FDFAFCFDFF00FCF6F5F8010302050601F9FCF6FBF7FBFEFE0413130803FBFCFCF9F8FEFE0001FC01FD00FDF9FCFF0005091708FCFC02FAF6FE060401F2F8F2F6FC070905FC0202FFFB01FDFAFD0D0D0F1706FF0301FA02FAFEFBFB03F8EAFE08000603FCFD02FFFE01070D0806FD03FDF8FFF800FDFBFAFFFD00FCF7FB00FD01FDFDFF06FD0300FAFBF7FE0105040C03F7FCFEFBF701FEFF050F1109FF00FEFDFBFB03FE02FF00FFFC0200F9FFFE0001101E07FAF800FAF9020A0701F6FAEEF8020A0C030003010001FC0300FE0D070E18060101F9F8FCF9FCFBFDFEFBF2FF0C050908010106050400010D050DFF0602FBFEFD010001FEFF0206FDFBF7FE0302FDFCFD000200FDFAFAFFFDFFFF0307FDF8FC01F8FCFEFAFCFE0C100E04FAFCFF04FCFF0200030503FD02FEFC01FF05020E2108FC00FDF8F2FF060902F5F4F0F9010A0F070001FC0203FC0104FD0F0C0B13010104FBF4FEFE03FDFF01FAF20506020304FEFF05FEFE000208060A0302FD000201FCFFFE0200FDFFFAF6F5FC06FCFBF902FDFC0203FBF7FBFF0603061002FDFBFCF6FDFDFCFA030E0F090700FF00FCFD010602030E060002FDFD00040403131A0802FFFEF4F401090501F7FAF0F903080E050302FF00FC000502010F0B0513060304F7F803FE00FD0201FBF404060406070400090206010608000F01FE01FEFE020103020201FE03FDF8F1FF0A00030305FF040403FDF7FA0402000409FDFF00FEFCF301FEFD020F0C0800F7FE00FF000200FD0708FF01FDFBF9FEFE01FF12160EFEF9FBF5F4F80404FEF5F7F1F8000A0DFAFB00FD01FDFDFFFD00120D0B1303FD05FEF8FCFDFB0001FFF9F80702030608010200FD0300080D0407070100F7F7FDF9FEFD0401FE01FAFBF705030101FFFE0300FFFFFFFEFF00020200FF00010102020200FF000000FF01010100010000FEFE0003040101FFFE000100FE0102FF020302010101010000FF0102020102FF000000FFFEFFFFFFFEFFFE000100FF00FFFFFEFEFEFEFE00FF00FF0100FDFF0200FF01FFFF0000000100000000FEFFFFFFFFFF0100FF010203FFFFFFFDFEFEFEFE0000FFFEFFFFFF000102010000020200010000FEFF00FEFE010101FF00FFFFFFFEFF0201FFFFFDFD0000FEFEFF00FE00000100FEFEFDFFFEFE0000FF0101FDFD00FFFDFEFEFFFFFDFEFEFF01FEFCFFFEFEFEFDFDFDFEFE00FFFEFFFCFDFF0000FEFEFFFEFF010000010000FFFE00FFFFFFFD0000010002020000FFFCFEFFFF0000FF000001FFFF010202010102020101020100FEFFFEFD0001030301000000FFFE0003030100FEFD010100FE0100FF01020200000100FF0100010200020200000001FF01FF0001FFFF00000101FEFEFFFFFEFEFEFFFEFF00FEFF01FEFE000000FFFE00FEFF010000FF0101FFFE00FFFFFF0001FF01FF0203FFFFFFFDFDFF0100FE0000FF000000010303020100020101020301FF00FEFE0101030300000000FFFE0103040100FEFF0003FFFE0102FF010302010200000000000202010302FF000001000100FF01000101FF0101FE0100FFFEFFFFFEFEFE0000FF01FFFEFF00010000FFFEFF00010100FFFF00FEFEFEFEFDFE010000000102FFFFFFFEFEFD0101FF00000001FFFF020303010000010101010000FF00FFFF0001010300FF0000FFFF00020300FFFCFDFF00FEFEFEFEFCFFFFFEFEFFFFFDFEFEFE0000FE00FFFDFDFDFDFEFEFDFDFFFDFEFEFF01FEFCFFFEFDFCFCFDFDFEFDFDFDFE00FEFEFF00FFFEFFFFFFFF0101020000FFFEFEFDFDFCFCFD00FFFF000101000101FEFFFF01010101010202020201000100FF000000FFFFFF0000FFFDFDFFFEFEFDFEFEFF0100FF0102FEFCFDFFFEFEFF010200FEFFFFFFFEFF01000000FF010000FEFDFDFFFFFDFCFDFDFEFDFDFFFFFFFFFF00FFFF0001FFFFFFFDFDFDFCFDFDFDFF00FEFCFDFDFCFDFEFEFCFEFEFDFFFFFEFFFFFEFFFFFDFD00FE00FEFF00000101010101010101010203030301FF0000FFFFFEFFFFFEFF000100FEFEFFFDFDFCFEFEFEFFFEFE0000FEFCFCFDFFFEFE0202FEFEFFFFFFFEFF0101FFFFFF0000FFFEFBFCFFFFFDFDFDFCFDFCFCFEFEFEFEFF01FFFFFF0000FFFFFFFDFDFCFEFEFD00FFFEFDFDFCFCFDFEFEFCFEFDFDFF01FE00FFFEFFFEFEFD00FF00FFFF00FF00FF010100FF0001000202020201FF0001FFFFFE00FEFE00FF00FFFEFF00FEFEFDFDFDFEFFFFFEFF01FEFBFCFFFFFEFE0203FEFE000000FF0101000000000001FFFFFCFCFFFEFDFDFBFDFDFEFCFEFEFFFEFF000000FF00FFFF00FEFDFDFAFDFEFCFF00FFFDFEFCFCFDFFFEFCFFFEFD0000FE0000FEFFFFFEFE00FF01FFFFFFFE01FF00FFFF000101000102020201FF010000FFFEFF00FFFE000002FF00FFFEFEFDFEFFFEFF00000001FEFEFD00FFFE00010201000100000001010001010101FF00FEFCFDFF00FEFDFCFCFDFEFEFFFFFEFEFF0100FFFFFFFF0000FFFEFFFCFDFDFBFF00FEFCFDFEFDFEFF00FCFDFFFE0000FEFFFFFF00FEFFFFFFFF00FEFEFFFF00FFFFFEFF00FF01010102020201FF000100FFFEFF00FFFFFF0000FDFFFFFFFDFCFCFEFF0000FFFF00FDFDFDFFFFFDFF0101FFFEFEFFFFFEFF0000FFFFFF00FFFEFCFBFCFEFFFDFDFBFBFDFCFCFDFDFEFDFE00FFFEFFFF00FFFEFDFDFDFBFBFDFCFEFFFEFBFCFCFCFDFCFEFBFDFDFC00FEFDFFFFFEFFFDFDFFFEFF00FFFF00FF00FFFFFF00FEFE00FCFEFC01040103FDF9010302010000FCF9FA0000FDF9FE0200FE020302FDFF01FF02FDFEFDFAF9FF0502FC01FEFC030202010001FE010707060504040200040603000001050500FF01FFFF0002FEFE0101060306080705060B04050F0504020101FE0600FCF9FEFA0103FCF8FAFCFBFAFFFDF8F3EEFBF8F1F1EEF0EDEEF5F505FEFEFE000301FEFBFC0002020301FFFEFEFFFE01FBFD000002FF010200FCFC030000FCFEFBFBFDFC0100F90100FBFBFDFEFC00000005010204020102020302030303FF0103FF00FCFEFF040100FF01FDFE030701040807050C07060B0305FE00FF0106FDF9F7F8FD0002FCFDF9F7F9F3F7FEF6F3F0F9F7F8F5EBECEAF0F6F50300010101010403FF0004FFFEFF0200FFFEFEFFFDFBFFFF030500FD0501FDFD0103FFFBFFFDF9F9FC0503FAFF00010102FF02FF040607050402070B0202020306030403040505050101000000030202030403050506060B070E09060A050501FFFC0103FEFBFAFAFCFF06FDFEFAFCFCFAFC00FAF4F1F9FBFBF2EEECF1F5F5F50102030300FF0102FE01090301FDFE00FEFCFC0102FF00FB0507FE010502FF020302FFFFFEFCFE01010104010203FC01050202FE0503070601060504FFFE040705060505080602060301FE000001FF01020708080A0A0909030C04080B05040004000102F8F6FBFAFB0303FDFFFAF8F7F8FDFDF7F2F0FBF5F5F4EBF0E7ECF3F205020300FF0303FEFBFE040701010301FDFC00FE02FEFEFF050A0101080500FF00030300FDFAFEFCFF02FDFDFEFCFBFF01020200020004060501000000FFFE020101FF000201FEFDFEFEFE01FFFEFD020000020506050504010A05050B0602FFFFFEFE01FBFAFDF9F90001FEFE00F9F7FAFD00F7F0F1F9FCF7F2EAEDEDF0F2EEFEFF010703FAFD0503FC070301FFFDF5F3F4F9FCF7F7FBF5F5FA0001FDFD02F6FB00FFFFF5FAFFF9FA0606FE010501FBFD060500040301FAF8FAFBFEFE0001F9FAFAFAFEF9FCF5F8F8010809090503FD0208040500030901FCFC00FD0105FE00FDFDF5F4F4F3FCFBFDF9FE05FF01FE00FEFFF7F5FAF1F5ECEBF900F6FEFBF800FCFE00070500020405060705040004FCFCF5FA00F7FCF9F7FBF902FEF8FBFFFB00FDFAFD0001FCFA030B0CFF0408F9FC05080A0406FF020600FBF700FCFD02FAF8FBF7FEFBFEF8F6FC060E07060305FF050D080E06090F04FE01FC0208090303FE04FFFCFFF901FC00FDFC0501FF0103FEFFFFFDFBF8F8F6F5FB05FB00FBFF010000FB0002FC020707030503020201FFFBFB010600FEF7F0F5F9FAFBFD0503020801F901FBFC0100FE0A1006070503FF010E0D0808080803FAF8FEF7FA0107FCFCFAF903FFFBF9FCFF0C0E1109040BFC060D0F0E080E0B0D0004070E0C0502FF06FDFCF6FBFF02FE05040405040208FFFFFD00F9FEFCFAF9F6FD05FE00FCFDFEFF01FC0103F9FB08FFFC05FDFDFC02F9FDF903060002FBF6F8F8FD030603000004000106FDFF06FFFE070801090E0202040E06040B080C09F7F5FBF8FAFE05F8FFFFF900FFF9FDF7FF070C0C080704F9030C160C090D0A0B0204040604080A0304FFF9F8FD02040301030802080805030103FEF8FDFBF9F9F3FF03F9FBF9FB06F9FCFBFFFAF6FF0100020600FDFD0503FBFBFE0202FEFAF2F9FD0404FF01020100010505FEFB02FFFB09090A080BFF02060E070105050604F7FEFEF5F70104F9FAFDF9F9FEF9FEFCFE080B0C130705FD0713110D070C100B060200070B040807100100FDF60305050302070A040507050003FCFC0401F8F6F8FF04F8FBFEFE05F8F2F4F4F4F9FD020202FF010101FEFE01FAF8FA00010300010600FAFE0202050807050A09080809060C08FF0301FCFD010703FCFCFC02FFFC00000100FCF8FDFE020200FF00FF00FDFCFEFFFBFBF8FEFDFE0003040502FFFBFBF7FB01FE03FF03010402FF01030102FE00010302FDFEFEFFFEFBF6FDFCFCFFFCFF01000201FFF7F3F4F6F7F8FC01000101FF01FEFDFDFFFDFAFB00FF0301030601FAFF0302070A06070C0B080B09080C08040804FEFF05090200FF000402FE0004040400FBFF0304FE01020301FFFE00FC01FFFDFBFDFD00030204070200FEFDFCFC00010504070502030102040205010301010100FF0102FFFCF7FFFDFEFEFF0104040201FFF8F0F5F5F6F7FB010301FEFF0200FDFF00FBF9FB020200000003FFFBFF0305050804040908080B0A090E080204FFFCFD02070300FEFD0200FEFD0002FFFDFBFEFF00FEFE0100FDFFFDFEFDFEFDFDF9FAFDFE02FF020503FEFEFDFAFDFEFE0401060300020102040405FF02FF01FFFFFEFD01FEFEF9FDFDFDFEFFFF0402020201F9F2F2F3F6F5FB01FFFFFF01FEFFFCFEFDFCF8FA000102FEFF0201FBFD0000040702020508080909040D070001FEFBFBFF0600FDFBFA00FEFBF9FCFEFEFAF9FCFEFDFCFDFDFDFAFDFCFBFDFEFDFAF7FAFFFD00000003FE00FBFCF9FEFEFD01000302020201020301030001000200FEFDFF00FFFEF7FAFCFF00FE000202030201F9F2F4F6F7F8FAFF01FEFF00FFFFFEFFFFFDF9FB010303000102FFF8FCFF00050704070908080A09060C09020101FEFE02080501FDFE0203FEFE010300FEFC00000200FF0200FFFFFD000001FEFCFBFB0100020203050101FD00FAFDFFFE03020504020300030301030003FF0303010101030100F9FCFBFFFEFD0203010403000D03F700080B04F5FCFCFA020604040301FEFEF5F3F9F3FE00FD010C0CFD02F9EDF5F6F6F7F6F0F2FE0504F8FEFD06FD03020B0201FFFF02000500FDFF0202FEFD07FDFDFBFCFF0800080E080B101008030605F6FAFEFF01F6FE0202070C04FDFA06040C0BFE00020302FAFFF8FBFE0500FF09F90E01FD020204FAFF0BFDF9010B04F9030A0B04F3FCFDFD03040702FF030503F5FAFFF7050503FE0D0D0005FCF0F3F4F6F6F4F1F2FE0507FC0200060006081307FE0103FF0208FE05040705030209050101FE010904070D08070F110B080608F9FF000406FCFC0703080B09FDFF0900090B00FD010804FDFFFDF70005FFFC06FA100301050101F9FF0401F9020C06FF07070B08F702FE0001010506020406FEF4F500FA000700FD0C0E0206FEECF3F3F8F8FBF8F2010B05FCFEFF04F903030B0601020001FF03FC01FE050200FF060300FCFD050905070D04090B0C04000004F7FAFBFBFEF6F903FE020301FCF9FEFD030601FAFB0100F8FAFAF8FB00FEFE09F90B00FC010102F3FAFFFCF9FF090903090A0B0AFC06050102060404030506FFF7F601FA000802000C110306FEEEF6F7FBFBFCF8F6FE0703FAFCFD00FA02020701FE00FCFFFB01F9FEFC010200FF06FE00FCFCFD0601020CFF020306FDFF0000F3FBFEFFF6F1F9FFFFFE0704F9F700FB030200FAFD01FEF1F4F1F3FAF9FBFC03F90BFEFE01FF03FBFA0300FEFE0F0803080B0C09FA0308020504060607050402F3F802FE010401FE0C0F020901F0F4FCFDFDFAF8F3FF0604F5FEFD01FBFF010802030301020104FE03040605000008FF04F9FC0105060409FF06080B03030203F7FDFBFCFBF8FA0600FF0702F8FA00F90402FDFBFD0005F2F8F3F2F5FEFD0005FF0D01FE020007FF010700FA040606FAFFFFF5FAFAFDFCFAFE0300F9010501FEFDFDFFFAFBFC0005FEFBF802060102030506FCFA0101FFFDFF010001FDFCFFFEFF020306010102090807040307060503050407060402000001000300FF0600FDFE05060500010000FEFF04FF02050100FF0201FD00FFFDFDFEFC030303FE0302010106080700FFFFFF00FE00FE0707FAFDFCF5F9FEFEFDFBFB00FDFAFF0302FEFAFFFFF9F8FDFDFFFFF8F70208020100FEFFF9F7FAFCFAFBFDFCFBFAF3F4F3F4F7F9FBFDF8F8FAFF01FD00FEFFF9FBF9FEFFFF0000FDFDFCFBFD00FBF9FCFAFAF9FD00FFFCF9F9FDFEF8FEFFFDFFFDFCFE0102FD0400FBFDFBFC02FEFFFD03FF020004030402FFFEFEFDFCFE00070CFD01FEF6FCFEFEFDFE0103FDFAFF01020401FE00F5F7F9FF0200FBF7010600000002FEFAF7FC00FCFBFEFE02FDF4FAF8FBFAFBFD0000FAFEFF0101050601FD00FDFFFF0101FEFF01000000FFFCFE0302FEFD030102FCFCFCFFFCFAFEF9FF00FFFBFE00FFFD03FDFCFBFBFF030302FD01FE00020302040301FCFC00FFFB000609FC0000F9FBFCFDFBFF000302FE000103030001FDFAFDFFFD03FFFBF801060706060303FFFC0001FFFF0202030301FF01FD00FF0207040201040605090607080706040305040404010102040201010600FF00030103FDFDFF0300F801FF01040300FF05030002FDFF00FEFE01FF050103FF01000305030201FFFDFD0000FD0809FEFFFEF8FD0000F8FBFE00FEFD00050300FE0100F9F8FBFF0100F8F6010603030304FFFAF7FCFEFCFCFF0101FEF4F9FAFAFA00FFFFFDFDFEFE0001020103FF01FCFFFE0100FDFF00FDFD02FEFDFD0002FFFD0000FEFDFCFD00FFF600FFFFFF0100FE01FFFD01FBFCFEFBFBFDFBFBFFFF0105020405040100FEFC010000060202000006090104FCF9FEFBF3F7FBF8F9FDFAFAF9FCFFFDFBF9F9FCFE05080909FEFCFDFE0003FEFC0301FF01FEFD00FE03010202FFFF0102FEFEFDFF030202FBFC03020101010004020402FFFEFE0303060502000405020205FCFE04FCFBFFFDFDFBFF02000104FF0005030002FEFF0001FD01FDFD01FF00FBFFFCF8F9FBF7020201000408FFFFFAF7F8F7F3F6F8F4F6FDFCF9FCFEFFFCFAFCFCFC000607080A01FAFBFD0102FEFD0002FF00FFFBFAFEFFFF0202FC000403FEFDFAFF040300FDFAFF000101FBF9FF000304FFFE040203060805000101FF0206FDFE03FCFAFC00FDFCFFFEFB020201FF010101000001FFFEFBFCFAF9FCFDFCFDFCFBF7FA00FC030203FE0105FFFFF9F8F9F7F3F7FAF5F7FAF9F7FDFF00FEF9FAF6FB0101070A0700FDFAFE0101FDFC0200FD00FDFE0201FC01040200030401FD00FC0004020100FB02050302000102030400FE01040106070504020000040107FFFE02FEFBFCFEF9FEFDFFFE000202FF0502FEFE0102FFFFFDFDFFFCFCFDFFFEFDFFFBFB00FF0102FFFE0103FCFFF9F8FAF5F1F4F7F5F4F9F8F6FCFDFFFDFAFBF9FC0002060B0AFDFAFAFDFE01FEFA0304FF03FEFEFCFDFD000502010302010101FD0001010001FF020203060204040306020103010507090907030607060308FEFE08FFFDFDFFFCFF01FFFD020502FF040604030303040000FFFCFAFFFCFFFFFC02FFFEFEFF03FEFBFA0204FDFBF8F7FCF9F2F7FAF3F3F8FBF4F8FC01FEFCF9F8FCFC03080907FFFCFBF8FD00FDFB00000100FEFB00FEFC010400FE01020200FEFD0101FFFE00FDFF00FFFFFCFC00030203FD00FF0605060506020406040103FCFE0700FFFBFAFCFCFFFFFF060405FE05050406050503040000FCFCFC0002FCFD0400010101FEFEFBFFFDFEFEF9FD01FCFE02030705040202000303030002060A0805FFFEFEFC0205040204050203020201FD0104FF010304020503FD00FB000003FF0101010101FDFF00FEFF00FE0000FBFFFF01FDFBFCFDFEFEFBFCFBFAFCFEFCF5FBFEFE00FF0202FCF7F8F3F5FBF901FFFFFF02000004FD01FEFFFF0001FEFD01FDFEFFFE00F9FEFFFDFAF9FE03FFFD00050605040301000403020201040709050101FCFA0002020102020302020103FF0104040206060402020200FF020206010203030505030100000304020000FD010201FDFCFFFEFDFFFDFFFDF9FBFFFCFA0003010100FF0304FBFAF8FCFD010301000004060105FE05020200030100010300FD01FFFEFAFFFFFFFCF7FD00FFFF010304050300FEFD010402010204080A03FEFCFAF9FE00020000000101020400FC0303FCFE0200010000FDFF00FFFE00FFFF02FF0101FEFEFEFD0003FDFE00FC01FFFDFEFBFBFEFAFEFCFDFCFBFAFBFDFCFE02010202FF0402FCFAFAFBFBFF0301FF0303030205FF02010200040100030100FF04FE01000001FEFDFCFCFFFFFFFF0205040200FDFDFF0202030100050704FFFCFAF8FE0101FE01FFFF03FFFDFFFA0000FCFC00FEFAFDFEFAFDF9FAF9FCF9FCFFFFFEFDFBFCFCFAFBFFFDFAFCFCFFFCFDFAFAF9F9F9FDFAF8F9F9FAFCFEFAFEFE000001FE0605FCFCF9FCFFFF01FEFFFF01010004FF02FF000102030000FFFDFF000004020401FF00FFFC00FFFE000204070400FE00040705020105060806FFFDFDFAFF04030102010204000102FE010300020402010200000400FDFF03FF0204030102000100FE020201FF0000020104FFFE0202FE01FEFCFEFE000400FD050305050603070800FDFE010302070402040405070502060102020106040402FEFF02441BF800060C1CE60FF6E905FE0C0EFAF6050AF8EE00EB030B0CF9061BF01000F0170EFEFCF1F2F60A0CF8EC1BF511FD07ECFEF31100EEE210250D171606E4EFF6FDECE9F5FD02FA0506F4ECFC08EAF72E0604EB06131411E5E703EB083409F5E205FC142BECF61700E8E1F3D6F9F9FAF3F4FCEE2E1B011BFCFEF8F21EE5F7FE380FF400F71412E80AF6E5FA00030FFEFB000FF8F603E4021210050D17F015FDF0140CFA05FAF1EE0B0DEBF61FF403F902E7F8F4080DF5EF111CFF240D00E4FCFB06E5E3F3FBF9FC0AF7E4EFFE07FDFE330503E803151107F2E2F8F1022E09F2E6FA030D24FDF81EFDFAE6F8DEFBFBF3EDF408EB321B0322F5FBF2032AE0EF013C15FCFEF80E11DE0BF2EC05030A0AFA00FE11F9F50BE4011005FE0B1CFC1406E7160CFB04F5F6EE0916E8F01EF20CFD05F2F8F30D0AEDF41422F71C1205DDFFF509EAF4F10902010D08E4F20313F3F3370808E902111405F3E8FDF5003204EBD703FD152F00011600E9E4FFE2F1FFF4F3F008F22C1B0A1CFE02F4041CE3EA083F16FD00FF0914E804F4F701F8070FECF5091200FA07EC070F08F50C15FA0AF9F21315FA05F4EDF9060DF7E41EEB0DFE00F0F8F2080401EA0A25FE181408E102FE0DF1E2F716FB050505EFF4F607EFFC2C0B00E9071A1F06FAE403FA0B330FE9DB0103143303FB1AFEF0D3F1E2F9FAF5F2E705EE2C2208180100EE0125E2E6FA4423FD0004181FE804F5F3FCFB0C0303020018F9F811E808110BF60F16FB13FEF0190DF102FCF7F10813F9ED25EE1704FEE90301110BF7EB172401150F00E2FCFE0CEEEFF20A05040F09F8EA000EF7FE2E080AEEFE13210EF2DE03F70431FBF3DF00FE122DF6F81200F5D4EED9EDFBFD00F408EC2D19FB17FA00F10928EBE8F8FEFFFF0F0AFEFEFFF7F8F5F6F3F4F7F5F2F9FFFEFA01FBF9F1EF0E1002F3F3F1F4F0F4F5F30101F7F8FC00FCF6141A100601010A040602FF09F9FCFC0405120908F6F9FEFF000000F9060407040404010603F703F6F2F6EFFD020D04FA04F90706F9F0F101F5FFFBF4F9FCF9FDFAF1F9FBF7F0F9FAF3F9F4ECF601F4FAFEF8FBFBFD02130B0101FDF7F6F2F4F6F8F7FFFD00FAFFFA01FDF7F4ED0D09F9FBF3F1F5EFF5EFF701FDF3FBFC0505FA131B1108090109050101030BFEFF01070D0F0604F3FFFFFE010703FB090D0A0300030707080405FEFFFBFA040B0E09010900130A01F5F00001080001FB060104FFFAFB03FF040604FFF9FAF5FB0B040309060700FFFF160B040301F8F6F5F5F9FCFBFCF6FFFDFAF5FB00FDF8F30A09F9F7F9F6F1EEF2F7F5FEFCF2F4FB0A09FD14141002FB050C0500000809FBFCFB04090C0103F6FEFDFD040505F90B100A02FE0B0D0D080A0B06FBFB00080B1108070C0A0D0601FEF30507060A03FD0AFC00050700030508FFFA00FEFDFBF80B17110D120EFF0203140C040303FCF6FAF6FCF9FDFC000A06FB00FD0C06FDF7090600FAFCF9F4F2FEF8F3FEFBF5F3040501FB10140D0700FB060402FDFE0BFDFEFE02FF090103F902FBFA03010403041002FCFD00040403FF060400FA0A0C070706030B050C05FFF8ED0009010304FD07FF01040B0203FE0001FEFA00FBF7020E110C0E0C1602080B1411060005FD0101F8FD05FFFEFC0904FBFE020B06FDFB0E0DFD0301F6F9F80100FAFEFEF801010502F910190B0B04F7050002050409040AFF00FF0EFE0BFFFFFA00080402030604FE03F9FAFF010505030801FA0C070B09000407031209FDF7F0F802FF030403FFFE050001FEFCFCF9FDF8F3F7F1EEF7060801040008FFFFFEFDFE00010001000001000000010100010202010101020100FF00000000FF00000000010100FF01010203010102010201010202000302000101020101010200010002020100010402030202030101FE00030102010100010000FF0100000000FF00FFFE00FF00FF00010002010202010001FFFF0101000203010203030200FFFFFEFF010101000001000002010000000103010102020200FFFF00000000FFFE01FF0101010000010002020100010101020203020204030201030201010103010202030101010203030402030402020001030102020303030100000201000001FF00FF01010000010201020201010102030100020203020304020305040400FFFFFEFE00000000FF00FF0001020001000102020102010202FFFE0000000000000000010000FFFF00010101020001010102010101FF00010100000100FF000102030102000001010203030203030200000201010202030103010001000200FF00000200020100010003020202020302010300FF0101020102030303040303000000FFFE01010000FE00FFFE0101010001010103020202030100000000FF00FFFFFFFFFF0000FFFF0000FF01010001000000FE00010000000200FF00FFFF0201020101010101010204020301020201010001020202030302010000000101FF00010001FF0100FF0100020102030201010101FF00000001FF00020100020100010101FFFF010202000101010001000101FF000002010202020100010101000000010000000101010101000003000001020200000000010102020100FFFF0101020201010101020202030203030303020202040402040203020300000101020102010002FF01FFFF0100020303030201010202FFFE000000FDFE01000000FE00070607000803FCF3FFF0080B091A04FFFBF5FEF5F2EAF6FDFCF4FA141A14FEF20B1A0B03F8FDFA020E292A0802000302EAF50106100D00090C1616040B06FBFAF5F3F4F901F7FEF9020606060819160FFBF402FB01000A0F0605F2FA04FE0200FB08080B06FA040CFEFEF903000401F6F5F1F7FF0606FDF1FF0504F908FE02FD061607000409F6EEF1EFFD030711FBEF02FEFAF2F3EDF2030705F9102511FCF0091103FAF9F5F402102C280104FDFBFCF5F400FFFB030CF9FF0511020704FBFDF8F2F2F8FCFAFAEEFB08F4000009190C05F600FDFEFD020902FDF4FB00FEFAEEFAFD02FFF8F0000702FAF9F6FAF700F4ECEBF4FE100701F70905F9F5FB01F40B0C161204FFFCF1EEF1EB01FB0107FFF5FD03FAECE9F200FF04FDF11A2014FEF2FF0FFFF1FD05FBF409352701FFFEFAF3EDF206FB0A0F0B0104080B020604F7F9F3F8F5FE04FB07F7FF08F9FF080B1C06FDF3F7FBF3F3FC060300F8F6FCF6F3F7EEF601FFFBFEFD04FFF4FBFFFAFDFCFCF3F60402100A08F5020FFC010401FD0B07131512100100FDF5EC050007140AF9F9FA0000F4F201041009FA121914FEFB0F1406FDFCFAF70B132E2B0C0203F8F2E8EFF6FD04080A00010D10040402F2FD000200030A00F7F9FF0A0007000A1506F801FEF5FF070703FF02F7020101FDF8EFFD0D05FA02060C00F6F8F8F2FBFFF6F6EAF7020C0707F708110705030E020A121620120C10FFF7F8F00304011703FCF9FF09FAEFFB05051007F9101B1D0D01151F0AFCFE01F8000D2D2A0A0800FBFEECFE0404160C0D09110D110C120CF7FCF9F8000E03F3F6FE0D0FFD040F111E1C0806FDFE060403030D07FFF9FE0103FCEEF803040504100701090203FA03F9F5F6F3FE04100CFEFE0A1109050B0A000DF901040902FF020500FB030000FDFA060203FF0301FF0102FDFBFAFAFCFEF70004020103FAFAF8F9FCFAFD05FC0002FEF700FB02FAFBFB010702FCFD0704FCFDFFF2FCFD0100FFF7FB060501020A0D0B090904060700FA09140B0503000503150E0D0C05130F141A0A020BFEFAFFFE0009FF00010104FF02120C060D06090C0BFC02090901FDFF06FF010203FF00FE020001FAFEFF020300FDFBFBFCF4FDFEFE0401FCFBFCFBF8FFFBF9FFFDF8FEFF01FAFEF6F7F5FFFCF906FF000003FFFFFBF9F6FBFE04FCFBFCFCFC07FFFC030D0907070204FFF5F902130801FBFC01020B0D060AFE110D081A0F06070000FDFE0202FBFB030200F9030D0AFE06020406FFF9000602FDFBFC01FCFF0001FE0105010001FCFFFD0204FDFAFCFCF9F5F9FCFC040200FFFAF9F6F5F8FEFFFEFB030306FDFEF9F9FBFBFE03090001F904FDFB00FEF4F9FC0606FDFA010005FFFD000A0C06090204FDF9FE050F03FC00FE01FF0B07040DFC120C0C1309010105FEFDF2FB07FEFE05FFFC01FD0707FD03F7FAFFFEFD000506FFF8FC01000304050300FFFF00FCFEFDFD0201F9F7FFFAFFF9FDFCFE0805FF04FBF8FAFCF8FBF7FCF9010404FA03F8FFFF00FE0003FF04FE04040106FBFBFF01040304FDFE030503FF0710120809FE0304FD02FE070701FBFC04FF0C0B030AFC0D01090C05010405FFF9F3FDFFFAF5FCFEFDFDF70204FCFDF1F5F7F4F8FA0302FFFA0101FCFEFF040105FF020200FDFFFC02FFF8F800FAFCFDFBFAFD0704FEFFFCFDFCFDF8F9FEFCFE05FF00FBFAF8FF030201FF02F900FA0204FD03FAF7F9FC00FEFFFBFE0501FBFE05080E0705FF02FAFAF9FD0904FF01FD00FB07030706F40A05080C0301000500FBF6FFFEFCF6F8F8F6FDF700FEF7FBF8F5FBF9F8FB0D0C0E06F60607081103FF03F9F5F50B00FFFCF30201F0ECE6EEFB03FBFF0AFBFA0502FCFD0300FC0A1A142527090100090BFA021B1B1201F8F8F818140205EA0308FE00010207060B03F6040B12030D0A02F8F6F5F50205F7FDF4F2F20F1108F4F71509040F08F9131A0801F2F2FBF600FA0001F1FB02000B1A0B100B0EF9FD06FF0400F305020A150B0408F5F6FB0802FAF80304FCF8E7E7E9F502FFFD02050A1406FAF6FEFA04122107141F0E09060CFEF1FE080C10FB0603001817FF07F50204FDFF0406070A0DF8F3FD0C0EFFFC0A01FAEDF5F7FE05FA0200F8F6121802F8F00AFE0D1203F30208FC02FDFE01F3F001F9FAEFF6F3F5020C0603060CF9FF0501FB030100FA0C0BFE000601F9FE01F8FAF4FF0FFBEEECE2E9F50203030205F202FCFF0001FBFC031C081C230EFDF801FFEFFA0D160EF8FBEAFA1B13050CE9F900F9030802070301F5F8FD0A140606FCFCFAF1E9EA05F5F9FAFBF0E9060300F9F107FB0A0AFBEFFC0AF8FDFCFF02F5F20301F5F0F6FF06FAFFFB070B02F5F500050304FC01FC110F000406F5F1FFFEF8F7F7FA0A02E6E2E4EBF8FBF5F60404F904F7FCFCFEF5FB0F1A13181C0501F8050DF9F90A130BF3FCFFFB190FF70CF1F4080304F800FAFE06F5F2F3FA0A02FFF3FCEBF0F5F100F6FF0901F7FD010603FDF1FF05041000F2FA0BF6FEFEFEF6F1EFF8F3F9EFF3F0F70804000904FAF6FE050D0B04F5FD07100DFAFFFDF4F408060004F8F20000E7E6E6F4EEFC00000BFEFD06F7FE0101FA040F2310161C0AFAEF0309FA010C1519FAF7020B1D150204F10206000B00FF05FE04F4F4F8FC0C01F9010DF2F4F6F503F7FB0BFFF1F9030905FAF8FFFE0D1010F90303FB03FAF903F9EBFBFDF8EAF4FF040C0D12130D0CFA1FF70F0DF6F6E3EB0EE30F07E8FA1AEE06FBF6F1000A0CEFFF0FFEFEE8FC12D9F7F7E9F0EBF8EDFDF909FCFDFD0BF805F303061116FAF9FD0D04FD0E0625F1020F061006FA040E0AF40A0F08F80C1002F4090403E1FEFE03F21711FFF90210EFFAF6F703F7F4FAEE13F4030EE80B080EFD2AE32FFF0DEE0EFE09E70009F4F8FC1AF60F0FF2FEE5EB15E01406DFF31CEE01FFFCF4040E0EF6FA0AFFFEE9020FE5FFF4E9FFEFFBEC00FA0201FE020DF402FBFF070D16FFF4FF040FFE080524E7050AFF080200FF0903FB0B0F09F7020809F609010CDAFB0807EA151DFFF9040AECF4F7F709F2FB05FF07EF0804EC1204050125ED2DFCFCF00FFB07F5FE08EEFBFC1BF3130DE9FCECEE16E3140FE30321EFFA04F8F009170AFDFC0B06FDE80015E1EFFAEBFDEC00E608F80001FE0307FB08F5050E0C1401F8FC0A0401040822E4050BFD0C01F901040BF9080B05FF000906F70AFB02E5FC0105F4141BFFFE060FE5FAF1F309F5FEFFEF1BF2FE03E90D0407F624EB2E0C05EC1D0308FE060CF3FAF920EF1007F3F5EAF116DE1505E3F621F0FDFF00F306140CF9FA10FF01DE0C0FDEF3FDEDF8E500ED00F1FDFDFB070CF20BF804070B20F9FC03FE08F90C0229ECFD00F714FBF6FFFD06F8110E09FD0C0004F4000401E3FA0D02F50A1A00F40A09F3F4F8F9FEFEF802F117EDFFFFED070309F624E331F9FCE918F706F50107F3FBFE25E41B07EFEDD6F509DF15FEDFFE1EEF03FCFFF900170BF9F81402FCDB0614DFF7FCE5F0EFF8F0FFF8FEFA07080EFB0AFA09061514FBF205FB05FC050C29FBFF030409FE03FF0008F10C0601FC0A0A02F9FD04FDE401F804F1131AF9F50911F2ECFCF603F4F7FEE220EFFEFDF005FE06F524EA35F7F8F116EE01E8F807F50302010001030100000003030000FFFFFFFFFFFEFDFFFFFEFF01FFFDFEFFFF0202FEFBFD00FEFCFDFDFDFEFE00FF00FFFEFFFFFDFFFEFEFEFDFDFCFCFCFDFE00FEFEFBFEFDFEFFFCFCFCFEFDFDFEFCFCFCFCFEFEFEFDFDFEFFFEFDFE00FDFFFCFEFDFDFCFCFFFEFFFF00FDFFFEFEFFFFFE0000FF010100FDFF00FEFFFFFE00FEFD0201FF000201FF010202020101FFFF00FFFFFFFEFF00FF010101FFFFFF000304FFFEFE0000FEFDFCFDFEFF00000000FF00FFFFFE0100FFFFFEFDFEFFFFFF01FFFDFEFFFFFF01FEFDFEFEFEFDFFFCFDFCFDFDFDFDFEFE00FEFFFEFFFFFDFDFCFFFEFEFDFCFEFFFFFEFDFCFEFEFE0000FF0101FEFF0100FF00010000FFFF0000FF0202FFFF0201FFFFFF02020100FFFFFFFEFFFEFEFFFEFDFEFFFFFE0000FF020401FDFDFFFEFDFDFDFCFCFD00FFFFFEFEFEFEFEFDFFFDFDFFFCFDFCFCFEFE00FFFDFEFDFEFCFFFDFCFDFDFDFFFEFBFCFBFCFDFBFEFDFE01FEFFFEFFFEFDFEFBFFFEFCFBFCFFFD00FFFDFCFDFCFDFFFFFFFFFFFE0100FFFD00010000FFFE00FFFE0201FE000102FFFEFF0202000101FFFFFFFEFDFCFDFDFDFDFEFFFEFEFEFF0102FFFCFCFDFCFCFCFCFBFDFDFCFCFDFEFDFEFDFEFCFDFDFDFCFDFCFDFCFDFEFEFCFCFDFDFEFCFEFDFBFCFFFDFCFDFCFCFCFDFDFCFBFCFDFFFDFFFEFFFDFDFEFCFCFCFCFBFBFEFEFEFEFDFCFDFDFDFFFEFEFEFFFEFF0102FE0000FE0000FFFEFDFF020100000202FFFEFF01020001FFFEFFFFFEFDFDFEFDFCFD000000FFFEFD010201FDFDFEFEFDFDFDFDFEFE01010100FF0000FFFE00FFFFFDFEFF01FFFF010100FFFE00FF000200FFFF00FFFEFFFDFCFEFEFFFFFFFEFF020000FE00FFFD00FFFEFFFDFFFDFFFFFFFFFEFEFFFFFEFF000000FEFEFEFF00FEFD00FEFFFFFEFDFE00FB010100030DFE0607FDFFF7F8F9F401FE09F9ED0812F7F9F8FCFDF5080BFB0C19FAEAF4F500FB040705FF10FE0F08FDFAFA060DF4FFF9FA04F610180EF705FC05F001160405F3E5FB060AF7F9082311F509EFF9FFF2EB040D2B0FF5E1F5F914F9EC04ED09FD0FFCE9F90C0305060906FE080503000501031908F505FB10FE03FCFAF7FAF6FEFD0402F8F80402FBF5F3F8FDFCF10E0D01F1F4FC08010307010F15FFF8F7FAFC0403F800050BF50F01FAE8F10405F6F9F7FFFFFB141717F7F6FDFFF508060803F3EEFE0B10F0FE06250CF60EF0FDFAEDEA01112A04E5E5EBF91801E605F806050C03E9F2030003060111050F010BFF04060D2009FAFAF20CFE0102FDFDF9F702FF0602030901FE02F0F2F9F7FAF00C08FDF8F8FE02FE070B030D1607F705FAF7FE0904FCFD00FB090602F605F70504F6F70506FB0E161205FB0100F3070E0707FAEC010307F2FA061C0BFB0BEDFB08F8E80E123C0DF1EFFBEF10FCE809F108F614F2F0FCFB0201090502FD0AF7F302FC0104190DF5FBEF09FD03F504F9F1F7050506FC080500FE00F6F5F8FCFCFC0008F4F7F9FA02041419070C1609FBFFFFFD090CFB060800060901FDF8F6F40104FBF8FE01FB09151A060500F9EF07100F0FF9E8F5FC03FA02091B0D0005F00106FCE30D122A10F4ED03F612FAE707F80FFC18FCF90001FE090C0F060008F5FCF9FAFF021400EFFDF5FDF205FCF9FD01F8FEFD06FB090303FCFCF7EBF801FFFD080E04F9F7FFFC040311060D19080000F4F7030BFA030102070803FAF1F5F5FDF900F6FD040208181AFDFA04F7F2040C1008EEED000001F7FD031A07FF0CF40003FDF1090B2A1500F0FBFA0EF8F60FFB010206FB00F70A0F1112150FFE07F2FCF5F3000003EFE8FCF1FAF7FF01FE040401FBF7F60100EFEFEBEC0317F9ECFBF3080F1C0FFE03FEE0E8FD1209F901FBF2EDF9FE05081707000CF307FC06001205F3E7E9070502FAFDF5EFE7F5FC140804F3E7001B0E2425100C243C20F20504FCEDE1EBFA081B1503F9F404FE0108EC01F404FDF0FB28FCF4FFF40104FB051F0B06F70703020CFBEC0E08050806FF091102FCFFF3FF0AE9E8F3E70214FAF6FCF309112112FBFB05E8E8F8140FF60603F2F2F5F702081A120A06F90AFE0B0818FEF7F2E9F8060AFCFDF1EBE5EEF20DFD05F4F0FB160F1B1C030D2D3A0CDDFC00FFEAD7E0FFFF0C0DFCFBF807F9FC0AE6FCED06FDF3F618FBEBFDF7090002020B0503F703091205F4EA080609070C02050BFCFC00FCFD03F6F6EFF00A1501EDF3F00915210EFE0401EDE0F4170DFC07F9F5E8F700020B140D0B07FC0501110E1507F8F5E3F6020DF701F0EFE8F70007F905FDEFEE1911201D030326380AE2FE02FBE7DBE800051A0CF7FFF203F6FE06E8FAE8FFF8EFF21F02EFFFF70508F60E14000BF9F8FEFF05F5E2FF0B07FA0CF8070601FAFEF2FE02F1F6F7EA0413FFF1FBEF000C180E00FDFCE7E5F51200F8FCFDEDEDF9FCFC11180DFCFCF910041208230AF8FBE6FE0A07FB05FAECEFF1FD180A06F7EC0220151C230D0D293417E3FB00FBEDD5E502051513F8F5EF0B02F706E6F8E604F4E7F21D01EA02F408FEFE06100705EF03FC0C07F3E207110A0A0EFC0C08FE0305FAFC07F4E9F0EA0812FCE9F4F203121A130205FEF0E1FA1408FAF8F8F1EEF5FD010410060305EE0D001405150BF4EFEFF5070AF507FEF7EDF50110040BF9EDF618181A250807263E12DA03FEF7E3D4ECF90B180801F8F50A06FD08D8FCE60300EEF81E05EFFFF807FE020E16030BF5FEFE080AE7EC0C15040702FE00FEFDFFFCFAFF060500FFFF03020006080703020205080806080401FCFBFCFE0102010403FFFF0103FF0002FF03050603FF01010303FF01000203040202030303030306020100FFFF000000FF00050305080805040304020005050000FF01000200FC00FF000500FF0100FF03020402020300010103030704090404060503FFFFFEFE00FDFAFF040402FFFDFF0101010202FF0002030404030602FCFAF8FAF9FDFFFEFFFEFDFD00FDFAFBFAFBFFFE00FEFEFDFD00FDF9FCF9FAFAFEFEFFFC0001FCFCFEFF01FCFBFCFCFEFBF9FB0100000303010201FDFBFE0202FEFFFCFAFCFF01FD01FEFD0100FE01FEFE01FF0000FF0003020003040405080400FFFF05FE00010201FBF8FD030400FFFDFF020101040201FF0203090607060201F8F5F8FBFDFF01FFFEFEFCFF00F9F9FCFCFF0004FFFDFBFEFEFCFBFCFAFCFEFDFFFDFDFEFEFDFEFFFFFEFAFAFDFCFDFDFBFB0201000002020100FFFD000102FEFFFCFDFE0001FA00FEFE0000FF03FFFE0200FFFF0002030102060203060605030002030204030302FDFB00030602FEFE01010205070402050106090505060100FCF8F7FBFD020200FFFC01FEFFFEFC01FF010305010000000000FFFFFDFE00020101FDFE0101030303FEFEFFFF01FEFEFDFF020202050401FFFF0200000102FFFF00FEFFFE01FE0000010200FF02020001020002010204040104050604040403030204020504030301FE0108050301FDFF0303070606030400030704040404FFF8F6F9FCFAFE0102FEFEFF00FFFCFCFEFD000201FFFEF9FCFBFEFAF9F8F6F9FBFEFCFBFBFEFD00FEFEFBFBFCFBFEFCFCFCFB000103FF0100FEFD00FEFE0000FEFBFD00FFFD00FDFFFB0001FFFC03FFFF01FFFFFE0001010100020205030202FEFFFBFC00010103FCFAF6F2F6F6F6F2F8FDFE061322261611100804FAFFFCFEFEFEFFFFFB04FF03FFFBFAFCFAFC05FC00040201FF0101FFFBFAF701FD0105FCFC01FA00FAFDFCFD0603FEFE02FEFDF9F9FA02FDFCFAFB0000FB00010600FFFD01FDFB00FDFCFA02080402FF0105020102FE050501FEFEFBFF02FEFF0404030300FF0000FF030506F8F5F2F3EEF3F4F3FBFFF8FF1E2A2F1E0C0D06FBF900FE0103FEF7F8FB0403FE010004F9FCFFFFFE030305FEFFFB04F9F9FCFD01FEFBFBFAFA060005FD04FC000201FD01FFFCFDFDFCFAFE05FFF6FAF600FDFE060902FEFEFDFCFD01FBFDF704060308020405FE02FEFE01FFFB03FE00FF00010803020204070503FDFD0507FFF7F8F0F0F7F5F4F3FAFFF8021C2F2F1910110A00FA01FD01FBF8FCFEF8030307FEFC01FAFAFE02FE04040200FBFD03FAFAFEFF05FBF8FE00FAFF0608FD0601FC0501FF00FF03FBF8FAFB0003FCFFFFFBF8F701010400FDFFFF03FE0101FFF60407030700010403FEFDFBFF00FCFCFEFBF9F9FBFBFE05030105FD01FC00050101FCF5F5F5F2F9F5F2FAFEFB0417272712090A0A03FC00FD0303FFFFFEF90702080500FBFD020303FF010601FEFAFE00FBFAFBFF03FF03FF00FC030709FD00FCFF0302FEFCFB00FCFBFD03070300F9FEFCFD0000020704FD01FEFD030200FFFB00020201050405040405F902FEFF01FFFAF8FDFCFCFDFF00FCFAFAFCFDFE05FB01FAF4F7F3F1F7F3EEFC03F8FB122327110D0F08FEFCFEFEFD00FDFAF3FC040103FFFFF8FDFAFCFFFAFC080402FCFAFFF2FC01FFFFFA00FFFBFB05010AF800FAFD01FAFDFEFDFF02F9FDFC0502FDFBFCFFF9FA010106020503FFFCFDFAFDFEFB0202030301FEFF0502FE0500FE030201FAF5FDFAFBFEFDFFF8F700FA00FCFC0002FF00090800FDFAFCFEFEFFFFFF00FFFE000401FDFEFDFCFBFCFCFDFEFE0004040A0B0602000100FD0102FFFE03010403FFFEFFFCFBFBFAFE020100FDFF0000FDFC00FF00FD02FF00FAFAFF00030100FEFE02FEFFFD0001FEF9FF030300FFFE0000FE01FFFD0001FF00010004040003FEFFFF0406030304000102FDFFFDFC0001FD01090500FBF9FAFEFEFCFE000400FF0205030201FEFAFBFCFBFE01000004050B0C0702000203010402FE0000040604FE0000FCFCFEFDFF040301FF010000FEFF00010000FFFF01FCFE00FF05030000FE00FEFFFF03FFFCFEFF020300FEFE00FFFEFF02FE00FF00FEFF000402FD0001FE02020607050600020300FFFBFCFD01FE030A07FEFBF7FAFDFEFDFEFEFFFF01050504FFFCFAFCF9FAFFFBFDFF0001020C0D05030102FFFCFF00FEFDFF00060202FFFDFDFAFEFFFF0302FF00FEFD02FEFE0203010101FF01FFFFFEFF050301FFFD0000FFFF00FEFBFBFE0202FDFDFBFE00FF0100FD0000FFFE01010405FE0303FE01040905030700010404FCFDF9FC00FC020A05FEFDF9F9FDFEFDFC0100030104050101FCFBFAF9FBFEFDFF020003050B0A0701000201FB0100FCFDFEFD0302FE00FFFBFAF8F9FC000200FDFCFDFFFFFEFF01FFFF04FE02FBFBFDFF04020100FEFFFD0000FFFFFCFBFD0303FFFDFD0000000300FFFFFDFE0000000505FE02FFFDFF050806000503010201FFFAF7FD00FD000603FDFEFAF9FEFFFE000003FE0004070301FFFCFCF9FCFDFDFD010606050C0D0804000000FE010001000101060500FF0200FFFD00040705010101010402FF0202020201FF03FEFE0102060302000002FF00FFFFFDFAFBFD0201FFFCFD00FEFFFF00FEFFFDFF0100000503FE02FFFDFF0505020103000100FE00FFFDFEFEFFFEFDFE00FFFF0000FF000100FFFF00FFFEFDFDFEFFFFFEFEFDFDFDFDFDFCFCFCFCFDFF00FFFEFDFEFEFEFEFDFEFF010100FFFEFF00000001010100FFFF00000101FFFF0101010200FFFF01FFFF00020101020201040402020201020103030103030303040304030405040504030304050404030403030102010301FFFDFEFEFEFEFEFF0000FF000000000000FEFE00FFFCFCFDFDFDFEFCFCFDFDFDFDFCFBFCFBFBFDFDFFFEFDFDFEFDFDFDFDFCFDFF00FFFDFCFEFEFFFEFF0000FFFFFF00FFFF01FFFF00000001FFFEFF00FFFFFF010001020100030302020201010103020303020303030304030404040504050505050504040303020202010300FFFEFEFFFFFEFEFF010100FF0000FFFFFFFEFFFFFEFDFCFDFDFEFDFCFDFDFCFDFDFCFCFBFAFAFCFEFEFFFDFCFEFDFDFCFCFCFCFEFEFEFCFCFDFCFDFDFEFFFEFDFDFEFDFEFFFEFEFE00FF0000FEFEFFFFFFFFFFFF000100010002030201010100020301020303020303030405040404040404050405050404030402020201020100FFFFFF00FEFFFF0000FF00000000000000FFFFFEFDFDFEFCFDFEFDFEFDFDFDFDFCFCFBFBFCFCFFFFFFFDFCFEFEFDFCFDFCFDFFFFFDFDFDFDFDFCFDFEFFFFFEFDFEFEFEFEFFFEFEFFFF0001FEFEFFFEFFFEFF00000100010002030201020101020302020303020304040304040404040504040505040504030302010202010100FF000000FFFF00010100FF0000FF000000000000FEFDFEFFFFFEFEFDFDFEFEFEFDFDFDFDFCFDFFFF00FDFEFEFEFEFDFFFEFEFFFFFFFFFFFEFEFFFF000000FFFF000000000100FF0001000100FF00000000000100000102010304030202030202040302030203020403040302030304040405050505030404030202010102FEFE0101FFFF0000FFFDFDFFFFFF0102FFFF00FFFFFF03030100000101FFFEFEFF01FFFD00010002040001FEFEFE000202000202020200FF02050302FEFEFEFE000301FFFFFEFF0301010002FF0201030001000100FFFF0100FF020204FF02FFFE0303030202FFFE010201020101000002FF0102020304010201010101010101FD00020100FF0000FF01FEFF00FF0000FF00010101010202020203010001FFFDFE000000010202020301020000FD020303020204020300010405040301FFFF000102FF0001000003040201010002010301000102000001FF01000303070002FF000304040203FFFE020301010100020102FFFF010101020101FF000101010200FD000300FFFF000101FFFE0000000101000101020100020403020302020401FEFF01020001030305040301FFFFFD020203010103040202040506040300010002020301000201010402010203010100010300FF02010000FE01010303060002FF00030304020301FF0302FF010200010000FEFF01020302FF00FE010001010001FE0103FFFFFF00020200FF0100010200000100020000020300020203020201FEFF0202FF020203050301010000FE0003030102020300010303040202000100FF010100010100010001FF00020300FE00010100FF0001FF01010002020401010000020402020001FF0100FF0201FF010002FDFF0000010200FFFF0100FF000002FCFF0200FFFEFF020200FE0000000100FF0101010000030302020201000201FEFF0203000103030404010100FFFF0003000001010301010302040301FFFFFF00FF020201FF0002010000010200FFFFFF02FF0000010200FFFFFF0202040002000003040301000001020100020000010100FFFF0001030200FEFF01FFFE000100010B110B0909060A0403050706030205050202020602090604050403080706080802030304030404040E07FFFEFDFCFEFE02FEFCFCFDFEFFFEFF0100FFFEFDFFFEFBFFFF0001FFFCFCFAFBFFFAF8F5FC00FF00020405040102FFFBFE03FDFFFF0300FFFFFF01020400FE01020101FEFF0100FCFDF7FD000000000205FDFF0300020E110A0606070806020508060503010204020307050807050702030A0806090702020103030605040C06FF00FDFDFCFEFFFCFFFCFB0000FEFF0100FFFFFF00FFFDFFFFFF03FEFBF9FBFBFFFBFAF9FB00FF0202010402000200FDFE01FF00000400FE00FFFF020405FF03020301FFFD0100FDFFFBFF00FF01020302FF010302020B0E060102040604030406060604030203010307070808040601040A0707070602030305040403040C07FDFDFEFDFFFEFEFEFDFDFDFFFFFFFC01FFFDFCFDFD00FCFEFF0003FFFDFAFCFCFBFBF9F9FBFE000000010102000400FCFF01FEFF0103FEFFFE0001030402FE050302010000FF00FEFEFCFD0000000103050100030400070802FFFFFF0401020306030201030000010407050805050200020807060A0800010303020405030D09FFFFFFFCFCFCFEFCFDFDFD000100FF01FEFDFBFCFE00FD00FEFF03FEFCFAFBFCFEFDF9F7FD00000101030505020202FD0105FF0101040103040202060605000503040400020202FEFFFBFE01000102020501030505020304FFFF00FD00FE00040501050300FE0103020406080404030101060506090902030201030404040B0700FFFEFCFEFE00FEFEFCFAFF0401FE01FFFEFDFCFF00FDFEFF0100FEFDFBFCFD00FCFBFAFF02020203040504030302FD02060202020501020403040706060107050405010105030202FCFE0102000103070203040505FDFFFCF903FAFF04FD03FD00FCFE0202FB02FF0502050802FD0007020501FC030409010202020A09FB020505FD030304020F05F6F5F5FC080A0503FFF8F5FB02030208FFF8FE141418190609262713FDF9FDFDF8F3F6FC040AF6FDFC0103F5FD03FA05F601FEFEFB09010203FF0205F9FB040101FDFD020009FFF7080800FF060003FFFB04FB0004000403FFF9FDFE02F9FDFD03050904FCFD0003FF0401FD0101020103FEFF0702FBFE02FFF901FD02020803F1EBF5F6FE050203FFF9EDF5FD020303FCF2FD0C121413050623210BFBF2F8F7F9F7F2FDFA00F7F8FDF9FDF2F903F6FFF6FE02FEF90A0602FFFAFEFEF3FA0B02FFFBF9FD020B04FC070AFD020403FF02FBFAFC0404FD0507FFFCF9FF04F7FDFB04050A0800FDFD0A010100FEFF0303050201FD0405FEFB0102F5FDFD00020903F8F4F2F8FD070C08FCF3F0F5FC050006FEF4FC0D1518160806242816F8FAF6FAF1F6F9FFF801F5F4FEF8FCF6FA02FC01F2FE00FFFD0A0500FDFCFB01EFF80CFD00FDF7FC010FFFF60208FFFC02FC0002FEFE000602FF020405FFFB02FFF8FC010607040905FC0105FA0502FD0403FE030602000205FDFB0400FD02FE02020E09F7F7F8FA0707080DFBF1F1F20209050A01F6FA0E1917130A08252012F3F9FBF9F5FBF7FBFE04F6F5F6F6FBF6FC04FF00F40101FFF80A04FFFEFE0800FBF903FD00F9F6FD010802EE010F040404FEFFFFFF02FD04050300010103000400F8FFFE070A0B070500020702FF0302050400030105010706FDFC0301F6050001010904F9F7F6F90309060E00F4EFF6FC090102FEF5FE11100F18070A242613F4FAFCF9F4F6F4F7FA07F6F1FBF4FEF4F503F9FEF601FFFDF9100AF901F9FEFCF9FC0CFEFEFCF0FD000AFDF60610FD00F9070403040301F9FB050305FBF8FEFEF60102FE02060A06FBF50002FAF6FB01F9FAF5F1F5F9FBFAFBFE020A020C0F020001040A0509FF00050403050D0301FFFF000A07000100030803010000FBFF03010203FDFCF3FBFB040703FFFE0103060001FE040E040307FBFFFFF8FFFD00FE06FD0902060207061804FF05070D0907F8080403030304FE010A070903FC00FEF90107FF000B0A0AFEF703FE00FAF900F3F8FCF3F6F9F9FBFC01010302060D0503FF0511100A04FD010606080C0206FC01FC0104FEFFFF0506FEFEFD00FB000100FEF9F6FEF6F8FCFD000403FAFA0201FDFE00FE06FDF903FB00FBF8F9FCFBF8FEFDFFFEFE0002010B03F9010305FEFDF80400FF0000FFFD030B070901FCFE01F902050201080E08FAF50301FFF5FCFFFBFAF8F0F2F8FCF9FE03FEFCFF060A02FFFF04100A0BFFFE03030409100504FF0105010501FD010204FF02FFF6FAFDFEFAFBFEFAF7EFFAFCFCFC0001F9FAFA00FCFCFBFC04FAFDFEF5FBF7F8F7F6F7F6FBF9FDF902FBFEFE0703FAF9FCFEFDFDFAFCFAFAFBFCFDFCFD07020D04F9FF03FEFCFEFC030A0F08F6F20400F8F5FC02FFFDF9F9FAFAFEFDFAFBFC05040B0F0501FA06090A0806FF020A050C100907FD0202080801FF0000070508FFFDF8FC00FFFA00FC01F4FAF900FF05FFFA000303FEFD02040A01FF03FC03F9FCF901FF0107FD03FE020300FD1106FC0206060205F8FEF8FAFBFBF6FEFE06000100F9FC01FBFDFCFB01090907F6EFFDFAF6F6FA00FDF8F6F3F6FAF8F8F8FCFD04030903FCF8F703060504FBF80404020D130903FC02040A0700FF02000A020702FEFCFF05FFFCFD00FCF3FAFC010600FDFEFD0207FDFC00070CFEFD01FB06FBF7F8FD010107FC07020A0404020F0C07070A0B090B000000FF020200010001010200FF0201FF01000402020202040200FE00000000FF0000FF000100FFFF0200FFFFFEFF00030402FEFDFCFC01FFFDFDFDFCFCFEFE010301FFFF00FE00FF000302FEFFFFFF03020002000101FF000503010201010306040201020100FF01FF01FE00FFFF0003030201FDFAFFFFFFFDFFFD000102FE00FF00FD000200FF01FF0002FEFE0203FF01020302030202020101FEFFFF000100FE000001FFFFFDFE0201FEFEFDFF01030201FFFFFBFC0201FDF9FAFCFCFCFE010301FDFEFF0002FEFF0202FCFFFE0102010102010100000002010003010405060703030404030100010200FFFFFD00020401FEFDFC0001FEFC01FF0000010000FDFEFC0000FFFEFF00FEFFFFFEFFFFFFFE000101020402020201FFFF00FEFFFDFE00FF0100FF00FE0100FDFDFFFE02050301FFFDFDFD01FFFEFCFDFDFBFC00010301FDFFFEFF02FEFE0201FEFF0001020302020202FF0000040202050003050706060403060404050004FF02010002030503FFFEFD0002FEFD010001FF0201FFFEFFFDFFFFFFFFFFFEFFFFFEFBFFFFFDFE00FF02020402020102FEFC00FEFEFCFDFF0001FEFFFEFF00FFFEFFFFFE00050200FDFFFEFF02FFFFFEFDFCFDFE01020601FEFF010102FF000100FFFFFD010102020302040201000302020503040508080606050604060501020002060302030503FFFEFE00FFFCFCFF000101010200FD00FCFF01FFFFFF01FEFFFEFBFF02FFFCFEFE01010202010000FFFFFEFEFDFDFDFDFD00FDFFFF0002FEFDFFFEFF000301FEFDFAFCFD02FDFEFCFBFBFAFDFD010400FCFEFE000300010102FFFFFE010202020204030002000300000404040406050406010502030401040402020201020303FFFDFDFF00FCFCFFFFFFFEFD0000010101010000000101010001000101010101010101010100000101000000FF00000101000000010102020101010101010101020001020302020102030201020201010102010302030302010102030202020201020100000302010000020203030201010303020301030201010101020102010201010303030301010101010100010000000000000000010101000000010101010101010100FF0102010000FF000002000000010101020101020202010002010201010301010102010201010202010202010102020202020202020202030201010101010102010101000202020201010102030203010302010101020202020102010202020303010100020001000000000000000000010101000001000101010101020101000000000000FFFFFF01000000010000010202010103010101010102010103020201010202010103020101010201020102020302030102020302010101020101030101000002010302020101020202020103020202020102020201020102020202020100FF0001010000000000FF00FF0001010101000101010101010101010000FF0101000000FF00000101000100010101020101030100010101020102020202020202030101030201010101010201020302020101020203020201030202010200010101020103010102020202020302020201020101020201010201020202030201010001010000000000000000FFFF000100000001010001020201010101000001010000FFFF0000010101010000000102010202010102010102020203020202010203020103030101010202010102020201020201020302010102020101010101010102020301010101030302030203020102020202020102030202020202020102010101002B1CFDF9061313E8FAF1EC08040405FAFBFC0A03EDF3E7080C0FFBEF01EE03FCF40607FAFBF2E7EB0107F9F617F6FAF910FD07FB0F07070409110D0D0F00EE070A04F2F2040707FD0106FCFCFE0AFDFF1B0303F20105FE05F0FAFAEC0A1E0900FB04EF0303EFF304ECF1DFE9DDECF906F9000BEF1AF9FD140A07F5EC11F8F8032C1802FCFB1110E5FDF1F10C020200FFFCFB11FFF5FBEA09100EF9F301F402FEF90F04FBFEF5F3F0FD07F3FA16FDFEFB08FE0504060A12030713041405FFF20C0A04F4F00604030201FFFC02001100031FFF06F2FE070100F4F6F5F1091413FFFCFEF3FCFEFDF70AFF01EAEFE7F1F9FFFAFD19F21C01FE190507F6F214FCF7042F220BFFFB0B10E605F6F811070205FBFAFD0CFFF1FBEE0D1509FAF70CF70403F10B03FE03F4EFE60210F2FD16FE00F70FFD020309070B0A080DFE0E0503EC08030AF9F3FA1107030204FCFD010D02FF1D010CF3FC0000FBF2F5F6F506171001F503F5060BFAFB04F4EDE9F0E9E80007020215F516FDFD1B0D03F1F612FDF9FF2E2309FCF90A0AE802F5F30907FE01FCF8FD0F02EEF7EB08100DF3F503F503FDF80C0AFA01EFECEEFE0EFBF515FDFEFF08FF06FE090813020311050802FCF012050CF8F3020B0407FE01FCFE010801FE1801FFF3FDFE03F6F4F9F0F50E190EFEFB07F80507FCF903F9FBE1EBE4E9FB04F8FC13F317FD01100A07F2F414F8F7F7311C03F7FA140DE7F9F5F70A03010300F6F410F8F4FDE9030E10F5F301F20603EF0B0CFAFEEFEFEAFE0AF6F21BFAFFFD06FD06040B0B12050C0B06110AFCF10B070AF7F2FB0602050A02FFF9FC0B00FE19FF03FAFEFF0400F6F3F6F50C1A00FDF400F10000FAFCFFF6F4DEE7DCE3F203FE0312EF14F7FF160603F3F617FAF4F9FEFEFDFDFDFDFFFEFE010101010001000202FF01010302030303020201000100FF0003060403020100FEFE0002020300020100FF010002FEFE000101050100040305050402040202FFFF02000301000001000101030306040402030203040303040504030503030302040200010301020204020000010100FDFEFDFF00FEFFFDFEFEFDFDFCFDFEFEFF01FF0002FF01020202FDFE000204030205020301010202000001070604020102FEFD010403010204FFFD0001000000FF010103050201060405050205060302FF0204FF010100FFFE0302010304060203040200030402060404040506030202010100FF000200010304000001000001FFFD0200FFFEFFFF0000FFFEFFFE000000010102020001010302FEFE010200030205050602020101010002060402020202FEFD02050001010301FEFFFF0001FFFC000105050303030207040603020502FF0302FEFF0201FF010100000405080301040201020505030602020402000204010202FEFEFF0201020300FFFF000202FFFF02010101FEFEFF01FFFFFDFE0000FF00FF01020100010402FFFDFF0100040404030302010000010002030402020101FEFEFE020101020301FFFFFF00FFFFFFFF000405010003030605050204030202000300000101FE0000020201030404020401FF030504030403000205030103000302FF0101000102010001FF0001020001000002010202FFFFFEFEFCFDFF0001000001020100000203FEFE010201040405050201010101000102050402020301FFFF02020304010401FFFFFF00FF00FE02020606020103030603060504040401020301000303FEFF010402030207070604040104070504040504050505020401020200FF02030203030100FF01010203040203010104030405FF00050900FFFCFAFBF6F8F7FCFBF7F8F1EDEBF1EBF8F9F9FC01F2F5FBF4F3F0F1EEF0F3F3F2FB00FDEAEDEDEEF7F4F2F1EFF3EFEDF4F8FBF4FBFBFCF9FDFBF8F7FBF8FD05FFFAF8FAF9FF0001FB010205030B0F0704010304010900FCF7F2F6ECF3EFF3F2F4F1FAF5EAEFEAF3ECE8F3F0F5F9ECF4F1E8E9EEE5E6E9EBEC0C050505080E08FEF8FAFBFEFFFF01FBFBFBFDF2F0F7FCFE01040802FBF9F5F501FDF7F502FE010201FBFBF4FC01FCF8FAFC01FF060203FF000901FF06070908040509040808010802040C0F0F0C0E07070A11120E1014080B0F0E07090607FAF9FAF9FDF1F9FDF4F6FFF1F3FDF7F4F1E5ECF2F5FEF2F5F1ECF1EEE8E5E9F6EB0B0C0E09100D1107FE020204FCFC03FFFE0305FF00FC0204090A0C0103FFFBFE030602FF0507FFFD010200FB05080B0C10060C0D1317110E090B151C15131215141419190F13161510080F0F161E1C111A160F161B1B181A0D10160D0D120D0604F3FD01F8FFFDF5FD03FFFBFCF7FFFEFEFFF2F6FFF6F4F7F5EDEEE5EDF0F3F207110A08050C06FC00060902FFFBFCFE00040502FDFEFCFA02090303000000020403FDFE01FB0506070206FC0807FF0605FF05030B060702030B090905050F0F090C0E0F110F0F100D0C0C070F171411151517171C14110F0D120C080807050305FFF9F8EDEFF9F7F304F7F800F1F2F2EEF6F4F7FFF8F7F0F1EEE4E7E5E7EEE90B02FF04030603F6F2040107FDFC03FEFAFD03FEFDF5F8FB0303050600FFFBF3F702F8FBFFFD0501FFFCF8F8F7FAF7F8F9F8FD01FCF7F8F2FB01FBFC03F8FDFCFF00FBFD010000FAFC010004070D080706FF05080F0F0D04030606FF0704FFF9F8FBF4F2EDF2F6F0F6F6EEEFF2F6EFF0E9EFF3EDF6F2F8F5F1ECEAE5EAECEDE8FD04F7F8FF01FD000A0405060601FB081304030308F7F1F7FBFCFAF8F4FC0A11130DFDFA0100070C010C08FAFCF7EFF8EFEEF0F40009FD05040402F7FCFBFAFBFFFF03FE0BFC06FF03FFFA0A090D0E09FEECF6FE0AFDF9000CFDF30602F907F9F9FFFE05FCFC0200FCF9F40502FCFFFC00FCFB020108030705FE02FB0402FF0BFCFEFBFCF900090A0A06070507FDFE0C11070104FDF8FA0006FFFAFAFA040612131009FD01050D10070503FAF7FAEEF5F4EFF3F30100040302090DFDF70504FC00FF040E0AFC04F90303FC0D0507090FFAF8FFFD0500F80404FD010707F802FAF5FD0104FA00040507FEFC0001F7FDFAFEFBFD05080E01FA040801FD040A01FFFC02FEFCFF05000D0C09050606FEFD090904FF02FEF2FC060AFEF7FFF8FE1116150A03F7F7080F030701FCFCF8F0EEF7F1E8F1FB0C050007060402F9FD01FC06F804030105FD03F90007FF0808051116FAF2F706FFFA02060AFDFA0206FD03FCF805080BFF01020207FAFF0D07010301FAFCFE07040802F9020A04FF0203030102000403FFFD080C0A01F9010FFCFE0A0B01FDFCFBF7F9FC02FFFBF6F80B0F18170E05F6F90403FFFD100AFCF1F2EAF7F5F5F5FA0002FA00070B0B010201F804FF01010602F5FFFC0107030A0405120CF9F4FAFBFCFCFD0507FD02FF07FDFEFAF8FF0C0CFE0000F70501FB0902FB01FFFE00010B080AFEFD06090C050405040CFD00FDFDFB0201060CFD06060608FAFC02FEFAFE01FCFCFC03FBFAFAF3000D221B0C090300060906010A01FFFFFAEEF3F1F4EBF40904030603060D00FEF9FD05030B0A0804FA010101FDFE0A04060806F0EBF80001FFFD03060102090BFE03FEF3FC090BFE0709FF040F06020F05FEFF01FB00080D0A0BFEFE0204FB0401FD041104FBFFFD0305F6FEFDFA0D170E0D0F040303F4F0F6F90B0501010910FFF8ECF812100501F3E8F9080A02F3FDF201FA00FB08FF020002010107010004FCFA03FF03FFFBFCFDFF0DFEFF08FD03161200070803F4FC03FDFFFF0E05FD050F0AFCFC05FC0A070BFE02FE13FEFBFF000103FBFE14FF0F04040A0009F2F60D06FDFF0F05F8FFFD0001F1F9FCFC0C0F0C0A08050304EFEFFCFA080300FB070EFCF4E8FE110D03FEEAE4F30306FFF6FEF2FEF4FBFD0A02F9F9FFF5FF09000406FCF4FCFF0002F8FCFCFE07FDFD04FF00120DFD040504F701FFFF00FF0906F901090DF6FC04F3050207FBFE0410FCF5FCF700FCF8F907FA0D0401070006F4F70406F9031205FC01F7FA00F1F4F6FC09100E0B070800FEEBEEFEFC050603FC080EFBF2E9F2120803FFF4EBF1050AFEF2F8F1FBF4FDF9FD04020506FBFC05070A01FFFE01020200FCFB03090D040306FB02110FFC010000F601FDFA01FD0807F7FE0500FBFBF7F201FE05F6F8FE0BF6F4F8F7F9FEF9FB0BF80D04FD05FC05EFF5FE0302FD0F07080CFEFD0AF8F7FAFB09140C0E0C070305F6F200FE080701010B11FBF4EAF7100605FEF1E4F60304FAF4FAF1F9F1FDFAFF01FEFF00F90005000903FCF8FF03080100FF01020C05040AFC000D0AF9000302FAFCFFFDF5F80A01F9FB0B06FAF5FDF0FFFC06F4FDFD09F3ECF4F3FBF6F5FC05FC0DFFFE05FD06F4EE080D05FE13060C0F050A13FDFA010110101011140A080BF7F803040F0A05FE071505F9F1F90F0E0BFFF4E9F70504FBF5FAF4FEFC04000406060403FD020900090801FB02020AFAFDFDFEFE07030307FD05110C04060603F901FDFFF9FE0908F4FB0A05F5F801F1040107F8000312FDF2F9F5FD01FA030D050F04FC0DFF0AF5F70D0AFE0006FEFF0202FE030201FFFC010301030101FDFE04030001020205030100000305020102030203010204FE0000FF01010304040303010000FEFDF900F9FBFDFCFB0102FDFDFFFCFAFFFFFD0200FCFEFCFF0003FDFDFBFDFDFBF6FBFFFEFD01030401020303010001FFFAFB00060304060B080A07020502FDFFFFFBF9FBFDFCF9FA05FCFD0100FF03020303FEFCFDFD0002FF0202FDFE00FF010102FF010302040504FFFF0604FFFF00FFFCFE0302FEFE01050404FEFEFCFAFCFEF8FFFDF8FCFBFD00FFFBFAF9F8FAFC02FEFFFCF8FDFDFCFEFFFCF9FC0300FDFAF9FDFBFF02050704080506060200FFFFFE04040204020C0C0D0A030301FFFF01FDFBFDFCFBF9FA05FD000504020404030200010502FE0102FCFEFE000002FEFE0002040303020302000105FF00010300FCFD0003FDFBFE0205FEFFFEF8F8FBFBFAFEFEFAFBFDF8FEF9F8FBFAF9FAFBFEFBFBFDFDF8FDFFFD02FFFCFFFEFEFBF7FFFDFE01020805060605070503030100FF060505070A0E080A09030202000304FEF8FDFAFBF7FA04FD000006040001FD0102FF0004050100FCFAFF0202FFFF00020101FF000000000000020000FF0102FEFDFDFBFAFD01060701FEFAFEFEFFFDF5F7FBF9FAFBF8FDFFF8F5F8F9FAFAFAFBFBFEFBF8FBFAFBFFFAFAFA01FDFDF6FAFE02FE030904050707070605000001FF060603060A09090A08050503000102FBFCFD00FCFCFB03000606030102030400FF000303050704FCFCFAFF030000FF0300010202000302020605FFFD0203FEFDFDFCF9FBFDFDFD0200FDFAFDFDFBF9F9FCFDF8FBFAFBFDFCFCFBFCFBFBFDFCFFFFFBFBFBFEFD0002FEF8FB01FEFDF6FF0000FF04030403090A0606070200FD0004080806090A0A0A08060401FE0001FDFE00FCFBFAFCFB031009FDFA0A07FBF1F106FAF6080BFBEFE7F1F7FD05FF091704FAFCF1FCF8F40F08010302FA0909F9F90A04030B0A0F130E040A130D05070C060B05FF0403110E06050101060CFA0301FDFF0400010701FDFEF6F4F1F2E5EEF3EFE5F5FD0306FF01F1F2F4EEE8E0F4EAFE0300FF0D01FB020709020C0CFAFFF7F401F8FDFBFF031710FDF909FBFCFFF1F8F2F20107FFF0EDEFFA03090803080CF5F2F3FDF5F9090607FCFBFC0001F5F9040200000509111202F90909010109040A0301FF070E050CFDFA07050708FC00F6FA06FBFF06FDFF00FAF5F2F9F3EFF0EDECF8FC050805FF04F7FAEAE7E4F8F8FEFEF9FD0F02FB030309040811FA0200F60406FCFBF8040E08F6F605FEF9FAFDFCF2EE0B08F8EDEEF3F8070B090D0D0402EFF300F7FB0D070404FFFC0614FCF30100FA020B091E0B0C110A0F060A0C0A0AFBF2F9080CFFFEFE0203010A0AFFFBF2030503FBFB03FCFFFEF5F0F2F703F3F0EEFAFB010808F8FAEFF5F4EFF5FFF60806FA020D00FB08080B070B0C060C04FAFE05FF04FDFE1C10FCF8080402FBF2FDFBE90508F4EBEBEFFA060C09040904F4F3FCF5EFF60B06FE0000FE0A0CFAF50907F8FF011116140A0506040D1009060B03FAFBFD0606FEFD06FEFDFC0203F8F60609FDF9F9FAFBF60203FEFEF3F9FAEAEAFF08FE0705FCFFF5F8F1F5F702F9050B0B0A0400000F070D0F0E11070B050108131113F805160BF6F609FC00F8F2FFFEF2FAFEF7F1EBE7EF02080C030707F4F604FFF9F60003FDFDFCFC0B0FF7F2FAFAFAFD03070B16FF010003FFFC06FD04F8FEF4060603F9FAFBF8FF0403FCF9F4F9FC02F5F6FBFCF1F6F1EFF3F5F7F2EAE9F706000A000101F0FDF2ECF704FA0A0AFE0A050C0D0C0B050A060A040701030A0B0305EF01FF04050203FFFD000100010001030402FFFE01FF0500FDFEFF0101FD040402010102FCFDFCF8FC0302FFFF0303010304030406030301FBFCFCF9FD020101FAFBFBF8FBFEFAF9F9FD030002F9FCFEFF00FDF9F7FBFCFEFF05060807030106040100FD06010200FE0304FDF8FAFBFF00FDFCFDFCFC000101FFFDFEFE0100FDF0FF01040502FE010202030100FF01030202020102030101FFFE020302FE040503030101FEFCFBF7FA0201010201020104040203040201FFFAFC02FDFD020300F7F8FDFBFAFEF9F7FCFE010006FBFEFCFCFFFBF7F9FCFDFA0005050606030101050102FD02040402020103FEF5FAFC0003FFFDFEFEFD02020100FF0401000201F101030706030004000102030102FE00000302FF04040501FEFD0001FFFC0305020301FFFBFEFDF7F80302FF0100FEFC0004FF0402FF00FFFCFCFCFBFB0004FFF9F6F8FAF8FEF8F9F6FBFF0000F8FCFDFE01FDF8F8F8FBFDFF0607040803030304FFFCFD0301040203030301FAF7FB000001FCFDFEFE01030301FD0600040304EF00FE040502FF02FF010100010100FF01FE010204050000FEFCFE01FDFA02040001FFFDFDFBFBF9FC0400FF0001000003020003010102FEFEF9FBF6F9FE02FCFCFBF7F6FAFCF7F9F6F801FEFEF9FAFAFAFFFAF6F6F9FCFCFF050607060400FE01FEFBFE0402FC00FF0000FDFAFAF9FE00FFFFFEFDFC04050100FB01010302FFED01000202000003FEFB020302020102020101FF010500FFFFFDFF02FEFD030500010401FAFAFDFBFA020000FF02FFFE01040103040000FEFDFDFBFBFB0303FDFBFBFAFDF9FBFAFBF9FD02FEFFF8FD02FB00F8F9F5FAFCFFFF030503030300FE0000FCFC0202FDFE0100FFFEFBF9FDFC00FEFCFDFEFDFF030003FA020202030200F8FEFDFAFAFC05FE080A0903FD03FEF7FBFCFB00010203FF07030B0B0807050C050B1101FF040505130D0205030500050C0A06FFF90AFEFAFAFDFFFFFCFBFDF3F9FF00F8FFF1FAF8FA0500FBFBF3FA08140F04FA010CF9FFFCF9FDFF0300FF04FF05FE0206060808020A0603080005FE0302FBFCFE03FC02FEFDFFFBFFFEFFF8F7FCFCFEFF0302010B0B01FEF9FEF8FCFEFDF7FE0902FF050803FF00FD050A140D010E0C03FE0107110CFF0707FFFF060B070303FB0201FBF8FBFBFF00FAFBFBFAF1F8F8FDF6F6F6F8FCFBF7F7F2F201121405030905F8F8FEF7FCFF0103FF01050305030304010502060901060200FA0505FCF9FBFE01FBFBFE0702FB03FE04FCFFFFFEFDFF02FD040001040200FAFBFCFCF3010903FBF5030803000208050809050C07010207020F0D030904FFFE070D0D0200030D01F9FA08060102FEFAFDF7F800F9FEF900FFFBFD00F6FDFBF509111003081105FCFE0500000300FE000A0103FEFF020501070602FEFF0406FE0000FDF9FCFD0301FFFDFA03FE0003FD00FCFBFDFFFD0306FC070C08FF0003F9FAF8F9FB030D0A00FDFD010C040205080D0A0A0F07FF0304020E0B030707FDFA080E090404020803F2F3F3F8F900FBF6F9F7F4F3F1FBF6FDFCF70306FFFCF7F9080E120A040A0300F6F9FC00FFF904FC05050302030706050502020501020501010401FBF9F9FC0101F9FAFDFBFB02FB03FD02050502FF09030301F8F8FB0507090604F9FE0005020200030506010402040C110E04FD000309160E03020603FF040C1000FBFE0105FBFDF9FAFD03FBFBF4F6F5F8F8F7F4FCF9FE0402FE00FAFA0B150B07060F0C01FFFDFCFFFD00040407060508FE02030101FD0105FDFF0100FCFFFCFEFBF6F701FFFEFB03FB0301010400F7FE0807FCF2F60201FF03000301FF0101FFFEFEFEFF0200000303060F150E07030100FCFDFBFBEDF006030201FF0301000303030001020100FDFC0102FBFDFAF9FBFE00FEFBFDFCFBFDFFFCFE00010201FFFE00FE03010606080104FE0000FEFCFBFEFE00FE02FFFFFDFAFB00FE00FCFE000600FC01030303070604020204FDF4FB0605F7F0F6FE0203000304FEFDFF03010100FC0004010003040810170D0A0400FAFCFCFBF9EDF10300FF02FFFFFE02FE00FD000101FFFFFEF9FF02FEFAFBFDFCFEFDFDFDFEF9F9FBFEFDFCFF02FF01FCFFFFFD010203060A0202FFFEFEFDFEF9FE000102040001FFFEFFFEFDFEFDFFFF08000001040403070805030603FDF2FB0607F9ECF1000301000101FDFEFE00FEFEFFFE020601020305070F18100A0601FFFCFDFDFAEDF204030403FF0101FF0201FDFF03020301FBFE0200FDFDFEFEFDFB00FFFEFCF9FBFEFEFCFD01FF01020100FDFF020302040806040101FF00FEFCFF01020102FFFFFFFDFD01FF02FFFF0306FDFE00040403070704040702FEF2FA0409F8EBF3010200010503FEFDFCFFFEFBFCFB010502010205091217100D060101FFFCFBFBEFF2040403040405010402050203050407070300040602FE00FFFF01030201FCFCFCFD000000010101FFFFFEFD0200050608070603000300FEFEFDFD0103010201FEFEFBFFFD00FF0201010602020002050304080001030402F5FA0606FBF1F2FF00010301FFFCFDFCFDFEFCFFFAFCFF010104040810150C0902FE01FEFEFBFAEDF001060101000000FF000201000001020200FE0205FFFFFCFD01FF00FEFFFEFBFBFDFDFCFE01FE00FFFDFCFCFE00020307080102FEFDFCFCFCFCFBFE01FF01FEFDFFFCFBFCFAFEFCFEFE02FD02020202020405FF0002FE07FB0703FB00FEFF040B070002020302030409030701FEFFFE020601000900FE07030303FFFE0007040B0804FF07FEFA01FD02070600000109030E0D030206FE040203020709030509FF02060106040107FEFE08FA01040006FCF7F6F300FBFEF3F9F808F8F2FC0508F8F600FCF9F905FD050105FE091D1E2E2A232A2D271E0003FB01FEFE02FE05FF03020106090A04020001FA070304050000030904010C07050902FF04FFF9FD02FD070603FD00FEF8FA000703FAFFFAFEFD020400FE050201FC03FBF70000FEFEF7FBF90306FFFBFFFEF7FFF7F4FFF5F8F9F4F2F8FBFEF4EFF5F503FFFBF5F3FEF4F8F8F2F9F400FC03FE04070E1616292B242D2C21250001FCFCF6F8FEFCFEFFFDFF02FEFE00050400FEFE03050400FFFE00FBFD0304F9FC040604FEF9F604FD04010307FFF9FAF4F6FAF8F7F8F5FEFDF3F602F9FBFFFDFBFCFAFCFAF7F7F9F5FAF3F204F9FAFDFD03FA01F5F3F7F9FBF4EFEFEEF5F7F4F0F8F7F8F4F3F9FDFFF7FA02FBF4F901FC00010B010C0E1B2B27222F321E2001FCFC08FCF5FEFD0000F8FBFFFEFF000702FE02FF0101040300030102040001FDFF060501FCFDFD06F9FE02050400F3FBF6F6FCFF06FAFB00FFFF0A04FEFD01FAFEF3FBFFF7FAFEFEFAFEF9FFFFFDFBFBFCF8FDFEF8FDF9FEF3F4EFF3FAFBFCF8EDF4F9FFFEF8F70003F8FCF7F7FEFAFDFB020604080D1216202428342E1E210303F4FCFAFC01F8FE01040502000500070200050606FDFF0602070600000404FD03080B03FE0003030405010B01FCFE05FE02010309F805FD060407080206FEFF060002FF0205040901FD03040401F9F700F6F8FFFE04FFFDF9F7F1F2FDF6F7F5F1F0FBFDF5FAF8FFFEF4FAF8F9F6F3F9FD01FE03F90A1316202824291D1D21050203FEF2EDF3FDFEF6FD02FFFAF7F6F6EBF2ECEDE8F3F4F5FB060B0D090B0812110804FBF7FA0408271CF0F5F3FAF4F90801F8F3F802FBF902FFFFFEF4F2FFFE040404FDF8FF0E0A020D0C020FFF010D0F0F060C080CFEFFF6F4F6FFF903000203FF0C0503FF0A01000104040C050A060C0B03F8000507FF0002FEFF000809060809FDF1F4FE04F9FE00F8FDFF00F9FEF3F1EBE1EAF4F8FA000107110806101A110A0306FAF8FD0C221FFCFDFBF4F204060402FDFC0200F80201FFFEFAF1F2FC02F8FFFBF9010501040506FE0A08030A1016100F080803FEF7F7F5FCFD0201040A00070201FCFE0503020806FE050000070A02F9FC05FFFB0103FBF9FD0201050A08FEF3F2FC0B05F7F8F5FE02FFFAF5EDEEECE7E9F0F4F1F9FD0D0F0B0F0C13110E07FFFBF8F90C271EF9F5EEF6FF00040AFCFE01FEF4F0F602FFF5F8F6F2FDFEF704FCF90509050600FCFB0B08FE060F0F0A070A09FBF5F6F1EEF2F2F9FD02FC0200FDFEF6FC01000401070701FFFD0205F6F9FD0105FC02FFFBF4F5FCF9080B100AFCEEFB11FFF2F8FBFFFEF9F6F8F7F1F6F3F3FCF5F8FD030D0F0A0D1416130C0B01FB0107092218F3F2F4F3F5FC04FCFDF50104F6EEFAF6F5F4F1F0F30001FE00FBF7FD0304030300FAFEF9F90209150A0C0E05FCF3F5EEEEF4F604FC050405050500FAFD000005FF04080D020403FBF8F3F8F7FFFE01FEF9F7FFFD030C000A0AFCF8FC0A09F601FEF80504FFFEF9FBEFF1F200FD0703010E16070C101A15181403FBFB070B291FFCF4F9F4F6000702F901FA0302FB03FEFFFFF7ECF6FE06FD0402FE080D060102F9010C01FD090F120F0C0F0700FAF4EDF2FEF7FF030806010901FEF9FCFE0507FD0008000203010003FE00FDFDF1FEFEF8F902F700FCFFFCFBFD040000FEFF01010403040400FFFE0102FCFAFD040B0B0907010102FE010507080604040300FF0202020305090A0A080906070406070C0E0A0A0B0A0B0A0808090B080805030302040201FC0305030504020400FF000300FFFFFF0004FFFF0100FCFBFBFBFFFBFDFCFEFEFF020302FF010202030103FDFBFEFF02FFFDFFFDFAFB020201FFFDFD0201040402FFFEFEFCFDFBF9FC0307060906FF01FFFCFD030302FFFE0000FFFEFBFCFCFE0101020405030100FDFE020407030504020407060302050505FFFDFDFCFD00FDFC00FF00FFFDFD00FEFCFC00FEFBFDFE0000FDFC0000FCFAFAFBFEFDFDFCFAF9FCFEFF01FF020205030100FDFCFDFFFEFEFBFEFBF9FC000101FEFEFF0102030301FDFBFBFBFAF9FAFB0307070703FEFFFEFAFE010101FEFDFFFFFEFDFBFAFCFDFF010102FE00FFFCF9FD020104010000FF0204030002040303FFFAFCFBFE00FDFEFF0000FD0000FEFBFBFDFFFEFEFDFCFF00FEFF0200FEFCFCFDFEFCFDFFFEFEFF0001020003050304FF01FEFE00FEFF00FAFEFDFCFD01FF01FFFFFF0104020101FEFEFDFDFCFCFBFD06070508040102FEFBFE030403FFFE0102FBFDFDFCFFFFFF030403FF0100FDFDFE0503050303FF020205040202050204FFFFFCFDFFFFFCFEFF000000030402FFFCFCFF01FF010100030202050300FF000102FEFFFE000100020602FE040503030001000201010302FDFEFDFAFD0403000002FF000402020301FFFEFDFBFAFBFE0406050806FF00FFFEFD000101FFFD0101FDFCFBFAFCFEFDFF0000FFFFFDFBFCFE0001030000FEFF0104010000020203FEFBFAFCFEFEFBFB01FFFFFD000000FEFCFBFE00FD01FEFF0400000301FEFCFEFF01FD00FDFDFCFE0000030002060401FE00FF0101FEFEFF000BF9FD040406080C0D050B0B050704110E0508080E0E1003FF0B02FA01FF050E0A02FBFF01FDFFFF0100FDF6FCFCFBFEFAFAFF0504FF04010300FD04FF0700020103FDFCFD0301FB00000707010907FDFAF8F901FCFAFF02FFFF06000402FCFCFAF9FF01FFFFFF02FDFDFF00F8FBFCFAFAFEFF04FDFCFE0403FF04070901040404F5FD04FD0204070A04070A02010A110F03060D100E0F05FD0504F7FE0205090907FFFCFC0106FFFEFBFCF602FBFAFCFBFF040502FB00FE0702FE02FF04FF02FF030602F80603FE05030504070706FEF7F7FBFFFFFC0403FFFD0502020501FFFEFDFFFEFE00FF0300FD0000F9FCFAFAFE02020200FEFE0001FE02050BFF03FB03EDF801010402FE060A0A03FE02080C0B0301060C0C0E02FC03FAF2F5FE060A0800FCFCFAFC0306010003F8FCFEFAFEFA00060603FBFCFC0103FE03FD0204020102FE04FEFCFD030208090906030AFEF7FBFF00FBFF0101FCFF0200FB02FFFC00FC00FF01FF0003FFFC0100F8FDFFFD00FF04FFFDFCFE0107FE01020707080203F3F8FD01FDFC030400020B03010D0D0E04FF0B0E0808FD0007F8EFF60009070802FCFEFDFDFB01FEFBFBF7FFFCFAFBFC02060701FCFCFD0306050702060502FEFF0400FAFE010207070707070A08FCFAF4FFFDF3F9FD0100FDFFFFF90203FEFFFCFDFFFFFFF80004FDFFFFF5F7FDFFFD010501FFFA0404040303060A06080002F6F900FD0200FE0308070701FF070D0A01040A0E0F0CFE040900F6F6FD08060706FCFCFEFE0408FFFFFAFAFBFEF7FEFEFC000505FC020303040401FE0603FFFE01FFFDFDFFFFFDFE090B07050607FBFBF500FFF7F4FB0405010401FC04FDFAFFFEFE0301FF020300FC0001F5FCFDFE00FF010800FF0407040302090A07060305FEFAFC0103000A1A0E020105090A07090D0C090702020002FFFAFF030007FC010003040202FF00FD0405020206080705040D07070608090904070A040701040706040404060609FF0101000106010208060804FF03FF080107050409050502FEFDFD01FEFAF8FCFEF8FBFCF705FDFDFDFF02050606040106040101010003050600FAF6FF04020B190A02FEFF0504040B080A0509050402FC02FFFE020102FCFEFF0403020100FFFD030E0B0C0B090904080D0A0A070B0B080E090E080902040604060405050A0904050302070705080A07080700020507030E08040A070901FFFCFD0606FD00030400FE000007FE07020204060A0707090A050A0606040A020601F9F8FF02FF07140800FDF80206FD0307030306FE02FBFF02FEF9F9F9FAF8F8FBFCFCFEFEFA00FD0209030604000302030806050302060504010304080202020005FE01060204FE0103FE02FD000406020103FF010202FD0A0502060108FF01FD010404FDFBFC06FDFEFF0002000301FE03060908060807040705020204010A02FEFC0401FE071102FFFBFBFA02FBFFF8FEFF04FF00F8F9FFF9F9F9F8F8F5F4F6F5F9FBFDF8FEFAFEFFFAFDFFFCFD00FE040203FFFDFD0004FF000406FFFAFBFCFFFBF8FC00FEFDFDFD01FDFFFBFD02FAFCFDF8FDFDFEF70802FA01FB01F9F6FF0003FFFBF8F703F8F6FBFBFDFAFDFEF9FF07040506070201FF02FF00FF04060602010403FE070B0000FDF4FB02F9FDF9FCFB03FBFCF8F803FFF9F6F4F5F2F4F3F4F5FCF9FAFDFAFDFDFC0003FDFDFEFC030601FD00FDF9FD00FC040806FCFBFAFFFCFCFEFAFAF6FAF9FFF9FCF6F901F9FAF9FCFCFAF8F60405F500F702FCF4F9FC01FCF6F8F600F4F7FBFEFAFAFCFAFEFB05010506000000F2F8FBFEF506000603020706040003010200FF02FF00F7F5FC00FEFD00000701FBFAFC01FFFCFFFFFFFE0306FF0100FF000303FE05030401010303080402030A0B08070B0C090B070701080E0A0201010809010201FD04020404060704070C08090C060B0C0601FD0401FFFCFDFF06FBF2F3EDE7E8F1F6EFE8E4DFEEECE9F2F0ECF2F0F3F102FE060600010100FF00FC00FD03000200FBF8F8FFFDFF00010202FBF6F8FFFCFBFAFB03FFFDFFFFFDFD03FB0308FC00FD00FCFB000703010001030205040805FF0401FC0505050502FE010604000302FAFCFF0504020A060509080B0E08060605FFFD0402FD01FCFD06F7F7F6EDE2E6E2EBEFE6E8E0EFF1E7F0F7EDEEF0F6EE03FB020503000201FEFDFEFCF9FAFDFDFFFCF9FDFDFBFAFEFDF9FEF7F6F9FAFBFCFEFAFBFAFFFFFFFFFBFFFE0100FAFAFDFFFAFE02010001FBFE02060001020304FF03040506060401FC010401010103FCFF03FF04060606070B090A090B0E0704FFFD0703FF00FE010AF8F2F7EEE8E7EDEDEDE5E1E5F1F0ECF2F4F1F3EFF5EF0100020302020100FD010000FEFDFAF9FCFDF6F9FCFE00FEFE0101F9F9F7F9FCFDF9FDFE03010103FFFE020105FEFD02FE01000202FF0703F904030504050C06060505080A09050501FF04010404010404030A040809070E060908110E0709070908010302FD01010407FEF7F4EBE9E6EDEBF1E2E7E3EFE9EBF1F5F8EFEEF8F503FE020102FC03FFFDFD0202FFFAFC01FFFFFCFC00000202FF0405FF00FDFFFBFCFD00010400040503FD0003030805050104070305080D08040605090B0B070C0C0C090509080A0400FF050605010106FFFF06080A05090B090E0D0D0F060B0E0D0A050604FF02FF0406FDF5F8F2EBEAF0EFEFDEE5E4EEEFF2F2F1F4F1F3F8F01B0CFBFD030D0DF708FFF4FCFB010604FDFD01FDF5FAF7FC0202FBF4F3F60B0AFE090AFFFBFAFCF6050E06010EFF0B06090004FE04FDFBFE0E10070D0805FBFCFE01FAFCFEFF01000102FBFA0100F8F70C0504FD02020305FE010EFE061706FFF903FD0407FAFE0801FFF9FDF505050200FBFB0516150D08FAFCF8F706F8FBFF170FFCFFFF0F0CF705FEF1FAFC000A02FEFB03FBF7FBF2FF0408FFF4F2F60F09FE0706FBFDFDF9F6050E03FE0BFC06FF01FB00FBFE00FAFA070AFE0B01FEF8FDFB04FDFAFAFBFDFF01FAF5FAFC01FCF90B00FFF7FAFE000303000AFE001205FEF8F9FAFC04FEFB04FD02F7F8F900FEFAF9F6FE031B140E09FAFBF3F707F5FBFF180E0003000F0DF205FFF6FDFC010603FEFC01FAF4FFF6FB0504FFF2EEF70D0CFA090AFDFDFBFAF5021204000BFE090204FC02F80202F5FC090BFD0D04FFF2FDFC06FBFEFBFF04020501F8FBFD02FCF608FEFEF4FAFAFE00FF000CFBFD1000FCF2F9F8FC0300FC00FAFBF6F7F8FFFEF9FCFA000415130D09FCFEF5F303F7F7031810020604110FF60703F8FDFD01080102FF03FEFB01F9FD0907F9F2EEFC0E0D000C10FFFEFEFAFC050D07FD0EFD0B0202FBFEF802FFFAFA0710000D0304F601000A02F9FE0600020103FCFAF9FEF7F80504FCF4FE0202FEFF010DFEFF0F05FCF4FDFAFC0500FE04FA00F2F2F803FEFDFFF90004181A110AFDFEF7F506F8F9FE20140501051412F80405F8FCFD04060701FE05FEFA04FA000705FBF5F2FB120AFF0B07F8FD00FFF5030E04FC0FF90D03FCFBFEFC00FAF7FC0D08FE0701FEF5FBFC04FDFFF8FE00020500FBFBFE02FCFA050200F6FBFFFE00FDFE0DFFFC140101F5FBF7FB06FCFE05FC03F2F7F400FEFFFFFB040419160E07FB02F9FB0AF9F9FFFF000001FF00010301FDFE000001000001010000000101FFFF010101010100000202020202020203010101020003000100010001010201010001040302020302020304040201020303010002020203030202020303040203FF0200020402020201010203000102030302000303010200FFFF0101010302FDFEFDFF020101FF03FFFF0100FEFF020301FFFEFF0000010100000000010000FF000100FF0000FEFF0203010100FF010201000101FE01FF000100FFFEFF00FFFF00010100FF0001000101010101FF01010202000101020203010102010302FF03FF00FF0101020301010304030100020102FF000303010101FDFE0100FF0000FDFCFDFEFE01FEFF00FEFF0000FF00020300FFFDFF01000001FF010001010101FEFF0001000000FFFE0201010201FF010201000203FFFF0102FF0102010001FFFF01000302010101FF020202010200000203030201010404060002030304000003000300020301030202030402020102020300020201010301FFFE01FF020100FEFFFFFF0001000000FFFDFFFF00FF010300FFFE010000FF00FF000202040303FFFF0201000100000001020202010202030103030502010202010104060302020104020303030102000304050304FF02050402020104060606000202020201000201050201020003020304030405010402020204030201020100000302020101010202000203030204FEFDFEFF00FF000201FDFF00000001010101020102020200FF0000000202FF0000010201010102020202020200010202000104040201010102000102020101FF0103050201FFFF0103020202010305040101000101FEFF000002FFFFFFFF00030202030102000101FFFF020001010202FF01010001010200020200000305030300FF030200FBFBFAFDFBF9FB00FDFEFFFF0200FEFBFBFF02FFFCFE01030200000000040102010000FF000206020003030300050603040002060102FF010506FF0300030201FE000004020300FC040401FAFFFBFBF9F6FAFEFD00FEFDFFFBFD00FBFDFB0001FAFA01FCFBFBFFFDFDFCFFFEFE0000FFFFFDFBFFF9F9F9FBF9FAFB00000403FDF9FAFBFEFEFAFD0000FDFEFF0301FCFBFCFE0301FEFF0003030201010304010404030100FD010603000403020104070403020308030301030706000401030504FF010001020103FB020203FEFEFBFAF8FAFB0000FEFDFF02FEFEFEFFFEFC0101FDFCFFFFFCFF02FEFE00FFFEFE01FF00FF00FCFCFBFCFBFCFAFC0001FF050700FAFCFCFEFEFAFB00FDFC020201FDFAF8FA000100FCFE0304040303000103020404020101000205010107060501020503050203050303FF0106050001000602FF00030003FF0101FAFF0302FBFCFDFEFBF6FAFBFFFEFFFF01FCFDFFFAFDFE0102FEFC0200FAFBFFFFFE0000FEFE0100000101FBFFFCF7FCFCFAFDFFFFFF060802F9FBFF00FEFCFD00FBFC000100FDFCFAFB030201FFFF0103040403010403020102010200FE00060102060504020305020402030405030002050502030204020200020102FFFFFDFA0000FFFBFFFEFBFCFAFDFDFFFEFEFF00FEFEFDFDFF010200FDFA0201FCFB00FEFEFFFDFE000000FD00FFFAFBF8FBFDFCF9FBFC0102070700FCFEFE00FFFDFEFEFEFD000300FDF8F8FB030200FFFC0203030503020306000002000100FE0004040304070401030706080404080402010406050102010303FF000100010100FEFB00FE02FB00FEFCFDFBFDFFFEFAFF0002FF00FDFBFF000404FEFF03FFFFFD0400FDFD0001010102FEFEFD00FDF9F9FEFFFCFAFEFF0000FAF5F90200F904020105050403FF04FEFF0003030101FFFAF6F8F7F0F3F80106040104050003F9000B0B0D0D090B06040B050707080405040406070602040101FF01030200010500FE04FEFD00FD010101FBFEFFFDFF0002FEFBFFFD05050201FBFFFD00FDFCFE00FD02FBFCFA02FDFD0202FBFBF9FEFB02FCFCFFFFFCFC01FEFBF6F9FAF8FBFFFE050400FCFDFAFDFDFE03010204FFFBF9F7F7F7F4EEF4FAFCFDFE000201FEF6F90402040301FDFF00FCF9FD00FCFFFDFBFF00F9FBFCFEFBFEFAFCFDF8FCFFFDFFFC00FBFCFEFCFEF5FAFEFDFCF8FEFDFDFBF9FDFDFFFFFBFEF7FC00FFFEFBF9FDFCFCFE01FFFFFCF900040400FF0201050405040002FCFF00F9F8F7FBF5F9FF00000400FDFD00FCF8F9020507030301FFF9F7F8F2F3F7FCFFFEFF020203FFF8FF07090F0B0401020202FF0005080602FD0207FFFDFF02030102FE0100020306040507FDFC0301FEFD0101FEFE010502060202060306010502FD0708080701FFFF04FDFE03040401FF08030504000609080C0908070DFD02FEFAF5F9FFF5F6050806050502FE01FBFAFAFE0109060004FCFCF9F8F5F2F90003030406040503F6000F0E100F0C0D0A0A0605010B0A0A07080A0C0605050806080905080505070C05050502FD090708020104020506090605050309070D040400000505060804FD01010002010405040105080706020506050B08060709FC0501FBF4F5FCF8F400FF020601FCFFFAFAF7FE0002FF02FCFDF9FAF7FAF3EEF1F8F8F9FD0100FEFDF5FA0301070800FFFEFE00FAFFFBFAFBF7F8F9F9FEFFFEFDF6FAFEFAFBFAFBFDFE00FCFEF5F9FEF7F9F7F7FAF6FCFEFFFB02FCF6FBFCFCFAF7FBF40000FBFF00FCF7FBFCF9FBF8FAFAF9FC00FDFD0003010105FE0102FDFEFDFE00F8FC00FF00080101FEF8010B0000FCFA01070D10FFFCFEFAFBFB0600FB00FFF8FCFAF700090C050300020E0406030A05FF01040606FF01040804070704FB02040005040700060D02030D0E0B02020003FDFCFCFC0000FAF8F803FB0805FEFCF8FBFFFDF8F7FCFBFEFEF8FE03FC00050005090905030DFE000307FF0601F9FFFFFAFA03010106FE01FFF6FC06FFFD00FA010C0B09FFFFFBFAF9F8FDFAFE0301FCF8F6F5FB020605080402080103010301FBFBFDF90000FD010601060301F5FFFDFD050301FF0309FE000608FF000600FDFCF8FCFDFDF7F4F7F9FCFDFE03FCF4FCFDFCFBF8FAF9F6FAF9F7FFFFF9FBFE00080706020009FCFEFE04FD0500FAFE02F9FD0706FD08000703FA010501FE00F7020A0A0B030200F7FBF9FDFDF90300FEFEF9F6FD08070608020208030402020800FE020001FCFE080504090506F600FDFF090300020A0BFEFA0607FFFAFEFFFEFAFAF4F803FAF5F2F6FBF80404FCF7FA00F9FBF8F9FCF7FCFBF6FC00FCFD020107070B09020BFF00FB040500FDF60100F80109060207000806F9060AFE0201FDFE0C090BFEFDFDF9FDF9FEFDFEFEFFFFFDF8F7F8020504080400050509030607FEFE020105FCFE080904080107FCFD010408FF0202050BFEFB060C01FF00FD02FCFBF7F8FFFCF7F7FBFCFAFF00FEF8F9FDFDFCF9F8F5FAF9FBF80101FA01FE0108070805070F04FD030A0704FFFA060AFE050B07020C040104FB020E030301FC020B0C0C0101FFFAF9FC01FEFD00FFFBFBFCF8FBFF050404FEFB030205FBFC0200FCFCFAFFFDF9060702020000FCFDFE0002FEFEFE050AFDFC050901FCFEFCFCFBFAFAF6FFF8F6F8F7FAF8FA01FEF6F5FDF9F9F9F8FAF9F9FEF4FB02F9FEFD0506090409060EFDFC050902FFF7FF0102FAF6FBFDFCFDFCFBF9F6FBFDFF01FF01030404FFFCFF01FEF8FCFEFF02000000FFFBFCFEFDFEFDFCFDFEFDFBFA03FEFDFE0001FDF9F8FCFFFDFEFF00FBFDFE01FBFBFDFBFFFCFF01FEFCFAFD00FDFCFA040300FAF9F8FAFDFCF9FEFC01FE0101FEFFFEFE00020002020201030202FEFFFC020804FFFFFBFCF7F8F9FCF8FE0202F8F701FFFDFEFFFCF8F9FE0002030002010405FFF9FF0101FDFDFFFF0205010301FEFF01FFFE00FEFF03FFFE0002FF0304050301FB020400030404000002000500FC0100030303050502010204030303040702FFFCFEFF040200040101030507040201030605030500FE000002020301FE0005010303FFFEFCFCFEFDF7FD0001F7F902030000FFFDFBFCFEFF0006070905090702FBFEFF00FFFFFDFE0305060502FCFCFC01FF01FCFE00FDFCFCFC00FFFEFF01FEFBFEFEFDFEFEFEFBFBFEFDFEFFFCFDFF000303FF0100010305060701060806FFFE00FF040400070003040C07070404040807060606010300FFFE02FE000203030603030400FDFEFFF7FC0303F8F6FF0502FFFFFCF8F9FE000009090908090904FDFB0000FCFF01030603040300FEFFFD00FF00FDFC01FDF8F9FEFBFEFB0000FEF9FBFBF7FAF9F8FBFAFBFCFDFBF7FAFCFDFEFF0103FEFF0104FF030204070304FDFEFC03060005FF04040907090403010605060806020000FFFFFBFEFCFF03020501FD01F9FBFAFFF9FB0002FBF8000203FE03FBF8FD020003090B0706080A05FF0003FFFF0301030506050803000002010203FFFF03FFFDFF05000203030706FDFF01020200FF03FE0000FF00FF020201000304040401020403050507070506FCFBFB04040101FE0101060402FDFDFDFFFF000202FEFBFDFDFCFDFEFCFE00FD00FEF9FBF6FAF9F8FC07100DFEFA060A05FDFBFFFDFFFDFE00F8F80005010002F6FD03FEFE0101FF0404020300F3F10109150BF6FDF3EFF4F2F6F8F7FAF7FEFBFF010202FFF7FA03020407050203030503FFFD01FCFCF7FF0303FE05090507010203FBF5000204050904FE000300FF05FEFDFEFBFF03FAFDFD01FDFC00070A090302FE000007FF04FE081208F5F00B0B060201FCFE0306070504FF05040900FDFCFE00FE030200080D110E0A04F8F7FC081210FDFEF8F3F7FCFAF3FA00FCFDFDFB0509030302FDFD0004FC05030007FAFAFDF601FBFFF9FF02060804FF0301070D0701FCFF0005090D0B03030404FE0706050402FFFCFBF902060403F6030901FD03000106020608F6070802EFEF06111104FCFCFB020101F9FDFE07050700FCF3F8FBFE01FF070909050A09FEF3F2F90F160CFDFEF5F3FBF9F0F7FDFBF4F7F8F5FFFDFCF9FBFBFCFD01FFFA0305FDFCFFFFF7F6F6F8F9FEFE040703FE0305FC0907FBF5F8FA0005020003FA0401FD0706FCFFF7050100FEFB00FFFCFE010200FE020000020104FFFCFE0603EFE8FC0C07F8F8F9FBFBFD04FBFE0001040000F8F5FC00FCFEFD01060B04040600F9FAFB021A11F8FDF8F5F2F5F4F5FCF6FDFDFCFC04040200FCF9040405FF00FE00FF0700FAF6FAFEF9F8FA03FFFF06040304080603FDF3F9010201040207FE0403F8FCFEFFFBFC03FEFCFF0302FC01F3FC030000FF03010006FF00FF01FE00F1F0FB0307F9FCF8F6FF04FBFCFCFFF9FF0102F9FA00FEFBF7FA030809060C0D00F5F5FC071910FBFCF8F0F4FBF8F5F6FFFD0001FF05080F0800FB02080E0300050A070701FFFDFAFDFFF7FC050603080706000701FEF6F8FCFC000004FE0203F7FBFAFCFAFBFBF4FEF6F7FD02FFFEFEFCFF0200F7F7F9FAFE02FE02F4FD05FDF9FAFDFFFAF7F900FAFBFCFCFCFF0000FCFE080402010200030603020C0A080B0A0C0B07FEFAFBFCFDFEFF04030902FFFBFCFDFF00FEFBFEFFF8F3FCFAFE00FEFDFBFEFE00FD01FDF9FFFC0103060303030302FB0100F7F9FFFD03FF020403020207030602FDFBFDFF01FAFBFCF8F8FFF5FF00F5F9FCFFFF010101FCF2FE06FFFCFCFEFDF7FAFAFAF8F9FDFBFC010302FCFE080500030500060A03010C07070D0B0C0D0902FBFB020503000409080306FDF9FF040300FFFF02FCF5FE02FFFDFCFDFD00FC0101FFFDF9FF01010509050605050300FF02F9FB03040302070401020201050504FFFCFBFDFDF9FCFEF9F8FDF8FFFEFAFEFF0300040404FDF7FE0904FDFFFFFEFCFAF8F8FBFAFBFDFD0001FAFDFF0507FCFEFE01060903000907070A0D0C0D0900FCFDFEFEFDFF0103040104FBFCFEFD01FAFBFDFDF7F6FBFDF7F9FEFCF6FDFDFB0000FAF6FFFEFB04050702030301FEFE01FAF8FEFE02FF060302FD00060307030003FAFCFDFBFCFCF7F9FCF90100FE0000040401020400F505110704000205FBFBF9FCF8F8FDF9FC03FCFBFE000908FFFE0203050701040B070B090D0C0B07FDFCFAFEFBFCFFFF0000FCFFF8FAFFFDFDF6F4F8FCF5F4FBFDF9FAF9FAF9FBF8F9F9FFFDF6FAF8FC03030404FD02FDFFFCFEF5F801FBFF02030400FF03050307040002FAFF00FCFCFFF7F9FFF7FDFFFC0105020205050404F80211090702020602FCFDFDFBFC01FFFF0201FCFF030E0A03040502070B0304070B0F100D0E0D09FFFFFC01FEFD020806080506FCFE010703FE000105FEFB0200FD010000FCFF000000FFFFF9FE0102060A0907030605040105FBF8020103040304FF020105030702FF00FA010500FCFEFEFB04FC01FEFFFE02060300060501F8030908090EFDFDF9030704FF000303FFF9F6FF0705060401050D0802FEFAFCFF01FAFF050C1008040102F9F800F9F8FD03FDFD01040203F9FCF9FDFA0103FFFF01FCFD0100FCFEFF03050608F8FCFBFCFF0005000202FFFEFC010403FA03FD060808050201FCFA030209090B0101010404FF04FA00FF0003FDFBFEFAFE03FFFA040706090BFAFCF9FB000500FF0301FFF7F7FA03040701FF060B060200FAFAFEFB0203000C10080503FFFBF9FCF4F9F5FDFE0001FF0003F7F9F5F7F9FDFBFFFA00FBF9FEFEFCFEFB03050507FCF8FCFAFEFC03FE020201FCFC040200FF020201010806020101FD04030C090E06FF010406FBFFFC03050303000101FAFEFCFAF7FBFD010908F9F4F6FA020000FB010101FAF7FA0607040200040C060202F8F5FBFDFDFE010A110D0704FFF7F8FEF4F6FAFEFBFA0403FE00F7FAFAFAFAF8FE02FF01FCFBFFFFFEFEFB0006060BFDFAFFFAFEFDFD01030100FCF8010300FC020204020909000401FD010108070C0603030307FE00FAFF050201FCFFFCF9FC0002F4FCFAFB0304FAF1F2FE0201FF000000FDFDF2F80606010003030E08FFFFFAF5F9FC010103070B0D070502F7FB02F5F9FDFCFDFD06040204FA02010001020204FD04FF030504FEFDFC070A0C0EFBFB01FCFCFC010203010200FD030401FD010404010407030103FB05010602080703020206FF01FC020300FFFA00FFFBFC0201F4FBFAFB0005F8F2EE02000103FD000101FBEEF8060300FFFDFD080600FDF8EFF9FCFAFA01090F0A0606FDF5F3FCF4F5F6F8F5F8FCFEFDFFF4F6FAF9F9F9FFFCFBFFFCFF00FDFFFBFA01050907F9FCFBFCFAFEFEFF00FF00FBFAFF01FFF701FE03FF0303FE01FEF90100050006050102010101FFF70207FEFCF902FCF5F7FCF7FDFB0703FCF2030D0BFEFDFCFCFEFF0103FDF4FBFE00FCFAF8FDFCFAFAFAF7F4F7FAFCF9FAF6F5F7FBF0F40202FF000109060405020404FE0001050B050605000105010402000200FF06FBFBFFFFFCFD04FFFC00FFFEFD03FF02FDFCFA01FC050000FFF8FAFFFBFAFA0503FE0101010103FF01FD04010602FBFF0303FFFDFDFDFDFF0707F9F1090D0C00FFFEFDFCFD02FBF9F2FAFF01FEFBFC00FBFBFBF9F7F3F6FCFBFDFAF9F9F9F8EEF3FBFD000201030300FCFC0000FE060202090605080202FF09070305070604FD01000002FCFB0502FD0403FCFF0302FEF7FBFBFDFC02FFFE00FCF9FCF400F9FE00FF0004040501FD03020405040600FD0102FFFD0502FD030A04FAF208130F060301FE0101FF00FCF5F6F9FF00FB0407FCFDFEF9F6F5F8FBFEFCFFF5F8FCFBEDEDFDFEFE04040407010000FF03FE000703060706020201070502060504010102FC00FD00FCFDFDFEFC0200FDFB010302FDFBFDFFF5FBFD00FCFBF7FBFFF9FAFFFFFE0201FF0301FE0702FD030701FFFE04FE01FFFDFFFC000604F6ED0A130F010201FCFBFFFFFEF5F7FAFDFCFCFE0205FDFEFC00F5EFF5FBFBFDF9F1F7FDFEEEF2FD03010503040404FE0400FE0103060709FF020302020409060402060100FFF9FDFD07FBFCFF00FEFAFCFC0304FEFF02FEFAFDFBFDFDFBFFFFF6FEFDFDFAFEFE000105FE00010103FE05070500FDFA0101FB01FFFFFD000701F5ED0913100404FE00FDFEFEFDF9F6FAFB01FCFCFF06FEFDFC01FAFBF9FAFBFAFEF9F5F5FBEAF2FE02FD02FF01030502FD01FAFE0401FF0000FFFE0403040706FEFC010505FFFCFDFB00FDFFFDFCFAFF02FBFB0100FFFB01FF02FE0301FBFAF9FEFEFCFDFBFEFF010100FEFCFF0000FF000A04020200000100000500050A0D0C08070401010200000203020001030303FFFEFBFF00FE00030200FFFCF9FBFBFBFBFAF7F6FAF7F800FFFF010202FE010404020100020103010103070202FF010001020100FF0101010201030000FFFEFEFCFCFE0001020402FF02FDFEFDFDFBFDFEFDFDFDFE00FEFCFCFCFFFFFE00010008010201FF02FEFCFFFF000108090F0E0806060104020103020403030103040200FFFCFF00FD000501FF00FCF9FBFBFAFAF9F6F6F8F6F9FEFCFE010300FD00010101FDFF0101FFFFFE020500FFFF01000001020100FF03FFFF00000101FEFDFEFDFAFE010101010200FFFDFEFAFDFDFEFF00FEFFFD00FDFFFFFEFE00FD000302070302030000FEFDFEFE0001050C0F0E0B070702040504050203030102030403FDFCFEFE01FE01020100FEFEFBFCFDFCFCF7F5F8F9F5F801FF010305030001010101FFFF010400FF0002040200000301010100FF01FF01030100020301000000FFFEFEFF010102030402FFFEFB0000010101FFFF000200FF000001030301040205040303010100FC000000FF060C0E0D09090401060503020404030302030503FDFCFCFF01FFFE02020101FDFAFDFEFDFBF8F8F7FCF4F9FF00010406030104020202FF000104020000030402FF010101000202010001FF0101040402FF00FEFEFFFD010002010403020200FFFE00FF00000100010102000100FF00020002030008050200FFFF00FFFEFEFFFE060A0C0B07070500050602020402010202020303FDFAFBFEFFFEFF0402FFFFFCF9FBF9FAFBF8F7F6F9F6F8FDFEFE0000FFFCFE000002FDFB0000FEFEFE0001FEFE0000FEFD000001FFFF00FFFF010100FEFCFBFDFCFBFDFE00FF02030101FEFDFCFDFFFEFFFEFFFFFF00FD00FDFBFCFEFCFE00FE050303010100FDFCFFFCFFFF03F605FCFAFDFE00F0F4F7FAF2F8FCECE8FBF5FDFD060D00FD06F5F402FFF1F6F9F9FD06FBFEFCF9FE0C0810130D15161C25211304F9030001FAF9FCFFFAFB00FDF8FAFEF400F7FDF90008F6F7F6F0F9FE0C0600F2F70200FC0905FDFF02FC0A090307F50510090802030A020608FB00050505FEF7F5FDFAFFFE030A010109FDFAF806030403FDF8F1F1F5F9F1F2F9F3EBF8F90101011209FD00FEF8FBF9FAEEF2EEEC0100F9F0F3FD100D060F0F0F141A1F1A0DFAF6F9FF09F1ECF902FAF9FC03F9F7F3F607F8F6FCFA04F8EFF0F6F6030B0205FAFC06FC0308FDF90202FC090B0702FE0C070201F5FE03FCF90809080400FBF7F4FDFD0800FC030A0501080105F209070600FCFCF0FCFAFCF5FAFCFAFBFBFF00030616080202FEF90001F2F5F9F9F60003FAF806FB0A08060C0D171A1E2E1A1703010B0207FFFD0100F9FF0405F0FDFF00FFFC00030000FEFAFEFAF20B0E02010503FF0409110C040202FC051005FDF4050B0704020602FDFAFE02FF04FDFCFFF7FE060705010300FE070A01FEF9060307030106F90008FCEFF600F1F3FCFE020009110A0005FAFE02FDF1EDF2F0FB0806FEFB040802060A0E0A1717242D231609FF060206F4F60102FE01F902FBFAFAFF0A02FEFFFB04FBF7FFF3F905120C09FC040200FE0307FFFFFFFD070701FDF60103030EFEFC0001FF05FEF7020501FCF6FDFB02FF030203FD030802FAFA0D0604040304FF05FFF8F3EEFDFFFB020304020310070102F5F90401F5F1F1F0FBFDFDFCFEFFFE090806030A151B1C1E2316F803FFFC01F9F3EFF5FAF8FBFEF2F8F4F3FCF5FCF70304F9F4F4F3F9000B0402F7F901FE050503F9F701FE040704F7FB02020305FEF6FA07030905FCFE08FCFEF0FDF4040800020DFD060E0002060107030102FF02F8F9FAFE03FFFF04FBFBFBFEFBFD01FDFAFA020204FEFBFFFF00FBFF020302020209020007060701FCFCFD0007070C0D080905FE030D07050203FF05FE02020100FC050100070FFDFAFDFCFDFEFA0203FEFD0606020003FC01FF05FEFC03FEFEFD020403FF0901FFFB03020A05FDFCFEFE04FAFC01FD02050906060700000402FDFCF90000FEFE00FDFBF9FEFCFAFC04FF01050305FCFAFAFF01FA0005090503FF03030104030503FEFFFD050C090D110F0F04FA0A0E0904FCFE0306FFFFFE0200000602040808FEF9F6FBFCFFFA0204FAFC09090301FEFBFD0100F90102FCFFFBFF0606000803FFFB010104FCFBF7FDFFFEFBFDFEFCFF090A040403FF010101F8FAFEFEFE03FFFB00FDFCFEFDFFFD02FEFE00FC00FEF9F9FC00FCFC0606050601FF00FC010201FEFE02010B0A0B0E0B060D03FE070A09040006020401FDFC02FF000703FF0507FAF4F2FCF9FCFC0302FBFF060602FCFCF8F900FFFCFF00F7FEFDFF0404000404FCFB00FE07FEFCF6FCFBF8F8F8FBF8FD0606FD000203020402FAFAFDFF03040200FFFBFF01FEFFFD05020002FEFEFEFAFCFEFE01FD020A0801040503FD03040901FCFE02070A07090C0A0D06FE030A0803FDFF02040100FE00FF010602010203FDF9F6F50101F9FB03FE040802FFFCFCFAFE0403FCFB02FBFC00010802000705FEFB020707FCFCF8FBFFFDF9F7F7FBFD0204FE030001FEFBFFFB01020002FA0003FEFBFCFD00FDFD040102070204FFFB0100FBFB030B0A040201040200030506FEFB02000B090C0D120F0B0803080B0804030406050201FF00FF01030403060AFAF9F9FAFF03FEFEFEFB01070B01FF03FC040601FFFE04000203010303FC050501FEFD020B02FDFCFCFF02FFFFFAF80201050503FFFEFEF8FAFCFCFDFEFFFCFCFCFDFCFE00FDFDFD0105040503FDF9F7F8FDFEFE00FFFE0002FFFDFCFD0000FFFF0001FE0001FF0001020201000203010001FFFF0000FEFFFEFCFE00FF0001FEFDFEFDFDFDFFFFFFFEFE0301FD0001FF00FF00FFFFFFFEFFFF01FEFEFCFFFFFFFF0003FF0200FE0001020102040301030006050300FDFFFAFDFDFF00FEFFFFFDFCFEFFFFFFFFFE000506050704FCFAF9F9FDFF01FF00FF00010101FE00020303010303020304020303040405010304040305020202010200FEFEFEFF01010101010000FE0002FF0100FF0502FE020402030201010302FFFF01030001FFFFFF010302020104000002020303010403000401050202FDFCFDFAFCFCFCFDFEFDFDFDFBFDFDFCFEFEFCFD0004050503FEFBF7F6FCFEFEFDFFFF01020201FDFE020200000200FF0101FF0001020001FD0103020001FFFFFFFEFFFEFDFCFCFD00FFFFFEFEFFFFFDFEFFFEFEFFFE0301FE000102020103000002FDFDFE01FF00010000000201000003FDFE01020300000100FF01FF0200FEFCFBF9F7FAFDFBFDFDFEFDFBF9FBFBFDFDFEFBF90002020302FAF8F7F7FAFEFFFFFEFD00010001FDFCFEFEFFFF01FEFE0102FE00FE01FE00FF0203010001FE00FFFFFDFFFCFCFBFD00FD00FEFEFDFDFCFEFEFDFCFEFD0201FCFF0000000101FF0001FFFFFE00FFFDFDFE00FDFE0000FE01FDFE00000001000201FE00FF01FFFDFDFCFAF6F8FCFBFBFDFCFDFAFBFDFBFBFCFCFAF9FF03040402FAF8F7F8FCFFFE0000FF01020101FEFF020100010301FF04030305030404060306050503050304030304040100FFFF02020202010100FE000100FF00FF0301FC00020303020100FF00FFFFFD02FFFEFCFCFDFF0102020102FEFF02000101010301FF0100000304FEFC0100FFFDFD01FEFEFF00FEFE050202050101FEFFFEFCFEFEFFFFFEFF000000FCFD02FFF9F90000FDFCFAFCFBFDFEFDFEFFFE0100FFFFFEF9F8FF00FE02FC01FFFEFDFDFBFBFDFE01FEFD0203FE00FDFFFE040301FDFE010301FFFFFF010101FF00FF00FF03000001FEFEFBFCFDFCFE0101FEFDF9F9FEFDFCFBFF01010301FEFB010404020501FFFE0104FEFF02020302FE02020301FD01020004FF0104050400FF0202FDFE0504FF01020603FFFD01020405050205080300000404020205030408020202000000FFFBFD010001FF0303020301FFFB000104FE0002FEFEFEFEFCFE0000FE040002020100FF00FEFEFA0000FCF9F9F9FCFDFDFCFDFF010201FDFB000302010000FFFFFF02FEFDFDFF0100FE03FDFEFE000000000100FE020502FC000000FAFA0102FCFCFE0101FEFEFDFD0002FFFF0102FEFFFDFDFE00FFFB0003FEFEFFFDFD00FDFBF7FBFFFDFBFEFE0101FDFDFAF7FBFCFDFCFCFEFCFAF9FBF6FAFAFBFEFDFD000300FDFAFCFEFCF8FDFDF9F5F8F8FCFBFAF9F903FD00FEFDFCFF03FFFEFD01FFFD0000FCFBFDFE02FEFE01FCFEFCFCFFFEFEFEFEFE00FFFEFBFAFBFCFDF9FEFEF9FAFCFDFCFCFEFAFCFEFC00FEFF0101FCFAFAFDFEFE00FCFCFFFDFCFCFCFCFEFCFCFCFEFCFDFBFCFEFCFCFF03FFFB0100FF00FFFCFDFF00FFFE0001010300FFFF0403FEFD0301FE0103FFFD00FF010202020300010301FFFA010502FBFEFF00FF0001FCFDFD0201FFFF03FE0001FCFFFC000500FF0201FFFCFDFEFEFDFF040604FFFD0101000202000301050708070702FF01040805050304030703040402010507080605080504020105080D03050E080A0704070907070707090A070B03060208070503080808090606070B0710110E1017030208FEFB0007FDFDFE0200F9F9FBF6FCF5F2FCFAF9F3FDFD03FCF7F9F5F9FCFE02F9F8F5F5F8F5FF0701F5FAFDF4F9F9F9FEFA0902F301FE070702FE02FBFBFF06FCF6F9FDFFF5F6FDF3F6FFF8F404FAF6FDF700FDF6ECF304F7F803F8F4ECECEDF3EDE6EBECE9F4EAECEEF3F4F9F8FDFAF8FFF8FCF4EEF5EFE9F7FDF8F6FFF902FDFBF70308000200FEFE050703020A020703040BFD0701FB01F70105F8050A0504F9FAF8040AFFFB090D040906FDFEF5030B0E01FB0213190502120F08020B100203030204090C16010C0B060D1B0C17130C1203FF060921141111151D05FB0813FC0C0C11122007150D07F70C07FEFB0902090D020811140D2A30211E33F600FEFCFF00070404FC040600080107F9FF0D090409060F02FBED020A09060B080FFDFBFF0608000207110003070500F7FC020702FF00F5050EFBF2F9FC02F2F0FC0401F8FBF803100E03020E03020E080B150D1807041F121415161B101A08F70909FA010E1C1321FA1B1200F9140FFA060901070A060712120D2D33140F2AFFF9F8F704FDF2F8F6000BFE01FC0103FA0209030201FF0500F4F3FF040604100904FB03FBFBFDF8FB0AFCFBFAF20302FC03FEEEFCFE06060003FBF2F0EFF9F6F2F1E9F8F6F4F5F8FAF7FB000402FFF2FEF90FFD02F9FB13FDFA02FFF801FFF7FAF7F5F3E70103F416FAF5F7F3F1FDFCF0F9FCFE04F805F4F9FFEEFAFC01FD00FB00FBFF000AFAF7FBF6F6F9FA0A0A00070501F60109FBF7FF03F7F9FE02030C030903FEFD0108010004FB03040B0CFD00010606FEF80605FD00080004FE0AFCFE02F1000203F8FAF9FDFAFE020803F6F9FA000008FAF1FDFCFEF905F602EEF3FDF4FDF0F4F5FCEEFAE8F1F1F7FFFFFF050801FA08F1FBF2FBFBF5F6EBFBFB000700FC03FF110AFEFB090404F9F806050003F9FBF80104F9F7FAF5EFFCFC050B171B120C02F3F4F9FEF8EF0E261704F3F6F3F9F7F3F41E140701131103060B04FFFBF8FEFF06F00808FB06FEEBFCFA001B1D1813070DFEF3ECFAF5F7F603F9FFFCFCF4FC00FFFEFCF3FA00FDF2FF05FD03FC05FAFEFDF902FFF1FDFC0715040E03F8FC05070F0D03FE090A08FBFB01F0F50302FDF50407FEFEF8F5EFF7FE001016190F0904F8F3FCF8FA000F15160DF5F9F6FAEFF9070F1010FF0B0DFC0F0205F9F2E8F4FE03F4FB02F900FDE8FCF8F911101508081204F6F4FEEFFCF601FD0402F9F9F7FDFBFBF0EFF4FB01F90905FCFEFF0BF5EDF2FE07FDECF6FB0B030A0A0CFE0706060D090200070100FFFAFAFAF6FC00FBFD09FEF7FBF7F9EFF2F9000812190E0D04FBF4F8FCFEF508201A0AFAF3F8FCFCFDFF0E100C06160D0F0D090501F6EDFBFBFCF20309F9FC04E5FEFBFF1815130A0E1A01F2F5FDF2040007FD0108FA03FFFEFEF9F4FAFD06FAF10304F401FFFBF7F8FAFE0703FB00FE040B0A040AFBFF050A12FFFBFCFEFD09F2FBFCFDF8FD04FDFB0AFEFCF6FCF3F5F0FD05040B160505F8FBF8F4F4FDF706191511F1F6F3FEF9F5F8171307FC05020510010302F2E9F8FD07EB00FAFA0004FB0DFDFF1D1619120B1308F5F8FEFFFFFD0AFDFD03000DFF0402FEFAF6040402FD0702FBFA0B0BF8F3F4F90809F8FE0006FE0409FD01FCFE050604F9F900FF08FDF6FBF6FCFF03F7F8070BFEFBFAFBF3F3FA0208050D0607F9F2F8FAF7F6ECFF171808F6FCFAF7F2F2FA0C0B08FEFD01FD0DFE04FCF6ECF4F7FFF4FFF10009FFEE06FEFC1D19100D070903F3E5FBF5FF0408F8010505050B0103FC00FCF40A07FD0A03FCFE0405FCFCFB02FDFFF5F40106070608FAFCF9030C0AFBF5F4F9F8F7F9FAFBF8000B0E0D080402FEFDFBFBF7F5FF050506FFFF080C0C0E0E05070B0903050100F9F7F2FDFE02FDFE030300010205020200FF0402040403FF04FDFB00FEFCFF0604040505040803010400FC0506FF00FF010100010200010105FC000200FE00FDFFFAFB020102FCFA01FF040803030200F8F9F803100EF9F5F2F8F6F6FAFBFBF4FE0B1410090605FFFFFDFFF5F90403080601030A0B1013100C090B1108030401FAF4F8FF05000206060406050609070805010003050503FF0502FCFF03FE030305030704080B03000100FE090604FF00030003FFFEFD050106FDFE030100FDFCFFFDF9FC01FEFFFDFF04050906030302FAFAFB041010FBF3F2F7F3F3FBF9F8F6000A0E0D10070001F9F8F8F7F9FE040707FE0306090F130E080B0D0A05FE01FEF9F1F4FF00FFFC0101010602060705040201000501020300FEFBFAFDFDFEFE010401040404050500FEFAFB05030300FF04FF01FFFDFD000001FCFEFFFAFB00FCFCFCF7FF03FEFCFB0002020C02000407FAFCFA010F0FFAF2F0F7F3F4F5FCF9F4FB0907090903FF00F6F7FAF3F5FAFF0406FDFF00070B0B0A010C0B06FFFBFCFCF5EAEFF8FCFBFFFDFDFD00FF01010400FDFAFBFCFF00FFFDFAF9F9FCFDFAFAFF01FD0002FF00FEFF01FCFB0105FEF9FFFFFE0000FEFB00FF02FEFF00FCFCFEFEFCFAFBFFFFFEFFFE0203010909000005FBFBF8020F09F9F4F1F5F5F6FAF9F7F3FC0202030601FDF9F7F6F9F5F1FAFE0100FDFE010609090901080807FFFBFAFCF4EEF0F9FCFCFCFDFCFF010102000401FFFAFCFF01FEFFF9FAFAF6FCFAF7FCFFFFFCFF01FE0102FEFEFAFAFF02FBFDFAFAFD00FEFCFD00FD02FAFEFEFF0000FCFCFCF9FF00FCFE0001FE0506030203040501060E0D0502000102FAF8F8FAF8F2F4F2ECEDF4F9F7F7FA03FAF2F3FB03060504030F0D0D0F0E06FE00030605FFFBFE03FFFE010001FCFB02010204060001FF0807050204050705FDFFFFFFFBF800FD030502010501FEF7FAF8FCFFFC00FE00FD000101FCFBFC01FDFF01FF010100010104040203FD0105FEFE01020201FD04020B1616090000FD02F9F3F5F8F8F1F4F5F4F0F5F8FAFA0103FFEFF5FF030B0B070714100E130D0A00020C0D0700FD0202030106000402FE000609090B0303060C0106060605040603FA0105FFFE00FD040800070900FEFAFBFE00FE0204030502010000FD00FC04010103FF000202020500FE010004030004010907000000060312191B0F09060400F6F3F7F7F5F3F6F2EDEEFBFDF7FCFAFBF9F4F5FD090A0805040C0810160F0904020709FDFEF9FE01FE0303FFFFFFFBFF0508060A0402020703070202040805FDFCFF0302FBFC0103070205070400F9F9FA00FC01030106FFFF0300FF000004000000FEFD04010105FE04040100020504FB0903FF0205070B151B1D0F09070102FFF7F3FBF7F1F1F6EDEFF8FDFAFAF901FEF3F3F90207080604080E0F110E0001010302FCFCF8FEFEFBFCFEF902FCF4FAFB0002030301FF01FC010100FD0601FBFFFE01FBF6F9000104030102FCFFF9F9F9FFFEFEFE0001FF000100FEFEFF0002FEFFFDFD01FE02040003FFFCFF040501FC0408FDFD00070A141C1A0E0B0907FFFCF9F7F8F8F8F9F4EEECF8FEFBFBFCFFFBF4F4FB030603060A0D0E0D100E0400FF040400FEFCFD000101020101FEF902010808070604010602060503030201FFFDFF01FCFAFC00000402FF040100F8F9F9FCF8FAFEFCFFFFFE00FDFAFCF9FEFEFFFB010000FF0104FF01FFFCFD0502FBFD010001FDFCFEFE0400060901FBF6F4FA00050805FE02FFFAFD02FD01040302070D180AFBFD01FD05040403FD0005090604020404FD01060C0304070208070A0A050603010205000204FF040505FD0503FF060300FDFCFCFFFCFAFD06FEF80700FAF9F9F802FFFCF9FBFAFCFC04F8F5FD04FDFD00020402010A0805FF03FCFAF7F1F6F9FAFA01080F0C0A0205FEFEFAFE070D0C0402000603FE05FF000A0B08050D170BFEF3FE0301060BFEFAFE010708FF0206FEF9000706FFFB0103FD0301020501030400FD01010103FEFD00FCFEFAFC0201FC01F6F4F6F4F6F80103FE01FEF5F4F5FCFCFFF9F9F9F8FBF9F8FBFEFDFAFDFBFEFFFBFAFD0408030400FAFEFCF7F7FBFC0303060B0804030A060203080C0D0B03020404FCF6FC0006091208080C1708FCF5F9FC00080A03F7FBFE0A06FFFD000300030A0B020104060403FFFF08FF010000FF0008020506050100FDFBFB0002FF01F8F9FFF6F9FD0002FCFEF9F7F5F3F2F7F0F2F8F9FFF7FC00FCF4FD0202FA0203FCFDFD020303FFFAFAFFF4F3F5F8FBFFFF040906040404080002090E0A0600000307FF02000104030C0B0109110700000201061008FFFE01FE06070A0408FF03010301FC020101000300FF050205070904020509080401080300FAF803FDFAFCFEFAFAFC01010201FA01F8FCF7FCFCFCFCFAFCFDFDFCFC01F8FAFCF8FCFD01FE0002FC07010203FAFAFCFAFFF9F5FAFA0300060900030601FC000A07020704050704FFF9000200030405020A0C03FAFAF9FD0A0D09000001020702FFFA0100FCF8FF0305FEFE030004FFFE080601FB04FBFE0309FF02010205FDFFF9FFFAF7FDF6F6FAF60001FFF9F8FEFAF9FAFAF9F4FAFCFFFBF9F9FBFF01F9F9FBFBFCFAFFFE00FE0505060605FBFBF8FD01FAF9FAFC000501FB000100FBFBFFFDFE0202FFFFFDFBFC00030100FE0203FF00FDFDFCFEFDFE00FF000201FEFAFEFF02FF01020206020100FDFFFEFEFDFE04FF00FEFE03010003010302020402010101FF00010404000801FE00FF0004030101010106070000FB0002040404010001000104060807080904FD0003000A0B09080B0A08FCFF0400FCFE0201FFFCFEFF010303000102FCFAFD020302FF0000FDFFFEFDFCFF00FDFE010300FFFEFBFCFFFC0000FFFE0100FF00FCFEFDFBFBFBFFFFFDFCFDFEFFFF00FFFE0000FFFDFEFCFDFFFDFE0202FE03FFFDFFFB00FDFF00FD01FE01030001FE0104020401020603FFFF0104030609020401030700080A0A07070809FE000302FDFC0002FEFE00FFFE01000101FFFEFCFF0100FEFF01010101FFFCFAFBFBFC000401FE0000FAFCFFFF0201FF010201FFFE00FDFBF9F9FBFEFCFAFEFEFDFFFEFFFDFDFF00FEFDFDFDFDFCFCFDFF010100FCFEFDFDFF000000FCFCFF0001FF00FD01060305030603030002010406050801010203040107090808080500FD000204FDFC000200FC030100000101030100FB020100FF02020401FEFFFFFEFDFFFF0102FF00FE01FC0000FF0001FF01FF0200FE01FFFBF8FEFEFDFBFEFF01FD010202FF0000FF00FEFEFBFEFFFD0001050205FE0102FCFCFEFEFDFEFFFF020201FF00FE040105050403010303FE030805060103010003FF060A0708090403FB000100FCFCFFFEFE030001020206040401FFFC010201010102030204FEFDFDFF0001FF010102FF00FDFF01FF0102FFFF000305FEFDFCFDFCFCFFFDFCFDFEFE0100FF02FF00010202010001030202050106040500FF02FF0304010003050607060601030207080C06050407030203060A06080603050509030A0B0A0A09090A"> : tensor<128x640xi8>}> : () -> tensor<128x640xi8> + %50 = "tosa.const"() <{values = dense<"0x0F30000057DCFFFFB79CFEFFDF69FFFF34070000FD4AFFFF13DFFFFF6780010063C8FFFFF20700004D100000E3F2FFFF1447FFFF96020000E30100003239000030920000835000009C240000E7C3FFFF3DDCFDFF4EF4FFFF288F0000F84900001A880000D8670100114FFFFFA77C0000B8E2FFFF59B9FFFFA2CAFFFFD1E2FFFF70CAFFFF0E5DFFFF773D000035DBFFFFF27200006D54000069D3FFFFD181FFFF1D7F0000B80600007FE3FFFF741300001EFCFFFF2AFFFFFFDB7BFFFF682200006D4C0100E2A9FFFFE2A4FFFF3DCDFFFF36AFFFFFC39AFFFF5199FFFFD506FFFF91C2FFFF9AD8FFFF4A73FFFF61E4FFFF170300008F4700002BA5FFFFC20EFFFF8FF2FEFFB537000078EEFFFF4B210000FFB2FFFF5CCEFFFF2AEDFFFFA48200005A6E000017AE000013B200008560000094D5FFFFB1F4FFFF13EAFEFFCE540000F8F5FFFFA226000081BFFFFF9A1D000072930000C0980000C29E0000DB0F0000B30A0000C54C000054F90000C4F8FFFFF01001005D87FEFF629B0000DC17000092DBFFFFDAA1FFFF2125FFFF044A00001F4E0000B2640100FD50000062410000A1490000497600002744FEFF8432000040C400009492FFFF880900007CB3FFFFD612000095D8FFFFEFEEFFFFBCD5FFFF937EFFFF8EF7FFFF306C0000B7700000A5F2FFFF63F8FFFF25650000DBFFFFFF8B15000051B30000A63FFFFFFBDF0000"> : tensor<128xi32>}> : () -> tensor<128xi32> + %51 = tosa.const_shape {values = dense<[-1, 1, 1, 640]> : tensor<4xindex>} : () -> !tosa.shape<4> + %52 = tosa.reshape %arg0, %51 : (tensor, !tosa.shape<4>) -> tensor + %53 = tosa.reshape %49, %48 : (tensor<128x640xi8>, !tosa.shape<4>) -> tensor<128x1x1x640xi8> + %54 = tosa.conv2d %52, %53, %50, %47, %46 {acc_type = i32, dilation = array, pad = array, stride = array} : (tensor, tensor<128x1x1x640xi8>, tensor<128xi32>, tensor<1xi8>, tensor<1xi8>) -> tensor + %55 = tosa.rescale %54, %43, %42, %45, %44 {input_unsigned = false, output_unsigned = false, per_channel = false, rounding_mode = DOUBLE_ROUND, scale32 = true} : (tensor, tensor<1xi32>, tensor<1xi8>, tensor<1xi32>, tensor<1xi8>) -> tensor + %56 = tosa.reshape %55, %41 : (tensor, !tosa.shape<2>) -> tensor + %57 = tosa.clamp %56 {max_val = 127 : i8, min_val = -128 : i8} : (tensor) -> tensor + %58 = tosa.reshape %57, %38 : (tensor, !tosa.shape<4>) -> tensor + %59 = tosa.reshape %40, %37 : (tensor<128x128xi8>, !tosa.shape<4>) -> tensor<128x1x1x128xi8> + %60 = tosa.conv2d %58, %59, %39, %44, %46 {acc_type = i32, dilation = array, pad = array, stride = array} : (tensor, tensor<128x1x1x128xi8>, tensor<128xi32>, tensor<1xi8>, tensor<1xi8>) -> tensor + %61 = tosa.rescale %60, %36, %35, %45, %44 {input_unsigned = false, output_unsigned = false, per_channel = false, rounding_mode = DOUBLE_ROUND, scale32 = true} : (tensor, tensor<1xi32>, tensor<1xi8>, tensor<1xi32>, tensor<1xi8>) -> tensor + %62 = tosa.reshape %61, %41 : (tensor, !tosa.shape<2>) -> tensor + %63 = tosa.clamp %62 {max_val = 127 : i8, min_val = -128 : i8} : (tensor) -> tensor + %64 = tosa.reshape %63, %38 : (tensor, !tosa.shape<4>) -> tensor + %65 = tosa.reshape %34, %37 : (tensor<128x128xi8>, !tosa.shape<4>) -> tensor<128x1x1x128xi8> + %66 = tosa.conv2d %64, %65, %33, %44, %46 {acc_type = i32, dilation = array, pad = array, stride = array} : (tensor, tensor<128x1x1x128xi8>, tensor<128xi32>, tensor<1xi8>, tensor<1xi8>) -> tensor + %67 = tosa.rescale %66, %32, %31, %45, %44 {input_unsigned = false, output_unsigned = false, per_channel = false, rounding_mode = DOUBLE_ROUND, scale32 = true} : (tensor, tensor<1xi32>, tensor<1xi8>, tensor<1xi32>, tensor<1xi8>) -> tensor + %68 = tosa.reshape %67, %41 : (tensor, !tosa.shape<2>) -> tensor + %69 = tosa.clamp %68 {max_val = 127 : i8, min_val = -128 : i8} : (tensor) -> tensor + %70 = tosa.reshape %69, %38 : (tensor, !tosa.shape<4>) -> tensor + %71 = tosa.reshape %30, %37 : (tensor<128x128xi8>, !tosa.shape<4>) -> tensor<128x1x1x128xi8> + %72 = tosa.conv2d %70, %71, %29, %44, %46 {acc_type = i32, dilation = array, pad = array, stride = array} : (tensor, tensor<128x1x1x128xi8>, tensor<128xi32>, tensor<1xi8>, tensor<1xi8>) -> tensor + %73 = tosa.rescale %72, %28, %27, %45, %44 {input_unsigned = false, output_unsigned = false, per_channel = false, rounding_mode = DOUBLE_ROUND, scale32 = true} : (tensor, tensor<1xi32>, tensor<1xi8>, tensor<1xi32>, tensor<1xi8>) -> tensor + %74 = tosa.reshape %73, %41 : (tensor, !tosa.shape<2>) -> tensor + %75 = tosa.clamp %74 {max_val = 127 : i8, min_val = -128 : i8} : (tensor) -> tensor + %76 = tosa.reshape %75, %38 : (tensor, !tosa.shape<4>) -> tensor + %77 = tosa.reshape %26, %24 : (tensor<8x128xi8>, !tosa.shape<4>) -> tensor<8x1x1x128xi8> + %78 = tosa.conv2d %76, %77, %25, %44, %46 {acc_type = i32, dilation = array, pad = array, stride = array} : (tensor, tensor<8x1x1x128xi8>, tensor<8xi32>, tensor<1xi8>, tensor<1xi8>) -> tensor + %79 = tosa.rescale %78, %23, %22, %45, %44 {input_unsigned = false, output_unsigned = false, per_channel = false, rounding_mode = DOUBLE_ROUND, scale32 = true} : (tensor, tensor<1xi32>, tensor<1xi8>, tensor<1xi32>, tensor<1xi8>) -> tensor + %80 = tosa.reshape %79, %21 : (tensor, !tosa.shape<2>) -> tensor + %81 = tosa.clamp %80 {max_val = 127 : i8, min_val = -128 : i8} : (tensor) -> tensor + %82 = tosa.reshape %81, %18 : (tensor, !tosa.shape<4>) -> tensor + %83 = tosa.reshape %20, %17 : (tensor<128x8xi8>, !tosa.shape<4>) -> tensor<128x1x1x8xi8> + %84 = tosa.conv2d %82, %83, %19, %44, %46 {acc_type = i32, dilation = array, pad = array, stride = array} : (tensor, tensor<128x1x1x8xi8>, tensor<128xi32>, tensor<1xi8>, tensor<1xi8>) -> tensor + %85 = tosa.rescale %84, %16, %35, %45, %44 {input_unsigned = false, output_unsigned = false, per_channel = false, rounding_mode = DOUBLE_ROUND, scale32 = true} : (tensor, tensor<1xi32>, tensor<1xi8>, tensor<1xi32>, tensor<1xi8>) -> tensor + %86 = tosa.reshape %85, %41 : (tensor, !tosa.shape<2>) -> tensor + %87 = tosa.clamp %86 {max_val = 127 : i8, min_val = -128 : i8} : (tensor) -> tensor + %88 = tosa.reshape %87, %38 : (tensor, !tosa.shape<4>) -> tensor + %89 = tosa.reshape %15, %37 : (tensor<128x128xi8>, !tosa.shape<4>) -> tensor<128x1x1x128xi8> + %90 = tosa.conv2d %88, %89, %14, %44, %46 {acc_type = i32, dilation = array, pad = array, stride = array} : (tensor, tensor<128x1x1x128xi8>, tensor<128xi32>, tensor<1xi8>, tensor<1xi8>) -> tensor + %91 = tosa.rescale %90, %13, %35, %45, %44 {input_unsigned = false, output_unsigned = false, per_channel = false, rounding_mode = DOUBLE_ROUND, scale32 = true} : (tensor, tensor<1xi32>, tensor<1xi8>, tensor<1xi32>, tensor<1xi8>) -> tensor + %92 = tosa.reshape %91, %41 : (tensor, !tosa.shape<2>) -> tensor + %93 = tosa.clamp %92 {max_val = 127 : i8, min_val = -128 : i8} : (tensor) -> tensor + %94 = tosa.reshape %93, %38 : (tensor, !tosa.shape<4>) -> tensor + %95 = tosa.reshape %12, %37 : (tensor<128x128xi8>, !tosa.shape<4>) -> tensor<128x1x1x128xi8> + %96 = tosa.conv2d %94, %95, %11, %44, %46 {acc_type = i32, dilation = array, pad = array, stride = array} : (tensor, tensor<128x1x1x128xi8>, tensor<128xi32>, tensor<1xi8>, tensor<1xi8>) -> tensor + %97 = tosa.rescale %96, %10, %22, %45, %44 {input_unsigned = false, output_unsigned = false, per_channel = false, rounding_mode = DOUBLE_ROUND, scale32 = true} : (tensor, tensor<1xi32>, tensor<1xi8>, tensor<1xi32>, tensor<1xi8>) -> tensor + %98 = tosa.reshape %97, %41 : (tensor, !tosa.shape<2>) -> tensor + %99 = tosa.clamp %98 {max_val = 127 : i8, min_val = -128 : i8} : (tensor) -> tensor + %100 = tosa.reshape %99, %38 : (tensor, !tosa.shape<4>) -> tensor + %101 = tosa.reshape %9, %37 : (tensor<128x128xi8>, !tosa.shape<4>) -> tensor<128x1x1x128xi8> + %102 = tosa.conv2d %100, %101, %8, %44, %46 {acc_type = i32, dilation = array, pad = array, stride = array} : (tensor, tensor<128x1x1x128xi8>, tensor<128xi32>, tensor<1xi8>, tensor<1xi8>) -> tensor + %103 = tosa.rescale %102, %7, %22, %45, %44 {input_unsigned = false, output_unsigned = false, per_channel = false, rounding_mode = DOUBLE_ROUND, scale32 = true} : (tensor, tensor<1xi32>, tensor<1xi8>, tensor<1xi32>, tensor<1xi8>) -> tensor + %104 = tosa.reshape %103, %41 : (tensor, !tosa.shape<2>) -> tensor + %105 = tosa.clamp %104 {max_val = 127 : i8, min_val = -128 : i8} : (tensor) -> tensor + %106 = tosa.reshape %105, %38 : (tensor, !tosa.shape<4>) -> tensor + %107 = tosa.reshape %6, %4 : (tensor<640x128xi8>, !tosa.shape<4>) -> tensor<640x1x1x128xi8> + %108 = tosa.conv2d %106, %107, %5, %44, %46 {acc_type = i32, dilation = array, pad = array, stride = array} : (tensor, tensor<640x1x1x128xi8>, tensor<640xi32>, tensor<1xi8>, tensor<1xi8>) -> tensor + %109 = tosa.rescale %108, %2, %1, %45, %3 {input_unsigned = false, output_unsigned = false, per_channel = false, rounding_mode = DOUBLE_ROUND, scale32 = true} : (tensor, tensor<1xi32>, tensor<1xi8>, tensor<1xi32>, tensor<1xi8>) -> tensor + %110 = tosa.reshape %109, %0 : (tensor, !tosa.shape<2>) -> tensor + return %110 : tensor + } +} From a619b45cd6ac5540e6f50729f4ef191f0ca1c535 Mon Sep 17 00:00:00 2001 From: Muhammed Efe Cetin Date: Mon, 20 Jul 2026 15:18:22 +0200 Subject: [PATCH 03/12] benchmark_sources/mlperftiny: delete MLIR conversion steps --- .../MLPerfTiny/CMake/add_test.cmake | 61 ++++++------------- .../MLPerfTiny/Int8/toycar/CMakeLists.txt | 4 -- 2 files changed, 18 insertions(+), 47 deletions(-) diff --git a/benchmark_sources/MLPerfTiny/CMake/add_test.cmake b/benchmark_sources/MLPerfTiny/CMake/add_test.cmake index 1a94c5e..7c1c67c 100644 --- a/benchmark_sources/MLPerfTiny/CMake/add_test.cmake +++ b/benchmark_sources/MLPerfTiny/CMake/add_test.cmake @@ -300,56 +300,31 @@ macro(add_Benchmark_IREE_Spike TEST SOURCE_DIR TEST_BUILD_DIR) set(TEST_NAME ${TEST}_IREE_Spike) - # Allow external override of TOSA_CONVERTER_PATH - set(TOSA_CONVERTER_PATH "/home/efectn/iree-prod-test/demo-simple-mlir/tensorflow_model/myenv/bin" CACHE PATH "Path to the directory containing tosa-converter-for-tflite") - set(PREGENERATED_MLIR "${SOURCE_DIR}/${TEST}_data/${TEST}_model.mlir") set(TEST_MLIR_SOURCE ${CMAKE_CURRENT_BINARY_DIR}/${TEST}_model.mlir) set(TEST_VMFB ${CMAKE_CURRENT_BINARY_DIR}/${TEST}_model.vmfb) set(TEST_C_HEADER ${CMAKE_CURRENT_BINARY_DIR}/${TEST}_model.c) - if(EXISTS "${PREGENERATED_MLIR}") - message(STATUS "Found pre-generated MLIR model at ${PREGENERATED_MLIR}, skipping TFLite extraction and TOSA conversion.") - - # Copy the pregenerated MLIR to the build directory so the pipeline can continue smoothly - add_custom_command( - OUTPUT ${TEST_MLIR_SOURCE} - COMMAND ${CMAKE_COMMAND} -E copy ${PREGENERATED_MLIR} ${TEST_MLIR_SOURCE} - DEPENDS ${PREGENERATED_MLIR} - COMMENT "Copying pre-generated MLIR model to build directory" - VERBATIM - ) - else() - message(STATUS "Pre-generated MLIR model not found at ${PREGENERATED_MLIR}. Setting up TFLite to MLIR conversion pipeline.") - # Locate TFLite to MLIR converter (tosa-converter-for-tflite) - find_program(TOSA_CONVERTER tosa-converter-for-tflite - HINTS ${TOSA_CONVERTER_PATH} - REQUIRED) - find_package(Python3 REQUIRED) - - set(TEST_TFLITE_SOURCE ${CMAKE_CURRENT_BINARY_DIR}/${TEST}_model.tflite) - - # 1. Extract TFLite from model_data.cc - add_custom_command( - OUTPUT ${TEST_TFLITE_SOURCE} - COMMAND Python3::Interpreter ${CMAKE_CURRENT_SOURCE_DIR}/CMake/extract_tflite.py - ${SOURCE_DIR}/${TEST}_data/${TEST}_model_data.cc - ${TEST_TFLITE_SOURCE} - DEPENDS ${SOURCE_DIR}/${TEST}_data/${TEST}_model_data.cc ${CMAKE_CURRENT_SOURCE_DIR}/CMake/extract_tflite.py - COMMENT "Extracting ${TEST}_model.tflite from model_data.cc" - VERBATIM - ) - - # 2. Convert TFLite to MLIR - add_custom_command( - OUTPUT ${TEST_MLIR_SOURCE} - COMMAND ${TOSA_CONVERTER} ${TEST_TFLITE_SOURCE} --text -o ${TEST_MLIR_SOURCE} - DEPENDS ${TEST_TFLITE_SOURCE} - COMMENT "Converting ${TEST}_model.tflite -> ${TEST}_model.mlir via TOSA" - VERBATIM - ) + if(NOT EXISTS "${PREGENERATED_MLIR}") + message(FATAL_ERROR "MLIR model not found at ${PREGENERATED_MLIR}!\n" + "Please extract the .tflite from model_data.cc and convert it to MLIR via TOSA converter.\n" + "Example workflow:\n" + " 1. python3 CMake/extract_tflite.py ${SOURCE_DIR}/${TEST}_data/${TEST}_model_data.cc ${TEST}_model.tflite\n" + " 2. tosa-converter-for-tflite ${TEST}_model.tflite --text -o ${TEST}_model.mlir\n" + " 3. mv ${TEST}_model.mlir ${SOURCE_DIR}/${TEST}_data/") endif() + message(STATUS "Found MLIR model at ${PREGENERATED_MLIR}, copying to build directory.") + + # Copy the MLIR to the build directory so the pipeline can continue smoothly + add_custom_command( + OUTPUT ${TEST_MLIR_SOURCE} + COMMAND ${CMAKE_COMMAND} -E copy ${PREGENERATED_MLIR} ${TEST_MLIR_SOURCE} + DEPENDS ${PREGENERATED_MLIR} + COMMENT "Copying MLIR model to build directory" + VERBATIM + ) + # Locate IREE compiler find_program(IREE_COMPILE_TOOL iree-compile HINTS ${IREE_COMPILER_BIN_DIR} REQUIRED) find_program(XXD_TOOL xxd REQUIRED) diff --git a/benchmark_sources/MLPerfTiny/Int8/toycar/CMakeLists.txt b/benchmark_sources/MLPerfTiny/Int8/toycar/CMakeLists.txt index db19cd8..c54fcff 100644 --- a/benchmark_sources/MLPerfTiny/Int8/toycar/CMakeLists.txt +++ b/benchmark_sources/MLPerfTiny/Int8/toycar/CMakeLists.txt @@ -21,9 +21,5 @@ add_Benchmark(toycar_int8 ${CMAKE_CURRENT_SOURCE_DIR} ${BUILD_DIR}/benchmark_sources/Int8/toycar) add_Benchmark_Spike(toycar_int8 ${CMAKE_CURRENT_SOURCE_DIR} ${BUILD_DIR}/benchmark_sources/Int8/toycar) -# IREE framework tests (deferred - requires IREE-specific benchmark implementation). -# TODO: Add IREE benchmark test targets when framework-specific benchmark code is ready. - - From f99eb7cf5a128766244f596f02dd5cc9a81eac4b Mon Sep 17 00:00:00 2001 From: Muhammed Efe Cetin Date: Mon, 20 Jul 2026 15:47:29 +0200 Subject: [PATCH 04/12] benchmark_sources/generic_iree: make benchmark format compatible with benchmark.hpp, remove simulator-dependent code, add returning code to spike sim --- .../framework/spike/simulator.hpp | 24 +- .../generic_iree/CMake/add_test.cmake | 5 +- .../generic_iree/baremetal/baremetal_stubs.c | 8 - .../baremetal/benchmark_template.hpp | 211 +++++++++++++++ .../generic_iree/baremetal/main_template.c | 256 ------------------ .../tests/add_vector/benchmark.hpp | 3 + .../generic_iree/tests/add_vector/main.c | 2 - .../tests/add_vector/test_config.h | 11 +- 8 files changed, 233 insertions(+), 287 deletions(-) create mode 100644 benchmark_sources/generic_iree/baremetal/benchmark_template.hpp delete mode 100644 benchmark_sources/generic_iree/baremetal/main_template.c create mode 100644 benchmark_sources/generic_iree/tests/add_vector/benchmark.hpp delete mode 100644 benchmark_sources/generic_iree/tests/add_vector/main.c diff --git a/benchmark_sources/framework/spike/simulator.hpp b/benchmark_sources/framework/spike/simulator.hpp index 39e4aec..d0e3fda 100644 --- a/benchmark_sources/framework/spike/simulator.hpp +++ b/benchmark_sources/framework/spike/simulator.hpp @@ -31,22 +31,14 @@ class Simulator //Termination success or failure function for this simulator int terminate(int return_code) { - if (return_code == 0) - { - __asm__ volatile("li t0, 0x00000001"); //LSB exits spike, all other bits signal failure - __asm__ volatile("la t1, tohost"); - __asm__ volatile("auipc t2, 0x0"); - __asm__ volatile("sw t0, 0(t1)"); - __asm__ volatile("jalr x0, 4(t2)"); - - } else { - __asm__ volatile("li t0, 0xFFFFFFFF"); //LSB exits spike, all other bits signal failure - __asm__ volatile("la t1, tohost"); - __asm__ volatile("auipc t2, 0x0"); - __asm__ volatile("sw t0, 0(t1)"); - __asm__ volatile("jalr x0, 4(t2)"); - } - }; + uint32_t tohost_val = (return_code << 1) | 1; + __asm__ volatile("mv t0, %0" : : "r"(tohost_val)); + __asm__ volatile("la t1, tohost"); + __asm__ volatile("auipc t2, 0x0"); + __asm__ volatile("sw t0, 0(t1)"); + __asm__ volatile("jalr x0, 4(t2)"); + return return_code; + } //Cleanup any allocatations ~Simulator(){}; diff --git a/benchmark_sources/generic_iree/CMake/add_test.cmake b/benchmark_sources/generic_iree/CMake/add_test.cmake index ef5e481..10436f9 100644 --- a/benchmark_sources/generic_iree/CMake/add_test.cmake +++ b/benchmark_sources/generic_iree/CMake/add_test.cmake @@ -7,7 +7,7 @@ macro(add_IreeBenchmark_Spike TEST_NAME TEST_DIR) set(TEST_MLIR_SOURCE ${TEST_DIR}/${TEST_NAME}.mlir) set(TEST_VMFB ${CMAKE_CURRENT_BINARY_DIR}/${TEST_NAME}.vmfb) set(TEST_C_HEADER ${CMAKE_CURRENT_BINARY_DIR}/${TEST_NAME}.h) - set(TEST_MAIN_SOURCE ${TEST_DIR}/main.c) + set(TEST_MAIN_SOURCE ${CMAKE_CURRENT_SOURCE_DIR}/../framework/main.cpp) # Find necessary tools find_program(IREE_COMPILE_TOOL iree-compile HINTS ${IREE_COMPILER_BIN_DIR} REQUIRED) @@ -75,6 +75,8 @@ macro(add_IreeBenchmark_Spike TEST_NAME TEST_DIR) ${CMAKE_CURRENT_SOURCE_DIR}/iree/iree-source/runtime/src ${CMAKE_CURRENT_SOURCE_DIR}/iree/iree-build-rv32-runtime/runtime/src ${CMAKE_CURRENT_SOURCE_DIR}/iree/iree-source/third_party/flatcc/include + ${CMAKE_CURRENT_SOURCE_DIR}/../framework + ${CMAKE_CURRENT_SOURCE_DIR}/../framework/spike ) target_compile_definitions(${TEST_TARGET} PRIVATE @@ -87,6 +89,7 @@ macro(add_IreeBenchmark_Spike TEST_NAME TEST_DIR) ) target_compile_options(${TEST_TARGET} PRIVATE -fno-builtin) + target_compile_features(${TEST_TARGET} PRIVATE cxx_std_14) target_sources(${TEST_TARGET} PUBLIC ${TEST_MAIN_SOURCE} diff --git a/benchmark_sources/generic_iree/baremetal/baremetal_stubs.c b/benchmark_sources/generic_iree/baremetal/baremetal_stubs.c index 8cda87a..4ba6235 100644 --- a/benchmark_sources/generic_iree/baremetal/baremetal_stubs.c +++ b/benchmark_sources/generic_iree/baremetal/baremetal_stubs.c @@ -39,12 +39,7 @@ void* sbrk(ptrdiff_t incr) { return _sbrk(incr); } -// HTIF (Host-Target Interface) tohost register for Spike simulator -extern volatile uint64_t tohost; - void _exit(int status) { - uint64_t exit_code = ((uint64_t)status << 1) | 1; - tohost = exit_code; while (1) { __asm__ volatile ("wfi"); } } @@ -53,9 +48,6 @@ void _exit_r(struct _reent* r, int status) { } int _write(int file, const char* ptr, int len) { - for (int i = 0; i < len; i++) { - tohost = (0x01ULL << 56) | (uint64_t)(unsigned char)ptr[i]; - } return len; } diff --git a/benchmark_sources/generic_iree/baremetal/benchmark_template.hpp b/benchmark_sources/generic_iree/baremetal/benchmark_template.hpp new file mode 100644 index 0000000..f78323e --- /dev/null +++ b/benchmark_sources/generic_iree/baremetal/benchmark_template.hpp @@ -0,0 +1,211 @@ +#ifndef BENCHMARK_TEMPLATE_HPP +#define BENCHMARK_TEMPLATE_HPP + +#include "simulator.hpp" +// Note: test_config.h must be included before this file in the test's benchmark.hpp + +#include "iree/base/api.h" +#include "iree/hal/api.h" +#include "iree/modules/hal/module.h" +#include "iree/runtime/api.h" +#include "iree/vm/api.h" +#include "iree/vm/bytecode/module.h" + +#include +#include +#include + +// Static Bump Allocator (No libc heap / no sbrk) +static uint8_t g_static_pool[STATIC_POOL_SIZE] __attribute__((section(".noinit"), aligned(64))); +static size_t g_pool_offset = 0; + +static iree_status_t iree_static_bump_allocator_ctl( + void* self, iree_allocator_command_t command, const void* params, + void** inout_ptr) { + switch (command) { + case IREE_ALLOCATOR_COMMAND_MALLOC: + case IREE_ALLOCATOR_COMMAND_REALLOC: { + const iree_allocator_alloc_params_t* alloc_params = + (const iree_allocator_alloc_params_t*)params; + size_t size = (alloc_params->byte_length + 15) & ~((size_t)15); + if (command == IREE_ALLOCATOR_COMMAND_REALLOC && *inout_ptr != NULL) { + if (g_pool_offset + size > STATIC_POOL_SIZE) { + return iree_make_status(IREE_STATUS_RESOURCE_EXHAUSTED, + "Static pool exhausted on realloc"); + } + void* new_ptr = &g_static_pool[g_pool_offset]; + g_pool_offset += size; + memcpy(new_ptr, *inout_ptr, size); + *inout_ptr = new_ptr; + return iree_ok_status(); + } + if (g_pool_offset + size > STATIC_POOL_SIZE) { + return iree_make_status( + IREE_STATUS_RESOURCE_EXHAUSTED, + "Static pool exhausted on malloc (requested %zu, available %zu)", + size, STATIC_POOL_SIZE - g_pool_offset); + } + *inout_ptr = &g_static_pool[g_pool_offset]; + g_pool_offset += size; + return iree_ok_status(); + } + case IREE_ALLOCATOR_COMMAND_CALLOC: { + const iree_allocator_alloc_params_t* alloc_params = + (const iree_allocator_alloc_params_t*)params; + size_t size = (alloc_params->byte_length + 15) & ~((size_t)15); + if (g_pool_offset + size > STATIC_POOL_SIZE) { + return iree_make_status(IREE_STATUS_RESOURCE_EXHAUSTED, + "Static pool exhausted on calloc"); + } + void* ptr = &g_static_pool[g_pool_offset]; + memset(ptr, 0, size); + *inout_ptr = ptr; + g_pool_offset += size; + return iree_ok_status(); + } + case IREE_ALLOCATOR_COMMAND_FREE: { + return iree_ok_status(); + } + default: + return iree_make_status(IREE_STATUS_UNIMPLEMENTED); + } +} + +static iree_allocator_t get_static_allocator(void) { + return (iree_allocator_t){ + .self = NULL, + .ctl = iree_static_bump_allocator_ctl, + }; +} + +// Override standard C library memory allocation functions +extern "C" { + void* malloc(size_t size) { + void* ptr = NULL; + iree_allocator_alloc_params_t params = {.byte_length = size}; + iree_static_bump_allocator_ctl(NULL, IREE_ALLOCATOR_COMMAND_MALLOC, ¶ms, &ptr); + return ptr; + } + void* calloc(size_t num, size_t size) { + void* ptr = NULL; + iree_allocator_alloc_params_t params = {.byte_length = num * size}; + iree_static_bump_allocator_ctl(NULL, IREE_ALLOCATOR_COMMAND_CALLOC, ¶ms, &ptr); + return ptr; + } + void* realloc(void* ptr, size_t new_size) { + void* new_ptr = ptr; + iree_allocator_alloc_params_t params = {.byte_length = new_size}; + iree_static_bump_allocator_ctl(NULL, IREE_ALLOCATOR_COMMAND_REALLOC, ¶ms, &new_ptr); + return new_ptr; + } + void free(void* ptr) { (void)ptr; } +} + +class Benchmark +{ + private: + iree_runtime_instance_t* instance = nullptr; + iree_runtime_session_t* session = nullptr; + iree_runtime_call_t call; + iree_allocator_t allocator; + + public: + Benchmark() { + allocator = get_static_allocator(); + + iree_runtime_instance_options_t instance_options; + iree_runtime_instance_options_initialize(&instance_options); + iree_runtime_instance_options_use_all_available_drivers(&instance_options); + + iree_status_t status = iree_runtime_instance_create(&instance_options, allocator, &instance); + if (!iree_status_is_ok(status)) return; + + iree_hal_device_t* device = nullptr; + status = iree_runtime_instance_try_create_default_device( + instance, iree_make_cstring_view("local-sync"), &device); + if (!iree_status_is_ok(status)) return; + + iree_runtime_session_options_t session_options; + iree_runtime_session_options_initialize(&session_options); + status = iree_runtime_session_create_with_device( + instance, &session_options, device, allocator, &session); + iree_hal_device_release(device); + if (!iree_status_is_ok(status)) return; + + iree_vm_module_t* module = nullptr; + status = iree_vm_bytecode_module_create( + iree_runtime_instance_vm_instance(instance), IREE_VM_BYTECODE_MODULE_FLAG_NONE, + iree_make_const_byte_span(TEST_VMFB_DATA, TEST_VMFB_DATA_LEN), + iree_allocator_null(), allocator, &module); + if (!iree_status_is_ok(status)) return; + + status = iree_runtime_session_append_module(session, module); + iree_vm_module_release(module); + if (!iree_status_is_ok(status)) return; + + status = iree_runtime_call_initialize_by_name( + session, iree_make_cstring_view(TEST_FUNCTION_NAME), &call); + } + + inline int run_benchmark() { + if (!instance || !session) return 1; + + iree_hal_allocator_t* device_allocator = iree_runtime_session_device_allocator(session); + + // Test-specific setup + if (!TEST_INPUT_SETUP(allocator, device_allocator, session, &call)) { + return 7; + } + + // Run the test + iree_status_t status = iree_runtime_call_invoke(&call, /*flags=*/0); + if (!iree_status_is_ok(status)) { + return 9; + } + return 0; + } + + int validate_benchmark() { + if (!instance || !session) return 1; + + iree_hal_buffer_view_t* ret0 = nullptr; + iree_status_t status = iree_runtime_call_outputs_pop_front_buffer_view(&call, &ret0); + if (!iree_status_is_ok(status) || !ret0) { + return 10; + } + + iree_hal_buffer_t* buffer = iree_hal_buffer_view_buffer(ret0); + iree_hal_buffer_mapping_t mapping; + int result = 0; + + if (iree_status_is_ok(iree_hal_buffer_map_range( + buffer, IREE_HAL_MAPPING_MODE_SCOPED, IREE_HAL_MEMORY_ACCESS_READ, + 0, TEST_OUTPUT_SIZE, &mapping))) { + + const int8_t* out_ptr = (const int8_t*)mapping.contents.data; + + // Test-specific validation + if (!TEST_OUTPUT_VALIDATE(out_ptr, TEST_OUTPUT_SIZE)) { + result = 11; // Validation failed + } else { + result = 0; // Success + } + + iree_hal_buffer_unmap_range(&mapping); + } else { + result = 98; // Map failed + } + + iree_hal_buffer_view_release(ret0); + return result; + } + + ~Benchmark() { + TEST_CLEANUP(); + iree_runtime_call_deinitialize(&call); + if (session) iree_runtime_session_release(session); + if (instance) iree_runtime_instance_release(instance); + } +}; + +#endif // BENCHMARK_TEMPLATE_HPP diff --git a/benchmark_sources/generic_iree/baremetal/main_template.c b/benchmark_sources/generic_iree/baremetal/main_template.c deleted file mode 100644 index 8622a5a..0000000 --- a/benchmark_sources/generic_iree/baremetal/main_template.c +++ /dev/null @@ -1,256 +0,0 @@ -/* - * Generic IREE Bare-Metal Test Template - * - * This template is used to generate test_main.c files from test-specific config. - * Each test provides: - * - TEST_NAME: string identifier - * - TEST_VMFB_HEADER: C header from compiled VMFB - * - TEST_FUNCTION_NAME: IREE function to call - * - TEST_NUM_ITERATIONS: number of test iterations - * - TEST_INPUT_SETUP(allocator, device_allocator, session): setup test inputs - * - TEST_OUTPUT_VALIDATE(out_ptr, output_len): validate output - * - TEST_CLEANUP: cleanup test-specific data - */ - -#include -#include -#include -#include - -#include "iree/base/api.h" -#include "iree/hal/api.h" -#include "iree/modules/hal/module.h" -#include "iree/runtime/api.h" -#include "iree/vm/api.h" -#include "iree/vm/bytecode/module.h" - - -// Simple IREE allocator implementation -#define STATIC_POOL_SIZE (1024 * 1024) // 1 MB static arena -static uint8_t g_static_pool[STATIC_POOL_SIZE] __attribute__((section(".noinit"), aligned(64))); -static size_t g_pool_offset = 0; - -static iree_status_t iree_static_bump_allocator_ctl( - void* self, iree_allocator_command_t command, const void* params, - void** inout_ptr) { - switch (command) { - case IREE_ALLOCATOR_COMMAND_MALLOC: - case IREE_ALLOCATOR_COMMAND_REALLOC: { - const iree_allocator_alloc_params_t* alloc_params = - (const iree_allocator_alloc_params_t*)params; - size_t size = (alloc_params->byte_length + 15) & ~((size_t)15); - if (command == IREE_ALLOCATOR_COMMAND_REALLOC && *inout_ptr != NULL) { - if (g_pool_offset + size > STATIC_POOL_SIZE) { - return iree_make_status(IREE_STATUS_RESOURCE_EXHAUSTED, - "Static pool exhausted on realloc"); - } - void* new_ptr = &g_static_pool[g_pool_offset]; - g_pool_offset += size; - memcpy(new_ptr, *inout_ptr, size); - *inout_ptr = new_ptr; - return iree_ok_status(); - } - if (g_pool_offset + size > STATIC_POOL_SIZE) { - return iree_make_status( - IREE_STATUS_RESOURCE_EXHAUSTED, - "Static pool exhausted on malloc (requested %zu, available %zu)", - size, STATIC_POOL_SIZE - g_pool_offset); - } - *inout_ptr = &g_static_pool[g_pool_offset]; - g_pool_offset += size; - return iree_ok_status(); - } - case IREE_ALLOCATOR_COMMAND_CALLOC: { - const iree_allocator_alloc_params_t* alloc_params = - (const iree_allocator_alloc_params_t*)params; - size_t size = (alloc_params->byte_length + 15) & ~((size_t)15); - if (g_pool_offset + size > STATIC_POOL_SIZE) { - return iree_make_status(IREE_STATUS_RESOURCE_EXHAUSTED, - "Static pool exhausted on calloc"); - } - void* ptr = &g_static_pool[g_pool_offset]; - memset(ptr, 0, size); - *inout_ptr = ptr; - g_pool_offset += size; - return iree_ok_status(); - } - case IREE_ALLOCATOR_COMMAND_FREE: { - return iree_ok_status(); - } - default: - return iree_make_status(IREE_STATUS_UNIMPLEMENTED); - } -} - -static iree_allocator_t get_static_allocator(void) { - return (iree_allocator_t){ - .self = NULL, - .ctl = iree_static_bump_allocator_ctl, - }; -} - -// Override standard C library memory allocation functions -void* malloc(size_t size) { - void* ptr = NULL; - iree_allocator_alloc_params_t params = {.byte_length = size}; - iree_static_bump_allocator_ctl(NULL, IREE_ALLOCATOR_COMMAND_MALLOC, ¶ms, - &ptr); - return ptr; -} -void* calloc(size_t num, size_t size) { - void* ptr = NULL; - iree_allocator_alloc_params_t params = {.byte_length = num * size}; - iree_static_bump_allocator_ctl(NULL, IREE_ALLOCATOR_COMMAND_CALLOC, ¶ms, - &ptr); - return ptr; -} -void* realloc(void* ptr, size_t new_size) { - void* new_ptr = ptr; - iree_allocator_alloc_params_t params = {.byte_length = new_size}; - iree_static_bump_allocator_ctl(NULL, IREE_ALLOCATOR_COMMAND_REALLOC, ¶ms, - &new_ptr); - return new_ptr; -} -void free(void* ptr) { (void)ptr; } - -// Global output variables -volatile int g_execution_success = 0; - -// Main entry point -// Return codes: -// 0: Success -// 1-10: IREE initialization or runtime execution error -// 11: Output verification mismatch -int main(void) { - iree_allocator_t allocator = get_static_allocator(); - - iree_runtime_instance_options_t instance_options; - iree_runtime_instance_options_initialize(&instance_options); - iree_runtime_instance_options_use_all_available_drivers(&instance_options); - - iree_runtime_instance_t* instance = NULL; - if (!iree_status_is_ok( - iree_runtime_instance_create(&instance_options, allocator, &instance))) { - _exit(1); - } - - iree_hal_device_t* device = NULL; - if (!iree_status_is_ok(iree_runtime_instance_try_create_default_device( - instance, iree_make_cstring_view("local-sync"), &device))) { - iree_runtime_instance_release(instance); - _exit(2); - } - - iree_runtime_session_options_t session_options; - iree_runtime_session_options_initialize(&session_options); - iree_runtime_session_t* session = NULL; - if (!iree_status_is_ok(iree_runtime_session_create_with_device( - instance, &session_options, device, allocator, &session))) { - iree_hal_device_release(device); - iree_runtime_instance_release(instance); - _exit(3); - } - iree_hal_device_release(device); - - // Load VMFB module (provided by test_config.h) - iree_vm_module_t* module = NULL; - if (!iree_status_is_ok(iree_vm_bytecode_module_create( - iree_runtime_instance_vm_instance(instance), IREE_VM_BYTECODE_MODULE_FLAG_NONE, - iree_make_const_byte_span(TEST_VMFB_DATA, TEST_VMFB_DATA_LEN), - iree_allocator_null(), allocator, &module))) { - iree_runtime_session_release(session); - iree_runtime_instance_release(instance); - _exit(4); - } - - if (!iree_status_is_ok(iree_runtime_session_append_module(session, module))) { - iree_vm_module_release(module); - iree_runtime_session_release(session); - iree_runtime_instance_release(instance); - _exit(5); - } - iree_vm_module_release(module); - - // Initialize call (test-specific function name from test_config.h) - iree_runtime_call_t call; - if (!iree_status_is_ok(iree_runtime_call_initialize_by_name( - session, iree_make_cstring_view(TEST_FUNCTION_NAME), &call))) { - iree_runtime_session_release(session); - iree_runtime_instance_release(instance); - _exit(6); - } - - iree_hal_allocator_t* device_allocator = - iree_runtime_session_device_allocator(session); - - // Checkpoint static bump pool offset for each iteration - size_t checkpoint_offset = g_pool_offset; - int all_passed = 1; - - // Test-specific setup (from test_config.h) - if (!TEST_INPUT_SETUP(allocator, device_allocator, session, &call)) { - iree_runtime_call_deinitialize(&call); - iree_runtime_session_release(session); - iree_runtime_instance_release(instance); - _exit(7); - } - - // Invoke IREE function - if (!iree_status_is_ok(iree_runtime_call_invoke(&call, /*flags=*/0))) { - iree_runtime_call_deinitialize(&call); - iree_runtime_session_release(session); - iree_runtime_instance_release(instance); - _exit(9); - } - - // Extract output - iree_hal_buffer_view_t* ret0 = NULL; - if (!iree_status_is_ok( - iree_runtime_call_outputs_pop_front_buffer_view(&call, &ret0)) || - !ret0) { - iree_runtime_call_deinitialize(&call); - iree_runtime_session_release(session); - iree_runtime_instance_release(instance); - _exit(10); - } - - iree_hal_buffer_t* buffer = iree_hal_buffer_view_buffer(ret0); - iree_hal_buffer_mapping_t mapping; - if (iree_status_is_ok(iree_hal_buffer_map_range( - buffer, IREE_HAL_MAPPING_MODE_SCOPED, IREE_HAL_MEMORY_ACCESS_READ, - 0, TEST_OUTPUT_SIZE, &mapping))) { - const int8_t* out_ptr = (const int8_t*)mapping.contents.data; - - // Test-specific validation (from test_config.h) - if (!TEST_OUTPUT_VALIDATE(out_ptr, TEST_OUTPUT_SIZE)) { - all_passed = 0; - } - - iree_hal_buffer_unmap_range(&mapping); - - // Return exit code based on validation - if (all_passed) { - _exit(0); // Success - } else { - _exit(11); // Validation failed - } - } else { - iree_hal_buffer_view_release(ret0); - iree_runtime_call_deinitialize(&call); - iree_runtime_session_release(session); - iree_runtime_instance_release(instance); - return 98; // Buffer map failed - } - iree_hal_buffer_view_release(ret0); - - // Test-specific cleanup - TEST_CLEANUP(); - - iree_runtime_call_deinitialize(&call); - iree_runtime_session_release(session); - iree_runtime_instance_release(instance); - - g_execution_success = all_passed; - exit(g_execution_success ? 0 : 11); // Signal exit to Spike via tohost HTIF - return 0; // Unreachable -} diff --git a/benchmark_sources/generic_iree/tests/add_vector/benchmark.hpp b/benchmark_sources/generic_iree/tests/add_vector/benchmark.hpp new file mode 100644 index 0000000..ed23cd4 --- /dev/null +++ b/benchmark_sources/generic_iree/tests/add_vector/benchmark.hpp @@ -0,0 +1,3 @@ +#pragma once +#include "test_config.h" +#include "../../baremetal/benchmark_template.hpp" diff --git a/benchmark_sources/generic_iree/tests/add_vector/main.c b/benchmark_sources/generic_iree/tests/add_vector/main.c deleted file mode 100644 index 0cbca02..0000000 --- a/benchmark_sources/generic_iree/tests/add_vector/main.c +++ /dev/null @@ -1,2 +0,0 @@ -#include "test_config.h" -#include "../../baremetal/main_template.c" diff --git a/benchmark_sources/generic_iree/tests/add_vector/test_config.h b/benchmark_sources/generic_iree/tests/add_vector/test_config.h index 274eddc..a8d6930 100644 --- a/benchmark_sources/generic_iree/tests/add_vector/test_config.h +++ b/benchmark_sources/generic_iree/tests/add_vector/test_config.h @@ -18,6 +18,9 @@ // Output configuration #define TEST_OUTPUT_SIZE 4 +// Memory pool size for IREE runtime +#define STATIC_POOL_SIZE (1024 * 1024) // 1 MB static arena + // Test input data static const int8_t g_test_input_0[4] = {5, 3, 9, 7}; static const int8_t g_test_input_1[4] = {1, 2, 3, 4}; @@ -35,8 +38,8 @@ static const int8_t g_test_expected[4] = {6, 5, 12, 11}; 1, shape, IREE_HAL_ELEMENT_TYPE_SINT_8, \ IREE_HAL_ENCODING_TYPE_DENSE_ROW_MAJOR, \ (iree_hal_buffer_params_t){ \ - .type = IREE_HAL_MEMORY_TYPE_DEVICE_LOCAL, \ - .usage = IREE_HAL_BUFFER_USAGE_DEFAULT}, \ + .usage = IREE_HAL_BUFFER_USAGE_DEFAULT, \ + .type = IREE_HAL_MEMORY_TYPE_DEVICE_LOCAL}, \ iree_make_const_byte_span(g_test_input_0, 4), &arg0))) {\ _setup_ok = 0; \ } else { \ @@ -52,8 +55,8 @@ static const int8_t g_test_expected[4] = {6, 5, 12, 11}; IREE_HAL_ELEMENT_TYPE_SINT_8, \ IREE_HAL_ENCODING_TYPE_DENSE_ROW_MAJOR, \ (iree_hal_buffer_params_t){ \ - .type = IREE_HAL_MEMORY_TYPE_DEVICE_LOCAL, \ - .usage = IREE_HAL_BUFFER_USAGE_DEFAULT}, \ + .usage = IREE_HAL_BUFFER_USAGE_DEFAULT, \ + .type = IREE_HAL_MEMORY_TYPE_DEVICE_LOCAL}, \ iree_make_const_byte_span(g_test_input_1, 4), \ &arg1))) { \ _setup_ok = 0; \ From b256f18befc5fce8061f5221e75eeaeebac16872 Mon Sep 17 00:00:00 2001 From: Muhammed Efe Cetin Date: Mon, 20 Jul 2026 16:06:57 +0200 Subject: [PATCH 05/12] benchmark_sources/mlperftiny: split benchmar.hpp for iree and tflm --- .../MLPerfTiny/CMake/add_test.cmake | 8 +- .../Int8/toycar/{ => iree}/benchmark.hpp | 132 ++---------------- .../toycar_int8_model.mlir | 0 .../Int8/toycar/tflite/benchmark.hpp | 102 ++++++++++++++ 4 files changed, 117 insertions(+), 125 deletions(-) rename benchmark_sources/MLPerfTiny/Int8/toycar/{ => iree}/benchmark.hpp (57%) rename benchmark_sources/MLPerfTiny/Int8/toycar/{toycar_int8_data => iree}/toycar_int8_model.mlir (100%) create mode 100644 benchmark_sources/MLPerfTiny/Int8/toycar/tflite/benchmark.hpp diff --git a/benchmark_sources/MLPerfTiny/CMake/add_test.cmake b/benchmark_sources/MLPerfTiny/CMake/add_test.cmake index 7c1c67c..f8d4a30 100644 --- a/benchmark_sources/MLPerfTiny/CMake/add_test.cmake +++ b/benchmark_sources/MLPerfTiny/CMake/add_test.cmake @@ -202,7 +202,8 @@ macro(add_Benchmark_Spike TEST SOURCE_DIR TEST_BUILD_DIR) target_include_directories(${TEST_NAME} PRIVATE ${SOURCE_DIR} - ${SOURCE_DIR}/model_data + ${SOURCE_DIR}/tflite + ${SOURCE_DIR}/${TEST}_data ${FRAMEWORK_TOP}/ ) @@ -300,7 +301,7 @@ macro(add_Benchmark_IREE_Spike TEST SOURCE_DIR TEST_BUILD_DIR) set(TEST_NAME ${TEST}_IREE_Spike) - set(PREGENERATED_MLIR "${SOURCE_DIR}/${TEST}_data/${TEST}_model.mlir") + set(PREGENERATED_MLIR "${SOURCE_DIR}/iree/${TEST}_model.mlir") set(TEST_MLIR_SOURCE ${CMAKE_CURRENT_BINARY_DIR}/${TEST}_model.mlir) set(TEST_VMFB ${CMAKE_CURRENT_BINARY_DIR}/${TEST}_model.vmfb) set(TEST_C_HEADER ${CMAKE_CURRENT_BINARY_DIR}/${TEST}_model.c) @@ -311,7 +312,7 @@ macro(add_Benchmark_IREE_Spike TEST SOURCE_DIR TEST_BUILD_DIR) "Example workflow:\n" " 1. python3 CMake/extract_tflite.py ${SOURCE_DIR}/${TEST}_data/${TEST}_model_data.cc ${TEST}_model.tflite\n" " 2. tosa-converter-for-tflite ${TEST}_model.tflite --text -o ${TEST}_model.mlir\n" - " 3. mv ${TEST}_model.mlir ${SOURCE_DIR}/${TEST}_data/") + " 3. mv ${TEST}_model.mlir ${SOURCE_DIR}/iree/") endif() message(STATUS "Found MLIR model at ${PREGENERATED_MLIR}, copying to build directory.") @@ -388,6 +389,7 @@ macro(add_Benchmark_IREE_Spike TEST SOURCE_DIR TEST_BUILD_DIR) target_include_directories(${TEST_NAME} PRIVATE ${SOURCE_DIR} + ${SOURCE_DIR}/iree ${SOURCE_DIR}/${TEST}_data ${FRAMEWORK_TOP}/ ${CMAKE_CURRENT_BINARY_DIR} diff --git a/benchmark_sources/MLPerfTiny/Int8/toycar/benchmark.hpp b/benchmark_sources/MLPerfTiny/Int8/toycar/iree/benchmark.hpp similarity index 57% rename from benchmark_sources/MLPerfTiny/Int8/toycar/benchmark.hpp rename to benchmark_sources/MLPerfTiny/Int8/toycar/iree/benchmark.hpp index 6d644c0..f8742d7 100644 --- a/benchmark_sources/MLPerfTiny/Int8/toycar/benchmark.hpp +++ b/benchmark_sources/MLPerfTiny/Int8/toycar/iree/benchmark.hpp @@ -1,123 +1,11 @@ #ifndef BENCHMARK_HPP -#define BENCHMARK_HPP +#define BENCHMARK_HPP -#include -//BSP includes -//#include "uart.hpp" -//Includes for benchmark - -#ifndef IREE_RUNTIME_ENABLED -// TFLM framework includes (default). -#include "tensorflow/lite/micro/tflite_bridge/micro_error_reporter.h" -#include "tensorflow/lite/micro/micro_interpreter.h" -#include "tensorflow/lite/micro/micro_mutable_op_resolver.h" -#include "tensorflow/lite/schema/schema_generated.h" -#else -// IREE framework: use generic definitions. -// TODO: IREE runtime harness implementation to replace TFLM-specific code below. -namespace tflite { - enum TfLiteStatus { kTfLiteOk = 0, kTfLiteError = 1 }; -} -#endif // IREE_RUNTIME_ENABLED - -#include "toycar_int8_data/toycar_int8_input_data.h" -#include "toycar_int8_data/toycar_int8_model_data.h" -#include "toycar_int8_data/toycar_int8_model_settings.h" -#include "toycar_int8_data/toycar_int8_output_data_ref.h" - -//Due to scoping/dynamic allocation issue with tflm, unfortunately need to include simulator specific in this file +#include "toycar_int8_model_settings.h" +#include "toycar_int8_input_data.h" +#include "toycar_int8_output_data_ref.h" #include "simulator.hpp" -#ifndef IREE_RUNTIME_ENABLED - -class Benchmark -{ - private: - /* - * Private Helper Functions and variables - */ - static constexpr size_t tensor_arena_size = 256 * 1024; - alignas(16) uint8_t tensor_arena[tensor_arena_size]; - - const tflite::Model *model; - tflite::MicroInterpreter *interpreter_ptr; - - public: - /* - * Required Functions for test framework - */ - // - Benchmark(){ - }; - - //Call code to be benchmarked - inline int run_benchmark() - { - //Due to scoping issue for the tflite::MicroInterpreter, init must be inside here. Fixes to dynamic allocation should allow this to be separated correctly - model = tflite::GetModel(toycar_int8_model_data); - static tflite::MicroMutableOpResolver<1> resolver; - resolver.AddFullyConnected(); - tflite::MicroInterpreter interpreter(model, resolver, tensor_arena, tensor_arena_size); - if (interpreter.AllocateTensors() != kTfLiteOk) - { - return 1; - //uart_printf("Failed to allocate tensors!\n"); - } - memcpy(interpreter.input(0)->data.int8, (int8_t *)toycar_int8_input_data[0], toycar_int8_input_data_len[0]); //Only one test case - - Simulator simulator; //need to initialize simulator internally - //Restart measurement - simulator.begin_measurement(); - - if (interpreter.Invoke() != kTfLiteOk) - { - //uart_printf("Failed in Invoke!\n"); - return 2; - } - //End measurement for real - simulator.end_measurement(); - - - // Due to scoping issue, validation also inside this function - int32_t sum = 0; - for (size_t j = 0; j < toycar_int8_input_data_len[0]; j++) - { - int32_t diff1 = (int8_t)toycar_int8_input_data[0][j] - (int8_t)interpreter.output(0)->data.int8[j]; - int32_t square = diff1*diff1; - sum += square; - } - sum /= toycar_int8_input_data_len[0]; - - int32_t diff = abs(sum - toycar_int8_output_data_ref[0]); - - if (diff > 1) - { - //uart_printf("ERROR: at #%d, sum %d ref %d diff %d \n", 0, sum, toycar_int8_output_data_ref[0], diff); - simulator.terminate(1); //Terminate simulation with return code 1 instead of returning (due to scoping problem) - return 3; - } - else - { - //uart_printf("Sample #%d pass, sum %d ref %d diff %d \n", 0, sum, toycar_int8_output_data_ref[0], diff); - simulator.terminate(0); //Terminate simulation with return code 0 instead of returning (due to scoping problem) - return 0; - } - - }; - - //Validate Output - int validate_benchmark() - { - //Not used due to scoping issue - return true; - }; - //Cleanup any allocatations - ~Benchmark(){ - }; -}; - -#else - // IREE framework stub implementation #include "iree/base/api.h" #include "iree/hal/api.h" @@ -126,6 +14,8 @@ class Benchmark #include "iree/vm/api.h" #include "iree/vm/bytecode/module.h" +#include // For abs() + extern "C" { extern const unsigned char iree_model_vmfb[]; extern const unsigned int iree_model_vmfb_len; @@ -190,7 +80,7 @@ class Benchmark (iree_hal_buffer_params_t){.usage = IREE_HAL_BUFFER_USAGE_DEFAULT, .type = IREE_HAL_MEMORY_TYPE_DEVICE_LOCAL}, iree_make_const_byte_span(toycar_int8_input_data[0], toycar_int8_input_data_len[0]), &arg0); - + if (!iree_status_is_ok(status)) return 2; iree_runtime_call_inputs_push_back_buffer_view(&call, arg0); iree_hal_buffer_view_release(arg0); @@ -217,11 +107,11 @@ class Benchmark iree_hal_buffer_t* buffer = iree_hal_buffer_view_buffer(ret0); iree_hal_buffer_mapping_t mapping; int result = 0; - + if (iree_status_is_ok(iree_hal_buffer_map_range( buffer, IREE_HAL_MAPPING_MODE_SCOPED, IREE_HAL_MEMORY_ACCESS_READ, 0, toycar_int8_input_data_len[0], &mapping))) { - + const int8_t* out_ptr = (const int8_t*)mapping.contents.data; int32_t sum = 0; for (size_t j = 0; j < toycar_int8_input_data_len[0]; j++) { @@ -257,6 +147,4 @@ class Benchmark } }; -#endif // IREE_RUNTIME_ENABLED - -#endif +#endif // BENCHMARK_HPP diff --git a/benchmark_sources/MLPerfTiny/Int8/toycar/toycar_int8_data/toycar_int8_model.mlir b/benchmark_sources/MLPerfTiny/Int8/toycar/iree/toycar_int8_model.mlir similarity index 100% rename from benchmark_sources/MLPerfTiny/Int8/toycar/toycar_int8_data/toycar_int8_model.mlir rename to benchmark_sources/MLPerfTiny/Int8/toycar/iree/toycar_int8_model.mlir diff --git a/benchmark_sources/MLPerfTiny/Int8/toycar/tflite/benchmark.hpp b/benchmark_sources/MLPerfTiny/Int8/toycar/tflite/benchmark.hpp new file mode 100644 index 0000000..92fd1cb --- /dev/null +++ b/benchmark_sources/MLPerfTiny/Int8/toycar/tflite/benchmark.hpp @@ -0,0 +1,102 @@ +#ifndef BENCHMARK_HPP +#define BENCHMARK_HPP + +#include "toycar_int8_model_data.h" +#include "toycar_int8_model_settings.h" +#include "toycar_int8_input_data.h" +#include "toycar_int8_output_data_ref.h" +#include "tensorflow/lite/micro/micro_mutable_op_resolver.h" +#include "tensorflow/lite/micro/micro_interpreter.h" +#include "tensorflow/lite/schema/schema_generated.h" +#include "tensorflow/lite/c/common.h" +#include "tensorflow/lite/micro/tflite_bridge/micro_error_reporter.h" +//Include simulator specific in this file +#include "simulator.hpp" + +class Benchmark +{ + private: + /* + * Private Helper Functions and variables + */ + static constexpr size_t tensor_arena_size = 256 * 1024; + alignas(16) uint8_t tensor_arena[tensor_arena_size]; + + const tflite::Model *model; + tflite::MicroInterpreter *interpreter_ptr; + + public: + /* + * Required Functions for test framework + */ + // + Benchmark(){ + }; + + //Call code to be benchmarked + inline int run_benchmark() + { + //Due to scoping issue for the tflite::MicroInterpreter, init must be inside here. Fixes to dynamic allocation should allow this to be separated correctly + model = tflite::GetModel(toycar_int8_model_data); + static tflite::MicroMutableOpResolver<1> resolver; + resolver.AddFullyConnected(); + tflite::MicroInterpreter interpreter(model, resolver, tensor_arena, tensor_arena_size); + if (interpreter.AllocateTensors() != kTfLiteOk) + { + return 1; + //uart_printf("Failed to allocate tensors!\n"); + } + memcpy(interpreter.input(0)->data.int8, (int8_t *)toycar_int8_input_data[0], toycar_int8_input_data_len[0]); //Only one test case + + Simulator simulator; //need to initialize simulator internally + //Restart measurement + simulator.begin_measurement(); + + if (interpreter.Invoke() != kTfLiteOk) + { + //uart_printf("Failed in Invoke!\n"); + return 2; + } + //End measurement for real + simulator.end_measurement(); + + + // Due to scoping issue, validation also inside this function + int32_t sum = 0; + for (size_t j = 0; j < toycar_int8_input_data_len[0]; j++) + { + int32_t diff1 = (int8_t)toycar_int8_input_data[0][j] - (int8_t)interpreter.output(0)->data.int8[j]; + int32_t square = diff1*diff1; + sum += square; + } + sum /= toycar_int8_input_data_len[0]; + + int32_t diff = abs(sum - toycar_int8_output_data_ref[0]); + + if (diff > 1) + { + //uart_printf("ERROR: at #%d, sum %d ref %d diff %d \n", 0, sum, toycar_int8_output_data_ref[0], diff); + simulator.terminate(1); //Terminate simulation with return code 1 instead of returning (due to scoping problem) + return 3; + } + else + { + //uart_printf("Sample #%d pass, sum %d ref %d diff %d \n", 0, sum, toycar_int8_output_data_ref[0], diff); + simulator.terminate(0); //Terminate simulation with return code 0 instead of returning (due to scoping problem) + return 0; + } + + }; + + //Validate Output + int validate_benchmark() + { + //Not used due to scoping issue + return true; + }; + //Cleanup any allocatations + ~Benchmark(){ + }; +}; + +#endif // BENCHMARK_HPP From 59762db400349fe67ed51f501acf0951bd2527c6 Mon Sep 17 00:00:00 2001 From: Muhammed Efe Cetin Date: Mon, 20 Jul 2026 16:27:57 +0200 Subject: [PATCH 06/12] benchmark_sources/generic_iree: use upstream iree source --- .gitmodules | 3 +- .../generic_iree/iree/CMakeLists.txt | 26 ++ ...RNG-stub-for-generic-bare-metal-buil.patch | 128 ++++++++++ ...-V-build-disable-async-sockets-signa.patch | 227 +++++++++++++++++ ...-V-bare-metal-build-by-avoiding-libd.patch | 195 +++++++++++++++ ...-V-build-skip-coordinated_test-on-Ge.patch | 110 +++++++++ ...pply-more-fixes-for-rv32-compilation.patch | 231 ++++++++++++++++++ .../generic_iree/iree/iree-source | 2 +- 8 files changed, 919 insertions(+), 3 deletions(-) create mode 100644 benchmark_sources/generic_iree/iree/iree-patches/0001-Add-optional-CSPRNG-stub-for-generic-bare-metal-buil.patch create mode 100644 benchmark_sources/generic_iree/iree/iree-patches/0002-Fix-generic-RISC-V-build-disable-async-sockets-signa.patch create mode 100644 benchmark_sources/generic_iree/iree/iree-patches/0003-Fix-Generic-RISC-V-bare-metal-build-by-avoiding-libd.patch create mode 100644 benchmark_sources/generic_iree/iree/iree-patches/0004-Fix-generic-RISC-V-build-skip-coordinated_test-on-Ge.patch create mode 100644 benchmark_sources/generic_iree/iree/iree-patches/0005-apply-more-fixes-for-rv32-compilation.patch diff --git a/.gitmodules b/.gitmodules index 80f3a75..61a0c96 100644 --- a/.gitmodules +++ b/.gitmodules @@ -70,5 +70,4 @@ url = https://github.com/eembc/audiomark.git [submodule "benchmark_sources/generic_iree/iree/iree-source"] path = benchmark_sources/generic_iree/iree/iree-source - url = https://github.com/efectn-forks/iree.git - branch = rv32-fixes + url = https://github.com/iree-org/iree.git diff --git a/benchmark_sources/generic_iree/iree/CMakeLists.txt b/benchmark_sources/generic_iree/iree/CMakeLists.txt index e76115f..f968ecb 100644 --- a/benchmark_sources/generic_iree/iree/CMakeLists.txt +++ b/benchmark_sources/generic_iree/iree/CMakeLists.txt @@ -60,6 +60,32 @@ string(APPEND CMAKE_ASM_FLAGS " -DIREE_TIME_NOW_FN=\\{return\\ 0\\;\\}") # Math library string(APPEND CMAKE_EXE_LINKER_FLAGS " -lm") +# Apply IREE patches if not already applied +set(IREE_PATCH_DIR "${CMAKE_CURRENT_SOURCE_DIR}/iree-patches") +set(IREE_PATCH_STAMP "${CMAKE_CURRENT_SOURCE_DIR}/iree-source/.patches_applied") + +if(NOT EXISTS "${IREE_PATCH_STAMP}") + message(STATUS "Applying IREE patches from ${IREE_PATCH_DIR}") + file(GLOB IREE_PATCHES "${IREE_PATCH_DIR}/*.patch") + + # Sort patches to ensure they are applied in order + list(SORT IREE_PATCHES) + + foreach(PATCH_FILE IN LISTS IREE_PATCHES) + message(STATUS "Applying patch: ${PATCH_FILE}") + execute_process( + COMMAND git apply "${PATCH_FILE}" + WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/iree-source" + RESULT_VARIABLE PATCH_RESULT + ) + if(NOT PATCH_RESULT EQUAL 0) + message(FATAL_ERROR "Failed to apply patch: ${PATCH_FILE}") + endif() + endforeach() + + file(TOUCH "${IREE_PATCH_STAMP}") +endif() + # Add IREE runtime source as subdirectory set(_MLPERFTINY_IREE_PREV_SYSTEM_PROCESSOR ${CMAKE_SYSTEM_PROCESSOR}) set(CMAKE_SYSTEM_PROCESSOR riscv32) diff --git a/benchmark_sources/generic_iree/iree/iree-patches/0001-Add-optional-CSPRNG-stub-for-generic-bare-metal-buil.patch b/benchmark_sources/generic_iree/iree/iree-patches/0001-Add-optional-CSPRNG-stub-for-generic-bare-metal-buil.patch new file mode 100644 index 0000000..3902595 --- /dev/null +++ b/benchmark_sources/generic_iree/iree/iree-patches/0001-Add-optional-CSPRNG-stub-for-generic-bare-metal-buil.patch @@ -0,0 +1,128 @@ +From dc37f1cbf33cff9569f05b1419c208228e39cf72 Mon Sep 17 00:00:00 2001 +From: Han-Kuan Chen +Date: Tue, 7 Apr 2026 09:12:38 -0700 +Subject: [PATCH 1/5] Add optional CSPRNG stub for generic/bare-metal builds + +For some embedded/bare-metal environments we never need a CSPRNG, but we +still want the runtime to build. In those cases it is better to compile +successfully and have CSPRNG calls return an explicit UNIMPLEMENTED +status than to fail the build at compile time. + +This change adds an opt-in CMake option IREE_CSPRNG_USE_STUB (default +OFF) that enables a stub iree_csprng_fill returning +IREE_STATUS_UNIMPLEMENTED. The default behavior remains strict: if the +option is not enabled, unsupported platforms still hit the existing + +Signed-off-by: Han-Kuan Chen +--- + CMakeLists.txt | 5 +++++ + build_tools/cmake/generic_riscv32.cmake | 1 + + build_tools/cmake/generic_riscv64.cmake | 1 + + runtime/src/iree/base/internal/BUILD.bazel | 10 ++++++++++ + runtime/src/iree/base/internal/CMakeLists.txt | 5 +++++ + runtime/src/iree/base/internal/csprng.c | 12 ++++++++++++ + 6 files changed, 34 insertions(+) + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index d940c82f4a..eccbfacd68 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -49,6 +49,11 @@ option(IREE_ENABLE_COMPILER_TRACING "Enables instrumented compiler tracing." OFF + option(IREE_ENABLE_RENDERDOC_PROFILING "Enables profiling HAL devices with the RenderDoc tool." OFF) + option(IREE_ENABLE_THREADING "Builds IREE in with thread library support." ON) + option(IREE_SYNCHRONIZATION_DISABLE_UNSAFE "Disables all synchronization primitives (for single-threaded bare-metal targets only)." OFF) ++ ++# Allow opting into a stub CSPRNG implementation on generic/bare-metal targets. ++option(IREE_CSPRNG_USE_STUB ++ "Allow building a stub CSPRNG implementation on generic/bare-metal targets (returns IREE_STATUS_UNIMPLEMENTED)." ++ OFF) + option(IREE_ENABLE_CLANG_TIDY "Builds IREE in with clang tidy enabled on IREE's libraries." OFF) + # Enables POSIX API support. When disabled, tools requiring POSIX (e.g., iree-flatcc-cli) will not be built. + option(IREE_ENABLE_POSIX "Builds IREE in with POSIX support." ON) +diff --git a/build_tools/cmake/generic_riscv32.cmake b/build_tools/cmake/generic_riscv32.cmake +index 8a4363ea12..e6eb5dd563 100644 +--- a/build_tools/cmake/generic_riscv32.cmake ++++ b/build_tools/cmake/generic_riscv32.cmake +@@ -48,6 +48,7 @@ set(IREE_ENABLE_POSIX OFF CACHE BOOL "" FORCE) + set(IREE_ENABLE_THREADING OFF CACHE BOOL "" FORCE) + set(IREE_SYNCHRONIZATION_DISABLE_UNSAFE ON CACHE BOOL "" FORCE) + set(IREE_BUILD_TESTS OFF CACHE BOOL "" FORCE) ++set(IREE_CSPRNG_USE_STUB ON CACHE BOOL "" FORCE) + + # Specify ISA spec for march=rv32imf. This is to resolve the mismatch between + # llvm and binutil ISA version. +diff --git a/build_tools/cmake/generic_riscv64.cmake b/build_tools/cmake/generic_riscv64.cmake +index 3dce78d567..9c9aabcc61 100644 +--- a/build_tools/cmake/generic_riscv64.cmake ++++ b/build_tools/cmake/generic_riscv64.cmake +@@ -31,6 +31,7 @@ endif() + set(CMAKE_C_EXTENSIONS OFF CACHE BOOL "" FORCE) # runtime/src/iree/base/time.c:108:13: error: call to undeclared function 'clock_nanosleep' + set(IREE_BUILD_TESTS OFF CACHE BOOL "" FORCE) + set(IREE_ENABLE_POSIX OFF CACHE BOOL "" FORCE) ++set(IREE_CSPRNG_USE_STUB ON CACHE BOOL "" FORCE) + set(IREE_ENABLE_THREADING OFF CACHE BOOL "" FORCE) + set(IREE_SYNCHRONIZATION_DISABLE_UNSAFE ON CACHE BOOL "" FORCE) + set(IREE_HAL_DRIVER_LOCAL_TASK OFF CACHE BOOL "" FORCE) +diff --git a/runtime/src/iree/base/internal/BUILD.bazel b/runtime/src/iree/base/internal/BUILD.bazel +index 58828a33d9..ba17e90c93 100644 +--- a/runtime/src/iree/base/internal/BUILD.bazel ++++ b/runtime/src/iree/base/internal/BUILD.bazel +@@ -209,6 +209,16 @@ iree_runtime_cc_library( + ], + ) + ++iree_cmake_extra_content( ++ content = """ ++if(IREE_CSPRNG_USE_STUB) ++ # Enable the generic/bare-metal CSPRNG stub implementation on CMake builds. ++ target_compile_definitions(iree_base_internal_csprng PUBLIC IREE_CSPRNG_USE_STUB) ++endif() ++""", ++ inline = True, ++) ++ + iree_runtime_cc_test( + name = "csprng_test", + srcs = ["csprng_test.cc"], +diff --git a/runtime/src/iree/base/internal/CMakeLists.txt b/runtime/src/iree/base/internal/CMakeLists.txt +index 17db3a4e3b..4a42e86981 100644 +--- a/runtime/src/iree/base/internal/CMakeLists.txt ++++ b/runtime/src/iree/base/internal/CMakeLists.txt +@@ -220,6 +220,11 @@ iree_cc_library( + PUBLIC + ) + ++if(IREE_CSPRNG_USE_STUB) ++ # Enable the generic/bare-metal CSPRNG stub implementation on CMake builds. ++ target_compile_definitions(iree_base_internal_csprng PUBLIC IREE_CSPRNG_USE_STUB) ++endif() ++ + iree_cc_test( + NAME + csprng_test +diff --git a/runtime/src/iree/base/internal/csprng.c b/runtime/src/iree/base/internal/csprng.c +index 0377fa791e..f46e2bee70 100644 +--- a/runtime/src/iree/base/internal/csprng.c ++++ b/runtime/src/iree/base/internal/csprng.c +@@ -92,6 +92,18 @@ IREE_API_EXPORT iree_status_t iree_csprng_fill(iree_byte_span_t buffer) { + return iree_ok_status(); + } + ++#elif defined(IREE_CSPRNG_USE_STUB) ++ ++// This is intended for builds where no operating system CSPRNG is available and ++// callers can tolerate IREE_STATUS_UNIMPLEMENTED. On platforms that can provide ++// a real CSPRNG, prefer adding a proper implementation above instead of ++// enabling this stub. ++IREE_API_EXPORT iree_status_t iree_csprng_fill(iree_byte_span_t buffer) { ++ if (buffer.data_length == 0) return iree_ok_status(); ++ return iree_make_status(IREE_STATUS_UNIMPLEMENTED, ++ "CSPRNG not implemented for this platform"); ++} ++ + #else + + #error "CSPRNG not implemented for this platform" +-- +2.53.0 + diff --git a/benchmark_sources/generic_iree/iree/iree-patches/0002-Fix-generic-RISC-V-build-disable-async-sockets-signa.patch b/benchmark_sources/generic_iree/iree/iree-patches/0002-Fix-generic-RISC-V-build-disable-async-sockets-signa.patch new file mode 100644 index 0000000..d695f55 --- /dev/null +++ b/benchmark_sources/generic_iree/iree/iree-patches/0002-Fix-generic-RISC-V-build-disable-async-sockets-signa.patch @@ -0,0 +1,227 @@ +From b4d002558bbf78b37589ed594fb2a14807194d80 Mon Sep 17 00:00:00 2001 +From: Han-Kuan Chen +Date: Wed, 8 Apr 2026 03:17:27 -0700 +Subject: [PATCH 2/5] Fix generic RISC-V build: disable async sockets/signals + on IREE_PLATFORM_GENERIC + +Commit 7802eb5dad309333118a9d552c5f2f98ac302de7 added async socket and +signal support assuming a host platform with POSIX (or Windows) +facilities available. The generic RISC-V toolchain used by +build_tools/cmake/generic_riscv64.cmake defines IREE_PLATFORM_GENERIC +and targets a bare-metal environment without , , +or real OS signals. This caused the generic RISC-V runtime build to +fail. + +Fix this by making async sockets and signals explicitly unsupported on +IREE_PLATFORM_GENERIC: +- Provide stub implementations of iree_async_socket_* on +IREE_PLATFORM_GENERIC that always return IREE_STATUS_UNIMPLEMENTED and +avoid including POSIX socket headers. +- Restrict inclusion of and sigset_t-based helpers to +non-generic platforms, and make the generic bare-metal signal helpers +no-ops. +Bare-metal targets are not expected to expose a POSIX socket API, so +this matches the existing pattern used for file I/O and time on +IREE_PLATFORM_GENERIC. Behavior on existing host platforms +(Linux/Android/Windows/BSD/Emscripten) is unchanged. + +Signed-off-by: Han-Kuan Chen +--- + runtime/src/iree/async/socket.c | 114 +++++++++++++++++++-------- + runtime/src/iree/async/util/signal.c | 10 ++- + runtime/src/iree/async/util/signal.h | 4 +- + 3 files changed, 89 insertions(+), 39 deletions(-) + +diff --git a/runtime/src/iree/async/socket.c b/runtime/src/iree/async/socket.c +index 62ce739f2f..331402ecab 100644 +--- a/runtime/src/iree/async/socket.c ++++ b/runtime/src/iree/async/socket.c +@@ -8,6 +8,86 @@ + + #include "iree/async/proactor.h" + ++//===----------------------------------------------------------------------===// ++// Platforms without socket support (generic bare-metal). ++//===----------------------------------------------------------------------===// ++ ++#if defined(IREE_PLATFORM_GENERIC) || !defined(IREE_SOCKETS_ENABLE) ++ ++IREE_API_EXPORT iree_status_t iree_async_socket_create( ++ iree_async_proactor_t* proactor, iree_async_socket_type_t type, ++ iree_async_socket_options_t options, iree_async_socket_t** out_socket) { ++ (void)proactor; ++ (void)type; ++ (void)options; ++ (void)out_socket; ++ return iree_make_status(IREE_STATUS_UNIMPLEMENTED, ++ "sockets not supported on this platform"); ++} ++ ++IREE_API_EXPORT iree_status_t iree_async_socket_import( ++ iree_async_proactor_t* proactor, iree_async_primitive_t primitive, ++ iree_async_socket_type_t type, iree_async_socket_flags_t flags, ++ iree_async_socket_t** out_socket) { ++ (void)proactor; ++ (void)primitive; ++ (void)type; ++ (void)flags; ++ (void)out_socket; ++ return iree_make_status(IREE_STATUS_UNIMPLEMENTED, ++ "sockets not supported on this platform"); ++} ++ ++IREE_API_EXPORT void iree_async_socket_retain(iree_async_socket_t* socket) { ++ (void)socket; ++} ++ ++IREE_API_EXPORT void iree_async_socket_release(iree_async_socket_t* socket) { ++ (void)socket; ++} ++ ++IREE_API_EXPORT iree_status_t iree_async_socket_bind( ++ iree_async_socket_t* socket, const iree_async_address_t* address) { ++ (void)socket; ++ (void)address; ++ return iree_make_status(IREE_STATUS_UNIMPLEMENTED, ++ "sockets not supported on this platform"); ++} ++ ++IREE_API_EXPORT iree_status_t iree_async_socket_listen( ++ iree_async_socket_t* socket, iree_host_size_t backlog) { ++ (void)socket; ++ (void)backlog; ++ return iree_make_status(IREE_STATUS_UNIMPLEMENTED, ++ "sockets not supported on this platform"); ++} ++ ++IREE_API_EXPORT iree_status_t iree_async_socket_query_local_address( ++ const iree_async_socket_t* socket, iree_async_address_t* out_address) { ++ (void)socket; ++ (void)out_address; ++ return iree_make_status(IREE_STATUS_UNIMPLEMENTED, ++ "sockets not supported on this platform"); ++} ++ ++IREE_API_EXPORT iree_status_t iree_async_socket_shutdown( ++ iree_async_socket_t* socket, iree_async_socket_shutdown_mode_t mode) { ++ (void)socket; ++ (void)mode; ++ return iree_make_status(IREE_STATUS_UNIMPLEMENTED, ++ "sockets not supported on this platform"); ++} ++ ++IREE_API_EXPORT iree_status_t iree_async_socket_query_send_space( ++ iree_async_socket_t* socket, iree_host_size_t* out_space) { ++ (void)socket; ++ (void)out_space; ++ return iree_make_status(IREE_STATUS_UNIMPLEMENTED, ++ "sockets not supported on this platform"); ++} ++ ++#endif // !IREE_PLATFORM_GENERIC ++ + //===----------------------------------------------------------------------===// + // Platform abstractions + //===----------------------------------------------------------------------===// +@@ -352,36 +432,4 @@ IREE_API_EXPORT iree_status_t iree_async_socket_query_send_space( + return iree_ok_status(); + } + +-#else // !IREE_SOCKETS_ENABLE +- +-IREE_API_EXPORT iree_status_t iree_async_socket_bind( +- iree_async_socket_t* socket, const iree_async_address_t* address) { +- return iree_make_status(IREE_STATUS_UNIMPLEMENTED, +- "sockets not available on this platform"); +-} +- +-IREE_API_EXPORT iree_status_t iree_async_socket_listen( +- iree_async_socket_t* socket, iree_host_size_t backlog) { +- return iree_make_status(IREE_STATUS_UNIMPLEMENTED, +- "sockets not available on this platform"); +-} +- +-IREE_API_EXPORT iree_status_t iree_async_socket_query_local_address( +- const iree_async_socket_t* socket, iree_async_address_t* out_address) { +- return iree_make_status(IREE_STATUS_UNIMPLEMENTED, +- "sockets not available on this platform"); +-} +- +-IREE_API_EXPORT iree_status_t iree_async_socket_shutdown( +- iree_async_socket_t* socket, iree_async_socket_shutdown_mode_t mode) { +- return iree_make_status(IREE_STATUS_UNIMPLEMENTED, +- "sockets not available on this platform"); +-} +- +-IREE_API_EXPORT iree_status_t iree_async_socket_query_send_space( +- iree_async_socket_t* socket, iree_host_size_t* out_space) { +- return iree_make_status(IREE_STATUS_UNIMPLEMENTED, +- "sockets not available on this platform"); +-} +- +-#endif // IREE_SOCKETS_ENABLE ++#endif // !IREE_PLATFORM_GENERIC +diff --git a/runtime/src/iree/async/util/signal.c b/runtime/src/iree/async/util/signal.c +index 8c7b6719be..08ac4593d9 100644 +--- a/runtime/src/iree/async/util/signal.c ++++ b/runtime/src/iree/async/util/signal.c +@@ -8,7 +8,7 @@ + + #include "iree/base/internal/atomics.h" + +-#if !defined(IREE_PLATFORM_WINDOWS) ++#if !defined(IREE_PLATFORM_WINDOWS) && !defined(IREE_PLATFORM_GENERIC) + #include + #endif + +@@ -58,7 +58,7 @@ IREE_API_EXPORT iree_status_t iree_async_signal_ignore_broken_pipe(void) { + return iree_ok_status(); + } + +-#elif defined(IREE_PLATFORM_WASM) ++#elif defined(IREE_PLATFORM_EMSCRIPTEN) || defined(IREE_PLATFORM_GENERIC) || defined(IREE_PLATFORM_WASM) + + // Wasm has no POSIX signals. + +@@ -251,7 +251,8 @@ iree_async_signal_subscription_t* iree_async_signal_subscription_dispatch( + // POSIX signal number conversion + //===----------------------------------------------------------------------===// + +-#if !defined(IREE_PLATFORM_WINDOWS) && !defined(IREE_PLATFORM_WASM) ++#if !defined(IREE_PLATFORM_WINDOWS) && !defined(IREE_PLATFORM_EMSCRIPTEN) && \ ++ !defined(IREE_PLATFORM_GENERIC) && !defined(IREE_PLATFORM_WASM) + + int iree_async_signal_to_posix(iree_async_signal_t signal) { + switch (signal) { +@@ -301,4 +302,5 @@ void iree_async_signal_build_sigset(sigset_t* mask) { + sigaddset(mask, SIGUSR2); + } + +-#endif // !IREE_PLATFORM_WINDOWS && !IREE_PLATFORM_WASM ++#endif // !IREE_PLATFORM_WINDOWS && !IREE_PLATFORM_EMSCRIPTEN && ++ // !IREE_PLATFORM_GENERIC && !IREE_PLATFORM_WASM +diff --git a/runtime/src/iree/async/util/signal.h b/runtime/src/iree/async/util/signal.h +index 678de57569..547b8bd4e9 100644 +--- a/runtime/src/iree/async/util/signal.h ++++ b/runtime/src/iree/async/util/signal.h +@@ -124,7 +124,7 @@ void iree_async_signal_subscription_defer_unsubscribe( + // POSIX signal number conversion + //===----------------------------------------------------------------------===// + +-#if !defined(IREE_PLATFORM_WINDOWS) ++#if !defined(IREE_PLATFORM_WINDOWS) && !defined(IREE_PLATFORM_GENERIC) + + // Converts an IREE signal enum to the corresponding POSIX signal number. + // Returns 0 for IREE_ASYNC_SIGNAL_NONE or invalid signals. +@@ -138,7 +138,7 @@ iree_async_signal_t iree_async_signal_from_posix(int signo); + // This is used by signalfd and pthread_sigmask. + void iree_async_signal_build_sigset(sigset_t* mask); + +-#endif // !IREE_PLATFORM_WINDOWS ++#endif // !IREE_PLATFORM_WINDOWS && !IREE_PLATFORM_GENERIC + + #ifdef __cplusplus + } // extern "C" +-- +2.53.0 + diff --git a/benchmark_sources/generic_iree/iree/iree-patches/0003-Fix-Generic-RISC-V-bare-metal-build-by-avoiding-libd.patch b/benchmark_sources/generic_iree/iree/iree-patches/0003-Fix-Generic-RISC-V-bare-metal-build-by-avoiding-libd.patch new file mode 100644 index 0000000..abcd3cf --- /dev/null +++ b/benchmark_sources/generic_iree/iree/iree-patches/0003-Fix-Generic-RISC-V-bare-metal-build-by-avoiding-libd.patch @@ -0,0 +1,195 @@ +From 1b8a3cfbd2ded4f91fc7d5bbb2a0745d37ab63f7 Mon Sep 17 00:00:00 2001 +From: Han-Kuan Chen +Date: Wed, 8 Apr 2026 06:30:13 -0700 +Subject: [PATCH 3/5] Fix Generic RISC-V bare-metal build by avoiding libdl and + stubbing threading + +CMake's GNU platform logic was causing RISC-V Generic bare-metal builds +(riscv*-unknown-elf) to link against libdl even though the sysroot does +not provide it, and new async/threading code paths were pulling in POSIX +and thread APIs that are not available on bare-metal targets. + +Fix this in three parts: +- Clear CMAKE_DL_LIBS for Generic platforms in +iree_setup_toolchain.cmake. Setting CMAKE_DL_LIBS only from the +generic_riscv64.cmake toolchain file is not sufficient: CMake's Platform +modules (e.g. Platform/GNU.cmake for GNU-style compilers) run after the +toolchain file and unconditionally set CMAKE_DL_LIBS back to "dl". +Overriding it in iree_setup_toolchain.cmake ensures that Generic builds +do not pick up -ldl on their link lines. +- Add a Generic-only threading stub implementation in +runtime/src/iree/base/threading/thread_generic.c that provides the +iree_thread_* API but returns IREE_STATUS_UNAVAILABLE or no-ops on +IREE_PLATFORM_GENERIC. This allows code that depends on the thread API +(such as proactor_thread) to link on bare-metal targets without dragging +in a real OS thread implementation. +- Exclude IREE_PLATFORM_GENERIC from the POSIX proactor path in +runtime/src/iree/async/proactor_platform.c. Generic bare-metal platforms +do not have the necessary POSIX APIs, so attempting to create a POSIX +proactor results in unresolved symbols. For Generic we leave the +proactor unavailable instead. + +Signed-off-by: Han-Kuan Chen +--- + build_tools/cmake/iree_setup_toolchain.cmake | 13 ++++ + runtime/src/iree/async/proactor_platform.c | 9 ++- + runtime/src/iree/base/threading/BUILD.bazel | 1 + + .../src/iree/base/threading/CMakeLists.txt | 1 + + .../src/iree/base/threading/thread_generic.c | 69 +++++++++++++++++++ + 5 files changed, 90 insertions(+), 3 deletions(-) + create mode 100644 runtime/src/iree/base/threading/thread_generic.c + +diff --git a/build_tools/cmake/iree_setup_toolchain.cmake b/build_tools/cmake/iree_setup_toolchain.cmake +index 2db89d6a01..dd53d32683 100644 +--- a/build_tools/cmake/iree_setup_toolchain.cmake ++++ b/build_tools/cmake/iree_setup_toolchain.cmake +@@ -69,6 +69,19 @@ macro(iree_setup_toolchain) + # Supports dynamic library loading. + #----------------------------------------------------------------------------- + ++ # Bare-metal "Generic" targets (such as riscv*-unknown-elf) typically don't ++ # ship libdl in their sysroots. In those environments we don't support ++ # dynamic library loading anyway, and attempting to link against -ldl causes ++ # link failures. We cannot rely on setting CMAKE_DL_LIBS only from a ++ # toolchain file, as CMake's Platform modules (for example Platform/GNU.cmake ++ # for GNU-style compilers) may later reset CMAKE_DL_LIBS back to "dl". ++ # Clear it here so that libraries which depend on CMAKE_DL_LIBS (for example ++ # iree_base_threading::thread and iree_base_internal::dynamic_library) don't ++ # propagate an unusable -ldl into targets on Generic platforms. ++ if(CMAKE_SYSTEM_NAME STREQUAL "Generic") ++ set(CMAKE_DL_LIBS "") ++ endif() ++ + set(CMAKE_REQUIRED_LIBRARIES ${CMAKE_DL_LIBS}) + check_symbol_exists(dlopen dlfcn.h IREE_HAVE_DLOPEN) + unset(CMAKE_REQUIRED_LIBRARIES) +diff --git a/runtime/src/iree/async/proactor_platform.c b/runtime/src/iree/async/proactor_platform.c +index 6d7a670fb9..385936ea7c 100644 +--- a/runtime/src/iree/async/proactor_platform.c ++++ b/runtime/src/iree/async/proactor_platform.c +@@ -10,9 +10,11 @@ + #include "iree/async/platform/io_uring/api.h" + #endif // IREE_PLATFORM_LINUX && !IREE_PLATFORM_ANDROID + +-#if !defined(IREE_PLATFORM_WINDOWS) && !defined(IREE_PLATFORM_WASM) ++#if !defined(IREE_PLATFORM_WINDOWS) && !defined(IREE_PLATFORM_EMSCRIPTEN) && \ ++ !defined(IREE_PLATFORM_GENERIC) && !defined(IREE_PLATFORM_WASM) + #include "iree/async/platform/posix/api.h" +-#endif // !IREE_PLATFORM_WINDOWS && !IREE_PLATFORM_WASM ++#endif // !IREE_PLATFORM_WINDOWS && !IREE_PLATFORM_EMSCRIPTEN && ++ // !IREE_PLATFORM_GENERIC && !IREE_PLATFORM_WASM + + #if defined(IREE_PLATFORM_WINDOWS) + #include "iree/async/platform/iocp/api.h" +@@ -51,7 +53,8 @@ iree_status_t iree_async_proactor_create_platform( + + status = iree_async_proactor_create_js(options, allocator, out_proactor); + +-#else // macOS, BSD, Android, etc. ++#elif !defined(IREE_PLATFORM_EMSCRIPTEN) && \ ++ !defined(IREE_PLATFORM_GENERIC) // macOS, BSD, Android, etc. + + status = iree_async_proactor_create_posix(options, allocator, out_proactor); + +diff --git a/runtime/src/iree/base/threading/BUILD.bazel b/runtime/src/iree/base/threading/BUILD.bazel +index 96f23d448f..f9ee7f93ab 100644 +--- a/runtime/src/iree/base/threading/BUILD.bazel ++++ b/runtime/src/iree/base/threading/BUILD.bazel +@@ -54,6 +54,7 @@ iree_runtime_cc_library( + srcs = [ + "thread.c", + "thread_darwin.c", ++ "thread_generic.c", + "thread_pthreads.c", + "thread_win32.c", + ], +diff --git a/runtime/src/iree/base/threading/CMakeLists.txt b/runtime/src/iree/base/threading/CMakeLists.txt +index c74d233867..4d4b550023 100644 +--- a/runtime/src/iree/base/threading/CMakeLists.txt ++++ b/runtime/src/iree/base/threading/CMakeLists.txt +@@ -49,6 +49,7 @@ iree_cc_library( + SRCS + "thread.c" + "thread_darwin.c" ++ "thread_generic.c" + "thread_pthreads.c" + "thread_win32.c" + DEPS +diff --git a/runtime/src/iree/base/threading/thread_generic.c b/runtime/src/iree/base/threading/thread_generic.c +new file mode 100644 +index 0000000000..1e46133fd8 +--- /dev/null ++++ b/runtime/src/iree/base/threading/thread_generic.c +@@ -0,0 +1,69 @@ ++// Copyright 2026 The IREE Authors ++// ++// Licensed under the Apache License v2.0 with LLVM Exceptions. ++// See https://llvm.org/LICENSE.txt for license information. ++// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception ++ ++#include "iree/base/threading/thread.h" ++ ++#if defined(IREE_PLATFORM_GENERIC) ++ ++// Generic bare-metal platforms (such as riscv*-unknown-elf) don't provide a ++// native threading API. Provide minimal stub implementations so that code can ++// be linked, but return UNAVAILABLE from operations that would require ++// operating-system threads. ++ ++struct iree_thread_t {}; ++ ++struct iree_thread_override_t {}; ++ ++IREE_API_EXPORT iree_status_t ++iree_thread_create(iree_thread_entry_t entry, void* entry_arg, ++ iree_thread_create_params_t params, ++ iree_allocator_t allocator, iree_thread_t** out_thread) { ++ (void)entry; ++ (void)entry_arg; ++ (void)params; ++ (void)allocator; ++ (void)out_thread; ++ return iree_make_status(IREE_STATUS_UNAVAILABLE, ++ "threads are not supported on this platform"); ++} ++ ++IREE_API_EXPORT void iree_thread_retain(iree_thread_t* thread) { (void)thread; } ++ ++IREE_API_EXPORT void iree_thread_release(iree_thread_t* thread) { ++ (void)thread; ++} ++ ++IREE_API_EXPORT uintptr_t iree_thread_id(iree_thread_t* thread) { ++ (void)thread; ++ return 0; ++} ++ ++IREE_API_EXPORT iree_thread_override_t* ++iree_thread_priority_class_override_begin( ++ iree_thread_t* thread, iree_thread_priority_class_t priority_class) { ++ (void)thread; ++ (void)priority_class; ++ return NULL; ++} ++ ++IREE_API_EXPORT void iree_thread_override_end( ++ iree_thread_override_t* override_token) { ++ (void)override_token; ++} ++ ++IREE_API_EXPORT void iree_thread_request_affinity( ++ iree_thread_t* thread, iree_thread_affinity_t affinity) { ++ (void)thread; ++ (void)affinity; ++} ++ ++IREE_API_EXPORT void iree_thread_resume(iree_thread_t* thread) { (void)thread; } ++ ++IREE_API_EXPORT void iree_thread_join(iree_thread_t* thread) { (void)thread; } ++ ++IREE_API_EXPORT void iree_thread_yield(void) {} ++ ++#endif // IREE_PLATFORM_GENERIC +-- +2.53.0 + diff --git a/benchmark_sources/generic_iree/iree/iree-patches/0004-Fix-generic-RISC-V-build-skip-coordinated_test-on-Ge.patch b/benchmark_sources/generic_iree/iree/iree-patches/0004-Fix-generic-RISC-V-build-skip-coordinated_test-on-Ge.patch new file mode 100644 index 0000000..6e94e4e --- /dev/null +++ b/benchmark_sources/generic_iree/iree/iree-patches/0004-Fix-generic-RISC-V-build-skip-coordinated_test-on-Ge.patch @@ -0,0 +1,110 @@ +From 018d4dc08819723d040ccae87dc83dc94fd7e329 Mon Sep 17 00:00:00 2001 +From: Han-Kuan Chen +Date: Wed, 8 Apr 2026 04:42:20 -0700 +Subject: [PATCH 4/5] Fix generic RISC-V build: skip coordinated_test on + Generic CMake + +Commit 3a4c9919ba3a8e81b47fb10bbccc0b45be8e0fab added the coordinated +multi-process test harness as part of the async / cross-process shared +memory infrastructure. That implementation assumes a host OS with POSIX +(or Windows) process and filesystem support and pulls in , +nanosleep, mkdtemp, etc. + +Fix this by teaching runtime/src/iree/testing/CMakeLists.txt to skip +building coordinated_test, coordinated_test_main, and +coordinated_test_test when CMAKE_SYSTEM_NAME is "Generic". + +Signed-off-by: Han-Kuan Chen +--- + runtime/src/iree/testing/CMakeLists.txt | 76 +++++++++++++------------ + 1 file changed, 39 insertions(+), 37 deletions(-) + +diff --git a/runtime/src/iree/testing/CMakeLists.txt b/runtime/src/iree/testing/CMakeLists.txt +index 73634ad59f..2e247f8135 100644 +--- a/runtime/src/iree/testing/CMakeLists.txt ++++ b/runtime/src/iree/testing/CMakeLists.txt +@@ -92,42 +92,44 @@ iree_cc_library( + + ### BAZEL_TO_CMAKE_PRESERVES_ALL_CONTENT_BELOW_THIS_LINE ### + +-iree_cc_library( +- NAME +- coordinated_test +- HDRS +- "coordinated_test.h" +- SRCS +- "coordinated_test.c" +- DEPS +- iree::base +- PUBLIC +-) ++if(NOT CMAKE_SYSTEM_NAME STREQUAL "Generic") ++ iree_cc_library( ++ NAME ++ coordinated_test ++ HDRS ++ "coordinated_test.h" ++ SRCS ++ "coordinated_test.c" ++ DEPS ++ iree::base ++ PUBLIC ++ ) + +-iree_cc_library( +- NAME +- coordinated_test_main +- SRCS +- "coordinated_test_main.cc" +- DEPS +- ::coordinated_test +- ::gtest +- gtest +- iree::base +- iree::base::tooling::flags +- TESTONLY +- PUBLIC +-) ++ iree_cc_library( ++ NAME ++ coordinated_test_main ++ SRCS ++ "coordinated_test_main.cc" ++ DEPS ++ ::coordinated_test ++ ::gtest ++ gtest ++ iree::base ++ iree::base::tooling::flags ++ TESTONLY ++ PUBLIC ++ ) + +-iree_cc_test( +- NAME +- coordinated_test_test +- SRCS +- "coordinated_test_test.cc" +- DEPS +- ::coordinated_test +- ::coordinated_test_main +- ::gtest +- LABELS +- "noriscv" +-) ++ iree_cc_test( ++ NAME ++ coordinated_test_test ++ SRCS ++ "coordinated_test_test.cc" ++ DEPS ++ ::coordinated_test ++ ::coordinated_test_main ++ ::gtest ++ LABELS ++ "noriscv" ++ ) ++endif() +-- +2.53.0 + diff --git a/benchmark_sources/generic_iree/iree/iree-patches/0005-apply-more-fixes-for-rv32-compilation.patch b/benchmark_sources/generic_iree/iree/iree-patches/0005-apply-more-fixes-for-rv32-compilation.patch new file mode 100644 index 0000000..8ffdfaf --- /dev/null +++ b/benchmark_sources/generic_iree/iree/iree-patches/0005-apply-more-fixes-for-rv32-compilation.patch @@ -0,0 +1,231 @@ +From b58ae9c5d1b3b12381f5ffc567c999318d485fd7 Mon Sep 17 00:00:00 2001 +From: Muhammed Efe Cetin +Date: Thu, 16 Jul 2026 16:21:54 +0200 +Subject: [PATCH 5/5] apply more fixes for rv32 compilation + +--- + riscv32_generic.cmake | 37 +++++++++++++++++++ + runtime/src/iree/async/CMakeLists.txt | 2 +- + .../async/platform/posix/cts/CMakeLists.txt | 2 +- + runtime/src/iree/async/socket.c | 6 ++- + runtime/src/iree/base/alignment.h | 12 +++--- + runtime/src/iree/base/string_view.c | 4 +- + runtime/src/iree/base/time.c | 7 ++++ + runtime/src/iree/hal/string_util.c | 5 ++- + runtime/src/iree/modules/vmvx/module.c | 6 +-- + 9 files changed, 65 insertions(+), 16 deletions(-) + create mode 100644 riscv32_generic.cmake + +diff --git a/riscv32_generic.cmake b/riscv32_generic.cmake +new file mode 100644 +index 0000000000..90c31f339b +--- /dev/null ++++ b/riscv32_generic.cmake +@@ -0,0 +1,37 @@ ++set(CMAKE_SYSTEM_PROCESSOR riscv32) ++ ++# Build the IREE runtime only ++set(IREE_BUILD_COMPILER OFF) ++ ++# Tell CMake to skip targeting a specific operating system ++set(CMAKE_SYSTEM_NAME Generic) ++ ++set(IREE_ENABLE_THREADING OFF) ++set(IREE_SYNCHRONIZATION_DISABLE_UNSAFE ON) ++set(IREE_HAL_DRIVER_DEFAULTS OFF) ++set(IREE_HAL_DRIVER_LOCAL_SYNC ON) ++set(IREE_HAL_EXECUTABLE_LOADER_DEFAULTS OFF) ++set(IREE_HAL_EXECUTABLE_LOADER_EMBEDDED_ELF ON) ++set(IREE_HAL_EXECUTABLE_LOADER_VMVX_MODULE ON) ++set(IREE_HAL_EXECUTABLE_PLUGIN_DEFAULTS OFF) ++set(IREE_HAL_EXECUTABLE_PLUGIN_EMBEDDED_ELF ON) ++set(IREE_BUILD_TESTS OFF) ++set(IREE_BUILD_SAMPLES OFF) ++# set(IREE_ENABLE_POSIX OFF CACHE BOOL "" FORCE) ++set(IREE_HAL_DRIVER_LOCAL_TASK OFF CACHE BOOL "" FORCE) ++# set(CMAKE_C_EXTENSIONS OFF CACHE BOOL "" FORCE) # runtime/src/iree/base/time.c:108:13: error: call to undeclared function 'clock_nanosleep' ++set(IREE_HAL_EXECUTABLE_LOADER_SYSTEM_LIBRARY OFF CACHE BOOL "" FORCE) ++set(IREE_HAL_EXECUTABLE_PLUGIN_SYSTEM_LIBRARY OFF CACHE BOOL "" FORCE) ++set(IREE_BUILD_BINDINGS_TFLITE ON) ++ ++set(TOOLCHAIN_PREFIX "riscv64-unknown-elf-") ++set(CMAKE_C_COMPILER ${TOOLCHAIN_PREFIX}gcc) ++set(CMAKE_CXX_COMPILER ${TOOLCHAIN_PREFIX}g++) ++ ++set(RISCV_FLAGS "-march=rv32imacv_zicsr_zifencei_zba_zbb_zbc_zbs -mabi=ilp32") ++ ++set(CMAKE_C_FLAGS "${RISCV_FLAGS} -DIREE_CSPRNG_USE_STUB -DIREE_DEVICE_SIZE_T=uint32_t -DPRIdsz=PRIu32 -DIREE_SOCKETS_ENABLE=0 -DIREE_PLATFORM_GENERIC=1 -DIREE_FILE_IO_ENABLE=0 -DIREE_TIME_NOW_FN=\"{ return 0; }\" -DIREE_WAIT_UNTIL_FN=my_wait_until -Wno-format" CACHE STRING "") ++set(CMAKE_CXX_FLAGS "${RISCV_FLAGS} -DIREE_CSPRNG_USE_STUB -DIREE_DEVICE_SIZE_T=uint32_t -DPRIdsz=PRIu32 -DIREE_SOCKETS_ENABLE=0 -DIREE_PLATFORM_GENERIC=1 -DIREE_FILE_IO_ENABLE=0 -DIREE_TIME_NOW_FN=\"{ return 0; }\" -DIREE_WAIT_UNTIL_FN=my_wait_until -Wno-format" CACHE STRING "") ++ ++ ++set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY) +\ No newline at end of file +diff --git a/runtime/src/iree/async/CMakeLists.txt b/runtime/src/iree/async/CMakeLists.txt +index 1211e7c415..95ec5fae45 100644 +--- a/runtime/src/iree/async/CMakeLists.txt ++++ b/runtime/src/iree/async/CMakeLists.txt +@@ -102,7 +102,7 @@ elseif(CMAKE_SYSTEM_NAME STREQUAL "Windows") + list(APPEND _platform_platform_deps iree::async::platform::iocp) + elseif(IREE_ARCH STREQUAL "wasm_32") + list(APPEND _platform_platform_deps iree::async::platform::js::proactor) +-else() ++elseif(NOT CMAKE_SYSTEM_NAME STREQUAL "Generic") + list(APPEND _platform_platform_deps iree::async::platform::posix) + endif() + iree_cc_library( +diff --git a/runtime/src/iree/async/platform/posix/cts/CMakeLists.txt b/runtime/src/iree/async/platform/posix/cts/CMakeLists.txt +index 80cb3b9296..7f8f032856 100644 +--- a/runtime/src/iree/async/platform/posix/cts/CMakeLists.txt ++++ b/runtime/src/iree/async/platform/posix/cts/CMakeLists.txt +@@ -19,7 +19,7 @@ iree_cc_library( + DEPS + iree::async + iree::async::cts::util::registry +- iree::async::platform::posix ++ # iree::async::platform::posix + TESTONLY + ALWAYSLINK + PUBLIC +diff --git a/runtime/src/iree/async/socket.c b/runtime/src/iree/async/socket.c +index 331402ecab..55d608ec59 100644 +--- a/runtime/src/iree/async/socket.c ++++ b/runtime/src/iree/async/socket.c +@@ -12,7 +12,7 @@ + // Platforms without socket support (generic bare-metal). + //===----------------------------------------------------------------------===// + +-#if defined(IREE_PLATFORM_GENERIC) || !defined(IREE_SOCKETS_ENABLE) ++#if defined(IREE_PLATFORM_GENERIC) || !IREE_SOCKETS_ENABLE + + IREE_API_EXPORT iree_status_t iree_async_socket_create( + iree_async_proactor_t* proactor, iree_async_socket_type_t type, +@@ -144,6 +144,8 @@ static inline iree_status_t iree_status_from_socket_error(void) { + // Socket lifecycle + //===----------------------------------------------------------------------===// + ++#if !defined(IREE_PLATFORM_GENERIC) || IREE_SOCKETS_ENABLE ++ + IREE_API_EXPORT iree_status_t iree_async_socket_create( + iree_async_proactor_t* proactor, iree_async_socket_type_t type, + iree_async_socket_options_t options, iree_async_socket_t** out_socket) { +@@ -192,6 +194,8 @@ IREE_API_EXPORT void iree_async_socket_release(iree_async_socket_t* socket) { + } + } + ++#endif ++ + //===----------------------------------------------------------------------===// + // Socket operations + //===----------------------------------------------------------------------===// +diff --git a/runtime/src/iree/base/alignment.h b/runtime/src/iree/base/alignment.h +index 49a8798604..a396daa8af 100644 +--- a/runtime/src/iree/base/alignment.h ++++ b/runtime/src/iree/base/alignment.h +@@ -132,9 +132,9 @@ static inline iree_host_size_t iree_host_size_next_power_of_two( + value |= value >> 4; + value |= value >> 8; + value |= value >> 16; +- if (sizeof(iree_host_size_t) == 8) { +- value |= value >> 32; +- } ++#if defined(IREE_PTR_SIZE_64) ++ value |= value >> 32; ++#endif // IREE_PTR_SIZE_64 + return value + 1; + } + +@@ -180,9 +180,9 @@ static inline iree_device_size_t iree_device_size_next_power_of_two( + value |= value >> 4; + value |= value >> 8; + value |= value >> 16; +- if (sizeof(iree_device_size_t) == 8) { +- value |= value >> 32; +- } ++#if defined(IREE_PTR_SIZE_64) ++ value |= value >> 32; ++#endif // IREE_PTR_SIZE_64 + return value + 1; + } + +diff --git a/runtime/src/iree/base/string_view.c b/runtime/src/iree/base/string_view.c +index a01527f524..b9f5950809 100644 +--- a/runtime/src/iree/base/string_view.c ++++ b/runtime/src/iree/base/string_view.c +@@ -182,14 +182,14 @@ iree_string_view_trim(iree_string_view_t value) { + iree_host_size_t start = 0; + iree_host_size_t end = value.size - 1; + while (value.size > 0 && start <= end) { +- if (isspace(value.data[start])) { ++ if (isspace((unsigned char)value.data[start])) { + start++; + } else { + break; + } + } + while (end > start) { +- if (isspace(value.data[end])) { ++ if (isspace((unsigned char)value.data[end])) { + --end; + } else { + break; +diff --git a/runtime/src/iree/base/time.c b/runtime/src/iree/base/time.c +index 195c1400b4..8b83ac824a 100644 +--- a/runtime/src/iree/base/time.c ++++ b/runtime/src/iree/base/time.c +@@ -15,6 +15,13 @@ + #include "iree/base/target_platform.h" + #include "iree/base/tracing.h" + ++#if defined(IREE_PLATFORM_GENERIC) ++static bool my_wait_until(uint64_t deadline_ns) { ++ (void)deadline_ns; ++ return true; ++} ++#endif ++ + IREE_API_EXPORT iree_time_t iree_time_now(void) { + return iree_platform_time_now(); + } +diff --git a/runtime/src/iree/hal/string_util.c b/runtime/src/iree/hal/string_util.c +index 7a7b72f50c..fb74f5d6ce 100644 +--- a/runtime/src/iree/hal/string_util.c ++++ b/runtime/src/iree/hal/string_util.c +@@ -245,7 +245,7 @@ IREE_API_EXPORT iree_status_t iree_hal_format_element_type( + prefix = "*"; + break; + } +- int n = iree_snprintf(buffer, buffer_capacity, "%s%d", prefix, bit_count); ++ int n = iree_snprintf(buffer, buffer_capacity, "%s%" PRId32, prefix, bit_count); + if (n < 0) { + return iree_make_status(IREE_STATUS_FAILED_PRECONDITION, "snprintf failed"); + } +@@ -676,7 +676,8 @@ IREE_API_EXPORT iree_status_t iree_hal_parse_buffer_elements( + iree_host_size_t token_start = IREE_STRING_VIEW_NPOS; + while (src_i < data_str.size) { + char c = data_str.data[src_i++]; +- bool is_separator = isspace(c) || c == ',' || c == '[' || c == ']'; ++ bool is_separator = ++ isspace((unsigned char)c) || c == ',' || c == '[' || c == ']'; + if (token_start == IREE_STRING_VIEW_NPOS) { + if (!is_separator) { + token_start = src_i - 1; +diff --git a/runtime/src/iree/modules/vmvx/module.c b/runtime/src/iree/modules/vmvx/module.c +index 423276e378..dd37c04625 100644 +--- a/runtime/src/iree/modules/vmvx/module.c ++++ b/runtime/src/iree/modules/vmvx/module.c +@@ -123,9 +123,9 @@ static iree_host_size_t iree_vmvx_2d_length_bound( + + static iree_host_size_t iree_vmvx_cast_host_size(int64_t value, + uint64_t* overflow) { +- if (sizeof(iree_host_size_t) == 4) { +- *overflow |= (uint64_t)value & 0xffffffff00000000ul; +- } ++#if defined(IREE_PTR_SIZE_32) ++ *overflow |= (uint64_t)value & 0xffffffff00000000ul; ++#endif // IREE_PTR_SIZE_32 + return (iree_host_size_t)value; + } + +-- +2.53.0 + diff --git a/benchmark_sources/generic_iree/iree/iree-source b/benchmark_sources/generic_iree/iree/iree-source index b58ae9c..f2bcea1 160000 --- a/benchmark_sources/generic_iree/iree/iree-source +++ b/benchmark_sources/generic_iree/iree/iree-source @@ -1 +1 @@ -Subproject commit b58ae9c5d1b3b12381f5ffc567c999318d485fd7 +Subproject commit f2bcea10ee5782edc886119044a23acb79e6fba6 From 9dbf4f447e37b47f334e8ea76e99533c7e5c45d9 Mon Sep 17 00:00:00 2001 From: Muhammed Efe Cetin Date: Mon, 20 Jul 2026 17:25:45 +0200 Subject: [PATCH 07/12] toolchain: add an option for compiling iree-compiler --- .gitignore | 1 + .gitmodules | 8 +++---- .../MLPerfTiny/CMake/add_test.cmake | 3 ++- benchmark_sources/framework/vicuna2_bsp | 2 +- .../generic_iree/CMake/add_test.cmake | 3 ++- benchmark_sources/generic_iree/CMakeLists.txt | 1 - .../generic_iree/iree/CMakeLists.txt | 5 ++-- toolchain/CMake/toolchain_build.cmake | 23 +++++++++++++++++++ 8 files changed, 36 insertions(+), 10 deletions(-) diff --git a/.gitignore b/.gitignore index 68d4aec..7c24cb3 100644 --- a/.gitignore +++ b/.gitignore @@ -9,6 +9,7 @@ toolchain/GCC/rv32im_zve32x/* toolchain/llvm/llvm_22_1_8/* toolchain/spike/* toolchain/etiss_base/etiss_rvv/* +toolchain/iree_compiler/* #Simulator Specific Ignores diff --git a/.gitmodules b/.gitmodules index 61a0c96..3cf7863 100644 --- a/.gitmodules +++ b/.gitmodules @@ -46,16 +46,16 @@ update = none [submodule "toolchain/etiss_base/etiss"] path = toolchain/etiss_base/etiss - url = git@github.com:danielschloms/etiss.git + url = https://github.com/danielschloms/etiss.git [submodule "toolchain/etiss_base/M2-ISA-R"] path = toolchain/etiss_base/M2-ISA-R - url = git@github.com:tum-ei-eda/M2-ISA-R.git + url = https://github.com/tum-ei-eda/M2-ISA-R.git [submodule "toolchain/etiss_base/etiss_arch_riscv"] path = toolchain/etiss_base/etiss_arch_riscv - url = git@github.com:danielschloms/etiss_arch_riscv.git + url = https://github.com/danielschloms/etiss_arch_riscv.git [submodule "toolchain/etiss_base/etiss_rvv"] path = toolchain/etiss_base/etiss_rvv - url = git@github.com:danielschloms/etiss.git + url = https://github.com/danielschloms/etiss.git [submodule "benchmark_sources/embench_iot/embench-iot"] path = benchmark_sources/embench_iot/embench-iot url = https://github.com/embench/embench-iot.git diff --git a/benchmark_sources/MLPerfTiny/CMake/add_test.cmake b/benchmark_sources/MLPerfTiny/CMake/add_test.cmake index f8d4a30..2b858e2 100644 --- a/benchmark_sources/MLPerfTiny/CMake/add_test.cmake +++ b/benchmark_sources/MLPerfTiny/CMake/add_test.cmake @@ -327,7 +327,7 @@ macro(add_Benchmark_IREE_Spike TEST SOURCE_DIR TEST_BUILD_DIR) ) # Locate IREE compiler - find_program(IREE_COMPILE_TOOL iree-compile HINTS ${IREE_COMPILER_BIN_DIR} REQUIRED) + find_program(IREE_COMPILE_TOOL iree-compile HINTS ${IREE_HOST_BIN_DIR} REQUIRED) find_program(XXD_TOOL xxd REQUIRED) # 3. Compile MLIR to VMFB @@ -368,6 +368,7 @@ macro(add_Benchmark_IREE_Spike TEST SOURCE_DIR TEST_BUILD_DIR) --iree-llvmcpu-target-triple=riscv32-unknown-elf --iree-llvmcpu-target-abi=${RISCV_ABI} --iree-llvmcpu-target-cpu-features=${IREE_LLVM_FEATURES} + --iree-consteval-jit-target-device=local-sync -o ${TEST_VMFB} DEPENDS ${TEST_MLIR_SOURCE} COMMENT "Compiling ${TEST}_model.mlir -> ${TEST}_model.vmfb" diff --git a/benchmark_sources/framework/vicuna2_bsp b/benchmark_sources/framework/vicuna2_bsp index 52faaea..3c6b50a 160000 --- a/benchmark_sources/framework/vicuna2_bsp +++ b/benchmark_sources/framework/vicuna2_bsp @@ -1 +1 @@ -Subproject commit 52faaea481d5365e8c220664bab52b9e7cf6b66f +Subproject commit 3c6b50af92d9228c168bc577e97f33a845638871 diff --git a/benchmark_sources/generic_iree/CMake/add_test.cmake b/benchmark_sources/generic_iree/CMake/add_test.cmake index 10436f9..3c6d62b 100644 --- a/benchmark_sources/generic_iree/CMake/add_test.cmake +++ b/benchmark_sources/generic_iree/CMake/add_test.cmake @@ -10,7 +10,7 @@ macro(add_IreeBenchmark_Spike TEST_NAME TEST_DIR) set(TEST_MAIN_SOURCE ${CMAKE_CURRENT_SOURCE_DIR}/../framework/main.cpp) # Find necessary tools - find_program(IREE_COMPILE_TOOL iree-compile HINTS ${IREE_COMPILER_BIN_DIR} REQUIRED) + find_program(IREE_COMPILE_TOOL iree-compile HINTS ${IREE_HOST_BIN_DIR} REQUIRED) find_program(XXD_TOOL xxd REQUIRED) # Generate IREE LLVM features based on RISCV_ARCH @@ -49,6 +49,7 @@ macro(add_IreeBenchmark_Spike TEST_NAME TEST_DIR) --iree-llvmcpu-target-triple=riscv32-unknown-elf --iree-llvmcpu-target-abi=${RISCV_ABI} --iree-llvmcpu-target-cpu-features=${IREE_LLVM_FEATURES} + --iree-consteval-jit-target-device=local-sync -o ${TEST_VMFB} DEPENDS ${TEST_MLIR_SOURCE} COMMENT "Compiling ${TEST_NAME}.mlir -> ${TEST_NAME}.vmfb (${RISCV_ARCH})" diff --git a/benchmark_sources/generic_iree/CMakeLists.txt b/benchmark_sources/generic_iree/CMakeLists.txt index a09705e..d2f75ff 100644 --- a/benchmark_sources/generic_iree/CMakeLists.txt +++ b/benchmark_sources/generic_iree/CMakeLists.txt @@ -20,7 +20,6 @@ message(STATUS "Baremetal infrastructure dir: ${GENERIC_IREE_BAREMETAL_DIR}") build_spike() # Set IREE compiler tools directory (where iree-compile lives) -set(IREE_COMPILER_BIN_DIR "/home/efectn/iree-prod-test/iree-build-compiler/tools") # Include IREE test macro include(CMake/add_test.cmake) diff --git a/benchmark_sources/generic_iree/iree/CMakeLists.txt b/benchmark_sources/generic_iree/iree/CMakeLists.txt index f968ecb..9e464b9 100644 --- a/benchmark_sources/generic_iree/iree/CMakeLists.txt +++ b/benchmark_sources/generic_iree/iree/CMakeLists.txt @@ -31,8 +31,9 @@ set(IREE_HAL_EXECUTABLE_PLUGIN_DEFAULTS OFF CACHE BOOL "" FORCE) set(IREE_HAL_EXECUTABLE_PLUGIN_EMBEDDED_ELF ON CACHE BOOL "" FORCE) # Fetch compiler from host -# TODO: add an optin for compile the compiler as well as runtime -set(IREE_HOST_BIN_DIR "/home/efectn/iree-prod-test/iree-build-compiler/tools" CACHE STRING "" FORCE) +# Include toolchain_build to get build_iree_compiler macro +include(${TOOLCHAIN_TOP}/CMake/toolchain_build.cmake) +build_iree_compiler() # Bare-metal platform defines add_compile_definitions( diff --git a/toolchain/CMake/toolchain_build.cmake b/toolchain/CMake/toolchain_build.cmake index 9b79a16..e0114da 100644 --- a/toolchain/CMake/toolchain_build.cmake +++ b/toolchain/CMake/toolchain_build.cmake @@ -218,3 +218,26 @@ macro(build_etiss) WORKING_DIRECTORY ${TOOLCHAIN_TOP}/etiss_base/etiss_rvv/build) endif() endmacro() + +macro(build_iree_compiler) + if(NOT IREE_HOST_BIN_DIR) + set(IREE_HOST_BIN_DIR "${TOOLCHAIN_TOP}/iree_compiler/install/bin" CACHE PATH "Path to IREE compiler binaries" FORCE) + endif() + + if(NOT EXISTS "${IREE_HOST_BIN_DIR}/iree-compile") + message(STATUS "IREE Compiler not found at ${IREE_HOST_BIN_DIR}, building natively from submodule") + + # Configure the IREE host compiler + execute_process(COMMAND cmake -G Ninja -B ${TOOLCHAIN_TOP}/iree_compiler/build -S ${TOOLCHAIN_TOP}/../benchmark_sources/generic_iree/iree/iree-source -DCMAKE_BUILD_TYPE=Release -DIREE_BUILD_TESTS=OFF -DIREE_BUILD_SAMPLES=OFF -DIREE_HAL_DRIVER_LOCAL_TASK=OFF -DCMAKE_INSTALL_PREFIX=${TOOLCHAIN_TOP}/iree_compiler/install) + + # Build and install the IREE host compiler + # Using parallel build automatically with Ninja + execute_process(COMMAND cmake --build ${TOOLCHAIN_TOP}/iree_compiler/build --target install) + + if(NOT EXISTS "${IREE_HOST_BIN_DIR}/iree-compile") + message(FATAL_ERROR "Failed to build IREE compiler natively. Check the CMake logs.") + endif() + else() + message(STATUS "IREE Compiler found in ${IREE_HOST_BIN_DIR}") + endif() +endmacro() From 94d3b89dfd1c49186a81930bf190b188a5d0c6f8 Mon Sep 17 00:00:00 2001 From: Muhammed Efe Cetin Date: Wed, 22 Jul 2026 14:29:49 +0200 Subject: [PATCH 08/12] [BROKEN] benchmark_sources/generic_iree,mlperftiny: add verilator support to IREE tests --- .../MLPerfTiny/CMake/add_test.cmake | 180 +++++++++++++++++- benchmark_sources/MLPerfTiny/CMakeLists.txt | 3 +- .../framework/spike/simulator.hpp | 18 +- .../framework/verilator/simulator.hpp | 13 +- .../generic_iree/CMake/add_test.cmake | 150 ++++++++++++++- benchmark_sources/generic_iree/CMakeLists.txt | 1 + .../generic_iree/baremetal/baremetal_stubs.c | 4 - 7 files changed, 349 insertions(+), 20 deletions(-) diff --git a/benchmark_sources/MLPerfTiny/CMake/add_test.cmake b/benchmark_sources/MLPerfTiny/CMake/add_test.cmake index 2b858e2..4092a6d 100644 --- a/benchmark_sources/MLPerfTiny/CMake/add_test.cmake +++ b/benchmark_sources/MLPerfTiny/CMake/add_test.cmake @@ -16,7 +16,8 @@ macro(add_Benchmark TEST SOURCE_DIR TEST_BUILD_DIR) target_include_directories(${TEST_NAME} PRIVATE ${SOURCE_DIR} - ${SOURCE_DIR}/model_data + ${SOURCE_DIR}/${TEST}_data + ${SOURCE_DIR}/tflite ${FRAMEWORK_TOP}/ ) @@ -295,6 +296,183 @@ macro(add_benchmark_etiss TEST SOURCE_DIR) WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}) endmacro() +macro(add_Benchmark_IREE_Verilator TEST SOURCE_DIR TEST_BUILD_DIR) + # Check if verilator model is built + if(NOT EXISTS "${VERILATOR_MODEL_DIR}/build/verilated_model") + message(FATAL_ERROR "Verilator Model executable not present! Build it and try again.") + endif() + + set(TEST_NAME ${TEST}_IREE_Verilator) + set(TEST_MLIR_SOURCE ${SOURCE_DIR}/iree/${TEST}_model.mlir) + set(TEST_VMFB ${CMAKE_CURRENT_BINARY_DIR}/${TEST_NAME}.vmfb) + set(TEST_C_HEADER ${CMAKE_CURRENT_BINARY_DIR}/${TEST_NAME}.c) + set(PREGENERATED_MLIR ${SOURCE_DIR}/iree/${TEST}_model.mlir) + + if(NOT EXISTS "${PREGENERATED_MLIR}") + message(FATAL_ERROR "MLIR model not found at ${PREGENERATED_MLIR}!") + endif() + + message(STATUS "Found MLIR model at ${PREGENERATED_MLIR}, copying to build directory.") + + add_custom_command( + OUTPUT ${TEST_MLIR_SOURCE} + COMMAND ${CMAKE_COMMAND} -E copy ${PREGENERATED_MLIR} ${TEST_MLIR_SOURCE} + DEPENDS ${PREGENERATED_MLIR} + COMMENT "Copying MLIR model to build directory" + VERBATIM + ) + + find_program(IREE_COMPILE_TOOL iree-compile HINTS ${IREE_HOST_BIN_DIR} REQUIRED) + find_program(XXD_TOOL xxd REQUIRED) + + # Compile MLIR to VMFB + string(REGEX MATCH "m" HAS_M ${RISCV_ARCH}) + string(REGEX MATCH "f" HAS_F ${RISCV_ARCH}) + string(REGEX MATCH "zve32x" HAS_ZVE32X ${RISCV_ARCH}) + string(REGEX MATCH "zve32f" HAS_ZVE32F ${RISCV_ARCH}) + + set(IREE_LLVM_FEATURES "") + if(HAS_M) + set(IREE_LLVM_FEATURES "${IREE_LLVM_FEATURES},+m") + endif() + if(HAS_F) + set(IREE_LLVM_FEATURES "${IREE_LLVM_FEATURES},+f") + endif() + if(HAS_ZVE32X) + set(IREE_LLVM_FEATURES "${IREE_LLVM_FEATURES},+zve32x") + endif() + if(HAS_ZVE32F) + set(IREE_LLVM_FEATURES "${IREE_LLVM_FEATURES},+zve32f") + endif() + if(HAS_ZVE32X OR HAS_ZVE32F) + set(IREE_LLVM_FEATURES "${IREE_LLVM_FEATURES},+zvl${VREG_W}b") + endif() + + string(REGEX REPLACE "^," "" IREE_LLVM_FEATURES "${IREE_LLVM_FEATURES}") + + add_custom_command( + OUTPUT ${TEST_VMFB} + COMMAND ${IREE_COMPILE_TOOL} + ${TEST_MLIR_SOURCE} + --iree-hal-target-device=local + --iree-hal-local-target-device-backends=llvm-cpu + --iree-llvmcpu-target-triple=riscv32-unknown-elf + --iree-llvmcpu-target-abi=${RISCV_ABI} + "--iree-llvmcpu-target-cpu-features=${IREE_LLVM_FEATURES}" + # --iree-consteval-jit-target-device=local-sync + -o ${TEST_VMFB} + DEPENDS ${TEST_MLIR_SOURCE} + COMMENT "Compiling ${TEST}_model.mlir -> ${TEST}_model.vmfb" + VERBATIM + ) + + add_custom_command( + OUTPUT ${TEST_C_HEADER} + COMMAND ${XXD_TOOL} -i ${TEST_VMFB} ${TEST_C_HEADER} + COMMAND sed -i "s/_.*_${TEST_NAME}_vmfb/iree_model_vmfb/g" ${TEST_C_HEADER} + COMMAND sed -i "s/_.*_${TEST_NAME}_vmfb_len/iree_model_vmfb_len/g" ${TEST_C_HEADER} + DEPENDS ${TEST_VMFB} + COMMENT "Generating ${TEST_NAME}.c from ${TEST_NAME}.vmfb" + VERBATIM + ) + + add_executable(${TEST_NAME}) + + target_include_directories(${TEST_NAME} PRIVATE + ${SOURCE_DIR} + ${SOURCE_DIR}/iree + ${SOURCE_DIR}/${TEST}_data + ${FRAMEWORK_TOP}/ + ${CMAKE_CURRENT_BINARY_DIR} + ) + + set(IREE_WRAPPER_SOURCE ${FRAMEWORK_TOP}/main.cpp) + + target_sources(${TEST_NAME} PUBLIC + ${IREE_WRAPPER_SOURCE} + ${TEST_C_HEADER} + ${CMAKE_CURRENT_SOURCE_DIR}/../generic_iree/baremetal/baremetal_stubs.c + ${SOURCE_DIR}/${TEST}_data/${TEST}_input_data.cc + ${SOURCE_DIR}/${TEST}_data/${TEST}_model_settings.cc + ${SOURCE_DIR}/${TEST}_data/${TEST}_output_data_ref.cc + ) + + set_source_files_properties(${IREE_WRAPPER_SOURCE} PROPERTIES + OBJECT_DEPENDS "${TEST_C_HEADER};${TEST_VMFB}" + ) + + target_compile_definitions(${TEST_NAME} PRIVATE + IREE_RUNTIME_ENABLED=1 + IREE_PLATFORM_GENERIC=1 + IREE_FILE_IO_ENABLE=0 + IREE_DEVICE_SIZE_T=uint32_t + PRIdsz=PRIu32 + IREE_SOCKETS_ENABLE=0 + "IREE_TIME_NOW_FN={ return 0\\; }" + ) + + target_compile_features(${TEST_NAME} PRIVATE cxx_std_14) + target_compile_options(${TEST_NAME} PRIVATE -fno-builtin) + + # Set Linker + target_link_options(${TEST_NAME} PRIVATE "-nostartfiles") + if (${COMPILER} STREQUAL "LLVM") + target_compile_options(${TEST_NAME} PRIVATE "-fno-use-cxa-atexit") + endif() + + # We use vicuna_bsp linker script for verilator + target_link_options(${TEST_NAME} PRIVATE "-T${VICUNA_BSP_TOP}/lld_link.ld") + + # Link IREE runtime and sim libraries + target_link_libraries(${TEST_NAME} PRIVATE + bsp_Vicuna + UART_Vicuna + sim_Verilator + -Wl,--start-group + iree_runtime_unified + iree_base_base + flatcc_parsing + flatcc_runtime + -Wl,--end-group + m + ) + + # Add objcopy and srec commands for Verilator + add_custom_command(TARGET ${TEST_NAME} + POST_BUILD + COMMAND ${CMAKE_OBJCOPY} -O binary ${TEST_NAME}.elf ${TEST_NAME}.bin + COMMAND srec_cat ${TEST_NAME}.bin -binary -offset 0x0000 -byte-swap 4 -o ${TEST_NAME}.vmem -vmem + COMMAND rm -f prog_${TEST_NAME}.txt + COMMAND echo -n "${TEST_BUILD_DIR}/${TEST_NAME}.vmem ${TEST_BUILD_DIR}/${TEST_NAME}_unused.txt " > prog_${TEST_NAME}.txt + COMMAND readelf -s ${TEST_NAME}.elf | sed '2,13 s/ //1' | grep vref_start | cut -d " " -f 6 | tr [=["\n"]=] " " >> prog_${TEST_NAME}.txt + COMMAND readelf -s ${TEST_NAME}.elf | sed '2,13 s/ //1' | grep vref_end | cut -d " " -f 6 | tr [=["\n"]=] " " >> prog_${TEST_NAME}.txt + COMMAND echo -n "${TEST_BUILD_DIR}/${TEST_NAME}_vicuna_sim_out.txt " >> prog_${TEST_NAME}.txt + COMMAND readelf -s ${TEST_NAME}.elf | sed '2,13 s/ //1' | grep vdata_start | cut -d " " -f 6 | tr [=["\n"]=] " " >> prog_${TEST_NAME}.txt + COMMAND readelf -s ${TEST_NAME}.elf | sed '2,13 s/ //1' | grep vdata_end | cut -d " " -f 6 | tr [=["\n"]=] " " >> prog_${TEST_NAME}.txt + COMMAND ${CMAKE_OBJDUMP} -D ${TEST_NAME}.elf > ${TEST_NAME}_dump.txt + ) + + set(INST_TRACE_ARGS "${TEST_BUILD_DIR}/inst_trace.txt") + + if(TRACE) + message("${TEST_BUILD_DIR}/last_test_sig.vcd") + set(MEM_TRACE_ARGS "${TEST_BUILD_DIR}/last_test_mem.csv") + set(VCD_TRACE_ARGS "${TEST_BUILD_DIR}last_test_sig.vcd") + else() + set(MEM_TRACE_ARGS "") + set(VCD_TRACE_ARGS "") + endif() + + # Add Test + add_test(NAME ${TEST_NAME} + COMMAND ./${VERILATOR_MODEL_DIR}/build/verilated_model ${TEST_BUILD_DIR}/prog_${TEST_NAME}.txt ${MEM_W} 4194304 ${MEM_LATENCY} 1 toycar ${VREG_W} 0 ${VCD_TRACE_ARGS} + WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/../..) + + set_tests_properties(${TEST_NAME} PROPERTIES TIMEOUT 1000) + + message(STATUS "Successfully added ${TEST_NAME}") +endmacro() + macro(add_Benchmark_IREE_Spike TEST SOURCE_DIR TEST_BUILD_DIR) #Build spike if it isnt present build_spike() diff --git a/benchmark_sources/MLPerfTiny/CMakeLists.txt b/benchmark_sources/MLPerfTiny/CMakeLists.txt index 60f1cc7..aee39b1 100644 --- a/benchmark_sources/MLPerfTiny/CMakeLists.txt +++ b/benchmark_sources/MLPerfTiny/CMakeLists.txt @@ -59,10 +59,11 @@ elseif(${FRAMEWORK} STREQUAL "IREE") # Use generic_iree's IREE build instead of a duplicate folder add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/../generic_iree/iree ${CMAKE_BINARY_DIR}/iree) - # IREE runtime hedefinün bulunduğunu kontrol et + # Check if IREE runtime has been found if(TARGET iree::runtime::unified) message(STATUS "Building MLPerfTiny with IREE backend") add_Benchmark_IREE_Spike(toycar_int8 ${CMAKE_CURRENT_SOURCE_DIR}/Int8/toycar/ ${BINARY_DIR}) + add_Benchmark_IREE_Verilator(toycar_int8 ${CMAKE_CURRENT_SOURCE_DIR}/Int8/toycar/ ${BINARY_DIR}) else() message(WARNING "IREE runtime target not available, skipping IREE benchmarks") endif() diff --git a/benchmark_sources/framework/spike/simulator.hpp b/benchmark_sources/framework/spike/simulator.hpp index d0e3fda..a46297c 100644 --- a/benchmark_sources/framework/spike/simulator.hpp +++ b/benchmark_sources/framework/spike/simulator.hpp @@ -5,6 +5,17 @@ #include + +extern "C" { +void _exit(int status) { + uint32_t tohost_val = (status << 1) | 1; + __asm__ volatile("mv t0, %0" : : "r"(tohost_val)); + __asm__ volatile("la t1, tohost"); + __asm__ volatile("auipc t2, 0x0"); + __asm__ volatile("sw t0, 0(t1)"); + __asm__ volatile("jalr x0, 4(t2)"); +} +} class Simulator { private: @@ -31,12 +42,7 @@ class Simulator //Termination success or failure function for this simulator int terminate(int return_code) { - uint32_t tohost_val = (return_code << 1) | 1; - __asm__ volatile("mv t0, %0" : : "r"(tohost_val)); - __asm__ volatile("la t1, tohost"); - __asm__ volatile("auipc t2, 0x0"); - __asm__ volatile("sw t0, 0(t1)"); - __asm__ volatile("jalr x0, 4(t2)"); + _exit(return_code); return return_code; } diff --git a/benchmark_sources/framework/verilator/simulator.hpp b/benchmark_sources/framework/verilator/simulator.hpp index 512e787..9b9e844 100644 --- a/benchmark_sources/framework/verilator/simulator.hpp +++ b/benchmark_sources/framework/verilator/simulator.hpp @@ -5,6 +5,11 @@ #include extern "C" { +void _exit(int status) { + volatile char* exit_port = (volatile char*)0x00000408; + *exit_port = (char)status; +} + void __attribute__((noinline)) address_match_start() { volatile int a = 1; } void __attribute__((noinline)) address_match_end() { volatile int a = 1; } } @@ -40,13 +45,9 @@ class Simulator { }; // Termination success or failure function for this simulator - void terminate(int code) // TODO: Int return codes + void terminate(int code) { - if (code == 0) { - *terminate_addr = 0x0; // Write 0x0 to signal success - } else { - *terminate_addr = 0xf; // Write 0xF to signal success - } + *terminate_addr = code; // Write return code to termination address }; // Cleanup any allocatations diff --git a/benchmark_sources/generic_iree/CMake/add_test.cmake b/benchmark_sources/generic_iree/CMake/add_test.cmake index 3c6d62b..053b511 100644 --- a/benchmark_sources/generic_iree/CMake/add_test.cmake +++ b/benchmark_sources/generic_iree/CMake/add_test.cmake @@ -76,8 +76,6 @@ macro(add_IreeBenchmark_Spike TEST_NAME TEST_DIR) ${CMAKE_CURRENT_SOURCE_DIR}/iree/iree-source/runtime/src ${CMAKE_CURRENT_SOURCE_DIR}/iree/iree-build-rv32-runtime/runtime/src ${CMAKE_CURRENT_SOURCE_DIR}/iree/iree-source/third_party/flatcc/include - ${CMAKE_CURRENT_SOURCE_DIR}/../framework - ${CMAKE_CURRENT_SOURCE_DIR}/../framework/spike ) target_compile_definitions(${TEST_TARGET} PRIVATE @@ -133,3 +131,151 @@ macro(add_IreeBenchmark_Spike TEST_NAME TEST_DIR) message(STATUS "Added IREE test: ${TEST_TARGET}") endmacro() + +macro(add_IreeBenchmark_Verilator TEST_NAME TEST_DIR) + # Check if verilator model is built + if(NOT EXISTS "${VERILATOR_MODEL_DIR}/build/verilated_model") + message(FATAL_ERROR "Verilator Model executable not present! Build it and try again.") + endif() + + set(TEST_TARGET ${TEST_NAME}_IREE_Verilator) + set(TEST_MLIR_SOURCE ${TEST_DIR}/${TEST_NAME}.mlir) + set(TEST_VMFB ${CMAKE_CURRENT_BINARY_DIR}/${TEST_NAME}.vmfb) + set(TEST_C_HEADER ${CMAKE_CURRENT_BINARY_DIR}/${TEST_NAME}.h) + set(TEST_MAIN_SOURCE ${CMAKE_CURRENT_SOURCE_DIR}/../framework/main.cpp) + + # Find necessary tools + find_program(IREE_COMPILE_TOOL iree-compile HINTS ${IREE_HOST_BIN_DIR} REQUIRED) + find_program(XXD_TOOL xxd REQUIRED) + + # Generate IREE LLVM features based on RISCV_ARCH + set(IREE_LLVM_FEATURES "") + string(REGEX MATCH "m" HAS_M ${RISCV_ARCH}) + string(REGEX MATCH "f" HAS_F ${RISCV_ARCH}) + string(REGEX MATCH "zve32x" HAS_ZVE32X ${RISCV_ARCH}) + string(REGEX MATCH "zve32f" HAS_ZVE32F ${RISCV_ARCH}) + + if(HAS_M) + set(IREE_LLVM_FEATURES "${IREE_LLVM_FEATURES},+m") + endif() + if(HAS_F) + set(IREE_LLVM_FEATURES "${IREE_LLVM_FEATURES},+f") + endif() + if(HAS_ZVE32X) + set(IREE_LLVM_FEATURES "${IREE_LLVM_FEATURES},+zve32x") + endif() + if(HAS_ZVE32F) + set(IREE_LLVM_FEATURES "${IREE_LLVM_FEATURES},+zve32f") + endif() + + if(HAS_ZVE32X OR HAS_ZVE32F) + set(IREE_LLVM_FEATURES "${IREE_LLVM_FEATURES},+zvl${VREG_W}b") + endif() + + string(REGEX REPLACE "^," "" IREE_LLVM_FEATURES "${IREE_LLVM_FEATURES}") + + # Compile MLIR -> VMFB + add_custom_command( + OUTPUT ${TEST_VMFB} + COMMAND ${IREE_COMPILE_TOOL} + ${TEST_MLIR_SOURCE} + --iree-hal-target-device=local + --iree-hal-local-target-device-backends=llvm-cpu + --iree-llvmcpu-target-triple=riscv32-unknown-elf + --iree-llvmcpu-target-abi=${RISCV_ABI} + --iree-llvmcpu-target-cpu-features=${IREE_LLVM_FEATURES} + --iree-consteval-jit-target-device=local-sync + -o ${TEST_VMFB} + DEPENDS ${TEST_MLIR_SOURCE} + COMMENT "Compiling ${TEST_NAME}.mlir -> ${TEST_NAME}.vmfb (${RISCV_ARCH})" + VERBATIM + ) + + # Generate C header from VMFB + add_custom_command( + OUTPUT ${TEST_C_HEADER} + COMMAND ${XXD_TOOL} -i ${TEST_VMFB} ${TEST_C_HEADER} + COMMAND sed -i "s/_.*_${TEST_NAME}_vmfb/${TEST_NAME}_vmfb/g" ${TEST_C_HEADER} + COMMAND sed -i "s/_.*_${TEST_NAME}_vmfb_len/${TEST_NAME}_vmfb_len/g" ${TEST_C_HEADER} + DEPENDS ${TEST_VMFB} + COMMENT "Generating ${TEST_NAME}.h from ${TEST_NAME}.vmfb" + VERBATIM + ) + + # Create executable + add_executable(${TEST_TARGET}) + + target_include_directories(${TEST_TARGET} PRIVATE + ${TEST_DIR} + ${CMAKE_CURRENT_BINARY_DIR} + ${CMAKE_CURRENT_SOURCE_DIR}/iree/iree-source/runtime/src + ${CMAKE_CURRENT_SOURCE_DIR}/iree/iree-build-rv32-runtime/runtime/src + ${CMAKE_CURRENT_SOURCE_DIR}/iree/iree-source/third_party/flatcc/include + ${CMAKE_CURRENT_SOURCE_DIR}/../framework + ) + + target_compile_definitions(${TEST_TARGET} PRIVATE + IREE_PLATFORM_GENERIC=1 + IREE_FILE_IO_ENABLE=0 + IREE_DEVICE_SIZE_T=uint32_t + PRIdsz=PRIu32 + IREE_SOCKETS_ENABLE=0 + "IREE_TIME_NOW_FN={ return 0\\; }" + ) + + target_compile_options(${TEST_TARGET} PRIVATE -fno-builtin) + target_compile_features(${TEST_TARGET} PRIVATE cxx_std_14) + + target_sources(${TEST_TARGET} PUBLIC + ${TEST_MAIN_SOURCE} + ${CMAKE_CURRENT_SOURCE_DIR}/baremetal/baremetal_stubs.c + ) + + set_source_files_properties(${TEST_MAIN_SOURCE} PROPERTIES + OBJECT_DEPENDS "${TEST_C_HEADER};${TEST_VMFB}" + ) + + target_link_options(${TEST_TARGET} PRIVATE "-nostartfiles") + if (${COMPILER} STREQUAL "LLVM") + target_compile_options(${TEST_TARGET} PRIVATE "-fno-use-cxa-atexit") + endif() + + target_link_options(${TEST_TARGET} PRIVATE "-T${VICUNA_BSP_TOP}/lld_link.ld") + + target_link_libraries(${TEST_TARGET} PRIVATE + bsp_Vicuna + UART_Vicuna + sim_Verilator + -Wl,--start-group + iree_runtime_unified + iree_base_base + flatcc_parsing + flatcc_runtime + -Wl,--end-group + m + ) + + add_custom_command(TARGET ${TEST_TARGET} + POST_BUILD + COMMAND ${CMAKE_OBJCOPY} -O binary ${TEST_TARGET}.elf ${TEST_TARGET}.bin + COMMAND srec_cat ${TEST_TARGET}.bin -binary -offset 0x0000 -byte-swap 4 -o ${TEST_TARGET}.vmem -vmem + COMMAND rm -f prog_${TEST_TARGET}.txt + COMMAND echo -n "${CMAKE_CURRENT_BINARY_DIR}/${TEST_TARGET}.vmem ${CMAKE_CURRENT_BINARY_DIR}/${TEST_TARGET}_unused.txt " > prog_${TEST_TARGET}.txt + COMMAND readelf -s ${TEST_TARGET}.elf | sed '2,13 s/ //1' | grep vref_start | cut -d " " -f 6 | tr [=["\n"]=] " " >> prog_${TEST_TARGET}.txt + COMMAND readelf -s ${TEST_TARGET}.elf | sed '2,13 s/ //1' | grep vref_end | cut -d " " -f 6 | tr [=["\n"]=] " " >> prog_${TEST_TARGET}.txt + COMMAND echo -n "${CMAKE_CURRENT_BINARY_DIR}/${TEST_TARGET}_vicuna_sim_out.txt " >> prog_${TEST_TARGET}.txt + COMMAND readelf -s ${TEST_TARGET}.elf | sed '2,13 s/ //1' | grep vdata_start | cut -d " " -f 6 | tr [=["\n"]=] " " >> prog_${TEST_TARGET}.txt + COMMAND readelf -s ${TEST_TARGET}.elf | sed '2,13 s/ //1' | grep vdata_end | cut -d " " -f 6 | tr [=["\n"]=] " " >> prog_${TEST_TARGET}.txt + COMMAND ${CMAKE_OBJDUMP} -D ${TEST_TARGET}.elf > ${TEST_TARGET}_dump.txt + ) + + set(VCD_TRACE_ARGS "") + + add_test( + NAME ${TEST_TARGET} + COMMAND ./${VERILATOR_MODEL_DIR}/build/verilated_model ${CMAKE_CURRENT_BINARY_DIR}/prog_${TEST_TARGET}.txt ${MEM_W} 4194304 ${MEM_LATENCY} 1 toycar ${VREG_W} 0 ${VCD_TRACE_ARGS} + WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/../.. + ) + + message(STATUS "Added IREE test: ${TEST_TARGET}") +endmacro() diff --git a/benchmark_sources/generic_iree/CMakeLists.txt b/benchmark_sources/generic_iree/CMakeLists.txt index d2f75ff..c142334 100644 --- a/benchmark_sources/generic_iree/CMakeLists.txt +++ b/benchmark_sources/generic_iree/CMakeLists.txt @@ -26,5 +26,6 @@ include(CMake/add_test.cmake) # Add tests add_IreeBenchmark_Spike(add_vector ${CMAKE_CURRENT_SOURCE_DIR}/tests/add_vector) +add_IreeBenchmark_Verilator(add_vector ${CMAKE_CURRENT_SOURCE_DIR}/tests/add_vector) message(STATUS "generic_iree test suite configured successfully") diff --git a/benchmark_sources/generic_iree/baremetal/baremetal_stubs.c b/benchmark_sources/generic_iree/baremetal/baremetal_stubs.c index 4ba6235..763aef0 100644 --- a/benchmark_sources/generic_iree/baremetal/baremetal_stubs.c +++ b/benchmark_sources/generic_iree/baremetal/baremetal_stubs.c @@ -39,10 +39,6 @@ void* sbrk(ptrdiff_t incr) { return _sbrk(incr); } -void _exit(int status) { - while (1) { __asm__ volatile ("wfi"); } -} - void _exit_r(struct _reent* r, int status) { _exit(status); } From daddb866a97d4a41c569edfca38018af7a11a0d6 Mon Sep 17 00:00:00 2001 From: Muhammed Efe Cetin Date: Fri, 24 Jul 2026 11:11:54 +0200 Subject: [PATCH 09/12] processor_models/verilator: make cv32e40x work with IREE add_vector test --- .../MLPerfTiny/CMake/add_test.cmake | 45 +++++++++++-------- .../MLPerfTiny/Int8/toycar/iree/benchmark.hpp | 8 ++-- benchmark_sources/framework/main.cpp | 7 ++- .../generic_iree/CMake/add_test.cmake | 41 ++++++++++++----- .../baremetal/benchmark_template.hpp | 9 ++-- .../verilator/cv32e40x/verilator_main.cpp | 1 + .../cv32e40x/verilator_support_cv32e40x.cpp | 20 +++++---- .../cv32e40x/verilator_support_cv32e40x.h | 6 ++- .../verilator/cv32e40x/vproc_top.sv | 2 +- 9 files changed, 89 insertions(+), 50 deletions(-) diff --git a/benchmark_sources/MLPerfTiny/CMake/add_test.cmake b/benchmark_sources/MLPerfTiny/CMake/add_test.cmake index 4092a6d..cc8bb57 100644 --- a/benchmark_sources/MLPerfTiny/CMake/add_test.cmake +++ b/benchmark_sources/MLPerfTiny/CMake/add_test.cmake @@ -303,7 +303,7 @@ macro(add_Benchmark_IREE_Verilator TEST SOURCE_DIR TEST_BUILD_DIR) endif() set(TEST_NAME ${TEST}_IREE_Verilator) - set(TEST_MLIR_SOURCE ${SOURCE_DIR}/iree/${TEST}_model.mlir) + set(TEST_MLIR_SOURCE ${CMAKE_CURRENT_BINARY_DIR}/${TEST_NAME}_model.mlir) set(TEST_VMFB ${CMAKE_CURRENT_BINARY_DIR}/${TEST_NAME}.vmfb) set(TEST_C_HEADER ${CMAKE_CURRENT_BINARY_DIR}/${TEST_NAME}.c) set(PREGENERATED_MLIR ${SOURCE_DIR}/iree/${TEST}_model.mlir) @@ -359,7 +359,7 @@ macro(add_Benchmark_IREE_Verilator TEST SOURCE_DIR TEST_BUILD_DIR) --iree-llvmcpu-target-triple=riscv32-unknown-elf --iree-llvmcpu-target-abi=${RISCV_ABI} "--iree-llvmcpu-target-cpu-features=${IREE_LLVM_FEATURES}" - # --iree-consteval-jit-target-device=local-sync + --iree-consteval-jit-target-device=local-sync -o ${TEST_VMFB} DEPENDS ${TEST_MLIR_SOURCE} COMMENT "Compiling ${TEST}_model.mlir -> ${TEST}_model.vmfb" @@ -368,9 +368,7 @@ macro(add_Benchmark_IREE_Verilator TEST SOURCE_DIR TEST_BUILD_DIR) add_custom_command( OUTPUT ${TEST_C_HEADER} - COMMAND ${XXD_TOOL} -i ${TEST_VMFB} ${TEST_C_HEADER} - COMMAND sed -i "s/_.*_${TEST_NAME}_vmfb/iree_model_vmfb/g" ${TEST_C_HEADER} - COMMAND sed -i "s/_.*_${TEST_NAME}_vmfb_len/iree_model_vmfb_len/g" ${TEST_C_HEADER} + COMMAND ${XXD_TOOL} -i -n iree_model_vmfb ${TEST_VMFB} ${TEST_C_HEADER} DEPENDS ${TEST_VMFB} COMMENT "Generating ${TEST_NAME}.c from ${TEST_NAME}.vmfb" VERBATIM @@ -452,20 +450,25 @@ macro(add_Benchmark_IREE_Verilator TEST SOURCE_DIR TEST_BUILD_DIR) COMMAND ${CMAKE_OBJDUMP} -D ${TEST_NAME}.elf > ${TEST_NAME}_dump.txt ) - set(INST_TRACE_ARGS "${TEST_BUILD_DIR}/inst_trace.txt") - if(TRACE) - message("${TEST_BUILD_DIR}/last_test_sig.vcd") - set(MEM_TRACE_ARGS "${TEST_BUILD_DIR}/last_test_mem.csv") - set(VCD_TRACE_ARGS "${TEST_BUILD_DIR}last_test_sig.vcd") + set(VCD_TRACE_FLAG "--trace") + set(VCD_TRACE_ARG "${TEST_BUILD_DIR}/test_${TEST_NAME}_Verilator_sig.vcd") + else() + set(VCD_TRACE_FLAG "") + set(VCD_TRACE_ARG "") + endif() + + if(COMMIT_LOG) + set(COMMIT_FLAG "--commit") + set(COMMIT_ARG "${TEST_BUILD_DIR}/") else() - set(MEM_TRACE_ARGS "") - set(VCD_TRACE_ARGS "") + set(COMMIT_FLAG "") + set(COMMIT_ARG "") endif() # Add Test add_test(NAME ${TEST_NAME} - COMMAND ./${VERILATOR_MODEL_DIR}/build/verilated_model ${TEST_BUILD_DIR}/prog_${TEST_NAME}.txt ${MEM_W} 4194304 ${MEM_LATENCY} 1 toycar ${VREG_W} 0 ${VCD_TRACE_ARGS} + COMMAND ./${VERILATOR_MODEL_DIR}/build/verilated_model ${TEST_BUILD_DIR}/prog_${TEST_NAME}.txt ${MEM_PORTS} ${MEM_W} 4194304 ${MEM_LATENCY} 1 ${TEST_NAME} ${VREG_W} 0 ${VCD_TRACE_FLAG} ${VCD_TRACE_ARG} ${COMMIT_FLAG} ${COMMIT_ARG} WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/../..) set_tests_properties(${TEST_NAME} PROPERTIES TIMEOUT 1000) @@ -556,9 +559,7 @@ macro(add_Benchmark_IREE_Spike TEST SOURCE_DIR TEST_BUILD_DIR) # 4. Generate C array from VMFB add_custom_command( OUTPUT ${TEST_C_HEADER} - COMMAND ${XXD_TOOL} -i ${TEST_VMFB} ${TEST_C_HEADER} - COMMAND sed -i "s/_.*_${TEST}_model_vmfb/iree_model_vmfb/g" ${TEST_C_HEADER} - COMMAND sed -i "s/_.*_${TEST}_model_vmfb_len/iree_model_vmfb_len/g" ${TEST_C_HEADER} + COMMAND ${XXD_TOOL} -i -n iree_model_vmfb ${TEST_VMFB} ${TEST_C_HEADER} DEPENDS ${TEST_VMFB} COMMENT "Generating ${TEST}_model.c from ${TEST}_model.vmfb" VERBATIM @@ -579,7 +580,7 @@ macro(add_Benchmark_IREE_Spike TEST SOURCE_DIR TEST_BUILD_DIR) target_sources(${TEST_NAME} PUBLIC ${IREE_WRAPPER_SOURCE} ${TEST_C_HEADER} - ${FRAMEWORK_TOP}/spike/crt0.S + ${FRAMEWORK_TOP}/vicuna2_bsp/crt0.S ${CMAKE_CURRENT_SOURCE_DIR}/../generic_iree/baremetal/baremetal_stubs.c ${SOURCE_DIR}/${TEST}_data/${TEST}_input_data.cc ${SOURCE_DIR}/${TEST}_data/${TEST}_model_settings.cc @@ -606,7 +607,7 @@ macro(add_Benchmark_IREE_Spike TEST SOURCE_DIR TEST_BUILD_DIR) # Set Linker target_link_options(${TEST_NAME} PRIVATE "-nostartfiles") - target_link_options(${TEST_NAME} PRIVATE "-T${FRAMEWORK_TOP}/spike/lld_link.ld") + target_link_options(${TEST_NAME} PRIVATE "-T${FRAMEWORK_TOP}/vicuna2_bsp/lld_link.ld") if (${COMPILER} STREQUAL "LLVM") target_compile_options(${TEST_NAME} PRIVATE "-fno-use-cxa-atexit") @@ -628,9 +629,15 @@ macro(add_Benchmark_IREE_Spike TEST SOURCE_DIR TEST_BUILD_DIR) POST_BUILD COMMAND ${CMAKE_OBJDUMP} -D ${TEST_NAME}.elf > ${TEST_NAME}_dump.txt) + if(COMMIT_LOG) + set(SPIKE_COMMIT_LOG_ARGS "--log-commits" "--log=${TEST_BUILD_DIR}/${TEST_NAME}_commit_log.txt") + else() + set(SPIKE_COMMIT_LOG_ARGS "") + endif() + # Add Test add_test(NAME ${TEST_NAME} - COMMAND ${TOOLCHAIN_TOP}/spike/bin/spike --isa=${RISCV_ARCH}_zvl${VREG_W}b ${TEST_BUILD_DIR}/${TEST_NAME}.elf + COMMAND ${TOOLCHAIN_TOP}/spike/bin/spike --isa=${RISCV_ARCH}_zvl${VREG_W}b ${SPIKE_COMMIT_LOG_ARGS} ${TEST_BUILD_DIR}/${TEST_NAME}.elf WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/../..) set_tests_properties(${TEST_NAME} PROPERTIES TIMEOUT 0) diff --git a/benchmark_sources/MLPerfTiny/Int8/toycar/iree/benchmark.hpp b/benchmark_sources/MLPerfTiny/Int8/toycar/iree/benchmark.hpp index f8742d7..9ac7827 100644 --- a/benchmark_sources/MLPerfTiny/Int8/toycar/iree/benchmark.hpp +++ b/benchmark_sources/MLPerfTiny/Int8/toycar/iree/benchmark.hpp @@ -93,14 +93,14 @@ class Benchmark simulator.end_measurement(); if (!iree_status_is_ok(status)) { - simulator.terminate(1); + simulator.terminate(11); return 3; } iree_hal_buffer_view_t* ret0 = nullptr; status = iree_runtime_call_outputs_pop_front_buffer_view(&call, &ret0); if (!iree_status_is_ok(status) || !ret0) { - simulator.terminate(1); + simulator.terminate(13); return 4; } @@ -122,7 +122,7 @@ class Benchmark int32_t diff = abs(sum - (int32_t)toycar_int8_output_data_ref[0]); if (diff > 1) { - simulator.terminate(1); + simulator.terminate(16); result = 5; } else { simulator.terminate(0); @@ -130,7 +130,7 @@ class Benchmark } iree_hal_buffer_unmap_range(&mapping); } else { - simulator.terminate(1); + simulator.terminate(12); result = 6; } diff --git a/benchmark_sources/framework/main.cpp b/benchmark_sources/framework/main.cpp index c88200b..b2a8658 100644 --- a/benchmark_sources/framework/main.cpp +++ b/benchmark_sources/framework/main.cpp @@ -14,9 +14,12 @@ int main() //Run benchmark simulator.begin_measurement(); - benchmark.run_benchmark(); + int code = benchmark.run_benchmark(); simulator.end_measurement(); - int code = benchmark.validate_benchmark(); + if (code != 0) { + return code; + } + code = benchmark.validate_benchmark(); simulator.terminate(code); return code; diff --git a/benchmark_sources/generic_iree/CMake/add_test.cmake b/benchmark_sources/generic_iree/CMake/add_test.cmake index 053b511..5062fad 100644 --- a/benchmark_sources/generic_iree/CMake/add_test.cmake +++ b/benchmark_sources/generic_iree/CMake/add_test.cmake @@ -49,7 +49,7 @@ macro(add_IreeBenchmark_Spike TEST_NAME TEST_DIR) --iree-llvmcpu-target-triple=riscv32-unknown-elf --iree-llvmcpu-target-abi=${RISCV_ABI} --iree-llvmcpu-target-cpu-features=${IREE_LLVM_FEATURES} - --iree-consteval-jit-target-device=local-sync + --iree-consteval-jit-target-device=local -o ${TEST_VMFB} DEPENDS ${TEST_MLIR_SOURCE} COMMENT "Compiling ${TEST_NAME}.mlir -> ${TEST_NAME}.vmfb (${RISCV_ARCH})" @@ -59,9 +59,7 @@ macro(add_IreeBenchmark_Spike TEST_NAME TEST_DIR) # Generate C header from VMFB add_custom_command( OUTPUT ${TEST_C_HEADER} - COMMAND ${XXD_TOOL} -i ${TEST_VMFB} ${TEST_C_HEADER} - COMMAND sed -i "s/_.*_${TEST_NAME}_vmfb/${TEST_NAME}_vmfb/g" ${TEST_C_HEADER} - COMMAND sed -i "s/_.*_${TEST_NAME}_vmfb_len/${TEST_NAME}_vmfb_len/g" ${TEST_C_HEADER} + COMMAND ${XXD_TOOL} -i -n ${TEST_NAME}_vmfb ${TEST_VMFB} ${TEST_C_HEADER} DEPENDS ${TEST_VMFB} COMMENT "Generating ${TEST_NAME}.h from ${TEST_NAME}.vmfb" VERBATIM @@ -92,7 +90,7 @@ macro(add_IreeBenchmark_Spike TEST_NAME TEST_DIR) target_sources(${TEST_TARGET} PUBLIC ${TEST_MAIN_SOURCE} - ${CMAKE_CURRENT_SOURCE_DIR}/../framework/spike/crt0.S + ${FRAMEWORK_TOP}/vicuna2_bsp/crt0.S ${CMAKE_CURRENT_SOURCE_DIR}/baremetal/baremetal_stubs.c ) @@ -113,7 +111,7 @@ macro(add_IreeBenchmark_Spike TEST_NAME TEST_DIR) target_link_options(${TEST_TARGET} PRIVATE -nostartfiles - -T${CMAKE_CURRENT_SOURCE_DIR}/../framework/spike/lld_link.ld + -T${CMAKE_CURRENT_SOURCE_DIR}/../framework/vicuna2_bsp/lld_link.ld ) add_custom_command(TARGET ${TEST_TARGET} @@ -121,10 +119,17 @@ macro(add_IreeBenchmark_Spike TEST_NAME TEST_DIR) COMMAND ${CMAKE_OBJDUMP} -D ${TEST_TARGET}.elf > ${TEST_TARGET}_dump.txt ) + if(COMMIT_LOG) + set(SPIKE_COMMIT_LOG_ARGS "--log-commits" "--log=${TEST_BUILD_DIR}/${TEST_NAME}_commit_log.txt") + else() + set(SPIKE_COMMIT_LOG_ARGS "") + endif() + add_test( NAME ${TEST_TARGET} COMMAND ${TOOLCHAIN_TOP}/spike/bin/spike --isa=${RISCV_ARCH}_zvl${VREG_W}b + ${SPIKE_COMMIT_LOG_ARGS} ${CMAKE_CURRENT_BINARY_DIR}/${TEST_TARGET}.elf WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/../.. ) @@ -184,7 +189,7 @@ macro(add_IreeBenchmark_Verilator TEST_NAME TEST_DIR) --iree-llvmcpu-target-triple=riscv32-unknown-elf --iree-llvmcpu-target-abi=${RISCV_ABI} --iree-llvmcpu-target-cpu-features=${IREE_LLVM_FEATURES} - --iree-consteval-jit-target-device=local-sync + --iree-consteval-jit-target-device=local -o ${TEST_VMFB} DEPENDS ${TEST_MLIR_SOURCE} COMMENT "Compiling ${TEST_NAME}.mlir -> ${TEST_NAME}.vmfb (${RISCV_ARCH})" @@ -194,9 +199,7 @@ macro(add_IreeBenchmark_Verilator TEST_NAME TEST_DIR) # Generate C header from VMFB add_custom_command( OUTPUT ${TEST_C_HEADER} - COMMAND ${XXD_TOOL} -i ${TEST_VMFB} ${TEST_C_HEADER} - COMMAND sed -i "s/_.*_${TEST_NAME}_vmfb/${TEST_NAME}_vmfb/g" ${TEST_C_HEADER} - COMMAND sed -i "s/_.*_${TEST_NAME}_vmfb_len/${TEST_NAME}_vmfb_len/g" ${TEST_C_HEADER} + COMMAND ${XXD_TOOL} -i -n ${TEST_NAME}_vmfb ${TEST_VMFB} ${TEST_C_HEADER} DEPENDS ${TEST_VMFB} COMMENT "Generating ${TEST_NAME}.h from ${TEST_NAME}.vmfb" VERBATIM @@ -269,11 +272,25 @@ macro(add_IreeBenchmark_Verilator TEST_NAME TEST_DIR) COMMAND ${CMAKE_OBJDUMP} -D ${TEST_TARGET}.elf > ${TEST_TARGET}_dump.txt ) - set(VCD_TRACE_ARGS "") + if(TRACE) + set(VCD_TRACE_FLAG "--trace") + set(VCD_TRACE_ARG "${TEST_BUILD_DIR}/test_${TEST_NAME}_Verilator_sig.vcd") + else() + set(VCD_TRACE_FLAG "") + set(VCD_TRACE_ARG "") + endif() + + if(COMMIT_LOG) + set(COMMIT_FLAG "--commit") + set(COMMIT_ARG "${TEST_BUILD_DIR}/") + else() + set(COMMIT_FLAG "") + set(COMMIT_ARG "") + endif() add_test( NAME ${TEST_TARGET} - COMMAND ./${VERILATOR_MODEL_DIR}/build/verilated_model ${CMAKE_CURRENT_BINARY_DIR}/prog_${TEST_TARGET}.txt ${MEM_W} 4194304 ${MEM_LATENCY} 1 toycar ${VREG_W} 0 ${VCD_TRACE_ARGS} + COMMAND ./${VERILATOR_MODEL_DIR}/build/verilated_model ${CMAKE_CURRENT_BINARY_DIR}/prog_${TEST_TARGET}.txt ${MEM_PORTS} ${MEM_W} 4194304 ${MEM_LATENCY} 1 toycar ${VREG_W} 0 ${VCD_TRACE_FLAG} ${VCD_TRACE_ARG} ${COMMIT_FLAG} ${COMMIT_ARG} WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/../.. ) diff --git a/benchmark_sources/generic_iree/baremetal/benchmark_template.hpp b/benchmark_sources/generic_iree/baremetal/benchmark_template.hpp index f78323e..7f06b7a 100644 --- a/benchmark_sources/generic_iree/baremetal/benchmark_template.hpp +++ b/benchmark_sources/generic_iree/baremetal/benchmark_template.hpp @@ -106,7 +106,8 @@ class Benchmark private: iree_runtime_instance_t* instance = nullptr; iree_runtime_session_t* session = nullptr; - iree_runtime_call_t call; + iree_runtime_call_t call = {0}; + bool call_initialized = false; iree_allocator_t allocator; public: @@ -145,10 +146,12 @@ class Benchmark status = iree_runtime_call_initialize_by_name( session, iree_make_cstring_view(TEST_FUNCTION_NAME), &call); + if (!iree_status_is_ok(status)) return; + call_initialized = true; } inline int run_benchmark() { - if (!instance || !session) return 1; + if (!instance || !session || !call_initialized) return 1; iree_hal_allocator_t* device_allocator = iree_runtime_session_device_allocator(session); @@ -202,7 +205,7 @@ class Benchmark ~Benchmark() { TEST_CLEANUP(); - iree_runtime_call_deinitialize(&call); + if (call_initialized) iree_runtime_call_deinitialize(&call); if (session) iree_runtime_session_release(session); if (instance) iree_runtime_instance_release(instance); } diff --git a/processor_models/verilator/cv32e40x/verilator_main.cpp b/processor_models/verilator/cv32e40x/verilator_main.cpp index 0d70050..3a026ee 100644 --- a/processor_models/verilator/cv32e40x/verilator_main.cpp +++ b/processor_models/verilator/cv32e40x/verilator_main.cpp @@ -9,6 +9,7 @@ #include #include #include +#include #include "verilated.h" #include "verilator_support_cv32e40x.h" diff --git a/processor_models/verilator/cv32e40x/verilator_support_cv32e40x.cpp b/processor_models/verilator/cv32e40x/verilator_support_cv32e40x.cpp index a31a63a..bb50f2d 100644 --- a/processor_models/verilator/cv32e40x/verilator_support_cv32e40x.cpp +++ b/processor_models/verilator/cv32e40x/verilator_support_cv32e40x.cpp @@ -142,6 +142,9 @@ void update_mem_load(uint32_t address, bool req_valid, uint32_t mem_w, // Next evaluate an outstanding request and put at the end of the buffer. bool valid = (address_mask < mem_size) & req_valid; + if (req_valid && !valid) { + fprintf(stderr, "ERROR: READ ATTEMPTED OUTSIDE OF VALID ADDRESS SPACE: 0x%08x\n", address); + } // set new queue entry to zero for (int i = 0; i < mem_w / 8; i++) { @@ -155,7 +158,7 @@ void update_mem_load(uint32_t address, bool req_valid, uint32_t mem_w, } } - queue_valid[0] = valid; + queue_valid[0] = req_valid; queue_err[0] = !valid; } @@ -178,21 +181,22 @@ void update_mem_write(uint32_t address, bool req_valid, uint32_t mem_w, unsigned char *model_data_o, unsigned char *model_be_o, bool *queue_valid, bool *queue_err, unsigned char *mem) { uint32_t address_mask = address & 0x7FFFFFFF; + bool valid = (address_mask < mem_size) & req_valid; if (req_valid) { - if (address_mask < mem_size) { + if (valid) { + uint32_t aligned_addr = address & ~0x3; + for (int i = 0; i < mem_w / 8; i++) { if ((model_be_o[i / 8] & (1 << (i % 8)))) { mem[address_mask + i] = model_data_o[i]; } } } else { - fprintf(stderr, - "ERROR: WRITE ATTEMPTED OUTSIDE OF VALID ADDRESS SPACE\n"); + fprintf(stderr, "ERROR: WRITE ATTEMPTED OUTSIDE OF VALID ADDRESS SPACE: 0x%08x\n", address); } - queue_valid[mem_lat - 1] = - true; // need to signal valid on store interface for accepted - // transaction. Can always respond in 1 cycle due to store buffer - queue_err[mem_lat - 1] = false; + + queue_valid[mem_lat - 1] = req_valid; + queue_err[mem_lat - 1] = !valid; } } diff --git a/processor_models/verilator/cv32e40x/verilator_support_cv32e40x.h b/processor_models/verilator/cv32e40x/verilator_support_cv32e40x.h index cbea0ab..c370a65 100644 --- a/processor_models/verilator/cv32e40x/verilator_support_cv32e40x.h +++ b/processor_models/verilator/cv32e40x/verilator_support_cv32e40x.h @@ -118,11 +118,15 @@ void update_mem_load(uint32_t address, bool req_valid, uint32_t mem_w, uint32_t * address - address of the write request being issued * req_valid - validity of the write request being issued * mem_w - width of the write interface in bits +* mem_lat - latency of the memory interface * mem_size - total size of the memory address space * * *model_data_o - pointer to memory data write interface on verilator model * *model_be_o - pointer to byte enable write interface on verilator model * +* *queue_valid - pointer to valid queue +* *queue_err - pointer to error queue +* * *mem - pointer to memory space */ void update_mem_write(uint32_t address, bool req_valid, uint32_t mem_w, uint32_t mem_lat, uint32_t mem_size, unsigned char *model_data_o, unsigned char *model_be_o, bool *queue_valid, bool *queue_err, unsigned char *mem); @@ -256,4 +260,4 @@ auto enable_inst_trace(char const *path) -> void; auto print_trace(uint64_t pc, uint32_t instruction, uint64_t cycle) -> void; -#endif \ No newline at end of file +#endif diff --git a/processor_models/verilator/cv32e40x/vproc_top.sv b/processor_models/verilator/cv32e40x/vproc_top.sv index 85f642f..603082c 100644 --- a/processor_models/verilator/cv32e40x/vproc_top.sv +++ b/processor_models/verilator/cv32e40x/vproc_top.sv @@ -826,7 +826,7 @@ module vproc_top import vproc_pkg::*, obi_pkg::*; #( logic sdata_waiting; logic vdata_waiting; logic [31:0] sdata_wait_addr; - assign sdata_hold = ~USE_XIF_MEM & (vdata_req[0] | vect_pending_store | (vect_pending_load & sdata_we)); + assign sdata_hold = ~USE_XIF_MEM & (vdata_req | (vect_pending_load & sdata_we)); always_comb begin data_req[0] = vdata_req[0] | (sdata_req & ~sdata_hold); data_addr[0] = sdata_addr; From 722b79bcf38d954d028744befb113fae423be4e9 Mon Sep 17 00:00:00 2001 From: Muhammed Efe Cetin Date: Mon, 3 Aug 2026 14:11:47 +0200 Subject: [PATCH 10/12] processor_models: improve cv32e40x memory error handling --- processor_models/verilator/cv32a60x/verilator_main.cpp | 6 +++++- processor_models/verilator/cv32e40x/verilator_main.cpp | 7 +++++-- processor_models/verilator/cv32e40x/vproc_top.sv | 2 +- 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/processor_models/verilator/cv32a60x/verilator_main.cpp b/processor_models/verilator/cv32a60x/verilator_main.cpp index f5b8fce..8bd2c9a 100644 --- a/processor_models/verilator/cv32a60x/verilator_main.cpp +++ b/processor_models/verilator/cv32a60x/verilator_main.cpp @@ -438,7 +438,7 @@ int main(int argc, char **argv) { break; } else { - fprintf(stderr, "ERROR: TEST FAILURE - FAILED OUTPUT VALIDATION\n"); + fprintf(stderr, "ERROR: TEST FAILURE - FAILED OUTPUT VALIDATION - Exit Code: %u\n", (unsigned char)w_port); exit_code = 1; break; //For benchmarks, only 1 test } @@ -492,6 +492,7 @@ int main(int argc, char **argv) { fclose(fxreglog); } top->final(); + free(prog_path); free(ref_path); free(dump_path); @@ -499,6 +500,7 @@ int main(int argc, char **argv) { free(mem); free(mem_rvalid_queue); free(vec_mem_rvalid_queue); + for(int queue_pos = 0; queue_pos < mem_latency; queue_pos++) { free(mem_rdata_queue[queue_pos]); @@ -508,6 +510,7 @@ int main(int argc, char **argv) { } + for(int p = 0; p < mem_ports; p++){ for(int queue_pos = 0; queue_pos < mem_latency; queue_pos++){ free(vec_mem_rdata_queue[p][queue_pos]); @@ -516,6 +519,7 @@ int main(int argc, char **argv) { free(vec_mem_rdata_queue[p]); free(vec_mem_meta_queue[p]); } + free(mem_rdata_queue); free(mem_idata_queue); free(mem_meta_queue); diff --git a/processor_models/verilator/cv32e40x/verilator_main.cpp b/processor_models/verilator/cv32e40x/verilator_main.cpp index 3a026ee..21462c5 100644 --- a/processor_models/verilator/cv32e40x/verilator_main.cpp +++ b/processor_models/verilator/cv32e40x/verilator_main.cpp @@ -289,7 +289,7 @@ int main(int argc, char **argv) { break; } else { - fprintf(stderr, "ERROR: TEST FAILURE - FAILED OUTPUT VALIDATION\n"); + fprintf(stderr, "ERROR: TEST FAILURE - FAILED OUTPUT VALIDATION - Exit Code: %u\n", (unsigned char)w_port); exit_code = 1; break; // For benchmarks, only 1 test } @@ -343,7 +343,10 @@ int main(int argc, char **argv) { // Outputs + Statistics ////////// - // update_xreg_commit(top, fxreglog); + if (fxreglog != NULL) { + update_xreg_commit(top, fxreglog); + } + // update_freg_commit(top, ffreglog); // update_vreg_commit(top, vreg_w, fvreglog); } diff --git a/processor_models/verilator/cv32e40x/vproc_top.sv b/processor_models/verilator/cv32e40x/vproc_top.sv index 603082c..2c9b5d2 100644 --- a/processor_models/verilator/cv32e40x/vproc_top.sv +++ b/processor_models/verilator/cv32e40x/vproc_top.sv @@ -826,7 +826,7 @@ module vproc_top import vproc_pkg::*, obi_pkg::*; #( logic sdata_waiting; logic vdata_waiting; logic [31:0] sdata_wait_addr; - assign sdata_hold = ~USE_XIF_MEM & (vdata_req | (vect_pending_load & sdata_we)); + assign sdata_hold = ~USE_XIF_MEM & (vdata_req[0] | (vect_pending_load & sdata_we)); always_comb begin data_req[0] = vdata_req[0] | (sdata_req & ~sdata_hold); data_addr[0] = sdata_addr; From de5162004c71c32f4c5cdf5bbb5d962249244da7 Mon Sep 17 00:00:00 2001 From: Muhammed Efe Cetin Date: Thu, 6 Aug 2026 14:31:09 +0200 Subject: [PATCH 11/12] benchmark_sources/MLPerfTiny: add aww support to IREE --- .../MLPerfTiny/CMake/add_test.cmake | 246 +++++++----------- benchmark_sources/MLPerfTiny/CMakeLists.txt | 2 + .../Int8/aww/iree/aww_int8_model.mlir | 148 +++++++++++ .../MLPerfTiny/Int8/aww/iree/benchmark.hpp | 136 ++++++++++ .../Int8/aww/{ => tflite}/benchmark.hpp | 0 5 files changed, 376 insertions(+), 156 deletions(-) create mode 100644 benchmark_sources/MLPerfTiny/Int8/aww/iree/aww_int8_model.mlir create mode 100644 benchmark_sources/MLPerfTiny/Int8/aww/iree/benchmark.hpp rename benchmark_sources/MLPerfTiny/Int8/aww/{ => tflite}/benchmark.hpp (100%) diff --git a/benchmark_sources/MLPerfTiny/CMake/add_test.cmake b/benchmark_sources/MLPerfTiny/CMake/add_test.cmake index cc8bb57..231d332 100644 --- a/benchmark_sources/MLPerfTiny/CMake/add_test.cmake +++ b/benchmark_sources/MLPerfTiny/CMake/add_test.cmake @@ -296,6 +296,85 @@ macro(add_benchmark_etiss TEST SOURCE_DIR) WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}) endmacro() +macro(add_Benchmark_IREE_VMFB TEST SOURCE_DIR) + set(TEST_VMFB ${CMAKE_CURRENT_BINARY_DIR}/${TEST}_IREE_shared.vmfb) + set(TEST_C_HEADER ${CMAKE_CURRENT_BINARY_DIR}/${TEST}_IREE_shared.c) + set(TEST_MLIR_SOURCE ${CMAKE_CURRENT_BINARY_DIR}/${TEST}_IREE_shared_model.mlir) + set(PREGENERATED_MLIR ${SOURCE_DIR}/iree/${TEST}_model.mlir) + + if(NOT TARGET ${TEST}_IREE_vmfb) + if(NOT EXISTS "${PREGENERATED_MLIR}") + message(FATAL_ERROR "MLIR model not found at ${PREGENERATED_MLIR}!\n" + "Please extract the .tflite from model_data.cc and convert it to MLIR via TOSA converter.\n" + "Example workflow:\n" + " 1. python3 CMake/extract_tflite.py ${SOURCE_DIR}/${TEST}_data/${TEST}_model_data.cc ${TEST}_model.tflite\n" + " 2. tosa-converter-for-tflite ${TEST}_model.tflite --text -o ${TEST}_model.mlir\n" + " 3. mv ${TEST}_model.mlir ${SOURCE_DIR}/iree/") + endif() + + message(STATUS "Building one shared IREE VMFB for ${TEST} (Spike + Verilator)") + add_custom_command( + OUTPUT ${TEST_MLIR_SOURCE} + COMMAND ${CMAKE_COMMAND} -E copy ${PREGENERATED_MLIR} ${TEST_MLIR_SOURCE} + DEPENDS ${PREGENERATED_MLIR} + COMMENT "Copying MLIR model to build directory" + VERBATIM + ) + + find_program(IREE_COMPILE_TOOL iree-compile HINTS ${IREE_HOST_BIN_DIR} REQUIRED) + find_program(XXD_TOOL xxd REQUIRED) + + string(REGEX MATCH "m" HAS_M ${RISCV_ARCH}) + string(REGEX MATCH "f" HAS_F ${RISCV_ARCH}) + string(REGEX MATCH "zve32x" HAS_ZVE32X ${RISCV_ARCH}) + string(REGEX MATCH "zve32f" HAS_ZVE32F ${RISCV_ARCH}) + + set(IREE_LLVM_FEATURES "") + if(HAS_M) + set(IREE_LLVM_FEATURES "${IREE_LLVM_FEATURES},+m") + endif() + if(HAS_F) + set(IREE_LLVM_FEATURES "${IREE_LLVM_FEATURES},+f") + endif() + if(HAS_ZVE32X) + set(IREE_LLVM_FEATURES "${IREE_LLVM_FEATURES},+zve32x") + endif() + if(HAS_ZVE32F) + set(IREE_LLVM_FEATURES "${IREE_LLVM_FEATURES},+zve32f") + endif() + if(HAS_ZVE32X OR HAS_ZVE32F) + set(IREE_LLVM_FEATURES "${IREE_LLVM_FEATURES},+zvl${VREG_W}b") + endif() + + string(REGEX REPLACE "^," "" IREE_LLVM_FEATURES "${IREE_LLVM_FEATURES}") + + add_custom_command( + OUTPUT ${TEST_VMFB} + COMMAND ${IREE_COMPILE_TOOL} + ${TEST_MLIR_SOURCE} + --iree-hal-target-device=local + --iree-hal-local-target-device-backends=llvm-cpu + --iree-llvmcpu-target-triple=riscv32-unknown-elf + --iree-llvmcpu-target-abi=${RISCV_ABI} + "--iree-llvmcpu-target-cpu-features=${IREE_LLVM_FEATURES}" + --iree-consteval-jit-target-device=local-sync + -o ${TEST_VMFB} + DEPENDS ${TEST_MLIR_SOURCE} + COMMENT "Compiling shared ${TEST} VMFB" + VERBATIM + ) + + add_custom_command( + OUTPUT ${TEST_C_HEADER} + COMMAND ${XXD_TOOL} -i -n iree_model_vmfb ${TEST_VMFB} ${TEST_C_HEADER} + DEPENDS ${TEST_VMFB} + COMMENT "Generating shared IREE C array for ${TEST}" + VERBATIM + ) + add_custom_target(${TEST}_IREE_vmfb DEPENDS ${TEST_C_HEADER}) + endif() +endmacro() + macro(add_Benchmark_IREE_Verilator TEST SOURCE_DIR TEST_BUILD_DIR) # Check if verilator model is built if(NOT EXISTS "${VERILATOR_MODEL_DIR}/build/verilated_model") @@ -303,82 +382,16 @@ macro(add_Benchmark_IREE_Verilator TEST SOURCE_DIR TEST_BUILD_DIR) endif() set(TEST_NAME ${TEST}_IREE_Verilator) - set(TEST_MLIR_SOURCE ${CMAKE_CURRENT_BINARY_DIR}/${TEST_NAME}_model.mlir) - set(TEST_VMFB ${CMAKE_CURRENT_BINARY_DIR}/${TEST_NAME}.vmfb) - set(TEST_C_HEADER ${CMAKE_CURRENT_BINARY_DIR}/${TEST_NAME}.c) - set(PREGENERATED_MLIR ${SOURCE_DIR}/iree/${TEST}_model.mlir) - - if(NOT EXISTS "${PREGENERATED_MLIR}") - message(FATAL_ERROR "MLIR model not found at ${PREGENERATED_MLIR}!") - endif() - - message(STATUS "Found MLIR model at ${PREGENERATED_MLIR}, copying to build directory.") - - add_custom_command( - OUTPUT ${TEST_MLIR_SOURCE} - COMMAND ${CMAKE_COMMAND} -E copy ${PREGENERATED_MLIR} ${TEST_MLIR_SOURCE} - DEPENDS ${PREGENERATED_MLIR} - COMMENT "Copying MLIR model to build directory" - VERBATIM - ) - - find_program(IREE_COMPILE_TOOL iree-compile HINTS ${IREE_HOST_BIN_DIR} REQUIRED) - find_program(XXD_TOOL xxd REQUIRED) - - # Compile MLIR to VMFB - string(REGEX MATCH "m" HAS_M ${RISCV_ARCH}) - string(REGEX MATCH "f" HAS_F ${RISCV_ARCH}) - string(REGEX MATCH "zve32x" HAS_ZVE32X ${RISCV_ARCH}) - string(REGEX MATCH "zve32f" HAS_ZVE32F ${RISCV_ARCH}) - - set(IREE_LLVM_FEATURES "") - if(HAS_M) - set(IREE_LLVM_FEATURES "${IREE_LLVM_FEATURES},+m") - endif() - if(HAS_F) - set(IREE_LLVM_FEATURES "${IREE_LLVM_FEATURES},+f") - endif() - if(HAS_ZVE32X) - set(IREE_LLVM_FEATURES "${IREE_LLVM_FEATURES},+zve32x") - endif() - if(HAS_ZVE32F) - set(IREE_LLVM_FEATURES "${IREE_LLVM_FEATURES},+zve32f") - endif() - if(HAS_ZVE32X OR HAS_ZVE32F) - set(IREE_LLVM_FEATURES "${IREE_LLVM_FEATURES},+zvl${VREG_W}b") - endif() - - string(REGEX REPLACE "^," "" IREE_LLVM_FEATURES "${IREE_LLVM_FEATURES}") - - add_custom_command( - OUTPUT ${TEST_VMFB} - COMMAND ${IREE_COMPILE_TOOL} - ${TEST_MLIR_SOURCE} - --iree-hal-target-device=local - --iree-hal-local-target-device-backends=llvm-cpu - --iree-llvmcpu-target-triple=riscv32-unknown-elf - --iree-llvmcpu-target-abi=${RISCV_ABI} - "--iree-llvmcpu-target-cpu-features=${IREE_LLVM_FEATURES}" - --iree-consteval-jit-target-device=local-sync - -o ${TEST_VMFB} - DEPENDS ${TEST_MLIR_SOURCE} - COMMENT "Compiling ${TEST}_model.mlir -> ${TEST}_model.vmfb" - VERBATIM - ) - - add_custom_command( - OUTPUT ${TEST_C_HEADER} - COMMAND ${XXD_TOOL} -i -n iree_model_vmfb ${TEST_VMFB} ${TEST_C_HEADER} - DEPENDS ${TEST_VMFB} - COMMENT "Generating ${TEST_NAME}.c from ${TEST_NAME}.vmfb" - VERBATIM - ) + add_Benchmark_IREE_VMFB(${TEST} ${SOURCE_DIR}) + set(TEST_VMFB ${CMAKE_CURRENT_BINARY_DIR}/${TEST}_IREE_shared.vmfb) + set(TEST_C_HEADER ${CMAKE_CURRENT_BINARY_DIR}/${TEST}_IREE_shared.c) add_executable(${TEST_NAME}) + add_dependencies(${TEST_NAME} ${TEST}_IREE_vmfb) target_include_directories(${TEST_NAME} PRIVATE - ${SOURCE_DIR} ${SOURCE_DIR}/iree + ${SOURCE_DIR} ${SOURCE_DIR}/${TEST}_data ${FRAMEWORK_TOP}/ ${CMAKE_CURRENT_BINARY_DIR} @@ -424,7 +437,7 @@ macro(add_Benchmark_IREE_Verilator TEST SOURCE_DIR TEST_BUILD_DIR) # Link IREE runtime and sim libraries target_link_libraries(${TEST_NAME} PRIVATE bsp_Vicuna - UART_Vicuna + UART_Vicuna sim_Verilator -Wl,--start-group iree_runtime_unified @@ -481,95 +494,16 @@ macro(add_Benchmark_IREE_Spike TEST SOURCE_DIR TEST_BUILD_DIR) build_spike() set(TEST_NAME ${TEST}_IREE_Spike) - - set(PREGENERATED_MLIR "${SOURCE_DIR}/iree/${TEST}_model.mlir") - set(TEST_MLIR_SOURCE ${CMAKE_CURRENT_BINARY_DIR}/${TEST}_model.mlir) - set(TEST_VMFB ${CMAKE_CURRENT_BINARY_DIR}/${TEST}_model.vmfb) - set(TEST_C_HEADER ${CMAKE_CURRENT_BINARY_DIR}/${TEST}_model.c) - - if(NOT EXISTS "${PREGENERATED_MLIR}") - message(FATAL_ERROR "MLIR model not found at ${PREGENERATED_MLIR}!\n" - "Please extract the .tflite from model_data.cc and convert it to MLIR via TOSA converter.\n" - "Example workflow:\n" - " 1. python3 CMake/extract_tflite.py ${SOURCE_DIR}/${TEST}_data/${TEST}_model_data.cc ${TEST}_model.tflite\n" - " 2. tosa-converter-for-tflite ${TEST}_model.tflite --text -o ${TEST}_model.mlir\n" - " 3. mv ${TEST}_model.mlir ${SOURCE_DIR}/iree/") - endif() - - message(STATUS "Found MLIR model at ${PREGENERATED_MLIR}, copying to build directory.") - - # Copy the MLIR to the build directory so the pipeline can continue smoothly - add_custom_command( - OUTPUT ${TEST_MLIR_SOURCE} - COMMAND ${CMAKE_COMMAND} -E copy ${PREGENERATED_MLIR} ${TEST_MLIR_SOURCE} - DEPENDS ${PREGENERATED_MLIR} - COMMENT "Copying MLIR model to build directory" - VERBATIM - ) - - # Locate IREE compiler - find_program(IREE_COMPILE_TOOL iree-compile HINTS ${IREE_HOST_BIN_DIR} REQUIRED) - find_program(XXD_TOOL xxd REQUIRED) - - # 3. Compile MLIR to VMFB - string(REGEX MATCH "m" HAS_M ${RISCV_ARCH}) - string(REGEX MATCH "f" HAS_F ${RISCV_ARCH}) - string(REGEX MATCH "zve32x" HAS_ZVE32X ${RISCV_ARCH}) - string(REGEX MATCH "zve32f" HAS_ZVE32F ${RISCV_ARCH}) - - # Generate IREE LLVM features based on RISCV_ARCH - set(IREE_LLVM_FEATURES "") - - if(HAS_M) - set(IREE_LLVM_FEATURES "${IREE_LLVM_FEATURES},+m") - endif() - if(HAS_F) - set(IREE_LLVM_FEATURES "${IREE_LLVM_FEATURES},+f") - endif() - if(HAS_ZVE32X) - set(IREE_LLVM_FEATURES "${IREE_LLVM_FEATURES},+zve32x") - endif() - if(HAS_ZVE32F) - set(IREE_LLVM_FEATURES "${IREE_LLVM_FEATURES},+zve32f") - endif() - - if(HAS_ZVE32X OR HAS_ZVE32F) - set(IREE_LLVM_FEATURES "${IREE_LLVM_FEATURES},+zvl${VREG_W}b") - endif() - - string(REGEX REPLACE "^," "" IREE_LLVM_FEATURES "${IREE_LLVM_FEATURES}") - - # 2. Compile MLIR to VMFB - add_custom_command( - OUTPUT ${TEST_VMFB} - COMMAND ${IREE_COMPILE_TOOL} - ${TEST_MLIR_SOURCE} - --iree-hal-target-device=local - --iree-hal-local-target-device-backends=llvm-cpu - --iree-llvmcpu-target-triple=riscv32-unknown-elf - --iree-llvmcpu-target-abi=${RISCV_ABI} - --iree-llvmcpu-target-cpu-features=${IREE_LLVM_FEATURES} - --iree-consteval-jit-target-device=local-sync - -o ${TEST_VMFB} - DEPENDS ${TEST_MLIR_SOURCE} - COMMENT "Compiling ${TEST}_model.mlir -> ${TEST}_model.vmfb" - VERBATIM - ) - - # 4. Generate C array from VMFB - add_custom_command( - OUTPUT ${TEST_C_HEADER} - COMMAND ${XXD_TOOL} -i -n iree_model_vmfb ${TEST_VMFB} ${TEST_C_HEADER} - DEPENDS ${TEST_VMFB} - COMMENT "Generating ${TEST}_model.c from ${TEST}_model.vmfb" - VERBATIM - ) + add_Benchmark_IREE_VMFB(${TEST} ${SOURCE_DIR}) + set(TEST_VMFB ${CMAKE_CURRENT_BINARY_DIR}/${TEST}_IREE_shared.vmfb) + set(TEST_C_HEADER ${CMAKE_CURRENT_BINARY_DIR}/${TEST}_IREE_shared.c) add_executable(${TEST_NAME}) + add_dependencies(${TEST_NAME} ${TEST}_IREE_vmfb) target_include_directories(${TEST_NAME} PRIVATE - ${SOURCE_DIR} ${SOURCE_DIR}/iree + ${SOURCE_DIR} ${SOURCE_DIR}/${TEST}_data ${FRAMEWORK_TOP}/ ${CMAKE_CURRENT_BINARY_DIR} diff --git a/benchmark_sources/MLPerfTiny/CMakeLists.txt b/benchmark_sources/MLPerfTiny/CMakeLists.txt index aee39b1..e0ee295 100644 --- a/benchmark_sources/MLPerfTiny/CMakeLists.txt +++ b/benchmark_sources/MLPerfTiny/CMakeLists.txt @@ -64,6 +64,8 @@ elseif(${FRAMEWORK} STREQUAL "IREE") message(STATUS "Building MLPerfTiny with IREE backend") add_Benchmark_IREE_Spike(toycar_int8 ${CMAKE_CURRENT_SOURCE_DIR}/Int8/toycar/ ${BINARY_DIR}) add_Benchmark_IREE_Verilator(toycar_int8 ${CMAKE_CURRENT_SOURCE_DIR}/Int8/toycar/ ${BINARY_DIR}) + add_Benchmark_IREE_Spike(aww_int8 ${CMAKE_CURRENT_SOURCE_DIR}/Int8/aww/ ${BINARY_DIR}) + add_Benchmark_IREE_Verilator(aww_int8 ${CMAKE_CURRENT_SOURCE_DIR}/Int8/aww/ ${BINARY_DIR}) else() message(WARNING "IREE runtime target not available, skipping IREE benchmarks") endif() diff --git a/benchmark_sources/MLPerfTiny/Int8/aww/iree/aww_int8_model.mlir b/benchmark_sources/MLPerfTiny/Int8/aww/iree/aww_int8_model.mlir new file mode 100644 index 0000000..8d95778 --- /dev/null +++ b/benchmark_sources/MLPerfTiny/Int8/aww/iree/aww_int8_model.mlir @@ -0,0 +1,148 @@ +module attributes {tf_saved_model.semantics, tfl.description = "MLIR Converted.", tfl.metadata = {CONVERSION_METADATA = "\0C\00\00\00\08\00\0E\00\08\00\04\00\08\00\00\00\10\00\00\00(\00\00\00\00\00\06\00\08\00\04\00\06\00\00\00\04\00\00\00\01\00\00\00\EB\03\00\00\00\00\0A\00\10\00\0C\00\08\00\04\00\0A\00\00\00\02\00\00\00\02\00\00\00\04\00\00\00\06\00\00\002.15.0\00\00", min_runtime_version = "1.14.0\00\00\00\00\00\00\00\00\00\00"}, tfl.schema_version = 3 : i32} { + func.func @main(%arg0: tensor<1x49x10x1xi8> {tf_saved_model.index_path = ["input_1"]}) -> (tensor<1x12xi8> {tf_saved_model.index_path = ["dense"]}) attributes {tf.entry_function = {inputs = "serving_default_input_1:0", outputs = "StatefulPartitionedCall:0"}, tf_saved_model.exported_names = ["serving_default"]} { + %0 = tosa.const_shape {values = dense<[3, 3, 64, 1]> : tensor<4xindex>} : () -> !tosa.shape<4> + %1 = "tosa.const"() <{values = dense<35> : tensor<1x1xi32>}> : () -> tensor<1x1xi32> + %2 = "tosa.const"() <{values = dense<-1010580540> : tensor<1x1xi32>}> : () -> tensor<1x1xi32> + %3 = "tosa.const"() <{values = dense<1515870810> : tensor<1x1xi32>}> : () -> tensor<1x1xi32> + %4 = "tosa.const"() <{values = dense<536870912> : tensor<1x1xi32>}> : () -> tensor<1x1xi32> + %5 = "tosa.const"() <{values = dense<4> : tensor<1x1xi32>}> : () -> tensor<1x1xi32> + %6 = "tosa.const"() <{values = dense<12> : tensor<1x1xi32>}> : () -> tensor<1x1xi32> + %7 = "tosa.const"() <{values = dense<7> : tensor<1x1xi32>}> : () -> tensor<1x1xi32> + %8 = "tosa.const"() <{values = dense<1> : tensor<1x1xi32>}> : () -> tensor<1x1xi32> + %9 = "tosa.const"() <{values = dense<9> : tensor<1x1xi32>}> : () -> tensor<1x1xi32> + %10 = "tosa.const"() <{values = dense<17> : tensor<1x1xi32>}> : () -> tensor<1x1xi32> + %11 = "tosa.const"() <{values = dense<0> : tensor<1xi16>}> : () -> tensor<1xi16> + %12 = "tosa.const"() <{values = dense<23> : tensor<1xi8>}> : () -> tensor<1xi8> + %13 = "tosa.const"() <{values = dense<"0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002900300037003F00490055006200710082009600AD00C800E6000A00330062009800D70020007400D4004400C50059000500CB00AF00B700E7004600DB00AF00CB00390008004600030054004F000E00B10058002E0060002500B90065007C005B0072003F0055005B001700680051000000CD0048003D00C000360064007A002800AD00F200A0003F005A00A6002C00850010003E00DE008200E20062009B000600BB004C00CA00E7004A002200DD004100BD003000FE00B6004F00EA00730003006C009C009B0010003B005200E10070004000B10088006700AA00B90083002D0027001500C4004600BB00E00062008600E9004F00BE00FF00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100010001000100010001000100010002000200020003000300030004000500050006000700080009000B000D000E001100130016001A001E00220027002E0035003D00460051005D006C007C008F00A500BF00DC00FE00250052008600C20007005800B4001E0099002700CB00880063005E00810017001B001F0024002900300037003F00490055006200710082009600AD00C800E6000A00330062009800D70020007400D4004400C50059000500CB00AF00B700E7004600DB00AF00CB00390008004600030054004F000E00B10058002E0060002500B90065007C005B0072003F0055005B001700680051000000CD0048003D00C000360064007A002800AD00F200A0003F005A00A6002C00850010003E00DE008200E20062009B000600BB004C00CA00E7004A002200DD004100BD003000FE00B6004F00EA00730003006C009C009B0010003B005200E10070004000B10088006700AA00B90083002D0027001500C4004600BB00E00062008600E9004F00BE00FF00"> : tensor<513xi16>}> : () -> tensor<513xi16> + %14 = "tosa.const"() <{values = dense<"0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000100010001000100020002000200030003000400050005000600070008000A000B000D000F001200150018001C00200025002B003100390042004C0058006500750087009C00B400D000F000150040007100AA00EC0037008F00F4006800EF008A003D000C00FA000D004B00BA00610049007D000700F60058003F00C100F400F500E200E1001A00C000090037009500780043006B007200F3009C003B00BA002700BD00E4003C00A7005000B800C100C1009000A0000F00C600990067004600B300C9007F00F300C0005D009300F7008C00660077007900F6007B00FF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100010001000100020002000200030003000400040005000600070008000000000000000000000000000000000000000000000000000000000000000000000001000100010001000100020002000200030003000400050005000600070008000A000B000D000F001200150018001C00200025002B003100390042004C0058006500750087009C00B400D000F000150040007100AA00EC0037008F00F4006800EF008A003D000C00FA000D004B00BA00610049007D000700F60058003F00C100F400F500E200E1001A00C000090037009500780043006B007200F3009C003B00BA002700BD00E4003C00A7005000B800C100C1009000A0000F00C600990067004600B300C9007F00F300C0005D009300F7008C00660077007900F6007B00FF00"> : tensor<513xi16>}> : () -> tensor<513xi16> + %15 = "tosa.const"() <{values = dense<"0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000100010001000100020002000200030003000400050006000600080009000A000C000E0010001300150019001D00210026002C0033003B0045004F005C006A007A008D00A300BC00D900FA0021004E008100BD0001005000AC0015008F001B00BD007800500049006900B4003300ED00EB003700DE00EE0076008A003F00AD00F1002D008600280046001A00E900FF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000100010001000100020002000200030003000400050006000600080009000A000C000E0010001300150019001D00210026002C0033003B0045004F005C006A007A008D00A300BC00D900FA0021004E008100BD0001005000AC0015008F001B00BD007800500049006900B4003300ED00EB003700DE00EE0076008A003F00AD00F1002D008600280046001A00E900FF00"> : tensor<513xi16>}> : () -> tensor<513xi16> + %16 = "tosa.const"() <{values = dense<"0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000100010001000200020002000300030004000400050006000700080009000B000C000E001100130016001A001E00230028002E0036003E004800530060006E007F0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000100010001000200020002000300030004000400050006000700080009000B000C000E001100130016001A001E00230028002E0036003E004800530060006E007F00"> : tensor<513xi16>}> : () -> tensor<513xi16> + %17 = "tosa.const"() <{values = dense<30> : tensor<1xi8>}> : () -> tensor<1xi8> + %18 = "tosa.const"() <{values = dense<1073741824> : tensor<1xi32>}> : () -> tensor<1xi32> + %19 = tosa.const_shape {values = dense<[-1, 12]> : tensor<2xindex>} : () -> !tosa.shape<2> + %20 = "tosa.const"() <{values = dense<38> : tensor<1xi8>}> : () -> tensor<1xi8> + %21 = "tosa.const"() <{values = dense<1272909607> : tensor<1xi32>}> : () -> tensor<1xi32> + %22 = "tosa.const"() <{values = dense<31> : tensor<1xi8>}> : () -> tensor<1xi8> + %23 = tosa.const_shape {values = dense<[12, 1, 1, 64]> : tensor<4xindex>} : () -> !tosa.shape<4> + %24 = "tosa.const"() <{values = dense<[-201, -12, -97, -129, -78, -117, -229, -125, -18, -155, -202, 209]> : tensor<12xi32>}> : () -> tensor<12xi32> + %25 = "tosa.const"() <{values = dense<"0xF03FC5D6F6C222E4BE17CD3EABA2B9CFFB0DC0270CF9CF100DEFFEF6CB1828D3BDFC26C0E1EAE809290431C5A43DDC0BBFE03CC7F50AB2C80534E2DCEEE4223D2FE4ECDE2DBFFDC3C900E118BFDAD6BA362C4B09DDFFBAB9B2CCC0F40237FC2DFAD4052D27C1D405BD0DB934BF0CCED8B9BC2626CAD503D20A01FA431BED2100BFDA1CB1A63AC6E8E4E00EADCF213D18C5FEC6B3EBE7A82C042E310D2DCBC7EABDECB817F1EA3B3C24DCD7E511CEE116E2D3B4C8251F35302DFA3AC1B2C8B1B231A829E2ABC5CCCCF539EDB4C1ED43D122182108C7C1CFBE25FF19ECC2D4DA29D5DB0629C50BC7D702C526F2D83901CCDACFCECFC8D7DCE92B1CD63C0FCC3621272DDBFA243723C804BED521AF3DDC4DD8B2EDA7DB291E9DD5E0BE01031604CD0CE43823A532CEBAB20503C3F8C1C9E0FEDBB7D9DEC5402EA5DD2EC10B1716ACE74DC4F648CC01FA2CF81B48D3C0A444B6B2F3E415CB1B1838D7BB0532E1D9AC183A2622BBC7D2AFA3C932BCB0CE1E3812CDFD10F5C1DA03A334EDBF230BC0D3B8BCD942E93AC8DAECD1CEC9FAB1250245F2212BD0061E3CDD3FE5052EECBBBFF9E71DA94EA82E3BD8CFE1E624EDE940C6F0D2F7E7DC092DB2D8D400F5C4B4DDED2D45DBA2FDCCE9E01B07AEE2E0BC1BBBF1C6B50E2CC3E4B4A7D248AF3947B7C5CC0CD6C015A81AC4F31D402FEEEAEA39DE161517451BEEB2ACE62FE5F2B51432CB17CCFBBD3B0410B401EBB8E2FA25FEBBD3F4C0C22ABFE3F72437E13024E5234AEE3DBE0EB0F69FF4CC2121D2ECC343E3C3BC499F1E11C0F7C8EBA1C3A2919FC2BD00B826E1E34F26D014FF1A0CBFDA49CFB00DC2ACF724B2BBB4B7F5BC2BE7F6B2F7FE4B41C632000A082D0ADB18D4F4D9BEF3161EC642D84EA5D50D12D6DE36C5C7B8C5B62F4281CFD30C3CDEE1B30F242010D9CDD392B0BB32B0D2EEAFE41A0ACEC7AA21DDDF9E97CAF618F54C433DD4D7D9C09922CC8D27D9CCB0D2A6DDF6EA3B07E0F149E0E838E228FDE1FC1DDBE51E40372B1C290F21DCEBD2042235E9E1DADDDB29EFF4380D230EDE2BF7D537E6441608F9CFE921DF082E45F8F7"> : tensor<12x64xi8>}> : () -> tensor<12x64xi8> + %26 = "tosa.const"() <{values = dense<[39, 38, 38, 38, 38, 38, 39, 38, 38, 39, 38, 39, 39, 38, 38, 38, 38, 39, 38, 38, 38, 39, 39, 38, 38, 38, 38, 39, 39, 39, 38, 38, 39, 38, 38, 38, 38, 38, 38, 38, 38, 39, 38, 39, 38, 39, 38, 38, 38, 38, 38, 39, 38, 38, 38, 38, 39, 38, 38, 38, 38, 39, 38, 38]> : tensor<64xi8>}> : () -> tensor<64xi8> + %27 = "tosa.const"() <{values = dense<[1824001185, 1464422583, 1191998660, 1448549524, 1558062035, 1114383980, 1955242231, 1111567794, 1509816422, 1864078660, 1093322688, 1919662877, 1951550204, 1260853851, 1362976591, 1304614491, 1407537609, 1636721994, 1303219405, 1415067732, 1158503075, 2139542874, 1905136026, 1095829156, 1173043790, 1714109210, 1578667897, 1984635666, 2077264356, 1917307481, 1208870903, 1260124507, 1659443997, 1115199078, 1149297447, 1090494997, 1427702977, 1283254416, 1420972374, 1099721349, 1112638156, 1849886395, 1413358068, 2063798576, 1340739673, 1596396688, 1183430547, 1232234352, 1109801604, 1196112886, 1241374949, 1780025729, 1308315809, 1540303373, 1343682490, 1114823758, 2056887317, 1351654536, 1404296080, 1399142935, 1475245830, 2053620776, 1352991166, 1074813458]> : tensor<64xi32>}> : () -> tensor<64xi32> + %28 = "tosa.const"() <{values = dense<[8054, 2185, 5283, 11, 3639, 937, 7329, -5293, -3472, -373, -4983, 4707, -3711, -629, 47, 810, 7117, 2278, 2679, 2358, -754, -2610, 1278, -1116, -4122, 2405, 634, 4136, 1181, 5182, 7593, 2998, 149, -1143, 4284, -511, 3049, 2317, 1318, 4269, 2839, -4019, 865, -898, 274, 3737, -3853, -2724, 567, -4997, 3725, -2470, -3567, 758, 4748, 1042, 3191, 2527, -1997, 4681, 345, -1988, 8113, 4799]> : tensor<64xi32>}> : () -> tensor<64xi32> + %29 = "tosa.const"() <{values = dense<"0xEC1DDD8EEB37D810DEF4EFCCDBFEC93603CF04B22FDF6243C477F3E0F67F1EDF123922EC06B366D09C4F0EDD0038DB19A30F15E2D9D2CB8C3907C38BA3F708F028CE3A0C290ADAFDB134411C0311E5DB1EEBD358DFCC29D21EBC5EB60EDB0904467A35E22B10FA137FD2A2D8F90EDAA5E6D7EA0C11C3163AE90CE89AF7EE0034CC84D0BC00A2C200AB2AF39BF794150BD2C243E426E423E82D69F660067FCA040F08EF15C894A0E1FE252574ED43FFD5B5EBCEEB66F7FF2854AAA7D4F83E143FEFD1050ECDF6FB25F7F512F8221750A5BB0C2AE7C1F02E050EBFE7F0FDE517F430D20418E902EDF6D4DFE7F200E0EC50FC390D1DD17FEE1D22FC43FEEC43F8F8FBF832062B42260F06FB1D2FFE56FACE2C0CE7F2D601D3E9091B38A526CF5613E52FFBDAFC037F16E932B8A41D18922FEA062AF6E3CB2ABBBD0622A3BEC8DC0905DBA8F2246DDD16050A0315BF37FDFBD9E65029F92F1CB62EC91C1C22E2E42981E8F7ADE81FCD2A48E5FB2C2FC769140B06990430560D2111E61FE0DEC5112E270C36C00029DDF3C7FF0139DE0FC2F27FBB30BBFCE71AD9D502128BF2C841D23070FA1439263732CBC53BB4CA6A00B9E112451794AAC00697445791BEB889BCF4E65644CDC1162017EF1DF728DF7F0AF6092FBDDBF1E22F09E2D220FDE3170854101FFF00F6F9E8D8100DEDE2C2C85B1F462427320AEA47FA1100EF1EFC1AE0FAED03F32E31FFEDFBF5F224F3E6072DD714C627FAF3F0361501E0F6F5177F15EFFBFCDA0E5C0AF8CEE03811353D16F203E0DCFD1BDCFA3CC6172401F5122C0150FDEB250A09D104E702E9A30CE4A6E59F49C716FFE102D3CC035E08CE7FD4F3E90D172CFB06D3217C15EF11083759DF0CEE65ED2BD5F52906F51AE60A39E04DEB107F31CBBF0317CF0E30CF1EBA45D2E61828031607D0E22AE7C15DF90F120B34C8141ADAE51101E162173CD5D4B554F12E44FB35FA26011CDDE5EB3924D73FCC0D34306D7FE2D91628003EF353ACC87FFFB734AEDDAAECD9F06781149F4604EC3DF9E903462848F8EADCAE103BE6AC0EEB5904CCA40B17DF0A17A29BD4B01DF0F95D11B807F34446E43D08FCF77FBAC8FAFBE7A7E2BCFB0103B8EBF1FEEF2357A4260A1446D102F5C2F7FC04E91A5F1213FB242A5D0114FB0CFA1822FE33EAE4D741EECD5B2B0A19C83038D8130B55F7D7360008DE4FFB0ED6E316E841C71C1B0BFDD6C15F1FE6E8E4DF28193D1640BDB881F653C3F26FEB2BA0D1F0D33CDEC7D2BDE505D8E60CEAE7D5F9E2E21E2DEFF344E71C02FDF4FDF302410C7FF305AAE70EF3161ED006D5ED1E0E13EE3D0F130914E11E330BF4100F04EC12FD2E0E1FF912C52A1BD4F9BEF8214CF20706C6BAC667FB02E331C97F1BF1D93FF76412EF3EF3DBFDF118FFEFD2143E0CD42204EC00AB27F9D8031D31F7D7ABF6F8CB3ABFBBF2C6DFE508F2E3E5DFFF022B24B120270BB8E30AFE55D7F8CEEEE840D3FAFDD5CB160CE6FC3FD62925D90CF1C65AD63825EB917F019C30F445AFBBF12BE8F7EFB1C8360CE4DD081CE0E7D640E4EA047F9848E93DEC1CC71F130BE1FFE2F4C7C9D1DCED73EB1A2346F8CC403033E90DEB1E081004FEFABBFB1BBCC464511FC0DACBF60A010AE21D04D9F1FE72E5F0D515BF311E32014BF5221719FB21FCEA13030ED8FB1E4A13D47FD0DB21BFF92A220CEDDAE452F29A280ADCD0B1CD48E6C4A83B7FBCA250DEF2ECC3EA1A2320EA219B0DF1D60B173DCED0DD113325D5065C27161C2F380B59FB28EEAFB8D1AAE2181531EE9466F328170DE9EA0337ADED16027FFBF2F6F82FD30335FC12F750C8CA00F5E6D1FCE3E70301D6DBFCD6D1FA50D01413F3FCE10707F8E31FFA1BFD3307FF020F21013745D4FCF4D80F29C91123D339E3C63CD15B40064B110A0656E0B53A23F00BF221DD021CC610F8BF9EF2473AECF9BBCFF5154C0F813E0EEF293FE5FFF05EEF3FE02B32C6FF1AF8F3D0F541095BAAD10DE31301E60C3016D046E905C755A401ED1C0D4314C98812074A0B290101F41E193B2396B916CFE1E3EC3DFE29FC5A816EB01DD3DC1BB02BD7B21422C8F96D21A6C50FCB4007F70E3333E92FBC683FE405DFE33D9D6B3372B4EDFAC79D2C183104D10561BAD39BE8A3C311C9305E29E17F3D53E2DE2FC33A4BC966F8BA7F470103DC01D2062C5BEAB732AFE54E17EFCFD0B409F0DA1E3A2E7A2BFB10BD6B192602C611F91933ECEB2F103610185E03ECBE1B4EEDFCAED44E44BC19F4D6FC19E8D10303DFF2FE0C0CFC10E614A87FFCF8FEE7EF15E4D73E3A3CEE1ECCDDF01E0DE5DB26E9DC23C2E0F6D80F061613FBD164F917FD091EE00EF9DC080BDC32E9ECADEDEAEBECF900F3E4045F2B9E7FE319F3E6270F13CA4B0E55EC1E2AC1183A06C7BC10ECE164E7C53ABFF5DB133F36F0F3A728FE11C9DB3B30B00B28C7A0DD16C0C5C4AB21DAD1FA00E610F79A4A2DF9FBFBE6467F014703CB34013370E8F31DCCCFFC05C9250E000646C607BCB5EC2014F81EF2F4B5D2F51024EE02E6CF0E670413E5E414083AEF2ED8D40DD06127091BB7C161DA291D7FE26109B3DDE5DF15D14C14003AD6CC2BCFE527EF09E70814524FBBDA00DDB8E70C080C1BF7B5901855CFD8ED14F6F4F371D6175AEBCC050C134E080A64F9D3D3AA2CE2FE3FB3E207E70DEE45E1271845810AFAEAEF17FA0AF4B6D6EC1721A0C0E002E758C85DD4F2EDAFEEA10F03E1FB13F2E045D2FAF810EE63DEF02C08C1E6C7B0E47F75FA32DCBF92360BC31CECBC06DAB5C3FAFD2A06D9975E27CA39ADF5BDB508CFC218C9E32446121CCE171FDF211EBCE67F2AB8E0D3C641BC03B516B24DEA321493DD2DBAD8F8DEEB3DE0F00524D4663F164AD806D20BB0A34C39A0E033424DE9247FD3C8E61B2804F72EC2190860E2D4AD29A2FAEBCD2DF40391B8F7F178DC40E8CEF0F211451AAFBC2DF4FC3FE560F80A2468F235E9D2CFD41229063C9CE7D5D11C0B14AEF5E9D81FE00A08BBF1531DD415FE2FCDD8143E4056D8310A7FEE122217F9393E390FE0C73CF7FA33ECE6E1E144E9B4CD0F0FC82539B92CECC1B40BF4DDED1023C9EAC31FF6FDED1FC7E7F6EEF72CF6D27FE10CB542C819130F0315782CD037EC39244412DACE15E10FCFF6E7DEEBCD430E0014F02AA0CBD6FCF4BE18F6891741FC1E0FEDFCFF0325D44D0EDE04CB47FD042C0F51F0F5107767FDF604EEE8D20561A6BA211AF826DFE90EB4FD6E1628A836810030E3B4F3342804EBDDB5D0111216E1E50BD100FD7F0D012424F316F561B21CFBFA0FEE08AF080AABDCF9DA1F0E0B1EF320F9C73BDF0A2E3E1E00F5DB50EDC1DF005CCBCAD436F8061CF2F8EF7FAAEDD5DAFB31AFCEF212D82A0DD816D070C6001602CECC2EF728A113E5EDDC1EF2150DA5374B1E2F43F305F0D61E21CEC457F8121C99E5FAED1A14E0FA31E2130D24EAF81C10040C573326E50FFFB1FCA5E906D3EB1008C6F610DB81F6E1FF66BAD9F6CCD9D30D10C05634E413EE2E4D290BD73FDCD6FE201A5102B6D1D80B9AFBEC9C0CDDD60E39F7257FB6751FF440B2F41E19035731A1D525ACF2F6FA26BCCD1A3315FEBFF7EA2E0009E8FD100548CBF14ADAFEF1E7D30D150BEE294909F9D9CFBC08091EEEB2102766022A1AD7FBEEBE95BCEBF4FB1E96FFDBDB111F1D27811923DA18A9F4EA21BFECE03D1D20C7017DE01F16AA0777FE431466753BFA1811551CF22119DB0F77D85F2DFFD2AB1A1811ED0295DF9782C61916B32737B9CDD6201053D7FB03E3BE7FECDF3E6130FEC4F6F44FF8EB3908B7551AE11C4F1B0A941EBD2D33F5DB810BBEF9F1E107FAC10AC928BE3ADE185712F2F02E5AFE2DDBA8535919F2FFEB0723C4D308F4DD0CD1E45D4BD300060034AD5438A9FAACEDD9F73AF30B22F10C4363E21531F215CB272E3E107FF1FCB9FA00F91DB0A5E895AAF419ED0401590325FF0657EBF93540F103E0B0DD4C2725AB133720E0D0D8C701F02516FD02E8F4CE550DC9D857C401F420EC3632CE2003E31C38FFA509E9DC4089161C8E474C224DFB310E07E5ED0F7FB715B6BC24FD07240919E403E44726C1CED9DA06AAA2F525C0EC2BEDFD2B0DE702259BB12EDADA7EBAE4496E29237F34C9253B12F0BBD5C56A8A1FBC2FE3C0EFC03ECA0C4FF9DC4D03D5FAF17F3003E01025F8FD34C609DC5AE3C7D4D90C0813C1E5160CF0E10A420DFC34F34603020DF1EDEB0CD320FBED0C5A10FB0F5108114C01D7E6D30E3620B51D05BDD33A4BE4E8C7F935F11BFB21FA1FE5F1ED75F313E0FA34CB6A1149C42B100DFD28BA6E7F0C1A48EAC8D623DF28EE01D9D000D2601A2CBDF109FA07112FF803E2E19D0BC6CBCADB03DAEAF2D50E27D3A3FD353DD332FD6D6DF313E90A6C177F6D0BE62226EBE5F6A729410CE422B9C1CBCBF11AE0D3320EF9E2D42EF61AD60A064523CBF22E2422DA100B1A097F28D4BEC4D1BAE42F1AD4EAB21CEB03EB187E110FF9E659D500E3F7FA2BF5D81444F919D22B28470D39012FAE3B0D201DBD1CE218121B03E3D6CA4217DD093FDFFA64F4D036BFFDB900D20B57BAF299DF02192D111914DCEA317F13BDE1E916F0CE1A105AF505E12C0AAE0107AFD1DCDA2807B66BECE6111322FEEF270D0DD67FBEE952BAABB620CB123B38B4C8FAA1DF31F6DD021ADEAF2F071974B10E18B4CD78285807E32B37471DE4E315FEE0184A0BF30E0D04EC9DC717D40914001106473819DC6BE9630411123944F71E16EC302B0CCBBF291C0CEB01CCA85EF5C3E3C71DD32B644F33DBC6FFD4EC21F07FE3A2DC3CD12AD60810D11ECD2F3DE7C3E51AD51D11D227C60BCBC10FF5F012F4CB9922E80513FDC1E69D206EEE1A3A0818E301D7FBCB0B7F0631372ADA1403F8FEFF613FEAF096EB51CE16E2F7F539D21DE73FCDED7F00441B35E71125DD05F4F6FB0992E5A9DAD3091AF7F1F92C3016401B35C721B7F04EE3EEC0E6F1A3EAB8E0FA20FED8C2A91FFBF0F5A9F7EE28F714F40D0CAF7F2FE3FE2CDD4CEAED2D3CE44D1CD04200C9F50D2BE7FEFA1B0015173FE3DDEFCDF90D2A0CFA3714BEEFDFF9FCFAD5D5FE191EF5F80062DCE9FBB400DA345043100B1321D1DEBAFCEB02C07FACF6ECB4EC20D82FC8F1CE1B07DC01C223EEAAED63F866A41AE9CE1D228DE55B18411AFC7F5712D5FFFDFF002C1DE3D3A3F531D6F2D8E6F4F4EBACFE32ED263AFD0D01D228592CEBE554EF36C5BABD17C6E4ABD86824C5CE3645D3E031BD3A189D12F8F9F7031F7FFAFB1B010343C5F7F3391411F5482412F0DD0F08FA05F9E4FE25E9EDFBCDE05703FB0E0EF91733C93CF602E7E5113ADB1D0ACA16B6C0EA232311CDACF8EEDDF20FDEBF0609C119FE08D4BD1ECDF0140D073CEB5EF449EB57CBE311042706C781E718EC5AC60B01070F223A03EEBAFA2F33BD28B619D1CFFF4E2BF80C302CFC3DFB3F2BF42A21F1DE26E2C21DEFF2FAE42A1DF4CB15B203E502EF06E84A0514DFF616027FCCC50119E13FE01003EE0B0703F9D4ECDED2E4DC2B140F336F3AE83E2145E2EC440511D97FBCBA4011CCCBDF24FCFCCFC1CCD5BCFFDBFF0E41080C00E213D31EDAAE05041F6D142FEF5114E92AD6C9F60108D81CED2FD5D61411F16C0204FED112F3E310D40BE63B0FF1F3D32A048BCFE8B6CF42AB01DE230216FAFBEB3FF440BBB7FB4802F7E30C00EAD6CCF023E4FA468195EB062BE7C44B6BE6C8EAF5C93713C304CDCFD22AE8E21DB2D50D01ADE416DFD43A810A224B273DF48D885B6B13C1DEB645059EC5F458FBF207E8634DD81EC1CD36D15D"> : tensor<64x1x1x64xi8>}> : () -> tensor<64x1x1x64xi8> + %30 = "tosa.const"() <{values = dense<[39, 38, 38, 39, 37, 37, 38, 38, 39, 38, 39, 37, 38, 37, 38, 39, 38, 39, 37, 38, 39, 38, 38, 38, 38, 38, 38, 38, 38, 37, 38, 38, 39, 38, 38, 38, 38, 38, 39, 38, 37, 38, 38, 38, 38, 39, 38, 38, 39, 38, 39, 38, 37, 38, 39, 38, 39, 38, 38, 38, 39, 39, 38, 39]> : tensor<64xi8>}> : () -> tensor<64xi8> + %31 = "tosa.const"() <{values = dense<[2084203906, 1135273527, 1323844707, 2085884372, 1162446761, 1403747907, 1412726486, 1293304806, 1226031296, 1077017893, 1905344835, 1085363524, 1471932689, 1698580243, 1165461292, 1909817918, 1110557410, 1772675815, 1112431489, 1437836808, 1698016518, 1265808023, 1322909533, 1597261431, 1776715779, 1459166656, 1596442806, 1549375138, 1409478184, 1378745147, 1519435676, 1302827700, 2016292669, 1430289341, 1592262485, 1116946833, 1281899706, 1816938533, 1667701589, 1311881046, 1238432858, 1859799204, 1374368727, 1270050396, 1749014101, 1275041310, 1191867819, 1193650588, 1920202844, 1258796266, 1776374637, 1163586353, 1106506165, 1465398033, 2125625436, 1167828248, 1591846385, 1601309617, 1539853009, 1191382973, 1732818488, 2053447254, 1124095600, 1998364387]> : tensor<64xi32>}> : () -> tensor<64xi32> + %32 = "tosa.const"() <{values = dense<[-4510, 6500, -4117, 6670, -2947, -1307, 3808, 5063, -7319, 1877, 4577, -2181, -1811, -1113, -3775, 6276, -4514, 9960, -1867, 5517, -4308, 5367, -3935, -4482, 3461, -3261, -784, -3902, 3437, -1670, -2841, 1347, 8072, 6947, -5154, 5662, -4427, -4098, 10061, 5846, -1833, -2784, 6148, 4893, 2049, -5869, 6881, 9193, -4812, -2104, 10761, -3345, -1222, -3296, -4532, 8820, -5435, 3502, -2941, 6735, 6708, -3185, 8285, 7592]> : tensor<64xi32>}> : () -> tensor<64xi32> + %33 = "tosa.const"() <{values = dense<"0x4E817FB17A7781F67F7F815EB97A658172A970C047A2524C81785A57A4657FDC89A035810C7F83D65F5E8181C055AE846945BE1F7F7F6CD159AA7F8C8670BC9524A272F07F7BB6C65B82B8553B7F60D27FA9549546817F74BF36734C14416520C9921F87366EA2C8645C90F8817FBC977FD7817F4C634DBA64E654DE0A4F9CD97FBB63DA186898C125ED671E5C6D10BA688E53A729DC5B7FCC4450509670671589F12FFE293BB5D54076ABA52157E9C874B69F6A7F584C0659117296B061AAEBFDD411E4F501F9AA2706922681281D0017AA080650E2ED27E1000E28D604F99DD1EE3DB105E5BA810EFD00DFDE08D9EF1342DFC5EE0A15C220D8070193F1D8BE12D81FF327F4EDC33594EA292D30160210FEEDEDFAC7254CE818E92020FD0400EFE90DC610F9D6D11119050F031FCDD42942BC26D7FD1DB725E6FE2E3401FAAC0EC817E142E807C83733071B3B30F61528C0EFFE3FD53F1111F9072CA30FFCFAF8F54EF30EF4DFE930FB00E41113CDD827BBB91BE71D02C53209120C81EFFABB65DE4F8A477A939C2B27983CAC584F9D67AA7FB747834552B27CA27F817F7081ABCD06A64E5EB9897F73A39EE2559385E17FA394694942BC208149BFB0579FE01BC95AD45A7FAA813A8BC33DEF5C7FB15CA06E817F897E41C760976343755912D981348E7F5B86B17E719EE4FF4381810B2CAC37313E558169D343A7203781AA66976781137EE79B66BF2C813C5E5D965A8161A53CE06016BC7F81668F6B711F81927F1B5D4F81984F7FAF944555D2A612D6AF745E697F887F127C81997F8F81"> : tensor<1x3x3x64xi8>}> : () -> tensor<1x3x3x64xi8> + %34 = "tosa.const"() <{values = dense<[39, 38, 38, 38, 38, 38, 38, 37, 38, 38, 38, 38, 38, 39, 38, 38, 38, 38, 38, 38, 39, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 37, 38, 37, 38, 38, 38, 38, 39, 38, 38, 38, 37, 39, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38]> : tensor<64xi8>}> : () -> tensor<64xi8> + %35 = "tosa.const"() <{values = dense<[2025378930, 1853268005, 1409869296, 1223648835, 1356098649, 1238684217, 1545322795, 1160665067, 1713288826, 1828523025, 1488739118, 1404881897, 1607296644, 1470611896, 1466914064, 2071224350, 1758221802, 2051430334, 1397765462, 1371468960, 2144411681, 2073220105, 1519671443, 1303223903, 1485002757, 1672035990, 1918039702, 1500810706, 1936900439, 1367392853, 1826336091, 1533100337, 1742257852, 1133558830, 1365724489, 1091599386, 1571329492, 1172135792, 1840361031, 1440495274, 2112512260, 1151235746, 1755847353, 1582255054, 1142253904, 2063116318, 1972792000, 1287432496, 1572690463, 1812892434, 2124267345, 1096073137, 1104506779, 1605722822, 1475727341, 1432013576, 1733107970, 1735776934, 1115110499, 1373479897, 1565784889, 1217106145, 1729441337, 1821447108]> : tensor<64xi32>}> : () -> tensor<64xi32> + %36 = "tosa.const"() <{values = dense<[554, -631, 4382, 3491, -100, -688, 1889, -2824, -1989, 1783, 1401, 4033, -741, -4437, 3211, 1175, -3361, 1240, -1804, 119, -6450, 3318, -336, 1929, 762, 1604, 258, -2503, -1498, -710, -1811, -397, 2073, 2023, -753, -4233, -4305, 8239, -367, 2522, 1994, 421, 6065, -1348, -1353, -3586, 2175, 8644, -4555, 573, 2280, 7853, -890, 2027, -3353, 1069, -3553, -2864, -1680, 2123, -1355, -1229, 3051, 5065]> : tensor<64xi32>}> : () -> tensor<64xi32> + %37 = "tosa.const"() <{values = dense<"0x9ED215B7EDAB1535E164EDDC4F08686FCA138828C7EEFDBFCCC627138E65D151951A51957647BDD909CC429D66A15D5D2898FC4CD318B099066E05847F74D840BBDB31F408F00D18B243FCB1D719C0C5000025C526AE07F00FCD6926DA43887E1BE1E4FA3FED0FDF49528119021101F7F528E01A3567042BC11601092D1EBEF62A36B0D817EDA922DCFF8AD25BE5395BFBF1E15331051BE0F3529F2BBEFE10D7418C1CBD10C01592D118D7E8E6DA10531737E5C9298134F8E669DEE504D4F18DE2A0502BDABCFED9FBFB2BFF00523EC8E10C347F49D1023C5404C70A539B1711D016BC8E2009BFEC7AFDC31513064111C301F733D9F4DE30B4DD8311EDE12519FDE93013DDF2DEF5CAE3C912354EAAD40D0AEFBF6AEA81C2D02B1104E127012733ECCED621E920DB004802E50FE6C22409FA0BC3C5DCDF204DE4F755F60C5BC0100CC5E10A1CB03A8134FF39001DBBDDE10A1908FCE60CE30A23E1E1BD79EB2134B0F3FA11EE0C19160F030D5CF1F5BD3EDC98F9FA26DF43EC2F0DEDBFC5C6CB2BD2F01401D6B50C2026F20CDBFAED190DDCD53647EE01FB33681135CAE33808CB81E2AA27F537EA161034E2E8D12FFFE73A0F1A3B0913D9D8E0E11EEBA817B52BFEE2ED09F1E91A1FF62B1B7FD915D32BC3053C2034F3D70CF96323D731F3DB09EF05EC0DEFFB1FF9C6E0EED4D5FB123811FF2AFB10CF0D04E734F40F18F0F7DDCE0709EFED102FC626DE33F108BE26E32B3DED280603E77F27A5E41538411114190510CADD14180128DAFC1EF1FA1B32F213304CE3ED2AD115C4004B1EFEB437D62AAF0F2FD81135CD0E12195602FB0E24AD0ED3D1CFBE3E81C8BCDF57071F47A843F81A01F1D70C8A15ED300048154CE0BAA9AFDF0C0A139AC5D74A390F4232B2120477FDF0FCF3C2B5EEEA4FFCF1AA35561A10FD00EE027FD02E1B0BAE2E9EC7A0FAC82547D9EFC254203C039AF7D1F4214653D53CA61EE18335142924FA9E4EF0EBC4BBE0A334DFED04D1E3C1062DED810626FAC3F3FECF24D116D2150326EA11FF50C00CA44DE11DE4D1F619FB9A063810F0CC0C5513EE0806CE4AC5C43102A55DE8EBA5366B221589FED5EB2AB8BFEBE7EFEAEDCB6239BCBFF13325DCAFED3AFF1A1C142DD13A5E43D700533300F172D381239CC91931DB1584280A27CD8121B328556AED4D0AE2089E55D422EAED02102E5F17F4E3D539FD0ADAC3431CB0BF3730403925F3DB85C933E40EAAAD22DD12F7DE2DF1419AFFDA44E00F9C7AF34D81D3D124E01CE8DFCB950EC9249994725220EF05D7F3F8ED29DB6632D310CBBC492E3751E11359262CF9D1EADEF56301F33E92F3A986F2ABF80599ECB937DEFBE22CED26E3F9B6F41BB3D41FC61A03FE094224DDEBF416F41460353BE1F5ECEDDAE2EE0F1927EBF0DB0A28D22114271C4202EA1CB7B0DEF5E67F44B1C7CDDCD9E5F3F40DA03B51090B5752E94DF235CB5793CBED342F1D34E7C7199D7F3C32C333452FCFC128C095B9D6C316FF0914E70C12473BE328BB2B452AC3FA1026EBC8F1122A11FEFED6E8CA7F1F1F09191C110BFBF0E12DDA0ED6D2BDAB38E7010CEA01F40AFCECD743160402E52449030C120AEBEAEDB9080819E439B749BAEEDDEA06EA3407A41A24CF3A0619E944E0FD1F1807D6124F3C390AAEB8FEDC5438ADFABEE0F1F93CD039492EF8FC0EE3300E8CF7F00D0B100A12D62FDA81FBF29A35D7FF4410DE4C2EB832065CBC04B968CAB9AF08F5A642F6EBF518F11838DF26F444275DB5D5BF5FD99CE1D42F7F45C9E806894E4EF642C4F63F1F1FAB26D549571EE915D0C6014A7F2A41E7081C8F6811D1058DA2573F4F2922F00735205B6C980041612542FB9BCAC11514F7ED85DD42E1FE3B27E9573E1135F3E5BF2C3919FCF3172FF32149FE03E2D3E61E1703E8D9E7F9FC07041318E1F70ED1C0B0EC1416CBE835EDF2DC81B50B031D4AE648EAA7CAC42228F0EBD0C13E101521CAFA0A1F26D919670902FE1AEAD64D34F0CCAF031DFBD2D6F82919C430AFF800E2F461C10A212548F410F6961AFDF0EB0C81FAA88D0F5552CA10E6172B1C26DAE1BEF8A30C02EC003E1DBE3AD93121C135B91326CAA41EB2B9BD381BFA32ECB92B1D13CC1BDAE226DE41EEAB3426014975E90A1214D89E14EFD81139C5F5FD81B70A0281E9D11B2BF01CD9D67914D49F86D1115CD1C133CEB9352D44D0164044BA110B3EC005F2D8CD0A6708BB1FF26AF1C83CDFC91BE2072ABBEA0B8BF5121ADC2103F027DF295A22D32B27EDF1132452B4E41BD8D5141250274A814C33A6C4E9194E0B1835AF3513C1E3F90F17D82D2CBDB314D3A4C9DE1EADCBEAB21B2BC3DAD3EB2D19202650A8DC00EBE50ACDCF1B006800E6E52C3C0EDC1501F790E3122CF3F6B809C6ED1AF1EB3931002C19F60B7FCCBAF35753F8C4262100DDFCD2C302D11B061C2EC1DDF5E4063C1DE326491826210A0BA1E4F1110A817DE526F217A104B0B7DEFF1B359AE40946EDFCF15007F1EDE44FABCCF4090E1AFDDE10070865FC301AFFCCCFF958FC13F9C9CFBCE3555D0318FC05E3EA0C3E166EEFF9B9310B08E9D9C08103E5CCE1D614FDF37923DF48E5070FE6202F0F42E6F4F145BB94F361DEE31517C7BFD728F0C7282C13E93421D30FEAF12CCF25FF13D8D0E61D17E2D91682E93FBC16EAF54EE281F9BA0D3613D7E86512361BF1FFE2FB0E1DDBE439D1DC2748C1240981001BF0E11F764A280E3AF4FFEB3C2EDC22FD025E12EFD517E617D82E5034F508B0D3262EDCFAC32A03C0101600E5CEBC200FD90C26DAB1FBD7BAFDE01AFFF1FBDAF920F3F817FC26EEFA2607FD10DAC6BD1FED1A490107AFC363EA102712C6201D56575C15C305EEE4FDF1CA25CDC03FFFBEF42E3E7F874D11F72FD328F0BA00C0201C64E1AA04DFD7D6F9E5C538127FF2A2E549EE42DEAB3A10D55601BE9122974EEE17E4CFF430EF2EC2D96CCB75DFE0E8B2FE61D22F320D21C25721CBF8DC06050A0809D2FBE11E03ECD32AD33429ECFD34FE281C22EFC8EE3621C7FAEBFE12BADE0824D43B053025C8D61701F3E38133FC18F907D3D4F30732F8FA15FB322E0A522E7F12ECD9CAEBFAC4BE0C2CBAD0C8C51B5AF634DB41F031D003CFF0D8F8F40137173F5306980FEEBBDEC62F0C261411112CE2D5FB2765124131B1EAEA083E3DE2C27FF40C5D01E8B92CDEE12F10E3F82CECEE41032A33CC0CFC22ED97162D192E67AB96E51D1911CAFD041B270B2704FA2CFCD10021C932CD262251F539FC0ADC0A4D37301C618114FD3930E60D242330EF2B61CFC2F7BF24C027D0FD166FF1DBA0FAEC16D811D838547126DE2C34C204D406A325ABEAEDE5D9ABD2C8DE9850D4D588D10D0201AE92E0DE9EF21BF43DFBFE81F7E1F1B5DCA665DBC4425513F108424D0ACDF1E1D1D532C9F72E6652C18B3918BBEF284603EB4DD2EA46CFC8F013D0CEE5E21ECCE2421C0F404481F10430F9282AD712C2C71DD0340710EA2B371237DAD4068B3AE9231A3E235521ACB5CCC75DCBF36C69F10B0EC7AF01B938EBE43900B7B405A3160AAED10826DDC81AFB0718EC25DF47D2C8C5D3E82615F42EEEB35AD34437C9F01181FD42EAF91F061C1BD23F2612DEEBDE134A1A26B6DD23CAC4340548FB0E1094F955C0EFB181B6F3A383F1FCE6D00724F33463D4A933DC2BC3ED0C23E6B6B5D407D92F1ADA19362A914FBE12F905DA14E8D77F0357FF1CB1E19A51DED41A63B9EF32AADE5D3094E33A34F6BD1DD9BDBE27CA66C6313ED0919EF05907FDE22CC0E305C918B727E20CE45212F8C021081BB3102BE84DD9D4CDD0B4DCAEBE2F0C3DFF2A14ADE4CC17FA08F7E9373BBEE6D304142EDC19DD3A0CEEEB8DC7D635D0D9040E3C1FB24105BBBE6DC581E610F72FB463D7B149BBA12CF6350B980C60E6083F3BE8F7FD590A8114205DF5A3FFC6C0EEC430B08928F8B6D7312E18420EFFF42822F0D50859C72728FC1E1E17D4CD36253DD770FEECDDEE3F134422B837E5DEADECCC05CF22E00706CA51FAF6EF11BEF81414560C7FEE13CEF118373BE33D17AFFBE416E918D500FAD90142DB132D04EA43CAF158E126E4253635031E28F6FC053BD4D1247FDBEB0EA14EDE260086C5662A1A60DB4D2942F827B9FAB5E004115B2E32EC02D13605223A120AB027E7EF16D7BA02E1E8F5FA3FCF251ED6EC2214F9E8280A3D2BD502F5EDEE8107C41804FB2D060039D40609050F29E2CFEBF505CAC329E7EBE7DA7AB0D6C92111B0D9814D33D10DB5E310003108F8DEC03F90E434FB28823FADE7583FDC87AAA0C2C70D1013DECED03EC4ACC5FE51D7AD8DDCEBBF0DFEAE6811AF0A472B28182BECFD1D1F445E6527F72926C7E4F5212BD620F1D8373B6DB63B011422C141F4EBC6FAFAD429F6094C5CF002D1E7510A81FBF315F4B53428C3FCF698EA3F2BFDDF2641C3F8F4F709C5B9D2D7E6F0FEDCC0252BCBE4DB56E1BDB70A2F05EFC77F7EEA37292ABE5A4836FFA8E5D504A7AD3F23DED640CA21EC00FF245FC8E5D511151006F5F1D52D0CF010EF2929481FFAD3D622210133CAD3D4A6E91DE6DAAFEC2928D446CA18F2D8CA96081943D681EBD4F402BE0B203D1D413818EB2D18E0E552F9F1080FDDEBDE81FBB347150603B9CFE2FFD01512D5E99F0FC50B00CFE2F0EAF20946CED0D9C02723CDCCFE0BBD3AC0BBDA3CFFC7C2E405F4DC5013B9A95038F54EDA33D3FA82E21D601E22DCFF73023717ACE514826EFB187BD01181F7006245D5DEFEB61AB1CCF1C3184B0AD10AFB6587F4D6BA15E0AC2755F4301ED3EC114ECD431BCB15D9F3F2F5C7BBC918401BF7B8BCE96CFA370DF75131ED0A080CD4C5C5C8A03F7FBDD5E84AE0D2DCD3C5E731E2CF27110A27F2DBB1C1ADE822D30CCB45DF1DF135F50BEB62FC1BDD7FBFD95805DDB2E3121AD61A19BA13EC160219FBD02F2CFE042428A6D419E115233C2A36BBD72401FD25F7172746FF2418E6E3D1A2C6C1BB5E3196E7FB223ABE551711C852D6E5160DFE7539A72D123FF7CA17FCDA420794CDD7FAC5D7F0E1156A34D20EC8DCB00C7F170799ED04E3F2390D78D06923D7114314F14D5632C9FF430CF3D234D6F016DD0815058117BFC9FA21FDF30F3DCF2046F8E037B6F215EAF1BE0331B9FC4634FDF401533648F03ED50EEE06005AE3810C4434EB47E7F0B61E22E9D0B1E2202EBCB40D60E56B5D11113349D112CBEF06F1C729FDFE3A67E6D91B3EE73B093AFC2B001B2E432D12D7ADFAC0E2BCE316ED001835ED3ECFF53AD8442AF230B3FA473BE5D7FAD914048F01DC54B5B5D515031E0F2029E2C61602EB4DD6F00F1ADD2B363F0F12D5B7EF7FE953B60AC900FF66B292FF361603FD0D7FE6035DD0E5FB16CE34EB0F10E0F834174E1327C9A48D1013EBBD5307E2D22802F6FF5F07E75124A3111CD1E9C82313A9F981CAFF0EE3FD1D000C3D0E0EE7D063A9A52D1C09D1FEC757BD1CE7D51543437F1C1AE4F100E61CC6EB7C3245BD12DFFF2753A71713CAD92CD9D455D007330DD2FF2366D10239BF2AF5D136CFDECBDD7F3101488921F78E293DDC2CFC43BE1BCD27AFB41EDCD92137C65F88924908BF411331CA6470260C1B140D1C0D2451B5EED3FAFFA1F740B9BB81F9DE36D6CAA0A3CF48EB432F3615E4F4981734F0FC3A5FAA354522B32FC8F40D61DBC7E2D6F25DCFD3D21D0D0CFE4CEDE71855F0DDD5EFDA1DB1F7AF24F32EAD1FB0221734CE31D1CD0FF6C5F7CDDE18D1DBD8D21994C14A1727D2E6C034271DD5CC4412060714163BC51EDBFB48E48127E800EAD4BBDA12"> : tensor<64x1x1x64xi8>}> : () -> tensor<64x1x1x64xi8> + %38 = "tosa.const"() <{values = dense<[38, 37, 38, 38, 38, 38, 38, 37, 38, 38, 38, 37, 37, 38, 38, 38, 37, 37, 38, 38, 38, 38, 38, 38, 37, 38, 37, 37, 37, 37, 38, 37, 37, 38, 37, 38, 38, 38, 38, 38, 38, 37, 38, 37, 38, 37, 38, 38, 38, 37, 38, 38, 38, 38, 37, 38, 38, 38, 38, 37, 38, 38, 37, 37]> : tensor<64xi8>}> : () -> tensor<64xi8> + %39 = "tosa.const"() <{values = dense<[1625516749, 1498527103, 1371246044, 1283889745, 1597307938, 1730317780, 1382798927, 1151405643, 1449551504, 1955720386, 1542940222, 1381297649, 1212079247, 1777757382, 1274355558, 2138627790, 1191751593, 1351823578, 1740764568, 1321747436, 1610139606, 2037260908, 1883092735, 1879896814, 1087319867, 1489397071, 1531862104, 1126109533, 1110742923, 1694053564, 1602370541, 1243579296, 1166891888, 1538444841, 1138421313, 1513249249, 1694136917, 1901321331, 1513726875, 1449161652, 1742974417, 1129756293, 1657916914, 1551077811, 1919176330, 1120983602, 1929882542, 1380869697, 1676597648, 1281617348, 1365219086, 1547019355, 1992561317, 1656787412, 1369939302, 1466119396, 1497234795, 1435572779, 2145230162, 1326743720, 1408499453, 1450740562, 1115277186, 1725664274]> : tensor<64xi32>}> : () -> tensor<64xi32> + %40 = "tosa.const"() <{values = dense<[1061, 2665, 1472, -2577, -1895, 3905, 3757, -1073, 2121, -2311, -3161, -412, 1033, -1590, -3098, 3285, -2291, 1036, -2159, -783, 1053, 2695, -1846, 333, -2332, 4414, 1525, -199, -2297, 1912, -2967, -773, 2227, -1536, -1425, 4289, -2340, 3450, -1793, 2238, -3014, -912, -1571, -505, 35, 2544, 1434, -4096, 1220, -1946, 3708, -4033, -484, 2730, -937, 1356, 297, 3353, 2865, 2451, -3234, -2263, 1947, 996]> : tensor<64xi32>}> : () -> tensor<64xi32> + %41 = "tosa.const"() <{values = dense<"0xFFC0AF7F45DA81F2236A2DA70F7F62CC14154B5CFBE540817FF435F328313985B4F6C5F17F871C755B2C7F51CBC8614C7F6EB97F29F9944781E19085591509E95EE081E753F50430C3403A68304071FDEB1127CE9EE67F5CDAD3C757170209A681F5CDC80D817FC53189133458EDAE57F23581762CB232A60FBA22DB6C05811881810732EEB397DE82377FCD81157FF56B8B008113E068BF4CBECAA4178134F903F301DB3CA733E621F2CD95D381C151BAF9985B66C67F2E10BFD1811F14BD20C9C90570F6C5E3ED3C24CBE1E1125AD33C492B6F0EDA08B80FCEFFFC001E2CE3077F34C3E6AFE7513F11350CD9CA4A332A0FC74AE6CFE5069FBAD9ED1B6E43DB4DE48B3F5CAB0644A4343E37274C69E124B01B05A5E3522D3BAD262151E72401AB1713DD328B38D33BDC192C350D81BFEB21EB5F15F8CDA2EE8113F461E7C912BFC83E7DCE8199FEEA1A5FDDBC92F09030E7C3A859F7F4022FA7DDC614C14A25DAE74D813926469A42DCAFE7CAB6D452CF59DC440D0A27326BA8BFC1F728CB37D6A348637FC589A3FD7F3C39C43B5C9D7F547F0E7F811D23468181F813166AE70E48EDEDEDB5F493557F2BE20FB7377C07B8D110818120208CB201BD7F5037814108C55C13C7197F81162ABD461F372A0A814E2EBDF62CF056A7D3157FE41570AC4C6894792F2E815E5819732A30E7FC88260238F2AA2B8137F3131F3754CCD5C6C57040CF91A2D8FCC66D7FB2DFFA810F1BFFFCD8B80CFE51BAD88121EB7F7F610D7FAF3F2F40FA7FE3EA8181DF917F987F38DA420BE2395AF381FE207F96F2"> : tensor<1x3x3x64xi8>}> : () -> tensor<1x3x3x64xi8> + %42 = "tosa.const"() <{values = dense<[38, 39, 38, 39, 38, 39, 38, 38, 38, 38, 38, 39, 38, 38, 38, 39, 38, 39, 38, 39, 38, 38, 39, 39, 39, 39, 38, 38, 38, 39, 38, 39, 39, 39, 38, 38, 39, 39, 38, 38, 39, 39, 38, 39, 39, 38, 38, 38, 39, 38, 38, 38, 39, 38, 39, 39, 38, 38, 38, 39, 39, 39, 39, 39]> : tensor<64xi8>}> : () -> tensor<64xi8> + %43 = "tosa.const"() <{values = dense<[1213865535, 1602507985, 1440780907, 1954352968, 1199868781, 2054776691, 1505215822, 1417255572, 1394903397, 1211584612, 1648660464, 2100704065, 1159656979, 1217444837, 1291948156, 1883145140, 1221598850, 1743519800, 1250519941, 1996515842, 1162861026, 1153495419, 1813776229, 1774628937, 1772446706, 1977714532, 1281253982, 1447745789, 1300561261, 1972957530, 1119963732, 1871994542, 1829377634, 1567838584, 1088261324, 1386444664, 1642423629, 2070760760, 1343563620, 1126421211, 1803211414, 2035904010, 1422212668, 1915233078, 2002920749, 1447524825, 1323436371, 1374938804, 1876458254, 1185125022, 1142298223, 1286117084, 2120628033, 1475968862, 1898012125, 2109502607, 1373111676, 1094335105, 1102712351, 1780417951, 1906705841, 1788349686, 1972995127, 1906093931]> : tensor<64xi32>}> : () -> tensor<64xi32> + %44 = "tosa.const"() <{values = dense<[2364, 3408, 1343, 740, -5648, 700, -2774, 153, 1829, -328, 54, 1786, 1461, 1857, -1507, 1122, 593, 5816, -2203, -1621, -179, -835, -137, -3340, 1072, 3862, -2288, 869, 1246, 2486, -1558, 3167, 2018, -4404, -1352, 3951, -1467, 5127, 21, -2366, 528, 4617, 1257, 2366, -281, 344, 953, -184, 766, 4415, -4387, -192, -2529, -1378, 6133, -3731, -3475, 4042, 1046, 605, -3224, -7696, 2554, 1758]> : tensor<64xi32>}> : () -> tensor<64xi32> + %45 = "tosa.const"() <{values = dense<"0x17D081CECC1BC535C8BE0F145B24BC1D0ACA013770BDC450CFA71CBD8DE831CD14262A2FFF0702515827B10E3D21E3F9E9D4E9D6E6C73DCC39FAE2D1301062118113D6BB0C2E29DBFC3A130FD743DE0B3D3AD818DF314593C00806E2DDE70CE24215D13D37FAA8C1EDF9DCE90B1BB3FD58B31F45AD5FC3B9AE1EFBE6DDD721FBC8F3DA20BE88C4E6099FFECAE0061CFBFAC540FE1B582DD1B35CD601C60516303E08F43681007E290C5937DD4002100BE840C5FBFA1C5DD4189BA05AC2C72642C5394C3A42FFC9E79AFEA8251D93EDF0EACE3AFD260BFE1BD3B2320EF6393CB427CED0EF3C385205BC0FEBDD81D1D30B34CDE244112FA41DF91FF6B7DB082D100ED0FAC3F315DA0F181AF1274C3109280F42691600EE4EC90C5D1C351948224B282B28F5FE8962CAECFF7F4AF90C3F111EE6AC57B1CFF101E131ECE7FC0409FFB53CCCE0BF4CC0C6308118D61BA138E6BE1D33D60AC90854CE2D5726FDEEEDDE20DAD7814BF3D317FE4428F395F7E4E715DF562DF0F8F9150DF2A1145A74A4F2EEC6091E0AD64331E63F0B08D8CEF22214562C2317BB06F7D21052007FFA0906F8FEF553E3F3C208023FEAFB31160BE3ED000F0202EBDCEC2A400066CAD414DA1C1207D50B7F462DED1EE415E1D7EEC8F80AB30E04F71D04C9CE47FFE61CFDF5FACC011124DFF4DA14252546DB0BB71D1D41FB2B23E9FCB997BCEF2FF61BD3BB9A340C072A8DC0C6DAD8511C1219F77FE6F4E723CC2B9F51E20844B2265BD2B3253FAE2E060E13F34DBEEFF7254209B9F001EBDFBA00E6BA3EFAB816DCAC5930CB2614DD264DD5054A14F85627BC522DD08C1BF23DF805BAD5E925C6C035BBEB1737DDD4AA101E20D881592CE4FE5CE3C5D8E337FDCC1BDDF30E472EEB222C142922F714E5D8262E0806010525F9DBE6ED20C7ED81131F4117EAFC1BD2F1FA16CEEFDFE80CF39EF5FCE009F0E4052D2FF9033A1F1CF330FEF618CC10E21C3CEA813519BADA7E511D20B0C34393AAF734A227C90DDEED322E34F018AAC40CB00728DBCDF6E44149F43FC5F2FAEFFC03530FAEE7E8044B99160427CDEE54110DFDD9BE130DC61FFD132C2CFC49212DF60533F09F15DAE4EF09D3813A052720C927C023B9D4DDECC5BF29160A0C22FCE9CCB60C2514F1E0C007023DF437CF1704E1F115DF9E602AE063212A58211BA9EB25CEF10CEEB3C5B81EC6ED2CDC7FFF382ADBF16669CD8D21B048BE9FA52DAAD03D53150E1F04D9C1C0C9E8CABEDFC30E36F74BFAC7FC31B62A0D01F97FB5C3392BF52EF6A6C90AC2EFE14DF7B017420724031F334CD9E21A57EAC921BF06D1DBF6FF302C04DBDB32EF29520FBD1DEBFEF8404C4912CB4EE715EEB9E760D013D8EA3A5022D6CB9453CAE481E1FB8EECC0D5D629DFCB25FE4037BF354E386121F223E52328E106B300610930DA96F917B5CBE024CB1FB6E0F5299921D65C65E9DED8041044FCF0DD01871F58F581E606C1013307DB07D9EE540212FE0346F7C1E42B192FF9AE3228FD08DCE61646E91727E0CD93B30DFCEB65F63E16AA17F7F07F34D3EB552A3916FEE0CAFDA513DBECCAA3ECE443E6EE9DC8C4E0E1FAD0CA1C16FA099CF0D9360EE6A1C4F60AEFE5CEAE01024FC9F1E9126B3B39AEE62C29C80C5581DA3CDCED10B8C2FCE51D23933BE7BEEDF8180ACBE05FF7402102EE20FBE8521712BD44E57C32AFD35821C64F153EFAE29FF2F0040AC7085134044CA8E9FE53D1CDD8D81B47DC03D1D32BF7D81D284F3DCDF1A9E3004BCFEF309745515514F938D0B87F241B2F00001E3746E81E4D1BC82DEE7FD9F11EED3F21C44C0CE90DEEF4BADA07499753F3EDE3F4ECF7FC62303A14B740FAF81E3E1231B7C7203AF95E5033DAE81906470B3FC498EFB49C0EF608C13635FB2AED25FA16A7DF2B27E6F44C362732553781B7ED2D7D8CD8EAC8FA3DB8DFE6D96F35D782575960184CAA9AFCB1E41024F7241520CB3E470FBE2316172A373FE7EC012BD6CDD7BC0C0006C91000E1DAFD05D300903F4431060D58C9AD08F9A32FFB2B5B17188137B9C60569FC48F5FFA8FEEE9BDDF51D2AE3811E0A26D2CC37178C2C4DE02B3BAB3A085A02B9CBEB9025F6883F1A5E7147524D536E593DE5E5C2DE323BE733EAF203CD2EE3C1F1EC7FBDCE282159ECB9E9C055A4610726C3F947BC93471508D4E4DA43080E07ED3AD9A8F2E49237051B7FF9ED43CDB44CDD20DCCE0179A8B331D521DED3D82D0E2117FD8F3EEEE115F81BD9C51EC3491AEFFBC720C4E0B423334C9EB0F6363FE315FE11CFF8E39EB583AA1F1E2C2EBCB0E91D09BCD50399F7E143F529DF98F21B046EEC1ADBD223542BEC1F37A781C214F4342E0F2FE8F1D310D00EEEEC0BED2E1B09C5DB39FC1394BD3606D032EFF824FD52D6D737F11C0BDB337F18DB4203272B40092A2A28C8C227EE00C61ACFF51DEC39DE16E1EF0300D9D32033D32521EF3844FBCEE9D9F4F111A8FD2233D9F00B0A36F0F81D2315FDEFFF17AFB781C7E056DD0E4BEB1E1E3CF3ECD30AF3D21AD5EF25B3DB43FA42F0281242C4200AD1E913D707E546451229CF9F24CC14D5F024D1F4E00DB525F62AC104128C222BD9183CDDF0481F11AB81E3112DFFF8EEE4CDF6AFD837A8EEECD5F706085CE83BE74421F603C32E2C91EA1356DD23B916ED14E318F73C93FDF6BFE1C0F13CCBFE33F109C08108E01C0CBF0DDFC24B5B51BEF02507BABD945EF8E6CEF4BED1E2C311F2722E2C7FE4C2C92D24FB751FA33EAB08352D38422109FCAA35C144C5FB11BD0ABAFB11C82338B55F413307BCD15BD22C00D8F24A03CCCFF6DBFF1F0F253D25C3D6EBF8FDF99D12112C25CB66BEE5D736CBF0819615DDE5C822F7CF02F90B02812EC1E0F13DFB1C530948091D06AECAEFEFE0EB22E2395407D4D32CFF0051EE38E50EA3E133E7DBE85216F42391EF49050EDCB1EFFCE0D3FD0A2781C01E9F131513FC15C9CC05AABCE5233E7ADD029531A0D5ED18EA1FBD672F22F533DC0190E81AB238651F30F23B5FE0BD1C133BFAD5C642FCF253277A723367D25A32CC3C510A036B72D3FC9A7FC8D97AB8DDD2E381423C2DA2163FF0D3D80C0C53AAC15035C1E610BF1D1549FC1DE566C6D0321ED437CB3E18E9D1F4D9FBD8C237F2B6DD396DF527DC3303D86ADF0EF04C47B21F1E04F9CB81E1180D1031D0CEBE92FA2BC7111BF8D8C7FCDF2CC90D3CE109C7D5C426D4054FC6C6F31111ECFB39CD43CC3FF50837BFE92EAD07FE00B7ED1CDFBDBB3BDBD1CDD95CD9DEA23C1E16416D6E0E542E0EE3EA8148E820C9A95A48AAB970B829E207F424F61DB907136E667BCBED0DFF41C0E8DC48370A1BCBF8D9CF300CE1D41BB4CFD9EB911CF3E927DA05FADCDD29F423EFDDF5F3812905A0FC98E212A605E7D41AB6EF1D0635EF2537F61C4B1522F9C0D1EB16C100AC1233BEBF1524DC2625DB041634F50004D2015208E22F3A8127E3FAC132D4131CC86D2BC7A4CD4BA8E3D31A24FEF0D928051323D6061E1465070402CFF1EBF22DB7B0DD0B4E0B995A29C1091CFAC3F32EEBB6D511EAD7F6DFEC5E21382E14D6BA192B1023CEF60BEB084CAD33D5C2A54340F3330D0EF47F38E6DF043D2B01080D1C5E38EB5412C40CB937BF17971EEECFD1C91595D11800C93BD4ABBBF4980D225956F9CE16EAE0D940FC03F941F49CAD3093CDD32D5D1741E4D81ADC4DCB7F332939DAC5F1347E3242AA3555DF06F52218FB1610D7F417E0E0FCEFD2F5F62B9D0512CB0F4F9FD719DD2003BA1198A6C5C9F6E71E20AAD7E5C52808E606A61E19D3812E1B0114C5FA0ABC8FFBFAD11251B1FD2C30C22D3D2728E701E5FE0CD6C40A59F40CC2F05CCBDCDD67BEE4D0DDF43CEE07DD1C3BDD3B21BAFDDDFB3D24FEEEF68130EA7524F6F60D05EADCF001FF0717DA1CC1F3DC2FD0E8EDBFF5FF37DD1C76E2402212E241C0E3C561B92D0DAFBD03D3E2F281E1A23306B8EE1BECD30109F037C114D7CE70F642E943DC5AEB5EC2E7CB830981683327E1FFEAD9715AB72D6E17FBFB03CF0943E634F644B3D6EA2CFCCCE7D0C3EFEB4106013024B903F00BE90A152F130A0B0DD73D23BEF119D57F3912E63AE40DD7F5090D20D901282EFFF710CFE8E9E5391C16C606C41207BABD00FFF50E200BA8D2E42040C1F5F8BCE3130129B2C542DB2A7D242F1CC610E02147D48119D7F32B1509013DC0D11A30C842ED20F0CED035181820CFEBC92BF59E00E7DEFB13E8D9D1041E07B010FAFA4EAB25BE85F37C2B33DE0415D4F5D80514C8CE2B090C36184ED2D8483137F7BCEA21E0F7AECF09EDEB09F909041C8E2DD41DF75AD24FED420A45D481E90ECED6091C63F6FE522D5734D41AE6FFE3A3C7BF2C4CFEACCE45DCBE9ADC9E07ADE02AFA33CFCC0BD0127F15B94C1FBEB72DF5DAF00E61FA02360CA5D625013417CF440DB3314DF72B20D7E8BD0229E1F6CF39DA520ADF20D146C1DD4EF709ABC90E22FFBD1A1E19D8D9D0FED0E3DCBD1AF5A12610E8E5C6CCD4F3B9D4D95DE9812AE1C74AB31CFF201EB617ECD2CB340C60F223F25DEEF3C060DFE4F76A345824C4E3171954FC1BE1EC711C3DF70FF31DEC7F0C10AF064EE13539D10C3FDB3CEDF7663AFEC3BC0AF81632E6F61A1F0B7FFA17EB0D4338E62EF2AB0FB54BD2A8AE2E13DEDF6204EAFED431DCDFFE47F4E81A8301EBE90A63C6E9BA0AF83A23A0202E21E1FC2C06C407E0232106144924F9F2EEE9375645FA4611E6FCBABF011FF0D01C170F2E014ABEF69BE850DB7FC3C11412321C00F608EAE63A2BDE0B4D0F260C43EAD909FB1F320BEEA8FA292C1328D2DB18FAF70131BCFAC7D8E4EE0EEE1F2D0CD0040A703210810AF72920C5C6D0C9CA20234A3820014AD53F1E3F112400181EC8EF301D1D0EFCC1BD8C13DA27B52B31DF9F37EBF5FDB377825117F7EDD90235D1E352F51192EFBAE4C12D7425E3EC81B2A1EA0872E2F1B119CF14016964F6C6C5D4D19267BCF8DE546552FB4FFFE2223BFE284F2E0EC520C5094E41AD02DA7F38C7D91D8D1B1D51E0BEF7A12D290D11D7D1C31F134F155F0BBCD1F845F408390718A3CC17FA5A04632A37481BE6F1D4340C1CECE62CF0D06836EF2E7FCA384AAEFB3AA80820E5D1CA4F40111F450E200233D5E825031ECCA5D93FCD23BA1DF8E6FA1310AD0511C5CCEEAE0917B2284793CF021A4E99FA2ACEEC120A3D7FEDF9C6E8F23ABBE92EB012FFAFC82CE8A4B73DE732E203B23116DB7B4BE11947F3D01BF9D3DEE7506603B9CAFF2F48FBB9E8CC37097F3D3CAE0F3752D3E20ED13697BBE10B1FECD423D522FA2AC4330FCEED66EA0A2E05DD9F4954BCE30EEAFACF2A1CB658F612CC07DEC41DD74F381A69FDEEF245137FE4CBA7D92C3FE228951C11182ADC2AD20D333201DF98F2BCDD2CE80C34DAF7450A28A5C4051C04834AF0DFA91030CC9912E618D9DB216FD3185C26394C6C1DD727E6F5AD4513D47F08C23AF84C073E091D23E30AC528281AADD544EAE35D3C2DFFEAA1ADA9F0EF6AD2FF7608F7BFD62C2947D12BC84AE04428F1292017F337EC22AC16FE4F7F4F1A3BCDFC75511F2DFCE53325F2E0653E5E3A013B2A489115EF1BDFBEDE0C38F45FD8FEF81DFF0CBE33BF228318E2F5058F03373147EC00E3BF444A0D1BAAC0BCE11E31ECDF09D0EA3D0DACDBFCCFA3E2043EFD1C81E313FFEDF92ED70820EF2CD2FFF5CB22391BFAD0B2C74A280528112B29E081F81B1BCC09F40233E256E0E69C57DAF41AF30C0358F312E12E9DF31EBB8B13EF280F1506E0253FE4D9B6142FB8D4404AD2AEDA1C"> : tensor<64x1x1x64xi8>}> : () -> tensor<64x1x1x64xi8> + %46 = "tosa.const"() <{values = dense<[38, 38, 38, 38, 37, 38, 38, 38, 38, 37, 38, 37, 38, 38, 37, 37, 38, 38, 38, 37, 37, 38, 37, 38, 37, 37, 37, 37, 37, 38, 37, 38, 38, 37, 37, 37, 37, 38, 38, 37, 37, 38, 38, 37, 37, 38, 37, 38, 37, 38, 37, 37, 37, 38, 38, 38, 38, 38, 37, 38, 38, 38, 37, 37]> : tensor<64xi8>}> : () -> tensor<64xi8> + %47 = "tosa.const"() <{values = dense<[2106639109, 1815108637, 1795690641, 1745218144, 1086671085, 1913026366, 1209264484, 1525786366, 1404509774, 1350634472, 1647033679, 1241293129, 1731822670, 1627048962, 1365679241, 1097646582, 1705239778, 1442291849, 1932611971, 1436302947, 1626963979, 1939533208, 1175396230, 1327247571, 1499129780, 1189618088, 1280232714, 1237641950, 1249164938, 1303954710, 1160449967, 2103748933, 1485529850, 1565393658, 1910845460, 1229059384, 1199575274, 1370106807, 1559042864, 1737929060, 1183354138, 1755428047, 1935447311, 1361194605, 1542285651, 1977406718, 1682770572, 1701325709, 1639264718, 1268309250, 1366603511, 1704754815, 1119638269, 1550499626, 1460017623, 1410902749, 2126726922, 1612064612, 2050160589, 1929355685, 1475179012, 2011935732, 1636462131, 1214633194]> : tensor<64xi32>}> : () -> tensor<64xi32> + %48 = "tosa.const"() <{values = dense<[-41, -525, 1980, -2091, -479, -431, 1421, 2455, -1965, 683, -712, -36, 2718, -547, 930, 335, -698, 2374, 380, -732, -303, -2682, 589, -1422, -1555, -404, -863, 728, 1843, -3165, -1833, -627, -473, 629, 270, 44, 1358, -415, 337, 1037, -508, -1843, 2267, 2282, -923, -650, -137, -2792, 1596, 2057, -1566, 538, -1233, 688, -66, -941, -455, 145, 467, -2065, -1225, 1682, -1128, -283]> : tensor<64xi32>}> : () -> tensor<64xi32> + %49 = "tosa.const"() <{values = dense<"0xF502E47FF92897CC44E258D5C077B5D07FA1B2817F394070633F7F12E97F1235981337E9C3C2A525E12F16EC2DE2EC4B0DAB5D6062A175FB10D381586A294FC21620213A5B57E681363827DABD94817FEAA70D5C9EFEED0B3E2226572C73419715A2D4C82EBD305F097FC4810F7FCF16DEEF49817F7F5B814447DB3938FFC506207FF4272D811A1EE4FABFF9C65325A717BB3C210DDA357BF44212BCEE7233C066810C7F0EC95DE3C93981EB81B27F4DE1D7B91BEB96B20403F3CD31D2EF7F8166ABDC71EF64C0197FE810DE0363E61846ECC7C30B7FE97F23FE3828DC7D031ACE30FAE4EF62B4F66311BBD440FA9C7FED6A39E91A881C7981FCE347502846C58127CE4E2A22E39E3C154DFFAABB361251C3E43CC53BC314343F032D244A7F1114D4BFB49B997F0A0616D6C72B4B1A02BA9C52F3DF4422F15B5D2B3F31F5F342D15BC5C7F5887FACE21881DE152627C329267F683D2742DA18DB2181C9370D1618CE0A2E606388BAF8218926E6EA443FC19F7F26080A8155C3A4C218180A101654058152EC1DABE83FC33524E4F9E8069381B90E0574D519E484F7F28BF91E28F93ABD39815AAB817F431CC433FE1E5F466C439325CAF143FBE4536581C90911C12AC221355BACD73E00C87F81D63A1F19DEC7E8D97381087F7FD74008FF467F5C09FFD59A1F2CDC232ED8AD23130F35D381292C17E9E114374101E34A9316631AB6EEC581EE45D15181FAD7E87FB18184463215422B33D62ABA5B81817422287F667FF03A7FEFC8EDC39CBA48C8DE3481D0F819155CD667D9816F7F1B81FF5E"> : tensor<1x3x3x64xi8>}> : () -> tensor<1x3x3x64xi8> + %50 = "tosa.const"() <{values = dense<[39, 38, 38, 38, 38, 39, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 39, 38, 38, 39, 38, 38, 39, 38, 39, 38, 39, 38, 38, 38, 39, 38, 39, 39, 38, 38, 38, 38, 38, 38, 39, 38, 39, 39, 38, 39, 39, 39, 39, 39, 39, 39, 38, 38, 39, 39, 38, 39, 39, 39, 38, 39, 38]> : tensor<64xi8>}> : () -> tensor<64xi8> + %51 = "tosa.const"() <{values = dense<[1787514280, 1261283101, 1619319050, 1253900250, 1620795162, 1324395317, 1285431806, 1322956401, 1202216999, 1414595820, 1333655373, 1397258467, 1148338270, 1397355396, 1809829664, 1399962870, 1246318136, 1851667984, 1140574757, 1169534843, 1995848176, 1431153982, 1305963706, 1769623935, 1149987169, 1767331527, 1127854193, 1627678432, 1224341364, 1419872151, 1101137500, 1856486053, 1373346222, 2080689619, 1799313648, 1162056712, 1131294454, 1415752926, 1497350624, 1247999925, 1195087833, 2078251359, 1557086527, 1771898019, 1610290690, 1863683382, 2081372706, 1978945448, 2023297886, 2141337190, 2020977627, 1493205838, 1823999862, 1163287202, 1139574588, 2072688638, 1893025505, 1580591999, 1770521219, 1959854754, 2010949191, 1332569178, 1806830532, 1408075715]> : tensor<64xi32>}> : () -> tensor<64xi32> + %52 = "tosa.const"() <{values = dense<[-507, 1630, 1321, 1462, -714, 3665, -2103, -175, 1129, -1180, 1132, 1709, 660, -133, 3880, 433, 383, 803, 3022, 1325, 2434, 1136, 1503, -564, 1348, 2771, -861, 2388, 4159, 2485, -1817, -2038, 1384, 3743, 1298, 3250, 2898, 687, 224, 1253, 384, 851, 74, 1207, 1414, 631, 2442, 642, 102, 544, 1341, 1581, 126, -23, -1258, -2121, 408, 1706, 2308, -1058, -4062, 2165, 1455, 900]> : tensor<64xi32>}> : () -> tensor<64xi32> + %53 = "tosa.const"() <{values = dense<"0x3406AE82261CECD35081A26DFA4BE714E8F4B95DD20736134BC91CDE54EBF236AE45004B242045BF153B1F1A38D3E2C7E4FBFA17F6144A20901DF190D9EF9262BD9E7225370BD1A852E9EA10BD27CEC133951602021ED7E2E6EA00FC33258ECBD51702112AD533CC01EBE051DC443E18F07F02E20BECF3A820E2DED2E31800E5D60BA8ED67E3B52BFFF8B27FD7D5EADB1FACFA0D0EB0030914180217FDC5BF01F7F20449AEAA0B4009220E5920E8F3F7020DCB290F29D1CFD3E2F5FCC055F74648FC1F0CADFA0ED92012E3FB0ED5022306C6E8FFE4C3F127BBC7F0030A19DCFC08FAE8FF020808A8102D39BF39A240E912F8E0348133F907D41E16211AEBEFFFDC50812EEDD604E52B130014B0F7DB3FD4D8E0042AFFFC34FD05F8010748B2E95035FF02F01B3D0426CB0A2C0C553930A9E605DFDA40BF35EA1E0816E52457EBC20AEBAEC2AE49890A8FB33AB89607334D02D09D2102D75B69FEC42296CA098765AEAD8113E533C0B8CDC53644D80B151B3EF0FEC4345A4A0F0851549805E2B7154300B11EEC28043CFD30D72EB17F5B2ABF3626B7FB4252F628EC1970D8502CAE96CCAE7960F809EBF137CEFE1C1643E20FE359F36CF8E2F23E0D4E3749FA96171455DF155AD905594BD61622AFE33CBB2EF1EE3C49C8E408F7ED1B671DD80DDFEC3AFB33E0812F2C1911EBCACEC9D612C301D741F0E6F642E8F643C626D01F81F7E6161EFA020E43A2531047C51E0469D5F711D5FFCB4CD8EFAAB8F8FADDC9FB030FDE05BF32D606B9DCD9B3491C182B463E113F6BDFFFFBC21417251B10E366ADCF0AEF0A2BCA93210C873D4116C8B5E3DA25FC7F3428B0E04E0A4E0EBC2DC5FDCAF8F3270EC42AF74303F3FBEF200EBC05072CA42220FD30D4ED76EF1F45D9D3E07FFCF6C1EEC5EA49CE44191E32320A210FE22FFDD5B9B21CE4ED7F271A4105A046E43EEE37E3E4D023E91AEC90FA22BB22E9D0F8A55FEC35D60DCDF7F4BDA9CAC7F2CBB124BBC71EC02BA93CE0E82EF45EEBFD43E8FCF23D17E03B1D710620CF26E259E2F5DF2FE6EB02DCE881F4FC90FA1DEC52D2E9220CE3E2E1A75AD7D1DDB0034A05ADF1FFC5F03D28F52E0E79C4E6E01EF4B421D89EEE4F18F40CE813F633534441C0EACEE0F819BAB77F2DE5F38BB95A2CBA0FE2D27D1517280D202FDB81EEC0161B05FD03EC06FEBF2F013B2AAE570CE73111172716023830E405E827D92A1B9F2BDF3F11C80505E71606D0F41414DFF400373D4316F6DE14BFD6E19002FFE1B525352C11DBED0AFCC3A323D60D16D92AC9E1C72717AAF815F20BFDFB22ED0DC2BBF2280930D60D2EDDFE81D3B5438CEEA2151B16F3EDCACE0B1A164332E4F3BAE62FF9EA0CD128B60369BDDFDA5B32D53EB4167F151309CEBCEB002C17D500E7BE46EC4C17CAE801E85040E8D3F120DCDCFFB6EBE1FCE8B3CCE52AED1326E9C9D6FF0A2550281AD940E1CD3DD4E70724A209032DEFB8F941C6C8E30C4BC24BC3482905C6CE3289434FD2C0D111DB178158C40948FD1CEA5641111E11F82E2CF42350B6257FB00E51D022D8CD44EFC1F2AF09EADF17F2D7FD0F00F1C437B009D234B91037C938F3F9B714FC92580FFD1713D129DD54166B0F2BB6EAF41000DFDC8EE50443FAD3DD0601F5CD690817CC11ABEDD34E05D70E22FFE5BB29FC814BC4072F10E5D405B944AD22F4B32933FBD725D92932C72BB7F72F0AA4D2A739E927C71D2ECFF202FE09F9DA3A2ECFEB18F2D5FC6E17F6F10811DF4EF2E7E3E5A551FBB3DD1405F01FC0C6E627CCC99C22DA32E0C5D5C67F38DB24FEE0E11B2CDEE8C420CFC2250CD1C4CAF6F3CD8B7F01963EEA23F0D4DD12CDC5131BFAD719C60C14EBDC0723CB1604133040E40A1346D6C3E9E4F8072021ADE3FFDC26E618E2F3E0DBE8DF27AEF8E6F8E3E9241ACE0CF8E33BEC00D41881E600F4DE23FEDE091112FB11D8F71CE72F03D5FE0BE4E4F92949DA36F2BEE304421F4908EE0CFBF214194BDBC81A009804A1F7C8F581AFDBE7CDE9B6DFF4092005CC58CD3DCF170D413E184228D7457268FC0EB8B2E8FF1BD1E72527EA35371912BA100AF60B1242FDD5E9BC21292C10EB01FA241362EDEE26DD0AE7041015F441251AF20D3D0135B8DAEB1621022AE4F10B14C5FD457FB22BCF1503DF16ED5009F67F082E24CA62EBFA34EBC7A8068F10BDC1E701F9072FC9C400F6E6D222F519F0FF15EEE12DBB15C3E1F22CC204241D16FCCFECDCD0C01BF322F6003A0C9602F7D7B0FBC28C172B895D8160F830E4A8E3F311E3C3C4E116F5DA26C03D5904E43B5A8619F2F69CA032CF2221171CFDB322F3D9FEE0F3142FD9D736BF0C524FDEA0FE0B1007D10832F3E20AD3CE1328F73C8FE39C421741320D0CE5F8F702FD1536EF2E2011C74D1E8130062A8E0B8840001B1A3B06CB180C33EE1B40B605B0181620ED9A0C2DEAF0A51799DA07C4F399FBD900290CA3DCE91523C72C48B3C3E80C120762F5ACDAF8D11D26390C14EF258A083751CDCA3DD97A819A0AB8FE3FE70DB8E0FA17CF136E0ED5F00AD92701B701DD28C507D7FC19E8E9ABF23DDE12CAC5049EF923D6039EAE0C49EF24E9D42E9D7FD1B6F153CC2CD6C8B5BBB4DB9C1B2D2F39E203018109BFDC1D1BC62902A6261FD5E62322C3F012F9E01715D9E6BC0FEC9EE2F1080F4FCCD648E7DF42051EEAF0F42DF01C180FF5011E072EF2D900902B62B721D415EB05BA39EAFF1C9D263D325003ED10DAF12F30BBBE2F91FC202223DB2AB08A090A122709CDBA233D64C4273C0702CF29F079E60436171BEC7FEF164C710CAA05CD1F3687E84322F09E39E3AF1063FBF359F03BF5291E46D4304E0C9CBA40E46FA239CA16FDBE290869C47F2BF042BF1A5955C9F14E0C12E4FCE5CFF3020E16D20A103031EE1D0EEE29030A0B1E18EF00319DDB35B1BEC33D03130CF121EB814547D82711DB0F384C03DEBBD707FEC721B4D5FB34FCF6D542E129FC17D712ACD4CA0808FF06485DBFF5814444C4B21AAD342991CDD2F70C3AF9F137E5B4DFBD2EE1B8B0BF14A1ADA8FAFF31F805F4C43CF3B5CBB7E2215B05BA07E20B1E1A2AF52B093A46A1080F12F0DA0622EECE2C5581380E1B0EB2E1011BBE092EDECA0FFD279CD7D1D0F1DAEFCA2F435306F7B101059D1815ECF6FFD610DB3ECFA1E8FAB640C77AD44C34F20CC8D0E0F3F4EFEF81170EEB1ECD99F1CCDD0C5CD0FD9C239621DA19260CD6350F2FF6E2139627E802D9ECDAF3DBE04C3FD0E716B1FC07D1E4E7F3D309E0D802D8CFE61931A52598CFBB0ED14873E1EADDA1F7D7087FEC350740DC01F90B55A425C325EB10E6E702D4D1D32EB1D71DE1A8EA06101B3A0C30E9E400FC193805DC30010A49CFF4E214032BF70CDB1006B9C70E180C47353C42DC2B8114E012DFC2E6BCE6D3F0E5D738B74CA3140DDA30D6E34C00E80F0640AF1212EE470AF925E3D2351512EFF7F21ED1EAF4262CFDC6C12A0FDEDD14EB07F0F64ABE06FA160E3A14F015D23E1600C520DB0203DC3D23814CD6ED503AE50AD9F42520D0D5F0F900F10A1F00F9F208FAAD2D4ED5DAE6F9C4C6122638C8C181FFF803ECFC0CFB0DFF322FC700F63A40D920D806EC133B1303E84E99F2D3EF0CC520009218E6E4AFC339E3D0B3153D3121D145E1050CD1ADE4E3EE0CF1515EFA403BFDF9521D38BB5BF2F1CAF6F2242901F3E027170805DABF81254C2113F6BD461D2010E825C305262E64E9BEF0D028D9FE4EEAED0739FDC10A7F32C8552237F72CD4CFC613C9E9F1D2A9ACC4F106DC27D8F5BF58E8CCEFCCE7154FE7E4027FEC0F0DEEF9AB0E2F00D42B1FF2B5E200E6FF1714340D050326E6EC02D448E0350AD75D9B2BEFE13A3312F2DD1F0A2D5EFBCF1DEAFE05EFF0DCE9EDFEEE5FFC1EE4CCC5CEE5B7E3F8331D0D124C390FFEEEB0E0E4DF61E916F6B610277FF95192F250EE5BD105C93334DF2D88DE2246239BE91DFDA31106522F8BECDCDC1E410581F923B33995ED3AEDBEAA2111C5031AF92FC753FC0561C030D9DFF931104E884AEDEFF3272C32F715FD1CD8FBF3521ED2D750FDF10922133DA20ABEEDE7DA031823F6FCAECF0D39DCE825052E38161CE71F0EE90FDBD8EEF7207FE530C4D523EDADF1D2D0DEB740EA1F1FE9EFD3C6380825D9DB3F060F1D31EBDF36D8D30FEFCDC2E523AC0D530EDBCA39EF0B32ED0F5D3F1C2E1A11DEFA81CC0624011FEDBC41C1C5E2B9E3A003D59CD916181E0972FACE15C9151805F40D9212E77FFF9B2F86D1F9A40BAA54D75BBFFCF8CE1CEADB4EEAFF30DE9EFB2F170CDF1247D60422EB3DD802FC42F9CCFFF6250B5E043101D4FE611C1FD739D82E97B4F93733390AD61D31EAEFEF81FA04F1D839CA0C27F01D1BDFF82347EAD02AD6F5D0C7C0EAD60B00AC6841F8272657A2ADB84BE42E0D30028E38D7615912590DD6DC01D650EB0507140A23E0C40F475DCEF38BEC0EFAE8494DE8BFFF3D7F6BFEB277F1DE79F7194629EB22170021E24BFF339BAD5310A907E01611FD8FDCDF0896BBE2F137A60237BCB4CCCD062AC381B7B93800B52245FB892A2D5DFEF9F2FC1D8EEDEEAA1135131BCD90E1F5CB08D816EB0D089BECE40F0436443826E82CD3EF31413BE9CD00FF3F9B3A9DFD38EAC2C4230AE4F20B6CD45054F30AD741480EF9133EA606B72C81B62409F30466E88FE91AF323301E195EDDB8F7EEE14225460599E7559DF03F09B00A7F3D9B1D04BF14EEE6FB5EEE2EF8ABC646340306C816F8172B162A961AA83007E2E718CBE0FF122115616026B9D5E7135EA1FBFABA2BE421BDF9D41ADA1F352ED91D0CB36C3EC7E7E9064315C5DD1DF5811E5B2F36DE4957E52A232ABE061A5F23550B32F45DEF47CECF0EDC942BEFDCA117CBDEB29EA40F2904FBFFDA0AFB267F3123D2D81F2A05F8DD5013DADBF45D0410F40A4311F55DFA563E2F3E47FDBBE06A7C9CC7891B7BB0F4F098039E53B3CA2DE5351CCFE0D803D531E47F5B58C2CD2F323E16224FBF5E32D039AE1BF28F541A973187EADBEAD217E61BE0B5396ADC07F51E7D1B1020E4F80BF6C8334CF9C9D70A63E6064C7BFB59E611D200EB913288E2300CA058314C6CA92B7FDFEFD2ABD7F1D2A3217F9744C59AA9FCF8B7F4EDC04716131A19F73E3B0343305F11AA2BE81277040948F8B7C24C29E02F02F547180EFDC502DCE43802C9FA3316C5B1D0E1D3060725EBC209F9EA210DA5F4BA16063F2A1FE4C23EE00A3B063BECFEDBFDE181F3C30AE22FBED4D1CAB2CBBCE734C0FFE937E1D5D7C7FC0C84D60DA37F382901964FE140F30102D0BB2016DEC8D2DEE88EFA42C53721DB0846A1CE6506392F14CDFB2DD00D2E41E0D527BB03ED2AB19E325E30F83DF0E7D6A86407EF574C44092C060E15940F0EDE966833FCDDF0CAF71F24F8CB1A2822722781F3DAB81F554223C72412C326CFFC817DD72535E3764D0565D229E2FF1FE50A30CA0E47EDFA3B56163A1B30AE34FCED374730F4763A880D3F5851B77F542609D7001CA4F2D121FF8DD52A2CC311E6E64D0006F87FC00505DCD6EA3415CD43CC15D9A1CFFD02D2D60F5612DD3ADEFB1EDBA22F00F1AF15EDEAF107170C14C8BE2241D8D0DE040C090E3023B5442FDC8BA7B7140512AF2A0DE8D1AF1F75EDE5BE4181EB6A07C11343EA2E3215381406141FBDCF28B2FBFC21FEB339B1FE1618D3F15239AF9C1331E63DEA209DF0330803E0C33A03810C53E80B2E04FBC52D0B8F26EF2DB9BF1F1CCED2FCD8E805CDD9C904BE3AE143FBF64FC94F44004DDB062FEDF00207EAEDBE374EE8C541"> : tensor<64x1x1x64xi8>}> : () -> tensor<64x1x1x64xi8> + %54 = "tosa.const"() <{values = dense<[38, 37, 37, 37, 37, 37, 37, 38, 37, 38, 37, 38, 37, 38, 37, 37, 37, 37, 38, 37, 38, 37, 37, 37, 38, 38, 38, 37, 37, 38, 37, 37, 37, 38, 37, 38, 37, 39, 37, 38, 38, 37, 37, 37, 37, 38, 37, 37, 37, 38, 39, 36, 38, 37, 38, 38, 38, 38, 37, 37, 37, 38, 37, 38]> : tensor<64xi8>}> : () -> tensor<64xi8> + %55 = "tosa.const"() <{values = dense<[1324344426, 1849713173, 2088783957, 1277538240, 1265883844, 2054010235, 1672496836, 1219118364, 1459667255, 1409103321, 1276483717, 1657621267, 2123229812, 1137859661, 1106476719, 1159129100, 1635798232, 1212546499, 1834846732, 1229800388, 1555940790, 1153286113, 1722655687, 1425098912, 1853135655, 1632645888, 2101044743, 1902245904, 1463139200, 1644168545, 1692770714, 1872782172, 1475342258, 1284098756, 1508011868, 1343943824, 1515356153, 2124760591, 1233844555, 1526271063, 1757168522, 1159349650, 1940740984, 1226927186, 1873453815, 2046519657, 1401391452, 1588478044, 1622292962, 1706371086, 2086834033, 1327506885, 1707582881, 1512883223, 1998213529, 1604056711, 1564438401, 2139521691, 1721808147, 1162900292, 1528667638, 1234280846, 1251961034, 2132390802]> : tensor<64xi32>}> : () -> tensor<64xi32> + %56 = "tosa.const"() <{values = dense<[1764, -27, 245, 135, -285, 157, -15, 438, 9, -235, -36, 7, -58, 29, -33, 191, 126, 846, 51, -216, 723, 469, -16, 750, 722, 1039, 1241, 17, 108, -287, 792, 113, 16, 1585, -3, -18, 143, 428, 215, 352, -129, -161, -179, 752, -203, -157, 143, 6, 341, 1059, 1743, -201, 193, 489, 222, 1615, 183, 426, 99, -102, 406, 478, 556, 1034]> : tensor<64xi32>}> : () -> tensor<64xi32> + %57 = "tosa.const"() <{values = dense<"0x8E7F0A0E1CE334B642F56F24EB2FFA25BCDC6BE84681EBF1C2B0CB0DB847F8F921C7E9F3EE2CF9E87FC67FF0E4CA157F0F249007B8189FEBC021CBECFF7B8193E2BADDE7F5E70E2781442A62D281D81110204E1EC2110DFB83CFCA350851A80AC10CC9CA01AAA25F8A2AF9B8107F0744F6B00BF8BD0F33BD770B087F35AE1C0E53DAB0300B8A81D36A419498E5FEA3BE31EBCF2A7F1C167FF9E3F226F63B98C80EE4E911A9B9EFB14F6E3D39F866B028BCD12AFF2BDA015781EBA3B192D71D0E81C4D70ACD3645021440CA50E25E337FB8BB927385AD2BC67F9FD140CC7FFBE42A877F4A0E72D2B6C7A7C994BB0625CDED1E81FD74077F81A52F7D69A27FC081F3AA00BA2309E92BD47FF6937FC2CFBAFDE41853AD2D2BE7A4D081CD1C289910A757DF217F9D387FEC5308EBFE92DB6434811243EF07E6A6428111C61B97F3F9AE075CC41081938A55D67F6E090DA1F1B58181CE20FADF2710ACDF7F43EDCA9DD593D43DA82408DF7B07FDF5D9FEB12581DC1069B5815A20E9E981C7B8C1FCEFA9F9C5DC7F1613AA15EDF44BF670E4977FF5E97F83AE19D906D526DBD3CD2D57F285CB7F057AE3E40B7FD6817FE7AEB9F8E183227F152AB63CD604E9811A2CAEB4F0F67FF3E4237F1816B581EDFD7FD4E0E5136CF508DFE9D362A2EC17F581047F03FFB8CD937F873FAE391F082D26152899EBFACCD9A1C1DDB3EDCEFD02D5E326107FDAF3AED7ADEB0A751001B33BEEA792BEA16B378106C281DCC97FEEFF810F813CBEFD7FE822C4D940CE40EC7F0DCD49EC7FC1B53E1BE651F53449902248"> : tensor<1x3x3x64xi8>}> : () -> tensor<1x3x3x64xi8> + %58 = "tosa.const"() <{values = dense<[38, 39, 39, 38, 38, 40, 39, 39, 39, 38, 37, 38, 38, 39, 37, 37, 38, 38, 37, 39, 38, 39, 38, 39, 38, 38, 38, 38, 39, 39, 40, 39, 38, 38, 37, 39, 38, 39, 38, 37, 37, 37, 39, 39, 37, 37, 38, 39, 38, 39, 39, 39, 38, 38, 38, 38, 38, 38, 39, 38, 39, 38, 39, 39]> : tensor<64xi8>}> : () -> tensor<64xi8> + %59 = "tosa.const"() <{values = dense<[1443484644, 2107703183, 1968054182, 2056838260, 1905732361, 1358262144, 1787135374, 1260049516, 1992226723, 1109417833, 1113424409, 1188977999, 2119550160, 2007067649, 1611764159, 1076722625, 1118878587, 1851397887, 1115142763, 1879337498, 1186019134, 1458846812, 1831541170, 1242353164, 1132683745, 1456826035, 1136269104, 1354117152, 1972108532, 1669006205, 1964977909, 1310939285, 1483690529, 1574748435, 1148835562, 1408388284, 1402776710, 1074854766, 1341530646, 1410745181, 1347772233, 1114472334, 1369974545, 1528823804, 1138933970, 1236366226, 2036910736, 1722643058, 1613418530, 1788725763, 1776129339, 1890381496, 1433652898, 1217852499, 1670827357, 1208779904, 1607827750, 1134030360, 1527850739, 1338952903, 1138868921, 1335294924, 1531192325, 1447846109]> : tensor<64xi32>}> : () -> tensor<64xi32> + %60 = "tosa.const"() <{values = dense<-128> : tensor<1xi8>}> : () -> tensor<1xi8> + %61 = "tosa.const"() <{values = dense<0> : tensor<1xi32>}> : () -> tensor<1xi32> + %62 = "tosa.const"() <{values = dense<"0x1C4527FE234D615CDA062E6206AE05151081B5DD2803AEAECD07D2C1E7EBC8EB040C29F1B61DE6F7D619EE03E3E60A27F5EAFA05FBEBEE0118F8E120191DF902F2341DECD83D76D1DD1A348107EEFFD0283E08E9CD0FFD0EC50CFA1BA4170C1FF0101BD605F820C63DE419E84DF9D9EB24BF991036CE815FFF2506100011A43E0D1F817A1605C15B2BA13F0F22C44F8E070B0697ED090FD3D2251C12E502FE21EB0B3CF6D0FA6403BFC90103BAEDAEC326F0C9DA2F08B22A4BFDD92C2D02F148F7FA1B7FBE230852C1BC50AACCDB3DF4EBB616DCCBBB4132D0BC792204C67C220DD5340226F52D20F4DE2414D5E41A7F05DDBD1FD6F9DE62C0292273E03C2B79E40A4E6BBC1F2C7FC3092D48EEE2E11CF0EBD4000FF7D6D5C116202EC52439FEF20D2501EBE62C05FD8114FEE9B110F7F6DDB1A43635DCD531D3ABCD19D5B7C6E07F328EA71E489BD03634D3D1D13FEDF4EDEF35F500D9541CE9EC0910F9D511230604061EF10DF5E9EB063B0E05124F2107CB7F1023D5270622E31AF90601E0D3CEF5DD0AB706EA06B32814F60A1F52F3FEF2F407FAFB05F80406DA1B1DE6F42637C12B1A15D35DF4BA247FF0B54725E7F52F8F032C13AB22474F023F336E14D8056E33E3EC2321A7E2F008E7D7EFEC24CE9AE14CF981CE4AEE8802293A083BEDF4F6F60DFD0909C6F437D7F3204081611A16A5401121DC1508102BF4F1F833DDF6D34FF6FCC6612ADFEFAA27F8FACD0ECC220FF0D81212F7FF1A57BCFF0659CF08E57FBA21127ECB1DDF73F5FAA16133F61DE81DF525C010FE180BECFE3D7FECE40168DE03ECF5F40ED0CCF800E0B92AFED8AA0A0A20D728E77F1418E8193821EDD53AE307DD59F5071E33F5271AE6EC02FDDD0015E7BAF8FFFAC400EEE6CB02200C161A691D20F94515EB6CFA2BA26D972881FEBE06CCD2E28113D4F0D846DE42DD3989272106E7F0D83FF52DC92AB329C9C781FA26BAB6EB5CDCEFD816D62CDA4DD161F325066813CD454115D555C509ED10C4FAFF16E40E315114E54925F9DA1D0DF5EFB881D0F9CAACF617FADF3AFB06042A0D19E4FD00E813F1111F01EBE8FE08F0D40A09D6F6DE1BFFEED5290201EE31040DF220304447F33A3D7FD0FE813538DFA5F11DFD01D028E2280932FB5911DF1D2027F605250FDB0C0225D212E2FD1C0F1EC0E7E155B5D3BE39DAE5DA36CB10FF230D1FDF2D057FE0004A65FAD14171F6F1414B39F4160D2BD223DAD6F39BC09B16C518C9F04B0F2EFF7F0D13C35EFD10E52D15FD27EC34FF1CF3FE170B0CD41A2EB5AF2A00224F1BB3342000AEF0D6C4E8DAC381EF09F5A7E8FB05100D385C4BDDE24645FBE33203FEF617DC2E03EEE60B4962DDD72256C6ABBED6B41581D815F8B3BE7705C6B25AFED5A43A261CAB42520AC71FC30C1306B018C0E502C002D527C70FBC24133CACED7F31D8EA68F2272B3DE14D24F3B1370BBDBE162E1AE330FD4FFB3E2147124D077F321B3A4750F72BEF03C4F2B3EFD7D9E010C0DEF51BD005DA0F29432AE55205E0D2122E9DADF6E281E2B5F0BA36D1AB4C59E0CF3E6BF0EA521D284411C8162919E0CBE7EE7FDFCEC644E5DFBE1FF9FC98DEEAF5A4CD1712DFAD2D35F9C7281904E529326FD22E0547F93F44DDB45D0216AB5514059F46D6C6C71DE8AA52DF36A55CCC21A65BD4E23C1FCF81792FCEC54DE65614813E2423B920FA57B21CEC24A2FBD75498CDC40BCEC7EDF6C3DFF4EFEBE7F6EA24D0EB1C57E5F70ADC053D13FB3DC3BC2B3FEB9E4E5CC1D16F6EED0F4F47F468EFE4CC7C2881D05BF1D93AF8C0B93AE14741C6E47FE4CFF54CB6E93CD7A4E460ABFE000F873C31F8D15614DDED6616F23515B8FD47F51629CB4F1128C3683313A07FBFDCF452C8F7FB7FFC15FB25A7FF25FADEE526EE31CF24A926FC26A4F0F60FEED8F938FAFCEF19A524EBFE812204CE89FEF8F21BF8122A6CDD153771FD14E855FF11D71A7F2BB7045CE2BD28028F230FFF8C2138C1EA13DCFCDF00F0E03F1937DA1D322C401454CF38D617C0FA0F99262930B0B11C4DD681FFEEDEB1F0E81FB0F8C41F27F3FD381FF3EB3B500C19493E182B652253B4040E32A7F2333BD40D2733CCF02E23E32E370A132F12EC5824F0DF483FF4CF4643A4B87F06954CC5EB2E7D0E9A6E197EDC37CD55F5FF9EF83ED48D812BD9A1B623D6FEBD0A1E4658F908142618A8233000021117063EF6EF113EE5E32C0AF1D724B912E0E8811BF9B7C4FC0D0919FE082400E72016FC2304140A2A09F4FC1BF2FB12240507E5F3DD2C93C9FA2E81DAEF269D030E1EF9E811E172F618C86912090E39FCF5F110F204E444CDFE2266D2224A62FE0E1409030218AA38F2D18C1D02F281E3F3E4C40F05BBB3F54E108FF016EBDDCF07EFF3FB27D0CD29E3E2CC4518FBE437E830C838F5471C241F7F30D4B30C24FBDBC45124E29C33060AC8EB2B65DCAE367F2EBAD3467EC814074F00D7D0351B44ED1555EFF01448E9FBDE54DB02DC7FE820FC3D051912EA2501F4922BF0F0A21206F1C50608F4FB13FE1906F853F2CB1BFA00110D07174CE38D503A07D9E5A3FA2CC881FF41DE0FF707D44D11D43D1C16F918000BEE2BF32F001DE4EC1814E9CC03A1079CDC812DC4C7F9373D0461C7703653D43D4EF9CADEEBE0392BF5810BFA0EC4C6E64802D1B93E3DCAF6325FFC0B115A1E03BD3030D6DB0C1ACFE0082C0EFDD044080B2DCDFE0C1ABB0D091DD3F51ECDCAFB10CEE7E504A221F9E8C55FF8F0DB7F0CF5CA563AF80F7EB9A9E95BAAF8121BE81750F7FD7A5BC9395E7FE522111FE355FB19043917F9AD53B695D517EFB59F3F40947F06FCBE2A5EF1DF6F38F4C15C26E6F31C231CDF543BD104110F03100438D23C0E37BEF3F015070F0DE401592FFC137FFC2FD163BF24E1EFB9162A81C1F72CB31EE83D9558F314C549DBE1C939112AE740243D0944BD17F00FE3991807A9A72581C8E8E58AED14D7D80A06053F280D2C1A21232F0CD4F85D6BD81A483212374D27062F4938341615F810EFFE0427EBC9AC12EFCBC7FEE1A08117E6AEBAD706043EE21911260412371C5401BB2929DB9EFF09BF9D09E9ED20F0D2F3609DFA414C810C3905BB263C1105202105EA0E2D8E8ADBE699A5DB0ADCDFB2C0390A13D06841EED8307F14F22E4E15081A4BCD2E9033BFE1D9B60502B192010CF281F9F400BF182427D8E1DE4644DDEC655F11CD3D7D46081454FBF502E31706192021DB125A23F1EA7F13DBB45CF0F7A4200310C631FB1BC9E2E426F3E5E24B0BF845F6E136180F041DFBD81D43FA180EFB082110AA3A61DD81431ECD82340D0CBBE900002BEFF1035418D2AC27291ABC423B2BFE17E4415AF5DA3D6DA4DA1F368115B91EE10BA6C64E0CE3EB49032416210ED40B0527164A1E11F8F9BDA2D31EADADEE289A850248BBF77F2CB7FE31D7CB4449AD233F3DB94F025618FD13041FF2DA253708D5F54A1BB0E72133EEE9344AE5D2E7280AE3A7143CFB81B75500A9BFCC6781C2E779CCAE455407B361F938CB4EDC6E0611B714F6F5AC013D01FFE712EF02045A9A0A4834B9E7232AB8FFE62CD25CF106DA7CAECAE64FCDAF1116AEDF1EEB20130BAC48E90EC0571D21B87FFC"> : tensor<64x10x4x1xi8>}> : () -> tensor<64x10x4x1xi8> + %63 = "tosa.const"() <{values = dense<[-395, -162, -763, 80, -157, -3030, -120, -1017, -93, -662, -273, -421, -108, 170, -258, -329, -291, -319, -165, -711, 126, 781, 165, -506, 88, -183, 534, -338, -309, -721, 580, 599, 117, 314, -24, -1381, 445, 240, -174, -236, -115, -28, -320, 416, 33, -146, 148, -559, 15, 528, -250, -218, -583, 247, -116, -338, -231, 399, 205, 236, 494, -236, 434, 151]> : tensor<64xi32>}> : () -> tensor<64xi32> + %64 = "tosa.const"() <{values = dense<83> : tensor<1xi8>}> : () -> tensor<1xi8> + %65 = "tosa.const"() <{values = dense<0> : tensor<1xi8>}> : () -> tensor<1xi8> + %66 = tosa.conv2d %arg0, %62, %63, %64, %65 {acc_type = i32, dilation = array, pad = array, stride = array} : (tensor<1x49x10x1xi8>, tensor<64x10x4x1xi8>, tensor<64xi32>, tensor<1xi8>, tensor<1xi8>) -> tensor<1x25x5x64xi32> + %67 = tosa.rescale %66, %59, %58, %61, %60 {input_unsigned = false, output_unsigned = false, per_channel = true, rounding_mode = DOUBLE_ROUND, scale32 = true} : (tensor<1x25x5x64xi32>, tensor<64xi32>, tensor<64xi8>, tensor<1xi32>, tensor<1xi8>) -> tensor<1x25x5x64xi8> + %68 = tosa.clamp %67 {max_val = 127 : i8, min_val = -128 : i8} : (tensor<1x25x5x64xi8>) -> tensor<1x25x5x64xi8> + %69 = tosa.reshape %57, %0 : (tensor<1x3x3x64xi8>, !tosa.shape<4>) -> tensor<3x3x64x1xi8> + %70 = tosa.depthwise_conv2d %68, %69, %56, %60, %65 {acc_type = i32, dilation = array, pad = array, stride = array} : (tensor<1x25x5x64xi8>, tensor<3x3x64x1xi8>, tensor<64xi32>, tensor<1xi8>, tensor<1xi8>) -> tensor<1x25x5x64xi32> + %71 = tosa.rescale %70, %55, %54, %61, %60 {input_unsigned = false, output_unsigned = false, per_channel = true, rounding_mode = DOUBLE_ROUND, scale32 = true} : (tensor<1x25x5x64xi32>, tensor<64xi32>, tensor<64xi8>, tensor<1xi32>, tensor<1xi8>) -> tensor<1x25x5x64xi8> + %72 = tosa.clamp %71 {max_val = 127 : i8, min_val = -128 : i8} : (tensor<1x25x5x64xi8>) -> tensor<1x25x5x64xi8> + %73 = tosa.conv2d %72, %53, %52, %60, %65 {acc_type = i32, dilation = array, pad = array, stride = array} : (tensor<1x25x5x64xi8>, tensor<64x1x1x64xi8>, tensor<64xi32>, tensor<1xi8>, tensor<1xi8>) -> tensor<1x25x5x64xi32> + %74 = tosa.rescale %73, %51, %50, %61, %60 {input_unsigned = false, output_unsigned = false, per_channel = true, rounding_mode = DOUBLE_ROUND, scale32 = true} : (tensor<1x25x5x64xi32>, tensor<64xi32>, tensor<64xi8>, tensor<1xi32>, tensor<1xi8>) -> tensor<1x25x5x64xi8> + %75 = tosa.clamp %74 {max_val = 127 : i8, min_val = -128 : i8} : (tensor<1x25x5x64xi8>) -> tensor<1x25x5x64xi8> + %76 = tosa.reshape %49, %0 : (tensor<1x3x3x64xi8>, !tosa.shape<4>) -> tensor<3x3x64x1xi8> + %77 = tosa.depthwise_conv2d %75, %76, %48, %60, %65 {acc_type = i32, dilation = array, pad = array, stride = array} : (tensor<1x25x5x64xi8>, tensor<3x3x64x1xi8>, tensor<64xi32>, tensor<1xi8>, tensor<1xi8>) -> tensor<1x25x5x64xi32> + %78 = tosa.rescale %77, %47, %46, %61, %60 {input_unsigned = false, output_unsigned = false, per_channel = true, rounding_mode = DOUBLE_ROUND, scale32 = true} : (tensor<1x25x5x64xi32>, tensor<64xi32>, tensor<64xi8>, tensor<1xi32>, tensor<1xi8>) -> tensor<1x25x5x64xi8> + %79 = tosa.clamp %78 {max_val = 127 : i8, min_val = -128 : i8} : (tensor<1x25x5x64xi8>) -> tensor<1x25x5x64xi8> + %80 = tosa.conv2d %79, %45, %44, %60, %65 {acc_type = i32, dilation = array, pad = array, stride = array} : (tensor<1x25x5x64xi8>, tensor<64x1x1x64xi8>, tensor<64xi32>, tensor<1xi8>, tensor<1xi8>) -> tensor<1x25x5x64xi32> + %81 = tosa.rescale %80, %43, %42, %61, %60 {input_unsigned = false, output_unsigned = false, per_channel = true, rounding_mode = DOUBLE_ROUND, scale32 = true} : (tensor<1x25x5x64xi32>, tensor<64xi32>, tensor<64xi8>, tensor<1xi32>, tensor<1xi8>) -> tensor<1x25x5x64xi8> + %82 = tosa.clamp %81 {max_val = 127 : i8, min_val = -128 : i8} : (tensor<1x25x5x64xi8>) -> tensor<1x25x5x64xi8> + %83 = tosa.reshape %41, %0 : (tensor<1x3x3x64xi8>, !tosa.shape<4>) -> tensor<3x3x64x1xi8> + %84 = tosa.depthwise_conv2d %82, %83, %40, %60, %65 {acc_type = i32, dilation = array, pad = array, stride = array} : (tensor<1x25x5x64xi8>, tensor<3x3x64x1xi8>, tensor<64xi32>, tensor<1xi8>, tensor<1xi8>) -> tensor<1x25x5x64xi32> + %85 = tosa.rescale %84, %39, %38, %61, %60 {input_unsigned = false, output_unsigned = false, per_channel = true, rounding_mode = DOUBLE_ROUND, scale32 = true} : (tensor<1x25x5x64xi32>, tensor<64xi32>, tensor<64xi8>, tensor<1xi32>, tensor<1xi8>) -> tensor<1x25x5x64xi8> + %86 = tosa.clamp %85 {max_val = 127 : i8, min_val = -128 : i8} : (tensor<1x25x5x64xi8>) -> tensor<1x25x5x64xi8> + %87 = tosa.conv2d %86, %37, %36, %60, %65 {acc_type = i32, dilation = array, pad = array, stride = array} : (tensor<1x25x5x64xi8>, tensor<64x1x1x64xi8>, tensor<64xi32>, tensor<1xi8>, tensor<1xi8>) -> tensor<1x25x5x64xi32> + %88 = tosa.rescale %87, %35, %34, %61, %60 {input_unsigned = false, output_unsigned = false, per_channel = true, rounding_mode = DOUBLE_ROUND, scale32 = true} : (tensor<1x25x5x64xi32>, tensor<64xi32>, tensor<64xi8>, tensor<1xi32>, tensor<1xi8>) -> tensor<1x25x5x64xi8> + %89 = tosa.clamp %88 {max_val = 127 : i8, min_val = -128 : i8} : (tensor<1x25x5x64xi8>) -> tensor<1x25x5x64xi8> + %90 = tosa.reshape %33, %0 : (tensor<1x3x3x64xi8>, !tosa.shape<4>) -> tensor<3x3x64x1xi8> + %91 = tosa.depthwise_conv2d %89, %90, %32, %60, %65 {acc_type = i32, dilation = array, pad = array, stride = array} : (tensor<1x25x5x64xi8>, tensor<3x3x64x1xi8>, tensor<64xi32>, tensor<1xi8>, tensor<1xi8>) -> tensor<1x25x5x64xi32> + %92 = tosa.rescale %91, %31, %30, %61, %60 {input_unsigned = false, output_unsigned = false, per_channel = true, rounding_mode = DOUBLE_ROUND, scale32 = true} : (tensor<1x25x5x64xi32>, tensor<64xi32>, tensor<64xi8>, tensor<1xi32>, tensor<1xi8>) -> tensor<1x25x5x64xi8> + %93 = tosa.clamp %92 {max_val = 127 : i8, min_val = -128 : i8} : (tensor<1x25x5x64xi8>) -> tensor<1x25x5x64xi8> + %94 = tosa.conv2d %93, %29, %28, %60, %65 {acc_type = i32, dilation = array, pad = array, stride = array} : (tensor<1x25x5x64xi8>, tensor<64x1x1x64xi8>, tensor<64xi32>, tensor<1xi8>, tensor<1xi8>) -> tensor<1x25x5x64xi32> + %95 = tosa.rescale %94, %27, %26, %61, %60 {input_unsigned = false, output_unsigned = false, per_channel = true, rounding_mode = DOUBLE_ROUND, scale32 = true} : (tensor<1x25x5x64xi32>, tensor<64xi32>, tensor<64xi8>, tensor<1xi32>, tensor<1xi8>) -> tensor<1x25x5x64xi8> + %96 = tosa.clamp %95 {max_val = 127 : i8, min_val = -128 : i8} : (tensor<1x25x5x64xi8>) -> tensor<1x25x5x64xi8> + %97 = tosa.avg_pool2d %96, %65, %65 {acc_type = i32, kernel = array, pad = array, stride = array} : (tensor<1x25x5x64xi8>, tensor<1xi8>, tensor<1xi8>) -> tensor<1x1x1x64xi8> + %98 = tosa.reshape %25, %23 : (tensor<12x64xi8>, !tosa.shape<4>) -> tensor<12x1x1x64xi8> + %99 = tosa.conv2d %97, %98, %24, %60, %65 {acc_type = i32, dilation = array, pad = array, stride = array} : (tensor<1x1x1x64xi8>, tensor<12x1x1x64xi8>, tensor<12xi32>, tensor<1xi8>, tensor<1xi8>) -> tensor<1x1x1x12xi32> + %100 = tosa.rescale %99, %21, %20, %61, %22 {input_unsigned = false, output_unsigned = false, per_channel = false, rounding_mode = DOUBLE_ROUND, scale32 = true} : (tensor<1x1x1x12xi32>, tensor<1xi32>, tensor<1xi8>, tensor<1xi32>, tensor<1xi8>) -> tensor<1x1x1x12xi8> + %101 = tosa.reshape %100, %19 : (tensor<1x1x1x12xi8>, !tosa.shape<2>) -> tensor<1x12xi8> + %102 = tosa.rescale %101, %18, %17, %22, %61 {input_unsigned = false, output_unsigned = false, per_channel = false, rounding_mode = SINGLE_ROUND, scale32 = true} : (tensor<1x12xi8>, tensor<1xi32>, tensor<1xi8>, tensor<1xi8>, tensor<1xi32>) -> tensor<1x12xi32> + %103 = tosa.reduce_max %102 {axis = 1 : i32} : (tensor<1x12xi32>) -> tensor<1x1xi32> + %104 = tosa.sub %102, %103 : (tensor<1x12xi32>, tensor<1x1xi32>) -> tensor<1x12xi32> + %105 = tosa.rescale %104, %18, %12, %61, %11 {input_unsigned = false, output_unsigned = false, per_channel = false, rounding_mode = SINGLE_ROUND, scale32 = true} : (tensor<1x12xi32>, tensor<1xi32>, tensor<1xi8>, tensor<1xi32>, tensor<1xi16>) -> tensor<1x12xi16> + %106 = tosa.table %105, %16 : (tensor<1x12xi16>, tensor<513xi16>) -> tensor<1x12xi32> + %107 = tosa.table %105, %15 : (tensor<1x12xi16>, tensor<513xi16>) -> tensor<1x12xi32> + %108 = tosa.table %105, %14 : (tensor<1x12xi16>, tensor<513xi16>) -> tensor<1x12xi32> + %109 = tosa.table %105, %13 : (tensor<1x12xi16>, tensor<513xi16>) -> tensor<1x12xi32> + %110 = tosa.logical_left_shift %106, %10 : (tensor<1x12xi32>, tensor<1x1xi32>) -> tensor<1x12xi32> + %111 = tosa.logical_left_shift %107, %9 : (tensor<1x12xi32>, tensor<1x1xi32>) -> tensor<1x12xi32> + %112 = tosa.logical_left_shift %108, %8 : (tensor<1x12xi32>, tensor<1x1xi32>) -> tensor<1x12xi32> + %113 = tosa.arithmetic_right_shift %109, %7 {round = true} : (tensor<1x12xi32>, tensor<1x1xi32>) -> tensor<1x12xi32> + %114 = tosa.add %110, %111 : (tensor<1x12xi32>, tensor<1x12xi32>) -> tensor<1x12xi32> + %115 = tosa.add %114, %112 : (tensor<1x12xi32>, tensor<1x12xi32>) -> tensor<1x12xi32> + %116 = tosa.add %115, %113 : (tensor<1x12xi32>, tensor<1x12xi32>) -> tensor<1x12xi32> + %117 = tosa.arithmetic_right_shift %116, %6 {round = true} : (tensor<1x12xi32>, tensor<1x1xi32>) -> tensor<1x12xi32> + %118 = tosa.reduce_sum %117 {axis = 1 : i32} : (tensor<1x12xi32>) -> tensor<1x1xi32> + %119 = tosa.clz %118 : (tensor<1x1xi32>) -> tensor<1x1xi32> + %120 = tosa.sub %119, %8 : (tensor<1x1xi32>, tensor<1x1xi32>) -> tensor<1x1xi32> + %121 = tosa.logical_left_shift %118, %120 : (tensor<1x1xi32>, tensor<1x1xi32>) -> tensor<1x1xi32> + %122 = tosa.mul %121, %2, %22 : (tensor<1x1xi32>, tensor<1x1xi32>, tensor<1xi8>) -> tensor<1x1xi32> + %123 = tosa.add %122, %3 : (tensor<1x1xi32>, tensor<1x1xi32>) -> tensor<1x1xi32> + %124 = tosa.mul %123, %121, %22 : (tensor<1x1xi32>, tensor<1x1xi32>, tensor<1xi8>) -> tensor<1x1xi32> + %125 = tosa.sub %4, %124 : (tensor<1x1xi32>, tensor<1x1xi32>) -> tensor<1x1xi32> + %126 = tosa.mul %123, %125, %22 : (tensor<1x1xi32>, tensor<1x1xi32>, tensor<1xi8>) -> tensor<1x1xi32> + %127 = tosa.mul %126, %5, %65 : (tensor<1x1xi32>, tensor<1x1xi32>, tensor<1xi8>) -> tensor<1x1xi32> + %128 = tosa.add %123, %127 : (tensor<1x1xi32>, tensor<1x1xi32>) -> tensor<1x1xi32> + %129 = tosa.mul %128, %121, %22 : (tensor<1x1xi32>, tensor<1x1xi32>, tensor<1xi8>) -> tensor<1x1xi32> + %130 = tosa.sub %4, %129 : (tensor<1x1xi32>, tensor<1x1xi32>) -> tensor<1x1xi32> + %131 = tosa.mul %128, %130, %22 : (tensor<1x1xi32>, tensor<1x1xi32>, tensor<1xi8>) -> tensor<1x1xi32> + %132 = tosa.mul %131, %5, %65 : (tensor<1x1xi32>, tensor<1x1xi32>, tensor<1xi8>) -> tensor<1x1xi32> + %133 = tosa.add %128, %132 : (tensor<1x1xi32>, tensor<1x1xi32>) -> tensor<1x1xi32> + %134 = tosa.mul %133, %121, %22 : (tensor<1x1xi32>, tensor<1x1xi32>, tensor<1xi8>) -> tensor<1x1xi32> + %135 = tosa.sub %4, %134 : (tensor<1x1xi32>, tensor<1x1xi32>) -> tensor<1x1xi32> + %136 = tosa.mul %133, %135, %22 : (tensor<1x1xi32>, tensor<1x1xi32>, tensor<1xi8>) -> tensor<1x1xi32> + %137 = tosa.mul %136, %5, %65 : (tensor<1x1xi32>, tensor<1x1xi32>, tensor<1xi8>) -> tensor<1x1xi32> + %138 = tosa.add %133, %137 : (tensor<1x1xi32>, tensor<1x1xi32>) -> tensor<1x1xi32> + %139 = tosa.mul %116, %138, %17 : (tensor<1x12xi32>, tensor<1x1xi32>, tensor<1xi8>) -> tensor<1x12xi32> + %140 = tosa.sub %1, %119 : (tensor<1x1xi32>, tensor<1x1xi32>) -> tensor<1x1xi32> + %141 = tosa.arithmetic_right_shift %139, %140 {round = true} : (tensor<1x12xi32>, tensor<1x1xi32>) -> tensor<1x12xi32> + %142 = tosa.rescale %141, %18, %17, %61, %60 {input_unsigned = false, output_unsigned = false, per_channel = false, rounding_mode = SINGLE_ROUND, scale32 = true} : (tensor<1x12xi32>, tensor<1xi32>, tensor<1xi8>, tensor<1xi32>, tensor<1xi8>) -> tensor<1x12xi8> + return %142 : tensor<1x12xi8> + } +} diff --git a/benchmark_sources/MLPerfTiny/Int8/aww/iree/benchmark.hpp b/benchmark_sources/MLPerfTiny/Int8/aww/iree/benchmark.hpp new file mode 100644 index 0000000..7fa4793 --- /dev/null +++ b/benchmark_sources/MLPerfTiny/Int8/aww/iree/benchmark.hpp @@ -0,0 +1,136 @@ +#ifndef AWW_INT8_IREE_BENCHMARK_HPP +#define AWW_INT8_IREE_BENCHMARK_HPP + +#include + +#include "aww_int8_input_data.h" +#include "aww_int8_model_settings.h" +#include "aww_int8_output_data_ref.h" +#include "simulator.hpp" + +#include "iree/base/api.h" +#include "iree/hal/api.h" +#include "iree/modules/hal/module.h" +#include "iree/runtime/api.h" +#include "iree/vm/api.h" +#include "iree/vm/bytecode/module.h" + +extern "C" { +extern const unsigned char iree_model_vmfb[]; +extern const unsigned int iree_model_vmfb_len; +} + +class Benchmark { + private: + iree_runtime_instance_t* instance = nullptr; + iree_runtime_session_t* session = nullptr; + iree_runtime_call_t call; + bool call_initialized = false; + + public: + Benchmark() { + iree_allocator_t allocator = iree_allocator_system(); + + iree_runtime_instance_options_t instance_options; + iree_runtime_instance_options_initialize(&instance_options); + iree_runtime_instance_options_use_all_available_drivers(&instance_options); + if (!iree_status_is_ok( + iree_runtime_instance_create(&instance_options, allocator, &instance))) { + return; + } + + iree_hal_device_t* device = nullptr; + if (!iree_status_is_ok(iree_runtime_instance_try_create_default_device( + instance, iree_make_cstring_view("local-sync"), &device))) { + return; + } + + iree_runtime_session_options_t session_options; + iree_runtime_session_options_initialize(&session_options); + iree_status_t status = iree_runtime_session_create_with_device( + instance, &session_options, device, allocator, &session); + iree_hal_device_release(device); + if (!iree_status_is_ok(status)) return; + + iree_vm_module_t* module = nullptr; + status = iree_vm_bytecode_module_create( + iree_runtime_instance_vm_instance(instance), IREE_VM_BYTECODE_MODULE_FLAG_NONE, + iree_make_const_byte_span(iree_model_vmfb, iree_model_vmfb_len), + iree_allocator_null(), allocator, &module); + if (!iree_status_is_ok(status)) return; + + status = iree_runtime_session_append_module(session, module); + iree_vm_module_release(module); + if (!iree_status_is_ok(status)) return; + + call_initialized = iree_status_is_ok(iree_runtime_call_initialize_by_name( + session, iree_make_cstring_view("module.main"), &call)); + } + + inline int run_benchmark() { + if (!instance || !session || !call_initialized) return 1; + + const iree_hal_dim_t shape[] = {1, 49, 10, 1}; + iree_hal_buffer_view_t* arg0 = nullptr; + iree_status_t status = iree_hal_buffer_view_allocate_buffer_copy( + iree_runtime_session_device(session), + iree_runtime_session_device_allocator(session), 4, shape, + IREE_HAL_ELEMENT_TYPE_SINT_8, IREE_HAL_ENCODING_TYPE_DENSE_ROW_MAJOR, + (iree_hal_buffer_params_t){.usage = IREE_HAL_BUFFER_USAGE_DEFAULT, + .type = IREE_HAL_MEMORY_TYPE_DEVICE_LOCAL}, + iree_make_const_byte_span(aww_int8_input_data[0], + aww_int8_input_data_len[0]), + &arg0); + if (!iree_status_is_ok(status)) return 2; + iree_runtime_call_inputs_push_back_buffer_view(&call, arg0); + iree_hal_buffer_view_release(arg0); + + Simulator simulator; + simulator.begin_measurement(); + status = iree_runtime_call_invoke(&call, 0); + simulator.end_measurement(); + if (!iree_status_is_ok(status)) { + simulator.terminate(3); + return 3; + } + + iree_hal_buffer_view_t* ret0 = nullptr; + status = iree_runtime_call_outputs_pop_front_buffer_view(&call, &ret0); + if (!iree_status_is_ok(status) || !ret0) { + simulator.terminate(4); + return 4; + } + + iree_hal_buffer_mapping_t mapping; + iree_hal_buffer_t* buffer = iree_hal_buffer_view_buffer(ret0); + if (!iree_status_is_ok(iree_hal_buffer_map_range( + buffer, IREE_HAL_MAPPING_MODE_SCOPED, IREE_HAL_MEMORY_ACCESS_READ, + 0, aww_int8_model_label_cnt, &mapping))) { + iree_hal_buffer_view_release(ret0); + simulator.terminate(5); + return 5; + } + + const int8_t* output = reinterpret_cast(mapping.contents.data); + uint8_t top_index = 0; + for (size_t i = 1; i < aww_int8_model_label_cnt; ++i) { + if (output[i] > output[top_index]) top_index = static_cast(i); + } + iree_hal_buffer_unmap_range(&mapping); + iree_hal_buffer_view_release(ret0); + + const int result = top_index == aww_int8_output_data_ref[0] ? 0 : 6; + simulator.terminate(result); + return result; + } + + int validate_benchmark() { return 0; } + + ~Benchmark() { + if (call_initialized) iree_runtime_call_deinitialize(&call); + if (session) iree_runtime_session_release(session); + if (instance) iree_runtime_instance_release(instance); + } +}; + +#endif // AWW_INT8_IREE_BENCHMARK_HPP diff --git a/benchmark_sources/MLPerfTiny/Int8/aww/benchmark.hpp b/benchmark_sources/MLPerfTiny/Int8/aww/tflite/benchmark.hpp similarity index 100% rename from benchmark_sources/MLPerfTiny/Int8/aww/benchmark.hpp rename to benchmark_sources/MLPerfTiny/Int8/aww/tflite/benchmark.hpp From 14eaec14e6f8209c782ad9d918318e35dd424fa4 Mon Sep 17 00:00:00 2001 From: Muhammed Efe Cetin Date: Fri, 7 Aug 2026 15:05:17 +0200 Subject: [PATCH 12/12] benchmark_sources: fix toycar test for IREE w/ CVA6 core --- .../MLPerfTiny/CMake/add_test.cmake | 2 +- .../MLPerfTiny/Int8/aww/iree/benchmark.hpp | 170 ++++------------ .../MLPerfTiny/Int8/toycar/iree/benchmark.hpp | 183 ++++------------- benchmark_sources/framework/main.cpp | 2 +- .../generic_iree/CMake/add_test.cmake | 8 +- .../baremetal/benchmark_template.hpp | 22 +- .../generic_iree/iree/CMakeLists.txt | 4 +- ...v32-v-extension-struct-vectorization.patch | 192 ++++++++++++++++++ ...-v-extension-flatcc-unaligned-access.patch | 27 +++ .../cv32a60x/verilator_support_cv32a60x.cpp | 6 +- 10 files changed, 331 insertions(+), 285 deletions(-) create mode 100644 benchmark_sources/generic_iree/iree/iree-patches/0006-fix-rv32-v-extension-struct-vectorization.patch create mode 100644 benchmark_sources/generic_iree/iree/iree-patches/0007-fix-rv32-v-extension-flatcc-unaligned-access.patch diff --git a/benchmark_sources/MLPerfTiny/CMake/add_test.cmake b/benchmark_sources/MLPerfTiny/CMake/add_test.cmake index 231d332..1f683b9 100644 --- a/benchmark_sources/MLPerfTiny/CMake/add_test.cmake +++ b/benchmark_sources/MLPerfTiny/CMake/add_test.cmake @@ -481,7 +481,7 @@ macro(add_Benchmark_IREE_Verilator TEST SOURCE_DIR TEST_BUILD_DIR) # Add Test add_test(NAME ${TEST_NAME} - COMMAND ./${VERILATOR_MODEL_DIR}/build/verilated_model ${TEST_BUILD_DIR}/prog_${TEST_NAME}.txt ${MEM_PORTS} ${MEM_W} 4194304 ${MEM_LATENCY} 1 ${TEST_NAME} ${VREG_W} 0 ${VCD_TRACE_FLAG} ${VCD_TRACE_ARG} ${COMMIT_FLAG} ${COMMIT_ARG} + COMMAND ./${VERILATOR_MODEL_DIR}/build/verilated_model ${TEST_BUILD_DIR}/prog_${TEST_NAME}.txt ${MEM_PORTS} ${MEM_W} 8388608 ${MEM_LATENCY} 1 ${TEST_NAME} ${VREG_W} 0 ${VCD_TRACE_FLAG} ${VCD_TRACE_ARG} ${COMMIT_FLAG} ${COMMIT_ARG} WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/../..) set_tests_properties(${TEST_NAME} PROPERTIES TIMEOUT 1000) diff --git a/benchmark_sources/MLPerfTiny/Int8/aww/iree/benchmark.hpp b/benchmark_sources/MLPerfTiny/Int8/aww/iree/benchmark.hpp index 7fa4793..0ebc7fa 100644 --- a/benchmark_sources/MLPerfTiny/Int8/aww/iree/benchmark.hpp +++ b/benchmark_sources/MLPerfTiny/Int8/aww/iree/benchmark.hpp @@ -1,136 +1,54 @@ -#ifndef AWW_INT8_IREE_BENCHMARK_HPP -#define AWW_INT8_IREE_BENCHMARK_HPP - -#include +#pragma once #include "aww_int8_input_data.h" #include "aww_int8_model_settings.h" #include "aww_int8_output_data_ref.h" -#include "simulator.hpp" - -#include "iree/base/api.h" -#include "iree/hal/api.h" -#include "iree/modules/hal/module.h" -#include "iree/runtime/api.h" -#include "iree/vm/api.h" -#include "iree/vm/bytecode/module.h" +#include extern "C" { extern const unsigned char iree_model_vmfb[]; extern const unsigned int iree_model_vmfb_len; } -class Benchmark { - private: - iree_runtime_instance_t* instance = nullptr; - iree_runtime_session_t* session = nullptr; - iree_runtime_call_t call; - bool call_initialized = false; - - public: - Benchmark() { - iree_allocator_t allocator = iree_allocator_system(); - - iree_runtime_instance_options_t instance_options; - iree_runtime_instance_options_initialize(&instance_options); - iree_runtime_instance_options_use_all_available_drivers(&instance_options); - if (!iree_status_is_ok( - iree_runtime_instance_create(&instance_options, allocator, &instance))) { - return; - } - - iree_hal_device_t* device = nullptr; - if (!iree_status_is_ok(iree_runtime_instance_try_create_default_device( - instance, iree_make_cstring_view("local-sync"), &device))) { - return; - } - - iree_runtime_session_options_t session_options; - iree_runtime_session_options_initialize(&session_options); - iree_status_t status = iree_runtime_session_create_with_device( - instance, &session_options, device, allocator, &session); - iree_hal_device_release(device); - if (!iree_status_is_ok(status)) return; - - iree_vm_module_t* module = nullptr; - status = iree_vm_bytecode_module_create( - iree_runtime_instance_vm_instance(instance), IREE_VM_BYTECODE_MODULE_FLAG_NONE, - iree_make_const_byte_span(iree_model_vmfb, iree_model_vmfb_len), - iree_allocator_null(), allocator, &module); - if (!iree_status_is_ok(status)) return; - - status = iree_runtime_session_append_module(session, module); - iree_vm_module_release(module); - if (!iree_status_is_ok(status)) return; - - call_initialized = iree_status_is_ok(iree_runtime_call_initialize_by_name( - session, iree_make_cstring_view("module.main"), &call)); - } - - inline int run_benchmark() { - if (!instance || !session || !call_initialized) return 1; - - const iree_hal_dim_t shape[] = {1, 49, 10, 1}; - iree_hal_buffer_view_t* arg0 = nullptr; - iree_status_t status = iree_hal_buffer_view_allocate_buffer_copy( - iree_runtime_session_device(session), - iree_runtime_session_device_allocator(session), 4, shape, - IREE_HAL_ELEMENT_TYPE_SINT_8, IREE_HAL_ENCODING_TYPE_DENSE_ROW_MAJOR, - (iree_hal_buffer_params_t){.usage = IREE_HAL_BUFFER_USAGE_DEFAULT, - .type = IREE_HAL_MEMORY_TYPE_DEVICE_LOCAL}, - iree_make_const_byte_span(aww_int8_input_data[0], - aww_int8_input_data_len[0]), - &arg0); - if (!iree_status_is_ok(status)) return 2; - iree_runtime_call_inputs_push_back_buffer_view(&call, arg0); - iree_hal_buffer_view_release(arg0); - - Simulator simulator; - simulator.begin_measurement(); - status = iree_runtime_call_invoke(&call, 0); - simulator.end_measurement(); - if (!iree_status_is_ok(status)) { - simulator.terminate(3); - return 3; - } - - iree_hal_buffer_view_t* ret0 = nullptr; - status = iree_runtime_call_outputs_pop_front_buffer_view(&call, &ret0); - if (!iree_status_is_ok(status) || !ret0) { - simulator.terminate(4); - return 4; - } - - iree_hal_buffer_mapping_t mapping; - iree_hal_buffer_t* buffer = iree_hal_buffer_view_buffer(ret0); - if (!iree_status_is_ok(iree_hal_buffer_map_range( - buffer, IREE_HAL_MAPPING_MODE_SCOPED, IREE_HAL_MEMORY_ACCESS_READ, - 0, aww_int8_model_label_cnt, &mapping))) { - iree_hal_buffer_view_release(ret0); - simulator.terminate(5); - return 5; - } - - const int8_t* output = reinterpret_cast(mapping.contents.data); - uint8_t top_index = 0; - for (size_t i = 1; i < aww_int8_model_label_cnt; ++i) { - if (output[i] > output[top_index]) top_index = static_cast(i); - } - iree_hal_buffer_unmap_range(&mapping); - iree_hal_buffer_view_release(ret0); - - const int result = top_index == aww_int8_output_data_ref[0] ? 0 : 6; - simulator.terminate(result); - return result; - } - - int validate_benchmark() { return 0; } - - ~Benchmark() { - if (call_initialized) iree_runtime_call_deinitialize(&call); - if (session) iree_runtime_session_release(session); - if (instance) iree_runtime_instance_release(instance); - } -}; - -#endif // AWW_INT8_IREE_BENCHMARK_HPP +#define TEST_NAME "aww_int8" +#define TEST_FUNCTION_NAME "module.main" +#define TEST_VMFB_DATA iree_model_vmfb +#define TEST_VMFB_DATA_LEN iree_model_vmfb_len +#define TEST_OUTPUT_SIZE aww_int8_model_label_cnt +#define STATIC_POOL_SIZE (4 * 1024 * 1024) + +#define TEST_INPUT_SETUP(allocator, device_allocator, session, call) \ + ({ \ + int _setup_ok = 1; \ + iree_hal_dim_t shape[4] = {1, 49, 10, 1}; \ + iree_hal_buffer_view_t* arg0 = nullptr; \ + iree_status_t status = iree_hal_buffer_view_allocate_buffer_copy( \ + iree_runtime_session_device(session), \ + device_allocator, 4, shape, \ + IREE_HAL_ELEMENT_TYPE_SINT_8, IREE_HAL_ENCODING_TYPE_DENSE_ROW_MAJOR, \ + (iree_hal_buffer_params_t){.usage = IREE_HAL_BUFFER_USAGE_DEFAULT, \ + .type = IREE_HAL_MEMORY_TYPE_DEVICE_LOCAL}, \ + iree_make_const_byte_span(aww_int8_input_data[0], \ + aww_int8_input_data_len[0]), \ + &arg0); \ + if (!iree_status_is_ok(status)) { \ + _setup_ok = 0; \ + } else { \ + iree_runtime_call_inputs_push_back_buffer_view(call, arg0); \ + iree_hal_buffer_view_release(arg0); \ + } \ + _setup_ok; \ + }) + +#define TEST_OUTPUT_VALIDATE(out_ptr, out_size) \ + ({ \ + uint8_t top_index = 0; \ + for (size_t i = 1; i < aww_int8_model_label_cnt; ++i) { \ + if (out_ptr[i] > out_ptr[top_index]) top_index = static_cast(i); \ + } \ + (top_index == aww_int8_output_data_ref[0]); \ + }) + +#define TEST_CLEANUP() do {} while(0) + +#include "../../../../generic_iree/baremetal/benchmark_template.hpp" diff --git a/benchmark_sources/MLPerfTiny/Int8/toycar/iree/benchmark.hpp b/benchmark_sources/MLPerfTiny/Int8/toycar/iree/benchmark.hpp index 9ac7827..8b40d13 100644 --- a/benchmark_sources/MLPerfTiny/Int8/toycar/iree/benchmark.hpp +++ b/benchmark_sources/MLPerfTiny/Int8/toycar/iree/benchmark.hpp @@ -1,19 +1,7 @@ -#ifndef BENCHMARK_HPP -#define BENCHMARK_HPP +#pragma once -#include "toycar_int8_model_settings.h" #include "toycar_int8_input_data.h" #include "toycar_int8_output_data_ref.h" -#include "simulator.hpp" - -// IREE framework stub implementation -#include "iree/base/api.h" -#include "iree/hal/api.h" -#include "iree/modules/hal/module.h" -#include "iree/runtime/api.h" -#include "iree/vm/api.h" -#include "iree/vm/bytecode/module.h" - #include // For abs() extern "C" { @@ -21,130 +9,45 @@ extern "C" { extern const unsigned int iree_model_vmfb_len; } -class Benchmark -{ - private: - iree_runtime_instance_t* instance = nullptr; - iree_runtime_session_t* session = nullptr; - iree_runtime_call_t call; - - public: - Benchmark() { - iree_allocator_t allocator = iree_allocator_system(); - - iree_runtime_instance_options_t instance_options; - iree_runtime_instance_options_initialize(&instance_options); - iree_runtime_instance_options_use_all_available_drivers(&instance_options); - - iree_status_t status = iree_runtime_instance_create(&instance_options, allocator, &instance); - if (!iree_status_is_ok(status)) return; - - iree_hal_device_t* device = nullptr; - status = iree_runtime_instance_try_create_default_device( - instance, iree_make_cstring_view("local-sync"), &device); - if (!iree_status_is_ok(status)) return; - - iree_runtime_session_options_t session_options; - iree_runtime_session_options_initialize(&session_options); - status = iree_runtime_session_create_with_device( - instance, &session_options, device, allocator, &session); - iree_hal_device_release(device); - if (!iree_status_is_ok(status)) return; - - iree_vm_module_t* module = nullptr; - status = iree_vm_bytecode_module_create( - iree_runtime_instance_vm_instance(instance), IREE_VM_BYTECODE_MODULE_FLAG_NONE, - iree_make_const_byte_span(iree_model_vmfb, iree_model_vmfb_len), - iree_allocator_null(), allocator, &module); - if (!iree_status_is_ok(status)) return; - - status = iree_runtime_session_append_module(session, module); - iree_vm_module_release(module); - if (!iree_status_is_ok(status)) return; - - status = iree_runtime_call_initialize_by_name( - session, iree_make_cstring_view("module.main"), &call); - } - - inline int run_benchmark() { - if (!instance || !session) return 1; - - iree_hal_allocator_t* device_allocator = iree_runtime_session_device_allocator(session); - - iree_hal_dim_t shape[2] = {1, (iree_hal_dim_t)toycar_int8_input_data_len[0]}; - - iree_hal_buffer_view_t* arg0 = nullptr; - iree_status_t status = iree_hal_buffer_view_allocate_buffer_copy( - iree_runtime_session_device(session), device_allocator, 2, shape, - IREE_HAL_ELEMENT_TYPE_SINT_8, IREE_HAL_ENCODING_TYPE_DENSE_ROW_MAJOR, - (iree_hal_buffer_params_t){.usage = IREE_HAL_BUFFER_USAGE_DEFAULT, - .type = IREE_HAL_MEMORY_TYPE_DEVICE_LOCAL}, - iree_make_const_byte_span(toycar_int8_input_data[0], toycar_int8_input_data_len[0]), &arg0); - - if (!iree_status_is_ok(status)) return 2; - iree_runtime_call_inputs_push_back_buffer_view(&call, arg0); - iree_hal_buffer_view_release(arg0); - - Simulator simulator; - simulator.begin_measurement(); - - status = iree_runtime_call_invoke(&call, /*flags=*/0); - - simulator.end_measurement(); - - if (!iree_status_is_ok(status)) { - simulator.terminate(11); - return 3; - } - - iree_hal_buffer_view_t* ret0 = nullptr; - status = iree_runtime_call_outputs_pop_front_buffer_view(&call, &ret0); - if (!iree_status_is_ok(status) || !ret0) { - simulator.terminate(13); - return 4; - } - - iree_hal_buffer_t* buffer = iree_hal_buffer_view_buffer(ret0); - iree_hal_buffer_mapping_t mapping; - int result = 0; - - if (iree_status_is_ok(iree_hal_buffer_map_range( - buffer, IREE_HAL_MAPPING_MODE_SCOPED, IREE_HAL_MEMORY_ACCESS_READ, - 0, toycar_int8_input_data_len[0], &mapping))) { - - const int8_t* out_ptr = (const int8_t*)mapping.contents.data; - int32_t sum = 0; - for (size_t j = 0; j < toycar_int8_input_data_len[0]; j++) { - int32_t diff1 = (int8_t)toycar_int8_input_data[0][j] - out_ptr[j]; - sum += (diff1 * diff1); - } - sum /= toycar_int8_input_data_len[0]; - int32_t diff = abs(sum - (int32_t)toycar_int8_output_data_ref[0]); - - if (diff > 1) { - simulator.terminate(16); - result = 5; - } else { - simulator.terminate(0); - result = 0; - } - iree_hal_buffer_unmap_range(&mapping); - } else { - simulator.terminate(12); - result = 6; - } - - iree_hal_buffer_view_release(ret0); - return result; - } - - int validate_benchmark() { return 0; } - - ~Benchmark() { - iree_runtime_call_deinitialize(&call); - if (session) iree_runtime_session_release(session); - if (instance) iree_runtime_instance_release(instance); - } -}; - -#endif // BENCHMARK_HPP +#define TEST_NAME "toycar_int8" +#define TEST_FUNCTION_NAME "module.main" +#define TEST_VMFB_DATA iree_model_vmfb +#define TEST_VMFB_DATA_LEN iree_model_vmfb_len +#define TEST_OUTPUT_SIZE toycar_int8_input_data_len[0] +#define STATIC_POOL_SIZE (5 * 1024 * 1024) + +#define TEST_INPUT_SETUP(allocator, device_allocator, session, call) \ + ({ \ + int _setup_ok = 1; \ + iree_hal_dim_t shape[2] = {1, (iree_hal_dim_t)toycar_int8_input_data_len[0]}; \ + iree_hal_buffer_view_t* arg0 = nullptr; \ + iree_status_t status = iree_hal_buffer_view_allocate_buffer_copy( \ + iree_runtime_session_device(session), device_allocator, 2, shape, \ + IREE_HAL_ELEMENT_TYPE_SINT_8, IREE_HAL_ENCODING_TYPE_DENSE_ROW_MAJOR, \ + (iree_hal_buffer_params_t){.usage = IREE_HAL_BUFFER_USAGE_DEFAULT, \ + .type = IREE_HAL_MEMORY_TYPE_DEVICE_LOCAL}, \ + iree_make_const_byte_span(toycar_int8_input_data[0], toycar_int8_input_data_len[0]), &arg0); \ + if (!iree_status_is_ok(status)) { \ + _setup_ok = 0; \ + } else { \ + iree_runtime_call_inputs_push_back_buffer_view(call, arg0); \ + iree_hal_buffer_view_release(arg0); \ + } \ + _setup_ok; \ + }) + +#define TEST_OUTPUT_VALIDATE(out_ptr, out_size) \ + ({ \ + int32_t sum = 0; \ + for (size_t j = 0; j < toycar_int8_input_data_len[0]; j++) { \ + int32_t diff1 = (int8_t)toycar_int8_input_data[0][j] - out_ptr[j]; \ + sum += (diff1 * diff1); \ + } \ + sum /= toycar_int8_input_data_len[0]; \ + int32_t diff = abs(sum - (int32_t)toycar_int8_output_data_ref[0]); \ + (diff <= 1); \ + }) + +#define TEST_CLEANUP() do {} while(0) + +#include "../../../../generic_iree/baremetal/benchmark_template.hpp" diff --git a/benchmark_sources/framework/main.cpp b/benchmark_sources/framework/main.cpp index b2a8658..11688fd 100644 --- a/benchmark_sources/framework/main.cpp +++ b/benchmark_sources/framework/main.cpp @@ -17,10 +17,10 @@ int main() int code = benchmark.run_benchmark(); simulator.end_measurement(); if (code != 0) { + simulator.terminate(code); return code; } code = benchmark.validate_benchmark(); simulator.terminate(code); return code; - } diff --git a/benchmark_sources/generic_iree/CMake/add_test.cmake b/benchmark_sources/generic_iree/CMake/add_test.cmake index 5062fad..d9bbfb6 100644 --- a/benchmark_sources/generic_iree/CMake/add_test.cmake +++ b/benchmark_sources/generic_iree/CMake/add_test.cmake @@ -120,7 +120,7 @@ macro(add_IreeBenchmark_Spike TEST_NAME TEST_DIR) ) if(COMMIT_LOG) - set(SPIKE_COMMIT_LOG_ARGS "--log-commits" "--log=${TEST_BUILD_DIR}/${TEST_NAME}_commit_log.txt") + set(SPIKE_COMMIT_LOG_ARGS "--log-commits" "--log=${CMAKE_CURRENT_BINARY_DIR}/${TEST_NAME}_commit_log.txt") else() set(SPIKE_COMMIT_LOG_ARGS "") endif() @@ -274,7 +274,7 @@ macro(add_IreeBenchmark_Verilator TEST_NAME TEST_DIR) if(TRACE) set(VCD_TRACE_FLAG "--trace") - set(VCD_TRACE_ARG "${TEST_BUILD_DIR}/test_${TEST_NAME}_Verilator_sig.vcd") + set(VCD_TRACE_ARG "${CMAKE_CURRENT_BINARY_DIR}/test_${TEST_NAME}_Verilator_sig.vcd") else() set(VCD_TRACE_FLAG "") set(VCD_TRACE_ARG "") @@ -282,7 +282,7 @@ macro(add_IreeBenchmark_Verilator TEST_NAME TEST_DIR) if(COMMIT_LOG) set(COMMIT_FLAG "--commit") - set(COMMIT_ARG "${TEST_BUILD_DIR}/") + set(COMMIT_ARG "${CMAKE_CURRENT_BINARY_DIR}/") else() set(COMMIT_FLAG "") set(COMMIT_ARG "") @@ -290,7 +290,7 @@ macro(add_IreeBenchmark_Verilator TEST_NAME TEST_DIR) add_test( NAME ${TEST_TARGET} - COMMAND ./${VERILATOR_MODEL_DIR}/build/verilated_model ${CMAKE_CURRENT_BINARY_DIR}/prog_${TEST_TARGET}.txt ${MEM_PORTS} ${MEM_W} 4194304 ${MEM_LATENCY} 1 toycar ${VREG_W} 0 ${VCD_TRACE_FLAG} ${VCD_TRACE_ARG} ${COMMIT_FLAG} ${COMMIT_ARG} + COMMAND ./${VERILATOR_MODEL_DIR}/build/verilated_model ${CMAKE_CURRENT_BINARY_DIR}/prog_${TEST_TARGET}.txt ${MEM_PORTS} ${MEM_W} 8388608 ${MEM_LATENCY} 1 toycar ${VREG_W} 0 ${VCD_TRACE_FLAG} ${VCD_TRACE_ARG} ${COMMIT_FLAG} ${COMMIT_ARG} WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/../.. ) diff --git a/benchmark_sources/generic_iree/baremetal/benchmark_template.hpp b/benchmark_sources/generic_iree/baremetal/benchmark_template.hpp index 7f06b7a..7de32ff 100644 --- a/benchmark_sources/generic_iree/baremetal/benchmark_template.hpp +++ b/benchmark_sources/generic_iree/baremetal/benchmark_template.hpp @@ -108,6 +108,7 @@ class Benchmark iree_runtime_session_t* session = nullptr; iree_runtime_call_t call = {0}; bool call_initialized = false; + int init_error = 0; iree_allocator_t allocator; public: @@ -119,39 +120,44 @@ class Benchmark iree_runtime_instance_options_use_all_available_drivers(&instance_options); iree_status_t status = iree_runtime_instance_create(&instance_options, allocator, &instance); - if (!iree_status_is_ok(status)) return; + if (!iree_status_is_ok(status)) { init_error = 100; return; } iree_hal_device_t* device = nullptr; status = iree_runtime_instance_try_create_default_device( instance, iree_make_cstring_view("local-sync"), &device); - if (!iree_status_is_ok(status)) return; + if (!iree_status_is_ok(status)) { init_error = 101; return; } iree_runtime_session_options_t session_options; iree_runtime_session_options_initialize(&session_options); status = iree_runtime_session_create_with_device( instance, &session_options, device, allocator, &session); iree_hal_device_release(device); - if (!iree_status_is_ok(status)) return; + if (!iree_status_is_ok(status)) { init_error = 102; return; } iree_vm_module_t* module = nullptr; status = iree_vm_bytecode_module_create( iree_runtime_instance_vm_instance(instance), IREE_VM_BYTECODE_MODULE_FLAG_NONE, - iree_make_const_byte_span(TEST_VMFB_DATA, TEST_VMFB_DATA_LEN), + iree_make_const_byte_span((const uint8_t*)TEST_VMFB_DATA, TEST_VMFB_DATA_LEN), iree_allocator_null(), allocator, &module); - if (!iree_status_is_ok(status)) return; + if (!iree_status_is_ok(status)) { init_error = 103; return; } status = iree_runtime_session_append_module(session, module); iree_vm_module_release(module); - if (!iree_status_is_ok(status)) return; + if (!iree_status_is_ok(status)) { + init_error = 200 + iree_status_code(status); + return; + } status = iree_runtime_call_initialize_by_name( session, iree_make_cstring_view(TEST_FUNCTION_NAME), &call); - if (!iree_status_is_ok(status)) return; + if (!iree_status_is_ok(status)) { init_error = 105; return; } call_initialized = true; } inline int run_benchmark() { - if (!instance || !session || !call_initialized) return 1; + if (!instance || !session || !call_initialized) { + return init_error ? init_error : 1; + } iree_hal_allocator_t* device_allocator = iree_runtime_session_device_allocator(session); diff --git a/benchmark_sources/generic_iree/iree/CMakeLists.txt b/benchmark_sources/generic_iree/iree/CMakeLists.txt index 9e464b9..da8d130 100644 --- a/benchmark_sources/generic_iree/iree/CMakeLists.txt +++ b/benchmark_sources/generic_iree/iree/CMakeLists.txt @@ -45,8 +45,8 @@ add_compile_definitions( ) # Suppress warnings stemmed from IREE source code -string(APPEND CMAKE_C_FLAGS " -Wno-type-limits -Wno-unused-parameter -Wno-missing-field-initializers -Wno-ignored-qualifiers -Wno-cast-function-type") -string(APPEND CMAKE_CXX_FLAGS " -Wno-type-limits -Wno-unused-parameter -Wno-missing-field-initializers -Wno-ignored-qualifiers -Wno-cast-function-type") +string(APPEND CMAKE_C_FLAGS " -mstrict-align -fno-builtin-memcpy -Wno-type-limits -Wno-unused-parameter -Wno-missing-field-initializers -Wno-ignored-qualifiers -Wno-cast-function-type") +string(APPEND CMAKE_CXX_FLAGS " -mstrict-align -fno-builtin-memcpy -Wno-type-limits -Wno-unused-parameter -Wno-missing-field-initializers -Wno-ignored-qualifiers -Wno-cast-function-type") # Remove -Werror to allow warnings string(REPLACE " -Werror" "" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}") diff --git a/benchmark_sources/generic_iree/iree/iree-patches/0006-fix-rv32-v-extension-struct-vectorization.patch b/benchmark_sources/generic_iree/iree/iree-patches/0006-fix-rv32-v-extension-struct-vectorization.patch new file mode 100644 index 0000000..b6c9269 --- /dev/null +++ b/benchmark_sources/generic_iree/iree/iree-patches/0006-fix-rv32-v-extension-struct-vectorization.patch @@ -0,0 +1,192 @@ +diff --git a/runtime/src/iree/vm/bytecode/dispatch.c b/runtime/src/iree/vm/bytecode/dispatch.c +index b2e50da1bc..9dbce1bf6a 100644 +--- a/runtime/src/iree/vm/bytecode/dispatch.c ++++ b/runtime/src/iree/vm/bytecode/dispatch.c +@@ -384,8 +384,7 @@ static iree_status_t iree_vm_bytecode_internal_enter( + uint16_t src_reg = src_reg_list->registers[i]; + if (src_reg & IREE_VM_ISA_REF_REGISTER_TYPE_BIT) { + uint16_t dst_reg = ref_reg_offset++; +- memset(&dst_regs->ref[dst_reg & IREE_VM_ISA_REF_REGISTER_MASK], 0, +- sizeof(iree_vm_ref_t)); ++ dst_regs->ref[dst_reg & IREE_VM_ISA_REF_REGISTER_MASK].ptr = NULL; dst_regs->ref[dst_reg & IREE_VM_ISA_REF_REGISTER_MASK].type = IREE_VM_REF_TYPE_NULL; + iree_vm_ref_retain_or_move( + src_reg & IREE_VM_ISA_REF_REGISTER_MOVE_BIT, + &src_regs.ref[src_reg & IREE_VM_ISA_REF_REGISTER_MASK], +diff --git a/runtime/src/iree/vm/ref.c b/runtime/src/iree/vm/ref.c +index 2ef1608b88..3ba38b5033 100644 +--- a/runtime/src/iree/vm/ref.c ++++ b/runtime/src/iree/vm/ref.c +@@ -1,3 +1,4 @@ ++#pragma GCC optimize ("no-tree-vectorize") + // Copyright 2019 The IREE Authors + // + // Licensed under the Apache License v2.0 with LLVM Exceptions. +@@ -163,20 +164,20 @@ IREE_API_EXPORT void iree_vm_ref_retain(iree_vm_ref_t* ref, + // potentially release. + IREE_VM_REF_ASSERT(ref); + IREE_VM_REF_ASSERT(out_ref); +- iree_vm_ref_t src_ref = *ref; ++ iree_vm_ref_t src_ref; src_ref.ptr = ref->ptr; src_ref.type = ref->type; + if (src_ref.ptr) { + iree_atomic_ref_count_t* counter = iree_vm_get_ref_counter_ptr(&src_ref); + iree_atomic_ref_count_inc(counter); + iree_vm_ref_trace("RETAIN", ref); + } +- iree_vm_ref_t dst_ref = *out_ref; ++ iree_vm_ref_t dst_ref; dst_ref.ptr = out_ref->ptr; dst_ref.type = out_ref->type; + if (dst_ref.ptr) { + // Output ref contains a value that should be released first. + // Note that we check above for it being the same as the new value so we + // don't do extra work unless we have to. + iree_vm_ref_release(&dst_ref); + } +- *out_ref = src_ref; ++ out_ref->ptr = src_ref.ptr; out_ref->type = src_ref.type; + } + + IREE_API_EXPORT iree_status_t iree_vm_ref_retain_checked( +@@ -184,7 +185,7 @@ IREE_API_EXPORT iree_status_t iree_vm_ref_retain_checked( + IREE_VM_REF_ASSERT(ref); + IREE_VM_REF_ASSERT(type); + IREE_VM_REF_ASSERT(out_ref); +- iree_vm_ref_t src_ref = *ref; ++ iree_vm_ref_t src_ref; src_ref.ptr = ref->ptr; src_ref.type = ref->type; + if (src_ref.type != IREE_VM_REF_TYPE_NULL && src_ref.type != type && + type != IREE_VM_REF_TYPE_ANY) { + return iree_make_status(IREE_STATUS_INVALID_ARGUMENT, +@@ -211,7 +212,7 @@ IREE_API_EXPORT iree_status_t iree_vm_ref_retain_or_move_checked( + IREE_VM_REF_ASSERT(ref); + IREE_VM_REF_ASSERT(type); + IREE_VM_REF_ASSERT(out_ref); +- iree_vm_ref_t src_ref = *ref; ++ iree_vm_ref_t src_ref; src_ref.ptr = ref->ptr; src_ref.type = ref->type; + if (src_ref.type != IREE_VM_REF_TYPE_NULL && src_ref.type != type && + type != IREE_VM_REF_TYPE_ANY) { + // Make no changes on failure. +@@ -224,13 +225,13 @@ IREE_API_EXPORT iree_status_t iree_vm_ref_retain_or_move_checked( + + IREE_API_EXPORT void iree_vm_ref_release(iree_vm_ref_t* ref) { + IREE_VM_REF_ASSERT(ref); +- iree_vm_ref_t temp_ref = *ref; ++ iree_vm_ref_t temp_ref; temp_ref.ptr = ref->ptr; temp_ref.type = ref->type; + if (temp_ref.type == IREE_VM_REF_TYPE_NULL || temp_ref.ptr == NULL) return; + #if defined(IREE_VM_REF_DEBUG_MOVE) + // In debug move mode, poisoned refs from moved-from registers are cleaned up + // during frame cleanup. Just clear them without trying to release. + if (temp_ref.type == IREE_VM_REF_TYPE_POISONED) { +- memset(ref, 0, sizeof(*ref)); ++ ref->ptr = NULL; ref->type = IREE_VM_REF_TYPE_NULL; + return; + } + #endif // IREE_VM_REF_DEBUG_MOVE +@@ -248,7 +249,7 @@ IREE_API_EXPORT void iree_vm_ref_release(iree_vm_ref_t* ref) { + } + + // Reset ref to point at nothing. +- memset(ref, 0, sizeof(*ref)); ++ ref->ptr = NULL; ref->type = IREE_VM_REF_TYPE_NULL; + } + + IREE_API_EXPORT void iree_vm_ref_assign(iree_vm_ref_t* ref, +@@ -257,20 +258,20 @@ IREE_API_EXPORT void iree_vm_ref_assign(iree_vm_ref_t* ref, + IREE_VM_REF_ASSERT(out_ref); + + // NOTE: ref and out_ref may alias. +- iree_vm_ref_t src_ref = *ref; ++ iree_vm_ref_t src_ref; src_ref.ptr = ref->ptr; src_ref.type = ref->type; + if (ref == out_ref) { + // Source == target; ignore entirely. + return; + } + +- iree_vm_ref_t dst_ref = *out_ref; ++ iree_vm_ref_t dst_ref; dst_ref.ptr = out_ref->ptr; dst_ref.type = out_ref->type; + if (dst_ref.ptr != NULL) { + // Release existing value. + iree_vm_ref_release(&dst_ref); + } + + // Assign ref to out_ref (without incrementing counter). +- *out_ref = src_ref; ++ out_ref->ptr = src_ref.ptr; out_ref->type = src_ref.type; + } + + IREE_API_EXPORT void iree_vm_ref_move(iree_vm_ref_t* ref, +@@ -285,7 +286,7 @@ IREE_API_EXPORT void iree_vm_ref_move(iree_vm_ref_t* ref, + } + + // Reset input ref so it points at nothing. +- iree_vm_ref_t src_ref = *ref; ++ iree_vm_ref_t src_ref; src_ref.ptr = ref->ptr; src_ref.type = ref->type; + #if defined(IREE_VM_REF_DEBUG_MOVE) + // Poison the source ref with a sentinel value to detect use-after-move. + // If the compiler incorrectly marked this as a last-use when it's actually +@@ -293,17 +294,17 @@ IREE_API_EXPORT void iree_vm_ref_move(iree_vm_ref_t* ref, + ref->ptr = (void*)(uintptr_t)IREE_VM_REF_TYPE_POISONED; + ref->type = IREE_VM_REF_TYPE_POISONED; + #else +- memset(ref, 0, sizeof(*ref)); ++ ref->ptr = NULL; ref->type = IREE_VM_REF_TYPE_NULL; + #endif // IREE_VM_REF_DEBUG_MOVE + +- iree_vm_ref_t dst_ref = *out_ref; ++ iree_vm_ref_t dst_ref; dst_ref.ptr = out_ref->ptr; dst_ref.type = out_ref->type; + if (dst_ref.ptr != NULL) { + // Release existing value. + iree_vm_ref_release(&dst_ref); + } + + // Assign ref to out_ref (without incrementing counter). +- *out_ref = src_ref; ++ out_ref->ptr = src_ref.ptr; out_ref->type = src_ref.type; + } + + IREE_API_EXPORT bool iree_vm_ref_is_null(const iree_vm_ref_t* ref) { +diff --git a/runtime/src/iree/vm/ref.h b/runtime/src/iree/vm/ref.h +index dcba1fe35d..f9c942fc05 100644 +--- a/runtime/src/iree/vm/ref.h ++++ b/runtime/src/iree/vm/ref.h +@@ -320,32 +320,36 @@ IREE_API_EXPORT bool iree_vm_ref_equal(const iree_vm_ref_t* lhs, + iree_vm_ref_type_t name##_registration = 0; \ + IREE_API_EXPORT iree_vm_ref_t name##_retain_ref(T* value) { \ + IREE_VM_REF_ASSERT(name##_registration); \ +- iree_vm_ref_t ref = {0}; \ ++ iree_vm_ref_t ref; \ ++ ref.ptr = NULL; \ ++ ref.type = IREE_VM_REF_TYPE_NULL; \ + iree_vm_ref_wrap_retain(value, name##_type(), &ref); \ + return ref; \ + } \ + IREE_API_EXPORT iree_vm_ref_t name##_move_ref(T* value) { \ + IREE_VM_REF_ASSERT(name##_registration); \ +- iree_vm_ref_t ref = {0}; \ ++ iree_vm_ref_t ref; \ ++ ref.ptr = NULL; \ ++ ref.type = IREE_VM_REF_TYPE_NULL; \ + iree_vm_ref_wrap_assign(value, name##_type(), &ref); \ + return ref; \ + } \ + IREE_API_EXPORT iree_status_t name##_check_deref(const iree_vm_ref_t ref, \ + T** out_ptr) { \ + IREE_VM_REF_ASSERT(name##_registration); \ ++ if (out_ptr) *out_ptr = NULL; \ + IREE_RETURN_IF_ERROR(iree_vm_ref_check(ref, name##_type())); \ +- *out_ptr = (T*)ref.ptr; \ ++ if (out_ptr) *out_ptr = (T*)ref.ptr; \ + return iree_ok_status(); \ + } \ + IREE_API_EXPORT iree_status_t name##_check_deref_or_null( \ + const iree_vm_ref_t ref, T** out_ptr) { \ + IREE_VM_REF_ASSERT(name##_registration); \ +- if (ref.type != IREE_VM_REF_TYPE_NULL) { \ ++ if (out_ptr) *out_ptr = NULL; \ ++ if (ref.ptr && ref.type != IREE_VM_REF_TYPE_NULL) { \ + IREE_RETURN_IF_ERROR(iree_vm_ref_check(ref, name##_type())); \ +- *out_ptr = (T*)ref.ptr; \ +- } else { \ +- *out_ptr = NULL; \ + } \ ++ if (out_ptr) *out_ptr = (T*)ref.ptr; \ + return iree_ok_status(); \ + } + diff --git a/benchmark_sources/generic_iree/iree/iree-patches/0007-fix-rv32-v-extension-flatcc-unaligned-access.patch b/benchmark_sources/generic_iree/iree/iree-patches/0007-fix-rv32-v-extension-flatcc-unaligned-access.patch new file mode 100644 index 0000000..c6f62cb --- /dev/null +++ b/benchmark_sources/generic_iree/iree/iree-patches/0007-fix-rv32-v-extension-flatcc-unaligned-access.patch @@ -0,0 +1,27 @@ +diff --git a/third_party/flatcc/include/flatcc/portable/pmemaccess.h b/third_party/flatcc/include/flatcc/portable/pmemaccess.h +index 2a83807..1a66570 100644 +--- a/third_party/flatcc/include/flatcc/portable/pmemaccess.h ++++ b/third_party/flatcc/include/flatcc/portable/pmemaccess.h +@@ -196,9 +196,19 @@ extern "C" { + #define mem_read_8(p) (*(uint8_t*)(p)) + #define mem_write_8(p, v) ((void)(*(uint8_t*)(p) = (uint8_t)(v))) + +-static inline uint16_t mem_read_16(const void *p) { uint16_t v; mem_copy_word_(&v, p, 2); return v; } +-static inline uint32_t mem_read_32(const void *p) { uint32_t v; mem_copy_word_(&v, p, 4); return v; } +-static inline uint64_t mem_read_64(const void *p) { uint64_t v; mem_copy_word_(&v, p, 8); return v; } ++static inline uint16_t mem_read_16(const void *p) { ++ const volatile uint8_t *b = (const volatile uint8_t *)p; ++ return (uint16_t)b[0] | ((uint16_t)b[1] << 8); ++} ++static inline uint32_t mem_read_32(const void *p) { ++ const volatile uint8_t *b = (const volatile uint8_t *)p; ++ return (uint32_t)b[0] | ((uint32_t)b[1] << 8) | ((uint32_t)b[2] << 16) | ((uint32_t)b[3] << 24); ++} ++static inline uint64_t mem_read_64(const void *p) { ++ const volatile uint8_t *b = (const volatile uint8_t *)p; ++ return (uint64_t)b[0] | ((uint64_t)b[1] << 8) | ((uint64_t)b[2] << 16) | ((uint64_t)b[3] << 24) | ++ ((uint64_t)b[4] << 32) | ((uint64_t)b[5] << 40) | ((uint64_t)b[6] << 48) | ((uint64_t)b[7] << 56); ++} + + #define mem_write_16(p, v) do { const uint16_t x = (uint16_t)(v); mem_copy_word_((p), &x, 2); } while(0) + #define mem_write_32(p, v) do { const uint32_t x = (uint32_t)(v); mem_copy_word_((p), &x, 4); } while(0) diff --git a/processor_models/verilator/cv32a60x/verilator_support_cv32a60x.cpp b/processor_models/verilator/cv32a60x/verilator_support_cv32a60x.cpp index 8c67be9..7117cbe 100644 --- a/processor_models/verilator/cv32a60x/verilator_support_cv32a60x.cpp +++ b/processor_models/verilator/cv32a60x/verilator_support_cv32a60x.cpp @@ -4,7 +4,7 @@ // In general, accesses to internal variables (exposed with VERILATOR_PUBLIC) should be handled here by passing in a reference to TOP. Accesses to top level interface signals (i.e. memory interfaces) should be handled by the user. #include "verilator_support_cv32a60x.h" /* -* Functions and Variables used to detect a stall. Returns true if PC_ID_EX in CV32A60X core has not changed in the provided number of cycles +* Functions and Variables used to detect a stall. Returns true if IF_PC has not changed in the provided number of cycles * ARGS: * - *top - pointer to verilator top module * - max_cycles - number of cycles after which a stall is declared @@ -110,7 +110,7 @@ void update_mem_load(Vvproc_top *top, uint32_t address, bool req_valid, bool req queue_meta[0][1] = req_src; queue_meta[0][2] = 0; } else if (req_valid){ - fprintf(stderr, "ERROR: READ ATTEMPTED OUTSIDE OF VALID ADDRESS SPACE\n"); + fprintf(stderr, "ERROR: READ ATTEMPTED OUTSIDE OF VALID ADDRESS SPACE: 0x%08x\n", address); } @@ -146,7 +146,7 @@ void update_mem_write(Vvproc_top *top, uint32_t address, bool req_valid, bool re } else { - fprintf(stderr, "ERROR: WRITE ATTEMPTED OUTSIDE OF VALID ADDRESS SPACE\n"); + fprintf(stderr, "ERROR: WRITE ATTEMPTED OUTSIDE OF VALID ADDRESS SPACE: 0x%08x\n", address); } //queue_valid[mem_lat-1] = true; //need to signal valid on store interface for accepted transaction. Can always respond in 1 cycle due to store buffer - TODO: signal over mem_w_valid_i, but needs to be delayed 1 cycle // if (!req_src) //only scalar interface uses mem_w_valid, vector uses mem_r_valid even for stores TODO: Refactor this (separate interfaces completely?)