From 457c64088b80b0e68a42f9a3681455ccc421fdc6 Mon Sep 17 00:00:00 2001 From: Richard Holland Date: Thu, 14 Sep 2023 12:19:43 +0000 Subject: [PATCH] governance L1 hook topic tests --- hook/govern.c | 28 +- hook/macro.h | 3 +- src/ripple/app/hook/xahau.h | 982 +++++++++++++++-------------- src/test/app/XahauGenesis_test.cpp | 270 +++++++- 4 files changed, 779 insertions(+), 504 deletions(-) diff --git a/hook/govern.c b/hook/govern.c index 3b7c2d9aa..2903595ab 100644 --- a/hook/govern.c +++ b/hook/govern.c @@ -512,20 +512,25 @@ int64_t hook(uint32_t r) // it exists // check if its identical uint8_t existing_hook[32]; - slot_subfield(7, sfHookHash, 8); - ASSERT(slot(SBUF(existing_hook), 8) == 32); + if (slot_subfield(7, sfHookHash, 8) == 8) + { + ASSERT(slot(SBUF(existing_hook), 8) == 32); - // if it is then do nothing - if (BUFFER_EQUAL_32(existing_hook, topic_data)) - DONE("Goverance: Target hook is already the same as actioned hook."); + // if it is then do nothing + if (BUFFER_EQUAL_32(existing_hook, topic_data)) + DONE("Goverance: Target hook is already the same as actioned hook."); + } } // generate the hook definition keylet - util_keylet(SBUF(keylet), KEYLET_HOOK_DEFINITION, topic_data, 32, 0,0,0,0); + if (!topic_data_zero) + { + util_keylet(SBUF(keylet), KEYLET_HOOK_DEFINITION, topic_data, 32, 0,0,0,0); - // check if the ledger contains such a hook definition - if (slot_set(SBUF(keylet), 9) != 9) - NOPE("Goverance: Hook Hash doesn't exist on ledger while actioning hook."); + // check if the ledger contains such a hook definition + if (slot_set(SBUF(keylet), 9) != 9) + NOPE("Goverance: Hook Hash doesn't exist on ledger while actioning hook."); + } // it does so now we can do the emit @@ -542,15 +547,18 @@ int64_t hook(uint32_t r) uint32_t emit_size = 0; PREPARE_HOOKSET(emit_buf, sizeof(emit_buf), h, emit_size); + trace(SBUF("EmittedTxn"), emit_buf, emit_size, 1); + uint8_t emithash[32]; int64_t emit_result = emit(SBUF(emithash), emit_buf, emit_size); if (DEBUG) TRACEVAR(emit_result); - if (emit_result != emit_size) + if (emit_result != 32) NOPE("Governance: Emit failed during hook actioning."); + trace(SBUF("EmittedTxnHash"), emithash, 32, 1); DONE("Governance: Hook actioned."); } diff --git a/hook/macro.h b/hook/macro.h index b7d7da3bb..cd8c9bae3 100644 --- a/hook/macro.h +++ b/hook/macro.h @@ -552,7 +552,8 @@ int out_len = 0;\ }\ else\ {\ - *buf_out++ = 0x1FU; /* HookHash */\ + *buf_out++ = 0x50U; /* HookHash */\ + *buf_out++ = 0x1FU;\ uint64_t* d = (uint64_t*)buf_out;\ uint64_t* s = (uint64_t*)hook0;\ *d++ = *s++;\ diff --git a/src/ripple/app/hook/xahau.h b/src/ripple/app/hook/xahau.h index 4182647ae..955bac24d 100644 --- a/src/ripple/app/hook/xahau.h +++ b/src/ripple/app/hook/xahau.h @@ -47,9 +47,9 @@ static const std::vector GovernanceHook = 0x62U,0x61U,0x72U,0x72U,0x61U,0x79U,0x00U,0x05U,0x03U,0x65U, 0x6EU,0x76U,0x04U,0x73U,0x6CU,0x6FU,0x74U,0x00U,0x05U,0x03U, 0x02U,0x01U,0x01U,0x05U,0x03U,0x01U,0x00U,0x02U,0x06U,0x08U, - 0x01U,0x7FU,0x01U,0x41U,0x90U,0x9AU,0x04U,0x0BU,0x07U,0x08U, - 0x01U,0x04U,0x68U,0x6FU,0x6FU,0x6BU,0x00U,0x16U,0x0AU,0xAAU, - 0xADU,0x00U,0x01U,0xA6U,0xADU,0x00U,0x03U,0x08U,0x7FU,0x05U, + 0x01U,0x7FU,0x01U,0x41U,0xB0U,0x9AU,0x04U,0x0BU,0x07U,0x08U, + 0x01U,0x04U,0x68U,0x6FU,0x6FU,0x6BU,0x00U,0x16U,0x0AU,0xDBU, + 0xADU,0x00U,0x01U,0xD7U,0xADU,0x00U,0x03U,0x08U,0x7FU,0x05U, 0x7EU,0x02U,0x7CU,0x23U,0x00U,0x41U,0xB0U,0x0AU,0x6BU,0x22U, 0x00U,0x24U,0x00U,0x41U,0x01U,0x41U,0x01U,0x10U,0x00U,0x1AU, 0x41U,0x01U,0x10U,0x01U,0x1AU,0x20U,0x00U,0x41U,0x80U,0x01U, @@ -351,515 +351,522 @@ static const std::vector GovernanceHook = 0x41U,0x06U,0x10U,0x13U,0x1AU,0x41U,0x06U,0x20U,0x00U,0x2DU, 0x00U,0xEDU,0x09U,0x41U,0x07U,0x10U,0x14U,0x42U,0x07U,0x51U, 0x04U,0x40U,0x02U,0x40U,0x41U,0x07U,0x41U,0x9FU,0x80U,0x14U, - 0x41U,0x08U,0x10U,0x13U,0x1AU,0x20U,0x00U,0x41U,0x80U,0x01U, - 0x6AU,0x41U,0x20U,0x41U,0x08U,0x10U,0x15U,0x42U,0x20U,0x52U, - 0x04U,0x40U,0x41U,0x81U,0x0AU,0x41U,0x1AU,0x42U,0x84U,0x04U, - 0x10U,0x0BU,0x1AU,0x0BU,0x20U,0x00U,0x29U,0x03U,0x80U,0x01U, - 0x20U,0x00U,0x29U,0x03U,0xB0U,0x09U,0x52U,0x20U,0x00U,0x29U, - 0x03U,0x88U,0x01U,0x20U,0x00U,0x29U,0x03U,0xB8U,0x09U,0x52U, - 0x72U,0x20U,0x00U,0x29U,0x03U,0x90U,0x01U,0x20U,0x00U,0x29U, - 0x03U,0xC0U,0x09U,0x52U,0x20U,0x00U,0x29U,0x03U,0x98U,0x01U, - 0x20U,0x00U,0x29U,0x03U,0xC8U,0x09U,0x52U,0x72U,0x72U,0x0DU, - 0x00U,0x41U,0xA4U,0x16U,0x41U,0x3DU,0x42U,0x88U,0x04U,0x10U, - 0x05U,0x1AU,0x0BU,0x0BU,0x20U,0x00U,0x41U,0xD0U,0x00U,0x6AU, - 0x22U,0x01U,0x41U,0x22U,0x41U,0x18U,0x20U,0x00U,0x41U,0xB0U, - 0x09U,0x6AU,0x41U,0x20U,0x41U,0x00U,0x41U,0x00U,0x41U,0x00U, - 0x41U,0x00U,0x10U,0x11U,0x1AU,0x20U,0x01U,0x41U,0x22U,0x41U, - 0x09U,0x10U,0x12U,0x42U,0x09U,0x52U,0x04U,0x40U,0x41U,0xE1U, - 0x16U,0x41U,0xC3U,0x00U,0x42U,0x90U,0x04U,0x10U,0x0BU,0x1AU, - 0x0BU,0x20U,0x00U,0x41U,0x20U,0x6AU,0x20U,0x00U,0x2DU,0x00U, - 0xEDU,0x09U,0x41U,0x02U,0x74U,0x6AU,0x41U,0x7FU,0x20U,0x00U, - 0x41U,0xB0U,0x09U,0x6AU,0x20U,0x06U,0x1BU,0x36U,0x02U,0x00U, - 0x10U,0x0DU,0x21U,0x09U,0x20U,0x00U,0x41U,0x14U,0x10U,0x07U, - 0x1AU,0x20U,0x00U,0x41U,0x9EU,0x01U,0x6AU,0x42U,0x80U,0x80U, - 0x80U,0x80U,0xB0U,0x8EU,0xC0U,0xC0U,0x14U,0x37U,0x00U,0x00U, - 0x20U,0x00U,0x41U,0xE8U,0x80U,0x01U,0x3BU,0x00U,0x99U,0x01U, - 0x20U,0x00U,0x41U,0xA0U,0x36U,0x3BU,0x00U,0x93U,0x01U,0x20U, - 0x00U,0x41U,0xA0U,0x34U,0x3BU,0x00U,0x8DU,0x01U,0x20U,0x00U, - 0x41U,0x00U,0x36U,0x00U,0x89U,0x01U,0x20U,0x00U,0x41U,0x24U, - 0x3AU,0x00U,0x88U,0x01U,0x20U,0x00U,0x42U,0x92U,0x80U,0xD8U, - 0x90U,0x82U,0x10U,0x37U,0x03U,0x80U,0x01U,0x20U,0x00U,0x41U, - 0x00U,0x36U,0x00U,0x9BU,0x01U,0x20U,0x00U,0x20U,0x09U,0xA7U, - 0x22U,0x02U,0x41U,0x05U,0x6AU,0x22U,0x01U,0x3AU,0x00U,0x98U, - 0x01U,0x20U,0x00U,0x20U,0x01U,0x41U,0x08U,0x76U,0x3AU,0x00U, - 0x97U,0x01U,0x20U,0x00U,0x20U,0x01U,0x41U,0x10U,0x76U,0x3AU, - 0x00U,0x96U,0x01U,0x20U,0x00U,0x20U,0x01U,0x41U,0x18U,0x76U, - 0x3AU,0x00U,0x95U,0x01U,0x20U,0x00U,0x20U,0x02U,0x41U,0x01U, - 0x6AU,0x22U,0x01U,0x3AU,0x00U,0x92U,0x01U,0x20U,0x00U,0x20U, - 0x01U,0x41U,0x08U,0x76U,0x3AU,0x00U,0x91U,0x01U,0x20U,0x00U, - 0x20U,0x01U,0x41U,0x10U,0x76U,0x3AU,0x00U,0x90U,0x01U,0x20U, - 0x00U,0x20U,0x01U,0x41U,0x18U,0x76U,0x3AU,0x00U,0x8FU,0x01U, - 0x20U,0x00U,0x20U,0x00U,0x29U,0x03U,0x00U,0x37U,0x03U,0xA6U, - 0x01U,0x20U,0x00U,0x20U,0x00U,0x29U,0x03U,0x08U,0x37U,0x03U, - 0xAEU,0x01U,0x20U,0x00U,0x20U,0x00U,0x28U,0x02U,0x10U,0x36U, - 0x02U,0xB6U,0x01U,0x20U,0x00U,0x41U,0xBAU,0x01U,0x6AU,0x22U, - 0x01U,0x41U,0xC6U,0x07U,0x10U,0x0EU,0xA7U,0x20U,0x01U,0x6AU, - 0x22U,0x01U,0x41U,0xFBU,0xDDU,0x03U,0x3BU,0x00U,0x00U,0x20U, - 0x01U,0x41U,0x02U,0x6AU,0x21U,0x01U,0x20U,0x00U,0x28U,0x02U, - 0x20U,0x22U,0x02U,0x04U,0x40U,0x20U,0x01U,0x41U,0x22U,0x36U, - 0x00U,0x00U,0x20U,0x01U,0x41U,0x04U,0x6AU,0x41U,0x01U,0x3AU, - 0x00U,0x00U,0x20U,0x01U,0x41U,0x06U,0x6AU,0x21U,0x03U,0x20U, - 0x01U,0x41U,0x05U,0x6AU,0x21U,0x01U,0x20U,0x02U,0x41U,0x7FU, - 0x47U,0x04U,0x7FU,0x20U,0x01U,0x41U,0x1FU,0x3AU,0x00U,0x00U, - 0x20U,0x01U,0x20U,0x02U,0x29U,0x03U,0x00U,0x37U,0x03U,0x01U, - 0x20U,0x01U,0x20U,0x02U,0x29U,0x03U,0x08U,0x37U,0x03U,0x09U, - 0x20U,0x01U,0x20U,0x02U,0x29U,0x03U,0x10U,0x37U,0x03U,0x11U, - 0x20U,0x01U,0x20U,0x02U,0x29U,0x03U,0x18U,0x37U,0x03U,0x19U, - 0x20U,0x03U,0x41U,0x20U,0x6AU,0x05U,0x20U,0x01U,0x41U,0xFBU, - 0x00U,0x3BU,0x00U,0x00U,0x20U,0x03U,0x41U,0x01U,0x6AU,0x0BU, - 0x21U,0x01U,0x0BU,0x20U,0x01U,0x41U,0xE1U,0x01U,0x3AU,0x00U, - 0x00U,0x20U,0x00U,0x28U,0x02U,0x24U,0x21U,0x02U,0x20U,0x01U, - 0x41U,0xEEU,0x01U,0x3AU,0x00U,0x01U,0x20U,0x02U,0x04U,0x7FU, - 0x20U,0x01U,0x41U,0x01U,0x3AU,0x00U,0x06U,0x20U,0x01U,0x41U, - 0x22U,0x36U,0x00U,0x02U,0x20U,0x02U,0x41U,0x7FU,0x47U,0x04U, - 0x7FU,0x20U,0x01U,0x41U,0x1FU,0x3AU,0x00U,0x07U,0x20U,0x01U, - 0x20U,0x02U,0x29U,0x03U,0x00U,0x37U,0x03U,0x08U,0x20U,0x01U, - 0x20U,0x02U,0x29U,0x03U,0x08U,0x37U,0x03U,0x10U,0x20U,0x01U, - 0x20U,0x02U,0x29U,0x03U,0x10U,0x37U,0x03U,0x18U,0x20U,0x01U, - 0x20U,0x02U,0x29U,0x03U,0x18U,0x37U,0x03U,0x20U,0x20U,0x01U, - 0x41U,0x28U,0x6AU,0x05U,0x20U,0x01U,0x41U,0xFBU,0x00U,0x3BU, - 0x00U,0x07U,0x20U,0x01U,0x41U,0x09U,0x6AU,0x0BU,0x05U,0x20U, - 0x01U,0x41U,0x02U,0x6AU,0x0BU,0x22U,0x01U,0x41U,0xE1U,0x01U, - 0x3AU,0x00U,0x00U,0x20U,0x00U,0x28U,0x02U,0x28U,0x21U,0x02U, - 0x20U,0x01U,0x41U,0xEEU,0x01U,0x3AU,0x00U,0x01U,0x20U,0x02U, - 0x04U,0x7FU,0x20U,0x01U,0x41U,0x01U,0x3AU,0x00U,0x06U,0x20U, - 0x01U,0x41U,0x22U,0x36U,0x00U,0x02U,0x20U,0x02U,0x41U,0x7FU, - 0x47U,0x04U,0x7FU,0x20U,0x01U,0x41U,0x1FU,0x3AU,0x00U,0x07U, - 0x20U,0x01U,0x20U,0x02U,0x29U,0x03U,0x00U,0x37U,0x03U,0x08U, - 0x20U,0x01U,0x20U,0x02U,0x29U,0x03U,0x08U,0x37U,0x03U,0x10U, - 0x20U,0x01U,0x20U,0x02U,0x29U,0x03U,0x10U,0x37U,0x03U,0x18U, - 0x20U,0x01U,0x20U,0x02U,0x29U,0x03U,0x18U,0x37U,0x03U,0x20U, - 0x20U,0x01U,0x41U,0x28U,0x6AU,0x05U,0x20U,0x01U,0x41U,0xFBU, - 0x00U,0x3BU,0x00U,0x07U,0x20U,0x01U,0x41U,0x09U,0x6AU,0x0BU, - 0x05U,0x20U,0x01U,0x41U,0x02U,0x6AU,0x0BU,0x22U,0x01U,0x41U, - 0xE1U,0x01U,0x3AU,0x00U,0x00U,0x20U,0x00U,0x28U,0x02U,0x2CU, - 0x21U,0x02U,0x20U,0x01U,0x41U,0xEEU,0x01U,0x3AU,0x00U,0x01U, - 0x20U,0x02U,0x04U,0x7FU,0x20U,0x01U,0x41U,0x01U,0x3AU,0x00U, - 0x06U,0x20U,0x01U,0x41U,0x22U,0x36U,0x00U,0x02U,0x20U,0x02U, - 0x41U,0x7FU,0x47U,0x04U,0x7FU,0x20U,0x01U,0x41U,0x1FU,0x3AU, + 0x41U,0x08U,0x10U,0x13U,0x42U,0x08U,0x52U,0x0DU,0x00U,0x20U, + 0x00U,0x41U,0x80U,0x01U,0x6AU,0x41U,0x20U,0x41U,0x08U,0x10U, + 0x15U,0x42U,0x20U,0x52U,0x04U,0x40U,0x41U,0x81U,0x0AU,0x41U, + 0x1AU,0x42U,0x85U,0x04U,0x10U,0x0BU,0x1AU,0x0BU,0x20U,0x00U, + 0x29U,0x03U,0x80U,0x01U,0x20U,0x00U,0x29U,0x03U,0xB0U,0x09U, + 0x52U,0x20U,0x00U,0x29U,0x03U,0x88U,0x01U,0x20U,0x00U,0x29U, + 0x03U,0xB8U,0x09U,0x52U,0x72U,0x20U,0x00U,0x29U,0x03U,0x90U, + 0x01U,0x20U,0x00U,0x29U,0x03U,0xC0U,0x09U,0x52U,0x20U,0x00U, + 0x29U,0x03U,0x98U,0x01U,0x20U,0x00U,0x29U,0x03U,0xC8U,0x09U, + 0x52U,0x72U,0x72U,0x0DU,0x00U,0x41U,0xA4U,0x16U,0x41U,0x3DU, + 0x42U,0x89U,0x04U,0x10U,0x05U,0x1AU,0x0BU,0x0BU,0x20U,0x06U, + 0x45U,0x04U,0x40U,0x02U,0x40U,0x20U,0x00U,0x41U,0xD0U,0x00U, + 0x6AU,0x22U,0x01U,0x41U,0x22U,0x41U,0x18U,0x20U,0x00U,0x41U, + 0xB0U,0x09U,0x6AU,0x41U,0x20U,0x41U,0x00U,0x41U,0x00U,0x41U, + 0x00U,0x41U,0x00U,0x10U,0x11U,0x1AU,0x20U,0x01U,0x41U,0x22U, + 0x41U,0x09U,0x10U,0x12U,0x42U,0x09U,0x51U,0x0DU,0x00U,0x41U, + 0xE1U,0x16U,0x41U,0xC3U,0x00U,0x42U,0x94U,0x04U,0x10U,0x0BU, + 0x1AU,0x0BU,0x0BU,0x20U,0x00U,0x41U,0x20U,0x6AU,0x20U,0x00U, + 0x2DU,0x00U,0xEDU,0x09U,0x41U,0x02U,0x74U,0x6AU,0x41U,0x7FU, + 0x20U,0x00U,0x41U,0xB0U,0x09U,0x6AU,0x20U,0x06U,0x1BU,0x36U, + 0x02U,0x00U,0x10U,0x0DU,0x21U,0x09U,0x20U,0x00U,0x41U,0x14U, + 0x10U,0x07U,0x1AU,0x20U,0x00U,0x41U,0x9EU,0x01U,0x6AU,0x42U, + 0x80U,0x80U,0x80U,0x80U,0xB0U,0x8EU,0xC0U,0xC0U,0x14U,0x37U, + 0x00U,0x00U,0x20U,0x00U,0x41U,0xE8U,0x80U,0x01U,0x3BU,0x00U, + 0x99U,0x01U,0x20U,0x00U,0x41U,0xA0U,0x36U,0x3BU,0x00U,0x93U, + 0x01U,0x20U,0x00U,0x41U,0xA0U,0x34U,0x3BU,0x00U,0x8DU,0x01U, + 0x20U,0x00U,0x41U,0x00U,0x36U,0x00U,0x89U,0x01U,0x20U,0x00U, + 0x41U,0x24U,0x3AU,0x00U,0x88U,0x01U,0x20U,0x00U,0x42U,0x92U, + 0x80U,0xD8U,0x90U,0x82U,0x10U,0x37U,0x03U,0x80U,0x01U,0x20U, + 0x00U,0x41U,0x00U,0x36U,0x00U,0x9BU,0x01U,0x20U,0x00U,0x20U, + 0x09U,0xA7U,0x22U,0x02U,0x41U,0x05U,0x6AU,0x22U,0x01U,0x3AU, + 0x00U,0x98U,0x01U,0x20U,0x00U,0x20U,0x01U,0x41U,0x08U,0x76U, + 0x3AU,0x00U,0x97U,0x01U,0x20U,0x00U,0x20U,0x01U,0x41U,0x10U, + 0x76U,0x3AU,0x00U,0x96U,0x01U,0x20U,0x00U,0x20U,0x01U,0x41U, + 0x18U,0x76U,0x3AU,0x00U,0x95U,0x01U,0x20U,0x00U,0x20U,0x02U, + 0x41U,0x01U,0x6AU,0x22U,0x01U,0x3AU,0x00U,0x92U,0x01U,0x20U, + 0x00U,0x20U,0x01U,0x41U,0x08U,0x76U,0x3AU,0x00U,0x91U,0x01U, + 0x20U,0x00U,0x20U,0x01U,0x41U,0x10U,0x76U,0x3AU,0x00U,0x90U, + 0x01U,0x20U,0x00U,0x20U,0x01U,0x41U,0x18U,0x76U,0x3AU,0x00U, + 0x8FU,0x01U,0x20U,0x00U,0x20U,0x00U,0x29U,0x03U,0x00U,0x37U, + 0x03U,0xA6U,0x01U,0x20U,0x00U,0x20U,0x00U,0x29U,0x03U,0x08U, + 0x37U,0x03U,0xAEU,0x01U,0x20U,0x00U,0x20U,0x00U,0x28U,0x02U, + 0x10U,0x36U,0x02U,0xB6U,0x01U,0x20U,0x00U,0x41U,0xBAU,0x01U, + 0x6AU,0x22U,0x01U,0x41U,0xC6U,0x07U,0x10U,0x0EU,0xA7U,0x20U, + 0x01U,0x6AU,0x22U,0x01U,0x41U,0xFBU,0xDDU,0x03U,0x3BU,0x00U, + 0x00U,0x20U,0x01U,0x41U,0x02U,0x6AU,0x21U,0x01U,0x20U,0x00U, + 0x28U,0x02U,0x20U,0x22U,0x02U,0x04U,0x40U,0x20U,0x01U,0x41U, + 0x22U,0x36U,0x00U,0x00U,0x20U,0x01U,0x41U,0x04U,0x6AU,0x41U, + 0x01U,0x3AU,0x00U,0x00U,0x20U,0x01U,0x41U,0x06U,0x6AU,0x21U, + 0x03U,0x20U,0x01U,0x41U,0x05U,0x6AU,0x21U,0x01U,0x20U,0x02U, + 0x41U,0x7FU,0x47U,0x04U,0x7FU,0x20U,0x01U,0x41U,0xD0U,0x3EU, + 0x3BU,0x00U,0x00U,0x20U,0x01U,0x20U,0x02U,0x29U,0x03U,0x00U, + 0x37U,0x03U,0x02U,0x20U,0x01U,0x20U,0x02U,0x29U,0x03U,0x08U, + 0x37U,0x03U,0x0AU,0x20U,0x01U,0x20U,0x02U,0x29U,0x03U,0x10U, + 0x37U,0x03U,0x12U,0x20U,0x01U,0x20U,0x02U,0x29U,0x03U,0x18U, + 0x37U,0x03U,0x1AU,0x20U,0x03U,0x41U,0x21U,0x6AU,0x05U,0x20U, + 0x01U,0x41U,0xFBU,0x00U,0x3BU,0x00U,0x00U,0x20U,0x03U,0x41U, + 0x01U,0x6AU,0x0BU,0x21U,0x01U,0x0BU,0x20U,0x01U,0x41U,0xE1U, + 0x01U,0x3AU,0x00U,0x00U,0x20U,0x00U,0x28U,0x02U,0x24U,0x21U, + 0x02U,0x20U,0x01U,0x41U,0xEEU,0x01U,0x3AU,0x00U,0x01U,0x20U, + 0x02U,0x04U,0x7FU,0x20U,0x01U,0x41U,0x01U,0x3AU,0x00U,0x06U, + 0x20U,0x01U,0x41U,0x22U,0x36U,0x00U,0x02U,0x20U,0x02U,0x41U, + 0x7FU,0x47U,0x04U,0x7FU,0x20U,0x01U,0x41U,0xD0U,0x3EU,0x3BU, 0x00U,0x07U,0x20U,0x01U,0x20U,0x02U,0x29U,0x03U,0x00U,0x37U, - 0x03U,0x08U,0x20U,0x01U,0x20U,0x02U,0x29U,0x03U,0x08U,0x37U, - 0x03U,0x10U,0x20U,0x01U,0x20U,0x02U,0x29U,0x03U,0x10U,0x37U, - 0x03U,0x18U,0x20U,0x01U,0x20U,0x02U,0x29U,0x03U,0x18U,0x37U, - 0x03U,0x20U,0x20U,0x01U,0x41U,0x28U,0x6AU,0x05U,0x20U,0x01U, + 0x03U,0x09U,0x20U,0x01U,0x20U,0x02U,0x29U,0x03U,0x08U,0x37U, + 0x03U,0x11U,0x20U,0x01U,0x20U,0x02U,0x29U,0x03U,0x10U,0x37U, + 0x03U,0x19U,0x20U,0x01U,0x20U,0x02U,0x29U,0x03U,0x18U,0x37U, + 0x03U,0x21U,0x20U,0x01U,0x41U,0x29U,0x6AU,0x05U,0x20U,0x01U, 0x41U,0xFBU,0x00U,0x3BU,0x00U,0x07U,0x20U,0x01U,0x41U,0x09U, 0x6AU,0x0BU,0x05U,0x20U,0x01U,0x41U,0x02U,0x6AU,0x0BU,0x22U, 0x01U,0x41U,0xE1U,0x01U,0x3AU,0x00U,0x00U,0x20U,0x00U,0x28U, - 0x02U,0x30U,0x21U,0x02U,0x20U,0x01U,0x41U,0xEEU,0x01U,0x3AU, + 0x02U,0x28U,0x21U,0x02U,0x20U,0x01U,0x41U,0xEEU,0x01U,0x3AU, 0x00U,0x01U,0x20U,0x02U,0x04U,0x7FU,0x20U,0x01U,0x41U,0x01U, 0x3AU,0x00U,0x06U,0x20U,0x01U,0x41U,0x22U,0x36U,0x00U,0x02U, 0x20U,0x02U,0x41U,0x7FU,0x47U,0x04U,0x7FU,0x20U,0x01U,0x41U, - 0x1FU,0x3AU,0x00U,0x07U,0x20U,0x01U,0x20U,0x02U,0x29U,0x03U, - 0x00U,0x37U,0x03U,0x08U,0x20U,0x01U,0x20U,0x02U,0x29U,0x03U, - 0x08U,0x37U,0x03U,0x10U,0x20U,0x01U,0x20U,0x02U,0x29U,0x03U, - 0x10U,0x37U,0x03U,0x18U,0x20U,0x01U,0x20U,0x02U,0x29U,0x03U, - 0x18U,0x37U,0x03U,0x20U,0x20U,0x01U,0x41U,0x28U,0x6AU,0x05U, - 0x20U,0x01U,0x41U,0xFBU,0x00U,0x3BU,0x00U,0x07U,0x20U,0x01U, - 0x41U,0x09U,0x6AU,0x0BU,0x05U,0x20U,0x01U,0x41U,0x02U,0x6AU, - 0x0BU,0x22U,0x01U,0x41U,0xE1U,0x01U,0x3AU,0x00U,0x00U,0x20U, - 0x00U,0x28U,0x02U,0x34U,0x21U,0x02U,0x20U,0x01U,0x41U,0xEEU, - 0x01U,0x3AU,0x00U,0x01U,0x20U,0x02U,0x04U,0x7FU,0x20U,0x01U, - 0x41U,0x01U,0x3AU,0x00U,0x06U,0x20U,0x01U,0x41U,0x22U,0x36U, - 0x00U,0x02U,0x20U,0x02U,0x41U,0x7FU,0x47U,0x04U,0x7FU,0x20U, - 0x01U,0x41U,0x1FU,0x3AU,0x00U,0x07U,0x20U,0x01U,0x20U,0x02U, - 0x29U,0x03U,0x00U,0x37U,0x03U,0x08U,0x20U,0x01U,0x20U,0x02U, - 0x29U,0x03U,0x08U,0x37U,0x03U,0x10U,0x20U,0x01U,0x20U,0x02U, - 0x29U,0x03U,0x10U,0x37U,0x03U,0x18U,0x20U,0x01U,0x20U,0x02U, - 0x29U,0x03U,0x18U,0x37U,0x03U,0x20U,0x20U,0x01U,0x41U,0x28U, - 0x6AU,0x05U,0x20U,0x01U,0x41U,0xFBU,0x00U,0x3BU,0x00U,0x07U, - 0x20U,0x01U,0x41U,0x09U,0x6AU,0x0BU,0x05U,0x20U,0x01U,0x41U, - 0x02U,0x6AU,0x0BU,0x22U,0x01U,0x41U,0xE1U,0x01U,0x3AU,0x00U, - 0x00U,0x20U,0x00U,0x28U,0x02U,0x38U,0x21U,0x02U,0x20U,0x01U, - 0x41U,0xEEU,0x01U,0x3AU,0x00U,0x01U,0x20U,0x02U,0x04U,0x7FU, - 0x20U,0x01U,0x41U,0x01U,0x3AU,0x00U,0x06U,0x20U,0x01U,0x41U, - 0x22U,0x36U,0x00U,0x02U,0x20U,0x02U,0x41U,0x7FU,0x47U,0x04U, - 0x7FU,0x20U,0x01U,0x41U,0x1FU,0x3AU,0x00U,0x07U,0x20U,0x01U, - 0x20U,0x02U,0x29U,0x03U,0x00U,0x37U,0x03U,0x08U,0x20U,0x01U, - 0x20U,0x02U,0x29U,0x03U,0x08U,0x37U,0x03U,0x10U,0x20U,0x01U, - 0x20U,0x02U,0x29U,0x03U,0x10U,0x37U,0x03U,0x18U,0x20U,0x01U, - 0x20U,0x02U,0x29U,0x03U,0x18U,0x37U,0x03U,0x20U,0x20U,0x01U, - 0x41U,0x28U,0x6AU,0x05U,0x20U,0x01U,0x41U,0xFBU,0x00U,0x3BU, + 0xD0U,0x3EU,0x3BU,0x00U,0x07U,0x20U,0x01U,0x20U,0x02U,0x29U, + 0x03U,0x00U,0x37U,0x03U,0x09U,0x20U,0x01U,0x20U,0x02U,0x29U, + 0x03U,0x08U,0x37U,0x03U,0x11U,0x20U,0x01U,0x20U,0x02U,0x29U, + 0x03U,0x10U,0x37U,0x03U,0x19U,0x20U,0x01U,0x20U,0x02U,0x29U, + 0x03U,0x18U,0x37U,0x03U,0x21U,0x20U,0x01U,0x41U,0x29U,0x6AU, + 0x05U,0x20U,0x01U,0x41U,0xFBU,0x00U,0x3BU,0x00U,0x07U,0x20U, + 0x01U,0x41U,0x09U,0x6AU,0x0BU,0x05U,0x20U,0x01U,0x41U,0x02U, + 0x6AU,0x0BU,0x22U,0x01U,0x41U,0xE1U,0x01U,0x3AU,0x00U,0x00U, + 0x20U,0x00U,0x28U,0x02U,0x2CU,0x21U,0x02U,0x20U,0x01U,0x41U, + 0xEEU,0x01U,0x3AU,0x00U,0x01U,0x20U,0x02U,0x04U,0x7FU,0x20U, + 0x01U,0x41U,0x01U,0x3AU,0x00U,0x06U,0x20U,0x01U,0x41U,0x22U, + 0x36U,0x00U,0x02U,0x20U,0x02U,0x41U,0x7FU,0x47U,0x04U,0x7FU, + 0x20U,0x01U,0x41U,0xD0U,0x3EU,0x3BU,0x00U,0x07U,0x20U,0x01U, + 0x20U,0x02U,0x29U,0x03U,0x00U,0x37U,0x03U,0x09U,0x20U,0x01U, + 0x20U,0x02U,0x29U,0x03U,0x08U,0x37U,0x03U,0x11U,0x20U,0x01U, + 0x20U,0x02U,0x29U,0x03U,0x10U,0x37U,0x03U,0x19U,0x20U,0x01U, + 0x20U,0x02U,0x29U,0x03U,0x18U,0x37U,0x03U,0x21U,0x20U,0x01U, + 0x41U,0x29U,0x6AU,0x05U,0x20U,0x01U,0x41U,0xFBU,0x00U,0x3BU, 0x00U,0x07U,0x20U,0x01U,0x41U,0x09U,0x6AU,0x0BU,0x05U,0x20U, 0x01U,0x41U,0x02U,0x6AU,0x0BU,0x22U,0x01U,0x41U,0xE1U,0x01U, - 0x3AU,0x00U,0x00U,0x20U,0x00U,0x28U,0x02U,0x3CU,0x21U,0x02U, + 0x3AU,0x00U,0x00U,0x20U,0x00U,0x28U,0x02U,0x30U,0x21U,0x02U, 0x20U,0x01U,0x41U,0xEEU,0x01U,0x3AU,0x00U,0x01U,0x20U,0x02U, 0x04U,0x7FU,0x20U,0x01U,0x41U,0x01U,0x3AU,0x00U,0x06U,0x20U, 0x01U,0x41U,0x22U,0x36U,0x00U,0x02U,0x20U,0x02U,0x41U,0x7FU, - 0x47U,0x04U,0x7FU,0x20U,0x01U,0x41U,0x1FU,0x3AU,0x00U,0x07U, - 0x20U,0x01U,0x20U,0x02U,0x29U,0x03U,0x00U,0x37U,0x03U,0x08U, - 0x20U,0x01U,0x20U,0x02U,0x29U,0x03U,0x08U,0x37U,0x03U,0x10U, - 0x20U,0x01U,0x20U,0x02U,0x29U,0x03U,0x10U,0x37U,0x03U,0x18U, - 0x20U,0x01U,0x20U,0x02U,0x29U,0x03U,0x18U,0x37U,0x03U,0x20U, - 0x20U,0x01U,0x41U,0x28U,0x6AU,0x05U,0x20U,0x01U,0x41U,0xFBU, + 0x47U,0x04U,0x7FU,0x20U,0x01U,0x41U,0xD0U,0x3EU,0x3BU,0x00U, + 0x07U,0x20U,0x01U,0x20U,0x02U,0x29U,0x03U,0x00U,0x37U,0x03U, + 0x09U,0x20U,0x01U,0x20U,0x02U,0x29U,0x03U,0x08U,0x37U,0x03U, + 0x11U,0x20U,0x01U,0x20U,0x02U,0x29U,0x03U,0x10U,0x37U,0x03U, + 0x19U,0x20U,0x01U,0x20U,0x02U,0x29U,0x03U,0x18U,0x37U,0x03U, + 0x21U,0x20U,0x01U,0x41U,0x29U,0x6AU,0x05U,0x20U,0x01U,0x41U, + 0xFBU,0x00U,0x3BU,0x00U,0x07U,0x20U,0x01U,0x41U,0x09U,0x6AU, + 0x0BU,0x05U,0x20U,0x01U,0x41U,0x02U,0x6AU,0x0BU,0x22U,0x01U, + 0x41U,0xE1U,0x01U,0x3AU,0x00U,0x00U,0x20U,0x00U,0x28U,0x02U, + 0x34U,0x21U,0x02U,0x20U,0x01U,0x41U,0xEEU,0x01U,0x3AU,0x00U, + 0x01U,0x20U,0x02U,0x04U,0x7FU,0x20U,0x01U,0x41U,0x01U,0x3AU, + 0x00U,0x06U,0x20U,0x01U,0x41U,0x22U,0x36U,0x00U,0x02U,0x20U, + 0x02U,0x41U,0x7FU,0x47U,0x04U,0x7FU,0x20U,0x01U,0x41U,0xD0U, + 0x3EU,0x3BU,0x00U,0x07U,0x20U,0x01U,0x20U,0x02U,0x29U,0x03U, + 0x00U,0x37U,0x03U,0x09U,0x20U,0x01U,0x20U,0x02U,0x29U,0x03U, + 0x08U,0x37U,0x03U,0x11U,0x20U,0x01U,0x20U,0x02U,0x29U,0x03U, + 0x10U,0x37U,0x03U,0x19U,0x20U,0x01U,0x20U,0x02U,0x29U,0x03U, + 0x18U,0x37U,0x03U,0x21U,0x20U,0x01U,0x41U,0x29U,0x6AU,0x05U, + 0x20U,0x01U,0x41U,0xFBU,0x00U,0x3BU,0x00U,0x07U,0x20U,0x01U, + 0x41U,0x09U,0x6AU,0x0BU,0x05U,0x20U,0x01U,0x41U,0x02U,0x6AU, + 0x0BU,0x22U,0x01U,0x41U,0xE1U,0x01U,0x3AU,0x00U,0x00U,0x20U, + 0x00U,0x28U,0x02U,0x38U,0x21U,0x02U,0x20U,0x01U,0x41U,0xEEU, + 0x01U,0x3AU,0x00U,0x01U,0x20U,0x02U,0x04U,0x7FU,0x20U,0x01U, + 0x41U,0x01U,0x3AU,0x00U,0x06U,0x20U,0x01U,0x41U,0x22U,0x36U, + 0x00U,0x02U,0x20U,0x02U,0x41U,0x7FU,0x47U,0x04U,0x7FU,0x20U, + 0x01U,0x41U,0xD0U,0x3EU,0x3BU,0x00U,0x07U,0x20U,0x01U,0x20U, + 0x02U,0x29U,0x03U,0x00U,0x37U,0x03U,0x09U,0x20U,0x01U,0x20U, + 0x02U,0x29U,0x03U,0x08U,0x37U,0x03U,0x11U,0x20U,0x01U,0x20U, + 0x02U,0x29U,0x03U,0x10U,0x37U,0x03U,0x19U,0x20U,0x01U,0x20U, + 0x02U,0x29U,0x03U,0x18U,0x37U,0x03U,0x21U,0x20U,0x01U,0x41U, + 0x29U,0x6AU,0x05U,0x20U,0x01U,0x41U,0xFBU,0x00U,0x3BU,0x00U, + 0x07U,0x20U,0x01U,0x41U,0x09U,0x6AU,0x0BU,0x05U,0x20U,0x01U, + 0x41U,0x02U,0x6AU,0x0BU,0x22U,0x01U,0x41U,0xE1U,0x01U,0x3AU, + 0x00U,0x00U,0x20U,0x00U,0x28U,0x02U,0x3CU,0x21U,0x02U,0x20U, + 0x01U,0x41U,0xEEU,0x01U,0x3AU,0x00U,0x01U,0x20U,0x02U,0x04U, + 0x7FU,0x20U,0x01U,0x41U,0x01U,0x3AU,0x00U,0x06U,0x20U,0x01U, + 0x41U,0x22U,0x36U,0x00U,0x02U,0x20U,0x02U,0x41U,0x7FU,0x47U, + 0x04U,0x7FU,0x20U,0x01U,0x41U,0xD0U,0x3EU,0x3BU,0x00U,0x07U, + 0x20U,0x01U,0x20U,0x02U,0x29U,0x03U,0x00U,0x37U,0x03U,0x09U, + 0x20U,0x01U,0x20U,0x02U,0x29U,0x03U,0x08U,0x37U,0x03U,0x11U, + 0x20U,0x01U,0x20U,0x02U,0x29U,0x03U,0x10U,0x37U,0x03U,0x19U, + 0x20U,0x01U,0x20U,0x02U,0x29U,0x03U,0x18U,0x37U,0x03U,0x21U, + 0x20U,0x01U,0x41U,0x29U,0x6AU,0x05U,0x20U,0x01U,0x41U,0xFBU, 0x00U,0x3BU,0x00U,0x07U,0x20U,0x01U,0x41U,0x09U,0x6AU,0x0BU, 0x05U,0x20U,0x01U,0x41U,0x02U,0x6AU,0x0BU,0x22U,0x01U,0x41U, 0xE1U,0x01U,0x3AU,0x00U,0x00U,0x20U,0x00U,0x28U,0x02U,0x40U, 0x21U,0x02U,0x20U,0x01U,0x41U,0xEEU,0x01U,0x3AU,0x00U,0x01U, 0x20U,0x02U,0x04U,0x7FU,0x20U,0x01U,0x41U,0x01U,0x3AU,0x00U, 0x06U,0x20U,0x01U,0x41U,0x22U,0x36U,0x00U,0x02U,0x20U,0x02U, - 0x41U,0x7FU,0x47U,0x04U,0x7FU,0x20U,0x01U,0x41U,0x1FU,0x3AU, - 0x00U,0x07U,0x20U,0x01U,0x20U,0x02U,0x29U,0x03U,0x00U,0x37U, - 0x03U,0x08U,0x20U,0x01U,0x20U,0x02U,0x29U,0x03U,0x08U,0x37U, - 0x03U,0x10U,0x20U,0x01U,0x20U,0x02U,0x29U,0x03U,0x10U,0x37U, - 0x03U,0x18U,0x20U,0x01U,0x20U,0x02U,0x29U,0x03U,0x18U,0x37U, - 0x03U,0x20U,0x20U,0x01U,0x41U,0x28U,0x6AU,0x05U,0x20U,0x01U, - 0x41U,0xFBU,0x00U,0x3BU,0x00U,0x07U,0x20U,0x01U,0x41U,0x09U, - 0x6AU,0x0BU,0x05U,0x20U,0x01U,0x41U,0x02U,0x6AU,0x0BU,0x22U, - 0x01U,0x41U,0xE1U,0x01U,0x3AU,0x00U,0x00U,0x20U,0x00U,0x28U, - 0x02U,0x44U,0x21U,0x02U,0x20U,0x01U,0x41U,0xEEU,0x01U,0x3AU, - 0x00U,0x01U,0x20U,0x02U,0x04U,0x7FU,0x20U,0x01U,0x41U,0x01U, - 0x3AU,0x00U,0x06U,0x20U,0x01U,0x41U,0x22U,0x36U,0x00U,0x02U, - 0x20U,0x02U,0x41U,0x7FU,0x47U,0x04U,0x7FU,0x20U,0x01U,0x41U, - 0x1FU,0x3AU,0x00U,0x07U,0x20U,0x01U,0x20U,0x02U,0x29U,0x03U, - 0x00U,0x37U,0x03U,0x08U,0x20U,0x01U,0x20U,0x02U,0x29U,0x03U, - 0x08U,0x37U,0x03U,0x10U,0x20U,0x01U,0x20U,0x02U,0x29U,0x03U, - 0x10U,0x37U,0x03U,0x18U,0x20U,0x01U,0x20U,0x02U,0x29U,0x03U, - 0x18U,0x37U,0x03U,0x20U,0x20U,0x01U,0x41U,0x28U,0x6AU,0x05U, - 0x20U,0x01U,0x41U,0xFBU,0x00U,0x3BU,0x00U,0x07U,0x20U,0x01U, - 0x41U,0x09U,0x6AU,0x0BU,0x05U,0x20U,0x01U,0x41U,0x02U,0x6AU, - 0x0BU,0x22U,0x01U,0x41U,0xE1U,0xE3U,0x03U,0x3BU,0x00U,0x00U, - 0x20U,0x01U,0x20U,0x00U,0x41U,0x80U,0x01U,0x6AU,0x22U,0x02U, - 0x6BU,0x41U,0x02U,0x6AU,0x21U,0x01U,0x20U,0x00U,0x20U,0x02U, - 0x20U,0x01U,0x10U,0x0FU,0x22U,0x09U,0x3CU,0x00U,0xA1U,0x01U, - 0x20U,0x00U,0x41U,0xE8U,0x00U,0x3AU,0x00U,0x99U,0x01U,0x20U, - 0x00U,0x20U,0x09U,0x42U,0x08U,0x88U,0x3CU,0x00U,0xA0U,0x01U, - 0x20U,0x00U,0x20U,0x09U,0x42U,0x10U,0x88U,0x3CU,0x00U,0x9FU, - 0x01U,0x20U,0x00U,0x20U,0x09U,0x42U,0x18U,0x88U,0x3CU,0x00U, - 0x9EU,0x01U,0x20U,0x00U,0x20U,0x09U,0x42U,0x20U,0x88U,0x3CU, - 0x00U,0x9DU,0x01U,0x20U,0x00U,0x20U,0x09U,0x42U,0x28U,0x88U, - 0x3CU,0x00U,0x9CU,0x01U,0x20U,0x00U,0x20U,0x09U,0x42U,0x30U, - 0x88U,0x3CU,0x00U,0x9BU,0x01U,0x20U,0x00U,0x20U,0x09U,0x42U, - 0x38U,0x88U,0xA7U,0x41U,0x3FU,0x71U,0x41U,0xC0U,0x00U,0x72U, - 0x3AU,0x00U,0x9AU,0x01U,0x41U,0xA4U,0x17U,0x41U,0x0BU,0x20U, - 0x00U,0x41U,0x20U,0x20U,0x02U,0x20U,0x01U,0x10U,0x10U,0x22U, - 0x09U,0x10U,0x03U,0x1AU,0x20U,0x09U,0x20U,0x01U,0xADU,0x52U, - 0x04U,0x40U,0x41U,0xB0U,0x17U,0x41U,0x2FU,0x42U,0xA8U,0x04U, - 0x10U,0x0BU,0x1AU,0x0BU,0x41U,0xDFU,0x17U,0x41U,0x1BU,0x42U, - 0xAAU,0x04U,0x10U,0x05U,0x1AU,0x0BU,0x20U,0x00U,0x41U,0x80U, - 0x01U,0x6AU,0x41U,0x0CU,0x72U,0x22U,0x04U,0x41U,0x14U,0x20U, - 0x00U,0x41U,0xEDU,0x09U,0x6AU,0x41U,0x01U,0x10U,0x09U,0x22U, - 0x09U,0x42U,0x14U,0x51U,0x04U,0x40U,0x41U,0xFAU,0x17U,0x41U, - 0x14U,0x20U,0x00U,0x41U,0x80U,0x01U,0x6AU,0x41U,0x20U,0x41U, - 0x01U,0x10U,0x08U,0x1AU,0x0BU,0x20U,0x00U,0x41U,0xB0U,0x09U, - 0x6AU,0x41U,0x0CU,0x72U,0x21U,0x02U,0x20U,0x00U,0x29U,0x03U, - 0x8CU,0x01U,0x20U,0x00U,0x29U,0x03U,0xBCU,0x09U,0x51U,0x04U, - 0x40U,0x02U,0x40U,0x20U,0x00U,0x28U,0x02U,0x9CU,0x01U,0x20U, - 0x00U,0x28U,0x02U,0xCCU,0x09U,0x47U,0x20U,0x00U,0x29U,0x03U, - 0x94U,0x01U,0x20U,0x00U,0x29U,0x03U,0xC4U,0x09U,0x52U,0x72U, - 0x0DU,0x00U,0x41U,0x8EU,0x18U,0x41U,0xCDU,0x00U,0x42U,0xB9U, - 0x04U,0x10U,0x05U,0x1AU,0x0BU,0x0BU,0x41U,0x00U,0x41U,0x00U, - 0x20U,0x02U,0x41U,0x14U,0x10U,0x09U,0x22U,0x0BU,0x42U,0x3FU, - 0x88U,0xA7U,0x41U,0x01U,0x73U,0x21U,0x01U,0x20U,0x0BU,0x42U, - 0x00U,0x59U,0x04U,0x40U,0x41U,0xDBU,0x18U,0x41U,0x30U,0x41U, - 0x00U,0x41U,0x00U,0x41U,0x00U,0x10U,0x08U,0x1AU,0x0BU,0x20U, - 0x01U,0x20U,0x09U,0x42U,0x14U,0x52U,0x22U,0x05U,0x41U,0x02U, - 0x74U,0x20U,0x06U,0x41U,0x01U,0x74U,0x72U,0x72U,0x22U,0x03U, - 0xADU,0x21U,0x0CU,0x20U,0x03U,0x41U,0x03U,0x6BU,0x22U,0x07U, - 0x41U,0x04U,0x4DU,0x04U,0x40U,0x02U,0x40U,0x02U,0x40U,0x20U, - 0x07U,0x41U,0x01U,0x6BU,0x0EU,0x03U,0x01U,0x01U,0x01U,0x00U, - 0x0BU,0x41U,0x81U,0x0AU,0x41U,0x1AU,0x42U,0xC5U,0x04U,0x10U, - 0x0BU,0x1AU,0x0BU,0x0BU,0x41U,0x8BU,0x19U,0x41U,0x02U,0x20U, - 0x0CU,0x10U,0x03U,0x1AU,0x41U,0x8EU,0x19U,0x41U,0x02U,0x20U, - 0x05U,0xADU,0x10U,0x03U,0x1AU,0x41U,0x90U,0x19U,0x41U,0x02U, - 0x20U,0x0DU,0x10U,0x03U,0x1AU,0x41U,0x92U,0x19U,0x41U,0x02U, - 0x20U,0x01U,0xADU,0x10U,0x03U,0x1AU,0x02U,0x40U,0x20U,0x03U, - 0x41U,0x01U,0x6BU,0x22U,0x01U,0x41U,0x03U,0x4DU,0x04U,0x40U, - 0x02U,0x40U,0x02U,0x40U,0x20U,0x01U,0x41U,0x02U,0x6BU,0x0EU, - 0x02U,0x03U,0x00U,0x01U,0x0BU,0x20U,0x0AU,0x42U,0x01U,0x7CU, - 0x21U,0x0AU,0x0CU,0x02U,0x0BU,0x20U,0x0AU,0x42U,0x01U,0x7DU, - 0x21U,0x0AU,0x0BU,0x0BU,0x41U,0x94U,0x19U,0x41U,0x10U,0x20U, - 0x09U,0x42U,0x14U,0x51U,0xADU,0x10U,0x03U,0x1AU,0x41U,0xC2U, - 0x12U,0x41U,0x0FU,0x20U,0x0DU,0x10U,0x03U,0x1AU,0x41U,0x9BU, - 0x0AU,0x41U,0x0CU,0x20U,0x0AU,0x10U,0x03U,0x1AU,0x20U,0x0AU, - 0x42U,0x01U,0x57U,0x04U,0x40U,0x41U,0x81U,0x0AU,0x41U,0x1AU, - 0x42U,0xE7U,0x04U,0x10U,0x0BU,0x1AU,0x0BU,0x20U,0x00U,0x20U, - 0x0AU,0x3CU,0x00U,0x20U,0x20U,0x00U,0x41U,0x20U,0x6AU,0x41U, - 0x01U,0x41U,0xBCU,0x09U,0x41U,0x02U,0x10U,0x0CU,0x42U,0x01U, - 0x52U,0x04U,0x40U,0x41U,0x81U,0x0AU,0x41U,0x1AU,0x42U,0xEAU, - 0x04U,0x10U,0x0BU,0x1AU,0x0BU,0x20U,0x0BU,0x42U,0x00U,0x59U, - 0x04U,0x40U,0x02U,0x40U,0x20U,0x00U,0x20U,0x0BU,0x3CU,0x00U, - 0x20U,0x41U,0x00U,0x41U,0x00U,0x20U,0x00U,0x41U,0x20U,0x6AU, - 0x41U,0x01U,0x10U,0x0CU,0x50U,0x45U,0x04U,0x40U,0x41U,0x81U, - 0x0AU,0x41U,0x1AU,0x42U,0xF4U,0x04U,0x10U,0x0BU,0x1AU,0x0BU, - 0x41U,0x00U,0x41U,0x00U,0x20U,0x02U,0x41U,0x14U,0x10U,0x0CU, - 0x50U,0x0DU,0x00U,0x41U,0x81U,0x0AU,0x41U,0x1AU,0x42U,0xF7U, - 0x04U,0x10U,0x0BU,0x1AU,0x0BU,0x0BU,0x20U,0x09U,0x42U,0x14U, - 0x51U,0x04U,0x40U,0x02U,0x40U,0x20U,0x00U,0x41U,0xD6U,0x00U, - 0x3AU,0x00U,0x80U,0x01U,0x41U,0x01U,0x21U,0x01U,0x03U,0x40U, - 0x41U,0x80U,0x85U,0x80U,0x80U,0x78U,0x41U,0x21U,0x10U,0x00U, - 0x1AU,0x20U,0x01U,0x41U,0x20U,0x46U,0x45U,0x04U,0x40U,0x20U, - 0x00U,0x41U,0xD2U,0x00U,0x41U,0xC8U,0x00U,0x41U,0xD3U,0x00U, - 0x20U,0x01U,0x41U,0x0CU,0x49U,0x22U,0x03U,0x1BU,0x20U,0x01U, - 0x41U,0x02U,0x49U,0x22U,0x05U,0x1BU,0x3AU,0x00U,0x81U,0x01U, - 0x20U,0x00U,0x41U,0x00U,0x41U,0xFEU,0x01U,0x41U,0xF4U,0x01U, - 0x20U,0x03U,0x1BU,0x20U,0x05U,0x1BU,0x20U,0x01U,0x6AU,0x3AU, - 0x00U,0x82U,0x01U,0x20U,0x00U,0x41U,0x20U,0x6AU,0x41U,0x20U, - 0x20U,0x00U,0x41U,0x80U,0x01U,0x6AU,0x41U,0x20U,0x10U,0x09U, - 0x42U,0x20U,0x51U,0x04U,0x40U,0x02U,0x40U,0x20U,0x00U,0x41U, - 0xC3U,0x00U,0x3AU,0x00U,0x20U,0x20U,0x00U,0x41U,0x00U,0x3AU, - 0x00U,0x50U,0x20U,0x00U,0x20U,0x00U,0x2FU,0x00U,0x81U,0x01U, - 0x3BU,0x00U,0x21U,0x20U,0x00U,0x41U,0xD0U,0x00U,0x6AU,0x41U, - 0x01U,0x20U,0x00U,0x41U,0x20U,0x6AU,0x41U,0x20U,0x10U,0x09U, - 0x42U,0x01U,0x51U,0x04U,0x40U,0x02U,0x40U,0x20U,0x00U,0x2DU, - 0x00U,0x50U,0x22U,0x03U,0x41U,0x01U,0x4BU,0x04U,0x40U,0x20U, - 0x00U,0x20U,0x03U,0x41U,0x01U,0x6BU,0x3AU,0x00U,0x50U,0x20U, - 0x00U,0x41U,0xD0U,0x00U,0x6AU,0x41U,0x01U,0x20U,0x00U,0x41U, - 0x20U,0x6AU,0x41U,0x20U,0x10U,0x0CU,0x42U,0x01U,0x51U,0x0DU, - 0x01U,0x41U,0x81U,0x0AU,0x41U,0x1AU,0x42U,0x98U,0x05U,0x10U, - 0x0BU,0x1AU,0x05U,0x41U,0x00U,0x41U,0x00U,0x20U,0x00U,0x41U, - 0x20U,0x6AU,0x41U,0x20U,0x10U,0x0CU,0x50U,0x0DU,0x01U,0x41U, - 0x81U,0x0AU,0x41U,0x1AU,0x42U,0x93U,0x05U,0x10U,0x0BU,0x1AU, - 0x0BU,0x0BU,0x0BU,0x41U,0x00U,0x41U,0x00U,0x20U,0x00U,0x41U, - 0x80U,0x01U,0x6AU,0x41U,0x20U,0x10U,0x0CU,0x50U,0x0DU,0x00U, - 0x41U,0x81U,0x0AU,0x41U,0x1AU,0x42U,0x9DU,0x05U,0x10U,0x0BU, - 0x1AU,0x0BU,0x0BU,0x20U,0x01U,0x41U,0x01U,0x6AU,0x21U,0x01U, - 0x0CU,0x01U,0x0BU,0x0BU,0x41U,0x00U,0x41U,0x00U,0x20U,0x00U, - 0x41U,0xEDU,0x09U,0x6AU,0x41U,0x01U,0x10U,0x0CU,0x50U,0x45U, - 0x04U,0x40U,0x41U,0x81U,0x0AU,0x41U,0x1AU,0x42U,0xA3U,0x05U, - 0x10U,0x0BU,0x1AU,0x0BU,0x41U,0x00U,0x41U,0x00U,0x20U,0x04U, - 0x41U,0x14U,0x10U,0x0CU,0x50U,0x0DU,0x00U,0x41U,0x81U,0x0AU, - 0x41U,0x1AU,0x42U,0xA6U,0x05U,0x10U,0x0BU,0x1AU,0x0BU,0x0BU, - 0x20U,0x06U,0x45U,0x04U,0x40U,0x02U,0x40U,0x20U,0x02U,0x41U, - 0x14U,0x20U,0x00U,0x41U,0xEDU,0x09U,0x6AU,0x41U,0x01U,0x10U, - 0x0CU,0x42U,0x14U,0x52U,0x04U,0x40U,0x41U,0x81U,0x0AU,0x41U, - 0x1AU,0x42U,0xADU,0x05U,0x10U,0x0BU,0x1AU,0x0BU,0x20U,0x00U, - 0x41U,0xEDU,0x09U,0x6AU,0x41U,0x01U,0x20U,0x02U,0x41U,0x14U, - 0x10U,0x0CU,0x42U,0x01U,0x51U,0x0DU,0x00U,0x41U,0x81U,0x0AU, - 0x41U,0x1AU,0x42U,0xB0U,0x05U,0x10U,0x0BU,0x1AU,0x0BU,0x0BU, - 0x41U,0xA5U,0x19U,0x41U,0x22U,0x42U,0xB3U,0x05U,0x10U,0x05U, - 0x1AU,0x0BU,0x41U,0xC7U,0x19U,0x41U,0x22U,0x42U,0xB7U,0x05U, - 0x10U,0x0BU,0x1AU,0x20U,0x00U,0x41U,0xB0U,0x0AU,0x6AU,0x24U, - 0x00U,0x20U,0x0AU,0x0BU,0x0BU,0xF6U,0x11U,0x02U,0x00U,0x41U, - 0x80U,0x08U,0x0BU,0x14U,0xB5U,0xF7U,0x62U,0x79U,0x8AU,0x53U, - 0xD5U,0x43U,0xA0U,0x14U,0xCAU,0xF8U,0xB2U,0x97U,0xCFU,0xF8U, - 0xF2U,0xF9U,0x37U,0xE8U,0x00U,0x41U,0x94U,0x08U,0x0BU,0xD4U, - 0x11U,0x44U,0x00U,0x44U,0x42U,0x47U,0x4CU,0x4EU,0x00U,0x47U, - 0x6FU,0x76U,0x65U,0x72U,0x6EU,0x61U,0x6EU,0x63U,0x65U,0x3AU, - 0x20U,0x50U,0x61U,0x73U,0x73U,0x69U,0x6EU,0x67U,0x20U,0x6EU, - 0x6FU,0x6EU,0x2DU,0x49U,0x6EU,0x76U,0x6FU,0x6BU,0x65U,0x20U, - 0x74U,0x78U,0x6EU,0x2EU,0x20U,0x48U,0x6FU,0x6FU,0x6BU,0x4FU, - 0x6EU,0x20U,0x73U,0x68U,0x6FU,0x75U,0x6CU,0x64U,0x20U,0x62U, - 0x65U,0x20U,0x63U,0x68U,0x61U,0x6EU,0x67U,0x65U,0x64U,0x20U, - 0x74U,0x6FU,0x20U,0x61U,0x76U,0x6FU,0x69U,0x64U,0x20U,0x74U, - 0x68U,0x69U,0x73U,0x2EU,0x00U,0x47U,0x6FU,0x76U,0x65U,0x72U, - 0x61U,0x6EU,0x63U,0x65U,0x3AU,0x20U,0x50U,0x61U,0x73U,0x73U, - 0x69U,0x6EU,0x67U,0x20U,0x6FU,0x75U,0x74U,0x67U,0x6FU,0x69U, - 0x6EU,0x67U,0x20U,0x74U,0x78U,0x6EU,0x2EU,0x00U,0x47U,0x6FU, + 0x41U,0x7FU,0x47U,0x04U,0x7FU,0x20U,0x01U,0x41U,0xD0U,0x3EU, + 0x3BU,0x00U,0x07U,0x20U,0x01U,0x20U,0x02U,0x29U,0x03U,0x00U, + 0x37U,0x03U,0x09U,0x20U,0x01U,0x20U,0x02U,0x29U,0x03U,0x08U, + 0x37U,0x03U,0x11U,0x20U,0x01U,0x20U,0x02U,0x29U,0x03U,0x10U, + 0x37U,0x03U,0x19U,0x20U,0x01U,0x20U,0x02U,0x29U,0x03U,0x18U, + 0x37U,0x03U,0x21U,0x20U,0x01U,0x41U,0x29U,0x6AU,0x05U,0x20U, + 0x01U,0x41U,0xFBU,0x00U,0x3BU,0x00U,0x07U,0x20U,0x01U,0x41U, + 0x09U,0x6AU,0x0BU,0x05U,0x20U,0x01U,0x41U,0x02U,0x6AU,0x0BU, + 0x22U,0x01U,0x41U,0xE1U,0x01U,0x3AU,0x00U,0x00U,0x20U,0x00U, + 0x28U,0x02U,0x44U,0x21U,0x02U,0x20U,0x01U,0x41U,0xEEU,0x01U, + 0x3AU,0x00U,0x01U,0x20U,0x02U,0x04U,0x7FU,0x20U,0x01U,0x41U, + 0x01U,0x3AU,0x00U,0x06U,0x20U,0x01U,0x41U,0x22U,0x36U,0x00U, + 0x02U,0x20U,0x02U,0x41U,0x7FU,0x47U,0x04U,0x7FU,0x20U,0x01U, + 0x41U,0xD0U,0x3EU,0x3BU,0x00U,0x07U,0x20U,0x01U,0x20U,0x02U, + 0x29U,0x03U,0x00U,0x37U,0x03U,0x09U,0x20U,0x01U,0x20U,0x02U, + 0x29U,0x03U,0x08U,0x37U,0x03U,0x11U,0x20U,0x01U,0x20U,0x02U, + 0x29U,0x03U,0x10U,0x37U,0x03U,0x19U,0x20U,0x01U,0x20U,0x02U, + 0x29U,0x03U,0x18U,0x37U,0x03U,0x21U,0x20U,0x01U,0x41U,0x29U, + 0x6AU,0x05U,0x20U,0x01U,0x41U,0xFBU,0x00U,0x3BU,0x00U,0x07U, + 0x20U,0x01U,0x41U,0x09U,0x6AU,0x0BU,0x05U,0x20U,0x01U,0x41U, + 0x02U,0x6AU,0x0BU,0x22U,0x01U,0x41U,0xE1U,0xE3U,0x03U,0x3BU, + 0x00U,0x00U,0x20U,0x01U,0x20U,0x00U,0x41U,0x80U,0x01U,0x6AU, + 0x22U,0x01U,0x6BU,0x41U,0x02U,0x6AU,0x21U,0x02U,0x20U,0x00U, + 0x20U,0x01U,0x20U,0x02U,0x10U,0x0FU,0x22U,0x09U,0x3CU,0x00U, + 0xA1U,0x01U,0x20U,0x00U,0x41U,0xE8U,0x00U,0x3AU,0x00U,0x99U, + 0x01U,0x20U,0x00U,0x20U,0x09U,0x42U,0x08U,0x88U,0x3CU,0x00U, + 0xA0U,0x01U,0x20U,0x00U,0x20U,0x09U,0x42U,0x10U,0x88U,0x3CU, + 0x00U,0x9FU,0x01U,0x20U,0x00U,0x20U,0x09U,0x42U,0x18U,0x88U, + 0x3CU,0x00U,0x9EU,0x01U,0x20U,0x00U,0x20U,0x09U,0x42U,0x20U, + 0x88U,0x3CU,0x00U,0x9DU,0x01U,0x20U,0x00U,0x20U,0x09U,0x42U, + 0x28U,0x88U,0x3CU,0x00U,0x9CU,0x01U,0x20U,0x00U,0x20U,0x09U, + 0x42U,0x30U,0x88U,0x3CU,0x00U,0x9BU,0x01U,0x20U,0x00U,0x20U, + 0x09U,0x42U,0x38U,0x88U,0xA7U,0x41U,0x3FU,0x71U,0x41U,0xC0U, + 0x00U,0x72U,0x3AU,0x00U,0x9AU,0x01U,0x41U,0xA4U,0x17U,0x41U, + 0x0BU,0x20U,0x01U,0x20U,0x02U,0x41U,0x01U,0x10U,0x08U,0x1AU, + 0x41U,0xAFU,0x17U,0x41U,0x0BU,0x20U,0x00U,0x41U,0x20U,0x20U, + 0x01U,0x20U,0x02U,0x10U,0x10U,0x22U,0x09U,0x10U,0x03U,0x1AU, + 0x20U,0x09U,0x42U,0x20U,0x52U,0x04U,0x40U,0x41U,0xBBU,0x17U, + 0x41U,0x2FU,0x42U,0xAFU,0x04U,0x10U,0x0BU,0x1AU,0x0BU,0x41U, + 0xEAU,0x17U,0x41U,0x0FU,0x20U,0x00U,0x41U,0x20U,0x41U,0x01U, + 0x10U,0x08U,0x1AU,0x41U,0xF9U,0x17U,0x41U,0x1BU,0x42U,0xB2U, + 0x04U,0x10U,0x05U,0x1AU,0x0BU,0x20U,0x00U,0x41U,0x80U,0x01U, + 0x6AU,0x41U,0x0CU,0x72U,0x22U,0x04U,0x41U,0x14U,0x20U,0x00U, + 0x41U,0xEDU,0x09U,0x6AU,0x41U,0x01U,0x10U,0x09U,0x22U,0x09U, + 0x42U,0x14U,0x51U,0x04U,0x40U,0x41U,0x94U,0x18U,0x41U,0x14U, + 0x20U,0x00U,0x41U,0x80U,0x01U,0x6AU,0x41U,0x20U,0x41U,0x01U, + 0x10U,0x08U,0x1AU,0x0BU,0x20U,0x00U,0x41U,0xB0U,0x09U,0x6AU, + 0x41U,0x0CU,0x72U,0x21U,0x02U,0x20U,0x00U,0x29U,0x03U,0x8CU, + 0x01U,0x20U,0x00U,0x29U,0x03U,0xBCU,0x09U,0x51U,0x04U,0x40U, + 0x02U,0x40U,0x20U,0x00U,0x28U,0x02U,0x9CU,0x01U,0x20U,0x00U, + 0x28U,0x02U,0xCCU,0x09U,0x47U,0x20U,0x00U,0x29U,0x03U,0x94U, + 0x01U,0x20U,0x00U,0x29U,0x03U,0xC4U,0x09U,0x52U,0x72U,0x0DU, + 0x00U,0x41U,0xA8U,0x18U,0x41U,0xCDU,0x00U,0x42U,0xC1U,0x04U, + 0x10U,0x05U,0x1AU,0x0BU,0x0BU,0x41U,0x00U,0x41U,0x00U,0x20U, + 0x02U,0x41U,0x14U,0x10U,0x09U,0x22U,0x0BU,0x42U,0x3FU,0x88U, + 0xA7U,0x41U,0x01U,0x73U,0x21U,0x01U,0x20U,0x0BU,0x42U,0x00U, + 0x59U,0x04U,0x40U,0x41U,0xF5U,0x18U,0x41U,0x30U,0x41U,0x00U, + 0x41U,0x00U,0x41U,0x00U,0x10U,0x08U,0x1AU,0x0BU,0x20U,0x01U, + 0x20U,0x09U,0x42U,0x14U,0x52U,0x22U,0x05U,0x41U,0x02U,0x74U, + 0x20U,0x06U,0x41U,0x01U,0x74U,0x72U,0x72U,0x22U,0x03U,0xADU, + 0x21U,0x0CU,0x20U,0x03U,0x41U,0x03U,0x6BU,0x22U,0x07U,0x41U, + 0x04U,0x4DU,0x04U,0x40U,0x02U,0x40U,0x02U,0x40U,0x20U,0x07U, + 0x41U,0x01U,0x6BU,0x0EU,0x03U,0x01U,0x01U,0x01U,0x00U,0x0BU, + 0x41U,0x81U,0x0AU,0x41U,0x1AU,0x42U,0xCDU,0x04U,0x10U,0x0BU, + 0x1AU,0x0BU,0x0BU,0x41U,0xA5U,0x19U,0x41U,0x02U,0x20U,0x0CU, + 0x10U,0x03U,0x1AU,0x41U,0xA8U,0x19U,0x41U,0x02U,0x20U,0x05U, + 0xADU,0x10U,0x03U,0x1AU,0x41U,0xAAU,0x19U,0x41U,0x02U,0x20U, + 0x0DU,0x10U,0x03U,0x1AU,0x41U,0xACU,0x19U,0x41U,0x02U,0x20U, + 0x01U,0xADU,0x10U,0x03U,0x1AU,0x02U,0x40U,0x20U,0x03U,0x41U, + 0x01U,0x6BU,0x22U,0x01U,0x41U,0x03U,0x4DU,0x04U,0x40U,0x02U, + 0x40U,0x02U,0x40U,0x20U,0x01U,0x41U,0x02U,0x6BU,0x0EU,0x02U, + 0x03U,0x00U,0x01U,0x0BU,0x20U,0x0AU,0x42U,0x01U,0x7CU,0x21U, + 0x0AU,0x0CU,0x02U,0x0BU,0x20U,0x0AU,0x42U,0x01U,0x7DU,0x21U, + 0x0AU,0x0BU,0x0BU,0x41U,0xAEU,0x19U,0x41U,0x10U,0x20U,0x09U, + 0x42U,0x14U,0x51U,0xADU,0x10U,0x03U,0x1AU,0x41U,0xC2U,0x12U, + 0x41U,0x0FU,0x20U,0x0DU,0x10U,0x03U,0x1AU,0x41U,0x9BU,0x0AU, + 0x41U,0x0CU,0x20U,0x0AU,0x10U,0x03U,0x1AU,0x20U,0x0AU,0x42U, + 0x01U,0x57U,0x04U,0x40U,0x41U,0x81U,0x0AU,0x41U,0x1AU,0x42U, + 0xEFU,0x04U,0x10U,0x0BU,0x1AU,0x0BU,0x20U,0x00U,0x20U,0x0AU, + 0x3CU,0x00U,0x20U,0x20U,0x00U,0x41U,0x20U,0x6AU,0x41U,0x01U, + 0x41U,0xBCU,0x09U,0x41U,0x02U,0x10U,0x0CU,0x42U,0x01U,0x52U, + 0x04U,0x40U,0x41U,0x81U,0x0AU,0x41U,0x1AU,0x42U,0xF2U,0x04U, + 0x10U,0x0BU,0x1AU,0x0BU,0x20U,0x0BU,0x42U,0x00U,0x59U,0x04U, + 0x40U,0x02U,0x40U,0x20U,0x00U,0x20U,0x0BU,0x3CU,0x00U,0x20U, + 0x41U,0x00U,0x41U,0x00U,0x20U,0x00U,0x41U,0x20U,0x6AU,0x41U, + 0x01U,0x10U,0x0CU,0x50U,0x45U,0x04U,0x40U,0x41U,0x81U,0x0AU, + 0x41U,0x1AU,0x42U,0xFCU,0x04U,0x10U,0x0BU,0x1AU,0x0BU,0x41U, + 0x00U,0x41U,0x00U,0x20U,0x02U,0x41U,0x14U,0x10U,0x0CU,0x50U, + 0x0DU,0x00U,0x41U,0x81U,0x0AU,0x41U,0x1AU,0x42U,0xFFU,0x04U, + 0x10U,0x0BU,0x1AU,0x0BU,0x0BU,0x20U,0x09U,0x42U,0x14U,0x51U, + 0x04U,0x40U,0x02U,0x40U,0x20U,0x00U,0x41U,0xD6U,0x00U,0x3AU, + 0x00U,0x80U,0x01U,0x41U,0x01U,0x21U,0x01U,0x03U,0x40U,0x41U, + 0x88U,0x85U,0x80U,0x80U,0x78U,0x41U,0x21U,0x10U,0x00U,0x1AU, + 0x20U,0x01U,0x41U,0x20U,0x46U,0x45U,0x04U,0x40U,0x20U,0x00U, + 0x41U,0xD2U,0x00U,0x41U,0xC8U,0x00U,0x41U,0xD3U,0x00U,0x20U, + 0x01U,0x41U,0x0CU,0x49U,0x22U,0x03U,0x1BU,0x20U,0x01U,0x41U, + 0x02U,0x49U,0x22U,0x05U,0x1BU,0x3AU,0x00U,0x81U,0x01U,0x20U, + 0x00U,0x41U,0x00U,0x41U,0xFEU,0x01U,0x41U,0xF4U,0x01U,0x20U, + 0x03U,0x1BU,0x20U,0x05U,0x1BU,0x20U,0x01U,0x6AU,0x3AU,0x00U, + 0x82U,0x01U,0x20U,0x00U,0x41U,0x20U,0x6AU,0x41U,0x20U,0x20U, + 0x00U,0x41U,0x80U,0x01U,0x6AU,0x41U,0x20U,0x10U,0x09U,0x42U, + 0x20U,0x51U,0x04U,0x40U,0x02U,0x40U,0x20U,0x00U,0x41U,0xC3U, + 0x00U,0x3AU,0x00U,0x20U,0x20U,0x00U,0x41U,0x00U,0x3AU,0x00U, + 0x50U,0x20U,0x00U,0x20U,0x00U,0x2FU,0x00U,0x81U,0x01U,0x3BU, + 0x00U,0x21U,0x20U,0x00U,0x41U,0xD0U,0x00U,0x6AU,0x41U,0x01U, + 0x20U,0x00U,0x41U,0x20U,0x6AU,0x41U,0x20U,0x10U,0x09U,0x42U, + 0x01U,0x51U,0x04U,0x40U,0x02U,0x40U,0x20U,0x00U,0x2DU,0x00U, + 0x50U,0x22U,0x03U,0x41U,0x01U,0x4BU,0x04U,0x40U,0x20U,0x00U, + 0x20U,0x03U,0x41U,0x01U,0x6BU,0x3AU,0x00U,0x50U,0x20U,0x00U, + 0x41U,0xD0U,0x00U,0x6AU,0x41U,0x01U,0x20U,0x00U,0x41U,0x20U, + 0x6AU,0x41U,0x20U,0x10U,0x0CU,0x42U,0x01U,0x51U,0x0DU,0x01U, + 0x41U,0x81U,0x0AU,0x41U,0x1AU,0x42U,0xA0U,0x05U,0x10U,0x0BU, + 0x1AU,0x05U,0x41U,0x00U,0x41U,0x00U,0x20U,0x00U,0x41U,0x20U, + 0x6AU,0x41U,0x20U,0x10U,0x0CU,0x50U,0x0DU,0x01U,0x41U,0x81U, + 0x0AU,0x41U,0x1AU,0x42U,0x9BU,0x05U,0x10U,0x0BU,0x1AU,0x0BU, + 0x0BU,0x0BU,0x41U,0x00U,0x41U,0x00U,0x20U,0x00U,0x41U,0x80U, + 0x01U,0x6AU,0x41U,0x20U,0x10U,0x0CU,0x50U,0x0DU,0x00U,0x41U, + 0x81U,0x0AU,0x41U,0x1AU,0x42U,0xA5U,0x05U,0x10U,0x0BU,0x1AU, + 0x0BU,0x0BU,0x20U,0x01U,0x41U,0x01U,0x6AU,0x21U,0x01U,0x0CU, + 0x01U,0x0BU,0x0BU,0x41U,0x00U,0x41U,0x00U,0x20U,0x00U,0x41U, + 0xEDU,0x09U,0x6AU,0x41U,0x01U,0x10U,0x0CU,0x50U,0x45U,0x04U, + 0x40U,0x41U,0x81U,0x0AU,0x41U,0x1AU,0x42U,0xABU,0x05U,0x10U, + 0x0BU,0x1AU,0x0BU,0x41U,0x00U,0x41U,0x00U,0x20U,0x04U,0x41U, + 0x14U,0x10U,0x0CU,0x50U,0x0DU,0x00U,0x41U,0x81U,0x0AU,0x41U, + 0x1AU,0x42U,0xAEU,0x05U,0x10U,0x0BU,0x1AU,0x0BU,0x0BU,0x20U, + 0x06U,0x45U,0x04U,0x40U,0x02U,0x40U,0x20U,0x02U,0x41U,0x14U, + 0x20U,0x00U,0x41U,0xEDU,0x09U,0x6AU,0x41U,0x01U,0x10U,0x0CU, + 0x42U,0x14U,0x52U,0x04U,0x40U,0x41U,0x81U,0x0AU,0x41U,0x1AU, + 0x42U,0xB5U,0x05U,0x10U,0x0BU,0x1AU,0x0BU,0x20U,0x00U,0x41U, + 0xEDU,0x09U,0x6AU,0x41U,0x01U,0x20U,0x02U,0x41U,0x14U,0x10U, + 0x0CU,0x42U,0x01U,0x51U,0x0DU,0x00U,0x41U,0x81U,0x0AU,0x41U, + 0x1AU,0x42U,0xB8U,0x05U,0x10U,0x0BU,0x1AU,0x0BU,0x0BU,0x41U, + 0xBFU,0x19U,0x41U,0x22U,0x42U,0xBBU,0x05U,0x10U,0x05U,0x1AU, + 0x0BU,0x41U,0xE1U,0x19U,0x41U,0x22U,0x42U,0xBFU,0x05U,0x10U, + 0x0BU,0x1AU,0x20U,0x00U,0x41U,0xB0U,0x0AU,0x6AU,0x24U,0x00U, + 0x20U,0x0AU,0x0BU,0x0BU,0x90U,0x12U,0x02U,0x00U,0x41U,0x80U, + 0x08U,0x0BU,0x14U,0xB5U,0xF7U,0x62U,0x79U,0x8AU,0x53U,0xD5U, + 0x43U,0xA0U,0x14U,0xCAU,0xF8U,0xB2U,0x97U,0xCFU,0xF8U,0xF2U, + 0xF9U,0x37U,0xE8U,0x00U,0x41U,0x94U,0x08U,0x0BU,0xEEU,0x11U, + 0x44U,0x00U,0x44U,0x42U,0x47U,0x4CU,0x4EU,0x00U,0x47U,0x6FU, 0x76U,0x65U,0x72U,0x6EU,0x61U,0x6EU,0x63U,0x65U,0x3AU,0x20U, - 0x53U,0x74U,0x61U,0x72U,0x74U,0x69U,0x6EU,0x67U,0x20U,0x67U, - 0x6FU,0x76U,0x65U,0x72U,0x6EU,0x61U,0x6EU,0x63U,0x65U,0x20U, - 0x6CU,0x6FU,0x67U,0x69U,0x63U,0x20U,0x6FU,0x6EU,0x20U,0x4CU, - 0x31U,0x20U,0x74U,0x61U,0x62U,0x6CU,0x65U,0x2EU,0x00U,0x4DU, - 0x43U,0x00U,0x49U,0x4DU,0x43U,0x00U,0x47U,0x6FU,0x76U,0x65U, + 0x50U,0x61U,0x73U,0x73U,0x69U,0x6EU,0x67U,0x20U,0x6EU,0x6FU, + 0x6EU,0x2DU,0x49U,0x6EU,0x76U,0x6FU,0x6BU,0x65U,0x20U,0x74U, + 0x78U,0x6EU,0x2EU,0x20U,0x48U,0x6FU,0x6FU,0x6BU,0x4FU,0x6EU, + 0x20U,0x73U,0x68U,0x6FU,0x75U,0x6CU,0x64U,0x20U,0x62U,0x65U, + 0x20U,0x63U,0x68U,0x61U,0x6EU,0x67U,0x65U,0x64U,0x20U,0x74U, + 0x6FU,0x20U,0x61U,0x76U,0x6FU,0x69U,0x64U,0x20U,0x74U,0x68U, + 0x69U,0x73U,0x2EU,0x00U,0x47U,0x6FU,0x76U,0x65U,0x72U,0x61U, + 0x6EU,0x63U,0x65U,0x3AU,0x20U,0x50U,0x61U,0x73U,0x73U,0x69U, + 0x6EU,0x67U,0x20U,0x6FU,0x75U,0x74U,0x67U,0x6FU,0x69U,0x6EU, + 0x67U,0x20U,0x74U,0x78U,0x6EU,0x2EU,0x00U,0x47U,0x6FU,0x76U, + 0x65U,0x72U,0x6EU,0x61U,0x6EU,0x63U,0x65U,0x3AU,0x20U,0x53U, + 0x74U,0x61U,0x72U,0x74U,0x69U,0x6EU,0x67U,0x20U,0x67U,0x6FU, + 0x76U,0x65U,0x72U,0x6EU,0x61U,0x6EU,0x63U,0x65U,0x20U,0x6CU, + 0x6FU,0x67U,0x69U,0x63U,0x20U,0x6FU,0x6EU,0x20U,0x4CU,0x31U, + 0x20U,0x74U,0x61U,0x62U,0x6CU,0x65U,0x2EU,0x00U,0x4DU,0x43U, + 0x00U,0x49U,0x4DU,0x43U,0x00U,0x47U,0x6FU,0x76U,0x65U,0x72U, + 0x6EU,0x61U,0x6EU,0x63U,0x65U,0x3AU,0x20U,0x49U,0x6EU,0x69U, + 0x74U,0x69U,0x61U,0x6CU,0x20U,0x4DU,0x65U,0x6DU,0x62U,0x65U, + 0x72U,0x20U,0x43U,0x6FU,0x75U,0x6EU,0x74U,0x20U,0x50U,0x61U, + 0x72U,0x61U,0x6DU,0x65U,0x74U,0x65U,0x72U,0x20U,0x6DU,0x69U, + 0x73U,0x73U,0x69U,0x6EU,0x67U,0x20U,0x28U,0x49U,0x4DU,0x43U, + 0x29U,0x2EU,0x00U,0x69U,0x6DU,0x63U,0x00U,0x47U,0x6FU,0x76U, + 0x65U,0x72U,0x6EU,0x3AU,0x20U,0x41U,0x73U,0x73U,0x65U,0x72U, + 0x74U,0x69U,0x6FU,0x6EU,0x20U,0x66U,0x61U,0x69U,0x6CU,0x65U, + 0x64U,0x2EU,0x00U,0x6DU,0x65U,0x6DU,0x62U,0x65U,0x72U,0x5FU, + 0x63U,0x6FU,0x75U,0x6EU,0x74U,0x00U,0x47U,0x6FU,0x76U,0x65U, 0x72U,0x6EU,0x61U,0x6EU,0x63U,0x65U,0x3AU,0x20U,0x49U,0x6EU, 0x69U,0x74U,0x69U,0x61U,0x6CU,0x20U,0x4DU,0x65U,0x6DU,0x62U, - 0x65U,0x72U,0x20U,0x43U,0x6FU,0x75U,0x6EU,0x74U,0x20U,0x50U, - 0x61U,0x72U,0x61U,0x6DU,0x65U,0x74U,0x65U,0x72U,0x20U,0x6DU, - 0x69U,0x73U,0x73U,0x69U,0x6EU,0x67U,0x20U,0x28U,0x49U,0x4DU, - 0x43U,0x29U,0x2EU,0x00U,0x69U,0x6DU,0x63U,0x00U,0x47U,0x6FU, - 0x76U,0x65U,0x72U,0x6EU,0x3AU,0x20U,0x41U,0x73U,0x73U,0x65U, - 0x72U,0x74U,0x69U,0x6FU,0x6EU,0x20U,0x66U,0x61U,0x69U,0x6CU, - 0x65U,0x64U,0x2EU,0x00U,0x6DU,0x65U,0x6DU,0x62U,0x65U,0x72U, - 0x5FU,0x63U,0x6FU,0x75U,0x6EU,0x74U,0x00U,0x47U,0x6FU,0x76U, + 0x65U,0x72U,0x20U,0x43U,0x6FU,0x75U,0x6EU,0x74U,0x20U,0x6DU, + 0x75U,0x73U,0x74U,0x20U,0x62U,0x65U,0x20U,0x3EU,0x20U,0x30U, + 0x2EU,0x00U,0x47U,0x6FU,0x76U,0x65U,0x72U,0x6EU,0x61U,0x6EU, + 0x63U,0x65U,0x3AU,0x20U,0x49U,0x6EU,0x69U,0x74U,0x69U,0x61U, + 0x6CU,0x20U,0x4DU,0x65U,0x6DU,0x62U,0x65U,0x72U,0x20U,0x43U, + 0x6FU,0x75U,0x6EU,0x74U,0x20U,0x6DU,0x75U,0x73U,0x74U,0x20U, + 0x62U,0x65U,0x20U,0x3CU,0x3DU,0x20U,0x53U,0x65U,0x61U,0x74U, + 0x20U,0x43U,0x6FU,0x75U,0x6EU,0x74U,0x20U,0x28U,0x32U,0x30U, + 0x29U,0x2EU,0x00U,0x49U,0x52U,0x52U,0x00U,0x47U,0x6FU,0x76U, 0x65U,0x72U,0x6EU,0x61U,0x6EU,0x63U,0x65U,0x3AU,0x20U,0x49U, - 0x6EU,0x69U,0x74U,0x69U,0x61U,0x6CU,0x20U,0x4DU,0x65U,0x6DU, - 0x62U,0x65U,0x72U,0x20U,0x43U,0x6FU,0x75U,0x6EU,0x74U,0x20U, - 0x6DU,0x75U,0x73U,0x74U,0x20U,0x62U,0x65U,0x20U,0x3EU,0x20U, - 0x30U,0x2EU,0x00U,0x47U,0x6FU,0x76U,0x65U,0x72U,0x6EU,0x61U, - 0x6EU,0x63U,0x65U,0x3AU,0x20U,0x49U,0x6EU,0x69U,0x74U,0x69U, - 0x61U,0x6CU,0x20U,0x4DU,0x65U,0x6DU,0x62U,0x65U,0x72U,0x20U, - 0x43U,0x6FU,0x75U,0x6EU,0x74U,0x20U,0x6DU,0x75U,0x73U,0x74U, - 0x20U,0x62U,0x65U,0x20U,0x3CU,0x3DU,0x20U,0x53U,0x65U,0x61U, - 0x74U,0x20U,0x43U,0x6FU,0x75U,0x6EU,0x74U,0x20U,0x28U,0x32U, - 0x30U,0x29U,0x2EU,0x00U,0x49U,0x52U,0x52U,0x00U,0x47U,0x6FU, + 0x6EU,0x69U,0x74U,0x69U,0x61U,0x6CU,0x20U,0x52U,0x65U,0x77U, + 0x61U,0x72U,0x64U,0x20U,0x52U,0x61U,0x74U,0x65U,0x20U,0x50U, + 0x61U,0x72U,0x61U,0x6DU,0x65U,0x74U,0x65U,0x72U,0x20U,0x6DU, + 0x69U,0x73U,0x73U,0x69U,0x6EU,0x67U,0x20U,0x28U,0x49U,0x52U, + 0x52U,0x29U,0x2EU,0x00U,0x49U,0x52U,0x44U,0x00U,0x47U,0x6FU, 0x76U,0x65U,0x72U,0x6EU,0x61U,0x6EU,0x63U,0x65U,0x3AU,0x20U, 0x49U,0x6EU,0x69U,0x74U,0x69U,0x61U,0x6CU,0x20U,0x52U,0x65U, - 0x77U,0x61U,0x72U,0x64U,0x20U,0x52U,0x61U,0x74U,0x65U,0x20U, - 0x50U,0x61U,0x72U,0x61U,0x6DU,0x65U,0x74U,0x65U,0x72U,0x20U, - 0x6DU,0x69U,0x73U,0x73U,0x69U,0x6EU,0x67U,0x20U,0x28U,0x49U, - 0x52U,0x52U,0x29U,0x2EU,0x00U,0x49U,0x52U,0x44U,0x00U,0x47U, - 0x6FU,0x76U,0x65U,0x72U,0x6EU,0x61U,0x6EU,0x63U,0x65U,0x3AU, - 0x20U,0x49U,0x6EU,0x69U,0x74U,0x69U,0x61U,0x6CU,0x20U,0x52U, - 0x65U,0x77U,0x61U,0x72U,0x64U,0x20U,0x44U,0x65U,0x6CU,0x61U, - 0x79U,0x20U,0x50U,0x61U,0x72U,0x61U,0x6DU,0x65U,0x74U,0x65U, - 0x72U,0x20U,0x6DU,0x69U,0x73U,0x73U,0x20U,0x28U,0x49U,0x52U, - 0x44U,0x29U,0x2EU,0x00U,0x47U,0x6FU,0x76U,0x65U,0x72U,0x6EU, - 0x61U,0x6EU,0x63U,0x65U,0x3AU,0x20U,0x49U,0x6EU,0x69U,0x74U, - 0x69U,0x61U,0x6CU,0x20U,0x52U,0x65U,0x77U,0x61U,0x72U,0x64U, - 0x20U,0x44U,0x65U,0x6CU,0x61U,0x79U,0x20U,0x6DU,0x75U,0x73U, - 0x74U,0x20U,0x62U,0x65U,0x20U,0x3EU,0x20U,0x30U,0x2EU,0x00U, - 0x52U,0x52U,0x00U,0x52U,0x44U,0x00U,0x47U,0x6FU,0x76U,0x65U, - 0x72U,0x6EU,0x61U,0x6EU,0x63U,0x65U,0x3AU,0x20U,0x4FU,0x6EU, - 0x65U,0x20U,0x6FU,0x72U,0x20U,0x6DU,0x6FU,0x72U,0x65U,0x20U, - 0x69U,0x6EU,0x69U,0x74U,0x69U,0x61U,0x6CU,0x20U,0x6DU,0x65U, - 0x6DU,0x62U,0x65U,0x72U,0x20U,0x61U,0x63U,0x63U,0x6FU,0x75U, - 0x6EU,0x74U,0x20U,0x49U,0x44U,0x27U,0x73U,0x20U,0x69U,0x73U, - 0x20U,0x6DU,0x69U,0x73U,0x73U,0x69U,0x6EU,0x67U,0x00U,0x4DU, - 0x65U,0x6DU,0x62U,0x65U,0x72U,0x3AU,0x00U,0x47U,0x6FU,0x76U, - 0x65U,0x72U,0x6EU,0x61U,0x6EU,0x63U,0x65U,0x3AU,0x20U,0x53U, - 0x65U,0x74U,0x75U,0x70U,0x20U,0x63U,0x6FU,0x6DU,0x70U,0x6CU, - 0x65U,0x74U,0x65U,0x64U,0x20U,0x73U,0x75U,0x63U,0x63U,0x65U, - 0x73U,0x73U,0x66U,0x75U,0x6CU,0x6CU,0x79U,0x2EU,0x00U,0x47U, - 0x6FU,0x76U,0x65U,0x72U,0x6EU,0x61U,0x6EU,0x63U,0x65U,0x3AU, - 0x20U,0x59U,0x6FU,0x75U,0x20U,0x61U,0x72U,0x65U,0x20U,0x6EU, - 0x6FU,0x74U,0x20U,0x63U,0x75U,0x72U,0x72U,0x65U,0x6EU,0x74U, - 0x6CU,0x79U,0x20U,0x61U,0x20U,0x67U,0x6FU,0x76U,0x65U,0x72U, - 0x6EU,0x61U,0x6EU,0x63U,0x65U,0x20U,0x6DU,0x65U,0x6DU,0x62U, - 0x65U,0x72U,0x20U,0x61U,0x74U,0x20U,0x74U,0x68U,0x69U,0x73U, - 0x20U,0x74U,0x61U,0x62U,0x6CU,0x65U,0x2EU,0x00U,0x54U,0x00U, - 0x47U,0x6FU,0x76U,0x65U,0x72U,0x6EU,0x61U,0x6EU,0x63U,0x65U, - 0x3AU,0x20U,0x56U,0x61U,0x6CU,0x69U,0x64U,0x20U,0x54U,0x4FU, - 0x50U,0x49U,0x43U,0x20U,0x6DU,0x75U,0x73U,0x74U,0x20U,0x62U, - 0x65U,0x20U,0x73U,0x70U,0x65U,0x63U,0x69U,0x66U,0x69U,0x65U, - 0x64U,0x20U,0x61U,0x73U,0x20U,0x6FU,0x74U,0x78U,0x6EU,0x20U, - 0x70U,0x61U,0x72U,0x61U,0x6DU,0x65U,0x74U,0x65U,0x72U,0x2EU, - 0x00U,0x47U,0x6FU,0x76U,0x65U,0x72U,0x6EU,0x61U,0x6EU,0x63U, - 0x65U,0x3AU,0x20U,0x56U,0x61U,0x6CU,0x69U,0x64U,0x20U,0x73U, - 0x65U,0x61U,0x74U,0x20U,0x74U,0x6FU,0x70U,0x69U,0x63U,0x73U, - 0x20U,0x61U,0x72U,0x65U,0x20U,0x30U,0x20U,0x74U,0x68U,0x72U, - 0x6FU,0x75U,0x67U,0x68U,0x20U,0x31U,0x39U,0x2EU,0x00U,0x47U, - 0x6FU,0x76U,0x65U,0x72U,0x6EU,0x61U,0x6EU,0x63U,0x65U,0x3AU, - 0x20U,0x56U,0x61U,0x6CU,0x69U,0x64U,0x20U,0x68U,0x6FU,0x6FU, - 0x6BU,0x20U,0x74U,0x6FU,0x70U,0x69U,0x63U,0x73U,0x20U,0x61U, - 0x72U,0x65U,0x20U,0x30U,0x20U,0x74U,0x68U,0x72U,0x6FU,0x75U, - 0x67U,0x68U,0x20U,0x39U,0x2EU,0x00U,0x47U,0x6FU,0x76U,0x65U, - 0x72U,0x6EU,0x61U,0x6EU,0x63U,0x65U,0x3AU,0x20U,0x56U,0x61U, - 0x6CU,0x69U,0x64U,0x20U,0x72U,0x65U,0x77U,0x61U,0x72U,0x64U, - 0x20U,0x74U,0x6FU,0x70U,0x69U,0x63U,0x73U,0x20U,0x61U,0x72U, - 0x65U,0x20U,0x52U,0x20U,0x28U,0x72U,0x61U,0x74U,0x65U,0x29U, - 0x20U,0x61U,0x6EU,0x64U,0x20U,0x44U,0x20U,0x28U,0x64U,0x65U, - 0x6CU,0x61U,0x79U,0x29U,0x2EU,0x00U,0x4CU,0x00U,0x47U,0x6FU, + 0x77U,0x61U,0x72U,0x64U,0x20U,0x44U,0x65U,0x6CU,0x61U,0x79U, + 0x20U,0x50U,0x61U,0x72U,0x61U,0x6DU,0x65U,0x74U,0x65U,0x72U, + 0x20U,0x6DU,0x69U,0x73U,0x73U,0x20U,0x28U,0x49U,0x52U,0x44U, + 0x29U,0x2EU,0x00U,0x47U,0x6FU,0x76U,0x65U,0x72U,0x6EU,0x61U, + 0x6EU,0x63U,0x65U,0x3AU,0x20U,0x49U,0x6EU,0x69U,0x74U,0x69U, + 0x61U,0x6CU,0x20U,0x52U,0x65U,0x77U,0x61U,0x72U,0x64U,0x20U, + 0x44U,0x65U,0x6CU,0x61U,0x79U,0x20U,0x6DU,0x75U,0x73U,0x74U, + 0x20U,0x62U,0x65U,0x20U,0x3EU,0x20U,0x30U,0x2EU,0x00U,0x52U, + 0x52U,0x00U,0x52U,0x44U,0x00U,0x47U,0x6FU,0x76U,0x65U,0x72U, + 0x6EU,0x61U,0x6EU,0x63U,0x65U,0x3AU,0x20U,0x4FU,0x6EU,0x65U, + 0x20U,0x6FU,0x72U,0x20U,0x6DU,0x6FU,0x72U,0x65U,0x20U,0x69U, + 0x6EU,0x69U,0x74U,0x69U,0x61U,0x6CU,0x20U,0x6DU,0x65U,0x6DU, + 0x62U,0x65U,0x72U,0x20U,0x61U,0x63U,0x63U,0x6FU,0x75U,0x6EU, + 0x74U,0x20U,0x49U,0x44U,0x27U,0x73U,0x20U,0x69U,0x73U,0x20U, + 0x6DU,0x69U,0x73U,0x73U,0x69U,0x6EU,0x67U,0x00U,0x4DU,0x65U, + 0x6DU,0x62U,0x65U,0x72U,0x3AU,0x00U,0x47U,0x6FU,0x76U,0x65U, + 0x72U,0x6EU,0x61U,0x6EU,0x63U,0x65U,0x3AU,0x20U,0x53U,0x65U, + 0x74U,0x75U,0x70U,0x20U,0x63U,0x6FU,0x6DU,0x70U,0x6CU,0x65U, + 0x74U,0x65U,0x64U,0x20U,0x73U,0x75U,0x63U,0x63U,0x65U,0x73U, + 0x73U,0x66U,0x75U,0x6CU,0x6CU,0x79U,0x2EU,0x00U,0x47U,0x6FU, 0x76U,0x65U,0x72U,0x6EU,0x61U,0x6EU,0x63U,0x65U,0x3AU,0x20U, - 0x4DU,0x69U,0x73U,0x73U,0x69U,0x6EU,0x67U,0x20U,0x4CU,0x20U, - 0x70U,0x61U,0x72U,0x61U,0x6DU,0x65U,0x74U,0x65U,0x72U,0x2EU, - 0x20U,0x57U,0x68U,0x69U,0x63U,0x68U,0x20U,0x6CU,0x61U,0x79U, - 0x65U,0x72U,0x20U,0x61U,0x72U,0x65U,0x20U,0x79U,0x6FU,0x75U, - 0x20U,0x76U,0x6FU,0x74U,0x69U,0x6EU,0x67U,0x20U,0x66U,0x6FU, - 0x72U,0x3FU,0x00U,0x47U,0x6FU,0x76U,0x65U,0x72U,0x6EU,0x61U, - 0x6EU,0x63U,0x65U,0x3AU,0x20U,0x4CU,0x61U,0x79U,0x65U,0x72U, - 0x20U,0x70U,0x61U,0x72U,0x61U,0x6DU,0x65U,0x74U,0x65U,0x72U, - 0x20U,0x6DU,0x75U,0x73U,0x74U,0x20U,0x62U,0x65U,0x20U,0x27U, - 0x31U,0x27U,0x20U,0x6FU,0x72U,0x20U,0x27U,0x32U,0x27U,0x2EU, - 0x00U,0x47U,0x6FU,0x76U,0x65U,0x72U,0x6EU,0x61U,0x6EU,0x63U, - 0x65U,0x3AU,0x20U,0x4CU,0x32U,0x73U,0x20U,0x63U,0x61U,0x6EU, - 0x6EU,0x6FU,0x74U,0x20U,0x76U,0x6FU,0x74U,0x65U,0x20U,0x6FU, - 0x6EU,0x20U,0x52U,0x52U,0x2FU,0x52U,0x44U,0x20U,0x61U,0x74U, - 0x20U,0x4CU,0x32U,0x2CU,0x20U,0x64U,0x69U,0x64U,0x20U,0x79U, - 0x6FU,0x75U,0x20U,0x6DU,0x65U,0x61U,0x6EU,0x20U,0x74U,0x6FU, - 0x20U,0x73U,0x65U,0x74U,0x20U,0x4CU,0x3DU,0x31U,0x3FU,0x00U, - 0x56U,0x00U,0x47U,0x6FU,0x76U,0x65U,0x72U,0x6EU,0x61U,0x6EU, - 0x63U,0x65U,0x3AU,0x20U,0x4DU,0x69U,0x73U,0x73U,0x69U,0x6EU, - 0x67U,0x20U,0x6FU,0x72U,0x20U,0x69U,0x6EU,0x63U,0x6FU,0x72U, - 0x72U,0x65U,0x63U,0x74U,0x20U,0x73U,0x69U,0x7AU,0x65U,0x20U, - 0x6FU,0x66U,0x20U,0x56U,0x4FU,0x54U,0x45U,0x20U,0x64U,0x61U, - 0x74U,0x61U,0x20U,0x66U,0x6FU,0x72U,0x20U,0x54U,0x4FU,0x50U, - 0x49U,0x43U,0x20U,0x74U,0x79U,0x70U,0x65U,0x2EU,0x00U,0x74U, - 0x6FU,0x70U,0x69U,0x63U,0x5FU,0x64U,0x61U,0x74U,0x61U,0x5FU, - 0x72U,0x61U,0x77U,0x3AU,0x00U,0x74U,0x6FU,0x70U,0x69U,0x63U, - 0x5FU,0x70U,0x61U,0x64U,0x64U,0x69U,0x6EU,0x67U,0x3AU,0x00U, - 0x74U,0x6FU,0x70U,0x69U,0x63U,0x5FU,0x73U,0x69U,0x7AU,0x65U, - 0x3AU,0x00U,0x74U,0x6FU,0x70U,0x69U,0x63U,0x5FU,0x64U,0x61U, - 0x74U,0x61U,0x3AU,0x00U,0x47U,0x6FU,0x76U,0x65U,0x72U,0x6EU, - 0x61U,0x6EU,0x63U,0x65U,0x3AU,0x20U,0x59U,0x6FU,0x75U,0x72U, - 0x20U,0x76U,0x6FU,0x74U,0x65U,0x20U,0x69U,0x73U,0x20U,0x61U, - 0x6CU,0x72U,0x65U,0x61U,0x64U,0x79U,0x20U,0x63U,0x61U,0x73U, - 0x74U,0x20U,0x74U,0x68U,0x69U,0x73U,0x20U,0x77U,0x61U,0x79U, - 0x20U,0x66U,0x6FU,0x72U,0x20U,0x74U,0x68U,0x69U,0x73U,0x20U, - 0x74U,0x6FU,0x70U,0x69U,0x63U,0x2EU,0x00U,0x74U,0x6FU,0x70U, - 0x69U,0x63U,0x5FU,0x64U,0x61U,0x74U,0x61U,0x5FU,0x7AU,0x65U, - 0x72U,0x6FU,0x00U,0x76U,0x6FU,0x74U,0x65U,0x73U,0x00U,0x74U, - 0x6FU,0x70U,0x69U,0x63U,0x00U,0x47U,0x6FU,0x76U,0x65U,0x72U, - 0x6EU,0x61U,0x6EU,0x63U,0x65U,0x3AU,0x20U,0x4CU,0x31U,0x20U, - 0x76U,0x6FU,0x74U,0x65U,0x20U,0x72U,0x65U,0x63U,0x6FU,0x72U, - 0x64U,0x2EU,0x20U,0x4EU,0x6FU,0x74U,0x20U,0x79U,0x65U,0x74U, - 0x20U,0x65U,0x6EU,0x6FU,0x75U,0x67U,0x68U,0x20U,0x76U,0x6FU, - 0x74U,0x65U,0x73U,0x20U,0x74U,0x6FU,0x20U,0x61U,0x63U,0x74U, - 0x69U,0x6FU,0x6EU,0x2EU,0x00U,0x47U,0x6FU,0x76U,0x65U,0x72U, - 0x6EU,0x61U,0x6EU,0x63U,0x65U,0x3AU,0x20U,0x4CU,0x32U,0x20U, - 0x76U,0x6FU,0x74U,0x65U,0x20U,0x72U,0x65U,0x63U,0x6FU,0x72U, - 0x64U,0x65U,0x64U,0x2EU,0x20U,0x4DU,0x61U,0x6AU,0x6FU,0x72U, - 0x69U,0x74U,0x79U,0x20U,0x6CU,0x6FU,0x73U,0x74U,0x2CU,0x20U, - 0x75U,0x6EU,0x64U,0x6FU,0x69U,0x6EU,0x67U,0x20U,0x4CU,0x31U, - 0x20U,0x76U,0x6FU,0x74U,0x65U,0x2EU,0x00U,0x47U,0x6FU,0x76U, - 0x65U,0x72U,0x6EU,0x61U,0x6EU,0x63U,0x65U,0x3AU,0x20U,0x4CU, - 0x32U,0x20U,0x76U,0x6FU,0x74U,0x65U,0x20U,0x72U,0x65U,0x63U, - 0x6FU,0x72U,0x64U,0x65U,0x64U,0x2EU,0x20U,0x4EU,0x6FU,0x74U, - 0x20U,0x79U,0x65U,0x74U,0x20U,0x65U,0x6EU,0x6FU,0x75U,0x67U, - 0x68U,0x20U,0x76U,0x6FU,0x74U,0x65U,0x73U,0x20U,0x74U,0x6FU, - 0x20U,0x61U,0x63U,0x74U,0x69U,0x6FU,0x6EU,0x20U,0x4CU,0x31U, - 0x20U,0x76U,0x6FU,0x74U,0x65U,0x2EU,0x2EU,0x00U,0x22U,0x41U, - 0x63U,0x74U,0x69U,0x6FU,0x6EU,0x69U,0x6EU,0x67U,0x20U,0x76U, - 0x6FU,0x74U,0x65U,0x73U,0x22U,0x00U,0x41U,0x63U,0x74U,0x69U, - 0x6FU,0x6EU,0x69U,0x6EU,0x67U,0x20U,0x76U,0x6FU,0x74U,0x65U, - 0x73U,0x00U,0x47U,0x6FU,0x76U,0x65U,0x72U,0x6EU,0x61U,0x6EU, - 0x63U,0x65U,0x3AU,0x20U,0x45U,0x6DU,0x69U,0x74U,0x74U,0x69U, - 0x6EU,0x67U,0x20U,0x69U,0x6EU,0x76U,0x6FU,0x6BU,0x65U,0x20U, - 0x74U,0x6FU,0x20U,0x4CU,0x31U,0x00U,0x47U,0x6FU,0x76U,0x65U, - 0x72U,0x6EU,0x61U,0x6EU,0x63U,0x65U,0x3AU,0x20U,0x45U,0x6DU, - 0x69U,0x74U,0x20U,0x72U,0x65U,0x73U,0x75U,0x6CU,0x74U,0x00U, + 0x59U,0x6FU,0x75U,0x20U,0x61U,0x72U,0x65U,0x20U,0x6EU,0x6FU, + 0x74U,0x20U,0x63U,0x75U,0x72U,0x72U,0x65U,0x6EU,0x74U,0x6CU, + 0x79U,0x20U,0x61U,0x20U,0x67U,0x6FU,0x76U,0x65U,0x72U,0x6EU, + 0x61U,0x6EU,0x63U,0x65U,0x20U,0x6DU,0x65U,0x6DU,0x62U,0x65U, + 0x72U,0x20U,0x61U,0x74U,0x20U,0x74U,0x68U,0x69U,0x73U,0x20U, + 0x74U,0x61U,0x62U,0x6CU,0x65U,0x2EU,0x00U,0x54U,0x00U,0x47U, + 0x6FU,0x76U,0x65U,0x72U,0x6EU,0x61U,0x6EU,0x63U,0x65U,0x3AU, + 0x20U,0x56U,0x61U,0x6CU,0x69U,0x64U,0x20U,0x54U,0x4FU,0x50U, + 0x49U,0x43U,0x20U,0x6DU,0x75U,0x73U,0x74U,0x20U,0x62U,0x65U, + 0x20U,0x73U,0x70U,0x65U,0x63U,0x69U,0x66U,0x69U,0x65U,0x64U, + 0x20U,0x61U,0x73U,0x20U,0x6FU,0x74U,0x78U,0x6EU,0x20U,0x70U, + 0x61U,0x72U,0x61U,0x6DU,0x65U,0x74U,0x65U,0x72U,0x2EU,0x00U, 0x47U,0x6FU,0x76U,0x65U,0x72U,0x6EU,0x61U,0x6EU,0x63U,0x65U, - 0x3AU,0x20U,0x53U,0x75U,0x63U,0x63U,0x65U,0x73U,0x73U,0x66U, - 0x75U,0x6CU,0x6CU,0x79U,0x20U,0x65U,0x6DU,0x69U,0x74U,0x74U, - 0x65U,0x64U,0x20U,0x4CU,0x31U,0x20U,0x76U,0x6FU,0x74U,0x65U, - 0x2EU,0x00U,0x47U,0x6FU,0x76U,0x65U,0x72U,0x6EU,0x61U,0x6EU, - 0x63U,0x65U,0x3AU,0x20U,0x4CU,0x31U,0x20U,0x76U,0x6FU,0x74U, - 0x65U,0x20U,0x65U,0x6DU,0x69U,0x73U,0x73U,0x69U,0x6FU,0x6EU, - 0x20U,0x66U,0x61U,0x69U,0x6CU,0x65U,0x64U,0x2EU,0x00U,0x72U, - 0x65U,0x73U,0x75U,0x6CU,0x74U,0x00U,0x47U,0x6FU,0x76U,0x65U, + 0x3AU,0x20U,0x56U,0x61U,0x6CU,0x69U,0x64U,0x20U,0x73U,0x65U, + 0x61U,0x74U,0x20U,0x74U,0x6FU,0x70U,0x69U,0x63U,0x73U,0x20U, + 0x61U,0x72U,0x65U,0x20U,0x30U,0x20U,0x74U,0x68U,0x72U,0x6FU, + 0x75U,0x67U,0x68U,0x20U,0x31U,0x39U,0x2EU,0x00U,0x47U,0x6FU, + 0x76U,0x65U,0x72U,0x6EU,0x61U,0x6EU,0x63U,0x65U,0x3AU,0x20U, + 0x56U,0x61U,0x6CU,0x69U,0x64U,0x20U,0x68U,0x6FU,0x6FU,0x6BU, + 0x20U,0x74U,0x6FU,0x70U,0x69U,0x63U,0x73U,0x20U,0x61U,0x72U, + 0x65U,0x20U,0x30U,0x20U,0x74U,0x68U,0x72U,0x6FU,0x75U,0x67U, + 0x68U,0x20U,0x39U,0x2EU,0x00U,0x47U,0x6FU,0x76U,0x65U,0x72U, + 0x6EU,0x61U,0x6EU,0x63U,0x65U,0x3AU,0x20U,0x56U,0x61U,0x6CU, + 0x69U,0x64U,0x20U,0x72U,0x65U,0x77U,0x61U,0x72U,0x64U,0x20U, + 0x74U,0x6FU,0x70U,0x69U,0x63U,0x73U,0x20U,0x61U,0x72U,0x65U, + 0x20U,0x52U,0x20U,0x28U,0x72U,0x61U,0x74U,0x65U,0x29U,0x20U, + 0x61U,0x6EU,0x64U,0x20U,0x44U,0x20U,0x28U,0x64U,0x65U,0x6CU, + 0x61U,0x79U,0x29U,0x2EU,0x00U,0x4CU,0x00U,0x47U,0x6FU,0x76U, + 0x65U,0x72U,0x6EU,0x61U,0x6EU,0x63U,0x65U,0x3AU,0x20U,0x4DU, + 0x69U,0x73U,0x73U,0x69U,0x6EU,0x67U,0x20U,0x4CU,0x20U,0x70U, + 0x61U,0x72U,0x61U,0x6DU,0x65U,0x74U,0x65U,0x72U,0x2EU,0x20U, + 0x57U,0x68U,0x69U,0x63U,0x68U,0x20U,0x6CU,0x61U,0x79U,0x65U, + 0x72U,0x20U,0x61U,0x72U,0x65U,0x20U,0x79U,0x6FU,0x75U,0x20U, + 0x76U,0x6FU,0x74U,0x69U,0x6EU,0x67U,0x20U,0x66U,0x6FU,0x72U, + 0x3FU,0x00U,0x47U,0x6FU,0x76U,0x65U,0x72U,0x6EU,0x61U,0x6EU, + 0x63U,0x65U,0x3AU,0x20U,0x4CU,0x61U,0x79U,0x65U,0x72U,0x20U, + 0x70U,0x61U,0x72U,0x61U,0x6DU,0x65U,0x74U,0x65U,0x72U,0x20U, + 0x6DU,0x75U,0x73U,0x74U,0x20U,0x62U,0x65U,0x20U,0x27U,0x31U, + 0x27U,0x20U,0x6FU,0x72U,0x20U,0x27U,0x32U,0x27U,0x2EU,0x00U, + 0x47U,0x6FU,0x76U,0x65U,0x72U,0x6EU,0x61U,0x6EU,0x63U,0x65U, + 0x3AU,0x20U,0x4CU,0x32U,0x73U,0x20U,0x63U,0x61U,0x6EU,0x6EU, + 0x6FU,0x74U,0x20U,0x76U,0x6FU,0x74U,0x65U,0x20U,0x6FU,0x6EU, + 0x20U,0x52U,0x52U,0x2FU,0x52U,0x44U,0x20U,0x61U,0x74U,0x20U, + 0x4CU,0x32U,0x2CU,0x20U,0x64U,0x69U,0x64U,0x20U,0x79U,0x6FU, + 0x75U,0x20U,0x6DU,0x65U,0x61U,0x6EU,0x20U,0x74U,0x6FU,0x20U, + 0x73U,0x65U,0x74U,0x20U,0x4CU,0x3DU,0x31U,0x3FU,0x00U,0x56U, + 0x00U,0x47U,0x6FU,0x76U,0x65U,0x72U,0x6EU,0x61U,0x6EU,0x63U, + 0x65U,0x3AU,0x20U,0x4DU,0x69U,0x73U,0x73U,0x69U,0x6EU,0x67U, + 0x20U,0x6FU,0x72U,0x20U,0x69U,0x6EU,0x63U,0x6FU,0x72U,0x72U, + 0x65U,0x63U,0x74U,0x20U,0x73U,0x69U,0x7AU,0x65U,0x20U,0x6FU, + 0x66U,0x20U,0x56U,0x4FU,0x54U,0x45U,0x20U,0x64U,0x61U,0x74U, + 0x61U,0x20U,0x66U,0x6FU,0x72U,0x20U,0x54U,0x4FU,0x50U,0x49U, + 0x43U,0x20U,0x74U,0x79U,0x70U,0x65U,0x2EU,0x00U,0x74U,0x6FU, + 0x70U,0x69U,0x63U,0x5FU,0x64U,0x61U,0x74U,0x61U,0x5FU,0x72U, + 0x61U,0x77U,0x3AU,0x00U,0x74U,0x6FU,0x70U,0x69U,0x63U,0x5FU, + 0x70U,0x61U,0x64U,0x64U,0x69U,0x6EU,0x67U,0x3AU,0x00U,0x74U, + 0x6FU,0x70U,0x69U,0x63U,0x5FU,0x73U,0x69U,0x7AU,0x65U,0x3AU, + 0x00U,0x74U,0x6FU,0x70U,0x69U,0x63U,0x5FU,0x64U,0x61U,0x74U, + 0x61U,0x3AU,0x00U,0x47U,0x6FU,0x76U,0x65U,0x72U,0x6EU,0x61U, + 0x6EU,0x63U,0x65U,0x3AU,0x20U,0x59U,0x6FU,0x75U,0x72U,0x20U, + 0x76U,0x6FU,0x74U,0x65U,0x20U,0x69U,0x73U,0x20U,0x61U,0x6CU, + 0x72U,0x65U,0x61U,0x64U,0x79U,0x20U,0x63U,0x61U,0x73U,0x74U, + 0x20U,0x74U,0x68U,0x69U,0x73U,0x20U,0x77U,0x61U,0x79U,0x20U, + 0x66U,0x6FU,0x72U,0x20U,0x74U,0x68U,0x69U,0x73U,0x20U,0x74U, + 0x6FU,0x70U,0x69U,0x63U,0x2EU,0x00U,0x74U,0x6FU,0x70U,0x69U, + 0x63U,0x5FU,0x64U,0x61U,0x74U,0x61U,0x5FU,0x7AU,0x65U,0x72U, + 0x6FU,0x00U,0x76U,0x6FU,0x74U,0x65U,0x73U,0x00U,0x74U,0x6FU, + 0x70U,0x69U,0x63U,0x00U,0x47U,0x6FU,0x76U,0x65U,0x72U,0x6EU, + 0x61U,0x6EU,0x63U,0x65U,0x3AU,0x20U,0x4CU,0x31U,0x20U,0x76U, + 0x6FU,0x74U,0x65U,0x20U,0x72U,0x65U,0x63U,0x6FU,0x72U,0x64U, + 0x2EU,0x20U,0x4EU,0x6FU,0x74U,0x20U,0x79U,0x65U,0x74U,0x20U, + 0x65U,0x6EU,0x6FU,0x75U,0x67U,0x68U,0x20U,0x76U,0x6FU,0x74U, + 0x65U,0x73U,0x20U,0x74U,0x6FU,0x20U,0x61U,0x63U,0x74U,0x69U, + 0x6FU,0x6EU,0x2EU,0x00U,0x47U,0x6FU,0x76U,0x65U,0x72U,0x6EU, + 0x61U,0x6EU,0x63U,0x65U,0x3AU,0x20U,0x4CU,0x32U,0x20U,0x76U, + 0x6FU,0x74U,0x65U,0x20U,0x72U,0x65U,0x63U,0x6FU,0x72U,0x64U, + 0x65U,0x64U,0x2EU,0x20U,0x4DU,0x61U,0x6AU,0x6FU,0x72U,0x69U, + 0x74U,0x79U,0x20U,0x6CU,0x6FU,0x73U,0x74U,0x2CU,0x20U,0x75U, + 0x6EU,0x64U,0x6FU,0x69U,0x6EU,0x67U,0x20U,0x4CU,0x31U,0x20U, + 0x76U,0x6FU,0x74U,0x65U,0x2EU,0x00U,0x47U,0x6FU,0x76U,0x65U, + 0x72U,0x6EU,0x61U,0x6EU,0x63U,0x65U,0x3AU,0x20U,0x4CU,0x32U, + 0x20U,0x76U,0x6FU,0x74U,0x65U,0x20U,0x72U,0x65U,0x63U,0x6FU, + 0x72U,0x64U,0x65U,0x64U,0x2EU,0x20U,0x4EU,0x6FU,0x74U,0x20U, + 0x79U,0x65U,0x74U,0x20U,0x65U,0x6EU,0x6FU,0x75U,0x67U,0x68U, + 0x20U,0x76U,0x6FU,0x74U,0x65U,0x73U,0x20U,0x74U,0x6FU,0x20U, + 0x61U,0x63U,0x74U,0x69U,0x6FU,0x6EU,0x20U,0x4CU,0x31U,0x20U, + 0x76U,0x6FU,0x74U,0x65U,0x2EU,0x2EU,0x00U,0x22U,0x41U,0x63U, + 0x74U,0x69U,0x6FU,0x6EU,0x69U,0x6EU,0x67U,0x20U,0x76U,0x6FU, + 0x74U,0x65U,0x73U,0x22U,0x00U,0x41U,0x63U,0x74U,0x69U,0x6FU, + 0x6EU,0x69U,0x6EU,0x67U,0x20U,0x76U,0x6FU,0x74U,0x65U,0x73U, + 0x00U,0x47U,0x6FU,0x76U,0x65U,0x72U,0x6EU,0x61U,0x6EU,0x63U, + 0x65U,0x3AU,0x20U,0x45U,0x6DU,0x69U,0x74U,0x74U,0x69U,0x6EU, + 0x67U,0x20U,0x69U,0x6EU,0x76U,0x6FU,0x6BU,0x65U,0x20U,0x74U, + 0x6FU,0x20U,0x4CU,0x31U,0x00U,0x47U,0x6FU,0x76U,0x65U,0x72U, + 0x6EU,0x61U,0x6EU,0x63U,0x65U,0x3AU,0x20U,0x45U,0x6DU,0x69U, + 0x74U,0x20U,0x72U,0x65U,0x73U,0x75U,0x6CU,0x74U,0x00U,0x47U, + 0x6FU,0x76U,0x65U,0x72U,0x6EU,0x61U,0x6EU,0x63U,0x65U,0x3AU, + 0x20U,0x53U,0x75U,0x63U,0x63U,0x65U,0x73U,0x73U,0x66U,0x75U, + 0x6CU,0x6CU,0x79U,0x20U,0x65U,0x6DU,0x69U,0x74U,0x74U,0x65U, + 0x64U,0x20U,0x4CU,0x31U,0x20U,0x76U,0x6FU,0x74U,0x65U,0x2EU, + 0x00U,0x47U,0x6FU,0x76U,0x65U,0x72U,0x6EU,0x61U,0x6EU,0x63U, + 0x65U,0x3AU,0x20U,0x4CU,0x31U,0x20U,0x76U,0x6FU,0x74U,0x65U, + 0x20U,0x65U,0x6DU,0x69U,0x73U,0x73U,0x69U,0x6FU,0x6EU,0x20U, + 0x66U,0x61U,0x69U,0x6CU,0x65U,0x64U,0x2EU,0x00U,0x72U,0x65U, + 0x73U,0x75U,0x6CU,0x74U,0x00U,0x47U,0x6FU,0x76U,0x65U,0x72U, + 0x6EU,0x61U,0x6EU,0x63U,0x65U,0x3AU,0x20U,0x52U,0x65U,0x77U, + 0x61U,0x72U,0x64U,0x20U,0x72U,0x61U,0x74U,0x65U,0x20U,0x63U, + 0x68U,0x61U,0x6EU,0x67U,0x65U,0x20U,0x61U,0x63U,0x74U,0x69U, + 0x6FU,0x6EU,0x65U,0x64U,0x21U,0x00U,0x47U,0x6FU,0x76U,0x65U, 0x72U,0x6EU,0x61U,0x6EU,0x63U,0x65U,0x3AU,0x20U,0x52U,0x65U, - 0x77U,0x61U,0x72U,0x64U,0x20U,0x72U,0x61U,0x74U,0x65U,0x20U, - 0x63U,0x68U,0x61U,0x6EU,0x67U,0x65U,0x20U,0x61U,0x63U,0x74U, - 0x69U,0x6FU,0x6EU,0x65U,0x64U,0x21U,0x00U,0x47U,0x6FU,0x76U, - 0x65U,0x72U,0x6EU,0x61U,0x6EU,0x63U,0x65U,0x3AU,0x20U,0x52U, - 0x65U,0x77U,0x61U,0x72U,0x64U,0x20U,0x64U,0x65U,0x6CU,0x61U, - 0x79U,0x20U,0x63U,0x68U,0x61U,0x6EU,0x67U,0x65U,0x20U,0x61U, - 0x63U,0x74U,0x69U,0x6FU,0x6EU,0x65U,0x64U,0x21U,0x00U,0x47U, + 0x77U,0x61U,0x72U,0x64U,0x20U,0x64U,0x65U,0x6CU,0x61U,0x79U, + 0x20U,0x63U,0x68U,0x61U,0x6EU,0x67U,0x65U,0x20U,0x61U,0x63U, + 0x74U,0x69U,0x6FU,0x6EU,0x65U,0x64U,0x21U,0x00U,0x47U,0x6FU, + 0x76U,0x65U,0x72U,0x61U,0x6EU,0x63U,0x65U,0x3AU,0x20U,0x54U, + 0x61U,0x72U,0x67U,0x65U,0x74U,0x20U,0x68U,0x6FU,0x6FU,0x6BU, + 0x20U,0x69U,0x73U,0x20U,0x61U,0x6CU,0x72U,0x65U,0x61U,0x64U, + 0x79U,0x20U,0x74U,0x68U,0x65U,0x20U,0x73U,0x61U,0x6DU,0x65U, + 0x20U,0x61U,0x73U,0x20U,0x61U,0x63U,0x74U,0x69U,0x6FU,0x6EU, + 0x65U,0x64U,0x20U,0x68U,0x6FU,0x6FU,0x6BU,0x2EU,0x00U,0x47U, 0x6FU,0x76U,0x65U,0x72U,0x61U,0x6EU,0x63U,0x65U,0x3AU,0x20U, - 0x54U,0x61U,0x72U,0x67U,0x65U,0x74U,0x20U,0x68U,0x6FU,0x6FU, - 0x6BU,0x20U,0x69U,0x73U,0x20U,0x61U,0x6CU,0x72U,0x65U,0x61U, - 0x64U,0x79U,0x20U,0x74U,0x68U,0x65U,0x20U,0x73U,0x61U,0x6DU, - 0x65U,0x20U,0x61U,0x73U,0x20U,0x61U,0x63U,0x74U,0x69U,0x6FU, - 0x6EU,0x65U,0x64U,0x20U,0x68U,0x6FU,0x6FU,0x6BU,0x2EU,0x00U, - 0x47U,0x6FU,0x76U,0x65U,0x72U,0x61U,0x6EU,0x63U,0x65U,0x3AU, - 0x20U,0x48U,0x6FU,0x6FU,0x6BU,0x20U,0x48U,0x61U,0x73U,0x68U, - 0x20U,0x64U,0x6FU,0x65U,0x73U,0x6EU,0x27U,0x74U,0x20U,0x65U, - 0x78U,0x69U,0x73U,0x74U,0x20U,0x6FU,0x6EU,0x20U,0x6CU,0x65U, - 0x64U,0x67U,0x65U,0x72U,0x20U,0x77U,0x68U,0x69U,0x6CU,0x65U, - 0x20U,0x61U,0x63U,0x74U,0x69U,0x6FU,0x6EU,0x69U,0x6EU,0x67U, - 0x20U,0x68U,0x6FU,0x6FU,0x6BU,0x2EU,0x00U,0x65U,0x6DU,0x69U, + 0x48U,0x6FU,0x6FU,0x6BU,0x20U,0x48U,0x61U,0x73U,0x68U,0x20U, + 0x64U,0x6FU,0x65U,0x73U,0x6EU,0x27U,0x74U,0x20U,0x65U,0x78U, + 0x69U,0x73U,0x74U,0x20U,0x6FU,0x6EU,0x20U,0x6CU,0x65U,0x64U, + 0x67U,0x65U,0x72U,0x20U,0x77U,0x68U,0x69U,0x6CU,0x65U,0x20U, + 0x61U,0x63U,0x74U,0x69U,0x6FU,0x6EU,0x69U,0x6EU,0x67U,0x20U, + 0x68U,0x6FU,0x6FU,0x6BU,0x2EU,0x00U,0x45U,0x6DU,0x69U,0x74U, + 0x74U,0x65U,0x64U,0x54U,0x78U,0x6EU,0x00U,0x65U,0x6DU,0x69U, 0x74U,0x5FU,0x72U,0x65U,0x73U,0x75U,0x6CU,0x74U,0x00U,0x47U, 0x6FU,0x76U,0x65U,0x72U,0x6EU,0x61U,0x6EU,0x63U,0x65U,0x3AU, 0x20U,0x45U,0x6DU,0x69U,0x74U,0x20U,0x66U,0x61U,0x69U,0x6CU, 0x65U,0x64U,0x20U,0x64U,0x75U,0x72U,0x69U,0x6EU,0x67U,0x20U, 0x68U,0x6FU,0x6FU,0x6BU,0x20U,0x61U,0x63U,0x74U,0x69U,0x6FU, - 0x6EU,0x69U,0x6EU,0x67U,0x2EU,0x00U,0x47U,0x6FU,0x76U,0x65U, - 0x72U,0x6EU,0x61U,0x6EU,0x63U,0x65U,0x3AU,0x20U,0x48U,0x6FU, - 0x6FU,0x6BU,0x20U,0x61U,0x63U,0x74U,0x69U,0x6FU,0x6EU,0x65U, - 0x64U,0x2EU,0x00U,0x50U,0x72U,0x65U,0x76U,0x69U,0x6FU,0x75U, - 0x73U,0x20U,0x70U,0x72U,0x65U,0x73U,0x65U,0x6EU,0x74U,0x3DU, - 0x3DU,0x3AU,0x00U,0x47U,0x6FU,0x76U,0x65U,0x72U,0x6EU,0x61U, - 0x6EU,0x63U,0x65U,0x3AU,0x20U,0x41U,0x63U,0x74U,0x69U,0x6FU, - 0x6EU,0x69U,0x6EU,0x67U,0x20U,0x73U,0x65U,0x61U,0x74U,0x20U, - 0x63U,0x68U,0x61U,0x6EU,0x67U,0x65U,0x2CU,0x20U,0x62U,0x75U, - 0x74U,0x20U,0x73U,0x65U,0x61U,0x74U,0x20U,0x61U,0x6CU,0x72U, - 0x65U,0x61U,0x64U,0x79U,0x20U,0x63U,0x6FU,0x6EU,0x74U,0x61U, - 0x69U,0x6EU,0x73U,0x20U,0x74U,0x68U,0x65U,0x20U,0x6EU,0x65U, - 0x77U,0x20U,0x6DU,0x65U,0x6DU,0x62U,0x65U,0x72U,0x2EU,0x00U, - 0x47U,0x6FU,0x76U,0x65U,0x72U,0x6EU,0x61U,0x6EU,0x63U,0x65U, - 0x3AU,0x20U,0x4DU,0x6FU,0x76U,0x69U,0x6EU,0x67U,0x20U,0x65U, - 0x78U,0x69U,0x73U,0x74U,0x69U,0x6EU,0x67U,0x20U,0x6DU,0x65U, - 0x6DU,0x62U,0x65U,0x72U,0x20U,0x74U,0x6FU,0x20U,0x6EU,0x65U, - 0x77U,0x20U,0x73U,0x65U,0x61U,0x74U,0x2EU,0x00U,0x6FU,0x70U, - 0x00U,0x45U,0x00U,0x5AU,0x00U,0x4DU,0x00U,0x70U,0x72U,0x65U, - 0x76U,0x69U,0x6FU,0x75U,0x73U,0x5FU,0x70U,0x72U,0x65U,0x73U, - 0x65U,0x6EU,0x74U,0x00U,0x47U,0x6FU,0x76U,0x65U,0x72U,0x6EU, - 0x61U,0x6EU,0x63U,0x65U,0x3AU,0x20U,0x41U,0x63U,0x74U,0x69U, - 0x6FU,0x6EU,0x20U,0x6DU,0x65U,0x6DU,0x62U,0x65U,0x72U,0x20U, - 0x63U,0x68U,0x61U,0x6EU,0x67U,0x65U,0x2EU,0x00U,0x47U,0x6FU, + 0x6EU,0x69U,0x6EU,0x67U,0x2EU,0x00U,0x45U,0x6DU,0x69U,0x74U, + 0x74U,0x65U,0x64U,0x54U,0x78U,0x6EU,0x48U,0x61U,0x73U,0x68U, + 0x00U,0x47U,0x6FU,0x76U,0x65U,0x72U,0x6EU,0x61U,0x6EU,0x63U, + 0x65U,0x3AU,0x20U,0x48U,0x6FU,0x6FU,0x6BU,0x20U,0x61U,0x63U, + 0x74U,0x69U,0x6FU,0x6EU,0x65U,0x64U,0x2EU,0x00U,0x50U,0x72U, + 0x65U,0x76U,0x69U,0x6FU,0x75U,0x73U,0x20U,0x70U,0x72U,0x65U, + 0x73U,0x65U,0x6EU,0x74U,0x3DU,0x3DU,0x3AU,0x00U,0x47U,0x6FU, 0x76U,0x65U,0x72U,0x6EU,0x61U,0x6EU,0x63U,0x65U,0x3AU,0x20U, - 0x49U,0x6EU,0x74U,0x65U,0x72U,0x6EU,0x61U,0x6CU,0x20U,0x6CU, - 0x6FU,0x67U,0x69U,0x63U,0x20U,0x65U,0x72U,0x72U,0x6FU,0x72U, - 0x2EU + 0x41U,0x63U,0x74U,0x69U,0x6FU,0x6EU,0x69U,0x6EU,0x67U,0x20U, + 0x73U,0x65U,0x61U,0x74U,0x20U,0x63U,0x68U,0x61U,0x6EU,0x67U, + 0x65U,0x2CU,0x20U,0x62U,0x75U,0x74U,0x20U,0x73U,0x65U,0x61U, + 0x74U,0x20U,0x61U,0x6CU,0x72U,0x65U,0x61U,0x64U,0x79U,0x20U, + 0x63U,0x6FU,0x6EU,0x74U,0x61U,0x69U,0x6EU,0x73U,0x20U,0x74U, + 0x68U,0x65U,0x20U,0x6EU,0x65U,0x77U,0x20U,0x6DU,0x65U,0x6DU, + 0x62U,0x65U,0x72U,0x2EU,0x00U,0x47U,0x6FU,0x76U,0x65U,0x72U, + 0x6EU,0x61U,0x6EU,0x63U,0x65U,0x3AU,0x20U,0x4DU,0x6FU,0x76U, + 0x69U,0x6EU,0x67U,0x20U,0x65U,0x78U,0x69U,0x73U,0x74U,0x69U, + 0x6EU,0x67U,0x20U,0x6DU,0x65U,0x6DU,0x62U,0x65U,0x72U,0x20U, + 0x74U,0x6FU,0x20U,0x6EU,0x65U,0x77U,0x20U,0x73U,0x65U,0x61U, + 0x74U,0x2EU,0x00U,0x6FU,0x70U,0x00U,0x45U,0x00U,0x5AU,0x00U, + 0x4DU,0x00U,0x70U,0x72U,0x65U,0x76U,0x69U,0x6FU,0x75U,0x73U, + 0x5FU,0x70U,0x72U,0x65U,0x73U,0x65U,0x6EU,0x74U,0x00U,0x47U, + 0x6FU,0x76U,0x65U,0x72U,0x6EU,0x61U,0x6EU,0x63U,0x65U,0x3AU, + 0x20U,0x41U,0x63U,0x74U,0x69U,0x6FU,0x6EU,0x20U,0x6DU,0x65U, + 0x6DU,0x62U,0x65U,0x72U,0x20U,0x63U,0x68U,0x61U,0x6EU,0x67U, + 0x65U,0x2EU,0x00U,0x47U,0x6FU,0x76U,0x65U,0x72U,0x6EU,0x61U, + 0x6EU,0x63U,0x65U,0x3AU,0x20U,0x49U,0x6EU,0x74U,0x65U,0x72U, + 0x6EU,0x61U,0x6CU,0x20U,0x6CU,0x6FU,0x67U,0x69U,0x63U,0x20U, + 0x65U,0x72U,0x72U,0x6FU,0x72U,0x2EU }; static const std::vector RewardHook = @@ -1173,4 +1180,23 @@ static const std::vector RewardHook = 0x6CU,0x6CU,0x79U,0x2EU }; +static const std::vector AcceptHook = +{ + 0x00U,0x61U,0x73U,0x6DU,0x01U,0x00U,0x00U,0x00U,0x01U,0x13U, + 0x03U,0x60U,0x02U,0x7FU,0x7FU,0x01U,0x7FU,0x60U,0x03U,0x7FU, + 0x7FU,0x7EU,0x01U,0x7EU,0x60U,0x01U,0x7FU,0x01U,0x7EU,0x02U, + 0x17U,0x02U,0x03U,0x65U,0x6EU,0x76U,0x02U,0x5FU,0x67U,0x00U, + 0x00U,0x03U,0x65U,0x6EU,0x76U,0x06U,0x61U,0x63U,0x63U,0x65U, + 0x70U,0x74U,0x00U,0x01U,0x03U,0x02U,0x01U,0x02U,0x05U,0x03U, + 0x01U,0x00U,0x02U,0x06U,0x21U,0x05U,0x7FU,0x01U,0x41U,0x80U, + 0x88U,0x04U,0x0BU,0x7FU,0x00U,0x41U,0x80U,0x08U,0x0BU,0x7FU, + 0x00U,0x41U,0x80U,0x08U,0x0BU,0x7FU,0x00U,0x41U,0x80U,0x88U, + 0x04U,0x0BU,0x7FU,0x00U,0x41U,0x80U,0x08U,0x0BU,0x07U,0x08U, + 0x01U,0x04U,0x68U,0x6FU,0x6FU,0x6BU,0x00U,0x02U,0x0AU,0xA2U, + 0x80U,0x00U,0x01U,0x9EU,0x80U,0x00U,0x01U,0x01U,0x7EU,0x41U, + 0x01U,0x41U,0x01U,0x10U,0x80U,0x80U,0x80U,0x80U,0x00U,0x1AU, + 0x41U,0x00U,0x41U,0x00U,0x42U,0x00U,0x10U,0x81U,0x80U,0x80U, + 0x80U,0x00U,0x1AU,0x20U,0x01U,0x0BU +}; + #endif // XAHAU_GENESIS_HOOKS diff --git a/src/test/app/XahauGenesis_test.cpp b/src/test/app/XahauGenesis_test.cpp index b11f1d65c..2659199f7 100644 --- a/src/test/app/XahauGenesis_test.cpp +++ b/src/test/app/XahauGenesis_test.cpp @@ -358,11 +358,11 @@ struct XahauGenesis_test : public beast::unit_test::suite } void - testGovernance() + testGovernanceL1() { using namespace jtx; - testcase("Test governance hook"); + testcase("Test governance membership voting L1"); Env env{*this, envconfig(), supported_amendments() - featureXahauGenesis, nullptr, beast::severities::kTrace @@ -402,7 +402,7 @@ struct XahauGenesis_test : public beast::unit_test::suite m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21); env.close(); - + std::vector initial_members {alice, bob, carol, david, edward}; std::vector initial_members_ids { alice.id(), bob.id(), carol.id(), david.id(), edward.id() }; @@ -587,7 +587,7 @@ struct XahauGenesis_test : public beast::unit_test::suite } } }; - + // 100% vote for a different reward rate { // this will be the new reward rate @@ -632,7 +632,254 @@ struct XahauGenesis_test : public beast::unit_test::suite doL1Vote(__LINE__, alice, 'R', 'D', null_data, vote_data, false); } - + // 100% vote to install the accept hook at hook position 7 + // create a definition for accept hook first + auto const acceptHookHash = + ripple::sha512Half_s(ripple::Slice(XahauGenesis::AcceptHook.data(), XahauGenesis::AcceptHook.size())); + auto const governHookHash = + ripple::sha512Half_s( + ripple::Slice(XahauGenesis::GovernanceHook.data(), XahauGenesis::GovernanceHook.size())); + auto const rewardHookHash = + ripple::sha512Half_s(ripple::Slice(XahauGenesis::RewardHook.data(), XahauGenesis::RewardHook.size())); + { + Json::Value tx (Json::objectValue); + + tx[jss::Account] = m21.human(); + tx[jss::TransactionType] = "SetHook"; + tx[jss::Hooks] = Json::arrayValue; + tx[jss::Hooks][0u] = Json::objectValue; + + tx[jss::Hooks][0u][jss::Hook] = Json::objectValue; + + tx[jss::Hooks][0u][jss::Hook][jss::CreateCode] = strHex(XahauGenesis::AcceptHook); + + tx[jss::Hooks][0u][jss::Hook][jss::HookApiVersion] = "0"; + tx[jss::Hooks][0u][jss::Hook][jss::HookNamespace] = + "0000000000000000000000000000000000000000000000000000000000000000"; + tx[jss::Hooks][0u][jss::Hook][jss::HookOn] = + "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFFFFFBFFFFF"; + + // we'll also make a reference anchor for reward and governance hooks here, so they aren't + // deleted from the ledger in subsequent tests + tx[jss::Hooks][1u] = Json::objectValue; + tx[jss::Hooks][1u][jss::Hook] = Json::objectValue; + tx[jss::Hooks][1u][jss::Hook][jss::HookHash] = strHex(governHookHash); + + + tx[jss::Hooks][2u] = Json::objectValue; + tx[jss::Hooks][2u][jss::Hook] = Json::objectValue; + tx[jss::Hooks][2u][jss::Hook][jss::HookHash] = strHex(rewardHookHash); + + + env(tx, M(__LINE__), fee(XRP(100))); + env.close(); + + + BEAST_EXPECT(!!env.le(ripple::keylet::hookDefinition(acceptHookHash))); + + uint8_t const* data = acceptHookHash.data(); + std::vector accept_data(data, data+32); + + std::cout << "accept_data-strhex: " << strHex(accept_data) << "\n"; + std::vector const null_data + { + 0x00U,0x00U,0x00U,0x00U,0x00U,0x00U,0x00U,0x00U,0x00U,0x00U, + 0x00U,0x00U,0x00U,0x00U,0x00U,0x00U,0x00U,0x00U,0x00U,0x00U, + 0x00U,0x00U,0x00U,0x00U,0x00U,0x00U,0x00U,0x00U,0x00U,0x00U, + 0x00U,0x00U + }; + + doL1Vote(__LINE__, alice, 'H', 7, accept_data, null_data, false); + doL1Vote(__LINE__, bob, 'H', 7, accept_data, null_data, false); + doL1Vote(__LINE__, carol, 'H', 7, accept_data, null_data, false); + doL1Vote(__LINE__, edward, 'H', 7, accept_data, null_data, false); + + env.close(); + env.close(); + + // check if the hook not was installed because we have not given it 100% votes yet + { + auto const hooks = env.le(keylet::hook(env.master.id())); + BEAST_EXPECT(!!hooks && hooks->getFieldArray(sfHooks).size() == 2); + } + + + // now cast final vote + doL1Vote(__LINE__, david, 'H', 7, accept_data, null_data, false); + + env.close(); + env.close(); + + // now check it was installed + { + auto const hooks = env.le(keylet::hook(env.master.id())); + BEAST_EXPECT(!!hooks && hooks->getFieldArray(sfHooks).size() > 7 && + hooks->getFieldArray(sfHooks)[7].isFieldPresent(sfHookHash) && + hooks->getFieldArray(sfHooks)[7].getFieldH256(sfHookHash) == acceptHookHash); + } + + // now change a vote (note that the topic state is never recorded for hooks, so old data is null) + doL1Vote(__LINE__, carol, 'H', 7, null_data, null_data, false); + + env.close(); + env.close(); + + // now check it's still installed + { + auto const hooks = env.le(keylet::hook(env.master.id())); + BEAST_EXPECT(!!hooks && hooks->getFieldArray(sfHooks).size() > 7 && + hooks->getFieldArray(sfHooks)[7].isFieldPresent(sfHookHash) && + hooks->getFieldArray(sfHooks)[7].getFieldH256(sfHookHash) == acceptHookHash); + } + + // now vote to delete it + doL1Vote(__LINE__, alice, 'H', 7, null_data, null_data, false); + doL1Vote(__LINE__, bob, 'H', 7, null_data, null_data, false); + doL1Vote(__LINE__, david, 'H', 7, null_data, null_data, false); + doL1Vote(__LINE__, edward, 'H', 7, null_data, null_data, false); + + + env.close(); + env.close(); + + // now check it's still installed + { + auto const hooks = env.le(keylet::hook(env.master.id())); + BEAST_EXPECT(!!hooks && hooks->getFieldArray(sfHooks).size() > 7 && + !hooks->getFieldArray(sfHooks)[7].isFieldPresent(sfHookHash)); + } + + // vote to place an invalid hook + std::vector invalid_data + { + 0xFFU,0x00U,0x00U,0x00U,0x00U,0x00U,0x00U,0x00U,0x00U,0x00U, + 0x00U,0x00U,0x00U,0x00U,0x00U,0x00U,0x00U,0x00U,0x00U,0x00U, + 0x00U,0x00U,0x00U,0x00U,0x00U,0x00U,0x00U,0x00U,0x00U,0x00U, + 0x00U,0x00U + }; + + doL1Vote(__LINE__, alice, 'H', 1, invalid_data, null_data, false); + doL1Vote(__LINE__, bob, 'H', 1, invalid_data, null_data, false); + doL1Vote(__LINE__, carol, 'H', 1, invalid_data, null_data, false); + doL1Vote(__LINE__, david, 'H', 1, invalid_data, null_data, false); + doL1Vote(__LINE__, edward, 'H', 1, invalid_data, null_data, false, true); + + + uint8_t const* gdata = governHookHash.data(); + std::vector govern_data(gdata, gdata+32); + uint8_t const* rdata = rewardHookHash.data(); + std::vector reward_data(rdata, rdata+32); + + + // vote to put governance hook into position 2 + doL1Vote(__LINE__, alice, 'H', 2, govern_data, null_data, false); + doL1Vote(__LINE__, bob, 'H', 2, govern_data, null_data, false); + doL1Vote(__LINE__, carol, 'H', 2, govern_data, null_data, false); + doL1Vote(__LINE__, david, 'H', 2, govern_data, null_data, false); + doL1Vote(__LINE__, edward, 'H', 2, govern_data, null_data, false); + + env.close(); + env.close(); + + // vote to replace the hook at position 1 with accept + doL1Vote(__LINE__, alice, 'H', 1, accept_data, null_data, false); + doL1Vote(__LINE__, bob, 'H', 1, accept_data, null_data, false); + doL1Vote(__LINE__, carol, 'H', 1, accept_data, null_data, false); + doL1Vote(__LINE__, david, 'H', 1, accept_data, null_data, false); + doL1Vote(__LINE__, edward, 'H', 1, accept_data, null_data, false); + + env.close(); + env.close(); + + // vote to place reward hook at position 2 + doL1Vote(__LINE__, alice, 'H', 0, reward_data, null_data, false); + doL1Vote(__LINE__, bob, 'H', 0, reward_data, null_data, false); + doL1Vote(__LINE__, carol, 'H', 0, reward_data, null_data, false); + doL1Vote(__LINE__, david, 'H', 0, reward_data, null_data, false); + doL1Vote(__LINE__, edward, 'H', 0, reward_data, null_data, false); + + env.close(); + env.close(); + + // hooks array should now look like {governi, accept, reward, nothing ...} + + { + auto const hooksLE = env.le(keylet::hook(env.master.id())); + BEAST_EXPECT(!!hooksLE && hooksLE->getFieldArray(sfHooks).size() >= 3); + + if (hooksLE && hooksLE->getFieldArray(sfHooks).size() >=3) + { + auto const hooks = hooksLE->getFieldArray(sfHooks); + BEAST_EXPECT(hooks[0].getFieldH256(sfHookHash) == rewardHookHash); + BEAST_EXPECT(hooks[1].getFieldH256(sfHookHash) == acceptHookHash); + BEAST_EXPECT(hooks[2].getFieldH256(sfHookHash) == governHookHash); + } + } + + // set hook 1 back to reward + doL1Vote(__LINE__, alice, 'H', 1, reward_data, null_data, false); + doL1Vote(__LINE__, bob, 'H', 1, reward_data, null_data, false); + doL1Vote(__LINE__, carol, 'H', 1, reward_data, null_data, false); + doL1Vote(__LINE__, david, 'H', 1, reward_data, null_data, false); + doL1Vote(__LINE__, edward, 'H', 1, reward_data, null_data, false); + + env.close(); + env.close(); + + // set hook 0 back to govern + doL1Vote(__LINE__, alice, 'H', 0, govern_data, null_data, false); + doL1Vote(__LINE__, bob, 'H', 0, govern_data, null_data, false); + doL1Vote(__LINE__, carol, 'H', 0, govern_data, null_data, false); + doL1Vote(__LINE__, david, 'H', 0, govern_data, null_data, false); + doL1Vote(__LINE__, edward, 'H', 0, govern_data, null_data, false); + + env.close(); + env.close(); + + // delete hook at 2 + doL1Vote(__LINE__, alice, 'H', 2, null_data, null_data, false); + doL1Vote(__LINE__, bob, 'H', 2, null_data, null_data, false); + doL1Vote(__LINE__, carol, 'H', 2, null_data, null_data, false); + doL1Vote(__LINE__, david, 'H', 2, null_data, null_data, false); + doL1Vote(__LINE__, edward, 'H', 2, null_data, null_data, false); + + env.close(); + env.close(); + + + // check we're back the way we were + { + auto const hooksLE = env.le(keylet::hook(env.master.id())); + BEAST_EXPECT(!!hooksLE && hooksLE->getFieldArray(sfHooks).size() >= 2); + + if (hooksLE && hooksLE->getFieldArray(sfHooks).size() >=2) + { + auto const hooks = hooksLE->getFieldArray(sfHooks); + BEAST_EXPECT(hooks[0].getFieldH256(sfHookHash) == governHookHash); + BEAST_EXPECT(hooks[1].getFieldH256(sfHookHash) == rewardHookHash); + BEAST_EXPECT(hooks.size() == 2 || !hooks[2].isFieldPresent(sfHookHash)); + } + } + + // change a vote, and ensure nothing changed + doL1Vote(__LINE__, alice, 'H', 0, reward_data, null_data, false); + env.close(); + env.close(); + { + auto const hooksLE = env.le(keylet::hook(env.master.id())); + BEAST_EXPECT(!!hooksLE && hooksLE->getFieldArray(sfHooks).size() >= 2); + + if (hooksLE && hooksLE->getFieldArray(sfHooks).size() >=2) + { + auto const hooks = hooksLE->getFieldArray(sfHooks); + BEAST_EXPECT(hooks[0].getFieldH256(sfHookHash) == governHookHash); + BEAST_EXPECT(hooks[1].getFieldH256(sfHookHash) == rewardHookHash); + BEAST_EXPECT(hooks.size() == 2 || !hooks[2].isFieldPresent(sfHookHash)); + } + } + + } + uint8_t const member_count_key[32] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,'M','C'}; std::vector const null_acc_id {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; @@ -941,28 +1188,21 @@ struct XahauGenesis_test : public beast::unit_test::suite std::vector finalSeats { &bob, &edward, &m6, &m7, &alice, &carol, &david, &m8, &m9, &m10, &m11, &m12, &m13, &m14, &m15, &m16, &m17, &m18, &m19, &m20}; + for (int i = 0; i < 20; ++i) checkSeat(i, *(finalSeats[i])); - + } - - // auto hooksArray = // RH TODO: // governance hook tests: - - // action a hook change - // action a hook change to a non-existent hook - // action a reward rate change - // action a reward delay change // L2 versions of all of the above - // reward hook tests: // test claim reward before time // test claim reward after time @@ -999,7 +1239,7 @@ struct XahauGenesis_test : public beast::unit_test::suite //testPlainActivation(); //testWithSignerList(); //testWithRegularKey(); - testGovernance(); + testGovernanceL1(); } };