From 84336eb71236d4df789789d6a1d49d3ff75961dc Mon Sep 17 00:00:00 2001 From: neithanmo Date: Wed, 15 Jan 2025 09:06:08 -0600 Subject: [PATCH 1/6] Add support for neuron voting power updates --- app/src/candid/candid_parser.c | 3 +- app/src/candid/candid_types.h | 7 ++ app/src/candid/nns_parser.c | 60 ++++++++++++- app/src/parser_impl.c | 7 ++ app/src/parser_txdef.h | 4 +- tests_zemu/tests/candid.test.ts | 154 ++++++++++++++++---------------- 6 files changed, 156 insertions(+), 79 deletions(-) diff --git a/app/src/candid/candid_parser.c b/app/src/candid/candid_parser.c index 590ea08c..d51a147a 100644 --- a/app/src/candid/candid_parser.c +++ b/app/src/candid/candid_parser.c @@ -151,7 +151,6 @@ parser_error_t readCandidManageNeuron(parser_tx_t *tx, const uint8_t *input, uin CHECK_PARSER_ERR(readAndCheckRootType(&ctx)) - CHECK_PARSER_ERR(getCandidTypeFromTable(&txn, tx->candid_rootType)) CHECK_PARSER_ERR(readCandidRecordLength(&txn)) @@ -164,7 +163,7 @@ parser_error_t readCandidManageNeuron(parser_tx_t *tx, const uint8_t *input, uin return readNNSManageNeuron(&ctx, &txn); default: - ZEMU_LOGF(100, "Error: transaction type not supported\n") + zemu_log("Error: transaction type not supported\n"); } return parser_unexpected_value; diff --git a/app/src/candid/candid_types.h b/app/src/candid/candid_types.h index 0ba997f0..896fbd13 100644 --- a/app/src/candid/candid_types.h +++ b/app/src/candid/candid_types.h @@ -83,6 +83,7 @@ typedef enum { hash_field_proposal = 3000310834, hash_field_follow_topic = 338645423, hash_field_follow_followees = 3407357762, + // hash_neuron_voting_power = , } txn_hash_fields; typedef enum { @@ -124,6 +125,7 @@ typedef enum { hash_command_Spawn = 345247259, hash_command_Split = 345791162, hash_command_Follow = 774571409, + hash_command_RefreshVotingPower = 971637731, hash_command_ClaimOrRefresh = 1349619708, hash_command_Configure = 1647237574, hash_command_RegisterVote = 2455066893, @@ -293,6 +295,10 @@ typedef struct { const uint8_t* followees_ptr; } candid_Follow_t; +typedef struct { + candid_NeuronId neuron_id; +} candid_RefreshVotingPower_t; + typedef struct { uint8_t list_size; const uint8_t *permissions_list_ptr; @@ -368,6 +374,7 @@ typedef struct { candid_Disburse_t disburse; candid_RegisterVote_t vote; candid_Follow_t follow; + candid_RefreshVotingPower_t refresh_voting_power; sns_NeuronPermissions_t neuronPermissions; sns_Disburse_t sns_disburse; diff --git a/app/src/candid/nns_parser.c b/app/src/candid/nns_parser.c index bc178a8b..4cad6ba8 100644 --- a/app/src/candid/nns_parser.c +++ b/app/src/candid/nns_parser.c @@ -343,6 +343,59 @@ __Z_INLINE parser_error_t readCommandFollow(parser_context_t *ctx, candid_transa return parser_ok; } +// Note: +// according to spec this should ve an empty record +// https://github.com/dfinity/ic/blob/master/rs/nns/governance/canister/governance.did#L111 +__Z_INLINE parser_error_t readCommandRefreshVotingPower(parser_context_t *ctx, candid_transaction_t *txn, candid_ManageNeuron_t* val) { + zemu_log("readCommandRefreshVotingPower\n"); + // Check sanity Merge + CHECK_PARSER_ERR(getCandidTypeFromTable(txn, txn->element.implementation)) + zemu_log("getCandidTypeFromTable\n"); + zemu_log("is an Empty record\n"); + CHECK_PARSER_ERR(readCandidRecordLength(txn)) + zemu_log("readCandidRecordLength\n"); + ZEMU_LOGF(50, "record_len: %d \n",txn->txn_length); + // if (txn->txn_length != 1) { + // return parser_unexpected_value; + // } + // txn->element.variant_index = 0; + // CHECK_PARSER_ERR(readCandidInnerElement(txn, &txn->element)) + // zemu_log("readCandidInnerElement\n"); + // + // uint64_t hash = txn->element.field_hash; + // ZEMU_LOGF(50, "field_hash: %02x%02x%02x%02x%02x%02x%02x%02x\n", + // (unsigned)((hash >> 56) & 0xFF), + // (unsigned)((hash >> 48) & 0xFF), + // (unsigned)((hash >> 40) & 0xFF), + // (unsigned)((hash >> 32) & 0xFF), + // (unsigned)((hash >> 24) & 0xFF), + // (unsigned)((hash >> 16) & 0xFF), + // (unsigned)((hash >> 8) & 0xFF), + // (unsigned)(hash & 0xFF)); + // + // if (txn->element.field_hash != hash_source_neuron_id) { + // return parser_unexpected_type; + // } + // + // CHECK_PARSER_ERR(getCandidTypeFromTable(txn, txn->element.implementation)) + // CHECK_PARSER_ERR(readCandidOptional(txn)) + // + // CHECK_PARSER_ERR(getCandidTypeFromTable(txn, txn->element.implementation)) + // CHECK_PARSER_ERR(readCandidRecordLength(txn)) + // if (txn->txn_length != 1) { + // return parser_unexpected_value; + // } + // CHECK_PARSER_ERR(readCandidInnerElement(txn, &txn->element)) + // + // if (txn->element.field_hash != hash_id || txn->element.implementation != Nat64) { + // return parser_unexpected_type; + // } + // + // CHECK_PARSER_ERR(readCandidNat64(ctx, &val->command.refresh_voting_power.neuron_id.id)) + + return parser_ok; +} + __Z_INLINE parser_error_t readOperationSetDissolveTimestamp(parser_context_t *ctx, candid_transaction_t *txn, candid_Operation_t* operation) { // Check sanity SetDissolvedTimestamp CHECK_PARSER_ERR(getCandidTypeFromTable(txn, txn->element.implementation)) @@ -519,6 +572,7 @@ __Z_INLINE parser_error_t readCommandConfigure(parser_context_t *ctx, candid_tra } parser_error_t readNNSManageNeuron(parser_context_t *ctx, candid_transaction_t *txn) { + zemu_log_stack("readNNSManageNeuron\n"); if (ctx == NULL || txn == NULL || txn->txn_length != 3) { return parser_unexpected_error; } @@ -549,6 +603,7 @@ parser_error_t readNNSManageNeuron(parser_context_t *ctx, candid_transaction_t * if (val->has_id) { CHECK_PARSER_ERR(readCandidNat64(ctx, &val->id.id)) } + ZEMU_LOGF(50, "ID: %d\n", val->id.id); // Check sanity Command CHECK_PARSER_ERR(getCandidTypeFromTable(txn, ctx->tx_obj->candid_rootType)) @@ -612,9 +667,12 @@ parser_error_t readNNSManageNeuron(parser_context_t *ctx, candid_transaction_t * case hash_command_Follow: CHECK_PARSER_ERR(readCommandFollow(ctx, txn, val)) break; + case hash_command_RefreshVotingPower: + CHECK_PARSER_ERR(readCommandRefreshVotingPower(ctx, txn, val)) + break; default: - ZEMU_LOGF(100, "Unimplemented command | Hash: %llu\n", val->command.hash) + ZEMU_LOGF(100, "Unimplemented command | Hash: %d%d\n", val->command.hash >> 32 , val->command.hash & 0xFFFFFFFF) return parser_unexpected_type; } } diff --git a/app/src/parser_impl.c b/app/src/parser_impl.c index 129c5216..794e4fc2 100644 --- a/app/src/parser_impl.c +++ b/app/src/parser_impl.c @@ -315,6 +315,9 @@ GEN_PARSER_PB(ic_nns_governance_pb_v1_ManageNeuron) GEN_PARSER_PB(ListNeurons) parser_error_t getManageNeuronType(const parser_tx_t *v, manageNeuron_e *mn_type) { + zemu_log("getManageNeuronType****\n"); + ZEMU_LOGF(50, "method_type %d\n", v->tx_fields.call.method_type); + switch (v->tx_fields.call.method_type) { case pb_manageneuron: { pb_size_t command = v->tx_fields.call.data.ic_nns_governance_pb_v1_ManageNeuron.which_command; @@ -431,7 +434,11 @@ parser_error_t getManageNeuronType(const parser_tx_t *v, manageNeuron_e *mn_type } parser_error_t readPayload(parser_tx_t *v, uint8_t *buffer, size_t bufferLen) { + zemu_log_stack("readPayload***\n"); char *method = v->tx_fields.call.method_name.data; + zemu_log_stack("***method: "); + zemu_log_stack(method); + zemu_log_stack("\n"); manageNeuron_e mn_type; v->tx_fields.call.is_sns = 0; // we'll set this var later if is sns diff --git a/app/src/parser_txdef.h b/app/src/parser_txdef.h index 55e5203d..0f0e7e2a 100644 --- a/app/src/parser_txdef.h +++ b/app/src/parser_txdef.h @@ -68,7 +68,7 @@ typedef enum { } method_type_e; typedef enum { -Configure = 2, + Configure = 2, Configure_IncreaseDissolveDelay = 2001, Configure_StartDissolving = 2002, Configure_StopDissolving = 2003, @@ -98,6 +98,8 @@ Configure = 2, Configure_RemoveHotkeyCandid = 1010, RegisterVoteCandid = 1011, FollowCandid = 1012, + // New command for manage neuron transactions + RefreshVotingPower = 973889507, SNS_AddNeuronPermissions = 3000, SNS_RemoveNeuronPermissions = 3001, diff --git a/tests_zemu/tests/candid.test.ts b/tests_zemu/tests/candid.test.ts index 1d290433..30a1bc9f 100644 --- a/tests_zemu/tests/candid.test.ts +++ b/tests_zemu/tests/candid.test.ts @@ -38,81 +38,85 @@ const STAKE_TXS = [ const path = "m/44'/223'/0'/0/0" const CANDID_TRANSACTIONS = [ { - name: 'candid_send_icp', - blob: 'd9d9f7a167636f6e74656e74a663617267589b4449444c066d7b6c01e0a9b302786e006c01d6f68e8001786e036c06fbca0100c6fcb60201ba89e5c20478a2de94eb060282f3f3910c04d8a38ca80d01010520cec37e3d182336a8903665cce69b0f2b8eacb312f3f02e5366948434f4deead910270000000000007a087082f17eccca01201d02dc69531d6e8375cf08e80e6ecdd73b93b0ff60cc297b8a3fea531c0200000000e87648170000006b63616e69737465725f69644a000000000000000201016e696e67726573735f6578706972791b1762552482491cc06b6d6574686f645f6e616d65687472616e736665726c726571756573745f747970656463616c6c6673656e646572581d19aa3d42c048dd7d14f0cfa0df69a1c1381780f6e9a137abaa6a82e302', - }, - { - name: 'candid_split_neuron', - blob: 'd9d9f7a167636f6e74656e74a6636172675903334449444c426c01dbb701786e006e686e786c02dbe2be950902ef9999fe09036c01b9ef938008786d006c02afa3bda10175c2cee0d80c066c006c029cb1fa2502ba89e5c204786b039ef5cc0f089992ccd00109dae1c99903786e0a6c01d7ab010b6c01f6b0989a08026c018eddc3a60d026c018dc3b2b303796c01c88ecad50a786b0796a7f7150df381d4ab020eb09b9ba40708d0fb87af070890f29afe070fe4ac938d0c08c3a2f6c90e106e116c01a78882820a126c02ea99cff20475b2b8d4960b016c01c38fbbd10b016c05f5bbe3900178d2bbf0d9017eb9ef93800878dbe2be950902ef9999fe09786c04efd6e4027198abec810118b6f798b2013ea696a48708716e716c02cbe4fdc70471fc91f4f805186e196c02dbb70101bac7a7fa0d1a6c01b99d9da50b796d7b6c01cedfa0a8041d6e1e6c01e0a9b302786e206c02a9ddf49b071fd8a38ca80d216b0b9b9cd0a40104bab5f1a40105918bacf10207fc9fc683050cc6b3bb9106138db2d592091498a5d0c7091591b2fab80a16e0f8fffd0b1789b8b3b30e1ca3f3c0ad0f226e236b02cd8e8eb9041dcebee1d308006e256c03dbb70101cbe2b58b0824f1bb8b880d266c02e4d7bee905758effd6e90e1d6c02dbb701029df1afe7071f6e296c01f5bbe39001786c01a9ddf49b071f6b02fdf59aec0b2be3b586ff0c2c6e2d6c03ce9ca6ce012af382ccb3072eb9ef938008786c01c2cee0d80c066c02007501306d316c0184aead33326d2f6c01a4ccf7dd0a346c089eb493cf0378befa8dd40479be8fe6e30478ce89be97067886f998bc0978c5cae3d40a7893a190e00c78f5e1d0e70d786d686c018594e2c50b376b02bf80e42b29c6a6e4b90a296e396c01f0a2cabb0b3a6c0196bdb4e904716b0a93a7e09d021bd881c9c40327d69ce79d0a2882ffcfaa0c2fe3c3c5990e33b1a5aea10e35f5d9d7a50e36fad5ddf40e38db9cebf70e3bd6f4c7ff0f3c6e3d6b0b9b9cd0a40104bab5f1a40105918bacf10207fc9fc683050cc6b3bb9106138db2d592091498a5d0c7091591b2fab80a16e0f8fffd0b1789b8b3b30e1ca3f3c0ad0f226e3f6c03dbb70101cbe2b58b08c000f1bb8b880d2601c10000010100e1f50500000000010115cd5b07000000006b63616e69737465725f69644a000000000000000101016e696e67726573735f6578706972791b16d048c672ae96c06b6d6574686f645f6e616d656d6d616e6167655f6e6575726f6e6c726571756573745f747970656463616c6c6673656e646572581d19aa3d42c048dd7d14f0cfa0df69a1c1381780f6e9a137abaa6a82e302', - }, - { - name: 'candid_merge_neuron', - blob: 'd9d9f7a167636f6e74656e74a6636172675903344449444c426c01dbb701786e006e686e786c02dbe2be950902ef9999fe09036c01b9ef938008786d006c02afa3bda10175c2cee0d80c066c006c029cb1fa2502ba89e5c204786b039ef5cc0f089992ccd00109dae1c99903786e0a6c01d7ab010b6c01f6b0989a08026c018eddc3a60d026c018dc3b2b303796c01c88ecad50a786b0796a7f7150df381d4ab020eb09b9ba40708d0fb87af070890f29afe070fe4ac938d0c08c3a2f6c90e106e116c01a78882820a126c02ea99cff20475b2b8d4960b016c01c38fbbd10b016c05f5bbe3900178d2bbf0d9017eb9ef93800878dbe2be950902ef9999fe09786c04efd6e4027198abec810118b6f798b2013ea696a48708716e716c02cbe4fdc70471fc91f4f805186e196c02dbb70101bac7a7fa0d1a6c01b99d9da50b796d7b6c01cedfa0a8041d6e1e6c01e0a9b302786e206c02a9ddf49b071fd8a38ca80d216b0b9b9cd0a40104bab5f1a40105918bacf10207fc9fc683050cc6b3bb9106138db2d592091498a5d0c7091591b2fab80a16e0f8fffd0b1789b8b3b30e1ca3f3c0ad0f226e236b02cd8e8eb9041dcebee1d308006e256c03dbb70101cbe2b58b0824f1bb8b880d266c02e4d7bee905758effd6e90e1d6c02dbb701029df1afe7071f6e296c01f5bbe39001786c01a9ddf49b071f6b02fdf59aec0b2be3b586ff0c2c6e2d6c03ce9ca6ce012af382ccb3072eb9ef938008786c01c2cee0d80c066c02007501306d316c0184aead33326d2f6c01a4ccf7dd0a346c089eb493cf0378befa8dd40479be8fe6e30478ce89be97067886f998bc0978c5cae3d40a7893a190e00c78f5e1d0e70d786d686c018594e2c50b376b02bf80e42b29c6a6e4b90a296e396c01f0a2cabb0b3a6c0196bdb4e904716b0a93a7e09d021bd881c9c40327d69ce79d0a2882ffcfaa0c2fe3c3c5990e33b1a5aea10e35f5d9d7a50e36fad5ddf40e38db9cebf70e3bd6f4c7ff0f3c6e3d6b0b9b9cd0a40104bab5f1a40105918bacf10207fc9fc683050cc6b3bb9106138db2d592091498a5d0c7091591b2fab80a16e0f8fffd0b1789b8b3b30e1ca3f3c0ad0f226e3f6c03dbb70101cbe2b58b08c000f1bb8b880d2601c100000106017b000000000000000101c8010000000000006b63616e69737465725f69644a000000000000000101016e696e67726573735f6578706972791b16d09dc450eb9bc06b6d6574686f645f6e616d656d6d616e6167655f6e6575726f6e6c726571756573745f747970656463616c6c6673656e646572581d19aa3d42c048dd7d14f0cfa0df69a1c1381780f6e9a137abaa6a82e302', - }, - { - name: 'candid_set_dissolve_delay', - blob: 'd9d9f7a167636f6e74656e74a7636172675904044449444c506c01dbb701786e006e796e686e786c03bc949d820302dbe2be950903ef9999fe09046c01b9ef938008786d006c02afa3bda10175c2cee0d80c076c006c029cb1fa2503ba89e5c204786b039ef5cc0f099992ccd0010adae1c99903786e0b6c01d7ab010c6c01f6b0989a08036c018eddc3a60d036c01d0e1e9f60c7e6c018dc3b2b303796c01c88ecad50a786b0996a7f7150ef381d4ab020f8cb2f18c0710b09b9ba40709d0fb87af070990f29afe0711e4ac938d0c09f7aacfd80d09c3a2f6c90e126e136c01a78882820a146c02ea99cff20475b2b8d4960b016c01c38fbbd10b016c05f5bbe3900178d2bbf0d9017eb9ef93800878dbe2be950903ef9999fe09786c04efd6e4027198abec81011ab6f798b201cc00a696a48708716e716c02cbe4fdc70471fc91f4f8051a6e1b6c02dbb70101bac7a7fa0d1c6c01bbb4b09703026c01b99d9da50b796d7b6c01cedfa0a804206e216c01e0a9b302786e236c02a9ddf49b0722d8a38ca80d246b0c9b9cd0a40105bab5f1a40106918bacf10208fc9fc683050dc6b3bb9106158db2d592091698a5d0c7091791b2fab80a18e0f8fffd0b198bf3afac0d1e89b8b3b30e1fa3f3c0ad0f256e266b02cd8e8eb90420cebee1d308006e286c03dbb70101cbe2b58b0827f1bb8b880d296c02e4d7bee905758effd6e90e206c02dbb701039df1afe707226e2c6c01f5bbe39001786c01a9ddf49b07226b02fdf59aec0b2ee3b586ff0c2f6e306c03ce9ca6ce012df382ccb30731b9ef938008786c028fa0804178cf898dd304786e336c08fed391bd0178abe1b1d00134dcd0a0ab0378dfbcb4d80478edc6ecab087993e5e481097890b090af0e78ca9ab7d20f786e356c03d889bea60d04b5f6f9e90e03c6f6ebeb0e366c02f9889a5778b2cc99e705786e386c01edbb85f901396e3a6c02cfbe93a4043bc796cdbe0b036c01c2cee0d80c076c020075013d6d3e6c0184aead333f6e7e6d326c02f8b9b6c904c100a4ccf7dd0ac2006c089eb493cf0378befa8dd40479be8fe6e30478ce89be97067886f998bc0978c5cae3d40a7893a190e00c78f5e1d0e70d786d686c018594e2c50bc5006b02bf80e42b2cc6a6e4b90a2c6ec7006c01f0a2cabb0bc8006c0196bdb4e904716b0c93a7e09d021dd881c9c4032ad69ce79d0a2b82ffcfaa0c329e9598a00d379dfa94a40d3ce3c3c5990ec000b1a5aea10ec300f5d9d7a50ec400fad5ddf40ec600db9cebf70ec900d6f4c7ff0fca006ecb006b0c9b9cd0a40105bab5f1a40106918bacf10208fc9fc683050dc6b3bb9106158db2d592091698a5d0c7091791b2fab80a18e0f8fffd0b198bf3afac0d1e89b8b3b30e1fa3f3c0ad0f256ecd006c03dbb70101cbe2b58b08ce00f1bb8b880d2901cf0001d843d60486d084150104010868973a6500000000006b63616e69737465725f69644a000000000000000101016e696e67726573735f6578706972791b172198c3df1c1b406b6d6574686f645f6e616d656d6d616e6167655f6e6575726f6e656e6f6e6365500000018413e4abc5061f49e2686dc47c6c726571756573745f747970656463616c6c6673656e646572581d19aa3d42c048dd7d14f0cfa0df69a1c1381780f6e9a137abaa6a82e302', - }, - { - name: 'candid_spawn_neuron', - blob: 'd9d9f7a167636f6e74656e74a6636172675904114449444c4e6c01dbb701786e006e796e686e786c03bc949d820302dbe2be950903ef9999fe09046c01b9ef938008786d006c02afa3bda10175c2cee0d80c076c006c029cb1fa2503ba89e5c204786b039ef5cc0f099992ccd0010adae1c99903786e0b6c01d7ab010c6c01f6b0989a08036c018eddc3a60d036c01d0e1e9f60c7e6c018dc3b2b303796c01c88ecad50a786b0996a7f7150ef381d4ab020f8cb2f18c0710b09b9ba40709d0fb87af070990f29afe0711e4ac938d0c09f7aacfd80d09c3a2f6c90e126e136c01a78882820a146c02ea99cff20475b2b8d4960b016c01c38fbbd10b016c05f5bbe3900178d2bbf0d9017eb9ef93800878dbe2be950903ef9999fe09786c04efd6e4027198abec81011ab6f798b201ca00a696a48708716e716c02cbe4fdc70471fc91f4f8051a6e1b6c02dbb70101bac7a7fa0d1c6c01bbb4b09703026c01b99d9da50b796d7b6c01cedfa0a804206e216c01e0a9b302786e236c02a9ddf49b0722d8a38ca80d246b0c9b9cd0a40105bab5f1a40106918bacf10208fc9fc683050dc6b3bb9106158db2d592091698a5d0c7091791b2fab80a18e0f8fffd0b198bf3afac0d1e89b8b3b30e1fa3f3c0ad0f256e266b02cd8e8eb90420cebee1d308006e286c03dbb70101cbe2b58b0827f1bb8b880d296c02e4d7bee905758effd6e90e206c02dbb701039df1afe707226e2c6c01f5bbe39001786c01a9ddf49b07226b02fdf59aec0b2ee3b586ff0c2f6e306c03ce9ca6ce012df382ccb30731b9ef938008786c07fed391bd0178dcd0a0ab0378dfbcb4d80478edc6ecab087993e5e481097890b090af0e78ca9ab7d20f786e336c03d889bea60d04b5f6f9e90e03c6f6ebeb0e346c02f9889a5778b2cc99e705786e366c01edbb85f901376e386c02cfbe93a40439c796cdbe0b036c01c2cee0d80c076c020075013b6d3c6c0184aead333d6e7e6d326c02f8b9b6c9043fa4ccf7dd0ac0006c089eb493cf0378befa8dd40479be8fe6e30478ce89be97067886f998bc0978c5cae3d40a7893a190e00c78f5e1d0e70d786d686c018594e2c50bc3006b02bf80e42b2cc6a6e4b90a2c6ec5006c01f0a2cabb0bc6006c0196bdb4e904716b0c93a7e09d021dd881c9c4032ad69ce79d0a2b82ffcfaa0c329e9598a00d359dfa94a40d3ae3c3c5990e3eb1a5aea10ec100f5d9d7a50ec200fad5ddf40ec400db9cebf70ec700d6f4c7ff0fc8006ec9006b0c9b9cd0a40105bab5f1a40106918bacf10208fc9fc683050dc6b3bb9106158db2d592091698a5d0c7091791b2fab80a18e0f8fffd0b198bf3afac0d1e89b8b3b30e1fa3f3c0ad0f256ecb006c03dbb70101cbe2b58b08cc00f1bb8b880d2901cd000100406c4830c8a17a0100011e00000001011d4e9644473effb4cd436eec1a9c8c08168021f63879c97d1f6fdc89dd02013930000000000000006b63616e69737465725f69644a000000000000000101016e696e67726573735f6578706972791b172cfa155781e8406b6d6574686f645f6e616d656d6d616e6167655f6e6575726f6e6c726571756573745f747970656463616c6c6673656e646572581d19aa3d42c048dd7d14f0cfa0df69a1c1381780f6e9a137abaa6a82e302', - }, - { - name: 'candid_list_neurons', - blob: 'd9d9f7a167636f6e74656e74a66361726758324449444c036d786e7e6c03acbe9cc50700ccd2d3bf0c01dabcd1c70d7e01020200c8c056ea395dd500406c4830c8a17a00006b63616e69737465725f69644a000000000000000101016e696e67726573735f6578706972791b17e4dd23029fe8006b6d6574686f645f6e616d656c6c6973745f6e6575726f6e736c726571756573745f747970656463616c6c6673656e646572581d19aa3d42c048dd7d14f0cfa0df69a1c1381780f6e9a137abaa6a82e302', - }, - { - name: 'candid_stake_maturity', - blob: 'd9d9f7a167636f6e74656e74a6636172675903e84449444c4e6c01dbb701786e006e796e686e786c03bc949d820302dbe2be950903ef9999fe09046c01b9ef938008786d006c02afa3bda10175c2cee0d80c076c006c029cb1fa2503ba89e5c204786b039ef5cc0f099992ccd0010adae1c99903786e0b6c01d7ab010c6c01f6b0989a08036c018eddc3a60d036c01d0e1e9f60c7e6c018dc3b2b303796c01c88ecad50a786b0996a7f7150ef381d4ab020f8cb2f18c0710b09b9ba40709d0fb87af070990f29afe0711e4ac938d0c09f7aacfd80d09c3a2f6c90e126e136c01a78882820a146c02ea99cff20475b2b8d4960b016c01c38fbbd10b016c05f5bbe3900178d2bbf0d9017eb9ef93800878dbe2be950903ef9999fe09786c04efd6e4027198abec81011ab6f798b201ca00a696a48708716e716c02cbe4fdc70471fc91f4f8051a6e1b6c02dbb70101bac7a7fa0d1c6c01bbb4b09703026c01b99d9da50b796d7b6c01cedfa0a804206e216c01e0a9b302786e236c02a9ddf49b0722d8a38ca80d246b0c9b9cd0a40105bab5f1a40106918bacf10208fc9fc683050dc6b3bb9106158db2d592091698a5d0c7091791b2fab80a18e0f8fffd0b198bf3afac0d1e89b8b3b30e1fa3f3c0ad0f256e266b02cd8e8eb90420cebee1d308006e286c03dbb70101cbe2b58b0827f1bb8b880d296c02e4d7bee905758effd6e90e206c02dbb701039df1afe707226e2c6c01f5bbe39001786c01a9ddf49b07226b02fdf59aec0b2ee3b586ff0c2f6e306c03ce9ca6ce012df382ccb30731b9ef938008786c07fed391bd0178dcd0a0ab0378dfbcb4d80478edc6ecab087993e5e481097890b090af0e78ca9ab7d20f786e336c03d889bea60d04b5f6f9e90e03c6f6ebeb0e346c02f9889a5778b2cc99e705786e366c01edbb85f901376e386c02cfbe93a40439c796cdbe0b036c01c2cee0d80c076c020075013b6d3c6c0184aead333d6e7e6d326c02f8b9b6c9043fa4ccf7dd0ac0006c089eb493cf0378befa8dd40479be8fe6e30478ce89be97067886f998bc0978c5cae3d40a7893a190e00c78f5e1d0e70d786d686c018594e2c50bc3006b02bf80e42b2cc6a6e4b90a2c6ec5006c01f0a2cabb0bc6006c0196bdb4e904716b0c93a7e09d021dd881c9c4032ad69ce79d0a2b82ffcfaa0c329e9598a00d359dfa94a40d3ae3c3c5990e3eb1a5aea10ec100f5d9d7a50ec200fad5ddf40ec400db9cebf70ec700d6f4c7ff0fc8006ec9006b0c9b9cd0a40105bab5f1a40106918bacf10208fc9fc683050dc6b3bb9106158db2d592091698a5d0c7091791b2fab80a18e0f8fffd0b198bf3afac0d1e89b8b3b30e1fa3f3c0ad0f256ecb006c03dbb70101cbe2b58b08cc00f1bb8b880d2901cd000100406c4830c8a17a0109011e000000006b63616e69737465725f69644a000000000000000101016e696e67726573735f6578706972791b172cf99414612c006b6d6574686f645f6e616d656d6d616e6167655f6e6575726f6e6c726571756573745f747970656463616c6c6673656e646572581d19aa3d42c048dd7d14f0cfa0df69a1c1381780f6e9a137abaa6a82e302', - }, - { - name: 'candid_auto_stake_maturity', - blob: 'd9d9f7a167636f6e74656e74a6636172675903e64449444c4e6c01dbb701786e006e796e686e786c03bc949d820302dbe2be950903ef9999fe09046c01b9ef938008786d006c02afa3bda10175c2cee0d80c076c006c029cb1fa2503ba89e5c204786b039ef5cc0f099992ccd0010adae1c99903786e0b6c01d7ab010c6c01f6b0989a08036c018eddc3a60d036c01d0e1e9f60c7e6c018dc3b2b303796c01c88ecad50a786b0996a7f7150ef381d4ab020f8cb2f18c0710b09b9ba40709d0fb87af070990f29afe0711e4ac938d0c09f7aacfd80d09c3a2f6c90e126e136c01a78882820a146c02ea99cff20475b2b8d4960b016c01c38fbbd10b016c05f5bbe3900178d2bbf0d9017eb9ef93800878dbe2be950903ef9999fe09786c04efd6e4027198abec81011ab6f798b201ca00a696a48708716e716c02cbe4fdc70471fc91f4f8051a6e1b6c02dbb70101bac7a7fa0d1c6c01bbb4b09703026c01b99d9da50b796d7b6c01cedfa0a804206e216c01e0a9b302786e236c02a9ddf49b0722d8a38ca80d246b0c9b9cd0a40105bab5f1a40106918bacf10208fc9fc683050dc6b3bb9106158db2d592091698a5d0c7091791b2fab80a18e0f8fffd0b198bf3afac0d1e89b8b3b30e1fa3f3c0ad0f256e266b02cd8e8eb90420cebee1d308006e286c03dbb70101cbe2b58b0827f1bb8b880d296c02e4d7bee905758effd6e90e206c02dbb701039df1afe707226e2c6c01f5bbe39001786c01a9ddf49b07226b02fdf59aec0b2ee3b586ff0c2f6e306c03ce9ca6ce012df382ccb30731b9ef938008786c07fed391bd0178dcd0a0ab0378dfbcb4d80478edc6ecab087993e5e481097890b090af0e78ca9ab7d20f786e336c03d889bea60d04b5f6f9e90e03c6f6ebeb0e346c02f9889a5778b2cc99e705786e366c01edbb85f901376e386c02cfbe93a40439c796cdbe0b036c01c2cee0d80c076c020075013b6d3c6c0184aead333d6e7e6d326c02f8b9b6c9043fa4ccf7dd0ac0006c089eb493cf0378befa8dd40479be8fe6e30478ce89be97067886f998bc0978c5cae3d40a7893a190e00c78f5e1d0e70d786d686c018594e2c50bc3006b02bf80e42b2cc6a6e4b90a2c6ec5006c01f0a2cabb0bc6006c0196bdb4e904716b0c93a7e09d021dd881c9c4032ad69ce79d0a2b82ffcfaa0c329e9598a00d359dfa94a40d3ae3c3c5990e3eb1a5aea10ec100f5d9d7a50ec200fad5ddf40ec400db9cebf70ec700d6f4c7ff0fc8006ec9006b0c9b9cd0a40105bab5f1a40106918bacf10208fc9fc683050dc6b3bb9106158db2d592091698a5d0c7091791b2fab80a18e0f8fffd0b198bf3afac0d1e89b8b3b30e1fa3f3c0ad0f256ecb006c03dbb70101cbe2b58b08cc00f1bb8b880d2901cd000100c8c056ea395dd50104010200006b63616e69737465725f69644a000000000000000101016e696e67726573735f6578706972791b172cf977b81dda406b6d6574686f645f6e616d656d6d616e6167655f6e6575726f6e6c726571756573745f747970656463616c6c6673656e646572581d19aa3d42c048dd7d14f0cfa0df69a1c1381780f6e9a137abaa6a82e302', - }, - { - name: 'candid_increase_dissolve_delay', - blob: 'd9d9f7a167636f6e74656e74a6636172675903e94449444c4e6c01dbb701786e006e796e686e786c03bc949d820302dbe2be950903ef9999fe09046c01b9ef938008786d006c02afa3bda10175c2cee0d80c076c006c029cb1fa2503ba89e5c204786b039ef5cc0f099992ccd0010adae1c99903786e0b6c01d7ab010c6c01f6b0989a08036c018eddc3a60d036c01d0e1e9f60c7e6c018dc3b2b303796c01c88ecad50a786b0996a7f7150ef381d4ab020f8cb2f18c0710b09b9ba40709d0fb87af070990f29afe0711e4ac938d0c09f7aacfd80d09c3a2f6c90e126e136c01a78882820a146c02ea99cff20475b2b8d4960b016c01c38fbbd10b016c05f5bbe3900178d2bbf0d9017eb9ef93800878dbe2be950903ef9999fe09786c04efd6e4027198abec81011ab6f798b201ca00a696a48708716e716c02cbe4fdc70471fc91f4f8051a6e1b6c02dbb70101bac7a7fa0d1c6c01bbb4b09703026c01b99d9da50b796d7b6c01cedfa0a804206e216c01e0a9b302786e236c02a9ddf49b0722d8a38ca80d246b0c9b9cd0a40105bab5f1a40106918bacf10208fc9fc683050dc6b3bb9106158db2d592091698a5d0c7091791b2fab80a18e0f8fffd0b198bf3afac0d1e89b8b3b30e1fa3f3c0ad0f256e266b02cd8e8eb90420cebee1d308006e286c03dbb70101cbe2b58b0827f1bb8b880d296c02e4d7bee905758effd6e90e206c02dbb701039df1afe707226e2c6c01f5bbe39001786c01a9ddf49b07226b02fdf59aec0b2ee3b586ff0c2f6e306c03ce9ca6ce012df382ccb30731b9ef938008786c07fed391bd0178dcd0a0ab0378dfbcb4d80478edc6ecab087993e5e481097890b090af0e78ca9ab7d20f786e336c03d889bea60d04b5f6f9e90e03c6f6ebeb0e346c02f9889a5778b2cc99e705786e366c01edbb85f901376e386c02cfbe93a40439c796cdbe0b036c01c2cee0d80c076c020075013b6d3c6c0184aead333d6e7e6d326c02f8b9b6c9043fa4ccf7dd0ac0006c089eb493cf0378befa8dd40479be8fe6e30478ce89be97067886f998bc0978c5cae3d40a7893a190e00c78f5e1d0e70d786d686c018594e2c50bc3006b02bf80e42b2cc6a6e4b90a2c6ec5006c01f0a2cabb0bc6006c0196bdb4e904716b0c93a7e09d021dd881c9c4032ad69ce79d0a2b82ffcfaa0c329e9598a00d359dfa94a40d3ae3c3c5990e3eb1a5aea10ec100f5d9d7a50ec200fad5ddf40ec400db9cebf70ec700d6f4c7ff0fc8006ec9006b0c9b9cd0a40105bab5f1a40106918bacf10208fc9fc683050dc6b3bb9106158db2d592091698a5d0c7091791b2fab80a18e0f8fffd0b198bf3afac0d1e89b8b3b30e1fa3f3c0ad0f256ecb006c03dbb70101cbe2b58b08cc00f1bb8b880d2901cd000100406c4830c8a17a0104010500ea2400006b63616e69737465725f69644a000000000000000101016e696e67726573735f6578706972791b172e7bf51d9c01c06b6d6574686f645f6e616d656d6d616e6167655f6e6575726f6e6c726571756573745f747970656463616c6c6673656e646572581d19aa3d42c048dd7d14f0cfa0df69a1c1381780f6e9a137abaa6a82e302', - }, - { - name: 'candid_disburse', - blob: 'd9d9f7a167636f6e74656e74a6636172675904064449444c4e6c01dbb701786e006e796e686e786c03bc949d820302dbe2be950903ef9999fe09046c01b9ef938008786d006c02afa3bda10175c2cee0d80c076c006c029cb1fa2503ba89e5c204786b039ef5cc0f099992ccd0010adae1c99903786e0b6c01d7ab010c6c01f6b0989a08036c018eddc3a60d036c01d0e1e9f60c7e6c018dc3b2b303796c01c88ecad50a786b0996a7f7150ef381d4ab020f8cb2f18c0710b09b9ba40709d0fb87af070990f29afe0711e4ac938d0c09f7aacfd80d09c3a2f6c90e126e136c01a78882820a146c02ea99cff20475b2b8d4960b016c01c38fbbd10b016c05f5bbe3900178d2bbf0d9017eb9ef93800878dbe2be950903ef9999fe09786c04efd6e4027198abec81011ab6f798b201ca00a696a48708716e716c02cbe4fdc70471fc91f4f8051a6e1b6c02dbb70101bac7a7fa0d1c6c01bbb4b09703026c01b99d9da50b796d7b6c01cedfa0a804206e216c01e0a9b302786e236c02a9ddf49b0722d8a38ca80d246b0c9b9cd0a40105bab5f1a40106918bacf10208fc9fc683050dc6b3bb9106158db2d592091698a5d0c7091791b2fab80a18e0f8fffd0b198bf3afac0d1e89b8b3b30e1fa3f3c0ad0f256e266b02cd8e8eb90420cebee1d308006e286c03dbb70101cbe2b58b0827f1bb8b880d296c02e4d7bee905758effd6e90e206c02dbb701039df1afe707226e2c6c01f5bbe39001786c01a9ddf49b07226b02fdf59aec0b2ee3b586ff0c2f6e306c03ce9ca6ce012df382ccb30731b9ef938008786c07fed391bd0178dcd0a0ab0378dfbcb4d80478edc6ecab087993e5e481097890b090af0e78ca9ab7d20f786e336c03d889bea60d04b5f6f9e90e03c6f6ebeb0e346c02f9889a5778b2cc99e705786e366c01edbb85f901376e386c02cfbe93a40439c796cdbe0b036c01c2cee0d80c076c020075013b6d3c6c0184aead333d6e7e6d326c02f8b9b6c9043fa4ccf7dd0ac0006c089eb493cf0378befa8dd40479be8fe6e30478ce89be97067886f998bc0978c5cae3d40a7893a190e00c78f5e1d0e70d786d686c018594e2c50bc3006b02bf80e42b2cc6a6e4b90a2c6ec5006c01f0a2cabb0bc6006c0196bdb4e904716b0c93a7e09d021dd881c9c4032ad69ce79d0a2b82ffcfaa0c329e9598a00d359dfa94a40d3ae3c3c5990e3eb1a5aea10ec100f5d9d7a50ec200fad5ddf40ec400db9cebf70ec700d6f4c7ff0fc8006ec9006b0c9b9cd0a40105bab5f1a40106918bacf10208fc9fc683050dc6b3bb9106158db2d592091698a5d0c7091791b2fab80a18e0f8fffd0b198bf3afac0d1e89b8b3b30e1fa3f3c0ad0f256ecb006c03dbb70101cbe2b58b08cc00f1bb8b880d2901cd000100c8c056ea395dd5010b0120d4685b31b51450508aff0331584df7692a84467b680326f5c5f7d30ae711682f00006b63616e69737465725f69644a000000000000000101016e696e67726573735f6578706972791b174e7cdd7982b7006b6d6574686f645f6e616d656d6d616e6167655f6e6575726f6e6c726571756573745f747970656463616c6c6673656e646572581d19aa3d42c048dd7d14f0cfa0df69a1c1381780f6e9a137abaa6a82e302', - }, - { - name: 'candid_register_vote', - blob: 'd9d9f7a167636f6e74656e74a6636172675903f04449444c4e6c01dbb701786e006e796e686e786c03bc949d820302dbe2be950903ef9999fe09046c01b9ef938008786d006c02afa3bda10175c2cee0d80c076c006c029cb1fa2503ba89e5c204786b039ef5cc0f099992ccd0010adae1c99903786e0b6c01d7ab010c6c01f6b0989a08036c018eddc3a60d036c01d0e1e9f60c7e6c018dc3b2b303796c01c88ecad50a786b0996a7f7150ef381d4ab020f8cb2f18c0710b09b9ba40709d0fb87af070990f29afe0711e4ac938d0c09f7aacfd80d09c3a2f6c90e126e136c01a78882820a146c02ea99cff20475b2b8d4960b016c01c38fbbd10b016c05f5bbe3900178d2bbf0d9017eb9ef93800878dbe2be950903ef9999fe09786c04efd6e4027198abec81011ab6f798b201ca00a696a48708716e716c02cbe4fdc70471fc91f4f8051a6e1b6c02dbb70101bac7a7fa0d1c6c01bbb4b09703026c01b99d9da50b796d7b6c01cedfa0a804206e216c01e0a9b302786e236c02a9ddf49b0722d8a38ca80d246b0c9b9cd0a40105bab5f1a40106918bacf10208fc9fc683050dc6b3bb9106158db2d592091698a5d0c7091791b2fab80a18e0f8fffd0b198bf3afac0d1e89b8b3b30e1fa3f3c0ad0f256e266b02cd8e8eb90420cebee1d308006e286c03dbb70101cbe2b58b0827f1bb8b880d296c02e4d7bee905758effd6e90e206c02dbb701039df1afe707226e2c6c01f5bbe39001786c01a9ddf49b07226b02fdf59aec0b2ee3b586ff0c2f6e306c03ce9ca6ce012df382ccb30731b9ef938008786c07fed391bd0178dcd0a0ab0378dfbcb4d80478edc6ecab087993e5e481097890b090af0e78ca9ab7d20f786e336c03d889bea60d04b5f6f9e90e03c6f6ebeb0e346c02f9889a5778b2cc99e705786e366c01edbb85f901376e386c02cfbe93a40439c796cdbe0b036c01c2cee0d80c076c020075013b6d3c6c0184aead333d6e7e6d326c02f8b9b6c9043fa4ccf7dd0ac0006c089eb493cf0378befa8dd40479be8fe6e30478ce89be97067886f998bc0978c5cae3d40a7893a190e00c78f5e1d0e70d786d686c018594e2c50bc3006b02bf80e42b2cc6a6e4b90a2c6ec5006c01f0a2cabb0bc6006c0196bdb4e904716b0c93a7e09d021dd881c9c4032ad69ce79d0a2b82ffcfaa0c329e9598a00d359dfa94a40d3ae3c3c5990e3eb1a5aea10ec100f5d9d7a50ec200fad5ddf40ec400db9cebf70ec700d6f4c7ff0fc8006ec9006b0c9b9cd0a40105bab5f1a40106918bacf10208fc9fc683050dc6b3bb9106158db2d592091698a5d0c7091791b2fab80a18e0f8fffd0b198bf3afac0d1e89b8b3b30e1fa3f3c0ad0f256ecb006c03dbb70101cbe2b58b08cc00f1bb8b880d2901cd000100c8c056ea395dd50105010000000179bf060000000000006b63616e69737465725f69644a000000000000000101016e696e67726573735f6578706972791b175e09d0fe279a406b6d6574686f645f6e616d656d6d616e6167655f6e6575726f6e6c726571756573745f747970656463616c6c6673656e646572581d19aa3d42c048dd7d14f0cfa0df69a1c1381780f6e9a137abaa6a82e302', - }, - { - name: 'candid_follow', - blob: 'd9d9f7a167636f6e74656e74a6636172675904004449444c4e6c01dbb701786e006e796e686e786c03bc949d820302dbe2be950903ef9999fe09046c01b9ef938008786d006c02afa3bda10175c2cee0d80c076c006c029cb1fa2503ba89e5c204786b039ef5cc0f099992ccd0010adae1c99903786e0b6c01d7ab010c6c01f6b0989a08036c018eddc3a60d036c01d0e1e9f60c7e6c018dc3b2b303796c01c88ecad50a786b0996a7f7150ef381d4ab020f8cb2f18c0710b09b9ba40709d0fb87af070990f29afe0711e4ac938d0c09f7aacfd80d09c3a2f6c90e126e136c01a78882820a146c02ea99cff20475b2b8d4960b016c01c38fbbd10b016c05f5bbe3900178d2bbf0d9017eb9ef93800878dbe2be950903ef9999fe09786c04efd6e4027198abec81011ab6f798b201ca00a696a48708716e716c02cbe4fdc70471fc91f4f8051a6e1b6c02dbb70101bac7a7fa0d1c6c01bbb4b09703026c01b99d9da50b796d7b6c01cedfa0a804206e216c01e0a9b302786e236c02a9ddf49b0722d8a38ca80d246b0c9b9cd0a40105bab5f1a40106918bacf10208fc9fc683050dc6b3bb9106158db2d592091698a5d0c7091791b2fab80a18e0f8fffd0b198bf3afac0d1e89b8b3b30e1fa3f3c0ad0f256e266b02cd8e8eb90420cebee1d308006e286c03dbb70101cbe2b58b0827f1bb8b880d296c02e4d7bee905758effd6e90e206c02dbb701039df1afe707226e2c6c01f5bbe39001786c01a9ddf49b07226b02fdf59aec0b2ee3b586ff0c2f6e306c03ce9ca6ce012df382ccb30731b9ef938008786c07fed391bd0178dcd0a0ab0378dfbcb4d80478edc6ecab087993e5e481097890b090af0e78ca9ab7d20f786e336c03d889bea60d04b5f6f9e90e03c6f6ebeb0e346c02f9889a5778b2cc99e705786e366c01edbb85f901376e386c02cfbe93a40439c796cdbe0b036c01c2cee0d80c076c020075013b6d3c6c0184aead333d6e7e6d326c02f8b9b6c9043fa4ccf7dd0ac0006c089eb493cf0378befa8dd40479be8fe6e30478ce89be97067886f998bc0978c5cae3d40a7893a190e00c78f5e1d0e70d786d686c018594e2c50bc3006b02bf80e42b2cc6a6e4b90a2c6ec5006c01f0a2cabb0bc6006c0196bdb4e904716b0c93a7e09d021dd881c9c4032ad69ce79d0a2b82ffcfaa0c329e9598a00d359dfa94a40d3ae3c3c5990e3eb1a5aea10ec100f5d9d7a50ec200fad5ddf40ec400db9cebf70ec700d6f4c7ff0fc8006ec9006b0c9b9cd0a40105bab5f1a40106918bacf10208fc9fc683050dc6b3bb9106158db2d592091698a5d0c7091791b2fab80a18e0f8fffd0b198bf3afac0d1e89b8b3b30e1fa3f3c0ad0f256ecb006c03dbb70101cbe2b58b08cc00f1bb8b880d2901cd0001fb14993b0000000001020e000000037c3fffcbaf0300006e8d3bbb0000000000406c4830c8a17a006b63616e69737465725f69644a000000000000000101016e696e67726573735f6578706972791b175e0b28227786006b6d6574686f645f6e616d656d6d616e6167655f6e6575726f6e6c726571756573745f747970656463616c6c6673656e646572581d19aa3d42c048dd7d14f0cfa0df69a1c1381780f6e9a137abaa6a82e302', - }, - { - name: 'sns_add_permissions', - blob: 'd9d9f7a167636f6e74656e74a66361726759036a4449444c3d6d7b6c02ba89e5c20478b9ef938008786c01dbb701006d026c02e28bbf1478c2cee0d80c036e686c01ad86ca8305006e066c02b3b0dac30305ad86ca8305076e086c02a9ddf49b0709a290ead30a796c029cb1fa2505ba89e5c204786c006b029992ccd0010bcebee1d3080c6e0d6c01d7ab010e6c01d0e1e9f60c7e6c018dc3b2b303796c01c88ecad50a786b058cb2f18c0710b09b9ba4070cd0fb87af070c90f29afe0711c3a2f6c90e126e136c01a78882820a146c01dbb701786e166c02ea99cff20475b2b8d4960b176c01c2cee0d80c036c02007801196d1a6c01c2cee0d80c1b6e1c6e786d756c0184f9d1761f6e206e796c04dc87d3aa031e8e8ab6f3081eefca8bdf0d1ea5a389b40f1e6e236c1384aead331df0cefc351ee9f1b4471ed2bbc8ef021ee28b959c03219eb493cf031ed8aa8f8f051e9ebddfd6051e81a6cee6051ece89be97061ec7dae0cc0622feeaf491091e93dfe6aa091e86f998bc091ec182ad960a1ef5cedb9b0b1eaf899aba0d21fde7b1fd0d24c2b0c4aa0f1e6e716c0486fef0ea0a0585f2acb20b05fcc8d7e40e26fbbc93ac0f266b02c2a2dd88070c829aa4b40e276e286c04dbb70178cbe4fdc70471fc91f4f8052681d9b08e0a296c05f8aff58a0175aaeff3c60105b1edd6810407ba89e5c2041eb9ef938008786c029db0f1b80200b3c4b1f204056c04efd6e40226ebbedebd0426cbe4fdc70426fc91f4f805266c02e28bbf14788effd6e90e006c0196bdb4e904716b0ac6c0d51025838db4492ae6d6e4ab0678aedd92a2070c9eb481da0b2bd1a8b0ae0c2c97f7e1c30e0c82a1cfcd0e2d97899f8d0f2ed6f4c7ff0f2f6e306c04efd6e4027198abec810171b6f798b20131a696a48708716c01bbb4b09703226c028d86f0fa0b218c8890fb0b056c02b8c789cb01218c8890fb0b056c01b99d9da50b796c01e0a9b302786e376c02a9ddf49b0709d8a38ca80d386b0cbab5f1a40101918bacf10204948c9eb4030afc9fc683050fc6b3bb9106158db2d5920918e0f8fffd0b328bf3afac0d33cde3c8d30d3490efabef0d3589b8b3b30e36a3f3c0ad0f396e3a6c02ad86ca830500cbe2b58b083b013c20a36e143c86e7e471e7c719506487cf7a6cf40da76361aeafee5133e1d9acea3d010901020a0000000500000001011d29794883d3efb57cc835619ba5961941d7a11ac192735943b2c886e9026b63616e69737465725f69644a000000000000009f01016e696e67726573735f6578706972791b173ce893f99352006b6d6574686f645f6e616d656d6d616e6167655f6e6575726f6e6c726571756573745f747970656463616c6c6673656e646572581d19aa3d42c048dd7d14f0cfa0df69a1c1381780f6e9a137abaa6a82e302', - }, - { - name: 'sns_remove_permissions', - blob: 'd9d9f7a167636f6e74656e74a66361726759036a4449444c3d6d7b6c02ba89e5c20478b9ef938008786c01dbb701006d026c02e28bbf1478c2cee0d80c036e686c01ad86ca8305006e066c02b3b0dac30305ad86ca8305076e086c02a9ddf49b0709a290ead30a796c029cb1fa2505ba89e5c204786c006b029992ccd0010bcebee1d3080c6e0d6c01d7ab010e6c01d0e1e9f60c7e6c018dc3b2b303796c01c88ecad50a786b058cb2f18c0710b09b9ba4070cd0fb87af070c90f29afe0711c3a2f6c90e126e136c01a78882820a146c01dbb701786e166c02ea99cff20475b2b8d4960b176c01c2cee0d80c036c02007801196d1a6c01c2cee0d80c1b6e1c6e786d756c0184f9d1761f6e206e796c04dc87d3aa031e8e8ab6f3081eefca8bdf0d1ea5a389b40f1e6e236c1384aead331df0cefc351ee9f1b4471ed2bbc8ef021ee28b959c03219eb493cf031ed8aa8f8f051e9ebddfd6051e81a6cee6051ece89be97061ec7dae0cc0622feeaf491091e93dfe6aa091e86f998bc091ec182ad960a1ef5cedb9b0b1eaf899aba0d21fde7b1fd0d24c2b0c4aa0f1e6e716c0486fef0ea0a0585f2acb20b05fcc8d7e40e26fbbc93ac0f266b02c2a2dd88070c829aa4b40e276e286c04dbb70178cbe4fdc70471fc91f4f8052681d9b08e0a296c05f8aff58a0175aaeff3c60105b1edd6810407ba89e5c2041eb9ef938008786c029db0f1b80200b3c4b1f204056c04efd6e40226ebbedebd0426cbe4fdc70426fc91f4f805266c02e28bbf14788effd6e90e006c0196bdb4e904716b0ac6c0d51025838db4492ae6d6e4ab0678aedd92a2070c9eb481da0b2bd1a8b0ae0c2c97f7e1c30e0c82a1cfcd0e2d97899f8d0f2ed6f4c7ff0f2f6e306c04efd6e4027198abec810171b6f798b20131a696a48708716c01bbb4b09703226c028d86f0fa0b218c8890fb0b056c02b8c789cb01218c8890fb0b056c01b99d9da50b796c01e0a9b302786e376c02a9ddf49b0709d8a38ca80d386b0cbab5f1a40101918bacf10204948c9eb4030afc9fc683050fc6b3bb9106158db2d5920918e0f8fffd0b328bf3afac0d33cde3c8d30d3490efabef0d3589b8b3b30e36a3f3c0ad0f396e3a6c02ad86ca830500cbe2b58b083b013c20d7e851652cd032ba5ed76b17f626aa47829f06e5235a0d580e96d3727729ea2401080102050000000100000001011d29794883d3efb57cc835619ba5961941d7a11ac192735943b2c886e9026b63616e69737465725f69644a000000000000001401016e696e67726573735f6578706972791b173ce89843e906c06b6d6574686f645f6e616d656d6d616e6167655f6e6575726f6e6c726571756573745f747970656463616c6c6673656e646572581d19aa3d42c048dd7d14f0cfa0df69a1c1381780f6e9a137abaa6a82e302', - }, - { - name: 'sns_disburse', - blob: 'd9d9f7a167636f6e74656e74a66361726759038c4449444c3d6d7b6c02ba89e5c20478b9ef938008786c01dbb701006d026c02e28bbf1478c2cee0d80c036e686c01ad86ca8305006e066c02b3b0dac30305ad86ca8305076e086c02a9ddf49b0709a290ead30a796c029cb1fa2505ba89e5c204786c006b029992ccd0010bcebee1d3080c6e0d6c01d7ab010e6c01d0e1e9f60c7e6c018dc3b2b303796c01c88ecad50a786b058cb2f18c0710b09b9ba4070cd0fb87af070c90f29afe0711c3a2f6c90e126e136c01a78882820a146c01dbb701786e166c02ea99cff20475b2b8d4960b176c01c2cee0d80c036c02007801196d1a6c01c2cee0d80c1b6e1c6e786d756c0184f9d1761f6e206e796c04dc87d3aa031e8e8ab6f3081eefca8bdf0d1ea5a389b40f1e6e236c1384aead331df0cefc351ee9f1b4471ed2bbc8ef021ee28b959c03219eb493cf031ed8aa8f8f051e9ebddfd6051e81a6cee6051ece89be97061ec7dae0cc0622feeaf491091e93dfe6aa091e86f998bc091ec182ad960a1ef5cedb9b0b1eaf899aba0d21fde7b1fd0d24c2b0c4aa0f1e6e716c0486fef0ea0a0585f2acb20b05fcc8d7e40e26fbbc93ac0f266b02c2a2dd88070c829aa4b40e276e286c04dbb70178cbe4fdc70471fc91f4f8052681d9b08e0a296c05f8aff58a0175aaeff3c60105b1edd6810407ba89e5c2041eb9ef938008786c029db0f1b80200b3c4b1f204056c04efd6e40226ebbedebd0426cbe4fdc70426fc91f4f805266c02e28bbf14788effd6e90e006c0196bdb4e904716b0ac6c0d51025838db4492ae6d6e4ab0678aedd92a2070c9eb481da0b2bd1a8b0ae0c2c97f7e1c30e0c82a1cfcd0e2d97899f8d0f2ed6f4c7ff0f2f6e306c04efd6e4027198abec810171b6f798b20131a696a48708716c01bbb4b09703226c028d86f0fa0b218c8890fb0b056c02b8c789cb01218c8890fb0b056c01b99d9da50b796c01e0a9b302786e376c02a9ddf49b0709d8a38ca80d386b0cbab5f1a40101918bacf10204948c9eb4030afc9fc683050fc6b3bb9106158db2d5920918e0f8fffd0b328bf3afac0d33cde3c8d30d3490efabef0d3589b8b3b30e36a3f3c0ad0f396e3a6c02ad86ca830500cbe2b58b083b013c20a36e143c86e7e471e7c719506487cf7a6cf40da76361aeafee5133e1d9acea3d010b0101011d841429ba30df507f14f52fbced0b037850b98d89aafaad5b7430f658020120d7e851652cd032ba5ed76b17f626aa47829f06e5235a0d580e96d3727729ea240100c2eb0b000000006b63616e69737465725f69644a000000000000001401016e696e67726573735f6578706972791b173f5f296e3e7a406b6d6574686f645f6e616d656d6d616e6167655f6e6575726f6e6c726571756573745f747970656463616c6c6673656e646572581d19aa3d42c048dd7d14f0cfa0df69a1c1381780f6e9a137abaa6a82e302', - }, - { - name: 'sns_start_dissolve', - blob: 'd9d9f7a167636f6e74656e74a6636172675903424449444c3d6d7b6c02ba89e5c20478b9ef938008786c01dbb701006d026c02e28bbf1478c2cee0d80c036e686c01ad86ca8305006e066c02b3b0dac30305ad86ca8305076e086c02a9ddf49b0709a290ead30a796c029cb1fa2505ba89e5c204786c006b029992ccd0010bcebee1d3080c6e0d6c01d7ab010e6c01d0e1e9f60c7e6c018dc3b2b303796c01c88ecad50a786b058cb2f18c0710b09b9ba4070cd0fb87af070c90f29afe0711c3a2f6c90e126e136c01a78882820a146c01dbb701786e166c02ea99cff20475b2b8d4960b176c01c2cee0d80c036c02007801196d1a6c01c2cee0d80c1b6e1c6e786d756c0184f9d1761f6e206e796c04dc87d3aa031e8e8ab6f3081eefca8bdf0d1ea5a389b40f1e6e236c1384aead331df0cefc351ee9f1b4471ed2bbc8ef021ee28b959c03219eb493cf031ed8aa8f8f051e9ebddfd6051e81a6cee6051ece89be97061ec7dae0cc0622feeaf491091e93dfe6aa091e86f998bc091ec182ad960a1ef5cedb9b0b1eaf899aba0d21fde7b1fd0d24c2b0c4aa0f1e6e716c0486fef0ea0a0585f2acb20b05fcc8d7e40e26fbbc93ac0f266b02c2a2dd88070c829aa4b40e276e286c04dbb70178cbe4fdc70471fc91f4f8052681d9b08e0a296c05f8aff58a0175aaeff3c60105b1edd6810407ba89e5c2041eb9ef938008786c029db0f1b80200b3c4b1f204056c04efd6e40226ebbedebd0426cbe4fdc70426fc91f4f805266c02e28bbf14788effd6e90e006c0196bdb4e904716b0ac6c0d51025838db4492ae6d6e4ab0678aedd92a2070c9eb481da0b2bd1a8b0ae0c2c97f7e1c30e0c82a1cfcd0e2d97899f8d0f2ed6f4c7ff0f2f6e306c04efd6e4027198abec810171b6f798b20131a696a48708716c01bbb4b09703226c028d86f0fa0b218c8890fb0b056c02b8c789cb01218c8890fb0b056c01b99d9da50b796c01e0a9b302786e376c02a9ddf49b0709d8a38ca80d386b0cbab5f1a40101918bacf10204948c9eb4030afc9fc683050fc6b3bb9106158db2d5920918e0f8fffd0b328bf3afac0d33cde3c8d30d3490efabef0d3589b8b3b30e36a3f3c0ad0f396e3a6c02ad86ca830500cbe2b58b083b013c20d7e851652cd032ba5ed76b17f626aa47829f06e5235a0d580e96d3727729ea24010401026b63616e69737465725f69644a000000000000001401016e696e67726573735f6578706972791b173ce896fceb4f406b6d6574686f645f6e616d656d6d616e6167655f6e6575726f6e6c726571756573745f747970656463616c6c6673656e646572581d19aa3d42c048dd7d14f0cfa0df69a1c1381780f6e9a137abaa6a82e302', - }, - { - name: 'sns_stop_dissolve', - blob: 'd9d9f7a167636f6e74656e74a6636172675903424449444c3d6d7b6c02ba89e5c20478b9ef938008786c01dbb701006d026c02e28bbf1478c2cee0d80c036e686c01ad86ca8305006e066c02b3b0dac30305ad86ca8305076e086c02a9ddf49b0709a290ead30a796c029cb1fa2505ba89e5c204786c006b029992ccd0010bcebee1d3080c6e0d6c01d7ab010e6c01d0e1e9f60c7e6c018dc3b2b303796c01c88ecad50a786b058cb2f18c0710b09b9ba4070cd0fb87af070c90f29afe0711c3a2f6c90e126e136c01a78882820a146c01dbb701786e166c02ea99cff20475b2b8d4960b176c01c2cee0d80c036c02007801196d1a6c01c2cee0d80c1b6e1c6e786d756c0184f9d1761f6e206e796c04dc87d3aa031e8e8ab6f3081eefca8bdf0d1ea5a389b40f1e6e236c1384aead331df0cefc351ee9f1b4471ed2bbc8ef021ee28b959c03219eb493cf031ed8aa8f8f051e9ebddfd6051e81a6cee6051ece89be97061ec7dae0cc0622feeaf491091e93dfe6aa091e86f998bc091ec182ad960a1ef5cedb9b0b1eaf899aba0d21fde7b1fd0d24c2b0c4aa0f1e6e716c0486fef0ea0a0585f2acb20b05fcc8d7e40e26fbbc93ac0f266b02c2a2dd88070c829aa4b40e276e286c04dbb70178cbe4fdc70471fc91f4f8052681d9b08e0a296c05f8aff58a0175aaeff3c60105b1edd6810407ba89e5c2041eb9ef938008786c029db0f1b80200b3c4b1f204056c04efd6e40226ebbedebd0426cbe4fdc70426fc91f4f805266c02e28bbf14788effd6e90e006c0196bdb4e904716b0ac6c0d51025838db4492ae6d6e4ab0678aedd92a2070c9eb481da0b2bd1a8b0ae0c2c97f7e1c30e0c82a1cfcd0e2d97899f8d0f2ed6f4c7ff0f2f6e306c04efd6e4027198abec810171b6f798b20131a696a48708716c01bbb4b09703226c028d86f0fa0b218c8890fb0b056c02b8c789cb01218c8890fb0b056c01b99d9da50b796c01e0a9b302786e376c02a9ddf49b0709d8a38ca80d386b0cbab5f1a40101918bacf10204948c9eb4030afc9fc683050fc6b3bb9106158db2d5920918e0f8fffd0b328bf3afac0d33cde3c8d30d3490efabef0d3589b8b3b30e36a3f3c0ad0f396e3a6c02ad86ca830500cbe2b58b083b013c20a36e143c86e7e471e7c719506487cf7a6cf40da76361aeafee5133e1d9acea3d010401016b63616e69737465725f69644a000000000000001401016e696e67726573735f6578706972791b173ce896fd46dcc06b6d6574686f645f6e616d656d6d616e6167655f6e6575726f6e6c726571756573745f747970656463616c6c6673656e646572581d19aa3d42c048dd7d14f0cfa0df69a1c1381780f6e9a137abaa6a82e302', - }, - { - name: 'sns_stake_maturity', - blob: 'd9d9f7a167636f6e74656e74a6636172675903454449444c3d6d7b6c02ba89e5c20478b9ef938008786c01dbb701006d026c02e28bbf1478c2cee0d80c036e686c01ad86ca8305006e066c02b3b0dac30305ad86ca8305076e086c02a9ddf49b0709a290ead30a796c029cb1fa2505ba89e5c204786c006b029992ccd0010bcebee1d3080c6e0d6c01d7ab010e6c01d0e1e9f60c7e6c018dc3b2b303796c01c88ecad50a786b058cb2f18c0710b09b9ba4070cd0fb87af070c90f29afe0711c3a2f6c90e126e136c01a78882820a146c01dbb701786e166c02ea99cff20475b2b8d4960b176c01c2cee0d80c036c02007801196d1a6c01c2cee0d80c1b6e1c6e786d756c0184f9d1761f6e206e796c04dc87d3aa031e8e8ab6f3081eefca8bdf0d1ea5a389b40f1e6e236c1384aead331df0cefc351ee9f1b4471ed2bbc8ef021ee28b959c03219eb493cf031ed8aa8f8f051e9ebddfd6051e81a6cee6051ece89be97061ec7dae0cc0622feeaf491091e93dfe6aa091e86f998bc091ec182ad960a1ef5cedb9b0b1eaf899aba0d21fde7b1fd0d24c2b0c4aa0f1e6e716c0486fef0ea0a0585f2acb20b05fcc8d7e40e26fbbc93ac0f266b02c2a2dd88070c829aa4b40e276e286c04dbb70178cbe4fdc70471fc91f4f8052681d9b08e0a296c05f8aff58a0175aaeff3c60105b1edd6810407ba89e5c2041eb9ef938008786c029db0f1b80200b3c4b1f204056c04efd6e40226ebbedebd0426cbe4fdc70426fc91f4f805266c02e28bbf14788effd6e90e006c0196bdb4e904716b0ac6c0d51025838db4492ae6d6e4ab0678aedd92a2070c9eb481da0b2bd1a8b0ae0c2c97f7e1c30e0c82a1cfcd0e2d97899f8d0f2ed6f4c7ff0f2f6e306c04efd6e4027198abec810171b6f798b20131a696a48708716c01bbb4b09703226c028d86f0fa0b218c8890fb0b056c02b8c789cb01218c8890fb0b056c01b99d9da50b796c01e0a9b302786e376c02a9ddf49b0709d8a38ca80d386b0cbab5f1a40101918bacf10204948c9eb4030afc9fc683050fc6b3bb9106158db2d5920918e0f8fffd0b328bf3afac0d33cde3c8d30d3490efabef0d3589b8b3b30e36a3f3c0ad0f396e3a6c02ad86ca830500cbe2b58b083b013c20d7e851652cd032ba5ed76b17f626aa47829f06e5235a0d580e96d3727729ea24010701210000006b63616e69737465725f69644a000000000000009f01016e696e67726573735f6578706972791b173f71f879f45e406b6d6574686f645f6e616d656d6d616e6167655f6e6575726f6e6c726571756573745f747970656463616c6c6673656e646572581d19aa3d42c048dd7d14f0cfa0df69a1c1381780f6e9a137abaa6a82e302', - }, - { - name: 'icrc_transfer', - blob: 'd9d9f7a167636f6e74656e74a66361726758be4449444c066d7b6e006c02b3b0dac30368ad86ca8305016e7d6e786c06fbca0102c6fcb60203ba89e5c20401a2de94eb060182f3f3910c04d8a38ca80d7d0105011d841429ba30df507f14f52fbced0b037850b98d89aafaad5b7430f658020120d7e851652cd032ba5ed76b17f626aa47829f06e5235a0d580e96d3727729ea2401b0ea0101080000000000ab41100120a36e143c86e7e471e7c719506487cf7a6cf40da76361aeafee5133e1d9acea3d01000011a4c4149c16c082d43e6b63616e69737465725f69644a000000000000000201016e696e67726573735f6578706972791b173f2e0ad323c0006b6d6574686f645f6e616d656e69637263315f7472616e736665726c726571756573745f747970656463616c6c6673656e646572581d19AA3D42C048DD7D14F0CFA0DF69A1C1381780F6E9A137ABAA6A82E302', - }, + name: 'refresh_voting_power', + blob: 'd9d9f7a167636f6e74656e74a6636172675905b34449444c736c03dbb70102cbe2b58b08f000f1bb8b880df2006c01dbb701786e016e796e686e786c03bc949d820303dbe2be950904ef9999fe09056c01b9ef938008786d016c02afa3bda10175c2cee0d80c086c006c029cb1fa2504ba89e5c204786b039ef5cc0f0a9992ccd0010bdae1c99903786e0c6c01d7ab010d6c01f6b0989a08046c018eddc3a60d046c01d0e1e9f60c7e6c018dc3b2b303796e756c01d2dbb6980d136c01c88ecad50a786b0a96a7f7150ff381d4ab02108cb2f18c0711b09b9ba4070ad0fb87af070a90f29afe0712f4f7d8e30b14e4ac938d0c0af7aacfd80d0ac3a2f6c90e156e166c01a78882820a176c02ea99cff20475b2b8d4960b026c01c38fbbd10b026c05f5bbe3900178d2bbf0d9017eb9ef93800878dbe2be950904ef9999fe09786e716c02cbe4fdc70471fc91f4f8051c6e1d6c02dbb70102bac7a7fa0d1e6d686c01d7e09b9002206e216c06c0cff27105d7e09b900222edd9c8c90713f8e287cc0c05deebb5a90e05a882acc60f056e236c02b3c4b1f20404e3f9f5d908246d7b6e266e7e6c05d6fca70227a79fc97e27dcd7f3a60428b3c4b1f20404c7f0d6f80a136c02b6f798b20113b3c4b1f204046c01c4d9d3ea0f056e2b6c01ffecb6d405056e2d6c01e0a9b302056e2f6c03ef9cc9072ef5eadfe7012ce7ce9ba50f2c6e316c0aa0e2cd172cbeafa7632ec0a6dbaa012e81b4c8f7022ef4ba8b81042cbdbbfabf0630ebb6f3ff062e91d7d7b0072e83fbafbc0b30e2efc5a90f326e336c01c3b9dfbf0c1c6e356c04a5d8d2a602309efeb9a4031cb1a38bf40d3691c9aafe0d1c6e376c01dbb701046d396c028fb2cf552ecf898dd304056e3b6c01ceca9f900a056e3d6d716c01ece1e5a5083f6ec0006c0eb1f3893605c6f0968c0128d49eb8a4012eabe1b1d0013cb7859b9d041cebaf95fd0430a59ae0a60530d3de91a90730d9d3968b0830caa0ddc7083e81deedcd0830b7d0c9ff083085b1ad8e0c30d08cf4c90fc1006ec2006c01c4a7c9a101306ec4006c059cb1fa2504f5a1e5572eba89e5c204058edf85ee052ebadcada008306dc6006c01ebb6bfc407c7006ec8006c03c09ea567c500d9edb29806c900f0abe7ef0cc5006eca006c0aefd6e4021ce7a3903134c1cbdfc70220ebbedebd0436cbe4fdc7041cc0c9f2d80438fc91f4f8051caafababc093a96a8ca8a0cc300e597bccc0dcb006c02e4d7bee905758effd6e90e266c01cedfa0a804266ece006c02dbb701049df1afe707cf006ed0006c01f5bbe39001786c01a9ddf49b07cf006b02fdf59aec0bd200e3b586ff0cd3006ed4006c03ce9ca6ce01d100f382ccb307d500b9ef938008786dd6006c02f8b9b6c90428a4ccf7dd0ad7006c02c9c49fac0205bca4cff30c056ed9006c0182c0a0fa021c6edb006c0383b1b6c802dc0088e7f1c902dc0089dec1be0cdc006edd006c04c1868bdc052c86ffb7af07de00a6c6f58f08dc0093a190e00c2c6edf006c0a9eb493cf03788c98f1f603da00befa8dd40479be8fe6e30478ce89be97067886f998bc0978c5cae3d40a7893a190e00c78f5e1d0e70d78a3dc9a8d0fe0006c018594e2c50b206b02bf80e42bd000c6a6e4b90ad0006ee3006c01f0a2cabb0be4006c0196bdb4e904716b0d93a7e09d021fd881c9c40300f3a4c9c50425c8e7adc6052984b796cd072a88f0ccb408cc00d69ce79d0acd0082ffcfaa0cd600b1a5aea10ed800f5d9d7a50ee100fad5ddf40ee200db9cebf70ee500d6f4c7ff0fe6006ee7006c04efd6e4027198abec81011cb6f798b201e800a696a48708716c01bbb4b09703036c01b99d9da50b796c01e0a9b302786eec006c02a9ddf49b07cf00d8a38ca80ded006b0d9b9cd0a40106bab5f1a40107918bacf10209e387a8cf030afc9fc683050ec6b3bb9106188db2d592091998a5d0c7091a91b2fab80a1be0f8fffd0be9008bf3afac0dea0089b8b3b30eeb00a3f3c0ad0fee006eef006b02cd8e8eb90426cebee1d308016ef10001000100c8c056ea395dd50103006b63616e69737465725f69644a000000000000000101016e696e67726573735f6578706972791b18123d00c4ac90006b6d6574686f645f6e616d656d6d616e6167655f6e6575726f6e6c726571756573745f747970656463616c6c6673656e646572581d19aa3d42c048dd7d14f0cfa0df69a1c1381780f6e9a137abaa6a82e302', + }, + // { + // name: 'candid_send_icp', + // blob: 'd9d9f7a167636f6e74656e74a663617267589b4449444c066d7b6c01e0a9b302786e006c01d6f68e8001786e036c06fbca0100c6fcb60201ba89e5c20478a2de94eb060282f3f3910c04d8a38ca80d01010520cec37e3d182336a8903665cce69b0f2b8eacb312f3f02e5366948434f4deead910270000000000007a087082f17eccca01201d02dc69531d6e8375cf08e80e6ecdd73b93b0ff60cc297b8a3fea531c0200000000e87648170000006b63616e69737465725f69644a000000000000000201016e696e67726573735f6578706972791b1762552482491cc06b6d6574686f645f6e616d65687472616e736665726c726571756573745f747970656463616c6c6673656e646572581d19aa3d42c048dd7d14f0cfa0df69a1c1381780f6e9a137abaa6a82e302', + // }, + // { + // name: 'candid_split_neuron', + // blob: 'd9d9f7a167636f6e74656e74a6636172675903334449444c426c01dbb701786e006e686e786c02dbe2be950902ef9999fe09036c01b9ef938008786d006c02afa3bda10175c2cee0d80c066c006c029cb1fa2502ba89e5c204786b039ef5cc0f089992ccd00109dae1c99903786e0a6c01d7ab010b6c01f6b0989a08026c018eddc3a60d026c018dc3b2b303796c01c88ecad50a786b0796a7f7150df381d4ab020eb09b9ba40708d0fb87af070890f29afe070fe4ac938d0c08c3a2f6c90e106e116c01a78882820a126c02ea99cff20475b2b8d4960b016c01c38fbbd10b016c05f5bbe3900178d2bbf0d9017eb9ef93800878dbe2be950902ef9999fe09786c04efd6e4027198abec810118b6f798b2013ea696a48708716e716c02cbe4fdc70471fc91f4f805186e196c02dbb70101bac7a7fa0d1a6c01b99d9da50b796d7b6c01cedfa0a8041d6e1e6c01e0a9b302786e206c02a9ddf49b071fd8a38ca80d216b0b9b9cd0a40104bab5f1a40105918bacf10207fc9fc683050cc6b3bb9106138db2d592091498a5d0c7091591b2fab80a16e0f8fffd0b1789b8b3b30e1ca3f3c0ad0f226e236b02cd8e8eb9041dcebee1d308006e256c03dbb70101cbe2b58b0824f1bb8b880d266c02e4d7bee905758effd6e90e1d6c02dbb701029df1afe7071f6e296c01f5bbe39001786c01a9ddf49b071f6b02fdf59aec0b2be3b586ff0c2c6e2d6c03ce9ca6ce012af382ccb3072eb9ef938008786c01c2cee0d80c066c02007501306d316c0184aead33326d2f6c01a4ccf7dd0a346c089eb493cf0378befa8dd40479be8fe6e30478ce89be97067886f998bc0978c5cae3d40a7893a190e00c78f5e1d0e70d786d686c018594e2c50b376b02bf80e42b29c6a6e4b90a296e396c01f0a2cabb0b3a6c0196bdb4e904716b0a93a7e09d021bd881c9c40327d69ce79d0a2882ffcfaa0c2fe3c3c5990e33b1a5aea10e35f5d9d7a50e36fad5ddf40e38db9cebf70e3bd6f4c7ff0f3c6e3d6b0b9b9cd0a40104bab5f1a40105918bacf10207fc9fc683050cc6b3bb9106138db2d592091498a5d0c7091591b2fab80a16e0f8fffd0b1789b8b3b30e1ca3f3c0ad0f226e3f6c03dbb70101cbe2b58b08c000f1bb8b880d2601c10000010100e1f50500000000010115cd5b07000000006b63616e69737465725f69644a000000000000000101016e696e67726573735f6578706972791b16d048c672ae96c06b6d6574686f645f6e616d656d6d616e6167655f6e6575726f6e6c726571756573745f747970656463616c6c6673656e646572581d19aa3d42c048dd7d14f0cfa0df69a1c1381780f6e9a137abaa6a82e302', + // }, + // { + // name: 'candid_merge_neuron', + // blob: 'd9d9f7a167636f6e74656e74a6636172675903344449444c426c01dbb701786e006e686e786c02dbe2be950902ef9999fe09036c01b9ef938008786d006c02afa3bda10175c2cee0d80c066c006c029cb1fa2502ba89e5c204786b039ef5cc0f089992ccd00109dae1c99903786e0a6c01d7ab010b6c01f6b0989a08026c018eddc3a60d026c018dc3b2b303796c01c88ecad50a786b0796a7f7150df381d4ab020eb09b9ba40708d0fb87af070890f29afe070fe4ac938d0c08c3a2f6c90e106e116c01a78882820a126c02ea99cff20475b2b8d4960b016c01c38fbbd10b016c05f5bbe3900178d2bbf0d9017eb9ef93800878dbe2be950902ef9999fe09786c04efd6e4027198abec810118b6f798b2013ea696a48708716e716c02cbe4fdc70471fc91f4f805186e196c02dbb70101bac7a7fa0d1a6c01b99d9da50b796d7b6c01cedfa0a8041d6e1e6c01e0a9b302786e206c02a9ddf49b071fd8a38ca80d216b0b9b9cd0a40104bab5f1a40105918bacf10207fc9fc683050cc6b3bb9106138db2d592091498a5d0c7091591b2fab80a16e0f8fffd0b1789b8b3b30e1ca3f3c0ad0f226e236b02cd8e8eb9041dcebee1d308006e256c03dbb70101cbe2b58b0824f1bb8b880d266c02e4d7bee905758effd6e90e1d6c02dbb701029df1afe7071f6e296c01f5bbe39001786c01a9ddf49b071f6b02fdf59aec0b2be3b586ff0c2c6e2d6c03ce9ca6ce012af382ccb3072eb9ef938008786c01c2cee0d80c066c02007501306d316c0184aead33326d2f6c01a4ccf7dd0a346c089eb493cf0378befa8dd40479be8fe6e30478ce89be97067886f998bc0978c5cae3d40a7893a190e00c78f5e1d0e70d786d686c018594e2c50b376b02bf80e42b29c6a6e4b90a296e396c01f0a2cabb0b3a6c0196bdb4e904716b0a93a7e09d021bd881c9c40327d69ce79d0a2882ffcfaa0c2fe3c3c5990e33b1a5aea10e35f5d9d7a50e36fad5ddf40e38db9cebf70e3bd6f4c7ff0f3c6e3d6b0b9b9cd0a40104bab5f1a40105918bacf10207fc9fc683050cc6b3bb9106138db2d592091498a5d0c7091591b2fab80a16e0f8fffd0b1789b8b3b30e1ca3f3c0ad0f226e3f6c03dbb70101cbe2b58b08c000f1bb8b880d2601c100000106017b000000000000000101c8010000000000006b63616e69737465725f69644a000000000000000101016e696e67726573735f6578706972791b16d09dc450eb9bc06b6d6574686f645f6e616d656d6d616e6167655f6e6575726f6e6c726571756573745f747970656463616c6c6673656e646572581d19aa3d42c048dd7d14f0cfa0df69a1c1381780f6e9a137abaa6a82e302', + // }, + // { + // name: 'candid_set_dissolve_delay', + // blob: 'd9d9f7a167636f6e74656e74a7636172675904044449444c506c01dbb701786e006e796e686e786c03bc949d820302dbe2be950903ef9999fe09046c01b9ef938008786d006c02afa3bda10175c2cee0d80c076c006c029cb1fa2503ba89e5c204786b039ef5cc0f099992ccd0010adae1c99903786e0b6c01d7ab010c6c01f6b0989a08036c018eddc3a60d036c01d0e1e9f60c7e6c018dc3b2b303796c01c88ecad50a786b0996a7f7150ef381d4ab020f8cb2f18c0710b09b9ba40709d0fb87af070990f29afe0711e4ac938d0c09f7aacfd80d09c3a2f6c90e126e136c01a78882820a146c02ea99cff20475b2b8d4960b016c01c38fbbd10b016c05f5bbe3900178d2bbf0d9017eb9ef93800878dbe2be950903ef9999fe09786c04efd6e4027198abec81011ab6f798b201cc00a696a48708716e716c02cbe4fdc70471fc91f4f8051a6e1b6c02dbb70101bac7a7fa0d1c6c01bbb4b09703026c01b99d9da50b796d7b6c01cedfa0a804206e216c01e0a9b302786e236c02a9ddf49b0722d8a38ca80d246b0c9b9cd0a40105bab5f1a40106918bacf10208fc9fc683050dc6b3bb9106158db2d592091698a5d0c7091791b2fab80a18e0f8fffd0b198bf3afac0d1e89b8b3b30e1fa3f3c0ad0f256e266b02cd8e8eb90420cebee1d308006e286c03dbb70101cbe2b58b0827f1bb8b880d296c02e4d7bee905758effd6e90e206c02dbb701039df1afe707226e2c6c01f5bbe39001786c01a9ddf49b07226b02fdf59aec0b2ee3b586ff0c2f6e306c03ce9ca6ce012df382ccb30731b9ef938008786c028fa0804178cf898dd304786e336c08fed391bd0178abe1b1d00134dcd0a0ab0378dfbcb4d80478edc6ecab087993e5e481097890b090af0e78ca9ab7d20f786e356c03d889bea60d04b5f6f9e90e03c6f6ebeb0e366c02f9889a5778b2cc99e705786e386c01edbb85f901396e3a6c02cfbe93a4043bc796cdbe0b036c01c2cee0d80c076c020075013d6d3e6c0184aead333f6e7e6d326c02f8b9b6c904c100a4ccf7dd0ac2006c089eb493cf0378befa8dd40479be8fe6e30478ce89be97067886f998bc0978c5cae3d40a7893a190e00c78f5e1d0e70d786d686c018594e2c50bc5006b02bf80e42b2cc6a6e4b90a2c6ec7006c01f0a2cabb0bc8006c0196bdb4e904716b0c93a7e09d021dd881c9c4032ad69ce79d0a2b82ffcfaa0c329e9598a00d379dfa94a40d3ce3c3c5990ec000b1a5aea10ec300f5d9d7a50ec400fad5ddf40ec600db9cebf70ec900d6f4c7ff0fca006ecb006b0c9b9cd0a40105bab5f1a40106918bacf10208fc9fc683050dc6b3bb9106158db2d592091698a5d0c7091791b2fab80a18e0f8fffd0b198bf3afac0d1e89b8b3b30e1fa3f3c0ad0f256ecd006c03dbb70101cbe2b58b08ce00f1bb8b880d2901cf0001d843d60486d084150104010868973a6500000000006b63616e69737465725f69644a000000000000000101016e696e67726573735f6578706972791b172198c3df1c1b406b6d6574686f645f6e616d656d6d616e6167655f6e6575726f6e656e6f6e6365500000018413e4abc5061f49e2686dc47c6c726571756573745f747970656463616c6c6673656e646572581d19aa3d42c048dd7d14f0cfa0df69a1c1381780f6e9a137abaa6a82e302', + // }, + // { + // name: 'candid_spawn_neuron', + // blob: 'd9d9f7a167636f6e74656e74a6636172675904114449444c4e6c01dbb701786e006e796e686e786c03bc949d820302dbe2be950903ef9999fe09046c01b9ef938008786d006c02afa3bda10175c2cee0d80c076c006c029cb1fa2503ba89e5c204786b039ef5cc0f099992ccd0010adae1c99903786e0b6c01d7ab010c6c01f6b0989a08036c018eddc3a60d036c01d0e1e9f60c7e6c018dc3b2b303796c01c88ecad50a786b0996a7f7150ef381d4ab020f8cb2f18c0710b09b9ba40709d0fb87af070990f29afe0711e4ac938d0c09f7aacfd80d09c3a2f6c90e126e136c01a78882820a146c02ea99cff20475b2b8d4960b016c01c38fbbd10b016c05f5bbe3900178d2bbf0d9017eb9ef93800878dbe2be950903ef9999fe09786c04efd6e4027198abec81011ab6f798b201ca00a696a48708716e716c02cbe4fdc70471fc91f4f8051a6e1b6c02dbb70101bac7a7fa0d1c6c01bbb4b09703026c01b99d9da50b796d7b6c01cedfa0a804206e216c01e0a9b302786e236c02a9ddf49b0722d8a38ca80d246b0c9b9cd0a40105bab5f1a40106918bacf10208fc9fc683050dc6b3bb9106158db2d592091698a5d0c7091791b2fab80a18e0f8fffd0b198bf3afac0d1e89b8b3b30e1fa3f3c0ad0f256e266b02cd8e8eb90420cebee1d308006e286c03dbb70101cbe2b58b0827f1bb8b880d296c02e4d7bee905758effd6e90e206c02dbb701039df1afe707226e2c6c01f5bbe39001786c01a9ddf49b07226b02fdf59aec0b2ee3b586ff0c2f6e306c03ce9ca6ce012df382ccb30731b9ef938008786c07fed391bd0178dcd0a0ab0378dfbcb4d80478edc6ecab087993e5e481097890b090af0e78ca9ab7d20f786e336c03d889bea60d04b5f6f9e90e03c6f6ebeb0e346c02f9889a5778b2cc99e705786e366c01edbb85f901376e386c02cfbe93a40439c796cdbe0b036c01c2cee0d80c076c020075013b6d3c6c0184aead333d6e7e6d326c02f8b9b6c9043fa4ccf7dd0ac0006c089eb493cf0378befa8dd40479be8fe6e30478ce89be97067886f998bc0978c5cae3d40a7893a190e00c78f5e1d0e70d786d686c018594e2c50bc3006b02bf80e42b2cc6a6e4b90a2c6ec5006c01f0a2cabb0bc6006c0196bdb4e904716b0c93a7e09d021dd881c9c4032ad69ce79d0a2b82ffcfaa0c329e9598a00d359dfa94a40d3ae3c3c5990e3eb1a5aea10ec100f5d9d7a50ec200fad5ddf40ec400db9cebf70ec700d6f4c7ff0fc8006ec9006b0c9b9cd0a40105bab5f1a40106918bacf10208fc9fc683050dc6b3bb9106158db2d592091698a5d0c7091791b2fab80a18e0f8fffd0b198bf3afac0d1e89b8b3b30e1fa3f3c0ad0f256ecb006c03dbb70101cbe2b58b08cc00f1bb8b880d2901cd000100406c4830c8a17a0100011e00000001011d4e9644473effb4cd436eec1a9c8c08168021f63879c97d1f6fdc89dd02013930000000000000006b63616e69737465725f69644a000000000000000101016e696e67726573735f6578706972791b172cfa155781e8406b6d6574686f645f6e616d656d6d616e6167655f6e6575726f6e6c726571756573745f747970656463616c6c6673656e646572581d19aa3d42c048dd7d14f0cfa0df69a1c1381780f6e9a137abaa6a82e302', + // }, + // { + // name: 'candid_list_neurons', + // blob: 'd9d9f7a167636f6e74656e74a66361726758324449444c036d786e7e6c03acbe9cc50700ccd2d3bf0c01dabcd1c70d7e01020200c8c056ea395dd500406c4830c8a17a00006b63616e69737465725f69644a000000000000000101016e696e67726573735f6578706972791b17e4dd23029fe8006b6d6574686f645f6e616d656c6c6973745f6e6575726f6e736c726571756573745f747970656463616c6c6673656e646572581d19aa3d42c048dd7d14f0cfa0df69a1c1381780f6e9a137abaa6a82e302', + // }, + // { + // name: 'candid_stake_maturity', + // blob: 'd9d9f7a167636f6e74656e74a6636172675903e84449444c4e6c01dbb701786e006e796e686e786c03bc949d820302dbe2be950903ef9999fe09046c01b9ef938008786d006c02afa3bda10175c2cee0d80c076c006c029cb1fa2503ba89e5c204786b039ef5cc0f099992ccd0010adae1c99903786e0b6c01d7ab010c6c01f6b0989a08036c018eddc3a60d036c01d0e1e9f60c7e6c018dc3b2b303796c01c88ecad50a786b0996a7f7150ef381d4ab020f8cb2f18c0710b09b9ba40709d0fb87af070990f29afe0711e4ac938d0c09f7aacfd80d09c3a2f6c90e126e136c01a78882820a146c02ea99cff20475b2b8d4960b016c01c38fbbd10b016c05f5bbe3900178d2bbf0d9017eb9ef93800878dbe2be950903ef9999fe09786c04efd6e4027198abec81011ab6f798b201ca00a696a48708716e716c02cbe4fdc70471fc91f4f8051a6e1b6c02dbb70101bac7a7fa0d1c6c01bbb4b09703026c01b99d9da50b796d7b6c01cedfa0a804206e216c01e0a9b302786e236c02a9ddf49b0722d8a38ca80d246b0c9b9cd0a40105bab5f1a40106918bacf10208fc9fc683050dc6b3bb9106158db2d592091698a5d0c7091791b2fab80a18e0f8fffd0b198bf3afac0d1e89b8b3b30e1fa3f3c0ad0f256e266b02cd8e8eb90420cebee1d308006e286c03dbb70101cbe2b58b0827f1bb8b880d296c02e4d7bee905758effd6e90e206c02dbb701039df1afe707226e2c6c01f5bbe39001786c01a9ddf49b07226b02fdf59aec0b2ee3b586ff0c2f6e306c03ce9ca6ce012df382ccb30731b9ef938008786c07fed391bd0178dcd0a0ab0378dfbcb4d80478edc6ecab087993e5e481097890b090af0e78ca9ab7d20f786e336c03d889bea60d04b5f6f9e90e03c6f6ebeb0e346c02f9889a5778b2cc99e705786e366c01edbb85f901376e386c02cfbe93a40439c796cdbe0b036c01c2cee0d80c076c020075013b6d3c6c0184aead333d6e7e6d326c02f8b9b6c9043fa4ccf7dd0ac0006c089eb493cf0378befa8dd40479be8fe6e30478ce89be97067886f998bc0978c5cae3d40a7893a190e00c78f5e1d0e70d786d686c018594e2c50bc3006b02bf80e42b2cc6a6e4b90a2c6ec5006c01f0a2cabb0bc6006c0196bdb4e904716b0c93a7e09d021dd881c9c4032ad69ce79d0a2b82ffcfaa0c329e9598a00d359dfa94a40d3ae3c3c5990e3eb1a5aea10ec100f5d9d7a50ec200fad5ddf40ec400db9cebf70ec700d6f4c7ff0fc8006ec9006b0c9b9cd0a40105bab5f1a40106918bacf10208fc9fc683050dc6b3bb9106158db2d592091698a5d0c7091791b2fab80a18e0f8fffd0b198bf3afac0d1e89b8b3b30e1fa3f3c0ad0f256ecb006c03dbb70101cbe2b58b08cc00f1bb8b880d2901cd000100406c4830c8a17a0109011e000000006b63616e69737465725f69644a000000000000000101016e696e67726573735f6578706972791b172cf99414612c006b6d6574686f645f6e616d656d6d616e6167655f6e6575726f6e6c726571756573745f747970656463616c6c6673656e646572581d19aa3d42c048dd7d14f0cfa0df69a1c1381780f6e9a137abaa6a82e302', + // }, + // { + // name: 'candid_auto_stake_maturity', + // blob: 'd9d9f7a167636f6e74656e74a6636172675903e64449444c4e6c01dbb701786e006e796e686e786c03bc949d820302dbe2be950903ef9999fe09046c01b9ef938008786d006c02afa3bda10175c2cee0d80c076c006c029cb1fa2503ba89e5c204786b039ef5cc0f099992ccd0010adae1c99903786e0b6c01d7ab010c6c01f6b0989a08036c018eddc3a60d036c01d0e1e9f60c7e6c018dc3b2b303796c01c88ecad50a786b0996a7f7150ef381d4ab020f8cb2f18c0710b09b9ba40709d0fb87af070990f29afe0711e4ac938d0c09f7aacfd80d09c3a2f6c90e126e136c01a78882820a146c02ea99cff20475b2b8d4960b016c01c38fbbd10b016c05f5bbe3900178d2bbf0d9017eb9ef93800878dbe2be950903ef9999fe09786c04efd6e4027198abec81011ab6f798b201ca00a696a48708716e716c02cbe4fdc70471fc91f4f8051a6e1b6c02dbb70101bac7a7fa0d1c6c01bbb4b09703026c01b99d9da50b796d7b6c01cedfa0a804206e216c01e0a9b302786e236c02a9ddf49b0722d8a38ca80d246b0c9b9cd0a40105bab5f1a40106918bacf10208fc9fc683050dc6b3bb9106158db2d592091698a5d0c7091791b2fab80a18e0f8fffd0b198bf3afac0d1e89b8b3b30e1fa3f3c0ad0f256e266b02cd8e8eb90420cebee1d308006e286c03dbb70101cbe2b58b0827f1bb8b880d296c02e4d7bee905758effd6e90e206c02dbb701039df1afe707226e2c6c01f5bbe39001786c01a9ddf49b07226b02fdf59aec0b2ee3b586ff0c2f6e306c03ce9ca6ce012df382ccb30731b9ef938008786c07fed391bd0178dcd0a0ab0378dfbcb4d80478edc6ecab087993e5e481097890b090af0e78ca9ab7d20f786e336c03d889bea60d04b5f6f9e90e03c6f6ebeb0e346c02f9889a5778b2cc99e705786e366c01edbb85f901376e386c02cfbe93a40439c796cdbe0b036c01c2cee0d80c076c020075013b6d3c6c0184aead333d6e7e6d326c02f8b9b6c9043fa4ccf7dd0ac0006c089eb493cf0378befa8dd40479be8fe6e30478ce89be97067886f998bc0978c5cae3d40a7893a190e00c78f5e1d0e70d786d686c018594e2c50bc3006b02bf80e42b2cc6a6e4b90a2c6ec5006c01f0a2cabb0bc6006c0196bdb4e904716b0c93a7e09d021dd881c9c4032ad69ce79d0a2b82ffcfaa0c329e9598a00d359dfa94a40d3ae3c3c5990e3eb1a5aea10ec100f5d9d7a50ec200fad5ddf40ec400db9cebf70ec700d6f4c7ff0fc8006ec9006b0c9b9cd0a40105bab5f1a40106918bacf10208fc9fc683050dc6b3bb9106158db2d592091698a5d0c7091791b2fab80a18e0f8fffd0b198bf3afac0d1e89b8b3b30e1fa3f3c0ad0f256ecb006c03dbb70101cbe2b58b08cc00f1bb8b880d2901cd000100c8c056ea395dd50104010200006b63616e69737465725f69644a000000000000000101016e696e67726573735f6578706972791b172cf977b81dda406b6d6574686f645f6e616d656d6d616e6167655f6e6575726f6e6c726571756573745f747970656463616c6c6673656e646572581d19aa3d42c048dd7d14f0cfa0df69a1c1381780f6e9a137abaa6a82e302', + // }, + // { + // name: 'candid_increase_dissolve_delay', + // blob: 'd9d9f7a167636f6e74656e74a6636172675903e94449444c4e6c01dbb701786e006e796e686e786c03bc949d820302dbe2be950903ef9999fe09046c01b9ef938008786d006c02afa3bda10175c2cee0d80c076c006c029cb1fa2503ba89e5c204786b039ef5cc0f099992ccd0010adae1c99903786e0b6c01d7ab010c6c01f6b0989a08036c018eddc3a60d036c01d0e1e9f60c7e6c018dc3b2b303796c01c88ecad50a786b0996a7f7150ef381d4ab020f8cb2f18c0710b09b9ba40709d0fb87af070990f29afe0711e4ac938d0c09f7aacfd80d09c3a2f6c90e126e136c01a78882820a146c02ea99cff20475b2b8d4960b016c01c38fbbd10b016c05f5bbe3900178d2bbf0d9017eb9ef93800878dbe2be950903ef9999fe09786c04efd6e4027198abec81011ab6f798b201ca00a696a48708716e716c02cbe4fdc70471fc91f4f8051a6e1b6c02dbb70101bac7a7fa0d1c6c01bbb4b09703026c01b99d9da50b796d7b6c01cedfa0a804206e216c01e0a9b302786e236c02a9ddf49b0722d8a38ca80d246b0c9b9cd0a40105bab5f1a40106918bacf10208fc9fc683050dc6b3bb9106158db2d592091698a5d0c7091791b2fab80a18e0f8fffd0b198bf3afac0d1e89b8b3b30e1fa3f3c0ad0f256e266b02cd8e8eb90420cebee1d308006e286c03dbb70101cbe2b58b0827f1bb8b880d296c02e4d7bee905758effd6e90e206c02dbb701039df1afe707226e2c6c01f5bbe39001786c01a9ddf49b07226b02fdf59aec0b2ee3b586ff0c2f6e306c03ce9ca6ce012df382ccb30731b9ef938008786c07fed391bd0178dcd0a0ab0378dfbcb4d80478edc6ecab087993e5e481097890b090af0e78ca9ab7d20f786e336c03d889bea60d04b5f6f9e90e03c6f6ebeb0e346c02f9889a5778b2cc99e705786e366c01edbb85f901376e386c02cfbe93a40439c796cdbe0b036c01c2cee0d80c076c020075013b6d3c6c0184aead333d6e7e6d326c02f8b9b6c9043fa4ccf7dd0ac0006c089eb493cf0378befa8dd40479be8fe6e30478ce89be97067886f998bc0978c5cae3d40a7893a190e00c78f5e1d0e70d786d686c018594e2c50bc3006b02bf80e42b2cc6a6e4b90a2c6ec5006c01f0a2cabb0bc6006c0196bdb4e904716b0c93a7e09d021dd881c9c4032ad69ce79d0a2b82ffcfaa0c329e9598a00d359dfa94a40d3ae3c3c5990e3eb1a5aea10ec100f5d9d7a50ec200fad5ddf40ec400db9cebf70ec700d6f4c7ff0fc8006ec9006b0c9b9cd0a40105bab5f1a40106918bacf10208fc9fc683050dc6b3bb9106158db2d592091698a5d0c7091791b2fab80a18e0f8fffd0b198bf3afac0d1e89b8b3b30e1fa3f3c0ad0f256ecb006c03dbb70101cbe2b58b08cc00f1bb8b880d2901cd000100406c4830c8a17a0104010500ea2400006b63616e69737465725f69644a000000000000000101016e696e67726573735f6578706972791b172e7bf51d9c01c06b6d6574686f645f6e616d656d6d616e6167655f6e6575726f6e6c726571756573745f747970656463616c6c6673656e646572581d19aa3d42c048dd7d14f0cfa0df69a1c1381780f6e9a137abaa6a82e302', + // }, + // { + // name: 'candid_disburse', + // blob: 'd9d9f7a167636f6e74656e74a6636172675904064449444c4e6c01dbb701786e006e796e686e786c03bc949d820302dbe2be950903ef9999fe09046c01b9ef938008786d006c02afa3bda10175c2cee0d80c076c006c029cb1fa2503ba89e5c204786b039ef5cc0f099992ccd0010adae1c99903786e0b6c01d7ab010c6c01f6b0989a08036c018eddc3a60d036c01d0e1e9f60c7e6c018dc3b2b303796c01c88ecad50a786b0996a7f7150ef381d4ab020f8cb2f18c0710b09b9ba40709d0fb87af070990f29afe0711e4ac938d0c09f7aacfd80d09c3a2f6c90e126e136c01a78882820a146c02ea99cff20475b2b8d4960b016c01c38fbbd10b016c05f5bbe3900178d2bbf0d9017eb9ef93800878dbe2be950903ef9999fe09786c04efd6e4027198abec81011ab6f798b201ca00a696a48708716e716c02cbe4fdc70471fc91f4f8051a6e1b6c02dbb70101bac7a7fa0d1c6c01bbb4b09703026c01b99d9da50b796d7b6c01cedfa0a804206e216c01e0a9b302786e236c02a9ddf49b0722d8a38ca80d246b0c9b9cd0a40105bab5f1a40106918bacf10208fc9fc683050dc6b3bb9106158db2d592091698a5d0c7091791b2fab80a18e0f8fffd0b198bf3afac0d1e89b8b3b30e1fa3f3c0ad0f256e266b02cd8e8eb90420cebee1d308006e286c03dbb70101cbe2b58b0827f1bb8b880d296c02e4d7bee905758effd6e90e206c02dbb701039df1afe707226e2c6c01f5bbe39001786c01a9ddf49b07226b02fdf59aec0b2ee3b586ff0c2f6e306c03ce9ca6ce012df382ccb30731b9ef938008786c07fed391bd0178dcd0a0ab0378dfbcb4d80478edc6ecab087993e5e481097890b090af0e78ca9ab7d20f786e336c03d889bea60d04b5f6f9e90e03c6f6ebeb0e346c02f9889a5778b2cc99e705786e366c01edbb85f901376e386c02cfbe93a40439c796cdbe0b036c01c2cee0d80c076c020075013b6d3c6c0184aead333d6e7e6d326c02f8b9b6c9043fa4ccf7dd0ac0006c089eb493cf0378befa8dd40479be8fe6e30478ce89be97067886f998bc0978c5cae3d40a7893a190e00c78f5e1d0e70d786d686c018594e2c50bc3006b02bf80e42b2cc6a6e4b90a2c6ec5006c01f0a2cabb0bc6006c0196bdb4e904716b0c93a7e09d021dd881c9c4032ad69ce79d0a2b82ffcfaa0c329e9598a00d359dfa94a40d3ae3c3c5990e3eb1a5aea10ec100f5d9d7a50ec200fad5ddf40ec400db9cebf70ec700d6f4c7ff0fc8006ec9006b0c9b9cd0a40105bab5f1a40106918bacf10208fc9fc683050dc6b3bb9106158db2d592091698a5d0c7091791b2fab80a18e0f8fffd0b198bf3afac0d1e89b8b3b30e1fa3f3c0ad0f256ecb006c03dbb70101cbe2b58b08cc00f1bb8b880d2901cd000100c8c056ea395dd5010b0120d4685b31b51450508aff0331584df7692a84467b680326f5c5f7d30ae711682f00006b63616e69737465725f69644a000000000000000101016e696e67726573735f6578706972791b174e7cdd7982b7006b6d6574686f645f6e616d656d6d616e6167655f6e6575726f6e6c726571756573745f747970656463616c6c6673656e646572581d19aa3d42c048dd7d14f0cfa0df69a1c1381780f6e9a137abaa6a82e302', + // }, + // { + // name: 'candid_register_vote', + // blob: 'd9d9f7a167636f6e74656e74a6636172675903f04449444c4e6c01dbb701786e006e796e686e786c03bc949d820302dbe2be950903ef9999fe09046c01b9ef938008786d006c02afa3bda10175c2cee0d80c076c006c029cb1fa2503ba89e5c204786b039ef5cc0f099992ccd0010adae1c99903786e0b6c01d7ab010c6c01f6b0989a08036c018eddc3a60d036c01d0e1e9f60c7e6c018dc3b2b303796c01c88ecad50a786b0996a7f7150ef381d4ab020f8cb2f18c0710b09b9ba40709d0fb87af070990f29afe0711e4ac938d0c09f7aacfd80d09c3a2f6c90e126e136c01a78882820a146c02ea99cff20475b2b8d4960b016c01c38fbbd10b016c05f5bbe3900178d2bbf0d9017eb9ef93800878dbe2be950903ef9999fe09786c04efd6e4027198abec81011ab6f798b201ca00a696a48708716e716c02cbe4fdc70471fc91f4f8051a6e1b6c02dbb70101bac7a7fa0d1c6c01bbb4b09703026c01b99d9da50b796d7b6c01cedfa0a804206e216c01e0a9b302786e236c02a9ddf49b0722d8a38ca80d246b0c9b9cd0a40105bab5f1a40106918bacf10208fc9fc683050dc6b3bb9106158db2d592091698a5d0c7091791b2fab80a18e0f8fffd0b198bf3afac0d1e89b8b3b30e1fa3f3c0ad0f256e266b02cd8e8eb90420cebee1d308006e286c03dbb70101cbe2b58b0827f1bb8b880d296c02e4d7bee905758effd6e90e206c02dbb701039df1afe707226e2c6c01f5bbe39001786c01a9ddf49b07226b02fdf59aec0b2ee3b586ff0c2f6e306c03ce9ca6ce012df382ccb30731b9ef938008786c07fed391bd0178dcd0a0ab0378dfbcb4d80478edc6ecab087993e5e481097890b090af0e78ca9ab7d20f786e336c03d889bea60d04b5f6f9e90e03c6f6ebeb0e346c02f9889a5778b2cc99e705786e366c01edbb85f901376e386c02cfbe93a40439c796cdbe0b036c01c2cee0d80c076c020075013b6d3c6c0184aead333d6e7e6d326c02f8b9b6c9043fa4ccf7dd0ac0006c089eb493cf0378befa8dd40479be8fe6e30478ce89be97067886f998bc0978c5cae3d40a7893a190e00c78f5e1d0e70d786d686c018594e2c50bc3006b02bf80e42b2cc6a6e4b90a2c6ec5006c01f0a2cabb0bc6006c0196bdb4e904716b0c93a7e09d021dd881c9c4032ad69ce79d0a2b82ffcfaa0c329e9598a00d359dfa94a40d3ae3c3c5990e3eb1a5aea10ec100f5d9d7a50ec200fad5ddf40ec400db9cebf70ec700d6f4c7ff0fc8006ec9006b0c9b9cd0a40105bab5f1a40106918bacf10208fc9fc683050dc6b3bb9106158db2d592091698a5d0c7091791b2fab80a18e0f8fffd0b198bf3afac0d1e89b8b3b30e1fa3f3c0ad0f256ecb006c03dbb70101cbe2b58b08cc00f1bb8b880d2901cd000100c8c056ea395dd50105010000000179bf060000000000006b63616e69737465725f69644a000000000000000101016e696e67726573735f6578706972791b175e09d0fe279a406b6d6574686f645f6e616d656d6d616e6167655f6e6575726f6e6c726571756573745f747970656463616c6c6673656e646572581d19aa3d42c048dd7d14f0cfa0df69a1c1381780f6e9a137abaa6a82e302', + // }, + // { + // name: 'candid_follow', + // blob: 'd9d9f7a167636f6e74656e74a6636172675904004449444c4e6c01dbb701786e006e796e686e786c03bc949d820302dbe2be950903ef9999fe09046c01b9ef938008786d006c02afa3bda10175c2cee0d80c076c006c029cb1fa2503ba89e5c204786b039ef5cc0f099992ccd0010adae1c99903786e0b6c01d7ab010c6c01f6b0989a08036c018eddc3a60d036c01d0e1e9f60c7e6c018dc3b2b303796c01c88ecad50a786b0996a7f7150ef381d4ab020f8cb2f18c0710b09b9ba40709d0fb87af070990f29afe0711e4ac938d0c09f7aacfd80d09c3a2f6c90e126e136c01a78882820a146c02ea99cff20475b2b8d4960b016c01c38fbbd10b016c05f5bbe3900178d2bbf0d9017eb9ef93800878dbe2be950903ef9999fe09786c04efd6e4027198abec81011ab6f798b201ca00a696a48708716e716c02cbe4fdc70471fc91f4f8051a6e1b6c02dbb70101bac7a7fa0d1c6c01bbb4b09703026c01b99d9da50b796d7b6c01cedfa0a804206e216c01e0a9b302786e236c02a9ddf49b0722d8a38ca80d246b0c9b9cd0a40105bab5f1a40106918bacf10208fc9fc683050dc6b3bb9106158db2d592091698a5d0c7091791b2fab80a18e0f8fffd0b198bf3afac0d1e89b8b3b30e1fa3f3c0ad0f256e266b02cd8e8eb90420cebee1d308006e286c03dbb70101cbe2b58b0827f1bb8b880d296c02e4d7bee905758effd6e90e206c02dbb701039df1afe707226e2c6c01f5bbe39001786c01a9ddf49b07226b02fdf59aec0b2ee3b586ff0c2f6e306c03ce9ca6ce012df382ccb30731b9ef938008786c07fed391bd0178dcd0a0ab0378dfbcb4d80478edc6ecab087993e5e481097890b090af0e78ca9ab7d20f786e336c03d889bea60d04b5f6f9e90e03c6f6ebeb0e346c02f9889a5778b2cc99e705786e366c01edbb85f901376e386c02cfbe93a40439c796cdbe0b036c01c2cee0d80c076c020075013b6d3c6c0184aead333d6e7e6d326c02f8b9b6c9043fa4ccf7dd0ac0006c089eb493cf0378befa8dd40479be8fe6e30478ce89be97067886f998bc0978c5cae3d40a7893a190e00c78f5e1d0e70d786d686c018594e2c50bc3006b02bf80e42b2cc6a6e4b90a2c6ec5006c01f0a2cabb0bc6006c0196bdb4e904716b0c93a7e09d021dd881c9c4032ad69ce79d0a2b82ffcfaa0c329e9598a00d359dfa94a40d3ae3c3c5990e3eb1a5aea10ec100f5d9d7a50ec200fad5ddf40ec400db9cebf70ec700d6f4c7ff0fc8006ec9006b0c9b9cd0a40105bab5f1a40106918bacf10208fc9fc683050dc6b3bb9106158db2d592091698a5d0c7091791b2fab80a18e0f8fffd0b198bf3afac0d1e89b8b3b30e1fa3f3c0ad0f256ecb006c03dbb70101cbe2b58b08cc00f1bb8b880d2901cd0001fb14993b0000000001020e000000037c3fffcbaf0300006e8d3bbb0000000000406c4830c8a17a006b63616e69737465725f69644a000000000000000101016e696e67726573735f6578706972791b175e0b28227786006b6d6574686f645f6e616d656d6d616e6167655f6e6575726f6e6c726571756573745f747970656463616c6c6673656e646572581d19aa3d42c048dd7d14f0cfa0df69a1c1381780f6e9a137abaa6a82e302', + // }, + // { + // name: 'sns_add_permissions', + // blob: 'd9d9f7a167636f6e74656e74a66361726759036a4449444c3d6d7b6c02ba89e5c20478b9ef938008786c01dbb701006d026c02e28bbf1478c2cee0d80c036e686c01ad86ca8305006e066c02b3b0dac30305ad86ca8305076e086c02a9ddf49b0709a290ead30a796c029cb1fa2505ba89e5c204786c006b029992ccd0010bcebee1d3080c6e0d6c01d7ab010e6c01d0e1e9f60c7e6c018dc3b2b303796c01c88ecad50a786b058cb2f18c0710b09b9ba4070cd0fb87af070c90f29afe0711c3a2f6c90e126e136c01a78882820a146c01dbb701786e166c02ea99cff20475b2b8d4960b176c01c2cee0d80c036c02007801196d1a6c01c2cee0d80c1b6e1c6e786d756c0184f9d1761f6e206e796c04dc87d3aa031e8e8ab6f3081eefca8bdf0d1ea5a389b40f1e6e236c1384aead331df0cefc351ee9f1b4471ed2bbc8ef021ee28b959c03219eb493cf031ed8aa8f8f051e9ebddfd6051e81a6cee6051ece89be97061ec7dae0cc0622feeaf491091e93dfe6aa091e86f998bc091ec182ad960a1ef5cedb9b0b1eaf899aba0d21fde7b1fd0d24c2b0c4aa0f1e6e716c0486fef0ea0a0585f2acb20b05fcc8d7e40e26fbbc93ac0f266b02c2a2dd88070c829aa4b40e276e286c04dbb70178cbe4fdc70471fc91f4f8052681d9b08e0a296c05f8aff58a0175aaeff3c60105b1edd6810407ba89e5c2041eb9ef938008786c029db0f1b80200b3c4b1f204056c04efd6e40226ebbedebd0426cbe4fdc70426fc91f4f805266c02e28bbf14788effd6e90e006c0196bdb4e904716b0ac6c0d51025838db4492ae6d6e4ab0678aedd92a2070c9eb481da0b2bd1a8b0ae0c2c97f7e1c30e0c82a1cfcd0e2d97899f8d0f2ed6f4c7ff0f2f6e306c04efd6e4027198abec810171b6f798b20131a696a48708716c01bbb4b09703226c028d86f0fa0b218c8890fb0b056c02b8c789cb01218c8890fb0b056c01b99d9da50b796c01e0a9b302786e376c02a9ddf49b0709d8a38ca80d386b0cbab5f1a40101918bacf10204948c9eb4030afc9fc683050fc6b3bb9106158db2d5920918e0f8fffd0b328bf3afac0d33cde3c8d30d3490efabef0d3589b8b3b30e36a3f3c0ad0f396e3a6c02ad86ca830500cbe2b58b083b013c20a36e143c86e7e471e7c719506487cf7a6cf40da76361aeafee5133e1d9acea3d010901020a0000000500000001011d29794883d3efb57cc835619ba5961941d7a11ac192735943b2c886e9026b63616e69737465725f69644a000000000000009f01016e696e67726573735f6578706972791b173ce893f99352006b6d6574686f645f6e616d656d6d616e6167655f6e6575726f6e6c726571756573745f747970656463616c6c6673656e646572581d19aa3d42c048dd7d14f0cfa0df69a1c1381780f6e9a137abaa6a82e302', + // }, + // { + // name: 'sns_remove_permissions', + // blob: 'd9d9f7a167636f6e74656e74a66361726759036a4449444c3d6d7b6c02ba89e5c20478b9ef938008786c01dbb701006d026c02e28bbf1478c2cee0d80c036e686c01ad86ca8305006e066c02b3b0dac30305ad86ca8305076e086c02a9ddf49b0709a290ead30a796c029cb1fa2505ba89e5c204786c006b029992ccd0010bcebee1d3080c6e0d6c01d7ab010e6c01d0e1e9f60c7e6c018dc3b2b303796c01c88ecad50a786b058cb2f18c0710b09b9ba4070cd0fb87af070c90f29afe0711c3a2f6c90e126e136c01a78882820a146c01dbb701786e166c02ea99cff20475b2b8d4960b176c01c2cee0d80c036c02007801196d1a6c01c2cee0d80c1b6e1c6e786d756c0184f9d1761f6e206e796c04dc87d3aa031e8e8ab6f3081eefca8bdf0d1ea5a389b40f1e6e236c1384aead331df0cefc351ee9f1b4471ed2bbc8ef021ee28b959c03219eb493cf031ed8aa8f8f051e9ebddfd6051e81a6cee6051ece89be97061ec7dae0cc0622feeaf491091e93dfe6aa091e86f998bc091ec182ad960a1ef5cedb9b0b1eaf899aba0d21fde7b1fd0d24c2b0c4aa0f1e6e716c0486fef0ea0a0585f2acb20b05fcc8d7e40e26fbbc93ac0f266b02c2a2dd88070c829aa4b40e276e286c04dbb70178cbe4fdc70471fc91f4f8052681d9b08e0a296c05f8aff58a0175aaeff3c60105b1edd6810407ba89e5c2041eb9ef938008786c029db0f1b80200b3c4b1f204056c04efd6e40226ebbedebd0426cbe4fdc70426fc91f4f805266c02e28bbf14788effd6e90e006c0196bdb4e904716b0ac6c0d51025838db4492ae6d6e4ab0678aedd92a2070c9eb481da0b2bd1a8b0ae0c2c97f7e1c30e0c82a1cfcd0e2d97899f8d0f2ed6f4c7ff0f2f6e306c04efd6e4027198abec810171b6f798b20131a696a48708716c01bbb4b09703226c028d86f0fa0b218c8890fb0b056c02b8c789cb01218c8890fb0b056c01b99d9da50b796c01e0a9b302786e376c02a9ddf49b0709d8a38ca80d386b0cbab5f1a40101918bacf10204948c9eb4030afc9fc683050fc6b3bb9106158db2d5920918e0f8fffd0b328bf3afac0d33cde3c8d30d3490efabef0d3589b8b3b30e36a3f3c0ad0f396e3a6c02ad86ca830500cbe2b58b083b013c20d7e851652cd032ba5ed76b17f626aa47829f06e5235a0d580e96d3727729ea2401080102050000000100000001011d29794883d3efb57cc835619ba5961941d7a11ac192735943b2c886e9026b63616e69737465725f69644a000000000000001401016e696e67726573735f6578706972791b173ce89843e906c06b6d6574686f645f6e616d656d6d616e6167655f6e6575726f6e6c726571756573745f747970656463616c6c6673656e646572581d19aa3d42c048dd7d14f0cfa0df69a1c1381780f6e9a137abaa6a82e302', + // }, + // { + // name: 'sns_disburse', + // blob: 'd9d9f7a167636f6e74656e74a66361726759038c4449444c3d6d7b6c02ba89e5c20478b9ef938008786c01dbb701006d026c02e28bbf1478c2cee0d80c036e686c01ad86ca8305006e066c02b3b0dac30305ad86ca8305076e086c02a9ddf49b0709a290ead30a796c029cb1fa2505ba89e5c204786c006b029992ccd0010bcebee1d3080c6e0d6c01d7ab010e6c01d0e1e9f60c7e6c018dc3b2b303796c01c88ecad50a786b058cb2f18c0710b09b9ba4070cd0fb87af070c90f29afe0711c3a2f6c90e126e136c01a78882820a146c01dbb701786e166c02ea99cff20475b2b8d4960b176c01c2cee0d80c036c02007801196d1a6c01c2cee0d80c1b6e1c6e786d756c0184f9d1761f6e206e796c04dc87d3aa031e8e8ab6f3081eefca8bdf0d1ea5a389b40f1e6e236c1384aead331df0cefc351ee9f1b4471ed2bbc8ef021ee28b959c03219eb493cf031ed8aa8f8f051e9ebddfd6051e81a6cee6051ece89be97061ec7dae0cc0622feeaf491091e93dfe6aa091e86f998bc091ec182ad960a1ef5cedb9b0b1eaf899aba0d21fde7b1fd0d24c2b0c4aa0f1e6e716c0486fef0ea0a0585f2acb20b05fcc8d7e40e26fbbc93ac0f266b02c2a2dd88070c829aa4b40e276e286c04dbb70178cbe4fdc70471fc91f4f8052681d9b08e0a296c05f8aff58a0175aaeff3c60105b1edd6810407ba89e5c2041eb9ef938008786c029db0f1b80200b3c4b1f204056c04efd6e40226ebbedebd0426cbe4fdc70426fc91f4f805266c02e28bbf14788effd6e90e006c0196bdb4e904716b0ac6c0d51025838db4492ae6d6e4ab0678aedd92a2070c9eb481da0b2bd1a8b0ae0c2c97f7e1c30e0c82a1cfcd0e2d97899f8d0f2ed6f4c7ff0f2f6e306c04efd6e4027198abec810171b6f798b20131a696a48708716c01bbb4b09703226c028d86f0fa0b218c8890fb0b056c02b8c789cb01218c8890fb0b056c01b99d9da50b796c01e0a9b302786e376c02a9ddf49b0709d8a38ca80d386b0cbab5f1a40101918bacf10204948c9eb4030afc9fc683050fc6b3bb9106158db2d5920918e0f8fffd0b328bf3afac0d33cde3c8d30d3490efabef0d3589b8b3b30e36a3f3c0ad0f396e3a6c02ad86ca830500cbe2b58b083b013c20a36e143c86e7e471e7c719506487cf7a6cf40da76361aeafee5133e1d9acea3d010b0101011d841429ba30df507f14f52fbced0b037850b98d89aafaad5b7430f658020120d7e851652cd032ba5ed76b17f626aa47829f06e5235a0d580e96d3727729ea240100c2eb0b000000006b63616e69737465725f69644a000000000000001401016e696e67726573735f6578706972791b173f5f296e3e7a406b6d6574686f645f6e616d656d6d616e6167655f6e6575726f6e6c726571756573745f747970656463616c6c6673656e646572581d19aa3d42c048dd7d14f0cfa0df69a1c1381780f6e9a137abaa6a82e302', + // }, + // { + // name: 'sns_start_dissolve', + // blob: 'd9d9f7a167636f6e74656e74a6636172675903424449444c3d6d7b6c02ba89e5c20478b9ef938008786c01dbb701006d026c02e28bbf1478c2cee0d80c036e686c01ad86ca8305006e066c02b3b0dac30305ad86ca8305076e086c02a9ddf49b0709a290ead30a796c029cb1fa2505ba89e5c204786c006b029992ccd0010bcebee1d3080c6e0d6c01d7ab010e6c01d0e1e9f60c7e6c018dc3b2b303796c01c88ecad50a786b058cb2f18c0710b09b9ba4070cd0fb87af070c90f29afe0711c3a2f6c90e126e136c01a78882820a146c01dbb701786e166c02ea99cff20475b2b8d4960b176c01c2cee0d80c036c02007801196d1a6c01c2cee0d80c1b6e1c6e786d756c0184f9d1761f6e206e796c04dc87d3aa031e8e8ab6f3081eefca8bdf0d1ea5a389b40f1e6e236c1384aead331df0cefc351ee9f1b4471ed2bbc8ef021ee28b959c03219eb493cf031ed8aa8f8f051e9ebddfd6051e81a6cee6051ece89be97061ec7dae0cc0622feeaf491091e93dfe6aa091e86f998bc091ec182ad960a1ef5cedb9b0b1eaf899aba0d21fde7b1fd0d24c2b0c4aa0f1e6e716c0486fef0ea0a0585f2acb20b05fcc8d7e40e26fbbc93ac0f266b02c2a2dd88070c829aa4b40e276e286c04dbb70178cbe4fdc70471fc91f4f8052681d9b08e0a296c05f8aff58a0175aaeff3c60105b1edd6810407ba89e5c2041eb9ef938008786c029db0f1b80200b3c4b1f204056c04efd6e40226ebbedebd0426cbe4fdc70426fc91f4f805266c02e28bbf14788effd6e90e006c0196bdb4e904716b0ac6c0d51025838db4492ae6d6e4ab0678aedd92a2070c9eb481da0b2bd1a8b0ae0c2c97f7e1c30e0c82a1cfcd0e2d97899f8d0f2ed6f4c7ff0f2f6e306c04efd6e4027198abec810171b6f798b20131a696a48708716c01bbb4b09703226c028d86f0fa0b218c8890fb0b056c02b8c789cb01218c8890fb0b056c01b99d9da50b796c01e0a9b302786e376c02a9ddf49b0709d8a38ca80d386b0cbab5f1a40101918bacf10204948c9eb4030afc9fc683050fc6b3bb9106158db2d5920918e0f8fffd0b328bf3afac0d33cde3c8d30d3490efabef0d3589b8b3b30e36a3f3c0ad0f396e3a6c02ad86ca830500cbe2b58b083b013c20d7e851652cd032ba5ed76b17f626aa47829f06e5235a0d580e96d3727729ea24010401026b63616e69737465725f69644a000000000000001401016e696e67726573735f6578706972791b173ce896fceb4f406b6d6574686f645f6e616d656d6d616e6167655f6e6575726f6e6c726571756573745f747970656463616c6c6673656e646572581d19aa3d42c048dd7d14f0cfa0df69a1c1381780f6e9a137abaa6a82e302', + // }, + // { + // name: 'sns_stop_dissolve', + // blob: 'd9d9f7a167636f6e74656e74a6636172675903424449444c3d6d7b6c02ba89e5c20478b9ef938008786c01dbb701006d026c02e28bbf1478c2cee0d80c036e686c01ad86ca8305006e066c02b3b0dac30305ad86ca8305076e086c02a9ddf49b0709a290ead30a796c029cb1fa2505ba89e5c204786c006b029992ccd0010bcebee1d3080c6e0d6c01d7ab010e6c01d0e1e9f60c7e6c018dc3b2b303796c01c88ecad50a786b058cb2f18c0710b09b9ba4070cd0fb87af070c90f29afe0711c3a2f6c90e126e136c01a78882820a146c01dbb701786e166c02ea99cff20475b2b8d4960b176c01c2cee0d80c036c02007801196d1a6c01c2cee0d80c1b6e1c6e786d756c0184f9d1761f6e206e796c04dc87d3aa031e8e8ab6f3081eefca8bdf0d1ea5a389b40f1e6e236c1384aead331df0cefc351ee9f1b4471ed2bbc8ef021ee28b959c03219eb493cf031ed8aa8f8f051e9ebddfd6051e81a6cee6051ece89be97061ec7dae0cc0622feeaf491091e93dfe6aa091e86f998bc091ec182ad960a1ef5cedb9b0b1eaf899aba0d21fde7b1fd0d24c2b0c4aa0f1e6e716c0486fef0ea0a0585f2acb20b05fcc8d7e40e26fbbc93ac0f266b02c2a2dd88070c829aa4b40e276e286c04dbb70178cbe4fdc70471fc91f4f8052681d9b08e0a296c05f8aff58a0175aaeff3c60105b1edd6810407ba89e5c2041eb9ef938008786c029db0f1b80200b3c4b1f204056c04efd6e40226ebbedebd0426cbe4fdc70426fc91f4f805266c02e28bbf14788effd6e90e006c0196bdb4e904716b0ac6c0d51025838db4492ae6d6e4ab0678aedd92a2070c9eb481da0b2bd1a8b0ae0c2c97f7e1c30e0c82a1cfcd0e2d97899f8d0f2ed6f4c7ff0f2f6e306c04efd6e4027198abec810171b6f798b20131a696a48708716c01bbb4b09703226c028d86f0fa0b218c8890fb0b056c02b8c789cb01218c8890fb0b056c01b99d9da50b796c01e0a9b302786e376c02a9ddf49b0709d8a38ca80d386b0cbab5f1a40101918bacf10204948c9eb4030afc9fc683050fc6b3bb9106158db2d5920918e0f8fffd0b328bf3afac0d33cde3c8d30d3490efabef0d3589b8b3b30e36a3f3c0ad0f396e3a6c02ad86ca830500cbe2b58b083b013c20a36e143c86e7e471e7c719506487cf7a6cf40da76361aeafee5133e1d9acea3d010401016b63616e69737465725f69644a000000000000001401016e696e67726573735f6578706972791b173ce896fd46dcc06b6d6574686f645f6e616d656d6d616e6167655f6e6575726f6e6c726571756573745f747970656463616c6c6673656e646572581d19aa3d42c048dd7d14f0cfa0df69a1c1381780f6e9a137abaa6a82e302', + // }, + // { + // name: 'sns_stake_maturity', + // blob: 'd9d9f7a167636f6e74656e74a6636172675903454449444c3d6d7b6c02ba89e5c20478b9ef938008786c01dbb701006d026c02e28bbf1478c2cee0d80c036e686c01ad86ca8305006e066c02b3b0dac30305ad86ca8305076e086c02a9ddf49b0709a290ead30a796c029cb1fa2505ba89e5c204786c006b029992ccd0010bcebee1d3080c6e0d6c01d7ab010e6c01d0e1e9f60c7e6c018dc3b2b303796c01c88ecad50a786b058cb2f18c0710b09b9ba4070cd0fb87af070c90f29afe0711c3a2f6c90e126e136c01a78882820a146c01dbb701786e166c02ea99cff20475b2b8d4960b176c01c2cee0d80c036c02007801196d1a6c01c2cee0d80c1b6e1c6e786d756c0184f9d1761f6e206e796c04dc87d3aa031e8e8ab6f3081eefca8bdf0d1ea5a389b40f1e6e236c1384aead331df0cefc351ee9f1b4471ed2bbc8ef021ee28b959c03219eb493cf031ed8aa8f8f051e9ebddfd6051e81a6cee6051ece89be97061ec7dae0cc0622feeaf491091e93dfe6aa091e86f998bc091ec182ad960a1ef5cedb9b0b1eaf899aba0d21fde7b1fd0d24c2b0c4aa0f1e6e716c0486fef0ea0a0585f2acb20b05fcc8d7e40e26fbbc93ac0f266b02c2a2dd88070c829aa4b40e276e286c04dbb70178cbe4fdc70471fc91f4f8052681d9b08e0a296c05f8aff58a0175aaeff3c60105b1edd6810407ba89e5c2041eb9ef938008786c029db0f1b80200b3c4b1f204056c04efd6e40226ebbedebd0426cbe4fdc70426fc91f4f805266c02e28bbf14788effd6e90e006c0196bdb4e904716b0ac6c0d51025838db4492ae6d6e4ab0678aedd92a2070c9eb481da0b2bd1a8b0ae0c2c97f7e1c30e0c82a1cfcd0e2d97899f8d0f2ed6f4c7ff0f2f6e306c04efd6e4027198abec810171b6f798b20131a696a48708716c01bbb4b09703226c028d86f0fa0b218c8890fb0b056c02b8c789cb01218c8890fb0b056c01b99d9da50b796c01e0a9b302786e376c02a9ddf49b0709d8a38ca80d386b0cbab5f1a40101918bacf10204948c9eb4030afc9fc683050fc6b3bb9106158db2d5920918e0f8fffd0b328bf3afac0d33cde3c8d30d3490efabef0d3589b8b3b30e36a3f3c0ad0f396e3a6c02ad86ca830500cbe2b58b083b013c20d7e851652cd032ba5ed76b17f626aa47829f06e5235a0d580e96d3727729ea24010701210000006b63616e69737465725f69644a000000000000009f01016e696e67726573735f6578706972791b173f71f879f45e406b6d6574686f645f6e616d656d6d616e6167655f6e6575726f6e6c726571756573745f747970656463616c6c6673656e646572581d19aa3d42c048dd7d14f0cfa0df69a1c1381780f6e9a137abaa6a82e302', + // }, + // { + // name: 'icrc_transfer', + // blob: 'd9d9f7a167636f6e74656e74a66361726758be4449444c066d7b6e006c02b3b0dac30368ad86ca8305016e7d6e786c06fbca0102c6fcb60203ba89e5c20401a2de94eb060182f3f3910c04d8a38ca80d7d0105011d841429ba30df507f14f52fbced0b037850b98d89aafaad5b7430f658020120d7e851652cd032ba5ed76b17f626aa47829f06e5235a0d580e96d3727729ea2401b0ea0101080000000000ab41100120a36e143c86e7e471e7c719506487cf7a6cf40da76361aeafee5133e1d9acea3d01000011a4c4149c16c082d43e6b63616e69737465725f69644a000000000000000201016e696e67726573735f6578706972791b173f2e0ad323c0006b6d6574686f645f6e616d656e69637263315f7472616e736665726c726571756573745f747970656463616c6c6673656e646572581d19AA3D42C048DD7D14F0CFA0DF69A1C1381780F6E9A137ABAA6A82E302', + // }, ] describe.each(CANDID_TRANSACTIONS)('CANDID_SNS_ICRC', function (data) { From fe39b166de2e43923264e455ee073329778f79a3 Mon Sep 17 00:00:00 2001 From: neithanmo Date: Mon, 10 Feb 2025 11:58:41 -0600 Subject: [PATCH 2/6] Fix parser and complet UI for voting power transaction --- app/src/candid/candid_types.h | 543 +++++++++++++++++----------------- app/src/candid/nns_parser.c | 53 +--- app/src/parser.c | 1 + app/src/parser_impl.c | 14 +- app/src/parser_print_candid.c | 31 ++ app/src/parser_txdef.h | 256 ++++++++-------- 6 files changed, 446 insertions(+), 452 deletions(-) diff --git a/app/src/candid/candid_types.h b/app/src/candid/candid_types.h index 896fbd13..e3c83596 100644 --- a/app/src/candid/candid_types.h +++ b/app/src/candid/candid_types.h @@ -1,424 +1,423 @@ /******************************************************************************* -* (c) 2022 Zondax AG -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -********************************************************************************/ + * (c) 2022 Zondax AG + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + ********************************************************************************/ #pragma once #ifdef __cplusplus extern "C" { #endif -#include -#include #include "coin.h" +#include +#include #define YEAR_2100_IN_SECONDS 4102444800 typedef enum { - Null = -1, - Bool = -2, - Nat = -3, - Int = -4, - - Nat8 = -5, - Nat16 = -6, - Nat32 = -7, - Nat64 = -8, - - Int8 = -9, - Int16 = -10, - Int32 = -11, - Int64 = -12, - - Float32 = -13, - Float64 = -14, - Text = -15, - Reserved = -16, - Empty = -17, - Opt = -18, - Vector = -19, - Record = -20, - Variant = -21, - Func = -22, - Service = -23, - Principal = -24, + Null = -1, + Bool = -2, + Nat = -3, + Int = -4, + + Nat8 = -5, + Nat16 = -6, + Nat32 = -7, + Nat64 = -8, + + Int8 = -9, + Int16 = -10, + Int32 = -11, + Int64 = -12, + + Float32 = -13, + Float64 = -14, + Text = -15, + Reserved = -16, + Empty = -17, + Opt = -18, + Vector = -19, + Record = -20, + Variant = -21, + Func = -22, + Service = -23, + Principal = -24, } IDLTypes_e; typedef enum { - hash_id = 23515, - hash_hash = 1158164430, - hash_reward_account = 2095839389, - hash_amount_e8s = 2147809209, - hash_command = 2171433291, - hash_neuron_id_or_subaccount = 3506626033, - hash_source_neuron_id = 3123627971, - hash_operation = 2688582695, - hash_dissolve_timestamp_seconds = 2863826760, - hash_subaccount = 1193510733, - hash_neuron_id = 2323144526, - hash_neuron_ids = 2024218412, - hash_include_neurons_readable_by_caller = 3639893594, - hash_percentage_to_spawn = 809978428, - hash_new_controller = 2460987739, - hash_nonce = 2680573167, - hash_percentage_to_stake = 854334011, - hash_setting_auto_stake_maturity = 3470422224, - hash_setting_increse_dissolve_delay = 913088909, - hash_field_disburse_account = 1937583785, - hash_opt_amount = 3573748184, - hash_setting_addhotkey = 3570462350, - hash_setting_remove_hotkey = 2202409078, - hash_field_vote = 1314114794, - hash_field_proposal = 3000310834, - hash_field_follow_topic = 338645423, - hash_field_follow_followees = 3407357762, - // hash_neuron_voting_power = , + hash_id = 23515, + hash_hash = 1158164430, + hash_reward_account = 2095839389, + hash_amount_e8s = 2147809209, + hash_command = 2171433291, + hash_neuron_id_or_subaccount = 3506626033, + hash_source_neuron_id = 3123627971, + hash_operation = 2688582695, + hash_dissolve_timestamp_seconds = 2863826760, + hash_subaccount = 1193510733, + hash_neuron_id = 2323144526, + hash_neuron_ids = 2024218412, + hash_include_neurons_readable_by_caller = 3639893594, + hash_percentage_to_spawn = 809978428, + hash_new_controller = 2460987739, + hash_nonce = 2680573167, + hash_percentage_to_stake = 854334011, + hash_setting_auto_stake_maturity = 3470422224, + hash_setting_increse_dissolve_delay = 913088909, + hash_field_disburse_account = 1937583785, + hash_opt_amount = 3573748184, + hash_setting_addhotkey = 3570462350, + hash_setting_remove_hotkey = 2202409078, + hash_field_vote = 1314114794, + hash_field_proposal = 3000310834, + hash_field_follow_topic = 338645423, + hash_field_follow_followees = 3407357762, } txn_hash_fields; typedef enum { - sns_hash_subaccount = 1349681965, - sns_hash_command = 2171433291, - sns_hash_permissions_to_add = 425878456, - sns_hash_principal_id = 3211002892, - sns_hash_permissions_to_remove = 3210478349, - sns_hash_operation = 2688582695, - - sns_hash_neuron_permission_list = 248806532, - - sns_hash_disburse_to_account = 1937583785, - sns_hash_opt_principal = 947296307, - sns_hash_opt_amount = 3573748184, + sns_hash_subaccount = 1349681965, + sns_hash_command = 2171433291, + sns_hash_permissions_to_add = 425878456, + sns_hash_principal_id = 3211002892, + sns_hash_permissions_to_remove = 3210478349, + sns_hash_operation = 2688582695, + + sns_hash_neuron_permission_list = 248806532, + + sns_hash_disburse_to_account = 1937583785, + sns_hash_opt_principal = 947296307, + sns_hash_opt_amount = 3573748184, } sns_hash_fields; typedef enum { - transfer_hash_to = 25979, - transfer_hash_fee = 5094982, - transfer_hash_memo = 1213809850, - transfer_hash_from_subaccount = 1835347746, - transfer_hash_timestamp = 3258775938, - transfer_hash_amount = 3573748184, + transfer_hash_to = 25979, + transfer_hash_fee = 5094982, + transfer_hash_memo = 1213809850, + transfer_hash_from_subaccount = 1835347746, + transfer_hash_timestamp = 3258775938, + transfer_hash_amount = 3573748184, } transfer_hash_fields; typedef enum { - icrc_hash_to = 25979, - icrc_hash_owner = 947296307, - icrc_hash_subaccount = 1349681965, - icrc_hash_fee = 5094982, - icrc_hash_memo = 1213809850, - icrc_hash_from_subaccount = 1835347746, - icrc_hash_created_at_time = 3258775938, - icrc_hash_amount = 3573748184, + icrc_hash_to = 25979, + icrc_hash_owner = 947296307, + icrc_hash_subaccount = 1349681965, + icrc_hash_fee = 5094982, + icrc_hash_memo = 1213809850, + icrc_hash_from_subaccount = 1835347746, + icrc_hash_created_at_time = 3258775938, + icrc_hash_amount = 3573748184, } icrc_hash_fields; typedef enum { - hash_command_Spawn = 345247259, - hash_command_Split = 345791162, - hash_command_Follow = 774571409, - hash_command_RefreshVotingPower = 971637731, - hash_command_ClaimOrRefresh = 1349619708, - hash_command_Configure = 1647237574, - hash_command_RegisterVote = 2455066893, - hash_command_Merge = 2566132376, - hash_command_DisburseToNeuron = 2803800337, - hash_command_MakeProposal = 3217030240, - hash_command_StakeMaturity = 3582720395, - hash_command_MergeMaturity = 3865893897, - hash_command_Disburse = 4121967011, + hash_command_Spawn = 345247259, + hash_command_Split = 345791162, + hash_command_Follow = 774571409, + hash_command_ClaimOrRefresh = 1349619708, + hash_command_Configure = 1647237574, + hash_command_RegisterVote = 2455066893, + hash_command_Merge = 2566132376, + hash_command_DisburseToNeuron = 2803800337, + hash_command_RefreshVotingPower =971637731, + hash_command_MakeProposal = 3217030240, + hash_command_StakeMaturity = 3582720395, + hash_command_MergeMaturity = 3865893897, + hash_command_Disburse = 4121967011, } command_variant_hash_e; typedef enum { - sns_hash_command_Split = 345791162, - sns_hash_command_Follow = 774571409, - sns_hash_command_DisburseMaturity = 914851348, - sns_hash_command_Configure = 1647237574, - // sns_hash_command_RegisterVote = 1647237574, - sns_hash_command_SyncCommand = 2455066893, - sns_hash_command_MakeProposal = 3217030240, - sns_hash_command_StakeMaturity = 3582720395, - sns_hash_command_RemoveNeuronPermissions = 3664916941, - sns_hash_command_AddNeuronPermissions = 3723163536, - sns_hash_command_MergeMaturity = 3865893897, - sns_hash_command_Disburse = 4121967011, + sns_hash_command_Split = 345791162, + sns_hash_command_Follow = 774571409, + sns_hash_command_DisburseMaturity = 914851348, + sns_hash_command_Configure = 1647237574, + // sns_hash_command_RegisterVote = 1647237574, + sns_hash_command_SyncCommand = 2455066893, + sns_hash_command_MakeProposal = 3217030240, + sns_hash_command_StakeMaturity = 3582720395, + sns_hash_command_RemoveNeuronPermissions = 3664916941, + sns_hash_command_AddNeuronPermissions = 3723163536, + sns_hash_command_MergeMaturity = 3865893897, + sns_hash_command_Disburse = 4121967011, } sns_hash_commands; typedef enum { - //Check these hashes - hash_operation_Invalid = 971299358, - hash_operation_StopDissolving = 1954991536, - hash_operation_IncreaseDissolveDelay = 2143729936, - hash_operation_AddHotkey = 628424947, - hash_operation_RemoveHotkey = 45994902, - hash_operation_JoinNeuronsFund = 3248805476, - hash_operation_ChangeAutoStakeMaturity = 1906071820, - - hash_operation_StartDissolving = 1977744848, - hash_operation_LeaveNeuronsFund = 3675510135, - hash_operation_SetDissolvedTimestamp = 3913126211, + // Check these hashes + hash_operation_Invalid = 971299358, + hash_operation_StopDissolving = 1954991536, + hash_operation_IncreaseDissolveDelay = 2143729936, + hash_operation_AddHotkey = 628424947, + hash_operation_RemoveHotkey = 45994902, + hash_operation_JoinNeuronsFund = 3248805476, + hash_operation_ChangeAutoStakeMaturity = 1906071820, + + hash_operation_StartDissolving = 1977744848, + hash_operation_LeaveNeuronsFund = 3675510135, + hash_operation_SetDissolvedTimestamp = 3913126211, } operation_variant_hash_e; typedef enum { - FOLLOW_TOPIC_UNSPECIFIED = 0, - FOLLOW_TOPIC_NEURON_MANAGEMENT = 1, - FOLLOW_TOPIC_EXCHANGE_RATE = 2, - FOLLOW_TOPIC_NETWORK_ECONOMICS = 3, - FOLLOW_TOPIC_GOVERNANCE = 4, - FOLLOW_TOPIC_NODE_ADMIN = 5, - FOLLOW_TOPIC_PARTICIPANT_MANAGEMENT = 6, - FOLLOW_TOPIC_SUBNET_MANAGEMENT = 7, - FOLLOW_TOPIC_NETWORK_CANISTER_MANAGEMENT = 8, - FOLLOW_TOPIC_KYC = 9, - FOLLOW_TOPIC_NODE_PROVIDER_REWARDS = 10, - FOLLOW_TOPIC_SNS_DECENTRALIZATION_SALE = 11, - FOLLOW_TOPIC_SUBNET_REPLICA_VERSION_MANAGEMENT = 12, - FOLLOW_TOPIC_REPLICA_VERSION_MANAGEMENT = 13, - FOLLOW_TOPIC_SNS_AND_NEURONS_FUND = 14, + FOLLOW_TOPIC_UNSPECIFIED = 0, + FOLLOW_TOPIC_NEURON_MANAGEMENT = 1, + FOLLOW_TOPIC_EXCHANGE_RATE = 2, + FOLLOW_TOPIC_NETWORK_ECONOMICS = 3, + FOLLOW_TOPIC_GOVERNANCE = 4, + FOLLOW_TOPIC_NODE_ADMIN = 5, + FOLLOW_TOPIC_PARTICIPANT_MANAGEMENT = 6, + FOLLOW_TOPIC_SUBNET_MANAGEMENT = 7, + FOLLOW_TOPIC_NETWORK_CANISTER_MANAGEMENT = 8, + FOLLOW_TOPIC_KYC = 9, + FOLLOW_TOPIC_NODE_PROVIDER_REWARDS = 10, + FOLLOW_TOPIC_SNS_DECENTRALIZATION_SALE = 11, + FOLLOW_TOPIC_SUBNET_REPLICA_VERSION_MANAGEMENT = 12, + FOLLOW_TOPIC_REPLICA_VERSION_MANAGEMENT = 13, + FOLLOW_TOPIC_SNS_AND_NEURONS_FUND = 14, } candid_FollowTopics_e; // Permissions ENUM // https://github.com/dfinity/ic-js/blob/d82310ec5519160b5fa2ec94fd82200485bd3ccc/packages/sns/src/enums/governance.enums.ts#L2 typedef enum { - NEURON_PERMISSION_TYPE_UNSPECIFIED = 0, - NEURON_PERMISSION_TYPE_CONFIGURE_DISSOLVE_STATE = 1, - NEURON_PERMISSION_TYPE_MANAGE_PRINCIPALS = 2, - NEURON_PERMISSION_TYPE_SUBMIT_PROPOSAL = 3, - NEURON_PERMISSION_TYPE_VOTE = 4, - NEURON_PERMISSION_TYPE_DISBURSE = 5, - NEURON_PERMISSION_TYPE_SPLIT = 6, - NEURON_PERMISSION_TYPE_MERGE_MATURITY = 7, - NEURON_PERMISSION_TYPE_DISBURSE_MATURITY = 8, - NEURON_PERMISSION_TYPE_STAKE_MATURITY = 9, - NEURON_PERMISSION_TYPE_MANAGE_VOTING_PERMISSION = 10, + NEURON_PERMISSION_TYPE_UNSPECIFIED = 0, + NEURON_PERMISSION_TYPE_CONFIGURE_DISSOLVE_STATE = 1, + NEURON_PERMISSION_TYPE_MANAGE_PRINCIPALS = 2, + NEURON_PERMISSION_TYPE_SUBMIT_PROPOSAL = 3, + NEURON_PERMISSION_TYPE_VOTE = 4, + NEURON_PERMISSION_TYPE_DISBURSE = 5, + NEURON_PERMISSION_TYPE_SPLIT = 6, + NEURON_PERMISSION_TYPE_MERGE_MATURITY = 7, + NEURON_PERMISSION_TYPE_DISBURSE_MATURITY = 8, + NEURON_PERMISSION_TYPE_STAKE_MATURITY = 9, + NEURON_PERMISSION_TYPE_MANAGE_VOTING_PERMISSION = 10, } sns_permissions_e; typedef struct { - uint64_t len; - const uint8_t *p; + uint64_t len; + const uint8_t *p; } sizedBuffer_t; typedef struct { - uint64_t id; + uint64_t id; } candid_NeuronId; typedef struct { - uint8_t requested_setting_for_auto_stake_maturity; + uint8_t requested_setting_for_auto_stake_maturity; } candid_ChangeAutoStakeMaturity_t; typedef struct { - uint64_t dissolve_timestamp_seconds; + uint64_t dissolve_timestamp_seconds; } candid_SetDissolveTimestamp_t; typedef struct { - uint32_t dissolve_timestamp_seconds; + uint32_t dissolve_timestamp_seconds; } candid_IncreaseDissolveDelay_t; typedef struct { - uint8_t len; - uint8_t ptr[30]; + uint8_t len; + uint8_t ptr[30]; } candid_Principal_t; typedef struct { - uint8_t has_principal; - candid_Principal_t principal; + uint8_t has_principal; + candid_Principal_t principal; } candid_AddRemoveHotkey_t; typedef struct { - uint64_t which; - uint64_t hash; - union { - candid_SetDissolveTimestamp_t setDissolveTimestamp; - candid_ChangeAutoStakeMaturity_t autoStakeMaturity; - candid_IncreaseDissolveDelay_t increaseDissolveDelay; - candid_AddRemoveHotkey_t hotkey; - }; + uint64_t which; + uint64_t hash; + union { + candid_SetDissolveTimestamp_t setDissolveTimestamp; + candid_ChangeAutoStakeMaturity_t autoStakeMaturity; + candid_IncreaseDissolveDelay_t increaseDissolveDelay; + candid_AddRemoveHotkey_t hotkey; + }; } candid_Operation_t; typedef struct { - uint8_t has_percentage_to_spawn; - uint32_t percentage_to_spawn; + uint8_t has_percentage_to_spawn; + uint32_t percentage_to_spawn; - uint8_t has_controller; - candid_Principal_t new_controller; + uint8_t has_controller; + candid_Principal_t new_controller; - uint8_t has_nonce; - uint64_t nonce; + uint8_t has_nonce; + uint64_t nonce; } candid_Spawn_t; typedef struct { - uint64_t amount_e8s; + uint64_t amount_e8s; } candid_Split_t; typedef struct { - uint8_t has_source; - candid_NeuronId source; + uint8_t has_source; + candid_NeuronId source; } candid_Merge_t; typedef struct { - uint8_t has_operation; - candid_Operation_t operation; + uint8_t has_operation; + candid_Operation_t operation; } candid_Configure_t; typedef struct { - uint8_t has_percentage_to_stake; - uint32_t percentage_to_stake; + uint8_t has_percentage_to_stake; + uint32_t percentage_to_stake; } candid_StakeMaturity_t; typedef struct { - uint8_t has_account_identifier; - sizedBuffer_t account_identifier; + uint8_t has_account_identifier; + sizedBuffer_t account_identifier; - uint8_t has_amount; - uint64_t amount; + uint8_t has_amount; + uint64_t amount; } candid_Disburse_t; typedef struct { - int32_t vote; + int32_t vote; - uint8_t has_proposal; - candid_NeuronId proposal; + uint8_t has_proposal; + candid_NeuronId proposal; } candid_RegisterVote_t; typedef struct { - int32_t topic; + int32_t topic; - uint8_t followees_size; - const uint8_t* followees_ptr; + uint8_t followees_size; + const uint8_t *followees_ptr; } candid_Follow_t; typedef struct { - candid_NeuronId neuron_id; + candid_NeuronId neuron_id; } candid_RefreshVotingPower_t; typedef struct { - uint8_t list_size; - const uint8_t *permissions_list_ptr; + uint8_t list_size; + const uint8_t *permissions_list_ptr; } sns_NeuronPermissionList_t; typedef struct { - uint8_t has_permissionList; - sns_NeuronPermissionList_t permissionList; + uint8_t has_permissionList; + sns_NeuronPermissionList_t permissionList; - uint8_t has_principal; - candid_Principal_t principal; + uint8_t has_principal; + candid_Principal_t principal; } sns_NeuronPermissions_t; typedef struct { - uint8_t has_owner; - candid_Principal_t owner; + uint8_t has_owner; + candid_Principal_t owner; - uint8_t has_subaccount; - sizedBuffer_t subaccount; + uint8_t has_subaccount; + sizedBuffer_t subaccount; } Account_t; typedef struct { - uint64_t memo; - uint64_t amount; - uint64_t fee; + uint64_t memo; + uint64_t amount; + uint64_t fee; - uint8_t has_from_subaccount; - sizedBuffer_t from_subaccount; + uint8_t has_from_subaccount; + sizedBuffer_t from_subaccount; - uint8_t to[DFINITY_ADDR_LEN]; + uint8_t to[DFINITY_ADDR_LEN]; - uint8_t has_timestamp; - uint64_t timestamp; + uint8_t has_timestamp; + uint64_t timestamp; } candid_transfer_t; typedef struct { - uint8_t icp_canister; - Account_t account; + uint8_t icp_canister; + Account_t account; - uint8_t has_fee; - uint64_t fee; + uint8_t has_fee; + uint64_t fee; - uint8_t has_memo; - sizedBuffer_t memo; + uint8_t has_memo; + sizedBuffer_t memo; - uint8_t has_from_subaccount; - sizedBuffer_t from_subaccount; + uint8_t has_from_subaccount; + sizedBuffer_t from_subaccount; - uint8_t has_created_at_time; - uint64_t created_at_time; + uint8_t has_created_at_time; + uint64_t created_at_time; - uint64_t amount; + uint64_t amount; } icrc_transfer_t; typedef struct { - uint8_t has_account; - Account_t account; + uint8_t has_account; + Account_t account; - uint8_t has_amount; - uint64_t amount; + uint8_t has_amount; + uint64_t amount; } sns_Disburse_t; typedef struct { - uint64_t variant; - uint64_t hash; - union { - candid_Spawn_t spawn; - candid_Split_t split; - candid_Merge_t merge; - candid_Configure_t configure; - candid_StakeMaturity_t stake; - candid_Disburse_t disburse; - candid_RegisterVote_t vote; - candid_Follow_t follow; - candid_RefreshVotingPower_t refresh_voting_power; - - sns_NeuronPermissions_t neuronPermissions; - sns_Disburse_t sns_disburse; - }; + uint64_t variant; + uint64_t hash; + union { + candid_Spawn_t spawn; + candid_Split_t split; + candid_Merge_t merge; + candid_Configure_t configure; + candid_StakeMaturity_t stake; + candid_Disburse_t disburse; + candid_RegisterVote_t vote; + candid_Follow_t follow; + candid_RefreshVotingPower_t refresh_voting_power; + + sns_NeuronPermissions_t neuronPermissions; + sns_Disburse_t sns_disburse; + }; } candid_Command_t; typedef struct { - uint64_t which; - union { - sizedBuffer_t subaccount; - candid_NeuronId neuronId; - }; + uint64_t which; + union { + sizedBuffer_t subaccount; + candid_NeuronId neuronId; + }; } candid_Neuron_id_or_subaccount_t; typedef struct { - uint8_t has_id; - candid_NeuronId id; + uint8_t has_id; + candid_NeuronId id; - uint8_t has_command; - candid_Command_t command; + uint8_t has_command; + candid_Command_t command; - uint8_t has_neuron_id_or_subaccount; - candid_Neuron_id_or_subaccount_t neuron_id_or_subaccount; + uint8_t has_neuron_id_or_subaccount; + candid_Neuron_id_or_subaccount_t neuron_id_or_subaccount; } candid_ManageNeuron_t; typedef struct { - sizedBuffer_t subaccount; + sizedBuffer_t subaccount; - uint8_t has_command; - candid_Command_t command; + uint8_t has_command; + candid_Command_t command; } sns_ManageNeuron_t; typedef struct { - uint8_t has_reward_account; - sizedBuffer_t account_identifier; + uint8_t has_reward_account; + sizedBuffer_t account_identifier; } candid_UpdateNodeProvider_t; typedef struct { - uint8_t neuron_ids_size; - const uint8_t *neuron_ids_ptr; + uint8_t neuron_ids_size; + const uint8_t *neuron_ids_ptr; - uint8_t has_include_empty_neurons_readable_by_caller; - uint8_t include_empty_neurons_readable_by_caller; - uint8_t include_neurons_readable_by_caller; + uint8_t has_include_empty_neurons_readable_by_caller; + uint8_t include_empty_neurons_readable_by_caller; + uint8_t include_neurons_readable_by_caller; } candid_ListNeurons_t; #ifdef __cplusplus diff --git a/app/src/candid/nns_parser.c b/app/src/candid/nns_parser.c index 4cad6ba8..fd96cb03 100644 --- a/app/src/candid/nns_parser.c +++ b/app/src/candid/nns_parser.c @@ -347,51 +347,16 @@ __Z_INLINE parser_error_t readCommandFollow(parser_context_t *ctx, candid_transa // according to spec this should ve an empty record // https://github.com/dfinity/ic/blob/master/rs/nns/governance/canister/governance.did#L111 __Z_INLINE parser_error_t readCommandRefreshVotingPower(parser_context_t *ctx, candid_transaction_t *txn, candid_ManageNeuron_t* val) { - zemu_log("readCommandRefreshVotingPower\n"); - // Check sanity Merge + // Check that this is an empty record type CHECK_PARSER_ERR(getCandidTypeFromTable(txn, txn->element.implementation)) - zemu_log("getCandidTypeFromTable\n"); - zemu_log("is an Empty record\n"); - CHECK_PARSER_ERR(readCandidRecordLength(txn)) - zemu_log("readCandidRecordLength\n"); - ZEMU_LOGF(50, "record_len: %d \n",txn->txn_length); - // if (txn->txn_length != 1) { - // return parser_unexpected_value; - // } - // txn->element.variant_index = 0; - // CHECK_PARSER_ERR(readCandidInnerElement(txn, &txn->element)) - // zemu_log("readCandidInnerElement\n"); - // - // uint64_t hash = txn->element.field_hash; - // ZEMU_LOGF(50, "field_hash: %02x%02x%02x%02x%02x%02x%02x%02x\n", - // (unsigned)((hash >> 56) & 0xFF), - // (unsigned)((hash >> 48) & 0xFF), - // (unsigned)((hash >> 40) & 0xFF), - // (unsigned)((hash >> 32) & 0xFF), - // (unsigned)((hash >> 24) & 0xFF), - // (unsigned)((hash >> 16) & 0xFF), - // (unsigned)((hash >> 8) & 0xFF), - // (unsigned)(hash & 0xFF)); - // - // if (txn->element.field_hash != hash_source_neuron_id) { - // return parser_unexpected_type; - // } - // - // CHECK_PARSER_ERR(getCandidTypeFromTable(txn, txn->element.implementation)) - // CHECK_PARSER_ERR(readCandidOptional(txn)) - // - // CHECK_PARSER_ERR(getCandidTypeFromTable(txn, txn->element.implementation)) - // CHECK_PARSER_ERR(readCandidRecordLength(txn)) - // if (txn->txn_length != 1) { - // return parser_unexpected_value; - // } - // CHECK_PARSER_ERR(readCandidInnerElement(txn, &txn->element)) - // - // if (txn->element.field_hash != hash_id || txn->element.implementation != Nat64) { - // return parser_unexpected_type; - // } - // - // CHECK_PARSER_ERR(readCandidNat64(ctx, &val->command.refresh_voting_power.neuron_id.id)) + + // Read record length - for empty record this should be 0 + CHECK_PARSER_ERR(readCandidRecordLength(txn)); + + // Verify the record is empty (length should be 0) + if (txn->txn_length != 0) { + return parser_unexpected_value; + } return parser_ok; } diff --git a/app/src/parser.c b/app/src/parser.c index d73ee05f..6c34fadc 100644 --- a/app/src/parser.c +++ b/app/src/parser.c @@ -128,6 +128,7 @@ parser_error_t parser_parse(parser_context_t *ctx, const uint8_t *data, size_t d } parser_error_t parser_validate(const parser_context_t *ctx) { + zemu_log("parser_validate\n"); CHECK_PARSER_ERR(_validateTx(ctx, &parser_tx_obj)) // Iterate through all items to check that all can be shown and are valid uint8_t numItems = 0; diff --git a/app/src/parser_impl.c b/app/src/parser_impl.c index 794e4fc2..5c052904 100644 --- a/app/src/parser_impl.c +++ b/app/src/parser_impl.c @@ -315,9 +315,6 @@ GEN_PARSER_PB(ic_nns_governance_pb_v1_ManageNeuron) GEN_PARSER_PB(ListNeurons) parser_error_t getManageNeuronType(const parser_tx_t *v, manageNeuron_e *mn_type) { - zemu_log("getManageNeuronType****\n"); - ZEMU_LOGF(50, "method_type %d\n", v->tx_fields.call.method_type); - switch (v->tx_fields.call.method_type) { case pb_manageneuron: { pb_size_t command = v->tx_fields.call.data.ic_nns_governance_pb_v1_ManageNeuron.which_command; @@ -349,6 +346,7 @@ parser_error_t getManageNeuronType(const parser_tx_t *v, manageNeuron_e *mn_type } } case candid_manageneuron: { + if (!v->tx_fields.call.data.candid_manageNeuron.has_command) { return parser_unexpected_value; } @@ -374,6 +372,9 @@ parser_error_t getManageNeuronType(const parser_tx_t *v, manageNeuron_e *mn_type case hash_command_Follow: *mn_type = FollowCandid; return parser_ok; + case hash_command_RefreshVotingPower: + *mn_type = RefreshVotingPower; + return parser_ok; case hash_command_Configure: { if (!command->configure.has_operation) { return parser_unexpected_value; @@ -434,11 +435,7 @@ parser_error_t getManageNeuronType(const parser_tx_t *v, manageNeuron_e *mn_type } parser_error_t readPayload(parser_tx_t *v, uint8_t *buffer, size_t bufferLen) { - zemu_log_stack("readPayload***\n"); char *method = v->tx_fields.call.method_name.data; - zemu_log_stack("***method: "); - zemu_log_stack(method); - zemu_log_stack("\n"); manageNeuron_e mn_type; v->tx_fields.call.is_sns = 0; // we'll set this var later if is sns @@ -529,7 +526,6 @@ static bool isCandidTransaction(parser_tx_t *v) { parser_error_t readContent(CborValue *content_map, parser_tx_t *v) { CborValue content_it; - zemu_log_stack("read content"); PARSER_ASSERT_OR_ERROR(cbor_value_is_container(content_map), parser_unexpected_type) CHECK_CBOR_MAP_ERR(cbor_value_enter_container(content_map, &content_it)) CHECK_CBOR_TYPE(cbor_value_get_type(content_map), CborMapType) @@ -877,6 +873,8 @@ uint8_t getNumItemsManageNeurons(__Z_UNUSED const parser_context_t *c, const par case SNS_StakeMaturity: return 3 + (v->tx_fields.call.data.sns_manageNeuron.command.stake.has_percentage_to_stake ? 1 : 0); + case RefreshVotingPower: + return 2; default: break; diff --git a/app/src/parser_print_candid.c b/app/src/parser_print_candid.c index 7b6aac35..4ec9e580 100644 --- a/app/src/parser_print_candid.c +++ b/app/src/parser_print_candid.c @@ -1389,6 +1389,35 @@ static parser_error_t parser_getItemSNSSetDissolveDelay( return parser_no_data; } +static parser_error_t parser_getItemRefreshNeuronVotingPower(uint8_t displayIdx, + char *outKey, uint16_t outKeyLen, + char *outVal, uint16_t outValLen, + uint8_t pageIdx, uint8_t *pageCount) { + *pageCount = 1; + const candid_ManageNeuron_t *fields = &parser_tx_obj.tx_fields.call.data.candid_manageNeuron; + + if (displayIdx == 0) { + snprintf(outKey, outKeyLen, "Transaction type"); + pageString(outVal, outValLen, "Refresh Neuron Voting Power", pageIdx, pageCount); + return parser_ok; + } + if (displayIdx == 1) { + snprintf(outKey, outKeyLen, "Neuron ID"); + + if (fields->has_id) { + return print_u64(fields->id.id, outVal, outValLen, pageIdx, pageCount); + } + + if (fields->has_neuron_id_or_subaccount && fields->neuron_id_or_subaccount.which == 1) { + return print_u64(fields->neuron_id_or_subaccount.neuronId.id, outVal, outValLen, pageIdx, pageCount); + } + + return parser_unexpected_type; + } + + return parser_no_data; +} + __Z_INLINE parser_error_t parser_getItemManageNeuron( const parser_context_t *ctx, uint8_t displayIdx, char *outKey, uint16_t outKeyLen, char *outVal, uint16_t outValLen, uint8_t pageIdx, @@ -1473,6 +1502,8 @@ __Z_INLINE parser_error_t parser_getItemManageNeuron( case SNS_Configure_SetDissolveDelay: return parser_getItemSNSSetDissolveDelay( displayIdx, outKey, outKeyLen, outVal, outValLen, pageIdx, pageCount); + case RefreshVotingPower: + return parser_getItemRefreshNeuronVotingPower(displayIdx, outKey, outKeyLen, outVal, outValLen, pageIdx, pageCount); default: return parser_no_data; diff --git a/app/src/parser_txdef.h b/app/src/parser_txdef.h index 0f0e7e2a..d6a146ef 100644 --- a/app/src/parser_txdef.h +++ b/app/src/parser_txdef.h @@ -1,23 +1,23 @@ /******************************************************************************* -* (c) 2019 Zondax GmbH -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -********************************************************************************/ + * (c) 2019 Zondax GmbH + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + ********************************************************************************/ #pragma once #include -#include #include +#include #define ZX_NO_CPP @@ -30,8 +30,8 @@ extern "C" { #include "candid_types.h" -#include #include +#include #define SENDER_MAX_LEN 29 #define CANISTER_MAX_LEN 10 @@ -48,160 +48,160 @@ extern "C" { #define CANISTER_ID_STR_MAX_LEN 32 typedef enum { - unknown = 0x00, // default is not accepted - call = 0x01, - state_transaction_read = 0x02, + unknown = 0x00, // default is not accepted + call = 0x01, + state_transaction_read = 0x02, } txtype_e; typedef enum { - pb_unknown = 0x00, //default is not accepted - pb_sendrequest = 0x01, - pb_manageneuron = 0x02, - pb_listneurons = 0x03, - pb_claimneurons = 0x04, - - candid_transfer = 0xF001, - candid_manageneuron = 0xF002, - candid_updatenodeprovider = 0xF003, - candid_listneurons = 0xF004, - candid_icrc_transfer = 0xF005, + pb_unknown = 0x00, // default is not accepted + pb_sendrequest = 0x01, + pb_manageneuron = 0x02, + pb_listneurons = 0x03, + pb_claimneurons = 0x04, + + candid_transfer = 0xF001, + candid_manageneuron = 0xF002, + candid_updatenodeprovider = 0xF003, + candid_listneurons = 0xF004, + candid_icrc_transfer = 0xF005, } method_type_e; typedef enum { - Configure = 2, - Configure_IncreaseDissolveDelay = 2001, - Configure_StartDissolving = 2002, - Configure_StopDissolving = 2003, - Configure_AddHotKey = 2004, - Configure_RemoveHotKey = 2005, - Configure_SetDissolvedTimestamp = 2006, - Configure_JoinNeuronsFund = 2007, - Configure_LeaveNeuronsFund = 2008, - Configure_ChangeAutoStakeMaturity = 2009, - - Disburse = 3, - Spawn = 4, - Follow = 5, - RegisterVote = 7, - Split = 11, - - Merge = 1000, - SpawnCandid = 1001, - StakeMaturityCandid = 1002, - Configure_IncreaseDissolveDelayCandid = 1003, - Configure_StartDissolvingCandid = 1004, - Configure_StopDissolvingCandid = 1005, - DisburseCandid = 1006, - Configure_JoinNeuronsFundCandid = 1007, - Configure_LeaveNeuronsFundCandid = 1008, - Configure_AddHotkeyCandid = 1009, - Configure_RemoveHotkeyCandid = 1010, - RegisterVoteCandid = 1011, - FollowCandid = 1012, - // New command for manage neuron transactions - RefreshVotingPower = 973889507, - - SNS_AddNeuronPermissions = 3000, - SNS_RemoveNeuronPermissions = 3001, - SNS_Configure_StartDissolving = 3002, - SNS_Configure_StopDissolving = 3003, - SNS_Disburse = 3004, - SNS_StakeMaturity = 3005, - SNS_Configure_SetDissolveDelay = 3006, + Configure = 2, + Configure_IncreaseDissolveDelay = 2001, + Configure_StartDissolving = 2002, + Configure_StopDissolving = 2003, + Configure_AddHotKey = 2004, + Configure_RemoveHotKey = 2005, + Configure_SetDissolvedTimestamp = 2006, + Configure_JoinNeuronsFund = 2007, + Configure_LeaveNeuronsFund = 2008, + Configure_ChangeAutoStakeMaturity = 2009, + + Disburse = 3, + Spawn = 4, + Follow = 5, + RegisterVote = 7, + Split = 11, + + Merge = 1000, + SpawnCandid = 1001, + StakeMaturityCandid = 1002, + Configure_IncreaseDissolveDelayCandid = 1003, + Configure_StartDissolvingCandid = 1004, + Configure_StopDissolvingCandid = 1005, + DisburseCandid = 1006, + Configure_JoinNeuronsFundCandid = 1007, + Configure_LeaveNeuronsFundCandid = 1008, + Configure_AddHotkeyCandid = 1009, + Configure_RemoveHotkeyCandid = 1010, + RegisterVoteCandid = 1011, + FollowCandid = 1012, + // New command for manage neuron transactions + RefreshVotingPower = 971637731, + + SNS_AddNeuronPermissions = 3000, + SNS_RemoveNeuronPermissions = 3001, + SNS_Configure_StartDissolving = 3002, + SNS_Configure_StopDissolving = 3003, + SNS_Disburse = 3004, + SNS_StakeMaturity = 3005, + SNS_Configure_SetDissolveDelay = 3006, } manageNeuron_e; typedef enum { - invalid = 0x00, - normal_transaction = 0x01, - neuron_stake_transaction = 0x02, + invalid = 0x00, + normal_transaction = 0x01, + neuron_stake_transaction = 0x02, } special_transfer_e; typedef struct { - uint8_t data[SENDER_MAX_LEN + 1]; - size_t len; + uint8_t data[SENDER_MAX_LEN + 1]; + size_t len; } sender_t; typedef struct { - uint8_t data[CANISTER_MAX_LEN + 1]; - size_t len; + uint8_t data[CANISTER_MAX_LEN + 1]; + size_t len; } canister_id_t; typedef struct { - char data[REQUEST_MAX_LEN + 1]; - size_t len; + char data[REQUEST_MAX_LEN + 1]; + size_t len; } request_t; typedef struct { - char data[METHOD_MAX_LEN + 1]; - size_t len; + char data[METHOD_MAX_LEN + 1]; + size_t len; } method_name_t; typedef struct { - uint8_t data[NONCE_MAX_LEN + 1]; - size_t len; + uint8_t data[NONCE_MAX_LEN + 1]; + size_t len; } nonce_t; typedef struct { - uint8_t data[ARG_MAX_LEN + 1]; - uint8_t *dataPtr; - size_t len; + uint8_t data[ARG_MAX_LEN + 1]; + uint8_t *dataPtr; + size_t len; } method_arg_t; typedef struct { - uint8_t data[PATH_MAX_LEN + 1]; - size_t len; + uint8_t data[PATH_MAX_LEN + 1]; + size_t len; } path_t; typedef struct { - path_t paths[PATH_MAX_ARRAY + 1]; - size_t arrayLen; + path_t paths[PATH_MAX_ARRAY + 1]; + size_t arrayLen; } pathArray_t; typedef struct { - nonce_t nonce; - bool has_nonce; - - uint64_t ingress_expiry; - uint64_t neuron_creation_memo; - - canister_id_t canister_id; - sender_t sender; - - method_name_t method_name; - method_type_e method_type; - method_arg_t method_args; - - uint8_t is_sns; - - union { - ic_nns_governance_pb_v1_ManageNeuron ic_nns_governance_pb_v1_ManageNeuron; - candid_ManageNeuron_t candid_manageNeuron; - candid_UpdateNodeProvider_t candid_updateNodeProvider; - candid_ListNeurons_t candid_listNeurons; - SendRequest SendRequest; - ListNeurons ListNeurons; - sns_ManageNeuron_t sns_manageNeuron; - icrc_transfer_t icrcTransfer; - candid_transfer_t candid_transfer; - } data; + nonce_t nonce; + bool has_nonce; + + uint64_t ingress_expiry; + uint64_t neuron_creation_memo; + + canister_id_t canister_id; + sender_t sender; + + method_name_t method_name; + method_type_e method_type; + method_arg_t method_args; + + uint8_t is_sns; + + union { + ic_nns_governance_pb_v1_ManageNeuron ic_nns_governance_pb_v1_ManageNeuron; + candid_ManageNeuron_t candid_manageNeuron; + candid_UpdateNodeProvider_t candid_updateNodeProvider; + candid_ListNeurons_t candid_listNeurons; + SendRequest SendRequest; + ListNeurons ListNeurons; + sns_ManageNeuron_t sns_manageNeuron; + icrc_transfer_t icrcTransfer; + candid_transfer_t candid_transfer; + } data; } call_t; typedef struct { - uint64_t ingress_expiry; - sender_t sender; - pathArray_t paths; + uint64_t ingress_expiry; + sender_t sender; + pathArray_t paths; } state_read_t; typedef struct { - txtype_e txtype; // union selector - request_t request_type; - special_transfer_e special_transfer_type; - union { - call_t call; - state_read_t stateRead; - } tx_fields; - uint64_t candid_typetableSize; - uint64_t candid_rootType; + txtype_e txtype; // union selector + request_t request_type; + special_transfer_e special_transfer_type; + union { + call_t call; + state_read_t stateRead; + } tx_fields; + uint64_t candid_typetableSize; + uint64_t candid_rootType; } parser_tx_t; typedef struct { From a4b6de22e0cad4fce1f5fd9086cc1e6624ad6fac Mon Sep 17 00:00:00 2001 From: neithanmo Date: Mon, 10 Feb 2025 12:18:26 -0600 Subject: [PATCH 3/6] feat(manageneuron): Add neuron refresh voting power test in zemu --- .../fl-refresh_voting_power/00000.png | Bin 0 -> 9044 bytes .../fl-refresh_voting_power/00001.png | Bin 0 -> 14731 bytes .../fl-refresh_voting_power/00002.png | Bin 0 -> 9677 bytes .../fl-refresh_voting_power/00003.png | Bin 0 -> 13684 bytes .../s-refresh_voting_power/00000.png | Bin 0 -> 534 bytes .../s-refresh_voting_power/00001.png | Bin 0 -> 461 bytes .../s-refresh_voting_power/00002.png | Bin 0 -> 249 bytes .../s-refresh_voting_power/00003.png | Bin 0 -> 431 bytes .../sp-refresh_voting_power/00000.png | Bin 0 -> 453 bytes .../sp-refresh_voting_power/00001.png | Bin 0 -> 648 bytes .../sp-refresh_voting_power/00002.png | Bin 0 -> 504 bytes .../sp-refresh_voting_power/00003.png | Bin 0 -> 355 bytes .../sp-refresh_voting_power/00004.png | Bin 0 -> 472 bytes .../st-refresh_voting_power/00000.png | Bin 0 -> 8461 bytes .../st-refresh_voting_power/00001.png | Bin 0 -> 13498 bytes .../st-refresh_voting_power/00002.png | Bin 0 -> 9029 bytes .../st-refresh_voting_power/00003.png | Bin 0 -> 11948 bytes .../x-refresh_voting_power/00000.png | Bin 0 -> 453 bytes .../x-refresh_voting_power/00001.png | Bin 0 -> 648 bytes .../x-refresh_voting_power/00002.png | Bin 0 -> 504 bytes .../x-refresh_voting_power/00003.png | Bin 0 -> 355 bytes .../x-refresh_voting_power/00004.png | Bin 0 -> 472 bytes tests_zemu/tests/candid.test.ts | 152 +++++++++--------- 23 files changed, 76 insertions(+), 76 deletions(-) create mode 100644 tests_zemu/snapshots/fl-refresh_voting_power/00000.png create mode 100644 tests_zemu/snapshots/fl-refresh_voting_power/00001.png create mode 100644 tests_zemu/snapshots/fl-refresh_voting_power/00002.png create mode 100644 tests_zemu/snapshots/fl-refresh_voting_power/00003.png create mode 100644 tests_zemu/snapshots/s-refresh_voting_power/00000.png create mode 100644 tests_zemu/snapshots/s-refresh_voting_power/00001.png create mode 100644 tests_zemu/snapshots/s-refresh_voting_power/00002.png create mode 100644 tests_zemu/snapshots/s-refresh_voting_power/00003.png create mode 100644 tests_zemu/snapshots/sp-refresh_voting_power/00000.png create mode 100644 tests_zemu/snapshots/sp-refresh_voting_power/00001.png create mode 100644 tests_zemu/snapshots/sp-refresh_voting_power/00002.png create mode 100644 tests_zemu/snapshots/sp-refresh_voting_power/00003.png create mode 100644 tests_zemu/snapshots/sp-refresh_voting_power/00004.png create mode 100644 tests_zemu/snapshots/st-refresh_voting_power/00000.png create mode 100644 tests_zemu/snapshots/st-refresh_voting_power/00001.png create mode 100644 tests_zemu/snapshots/st-refresh_voting_power/00002.png create mode 100644 tests_zemu/snapshots/st-refresh_voting_power/00003.png create mode 100644 tests_zemu/snapshots/x-refresh_voting_power/00000.png create mode 100644 tests_zemu/snapshots/x-refresh_voting_power/00001.png create mode 100644 tests_zemu/snapshots/x-refresh_voting_power/00002.png create mode 100644 tests_zemu/snapshots/x-refresh_voting_power/00003.png create mode 100644 tests_zemu/snapshots/x-refresh_voting_power/00004.png diff --git a/tests_zemu/snapshots/fl-refresh_voting_power/00000.png b/tests_zemu/snapshots/fl-refresh_voting_power/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..397c98d997e816aee856e8af5d5f08130a4419ec GIT binary patch literal 9044 zcmeI2c~nyS*Zdl$MHf;>}xjGqp0cRM0Xr zH6g_zK;@QGVv3?hibxKKNN6%hpuq2Rf4}wn`}yyAp0&RGan?F;IA`yDK6~%iexLLA z1$W17TQs*QDJgApI)BznNlE#ul9GzgCKceDQ#~&nm6Y_goX*-`N-E_s=!j`&I_QE( zH%R5pj*)#|cih-yv0nT3X5}m;V8?Zn!TMdNcik4B%fXQRem!xhBOA=_(hMv=iz1ar)XpKheweZj6iL_2qx-5eI4ehcRl*E2Kb+xhl@5(ADT>#Y& z6nn65sc)z4FUJ=rJXqZIC^b|lKe^&jQITo%>)-_1<0OG`<^|%@(O(AxdT#c!Jq|^~ zh0llH>~zysDfVyjaEP>s8(wc}{%u|!_HMIEG2Ng-(hcl;I0#^y!`j#F?Qc0yj{k#| z{qUM8GcRM#%3ZI&unH36P-Y=l8#r$lmpUG^V>EZpA2@&i&7AoPJ&tYkR52ysQHDXG zT+G!It`IZT7nxrBe#dIDifwIe6WZ9gBe5&P=GIH3+3pW{J|_YmWXzFm-KZXL$kpCe z;{dBT1i|86dqu_f;k~5j-W$p)#XEA7*b``+_A>bZ$90EF@!{>{34QhS$rJxk1+GXcm!}gM+c##?Xtb#tNxWZ|Ghe6E_>uU4+@6_8jhVjdEp&x^b!oWQ zp<*b^G$kd4VE1TyY+_;&-K1mcJCDaBu%;Y6Wf+!fQ@Oa_ukLc~=+*kC6n4eX{CJl{ z9vB!%)$5pgi{WzB=X&@?olOBCNO}eYDc2^z1A~IFumy!cDlJaALOnItlpUwb$~&Q% zgMpRmMU(|i`ClfLeBb3ih=7sW+Y8HHE^>;Bin^{og0zxI3IW^WVJ>GVOemMP2V%22 z{&={5Iqs+NyVenEYPt~tQs&5N8WLF+a|ooKZ6O=Vd~b){N_!!N-T5Oy@tT`rTgFx# z)f!RKSUKZA2zIFOgwd*Zwv9zm2VV>rdLvmL2Kl{7HjAZliNwTnV$kj>cuP*{#pQ6D!q*mF`a6c)F#T zaw`2u!VxR3)%<0v)hJ5S;lL@9u!3j}vul^^3N|6S13@B;12_r_9mY95;* zVD_uEI{DBLicVJL#Lo-fZfR*jTS3J8yh_~UBG;tu{fwVh^qStIQ8Xet!p7# z<;hl)yw@Ii4~JbwlgGo(I>4_Rs#U@0qk};M=!|HO08lgg3kZR()jU2#Dup=>`F^-N z5TtnWxTTNeQlTRBNV{NX?mkO2Ydu*(X<(C#lo`+8?9Vwe8uor$R)-`_F8%o#e~0>F zTbQC=Qoz33aB3X+SE*NxoI$m)>7Kb6e0%0D`DjreD|YN%RFJxrxy{l)1k9m)rv-wc zhX3Le0aJ!X11prtWU>XxGp@tP$^Kn=Ju{NDNpzb)BPu}lz@egXd+W7{6B#gkW>KJ@fBCSxMXUXL3s zFtvEH0MK(>HIeHz)A<;gmi7dNxZSXEbQ)M(zSm>7O%5$172idJ;57eXeP z%s%qSy&;dhf4c8$s?w`M4i_Mt7YHO>!d)<0J11r)Ng6QHXKJuZ#<>fphX^ zR@Tf{&a6w(;}OuL1-!Rlh`_1m);gTxLEKYvfwk4d{c2K0spB+6l}!eJOO$qr>^0Z% zbNxLjIztYLlD#Jhq*;mJ{goS?A3WA}lie15U3{UMk(Re8$lz}K#PfNzrkW#ko|yub zbv?bNw6>i4bYOFXP3L`9%mLJovW!=*s&9d5dmJpSyu|vm&99Ei*_Ra~W%89=mae^)Z=3&p zY13qs*)Yd+!^9nLRN#SlBr-_-Rob3YIW}WW6}d*qmdmWNnZp!e8TwB$o7CRy!~E!x zHe$^%02L&5co{W-z1dlghdWw+VQD9_w@*M$^t|Z*!D8QXxm7 zuSFv13LCob%c3nj=?0DLE(Qbk?CaR5OL}RX&TrrNKqbv-?j9b#C`l5=TU}RMHG%Kl zo`ura9v|nyL6l`ka&*pU#3-gGd9W*`ZP9WMmCi^pIIQ^Nc{l0T z8)qAS-uFk%KF0j1kuXj6bfq~)2R3KY#Qgz@F++eLsFnnjA%wTd3Ny>PO5c|KO&rAH zZuap0{18nO6b7A}-$C39xuG3T$>={3IUanvufCM1D;*bE5$-nN-m&-o^#=ZC9`8Il zhGgJW8^FvfG((eXv^|qx)!xE&F$p=UF~U~8mKU&!n|&(Zq&n7R5}UT!9D7I947Tq+ zW0G(&{Z99|b6!tMFux{nmL@KH{?|b~cs}eUx;)^*fH;`)EKFo`M$5V>{u7 zQ0p{nJ#K_++;lK3g!vJunOOBBl;f+A*ItD+$3teWA8-m@84iAN6H>1DbMC}PcVkHp zNkaGe2vj9a*(KiC&tzrM5HJVlU>=ml39u9I7<9`S|BNn=yW+sklAV(Zd->F=f*;0} z5dl{dKj$P=IVwU|xZiXw=fSnUGi|pJu&P5P0{8PVSjsNbPzcyy9R6;tVGX?v@Xcwp z1w^b`HRlO~p10-XoH&GX+o8-jW0yFO^+M$o-$l1fUdu6nDu`B)x}V<6*zro=EzdEB zxgM)uY=zKeUxjX1E2aJTlJC{4Wn%k8G}YZOc_o|~O-Vq>jnb?h!@Z$92f-5uzFkOo z*0hug;26-KfzFbAp)&C}P+)Iay?riwF&W&K+U#`-qic02T05(X`Q52QYv6=7i^r=2 z+cwnHOx^ea;M`8jXiZ|R)5{sXJDg!+ZaBb8w{SLr(K$r6!5w7K? zW;*@=5RCV(qEgk0I{(6S$MnLwfe(cX7lA5QAQArIBUygP_s!dClobeA1ulbFx%3L? zHVdTf#p2GOeRW`y10SuGqW_)B|A%1lhynvsvTYfQ0@yQwSXUEqY|qF~sA`W!40Gaf zV?dwoy~amGK7Suw{ka+sh4SydUltFPA^xKf*X4Yb-ABiPv;ycpYbzR2dGU3 zqlvB@dtDPjWX$O&6B)K(FemQB-JK*5U%7CPwr{D;h#3 z6h5I^B1LO!tz%K2xuS?BtJK7vG+SnL3riCVf}Lr^9%#?cAfjsH@{hd+Kvw>=KQt#3 z0Px<{$Om*^G*EO9aG*5`tj<084*#?0lU zwD~z<5iaib03&_SnF3Y5H$#iXN6{ddMSx93=NFlMrB)Hv@Z_WdLp?D$A}pY2f|`&+YE_``Dhr~OEm)~1^}AM%B*Qk?EBOhPnsyo zED{@r8*{B1USP^T1-L?!e6 z6$|Y-{N-Axdn2{4ukUL8$J&qm9ZxQltr%8q4E1f6VquX^xY;HfTiZp_y8Qmo{N|8j zdrXV}S&eZoHd>loiFQJM%l|tIBdj%2Dtei%|9Uy8G`EoxPk?hnO*Jde9B*Rq*{q$b ze7+axh#nzzGTe38oGe&dD^0P{Of)txadUp*aOOmd>Q7&^o>rRLQ$%O+g$?JP`BzgY z6kcd>o+t&p=NB{@t@#WwIOl4R--y+;wlS$$;E}AND>Ys#1w2)czkqz>1K}rk# zdixBa3Rp(bp1K6faBMSu2|q;eFwg~}a!Co~WY=>_GiOeaY@0+C{FV3bhxqHEAYZlz zm6`ee_sR(U9eEbE)^xt1aWnmTV7e}rk(?C_`2PZJvE^V8F7Ymm0QEt@MB@3@-h|G% zm-{RIZ?HN!riIdbQkU3HXOj!c?+z&I_z^w_f{G+zZ{*t_r6(nYRrwP~3so;x>5lU0 z`kVw#BUHWE+RBz3E*w0hklBVVPhl>h! zXKWo-y`@E7%(dw}+Eme35ee9&7MFNq>}(C!O7vS%PIczucF}`-uepRzch6b-0D4 z=TH3`I6qu_A}W%bkQbwomd0d=73yXsctAAYbF(BrHC;33GgwteuZ7CJtTf=VRccTP z>WZh_SX~mlXN5%NW(uJZft6VP&h$yo@Aw0fJdd96wCXt2=3IK|Z=K->95j)!7Yua& z-{0+23sf6<#lMSP%v7wleRr;FUO5#-&K`{@$e%7Z3#B}r?)FZu4;r^yZPX`fPu-B- z&-HO1p9*Ks%5%Van=PX&gZz}=9fN7_1n{Qos%LvY=BT5`s#2f1xUY}Subnua5;pN| z%lt||p_OWq;(tCE!NZ^rKs;|v-_M;ajZJe&|82F_TZ#ZeylZeLOFzPU@lsb<9ZVTT zk7U_DsRIFad&%U(&kt6gqR##I~1MA$wk6vyXj|?dnx02yS@2@=c6HD@W2_e@i^T!OHS3N>k@qjlpcYKtp#$$ zcD~#o--!U4jBcqWR)G7%Oc$b*D>L5;e!P+AHr3=3T6MN(RjbA|`JIv?9V37>`WEL#<<2~FpXSUlAwJTu+ zy59?=FeO+h{eP8PXpbu*U`$r->i@oT@LPxiNmRGcfNB3n0{_pGf&c0g5or(z& zC#oIjQ=$MMY)E7m=^J6QdC>qMAX=g3;@dNxT!2FRLvgHFd;mynsRw9^fcE%g00GN$ zsF+A_54sipj1pp7#ylI;bG@+~7k{uo4%FEYR#H;Zty|!fDL`LsYXjuR_g9YT z=20$8oSFY&TT$Y|ZkV#s%mM8ht|se@J3VbMhBX(S1hkJ4{{|o9*p+h$yLj_jTjz(u zM&^@&xfy5=)ipl_;0T2COrnMMLP|RVu(W#eGPHoO$&0zz^*Q~5dE#Px^vk$^11+OH z%l;8E4HxEYi1)w$4VdVKr0lL2C(CJE5g<@Tw`9IAXP5UQYBAh_`$TrEa|vmIM2-Q_ zNNR?BOgT;@+vNdPMxA(8S{Zzl_b1SW2yYXiGYc_WrGuWJ@S=ppF952?WtQKD3;R{$ zMKQ>m#Msu>RvQS!d|&~fdD}Acni)WuArf7XMX*a*phGU1AUf_-C@x?wwlWzb?2R(p z3iX~Q4#n$k&w}Ii0rdqK9yGJ;U^GC|4ROWNxD9=$7|Sk5q~C*)nY0woGk=#3F{cdv z$m7IIzkeTWpYy}g5)%`N4oj#IO90cvVlfIg0f>sLCrkTsUd17<9O?i8Ihy=WfM$BJ zy8q;GUu|SSFCvhxvyZ3nZ~eA4mGa%Xv0SUbM1dM_FW0Mp*|L0zcpZdIcY-P{7XY@9N*JQd%G5H z7E9jHP9m{cz2XB%32r3q7weW;F~vz*fQBIi8sC_ zW(2syNjAE9JuxvcsRJjTxpvPiUpv9^_4BRl!@F0<2qbB?Wt31{ z1s|PnIPMPxrk;V8g4&uRSv_s7t+Ry)BK*2pNo7`$Este!)iUH!D9(4rFV;r43MV|c zG=dC#Om2Y*%lGSDDU0E|MtxTf9$DVVV+~jU((Nsat zL)WT{ZV%(|ZJydV5?PII5;3OeC&`Xx>lfz3CC|1Iw)P#OnVyvq?)=R;vF#2p*7L1S zRhqo*HsSyH;bXfV$@nngvo*y=mz}?I?Sw?Ons~nps5adN=V3I-bPF;buK2q4^IVTK zG#(DzW^vId4K2{h?D>U_Q8q~ke@#xB=ud5P^}$M^S;ojg)JA$y>PfvyPW!}Aq~%ph z{QJk~U!&M}3|5k5-ygV(>JHuMTRrS;;(Bd}iYIh|a=k2P$^`wCFY2s(6V>(o)+Id!OH53aP_ZXyZpL-|sEcOHNBm1L`E+QxTq(~WYVI(kJXxIPWQ3l8u5>l}kB;VO*$ixMQ9Lt@o8Fgm#oxVM}DM!a6USs6tD!Jk063&Q4w1{G@?msd7iNqMj^ z%+jkbHT`Bnp{Bcj6^WXL$cJ0@lfa`y4>i%r)ryM-uR2|6kANDdy_k#{+7#{?zFTs% znzwnN0n>M{bYRpx%pPcLx_JVYe+3m7G69Jwfxa(fQI6eVebq9*_W(GA4&ni#|7uE{ zjjl;iUxQ$gZK_1!!ka4qN|tS13q~~I}UU1Qt{N=(Y0LZ6QpKom?m$Y ztA3YzMDOgqvVnq(0V=n9Sc`e8q5WCu5a>brJJZjVgh%n1_?y?@5^w9x+^gdLO^X~( zxTz+CTSPl4Fa)Df-fEA>E|xoJbwGxyK@&poWY(?>RHaSPIpkY=x#M5LNAVmi2QT?tp2R~GHM!m`g#-?vY{z{0&JV|FC)77-uI0zEuiT!&QG1Qdv!8zFJgVW`M zLhXuYA59Ay->WW?OWC*>_s`O6Xx8YPs}}B~u0?XDDIfiO2YJqUSCn^GVrds3`$pD3 zaJ<<+IL>z7AvC^I;_8q#8MRiJdpBCDD0;*|FvgmHg!8@F+{lZu=Tt|Z4P{~HQTUXO z%Svc4F5Q$T)^m&X(Y{u$rRBI%yPCg`x`@^IT%v%I|1|IM1v_%T2*2L2tG958NfMjne&a9G!(Ne{SRno#Rq3kht=`hj{C z(fVonVs<*$6Fr912^;>GCW!FR;}?-pNOk(xg{}@KPrrYL+|^x8bvy(bbrq}j&e@Ij zvG(xhrm-L2y3EyEckEe#q8WXTv^B1a7U(w*;)^XUm*?u}h0I(}*|`gGfDkAQCg%Ph zQ;S{)M~C#=*{VUM^@>Sd?kA5JSr7jSJ2i=$&u;FCT>cyK zGsTG)^?#tAmFTT35MPviTG;gCSR(cUr3_Hb}WuP=x9+PA4{Ye?2SS?Z||uPB%A z862lF!ci4V#g@J_=WA7GeiuAHH%x_7OVf&ZWlyqI;9o_2)FD7zrn=8WuBP(D9On$5 zy3F;7{2Dpn$te{|fGNG@+$q2&YUMOj9;>^mn6*K)U34A`BuMQLozp^lBDpV8hq&mC zzUAZpjN79nzmH=&nDcD3`e)HA=(05FpD@(&-sS9ybw<86?PI1qF&UI{?}JTGc+=(j z4}EiZwcdKgp8AW_j~4iluYFtu3Rl@8`UmbI1}Pu#bI{&|=Hs2-o)(T=&n|{O?9HVD zE9PeLRwRNgtnyqzes@_hw7Y&I@GI4) z7f5h#^Ur;?(cs6mgE{WyP$j#dJ24S0ui*8ZQL)^jXx6NqwgJHS&knxDg@!-=P z(f(pu7MFOPJ~3dkC}mvg3vTil-bWtl=DA_>a-jeC7G~-K(|GsZ4{-*{kIR)&zVkFn z_%6DUyih90K~V2=TNM+wyTe>%|uN`8d9{Hi8*5QoZw4l`4{V#U?L1wJ+cN z8g{vgCBWf}#aBzlnCw&xCk0%01?yts3NNEB z7^m&8$;?_p`Vq!3mU(8S+zEU=4PoM03K}Op$95LJ-t4H@P^(>zF|vODZBa1=zw@O7d0f?eJ_ujSb+L*hK*TFp zzHs$oS37|p<8K(fF)MF;wwCijXQ+3!p2$MOkh+)9Bgypj)-luW;yAy6SYTzAt?JF=?pEl8QWFtf%-h-U;(gJj1-6q+R#Mz6|A7thz`{ZrOvO zR8fz5#nY`bs4toDnqTJidt8a_$7q?bK<8rBXwTxAi@*A(9$eF}^?!K!Wh6mzM%UP)Zy!gYS>=KAD7ZITNOj^@4?4_=`EdASHS;)(63 zKyhFb!qvyLG&gCAkF}jozXXZF-AGM4Y z^wf{RP!bXn9u93@e4%;7GjWq8r@M11aiV+UvHzHtjab)@q1*~N|S_PSCaqtxFg1j+PN7M|!(Q}zHeq?Z8 z#1Fe-dSD&uzKo2?`TVuz&D}WpJsKlVCUL>f1n{a)G)1ck75gvs_q1W>bUZ%4y(-Er zW;%@X8>4OUW*~x?o!49iWla9L>UG4)w;%BB1R9bSA*?q3+2|q8i!Y1xI7%r z8cFK=sf(0(kwanXff#4m^b&gGlWZeXK_hF?E@&1HE%jlILA4niO==BF2R!kD`F$Kx zr@UOAPt75HlgbyMmMis_iHZrp2JjtuQXmnPwmUt56@$=TB0Wur8;-gB4 z)XQ<_55F=Rhd0A~FFkI)5B4NNkZV4eR8r=z=A-0|+b3F9qIDg`i8~RDh)Es4)&{@R z3?~f4VSeIIE`@Zas}7@OrBNoSalDHvhX&;l(;!0RBO<}q_BlS$*mE&eJ#$acq}?Ia z7Dw`8pzssTl`XWB2V=uoYzx9n*Qi+hR8#nN3fb@XQ>*u<-u&jAWHHHn#FaIg$9%$3?ZOg1t(iAQuL=>=@~|j^27%O~xhT54s*+*fu;7vtfOy_Its-ZpfoOD5Pum{GRO{V>+B>BKCJ0$q;Z)gZ?A z1VqD+WJC8$_~6re8?`&rQ>^$2O5{qkcpaMZMhSOQC|u!4AP4zoz9SIIGRsG_9>6d3 zAeESLIGcD$7V6=ixnh!7zg0r5@ZGO%C$zo#e<9!-E66!IeLuI~4advY)MqkHsz>Pnnv_EswtOyGHUD?HF7ZK?Cj=# zHTiG^dKxbVVMg?3#=p0ea(ZQ!743(UX9c&d5u}S(F<_P8c+%UVYVVSj8KI0dWi+W; z(d>0hp-Y-^P6VAU*ogKjva&x7j}en-Yag8Z8BtI^K1RvucW z;vz!>ZD4VOx5?#`Z+)Iaw-o)yMr2%K*9@6lk~?WS+&B-$?W6x8K3ztpKM{^ZCTSb0 z>A0X&)E3GQQOVx`zkf58~*!wPTLgcIY&I4ITzO=t6FLdJA&<=!n@G^QxB|Dcs&}f`{oT+p8DL9oQ3>rGE377c+nAg)m-a%h8wf#M86QmoK*|kb8=`1-U)H0K-Q(_PehsN;_A4+&?R1au)V}$1jh( zKI>BE-y>JzP~Aoig+DvDy}MiQn4VSqlYU?3tboltdzRV6yIx+a_s!##TD$9~p^xrX zX50jFQZLb@E`7woY$#ww>EH~5$6vBI$`{HFCJw8w2P==XJx;Y`QeAf6T*0vG)`6+7 zUl-+==YOOx_37_zOzuN8O z^p2^1LZnTMa3xBjp(UE<0Jh*Y(RQq3^+_`TD*A9ABU1MHHv7CyLudWZL{1!RB(Z1F?6r4P0$MV; zH-YA~%T3u@Hr}DUhibyb*WUEAb3gbF_|&~U(ZM=Drz+etbuW;@*_aQWw}T{;p13$^ zbNnt~*%MYN3tLsaedC4^BO%7+=qT{f=`2}MiC7sP(5<*=cF?C|UjKfPjy74Kl?uj8 zg_RsR5^aB1t{}Vk3eqI>qyAaB(;&H$iq}PQaWoq3>C7|GWHA0re_^@&;g~IG^-@U3 zwKUB{B5y%udAZz)@H_2ENlEC!*YMd-@jn_QB2FGLu;y1^?Q4J?@Bm{6d!7YVr%4^dOsm%2KAhtcoGnh~w0w!lB<^X%6_Q}V+PRh`skzu7CzR@FpAA#UBZjZP5Apn*S61h{ zD%}cKJ3AmT$kq|%0pj%tJz|mpfYV?%p{fe63*~xLpdxFEypx2%p>M92gc_8o)b5~k z4=Q0-pw{LO^otitz5xY8J#E;^-aqSHek3E zv!TnY4K^jvrRLsalM`z(FnDf4ZIF|WZyVJi)%^Yq>)F?}iaqA{(>;ZD5!SOgnGkiPV*~S9K z(SYxkObg^|TX)eZvd|^qzx0iCx5q=&xi;|q*W81OmW#F;i_kAOcKREz9pJ@eF8 zBVk#^gR{5OKk@ZbPu~_`Up+y~?5##xWlz}P9IvF|`&ycgyX>Hl!AOVs5HL(#1kL?X ztRFryt+@hhtx3ysApHaj(OgRDrUnn#hwI9e$PoiOJ9t)h=~WXYi$8hnUY-gjDUUOF z+Z6+Yko068!Sw)#^t?Mqb)uF2EcpyHb!-8XDn{W-C3MXU{H`a8QC^TlaQH3)bwFoyzgChE+1)x zinZq7tSU!l4m%VhKePt0>v&FSChB;8rN_IWjE$ONU$bp%RF$zSrE+8*Mny)BxI6y! zKx5*p_^8_S0hkPo(5QpX+8~X*nHjFWj);uZ@)ZNToXcUzS$boh=`a+% zrYqEh9Ob1EwoMpGqyhheSZqxeR*P=B`lsOgP6Yf39&GzvGuM*0qO{Lc8||#A)W?hV z%)xoeCK4?M{Y8mL8J27Ln@0h#O{O>dwV|X9O7v+qS-9W(D{6)#jxx8)Atn%`YJ-G<>Pjf%F1ukZ9h)8CzfIY6V*=fIYErr_x zzO%gTGN`goJ{tfLF4z7e4B|foEdCE~-o$#S+Yo}B2nHvmO{QG{+jV0NNqfoKB6s5W+m>pJ`VFNKH4D+M>|RJ_ zeVGS5OY(}+FPP6I2xrG-lN2=z7u%bl8e|}!u|qn%yIrcG0ipF6NYLX7f6#MCJe7Sw zvQLb{>WlL9_yq@1%n|^%aPC-&^xAzy!`34^J0t7gK_s0?Sl}sJ z%sCX3H*O{bMa*Py!*yzv%?JfEn$_jNtEIZ@&-`qo1^(vpBl7pQhM$0a*r|wQ>veD* z{nBySM}yQY)?5soJ$s+L>+y0hMVa%5W4Z;n)k0e*RA9Y0uCPE?`0kreY+=Ze*-+)Q z1y2#}?)rD{u3#_5osTO7i20GZwGav#f7dR}RvO6vL(>%Vi=q5R#aW9-0>hULP6onA zmB6!0n*c=JW?s!gAaPO6qNm;`t60&D6=+&R&HtvC9uWW>FF!i3;*VRo)m1N3;mfo0 znn6xxZ)f$goxY$@$_N$5tqDYGU=!!qUmaj$108Z|$Mn62G0WXf5!mT&k0^(9JG(Rw zt&hqMgdl7F^-&VcGs^E#BXfWJU|-YD?xpMJ5ucnUf$(K`q(hs?vjbwDhXY_9?f>-D zgT<2!PVyVoJ(iu*Oq_GFwKF>OdT?f3HRW=T%1=cbrOnh^0fWHo<2z7(wVg<9rq=sM zn=lm8QPn*36Zw^}yt*v;X*OvW#BF_nK=5LY(N zZ~E#k?1UYQVnqck=aOuHU4rtkPj1Didr6s`UPQ<^aqhNMnj~MfNF_HTp4#&djtNp6 z+hN)d1dl}vVM5h)@PbOgMD5I3-!MhnA@MxQo$qR2AIF}&`zCm(;CX&q=aY)n5HLK^ zUH!NwCcjgmbzj8o9R7~sRS95fI09FL4UNeOntc68=^i9%UR?cgc2?Q?q<2#Ok%FAK z<4gH{OZRgB#Z9~x2f#3`fVeRd|q+YCKfJ?m^NhUOXC8h5glQADgTH-H9tYdfv^Xfa=SOH_&x1N`G8T^6$t`v~! zedRlElJeev82;zBd<^vj1%mXy!QMUlW99_JPq(&BBt^QeWVHWATe4*d-y&D#Kt6u4 zp+&^__Eko_QiHB2bX^fTI$zfWa<;JM>w0Xpc_teZW~Rn=H>MhhCZi4hFB#0uCfRaL z+!@jOVM9alK)~IGLhJ-%Oj5Qbn%5~(?Hp%2oUuOtIL{%dW?MJ-jrwdvW4*F&+&R4m z_MR^zlLFHp{_qdAHaV-KG!f;7gq$>pp96w1>mc&R5Mu965koF>2K(?zSEE*}10AyM|EVxzo&u@w78Z0Z6Xo zOYD8+$m8!lM%vTjb(Cx5enyVq*DSsOSsG>k$0~ssfTjG;h-Uc z_F9)|s;wIy_9m7?4WO4jo+EW(io*Q>lnAg2)jQr%bDIedX6~hSJw*}5lsnDXS_1sG zag&STGjMccYAOB7=e&3r;>EP4Wy(jV)}FaRRLaFJkMWe&xqmfIGmWABiDe;W_EA&u zsRQ`nN_ozsf#?{wLqY(h*UewlMPhNR8Z)5SL-{^x52yA_#fo5@Yv74p{@{nPz)18B z=^hG!{r{q1X%kBC$VG~1Q5$~iN%OEbAPn}c)N7oIaV47;OJq2hu2ewWxQ0l4)QzPb@!R~?gwj+57BVF9Ws67;Mr!x>0c@b%UOC1gWh_|l*)|q9Oazg z@B>1y7+D`GvywpH*?a8Bc)K(v!pII%8L0KXk}Er`*yRysG9Gl#(xpRDXEi84(Z2*0 zsi|EPLMg)AKYbtNW$U0_(8~e+Av*;}CunNmtMB6 z=jsN=RrcP5UhpG3>d_d=ZM6LFouB!0pUp4*L|d9&kY&8l6PvO03&(9mlEx1YI(=ie zH^eG>pO7epa@wLieHWVYNluXav4R0z?RZByu8zxG9*$Dle|%An^Z*y{Vkum}jsfHK zPR+zOj3lQ2R}XVZ)0+Q+iCem2&!E=BV!=G8M~FD>;6>n((*Mqt?Grcb0{+U%hH~83 z)^0qXJ96ZGD$;j1@ekxfbYHzs$d*8do@6I=MKZYbIW}q8ro3FGX z3%=s-2hiFmMh59-GG>%uM+S^0%4P`%Mp6DNBp!$ug7g6_z>?)m#W%_JDG z6&DTpy4H{wglHdiz63@|^omrUw zyKe(bcPy~Vf%FhsuzG#SESTb0%ClgN&W&!^sK-UmjC3e^sTe8g-wr#$QMZ5 zL0OfgBGO|t6Z1{U1An)jV!*v}-8$o%htrF`@SFTbmRk%oTj5E*&zP8-h%`-X-j4j8;eiYWZCbr{)9}8K1 zExEua|Cv-D1YJT-UP59bm_3LG*CtA++)OK8P73cr&z#D`6yy|LnbakoF=AFf3@xL7 z6Gx>imIQ}`Jv|Rbl>{U0CP#uP;ZWX%SPGHVuSg8>-5yQRy zj=$|KXepJ{OpWk`kC{TWFw}X@L(fN((T3Q?SjZKuWC68EXGO7ru=@B#DQ2}J?zJkV zF(4BVL;U=H4fgiwJvwO39`9OS(N(@A|9TYv3%tk)G$u_Wt;I|L8aH%vp}Y`dxD0W%RJ#4j0o@uB-C% z`{wV%JIVOfvMdzo**U}R#CF05K)vzP7vtQWMfa|)d9#-RtQQilq zqLJ~uIe-6BgmskXoj-GTDxSOZ)raTvo=kJ9YFN&P0hC6H^p*VlHvizSeR`g&!>b<} z`ZTLKUam}ODRX8#e6d(Emm#!eUmu-!?d& zA!^J?SZ<6pE0x&!r_ZREnT(#*R7%SkMpgpP%slWCw+??3`KEVWXyAt5wTVMLL0)|& z0|hnePuJ%MH=pFq^rH-c-F#*2)l+#XMrZQT91gd}t@o-8qpC6A$CHtN9YT6agVN)F z^9YZ}tzrRlOdP)j=;~&p+_2pIFN?7^MEX3 zXACel?Na49Hg53q5?VsIcPvni)ci&%;F2a=oi^ct%V{7m*Uz|VI_*%p4%mK?tEyqTQp>TtxGnP!>n%(4NQw{`<~Qc} zoOO32?OR^Zmt-hOCm8B-1@M{8rf!auzs4U|e;Qj7_Lc{%rE6h_jJUDUFW$d}&2HD$ z-IIyfKDTx5SiK@W2T@a@HCDl@NjX{NjJg0X*K{g+<~eU5R^lM>zo zQtzVtrdlxb=P`fLq=oZRRujqNi@Cv>_78W*OA#BS0Ey2jKrzmRdVAx_e;dC}-{5q% zD<0fP$~E8o#PafosO#2htyeqMBfHuN-9Sy>fmj$vIjCJf@qeI~{|#gQ&o7p8c@wIZ zM>DxRzRfCnIE>==EB*EOK?@ss(beVhI64FQX-0G0N1aX9Zxn{gO$xP2nGMuFg$E6- za9fCm<{_e@n($i3o|Tuk0U8SyyYKxk$XleE`}~|-&pP(-0GWTl3G!|TyhaWkk2>Fi zuLlxE*`n;fs%O1Kj`$u}e)yo5KoAh(e(>ik_d=l@B~YFBW$Rz3(;Kz^k2SxMbzt=@ zzzZ!sL&rKcW5w{HdDuw{Q2Xulh}pEt%2^kEVZeG=e6S=f#Z zzfq)>RAQl=$!R1Y!slA?9|g^wJ>eB9_-T)l)T3s>Y#A9j^XSl&^6paHUmAUb^Q!-F z+BCcu$a6gHr)dhlsQms6wsun`{(d-?6aTn%f~K#pf4H|ppFkY$@6gFJGeEFYa+uRw zZNTgj9WAm2D;xp!0{@}o*m1eCd}(IJ9Zed=)-3OafTJQJHiBxG&3E(|tZd#3pn~qf zs|#{*<>kA3dmFYsz^IpOwVf+qsU!_b9baxyFFJx$OdanhEN=#Ck8pQc&W*Oho1d|^ zqyP3s><%Okfd8=_2LEWq6{=ZW%6JpGOq+@q1+Ahno_Y&yPvuMSKh-Q6ILhPS$Mb`R zygx)Yq3yo;Qx>H?gTK-@lEa59_kN2Rfo^#L-$)Hkyc`j?oh~!bKhqDYz2R4Cz+6V= zVRJ_ObG+-GkG~UJb@+HWyQLMDP6;3soYSe?`< zUv&|OpHz52@hUAsh7(lz{cl3|@G2b`^qU-?NicHeZ^Wc&jxj%LdyArO%4!$}o+#On zYbk4`&0zqPGl(<(NaX^>0&FpOU1K&)#B#+jLC0+0%E8BNdvDv&R> zs9YXeS&I$@e>ym|{~jF=S{3inRco^Gv`;8G*$s-S*!l(G0EN8zkL=q2QK0yr@9h7) z=f4U#|2aPYy`1%*qwyaYjU~iiuDG`11_IqboFAobo6?48|&FTkzZ+Y1pJAp-?3qkHj9q#Njr>j1V?xbaq zch*9HzD^z z=;Q0#KsBS91zzomo2*IwFL*_{ws=yp^Xaa&RWUn4kVE?V=w+@{>C9#N_W9Tj$z!Ym zMrV#ZokzNfvFz{fQ+K=tV*nVx>#W>!`)`-_qY&D;GSw$(jfH{AafMEtKy5%{NC;V{1C}4C5a~PL=W8UiFOsDR$jdO);r`adx8mdI?$*0=Mrs!H z3Euq-r;6IaK;RUB$>{)j@uV*MV72}+RU>X_opzTqhg1Y9>$KJH!#IOTE; zaid1DfGAy$ZEKswM*c}CFJEd&CtmUw-LgCT%i)ZXHTj~>W8J1*`p*Kt>2SKNPgTvvX0OXkm-1?n<`Ipk@Fy1U8WHqItXZ zY`fVv@)c&}zuE{i3(~pVRIm6+(=m~qcaF1-(*4Ad8_(0j){9lcl;2UVS&6fxrmp%gZ(qi); zYw}u$+Dc?coosb#R&OK+L^%l{!e~NymL=%0;s$6|(_t9KSx2B&fpu^bsBi@c9Frf2 zL35Y2M0tt`0oaM$@HB_?#)?@$g^t2bz)(Pxum=Tj1RM>(fWzvX>=b&}_)|1#h4ekM zYwGb$d;>j)22^Hx?DRqc{)Te6`pW%sfMcoUdY5FX^ekeOPv8nCPWChYr0>JcqdWa6 zt>5;3I=i}D(?{nq_hIF{z%i8xmU%0N84Q)(r0RZ-o1F9&_a{)sj%qVtRoJBZQrA0M zygwFzwVF3|XGT=Ki>UYSIfyi<9mzhtW9I>r<1ly-oTL!<^?rXN@i&Dz!;9Lcgi+3G zouU3EnKb|f^)78qA{RS)ng=&c_9+ zU!4!W?D?!Zo93Q5qExS#y|w31+>$K)dbZK_lfdvaCFcfm>nz0Ms#mk2(qBBcwkBEk z8Cb6hZ-EmB%P+7lC0Nd-zfE!R2FJ^Ek<8acTG0cKPv8giEbt@Q{sJOe=M$dxtyVPl z!_C}1SbS4ML9?nCNfasu`bgr53vA=gjmj=tyNB-{pvAAB33tXy6#=J9J|Z{bqZo5f zhC*)-w`Hp|#Usz$ko8>@t*m?90pU$lQ40Q=GtCgZV_1!SIM#&VlNxeIw2TUnfXpi5 z?@N>I*p=@Pq(hJ+aMI~X1}@L~;3E9+Q{PdDsD280XKM>ZhVOT<`@iHb4ya`S(*$ci z!Hlny?cP2(fIrj30dftHcj_T$FG-#&f!ZcYjn&IZ zNxZ5BLo1`;*_-iqlXMYy0wLpLs|^PV$p1ft3V1ji0Fs}E1tlwRsbzPfuZho&pu!5wnzF*OaX2sG%j5 z(d&jzguENiC2?DC&EGX^KD3*6bcxEVuzFT$sxBF@2Uot_)8uRspv{3TcrCTfOh*N@ zJam9J-ydyc|2a0r+bCR@2gpqkzUT(Ra%1GD%;Lqx!1`?JPzc}s=bKGI<{8qjbwmDq zME(|p`0ytd-ps>HSK5e|U7yafDC z3eZ>c(%)o;`(*co8Fj~wr-{B$Z`63-B2ji;V@X$$4Z{#DI ztJuW7O~{kMW70V-=E&!+xPqa?Ycc5+aA~Rab1t=y5H~DvaVjSKCth| zJ`f0Wz~=HrXAp?*D+t7YO@tqKVnC>|27!(j+FZ1BO?b|nVRqHL>Fr-%LDliCO124V z^4YzWtP<3+v>TS}6jZmgeIohd-gauffsvfj(VxFA^j6BCo;UZWCCC*>q-q!2Nm=a! zseIWT^x*?pfccMr?j5b-vpD%5<3ES+f1U|1&0{=3FV|Ttm+iT=wbtM7@A4fSeu6Xv z+r`K2cd`Do;Ctgp&F}|4^^}y9X}NIojtk%VCiqG~dAB@YglSfdwM1HvA9TQi|`2M-tl%Wmb5>b^a)I#$*0U%{)rYo$`ve(R>b znJnMq565cP8$?2r`Oh3t&PwY~pW6Rd{>U#=LH&i1RKxPb-)(X;F+0jSD*Q(VTzo7G zq55W$e2=GMBQD0{Utqnz=~wC=<3G~znoLfOU}Mqy7SXOM5(AHKThv$&{E=bJcbezs5_E5X>cncy>?S%C7lg zx(3DeD2v8+zdFW*;T95GqIh^^tC2Ts&$NO0pE-NDJg{gVWqX0Q13@R5RdzXcnyXn# z*k6xK&a+Yo%OljP=ggf$V4*c5>5xLzPn*dQ%vmC9Zau+NDGKfF^6)f;4I4k3uJQw( zI{P`fSv*0eh0K6rBQe}$v-&U?c19W#S6eIO(_|P^o?A_2y2G}ZP?o8qI?~ZJWa^$7 zf>=L=(Ggv287dBEX^WVTu5y#u7o@D5=(XQ@JJSY-v(s9l&nc|bs^!k{wjrx zL+m{_o-u;B$b?2L3mnW%E2^5us%&0HnV)cyntJx;x;6)w*%#0c%eJy0w>>4dr>^ux zps5a?eeDN_B{jEw+RBMtk>88OL8O(>qxuHuKAl)meLroP80yAh{^6B8X9dEz@T4Lm z7%F^ARI+GFI6G<7Swb*cfk7ySnF8O)S0qHc7+E)_X z9se%+#W>`(HbK{z97CiMB1sl73Bh1JHYBX^OL0w3?e|#Y(h5?d*b|?R^w>tYeM3F< z2iz}y+`z3*`*%t&uxVW%hK^L6w$6dqM0(6Yv2K|ew#UsY9l3AFbri8K+-d{=>XliD z0osppuwuOL%eq(NrcY>N|8`1zRD#Pc`=xbRu*_uhJ>n&c;u*+U-baQZ=jYGBIYeo_ z9_2S#ad`C-0b8kH?etl0cwCtJ!Pt!2O=osGtL<#auO_aRrRE`N_RF!>=eS}jrAibUzA_E*M=#zY=5LQ&8#SK!d*IdIh5mLhH>RrI+G@TbGc-( zS0}S=xn@e@JU*o2uT|{TncGR&Mr$wn_o}V5_1w-;>qiSQhxjqRq_74^#+&J|+`Pv# z?3LGBZ&RG&EqYCjnit;NDe_a+naGe_Mp2+kalU$eS;jV+45=75+fL~vL?;_pG#)f^ z9V~C@>!vYAOu!f$il>YqOPUp-N7vcRWdqXpeDy3d` z*J#1cxnlvTpxNmSbZvECyhYZO);NVj^EIgw?wuZTib?VxUdKcOahI|hY2%AjKA+p_ zn6y~fA}u#}Sp%sT5&c?M9OEP*m`AvPZVrEH>_B3}aI`hrsfpF$*w{$)3L9#A>$6-P zn71@IeVX0aJ=0AVvrRhcpSoIB?q&fd#*F=rHTKai9+)2uKGzOLm9Bn}VWvS>N-c9c z8SL)@|5C?c|w{X4y5vF?S!g7whHL ze0(%EpNOBj1-uWUpPI7D^fo}#81!P&GW5mcZ69CTkRo|_RvJV@BptZXRl}Rfh8dLQ zwX}rtfF+J{IkCLGa&a@Im&|u|-Hvhp-b$9jR^uTS4ahW)#Mq{u?XO}UqU@W*n#4rS z(lEQHLi#zD=!-JeGSLd=O5!H@gF+q`N_UQd8-dVxHLtKKk*kcUJqI5I(6vw%#6>nN zQth>F(jZpdA*S$cizIzol5eI0SLZXpiskjKK$??B^JJOaB;I~|G-9K0FF2VN@E}SU zzs3mYq%x%m(Op!aOE_QJ-;gLA1%F4KJ38mOSn1)UOx}?d_fZIfp24q(i1iIWS4W4T zl0z)0a`DC$!M&=Mt!dR!K>pL#24ANu1?q4)4L$H5_Pda7^U>L5QM%`GJ;KJZ)VUj? zg0WLDoFO{Z&nK2zO&nTXi+Lrc_ticlaZ0{}$_#c~EKm`Fpv$)zMr6kLb@dRXiRuN! zVj`k`j;J`yv_3Hli;H=I3~Tg=Z-n2Z*GyRY;u>r@ap2Gl?c6gw*|^h3y`=8LZ=;{b z2cQ*Ka?&EldyZCC(^*lD?(!E9i!c>*SSx--lIb3Uovh<}sdsHLX4K0eocx7f>xMjS z%md_KRRb%5vDg{IE_ilL8ZtCwiD1iPHWGM|E(=pTa&Bt`r4-UWGis_BhJ3_mF@@Yrb-azqPx5z(cX6h zOU_3h53r&Chttp=*vjKo z5fP!}7jTPWJaOZ?NYdkE91QLf$%~3&Iu=td+;_lYLI%6Sa~Z4jQDv&KS`=>oc%k)u6iCeJSVgfH50;{LH=_fUKkz*=8eV( zPt6(@!zNnxkJK;p58!u&zA~K@ZG3d%MB6hx7w8GW*`GTxw?#kelDKe-&@+69xKpk1b+R$Wn)6 zp9JniMlqi0Si_CZ;+WwN!>+;3-`~Qf6E$TtCtXf&V5fe1Zbv}eSwD7Rj2sP z*^*oWViDnq+}XKoNEc1k^BUH(Be~`YFYoC>z>Y)Z5kvKs3y|Z)W>Qi-q zd8vj!{kU46Y~g!o7$iu4GH^P_3*rpe3upbcP4@X+|8HAAT%U}eNWW2*wnryVy|!ly zlk+f)|H#|1h3tiJ#d`#ORu!MU?RjJQno}-T`;WZ6c(bnhd!4>kD9GhW>Cl5O%fLpL z)bw_21>FmPpU}Shj(pL}ZEq;(Sb=on>8wT_z61W6HSb%%M&l={_#U0V@+D5?#ZN)~ zv~PR&zBW_6#Sg6eOV&h6prS+o^D-)v(zY<80C?bUrdiP?cQ!k152#us6x8?Y;{wW% zTnFs8=f^wxtHF-Dg8Cp4D+_@o##}j(vQchhA&_A*nAV`i9!s53m)SeU7519|Kl1)7kI*M22>>qxsi7<1 zb!SyRp1pG}%WzN$(IWKNi_CDNiKP2KLJ5KftSpEPC$pK*rl`z-1nkU0GtpZtvk!_L z_fY^S)atT-xF5B*+JQ7+X;E9NBdVNdT@+*~k?gi;q9ezDWF`?I^WfWb7ihUudi9Px z&mJZ4Af|58xJ;k2 zpsDqQF|=d-)7A4MsbhMr87jl_SJw757L|Vtva1Y^@1-eDNj><++I$7SF%SlI=<~Cb zFs&pGkyfUoY-Jw^K*HqF)IpyFwt6JgpES#Y`;jMpAJ3hud%wozu{Lit`Yx&$EcHci z3_(6qa&eW#GasUHzGOz%jF^@UDHi7|V>QzJn+e4N7+`I*I4oA9JHrXB??4(1p3_e5 z^1^wq1f#+zNr{MFH*Z3>n#~=vN?NnLnVUgwF_o`bdgeoZP-$sx9T05u+`yS3Thdr^ zXq@!)8aJMJA7~gx_dRTZ!zHvEk@3E*$bE0-@AMQdhwWT5ST2&b3P>d_?FhU40?y!5 z$zo!GDztBcnP6HM=GBP8SJXAEu7~z;?GEZ!FoI+q!1CHXv{J1!O$EcDR<+Bu8DLppf z>GzD3vgYQvKV9Wq#g*Vkx(+U+^Mso19TQ$n(4p5y2su$E5hQe#$;<94CLPV?;plNp zaV9{z*6yIIm_~ci)aHg{Ucj-gDqd7W`SwLZk-HJJN^w5-4AUW|vr5rq!nB{e%`vb} zZ8htdiA!i!Z{q$$W_FEPo+tG-)TbMOzg$tq+HD*swZ!`6jOfcjEC5e^f(ulm!00TT zeO2IE*PD+Y)^%78UuD1j-QntuUwzv=%lj)b1UaUeaSztnJa}x-ezJfw@PtAq?daVy zA5}aW*xGKyDLRF$IeA7=C=n55C|}VCtBKB}kIyWN%8mzVr^s&^o0(LMYw|I9Ddk;p z*)^g2LX%(<1A^;t+LsHVo_(A=g{1ACcC@QH(j%rDo53>c9yhD<#ECml zZf+3jQC>^P*@{Jj_^)F5?e$Ox6cRR7TSqEmZNBksCCG{e-B3`NhAYyZ424(oZBGbe z`-pXud9mnA1hL_E^cWx!h;IM|=Ui@+qRG~cq9QA|CfA(Gfpl+|OQ|--P51Z2qCt_$ z-cU`v)#sCD7reh=C!sJ~|{_{$F$lBbq_6_}`}4k#bBa^9Gd zX87ibT9jr?p*hE@A2?KR2|7*iYikFeJX4;Tqm-8|+G8PhGqz1)4ZV>+mNkr9`dfUOK2|IMWS}Xm*ZcKE=aWMxz9z)< z{w-*d*q{{(l&WWUUKpQ>>$x6I2K_W`-QteYlj9yMVeclMQ`qv`5AeN4r)x~Y5()`{ zskXV^>B=~lJI9H591e68dbTQ<#nNBV*>>zb;hBBk z0LiIXUg#=2rsw*JYwIEWR!$}A(W`Oy%Mh!O;i=l&$9!t9OWkkiKy9e8R*_(?0N(Zg_b#jepL6&xw_izQW&VRxfnGXeDgu4_;U6`-9h`2d^q_y;b|G zO4k(kq|=iZ+vP=1Ou|^340Hh90sV@qX}-S{-&P#>nXXZ(cUiuiy<{-xr&1|{*a1L0sN)$F5t_L%o`^=s6` zLbs}PF_is;bsPK(HP}{+5at}{&xq|TB#V0zKp$BVmIQFmE6@W`R4ua<{ z0XXErMt~f6Z9xJ+Bph8iFz*3iJvf`x$yN(E1R$2$Cla?S_BNRQK|tqktoqz(bg&SR z&41n&VdHuqKuB|vhZ7;AjkdtUiq5Z1$J+`3@S-mA$h`c^a{Khjw5%nG!fu_0FQF5m zmI5V(FD<0pN>6zWgX&IHt81B-830b2E@acKE}|}32$YZtb#Yap6TrSKy%D2J&Zo7D z5AYvJQxQ19z7sR0QpI=KHJfahxXqV!{k(<1wKU>>nqi6X|2-Q0wv(+-E4inM4|I}O zTL{$P)o}lY7P1CGTu1VMV)E~wAFgYS>Q`X*y-fnQ50m4=%|H~n zFa%IQwo*BOoKAa5m|MTov!N-$^0GCSv5GcTvTN?qcYxE(6~qF2VTeU!%chPf)iioG zoZDXYXy=}GZp}#!Z##8&n~aKh4>^N2y_D%J^&vG?_ldznfFX{BZw8DkyXihj67%m*$GAVp94@R#69C-OKyGl`&GvUvqr=LUA(^aA1;Tp5;bGxftj~Rv2e#L$vsOlWI6$@t zrZlP#G|w#+I}(5g%^uTKM3!K_7$GEzj??<^-1(Gf-%9J=@P870dBOt?P{*HoumCa5 z`-)2I=xmr4Tq2o9V?v?!A)di`(4~XsaNhinU$Wzf{O>?mEYD{G^5qPqDa6~esF}>D zn@Y+ktUc}11pge2(ltu2*3_=>8x@1Koi#Wkh;H@u#DT1N_p|=FuYOgapxo7YZe+!VDBKu^zOw#*Z6kutKy*2z)8#n zBj_~`Z;g7=r{}>ny?HhvZ0_w-JI0knGJ}2lTqm7qpguK*)|vgDZ8k3bvT#Ij1N2_U zwBibX2kk z%gQdpCGxdalr-VnX8p43E%~TzEE)i3@t-!zNG$R=_}T|4PJ{0 zexuiJZAmA#6%bMDhE8Db+?)(|d{sDvLbppx4;zAaEmKdh^^~&{u`gGYST?^4xHu%5jz5ievRre|S6oklXNS952)aZ|S@7;GpOXj#Ed^`kDPL_P2Px&~ia*g?kKtd7@@3{g4& zLE0`qvGv71wKxeu{y8eCXY7G#^!D3r-oah9xY8A(W?1pe*}QnbYR9THIK^AaYCInU z%urgU_xBAW4gh{DMr0P-k~W*7ilyyfP0tM-duAZW?nk)8l%pp&zO5c%1mb#v{-X0w zZgr0swg|7;2KTcJd(1~%WK-2Ru+g+tlW zvCr0c@RTD8qlJ_ad*9!|R!*8HD-LUgUdW5Ja#D@?xF22u-S~F<>-17Nod%oG5EyU_ zv9ge7)=vjy0kM>Q@Ivo|yosWqkHRnM7kbi}|06v~{I3S}Z!~s<7sL8aeT3{81^%W5 Ovaz~yvE{sf`hNi|*rNad literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/fl-refresh_voting_power/00003.png b/tests_zemu/snapshots/fl-refresh_voting_power/00003.png new file mode 100644 index 0000000000000000000000000000000000000000..f4e76bde534020da3e03bb83ff840515616ea68d GIT binary patch literal 13684 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 literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/s-refresh_voting_power/00000.png b/tests_zemu/snapshots/s-refresh_voting_power/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..5b5069580a97c42db5211cc128a6e79188d71de8 GIT binary patch literal 534 zcmV+x0_pvUP)ca%benXBt;cP=J5eCYZcrvB#%E|G1dg4 z2)j$z$K@(a^Q;|!+*AGVOu299=AcXBGPrp)d9KjMVio>SAlXD5_6tD=2fN}vo$e1J z>7&4}&OEF2>S2Kq3VmmStX~Cf7y+ExVpv2L#JdhOsi-v=#Gm2_MbUK-ZAh%3vr^aC zMTlzkw8{yvC^t0>5aD73p*A%nLOK?;!4`}=Kzuw+p+H=iHI?R5CWNDhH?&MMIza3V z^i(1|V)*d31&*r@2=5kH6|QYpgrfTpHWlTyUIH>#SJiA|G%dkNkxE1K-X2Kmdl*C^6&70&B5!9h_O1X+`Tl+Y{|1R>VbKog zLCDj(P59c?0ZJhg5+$|?HM=^X{|3>jHM)Zqh+Q3EiZj-}g8M%WAAyDM9arG|D`GMJ Y0RI7oSvR2~e*gdg07*qoM6N<$g5m_|!~g&Q literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/s-refresh_voting_power/00001.png b/tests_zemu/snapshots/s-refresh_voting_power/00001.png new file mode 100644 index 0000000000000000000000000000000000000000..3426b28f29e555c512ed83888ad21e924241db46 GIT binary patch literal 461 zcmV;;0W$uHP)kELB&QJzz(w zZr}v4avSXc0I;3XWw%ftS$1A&v@aB;b>cIvlfJ^$Nn^i?Tpiy4MvQ(AI>b5Xte|IB z_!5#iSkL!Sb|B2c@j&njfP6r(=M6SI%5|LAvtY$j$CPC=fPHQ5Kf(=5QD$6y#u(2EMsJZko*St*VLV0Jv zp6IDW?u}j&62w4#2#Y~?CccR&alz%9?*Dn`8_;we)I zFKivX<+3lVMCr?&^D)z}ER=5+g-F7d-V8w+UCk0!oyJZMF$6Wk?oKgiPM!Mp_N6`q zHK19)v(Vd@$_eNj=4e|Q&8bAws?G8{-f8S~9LISXrK^Z{qRd5{N6;h$^YBa_;HWXl z1G@8}6W*LFVA($~^np1i;6wNXI1SK0Z&8WkI1}&(hm=gnIF8>~K zzhRaAS`H?-=QM1i=Tu6{1-oD!M<5AJP1 literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/s-refresh_voting_power/00003.png b/tests_zemu/snapshots/s-refresh_voting_power/00003.png new file mode 100644 index 0000000000000000000000000000000000000000..b6270f13fff423aaac593370eb0a40e0d0bfbeb9 GIT binary patch literal 431 zcmV;g0Z{&lP)mSP4B7SzpTIGWqnzMk4Zu*LP8JMftZKCYdm=xf=)oS9YNz|-B@4zEJa#V%%du{ zlV{=}?L1&pdFCeMVe z3W^Fr7r>c>d!=401U5V&s8=|u4*;Uwm+qa)%R3%P>p&F(4!6nHKC?-fUq`{ekfEBJ zW11@H>!IGsmRSezo{SNSRF^$8^Epzrnq4@MpT~!I+Ea$|6U0;Qo-$PJWr~(3e_+rz zRkg&mu2q~k%7@|%L23+{4lF(EkW;mw`BE7$-Clh=aY^`q>e#Fz%4k7on>uAX`aJSo z72{4oYl{i%7*+Dwov@vN{U1?e8vSM=g;SA}V#zI-#lF0K9Zv=MLCZ|(ZWwoe=N<(mOk zi*hL?OSnh56L15$6VUH{>i&PQCH_LArhGHNMs~X7W(j@6UQn=nGvH=OKrj*j08cSK z$O%1$y1})F$oswM)>`e)kz0iC6zeIsb(rixW;}s8Jd;^BhG;oxW00Ex3%wk<>f~Cw z-oDp2imgI&Ghi!bs3fn|(4UkK~VR5h**d^Lkm}$_%7Z?})El~+N8#`Nn z!sFhJBawRybwhNG>qU6lD7Xj%001DpME^j6B9#}h_KtqIwJ>h3t>4tfFH}2b5Za0u z|6FA^FKyuV!nf`n1Id1`qWeAwO#-K0000003P8NoS+x_OJ!Ml00000NkvXXu0mjf4g1N= literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/sp-refresh_voting_power/00001.png b/tests_zemu/snapshots/sp-refresh_voting_power/00001.png new file mode 100644 index 0000000000000000000000000000000000000000..72796626555dd6af33cde112c374d3ebe32b5d8d GIT binary patch literal 648 zcmV;30(bq1P)@A=3iM6U>tjhy2E000000AM;_UWJqr8#&K2 zD42GxsNN9CBvMM{Oza!L!k^>b0T*n=rIgO|%!BmDh%$M+loWLjY3EU~G9HU}#WFKh z#wNNu{JZemC9S}MxM1T~7E0YLT+_{2px-h@7KzJy&9zwB*hd=Mp)M4WAD6U_xFRel ztITUnR3CJ0V6)q1Bys{S^lUO{Sx~CeWLOn7ss;gUg!ogCdeDJ9-E8CyP%IpxnGLCqO31LZ)U>D4ig}-_KXPt z0Q->$7Rfdj_HX}P9XFoKd-C!)0U^DC$;7uJ81#m^>~PiE58_90gmSs4wdbf=)+Keh zu6bXKxcZbgE-givjaXdkPQ3!1MD76P^ysxfN4&kDQsvF%D83ynwn|(UN`swS{*4vm zW=JzGcEx!Oh6gYdz5`+(U(}ug8inn;x+(pN+8MTshxBf=aQ3B|WMqFDLaLGd$zTpv zf-1C(-l;oZ<0;+ZQqO3NnYQ9njm&PtYs zD19GwBwUZZv)C}GmpF@&^3~`lis3sTFXz}MheF6|omRexO;;%5%yc!Cw;>v*o{|-~I;$0000000000 i0000000000z|AkwAa$DPu%g`n0000bYKhu_fnOGony$GmW802{qNbamW3cO(J#+?dEr@0xY2h&ic4h_ zYDe=SPqeAgv(^s)0N_xaY^ZoLtL19iWkiMTlI62ttq+Ydk9uwyi~4LT9*)&SZ{za5 zy9za7P%GR$)2=N~NYoDOg^g{^9!p#6huGMkB%Z0U*$oXG%i~;7ZJ&w`mD{tni$!gM zNIR=7s%7jwZ;wSiV;swvWVpJOx;w7+v0dA!5cE#ZyJytqEd5kX$pxw3PAO=fl`a;B zkHsS$ZP~x47(N!c0PRZ0hPm?EGMblXELXkO^LIvP>F3p5v!jEn%Q^8 z8mvSVTB$S1tie>}^m@M=I)pJDf+;LHiGytPTFQ6Y?#(!hF^PbX0`eJS}y70`%8T>n^%dV>bk>TM}C(cF@9*Jbj^5WTF;gKGIO)y zjlJ*9*PE9W@jdm~5r5wEu#TD8y6+Pnh8_O<-8#^Bx$bnOy3REWn^jXeAFev)TXe-F zTky7j?62N_lL@yzwx7O!=&4O1W7^|)7fcr%%i5*3D%0_G;tl)cpW3Io3*7!cdXW1o sV&B=e%knGs=l(tai5cc!1_ryAe9w9}zGZ%X&;TUp>FVdQ&MBb@086r+N&o-= literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/sp-refresh_voting_power/00004.png b/tests_zemu/snapshots/sp-refresh_voting_power/00004.png new file mode 100644 index 0000000000000000000000000000000000000000..4c3747edad754c34867ec5f1a66fbe0bb59f7edd GIT binary patch literal 472 zcmV;}0Vn>6P)NklWPJwn1du000000JxKn=m8widp~r1 zYwblNxzK0y0Pc*P_TM4;LVVLU?czl?jqeS za-k=ts|?>a`zHL-427hBC>;hri0MjB?_Ceh);Q%b+oFp?wjcdj^Ujyq2f1aN0Wz$e ze&3>_Km5Cyc|G*wo@hH?Mt^#xSCaFWEt4RodP_509F-CvPG7L$)ge1Ib1gx0b>lAV zNU|qDmh54>K6(S=o;Y+4004kxVroI|k7}{V`upz8clwD+5pMl*D0AuqCbd%ctl?44 zo*42wyDU$_kD?>R6I(^u{TZy&CDk=jB*6V`;q#r$4|CV0^`+@VOVDCTHvbeez{cW4 zbpCltlDLb21k4MQ+rb#QE06nT?fH@_etD1ZrC5UQj06Ax0001hg}wnoqe+{v@krbN O0000W0pYqOIlb-Axr$wbT-6$KXa$OYB>zT@y;AgczmFP;{)7l#IO+ zf`*2~R&G^|NQqEQ6JrfRf*^?Hx#qdwJ%7OSe4fu|&KG%+E7y5l$9W#h@A#hi?SZX@ z)XDQFB_t%IEdTYhgM`GPml6_(|2Tda_{Pw#4KE?_j}gnC?>Rkvz079CPFdw0d$19I z?U3Qo;xiG)U!R!)KJOeoe(0xP&fGtK_2`YGKR)A@R)vimPHFklu-sho?GNixYCX=u zaxbja(-{Jh_||^V3O^*V^MmVMg~O+goBAGlcwGG-r<1-*x!CZF)={}Lsa=P=&-{Jy z??w3A6aGgyOk+Ldf1zyh#_HKJU=tI5;$*z_;f%e_DoY+-*j?%0zwOc3>y1un+S}Q{ z8#$sKOBz>r1xYGqzN>|f{!3u z3>>}to^Rtd=bfL;=>v;kf054lRN2EB){3-Rwp``c9}Ca8g4wZ5eEE-pz|k7}%A8)! zq~6M%M+NC;T`o4XJR^#Ue_lSE!F%Zze<-P!`BB{j(=~;DB!{)~jr@)#i3yOyTKMio z7iKGeWccV4H5Fm+NtYY$OzSE+Miy#&HKZ9;d+mfEj@0Q95o}gQyQVVs%gV-$Q;_I~dGL zEx(Q8WxMiQL_0s%?$dj#zeV*>0l*okqkbH+16 zwTtdoGcL&aYbl&Qmh7}(ojB2;Rqb9shG*hb)8G3>uxMMw(JQ&cnsOP{)z#~w za6QcZtNLvYndaqVV`Cn5#Sw~HpyvzG;80^_eMBrS=+K1a$Md5XdnOyysboS%*_Uv= zw5u#A3C~nxdnleh23)}5+L?{7N7;PXKG{V2p1O!lg087riAQ$*^Woe=gse5WGpmoP^9b1 z79MEj2gJ^&VcolzKJzbRn$zGL6F3W*SEikW<_}?y2PhlKhk1K@d!J`j&q=4%HOxo7 zg+>0?UYsiymB7d3Uz@;lmvde%()3ezO!&PAFEay}2bKj3^0 z&HYm9ZXWrk4v$mO+rdVdpJ1de5?<*DSJjf>(V1rUZEbCyk^UT_K+ZLGEX%xn)P?46 z2!Gn%+1c6Nt}FA6?XRORg^tZrvTDkj7QFClYj2;ecZa_TJVZ`}Bl0Jwr>AHC8dv1Y z)v1MG^dWTiepA4)Y3OiTa z>?EM}e(W<1%Pn!~&hEsk0q)T1*#SJ9Pg!1G-q_IfNzWNI z<1b~#ayuZtx<+gdc;?&^rLcVN1&zn)Yt#!gQFphDoZm8{C>ZE_U`bhD*_pXuL2J42 zuuSta43`cK(CX*za;!d;o(T!K7e)wFYt~ebO`-%L2Y254em1^Mzwz+)T+B^h8qC8( zJnsyO?uy=B%eo?STJNsV;aX%$KL|SoufFSedEheCf1c$!~`4 zA?f4oYjPKJC8Xphqzj2x(Y2_MySKmJ;i)OIeMv7ERYO~IkmF#d1ip!g!{KadF2DF8 zW@N$xT-uySm#!@j3pb~8(pPFO2nU~^u6<&$N^;)7jps+qD~9P&+ zVopsDV}o;@MJ_@hvnSBW`$DPxk}JmjmeWrd^OIb*mF$U6p|KHfE{Mr8qwAjj%Abg$vl7+N0V8?s25CzWnu2^&BrPK&V^PTX zx(b0*3QGyRz+ZKQWp=BY>K}r2tin9&oa?%*ETYi=kXgd<3~x?eP0CmPgL>%&p=G83 zNE_x&XA{jym5z<-RGmNPKhwcADYTG|xr^x~VT#geA)neir!b%*g(nqa9*^f?+OahP zPsnF8tkMJVw|(-~R2KBcXK#SqU$70GP$hb2Z;FB{Ppm!anOw=p{<<6^URhb0NIcMx z%NTXb`)Ot|EIuKj*tWV3>o&F#+8h@jAOG}e@Y!je_11U%ZR6qlVnJtM;pcN#+E|g3+d(Me zrxEXqNAOo5V#j9{$<1(_zD%=lkfZ3@3VC%T4B`9!qP*NCP)DvUkr|pV!w9_jG|sv| zv>8q3V!tLaFM?$qWP76xmpc;(W$M(n4`c!$RiZkoEvD$24{uAmx4*_##3~?aZ;hQ1 z=sDD@KFW=7Ar>ZxiZf|S6HB>#n3lqfXRt|KjDv7;&2L6~Ms(wBBG-P$2psLa`&;Yn zQTV$+S^!Kg-i=zRP6hITqE4$XH@_h^(_qA_-Mc=BI3BJ?u}X}=>Q>zd-Z2Wc-n=|< zxdBaY(W}Q=5-|&(Zv>C=HhOw`7z{=!(lz$iF2BZ)7WAP$BZ9{ZW8|WmW=v@4Ha2$K z$FqHLdfux$w<2@|_<85SJ_YgY_M%dn)hm5ihjNoK2m}KEHL!?#i{8_m6KKg{B|eXr zaYs5#aFllFI>pr5@Wau>UC^JE(+fDZ$urYzUB&Z~Ph)Sn2h1x(#&GtRl`{@jMZ^?j z;pZjOZwU&Nv#ZxMVg*kJ=gfHqJG)Ci=pmH>#}Cu;iuy2GWkiOE6}2eI3utD~C=3kq z=X45wbX7?dbdFw9S22>DdTMNI*R_$@gwqY^3m(X_=+RU+58Gr5>zJB%oVrcX+{9I` zbO=$)f}WDyiS1L)?xW5=Y4xsbU7#;nX%L&E%gwqE6Ia;BBu6OONOne0|13ZcyC?DNA3X*|1Zs6$-Sk z?>X{XI@tnY3Hi(NsKNTXR8#Bu7D@Ml+0tuAH4Xa66j;oJR+RUNTs|8Sj6uMd{3BK3 zcU>G^)L7Tf)dW|!!Dcc6A^vUn!grg>-=M z$eY32q$2CryC>SqP2J&{VV2VkF%27;1&m+8IE6G%RHyMCEGJ}UZ|tm(I;`I<#)j?MqJn)7eV;(OdT}N5#Q$AOyh^V-wIT&bH!=axguZ{tHb9iAQ^Pdk ziR0>W8D*+-!tLgQZN`_>$P=|;Rzck{l*gzR?|SN6V542!0NrCtoe0+ha+Dg?m>Ebs zclwyi{mGj#GOU-v2Iq!Y76s0AT?|F^Y{U)RFNF?O#cdbG;-!%*q(Hh9 zsUS;RrE*V-{&nQ8$wAZltnynyWP zQ27Ue$K`V0`@X#JY9V*T-1f5YmmVI@RjbC&tPMg!QZ*%zXh6Bz(1ZtmSaM zuvB-q0tiIuas2FrZqfZfqMPl(Q1D3SK+RR7qWdu}qV;t^1>$iyTqxqgrcdt`aTc}a zp_he8ykk#;hvA{&izTzdM*?ob*PMm*kD%ZX4)6-2k7|BH8xAt^0^F*iS}5KHRrDZO z38{I8Oz^NSp#|cZi^1E%dO%77DphkkxJU&3(xfzO!^)yP?N`&BK&)4!!gYZK1`^&F zk4&KOWP2vHnqQ&Qooc6F`6`nEmbdIkZZgR+^t#2pHO$8NEd!Y;>9 zJU|QAHDa|Cn)u3dOMFL>db*!z&i_EWx}$p}W6b@h)gU55wu7!_5;8HA+eNOz;edT3 zSdGBj-Rnw9N}i0_?o zBAEQLEg()amNXFJq3f?tk~GruKY+v!ca&eV>E==2H@epiS0ahyO&=agrS*)U28wOW z>?^V`(aGw?GYj*AH|HOvxqAe-LG>^jam7~oa<3MDsk_c_37TM9-Hv%Jl-FzxD#GKe z>ehBGvFJfde9KNpIXG$Kw_#9?v2>UoW>(H(am9)Y5jxp%Jr@7D(6Z$7hWk0?wxZf& z+~$GUYcc^%fLtP338J18wRZXnr$0=u@@e~1^goNEB{hn@YI=XK z+HKS84c6JI@Nj{92{a-M8|k+AsXXm!)T+}FtL67^)y1`Bt{RjgK;21#D}}sysBHK7 zt;h;vTOD6F_&9CkS86gC`R=+j)5rZ3{YTFnCFCrW!mb}q3#wlo(RP94mw<1^iQ=*3 zbROSmhp~WCT37)^UsCr<^SEYeh!)bCcOM&4*3|dtLUyBVYp21rIlc`+eS^C0IR>nF z^|NBOiDCJ`!f$UBJuG-O)r6@&uHJ&9!w-P21?c#^xeQB(r6#2{?j92DpsOae5Y9o+%NyVRCFWpY5NMYF zDn3i;aqkRvb8G7rXEXm)QNe3(n<4in5J;huzO6=-GTnY1T3Ad@zX90q*h5C+a8-;D z!%>D8ZufjA4!3DyGrA-WMwRTxhGPCH6=jDXEbgF8YcakIj3+@bY_ftx-=3qa83aPoJcbQub|3GIzkp8p zUq55W0$>u{Yk~|AP&&!IZj`rCXZ?N~sQiH92L|mnPb}%|HHM+hjaF{8I^!YsvaIDz zi{nV+DB)|8)qgW6SyO|@O(aT^s+RH*9 z02vczd~{ob+ECWsJrDUBu6O-z-}EZHu#F7`ifNP+jVlEBS~LMDJBOkFjo)y%oq>%2 zpcJO#^4tJ)SNJ-=uqC4lXk2?gc>`*!)w6_@^u&6GcvH~&+^1mHODR-;5=8*~1 zx3#!X6Rce|!|AM7owL3`E7Ynef3WJpJ1N19hEH$f#nT%bZ~*4WCdS7b`zHZ{6Cg2w z(pr>vF#Hze4s^xQ1^}hP#vS7MY`Ch+h3qUuqtQtLZnjr*^V}9#;z*eyxK9#9)@-{k z;*Mf=AHWh9gk*xuTV+i^^_MF5V5*;R80b2`Fp;{-sp z)(Dl+Z`G;W@g0=(0+C3Rq4z02es$k#e|2qbEuXgx*rj{0x4Bth_*>kdcz@rd=sqsB z|Ix7LpHEtAV*s2gOh;#t_j|>D0CL@~1-NC+_d;DhA+`!b_!?Ep>3}rk zf47N60IO_l+*Ea+bbK(Z3J?}On5OLUS%`}_X2q9ZmuKdAJ`AEZ-t|; zTR ztp|n=;6Z@AjdkO2aj~(j*qz?O4@{c1ZQAIqyv0c~?i>8Ra4xq2eh1(k ze{n-PJNEvQs6WM(kX7z4<4EPI(2Z-&sXrMHjD%i5y?<3gAw0aYT?N~}Y|#(3aLB^w zybC~t>~U$5Q_zXDH#-KynQiTT4kq^XZ_7Lm!% zl(o5pa`vYu`uZ*G{e60s?vXcsim;2f1MEp^ zM&?sZUp7k-1!%YHFE(SGW}`Nio>yzUBOQw5+Es8a*QFzQ(Xf80t@s|z{#%W#e$mRx zXOJxZplw?#)TRiBva_>8PH3&>&T15B^WHsgEy!y_9^rKlIV@bc0-PGaZhn~!*@}hc zJNFh#0_Vo9p^T+V^im=qwu!ZHFQ7|_c4-vX3<3Ki{se3u0G)ulh~oo+MC0KyxAsqe zwJkuSIKguC^_dd~IG;Z#`jDjuw(B#Eyr*H*IrLBu)2w}iq`_}Enb^~$#&5NJHNX|> z7^{Ik6$)=iNnGFm<`6Qdttc%6(u`Vcqt0r#lWPgQQLo-n78r;7bgv-vk!aJZ{HAd4 zYie%)<;>{BxVTSb8WqyO&wb`?hjA?jS0}FkEt=45ANg8iQiqiaUIdqJ1v=P4BY90~9SC1tpS{R5 zga_)^JU7uM_CZ9>I#%tQab3D#=(6$UPMViH+j-sA!NI9=kisgMF_LsfT{|67YP8@d o9<=%CPt5oK%jf+c4i2x(^z}nP6~G@JBqS`&Y=0*Fvdh{bzbN5aX#nCzjhXUCnQd= zv9a-4UcY*SjqOMl8yov;Zg$`uefusH8=F>&c)QGe|q4$lE&Sq?#V|TBZz>3*QwMu6W!pc z7%M(ycX zX1J3vkQB4vr$&P(elZ$)k;t`pL#vBR(fY#-Sxcb_AHy;{#C5j&kEx&}KUe3=qDK`$ zF#VEsRbLTvT;cp`bauG);cYXgi)$UR1Tr%@TXw5E*FS&e>wFjq>Lr$Xqe0^gHM&D5 zU!2oaaxnIESI1K8LG3J+QA(-|njP(7C3{cBNDf9wVvk*aI?IXb4qPGL2N|Nc2%vufyYenpJT;8FupsldgrQZd~SUvg@=O>SQ<$I@c_ zF)$Gq$+>Q?Y%WBcSKdk@ZcOD=8r2dCAcdM6)7cvu5Q&B`*P~EK$2stvBR`hV|?0XLtdKws9Fs9m>=9RpNCp9@f2voV+V{Y#7 zDm>rSKMzt>E*tZ_Tyd1$+imA}{7a7}W-VlrMAO4+ROc6LP-KjpEeV+hnN zwyPSBDpw5do^=;_G!+;*ayza6!`A~@cN8)*BX>RDaaX?#zxCilFF)`0u7nd!2`tFz zns=6;iv%lARCY^)=@IpJy(gNMSjjEL$vJAg6Iv~p&3@;Lq1S?5>Y?(&cd|}O@mr>^ zXxJuvuI7bt#O{NuN`Ku<{0T486ElA?@09CQTClKC=dWv(P>&9=H2YpHz?Da3)*97~ z-wiCO+y&pEi0X8I*}}+QEvEXCpP4z$yDbR@6E*w?JLPzq z+=G0e90S77{q<9q8#_F6#d?B;Z)+~NoX6g&eKM5x^m+5MrRi_)K2J(*CnqpE2Sy6% zjRp5!l)w5#b3Wdwg^_XW@L#^tnRC>CGvCo!qA_^)Qfn&qcl9u75R7*RgG)&o5+Qx)@6wF} z^1j)!OjZvF%SsLpzO0cI5Ism)ygN;ajZ{b%zX=J0Yc6h$BPXx_Ci z-qtp!%IRzjZ<@EGMa{o_^a~xhRseyOikiPj%H6C4W4Z0Cg$sNI8#xhHeqp!}{-MMU z8_l1QbSW~zT`u8^rW%fUc14ACZ>29JO09m~SuB;FJe&=^eKeKX;h}=+jy-SNdZ0S` z{*!T%TR#dV^@o$)vMj$fDg_}C9h$2}a8otajSItUH>al9W7!G`)3REH0*6H*4NY}0 zA9Q!~=%*gMr*gK4)QyIuRf|W(eSsl&g#7r%NKv#461@Sn9jT8pvlMP0FFpMfEK|QJ zJsw4389%8}leDhErQaLcD(f6cF3{5OOJ_*S0}};t{7-*Qb%lHZ2C~}WqiM*E z+{|JwL&FY?tZgxh>8xZ7k?M{yrAMI-M*>_h4FV`AY+WbYx;AD&3Dv#HWF2H;$mR=Y zbSwIv=F3|8C5x6x`7-%hqFAw~&1KFAa+;E-NRjQ=^H`54AKH!)c3`2&fedvZyF+nX zAXHOl_`&aHAs~J7_QP87sFTo1~>i7 zOW5g!+Zf`6T5$<9$l5iJRREcNAQTl&Y=rl6rD|X2yRLNAh}4ND8{#Vwm%Tv1S<|F1 zp96KusRvopu>PVi%N1`|nhIWz0(*V(`g<1Pqy)k2Vy!JIFc zZnv7&4;L{vO8c_tA*XdX)>xzWI}7!&PKvY1!m}v!^e>yu@#q^!6NgA$3fIIVj46tQ~hLcF}Aa1pg=^5rr`RASrb-~;5k)< z8wlH<+cG4EwM`W1bfG3A>1y8s!>|L9IShJyaVOqzgVD(fq3+krhqcX7{N=g(H|f{|h^EPf z72H6CWPocPq`>I1|Hotd`wY@e6AaJo`!#1#>cb$PR zuuTdzH|c??z0Y%F?j}yBsp{40+^6Vg@v!1DmG)fL)A6pTx0sxe?VkNn5f|07T#gAa zn48gLk_(Z~+uNJ|JbCOKh>5hCdZiQ9TFRfY`X$C<`z4>6LT8I}`C-@xG^Q|eGg#o| zMXW~Crp&z7(~?I{o`@=>Qj}na%F*evHhNFY*#Kb`)w2OiCbed4V>(!>-<1wY&(C;Z z^cp@y=$Si{roCNuuu@VGyGkvb+W3_lf;xYxhK$??hRN^1Hty3%_9EsHk^+*r%?)2P zu*OX09IXq9q%)HazpsB9yMmHIRFRK~5*fI=1q2>;&pGi_UuROBiRRk8_%|O5o2Zb0 znfwc0`uwrtzh-CU(q1L`NajVKzLZ&*6nLo!H?jQ8_=P7i{lb~Mx{|lMvKa=kmSahR zoEm+V3SA3H{my^OHOqN=qOtX>Slg~?*Ff!`U$-UEYP^sU!n+cd?p)idh`DbMp4GNA z+NkQ-6)kxztoF%NT*9rK&DhTQi!0GiU~TI!yMM&O0yx6j+zYG5&|t7!e!5N(P9vZh zoGrT|>bJlwH%UJ2cCiUeufOf6(=hjd12xTZihSrCDZO(h#Kq2B-PV!zw3|pRdCHSP zUN-}IWDF~8G+KY;6xaoma^%^= z8l=?*qx5~r(x0Ai9o|m)1hT7`=V0?wEBm?v*8{&e4Dk5CK9`(Bqkm0qSSuT-Q2gs^ zk;qT%Azxl>(Cc8dAY=LykLdMv1D$i+_km3`wzr-?>E&l~u12}3N|KW{xpt!JOJ_LT z9u}q$znX$-%3>T98w&a{h7HJ1*~PrsFPv(@8?_0jI%h}O5=J$s2*jCKqUr+`WVBU9I^?Y8B)lB4ZhctS zXE05ip~NQWmsId6RwjMxMlW52hh)q@nds^tsJ^aX`48izQTKe%pX-bRciLd+J=WCU z`oG&lC8%(=%)l(CEG#q0vpnFz^Aw%PON<8BW7o=#BKG8$o{VDB3~S#6G?i>%bTcNj zj3oK(Fh!bE6OW4i6^pkpb!^hu+4fyqqAw42OknRc(Lh;<^Ya#xX$RJ~>3mJ_xmvwL zcr9Tu>|kfLcZQI*i$CS^R_8UQ?#=GQ0)b-$JUpkeh4+~OH;_?wkbsz=^Q|qhlM%m- z;+m8DMY%zw$hBUEN zc$w?ENG9{?&Q>xpof~%j~NTBIYk%u05)Q!GV0N9bMC$9lO<~N_F?)Kq4ExciWJ~ z629B6YWVKN38w*R_%qk-E!HMf5~AVF6m!pG~Ai0MveUD$5^+1ty8cNy3_F+Mu5 zq5ffv9s(N%isuH&{>*z9%j_rkj? zKeSgb*}n5V65p4c*TqO6WzpW%933Bdn|jpeT+pdPh7=4_XPn6F&MjTfYLY{D;2H$IW(ND$QL(K#?d@S<=&1If8gFOmr-{Sy%|?)|L350`Kb?T+A;esyM&;?0JoFVCjF_6h zj?y0dTr^#vDr3kU8B4D^WH;|ay(?xR-wlj$ZEZW?3{N~Iz5Lzo3BL))JXy;qhgcKf zn2$OL#x&Kn|3p82vh;o@2}9=rQ5l^jrS`-#Cwg1+w?e5xwHK0hV>@#hj2K`$@pRFI{rn_K$*o=B}413*t~CuO#? zTydmv`!C!9VH-hjjkvq~jcoe{mwc-l<|2X$3-J?LF)JPOVJmfZJlG1aJP4hH)0xo6 z-Z9dps{rLjDekUQfR0JO+MUo#>|%cADU*|RwCp7 z#QC(0P0n8MuT$aeN3;H^y?4R*vn()d<4eeeTiD86y1~Ko?de~gny&yc;@U2`i zRNpa0qXnUxVUNgRoN=jIotoU=*57y(4Wj?!@x81OE$^Gd!i7`BG~n5AUE!f5O(8RA zX_1E}R95>!`=mU!k-!fMXfSd;_Pv&%eYbhoE)5MFGPxi9CkJ|*rVA~$!lUxb8E2yC zSJn?>QonMzjLvdkn}iVL(pO8r0}tlAh@X2bEE)%@|0y`s#s;Zeh0PSAnogNF%-o?f zjWP?_7OtB56hzpA!P?=8dQzEH3t#oGj6|0e(O)|zG=~3(Fm9OXuZis}p*hc75_i0I ziZ?!g=UFs$@tckCU<7cobA0a{_;9FITK758@PV)|NB(*I=1Ajc^$R_L`1&$}nji6q zm_Cq5DaS6m+q<#$8DVFL45sJ;<{hFg;XkaSn`9(-hW z&{uo62b1b%6ZMPZUYz5EEGOIlJ<@w?g#o0f06gt4PQ}0r5!A#f6?_yFhdj?~M!V8a z2udVQ?F75~sB3cNb>*~!upq3P!aH(@;t47cQss(n99Wv6u#4x!PpA~cYa>eyl zyvYzJ?st3*S)cnp`qz{4chJ{%2uIhv87-1NXESRE)9=SFOxx{`K?oQHPVvQ>IcQ#-5CjT08Zmt#E#K(e-u z0Y4PePX}&F@u#tpRbN=i@oX;W)GXfBjmPZdBZPs+HI%{viOE|c8_=*`yanB96#z7h z-5g#+A|svR^h?}Oni>sSI9b7`O&s%zSKROpK}EbPHx55Z!j7@0$cyJ(be^QZ_cvagQ{5)SNw0^X&{* zhSdW*q^42Mu;>l+kG3(D{&NFCm##x%#y>Zi=ukfRPZc%!Zedv6{!tCescZ`d<3_fQ zL4GmSD}m3^`;s8=>u;z1{Y!OKvUw+*9dH&`zsC|kp*Te^@K+=tW9Qta|j zCb8+FLkp1#sh=Kf<8sNA+pFhY9Su%S2E@g`%w&wtq+&H^0kYun(w{`*sTiQ3$4%c? zOowf7t-F;N@_%skJk06x^1A^(C?d7XhKr@z9h+&fOHeI-(aZ+az?%EryU@a_NYyvu zF>)NQi^FRk<{L8X(96T2Nws>@P2wx`%S|0C-4BJei_k`GE(S%S0H8T9c@O?=YB|ys zTowifXJ2I{SqgDYFpF*j!BB&!J9|0bJjBI}cl33NvjEBM>^<%8aw7jHyFg3b_~?9R z!y!!P!V%4%+V4yS4U-hiOGzs`@3u}9qtkkd@?m^h`xNb!vxclFTniRp@!HoMw#Sv7 zvEGd;q?llqm;Njby*DoxygRPTT+c{>jQeAH!3375Urd-#Te#cL!9PaN&cmE0;n(6YYt0lIb<8B0z%i=zMDGix4 zdHV9*1)80Sv2Z}RgqOT|9;8-5F=GiqQ(3y064N`R@!P0Bk|1OS&FMux6PBi>p{gK^r}V3jcv?^D))Wh z5{Z;>4S3FGw7y<=3e{H!2b(?W*%HTORReITZ2@cGYJ^wDMt06Ggy|#<$b@Fe*mBHi zbgn}eVmq~S6K7ti@nRbdOYF9MOG$%EU#g!yrtRKY&^XJPBB_q2jWh!7okritn?>HG zUn~;#kfO>C(ifgLjV=WLG0k}bV6Ve7gAMCdLB;7TjxcwZmbDG>XGmCKB}Y%=NAwj5ORWHqxL&6(`zSNE_kF%I1|7A zXm?U0C|RxJL>KGnRx~AC`>;M$jrVU|IbyVKEu&gni9~KXJ5%QOgA2%3W?y4MB~;Dm zeK)&uWLK$21>eTapc~p+|0EK1&iL4a)*pQCC>cK%WVdc>JnQI0xd<+=8a4R+XVmMJ zw^B}IyX(RHI$bEJ@EXQz?-DL-%os#uG=UPTtrMb8J}D23zjYwDa@*S3`tT!S!qTqQ zgCwEh<_GiH5h2T3j@}0HN)BJUMrbRpApXY}sqQs7>#r}N3Q}cI9vTWVE+QuGH?D6h zmO4d_L0>HP8B2k(ZO-0 zBssAPZ;ZAn#EeLE#wLEmPa7m^)EC~;FITk6mQDW$@sYRv<(%P1%j_<#&l{C%xieSV zVUyq962O_jyohFBh5N9gGyVDR_b%ioFJ;iT!I-+MwMeauq9l(3EqF`6dV0BTMhTK2 zp+U|`0hpsrN?@LI!h+24al=7hG5)%do}1koUsj6y5RYzcs{oo9cLEa{zYPD+EmD;o zP)g6w`%62^Q~XqmOCJK$Q`UkBmUNn!II+JuQ&zg(uZk#YMU^kc>x+Ds)Y^zoz*9mzb9ub@+}qWJ2uFTgDn1; z1BPpi56i`3ZF23MCnjl6yWW0nqA~DNb^G*c%FaXsc7j>Iu5s4f;qYQ!U2*|4ll}~K z;Pa$VgKAwF@p0X8q#|HdshR%jn1Y~aE4>$1?LF*UwsNpAvN(x4pcKf}cR2ax8Ez;o zW+h1`OBTX1{{H`+CvH_*J^IX#8bJrMWqtmQcrW!tDy_cijQTzvAWbWI-vPyNZF|V& zjHWf7o#NnTD){Qr+*6H1W2wx>-@vkL>%KvI<`or}v}hF^F&K*+HKsqiqc6#?QSj^o zH0a~M_%F!}q_;-p)r3SPR`bo(wPn1oSMv>zq0!+L(MsO%!l<|vP*1@uB7 z=`Rfb^&L9K;JJUf?_JD#<%|+7ytD4B)WMXa3dN*b->;q=s9GO<>R8@@b3mDwe81Yu zN4$pXjyDoI?2Z3{VuZPJCa2%*Wch1e?Io9^*{B>SXO#dU8d=^4<7=wFBZ?&C)(0(c7X+Zr+t0I&u+GOc1 zl9@f#yFm4V4s1OmG8W}|O`7rql|20MZzNo(j2Ky;z}^O+pnE;gn4!Wi1t@Ue#~&l4 zU+XY%CQ~@3)@`FxclFMuXjBdC#|(Y??%E+lIm$1-dN8hHAgqfoi{7veMbE1c>{Tas zo-K<OyXPGVsGRR52PNh;Zv>ijUvqC ziul)Bp&)gih5i#C~fthM4E zQCl|E@YYarsDmIU0J;;^{`H*NQaZ9rR7@{5-VnOSPL2QZD{IF%Y3g!F@u!IW?dm50 z|Adj7z(+tn2l9)L^RMaypg9>6?rB#_0&q#lsTj|2AjsqB6yW_ZorpQM#LxS-R}5@n z5`LbP4}cU_u#+6rsDvtefWdPV0#q}5I;^cqTrBks^hFsI<@UF*XgD+qVJh)r{bPNTI*2w&;R!_DYOOyHp*F6RjuLR*UYeD;3ccXi##I zymY38y$Jiii_eo>>UsjNs!)b8?!*_M$P7VH=R>tRQ+XH{q5v z0hI!Ylm%p4KF=_U0b9vMqX^I(S@oP#<{vI|T`rLeb^(KD-j;W~TFcc`d4p7;K*Ka5zAGaQ?KN9f0L_9+P`@HRtn%zh%|PdJ%2~UuFUT zClU=h)a7aODRgg|hYg#sRI3N{JL3)YrB9pxX0hgHpWdFz9wX8Gnqz4VBWWIkHcVpY2q@293JA|EYu!qGIOn>~=2GM%W! z$98H(n&1;D!_6L$l~UqVE0EPt7PNeu0Q5gmH|bfASNi(Zn#(HIzp1jeWw307)#n16 znjgMOt}cKN_jakmbzQA5HjH*uN$6D|8R^D`5f+Cx?sH=NG`IBMgN|xC&7aIv}D~7iE5$zs@4RQkGg}3l*iKBojT7{_+KtK*? za4_?_IxTD8x0Qs!tbJ|q(p1$k=YXfQah+xxg_v_#9CokJ^Yp)<@ zi0;9S@t?{hW-`#A7wZW!2WZJvz|`AAH7P+Uo;a>cWF!$Ym*R&!cmP+Z5IEZvFsO{Q zMW%x}oxorr<=Q^AF5rUv|2l|lWyU!-+VGfg-_I3k#7B;=#dap`*8}ZHz*0oKfYtcx z^9}IMugIk`Z-kX?0LB``#Bg<&i1|st2RqmlzJN+3V&=m_hCoMc`x-$&*K1I2Z1HYZ zKj2tdSwJ7^me`FCnUvUtd%ifKY=de9;Ym@RQ@&yVBi6F5Jh<_fIu|E-Hd6muN7E3H zIy4!u*@6Kq{2y;jRrO7lP15F)Y}3!V?GLSs9qh^gX{wu}0InI!-w{UVe8m>1jIy#a zSxf)<8_{mQZqQPNBz^}Gz=ygT@OVkr)^WHd?q+YA^W`y8lTEmv7B~Bh9c@b6#mpaQ zv>D=gk{|iLk{#ZG<>CR(tFM3K`#?-6e_0y{i@s1IK<+r;*>fFq4fuQ6M}xcb8n&&@ z94N%}bO7APGApRi)?{Wj_iOz}k|t1d?CYszvx@irIc(#Kl4R!Kt#Q+W;cOBk8B-L0;=YfZ#bp4%!4w-oIZo4Aj|`0aQzY!SWDeLRbd#SRTfZDE9fF+Dp&6+?~f}CW-^m>QzU-VjNOH>s;voXUrtc0h&MY5F z3`BFCO*@b`BP zIYT&;f;uwjjQbZ zL(SgEH34>0*Sz!NR`Ow#cN)a$FYa>lBDJ{3r=-k&zi8fa(jA}oFWdlp1S-n%@`WXd zfINdM5`alQ5?S>UNd!b&Qr|}t>_$Y};O$zAQj)pDb?oxwxyR*0WbT?LZ!3Qu5gPNH z8Q9iJOtY`dZQJTiUz)xdx^5gPtPd@v#&$M>P)McpD`+J;QB^;2LDur8)=lsZi&a8` z{`~>Mu%SyI+N(e~R=*@;a0#|?=r&%cX)QJR-4(GTr*YsokTF|kUA-y)wFO5pUGYQt zx{0BXLvXcPLp(G4MflU&x?EmGMsj#^7%PVarPqU)Q5JuBCAjBOExunuw~k@3->rR6 z%ynlnhDE|lC)@{wW2*FkAzsuNqb#|ll4+I&Zwq^-B~+&J5gPamT9ri;6x;PpSQV-m zmWLX?U>W*FiEc|IUaIZNovJqsiGK+UquKORoflVE{%vmZkWbtg=z?f)e=fB_^Xg{4 z&B+N6tpU$BbyS=pG_CW!Gcfdg{IKwA(@(p2@q_WGQwir>8%3nr!NorVytd_k;-A&03Eb5k`jP+jjvmm{(7Ke zI7djxz5BlO6L1{urd7+3(iehY3DIPi*IYo!vNd&UeQCx^;m-_ z8GH1WkEPvQ7Rmh=1Quyhq0j(af&HfCi-fG$f>^R)!n-BC=-#}wvzI8q5#pJ z<0O4sBjnM=v%Inna&g|tvDODGy^+_he|I$Y8d0CON{&2Ok(arL;r(xx9!rO8G~&B3 V!7S)4;5SKZmgaU>(N}!#|1bU{;;{e# literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/st-refresh_voting_power/00002.png b/tests_zemu/snapshots/st-refresh_voting_power/00002.png new file mode 100644 index 0000000000000000000000000000000000000000..60a3488e7871a8febdf54c979147ea38d718153c GIT binary patch literal 9029 zcmeHt`#+Qa|G$?~2&tTp9V9VlMvh663MtH)IV56Aj5(%4MHC?xl1ee=Jm<+mZ8Vaz zS<)ODa~NZ0+vn>2{(S#~&+U7-l^f?)Up+kFVNU3k%8!^6>Bo z+gv<qm%5*F z@7PU#nfocPfy?3h504(Z$WK$;v~Aaab^bhboXEa);gI0NfWp^UkyJ~$-hDh5R=6n| zJUsPQKL0$k_>cW(5B?wbfwjN|UY{Qw9UXYhX&7b=EvNXn^IQX7?{wR+x`)ij()7v3 ztB;kBJppDE=yrS8;_xi>JqhBx2e{FC$_ke-B5H{@5pgEK{i2*`l=*gx{w(BJ^{RRQ z;O$mY0V`)>1EG&*9 zR{dLUzt?%r3RV9&JvV=t^PrzFp!E<~G`%(73FdGuwo8{EMXqw+{6p)a^u_3v zfAB9!@9e6Z@Rtx*+qmC(?x4|D;6DeCRSz80IS_W%r^LWt!s}`0x#BONHnF5+g>3_H zwrjLJFBKD;z_{n$LGFtQ@8B~#oRmz%+ozWlCFdQl9;nG0W=gz*sg=d>S^AXN(di6@ zm=>I++PrJ&&Cb~XpLA`^WF@UxqlZw~YTp=)o$JCIqolE-Ny*%1Bq+*!8rmP~Z0Gi= z#O4tO<(|;)6^3#5>kDp}2myzwo;;tvy77g+8*S2}8)sB#S2hGq+i*+8%`hI@ zm0cIJ%4wBLnOTfbP5d3xzLVyO9^I0ZE!A%vnvH262^fN5WE(@!^hiUwUxqX_&V?@a zVep6D=erzEqd4a%zu>8b4@x%SCJIlrEkx6QmvQz?nU>F9cgAvm{6XO2kEowmtkcq=KmLG?#7-u!%{mxPr=fOv?>lo{{^5w2#vq*9}zA>7JH z^>~C)A-uJayJJ04XQp1Qk(b8m>e6cS&`9R{HebhmC*oDJlF}K&ms9!&Qs`XaG~*c+ zlNqPk!mM}bVkfL{;*ARNY^sBpyvY77@5#M950z|uxrb7q&5M704G6U<;L;EFvL_?R zSH-L%OOqVLy6?PtAH-BQczd(=h?+Sp)~FVA0H-B{>-IggH%Yrkc;rgib?kD!(qodd zm=(N`A-?4+*DJgyj}QEu-PM}T*ngH_TuWZbR{Bae$(Zf-b(sFBXUi^??5!c8@h6L? z3TM|A5>%HAA~7c#;sxRnMW<|jdC%l@Q{x=fFiqqYx(Vj;M5&_zXNc)Dk*o%xVz-lY zwaid93*T6_*<&}m zsk-u9Z)#YL%L~HlZ`u#O>jA8GcY(ri4fmnNA7p1%=|o(N-jXLYEndFwQo@58+Ot19 z^~xp2b<091g;8J^NKJilW?{{h;~~z?zt^H)5$A~#H9c`=Xq26dUoL?X-i*3sxU|Lk z>i@lZ&N?bkC;vyor#cXe$vmC+)?I*Z!euhoSo`B_vh)ttMEYP{Fi|#HySux3#Y*vo zvYhQ`RzYj}!3t<0F)(pOL0%OFUWS83!Cm~k5Eu9Eu@JEjIOuE_H| z)~tDF8Q(~yUgf9V!tsGQHMH>wc3R~#YfK`#Vx2cRt!#CCPM=KbZOKJr2UVV^?zbfA zdp{DW&^T|jlHm?z21og|T8M6YU&kEY@wTStIT524;4Z@WQTTxfNiPzfpdg4!`6xR|-Mnq+ zsPVHZw@cY*#g5(()$E}|BnCE(Ly&IG8rAU9bK&tPcAqB=lNXdkV zs3|Mt`^BxTtvIt4Edd%#fIXAkqN&Dze-&+gV6{(T8LL(%V{#X^v=tlmL}F*rj9Au> zQ?1)Vhk<2dy;<0UTZR9k;umf*Xt! zG8yZQnqxq zxasRc_yh-^Gilvj@eQGFC;M{{)-dO_5b)i8>B;+zclCjTr-UOM2)+$&K*}XhYR5wa z3$Mf9PiCK#Tkbm%6|=#qn>VLblJzqOtn~%hU*GhPBF(WIv|zR_$R-Q#7L^;|mPCOG zYWIYIkzOsulXbWT2H7>Y`C}#A@pH#;$$L|NrFiH3mwi9U$kpgmNK$DdUj-H-bZ&!T-<_| z5c?kOR#X8tZ~e%PmYjiLg~*SshSt4vZl1mnKDIQVM>)C5@+pIXM z)ssXy)LT<1y0K8Oth-Mn73W)Xo9@7B!Oc1#``@p={?HQm$z2}$&Bo{Iq&{8 zW)$x}i`AC#6xtoTu%eTzyU~cEd4>v~#cI*9Q&{)%nepmxx+gcxCpqv}ff>OVb+cL1 zBZfUc>3gW502p2}H+f*qAvfj|Lnp49X_zD-6NOTTaxw<&lX#|=kpzt z2yLF9X8)63x(o0F9xn=&N~P&wCYOazE*?nYi^~8D4DUXFJ};TX_l5fGdK5(e+wbGm zJW$gMPLzUP3HQAcM;9Xr3YPABgLYn4hAM*Jl(W~EVy+7d$oW9RjNd16JKyhk4Zj+|E(uk?tJ-^v-!mHL^aQsqt*95#ogY- z|B2r(@R$6d$j1TlL`>D-TYbUd@>^voF%*Xu>&eNJUuyfjaxFw3Lbn%shx8h_{5UQC z`(97<_E9%uT1hf~&K1Kq>ZDr?wdN%2_g4bc+l=ecJ#)KhGY~V`tWWmbjxcIY*37%C z$@ge>tV%0mRzxxCSi^Wo%xR*O2O7ea#d@JF^Y}57{2Z0V$&KiNZC!8TrL5o4CNh5a zk4gnnPV(PB%J0!l&koMm4qd>-IAV+KWwU% z)u1l*N|ut%VN6%I?_fz_AeJl}<}=vtn-0{29KRRsD}=S^2wMQsc4t@*F-jjMmtgLbU|YK#dKK>OQYn-MeZ|}sKVPEomh;TZrk{0a$ea(R zW`g{B<~O1YBaTAPf~S?CMf2w7=8>l3|6&eJK_2Swf{c*;A@L`eZwxa4 zPD%+sQ%tNF#;fZh`xOe>O^b=7b$H=Cof%;?F8C$9IRx8ylpi3=ixF-h2}X{VkbR)GmAwikvq#nc)mYP!zoag=Ckwh zA7`(9Y}=)T*M#v|{8aqjg8S~#*d_OsbRhdKJdJhJszwFlP`AotV_Dxc{-XJE-8kBcn7tI;*I>L$Ny5HKVW6!z^P z3UAibYRo}KwqBtH*Og$z-y=#%=`}Vl1M+X3-jP9lKlIOBDa)z4qs`ab zL(~!OH?G|Q4xne+AZztsl!d3kEyPOXjPvY+!%lcoKAN+Ni_`IdI;f!)5bNk8c<5n4+%chlmm*=6) zoEJtmS$#L^)~TH2A6llWPmZ_xBNcC(8_J9<(weCRHAX;#n|!8qt2Lsi^`i?^YGT|z zQdglRM_mXvckRyIUt=#6pIsfNWnWg)opb17C_H&NS8;3g7MjulklOwm*HuCR^e*$s zUkC9)9K7vS8Wn}Rs9l*J;nRGJRYI*ib0{U|vuA3&Yo#+lzW}!YBMmdy2PZx{MU4*B z%H#dG=k?EL-E_;pvoDvtHF)*<=}@J3FbA zdHQ(wRZk6b$3|^)-Tk3rzicqDfT!Bk=~3##$zNjH;au2IuiV}w0>q4k912H+M1C zyB1W}?g)fX&H)ogYdXQX%Ku$Z45lDujkPZ1nH%_2uX@VyBZz<}X;U{R*z2RV<*K8a zQ(1_jyp;!QD@BM$2Ofb4s*m24TQjtTgVJN14Pk0{-Wuz4PI*%2?Sl4>V zX(~^^$o`qz)t)N}+N$Q)I{tahlzz)$KaSKTQE4jSWGj*>57q+*_#vS~P{1Oic6k?0Rb!WU6AX$t?A@Vf`y9)7K`%<)>i`joe&Fsb>ex zGwPJ5m{olLs}Nn|lF1Iekiq2A_+JaUw<>-YRRthx+ROfpEt&U4u9zSnyT;)5$z#gnXrsTjKA ziJ;AEimqQ{2JIYh_q7wbK5tm`ftIE}U8Iao8ORfH7Y-*+|G`NZcTm^i11xc zzC{fC!nVSMSO-E9=Pf1YN$V!|LmPXtCYHN@=5Gd$^}8dAAPSF;^1o3L#8uM^wpi@& zW<3C+0-?|%c_{O4P(Zo>?zU2|xy|8NCZC1qUJJQi3(<{^924RwwIQvX1RK4fwsP8i zzk?VBLDNyom@T=a^Q04B+t+jHoyrrS6^I$Tl=Yc2JDdY@f2`H>5Neo}9paK)Z&XZt zpqOhy1bPGPf>%m5fac5=tPc|3n`9ccLSq>dM*1U+Y_t4V`wrhc{61)hP9IXg<6Mzr z3P3a`GG(V1-r8WQKe^0!C!3}9t=>%|&owt0D%HCN$SomY2Qg{Cj9$NEr;C2eTx})6 z8r(>xThp$Mfq<^NWhycZmV@{tL!+5gK!$=FLu&qv>^W>T2&hyfSX%d+(X2Nk{6l!D zI`T>=0+0YggOj06Zj~V#V^OT(4%<~uZ6rAQ##6QGbnO{$2QhVtw4p_RZ(=QqR@MWr zh@wt}aL4s*skxxG1veIUz;Fn^%g(?HOS3LBZmPeZsb9mga|6#|17aJJbb#>_ z4uy7Ufw0tskAhb1Ug+eNF$SDTSb`g~oaK5m6B=P(wS)l1k2t~y)TWOQzGp`zVDkvw zg?Ok`#&3STI&#>|#!Z*#2Dk2_;owNKViIpE?wH0n&=pXbL<0E?=e;sTTL^Xu$T1&u z&5ch?l;kzD9b(3H0J0opj8hj>V5gkjl?8wFQ&Qx+fov$LJf9stsYhPw^ahIN>O_Wj zplc%uMw0e*-vV~HSyI5zk&ET)!m=$a0rFjpXDYS#v;ANZ% z#OXGCp?r>cF%i%tZZA}gQWqn_8>;^Tvutb@w0)lCgmNdrFeF%Dg;rx}U4Er|rL!8> z3i56}iWz5?mlqc_p0dt~8Buw!|HEeJhiz0f){{YIv8P33cIql5(yYX+vcGL(}I;vg)3}EGic5ry48Ws*TLVRnQ+|z&+ zM=E!{L4U)$(fk&cyrpxPR1&f$hU<}fM_&NYx!12KA2C3FGI#JW68om$zQ^EcUDZV5 zh*QLYQ@?y`#{M=qGM-!CY9$H2bILb9Nz=HVFV9eocNmRE)(R8CWILd7K0ow91mUd~ zh{uZ;##tUyW3K9yh6XOmc&F;dyr|Q6kN%x#lZnT6uDRj~oq`_6^T@TD41JBMk`OF@ zftL_qk);II2_aihx`=(=SeC1#i(gfC=D$@=coo-Q=TNzS_Z^c$yXCk2dbR}Y6~4&8 zbE13U`z$k!IXA~seib~NQ-|Q2cnRO6s=08?KY$e8f-DDulXNXbFVK!29jKv1Cdr9?WlEIeoY88?X+>1vEu+03d<-#0VY#*#Mk%Dyop(gBYl zlJJi>}Q>z zwukz4{2DPYRP@2y9BG74_noD3aDrm<0ifMtSWH}gb~j52?pVW27zBRI3A}4Adv_Ng z-g>q`l0gQ|K+sdn79e3!H$Tw0G04Fixv|0bWd|ZW)H|AML*^4FnoBuU2C9j*mY2KC zPPwG!*OynwWPG#D9T%X?k)`dEG3nX>Jfq}sV=Tn1%7(srfpdtsV5TcQY9}^eS6rbQ zkXyI5Fxbw`73`iF;E=lG3$lcC&N(VhS>|BUhvO)7j9v(#e(6 zlg7d?op1cs2hG}M>hx?A`)V_xDvFx1VGz3bcTSyy*tjc!;|uqHy=vHUlz-Pmf3`Jn zGqlH*SbNuOS<=6k8G}ALP(Le4*b5=a(}@4d8DvxfF#r1I@Evi@@k;msxs1Y~d&1LBxyd_7pUO zc7BFYW<^kJS@X!n$>~vTwHcUt`)Uqh7 zgpjyBS}j~_F9PD0DEi3;GEaKkcsieX_4S@uB39a{vM*3ifZ9~nob9|PJYWA?u85nA zjVvX5Plc8xucb7Ut9?E`JX^Fg_1M4I{a=Rvzu&eK5kI)nVGuh<;O{X!Hdc1$tIqk{ F|1X0~eJcO} literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/st-refresh_voting_power/00003.png b/tests_zemu/snapshots/st-refresh_voting_power/00003.png new file mode 100644 index 0000000000000000000000000000000000000000..4320cd45d257fd40aab0a18539b4d6e3b9c64d90 GIT binary patch literal 11948 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 literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/x-refresh_voting_power/00001.png b/tests_zemu/snapshots/x-refresh_voting_power/00001.png new file mode 100644 index 0000000000000000000000000000000000000000..72796626555dd6af33cde112c374d3ebe32b5d8d GIT binary patch literal 648 zcmV;30(bq1P)@A=3iM6U>tjhy2E000000AM;_UWJqr8#&K2 zD42GxsNN9CBvMM{Oza!L!k^>b0T*n=rIgO|%!BmDh%$M+loWLjY3EU~G9HU}#WFKh z#wNNu{JZemC9S}MxM1T~7E0YLT+_{2px-h@7KzJy&9zwB*hd=Mp)M4WAD6U_xFRel ztITUnR3CJ0V6)q1Bys{S^lUO{Sx~CeWLOn7ss;gUg!ogCdeDJ9-E8CyP%IpxnGLCqO31LZ)U>D4ig}-_KXPt z0Q->$7Rfdj_HX}P9XFoKd-C!)0U^DC$;7uJ81#m^>~PiE58_90gmSs4wdbf=)+Keh zu6bXKxcZbgE-givjaXdkPQ3!1MD76P^ysxfN4&kDQsvF%D83ynwn|(UN`swS{*4vm zW=JzGcEx!Oh6gYdz5`+(U(}ug8inn;x+(pN+8MTshxBf=aQ3B|WMqFDLaLGd$zTpv zf-1C(-l;oZ<0;+ZQqO3NnYQ9njm&PtYs zD19GwBwUZZv)C}GmpF@&^3~`lis3sTFXz}MheF6|omRexO;;%5%yc!Cw;>v*o{|-~I;$0000000000 i0000000000z|AkwAa$DPu%g`n0000bYKhu_fnOGony$GmW802{qNbamW3cO(J#+?dEr@0xY2h&ic4h_ zYDe=SPqeAgv(^s)0N_xaY^ZoLtL19iWkiMTlI62ttq+Ydk9uwyi~4LT9*)&SZ{za5 zy9za7P%GR$)2=N~NYoDOg^g{^9!p#6huGMkB%Z0U*$oXG%i~;7ZJ&w`mD{tni$!gM zNIR=7s%7jwZ;wSiV;swvWVpJOx;w7+v0dA!5cE#ZyJytqEd5kX$pxw3PAO=fl`a;B zkHsS$ZP~x47(N!c0PRZ0hPm?EGMblXELXkO^LIvP>F3p5v!jEn%Q^8 z8mvSVTB$S1tie>}^m@M=I)pJDf+;LHiGytPTFQ6Y?#(!hF^PbX0`eJS}y70`%8T>n^%dV>bk>TM}C(cF@9*Jbj^5WTF;gKGIO)y zjlJ*9*PE9W@jdm~5r5wEu#TD8y6+Pnh8_O<-8#^Bx$bnOy3REWn^jXeAFev)TXe-F zTky7j?62N_lL@yzwx7O!=&4O1W7^|)7fcr%%i5*3D%0_G;tl)cpW3Io3*7!cdXW1o sV&B=e%knGs=l(tai5cc!1_ryAe9w9}zGZ%X&;TUp>FVdQ&MBb@086r+N&o-= literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/x-refresh_voting_power/00004.png b/tests_zemu/snapshots/x-refresh_voting_power/00004.png new file mode 100644 index 0000000000000000000000000000000000000000..4c3747edad754c34867ec5f1a66fbe0bb59f7edd GIT binary patch literal 472 zcmV;}0Vn>6P)NklWPJwn1du000000JxKn=m8widp~r1 zYwblNxzK0y0Pc*P_TM4;LVVLU?czl?jqeS za-k=ts|?>a`zHL-427hBC>;hri0MjB?_Ceh);Q%b+oFp?wjcdj^Ujyq2f1aN0Wz$e ze&3>_Km5Cyc|G*wo@hH?Mt^#xSCaFWEt4RodP_509F-CvPG7L$)ge1Ib1gx0b>lAV zNU|qDmh54>K6(S=o;Y+4004kxVroI|k7}{V`upz8clwD+5pMl*D0AuqCbd%ctl?44 zo*42wyDU$_kD?>R6I(^u{TZy&CDk=jB*6V`;q#r$4|CV0^`+@VOVDCTHvbeez{cW4 zbpCltlDLb21k4MQ+rb#QE06nT?fH@_etD1ZrC5UQj06Ax0001hg}wnoqe+{v@krbN O0000 Date: Mon, 10 Feb 2025 12:23:27 -0600 Subject: [PATCH 4/6] shore: fix warnings and unused arguments --- app/src/candid/nns_parser.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/app/src/candid/nns_parser.c b/app/src/candid/nns_parser.c index fd96cb03..a5ca57ca 100644 --- a/app/src/candid/nns_parser.c +++ b/app/src/candid/nns_parser.c @@ -346,7 +346,7 @@ __Z_INLINE parser_error_t readCommandFollow(parser_context_t *ctx, candid_transa // Note: // according to spec this should ve an empty record // https://github.com/dfinity/ic/blob/master/rs/nns/governance/canister/governance.did#L111 -__Z_INLINE parser_error_t readCommandRefreshVotingPower(parser_context_t *ctx, candid_transaction_t *txn, candid_ManageNeuron_t* val) { +__Z_INLINE parser_error_t readCommandRefreshVotingPower(__Z_UNUSED parser_context_t *ctx, candid_transaction_t *txn, __Z_UNUSED candid_ManageNeuron_t* val) { // Check that this is an empty record type CHECK_PARSER_ERR(getCandidTypeFromTable(txn, txn->element.implementation)) @@ -568,7 +568,6 @@ parser_error_t readNNSManageNeuron(parser_context_t *ctx, candid_transaction_t * if (val->has_id) { CHECK_PARSER_ERR(readCandidNat64(ctx, &val->id.id)) } - ZEMU_LOGF(50, "ID: %d\n", val->id.id); // Check sanity Command CHECK_PARSER_ERR(getCandidTypeFromTable(txn, ctx->tx_obj->candid_rootType)) @@ -637,7 +636,6 @@ parser_error_t readNNSManageNeuron(parser_context_t *ctx, candid_transaction_t * break; default: - ZEMU_LOGF(100, "Unimplemented command | Hash: %d%d\n", val->command.hash >> 32 , val->command.hash & 0xFFFFFFFF) return parser_unexpected_type; } } From 5d357ef0cd343c184f19e1412ba8e7463c524c66 Mon Sep 17 00:00:00 2001 From: Natanael Mojica Date: Thu, 13 Feb 2025 14:39:35 -0600 Subject: [PATCH 5/6] Update app/src/candid/nns_parser.c MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Andrés Benso --- app/src/candid/nns_parser.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/candid/nns_parser.c b/app/src/candid/nns_parser.c index a5ca57ca..fd1a72d9 100644 --- a/app/src/candid/nns_parser.c +++ b/app/src/candid/nns_parser.c @@ -344,7 +344,7 @@ __Z_INLINE parser_error_t readCommandFollow(parser_context_t *ctx, candid_transa } // Note: -// according to spec this should ve an empty record +// according to spec this should be an empty record // https://github.com/dfinity/ic/blob/master/rs/nns/governance/canister/governance.did#L111 __Z_INLINE parser_error_t readCommandRefreshVotingPower(__Z_UNUSED parser_context_t *ctx, candid_transaction_t *txn, __Z_UNUSED candid_ManageNeuron_t* val) { // Check that this is an empty record type From c5734136e00b3fc4004400ee4f3458907165e25a Mon Sep 17 00:00:00 2001 From: Natanael Mojica Date: Thu, 13 Feb 2025 14:39:57 -0600 Subject: [PATCH 6/6] Update app/src/candid/nns_parser.c MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Andrés Benso --- app/src/candid/nns_parser.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/src/candid/nns_parser.c b/app/src/candid/nns_parser.c index fd1a72d9..7a38feb4 100644 --- a/app/src/candid/nns_parser.c +++ b/app/src/candid/nns_parser.c @@ -347,7 +347,9 @@ __Z_INLINE parser_error_t readCommandFollow(parser_context_t *ctx, candid_transa // according to spec this should be an empty record // https://github.com/dfinity/ic/blob/master/rs/nns/governance/canister/governance.did#L111 __Z_INLINE parser_error_t readCommandRefreshVotingPower(__Z_UNUSED parser_context_t *ctx, candid_transaction_t *txn, __Z_UNUSED candid_ManageNeuron_t* val) { - // Check that this is an empty record type + if (txn == NULL) { + return parser_unexpected_error; + } CHECK_PARSER_ERR(getCandidTypeFromTable(txn, txn->element.implementation)) // Read record length - for empty record this should be 0