From 4a1385b50113f117d7c0d57ca6b9484ca7e52d7b Mon Sep 17 00:00:00 2001 From: JerryYan97 Date: Thu, 17 Sep 2020 19:42:04 -0400 Subject: [PATCH 1/3] basic --- src/main.cpp | 4 +- stream_compaction/common.cu | 18 ++++ stream_compaction/cpu.cu | 43 +++++++++- stream_compaction/efficient.cu | 150 ++++++++++++++++++++++++++++++++- stream_compaction/efficient.h | 4 + stream_compaction/naive.cu | 60 +++++++++++++ stream_compaction/naive.h | 1 + stream_compaction/thrust.cu | 9 ++ 8 files changed, 284 insertions(+), 5 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 896ac2b..9f2766b 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -71,14 +71,14 @@ int main(int argc, char* argv[]) { printDesc("work-efficient scan, power-of-two"); StreamCompaction::Efficient::scan(SIZE, c, a); printElapsedTime(StreamCompaction::Efficient::timer().getGpuElapsedTimeForPreviousOperation(), "(CUDA Measured)"); - //printArray(SIZE, c, true); + printArray(SIZE, c, true); printCmpResult(SIZE, b, c); zeroArray(SIZE, c); printDesc("work-efficient scan, non-power-of-two"); StreamCompaction::Efficient::scan(NPOT, c, a); printElapsedTime(StreamCompaction::Efficient::timer().getGpuElapsedTimeForPreviousOperation(), "(CUDA Measured)"); - //printArray(NPOT, c, true); + printArray(NPOT, c, true); printCmpResult(NPOT, b, c); zeroArray(SIZE, c); diff --git a/stream_compaction/common.cu b/stream_compaction/common.cu index 2ed6d63..42d94f3 100644 --- a/stream_compaction/common.cu +++ b/stream_compaction/common.cu @@ -24,6 +24,16 @@ namespace StreamCompaction { */ __global__ void kernMapToBoolean(int n, int *bools, const int *idata) { // TODO + int index = threadIdx.x + (blockIdx.x * blockDim.x); + if (index >= n) { + return; + } + if (idata[index] == 0) { + bools[index] = 0; + } + else { + bools[index] = 1; + } } /** @@ -33,6 +43,14 @@ namespace StreamCompaction { __global__ void kernScatter(int n, int *odata, const int *idata, const int *bools, const int *indices) { // TODO + int index = threadIdx.x + (blockIdx.x * blockDim.x); + if (index >= n) { + return; + } + if (bools[index] == 1) { + int final_index = indices[index]; + odata[final_index] = idata[index]; + } } } diff --git a/stream_compaction/cpu.cu b/stream_compaction/cpu.cu index 719fa11..dad5e64 100644 --- a/stream_compaction/cpu.cu +++ b/stream_compaction/cpu.cu @@ -20,6 +20,11 @@ namespace StreamCompaction { void scan(int n, int *odata, const int *idata) { timer().startCpuTimer(); // TODO + odata[0] = 0; + for (int k = 1; k < n; ++k) + { + odata[k] = odata[k - 1] + idata[k - 1]; + } timer().endCpuTimer(); } @@ -31,8 +36,15 @@ namespace StreamCompaction { int compactWithoutScan(int n, int *odata, const int *idata) { timer().startCpuTimer(); // TODO + int o_idx = 0; + for (int i_idx = 0; i_idx < n; ++i_idx) { + if (idata[i_idx] != 0) { + odata[o_idx] = idata[i_idx]; + ++o_idx; + } + } timer().endCpuTimer(); - return -1; + return o_idx; } /** @@ -43,8 +55,35 @@ namespace StreamCompaction { int compactWithScan(int n, int *odata, const int *idata) { timer().startCpuTimer(); // TODO + int* temp_array = new int[n]; + int* scan_array = new int[n]; + // Compute temporary array: + for (int i_idx = 0; i_idx < n; ++i_idx) { + if (idata[i_idx] != 0) { + temp_array[i_idx] = 1; + } + else { + temp_array[i_idx] = 0; + } + } + // Exclusive scan: + scan_array[0] = 0; + for (int k = 1; k < n; ++k) + { + scan_array[k] = scan_array[k - 1] + temp_array[k - 1]; + } + // Scatter: + int o_counter = 0; + for (int i_idx = 0; i_idx < n; ++i_idx) + { + if (temp_array[i_idx] == 1) { + int o_idx = scan_array[i_idx]; + odata[o_idx] = idata[i_idx]; + ++o_counter; + } + } timer().endCpuTimer(); - return -1; + return o_counter; } } } diff --git a/stream_compaction/efficient.cu b/stream_compaction/efficient.cu index 2db346e..7e08d50 100644 --- a/stream_compaction/efficient.cu +++ b/stream_compaction/efficient.cu @@ -3,6 +3,13 @@ #include "common.h" #include "efficient.h" +int* dev_data_array; +int* dev_temp_data_array; + +int* dev_zero_one_temp_array; +int* dev_idata_array; +int* dev_final_array; + namespace StreamCompaction { namespace Efficient { using StreamCompaction::Common::PerformanceTimer; @@ -12,13 +19,94 @@ namespace StreamCompaction { return timer; } + __global__ void init_array(int* dev_array, const int* dev_temp_array, const int n, const int fit_size) { + int index = threadIdx.x + (blockIdx.x * blockDim.x); + if (index >= fit_size) { + return; + } + if (index < n) { + dev_array[index] = dev_temp_array[index]; + } + else { + dev_array[index] = 0; + } + } + + __global__ void up_sweep(int* dev_array, const int fit_size, const int d) { + int index = threadIdx.x + (blockIdx.x * blockDim.x); + if (index >= fit_size) { + return; + } + int two_pow_d_add_1 = pow(2.0, d + 1); + if (index % two_pow_d_add_1 == 0) { + int two_pow_d = pow(2.0, d); + dev_array[index + two_pow_d_add_1 - 1] += dev_array[index + two_pow_d - 1]; + } + } + + __global__ void down_sweep(int* dev_array, const int fit_size, const int d) { + int index = threadIdx.x + (blockIdx.x * blockDim.x); + if (index >= fit_size) { + return; + } + int two_pow_d_add_1 = pow(2.0, d + 1); + if (index % two_pow_d_add_1 == 0) { + int two_pow_d = pow(2.0, d); + int t = dev_array[index + two_pow_d - 1]; + dev_array[index + two_pow_d - 1] = dev_array[index + two_pow_d_add_1 - 1]; + dev_array[index + two_pow_d_add_1 - 1] += t; + } + } + /** * Performs prefix-sum (aka scan) on idata, storing the result into odata. */ void scan(int n, int *odata, const int *idata) { + // Init all the requirement data: + int n_ilog2 = ilog2ceil(n); + int fit_size = pow(2, n_ilog2); + + int oriSizeInBytes = n * sizeof(int); + int fitSizeInBytes = fit_size * sizeof(int); + int blockSize = 128; + dim3 fullBlocksPerGrid((fit_size + blockSize - 1) / blockSize); + + cudaMalloc((void**)&dev_data_array, fitSizeInBytes); + checkCUDAError("cudaMalloc dev_data_array failed!"); + cudaMalloc((void**)&dev_temp_data_array, oriSizeInBytes); + checkCUDAError("cudaMalloc dev_temp_data_array failed!"); + + cudaMemcpy(dev_temp_data_array, idata, oriSizeInBytes, cudaMemcpyHostToDevice); + checkCUDAError("cudaMemcpy dev_data_array failed!"); + + init_array <<>> (dev_data_array, dev_temp_data_array, n, fit_size); + timer().startGpuTimer(); + // TODO + int d_max = ilog2ceil(n) - 1; + // Up-Sweep: + for (int d = 0; d <= d_max; ++d) { + up_sweep <<>> (dev_data_array, fit_size, d); + } + // x[n - 1] = 0 + int* a = new int[1](); + a[0] = 0; + cudaMemcpy(dev_data_array + fit_size - 1, a, sizeof(int), cudaMemcpyHostToDevice); + // Down-Sweep: + for (int d = d_max; d >= 0; --d) { + down_sweep <<>> (dev_data_array, fit_size, d); + } + + // Copy to output data: + cudaMemcpy(odata, dev_data_array, n * sizeof(int), cudaMemcpyDeviceToHost); + checkCUDAError("cudaMemcpy odata failed!"); timer().endGpuTimer(); + cudaFree(dev_data_array); + checkCUDAError("cudaFree(dev_data_array) failed!"); + cudaFree(dev_temp_data_array); + checkCUDAError("cudaFree(dev_temp_data_array) failed!"); + free(a); } /** @@ -31,10 +119,70 @@ namespace StreamCompaction { * @returns The number of elements remaining after compaction. */ int compact(int n, int *odata, const int *idata) { + int blockSize = 128; + dim3 fullBlocksPerGrid((n + blockSize - 1) / blockSize); + int sizeInBytes = n * sizeof(int); + + int* zero_one_temp_array = new int[n]; + int* scan_result_array = new int[n]; + cudaMalloc((void**)&dev_zero_one_temp_array, n * sizeof(int)); + checkCUDAError("cudaMalloc dev_zero_one_temp_array failed!"); + cudaMalloc((void**)&dev_idata_array, n * sizeof(int)); + checkCUDAError("cudaMalloc dev_idata_array failed!"); + + cudaMemcpy(dev_zero_one_temp_array, idata, sizeInBytes, cudaMemcpyHostToDevice); + checkCUDAError("cudaMemcpy dev_zero_one_temp_array failed!"); + cudaMemcpy(dev_idata_array, idata, sizeInBytes, cudaMemcpyHostToDevice); + checkCUDAError("cudaMemcpy dev_idata_array failed!"); + + // Scan Init: + int n_ilog2 = ilog2ceil(n); + int fit_size = pow(2, n_ilog2); + int fitSizeInBytes = fit_size * sizeof(int); + dim3 scanFullBlocksPerGrid((fit_size + blockSize - 1) / blockSize); + + cudaMalloc((void**)&dev_data_array, fitSizeInBytes); + checkCUDAError("cudaMalloc dev_data_array failed!"); + timer().startGpuTimer(); // TODO + // Transform the existing array into zero and one: + StreamCompaction::Common::kernMapToBoolean <<>> (n, dev_zero_one_temp_array, dev_idata_array); + + // Scan: + // Add zeros at the end of array. + init_array <<>> (dev_data_array, dev_zero_one_temp_array, n, fit_size); + + int d_max = ilog2ceil(n) - 1; + // Up-Sweep: + for (int d = 0; d <= d_max; ++d) { + up_sweep <<>> (dev_data_array, fit_size, d); + } + // x[n - 1] = 0 + int* a = new int[1](); + a[0] = 0; + cudaMemcpy(dev_data_array + fit_size - 1, a, sizeof(int), cudaMemcpyHostToDevice); + // Down-Sweep: + for (int d = d_max; d >= 0; --d) { + down_sweep <<>> (dev_data_array, fit_size, d); + } + + // Get the total number of the final elements: + int final_count = 0; + cudaMemcpy(&final_count, dev_data_array + fit_size - 1, sizeof(int), cudaMemcpyDeviceToHost); + // Scatter: + cudaMalloc((void**)&dev_final_array, final_count * sizeof(int)); + checkCUDAError("cudaMalloc dev_final_array failed!"); + StreamCompaction::Common::kernScatter <<>> (fit_size, dev_final_array, dev_idata_array, dev_zero_one_temp_array, dev_data_array); + cudaMemcpy(odata, dev_final_array, final_count * sizeof(int), cudaMemcpyDeviceToHost); + checkCUDAError("cudaMemcpy odata failed!"); + timer().endGpuTimer(); - return -1; + cudaFree(dev_data_array); + cudaFree(dev_zero_one_temp_array); + cudaFree(dev_idata_array); + cudaFree(dev_final_array); + return final_count; } } } diff --git a/stream_compaction/efficient.h b/stream_compaction/efficient.h index 803cb4f..51adef7 100644 --- a/stream_compaction/efficient.h +++ b/stream_compaction/efficient.h @@ -6,6 +6,10 @@ namespace StreamCompaction { namespace Efficient { StreamCompaction::Common::PerformanceTimer& timer(); + __global__ void init_array(int* dev_array, const int* dev_temp_array, const int n, const int fit_size); + + __global__ void up_sweep(int* dev_array, const int fit_size); + void scan(int n, int *odata, const int *idata); int compact(int n, int *odata, const int *idata); diff --git a/stream_compaction/naive.cu b/stream_compaction/naive.cu index 4308876..f93ae28 100644 --- a/stream_compaction/naive.cu +++ b/stream_compaction/naive.cu @@ -3,6 +3,8 @@ #include "common.h" #include "naive.h" +int* dev_data_array1, * dev_data_array2; + namespace StreamCompaction { namespace Naive { using StreamCompaction::Common::PerformanceTimer; @@ -12,14 +14,72 @@ namespace StreamCompaction { return timer; } // TODO: __global__ + __global__ void addition_process(int* dev_array1, int* dev_array2, const int d, const int n) { + int index = threadIdx.x + (blockIdx.x * blockDim.x); + if (index >= n) { + return; + } + int two_power_d_min_1 = powf(2, d - 1); + if (index >= two_power_d_min_1) { + dev_array2[index] = dev_array1[index - two_power_d_min_1] + dev_array1[index]; + } + else { + dev_array2[index] = dev_array1[index]; + } + } + + __global__ void right_shift(int* dev_array1, int* dev_array2, const int n) { + int index = threadIdx.x + (blockIdx.x * blockDim.x); + if (index >= n) { + return; + } + if (index == 0) { + dev_array2[index] = 0; + } + else { + dev_array2[index] = dev_array1[index - 1]; + } + } /** * Performs prefix-sum (aka scan) on idata, storing the result into odata. */ void scan(int n, int *odata, const int *idata) { + // Init all the requirement data: + int sizeInBytes = n * sizeof(int); + int blockSize = 128; + dim3 fullBlocksPerGrid((n + blockSize - 1) / blockSize); + + cudaMalloc((void**)&dev_data_array1, sizeInBytes); + checkCUDAError("cudaMalloc dev_data_array1 failed!"); + cudaMalloc((void**)&dev_data_array2, sizeInBytes); + checkCUDAError("cudaMalloc dev_data_array2 failed!"); + cudaMemcpy(dev_data_array1, idata, sizeInBytes, cudaMemcpyHostToDevice); + checkCUDAError("cudaMemcpy dev_data_array1 failed!"); + cudaMemcpy(dev_data_array2, idata, sizeInBytes, cudaMemcpyHostToDevice); + checkCUDAError("cudaMemcpy dev_data_array2 failed!"); + timer().startGpuTimer(); // TODO + // Inclusive scan: + int d_max = ilog2ceil(n); + for (int d = 1; d <= d_max; ++d) + { + addition_process <<< fullBlocksPerGrid, blockSize >>> (dev_data_array1, dev_data_array2, d, n); + checkCUDAError("Naive addition_process failed!"); + int* temp = dev_data_array1; + dev_data_array1 = dev_data_array2; + dev_data_array2 = temp; + } + // Right shift to get an exclusive scan: + right_shift <<< fullBlocksPerGrid, blockSize >>> (dev_data_array1, dev_data_array2, n); timer().endGpuTimer(); + cudaMemcpy(odata, dev_data_array2, sizeInBytes, cudaMemcpyDeviceToHost); + checkCUDAError("cudaMemcpy odata failed!"); + cudaFree(dev_data_array1); + checkCUDAError("cudaFree(dev_data_array1) failed!"); + cudaFree(dev_data_array2); + checkCUDAError("cudaFree(dev_data_array2) failed!"); } } } diff --git a/stream_compaction/naive.h b/stream_compaction/naive.h index 37dcb06..606d8e1 100644 --- a/stream_compaction/naive.h +++ b/stream_compaction/naive.h @@ -7,5 +7,6 @@ namespace StreamCompaction { StreamCompaction::Common::PerformanceTimer& timer(); void scan(int n, int *odata, const int *idata); + __global__ void addition_process(float* dev_data_array1, float* dev_data_array2, const int d, const int n); } } diff --git a/stream_compaction/thrust.cu b/stream_compaction/thrust.cu index 1def45e..4726f6b 100644 --- a/stream_compaction/thrust.cu +++ b/stream_compaction/thrust.cu @@ -2,6 +2,7 @@ #include #include #include +#include #include #include "common.h" #include "thrust.h" @@ -18,11 +19,19 @@ namespace StreamCompaction { * Performs prefix-sum (aka scan) on idata, storing the result into odata. */ void scan(int n, int *odata, const int *idata) { + thrust::host_vector host_i(idata, idata + n); + thrust::host_vector host_o(n); + thrust::device_vector dev_i = host_i; + thrust::device_vector dev_o = host_o; + timer().startGpuTimer(); // TODO use `thrust::exclusive_scan` // example: for device_vectors dv_in and dv_out: // thrust::exclusive_scan(dv_in.begin(), dv_in.end(), dv_out.begin()); + thrust::exclusive_scan(dev_i.begin(), dev_i.end(), dev_o.begin()); timer().endGpuTimer(); + + thrust::copy(dev_o.begin(), dev_o.end(), odata); } } } From 1ff0e91cbb69614efb80d736936d3f5596f2fdc1 Mon Sep 17 00:00:00 2001 From: JerryYan97 Date: Sat, 19 Sep 2020 16:41:45 -0400 Subject: [PATCH 2/3] Extra credit --- img/target.png | Bin 0 -> 37718 bytes src/main.cpp | 51 +++++++++- stream_compaction/CMakeLists.txt | 2 + stream_compaction/efficient.cu | 57 ++++++----- stream_compaction/efficient.h | 4 +- stream_compaction/radix.cu | 163 +++++++++++++++++++++++++++++++ stream_compaction/radix.h | 11 +++ 7 files changed, 256 insertions(+), 32 deletions(-) create mode 100644 img/target.png create mode 100644 stream_compaction/radix.cu create mode 100644 stream_compaction/radix.h diff --git a/img/target.png b/img/target.png new file mode 100644 index 0000000000000000000000000000000000000000..20054353ff92e3ebe172a4e6894722c011038c9b GIT binary patch literal 37718 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 #include #include +#include +#include +#include #include "testing_helpers.hpp" const int SIZE = 1 << 8; // feel free to change the size of array @@ -18,6 +21,7 @@ const int NPOT = SIZE - 3; // Non-Power-Of-Two int *a = new int[SIZE]; int *b = new int[SIZE]; int *c = new int[SIZE]; +int *d = new int[SIZE]; int main(int argc, char* argv[]) { // Scan tests @@ -71,14 +75,14 @@ int main(int argc, char* argv[]) { printDesc("work-efficient scan, power-of-two"); StreamCompaction::Efficient::scan(SIZE, c, a); printElapsedTime(StreamCompaction::Efficient::timer().getGpuElapsedTimeForPreviousOperation(), "(CUDA Measured)"); - printArray(SIZE, c, true); + // printArray(SIZE, c, true); printCmpResult(SIZE, b, c); zeroArray(SIZE, c); printDesc("work-efficient scan, non-power-of-two"); StreamCompaction::Efficient::scan(NPOT, c, a); printElapsedTime(StreamCompaction::Efficient::timer().getGpuElapsedTimeForPreviousOperation(), "(CUDA Measured)"); - printArray(NPOT, c, true); + // printArray(NPOT, c, true); printCmpResult(NPOT, b, c); zeroArray(SIZE, c); @@ -94,6 +98,7 @@ int main(int argc, char* argv[]) { printElapsedTime(StreamCompaction::Thrust::timer().getGpuElapsedTimeForPreviousOperation(), "(CUDA Measured)"); //printArray(NPOT, c, true); printCmpResult(NPOT, b, c); + printf("\n"); printf("*****************************\n"); @@ -115,7 +120,7 @@ int main(int argc, char* argv[]) { count = StreamCompaction::CPU::compactWithoutScan(SIZE, b, a); printElapsedTime(StreamCompaction::CPU::timer().getCpuElapsedTimeForPreviousOperation(), "(std::chrono Measured)"); expectedCount = count; - printArray(count, b, true); + // printArray(count, b, true); printCmpLenResult(count, expectedCount, b, b); zeroArray(SIZE, c); @@ -123,14 +128,14 @@ int main(int argc, char* argv[]) { count = StreamCompaction::CPU::compactWithoutScan(NPOT, c, a); printElapsedTime(StreamCompaction::CPU::timer().getCpuElapsedTimeForPreviousOperation(), "(std::chrono Measured)"); expectedNPOT = count; - printArray(count, c, true); + // printArray(count, c, true); printCmpLenResult(count, expectedNPOT, b, c); zeroArray(SIZE, c); printDesc("cpu compact with scan"); count = StreamCompaction::CPU::compactWithScan(SIZE, c, a); printElapsedTime(StreamCompaction::CPU::timer().getCpuElapsedTimeForPreviousOperation(), "(std::chrono Measured)"); - printArray(count, c, true); + // printArray(count, c, true); printCmpLenResult(count, expectedCount, b, c); zeroArray(SIZE, c); @@ -147,6 +152,42 @@ int main(int argc, char* argv[]) { //printArray(count, c, true); printCmpLenResult(count, expectedNPOT, b, c); + + printf("\n"); + printf("*****************************\n"); + printf("** PARALLEL RADIX SORT TESTS **\n"); + printf("*****************************\n"); + + // Radix Sort Tests + genArray(SIZE - 1, a, 50); // Leave a 0 at the end to test that edge case + a[SIZE - 1] = 0; + printArray(SIZE, a, true); + + zeroArray(SIZE, b); + printDesc("parallel radix sort, power-of-two correct result"); + memcpy(b, a, SIZE * sizeof(int)); + thrust::sort(thrust::host, b, b + SIZE); + printArray(SIZE, b, true); + + printDesc("parallel radix sort, power-of-two correct result"); + memcpy(d, a, NPOT * sizeof(int)); + thrust::sort(thrust::host, d, d + NPOT); + printArray(NPOT, d, true); + + zeroArray(SIZE, c); + printDesc("parallel radix sort, power-of-two"); + StreamCompaction::RadixSort::radix_sort(SIZE, c, a); + printArray(SIZE, c, true); + printElapsedTime(StreamCompaction::Efficient::timer().getGpuElapsedTimeForPreviousOperation(), "(CUDA Measured)"); + printCmpResult(SIZE, b, c); + + zeroArray(SIZE, c); + printDesc("parallel radix sort, non-power-of-two"); + StreamCompaction::RadixSort::radix_sort(NPOT, c, a); + printArray(NPOT, c, true); + printElapsedTime(StreamCompaction::Efficient::timer().getGpuElapsedTimeForPreviousOperation(), "(CUDA Measured)"); + printCmpResult(NPOT, d, c); + system("pause"); // stop Win32 console from closing on exit delete[] a; delete[] b; diff --git a/stream_compaction/CMakeLists.txt b/stream_compaction/CMakeLists.txt index 567795b..eb71175 100644 --- a/stream_compaction/CMakeLists.txt +++ b/stream_compaction/CMakeLists.txt @@ -4,6 +4,7 @@ set(headers "naive.h" "efficient.h" "thrust.h" + "radix.h" ) set(sources @@ -12,6 +13,7 @@ set(sources "naive.cu" "efficient.cu" "thrust.cu" + "radix.cu" ) list(SORT headers) diff --git a/stream_compaction/efficient.cu b/stream_compaction/efficient.cu index 7e08d50..d1c7813 100644 --- a/stream_compaction/efficient.cu +++ b/stream_compaction/efficient.cu @@ -34,28 +34,26 @@ namespace StreamCompaction { __global__ void up_sweep(int* dev_array, const int fit_size, const int d) { int index = threadIdx.x + (blockIdx.x * blockDim.x); - if (index >= fit_size) { + int remap_index = index * pow(2.0, d + 1); + if (remap_index >= fit_size) { return; } int two_pow_d_add_1 = pow(2.0, d + 1); - if (index % two_pow_d_add_1 == 0) { - int two_pow_d = pow(2.0, d); - dev_array[index + two_pow_d_add_1 - 1] += dev_array[index + two_pow_d - 1]; - } + int two_pow_d = pow(2.0, d); + dev_array[remap_index + two_pow_d_add_1 - 1] += dev_array[remap_index + two_pow_d - 1]; } __global__ void down_sweep(int* dev_array, const int fit_size, const int d) { int index = threadIdx.x + (blockIdx.x * blockDim.x); - if (index >= fit_size) { + int remap_index = index * pow(2.0, d + 1); + if (remap_index >= fit_size) { return; } int two_pow_d_add_1 = pow(2.0, d + 1); - if (index % two_pow_d_add_1 == 0) { - int two_pow_d = pow(2.0, d); - int t = dev_array[index + two_pow_d - 1]; - dev_array[index + two_pow_d - 1] = dev_array[index + two_pow_d_add_1 - 1]; - dev_array[index + two_pow_d_add_1 - 1] += t; - } + int two_pow_d = pow(2.0, d); + int t = dev_array[remap_index + two_pow_d - 1]; + dev_array[remap_index + two_pow_d - 1] = dev_array[remap_index + two_pow_d_add_1 - 1]; + dev_array[remap_index + two_pow_d_add_1 - 1] += t; } /** @@ -79,7 +77,7 @@ namespace StreamCompaction { cudaMemcpy(dev_temp_data_array, idata, oriSizeInBytes, cudaMemcpyHostToDevice); checkCUDAError("cudaMemcpy dev_data_array failed!"); - init_array <<>> (dev_data_array, dev_temp_data_array, n, fit_size); + init_array <<>> (dev_data_array, dev_temp_data_array, n, fit_size); timer().startGpuTimer(); @@ -87,15 +85,17 @@ namespace StreamCompaction { int d_max = ilog2ceil(n) - 1; // Up-Sweep: for (int d = 0; d <= d_max; ++d) { - up_sweep <<>> (dev_data_array, fit_size, d); + int threads_num_needed = fit_size * pow(0.5, d + 1); + dim3 up_sweep_blocks_per_grid((threads_num_needed + blockSize - 1) / blockSize); + up_sweep <<>> (dev_data_array, fit_size, d); } - // x[n - 1] = 0 - int* a = new int[1](); - a[0] = 0; - cudaMemcpy(dev_data_array + fit_size - 1, a, sizeof(int), cudaMemcpyHostToDevice); + + cudaMemset(dev_data_array + fit_size - 1, 0, sizeof(int)); // Down-Sweep: for (int d = d_max; d >= 0; --d) { - down_sweep <<>> (dev_data_array, fit_size, d); + int threads_num_needed = fit_size * pow(0.5, d + 1); + dim3 down_sweep_blocks_per_grid((threads_num_needed + blockSize - 1) / blockSize); + down_sweep <<>> (dev_data_array, fit_size, d); } // Copy to output data: @@ -106,7 +106,7 @@ namespace StreamCompaction { checkCUDAError("cudaFree(dev_data_array) failed!"); cudaFree(dev_temp_data_array); checkCUDAError("cudaFree(dev_temp_data_array) failed!"); - free(a); + // free(a); } /** @@ -151,20 +151,25 @@ namespace StreamCompaction { // Scan: // Add zeros at the end of array. - init_array <<>> (dev_data_array, dev_zero_one_temp_array, n, fit_size); + init_array <<>> (dev_data_array, dev_zero_one_temp_array, n, fit_size); int d_max = ilog2ceil(n) - 1; // Up-Sweep: for (int d = 0; d <= d_max; ++d) { - up_sweep <<>> (dev_data_array, fit_size, d); + int threads_num_needed = fit_size * pow(0.5, d + 1); + dim3 up_sweep_blocks_per_grid((threads_num_needed + blockSize - 1) / blockSize); + up_sweep <<>> (dev_data_array, fit_size, d); } // x[n - 1] = 0 - int* a = new int[1](); - a[0] = 0; - cudaMemcpy(dev_data_array + fit_size - 1, a, sizeof(int), cudaMemcpyHostToDevice); + // int* a = new int[1](); + // a[0] = 0; + // cudaMemcpy(dev_data_array + fit_size - 1, a, sizeof(int), cudaMemcpyHostToDevice); + cudaMemset(dev_data_array + fit_size - 1, 0, sizeof(int)); // Down-Sweep: for (int d = d_max; d >= 0; --d) { - down_sweep <<>> (dev_data_array, fit_size, d); + int threads_num_needed = fit_size * pow(0.5, d + 1); + dim3 down_sweep_blocks_per_grid((threads_num_needed + blockSize - 1) / blockSize); + down_sweep <<>> (dev_data_array, fit_size, d); } // Get the total number of the final elements: diff --git a/stream_compaction/efficient.h b/stream_compaction/efficient.h index 51adef7..2890129 100644 --- a/stream_compaction/efficient.h +++ b/stream_compaction/efficient.h @@ -8,7 +8,9 @@ namespace StreamCompaction { __global__ void init_array(int* dev_array, const int* dev_temp_array, const int n, const int fit_size); - __global__ void up_sweep(int* dev_array, const int fit_size); + __global__ void up_sweep(int* dev_array, const int fit_size, const int d); + + __global__ void down_sweep(int* dev_array, const int fit_size, const int d); void scan(int n, int *odata, const int *idata); diff --git a/stream_compaction/radix.cu b/stream_compaction/radix.cu new file mode 100644 index 0000000..2ad60ba --- /dev/null +++ b/stream_compaction/radix.cu @@ -0,0 +1,163 @@ +#include +#include +#include "efficient.h" +#include "common.h" + +int* dev_radix_data_array, * dev_b_array, * dev_e_array, * dev_f_array, * dev_t_array, * dev_d_array, * dev_output_array; + + +namespace StreamCompaction { + namespace RadixSort { + using StreamCompaction::Common::PerformanceTimer; + PerformanceTimer& timer() + { + static PerformanceTimer timer; + return timer; + } + + __global__ void compute_b_e(const int n, int* data_array, int* b_array, int* e_array, const int pass) { + int index = threadIdx.x + (blockIdx.x * blockDim.x); + if (index >= n) { + return; + } + int curr_bit = pow(2.0, pass); + int bit_res = curr_bit & data_array[index]; + if (curr_bit == bit_res) { + // Current bit is 1: + b_array[index] = 1; + e_array[index] = 0; + } + else { + // Current bit is 0: + b_array[index] = 0; + + e_array[index] = 1; + } + } + + __global__ void compute_t(const int n, const int total_false, int* f_array, int* t_array) { + int index = threadIdx.x + (blockIdx.x * blockDim.x); + if (index >= n) { + return; + } + t_array[index] = index - f_array[index] + total_false; + } + + __global__ void compute_d(const int n, int* f_array, int* t_array, int* b_array, int* d_array) { + int index = threadIdx.x + (blockIdx.x * blockDim.x); + if (index >= n) { + return; + } + if (b_array[index] > 0) { + d_array[index] = t_array[index]; + } + else { + d_array[index] = f_array[index]; + } + } + + __global__ void scatter(const int n, int* data_array, int* d_array, int* output_array) { + int index = threadIdx.x + (blockIdx.x * blockDim.x); + if (index >= n) { + return; + } + int rearranged_index = d_array[index]; + output_array[rearranged_index] = data_array[index]; + } + + void radix_sort(int n, int* odata, const int* idata) { + int blockSize = 128; + dim3 fullBlocksPerGrid((n + blockSize - 1) / blockSize); + int sizeInBytes = n * sizeof(int); + + // Scan Init: + int n_ilog2 = ilog2ceil(n); + int fit_size = pow(2, n_ilog2); + int fitSizeInBytes = fit_size * sizeof(int); + dim3 scanFullBlocksPerGrid((fit_size + blockSize - 1) / blockSize); + + cudaMalloc((void**)&dev_radix_data_array, sizeInBytes); + checkCUDAError("cudaMalloc dev_data_array failed!"); + cudaMalloc((void**)&dev_b_array, sizeInBytes); + checkCUDAError("cudaMalloc dev_b_array failed!"); + cudaMalloc((void**)&dev_e_array, sizeInBytes); + checkCUDAError("cudaMalloc dev_e_array failed!"); + + cudaMalloc((void**)&dev_f_array, fitSizeInBytes); + checkCUDAError("cudaMalloc dev_f_array failed!"); + + cudaMalloc((void**)&dev_t_array, sizeInBytes); + checkCUDAError("cudaMalloc dev_t_array failed!"); + cudaMalloc((void**)&dev_d_array, sizeInBytes); + checkCUDAError("cudaMalloc dev_d_array failed!"); + cudaMalloc((void**)&dev_output_array, sizeInBytes); + checkCUDAError("cudaMalloc dev_output_array failed!"); + + cudaMemcpy(dev_radix_data_array, idata, sizeInBytes, cudaMemcpyHostToDevice); + checkCUDAError("cudaMemcpy dev_data_array failed!"); + + timer().startGpuTimer(); + int bit_num = sizeof(int) * 8; + // bit_num = 1; + for (int pass = 0; pass < bit_num; ++pass) { + // Compute b: + // Compute e: + compute_b_e <<>> (n, dev_radix_data_array, dev_b_array, dev_e_array, pass); + // Compute f: + // Scan: + // Add zeros at the end of array. + StreamCompaction::Efficient::init_array <<>> (dev_f_array, dev_e_array, n, fit_size); + int d_max = ilog2ceil(n) - 1; + // Up sweep: + for (int d = 0; d <= d_max; ++d) { + int threads_num_needed = fit_size * pow(0.5, d + 1); + dim3 up_sweep_blocks_per_grid((threads_num_needed + blockSize - 1) / blockSize); + StreamCompaction::Efficient::up_sweep <<>> (dev_f_array, fit_size, d); + } + cudaMemset(dev_f_array + fit_size - 1, 0, sizeof(int)); + // Down sweep: + for (int d = d_max; d >= 0; --d) { + int threads_num_needed = fit_size * pow(0.5, d + 1); + dim3 down_sweep_blocks_per_grid((threads_num_needed + blockSize - 1) / blockSize); + StreamCompaction::Efficient::down_sweep <<>> (dev_f_array, fit_size, d); + } + int e_end, f_end; + cudaMemcpy(&e_end, dev_e_array + n - 1, sizeof(int), cudaMemcpyDeviceToHost); + checkCUDAError("cudaMemcpy dev_e_array failed!"); + cudaMemcpy(&f_end, dev_f_array + n - 1, sizeof(int), cudaMemcpyDeviceToHost); + checkCUDAError("cudaMemcpy dev_f_array failed!"); + int total_falses = e_end + f_end; + // Compute t: + compute_t << > > (n, total_falses, dev_f_array, dev_t_array); + checkCUDAError("compute_t failed!"); + // Compute d: + compute_d << > > (n, dev_f_array, dev_t_array, dev_b_array, dev_d_array); + checkCUDAError("compute_d failed!"); + // Scatter data for this pass: + scatter << > > (n, dev_radix_data_array, dev_d_array, dev_output_array); + checkCUDAError("scatter failed!"); + cudaMemcpy(dev_radix_data_array, dev_output_array, sizeInBytes, cudaMemcpyDeviceToDevice); + checkCUDAError("cudaMemcpy output to radix failed!"); + } + + // Copy to output data: + cudaMemcpy(odata, dev_output_array, sizeInBytes, cudaMemcpyDeviceToHost); + checkCUDAError("cudaMemcpy odata failed!"); + + timer().endGpuTimer(); + + cudaFree(dev_radix_data_array); + checkCUDAError("cudaFree(dev_data_array) failed!"); + cudaFree(dev_output_array); + checkCUDAError("cudaFree(dev_output_array) failed!"); + cudaFree(dev_b_array); + checkCUDAError("cudaFree(dev_b_array) failed!"); + cudaFree(dev_e_array); + checkCUDAError("cudaFree(dev_e_array) failed!"); + cudaFree(dev_f_array); + checkCUDAError("cudaFree(dev_f_array) failed!"); + cudaFree(dev_d_array); + checkCUDAError("cudaFree(dev_d_array) failed!"); + } + } +} \ No newline at end of file diff --git a/stream_compaction/radix.h b/stream_compaction/radix.h new file mode 100644 index 0000000..c222f1c --- /dev/null +++ b/stream_compaction/radix.h @@ -0,0 +1,11 @@ +#pragma once + +#include "common.h" + +namespace StreamCompaction { + namespace RadixSort { + StreamCompaction::Common::PerformanceTimer& timer(); + + void radix_sort(int n, int* odata, const int* idata); + } +} From 01e2b98fa6a0fc769cdb515496c3cf88594b7947 Mon Sep 17 00:00:00 2001 From: JerryYan97 Date: Sun, 20 Sep 2020 23:23:02 -0400 Subject: [PATCH 3/3] extra credit --- README.md | 121 +++++++++++++++++++-- img/Naive_GPU_scan_blocksize.PNG | Bin 0 -> 17266 bytes img/data.xlsx | Bin 0 -> 29102 bytes img/efficient_compaction_blocksize.PNG | Bin 0 -> 14759 bytes img/example-1.png | Bin 9374 -> 0 bytes img/example-2.jpg | Bin 12627 -> 0 bytes img/figure-39-2.jpg | Bin 83463 -> 0 bytes img/figure-39-4.jpg | Bin 53943 -> 0 bytes img/parallel_radix_sort_blocksize.PNG | Bin 0 -> 14794 bytes img/scan trend.xlsx | Bin 0 -> 9621 bytes img/scan_time_for_different_array_size.PNG | Bin 0 -> 15249 bytes img/target.png | Bin 37718 -> 0 bytes img/work_efficient_GPU_scan_blocksize.PNG | Bin 0 -> 14917 bytes src/main.cpp | 16 +-- stream_compaction/efficient.cu | 92 +++++++++++----- stream_compaction/naive.cu | 12 +- stream_compaction/radix.cu | 27 +++-- 17 files changed, 208 insertions(+), 60 deletions(-) create mode 100644 img/Naive_GPU_scan_blocksize.PNG create mode 100644 img/data.xlsx create mode 100644 img/efficient_compaction_blocksize.PNG delete mode 100644 img/example-1.png delete mode 100644 img/example-2.jpg delete mode 100644 img/figure-39-2.jpg delete mode 100644 img/figure-39-4.jpg create mode 100644 img/parallel_radix_sort_blocksize.PNG create mode 100644 img/scan trend.xlsx create mode 100644 img/scan_time_for_different_array_size.PNG delete mode 100644 img/target.png create mode 100644 img/work_efficient_GPU_scan_blocksize.PNG diff --git a/README.md b/README.md index 0e38ddb..d74a6f7 100644 --- a/README.md +++ b/README.md @@ -1,14 +1,121 @@ CUDA Stream Compaction ====================== -**University of Pennsylvania, CIS 565: GPU Programming and Architecture, Project 2** +**University of Pennsylvania, CIS 565: GPU Programming and Architecture** -* (TODO) YOUR NAME HERE - * (TODO) [LinkedIn](), [personal website](), [twitter](), etc. -* Tested on: (TODO) Windows 22, i7-2222 @ 2.22GHz 22GB, GTX 222 222MB (Moore 2222 Lab) +* Jiarui Yan + * [LinkedIn](https://www.linkedin.com/in/jiarui-yan-a06bb5197?lipi=urn%3Ali%3Apage%3Ad_flagship3_profile_view_base_contact_details%3BvRlITiOMSt%2B9Mgg6SZFKDQ%3D%3D), [personal website](https://jiaruiyan.pb.online/), [twitter](https://twitter.com/JerryYan1997), etc. +* Tested on: Windows 10 Home, i7-9700K @ 3.60GHz 16GB DDR4 RAM, RTX 2070 SUPER 8GB Dedicated GPU memory (Personal desktop) -### (TODO: Your README) +## Features -Include analysis, etc. (Remember, this is public, so don't put -anything here that you don't want to share with the world.) +* CPU Scan & Stream Compaction +* Naive GPU Scan Algorithm + +* Work-Efficient GPU Scan & Stream Compaction + +* Thrust scan + +* Compact threads (Part 5 Extra Credit -- +5) + +* Parallel Radix Sort (Part 6 Extra Credit -- +10) + +## Roughly optimize for each implementations + +In this part, in order to determine the suitable blocksize for each implementations, I run different scenarios under several discrete blocksizes: 16, 32, 64, 128, 256, 512. Then, I collect their average running time and plot them respectively. They are shown below: + +![Experiment 1](./img/Naive_GPU_scan_blocksize.PNG) + +![Experiment 2](./img/work_efficient_GPU_scan_blocksize.PNG) + +![Experiment 3](./img/efficient_compaction_blocksize.PNG) + +![Experiment 4](./img/parallel_radix_sort_blocksize.PNG) + +As you can see from graphs above, a blocksize that is 32 is suitable for all the scenarios. I think this maybe caused by the fact that the input array size is not long enough. I control the input size for power-of-two scenarios to be 256. Besides, 32 is also the number of threads in a warp. As a result, 32 is a preferable size for all of them. Subsequently, I will fix their blocksize to 32 and do analysis under this blocksize. + +## Performance comparsion + +![Experiment 5](./img/scan_time_for_different_array_size.PNG) + +As we can see from the graph above, we can figure out that GPU's advantages can be shown when the length of input array is long enough. + +As for Thrust implementation, I guess it implement shared memory and all sorts of tricks to improve the proformence and try their best to exclude operations like memory copy. + +## Brief explanation of phenomena + +From my observation of the NSight timeline, all of my code are bounded by memory I/O, because the gap between each computation is relatively bigger than computation parts. Besides, each implementation is different. For instance, Naive scan would hand in lots of CUDA kernels, while other implementation hands in less kernels. + +### Output of the test program + +Here is the output by inputing an 2^20 array. As for the 'parallel radix sort', please take a look at the thrid part of the ouput below. + +``` +**************** +** SCAN TESTS ** +**************** + [ 3 16 44 30 6 8 15 16 11 48 38 32 12 ... 46 0 ] +==== cpu scan, power-of-two ==== + elapsed time: 3.6953ms (std::chrono Measured) + [ 0 3 19 63 93 99 107 122 138 149 197 235 267 ... 25674322 25674368 ] +==== cpu scan, non-power-of-two ==== + elapsed time: 1.3371ms (std::chrono Measured) + [ 0 3 19 63 93 99 107 122 138 149 197 235 267 ... 25674263 25674285 ] + passed +==== naive scan, power-of-two ==== + elapsed time: 0.999616ms (CUDA Measured) + passed +==== naive scan, non-power-of-two ==== + elapsed time: 0.999424ms (CUDA Measured) + passed +==== work-efficient scan, power-of-two ==== + elapsed time: 0.227328ms (CUDA Measured) + passed +==== work-efficient scan, non-power-of-two ==== + elapsed time: 0.223232ms (CUDA Measured) + passed +==== thrust scan, power-of-two ==== + elapsed time: 0.245824ms (CUDA Measured) + passed +==== thrust scan, non-power-of-two ==== + elapsed time: 0.309088ms (CUDA Measured) + passed + +***************************** +** STREAM COMPACTION TESTS ** +***************************** + [ 1 2 0 0 2 0 3 0 3 0 0 2 0 ... 2 0 ] +==== cpu compact without scan, power-of-two ==== + elapsed time: 2.0501ms (std::chrono Measured) + passed +==== cpu compact without scan, non-power-of-two ==== + elapsed time: 2.0319ms (std::chrono Measured) + passed +==== cpu compact with scan ==== + elapsed time: 7.6485ms (std::chrono Measured) + passed +==== work-efficient compact, power-of-two ==== + elapsed time: 0.7328ms (CUDA Measured) + passed +==== work-efficient compact, non-power-of-two ==== + elapsed time: 0.733216ms (CUDA Measured) + passed + +***************************** +** PARALLEL RADIX SORT TESTS ** +***************************** + [ 3 16 44 30 6 8 15 16 11 48 38 32 12 ... 46 0 ] +==== parallel radix sort, power-of-two correct result ==== + [ 0 0 0 0 0 0 0 0 0 0 0 0 0 ... 49 49 ] +==== parallel radix sort, power-of-two correct result ==== + [ 0 0 0 0 0 0 0 0 0 0 0 0 0 ... 49 49 ] +==== parallel radix sort, power-of-two ==== + [ 0 0 0 0 0 0 0 0 0 0 0 0 0 ... 49 49 ] + elapsed time: 0.733216ms (CUDA Measured) + passed +==== parallel radix sort, non-power-of-two ==== + [ 0 0 0 0 0 0 0 0 0 0 0 0 0 ... 49 49 ] + elapsed time: 0.733216ms (CUDA Measured) + passed +``` diff --git a/img/Naive_GPU_scan_blocksize.PNG b/img/Naive_GPU_scan_blocksize.PNG new file mode 100644 index 0000000000000000000000000000000000000000..534559a19acde37b4a45508cf2a8e9fe23b85697 GIT binary patch literal 17266 zcmeHvc~nzZ*EeB|Oo>$i5fZ3%r~^a$pp1!t6i1>ALS+buZ7EYw41^)f5)}notx%ak z%OsOZm_iar1r-IXK#(v5BLWG5AcR0d;JZPqb-?F&zh`~x`{!Lt*A3jqb6Vv zr|$?1$!F>df1}?@4RZg27pUQOt|o2D`sQ?o5}xzpc*5>K^%i4vicw2mZE#Ijq+6w3 zm{YDo=gxug;-B~~&!X5GL%*AD?zZnTDGyY6WCEIeb$KX;-d+?#7hNvxbvu8sA^K-1 zs@5Qey=@JE! zL6R(KL*nkeZXMzW_e#;DH6X+fQKJmZqFAH$@rXRhDNDzoXUIhuiOLj^RhLef=uV9F zz2ajZ*H->vK-ftvbGW;S*>KUdtTia&D`vmJ+)!J=4sqT?il6Y=8OEc=;SEPA_dAYVgRx3io>x~h;cvbLCIoH!7S9Cy7*DnRB;$grm^(O~Yl zgGI4-uHr~iG{>C1=x27;+o_ZF!_Fh?+N#>t%y{?rqPQ}Z1Dzoz(L|?g$H6)jsSKaX zRvG2cOeGT6%;74Bunh)XXOn*z083#u`*U`)O4FgU55%XHi8eL;JBh@I3uFj&!`5or zaQMY_RhJY;obcmk+NFfvzk4_`9Rj@Jg>7=J;^rc1nkj{>O*IMWXbx@-3z|3K_0*w_ z;Xaci)$K_mC9}gOR7wI%M>x=KK{YQXq$bnS!j-jJ3@?;wzMM5t<5Vh7rTMz{>wARi zM=-jhwiiR%cPC#8f>p^E|1>g+I7NY`{3a?Djlx#n?V68`5(l;QA$p3fv5zvoEgFdn zHXnBCFOTyU%|&UkwfKlVU9!R){l;B2ebue3;crs%C#nPCj4{zhEk--{>u6fQm6%W( z(`sCOmp%e3Gv@DJ!T+%@)iQu4R~iWR)v`3}_Kr>naKcWwlM3*ftm9{)bgX5H^L z-|mW378Tb_5H37@mwU1Ab#aPwU7AoEL=yM|dT$H}1nwD;;*H_nG zmswVtS8&bnre0wbXIGu^U=Ty%o9sN=H+mIOGD9lG12|mn z^yUg|aB)BtlKRR)|Hp}+{M@q5YEB}x2;A)zcKtZi(UH@EBDa+2Rrrxg|FFnFh7<=? z)FeJp@5=a2T$pasbN#0uI0Q@Nk4S;nzxKsa~7DOpjO(UWq*!IoSUy=Yo$^k-yq z)FHmPqtH+y;Gik8;0Um77C-(a3JmLhX1W+fDo!T0nf0=@^fOzpq3{tG5a=e8UrVF3 zv7{SBgTC7|j|tNyGwE>ZtJ?Gj-3y?Rvf0oJrl}Logcip!QUCRgf_T2-@T#FY zgnoBRx5;zkVfxqltBB8{HDY#VyIhfFG@nMkM4*SaQ)hh-^KcI~v2anu$icj9=f6_U zi|f?I8lZNC>IVT9zmc_L@I}F07QL@--Eo3ve4FCT=SVPR`T@&0G?18lIIQoPDY8ET zW;;puqL2s4aM*_Sqv*|ew`}JEi~>1>-Ojy3dG!T{6Q-Lww;?bc2txAed399Wl`?fb z{m6l>Qlg5({TD$P=^kfFM{QY3V_(hWPTX`+uyjVWcFGUfD`P?a{hL!beRE_K_D-|k zU8f+e(bjbR>c*+!QqjF>K+^H*LELr?hF|P-Y+Xx26c%Hgjc9*ZWRlxZmXCoBEeH+s zF&1iVmGNA9nD=}w%ecC@G#Er|^G0sY2;C97Br=o^AK;J$v_4d(dX;utezG^kw0dXz z+B9cwt9LoW5rIts_p-x4#=DQmvHXya@&zDv8c6uphS?&RR9j`s1H3scvFYT@4k5EITJD9^h4<)I;|7xSydF27}Kx51y!3Js^U zX1D@x*;}A)#i1(O%wm~}s?6gM$H_ax&(w_N1C`3_v)#&q2TUh@@>71RgLElys@a!C z<;5+BP{R2kt?e`G*dxiEtb)`d*@N9C?2+U1xyk1}in+HhjpR(`XAvfT;5ys1y%rSO zHAVpU(XwLjxHv4E!ua^uhLDh1Gwvu!dyYawpBO=DTFG6iwnIP zyxNK<5n&FLKv=9kuD=R5Ze3Kpdi||J#keExq3l)btbOoF*8&{f=|!OO>{ok}K;?u2*xgRU;4%x1kal9P{?r9gq2=wr zMgZcSDN#r$(Q1{<{bN+dac9Q*1CIAuv$+SUyPi}NZXL9S$#@h5rZWDd{5H@wJn`(9 zS+5?ycrrc16>bHVkormgv%flk$`il6X`0xWP&~uUP}Da%x4JE}m}8nMOG41~+Ayu( zc10CA_X(~kjC2#ARuTo9DeG9=st`L;9XLd0TIrTRpO)|$hr$@=MpK`pU=YMjGcRim zuPqE4IOs;fF6bt_*8aLZZE|a5Zv+CUVEb&AtwY0i8yM!}aAK>a#Be8c(~UTS7Y5kWAG~<&sy6IKk{(r6BZG#be4RkEpb`az{v}>bwd&xrb0I9f{uH zo^w5l>O*xe780O(y04A)Yo{z||K>=ch84I#;z0{akx2%9Fk^jo=?kb;;eVGh{m=8R zn)5M&AsRshWLXLg(MyY!d|Nwy7?5R&(|2QFsf+UX9=P{*e*z+UaiK?ZIeAkqgYhJ( z7xXST?l{D~K*;15pt7UDI2Y$szsufB%c)-eX?_f$z>j}k>zZgybub<(<(I?Z7^>x} z>OxQ=$vDvDM~7uen$6HZg{~DN!kHKX-{}4+^WORH9qX3o`IqW?p42s9L~03(R~NW@ zIj00`z1rEU+WegRY*DRL@yf{DESDip)ko)Ty#W04u(=OI4YNUz+!C_Wg`8%{-pj#w zJ2~?img!6h!?MTv{_9lr3ug#U3iX8TS`_1@yd>SFP;tr1(_81pHjUQV0z|{|mt11g z!LJiqFXVrcu70fh4J^T6G-YY5AR9Krz)&oRi}#BVF5g8AvszLHMN2|Xc}nS0N_O<( zyrt}*#r;LBYlAjJMUqo=0`({VZLt%7#l@ngh8#^|3Vg`$Y-RvV-`hjSp=opdIq$R2PG9s&xn*g2N1e#1N+RZ0?5n=ISgHBFDM{idaWppn#Nbn_m@^p|M4I_k1Z2)<%bA&XNK^xnrA(qVBJte z59zzlA+jNH&?Y|9B5ua-dJbfAV@@*2f{E?i1?uI5?4JbK5kygU93`o%Xh|h(NxUO` z(GXYt-8>vQ!^QlTrHFHBsl+|r)3O8&5o)m)tiVwcyBw18w+OSnf1>006~qOdi(Mhf zEyl#Iiemyf!|^U|C$Fa(vT6J*bJL1NnNw>(lQaTE5E>c^2?q)*-kg*S_B7yEqTQGQ zb3L(&umah9j3@fCV0PItE4~4|N7+@@k~=-po^micxESIQEu0x6#1OF9_1>IatH%pp zW5B6p3^4NXszshMqbqV@72Z_{%r1jJ;^?&q3#OOF0C5x6 zT$mdz(E)%E4|Qc=)Ncl^->gvy{HZHOKv@(lg*i!zN?sPK^J)PK-c#K>ve;c63SC?9 zsXQ*DTBMIAyB*$^U~=;%)aK|~nG@8##t>?ML6+3I*2-9(EezR~5abT5 z_-yOZ-S!1m;Fdk^gLY>DN01&kQMjQ97{)uN3y&M16m}(97cWg)S zkVYYg0o=gur@AU*H)4S?l{@)d;6~k7%$$>TL=C5OYK2pBN^K;}kE$nkBwSXf86F$YwhZ*{VNK=A|B$*P0Vk!Dy< zfCFjxp%j6i>3o`}R^rKq*t)-`^iUK#5-J5pFCHl7O1#qNI3vFghMFo>F9*-*R6`Y*~4WO9EB3`737Tv3G`8dp^dQrV;0&63leVhVd$37{;#%*i1oWNzVJ0 zW-V_X^8-olAh005xRkl>gZXp^^SGY=D#5rq!sR(FGF}w2G~Ak6vL7&D``~kVJ{CnB z#@9xKt-TJ#6B+iwxShHY=D(FFn9J&$du?Pt=&eN*NW+9(Sa7Jtp0b2(rf)rr`CV70 zLkR#U3cQ3;%5N7s5`S1wa)eWNDWYC#fWMBzR%svKIbM_({MMHO9s5nHG`*J9Hfdz*QIyuY0$c}TV z=%}!{>gcdjIM_!^X-<-cW%cUb&x|-A7|D)C%qZ#GuFHIjLqYlMwxX{4lb;f;(v?bc zFkb{kldz(R{(6NWY!Afg%v)S(yi{yfaLl_phA>!3o9qRVw37x~L}I}pd{ITTtUZs1 z07ir?Jw+iczyevh-e(Hp?ONy}F;EYKBcm`P0A=94yzKT~bs+#d@a|ZkMmo7MSAvhP z*VSXh9Ew-NoghHmnS+|bCd9H*Q+afBv>5saG*37={!Ps4nHJ-i%gr6%g-0iRBi~Yo zzvvYE1;hI?EnL1aKmQ+t@k4n~-o(TNdC+kUZ+2M=qy$Z})V0+W+g#Au8D6!?Aft|0 zz`PG9G--DGUM}gBI#0I+79ONh(BZuvlk|@F7*LtF9@|qT3FP{m->Go>R%4F0~hlh+S1m{vVUBs}N zE5U4mtGt`4xeNr^?HXBWIPk~KS881H>xW~gPBd3Yq!h<5hjv<9CLCJQsKVe_s^&BV z79fXY#5;S*i~E+tM_*xGu&+^w5)QXrZAcaEs}=cXgv(CZ7j*aV2g9sAOB#z8leLOC zqFoVtzQUs|{NsdsG26Gomyy!X_3W{*_6o_B{>jL`JCXC(?`zG4_I~glv1)l3X`dmu-bovs4#;aPoI1G zvk~)DvaGjg7e@P&wpwwPch{N9$~M~wU|wGve<))gI;C_H5^mfgl_Xoj5bK{gV%9q!kB#%>?b34&~*TM#+8b#_q_Im0Q3bMgVVC zXyYFRmB&@0#M&gxAh|z!{?)Lrz0Jtg>(*;+IQs$SP-L?ANtQhp_zlfZLQ_avnM2!; z@H)r)Ci`;-;n53IHD}g?JzU{AIwQgiMcioUwuSy}p9Fz8ZL<7X^rbj@m3~y(mLKMSJ{|*cF&88y$A9<9Zvo)t{0DRUQQp}1izWtF$Xj6Dd@F{FZJ@ye0n(wB&N+LWdbC3 zs1KbSuvk!q-77z|O0;Z(A8NV>z$gh-k5z@=&3R>p6XktsKYDgDhqoW~Q25lIG?!tX zJil@W9NtKf1iYX;-?q}Ct@?mGuQ8t2QX{S-don3bhs7OVKu+@HTHe{HGG^iWhwcgfXPkz^fDpeo2NqH zh{&ZQ@>x>bfE4-ipM%uWPDo@Y)|LC(;omAR`O({8<-^gHUk+B1+*;g@Tw17^*9E{Ga zzGZ9Hcv?F?+s23qggD_YKk&HjnpWHi+Zw&)k-GqD=B0w_d|hi{%6DXA?sXTO`B+Z} zAZQCx>_Fn85f8|c5a5$X24RJa@z}D!^4Wt_hI2_Jhp;33=pqo(A*eaKQ+lM>V7w!h z_S9r1md&Vl<)*%Rn}z|lBjJ4wH+`(i>fDEq1{U&%94m?Ec@+D5yy`aEv83X%nX|bmSfbt=Y;3}ftdiq z;vL)4TBLNaf(4V_yK*tbwTJvqyy*vqj>>QdLj zh6)ie0c&M8Ny8bwa|~a!+>91?``2Ob%T0Wlx|=^bJI5 z2}-aHYi7H*YndEFzE3E4-!|Uxtp71KOFZIrGTNaoN`&Pcr9MT#z5Nq)`vl9{(PSN@DRc>L0(EYhz^lp67CxP!Vzx%^`Fjn9XkkOktxwSjdkGt z5c7`_jF`GUT|C)b?%FwR#LPypx5b%E35UE9sB#LZR2wQpT~8G|zaNPuv|*Wylr{%~ zQgYcv=rb3$1Or8EipR~|3`uA zQ^;yy38=QyeDl7rp}z?wFkqI*=xeZx(V1mFItD6NFiD=oJSjE^i4f{&xMyP@7-wQJDqX{3dmeBcDwGUY3 zJGIb+Y5_g)&x}CYl#Xt!-E*v-Sco@B42oQW9O9zsVnBO?49RgzOSeb_)E4*= zqLvgm+;s^Xg&nlDdXupHLk~bUD?ui9p^l5;5#4j*Sq27DzTL-rpEdd-2R|6Cey_5%z-=nyq*p8kojgD&9 zK|6%z-+9_UpmY;Zr&*hgz=z{5!B2y|9mTPQ)bNCzaR!NypB#Y+{Ko4Ojc=8-f@3n^ zdn)peN&M0_!SbT#_hA|$#uA{h=h8ScmTMo zf1Y>V4xL?`W2F$J?p5a#sSc8m=<8D=p~^66ca=bJs1Y=dWE1iGyL|8;h~+K~+jE~b zm^*yMa9t;HPsej(dBcQVJHFK^mhjiO4b;VF$7pb%;qK78g#I0lNrI_PXJ&-2dREFx zB*YzYatbIz61JRR3wTW{`~0xA8aNajhD%bzL`ag56hGR)iXnx+^Ek;U3F6F@QJ-tr zz2M<7P}Z-$B6cmQ!Wvzx!C@tMl?SCOayEL5^I+M%0_Uj^?#=8QDyi>N?stypof_k8 ztv!(SSV2!xnv;NW!P~oUKOAG-1EpZ@J+B{oB?^%QlVuY5mQB9>P~s)hHgBQ?uAa37 zOh-~+d5c$XKU8U6iy<6oq4>vE2hyTGGpB@iQjkeNCq=eGt6+#L*%Zl&-UWETM)gS%Bm;Rp0izo-e`Pb9pZw0%t&%P@Hb4`1 znhucJ_`=rQAO#(GJXDo1KIJGm=7q%I&7-$qZ2paM3VdEyN`Y3AJp`yNbV39C#Dg~E z`x#GQ0lgwRF;jwJ4f4A~->C;$Kt8UqSWz~6_Lx${=k$3#MqN)rb^f2&%A4BhO31Mh zIAZ>cM&2AlAmiUKQn@*4v3|HDQ8SL{#5i9clC^17Ktv8bgRZqhXZl-dNC0aBQo zaKnt(5;;(EBC#TV+yPB;=;aXIi#iwaiwpD1ZAFb7R5n5keO^(fw^1suU6M|(WN)k= z0f&BDlGKsv-a}7a%?tM-VLvzNQ=o6q$o%JbX)xKQzW1rw=OF(Skj`*B6pAsE9uKQA zgA7Md_MCTZ9pg+LMN=%mV3|k z5VqiChsxxe)_o4r9s}p!Qq6;@-cV~F+Bb`G#SqU8_Xex2ncl7{(aRO*m7+qrDsBi3 zRJ2x#3;%2MpECOYg*ZuMd0kk1`=R9DAp5^*>5Ljbn5*KsgTYSwZ1nDu8K9S=;Z16m zqr!#xY1UtZk`q`U2{c{b4V8KVFBW$sS1zALtYq>)V~6?oC8!q_j|u`_xWQ$qr2rvz zpKM`PON#O<#U)_%&NR)eLcZiQ7HHY&C`a6+h0LjOeNmG!pCN6k+B~6ay%dUTpvLCt z4ZY^7O}lAf_C0h@Ag&VUsxkE0PCnHFNK#?Ci5=^H%3LsWjlCMeBqMmCu&mT#D7^YD52($KURP_ zm!soLH6sH95TShspY`fTMja?M+fR+KnWHIfQCDBLSjv^X7t22qU^`TyUCuGSScKoM z6))x+x+(n9n@o3|3B&a7Ed#xD5nwgKg9}<&=V3e9{Jo6?=e$-67OdS~T)+WC|kjxsem& ziC`^uKzlruaZBt$3(bm#DR7GDHe3hBlWcC9pEe=d4{eX9%^?yw#RXNF9s#l3V1K0Q zuh*lZ4%6qi*_F0Lwq;T*_5sqkWSEbU3ZJxXP)th6(N_1wC}QQY8HO}h9ufAA5l3o6! zTxe&k@5A{n($_A~n9}7ZbmX2`KO-i~rzr@&x3Dxz0hOP+D1|o`^x7GhW!+KiHO>k; zbT%ud7cN2$|I({g6x>9rR4(G2z!*$M9ZIt<&1WO`!0++_CGbx8E&A9Zn+$(D9_)f{ zC?#)alMSy$S@r36(`Tc!R1GG>50!NPOW09O#^=mh5?|KsUWF?ME8g+gvsKH@vr7A{ zW72tixEa-W?Zcv^Ux6G(Pq65Ms(|cpKILD4DQRELAvV`Fk`0kfNu@+OOMd(*1Js<` z5O^mZ!MBMAqut15#Vuw9Bj~?`#U!!CfNvK#1pq#}h`b^W5mO;e9c{l9(jUF0*l( zcZo<^taU=$;tyivP}otP5QLxT$!2goWHOW(qEj+&$F1?z^tABJ{Yzk3Q9eMoksjC{ zr&OS(s6X1s6dx1 z2}ZQp(mH!ULh~{Qs)N76(rL7Rxd(>(Q&Qc|xOqpEXqSn?7S|C9k%e}0ZqN?Wdf89M zx=doxQUS&xd9!!q{5+Mi6ksx84-r`h%VWFzG-rYp*a$FZxN6xdJtbD@7wc84rY@QZ zInt6@p95-^G>VGSJbLy3(;#52*c~4ETuo08(q%TOqs=5&rA5g%8!)MfUzOH+KPi|f zA#e6YYG2&gvsoa%I{iYn>@aiIN}Y(R%pfiH zXkR4{$04)*fHm5{Q@DcZvjJY|H(*zk#`7oEO#f-#(dJjy{u{p2Fi0!8Dlk-Orbtv= ze!e&5dEY$M^pUnF5}U5UXrCPL95hxtB0&4)!>qaa$(LAVPEVz#Y3AGU^{H7D3ki-K zG1zLAfm;hj?ds*6w}sy#ux*kNRSn5Bzq_GAB0H^4^@L$y)tVi2K9s1$?g>^;U!%2g zc5s9cLY`=8WZg&wzRMzR_jT2JN^jg~l*s*!y@hDYHU=AERe~bZSZpH|U$|4fPXzaR zVtG}v$)u1Lk2ore3<{6XCeX!%UwhSBX0S6SN*e6jzm+YoeB3LaX_lhLwC1lD{bYuY z57*)w4;>9CXYn*SW_VZZAwiOV)s=}23DZv*CE3{YwD=9UqYY*J`}As$ry8zwOc$8W zUxW&4C9e_IvxK1E$!&4{VO%Us6ezGJo(ss_OuwGR1q)I9_8ym&nuY;GavKTT<;4ja47!m+20;PDJ3(}$jy?z?JoYKoq z*2h(RdVYjI72GkRE5=<{ysX&f<>#7)Qo)SIlX-cGG-wl0Faad{13A?64ehXssj}}n zd95nd9F^RkxA!?!WcE7Cku;?%VXf|&z?)8@LRKwaYePzAXVlu4jkQ}|oDI^F^zI)7 zimx<9H057R%Ta>ZO?viHz-$aXUb9;u^#?T#wst?dg{3DEgkqYwz4~4v0 zHqPb8Agi-BF5WRk&W)j9^oAdNj zeo6{|q?-UVo-ZpK5_fo=wVeu1s`2J*iO$x_OmE+wXNpJgOUnKhE?o#^zrM{kt#qge zKZ@{}Z$JxfhRYbv*b_jYevP&Q`$=AMlXUR^M}N!VNB|H(nnJcVPR2G)x=QYL z#*W&wZq`=#`5-{#xd1@l&;RH6e|QE4QpRQa=@EWDiM?XhG$l^_u~0rez~N3=I=EoZtObc`EN70)>g3)o zLZj}*k3w9-99hMT)1HKbFP^ppPm^ov%|apgEjcBRDhD}H2`r>~w4_QnBip?rGg71m zz?UvH)!Inv2Wei)vSQ@{?08!&VlX+DZYPtf0OByV9sMdGjwL9P zY!8Q8)K663`z#~qedx-s_{2Z^tRQel?)4iDWp#&YlCM&?OQU__G4jIB{PeK?Ux_o)P$hiM%KLhEcywgnj=MhI!(0CMplI#~7%pF^W*8$4Ka3?TyUT@q zW3(0o{27H?8O)w$?Lvq`ppef ztOvDadv_JhSRQmn)Ftp!c#a$x-jT_zhmksHPqP>v^iBuvk74Zg+R&qwz*(x{2H%N) z4{SOjYv`c;Im3N9ByMSY%b{A3<@Pu~xwYbX-|T62F0W7&72FYm)SaBKCOwE0(_Y;{ z5!!sBkmFk6eoSwW{a(jkU%&uz|BDzjDbo}E`5uw_j&g%mM@G$>S8V(WyI0IbhX-R#ERhI1yfnkjKjRvAjg4|&|TNas^?xfvm5Edi$*4E zM1hbQ@tJX2beJUf!B?Y^`F1?peSi(JzhdNOG$0bMbn81W{+~h8<0|WB0Q?;!-w71{ zduH6M=v-|bEDdaJE&s}vmCDz)nViTUpM_6+_+5(hfC;(9ia-K%vggPw+9hN^GqmXi^W+keYcw+#oJ|M)!C9(p20&MuXvWVy4F>T9>ju;I&xM{`Wk37ka8M4xa#<} zOr}Pf3;Ud7Bz5M)KZJ`uuFj_UXkE3qHyl6p0QqUiT=JBV+N+5{t7%5U#X8SBmy>7MGQn*Pl9&Q2|VHkFX{Bq1@PVF-oCN*&Q+)?M?uiOh-d>e zuE+Zn;knZa(h1i3;soBu0jbW27CX8bk>s=0N5rVjLc+LrM}_og3{f$FTt}Pj#%J2< zYTKxZUvr*o{5I#^kuWW9tU{DznNH7t8Nls}yFM`oQVMTQZ>kJZ-iH6kyVSwC>_DdX z+mMy~`7;_t+O4X`0{pDof+{c@8C%L~bLLBflzahB4dQ@5QatMV5V4}q;wML4qT2^s zf4=e8j)ymFd8yc`id-A=yRJl%7Fnb+daxzWqcn6wSA&9_MRKBaeUEDiRJOTHk{B=~Xv8205br^>`5?>IU81Q?5ZU9)aRc=)2qqv=}I+S9N&U>@gkD z$e34>$dnV5G`*O~6!RFP=|ur^cCim4=$0x1QGS};M){r|5G+q!;0?IsvfFkIKAnxa zPyX#7msZSGx8-Y7jYci+)fM{YXrlI?nKfSn=P6hGUQr^shlN;hGXNtOlLw@6Wk5~6 zVf!n(v1U*?+}K`#SE<s)S!!tNg{qzdz%E5LC#HTxm_!CWEhW-nChk0r2 zyFdAldznhZA2)x#thM}K6LMNP+PNGJ?{;4w*WC6)fwYkHHZe7Sduvp8{bM*LfG1sm ze2?&bha@Hd1mJf#{wr<$&q4WLDGcztj{Sc2|LvnPVccSX9_Hs$@Mqv`mp!AmT!_8N ztU{V~rjMUp61$WExTg2PwWR{*XiuC?J%d=^6K;6>y02^1Gcg{fDTC@v>^Wszv;MiCzY8SgAoEQ2&N)5zLxgD1klCDtlShb)4a; zVJwDuL_Cd#=>{Fm!w$=$?jhOC8;Sicn~g z?WIDbbAxt9HJ4%aW&ip}&Ux|1*QU>uOu@Q+X(V>&@^WJKwAK|U!P}4+vOvs$B^#n` zjZ|>Q2%sAe?2gwFXfqRI;-X;Es^lE0Hck26BEKfErMDEQcr8bOw#*L)BCqS+sLDn1 zX;vHBcwYZ4; zIdG~Ar7kiv$Dxi1jD@C*Cb!!WiHc2-^^tQ7FSvo(p20+RTjL#V<|%bEX`+d*xPK(5 zh>4sq?MxZEj_{wb4l((1yOnHNORgLJR0(=1-O`+fMQ-n-t6IMb^p<iXo;Y+rjU+$KTgEY~~?v}qj!q3YudBXZ2TF@Y)8_OuQoTBrpm zQv8`1wHoex*n16rkf7nuW@}0|o5^HD&GMv<4r$i+EqZ*-4NQjztDmGptsVL=Q|v1Fl;G%jFJ`N6O+WJQGZ2i1Stc3hv;-Z^_c^T!*vH_ z*y2Ok!f7jFOd}-W0VQE8RB!4Z5LO4HU&J(8@u=CH`aI75$H9Nh$~cAs3u2*R`ocU) zBt?M|)*WF;@jLzMYhURZ#dq12**}aR_aW8ropQKQOMixgi(>l{Wy=>O=lc)XQ`+a@ zFd%xP*8pWcru|%$AyeHN#b{~u4tChW=)Fs)JN8r2u4y+LD6vuwuFwa5@3 z!)y&Whg$mXncl4&mDm_TrQtl(ec2Bo!@6wFB9f-a+BMjH2WWy|gbQRO#vc=-Dj=gE zE3;?Kii_KIrW_Z4$Y+ zRWW;K+MSF+Qk;Ko?UKqgqb{>OJgK~-e%)=)ot3dK4AE|na5*68E$Za2GYNzo%5P+W zyAirmV{HVx`dZ(@D#TbCc!EK0CK=Cv_`g*j3h7_@%E`>w+L-R|^WUlJLR~X*T?E;O?hhYCCs&tvedhp{)vCStPT5bMVe9;Sq<^au9L z@#01jOSQsT*C{W@saZBO?G7ip;;A1p9QxwxRXU}=;bexa1QXQPJ6W)kGOGJQB}l{S zL0UFRj;@L}WBJ;`T!e!RFZ{gwT;*#E-{KgeN6-1DnRxMZoxMC7%r)~nhCu@oVNDxK zUhL8H6c=Vi44-nUHvG`)CpArPEaMx%(Xy%~tKXq9R};{;GT$YeS{E(_%F+0;Ary5w zg3AR%ggjl9C60KyBKu5`MDAciuOE2LbPpT<6bGJUCH-U_5bgAf2Bd{w%UR;5{|H&+ zLc;iXTKe^Vg3J#UO5inHF%PK(riYKD`nRvB`gN99Z060YXYGZKM8tD0=fk8B+x`#m zRhvr0??=o-R25f@r&4OCR=Q=jB=Wz^+70E_d=p1x84LzVT1&I@dSW~H#b@Cij1 z;@Yw5?>4N7hbDcQ4q$DBnlgX#%3MS<%t69hWlt+wiHk*cPGVpmh06 z?A%z9%$~d3BI-vJXgmW2)H@PRj4WZ{J!L}T8!m@8%ZvO-MFbI=O<(~xH6+VG>Mt$v zfrXjkL-Q24&^(tKkx@=A&``h3gCEKmeLZU%jiAMz1eiHoM4aNcgyjr;3Mhfu39w^) z%hj35K&F_M1yvTd%fcyAwLkdf7v+{>PPheMqVgl%!Bh#`iVLom7-p{S7=-xQgxE7i zAs@3%HycVUFgT={BRS^fP&h2t2LF6W-(gl5AhM_#&s8U;}?ltESRmQumr{i77s8(g+tDH+HKcDr7etxgM zs{pq@JIHPVpsHm-bnp}bKXqMVvPQu=2%m(zM1rVH;}e=ayZ2l>YL7yTB<8PEJK9t! zSUzMr7j8d1nyyu;I&CfirKkxbDtsPijRC;rozi_hFzD6uLm8Kn2>Ap#?>6<)Xb#F75cAV^h>Fmxb!g z*ro(npr>@?5}vYY7KNx*ICqGYtUhtV-xil#6pwVK5$EsuM+Q zIyLn9CgY-m&DlKb6E1T+?>N2bs4$l)1J!6a+6iQi2BS>^TGa>X8Rkq+V;oHi^}V#?Jyx+AO@y%)($H z-7sP6jWG70XjWzU3d%0L+ES-J)#=zs#>`y==wO-PCnV&4;?PiiTMrwitN!IZuQHtMG(5F`wF#SAt((D;>BfZ!+A<@Hl1+Xi&AwRXf!{Nh-*3b%N zPve)l`hR^mqtJ7JLp0j7+G&0G)9a~hwu0uV_PkUqvmGaaa?00bH23jj^O`(c`5K_u z8hb^&_PMS-AYkyW!|RlpojKM{@u;EGsmWWqh4^mK@J*JETt2Y9LM{8&{5# zvPrE_W`N(nd0ajLbnAb(-mc&dj%=z0!i97sf0WzXUrpVeHObwcCZEA|{53p(V~7|m zV2>lxYb0UXYvqv*@)L2e;?&4J6?rtw^KQ(PkXW9Xn?1*?-cF0LcTv8gK+upb3}n6g z8v`Zc?tckX8I1sMv6`j<~F8(uWGLZ$-fM=kSDPX z{R0$g4YpGu6bS_Z&`p6w@XBZ=>&n+3Rwb03$e}w1zn$b4lBjvUy!NMw$O^I(YJZ*w z%~FJ~;Q*Dkjt1+L7`3`tz(TT5J53eNrX|Qa86|1!l1#ZnRJu@5bkJRsJ9qF8YON=g z3e_{JFyO_wNNbzNA6E1Kk(m2Ek0Cc0MA{==S3|dX>$Pt!j8t!p?u~t38D8Y;!FNiI=t9=zT7u zWP*`GzAx&~0Nl~=Lp(TyFaF~ng~EHzM2F$KxmSwt-_02#2YuJSCYA2r7yqhw(r|&JmW=m0N3+uR4=NmdeN8ElC;u$(2HD4X26Bd{8Nt zSFoLH{P6)Z^O%oRi6XBO;NDVyl&4Yb-bKDIP4br4R2iWYQQB*wJo zOWZcHz4D(GGHQ?YC*?rhvN&h+EhNN4N~1s9kIiFIrCaUz6zSL|se9VV z2h#PWo;V#%xjRY$&L4Cx8ze?}QMAHzkt$@Q(@B@C{6Zok&%7w^2CY&1_6N7f_Y$Ei zp5(H|Ich-;yjK}g46@d|XRkPECBqYmOvX7-s-uN2?%rF^4f8KHz(+47Y!z z!qKQALz>U-fC#|K_7Q*gxB<$K2p!pxZXE6u+ib)gcW`dlMii6Ao(5Z{=KO zCpe-_pas6}RaeXF&xf>gDhjx*4Zg;Qan${feRLJIUFp1UOUs|)zXi*|z08^~UYxt=7Pt*FhhnQ_M24B9z1_Q{j%fuL&qP z?npusuP%zS4|;#laT3B$A95YvEY`GeI9J!j1vTWI|7y|(Z%8r?stUO(iDjxe=2Rd^ zAsEBJZF5y?>yG(+O;tU`*Cxt40+px(7EZ%16mqRnVlZnmY8&E6Fzx7p8A{PQ5ED?W z)JW%NGo?CRUoSIwB1~5|#L1H0$wVBHUv@wwd z+=m_SCN%+qI@IP&^ocqQcihjVWziCJv9-_S!wi2BXV68+hij(Y+Pcd!g%#H+J08ylqNRSemSh*xI z|CN`jrN0L}pX8Wr2yHR4k-s1FiO&uYny&V-NUp)j7##`XiZg;_9u|AC@TM4Yqj#q$ zbFRYV!;*Bt49{TE%ok(FJ3vLeuD-=W$OH96dDsh0C@rw^yam|^N-6ff}f_YHBNz{wfAZ0%t z;KUp!aEZb>G-l~6mvD96{p(#Klk5-2p-F6A22}eR!WU&soe$FB7wH+eFj10=!AcoFa#N3_rPs%9B1Oyt zKXELOP10H2*8nb0k`_UU_+FzPgsi3I%brCy(+na|s;xv1r=Z3b)%1+C*Kz2YMhXK# z5yL|u7VndkRLBn(JUUQ*cL-Wm+(uK-kdy*WUF@(Rxp#s;;&w&XgS93 zMtC)qYRtv13MCcmVMH};Fzu9CXKbAcFWx`!yMqR0OW z-#xVhC^0wnxN?rR^@t744Ycsn-<2CA%1Z$GzzLI=7qrcq9`pAFnA19b+y2bt02b;2w*7OJldJCz>JEC8 zXDK{b8!IdA&!a+s4xb*$$>>9~t|7G--#7DjMRvbmIgivP5Tqm!Jw-Vxr654L5;~kq z;K*ZuLbmbNoWF4~Adbyoj-PR)57(#*=yfZ}EW_HFIACxyurFk;u-x>^kO;<64t=UbmLWXbD>~WG5ZF7=eaPLbpUgp8>_2)ufSovk$LPTpA zf_{Z%Ffr=4pYq)Ly*KzQTnX^Ye}Nuv1$NZHkMW%c>u+>_o#VKd@zT4MZC_%itKp$i zQ(WL_ig?TL*R8|JYKeGj@#Eyz6<~$Tx0*ItFO;a@EDOA$hIG0l2`71c z_i$Z<&F5~z?$e87K33hEy`i!Q{+Y@(I*<(CR{DL_;vuv(U@O~U#tGYb%bw=eg(vID z(>)))zvGJ3fWr)iBDTH~bUg^ma=8M9@}{D~C8xZiLwB;K)Cu9xLEGOlsztmLTd^N)BqS~@7R z#eL3X$68{-j~yA)*11!jQc5#7MklHTAai*g!3{u$0Ti$}?Lj(@S2i>}agPU7h2160 z4CD%NMZZfgH@RNPN%RQ+n$MA{P3|e)fzH&`OnzT|`3c^eYZ5bDM&zL4zX# z29(uG?j?$U-L{Y@AM9lWII!%5M;lQi0@-zdhr6IYZ-)vio6Mm{Ee9C2)z>Gty%iX~ zeg%gBr#`W{0YUvSAXmW*B+ve?KBThX#5BENTH##{y|i1<;09}S~Di{N@-kEPnc?YCnhVFQM zVT!-Ts5%o-j!OQaE|r_>MKY}X0LEyBdWkb;JCrT{#eG|%vl2AjK`+Vka5Jrj2;3*iVQke1QU zf+d!V$==P1(vER#x8Ea74630&0#^wU_{J`0&v`C5E3>`AbuReO{#rv9n-2KaW)n<% zK){T$zA_UKn;hK9(Qt2%vu|Z16Z84a2mhz7yGVo1kOcw&&`0vWmo$HO8vb3|=*e@+;OT5!zPWO(Is)CT30&3|G?)BE0>HJsQ zgUjHZDttFM6~H;p_9ugJB`LAJl%Te+>P-=So|c#z2z*t>fxq}QnF-(=oryKKQNw|_ zaQa30_UQ^r)w3kF>E5{Dg{nzw`-A?zeRImDq3~YK^qgW1;8})y2cEFQGpqy_&BS?i z4#AQU;lUnmBcJi0@+&n>(ncouN%8hM5#4~fpFs%AyOct0(;m`+J}aQGV78_(J*GF< zxQ%&^O@lia%@LrXGFqI$5RoA`J?->FyfyZP0>h?s!=XiUz3HwF;sps|Kz|Sh(tUT3 z{PDOfAxShusiiT|m^i`s`-d5B&YSk4G_)nhP9=8CZK0*M3#gzA9GDGPW|2Tce-sPu zE(72;$d?a$yT5ooNOFhYDoKHHxo7F-O4ZQmCL(wU+-XUYw%40TYCPSN?r`rUwXKGN*J@A zt2+Yy>l&w4Y^)iz7vX2#tGSsYldod5Pj~n`q^)j6a$pK z8RXYjE!f(;HqJS`GoSZ3shDZ}D$BhRYrD-G>au$mqrkO~Hh^jK(qbNgpU&~|Vz|bm zI~o1iGQHLreY%!lyXc)DWkHval477w;2U5)@MqgBPS$NL;dGk#RkJz3Mxf0o@BM#QY!cV{)Izc$DJQ_6`BnnxjRrJFT>GVBNNEUTd!P0g%6? zC;Tg=?|i#jke5y3)9z(|`@6w8m#~`8(rvLn#sM_zs<6(^<5~co&vT4hqF4$m6i)X3 zi93v8DdzZ-M=nWjNFRrK7lg6!H2F7uq3&6Zl4 z6C%}3=2YyxCVx0axmH_jYA|6ZY-HP?gZ~X;!U|NHk${^s5lmK+BbmloDt(4*8JFHm z(P~4Z99@eyM=7(QTvTU3L0BPQrgO2mRlX_Tl=WTO{4K8$h53P_sq%|Hdb-YprK0LtpZt3B-a;_DT7G`t>uk2F}%%(_3!iv0_`vP%`i7E^Lwc&4iz3 zpYfq$2TqVIHoAV>N1qzs#1q#PKf#4@&R-qEP+y0K`Dh*wI$IeOsG*9q{ z-VR={OW)9sge?CZMTd3h{u8lL2^)U(6!af!8M{B4^ujGHQcSIyg34uycpD`jb1lKb z`a-g9Lp2!kCq)`x!kW=%$7CX@HUkwAkXJJ;(Ug4CWi6&)$Eb6r`oA(l!ZfGf2ImWw z6msP4z31g+qq;?KV}8k^cc<;Rw{QDALY;*_E|2s-#%4GjY+pBV{v*&D+^^60e*^6^ z`Twr|e@`3ZUw!6_{}pJ}VUW*h*GqY74}X)hS_c+i0=$VxHdev@EGJHu1i#-tj!VLR zNr?IzXpee#AHuk~Q?Ie_2B+Cb>Z<9{KnsZ0x$Lc>=c5imwWBZKua9N6n}dXzMT6wI z>uu|5eR01&Z0YLtn?vTC6ePc#{I2qBfb&JMA) zfo~K3cr8bJW`u1b@XO-MV^njeYC64OE!Bylq1T13iT(q9-t0V>JTCYW1dKG{|hSdC$U&ojxWrT!vp_gDeD4xx{_Djao7fHW9EihSG=YR2m3?gkvT9B=GNl?&AhCr?7t9$+BeVcW-XO{-|& zZ}&|n)SkyjLjtOk^J6M;+4f$E_g{8=T+3aYGVF&rr=$1z6hG}=rn0HOEIvs(eU zUHm|af@Q_f$KfFX@r1w7f=(jlgt8EAe$&}<^MouMTBc++vpe`_soQFIY12wO&agiD z8A<-lvl7;&B(_w4@oc>>WtmVRLFlXuxJWS(5*JSTjNmMzh;Ole@(~)i2}QQQqWJ?T z?BO%o5M8!n(NyqUc2tj6K}|Dse@>bp#uRuk@F z*cTJ|szN@aD7h5>B@4w?Q)S!|6i{W-*Tp+n9e<8C3oYq}q<1TUAQ$Rst+x>>s42D+ z&#^X1ZNMD_fnZlp)XkhXoVe!CMG#_B9W$c2*B(Qh`JHf|Q^^l`hZVe+=>a^Psvdw3 z{<|slzyp3dS@QyIgURaY8z`|4=xaBKlb0}nII8<%r+#MaAbDTTk4rcqkyx-%Z(OkBIqc|{y2IAEwBSeNdQZ{=Ar*P^I^G){rz^|7; z;;;bbOSR_b*%X=!;i22w;_txjwm{gdx%|v#7Y8ECdPFjHz-*o3jw&$UYx__~d@mL% z3N*>}H^s8NX=2Z<2Gz_vOC?OT+;8);)su>cETNn~dk#1M$wqVDVT9nxuySD6U9t@i zK8t_F7IjW&II|uOw|rGX%m}jkAaTmFPdT*^PS_AvpIb94E!4t9zs&AE{+6E!i>#JL z;^UkSl}zR)QM^Z&m6v7_TXwUgG6w()e}q*@TjJ!wA5(>V$7Nvp_yd1|xa;%oH0+uY znth=VtNpZ^tcai|drH!LQy@8hQx9cCq#lzHE)18Jq34{`fnwGd-B;HrwT1xLx-xId z>I?*QW$KNKMCwdL7TN2;)8yi)mwN42HO&H#JBiKEKicqK;d5g znRYV9NlskGHI{^t4OBp5i~eM!0SsagJ-58XYdSl=c!(?<;@0#!cZ8~Fn4044d|Vk{ zx@PQl?!JMdx%^~|_G=Ao&97H#@SIDbSMj8Hx*8qD$ob)91p?~)s5iq3R=R?DyN)73 z+lNo*tu`M=e!FP8H9n$x+qr*O@z3G>txaQb`Ssc?BMw=HV9x?n0n6u%{8?{KCF$M( zX`E_YlwS-9wiM0}=$e9C!`vSvSl6_1M2jk=dpOk07FKuUp zPo$k{X*Rr1t^yU|wF1*3>(kpVm1EuT=~{s8*4J+guZqzsJgfU`2(>1HTy)Dpnwm8Ok_pn6qSPh_TN$5x=5-s{=FbN!>$_5T5^|1Men1FZi6*8c$Oe}MJ> zc3}Nm&i(_e|NSX`OU_4G_&2at{xh&L{R>#t9oN|reYVR#;I)>xCzg`677Y!M*EwE{ta{dgH!zP#H26^dzVE-ofG)!zh2;aL4e@N`}G7pGe|8mi0U zFz7^@J?ENeG>Ew;BMwJC5BDcd*He@V#US@VaaLWG*7#z-zAe~Mdi5W9w2}#O&|%09 zX;Bx+3Wv4x@uLw(!Z|kysPxS{gk(?|2CL$rt$=$R=Wd%e3$wx(8367;{#iyp@4MKK zyt~wlAhYiZ$ISC4C_#*c0l^O_sf>ka?1^?SqkTYi4Ath)t+VO zzQ|)whyN~@08i2EBR$3#U&!8S=J5e-+(!ZTQNueqrbJSTxfp=GQb*uU0o>Fn*}gq< z44!Q3l`H2GnGD&e4sE}z?5;?qCyJUBcL?qPa zR*%+=-_0sr?tBs zY_4DD_+}w4CP&cZ*>U;08@8V!2>l5GTc~=86Zt-HGQ66822Qj@tN{ zAZ0|O%wm(9jIj1Jrmo!}ei({MY7CRp%aCtRbuPoJvs7dbuU?o~oZq%7dxL=@c0Qt# z|Lxu6HiotrReRZ|SVzKx*HpnX`P)>zkOs_IzHT>LOSS>9fXE|QBf5Va(Z4Q`_T>N^ zO*dW(V}`p?t6_G_SA5klU0A=4>M-4lic!()@y2&Y>j<&WO*Q>lrR^|iJ9UaE_7P~~ z4uSq63=m!5K3@(f0q)Hpe=XKUv9jVTKDhM>O)1yP+6h0wS9RnlLf1goUN}VoNW%+` zJ`0vJ8n=~?B?uZoR)Odz=Mz1hKXWauWr{gzK&B>~$CL)ARdVbufDIE+>+A8l&f^Dz z7oEGl!?1w8qMoxGg9W$x(YJ0f1qF@2f&WKvT>_zw2B5UZP^Z{$D}p4Kr5S`gxaX20 z*E~9=$GC-m9#fJBCWCp74dMVWbX&an3ET!SMxZ_PNH5pYdLJ=g7D{g)yp7+6dMK4j zBKfTakCg9sAi=u_;43N*#JmAe4;)zvWynrJO4^84FP{E4tIkw<#&YLhg|9ya2(bVD zdXohQtqJNBaEgnc#2`4m0w9V#y56Z{C0pdV-M~M4icynx)VfLb#}fG<>YB^K=m64n z+d*N^_0-7}akP5~zhrUf+P)sL-wB#OnSg8yT;brk=Q*xCmhKdohW}ufkAiF3T&7xWu%;;Gkl(|O|_M<{>ra`qzJpphRx8bT@cW!{?3+K*W=Zz$cXwi zoF1Wg$<6X7fEa}gcDFq%1Pk?IM6smJv{iq8}1Aef0RRnT? zlkR-Kh;u(8vah2(!xXK~;L5r>El#YmdnmnQICx68GMqoiJF0vRhWn4C-JfbP zZ^OX}!vcRkI5@z)qCP!k+>gGLg})}|$791z>Mn@LobRCRM4+YlVf+H6Z=xvLedXoH zd7D`cJXlSU!g$X&u!M7qNtsRKyiyxu`sjZYzCnLB8&Gm}o8)TIkn01%2WkL}T=~;s zLBC)3r*bBj!VX!+7pVoUj5K}B3OxVH+wD2rgvIq=$wIJeb1|AOUHG%7_Vi7uV|?PK`vPlmK?mZC;(L6;1NlGgiR6XLiZA*k- zHv#)=sw2AaYp>-zEaMgh^{~=&z!B1LIg8Fh<}jTF81S&1hfH99bv28?hqP(O4<5^= zd+FA;%_t75nUjtymICOGifh~WTcrwkzB$C}J8`l{ZkFvo361=06WI1AUYt?!68Pd`jQ2pIv4SRn z=IMA^Vf}ewC^2?_=;E5c{dei|A8`E-xc&!R{{yc7w}b27a`qo^{cmus z3WCa(Bm= z=nIs+yLw7!*qTPSg}yTja_6HL^aksjAgw_LQk zbxRMniQA|{>EJSErGI&?%Ic9eO&gJ|-3mi#9_43;KfsPXvK*QA*jDc&`a#FJ71J}GZ4c$ zf{PeMNaQx}DmcUTQT9@$F9BLvtQ>R_6t>Q+*ArE1U78Jg;Lm|SH#{v}aiIH# z8GCTx68yJwsH~QtMFqDItym9QyVfrCKD4F#C6qc}9VURpd16-bypV_vMB}cx54z%C_wf|L zDV%XgzlPZ}0&`$siI1j1&N*~4-B>yIzSl!t#AHXA-IW`kRhmcyf^-f{Ifiu}U|$B2 z^y=;QBL{ZbRjo$Y&KncndvBPDI!GDHGKQpdN7i!*&q)CcUI7{hIQ-jb6*~OcjyJZj ziteKL^BY|u2;0EvP}x&W1t}>72>xVRSQBy6nB9Dhw(wfFU(CjJ zWd$5$B&~%xzg$ZdC4QYGb}ga7KD`lsr9bBfqM+;HiEVLM%444#LRvRTR<1l?==3Rk z^=RS(iSQBt?2mPrF9H+=cEOCgmaZXNE&BSuY<)UTBs*Ap;HCL)OdNygCh5AQ{>y2V z6UK8rBKnup>Q;{l2XMH2K^zmXyWnVYYkm|I$?hHl9!>8i7Q1 zt2`5pAqwz@q_BVfc3R=@F8|AEfi+Z#Skbjk}hSK~`KoJE`a{)=9lzv)#uvqZY7|1;g> zt8)5pdJT_ZQrQ``gsJ=6X`QI_g#UJ0M|_Rc&W%C(K-gX~1vk2S|$ zS+Z{_I}^s1$ZqU3w(OE6vSpVTCrgGz3uBLxHCrJ^wro+B64|%j$EY)U4(~btzV9dV z$Mf;w`hMoR=AP$ye%Eu~zZ+exB#LZh4$;VwE?P-lF)CwI9XdstVMlvcA}igdb3tuX znp+`oDzBc6q`1(we_Z8q*<(7I=A5vUyNp{XC68yG)vm#bJT5OdTr)&sEZMjsa_);S z=UFVJA5C0I3!?p_sHm=d{Q3s1Q^ZVQ$_-W>hx-PUb7!J2tR=GJ@&6U5%b^hc~gNK6eD!34OJZ?DUm$zEq?! zJ>pLVstgr^Do-q=x9Q|F)#(;fe{1fKu=*q<`mU8t<#$sZLOvW%E!sJyT8MBO+FVX_ z`CbxEMQx9|k=J8Or}7Hi;;_P?kC3<>P6D1GWd@oJ@d?(pt;N&u$e77)2GxuU5NWS( znW48g;*a7#+lXgiEEk_xZXS0-1a74=(aN!ewXJfGGhNr-n3tSP`DS3TC9K6O2bhKA zvIsc~o4zARgN!~RsJ>}9IlXhk=j3KV>9LkX$vg5b{aizAb0SwWC4)k%pF4ldEtadg zTU<^aKiN-%GdXjfn97;{4emKl!djk zLoD6dsZ?YiEOtj(4bNU;Em*%GSM%<+`&nVFCToHrlIS}J36jCo#mMwWt2P}Uc27YLWX|k8pB1|K)yyl^??~pMk|`!{Mf8HKVFn`41Tc*!KY7cO3Dka zz6n0U+^Xy?O1>83_a1u9kR>v_m)#z7Nv+&A=AdB7h+#T9lzBJqeNa_lsLeSZV^eRl z*-e-!*;%5`=j-T~o+;>NiFehP!SY_$`)8puCPTAR$gKmX*8RhC*Y7tl zzvSyL`T9$~{*tf%>+%(II{PJG|B|mXj|yaJfVSpIU>fo7dlRd7y(7Q7|LvJcVm$yc zR+6Ey9VEas>(Ke&dCHY5-M*CZC{x8Re9Jf~@XZkCfLxyT z5bxq>MwkvQTMGk%u+P3iq`8;&2)75V%Dig*1+q=w%KT0d%T}!+iXbJF#GkM8s6Ex6 zOxw$+oQ-R{{bw_=Zpsr~oDLdko!RWS`D-t)Z$$BGUR03jKdvYoKDTxE)1arI$CoLw zc&OZ|q?omqjx)!tRMbL}=9!;`>rAy|&Zr0I7n&W|x@FE~&g}vIQUe$le9!)`<@I~H z?_Xq($^L0VM**%7neuAzJgm4pgF#6VHKEL3QS%WmRC9{ZcA$GHvUdCQ%}lncbbVF% zPA^(suRd2wI+7vj2PbYb5EVD|);NnIZ^=cG6Wy|NWI}S1i(9_c|7y4n#cT3tFqt>x zh_og*iN5xLI{lV1d|IX-ZEs93gc3uy=15vW3tEaxNnVlVo2HJ#9ErkxiO0Ra@~%q{ zifSP2=G#Y9#cCs9sCr5&N(HEPNYX0tNSh9qA#7eYa#|)*i)Gz|Wt}^=*MsFjc(|`m z)eP%F3x}>V4h3}sHHigA1n>{Levsd%+V52ayCND>kHWY*^#;J#VRtl4UFn%SuP8Pg z!ZxShM@Te{CQpaIxInqNf}(p8r4lP#|1ChyT_zwm|7<)btjxTMh1y2Ts-@&cY};%- z70-SCSbiO4(vu{}u+8cTMrDJ`swpri!#-;@do4*z6^+7-XumG7UPO+)A$Q!*AiW=}yPebvp#W=M8QLsH;Q48a^_QNOr z>mw{{E+Fwzq^1nH(R4_)Rp-sZuLuG%X_Qn9!J_@#`HVij4zIaUC!4YRA}JwL_HLdz zp2L3>d;LtaMxMq8JbKgZOI16lvQ9$DTk ztN&OJOq1}(@NmFbW{1>-bk%5gzo5_2qzF0x$Yd4LqCGouQKnYO3=TG7dge@GQ-Mxi*6D1Ca#@7q9BRqw<(=& z((Jc)g5$%e8hsfg33X>uxi2(bON($BDbq>~6wVwG?Dcsa_o|-d%~iEt|K_8eHnc2I zD@nH4oRX8Jvt@edl9!XovL9B9y$eJVx%qyZt4dVRCB@zO^m(T~ATPPJF_uOgF?X zMhZ8!LQ(_RFJI{)Oes;FrbDx`y|;IIU9Xyr4m8U}YrY&N@;KtvX}lb+HQzv(C)1pH ze^``5;;lsI*uCjb%hsFc*y*U0CoIi1%#hQ9PFH*#k+PaLN3*#?3+?%=eG<+LM%28l zu5ig0m>2TVoe|A|n;uUW(rRy%zMp0z5I~-pRnBhjd*$+R_hh!Q&OGDFjY+z0oJxE* zLO8|yg|vL5=dtxt&}~B#qBWi`+M_w2PgHvPiIVzDeVKlqhsR2P)Z`qEIicG(&!pLT zijf1qDj!LFUuXblQEQ+S#{hR`IKm3%hHwE)B@k}byR`uJ75HV!43y44!3K88I&` z@QAcigh7n-bf&LHntrvGPzkzf3^mpJO$SXFMcY5A#O}bwhxZCqP$z*e_JzawPQEVM z^`Q;@#W{^Sx|@Gz*0v0Jk%DcNk$&7-Qk1n?SBCBisd z1sqO0TcH@9onecQH6;#$Vj5JUiTq)&v=%mdCZGnQ zdR4>8kR(nWL5u6vt#FFS^dge86`Eh{h8{j1{Zn?``4M%?;C94U6k`#InpM+T3JZkbZ)r@V`1NdMysh_d67EBVPg>5wSLq4 z2%PxrCVl^|9sl1?*A{BTlo7xfJO(VBquf6REnHlF4MCt}-+zz^=MjT~WH;vVHdx7q z86}5dWI=_Nss>AsEpQUbY&B3;S;ZVT3*+bdV#~VT^!v`ly!Z3oP*fXck}_M0>uQ8W zOlDK#A7ON)TS@kQJ8W`|20wwgbV2AG=dJ7G%4YsL=}c5`x9j*SM+z08Nf&jpowI~1 z%q1UpHw-b1i_Kd*{boBRHgNkW?#l&Nkc9h+d#p8-Gb>+&OT_ec&bkKene z#ax=ff#AI^u%TywMjB}63vlqy&ivR=2&4|!Z0c~IelQ2@&W?iD{aUcTx^dFmsqUKMC-83*N;NPc#Z?K<$N#j7m;c4_--cQ&|<3I$s z3xrJr&jf?`r=AcvD{x~43&b(S0RQ^R9@1t31HoMhERe=*f076GD8MkVrpLlK%nyNK z6+RdS7Q|SXh{Yi=tULz8z-kf;Q?xt;hSio}7+8v7VR}}3u>Hae9R0I;!NvmDOgIGc nH!TAW|M|vqfB1yWzVPq2p)e>u(0zeGSb*0GaCObL-~H`B&i3)a literal 0 HcmV?d00001 diff --git a/img/efficient_compaction_blocksize.PNG b/img/efficient_compaction_blocksize.PNG new file mode 100644 index 0000000000000000000000000000000000000000..fe70fed0c3f30afcc7cefa20fd4e9ad6de177f8b GIT binary patch literal 14759 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 Mr(J5k4!Zfj0Dj52RR910 literal 0 HcmV?d00001 diff --git a/img/example-1.png b/img/example-1.png deleted file mode 100644 index 28633a6f8a8aa5998292a71f6baa4a88bef921f1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9374 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 yXM*o; zkra&|mJhMFjY(E>7vZ^iOiZ}Ow^zD+*H?X8Is0rkY&+7z5TwXigC|3%-t}&AD_69a zv!nf51g~e!;7i$OOPY<3%v+P16Sm6L9-g%UOt`KX2RLw?N4;;r!rZNVjch_Go;NQyLj2lK2KQDdR?-rET9%(~#6)M_S3MIAKpO>^=45i(+i}Z0;8a zaX6M(5!TEKU>z@&HvQEELT86wY}tW{!u}u-Qb*^VSePtVwoJ&KUsRS6w_S=NV7d!6 zgb^_pt7vOPtrrJ{IaRQ~`zk@r_531h_1T0#DyXFUolIj z#$9tkH1->O-_*lhh>`$IewvB-JJsB@AqZj=SO$~VYQTvU6{-gqqj?an7LB;d`yr`M zPu@-WO}}L|bI|w*Zg2!9)xtL8&23JE+Q}L=OTLOp#Y{+HI_24ar1+$eF@&N!ST19L z00(>6%2_&jm&oC=iJPZHdtzhW;hg04^T79Hz(Q@*7K|kmf2O?-exJhEO?kS6cvbX~19UVGa z2?Q&FyLRdA;75RbmFv$5>U{#l1#9}t>h2v``538|J&|)61JVG;mGuDhb5>Z-c)Xto zI~&`M2J8&fl4ZZ2g~T*^=crd9%M|s|&)*f2hFbVzA#oxiaQK*$sPDbwc$Hncr7sgg z$~wuT*4lU5@2aZK{0GL1KFEUk{po+~aL4uNWgp!OCPCW2Z^jmsQiKRfomH4F_lbfq zE4V8?SyH81Kw*RL?=B4Cc&0b{kx9a0pwvBpx-HG9xg0A~BLnvK5 zT=fp;L8D?;M<}3)`9cWYyfDE0D3aM8hAD(W1g#H;0)EGR=t2^K^Gbt$izDcL<#-IO dm&@vTgIDB0_65s$vA{ro-y{_zs>BQe{|8&WFh&3X diff --git a/img/example-2.jpg b/img/example-2.jpg deleted file mode 100644 index 984c2fd27b511d7858dcc2a92bc8f55b78da7f46..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12627 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 diff --git a/img/figure-39-2.jpg b/img/figure-39-2.jpg deleted file mode 100644 index bc9f9da7434ce986e4aa12943aab6f3ea90298d3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 83463 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 b6Z`(((N{7v*GB)IygPQq>3Qe2{=W$Tq)}g? diff --git a/img/figure-39-4.jpg b/img/figure-39-4.jpg deleted file mode 100644 index 5888f20d204ffb4f2987ff7cb5edc5b521659b91..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 53943 zcmb5U1wd3?6F0t;(jC&$A>AM$-Q6A1Dcv9nDBa!NT_OldNOyO4w}8O63;3w-`@G-( z``^8L_nbL%X6DrI%$&V?Uaq#e-lhRQ7&E(Ddd)Gv2E$&_xF63hxBjz005VZl}QLJ3(OvpGQ!}=wFyiU^%CxKowbd)>=RYu zzUKNkS(RXwKDjaYhanIh%>-Yc zHK>iNDLQP})%n;;31`I^)BY?hFv%qsTqdncV%0iQlV)YKr)w9RxRh5=%cXclJk(W# zg+8`D#%Rx_F;ui(Sp36Rt7ugk-HSwATJffoj_RXBrIqj}lE7*YO}t zN&xEd|GvPf%m`RG;$=?gQ7^yj45a_X!R>yu3(zOuNi}z%bGg4|rUvVm?(fb1n4bP$ zWVeV3&IdB^`O-vSePM@nC$k%9vqI^s*)#exizUQ%uVAVX)Mal?eZBaDCX3+BPsJ5k?Q=GGjH6i0Tw6bxEe#+f)wzyyImkGVI)I!0VFY+ew=?;>^;)M; zyD9v}b=|QMm=vez9rHmW{gmko6DJCAoIm?Kk0Um7Xiu2toTg?7 z8PgQ&AL`e%ohZSzwlOFb?bixX%k?jb$PTs7)XiWv_OBkVZZwgKQzt|aGuKRW>CZ43LG#%JIvWQpYuL%?L#UPkfTYXTwDGIZXad3y^IIBG+3Vic>Nr{ww&A~Xvu z@rF;!2!?z`5XHJ{;`@b@ER9nnuY^Dc-zlxI?ziFrrDM4tiN(j4ktz8#y1nEz98IxV{^HIeT)(t~eiiFwVQup47wFhZ z^lbVtcuK-zteDe|H+m90jfIWdym(%_x^ue4LII#OE}BSH^1m4uam_m}=f+xoelG{$ zmKzM9-sG3)QxWlZ++kPb(&oNAZd*%)IT_n^~8S~d(c!r;`4p9%vsdjkC zB&1EczeI07gFo=>(O{nhpU;KBUC>jW=L){kr8DWMKT*ulWBhXQa&b!yLUCLYXF-oW z<*Mgp7`xy_xE>P0ChA`*w}* zGs#o5E*sW~%DbcFRlO2laNyn9c{bd*Wue5K3|HKItGjXJlIgf)k_;wpzj-Wj42OpRcUZjdQmX^4=Df>~h=3xPXeAduPWBUR0C z8B8ay=BLv=53W5CYib##DY~Ih!W>;ESGdyRhjCnHa!~Hc_lQLi(op@O&ac&!w_6F^ zt?w_0b_?DW=Kdn;a5Gk_j`Y|@tZ})b%Gz4%$=0)K#u=y%OEfz7Eb8{5I86tW@hK4! zE2Sa}614v9`V9eQk8SwE6mZU)mqkp)+H~4hLn$lrcsE~^m3rqzlyF0|V9rsJc3#D+ zoccp})JIsN;YiDC__r`^I+z!!%H!Pu=FSW+CpF_vl*uffKbZ40%!`>sJ#D*;Ih(GM z7Z-_RePo@+s@#G4gs;u4%CM++rY+cAc#Ym~-Fx`@1uvH}ABLyIH)=mcBgt>+8xA2) zj1(O)4J|o&Bqj|f>6x=w)ncW|4cjMPe9|!zvZA~UfugjK7SlGFqR_tz$+fFiiuH{-n8kjq#dG92Z?z+*0yf5)oMMt#CmY0daENotM^0N~cMxem2!Rw=a_CJB!! zQl{yD8?$Aev-ZVdyQioz)SJFq1uqFA?Pw^}WJ4xYMJ7RQfi0rvYAdE^cL8tSKZ8@d z1pMe~MliK#ED+lhhjY@+Pk($%zQ^3W2$3M*83tEwa#>SKtctfpskx31-noBZzrpyH ztEV)7x6954T#I}WUK^!S18YC@qbp&1Z#TwXGxK1a8z#5^xcU=SN4K&Ut+G0x+vp==al}?zTOR$+dQmMN$)+JSWEup`iui|G~2j0 z6;Bh_y3E#b&t4bm1a?%4F|SMB77SWg#U-Y&sH4+v#Yg5gdfYl`cl%v~z4{kbNCZC( zlJau^fKc!mEDcgaw-P1go-!7=H0IL*^H^D3DmPG6cKH`H{3(Xp^-P;QS`H9GDpcW` zJP^4kiWE5}Jg7?J8fX_Ct4ASB>2F@8t7}ob7G1KnZr=5zzQ4o}D1h>W`$jt}bBL8I^%?1WGwS~x@FOfFF^xA6MfYrPnUF~^(W zrmqXC+ZmbzMmYm^L_Q z3cz!;w?~Wd;00!oOOT6@I^vz;;k^Js1~Bw=0J04FJ^-Wm9k_khCOEj=GhkTBhztM+ z2ZI2If`EVm#-2c>;1FPt08}(|WE809j7+S|EOHnOdPKw|q_4>Mg@l3eCNwZW1%m=l z(_LlWS*?NWX;km0*}$|9;%rY|?pG71bg4@IP2n1TA#G>C@h3?j#1F)2YXYQdE%!@E z#{H88)>|2tMEotz)&#LSa6~IU^iL9Ul;IJm@}rg*-?(MMcWJsLO_F&Y2MZ+wuM;U% z8JucFWsX8jb7-$Hyhid|jukIXo;u*cbEIBwrL2Huwx&gH&A+@lt3RDTD&>wCndfp2 zwh&fZ$Wq?kY{dCcap%&Q0kuZE_}t-$ zFqF_{$zdVv#MbA z?=&lzwm~$Mqud7lzbQD-D$z+O4`m$f$-p85%>bmQ}^{^P?h@aYpIp0m` z!l9A^DHjrY^PhDf{k(O{ekuxu5jg#nNbQtJe@#ECH#w&T2mM2{k)*wP*5KpRFqd?V zjt8gpr^f~q&_eB!=w(m<8k-@Yea}AWy%lK9k#$b+ruspgI@Kv-hnDQS$|=m|H)LZs zZ>`za<63XSPP@L==**b)n3}CiiaoKL$JTtVG^61RDtn|@YqqtwV?Jb$t<>>ugbuA) zPHqaS{;v2kcIcl9_wu3l!l|uFUV?=FqjA|aFa@L=*Stlw;lYAp`WMabs?KlJ5AFcv z(N+Bzmdo(QtywJ7coXK#;hp_@hMHxZ@ZfiVcP7=k`%0oSKQ#Glj86=pdW&>=5Za|W z-?J}kBFc*~ zI3>Ti4e%AONA{5=O0vXRw=al04c*L>9JTKKq)n?cg6(52jqRb%3GxGH9>>fT`id^$ z_fGdjm5s@JnXLHOOeJ|4(gc4f(F)PL2D=GprwJqWGG^URuG|Bx!&g< zGz`dLxnzNbo@}h@7kI+e%-gmO^5CWppa7b)c-hSNh?7wm5bz6O+Jb39rUO?S7>muf2eTjiU_=on3sG z7|C(9={#Rfb9C^n=Nhr)c4yJB8TXxoDT8KheE*DtCL{0~&Z|emolZbsZh>;rfzrux zr;DZkt$lm?I(W-|@)bF^p()WQv{E+14g}6Z25@U(FdUEBqtB7`PV|y2BfKe%<4q{W z#&g)xv!;D9B?HBe$qrn4K$rMdkDL*N z^NcM6kzZ=9{trQ|p6TBjTT^;m6yNx0wdehkaW4!53xf-&++~Ih`Ag5e2{GSJoDWsJ z769!&%+rW^K^NrDv;0G^>G5VOv9U1T8F*JPmvZy1+yPwP%5azm&s1VJE`F;`=!~a4 zkvb2$>3)0d4QH~q-SG_`ejJAZ^h%{F&n*X}|_L~yF zEdKk%l2H36OgE{r{-gf3AS17;7A(}~RtRhdI5v{)`#Cr8j&=+_1iN-{ucX?7b_@Gf z{=nf}M!fs7lTc7W>~ox9V2vI=87*{W%1~gPW0ihgyobV6kfbn8bne$6VJE;H1}F&! zUL}U{BT(XREpV?Xf?dB;eLGz9w+#d7?!KDv26cK7&;BJn>wt;6UB(yOQ|g<%#IzJ0>552rOf=TjKhE9^t$R1+@@lCjk#<0Bhsd-k<0T;j9V zm2*0I!Hq^}LIs;5w*Ff85d>->$cdPYP$%H;pz1GV9n^Tw1uHwj;52<+%5^) z$R3xwqm}1(;68T3zNvgI6O3;muqFxgU|4ogVB4UF3MSWDqv4PffV+tI`IXj{rNkVH zG6O9_JDIyhXTh!Uy&uyvr_mvBrF@3t_%^meuH~hAN3J%UTK+#es_BBJ1j~d&ra}B`-m2k|jcPGf7FHBt>lITuoAKrM5Yd zlO^lD5Lx<|1`Bpj3 z3$mW>ZaHrF@q*7Lf|0mr30_0$lscQLK45YTv)k?iB)VJ5TTDxcSQSr6`G#*z6reonaUF|6~O&rTyl_6u(+op)61^o4dJ;HhQ z7YE4-I)a@PGWjSzVRrz<0W!|)h7@`310$v?EX1(=2QSR>rk+eh&EkpS+u};}H=0JX z3Uaa}^I2_x^1yL>#C5+-T1XPIm52EGV3Rl_f8sHGP7ZaVNp6^C&9NAih@a6 zgHo-E!e*LkA^yg{xlj(xA4z|eNytp+MT=a3ZprPp*$8jJpK&z9gf#! zRW7Y_2am6rL7nfjy!>pc<-Vp*OMtt@vh9kD zkz14q?iE}wVqL|qfMFz}X%&;k39rkgMWjX6La^a7u$eXnctn3wb(J2MlKlu;ps)p^ zCQ7atk>wFdn6R`i!5tXQ!g6R!Yd9XyXJ311eM*Xzv_=qBi0&OK*nW%RwSyt+Dp14* zVUU!oe7{!jgR4FuGHl0wMSKhN_KxP`6^k=9+9hF+*=!5^amJ~&Wj%(AMPM-^GR1$K zMPd5Ff_sU_$StGOz;+w8qD)G>d}m?$GEKTbbD5e{IO9`xnUxDmmS?l@bJ{HQosVr! zIGxd_j@s*OPJvBX66HA2R4792#pUlDN(|B;!k$?EA)ANr<1r2)#7yM+D@?IBj4hQI z`4zR?#~}f@610DXDe*Pke}ys~?YW_Ug&^4K&sE9H{^DtC&-pt{d9J1E4aM8sX)@t_ zeF13zZNlnn_$)e!MW2g=*u9O#sMM0o?hIO}?W^WQpaZMW8hq(AZgS#fk5Y2Y8~5%g z5{w|Lw`ep4(%Nqg_seWcr-{nzq4lJ!A@vw=pWIM<;u3$$NGDgEn*O~KwN$UIX9Sia zUqIs%6Qf$~Bp6e7^w{JRne7X*2zc#qJsWB}8ZcgRSPWy$_sg$bn<`-50MMebyOh){ zY6EGB4YV?-D(kh>5Iz~_VT5)R+i7Jm=&`|eypAoFvLroxRx6oG88SH+1QQ;YFJhJd ztO3xqN+B0t?!A(xrh1v{BnG*pS05nJD}F>yUe&4922P51XpgOp@Z`B6YE11L^fj93 z$pl3*Rj}PwO%|L4AOzF}NEL`;;zA*zN7En=xt|5CNl#Gf8>;Yp$&BUH9k*aPmb;W` z%>;;B8pyt9ZD83PoIS%O)Tf)lC?`feCKk+kK^p6XDb%W&1p_Gu!LS2ItOutuEFIhS z)Z`1Iy&=wXW_niAOF%8{yGXx43ITu7Tk*47LC^q>Td|a4jM8IUQAd5zHt7+yJA&+1 z_VkdaWR(3Vcrf7A{pnmYYnf4>yG_tqJ+TnZdt+lfVqJA?pyaK=VA9-PUkzkPHG1hX zE{RipODWOnjuf1Cp+$UkrYu|2=(JqmG@{yEsmaoL|6*SboR#`=$M!cUc1*wka(;p6 zM}Ax+D~Z~XA_DR$iP8>(y4yFO{285h*etYzXsy;EE(@k?J}Qe#=Lkx+rC|38v86$_o`3RZY7XH1goXSae{FZJu?Wy+=I1k z`LIJq)L*PJ<#nl3BbOC^7?N$(yM75%RueO(O+q-b2~P{mXJH6-nSQSeqYmp>Xk6UG zI6@kG2neo;w{v^=^7ujz5G~NVX_?UP0J+rejU=b*v_ryQeGa=Y6^kAF$Cw?54#&T% z98L-4wak9f{lEmJOhX+=S!4Y?xwLFY#*YwFA^SrMBgA@bFAC%$FkBHNO>~YHAk#aFrO@?i3|-<%zj{AS(?l$z z+vm;;yLGBcAzM7OEIz@+^@~hwH8eUQzWMg`fJz(-UqEAuE*L?>BE?HP@|o$guP6<2 z7iJ{&Dk_tTC0sFDnRX|nR->F4F1FR%cYr5px>F4PaMa(v3Vpl-V5BLOmzzYy3fpWS zphy_Y5ZUsq@DSN(R%uxr^{Ka+2Z>${$#AMZb6fpbW%q_jUt_LR5WiJemI zD>&@Vhqh_MCmI3N?gGN9_4H2IW`R$>0*YBQ);Po2EZZV|@GIAoW9|S(4%@U)3~QBk z<>*Y?on=%{!NfGso0)l=50g~#<@d{q+oZhO+GG!@&Z<1XJ_k8>w+wzh-jdyxnAaC8 zp6OC*kj~Phw3t?oPrZ_-S+L|HfB-<5f9`GAQgv1?U}m`k_{kPw!G{p89hVaYfknU@ zEWI<0(8Y6KgrtFGg?-UYQXpyzg@dL=rhHYtYTr=x_$i0az5^_?!5+o~NZ)V>L-5=I ziWww;BX@YRt)c>dQhpu>fBQwCCEkj8wrE~)5D!5^v#}|}c#yxXDl7MS>{%Vo$b^=m z#UiIw{B`nE+R8lZ+mYP@1FT)d7i}MViuw%z5YP1pNN(ljTcda;!%UVo#@j>=^w(Tv z+#xC7eep5l714Km_cfKQdL^<4Eb?eQ{m)BR>fDA+U7Zgu(<3Fif zj>LpH78mD6n2)H@z!Ze5^y9J#s>CqCPV?5K43MpG?sp#Upe2hOj2B{bbPGa_zg7|w z5?$JuI0x>6La*F}P^v7;?*QMa_a|p)W@vOT@&TAU2zo=Oq5jCOm7I?s4uED#itn*M zEouJl?*0&8-#`%!=6UAa@f~2ZSaOFkJg)02Ej#jwZX;Qi*`TdHV~w_RQAGvKT98T% zZINkPRqUq`r}ndPgMOUPx$6-0s+tA{`r~X;-dTlgYIRxy&{9&8&5n|=HE)d7sta4B z=gQ_KIF&E(%ZxiNemJ;!>3GVNCz##==%YK-VocF@1-YPK8Qg4@P^E^WJgwmNb!Rqk z1;DSKO4OpQbeS1CJx;sE@qK0&M_ z$#8$}8v-*E6T``n(jt9^E5;=Lh=n>e6Xz9m7**hzKRpWQ%pd#-7zF6h|Na6)K?O%9 zf_TpOieFv;jY*%FK@U>S77E><;_&{&ANW=pAJ}+jB~1|V|Mfv+#FMp^Z2@V|4{1jX zO_B(Wr85*`q^_b2e83k`cUKk{QFj9Kf|xW#MB%`!zjBNrQ*k@zErOvsrf|gn^%0(Y z9+n$XjM4{*k~xITkMliPdA1W5M1f(I>zAn|`vx~tGPDu0wPZGLF& zav`8~yy*z!O?^57JRRT7`x&^ldn42=9AW7hNEpdS>LvCwiEd=Mx+jwmN9t3o-JiAz zEE`1qVQKjGRfJDnmA6r4WT(2U(UFG9c?pRciP~yNjmCW!Fz!rws3hFv-`nEP*Y&F( zK;{tvTmP(X^S%>+U13Z$02E*}guE;kDi*c1tXvvAhuP6pSBZQF&|gebNKL@TJf{fS z>=c>HYd4D%^8Vxn|EUsW+?lfZy^UT`Kbhf^y)qw1iD8*WD-L8V!tzy;3kB6rOac3Q zYl_5HE!4)LNg_b~Sk51&)3aPXuqUjJ3>vBX;X+jgb|AKjas(N0KBldS0PYIrd~VQ~cYx0q>qmIEB(f;o7h_gg3$p!1 zRwlybwYQfm%0FF?T?m>uxy9P*#=LRAS*yFze8FWo-&pb%Z(A-9#d@Cx^W9CEM$uqt zxtsQ90;TQT>)r?Tekuuyz`H^6O2!s zdYU`3?f~t?f4He4p7_@CGhe8qk6TKtVu) zgF!vM9D2WCpA+#jzS4(4V~{776JXLauzg&u;Goso|M%qokG1fS{gSzpD?Y|4^C3Da zv0t1}X2|i^0+)YWiKxH@AFYlllqpXM92z16q0CMz(R0>^De^D?|IC=bvW8AUr3n;D zk@vE@OoH-ED5WaNfPy-KPvDG{pz-azPpG2?0EyA+AWdzfPFkx0y3}n0_9**&nZONF z-4hqNsnf{T6HyiN2gNsDgaxyHadCdV$4UC2l25ue`PZ}sQVc3Ly+rN+LiCxR^omF- zH)we5l2?;AgtiPLWwN^nWqOj!&u9XKBPgTkAwdfTn7nT-WhEKvhdKq2fgp?6vMM*o z3iU1+F|S2>OG&&l)#AQZG{N0u$`cBz#X(kijU-3xMS~1U9jOTfb?89n9l*5RPj>mS zON{xXm*wO^mXQTGu&)L)C`U}$#}d@b_$6)r@;OwmYC=lI|EjDSf!k5UBRur)2#;?yZ#DP*+{jO^FlPgp6K1%_7{xgo&b z5j*eIi84n~Q4aJDKRl>VQ4WK6|1|e7pSqo#=EV>J=X$x}v4fO_Zt_kmy~YDBvB;;c_x zfju(YhPc}~IdAdMo)2>M;)hB3(WI>9`47xCvk(i*AHj_gxy}(r5DQB9_F)T0NjF(H z3SABp{i$|$fQ3`fgRlketi|?iQvJ3HhkkJ^SJH!wq@*>{O&61>DFOL~8`BNNuH>N8 zH~f$u$RD-u0KkSkQ5nJkQ*E}XA^IfRAZeP7;!NWGC?1#aPf1lv#f*>g zl8J_fqvv6^qo+lm$XHRbB;f;13_VEaKZaOVRugHVT7r^$>`gzi2 zG}9zhDIiV?2r!wg+10CgQq@%W#Dr7)+lW}A9;igfW`tXJfHNtX6%t-tRZDqWM;2HI zyfaid+#TU`U;u{1^#QttVUCt?evCpr*|;m>T%M_ybk-beu4*-_-Gn$cED_XFwMprI zG}fDF4yD0u6OsOBo<-d97QQ=uD(tLld-^nVBwA6KZGKYh5Yo2;2}+%^_L9a(Q%nqR z%`A&-fPa=OJFwYRhS>C*Qz+&0@PFN%E?wP|b#SqZM`a%RNy%ZcRPEF*V3DjI)lU~U zq=_@GV($<(L3{m#K5vSHL$=c+{d3Va zTZrKOtHYMPgq3e38Dg8%(rE+lD#?w=&cU$n3v_vd8iw)#UC=rVTE6@m|P}MF!xon zT3if4;c?Vdgg?MhQqryg%B|<2-a8%A;MV!*%{9V3*;`a&w*l9~6rgf(rZESlzcsjE zBFudKgORhzf2ZwBx|B&K$M7Jh{vY-J;6+cOVr?o_`*#V@O&<-PX;QcR!T;L`m~?gM zsMh+|3jbc(cgn6qwg>*22W6@RBKAK_d$dK~y9G^id(H1rC>P0YD1vqJ;U8@acF${Q+r5^F7_>J{t-5E(;Q0GYEu2XV7+O) z_4Uod6`mYSkuW^L%r|`^7ZlItM<|j%d`lWRs^h|LSitM@XH4o$_`wVUu#XkbW)nF5 zHO8q&7SxJlJq=2D&H}41eq|YI$4tL0HP-w=`h!EpIY)yIZ7tu1tw?Bg&=m-R2gS;H zO%*DsSM3_^JCE5c2=i)Vp=^_XDFSg?(o0k;sA>0X{EK>^uG3*!5PTi~vgi->pb8vU z%9%^N8vZBd)zW=WWB)_-V|JTnPbGNLFN^1~@@Pozps4mAlGM4YMXOs$=WqxmE2^a$Y~#r3V`4IQ*WAZ(2{RpTB~F+kB;dY> zt)=hA>KQDt+*n-U!=x&y2vj-Kc-zLAjv(-J7qxT|`bPGhzXU6qpzrC2OFr*kxarFn zGC+swytpB^#N!t_=yB`8&|vJ6_htFD@fb`=fR6Z{{iW|v^)rR{_c-Ox@y>>eG$Zya z?HkC?Ccr}$OnjCISO-agh+(3eXyE#EaQ;T?%b)F?cLx|_>;DB*p6IY#+oa^|<3aob zKe@N@NT6FC>iIx0rA^!-c1@XJ%#l>p4vcXl!!VKqHF(W{i+Sm_K0Alh#JSv(qF_M^ zE{Fbk@sV)Z#fi{ZNS~K{37OyQu}lyu2F)9mh26^-xyAZD+I+%FOMSrbw8bM%$rNX4 zo+Jj0Q6tH{dC68(|57p7)KCfrd-E0@dZN{IFAN^KPv1)_q1x<=NuXr1Hf=KB9}xa( zGQ?2bTwV|xE68)@01+8=DuPE}4(9ni61`2(k#kL%u02#_;zG87 zd@HpZ7KTPE<24TgR~LFf<^;^U_t@!gu;yh7wjV~+jEDIVjewX6L_Y=@zrBo$xY`f% zI@5%%;uX(i8Kr_?5#{7G?BA+k*?@lqf({fAbm-=xe1PZ#SLegxhK=gtT#Xa^H(5`+ z5e|HBQN|_%_a2fm(8S`ZL6rZNLYX(%RdVM3>JOp1dO?>(yP^1W>a}mYlSfJ5$o&;* zvQ++6g*1V`P%8f3lblC`9yLGeK}*^cIifd3!`>7cp88A2AAA9~@QDkm|Cq-}tkwxU z>iG0$ON+&@*;cpKAj%ePw$l(v37RMG04e>iWyN$lJz@>TN;cj4YWUU%Rjd8?W4qj+ znPlv6^`YHVzTk||9B%ni!p@K*W^w*&sNj(*yfPaj}FPO;ZSk0@Wea2r7YH zm_=v%!<;(NhJdAlc|`Mxv_-OZROtFsd;`(9U|kWUUBJX_{@8R|jdiJXjTlp6;(REVd4JJkjAomj)TkFtAk=G3&FP2Rz5LzGV@sG2A(OL|&< zV6#C0`-a_2lrJj*9(c|hElxThFMsv%z8T3I%yHcq*y!+LQVz{%iu$qQC95M2(a>+& z5(&?_;ZvS7M)y*!X}JPjTt*0EhfgnmHrWf42sU?ZFy>{`8}dpr9;pwWC7FBorI(o@ z%+W@k%MA#QJ0?%>Plx*qi3_9ROrI~nZ=Nae+8y}N z-oFI-b~MsJxAq|$$l#belzjt|pS?J^{-qFnhxkZ95~E+P5dSy};x$85x-@Dl1N^5LmR|bRo7*S<3_=ibe@>M{D(^-LD7*JLkGi}yI`D}h@D=RrVt zGpTl2j#3NsI>^cLAHbxjLU@y0ldJ3$`IH^*CCM^}dN_Ueg1tAaKh9QPovip0$a>^G ziiq*iV&(eM5qVt0syQqQl87R;4XuLpu{WbW{+spiv&A(OPdKnx_lAZaT85b4DRD`G zE0~Hv4DwzRrq8z(%bK+;xR!yE<+)R_iKZt+7n^4&066Qrr89YYb2<@DX3BT6Wc>6%-QW>>=X9+6$2bc7lB)tTRco zwV8*$YArFW4~xu<-VcUfA8MlongY48J%tTIQ7yNV6VL}`I%^Qh0eO;vQIiu6zBokH z0Q1i~Bk|&BlfGPebl?}d9$z=6)9!bc5gvPKE8$@rS%kb=N)CR1=m`m;cdrt%P>b?7 zCAD(CJ>T|{hz&q^0orw&3q3f(-R=Me37F_K>FL!Q;(E<;G+5hE?`~d|>*iy^oq>Pz zN|z=GpyGZxjUWki%yAX)2ZbBe`GowF(-t@7S8vQ8T?+WNw zq&uEEgO9QU*j|3P`I>|h%ULrKruJAtfIidIh^hN;-H%dO+(@$*4@_Bq+lFzD<&g>- zUbRr(2BvohP@-TTJPmMv6+a-DLi~@O-)#WOfu;B%K7REj{ZZtz2%5-yaDQkdi24E( zQM#VXRdM2w{Y>@)z#W>F3tEv29UT6fQ`&jjbZ3AcTkZQAe@UhxUK77G$d^?wc=J7N z$r2ac`1ILcGF_hJ>b-r-*t(MXI|;ul%M17 zP5FlOp0CgYqcFeX*|~9x|D4A*ItS~Mn#j)>x(>S~!ry#v2{S7kkbb0si=)M~xVhlW ztnb@QcEZ&bJo9%KNDr)%q&Wf$1CE_Z2l7|>Af&&a+XT?nm4#Dc>x$9z7lMht z5ESAGxq{~iS<+(QWY^fAaZPI6J{{rq<(T>*J4>8}8&s_^WL83K1<%WJS!5=KJ+~yR zwZQgNjDMwld=q?Z;4a)VHcdFVGj_Pt=nWG&U?}34n7WA=fmdr!>1raqD)sZ1VhqG* zLHA(qI!-qU zR%3-z=yCh>%N{J#gJ0QTghF0J2@$(TGPSQ-)eI|<`EN07SUIBEKRKmyUfd<}Z_ooB|V>1}y!QIsoW?!*mx7L?& zq*e_TLCAS{t>RM9=3=^`3>`w7!i?+kE{i(&-MxouyT?<(UlQE10tEUIPHbChv-tl) zHoshKP7ObRdsmE5(p+u{^OD~Tb4P%gAN>(xFdSX8D*Qd7`O60W47nseaFxzR>1#FL z3$!(2iYrN-(`7|&p%_NU7&g85ti-3GC3aDrwF3?1H-d{UXzGdt(Ax2>EfT{^)R2_` zofD{s+gH}Dha@R+=_<`Q^lkVPnh&6xkL)|vyg>Hk+RhVN4OMt?tcMrj+{igWKUcKs zFGF(tBsqg%n+1gOgRT$w>NAE7VP_IPvH1cgk zNF0zjuL7$YVJ1WU7>WcyksU(AKMqn##?Rk{9pssMW=jvqbkqde;R0Gi`@kEkym8tu`~;1dwx%ELyx7!_5F1 z4I#ZZxN;Wy{%^NSr<41D8-Zb@?7+KEzSyP!aiRO*%jo3>%XpNMe=06;E4J4wM@i4b zenW2BmaoX!t+7V;q-!*yL}3m`_1NnU0O76l!}j^vZ95YU2l?~#>dv=+IM=YdHkN1O zq~$X6ta{oDFj<4i4`&L$-TNf?$vMSp*p^3cKY2mGaapT8en7xBr*h5j(a)A0)LnpM z>Rh2!exO`03G@1|fTDXJXAc^ zos^_r^cBlpGW|c(4zCMU{N;ZdoEN-jY$12pRFMeolR3Qcon`j_fI#G3Jn%Exr+<7T z?;{)@)p)w2%jqX@tRK!jKk!`?LPwzYxYGs#q)tM8shK$mn|EJWPN5yKx_vjo{gIG& ztoYhzDS@4GKh;=fl^5jCsuYMIw>=49)5QIJU#isEOSM-um&QmATf+6CPj9hckbUSJXOX!YT~lD@H%H~5 zMsV7yv%-Vb`5flagfsK)CUQze$59dckydYj|Fn^dB`oxYdW$k47WBDX%-B+naTHI_ zk*xZmUOiqZub}#;y7(IjD(5~3g^*MEq>Gw)BsG<3fe|6{>F ziNt%;#(o=7wTGfTLQj@p8ayBHTM}?1`hPY}eR{>1yV_Lk(;YyTEGX>sSZAE#KieVo z-9uz`yMOBk?p0oEz|*pGYC=N~QRLP62}%9?-2sG+bm>Z!FYuhe3(ewZ+7Qj+xnOIY z+7(_iyc8;w0rb|%vLg?hkbusTkh6ajn{7~~bKv-P@Sz55NZ85UZ&>acoZb0CW@yph zCfd-LQoaFk5vKn+;G3&Rd@)Nv0zT|(Q5gH+MAkzMcZ2tu*nS;yb}ZqBMr}z_Eg<05 z&*RrHuz?*xb5V&;YVqlhpI*M-IG=s{Y)bizDf<=J@C?XX4}6h@5HFn&>H|?|p?t)ooF}rH&I;DsSh- zEoA$cD|xA*i0aLDesZms2sH)j!$QlleT)oJ3et9nz?jFE?Zf=cT*=JIS56x`h z6Wb1o4p_}DxTa%1a z5b@XZIUTqIH%lZ(;p|4Rmo+im`On$xQ*%&1X7i-uHhqjAII9u=Iww9^0x^dY9CyDF z*~nsorUC)*e+L2*GveHYg$&jP$WO$M626GR@rTMxaQyrst0B;Bq!O1NKZqLm^@rbM zcfpR$plj*XW}2{EurDxE@){)N9WO?~3Fc)Nu;@7CI*GO`qaxea=GK?Q&}KUjiJKC; zxskq|{MfKwS=K~$#R3KDm1vcxU^ReoMG7Ud8qOr8-~iGnIm3(625M?I-CV zWASiu8Q59A82|3w%ttuL+iQ<;n49yFbS`s^|GXI2w7+dtxLo=l3(Sq*}^gB6ncr5eL@}Fk`*v@5CPwp>W|(wsAK62 ztY1yqS=un|$I35nor?aD|5+nk-(9fZzyIvj$L>1-{DJVm8w-)j4AxSADQPs1D55rZ z4K2C^rP0C52&scl#VJ;0hyADHA8kHvm|He&4Uh*~J31@m5==?BInrr*vvSy2_>U(P z;vyX3Q-x1yUlv5kOl=F*?}2?bb|6A-*V7-|E>%BLn~x(thFOPx%2M7hgEVH#d__|b z*qgRoxJs~DjKBrs6#dMAg>xG6G;`wKkZ5GsI85?=uxn6wTtNkvXA5^e<*L>CwBT;7^iv zyc;f~;KjmcRD$<-VDrOX3$1aLst*AzqVaJT5|yvCP($o)sfbDI~Mk zv|30FS?KeUac53xy@#77*h3&cPLWc>x_p)bcGNY310?2r6DaJZi zX?HBQ%<8uYK0@c}N|fZK*09C`QJIsmcDu%FjxN&T@Cxing6FtarSa!Vz3u2`7HG>N z*Mh3S5#al)>#^5+2;1P9UF|UvGL}&$ur#V*G+6{VUT)}YZT*ObnF+gti7Rq}go^pm zr;^%TVb(gXBjAB$R}_NCS|<^vjX`Bj(a+zr1BO^(Mi>$7?Ney|UXqV^h$k9x+Do&u z(b_xi(TqE8i@1t&zu(@>+i~+huPwyqa+>uOnC36ti;9c4Kj*ZeO5E z$B&^!qQ9Uzk?yklc2v)`B?!R|JT^Gl_N9pqB8u&Q&9x_ik6i*!lBC>KR&coAgg-2W z=wk}${+(v#Qu$oPEK~?}!eKUngS8(`P3ZgoVeBoS;@p`A;KdhTw8h;W7A@}XQrz9G zcyV`^;_mKV++7OAp=evY6e#pxdhdO|_kRC({_~$_4`efwnaMnvY%-Z7cF6`C`N?^1 ze3m{Pi>2ESB84tT3Sdkk)EY`TF12grXoEul%Ep@Cd>~MWTH76ba+KA~TZ7YnIBQ^~ z=o)-Jes!|+-HdpnWX5mqB%OmfJYKS6oSW|B!@IX;*=zXbf{v%bB_G5SlQULS z6kTnyZ_XqxOR`2Z*jW-e3=&aO!94gDEL~R$5r@*2neXw&+3wlD9tR1>I%LmH_c7{U zWmz#2f9g9`mx*P`_zj@l%G;v8dA{T>5pNm@8cYTx9VabbDPfSvWzvVl|IqYu^_oQK z1OMo_8%)(MJt+_B+HEbqN>m8-)3x2$kNnj2JxMu^Wmk%JQmQ{1+fW0+!0b|U z1T7oz&>VfY?6-=A$Z>m*W(a}cw~rh2Sk_pGt)5O(L^QV3_7hn=pTCY^t9=hu}9$ZZ!4 z;R=axEV`3-s*kwJzyAivELc63kAS6J%w*w6pY`cyR(SKpDM3Hl-y8%JV459w?$4>g zkh|RTmfqqLp*bil%sHxj8e?(_THlcS@ECeih4^~$d1DGhWb=Ng;Hr;0?jvujC->HU|^x0(ouX^ z+EAD2RMBRQgv|^6GmGAx;#y;!F5EXHR_$0rma>b+i&lz`zm8luv$~jDp(4$O8m099 z%CbPGV3^5{maMckAkuQE+Bt`H;ubSU)$;HP5?TETjA>nMPujIH=m4Gq+(*7zKI>MGOMk!iIL=sC6|Tr zfNddVjvg{qkeEFX^eJJ`wZ4m@UPih2rBnM;ntd_|GW7yb(ob{-# z=G0*MZ0v-8?Ken75=~pXF@6wZNeVNar*(>9#rKlUu3~R0t=mZ{4$;I71LD!qvetlh z#ogE#h86<@0W-UxWVQEE)8Zo3ToIw`ddt>!Qc(u$WRsgVj1jO`7Q|}wM_hXvN zJeGIxD1XNIMxMW%#LD>Xonm&C!qIUxbg6&%7nr-M#NIxkyb%q=PMaXg zqx4pGX5A2X#-depe}i?M=~u;6rs~!oF^EM=gEL^r1g9ex?PsQXN##q+=&m*i&g!FM z&<@k4{faun2b7QG8q>Zqc4w)KEAovtq+T z^`EwTn&bMoJR=E<42szZ&n~-qb12yu@4LYYvx#!Z0N<3cI%<>>sxS9}T%PRTV zpfJOUVx>Ek9=Z<6k8C~bC90L8HCUnqBW{LnT&@zgco;s+N!fKfuvTaX#9&w0mQXr58S}*iSPs#KG)ci+18uhiwJF*_yem1iDDc&zL zN#t!>QWWZ~<>HE7m|havex{pNt~2@}$3*xE@tFKt$!s)y-{={+hskc?*#Z|9>vCif zlRM3S(5-naH}Q}>iAIx4n(-!Uu$`2397~~zXWy?ph z7M9l%P42?L(Qy$ppA#SA$85<4N@|&9PPh(L0;kwBH2ZDw6P}KyDVn#Mn&6mXwlnyK zcYRrn4d<*oeD0uA$7S!PmRZK8*NF^HZk;S@Q8F{&= zIXWf%vjFYw--J4+Pt-9jm)U>)tPYmTzT2igC6p6(H9Q3{r}Iq^VP+u&nd2jNS&`u? z@gQF6jPfH0C2^IB^WoDBCRe?YjP3)EG-`B@DXB&sCFpB#Kj3$&LJ~8ARGH(0q`ChCSK0(f6FnnrmyvXSPYp zR>Zr2xE!y`e`Nn0Ib-K7vdsOITPWs8TOSZSXt2_flJ$XMMP;sZumAM}4aNH&S;B&j z2EgqMQ_8dVl9YJpTT>1Ztjy)JM7gMRjQsXS9oBWC0r(nIYSX&~GO7|nXF9k?t&KZeGB|#!ebV%yI0mc4LwB#8% zWFaAxG`ZXNu;gY>7TT*5_v-3M>v|g{JBW`ZD#zc(Utvz{q^n&m*MLXDRX~{&_~$Be zq+uF}x19BIj*sQ(7UmWwjTKRnH8!|e*8WfIb1eADG17{W=;Y$OTot?`HxVpuLQ=`P zBH+FPQ9FMt0{@W@i_fyo#E|7bc9BOnXG-ypPZ1gOMR$ljv}_Fpjp@yTW(u+~<1S@& zF-LY-V$Ap?zo>0#7*5O9#eM^BvJYDe;X@YILuhzpJ`NWbp?1um0@(cx;nbyCf^B2c z%p|d@5ft#vTDZyToC3f1x>UkxuqSJ zQzj`uUq7a8r9dr-{7Q9yBVLiSVaa;zlmuw+%DzyQNo#14MXB`@sbxp1L9eWcLlPx7 zQ+lg9De&#n&UXDC2+@&8qS`si-5jMGIvjQ3gAPtBJ4|8P_|h|h7?tia{B&~xv>@X1q+1Yhr7J=n{?gD9*DjaDKHmj z8mhWpnEV_Cv%RV|g_16LDCBMkeo7{vq~_*#6&WQX~oY) z?|-48c)C+d>Lgzi4lI%rv9x`Sa6La<=+JP>Uqmu{CZ+ju5uj# z3x!`qYTCf3C9eQ3_I5GNIgRQAC0*3ai1$*BS#c3&em`NN$+?8XzynSXHv-^0>RR?{`myy68TJ|!A((zGxlKM(H z#^UwBEMxVFSqE@m9aH+n{rigNfOp+)Qo{U2*v<1$OFwQ7Y5qzxXOS==n}BT=R7yxI z+_ybH{#2#rj+%ArD~aj22TM{3?x$C6kr2Q17Q`*6gHR4CZ}{7ldwyaAu9xtSJ>;{ z**_$PeVU70riq@nb}Gyaq*8wyYgDt^KB=uC=3~IsJdK-SAf2}#t8n$!pY`68R~oiOs(T9x>&^g=B#EphhbbwQ3=#nnr2vjyA0a` zR-Bi{;YuRD#laanhdHpcqfALwZsRZ+)ajd`77^Q>G@yNV5{t(jXC6l2dX_$2ncy@| z_|Faz?Z^eC=MuB4i>mC3YK1q{JF9XsSc-m%XrR*%dJRDvVId`FOdD{s9$ zBHmt?vZq_AEa}IkV6NQfp$9J(N34^BKUpc`Cr=H$i*E=;|6V3&9@@fzw3~d_Qm*#A zIPMZbtW116c6OL)Ejk0K)p(4?13p8Ui!=bVJm?Ej*=KkBd^-Yu^~O3KTRehL{7Y7Wsz83uLpx$hvGm>$D&7=(Us1$} zTq@W&@h^f-9iz%wXg*>xpDc&mw1RXtBO7#ic@&@FH`$NmB9m9?%41W?*>~*M^(jXt zQ-@5=C-%6!r`o5(nU$%1aRSfhe*;q5DIbr|LE-EMt02ySD2*}v^f;2F(VE$6M;UlZjuJAu+914-0 z^9tSQAJGh$<$A>k+J1Mx<9p2Uo9R6=bgdxWN)7G#D_z&Ix^ed1ojWM{M@1wQI-Q~G z-#IVnlBEfZBLB(xq;cnsdMH;ato2gjA98BP6%5EY|9pEvo>P>N`#*?5?|(Fk`bPu^ z)^EVw0^K-HFwBMD5zQ|yQV|j7nZO_ce&Cz$o|DSCjZE8dHrRwymiq0&1Ju;iW!Nr9 z_9t=~{u=KD+T%g%EO`i4pK6}1De`2U&&k|f@-ag;N?^<3YotGA56#0Sjuywue)r)y zMx0UrQXzKi2tOsB8x-ogE_j@X4T1OWcS*7gu^BTGjCr!Y5@?xz4hm#|zo7uU%|6-r z)`cCOt17$x5fe;gB_V=6%M1f4LAbCF&<~ubcYp2+hUj*;(PyX&8~%EV+C+&v5SSUF z%WbV(`D%^}t3Vtuo2F74Bu$#cmgqgFxr?M2dkm_*Q~jt1S%M|rP(Cg282_bqjR^`- z6euz&A>cE3b49mW{&xFo3kEIhj$5CYLNL3U5MOdT{90$!LC52Ozk-KAwyPAPIL4#K zr&?<2Tv+H8>?p!d>t#>@m^CxEklltc&ucA!8m^G;xE3T2PU^3&rxoGSZ+JOBan-K2 zp{le0WB|f`LF*}ZhN2<<+@My?L+|Z-H zHoQt`ssR;FR%egcH~=Z!BwjTUGHS-qO?p5(jTS1giiC$iF0v`|SJ$#ofDycdO6v@f z)m4mEE=mXCk$Y9Wy?&ho_j^6WM9#uiG?;kvPrLbyk5 zVXS%=xJhypo2G4^=Gt7PFUSQ+X!F6QShSk`jcpE{tE1MfexyRVJ8Sp*f zF#!PQZgPBoUwuvXj=m49=?t~@p8!Z$tD-hx&C z&9%A&8Pf1^iEEa`z8Ni{sn*#P@$*9C#^mCUxaA6139HpJ67F({x2Tf zg~EGa5Bw`P(||F~V0rWXU%ZR0O}OOIKi*~MU96E| zrVj&miF095J<{0c5v&&a2$xt{dz$Ki@-n;?Lme(Hbgt;9wMT7)_!+&vL`5cTZ_3br zmEm8dYo!8{C>Bx>-|{XcV=69l4Efy>r*8gmPBM{M50Sy+^#lpQ`lQ#WJDT>%CXsSP zABD*=eb|fr0F8niS^Kf&T~E6_<`ORKwjkPM!!Yv?P!3(E*APYd<;T^BXY}ra-+-{u zjef2o3=6Z&Nd7HY(!s=)g$81q*K=3}V#q9vMGErHm#t<7&E{PNZIU;LCkvrJkXAfj zjMU(D2m9xrWf+uXz-%AMVH?UAZr20VKACNTr?dh%;RDpYCsaiolh|i>GGR#(9EPN$ zbHpdkjUUbeZ-xqi%QI!Emu&n%Q1BZ$!mZ2-6+M*Q646sth>@0yYrz{RoFaHJyjOHf zorCLQ(+{@!=HnE4Y<{7VbqNOd+2CO#(m)#j9!0&i7?n`2)_3R8|5zc*KUN3~$ixDd zQ(^L|tu3ZAlm6hb+i)Pa=t^7u^kY9Nh$`env_3ex+s+9H7z?xZPNC!qqba_?Rl9Y= zuzoQ@jz2~SwG){kyJ{D%14_nj8eEn0ZCQKiF7S8~0?ZVwx`TruVqET=J^90{1>kAP zao$8dNcfRQwiw}*Bng9Xh`c>7M+u#WqGq}pFZbhk_G9=D)4oxwb4(({6FQF)ZmQMP zM0>K0kSvowSCW`UorA6`dul-z}eQaJTIeQWQ`akrh$Y;2k z$_Smuj@GP16)EEA)aB*F(DH)6zv(8v{|)%;V_CyE<*4#dw~q0&vZij;*>z*9u~hc8 z2Icg*SrdPepz*nKa}oJBpdTdwPe%%)Tw>MxhvjZp-070#h#C>58XEsF$6*B)mfO$} zz05eGDB=$PbriBBA(bprzea@-24wr1(ES#MESkN=eRilDDs37xEr7Mio^P!?^59jMa#MrrZhw(D zZ|>a9!Zn`H-1_6VN(Q}xMn4pY1j9@7%or2@9M_IzshdLJlxmsUl1Pn+#$=obNC@OJ_&+s{GFNna9N z@~;VG79i2lsG)j_0_i4&$(7lw$&ZRMWo%v3oXsD%v$l#N0h0PS{*iR1BI7u8@g9P= z|5GW{CWO$4=@74p_-7mtOV?{w=z0d&kRhSJ%o~3CIrYcAkAonW)u2yn^ zW3X}_@t%+^F}xX$#ku@IVoY`{bwCnKu&y!){uO<%+@17lZ~}o*=p@5t&pU;xmT#ld zq<9&vmx`z4OP+T*QC8-pnCi=9$yHgaiMGY;>uAujoRf>~)lcY|(?*c~0b#?#Q{XCJ zOqdK&${=-C>pzdC&6y#imVhDTd7D(GA$L;ne8WHHQmQFa(x)mL%zyD0>;-Nppc8f5 z(qMB`byQ`OFQ;1%n}q|RquDCJJ0UdjlKant{jgEmae5DVMpAQz)Kx!Zo{M5CW`3kh zdy=6?x&Ekk>-(R_fob2C?}dr3_M};X49*M0zHm&J`cH>aVWbg|51kYZMhQUFk_9aU z*yWwlVp^q4z5n@StLDrDG ziy7CWlVuvsFf6zshs59tOm$zXn$ZQ&tF=X}>27m`JXa)TVemw4kGzMDc)JlkO+M}W z+?`6uWlD9Z8b~>XNUsAM8|$c$*_?`_7_lZ!TGr;@%?9l7x~ehjFkM#ti7p|xBcN`C zR}wyMBc8!Qv5ZYF5)lxdLycejT)Ua0A zvx6Q)Tj;*K)Fua@)VninM^lwEaJM0dHSJa2Pb$4#g2UjXPnN$dr^muqnzaf|&sB3F zzqO);yRn8F^yo+IpWAep)$+x8ASViB^z&j*K%p2vbKJYv*~|$_zqfJBPCb`z*jx~h zRhQ4A@!y1FHvLb}qv7QCRSrGtfn?ZEX|K2J(opSZUBxf0rDu98?qXwat+{80Q-7RW zp{NJTVLz4^42ctL-8R{j*C0+l2--i;yg%jJF13co;7Pw2iv6ss`K5y8`hf%+2K?BPb}AMtqNA2RtdXxL@m z^8E%Fe!P2mUl+P)xwsWg6UCV7gbs<5BcYcjyeJr-`F&mn1$$wUM2YTSR=`E*-WB`n zTnys{6p4>&z{XBqUh+IAi^olS&At3YZX7{%BMOHyoy-J}Tn)&0X8JgF;PYTAkZGaW zaYr~^uZchERm>KWslClm(m9*_MrVE*rwNme>^fJDmE${r^~TEp0v^LsdVD4ZN2K|< z91+$j+lP7BeH&_Z@u{@G{~GfShdgxV7WKFk4u<`)^n*~9$U{WMxarl?8T!j)W54U; zc`kvec+iv~w9q)(mlnu`uVy)*+bflJp#`Rn__9ITKt8cXYOq{K42p~Vj*hq+wu+UG z^<1o1v%|LI>xG<11vGy*5ci!lin0;Z2z(0)JFZC*Z4{77p&c`_AVRvlEa#6lhxYVt^A}U_b(D37Rwqo_Iz>@BBxm9;xyo>JFr@vN`TZG#sQ8GB z((~P1&{vk=8~a3o5~pXAgDy2yw$lSOG`R0?+xIH#U9)t*uy0_^BH(C<*L-bZqDui^ zc~)jhaIiTHHx0YbQ6RSjb*5(TRW@p84;TG{(8_lzB)#8{s;uYLsLg|>FJy0d}M&@}(%`Cvn|bnE1;({F25@d ze=1|4{-9E;m))FDx*Wx?lGbZmOIM6R z%~>09L7lA>`EDR_chh*{2Z4fm%0^HE*jobakr1j2iYR#LV2?lyvymg&J0#(gt5Ox8$RqcP*$ET$7+yp^epqPASoYef!|q?|XH{o-rwaQ&+SZb@L|;>G5uNANbi zZU3V~z|xVSqt@r;AGZb{a%>*Gd$&sAa?{~X{$x)0%83+z`El#lBVIu$*BXc!L}V_w zRo7Nwg3Y)5W7)6A&{1VV0V{;C>f7m~cLsSK?;NWb07A>JM|j+tJrOc_e4*^uqus*$ z=f9#&3o|nI3zq_b=_{+nPSrnY!U>kvKCyK(GtS&91 z^)jw?;kN}DKXAgnK~WY;MYeToA~DNA_NG?5^<&OkEy)yG@5KC4{o_Nhh#8}ywe9t9 z*%n$q&-Q8$XC`m2sB5SZAFsJ7YLxRf#^tMd6{6jryZWYq(4mL$sLlKv&o@T+@1CG%oxc zvhkn_G#z=}GK-YE9IXxSm1^8Y3Xg^c4Q zQ3i3&(QmI)waD2Fadn!sy1`3p-AZK!C`fr>nB}I(2Mrv;WzYn{yiLNVr6E`$Puv4G zrd2!Ing}uz~U`>5=cY#ZZ5kv9fXHA7>K$8^)-(Iu^o{#WKZg z0N#^jET0=BjTZa9y68Q&>MvsO3nYh?fXym+BVvv0f(P>4ug+$Imq*U56D)zv=D8}G1Uk!i`z+)62VBeEe! z-S%M0er_-dxUC_oZ*>%wA(vjj!=hR&5uN=waiT&KV%~N~iw~5}TGdq>qiQ@u>M`$> zYONKe}&;OW>}!7eG#Y0`WAl9Wgz7Xx76{>mjHB6Ik)UJUyr{!;vXfD|bmkvc7B7}e2R z@OuO?EjP8yV+Ky?w@6)@`zfsilRnrvdZW~!xVExdbSW~#c>2VQgU?MRG-G57^ViCh z9aLl456S~&KtCUi{%Z<;RJ23~%2-6CGSIeR3pYgS|ah*D=9Z9OYTwwfw6DPmQ;bOTS0s(teco)=A`h(Iri;8LLk?3!y~ zY7WJRvGPJJf-Xt4fY)C0Z~NI0yYExqxnG7sbQz~0;N;B zVM2g6Sd_^R&#=>2Fdt|)!e@fU=m+YGS6K5`3W?eu3Gkl(J*9PnyIx>%)@Ef|*6+cPl|jb{T!Q7Bq6jed^gFC8$KgstL$~?l)2FLPWOq^=6$NY83reH7NoN zEPUVJfXd)j_@sS*HPwV$(M_panF|oEwKe}7^J&*N)$AlSJ#uD@ECXRZj_8fgB@_Z3 z%%Yn}F70AiW@%4!Mz4f~B>|HKH5R5e&e?cd`R2SPlnsL=61rxjq#QuKh5x^z2_c4O z)N2*brqUnOzC&1ut^N&&jZbv+ETE!t=+>epREr3Wc~TLKrRAo0q?1=0L$-PZAJ3cY zsj=@pDAIpN&RQBQBck6o&MLJquc??wiwAa8ur%5-8;f4r;&+N7>Xmx`80CxBWHDkn z1XtNMOtn8)dxjmfu%3*{Duz*+lAkPn5k;%Ul1NUk3^1lOBE{>T3vEAmE6Bu9;BXEH z9@6E_GFMSw4Ndg=2RmhW$uHrab^<6>XtK=jCbC<2jdT$*UVcI4+ z-0$+SO?J!*-J7BsLL!ADT_gDBhh#R))^4oW0bh*+?-=kYkNvM8e&m-v1hV+Paq~IH!&s zhM5)86Ez%L>NrtL%39wbEfeQzpY>ExLQ(?LOEZ(H_=RObi7uZQx-i$u_U$?01gmKY zCLlE-r%HROq5~s*TH2B|xb~~cHW*dbXnA>YZd$*>*O0@I9!)L8^ry1KRHctva;6e) zv2acWMR))k+M2zE zFp6Sa_&9}^Y+3tiSPsxS1S@u?7Kemau&W%+qYnbDqwnDMluNb|jH1$CT` z0=D(4jFk@hJ`s$BEpCYRI>vR_$`YTt@v!Yfv5ODlpL$Ou@%vFa< zFw5jnYN!UHv6qs%nZn2-`Zj6L1b@*~X-$nWxut}aB9lKB)Tq%FhF>SNnj1icCgJk4 zF-^!9gIErAl!(JF?B;rMhXMFS3-43PTKJ zxC=L;XM22-)<)`7nTzroTi*~_ic_Y{!n%Xbb$o?s9K!F<)t*XcG~)ejfS!ZEES=*D zhh>FC+x)EMc6=Lyow$@4^2CSUS-$L7WwFV!Kyq5Ojf`hyVgRfNC<#ARVdsnRyfSYp z8{Rd33VZdLaH8G!MTV-)0*fdv4IcvUc{Heg7%KhQrnIH@)?0E)i&w@lCn6Q*ym}ey zjY86RVJpQQ7Xa-|I@k}kxtwix@_3kATkAT7#LQ_}woK>B0Qu56?dV4}cg)5dR_}$h zex!Y#7MhxrWJz*?!xY;zHw#$AGwG6=kU3Z?&JKX~AyX9Xn#NcAGfkX!{VyX{y}HR> z*?w|rrC7KK-tr$az5;02UY9lGw0iN)pv}C#Ie4yvhv0Q~E(B?<%f7xTh$rotl%(5f6H6DTnj z_8jpQHf{rA{pXT6ocPxqV$KKSPK<7U*LO+W75b3PCNG9+C6at?Gan|CjspwX@?EMn zh-pi+^tGIx>syN&iX|v~l<?Ma*p#MO_$zw45IGa2*x#dn+FrFXF8C zt=;&$zl65*=rhY*StIFGXAd0~JW91b)go5P8TMSYA!nl3dfL13D2n-rYEy|s15bAn z37OX3F#eq+}p`T=fe03DcpZEUKk)?dvCG88vR|HN@q^)^YK zA6q=2v$;RfO`DstV@Dhhm*QpNc~op=uHF3Heytja|UD_U3%=_od5c)7(=FCxhNIW1S9?MaYlh0QS+9N zi+`36?1sXUe0sr_z-)%K+yf(zBl_&Th*u;&(s0P8iptG{4A(lKN{OHF8H-?P`rx2m z$8y42yPoY!{Jv~fc`JIpk6PquifUz;=#|cW#0-ms(MMSJL1&#jVL6gE-Fed3P|BK? zVIYbTuVmNa2c*G14;2JU9zJ|nk-&G5%QC?`g>@NWzfRvP9fQ67Ay?i0U^`~tid9tp z>YZMsf@fmMxZKBoqR3kzozTcj`3hJ>t=4a){Cca?FQV$95bsKUxik=C9k``sjUAEj zRMn@a(W4(miCo8x)Zz$mg^MD$UIztskik~eTDxe6czJp)=|8yrO)-usm;IwvHArKwP4C?afbxrw0!jtI(a@ZD)OCE+0V}`-3JRUq3Q0N$vn5& zBhPeL2}L>NdY{wh(C{$rtk%AWOc!CWIEh51^Wm;$M2wJc0Qo`=8+xbH!%e-X#81H)=aTENu3cL4o{U}KaoY%DQ)IzXWufjd+GZfCV>!o0;p;it~6*HmkjTFyz} z()qKpy@|wL^XpI3))EUvuj8n=MMw)g#VRXRfbjBgHWcZ@mM)=t#MHIMYftw1bhjy1|$~Qfq-aS zY^(&aite|NE$2oH{(EemhtD0r_3E^Q)>KMP2RfCASvOOSgo9kw+RsUqy(QJUm`u_f~JO z7o`W0YMba94eNCstJ%ueH{4;DRKsDano1_BdLiOC+#teXQa8gLOr1?UUzO0yM(JpN z@*Wmhaco>680J%k9phVZNH~C;Lh_C!mkKj8TAb4zkYJ^d>-KiIm{TS*Ft}j8B9$GV zCb$O1s(h(B!cm4^nig9ysQ$fa_rc-=H*G^t*#d3UjDRIuUvzo)ZXq5bVob^`=Kk2<@`ci;j&cV)p}GF2wNRRyo@zg2BVIfNLuwbpreOIReRw^A$*QVDZW zMWR+?Pim)lU8oZ{TJ?2i83o+zk@KIv51~BWzCF=GY&CTac|_KGr6-H~=wK+!!)Dze zPYk{E7%7HI2BeulL;3SX3bPlN@*VbDAvQ>dw%p-NOU8tu(ydK#}HY2G5=55FtbKcdx;rfJ*JBZlB8=Qm&0!WG2j66L-pu&%(0d{ zyqhn5+$ZSAW4pw`|tQcf?1PnTg}7tvN_ zkhArmLmfoQAAi9J(<7H8btFb5TRp+TVU?-OgxogaDK(Dkv!bH!HAIY3*m)hnkE_yZ z>M=}hl(a7BiK$NkzdE_oi$PdCUAWclh=|e2CE#A2$}dU~B{utU3EV`x!?uD~F|COF#R8jhO{>-oc zV*NL0VN~efnY73Oi&iyfKtAR@CqS&6Sh&QPK?oW0e~UEz6fuZGG|A9B$l}5s&OSQj zG&|KWJ_h=iNQ_O}+<#M^d0_YrD0rpdvby;jpz&{^+GZ7eAbN_2sEWuH{Y9wV+S1>E z)PGC0O@|UNk|0(EXoQ(!1)wT@MHe0;i7eT|>jzPUcAyg`8CVC=*$;o2)J}Db zZ>#=GDxSoxACR{Yk=ikU+5IA3L`isFUy0J++W1T0yV=D_6xMwd)_y?MAPVau;^ICE zh{f&S?{1q8DBO=ye+FuW%;sTH;xn&jscm$+uP6OZ{rRt!yqEtiQ_INa`ByruSf1-(hHE9*D_8#gVc#B_ zH-D@6FRn_aC{Fz-fKj5I9o7pmBDV<^IsnYX0L8y#;;)xN;UA14-b41Zh#s5y{?qDv z=kE9Vf62uExsHF4q!Kmsr~~VMH`}!m|0vPV z?K}vzEx*B8=SRY(vp(lR{mb(yp4lnCZ9}J7gSJIN_Peh?S2td$DS;RNU6Fs){ST-f z)9HC;dvW&v3-fC5+4bgC;~;9+`9DJbUt}*G_gs!{7BAnBX42xUPyWfCW zL9cWEyVZYTTu<;{Pi1S$>T}y+za@AjIo$H!<^M?we1_0P_pO`#bsf)qx7xiw?YlVh zKkE1mm=;)^ee)9K47n--3K|v;_9e>s@2g!PQO+O{;|rC7hL7`*{ga8TfxDN=Mt`E5 zAy`77{uGkN^2)-(Kp{8@@z-;R=+-{S#CX62wrcG`PniCsMtXfv;z68>T_9;WA&RMe`RrXtQ3GCYcO@pVt62!I@@GX)Owm%^yM#5+lt3k z6c!Rxg(QoJI7-qlwWpnlhepD02YNX<3>n z(?|_DAKDn_hkK0ts^4o2Xbv%i7k0zQOb|Xma26=&0xF;4tEhEB5T11byOWiUmC>>2 zq_8(#0krAYc%GZrE&@{>*zDb%?^zM^LzEMFrz-3Wlovh$S`7MkhH134v# zq)$Nwe&QQ`$79`HHX`%lA~s^kXEe-L$MivHAa0BvBhV5_s8f)%554fIsg8g5emKshbU(Gf|V?87AT&U z2h=!^C#-?gA1p6`msYT&07RO~H?JSC2VA8vfyr5-tVAD#b%8J`i1Ce(;>KfltRc|L z)wDtH;0+D1@fB?P^4jUl+T~d0#5dxuu1Twvj@COcv;N$R}Y4DNymPZk~Waf*DX9 zP&t(2EhrL!wgIOV@c}3voCbWreM_EgkOZWs=MjO8AEPxuHK8JegX_ZBBH-xqjM@H< zAC7R3Xr>K0?8@`*8ZnahH^6rXiN)tKeC8^kto!3PTI%Dn$G&!0pZky@h`+Me;;u_r z1AhIIT{#hngC;(G9m!DwO84g_9@CmsUj$N6LIwsLQyI$@&gZ0cFvCt09^@k|UeO;A1ci6r?B+8$ zmgP-^?e0?y2l8Z=>kkTaWPzrqJ+Dir$8>$ZXUqB3TMuVH@A(j-PE7LglbH60tz$A6 zi(HBdp;}qTx@0)y2*2DBY2G%Z=J06@ zs6^c!Pldu0w&0dn2S7k#$X=dU+`j=@bVE}qGZy!L5X}b!kX$v!J=Dq#jXMhQmpWks z_qkWhqqgqeenXYZHb&_&H2j$<=1c1{{u}VYrr4%Hgy<9TA+jbu*VXfrEGjtjTqZF@ zS@PQKQn?;;P_m{7V%UNxh9;OFrv~N6Vy?VI!$XnS>1+ zG(`0%A2Ul>!SVmJ^%YQU1>4$52rdoo5UfaXx8h#hDNb=(+>5)ryA>#23dP;stw3>i zw?hB)+I#E%FKcD3GiPSYoRjRmXJ*eg(~fP4QNtKU`^MjXIS}7W$`?Dv$}n2IS&`3c zk3&LkJ~e4v7BXBix{DMR>x#Ilm?RhP{rjarZwE9CjDz1iD%Ps$-X^;RCg8t();X#N1m_PjAPE*DB96BZ90NWe{+Zps9r}_7IB}gZNR>WVY z84=;nRv^N$!DMt;GY<-hkXo;!kw)*eM8gx!qCrAU5qlR9F*+lNygnIF)`Kw8O$5io z$^$j-B!EcnZm$Fo4&tpQc_YRZHkrf9F{nx zZ3FBn;DOI)K(eJW`Ui8GxPTsT>WM@0;+If$%*BnDTXgwWt3)MY5WbTh0VNy+ z&=JE>8Y%(DxtN@&D2WGXjc^k#3RFm zVr0vT%ZOl~M1r7$%uDc2egdG~l~3s581frOf6Sh`-&V}32`+|Iocr(N0*vDu*eX0U zfq9@fbUk3sAPUthM_2|WuC|lBGaq6AOcQ2Sh@4-bZ6H85bTG2vw2&h6b&MR@da zo+&QHEPM`Mye_%9;0}3alOT|-%>(Ge>!E;L;l>JM!hRcL19QR5yKST+Kqr6RPw@Hj z=)K06B9j)#qMc@Oajd}fVt3HFDUgs^c`YEasR|sH-ULv7y^Ybj;&;nha87wK=}(1P z(_cl9vTbs_0qrSwS7I=*mBO(VDeKAjkUuC0Y021d@LTF63V%d*G19<9Yt=|Jk%&kFix&V=#Ti7ck4a3aD@Xt|!Id$@2&?Lk zSQMED!dERybXs&#F2+h=yMpJ8nC;<1(F^6+^$IQf@uTR7IM=_5fv~!Q;*3BfV;q5c zP%y%`ctXrlyKV(wW*TuEzpXKjA+d9P2#x-jm4cCKv5~XGQx3{JCfdR3kY%y?tUE??hpFqU@U{%DH`4m?u_-=#@P14okb;T%BJNoMQEq;k92Pr9+q@}LR9rygagn)EdEyO;=~ zRCL3H2vB51xqwud$hx}0vp zpg!ZyK+Y$dv71}t_u1(ZHa;R2(f*JnMfb*5w-xu@I2&y1KG5arzK3gE3r^}Xy_zNS zU8jDNPd`dBvgnvhB$d)pqo07|b8OvOzB+*pO_+!G9qVkn#Y(@Z*F>wbT8@5@+!f6Y z`a8k$XQ6YI9CKfJoIS3H$n-n5l!sg=fUL*MFp>jvw`s9mx+`{QgQYc|#zTHgt6rnX zw@RU>(Y5LYV}LUJ1amhumE(-q>B-j~x5>5}g{gxAgwJtmY`$y1kjYZTd#IE#1@;-DpV$`qyxqI+k$hiuj*@aqqwWS(vHrN>j$Wpup)Z}<02daSIddo%(P1JF<9w7o_w3_$bg;TN2k z$4lHD1e2;iB98DHWk4G7@ZQ}#uWqQ5fHwX14AE8*0_rNIakhjQ(@qDQx-(2!aQL z{xv51&%RUtu5+kEe7^D&>$eLdk&SiRGu)k6HJBFsI+w3LJ|O<^ z3S1TvJ;{aMPQ-mSSz5Rw65P{Uy$~k+uiCM0A+d0N4|BhaF3`mI|0c2+eEWUdU{TS* zrOa-^_G+7K=|7~1+>JjrA6&bh2RFsN3-*TEzW?u9nAqs=%0I0=M*mBVzZ~6dCkvEr zGC($9RAIjVF#MOM@t;kjw^ND?-!}bMO=pWZ=Su$Iq5;=$^3#qk1bHe@pR2%zoMoRl z*_tFa1eUOAVSCRI(w`Y}+K2tsDkVS~2 zp{LlzgNr$9{Ds!PK9)+ViqDao_c)Ro2+vdTWi0KhsIc~)2af-py#zfNKK9iz8tp4Y zBjRm-uiS#4>Uf{<+_Gz)40;QXw$4`@jT`Z_@J(AyqiXnYgV!~@zKK)TYM;8DD@d;j z-nZ5Gu&Q)2)iGD+*j(OCM4g;V02tB;_}Brsr%xXDIcSDJ$h%c;?StdZPURvUeD9dn zZ$?pY8cQch@Y-%p!F^^Qn%1!415ng|&QtsBo#%GAydZH%Yn6)Y@)RoXZf`+DdXKmK zcUy8LF|^)&guz5rr%)UDYV;xu@fn9Dg=$a=Y=79};Skfj-VR>GQhe&0OJk^=YqK+X z*is;r!ECmYMAySN``k9)$haLAm9Er?R%{q^u0jqrM50SH|KcDed zWsS4N%@?A!5EiCM#1f@beY|{#8yM}!#-4^obf?%?7Yb-Z8*`f4y*{C;YfC?}cEmeJ z;HbQ7eJ#<${8PL9G-L3M-|&II-3kWB_S4mdfESfhEugvW{Tf+gw>Vl;aHWgup6AHY z+pvMoa}$1u@3$g^tY)Z7U#H@s2AVj2#~y}=%_5CLO`xmma3X}FF0vi4*ADhd(bduR zcz@vc`9-9UMT0iw425amvDI#oY|x{>nY?hVH2i&l6NlnsZVm4V6)9Zez7G}lYds|1zAIQ zl1D;1sK?Teq$b(3nfsahrdQ;9+(-NU9AWh3Z2PVPK%64!O_!Kj^xO;~N)r7iExXM1 z&vnw}8hC1U4TKlo59itKTsY}n3Mj8xFWg9@jpetn&$qy%|+2rd0t_T z&VO$Fk1|4jJK+*%DYBv_pv=qv<_Oc2OAKip=`0I&1!EW%Mx#t7-b#*64@0Z|rx;|6 z%<@^T{FhgEh9jL2gfKi3k4Cm7>{7?$N1jXlj*#bt%PSa`si;QaU~3!Oe%VpmMFtDT z7jh4Y=8prQ&b!k2PT@RcDj?k87U8gGwx)G%k1tI>zI*`M=eO zV_y!HoA>PIA+Q2)Ie8l4k@B(o?==i#BuEd?|QJc0N4kP zhl?SBxoLS50C%(z=c;HZ0swZC#Bvky`*y7V0l*9adndfeH-mmq5n9>Veu3*uBr4-c za#W%V9sQEU9)*PdE9te7E}SqNdJEql7{RD?G6wEU-Iny>vj$#!cA@g*nrkZeZWn^+ z-)rfndhD2`2?x+YCYhSbj(ntZY!J9)k*?h-_?7Eivkq#NkU-${Nd@sYR?eBjV z5(d!FCP2!F1D5#0@JTSYa23S94-)rTN?@NVt_TET~H z>|fxB7?JmEl#alFG;B#Ndc><(j|}d-)&~PN`lZzI$VzhhR@df)VDdEb+=9h6gwRs6 zdiyMwG0f3NXoThE*+guQ>mI)xyutk52hU+d+dlKsPl*ehthNYqq*R45>{jXtE~p<> z&p`X;k+vxxk4Ae_&le2X)-+Sni%aa#~5hLh3>tYy+k3!IifvZgZTmi9`)Nq5sdF9N(G^*;Oj1kt74;=*1o#LZzCyD zm%kRvT@KlTP$5=#K}f3u_7n!x?>?iJ?eDSwlzc|q%Z2M+5g?BWwTxpcXtR&`1Te2q zR8_cHJ*OI=L_7Q_@lL`X1qvKN)+(>^$@Bt?6lj06?+k_Ya%-HJ9w762;MBNW(5a+k z8OxtevR=R4me8jvJWfM_zJ9qq{o?tr;S&60WuvSj{QB*_=e)-~d0+hR=_4^fZ5!G> zdArxEH6g^a6sU#-v;Rr-)dh5Xd3qxFX|MbFYQyK@yu<6>u-%Jg4I;OhRb8dAFOSTD}T;zWU?ezX1y|76=s=__4`U2_F zfo7NgQR&}W)2>lc@3Vs%+ByE&6KWNgSkWp35jo#~2^cHCt~(@xL2|5b6s8er?EOM} zdQtHGKoNM2@|JPLviX%QD?;@c3^Uc|`2|z00!E**Sy{jPR`RkGlZf^3ww>{< z$S-3|%O6`?rG6fF%i#V{mna}cMEmQ~!tpBfHbJOq+JsA~ZTp}fR9_eXD>sgYMc{j9 zT#w*$2DwtSPLaf{`M4Ye{zw_enB>70x#9ULMICfi`Q%KlmsUc%pZ}Ikt9RAH+J)sAZhooU{L07OP|xMYqe@Q;amH=Z@t4NK_rHKkCkL6? zXxrJaVk7z)!O813)@)}@{CL0hp6wRjSLh2Pen|lOHD>>`&!7z0>!`O~PEG6wHfb2B zX#6az?~xRtVq*%(s1GCB>d=F>IC}Sz_hjucqdOvCER2==J~TG5qax1@__lZ47ZW8t z+=)4#Mbnj~kADoy(8An!W)gn~bOsP~ZRB*3Yb z`8p(5{H0fbLV6T?P<-aT(Q=s&ISu*qfyHyjO)hM3GVi+#12_ExuzUW`9mZrI_o*ri zy;T^_7c5D%;pO|w+T+BN?~(Ayzi-$##Hi59Pm^myb*csb?zq5+qv({Qu$o{|R%P##T^p;&AKuKNR^ZW#cEGM7H2}8GR#v z^VWaM`v3URoKV+O9%VP3+kKpIxeR<@mk$yF38wu4{101#)P)h_Wy8K6DI#x9W&$Kp zZ97izUDt+#h<1QYNrVst;cM`X{DZ;ohw(MSO>exPVX7M2j*rH^o$GHU9xIg!H(H!@ zjAdE~jxs*QfOm$*E_S2PDZkh=dQ3!~!J_YrgUt`&OKedekhMO%QHBPJ?vX>f`z;aG z!?H2Sw}i!|i0DzIn)5a?Z5un6u78kf|+Syq93|D7m73%)r!FCO2WpX^XrSx=Hj|}-^MmumcSoVWh+I3U5g-o9%dYEz?iuxai^#QYk?f>%VSl?SZWf{ltJ}n+Rs) zEmbWcg&PN$qVvOjNbEamt=(7{W3a8wuI%$dAQy4xlC83pxfkqE@MYQZ6_+B&opYP2 z(RUU+;=iBVx2Buoorw=(a4luzcMD3ZCk>ESp>r1G((kNxW66OlWthT6cSlYD4z&Dz z4dPYQF%k8*Ca;&&TLW5rNdr6o07zTJ**GZt+5Heott>Py?rm2>IFMp-NVvr2f9nw+ z+z!KYf?bl7m^t)G!Bg^~SnGv>?SH9V($+i&_kUxWnq$#D6=ef9&VD|3fb3vimI0r z^{vp446EXVkJx^yp{oNzKJ=VPez0?J!2G3$N2K?4a}9i&?^CyY-~Z*wl|5&T<~elD znIIb+-H}%!ye_SsE+Z`=&&^SS^zNxYoQxt*=isJpMwT;iFeVr(bSmt_#0l@17%T3M z0aEL=svJdU66(r-!6JwQm3NvyGeg}--W|#Tb_~**zB>nF@{wO279z!8+efjyCyVf@ z#YI{_dLTbTQxp6-q2S9qQXOYFvYO*kI&k#rtC^NIKMH>s6m@1|LBIigE{y7&N5ErWfb;>RL-*a8Z3uH8kgjejNyC3Hwe~W{a~yX*UD1aco(7fMP_LY zqf&Q==LNq_xes52zezYp-jJTuLXTON%)IhuVr*;wT1mdZb5@v-ZxD8N_iZWH-EbaU zkfFZMk{C`5t#$ZOfESMS>U!$zm{nMAa(|or{?B2dt#YTY^eo2;4jIag`5yUSx*>o( zGM$UJ9b;yCKYEo_4qeIInWzc^kCkpXu3@uPFc<75Y;*Sf>V_krgTOoVxr*!QGZ5fQ z5L1Tg)fv0Hv8NgF9Q|mYI*%gcDQrPpPD1hoYg_Ogg*H>^&cRYr^Jt{xF>S*Gd)mWZ z5dW_W4n?(?jYFz8*YtBcmlvp&sS@;dE1<-^SbqWucy>V^r z*jUT>_DHuU6NC1Q@^XO_I4eE_j-?|#Yy=x2iKWKZVA8Nuu_7VmE0Suq?C0**ufs8C z8YF)1cE--T6zu2>kihKqI%!`$w&R0lc?T>?S0RtwSR7cKQN#!|%+uxo90Fx+6qQvF zb9msC>Fa=bkn0y_BK8eYR3H;sOEknfo`j*R7**z-frV--M*LBm`f-h}hU^tLyGwL>MJ z;?BsP*@r`Tm1O05-`Qn9BZVXTxRHz-miPU;uO0!bQC9$7(R@+lYC|XT+_s-IBQlEX zK;pQG__y%(ddlm0%r2>$Ja{Fd1#QK46?u0Exv1r1?~w2 zO|ezx%DttfjeqwSe#8=t~cjR#E;a*-%>!SAf`I1iADTd@i4y?)nwcCJwU-Hxq5?uPWb`Kv$%h){|D`lsLMKttc->I9cA|78FT#*p2e ze;W%tWVmST%fOp!U2jX&Z|WP)v0eg521FXJ z1!oOput|Z`ocj*FBah~kEilqb&uF$nv2}r-Zh1A(ydfe?ahlN*J11*Lw)^(un{)+U zHbx=vK#Ie{8w;U703qy#PQhI-g2_8pt2*4(>>0#r(sO8ILD-GpD-gxIdQO>#zOJWY zdMgGl24`F{LwQE&Y_uyrAO1}mA-pmLMWBGda8eOQ9Em-3gL?=JelE&0cS{;(>pN7m(Wv*{?)}2`|>X9t_*1Ndd#S zvqwVYXSuKLy0okvLf_ht?mA|hto)VhwubZb%Eemu97g_E5R7JqAvbZ$^`v%8``m{Ivd?m{v>POXf@idY1SJQJ#{cmp()=ec!p8wUoMK>9tZ;QUc zA;PgC(z9Iy*LID1woH`a+}Gb^QTED^0!}4ja7g8N#X$&4Iz(q{m;p9T(;aTl+6s}k=LXAJC7DLlA+nYqyi+isce$zH!^jp?G*RrXQk7_x+ zWr^tlg^<}qFRf|E@-}HX>B4uuo?w5znDP^waOQIy^fQ8R>gB~LDzO3(DUiBq? z0JLxE`rJDgb(qFU^l5=Tl9^b(9|U+F=k4+!H@^Qza86P0X=2kcgcM3#+anlhHpkOlzG+kY8w z;IS;7?0tIlx>%6?Y8&YIy{R>HN?%^Vt*>lH zlgG!p7FtMRZ|Z+KiP86tH`a^sp;3I1qW2%}O&}){2W6(<5d=p5_Ji^`2kMVM3E50Iwh-fy2@P6g!doNDwFr@{$6KFP%1fd{I{6CWICwXzg7EkKmXOOPJ_| zN-5x&N#qt|c{cU_gR>M$;k*1t7^El$B12yA+44GsC`j7aulrXXY(i7W&mW{))7Rfk ziVqtij?m$Xpj69$e0y-RClo{W*WjKHP-6IT_0SJmVrcUow_!`M#jbd%l%li+BKxKn z*vI;}aEAG-z8mX8mMRNI{4Nv%l6e=KytK68PCNnD-`t`=A|{mBUg{|PJdvtt_47!G zxPev!;ms&M@>W=WmtwVD0dn!b9VVrw%qdN83PRWwY*#dHr+>Gg5aqCS=jkR8EJv%x zX%PsoGG;6Q|BGJrbwuonH)u)yEnV-m#0&P#I{%Q$>(=%t_lvAK?MtZwJo=++1S&9w zZNppUPocskm-uE@j7Y!6BkTzrlPS*^3IIVv| z+DvibzDZR~IODQ|%{<=%J8bVah@r%>W~wCerF|=^M5JVCZEpc;!5+J}E{V#e8f+}9 zh)3POqEbS~FruY17W5(&SRpUq#mm8qd4-&5-gZlG*yD$OU5G*<^oL&)x4?hR zNr#M>SZC4Wx-mE+^V#S?tMIF>P=GeTRkrLCIU{1o;A;ddL)*FX+nvE6*7_M7%>)i(qU1yCPUJteKxjSTU5z*hYk z65oz}#|oAzOrd#p_p0{6l_)IrXA88)?v_~Y=0G_hqG4={$ri_HU2#M z=BL{t<^HTU+pj^qs>5mx*LJ+A*QB*SuEvID1gF#Tr~Mtj6^wjV0+c=1lE(IPv>*c9 zXdwp&ww!hTbihwQ;CTZT#p*ZXi5$ZXTvVeYtXwycUjMa9|Gr8P69alpD%BeYq7s9` z5uQdhBSrC=<=gd%kduMLckvD`p_R9BSgV&-{Atrw0$_=fPj(~tbtv$Rm3^6=7(pJi zynL&Ew*3l7u`G-a?Z5duE;fXhA}eF!4c@s-_3smEC?{Wa_32`ceOnl|(FWEC6L3un zYzr*ary98P`tblD-Oyvv-UJJK3~Y}Pv2&tOlk2PD4K8=n9M12Rj2F34!ZKD4s&! z0ukgfSM zdgq}apMH_JcA);P4QjC;b%np!&0evX>1^|*0e_B#7i3di#gV`FtDZ`1G2vklxu@0)5|Nt1ZZn64m&|^iav1Ti zq1etvp*$+ZJlnUm=O#<4&L0|x8u{N)lARo1rP;-I;9-8=e-8a2-KPqbV}_*{(R#78 zmnJx#EzO(Jn3joB1*6s_PN1Lm!Zl{CN7n?1)FDOvZeZ)kK(H{;cR~G}$iID%rk&wd z#Ip>rBU^{EqVr5n*X|*eFAh_-eGnMHQg7GrdtZFOt9YO9I9W3%J=NWq5EIA-O%};G zG@r?AfR|~Ic_QvdZck8%)aA+1c|UI{vHqs+>L>&qixHYQV&mpjGhM*$2j`d{7@ye~ zk5dGTgV;{Z-kHoJVSkizl~=7WhD(U-VB{=~$^)#F8f_crqTWIkyjlHr^fqi*K1_Tp ztr9&3&TOwYDaPmgkRdjl7j+bX36um~+ z)sLQ+iB7TZz6I@#jzA~>PKt#nOpClI_}0Pb2jHVv@J1=wQYisCEvAgdhNC&%H*i_r zbJkqX=ZyG()rJhGRk>$4Z~(u;cZ-73-|(N5!`|@UzHe=w3N9hqG|?r^v>5HoTAp#2 zCIQ&0Ykb*v$QqPTKQ_hvHFnwQ`l}W|5;n;=*PE_cT<{~_KJ!O$?Mi^()%ur@Q`>zU zA);21jf?1+YCj(h`#0iGtec_=q`rEjzj;P)4G5#5esohkv(Y z)lQnst2hi=`^0MhR;~Y_c!f8<2ID&tsS8}*VM73BL0^U{4!)fo-^gw+T&3q5zJ>HK zgqq|aBgOuEhm1_fMtvqn1$epYh!=cVfDln>yvzTsZuZs{da;OC%k*y-nc1AQJP=nT0Eo%ab`1mH6o4!!)mCw(6#FKngV)@ zgW)aIUq4wz-vBXY7rq;6_t@K0`6VVM+}s#n;J%5An}!!a$PvLJ4^}7VFR4lW{MHdP z+q!VhNyHPh(HBV?R5-a_9InLwpt&IJy_xa!;bA{ZIZV$sJLVgwjKb=rE(EUh(aP-$J0e3Y=9FociaV;2B8SJ;#dg0)Y^-7FB`9^xv6kdVtBpu(CRmc{h zW%_2G0_Y7>QGD=aETSJ?@oxBRz%#tI?!WVCveQTFt^1+GdNCB$N8XcDK0~*St?S= zuC6^%6}`Oecb=U4AAHkfgE3{peqwW)+27OL2-Z65KfzmB+6@JrYDM%59!p5Lj{vE^ z-lb7VHNHmQQ^wIi_uF@>CtEVoG%sjlgT8rxf*j4F;1orJnYHP^m~ndDsfyHA+!Cu}ZSKAN>BJC;ye0z5 z_o%Y&7xV32<{4NX5M`-0z9Wu?B$$4llAh*|cPC|YFE6leVHyw96?+|C_7>Om;8@wT z$6aP@_b@e80mu%%SZk@Uu;&HklWXsnTf5EFLi~}<4hK18e z*n{6A{M@1kzdwf0n9f4Y7U4mfM8^J3TxG8>NEc)RrKCj;zmv|63u!l=(5t}|aU?1| z6M?%M3#P^2CUBbE12NWk2Z%CJQKi;+-uEXYwQ1t^fv8Km@<)WRjcs=3%sw?GBI@sgK+VdR-fSFq~h9 z?b(S$L_%7iLP@)1UwwG(Cl%K9g-__vi58_sgOt)hN%-97h!zzaq9Uf-h8?9IMR%5@ z?HtIrM}F9cGE|CQC;gcx9j? z|7E{wJs&dPX)`mCT4`+vD{+C!==|pw(w^*uhn;U}W(d@R1zVqDEQ|14+H0-`RGuhL zEd^=ZdUOI_7pSA&_A#Q*mz$X9h3cU{boP}aZ4B)pl$Mb$&;PWQ_1uu>0?ij^C^n3c zTf&JJS70=gnAgP94!5A^(X_dfGH7T7`c#A+|x}8!MC+xeF;9^Q*x5jU$R$v~{Su*q;b?z)(c*)3d zPJP=jt>w?#Fd1Vtd^%h2sf+0jA8abpoBGF;ebe%8{}A+8ke#Clq-FEJwI ziSKY|2;9b7!$4cf+z*9K^~Vr{s_t>-(@lcGF4H;gwfAT^XutrCamOfWGRS0SwqSYomT#f1b}2+g>1W`gP*$% zy5uM3V&(fPihHV0{xD~qC*myc2z&w3+oq=yIO_XalB%z#> z$jxKG21y1^Re--(Lh+n|uaxqmkiI5?e}75c(U%_UB}>pXH@DUZ?Y52T@w*w8_fdz` z^rWvF#%m_=Sdc_|NqHQ0wg~m;TFdaVHi|N~r7;3c)E4OVk+kzg$?F9#$le$`^4EE1 zZwMquzn-z`u_~OQ9eT!ls56P5|A4`=EKUE_&7#UtyVx}td?}}h#--sWJ;NH2fx)^G z%cqP01M<7<*0xaL{Ulg_Hz+{J549(BnPY}rCCZ@o`G0J%@5IH*T6?Q`OpP4!r9_;s z*So)3@uO<{j&Y5u2mWvJ|K+eA=}5ObK772&6?5y#Ln%8)(EkIF3y(q(z~Uk zT^oh1cBehhi*EQEn$3yd8VYU)p~rr0ev4(ILGzv0UZ)-_(Ns_8auCu8fQ7v1*9o9> z1m#Ao4}P4`&!5(0+Z{mLc|YyH(rT7&2Ye{p`KZL)~+c5Dv;wQ>tcIEFcge$ZnWp3*ew4zfuXdB7 zfa;XZ=2$)QV?_Vt5~T)th-oQ9QZFVdvQxU`HUFoZlcUJa%<3O9F9Z;5Wt>H#q|>Vi z(jY6;{BFNfm-Jfs7ZL_q!K)UARC|fUOI=oNb!Y$sLO7OZU2u0|jcD{D?1aHPX}sYX z3IxF_YE}yeDqTEyOY~2l7A*xRNXmFdO9<{|2ukzBR#h(&`+C{y0yJ;lWQ2(s$7LVP zZO0n^7C!Ch<8_WW@KOG~K2YfF*4bXTw5et3uI1b;StQI=ad5$awaBN%`p((3Di4TbNDjsZ` zhIe1SZ_g363SB4-)e5Wvm#Na>rr2rcWxv~Kk`0DLWXEAd&s69Ia+wBD`gh9ZD>`5s zky%?&bf|UrXxEb!=I`!cQP}svFH(%m6IHdxCCf>IYR8V?HHM8~iT9u&sBMe#}_O4A5x_f&^i8!yG z_`$!X-VY)J#`Kf&atAA8A)te{RZNYG0^W9EeCfGj`l6ipp<;_B47pT1x(6Y%oHa(D zpPy7_z9NAG-_KWyeG894y~k#)#s69K3mp)6;ECE=OD^sc*Z4_wXa*z32%&unyO99V zEatWv0-$6-f9ta$ul1+ys(P$eD6a1yP;ypB^gBuKin}b1R0eMy_ zh%3~kj5p%-Wd?4w*C_gvI;O}A}u))xJ&JCLf}e#={OdZ@<7vPs?4{jYAzZzOaZ63=62x`-Pd_$ zO<2(d@Cbob+4c$X{so*RsyhHA&l;IvD%E6L$YddnpRC5@A|V=dJv1)#v7fnOmFW4gIJh4^&`431}gxXI{ zgo8WhDh9M`HY&>&2#w#t1EGmwbZzFuZt)#`C5D3+HE|gl1#c-`kT(zhM8cZyX7up% z4UCC;wMfUZ$~u6mifM%rlA5?LYNj-e0zlDV-*HV94`odPk}%DRp;y6~;)c54(}e-+ zJwMR(@@`Y$+gRiP?Yi1ZDwy&6O=32CX-}~^!%_xSL9v`0l>!%9jCFwFt)_4}JV3G( zI!6}cO4@rK9P6t3;{ES{p3Rw!-cKv1iRy>WN1G8+t6i(FtDQ>pc0o7lrQwhp7>XDx zjx}xSt6!#=RE5uBFPBjgJMFP|;bK$VZv{o=l&h=rPF!Znd&OLMXBsA*HBr%gM>iKn1GGbkR6f7{sk@q88^QjYQVsGbSm=R>8cp zH)Hr_amCX~g5^gcDPN!fsVY)pK>_lYyuhiWX9XkX3z?se*NUHCmxCK;E1TYjg!y+j zBqkQI1Fj_KwynDb?o5+zOPH@C^#@W7ll1Hwa(3D3BFD?3cY-lO)ZpHJ4Zz+!U5iXi$4$Y9H@KEm#!VLKx;wf8@MNBpOR+{4D z7_!0Ts#UelNvzo}L~Y8Q*<5sl2xAWy>tiOwsoJa-lC+=X37b~<3BQ7p-xN3IwbE(Y zUckEr`o0bh@pDc5vd0}_Fo+P53nk5QKof^oFJ;c{=Mj)wcT`XHsAIns;Z%PB9A9O? zS*ofS6^C)!@SbV(+vPVUPJs6TGvu7!eS#O+BvVi+Y;oNYHlvv-lg{R<2G&#Hs#bon=^tdXC>OHc;@kx zijS!|Yg5kOSfN=Z$0wFR$(9cxT3vs@K&SR?>@F;hN=>5{u?_LF_9MrMpg^DI*97%E7`6mSB3q9T=de?aU}c~z zt&F=hNn+C{C6Y{mq%_XJYsiqfD%Jh-qKy*Tof@>XDGTr z8@K}4sdniRb(V;dy0@n+)$}`n2UQx7isM=4gOE;&1YZdL0H#G?xzkB-O~p+Ge#dZD z?{+rGW&CHUQL+iYbWvt<+)eZ%`d5TiklE>ZZRD9Al5|z^Zx6>saz$lu4eWJYh4?3y zIw3S3CESwIFpSBGv1m1g?<>K2{-UeBd4+<~iqWC^7Zn@6`9Yb+&#_T>^h$$j5XDa$ zv1BHeOwfW$Q!u_XIKmTlHqBE->Sz0+DCIHN&Z=@a#t!e2cMG}Ir+csO9IA3!-76No z%AtPWwn;fIm_^vTua^6YYV<9XMM|=Se&M7=e$mHQK*>qVyJHCs$ix+0l=^}FUh|N? zovV{dxqgeqz~vg_ZXLy~`^JFI32%s@fO$~iPAD!fU)iT0C!PsJhU!d9a;7`HeI`~H zMK{uQeOWBm%8vp`F>tmQnI3c(W$EGh9bW!?5`{%y35 zWL!mboRz4*R$%8B@X{T61~&o^c)OX~fe6G;$1D4`PL^q0r9?hZ;Uk`z(We}eI5>>8TWlbyV3nE;b8jK5G{;jszLoF3TTS%yB~8omG@&~Ti4LSwy$bQ z2L`qcyht~_Hkz}|Vv>^=>Uc$-c`fOFMiUx%b!mw|o${TFfd?SR6YuMgLeS0dx?rMo zxIMc_&Z+W=DGr;V(La+KZ+a6C$OttEzfTHmV4W-ux5d=f*7}z#Hb|@{77A#t2yIlW zOf+;$nvihR>OKDyAPKrV2%?jJH2J6A2|C)OJo53 zqM*5p95jh&vyoXeJ?J7A7Evt~Xy~OATF1sK*mv>QAxOR=gx8zy39L{3%h-cJKElx5q5~SV)Qr>>l)f`lOYt~xIv^6LH%#H=&qq;3liLp zIl@H3(+6S;$8hN$LoA9KO)$?qUs~c&jZ1_2EUKGmu_Afavm~|9udnjkoxbt_!5bOp zZa{sMK?U3%^`75b6?WHbca*6Q?kFUjkAcAG$LV%9N1KskdE6CVG0O?6IMmweOaDhv z)YUYU(meeoCi!HOF!$ZnISrBSkh2k|{VG-zXBCwNBo@OHju17WntWml;Sgk>ue26l zjXy{Jk%auMM-)|p%E$i{sR?l>ZqV_4HS(Ql6ghBo?7bIaGpS^|FSq2aY?gDY5`|2R zn5pdlrrMk}`6X)vC-CmJ$~{MgDyNHeVD+6S^BJ>?)(^Mr9Hlp*OkWCxEXuT5biPn_-8{&duD-5R8(##@ahp z(vNAK_7Siw(&dj(rM5N)6)i*OAzn~0ZTR0HXT1rc`SllC!{w(V8!dUABB(3MAYvd5 z>IK;TU+D6j%N70hQ?bN1;Y}^?$W4>p0lxl+FP!E3y!g%~;vitop4pu8=x4F*u4pegvbki|#U&ls`?8;kBIret-6N5W7l=L~ zej@8Am&X}^!bP~SO)oj9Olu69w1IIPYK$6_gr#pUx~pTD*YHGqO4=`2O<5zc1zR;H z^N~!iK5w$c!Yti+1YL2Cd3|67XX}J#vx)YoX8~UZZB0uv!@*n7ZM`6L>?pG?I-W#_+52!gS-S zd>EDDz@}Cm9pa*l_EdNBAj0@kA_xKkwN_nGpv@)B*c% z-|-qMZ+Hi4D3@5U^2dC`2E4=|g7c1L6VN>i3zU^Z$EeA>Gv>%NYDg?u*)X)xFqygN4D#RX9BEbTC;IqX=?EB%LIlAkGE zpxT({oRPf{=co0lI*fEVmNz0Er`#wjyo&QNti9%HzDc6|tA&E1jb3v_I1pnGMQShL zE4BMCjFlW@joh>cTkrR+iK5$t&%Fu`3*T*%M8Xf$C-Nm;;wxzfl=AB4MeQsC-3WW} zGQiOdL2|8b1uh*Qju&-|1#So z*G?A)Js%ht@Zk#wTNlnBc5!jJTtT(Qgt8`tLL+nH_wm!i?fkcE8OJr!7za)tiP@l| zqa&&YM%b-mcfJu@U04HZ1kek7xNDgsC?LAdjB-<~l9>JZUF4!jdaA{yO`9GuZ{T<= zuf~f-$+c13sSnfdummG#lY`ebAG~H@GvbpQ-cS_f3`Bj-vZywjBLiSyx}i6_aNv$d zIq_C2vYN_PR0ima`;-*4G6Z{WCfa1JhhM?nb7Y!U$e7Hs+Rv!7w@JxQ3--!b0DRTj!?iBy^)>2V73WIFsx{fLB8B znfxBR6vcOs#mWTd)=|i@{{;^f(ukI zBsw}6zzsH;SlgVaYhk)aLSpzftFo%RLWZK_lee$e`fawylqC%Ltm{3c=ttvyI{@50 zzC7lBve#Y%>xzfOgih7KZ0Q~I;vl&V#UOl@AOd^`(`UEo0l=j$?yK6@gSOqvqmWI= zS#97_FPx7jpph>L+Ta-=P%xVq=0+2tz5U3~_3%l<#J0CKY1)7kNDcaf*RYila9e_k@q zH8)-mk1@$bsD)WR!JMeA4S%iYSLYIP4|GE<0>=*O$0zSGb+*Y=lH12^pTG{6<~<Y|>98=q*`uelV|H76d93^#xh*_~=|K6B;UO>%2WE|Hoi1yHtOb-m!rgbB zt?$@>;Rh^Ws4Dck4o<$FlAI=#ki7hyb2)#v05=#KF%w;%8#OM7#7Px6?j!N3kQH9m zn1S)}ai8TzL+M6Y%>d;o5xwtiyuM>8fwo34ilv)OZgEPUpPLl%-OkM`gvrT}K#t|gd9@))^89q3 zC!F5^EsPTIq2;t+S{D>T0-*G|e)cGX9SN-GJW{{>$XLbYvp4($(GYg2BQ2ZnQk#xjSs3T1M;KTXRnaUhoES zdZ2?Au74A#iYDaE65$s!J33LbuG%3Z9nE?g9=v+?gd%j-|J$6?4>t!ctSb?TlGh}j zPUk0o4iNTkzljB|x+%NXd%<@U7lRF=BuDIcQ%|e^N#MJyQ`T$qqCP8@wfrP}{l*KnfqvbTQmIdy+2v>fVCc!_F8*KR=`;V-(0QewnYmj*C@Dmq!U1 za0PKs0ulS>*DK^3^Ao4;JQFZx-s07y>g#@uP;A`6H!7N^ujbb!TI1n4AaZ2jz9^4F z5v@^qfp2J{ncZuPvPvi$HB9|m9U4JK$-x}E;iv_ThmuQqSfuZcGaf(MPe46-uGqZ; z(6|Z;x1F~T&|J00v|qD~w$1G&uPC!kO!S2o)?AvQea_y9gEbv*&rhkxoFn=y=sog# z(%O7-2Q;^R0cjwRR;Hex`*2Dpd{qyU9`@^z$GgwXl)sMGZ9=}Q3codsEj1Z)xpUoB zxM~txxX?vK%?0*7njaB6pHOIT=h~DL+Kg%`SIEvaocTJ3J;X1NtA-=n&0p;B8+

R{m?D~7t6Pp;m178`Uk3?l2yD8c?8tFV>J2cBz^d}F~kNlYkYzo z5BJFwXoI_JA@f6U0lq!paY2~ViB-dx_ShF?E$#|zQC9V#_BLeGuz+PZjK(o*@(DgC z^4^txbChmKzGAQQ?p{~pwRvpGg8Ep9-Xy(pVI!$9V$RrG%Q#BNf6A#7yK2kqt8>=U z@5_uHuGIYVeT$U%C*>(=`p>c|$?#7q0n&lJOWcmPI-!jUzM;$*_P!_FSTr$`HkRL^ zEM$N(iSroSS+1R3YIa zw4E2`rm5Msh?cOaiHQj?tTjo2)-NaOrKhdjDRDcrXf`{z_-KeLkiUh#jy4f~nE=Y8*^nPz;T8Ydzs{@5axm5F&IcDk`eQ{%WSH(7`6Z=SrQ4 zjV4n$5q{5!b*MWOOtBS_+@z-=e9%rO-JzM>uqVsKY=5I9*=P~Hr#EOg(?2N=4TSg1 z@C6Nc^?YNj5KNy$-~yYc7PCYG_tAM27j1yb*7%EwtuaV&_R+D@H8>wc-Ai{0`^p(T zYeea8czfXB+KiGFp9|o57gtoVo&;TPn_{Nh2mFV%EWg-{ts&t6x5k9AmR3#QT?a-jg!z~k&y7Hr(M`!5Na{I!3jeqKG|SsG$d zke1pm0ZyMq9(M%(!F?iwMj3b#i>@lMtn^nUCUW$ije1$xIrrDm#zQpyR4d1o@5AypMRip%K8}g4 z>(60NX~AVtMwx<;0oh3h>u?~P)|9>N`i(iuabMp*e6fA+B32gpUy0urp;A|E#Nz`* zX@W}dP4?{UNa!CNbS~()yNnJ9t;2r&SDTa0E94cRCTmP);L?6_b?F}qx~SdN?|9x< z2|jJTElu)_CEX1e=|*}zP@{Ab5ZIr1XF%Vv$xM6j=O2gHdJeK| z&-lF=9v=S27q>CXtsftJKR}*1ki<1rJ;B414hj0SErUP$zAPOQCms!1<_3X}`q`A_kpu;{>~7gAoz$CufAL?%L9ig*HTfdFL((uckPsDgvE`w7UaE*O{v zijQIqv0ebz|NfJomGV3Q@HUV2pvHHg&c`^Me=MnsYV&e)N2+R5Wbew2ch#!wsJDgR zhzXgAmPe@8Wz%|XqmpA4ndCcr7+5Q0;)j&NGLWq`GV!*33^tig>8<>%V3AJ$9Y~+X zyH+61!r>PtAaNqd(nvb+YGi1Xiv}+}LP;$ZIaIIOP)Y7|xo_;!YVMlAf#qu)e|v>^ z8vR5i+Mh5~$qoU|LDzeBzIkyv`MHhf08Eu$%ett7sh7XKE#WHJ=+j{SN06TC8Q-g7 z#cQ_k^bq0XFFWGKB-W}m;o1EL61QB7Ctz2!g03pV&XOhoj#egR?CavYT@1Zu6^>{8 zL9e-P4M0$zajPd0CChN;4^DMbv8i(s;jSjadnDw2rlF#0qB3`ng;#)-%s3@ua2w(&`1E$fT2d z-iiii*Dt+YAa#h1jg{(J|6oVNTA^njp1spWZH+5ij1(&Pwd7Pn?amHf{?Ps^pM_t$ zR0$8{fZS{B;T#o=eGug6;3$_1Tb)}r60f-mRimbY7kRZPDt@Z3Nd*ju0RLK}(ERTl zv{mjNt9_W(U9*@iEWxKrKg?>%&dx4E(4U6Sm{C>RU(kWM1mvTZDjgfvqynK2e2G}w zfY;P(qKQ)pJ7~K7>$xfrIRJ7@xVI|Hp~(g@7y8v^ql)vOr8j(|C`wyJq`d~g@V)B( z-fb(G)b6_3w3}e-_{DrvMUWAQ0AJ`-CKF4e2{?6myW=J7;?fQPV2G+|!Y}c)j*r9f z-l|fEese<8bCrZ>ixH`?&M&213_AI5P?JgUiPKx!_ZCT>uAIhbXEwxfQ`7W}lwKcgZJ(8b3R7|5pfSMUgW0%J>s<6y`LKW{kH

J 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 literal 0 HcmV?d00001 diff --git a/img/scan trend.xlsx b/img/scan trend.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..12aab12f26ba73293703024c3ad6bc9c927d1050 GIT binary patch literal 9621 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 H)tmnX)k#7Q literal 0 HcmV?d00001 diff --git a/img/target.png b/img/target.png deleted file mode 100644 index 20054353ff92e3ebe172a4e6894722c011038c9b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37718 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 literal 0 HcmV?d00001 diff --git a/src/main.cpp b/src/main.cpp index f6441b7..cba8347 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -16,7 +16,7 @@ #include #include "testing_helpers.hpp" -const int SIZE = 1 << 8; // feel free to change the size of array +const int SIZE = 1 << 20; // feel free to change the size of array const int NPOT = SIZE - 3; // Non-Power-Of-Two int *a = new int[SIZE]; int *b = new int[SIZE]; @@ -51,19 +51,19 @@ int main(int argc, char* argv[]) { printArray(NPOT, b, true); printCmpResult(NPOT, b, c); + /* For bug-finding only: Array of 1s to help find bugs in stream compaction or scan + onesArray(SIZE, c); + printDesc("1s array for finding bugs"); + StreamCompaction::Naive::scan(SIZE, c, c); + printArray(SIZE, c, true);*/ + zeroArray(SIZE, c); printDesc("naive scan, power-of-two"); StreamCompaction::Naive::scan(SIZE, c, a); printElapsedTime(StreamCompaction::Naive::timer().getGpuElapsedTimeForPreviousOperation(), "(CUDA Measured)"); - //printArray(SIZE, c, true); + // printArray(SIZE, c, true); printCmpResult(SIZE, b, c); - /* For bug-finding only: Array of 1s to help find bugs in stream compaction or scan - onesArray(SIZE, c); - printDesc("1s array for finding bugs"); - StreamCompaction::Naive::scan(SIZE, c, a); - printArray(SIZE, c, true); */ - zeroArray(SIZE, c); printDesc("naive scan, non-power-of-two"); StreamCompaction::Naive::scan(NPOT, c, a); diff --git a/stream_compaction/efficient.cu b/stream_compaction/efficient.cu index d1c7813..618d16a 100644 --- a/stream_compaction/efficient.cu +++ b/stream_compaction/efficient.cu @@ -3,12 +3,6 @@ #include "common.h" #include "efficient.h" -int* dev_data_array; -int* dev_temp_data_array; - -int* dev_zero_one_temp_array; -int* dev_idata_array; -int* dev_final_array; namespace StreamCompaction { namespace Efficient { @@ -34,23 +28,31 @@ namespace StreamCompaction { __global__ void up_sweep(int* dev_array, const int fit_size, const int d) { int index = threadIdx.x + (blockIdx.x * blockDim.x); - int remap_index = index * pow(2.0, d + 1); + // int remap_index = index * pow(2.0, d + 1); + int coeff = 1 << (d + 1); + int remap_index = index * coeff; if (remap_index >= fit_size) { return; } - int two_pow_d_add_1 = pow(2.0, d + 1); - int two_pow_d = pow(2.0, d); + // int two_pow_d_add_1 = pow(2.0, d + 1); + // int two_pow_d = pow(2.0, d); + int two_pow_d_add_1 = 1 << (d + 1); + int two_pow_d = 1 << d; dev_array[remap_index + two_pow_d_add_1 - 1] += dev_array[remap_index + two_pow_d - 1]; } __global__ void down_sweep(int* dev_array, const int fit_size, const int d) { int index = threadIdx.x + (blockIdx.x * blockDim.x); - int remap_index = index * pow(2.0, d + 1); + // int remap_index = index * pow(2.0, d + 1); + int coeff = 1 << (d + 1); + int remap_index = index * coeff; if (remap_index >= fit_size) { return; } - int two_pow_d_add_1 = pow(2.0, d + 1); - int two_pow_d = pow(2.0, d); + // int two_pow_d_add_1 = pow(2.0, d + 1); + // int two_pow_d = pow(2.0, d); + int two_pow_d_add_1 = 1 << (d + 1); + int two_pow_d = 1 << d; int t = dev_array[remap_index + two_pow_d - 1]; dev_array[remap_index + two_pow_d - 1] = dev_array[remap_index + two_pow_d_add_1 - 1]; dev_array[remap_index + two_pow_d_add_1 - 1] += t; @@ -60,14 +62,23 @@ namespace StreamCompaction { * Performs prefix-sum (aka scan) on idata, storing the result into odata. */ void scan(int n, int *odata, const int *idata) { + int* dev_data_array; + int* dev_temp_data_array; + + int* dev_zero_one_temp_array; + int* dev_idata_array; + int* dev_final_array; + // Init all the requirement data: int n_ilog2 = ilog2ceil(n); - int fit_size = pow(2, n_ilog2); + // int fit_size = pow(2, n_ilog2); + int fit_size = 1 << n_ilog2; int oriSizeInBytes = n * sizeof(int); int fitSizeInBytes = fit_size * sizeof(int); - int blockSize = 128; - dim3 fullBlocksPerGrid((fit_size + blockSize - 1) / blockSize); + int blockSize = 32; + // dim3 fullBlocksPerGrid((fit_size + blockSize - 1) / blockSize); + dim3 fullBlocksPerGrid((fit_size / blockSize) + 1); cudaMalloc((void**)&dev_data_array, fitSizeInBytes); checkCUDAError("cudaMalloc dev_data_array failed!"); @@ -85,23 +96,29 @@ namespace StreamCompaction { int d_max = ilog2ceil(n) - 1; // Up-Sweep: for (int d = 0; d <= d_max; ++d) { - int threads_num_needed = fit_size * pow(0.5, d + 1); - dim3 up_sweep_blocks_per_grid((threads_num_needed + blockSize - 1) / blockSize); + // int threads_num_needed = fit_size * pow(0.5, d + 1); + int deno = 1 << (d + 1); + int threads_num_needed = fit_size / deno; + dim3 up_sweep_blocks_per_grid((threads_num_needed / blockSize) + 1); up_sweep <<>> (dev_data_array, fit_size, d); } cudaMemset(dev_data_array + fit_size - 1, 0, sizeof(int)); // Down-Sweep: for (int d = d_max; d >= 0; --d) { - int threads_num_needed = fit_size * pow(0.5, d + 1); - dim3 down_sweep_blocks_per_grid((threads_num_needed + blockSize - 1) / blockSize); + // int threads_num_needed = fit_size * pow(0.5, d + 1); + int deno = 1 << (d + 1); + int threads_num_needed = fit_size / deno; + dim3 down_sweep_blocks_per_grid((threads_num_needed / blockSize) + 1); down_sweep <<>> (dev_data_array, fit_size, d); } + timer().endGpuTimer(); + // Copy to output data: cudaMemcpy(odata, dev_data_array, n * sizeof(int), cudaMemcpyDeviceToHost); checkCUDAError("cudaMemcpy odata failed!"); - timer().endGpuTimer(); + cudaFree(dev_data_array); checkCUDAError("cudaFree(dev_data_array) failed!"); cudaFree(dev_temp_data_array); @@ -119,8 +136,16 @@ namespace StreamCompaction { * @returns The number of elements remaining after compaction. */ int compact(int n, int *odata, const int *idata) { - int blockSize = 128; - dim3 fullBlocksPerGrid((n + blockSize - 1) / blockSize); + int* dev_data_array; + int* dev_temp_data_array; + + int* dev_zero_one_temp_array; + int* dev_idata_array; + int* dev_final_array; + + int blockSize = 32; + // dim3 fullBlocksPerGrid((n + blockSize - 1) / blockSize); + dim3 fullBlocksPerGrid((n / blockSize) + 1); int sizeInBytes = n * sizeof(int); int* zero_one_temp_array = new int[n]; @@ -137,9 +162,11 @@ namespace StreamCompaction { // Scan Init: int n_ilog2 = ilog2ceil(n); - int fit_size = pow(2, n_ilog2); + // int fit_size = pow(2, n_ilog2); + int fit_size = 1 << n_ilog2; int fitSizeInBytes = fit_size * sizeof(int); - dim3 scanFullBlocksPerGrid((fit_size + blockSize - 1) / blockSize); + // dim3 scanFullBlocksPerGrid((fit_size + blockSize - 1) / blockSize); + dim3 scanFullBlocksPerGrid((fit_size / blockSize) + 1); cudaMalloc((void**)&dev_data_array, fitSizeInBytes); checkCUDAError("cudaMalloc dev_data_array failed!"); @@ -156,8 +183,10 @@ namespace StreamCompaction { int d_max = ilog2ceil(n) - 1; // Up-Sweep: for (int d = 0; d <= d_max; ++d) { - int threads_num_needed = fit_size * pow(0.5, d + 1); - dim3 up_sweep_blocks_per_grid((threads_num_needed + blockSize - 1) / blockSize); + // int threads_num_needed = fit_size * pow(0.5, d + 1); + int deno = 1 << (d + 1); + int threads_num_needed = fit_size / deno; + dim3 up_sweep_blocks_per_grid((threads_num_needed / blockSize) + 1); up_sweep <<>> (dev_data_array, fit_size, d); } // x[n - 1] = 0 @@ -167,8 +196,10 @@ namespace StreamCompaction { cudaMemset(dev_data_array + fit_size - 1, 0, sizeof(int)); // Down-Sweep: for (int d = d_max; d >= 0; --d) { - int threads_num_needed = fit_size * pow(0.5, d + 1); - dim3 down_sweep_blocks_per_grid((threads_num_needed + blockSize - 1) / blockSize); + // int threads_num_needed = fit_size * pow(0.5, d + 1); + int deno = 1 << (d + 1); + int threads_num_needed = fit_size / deno; + dim3 down_sweep_blocks_per_grid((threads_num_needed / blockSize) + 1); down_sweep <<>> (dev_data_array, fit_size, d); } @@ -179,10 +210,13 @@ namespace StreamCompaction { cudaMalloc((void**)&dev_final_array, final_count * sizeof(int)); checkCUDAError("cudaMalloc dev_final_array failed!"); StreamCompaction::Common::kernScatter <<>> (fit_size, dev_final_array, dev_idata_array, dev_zero_one_temp_array, dev_data_array); + timer().endGpuTimer(); + + cudaMemcpy(odata, dev_final_array, final_count * sizeof(int), cudaMemcpyDeviceToHost); checkCUDAError("cudaMemcpy odata failed!"); - timer().endGpuTimer(); + cudaFree(dev_data_array); cudaFree(dev_zero_one_temp_array); cudaFree(dev_idata_array); diff --git a/stream_compaction/naive.cu b/stream_compaction/naive.cu index f93ae28..3532fd5 100644 --- a/stream_compaction/naive.cu +++ b/stream_compaction/naive.cu @@ -3,8 +3,6 @@ #include "common.h" #include "naive.h" -int* dev_data_array1, * dev_data_array2; - namespace StreamCompaction { namespace Naive { using StreamCompaction::Common::PerformanceTimer; @@ -19,7 +17,9 @@ namespace StreamCompaction { if (index >= n) { return; } - int two_power_d_min_1 = powf(2, d - 1); + // int two_power_d_min_1 = powf(2.0, d - 1); + int two_power_d_min_1 = 1 << (d - 1); + if (index >= two_power_d_min_1) { dev_array2[index] = dev_array1[index - two_power_d_min_1] + dev_array1[index]; } @@ -40,15 +40,15 @@ namespace StreamCompaction { dev_array2[index] = dev_array1[index - 1]; } } - /** * Performs prefix-sum (aka scan) on idata, storing the result into odata. */ void scan(int n, int *odata, const int *idata) { + int* dev_data_array1, * dev_data_array2; // Init all the requirement data: int sizeInBytes = n * sizeof(int); - int blockSize = 128; - dim3 fullBlocksPerGrid((n + blockSize - 1) / blockSize); + int blockSize = 32; + dim3 fullBlocksPerGrid((n / blockSize) + 1); cudaMalloc((void**)&dev_data_array1, sizeInBytes); checkCUDAError("cudaMalloc dev_data_array1 failed!"); diff --git a/stream_compaction/radix.cu b/stream_compaction/radix.cu index 2ad60ba..bd2048d 100644 --- a/stream_compaction/radix.cu +++ b/stream_compaction/radix.cu @@ -20,7 +20,8 @@ namespace StreamCompaction { if (index >= n) { return; } - int curr_bit = pow(2.0, pass); + // int curr_bit = pow(2.0, pass); + int curr_bit = 1 << pass; int bit_res = curr_bit & data_array[index]; if (curr_bit == bit_res) { // Current bit is 1: @@ -66,15 +67,18 @@ namespace StreamCompaction { } void radix_sort(int n, int* odata, const int* idata) { - int blockSize = 128; - dim3 fullBlocksPerGrid((n + blockSize - 1) / blockSize); + int blockSize = 32; + // dim3 fullBlocksPerGrid((n + blockSize - 1) / blockSize); + dim3 fullBlocksPerGrid((n / blockSize) + 1); int sizeInBytes = n * sizeof(int); // Scan Init: int n_ilog2 = ilog2ceil(n); - int fit_size = pow(2, n_ilog2); + // int fit_size = pow(2, n_ilog2); + int fit_size = 1 << n_ilog2; int fitSizeInBytes = fit_size * sizeof(int); - dim3 scanFullBlocksPerGrid((fit_size + blockSize - 1) / blockSize); + // dim3 scanFullBlocksPerGrid((fit_size + blockSize - 1) / blockSize); + dim3 scanFullBlocksPerGrid((n / blockSize) + 1); cudaMalloc((void**)&dev_radix_data_array, sizeInBytes); checkCUDAError("cudaMalloc dev_data_array failed!"); @@ -110,14 +114,18 @@ namespace StreamCompaction { int d_max = ilog2ceil(n) - 1; // Up sweep: for (int d = 0; d <= d_max; ++d) { - int threads_num_needed = fit_size * pow(0.5, d + 1); + int deno = 1 << (d + 1); + // int threads_num_needed = fit_size * pow(0.5, d + 1); + int threads_num_needed = fit_size / deno; dim3 up_sweep_blocks_per_grid((threads_num_needed + blockSize - 1) / blockSize); StreamCompaction::Efficient::up_sweep <<>> (dev_f_array, fit_size, d); } cudaMemset(dev_f_array + fit_size - 1, 0, sizeof(int)); // Down sweep: for (int d = d_max; d >= 0; --d) { - int threads_num_needed = fit_size * pow(0.5, d + 1); + int deno = 1 << (d + 1); + // int threads_num_needed = fit_size * pow(0.5, d + 1); + int threads_num_needed = fit_size / deno; dim3 down_sweep_blocks_per_grid((threads_num_needed + blockSize - 1) / blockSize); StreamCompaction::Efficient::down_sweep <<>> (dev_f_array, fit_size, d); } @@ -139,12 +147,11 @@ namespace StreamCompaction { cudaMemcpy(dev_radix_data_array, dev_output_array, sizeInBytes, cudaMemcpyDeviceToDevice); checkCUDAError("cudaMemcpy output to radix failed!"); } + timer().endGpuTimer(); // Copy to output data: cudaMemcpy(odata, dev_output_array, sizeInBytes, cudaMemcpyDeviceToHost); - checkCUDAError("cudaMemcpy odata failed!"); - - timer().endGpuTimer(); + checkCUDAError("cudaMemcpy odata failed!"); cudaFree(dev_radix_data_array); checkCUDAError("cudaFree(dev_data_array) failed!");