From 1e3231322494059e0979ceadff644aaf3a850921 Mon Sep 17 00:00:00 2001 From: Peter Brown Date: Sun, 5 Jan 2025 16:16:35 -0700 Subject: [PATCH] Fix timer0 infinite loop bug (#123) --- bench/cycles/cycles.cpp | 2 +- bench/cycles/sprites_cycles/SpritesABC.cpp | 62 +- bench/cycles/sprites_cycles/SpritesABC.hpp | 6 +- bench/cycles/sprites_cycles/img_Sprites.hpp | 16 - bench/cycles/sprites_cycles/img_SpritesU.hpp | 58 +- .../cycles/sprites_cycles/sprites_cycles.ino | 219 ++- .../sprites_cycles.ino-arduboy.hex | 1718 ++++++++++------- src/absim_timer.hpp | 10 +- 8 files changed, 1195 insertions(+), 896 deletions(-) delete mode 100644 bench/cycles/sprites_cycles/img_Sprites.hpp diff --git a/bench/cycles/cycles.cpp b/bench/cycles/cycles.cpp index 3314973..abc984a 100644 --- a/bench/cycles/cycles.cpp +++ b/bench/cycles/cycles.cpp @@ -56,7 +56,7 @@ int main(int argc, char** argv) else { prev_cycle = arduboy.cpu.cycle_count - prev_cycle - 1; - printf("%" PRIu64 "\n", prev_cycle); + printf(" %" PRIu64 " |", prev_cycle); prev_cycle = 0; } } diff --git a/bench/cycles/sprites_cycles/SpritesABC.cpp b/bench/cycles/sprites_cycles/SpritesABC.cpp index b9e6663..c863bb9 100644 --- a/bench/cycles/sprites_cycles/SpritesABC.cpp +++ b/bench/cycles/sprites_cycles/SpritesABC.cpp @@ -1,7 +1,7 @@ #include "SpritesABC.hpp" [[ gnu::naked, gnu::noinline ]] -static void SpritesABC::draw( +static void SpritesABC::drawFX( int16_t x, int16_t y, uint24_t image, uint8_t mode, uint16_t frame) { @@ -73,12 +73,12 @@ static void SpritesABC::draw( , [spsr] "I" (_SFR_IO_ADDR(SPSR)) , [sreg] "I" (_SFR_IO_ADDR(SREG)) , [page] "i" (&FX::programDataPage) - , [drawf] "" (SpritesABC::drawSized) + , [drawf] "" (SpritesABC::drawSizedFX) ); } [[ gnu::naked, gnu::noinline ]] -static void SpritesABC::drawSized( +static void SpritesABC::drawSizedFX( int16_t x, int16_t y, uint8_t w, uint8_t h, uint24_t image, uint8_t mode, uint16_t frame) { @@ -86,58 +86,50 @@ static void SpritesABC::drawSized( SpritesABC_drawSized: - push r4 - push r5 - push r6 + push r14 + push r15 + push r16 - ; w * (h >> 3) + ; w * (h >> 3) * (plusmask ? 2 : 1) mov r0, r18 lsr r0 lsr r0 lsr r0 + sbrc r12, 0 + lsl r0 mul r0, r20 movw r30, r0 - ; t = frame * w * (h >> 3) + ; image += frame * w * (h >> 3) mul r30, r10 - movw r4, r0 + add r14, r0 + adc r15, r1 mul r31, r10 - add r5, r0 - adc r6, r1 - mul r30, r15 - add r5, r0 - adc r6, r1 - mul r31, r15 - add r6, r0 + add r15, r0 + adc r16, r1 + mul r30, r11 + add r15, r0 + adc r16, r1 + mul r31, r11 + add r16, r0 clr r1 + + 1: - ; image += t - add r14, r4 - adc r15, r5 - adc r16, r6 - - ; if(mode & MODE_PLUSMASK) image += t - sbrs r12, 0 - rjmp 1f - add r14, r4 - adc r15, r5 - adc r16, r6 - 1: - - pop r6 - pop r5 - pop r4 + call %x[drawf] - jmp %x[drawf] + pop r16 + pop r15 + pop r14 )ASM" : - : [drawf] "" (SpritesABC::drawBasic) + : [drawf] "" (SpritesABC::drawBasicFX) ); } [[ gnu::naked, gnu::noinline ]] -void SpritesABC::drawBasic( +void SpritesABC::drawBasicFX( int16_t x, int16_t y, uint8_t w, uint8_t h, uint24_t image, uint8_t mode) { diff --git a/bench/cycles/sprites_cycles/SpritesABC.hpp b/bench/cycles/sprites_cycles/SpritesABC.hpp index a8c3d5e..34a320e 100644 --- a/bench/cycles/sprites_cycles/SpritesABC.hpp +++ b/bench/cycles/sprites_cycles/SpritesABC.hpp @@ -16,15 +16,15 @@ struct SpritesABC static constexpr uint8_t MODE_SELFMASK = 4; static constexpr uint8_t MODE_SELFMASK_ERASE = 6; // like selfmask but erases pixels - static void drawBasic( + static void drawBasicFX( int16_t x, int16_t y, uint8_t w, uint8_t h, uint24_t image, uint8_t mode); - static void drawSized( + static void drawSizedFX( int16_t x, int16_t y, uint8_t w, uint8_t h, uint24_t image, uint8_t mode, uint16_t frame); - static void draw( + static void drawFX( int16_t x, int16_t y, uint24_t image, uint8_t mode, uint16_t frame); }; diff --git a/bench/cycles/sprites_cycles/img_Sprites.hpp b/bench/cycles/sprites_cycles/img_Sprites.hpp deleted file mode 100644 index 4225dd0..0000000 --- a/bench/cycles/sprites_cycles/img_Sprites.hpp +++ /dev/null @@ -1,16 +0,0 @@ -#pragma once - -#include - -constexpr uint8_t IMG_SPRITES[] PROGMEM = -{ - 16, 0, 16, 0, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 63, 207, 247, 251, 251, 253, 253, - 255, 63, 207, 247, 251, 251, 253, 253, 253, 252, 251, 251, 247, 207, 15, 191, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 63, 207, 247, 251, 251, 253, 253, - 255, 63, 207, 247, 251, 251, 253, 253, 253, 252, 251, 251, 247, 207, 15, 191, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 63, 207, 247, 251, 251, 253, 253, - 255, 63, 207, 247, 251, 251, 253, 253, 253, 252, 251, 251, 247, 207, 15, 191, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 63, 207, 247, 251, 251, 253, 253, - 255, 63, 207, 247, 251, 251, 253, 253, 253, 252, 251, 251, 247, 207, 15, 191, -}; diff --git a/bench/cycles/sprites_cycles/img_SpritesU.hpp b/bench/cycles/sprites_cycles/img_SpritesU.hpp index 1482805..6190bec 100644 --- a/bench/cycles/sprites_cycles/img_SpritesU.hpp +++ b/bench/cycles/sprites_cycles/img_SpritesU.hpp @@ -4,7 +4,63 @@ constexpr uint8_t IMG_SPRITESU[] PROGMEM = { - 16, 16, + 2, 8, 8, 8, 16, 16, 32, 32, 64, 64, 128, 64, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 63, 207, 247, 251, 251, 253, 253, + 255, 63, 207, 247, 251, 251, 253, 253, 253, 252, 251, 251, 247, 207, 15, 191, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 63, 207, 247, 251, 251, 253, 253, + 255, 63, 207, 247, 251, 251, 253, 253, 253, 252, 251, 251, 247, 207, 15, 191, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 63, 207, 247, 251, 251, 253, 253, + 255, 63, 207, 247, 251, 251, 253, 253, 253, 252, 251, 251, 247, 207, 15, 191, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 63, 207, 247, 251, 251, 253, 253, + 255, 63, 207, 247, 251, 251, 253, 253, 253, 252, 251, 251, 247, 207, 15, 191, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 63, 207, 247, 251, 251, 253, 253, + 255, 63, 207, 247, 251, 251, 253, 253, 253, 252, 251, 251, 247, 207, 15, 191, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 63, 207, 247, 251, 251, 253, 253, + 255, 63, 207, 247, 251, 251, 253, 253, 253, 252, 251, 251, 247, 207, 15, 191, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 63, 207, 247, 251, 251, 253, 253, + 255, 63, 207, 247, 251, 251, 253, 253, 253, 252, 251, 251, 247, 207, 15, 191, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 63, 207, 247, 251, 251, 253, 253, + 255, 63, 207, 247, 251, 251, 253, 253, 253, 252, 251, 251, 247, 207, 15, 191, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 63, 207, 247, 251, 251, 253, 253, + 255, 63, 207, 247, 251, 251, 253, 253, 253, 252, 251, 251, 247, 207, 15, 191, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 63, 207, 247, 251, 251, 253, 253, + 255, 63, 207, 247, 251, 251, 253, 253, 253, 252, 251, 251, 247, 207, 15, 191, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 63, 207, 247, 251, 251, 253, 253, + 255, 63, 207, 247, 251, 251, 253, 253, 253, 252, 251, 251, 247, 207, 15, 191, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 63, 207, 247, 251, 251, 253, 253, + 255, 63, 207, 247, 251, 251, 253, 253, 253, 252, 251, 251, 247, 207, 15, 191, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 63, 207, 247, 251, 251, 253, 253, + 255, 63, 207, 247, 251, 251, 253, 253, 253, 252, 251, 251, 247, 207, 15, 191, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 63, 207, 247, 251, 251, 253, 253, + 255, 63, 207, 247, 251, 251, 253, 253, 253, 252, 251, 251, 247, 207, 15, 191, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 63, 207, 247, 251, 251, 253, 253, + 255, 63, 207, 247, 251, 251, 253, 253, 253, 252, 251, 251, 247, 207, 15, 191, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 63, 207, 247, 251, 251, 253, 253, + 255, 63, 207, 247, 251, 251, 253, 253, 253, 252, 251, 251, 247, 207, 15, 191, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 63, 207, 247, 251, 251, 253, 253, + 255, 63, 207, 247, 251, 251, 253, 253, 253, 252, 251, 251, 247, 207, 15, 191, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 63, 207, 247, 251, 251, 253, 253, + 255, 63, 207, 247, 251, 251, 253, 253, 253, 252, 251, 251, 247, 207, 15, 191, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 63, 207, 247, 251, 251, 253, 253, + 255, 63, 207, 247, 251, 251, 253, 253, 253, 252, 251, 251, 247, 207, 15, 191, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 63, 207, 247, 251, 251, 253, 253, + 255, 63, 207, 247, 251, 251, 253, 253, 253, 252, 251, 251, 247, 207, 15, 191, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 63, 207, 247, 251, 251, 253, 253, + 255, 63, 207, 247, 251, 251, 253, 253, 253, 252, 251, 251, 247, 207, 15, 191, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 63, 207, 247, 251, 251, 253, 253, + 255, 63, 207, 247, 251, 251, 253, 253, 253, 252, 251, 251, 247, 207, 15, 191, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 63, 207, 247, 251, 251, 253, 253, + 255, 63, 207, 247, 251, 251, 253, 253, 253, 252, 251, 251, 247, 207, 15, 191, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 63, 207, 247, 251, 251, 253, 253, + 255, 63, 207, 247, 251, 251, 253, 253, 253, 252, 251, 251, 247, 207, 15, 191, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 63, 207, 247, 251, 251, 253, 253, + 255, 63, 207, 247, 251, 251, 253, 253, 253, 252, 251, 251, 247, 207, 15, 191, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 63, 207, 247, 251, 251, 253, 253, + 255, 63, 207, 247, 251, 251, 253, 253, 253, 252, 251, 251, 247, 207, 15, 191, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 63, 207, 247, 251, 251, 253, 253, + 255, 63, 207, 247, 251, 251, 253, 253, 253, 252, 251, 251, 247, 207, 15, 191, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 63, 207, 247, 251, 251, 253, 253, + 255, 63, 207, 247, 251, 251, 253, 253, 253, 252, 251, 251, 247, 207, 15, 191, 255, 255, 255, 255, 255, 255, 255, 255, 255, 63, 207, 247, 251, 251, 253, 253, 255, 63, 207, 247, 251, 251, 253, 253, 253, 252, 251, 251, 247, 207, 15, 191, 255, 255, 255, 255, 255, 255, 255, 255, 255, 63, 207, 247, 251, 251, 253, 253, diff --git a/bench/cycles/sprites_cycles/sprites_cycles.ino b/bench/cycles/sprites_cycles/sprites_cycles.ino index f694a6d..e8d48ee 100644 --- a/bench/cycles/sprites_cycles/sprites_cycles.ino +++ b/bench/cycles/sprites_cycles/sprites_cycles.ino @@ -9,7 +9,6 @@ #define SPRITESU_FX #include "SpritesU.hpp" -#include "img_Sprites.hpp" #include "img_SpritesU.hpp" #include "fxdata.hpp" @@ -41,112 +40,134 @@ void setup() { Serial.begin(9600); fdevopen(&debug_putc, 0); -#if 1 +#if 0 +#else + uint8_t ws[] = { 2, 8, 16, 32, 64, 128 }; + uint8_t hs[] = { 8, 8, 16, 32, 64, 64 }; + + for(uint8_t i = 0; i < 6; ++i) + { + + int16_t x = -ws[i]/2; + + Serial.print(F("\n\n### Dimensions: ")); + Serial.print((int)ws[i]); + Serial.print('x'); + Serial.print((int)hs[i]); + Serial.print(F("\n\n| Method | (0, 0) f0 | (0, 0) f1 | (0, 4) f0 | (")); + Serial.print(x); + Serial.print(F(", 0) f0 |")); + Serial.print(F("\n|---|:-:|:-:|:-:|:-:|")); + + Serial.print(F("\n| *Unmasked* |")); + + Serial.print(F("\n| Sprites::drawOverwrite |")); + debug_cycles([=](){ Sprites::drawOverwrite(0, 0, IMG_SPRITESU + i * 2, 0); }); + debug_cycles([=](){ Sprites::drawOverwrite(0, 0, IMG_SPRITESU + i * 2, 1); }); + debug_cycles([=](){ Sprites::drawOverwrite(0, 4, IMG_SPRITESU + i * 2, 0); }); + debug_cycles([=](){ Sprites::drawOverwrite(x, 0, IMG_SPRITESU + i * 2, 0); }); + + Serial.print(F("\n| SpritesB::drawOverwrite |")); + debug_cycles([=](){ SpritesB::drawOverwrite(0, 0, IMG_SPRITESU + i * 2, 0); }); + debug_cycles([=](){ SpritesB::drawOverwrite(0, 0, IMG_SPRITESU + i * 2, 1); }); + debug_cycles([=](){ SpritesB::drawOverwrite(0, 4, IMG_SPRITESU + i * 2, 0); }); + debug_cycles([=](){ SpritesB::drawOverwrite(x, 0, IMG_SPRITESU + i * 2, 0); }); + + Serial.print(F("\n| SpritesU::drawOverwrite |")); + debug_cycles([=](){ SpritesU::drawOverwrite(0, 0, IMG_SPRITESU + i * 2, 0); }); + debug_cycles([=](){ SpritesU::drawOverwrite(0, 0, IMG_SPRITESU + i * 2, 1); }); + debug_cycles([=](){ SpritesU::drawOverwrite(0, 4, IMG_SPRITESU + i * 2, 0); }); + debug_cycles([=](){ SpritesU::drawOverwrite(x, 0, IMG_SPRITESU + i * 2, 0); }); + + Serial.print(F("\n| FX::drawBitmap (dbmOverwrite) |")); + debug_cycles([=](){ FX::drawBitmap(0, 0, IMG_FX + i * 4, 0, dbmOverwrite); }); + debug_cycles([=](){ FX::drawBitmap(0, 0, IMG_FX + i * 4, 1, dbmOverwrite); }); + debug_cycles([=](){ FX::drawBitmap(0, 4, IMG_FX + i * 4, 0, dbmOverwrite); }); + debug_cycles([=](){ FX::drawBitmap(x, 0, IMG_FX + i * 4, 0, dbmOverwrite); }); + + Serial.print(F("\n| SpritesU::drawOverwriteFX |")); + debug_cycles([=](){ SpritesU::drawOverwriteFX(0, 0, IMG_FX_SPRITESU + i * 2, 0); }); + debug_cycles([=](){ SpritesU::drawOverwriteFX(0, 0, IMG_FX_SPRITESU + i * 2, 1); }); + debug_cycles([=](){ SpritesU::drawOverwriteFX(0, 4, IMG_FX_SPRITESU + i * 2, 0); }); + debug_cycles([=](){ SpritesU::drawOverwriteFX(x, 0, IMG_FX_SPRITESU + i * 2, 0); }); + + Serial.print(F("\n| SpritesABC::drawFX (MODE_OVERWRITE) |")); + debug_cycles([=](){ SpritesABC::drawFX(0, 0, IMG_FX_SPRITESU + i * 2, SpritesABC::MODE_OVERWRITE, 0); }); + debug_cycles([=](){ SpritesABC::drawFX(0, 0, IMG_FX_SPRITESU + i * 2, SpritesABC::MODE_OVERWRITE, 1); }); + debug_cycles([=](){ SpritesABC::drawFX(0, 4, IMG_FX_SPRITESU + i * 2, SpritesABC::MODE_OVERWRITE, 0); }); + debug_cycles([=](){ SpritesABC::drawFX(x, 0, IMG_FX_SPRITESU + i * 2, SpritesABC::MODE_OVERWRITE, 0); }); + + Serial.print(F("\n| SpritesABC::drawSizedFX (MODE_OVERWRITE) |")); + debug_cycles([=](){ SpritesABC::drawSizedFX(0, 0, ws[i], hs[i], IMG_FX_SPRITESU + 2, SpritesABC::MODE_OVERWRITE, 0); }); + debug_cycles([=](){ SpritesABC::drawSizedFX(0, 0, ws[i], hs[i], IMG_FX_SPRITESU + 2, SpritesABC::MODE_OVERWRITE, 1); }); + debug_cycles([=](){ SpritesABC::drawSizedFX(0, 4, ws[i], hs[i], IMG_FX_SPRITESU + 2, SpritesABC::MODE_OVERWRITE, 0); }); + debug_cycles([=](){ SpritesABC::drawSizedFX(x, 0, ws[i], hs[i], IMG_FX_SPRITESU + 2, SpritesABC::MODE_OVERWRITE, 0); }); + + Serial.print(F("\n| SpritesABC::drawBasicFX (MODE_OVERWRITE) |")); + debug_cycles([=](){ SpritesABC::drawBasicFX(0, 0, ws[i], hs[i], IMG_FX_SPRITESU + 2, SpritesABC::MODE_OVERWRITE); }); + Serial.print(F(" - |")); + debug_cycles([=](){ SpritesABC::drawBasicFX(0, 4, ws[i], hs[i], IMG_FX_SPRITESU + 2, SpritesABC::MODE_OVERWRITE); }); + debug_cycles([=](){ SpritesABC::drawBasicFX(x, 0, ws[i], hs[i], IMG_FX_SPRITESU + 2, SpritesABC::MODE_OVERWRITE); }); + + Serial.print(F("\n| *Masked* |")); + + Serial.print(F("\n| Sprites::drawPlusMask |")); + debug_cycles([=](){ Sprites::drawPlusMask(0, 0, IMG_SPRITESU + i * 2, 0); }); + debug_cycles([=](){ Sprites::drawPlusMask(0, 0, IMG_SPRITESU + i * 2, 1); }); + debug_cycles([=](){ Sprites::drawPlusMask(0, 4, IMG_SPRITESU + i * 2, 0); }); + debug_cycles([=](){ Sprites::drawPlusMask(x, 0, IMG_SPRITESU + i * 2, 0); }); + + Serial.print(F("\n| SpritesB::drawPlusMask |")); + debug_cycles([=](){ SpritesB::drawPlusMask(0, 0, IMG_SPRITESU + i * 2, 0); }); + debug_cycles([=](){ SpritesB::drawPlusMask(0, 0, IMG_SPRITESU + i * 2, 1); }); + debug_cycles([=](){ SpritesB::drawPlusMask(0, 4, IMG_SPRITESU + i * 2, 0); }); + debug_cycles([=](){ SpritesB::drawPlusMask(x, 0, IMG_SPRITESU + i * 2, 0); }); + + Serial.print(F("\n| SpritesU::drawPlusMask |")); + debug_cycles([=](){ SpritesU::drawPlusMask(0, 0, IMG_SPRITESU + i * 2, 0); }); + debug_cycles([=](){ SpritesU::drawPlusMask(0, 0, IMG_SPRITESU + i * 2, 1); }); + debug_cycles([=](){ SpritesU::drawPlusMask(0, 4, IMG_SPRITESU + i * 2, 0); }); + debug_cycles([=](){ SpritesU::drawPlusMask(x, 0, IMG_SPRITESU + i * 2, 0); }); + + Serial.print(F("\n| FX::drawBitmap (dbmMasked) |")); + debug_cycles([=](){ FX::drawBitmap(0, 0, IMG_FX + i * 4, 0, dbmMasked); }); + debug_cycles([=](){ FX::drawBitmap(0, 0, IMG_FX + i * 4, 1, dbmMasked); }); + debug_cycles([=](){ FX::drawBitmap(0, 4, IMG_FX + i * 4, 0, dbmMasked); }); + debug_cycles([=](){ FX::drawBitmap(x, 0, IMG_FX + i * 4, 0, dbmMasked); }); + + Serial.print(F("\n| SpritesU::drawPlusMaskFX |")); + debug_cycles([=](){ SpritesU::drawPlusMaskFX(0, 0, IMG_FX_SPRITESU + i * 2, 0); }); + debug_cycles([=](){ SpritesU::drawPlusMaskFX(0, 0, IMG_FX_SPRITESU + i * 2, 1); }); + debug_cycles([=](){ SpritesU::drawPlusMaskFX(0, 4, IMG_FX_SPRITESU + i * 2, 0); }); + debug_cycles([=](){ SpritesU::drawPlusMaskFX(x, 0, IMG_FX_SPRITESU + i * 2, 0); }); + + Serial.print(F("\n| SpritesABC::drawFX (MODE_PLUSMASK) |")); + debug_cycles([=](){ SpritesABC::drawFX(0, 0, IMG_FX_SPRITESU + i * 2, SpritesABC::MODE_PLUSMASK, 0); }); + debug_cycles([=](){ SpritesABC::drawFX(0, 0, IMG_FX_SPRITESU + i * 2, SpritesABC::MODE_PLUSMASK, 1); }); + debug_cycles([=](){ SpritesABC::drawFX(0, 4, IMG_FX_SPRITESU + i * 2, SpritesABC::MODE_PLUSMASK, 0); }); + debug_cycles([=](){ SpritesABC::drawFX(x, 0, IMG_FX_SPRITESU + i * 2, SpritesABC::MODE_PLUSMASK, 0); }); + + Serial.print(F("\n| SpritesABC::drawSizedFX (MODE_PLUSMASK) |")); + debug_cycles([=](){ SpritesABC::drawSizedFX(0, 0, ws[i], hs[i], IMG_FX_SPRITESU + 2, SpritesABC::MODE_PLUSMASK, 0); }); + debug_cycles([=](){ SpritesABC::drawSizedFX(0, 0, ws[i], hs[i], IMG_FX_SPRITESU + 2, SpritesABC::MODE_PLUSMASK, 1); }); + debug_cycles([=](){ SpritesABC::drawSizedFX(0, 4, ws[i], hs[i], IMG_FX_SPRITESU + 2, SpritesABC::MODE_PLUSMASK, 0); }); + debug_cycles([=](){ SpritesABC::drawSizedFX(x, 0, ws[i], hs[i], IMG_FX_SPRITESU + 2, SpritesABC::MODE_PLUSMASK, 0); }); + + Serial.print(F("\n| SpritesABC::drawBasicFX (MODE_PLUSMASK) |")); + debug_cycles([=](){ SpritesABC::drawBasicFX(0, 0, ws[i], hs[i], IMG_FX_SPRITESU + 2, SpritesABC::MODE_PLUSMASK); }); + Serial.print(F(" - |")); + debug_cycles([=](){ SpritesABC::drawBasicFX(0, 4, ws[i], hs[i], IMG_FX_SPRITESU + 2, SpritesABC::MODE_PLUSMASK); }); + debug_cycles([=](){ SpritesABC::drawBasicFX(x, 0, ws[i], hs[i], IMG_FX_SPRITESU + 2, SpritesABC::MODE_PLUSMASK); }); - Serial.println(F("\nSprites::drawOverwrite")); - debug_cycles([](){ Sprites::drawOverwrite(0, 0, IMG_SPRITESU, 0); }); - debug_cycles([](){ Sprites::drawOverwrite(0, 0, IMG_SPRITESU, 1); }); - debug_cycles([](){ Sprites::drawOverwrite(0, 4, IMG_SPRITESU, 0); }); - debug_cycles([](){ Sprites::drawOverwrite(-8, 0, IMG_SPRITESU, 0); }); - - Serial.println(F("\nSpritesB::drawOverwrite")); - debug_cycles([](){ SpritesB::drawOverwrite(0, 0, IMG_SPRITESU, 0); }); - debug_cycles([](){ SpritesB::drawOverwrite(0, 0, IMG_SPRITESU, 1); }); - debug_cycles([](){ SpritesB::drawOverwrite(0, 4, IMG_SPRITESU, 0); }); - debug_cycles([](){ SpritesB::drawOverwrite(-8, 0, IMG_SPRITESU, 0); }); - - Serial.println(F("\nSpritesU::drawOverwrite")); - debug_cycles([](){ SpritesU::drawOverwrite(0, 0, IMG_SPRITESU, 0); }); - debug_cycles([](){ SpritesU::drawOverwrite(0, 0, IMG_SPRITESU, 1); }); - debug_cycles([](){ SpritesU::drawOverwrite(0, 4, IMG_SPRITESU, 0); }); - debug_cycles([](){ SpritesU::drawOverwrite(-8, 0, IMG_SPRITESU, 0); }); - - Serial.println(F("\nFX::drawBitmap (dbmOverwrite)")); - debug_cycles([](){ FX::drawBitmap(0, 0, IMG_FX, 0, dbmOverwrite); }); - debug_cycles([](){ FX::drawBitmap(0, 0, IMG_FX, 1, dbmOverwrite); }); - debug_cycles([](){ FX::drawBitmap(0, 4, IMG_FX, 0, dbmOverwrite); }); - debug_cycles([](){ FX::drawBitmap(-8, 0, IMG_FX, 0, dbmOverwrite); }); - - Serial.println(F("\nSpritesU::drawOverwriteFX")); - debug_cycles([](){ SpritesU::drawOverwriteFX(0, 0, IMG_FX_SPRITESU, 0); }); - debug_cycles([](){ SpritesU::drawOverwriteFX(0, 0, IMG_FX_SPRITESU, 1); }); - debug_cycles([](){ SpritesU::drawOverwriteFX(0, 4, IMG_FX_SPRITESU, 0); }); - debug_cycles([](){ SpritesU::drawOverwriteFX(-8, 0, IMG_FX_SPRITESU, 0); }); - - Serial.println(F("\nSpritesABC::drawBasic (MODE_OVERWRITE)")); - debug_cycles([](){ SpritesABC::drawBasic(0, 0, 16, 16, IMG_FX_SPRITESU + 2, SpritesABC::MODE_OVERWRITE); }); - debug_cycles([](){ SpritesABC::drawBasic(0, 4, 16, 16, IMG_FX_SPRITESU + 2, SpritesABC::MODE_OVERWRITE); }); - debug_cycles([](){ SpritesABC::drawBasic(-8, 0, 16, 16, IMG_FX_SPRITESU + 2, SpritesABC::MODE_OVERWRITE); }); - - Serial.println(F("\nSpritesABC::drawSized (MODE_OVERWRITE)")); - debug_cycles([](){ SpritesABC::drawSized(0, 0, 16, 16, IMG_FX_SPRITESU + 2, SpritesABC::MODE_OVERWRITE, 0); }); - debug_cycles([](){ SpritesABC::drawSized(0, 0, 16, 16, IMG_FX_SPRITESU + 2, SpritesABC::MODE_OVERWRITE, 1); }); - debug_cycles([](){ SpritesABC::drawSized(0, 4, 16, 16, IMG_FX_SPRITESU + 2, SpritesABC::MODE_OVERWRITE, 0); }); - debug_cycles([](){ SpritesABC::drawSized(-8, 0, 16, 16, IMG_FX_SPRITESU + 2, SpritesABC::MODE_OVERWRITE, 0); }); - - Serial.println(F("\nSpritesABC::draw (MODE_OVERWRITE)")); - debug_cycles([](){ SpritesABC::draw(0, 0, IMG_FX_SPRITESU, SpritesABC::MODE_OVERWRITE, 0); }); - debug_cycles([](){ SpritesABC::draw(0, 0, IMG_FX_SPRITESU, SpritesABC::MODE_OVERWRITE, 1); }); - debug_cycles([](){ SpritesABC::draw(0, 4, IMG_FX_SPRITESU, SpritesABC::MODE_OVERWRITE, 0); }); - debug_cycles([](){ SpritesABC::draw(-8, 0, IMG_FX_SPRITESU, SpritesABC::MODE_OVERWRITE, 0); }); - - Serial.println(F("\nSprites::drawPlusMask")); - debug_cycles([](){ Sprites::drawPlusMask(0, 0, IMG_SPRITESU, 0); }); - debug_cycles([](){ Sprites::drawPlusMask(0, 0, IMG_SPRITESU, 1); }); - debug_cycles([](){ Sprites::drawPlusMask(0, 4, IMG_SPRITESU, 0); }); - debug_cycles([](){ Sprites::drawPlusMask(-8, 0, IMG_SPRITESU, 0); }); - - Serial.println(F("\nSpritesB::drawPlusMask")); - debug_cycles([](){ SpritesB::drawPlusMask(0, 0, IMG_SPRITESU, 0); }); - debug_cycles([](){ SpritesB::drawPlusMask(0, 0, IMG_SPRITESU, 1); }); - debug_cycles([](){ SpritesB::drawPlusMask(0, 4, IMG_SPRITESU, 0); }); - debug_cycles([](){ SpritesB::drawPlusMask(-8, 0, IMG_SPRITESU, 0); }); - - Serial.println(F("\nSpritesU::drawPlusMask")); - debug_cycles([](){ SpritesU::drawPlusMask(0, 0, IMG_SPRITESU, 0); }); - debug_cycles([](){ SpritesU::drawPlusMask(0, 0, IMG_SPRITESU, 1); }); - debug_cycles([](){ SpritesU::drawPlusMask(0, 4, IMG_SPRITESU, 0); }); - debug_cycles([](){ SpritesU::drawPlusMask(-8, 0, IMG_SPRITESU, 0); }); - - Serial.println(F("\nFX::drawBitmap (dbmMasked)")); - debug_cycles([](){ FX::drawBitmap(0, 0, IMG_FX, 0, dbmMasked); }); - debug_cycles([](){ FX::drawBitmap(0, 0, IMG_FX, 1, dbmMasked); }); - debug_cycles([](){ FX::drawBitmap(0, 4, IMG_FX, 0, dbmMasked); }); - debug_cycles([](){ FX::drawBitmap(-8, 0, IMG_FX, 0, dbmMasked); }); - - Serial.println(F("\nSpritesU::drawPlusMaskFX")); - debug_cycles([](){ SpritesU::drawPlusMaskFX(0, 0, IMG_FX_SPRITESU, 0); }); - debug_cycles([](){ SpritesU::drawPlusMaskFX(0, 0, IMG_FX_SPRITESU, 1); }); - debug_cycles([](){ SpritesU::drawPlusMaskFX(0, 4, IMG_FX_SPRITESU, 0); }); - debug_cycles([](){ SpritesU::drawPlusMaskFX(-8, 0, IMG_FX_SPRITESU, 0); }); - - Serial.println(F("\nSpritesABC::drawBasic (MODE_PLUSMASK)")); - debug_cycles([](){ SpritesABC::drawBasic(0, 0, 16, 16, IMG_FX_SPRITESU + 2, SpritesABC::MODE_PLUSMASK); }); - debug_cycles([](){ SpritesABC::drawBasic(0, 4, 16, 16, IMG_FX_SPRITESU + 2, SpritesABC::MODE_PLUSMASK); }); - debug_cycles([](){ SpritesABC::drawBasic(-8, 0, 16, 16, IMG_FX_SPRITESU + 2, SpritesABC::MODE_PLUSMASK); }); - - Serial.println(F("\nSpritesABC::drawSized (MODE_PLUSMASK)")); - debug_cycles([](){ SpritesABC::drawSized(0, 0, 16, 16, IMG_FX_SPRITESU + 2, SpritesABC::MODE_PLUSMASK, 0); }); - debug_cycles([](){ SpritesABC::drawSized(0, 0, 16, 16, IMG_FX_SPRITESU + 2, SpritesABC::MODE_PLUSMASK, 1); }); - debug_cycles([](){ SpritesABC::drawSized(0, 4, 16, 16, IMG_FX_SPRITESU + 2, SpritesABC::MODE_PLUSMASK, 0); }); - debug_cycles([](){ SpritesABC::drawSized(-8, 0, 16, 16, IMG_FX_SPRITESU + 2, SpritesABC::MODE_PLUSMASK, 0); }); - - Serial.println(F("\nSpritesABC::draw (MODE_PLUSMASK)")); - debug_cycles([](){ SpritesABC::draw(0, 0, IMG_FX_SPRITESU, SpritesABC::MODE_PLUSMASK, 0); }); - debug_cycles([](){ SpritesABC::draw(0, 0, IMG_FX_SPRITESU, SpritesABC::MODE_PLUSMASK, 1); }); - debug_cycles([](){ SpritesABC::draw(0, 4, IMG_FX_SPRITESU, SpritesABC::MODE_PLUSMASK, 0); }); - debug_cycles([](){ SpritesABC::draw(-8, 0, IMG_FX_SPRITESU, SpritesABC::MODE_PLUSMASK, 0); }); + } + Serial.print(F("\n\n")); #endif } void loop() { if(!a.nextFrame()) return; - - SpritesABC::draw(0, 0, IMG_FX_SPRITESU, SpritesABC::MODE_OVERWRITE, 0); - SpritesABC::draw(32, 4, IMG_FX_SPRITESU, SpritesABC::MODE_PLUSMASK, 0); - SpritesABC::drawSized(64, 2, 16, 16, IMG_FX_SPRITESU + 2, SpritesABC::MODE_PLUSMASK, 0); FX::display(CLEAR_BUFFER); } diff --git a/bench/cycles/sprites_cycles/sprites_cycles.ino-arduboy.hex b/bench/cycles/sprites_cycles/sprites_cycles.ino-arduboy.hex index a10792e..9c7246a 100644 --- a/bench/cycles/sprites_cycles/sprites_cycles.ino-arduboy.hex +++ b/bench/cycles/sprites_cycles/sprites_cycles.ino-arduboy.hex @@ -1,740 +1,980 @@ -:100000000C94C7010C94EF010C94EF010C94EF01D8 -:100010000C94EF010C94EF010C94EF010C94EF01A0 -:100020000C94EF010C94EF010C94B90D0C94280E74 -:100030000C94EF010C94EF010C94EF010C94EF0180 -:100040000C94EF010C94EF010C94EF010C94EF0170 -:100050000C94EF010C94EF010C94EF010C945A10E6 -:100060000C94EF010C94EF010C94EF010C94EF0150 -:100070000C94EF010C94EF010C94EF010C94EF0140 -:100080000C94EF010C94EF010C94EF010C94EF0130 -:100090000C94EF010C94EF010C94EF010C94EF0120 -:1000A0000C94EF010C94EF010C94EF01080B00028B -:1000B0000202000009040000010202000005240001 -:1000C0001001052401010104240206052406000193 -:1000D0000705810310004009040100020A00000026 -:1000E00007050202400000070583024000000403E8 -:1000F000090412010002EF02014041233680000191 -:100100000102030141726475696E6F204C4C43001B -:1001100041726475626F7900D5F08D14A1C881CFEA -:10012000D9F1AF20000A537072697465734142437C -:100130003A3A6472617720284D4F44455F504C55E0 -:10014000534D41534B29000A5370726974657341D2 -:1001500042433A3A6472617753697A656420284D64 -:100160004F44455F504C55534D41534B29000A5362 -:100170007072697465734142433A3A6472617742BE -:100180006173696320284D4F44455F504C55534D72 -:1001900041534B29000A53707269746573553A3A9A -:1001A00064726177506C75734D61736B4658000AC9 -:1001B00046583A3A647261774269746D61702028DA -:1001C00064626D4D61736B656429000A53707269D6 -:1001D000746573553A3A64726177506C75734D610A -:1001E000736B000A53707269746573423A3A6472B1 -:1001F0006177506C75734D61736B000A537072694F -:100200007465733A3A64726177506C75734D6173BB -:100210006B000A537072697465734142433A3A64E1 -:1002200072617720284D4F44455F4F5645525752D3 -:1002300049544529000A53707269746573414243F9 -:100240003A3A6472617753697A656420284D4F4465 -:10025000455F4F564552575249544529000A53703D -:1002600072697465734142433A3A647261774261DC -:1002700073696320284D4F44455F4F56455257528E -:1002800049544529000A53707269746573553A3AA6 -:10029000647261774F76657277726974654658004B -:1002A0000A46583A3A647261774269746D61702007 -:1002B0002864626D4F766572777269746529000AE9 -:1002C00053707269746573553A3A647261774F7608 -:1002D00065727772697465000A5370726974657328 -:1002E000423A3A647261774F7665727772697465E3 -:1002F000000A537072697465733A3A647261774F99 -:100300007665727772697465001010FFFFFFFFFF5A -:10031000FFFFFFFF3FCFF7FBFBFDFDFF3FCFF7FBED -:10032000FBFDFDFDFCFBFBF7CF0FBFFFFFFFFFFF5A -:10033000FFFFFFFF3FCFF7FBFBFDFDFF3FCFF7FBCD -:10034000FBFDFDFDFCFBFBF7CF0FBFFFFFFFFFFF3A -:10035000FFFFFFFF3FCFF7FBFBFDFDFF3FCFF7FBAD -:10036000FBFDFDFDFCFBFBF7CF0FBFFFFFFFFFFF1A -:10037000FFFFFFFF3FCFF7FBFBFDFDFF3FCFF7FB8D -:10038000FBFDFDFDFCFBFBF7CF0FBF003415112477 -:100390001FBECFEFDAE0DEBFCDBF11E0A0E0B1E0DD -:1003A000EAEFFDE202C005900D92AE32B107D9F737 -:1003B00025E0AEE2B1E001C01D92AE3AB207E1F72E -:1003C00011E0C7ECD1E004C02197FE010E94F516B0 -:1003D000C63CD107C9F70E94A4100C94FB160C94DC -:1003E0000000FC0180915101882311F13FB7F8947E -:1003F00082E08093E9002091F200822F90E01816AD -:10040000190614F481E090E0882339F0289844E636 -:10041000409350014091F1004083222339F0209114 -:10042000F200211103C02BE62093E8003FBF08959E -:100430008FEF9FEF08952FB7F89483E08093E90042 -:100440009091E800892F807295FF04C09091F2008E -:1004500080E4891B2FBF08958091480181110DC050 -:1004600082E08093440184E080934501109247012B -:100470001092460181E08093480184E491E0089560 -:100480008093F100082E000C990B089540913601DD -:1004900050913701209134013091350142175307B3 -:1004A000B4F49091E8009570E1F39091E80092FD2A -:1004B00019C08093F1008091360190913701019627 -:1004C0008F739927892B19F48EEF8093E800809120 -:1004D0003601909137010196909337018093360150 -:1004E00081E0089580E00895EF92FF920F931F93AB -:1004F000CF93DF93F82E192FE62E042F81E0860F7D -:10050000880F0E94460283E00E944602CF2DD12F21 -:10051000EC0EFD2EF11CCE15DF05B9F007FF13C060 -:10052000FE0184910E944602182F80E00E9446023C -:10053000812321968111EFCFDF91CF911F910F91F0 -:10054000FF90EF9008958881EDCF81E0F5CFDF92A5 -:10055000EF92FF920F931F93CF93DF93D82E8A01D0 -:10056000EB017B01E40EF51ECE15DF0559F0D7FE39 -:1005700012C0FE0184910E94460221968111F4CF9F -:100580000FEF1FEFC801DF91CF911F910F91FF90E7 -:10059000EF90DF9008958881EECF0F931F93CF9354 -:1005A000DF931F92CDB7DEB782E0898342E450E04B -:1005B0006CEA70E080E80E94A7020E942C02DC0135 -:1005C00012960D911C910115110589F0D801ED913C -:1005D000FC910280F381E02DBE016F5F7F4FC80167 -:1005E000099597FD04C0F80100851185ECCF89813C -:1005F0000F90DF91CF911F910F910895615030F0CE -:100600002091F100FC0120830196F8CF289884E620 -:10061000809350010895CF93DF931F92CDB7DEB73B -:100620006983DC01ED91FC910280F381E02D41E0D2 -:1006300050E0BE016F5F7F4F09950F90DF91CF9122 -:10064000089583E08093E9008091F200882319F0F7 -:100650008AE38093E80008950E941B0290E00895C9 -:10066000CF93DF931F92CDB7DEB7FC0184859585CC -:1006700097FD08C02FEF3FEF358724870F90DF915C -:10068000CF910895CE0101960E94F101019719F4CE -:10069000898190E0F3CF8FEF9FEFF0CF0F931F93FF -:1006A000CF93DF931F92CDB7DEB78C01FC01848519 -:1006B000958597FF0BC0CE0101960E94F10101972D -:1006C00071F4898190E0F80195878487F801848529 -:1006D00095850F90DF91CF911F910F9108958FEF26 -:1006E0009FEFF1CFFC018485958597FD0BC09FB7E7 -:1006F000F89482E08093E9008091F2009FBF90E03F -:10070000019608959FB7F89482E08093E900809164 -:10071000F2009FBF90E008950DB407FEFDCF8EB5A7 -:10072000599A08950E949703982F0C948C030DB446 -:1007300007FEFDCF8EB51EBC08950E949703982F2B -:100740000C94970359980E94AC04862F0E94AC0425 -:10075000852F0E94AC04842F0C94AC04462F50913A -:10076000A201570F6091A301681F83E00E94A203BA -:100770001EBC08956F927F928F929F92AF92BF920C -:10078000CF92DF92EF92FF920F931F93CF93DF935D -:100790004C013B01E42EF22E60E870E080E00E9404 -:1007A000AE030E949D03C82F082F192F0E949203A9 -:1007B0005C01C801880D991D181619060CF0BDC002 -:1007C0009501260D371D121613060CF0B6C08114C4 -:1007D000910451F0EE27FF27E819F909CE1B803864 -:1007E00091053CF0C0E805C0F0E0E0E081389105FB -:1007F000CCF7D0E4D619213431050CF4DA2DC5013B -:100800000796969587959695879596958795E89EF0 -:100810009001E99E300D112440E0B801012E000C3A -:10082000880B0E94EB166B01E82ECE0EDF1EE11C3A -:10083000F7FDEA94FF2029F0CC0CDD1CEE1C000F24 -:10084000111F84E8C80ED11CE11C31E061FC34E0CA -:1008500060FC330F62FC3295E80DF91DEC55FE4F3C -:1008600020E0599883E08EBD8091A2019091A30170 -:100870008D0D9E1D0DB407FEFDCF9EBD0DB407FE70 -:10088000FDCF8EBD0DB407FEFDCFCEBCC00ED11E78 -:10089000E11C0DB407FEFDCF1EBCFF0C273014F485 -:1008A000089430FD8894F79462E0D1FD68E0D2FDB1 -:1008B0006295D0FF66956A9511F0D8300CF06FEF15 -:1008C0009C2F0EB41EBCF3FC0626862FF0FC802D58 -:1008D000F2FC0024039EA001F4FA36F4C895C895F2 -:1008E00011240EB41EBCF0FC082E039E203034F000 -:1008F0008081F1FE4827402148274083E058FF4F80 -:10090000F7FE06C08081F1FE5827512158275083F9 -:100910001124F5FCE158F5FEEF57F1099A9589F697 -:100920008C2FF5FE81958058E80FF11DD850239546 -:100930000DB4599A1D160CF494CFDF91CF911F91ED -:100940000F91FF90EF90DF90CF90BF90AF909F906E -:100950008F907F906F9008958EBD00008EB50DB47E -:1009600007FEFCCF0895FC010E947205319728F024 -:1009700068517C4F8F4F9F4FF9CFAB01FC010E9414 -:100980007205641775078E079F07C8F3089585E001 -:1009900090E00C94B3048F929F92AF92BF92CF924B -:1009A000DF92EF92FF920F931F93CF93DF936C012F -:1009B0007B018A0180910B01882309F45AC0809140 -:1009C0005101882309F455C080913A0180FF05C088 -:1009D0008091E00082608093E000E801B12C8AEF12 -:1009E000A82E93E0892E2AE3922E209711F4BB20A3 -:1009F000C9F10E941B02811108C0AA94AA20C9F162 -:100A000081E090E00E94B304F0CF8C171D0611F036 -:100A10000CF08C2F9FB7F8948092E9002091E800A9 -:100A200025FD02C09FBFE1CF282F30E0C21BD30BB2 -:100A3000F701815020F041914093F100FACFE20E8E -:100A4000F31EBB2021F09092E800B12CEBCF8091F7 -:100A5000E80085FDE7CF9092E800BB24B39420978F -:100A600009F3F3CF5D9884E68093390110161106DF -:100A70003CF081E090E0F6019383828310E000E097 -:100A8000C801DF91CF911F910F91FF90EF90DF9000 -:100A9000CF90BF90AF909F908F9008950F931F932A -:100AA000CF93DF938C01D0E0C0E0F801EC0FFD1F85 -:100AB0006491662341F082E591E00E940B03892B4B -:100AC00011F02196F2CF42E050E06BE271E082E556 -:100AD00091E00E94CB048C0F9D1FDF91CF911F915D -:100AE0000F910895A0E3B1E02FB7F8947D918D9117 -:100AF0009C9166B52FBFA89B05C06F3F18F47F5F20 -:100B00008F4F9F4F22E0660F771F881F991F2A95EE -:100B1000D1F708952F923F924F925F926F927F92FA -:100B20008F929F92AF92BF92CF92DF92EF92FF92FD -:100B30000F931F93CF93DF9300D000D000D0CDB799 -:100B4000DEB7DC01A00FB11D1A161B060CF0CBC0DE -:100B5000FB01EE0DF11DEF2B09F4C5C04115510548 -:100B600009F4C1C0262EEE27FF27E81BF90B0097DA -:100B700011F4F0E0E0E010E8D12ED81AA038B10569 -:100B80000CF4D02EDE1AB1E0AE2DA77009F4B0E05F -:100B9000E694E694E6943B2E3E0CB8E0B31510F4D0 -:100BA000A8E03A2E8E0F9F1F73E0972EA1E0C91088 -:100BB00001C0A2E0A9830D19B9810B9F002D11245A -:100BC000AB2EB12CAE9ED001AF9EB00DBE9EB00D2F -:100BD00011247A01EA0EFB1E2115310509F49A0150 -:100BE000F5013197AE0FBF1F2A0F3B1F66246A9491 -:100BF000712C062E02C0660C771C0A94E2F76094F2 -:100C00007094402F50E0DA01E981DE9EA00DB11D05 -:100C10001124BC83AB83512C531409F464C0AC0180 -:100C20004C555E4F5E834D8310E000E0412C4D1427 -:100C300009F44FC0F701E00FF11FA491B0E0AD013E -:100C4000062E02C0440F551F0A94E2F75A834983C7 -:100C500052E0F301C51649F0ABEFCA122CC0E9818E -:100C6000FA81E095F0951A82198257FC09C0AD818E -:100C7000BE819C909E22B9819B2AAD81BE819C92AF -:100C8000222079F0B6E0B51564F08D809E8040E8B2 -:100C9000840E911CD401EC91EF23BA81EB2BD4018B -:100CA000EC9343940A0D1B1D4D815E814F5F5F4F96 -:100CB0005E834D83BCCFF901E00FF11FE491F0E0BA -:100CC000062E02C0EE0FFF1F0A94E2F7E095F095A2 -:100CD000CCCF5394AB81BC81EA0EFB1E2A0F3B1F85 -:100CE00080589F4F99CF26960FB6F894DEBF0FBE5F -:100CF000CDBFDF91CF911F910F91FF90EF90DF90CB -:100D0000CF90BF90AF909F908F907F906F905F90AB -:100D10004F903F902F900895CF92EF920F93E9E07C -:100D2000F3E00491EAE0F3E0E490442309F141E0C8 -:100D300050E03E2D377011F450E040E02E2D269506 -:100D400026952695240F352F311D029FA001039F64 -:100D5000500D1124440F551F455F5C4F23E0C22EF8 -:100D600030E020E00E948A050F91EF90CF90089527 -:100D70004BE053E0F3CFCF92EF920F93E9E0F3E033 -:100D80000491EAE0F3E0E4904423F9F041E050E01C -:100D90003E2D377011F450E040E02E2D269526951B -:100DA0002695240F352F311D029FA001039F500D62 -:100DB0001124455F5C4F22E0C22E30E020E00E940B -:100DC0008A050F91EF90CF9008954BE053E0F3CF59 -:100DD0006F927F928F929F92AF92BF92CF92DF924B -:100DE000EF92FF920F931F93CF93DF93D9012C2D96 -:100DF000C02FD0E06E01C80ED91E1C141D040CF0CB -:100E000079C1FB01EE0DF11DEF2B09F473C1411502 -:100E1000510509F46FC1162FEE27FF27E81BF90BC8 -:100E2000009711F4F0E0E0E030E8C316D10414F0CC -:100E300000E8081B0E1BDD24D3943E2D377009F407 -:100E4000D12CE694E694E6943D2D3E0D393008F021 -:100E500038E08E0F9F1F4E0F5F1F233009F4FEC036 -:100E600008F057C1213009F4AFC0223009F042C167 -:100E7000AFEFB0E0062E02C0AA0FBB1F0A94E2F744 -:100E8000A095B0959B2E20E0321709F433C1FC01E8 -:100E9000EC55FE4F7F01D12CC12CC01650F5FA0144 -:100EA000EC0DFD1DE491F0E03F01062E02C0660C42 -:100EB000771C0A94E2F727FD05C0F701B080BA223B -:100EC000B628B082112371F0273064F45701F0E89E -:100ED000AF0EB11CF5018080E82DE9218E2E872808 -:100EE000F5018082FFEFCF1ADF0AEFEFEE1AFE0A5C -:100EF000D4CF2F5F4C0F5D1F80589F4FC5CF2F5F02 -:100F00004C0F5D1F80589F4F231709F4F3C0DC017D -:100F1000AC55BE4FF12CE12CE01688F7FA01EE0D2E -:100F2000FF1DE491F0E05F01062E02C0AA0CBB1C7D -:100F30000A94E2F727FD03C0DC90DA28DC92112343 -:100F400051F0273044F46D01F0E8CF0ED11CF601CA -:100F5000A080BA28B082FFEFEF1AFF0A1196DCCF0B -:100F60002F5F4C0F5D1F80589F4F231709F4C2C09D -:100F7000DC01AC55BE4FF12CE12CE01688F7FA01EC -:100F8000EE0DFF1DE491F0E05F01062E02C0AA0CF9 -:100F9000BB1C0A94E2F727FD05C0DC90CA2CC09464 -:100FA000DC20DC92112359F027304CF46D01E0E88D -:100FB000CE0ED11CB094F601A080BA20B082FFEF13 -:100FC000EF1AFF0A1196D9CFAE0FBF1F20E02317EB -:100FD00009F490C0FC01EC55FE4F7F01D12CC12CCF -:100FE000C016A0F5FD01EC0DFD1DA490B12C062E40 -:100FF00002C0AA0CBB1C0A94E2F7A094B094FA01B8 -:10100000EC0DFD1D8490912C062E02C0880C991CBD -:101010000A94E2F727FD08C0F7017080E72DEA2166 -:101020007E2E7828F7017082112349F027303CF496 -:10103000F701E058FF4FA080BA20B928B082FFEF37 -:10104000CF1ADF0AEFEFEE1AFE0ACACF2F5F4C0F5E -:101050005D1FAC0FBD1F80589F4FB9CFE02EF12C04 -:10106000E40FF51F8C559E4F40E850E04E195F0984 -:10107000CE19DF09CC0FDD1FA1E0B0E06D01062E17 -:1010800001C0CC0C0A94EAF7132F70E0702EDC013B -:101090009E01E62ECF93DF93ED01EF96EF96229619 -:1010A0008590A590EE2059F08C9C4001AC9C50019D -:1010B00077302CF4F880B094FB20F928F99277234C -:1010C0003AF0FC90A094FA20F828FD920C9469085C -:1010D00011960A9529F71A9551F0072D7395112449 -:1010E000E20FF11DA40FB11DC40FD11DD9CFDF91A7 -:1010F000CF911124DF91CF911F910F91FF90EF902D -:10110000DF90CF90BF90AF909F908F907F906F9027 -:1011100008952A3F21F02B3F69F720E026CF20E0F9 -:10112000F3CECF92EF920F93E9E0F3E00491EAE07F -:10113000F3E0E490442309F141E050E03E2D3770A4 -:1011400011F450E040E02E2D269526952695240F8B -:10115000352F311D029FA001039F500D1124440F14 -:10116000551F455F5C4F23E0C22E30E020E00E9417 -:10117000E8060F91EF90CF9008954BE053E0F3CF46 -:10118000CF92EF920F93E9E0F3E00491EAE0F3E00D -:10119000E4904423F9F041E050E03E2D377011F423 -:1011A00050E040E02E2D269526952695240F352FCC -:1011B000311D029FA001039F500D1124455F5C4F1C -:1011C00022E0C22E30E020E00E94E8060F91EF906E -:1011D000CF9008954BE053E0F3CF4F925F926F9220 -:1011E0007F928F929F92AF92BF92CF92DF92EF92B7 -:1011F000FF920F931F93CF93DF933701802EA42F7D -:10120000B0E0FD01E80FF91F1E161F060CF0BDC06F -:10121000022F10E0F801E60FF71FEF2B09F4B5C01D -:10122000C114D104A1F0269526952695A0FC220F85 -:10123000249FF001ED9D700C811CFC9D700C811CA5 -:10124000FD9D800CEC9D600C711C1124811C102FE5 -:1012500000272801442A5B2AD52DA4EAB1E0E82F13 -:10126000CC24942CD695D695D695F1E061FDF4E08A -:1012700060FDFF0F62FDF29544274095542FA2FCBC -:1012800005C01FEF1F9FA00140955095759567956C -:101290007595679575956795062F0F3F4CF40095EA -:1012A000D01BA0FC000F049D600C711C8C1C0FEF68 -:1012B00097FF0BC0980EA0FE02C0880F991F681AF6 -:1012C000790A8C0897FD8394EE2710E801030E0E2F -:1012D000A00DB11D1E1B911608F0912E17E0101BDA -:1012E0001D1714F4D12FC39410E81919242D332796 -:1012F000A1FC02C02919330BA0FE02C0220F331F2C -:101300001124F12EB02EDF2EA11050C0F3018D2F2D -:1013100001158CF4A058BF4F992D65916D9D1C91BE -:10132000152311291D939A95C1F711248A95A9199E -:10133000B109E20FF31F8823E9F0CF93DF93ED01AA -:10134000C058DF4F992D65916D9D1C911423102974 -:101350001D9318811523112919939A95A1F711242A -:10136000AF0DB11DCF0DD11DE20FF31F8A9551F7BF -:10137000DF91CF91CC2041F065916D9D1C9114239C -:1013800010291D939A94C1F71124DF91CF911F91D9 -:101390000F91FF90EF90DF90CF90BF90AF909F9014 -:1013A0008F907F906F905F904F90089501E0A01212 -:1013B00050C0F3018D2FB114B4F4A058BF4F992D34 -:1013C000459165914D9DA0016D9DB0011C91709559 -:1013D0001723152B1D939A9599F711248A95A9190E -:1013E000B109E20FF11D882319F1CF93DF93ED01CD -:1013F000C058DF4F992D459165914D9DA0016D9D80 -:10140000B0011C9160951623142B1D9318817095C3 -:101410001723152B19939A9571F71124AF0DB11D50 -:10142000CF0DD11DE20FF11D8A9521F7DF91CF91EC -:10143000CC2069F0459165914D9DA0016D9DB00155 -:101440001C9160951623142B1D939A9499F71124DF -:101450009CCF63E00090A201700C0090A301801C5F -:1014600018C059986EBD620E731E811CEE2449147B -:1014700009F0E3940CD08EBC07D07EBC05D06EBCC6 -:1014800003D01EBC03D00895C8950000C895C89528 -:101490000895621A730A8108E4DFB1141CF0DD2399 -:1014A00071F564C0A058BF4F792DA0FC0CC08EB55B -:1014B0001EBC8D9D1C91152311291D93C89500C03C -:1014C0007A95A9F711C08EB51EBC8D9DC001DEDFD7 -:1014D0004EB51EBC4D9DA0011C9150951523192B96 -:1014E0001D93C8957A9579F71124A919B109DA9550 -:1014F00009F45CC0EE2019F00DB4599AB2DFFD0179 -:10150000E058FF4F792DA0FC0EC08EB51EBC8D9DFE -:101510001C91142310291D93108115231129119357 -:101520007A9599F716C08EB51EBC8D9DC0011C9191 -:101530005081AEDF00C04EB51EBC4D9D0094102101 -:10154000182B1D9310945121592B519300007A951B -:1015500051F71124AF0DB11DDA9561F6CC2031F1B0 -:10156000EE2021F00DB4599A7CDFC895A0FC0CC088 -:101570008EB51EBC8D9D1C91142310291D93C895FA -:1015800000C09A94A9F712C08EB51EBC8D9DC001F3 -:101590007DDFDEB51EBCDD9DD02D1C91D0951D23B9 -:1015A000182B1D93C8959A9479F7C8951124599AC8 -:1015B0000DB4EBCEAF92CF92DF92EF92FF920F93EA -:1015C000E9E0F3E0359125917F01FF0F000BA12C9D -:1015D0006A01432F0E94ED080F91FF90EF90DF907A -:1015E000CF90AF900895AF92CF92DF92EF92FF929B -:1015F0000F93E9E0F3E0359125917F01FF0F000B98 -:10160000AA24A3946A01432F0E94ED080F91FF9032 -:10161000EF90DF90CF90AF9008958F929F92AF920E -:10162000CF92DF92EF92FF920F931F93CF93DF93AE -:10163000EC014B016A0160E070E080E00E94AE03C3 -:101640000E949703182F0E948C0392E0A92E02E0BB -:10165000E02EF12C00E0282F412FB401CE010E9492 -:10166000ED08DF91CF911F910F91FF90EF90DF90E8 -:10167000CF90AF909F908F9008958F929F92AF924E -:10168000CF92DF92EF92FF920F931F93CF93DF934E -:10169000EC014B016A0160E070E080E00E94AE0363 -:1016A0000E949703182F0E948C0393E0A92E02E05A -:1016B000E02EF12C00E0282F412FB401CE010E9432 -:1016C000ED08DF91CF911F910F91FF90EF90DF9088 -:1016D000CF90AF909F908F900895803891057CF4C3 -:1016E0006034710564F4DC01A40FB11D1A161B06E9 -:1016F00034F4DB01A20FB11D1A161B060CF008957D -:101700002F923F924F925F926F927F928F929F9211 -:10171000BF92EF92FF920F931F93382E2224842EB4 -:10172000322F369536953695599853E05EBDFB01BC -:10173000F595E795F595E795F595E7951E2F1F3FEC -:101740004CF41095311BC0FC110F149FE00CF11CE0 -:10175000021D1FEF0090A201F00C0090A301001DDC -:1017600097FF0BC0880EC0FE02C0880F991FE81AB1 -:10177000F90A020997FD039533240EBDA4EAB1E0EE -:1017800050E81503030CA00DB11D5319851608F080 -:10179000852EE7E0E11BE31714F43E2F2394FEBCF3 -:1017A000E0E8E8194E2E51E061FD54E060FD550F70 -:1017B00062FD5295552EEFEFE59D300160947094D7 -:1017C000EEBC11246FB724D01EBCBB24481509F011 -:1017D000B39422C05998E3E0EEBD1124E40EF11C4D -:1017E000011DC0FCE40EC0FCF11CC0FC011DBB24AB -:1017F000481509F0B394C8950EBD08D0FEBC06D0BC -:10180000EEBC05D01EBC00C000C00895000000C0A2 -:101810000000C895C8950895C1FCF4C0C2FCA6C0DC -:1018200011151CF0332391F57CC0A058BF4F582DE3 -:10183000C0FC0DC0F8941EBC8EB56FBF859D9C90FA -:10184000972091289D9200C05A95A1F714C0F89452 -:101850001EBC8EB56FBF859DC001DCDFF8941EBC39 -:101860006EB46FBF659C30019C9070949720992A4C -:101870009D925A9561F71124A819B1093A9509F476 -:1018800010C1BB2019F00DB4599AA4DFFD01E05836 -:10189000FF4F582DC0FC1FC0569518F453959C90CF -:1018A0000CC08EB51EBC859D9C90962090289D9264 -:1018B00090809720912891929C908EB51EBC859D1A -:1018C000962090289D9290809720912891920000D8 -:1018D0005A9539F716C0F8941EBC8EB56FBF859D1A -:1018E000C0019C90708097DF6EB41EBC659C009414 -:1018F0009020982A9D9210947120792A71925A957D -:1019000051F71124A40DB11D3A9509F0BACF222048 -:1019100009F4C7C0BB2029F00DB4599A5BDF00C0A1 -:10192000C895C0FC0DC0F8941EBC8EB56FBF859DD8 -:101930009C90962090289D9200C08A94A1F7B1C0F7 -:10194000F8941EBC8EB56FBF859DC00163DFF8940F -:101950001EBC3EB56FBF359D302D9C9030959322B7 -:10196000982A9D928A9461F700009BC011151CF083 -:101970003323E1F43BC0A058BF4F582DF8941EBC50 -:101980008EB56FBF859D9C9091289D92C8955A9564 -:10199000A9F71124A819B1093A9509F482C0BB200E -:1019A00029F00DB4599A16DF00C000C0FD01E058BF -:1019B000FF4F582D8EB51EBC859D9C9090289D9202 -:1019C00090809128919200005A95A1F71124A40DBE -:1019D000B11D3A9521F7222009F463C0BB2031F0F4 -:1019E0000DB4599AF7DE00C000C0C895F8941EBC2B -:1019F0008EB56FBF859D9C9090289D92C8958A94C6 -:101A0000A9F74FC011151CF03323F1F43DC0A058C5 -:101A1000BF4F582DF8941EBC8EB56FBF859D0094A6 -:101A200010949C9091209D9200005A9599F7112452 -:101A3000A819B1093A9509F434C0BB2029F00DB4B6 -:101A4000599AC8DE00C000C0FD01E058FF4F582D74 -:101A50008EB51EBC859D009410949C9090209D9204 -:101A60009080912091925A9599F71124A40DB11D5F -:101A70003A9519F7222009F414C0BB2021F00DB4C7 -:101A8000599AA8DE00C000C0F8941EBC8EB56FBF86 -:101A9000859D009410949C9090209D9200008A94C3 -:101AA00099F71124599A0DB41F910F91FF90EF905F -:101AB000BF909F908F907F906F905F904F903F90DE -:101AC0002F90089508954F925F926F92022E069480 -:101AD00006940694049EF001EA9D2001FA9D500CA4 -:101AE000611CEF9D500C611CFF9D600C1124E40CE7 -:101AF000F51C061DC0FE03C0E40CF51C061D6F900E -:101B00005F904F900C946D0B0895AF92BF92CF925F -:101B1000EF925998E3E0EEBDFF920F935701C02E6C -:101B20007901042FE2E0EE0EF11C011D0090A201EC -:101B3000300D0090A301401D4EBD14D03EBD12D00B -:101B40002EBD11D01EBC0FD04EB51EBC0CD02EB574 -:101B5000599A0E94630D0F91FF90EF90CF90BF9024 -:101B6000AF9008950000C89500C0C8950000089582 -:101B700008951F920F920FB60F9211248F939F9387 -:101B80008091E1009091E100937F9093E10083FFC9 -:101B90000FC01092E90091E09093EB001092EC00DE -:101BA00092E39093ED001092510198E09093F00031 -:101BB00082FF22C093E09093E9009091F200992374 -:101BC00019F09AE39093E80090913901992341F03C -:101BD00090913901915090933901911101C05D9A12 -:101BE00090915001992341F0909150019150909320 -:101BF0005001911101C0289A84FF18C08091E20021 -:101C00008E7E81608093E2008091E1008F7E8093E0 -:101C1000E10080913A018E7E806180933A019F912C -:101C20008F910F900FBE0F901F90189580FFF7CFE8 -:101C30008091E2008E7E80618093E2008091E100DD -:101C40008E7E8093E10080913A018E7E8160E5CFA7 -:101C50001F920F920FB60F921124CF92DF92EF9244 -:101C6000FF920F931F932F933F934F935F936F9325 -:101C70007F938F939F93AF93BF93EF93FF93CF93F4 -:101C8000DF93CDB7DEB76C97DEBFCDBF1092E90012 -:101C90008091E80083FF25C068E0CE0145960E9450 -:101CA000FE0282EF8093E8008D8987FF39C0909112 -:101CB000E80090FFFCCF982F907609F034C19E8900 -:101CC0004F89588D2F89F88C911131C0803861F57A -:101CD00080913B018093F1001092F1008EEF809390 -:101CE000E8006C960FB6F894DEBF0FBECDBFDF9153 -:101CF000CF91FF91EF91BF91AF919F918F917F9184 -:101D00006F915F914F913F912F911F910F91FF9094 -:101D1000EF90DF90CF900F900FBE0F901F9018950F -:101D20009EEF9093E800C7CF1092F100D5CF91308D -:101D300059F48111D3CF4130510581F680913B0197 -:101D40008D7F80933B01CACF933049F48111C6CF78 -:101D50004130510519F680913B018260F2CF9530F8 -:101D600041F48091E80080FFFCCF20682093E300DD -:101D7000B5CF963009F0A9C00B8D1C8D22E01092D2 -:101D8000E9001092370110923601F2122EC0109223 -:101D90003501109234010E94CD021F8299E099838F -:101DA000FA8291E09E8390EA98879AEF9987209132 -:101DB000360130913701275F3F4F3C832B838D8362 -:101DC0001092E900109237011092360110933501FC -:101DD0000093340149E050E0BE016F5F7F4F80E027 -:101DE0000E94A7020E94CD0279CF10933501009383 -:101DF00034010E942C02DC0112960D911C910115F8 -:101E0000110509F451C1D801ED91FC910480F581CF -:101E1000E02DBE016B5E7F4FC8010995009709F068 -:101E20003EC1F80100851185EACFF3E0FF120EC034 -:101E30008F89882309F440C0823061F440E867E06C -:101E400080E191E00E947402811148CF81E2809389 -:101E5000EB0047CF813029F440E86BE084E091E06B -:101E6000F1CF833099F70E942C02DC011296ED909D -:101E7000FC908E010F5F1F4F6801E114F10479F0AF -:101E8000D701ED91FC910680F781E02DB801C701E3 -:101E90000995080F111DF701E084F184EECFD801F8 -:101EA0001C92F60101900020E9F73197BF016C19EF -:101EB0007D0940E0C601C6CF6EEE70E0FB014491A3 -:101EC00050E080E80E94A70209CF973009F4BECF06 -:101ED000983021F481E08093F10000CF993009F02F -:101EE000FDCE837009F0B2CFE5E2F1E081E031E0B0 -:101EF00096E32191222371F08093E9003093EB0067 -:101F0000DF0111972C912093EC009093ED008F5FEF -:101F1000873079F78EE78093EA001092EA008F8984 -:101F200080935101DBCE8B8D9C8D1092E900109235 -:101F30003701109236019093350180933401898DD9 -:101F4000811192C08E899D89913A49F4813209F0BC -:101F50007DCF47E050E064E071E080E0B3CF9132A4 -:101F600009F074CF833269F48F89988DB0E0A0E0D6 -:101F70008093000190930101A0930201B0930301AB -:101F8000ADCE803269F48091E80082FFFCCF67E03B -:101F900084E091E00E94FE028BEF8093E8009ECEE9 -:101FA000823209F09BCE8F8980930B01EEEFFFE721 -:101FB000859194918B3F9C4D51F1E0E0F8E0809148 -:101FC000040190910501A0910601B0910701803BA9 -:101FD0009440A105B105F1F480910B0180FD1AC078 -:101FE000EE3F8AE0F80789F587E797E791838083DA -:101FF000809160008093380188E19BE00FB6F894EF -:10200000A895809360000FBE9093600067CEEEEFBE -:10201000FAE0D5CF808191818737974709F05ECE6E -:10202000A89580916000886180936000809138015C -:1020300080936000EE3F2AE0F20789F08091FE0A6B -:102040009091FF0A9183808349CE80819181873767 -:10205000980751F29093FF0A8093FE0AC5CF109221 -:10206000FF0A1092FE0A3ACE0E942C02DC01129660 -:102070000D911C910115110509F4E8CED801ED91DF -:10208000FC910190F081E02DBE016B5E7F4FC80195 -:102090000995811123CEF80100851185EBCF181623 -:1020A00019060CF41BCED2CEF1E0FF12BECE62EFC9 -:1020B00070E004CF0F920FB68F939F93EF93FF932F -:1020C00080912F018D5F8D3708F08D5780932F0100 -:1020D000E0E4F1E080818E4F808391819F4F918376 -:1020E00082818F4F828383818F4F8383E0E3F1E08E -:1020F00080818F5F808381818F4F818382818F4F29 -:10210000828383818F4F83838FB18F6066991C9BFD -:1021100088278F3681F480912E01981B963068F0C5 -:10212000E0E0F8E087E78083818388E180936000C6 -:10213000F0936000FFCF90932E01FF91EF919F915C -:102140008F910FBE0F901895789483E084BD83E043 -:1021500085BD81E080936E00E1E8F0E083E080835C -:10216000E0E881E08083E1E983E08083E0E981E0E9 -:102170008083E1EC87E08083E3EC81E08083E0EC26 -:1021800082E08083E2EC81E08083EAE787E080837D -:10219000806880831092510110923B0110923A01A5 -:1021A0008091D70081608093D70080EA8093D80027 -:1021B00089B5806189BD89B5826089BD09B400FE99 -:1021C000FDCF81E090E00E94B3048091D8008F7C25 -:1021D00080618093D8008091E000807F8093E00050 -:1021E0008091E1008E7E8093E1008DE08093E2009B -:1021F000559A209A81EC80937C0081EF85B987EE17 -:1022000084B982E38BB982EF8AB9769A6E9880EFAF -:1022100081BB10BA80E58CBD81E08DBD0E94C704F2 -:102220005F9A0E94C7045C98E8E1F1E085918EBD59 -:1022300000000DB407FEFDCFE532C1F75C9A81E8DE -:102240008093640081E0809365005E9AE4E1F0E0B1 -:102250008CEF9FEF25913591559145912851354946 -:1022600009F4CA018093A2019093A30159988BEAC3 -:102270000E94AC04599A8FEF9FEF90935F01809377 -:102280005E0170E060E080E492E00E94491581EF19 -:1022900092E00E944E05CFB7F894989540E070E028 -:1022A00060E090E080E00E94C0089895CFBFCFB773 -:1022B000F894989541E070E060E090E080E00E9442 -:1022C000C0089895CFBFCFB7F894989540E064E0E8 -:1022D00070E090E080E00E94C0089895CFBFCFB733 -:1022E000F894989540E070E060E088EF9FEF0E94DE -:1022F000C0089895CFBF88ED92E00E944E05CFB7F9 -:10230000F894989540E070E060E090E080E00E94F2 -:10231000BB069895CFBFCFB7F894989541E070E091 -:1023200060E090E080E00E94BB069895CFBFCFB7F9 -:10233000F894989540E064E070E090E080E00E94BE -:10234000BB069895CFBFCFB7F894989540E070E062 -:1023500060E088EF9FEF0E94BB069895CFBF8FEBA0 -:1023600092E00E944E05CFB7F894989550E040E077 -:1023700070E060E090E080E00E94DA0A9895CFBFBC -:10238000CFB7F894989541E050E070E060E090E0BD -:1023900080E00E94DA0A9895CFBFCFB7F89498955D -:1023A00050E040E064E070E090E080E00E94DA0AF3 -:1023B0009895CFBFCFB7F894989550E040E070E083 -:1023C00060E088EF9FEF0E94DA0A9895CFBF80EA1D -:1023D00092E00E944E05CFB7F894989520E040E037 -:1023E00070E060E090E080E00E94BA039895CFBF73 -:1023F000CFB7F894989520E041E070E060E090E07D -:1024000080E00E94BA039895CFBFCFB7F894989513 -:1024100020E040E064E070E090E080E00E94BA03D9 -:102420009895CFBFCFB7F894989520E040E070E042 -:1024300060E088EF9FEF0E94BA039895CFBF85E8D0 -:1024400092E00E944E05CFB7F894989550E040E096 -:1024500070E060E090E080E00E940D0B9895CFBFA7 -:10246000CFB7F894989541E050E070E060E090E0DC -:1024700080E00E940D0B9895CFBFCFB7F894989548 -:1024800050E040E064E070E090E080E00E940D0BDE -:102490009895CFBFCFB7F894989550E040E070E0A2 -:1024A00060E088EF9FEF0E940D0B9895CFBF8DE500 -:1024B00092E00E944E05CFB7F8949895C12C02E0A7 -:1024C000E02EF12C00E020E140E170E060E090E0DF -:1024D00080E00E946D0B9895CFBFCFB7F894989588 -:1024E00020E140E164E070E090E080E00E946D0B4C -:1024F0009895CFBFCFB7F894989520E140E170E070 -:1025000060E088EF9FEF0E946D0B9895CFBF85E349 -:1025100092E00E944E05CFB7F8949895B12CA12C6B -:1025200020E140E170E060E090E080E00E94630D17 -:102530009895CFBFCFB7F8949895AA24A394B12CBF -:1025400020E140E170E060E090E080E00E94630DF7 -:102550009895CFBFCFB7F8949895B12CA12C20E1D6 -:1025600040E164E070E090E080E00E94630D9895A7 -:10257000CFBFCFB7F894989520E140E170E060E0DC -:1025800088EF9FEF0E94630D9895CFBF82E192E0A4 -:102590000E944E05CFB7F8949895F12CE12C00E0FD -:1025A00020E030E040E070E060E090E080E00E94F9 -:1025B000850D9895CFBFCFB7F8949895EE24E39406 -:1025C000F12C20E030E040E070E060E090E080E05E -:1025D0000E94850D9895CFBFCFB7F8949895F12CB0 -:1025E000E12C20E030E040E064E070E090E080E04A -:1025F0000E94850D9895CFBFCFB7F894989520E0AD -:1026000030E040E070E060E088EF9FEF0E94850DD1 -:102610009895CFBF8BEF91E00E944E05CFB7F8940D -:10262000989540E070E060E090E080E00E949108C2 -:102630009895CFBFCFB7F894989541E070E060E0EF -:1026400090E080E00E9491089895CFBFCFB7F894B2 -:10265000989540E064E070E090E080E00E9491088E -:102660009895CFBFCFB7F894989540E070E060E0C0 -:1026700088EF9FEF0E9491089895CFBF83EE91E07D -:102680000E944E05CFB7F894989540E070E060E066 -:1026900090E080E00E948C069895CFBFCFB7F89469 -:1026A000989541E070E060E090E080E00E948C0648 -:1026B0009895CFBFCFB7F894989540E064E070E06C -:1026C00090E080E00E948C069895CFBFCFB7F89439 -:1026D000989540E070E060E088EF9FEF0E948C06E4 -:1026E0009895CFBF8BEC91E00E944E05CFB7F89440 -:1026F000989550E040E070E060E090E080E00E945B -:10270000F30A9895CFBFCFB7F894989541E050E081 -:1027100070E060E090E080E00E94F30A9895CFBFFF -:10272000CFB7F894989550E040E064E070E090E016 -:1027300080E00E94F30A9895CFBFCFB7F8949895A0 -:1027400050E040E070E060E088EF9FEF0E94F30A05 -:102750009895CFBF8FEA91E00E944E05CFB7F894CD -:10276000989520E140E070E060E090E080E00E9419 -:10277000BA039895CFBFCFB7F894989520E141E080 -:1027800070E060E090E080E00E94BA039895CFBFCF -:10279000CFB7F894989520E140E064E070E090E0D5 -:1027A00080E00E94BA039895CFBFCFB7F894989570 -:1027B00020E140E070E060E088EF9FEF0E94BA0304 -:1027C0009895CFBF85E991E00E944E05CFB7F89468 -:1027D000989550E040E070E060E090E080E00E947A -:1027E0003D0B9895CFBFCFB7F894989541E050E056 -:1027F00070E060E090E080E00E943D0B9895CFBFD4 -:10280000CFB7F894989550E040E064E070E090E035 -:1028100080E00E943D0B9895CFBFCFB7F894989574 -:1028200050E040E070E060E088EF9FEF0E943D0BD9 -:102830009895CFBF8EE691E00E944E05CFB7F894F1 -:102840009895CC24C39402E0E02EF12C00E020E126 -:1028500040E170E060E090E080E00E946D0B9895B0 -:10286000CFBFCFB7F894989520E140E164E070E0E5 -:1028700090E080E00E946D0B9895CFBFCFB7F894A1 -:10288000989520E140E170E060E088EF9FEF0E94C2 -:102890006D0B9895CFBF87E491E00E944E05CFB7AE -:1028A000F894989520E140E170E060E090E080E0ED -:1028B0000E94630D9895CFBFCFB7F8949895AA243E -:1028C000A394B12C20E140E170E060E090E080E072 -:1028D0000E94630D9895CFBFCFB7F8949895B12C0F -:1028E000A12C20E140E164E070E090E080E00E94F3 -:1028F000630D9895CFBFCFB7F894989520E140E14C -:1029000070E060E088EF9FEF0E94630D9895CFBF65 -:1029100085E291E00E944E05CFB7F8949895F12C8E -:10292000E12C01E020E030E040E070E060E090E089 -:1029300080E00E94850D9895CFBFCFB7F894989509 -:10294000EE24E394F12C20E030E040E070E060E021 -:1029500090E080E00E94850D9895CFBFCFB7F894A6 -:102960009895F12CE12C20E030E040E064E070E04C -:1029700090E080E00E94850D9895CFBFCFB7F89486 -:10298000989520E030E040E070E060E088EF9FEF55 -:102990000E94850D9895CFBFC1E07CE3672E71E062 -:1029A000772EE4EA4E2EE1E05E2EF0E08F2EF0E08E -:1029B0009F2ED1E080913E01882341F010923E018C -:1029C00081149104B9F30E940000F4CF809140017A -:1029D00090913F01282F291B203130F42F3081F3B3 -:1029E000C3BF889513BEECCFD0933E0180933F01C7 -:1029F000F30180819181019680839183F12CE12CF8 -:102A000000E020E030E040E070E060E090E080E056 -:102A10000E94850D01E020E030E040E064E070E0DD -:102A200080E290E00E94850DB12CA12CCC24C394AF -:102A300002E0E02EF12C00E020E140E162E070E0F5 -:102A400080E490E00E94630D5E98F20180E098E0DF -:102A500000800EBCC111012C019780FDFDCF0192B9 -:102A6000B9F70DB45E9AACCFE2E5F1E013821282C1 -:102A700088EE93E0A0E0B0E084839583A683B783DB -:102A800086E191E0918380838FEF9FEF9587848724 -:102A900008950F931F93CF93DF93009759F4611517 -:102AA000710541F4F0E0E0E0CF01DF91CF911F919B -:102AB0000F9108958B01EC016EE070E081E090E0F1 -:102AC0000E949415FC01892B69F380E8838301152A -:102AD000110571F01387028781E883838091A40533 -:102AE0009091A505892B21F4F093A505E093A40509 -:102AF0002097D1F2D187C0878381826083838091C0 -:102B0000A6059091A705892B79F6F093A705E09388 -:102B1000A6058091A8059091A905892B29F6F09327 -:102B2000A905E093A805C0CF0F931F93CF93DF9320 -:102B3000869F8001879F100D969F100D1124C8015C -:102B40000E94B015EC01009729F0A80170E060E048 -:102B50000E94D516CE01DF91CF911F910F9108955C -:102B60000F931F93CF93DF938230910510F482E08F -:102B700090E0E091AC05F091AD0530E020E0B0E0F0 -:102B8000A0E0309799F42115310509F44AC0281BBB -:102B9000390B24303105D8F58A819B816115710587 -:102BA00089F1FB0193838283FE0111C04081518131 -:102BB0000281138148175907E0F04817590799F423 -:102BC000109761F012960C93129713961C933296FD -:102BD000CF01DF91CF911F910F9108950093AC0524 -:102BE0001093AD05F4CF2115310551F0421753076D -:102BF00038F0A901DB019A01BD01DF01F801C1CF65 -:102C0000EF01F9CF9093AD058093AC05CDCFFE01D8 -:102C1000E20FF31F81939193225031093983288366 -:102C2000D7CF2091AA053091AB05232B41F42091F9 -:102C30000E0130910F013093AB052093AA0520912E -:102C40000C0130910D012115310541F42DB73EB72E -:102C50004091100150911101241B350BE091AA0500 -:102C6000F091AB05E217F307A0F42E1B3F0B2817DA -:102C7000390778F0AC014E5F5F4F2417350748F0F5 -:102C80004E0F5F1F5093AB054093AA05819391931C -:102C90009FCFF0E0E0E09CCFCF93DF930097E9F087 -:102CA000FC01329713821282A091AC05B091AD0560 -:102CB000ED0130E020E01097A1F420813181820FF6 -:102CC000931F2091AA053091AB052817390709F009 -:102CD00061C0F093AB05E093AA05DF91CF91089511 -:102CE000EA01CE17DF07E8F54A815B819E014115B5 -:102CF0005105B1F7E901FB83EA8349915991C40F6A -:102D0000D51FEC17FD0761F4808191810296840F35 -:102D1000951FE90199838883828193819B838A83AC -:102D2000F0E0E0E012968D919C9113970097B9F531 -:102D30002D913C911197CD010296820F931F209106 -:102D4000AA053091AB052817390739F6309751F5A8 -:102D50001092AD051092AC05B093AB05A093AA05F7 -:102D6000BCCFD383C28340815181840F951FC81784 -:102D7000D90761F44E5F5F4F88819981480F591FD1 -:102D8000518340838A819B819383828321153105FE -:102D900009F0B0CFF093AD05E093AC059ECFFD01F7 -:102DA000DC01C0CF13821282D7CFDC0101C06D934A -:102DB00041505040E0F70895A29FB001B39FC00179 -:102DC000A39F700D811D1124911DB29F700D811D57 -:102DD0001124911D0895DB01582F0E94DC16529F8B -:102DE000800DA49F800D11240895EE0FFF1F059004 -:0A2DF000F491E02D0994F894FFCF50 -:102DFA00FFFFFFFF00E10000000000000000AE0539 -:102E0A008000000000000B03CB042C032103720393 -:0E2E1A0030034E0300C180810000000D0A004D +:100000000C940E040C9436040C9436040C943604B0 +:100010000C9436040C9436040C9436040C94360478 +:100020000C9436040C9436040C9403190C94721935 +:100030000C9436040C9436040C9436040C94360458 +:100040000C9436040C9436040C9436040C94360448 +:100050000C9436040C9436040C9436040C94A41BB3 +:100060000C9436040C9436040C9436040C94360428 +:100070000C9436040C9436040C9436040C94360418 +:100080000C9436040C9436040C9436040C94360408 +:100090000C9436040C9436040C9436040C943604F8 +:1000A0000C9436040C9436040C943604D5F08D145C +:1000B000A1C881CFD9F1AF20000208080810102094 +:1000C0002040408040FFFFFFFFFFFFFFFFFF3FCFCB +:1000D000F7FBFBFDFDFF3FCFF7FBFBFDFDFDFCFB51 +:1000E000FBF7CF0FBFFFFFFFFFFFFFFFFFFF3FCF7C +:1000F000F7FBFBFDFDFF3FCFF7FBFBFDFDFDFCFB31 +:10010000FBF7CF0FBFFFFFFFFFFFFFFFFFFF3FCF5B +:10011000F7FBFBFDFDFF3FCFF7FBFBFDFDFDFCFB10 +:10012000FBF7CF0FBFFFFFFFFFFFFFFFFFFF3FCF3B +:10013000F7FBFBFDFDFF3FCFF7FBFBFDFDFDFCFBF0 +:10014000FBF7CF0FBFFFFFFFFFFFFFFFFFFF3FCF1B +:10015000F7FBFBFDFDFF3FCFF7FBFBFDFDFDFCFBD0 +:10016000FBF7CF0FBFFFFFFFFFFFFFFFFFFF3FCFFB +:10017000F7FBFBFDFDFF3FCFF7FBFBFDFDFDFCFBB0 +:10018000FBF7CF0FBFFFFFFFFFFFFFFFFFFF3FCFDB +:10019000F7FBFBFDFDFF3FCFF7FBFBFDFDFDFCFB90 +:1001A000FBF7CF0FBFFFFFFFFFFFFFFFFFFF3FCFBB +:1001B000F7FBFBFDFDFF3FCFF7FBFBFDFDFDFCFB70 +:1001C000FBF7CF0FBFFFFFFFFFFFFFFFFFFF3FCF9B +:1001D000F7FBFBFDFDFF3FCFF7FBFBFDFDFDFCFB50 +:1001E000FBF7CF0FBFFFFFFFFFFFFFFFFFFF3FCF7B +:1001F000F7FBFBFDFDFF3FCFF7FBFBFDFDFDFCFB30 +:10020000FBF7CF0FBFFFFFFFFFFFFFFFFFFF3FCF5A +:10021000F7FBFBFDFDFF3FCFF7FBFBFDFDFDFCFB0F +:10022000FBF7CF0FBFFFFFFFFFFFFFFFFFFF3FCF3A +:10023000F7FBFBFDFDFF3FCFF7FBFBFDFDFDFCFBEF +:10024000FBF7CF0FBFFFFFFFFFFFFFFFFFFF3FCF1A +:10025000F7FBFBFDFDFF3FCFF7FBFBFDFDFDFCFBCF +:10026000FBF7CF0FBFFFFFFFFFFFFFFFFFFF3FCFFA +:10027000F7FBFBFDFDFF3FCFF7FBFBFDFDFDFCFBAF +:10028000FBF7CF0FBFFFFFFFFFFFFFFFFFFF3FCFDA +:10029000F7FBFBFDFDFF3FCFF7FBFBFDFDFDFCFB8F +:1002A000FBF7CF0FBFFFFFFFFFFFFFFFFFFF3FCFBA +:1002B000F7FBFBFDFDFF3FCFF7FBFBFDFDFDFCFB6F +:1002C000FBF7CF0FBFFFFFFFFFFFFFFFFFFF3FCF9A +:1002D000F7FBFBFDFDFF3FCFF7FBFBFDFDFDFCFB4F +:1002E000FBF7CF0FBFFFFFFFFFFFFFFFFFFF3FCF7A +:1002F000F7FBFBFDFDFF3FCFF7FBFBFDFDFDFCFB2F +:10030000FBF7CF0FBFFFFFFFFFFFFFFFFFFF3FCF59 +:10031000F7FBFBFDFDFF3FCFF7FBFBFDFDFDFCFB0E +:10032000FBF7CF0FBFFFFFFFFFFFFFFFFFFF3FCF39 +:10033000F7FBFBFDFDFF3FCFF7FBFBFDFDFDFCFBEE +:10034000FBF7CF0FBFFFFFFFFFFFFFFFFFFF3FCF19 +:10035000F7FBFBFDFDFF3FCFF7FBFBFDFDFDFCFBCE +:10036000FBF7CF0FBFFFFFFFFFFFFFFFFFFF3FCFF9 +:10037000F7FBFBFDFDFF3FCFF7FBFBFDFDFDFCFBAE +:10038000FBF7CF0FBFFFFFFFFFFFFFFFFFFF3FCFD9 +:10039000F7FBFBFDFDFF3FCFF7FBFBFDFDFDFCFB8E +:1003A000FBF7CF0FBFFFFFFFFFFFFFFFFFFF3FCFB9 +:1003B000F7FBFBFDFDFF3FCFF7FBFBFDFDFDFCFB6E +:1003C000FBF7CF0FBFFFFFFFFFFFFFFFFFFF3FCF99 +:1003D000F7FBFBFDFDFF3FCFF7FBFBFDFDFDFCFB4E +:1003E000FBF7CF0FBFFFFFFFFFFFFFFFFFFF3FCF79 +:1003F000F7FBFBFDFDFF3FCFF7FBFBFDFDFDFCFB2E +:10040000FBF7CF0FBFFFFFFFFFFFFFFFFFFF3FCF58 +:10041000F7FBFBFDFDFF3FCFF7FBFBFDFDFDFCFB0D +:10042000FBF7CF0FBFFFFFFFFFFFFFFFFFFF3FCF38 +:10043000F7FBFBFDFDFF3FCFF7FBFBFDFDFDFCFBED +:10044000FBF7CF0FBFFFFFFFFFFFFFFFFFFF3FCF18 +:10045000F7FBFBFDFDFF3FCFF7FBFBFDFDFDFCFBCD +:10046000FBF7CF0FBFFFFFFFFFFFFFFFFFFF3FCFF8 +:10047000F7FBFBFDFDFF3FCFF7FBFBFDFDFDFCFBAD +:10048000FBF7CF0FBFFFFFFFFFFFFFFFFFFF3FCFD8 +:10049000F7FBFBFDFDFF3FCFF7FBFBFDFDFDFCFB8D +:1004A000FBF7CF0FBFFFFFFFFFFFFFFFFFFF3FCFB8 +:1004B000F7FBFBFDFDFF3FCFF7FBFBFDFDFDFCFB6D +:1004C000FBF7CF0FBF0A0A00202D207C000A7C20FA +:1004D000537072697465734142433A3A647261774A +:1004E0004261736963465820284D4F44455F504C24 +:1004F00055534D41534B29207C000A7C2053707288 +:10050000697465734142433A3A6472617753697A18 +:100510006564465820284D4F44455F504C55534D17 +:1005200041534B29207C000A7C205370726974650A +:10053000734142433A3A64726177465820284D4FDE +:1005400044455F504C55534D41534B29207C000A84 +:100550007C2053707269746573553A3A647261779E +:10056000506C75734D61736B4658207C000A7C207B +:1005700046583A3A647261774269746D6170202816 +:1005800064626D4D61736B656429207C000A7C2078 +:1005900053707269746573553A3A64726177506C3E +:1005A00075734D61736B207C000A7C2053707269F7 +:1005B000746573423A3A64726177506C75734D6139 +:1005C000736B207C000A7C20537072697465733AE7 +:1005D0003A64726177506C75734D61736B207C0067 +:1005E0000A7C203C746420636F6C7370616E3D32D2 +:1005F0003E2A4D61736B65642A3C2F74643E207CF7 +:1006000000202D207C000A7C205370726974657371 +:100610004142433A3A647261774261736963465872 +:1006200020284D4F44455F4F564552575249544537 +:1006300029207C000A7C20537072697465734142E2 +:10064000433A3A6472617753697A65644658202860 +:100650004D4F44455F4F5645525752495445292006 +:100660007C000A7C20537072697465734142433A7E +:100670003A64726177465820284D4F44455F4F5683 +:100680004552575249544529207C000A7C2053701A +:100690007269746573553A3A647261774F76657220 +:1006A00077726974654658207C000A7C2046583A67 +:1006B0003A647261774269746D6170202864626D7A +:1006C0004F766572777269746529207C000A7C20F8 +:1006D00053707269746573553A3A647261774F76F4 +:1006E00065727772697465207C000A7C2053707291 +:1006F00069746573423A3A647261774F76657277CE +:1007000072697465207C000A7C205370726974657C +:10071000733A3A647261774F76657277726974657D +:10072000207C000A7C203C746420636F6C737061D1 +:100730006E3D323E2A556E6D61736B65642A3C2FA7 +:1007400074643E207C000A7C2D2D2D7C3A2D3A7C51 +:100750003A2D3A7C3A2D3A7C3A2D3A7C002C2030C6 +:1007600029206630207C000A0A7C204D6574686F61 +:1007700064207C2028302C203029206630207C20EA +:1007800028302C203029206631207C2028302C2055 +:100790003429206630207C2028000A0A23232320C5 +:1007A00044696D656E73696F6E733A2000080B00C3 +:1007B00002020200000904000001020200000524F8 +:1007C000001001052401010104240206052406008D +:1007D000010705810310004009040100020A00001E +:1007E00000070502024000000705830240000004E4 +:1007F00003090412010002EF020140412336800088 +:10080000010102030141726475696E6F204C4C4313 +:100810000041726475626F790000861C11241FBE4E +:10082000CFEFDAE0DEBFCDBF11E0A0E0B1E0E2EE55 +:10083000FCE302C005900D92A833B107D9F725E07B +:10084000A8E3B1E001C01D92A83BB207E1F714E0B4 +:10085000CEE0D4E004C02197FE010E94691ECD3095 +:10086000D107C9F70E94EE1B0C946F1E0C94000078 +:10087000FC0180915D05882311F13FB7F89482E077 +:100880008093E9002091F200822F90E0181619065B +:1008900014F481E090E0882339F0289844E64093EE +:1008A0005C054091F1004083222339F02091F20051 +:1008B000211103C02BE62093E8003FBF08958FEF7E +:1008C0009FEF08952FB7F89483E08093E90090910B +:1008D000E800892F807295FF04C09091F20080E4B7 +:1008E000891B2FBF08958091540581110DC082E0AE +:1008F0008093500584E08093510510925305109227 +:10090000520581E08093540580E595E0089540917B +:100910004201509143012091400130914101421721 +:100920005307B4F49091E8009570E1F39091E800DA +:1009300092FD19C08093F100809142019091430192 +:1009400001968F739927892B19F48EEF8093E80015 +:1009500080914201909143010196909343018093CD +:10096000420181E0089580E00895EF92FF920F9395 +:100970001F93CF93DF93F82E192FE62E042F81E0DB +:10098000860F880F0E94870483E00E948704CF2D82 +:10099000D12FEC0EFD2EF11CCE15DF05B9F007FFAF +:1009A00013C0FE0184910E948704182F80E00E94EA +:1009B0008704812321968111EFCFDF91CF911F9181 +:1009C0000F91FF90EF9008958881EDCF81E0F5CFF2 +:1009D000DF92EF92FF920F931F93CF93DF93D82E66 +:1009E0008A01EB017B01E40EF51ECE15DF0559F0FF +:1009F000D7FE12C0FE0184910E94870421968111C6 +:100A0000F4CF0FEF1FEFC801DF91CF911F910F912E +:100A1000FF90EF90DF9008958881EECF0F931F93A2 +:100A2000CF93DF931F92CDB7DEB782E0898342E494 +:100A300050E06DEA77E080E80E94E8040E947304C9 +:100A4000DC0112960D911C910115110589F0D80158 +:100A5000ED91FC910280F381E02DBE016F5F7F4F2D +:100A6000C801099597FD04C0F80100851185ECCFF8 +:100A700089810F90DF91CF911F910F91089561505F +:100A800030F02091F100FC0120830196F8CF2898E6 +:100A900084E680935C050895CF93DF931F92CDB7D2 +:100AA000DEB76983DC01ED91FC910280F381E02DDA +:100AB00041E050E0BE016F5F7F4F09950F90DF91DD +:100AC000CF9108950F931F93CF93DF938C01D0E0C4 +:100AD000C0E0F801EC0FFD1F6491662341F08EE544 +:100AE00095E00E944C05892B11F02196F2CFCE01A2 +:100AF000DF91CF911F910F91089583E08093E900DA +:100B00008091F200882319F08AE38093E800089529 +:100B10000E94620490E00895CF93DF931F92CDB7B7 +:100B2000DEB7FC018485958597FD08C02FEF3FEF68 +:100B3000358724870F90DF91CF910895CE010196DC +:100B40000E943804019719F4898190E0F3CF8FEF68 +:100B50009FEFF0CF0F931F93CF93DF931F92CDB7EB +:100B6000DEB78C01FC018485958597FF0BC0CE0113 +:100B700001960E943804019771F4898190E0F80190 +:100B800095878487F801848595850F90DF91CF91B3 +:100B90001F910F9108958FEF9FEFF1CFFC01848596 +:100BA000958597FD0BC09FB7F89482E08093E9008C +:100BB0008091F2009FBF90E0019608959FB7F8944E +:100BC00082E08093E9008091F2009FBF90E0089559 +:100BD0000DB407FEFDCF8EB5599A08950E94F30516 +:100BE000982F0C94E8050DB407FEFDCF8EB51EBC02 +:100BF00008950E94F305982F0C94F30559980E94CC +:100C00001407862F0E941407852F0E941407842F33 +:100C10000C941407462F50913E01570F60913F01ED +:100C2000681F83E00E94FE051EBC08954F925F92EC +:100C30006F927F928F92AF92BF92CF92DF92EF929C +:100C4000FF920F931F93CF93DF93EC016B01390158 +:100C5000842E842FB9010E940A060E94F905182FDC +:100C6000A82EB92E0E94EE052C0195012C0F3D1FD8 +:100C7000121613060CF0C8C0C038D1050CF0C4C061 +:100C80008C0D9D1D181619060CF0BEC0D7FF0AC0AA +:100C9000EE27FF27EC1BFD0B1E1B203831054CF007 +:100CA00010E807C02138310514F010E81C1BF0E0F3 +:100CB000E0E08134910514F4F42C03C080E4F82EB4 +:100CC000FC18A201495F5F4F569547955695479589 +:100CD00056954795049F9001059F300D112440E0E3 +:100CE000B5010B2C000C880B0E945F1EA82FCB01B6 +:100CF0008E0F9F1FA11DF7FDAA95EE2029F0880FEA +:100D0000991FAA1FAA0CBB1C24E0620E711C811C37 +:100D1000680E791E8A1E41E0C1FC44E0C0FC440F0D +:100D2000C2FC4295EC0FFD1FE05BFE4F2F2D30E023 +:100D3000599883E08EBD80913E0190913F01870DCF +:100D4000981D0DB407FEFDCF9EBD0DB407FEFDCF6F +:100D50008EBD0DB407FEFDCF6EBC6A0C7B1C811CE2 +:100D60000DB407FEFDCF1EBCEE0C373014F4089412 +:100D700040FD8894E79452E021FD58E022FD529511 +:100D800020FF56955A9511F028300CF05FEF912F07 +:100D90000EB41EBCE3FC0526852FE0FC802DE2FC92 +:100DA0000024049EB001E4FA36F4C895C8951124D5 +:100DB0000EB41EBCE0FC082E049E303034F080815E +:100DC000E1FE6827602168276083E058FF4FE7FE57 +:100DD00006C08081E1FE7827712178277083112475 +:100DE000E5FCE158E5FEEF57F1099A9589F6812F68 +:100DF000E5FE81958058E80FF11D285033950DB41C +:100E0000599A12160CF494CFDF91CF911F910F9144 +:100E1000FF90EF90DF90CF90BF90AF908F907F903A +:100E20006F905F904F9008958EBD00008EB50DB409 +:100E300007FEFCCF0895FC010E94B607319728F009 +:100E400068517C4F8F4F9F4FF9CFAB01FC010E943F +:100E5000B607641775078E079F07C8F3089585E0E6 +:100E600090E00C941B078F929F92AF92BF92CF920B +:100E7000DF92EF92FF920F931F93CF93DF936C015A +:100E80007B018A0180910B01882309F45AC080916B +:100E90005D05882309F455C08091460180FF05C097 +:100EA0008091E00082608093E000E801B12C8AEF3D +:100EB000A82E93E0892E2AE3922E209711F4BB20CE +:100EC000C9F10E946204811108C0AA94AA20C9F144 +:100ED00081E090E00E941B07F0CF8C171D0611F0F7 +:100EE0000CF08C2F9FB7F8948092E9002091E800D5 +:100EF00025FD02C09FBFE1CF282F30E0C21BD30BDE +:100F0000F701815020F041914093F100FACFE20EB9 +:100F1000F31EBB2021F09092E800B12CEBCF809122 +:100F2000E80085FDE7CF9092E800BB24B3942097BA +:100F300009F3F3CF5D9884E68093450110161106FE +:100F40003CF081E090E0F6019383828310E000E0C2 +:100F5000C801DF91CF911F910F91FF90EF90DF902B +:100F6000CF90BF90AF909F908F900895AAE3B1E08B +:100F70002FB7F8947D918D919C9166B52FBFA89B5A +:100F800005C06F3F18F47F5F8F4F9F4F22E0660FC1 +:100F9000771F881F991F2A95D1F708952F923F92A6 +:100FA0004F925F926F927F928F929F92AF92BF9279 +:100FB000CF92DF92EF92FF920F931F93CF93DF9325 +:100FC00000D000D000D0CDB7DEB7DC01A00FB11D3E +:100FD0001A161B060CF0CFC0803891050CF0CBC060 +:100FE000FB01EE0DF11DEF2B09F4C5C041155105B4 +:100FF00009F4C1C0262EEE27FF27E81BF90B97FD49 +:1010000002C0F0E0E0E010E8D12ED81AA038B10517 +:101010000CF4D02EDE1AB1E0AE2DA77009F4B0E0CA +:10102000E694E694E6943B2E3E0CB8E0B31510F43B +:10103000A8E03A2E8E0F9F1F73E0972EA1E0C910F3 +:1010400001C0A2E0A9830D19B9810B9F002D1124C5 +:10105000AB2EB12CAE9ED001AF9EB00DBE9EB00D9A +:1010600011247A01EA0EFB1E2115310509F49A01BB +:10107000F5013197AE0FBF1F2A0F3B1F66246A94FC +:10108000712C062E02C0660C771C0A94E2F760945D +:101090007094402F50E0DA01E981DE9EA00DB11D71 +:1010A0001124BC83AB83512C531409F464C0AC01EC +:1010B000405B5E4F5E834D8310E000E0412C4D1499 +:1010C00009F44FC0F701E00FF11FA491B0E0AD01AA +:1010D000062E02C0440F551F0A94E2F75A83498333 +:1010E00052E0F301C51649F0ABEFCA122CC0E981FA +:1010F000FA81E095F0951A82198257FC09C0AD81FA +:10110000BE819C909E22B9819B2AAD81BE819C921A +:10111000222079F0B6E0B51564F08D809E8040E81D +:10112000840E911CD401EC91EF23BA81EB2BD401F6 +:10113000EC9343940A0D1B1D4D815E814F5F5F4F01 +:101140005E834D83BCCFF901E00FF11FE491F0E025 +:10115000062E02C0EE0FFF1F0A94E2F7E095F0950D +:10116000CCCF5394AB81BC81EA0EFB1E2A0F3B1FF0 +:1011700080589F4F99CF26960FB6F894DEBF0FBECA +:10118000CDBFDF91CF911F910F91FF90EF90DF9036 +:10119000CF90BF90AF909F908F907F906F905F9017 +:1011A0004F903F902F900895CF92EF920F9341155B +:1011B000510529F1FA0104913196E4904E5F5F4F99 +:1011C0002223B9F0A1E0B0E02E2D277011F4B0E099 +:1011D000A0E0EE2DE695E695E695EA0FFB2FF11DD2 +:1011E0000E9F90010F9F300D1124220F331F420FCD +:1011F000531F23E0C22E30E020E00E94CE070F9163 +:10120000EF90CF900895CF92EF920F934115510533 +:1012100019F1FA0104913196E4904E5F5F4F222359 +:10122000A9F0E1E0F0E03E2D377011F4F0E0E0E0ED +:101230002E2D2695269526952E0F3F2F311D029F88 +:10124000F001039FF00D11244E0F5F1F22E0C22E0C +:1012500030E020E00E94CE070F91EF90CF900895EC +:101260006F927F928F929F92AF92BF92CF92DF92B6 +:10127000EF92FF920F931F93CF93DF93D9012C2D01 +:10128000C02FD0E06E01C80ED91E1C141D040CF036 +:101290007DC1803891050CF079C1FB01EE0DF11D87 +:1012A000EF2B09F473C14115510509F46FC1162FD5 +:1012B000EE27FF27E81BF90B97FD02C0F0E0E0E006 +:1012C00030E8C316D10414F000E8081B0E1BDD241F +:1012D000D3943E2D377009F4D12CE694E694E6942D +:1012E0003D2D3E0D393008F038E08E0F9F1F4E0F18 +:1012F0005F1F233009F4FEC008F057C1213009F404 +:10130000AFC0223009F042C1AFEFB0E0062E02C0FC +:10131000AA0FBB1F0A94E2F7A095B0959B2E20E080 +:10132000321709F433C1FC01E05BFE4F7F01D12C81 +:10133000C12CC01650F5FA01EC0DFD1DE491F0E052 +:101340003F01062E02C0660C771C0A94E2F727FDC7 +:1013500005C0F701B080BA22B628B082112371F01F +:10136000273064F45701F0E8AF0EB11CF50180801E +:10137000E82DE9218E2E8728F5018082FFEFCF1A14 +:10138000DF0AEFEFEE1AFE0AD4CF2F5F4C0F5D1F7E +:1013900080589F4FC5CF2F5F4C0F5D1F80589F4FC8 +:1013A000231709F4F3C0DC01A05BBE4FF12CE12C44 +:1013B000E01688F7FA01EE0DFF1DE491F0E05F0101 +:1013C000062E02C0AA0CBB1C0A94E2F727FD03C03C +:1013D000DC90DA28DC92112351F0273044F46D01BF +:1013E000F0E8CF0ED11CF601A080BA28B082FFEF42 +:1013F000EF1AFF0A1196DCCF2F5F4C0F5D1F80584C +:101400009F4F231709F4C2C0DC01A05BBE4FF12C33 +:10141000E12CE01688F7FA01EE0DFF1DE491F0E0F3 +:101420005F01062E02C0AA0CBB1C0A94E2F727FD3E +:1014300005C0DC90CA2CC094DC20DC92112359F04A +:1014400027304CF46D01E0E8CE0ED11CB094F601CB +:10145000A080BA20B082FFEFEF1AFF0A1196D9CF11 +:10146000AE0FBF1F20E0231709F490C0FC01E05B22 +:10147000FE4F7F01D12CC12CC016A0F5FD01EC0D53 +:10148000FD1DA490B12C062E02C0AA0CBB1C0A9410 +:10149000E2F7A094B094FA01EC0DFD1D8490912C1C +:1014A000062E02C0880C991C0A94E2F727FD08C09A +:1014B000F7017080E72DEA217E2E7828F7017082EF +:1014C000112349F027303CF4F701E058FF4FA0808A +:1014D000BA20B928B082FFEFCF1ADF0AEFEFEE1A79 +:1014E000FE0ACACF2F5F4C0F5D1FAC0FBD1F805887 +:1014F0009F4FB9CFE02EF12CE40FF51F805B9E4F7C +:1015000040E850E04E195F09CE19DF09CC0FDD1F0E +:10151000A1E0B0E06D01062E01C0CC0C0A94EAF700 +:10152000132F70E0702EDC019E01E62ECF93DF9327 +:10153000ED01EF96EF9622968590A590EE2059F05A +:101540008C9C4001AC9C500177302CF4F880B09416 +:10155000FB20F928F99277233AF0FC90A094FA2026 +:10156000F828FD920C94B50A11960A9529F71A9558 +:1015700051F0072D73951124E20FF11DA40FB11D39 +:10158000C40FD11DD9CFDF91CF911124DF91CF911D +:101590001F910F91FF90EF90DF90CF90BF90AF9091 +:1015A0009F908F907F906F9008952A3F21F02B3F5E +:1015B00069F720E026CF20E0F3CECF92EF920F9391 +:1015C0004115510529F1FA0104913196E4904E5FDD +:1015D0005F4F2223B9F0A1E0B0E02E2D277011F467 +:1015E000B0E0A0E0EE2DE695E695E695EA0FFB2F3C +:1015F000F11D0E9F90010F9F300D1124220F331FFC +:10160000420F531F23E0C22E30E020E00E94300939 +:101610000F91EF90CF900895CF92EF920F934115D5 +:10162000510519F1FA0104913196E4904E5F5F4F34 +:101630002223A9F0E1E0F0E03E2D377011F4F0E054 +:10164000E0E02E2D2695269526952E0F3F2F311D55 +:10165000029FF001039FF00D11244E0F5F1F22E047 +:10166000C22E30E020E00E9430090F91EF90CF9021 +:1016700008958093F100082E000C990B08954F9265 +:101680005F926F927F928F929F92AF92BF92CF9212 +:10169000DF92EF92FF920F931F93CF93DF93370167 +:1016A000802E803891050CF0C6C0A42FB0E0FD015B +:1016B000E80FF91F1E161F060CF0BDC0022F10E028 +:1016C000F801E60FF71FEF2B09F4B5C0C114D104E0 +:1016D000A1F0269526952695A0FC220F249FF001C7 +:1016E000ED9D700C811CFC9D700C811CFD9D800C7F +:1016F000EC9D600C711C1124811C102F0027280107 +:10170000442A5B2AD52DA0E5B1E0E82FCC24942C07 +:10171000D695D695D695F1E061FDF4E060FDFF0F1A +:1017200062FDF29544274095542FA2FC05C01FEF9F +:101730001F9FA00140955095759567957595679584 +:1017400075956795062F0F3F4CF40095D01BA0FCB4 +:10175000000F049D600C711C8C1C0FEF97FF0BC0D9 +:10176000980EA0FE02C0880F991F681A790A8C088B +:1017700097FD8394EE2710E801030E0EA00DB11D16 +:101780001E1B911608F0912E17E0101B1D1714F464 +:10179000D12FC39410E81919242D3327A1FC02C0BE +:1017A0002919330BA0FE02C0220F331F1124F12E82 +:1017B000B02EDF2EA11050C0F3018D2F01158CF437 +:1017C000A058BF4F992D65916D9D1C91152311292E +:1017D0001D939A95C1F711248A95A919B109E20FB1 +:1017E000F31F8823E9F0CF93DF93ED01C058DF4F5B +:1017F000992D65916D9D1C91142310291D931881BD +:101800001523112919939A95A1F71124AF0DB11D34 +:10181000CF0DD11DE20FF31F8A9551F7DF91CF91C4 +:10182000CC2041F065916D9D1C91142310291D93CE +:101830009A94C1F71124DF91CF911F910F91FF90DE +:10184000EF90DF90CF90BF90AF909F908F907F9060 +:101850006F905F904F90089501E0A01250C0F30187 +:101860008D2FB114B4F4A058BF4F992D45916591B7 +:101870004D9DA0016D9DB0011C9170951723152BF6 +:101880001D939A9599F711248A95A919B109E20F28 +:10189000F11D882319F1CF93DF93ED01C058DF4F7D +:1018A000992D459165914D9DA0016D9DB0011C91B3 +:1018B00060951623142B1D93188170951723152BF3 +:1018C00019939A9571F71124AF0DB11DCF0DD11D4C +:1018D000E20FF11D8A9521F7DF91CF91CC2069F0BD +:1018E000459165914D9DA0016D9DB0011C91609544 +:1018F0001623142B1D939A9499F711249CCF63E01F +:1019000000903E01700C00903F01801C18C0599857 +:101910006EBD620E731E811CEE24491409F0E3941F +:101920000CD08EBC07D07EBC05D06EBC03D01EBCD4 +:1019300003D00895C8950000C895C8950895621A07 +:10194000730A8108E4DFB1141CF0DD2371F564C073 +:10195000A058BF4F792DA0FC0CC08EB51EBC8D9D2C +:101960001C91152311291D93C89500C07A95A9F7DC +:1019700011C08EB51EBC8D9DC001DEDF4EB51EBCF4 +:101980004D9DA0011C9150951523192B1D93C895B1 +:101990007A9579F71124A919B109DA9509F45CC08F +:1019A000EE2019F00DB4599AB2DFFD01E058FF4F57 +:1019B000792DA0FC0EC08EB51EBC8D9D1C911423EC +:1019C00010291D9310811523112911937A9599F7E8 +:1019D00016C08EB51EBC8D9DC0011C915081AEDF1E +:1019E00000C04EB51EBC4D9D00941021182B1D93B8 +:1019F00010945121592B519300007A9551F71124DD +:101A0000AF0DB11DDA9561F6CC2031F1EE2021F059 +:101A10000DB4599A7CDFC895A0FC0CC08EB51EBCD5 +:101A20008D9D1C91142310291D93C89500C09A9474 +:101A3000A9F712C08EB51EBC8D9DC0017DDFDEB53D +:101A40001EBCDD9DD02D1C91D0951D23182B1D9300 +:101A5000C8959A9479F7C8951124599A0DB4EBCE8C +:101A60007F928F929F92AF92CF92DF92EF92FF92EE +:101A70000F931F93CF93DF93EC014B016901E42E89 +:101A8000842FB9010E940A060E94F305782E0E9455 +:101A9000E8054E2D96012E5F3F4F4F4F93E0A92E44 +:101AA00068017901042F282F472DB401CE010E942F +:101AB0003F0BDF91CF911F910F91FF90EF90DF903F +:101AC000CF90AF909F908F907F9008957F928F924C +:101AD0009F92AF92CF92DF92EF92FF920F931F935C +:101AE000CF93DF93EC014B016901E42E842FB90100 +:101AF0000E940A060E94F305782E0E94E8054E2DEA +:101B000096012E5F3F4F4F4F92E0A92E6801790159 +:101B1000042F282F472DB401CE010E943F0BDF91E7 +:101B2000CF911F910F91FF90EF90DF90CF90AF90EA +:101B30009F908F907F900895AF92CF92DF92EF9217 +:101B4000FF920F936901FA01459125917F01FF0FE3 +:101B5000000BAA24A3940E943F0B0F91FF90EF90DB +:101B6000DF90CF90AF900895AF92CF92DF92EF9237 +:101B7000FF920F936901FA01459125917F01FF0FB3 +:101B8000000BA12C0E943F0B0F91FF90EF90DF9074 +:101B9000CF90AF900895803891057CF46034710542 +:101BA00064F4DC01A40FB11D1A161B0634F4DB012A +:101BB000A20FB11D1A161B060CF008952F923F922A +:101BC0004F925F926F927F928F929F92BF92EF920D +:101BD000FF920F931F93382E2224842E322F369596 +:101BE00036953695599853E05EBDFB01F595E7951E +:101BF000F595E795F595E7951E2F1F3F4CF4109549 +:101C0000311BC0FC110F149FE00CF11C021D1FEFD3 +:101C100000903E01F00C00903F01001D97FF0BC0AB +:101C2000880EC0FE02C0880F991FE81AF90A02093F +:101C300097FD039533240EBDA0E5B1E050E81503F0 +:101C4000030CA00DB11D5319851608F0852EE7E091 +:101C5000E11BE31714F43E2F2394FEBCE0E8E819DF +:101C60004E2E51E061FD54E060FD550F62FD52952E +:101C7000552EEFEFE59D300160947094EEBC112479 +:101C80006FB724D01EBCBB24481509F0B39422C002 +:101C90005998E3E0EEBD1124E40EF11C011DC0FCD7 +:101CA000E40EC0FCF11CC0FC011DBB24481509F06A +:101CB000B394C8950EBD08D0FEBC06D0EEBC05D0CE +:101CC0001EBC00C000C00895000000C00000C89500 +:101CD000C8950895C1FCF4C0C2FCA6C011151CF043 +:101CE000332391F57CC0A058BF4F582DC0FC0DC0C8 +:101CF000F8941EBC8EB56FBF859D9C90972091284F +:101D00009D9200C05A95A1F714C0F8941EBC8EB5E0 +:101D10006FBF859DC001DCDFF8941EBC6EB46FBF41 +:101D2000659C30019C9070949720992A9D925A95B9 +:101D300061F71124A819B1093A9509F410C1BB2023 +:101D400019F00DB4599AA4DFFD01E058FF4F582D4A +:101D5000C0FC1FC0569518F453959C900CC08EB5CE +:101D60001EBC859D9C90962090289D9290809720E7 +:101D7000912891929C908EB51EBC859D96209028AE +:101D80009D92908097209128919200005A9539F762 +:101D900016C0F8941EBC8EB56FBF859DC0019C9087 +:101DA000708097DF6EB41EBC659C00949020982ACA +:101DB0009D9210947120792A71925A9551F71124AD +:101DC000A40DB11D3A9509F0BACF222009F4C7C07D +:101DD000BB2029F00DB4599A5BDF00C0C895C0FC48 +:101DE0000DC0F8941EBC8EB56FBF859D9C9096204B +:101DF00090289D9200C08A94A1F7B1C0F8941EBCAF +:101E00008EB56FBF859DC00163DFF8941EBC3EB5E3 +:101E10006FBF359D302D9C9030959322982A9D92CE +:101E20008A9461F700009BC011151CF03323E1F484 +:101E30003BC0A058BF4F582DF8941EBC8EB56FBF45 +:101E4000859D9C9091289D92C8955A95A9F711243B +:101E5000A819B1093A9509F482C0BB2029F00DB444 +:101E6000599A16DF00C000C0FD01E058FF4F582D01 +:101E70008EB51EBC859D9C9090289D929080912847 +:101E8000919200005A95A1F71124A40DB11D3A9525 +:101E900021F7222009F463C0BB2031F00DB4599A18 +:101EA000F7DE00C000C0C895F8941EBC8EB56FBFA9 +:101EB000859D9C9090289D92C8958A94A9F74FC0C3 +:101EC00011151CF03323F1F43DC0A058BF4F582D1D +:101ED000F8941EBC8EB56FBF859D009410949C90A5 +:101EE00091209D9200005A9599F71124A819B109E3 +:101EF0003A9509F434C0BB2029F00DB4599AC8DED4 +:101F000000C000C0FD01E058FF4F582D8EB51EBC2B +:101F1000859D009410949C9090209D92908091209B +:101F200091925A9599F71124A40DB11D3A9519F77C +:101F3000222009F414C0BB2021F00DB4599AA8DE68 +:101F400000C000C0F8941EBC8EB56FBF859D009484 +:101F500010949C9090209D9200008A9499F71124EF +:101F6000599A0DB41F910F91FF90EF90BF909F90E1 +:101F70008F907F906F905F904F903F902F9008953B +:101F80000895EF92FF920F93022E06940694069402 +:101F9000C0FC000C049EF001EA9DE00CF11CFA9DCF +:101FA000F00C011DEB9DF00C011DFB9D000D11249B +:101FB0000E94CB0D0F91FF90EF900895AF92BF92CA +:101FC000CF92EF925998E3E0EEBDFF920F93570145 +:101FD000C02E7901042FE2E0EE0EF11C011D0090ED +:101FE0003E01300D00903F01401D4EBD14D03EBD5E +:101FF00012D02EBD11D01EBC0FD04EB51EBC0CD0C1 +:102000002EB5599A0E94C10F0F91FF90EF90CF907B +:10201000BF90AF9008950000C89500C0C89500001B +:10202000089508958F929F92AF92BF920F931F933E +:10203000CF93DF93CDB7DEB7A1970FB6F894DEBF8D +:102040000FBECDBF19A2423008F44AE08E010F5DE9 +:102050001F4F842E912CB12CA12CA50194010E941C +:102060002E1EE62FB901CA01EA3044F5E05DD80121 +:10207000EE938D01232B242B252B79F790E080E024 +:10208000109769F0FD0101900020E9F73197AF0149 +:102090004A1B5B0BBD018EE595E00E943307A196BC +:1020A0000FB6F894DEBF0FBECDBFDF91CF911F9169 +:1020B0000F91BF90AF909F908F900895E95CD7CF1C +:1020C000CF92DF92EF92FF92CF93DF936C01092EB4 +:1020D000000CEE08FF0897FF19C06DE28EE595E051 +:1020E0000E944C05EC0166277727CB016C197D090E +:1020F0008E099F094AE00E9412108C0F9D1FDF91EC +:10210000CF91FF90EF90DF90CF9008954AE0C70104 +:10211000B601DF91CF91FF90EF90DF90CF900C94BC +:1021200012102F923F924F925F926F927F928F92F6 +:102130009F92AF92BF92CF92DF92EF92FF920F9356 +:102140001F93CF93DF93CDB7DEB7CA5BD1090FB62C +:10215000F894DEBF0FBECDBF81EC80937C0081EF91 +:1021600085B987EE84B982E38BB982EF8AB9769A12 +:102170006E9880EF81BB10BA80E58CBD81E08DBD8B +:102180000E942F075F9A0E942F075C98ECEAF0E00C +:1021900085918EBD00000DB407FEFDCFE93BC1F770 +:1021A0005C9A81E88093640081E0809365005E9A88 +:1021B000E4E1F0E08CEF9FEF259135915591459149 +:1021C0002851354909F4CA0180933E0190933F019B +:1021D00059988BEA0E941407599A8FEF9FEF9093BA +:1021E0006B0580936A0570E060E089E39BE00E94E4 +:1021F0009B1C86E0E2E1F1E0DE01A258BF4F0190B6 +:102200000D928A95E1F786E0E8E1F1E0DE01AC5756 +:10221000BF4F01900D928A95E1F79E0122583F4FE2 +:10222000C556DF4F39832883CB59D040CE018C5718 +:102230009F4FC756DF4F99838883C959D040FE010D +:10224000EF58FF4FC157DF4FF983E883CF58D04095 +:102250002A513109CD56DF4F39832883C359D040E5 +:102260008D97CB56DF4F99838883C559D040E15471 +:10227000F109C156DF4FF983E883CF59D0402A5185 +:102280003109C956DF4F39832883C759D0404A974F +:10229000CD55DF4F99838883C35AD0403F97CB55A4 +:1022A000DF4FF983E883C55AD04028533109C95517 +:1022B000DF4F39832883C75AD040CA97CF55DF4FA5 +:1022C00099838883C15AD040E7E0F0E0C356DF4FDE +:1022D000F983E883CD59D040412C512C612C80E802 +:1022E00090E0A0E0C457DF4F88839983AA83CC583D +:1022F000D040CF56DF4F19821882C159D040C15704 +:10230000DF4F9881CF58D040CD54DF4F9883C35BC7 +:10231000D040C057DF4FA881C059D040CC54DF4FC8 +:10232000A883C45BD040C556DF4FD880CB59D0407E +:10233000C456DF4F7880CC59D040C756DF4FE88174 +:10234000C959D040C657DF4FE883CA58D040C65657 +:10235000DF4FF881CA59D040C557DF4FF883CB58BB +:10236000D040C157DF4F28813981CF58D040295FF5 +:102370003F4FC555DF4F39832883CB5AD040CD56C8 +:10238000DF4F3881C359D040CB54DF4F3883C55B12 +:10239000D040CC56DF4F8881C459D040CA54DF4F5B +:1023A0008883C65BD040CD56DF4FE881F981C359A1 +:1023B000D0403796C355DF4FF983E883CD5AD040DC +:1023C000CB56DF4FF881C559D040C954DF4FF88351 +:1023D000C75BD040CA56DF4F2881C659D040C85489 +:1023E000DF4F2883C85BD040CB56DF4F888199816F +:1023F000C559D0400796C155DF4F99838883CF5A7E +:10240000D040C956DF4F9881C759D040C754DF4FDD +:102410009883C95BD040C856DF4FA881C859D040C7 +:10242000C654DF4FA883CA5BD040C956DF4FE8814E +:10243000F981C759D0403796CF54DF4FF983E883ED +:10244000C15BD040C556DF4FE881F981CB59D04000 +:10245000A190C556DF4FF983E883CB59D040B12C0A +:102460001501359427943194219431088AE997E035 +:102470000E946205C5010E94601068E78EE595E044 +:102480000E944C05C756DF4FE881F981C959D040F9 +:102490008191C756DF4FF983E883C959D04090E056 +:1024A0000E94601087E697E00E946205C1010E94C9 +:1024B00060108DE597E00E94620586E497E00E9437 +:1024C000620583E297E00E94620587E097E00E9440 +:1024D00062051FB7F8949895CF56DF4F8881998190 +:1024E000C159D040880F991F9C0127543F4F490183 +:1024F00020E0A40170E060E090E080E00E940C0B1E +:1025000098951FBF1FB7F894989521E0A40170E03B +:1025100060E090E080E00E940C0B98951FBF1FB711 +:10252000F894989520E0A40164E070E090E080E0E9 +:102530000E940C0B98951FBF1FB7F894989520E048 +:10254000A40170E060E0C1010E940C0B98951FBFD0 +:102550008AEE96E00E9462051FB7F894989520E0F5 +:10256000A40170E060E090E080E00E94030998958B +:102570001FBF1FB7F894989521E0A40170E060E0B8 +:1025800090E080E00E94030998951FBF1FB7F89460 +:10259000989520E0A40164E070E090E080E00E9463 +:1025A000030998951FBF1FB7F894989520E0A401E0 +:1025B00070E060E0C1010E94030998951FBF8DEC97 +:1025C00096E00E9462051FB7F894989530E020E0ED +:1025D000A40170E060E090E080E00E94B40D989566 +:1025E0001FBF1FB7F894989521E030E0A40170E078 +:1025F00060E090E080E00E94B40D98951FBF1FB787 +:10260000F894989530E020E0A40164E070E090E058 +:1026100080E00E94B40D98951FBF1FB7F89498955D +:1026200030E020E0A40170E060E0C1010E94B40D40 +:1026300098951FBF8AEA96E00E9462051FB7F8943A +:102640009895E12C00E0C457DF4F288139814A81F9 +:10265000CC58D04070E060E090E080E00E94160628 +:1026600098951FBF1FB7F894989501E0C457DF4FA6 +:10267000288139814A81CC58D04070E060E090E0F8 +:1026800080E00E94160698951FBF1FB7F894989592 +:1026900000E0C457DF4F288139814A81CC58D040AF +:1026A00064E070E090E080E00E94160698951FBFFD +:1026B0001FB7F8949895C457DF4F288139814A8114 +:1026C000CC58D04070E060E0C1010E941606989599 +:1026D0001FBF8BE896E00E946205BFB6F8949895FC +:1026E00010E000E0462D920170E060E090E080E0B4 +:1026F0000E94660D9895BFBEBFB6F894989501E00C +:1027000010E0462D920170E060E090E080E00E94D1 +:10271000660D9895BFBEBFB6F894989510E000E09E +:10272000462D920164E070E090E080E00E94660D2A +:102730009895BFBEBFB6F8949895462D920170E06B +:1027400060E0C1010E94660D9895BFBE82E696E0EA +:102750000E9462051FB7F8949895F12CE12C462D44 +:10276000920170E060E090E080E00E94DE0F9895BA +:102770001FBF1FB7F8949895EE24E394F12C462DD3 +:10278000920170E060E090E080E00E94DE0F98959A +:102790001FBF1FB7F8949895F12CE12C462D92019C +:1027A00064E070E090E080E00E94DE0F98951FBF2B +:1027B0001FB7F8949895462D920170E060E0C10132 +:1027C0000E94DE0F98951FBF84E396E00E94620589 +:1027D00086E0ED2DF72DCD54DF4FA881C35BD040AF +:1027E000CC54DF4FB881C45BD04001900D928A95E4 +:1027F000E1F786E0C657DF4FE881CA58D040C55799 +:10280000DF4FF881CB58D040C555DF4FA881B98143 +:10281000CB5AD04001900D928A95E1F71FB7F894FA +:102820009895C157DF4FE881F981CF58D040B12C3E +:10283000A12CC12C02E0E02EF12C00E02781CF0179 +:102840000196C157DF4F99838883CF58D04040818C +:1028500070E060E090E080E00E94C10F98951FBF9B +:1028600086E0ED2DF72DCB54DF4FA881C55BD0401E +:10287000CA54DF4FB881C65BD04001900D928A9553 +:10288000E1F786E0C657DF4FE881CA58D040C55708 +:10289000DF4FF881CB58D040C355DF4FA881B981B5 +:1028A000CD5AD04001900D928A95E1F71FB7F89468 +:1028B0009895CD56DF4FE881F981C359D040AA24BD +:1028C000A394B12C2781CF010196CD56DF4F998378 +:1028D0008883C359D040408170E060E090E080E0A0 +:1028E0000E94C10F98951FBF86E0ED2DF72DC954AA +:1028F000DF4FA881C75BD040C854DF4FB881C85BA9 +:10290000D04001900D928A95E1F786E0C657DF4FDF +:10291000E881CA58D040C557DF4FF881CB58D04026 +:10292000C155DF4FA881B981CF5AD04001900D9297 +:102930008A95E1F71FB7F8949895CB56DF4FE88159 +:10294000F981C559D040B12CA12C2781CF01019626 +:10295000CB56DF4F99838883C559D040408164E0CE +:1029600070E090E080E00E94C10F98951FBF86E064 +:10297000ED2DF72DDE01D09601900D928A95E1F7AD +:1029800086E0C657DF4FE881CA58D040C557DF4FB1 +:10299000F881CB58D040DE01D79601900D928A95F0 +:1029A000E1F71FB7F8949895C156DF4FE881F98198 +:1029B000CF59D0402781CF010196C156DF4F99836F +:1029C0008883CF59D040408170E060E0C1010E940F +:1029D000C10F98951FBF86E096E00E94620586E0D1 +:1029E000ED2DF72DC754DF4FA881C95BD040C654E9 +:1029F000DF4FB881CA5BD04001900D928A95E1F714 +:102A000086E0C657DF4FE881CA58D040C557DF4F30 +:102A1000F881CB58D040CF54DF4FA881B981C15B3A +:102A2000D04001900D928A95E1F71FB7F8949895E0 +:102A3000C956DF4FE881F981C759D0402781CF01BE +:102A40000196C956DF4F99838883C759D04040818A +:102A500070E060E090E080E00E94CB0D98951FBF91 +:102A600081E096E00E94620586E0ED2DF72DDE0103 +:102A7000DD9601900D928A95E1F786E0C657DF4F0B +:102A8000E881CA58D040C557DF4FF881CB58D040B5 +:102A9000DE01AC5BBF4F01900D928A95E1F71FB745 +:102AA000F8949895CD55DF4FE881F981C35AD0400D +:102AB0002781CF010196CD55DF4F99838883C35A73 +:102AC000D040408164E070E090E080E00E94CB0D57 +:102AD00098951FBF86E0ED2DF72DDE0191960190B0 +:102AE0000D928A95E1F786E0C657DF4FE881CA5814 +:102AF000D040C557DF4FF881CB58D040DE019896C3 +:102B000001900D928A95E1F71FB7F8949895CB55EF +:102B1000DF4FE881F981C55AD0402781CF01019666 +:102B2000CB55DF4F99838883C55AD040408170E0F0 +:102B300060E0C1010E94CB0D98951FBF80EE95E02B +:102B40000E94620585EC95E00E9462051FB7F8942B +:102B5000989520E0A40170E060E090E080E00E94A1 +:102B6000DD0A98951FBF1FB7F894989521E0A4013E +:102B700070E060E090E080E00E94DD0A98951FBF61 +:102B80001FB7F894989520E0A40164E070E090E00D +:102B900080E00E94DD0A98951FBF1FB7F8949895B2 +:102BA00020E0A40170E060E0C1010E94DD0A989578 +:102BB0001FBF89EA95E00E9462051FB7F8949895B7 +:102BC00020E0A40170E060E090E080E00E94D40882 +:102BD00098951FBF1FB7F894989521E0A40170E065 +:102BE00060E090E080E00E94D40898951FBF1FB776 +:102BF000F894989520E0A40164E070E090E080E013 +:102C00000E94D40898951FBF1FB7F894989520E0AC +:102C1000A40170E060E0C1010E94D40898951FBF34 +:102C20008DE895E00E9462051FB7F894989530E012 +:102C300020E0A40170E060E090E080E00E949C0D44 +:102C400098951FBF1FB7F894989521E030E0A40134 +:102C500070E060E090E080E00E949C0D98951FBFBE +:102C60001FB7F894989530E020E0A40164E070E08C +:102C700090E080E00E949C0D98951FBF1FB7F894CC +:102C8000989530E020E0A40170E060E0C1010E946E +:102C90009C0D98951FBF8DE695E00E9462051FB7B9 +:102CA000F894989560E1E62E00E0C457DF4F288144 +:102CB00039814A81CC58D04070E060E090E080E0FB +:102CC0000E94160698951FBF1FB7F894989501E0CB +:102CD000C457DF4F288139814A81CC58D04070E0F9 +:102CE00060E090E080E00E94160698951FBF1FB735 +:102CF000F894989500E0C457DF4F288139814A81C4 +:102D0000CC58D04064E070E090E080E00E9416066D +:102D100098951FBF1FB7F8949895C457DF4F288127 +:102D200039814A81CC58D04070E060E0C1010E94F6 +:102D3000160698951FBF8FE495E00E946205BFB606 +:102D4000F894989510E000E0462D920170E060E064 +:102D500090E080E00E94300D9895BFBEBFB6F89419 +:102D6000989501E010E0462D920170E060E090E05F +:102D700080E00E94300D9895BFBEBFB6F89498953C +:102D800010E000E0462D920164E070E090E080E009 +:102D90000E94300D9895BFBEBFB6F8949895462D09 +:102DA000920170E060E0C1010E94300D9895BFBEB5 +:102DB00087E295E00E9462051FB7F8949895F12C80 +:102DC000E12C01E0462D920170E060E090E080E0AF +:102DD0000E94DE0F98951FBF1FB7F8949895EE24B8 +:102DE000E394F12C462D920170E060E090E080E0E9 +:102DF0000E94DE0F98951FBF1FB7F8949895F12C8D +:102E0000E12C462D920164E070E090E080E00E94A9 +:102E1000DE0F98951FBF1FB7F8949895462D920125 +:102E200070E060E0C1010E94DE0F98951FBF8AEF3D +:102E300094E00E94620586E0ED2DF72DDE015F969D +:102E400001900D928A95E1F786E0C657DF4FE88141 +:102E5000CA58D040C557DF4FF881CB58D040DE016B +:102E6000969601900D928A95E1F71FB7F894989580 +:102E7000EFE18E2E912C8C0E9D1EC356DF4FE88104 +:102E8000F981CD59D0408E0E9F1E2FE130E02C0FDE +:102E90003D1FCF56DF4F88819981C159D040280FFF +:102EA000391FC755DF4F39832883C95AD040B12C09 +:102EB000A12CCC24C39402E0E02EF12C00E0F4011C +:102EC0002081C755DF4FE881F981C95AD040408140 +:102ED00070E060E090E080E00E94C10F98951FBF15 +:102EE00086E0ED2DF72DDE015F9601900D928A951B +:102EF000E1F786E0C657DF4FE881CA58D040C55792 +:102F0000DF4FF881CB58D040DE01969601900D92AC +:102F10008A95E1F71FB7F8949895AA24A394B12C49 +:102F2000F4012081C755DF4FE881F981C95AD040AB +:102F3000408170E060E090E080E00E94C10F9895D1 +:102F40001FBF86E0ED2DF72DDE015F9601900D92FB +:102F50008A95E1F786E0C657DF4FE881CA58D0402E +:102F6000C557DF4FF881CB58D040DE0196960190CF +:102F70000D928A95E1F71FB7F8949895B12CA12C82 +:102F8000F4012081C755DF4FE881F981C95AD0404B +:102F9000408164E070E090E080E00E94C10F98956D +:102FA0001FBF86E0ED2DF72DDE01529601900D92A8 +:102FB0008A95E1F786E0C657DF4FE881CA58D040CE +:102FC000C557DF4FF881CB58D040DE0159960190AC +:102FD0000D928A95E1F71FB7F8949895C955DF4F80 +:102FE000E881F981C75AD0402781CF010196C955A0 +:102FF000DF4F99838883C75AD040408170E060E0FA +:10300000C1010E94C10F98951FBF8DEC94E00E94F2 +:10301000620586E0ED2DF72DDE01509601900D92B0 +:103020008A95E1F786E0C657DF4FE881CA58D0405D +:10303000C557DF4FF881CB58D040DE01579601903D +:103040000D928A95E1F71FB7F8949895B0E1AB2EF1 +:10305000B12CAC0EBD1EC356DF4FE881F981CD59AE +:10306000D040AE0EBF1E80E1882E912C8C0E9D1E8E +:10307000CF56DF4F28813981C159D040820E931E2F +:10308000F5012081F401408170E060E090E080E093 +:103090000E94CB0D98951FBF88EC94E00E946205BA +:1030A00086E0ED2DF72DDE01509601900D928A9568 +:1030B000E1F786E0C657DF4FE881CA58D040C557D0 +:1030C000DF4FF881CB58D040DE01579601900D922A +:1030D0008A95E1F71FB7F8949895F5012081F401DE +:1030E000408164E070E090E080E00E94CB0D989514 +:1030F0001FBF86E0ED2DF72DDE01139601900D9296 +:103100008A95E1F786E0C657DF4FE881CA58D0407C +:10311000C557DF4FF881CB58D040DE011A96019099 +:103120000D928A95E1F71FB7F8949895CF55DF4F28 +:10313000E881F981C15AD0402781CF010196CF554E +:10314000DF4F99838883C15AD040408170E060E0AE +:10315000C1010E94CB0D98951FBFCF56DF4FE8816C +:10316000F981C159D0403196CF56DF4FF983E883BA +:10317000C159D040C457DF4F88819981AA81CC586A +:10318000D0400496A11DC457DF4F88839983AA833A +:10319000CC58D04092E0490E511C611CC356DF4F01 +:1031A000E881F981CD59D0403196C356DF4FF9837C +:1031B000E883CD59D040CF56DF4F28813981C1599E +:1031C000D0402630310511F00C94221285EC94E0A9 +:1031D000C654DF4F0FB6F894DEBF0FBECDBFDF91F0 +:1031E000CF911F910F91FF90EF90DF90CF90BF9004 +:1031F000AF909F908F907F906F905F904F903F9097 +:103200002F900C9462051F920F920FB60F9211240B +:103210008F939F938091E1009091E100937F909331 +:10322000E10083FF0FC01092E90091E09093EB0062 +:103230001092EC0092E39093ED0010925D0598E0FF +:103240009093F00082FF22C093E09093E900909168 +:10325000F200992319F09AE39093E80090914501C8 +:10326000992341F09091450191509093450191111E +:1032700001C05D9A90915C05992341F090915C05A5 +:10328000915090935C05911101C0289A84FF18C059 +:103290008091E2008E7E81608093E2008091E10067 +:1032A0008F7E8093E100809146018E7E80618093C5 +:1032B00046019F918F910F900FBE0F901F90189510 +:1032C00080FFF7CF8091E2008E7E80618093E200E4 +:1032D0008091E1008E7E8093E100809146018E7E98 +:1032E0008160E5CF1F920F920FB60F921124CF92FB +:1032F000DF92EF92FF920F931F932F933F934F9381 +:103300005F936F937F938F939F93AF93BF93EF934D +:10331000FF93CF93DF93CDB7DEB76C97DEBFCDBF02 +:103320001092E9008091E80083FF25C068E0CE019B +:1033300045960E943F0582EF8093E8008D8987FFC4 +:1033400039C09091E80090FFFCCF982F907609F05B +:1033500034C19E894F89588D2F89F88C911131C0C5 +:10336000803861F5809147018093F1001092F1005F +:103370008EEF8093E8006C960FB6F894DEBF0FBE18 +:10338000CDBFDF91CF91FF91EF91BF91AF919F9111 +:103390008F917F916F915F914F913F912F911F91ED +:1033A0000F91FF90EF90DF90CF900F900FBE0F9096 +:1033B0001F9018959EEF9093E800C7CF1092F100F0 +:1033C000D5CF913059F48111D3CF4130510581F6D9 +:1033D000809147018D7F80934701CACF933049F494 +:1033E0008111C6CF4130510519F6809147018260A5 +:1033F000F2CF953041F48091E80080FFFCCF206847 +:103400002093E300B5CF963009F0A9C00B8D1C8D39 +:1034100022E01092E9001092430110924201F21250 +:103420002EC010924101109240010E940E051F8291 +:1034300099E09983FA8291E09E8390EA98879AEFC7 +:1034400099872091420130914301275F3F4F3C8390 +:103450002B838D831092E900109243011092420158 +:10346000109341010093400149E050E0BE016F5FBD +:103470007F4F80E00E94E8040E940E0579CF1093F0 +:103480004101009340010E947304DC0112960D91EA +:103490001C910115110509F451C1D801ED91FC9160 +:1034A0000480F581E02DBE016B5E7F4FC801099558 +:1034B000009709F03EC1F80100851185EACFF3E0DD +:1034C000FF120EC08F89882309F440C0823061F456 +:1034D00040E867E081E198E00E94B504811148CF9F +:1034E00081E28093EB0047CF813029F440E86BE024 +:1034F00085E098E0F1CF833099F70E947304DC01F6 +:103500001296ED90FC908E010F5F1F4F6801E11441 +:10351000F10479F0D701ED91FC910680F781E02D5F +:10352000B801C7010995080F111DF701E084F18466 +:10353000EECFD8011C92F60101900020E9F73197F7 +:10354000BF016C197D0940E0C601C6CF6FEE77E080 +:10355000FB01449150E080E80E94E80409CF9730D5 +:1035600009F4BECF983021F481E08093F10000CFC0 +:10357000993009F0FDCE837009F0B2CFE1E3F1E0BC +:1035800081E031E096E32191222371F08093E900FC +:103590003093EB00DF0111972C912093EC00909376 +:1035A000ED008F5F873079F78EE78093EA00109205 +:1035B000EA008F8980935D05DBCE8B8D9C8D109208 +:1035C000E9001092430110924201909341018093CF +:1035D0004001898D811192C08E899D89913A49F46B +:1035E000813209F07DCF47E050E064E071E080E097 +:1035F000B3CF913209F074CF833269F48F89988DFB +:10360000B0E0A0E08093000190930101A09302013B +:10361000B0930301ADCE803269F48091E80082FF5F +:10362000FCCF67E084E091E00E943F058BEF809340 +:10363000E8009ECE823209F09BCE8F8980930B01E9 +:10364000EEEFFFE7859194918B3F9C4D51F1E0E0C7 +:10365000F8E08091040190910501A0910601B091DC +:103660000701803B9440A105B105F1F480910B0165 +:1036700080FD1AC0EE3F8AE0F80789F587E797E7F3 +:1036800091838083809160008093440188E19BE076 +:103690000FB6F894A895809360000FBE90936000D9 +:1036A00067CEEEEFFAE0D5CF8081918187379747DB +:1036B00009F05ECEA89580916000886180936000DB +:1036C0008091440180936000EE3F2AE0F20789F088 +:1036D0008091FE0A9091FF0A9183808349CE808178 +:1036E00091818737980751F29093FF0A8093FE0AE1 +:1036F000C5CF1092FF0A1092FE0A3ACE0E947304C0 +:10370000DC0112960D911C910115110509F4E8CE0A +:10371000D801ED91FC910190F081E02DBE016B5E2E +:103720007F4FC8010995811123CEF80100851185CD +:10373000EBCF181619060CF41BCED2CEF1E0FF1217 +:10374000BECE63EF77E004CF0F920FB68F939F93B7 +:10375000EF93FF93809139018D5F8D3708F08D577E +:1037600080933901ECE4F1E080818E4F8083918178 +:103770009F4F918382818F4F828383818F4F838379 +:10378000EAE3F1E080818F5F808381818F4F8183C5 +:1037900082818F4F828383818F4F83838FB18F602C +:1037A00066991C9B88278F3681F480913801981B7D +:1037B000963068F0E0E0F8E087E78083818388E175 +:1037C00080936000F0936000FFCF90933801FF91E9 +:1037D000EF919F918F910FBE0F901895789483E091 +:1037E00084BD83E085BD81E080936E00E1E8F0E078 +:1037F00083E08083E0E881E08083E1E983E0808307 +:10380000E0E981E08083E1EC87E08083E3EC81E024 +:103810008083E0EC82E08083E2EC81E08083EAE771 +:1038200087E080838068808310925D051092470155 +:10383000109246018091D70081608093D70080EA82 +:103840008093D80089B5806189BD89B5826089BDC2 +:1038500009B400FEFDCF81E090E00E941B0780913B +:10386000D8008F7C80618093D8008091E000807FB9 +:103870008093E0008091E1008E7E8093E1008DE0F6 +:103880008093E200559A209A0E949110C1E088E44A +:10389000E82E81E0F82E90E5C92E91E0D92E00E0C7 +:1038A00010E0D1E080914A01882341F010924A0152 +:1038B00001151105B9F30E940000F4CF80914C016D +:1038C00090914B01282F291B203130F42F3081F3A8 +:1038D000C3BF889513BEECCFD0934A0180934B01B0 +:1038E000F701808191810196808391835E98F60132 +:1038F00080E098E000800EBCC111012C019780FD92 +:10390000FDCF0192B9F70DB45E9AD2CFEEE5F5E0A6 +:103910001382128288EE93E0A0E0B0E08483958366 +:10392000A683B78382E291E0918380838FEF9FEF3C +:103930009587848708950F931F93CF93DF93009704 +:1039400059F46115710541F4F0E0E0E0CF01DF9139 +:10395000CF911F910F9108958B01EC016EE070E003 +:1039600081E090E00E94E61CFC01892B69F380E86D +:1039700083830115110571F01387028781E8838322 +:103980008091AE059091AF05892B21F4F093AF059E +:10399000E093AE052097D1F2D187C0878381826002 +:1039A00083838091B0059091B105892B79F6F093CE +:1039B000B105E093B0058091B2059091B305892BD4 +:1039C00029F6F093B305E093B205C0CF0F931F9390 +:1039D000CF93DF93869F8001879F100D969F100DD8 +:1039E0001124C8010E94021DEC01009729F0A801D2 +:1039F00070E060E00E94271ECE01DF91CF911F9101 +:103A00000F9108950F931F93CF93DF938230910509 +:103A100010F482E090E0E091B605F091B70530E057 +:103A200020E0B0E0A0E0309799F42115310509F4C9 +:103A30004AC0281B390B24303105D8F58A819B8177 +:103A40006115710589F1FB0193838283FE0111C029 +:103A5000408151810281138148175907E0F04817CE +:103A6000590799F4109761F012960C9312971396D8 +:103A70001C933296CF01DF91CF911F910F91089542 +:103A80000093B6051093B705F4CF2115310551F019 +:103A90004217530738F0A901DB019A01BD01DF018C +:103AA000F801C1CFEF01F9CF9093B7058093B60528 +:103AB000CDCFFE01E20FF31F819391932250310984 +:103AC00039832883D7CF2091B4053091B505232BB6 +:103AD00041F420910E0130910F013093B5052093F0 +:103AE000B40520910C0130910D012115310541F4EF +:103AF0002DB73EB74091100150911101241B350B99 +:103B0000E091B405F091B505E217F307A0F42E1B80 +:103B10003F0B2817390778F0AC014E5F5F4F241731 +:103B2000350748F04E0F5F1F5093B5054093B4051D +:103B3000819391939FCFF0E0E0E09CCFCF93DF9310 +:103B40000097E9F0FC01329713821282A091B6052A +:103B5000B091B705ED0130E020E01097A1F420818D +:103B60003181820F931F2091B4053091B50528173C +:103B7000390709F061C0F093B505E093B405DF9112 +:103B8000CF910895EA01CE17DF07E8F54A815B81FE +:103B90009E0141155105B1F7E901FB83EA83499183 +:103BA0005991C40FD51FEC17FD0761F480819181F5 +:103BB0000296840F951FE9019983888382819381FE +:103BC0009B838A83F0E0E0E012968D919C9113979D +:103BD0000097B9F52D913C911197CD010296820F76 +:103BE000931F2091B4053091B5052817390739F690 +:103BF000309751F51092B7051092B605B093B50500 +:103C0000A093B405BCCFD383C28340815181840F7C +:103C1000951FC817D90761F44E5F5F4F888199815E +:103C2000480F591F518340838A819B8193838283EC +:103C30002115310509F0B0CFF093B705E093B60533 +:103C40009ECFFD01DC01C0CF13821282D7CFDC01F1 +:103C500001C06D9341505040E0F70895A1E21A2E43 +:103C6000AA1BBB1BFD010DC0AA1FBB1FEE1FFF1F20 +:103C7000A217B307E407F50720F0A21BB30BE40B70 +:103C8000F50B661F771F881F991F1A9469F76095B7 +:103C90007095809590959B01AC01BD01CF01089571 +:103CA000A29FB001B39FC001A39F700D811D11247D +:103CB000911DB29F700D811D1124911D0895DB018E +:103CC000582F0E94501E529F800DA49F800D1124DA +:103CD0000895EE0FFF1F0590F491E02D0994F894DC +:023CE000FFCF14 +:103CE200FFFFFFFF00E10000000000000000B80538 +:103CF2008000020810204080080810204040000088 +:103D020000004C05330788057D05CE058C05AA0504 +:083D120000C1808100000000E7 :00000001FF diff --git a/src/absim_timer.hpp b/src/absim_timer.hpp index 52ba5e1..966438d 100644 --- a/src/absim_timer.hpp +++ b/src/absim_timer.hpp @@ -208,9 +208,15 @@ void atmega32u4_t::update_timer0() update_tcycles *= 2; } - uint64_t update_cycles = (uint64_t)update_tcycles * timer0.divider - timer0.prescaler_cycle; + if(update_tcycles == 0) + timer0.next_update_cycle = UINT64_MAX; + else + { + update_tcycles = std::max(1, update_tcycles); + uint64_t update_cycles = (uint64_t)update_tcycles * timer0.divider - timer0.prescaler_cycle; + timer0.next_update_cycle = cycle_count + update_cycles; + } - timer0.next_update_cycle = cycle_count + update_cycles; peripheral_queue.schedule(timer0.next_update_cycle, PQ_TIMER0); }