From d355df4bb6c7a92c7a1ca411b75b99a4c8283997 Mon Sep 17 00:00:00 2001 From: pmitchev Date: Thu, 11 Jan 2018 09:34:40 +0200 Subject: [PATCH] test --- compile.sh | 44 +- configs/aeon.json | 51 ++ extensions/aeon.json | 473 ++++++++++++++++ extensions/aeon/files/blocks.dat | Bin 0 -> 113892 bytes extensions/blockchain-explorer.json | 20 +- extensions/core/monero.json | 533 ++++++++++++++++++ extensions/core/monero/files/blocks.dat | 0 extensions/core/monero/files/checkpoints.dat | 0 .../core/monero/files/testnet_blocks.dat | 0 extensions/donations.json | 77 +++ extensions/enable-cors.json | 4 +- extensions/versionized-parameters.json | 83 +++ install_dependencies.sh | 7 +- lib/file-modification.py | 47 +- 14 files changed, 1277 insertions(+), 62 deletions(-) create mode 100644 configs/aeon.json create mode 100644 extensions/aeon.json create mode 100644 extensions/aeon/files/blocks.dat create mode 100644 extensions/core/monero/files/blocks.dat create mode 100644 extensions/core/monero/files/checkpoints.dat create mode 100644 extensions/core/monero/files/testnet_blocks.dat create mode 100644 extensions/donations.json create mode 100644 extensions/versionized-parameters.json diff --git a/compile.sh b/compile.sh index 210354b..1b1644e 100644 --- a/compile.sh +++ b/compile.sh @@ -42,53 +42,11 @@ fi # Move and zip binaries if [[ $archive == "1" ]]; then BUILD_PATH="${WORK_FOLDERS_PATH}/builds" - MAC_BUILD_NAME="${__CONFIG_core_CRYPTONOTE_NAME}-mac" - LINUX_BUILD_NAME="${__CONFIG_core_CRYPTONOTE_NAME}-linux" - WINDOWS_BUILD_NAME="${__CONFIG_core_CRYPTONOTE_NAME}-windows" ALL_BUILD_FILES="${__CONFIG_core_CRYPTONOTE_NAME}-all-files" - case "$OSTYPE" in - msys*) rm -f ${BUILD_PATH}/${WINDOWS_BUILD_NAME}.zip - rm -rf ${BUILD_PATH}/${WINDOWS_BUILD_NAME} - mkdir -p ${BUILD_PATH}/${WINDOWS_BUILD_NAME} - cp ${NEW_COIN_PATH}/build/release/bin/monerod.exe ${BUILD_PATH}/${WINDOWS_BUILD_NAME} - cp ${NEW_COIN_PATH}/build/release/bin/monero-wallet-cli.exe ${BUILD_PATH}/${WINDOWS_BUILD_NAME} - if [[ " ${__CONFIG_extensions_text} " == *"multiply.json"* ]]; then - rm -rf ${BUILD_PATH}/${WINDOWS_BUILD_NAME}/configs/.git - rm -rf ${BUILD_PATH}/${WINDOWS_BUILD_NAME}/configs/.gitignore - fi - cd ${BUILD_PATH} - zip -r ${WINDOWS_BUILD_NAME}.zip ${WINDOWS_BUILD_NAME}/ - ;; - darwin*) rm -f ${BUILD_PATH}/${MAC_BUILD_NAME}.zip - rm -rf ${BUILD_PATH}/${MAC_BUILD_NAME} - mkdir -p ${BUILD_PATH}/${MAC_BUILD_NAME} - cp ${NEW_COIN_PATH}/build/release/bin/monerod ${BUILD_PATH}/${MAC_BUILD_NAME} - cp ${NEW_COIN_PATH}/build/release/bin/monero-wallet-cli ${BUILD_PATH}/${MAC_BUILD_NAME} - if [[ " ${__CONFIG_extensions_text} " == *"multiply.json"* ]]; then - rm -rf ${BUILD_PATH}/${MAC_BUILD_NAME}/configs/.git - rm -rf ${BUILD_PATH}/${MAC_BUILD_NAME}/configs/.gitignore - fi - cd ${BUILD_PATH} - zip -r ${MAC_BUILD_NAME}.zip ${MAC_BUILD_NAME}/ - ;; - *) rm -f ${BUILD_PATH}/${LINUX_BUILD_NAME}.tar.gz - rm -rf ${BUILD_PATH}/${LINUX_BUILD_NAME} - mkdir -p ${BUILD_PATH}/${LINUX_BUILD_NAME} - cp ${NEW_COIN_PATH}/build/release/bin/monerod ${BUILD_PATH}/${LINUX_BUILD_NAME} - cp ${NEW_COIN_PATH}/build/release/bin/monero-wallet-cli ${BUILD_PATH}/${LINUX_BUILD_NAME} - if [[ " ${__CONFIG_extensions_text} " == *"multiply.json"* ]]; then - rm -rf ${BUILD_PATH}/${LINUX_BUILD_NAME}/configs/.git - rm -rf ${BUILD_PATH}/${LINUX_BUILD_NAME}/configs/.gitignore - fi - cd ${BUILD_PATH} - tar -zcvf ${LINUX_BUILD_NAME}.tar.gz ${LINUX_BUILD_NAME} - ;; - esac - rm -rf ${BUILD_PATH}/${ALL_BUILD_FILES} mkdir -p ${BUILD_PATH}/${ALL_BUILD_FILES} - cp -R ${NEW_COIN_PATH}/build/release/src/ ${BUILD_PATH}/${ALL_BUILD_FILES}/ + cp -R ${NEW_COIN_PATH}/build/release/bin/ ${BUILD_PATH}/${ALL_BUILD_FILES}/ if [[ " ${__CONFIG_extensions_text} " == *"multiply.json"* ]]; then git clone https://github.com/forknote/configs.git ${BUILD_PATH}/${ALL_BUILD_FILES}/configs rm -rf ${BUILD_PATH}/${ALL_BUILD_FILES}/configs/.git diff --git a/configs/aeon.json b/configs/aeon.json new file mode 100644 index 0000000..0973d7f --- /dev/null +++ b/configs/aeon.json @@ -0,0 +1,51 @@ +{ + "extensions": [ + "core/monero.json", + "donations.json", + "aeon.json" + ], + "base_coin": { + "name": "monero", + "git": "https://github.com/monero-project/monero.git" + }, + "core": { + "COIN_NAME": "Aeon", + "CRYPTONOTE_NAME": "aeon", + "CRYPTONOTE_PUBLIC_ADDRESS_BASE58_PREFIX": 178, + "CRYPTONOTE_PUBLIC_INTEGRATED_ADDRESS_BASE58_PREFIX": 179, + "CRYPTONOTE_PUBLIC_SUBADDRESS_BASE58_PREFIX": 42, + "MAINNET_P2P_DEFAULT_PORT": 11180, + "MAINNET_RPC_DEFAULT_PORT": 11181, + "MAINNET_ZMQ_RPC_DEFAULT_PORT": 11182, + "TESTNET_P2P_DEFAULT_PORT": 22280, + "TESTNET_RPC_DEFAULT_PORT": 22281, + "TESTNET_ZMQ_RPC_DEFAULT_PORT": 22282, + "MAINNET_SEED_NODES":"full_addrs.insert(\"74.91.23.186:11180\");\nfull_addrs.insert(\"192.187.114.114:11180\");\nfull_addrs.insert(\"34.200.218.170:11180\");\nfull_addrs.insert(\"144.76.104.208:11180\");\n", + "MAINET_CHECKPOINTS":" ADD_CHECKPOINT(1, \"1440a20f078bf3264822234b347f8382606577d73d4e9d3cb7296d73889bc421\");\n ADD_CHECKPOINT(100, \"6dd13aaab16679f49ee6b2b75c7dc99b1fd09ab2282b18cb4b55b73110655742\");\n ADD_CHECKPOINT(1000, \"bc6458452fd0575a314089bf302f6fd68ebaa2d689c42f3365293b96bbdf1f25\");\n ADD_CHECKPOINT(10000, \"1ac1ebd25baf0d6ec593daa3389f1aa7e860ff2cc29f3cf1be586d245b379da4\");\n ADD_CHECKPOINT(15000, \"15567af42afc1ed00538f53b5e3822d421e3ed6372ca79f4ea4e3e3bab709a87\");\n ADD_CHECKPOINT(175500, \"3f7dd748b3b863b04654d87a387f2b65a365f467188971f3192eab2368e64a35\");\n ADD_CHECKPOINT(450000, \"f69a6e57c4dd5df2f492c9d31c50f11aad2c25a64d540ce5f5d11b572aec8ab7\");\n ADD_CHECKPOINT(540000, \"94e19cf9d5a16ae90f67c321f8376b87da21d6d6c2cb0957b9ab558dca66c1dc\");\n ADD_CHECKPOINT(592001, \"e8bc936b287a9c426a15cf127624b064c88e6d37655cc87f9a62cf1623c62385\");\n ADD_CHECKPOINT(798358, \"804c7fe07511d9387e7cda534c9e8b644d406d8d0ff299799a8177850d4e75a0\");\n ADD_CHECKPOINT(871000, \"99f7e5460da3fb4e2b15214017b0a17ff0294823ad852259ff837f0ffeeb90f0\");\n", + "MAINNET_HARDFORKS":"{ 1, 1, 0, 1341378000 }", + "MAINNET_HARDFORK_V1_LAST_BLOCK":18446744073709551615, + "MAINNET_HARDFORK_V1HF":592000, + + "P2P_STAT_TRUSTED_PUB_KEY": "", + + "MAINNET_GENESIS_TX": "013c01ff0001ffffffffffff03029b2e4c0281c0b02e7c53291a94d1d0cbff8883f8024f5142ee494ffbbd08807121012bf2d282da90cee9c7a28c16e81418101ee28607d9e50f706594ee144a453b68", + "TESTNET_GENESIS_TX": "013c01ff0001ffffffffffff03029b2e4c0281c0b02e7c53291a94d1d0cbff8883f8024f5142ee494ffbbd08807121017c18fb180e05e89625b8324cd22ceeb3d4925ebaa5c274c9e927b2cf5669ffd6", + "MAINNET_NETWORK_ID": "0x32 ,0x32, 0xF3, 0x91 , 0x81, 0x18 , 0x41, 0x61, 0x17, 0x31, 0x00, 0x82, 0x16, 0xA1, 0xA1, 0x10", + "TESTNET_NETWORK_ID": "0x32 ,0x32, 0xF3, 0x91 , 0x81, 0x18 , 0x41, 0x61, 0x17, 0x31, 0x00, 0x82, 0x16, 0xA1, 0xA1, 0x11", + "MONEY_SUPPLY": 18446744073709551615, + "FINAL_SUBSIDY_PER_MINUTE": 0, + "DEFAULT_FEE": 10000000000, + "EMISSION_SPEED_FACTOR_PER_MINUTE_V1": 20, + "EMISSION_SPEED_FACTOR_PER_MINUTE_V1HF":18, + "DIFFICULTY_WINDOW_V1": 720, + "DIFFICULTY_WINDOW_V1HF": 360, + "DIFFICULTY_WINDOW_V2": 360, + "DIFFICULTY_TARGET_V1": 60, + "DIFFICULTY_TARGET_V1HF": 240, + "DIFFICULTY_TARGET_V2": 240, + + "POW_SPEED_MULTIPLIER_V1HF": 2, + "MEMORY_MULTIPLIER_V1HF": 0.5, + "CONFIG_DONATION_ADDRESS": "WmsSWgtT1JPg5e3cK41hKXSHVpKW7e47bjgiKmWZkYrhSS5LhRemNyqayaSBtAQ6517eo5PtH9wxHVmM78JDZSUu2W8PqRiNs" + } +} diff --git a/extensions/aeon.json b/extensions/aeon.json new file mode 100644 index 0000000..6e6db04 --- /dev/null +++ b/extensions/aeon.json @@ -0,0 +1,473 @@ +{ + "file": "aeon.json", + "description": "Changes for aeon", + "required": [ + "core/monero.json" + ], + "files": [ + { + "path": "/src/cryptonote_config.h", + "changes": [ + { + "action": "add_below", + "marker": "#define DIFFICULTY_TARGET_V1", + "parameters": { + "text": [ + "#define DIFFICULTY_TARGET_V1HF %s" + ], + "replace_text_alt": [ + "#define DIFFICULTY_TARGET_V1HF DIFFICULTY_TARGET_V1" + ], + "var": "DIFFICULTY_TARGET_V1HF" + } + }, + { + "action": "add_below", + "marker": "#define DIFFICULTY_WINDOW 720", + "parameters": { + "text": [ + "#define DIFFICULTY_WINDOW_V1HF %s" + ], + "replace_text_alt": [ + "#define DIFFICULTY_WINDOW_V1HF DIFFICULTY_WINDOW" + ], + "var": "DIFFICULTY_WINDOW_V1HF" + } + }, + { + "action": "add_below", + "marker": "#define EMISSION_SPEED_FACTOR_PER_MINUTE (20)", + "parameters": { + "text": [ + "#define EMISSION_SPEED_FACTOR_PER_MINUTE_V1HF (%s)" + ], + "replace_text_alt": [ + "#define EMISSION_SPEED_FACTOR_PER_MINUTE_V1HF EMISSION_SPEED_FACTOR_PER_MINUTE" + ], + "var": "EMISSION_SPEED_FACTOR_PER_MINUTE_V1HF" + } + }, + { + "action": "add_below", + "marker": "#define DIFFICULTY_CUT 60", + "parameters": { + "text": [ + "#define MAINNET_HARDFORK_V1HF %s" + ], + "replace_text_alt": [ + "#define MAINNET_HARDFORK_V1HF 18446744073709551615" + ], + "var": "MAINNET_HARDFORK_V1HF" + } + }, + { + "action": "add_below", + "marker": "#define DIFFICULTY_BLOCKS_COUNT DIFFICULTY_WINDOW + DIFFICULTY_LAG", + "parameters": { + "text": [ + "#define POW_SPEED_MULTIPLIER_V1HF %s" + ], + "var": "POW_SPEED_MULTIPLIER_V1HF" + } + }, + { + "action": "add_below", + "marker": "#define HASH_OF_HASHES_STEP 256", + "parameters": { + "text": [ + "#define MEMORY_MULTIPLIER_V1HF %s" + ], + "replace_text_alt": [ + "#define MEMORY_MULTIPLIER_V1HF 1" + ], + "var": "MEMORY_MULTIPLIER_V1HF" + } + } + ] + }, + + { + "path": "/src/crypto/slow-hash.c", + "changes": [ + { + "action": "replace", + "marker": "#define state_index(x) (((*((uint64_t *)x) >> 4) & (TOTALBLOCKS - 1)) << 4)", + "parameters": { + "text": [ + "#define state_index(x,mul) (((*((uint64_t *)x) >> 4) & ((int)(TOTALBLOCKS*(mul)) - 1)) << 4)" + ] + } + }, + { + "action": "replace", + "marker": "j = state_index(a); \\", + "parameters": { + "text": [ + " j = state_index(a, memory_multiplier); \\" + ] + } + }, + { + "action": "replace", + "marker": "j = state_index(c); \\", + "parameters": { + "text": [ + " j = state_index(c, memory_multiplier); \\" + ] + } + }, + { + "action": "replace", + "marker": "for(i = 0; i < MEMORY / INIT_SIZE_BYTE; i++)", + "parameters": { + "text": [ + " for(i = 0; i < (MEMORY * memory_multiplier) / INIT_SIZE_BYTE; i++)" + ] + } + }, + { + "action": "replace", + "marker": "for(i = 0; i < ITER / 2; i++)", + "parameters": { + "text": [ + " for(i = 0; i < (ITER * memory_multiplier) / 2; i++)" + ] + } + }, + { + "action": "replace", + "marker": "void cn_slow_hash(const void *data, size_t length, char *hash) {", + "parameters": { + "text": [ + "void cn_slow_hash(const void *data, size_t length, char *hash) {", + " cn_slow_hash_with_multiplier(data, length, hash, 1);", + "}", + "", + "void cn_slow_hash_with_multiplier(const void *data, size_t length, char *hash, double memory_multiplier) {" + ] + } + }, + { + "action": "replace", + "marker": "void cn_slow_hash(const void *data, size_t length, char *hash)", + "parameters": { + "text": [ + "void cn_slow_hash(const void *data, size_t length, char *hash)", + "{", + " cn_slow_hash_with_multiplier(data, length, hash, 1);", + "}", + "", + "void cn_slow_hash_with_multiplier(const void *data, size_t length, char *hash, double memory_multiplier)" + ] + } + }, + { + "action": "replace", + "marker": "for (i = 0; i < MEMORY / INIT_SIZE_BYTE; i++) {", + "parameters": { + "text": [ + " for (i = 0; i < (MEMORY * memory_multiplier) / INIT_SIZE_BYTE; i++) {" + ] + } + }, + { + "action": "replace", + "marker": "for (i = 0; i < ITER / 2; i++) {", + "parameters": { + "text": [ + " for (i = 0; i < (ITER * memory_multiplier) / 2; i++) {" + ] + } + }, + { + "action": "replace", + "marker": "j = e2i(a, MEMORY / AES_BLOCK_SIZE);", + "parameters": { + "text": [ + " j = e2i(a, (MEMORY * memory_multiplier) / AES_BLOCK_SIZE);" + ] + } + }, + { + "action": "replace", + "marker": "assert(j == e2i(a, MEMORY / AES_BLOCK_SIZE));", + "parameters": { + "text": [ + " assert(j == e2i(a, (MEMORY * memory_multiplier) / AES_BLOCK_SIZE));" + ] + } + } + ] + }, + + + { + "path": "/src/crypto/hash-ops.h", + "changes": [ + { + "action": "add_below", + "marker": "void cn_slow_hash(const void *data, size_t length, char *hash);", + "parameters": { + "text": [ + "void cn_slow_hash_with_multiplier(const void *data, size_t length, char *hash, double memory_multiplier);" ] + } + } + ] + }, + { + "path": "/src/crypto/hash.h", + "changes": [ + { + "action": "add_above", + "marker": "inline void cn_slow_hash(const void *data, std::size_t length, hash &hash) {", + "parameters": { + "text": [ + "inline void cn_slow_hash_with_multiplier(const void *data, std::size_t length, hash &hash, double memory_multiplier) {", + " cn_slow_hash_with_multiplier(data, length, reinterpret_cast(&hash), memory_multiplier);", + "}", + "" + ] + } + } + ] + }, + + { + "path": "/src/cryptonote_basic/cryptonote_basic_impl.h", + "changes": [ + { + "action": "add_below", + "marker": "bool get_block_reward(size_t median_size, size_t current_block_size, uint64_t already_generated_coins, uint64_t &reward, uint8_t version);", + "parameters": { + "text": [ + " bool get_block_reward(size_t median_size, size_t current_block_size, uint64_t already_generated_coins, uint64_t &reward, uint8_t version, size_t height);" + ] + } + } + ] + }, + { + "path": "/src/cryptonote_basic/cryptonote_basic_impl.cpp", + "changes": [ + { + "action": "replace", + "marker": "const int emission_speed_factor = EMISSION_SPEED_FACTOR_PER_MINUTE - (target_minutes-1);", + "parameters": { + "text": [ + "int emission_speed_factor = EMISSION_SPEED_FACTOR_PER_MINUTE - (target_minutes-1);", + "emission_speed_factor = height < MAINNET_HARDFORK_V1HF ? EMISSION_SPEED_FACTOR_PER_MINUTE - (target_minutes-1) : EMISSION_SPEED_FACTOR_PER_MINUTE_V1HF - (target_minutes-1);" + ] + } + }, + { + "action": "replace", + "marker": "bool get_block_reward(size_t median_size, size_t current_block_size, uint64_t already_generated_coins, uint64_t &reward, uint8_t version) {", + "parameters": { + "text": [ + "bool get_block_reward(size_t median_size, size_t current_block_size, uint64_t already_generated_coins, uint64_t &reward, uint8_t version) {", + " get_block_reward(median_size, current_block_size, already_generated_coins, reward, version, 0);", + "}", + "", + "bool get_block_reward(size_t median_size, size_t current_block_size, uint64_t already_generated_coins, uint64_t &reward, uint8_t version, size_t height) {" + ] + } + } + ] + }, + { + "path": "/src/cryptonote_core/blockchain.cpp", + "changes": [ + { + "action": "replace", + "marker": "if (!get_block_reward(epee::misc_utils::median(last_blocks_sizes), cumulative_block_size, already_generated_coins, base_reward, version))", + "parameters": { + "text": [ + " if (!get_block_reward(epee::misc_utils::median(last_blocks_sizes), cumulative_block_size, already_generated_coins, base_reward, version, m_db->height()))" + ] + } + }, + { + "action": "replace", + "marker": "if (!get_block_reward(median, 1, already_generated_coins, base_reward, version))", + "parameters": { + "text": [ + " if (!get_block_reward(median, 1, already_generated_coins, base_reward, version, m_db->height()))" + ] + } + }, + { + "action": "replace", + "marker": "return next_difficulty(timestamps, difficulties, target);", + "parameters": { + "text": [ + "return next_difficulty(timestamps, difficulties, target, m_db->height());" + ] + } + }, + { + "action": "replace", + "marker": "if (!m_tx_pool.fill_block_template(b, median_size, already_generated_coins, txs_size, fee, expected_reward, m_hardfork->get_current_version()))", + "parameters": { + "text": [ + " if (!m_tx_pool.fill_block_template(b, median_size, already_generated_coins, txs_size, fee, expected_reward, m_hardfork->get_current_version(), height))" + ] + } + }, + { + "action": "replace", + "marker": "return get_current_hard_fork_version() < 2 ? DIFFICULTY_TARGET_V1 : DIFFICULTY_TARGET_V2;", + "parameters": { + "text": [ + " uint64_t difficulty_target = DIFFICULTY_TARGET_V1;", + " if (m_db->height() >= MAINNET_HARDFORK_V1HF)", + " difficulty_target = DIFFICULTY_TARGET_V1HF;", + " if (get_current_hard_fork_version() >= 2)", + " difficulty_target = DIFFICULTY_TARGET_V2;", + "", + "return difficulty_target;" + ] + } + } + ] + }, + { + "path": "/src/cryptonote_basic/cryptonote_format_utils.cpp", + "changes": [ + { + "action": "replace", + "marker": "crypto::cn_slow_hash(bd.data(), bd.size(), res);", + "parameters": { + "text": [ + " size_t memory_multiplier = 1;", + " if (height >= MAINNET_HARDFORK_V1HF)", + " memory_multiplier = MEMORY_MULTIPLIER_V1HF;", + " crypto::cn_slow_hash_with_multiplier(bd.data(), bd.size(), res, memory_multiplier);" + ] + } + } + ] + }, + { + "path": "/src/cryptonote_core/cryptonote_tx_utils.cpp", + "changes": [ + { + "action": "replace", + "marker": "if(!get_block_reward(median_size, current_block_size, already_generated_coins, block_reward, hard_fork_version))", + "parameters": { + "text": [ + " if(!get_block_reward(median_size, current_block_size, already_generated_coins, block_reward, hard_fork_version, height))" + ] + } + } + ] + }, + + { + "path": "/src/cryptonote_core/tx_pool.h", + "changes": [ + { + "action": "add_below", + "marker": "bool fill_block_template(block &bl, size_t median_size, uint64_t already_generated_coins, size_t &total_size, uint64_t &fee, uint64_t &expected_reward, uint8_t version);", + "parameters": { + "text": [ + " bool fill_block_template(block &bl, size_t median_size, uint64_t already_generated_coins, size_t &total_size, uint64_t &fee, uint64_t &expected_reward, uint8_t version, size_t height);" + ] + } + } + ] + }, + + { + "path": "/src/cryptonote_core/tx_pool.cpp", + "changes": [ + { + "action": "replace", + "marker": "bool tx_memory_pool::fill_block_template(block &bl, size_t median_size, uint64_t already_generated_coins, size_t &total_size, uint64_t &fee, uint64_t &expected_reward, uint8_t version)", + "parameters": { + "text": [ + " bool tx_memory_pool::fill_block_template(block &bl, size_t median_size, uint64_t already_generated_coins, size_t &total_size, uint64_t &fee, uint64_t &expected_reward, uint8_t version)", + " {", + " fill_block_template(bl, median_size, already_generated_coins, total_size, fee, expected_reward, version, 0);", + " }", + " bool tx_memory_pool::fill_block_template(block &bl, size_t median_size, uint64_t already_generated_coins, size_t &total_size, uint64_t &fee, uint64_t &expected_reward, uint8_t version, size_t height)" + ] + } + }, + { + "action": "replace", + "marker": "get_block_reward(median_size, total_size, already_generated_coins, best_coinbase, version);", + "parameters": { + "text": [ + " get_block_reward(median_size, total_size, already_generated_coins, best_coinbase, version, height);" + ] + } + }, + { + "action": "replace", + "marker": "if(!get_block_reward(median_size, total_size + meta.blob_size, already_generated_coins, block_reward, version))", + "parameters": { + "text": [ + " if(!get_block_reward(median_size, total_size + meta.blob_size, already_generated_coins, block_reward, version, height))" + ] + } + } + ] + }, + + + { + "path": "/src/cryptonote_basic/difficulty.h", + "changes": [ + { + "action": "add_below", + "marker": "difficulty_type next_difficulty(std::vector timestamps, std::vector cumulative_difficulties, size_t target_seconds);", + "parameters": { + "text": [ + " difficulty_type next_difficulty(std::vector timestamps, std::vector cumulative_difficulties, size_t target_seconds, uint64_t height);" + ] + } + } + ] + }, + { + "path": "/src/cryptonote_basic/difficulty.cpp", + "changes": [ + { + "action": "replace", + "marker": "difficulty_type next_difficulty(std::vector timestamps, std::vector cumulative_difficulties, size_t target_seconds) {", + "parameters": { + "text": [ + "", + " difficulty_type next_difficulty(std::vector timestamps, std::vector cumulative_difficulties, size_t target_seconds) {", + " next_difficulty(timestamps, cumulative_difficulties, target_seconds, 0);", + " }", + "", + " difficulty_type next_difficulty(std::vector timestamps, std::vector cumulative_difficulties, size_t target_seconds, uint64_t height) {" + ] + } + }, + { + "action": "replace", + "marker": "return (low + time_span - 1) / time_span;", + "parameters": { + "text": [ + "", + " difficulty_type new_diff = (low + time_span - 1) / time_span;", + "", + " if (height >= MAINNET_HARDFORK_V1HF && height < MAINNET_HARDFORK_V1HF+DIFFICULTY_WINDOW_V1HF) {", + " new_diff += new_diff*(MAINNET_HARDFORK_V1HF+DIFFICULTY_WINDOW_V1HF-height)*(POW_SPEED_MULTIPLIER_V1HF-1)/DIFFICULTY_WINDOW_V1HF;", + " }", + "", + " return new_diff;" + ] + } + } + ] + }, + { + "path": "/src/blocks/blocks.dat", + "action": "add", + "source": "/aeon/files/blocks.dat" + } + ] +} diff --git a/extensions/aeon/files/blocks.dat b/extensions/aeon/files/blocks.dat new file mode 100644 index 0000000000000000000000000000000000000000..1d786bbaafd07d37767d045df6c4365e71886a58 GIT binary patch literal 113892 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%0DFRYZK9= ztgaEd3$XwY;PhQPu+*V5$RW}9HaH9#gDwD;pHIx|)LBnTjWg{Ea3|Z85in02f)Xi< zTB&TGxcH=Y?z6rLw|jI;KXs!P1M(k-hv*~JIMbqdnHxs?C@m4}In4Wm+0Xls@iNhK zGa!lXiJ?X@HZ8S#S}q5p612&Bdc#teW+lk#a`08CCqr1;wHRzjE3b13h^a=Qz}f)r zDmgh){(8yz1;oqJ)f(pxm<`0+7hYc#h}+l~5q?gNUCyqR2Pb&U+SG^GHb&@+s96Kk zefq)^WY!4_zr=UlY-GY=$;m~8!1Jh+)Xe}||MFKC7MDA#QXHc*XOHI-?s~%d-v>L!NjgWafKU9i$vZs!Vy! z#HkM*RB>5hUx2CuRV4_;YWh6$#BDP=%hc*-i^O`jvN#D<1ac^vBq^5=+@bs~$*jnr z26a%8h1ys=fhrH0{CV0riQ$l;UFyusw&{Zs?1>})_v{KSr@$p-7u}~mgkPMoKpK2| zn`1k-M&1EchgNF?exXw_6GLllN>xSg3YSvX{^tDJ;{!VaQ3tbta+KY$RuaAdT&!`BpE zO&KgNQM^Bs9RfJjl+n~3Hsfu)iOx3h-mDj2eVp3QvhUj}kEcf>;ctQGi5Y%Qd$p(& zE~I0IG=jhBzM#w*c8{X!NnE+v7nBMIAWk+)uY4!$A19M-J7^2l;6D&fmjmK{!`?4t z=^yH$DUWHAJM|xCb%5Y+gt8pQ6?|z{h+IiR zrP#+3L|IK_))qCTjQ98DU08VTPuya*dGa#Ty*ss^Iwj^56;Egu8`2x~Xp!=yE$K*o{fwVD;YwqEcIy zc&NNcFzG4PCPv)22VK1t7p~!aH*falpsZ{F-a?$JY6ot&@N{bC|1HKPL7izVA*Pz| zU$6UhQUA)`0^0TrJk>OO5BBxC_zZ>0gM3=y#ampoaZpF$SZzLu7}^W#YG<$l(W=#j z2*z`HI*gYWQDUy};y8EhvJZKYoaSnA$Lg-~X=rxi_I{JkPiT-Ut2kE!B?P5xWJgbI z5VF648tiHyO&p|=fuRyB12eRe7ogz)EsNFLeaz|a~858J$Wskt#-1|7ncf#^WHfOvm?S-_LN6J ztvVA1WZd!$p(GzxNq zd5EOICI>7`7XG`U8Gx8%!NN-B+62(ubRXw}4}&6e_2jh1o2<95Od0$VgTa_(r0}tK z6bUuzDc7AQh7^B6D5uwzFX{w|fx>*nCrSXR?V?wDG9ZZ(S7<~H$-$M)wi$6eaO_^& z80;=*sb8ifli|ZT8SrQ7d@M8KX6itZ+1^i&+Ij&MOgUu65Zu<4iS)Ldfp?9QLl@89$!{Oq4Q(n{6{>~H< zwtBpz2v0yAcTl`aV^E^Q8iVsj?U zm@r{5i)8Bs8C|~$R?)AZ(UyZ`FNDaIHCBfqkc4!Zm9DTwX^;0J#(4u(nucILcTrU zk-@wiFhP3cL5gX%;k$1s4{sS(>%|2eaWL=!=B}wg`e1ePk`HS5h}Sf5AzWqcoaXqM z^f;7BOq>GaOCN_7z_CbRnr)5>qdyaGc9VV2(4?bc&()!5m=5br0O9viI;tQuxZ6|R z@*cA5GZ$V{4-s`LGew}b@IREpz1o}>A-enB35BGsc#Mj-+PT{t_M7Ynp zu{MgTmZyuZMdPY;(S#1W%s$&dovY56NWYUz@5(~}EvFL}%)esC(Ais1 zNJ~*rcLWen)Fd2{p+ZeAAQLazp_>|S?j^8YP1iKkWdojlEDnCuefi_ z!=FYDbm19GroA=G4hk8dxFt0d%7`@CB)`U|9$^MiH<8Efzd&?}Y_0%*FLRFPvp7cM zxtuno6)wD~sXDcWsP<{AWbGc}wAfIDp{baQ{YRBnO>k}f?^Q!Ng-+m2K62#dA(-<` z9>%}UbSeup=0$6j?OmnP6cPtD_7`W4g|a?ZuOay!7n9jW=-?J7$bZJzNnb4DUmT#T z2pfZc`#KicQ=68B!Z-v`#D)%WZy%0Mmlxq`J)Ybp3IcTG76zhKBM~@y6Z3z9XLU&$ z+~;`cZhr|g-4l<2bo1RfGyRk)iN&9zzHlJj1eD^;$Gbl%1%twujLf(Gp_3Em!WSe+ zyC_IxD2bQ0jId}#xu*%jq+IZ8ZTLhq>V`sEO|+0zKi=*loEepth~4cJ3uv>JXzTB+{b0c0R2vVDFXo(5yz3;BJ4!>>l*9VTcafD`}Rg5fU*%*6qw|3Af2 zyAG;r=34qCMv{C+f$&d|z~1YZAPLfV!@VeVK6bb-@l%*TY~G-t6!=)5q0ucX)`l|@ zC5S&G-Z*jwp1u^&eR|1kPY=WOs8KlO@qii}7KHTZ^%heslR~ZmI2|hEU-5C}1^9ps zPL7%7b-|Lf`34(wJ#CKd&%0c{((cm~mC2ORlG#5L&muQb8T41zlLlAA8}%(eI)8YJ zLj7cCsgd>UiHPhQc!N|TW^%o>i}KL*URXRX5F~B;{XKSOJD?Os9LJK=cS6(ECcH&X zOjij5H-etdkFjhnfO!ind>Ny4vGJgV#?ZRfwNB2FL4*71blypX-NE9&yqa{3awk*PRXK`JwM)2g47vs7mSz!+LAS#c!jcHF*rK)8TQZAfOC zQE0$f{?cOEY+&+j#8W;iZdE?ID#!POUkj&*-6*IbS{jljAwvinIwdsqTT#X~L?(2E zl%m9FAGT6LY!8g*c-LF!S)ik}>6qR=Ct7!pYwy&^IT0i9?o?BJ;Uy92FWWY=3!}(oi=XY5M2aMGQKlOS1)La`OS#O*2X9}8Wzl9 zN~^pnFn=ZoWSR~d#wUZt6k)ou-+@~!LRO9{9UDnRO1Fn+IfLFYnO}dnqF}wUE_@@d zSbfY+G^u>DG{ghCC`$oeeFPMU@`XjGg&o@GmMNKOn*Ig zNO4IBtX;ZqoZi!G(E*e>Bsj*X*DL{@Py6-~>emiM;Zp9q<`mVL5Gl@cWg0=09h@cygf=&1ng zY$rA|A|UkYqbaYAh;@3c?tUZ1=@whRz8Vtc7cZT-ChN&}MN(nwg6)tIb)dYn32z3r z9~^vHW@oFAuH>dI&%3GqkfdICR&tvU-Tkt)b$R#AD-sLU>Ooy~6*lO4>PhMQcYc|w zu^ak7xQ%D0>W^T^y#Xo3QlbJUD2BS?5*yUNONezI9KHm!5%!9ms=tQGKUEg^cL5lg ztI~$5ph*~4JiU5td@KL!)XB_|O5qML*sf1?wALGG3nhf{Plk<@Bi$c=z(;6vy3DZ1 z^eK{EZ*d$>AVN+o)h1_sAm`q(;~+hjg+OUSDOfJ2}{xOx>SJ(q;TP$v&81c&;V1jkS!#iWmR2{e_tW3SkH z(CA=-QnPcP6+Dv-dH~a~bGLX88*9z&c~RScM)a*H5v+!@mP{@JDiQOnF$Je1n02T{ z3^pbYot`sex_g(k`URB1)Ad$n$83;Ep!)N3~wbW5pG5DR!F3 z3qZjGzqrg3JW9SYOl%ou5c8G9 z+w&zJTsZLqm+vBWtH4pDpa%~4>A-&kjXgB%dAZKLW^cyMR79&Hy*RYI!4+tN=PF z{RU$*L`EGApA61YKPlTAE%fZ_pJ1ef|DK5CA$X-s`mkY^VA@-iXqk=5%^Z( zbGs*D%dMe-3u=e6ac=qvG}gwSs4Lf5hy6&Oia(nT8c*{H@%l<8x zZ~Zz}zpy3Q@h>SokuOn^$RyJAM5_B!UNZSOpBtQizTom-8s5!d zXks{e@eRnq#M3xh7tyQu#*6T;ZYm)ui5#lTu-?!)nz{xre4cubigm2_f+~1QbZA_(XN<$bBGmxpDu zDoMQQTqqaO7J+#OVIi`)_D7`2;TJ(>BRGf&wpW1eb~ z1U5=-5RD9wGf9!5ugox@NRcLHb`I-cjZ;h}SX~PiQG`=dL0FuKun#v&`M6Ibf3}Sf zG+|{0!l}0#OdhZ!`A*%}2a8WmssCv(LvXXdZYF7LT$(oUafV&SSrn1unn(1B(s1@H zFJ|{a*j0j|)G}d~&M|hAYf#Osea2>Yq~nvOh;vCZWSlb|g}sE{HC~;|dyM0zED1D- zh3zY8q>n@emlD7_r5V&y?0DF&+9*6wGUwBPk$x90eI;#NmWkR*hedDmr;dqKpPYQ; zVyeZ`EwNXY6AF)8At(&^YPI+6o$VS$R8^{V&Y|-11z%S1xo_% zY?cKntKf(BkkSClBd$iH>}2c zsy*>XnIrixq-}@T(sybFr$ML6(_mX$@>#=VJGjy%QTgy~2OMgcO`TlO_Q}3QaJ4dG zlNY>9)Sl-~1g#&_lq#fy3m+TP8`6R}ITQ2ncCYTb>YRm!2GTmH<-=Rou^GaHj;+EN zfbDL%NwzcplS`kP`ja35V~0m)Ir@0>{7=@gM}4FZ+Z2dss#asj+JG^P??@0yJObn(Ovs`> zE+{aJh5l6@>C;UJCUxo&)j5ERkrYm5NSfe{l&Z?+aha_AJ10vUr!~q(Es8`^ z&_?YLW&gW)?s@8&EJ$!h`m-Y2o^b*v2>}{GCmA~u1}rG{piEGzQxbAMU*Q6qtB~>m z;hKpm?3)XumuOLhfiBS}^MWCp9KLI9K~BT^*J`q8 zd!^4ZUK^7CKCq$y*e?4)JeAu-m`dR`uz5$5FWI(v}Ut-fMVp^{tOE1)T}% zf0|Q^j=JiJIN!zq&hhLRCm-ee?0x4ACYIo3Gl?@lCm}UbSD8FK}EctiJQ6 z#ln?dpy{>)83cxzp{U_@mK+#MM=%3{R1PD|=5 zOxp?uUB>U)Znu?z*!x5v6q731hi1|Hgb>D`$dSrXp1-%^3Zi9lUCUedOX6?Z#={tH zHaXmQet%(bj~R61xT7i|q%&(OmD4?MbtDLFqov?itO{g$>z0FTZKsb2H-2gKYFk=B z)hN?-Y59NzR})+fcRpn?5`zw0c8YS7)x%{5=c4X(yku)1z5HcMv&)BnLYncSb8_>< z2+rD~Tw)GFyG`>lNEI3}g`5{;a?ny)Gg#%^8c1p{I+IPYsp(U$=4^+0(ricyZt zWX!@{d~CBt>B$kS0XIQKj7XBR9)H_Mp2I5I;xZ~7?Hjb6#(0`a!q-53N!tFzGSPYy z9qN}@Aa(x}ez302YwnIpk=v!u+ zT+LRsP6#TbInv8x0qKllR{Um%#ddwCW2^X=K|3)mgL>2z{=4jbRl@jR{i4xA<7!*N z6!+JsA3F%*R4qaZd#Or^EHI*q8KA7qqGMB6eP=- z`{I{0p4Eqs!0$T!!mknXC*mkO1N=y3@7H6G-St=(EbU}xbK8U>xTZRoe#H%(C64-Bl7eUiYm#3`Xzq>Ke zOjYX5AMeP?e+Em z9-p1*Q9DQ&jgMV=jHFVi5v80OutlisBK~KYln!qsJ|_1<<>nyJX3E-hgdRC;X7`AQ zK3%+%7+JP7Mx}x=-!KMcqVn|tW9`9eNHdRN(QMdlAPC_`qrTRVxGMJ8@WPRWAjBYd z@ZTad#8;C~4{R-l>*W-HRM-N(Cm$v+h}v5<5kJ%$2m zEtDheFEn53YkGn7+av=O5|Ix_hUXCDu2)xA!tx-$9b+B3<89SN@&J&MsRW)ls?JPD zo6$feV0Xp~#SbWRJZ9Bk$6tH$a!GXnWSW*nxS9m?8^Fy;91pbb$_7k9Pk)KB2T&(9 zQ-f@b-V2+#9k<^7Bs;{N=$B=c5Sar+KgWq($nctg$4bzQXP!(Tl2jp0cE8$Rmh+H{ zqw0TkVSTr)Qe?+&yJv&R5Qkye@PC5y-Lnj#8$hjUg`#(!9XALp^)K^1*|5GHnaqZ_ zpyJtlyt;saLxzd_9fH&<-vg)V8ShKer6y47FwX3mgMhb)@kfZ>$!L;PlYg^mpya#9 zXqBFXUeab@>y}!WugcN^pP-}B$wiMIb))-pE&FYElo`LHP760AJ#-+4<&OF0-a$K5 zv@ra%D4#hIyG{I3 z9CauO9O|Ryn_i(7a7Fh5jqb8}T;LBDoZGovLV%e|R^NBx^WSYBiqz`6a;3)Mmq6gH zL6^0;X3}Z#QYaY8Usw*n@#o^0J`aGyq&?pz5Wr0~0 zBa5y1YQeIam(y5S)chnGJj+j{K`?fs{6dY`3t3B*2x#YEvM*b=Zo zP-j)@_Kq~+u~b=3L5L3GY9=5EC!%2lfVXdL4Hm`3hB>vfxau&pEfdh;wpxwc>~xH> z)b-~YyGK^STa^!71Y=^VBBdZ#MTqmsLQCACUXww@A^z;F$&Nzse$tDO zOnh_-2!Jg-e2XA<)zXXchE^!FGX{Bt_lE)hh!3!JxA84MUTz;pfP#~P?|H>_X>Kn! z;r<}xTUzL3OWkErQcqQhSg(TdL86=H^7ruq*=N%n>*|bIEy?@^O|l+8a1V8fV02 z3fuaP?~@}^Pp>KXQaR00F)dU-2~z&wWs@dmf%Y8h7i@g{p{7}|3=Y_6KO*2_`hBo0 z%)p?236v%T|yf( ze2|zce*l>EA3UqSpDI5&44Zr}GYG*@htrxtiv3swlkcdr0%1{QrGdVmI@I(h{8Jo_$>n!nT$QK(s~0 zJXagee%l3f4mCx}&kiiSdDzd2xicyDwAKRbCz;H)w=DpxK;PmoS+fH)6^UsusSdoL zb56j(%ha0qg&<%*Oy|X~#>cblr3&%#`g#-R4uSZh11McDd}5b}<+F%?kYd#NypTZ7=390bp7V!a#co4hHGn=3Dp@>B4Z zF(Y*aD&b%AV18NLJX< zFd&kp;^AoX)<6t}#|Dmfzn!&ATBy8;0ZAw=1QT!$4!F}0Q`dn}n_}OmEJqDQu>~#N ztmh`D?p#(OjNry8!k5@F!qnloSoY5m#t+K{8Pa698Fn}U^6sol`L0Oh_Uz>~jg5wp zGEK;P*S=m@`VpQ80qO{#>e8!yjzRd)m9Yi1N*$3gNhp8+$;SK<5uLdwg_*Y;SW5^u zrify4r7FG{1K2RGR&x7W&APWpn%iHPa!O;zahxa8VH_nwcY6XM42@tQZMvNq)v+3E zS`#?EA(IO?9^z^bbzO;44t%I%Dv^)4PmHKI$o4Jj2PyEZBCgT>1*<)wy>-OJ|wpDDSE4#=>u7LRt%1Lq~R( zXgMC~s;|O`0(lN2Q)ch|(LW5A_d6*5B~_97bwyUwch@fC4sp54cDKL^moM=fO zF~we759KT2)*w>`Kht_js{8mF^(OT|<24YC^2Icg(WUX z=|wFzIa;JDxm8!XURU`KB%|2S)i}{$-(;8^tiV5IVqL&T9K||+uQxQsW+lLzApKgu z-qMnO92bogQf#unpmAn!YhMmsr4s?cFWetz)JD|#`BM)3afE7%snF-B$2qT%a3ch zQnUHM@yoIGEBl8f?EDcMF&7KDV@I@x?~HucAArAT1l!I)cQ|PzLL-k>JkbvJ1w~Kw z)NYd7Y&1RR)>He~*4?KV)o-!|H_0itlXJOr@lP?#e)wConXZF)`L+Ye#`($^~~QHu!+ zL%;X?7)sifs-e4I!4?dqKy}pF*j1Q%Yi5SY*9P+C^r9vho}Egg&VH!PBF*$&LOD{$N$a% z)zj?xm)C@ZyuUWHvEf#(NTugAoUSl=LVTgnx{8O}90!V!i7T{6JEDSM&w5lu{vj%z za9<5Yv@9d74)JG)0#93f71#msA#Wb6hPO_*S&b>le~bIbe=mtp07!8>#jD`8j6ECM z2#+;+$}PV7_h*3On#f;njKqVsa2*jJG&avP9QI^AYMXex-Ge|H5D z?06vH-LBBM)z$KgvoZW~Hi2K081F|SjJL#dEbVqXH1W7OPl{f%nNJnR>da+evc$Ar zVQwlpEX@Ff(T7*882c~>AUcFHB`NdDSaO;oXAc$6 zz67qp7p+5|QkbR=!3fGbfcSCh)V|tOBaij?E=ge1@MlwN0=^o`KRXq@c4xDyCQN;h zXVLH-06qVa91f{jc{@mxo^&+9gyjA(?s|G=F!*eX{#P>KGX`yw#I^|Oq-s)NwMg1)%T50SQE4cl3a^;6(_t9=5cBi{ z7=K}JXim8ZMf1V{G>_q8rYnGzsgqd0ZS=LAQxDRTwX^_zQ0>FTl<9P^PP|^+b24Zp z4{gqdcRXBsP)AC6UPh}FiT<<4Ioc9j?QD7uF zn4eTM@PbmbP$>!5>o10#w z?A)3*^{GSQkM+Cl5q~@fxLw1+#>P!0c0VO7`q^#`3NZ02v*3YxVe=&y?)*iV*KL*g zPVZk3mdxKQNoCzh08_9qoIOG6_m@!#!PdcVSjs*mLNSHKSE_OMpg(b7#Wj3)iLl*e zTevPvtx}7ea}ZdX0=|k6cn13$qwMtMui4H!7k^8THs7f)NCyANaligcHA46x^>Mrs z9y1CntI%U8=(R2IbWmMf1Id&zA47_CoicHT(v?^TZ_8LBOEUQvztj*Q@RNhhnQwK; z+dzaVmeh?=N6dbWZe%Y1x=kqOt-ndiJ#`y*kh_V{6wu+h*+XghFB&p?=!5%6hm&9< z^p{6ZZ@lMVE>?|DlCRBM&RGrmQMXH18dIcfLv2>{`Ag8-7&^;8kwA*>FWk@@twk_0 zRjF0Xmp7d3&#K%xH!#CK9a)>7rJEz1;{U6dUx8ju?Z1 z%8ccxu>e_ur_Jd7r&t~iaSM{!Iq&#TIMT~R<%m|yk(Q#NaFv=2cEni}3*wp2oY*sH z#2jgO4n9**u&>A~uOBGi`uE!{AekjQeiZF?Chi2Q*suY_bxsiXt{ZeyR=<0b)KQRP zm+t>tjlC6QO(VC#nR%L|(tTj$pWxa}@@s(%^wmiIFo4Z~C$!q%5|BKlB$0I2hhGv{ zcR9qEc|k5{eI780F?TiJpLFJ?f=~FxYtqnynpJ3`LL)h6iRthCY7QEkQbdb%3S=O4Dg zh7|Tb%ba^G@S+S5#ohSQ8D^DrZXw5A0(F0384vQoD_W=AW5TpO*v|ENC$qoM-m zrrL|8@0Gr5E-0TI02MIH)opLl zqZL}!M-Wta#yv(6$gPcPBk;v0UvlR%GfTh28A5qM+5Gfb+T==yS3h3jrqsi%T{rIM zY!!CMj9)+Bi>D<1;+0P7D&Jow zV)k*Y2y9JB6(atxBfh#(#xs0rSRbFcpb2PN_L^XP;$M-ZYnLH{QjM3JV4^9$B2d-hT%gCrVatJUb{04yZy+$- zp9SF>vy*>YOzo)GZCVJlae#xiX)zj?9YayFxs%X+ABTmrwJ!%g2JT(&__}-Oe^w5t z$793^CXKBUaK~jpVY+xfx=4B7g-ep8ft29~887d|G+%x!+yH`9kc^j0H|EI>PDeqO zh}hL9oq__$v!dZcsayq}rgKmBd(4|V0j3@C5ED5jY>~^BKenP_wGh3Y^mn-ZUKWfc zE8^vTzXNi5PL%2;<12ls`_fW+Ym`vWM!-3*sYo9LGGFv`n1watAxT@=SI+YiZJn6V zBVIxnMhKTN^qXfg;D0)d76m}lP+_ix0&rx zsM0dNFkY7jLRKJ(i+U89pY|(o#R)TzR&OQ}LO9r5N9V`LOyF)lk!`3Do8N{zdjP$W zJOrp3^_nsgY{T&N``+lA&K|K%bw4~q%*yYvFeVS(D(`Qnk^cNMi{W!cS>G8@5FYN) z7C+;0Ip+2+>UwRy2#6`u}UVlF}lfe-|J)})}Tw}wa_qXV2>2OeU0p)F-|Q4Oe^ z>=st3Ya;^zNOZ2@N4-Ef!)j37xg=XJ=|mFN65@eAteOjjYjdh+o=Ig*A!1$7@q|}OU_Gf=eyGw^W#zO!UpX1nmtBx&>|s?2P6hhdIfM{SCY~`cCWY*Vgcnd}G?tIc zv#4Fcsq$NK08>D$zbjv!Dt)G{aAZ)cBShPp1lq76>O4a*L91Izp&`p+op2r6R!zgK zj0%nyBXm6}-rC;7`031BQP{nc?D_$>@9I?a&e*NQrN0~LM;i><7V-zyqrmBdO)&g} zUZ@Bk#w>@#6O3R41|MXhr$>Lsrg^ACQS{PT>g&Kt_5VWaI{6LVHo9zi2##+X&_iP*6ufKK&Fyd_RHskfb z|6t+;E3x@Xdt08f=fVqdBiHo)L<72A7MyE1}k6`2|c5&Q1A)e=JxYb zE+7=Z(TLEypbp3H{pck7I&8(Qb9(StJhSC+DgT(wO6V5{1z%lCJ1_~z1OK(c(+4q! zJotu@*a_X&6CwmYdtLN&Ux2ACNF1$hn|MmTy2Duv;=UoPl}k+B(9`R)Dp*!(1h0D( zTSX!|=A$~Y6-o^pD_P&c9G>MOE(Cs-F*FcZPU}kuH+kFp9ObiSwP<}5n^tfL+1TQlrej4RPH_EDyB1)#+;#?lGwXj>{cxd}A#A7~rjMi22HmG3sL8<$g z@^L^T1E5(B(DA!kQ{(LqR=OP&_<=dZTJ$n<^eWif+_SgvxG30rKJ6kpeS0n zZVkYB?4rDQA!9UlZC`Dl0WA>p$HrGB1Z%tOo#%c(Mq4C#!?bkHRi6)Y>}zBTfygt& znl4?EK(S1IDc+JvAAx9J=-5f+sC#~(!}Tg#Z6c8iYWQ>Z`zFyT_~5BW5rQB{g$)!s zXG5=!vF8w@%yF=Do6oFs^YQH~XCg%Ep=tVH8HH~-uTp*GY6vjQ$6Wg>YCiR-zfpis zVgsZ~YL5IsvFE-Ob9D3ZN|<7$wTgz5I%Oo4PIJlZl_iisXovUaA3h@awh+F1?N>lT z-uK#U%-@KrNcU@5IZ61bWXJ_@Vv7ek@W_?NT}xPZBU7LhW&!8mB3q5A2#+LqN2a|x zohM_DgWNax=(J7RQjA{oB0MF`1J;A(c zSEM9eL3DOQV+RVc8tkL;)o#1-7T7uuC0m4>YCs`1jt$}!SU?Rdo?OACbHbU~fa;GW zRi~b%bFPQK$Rra4o(`{=KAQBlkN`(o8<#6qZtO zj2q#*t~c)mX46A?i$F z#NlNl7hJi>&lYEVik7kBUstW-;;$V$C;EQc{Tm{O9xvFwJ7Bbd60X+zI%!rAZuNXf zk@mve_T-r6s?fJxyEXBY&mb}82}`!G{ZnXd#lyDODl|8&O#91U)(WA~+%}%i#8JLF zx88Z9xU9fh!xeG%|@c^OnwDq(0+vWwUD(*r!M z`6f(DI&-ZuN$asJLe>vb8tb$9I{uWa7sz;$XN3v%TIE0RAWMFvq{W_$Cq2+Rgd7rS(fX!U z!qZ9%S64o*OQD3{s=E`dT=`66=p;N8<=V*+Lw=`4UM;xNJDBXT|MUl7Rwy$`5ZqwI z4)&tV`5>BNE_S<&t%w+n05iGr|#Rs=dp{vzICAMJ-c3&6e!&O2Wg zxK&nyJ)5lQFgYWQoy6!oQ$sC)IEJayZU1SpSw*wK$qQ(eW!;ZdI{P+E78Ac8R7<>1 z(6D_2!gwB>6PGX42|hK9>(+;4!w5f7^`&-GX-MwS(|BUF#b9Gt%!*q_3U2HRoPm3WDd_a` zVlUvGJzU8a(H})UbdU&{55FXjOVBkxx@@k3QcAvh;I<6p(V*WV7bf@3==Rrbo$G^C z7=zaK){O27ZO)@3pv9yh@8hCK;+9Sn%ma+@jp#yS%H93UW33|5x(LHxU`lGrUtNRf z)H5)vrT_DXM4R1Oy{?%71ZQ-~qQ6y9g7zMEWS$HgS^b)HYu>T~$K;ZTs46nMbP)?9 z3pl`0bw8=(;tMO%O@6#;x+PTFH6nzg+c7Z5AC+CQK9LEYFW+k$hw45mbTQ2PfgA%0r ziG^ZJCF~Q!D7t}i6O8(gTJTIFG9>lK_veiLmsY#UGB{g>v;cnLblYF6w>bW8j36|6 z>yZK=*DJ*(CZsy=h*mJe5)@kR^r}|_M!Y<1Q^;$F zTUwB|2AA;4r5;yVcg8-&PU!YTkcW(KToA+mFgopmqPS?;^2&RH4+^bNo z&r(CiEBDI${#sEd8O*X-!E;Pe`-b{Fxj(nryX%tIf-piI;dTm#sBA?#h%i3~Uu4~~ z)b1b6L&+9+1^mB$vA84|`^#PO4oD8|c0u%DQ<=0Qov9eH^8?#06otM|tQ!{G1}}r52xX$5LxqBiBkZ9N6#R3DY&u)5yq*Q5*@3#o;&{aqcbA zPj5SRbl6&@xzF?Y3Rvc<{t)K!IE8Km*>(`%#6PJJg2+avfAfPMBs=Q*vv^*6^hUt% z#JB4|WmthBlC)yyyRJGpxydv|G@*^=@!Yju9vnxJO+%qHgx4AzBU3ZM;emR_z%u_J@OQvgiGO*dP6_-d zzcJQk(oZJ5O_d5D(vb}u|L__+RF8U;@=r3nbELJZTE7*Mw7)|&E$Vb$qF~KrUVH|L z;It&>*v^$ILy)3+t4Fb#shLHi=jU{MMR7_K`>DmKN+VpYj$Q(cRK4y6RJ2MV%b(lu zHJI>i_%bo}KiV@acNruF2=ACNTpPSQ4h0<^hwyrFK;7l^B^{<9N8=JVLPw~Gv&c-K4nPA78zo_ka+g^cm9-c@-dWY%2>JJV$lCoc zG&ahw=+UPEa4=Nt=2OS^Q4uIGd`BB%tNKD(Y`kQQ9E;{lJ5tY_pWvV37Om&Y*#j?u zyzQ`kibgV6KDp=}bbwfT_JlT+YRMOByQqFB1P*jw-QHDVfrH@l(v~g2s~R*ja=hKk zcy%$t-x(ZKPl231RSkznH*lHmi6*pBbKCSQ<;iTo4lrr)Rbg&T&`wMNTsSa37*FLU z4R+obl@jj~pu#dBrOQE?U&d5&x|WnT<@Y;QuCwCNR4=49_1+pmK76sq6~Sa?S~-k2 zac-s%QA5-yo->Nb?RFdIYpXy@{b%#Al@266N6;j8aimd-(qud5QICA-xhu!^!X_}e7a;!T8DNSK^WNF) z1`b)(}VOrh7I?@LzFtN0&Feq=VA z<0(~1VEbnQMfZ08q2ZJOQ_fPItW_dhQD*8pDO1&<96tCGb2I}CJEMa&iwGs}JXnUE zPLr-_1EWR?ms!JG>N{#QgaE^lGnmKfiJ#6XE*-@y(tk8U6e_$I3>ar-L4-a($23^S#ecgUHiy<0yTD z7<~inl&jv>30xDlhU?oVvI-)`;)q zO&f)ku#41i{f_1OdkR2i(gc!5xB0nqho8ATP)u0#eZ_dwl%{!M zjTtJZZWLs}y~@saE3N&vh|i69K$d12ym0xQplXm{wIEm%oOXH+8ie%t_as#H(domX z**e?V4~TeL|HYZ4hVd;)%+1Wx(=bzCr@{;wxwV@m;{F7p#b9|ZiGEEp8m)3)FBHjfcNPZRSrSip`U|kqv6TWUeq z)~aRMpa6c+*z|ddA6s@0Is(3pb^jP#n%gX%K(Q<_qL0SV%2jF6f~2&4Y_1KYB8RpK z@3uYfXlNq(UtAVZX}qprHz8(<97S$Fm@Wm8q=N;HARGxA`mRsSTfIi^zKRuTeKL=x zP#u6)HH(Oj>)*AvW)X*7qAQfm7?0~jdv=e`axoHNx|GgMR~bu*ffxzi9>##uRK+FE z-N5YH$Lf?E%i1#_SQT_(1f_&aiR&Y=XH8vXrXi|ZkoesPrg9>EDs89Vh#6r%EwJrq zbbngO?>fvCzxy?r%=wracc@o7w=!E>WN#Er!)xJ&+!hLR#cE=wl`gd)bs;%#dKb6?gAjaH+UKW>q0)k%36ni6v>81qH5fQl zbV(_T7N8WEiiR@3QfITW)TeaHxBa2Tba}j(*F3y8NC^>SU+)i{8Leihc0J!hs7Iv! zr4>X2c^$r5_@C_-xNCumn%rt}R33%^$iPpJdvg&;%>7y6L#qu_UXyZenufK+P#m(p zLhQEwM?)(9L1+cXQ!~XKc_51kLcKwQ!$<&?A<0pKCwVC{etk(CancVpQ1YA2(-0=i z(u_N%HdgOn#J*7oW1t_;C)K6TQgQ8XA3&+kZ=@*K&iNL6aU5`WItA0Wqz!X;T>H^GI+P z_A!O~G({V6&2*{FJ+$OO>1W+d>#sV-r>*$Slct%nmq!=HDyKT~Z%o_mTI;DTZJuu* zD})ccZ^Cy|2uQEO7Qn2hjSmETHSod0`iy=EK8mD)-7wv7EGeCebHAB{h?J2qRNF}g zr9q1Ba;Osk{Lbi*X@KHwtO zaU8)yFgmN8ZisgcF+Q=5*B$M zB!7~iwjgeR58yb(-9mn?K2*F1($us`vG)v@Ykg*lUuF@y^k@5hXmSZ2BM}ljqdX?# zSfu8dFge!Ey%lQl6@QJH9}0G8lhhGX7?+R>Jb8h>i19ypjZD!zcwsxx^Yd zbu9$Lw>0m=*GlwAk{>U9kSo#Y_WCJnb=n+C9i0^IxX?$%XX1Ib=o2ua_+bP7L>Kl7o|NR-p(kVpb*t8-bV7xL{$0-XVny(zJ#x1C%DrG zUR!8xYGY69s6gqqkLAS>8VhMa2Co{-&?bnE7v~sMT>1#{gd*^Lf}&iW`tTf0>MjtZ zr#_NPycQRufm1Db7S)ac?FjcOE0m&H6V_jfVvFX`wct~1V7#p`->{NzPcf>Ni12qG zX))nihGP5FIMG0RIutS6J4Ad%CW9vbsS0ON3|xIKD+Tb-8NtVE(X}7`5Pw_ox*r4a z2g)Typ+EeftdD?S<1Bi&={6-h{rJkXl-GauZ54k?*wWd5dBwzFU~vKq53``ih8ICC zz5}2&Q|JfSsNo@OcGwKY-^gva?GW258bmxGzB83|$-p(uCKK@X8K3DSFO{TybHZ7k zh7w>n`=RKWtd&k8#?>hgK|gXE=FDRJM(i3r+MGbPxGz4kJMlK@&uOh0cS9@6gstUl z4xp;O2Z3`3{>QF6sI4@858sIqPtoIgB&L`FK=TNN(l}Y@T($+I*Y zGhSH6&W0+wJ;T&zY;GDV&IVmOyv1}y!S4Z>XyMgEYq{j|EawcsuA%XI_{M$bwV!@D z7GL0xlbHZ2myty(BNlg8=&tiTjdpx(**pYluDg5O%>goPX)12y?xRXk!Y~BL6RtB!S5! zKERB)&u(9coMt(IhjpbiP3~K2Hakxbg+=NrMczw}AYq-fXcy?B*~G;}|EBDMc^a*O zDgV(^XhPEb>lwpii9HM|RyKr)(U%Z7Ca>wgl72?^}ddz-W2zUoXRd}4h zNm%jbdpJ<}{t1r(LGL)83)x{aZ$Xbig4Fkfx(yir4!j=fmGj5OFB|5SVwtxlXw(58 z0??7N$DmF3p=Ksf$`R+FT0=l*(b5`jPOb)IAvf0-$?V_7z`Z^#pycJ0`fLj%m$(Yc z$W|W8gpf&E*udV~v0QcAKs+sodpLT!Qr3;FMzgf94(N3%bO!O-mYr@c8z-AW!00cD zPm?SnGJYcb0u8+dnRHO98|$lp@e`>@E}aMzAx^2mW*Rn4(^c-p0XWrgi(A2N|J8S<;Cb(#xV@$y(vF1&x8eRd_3vgVf&OU}cI>!mYU0|Rgp zXhngC7?RK-1@H*k$6NAMzJ1rY<#YbRJgf?>_H}>1IaErFuU=)ivz9i}Qy zszpu4x|qXs#>#|zX~2@-)B6V+AD>X&3yj+u`g~s%9*Dgdsd)c zo{$6nd(`PP>ddLA&lQbb7@}OI73R1$okP`zTosw&rv=UF>eDP?+LO3h1~(POo}MN1 z(FIIk*vbQ>_lIW@|G&LikGJgb^t3mT7z^vp%gKVVch7RhdkP)jYi&TFaIOtggBY}?)~ zg{l0N`4miHO!BOO@tBukLlS{lJ=NS_-kVe@ExOT#zunItqdM!GvK|WmHTF^v^f8BW0E-4o#?0oKvUcYG~HLmdPXk2@2{ztSG@~%ui zSSdOoR8v@5TSxx%-CZU6rr8VmZj=BbF)kvcP2DVE#_i;x948uC&XIfyJtPm(OT#Mc z&)0neorN~xpM;J-DyQ!mo zSFLy7H+lb5X0{-HLx(s7)lS#U^WNG?JD8-(@bzL~QWzNTm2Qm#^a{DYmnF(&a9ySH z0iT+&1bS`vaJO&-%NGOF6`lgbt8GEfJV+FRsPuCAT0-&i@=_KOhi^M#E zbo16iWi|XjS9IvnyMrT;KO^t9qLqDuzGmdP>Q%P1AuV!3?6Q3&W~8Jr9J)Yn;6stu zpWDeT_vzyJ{p>nlIne=^B){?&@Fwu61JDjR+59HlQAs5@do5QRuVB{&8dbyF*>7y zD5Dm;ao~p)`P*3$Ov;e;ZzNlKz3i%-NAVn$LKGJc4>)e|wHsaFX^1iM+W-rFe{v>!rLG)KjM%5tl|pYDUuKc0$DU6{xL{ z*~C=O(5W6rs_!S0OR4Dup zNwebq)7KdBqYvkrBC^gj3j%3d1Z_9U$a}_j?{3$rWICLmP!h%i1^jM6nG5%uf*L3T zF!nL$GF!&OJIq1pP{URK{UBQL?PCx_%* zdWYMqSEkPh7`0&v4&qIkH!z|%@=CU&BT%B@A{Ivr;i(B2@uygqYOG$fM4miP=0@i= zL~auP58L&|&avwvEr3U;=LhtLO^3!<+3t{7qXCV6m45@W8al=TRyAg$_B-Z4mwjXB zlB>Hm<(8oby3|j~_d0$<%(vp!3YC*1t?3x~5x;#Z;1mD7uiqqB7T;%kOux>cD1{(t zo6-l4RyUbncR^%7P6qM7-x^`~Ayw7D+8)USJQYimy+K^J2zQaB=S)@RSeQKpi*iJz zo^8uy`?~HT93C6w!4XPuWks(Dw7s3I`m{_J6O__%{;W=h0Qmj>O$XFJg(o6st1Ht# zsTeQ#F=!@78)cak61T7}JI1&J3e$g{81kEU2lJ?t2vUD0A;w~m3&DKzWpEtkBUixW zzZBWLw4`U23t;HPdm_2Oug7Wa9Dy8g+0CXfibp4(H&Lc3R6w2~Y|r<42-MSTVO^yS z44ABO4ykRi*M8cBLmmI5gqIz6q>JcN^^?M1Bv0HrVX|E7ba8ayqBoG5;L6XnIF>#O zuECZ|(<{krjmS`&-9?vB7}OWkxrd-xkw<-rbie@+nKyg=gG@yGvpSmuH$9#YCX62x zb!r1JMg1i+|5SM=l9jTz}?GY?`M%1 zp>1scfjul%tr9E)c$;!cV`}kIIb_`kI;{{sPHsVJf9Hb2i&YK(pzBU6Zo40x_~$>K zIogBWUm%j-V;uXQ#z^0su$Sn3W7pjn7F^)Qq~UroyHGbq40tmwVUA8tR`1woNgXOt z7m3s?#@!lxQ-+W-jE3_aK!}n2eG$As)VSJVg%gTAEphb_^ZsT0Y^?hrl1lPJkXb8~-p$gw|OkJtIT0d0Jl)X|9(CF>Y&ODCr4W(4``i|QMNY#I5 zPM!Y(g6>Sqo5Z12a|Ft@V&thJ@Oj784S9~rhIl-%U*Ah?Bmpp;*C0ggbNtB#Ac=w6x zx$ZUwj&n$sNc7@Br3~MUotlTJwx4$TdgIr$+R&cEb$K;z4tI(R>;#&76F9=e&600) z1kX9zpSB;ef3a_v3{p#GYM(e-*|mgGP|Z;t)F0K$15h#;dysB_2hxRi z&PayA=wlwgimqJ%UjP6OwD$){_h#$sGY5igzg}@aI~k&!#5x6tN$k`WbuhTK8_f# zD`8mNplIVKBOBPd3k+y5@T9Qpbk6;Nc$OW_?h2;xD$-$G@#Bf~!^ecHm*Yn~Lx4tM zz@3cjswC2r*ml48{yyFqsL+7+M9NL1hrRDs9-2g{TR_&DGB@!-P82q9!zE`(e*1hGhe zUTFC5OR$KTVW0xhno(EoTvFq|gm?{Bs7dKkfDCkM&F<-F(ab&yL8ZYTO^nHbLE(FPRg>WRIERz&Lf9@$% zVvwk>k6ze-WyVzAv`08s27BCEuQbH?FdfWd&lk$-eRJHj z08*g(-8OoqOMl>L2P;ly=5v5$GbtPRqOHh9`df}r)m7^-@d=HoS)&!#Z4iT|E3uuU zgu?s_2TBFn8eaGJ!S7x=9NM}y;}ayWx`?ATWfW4Ki0zpOu{V-F&g4sO)foJivza*aQfzq73WgbMY33wKQLEd; zMMVkUv{SN785N8+CJr%v1kbIKxkJ77CN~}OW}w1aaU^MIlI27<08cS5;Bd76*QOu+ ze!o4nsCA-w@=@%~^bKn1GWz>B>(AdeFCf61s2k=_Q>9; zxYH{tLaz01CfPo_gvqj1l zPKNI+W~iEglcvr`5~??8;>o~REEb7=!dtxF>~!`Ah|V<9$>OsOT7Tjb8<;&H5+`ew zwJ->*WZ#Lv{l@`!^AF8IA``U!SSx740Ilcs%rWvw_W;K+W9MX(*q6hut6j@_6&bar= z%djZTkt0Jy&cUx%T)n$i$#>kF?!0lA{` z9GsJcCS*!9#$%_#8w?G{AXWRO2=@!4`}^(oL9|tgKE!2Y^0Z3Gl~s^2zR&9!7j?iv zQHar6=t>V69$&G<0;O!qu_edSn$H`1$U!!IRtm<7_w*vQ>*5iyp6i#%Re+D$Wo0J7 zkBIORaHMr9g&Ng@Q`JPWN%sVKKR(7f$6FBmC8mZ`DgGuc>iyT7J)B4TSo$=55^}k- ze&KS@NRxJxcUxJ=5esl8;j_8bp0QKQm&R4QJ3HZcNK=bTE}c=88cWN7d{TXrcl6*W zOv`l7^2h$?N=g?q)d$_Nw7Rl4zKSg_X9ONEz5TuIcC^^zOk3JLC>MA=xq7P&<| zaWu_rS@{G=cB7DzY(+;}k}!=X2B_qj6-9jTL?%8TlM_^euvj<_fTZAOt4Sn}B3TnS zr#84?6vY9X2i~@eiHpy4>k5GRHe(ci88C6R;0+X(o@Z-8&MH@?$})vvu4Bx3b)p)n z)P(ucwr2vyxtsY%&Odzx356q}MP;y;ee}{_NNH?46vm2bUY;-?5Z~zoD*G6zymmgflf9YY(x4ZjtDG);<9bGF1a`X zP3l7w0g}=6kP0tN?C%8Hz2=k*=5L+3V8#<3Pk8^s2W&zU9$c#6Oxb2Uob1L|TCQ1? zVeY@FHVKdvPY^BmFKg+vT=Z`q>`01XH^|j08v=o>K8c$zTa5PrR0M`7pYc3|DoDfvMy-Z@S&Pt^gfmnh+4r9%-}uh zHHF);-6HPJJ2AQEgaW3l$?(vLqpB|%3^oA4Gjt8kev?XAbsOsvOuf1b0%AIm)$7@o z+iNS3R^+a$HVsE>L01B$k3&LVbQ#u#hG&&{P6KRws^D)N5MKi0&fI|juGYlb{%{^!fMV!;z%*4SKct-7HI7HoktLaO5Y9fj>_raTSZ@&-xk+u^ zcrZ&T6EvZ9!T^kNfDhmcNUiftY9dH=0)v6_M!J%UVlpd}O0*5QX+@Iw{p^oVg?!nEtA!S)l7COtZLIZbuXgE+23b82YntgTbpfm@aHo}OyI^@UM!a;Jb z!k*LzCmIj<9*z&L28ehBd}`7DoHY<1G)4QQ4j z&Jy5)CtWxmYUjWG;$^zh_@3Kb@m|?--zpzH-|+q~{LK-`$+f5(DK{ZD7i= zDbfS0Cwum;kD1=$NTRgFi_K?EA6#{%hH60rve`p5w~yz%3#;GjS3B`P{QSKt_H@Qy zFY>CG;H2lV+A14xqJysoKR1CQn~*KpOELbF@A*0XJE;EeSdkF_9~6E6`Za`x=(3)XSK+czwWSTfF{5)ITS7(xf6nlLw7=d{3uSQU;)TU}~qsK}H)hH_7 z8jWMm;l4^EcYB7ZW?B+!yh5sO1BjYIw4{UvEhJZi)v49s0;2`2-=*368t1~XEd{d^JHml}OqRWp17=XQD%YXdIBjYnY(cJ6|Mr)=_D zx!Bc_qp~A}V9ii|xFs*pc4*WBwD0`(DF>*p$Lkvee*gHOBVdjGL}eQ@Z5^I=`P=Ik zdVSePp|1k3|6zS+CT%x z>*nCLX3@8(&Vzw7j?O*k3Kwp=M%vu@Hp*6HFLXbm%#S%-J`uxS*rvjNl?D{Kw92g) ze-e@NoR4vBn7yX*7ep*by~!H0Jqly>OTsw(%r2FidhtQwIHEFL2_q53{F9pNpWt5N zid_XeVEfni+{z2ZOH?)?qyxUvJBxYzSU#Rid;{o^usna;z4QscZkmCWAVt3~&&Qme zsjoM1PeMudnLU%W)u?%vu_kcAdXtUn@nN%S6Gz5|YY#Hzc-X|KgUU-vZ{Gt1i^;DSF^&`-g|iu2+>MCgC1O_j<`HKF2NRib}SJ; z3F$29dzf<))o@A7&h1of0y5Ia3Tedf#B-gp(DV5*C8MhWsQz7acMU0 z3V977h^@N=Ix;O-)T%-aGoA+NW^rodedXAg<3snJ=?qBZ+mo9h>aK?{H>34G*Q0U^ z)fa^MPHaycooZ_3@t{S}2-V56qb$+(io^16^&+A_r}Uvr0|8cdC8#{Icl zKmQxs2R)T^*KTL7*|36@U4c#SlSAfV;F|$-n(IwQj(i~b!@a)95G&j~-RGigUJ?h} znusbJH1|8I!gnK#_k~~4b0(+P7L?do^Z4Q!yB!~0EK-d1;yuW z;JS~~Q~PH@o}2^$)WmRu6A7`qLw+x5?ReZxS5dO+{E(Fxo_&~y10_)pHAe(9YPmoQ z{->0g&rorq2{kCh!2aq1$x-{qL9t5n*@Ia>>KSw0mUKD-dm3MOQGesgL^ZU$J_Ugdpv5(WGAnr4pbe>6M+B09)uH)w7?R_;KN zE(gjizB!7UC+yh$9Z#3G_oK&bRbDJRIdkA_hL9av?E+L1pwsN%Kt}gxI3s`X4NJ?_ zU}pr7bO#-lWJmsJV~!$=g->u@{u#63VzbN2$#B{om7&d_&}Gr;W{v5mk$vjtju*Wy zx4(TfR~F@*?DpRRe)S9_YP+vLfVI)HaG_brpz*bLRO=uP9Ng}BZ-KY({f>5^989F3 zF0Yy)Hu5e?O}4^%hSn-HQ0 z=1F21+s@*#%Pp|#K$S^%g-;Taq|j?~zT6=J2~Ye`OhR&WI@Fe#i!uau%<_Jlr*ViF0WprFbc4{F53iqggvi3zHgA+5>837r(Yvl98 zuyG(lZta+EA{`o~!9=ONmm%`widGk*!|1&Yu0jM#Tc<34ipmwZH`O#p*Eq&vy<-04 z?oD-*2RMQ(lR9yta0Lvxg@knwcMXw8^S#hQ2l@*lN!I4CrYZPvXYuK0b$BFs&^Dm8 z{tTdrz@jqeh-C1&Woc3(Y_l|Ki^H(8k5p?xe?fbc+L9`U_v2Q~Sa0#lYJj(qqXi@` zru?&`@5u)Z&1Kr}Z0`scVPFiB>3=`DJIA6WD=qCPSS)QUx*zKNZP(Q-`dgfc`u|;1$ntn4Lpb{F>QB@!-NueT7B~9&x*(bp0CE|8VcyLHgR2uihX)=wuN}vOA3(g+IF)nT zJlL*1c)UIU*J6^uxx_BbAmi@4#brHPnieS+??ky!fm3vPA(7ta&5-$tLOn-2gKTIq zGh4I{B$rjvUe_d_iax~zqVU1*%g3bgM;m;1vpvK;2`#a~iPTqb>K?!#4QQxw@O+Od zbZi8q8UnH2Z$41x=K)nP+;jVqqf463I9fGE5xoccRE&TZQS7y27Q&_kfXpsq?qv~@L2 zU|zOY%RB52kxkJ17NM_uQj_m!B<;hZt%WpmLRsV<>zyS;(({cMx7L@?=0M!v+K1OP@uzeT&NS5&ntU^j5J30)latN#m4x~I+6NwsfVCV22nl?QYsB`_r+uI z$KG0P!~z$QQxySxH~^4G5dA0Z#y&zTRuc*cNsL&T;Wm+&6WfihTf1??m%jO6xVLbO z*YswznxC_gqqq1BEz)uH(r1<(FCRh8{kv+=HWh-7^Zk4?3x{}JX8ZN(U6DjnnUzMe z7Lo=eGu3kX#AV<{aq|D}dW+oC7HU}?zdD3^hbB?3XK7`y8bY5^s9SB=oT0Iyu|4bT z>IovLccE+x;CaPhZpYC4eIlfjN4H)|$`Hmw1mQH#)(f^1yWxl@_B^ALm$j`#M0nyxXlN3&^?LR(g_DF2?Jc9G?21Pd1Q&GKM<~?#kxB48st;4R--T}OT(6o`qa>x?wV z_|)BeRc4=(&rO>=CSqR_by>>Ygi9%ksp;S?_bHfd29MGN8Vj~YOL-uHv%3>U(u$4s zV0n)YhaPNS6Rm)iPqM#>Y(3yyfc!C+q^7Qf)x}3ao@v6MIV6P5TyNv9KlLKOjh1!k zQ5a5_g1|_x*X-JnbXvAL=CLa8TMKNkN_sVLahkH?q0}W&nZ(X93k@Yio@*eL`4*_>v=4wG%WpvBR`(NHl43hrq33+&RNsmU#FEpvQc<}jI)N+iz zcMqfz`b;N#ZZWYd1cEusYi}T>XZHVg}Bk^7BDR>_5mQv+nA-ROK9b$b*%C?7dUj`4cgL9Ov|* zpv;4RGL@TIH2!Xrwt-8}(0;po}0!X!)-aQVkw#MXuS z?EaSz%hVW}O@;Y&TR_#bA86 zrxuK&PbgA4&|Q%Z58vDo2@JtvYmwI+B=Z3c{5()fIMgtVq7N1BF$$s!e6pE!^ade> z%o40k$f=sMwaY8y#h61KK2UiIvzi&gCOlg48mhv5ECs62J^QS`2acwNnDyE!o?gDJMuG+ZoO1a0#k-Q{OR; zt2=4#^;{(gl861R?+HGe$>R;}l|6~=`5RJ2*|u`$g^k$tG;N_uFFH|`*KltSgx8B7>99`D;S1`D7L%07F2$ zzY`BY=`$vKKlD?PX)7fwF@@gcWJbil^1MS}OSf@q)lmrw{6?ea{h#!Wo8vO?d)=WX zG6$=pz7-6X5Uu!p=IfEJ_uL4CUJg%jlrG072?>+AM}g@C*{9JWadz!se28zpHi^ATa1V&cvp{o?Z9Nm={ zv5ir}tDyXQin;in$~NO0y-ltflYB-IgZrWXS}$!(VF&D$$R_R_om8qu(#D#O+dN$I z_c*iK&(I>bPyz54hw6Xv#ypOT7R+(`i2dzi*VI%L+V1vn40hS-?HTcAqMp{#JB6;l z1Q)x}$mC&0IxJk1;-kycbhX97RLqW;oe9#blXQ?q_BQ?XjVVN*7=$~sXM@!HbUR5)nUp;Lv0VRUj%hxOZXOe6t>6n%TzSQF_dK>HzP zw+R%@{#}S|1`$=n_cr+2Nkr&W8VUp5#d|8Qiy~-9(I?ph1A-$O;}1RjdY&}%!KiFB zRU6Vt<41DC!Ib&Q=x#=FS#hfqfJ=>pM3xrZos&$h#ft`4>Gq9EGVqF!`a`#kf$VtE zl@JLOBg7dO!YV}#!F$&8(V6-^7P%8OP>4$7qwWYWxGpVayKB7J$4-tdL!JHD=yw$T zWDKJ^9P4PH*=z=GkWi{_mN#t z?{v$mr;`q#+MZN?0Y}#Kz?k5y^Q?3;)llC#;Sy z;xl-&*ZX!?s_fWhEdZ%Q@eZx1Xc+m><1oH=#J!uGG_T6Uf$;#n8y1mz)A!?zmZuW} z1_DW<_a&squy8EA*-m(q?R5U99{h-|Ok z{VC5NllrnYAlz1>WWTs6VgH}L?!oAKG3g>q%w-ho9pK8QXB2*aDy4f;%*hWsDbU3{ zEU&QoN4q(7iC=$Gv&hLvRQ_LNnti?h>pSoizdRO?cGE6b$eKIIPJMT4dITj~AW0)o zhP!+O%~Np}_n&^)(i3ok2t9`9--#+Yzjr<_A>m`Yb=4#P^0*~67`CK+7rW*{yz^1W zXXZ3lzMpw=r9-4k2v4TZoaxTvF<@YOf}|$t9AUNJ!4knz7iNU)%Y%vUo#72AgJOn^^vIB5lg1nBSUgv|) zrRv4%v=XXkx*t$;!_q~rC}Mx*!`=vm?ILS{55@XL=aLNTBjDAgE-mlQg(bhZC|1HRxz=s@aOFY`15VX%()phOQEW(L2_-Ii3qn|0Svv^ z)3=7HzV{Ddh<5I&Xd8JwYxDvOZj$RCHu|)2sM23~s6Tv6F6`7zyBQ4iiE>gXHwi*w zP4`Ix`G7Ku7k&wwp48N+t%&GuV}vsaH?=D@Z*rVDzN__aPz6vmrB9-|7kkRiSVa?e zkEIds#?3$x2ejk1Kw$9o=N&MH*EuKLE`pEb=fa*&c0cV4mRn8=)cr>kxHz%fTN*y7 zUI=l3rXWpdS7_6{dFSwCZ{!?IVw<-+V)Eq%IpY^p8GL`{Iv=mmJF%{AJrSH=wwPHi zvlTp}K64@wysf37<)&g!<{F{{sVrv9MBnM#0LIvskziK)eb98!Se zlO4M6{|}=B7MDD)ciGi?u$D}l;+mrl9~4Sy06qSk_|s#$Fd#28tn)O>KNvG*hKTP>tDGRwIsS^oOXCuAQ z&KO*G2J`vpJJ)2G@~Pq&D0zdhn2sh2VWbY)R4F;JVp$VLULVoCFt1-Rc@hOiz{j@Rn&-Xj0bYfK^t{By zF(Q^2WJVcxy1+V|QM?uShX*|%?WopCG#N_;Cn;SjbXBkN+%PE^Ha4laCUn=kCrXb^%N|zW9Gq z-gQHGX!Y-F5L%=$-yr$rY9heTLk+EX7ObVC2%)x7fjS7mQCJ%>K9S(ive6J6b;DkQ zSe=M8+e-&<43Kyf;zO(sPSz3W4&m_{005*J@TF|ZJlbfZiDD3^xHj(*j|pN$@Le0i zJKs2+lHqC?@?xiogwK{yakVO5$z}+^kN{sBr)s>^LYVtm71L}X@hjJ}l;PCSic+k_ zhd{s7>V7zinlMZdVh4RFpOw7@yjfvw+7A8LHdNKNZ-tX;hO!%sFv_>_g1;pu67{Ty zy*z1&UeFMS@jVWz6ILz;@uX&%*AMYo>8!0EF-9a=`8b-VdTY6&dl!pId*Wi zL@rb$Bf`zG;FrH1(kV6p!yD$RNbjpQjFTg!u_C0cNPcF@VFNeq4viEi4!+VOP)yNR7 z6w}TL>3-(8VwAdz1c;edwzc1G8Q_wL4qV=M7a6rDRVLrHK3$6NNg=UJ64YV|tLWqg zbz;V>fu+C)^e@+-q(N|7e)NW7?SohDsn~yyE1KOfiP{P}R0mb56)zab6k+XvQddPs zH6wD~NT3`Xx4x8prwwPm3lsxDHOe*6WS&$=wP#J}b8#4%HX7cFretv|!%Pbd zn9KFqylEY(3oAIEw+_3)m}`>D9m#2q-(=?^Ph=0i-_I7Y_x8aFy$}`vbNP#I018aJ zUX6kV@_U*}ZJW7SIVl38b9T+?L@c7D<3}QQ^e^=}iy3RubUM{>9J&LsctWhwDU)bX zhO$W})Y7emQ`O!v!fxNv^+#`>k4z$a$KzG->nzjid!uZJOwA0Ahg-k4iNw=O)Q~7gIAXGYW4~7Jl$W6GIHOQrqqBP;vBy+Lq};NqnetTA=pR`~F-z4fn%JX*L#h>DrJpv}DFK@Z-;%sL=ZVMs*w)<; zd$~5L-rmnV@s>Hc_H!;zS1dd~Avb2$m_EYhSZUa*pd+f`P&>ym+(99}OJ$%FjE&rD zAt-x3+7EeEAs(Insc(XwJnr8jZoN4lmG*T}mdsijMSOY-vWu=NjrZu0wxVn*UD7u? zM-kP*;=7&<^$8vtg4&h7^16YN#GR>bOP5HsCwt`**K`>mLaUvlIO5-5vh^f|dAOG6 zT!HO{A%!Jai1=+_b+~``axp~afbcGXxW0|;Z1j!qW~ALh`y3|o!9kw$vAL-A`<>|` zAus+V0fCQL5#yI-I@4>}Y}}Me`PANu+?Kl_X*!ZtQ2buPWkiBncGdhS1gV1sDm+muy1?kX(}_sKn1} zY<9T6BB6`mVoNB%H)u#Q3qCwP{-|S8K&A`Z=Tg4a-$e!sbLD$S!}YgaoLSw+69My| z5-|(naDpek;phwU$pp+Az0Vpx?@hm6n_pT~a`GZ%AXu@y3C{N$bCD!U5Z;?Fmo2X> zq}rjw2t&7k^X>^;cx_J&ih3IbHfWlE=4hG~@CcEA^&81+2$c7diZ=Z@R#^?=&Pske zVa911x6C!N;4Ka)t~i_)b2IrTUE_Kt0G!IGikw2IrC{CZ=ClXwaNf_Qp5K%Ypknvn zu6*r5{D8NZT8>B9%vpcM6lg@GoEELP>UM=8tcB#5^e-aRkH-z!1MtQ%&kPGUE!?4v z^eyQ%+#WZ`hvUy4$A}sw&O;Sww-?-oj4DMz35`3DD4EA~Q?Xob!8tkr5NV2<)2YH`Ct<0aBc_VEt zLo$IgZTp$!hy}4M#|}0xwZY|8PKg+sPOhqn21_m7PF70pErrKOLl*YP4*nC4n>Wg3 z_5V6tz8$t&6U*6+@4qEtpJ*J;N(h{JxBi!H!I*%%{h6qmbObRo*&VMx+^9Yz2B*)N#ss z(GFCybI1f)T|y7tR4T&b;2{@}(T{P6`(N_5d&G^NRo$){a-AE_^(6R1Qz(}4L?wO- zz;)p(1+kQh#|R+N#y_D11=E-*5GIfa&WcuXEf1Z6K%_QkLuR zm_3hdIGT)6?9NE{UP5Z{C;kpV<2{uJ^AoQ6lx;3mYOJKorh96eho74&ZR7P z4EDRBcjCL%*q;R~^CD@^7`p;}|LNrGOz^N~51ra?vsk=qGLgCsRGZX> z{Rr&2aV#xAL7yEIw{rq=EFifg`jY`Mrb_TA5UPr^e`_lM53w9UMVY&{lW|ek?vev_ z2&{hmF}_TWrc}E4=6LE9G+~L**?F6yQYJzc#r5flHK3Q% zo{SRg*~ZNAt<&N0ct_RpcO}hZg*Ap2FkTEGKhg^iNf)$e2WVlL4&i3%TGbD>o+{gK zgx*(g9zh!Ts+5ibUQs^9r1=|coAC2vI_!+(U%XQR-;k$f702g#T zYD8k*!GmCsj&E?$)(_Lpa&lFC8&A~uq855sA+grm_@zIi+KIRweahv7sjxzQK5Pxf zI7amtX>`j^Yp?$Dgke(fGj{duW~KeiHQQ-!RO z5Q!|b$1#PJF zmKDTh2F^@i-D*LlDBaCy@}$(zqlF3NU>AFWykgd2@nO2=x^lvl{#7_0NoZr{1*{fi zwUJR4no!33lB&5Q4;+#oA8h^TtZ)qYIq=r9{~%hRI|`cs7fE~C^OK3O_D0MO-X?Dj zeFH~Is%9a&6+WR2jJ50~*Tdr<9(x1|`Rc4>}zPx*;oeY@cV{)-VNUTW)Q zBTSmu&R2_un(SFG0JO*5=#b3{SZ6QiIJFe~aKREU+!%x+#x;y7fY^^~a-}f0fOO8e zp-SfG*%)M17Jc(0@IrRlk+crVoa3_IcQ+m_f{OVk4rJ_+XOeA~hFH9llr6ix)n!Y{ zSvE7PMKQ$Cdu;*cOkij+%Gk2zQ_`X9)v^KxRAHdT1iHPQl)4KUSRf#l8}D1NGzE@B zs1k|&_**t9Z;6epdNjMw@*th9@CN-_f_y&F-#|$xl3h_BU4-mnGF~uQ%KK9v)`rR7 zD`V5%O6&r6R#V74#TBS@bgc-;IjB5Py4_!O^az|8Zp_0O2d{OkT!y!8i65gy@ z@LsC*Z8%tYZ{RRqDq6x(?FGz6_o4T*MM&jaJ@$;w0W8sT*=2Vx_injkVVV4yyL+-@ z%QmB|m=QUFjYrGe)f6+ysPhJe#`<-m?R7 z#xMs(=TPXBguz%9YFnCE{}~iJpSOfO!;1l<6WpV+@P6K=XHz%t_jW|dP+Y$YsZa1Q znfjv$#Ud<@UP3Y!HKoqsH2iySS1&At)-`LWky@!c=L?2n=*>EwtE8E>+HJ<-O3`bI z2dbNvDazoa&cRc*U_%v^C7Mt=6geFe4EK#nlD_8214{*7GccKn9Tz#R2CB|LU4SJa zv`6OKzX8hvz1DV+t5Lb~vcc8Mw~akK@%(9H(m~^!$sCge{T9@eTz9o`W3tq0VjOCf z^g1~SEB|+ zH3)3OQ7TwyMo=$cPMn)L?R>O$*KTv?CKDDptpN`%ZsaZ zAlrBpJjg-k8{i(W#Z;%GU>^X&eX+s1Au;{67)Nly0z>vt8B*20!iDb&4csJeK0TV* zR2))y4OdS*Je`0Iq6f?3V3QBbG#FdRn^Sqz6WK{>6=1HcRLye%(n&zG`m>X@_S{X- z?;&Mln%uN^FT_H(bSYFLI&>0A_k-W46Q*<+7z#wsMv)ci^R^5eHAjHOv6b4UT~#bA zQ{Bz7Y5|e7>v#;%4x$Xi2S3v3c_Q^+eIhoaO;HglzF9L`A*^UzjY3k@iEotQb8dnD zPGe-f(jQ`?C$pk{QgzA}sXeXgk11jt{!C$Z$`*#JDzc1T)GNjESn26n_perZ==|)u zptZX{V6d$V0c{hN6cev)UVJCIp`>z>;-F9(1v6~ra)SjLe=%3IY=#bCDTS%3zK08! zHV$U}XqjN&d<4?_ZO&NpD8d`+FH>0Tz_Z@cXnG6W)e6 z*IK6O$hS;=N}#s7woDAZxC&-a<+W=8Cw1|FR#r`+mVvNuAV zjhza)?l)Ua1Kc#zp`W=M6J>Ld9UgEG|ZHh zo0VAD-I3S{f-lk7e-mV^Ac>JtSW#pCQQ z#8z~}Mg)dIO3dI{L*Ty72uI2<(%hiEkvUl6DV?TB%?S)Vy?$hrV^oi+b_ByW_~^ z4QK|PF4Ar&4%HdrgMaA1=*N%~PlXjgaw~8Yl%J&Pbm2p^_!Q*@Z(-V-yEnj|Sh3qJ zOc*PE4bUVi>CpNhezzc9_`W2BWr%Dg@qUvFmgYT5xuspeGv)O*x}5c7XmTFy4<9y| z+0Gn)z&N3p{enCt-MSZ!jC;~D4o29OM_0D@$}qoMgHf5rec&JwF`~qW7DHi30 zo<4>hv+TX_x~8)t7?S5YTZ20bkWf7eZTZ3=s9*lfVn?Y zOI&0E=wy7#D9yE=UG!le3}qydtkb3Tc7sL!zRjUdrE0PqtJK1S2YaoiL4Eg1ePUubT_ z+{v~QyU~%b5G4CmhuBJRxY1--60fMA?s%bpF9{I7X~5H7G04N@8wAxS*$$J#1B}sq zzVDbUkh#|q}5 zc5XcV#Ff$(Ppa>|5Hu{JMs9bP`B6A!(S^B(o0#G&(`*c3sD;KysionV$f`IvN3wUt zD1CE_532e$P7W-X<7%`C1>?r`2itPbNlA%8vJ};A?J2shS_2Bu2|f`wd9>hPL5)1S zPYF3rGtxDyqq{}hwjr%o|7@=-3Yu0K)`%qXdcxbrLKx?S)0UL((#&^$)Lvx64= zI4_Kma%s!$ga&$0?qq@U^lZz7-MavYkeH=^57-9e_fAUPHTnMxU}+mqLo~VwurI&zD&W`W{<9l_uY5fsJeo&Wi{Ve%9ELlMIJ)j;;*JLucdH#;N4CP z(dH5L2owb5hkgct-@xOg^7O9LB0TD?!Ky*StTkzT&jJR~7l_o_>GFt7uo*%^rW!#X zO|-cr4ax=66=d8(C@O!clM=SGfd>@AV$q%{TALDMR^wNQm?LrgV49wDNgv=sCLm;5 z7EveOO9)Gtqdb&ThMfEO;)xp97s(wC>xAoHgCxqwQyw=~&Kc=R+SrYA^_xjmyD1h}L*Y4vGQBnqEjMI^PPTWD{05Ow|7$zTL4qajC=fE0 zqe5v9={uS&^XgX#@d2cl2)L!GL0Z)ODCl*_dEV%l=}|M{FntC3NNo7QW|CR#?N-Tq z>3G1iT{Nl!5fnd!+m9IRUhE{2n~XzDhw_OD%DU*)R{oO9_J$d&;19PF@P`EdNqT$8 zMo?(*F;mS*H%PthmhcW9{9a%lRK|^bFkW9&R=Eq-I%9L_oI047*KD!{>Ysw~md-n| z^HdmPyTLuIX9kFQ6?e~u)rpOF>0=EhgVVzYi(6X04H->jZVBU+M23v2G3cqA9pET3 z58G~$l->M2XZr)SQVq&sn80t=tbq*c2zUCWf*w(G=^RqpXs(p2$D`N_MFiS@6o;U& zLq<}Y)SA?hPxfa80I4Av1cx<^a6Ql?P3ppm+L0K-X1jvc+ z`2mqvW>mHD9tYDn8*xmWsto^c%6PLr%%43{eBIOSQdaY6KOczEddYYaoGl!5mbLkp zEBO5Nw$7=V)K_1*c0OR{3dmJ6#pSw`AWHRX@=6Rs=^21GN{S<0C1+rh;=^0Cuh3bmDAstM+r9><{rz&GDX;L>HQpzrI^HrJ>=LsFhRE zIW9zoL#{V=>3mFO&rzC#Gw0_lDRnrgkoy*L4J9sfT{B`sk~QZf(>JsSpH!~}t8Q4* z3--Xu>YcKlQb{vwHxrq$<6+#64^qqcdbwbG_Y!ld%}9;ekZ(X5CmZU=F!nWUD(guc zyfSJE9YL5bzBAX=Q`Z4ggs4DPjEekg*hoT;Y2M?}(<3|Y0InVo*QA}JDX4ff|Cvi} zE=MHtv40|Zb=FC==C|i%T|_5+M6LnQ0-~tf!v!>UYW4*^N0BWas*{M~U@0_Rs_Fe> zU_bH#-@RZdB`1E3ab7CUWEt9)=j8yC2duc=`vf&GbJIL@D=gZ5=G16FJK(ik1)us3 zN=>X>`20d(Ty^I1e|@yiQEZ^f%18&9yB_B|jE#d9V{ zu2(}9aAj?@pZp*-$g+(v>mh^uMRRv04n>9qGU!byTI<+p@6dV~1*pPQ{$7_h0LmKnt?~O6;#zBi+v&cD%Q*@M zj`5+W_mC4-D`VU0)P=G%yJGLChYbys!W@-{k4Dwl1^10j3o^rcEOq|h3-xi&v(l2G zLzQ9$W-xkyL1N(eF^qED8lgQ|Mi&#%X3txgEQbRsdiz%xk#V%ypePdgv~eqHBJ<{7 zO7I+Tn;3UkDH?A3zX-1(imW9UkQS)9c=`_bMYWQnyV_^N4jbZy`)_qhCS7^6iw-Xl zZab!n46u%l`yOS0@6*9$MM)tvP;wiXx813#PTCi!2Mypc)8@6}E0083RxAuv2DG5m zLh5X!%>i(DoE4PGv0*FhIq&oBqRsMzyUij?1&Rqb)0b1#f`HwBf$;Z?u-opm)x7lJ zSDKvm!Wb{S_Nk=sYC^R3JjeB#oVOxDFw)dU2h$j z^EUx%;j@>DHf1~g<4hh@lZ%z#I+#-_7E$}@MN~re`wY7TI{CJc2Qz5==fqy552V+| zG6Rqqkz6OUE+bqT*y2gdi;rut;gYgb4+NMW%c8EIb)XraoI)cSj}bCxoriT=hW-`? zYrzYGH8i*v&(}NKwe|-rHxlTBLNfTZHOz-bJ5xQrE@$otD5}iH?E>w)?0eNyKhzV_ z%EN{#f;p|^(gv=4F_T-ihPHHh*c1xGQC2$W(h|hrwHG&4NE;>E30ZVoAyp+U zk>je;{9!R-khxqA&6ngU#N&b?)+=gMA0&(6E6vRxtk5c@Xon9?UUk@+J%&3&CzPk8 zcr$)-P(F1E=`_w1AYbmmW?Ow4Q;92;r165soCS$cZ^d;mHJ?cqo5F$=U6rhL4@EFv^^tI*D8?SJY$ z5q4^ftO1|Gu9xc>cc9yxg$<^LFXu|y4>^NoTo6uXNWM(9Aq34)s8w3n)z>%Pzf89ds~xw{PD_mGj8TM$O1PJW zz`jTlA&Vb|&Im<6_m5<_zI!!&H6&$|X#<{(BpxZ3Ts1#J!je$#EOrAgY0xoW&SSro4;P6Y>MAaT+GvmK6+82*>gYT~0Li`uDg%VBGp z{ER52MU^SbIk{?0V+D;p9IoA~c_bpA5f>p}3xJ~cC8!WeAx#&f3DDaQHR}{m(c?57 zVN?ER{(qG8)#vIx-rS(1u!7MqWr>j9X1VR~NF*iDXMDuV;-r}Hd5TBN?WXrD*OO!;i^4!>a(NZhZEG{@Zv(>CLF(WRXFKX9H`g(G?pL_iURPJk)*T0J>pgQ)`Ui0!HnpX_|o) zG4K5>i>JXcDUxY0s@$erfpnarsAWq@4>X^&`9Ebvlt9QHFLQy^bF^}PCht)T8%*y( zA}j%shtv-P zH!6`UrX;z=4(LwD4CeWu234*%U3;>{@SEVBhg}LlvZC6a;|Rks_1AB+%_!lb!I5G; z8)Kq{)UaAf@&V?h<0ZDiN@r6VHdw$dB7B3*ChkN2g}3*dNSz*E(??#@3P!&Lb728LjVwrP3HeXS#mF!zo+mPwL z?_8yBSkN$p=fIm7peyLpRx8p3@#3iu(LTn9ZX&2i$YqPV*yW6Je9J*3~|XhWWJH*ql=%L;w;9r$mbN*0qf!=sTcZjJUehDU=H ze|F`4jtEB=t}c(gRt?oyd-iOr=vXd(Y0$cGdgvnaRt>DPhx5^ToOv1|vcwz$jGrmF z@9zqZMaON8pvt;D!_Kqz0utsS_7+Lyz+Kgga9SV+QH9;Y*`sRyGOI`{{qT-{Bqn}z zXEL^ zPD(bs%EBo$%q~{n#q<-;d|?^uP&{aHGUsws`_9ln!wq({RLWn1vzbQ2%*WG`)KNw1 z1SHuDtZY(5iTZARZ_?-gX8RA2L}AYOr}cBZMkHY7uXt38Mf!I>l53(1ZEF;PO)Nhm zz;s*lWvgjyBXOxbz%5B7BTYB1je!Mczh~S`EoO}$)5EOJs%rSCL%(=v*rHR6A$98z z$>W&Y+L)+{2v{%JG$BgZm8hRFG^JOTw6=Lz90TB~ z!l951^(UYu=Jbef3^u}*P*2xn?f^M){J3CL=7F#V0l(~DN0nmCtBHYl`CH+-61*QN z$d0$H;Axet?q8*=6pnO5L&1IZZlDeH{Vf1ncSb~5RC|H;8hA%yty+Y0%+w2si#h)g z-(vZR@ABBVBOJi;1RPpcksLcm`@FsJ%Sx<|aC%!K1VPRzoV?XV?{DE-Tb38WFOQ3A z4vVW+ar!_KY6yI;!PD^Y?^=phgf(SlWboAquQqeKezEZ;*EreMphr|F2V5Mek*f`S zY|X2m^u(e>{@HGR__*?y>Dp^Q)%(!<5Xx{e@N{}3MwZdC`TIm$iq;+BWvE0HJ}m-{ zcJxXWK~dV3uZq1^Q81)K>x|enR9p65hvWO{>JyF42f30I3MUv5+i(C+xA7$aRevp{d$7Z!6m$GEvP-{PxlGL&Ke z{J*GcUJLN-6&(GbwyrX!MkTnw2O`poKQ0uOCaNmedL&9GnDk8nS@SLpuL$J?zTIa+ zq>hZiS9dgE4gxwqA<~%K9Of(ipuT>c*a??;8k(L0O{8XR-3L<&F1$d|-%(*El*X`IM3Gvte^*?v-`+ zikG?$(E!`nJe}a`+LCfUiU`T4R&B+0wajV6rTuElD%oAUEcJmH6q49yl-aL4-yTk` zQ`()$sxJheO?VnH;-&LM=U4fpgA^8W^C(>D&a{p5!}w8o>I|7r1=DftjnM7KIXTHm zZhPMc{K5#?rpJ-wdQlxZ3F$0^cX&!qK?Q6|?{&`$FW4(*x7O7C3{9Vim`a8U)GhY8 zy+#Zw|73;EK6z>x5u{M$Tezmec&HnoAC>9}3~+nzX+xefE!9esyY+-uOtdSI<9z*p z2zRDzT>WM4uEuxH{nO=0$xLsOGD@Ez*fsu+-t8*5q+#YBG~bVt&pW6d8y9Jc9>8qt zj4y%K%N^{*=Ngc-m&h&zj@7bJYr)W80hR)`8J>7&K;KGhNYcohs?5lIy0M2Ll5A)- z3wY?Gk{c51{wS@*^d@8h*yBk7)`t#-KQ^n z-~Bek5$Fzu^qky0XzGb34BL2x21fl0$c0Mxqv9mxTh2m`}5#mF- z0D0g0e+TE{PAZL!gwcwufzz!T3-6m8V-pTTORB%(yUum4r-bbQeyW8H+Vyp&xJ6yM zZ|V_9uzrWmAfeI*e!bE#e z7ZSb6IDgz8S!VH;x4#9dLTd6#Daqo{x%0WC5K(=*A{IuOgguvK4;R*4v2wns8X9em zq_02Onm3E>wD4Q#KOc3*oZ4Elip9hY+thTZhhw23s|^1AC%U_X4Cm&n))O2dnZ#XjwjsGzz>AD7ni3SZ zxJKqvZu);MjD}OknFrBJ2+)RuxHxK@iagy|RKV0Xs!^vSqtomP-ZgCLHN#X0^U1ar z@1RT0!eYQR4nDWAUc5s=9tEx%K*aP2W69xt|C2aj-gt8)pS|*XQz&Mh8M-Qi)`S5C z0X=)J@EI0k-bhU~qWY%@NCu~Wd8ry~KIO7*ukaU9)&NfpiG{y(R6{~^=ISi5fwk-R zm|!_~jjarO7yHU8@w+t&JB>H2OxUR3uBjtKH=L-R=e{mAI1!I!Fhwu9sb6Kuc|nCE z)-B@oXbNx?y-eN#puE50zUjqir@wrWZOR-pyNr)jK_?y+3SJH)O;$ORnG(zHV{T(% z?XlsZW$K0teZf7I#Qcd=J_CZC2ka1x&M__z32&7KmJqTzETd35ar+yz79<@Qu*e2x z(^l*qR4Di1W?ha(^RhNi<`Bu+h#473xmvTH%$7Ixt1t3`3X2@WTD4ENvpzUgV-alQ z6suWzHs&L3m{c1o-c{Ybh3Gb7tQ>iAMd^kRaLI@zAsf_t>N0i4%d&Wb3U7i5i;uB0 zaHLb`@C7W>A{NU$K~fb9a}l;mZV7rTx4&@U4@~}&9l^-nKR?6ug!A}aKfSuSQ|`&$ zS(hu7ZjJfNq~olU{4e5duh@&Rg&O5ESvXr=3vQH0Uhk( ztY_weeGY(gvg+8iACe8)w<3>z!mI`^I>%a2^Tn|p2vTdGG-Jw$aaP{qx*A#ij0?kX z;}lEk(0%(S!dWG?cwBU1N7@X+=9QaRFpNY3H__dqQkHAp!06;j2P$!_nb>9_AsWJE z0;1{e!-ptVw_SNt&gps#%&|B2!6t($A>-~g0D#CG*C6oEagzHIxhkV%newqd?_*N_ zaIP}7d}5IBmA9?Td!0}n3$0@nOf-_kcqnXN6XELGwn@HOg3N2iX@)0(GtzcA_gqG= zalok1v#X;}u|ISAf7;JhOHZdEFUw2LmtrmE7#kS8`95Aa4NzT3OPg6$VSoEL3H$LL z@4RI?$VHXlS1XG&x+-f@d~m_Y$MiOwEad)liN;;_YMpMacBG z?40Loe~@|Jdf}hYQ2bq>wMnVO5@}?uGnhMD7&id6 z*j#L!%!ePSt+;j0qEsmN`=)@5+w^H_IF}}vNdKo@8J1*X9gZQ!lX+OKC|qP7s5izZ zPw!uR{YJSr&9I0GX6^hu@<^9f5MkFALGhy>Iod4d^3|Ov$WE@bo7-HJtnS|BVW})S?-8{+D*K={su#oT%-Rk6jN@V z*ygi&2u5cRwDN&VahX$ThMXzQ+vF>XdKvc#=IHcw-?N>1ngJf zqmg1_N>;TiHaf&N|0c7O_ZN7K?>f92X?Xa7?@$%6h1&hK?*bOY+c^M$Tj~g~ip>An z96yy7s9o`l26qd)SwFlMIcv%uWna)htm`pntiP+VDxIv#l z8ZzS!ewo{5?SpK){R;htwA$h^#-(e(ec>U`c9ojI;s_O&bFh{j26D58@}n9XZ(amy z+BZTvOzXiv^vl|kzqO%rwdbz^Ao|Ek5J*;{U5X^4d6(0s3e7&Cf>5&qY*@+-P}s3z zZmt-*8)gxDw`yufXHSWvD)N6kn=&b6tgu;crGsy$6%yBlKCz~-Uu4(E9$;0siIJ8K z&w7sPZk`%n4Xv!={ZM#XOHGJ2d~+$tV%XUC^Fa;9K&qaRIrww{v0{^&VnY4|wjY?e zo}ymetmn6@Z>$5gl_0OlXQodyNe|OjX}P16Ys;`AKKbIHsyUk%l?!!bkL`+pha^05 zmh+ZpOt|nyA=ReMB>9o{+b>lv`{}L%9-o%)>HL%8hBn!oSv|`)%q?iziMLBz-Y(nAM+}m|?92}=$Lq^%)=~)o2 z&{sq*vzqqO36>5A$vGVMV1r;9$SG2=`C?TPxefoMQJXQsMR5Sup`19v2kVnL!?Qgn z-VLZ5K)C#d)zb8V3cd{jRw^(v^(Ysq1`GGBjw)OItEISd0bvMMLDI6AVWp9hw5pWBh80 zAMb|e3Ks9v$?$uFu+$l0Y6+?Os+%>?wj1n`_v24_$+l6CuTFkd)&Oh;?>$FK7!}J7 zbfJ{~-DhCwY_JA5atY>iXOEgwbW5gsKVdU%Mitrsn?eWH9QFB+-Ozc)n#;(70sApZ zF1u)48dO6mNAyRin4ZL;o6%InzuKJwQ$LWx{w-P*(aHT#!?1iXnLL-c!D`Wi4noC<4aP8DqWLIM{Q02i6{V%H!z(#E?ujpx?7)wh98}66 zJsEgXA)dli%+;Srdg~fKm(=g;sfaQ$m+sQzyxOs`t&pnJN8#->=-dbpc?V*j{b|hf zr^&^)`i#pIQHCR@On=aZjt{iA*E6g)&rVt~HyOmpNvC)V#``c8-%hL$riKb25iznQ zh7u1dS`}MBHUB6R(Qw3q(1i8ScSUyrjHdFTU?bpXQ}6%9&rQE-sJk07TSGrQXuF~a zHckfyMWknOdL&~^9-&)LOuU_H)a^qsXwBl%^WBnxIQE9mQ8ZcOFbsRa1H~)03WYc0 z@S~M>dF?Vrh{i?rs=A5n8gC%223iSGvrr}TIm^_LZiIRU4^GCJ_)Ns-^7z=Xo1ZJ_ zd@YLv<))a#_xS(9hA7Me_AQLfC}Qh~$P^;~1DTcTjBF&)=kGU80{^|kV$x-w^9?ZX zyxB&+Z*B~hLOF$Gs<{8VOXxJU1p!HVu>laH3U?$R<^Ji=2R8G1i9Otfu4u9zjqF&4 z`^1D}oaBDW8`qL4t^+2tgYyl=It=4l4Yp-^9F^>q|8!IN+Q?Oz7PUiRxpSrHu&S;) zM&CyXdqbX#DqjGYns^IHN?7J**vG4B0_m+Naw}$^D0@eh^0G={cZwIP|n zZcXkzi=aT=Yay?uD?I3H%t!&=XJsIH1sQ=A9O78FPFF1Gib>QPN~QB@zB2%mH92tK zJ=8daOzv+nib_VmIYQCWC*dfR06{>$zp3j6G5g4CygGFmH`f-tDp9W116#0&!hi4g z2l$GsW%N(5U{M3QdSRbw9ck>&a0do%k}pb8u(u%p!#LcVIdeT5Cg6U8?X=MS`cE>@ zPPhkV^!3(B=emr-D^O?#K!;g+OPT7^K@$??xYg&y3R~KdW>c~B-0>edY({Qc-vISwc|)ItY&!{%O9rl# z`Ky0h?l~N!wH-_NitZq)@ESAX4B>B^ZXz3;TzaL@V+OR$3j%%tssEHf5Mcw%Vos-+ zqq+)mqVf4g=^fqNXNQ)@7Hd-MqPH{*v-NtH`n8* z(IZT^l5ir%+Fdhmo^`hUCzzD4K&hEq;0!z$3q0W@2VJE1<#azGIuAU~MlSsrK!|V$g=y?3%Ias$N)Zy&mkN-Q%8t#h5jgt_UJV|2roE{zj6?X~FUSErbVt(WL@4^KD9M5H*EdBSSRR z5o?B1IuZ}nb^zNsp{1n?UV~jSX6lNr45Q;FpzV8!i1;IQO}e_a(Wy5zsOpIFbMY=8MSnz{2^yKbhlzM`LcaX zJUnxOK*d1hVKZ37gw6vH$Q2ebBvdz!D=+vD{GjFI=0&7R9kW62qT2ew(q{gW^bd z6g$sB0Zo)cgSZIQRL2Hik~3ALi?*$;uYNNoTYB&vQrcmKpiYqUPv8wdH_>>~c*+`6 z?z61Uy)+|ZtauA<8!Qiy*8;8UmMt0I0wXm9bZ`XxAtTuoPS0y~4T0%oR#xn)>w?bz z-SxIm5j?<`X$?5;xV#?N+`}^R)vDf2Q|3XG=>Nza%gcR^qL2_5OsfBMV$2O9J6tED_Wd*M#7S~*P&mWhUb$O>mBG~=Ji(1%#`3aO{<-C9zY&4 zzGCm^zxe7{?@Nyp!SqEGN&~(rsw?WE2Ubcne-L@RN>CJIM4~Em^EYOjlLmG!QsS+I zpCruy%!Ph?W)+%Bp_(2ps_lZXSPII~qf+L!3DCZkbf2j?Qu2u7J|Mq<8X+Y8)eJ}>XFL2ImmhIZg*C~ymfrv2Y@`UXf^n@v+sn(DnLpr z>fX5e@s*WINR9q@$=6`qsqxrlByp0^6Q2n0)a%1$UeDSz@7+6H>}?@fK{{}5b)0x2 zPKEXkK&(}}AjW1pYQ;E)2P)hcyrdwixG@_q$#}V@zzD(M1hvb=g!j+Wx z7`7CrEr7a(<-+9TJ5h14{;-mDGm&YNrUF?d#6WEpyG4On?l1~X)-Vk#K|xVned9=n zRxn}a>$69A`xs)qjgtSrvjlJn$e;1y{q|=OcE%8ed%7Yizm=c9gF&K6N=uCb#>n-4 ziqQGF-BVy+`kAfJY zek>z>7IF)uXb=U+CfLT<4CJgC@Dq=tfR`M~(&&1{8R z=3Q7I5Bcn_K<0CBkaB^D9?rNKIiX8E6_!k+1eRHB!+>0Fe-D27-K*(=y2%Kk+`Jr` zlHt#IdfR!ZPP!Gn@-*|}zMn##vF~=qWW(^+8GM=ygslp-ygK~8_P*=ld8CZQ-gyf8 zd%JA{c%WU(>f^AE^nRCeI{J=SoCn#G4V<9-Pg(14UioQoUZ$Glm`X^vXOrdX_+&1N{!x3cy!V6GgIZ zO6kYSGeZZ|1byZ2o>LsinBo{~G@nnI_8!&Kc-}vu zXg(r$d-P?o9l1x(67zaiux=o?@|NIq>S5kbI%~hUWQ1iC^Zws(V+~kAFW5+CRUtPT zI=3!oG}Bj#j zg|~z*1e>=6m}nn96>ythZ4*^jIrZw+)cSwv-J*dsk!Xgz#c;4Z751KjKssX{rCXB zM%b$hhq;p)wlo8in%jb}73*M5+@c1d`!lg6NA6@@5CHAsBMwLw)5%&3w4%-s&MKsm zO-$Pa8ba`j5$Tvy#*r$eH0a~UqC5o7QRflck+O0RDvy^3P0xgt*=hi~G1SYOVvk5+ zGI2)oSh>;Fc_a0cd|uK?bS1!P($&0X0+!i)T8nnvg&NnrA1UT!*vKf$yOuE7<%QiY zvo{1FUvF|>{1f;!R(%(ucc-lyq$z)SOZow_t19KT9!84bSx|XNr)l9nuzq#TXsP$z zfJPjhfrQ7_LYgY-9!58w!sGe{$Hs7nU~9b|@uLsW{t$RO<=8Ip_(!$OxxqD_S$ zb-#lWIwumVB@4L|iks<3T|=LH5SLvfpVx4iBM`sDT|QiOlO5dQvxW0kocTG3(X?yV z@MqjHa;u?-h9xu>#@ZSNL)$s{|wBRUCS!}@*BPJ<@|Yj85Gj|kZOXpn%4bh?nzGy;N@RR&ac z;aTf40Y^&-NQUg(eH(g-7-^Yeud|@aS8dR+fCM!T3A6t-dl69j4TOyVsf;sz)q(HK zOaquPh$P%nNf~)RMO(++1FnH9MvkcKQzc;`Vk<;$MTb@q(i5>sGbnxqm_~T#xO;wQ z`MS6YUK(#^Mtsa48pwtvlFv)p?&SqxfBR9?CNDU4jk@gYaD-QqEg zZojGi z0^DU{8t+P6LbAX@qtK(8T!^Yfe)i9X-uTx)H#w&f&U1lv}L?F zU1w7V#nulw-`pr?k}gVv?;)L4SHHME@8J_5b2jOA0>;?;{)5|Z>u2lTA|3CB|0JE{ zS=xFf>@%I9b?zUnh2<&_GoFlTb(+f90f+@ESUr>gRCV0Vy{xemf*7Lp3$DjxVnXEy z2-SWhSE!|HM6r};{p`mI-&~K_cu7c-2pvcA!O7)*vCHy`is(kw5Q88+lg$_5Yg@0L z-(t%sim+sO_TcLFGc?XqC%{+}%~^Qo4Rb;)7yDCEz^d|?kLvk#G`4kkWdNs&Ix>(xJaiL_Oh=H;fNPs71D_?8wS4)4eGJMz$z$ z2Rdc>Z17&vY&SR}@Kv(h#)KRFXT9$s5~B}Yy(tv{<}Y60mOH!%2<9ktC(9*{^(=2U zj4qY|!5pognyd4l|APENp%8?kERPQ*1e=nmf03xEykjr|$#_RDp58pwc8lM#Y_`~r zKD&3X2XCoW7{^#RcNo}X0}d&||0OP@290Sst-`@|G&IarC@ zJG1oU_Y(>Ikgk%)r)g*R@uROSAtzUTUD!qh|HffcrD%Q@FR^@jRmZXxxw5ne`R zo#gbw`Yhh(T?%8E#grUF6g#`D!@H~X?;rz=9o|@J>fTR7h=rQ7TEfcLFYcUxsJ-Z^Evs6UwvD|k#&=0z%o=#LnhsaTn>l)G zBKNY;Al*F_K69ziJ$rYkJGB4neER{bm|x1iI)XT>a=9?>QRDom``7#K)pts#LYM<= zWu#C#JcQy(cRB#YJ@q{&5^lJ5ok11Jq8_rFQ!m&}Ta!2|(ckCSsK!di&W3Vgmsg%I zTOae+XHNOhDEzq%*@G|AX z$WPjY1lPHRSc$wU14BWBjPW;$%~?A^I2Bqg9@d6tLSWDdr$@S+&JlHMP2#C&ktbtG zkRUnPleh9jL$?jAog*2nfq6cM5eN%EIz=;eHmkK-;7kHqlV%R zJv&nC*DYwwm-1 zj8PtX%PSg0CItkg`e`riMQCb=1~f_1Z7Q5Jweuvy{_|4kZMU zSyb41&|E{P3k;QN9FNnyszPhF=d0#Hd78*~t#D06glw$-=Fa41X|w9p{V0hX0<#DE zz-pCdmJQ}=lJ$N%V;U2LWP2Njdav@v_qUG*i1q1Sf7Oob2^R7aD29U=33s7Smo_%})Iv zPFHO`7p^BGJV3cG3kKN|?d+zv6E-8IN=Ih}zkKwiMAmpjW4K8wt>+q_-dT7LNDmvX zvise{LG}f0$xhObCsNkC&!GwmUs!bZWt_Q|Ex6oqK(U#BSC_*t}t#CkK6d2aILhLwv zeENVJV4>UDj+Ri~1I6Q0onn0*7;mIc38jWr-M>h*gKpPddUw*6h2R50zKID*k{pEdbIJn0JsE}pyvB-gkugcnqR=DY3+9RPRe151U+0W?PeqR_#pmx~S!V%ZkP;0pmuY^V8SJ-cg4GCoTeycfxD$uX%$YIj7~;sFc`*v*K#71DtZ92j@=2`oyW5}<y}n2I!|Aoo`#{;I8G3S+vkV>I992G6V)_Xm0kG?ci0DDxQQV? zZi(bZ8KW%_UtP&5ii9^&&^5APCR2bwuIJDh`|Wm*ozl3unP^I=rNphIUbZ$X*;)FG zlX3JuML=*qK#OptZ`c;Fscq;Bb?iDSPOxVSg7&o$m9ClN9nkG#pc#jwyMnZ1izO2Z z`YC9DQ&JV4qr0`nR@)6HPO`NFR7niI^igp+2cFD~HC6=B&1ieZ6K1d3U_f<4wQZ4l z=!I~bcgp=*qMQ{xhIL0wGWy|2#K0zHNo>q?4Lj59;L<0Iqh-FFIJ%Qix~ zxo@%C&rYbX*c&)`6Vcs20LuZ*P${g5@qc{b58kwAa`>qaTYFUZpgfY#={FI%8`oTG z^CPXlhHDlgg#0Xk0z08a`mG7;6m==>_LR_tn!3-WkNQRqoM}N49U)HyQ7>Cek0+9! zWmB4*A>BHbpT?TL-{TIS zfa^b`G4pVnkqe(OK1zH!=&{T<>d`d%=h52j)C$57)<=BM*KlKnqd<#@V7NJSHf#Ay z|9$&4a8L5P!n-&~OhewM6btr*A*EIuoW_6^wYG*h;740_FhIoTxoGnO3~aebr$z-^ zadv;5&5xgyw6FOg-@5>}Rl{maU9e8U_Ki;NjDHJ4j{mm;$mJS;h-4JiF1O#nyCZh;_0w$TR}m zEl)Xum0^StR&45R7@F|7Cl7n>$7TaP=d)kTS4pg2>+)wuE6L85hi4UtsyQ z6uhmiJ@>j#bB znygHCBS+3C2WOuqZ7`2MFzYxdHV6ppFWKESf%2L7a9~wj_yq9iqQ%fjGmM~L?t9Vt zQe26eFikn$z)c?iXxox#X*FzbJ)5DLtVvu(1otKWNmrO&`)bjHF-cvsWoiC>>Go<% z&U?+<2kaD4YFd5DzWsL_bXe2$LZA5+WwE+|06;37L85H)e_@4?4r#IA zh}4)9lXO4I0lnljkpFGB*Clo;abi?<{U#TX^>?TAb17sJi1x zc)0kO5G$5q%V7(A@hTwK`M%;XN5;I+{y4AOG~93DrP23`{~f%V;ZPj09y9p%CSJYC zJ8KVSvrGkRin(v zBjn*ckLc87Q5V?dSKtIKDgF6_<~r}^7s_bBROv?+jH+^7-+p-|-x*M2ke1ixqstMk zYkV8FC~-4^^Ymj?OnB@C?mVCwNYDq2hL2Kg3ywDyxV)}TfR4g5vGKx(K1<&BPW{_a zzQ6y}NLqk-lBAxMZ9L7&Q)q;Erh5ym3m1D>)`L)X(Q19ZiL(v1;du_zYj>i-fV+xy zfk{OTrq{LI`A7jhEV%Jy>u}=`%0S0D_Wrke)SJ+Hk`p5$59FXI}YIsp94V}?6g(6HO zH>qC9?qPx;azj>*>G|^XS*7eTH6*Rt&7A>0KkRy#*wvNUFL%EA`1fTgQw(2V>q4<#5SQZtjX%i%J^D{xAk?nDmk*Ox8$gnKgnJ(*G~fgl&tY9d>> z|5!}bV86a(^W|voX)Rv7pR942CEmOHoOiQ^a)$h*L> z~+kKKM$EJIF>K5=3SV zI%|$jwOs8d`}%*{X4^IlW=alf8k?Ap7cw2yT!S|VB+~uQ70jELLHK0kq6E!m}hAP!q-Kp|}JsNKg-oT-BO?pYoWmgPqn`_&5 zt@()Uh~e$L_fU}wdMb(|b-va|>mp7ViDIy|iDE2Wf{JecHJ#~Hp%(%3@MVIT5`}0f zvGRs2g!`y7o<|fyCSh3TgwTdGO|X>sln!hNfNKP6%1^wYE101Ld^!%-{oTds2xG<4 z*6l2qY2W*bwwLA@tNFvp7cv3Tm8x`5oz#-C;23F>^c!blcki*8ps?MX3C|=BZyDaj zbA+eY+@&lW8Amp-k@wn(}+j5`6ZR=Tn0?)!|hM2Ae* zQAac4yA;_DF;YOHV8O}zU;|&s5**tKSGM++9)=YP}-76ezSG}-SFIa)l?#Fs5T$NdTAdf z!>^1K3f}>qnSTIetXyY=#rn*@Y=UaVR$XZ1lIDjBfMysIm#C$+grkvI5t^^mDxdGW zNNO%b#nXAJ-{4jzo2+l77$=Pf^q%Bi6$!16eXs-W68E2OEqmfxnvhgsa{XC@Q11@X zkUCf!N6uK6H*fUXE|BNxB{f%nc_!jwQ)<&&A_=oz#)*a4?EFy{3Q7S(mKPe;;nulR zawES#F54l079KbCX5V1_E&F^DuNLuvvRgPL2=`PANd(j<9%ZGFg@sjG=k5oyy@r1M zDBLg6p(FdL-Sj^0XGJg_X<~f6?DIJ)MmS;1DqK9TxS(WY0o@~=99@){;(+oYq3Elt z09^xzf^tJSzv21A`tjl50;`P+cUWtlJp2CjE$<0Kv6`p^gOZcYisT%3r#NvdY?A)G z<^wXi;iYMe-F#AAes0nWt0W@Y+7AF2G;t&^iq)nmRBBv^CVw9f zX@l#2B=qLgipT^Gu*m+SY7^JCP9P}H7S5q*J5U5&R6mLZ8$6>hIY59Q2yvZE?O;H2oyL8rJDrTkD^B5C~86aAUe{4K9inGu$-u4J8>)2LRvBSlh zO#Z86Q#d+@?0YFSJpjLvp4DsM$=6wLKTnKH+G7CoWBefi+9{)-!V(XT-s8K{oYnzB zwryW>ntn6Bhs|%_X5$k09g?(g3=m$sIx^U+$lB2apr94o(x4{#R!{l9vj_M<`B>Ha zeB^;;`zF%i=>4NLcq9uZ%kw&Vg*nxl2pe4^O)pxrVt*DnuR;Siq#Dm9Y*z{sB ztrmnpcPC~dGKq02{;ZljErA%d!f|X5eTLTMbO2744 zA##h21*&|HCX$Ufi!3HW?6 z{i64`cGj0O$4o331pu@)OF8|sC&(^|OO+w(dlom?V7Tq+1eAv13(M|KISMD$=N8MB zPLLPu8Tg$)eVy<>d;_0KGL{&&Sp~8%IRpR0!KM&HTDt>Ul^GVpz@Sv2`!cAe0~PiM z(70Eo`&QsJKOj@oKOF>_eGM9upypw0(U$-qPd&++EQ^2cF}>Fu8KGcq8AGj1+&izlJ8Gg#ksy+Q5+v5UPH+X4@a>oi2k2yJ87vRLNE_O2 z6?V-fLoQYzY?#ev;2wpcAmRwNxyU|))CdpB{KO$6iZ-Xj=4GMDOQ>Yg?CHwJoNU~Q zSsh9npeR?g;XDW}aAqENJ|J=W{x$}Hq?WB7Ja(+3@jSOnS>6i87GTI|JW!_Ei~xiI zDnRhN6xW#Fxy}T01OdUl6G?9WUG-;1jArAi)V>HTI*SeZhqd!kryrFciFlo6okeuj z8|fRlHG*J&S^SR2ezBo>9ft4&@<^{h8!+(s87_SJPEiq1nO^rG^6YJCwy_Q4Mo_=j zn-@;Li{Ry(5zOETv2CZ0k&getus_1<^M^5TxTjSd2wz6O$A0oV%{eImG11o*-N8atnAlC-)Yx4k>=fUmkwY92^Y_Qn6iy>>f2g@U14o~jl}=C%niwfGYv z(BxS$^@H?Z|7?A$%GRUs8mAo@vvcTeH%;=6x6*}fW_QIq$utC3fRS zv6GT1#RlDfrq3j{c_TzGFWWIIIK#O^{t#J5FNOw~@cps_3k6`J)eW*p0^l2>R{zo^ zHq!16efGL@G8D5MnuMTLjz4yRW!4|M31DypD+A_YRki!As+%p)S{SVY(!c8%OJ5Xe z-j_oZH3j`k)r)*O@Rxal=VWTV+?eVta9#>h`$rh-ViszSq8dYYX~G&1V|U+HwTko0 z-urM^Y?TFdQC>Nz{z^v>b&6zCTxqvqnk#(63s z%-NaXtM{T5?)R!QUGEVS&DpdAeP5!W+3HexQzipf%`NMqLjdKqjw@*{0Hf0gyUudp z5jU7Rs?pH!AtIm0lnTqRU;P``!llyt3QWbv7$>&yg>w8H9kIc!X{5>5e6(Ag=IytY66E!b|s*(is2zL36mM)5Q7n3wQM%fkxiEry?4!9O-D=;xKzo zI|8??!kFank|;g;(gBN;Yw*SJAG|@d=0kFdnie9qXt}tXiA?s;Qk9^S)nW{Cz+7ZBt7pLDVGb<$FD`TuZAzxSJH?=cEnCv#{BQvTkRN}YHn3=j!S z1Pq|>_k&g&f%878oWfsp=wjH@eUfSxLx{MeWZShs1j2tt%bijcmAKmy!rSgiCQ~W6;K@DvRS`}cnv)a7~F~9Yg29Li`U^tjDV}qWSt|S5Q zOZn-(0TL@%B*>}{BL_%WBA#t$WOJMyjxx#eNAv1mCsRes6vU$Eok3MF3#LC!T15wp z500{%$wMeCP6?R-Lt>^v%|us_K3zXMY5!L|3iiKzdIDQoDx)hWg*;~-^JS3pzgK(D zJK*q&iB<5o;%|^Ih^aEmM>#uS@uB4XD6`ZfUVxZ=80HyQyp=9<^(m z$qyvGjsLnaJu}O%ZnynGl{hZ!8nto4HqYbgY`J(C zw|5Ig_(C2TPJaICqFb4h(1^8q$`5;7{!HSQze%_F-on``Z3Hp=3uH`2id~#kOa{f< zy$7CgGK8yCJM33)<%2IdcMK|Cq@TmwXa3Tkl@Xf+XplSTb}ZQjd2lHe05tUI0@4_i zj-k!SIn`TfVqgmos_cGCNEjQ?`#nb5EzBhVK1$?TidqlIPoAr-l4QjxC$N+n*TGrQ z;$~dyX4Ea)`M`7Sjdru7i}{$qA|IH;+5D9IG3_L{stzIza1}Xj$|yDTC5$H_h0Tbw ze3PgoGAUjez))TrRK!t5K>jb{IAC)p(crnJ--gdaB=%FUZFs)7k z#LYVJ#l#C|C$XL;m-3N7W=m_jK>!O9rRq35oEQNI9pyu^VO2PPHG2p8uAM-c25uin zpQ?arlE`Uc&m0&IaSjGkJ$38i$Kfc6%y5E$Dt9|YKp`M?kH{dIyORpC zh=^=JH}TE>jK@$fwLYEBcN)bC2!$t$6fo$OH_OM+RJy5=`eci2sLpJ;X?%YHR=IyO*+pqdLR48?7e1rxIIbO#~Vr%8K6nzKG4(L)G%u;Gv|GJ|J)_ zcsMAn4ujCF>Nyn!vuNrrYr2TkY>k!lVH zx%am0tB(>rFw9Tdk34*K9|4ui+_=RXq7SNkvCSG* zN{F>AbBlHd?~e)^0$4zB4u7;9+?-!c@+A;f&$_Hsn#YAyqXR6DVg`$EE7*T2roA-u zp%)L87+^in$PLD9gybn{;)-c@sT~^=*mql8o9x9!hgnfN{Bkr&jynU`lG9g zS9fBM^A`xR4Ptx?0}XhUX$Lz1ll>#0dW#SfP=4qaKd-fIOT%n2;QNWd}q5>df$vBSeX zMNLx fsie!I~L4b$f`5znx>Ec8R29B9sh6HaGh-^AE44HkI21Xm+XrX2yoIGkxg zvh-XsYUP!5NLfo5U?@yZX)2LsfrwDx()Zt&%fhD85&pa_VPH|(YG>5Y{F~A{QBh@tLXuWde@&zy$18t<32{}00Rv0}iKR@YA>iDUe2ihD|Lw>^LiMGn_lL{}s$n8y zBG3ME`c)jcc9)pU-eo7b#{o5W~Rit;Drr^PB9Yf z8fVy6+;Ge?1uW;YME?XFB5axk55t<(>DGUT14)1v8?Dg>hbhe&lSku1uL27kWQZr^ zFkd8&*@pc_{Um-kEtTE&pU{W=H}N32W}7z;RO-Cm8FDJVoIeI}HWYs8pw4_Bm~t zA(xg2f!X;!ou?r<=K*Rtt1qatcY8@Er_@5$!d6Ld(A)oLA5%x#&VV!7Ij+$48-|lv z0ZCwM7}{E}H)x{@jV^WV&1iHU(S~vMgu5rg-06VO&$h_Z_9BL-3vkwt^^t9KNBKK| z+5d!{5*t!N4sU9<62%+cBS4Q_S|XnC`jco&)`O_2PlSzI7`({+=oX9cgg_!Iu7@wL z&^Dd`&Px51yjQ=k)D7mQ(@qv%tQ@#C+5}v$M-(qtj1Us5aVONL%i90eQ^HJIRBlcY z9FCFAJKGG*K>!%6Y4XJz$08qYb19+}kXI}G@s5St`Q)ndslTwqdkfSOQ6fIbf)FU9 z15kGj{o)b*4MmqrhYI>3ao(O7Qs7a9%du&cH(}gonpsL%{kj}1V~n+7t*298m2l5I zo>J#jvQ(4W>Gmv$XvtQXdUL)qBW=HKmJ?&IbL;fNm zChc&9;aqvt-1bCTv>df^NL3EUYGYh@ zBbPwMWbMS)sP8j^AU0|^M*8U5oaPXH%gU<%HD42QAij~Ep`oSjw? zd!s0?P9W>TL1@h19f40nQlrN#B?fwb0Y!${*2(l~#qIE{Qs?rkv|Tp^0MHF4xW5=B z3$EJE03;NV^J5}OZTVf|<|xPCW3XJ?a|ybzw#n26)ZN#+2P%u2m1U_eo!`zh1hcOk zqYiC9Tl7BQ_lJScz)io-TZ&zOb=I@ek|)F+#0M1%VXF*{TB|`EjDhz$e4J2-7$>w9 z0bvD^6|~|}fmz(btyf?@OLbN`{bj%i`WF)YBnM~vLOd@YrM?0fz?I}kQ2L-3{089d z`W<}6H}xSR%BJ{+7@0V$#uxYCUzP8smBx>lNHwPI$YT4RG%inJcEucje-Z_54O! zopZ!LyxbZ-Nre1*p%hG;Z+|i13+ke%cDQW3iVm%t)NUp*VACAVgHbX(1`;qJn*u$) z$s(+%eyQIa_&L+kBii>2ZCXp#=fRd)xsmEKM?M!~Vuxgc9Lte1x^KmpspbC9Ku6z~ z$TeD|d7#}y_T`?{Cx_12 zG9y<#N8Tc7VT2t-l8T9QM>6NAt{MYe%TmR64)9R?>jzsPN19pZ%(a9eFh#yh188nD z?SK7#3H?6ZMD)Qc{j7n1@MoT!qN8ou4NynTo z%#ORyoA!9-fmz)eQ6#l|_#^{c*Haat4x`r7E^P&oL_e-gsF)8NA&G?QwIQdq`{$kw zfU_cKPj3J9`%IR7g`OF6u1UyQ@V-JtrL}#?fSzphfj#a}0QLyD1UuO@yuE@X+a|-p znIz=A<8X2Wg_o9>gRk=o%7;BW8-A%$PUmfrzh6I=Z+4l$jjP}W^HhCynu4=iRm<*Gq6%jH$E|<^&uaDl(t{~SK|O<&MMeC}^$-A# zCDJ8%n`3q_9C<3|+lsys78f;J#yrFNKHED)DBz_slw_|xA5>${`|x)_>Xbu;D?kd} zLf)i=%B9aHE*U)!>b!Gvi9EcHliE`7r3IzFqR<%$J%PL=gM&Qm7g{8~m+V=Unf`NO zv(OzcJn!^_ktaEXqK)EclxT}C-z^iVPB<#nHh?irJJ1F~NM-b?R1%7js7X-|@zu?s zMEH?_eCNZ~8One#lo(&!I3m6qOUZbRec~;#j3np>yjWRyd(4QqUrf+7qO}6_bpbjI z7+n7}aSMkTb8j}mjf}6z;&zH{scG?wOc1}%OWvY2Af;HJe2W3jzo#~E;BtbClV$lN zS9sDLB2gL*K3a{<=j{89)^d!-x|CR;?JtBcF5~~P24WjrY%hf0A{oGT&0&CwR-LrJ zFaX6k&1S2=asdxGz3|`@6Fc#}3_|`7f|0=S3hV|K+yO%`_^hgsNGl>sY9jGcz*3?QE5T*D95(gU9ALD3XbFQ{gtf zs1~<4^CAb?yKv|5r7(Ki9^7%l|B=+{36Nnedx#qNh&ZQ3N(y-)*H`>LTp$zCyp#L= zv9$Fvp0Iu$G1B)aHB~Te*IHQlk3n}&B729I`ZpUlKH%+j5%GMC>oFKiN^`20M-m@V!?b#!QR)4P`!Ha)v0lc=`UlUgS= z)uGVYxZf@R`5@eH4_kr>v&3zqp4ac}T`6IKlhy69dMHeJca!iTMi4^RU3gjVUBE_u z>mAz3aGc>thaTniFxtHsQ&kk&%GJmO5g1w+LjFJ zkAq>y28ddzK5FmEi{M}Gjo(4Fl~!aK+BF!a`4S+9815I+F4Saz$CMRvq%n;NztNCx zSI*Xk{eD1|^mn zz*`8(8K{M&9gyXAh?amD19Ohivkj!2R;MvZ5tlC!YwM2+-jgp5fLJd{(=0B ziI!O)SG^VY6ofr0t$iyb^sg0M$|{d9PzuEVE99f8&-q?w_-_B=5L?FVH!7n#5u;Ws zsP^##RPt^S+d)9D%exyU#oqe;Eu}?-u01H8I9Z?AHxD$%g>F3cO4k8~J9)&G%SDM| zd_?m2!N<5qYj`>@ZgG;fP^w&fi+K2kk<}R+PyO|MwhugS;c z!#Kq3%sRyjzfLtB(kqRjLF_bpi7*w|bH|KLpvQdPRc*Dq%XRW-V{+vW%*O?t8N5_l zfFEy#+a?GnkH(5y;>Pfn=T)~}98eWIa5KEf`Lf7YK&SM%04Us?34K>~#kDJKCp3zP z+mxm653cH>cPiNP3BG1tFx81u`9zxRge36Yzl+{8vy*Ns?Mbj5M~uEdf55;j!dN## zw&A0+j#{e3i>0yhcj#A$R%0-pAKV3#!T3(AbKD3q^u?8#m0@|=Q;?QYv?6%sJZu?V ztUHnbNYkwPg1k{PaTCZ`1>izb&%5@~GUVF#&b>)n&z^twds*;yK&%MM!S-W(1KdAt zVZP}nz_$P$!2wJ|6!(AbCc#xg;BN8($6fECp#M_fFmdS@!n2ZU<{8E}vw_e^*#U2*A)I%oDg7f+1h zq;@D9(;S;Oa|6E8?x!Xk^guxorGpW#!jS!et`r`|*uKJ0?`ZSV4&L(9@It7IjBH)VBZng3F081s&+qyPIfj4xdWc=1)B8zxwOVQ`JwN4sx&Sxhb+z=u(>vw`r; z&M)4ZGBoaHfLj)2dl&~l&qzjr6V`GY3W5eDFdmbJ^O5`TOPp4#S92fIEiCM{@Sc5@ zx+|Jhb+a=!nr^Hz?YlrgD2J&`-@4XD24K&e>Bk|P5L1~oo5%dZBtI1^6`|vw$JINZ zAfa%6dG$Uz=1eg$VNr`nI=e4sAx!f=EtQh6XnPevRVCQ#9(u7liV+e*bgC`CFb>ds zRHx%B_GaT_!r)=(O*3n{Z}0b$XPeH``L}X;RXr^Ygvxq!IAaY=&NOY}_wM)2VOwPQ zjRR0z6>{8ZBUVAu@g*3ME>LBApEE{CEgr8q(TU!b0G@rnUQjhu&Klp>G0^{BCdhn@ z+zqRd-#?obqEHf_r+Qu?3u%Lfd<0@hxF7L;BrJp*GdUzR(mCBXV*=@7i=2eYqC^3l zFSIyAhKB{zQ@*B-5ln6BFRZuDZ-D{| z<0O5o$JJuQv_z85WKD1^BI>jCfLn+@?@%s5y2nokO{8a7`4|AFlmHULe&5X;Ozyap zsKvB3tjM9cVnPtIkRU3&{o{qTwS*D~c}4!=A$@|9gq-k?w}YeXs0dEwvQ~40_Od54c}m23Vo0t^sPeZTM$?UqucU zNKVU7Z(DVM^HE4J_!pGrcSkL_|4v{g4wHnR>3i!yl@@uRu2hDmKBUbFh;0KW#Ykvt zfBik0QNpqh_R|vCt?3UZ@kVR2KD7B{2fZqZ^ovT}C`Tdb>B^uu47W@N5%&sfu1jP- z*e3b`*?ddt@J?xR=pYqF{&q%72BGoPwRK+OgY3No%@Bi9{yAQ8E4>wcdmp=slbGOQ z{80RH;m<|mmu+s69m}edE|Ce0382f9+$(b69>t#o2ZyLxF`>I zE5l{%LnPsJ4I&7tZ#E(&`M$3pH{AHII>2lyZ@uTr9)j_01Y^c44kbqyoSJQ z6DJ{FtU^9%dZM)icNX%gYaR*ozkCdy2hae$xq>B*wX-cGc)KP)Z!M91#b<<_iHP|$ z5Te>-C|?;Q`_9)Tgs9D@In%*;J4uun>@P%4`^Fy2x@QfYRq@=3-1l#*zR<7)gI(N@ zYb}tJ+ac~(`Y8?xO_yh~iKc*&SeKC&XljPV40X@2t%7dBReiEjcB7KT7*DpOWUTf0nChgCy_Idp zzK#mSCOu(?PIY>@VLxu&4cp1BombvVW5WH3l=~tq{+0WPilqbWFT?KoiYRemvw%2k zJ}VrhFMz5`xDXN8vbIRYp6r6rJoI&*e(dx1IXEM)TIu3?$AFae6{a3xYB5-yEal+} z#RFw48z?9Fm{OC?G>fY%cgX$oXI;*;8Bj5^n3JDpgy6&%3gH77yX4J#jhp>Vi`fNx z5zZ=!_0VAvaL_qwn6h@;QIY0|RrQMNJJn1OO#SoV-` zaK2dTd9+Ql}E&90bKze)p2-2dx^|%&go*pST%nd4*Sjitg9zhKnzemDW zxSJ?lt^|}~`t4Yms^}uBR@ue)YHp|NEB|T9EEIQNi8wzBu9H24-}3_}8j*OK;+>*@ z_l85Cog51IC27dNX$i7%`5X&tAnYecvvvstGaITV*f&-QcCP2(&M_=4wVz{KYYD=7 zg#$FDwo9ng?S}JuID8w?!;rIXEV;R)vy7Q!)$d|eXJJl`Jy>LQ_Eb6floS9pj)i|JA3zHPBsr4n#~H(Ip0w>fUgb6G)4ocYXd`D{_Z z0PH7@g;$VIPw7EMwXBF%SfE+^K|lW7E>Ix zulK^xf2sYvZ0fXEDO5QeH$hg!NK>xGD@^7)EYTcbHh|A=OHtM_RYBrrsN~O1^h85P zuFN}eVnU#0AUPOB>4-`v`Zih(!BPt?h_k*$2-Kw7t zoFf^sPAmNw(=_`Z9?vFys9!vSSb`^*AaId+Q>=vVg!gMv9(cwDcBTs=#~kGhZ+O`o zee@Z8?VnLdCD=ldlZ!bnf>vK>_gsWa(~1iMUe_^@(2pQGxtQSSq8cgajged961Rml z@?5`)C|Tf!lnz4nB$D9y`8Q{FPZsI3rfe&D9br1dMFmtPM^3hX>jH8=%7KGdCricH zd`XA4)5vjLLhNlbIHkppkhY;Y?WPX%04%q@%lQ)6k5jTT_ny6QqUl2*)s z%eron0f+&83w%Pa_Vjs&xTbzBYC!wsuIIR1QoYr#xI}CZt>&QFx0OkOmiNVj0SL-; z3pV6>k}&Q1`zIV-ZzVunXweQVK9 zdHB+dIW9d;lUyxj#lZGdC$1V}3rRRNq2f@_ZS{HYHqOlb>m{!I;P-t_!L86<*#ALl zeEAteO%R;cunz75rH6wAI>Xc-l8!0(V2lyHil@HKX}<`guF@4Yq%EUbXSYSx{>o`v zPXWC2qq?o+?9i1zA8SMkg;98y8w*<*DSF^Rl30MsdfqSh{a!zssYxx6DfzDQAj~I4 zNc#9}wry)%2krj>KYFD+CpQ3P|CIE?29DIMBJZ>PhT20HmS_;OpEoeTJAA)LlAYmf zk&F_c89ovNL+1k&af3*W011aGl!`VfDKIu%OjxFh_XpMWh!9NjF><#EE+6XVD-iZ; zG?&VShB}V>RCvlY*#A`pz0LFv91=jawp6Syac6BT?{AOGPwS

@t~6KH#2}TB={< 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 AvH$=8 literal 0 HcmV?d00001 diff --git a/extensions/blockchain-explorer.json b/extensions/blockchain-explorer.json index eb897a1..7055974 100644 --- a/extensions/blockchain-explorer.json +++ b/extensions/blockchain-explorer.json @@ -9,7 +9,7 @@ "path": "/src/blockchain_db/blockchain_db.h", "changes": [ { - "action": "add_bellow", + "action": "add_below", "marker": "virtual uint64_t get_block_already_generated_coins(const uint64_t& height) const = 0;", "parameters": { "text": [ @@ -23,7 +23,7 @@ "path": "/src/blockchain_db/lmdb/db_lmdb.h", "changes": [ { - "action": "add_bellow", + "action": "add_below", "marker": "virtual uint64_t get_block_already_generated_coins(const uint64_t& height) const;", "parameters": { "text": [ @@ -37,7 +37,7 @@ "path": "/src/blockchain_db/lmdb/db_lmdb.cpp", "changes": [ { - "action": "add_bellow", + "action": "add_below", "marker": "uint64_t bi_coins;", "parameters": { "text": [ @@ -46,7 +46,7 @@ } }, { - "action": "add_bellow", + "action": "add_below", "marker": "bi.bi_coins = coins_generated;", "parameters": { "text": [ @@ -91,7 +91,7 @@ "path": "/src/cryptonote_core/blockchain.h", "changes": [ { - "action": "add_bellow", + "action": "add_below", "marker": "Blockchain(tx_memory_pool& tx_pool);", "parameters": { "text": [ @@ -106,7 +106,7 @@ "path": "/src/cryptonote_core/blockchain.cpp", "changes": [ { - "action": "add_bellow", + "action": "add_below", "marker": "static const uint64_t testnet_hard_fork_version_1_till = 624633;", "parameters": { "text": [ @@ -147,7 +147,7 @@ "path": "/src/rpc/core_rpc_server.h", "changes": [ { - "action": "add_bellow", + "action": "add_below", "marker": "MAP_JON_RPC_WE(\"get_version\", on_get_version, COMMAND_RPC_GET_VERSION)", "parameters": { "text": [ @@ -730,7 +730,7 @@ "path": "/tests/unit_tests/blockchain_db.cpp", "changes": [ { - "action": "add_bellow", + "action": "add_below", "marker": "ASSERT_EQ(t_coins[0], this->m_db->get_block_already_generated_coins(0));", "parameters": { "text": [ @@ -744,7 +744,7 @@ "path": "/tests/unit_tests/hardfork.cpp", "changes": [ { - "action": "add_bellow", + "action": "add_below", "marker": "virtual uint64_t get_block_already_generated_coins(const uint64_t& height) const { return 10000000000; }", "parameters": { "text": [ @@ -755,4 +755,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/extensions/core/monero.json b/extensions/core/monero.json index 3e2f614..182e49a 100644 --- a/extensions/core/monero.json +++ b/extensions/core/monero.json @@ -3,5 +3,538 @@ "description": "Makes essensial parameters editable.", "required": [], "files": [ + { + "path": "/src/cryptonote_config.h", + "changes": [ + { + "action": "replace", + "marker": "#define CRYPTONOTE_NAME", + "parameters": { + "text": [ + "#define CRYPTONOTE_NAME \"%s\"" + ], + "var": "CRYPTONOTE_NAME" + } + }, + { + "action": "replace", + "marker": "uint16_t const P2P_DEFAULT_PORT = 18080;", + "parameters": { + "text": [ + "uint16_t const P2P_DEFAULT_PORT = %s;" + ], + "var": "MAINNET_P2P_DEFAULT_PORT" + } + }, + { + "action": "replace", + "marker": "uint16_t const RPC_DEFAULT_PORT = 18081;", + "parameters": { + "text": [ + "uint16_t const RPC_DEFAULT_PORT = %s;" + ], + "var": "MAINNET_RPC_DEFAULT_PORT" + } + }, + { + "action": "replace", + "marker": "uint16_t const ZMQ_RPC_DEFAULT_PORT = 18082;", + "parameters": { + "text": [ + "uint16_t const ZMQ_RPC_DEFAULT_PORT = %s;" + ], + "var": "MAINNET_ZMQ_RPC_DEFAULT_PORT" + } + }, + + + { + "action": "replace", + "marker": "uint16_t const P2P_DEFAULT_PORT = 28080;", + "parameters": { + "mandatory": false, + "text": [ + "uint16_t const P2P_DEFAULT_PORT = %s;" + ], + "var": "TESTNET_P2P_DEFAULT_PORT" + } + }, + { + "action": "replace", + "marker": "uint16_t const RPC_DEFAULT_PORT = 28081;", + "parameters": { + "mandatory": false, + "text": [ + "uint16_t const RPC_DEFAULT_PORT = %s;" + ], + "var": "TESTNET_RPC_DEFAULT_PORT" + } + }, + { + "action": "replace", + "marker": "uint16_t const ZMQ_RPC_DEFAULT_PORT = 28082;", + "parameters": { + "mandatory": false, + "text": [ + "uint16_t const ZMQ_RPC_DEFAULT_PORT = %s;" + ], + "var": "TESTNET_ZMQ_RPC_DEFAULT_PORT" + } + }, + + + { + "action": "replace", + "marker": "uint64_t const CRYPTONOTE_PUBLIC_ADDRESS_BASE58_PREFIX = 18;", + "parameters": { + "text": [ + "uint64_t const CRYPTONOTE_PUBLIC_ADDRESS_BASE58_PREFIX = %s;" + ], + "var": "CRYPTONOTE_PUBLIC_ADDRESS_BASE58_PREFIX" + } + }, + + { + "action": "replace", + "marker": "uint64_t const CRYPTONOTE_PUBLIC_INTEGRATED_ADDRESS_BASE58_PREFIX = 19;", + "parameters": { + "text": [ + "uint64_t const CRYPTONOTE_PUBLIC_INTEGRATED_ADDRESS_BASE58_PREFIX = %s;" + ], + "var": "CRYPTONOTE_PUBLIC_INTEGRATED_ADDRESS_BASE58_PREFIX" + } + }, + { + "action": "replace", + "marker": "uint64_t const CRYPTONOTE_PUBLIC_SUBADDRESS_BASE58_PREFIX = 42;", + "parameters": { + "text": [ + "uint64_t const CRYPTONOTE_PUBLIC_SUBADDRESS_BASE58_PREFIX = %s;" + ], + "var": "CRYPTONOTE_PUBLIC_SUBADDRESS_BASE58_PREFIX" + } + }, + { + "action": "replace", + "marker": "0x12 ,0x30, 0xF1, 0x71 , 0x61, 0x04 , 0x41, 0x61, 0x17, 0x31, 0x00, 0x82, 0x16, 0xA1, 0xA1, 0x10", + "parameters": { + "text": [ + "%s" + ], + "var": "MAINNET_NETWORK_ID" + } + }, + { + "action": "replace", + "marker": "0x12 ,0x30, 0xF1, 0x71 , 0x61, 0x04 , 0x41, 0x61, 0x17, 0x31, 0x00, 0x82, 0x16, 0xA1, 0xA1, 0x11", + "parameters": { + "mandatory": false, + "text": [ + "%s" + ], + "var": "TESTNET_NETWORK_ID" + } + }, + { + "action": "replace", + "marker": "std::string const GENESIS_TX = \"013c01ff0001ffffffffffff03029b2e4c0281c0b02e7c53291a94d1d0cbff8883f8024f5142ee494ffbbd08807121017767aafcde9be00dcfd098715ebcf7f410daebc582fda69d24a28e9d0bc890d1\";", + "parameters": { + "text": [ + "std::string const GENESIS_TX = \"%s\";" + ], + "var": "MAINNET_GENESIS_TX" + } + }, + { + "action": "replace", + "marker": "std::string const GENESIS_TX = \"013c01ff0001ffffffffffff0f029b2e4c0281c0b02e7c53291a94d1d0cbff8883f8024f5142ee494ffbbd0880712101168d0c4ca86fb55a4cf6a36d31431be1c53a3bd7411bb24e8832410289fa6f3b\";", + "parameters": { + "mandatory": false, + "text": [ + "std::string const GENESIS_TX = \"%s\";" + ], + "var": "TESTNET_GENESIS_TX" + } + }, + { + "action": "replace", + "marker": "#define MONEY_SUPPLY", + "parameters": { + "mandatory": false, + "text": [ + "#define MONEY_SUPPLY ((uint64_t)%s)" + ], + "var": "MONEY_SUPPLY" + } + }, + { + "action": "replace", + "marker": "#define EMISSION_SPEED_FACTOR_PER_MINUTE", + "parameters": { + "mandatory": false, + "text": [ + "#define EMISSION_SPEED_FACTOR_PER_MINUTE (%s)" + ], + "var": "EMISSION_SPEED_FACTOR" + } + }, + { + "action": "replace", + "marker": "#define FINAL_SUBSIDY_PER_MINUTE", + "parameters": { + "mandatory": false, + "text": [ + "#define FINAL_SUBSIDY_PER_MINUTE ((uint64_t)%s)" + ], + "var": "FINAL_SUBSIDY_PER_MINUTE" + } + }, + + + { + "action": "replace", + "marker": "#define DIFFICULTY_TARGET_V2", + "parameters": { + "mandatory": false, + "text": [ + "#define DIFFICULTY_TARGET_V2 %s" + ], + "var": "DIFFICULTY_TARGET_V2" + } + }, + { + "action": "replace", + "marker": "#define DIFFICULTY_TARGET_V1", + "parameters": { + "mandatory": false, + "text": [ + "#define DIFFICULTY_TARGET_V1 %s" + ], + "var": "DIFFICULTY_TARGET_V1" + } + }, + + + { + "action": "replace", + "marker": "#define DIFFICULTY_WINDOW", + "parameters": { + "mandatory": false, + "text": [ + "#define DIFFICULTY_WINDOW %s" + ], + "var": "DIFFICULTY_WINDOW" + } + }, + { + "action": "replace", + "marker": "#define DIFFICULTY_CUT", + "parameters": { + "mandatory": false, + "text": [ + "#define %s" + ], + "var": "DIFFICULTY_CUT" + } + }, + { + "action": "replace", + "marker": "#define DIFFICULTY_LAG", + "parameters": { + "mandatory": false, + "text": [ + "#define DIFFICULTY_LAG %s" + ], + "var": "DIFFICULTY_LAG" + } + }, + + { + "action": "replace", + "marker": "#define CRYPTONOTE_DISPLAY_DECIMAL_POINT", + "parameters": { + "mandatory": false, + "text": [ + "#define CRYPTONOTE_DISPLAY_DECIMAL_POINT %s" + ], + "var": "CRYPTONOTE_DISPLAY_DECIMAL_POINT" + } + }, + { + "action": "replace", + "marker": "#define COIN", + "parameters": { + "mandatory": false, + "text": [ + "#define COIN ((uint64_t)%s)" + ], + "var": "COIN" + } + }, + { + "action": "replace", + "marker": "uint64_t const DEFAULT_DUST_THRESHOLD = ((uint64_t)2000000000);", + "parameters": { + "mandatory": false, + "text": [ + "uint64_t const DEFAULT_DUST_THRESHOLD = ((uint64_t)%s);" + ], + "var": "DEFAULT_DUST_THRESHOLD" + } + } + ] + }, + + { + "path": "/src/p2p/net_node.inl", + "multiline": true, + "changes": [ + { + "action": "replace", + "marker": "(std::set full_addrs;)[^@]+(return full_addrs;)", + "parameters": { + "text": [ + "\\1\\n if (testnet) {\\n } else {\\n%MAINNET_SEED_NODES%\\n }\\n \\2" + ] + } + } + ] + }, + { + "path": "/src/p2p/net_node.inl", + "changes": [ + { + "action": "replace", + "marker": "%MAINNET_SEED_NODES%", + "parameters": { + "text": [ + "%s" + ], + "var": "MAINNET_SEED_NODES" + } + } + ] + }, + { + "path": "/src/checkpoints/checkpoints.cpp", + "multiline": true, + "changes": [ + { + "action": "replace", + "marker": "(static const std::vector dns_urls = {)[^}]+(};)", + "parameters": { + "text": [ + "\\1\\n\\2" + ] + } + }, + { + "action": "replace", + "marker": "(static const std::vector testnet_dns_urls = {)[^}]+(};)", + "parameters": { + "text": [ + "\\1\\n\\2" + ] + } + }, + { + "action": "replace", + "marker": "(bool checkpoints::init_default_checkpoints\\(bool testnet\\))[^@]+(bool checkpoints::load_checkpoints_from_json\\(const std::string &json_hashfile_fullpath\\))", + "parameters": { + "text": [ + "\\1\\n{\\n if (testnet) {\\n return true; \\n} \\n%MAINNET_CHECKPOINTS%\\n return true;\\n}\\n\\n\\2" + ] + } + } + ] + }, + { + "path": "/src/checkpoints/checkpoints.cpp", + "changes": [ + { + "action": "replace", + "marker": "%MAINNET_CHECKPOINTS%", + "parameters": { + "text": [ + "%s" + ], + "replace_text_alt": [ + "" + ], + "var": "MAINNET_CHECKPOINTS" + } + } + ] + }, + { + "path": "/src/common/updates.cpp", + "multiline": true, + "changes": [ + { + "action": "replace", + "marker": "(static const std::vector dns_urls = {)[^@]+(};)", + "parameters": { + "text": [ + "\\1\\n\\2" + ] + } + } + ] + }, + + { + "path": "/src/cryptonote_core/blockchain.cpp", + "multiline": true, + "changes": [ + { + "action": "replace", + "marker": "(} mainnet_hard_forks\\[\\] = {)[^;]+(};)", + "parameters": { + "text": [ + "\\1\\n%MAINNET_HARDFORKS%\\n\\2" + ] + } + }, + { + "action": "replace", + "marker": "(} testnet_hard_forks\\[\\] = {)[^;]+(};)", + "parameters": { + "text": [ + "\\1\\n%TESTNET_HARDFORKS%\\n\\2" + ] + } + } + ] + }, + { + "path": "/src/cryptonote_core/blockchain.cpp", + "changes": [ + + { + "action": "add_above", + "marker": "bool valid = hash == m_blocks_hash_of_hashes[n];", + "parameters": { + "text": [ + "MWARNING(\"block: \" << height << \" - \" << epee::string_tools::pod_to_hex(hashes.front()));", + "MWARNING(\"block: \" << height + hashes.size() << \" - \" << epee::string_tools::pod_to_hex(hashes.back()));", + "MWARNING(\"first_index: \" << first_index << \" - \" << last_index);" + ] + } + }, + + { + "action": "replace", + "marker": "%MAINNET_HARDFORKS%", + "parameters": { + "text": [ + "%s" + ], + "var": "MAINNET_HARDFORKS" + } + }, + { + "action": "replace", + "marker": "%TESTNET_HARDFORKS%", + "parameters": { + "text": [ + "%s" + ], + "replace_text_alt": [ + "" + ], + "var": "TESTNET_HARDFORKS" + } + }, + { + "action": "replace", + "marker": "static const uint64_t mainnet_hard_fork_version_1_till = 1009826;", + "parameters": { + "text": [ + "static const uint64_t mainnet_hard_fork_version_1_till = %s;" + ], + "var": "MAINNET_HARDFORK_V1_LAST_BLOCK" + } + }, + { + "action": "replace", + "marker": "static const uint64_t testnet_hard_fork_version_1_till = 624633;", + "parameters": { + "text": [ + "static const uint64_t testnet_hard_fork_version_1_till = %s;" + ], + "replace_text_alt": [ + "static const uint64_t testnet_hard_fork_version_1_till = 1;" + ], + "var": "TESTNET_HARDFORK_V1_LAST_BLOCK" + } + }, + { + "action": "replace", + "marker": "LOG_ERROR(\"WARNING: local blockchain failed to pass a MoneroPulse checkpoint, and you could be on a fork. You should either sync up from scratch, OR download a fresh blockchain bootstrap, OR enable checkpoint enforcing with the --enforce-dns-checkpointing command-line option\");", + "parameters": { + "text": [ + " LOG_ERROR(\"WARNING: local blockchain failed to pass a %sPulse checkpoint, and you could be on a fork. You should either sync up from scratch, OR download a fresh blockchain bootstrap, OR enable checkpoint enforcing with the --enforce-dns-checkpointing command-line option\");" + ], + "var": "COIN_NAME" + } + } + ] + }, + + + + { + "path": "/src/common/dns_utils.cpp", + "changes": [ + { + "action": "replace", + "marker": "LOG_PRINT_L0(\"WARNING: no two valid MoneroPulse DNS checkpoint records were received\");", + "parameters": { + "text": [ + " LOG_PRINT_L0(\"WARNING: no two valid %sPulse DNS checkpoint records were received\");" + ], + "var": "COIN_NAME" + } + }, + { + "action": "replace", + "marker": "LOG_PRINT_L0(\"WARNING: no two MoneroPulse DNS checkpoint records matched\");", + "parameters": { + "text": [ + " LOG_PRINT_L0(\"WARNING: no two %sPulse DNS checkpoint records matched\");" + ], + "var": "COIN_NAME" + } + } + ] + }, + + { + "path": "/src/blocks/blocks.dat", + "action": "remove" + }, + { + "path": "/src/blocks/checkpoints.dat", + "action": "remove" + }, + { + "path": "/src/blocks/testnet_blocks.dat", + "action": "remove" + }, + { + "path": "/src/blocks/blocks.dat", + "action": "add", + "source": "/monero/files/blocks.dat" + }, + { + "path": "/src/blocks/checkpoints.dat", + "action": "add", + "source": "/monero/files/checkpoints.dat" + }, + { + "path": "/src/blocks/testnet_blocks.dat", + "action": "add", + "source": "/monero/files/testnet_blocks.dat" + } ] } diff --git a/extensions/core/monero/files/blocks.dat b/extensions/core/monero/files/blocks.dat new file mode 100644 index 0000000..e69de29 diff --git a/extensions/core/monero/files/checkpoints.dat b/extensions/core/monero/files/checkpoints.dat new file mode 100644 index 0000000..e69de29 diff --git a/extensions/core/monero/files/testnet_blocks.dat b/extensions/core/monero/files/testnet_blocks.dat new file mode 100644 index 0000000..e69de29 diff --git a/extensions/donations.json b/extensions/donations.json new file mode 100644 index 0000000..737ac88 --- /dev/null +++ b/extensions/donations.json @@ -0,0 +1,77 @@ +{ + "file": "donations.json", + "description": "Donation address for a dev team", + "required": [ + ], + "files": [ + { + "path": "/src/cryptonote_config.h", + "changes": [ + { + "action": "add_below", + "marker": "#define PER_KB_FEE_QUANTIZATION_DECIMALS", + "parameters": { + "text": [ + "#define CONFIG_DONATION_ADDRESS \"%s\"" + ], + "replace_text_alt": [ + "#define CONFIG_DONATION_ADDRESS \"\"" + ], + "var": "CONFIG_DONATION_ADDRESS" + } + } + ] + }, + + { + "path": "/src/cryptonote_basic/miner.cpp", + "changes": [ + { + "action": "add_below", + "marker": "const command_line::arg_descriptor arg_bg_mining_enable = {\"bg-mining-enable\", \"enable/disable background mining\", true, true};", + "parameters": { + "text": [ + "// the 3rd and 4rd parameter are just copy paste. I don't know what they do", + " const command_line::arg_descriptor arg_donate = {\"donate\", \"Enable background donation mining\", true, true};" + ] + } + }, + { + "action": "replace", + "marker": "if(command_line::has_arg(vm, arg_start_mining))", + "parameters": { + "text": [ + " if(command_line::has_arg(vm, arg_start_mining) || command_line::has_arg(vm, arg_donate))" + ] + } + }, + { + "action": "replace", + "marker": "if(!cryptonote::get_account_address_from_str(info, testnet, command_line::get_arg(vm, arg_start_mining)) || info.is_subaddress)", + "parameters": { + "text": [ + " if(command_line::has_arg(vm, arg_donate))", + " {", + " if (!cryptonote::get_account_address_from_str(info, testnet, std::string(CONFIG_DONATION_ADDRESS)))", + " {", + " LOG_ERROR(\"Internal error: malformed donation address\");", + " return false;", + " }", + " }", + " else if(!cryptonote::get_account_address_from_str(info, testnet, command_line::get_arg(vm, arg_start_mining)) || info.is_subaddress)" + ] + } + }, + { + "action": "add_below", + "marker": "command_line::add_arg(desc, arg_bg_mining_enable);", + "parameters": { + "text": [ + " command_line::add_arg(desc, arg_donate);" + ] + } + } + ] + } + ] +} diff --git a/extensions/enable-cors.json b/extensions/enable-cors.json index c41ca8c..b058ec1 100644 --- a/extensions/enable-cors.json +++ b/extensions/enable-cors.json @@ -9,7 +9,7 @@ "path": "/contrib/epee/include/net/http_server_handlers_map2.h", "changes": [ { - "action": "add_bellow", + "action": "add_below", "marker": "response.m_response_comment = \"Ok\"; \\", "parameters": { "text": [ @@ -20,4 +20,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/extensions/versionized-parameters.json b/extensions/versionized-parameters.json new file mode 100644 index 0000000..9f3e8ca --- /dev/null +++ b/extensions/versionized-parameters.json @@ -0,0 +1,83 @@ +{ + "file": "versionized-parameters.json", + "description": "Change parameters when hardfork.", + "required": [], + "files": [ + { + "path": "/src/cryptonote_config.h", + "changes": [ + { + "action": "add_below", + "marker": "#define DIFFICULTY_WINDOW 720", + "parameters": { + "text": [ + "#define DIFFICULTY_WINDOW_V2 %s" + ], + "replace_text_alt": [ + "#define DIFFICULTY_WINDOW_V2 DIFFICULTY_WINDOW" + ], + "var": "DIFFICULTY_WINDOW_V2" + } + }, + { + "action": "add_below", + "marker": "#define EMISSION_SPEED_FACTOR_PER_MINUTE (20)", + "parameters": { + "text": [ + "#define EMISSION_SPEED_FACTOR_PER_MINUTE_V2 (%s)" + ], + "replace_text_alt": [ + "#define EMISSION_SPEED_FACTOR_PER_MINUTE_V2 EMISSION_SPEED_FACTOR_PER_MINUTE" + ], + "var": "EMISSION_SPEED_FACTOR_PER_MINUTE_V2" + } + } + ] + }, + { + "path": "/src/cryptonote_config.h", + "changes": [ + { + "action": "add_below", + "marker": "#define DIFFICULTY_WINDOW 720", + "parameters": { + "text": [ + "#define DIFFICULTY_WINDOW_V1 %s" + ], + "replace_text_alt": [ + "#define DIFFICULTY_WINDOW_V1 DIFFICULTY_WINDOW" + ], + "var": "DIFFICULTY_WINDOW_V1" + } + }, + { + "action": "add_below", + "marker": "#define EMISSION_SPEED_FACTOR_PER_MINUTE (20)", + "parameters": { + "text": [ + "#define EMISSION_SPEED_FACTOR_PER_MINUTE_V1 (%s)" + ], + "replace_text_alt": [ + "#define EMISSION_SPEED_FACTOR_PER_MINUTE_V1 EMISSION_SPEED_FACTOR_PER_MINUTE" + ], + "var": "EMISSION_SPEED_FACTOR_PER_MINUTE_V1" + } + } + ] + }, + { + "path": "/src/cryptonote_basic/cryptonote_basic_impl.cpp", + "changes": [ + { + "action": "replace", + "marker": "const int emission_speed_factor = EMISSION_SPEED_FACTOR_PER_MINUTE - (target_minutes-1);", + "parameters": { + "text": [ + "const int emission_speed_factor = version < 2 ? EMISSION_SPEED_FACTOR_PER_MINUTE_V1 - (target_minutes-1) : EMISSION_SPEED_FACTOR_PER_MINUTE_V2 - (target_minutes-1);" + ] + } + } + ] + } + ] +} diff --git a/install_dependencies.sh b/install_dependencies.sh index 4e92169..acf1798 100644 --- a/install_dependencies.sh +++ b/install_dependencies.sh @@ -1,6 +1,6 @@ #!/bin/bash -# Template: OpenBazaar +# Template: OpenBazaar # # install_dependencies.sh - Setup your Cryptonote development environment in one step. # @@ -63,7 +63,8 @@ function installMac { fi # install gpg/sqlite3/python/wget/openssl/zmq if they aren't installed - for dep in cmake boost python + brew tap jmuncaster/homebrew-header-only + for dep in cmake boost python libevent pkgconfig jmuncaster/header-only/cppzmq do if ! command_exists $dep ; then brew install $dep @@ -111,4 +112,4 @@ elif [[ $OSTYPE == linux-gnu || $OSTYPE == linux-gnueabihf ]]; then installUbuntu else unsupportedOS -fi \ No newline at end of file +fi diff --git a/lib/file-modification.py b/lib/file-modification.py index 102a9bd..c3718e0 100644 --- a/lib/file-modification.py +++ b/lib/file-modification.py @@ -1,8 +1,10 @@ import argparse import fileinput +import fnmatch import itertools import json import os +from stat import * import re import shutil import sys @@ -18,6 +20,8 @@ class bcolors: BOLD = '\033[1m' UNDERLINE = '\033[4m' +reload(sys) +sys.setdefaultencoding('utf8') def reverse_enumerate(iterable): """ @@ -25,6 +29,19 @@ def reverse_enumerate(iterable): """ return itertools.izip(reversed(xrange(len(iterable))), reversed(iterable)) +def findReplace(directory, find, replace, filePattern): + for path, dirs, files in os.walk(os.path.abspath(directory)): + for filename in fnmatch.filter(files, filePattern): + filepath = os.path.join(path, filename) + stats = os.stat(filepath) + if ".git" in filepath: + continue + with open(filepath) as f: + s = f.read() + s = s.decode('utf-8', errors='ignore').encode('utf-8').replace(find, replace) + with open(filepath, "w") as f: + f.write(s) + os.chmod(filepath, int(str(oct(stats.st_mode))[3:], 8)) def text_creator(change): replace_text = '' @@ -51,7 +68,7 @@ def text_creator(change): sys.__stdout__.write(bcolors.FAIL + "ERROR: variable is not in the config file - " + change['parameters']['var']+ bcolors.ENDC + "\n") sys.exit(2) else: - replace_text = '\n'.join(change['parameters']['text']) + "\n" + replace_text = '\n'.join(change['parameters']['text']) + "\n" # sys.__stdout__.write("Replace text: " + replace_text + "\n") return replace_text @@ -107,6 +124,16 @@ if not (set(required_extensions) <= set(loaded_extensions)): for file in extension['files']: + # Bulk replace text + if 'action' in file.keys() and file['action'] == 'bulk_replace': + if 'find' in file.keys() and 'replace' in file.keys() and 'file_pattern' in file.keys(): + sys.__stdout__.write("- Bulk replacing " + file['find'] + " with " + file['replace'] + "\n") + findReplace(args.source, file['find'], file['replace'], file['file_pattern']) + else: + sys.__stdout__.write(bcolors.FAIL + "ERROR: find, replace and file_pattern are mandatory with bulk_replace" + bcolors.ENDC + "\n") + exit(4) + continue + # Add new file to output source if 'action' in file.keys() and 'source' in file.keys() and file['action'] == 'add': source_path = os.path.dirname(os.path.realpath(args.extension_file)) + file['source'] @@ -118,6 +145,18 @@ for file in extension['files']: exit(4) continue + # Remove file from base repository + if 'action' in file.keys() and 'path' in file.keys() and file['action'] == 'remove': + path = args.source + file['path'] + if (os.path.isfile(path)): + sys.__stdout__.write("- Removing file " + path + "\n") + os.remove(path) + else: + sys.__stdout__.write(bcolors.FAIL + "ERROR: file does not exists - " + path + bcolors.ENDC + "\n") + exit(4) + continue + + # If multiline, get the whole file if 'multiline' in file.keys() and file['multiline'] == True: work_file = open(args.source + file['path'], 'r') @@ -202,14 +241,14 @@ for file in extension['files']: if change['marker'] in line: sys.__stdout__.write(" + Delete line at marker: " + change['marker'] + "\n") delete_line = True - if change['action'] == "add_bellow": + if change['action'] == "add_below": if change['marker'] in line: sys.__stdout__.write(" + Added text after marker: " + change['marker'] + "\n") replace_text = text_creator(change) if replace_text is not None: - add_after_line = replace_text + add_after_line = replace_text if delete_line != True: - sys.stdout.write(line) + sys.stdout.write(line) if add_after_line != "": sys.stdout.write(add_after_line)